diff --git a/.dockerignore b/.dockerignore index 58ecfac..62aacce 100644 --- a/.dockerignore +++ b/.dockerignore @@ -5,12 +5,12 @@ **/.git .DS_Store -# Do not send local node_modules / build outputs (Docker runs npm ci + build) +# Do not send unused frontend source build artifacts QuantDinger-Vue-src/node_modules QuantDinger-Vue-src/dist -# Pre-built copy used for local nginx tests only — image builds from source -frontend/dist +# The open-source repo ships prebuilt frontend assets in `frontend/dist`, +# and the frontend image copies them directly, so keep this directory included. # Backend & DB not needed for frontend stage backend_api_python diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..a7f6968 --- /dev/null +++ b/.env.example @@ -0,0 +1,21 @@ +# +# Project-root Docker/Compose overrides +# Copy to `.env` only when you need custom ports or want to switch image source. +# + +# Optional custom ports +# FRONTEND_PORT=8888 +# BACKEND_PORT=127.0.0.1:5000 +# DB_PORT=127.0.0.1:5432 + +# Global image source switch +# Leave empty for official Docker Hub: +# IMAGE_PREFIX= +# +# Common alternatives (pick one, keep trailing slash): +# IMAGE_PREFIX=docker.m.daocloud.io/library/ +# IMAGE_PREFIX=docker.xuanyuan.me/library/ +# +# Important: +# - This file lives in the project root and is used by docker-compose build/pull. +# - `backend_api_python/.env` is runtime config for the backend container only. diff --git a/README.md b/README.md index 9eeb7b9..e8c2077 100644 --- a/README.md +++ b/README.md @@ -70,25 +70,40 @@ git clone https://github.com/brokermr810/QuantDinger.git cd QuantDinger -# 2. Configure (edit admin password & AI API key) +# 2. Copy backend config cp backend_api_python/env.example backend_api_python/.env -# 3. IMPORTANT: Generate and set a secure SECRET_KEY -# Linux/Mac: -python3 -c "import secrets; print(secrets.token_hex(32))" | xargs -I {} sed -i 's|SECRET_KEY=.*|SECRET_KEY={}|' backend_api_python/.env - -# Or manually edit backend_api_python/.env and replace SECRET_KEY value -# Windows PowerShell: -# $key = python -c "import secrets; print(secrets.token_hex(32))" -# (Get-Content backend_api_python\.env) -replace 'SECRET_KEY=.*', "SECRET_KEY=$key" | Set-Content backend_api_python\.env +# 3. Generate and write a secure SECRET_KEY +./scripts/generate-secret-key.sh # 4. Launch! docker-compose up -d --build ``` +> **Linux/macOS**: +> - Copy backend config: +> `cp backend_api_python/env.example backend_api_python/.env` +> - Need more knobs? Scroll to the lower "Advanced / rarely changed" section inside: +> `backend_api_python/env.example` +> - Optional: if Docker Hub is slow/unreachable in your network, copy root Docker config: +> `cp .env.example .env` +> - Generate and write `SECRET_KEY`: +> `./scripts/generate-secret-key.sh` +> - Launch: +> `docker-compose up -d --build` + > **Windows PowerShell**: -> - Copy: `Copy-Item backend_api_python\env.example -Destination backend_api_python\.env` -> - Generate SECRET_KEY: `python -c "import secrets; print(secrets.token_hex(32))"` then edit `.env` manually +> - Copy backend config: +> `Copy-Item backend_api_python\env.example -Destination backend_api_python\.env` +> - Need more knobs? Scroll to the lower "Advanced / rarely changed" section inside: +> `backend_api_python\env.example` +> - Optional: if Docker Hub is slow/unreachable in your network, copy root Docker config: +> `Copy-Item .env.example -Destination .env` +> - Generate and write `SECRET_KEY`: +> `$key = py -c "import secrets; print(secrets.token_hex(32))"` +> `(Get-Content backend_api_python\.env) -replace '^SECRET_KEY=.*$', "SECRET_KEY=$key" | Set-Content backend_api_python\.env -Encoding UTF8` +> - Launch: +> `docker-compose up -d --build` > **⚠️ Security Note**: The container will **NOT start** if `SECRET_KEY` is using the default value. This prevents insecure deployments. @@ -161,6 +176,42 @@ FRONTEND_PORT=3000 # Default: 8888 BACKEND_PORT=127.0.0.1:5001 # Default: 5000 ``` +**Alternative image sources** — Default uses Docker Hub. If pulling base images fails in your region/network, copy `.env.example` to `.env` and change one line: +```ini +IMAGE_PREFIX=docker.m.daocloud.io/library/ +``` + +Other common choices: +```ini +IMAGE_PREFIX= +IMAGE_PREFIX=docker.xuanyuan.me/library/ +``` + +**Docker troubleshooting** +```text +1. Image source switching is controlled by the project-root `.env`, not `backend_api_python/.env`. +2. The open-source repo ships prebuilt frontend files in `frontend/dist`, so frontend deployment does not require Node.js. +3. On Windows, if backend logs show: + exec /usr/local/bin/docker-entrypoint.sh: no such file or directory + it is usually caused by shell/line-ending compatibility in the image layer. Rebuild the backend image with: + docker-compose build --no-cache backend +4. If frontend logs show: + host not found in upstream "backend" + it usually means the backend container failed first. Fix backend, then restart frontend: + docker-compose restart frontend +5. If frontend build fails with: + COPY frontend/dist ... not found + check `.dockerignore` and make sure `frontend/dist` is NOT excluded from the Docker build context. +6. If saving settings from the admin panel fails with: + Read-only file system: '/app/.env' + make sure `backend_api_python/.env` is mounted read-write in `docker-compose.yml`. +7. For Docker deployments, a local proxy must use `host.docker.internal`, not `127.0.0.1`. + Example: + PROXY_URL=socks5h://host.docker.internal:10808 +8. If exchange logs say a symbol is "not found" after proxy/network fixes, it may be a market-symbol mapping issue + on that exchange (for example, renamed tokens), not a general network failure. +``` + --- @@ -370,6 +421,14 @@ flowchart TB | **Forex** | MetaTrader 5 (MT5), OANDA | ✅ Via MT5 | | **Futures** | Exchange APIs | ⚡ Data + Notify | +### Exchange Rebate Links + +If you are opening a new exchange account, use a rebate link from the start. Many traders actively look for fee-rebate links anyway, and these links give you a straightforward 20% trading fee discount at no extra cost. + +- **OKX**: [Open account with 20% fee rebate](https://www.promooboost.com/join/QUANTDINGER) +- **Bitget**: [Open account with 20% fee rebate](https://partner.bitget.com/bg/dinger) +- **Bitget (backup link)**: [Alternate 20% fee rebate signup link](https://partner.hdmune.cn/bg/7r4xz8kd) + --- ## 🏗️ Architecture & Configuration @@ -427,7 +486,8 @@ QuantDinger/
⚙️ Configuration Reference (.env) -Use `backend_api_python/env.example` as template: +Use `backend_api_python/env.example` as the simplified template. +The upper part is for first-time deployment, and the lower "Advanced / rarely changed" section contains optional tuning. | Category | Key Variables | |----------|-----------| @@ -438,7 +498,7 @@ Use `backend_api_python/env.example` as template: | **Security** | `TURNSTILE_SITE_KEY`, `ENABLE_REGISTRATION` | | **Membership** | `MEMBERSHIP_MONTHLY_PRICE_USD`, `MEMBERSHIP_MONTHLY_CREDITS` | | **USDT Payment** | `USDT_PAY_ENABLED`, `USDT_TRC20_XPUB`, `TRONGRID_API_KEY` | -| **Proxy** | `PROXY_PORT` or `PROXY_URL` | +| **Proxy** | `PROXY_URL` | | **Workers** | `ENABLE_PENDING_ORDER_WORKER`, `ENABLE_PORTFOLIO_MONITOR` |
@@ -470,6 +530,7 @@ All detailed guides are in the [`docs/`](docs/) folder: |----------|-------------| | [Changelog](docs/CHANGELOG.md) | Version history & migration notes | | [Multi-User Setup](docs/multi-user-setup.md) | PostgreSQL multi-user deployment | +| [Cloud Deployment](docs/CLOUD_DEPLOYMENT_EN.md) | Cloud server deployment with domain, HTTPS, and reverse proxy | ### Strategy Development diff --git a/backend_api_python/Dockerfile b/backend_api_python/Dockerfile index ce5b0cf..814d473 100644 --- a/backend_api_python/Dockerfile +++ b/backend_api_python/Dockerfile @@ -1,5 +1,7 @@ # QuantDinger Backend API Dockerfile -FROM python:3.12-slim-bookworm +# BASE_IMAGE can be overridden from docker-compose/.env. +ARG BASE_IMAGE=python:3.12-slim-bookworm +FROM ${BASE_IMAGE} # Set working directory WORKDIR /app @@ -31,7 +33,8 @@ COPY . . # Copy and set up entrypoint script COPY docker-entrypoint.sh /usr/local/bin/ -RUN chmod +x /usr/local/bin/docker-entrypoint.sh +RUN sed -i 's/\r$//' /usr/local/bin/docker-entrypoint.sh \ + && chmod +x /usr/local/bin/docker-entrypoint.sh # Create log and data directories RUN mkdir -p logs data/memory diff --git a/backend_api_python/README.md b/backend_api_python/README.md index 73eaac1..dc10fd4 100644 --- a/backend_api_python/README.md +++ b/backend_api_python/README.md @@ -208,7 +208,7 @@ gunicorn -c gunicorn_config.py "run:app" ## Troubleshooting - **Database connection failed**: Check `DATABASE_URL` format and PostgreSQL service status -- **Outbound requests fail**: Configure `PROXY_PORT` or `PROXY_URL` in `.env` +- **Outbound requests fail**: Configure `PROXY_URL` in `.env` - **Disable auto-restore**: Set `DISABLE_RESTORE_RUNNING_STRATEGIES=true` - **Disable pending-order worker**: Set `ENABLE_PENDING_ORDER_WORKER=false` diff --git a/backend_api_python/app/config/api_keys.py b/backend_api_python/app/config/api_keys.py index f4eebfa..865e181 100644 --- a/backend_api_python/app/config/api_keys.py +++ b/backend_api_python/app/config/api_keys.py @@ -81,18 +81,6 @@ class MetaAPIKeys(type): return [k.strip() for k in val.split(',') if k.strip()] return [] - @property - def BOCHA_API_KEYS(cls): - """Bocha Search API keys (comma-separated for rotation)""" - env_val = os.getenv('BOCHA_API_KEYS', '').strip() - if env_val: - return [k.strip() for k in env_val.split(',') if k.strip()] - from app.utils.config_loader import load_addon_config - val = load_addon_config().get('bocha', {}).get('api_keys', '') - if val: - return [k.strip() for k in val.split(',') if k.strip()] - return [] - @property def SERPAPI_KEYS(cls): """SerpAPI keys (comma-separated for rotation)""" diff --git a/backend_api_python/app/config/data_sources.py b/backend_api_python/app/config/data_sources.py index 542f348..ff114f9 100644 --- a/backend_api_python/app/config/data_sources.py +++ b/backend_api_python/app/config/data_sources.py @@ -130,30 +130,13 @@ class MetaCCXTConfig(type): @property def PROXY(cls): - from app.utils.config_loader import load_addon_config - val = load_addon_config().get('ccxt', {}).get('proxy') - if val: - return val - - # 1) Direct CCXT proxy env - ccxt_proxy = (os.getenv('CCXT_PROXY') or '').strip() - if ccxt_proxy: - return ccxt_proxy - - # 2) Local proxy helpers from backend_api_python/.env + # 1) Local proxy helpers from backend_api_python/.env # PROXY_URL has the highest priority if provided. proxy_url = (os.getenv('PROXY_URL') or '').strip() if proxy_url: return proxy_url - # Build from parts: PROXY_SCHEME/PROXY_HOST/PROXY_PORT - proxy_port = (os.getenv('PROXY_PORT') or '').strip() - if proxy_port: - proxy_scheme = (os.getenv('PROXY_SCHEME') or 'socks5h').strip() - proxy_host = (os.getenv('PROXY_HOST') or '127.0.0.1').strip() - return f"{proxy_scheme}://{proxy_host}:{proxy_port}" - - # 3) Standard proxy envs (fallback) + # 2) Standard proxy envs (fallback) for key in ['HTTPS_PROXY', 'HTTP_PROXY', 'ALL_PROXY']: v = (os.getenv(key) or '').strip() if v: diff --git a/backend_api_python/app/config/settings.py b/backend_api_python/app/config/settings.py index 63bf82a..aeb0242 100644 --- a/backend_api_python/app/config/settings.py +++ b/backend_api_python/app/config/settings.py @@ -65,12 +65,6 @@ class MetaConfig(type): # ==================== 安全配置 ==================== - @property - def CORS_ORIGINS(cls): - from app.utils.config_loader import load_addon_config - val = load_addon_config().get('app', {}).get('cors_origins') - return val if val else os.getenv('CORS_ORIGINS', '*') - @property def RATE_LIMIT(cls): from app.utils.config_loader import load_addon_config @@ -95,15 +89,6 @@ class MetaConfig(type): return bool(val) return os.getenv('ENABLE_REQUEST_LOG', 'True').lower() == 'true' - @property - def ENABLE_AI_ANALYSIS(cls): - from app.utils.config_loader import load_addon_config - val = load_addon_config().get('app', {}).get('enable_ai_analysis') - if val is not None: - return bool(val) - return os.getenv('ENABLE_AI_ANALYSIS', 'True').lower() == 'true' - - class Config(metaclass=MetaConfig): """应用配置类""" diff --git a/backend_api_python/app/routes/settings.py b/backend_api_python/app/routes/settings.py index cb1e211..fde6b31 100644 --- a/backend_api_python/app/routes/settings.py +++ b/backend_api_python/app/routes/settings.py @@ -65,7 +65,7 @@ CONFIG_SCHEMA = { # ==================== 2. AI/LLM 配置 ==================== 'ai': { - 'title': 'AI / LLM Configuration', + 'title': 'AI / LLM & Search', 'icon': 'robot', 'order': 2, 'items': [ @@ -212,14 +212,6 @@ CONFIG_SCHEMA = { 'default': '0.7', 'description': 'Model creativity (0-1). Lower = more deterministic' }, - { - 'key': 'AI_MODELS_JSON', - 'label': 'Custom Models (JSON)', - 'type': 'text', - 'default': '{}', - 'required': False, - 'description': 'Custom model list in JSON format for model selector' - }, { 'key': 'AI_ANALYSIS_CONSENSUS_TIMEFRAMES', 'label': 'Consensus Timeframes', @@ -228,6 +220,66 @@ CONFIG_SCHEMA = { 'required': False, 'description': 'Multi-timeframe consensus for fast AI analysis. Comma-separated, e.g. "1D,4H"' }, + { + 'key': 'SEARCH_PROVIDER', + 'label': 'Search Provider', + 'type': 'select', + 'options': ['tavily', 'google', 'bing', 'none'], + 'default': 'google', + 'description': 'News / web search provider used by AI analysis. Configure both LLM and search to get full AI analysis results' + }, + { + 'key': 'SEARCH_MAX_RESULTS', + 'label': 'Search Max Results', + 'type': 'number', + 'default': '10', + 'description': 'Maximum number of search/news results returned per AI analysis request' + }, + { + 'key': 'TAVILY_API_KEYS', + 'label': 'Tavily API Keys', + 'type': 'password', + 'required': False, + 'link': 'https://tavily.com/', + 'link_text': 'settings.link.getApiKey', + 'description': 'Tavily search API keys (comma-separated). Recommended lightweight search source for AI analysis' + }, + { + 'key': 'SEARCH_GOOGLE_API_KEY', + 'label': 'Google Search API Key', + 'type': 'password', + 'required': False, + 'link': 'https://console.cloud.google.com/apis/credentials', + 'link_text': 'settings.link.getApiKey', + 'description': 'Google Custom Search JSON API key' + }, + { + 'key': 'SEARCH_GOOGLE_CX', + 'label': 'Google Search Engine ID (CX)', + 'type': 'text', + 'required': False, + 'link': 'https://programmablesearchengine.google.com/', + 'link_text': 'settings.link.getApiKey', + 'description': 'Google Programmable Search Engine ID' + }, + { + 'key': 'SEARCH_BING_API_KEY', + 'label': 'Bing Search API Key', + 'type': 'password', + 'required': False, + 'link': 'https://portal.azure.com/', + 'link_text': 'settings.link.getApiKey', + 'description': 'Microsoft Bing Web Search API key' + }, + { + 'key': 'SERPAPI_KEYS', + 'label': 'SerpAPI Keys', + 'type': 'password', + 'required': False, + 'link': 'https://serpapi.com/', + 'link_text': 'settings.link.getApiKey', + 'description': 'SerpAPI keys (comma-separated)' + }, ] }, @@ -270,13 +322,6 @@ CONFIG_SCHEMA = { 'link_text': 'settings.link.supportedExchanges', 'description': 'Default exchange for crypto data (binance, coinbase, okx, etc.)' }, - { - 'key': 'CCXT_PROXY', - 'label': 'Crypto Data Proxy', - 'type': 'text', - 'required': False, - 'description': 'Proxy URL for crypto data requests (e.g. socks5h://127.0.0.1:1080)' - }, { 'key': 'FINNHUB_API_KEY', 'label': 'Finnhub API Key', @@ -422,42 +467,7 @@ CONFIG_SCHEMA = { 'label': 'Proxy URL', 'type': 'text', 'required': False, - 'description': 'Global proxy URL (e.g. socks5h://127.0.0.1:1080 or http://proxy:8080)' - }, - ] - }, - - # ==================== 9. 搜索配置 ==================== - 'search': { - 'title': 'Web Search', - 'icon': 'search', - 'order': 9, - 'items': [ - { - 'key': 'SEARCH_PROVIDER', - 'label': 'Search Provider', - 'type': 'select', - 'options': ['bocha', 'tavily', 'google', 'bing', 'none'], - 'default': 'bocha', - 'description': 'Web search provider for AI research features' - }, - { - 'key': 'TAVILY_API_KEYS', - 'label': 'Tavily API Keys', - 'type': 'password', - 'required': False, - 'link': 'https://tavily.com/', - 'link_text': 'settings.link.getApiKey', - 'description': 'Tavily Search API keys (comma-separated). Free 1000 req/month' - }, - { - 'key': 'BOCHA_API_KEYS', - 'label': 'Bocha API Keys', - 'type': 'password', - 'required': False, - 'link': 'https://bochaai.com/', - 'link_text': 'settings.link.getApiKey', - 'description': 'Bocha Search API keys (comma-separated)' + 'description': 'Global outbound proxy URL. Used by requests and by crypto data requests when a proxy is needed.' }, ] }, @@ -546,13 +556,6 @@ CONFIG_SCHEMA = { 'default': 'False', 'description': 'Enable billing system. Users need credits to use certain features' }, - { - 'key': 'BILLING_VIP_BYPASS', - 'label': 'VIP Bypass (Legacy)', - 'type': 'boolean', - 'default': 'False', - 'description': 'Legacy switch. If enabled, VIP users bypass ALL feature credit costs. Recommended OFF: VIP should only unlock VIP-free indicators.' - }, # ===== Membership Plans (3 tiers) ===== { @@ -684,13 +687,6 @@ CONFIG_SCHEMA = { 'default': '8', 'description': 'Credits per portfolio AI monitoring run' }, - { - 'key': 'RECHARGE_TELEGRAM_URL', - 'label': 'Recharge Telegram URL', - 'type': 'text', - 'default': 'https://t.me/your_support_bot', - 'description': 'Telegram URL for recharge inquiries' - }, { 'key': 'CREDITS_REGISTER_BONUS', 'label': 'Register Bonus', @@ -708,28 +704,6 @@ CONFIG_SCHEMA = { ] }, - # ==================== 12. 应用功能 ==================== - 'app': { - 'title': 'Application', - 'icon': 'appstore', - 'order': 12, - 'items': [ - { - 'key': 'CORS_ORIGINS', - 'label': 'CORS Origins', - 'type': 'text', - 'default': '*', - 'description': 'Allowed CORS origins (* for all, or comma-separated URLs)' - }, - { - 'key': 'ENABLE_AI_ANALYSIS', - 'label': 'Enable AI Analysis', - 'type': 'boolean', - 'default': 'True', - 'description': 'Enable AI-powered market analysis features' - }, - ] - }, } diff --git a/backend_api_python/app/services/ai_calibration.py b/backend_api_python/app/services/ai_calibration.py index 7419f75..d7492d6 100644 --- a/backend_api_python/app/services/ai_calibration.py +++ b/backend_api_python/app/services/ai_calibration.py @@ -71,7 +71,6 @@ class AICalibrationService: sell_threshold DECIMAL(10,4) NOT NULL, min_consensus_abs_override DECIMAL(10,4) NOT NULL, quality_hold_threshold DECIMAL(10,4) NOT NULL, - sample_count INT NOT NULL DEFAULT 0, validated_at TIMESTAMP DEFAULT NOW(), created_at TIMESTAMP DEFAULT NOW() ); @@ -281,9 +280,9 @@ class AICalibrationService: INSERT INTO qd_ai_calibration (market, buy_threshold, sell_threshold, min_consensus_abs_override, quality_hold_threshold, - sample_count, validated_at, created_at) + validated_at, created_at) VALUES - (%s, %s, %s, %s, %s, %s, NOW(), NOW()) + (%s, %s, %s, %s, %s, NOW(), NOW()) """, ( market, @@ -291,7 +290,6 @@ class AICalibrationService: sell_threshold, min_consensus_abs_override, quality_hold_threshold, - sample_count, ), ) db.commit() diff --git a/backend_api_python/app/services/analysis_memory.py b/backend_api_python/app/services/analysis_memory.py index acae9f5..1045b2e 100644 --- a/backend_api_python/app/services/analysis_memory.py +++ b/backend_api_python/app/services/analysis_memory.py @@ -58,16 +58,11 @@ class AnalysisMemory: decision VARCHAR(10) NOT NULL, confidence INT DEFAULT 50, price_at_analysis DECIMAL(24, 8), - entry_price DECIMAL(24, 8), - stop_loss DECIMAL(24, 8), - take_profit DECIMAL(24, 8), summary TEXT, reasons JSONB, - risks JSONB, scores JSONB, indicators_snapshot JSONB, raw_result JSONB, - consensus_decision VARCHAR(10), consensus_score DECIMAL(24, 8), consensus_abs DECIMAL(24, 8), agreement_ratio DECIMAL(10, 6), @@ -102,14 +97,6 @@ class AnalysisMemory: ALTER TABLE qd_analysis_memory ADD COLUMN raw_result JSONB; END IF; - -- 添加多周期共识列(如果不存在) - IF NOT EXISTS ( - SELECT 1 FROM information_schema.columns - WHERE table_name = 'qd_analysis_memory' AND column_name = 'consensus_decision' - ) THEN - ALTER TABLE qd_analysis_memory ADD COLUMN consensus_decision VARCHAR(10); - END IF; - IF NOT EXISTS ( SELECT 1 FROM information_schema.columns WHERE table_name = 'qd_analysis_memory' AND column_name = 'consensus_score' @@ -182,18 +169,13 @@ class AnalysisMemory: decision = analysis_result.get("decision") confidence = analysis_result.get("confidence") price = analysis_result.get("market_data", {}).get("current_price") - entry = analysis_result.get("trading_plan", {}).get("entry_price") - stop = analysis_result.get("trading_plan", {}).get("stop_loss") - take = analysis_result.get("trading_plan", {}).get("take_profit") summary = analysis_result.get("summary") reasons = json.dumps(analysis_result.get("reasons", [])) - risks = json.dumps(analysis_result.get("risks", [])) scores = json.dumps(analysis_result.get("scores", {})) indicators = json.dumps(analysis_result.get("indicators", {})) raw = json.dumps(analysis_result) consensus = analysis_result.get("consensus") or {} - consensus_decision = consensus.get("consensus_decision") consensus_score = consensus.get("consensus_score") consensus_abs = consensus.get("consensus_abs") agreement_ratio = consensus.get("agreement_ratio") @@ -202,15 +184,16 @@ class AnalysisMemory: cur.execute(""" INSERT INTO qd_analysis_memory ( user_id, market, symbol, decision, confidence, - price_at_analysis, entry_price, stop_loss, take_profit, - summary, reasons, risks, scores, indicators_snapshot, raw_result, - consensus_decision, consensus_score, consensus_abs, agreement_ratio, quality_multiplier - ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, - %s, %s, %s, %s, %s) + price_at_analysis, summary, reasons, scores, indicators_snapshot, raw_result, + consensus_score, consensus_abs, agreement_ratio, quality_multiplier + ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, + %s, %s, %s, %s) RETURNING id - """, (user_id, market, symbol, decision, confidence, price, entry, stop, take, - summary, reasons, risks, scores, indicators, raw, - consensus_decision, consensus_score, consensus_abs, agreement_ratio, quality_multiplier)) + """, ( + user_id, market, symbol, decision, confidence, + price, summary, reasons, scores, indicators, raw, + consensus_score, consensus_abs, agreement_ratio, quality_multiplier, + )) # 使用 lastrowid 属性获取 ID(execute 内部已经处理了 RETURNING) memory_id = cur.lastrowid diff --git a/backend_api_python/app/services/billing_service.py b/backend_api_python/app/services/billing_service.py index 531af56..41b5730 100644 --- a/backend_api_python/app/services/billing_service.py +++ b/backend_api_python/app/services/billing_service.py @@ -1,12 +1,13 @@ """ Billing Service - 统一计费服务 -管理用户积分消费、VIP状态检查、计费配置等功能。 -支持两种计费模式: -1. 积分消耗模式:每次使用功能扣除相应积分 -2. VIP免费模式:VIP用户在有效期内免费使用 +负责用户积分余额、功能扣费、会员状态与套餐发放。 +当前计费模型为: +1. 是否扣费由 `BILLING_ENABLED` 与各功能 cost 配置决定 +2. VIP/会员状态用于会员套餐与权益展示 +3. 社区指标的 `vip_free` 逻辑在社区购买流程中单独处理,不在这里做全局旁路 -计费配置存储在 .env 文件中,可通过系统设置界面配置。 +计费配置存储在 `.env` 文件中,可通过系统设置界面配置。 """ import os import time @@ -27,9 +28,7 @@ BILLING_CONFIG_PREFIX = 'BILLING_' DEFAULT_BILLING_CONFIG = { # 全局开关 'enabled': False, # 是否启用计费 - # IMPORTANT: VIP 不再默认免扣积分(VIP 仅对“VIP免费指标”生效) - 'vip_bypass': False, # VIP用户是否免费(功能计费层面的旁路,默认关闭) - + # 各功能积分消耗(0表示免费) 'cost_ai_analysis': 10, # AI分析 每次消耗积分 'cost_strategy_run': 5, # 策略运行 每次消耗积分(启动时) @@ -96,7 +95,7 @@ class BillingService: return config.get('enabled', False) def get_feature_cost(self, feature: str) -> int: - """获取功能消耗积分""" + """获取指定功能的积分消耗,0 表示免费""" config = self.get_billing_config() cost_key = f'cost_{feature}' return config.get(cost_key, 0) @@ -475,13 +474,10 @@ class BillingService: # 免费功能 if cost <= 0: return True, 'free_feature' - - # 检查VIP状态 - if config.get('vip_bypass', True): - is_vip, _ = self.get_user_vip_status(user_id) - if is_vip: - return True, 'vip_free' - + + # 说明:这里不再根据 VIP 做全局免扣积分旁路。 + # VIP / membership 仅保留为套餐、到期时间和社区 vip_free 指标权益。 + # 检查积分余额 credits = self.get_user_credits(user_id) if credits < cost: @@ -710,7 +706,7 @@ class BillingService: return {'items': [], 'total': 0, 'page': 1, 'page_size': page_size, 'total_pages': 0} def get_user_billing_info(self, user_id: int) -> Dict[str, Any]: - """获取用户计费信息(供前端显示)""" + """获取用户计费与会员信息快照(供前端显示)""" credits = self.get_user_credits(user_id) is_vip, vip_expires_at = self.get_user_vip_status(user_id) config = self.get_billing_config() @@ -720,9 +716,6 @@ class BillingService: 'is_vip': is_vip, 'vip_expires_at': vip_expires_at.isoformat() if vip_expires_at else None, 'billing_enabled': config.get('enabled', False), - 'vip_bypass': config.get('vip_bypass', False), - # Public support link for credits recharge / VIP purchase - 'recharge_telegram_url': os.getenv('RECHARGE_TELEGRAM_URL', '').strip() or 'https://t.me/your_support_bot', # 功能费用(供前端显示) 'feature_costs': { 'ai_analysis': config.get('cost_ai_analysis', 0), diff --git a/backend_api_python/app/services/live_trading/bitget.py b/backend_api_python/app/services/live_trading/bitget.py index b8f6858..b541010 100644 --- a/backend_api_python/app/services/live_trading/bitget.py +++ b/backend_api_python/app/services/live_trading/bitget.py @@ -20,6 +20,17 @@ from app.services.live_trading.symbols import to_bitget_um_symbol class BitgetMixClient(BaseRestClient): + _CHANNEL_API_CODE_ORDER_PATHS = { + "/api/v2/mix/order/place-order", + "/api/v2/mix/order/batch-place-order", + "/api/v2/mix/order/modify-order", + "/api/v2/mix/order/place-plan-order", + "/api/v2/mix/order/place-tpsl-order", + "/api/v3/trade/place-order", + "/api/v3/trade/place-batch", + "/api/v3/trade/modify-order", + } + def __init__( self, *, @@ -28,11 +39,13 @@ class BitgetMixClient(BaseRestClient): passphrase: str, base_url: str = "https://api.bitget.com", timeout_sec: float = 15.0, + channel_api_code: str = "qvz9x", ): super().__init__(base_url=base_url, timeout_sec=timeout_sec) self.api_key = (api_key or "").strip() self.secret_key = (secret_key or "").strip() self.passphrase = (passphrase or "").strip() + self.channel_api_code = (channel_api_code or "").strip() if not self.api_key or not self.secret_key or not self.passphrase: raise LiveTradingError("Missing Bitget api_key/secret_key/passphrase") @@ -172,14 +185,18 @@ class BitgetMixClient(BaseRestClient): mac = hmac.new(self.secret_key.encode("utf-8"), prehash.encode("utf-8"), hashlib.sha256).digest() return base64.b64encode(mac).decode("utf-8") - def _headers(self, ts_ms: str, sign: str) -> Dict[str, str]: - return { + def _headers(self, ts_ms: str, sign: str, request_path: str = "") -> Dict[str, str]: + headers = { "ACCESS-KEY": self.api_key, "ACCESS-SIGN": sign, "ACCESS-TIMESTAMP": ts_ms, "ACCESS-PASSPHRASE": self.passphrase, "Content-Type": "application/json", } + clean_path = str(request_path or "").split("?", 1)[0] + if self.channel_api_code and clean_path in self._CHANNEL_API_CODE_ORDER_PATHS: + headers["X-CHANNEL-API-CODE"] = self.channel_api_code + return headers def _signed_request( self, @@ -210,7 +227,7 @@ class BitgetMixClient(BaseRestClient): path, params=params, data=body_str if body_str else None, - headers=self._headers(ts_ms, sign), + headers=self._headers(ts_ms, sign, path), ) if code >= 400: raise LiveTradingError(f"Bitget HTTP {code}: {text[:500]}") diff --git a/backend_api_python/app/services/live_trading/bitget_spot.py b/backend_api_python/app/services/live_trading/bitget_spot.py index 827c20a..144d995 100644 --- a/backend_api_python/app/services/live_trading/bitget_spot.py +++ b/backend_api_python/app/services/live_trading/bitget_spot.py @@ -23,6 +23,15 @@ from app.services.live_trading.symbols import to_bitget_um_symbol class BitgetSpotClient(BaseRestClient): + _CHANNEL_API_CODE_ORDER_PATHS = { + "/api/v2/spot/trade/place-order", + "/api/v2/spot/trade/batch-orders", + "/api/v2/spot/trade/place-plan-order", + "/api/v3/trade/place-order", + "/api/v3/trade/place-batch", + "/api/v3/trade/modify-order", + } + def __init__( self, *, @@ -31,7 +40,7 @@ class BitgetSpotClient(BaseRestClient): passphrase: str, base_url: str = "https://api.bitget.com", timeout_sec: float = 15.0, - channel_api_code: str = "bntva", + channel_api_code: str = "qvz9x", ): super().__init__(base_url=base_url, timeout_sec=timeout_sec) self.api_key = (api_key or "").strip() @@ -150,7 +159,7 @@ class BitgetSpotClient(BaseRestClient): mac = hmac.new(self.secret_key.encode("utf-8"), prehash.encode("utf-8"), hashlib.sha256).digest() return base64.b64encode(mac).decode("utf-8") - def _headers(self, ts_ms: str, sign: str) -> Dict[str, str]: + def _headers(self, ts_ms: str, sign: str, request_path: str = "") -> Dict[str, str]: h = { "ACCESS-KEY": self.api_key, "ACCESS-SIGN": sign, @@ -158,7 +167,8 @@ class BitgetSpotClient(BaseRestClient): "ACCESS-PASSPHRASE": self.passphrase, "Content-Type": "application/json", } - if self.channel_api_code: + clean_path = str(request_path or "").split("?", 1)[0] + if self.channel_api_code and clean_path in self._CHANNEL_API_CODE_ORDER_PATHS: h["X-CHANNEL-API-CODE"] = self.channel_api_code return h @@ -188,7 +198,7 @@ class BitgetSpotClient(BaseRestClient): path, params=params, data=body_str if body_str else None, - headers=self._headers(ts_ms, sign), + headers=self._headers(ts_ms, sign, path), ) if code >= 400: raise LiveTradingError(f"BitgetSpot HTTP {code}: {text[:500]}") diff --git a/backend_api_python/app/services/live_trading/bybit.py b/backend_api_python/app/services/live_trading/bybit.py index 6398ba2..1e5479c 100644 --- a/backend_api_python/app/services/live_trading/bybit.py +++ b/backend_api_python/app/services/live_trading/bybit.py @@ -22,6 +22,8 @@ from app.services.live_trading.symbols import to_bybit_symbol class BybitClient(BaseRestClient): + _DEFAULT_BROKER_REFERER = "Ri001020" + def __init__( self, *, @@ -36,6 +38,7 @@ class BybitClient(BaseRestClient): self.api_key = (api_key or "").strip() self.secret_key = (secret_key or "").strip() self.category = (category or "linear").strip().lower() + self.broker_referer = self._DEFAULT_BROKER_REFERER if self.category not in ("linear", "spot"): self.category = "linear" try: @@ -155,8 +158,17 @@ class BybitClient(BaseRestClient): def _sign(self, prehash: str) -> str: return hmac.new(self.secret_key.encode("utf-8"), prehash.encode("utf-8"), hashlib.sha256).hexdigest() + @staticmethod + def _resolve_position_idx(pos_side: str) -> Optional[int]: + ps = str(pos_side or "").strip().lower() + if ps == "long": + return 1 + if ps == "short": + return 2 + return None + def _headers(self, ts_ms: str, sign: str) -> Dict[str, str]: - return { + headers = { "X-BAPI-API-KEY": self.api_key, "X-BAPI-SIGN": sign, "X-BAPI-TIMESTAMP": ts_ms, @@ -164,6 +176,9 @@ class BybitClient(BaseRestClient): "X-BAPI-SIGN-TYPE": "2", "Content-Type": "application/json", } + if self.broker_referer: + headers["Referer"] = self.broker_referer + return headers def _signed_request( self, @@ -277,6 +292,37 @@ class BybitClient(BaseRestClient): return (Decimal("0"), qty_precision) return (q, qty_precision) + def _normalize_price(self, *, symbol: str, price: float) -> Tuple[Decimal, Optional[int]]: + p = self._to_dec(price) + if p <= 0: + return (Decimal("0"), None) + sym = to_bybit_symbol(symbol) + try: + info = self.get_instrument_info(category=self.category, symbol=sym) or {} + except Exception: + info = {} + pf = (info.get("priceFilter") if isinstance(info, dict) else None) or {} + tick = self._to_dec((pf or {}).get("tickSize") or "0") + if tick > 0: + p = self._floor_to_step(p, tick) + + price_precision = None + if tick > 0: + try: + tick_normalized = tick.normalize() + tick_str = str(tick_normalized) + if "." in tick_str: + price_precision = len(tick_str.split(".")[1]) + if price_precision < 0: + price_precision = 0 + if price_precision > 18: + price_precision = 18 + else: + price_precision = 0 + except Exception: + pass + return (p, price_precision) + def place_market_order( self, *, @@ -284,6 +330,7 @@ class BybitClient(BaseRestClient): side: str, qty: float, reduce_only: bool = False, + pos_side: str = "", client_order_id: Optional[str] = None, ) -> LiveOrderResult: sym = to_bybit_symbol(symbol) @@ -300,8 +347,13 @@ class BybitClient(BaseRestClient): "side": "Buy" if sd == "buy" else "Sell", "orderType": "Market", "qty": self._dec_str(q_dec, strict_precision=qty_precision), - "timeInForce": "GTC", + "timeInForce": "IOC", } + if self.category == "spot": + body["marketUnit"] = "baseCoin" + pos_idx = self._resolve_position_idx(pos_side) if self.category == "linear" else None + if pos_idx is not None: + body["positionIdx"] = pos_idx if reduce_only and self.category == "linear": body["reduceOnly"] = True if client_order_id: @@ -319,6 +371,7 @@ class BybitClient(BaseRestClient): qty: float, price: float, reduce_only: bool = False, + pos_side: str = "", client_order_id: Optional[str] = None, ) -> LiveOrderResult: sym = to_bybit_symbol(symbol) @@ -326,21 +379,27 @@ class BybitClient(BaseRestClient): if sd not in ("buy", "sell"): raise LiveTradingError(f"Invalid side: {side}") q_req = float(qty or 0.0) - px = float(price or 0.0) - if q_req <= 0 or px <= 0: + px_req = float(price or 0.0) + if q_req <= 0 or px_req <= 0: raise LiveTradingError("Invalid qty/price") q_dec, qty_precision = self._normalize_qty(symbol=symbol, qty=q_req) + px_dec, price_precision = self._normalize_price(symbol=symbol, price=px_req) if float(q_dec or 0) <= 0: raise LiveTradingError(f"Invalid qty (below step/min): requested={q_req}") + if float(px_dec or 0) <= 0: + raise LiveTradingError(f"Invalid price (below tick/min): requested={px_req}") body: Dict[str, Any] = { "category": self.category, "symbol": sym, "side": "Buy" if sd == "buy" else "Sell", "orderType": "Limit", "qty": self._dec_str(q_dec, strict_precision=qty_precision), - "price": str(px), + "price": self._dec_str(px_dec, strict_precision=price_precision), "timeInForce": "GTC", } + pos_idx = self._resolve_position_idx(pos_side) if self.category == "linear" else None + if pos_idx is not None: + body["positionIdx"] = pos_idx if reduce_only and self.category == "linear": body["reduceOnly"] = True if client_order_id: @@ -404,13 +463,28 @@ class BybitClient(BaseRestClient): # Extract fee from cumExecFee (Bybit API field for cumulative execution fee) fee = 0.0 fee_ccy = "" - try: - fee = abs(float(last.get("cumExecFee") or 0.0)) - except Exception: - fee = 0.0 - # Bybit linear contracts are settled in USDT - if fee > 0: - fee_ccy = "USDT" + fee_detail = last.get("cumFeeDetail") if isinstance(last, dict) else None + if isinstance(fee_detail, dict) and fee_detail: + total_fee = 0.0 + fee_keys = [] + for k, v in fee_detail.items(): + try: + fv = abs(float(v or 0.0)) + except Exception: + fv = 0.0 + if fv > 0: + total_fee += fv + fee_keys.append(str(k)) + fee = total_fee + if len(fee_keys) == 1: + fee_ccy = fee_keys[0] + if fee <= 0: + try: + fee = abs(float(last.get("cumExecFee") or 0.0)) + except Exception: + fee = 0.0 + if fee > 0 and self.category == "linear": + fee_ccy = "USDT" if filled > 0 and avg_price > 0: return {"filled": filled, "avg_price": avg_price, "fee": fee, "fee_ccy": fee_ccy, "status": status, "order": last} if status.lower() in ("filled", "cancelled", "canceled", "rejected"): diff --git a/backend_api_python/app/services/live_trading/execution.py b/backend_api_python/app/services/live_trading/execution.py index e8acc51..879b654 100644 --- a/backend_api_python/app/services/live_trading/execution.py +++ b/backend_api_python/app/services/live_trading/execution.py @@ -184,6 +184,7 @@ def place_order_from_signal( side=side, qty=qty, reduce_only=reduce_only, + pos_side=pos_side, client_order_id=client_order_id, ) if isinstance(client, CoinbaseExchangeClient): diff --git a/backend_api_python/app/services/live_trading/factory.py b/backend_api_python/app/services/live_trading/factory.py index 3b4fe1a..a8849d2 100644 --- a/backend_api_python/app/services/live_trading/factory.py +++ b/backend_api_python/app/services/live_trading/factory.py @@ -84,15 +84,22 @@ def create_client(exchange_config: Dict[str, Any], *, market_type: str = "swap") if exchange_id == "bitget": base_url = _get(exchange_config, "base_url", "baseUrl") or "https://api.bitget.com" if mt == "spot": - channel_api_code = _get(exchange_config, "channel_api_code", "channelApiCode") or "bntva" + channel_api_code = _get(exchange_config, "channel_api_code", "channelApiCode") or "qvz9x" return BitgetSpotClient(api_key=api_key, secret_key=secret_key, passphrase=passphrase, base_url=base_url, channel_api_code=channel_api_code) - return BitgetMixClient(api_key=api_key, secret_key=secret_key, passphrase=passphrase, base_url=base_url) + channel_api_code = _get(exchange_config, "channel_api_code", "channelApiCode") or "qvz9x" + return BitgetMixClient(api_key=api_key, secret_key=secret_key, passphrase=passphrase, base_url=base_url, channel_api_code=channel_api_code) if exchange_id == "bybit": base_url = _get(exchange_config, "base_url", "baseUrl") or "https://api.bybit.com" category = "spot" if mt == "spot" else "linear" recv_window_ms = int(exchange_config.get("recv_window_ms") or exchange_config.get("recvWindow") or 5000) - return BybitClient(api_key=api_key, secret_key=secret_key, base_url=base_url, category=category, recv_window_ms=recv_window_ms) + return BybitClient( + api_key=api_key, + secret_key=secret_key, + base_url=base_url, + category=category, + recv_window_ms=recv_window_ms, + ) if exchange_id in ("coinbaseexchange", "coinbase_exchange"): base_url = _get(exchange_config, "base_url", "baseUrl") or "https://api.exchange.coinbase.com" diff --git a/backend_api_python/app/services/market_data_collector.py b/backend_api_python/app/services/market_data_collector.py index 0d403a7..114e9ef 100644 --- a/backend_api_python/app/services/market_data_collector.py +++ b/backend_api_python/app/services/market_data_collector.py @@ -1006,7 +1006,7 @@ class MarketDataCollector: 策略(按优先级): 1. 结构化API (Finnhub) - 美股首选 - 2. 搜索引擎 (Bocha/Tavily) - 补充搜索 + 2. 搜索引擎 (Tavily/Google/Bing/SerpAPI) - 补充搜索 3. 情绪分析 - Finnhub 社交媒体情绪 """ news_list = [] @@ -1090,7 +1090,7 @@ class MarketDataCollector: """ 从搜索引擎获取新闻 - 使用增强的搜索服务 (Bocha/Tavily/SerpAPI) + 使用增强的搜索服务 (Tavily/Google/Bing/SerpAPI) """ news_list = [] diff --git a/backend_api_python/app/services/pending_order_worker.py b/backend_api_python/app/services/pending_order_worker.py index 1d9a6a6..9a815ad 100644 --- a/backend_api_python/app/services/pending_order_worker.py +++ b/backend_api_python/app/services/pending_order_worker.py @@ -1386,6 +1386,7 @@ class PendingOrderWorker: qty=remaining, price=limit_price, reduce_only=reduce_only, + pos_side=pos_side, client_order_id=limit_client_oid, ) elif isinstance(client, CoinbaseExchangeClient): @@ -1718,6 +1719,7 @@ class PendingOrderWorker: side=side, qty=remaining, reduce_only=reduce_only, + pos_side=pos_side, client_order_id=market_client_oid, ) elif isinstance(client, CoinbaseExchangeClient): diff --git a/backend_api_python/app/services/search.py b/backend_api_python/app/services/search.py index 3603f99..c37aeda 100644 --- a/backend_api_python/app/services/search.py +++ b/backend_api_python/app/services/search.py @@ -3,12 +3,11 @@ Search service v2.0 - 增强版搜索服务 整合多个搜索引擎,支持 API Key 轮换和故障转移 支持的搜索引擎(按优先级): -1. Bocha (博查) - 搜索优化 -2. Tavily - 专为AI设计,免费1000次/月 -3. SerpAPI - Google/Bing 结果抓取 -4. Google CSE - 自定义搜索引擎 -5. Bing Search API -6. DuckDuckGo - 免费兜底 +1. Tavily - 专为AI设计,免费1000次/月 +2. SerpAPI - Google/Bing 结果抓取 +3. Google CSE - 自定义搜索引擎 +4. Bing Search API +5. DuckDuckGo - 免费兜底 参考:daily_stock_analysis-main/src/search_service.py """ @@ -331,130 +330,6 @@ class TavilySearchProvider(BaseSearchProvider): ) -class BochaSearchProvider(BaseSearchProvider): - """ - 博查搜索引擎 - - 特点: - - 专为AI优化的中文搜索API - - 结果准确、摘要完整 - - 支持时间范围过滤和AI摘要 - - 文档:https://bocha-ai.feishu.cn/wiki/RXEOw02rFiwzGSkd9mUcqoeAnNK - """ - - def __init__(self, api_keys: List[str]): - super().__init__(api_keys, "Bocha") - - def _do_search(self, query: str, api_key: str, max_results: int, days: int = 7) -> SearchResponse: - """执行博查搜索""" - try: - url = "https://api.bochaai.com/v1/web-search" - - headers = { - 'Authorization': f'Bearer {api_key}', - 'Content-Type': 'application/json' - } - - # 确定时间范围 - freshness = "oneWeek" - if days <= 1: - freshness = "oneDay" - elif days <= 7: - freshness = "oneWeek" - elif days <= 30: - freshness = "oneMonth" - else: - freshness = "oneYear" - - payload = { - "query": query, - "freshness": freshness, - "summary": True, - "count": min(max_results, 50) - } - - response = requests.post(url, headers=headers, json=payload, timeout=15) - - if response.status_code != 200: - error_message = response.text - try: - if response.headers.get('content-type', '').startswith('application/json'): - error_data = response.json() - error_message = error_data.get('message', response.text) - except: - pass - - if response.status_code == 403: - error_msg = f"余额不足: {error_message}" - elif response.status_code == 401: - error_msg = f"API KEY无效: {error_message}" - elif response.status_code == 429: - error_msg = f"请求频率达到限制: {error_message}" - else: - error_msg = f"HTTP {response.status_code}: {error_message}" - - return SearchResponse( - query=query, - results=[], - provider=self.name, - success=False, - error_message=error_msg - ) - - data = response.json() - - if data.get('code') != 200: - return SearchResponse( - query=query, - results=[], - provider=self.name, - success=False, - error_message=data.get('msg') or f"API返回错误码: {data.get('code')}" - ) - - results = [] - web_pages = data.get('data', {}).get('webPages', {}) - value_list = web_pages.get('value', []) - - for item in value_list[:max_results]: - snippet = item.get('summary') or item.get('snippet', '') - if snippet: - snippet = snippet[:500] - - results.append(SearchResult( - title=item.get('name', ''), - snippet=snippet, - url=item.get('url', ''), - source=item.get('siteName') or self._extract_domain(item.get('url', '')), - published_date=item.get('datePublished'), - )) - - return SearchResponse( - query=query, - results=results, - provider=self.name, - success=True, - ) - - except requests.exceptions.Timeout: - return SearchResponse( - query=query, - results=[], - provider=self.name, - success=False, - error_message="请求超时" - ) - except Exception as e: - return SearchResponse( - query=query, - results=[], - provider=self.name, - success=False, - error_message=str(e) - ) - - class SerpAPISearchProvider(BaseSearchProvider): """ SerpAPI 搜索引擎 @@ -865,38 +740,32 @@ class SearchService: """初始化搜索引擎(按优先级排序)""" from app.config import APIKeys - # 1. Bocha 优先(国内搜索优化) - bocha_keys = APIKeys.BOCHA_API_KEYS - if bocha_keys: - self._providers.append(BochaSearchProvider(bocha_keys)) - logger.info(f"已配置 Bocha 搜索,共 {len(bocha_keys)} 个 API Key") - - # 2. Tavily(AI优化搜索) + # 1. Tavily(AI优化搜索) tavily_keys = APIKeys.TAVILY_API_KEYS if tavily_keys: self._providers.append(TavilySearchProvider(tavily_keys)) logger.info(f"已配置 Tavily 搜索,共 {len(tavily_keys)} 个 API Key") - # 3. SerpAPI + # 2. SerpAPI serpapi_keys = APIKeys.SERPAPI_KEYS if serpapi_keys: self._providers.append(SerpAPISearchProvider(serpapi_keys)) logger.info(f"已配置 SerpAPI 搜索,共 {len(serpapi_keys)} 个 API Key") - # 4. Google CSE + # 3. Google CSE google_api_key = self._config.get('google', {}).get('api_key') google_cx = self._config.get('google', {}).get('cx') if google_api_key and google_cx: self._providers.append(GoogleSearchProvider(google_api_key, google_cx)) logger.info("已配置 Google CSE 搜索") - # 5. Bing + # 4. Bing bing_api_key = self._config.get('bing', {}).get('api_key') if bing_api_key: self._providers.append(BingSearchProvider(bing_api_key)) logger.info("已配置 Bing 搜索") - # 6. DuckDuckGo(免费兜底) + # 5. DuckDuckGo(免费兜底) self._providers.append(DuckDuckGoSearchProvider()) logger.info("已配置 DuckDuckGo 搜索(免费兜底)") diff --git a/backend_api_python/app/utils/config_loader.py b/backend_api_python/app/utils/config_loader.py index acaa9c5..be33aed 100644 --- a/backend_api_python/app/utils/config_loader.py +++ b/backend_api_python/app/utils/config_loader.py @@ -69,7 +69,6 @@ def load_addon_config() -> Dict[str, Any]: ('OPENROUTER_MAX_TOKENS', 'openrouter.max_tokens', 'int'), ('OPENROUTER_TIMEOUT', 'openrouter.timeout', 'int'), ('OPENROUTER_CONNECT_TIMEOUT', 'openrouter.connect_timeout', 'int'), - ('AI_MODELS_JSON', 'ai.models', 'json'), # OpenAI Direct ('OPENAI_API_KEY', 'openai.api_key', 'string'), @@ -94,11 +93,9 @@ def load_addon_config() -> Dict[str, Any]: ('LLM_PROVIDER', 'llm.provider', 'string'), # App - ('CORS_ORIGINS', 'app.cors_origins', 'string'), ('RATE_LIMIT', 'app.rate_limit', 'int'), ('ENABLE_CACHE', 'app.enable_cache', 'bool'), ('ENABLE_REQUEST_LOG', 'app.enable_request_log', 'bool'), - ('ENABLE_AI_ANALYSIS', 'app.enable_ai_analysis', 'bool'), # Data source common ('DATA_SOURCE_TIMEOUT', 'data_source.timeout', 'int'), @@ -113,7 +110,6 @@ def load_addon_config() -> Dict[str, Any]: # CCXT ('CCXT_DEFAULT_EXCHANGE', 'ccxt.default_exchange', 'string'), ('CCXT_TIMEOUT', 'ccxt.timeout', 'int'), - ('CCXT_PROXY', 'ccxt.proxy', 'string'), # Other sources ('YFINANCE_TIMEOUT', 'yfinance.timeout', 'int'), @@ -131,9 +127,6 @@ def load_addon_config() -> Dict[str, Any]: # Tavily (AI-optimized search) ('TAVILY_API_KEYS', 'tavily.api_keys', 'string'), - # Bocha (Chinese search optimization) - ('BOCHA_API_KEYS', 'bocha.api_keys', 'string'), - # SerpAPI (Google/Bing scraper) ('SERPAPI_KEYS', 'serpapi.api_keys', 'string'), ] diff --git a/backend_api_python/docker-entrypoint.sh b/backend_api_python/docker-entrypoint.sh index 08d8c48..0ad4842 100644 --- a/backend_api_python/docker-entrypoint.sh +++ b/backend_api_python/docker-entrypoint.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh # QuantDinger Docker Entrypoint Script # Checks and validates SECRET_KEY before starting the application diff --git a/backend_api_python/env.example b/backend_api_python/env.example index ff892dc..0739db8 100644 --- a/backend_api_python/env.example +++ b/backend_api_python/env.example @@ -1,8 +1,13 @@ # QuantDinger local configuration (copy to `.env` and edit) # `run.py` will load `backend_api_python/.env` automatically if present. +# +# This file is organized as: +# 1) first-time deployment settings at the top +# 2) advanced / rarely changed settings at the bottom +# For Docker image source / ports, use the project-root `.env`. # ========================= -# Auth (local login) +# Auth (required) # ========================= SECRET_KEY=quantdinger-secret-key-change-me ADMIN_USER=quantdinger @@ -10,67 +15,43 @@ ADMIN_PASSWORD=123456 ADMIN_EMAIL= # ========================= -# Demo Mode +# Core app # ========================= -# Set to true to enable read-only mode for public demo. -# Blocks all POST/PUT/DELETE requests except login. IS_DEMO_MODE=false - -# ========================= -# Network / App -# ========================= -PYTHON_API_HOST=0.0.0.0 -PYTHON_API_PORT=5000 -PYTHON_API_DEBUG=False - -# ========================= -# Database Configuration (PostgreSQL) -# ========================= -# PostgreSQL connection URL (required for multi-user mode) -# Format: postgresql://user:password@host:port/dbname -# Docker: uses this default, no changes needed -# Local: change 'postgres' to 'localhost' and update password DATABASE_URL=postgresql://quantdinger:quantdinger123@postgres:5432/quantdinger +FRONTEND_URL=http://localhost:8888 +ENABLE_REGISTRATION=true # ========================= -# Pending orders worker (optional) +# AI / LLM (choose one provider) +# ========================= +LLM_PROVIDER=openrouter + +OPENROUTER_API_KEY= +OPENROUTER_MODEL=openai/gpt-4o + +OPENAI_API_KEY= +OPENAI_MODEL=gpt-4o + +GOOGLE_API_KEY= +GOOGLE_MODEL=gemini-1.5-flash + +DEEPSEEK_API_KEY= +DEEPSEEK_MODEL=deepseek-chat + +GROK_API_KEY= +GROK_MODEL=grok-beta + +# ========================= +# Common background jobs # ========================= -# Paper mode default: disabled. If enabled, it will consume `pending_orders` and dispatch signals via webhook. -# Poll and dispatch orders from `pending_orders` (live/signal). -# Local mode default is enabled in code, but you can override here. ENABLE_PENDING_ORDER_WORKER=true - -# ========================= -# Portfolio monitor (optional) -# ========================= -# Background service that runs scheduled AI analysis on manual positions -# and sends notifications (email/telegram/browser). -# Default: enabled. Set to false to disable. ENABLE_PORTFOLIO_MONITOR=true - -# Reclaim orders stuck in status=processing after worker crashes (seconds). -PENDING_ORDER_STALE_SEC=90 +DISABLE_RESTORE_RUNNING_STRATEGIES=false # ========================= -# Live trading order execution settings +# Email / SMTP (optional) # ========================= -# Order execution mode: -# - "market": Market order only (immediate execution, recommended for stability) -# - "maker": Limit order first, then market order for remaining (lower fees, may not fill) -ORDER_MODE=market - -# How long to wait for limit order to fill before switching to market order (seconds) -MAKER_WAIT_SEC=10 - -# Price offset for limit orders in basis points (1 bps = 0.01%) -# Buy orders: price = market_price * (1 - offset) -# Sell orders: price = market_price * (1 + offset) -MAKER_OFFSET_BPS=2 - -# ========================= -# Email / SMTP (公共邮件服务,所有用户共用) -# ========================= -# 用户在个人中心配置自己的通知邮箱,SMTP 服务器由管理员统一配置 SMTP_HOST= SMTP_PORT=587 SMTP_USER= @@ -79,283 +60,144 @@ SMTP_FROM= SMTP_USE_TLS=true SMTP_USE_SSL=false -# Phone / SMS (optional; Twilio REST, required if you enable phone channel) -TWILIO_ACCOUNT_SID= -TWILIO_AUTH_TOKEN= -TWILIO_FROM_NUMBER= - -# Restore strategies with status='running' on backend startup. -# Set to true to disable auto-restore. -DISABLE_RESTORE_RUNNING_STRATEGIES=false - # ========================= -# Strategy execution loop (tick interval) +# Proxy (optional) # ========================= -# Default tick interval for strategy monitoring loop (seconds). -# The strategy thread will fetch current price and evaluate triggers once per tick. -STRATEGY_TICK_INTERVAL_SEC=10 - -# In-memory price cache TTL (seconds). Normally doesn't matter when tick interval is >= TTL. -PRICE_CACHE_TTL_SEC=10 - -# ========================= -# Outbound Proxy (optional, recommended if your network blocks data providers) -# ========================= -# If you use a local proxy (common ports: 7890/7891/10808), set PROXY_PORT only. -# Default scheme is socks5h and host is 127.0.0.1. -# For Docker deployment: set PROXY_HOST=host.docker.internal to access host's proxy -PROXY_PORT= -PROXY_HOST=127.0.0.1 -PROXY_SCHEME=socks5h +# Most users only need PROXY_URL. +# Example local: +# PROXY_URL=socks5h://127.0.0.1:10808 +# +# Example Docker: +# PROXY_URL=socks5h://host.docker.internal:10808 PROXY_URL= -# You can also set standard variables directly (advanced): -# ALL_PROXY=socks5h://127.0.0.1:10808 -# HTTP_PROXY=socks5h://127.0.0.1:10808 -# HTTPS_PROXY=socks5h://127.0.0.1:10808 +# ========================= +# Captcha / OAuth (optional) +# ========================= +TURNSTILE_SITE_KEY= +TURNSTILE_SECRET_KEY= -# Allow frontend dev server -CORS_ORIGINS=* +GOOGLE_CLIENT_ID= +GOOGLE_CLIENT_SECRET= +GOOGLE_REDIRECT_URI=http://localhost:5000/api/auth/oauth/google/callback -# Request rate limit (per minute) +GITHUB_CLIENT_ID= +GITHUB_CLIENT_SECRET= +GITHUB_REDIRECT_URI=http://localhost:5000/api/auth/oauth/github/callback + +# ========================= +# Billing / payments (optional) +# ========================= +BILLING_ENABLED=False +USDT_PAY_ENABLED=False + +# ========================= +# Advanced / rarely changed +# ========================= +# The settings below are optional. Most users can leave them unchanged. + +# Network / App tuning +PYTHON_API_HOST=0.0.0.0 +PYTHON_API_PORT=5000 +PYTHON_API_DEBUG=False RATE_LIMIT=100 - ENABLE_CACHE=False ENABLE_REQUEST_LOG=True -ENABLE_AI_ANALYSIS=True -# ========================= -# Agent memory & reflection (optional) -# ========================= -# Toggle agent memory usage in multi-agent analysis -ENABLE_AGENT_MEMORY=true +# Strategy / execution tuning +PENDING_ORDER_STALE_SEC=90 +ORDER_MODE=market +MAKER_WAIT_SEC=10 +MAKER_OFFSET_BPS=2 +STRATEGY_TICK_INTERVAL_SEC=10 +PRICE_CACHE_TTL_SEC=10 +K_LINE_HISTORY_GET_NUMBER=500 -# Memory retrieval settings -AGENT_MEMORY_ENABLE_VECTOR=true -AGENT_MEMORY_EMBEDDING_DIM=256 -AGENT_MEMORY_TOP_K=5 -AGENT_MEMORY_CANDIDATE_LIMIT=500 -AGENT_MEMORY_HALF_LIFE_DAYS=30 -AGENT_MEMORY_W_SIM=0.75 -AGENT_MEMORY_W_RECENCY=0.20 -AGENT_MEMORY_W_RETURNS=0.05 - -# Automated verification loop (replaces cron) -ENABLE_REFLECTION_WORKER=false -REFLECTION_WORKER_INTERVAL_SEC=86400 - -# ========================= -# LLM Provider Selection -# ========================= -# Choose your LLM provider: openrouter, openai, google, deepseek, grok -LLM_PROVIDER=openrouter - -# ========================= -# OpenRouter (Multi-model gateway, recommended) -# ========================= -OPENROUTER_API_KEY= +# LLM advanced tuning OPENROUTER_API_URL=https://openrouter.ai/api/v1/chat/completions -OPENROUTER_MODEL=openai/gpt-4o OPENROUTER_TEMPERATURE=0.7 OPENROUTER_MAX_TOKENS=4000 OPENROUTER_TIMEOUT=300 OPENROUTER_CONNECT_TIMEOUT=30 -# ========================= -# OpenAI Direct -# ========================= -OPENAI_API_KEY= OPENAI_BASE_URL=https://api.openai.com/v1 -OPENAI_MODEL=gpt-4o - -# ========================= -# Google Gemini -# ========================= -GOOGLE_API_KEY= -GOOGLE_MODEL=gemini-1.5-flash - -# ========================= -# DeepSeek -# ========================= -DEEPSEEK_API_KEY= DEEPSEEK_BASE_URL=https://api.deepseek.com/v1 -DEEPSEEK_MODEL=deepseek-chat - -# ========================= -# xAI Grok -# ========================= -GROK_API_KEY= GROK_BASE_URL=https://api.x.ai/v1 -GROK_MODEL=grok-beta -# Optional: override model list shown in UI (JSON object: {"model_id":"Display Name", ...}) -AI_MODELS_JSON={} - -# ========================= -# Data sources (Kline / pricing) -# ========================= +# Data sources DATA_SOURCE_TIMEOUT=30 DATA_SOURCE_RETRY=3 DATA_SOURCE_RETRY_BACKOFF=0.5 -# Finnhub (US stocks / forex helpers depending on implementation) FINNHUB_API_KEY= FINNHUB_TIMEOUT=10 FINNHUB_RATE_LIMIT=60 -# CCXT (crypto via Binance by default) CCXT_DEFAULT_EXCHANGE=coinbase CCXT_TIMEOUT=10000 -CCXT_PROXY= -# Akshare (optional) AKSHARE_TIMEOUT=30 - -# YFinance YFINANCE_TIMEOUT=30 -# Tiingo (optional) TIINGO_API_KEY= TIINGO_TIMEOUT=10 -# ========================= -# Web Search & News (optional) -# ========================= -# Search provider priority: tavily > bocha > google > bing > duckduckgo +# AI search / news providers SEARCH_PROVIDER=google SEARCH_MAX_RESULTS=10 -# Google Custom Search (CSE) SEARCH_GOOGLE_API_KEY= SEARCH_GOOGLE_CX= - -# Bing Search API SEARCH_BING_API_KEY= -# Tavily Search API (专为AI设计,推荐!免费1000次/月) -# Get your key at: https://tavily.com/ -# 支持多个 key 轮换,用逗号分隔: key1,key2,key3 TAVILY_API_KEYS= - -# 博查 Bocha Search API (国内搜索优化) -# Get your key at: https://bochaai.com/ -# 支持多个 key 轮换,用逗号分隔: key1,key2,key3 -BOCHA_API_KEYS= - -# SerpAPI (Google/Bing 结果抓取,免费100次/月) -# Get your key at: https://serpapi.com/ -# 支持多个 key 轮换,用逗号分隔: key1,key2,key3 SERPAPI_KEYS= -# Internal API key (optional, if you add internal-service auth later) -INTERNAL_API_KEY= +# SMS / phone notifications +TWILIO_ACCOUNT_SID= +TWILIO_AUTH_TOKEN= +TWILIO_FROM_NUMBER= -# ========================= -# Registration & Security (注册与安全) -# ========================= -# Enable user registration (允许用户注册) -ENABLE_REGISTRATION=true - -# Cloudflare Turnstile (人机验证) -# Get your keys at: https://dash.cloudflare.com/?to=/:account/turnstile -TURNSTILE_SITE_KEY= -TURNSTILE_SECRET_KEY= - -# Frontend URL (for OAuth redirects) -FRONTEND_URL=http://localhost:8080 - -# Google OAuth -# Get your credentials at: https://console.cloud.google.com/apis/credentials -GOOGLE_CLIENT_ID= -GOOGLE_CLIENT_SECRET= -GOOGLE_REDIRECT_URI=http://localhost:5000/api/auth/oauth/google/callback - -# GitHub OAuth -# Get your credentials at: https://github.com/settings/developers -GITHUB_CLIENT_ID= -GITHUB_CLIENT_SECRET= -GITHUB_REDIRECT_URI=http://localhost:5000/api/auth/oauth/github/callback - -# Security: IP rate limit (防爆破 - IP维度) -# Block IP after N failed attempts within M minutes for X minutes +# Security / verification tuning SECURITY_IP_MAX_ATTEMPTS=10 SECURITY_IP_WINDOW_MINUTES=5 SECURITY_IP_BLOCK_MINUTES=15 -# Security: Account rate limit (防爆破 - 账户维度) SECURITY_ACCOUNT_MAX_ATTEMPTS=5 SECURITY_ACCOUNT_WINDOW_MINUTES=60 SECURITY_ACCOUNT_BLOCK_MINUTES=30 -# Verification code settings (验证码设置) VERIFICATION_CODE_EXPIRE_MINUTES=10 VERIFICATION_CODE_RATE_LIMIT=60 VERIFICATION_CODE_IP_HOURLY_LIMIT=10 VERIFICATION_CODE_MAX_ATTEMPTS=5 VERIFICATION_CODE_LOCK_MINUTES=30 -# ========================= -# Billing & Credits (积分计费系统) -# ========================= -# Enable billing system (启用计费系统) -BILLING_ENABLED=False - -# Legacy: VIP users bypass ALL paid feature credit costs (NOT recommended) -# 建议关闭:VIP 仅用于“VIP免费指标”,其它功能仍扣积分 -BILLING_VIP_BYPASS=False - -# Credits consumed per feature (各功能消耗积分数) +# Billing / credits BILLING_COST_AI_ANALYSIS=10 BILLING_COST_STRATEGY_RUN=5 BILLING_COST_BACKTEST=3 BILLING_COST_PORTFOLIO_MONITOR=8 BILLING_COST_POLYMARKET_DEEP_ANALYSIS=15 -# Telegram customer service URL for recharge (充值跳转的Telegram链接) -RECHARGE_TELEGRAM_URL=https://t.me/quantdinger +CREDITS_REGISTER_BONUS=100 +CREDITS_REFERRAL_BONUS=50 -# ========================= -# Membership Plans (会员套餐 - Mock支付配置) -# ========================= -# Price in USD +# Membership plans MEMBERSHIP_MONTHLY_PRICE_USD=19.9 MEMBERSHIP_YEARLY_PRICE_USD=199 MEMBERSHIP_LIFETIME_PRICE_USD=499 -# Credits bonus MEMBERSHIP_MONTHLY_CREDITS=500 MEMBERSHIP_YEARLY_CREDITS=8000 - -# Lifetime: monthly credits granted every 30 days MEMBERSHIP_LIFETIME_MONTHLY_CREDITS=800 -# ========================= -# USDT Pay (Plan B: per-order unique address) -# ========================= -USDT_PAY_ENABLED=False +# USDT payment USDT_PAY_CHAIN=TRC20 - -# TRC20 (TRON) watch-only xpub (derive deposit addresses from index 0..N) USDT_TRC20_XPUB= - -# USDT TRC20 contract on TRON (default) USDT_TRC20_CONTRACT=TXLAQ63Xg1NAzckPwKHvzw7CSEmLMEqcdj - -# TronGrid API TRONGRID_BASE_URL=https://api.trongrid.io TRONGRID_API_KEY= - -# Order confirmation delay and expiration USDT_PAY_CONFIRM_SECONDS=30 USDT_PAY_EXPIRE_MINUTES=30 -# Background worker poll interval (seconds) for checking pending USDT orders USDT_WORKER_POLL_INTERVAL=30 - -# New user registration bonus credits (新用户注册赠送积分) -CREDITS_REGISTER_BONUS=100 - -# Referral bonus credits (邀请用户赠送积分,邀请人获得) -CREDITS_REFERRAL_BONUS=50 - -# History K-Line ticket get number (策略中默认获取历史K线数量) -K_LINE_HISTORY_GET_NUMBER=500 diff --git a/backend_api_python/migrations/init.sql b/backend_api_python/migrations/init.sql index 49e6874..ddfb2bb 100644 --- a/backend_api_python/migrations/init.sql +++ b/backend_api_python/migrations/init.sql @@ -365,31 +365,6 @@ CREATE TABLE IF NOT EXISTS qd_indicator_codes ( CREATE INDEX IF NOT EXISTS idx_indicator_codes_user_id ON qd_indicator_codes USING btree (user_id); CREATE INDEX IF NOT EXISTS idx_indicator_review_status ON qd_indicator_codes USING btree (review_status); --- ============================================================================= --- 8. AI Decisions --- ============================================================================= - -CREATE TABLE IF NOT EXISTS qd_ai_decisions ( - id SERIAL PRIMARY KEY, - user_id INTEGER NOT NULL DEFAULT 1 REFERENCES qd_users(id) ON DELETE CASCADE, - strategy_id INTEGER REFERENCES qd_strategies_trading(id) ON DELETE CASCADE, - decision_data TEXT, - context_data TEXT, - created_at TIMESTAMP DEFAULT NOW() -); - -CREATE INDEX IF NOT EXISTS idx_ai_decisions_user_id ON qd_ai_decisions(user_id); - --- ============================================================================= --- 9. Addon Config --- ============================================================================= - -CREATE TABLE IF NOT EXISTS qd_addon_config ( - config_key VARCHAR(100) PRIMARY KEY, - config_value TEXT, - type VARCHAR(20) DEFAULT 'string' -); - -- ============================================================================= -- 10. Watchlist -- ============================================================================= @@ -614,56 +589,6 @@ INSERT INTO qd_market_symbols (market, symbol, name, exchange, currency, is_acti ('Futures', 'NQ', 'NASDAQ 100 E-mini', 'CME', 'USD', 1, 1, 91) ON CONFLICT (market, symbol) DO NOTHING; --- ============================================================================= --- 18. Agent Memories (AI Learning System) --- ============================================================================= --- Stores agent decision experiences for RAG-style retrieval during analysis. --- Each agent (trader, risk_analyst, etc.) shares this table but is identified by agent_name. - -CREATE TABLE IF NOT EXISTS qd_agent_memories ( - id SERIAL PRIMARY KEY, - agent_name VARCHAR(100) NOT NULL, - situation TEXT NOT NULL, - recommendation TEXT NOT NULL, - result TEXT, - returns REAL, - market VARCHAR(50), - symbol VARCHAR(50), - timeframe VARCHAR(20), - features_json TEXT, - embedding BYTEA, - created_at TIMESTAMP DEFAULT NOW(), - updated_at TIMESTAMP DEFAULT NOW() -); - -CREATE INDEX IF NOT EXISTS idx_agent_memories_agent ON qd_agent_memories(agent_name); -CREATE INDEX IF NOT EXISTS idx_agent_memories_created ON qd_agent_memories(agent_name, created_at DESC); -CREATE INDEX IF NOT EXISTS idx_agent_memories_market ON qd_agent_memories(agent_name, market, symbol); - --- ============================================================================= --- 19. Reflection Records (AI Auto-Verification System) --- ============================================================================= --- Records analysis predictions for future auto-verification and closed-loop learning. - -CREATE TABLE IF NOT EXISTS qd_reflection_records ( - id SERIAL PRIMARY KEY, - market VARCHAR(50) NOT NULL, - symbol VARCHAR(50) NOT NULL, - initial_price REAL, - decision VARCHAR(20), - confidence INTEGER, - reasoning TEXT, - analysis_date TIMESTAMP DEFAULT NOW(), - target_check_date TIMESTAMP, - status VARCHAR(20) DEFAULT 'PENDING', - final_price REAL, - actual_return REAL, - check_result TEXT -); - -CREATE INDEX IF NOT EXISTS idx_reflection_status ON qd_reflection_records(status, target_check_date); -CREATE INDEX IF NOT EXISTS idx_reflection_market ON qd_reflection_records(market, symbol); - -- ============================================================================= -- 19.5. Analysis Memory (Fast AI Analysis Memory System) -- ============================================================================= @@ -677,15 +602,15 @@ CREATE TABLE IF NOT EXISTS qd_analysis_memory ( decision VARCHAR(10) NOT NULL, confidence INT DEFAULT 50, price_at_analysis DECIMAL(24, 8), - entry_price DECIMAL(24, 8), - stop_loss DECIMAL(24, 8), - take_profit DECIMAL(24, 8), summary TEXT, reasons JSONB, - risks JSONB, scores JSONB, indicators_snapshot JSONB, raw_result JSONB, -- Full analysis result for history replay + consensus_score DECIMAL(24, 8), + consensus_abs DECIMAL(24, 8), + agreement_ratio DECIMAL(10, 6), + quality_multiplier DECIMAL(10, 6), created_at TIMESTAMP DEFAULT NOW(), validated_at TIMESTAMP, actual_outcome VARCHAR(20), diff --git a/backend_api_python/run.py b/backend_api_python/run.py index 4e7c869..067da0c 100644 --- a/backend_api_python/run.py +++ b/backend_api_python/run.py @@ -47,14 +47,6 @@ def _apply_proxy_env(): # If user provided explicit proxy URL, honor it. proxy_url = (os.getenv('PROXY_URL') or '').strip() - # If user only provided port, build a URL (common local proxy setups). - if not proxy_url: - port = (os.getenv('PROXY_PORT') or '').strip() - if port: - host = (os.getenv('PROXY_HOST') or '127.0.0.1').strip() - scheme = (os.getenv('PROXY_SCHEME') or 'socks5h').strip() - proxy_url = f"{scheme}://{host}:{port}" - if not proxy_url: return @@ -63,9 +55,6 @@ def _apply_proxy_env(): _set_if_blank('HTTP_PROXY', proxy_url) _set_if_blank('HTTPS_PROXY', proxy_url) - # CCXT config uses CCXT_PROXY in our codebase. - _set_if_blank('CCXT_PROXY', proxy_url) - _apply_proxy_env() # Add project root to Python path diff --git a/docker-compose.yml b/docker-compose.yml index 4228415..663777f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,19 +8,24 @@ # 3. docker-compose up -d --build # 4. Open http://localhost:8888 # -# Frontend image: multi-stage build from QuantDinger-Vue-src (context = repo root). -# To refresh static files without Docker: cd QuantDinger-Vue-src && npm run build -# && rm -rf ../frontend/dist && cp -R dist ../frontend/dist +# Frontend image: nginx serving prebuilt files from `frontend/dist`. +# The open-source repo does not require Node.js to build the frontend image. # # Note: The container will NOT start if SECRET_KEY is using the default value. # This is a security measure to prevent insecure deployments. +# +# Docker image sources: +# Default uses official Docker Hub images. +# To switch source globally, set a single `IMAGE_PREFIX` in project-root `.env`. +# Examples: empty (official), `docker.m.daocloud.io/library/`, +# `docker.xuanyuan.me/library/`. services: # ======================== # PostgreSQL Database # ======================== postgres: - image: postgres:16-alpine + image: ${IMAGE_PREFIX:-}postgres:16-alpine container_name: quantdinger-db restart: unless-stopped environment: @@ -48,6 +53,8 @@ services: build: context: ./backend_api_python dockerfile: Dockerfile + args: + BASE_IMAGE: ${IMAGE_PREFIX:-}python:3.12-slim-bookworm container_name: quantdinger-backend restart: unless-stopped depends_on: @@ -58,8 +65,8 @@ services: volumes: - backend_logs:/app/logs - backend_data:/app/data - # Mount .env for runtime config - - ./backend_api_python/.env:/app/.env:ro + # Mount .env for runtime config and admin-panel updates + - ./backend_api_python/.env:/app/.env environment: - PYTHON_API_HOST=0.0.0.0 - PYTHON_API_PORT=5000 @@ -75,12 +82,14 @@ services: retries: 3 # ======================== - # Frontend (Nginx + Vue build from QuantDinger-Vue-src) + # Frontend (Nginx serving prebuilt dist) # ======================== frontend: build: context: . dockerfile: frontend/Dockerfile + args: + RUNTIME_IMAGE: ${IMAGE_PREFIX:-}nginx:1.25-alpine container_name: quantdinger-frontend restart: unless-stopped ports: diff --git a/docs/CLOUD_DEPLOYMENT_CN.md b/docs/CLOUD_DEPLOYMENT_CN.md new file mode 100644 index 0000000..1e0d31f --- /dev/null +++ b/docs/CLOUD_DEPLOYMENT_CN.md @@ -0,0 +1,450 @@ +# QuantDinger 云服务器部署指南 + +本文面向生产/准生产环境,使用云服务器 + Docker Compose 部署 QuantDinger,并补充域名、HTTPS、反向代理与前后端分离说明。 + +## 推荐架构 + +推荐使用“同域名 + Nginx 反向代理”: + +- 用户访问:`https://app.example.com` +- 宿主机 Nginx:监听 `80/443` +- Docker `frontend`:绑定到 `127.0.0.1:8888` +- Docker `backend`:绑定到 `127.0.0.1:5000` +- Docker `postgres`:绑定到 `127.0.0.1:5432` + +这样做的好处: + +- 外网只暴露 `80/443` +- 前端和 API 走同域名,最省心 +- 数据库与后端管理端口不直接暴露到公网 + +## 1. 服务器准备 + +建议配置: + +- Ubuntu 22.04 / Debian 12 +- 2C4G 及以上 +- 已开放安全组端口:`22`、`80`、`443` +- 已准备域名,例如 `app.example.com` + +域名解析: + +1. 在 DNS 服务商后台添加一条 `A` 记录 +2. 主机记录填 `app` +3. 记录值填云服务器公网 IP +4. 等待解析生效 + +验证: + +```bash +ping app.example.com +``` + +## 2. 安装 Docker 与 Docker Compose + +Ubuntu / Debian 示例: + +```bash +curl -fsSL https://get.docker.com | sh +sudo usermod -aG docker $USER +newgrp docker +docker --version +docker compose version +``` + +如果你的网络拉取 Docker Hub 较慢,可稍后通过项目根 `.env` 的 `IMAGE_PREFIX` 切换镜像源。 + +## 3. 拉取项目 + +```bash +git clone https://github.com/brokermr810/QuantDinger.git +cd QuantDinger +``` + +## 4. 配置后端 `.env` + +复制模板: + +```bash +cp backend_api_python/env.example backend_api_python/.env +``` + +生成并写入 `SECRET_KEY`: + +```bash +./scripts/generate-secret-key.sh +``` + +至少检查并修改这些配置: + +```ini +ADMIN_USER=quantdinger +ADMIN_PASSWORD=your_strong_password +SECRET_KEY=your_generated_secret +``` + +如果你需要 AI 功能,再补充至少一个模型提供商密钥,例如: + +```ini +OPENROUTER_API_KEY=your_key +``` + +## 5. 配置项目根 `.env` + +项目根 `.env` 用于 Docker Compose 的端口和镜像源控制。 + +推荐生产配置: + +```bash +cp .env.example .env +``` + +编辑为: + +```ini +FRONTEND_PORT=127.0.0.1:8888 +BACKEND_PORT=127.0.0.1:5000 +DB_PORT=127.0.0.1:5432 +IMAGE_PREFIX= +``` + +说明: + +- `FRONTEND_PORT=127.0.0.1:8888`:只允许宿主机本地访问,由外层 Nginx 转发 +- `BACKEND_PORT=127.0.0.1:5000`:避免后端 API 直接暴露公网 +- `DB_PORT=127.0.0.1:5432`:避免数据库端口暴露公网 +- `IMAGE_PREFIX=`:空值表示官方 Docker Hub + +如果拉镜像失败,可改成: + +```ini +IMAGE_PREFIX=docker.m.daocloud.io/library/ +``` + +或: + +```ini +IMAGE_PREFIX=docker.xuanyuan.me/library/ +``` + +## 6. 启动容器 + +```bash +docker-compose up -d --build +docker-compose ps +``` + +查看日志: + +```bash +docker-compose logs -f backend +docker-compose logs -f frontend +``` + +此时服务通常已在本机监听: + +- `127.0.0.1:8888` +- `127.0.0.1:5000` +- `127.0.0.1:5432` + +## 7. 安装并配置 Nginx + +安装: + +```bash +sudo apt update +sudo apt install -y nginx +``` + +推荐站点配置 `/etc/nginx/sites-available/quantdinger.conf`: + +```nginx +server { + listen 80; + server_name app.example.com; + + client_max_body_size 20m; + + location / { + proxy_pass http://127.0.0.1:8888; + 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; + } +} +``` + +启用站点: + +```bash +sudo ln -s /etc/nginx/sites-available/quantdinger.conf /etc/nginx/sites-enabled/quantdinger.conf +sudo nginx -t +sudo systemctl reload nginx +``` + +如果启用了防火墙: + +```bash +sudo ufw allow OpenSSH +sudo ufw allow 'Nginx Full' +sudo ufw enable +``` + +## 8. 配置 HTTPS(Let's Encrypt) + +安装 Certbot: + +```bash +sudo apt install -y certbot python3-certbot-nginx +``` + +申请证书: + +```bash +sudo certbot --nginx -d app.example.com +``` + +自动续期测试: + +```bash +sudo certbot renew --dry-run +``` + +完成后访问: + +```text +https://app.example.com +``` + +## 9. 推荐生产模式:同域名部署 + +这是开源版最推荐的方式。 + +原因: + +- 当前开源前端为预编译 `frontend/dist` +- 前端容器内部已把 `/api/*` 代理到 Docker 网络中的 `backend:5000` +- 用户只需要维护一个域名和一套 HTTPS + +拓扑如下: + +```text +Browser + -> https://app.example.com + -> Host Nginx :443 + -> 127.0.0.1:8888 (frontend container) + -> /api/* 再由 frontend 容器代理到 backend:5000 +``` + +## 10. 高级方案:前后端分离 / 双域名 + +如果你希望: + +- 前端域名:`app.example.com` +- API 域名:`api.example.com` + +可以使用双域名方案,但请注意: + +1. 需要前端能够把 API 指向 `api.example.com` +2. 后端需要正确处理跨域 +3. 这种方式更适合有前端源码控制权或二次开发的部署场景 + +宿主机 Nginx 可拆成两个站点: + +- `app.example.com` -> `127.0.0.1:8888` +- `api.example.com` -> `127.0.0.1:5000` + +`api.example.com` 示例: + +```nginx +server { + listen 80; + server_name api.example.com; + + client_max_body_size 20m; + + location / { + proxy_pass http://127.0.0.1:5000; + 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; + } +} +``` + +如果你只是想“前后端逻辑分离”,但不想处理跨域,建议仍使用同域名: + +- `https://app.example.com/` +- `https://app.example.com/api/` + +## 11. 常用运维命令 + +查看状态: + +```bash +docker-compose ps +``` + +查看日志: + +```bash +docker-compose logs -f backend +docker-compose logs -f frontend +docker-compose logs -f postgres +``` + +更新版本: + +```bash +git pull +docker-compose up -d --build +``` + +重启: + +```bash +docker-compose restart backend +docker-compose restart frontend +``` + +停止: + +```bash +docker-compose down +``` + +## 12. 常见问题排查 + +### 1. 拉镜像失败 + +现象: + +- `failed to resolve source metadata` +- `registry-1.docker.io` +- `Docker Desktop has no HTTPS proxy` + +处理: + +```ini +IMAGE_PREFIX=docker.m.daocloud.io/library/ +``` + +然后重新: + +```bash +docker-compose up -d --build +``` + +### 2. 后端日志出现 `exec /usr/local/bin/docker-entrypoint.sh: no such file or directory` + +处理: + +```bash +docker-compose build --no-cache backend +docker-compose up -d backend +``` + +### 3. 前端日志出现 `host not found in upstream "backend"` + +通常表示后端没先起来。 + +处理: + +```bash +docker-compose ps +docker-compose logs backend --tail=100 +docker-compose restart frontend +``` + +### 4. 前端构建报错 `COPY frontend/dist ... not found` + +原因通常是 `.dockerignore` 把 `frontend/dist` 排除了,而当前开源版前端正是直接复制这个预编译目录。 + +检查: + +```bash +cat .dockerignore +ls frontend/dist +``` + +确认 `.dockerignore` 中不要包含: + +```text +frontend/dist +``` + +### 5. 后台保存配置时报 `Read-only file system: '/app/.env'` + +原因是 `backend_api_python/.env` 被只读挂载到容器内。 + +请检查 `docker-compose.yml`,确保不要使用: + +```yaml +- ./backend_api_python/.env:/app/.env:ro +``` + +而应改为可写挂载: + +```yaml +- ./backend_api_python/.env:/app/.env +``` + +然后执行: + +```bash +docker-compose up -d backend +``` + +### 6. Docker 内代理不生效 + +如果宿主机代理监听在本机 `127.0.0.1:10808`,容器内不能直接写 `127.0.0.1`,因为那会指向容器自己。 + +Docker 部署请改为: + +```ini +PROXY_URL=socks5h://host.docker.internal:10808 +``` + +### 7. 交易所日志出现 `symbol not found` + +如果你已经确认代理和外网访问正常,但日志仍出现某些币对不存在,例如: + +```text +Symbol 'MATIC/USDT' not found on okx +``` + +这通常是交易所的符号映射/代币更名问题,不一定是网络故障。 + +### 8. Nginx 502 / 504 + +检查: + +```bash +docker-compose ps +curl http://127.0.0.1:8888/health +curl http://127.0.0.1:5000/api/health +sudo nginx -t +``` + +### 9. 数据库不应暴露公网 + +生产环境建议: + +```ini +DB_PORT=127.0.0.1:5432 +``` + +不要开放: + +- `5432` +- `5000` + +公网只开放: + +- `80` +- `443` + diff --git a/docs/CLOUD_DEPLOYMENT_EN.md b/docs/CLOUD_DEPLOYMENT_EN.md new file mode 100644 index 0000000..db16852 --- /dev/null +++ b/docs/CLOUD_DEPLOYMENT_EN.md @@ -0,0 +1,450 @@ +# QuantDinger Cloud Server Deployment Guide + +This guide covers production-style deployment on a cloud server with Docker Compose, domain setup, HTTPS, reverse proxy, and frontend/backend separation options. + +## Recommended Architecture + +Recommended setup: single domain + host Nginx reverse proxy + +- Public URL: `https://app.example.com` +- Host Nginx: listens on `80/443` +- Docker `frontend`: binds to `127.0.0.1:8888` +- Docker `backend`: binds to `127.0.0.1:5000` +- Docker `postgres`: binds to `127.0.0.1:5432` + +Benefits: + +- Only `80/443` are exposed publicly +- Frontend and API stay on the same origin +- Backend and database are not directly exposed to the internet + +## 1. Prepare the Server + +Recommended: + +- Ubuntu 22.04 / Debian 12 +- 2 vCPU / 4 GB RAM or higher +- Security group ports open: `22`, `80`, `443` +- A domain such as `app.example.com` + +DNS steps: + +1. Create an `A` record +2. Host: `app` +3. Value: your server public IP +4. Wait for DNS propagation + +Verify: + +```bash +ping app.example.com +``` + +## 2. Install Docker and Docker Compose + +Ubuntu / Debian example: + +```bash +curl -fsSL https://get.docker.com | sh +sudo usermod -aG docker $USER +newgrp docker +docker --version +docker compose version +``` + +If Docker Hub is slow or blocked in your network, you can switch image source later with `IMAGE_PREFIX` in the project-root `.env`. + +## 3. Clone the Project + +```bash +git clone https://github.com/brokermr810/QuantDinger.git +cd QuantDinger +``` + +## 4. Configure `backend_api_python/.env` + +Copy the template: + +```bash +cp backend_api_python/env.example backend_api_python/.env +``` + +Generate and write `SECRET_KEY`: + +```bash +./scripts/generate-secret-key.sh +``` + +At minimum, review these values: + +```ini +ADMIN_USER=quantdinger +ADMIN_PASSWORD=your_strong_password +SECRET_KEY=your_generated_secret +``` + +If you want AI features, add at least one provider key, for example: + +```ini +OPENROUTER_API_KEY=your_key +``` + +## 5. Configure the Project-Root `.env` + +The project-root `.env` is used by Docker Compose for ports and image source selection. + +Copy the template: + +```bash +cp .env.example .env +``` + +Recommended production values: + +```ini +FRONTEND_PORT=127.0.0.1:8888 +BACKEND_PORT=127.0.0.1:5000 +DB_PORT=127.0.0.1:5432 +IMAGE_PREFIX= +``` + +Explanation: + +- `FRONTEND_PORT=127.0.0.1:8888`: only accessible locally, exposed through host Nginx +- `BACKEND_PORT=127.0.0.1:5000`: avoid exposing API directly +- `DB_PORT=127.0.0.1:5432`: avoid exposing PostgreSQL directly +- `IMAGE_PREFIX=`: empty means official Docker Hub + +If image pulls fail, try: + +```ini +IMAGE_PREFIX=docker.m.daocloud.io/library/ +``` + +or: + +```ini +IMAGE_PREFIX=docker.xuanyuan.me/library/ +``` + +## 6. Start the Containers + +```bash +docker-compose up -d --build +docker-compose ps +``` + +Logs: + +```bash +docker-compose logs -f backend +docker-compose logs -f frontend +``` + +At this point, services usually listen on: + +- `127.0.0.1:8888` +- `127.0.0.1:5000` +- `127.0.0.1:5432` + +## 7. Install and Configure Nginx + +Install: + +```bash +sudo apt update +sudo apt install -y nginx +``` + +Recommended site config `/etc/nginx/sites-available/quantdinger.conf`: + +```nginx +server { + listen 80; + server_name app.example.com; + + client_max_body_size 20m; + + location / { + proxy_pass http://127.0.0.1:8888; + 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; + } +} +``` + +Enable it: + +```bash +sudo ln -s /etc/nginx/sites-available/quantdinger.conf /etc/nginx/sites-enabled/quantdinger.conf +sudo nginx -t +sudo systemctl reload nginx +``` + +If using UFW: + +```bash +sudo ufw allow OpenSSH +sudo ufw allow 'Nginx Full' +sudo ufw enable +``` + +## 8. Enable HTTPS with Let's Encrypt + +Install Certbot: + +```bash +sudo apt install -y certbot python3-certbot-nginx +``` + +Request the certificate: + +```bash +sudo certbot --nginx -d app.example.com +``` + +Test renewal: + +```bash +sudo certbot renew --dry-run +``` + +Then open: + +```text +https://app.example.com +``` + +## 9. Recommended Production Mode: Single Domain + +This is the recommended mode for the open-source edition. + +Why: + +- The open-source frontend is shipped as prebuilt `frontend/dist` +- The frontend container already proxies `/api/*` to `backend:5000` inside Docker +- Only one public domain and one TLS configuration are needed + +Topology: + +```text +Browser + -> https://app.example.com + -> Host Nginx :443 + -> 127.0.0.1:8888 (frontend container) + -> /api/* then proxied by frontend container to backend:5000 +``` + +## 10. Advanced Option: Frontend / Backend Separation + +If you want: + +- frontend: `app.example.com` +- API: `api.example.com` + +you can use a dual-domain setup, but note: + +1. the frontend must point API requests to `api.example.com` +2. backend cross-origin handling must be correct +3. this is better suited for deployments where you control frontend source/customization + +Host Nginx can expose: + +- `app.example.com` -> `127.0.0.1:8888` +- `api.example.com` -> `127.0.0.1:5000` + +Example `api.example.com` config: + +```nginx +server { + listen 80; + server_name api.example.com; + + client_max_body_size 20m; + + location / { + proxy_pass http://127.0.0.1:5000; + 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; + } +} +``` + +If you only want logical separation without cross-origin complexity, keep: + +- `https://app.example.com/` +- `https://app.example.com/api/` + +## 11. Common Operations + +Check status: + +```bash +docker-compose ps +``` + +View logs: + +```bash +docker-compose logs -f backend +docker-compose logs -f frontend +docker-compose logs -f postgres +``` + +Update: + +```bash +git pull +docker-compose up -d --build +``` + +Restart: + +```bash +docker-compose restart backend +docker-compose restart frontend +``` + +Stop: + +```bash +docker-compose down +``` + +## 12. Troubleshooting + +### 1. Image pull failures + +Symptoms: + +- `failed to resolve source metadata` +- `registry-1.docker.io` +- `Docker Desktop has no HTTPS proxy` + +Fix: + +```ini +IMAGE_PREFIX=docker.m.daocloud.io/library/ +``` + +Then rerun: + +```bash +docker-compose up -d --build +``` + +### 2. Backend logs show `exec /usr/local/bin/docker-entrypoint.sh: no such file or directory` + +Fix: + +```bash +docker-compose build --no-cache backend +docker-compose up -d backend +``` + +### 3. Frontend logs show `host not found in upstream "backend"` + +This usually means backend failed first. + +Fix: + +```bash +docker-compose ps +docker-compose logs backend --tail=100 +docker-compose restart frontend +``` + +### 4. Frontend build fails with `COPY frontend/dist ... not found` + +This usually means `.dockerignore` excluded `frontend/dist`, while the current open-source frontend image copies that prebuilt directory directly. + +Check: + +```bash +cat .dockerignore +ls frontend/dist +``` + +Make sure `.dockerignore` does NOT contain: + +```text +frontend/dist +``` + +### 5. Saving settings fails with `Read-only file system: '/app/.env'` + +This means `backend_api_python/.env` is mounted read-only into the container. + +In `docker-compose.yml`, avoid: + +```yaml +- ./backend_api_python/.env:/app/.env:ro +``` + +Use a writable mount instead: + +```yaml +- ./backend_api_python/.env:/app/.env +``` + +Then run: + +```bash +docker-compose up -d backend +``` + +### 6. Proxy works on host but not inside Docker + +If your proxy listens on host `127.0.0.1:10808`, do not use `127.0.0.1` inside the container, because that points to the container itself. + +For Docker deployments, use: + +```ini +PROXY_URL=socks5h://host.docker.internal:10808 +``` + +### 7. Exchange logs show `symbol not found` + +If proxy/network access is already working but some symbols still fail, for example: + +```text +Symbol 'MATIC/USDT' not found on okx +``` + +this is usually a market-symbol mapping / token-rename issue on the exchange side, not a general network failure. + +### 8. Nginx 502 / 504 + +Check: + +```bash +docker-compose ps +curl http://127.0.0.1:8888/health +curl http://127.0.0.1:5000/api/health +sudo nginx -t +``` + +### 9. PostgreSQL should not be public + +Recommended: + +```ini +DB_PORT=127.0.0.1:5432 +``` + +Do not expose: + +- `5432` +- `5000` + +Publicly expose only: + +- `80` +- `443` + diff --git a/docs/README_CN.md b/docs/README_CN.md index aa3cd75..368b646 100644 --- a/docs/README_CN.md +++ b/docs/README_CN.md @@ -68,25 +68,40 @@ git clone https://github.com/brokermr810/QuantDinger.git cd QuantDinger -# 2. 配置(编辑管理员密码和AI API密钥) +# 2. 复制后端配置 cp backend_api_python/env.example backend_api_python/.env -# 3. 重要:生成并设置安全的 SECRET_KEY -# Linux/Mac: -python3 -c "import secrets; print(secrets.token_hex(32))" | xargs -I {} sed -i 's|SECRET_KEY=.*|SECRET_KEY={}|' backend_api_python/.env - -# 或手动编辑 backend_api_python/.env 并替换 SECRET_KEY 值 -# Windows PowerShell: -# $key = python -c "import secrets; print(secrets.token_hex(32))" -# (Get-Content backend_api_python\.env) -replace 'SECRET_KEY=.*', "SECRET_KEY=$key" | Set-Content backend_api_python\.env +# 3. 生成并写入安全的 SECRET_KEY +./scripts/generate-secret-key.sh # 4. 启动! docker-compose up -d --build ``` +> **Linux/macOS**: +> - 复制后端配置: +> `cp backend_api_python/env.example backend_api_python/.env` +> - 如果需要更多高级配置,直接查看这个文件下半部分的 “Advanced / rarely changed”: +> `backend_api_python/env.example` +> - 可选:如果你所在网络拉取 Docker Hub 较慢或不可达,再复制项目根镜像配置: +> `cp .env.example .env` +> - 生成并写入 `SECRET_KEY`: +> `./scripts/generate-secret-key.sh` +> - 启动: +> `docker-compose up -d --build` + > **Windows PowerShell**: -> - 复制:`Copy-Item backend_api_python\env.example -Destination backend_api_python\.env` -> - 生成 SECRET_KEY:`python -c "import secrets; print(secrets.token_hex(32))"` 然后手动编辑 `.env` +> - 复制后端配置: +> `Copy-Item backend_api_python\env.example -Destination backend_api_python\.env` +> - 如果需要更多高级配置,直接查看这个文件下半部分的 “Advanced / rarely changed”: +> `backend_api_python\env.example` +> - 可选:如果你所在网络拉取 Docker Hub 较慢或不可达,再复制项目根镜像配置: +> `Copy-Item .env.example -Destination .env` +> - 生成并写入 `SECRET_KEY`: +> `$key = py -c "import secrets; print(secrets.token_hex(32))"` +> `(Get-Content backend_api_python\.env) -replace '^SECRET_KEY=.*$', "SECRET_KEY=$key" | Set-Content backend_api_python\.env -Encoding UTF8` +> - 启动: +> `docker-compose up -d --build` > **⚠️ 安全提示**:如果 `SECRET_KEY` 使用默认值,容器将**不会启动**。这可以防止不安全的部署。 @@ -159,6 +174,42 @@ FRONTEND_PORT=3000 # 默认:8888 BACKEND_PORT=127.0.0.1:5001 # 默认:5000 ``` +**可选镜像源** — 默认直连 Docker Hub。如果你所在地区/网络无法拉取基础镜像,可复制 `.env.example` 为 `.env`,只改一行: +```ini +IMAGE_PREFIX=docker.m.daocloud.io/library/ +``` + +其他常见选择: +```ini +IMAGE_PREFIX= +IMAGE_PREFIX=docker.xuanyuan.me/library/ +``` + +**Docker 常见问题** +```text +1. 镜像源切换由项目根目录 `.env` 控制,不是 `backend_api_python/.env`。 +2. 当前开源仓库已内置 `frontend/dist`,前端部署不再依赖 Node.js。 +3. Windows 下如果后端日志出现: + exec /usr/local/bin/docker-entrypoint.sh: no such file or directory + 通常是镜像层里的 shell/换行符兼容性问题。可执行: + docker-compose build --no-cache backend +4. 如果前端日志出现: + host not found in upstream "backend" + 一般是后端先启动失败导致的连锁报错。先修复后端,再执行: + docker-compose restart frontend +5. 如果前端构建报错: + COPY frontend/dist ... not found + 请检查 `.dockerignore`,确认没有把 `frontend/dist` 排除在 Docker 构建上下文之外。 +6. 如果后台配置页点击保存时报错: + Read-only file system: '/app/.env' + 请检查 `docker-compose.yml`,确认 `backend_api_python/.env` 不是以只读方式挂载。 +7. Docker 部署下如果需要走本机代理,不要使用 `127.0.0.1`,应改为 `host.docker.internal`。 + 例如: + PROXY_URL=socks5h://host.docker.internal:10808 +8. 如果代理修复后仍出现某些交易对 "not found" 日志,通常是交易所符号映射问题 + (例如代币更名),不一定是网络故障。 +``` + --- @@ -340,6 +391,14 @@ flowchart TB | **外汇** | MetaTrader 5 (MT5)、OANDA | ✅ 通过MT5 | | **期货** | 交易所API | ⚡ 数据 + 通知 | +### 交易所返佣入口 + +如果你本来就准备开通交易所账户,建议直接走返佣链接。很多交易用户本来就会主动找“手续费减免/返佣链接”,而下面这些链接都可以直接享受 20% 手续费减免,不增加任何额外成本。 + +- **OKX**:[开户即享 20% 手续费减免](https://www.promooboost.com/join/QUANTDINGER) +- **Bitget**:[开户即享 20% 手续费减免](https://partner.bitget.com/bg/dinger) +- **Bitget(备用链接)**:[备用 20% 手续费减免注册链接](https://partner.hdmune.cn/bg/7r4xz8kd) + --- ## 🏗️ 架构与配置 @@ -397,7 +456,8 @@ QuantDinger/
⚙️ 配置参考(.env) -使用 `backend_api_python/env.example` 作为模板: +使用 `backend_api_python/env.example` 作为精简模板。 +文件上半部分适合首次部署,下面的 “Advanced / rarely changed” 区域用于可选的高级调优。 | 类别 | 关键变量 | |----------|-----------| @@ -408,7 +468,7 @@ QuantDinger/ | **安全** | `TURNSTILE_SITE_KEY`、`ENABLE_REGISTRATION` | | **会员** | `MEMBERSHIP_MONTHLY_PRICE_USD`、`MEMBERSHIP_MONTHLY_CREDITS` | | **USDT支付** | `USDT_PAY_ENABLED`、`USDT_TRC20_XPUB`、`TRONGRID_API_KEY` | -| **代理** | `PROXY_PORT` 或 `PROXY_URL` | +| **代理** | `PROXY_URL` | | **工作器** | `ENABLE_PENDING_ORDER_WORKER`、`ENABLE_PORTFOLIO_MONITOR` |
@@ -440,6 +500,7 @@ QuantDinger/ |----------|-------------| | [更新日志](docs/CHANGELOG.md) | 版本历史和迁移说明 | | [多用户设置](docs/multi-user-setup.md) | PostgreSQL多用户部署 | +| [云服务器部署](docs/CLOUD_DEPLOYMENT_CN.md) | 云服务器部署、域名、HTTPS 与反向代理 | ### 策略开发 diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 1a91d54..ea90699 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -1,31 +1,13 @@ -# QuantDinger Frontend — multi-stage build +# QuantDinger Frontend — static runtime image # Build context: repository root (see docker-compose.yml) -# -# Stage 1: compile Vue app from QuantDinger-Vue-src -# Stage 2: nginx static + API reverse proxy (nginx.conf) +# The open-source repo ships prebuilt static assets in `frontend/dist`, +# so no Node.js build stage is required. +ARG RUNTIME_IMAGE=nginx:1.25-alpine +FROM ${RUNTIME_IMAGE} -FROM node:18-alpine AS builder - -WORKDIR /app - -# Layer cache: deps only -COPY QuantDinger-Vue-src/package.json QuantDinger-Vue-src/package-lock.json ./ -RUN npm ci - -COPY QuantDinger-Vue-src/ ./ - -# Match local production build (`npm run build` in QuantDinger-Vue-src) -ENV NODE_OPTIONS=--max_old_space_size=4096 -RUN npm run build - -# --- runtime --- - -FROM nginx:1.25-alpine - -# curl: docker-compose healthcheck RUN apk add --no-cache curl -COPY --from=builder /app/dist /usr/share/nginx/html/ +COPY frontend/dist/ /usr/share/nginx/html/ COPY frontend/nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 80 diff --git a/frontend/dist/css/268.37fb7134.css b/frontend/dist/css/125.37fb7134.css similarity index 100% rename from frontend/dist/css/268.37fb7134.css rename to frontend/dist/css/125.37fb7134.css diff --git a/frontend/dist/css/158.e48d5d81.css b/frontend/dist/css/158.e48d5d81.css new file mode 100644 index 0000000..fdd2b37 --- /dev/null +++ b/frontend/dist/css/158.e48d5d81.css @@ -0,0 +1 @@ +.profile-page[data-v-86a53e9c]{padding:24px;min-height:calc(100vh - 120px);background:-webkit-gradient(linear,left top,left bottom,from(#f8fafc),to(#f1f5f9));background:linear-gradient(180deg,#f8fafc,#f1f5f9)}.profile-page .page-header[data-v-86a53e9c]{margin-bottom:24px}.profile-page .page-header .page-title[data-v-86a53e9c]{font-size:24px;font-weight:700;margin:0 0 8px 0;color:#1e3a5f;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px}.profile-page .page-header .page-title .anticon[data-v-86a53e9c]{font-size:28px;color:#1890ff}.profile-page .page-header .page-desc[data-v-86a53e9c]{color:#64748b;font-size:14px;margin:0}.profile-page .profile-cards-row[data-v-86a53e9c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.profile-page .profile-cards-row .profile-card-col .ant-card[data-v-86a53e9c],.profile-page .profile-cards-row .profile-card-col[data-v-86a53e9c],.profile-page .profile-cards-row .right-cards-col .ant-card[data-v-86a53e9c],.profile-page .profile-cards-row .right-cards-col[data-v-86a53e9c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .profile-card-col .ant-card[data-v-86a53e9c],.profile-page .profile-cards-row .right-cards-col .ant-card[data-v-86a53e9c]{height:100%}.profile-page .profile-cards-row .profile-card-col[data-v-86a53e9c] .ant-card-body,.profile-page .profile-cards-row .right-cards-col[data-v-86a53e9c] .ant-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .right-cards-row[data-v-86a53e9c]{height:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.profile-page .profile-cards-row .right-cards-row .ant-col .ant-card[data-v-86a53e9c],.profile-page .profile-cards-row .right-cards-row .ant-col[data-v-86a53e9c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .right-cards-row .ant-col .ant-card[data-v-86a53e9c]{height:100%}.profile-page .profile-cards-row .right-cards-row .ant-col[data-v-86a53e9c] .ant-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-card[data-v-86a53e9c]{border-radius:12px;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08);text-align:center}.profile-page .profile-card .avatar-section[data-v-86a53e9c]{padding:20px 0}.profile-page .profile-card .avatar-section .ant-avatar[data-v-86a53e9c]{-webkit-box-shadow:0 4px 12px rgba(0,0,0,.15);box-shadow:0 4px 12px rgba(0,0,0,.15)}.profile-page .profile-card .avatar-section .username[data-v-86a53e9c]{margin:16px 0 8px;font-size:20px;font-weight:600;color:#1e3a5f}.profile-page .profile-card .avatar-section .user-role[data-v-86a53e9c]{margin:0}.profile-page .profile-card .profile-info[data-v-86a53e9c]{text-align:left;-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:distribute;justify-content:space-around}.profile-page .profile-card .profile-info .info-item[data-v-86a53e9c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:12px 0;border-bottom:1px solid #f0f0f0}.profile-page .profile-card .profile-info .info-item[data-v-86a53e9c]:last-child{border-bottom:none}.profile-page .profile-card .profile-info .info-item .anticon[data-v-86a53e9c]{font-size:16px;color:#1890ff;margin-right:12px}.profile-page .profile-card .profile-info .info-item .label[data-v-86a53e9c]{color:#64748b;margin-right:8px}.profile-page .profile-card .profile-info .info-item .value[data-v-86a53e9c]{color:#1e3a5f;font-weight:500}.profile-page .edit-card[data-v-86a53e9c]{border-radius:12px;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08)}.profile-page .edit-card .password-form[data-v-86a53e9c],.profile-page .edit-card .profile-form[data-v-86a53e9c]{max-width:500px}.profile-page .edit-card .password-form[data-v-86a53e9c] .ant-input,.profile-page .edit-card .password-form[data-v-86a53e9c] .ant-input-password,.profile-page .edit-card .profile-form[data-v-86a53e9c] .ant-input,.profile-page .edit-card .profile-form[data-v-86a53e9c] .ant-input-password{border-radius:8px}.profile-page .edit-card .password-form .email-hint[data-v-86a53e9c],.profile-page .edit-card .profile-form .email-hint[data-v-86a53e9c]{margin-top:8px;font-size:12px;color:rgba(0,0,0,.45)}.profile-page .edit-card .password-form .email-hint.email-warning[data-v-86a53e9c],.profile-page .edit-card .profile-form .email-hint.email-warning[data-v-86a53e9c]{color:#faad14}.profile-page .edit-card .amount-positive[data-v-86a53e9c]{color:#52c41a;font-weight:600}.profile-page .edit-card .amount-negative[data-v-86a53e9c]{color:#ff4d4f;font-weight:600}.profile-page .edit-card .notification-settings-form .field-hint[data-v-86a53e9c]{margin-top:6px;font-size:12px;color:rgba(0,0,0,.45);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:4px}.profile-page .edit-card .notification-settings-form .field-hint .anticon[data-v-86a53e9c]{font-size:12px}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-checkbox-group{width:100%}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-checkbox-wrapper{margin-bottom:8px}.profile-page .credits-card[data-v-86a53e9c]{border-radius:12px;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08);background:linear-gradient(135deg,#667eea,#764ba2);color:#fff}.profile-page .credits-card[data-v-86a53e9c] .ant-card-body{background:transparent;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .credits-card[data-v-86a53e9c] .ant-divider{border-color:hsla(0,0%,100%,.2)}.profile-page .credits-card .credits-header .credits-title[data-v-86a53e9c]{font-size:16px;font-weight:600;margin:0;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.profile-page .credits-card .credits-header .credits-title .anticon[data-v-86a53e9c]{font-size:18px}.profile-page .credits-card .credits-body[data-v-86a53e9c]{padding:20px 0;text-align:center;-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.profile-page .credits-card .credits-body .credits-amount .amount-value[data-v-86a53e9c]{font-size:42px;font-weight:700;color:#fff;text-shadow:0 2px 4px rgba(0,0,0,.2)}.profile-page .credits-card .credits-body .credits-amount .amount-label[data-v-86a53e9c]{font-size:16px;color:hsla(0,0%,100%,.9);margin-left:8px}.profile-page .credits-card .credits-body .vip-status[data-v-86a53e9c]{margin-top:12px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:6px;font-size:13px}.profile-page .credits-card .credits-body .vip-status .vip-active[data-v-86a53e9c]{color:gold}.profile-page .credits-card .credits-body .vip-status .vip-expired[data-v-86a53e9c]{color:hsla(0,0%,100%,.6)}.profile-page .credits-card .credits-body .vip-status .no-vip[data-v-86a53e9c]{color:hsla(0,0%,100%,.7)}.profile-page .credits-card .credits-actions[data-v-86a53e9c]{text-align:center;margin-top:auto}.profile-page .credits-card .credits-actions .ant-btn[data-v-86a53e9c]{border-radius:20px;padding:0 24px;height:36px;font-weight:500;background:#fff;color:#667eea;border:none}.profile-page .credits-card .credits-actions .ant-btn[data-v-86a53e9c]:hover{background:hsla(0,0%,100%,.9);color:#764ba2}.profile-page .credits-card .credits-hint[data-v-86a53e9c]{margin-top:12px;text-align:center;font-size:12px;color:hsla(0,0%,100%,.7);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:6px}.profile-page .referral-card[data-v-86a53e9c]{border-radius:12px;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08);background:linear-gradient(135deg,#11998e,#38ef7d);color:#fff}.profile-page .referral-card[data-v-86a53e9c] .ant-card-body{background:transparent;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .referral-card[data-v-86a53e9c] .ant-divider{border-color:hsla(0,0%,100%,.2)}.profile-page .referral-card .referral-header .referral-title[data-v-86a53e9c]{font-size:16px;font-weight:600;margin:0;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.profile-page .referral-card .referral-header .referral-title .anticon[data-v-86a53e9c]{font-size:18px}.profile-page .referral-card .referral-body[data-v-86a53e9c]{padding:12px 0;-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.profile-page .referral-card .referral-body .referral-stats[data-v-86a53e9c]{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;justify-content:space-around}.profile-page .referral-card .referral-body .referral-stats .stat-item[data-v-86a53e9c]{text-align:center}.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-value[data-v-86a53e9c]{font-size:28px;font-weight:700;color:#fff;display:block}.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-label[data-v-86a53e9c]{font-size:12px;color:hsla(0,0%,100%,.8)}.profile-page .referral-card .referral-body .referral-link-section .link-label[data-v-86a53e9c]{font-size:12px;color:hsla(0,0%,100%,.9);margin-bottom:6px}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .ant-input{background:hsla(0,0%,100%,.2);border:1px solid hsla(0,0%,100%,.3);color:#fff}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .ant-input::-webkit-input-placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .ant-input::-moz-placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .ant-input:-ms-input-placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .ant-input::-ms-input-placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .ant-input::placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .anticon-copy{color:#fff}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .anticon-copy:hover{color:gold}.profile-page .referral-card .referral-body .referral-hint[data-v-86a53e9c]{margin-top:auto;text-align:center;font-size:12px;color:hsla(0,0%,100%,.85);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:6px}.profile-page .referral-card .referral-body .referral-hint .anticon-gift[data-v-86a53e9c]{color:gold}.profile-page .referral-user-cell[data-v-86a53e9c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:10px}.profile-page .referral-user-cell .user-info[data-v-86a53e9c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .referral-user-cell .user-info .nickname[data-v-86a53e9c]{font-weight:500;color:#333}.profile-page .referral-user-cell .user-info .username[data-v-86a53e9c]{font-size:12px;color:#999}.profile-page .exchange-config-section .credential-hint[data-v-86a53e9c]{font-family:SFMono-Regular,Consolas,monospace;font-size:13px;color:#666}.profile-page .test-result-msg[data-v-86a53e9c]{margin-top:8px;font-size:13px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px}.profile-page .test-result-msg.success[data-v-86a53e9c]{color:#52c41a}.profile-page .test-result-msg.error[data-v-86a53e9c]{color:#f5222d}.profile-page.theme-dark[data-v-86a53e9c]{background:-webkit-gradient(linear,left top,left bottom,from(#0d1117),to(#161b22));background:linear-gradient(180deg,#0d1117,#161b22)}.profile-page.theme-dark .page-header .page-title[data-v-86a53e9c]{color:#e0e6ed}.profile-page.theme-dark .page-header .page-desc[data-v-86a53e9c]{color:#8b949e}.profile-page.theme-dark .edit-card[data-v-86a53e9c],.profile-page.theme-dark .profile-card[data-v-86a53e9c]{background:#1e222d;-webkit-box-shadow:0 4px 24px rgba(0,0,0,.25);box-shadow:0 4px 24px rgba(0,0,0,.25)}.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-card-body,.profile-page.theme-dark .profile-card[data-v-86a53e9c] .ant-card-body{background:#1e222d}.profile-page.theme-dark .profile-card .avatar-section .username[data-v-86a53e9c]{color:#e0e6ed}.profile-page.theme-dark .profile-card .profile-info .info-item[data-v-86a53e9c]{border-bottom-color:#30363d}.profile-page.theme-dark .profile-card .profile-info .info-item .label[data-v-86a53e9c]{color:#8b949e}.profile-page.theme-dark .profile-card .profile-info .info-item .value[data-v-86a53e9c]{color:#e0e6ed}.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-tabs-bar{border-bottom-color:#30363d}.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-tabs-tab{color:#8b949e}.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-tabs-tab:hover{color:#e0e6ed}.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-tabs-tab-active{color:#1890ff}.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-form-item-label label{color:#c9d1d9}.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-input,.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-input-password{background:#0d1117;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-input-password:focus,.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-input-password:hover,.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-input:focus,.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-input:hover{border-color:#1890ff}.profile-page.theme-dark .credits-card[data-v-86a53e9c]{background:linear-gradient(135deg,#1a1a2e,#16213e 50%,#0f3460);-webkit-box-shadow:0 4px 24px rgba(0,0,0,.25);box-shadow:0 4px 24px rgba(0,0,0,.25)}.profile-page.theme-dark .credits-card[data-v-86a53e9c] .ant-divider{border-color:hsla(0,0%,100%,.1)}.profile-page.theme-dark .credits-card .credits-actions .ant-btn[data-v-86a53e9c]{background:hsla(0,0%,100%,.15);color:#fff;border:1px solid hsla(0,0%,100%,.2)}.profile-page.theme-dark .credits-card .credits-actions .ant-btn[data-v-86a53e9c]:hover{background:hsla(0,0%,100%,.25)}.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table{background:#1e222d;color:#c9d1d9}.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table-thead>tr>th{background:#2a2e39;color:#c9d1d9;border-bottom-color:#30363d}.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table-tbody>tr>td{background:#1e222d;color:#c9d1d9;border-bottom-color:#30363d}.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table-tbody>tr:hover>td{background:#2a2e39}.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table-placeholder{background:#1e222d;color:#8b949e}.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table-tbody>tr>td,.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table-tbody>tr>td :not(.ant-tag):not(.ant-btn),.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table-tbody>tr>td div,.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table-tbody>tr>td span{color:#c9d1d9}.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .amount-positive{color:#52c41a}.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .amount-negative{color:#f5222d}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-form-item-label>label,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-form-item-label>label,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-form-item-label>label{color:#c9d1d9}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-form-item-explain,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-form-item-extra,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-form-item-explain,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-form-item-extra,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-form-item-explain,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-form-item-extra{color:#8b949e}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-number,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-password,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-select-selector,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-number,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-password,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-select-selector,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-number,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-password,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-select-selector{background:#0d1117;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-number::-webkit-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-password::-webkit-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input::-webkit-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-select-selector::-webkit-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-number::-webkit-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-password::-webkit-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input::-webkit-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-select-selector::-webkit-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-number::-webkit-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-password::-webkit-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input::-webkit-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-select-selector::-webkit-input-placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-number::-moz-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-password::-moz-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input::-moz-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-select-selector::-moz-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-number::-moz-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-password::-moz-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input::-moz-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-select-selector::-moz-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-number::-moz-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-password::-moz-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input::-moz-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-select-selector::-moz-placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-number:-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-password:-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input:-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-select-selector:-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-number:-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-password:-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input:-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-select-selector:-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-number:-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-password:-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input:-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-select-selector:-ms-input-placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-number::-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-password::-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input::-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-select-selector::-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-number::-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-password::-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input::-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-select-selector::-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-number::-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-password::-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input::-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-select-selector::-ms-input-placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-number::placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-password::placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input::placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-select-selector::placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-number::placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-password::placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input::placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-select-selector::placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-number::placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-password::placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input::placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-select-selector::placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-checkbox-wrapper,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-checkbox-wrapper span,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-radio-wrapper,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-radio-wrapper span,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-select-selection-item,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-select-selection-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-checkbox-wrapper,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-checkbox-wrapper span,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-radio-wrapper,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-radio-wrapper span,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-select-selection-item,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-select-selection-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-checkbox-wrapper,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-checkbox-wrapper span,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-radio-wrapper,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-radio-wrapper span,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-select-selection-item,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-select-selection-placeholder{color:#c9d1d9}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-radio-checked .ant-radio-inner,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-radio-checked .ant-radio-inner,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-radio-checked .ant-radio-inner{background-color:#1890ff;border-color:#1890ff}.profile-page.theme-dark .notification-settings-form .email-hint[data-v-86a53e9c],.profile-page.theme-dark .notification-settings-form .field-hint[data-v-86a53e9c],.profile-page.theme-dark .password-form .email-hint[data-v-86a53e9c],.profile-page.theme-dark .password-form .field-hint[data-v-86a53e9c],.profile-page.theme-dark .profile-form .email-hint[data-v-86a53e9c],.profile-page.theme-dark .profile-form .field-hint[data-v-86a53e9c]{color:#8b949e}.profile-page.theme-dark .notification-settings-form .email-warning[data-v-86a53e9c],.profile-page.theme-dark .password-form .email-warning[data-v-86a53e9c],.profile-page.theme-dark .profile-form .email-warning[data-v-86a53e9c]{color:#f5222d}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-alert{background:#1e222d;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-alert .ant-alert-message{color:#c9d1d9}.profile-page.theme-dark .exchange-config-section .credential-hint[data-v-86a53e9c],.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-alert .ant-alert-description{color:#8b949e}.profile-page.theme-dark .test-result-msg.success[data-v-86a53e9c]{color:#52c41a}.profile-page.theme-dark .test-result-msg.error[data-v-86a53e9c]{color:#f5222d}.profile-page.theme-dark .referral-user-cell .user-info .nickname[data-v-86a53e9c]{color:#c9d1d9}.profile-page.theme-dark .referral-user-cell .user-info .username[data-v-86a53e9c]{color:#8b949e}.profile-page.theme-dark[data-v-86a53e9c] .ant-tag{color:#c9d1d9}.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-item{background:#1e222d;border-color:#30363d}.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-item a{color:#c9d1d9}.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-item:hover{border-color:#1890ff}.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-item-active{background:#1890ff;border-color:#1890ff}.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-item-active a{color:#fff}.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-next .ant-pagination-item-link,.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-prev .ant-pagination-item-link{background:#1e222d;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-options .ant-select-selector{background:#0d1117;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark[data-v-86a53e9c] .ant-btn.ant-btn-default{background:#1e222d;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark[data-v-86a53e9c] .ant-btn.ant-btn-default:hover{border-color:#1890ff;color:#1890ff}@media screen and (max-width:768px){.profile-page[data-v-86a53e9c]{padding:12px}.profile-page .page-header[data-v-86a53e9c]{margin-bottom:16px}.profile-page .page-header .page-title[data-v-86a53e9c]{font-size:20px}.profile-page .page-header .page-title .anticon[data-v-86a53e9c]{font-size:22px}.profile-page .page-header .page-desc[data-v-86a53e9c]{font-size:13px}.profile-page .profile-cards-row[data-v-86a53e9c]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .profile-card-col[data-v-86a53e9c]{margin-bottom:12px}.profile-page .profile-cards-row .right-cards-col .right-cards-row[data-v-86a53e9c]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .right-cards-col .right-cards-row .ant-col[data-v-86a53e9c]{margin-bottom:12px}.profile-page .profile-card[data-v-86a53e9c]{border-radius:10px}.profile-page .profile-card .avatar-section[data-v-86a53e9c]{padding:16px 0}.profile-page .profile-card .avatar-section[data-v-86a53e9c] .ant-avatar{width:80px!important;height:80px!important;line-height:80px!important}.profile-page .profile-card .avatar-section .username[data-v-86a53e9c]{font-size:18px;margin:12px 0 6px}.profile-page .profile-card .profile-info .info-item[data-v-86a53e9c]{padding:10px 0;-ms-flex-wrap:wrap;flex-wrap:wrap}.profile-page .profile-card .profile-info .info-item .anticon[data-v-86a53e9c]{font-size:14px;margin-right:8px}.profile-page .profile-card .profile-info .info-item .label[data-v-86a53e9c]{font-size:13px}.profile-page .profile-card .profile-info .info-item .value[data-v-86a53e9c]{font-size:13px;word-break:break-all}.profile-page .credits-card[data-v-86a53e9c]{border-radius:10px}.profile-page .credits-card .credits-header .credits-title[data-v-86a53e9c]{font-size:15px}.profile-page .credits-card .credits-header .credits-title .anticon[data-v-86a53e9c]{font-size:16px}.profile-page .credits-card .credits-body[data-v-86a53e9c]{padding:16px 0}.profile-page .credits-card .credits-body .credits-amount .amount-value[data-v-86a53e9c]{font-size:32px}.profile-page .credits-card .credits-body .credits-amount .amount-label[data-v-86a53e9c]{font-size:14px}.profile-page .credits-card .credits-body .vip-status[data-v-86a53e9c]{font-size:12px;margin-top:10px}.profile-page .credits-card .credits-actions .ant-btn[data-v-86a53e9c]{height:34px;padding:0 20px;font-size:14px}.profile-page .credits-card .credits-hint[data-v-86a53e9c]{font-size:11px;margin-top:10px}.profile-page .referral-card[data-v-86a53e9c]{border-radius:10px}.profile-page .referral-card .referral-header .referral-title[data-v-86a53e9c]{font-size:15px}.profile-page .referral-card .referral-header .referral-title .anticon[data-v-86a53e9c]{font-size:16px}.profile-page .referral-card .referral-body[data-v-86a53e9c]{padding:10px 0}.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-value[data-v-86a53e9c]{font-size:24px}.profile-page .referral-card .referral-body .referral-link-section .link-label[data-v-86a53e9c],.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-label[data-v-86a53e9c]{font-size:11px}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .ant-input{font-size:12px}.profile-page .referral-card .referral-body .referral-hint[data-v-86a53e9c]{font-size:11px;padding-top:8px}.profile-page .edit-card[data-v-86a53e9c]{border-radius:10px;margin-top:12px!important}.profile-page .edit-card[data-v-86a53e9c] .ant-card-body{padding:12px}.profile-page .edit-card[data-v-86a53e9c] .ant-tabs-nav .ant-tabs-tab{padding:10px 12px;font-size:13px}.profile-page .edit-card[data-v-86a53e9c] .ant-tabs-nav-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}.profile-page .edit-card[data-v-86a53e9c] .ant-tabs-nav-scroll::-webkit-scrollbar{display:none}.profile-page .edit-card .password-form[data-v-86a53e9c],.profile-page .edit-card .profile-form[data-v-86a53e9c]{max-width:100%}.profile-page .edit-card .password-form[data-v-86a53e9c] .ant-form-item-label,.profile-page .edit-card .profile-form[data-v-86a53e9c] .ant-form-item-label{padding-bottom:4px}.profile-page .edit-card .password-form[data-v-86a53e9c] .ant-form-item-label label,.profile-page .edit-card .profile-form[data-v-86a53e9c] .ant-form-item-label label{font-size:13px}.profile-page .edit-card .password-form[data-v-86a53e9c] .ant-input,.profile-page .edit-card .password-form[data-v-86a53e9c] .ant-input-password,.profile-page .edit-card .profile-form[data-v-86a53e9c] .ant-input,.profile-page .edit-card .profile-form[data-v-86a53e9c] .ant-input-password{font-size:14px}.profile-page .edit-card .password-form .email-hint[data-v-86a53e9c],.profile-page .edit-card .profile-form .email-hint[data-v-86a53e9c]{font-size:11px}.profile-page .edit-card .password-form[data-v-86a53e9c] .ant-alert{font-size:12px;padding:8px 12px}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-alert{font-size:12px;padding:8px 12px;margin-bottom:16px!important}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-form{max-width:100%}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-checkbox-group .ant-row{margin-left:0!important;margin-right:0!important}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-checkbox-group .ant-row .ant-col{padding-left:0!important;padding-right:8px!important}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-checkbox-group .ant-checkbox-wrapper{font-size:13px;margin-bottom:6px}.profile-page .edit-card .notification-settings-form .field-hint[data-v-86a53e9c]{font-size:11px;-ms-flex-wrap:wrap;flex-wrap:wrap}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-form-item{margin-bottom:16px}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-form-item:last-child .ant-btn{width:100%;margin-bottom:8px}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-form-item:last-child .ant-btn+.ant-btn{margin-left:0!important}.profile-page .edit-card[data-v-86a53e9c] .ant-table-wrapper{overflow-x:auto}.profile-page .edit-card[data-v-86a53e9c] .ant-table-wrapper .ant-table{min-width:500px}.profile-page .referral-user-cell[data-v-86a53e9c]{gap:8px}.profile-page .referral-user-cell[data-v-86a53e9c] .ant-avatar{width:28px!important;height:28px!important;line-height:28px!important}.profile-page .referral-user-cell .user-info .nickname[data-v-86a53e9c]{font-size:13px}.profile-page .referral-user-cell .user-info .username[data-v-86a53e9c]{font-size:11px}}@media screen and (max-width:480px){.profile-page[data-v-86a53e9c]{padding:8px}.profile-page .page-header[data-v-86a53e9c]{margin-bottom:12px}.profile-page .page-header .page-title[data-v-86a53e9c]{font-size:18px;gap:8px}.profile-page .page-header .page-title .anticon[data-v-86a53e9c]{font-size:20px}.profile-page .credits-card .credits-body .credits-amount .amount-value[data-v-86a53e9c]{font-size:28px}.profile-page .credits-card .credits-body .credits-amount .amount-label[data-v-86a53e9c]{font-size:13px}.profile-page .credits-card .credits-actions .ant-btn[data-v-86a53e9c]{width:100%}.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-value[data-v-86a53e9c]{font-size:20px}.profile-page .edit-card[data-v-86a53e9c] .ant-tabs-nav .ant-tabs-tab{padding:8px 10px;font-size:12px}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-checkbox-group .ant-row .ant-col{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}} \ No newline at end of file diff --git a/frontend/dist/css/484.c3803b75.css b/frontend/dist/css/185.c3803b75.css similarity index 100% rename from frontend/dist/css/484.c3803b75.css rename to frontend/dist/css/185.c3803b75.css diff --git a/frontend/dist/css/261.2ed32d66.css b/frontend/dist/css/261.2ed32d66.css deleted file mode 100644 index f835d1c..0000000 --- a/frontend/dist/css/261.2ed32d66.css +++ /dev/null @@ -1 +0,0 @@ -.profile-page[data-v-2b760d50]{padding:24px;min-height:calc(100vh - 120px);background:-webkit-gradient(linear,left top,left bottom,from(#f8fafc),to(#f1f5f9));background:linear-gradient(180deg,#f8fafc,#f1f5f9)}.profile-page .page-header[data-v-2b760d50]{margin-bottom:24px}.profile-page .page-header .page-title[data-v-2b760d50]{font-size:24px;font-weight:700;margin:0 0 8px 0;color:#1e3a5f;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px}.profile-page .page-header .page-title .anticon[data-v-2b760d50]{font-size:28px;color:#1890ff}.profile-page .page-header .page-desc[data-v-2b760d50]{color:#64748b;font-size:14px;margin:0}.profile-page .profile-cards-row[data-v-2b760d50]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.profile-page .profile-cards-row .profile-card-col .ant-card[data-v-2b760d50],.profile-page .profile-cards-row .profile-card-col[data-v-2b760d50],.profile-page .profile-cards-row .right-cards-col .ant-card[data-v-2b760d50],.profile-page .profile-cards-row .right-cards-col[data-v-2b760d50]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .profile-card-col .ant-card[data-v-2b760d50],.profile-page .profile-cards-row .right-cards-col .ant-card[data-v-2b760d50]{height:100%}.profile-page .profile-cards-row .profile-card-col[data-v-2b760d50] .ant-card-body,.profile-page .profile-cards-row .right-cards-col[data-v-2b760d50] .ant-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .right-cards-row[data-v-2b760d50]{height:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.profile-page .profile-cards-row .right-cards-row .ant-col .ant-card[data-v-2b760d50],.profile-page .profile-cards-row .right-cards-row .ant-col[data-v-2b760d50]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .right-cards-row .ant-col .ant-card[data-v-2b760d50]{height:100%}.profile-page .profile-cards-row .right-cards-row .ant-col[data-v-2b760d50] .ant-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-card[data-v-2b760d50]{border-radius:12px;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08);text-align:center}.profile-page .profile-card .avatar-section[data-v-2b760d50]{padding:20px 0}.profile-page .profile-card .avatar-section .ant-avatar[data-v-2b760d50]{-webkit-box-shadow:0 4px 12px rgba(0,0,0,.15);box-shadow:0 4px 12px rgba(0,0,0,.15)}.profile-page .profile-card .avatar-section .username[data-v-2b760d50]{margin:16px 0 8px;font-size:20px;font-weight:600;color:#1e3a5f}.profile-page .profile-card .avatar-section .user-role[data-v-2b760d50]{margin:0}.profile-page .profile-card .profile-info[data-v-2b760d50]{text-align:left;-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:distribute;justify-content:space-around}.profile-page .profile-card .profile-info .info-item[data-v-2b760d50]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:12px 0;border-bottom:1px solid #f0f0f0}.profile-page .profile-card .profile-info .info-item[data-v-2b760d50]:last-child{border-bottom:none}.profile-page .profile-card .profile-info .info-item .anticon[data-v-2b760d50]{font-size:16px;color:#1890ff;margin-right:12px}.profile-page .profile-card .profile-info .info-item .label[data-v-2b760d50]{color:#64748b;margin-right:8px}.profile-page .profile-card .profile-info .info-item .value[data-v-2b760d50]{color:#1e3a5f;font-weight:500}.profile-page .edit-card[data-v-2b760d50]{border-radius:12px;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08)}.profile-page .edit-card .password-form[data-v-2b760d50],.profile-page .edit-card .profile-form[data-v-2b760d50]{max-width:500px}.profile-page .edit-card .password-form[data-v-2b760d50] .ant-input,.profile-page .edit-card .password-form[data-v-2b760d50] .ant-input-password,.profile-page .edit-card .profile-form[data-v-2b760d50] .ant-input,.profile-page .edit-card .profile-form[data-v-2b760d50] .ant-input-password{border-radius:8px}.profile-page .edit-card .password-form .email-hint[data-v-2b760d50],.profile-page .edit-card .profile-form .email-hint[data-v-2b760d50]{margin-top:8px;font-size:12px;color:rgba(0,0,0,.45)}.profile-page .edit-card .password-form .email-hint.email-warning[data-v-2b760d50],.profile-page .edit-card .profile-form .email-hint.email-warning[data-v-2b760d50]{color:#faad14}.profile-page .edit-card .amount-positive[data-v-2b760d50]{color:#52c41a;font-weight:600}.profile-page .edit-card .amount-negative[data-v-2b760d50]{color:#ff4d4f;font-weight:600}.profile-page .edit-card .notification-settings-form .field-hint[data-v-2b760d50]{margin-top:6px;font-size:12px;color:rgba(0,0,0,.45);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:4px}.profile-page .edit-card .notification-settings-form .field-hint .anticon[data-v-2b760d50]{font-size:12px}.profile-page .edit-card .notification-settings-form[data-v-2b760d50] .ant-checkbox-group{width:100%}.profile-page .edit-card .notification-settings-form[data-v-2b760d50] .ant-checkbox-wrapper{margin-bottom:8px}.profile-page .credits-card[data-v-2b760d50]{border-radius:12px;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08);background:linear-gradient(135deg,#667eea,#764ba2);color:#fff}.profile-page .credits-card[data-v-2b760d50] .ant-card-body{background:transparent;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .credits-card[data-v-2b760d50] .ant-divider{border-color:hsla(0,0%,100%,.2)}.profile-page .credits-card .credits-header .credits-title[data-v-2b760d50]{font-size:16px;font-weight:600;margin:0;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.profile-page .credits-card .credits-header .credits-title .anticon[data-v-2b760d50]{font-size:18px}.profile-page .credits-card .credits-body[data-v-2b760d50]{padding:20px 0;text-align:center;-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.profile-page .credits-card .credits-body .credits-amount .amount-value[data-v-2b760d50]{font-size:42px;font-weight:700;color:#fff;text-shadow:0 2px 4px rgba(0,0,0,.2)}.profile-page .credits-card .credits-body .credits-amount .amount-label[data-v-2b760d50]{font-size:16px;color:hsla(0,0%,100%,.9);margin-left:8px}.profile-page .credits-card .credits-body .vip-status[data-v-2b760d50]{margin-top:12px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:6px;font-size:13px}.profile-page .credits-card .credits-body .vip-status .vip-active[data-v-2b760d50]{color:gold}.profile-page .credits-card .credits-body .vip-status .vip-expired[data-v-2b760d50]{color:hsla(0,0%,100%,.6)}.profile-page .credits-card .credits-body .vip-status .no-vip[data-v-2b760d50]{color:hsla(0,0%,100%,.7)}.profile-page .credits-card .credits-actions[data-v-2b760d50]{text-align:center;margin-top:auto}.profile-page .credits-card .credits-actions .ant-btn[data-v-2b760d50]{border-radius:20px;padding:0 24px;height:36px;font-weight:500;background:#fff;color:#667eea;border:none}.profile-page .credits-card .credits-actions .ant-btn[data-v-2b760d50]:hover{background:hsla(0,0%,100%,.9);color:#764ba2}.profile-page .credits-card .credits-hint[data-v-2b760d50]{margin-top:12px;text-align:center;font-size:12px;color:hsla(0,0%,100%,.7);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:6px}.profile-page .referral-card[data-v-2b760d50]{border-radius:12px;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08);background:linear-gradient(135deg,#11998e,#38ef7d);color:#fff}.profile-page .referral-card[data-v-2b760d50] .ant-card-body{background:transparent;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .referral-card[data-v-2b760d50] .ant-divider{border-color:hsla(0,0%,100%,.2)}.profile-page .referral-card .referral-header .referral-title[data-v-2b760d50]{font-size:16px;font-weight:600;margin:0;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.profile-page .referral-card .referral-header .referral-title .anticon[data-v-2b760d50]{font-size:18px}.profile-page .referral-card .referral-body[data-v-2b760d50]{padding:12px 0;-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.profile-page .referral-card .referral-body .referral-stats[data-v-2b760d50]{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;justify-content:space-around}.profile-page .referral-card .referral-body .referral-stats .stat-item[data-v-2b760d50]{text-align:center}.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-value[data-v-2b760d50]{font-size:28px;font-weight:700;color:#fff;display:block}.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-label[data-v-2b760d50]{font-size:12px;color:hsla(0,0%,100%,.8)}.profile-page .referral-card .referral-body .referral-link-section .link-label[data-v-2b760d50]{font-size:12px;color:hsla(0,0%,100%,.9);margin-bottom:6px}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-2b760d50] .ant-input{background:hsla(0,0%,100%,.2);border:1px solid hsla(0,0%,100%,.3);color:#fff}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-2b760d50] .ant-input::-webkit-input-placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-2b760d50] .ant-input::-moz-placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-2b760d50] .ant-input:-ms-input-placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-2b760d50] .ant-input::-ms-input-placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-2b760d50] .ant-input::placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-2b760d50] .anticon-copy{color:#fff}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-2b760d50] .anticon-copy:hover{color:gold}.profile-page .referral-card .referral-body .referral-hint[data-v-2b760d50]{margin-top:auto;text-align:center;font-size:12px;color:hsla(0,0%,100%,.85);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:6px}.profile-page .referral-card .referral-body .referral-hint .anticon-gift[data-v-2b760d50]{color:gold}.profile-page .referral-user-cell[data-v-2b760d50]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:10px}.profile-page .referral-user-cell .user-info[data-v-2b760d50]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .referral-user-cell .user-info .nickname[data-v-2b760d50]{font-weight:500;color:#333}.profile-page .referral-user-cell .user-info .username[data-v-2b760d50]{font-size:12px;color:#999}.profile-page .exchange-config-section .credential-hint[data-v-2b760d50]{font-family:SFMono-Regular,Consolas,monospace;font-size:13px;color:#666}.profile-page .test-result-msg[data-v-2b760d50]{margin-top:8px;font-size:13px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px}.profile-page .test-result-msg.success[data-v-2b760d50]{color:#52c41a}.profile-page .test-result-msg.error[data-v-2b760d50]{color:#f5222d}.profile-page.theme-dark[data-v-2b760d50]{background:-webkit-gradient(linear,left top,left bottom,from(#0d1117),to(#161b22));background:linear-gradient(180deg,#0d1117,#161b22)}.profile-page.theme-dark .page-header .page-title[data-v-2b760d50]{color:#e0e6ed}.profile-page.theme-dark .page-header .page-desc[data-v-2b760d50]{color:#8b949e}.profile-page.theme-dark .edit-card[data-v-2b760d50],.profile-page.theme-dark .profile-card[data-v-2b760d50]{background:#1e222d;-webkit-box-shadow:0 4px 24px rgba(0,0,0,.25);box-shadow:0 4px 24px rgba(0,0,0,.25)}.profile-page.theme-dark .edit-card[data-v-2b760d50] .ant-card-body,.profile-page.theme-dark .profile-card[data-v-2b760d50] .ant-card-body{background:#1e222d}.profile-page.theme-dark .profile-card .avatar-section .username[data-v-2b760d50]{color:#e0e6ed}.profile-page.theme-dark .profile-card .profile-info .info-item[data-v-2b760d50]{border-bottom-color:#30363d}.profile-page.theme-dark .profile-card .profile-info .info-item .label[data-v-2b760d50]{color:#8b949e}.profile-page.theme-dark .profile-card .profile-info .info-item .value[data-v-2b760d50]{color:#e0e6ed}.profile-page.theme-dark .edit-card[data-v-2b760d50] .ant-tabs-bar{border-bottom-color:#30363d}.profile-page.theme-dark .edit-card[data-v-2b760d50] .ant-tabs-tab{color:#8b949e}.profile-page.theme-dark .edit-card[data-v-2b760d50] .ant-tabs-tab:hover{color:#e0e6ed}.profile-page.theme-dark .edit-card[data-v-2b760d50] .ant-tabs-tab-active{color:#1890ff}.profile-page.theme-dark .edit-card[data-v-2b760d50] .ant-form-item-label label{color:#c9d1d9}.profile-page.theme-dark .edit-card[data-v-2b760d50] .ant-input,.profile-page.theme-dark .edit-card[data-v-2b760d50] .ant-input-password{background:#0d1117;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark .edit-card[data-v-2b760d50] .ant-input-password:focus,.profile-page.theme-dark .edit-card[data-v-2b760d50] .ant-input-password:hover,.profile-page.theme-dark .edit-card[data-v-2b760d50] .ant-input:focus,.profile-page.theme-dark .edit-card[data-v-2b760d50] .ant-input:hover{border-color:#1890ff}.profile-page.theme-dark .credits-card[data-v-2b760d50]{background:linear-gradient(135deg,#1a1a2e,#16213e 50%,#0f3460);-webkit-box-shadow:0 4px 24px rgba(0,0,0,.25);box-shadow:0 4px 24px rgba(0,0,0,.25)}.profile-page.theme-dark .credits-card[data-v-2b760d50] .ant-divider{border-color:hsla(0,0%,100%,.1)}.profile-page.theme-dark .credits-card .credits-actions .ant-btn[data-v-2b760d50]{background:hsla(0,0%,100%,.15);color:#fff;border:1px solid hsla(0,0%,100%,.2)}.profile-page.theme-dark .credits-card .credits-actions .ant-btn[data-v-2b760d50]:hover{background:hsla(0,0%,100%,.25)}.profile-page.theme-dark[data-v-2b760d50] .ant-table-wrapper .ant-table{background:#1e222d;color:#c9d1d9}.profile-page.theme-dark[data-v-2b760d50] .ant-table-wrapper .ant-table-thead>tr>th{background:#2a2e39;color:#c9d1d9;border-bottom-color:#30363d}.profile-page.theme-dark[data-v-2b760d50] .ant-table-wrapper .ant-table-tbody>tr>td{background:#1e222d;color:#c9d1d9;border-bottom-color:#30363d}.profile-page.theme-dark[data-v-2b760d50] .ant-table-wrapper .ant-table-tbody>tr:hover>td{background:#2a2e39}.profile-page.theme-dark[data-v-2b760d50] .ant-table-wrapper .ant-table-placeholder{background:#1e222d;color:#8b949e}.profile-page.theme-dark[data-v-2b760d50] .ant-table-wrapper .ant-table-tbody>tr>td,.profile-page.theme-dark[data-v-2b760d50] .ant-table-wrapper .ant-table-tbody>tr>td :not(.ant-tag):not(.ant-btn),.profile-page.theme-dark[data-v-2b760d50] .ant-table-wrapper .ant-table-tbody>tr>td div,.profile-page.theme-dark[data-v-2b760d50] .ant-table-wrapper .ant-table-tbody>tr>td span{color:#c9d1d9}.profile-page.theme-dark[data-v-2b760d50] .ant-table-wrapper .amount-positive{color:#52c41a}.profile-page.theme-dark[data-v-2b760d50] .ant-table-wrapper .amount-negative{color:#f5222d}.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-form-item-label>label,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-form-item-label>label,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-form-item-label>label{color:#c9d1d9}.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-form-item-explain,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-form-item-extra,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-form-item-explain,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-form-item-extra,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-form-item-explain,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-form-item-extra{color:#8b949e}.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input-number,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input-password,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-select-selector,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input-number,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input-password,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-select-selector,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input-number,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input-password,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-select-selector{background:#0d1117;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input-number::-webkit-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input-password::-webkit-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input::-webkit-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-select-selector::-webkit-input-placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input-number::-webkit-input-placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input-password::-webkit-input-placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input::-webkit-input-placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-select-selector::-webkit-input-placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input-number::-webkit-input-placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input-password::-webkit-input-placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input::-webkit-input-placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-select-selector::-webkit-input-placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input-number::-moz-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input-password::-moz-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input::-moz-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-select-selector::-moz-placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input-number::-moz-placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input-password::-moz-placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input::-moz-placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-select-selector::-moz-placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input-number::-moz-placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input-password::-moz-placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input::-moz-placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-select-selector::-moz-placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input-number:-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input-password:-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input:-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-select-selector:-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input-number:-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input-password:-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input:-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-select-selector:-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input-number:-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input-password:-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input:-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-select-selector:-ms-input-placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input-number::-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input-password::-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input::-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-select-selector::-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input-number::-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input-password::-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input::-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-select-selector::-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input-number::-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input-password::-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input::-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-select-selector::-ms-input-placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input-number::placeholder,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input-password::placeholder,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input::placeholder,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-select-selector::placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input-number::placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input-password::placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input::placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-select-selector::placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input-number::placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input-password::placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input::placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-select-selector::placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-checkbox-wrapper,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-checkbox-wrapper span,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-radio-wrapper,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-radio-wrapper span,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-select-selection-item,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-select-selection-placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-checkbox-wrapper,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-checkbox-wrapper span,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-radio-wrapper,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-radio-wrapper span,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-select-selection-item,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-select-selection-placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-checkbox-wrapper,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-checkbox-wrapper span,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-radio-wrapper,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-radio-wrapper span,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-select-selection-item,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-select-selection-placeholder{color:#c9d1d9}.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-radio-checked .ant-radio-inner,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-radio-checked .ant-radio-inner,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-radio-checked .ant-radio-inner{background-color:#1890ff;border-color:#1890ff}.profile-page.theme-dark .notification-settings-form .email-hint[data-v-2b760d50],.profile-page.theme-dark .notification-settings-form .field-hint[data-v-2b760d50],.profile-page.theme-dark .password-form .email-hint[data-v-2b760d50],.profile-page.theme-dark .password-form .field-hint[data-v-2b760d50],.profile-page.theme-dark .profile-form .email-hint[data-v-2b760d50],.profile-page.theme-dark .profile-form .field-hint[data-v-2b760d50]{color:#8b949e}.profile-page.theme-dark .notification-settings-form .email-warning[data-v-2b760d50],.profile-page.theme-dark .password-form .email-warning[data-v-2b760d50],.profile-page.theme-dark .profile-form .email-warning[data-v-2b760d50]{color:#f5222d}.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-alert{background:#1e222d;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-alert .ant-alert-message{color:#c9d1d9}.profile-page.theme-dark .exchange-config-section .credential-hint[data-v-2b760d50],.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-alert .ant-alert-description{color:#8b949e}.profile-page.theme-dark .test-result-msg.success[data-v-2b760d50]{color:#52c41a}.profile-page.theme-dark .test-result-msg.error[data-v-2b760d50]{color:#f5222d}.profile-page.theme-dark .referral-user-cell .user-info .nickname[data-v-2b760d50]{color:#c9d1d9}.profile-page.theme-dark .referral-user-cell .user-info .username[data-v-2b760d50]{color:#8b949e}.profile-page.theme-dark[data-v-2b760d50] .ant-tag{color:#c9d1d9}.profile-page.theme-dark[data-v-2b760d50] .ant-pagination .ant-pagination-item{background:#1e222d;border-color:#30363d}.profile-page.theme-dark[data-v-2b760d50] .ant-pagination .ant-pagination-item a{color:#c9d1d9}.profile-page.theme-dark[data-v-2b760d50] .ant-pagination .ant-pagination-item:hover{border-color:#1890ff}.profile-page.theme-dark[data-v-2b760d50] .ant-pagination .ant-pagination-item-active{background:#1890ff;border-color:#1890ff}.profile-page.theme-dark[data-v-2b760d50] .ant-pagination .ant-pagination-item-active a{color:#fff}.profile-page.theme-dark[data-v-2b760d50] .ant-pagination .ant-pagination-next .ant-pagination-item-link,.profile-page.theme-dark[data-v-2b760d50] .ant-pagination .ant-pagination-prev .ant-pagination-item-link{background:#1e222d;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark[data-v-2b760d50] .ant-pagination .ant-pagination-options .ant-select-selector{background:#0d1117;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark[data-v-2b760d50] .ant-btn.ant-btn-default{background:#1e222d;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark[data-v-2b760d50] .ant-btn.ant-btn-default:hover{border-color:#1890ff;color:#1890ff}@media screen and (max-width:768px){.profile-page[data-v-2b760d50]{padding:12px}.profile-page .page-header[data-v-2b760d50]{margin-bottom:16px}.profile-page .page-header .page-title[data-v-2b760d50]{font-size:20px}.profile-page .page-header .page-title .anticon[data-v-2b760d50]{font-size:22px}.profile-page .page-header .page-desc[data-v-2b760d50]{font-size:13px}.profile-page .profile-cards-row[data-v-2b760d50]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .profile-card-col[data-v-2b760d50]{margin-bottom:12px}.profile-page .profile-cards-row .right-cards-col .right-cards-row[data-v-2b760d50]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .right-cards-col .right-cards-row .ant-col[data-v-2b760d50]{margin-bottom:12px}.profile-page .profile-card[data-v-2b760d50]{border-radius:10px}.profile-page .profile-card .avatar-section[data-v-2b760d50]{padding:16px 0}.profile-page .profile-card .avatar-section[data-v-2b760d50] .ant-avatar{width:80px!important;height:80px!important;line-height:80px!important}.profile-page .profile-card .avatar-section .username[data-v-2b760d50]{font-size:18px;margin:12px 0 6px}.profile-page .profile-card .profile-info .info-item[data-v-2b760d50]{padding:10px 0;-ms-flex-wrap:wrap;flex-wrap:wrap}.profile-page .profile-card .profile-info .info-item .anticon[data-v-2b760d50]{font-size:14px;margin-right:8px}.profile-page .profile-card .profile-info .info-item .label[data-v-2b760d50]{font-size:13px}.profile-page .profile-card .profile-info .info-item .value[data-v-2b760d50]{font-size:13px;word-break:break-all}.profile-page .credits-card[data-v-2b760d50]{border-radius:10px}.profile-page .credits-card .credits-header .credits-title[data-v-2b760d50]{font-size:15px}.profile-page .credits-card .credits-header .credits-title .anticon[data-v-2b760d50]{font-size:16px}.profile-page .credits-card .credits-body[data-v-2b760d50]{padding:16px 0}.profile-page .credits-card .credits-body .credits-amount .amount-value[data-v-2b760d50]{font-size:32px}.profile-page .credits-card .credits-body .credits-amount .amount-label[data-v-2b760d50]{font-size:14px}.profile-page .credits-card .credits-body .vip-status[data-v-2b760d50]{font-size:12px;margin-top:10px}.profile-page .credits-card .credits-actions .ant-btn[data-v-2b760d50]{height:34px;padding:0 20px;font-size:14px}.profile-page .credits-card .credits-hint[data-v-2b760d50]{font-size:11px;margin-top:10px}.profile-page .referral-card[data-v-2b760d50]{border-radius:10px}.profile-page .referral-card .referral-header .referral-title[data-v-2b760d50]{font-size:15px}.profile-page .referral-card .referral-header .referral-title .anticon[data-v-2b760d50]{font-size:16px}.profile-page .referral-card .referral-body[data-v-2b760d50]{padding:10px 0}.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-value[data-v-2b760d50]{font-size:24px}.profile-page .referral-card .referral-body .referral-link-section .link-label[data-v-2b760d50],.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-label[data-v-2b760d50]{font-size:11px}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-2b760d50] .ant-input{font-size:12px}.profile-page .referral-card .referral-body .referral-hint[data-v-2b760d50]{font-size:11px;padding-top:8px}.profile-page .edit-card[data-v-2b760d50]{border-radius:10px;margin-top:12px!important}.profile-page .edit-card[data-v-2b760d50] .ant-card-body{padding:12px}.profile-page .edit-card[data-v-2b760d50] .ant-tabs-nav .ant-tabs-tab{padding:10px 12px;font-size:13px}.profile-page .edit-card[data-v-2b760d50] .ant-tabs-nav-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}.profile-page .edit-card[data-v-2b760d50] .ant-tabs-nav-scroll::-webkit-scrollbar{display:none}.profile-page .edit-card .password-form[data-v-2b760d50],.profile-page .edit-card .profile-form[data-v-2b760d50]{max-width:100%}.profile-page .edit-card .password-form[data-v-2b760d50] .ant-form-item-label,.profile-page .edit-card .profile-form[data-v-2b760d50] .ant-form-item-label{padding-bottom:4px}.profile-page .edit-card .password-form[data-v-2b760d50] .ant-form-item-label label,.profile-page .edit-card .profile-form[data-v-2b760d50] .ant-form-item-label label{font-size:13px}.profile-page .edit-card .password-form[data-v-2b760d50] .ant-input,.profile-page .edit-card .password-form[data-v-2b760d50] .ant-input-password,.profile-page .edit-card .profile-form[data-v-2b760d50] .ant-input,.profile-page .edit-card .profile-form[data-v-2b760d50] .ant-input-password{font-size:14px}.profile-page .edit-card .password-form .email-hint[data-v-2b760d50],.profile-page .edit-card .profile-form .email-hint[data-v-2b760d50]{font-size:11px}.profile-page .edit-card .password-form[data-v-2b760d50] .ant-alert{font-size:12px;padding:8px 12px}.profile-page .edit-card .notification-settings-form[data-v-2b760d50] .ant-alert{font-size:12px;padding:8px 12px;margin-bottom:16px!important}.profile-page .edit-card .notification-settings-form[data-v-2b760d50] .ant-form{max-width:100%}.profile-page .edit-card .notification-settings-form[data-v-2b760d50] .ant-checkbox-group .ant-row{margin-left:0!important;margin-right:0!important}.profile-page .edit-card .notification-settings-form[data-v-2b760d50] .ant-checkbox-group .ant-row .ant-col{padding-left:0!important;padding-right:8px!important}.profile-page .edit-card .notification-settings-form[data-v-2b760d50] .ant-checkbox-group .ant-checkbox-wrapper{font-size:13px;margin-bottom:6px}.profile-page .edit-card .notification-settings-form .field-hint[data-v-2b760d50]{font-size:11px;-ms-flex-wrap:wrap;flex-wrap:wrap}.profile-page .edit-card .notification-settings-form[data-v-2b760d50] .ant-form-item{margin-bottom:16px}.profile-page .edit-card .notification-settings-form[data-v-2b760d50] .ant-form-item:last-child .ant-btn{width:100%;margin-bottom:8px}.profile-page .edit-card .notification-settings-form[data-v-2b760d50] .ant-form-item:last-child .ant-btn+.ant-btn{margin-left:0!important}.profile-page .edit-card[data-v-2b760d50] .ant-table-wrapper{overflow-x:auto}.profile-page .edit-card[data-v-2b760d50] .ant-table-wrapper .ant-table{min-width:500px}.profile-page .referral-user-cell[data-v-2b760d50]{gap:8px}.profile-page .referral-user-cell[data-v-2b760d50] .ant-avatar{width:28px!important;height:28px!important;line-height:28px!important}.profile-page .referral-user-cell .user-info .nickname[data-v-2b760d50]{font-size:13px}.profile-page .referral-user-cell .user-info .username[data-v-2b760d50]{font-size:11px}}@media screen and (max-width:480px){.profile-page[data-v-2b760d50]{padding:8px}.profile-page .page-header[data-v-2b760d50]{margin-bottom:12px}.profile-page .page-header .page-title[data-v-2b760d50]{font-size:18px;gap:8px}.profile-page .page-header .page-title .anticon[data-v-2b760d50]{font-size:20px}.profile-page .credits-card .credits-body .credits-amount .amount-value[data-v-2b760d50]{font-size:28px}.profile-page .credits-card .credits-body .credits-amount .amount-label[data-v-2b760d50]{font-size:13px}.profile-page .credits-card .credits-actions .ant-btn[data-v-2b760d50]{width:100%}.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-value[data-v-2b760d50]{font-size:20px}.profile-page .edit-card[data-v-2b760d50] .ant-tabs-nav .ant-tabs-tab{padding:8px 10px;font-size:12px}.profile-page .edit-card .notification-settings-form[data-v-2b760d50] .ant-checkbox-group .ant-row .ant-col{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}} \ No newline at end of file diff --git a/frontend/dist/css/271.2ed32d66.css b/frontend/dist/css/271.2ed32d66.css deleted file mode 100644 index f835d1c..0000000 --- a/frontend/dist/css/271.2ed32d66.css +++ /dev/null @@ -1 +0,0 @@ -.profile-page[data-v-2b760d50]{padding:24px;min-height:calc(100vh - 120px);background:-webkit-gradient(linear,left top,left bottom,from(#f8fafc),to(#f1f5f9));background:linear-gradient(180deg,#f8fafc,#f1f5f9)}.profile-page .page-header[data-v-2b760d50]{margin-bottom:24px}.profile-page .page-header .page-title[data-v-2b760d50]{font-size:24px;font-weight:700;margin:0 0 8px 0;color:#1e3a5f;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px}.profile-page .page-header .page-title .anticon[data-v-2b760d50]{font-size:28px;color:#1890ff}.profile-page .page-header .page-desc[data-v-2b760d50]{color:#64748b;font-size:14px;margin:0}.profile-page .profile-cards-row[data-v-2b760d50]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.profile-page .profile-cards-row .profile-card-col .ant-card[data-v-2b760d50],.profile-page .profile-cards-row .profile-card-col[data-v-2b760d50],.profile-page .profile-cards-row .right-cards-col .ant-card[data-v-2b760d50],.profile-page .profile-cards-row .right-cards-col[data-v-2b760d50]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .profile-card-col .ant-card[data-v-2b760d50],.profile-page .profile-cards-row .right-cards-col .ant-card[data-v-2b760d50]{height:100%}.profile-page .profile-cards-row .profile-card-col[data-v-2b760d50] .ant-card-body,.profile-page .profile-cards-row .right-cards-col[data-v-2b760d50] .ant-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .right-cards-row[data-v-2b760d50]{height:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.profile-page .profile-cards-row .right-cards-row .ant-col .ant-card[data-v-2b760d50],.profile-page .profile-cards-row .right-cards-row .ant-col[data-v-2b760d50]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .right-cards-row .ant-col .ant-card[data-v-2b760d50]{height:100%}.profile-page .profile-cards-row .right-cards-row .ant-col[data-v-2b760d50] .ant-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-card[data-v-2b760d50]{border-radius:12px;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08);text-align:center}.profile-page .profile-card .avatar-section[data-v-2b760d50]{padding:20px 0}.profile-page .profile-card .avatar-section .ant-avatar[data-v-2b760d50]{-webkit-box-shadow:0 4px 12px rgba(0,0,0,.15);box-shadow:0 4px 12px rgba(0,0,0,.15)}.profile-page .profile-card .avatar-section .username[data-v-2b760d50]{margin:16px 0 8px;font-size:20px;font-weight:600;color:#1e3a5f}.profile-page .profile-card .avatar-section .user-role[data-v-2b760d50]{margin:0}.profile-page .profile-card .profile-info[data-v-2b760d50]{text-align:left;-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:distribute;justify-content:space-around}.profile-page .profile-card .profile-info .info-item[data-v-2b760d50]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:12px 0;border-bottom:1px solid #f0f0f0}.profile-page .profile-card .profile-info .info-item[data-v-2b760d50]:last-child{border-bottom:none}.profile-page .profile-card .profile-info .info-item .anticon[data-v-2b760d50]{font-size:16px;color:#1890ff;margin-right:12px}.profile-page .profile-card .profile-info .info-item .label[data-v-2b760d50]{color:#64748b;margin-right:8px}.profile-page .profile-card .profile-info .info-item .value[data-v-2b760d50]{color:#1e3a5f;font-weight:500}.profile-page .edit-card[data-v-2b760d50]{border-radius:12px;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08)}.profile-page .edit-card .password-form[data-v-2b760d50],.profile-page .edit-card .profile-form[data-v-2b760d50]{max-width:500px}.profile-page .edit-card .password-form[data-v-2b760d50] .ant-input,.profile-page .edit-card .password-form[data-v-2b760d50] .ant-input-password,.profile-page .edit-card .profile-form[data-v-2b760d50] .ant-input,.profile-page .edit-card .profile-form[data-v-2b760d50] .ant-input-password{border-radius:8px}.profile-page .edit-card .password-form .email-hint[data-v-2b760d50],.profile-page .edit-card .profile-form .email-hint[data-v-2b760d50]{margin-top:8px;font-size:12px;color:rgba(0,0,0,.45)}.profile-page .edit-card .password-form .email-hint.email-warning[data-v-2b760d50],.profile-page .edit-card .profile-form .email-hint.email-warning[data-v-2b760d50]{color:#faad14}.profile-page .edit-card .amount-positive[data-v-2b760d50]{color:#52c41a;font-weight:600}.profile-page .edit-card .amount-negative[data-v-2b760d50]{color:#ff4d4f;font-weight:600}.profile-page .edit-card .notification-settings-form .field-hint[data-v-2b760d50]{margin-top:6px;font-size:12px;color:rgba(0,0,0,.45);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:4px}.profile-page .edit-card .notification-settings-form .field-hint .anticon[data-v-2b760d50]{font-size:12px}.profile-page .edit-card .notification-settings-form[data-v-2b760d50] .ant-checkbox-group{width:100%}.profile-page .edit-card .notification-settings-form[data-v-2b760d50] .ant-checkbox-wrapper{margin-bottom:8px}.profile-page .credits-card[data-v-2b760d50]{border-radius:12px;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08);background:linear-gradient(135deg,#667eea,#764ba2);color:#fff}.profile-page .credits-card[data-v-2b760d50] .ant-card-body{background:transparent;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .credits-card[data-v-2b760d50] .ant-divider{border-color:hsla(0,0%,100%,.2)}.profile-page .credits-card .credits-header .credits-title[data-v-2b760d50]{font-size:16px;font-weight:600;margin:0;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.profile-page .credits-card .credits-header .credits-title .anticon[data-v-2b760d50]{font-size:18px}.profile-page .credits-card .credits-body[data-v-2b760d50]{padding:20px 0;text-align:center;-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.profile-page .credits-card .credits-body .credits-amount .amount-value[data-v-2b760d50]{font-size:42px;font-weight:700;color:#fff;text-shadow:0 2px 4px rgba(0,0,0,.2)}.profile-page .credits-card .credits-body .credits-amount .amount-label[data-v-2b760d50]{font-size:16px;color:hsla(0,0%,100%,.9);margin-left:8px}.profile-page .credits-card .credits-body .vip-status[data-v-2b760d50]{margin-top:12px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:6px;font-size:13px}.profile-page .credits-card .credits-body .vip-status .vip-active[data-v-2b760d50]{color:gold}.profile-page .credits-card .credits-body .vip-status .vip-expired[data-v-2b760d50]{color:hsla(0,0%,100%,.6)}.profile-page .credits-card .credits-body .vip-status .no-vip[data-v-2b760d50]{color:hsla(0,0%,100%,.7)}.profile-page .credits-card .credits-actions[data-v-2b760d50]{text-align:center;margin-top:auto}.profile-page .credits-card .credits-actions .ant-btn[data-v-2b760d50]{border-radius:20px;padding:0 24px;height:36px;font-weight:500;background:#fff;color:#667eea;border:none}.profile-page .credits-card .credits-actions .ant-btn[data-v-2b760d50]:hover{background:hsla(0,0%,100%,.9);color:#764ba2}.profile-page .credits-card .credits-hint[data-v-2b760d50]{margin-top:12px;text-align:center;font-size:12px;color:hsla(0,0%,100%,.7);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:6px}.profile-page .referral-card[data-v-2b760d50]{border-radius:12px;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08);background:linear-gradient(135deg,#11998e,#38ef7d);color:#fff}.profile-page .referral-card[data-v-2b760d50] .ant-card-body{background:transparent;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .referral-card[data-v-2b760d50] .ant-divider{border-color:hsla(0,0%,100%,.2)}.profile-page .referral-card .referral-header .referral-title[data-v-2b760d50]{font-size:16px;font-weight:600;margin:0;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.profile-page .referral-card .referral-header .referral-title .anticon[data-v-2b760d50]{font-size:18px}.profile-page .referral-card .referral-body[data-v-2b760d50]{padding:12px 0;-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.profile-page .referral-card .referral-body .referral-stats[data-v-2b760d50]{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;justify-content:space-around}.profile-page .referral-card .referral-body .referral-stats .stat-item[data-v-2b760d50]{text-align:center}.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-value[data-v-2b760d50]{font-size:28px;font-weight:700;color:#fff;display:block}.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-label[data-v-2b760d50]{font-size:12px;color:hsla(0,0%,100%,.8)}.profile-page .referral-card .referral-body .referral-link-section .link-label[data-v-2b760d50]{font-size:12px;color:hsla(0,0%,100%,.9);margin-bottom:6px}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-2b760d50] .ant-input{background:hsla(0,0%,100%,.2);border:1px solid hsla(0,0%,100%,.3);color:#fff}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-2b760d50] .ant-input::-webkit-input-placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-2b760d50] .ant-input::-moz-placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-2b760d50] .ant-input:-ms-input-placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-2b760d50] .ant-input::-ms-input-placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-2b760d50] .ant-input::placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-2b760d50] .anticon-copy{color:#fff}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-2b760d50] .anticon-copy:hover{color:gold}.profile-page .referral-card .referral-body .referral-hint[data-v-2b760d50]{margin-top:auto;text-align:center;font-size:12px;color:hsla(0,0%,100%,.85);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:6px}.profile-page .referral-card .referral-body .referral-hint .anticon-gift[data-v-2b760d50]{color:gold}.profile-page .referral-user-cell[data-v-2b760d50]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:10px}.profile-page .referral-user-cell .user-info[data-v-2b760d50]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .referral-user-cell .user-info .nickname[data-v-2b760d50]{font-weight:500;color:#333}.profile-page .referral-user-cell .user-info .username[data-v-2b760d50]{font-size:12px;color:#999}.profile-page .exchange-config-section .credential-hint[data-v-2b760d50]{font-family:SFMono-Regular,Consolas,monospace;font-size:13px;color:#666}.profile-page .test-result-msg[data-v-2b760d50]{margin-top:8px;font-size:13px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px}.profile-page .test-result-msg.success[data-v-2b760d50]{color:#52c41a}.profile-page .test-result-msg.error[data-v-2b760d50]{color:#f5222d}.profile-page.theme-dark[data-v-2b760d50]{background:-webkit-gradient(linear,left top,left bottom,from(#0d1117),to(#161b22));background:linear-gradient(180deg,#0d1117,#161b22)}.profile-page.theme-dark .page-header .page-title[data-v-2b760d50]{color:#e0e6ed}.profile-page.theme-dark .page-header .page-desc[data-v-2b760d50]{color:#8b949e}.profile-page.theme-dark .edit-card[data-v-2b760d50],.profile-page.theme-dark .profile-card[data-v-2b760d50]{background:#1e222d;-webkit-box-shadow:0 4px 24px rgba(0,0,0,.25);box-shadow:0 4px 24px rgba(0,0,0,.25)}.profile-page.theme-dark .edit-card[data-v-2b760d50] .ant-card-body,.profile-page.theme-dark .profile-card[data-v-2b760d50] .ant-card-body{background:#1e222d}.profile-page.theme-dark .profile-card .avatar-section .username[data-v-2b760d50]{color:#e0e6ed}.profile-page.theme-dark .profile-card .profile-info .info-item[data-v-2b760d50]{border-bottom-color:#30363d}.profile-page.theme-dark .profile-card .profile-info .info-item .label[data-v-2b760d50]{color:#8b949e}.profile-page.theme-dark .profile-card .profile-info .info-item .value[data-v-2b760d50]{color:#e0e6ed}.profile-page.theme-dark .edit-card[data-v-2b760d50] .ant-tabs-bar{border-bottom-color:#30363d}.profile-page.theme-dark .edit-card[data-v-2b760d50] .ant-tabs-tab{color:#8b949e}.profile-page.theme-dark .edit-card[data-v-2b760d50] .ant-tabs-tab:hover{color:#e0e6ed}.profile-page.theme-dark .edit-card[data-v-2b760d50] .ant-tabs-tab-active{color:#1890ff}.profile-page.theme-dark .edit-card[data-v-2b760d50] .ant-form-item-label label{color:#c9d1d9}.profile-page.theme-dark .edit-card[data-v-2b760d50] .ant-input,.profile-page.theme-dark .edit-card[data-v-2b760d50] .ant-input-password{background:#0d1117;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark .edit-card[data-v-2b760d50] .ant-input-password:focus,.profile-page.theme-dark .edit-card[data-v-2b760d50] .ant-input-password:hover,.profile-page.theme-dark .edit-card[data-v-2b760d50] .ant-input:focus,.profile-page.theme-dark .edit-card[data-v-2b760d50] .ant-input:hover{border-color:#1890ff}.profile-page.theme-dark .credits-card[data-v-2b760d50]{background:linear-gradient(135deg,#1a1a2e,#16213e 50%,#0f3460);-webkit-box-shadow:0 4px 24px rgba(0,0,0,.25);box-shadow:0 4px 24px rgba(0,0,0,.25)}.profile-page.theme-dark .credits-card[data-v-2b760d50] .ant-divider{border-color:hsla(0,0%,100%,.1)}.profile-page.theme-dark .credits-card .credits-actions .ant-btn[data-v-2b760d50]{background:hsla(0,0%,100%,.15);color:#fff;border:1px solid hsla(0,0%,100%,.2)}.profile-page.theme-dark .credits-card .credits-actions .ant-btn[data-v-2b760d50]:hover{background:hsla(0,0%,100%,.25)}.profile-page.theme-dark[data-v-2b760d50] .ant-table-wrapper .ant-table{background:#1e222d;color:#c9d1d9}.profile-page.theme-dark[data-v-2b760d50] .ant-table-wrapper .ant-table-thead>tr>th{background:#2a2e39;color:#c9d1d9;border-bottom-color:#30363d}.profile-page.theme-dark[data-v-2b760d50] .ant-table-wrapper .ant-table-tbody>tr>td{background:#1e222d;color:#c9d1d9;border-bottom-color:#30363d}.profile-page.theme-dark[data-v-2b760d50] .ant-table-wrapper .ant-table-tbody>tr:hover>td{background:#2a2e39}.profile-page.theme-dark[data-v-2b760d50] .ant-table-wrapper .ant-table-placeholder{background:#1e222d;color:#8b949e}.profile-page.theme-dark[data-v-2b760d50] .ant-table-wrapper .ant-table-tbody>tr>td,.profile-page.theme-dark[data-v-2b760d50] .ant-table-wrapper .ant-table-tbody>tr>td :not(.ant-tag):not(.ant-btn),.profile-page.theme-dark[data-v-2b760d50] .ant-table-wrapper .ant-table-tbody>tr>td div,.profile-page.theme-dark[data-v-2b760d50] .ant-table-wrapper .ant-table-tbody>tr>td span{color:#c9d1d9}.profile-page.theme-dark[data-v-2b760d50] .ant-table-wrapper .amount-positive{color:#52c41a}.profile-page.theme-dark[data-v-2b760d50] .ant-table-wrapper .amount-negative{color:#f5222d}.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-form-item-label>label,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-form-item-label>label,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-form-item-label>label{color:#c9d1d9}.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-form-item-explain,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-form-item-extra,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-form-item-explain,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-form-item-extra,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-form-item-explain,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-form-item-extra{color:#8b949e}.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input-number,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input-password,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-select-selector,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input-number,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input-password,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-select-selector,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input-number,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input-password,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-select-selector{background:#0d1117;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input-number::-webkit-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input-password::-webkit-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input::-webkit-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-select-selector::-webkit-input-placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input-number::-webkit-input-placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input-password::-webkit-input-placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input::-webkit-input-placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-select-selector::-webkit-input-placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input-number::-webkit-input-placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input-password::-webkit-input-placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input::-webkit-input-placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-select-selector::-webkit-input-placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input-number::-moz-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input-password::-moz-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input::-moz-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-select-selector::-moz-placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input-number::-moz-placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input-password::-moz-placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input::-moz-placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-select-selector::-moz-placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input-number::-moz-placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input-password::-moz-placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input::-moz-placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-select-selector::-moz-placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input-number:-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input-password:-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input:-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-select-selector:-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input-number:-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input-password:-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input:-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-select-selector:-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input-number:-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input-password:-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input:-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-select-selector:-ms-input-placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input-number::-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input-password::-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input::-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-select-selector::-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input-number::-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input-password::-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input::-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-select-selector::-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input-number::-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input-password::-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input::-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-select-selector::-ms-input-placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input-number::placeholder,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input-password::placeholder,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-input::placeholder,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-select-selector::placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input-number::placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input-password::placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-input::placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-select-selector::placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input-number::placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input-password::placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-input::placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-select-selector::placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-checkbox-wrapper,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-checkbox-wrapper span,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-radio-wrapper,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-radio-wrapper span,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-select-selection-item,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-select-selection-placeholder,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-checkbox-wrapper,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-checkbox-wrapper span,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-radio-wrapper,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-radio-wrapper span,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-select-selection-item,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-select-selection-placeholder,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-checkbox-wrapper,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-checkbox-wrapper span,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-radio-wrapper,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-radio-wrapper span,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-select-selection-item,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-select-selection-placeholder{color:#c9d1d9}.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-radio-checked .ant-radio-inner,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-radio-checked .ant-radio-inner,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-radio-checked .ant-radio-inner{background-color:#1890ff;border-color:#1890ff}.profile-page.theme-dark .notification-settings-form .email-hint[data-v-2b760d50],.profile-page.theme-dark .notification-settings-form .field-hint[data-v-2b760d50],.profile-page.theme-dark .password-form .email-hint[data-v-2b760d50],.profile-page.theme-dark .password-form .field-hint[data-v-2b760d50],.profile-page.theme-dark .profile-form .email-hint[data-v-2b760d50],.profile-page.theme-dark .profile-form .field-hint[data-v-2b760d50]{color:#8b949e}.profile-page.theme-dark .notification-settings-form .email-warning[data-v-2b760d50],.profile-page.theme-dark .password-form .email-warning[data-v-2b760d50],.profile-page.theme-dark .profile-form .email-warning[data-v-2b760d50]{color:#f5222d}.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-alert{background:#1e222d;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-alert .ant-alert-message{color:#c9d1d9}.profile-page.theme-dark .exchange-config-section .credential-hint[data-v-2b760d50],.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-alert .ant-alert-description{color:#8b949e}.profile-page.theme-dark .test-result-msg.success[data-v-2b760d50]{color:#52c41a}.profile-page.theme-dark .test-result-msg.error[data-v-2b760d50]{color:#f5222d}.profile-page.theme-dark .referral-user-cell .user-info .nickname[data-v-2b760d50]{color:#c9d1d9}.profile-page.theme-dark .referral-user-cell .user-info .username[data-v-2b760d50]{color:#8b949e}.profile-page.theme-dark[data-v-2b760d50] .ant-tag{color:#c9d1d9}.profile-page.theme-dark[data-v-2b760d50] .ant-pagination .ant-pagination-item{background:#1e222d;border-color:#30363d}.profile-page.theme-dark[data-v-2b760d50] .ant-pagination .ant-pagination-item a{color:#c9d1d9}.profile-page.theme-dark[data-v-2b760d50] .ant-pagination .ant-pagination-item:hover{border-color:#1890ff}.profile-page.theme-dark[data-v-2b760d50] .ant-pagination .ant-pagination-item-active{background:#1890ff;border-color:#1890ff}.profile-page.theme-dark[data-v-2b760d50] .ant-pagination .ant-pagination-item-active a{color:#fff}.profile-page.theme-dark[data-v-2b760d50] .ant-pagination .ant-pagination-next .ant-pagination-item-link,.profile-page.theme-dark[data-v-2b760d50] .ant-pagination .ant-pagination-prev .ant-pagination-item-link{background:#1e222d;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark[data-v-2b760d50] .ant-pagination .ant-pagination-options .ant-select-selector{background:#0d1117;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark[data-v-2b760d50] .ant-btn.ant-btn-default{background:#1e222d;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark[data-v-2b760d50] .ant-btn.ant-btn-default:hover{border-color:#1890ff;color:#1890ff}@media screen and (max-width:768px){.profile-page[data-v-2b760d50]{padding:12px}.profile-page .page-header[data-v-2b760d50]{margin-bottom:16px}.profile-page .page-header .page-title[data-v-2b760d50]{font-size:20px}.profile-page .page-header .page-title .anticon[data-v-2b760d50]{font-size:22px}.profile-page .page-header .page-desc[data-v-2b760d50]{font-size:13px}.profile-page .profile-cards-row[data-v-2b760d50]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .profile-card-col[data-v-2b760d50]{margin-bottom:12px}.profile-page .profile-cards-row .right-cards-col .right-cards-row[data-v-2b760d50]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .right-cards-col .right-cards-row .ant-col[data-v-2b760d50]{margin-bottom:12px}.profile-page .profile-card[data-v-2b760d50]{border-radius:10px}.profile-page .profile-card .avatar-section[data-v-2b760d50]{padding:16px 0}.profile-page .profile-card .avatar-section[data-v-2b760d50] .ant-avatar{width:80px!important;height:80px!important;line-height:80px!important}.profile-page .profile-card .avatar-section .username[data-v-2b760d50]{font-size:18px;margin:12px 0 6px}.profile-page .profile-card .profile-info .info-item[data-v-2b760d50]{padding:10px 0;-ms-flex-wrap:wrap;flex-wrap:wrap}.profile-page .profile-card .profile-info .info-item .anticon[data-v-2b760d50]{font-size:14px;margin-right:8px}.profile-page .profile-card .profile-info .info-item .label[data-v-2b760d50]{font-size:13px}.profile-page .profile-card .profile-info .info-item .value[data-v-2b760d50]{font-size:13px;word-break:break-all}.profile-page .credits-card[data-v-2b760d50]{border-radius:10px}.profile-page .credits-card .credits-header .credits-title[data-v-2b760d50]{font-size:15px}.profile-page .credits-card .credits-header .credits-title .anticon[data-v-2b760d50]{font-size:16px}.profile-page .credits-card .credits-body[data-v-2b760d50]{padding:16px 0}.profile-page .credits-card .credits-body .credits-amount .amount-value[data-v-2b760d50]{font-size:32px}.profile-page .credits-card .credits-body .credits-amount .amount-label[data-v-2b760d50]{font-size:14px}.profile-page .credits-card .credits-body .vip-status[data-v-2b760d50]{font-size:12px;margin-top:10px}.profile-page .credits-card .credits-actions .ant-btn[data-v-2b760d50]{height:34px;padding:0 20px;font-size:14px}.profile-page .credits-card .credits-hint[data-v-2b760d50]{font-size:11px;margin-top:10px}.profile-page .referral-card[data-v-2b760d50]{border-radius:10px}.profile-page .referral-card .referral-header .referral-title[data-v-2b760d50]{font-size:15px}.profile-page .referral-card .referral-header .referral-title .anticon[data-v-2b760d50]{font-size:16px}.profile-page .referral-card .referral-body[data-v-2b760d50]{padding:10px 0}.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-value[data-v-2b760d50]{font-size:24px}.profile-page .referral-card .referral-body .referral-link-section .link-label[data-v-2b760d50],.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-label[data-v-2b760d50]{font-size:11px}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-2b760d50] .ant-input{font-size:12px}.profile-page .referral-card .referral-body .referral-hint[data-v-2b760d50]{font-size:11px;padding-top:8px}.profile-page .edit-card[data-v-2b760d50]{border-radius:10px;margin-top:12px!important}.profile-page .edit-card[data-v-2b760d50] .ant-card-body{padding:12px}.profile-page .edit-card[data-v-2b760d50] .ant-tabs-nav .ant-tabs-tab{padding:10px 12px;font-size:13px}.profile-page .edit-card[data-v-2b760d50] .ant-tabs-nav-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}.profile-page .edit-card[data-v-2b760d50] .ant-tabs-nav-scroll::-webkit-scrollbar{display:none}.profile-page .edit-card .password-form[data-v-2b760d50],.profile-page .edit-card .profile-form[data-v-2b760d50]{max-width:100%}.profile-page .edit-card .password-form[data-v-2b760d50] .ant-form-item-label,.profile-page .edit-card .profile-form[data-v-2b760d50] .ant-form-item-label{padding-bottom:4px}.profile-page .edit-card .password-form[data-v-2b760d50] .ant-form-item-label label,.profile-page .edit-card .profile-form[data-v-2b760d50] .ant-form-item-label label{font-size:13px}.profile-page .edit-card .password-form[data-v-2b760d50] .ant-input,.profile-page .edit-card .password-form[data-v-2b760d50] .ant-input-password,.profile-page .edit-card .profile-form[data-v-2b760d50] .ant-input,.profile-page .edit-card .profile-form[data-v-2b760d50] .ant-input-password{font-size:14px}.profile-page .edit-card .password-form .email-hint[data-v-2b760d50],.profile-page .edit-card .profile-form .email-hint[data-v-2b760d50]{font-size:11px}.profile-page .edit-card .password-form[data-v-2b760d50] .ant-alert{font-size:12px;padding:8px 12px}.profile-page .edit-card .notification-settings-form[data-v-2b760d50] .ant-alert{font-size:12px;padding:8px 12px;margin-bottom:16px!important}.profile-page .edit-card .notification-settings-form[data-v-2b760d50] .ant-form{max-width:100%}.profile-page .edit-card .notification-settings-form[data-v-2b760d50] .ant-checkbox-group .ant-row{margin-left:0!important;margin-right:0!important}.profile-page .edit-card .notification-settings-form[data-v-2b760d50] .ant-checkbox-group .ant-row .ant-col{padding-left:0!important;padding-right:8px!important}.profile-page .edit-card .notification-settings-form[data-v-2b760d50] .ant-checkbox-group .ant-checkbox-wrapper{font-size:13px;margin-bottom:6px}.profile-page .edit-card .notification-settings-form .field-hint[data-v-2b760d50]{font-size:11px;-ms-flex-wrap:wrap;flex-wrap:wrap}.profile-page .edit-card .notification-settings-form[data-v-2b760d50] .ant-form-item{margin-bottom:16px}.profile-page .edit-card .notification-settings-form[data-v-2b760d50] .ant-form-item:last-child .ant-btn{width:100%;margin-bottom:8px}.profile-page .edit-card .notification-settings-form[data-v-2b760d50] .ant-form-item:last-child .ant-btn+.ant-btn{margin-left:0!important}.profile-page .edit-card[data-v-2b760d50] .ant-table-wrapper{overflow-x:auto}.profile-page .edit-card[data-v-2b760d50] .ant-table-wrapper .ant-table{min-width:500px}.profile-page .referral-user-cell[data-v-2b760d50]{gap:8px}.profile-page .referral-user-cell[data-v-2b760d50] .ant-avatar{width:28px!important;height:28px!important;line-height:28px!important}.profile-page .referral-user-cell .user-info .nickname[data-v-2b760d50]{font-size:13px}.profile-page .referral-user-cell .user-info .username[data-v-2b760d50]{font-size:11px}}@media screen and (max-width:480px){.profile-page[data-v-2b760d50]{padding:8px}.profile-page .page-header[data-v-2b760d50]{margin-bottom:12px}.profile-page .page-header .page-title[data-v-2b760d50]{font-size:18px;gap:8px}.profile-page .page-header .page-title .anticon[data-v-2b760d50]{font-size:20px}.profile-page .credits-card .credits-body .credits-amount .amount-value[data-v-2b760d50]{font-size:28px}.profile-page .credits-card .credits-body .credits-amount .amount-label[data-v-2b760d50]{font-size:13px}.profile-page .credits-card .credits-actions .ant-btn[data-v-2b760d50]{width:100%}.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-value[data-v-2b760d50]{font-size:20px}.profile-page .edit-card[data-v-2b760d50] .ant-tabs-nav .ant-tabs-tab{padding:8px 10px;font-size:12px}.profile-page .edit-card .notification-settings-form[data-v-2b760d50] .ant-checkbox-group .ant-row .ant-col{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}} \ No newline at end of file diff --git a/frontend/dist/css/467.02ed56c8.css b/frontend/dist/css/355.02ed56c8.css similarity index 100% rename from frontend/dist/css/467.02ed56c8.css rename to frontend/dist/css/355.02ed56c8.css diff --git a/frontend/dist/css/59.729cfe93.css b/frontend/dist/css/367.729cfe93.css similarity index 100% rename from frontend/dist/css/59.729cfe93.css rename to frontend/dist/css/367.729cfe93.css diff --git a/frontend/dist/css/251.20e2b587.css b/frontend/dist/css/397.20e2b587.css similarity index 100% rename from frontend/dist/css/251.20e2b587.css rename to frontend/dist/css/397.20e2b587.css diff --git a/frontend/dist/css/70.02ed56c8.css b/frontend/dist/css/40.02ed56c8.css similarity index 100% rename from frontend/dist/css/70.02ed56c8.css rename to frontend/dist/css/40.02ed56c8.css diff --git a/frontend/dist/css/407.1113ae8a.css b/frontend/dist/css/447.1113ae8a.css similarity index 100% rename from frontend/dist/css/407.1113ae8a.css rename to frontend/dist/css/447.1113ae8a.css diff --git a/frontend/dist/css/748.9a2b4136.css b/frontend/dist/css/55.9a2b4136.css similarity index 100% rename from frontend/dist/css/748.9a2b4136.css rename to frontend/dist/css/55.9a2b4136.css diff --git a/frontend/dist/css/472.1cc37f75.css b/frontend/dist/css/635.1cc37f75.css similarity index 100% rename from frontend/dist/css/472.1cc37f75.css rename to frontend/dist/css/635.1cc37f75.css diff --git a/frontend/dist/css/296.20e2b587.css b/frontend/dist/css/645.20e2b587.css similarity index 100% rename from frontend/dist/css/296.20e2b587.css rename to frontend/dist/css/645.20e2b587.css diff --git a/frontend/dist/css/359.443c56d4.css b/frontend/dist/css/684.443c56d4.css similarity index 100% rename from frontend/dist/css/359.443c56d4.css rename to frontend/dist/css/684.443c56d4.css diff --git a/frontend/dist/css/471.1113ae8a.css b/frontend/dist/css/734.1113ae8a.css similarity index 100% rename from frontend/dist/css/471.1113ae8a.css rename to frontend/dist/css/734.1113ae8a.css diff --git a/frontend/dist/css/438.fea2e0fa.css b/frontend/dist/css/811.fea2e0fa.css similarity index 100% rename from frontend/dist/css/438.fea2e0fa.css rename to frontend/dist/css/811.fea2e0fa.css diff --git a/frontend/dist/css/829.e48d5d81.css b/frontend/dist/css/829.e48d5d81.css new file mode 100644 index 0000000..fdd2b37 --- /dev/null +++ b/frontend/dist/css/829.e48d5d81.css @@ -0,0 +1 @@ +.profile-page[data-v-86a53e9c]{padding:24px;min-height:calc(100vh - 120px);background:-webkit-gradient(linear,left top,left bottom,from(#f8fafc),to(#f1f5f9));background:linear-gradient(180deg,#f8fafc,#f1f5f9)}.profile-page .page-header[data-v-86a53e9c]{margin-bottom:24px}.profile-page .page-header .page-title[data-v-86a53e9c]{font-size:24px;font-weight:700;margin:0 0 8px 0;color:#1e3a5f;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px}.profile-page .page-header .page-title .anticon[data-v-86a53e9c]{font-size:28px;color:#1890ff}.profile-page .page-header .page-desc[data-v-86a53e9c]{color:#64748b;font-size:14px;margin:0}.profile-page .profile-cards-row[data-v-86a53e9c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.profile-page .profile-cards-row .profile-card-col .ant-card[data-v-86a53e9c],.profile-page .profile-cards-row .profile-card-col[data-v-86a53e9c],.profile-page .profile-cards-row .right-cards-col .ant-card[data-v-86a53e9c],.profile-page .profile-cards-row .right-cards-col[data-v-86a53e9c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .profile-card-col .ant-card[data-v-86a53e9c],.profile-page .profile-cards-row .right-cards-col .ant-card[data-v-86a53e9c]{height:100%}.profile-page .profile-cards-row .profile-card-col[data-v-86a53e9c] .ant-card-body,.profile-page .profile-cards-row .right-cards-col[data-v-86a53e9c] .ant-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .right-cards-row[data-v-86a53e9c]{height:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.profile-page .profile-cards-row .right-cards-row .ant-col .ant-card[data-v-86a53e9c],.profile-page .profile-cards-row .right-cards-row .ant-col[data-v-86a53e9c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .right-cards-row .ant-col .ant-card[data-v-86a53e9c]{height:100%}.profile-page .profile-cards-row .right-cards-row .ant-col[data-v-86a53e9c] .ant-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-card[data-v-86a53e9c]{border-radius:12px;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08);text-align:center}.profile-page .profile-card .avatar-section[data-v-86a53e9c]{padding:20px 0}.profile-page .profile-card .avatar-section .ant-avatar[data-v-86a53e9c]{-webkit-box-shadow:0 4px 12px rgba(0,0,0,.15);box-shadow:0 4px 12px rgba(0,0,0,.15)}.profile-page .profile-card .avatar-section .username[data-v-86a53e9c]{margin:16px 0 8px;font-size:20px;font-weight:600;color:#1e3a5f}.profile-page .profile-card .avatar-section .user-role[data-v-86a53e9c]{margin:0}.profile-page .profile-card .profile-info[data-v-86a53e9c]{text-align:left;-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:distribute;justify-content:space-around}.profile-page .profile-card .profile-info .info-item[data-v-86a53e9c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:12px 0;border-bottom:1px solid #f0f0f0}.profile-page .profile-card .profile-info .info-item[data-v-86a53e9c]:last-child{border-bottom:none}.profile-page .profile-card .profile-info .info-item .anticon[data-v-86a53e9c]{font-size:16px;color:#1890ff;margin-right:12px}.profile-page .profile-card .profile-info .info-item .label[data-v-86a53e9c]{color:#64748b;margin-right:8px}.profile-page .profile-card .profile-info .info-item .value[data-v-86a53e9c]{color:#1e3a5f;font-weight:500}.profile-page .edit-card[data-v-86a53e9c]{border-radius:12px;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08)}.profile-page .edit-card .password-form[data-v-86a53e9c],.profile-page .edit-card .profile-form[data-v-86a53e9c]{max-width:500px}.profile-page .edit-card .password-form[data-v-86a53e9c] .ant-input,.profile-page .edit-card .password-form[data-v-86a53e9c] .ant-input-password,.profile-page .edit-card .profile-form[data-v-86a53e9c] .ant-input,.profile-page .edit-card .profile-form[data-v-86a53e9c] .ant-input-password{border-radius:8px}.profile-page .edit-card .password-form .email-hint[data-v-86a53e9c],.profile-page .edit-card .profile-form .email-hint[data-v-86a53e9c]{margin-top:8px;font-size:12px;color:rgba(0,0,0,.45)}.profile-page .edit-card .password-form .email-hint.email-warning[data-v-86a53e9c],.profile-page .edit-card .profile-form .email-hint.email-warning[data-v-86a53e9c]{color:#faad14}.profile-page .edit-card .amount-positive[data-v-86a53e9c]{color:#52c41a;font-weight:600}.profile-page .edit-card .amount-negative[data-v-86a53e9c]{color:#ff4d4f;font-weight:600}.profile-page .edit-card .notification-settings-form .field-hint[data-v-86a53e9c]{margin-top:6px;font-size:12px;color:rgba(0,0,0,.45);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:4px}.profile-page .edit-card .notification-settings-form .field-hint .anticon[data-v-86a53e9c]{font-size:12px}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-checkbox-group{width:100%}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-checkbox-wrapper{margin-bottom:8px}.profile-page .credits-card[data-v-86a53e9c]{border-radius:12px;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08);background:linear-gradient(135deg,#667eea,#764ba2);color:#fff}.profile-page .credits-card[data-v-86a53e9c] .ant-card-body{background:transparent;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .credits-card[data-v-86a53e9c] .ant-divider{border-color:hsla(0,0%,100%,.2)}.profile-page .credits-card .credits-header .credits-title[data-v-86a53e9c]{font-size:16px;font-weight:600;margin:0;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.profile-page .credits-card .credits-header .credits-title .anticon[data-v-86a53e9c]{font-size:18px}.profile-page .credits-card .credits-body[data-v-86a53e9c]{padding:20px 0;text-align:center;-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.profile-page .credits-card .credits-body .credits-amount .amount-value[data-v-86a53e9c]{font-size:42px;font-weight:700;color:#fff;text-shadow:0 2px 4px rgba(0,0,0,.2)}.profile-page .credits-card .credits-body .credits-amount .amount-label[data-v-86a53e9c]{font-size:16px;color:hsla(0,0%,100%,.9);margin-left:8px}.profile-page .credits-card .credits-body .vip-status[data-v-86a53e9c]{margin-top:12px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:6px;font-size:13px}.profile-page .credits-card .credits-body .vip-status .vip-active[data-v-86a53e9c]{color:gold}.profile-page .credits-card .credits-body .vip-status .vip-expired[data-v-86a53e9c]{color:hsla(0,0%,100%,.6)}.profile-page .credits-card .credits-body .vip-status .no-vip[data-v-86a53e9c]{color:hsla(0,0%,100%,.7)}.profile-page .credits-card .credits-actions[data-v-86a53e9c]{text-align:center;margin-top:auto}.profile-page .credits-card .credits-actions .ant-btn[data-v-86a53e9c]{border-radius:20px;padding:0 24px;height:36px;font-weight:500;background:#fff;color:#667eea;border:none}.profile-page .credits-card .credits-actions .ant-btn[data-v-86a53e9c]:hover{background:hsla(0,0%,100%,.9);color:#764ba2}.profile-page .credits-card .credits-hint[data-v-86a53e9c]{margin-top:12px;text-align:center;font-size:12px;color:hsla(0,0%,100%,.7);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:6px}.profile-page .referral-card[data-v-86a53e9c]{border-radius:12px;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08);background:linear-gradient(135deg,#11998e,#38ef7d);color:#fff}.profile-page .referral-card[data-v-86a53e9c] .ant-card-body{background:transparent;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .referral-card[data-v-86a53e9c] .ant-divider{border-color:hsla(0,0%,100%,.2)}.profile-page .referral-card .referral-header .referral-title[data-v-86a53e9c]{font-size:16px;font-weight:600;margin:0;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.profile-page .referral-card .referral-header .referral-title .anticon[data-v-86a53e9c]{font-size:18px}.profile-page .referral-card .referral-body[data-v-86a53e9c]{padding:12px 0;-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.profile-page .referral-card .referral-body .referral-stats[data-v-86a53e9c]{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;justify-content:space-around}.profile-page .referral-card .referral-body .referral-stats .stat-item[data-v-86a53e9c]{text-align:center}.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-value[data-v-86a53e9c]{font-size:28px;font-weight:700;color:#fff;display:block}.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-label[data-v-86a53e9c]{font-size:12px;color:hsla(0,0%,100%,.8)}.profile-page .referral-card .referral-body .referral-link-section .link-label[data-v-86a53e9c]{font-size:12px;color:hsla(0,0%,100%,.9);margin-bottom:6px}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .ant-input{background:hsla(0,0%,100%,.2);border:1px solid hsla(0,0%,100%,.3);color:#fff}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .ant-input::-webkit-input-placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .ant-input::-moz-placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .ant-input:-ms-input-placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .ant-input::-ms-input-placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .ant-input::placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .anticon-copy{color:#fff}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .anticon-copy:hover{color:gold}.profile-page .referral-card .referral-body .referral-hint[data-v-86a53e9c]{margin-top:auto;text-align:center;font-size:12px;color:hsla(0,0%,100%,.85);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:6px}.profile-page .referral-card .referral-body .referral-hint .anticon-gift[data-v-86a53e9c]{color:gold}.profile-page .referral-user-cell[data-v-86a53e9c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:10px}.profile-page .referral-user-cell .user-info[data-v-86a53e9c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .referral-user-cell .user-info .nickname[data-v-86a53e9c]{font-weight:500;color:#333}.profile-page .referral-user-cell .user-info .username[data-v-86a53e9c]{font-size:12px;color:#999}.profile-page .exchange-config-section .credential-hint[data-v-86a53e9c]{font-family:SFMono-Regular,Consolas,monospace;font-size:13px;color:#666}.profile-page .test-result-msg[data-v-86a53e9c]{margin-top:8px;font-size:13px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px}.profile-page .test-result-msg.success[data-v-86a53e9c]{color:#52c41a}.profile-page .test-result-msg.error[data-v-86a53e9c]{color:#f5222d}.profile-page.theme-dark[data-v-86a53e9c]{background:-webkit-gradient(linear,left top,left bottom,from(#0d1117),to(#161b22));background:linear-gradient(180deg,#0d1117,#161b22)}.profile-page.theme-dark .page-header .page-title[data-v-86a53e9c]{color:#e0e6ed}.profile-page.theme-dark .page-header .page-desc[data-v-86a53e9c]{color:#8b949e}.profile-page.theme-dark .edit-card[data-v-86a53e9c],.profile-page.theme-dark .profile-card[data-v-86a53e9c]{background:#1e222d;-webkit-box-shadow:0 4px 24px rgba(0,0,0,.25);box-shadow:0 4px 24px rgba(0,0,0,.25)}.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-card-body,.profile-page.theme-dark .profile-card[data-v-86a53e9c] .ant-card-body{background:#1e222d}.profile-page.theme-dark .profile-card .avatar-section .username[data-v-86a53e9c]{color:#e0e6ed}.profile-page.theme-dark .profile-card .profile-info .info-item[data-v-86a53e9c]{border-bottom-color:#30363d}.profile-page.theme-dark .profile-card .profile-info .info-item .label[data-v-86a53e9c]{color:#8b949e}.profile-page.theme-dark .profile-card .profile-info .info-item .value[data-v-86a53e9c]{color:#e0e6ed}.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-tabs-bar{border-bottom-color:#30363d}.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-tabs-tab{color:#8b949e}.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-tabs-tab:hover{color:#e0e6ed}.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-tabs-tab-active{color:#1890ff}.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-form-item-label label{color:#c9d1d9}.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-input,.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-input-password{background:#0d1117;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-input-password:focus,.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-input-password:hover,.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-input:focus,.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-input:hover{border-color:#1890ff}.profile-page.theme-dark .credits-card[data-v-86a53e9c]{background:linear-gradient(135deg,#1a1a2e,#16213e 50%,#0f3460);-webkit-box-shadow:0 4px 24px rgba(0,0,0,.25);box-shadow:0 4px 24px rgba(0,0,0,.25)}.profile-page.theme-dark .credits-card[data-v-86a53e9c] .ant-divider{border-color:hsla(0,0%,100%,.1)}.profile-page.theme-dark .credits-card .credits-actions .ant-btn[data-v-86a53e9c]{background:hsla(0,0%,100%,.15);color:#fff;border:1px solid hsla(0,0%,100%,.2)}.profile-page.theme-dark .credits-card .credits-actions .ant-btn[data-v-86a53e9c]:hover{background:hsla(0,0%,100%,.25)}.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table{background:#1e222d;color:#c9d1d9}.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table-thead>tr>th{background:#2a2e39;color:#c9d1d9;border-bottom-color:#30363d}.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table-tbody>tr>td{background:#1e222d;color:#c9d1d9;border-bottom-color:#30363d}.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table-tbody>tr:hover>td{background:#2a2e39}.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table-placeholder{background:#1e222d;color:#8b949e}.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table-tbody>tr>td,.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table-tbody>tr>td :not(.ant-tag):not(.ant-btn),.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table-tbody>tr>td div,.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table-tbody>tr>td span{color:#c9d1d9}.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .amount-positive{color:#52c41a}.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .amount-negative{color:#f5222d}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-form-item-label>label,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-form-item-label>label,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-form-item-label>label{color:#c9d1d9}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-form-item-explain,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-form-item-extra,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-form-item-explain,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-form-item-extra,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-form-item-explain,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-form-item-extra{color:#8b949e}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-number,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-password,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-select-selector,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-number,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-password,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-select-selector,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-number,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-password,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-select-selector{background:#0d1117;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-number::-webkit-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-password::-webkit-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input::-webkit-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-select-selector::-webkit-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-number::-webkit-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-password::-webkit-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input::-webkit-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-select-selector::-webkit-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-number::-webkit-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-password::-webkit-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input::-webkit-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-select-selector::-webkit-input-placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-number::-moz-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-password::-moz-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input::-moz-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-select-selector::-moz-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-number::-moz-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-password::-moz-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input::-moz-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-select-selector::-moz-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-number::-moz-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-password::-moz-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input::-moz-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-select-selector::-moz-placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-number:-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-password:-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input:-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-select-selector:-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-number:-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-password:-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input:-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-select-selector:-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-number:-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-password:-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input:-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-select-selector:-ms-input-placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-number::-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-password::-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input::-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-select-selector::-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-number::-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-password::-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input::-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-select-selector::-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-number::-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-password::-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input::-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-select-selector::-ms-input-placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-number::placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-password::placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input::placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-select-selector::placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-number::placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-password::placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input::placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-select-selector::placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-number::placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-password::placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input::placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-select-selector::placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-checkbox-wrapper,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-checkbox-wrapper span,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-radio-wrapper,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-radio-wrapper span,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-select-selection-item,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-select-selection-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-checkbox-wrapper,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-checkbox-wrapper span,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-radio-wrapper,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-radio-wrapper span,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-select-selection-item,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-select-selection-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-checkbox-wrapper,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-checkbox-wrapper span,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-radio-wrapper,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-radio-wrapper span,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-select-selection-item,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-select-selection-placeholder{color:#c9d1d9}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-radio-checked .ant-radio-inner,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-radio-checked .ant-radio-inner,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-radio-checked .ant-radio-inner{background-color:#1890ff;border-color:#1890ff}.profile-page.theme-dark .notification-settings-form .email-hint[data-v-86a53e9c],.profile-page.theme-dark .notification-settings-form .field-hint[data-v-86a53e9c],.profile-page.theme-dark .password-form .email-hint[data-v-86a53e9c],.profile-page.theme-dark .password-form .field-hint[data-v-86a53e9c],.profile-page.theme-dark .profile-form .email-hint[data-v-86a53e9c],.profile-page.theme-dark .profile-form .field-hint[data-v-86a53e9c]{color:#8b949e}.profile-page.theme-dark .notification-settings-form .email-warning[data-v-86a53e9c],.profile-page.theme-dark .password-form .email-warning[data-v-86a53e9c],.profile-page.theme-dark .profile-form .email-warning[data-v-86a53e9c]{color:#f5222d}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-alert{background:#1e222d;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-alert .ant-alert-message{color:#c9d1d9}.profile-page.theme-dark .exchange-config-section .credential-hint[data-v-86a53e9c],.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-alert .ant-alert-description{color:#8b949e}.profile-page.theme-dark .test-result-msg.success[data-v-86a53e9c]{color:#52c41a}.profile-page.theme-dark .test-result-msg.error[data-v-86a53e9c]{color:#f5222d}.profile-page.theme-dark .referral-user-cell .user-info .nickname[data-v-86a53e9c]{color:#c9d1d9}.profile-page.theme-dark .referral-user-cell .user-info .username[data-v-86a53e9c]{color:#8b949e}.profile-page.theme-dark[data-v-86a53e9c] .ant-tag{color:#c9d1d9}.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-item{background:#1e222d;border-color:#30363d}.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-item a{color:#c9d1d9}.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-item:hover{border-color:#1890ff}.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-item-active{background:#1890ff;border-color:#1890ff}.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-item-active a{color:#fff}.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-next .ant-pagination-item-link,.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-prev .ant-pagination-item-link{background:#1e222d;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-options .ant-select-selector{background:#0d1117;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark[data-v-86a53e9c] .ant-btn.ant-btn-default{background:#1e222d;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark[data-v-86a53e9c] .ant-btn.ant-btn-default:hover{border-color:#1890ff;color:#1890ff}@media screen and (max-width:768px){.profile-page[data-v-86a53e9c]{padding:12px}.profile-page .page-header[data-v-86a53e9c]{margin-bottom:16px}.profile-page .page-header .page-title[data-v-86a53e9c]{font-size:20px}.profile-page .page-header .page-title .anticon[data-v-86a53e9c]{font-size:22px}.profile-page .page-header .page-desc[data-v-86a53e9c]{font-size:13px}.profile-page .profile-cards-row[data-v-86a53e9c]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .profile-card-col[data-v-86a53e9c]{margin-bottom:12px}.profile-page .profile-cards-row .right-cards-col .right-cards-row[data-v-86a53e9c]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .right-cards-col .right-cards-row .ant-col[data-v-86a53e9c]{margin-bottom:12px}.profile-page .profile-card[data-v-86a53e9c]{border-radius:10px}.profile-page .profile-card .avatar-section[data-v-86a53e9c]{padding:16px 0}.profile-page .profile-card .avatar-section[data-v-86a53e9c] .ant-avatar{width:80px!important;height:80px!important;line-height:80px!important}.profile-page .profile-card .avatar-section .username[data-v-86a53e9c]{font-size:18px;margin:12px 0 6px}.profile-page .profile-card .profile-info .info-item[data-v-86a53e9c]{padding:10px 0;-ms-flex-wrap:wrap;flex-wrap:wrap}.profile-page .profile-card .profile-info .info-item .anticon[data-v-86a53e9c]{font-size:14px;margin-right:8px}.profile-page .profile-card .profile-info .info-item .label[data-v-86a53e9c]{font-size:13px}.profile-page .profile-card .profile-info .info-item .value[data-v-86a53e9c]{font-size:13px;word-break:break-all}.profile-page .credits-card[data-v-86a53e9c]{border-radius:10px}.profile-page .credits-card .credits-header .credits-title[data-v-86a53e9c]{font-size:15px}.profile-page .credits-card .credits-header .credits-title .anticon[data-v-86a53e9c]{font-size:16px}.profile-page .credits-card .credits-body[data-v-86a53e9c]{padding:16px 0}.profile-page .credits-card .credits-body .credits-amount .amount-value[data-v-86a53e9c]{font-size:32px}.profile-page .credits-card .credits-body .credits-amount .amount-label[data-v-86a53e9c]{font-size:14px}.profile-page .credits-card .credits-body .vip-status[data-v-86a53e9c]{font-size:12px;margin-top:10px}.profile-page .credits-card .credits-actions .ant-btn[data-v-86a53e9c]{height:34px;padding:0 20px;font-size:14px}.profile-page .credits-card .credits-hint[data-v-86a53e9c]{font-size:11px;margin-top:10px}.profile-page .referral-card[data-v-86a53e9c]{border-radius:10px}.profile-page .referral-card .referral-header .referral-title[data-v-86a53e9c]{font-size:15px}.profile-page .referral-card .referral-header .referral-title .anticon[data-v-86a53e9c]{font-size:16px}.profile-page .referral-card .referral-body[data-v-86a53e9c]{padding:10px 0}.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-value[data-v-86a53e9c]{font-size:24px}.profile-page .referral-card .referral-body .referral-link-section .link-label[data-v-86a53e9c],.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-label[data-v-86a53e9c]{font-size:11px}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .ant-input{font-size:12px}.profile-page .referral-card .referral-body .referral-hint[data-v-86a53e9c]{font-size:11px;padding-top:8px}.profile-page .edit-card[data-v-86a53e9c]{border-radius:10px;margin-top:12px!important}.profile-page .edit-card[data-v-86a53e9c] .ant-card-body{padding:12px}.profile-page .edit-card[data-v-86a53e9c] .ant-tabs-nav .ant-tabs-tab{padding:10px 12px;font-size:13px}.profile-page .edit-card[data-v-86a53e9c] .ant-tabs-nav-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}.profile-page .edit-card[data-v-86a53e9c] .ant-tabs-nav-scroll::-webkit-scrollbar{display:none}.profile-page .edit-card .password-form[data-v-86a53e9c],.profile-page .edit-card .profile-form[data-v-86a53e9c]{max-width:100%}.profile-page .edit-card .password-form[data-v-86a53e9c] .ant-form-item-label,.profile-page .edit-card .profile-form[data-v-86a53e9c] .ant-form-item-label{padding-bottom:4px}.profile-page .edit-card .password-form[data-v-86a53e9c] .ant-form-item-label label,.profile-page .edit-card .profile-form[data-v-86a53e9c] .ant-form-item-label label{font-size:13px}.profile-page .edit-card .password-form[data-v-86a53e9c] .ant-input,.profile-page .edit-card .password-form[data-v-86a53e9c] .ant-input-password,.profile-page .edit-card .profile-form[data-v-86a53e9c] .ant-input,.profile-page .edit-card .profile-form[data-v-86a53e9c] .ant-input-password{font-size:14px}.profile-page .edit-card .password-form .email-hint[data-v-86a53e9c],.profile-page .edit-card .profile-form .email-hint[data-v-86a53e9c]{font-size:11px}.profile-page .edit-card .password-form[data-v-86a53e9c] .ant-alert{font-size:12px;padding:8px 12px}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-alert{font-size:12px;padding:8px 12px;margin-bottom:16px!important}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-form{max-width:100%}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-checkbox-group .ant-row{margin-left:0!important;margin-right:0!important}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-checkbox-group .ant-row .ant-col{padding-left:0!important;padding-right:8px!important}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-checkbox-group .ant-checkbox-wrapper{font-size:13px;margin-bottom:6px}.profile-page .edit-card .notification-settings-form .field-hint[data-v-86a53e9c]{font-size:11px;-ms-flex-wrap:wrap;flex-wrap:wrap}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-form-item{margin-bottom:16px}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-form-item:last-child .ant-btn{width:100%;margin-bottom:8px}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-form-item:last-child .ant-btn+.ant-btn{margin-left:0!important}.profile-page .edit-card[data-v-86a53e9c] .ant-table-wrapper{overflow-x:auto}.profile-page .edit-card[data-v-86a53e9c] .ant-table-wrapper .ant-table{min-width:500px}.profile-page .referral-user-cell[data-v-86a53e9c]{gap:8px}.profile-page .referral-user-cell[data-v-86a53e9c] .ant-avatar{width:28px!important;height:28px!important;line-height:28px!important}.profile-page .referral-user-cell .user-info .nickname[data-v-86a53e9c]{font-size:13px}.profile-page .referral-user-cell .user-info .username[data-v-86a53e9c]{font-size:11px}}@media screen and (max-width:480px){.profile-page[data-v-86a53e9c]{padding:8px}.profile-page .page-header[data-v-86a53e9c]{margin-bottom:12px}.profile-page .page-header .page-title[data-v-86a53e9c]{font-size:18px;gap:8px}.profile-page .page-header .page-title .anticon[data-v-86a53e9c]{font-size:20px}.profile-page .credits-card .credits-body .credits-amount .amount-value[data-v-86a53e9c]{font-size:28px}.profile-page .credits-card .credits-body .credits-amount .amount-label[data-v-86a53e9c]{font-size:13px}.profile-page .credits-card .credits-actions .ant-btn[data-v-86a53e9c]{width:100%}.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-value[data-v-86a53e9c]{font-size:20px}.profile-page .edit-card[data-v-86a53e9c] .ant-tabs-nav .ant-tabs-tab{padding:8px 10px;font-size:12px}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-checkbox-group .ant-row .ant-col{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}} \ No newline at end of file diff --git a/frontend/dist/css/576.37fb7134.css b/frontend/dist/css/896.37fb7134.css similarity index 100% rename from frontend/dist/css/576.37fb7134.css rename to frontend/dist/css/896.37fb7134.css diff --git a/frontend/dist/css/642.443c56d4.css b/frontend/dist/css/916.443c56d4.css similarity index 100% rename from frontend/dist/css/642.443c56d4.css rename to frontend/dist/css/916.443c56d4.css diff --git a/frontend/dist/css/798.729cfe93.css b/frontend/dist/css/958.729cfe93.css similarity index 100% rename from frontend/dist/css/798.729cfe93.css rename to frontend/dist/css/958.729cfe93.css diff --git a/frontend/dist/css/715.1cc37f75.css b/frontend/dist/css/978.1cc37f75.css similarity index 100% rename from frontend/dist/css/715.1cc37f75.css rename to frontend/dist/css/978.1cc37f75.css diff --git a/frontend/dist/css/theme-colors-de962665.css b/frontend/dist/css/theme-colors-32dabe8f.css similarity index 98% rename from frontend/dist/css/theme-colors-de962665.css rename to frontend/dist/css/theme-colors-32dabe8f.css index 055b759..4e0096a 100644 --- a/frontend/dist/css/theme-colors-de962665.css +++ b/frontend/dist/css/theme-colors-32dabe8f.css @@ -189,14 +189,14 @@ body.dark .trading-records ::v-deep .ant-pagination .ant-pagination-next:hover . .user-manage-page .address-text[data-v-49c4f239],.user-manage-page .hash-text[data-v-49c4f239]{color:#1890ff} .user-manage-page.theme-dark .manage-tabs[data-v-49c4f239] .ant-tabs-tab-active{color:#1890ff} .user-manage-page .current-credits-info .value[data-v-49c4f239],.user-manage-page .current-vip-info .value[data-v-49c4f239]{color:#1890ff} -.profile-page .page-header .page-title .anticon[data-v-2b760d50]{color:#1890ff} -.profile-page .profile-card .profile-info .info-item .anticon[data-v-2b760d50]{color:#1890ff} -.profile-page.theme-dark .edit-card[data-v-2b760d50] .ant-tabs-tab-active{color:#1890ff} -.profile-page.theme-dark .edit-card[data-v-2b760d50] .ant-input-password:focus,.profile-page.theme-dark .edit-card[data-v-2b760d50] .ant-input-password:hover,.profile-page.theme-dark .edit-card[data-v-2b760d50] .ant-input:focus,.profile-page.theme-dark .edit-card[data-v-2b760d50] .ant-input:hover{border-color:#1890ff} -.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .notification-settings-form[data-v-2b760d50] .ant-radio-checked .ant-radio-inner,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .password-form[data-v-2b760d50] .ant-radio-checked .ant-radio-inner,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .profile-form[data-v-2b760d50] .ant-radio-checked .ant-radio-inner{background-color:#1890ff;border-color:#1890ff} -.profile-page.theme-dark[data-v-2b760d50] .ant-pagination .ant-pagination-item:hover{border-color:#1890ff} -.profile-page.theme-dark[data-v-2b760d50] .ant-pagination .ant-pagination-item-active{background:#1890ff;border-color:#1890ff} -.profile-page.theme-dark[data-v-2b760d50] .ant-btn.ant-btn-default:hover{border-color:#1890ff;color:#1890ff} +.profile-page .page-header .page-title .anticon[data-v-86a53e9c]{color:#1890ff} +.profile-page .profile-card .profile-info .info-item .anticon[data-v-86a53e9c]{color:#1890ff} +.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-tabs-tab-active{color:#1890ff} +.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-input-password:focus,.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-input-password:hover,.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-input:focus,.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-input:hover{border-color:#1890ff} +.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-radio-checked .ant-radio-inner,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-radio-checked .ant-radio-inner,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-radio-checked .ant-radio-inner{background-color:#1890ff;border-color:#1890ff} +.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-item:hover{border-color:#1890ff} +.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-item-active{background:#1890ff;border-color:#1890ff} +.profile-page.theme-dark[data-v-86a53e9c] .ant-btn.ant-btn-default:hover{border-color:#1890ff;color:#1890ff} .billing-page .plan-card.highlight[data-v-0cdd5f9c]{border:1px solid rgba(24,144,255,.35)} .usdt-checkout .checkout-body .info-section .addr-box .copy-btn:hover,.usdt-checkout .checkout-body .info-section .amt-box .copy-btn:hover{background:rgba(24,144,255,.08);color:#1890ff} .theme-dark .usdt-checkout .checkout-body .info-section .addr-box .copy-btn:hover,.theme-dark .usdt-checkout .checkout-body .info-section .amt-box .copy-btn:hover,body.realdark .usdt-checkout .checkout-body .info-section .addr-box .copy-btn:hover,body.realdark .usdt-checkout .checkout-body .info-section .amt-box .copy-btn:hover{background:rgba(24,144,255,.15);color:#40a9ff} diff --git a/frontend/dist/index.html b/frontend/dist/index.html index c93762a..d03a9f5 100644 --- a/frontend/dist/index.html +++ b/frontend/dist/index.html @@ -421,4 +421,4 @@ .brand-text { font-size: 20px; } - }

Landing

QuantDinger
\ No newline at end of file + }

Landing

QuantDinger
\ No newline at end of file diff --git a/frontend/dist/js/125-legacy.00a8217b.js b/frontend/dist/js/125-legacy.00a8217b.js new file mode 100644 index 0000000..ccbd28d --- /dev/null +++ b/frontend/dist/js/125-legacy.00a8217b.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[125],{87125:function(t,s,a){a.r(s),a.d(s,{default:function(){return M}});a(28706),a(34782),a(62010),a(9868);var e=function(){var t=this,s=t._self._c;return s("div",{staticClass:"ai-analysis-container",class:{"theme-dark":t.isDarkTheme,embedded:t.embedded},style:{"--primary-color":t.primaryColor}},[s("div",{staticClass:"main-content-full"},[s("div",{staticClass:"top-index-bar"},[t.loadingSentiment?[t._m(0),t._m(1),t._m(2)]:[s("div",{staticClass:"indicator-box fear-greed",class:t.getFearGreedClass(t.marketData.fearGreed)},[s("span",{staticClass:"ind-label"},[t._v(t._s(t.$t("globalMarket.fearGreedShort")))]),s("span",{staticClass:"ind-value"},[t._v(t._s(t.marketData.fearGreed||"--"))])]),s("div",{staticClass:"indicator-box vix",class:t.getVixLevel(t.marketData.vix)},[s("span",{staticClass:"ind-label"},[t._v("VIX")]),s("span",{staticClass:"ind-value"},[t._v(t._s(t.marketData.vix||"--"))])]),s("div",{staticClass:"indicator-box dxy"},[s("span",{staticClass:"ind-label"},[t._v("DXY")]),s("span",{staticClass:"ind-value"},[t._v(t._s(t.marketData.dxy||"--"))])])],s("div",{staticClass:"indices-marquee"},[t.loadingIndices?[s("div",{staticClass:"indices-loading"},[s("a-icon",{attrs:{type:"loading"}}),t._v(" "+t._s(t.$t("common.loading")||"加载中...")+" ")],1)]:t.marketData.indices.length>0?[s("div",{staticClass:"marquee-track"},[t._l(t.marketData.indices,function(a){return s("div",{key:"a-"+a.symbol,staticClass:"index-item"},[s("span",{staticClass:"idx-flag"},[t._v(t._s(a.flag))]),s("span",{staticClass:"idx-symbol"},[t._v(t._s(a.symbol))]),s("span",{staticClass:"idx-price"},[t._v(t._s(t.formatPrice(a.price)))]),s("span",{staticClass:"idx-change",class:a.change>=0?"up":"down"},[s("a-icon",{attrs:{type:a.change>=0?"caret-up":"caret-down"}}),t._v(" "+t._s(Math.abs(a.change).toFixed(2))+"% ")],1)])}),t._l(t.marketData.indices,function(a){return s("div",{key:"b-"+a.symbol,staticClass:"index-item"},[s("span",{staticClass:"idx-flag"},[t._v(t._s(a.flag))]),s("span",{staticClass:"idx-symbol"},[t._v(t._s(a.symbol))]),s("span",{staticClass:"idx-price"},[t._v(t._s(t.formatPrice(a.price)))]),s("span",{staticClass:"idx-change",class:a.change>=0?"up":"down"},[s("a-icon",{attrs:{type:a.change>=0?"caret-up":"caret-down"}}),t._v(" "+t._s(Math.abs(a.change).toFixed(2))+"% ")],1)])})],2)]:[s("div",{staticClass:"indices-empty"},[t._v("--")])]],2),s("a-button",{staticClass:"refresh-btn",attrs:{type:"link",size:"small",loading:t.loadingMarket},on:{click:t.loadMarketData}},[s("a-icon",{attrs:{type:"sync",spin:t.loadingMarket}})],1)],2),s("div",{staticClass:"main-body"},[s("div",{staticClass:"left-panel"},[s("div",{staticClass:"heatmap-box"},[s("div",{staticClass:"box-header"},[s("a-radio-group",{attrs:{size:"small","button-style":"solid"},model:{value:t.heatmapType,callback:function(s){t.heatmapType=s},expression:"heatmapType"}},[s("a-radio-button",{attrs:{value:"crypto"}},[t._v(t._s(t.$t("globalMarket.cryptoHeatmap")))]),s("a-radio-button",{attrs:{value:"commodities"}},[t._v(t._s(t.$t("globalMarket.commoditiesHeatmap")))]),s("a-radio-button",{attrs:{value:"sectors"}},[t._v(t._s(t.$t("globalMarket.sectorHeatmap")))]),s("a-radio-button",{attrs:{value:"forex"}},[t._v(t._s(t.$t("globalMarket.forexHeatmap")))])],1)],1),s("div",{staticClass:"heatmap-grid"},[t.loadingHeatmap?t._l(12,function(t){return s("div",{key:"skel-"+t,staticClass:"heat-cell skeleton-cell"},[s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text"})])}):t.currentHeatmap.length>0?t._l(t.currentHeatmap.slice(0,12),function(a,e){return s("div",{key:e,staticClass:"heat-cell",style:t.getHeatmapStyle(a.value)},[s("span",{staticClass:"heat-name"},[t._v(t._s(t.getHeatmapName(a)))]),a.price?s("span",{staticClass:"heat-price"},[t._v(t._s(t.formatHeatmapPrice(a.price)))]):t._e(),s("span",{staticClass:"heat-val"},[t._v(t._s(a.value>=0?"+":"")+t._s(t.formatNum(a.value))+"%")])])}):[s("div",{staticClass:"heatmap-empty"},[t._v(t._s(t.$t("common.noData")||"暂无数据"))])]],2)]),s("div",{staticClass:"calendar-box"},[s("div",{staticClass:"box-header"},[s("span",{staticClass:"box-title"},[s("a-icon",{attrs:{type:"calendar"}}),t._v(" "+t._s(t.$t("globalMarket.calendar")))],1)]),s("div",{staticClass:"calendar-list"},[t.loadingCalendar?t._l(5,function(t){return s("div",{key:"cal-skel-"+t,staticClass:"cal-item skeleton-item"},[s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text"})])}):t.marketData.calendar.length>0?t._l(t.marketData.calendar.slice(0,10),function(a){return s("div",{key:a.id,staticClass:"cal-item",class:a.importance},[s("span",{staticClass:"cal-date"},[t._v(t._s(t.formatCalendarDate(a.date)))]),s("span",{staticClass:"cal-time"},[t._v(t._s(a.time||"--:--"))]),s("span",{staticClass:"cal-flag"},[t._v(t._s(t.getCountryFlag(a.country)))]),s("span",{staticClass:"cal-name"},[t._v(t._s(t.isZhLocale?a.name:a.name_en))]),s("span",{staticClass:"cal-impact",class:t.getImpactClass(a)},["bullish"===t.getImpactClass(a)?s("a-icon",{attrs:{type:"arrow-up"}}):"bearish"===t.getImpactClass(a)?s("a-icon",{attrs:{type:"arrow-down"}}):s("a-icon",{attrs:{type:"minus"}}),t._v(" "+t._s(a.actual||a.forecast||"--")+" ")],1)])}):[s("div",{staticClass:"cal-empty"},[t._v(t._s(t.$t("globalMarket.noEvents")))])]],2)])]),s("div",{staticClass:"right-panel"},[s("div",{staticClass:"analysis-toolbar"},[s("a-select",{staticClass:"symbol-selector",attrs:{placeholder:t.$t("dashboard.analysis.empty.selectSymbol"),size:"large","show-search":"","allow-clear":"","filter-option":t.filterSymbolOption},on:{change:t.handleSymbolChange},model:{value:t.selectedSymbol,callback:function(s){t.selectedSymbol=s},expression:"selectedSymbol"}},[t._l(t.watchlist||[],function(a){return s("a-select-option",{key:"".concat(a.market,"-").concat(a.symbol),attrs:{value:"".concat(a.market,":").concat(a.symbol)}},[s("span",{staticClass:"symbol-option"},[s("a-tag",{attrs:{color:t.getMarketColor(a.market),size:"small"}},[t._v(t._s(t.getMarketName(a.market)))]),s("strong",{staticStyle:{"margin-left":"6px"}},[t._v(t._s(a.symbol))]),a.name?s("span",{staticClass:"symbol-name"},[t._v(t._s(a.name))]):t._e()],1)])}),s("a-select-option",{key:"add-stock-option",staticClass:"add-stock-option",attrs:{value:"__add_stock_option__"}},[s("div",{staticStyle:{"text-align":"center",padding:"4px 0",color:"#1890ff"}},[s("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"plus"}}),t._v(t._s(t.$t("dashboard.analysis.watchlist.add"))+" ")],1)])],2),s("a-button",{staticClass:"analyze-button",attrs:{type:"primary",size:"large",icon:"thunderbolt",loading:t.analyzing,disabled:!t.selectedSymbol||t.analyzing},on:{click:t.startFastAnalysis}},[t._v(" "+t._s(t.$t("fastAnalysis.startAnalysis"))+" ")]),s("a-button",{staticClass:"history-button",attrs:{size:"large",icon:"history"},on:{click:function(s){t.showHistoryModal=!0,t.loadHistoryList()}}},[t._v(" "+t._s(t.$t("fastAnalysis.history"))+" ")])],1),s("div",{staticClass:"analysis-main"},[t.analysisResult||t.analyzing||t.analysisError?t._e():s("div",{staticClass:"analysis-placeholder"},[s("div",{staticClass:"placeholder-content"},[s("div",{staticClass:"placeholder-icon"},[s("a-icon",{attrs:{type:"robot"}})],1),s("h3",[t._v(t._s(t.$t("fastAnalysis.selectTip")))]),s("p",[t._v(t._s(t.$t("fastAnalysis.selectHint")))])])]),t.analysisResult||t.analyzing||t.analysisError?s("FastAnalysisReport",{attrs:{result:t.analysisResult,loading:t.analyzing,error:t.analysisError,"error-tone":t.analysisErrorTone},on:{retry:t.startFastAnalysis}}):t._e()],1)]),s("div",{staticClass:"watchlist-panel"},[s("div",{staticClass:"panel-header"},[s("span",{staticClass:"panel-title"},[s("a-icon",{attrs:{type:"star",theme:"filled"}}),t._v(" "+t._s(t.$t("dashboard.analysis.watchlist.title")))],1),s("a-button",{attrs:{type:"link",size:"small"},on:{click:function(s){t.showAddStockModal=!0}}},[s("a-icon",{attrs:{type:"plus"}})],1)],1),s("div",{staticClass:"watchlist-list"},[t._l(t.watchlist||[],function(a){var e,i,r;return s("div",{key:"".concat(a.market,"-").concat(a.symbol),staticClass:"watchlist-item",class:{active:t.selectedSymbol==="".concat(a.market,":").concat(a.symbol)},on:{click:function(s){return t.selectWatchlistItem(a)}}},[s("div",{staticClass:"item-main"},[s("span",{staticClass:"item-symbol"},[t._v(t._s(a.symbol))]),s("span",{staticClass:"item-name"},[t._v(t._s(a.name||t.getMarketName(a.market)))])]),t.watchlistPrices["".concat(a.market,":").concat(a.symbol)]?s("div",{staticClass:"item-price"},[s("span",{staticClass:"price-value"},[t._v(t._s(t.formatPrice(t.watchlistPrices["".concat(a.market,":").concat(a.symbol)].price)))]),s("span",{staticClass:"price-change",class:((null===(e=t.watchlistPrices["".concat(a.market,":").concat(a.symbol)])||void 0===e?void 0:e.change)||0)>=0?"up":"down"},[t._v(" "+t._s(((null===(i=t.watchlistPrices["".concat(a.market,":").concat(a.symbol)])||void 0===i?void 0:i.change)||0)>=0?"+":"")+t._s(t.formatNum(null===(r=t.watchlistPrices["".concat(a.market,":").concat(a.symbol)])||void 0===r?void 0:r.change))+"% ")])]):t._e(),s("a-icon",{staticClass:"item-remove",attrs:{type:"close"},on:{click:function(s){return s.stopPropagation(),t.removeFromWatchlist(a)}}})],1)}),t.watchlist&&0!==t.watchlist.length?t._e():s("div",{staticClass:"watchlist-empty"},[s("a-icon",{attrs:{type:"inbox"}}),s("p",[t._v(t._s(t.$t("dashboard.analysis.empty.noWatchlist")))]),s("a-button",{attrs:{type:"primary",size:"small"},on:{click:function(s){t.showAddStockModal=!0}}},[s("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("dashboard.analysis.watchlist.add"))+" ")],1)],1)],2)])])]),s("a-modal",{attrs:{title:t.$t("dashboard.analysis.modal.addStock.title"),visible:t.showAddStockModal,confirmLoading:t.addingStock,width:"600px",okText:t.$t("dashboard.analysis.modal.addStock.confirm"),cancelText:t.$t("dashboard.analysis.modal.addStock.cancel")},on:{ok:t.handleAddStock,cancel:t.handleCloseAddStockModal}},[s("div",{staticClass:"add-stock-modal-content"},[s("a-tabs",{staticClass:"market-tabs",on:{change:t.handleMarketTabChange},model:{value:t.selectedMarketTab,callback:function(s){t.selectedMarketTab=s},expression:"selectedMarketTab"}},t._l(t.marketTypes,function(a){return s("a-tab-pane",{key:a.value,attrs:{tab:t.$t(a.i18nKey||"dashboard.analysis.market.".concat(a.value))}})}),1),s("div",{staticClass:"symbol-search-section"},[s("a-input-search",{attrs:{placeholder:t.$t("dashboard.analysis.modal.addStock.searchOrInputPlaceholder"),loading:t.searchingSymbols,size:"large","allow-clear":""},on:{search:t.handleSearchOrInput,change:t.handleSymbolSearchInput},model:{value:t.symbolSearchKeyword,callback:function(s){t.symbolSearchKeyword=s},expression:"symbolSearchKeyword"}},[s("a-button",{attrs:{slot:"enterButton",type:"primary",icon:"search"},slot:"enterButton"},[t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.search"))+" ")])],1)],1),t.symbolSearchResults.length>0?s("div",{staticClass:"search-results-section"},[s("div",{staticClass:"section-title"},[s("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"search"}}),t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.searchResults"))+" ")],1),s("a-list",{staticClass:"symbol-list",attrs:{"data-source":t.symbolSearchResults,loading:t.searchingSymbols,size:"small"},scopedSlots:t._u([{key:"renderItem",fn:function(a){return s("a-list-item",{staticClass:"symbol-list-item",on:{click:function(s){return t.selectSymbol(a)}}},[s("a-list-item-meta",[s("template",{slot:"title"},[s("div",{staticClass:"symbol-item-content"},[s("span",{staticClass:"symbol-code"},[t._v(t._s(a.symbol))]),s("span",{staticClass:"symbol-name"},[t._v(t._s(a.name))]),a.exchange?s("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"blue"}},[t._v(" "+t._s(a.exchange)+" ")]):t._e()],1)])],2)],1)}}],null,!1,1074844145)})],1):t._e(),s("div",{staticClass:"hot-symbols-section"},[s("div",{staticClass:"section-title"},[s("a-icon",{staticStyle:{color:"#ff4d4f","margin-right":"4px"},attrs:{type:"fire"}}),t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.hotSymbols"))+" ")],1),s("a-spin",{attrs:{spinning:t.loadingHotSymbols}},[t.hotSymbols.length>0?s("a-list",{staticClass:"symbol-list",attrs:{"data-source":t.hotSymbols,size:"small"},scopedSlots:t._u([{key:"renderItem",fn:function(a){return s("a-list-item",{staticClass:"symbol-list-item",on:{click:function(s){return t.selectSymbol(a)}}},[s("a-list-item-meta",[s("template",{slot:"title"},[s("div",{staticClass:"symbol-item-content"},[s("span",{staticClass:"symbol-code"},[t._v(t._s(a.symbol))]),s("span",{staticClass:"symbol-name"},[t._v(t._s(a.name))]),a.exchange?s("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"orange"}},[t._v(" "+t._s(a.exchange)+" ")]):t._e()],1)])],2)],1)}}],null,!1,2177647935)}):s("a-empty",{attrs:{description:t.$t("dashboard.analysis.modal.addStock.noHotSymbols"),image:!1}})],1)],1),t.selectedSymbolForAdd?s("div",{staticClass:"selected-symbol-section"},[s("a-alert",{attrs:{message:t.$t("dashboard.analysis.modal.addStock.selectedSymbol"),type:"info","show-icon":"",closable:""},on:{close:function(s){t.selectedSymbolForAdd=null}}},[s("template",{slot:"description"},[s("div",{staticClass:"selected-symbol-info"},[s("a-tag",{staticStyle:{"margin-right":"8px"},attrs:{color:t.getMarketColor(t.selectedSymbolForAdd.market)}},[t._v(" "+t._s(t.$t("dashboard.analysis.market.".concat(t.selectedSymbolForAdd.market)))+" ")]),s("strong",[t._v(t._s(t.selectedSymbolForAdd.symbol))]),t.selectedSymbolForAdd.name?s("span",{staticStyle:{color:"#999","margin-left":"8px"}},[t._v(t._s(t.selectedSymbolForAdd.name))]):t._e()],1)])],2)],1):t._e()],1)]),s("a-modal",{attrs:{title:t.$t("dashboard.analysis.modal.history.title"),visible:t.showHistoryModal,footer:null,width:"800px",bodyStyle:{maxHeight:"60vh",overflowY:"auto"}},on:{cancel:function(s){t.showHistoryModal=!1}}},[s("a-spin",{attrs:{spinning:t.historyLoading}},[s("a-list",{attrs:{"data-source":t.historyList,pagination:{current:t.historyPage,pageSize:t.historyPageSize,total:t.historyTotal,onChange:function(s){t.historyPage=s,t.loadHistoryList()},showSizeChanger:!0,pageSizeOptions:["10","20","50"],onShowSizeChange:function(s,a){t.historyPageSize=a,t.historyPage=1,t.loadHistoryList()}}},scopedSlots:t._u([{key:"renderItem",fn:function(a){return s("a-list-item",{},[s("a-list-item-meta",[s("template",{slot:"title"},[s("div",{staticStyle:{display:"flex","align-items":"center","justify-content":"space-between"}},[s("div",[s("a-tag",{staticStyle:{"margin-right":"8px"},attrs:{color:t.getMarketColor(a.market)}},[t._v(" "+t._s(t.getMarketName(a.market))+" ")]),s("strong",[t._v(t._s(a.symbol))]),s("a-tag",{staticStyle:{"margin-left":"12px"},attrs:{color:"BUY"===a.decision?"green":"SELL"===a.decision?"red":"blue"}},[t._v(" "+t._s(a.decision)+" ")]),s("span",{staticStyle:{color:"#999","margin-left":"8px","font-size":"12px"}},[t._v(" "+t._s(t.$t("fastAnalysis.confidence"))+": "+t._s(a.confidence)+"% ")])],1),s("div",[s("a-button",{attrs:{type:"link",size:"small",icon:"eye"},on:{click:function(s){return t.viewHistoryResult(a)}}},[t._v(" "+t._s(t.$t("dashboard.analysis.modal.history.viewResult"))+" ")]),s("a-popconfirm",{attrs:{title:t.$t("dashboard.analysis.modal.history.deleteConfirm"),"ok-text":t.$t("common.confirm"),"cancel-text":t.$t("common.cancel")},on:{confirm:function(s){return t.deleteHistoryItem(a)}}},[s("a-button",{staticStyle:{color:"#ff4d4f"},attrs:{type:"link",size:"small",icon:"delete"}},[t._v(" "+t._s(t.$t("dashboard.analysis.modal.history.delete"))+" ")])],1)],1)])]),s("template",{slot:"description"},[s("div",{staticStyle:{color:"#666","font-size":"12px"}},[a.price?s("span",[t._v("$"+t._s(t.formatNumber(a.price)))]):t._e(),a.summary?s("span",{staticStyle:{"margin-left":"8px"}},[t._v(t._s(a.summary.substring(0,80))+t._s(a.summary.length>80?"...":""))]):t._e()]),a.created_at?s("div",{staticStyle:{color:"#999","font-size":"12px","margin-top":"4px"}},[t._v(" "+t._s(t.formatIsoTime(a.created_at))+" ")]):t._e()])],2)],1)}}])}),t.historyLoading||0!==t.historyList.length?t._e():s("a-empty",{attrs:{description:t.$t("dashboard.analysis.empty.noHistory")}})],1)],1)],1)},i=[function(){var t=this,s=t._self._c;return s("div",{staticClass:"indicator-box skeleton-box"},[s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text"})])},function(){var t=this,s=t._self._c;return s("div",{staticClass:"indicator-box skeleton-box"},[s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text"})])},function(){var t=this,s=t._self._c;return s("div",{staticClass:"indicator-box skeleton-box"},[s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text"})])}],r=a(44735),n=a(15863),l=a(81127),o=a(56252),c=a(76338),d=(a(74423),a(62062),a(2892),a(32637),a(40150),a(26099),a(21699),a(42762),a(23500),a(95353)),u=a(505),m=a(35038),h=a(75769),y="/api/fast-analysis";function p(t){return(0,h.Ay)({url:"".concat(y,"/analyze"),method:"post",data:t,timeout:3e5})}function v(t){return(0,h.Ay)({url:"".concat(y,"/history/all"),method:"get",params:t})}function f(t){return(0,h.Ay)({url:"".concat(y,"/history/").concat(t),method:"delete"})}function g(t){return(0,h.Ay)({url:"".concat(y,"/feedback"),method:"post",data:t})}var b=a(44146),_=(a(79432),function(){var t,s,a,e,i,r,n,l,o,c,d,u,m,h,y,p,v,f,g,b,_,k,C,S,A,w=this,$=w._self._c;return $("div",{staticClass:"fast-analysis-report",class:{"theme-dark":w.isDarkTheme}},[w.loading?$("div",{staticClass:"loading-container"},[$("div",{staticClass:"loading-content-pro"},[$("div",{staticClass:"loading-header"},[$("a-icon",{staticClass:"loading-icon-pro",attrs:{type:"thunderbolt"}}),$("span",{staticClass:"loading-title"},[w._v(w._s(w.$t("fastAnalysis.analyzing")))])],1),$("div",{staticClass:"progress-wrapper"},[$("a-progress",{attrs:{percent:w.progressPercent,showInfo:!1,strokeColor:"#1890ff",strokeWidth:8}}),$("span",{staticClass:"progress-text"},[w._v(w._s(w.formatProgress(w.progressPercent))+"%")])],1),$("div",{staticClass:"current-step"},[$("a-icon",{attrs:{type:"loading",spin:""}}),$("span",[w._v(w._s(w.currentStepText))])],1),$("div",{staticClass:"steps-list"},[$("div",{staticClass:"step-item",class:{done:w.step>1,active:1===w.step}},[$("span",{staticClass:"step-dot"}),$("span",{staticClass:"step-text"},[w._v(w._s(w.$t("fastAnalysis.step1")||"获取实时数据"))]),w.step>1?$("a-icon",{staticClass:"step-check",attrs:{type:"check"}}):w._e()],1),$("div",{staticClass:"step-item",class:{done:w.step>2,active:2===w.step}},[$("span",{staticClass:"step-dot"}),$("span",{staticClass:"step-text"},[w._v(w._s(w.$t("fastAnalysis.step2")||"计算技术指标"))]),w.step>2?$("a-icon",{staticClass:"step-check",attrs:{type:"check"}}):w._e()],1),$("div",{staticClass:"step-item",class:{done:w.step>3,active:3===w.step}},[$("span",{staticClass:"step-dot"}),$("span",{staticClass:"step-text"},[w._v(w._s(w.$t("fastAnalysis.step3")||"AI深度分析"))]),w.step>3?$("a-icon",{staticClass:"step-check",attrs:{type:"check"}}):w._e()],1),$("div",{staticClass:"step-item",class:{done:w.step>4,active:4===w.step}},[$("span",{staticClass:"step-dot"}),$("span",{staticClass:"step-text"},[w._v(w._s(w.$t("fastAnalysis.step4")||"生成报告"))]),w.step>4?$("a-icon",{staticClass:"step-check",attrs:{type:"check"}}):w._e()],1)]),$("div",{staticClass:"loading-footer"},[$("span",{staticClass:"elapsed-time"},[w._v(w._s(w.elapsedTimeText))])])])]):w.error?$("div",{staticClass:"error-container"},[$("a-result",{attrs:{status:"warning"===w.errorTone?"warning":"error",title:w.errorTitle,"sub-title":w.error},scopedSlots:w._u([{key:"extra",fn:function(){return[$("a-button",{attrs:{type:"primary"},on:{click:function(t){return w.$emit("retry")}}},[w._v(" "+w._s(w.$t("fastAnalysis.retry"))+" ")])]},proxy:!0}])})],1):w.result?$("div",{staticClass:"result-container"},[$("div",{staticClass:"decision-card",class:w.decisionClass},[$("div",{staticClass:"decision-main"},[$("div",{staticClass:"decision-badge"},[$("a-icon",{attrs:{type:w.decisionIcon}}),$("span",{staticClass:"decision-text"},[w._v(w._s(w.result.decision))])],1),$("div",{staticClass:"confidence-ring"},[$("a-progress",{attrs:{type:"circle",percent:w.result.confidence,width:80,strokeColor:w.confidenceColor},scopedSlots:w._u([{key:"format",fn:function(t){return[$("span",{staticClass:"confidence-value"},[w._v(w._s(t)+"%")])]}}])}),$("div",{staticClass:"confidence-label"},[w._v(w._s(w.$t("fastAnalysis.confidence")))])],1)]),$("div",{staticClass:"decision-summary"},[w._v(" "+w._s(w.result.summary)+" ")]),w.consensusBlock?$("div",{staticClass:"consensus-strip"},[$("div",{staticClass:"consensus-strip-title"},[$("a-icon",{attrs:{type:"cluster"}}),w._v(" "+w._s(w.$t("fastAnalysis.consensusTitle"))+" ")],1),$("div",{staticClass:"consensus-strip-metrics"},[$("span",{staticClass:"cm-item"},[$("em",[w._v(w._s(w.$t("fastAnalysis.consensusDecision")))]),w._v(" "+w._s(w.consensusBlock.consensus_decision)+" ")]),$("span",{staticClass:"cm-item"},[$("em",[w._v(w._s(w.$t("fastAnalysis.consensusScore")))]),w._v(" "+w._s(w.formatConsensusNum(w.consensusBlock.consensus_score))+" ")]),null!=w.consensusBlock.agreement_ratio?$("span",{staticClass:"cm-item"},[$("em",[w._v(w._s(w.$t("fastAnalysis.consensusAgreement")))]),w._v(" "+w._s(w.formatAgreementPct(w.consensusBlock.agreement_ratio))+" ")]):w._e()])]):w._e()]),$("div",{staticClass:"price-info-row"},[$("div",{staticClass:"price-card current"},[$("div",{staticClass:"price-label"},[w._v(w._s(w.$t("fastAnalysis.currentPrice")))]),$("div",{staticClass:"price-value"},[w._v("$"+w._s(w.formatPrice(null===(t=w.result.market_data)||void 0===t?void 0:t.current_price)))]),$("div",{staticClass:"price-change",class:(null===(s=w.result.market_data)||void 0===s?void 0:s.change_24h)>=0?"positive":"negative"},[w._v(" "+w._s((null===(a=w.result.market_data)||void 0===a?void 0:a.change_24h)>=0?"+":"")+w._s(w.formatNumber(null===(e=w.result.market_data)||void 0===e?void 0:e.change_24h,2))+"% ")])]),$("div",{staticClass:"price-card entry"},[$("div",{staticClass:"price-label"},[w._v(w._s(w.$t("fastAnalysis.entryPrice")))]),$("div",{staticClass:"price-value"},[w._v("$"+w._s(w.formatPrice(null===(i=w.result.trading_plan)||void 0===i?void 0:i.entry_price)))])]),$("div",{staticClass:"price-card stop"},[$("div",{staticClass:"price-label"},[w._v(w._s(w.$t("fastAnalysis.stopLoss")))]),$("div",{staticClass:"price-value negative"},[w._v("$"+w._s(w.formatPrice(null===(r=w.result.trading_plan)||void 0===r?void 0:r.stop_loss)))]),$("div",{staticClass:"price-hint"},[$("a-tooltip",{attrs:{title:w.$t("fastAnalysis.stopLossHint")}},[$("a-icon",{attrs:{type:"info-circle"}}),w._v(" "+w._s(w.$t("fastAnalysis.atrBased"))+" ")],1)],1)]),$("div",{staticClass:"price-card target"},[$("div",{staticClass:"price-label"},[w._v(w._s(w.$t("fastAnalysis.takeProfit")))]),$("div",{staticClass:"price-value positive"},[w._v("$"+w._s(w.formatPrice(null===(n=w.result.trading_plan)||void 0===n?void 0:n.take_profit)))]),$("div",{staticClass:"price-hint"},[$("a-tooltip",{attrs:{title:w.$t("fastAnalysis.takeProfitHint")}},[$("a-icon",{attrs:{type:"info-circle"}}),w._v(" "+w._s(w.$t("fastAnalysis.atrBased"))+" ")],1)],1)])]),$("div",{staticClass:"scores-row"},[$("div",{staticClass:"score-item"},[$("div",{staticClass:"score-header"},[$("a-icon",{attrs:{type:"line-chart"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.technical")))])],1),$("a-progress",{attrs:{percent:(null===(l=w.result.scores)||void 0===l?void 0:l.technical)||50,strokeColor:w.getScoreColor(null===(o=w.result.scores)||void 0===o?void 0:o.technical),showInfo:!1}}),$("div",{staticClass:"score-value"},[w._v(w._s((null===(c=w.result.scores)||void 0===c?void 0:c.technical)||50))])],1),$("div",{staticClass:"score-item"},[$("div",{staticClass:"score-header"},[$("a-icon",{attrs:{type:"bank"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.fundamental")))])],1),$("a-progress",{attrs:{percent:(null===(d=w.result.scores)||void 0===d?void 0:d.fundamental)||50,strokeColor:w.getScoreColor(null===(u=w.result.scores)||void 0===u?void 0:u.fundamental),showInfo:!1}}),$("div",{staticClass:"score-value"},[w._v(w._s((null===(m=w.result.scores)||void 0===m?void 0:m.fundamental)||50))])],1),$("div",{staticClass:"score-item"},[$("div",{staticClass:"score-header"},[$("a-icon",{attrs:{type:"heart"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.sentiment")))])],1),$("a-progress",{attrs:{percent:(null===(h=w.result.scores)||void 0===h?void 0:h.sentiment)||50,strokeColor:w.getScoreColor(null===(y=w.result.scores)||void 0===y?void 0:y.sentiment),showInfo:!1}}),$("div",{staticClass:"score-value"},[w._v(w._s((null===(p=w.result.scores)||void 0===p?void 0:p.sentiment)||50))])],1),$("div",{staticClass:"score-item overall"},[$("div",{staticClass:"score-header"},[$("a-icon",{attrs:{type:"dashboard"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.overall")))])],1),$("a-progress",{attrs:{percent:(null===(v=w.result.scores)||void 0===v?void 0:v.overall)||50,strokeColor:w.getScoreColor(null===(f=w.result.scores)||void 0===f?void 0:f.overall),showInfo:!1}}),$("div",{staticClass:"score-value"},[w._v(w._s((null===(g=w.result.scores)||void 0===g?void 0:g.overall)||50))])],1)]),w.result.detailed_analysis?$("div",{staticClass:"detailed-analysis"},[w.result.detailed_analysis.technical?$("div",{staticClass:"analysis-card technical"},[$("div",{staticClass:"analysis-card-header"},[$("a-icon",{attrs:{type:"line-chart"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.technicalAnalysis")))]),$("a-tag",{attrs:{color:w.getScoreTagColor(null===(b=w.result.scores)||void 0===b?void 0:b.technical)}},[w._v(" "+w._s((null===(_=w.result.scores)||void 0===_?void 0:_.technical)||50)+"分 ")])],1),$("div",{staticClass:"analysis-card-content"},[w._v(" "+w._s(w.result.detailed_analysis.technical)+" ")])]):w._e(),w.result.detailed_analysis.fundamental?$("div",{staticClass:"analysis-card fundamental"},[$("div",{staticClass:"analysis-card-header"},[$("a-icon",{attrs:{type:"bank"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.fundamentalAnalysis")))]),$("a-tag",{attrs:{color:w.getScoreTagColor(null===(k=w.result.scores)||void 0===k?void 0:k.fundamental)}},[w._v(" "+w._s((null===(C=w.result.scores)||void 0===C?void 0:C.fundamental)||50)+"分 ")])],1),$("div",{staticClass:"analysis-card-content"},[w._v(" "+w._s(w.result.detailed_analysis.fundamental)+" ")])]):w._e(),w.result.detailed_analysis.sentiment?$("div",{staticClass:"analysis-card sentiment"},[$("div",{staticClass:"analysis-card-header"},[$("a-icon",{attrs:{type:"heart"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.sentimentAnalysis")))]),$("a-tag",{attrs:{color:w.getScoreTagColor(null===(S=w.result.scores)||void 0===S?void 0:S.sentiment)}},[w._v(" "+w._s((null===(A=w.result.scores)||void 0===A?void 0:A.sentiment)||50)+"分 ")])],1),$("div",{staticClass:"analysis-card-content"},[w._v(" "+w._s(w.result.detailed_analysis.sentiment)+" ")])]):w._e()]):w._e(),$("div",{staticClass:"analysis-details"},[$("div",{staticClass:"detail-section reasons"},[$("div",{staticClass:"section-title"},[$("a-icon",{attrs:{type:"bulb",theme:"twoTone",twoToneColor:"#52c41a"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.keyReasons")))])],1),$("ul",{staticClass:"detail-list"},w._l(w.result.reasons,function(t,s){return $("li",{key:"r-"+s},[w._v(" "+w._s(t)+" ")])}),0)]),$("div",{staticClass:"detail-section risks"},[$("div",{staticClass:"section-title"},[$("a-icon",{attrs:{type:"warning",theme:"twoTone",twoToneColor:"#faad14"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.risks")))])],1),$("ul",{staticClass:"detail-list"},w._l(w.result.risks,function(t,s){return $("li",{key:"k-"+s},[w._v(" "+w._s(t)+" ")])}),0)])]),w.result.indicators&&Object.keys(w.result.indicators).length>0?$("div",{staticClass:"indicators-section"},[$("div",{staticClass:"section-title"},[$("a-icon",{attrs:{type:"stock"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.indicators")))])],1),$("div",{staticClass:"indicators-grid"},[w.result.indicators.rsi?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v("RSI (14)")]),$("div",{staticClass:"indicator-value",class:w.getRsiClass(w.result.indicators.rsi.value)},[w._v(" "+w._s(w.formatNumber(w.result.indicators.rsi.value,1))+" ")]),$("div",{staticClass:"indicator-signal"},[w._v(w._s(w.translateSignal(w.result.indicators.rsi.signal)))])]):w._e(),w.result.indicators.macd?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v("MACD")]),$("div",{staticClass:"indicator-value",class:"bullish"===w.result.indicators.macd.signal?"bullish":"bearish"===w.result.indicators.macd.signal?"bearish":""},[w._v(" "+w._s(w.translateTrend(w.result.indicators.macd.trend))+" ")]),$("div",{staticClass:"indicator-signal"},[w._v(w._s(w.translateSignal(w.result.indicators.macd.signal)))])]):w._e(),w.result.indicators.moving_averages?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v(w._s(w.$t("fastAnalysis.maTrend")))]),$("div",{staticClass:"indicator-value",class:w.getMaTrendClass(w.result.indicators.moving_averages.trend)},[w._v(" "+w._s(w.translateTrend(w.result.indicators.moving_averages.trend))+" ")])]):w._e(),w.result.indicators.levels?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v(w._s(w.$t("fastAnalysis.support")))]),$("div",{staticClass:"indicator-value"},[w._v("$"+w._s(w.formatPrice(w.result.indicators.levels.support)))])]):w._e(),w.result.indicators.levels?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v(w._s(w.$t("fastAnalysis.resistance")))]),$("div",{staticClass:"indicator-value"},[w._v("$"+w._s(w.formatPrice(w.result.indicators.levels.resistance)))])]):w._e(),w.result.indicators.volatility?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v(w._s(w.$t("fastAnalysis.volatility")))]),$("div",{staticClass:"indicator-value",class:w.getVolatilityClass(w.result.indicators.volatility.level)},[w._v(" "+w._s(w.translateVolatility(w.result.indicators.volatility.level))+" ("+w._s(w.result.indicators.volatility.pct)+"%) ")])]):w._e()])]):w._e(),$("div",{staticClass:"feedback-section"},[$("div",{staticClass:"feedback-question"},[w._v(w._s(w.$t("fastAnalysis.wasHelpful")))]),$("div",{staticClass:"feedback-buttons"},[$("a-button",{attrs:{type:"helpful"===w.userFeedback?"primary":"default",size:"small",loading:"helpful"===w.feedbackLoading},on:{click:function(t){return w.submitFeedback("helpful")}}},[$("a-icon",{attrs:{type:"like"}}),w._v(" "+w._s(w.$t("fastAnalysis.helpful"))+" ")],1),$("a-button",{attrs:{type:"not_helpful"===w.userFeedback?"danger":"default",size:"small",loading:"not_helpful"===w.feedbackLoading},on:{click:function(t){return w.submitFeedback("not_helpful")}}},[$("a-icon",{attrs:{type:"dislike"}}),w._v(" "+w._s(w.$t("fastAnalysis.notHelpful"))+" ")],1)],1),$("div",{staticClass:"analysis-meta"},[$("span",[w._v(w._s(w.$t("fastAnalysis.analysisTime"))+": "+w._s(w.result.analysis_time_ms)+"ms")]),w.result.memory_id?$("span",[w._v("ID: #"+w._s(w.result.memory_id))]):w._e()])])]):$("div",{staticClass:"empty-container"},[$("div",{staticClass:"empty-content"},[$("a-icon",{staticClass:"empty-icon",attrs:{type:"radar-chart"}}),$("div",{staticClass:"empty-title"},[w._v(w._s(w.$t("fastAnalysis.selectSymbol")))]),$("div",{staticClass:"empty-hint"},[w._v(w._s(w.$t("fastAnalysis.selectHint")))])],1)])])}),k=[],C={name:"FastAnalysisReport",props:{result:{type:Object,default:null},loading:{type:Boolean,default:!1},error:{type:String,default:null},errorTone:{type:String,default:"error",validator:function(t){return["error","warning","info"].includes(t)}}},data:function(){return{userFeedback:null,feedbackLoading:null,progress:0,elapsedSeconds:0,mainTimer:null}},computed:(0,c.A)((0,c.A)({},(0,d.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},progressPercent:function(){return Math.round(10*this.progress)/10},step:function(){return this.progress<25?1:this.progress<50?2:this.progress<75?3:4},currentStepText:function(){var t={1:this.$t("fastAnalysis.step1")||"获取实时数据",2:this.$t("fastAnalysis.step2")||"计算技术指标",3:this.$t("fastAnalysis.step3")||"AI深度分析",4:this.$t("fastAnalysis.step4")||"生成报告"};return t[this.step]||this.$t("fastAnalysis.preparing")||"准备中..."},elapsedTimeText:function(){if(this.elapsedSeconds<60)return"".concat(this.elapsedSeconds,"s");var t=Math.floor(this.elapsedSeconds/60),s=this.elapsedSeconds%60;return"".concat(t,"m ").concat(s,"s")},decisionClass:function(){if(!this.result)return"";var t=this.result.decision;return"BUY"===t?"decision-buy":"SELL"===t?"decision-sell":"decision-hold"},decisionIcon:function(){if(!this.result)return"question";var t=this.result.decision;return"BUY"===t?"arrow-up":"SELL"===t?"arrow-down":"pause"},confidenceColor:function(){var t,s=(null===(t=this.result)||void 0===t?void 0:t.confidence)||50;return s>=70?"#52c41a":s>=50?"#1890ff":"#faad14"},consensusBlock:function(){var t,s=null===(t=this.result)||void 0===t?void 0:t.consensus;return s&&"object"===(0,r.A)(s)?null==s.consensus_decision&&null==s.consensus_score?null:s:null},insufficientCreditsError:function(){if(!this.error)return!1;var t=String(this.error);return t.includes("积分不足")||t.toLowerCase().includes("insufficient credits")},errorTitle:function(){return"warning"===this.errorTone?this.$t("fastAnalysis.analysisInProgressTitle"):this.insufficientCreditsError?this.$t("fastAnalysis.insufficientCredits"):this.$t("fastAnalysis.error")}}),watch:{result:function(){this.userFeedback=null},loading:{handler:function(t){t?this.startProgressTimer():this.stopProgressTimer()},immediate:!0}},mounted:function(){this.loading&&this.startProgressTimer()},beforeDestroy:function(){this.stopProgressTimer()},methods:{formatPrice:function(t){if(void 0===t||null===t)return"--";var s=parseFloat(t);return isNaN(s)?"--":s<1?s.toFixed(6):s<100?s.toFixed(4):s<1e4?s.toFixed(2):s.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})},formatNumber:function(t){var s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;if(void 0===t||null===t)return"--";var a=parseFloat(t);return isNaN(a)?"--":a.toFixed(s)},formatConsensusNum:function(t){if(void 0===t||null===t||""===t)return"--";var s=Number(t);return Number.isNaN(s)?"--":s.toFixed(1)},formatAgreementPct:function(t){var s=Number(t);return Number.isNaN(s)?"--":"".concat(Math.round(100*s),"%")},formatProgress:function(t){var s=parseFloat(t)||0;return s%1===0?s.toFixed(0):s.toFixed(1)},getScoreColor:function(t){return t>=70?"#52c41a":t>=50?"#1890ff":t>=30?"#faad14":"#ff4d4f"},getScoreTagColor:function(t){return t>=70?"green":t>=50?"blue":t>=30?"orange":"red"},getRsiClass:function(t){return t<30?"oversold":t>70?"overbought":""},getMaTrendClass:function(t){return t?t.includes("uptrend")||t.includes("strong_uptrend")?"bullish":t.includes("downtrend")||t.includes("strong_downtrend")?"bearish":"":""},getVolatilityClass:function(t){return"high"===t?"high-volatility":"low"===t?"low-volatility":""},translateSignal:function(t){if(!t)return"--";var s="fastAnalysis.signal.".concat(t),a=this.$t(s);return a===s?t:a},translateTrend:function(t){if(!t)return"--";var s="fastAnalysis.trend.".concat(t),a=this.$t(s);return a===s?t:a},translateVolatility:function(t){if(!t)return"--";var s="fastAnalysis.volatilityLevel.".concat(t),a=this.$t(s);return a===s?t:a},submitFeedback:function(t){var s=this;return(0,o.A)((0,l.A)().m(function a(){var e;return(0,l.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(null!==(e=s.result)&&void 0!==e&&e.memory_id){a.n=1;break}return s.$message.warning(s.$t("fastAnalysis.feedbackUnavailable")||"反馈功能暂不可用,请刷新后重试"),a.a(2);case 1:return s.feedbackLoading=t,a.p=2,a.n=3,g({memory_id:s.result.memory_id,feedback:t});case 3:s.userFeedback=t,s.$message.success(s.$t("fastAnalysis.feedbackThanks")),a.n=5;break;case 4:a.p=4,a.v,s.$message.error(s.$t("fastAnalysis.feedbackFailed"));case 5:return a.p=5,s.feedbackLoading=null,a.f(5);case 6:return a.a(2)}},a,null,[[2,4,5,6]])}))()},startProgressTimer:function(){var t=this;this.stopProgressTimer(),this.progress=0,this.elapsedSeconds=0;var s=Date.now();this.mainTimer=window.setInterval(function(){t.elapsedSeconds=Math.floor((Date.now()-s)/1e3),t.progress<75?t.progress=Math.min(t.progress+1,75):t.progress<90?t.progress=Math.min(t.progress+.5,90):t.progress<95&&(t.progress=Math.min(t.progress+.2,95))},100)},stopProgressTimer:function(){this.mainTimer&&(window.clearInterval(this.mainTimer),this.mainTimer=null),this.progress=0,this.elapsedSeconds=0}}},S=C,A=a(845),w=(0,A.A)(S,_,k,!1,null,"693144f6",null),$=w.exports,T={name:"Analysis",props:{embedded:{type:Boolean,default:!1},presetSymbol:{type:String,default:""},autoAnalyzeSignal:{type:Number,default:0}},components:{FastAnalysisReport:$},data:function(){return{loadingMarket:!1,heatmapType:"crypto",marketData:{fearGreed:null,vix:null,dxy:null,indices:[],heatmap:{crypto:[],commodities:[],sectors:[],forex:[]},calendar:[]},loadingSentiment:!1,loadingIndices:!1,loadingHeatmap:!1,loadingCalendar:!1,watchlistPriceTimer:null,watchlistPrices:{},localUserInfo:{},loadingUserInfo:!1,userId:1,watchlist:[],loadingWatchlist:!1,showAddStockModal:!1,addingStock:!1,selectedSymbol:void 0,analyzing:!1,analysisResult:null,analysisError:null,analysisErrorTone:"error",showHistoryModal:!1,historyList:[],historyLoading:!1,historyPage:1,historyPageSize:20,historyTotal:0,marketTypes:[],selectedMarketTab:"",symbolSearchKeyword:"",symbolSearchResults:[],searchingSymbols:!1,hotSymbols:[],loadingHotSymbols:!1,selectedSymbolForAdd:null,searchTimer:null,hasSearched:!1}},computed:(0,c.A)((0,c.A)((0,c.A)({},(0,d.L8)(["userInfo"])),(0,d.aH)({navTheme:function(t){return t.app.theme},primaryColor:function(t){return t.app.color||"#1890ff"}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},isZhLocale:function(){return"zh-CN"===this.$i18n.locale},currentHeatmap:function(){return this.marketData.heatmap[this.heatmapType]||[]},storeUserInfo:function(){return this.userInfo||{}},mergedUserInfo:function(){return this.localUserInfo&&this.localUserInfo.email?this.localUserInfo:this.storeUserInfo}}),created:function(){this.loadUserInfo(),this.loadMarketTypes(),this.loadWatchlist(),this.loadMarketData()},mounted:function(){this.startWatchlistPriceRefresh()},beforeDestroy:function(){this.watchlistPriceTimer&&clearInterval(this.watchlistPriceTimer)},methods:{filterSymbolOption:function(t,s){var a,e=(null===(a=s.componentOptions)||void 0===a||null===(a=a.propsData)||void 0===a?void 0:a.value)||"";return"__add_stock_option__"===e||e.toLowerCase().includes(t.toLowerCase())},handleSymbolChange:function(t){var s=this;if("__add_stock_option__"===t)return this.showAddStockModal=!0,void this.$nextTick(function(){s.selectedSymbol=void 0});this.selectedSymbol=t,this.analysisResult=null,this.analysisError=null,this.analysisErrorTone="error",this.$emit("symbol-change",t)},selectWatchlistItem:function(t){this.selectedSymbol="".concat(t.market,":").concat(t.symbol),this.analysisResult=null,this.analysisError=null,this.analysisErrorTone="error",this.$emit("symbol-change",this.selectedSymbol)},loadMarketData:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){return(0,l.A)().w(function(s){while(1)switch(s.n){case 0:t.loadingMarket=!0,t.loadSentimentData(),t.loadIndicesData(),t.loadHeatmapData(),t.loadCalendarData();case 1:return s.a(2)}},s)}))()},loadSentimentData:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a,e,i,r;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.loadingSentiment=!0,s.p=1,s.n=2,(0,b.EF)();case 2:a=s.v,1===(null===a||void 0===a?void 0:a.code)&&null!==a&&void 0!==a&&a.data&&(t.marketData.fearGreed=(null===(e=a.data.fear_greed)||void 0===e?void 0:e.value)||null,t.marketData.vix=(null===(i=a.data.vix)||void 0===i?void 0:i.value)||null,t.marketData.dxy=(null===(r=a.data.dxy)||void 0===r?void 0:r.value)||null),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.p=4,t.loadingSentiment=!1,t.checkAllLoaded(),s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},loadIndicesData:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.loadingIndices=!0,s.p=1,s.n=2,(0,b.yI)();case 2:a=s.v,1===(null===a||void 0===a?void 0:a.code)&&null!==a&&void 0!==a&&a.data&&(t.marketData.indices=a.data.indices||[]),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.p=4,t.loadingIndices=!1,t.checkAllLoaded(),s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},loadHeatmapData:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.loadingHeatmap=!0,s.p=1,s.n=2,(0,b.f$)();case 2:a=s.v,1===(null===a||void 0===a?void 0:a.code)&&null!==a&&void 0!==a&&a.data&&(t.marketData.heatmap={crypto:a.data.crypto||[],commodities:a.data.commodities||[],sectors:a.data.sectors||[],forex:a.data.forex||[]}),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.p=4,t.loadingHeatmap=!1,t.checkAllLoaded(),s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},loadCalendarData:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.loadingCalendar=!0,s.p=1,s.n=2,(0,b.kF)();case 2:a=s.v,1===(null===a||void 0===a?void 0:a.code)&&(t.marketData.calendar=a.data||[]),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.p=4,t.loadingCalendar=!1,t.checkAllLoaded(),s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},checkAllLoaded:function(){this.loadingSentiment||this.loadingIndices||this.loadingHeatmap||this.loadingCalendar||(this.loadingMarket=!1)},getFearGreedClass:function(t){return t?t<=25?"extreme-fear":t<=45?"fear":t<=55?"neutral":t<=75?"greed":"extreme-greed":""},getVixLevel:function(t){return t?t<15?"low":t<25?"medium":"high":""},formatNum:function(t){var s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return void 0===t||null===t||isNaN(t)?"--":Number(t).toFixed(s)},getHeatmapStyle:function(t){var s=parseFloat(t)||0,a=Math.min(Math.abs(s)/5,1);return s>=0?{background:"rgba(34, 197, 94, ".concat(.15+.6*a,")"),color:s>2?"#fff":"#166534"}:{background:"rgba(239, 68, 68, ".concat(.15+.6*a,")"),color:s<-2?"#fff":"#991b1b"}},getCountryFlag:function(t){var s={US:"🇺🇸",CN:"🇨🇳",EU:"🇪🇺",JP:"🇯🇵",UK:"🇬🇧",DE:"🇩🇪",AU:"🇦🇺",CA:"🇨🇦"};return s[t]||"🌍"},formatCalendarDate:function(t){if(!t)return"";try{var s=new Date(t),a=new Date,e=new Date(a);if(e.setDate(e.getDate()+1),s.toDateString()===a.toDateString())return this.isZhLocale?"今天":"Today";if(s.toDateString()===e.toDateString())return this.isZhLocale?"明天":"Tmrw";var i=s.getMonth()+1,r=s.getDate();return"".concat(i,"/").concat(r)}catch(n){return t}},formatPrice:function(t){return t?t>=1e4?(t/1e3).toFixed(1)+"K":t>=1e3?t.toFixed(0):t.toFixed(2):"--"},formatHeatmapPrice:function(t){return t?t>=1e4?"$"+(t/1e3).toFixed(1)+"K":t>=1e3?"$"+t.toFixed(0):t>=1?"$"+t.toFixed(2):"$"+t.toFixed(4):""},getHeatmapName:function(t){return"sectors"===this.heatmapType||"commodities"===this.heatmapType||"forex"===this.heatmapType?this.isZhLocale?t.name_cn||t.name:t.name_en||t.name:t.name},getImpactClass:function(t){return t.actual_impact||t.expected_impact||"neutral"},getMarketColor:function(t){var s={USStock:"green",Crypto:"purple",Forex:"gold",Futures:"cyan"};return s[t]||"default"},getCurrencySymbol:function(t){return"$"},formatCreditNum:function(t){if(void 0===t||null===t||""===t)return"--";var s=Number(t);return Number.isNaN(s)?String(t):Number.isInteger(s)?String(s):s.toFixed(2)},refreshUserInfoFromServer:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return s.p=0,s.n=1,(0,u.ug)();case 1:a=s.v,a&&1===a.code&&a.data&&(t.localUserInfo=a.data,t.userId=a.data.id,t.$store.commit("SET_INFO",a.data)),s.n=3;break;case 2:s.p=2,s.v;case 3:return s.a(2)}},s,null,[[0,2]])}))()},startFastAnalysis:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a,e,i,r,o,d,u,m,h,y,v,f,g,b,_;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(!t.analyzing){s.n=1;break}return s.a(2);case 1:if(t.selectedSymbol){s.n=2;break}return t.$message.warning(t.$t("dashboard.analysis.message.selectSymbol")),s.a(2);case 2:return t.analyzing=!0,t.analysisError=null,t.analysisErrorTone="error",a=t.selectedSymbol.split(":"),e=(0,n.A)(a,2),i=e[0],r=e[1],o=t.$store.getters.lang||"zh-CN",s.p=3,s.n=4,p({market:i,symbol:r,language:o,timeframe:"1D"});case 4:if(d=s.v,!d||1!==d.code||!d.data){s.n=6;break}return u=(0,c.A)({},d.data),delete u.credits_charged,delete u.remaining_credits,t.analysisResult=u,m=d.data.remaining_credits,void 0!==m&&null!==m?t.$message.success(t.$t("fastAnalysis.analysisCompleteWithCredits",{remaining:t.formatCreditNum(m)})):t.$message.success(t.$t("dashboard.analysis.message.analysisComplete")),s.n=5,t.refreshUserInfoFromServer();case 5:s.n=7;break;case 6:throw new Error((null===d||void 0===d?void 0:d.msg)||"分析失败");case 7:s.n=9;break;case 8:s.p=8,_=s.v,v=null===_||void 0===_||null===(h=_.response)||void 0===h?void 0:h.status,f=(null===_||void 0===_||null===(y=_.response)||void 0===y?void 0:y.data)||{},g=f.msg,b=f.data,429===v&&b&&b.in_progress?(t.analysisErrorTone="warning",t.analysisError=t.$t("fastAnalysis.analysisInProgress"),t.$message.warning(t.analysisError)):400===v&&"Insufficient credits"===g?(t.analysisError=t.$t("fastAnalysis.insufficientCreditsDetail",{required:t.formatCreditNum(null===b||void 0===b?void 0:b.required),current:t.formatCreditNum(null===b||void 0===b?void 0:b.current),shortage:t.formatCreditNum(null===b||void 0===b?void 0:b.shortage)}),t.$message.error(t.analysisError)):(t.analysisError=g||(null===_||void 0===_?void 0:_.message)||t.$t("dashboard.analysis.message.analysisFailed"),t.$message.error(t.analysisError));case 9:return s.p=9,t.analyzing=!1,s.f(9);case 10:return s.a(2)}},s,null,[[3,8,9,10]])}))()},loadHistoryList:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.historyLoading=!0,s.p=1,s.n=2,v({page:t.historyPage,pagesize:t.historyPageSize});case 2:a=s.v,a&&1===a.code&&a.data&&(t.historyList=a.data.list||[],t.historyTotal=a.data.total||0),s.n=4;break;case 3:s.p=3,s.v,t.$message.error(t.$t("dashboard.analysis.message.loadHistoryFailed")||"加载历史记录失败");case 4:return s.p=4,t.historyLoading=!1,s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},viewHistoryResult:function(t){var s=this;return(0,o.A)((0,l.A)().m(function a(){return(0,l.A)().w(function(a){while(1)switch(a.n){case 0:if(!t.full_result){a.n=1;break}return s.analysisResult=t.full_result,s.selectedSymbol="".concat(t.market,":").concat(t.symbol),s.showHistoryModal=!1,a.a(2);case 1:s.analysisResult={decision:t.decision,confidence:t.confidence,summary:t.summary,market_data:{current_price:t.price,change_24h:0},trading_plan:{entry_price:t.price,stop_loss:.95*t.price,take_profit:1.05*t.price},scores:t.scores||{},reasons:t.reasons||[],risks:[],indicators:t.indicators||{},memory_id:t.id,analysis_time_ms:0},s.selectedSymbol="".concat(t.market,":").concat(t.symbol),s.showHistoryModal=!1;case 2:return a.a(2)}},a)}))()},deleteHistoryItem:function(t){var s=this;return(0,o.A)((0,l.A)().m(function a(){var e;return(0,l.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,f(t.id);case 1:e=a.v,e&&1===e.code?(s.$message.success(s.$t("dashboard.analysis.message.deleteSuccess")),s.loadHistoryList()):s.$message.error((null===e||void 0===e?void 0:e.msg)||s.$t("dashboard.analysis.message.deleteFailed")),a.n=3;break;case 2:a.p=2,a.v,s.$message.error(s.$t("dashboard.analysis.message.deleteFailed"));case 3:return a.a(2)}},a,null,[[0,2]])}))()},formatTime:function(t){if(!t)return"-";var s=new Date(1e3*t);return s.toLocaleString("zh-CN")},formatIsoTime:function(t){if(!t)return"-";var s=new Date(t);return s.toLocaleString("zh-CN")},getStatusColor:function(t){var s={pending:"orange",processing:"blue",completed:"green",failed:"red"};return s[t]||"default"},getStatusText:function(t){var s={pending:"dashboard.analysis.status.pending",processing:"dashboard.analysis.status.processing",completed:"dashboard.analysis.status.completed",failed:"dashboard.analysis.status.failed"},a=s[t];return a?this.$t(a):t},loadUserInfo:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(t.loadingUserInfo=!0,s.p=1,!t.storeUserInfo||!t.storeUserInfo.email){s.n=2;break}return t.localUserInfo=t.storeUserInfo,t.userId=t.storeUserInfo.id,t.loadingUserInfo=!1,t.loadWatchlist(),s.a(2);case 2:return s.n=3,(0,u.ug)();case 3:a=s.v,a&&1===a.code&&a.data&&(t.localUserInfo=a.data,t.userId=a.data.id,t.$store.commit("SET_INFO",a.data),t.loadWatchlist()),s.n=5;break;case 4:s.p=4,s.v;case 5:return s.p=5,t.loadingUserInfo=!1,s.f(5);case 6:return s.a(2)}},s,null,[[1,4,5,6]])}))()},loadWatchlist:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(t.userId){s.n=1;break}return s.a(2);case 1:return t.loadingWatchlist=!0,s.p=2,s.n=3,(0,m.Qo)({userid:t.userId});case 3:if(a=s.v,!a||1!==a.code||!a.data){s.n=4;break}return t.watchlist=a.data.map(function(t){return(0,c.A)((0,c.A)({},t),{},{price:0,change:0,changePercent:0})}),s.n=4,t.loadWatchlistPrices();case 4:s.n=6;break;case 5:s.p=5,s.v;case 6:return s.p=6,t.loadingWatchlist=!1,s.f(6);case 7:return s.a(2)}},s,null,[[2,5,6,7]])}))()},loadWatchlistPrices:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a,e,i,r;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(t.watchlist&&0!==t.watchlist.length){s.n=1;break}return s.a(2);case 1:return s.p=1,a=t.watchlist.map(function(t){return{market:t.market,symbol:t.symbol}}),s.n=2,(0,m.ms)({watchlist:a});case 2:e=s.v,e&&1===e.code&&e.data&&(i={},r={},e.data.forEach(function(t){i["".concat(t.market,"-").concat(t.symbol)]=t,r["".concat(t.market,":").concat(t.symbol)]={price:t.price||0,change:t.changePercent||0}}),t.watchlistPrices=r,t.watchlist=t.watchlist.map(function(t){var s="".concat(t.market,"-").concat(t.symbol),a=i[s];return a?(0,c.A)((0,c.A)({},t),{},{price:a.price||0,change:a.change||0,changePercent:a.changePercent||0}):t})),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.a(2)}},s,null,[[1,3]])}))()},startWatchlistPriceRefresh:function(){var t=this;this.watchlistPriceTimer=setInterval(function(){t.watchlist&&t.watchlist.length>0&&t.loadWatchlistPrices()},3e4),this.watchlist&&this.watchlist.length>0&&this.loadWatchlistPrices()},handleAddStock:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a,e,i,r,n,o,c;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(a="",e="",i="",!t.selectedSymbolForAdd){s.n=1;break}a=t.selectedSymbolForAdd.market,e=t.selectedSymbolForAdd.symbol.toUpperCase(),i=t.selectedSymbolForAdd.name||"",s.n=4;break;case 1:if(!t.symbolSearchKeyword||!t.symbolSearchKeyword.trim()){s.n=3;break}if(t.selectedMarketTab){s.n=2;break}return t.$message.warning(t.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),s.a(2);case 2:a=t.selectedMarketTab,e=t.symbolSearchKeyword.trim().toUpperCase(),i="",s.n=4;break;case 3:return t.$message.warning(t.$t("dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol")),s.a(2);case 4:return t.addingStock=!0,s.p=5,s.n=6,(0,m.dp)({userid:t.userId,market:a,symbol:e,name:i});case 6:if(r=s.v,!r||1!==r.code){s.n=8;break}return t.$message.success(t.$t("dashboard.analysis.message.addStockSuccess")),t.handleCloseAddStockModal(),s.n=7,t.loadWatchlist();case 7:s.n=9;break;case 8:t.$message.error((null===r||void 0===r?void 0:r.msg)||t.$t("dashboard.analysis.message.addStockFailed"));case 9:s.n=11;break;case 10:s.p=10,c=s.v,o=(null===c||void 0===c||null===(n=c.response)||void 0===n||null===(n=n.data)||void 0===n?void 0:n.msg)||(null===c||void 0===c?void 0:c.message)||t.$t("dashboard.analysis.message.addStockFailed"),t.$message.error(o);case 11:return s.p=11,t.addingStock=!1,s.f(11);case 12:return s.a(2)}},s,null,[[5,10,11,12]])}))()},handleCloseAddStockModal:function(){this.showAddStockModal=!1,this.selectedSymbolForAdd=null,this.symbolSearchKeyword="",this.symbolSearchResults=[],this.hasSearched=!1,this.selectedMarketTab=this.marketTypes.length>0?this.marketTypes[0].value:""},handleMarketTabChange:function(t){this.selectedMarketTab=t,this.symbolSearchKeyword="",this.symbolSearchResults=[],this.selectedSymbolForAdd=null,this.hasSearched=!1,this.loadHotSymbols(t)},handleSymbolSearchInput:function(t){var s=this,a=t.target.value;if(this.symbolSearchKeyword=a,this.searchTimer&&clearTimeout(this.searchTimer),!a||""===a.trim())return this.symbolSearchResults=[],this.hasSearched=!1,void(this.selectedSymbolForAdd=null);this.searchTimer=setTimeout(function(){s.searchSymbolsInModal(a)},500)},handleSearchOrInput:function(t){t&&t.trim()&&(this.selectedMarketTab?this.symbolSearchResults.length>0||(this.hasSearched&&0===this.symbolSearchResults.length?this.handleDirectAdd():this.searchSymbolsInModal(t)):this.$message.warning(this.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")))},searchSymbolsInModal:function(t){var s=this;return(0,o.A)((0,l.A)().m(function a(){var e;return(0,l.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(t&&""!==t.trim()){a.n=1;break}return s.symbolSearchResults=[],s.hasSearched=!1,a.a(2);case 1:if(s.selectedMarketTab){a.n=2;break}return s.$message.warning(s.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),a.a(2);case 2:return s.searchingSymbols=!0,s.hasSearched=!0,a.p=3,a.n=4,(0,m._3)({market:s.selectedMarketTab,keyword:t.trim(),limit:20});case 4:e=a.v,e&&1===e.code&&e.data&&e.data.length>0?s.symbolSearchResults=e.data:(s.symbolSearchResults=[],s.selectedSymbolForAdd={market:s.selectedMarketTab,symbol:t.trim().toUpperCase(),name:""}),a.n=6;break;case 5:a.p=5,a.v,s.symbolSearchResults=[],s.selectedSymbolForAdd={market:s.selectedMarketTab,symbol:t.trim().toUpperCase(),name:""};case 6:return a.p=6,s.searchingSymbols=!1,a.f(6);case 7:return a.a(2)}},a,null,[[3,5,6,7]])}))()},handleDirectAdd:function(){this.symbolSearchKeyword&&this.symbolSearchKeyword.trim()?this.selectedMarketTab?this.selectedSymbolForAdd={market:this.selectedMarketTab,symbol:this.symbolSearchKeyword.trim().toUpperCase(),name:""}:this.$message.warning(this.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")):this.$message.warning(this.$t("dashboard.analysis.modal.addStock.pleaseEnterSymbol"))},selectSymbol:function(t){this.selectedSymbolForAdd={market:t.market,symbol:t.symbol,name:t.name||t.symbol}},loadHotSymbols:function(t){var s=this;return(0,o.A)((0,l.A)().m(function a(){var e;return(0,l.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(t||(t=s.selectedMarketTab||(s.marketTypes.length>0?s.marketTypes[0].value:"")),t){a.n=1;break}return a.a(2);case 1:return s.loadingHotSymbols=!0,a.p=2,a.n=3,(0,m.z6)({market:t,limit:10});case 3:e=a.v,e&&1===e.code&&e.data?s.hotSymbols=e.data:s.hotSymbols=[],a.n=5;break;case 4:a.p=4,a.v,s.hotSymbols=[];case 5:return a.p=5,s.loadingHotSymbols=!1,a.f(5);case 6:return a.a(2)}},a,null,[[2,4,5,6]])}))()},removeFromWatchlist:function(t){var s=arguments,a=this;return(0,o.A)((0,l.A)().m(function e(){var i,n,o;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(a.userId){e.n=1;break}return e.a(2);case 1:return i="object"===(0,r.A)(t)?t.symbol:t,n="object"===(0,r.A)(t)?t.market:s[1],e.p=2,e.n=3,(0,m.mk)({userid:a.userId,symbol:i,market:n});case 3:if(o=e.v,!o||1!==o.code){e.n=5;break}return a.$message.success(a.$t("dashboard.analysis.message.removeStockSuccess")),e.n=4,a.loadWatchlist();case 4:e.n=6;break;case 5:a.$message.error((null===o||void 0===o?void 0:o.msg)||a.$t("dashboard.analysis.message.removeStockFailed"));case 6:e.n=8;break;case 7:e.p=7,e.v,a.$message.error(a.$t("dashboard.analysis.message.removeStockFailed"));case 8:return e.a(2)}},e,null,[[2,7]])}))()},getMarketName:function(t){return this.$t("dashboard.analysis.market.".concat(t))||t},formatNumber:function(t){return"string"===typeof t?t:t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})},loadMarketTypes:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return s.p=0,s.n=1,(0,m.iO)();case 1:a=s.v,a&&1===a.code&&a.data&&Array.isArray(a.data)?t.marketTypes=a.data.map(function(t){return{value:t.value,i18nKey:t.i18nKey||"dashboard.analysis.market.".concat(t.value)}}):t.marketTypes=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}],s.n=3;break;case 2:s.p=2,s.v,t.marketTypes=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}];case 3:t.marketTypes.length>0&&!t.selectedMarketTab&&(t.selectedMarketTab=t.marketTypes[0].value);case 4:return s.a(2)}},s,null,[[0,2]])}))()}},watch:{presetSymbol:function(t){t&&t!==this.selectedSymbol&&(this.selectedSymbol=t,this.analysisResult=null,this.analysisError=null,this.analysisErrorTone="error")},autoAnalyzeSignal:function(t){var s=this;t&&(this.presetSymbol&&this.presetSymbol!==this.selectedSymbol&&(this.selectedSymbol=this.presetSymbol),this.$nextTick(function(){s.startFastAnalysis()}))},showAddStockModal:function(t){t?(this.marketTypes.length>0&&!this.selectedMarketTab&&(this.selectedMarketTab=this.marketTypes[0].value),this.selectedMarketTab&&this.loadHotSymbols(this.selectedMarketTab)):(this.selectedSymbolForAdd=null,this.symbolSearchKeyword="",this.symbolSearchResults=[],this.hasSearched=!1,this.searchTimer&&(clearTimeout(this.searchTimer),this.searchTimer=null))}}},x=T,F=(0,A.A)(x,e,i,!1,null,"41eda137",null),M=F.exports},44146:function(t,s,a){a.d(s,{EF:function(){return o},f$:function(){return n},kF:function(){return l},r9:function(){return c},yI:function(){return r}});var e=a(75769),i="/api/global-market";function r(){return(0,e.Ay)({url:"".concat(i,"/overview"),method:"get"})}function n(){return(0,e.Ay)({url:"".concat(i,"/heatmap"),method:"get"})}function l(){return(0,e.Ay)({url:"".concat(i,"/calendar"),method:"get"})}function o(){return(0,e.Ay)({url:"".concat(i,"/sentiment"),method:"get"})}function c(t){return(0,e.Ay)({url:"".concat(i,"/opportunities"),method:"get",params:t})}},35038:function(t,s,a){a.d(s,{Qo:function(){return r},_3:function(){return d},dp:function(){return n},iO:function(){return c},mk:function(){return l},ms:function(){return o},z6:function(){return u}});var e=a(75769),i={GetWatchlist:"/api/market/watchlist/get",AddWatchlist:"/api/market/watchlist/add",RemoveWatchlist:"/api/market/watchlist/remove",GetWatchlistPrices:"/api/market/watchlist/prices",MultiAnalysis:"/api/analysis/multiAnalysis",CreateAnalysisTask:"/api/analysis/createTask",GetAnalysisTaskStatus:"/api/analysis/getTaskStatus",GetAnalysisHistoryList:"/api/analysis/getHistoryList",DeleteAnalysisTask:"/api/analysis/deleteTask",ReflectAnalysis:"/api/analysis/reflect",ChatMessage:"/api/ai/chat/message",GetChatHistory:"/api/ai/chat/history",SaveChatHistory:"/api/ai/chat/history/save",GetConfig:"/api/market/config",GetMenuFooterConfig:"/api/market/menuFooterConfig",GetMarketTypes:"/api/market/types",SearchSymbols:"/api/market/symbols/search",GetHotSymbols:"/api/market/symbols/hot"};function r(t){return(0,e.Ay)({url:i.GetWatchlist,method:"get",params:t})}function n(t){return(0,e.Ay)({url:i.AddWatchlist,method:"post",data:t})}function l(t){return(0,e.Ay)({url:i.RemoveWatchlist,method:"post",data:t})}function o(t){return(0,e.Ay)({url:i.GetWatchlistPrices,method:"get",params:{watchlist:JSON.stringify(t.watchlist||[])}})}function c(){return(0,e.Ay)({url:i.GetMarketTypes,method:"get"})}function d(t){return(0,e.Ay)({url:i.SearchSymbols,method:"get",params:t})}function u(t){return(0,e.Ay)({url:i.GetHotSymbols,method:"get",params:t})}}}]); \ No newline at end of file diff --git a/frontend/dist/js/271-legacy.57c8c72e.js b/frontend/dist/js/158-legacy.0d4510be.js similarity index 61% rename from frontend/dist/js/271-legacy.57c8c72e.js rename to frontend/dist/js/158-legacy.0d4510be.js index 1c774fa..0ac528f 100644 --- a/frontend/dist/js/271-legacy.57c8c72e.js +++ b/frontend/dist/js/158-legacy.0d4510be.js @@ -1 +1 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[271],{19271:function(e,t,a){a.r(t),a.d(t,{default:function(){return v}});a(62010);var r=function(){var e=this,t=e._self._c;return t("div",{staticClass:"profile-page",class:{"theme-dark":e.isDarkTheme}},[t("div",{staticClass:"page-header"},[t("h2",{staticClass:"page-title"},[t("a-icon",{attrs:{type:"user"}}),t("span",[e._v(e._s(e.$t("profile.title")||"My Profile"))])],1),t("p",{staticClass:"page-desc"},[e._v(e._s(e.$t("profile.description")||"Manage your account settings and preferences"))])]),t("a-row",{staticClass:"profile-cards-row",attrs:{gutter:24}},[t("a-col",{staticClass:"profile-card-col",attrs:{xs:24,md:8}},[t("a-card",{staticClass:"profile-card",attrs:{bordered:!1}},[t("div",{staticClass:"avatar-section"},[t("a-avatar",{attrs:{size:100,src:e.profile.avatar||"/avatar2.jpg"}}),t("h3",{staticClass:"username"},[e._v(e._s(e.profile.nickname||e.profile.username))]),t("p",{staticClass:"user-role"},[t("a-tag",{attrs:{color:e.getRoleColor(e.profile.role)}},[e._v(" "+e._s(e.getRoleLabel(e.profile.role))+" ")]),e.isVip?t("a-tag",{attrs:{color:"gold"}},[t("a-icon",{attrs:{type:"crown"}}),e._v(" VIP ")],1):e._e()],1)],1),t("a-divider"),t("div",{staticClass:"profile-info"},[t("div",{staticClass:"info-item"},[t("a-icon",{attrs:{type:"user"}}),t("span",{staticClass:"label"},[e._v(e._s(e.$t("profile.username")||"Username")+":")]),t("span",{staticClass:"value"},[e._v(e._s(e.profile.username))])],1),t("div",{staticClass:"info-item"},[t("a-icon",{attrs:{type:"mail"}}),t("span",{staticClass:"label"},[e._v(e._s(e.$t("profile.email")||"Email")+":")]),t("span",{staticClass:"value"},[e._v(e._s(e.profile.email||"-"))])],1),t("div",{staticClass:"info-item"},[t("a-icon",{attrs:{type:"calendar"}}),t("span",{staticClass:"label"},[e._v(e._s(e.$t("profile.lastLogin")||"Last Login")+":")]),t("span",{staticClass:"value"},[e._v(e._s(e.formatTime(e.profile.last_login_at)||"-"))])],1)])],1)],1),t("a-col",{staticClass:"right-cards-col",attrs:{xs:24,md:16}},[t("a-row",{staticClass:"right-cards-row",attrs:{gutter:16}},[t("a-col",{attrs:{xs:24,md:12}},[t("a-card",{staticClass:"credits-card",attrs:{bordered:!1}},[t("div",{staticClass:"credits-header"},[t("h3",{staticClass:"credits-title"},[t("a-icon",{attrs:{type:"wallet"}}),e._v(" "+e._s(e.$t("profile.credits.title")||"我的积分")+" ")],1)]),t("div",{staticClass:"credits-body"},[t("div",{staticClass:"credits-amount"},[t("span",{staticClass:"amount-value"},[e._v(e._s(e.formatCredits(e.billing.credits)))]),t("span",{staticClass:"amount-label"},[e._v(e._s(e.$t("profile.credits.unit")||"积分"))])]),e.billing.vip_expires_at?t("div",{staticClass:"vip-status"},[t("a-icon",{style:{color:e.isVip?"#faad14":"#999"},attrs:{type:"crown"}}),e.isVip?t("span",{staticClass:"vip-active"},[e._v(" "+e._s(e.$t("profile.credits.vipExpires")||"VIP有效期至")+": "+e._s(e.formatDate(e.billing.vip_expires_at))+" ")]):t("span",{staticClass:"vip-expired"},[e._v(" "+e._s(e.$t("profile.credits.vipExpired")||"VIP已过期")+" ")])],1):e.billing.is_vip?e._e():t("div",{staticClass:"vip-status"},[t("span",{staticClass:"no-vip"},[e._v(e._s(e.$t("profile.credits.noVip")||"非VIP用户"))])])]),t("a-divider"),t("div",{staticClass:"credits-actions"},[t("a-button",{attrs:{type:"primary",icon:"shopping"},on:{click:e.handleRecharge}},[e._v(" "+e._s(e.$t("profile.credits.recharge")||"开通/充值")+" ")])],1),e.billing.billing_enabled?t("div",{staticClass:"credits-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.credits.hint")||"使用AI分析/回测/监控等功能会消耗积分;VIP仅可免费使用VIP免费指标。"))])],1):e._e()],1)],1),t("a-col",{attrs:{xs:24,md:12}},[t("a-card",{staticClass:"referral-card",attrs:{bordered:!1}},[t("div",{staticClass:"referral-header"},[t("h3",{staticClass:"referral-title"},[t("a-icon",{attrs:{type:"team"}}),e._v(" "+e._s(e.$t("profile.referral.title")||"邀请好友")+" ")],1)]),t("div",{staticClass:"referral-body"},[t("div",{staticClass:"referral-stats"},[t("div",{staticClass:"stat-item"},[t("span",{staticClass:"stat-value"},[e._v(e._s(e.referralData.total||0))]),t("span",{staticClass:"stat-label"},[e._v(e._s(e.$t("profile.referral.totalInvited")||"已邀请"))])]),e.referralData.referral_bonus>0?t("div",{staticClass:"stat-item"},[t("span",{staticClass:"stat-value"},[e._v("+"+e._s(e.referralData.referral_bonus))]),t("span",{staticClass:"stat-label"},[e._v(e._s(e.$t("profile.referral.bonusPerInvite")||"每邀请获得"))])]):e._e()]),t("a-divider",{staticStyle:{margin:"12px 0"}}),t("div",{staticClass:"referral-link-section"},[t("div",{staticClass:"link-label"},[e._v(e._s(e.$t("profile.referral.yourLink")||"您的邀请链接"))]),t("div",{staticClass:"link-box"},[t("a-input",{attrs:{value:e.referralLink,readonly:"",size:"small"}},[t("a-tooltip",{attrs:{slot:"suffix",title:e.$t("profile.referral.copyLink")||"复制链接"},slot:"suffix"},[t("a-icon",{staticStyle:{cursor:"pointer"},attrs:{type:"copy"},on:{click:e.copyReferralLink}})],1)],1)],1)]),e.referralData.register_bonus>0?t("div",{staticClass:"referral-hint"},[t("a-icon",{attrs:{type:"gift"}}),t("span",[e._v(e._s(e.$t("profile.referral.newUserBonus")||"新用户注册获得")+" "+e._s(e.referralData.register_bonus)+" "+e._s(e.$t("profile.credits.unit")||"积分"))])],1):e._e()],1)])],1)],1)],1)],1),t("a-row",{staticStyle:{"margin-top":"24px"},attrs:{gutter:24}},[t("a-col",{attrs:{xs:24}},[t("a-card",{staticClass:"edit-card",attrs:{bordered:!1}},[t("a-tabs",{model:{value:e.activeTab,callback:function(t){e.activeTab=t},expression:"activeTab"}},[t("a-tab-pane",{key:"basic",attrs:{tab:e.$t("profile.basicInfo")||"Basic Info"}},[t("a-form",{staticClass:"profile-form",attrs:{form:e.profileForm,layout:"vertical"}},[t("a-form-item",{attrs:{label:e.$t("profile.nickname")||"Nickname"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["nickname",{initialValue:e.profile.nickname}],expression:"['nickname', { initialValue: profile.nickname }]"}],attrs:{placeholder:e.$t("profile.nicknamePlaceholder")||"Enter your nickname"}},[t("a-icon",{attrs:{slot:"prefix",type:"smile"},slot:"prefix"})],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.email")||"Email"}},[t("a-input",{attrs:{value:e.profile.email||"-",disabled:""}},[t("a-icon",{attrs:{slot:"prefix",type:"mail"},slot:"prefix"}),t("a-tooltip",{attrs:{slot:"suffix",title:e.$t("profile.emailCannotChange")||"Email cannot be changed after registration"},slot:"suffix"},[t("a-icon",{staticStyle:{color:"rgba(0,0,0,.45)"},attrs:{type:"info-circle"}})],1)],1)],1),t("a-form-item",[t("a-button",{attrs:{type:"primary",loading:e.saving},on:{click:e.handleSaveProfile}},[t("a-icon",{attrs:{type:"save"}}),e._v(" "+e._s(e.$t("common.save")||"Save")+" ")],1)],1)],1)],1),t("a-tab-pane",{key:"password",attrs:{tab:e.$t("profile.changePassword")||"Change Password"}},[t("a-form",{staticClass:"password-form",attrs:{form:e.passwordForm,layout:"vertical"}},[t("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{message:e.$t("profile.passwordHintNew")||"For security, email verification is required to change password. Password must be at least 8 characters with uppercase, lowercase, and number.",type:"info",showIcon:""}}),t("a-form-item",{attrs:{label:e.$t("profile.verificationCode")||"Verification Code"}},[t("a-row",{attrs:{gutter:12}},[t("a-col",{attrs:{span:16}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["code",{rules:[{required:!0,message:e.$t("profile.codeRequired")||"Please enter verification code"}]}],expression:"['code', {\n rules: [{ required: true, message: $t('profile.codeRequired') || 'Please enter verification code' }]\n }]"}],attrs:{placeholder:e.$t("profile.codePlaceholder")||"Enter verification code"}},[t("a-icon",{attrs:{slot:"prefix",type:"safety-certificate"},slot:"prefix"})],1)],1),t("a-col",{attrs:{span:8}},[t("a-button",{attrs:{block:"",loading:e.sendingPwdCode,disabled:e.sendingPwdCode||e.pwdCodeCountdown>0||!e.profile.email},on:{click:e.handleSendPwdCode}},[e._v(" "+e._s(e.pwdCodeCountdown>0?"".concat(e.pwdCodeCountdown,"s"):e.$t("profile.sendCode")||"Send Code")+" ")])],1)],1),e.profile.email?t("div",{staticClass:"email-hint"},[e._v(" "+e._s(e.$t("profile.codeWillSendTo")||"Code will be sent to")+": "+e._s(e.profile.email)+" ")]):t("div",{staticClass:"email-hint email-warning"},[e._v(" "+e._s(e.$t("profile.noEmailWarning")||"Please set your email first in Basic Info tab")+" ")])],1),t("a-form-item",{attrs:{label:e.$t("profile.newPassword")||"New Password"}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["new_password",{rules:[{required:!0,message:e.$t("profile.newPasswordRequired")||"Please enter new password"},{validator:e.validateNewPassword}]}],expression:"['new_password', {\n rules: [\n { required: true, message: $t('profile.newPasswordRequired') || 'Please enter new password' },\n { validator: validateNewPassword }\n ]\n }]"}],attrs:{placeholder:e.$t("profile.newPasswordPlaceholder")||"Enter new password"}},[t("a-icon",{attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.confirmPassword")||"Confirm Password"}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["confirm_password",{rules:[{required:!0,message:e.$t("profile.confirmPasswordRequired")||"Please confirm password"},{validator:e.validateConfirmPassword}]}],expression:"['confirm_password', {\n rules: [\n { required: true, message: $t('profile.confirmPasswordRequired') || 'Please confirm password' },\n { validator: validateConfirmPassword }\n ]\n }]"}],attrs:{placeholder:e.$t("profile.confirmPasswordPlaceholder")||"Confirm new password"}},[t("a-icon",{attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),t("a-form-item",[t("a-button",{attrs:{type:"primary",loading:e.changingPassword,disabled:!e.profile.email},on:{click:e.handleChangePassword}},[t("a-icon",{attrs:{type:"key"}}),e._v(" "+e._s(e.$t("profile.changePassword")||"Change Password")+" ")],1)],1)],1)],1),t("a-tab-pane",{key:"credits",attrs:{tab:e.$t("profile.creditsLog")||"消费记录"}},[t("a-table",{attrs:{columns:e.creditsLogColumns,dataSource:e.creditsLog,loading:e.creditsLogLoading,pagination:e.creditsLogPagination,rowKey:function(e){return e.id},size:"small"},on:{change:e.handleCreditsLogChange},scopedSlots:e._u([{key:"action",fn:function(a){return[t("a-tag",{attrs:{color:e.getActionColor(a)}},[e._v(" "+e._s(e.getActionLabel(a))+" ")])]}},{key:"amount",fn:function(a){return[t("span",{class:a>=0?"amount-positive":"amount-negative"},[e._v(" "+e._s(a>=0?"+":"")+e._s(a)+" ")])]}},{key:"created_at",fn:function(t){return[e._v(" "+e._s(e.formatTime(t))+" ")]}}])})],1),t("a-tab-pane",{key:"notifications",attrs:{tab:e.$t("profile.notifications.title")||"通知设置"}},[t("div",{staticClass:"notification-settings-form"},[t("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{message:e.$t("profile.notifications.hint")||"配置您的默认通知方式,在创建资产监控和预警时将自动使用这些设置",type:"info",showIcon:""}}),t("a-form",{staticStyle:{"max-width":"600px"},attrs:{form:e.notificationForm,layout:"vertical"}},[t("a-form-item",{attrs:{label:e.$t("profile.notifications.defaultChannels")||"默认通知渠道"}},[t("a-checkbox-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["default_channels",{initialValue:e.notificationSettings.default_channels||["browser"]}],expression:"['default_channels', { initialValue: notificationSettings.default_channels || ['browser'] }]"}]},[t("a-row",{attrs:{gutter:16}},[t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"browser"}},[t("a-icon",{attrs:{type:"bell"}}),e._v(" "+e._s(e.$t("profile.notifications.browser")||"站内通知")+" ")],1)],1),t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"telegram"}},[t("a-icon",{attrs:{type:"send"}}),e._v(" Telegram ")],1)],1),t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"email"}},[t("a-icon",{attrs:{type:"mail"}}),e._v(" "+e._s(e.$t("profile.notifications.email")||"邮件")+" ")],1)],1)],1),t("a-row",{staticStyle:{"margin-top":"8px"},attrs:{gutter:16}},[t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"phone"}},[t("a-icon",{attrs:{type:"phone"}}),e._v(" "+e._s(e.$t("profile.notifications.phone")||"短信")+" ")],1)],1),t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"discord"}},[t("a-icon",{attrs:{type:"message"}}),e._v(" Discord ")],1)],1),t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"webhook"}},[t("a-icon",{attrs:{type:"api"}}),e._v(" Webhook ")],1)],1)],1)],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.telegramBotToken")||"Telegram Bot Token"}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["telegram_bot_token",{initialValue:e.notificationSettings.telegram_bot_token}],expression:"['telegram_bot_token', { initialValue: notificationSettings.telegram_bot_token }]"}],attrs:{placeholder:e.$t("profile.notifications.telegramBotTokenPlaceholder")||"请输入您的 Telegram Bot Token"}},[t("a-icon",{attrs:{slot:"prefix",type:"robot"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(" "+e._s(e.$t("profile.notifications.telegramBotTokenHint")||"通过 @BotFather 创建机器人获取 Token")+" "),t("a",{attrs:{href:"https://t.me/BotFather",target:"_blank",rel:"noopener noreferrer"}},[e._v("@BotFather")])])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.telegramChatId")||"Telegram Chat ID"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["telegram_chat_id",{initialValue:e.notificationSettings.telegram_chat_id}],expression:"['telegram_chat_id', { initialValue: notificationSettings.telegram_chat_id }]"}],attrs:{placeholder:e.$t("profile.notifications.telegramPlaceholder")||"请输入您的 Telegram Chat ID(如 123456789)"}},[t("a-icon",{attrs:{slot:"prefix",type:"message"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.telegramHint")||"发送 /start 给 @userinfobot 可获取您的 Chat ID"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.notifyEmail")||"通知邮箱"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["email",{initialValue:e.notificationSettings.email||e.profile.email}],expression:"['email', { initialValue: notificationSettings.email || profile.email }]"}],attrs:{placeholder:e.$t("profile.notifications.emailPlaceholder")||"接收通知的邮箱地址"}},[t("a-icon",{attrs:{slot:"prefix",type:"mail"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.emailHint")||"默认使用账户邮箱,可设置其他邮箱接收通知"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.phone")||"手机号(短信通知)"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["phone",{initialValue:e.notificationSettings.phone}],expression:"['phone', { initialValue: notificationSettings.phone }]"}],attrs:{placeholder:e.$t("profile.notifications.phonePlaceholder")||"请输入手机号(如 +8613800138000)"}},[t("a-icon",{attrs:{slot:"prefix",type:"phone"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.phoneHint")||"需要管理员配置 Twilio 服务后才能使用短信通知"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.discordWebhook")||"Discord Webhook"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["discord_webhook",{initialValue:e.notificationSettings.discord_webhook}],expression:"['discord_webhook', { initialValue: notificationSettings.discord_webhook }]"}],attrs:{placeholder:e.$t("profile.notifications.discordPlaceholder")||"https://discord.com/api/webhooks/..."}},[t("a-icon",{attrs:{slot:"prefix",type:"message"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.discordHint")||"在 Discord 服务器设置中创建 Webhook"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.webhookUrl")||"Webhook URL"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["webhook_url",{initialValue:e.notificationSettings.webhook_url}],expression:"['webhook_url', { initialValue: notificationSettings.webhook_url }]"}],attrs:{placeholder:e.$t("profile.notifications.webhookPlaceholder")||"https://your-server.com/webhook"}},[t("a-icon",{attrs:{slot:"prefix",type:"api"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.webhookHint")||"自定义 Webhook 地址,将以 POST JSON 方式推送通知"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.webhookToken")||"Webhook Token(可选)"}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["webhook_token",{initialValue:e.notificationSettings.webhook_token}],expression:"['webhook_token', { initialValue: notificationSettings.webhook_token }]"}],attrs:{placeholder:e.$t("profile.notifications.webhookTokenPlaceholder")||"用于验证请求的 Bearer Token"}},[t("a-icon",{attrs:{slot:"prefix",type:"key"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.webhookTokenHint")||"将作为 Authorization: Bearer Token 发送到 Webhook"))])],1)],1),t("a-form-item",[t("a-button",{attrs:{type:"primary",loading:e.savingNotifications},on:{click:e.handleSaveNotifications}},[t("a-icon",{attrs:{type:"save"}}),e._v(" "+e._s(e.$t("common.save")||"保存")+" ")],1),t("a-button",{staticStyle:{"margin-left":"12px"},attrs:{loading:e.testingNotification},on:{click:e.handleTestNotification}},[t("a-icon",{attrs:{type:"experiment"}}),e._v(" "+e._s(e.$t("profile.notifications.testBtn")||"发送测试通知")+" ")],1)],1)],1)],1)]),t("a-tab-pane",{key:"exchange",attrs:{tab:e.$t("profile.exchange.title")||"交易所配置"}},[t("div",{staticClass:"exchange-config-section"},[t("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{message:e.$t("profile.exchange.hint"),type:"info",showIcon:""}}),t("div",{staticStyle:{"margin-bottom":"16px","text-align":"right"}},[t("a-button",{attrs:{type:"primary",icon:"plus"},on:{click:function(t){e.showAddExchangeModal=!0}}},[e._v(" "+e._s(e.$t("profile.exchange.addAccount"))+" ")])],1),t("a-table",{attrs:{columns:e.exchangeColumns,dataSource:e.exchangeCredentials,loading:e.exchangeLoading,rowKey:function(e){return e.id},size:"small"},scopedSlots:e._u([{key:"exchange_id",fn:function(a){return[t("span",{staticStyle:{"text-transform":"capitalize","font-weight":"500"}},[e._v(e._s(e.getExchangeDisplayName(a)))])]}},{key:"api_key_hint",fn:function(a,r){return[t("span",{staticClass:"credential-hint"},[e._v(e._s(a||r.name||"-"))])]}},{key:"created_at",fn:function(t){return[e._v(" "+e._s(e.formatTime(t))+" ")]}},{key:"action",fn:function(a,r){return[t("a-popconfirm",{attrs:{title:e.$t("profile.exchange.deleteConfirm"),okText:e.$t("common.confirm"),cancelText:e.$t("common.cancel")},on:{confirm:function(t){return e.handleDeleteCredential(r.id)}}},[t("a-button",{attrs:{type:"danger",size:"small",ghost:"",icon:"delete"}},[e._v(" "+e._s(e.$t("common.delete"))+" ")])],1)]}}])}),e.exchangeLoading||0!==e.exchangeCredentials.length?e._e():t("a-empty",{staticStyle:{"margin-top":"20px"}},[t("span",{attrs:{slot:"description"},slot:"description"},[e._v(e._s(e.$t("profile.exchange.noAccounts")))])])],1)]),t("a-tab-pane",{key:"referrals",attrs:{tab:e.$t("profile.referral.listTab")||"邀请列表"}},[t("a-table",{attrs:{columns:e.referralColumns,dataSource:e.referralData.list||[],loading:e.referralLoading,pagination:e.referralPagination,rowKey:function(e){return e.id},size:"small"},on:{change:e.handleReferralChange},scopedSlots:e._u([{key:"user",fn:function(a,r){return[t("div",{staticClass:"referral-user-cell"},[t("a-avatar",{attrs:{size:32,src:r.avatar||"/avatar2.jpg"}}),t("div",{staticClass:"user-info"},[t("span",{staticClass:"nickname"},[e._v(e._s(r.nickname||r.username))]),t("span",{staticClass:"username"},[e._v("@"+e._s(r.username))])])],1)]}},{key:"created_at",fn:function(t){return[e._v(" "+e._s(e.formatTime(t))+" ")]}}])}),e.referralLoading||e.referralData.list&&0!==e.referralData.list.length?e._e():t("a-empty",[t("span",{attrs:{slot:"description"},slot:"description"},[e._v(e._s(e.$t("profile.referral.noReferrals")||"暂无邀请记录"))]),t("a-button",{attrs:{type:"primary"},on:{click:e.copyReferralLink}},[e._v(" "+e._s(e.$t("profile.referral.shareNow")||"立即分享邀请")+" ")])],1)],1)],1)],1)],1)],1),t("a-modal",{attrs:{title:e.$t("profile.exchange.addTitle"),visible:e.showAddExchangeModal,confirmLoading:e.savingExchange,okText:e.$t("common.save"),cancelText:e.$t("common.cancel"),maskClosable:!1,width:"520px"},on:{ok:e.handleSaveExchange,cancel:function(t){e.showAddExchangeModal=!1}}},[t("a-form",{attrs:{form:e.exchangeForm,layout:"vertical"}},[t("a-form-item",{attrs:{label:e.$t("profile.exchange.selectExchange")}},[t("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["exchange_id",{rules:[{required:!0,message:e.$t("profile.exchange.selectExchange")}]}],expression:"['exchange_id', { rules: [{ required: true, message: $t('profile.exchange.selectExchange') }] }]"}],attrs:{placeholder:e.$t("profile.exchange.selectExchange")},on:{change:e.handleExchangeTypeChange}},[t("a-select-opt-group",{attrs:{label:e.$t("profile.exchange.typeCrypto")}},e._l(e.cryptoExchangeList,function(a){return t("a-select-option",{key:a.id,attrs:{value:a.id}},[e._v(" "+e._s(a.name)+" ")])}),1),t("a-select-opt-group",{attrs:{label:e.$t("profile.exchange.typeIBKR")}},[t("a-select-option",{attrs:{value:"ibkr"}},[e._v("Interactive Brokers (IBKR)")])],1),t("a-select-opt-group",{attrs:{label:e.$t("profile.exchange.typeMT5")}},[t("a-select-option",{attrs:{value:"mt5"}},[e._v("MetaTrader 5")])],1)],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.accountName")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["name"],expression:"['name']"}],attrs:{placeholder:e.$t("profile.exchange.accountNamePlaceholder")}})],1),"crypto"===e.addExchangeType?[t("a-form-item",{attrs:{label:e.$t("profile.exchange.apiKey")}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["api_key",{rules:[{required:!0,message:"API Key is required"}]}],expression:"['api_key', { rules: [{ required: true, message: 'API Key is required' }] }]"}],attrs:{placeholder:"API Key",autocomplete:"new-password"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.secretKey")}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["secret_key",{rules:[{required:!0,message:"Secret Key is required"}]}],expression:"['secret_key', { rules: [{ required: true, message: 'Secret Key is required' }] }]"}],attrs:{placeholder:"Secret Key",autocomplete:"new-password"}})],1),e.addExchangeNeedsPassphrase?t("a-form-item",{attrs:{label:e.$t("profile.exchange.passphrase")}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["passphrase"],expression:"['passphrase']"}],attrs:{placeholder:"Passphrase",autocomplete:"new-password"}})],1):e._e(),e.addExchangeShowDemo?t("a-form-item",[t("a-checkbox",{directives:[{name:"decorator",rawName:"v-decorator",value:["enable_demo_trading",{valuePropName:"checked",initialValue:!1}],expression:"['enable_demo_trading', { valuePropName: 'checked', initialValue: false }]"}]},[e._v(" "+e._s(e.$t("profile.exchange.demoTrading"))+" ")])],1):e._e()]:e._e(),"ibkr"===e.addExchangeType?[t("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"warning",showIcon:"",message:e.$t("profile.exchange.localDeploymentRequired"),description:e.$t("profile.exchange.localDeploymentHint")}}),t("a-form-item",{attrs:{label:e.$t("profile.exchange.ibkrHost")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["ibkr_host",{initialValue:"127.0.0.1"}],expression:"['ibkr_host', { initialValue: '127.0.0.1' }]"}],attrs:{placeholder:"127.0.0.1"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.ibkrPort")}},[t("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["ibkr_port",{initialValue:7497}],expression:"['ibkr_port', { initialValue: 7497 }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:65535}}),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.exchange.ibkrPortHint")))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.ibkrClientId")}},[t("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["ibkr_client_id",{initialValue:1}],expression:"['ibkr_client_id', { initialValue: 1 }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:999}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.ibkrAccount")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["ibkr_account"],expression:"['ibkr_account']"}],attrs:{placeholder:"DU123456"}})],1)]:e._e(),"mt5"===e.addExchangeType?[t("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"warning",showIcon:"",message:e.$t("profile.exchange.localDeploymentRequired"),description:e.$t("profile.exchange.localDeploymentHint")}}),t("a-form-item",{attrs:{label:e.$t("profile.exchange.mt5Server")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["mt5_server",{rules:[{required:!0,message:"Server is required"}]}],expression:"['mt5_server', { rules: [{ required: true, message: 'Server is required' }] }]"}],attrs:{placeholder:"MetaQuotes-Demo"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.mt5Login")}},[t("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["mt5_login",{rules:[{required:!0,message:"Login is required"}]}],expression:"['mt5_login', { rules: [{ required: true, message: 'Login is required' }] }]"}],staticStyle:{width:"100%"},attrs:{min:1,placeholder:"12345678"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.mt5Password")}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["mt5_password",{rules:[{required:!0,message:"Password is required"}]}],expression:"['mt5_password', { rules: [{ required: true, message: 'Password is required' }] }]"}],attrs:{placeholder:"Password",autocomplete:"new-password"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.mt5TerminalPath")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["mt5_terminal_path"],expression:"['mt5_terminal_path']"}],attrs:{placeholder:"C:\\Program Files\\MetaTrader 5\\terminal64.exe"}}),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.exchange.mt5TerminalPathHint")))])],1)],1)]:e._e(),e.addExchangeType?t("a-form-item",[t("a-button",{attrs:{block:"",loading:e.testingExchange},on:{click:e.handleTestExchangeConnection}},[t("a-icon",{attrs:{type:"api"}}),e._v(" "+e._s(e.$t("profile.exchange.testConnection"))+" ")],1),e.exchangeTestResult?t("div",{staticClass:"test-result-msg",class:e.exchangeTestResult.success?"success":"error"},[t("a-icon",{attrs:{type:e.exchangeTestResult.success?"check-circle":"close-circle"}}),e._v(" "+e._s(e.exchangeTestResult.message)+" ")],1):e._e()],1):e._e()],2)],1)],1)},i=[],n=a(57888),o=a(76959),s=a(17654),l=(a(28706),a(74423),a(62062),a(2892),a(26099),a(27495),a(21699),a(47764),a(62953),a(27617)),c=a(39523),d=a(72694),u=a(73047),p=a(21170),f={name:"Profile",mixins:[p.t],data:function(){return{loading:!1,saving:!1,changingPassword:!1,sendingPwdCode:!1,pwdCodeCountdown:0,pwdCodeTimer:null,activeTab:"basic",profile:{id:null,username:"",nickname:"",email:"",avatar:"",role:"user",last_login_at:null},creditsLog:[],creditsLogLoading:!1,creditsLogPagination:{current:1,pageSize:10,total:0},referralData:{list:[],total:0,referral_code:"",referral_bonus:0,register_bonus:0},referralLoading:!1,referralPagination:{current:1,pageSize:10,total:0},billing:{credits:0,is_vip:!1,vip_expires_at:null,billing_enabled:!1,vip_bypass:!0,feature_costs:{},recharge_telegram_url:""},rechargeTelegramUrl:"https://t.me/your_support_bot",notificationSettings:{default_channels:["browser"],telegram_bot_token:"",telegram_chat_id:"",email:"",phone:"",discord_webhook:"",webhook_url:"",webhook_token:""},savingNotifications:!1,testingNotification:!1,exchangeCredentials:[],exchangeLoading:!1,showAddExchangeModal:!1,savingExchange:!1,testingExchange:!1,exchangeTestResult:null,addExchangeType:"",selectedExchangeId:"",cryptoExchangeList:[{id:"binance",name:"Binance"},{id:"okx",name:"OKX"},{id:"bitget",name:"Bitget"},{id:"bybit",name:"Bybit"},{id:"coinbaseexchange",name:"Coinbase"},{id:"kraken",name:"Kraken"},{id:"kucoin",name:"KuCoin"},{id:"gate",name:"Gate.io"},{id:"bitfinex",name:"Bitfinex"}]}},computed:{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},isVip:function(){if(!this.billing.vip_expires_at)return!1;var e=new Date(this.billing.vip_expires_at);return e>new Date},creditsLogColumns:function(){return[{title:this.$t("profile.creditsLog.time")||"时间",dataIndex:"created_at",width:160,scopedSlots:{customRender:"created_at"}},{title:this.$t("profile.creditsLog.action")||"类型",dataIndex:"action",width:100,scopedSlots:{customRender:"action"}},{title:this.$t("profile.creditsLog.amount")||"变动",dataIndex:"amount",width:100,scopedSlots:{customRender:"amount"}},{title:this.$t("profile.creditsLog.balance")||"余额",dataIndex:"balance_after",width:100},{title:this.$t("profile.creditsLog.remark")||"备注",dataIndex:"remark",ellipsis:!0}]},referralColumns:function(){return[{title:this.$t("profile.referral.user")||"用户",dataIndex:"username",scopedSlots:{customRender:"user"}},{title:this.$t("profile.referral.registerTime")||"注册时间",dataIndex:"created_at",width:180,scopedSlots:{customRender:"created_at"}}]},referralLink:function(){var e=window.location.origin+window.location.pathname,t=this.referralData.referral_code||this.profile.id;return"".concat(e,"#/user/login?ref=").concat(t)},exchangeColumns:function(){return[{title:this.$t("profile.exchange.colExchange")||"Exchange",dataIndex:"exchange_id",width:140,scopedSlots:{customRender:"exchange_id"}},{title:this.$t("profile.exchange.colName")||"Name",dataIndex:"name",width:140,customRender:function(e){return e||"-"}},{title:this.$t("profile.exchange.colHint")||"Connection Info",dataIndex:"api_key_hint",scopedSlots:{customRender:"api_key_hint"}},{title:this.$t("profile.exchange.colCreatedAt")||"Created At",dataIndex:"created_at",width:180,scopedSlots:{customRender:"created_at"}},{title:this.$t("profile.exchange.colActions")||"Actions",width:120,scopedSlots:{customRender:"action"}}]},addExchangeNeedsPassphrase:function(){var e=["okx","bitget","kucoin"];return e.includes(this.selectedExchangeId)},addExchangeShowDemo:function(){return"binance"===this.selectedExchangeId}},watch:{activeTab:function(e){"credits"===e&&0===this.creditsLog.length&&this.loadCreditsLog(),"referrals"!==e||this.referralData.list&&0!==this.referralData.list.length||this.loadReferrals(),"notifications"!==e||this.notificationSettings.telegram_chat_id||this.notificationSettings.discord_webhook||this.loadNotificationSettings(),"exchange"===e&&0===this.exchangeCredentials.length&&this.loadExchangeCredentials()}},beforeCreate:function(){this.profileForm=this.$form.createForm(this,{name:"profile"}),this.passwordForm=this.$form.createForm(this,{name:"password"}),this.notificationForm=this.$form.createForm(this,{name:"notification"}),this.exchangeForm=this.$form.createForm(this,{name:"exchange"})},mounted:function(){this.loadProfile(),this.loadReferrals()},beforeDestroy:function(){this.pwdCodeTimer&&clearInterval(this.pwdCodeTimer)},methods:{loadProfile:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.loading=!0,t.p=1,t.n=2,(0,l.E$)();case 2:a=t.v,1===a.code?(e.profile=a.data,a.data.billing&&(e.billing=a.data.billing,e.billing.recharge_telegram_url&&(e.rechargeTelegramUrl=e.billing.recharge_telegram_url)),a.data.notification_settings&&(e.notificationSettings={default_channels:a.data.notification_settings.default_channels||["browser"],telegram_bot_token:a.data.notification_settings.telegram_bot_token||"",telegram_chat_id:a.data.notification_settings.telegram_chat_id||"",email:a.data.notification_settings.email||a.data.email||"",phone:a.data.notification_settings.phone||"",discord_webhook:a.data.notification_settings.discord_webhook||"",webhook_url:a.data.notification_settings.webhook_url||"",webhook_token:a.data.notification_settings.webhook_token||""}),e.$nextTick(function(){e.profileForm.setFieldsValue({nickname:e.profile.nickname,email:e.profile.email})})):e.$message.error(a.msg||"Failed to load profile"),t.n=4;break;case 3:t.p=3,t.v,e.$message.error("Failed to load profile");case 4:return t.p=4,e.loading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},loadRechargeUrl:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if("admin"!==e.profile.role){t.n=4;break}return t.p=1,t.n=2,(0,c.YT)();case 2:a=t.v,1===a.code&&a.data&&a.data.billing&&(e.rechargeTelegramUrl=a.data.billing.RECHARGE_TELEGRAM_URL||e.rechargeTelegramUrl),t.n=4;break;case 3:t.p=3,t.v;case 4:return t.a(2)}},t,null,[[1,3]])}))()},handleRecharge:function(){this.$router.push("/billing")},formatCredits:function(e){return e||0===e?Number(e).toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:2}):"0"},formatDate:function(e){if(!e)return"";var t=new Date(e);return t.toLocaleDateString()},handleSaveProfile:function(){var e=this;this.profileForm.validateFields(function(){var t=(0,s.A)((0,o.A)().m(function t(a,r){var i;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(!a){t.n=1;break}return t.a(2);case 1:return e.saving=!0,t.p=2,t.n=3,(0,l.r7)(r);case 3:i=t.v,1===i.code?(e.$message.success(i.msg||"Profile updated successfully"),e.loadProfile()):e.$message.error(i.msg||"Update failed"),t.n=5;break;case 4:t.p=4,t.v,e.$message.error("Update failed");case 5:return t.p=5,e.saving=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(e,a){return t.apply(this,arguments)}}())},validateConfirmPassword:function(e,t,a){var r=this.passwordForm.getFieldValue("new_password");t&&t!==r?a(this.$t("profile.passwordMismatch")||"Passwords do not match"):a()},handleSendPwdCode:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var r,i,n,s,l;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e.profile.email){t.n=1;break}return e.$message.error(e.$t("profile.noEmailWarning")||"Please set your email first"),t.a(2);case 1:return e.sendingPwdCode=!0,t.p=2,t.n=3,a.e(24).then(a.bind(a,20024));case 3:return r=t.v,i=r.sendVerificationCode,t.n=4,i({email:e.profile.email,type:"change_password"});case 4:n=t.v,1===n.code?(e.$message.success(e.$t("profile.codeSent")||"Verification code sent"),e.startPwdCodeCountdown()):e.$message.error(n.msg||"Failed to send code"),t.n=6;break;case 5:t.p=5,l=t.v,e.$message.error((null===(s=l.response)||void 0===s||null===(s=s.data)||void 0===s?void 0:s.msg)||"Failed to send code");case 6:return t.p=6,e.sendingPwdCode=!1,t.f(6);case 7:return t.a(2)}},t,null,[[2,5,6,7]])}))()},startPwdCodeCountdown:function(){var e=this;this.pwdCodeCountdown=60,this.pwdCodeTimer=setInterval(function(){e.pwdCodeCountdown--,e.pwdCodeCountdown<=0&&(clearInterval(e.pwdCodeTimer),e.pwdCodeTimer=null)},1e3)},validateNewPassword:function(e,t,a){t?t.length<8?a(new Error(this.$t("user.register.pwdMinLength")||"At least 8 characters")):/[A-Z]/.test(t)?/[a-z]/.test(t)?/[0-9]/.test(t)?a():a(new Error(this.$t("user.register.pwdNumber")||"At least one number")):a(new Error(this.$t("user.register.pwdLowercase")||"At least one lowercase letter")):a(new Error(this.$t("user.register.pwdUppercase")||"At least one uppercase letter")):a()},handleChangePassword:function(){var e=this;this.passwordForm.validateFields(function(){var t=(0,s.A)((0,o.A)().m(function t(r,i){var n,s,l,c,d;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(!r){t.n=1;break}return t.a(2);case 1:return e.changingPassword=!0,t.p=2,t.n=3,a.e(24).then(a.bind(a,20024));case 3:return n=t.v,s=n.changePassword,t.n=4,s({code:i.code,new_password:i.new_password});case 4:l=t.v,1===l.code?(e.$message.success(l.msg||"Password changed successfully"),e.passwordForm.resetFields()):e.$message.error(l.msg||"Change password failed"),t.n=6;break;case 5:t.p=5,d=t.v,e.$message.error((null===(c=d.response)||void 0===c||null===(c=c.data)||void 0===c?void 0:c.msg)||"Change password failed");case 6:return t.p=6,e.changingPassword=!1,t.f(6);case 7:return t.a(2)}},t,null,[[2,5,6,7]])}));return function(e,a){return t.apply(this,arguments)}}())},getRoleColor:function(e){var t={admin:"red",manager:"orange",user:"blue",viewer:"default"};return t[e]||"default"},getRoleLabel:function(e){var t={admin:this.$t("userManage.roleAdmin")||"Admin",manager:this.$t("userManage.roleManager")||"Manager",user:this.$t("userManage.roleUser")||"User",viewer:this.$t("userManage.roleViewer")||"Viewer"};return t[e]||e},formatTime:function(e){if(!e)return"";var t=new Date("number"===typeof e?1e3*e:e);return t.toLocaleString()},loadCreditsLog:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.creditsLogLoading=!0,t.p=1,t.n=2,(0,l.v9)({page:e.creditsLogPagination.current,page_size:e.creditsLogPagination.pageSize});case 2:a=t.v,1===a.code&&(e.creditsLog=a.data.items||[],e.creditsLogPagination.total=a.data.total||0),t.n=4;break;case 3:t.p=3,t.v,e.$message.error("Failed to load credits log");case 4:return t.p=4,e.creditsLogLoading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},handleCreditsLogChange:function(e){this.creditsLogPagination.current=e.current,this.loadCreditsLog()},loadReferrals:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.referralLoading=!0,t.p=1,t.n=2,(0,l.rx)({page:e.referralPagination.current,page_size:e.referralPagination.pageSize});case 2:a=t.v,1===a.code&&(e.referralData={list:a.data.list||[],total:a.data.total||0,referral_code:a.data.referral_code||"",referral_bonus:a.data.referral_bonus||0,register_bonus:a.data.register_bonus||0},e.referralPagination.total=a.data.total||0),t.n=4;break;case 3:t.p=3,t.v,e.$message.error("Failed to load referral data");case 4:return t.p=4,e.referralLoading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},handleReferralChange:function(e){this.referralPagination.current=e.current,this.loadReferrals()},copyReferralLink:function(){var e=this,t=this.referralLink;navigator.clipboard?navigator.clipboard.writeText(t).then(function(){e.$message.success(e.$t("profile.referral.linkCopied")||"邀请链接已复制")}).catch(function(){e.fallbackCopy(t)}):this.fallbackCopy(t)},fallbackCopy:function(e){var t=document.createElement("textarea");t.value=e,document.body.appendChild(t),t.select();try{document.execCommand("copy"),this.$message.success(this.$t("profile.referral.linkCopied")||"邀请链接已复制")}catch(a){this.$message.error("Copy failed")}document.body.removeChild(t)},getActionColor:function(e){var t={consume:"red",recharge:"green",admin_adjust:"blue",refund:"orange",vip_grant:"gold",vip_revoke:"default",register_bonus:"cyan",referral_bonus:"purple",indicator_purchase:"volcano",indicator_sale:"lime"};return t[e]||"default"},getActionLabel:function(e){var t={consume:this.$t("profile.creditsLog.actionConsume")||"消费",recharge:this.$t("profile.creditsLog.actionRecharge")||"充值",admin_adjust:this.$t("profile.creditsLog.actionAdjust")||"调整",refund:this.$t("profile.creditsLog.actionRefund")||"退款",vip_grant:this.$t("profile.creditsLog.actionVipGrant")||"VIP授予",vip_revoke:this.$t("profile.creditsLog.actionVipRevoke")||"VIP取消",register_bonus:this.$t("profile.creditsLog.actionRegisterBonus")||"注册奖励",referral_bonus:this.$t("profile.creditsLog.actionReferralBonus")||"邀请奖励",indicator_purchase:this.$t("profile.creditsLog.actionIndicatorPurchase")||"购买指标",indicator_sale:this.$t("profile.creditsLog.actionIndicatorSale")||"出售指标"};return t[e]||e},loadExchangeCredentials:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.exchangeLoading=!0,t.p=1,t.n=2,(0,d.IA)();case 2:a=t.v,1===a.code&&a.data&&(e.exchangeCredentials=a.data.items||[]),t.n=4;break;case 3:t.p=3,t.v,e.$message.error("Failed to load exchange accounts");case 4:return t.p=4,e.exchangeLoading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},handleExchangeTypeChange:function(e){this.selectedExchangeId=e,this.exchangeTestResult=null;var t=this.cryptoExchangeList.map(function(e){return e.id});t.includes(e)?this.addExchangeType="crypto":this.addExchangeType="ibkr"===e?"ibkr":"mt5"===e?"mt5":""},getExchangeDisplayName:function(e){var t={binance:"Binance",okx:"OKX",bitget:"Bitget",bybit:"Bybit",coinbaseexchange:"Coinbase",kraken:"Kraken",kucoin:"KuCoin",gate:"Gate.io",bitfinex:"Bitfinex",ibkr:"IBKR",mt5:"MetaTrader 5"};return t[e]||e},handleSaveExchange:function(){var e=this;this.exchangeForm.validateFields(function(){var t=(0,s.A)((0,o.A)().m(function t(a,r){var i,s,l;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(!a){t.n=1;break}return t.a(2);case 1:return e.savingExchange=!0,t.p=2,i=(0,n.A)({},r),t.n=3,(0,d.PR)(i);case 3:s=t.v,1===s.code?(e.$message.success(e.$t("profile.exchange.saveSuccess")),e.showAddExchangeModal=!1,e.exchangeForm.resetFields(),e.addExchangeType="",e.selectedExchangeId="",e.exchangeTestResult=null,e.loadExchangeCredentials()):e.$message.error(s.msg||e.$t("profile.exchange.saveFailed")),t.n=5;break;case 4:t.p=4,l=t.v,e.$message.error(l.message||e.$t("profile.exchange.saveFailed"));case 5:return t.p=5,e.savingExchange=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(e,a){return t.apply(this,arguments)}}())},handleDeleteCredential:function(e){var t=this;return(0,s.A)((0,o.A)().m(function a(){var r;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,d.kI)(e);case 1:r=a.v,1===r.code?(t.$message.success(t.$t("profile.exchange.deleteSuccess")),t.loadExchangeCredentials()):t.$message.error(r.msg||"Delete failed"),a.n=3;break;case 2:a.p=2,a.v,t.$message.error("Delete failed");case 3:return a.a(2)}},a,null,[[0,2]])}))()},handleTestExchangeConnection:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a,r,i,s,l;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(a=e.exchangeForm.getFieldsValue(),r=a.exchange_id,r){t.n=1;break}return t.a(2);case 1:return e.testingExchange=!0,e.exchangeTestResult=null,t.p=2,i=(0,n.A)({},a),t.n=3,(0,u.kv)(i);case 3:s=t.v,1===s.code?e.exchangeTestResult={success:!0,message:e.$t("profile.exchange.testSuccess")}:e.exchangeTestResult={success:!1,message:"".concat(e.$t("profile.exchange.testFailed"),": ").concat(s.msg||"Unknown error")},t.n=5;break;case 4:t.p=4,l=t.v,e.exchangeTestResult={success:!1,message:"".concat(e.$t("profile.exchange.testFailed"),": ").concat(l.message||"Network error")};case 5:return t.p=5,e.testingExchange=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}))()},loadNotificationSettings:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return t.p=0,t.n=1,(0,l.vF)();case 1:a=t.v,1===a.code&&a.data&&(e.notificationSettings={default_channels:a.data.default_channels||["browser"],telegram_bot_token:a.data.telegram_bot_token||"",telegram_chat_id:a.data.telegram_chat_id||"",email:a.data.email||e.profile.email||"",phone:a.data.phone||"",discord_webhook:a.data.discord_webhook||"",webhook_url:a.data.webhook_url||"",webhook_token:a.data.webhook_token||""},e.$nextTick(function(){e.notificationForm.setFieldsValue({default_channels:e.notificationSettings.default_channels,telegram_bot_token:e.notificationSettings.telegram_bot_token,telegram_chat_id:e.notificationSettings.telegram_chat_id,email:e.notificationSettings.email,phone:e.notificationSettings.phone,discord_webhook:e.notificationSettings.discord_webhook,webhook_url:e.notificationSettings.webhook_url,webhook_token:e.notificationSettings.webhook_token})})),t.n=3;break;case 2:t.p=2,t.v;case 3:return t.a(2)}},t,null,[[0,2]])}))()},handleSaveNotifications:function(){var e=this;this.notificationForm.validateFields(function(){var t=(0,s.A)((0,o.A)().m(function t(a,r){var i;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(!a){t.n=1;break}return t.a(2);case 1:return e.savingNotifications=!0,t.p=2,t.n=3,(0,l.Gl)({default_channels:r.default_channels||["browser"],telegram_bot_token:r.telegram_bot_token||"",telegram_chat_id:r.telegram_chat_id||"",email:r.email||"",phone:r.phone||"",discord_webhook:r.discord_webhook||"",webhook_url:r.webhook_url||"",webhook_token:r.webhook_token||""});case 3:i=t.v,1===i.code?(e.$message.success(e.$t("profile.notifications.saveSuccess")||"通知设置保存成功"),e.notificationSettings=i.data||e.notificationSettings):e.$message.error(i.msg||"保存失败"),t.n=5;break;case 4:t.p=4,t.v,e.$message.error("保存失败");case 5:return t.p=5,e.savingNotifications=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(e,a){return t.apply(this,arguments)}}())},handleTestNotification:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a,r,i;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(a=e.notificationForm.getFieldsValue(),r=a.default_channels||[],0!==r.length){t.n=1;break}return e.$message.warning(e.$t("profile.notifications.selectChannel")||"请至少选择一个通知渠道"),t.a(2);case 1:if(!r.includes("telegram")){t.n=3;break}if(a.telegram_bot_token){t.n=2;break}return e.$message.warning(e.$t("profile.notifications.fillTelegramToken")||"请填写 Telegram Bot Token"),t.a(2);case 2:if(a.telegram_chat_id){t.n=3;break}return e.$message.warning(e.$t("profile.notifications.fillTelegram")||"请填写 Telegram Chat ID"),t.a(2);case 3:if(!r.includes("email")||a.email){t.n=4;break}return e.$message.warning(e.$t("profile.notifications.fillEmail")||"请填写通知邮箱"),t.a(2);case 4:return e.testingNotification=!0,t.p=5,t.n=6,(0,l.Gl)({default_channels:r,telegram_bot_token:a.telegram_bot_token||"",telegram_chat_id:a.telegram_chat_id||"",email:a.email||"",phone:a.phone||"",discord_webhook:a.discord_webhook||"",webhook_url:a.webhook_url||"",webhook_token:a.webhook_token||""});case 6:if(i=t.v,1===i.code){t.n=7;break}return e.$message.error(i.msg||"保存设置失败"),t.a(2);case 7:e.$message.info(e.$t("profile.notifications.testSent")||"测试通知已发送,请检查您的通知渠道"),t.n=9;break;case 8:t.p=8,t.v,e.$message.error("发送测试通知失败");case 9:return t.p=9,e.testingNotification=!1,t.f(9);case 10:return t.a(2)}},t,null,[[5,8,9,10]])}))()}}},m=f,g=a(845),h=(0,g.A)(m,r,i,!1,null,"2b760d50",null),v=h.exports},72694:function(e,t,a){a.d(t,{IA:function(){return o},PR:function(){return s},kI:function(){return l}});var r=a(57888),i=a(76471),n={list:"/api/credentials/list",get:"/api/credentials/get",create:"/api/credentials/create",delete:"/api/credentials/delete"};function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,i.Ay)({url:n.list,method:"get",params:e})}function s(e){return(0,i.Ay)({url:n.create,method:"post",data:e})}function l(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(0,i.Ay)({url:n.delete,method:"delete",params:(0,r.A)({id:e},t)})}},39523:function(e,t,a){a.d(t,{DZ:function(){return o},YT:function(){return n},_d:function(){return s},lo:function(){return i}});a(57888);var r=a(76471);function i(){return(0,r.Ay)({url:"/api/settings/schema",method:"get"})}function n(){return(0,r.Ay)({url:"/api/settings/values",method:"get"})}function o(e){return(0,r.Ay)({url:"/api/settings/save",method:"post",data:e})}function s(){return(0,r.Ay)({url:"/api/settings/openrouter-balance",method:"get"})}},27617:function(e,t,a){a.d(t,{DK:function(){return _},E$:function(){return d},Gl:function(){return f},O0:function(){return c},TK:function(){return o},aU:function(){return i},cw:function(){return l},d$:function(){return b},hG:function(){return s},kg:function(){return n},nY:function(){return v},r7:function(){return u},rx:function(){return g},v9:function(){return m},vF:function(){return p},vi:function(){return w},wq:function(){return h}});var r=a(76471);function i(e){return(0,r.Ay)({url:"/api/users/list",method:"get",params:e})}function n(e){return(0,r.Ay)({url:"/api/users/create",method:"post",data:e})}function o(e,t){return(0,r.Ay)({url:"/api/users/update",method:"put",params:{id:e},data:t})}function s(e){return(0,r.Ay)({url:"/api/users/delete",method:"delete",params:{id:e}})}function l(e){return(0,r.Ay)({url:"/api/users/reset-password",method:"post",data:e})}function c(){return(0,r.Ay)({url:"/api/users/roles",method:"get"})}function d(){return(0,r.Ay)({url:"/api/users/profile",method:"get"})}function u(e){return(0,r.Ay)({url:"/api/users/profile/update",method:"put",data:e})}function p(){return(0,r.Ay)({url:"/api/users/notification-settings",method:"get"})}function f(e){return(0,r.Ay)({url:"/api/users/notification-settings",method:"put",data:e})}function m(e){return(0,r.Ay)({url:"/api/users/my-credits-log",method:"get",params:e})}function g(e){return(0,r.Ay)({url:"/api/users/my-referrals",method:"get",params:e})}function h(e){return(0,r.Ay)({url:"/api/users/set-credits",method:"post",data:e})}function v(e){return(0,r.Ay)({url:"/api/users/set-vip",method:"post",data:e})}function _(e){return(0,r.Ay)({url:"/api/users/system-strategies",method:"get",params:e})}function w(e){return(0,r.Ay)({url:"/api/users/admin-orders",method:"get",params:e})}function b(e){return(0,r.Ay)({url:"/api/users/admin-ai-stats",method:"get",params:e})}}}]); \ No newline at end of file +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[158],{32158:function(e,t,a){a.r(t),a.d(t,{default:function(){return v}});a(62010);var r=function(){var e=this,t=e._self._c;return t("div",{staticClass:"profile-page",class:{"theme-dark":e.isDarkTheme}},[t("div",{staticClass:"page-header"},[t("h2",{staticClass:"page-title"},[t("a-icon",{attrs:{type:"user"}}),t("span",[e._v(e._s(e.$t("profile.title")||"My Profile"))])],1),t("p",{staticClass:"page-desc"},[e._v(e._s(e.$t("profile.description")||"Manage your account settings and preferences"))])]),t("a-row",{staticClass:"profile-cards-row",attrs:{gutter:24}},[t("a-col",{staticClass:"profile-card-col",attrs:{xs:24,md:8}},[t("a-card",{staticClass:"profile-card",attrs:{bordered:!1}},[t("div",{staticClass:"avatar-section"},[t("a-avatar",{attrs:{size:100,src:e.profile.avatar||"/avatar2.jpg"}}),t("h3",{staticClass:"username"},[e._v(e._s(e.profile.nickname||e.profile.username))]),t("p",{staticClass:"user-role"},[t("a-tag",{attrs:{color:e.getRoleColor(e.profile.role)}},[e._v(" "+e._s(e.getRoleLabel(e.profile.role))+" ")]),e.isVip?t("a-tag",{attrs:{color:"gold"}},[t("a-icon",{attrs:{type:"crown"}}),e._v(" VIP ")],1):e._e()],1)],1),t("a-divider"),t("div",{staticClass:"profile-info"},[t("div",{staticClass:"info-item"},[t("a-icon",{attrs:{type:"user"}}),t("span",{staticClass:"label"},[e._v(e._s(e.$t("profile.username")||"Username")+":")]),t("span",{staticClass:"value"},[e._v(e._s(e.profile.username))])],1),t("div",{staticClass:"info-item"},[t("a-icon",{attrs:{type:"mail"}}),t("span",{staticClass:"label"},[e._v(e._s(e.$t("profile.email")||"Email")+":")]),t("span",{staticClass:"value"},[e._v(e._s(e.profile.email||"-"))])],1),t("div",{staticClass:"info-item"},[t("a-icon",{attrs:{type:"calendar"}}),t("span",{staticClass:"label"},[e._v(e._s(e.$t("profile.lastLogin")||"Last Login")+":")]),t("span",{staticClass:"value"},[e._v(e._s(e.formatTime(e.profile.last_login_at)||"-"))])],1)])],1)],1),t("a-col",{staticClass:"right-cards-col",attrs:{xs:24,md:16}},[t("a-row",{staticClass:"right-cards-row",attrs:{gutter:16}},[t("a-col",{attrs:{xs:24,md:12}},[t("a-card",{staticClass:"credits-card",attrs:{bordered:!1}},[t("div",{staticClass:"credits-header"},[t("h3",{staticClass:"credits-title"},[t("a-icon",{attrs:{type:"wallet"}}),e._v(" "+e._s(e.$t("profile.credits.title")||"我的积分")+" ")],1)]),t("div",{staticClass:"credits-body"},[t("div",{staticClass:"credits-amount"},[t("span",{staticClass:"amount-value"},[e._v(e._s(e.formatCredits(e.billing.credits)))]),t("span",{staticClass:"amount-label"},[e._v(e._s(e.$t("profile.credits.unit")||"积分"))])]),e.billing.vip_expires_at?t("div",{staticClass:"vip-status"},[t("a-icon",{style:{color:e.isVip?"#faad14":"#999"},attrs:{type:"crown"}}),e.isVip?t("span",{staticClass:"vip-active"},[e._v(" "+e._s(e.$t("profile.credits.vipExpires")||"VIP有效期至")+": "+e._s(e.formatDate(e.billing.vip_expires_at))+" ")]):t("span",{staticClass:"vip-expired"},[e._v(" "+e._s(e.$t("profile.credits.vipExpired")||"VIP已过期")+" ")])],1):e.billing.is_vip?e._e():t("div",{staticClass:"vip-status"},[t("span",{staticClass:"no-vip"},[e._v(e._s(e.$t("profile.credits.noVip")||"非VIP用户"))])])]),t("a-divider"),t("div",{staticClass:"credits-actions"},[t("a-button",{attrs:{type:"primary",icon:"shopping"},on:{click:e.handleRecharge}},[e._v(" "+e._s(e.$t("profile.credits.recharge")||"开通/充值")+" ")])],1),e.billing.billing_enabled?t("div",{staticClass:"credits-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.credits.hint")||"使用AI分析/回测/监控等功能会消耗积分;VIP仅可免费使用VIP免费指标。"))])],1):e._e()],1)],1),t("a-col",{attrs:{xs:24,md:12}},[t("a-card",{staticClass:"referral-card",attrs:{bordered:!1}},[t("div",{staticClass:"referral-header"},[t("h3",{staticClass:"referral-title"},[t("a-icon",{attrs:{type:"team"}}),e._v(" "+e._s(e.$t("profile.referral.title")||"邀请好友")+" ")],1)]),t("div",{staticClass:"referral-body"},[t("div",{staticClass:"referral-stats"},[t("div",{staticClass:"stat-item"},[t("span",{staticClass:"stat-value"},[e._v(e._s(e.referralData.total||0))]),t("span",{staticClass:"stat-label"},[e._v(e._s(e.$t("profile.referral.totalInvited")||"已邀请"))])]),e.referralData.referral_bonus>0?t("div",{staticClass:"stat-item"},[t("span",{staticClass:"stat-value"},[e._v("+"+e._s(e.referralData.referral_bonus))]),t("span",{staticClass:"stat-label"},[e._v(e._s(e.$t("profile.referral.bonusPerInvite")||"每邀请获得"))])]):e._e()]),t("a-divider",{staticStyle:{margin:"12px 0"}}),t("div",{staticClass:"referral-link-section"},[t("div",{staticClass:"link-label"},[e._v(e._s(e.$t("profile.referral.yourLink")||"您的邀请链接"))]),t("div",{staticClass:"link-box"},[t("a-input",{attrs:{value:e.referralLink,readonly:"",size:"small"}},[t("a-tooltip",{attrs:{slot:"suffix",title:e.$t("profile.referral.copyLink")||"复制链接"},slot:"suffix"},[t("a-icon",{staticStyle:{cursor:"pointer"},attrs:{type:"copy"},on:{click:e.copyReferralLink}})],1)],1)],1)]),e.referralData.register_bonus>0?t("div",{staticClass:"referral-hint"},[t("a-icon",{attrs:{type:"gift"}}),t("span",[e._v(e._s(e.$t("profile.referral.newUserBonus")||"新用户注册获得")+" "+e._s(e.referralData.register_bonus)+" "+e._s(e.$t("profile.credits.unit")||"积分"))])],1):e._e()],1)])],1)],1)],1)],1),t("a-row",{staticStyle:{"margin-top":"24px"},attrs:{gutter:24}},[t("a-col",{attrs:{xs:24}},[t("a-card",{staticClass:"edit-card",attrs:{bordered:!1}},[t("a-tabs",{model:{value:e.activeTab,callback:function(t){e.activeTab=t},expression:"activeTab"}},[t("a-tab-pane",{key:"basic",attrs:{tab:e.$t("profile.basicInfo")||"Basic Info"}},[t("a-form",{staticClass:"profile-form",attrs:{form:e.profileForm,layout:"vertical"}},[t("a-form-item",{attrs:{label:e.$t("profile.nickname")||"Nickname"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["nickname",{initialValue:e.profile.nickname}],expression:"['nickname', { initialValue: profile.nickname }]"}],attrs:{placeholder:e.$t("profile.nicknamePlaceholder")||"Enter your nickname"}},[t("a-icon",{attrs:{slot:"prefix",type:"smile"},slot:"prefix"})],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.email")||"Email"}},[t("a-input",{attrs:{value:e.profile.email||"-",disabled:""}},[t("a-icon",{attrs:{slot:"prefix",type:"mail"},slot:"prefix"}),t("a-tooltip",{attrs:{slot:"suffix",title:e.$t("profile.emailCannotChange")||"Email cannot be changed after registration"},slot:"suffix"},[t("a-icon",{staticStyle:{color:"rgba(0,0,0,.45)"},attrs:{type:"info-circle"}})],1)],1)],1),t("a-form-item",[t("a-button",{attrs:{type:"primary",loading:e.saving},on:{click:e.handleSaveProfile}},[t("a-icon",{attrs:{type:"save"}}),e._v(" "+e._s(e.$t("common.save")||"Save")+" ")],1)],1)],1)],1),t("a-tab-pane",{key:"password",attrs:{tab:e.$t("profile.changePassword")||"Change Password"}},[t("a-form",{staticClass:"password-form",attrs:{form:e.passwordForm,layout:"vertical"}},[t("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{message:e.$t("profile.passwordHintNew")||"For security, email verification is required to change password. Password must be at least 8 characters with uppercase, lowercase, and number.",type:"info",showIcon:""}}),t("a-form-item",{attrs:{label:e.$t("profile.verificationCode")||"Verification Code"}},[t("a-row",{attrs:{gutter:12}},[t("a-col",{attrs:{span:16}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["code",{rules:[{required:!0,message:e.$t("profile.codeRequired")||"Please enter verification code"}]}],expression:"['code', {\n rules: [{ required: true, message: $t('profile.codeRequired') || 'Please enter verification code' }]\n }]"}],attrs:{placeholder:e.$t("profile.codePlaceholder")||"Enter verification code"}},[t("a-icon",{attrs:{slot:"prefix",type:"safety-certificate"},slot:"prefix"})],1)],1),t("a-col",{attrs:{span:8}},[t("a-button",{attrs:{block:"",loading:e.sendingPwdCode,disabled:e.sendingPwdCode||e.pwdCodeCountdown>0||!e.profile.email},on:{click:e.handleSendPwdCode}},[e._v(" "+e._s(e.pwdCodeCountdown>0?"".concat(e.pwdCodeCountdown,"s"):e.$t("profile.sendCode")||"Send Code")+" ")])],1)],1),e.profile.email?t("div",{staticClass:"email-hint"},[e._v(" "+e._s(e.$t("profile.codeWillSendTo")||"Code will be sent to")+": "+e._s(e.profile.email)+" ")]):t("div",{staticClass:"email-hint email-warning"},[e._v(" "+e._s(e.$t("profile.noEmailWarning")||"Please set your email first in Basic Info tab")+" ")])],1),t("a-form-item",{attrs:{label:e.$t("profile.newPassword")||"New Password"}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["new_password",{rules:[{required:!0,message:e.$t("profile.newPasswordRequired")||"Please enter new password"},{validator:e.validateNewPassword}]}],expression:"['new_password', {\n rules: [\n { required: true, message: $t('profile.newPasswordRequired') || 'Please enter new password' },\n { validator: validateNewPassword }\n ]\n }]"}],attrs:{placeholder:e.$t("profile.newPasswordPlaceholder")||"Enter new password"}},[t("a-icon",{attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.confirmPassword")||"Confirm Password"}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["confirm_password",{rules:[{required:!0,message:e.$t("profile.confirmPasswordRequired")||"Please confirm password"},{validator:e.validateConfirmPassword}]}],expression:"['confirm_password', {\n rules: [\n { required: true, message: $t('profile.confirmPasswordRequired') || 'Please confirm password' },\n { validator: validateConfirmPassword }\n ]\n }]"}],attrs:{placeholder:e.$t("profile.confirmPasswordPlaceholder")||"Confirm new password"}},[t("a-icon",{attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),t("a-form-item",[t("a-button",{attrs:{type:"primary",loading:e.changingPassword,disabled:!e.profile.email},on:{click:e.handleChangePassword}},[t("a-icon",{attrs:{type:"key"}}),e._v(" "+e._s(e.$t("profile.changePassword")||"Change Password")+" ")],1)],1)],1)],1),t("a-tab-pane",{key:"credits",attrs:{tab:e.$t("profile.creditsLog")||"消费记录"}},[t("a-table",{attrs:{columns:e.creditsLogColumns,dataSource:e.creditsLog,loading:e.creditsLogLoading,pagination:e.creditsLogPagination,rowKey:function(e){return e.id},size:"small"},on:{change:e.handleCreditsLogChange},scopedSlots:e._u([{key:"action",fn:function(a){return[t("a-tag",{attrs:{color:e.getActionColor(a)}},[e._v(" "+e._s(e.getActionLabel(a))+" ")])]}},{key:"amount",fn:function(a){return[t("span",{class:a>=0?"amount-positive":"amount-negative"},[e._v(" "+e._s(a>=0?"+":"")+e._s(a)+" ")])]}},{key:"created_at",fn:function(t){return[e._v(" "+e._s(e.formatTime(t))+" ")]}}])})],1),t("a-tab-pane",{key:"notifications",attrs:{tab:e.$t("profile.notifications.title")||"通知设置"}},[t("div",{staticClass:"notification-settings-form"},[t("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{message:e.$t("profile.notifications.hint")||"配置您的默认通知方式,在创建资产监控和预警时将自动使用这些设置",type:"info",showIcon:""}}),t("a-form",{staticStyle:{"max-width":"600px"},attrs:{form:e.notificationForm,layout:"vertical"}},[t("a-form-item",{attrs:{label:e.$t("profile.notifications.defaultChannels")||"默认通知渠道"}},[t("a-checkbox-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["default_channels",{initialValue:e.notificationSettings.default_channels||["browser"]}],expression:"['default_channels', { initialValue: notificationSettings.default_channels || ['browser'] }]"}]},[t("a-row",{attrs:{gutter:16}},[t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"browser"}},[t("a-icon",{attrs:{type:"bell"}}),e._v(" "+e._s(e.$t("profile.notifications.browser")||"站内通知")+" ")],1)],1),t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"telegram"}},[t("a-icon",{attrs:{type:"send"}}),e._v(" Telegram ")],1)],1),t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"email"}},[t("a-icon",{attrs:{type:"mail"}}),e._v(" "+e._s(e.$t("profile.notifications.email")||"邮件")+" ")],1)],1)],1),t("a-row",{staticStyle:{"margin-top":"8px"},attrs:{gutter:16}},[t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"phone"}},[t("a-icon",{attrs:{type:"phone"}}),e._v(" "+e._s(e.$t("profile.notifications.phone")||"短信")+" ")],1)],1),t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"discord"}},[t("a-icon",{attrs:{type:"message"}}),e._v(" Discord ")],1)],1),t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"webhook"}},[t("a-icon",{attrs:{type:"api"}}),e._v(" Webhook ")],1)],1)],1)],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.telegramBotToken")||"Telegram Bot Token"}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["telegram_bot_token",{initialValue:e.notificationSettings.telegram_bot_token}],expression:"['telegram_bot_token', { initialValue: notificationSettings.telegram_bot_token }]"}],attrs:{placeholder:e.$t("profile.notifications.telegramBotTokenPlaceholder")||"请输入您的 Telegram Bot Token"}},[t("a-icon",{attrs:{slot:"prefix",type:"robot"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(" "+e._s(e.$t("profile.notifications.telegramBotTokenHint")||"通过 @BotFather 创建机器人获取 Token")+" "),t("a",{attrs:{href:"https://t.me/BotFather",target:"_blank",rel:"noopener noreferrer"}},[e._v("@BotFather")])])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.telegramChatId")||"Telegram Chat ID"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["telegram_chat_id",{initialValue:e.notificationSettings.telegram_chat_id}],expression:"['telegram_chat_id', { initialValue: notificationSettings.telegram_chat_id }]"}],attrs:{placeholder:e.$t("profile.notifications.telegramPlaceholder")||"请输入您的 Telegram Chat ID(如 123456789)"}},[t("a-icon",{attrs:{slot:"prefix",type:"message"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.telegramHint")||"发送 /start 给 @userinfobot 可获取您的 Chat ID"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.notifyEmail")||"通知邮箱"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["email",{initialValue:e.notificationSettings.email||e.profile.email}],expression:"['email', { initialValue: notificationSettings.email || profile.email }]"}],attrs:{placeholder:e.$t("profile.notifications.emailPlaceholder")||"接收通知的邮箱地址"}},[t("a-icon",{attrs:{slot:"prefix",type:"mail"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.emailHint")||"默认使用账户邮箱,可设置其他邮箱接收通知"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.phone")||"手机号(短信通知)"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["phone",{initialValue:e.notificationSettings.phone}],expression:"['phone', { initialValue: notificationSettings.phone }]"}],attrs:{placeholder:e.$t("profile.notifications.phonePlaceholder")||"请输入手机号(如 +8613800138000)"}},[t("a-icon",{attrs:{slot:"prefix",type:"phone"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.phoneHint")||"需要管理员配置 Twilio 服务后才能使用短信通知"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.discordWebhook")||"Discord Webhook"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["discord_webhook",{initialValue:e.notificationSettings.discord_webhook}],expression:"['discord_webhook', { initialValue: notificationSettings.discord_webhook }]"}],attrs:{placeholder:e.$t("profile.notifications.discordPlaceholder")||"https://discord.com/api/webhooks/..."}},[t("a-icon",{attrs:{slot:"prefix",type:"message"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.discordHint")||"在 Discord 服务器设置中创建 Webhook"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.webhookUrl")||"Webhook URL"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["webhook_url",{initialValue:e.notificationSettings.webhook_url}],expression:"['webhook_url', { initialValue: notificationSettings.webhook_url }]"}],attrs:{placeholder:e.$t("profile.notifications.webhookPlaceholder")||"https://your-server.com/webhook"}},[t("a-icon",{attrs:{slot:"prefix",type:"api"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.webhookHint")||"自定义 Webhook 地址,将以 POST JSON 方式推送通知"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.webhookToken")||"Webhook Token(可选)"}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["webhook_token",{initialValue:e.notificationSettings.webhook_token}],expression:"['webhook_token', { initialValue: notificationSettings.webhook_token }]"}],attrs:{placeholder:e.$t("profile.notifications.webhookTokenPlaceholder")||"用于验证请求的 Bearer Token"}},[t("a-icon",{attrs:{slot:"prefix",type:"key"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.webhookTokenHint")||"将作为 Authorization: Bearer Token 发送到 Webhook"))])],1)],1),t("a-form-item",[t("a-button",{attrs:{type:"primary",loading:e.savingNotifications},on:{click:e.handleSaveNotifications}},[t("a-icon",{attrs:{type:"save"}}),e._v(" "+e._s(e.$t("common.save")||"保存")+" ")],1),t("a-button",{staticStyle:{"margin-left":"12px"},attrs:{loading:e.testingNotification},on:{click:e.handleTestNotification}},[t("a-icon",{attrs:{type:"experiment"}}),e._v(" "+e._s(e.$t("profile.notifications.testBtn")||"发送测试通知")+" ")],1)],1)],1)],1)]),t("a-tab-pane",{key:"exchange",attrs:{tab:e.$t("profile.exchange.title")||"交易所配置"}},[t("div",{staticClass:"exchange-config-section"},[t("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{message:e.$t("profile.exchange.hint"),type:"info",showIcon:""}}),t("div",{staticStyle:{"margin-bottom":"16px","text-align":"right"}},[t("a-button",{attrs:{type:"primary",icon:"plus"},on:{click:function(t){e.showAddExchangeModal=!0}}},[e._v(" "+e._s(e.$t("profile.exchange.addAccount"))+" ")])],1),t("a-table",{attrs:{columns:e.exchangeColumns,dataSource:e.exchangeCredentials,loading:e.exchangeLoading,rowKey:function(e){return e.id},size:"small"},scopedSlots:e._u([{key:"exchange_id",fn:function(a){return[t("span",{staticStyle:{"text-transform":"capitalize","font-weight":"500"}},[e._v(e._s(e.getExchangeDisplayName(a)))])]}},{key:"api_key_hint",fn:function(a,r){return[t("span",{staticClass:"credential-hint"},[e._v(e._s(a||r.name||"-"))])]}},{key:"created_at",fn:function(t){return[e._v(" "+e._s(e.formatTime(t))+" ")]}},{key:"action",fn:function(a,r){return[t("a-popconfirm",{attrs:{title:e.$t("profile.exchange.deleteConfirm"),okText:e.$t("common.confirm"),cancelText:e.$t("common.cancel")},on:{confirm:function(t){return e.handleDeleteCredential(r.id)}}},[t("a-button",{attrs:{type:"danger",size:"small",ghost:"",icon:"delete"}},[e._v(" "+e._s(e.$t("common.delete"))+" ")])],1)]}}])}),e.exchangeLoading||0!==e.exchangeCredentials.length?e._e():t("a-empty",{staticStyle:{"margin-top":"20px"}},[t("span",{attrs:{slot:"description"},slot:"description"},[e._v(e._s(e.$t("profile.exchange.noAccounts")))])])],1)]),t("a-tab-pane",{key:"referrals",attrs:{tab:e.$t("profile.referral.listTab")||"邀请列表"}},[t("a-table",{attrs:{columns:e.referralColumns,dataSource:e.referralData.list||[],loading:e.referralLoading,pagination:e.referralPagination,rowKey:function(e){return e.id},size:"small"},on:{change:e.handleReferralChange},scopedSlots:e._u([{key:"user",fn:function(a,r){return[t("div",{staticClass:"referral-user-cell"},[t("a-avatar",{attrs:{size:32,src:r.avatar||"/avatar2.jpg"}}),t("div",{staticClass:"user-info"},[t("span",{staticClass:"nickname"},[e._v(e._s(r.nickname||r.username))]),t("span",{staticClass:"username"},[e._v("@"+e._s(r.username))])])],1)]}},{key:"created_at",fn:function(t){return[e._v(" "+e._s(e.formatTime(t))+" ")]}}])}),e.referralLoading||e.referralData.list&&0!==e.referralData.list.length?e._e():t("a-empty",[t("span",{attrs:{slot:"description"},slot:"description"},[e._v(e._s(e.$t("profile.referral.noReferrals")||"暂无邀请记录"))]),t("a-button",{attrs:{type:"primary"},on:{click:e.copyReferralLink}},[e._v(" "+e._s(e.$t("profile.referral.shareNow")||"立即分享邀请")+" ")])],1)],1)],1)],1)],1)],1),t("a-modal",{attrs:{title:e.$t("profile.exchange.addTitle"),visible:e.showAddExchangeModal,confirmLoading:e.savingExchange,okText:e.$t("common.save"),cancelText:e.$t("common.cancel"),maskClosable:!1,width:"520px"},on:{ok:e.handleSaveExchange,cancel:function(t){e.showAddExchangeModal=!1}}},[t("a-form",{attrs:{form:e.exchangeForm,layout:"vertical"}},[t("a-form-item",{attrs:{label:e.$t("profile.exchange.selectExchange")}},[t("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["exchange_id",{rules:[{required:!0,message:e.$t("profile.exchange.selectExchange")}]}],expression:"['exchange_id', { rules: [{ required: true, message: $t('profile.exchange.selectExchange') }] }]"}],attrs:{placeholder:e.$t("profile.exchange.selectExchange")},on:{change:e.handleExchangeTypeChange}},[t("a-select-opt-group",{attrs:{label:e.$t("profile.exchange.typeCrypto")}},e._l(e.cryptoExchangeList,function(a){return t("a-select-option",{key:a.id,attrs:{value:a.id}},[e._v(" "+e._s(a.name)+" ")])}),1),t("a-select-opt-group",{attrs:{label:e.$t("profile.exchange.typeIBKR")}},[t("a-select-option",{attrs:{value:"ibkr"}},[e._v("Interactive Brokers (IBKR)")])],1),t("a-select-opt-group",{attrs:{label:e.$t("profile.exchange.typeMT5")}},[t("a-select-option",{attrs:{value:"mt5"}},[e._v("MetaTrader 5")])],1)],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.accountName")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["name"],expression:"['name']"}],attrs:{placeholder:e.$t("profile.exchange.accountNamePlaceholder")}})],1),"crypto"===e.addExchangeType?[t("a-form-item",{attrs:{label:e.$t("profile.exchange.apiKey")}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["api_key",{rules:[{required:!0,message:"API Key is required"}]}],expression:"['api_key', { rules: [{ required: true, message: 'API Key is required' }] }]"}],attrs:{placeholder:"API Key",autocomplete:"new-password"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.secretKey")}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["secret_key",{rules:[{required:!0,message:"Secret Key is required"}]}],expression:"['secret_key', { rules: [{ required: true, message: 'Secret Key is required' }] }]"}],attrs:{placeholder:"Secret Key",autocomplete:"new-password"}})],1),e.addExchangeNeedsPassphrase?t("a-form-item",{attrs:{label:e.$t("profile.exchange.passphrase")}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["passphrase"],expression:"['passphrase']"}],attrs:{placeholder:"Passphrase",autocomplete:"new-password"}})],1):e._e(),e.addExchangeShowDemo?t("a-form-item",[t("a-checkbox",{directives:[{name:"decorator",rawName:"v-decorator",value:["enable_demo_trading",{valuePropName:"checked",initialValue:!1}],expression:"['enable_demo_trading', { valuePropName: 'checked', initialValue: false }]"}]},[e._v(" "+e._s(e.$t("profile.exchange.demoTrading"))+" ")])],1):e._e()]:e._e(),"ibkr"===e.addExchangeType?[t("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"warning",showIcon:"",message:e.$t("profile.exchange.localDeploymentRequired"),description:e.$t("profile.exchange.localDeploymentHint")}}),t("a-form-item",{attrs:{label:e.$t("profile.exchange.ibkrHost")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["ibkr_host",{initialValue:"127.0.0.1"}],expression:"['ibkr_host', { initialValue: '127.0.0.1' }]"}],attrs:{placeholder:"127.0.0.1"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.ibkrPort")}},[t("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["ibkr_port",{initialValue:7497}],expression:"['ibkr_port', { initialValue: 7497 }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:65535}}),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.exchange.ibkrPortHint")))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.ibkrClientId")}},[t("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["ibkr_client_id",{initialValue:1}],expression:"['ibkr_client_id', { initialValue: 1 }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:999}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.ibkrAccount")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["ibkr_account"],expression:"['ibkr_account']"}],attrs:{placeholder:"DU123456"}})],1)]:e._e(),"mt5"===e.addExchangeType?[t("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"warning",showIcon:"",message:e.$t("profile.exchange.localDeploymentRequired"),description:e.$t("profile.exchange.localDeploymentHint")}}),t("a-form-item",{attrs:{label:e.$t("profile.exchange.mt5Server")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["mt5_server",{rules:[{required:!0,message:"Server is required"}]}],expression:"['mt5_server', { rules: [{ required: true, message: 'Server is required' }] }]"}],attrs:{placeholder:"MetaQuotes-Demo"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.mt5Login")}},[t("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["mt5_login",{rules:[{required:!0,message:"Login is required"}]}],expression:"['mt5_login', { rules: [{ required: true, message: 'Login is required' }] }]"}],staticStyle:{width:"100%"},attrs:{min:1,placeholder:"12345678"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.mt5Password")}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["mt5_password",{rules:[{required:!0,message:"Password is required"}]}],expression:"['mt5_password', { rules: [{ required: true, message: 'Password is required' }] }]"}],attrs:{placeholder:"Password",autocomplete:"new-password"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.mt5TerminalPath")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["mt5_terminal_path"],expression:"['mt5_terminal_path']"}],attrs:{placeholder:"C:\\Program Files\\MetaTrader 5\\terminal64.exe"}}),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.exchange.mt5TerminalPathHint")))])],1)],1)]:e._e(),e.addExchangeType?t("a-form-item",[t("a-button",{attrs:{block:"",loading:e.testingExchange},on:{click:e.handleTestExchangeConnection}},[t("a-icon",{attrs:{type:"api"}}),e._v(" "+e._s(e.$t("profile.exchange.testConnection"))+" ")],1),e.exchangeTestResult?t("div",{staticClass:"test-result-msg",class:e.exchangeTestResult.success?"success":"error"},[t("a-icon",{attrs:{type:e.exchangeTestResult.success?"check-circle":"close-circle"}}),e._v(" "+e._s(e.exchangeTestResult.message)+" ")],1):e._e()],1):e._e()],2)],1)],1)},i=[],n=a(76338),o=a(81127),s=a(56252),l=(a(28706),a(74423),a(62062),a(2892),a(26099),a(27495),a(21699),a(47764),a(62953),a(84841)),c=a(53003),d=a(42430),u=a(36911),p=a(55434),f={name:"Profile",mixins:[p.t],data:function(){return{loading:!1,saving:!1,changingPassword:!1,sendingPwdCode:!1,pwdCodeCountdown:0,pwdCodeTimer:null,activeTab:"basic",profile:{id:null,username:"",nickname:"",email:"",avatar:"",role:"user",last_login_at:null},creditsLog:[],creditsLogLoading:!1,creditsLogPagination:{current:1,pageSize:10,total:0},referralData:{list:[],total:0,referral_code:"",referral_bonus:0,register_bonus:0},referralLoading:!1,referralPagination:{current:1,pageSize:10,total:0},billing:{credits:0,is_vip:!1,vip_expires_at:null,billing_enabled:!1,feature_costs:{}},rechargeTelegramUrl:"https://t.me/your_support_bot",notificationSettings:{default_channels:["browser"],telegram_bot_token:"",telegram_chat_id:"",email:"",phone:"",discord_webhook:"",webhook_url:"",webhook_token:""},savingNotifications:!1,testingNotification:!1,exchangeCredentials:[],exchangeLoading:!1,showAddExchangeModal:!1,savingExchange:!1,testingExchange:!1,exchangeTestResult:null,addExchangeType:"",selectedExchangeId:"",cryptoExchangeList:[{id:"binance",name:"Binance"},{id:"okx",name:"OKX"},{id:"bitget",name:"Bitget"},{id:"bybit",name:"Bybit"},{id:"coinbaseexchange",name:"Coinbase"},{id:"kraken",name:"Kraken"},{id:"kucoin",name:"KuCoin"},{id:"gate",name:"Gate.io"},{id:"bitfinex",name:"Bitfinex"}]}},computed:{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},isVip:function(){if(!this.billing.vip_expires_at)return!1;var e=new Date(this.billing.vip_expires_at);return e>new Date},creditsLogColumns:function(){return[{title:this.$t("profile.creditsLog.time")||"时间",dataIndex:"created_at",width:160,scopedSlots:{customRender:"created_at"}},{title:this.$t("profile.creditsLog.action")||"类型",dataIndex:"action",width:100,scopedSlots:{customRender:"action"}},{title:this.$t("profile.creditsLog.amount")||"变动",dataIndex:"amount",width:100,scopedSlots:{customRender:"amount"}},{title:this.$t("profile.creditsLog.balance")||"余额",dataIndex:"balance_after",width:100},{title:this.$t("profile.creditsLog.remark")||"备注",dataIndex:"remark",ellipsis:!0}]},referralColumns:function(){return[{title:this.$t("profile.referral.user")||"用户",dataIndex:"username",scopedSlots:{customRender:"user"}},{title:this.$t("profile.referral.registerTime")||"注册时间",dataIndex:"created_at",width:180,scopedSlots:{customRender:"created_at"}}]},referralLink:function(){var e=window.location.origin+window.location.pathname,t=this.referralData.referral_code||this.profile.id;return"".concat(e,"#/user/login?ref=").concat(t)},exchangeColumns:function(){return[{title:this.$t("profile.exchange.colExchange")||"Exchange",dataIndex:"exchange_id",width:140,scopedSlots:{customRender:"exchange_id"}},{title:this.$t("profile.exchange.colName")||"Name",dataIndex:"name",width:140,customRender:function(e){return e||"-"}},{title:this.$t("profile.exchange.colHint")||"Connection Info",dataIndex:"api_key_hint",scopedSlots:{customRender:"api_key_hint"}},{title:this.$t("profile.exchange.colCreatedAt")||"Created At",dataIndex:"created_at",width:180,scopedSlots:{customRender:"created_at"}},{title:this.$t("profile.exchange.colActions")||"Actions",width:120,scopedSlots:{customRender:"action"}}]},addExchangeNeedsPassphrase:function(){var e=["okx","bitget","kucoin"];return e.includes(this.selectedExchangeId)},addExchangeShowDemo:function(){return"binance"===this.selectedExchangeId}},watch:{activeTab:function(e){"credits"===e&&0===this.creditsLog.length&&this.loadCreditsLog(),"referrals"!==e||this.referralData.list&&0!==this.referralData.list.length||this.loadReferrals(),"notifications"!==e||this.notificationSettings.telegram_chat_id||this.notificationSettings.discord_webhook||this.loadNotificationSettings(),"exchange"===e&&0===this.exchangeCredentials.length&&this.loadExchangeCredentials()}},beforeCreate:function(){this.profileForm=this.$form.createForm(this,{name:"profile"}),this.passwordForm=this.$form.createForm(this,{name:"password"}),this.notificationForm=this.$form.createForm(this,{name:"notification"}),this.exchangeForm=this.$form.createForm(this,{name:"exchange"})},mounted:function(){this.loadProfile(),this.loadReferrals()},beforeDestroy:function(){this.pwdCodeTimer&&clearInterval(this.pwdCodeTimer)},methods:{loadProfile:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.loading=!0,t.p=1,t.n=2,(0,l.E$)();case 2:a=t.v,1===a.code?(e.profile=a.data,a.data.billing&&(e.billing=a.data.billing),a.data.notification_settings&&(e.notificationSettings={default_channels:a.data.notification_settings.default_channels||["browser"],telegram_bot_token:a.data.notification_settings.telegram_bot_token||"",telegram_chat_id:a.data.notification_settings.telegram_chat_id||"",email:a.data.notification_settings.email||a.data.email||"",phone:a.data.notification_settings.phone||"",discord_webhook:a.data.notification_settings.discord_webhook||"",webhook_url:a.data.notification_settings.webhook_url||"",webhook_token:a.data.notification_settings.webhook_token||""}),e.$nextTick(function(){e.profileForm.setFieldsValue({nickname:e.profile.nickname,email:e.profile.email})})):e.$message.error(a.msg||"Failed to load profile"),t.n=4;break;case 3:t.p=3,t.v,e.$message.error("Failed to load profile");case 4:return t.p=4,e.loading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},loadRechargeUrl:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if("admin"!==e.profile.role){t.n=4;break}return t.p=1,t.n=2,(0,c.YT)();case 2:a=t.v,1===a.code&&a.data&&a.data.billing&&(e.rechargeTelegramUrl=a.data.billing.RECHARGE_TELEGRAM_URL||e.rechargeTelegramUrl),t.n=4;break;case 3:t.p=3,t.v;case 4:return t.a(2)}},t,null,[[1,3]])}))()},handleRecharge:function(){this.$router.push("/billing")},formatCredits:function(e){return e||0===e?Number(e).toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:2}):"0"},formatDate:function(e){if(!e)return"";var t=new Date(e);return t.toLocaleDateString()},handleSaveProfile:function(){var e=this;this.profileForm.validateFields(function(){var t=(0,s.A)((0,o.A)().m(function t(a,r){var i;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(!a){t.n=1;break}return t.a(2);case 1:return e.saving=!0,t.p=2,t.n=3,(0,l.r7)(r);case 3:i=t.v,1===i.code?(e.$message.success(i.msg||"Profile updated successfully"),e.loadProfile()):e.$message.error(i.msg||"Update failed"),t.n=5;break;case 4:t.p=4,t.v,e.$message.error("Update failed");case 5:return t.p=5,e.saving=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(e,a){return t.apply(this,arguments)}}())},validateConfirmPassword:function(e,t,a){var r=this.passwordForm.getFieldValue("new_password");t&&t!==r?a(this.$t("profile.passwordMismatch")||"Passwords do not match"):a()},handleSendPwdCode:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var r,i,n,s,l;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e.profile.email){t.n=1;break}return e.$message.error(e.$t("profile.noEmailWarning")||"Please set your email first"),t.a(2);case 1:return e.sendingPwdCode=!0,t.p=2,t.n=3,a.e(824).then(a.bind(a,95824));case 3:return r=t.v,i=r.sendVerificationCode,t.n=4,i({email:e.profile.email,type:"change_password"});case 4:n=t.v,1===n.code?(e.$message.success(e.$t("profile.codeSent")||"Verification code sent"),e.startPwdCodeCountdown()):e.$message.error(n.msg||"Failed to send code"),t.n=6;break;case 5:t.p=5,l=t.v,e.$message.error((null===(s=l.response)||void 0===s||null===(s=s.data)||void 0===s?void 0:s.msg)||"Failed to send code");case 6:return t.p=6,e.sendingPwdCode=!1,t.f(6);case 7:return t.a(2)}},t,null,[[2,5,6,7]])}))()},startPwdCodeCountdown:function(){var e=this;this.pwdCodeCountdown=60,this.pwdCodeTimer=setInterval(function(){e.pwdCodeCountdown--,e.pwdCodeCountdown<=0&&(clearInterval(e.pwdCodeTimer),e.pwdCodeTimer=null)},1e3)},validateNewPassword:function(e,t,a){t?t.length<8?a(new Error(this.$t("user.register.pwdMinLength")||"At least 8 characters")):/[A-Z]/.test(t)?/[a-z]/.test(t)?/[0-9]/.test(t)?a():a(new Error(this.$t("user.register.pwdNumber")||"At least one number")):a(new Error(this.$t("user.register.pwdLowercase")||"At least one lowercase letter")):a(new Error(this.$t("user.register.pwdUppercase")||"At least one uppercase letter")):a()},handleChangePassword:function(){var e=this;this.passwordForm.validateFields(function(){var t=(0,s.A)((0,o.A)().m(function t(r,i){var n,s,l,c,d;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(!r){t.n=1;break}return t.a(2);case 1:return e.changingPassword=!0,t.p=2,t.n=3,a.e(824).then(a.bind(a,95824));case 3:return n=t.v,s=n.changePassword,t.n=4,s({code:i.code,new_password:i.new_password});case 4:l=t.v,1===l.code?(e.$message.success(l.msg||"Password changed successfully"),e.passwordForm.resetFields()):e.$message.error(l.msg||"Change password failed"),t.n=6;break;case 5:t.p=5,d=t.v,e.$message.error((null===(c=d.response)||void 0===c||null===(c=c.data)||void 0===c?void 0:c.msg)||"Change password failed");case 6:return t.p=6,e.changingPassword=!1,t.f(6);case 7:return t.a(2)}},t,null,[[2,5,6,7]])}));return function(e,a){return t.apply(this,arguments)}}())},getRoleColor:function(e){var t={admin:"red",manager:"orange",user:"blue",viewer:"default"};return t[e]||"default"},getRoleLabel:function(e){var t={admin:this.$t("userManage.roleAdmin")||"Admin",manager:this.$t("userManage.roleManager")||"Manager",user:this.$t("userManage.roleUser")||"User",viewer:this.$t("userManage.roleViewer")||"Viewer"};return t[e]||e},formatTime:function(e){if(!e)return"";var t=new Date("number"===typeof e?1e3*e:e);return t.toLocaleString()},loadCreditsLog:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.creditsLogLoading=!0,t.p=1,t.n=2,(0,l.v9)({page:e.creditsLogPagination.current,page_size:e.creditsLogPagination.pageSize});case 2:a=t.v,1===a.code&&(e.creditsLog=a.data.items||[],e.creditsLogPagination.total=a.data.total||0),t.n=4;break;case 3:t.p=3,t.v,e.$message.error("Failed to load credits log");case 4:return t.p=4,e.creditsLogLoading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},handleCreditsLogChange:function(e){this.creditsLogPagination.current=e.current,this.loadCreditsLog()},loadReferrals:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.referralLoading=!0,t.p=1,t.n=2,(0,l.rx)({page:e.referralPagination.current,page_size:e.referralPagination.pageSize});case 2:a=t.v,1===a.code&&(e.referralData={list:a.data.list||[],total:a.data.total||0,referral_code:a.data.referral_code||"",referral_bonus:a.data.referral_bonus||0,register_bonus:a.data.register_bonus||0},e.referralPagination.total=a.data.total||0),t.n=4;break;case 3:t.p=3,t.v,e.$message.error("Failed to load referral data");case 4:return t.p=4,e.referralLoading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},handleReferralChange:function(e){this.referralPagination.current=e.current,this.loadReferrals()},copyReferralLink:function(){var e=this,t=this.referralLink;navigator.clipboard?navigator.clipboard.writeText(t).then(function(){e.$message.success(e.$t("profile.referral.linkCopied")||"邀请链接已复制")}).catch(function(){e.fallbackCopy(t)}):this.fallbackCopy(t)},fallbackCopy:function(e){var t=document.createElement("textarea");t.value=e,document.body.appendChild(t),t.select();try{document.execCommand("copy"),this.$message.success(this.$t("profile.referral.linkCopied")||"邀请链接已复制")}catch(a){this.$message.error("Copy failed")}document.body.removeChild(t)},getActionColor:function(e){var t={consume:"red",recharge:"green",admin_adjust:"blue",refund:"orange",vip_grant:"gold",vip_revoke:"default",register_bonus:"cyan",referral_bonus:"purple",indicator_purchase:"volcano",indicator_sale:"lime"};return t[e]||"default"},getActionLabel:function(e){var t={consume:this.$t("profile.creditsLog.actionConsume")||"消费",recharge:this.$t("profile.creditsLog.actionRecharge")||"充值",admin_adjust:this.$t("profile.creditsLog.actionAdjust")||"调整",refund:this.$t("profile.creditsLog.actionRefund")||"退款",vip_grant:this.$t("profile.creditsLog.actionVipGrant")||"VIP授予",vip_revoke:this.$t("profile.creditsLog.actionVipRevoke")||"VIP取消",register_bonus:this.$t("profile.creditsLog.actionRegisterBonus")||"注册奖励",referral_bonus:this.$t("profile.creditsLog.actionReferralBonus")||"邀请奖励",indicator_purchase:this.$t("profile.creditsLog.actionIndicatorPurchase")||"购买指标",indicator_sale:this.$t("profile.creditsLog.actionIndicatorSale")||"出售指标"};return t[e]||e},loadExchangeCredentials:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.exchangeLoading=!0,t.p=1,t.n=2,(0,d.IA)();case 2:a=t.v,1===a.code&&a.data&&(e.exchangeCredentials=a.data.items||[]),t.n=4;break;case 3:t.p=3,t.v,e.$message.error("Failed to load exchange accounts");case 4:return t.p=4,e.exchangeLoading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},handleExchangeTypeChange:function(e){this.selectedExchangeId=e,this.exchangeTestResult=null;var t=this.cryptoExchangeList.map(function(e){return e.id});t.includes(e)?this.addExchangeType="crypto":this.addExchangeType="ibkr"===e?"ibkr":"mt5"===e?"mt5":""},getExchangeDisplayName:function(e){var t={binance:"Binance",okx:"OKX",bitget:"Bitget",bybit:"Bybit",coinbaseexchange:"Coinbase",kraken:"Kraken",kucoin:"KuCoin",gate:"Gate.io",bitfinex:"Bitfinex",ibkr:"IBKR",mt5:"MetaTrader 5"};return t[e]||e},handleSaveExchange:function(){var e=this;this.exchangeForm.validateFields(function(){var t=(0,s.A)((0,o.A)().m(function t(a,r){var i,s,l;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(!a){t.n=1;break}return t.a(2);case 1:return e.savingExchange=!0,t.p=2,i=(0,n.A)({},r),t.n=3,(0,d.PR)(i);case 3:s=t.v,1===s.code?(e.$message.success(e.$t("profile.exchange.saveSuccess")),e.showAddExchangeModal=!1,e.exchangeForm.resetFields(),e.addExchangeType="",e.selectedExchangeId="",e.exchangeTestResult=null,e.loadExchangeCredentials()):e.$message.error(s.msg||e.$t("profile.exchange.saveFailed")),t.n=5;break;case 4:t.p=4,l=t.v,e.$message.error(l.message||e.$t("profile.exchange.saveFailed"));case 5:return t.p=5,e.savingExchange=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(e,a){return t.apply(this,arguments)}}())},handleDeleteCredential:function(e){var t=this;return(0,s.A)((0,o.A)().m(function a(){var r;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,d.kI)(e);case 1:r=a.v,1===r.code?(t.$message.success(t.$t("profile.exchange.deleteSuccess")),t.loadExchangeCredentials()):t.$message.error(r.msg||"Delete failed"),a.n=3;break;case 2:a.p=2,a.v,t.$message.error("Delete failed");case 3:return a.a(2)}},a,null,[[0,2]])}))()},handleTestExchangeConnection:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a,r,i,s,l;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(a=e.exchangeForm.getFieldsValue(),r=a.exchange_id,r){t.n=1;break}return t.a(2);case 1:return e.testingExchange=!0,e.exchangeTestResult=null,t.p=2,i=(0,n.A)({},a),t.n=3,(0,u.kv)(i);case 3:s=t.v,1===s.code?e.exchangeTestResult={success:!0,message:e.$t("profile.exchange.testSuccess")}:e.exchangeTestResult={success:!1,message:"".concat(e.$t("profile.exchange.testFailed"),": ").concat(s.msg||"Unknown error")},t.n=5;break;case 4:t.p=4,l=t.v,e.exchangeTestResult={success:!1,message:"".concat(e.$t("profile.exchange.testFailed"),": ").concat(l.message||"Network error")};case 5:return t.p=5,e.testingExchange=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}))()},loadNotificationSettings:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return t.p=0,t.n=1,(0,l.vF)();case 1:a=t.v,1===a.code&&a.data&&(e.notificationSettings={default_channels:a.data.default_channels||["browser"],telegram_bot_token:a.data.telegram_bot_token||"",telegram_chat_id:a.data.telegram_chat_id||"",email:a.data.email||e.profile.email||"",phone:a.data.phone||"",discord_webhook:a.data.discord_webhook||"",webhook_url:a.data.webhook_url||"",webhook_token:a.data.webhook_token||""},e.$nextTick(function(){e.notificationForm.setFieldsValue({default_channels:e.notificationSettings.default_channels,telegram_bot_token:e.notificationSettings.telegram_bot_token,telegram_chat_id:e.notificationSettings.telegram_chat_id,email:e.notificationSettings.email,phone:e.notificationSettings.phone,discord_webhook:e.notificationSettings.discord_webhook,webhook_url:e.notificationSettings.webhook_url,webhook_token:e.notificationSettings.webhook_token})})),t.n=3;break;case 2:t.p=2,t.v;case 3:return t.a(2)}},t,null,[[0,2]])}))()},handleSaveNotifications:function(){var e=this;this.notificationForm.validateFields(function(){var t=(0,s.A)((0,o.A)().m(function t(a,r){var i;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(!a){t.n=1;break}return t.a(2);case 1:return e.savingNotifications=!0,t.p=2,t.n=3,(0,l.Gl)({default_channels:r.default_channels||["browser"],telegram_bot_token:r.telegram_bot_token||"",telegram_chat_id:r.telegram_chat_id||"",email:r.email||"",phone:r.phone||"",discord_webhook:r.discord_webhook||"",webhook_url:r.webhook_url||"",webhook_token:r.webhook_token||""});case 3:i=t.v,1===i.code?(e.$message.success(e.$t("profile.notifications.saveSuccess")||"通知设置保存成功"),e.notificationSettings=i.data||e.notificationSettings):e.$message.error(i.msg||"保存失败"),t.n=5;break;case 4:t.p=4,t.v,e.$message.error("保存失败");case 5:return t.p=5,e.savingNotifications=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(e,a){return t.apply(this,arguments)}}())},handleTestNotification:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a,r,i;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(a=e.notificationForm.getFieldsValue(),r=a.default_channels||[],0!==r.length){t.n=1;break}return e.$message.warning(e.$t("profile.notifications.selectChannel")||"请至少选择一个通知渠道"),t.a(2);case 1:if(!r.includes("telegram")){t.n=3;break}if(a.telegram_bot_token){t.n=2;break}return e.$message.warning(e.$t("profile.notifications.fillTelegramToken")||"请填写 Telegram Bot Token"),t.a(2);case 2:if(a.telegram_chat_id){t.n=3;break}return e.$message.warning(e.$t("profile.notifications.fillTelegram")||"请填写 Telegram Chat ID"),t.a(2);case 3:if(!r.includes("email")||a.email){t.n=4;break}return e.$message.warning(e.$t("profile.notifications.fillEmail")||"请填写通知邮箱"),t.a(2);case 4:return e.testingNotification=!0,t.p=5,t.n=6,(0,l.Gl)({default_channels:r,telegram_bot_token:a.telegram_bot_token||"",telegram_chat_id:a.telegram_chat_id||"",email:a.email||"",phone:a.phone||"",discord_webhook:a.discord_webhook||"",webhook_url:a.webhook_url||"",webhook_token:a.webhook_token||""});case 6:if(i=t.v,1===i.code){t.n=7;break}return e.$message.error(i.msg||"保存设置失败"),t.a(2);case 7:e.$message.info(e.$t("profile.notifications.testSent")||"测试通知已发送,请检查您的通知渠道"),t.n=9;break;case 8:t.p=8,t.v,e.$message.error("发送测试通知失败");case 9:return t.p=9,e.testingNotification=!1,t.f(9);case 10:return t.a(2)}},t,null,[[5,8,9,10]])}))()}}},m=f,h=a(845),g=(0,h.A)(m,r,i,!1,null,"86a53e9c",null),v=g.exports},42430:function(e,t,a){a.d(t,{IA:function(){return o},PR:function(){return s},kI:function(){return l}});var r=a(76338),i=a(75769),n={list:"/api/credentials/list",get:"/api/credentials/get",create:"/api/credentials/create",delete:"/api/credentials/delete"};function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,i.Ay)({url:n.list,method:"get",params:e})}function s(e){return(0,i.Ay)({url:n.create,method:"post",data:e})}function l(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(0,i.Ay)({url:n.delete,method:"delete",params:(0,r.A)({id:e},t)})}},53003:function(e,t,a){a.d(t,{DZ:function(){return o},YT:function(){return n},_d:function(){return s},lo:function(){return i}});a(76338);var r=a(75769);function i(){return(0,r.Ay)({url:"/api/settings/schema",method:"get"})}function n(){return(0,r.Ay)({url:"/api/settings/values",method:"get"})}function o(e){return(0,r.Ay)({url:"/api/settings/save",method:"post",data:e})}function s(){return(0,r.Ay)({url:"/api/settings/openrouter-balance",method:"get"})}},84841:function(e,t,a){a.d(t,{DK:function(){return _},E$:function(){return d},Gl:function(){return f},O0:function(){return c},TK:function(){return o},aU:function(){return i},cw:function(){return l},d$:function(){return b},hG:function(){return s},kg:function(){return n},nY:function(){return v},r7:function(){return u},rx:function(){return h},v9:function(){return m},vF:function(){return p},vi:function(){return w},wq:function(){return g}});var r=a(75769);function i(e){return(0,r.Ay)({url:"/api/users/list",method:"get",params:e})}function n(e){return(0,r.Ay)({url:"/api/users/create",method:"post",data:e})}function o(e,t){return(0,r.Ay)({url:"/api/users/update",method:"put",params:{id:e},data:t})}function s(e){return(0,r.Ay)({url:"/api/users/delete",method:"delete",params:{id:e}})}function l(e){return(0,r.Ay)({url:"/api/users/reset-password",method:"post",data:e})}function c(){return(0,r.Ay)({url:"/api/users/roles",method:"get"})}function d(){return(0,r.Ay)({url:"/api/users/profile",method:"get"})}function u(e){return(0,r.Ay)({url:"/api/users/profile/update",method:"put",data:e})}function p(){return(0,r.Ay)({url:"/api/users/notification-settings",method:"get"})}function f(e){return(0,r.Ay)({url:"/api/users/notification-settings",method:"put",data:e})}function m(e){return(0,r.Ay)({url:"/api/users/my-credits-log",method:"get",params:e})}function h(e){return(0,r.Ay)({url:"/api/users/my-referrals",method:"get",params:e})}function g(e){return(0,r.Ay)({url:"/api/users/set-credits",method:"post",data:e})}function v(e){return(0,r.Ay)({url:"/api/users/set-vip",method:"post",data:e})}function _(e){return(0,r.Ay)({url:"/api/users/system-strategies",method:"get",params:e})}function w(e){return(0,r.Ay)({url:"/api/users/admin-orders",method:"get",params:e})}function b(e){return(0,r.Ay)({url:"/api/users/admin-ai-stats",method:"get",params:e})}}}]); \ No newline at end of file diff --git a/frontend/dist/js/185-legacy.0a1e2706.js b/frontend/dist/js/185-legacy.0a1e2706.js new file mode 100644 index 0000000..ed6936e --- /dev/null +++ b/frontend/dist/js/185-legacy.0a1e2706.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[185],{16185:function(t,e,o){o.r(e),o.d(e,{default:function(){return R}});o(74423),o(62010),o(9868),o(21699);var s=function(){var t=this,e=t._self._c;return e("div",{staticClass:"portfolio-container",class:{"theme-dark":t.isDarkTheme,embedded:t.embedded}},[e("div",{staticClass:"summary-section"},[e("div",{staticClass:"summary-card total-value"},[e("div",{staticClass:"card-icon"},[e("a-icon",{attrs:{type:"wallet"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.totalValue")))]),e("div",{staticClass:"card-value"},[e("span",{staticClass:"currency"},[t._v("$")]),e("span",{staticClass:"amount"},[t._v(t._s(t.formatNumber(t.summary.total_market_value)))])]),void 0!==t.summary.today_change?e("div",{staticClass:"card-sub"},[e("span",{class:t.summary.today_change>=0?"positive":"negative"},[t._v(" "+t._s(t.$t("portfolio.summary.today"))+": "+t._s(t.summary.today_change>=0?"+":"")+"$"+t._s(t.formatNumber(t.summary.today_change))+" ")])]):t._e()])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"card-icon cost"},[e("a-icon",{attrs:{type:"dollar"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.totalCost")))]),e("div",{staticClass:"card-value"},[t._v("$"+t._s(t.formatNumber(t.summary.total_cost)))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"card-icon",class:t.summary.total_pnl>=0?"profit":"loss"},[e("a-icon",{attrs:{type:t.summary.total_pnl>=0?"rise":"fall"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.totalPnl")))]),e("div",{staticClass:"card-value",class:t.summary.total_pnl>=0?"positive":"negative"},[t._v(" "+t._s(t.summary.total_pnl>=0?"+":"")+"$"+t._s(t.formatNumber(t.summary.total_pnl))+" "),e("span",{staticClass:"percent"},[t._v("("+t._s(t.summary.total_pnl_percent>=0?"+":"")+t._s(t.summary.total_pnl_percent)+"%)")])])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"card-icon positions"},[e("a-icon",{attrs:{type:"fund"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.positionCount")))]),e("div",{staticClass:"card-value"},[t._v(" "+t._s(t.summary.position_count)+" "),t.profitLossStats.profit>0||t.profitLossStats.loss>0?e("span",{staticClass:"position-detail"},[t._v(" ("),e("span",{staticClass:"positive"},[t._v(t._s(t.profitLossStats.profit))]),t._v("/"),e("span",{staticClass:"negative"},[t._v(t._s(t.profitLossStats.loss))]),t._v(") ")]):t._e()]),e("div",{staticClass:"card-sub"},[t._v(" "+t._s(t.$t("portfolio.summary.profitLossRatio"))+" ")])])])]),e("div",{staticClass:"summary-section secondary"},[e("div",{staticClass:"summary-card mini"},[e("div",{staticClass:"card-icon today",class:t.summary.today_pnl>=0?"profit":"loss"},[e("a-icon",{attrs:{type:"stock"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.todayPnl")))]),e("div",{staticClass:"card-value",class:t.summary.today_pnl>=0?"positive":"negative"},[t._v(" "+t._s(t.summary.today_pnl>=0?"+":"")+"$"+t._s(t.formatNumber(t.summary.today_pnl||0))+" ")])])]),e("div",{staticClass:"summary-card mini"},[e("div",{staticClass:"card-icon best"},[e("a-icon",{attrs:{type:"trophy"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.bestPerformer")))]),t.bestPerformer?e("div",{staticClass:"card-value small positive"},[t._v(" "+t._s(t.bestPerformer.symbol)+" +"+t._s(t.bestPerformer.pnl_percent)+"% ")]):e("div",{staticClass:"card-value small"},[t._v("-")])])]),e("div",{staticClass:"summary-card mini"},[e("div",{staticClass:"card-icon worst"},[e("a-icon",{attrs:{type:"warning"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.worstPerformer")))]),t.worstPerformer?e("div",{staticClass:"card-value small negative"},[t._v(" "+t._s(t.worstPerformer.symbol)+" "+t._s(t.worstPerformer.pnl_percent)+"% ")]):e("div",{staticClass:"card-value small"},[t._v("-")])])]),e("div",{staticClass:"summary-card mini sync-card"},[e("div",{staticClass:"card-icon sync",class:{syncing:t.isSyncing}},[e("a-icon",{attrs:{type:"sync",spin:t.isSyncing}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.priceSync")))]),e("div",{staticClass:"card-value small"},[t._v(" "+t._s(t.lastSyncTime?t.formatSyncTime(t.lastSyncTime):"-")+" ")]),e("div",{staticClass:"card-sub"},[t._v(" "+t._s(t.$t("portfolio.summary.syncInterval"))+": 30s "),e("a-button",{staticStyle:{padding:"0","margin-left":"8px"},attrs:{type:"link",size:"small",loading:t.isSyncing},on:{click:t.refreshPrices}},[t.isSyncing?t._e():e("a-icon",{attrs:{type:"reload"}})],1)],1)])])]),e("div",{staticClass:"main-content"},[e("div",{staticClass:"positions-section"},[e("div",{staticClass:"section-header"},[e("h3",[e("a-icon",{attrs:{type:"stock"}}),e("span",[t._v(t._s(t.$t("portfolio.positions.title")))])],1),e("div",{staticClass:"header-actions"},[e("a-radio-group",{staticStyle:{"margin-right":"12px"},attrs:{size:"small"},model:{value:t.viewMode,callback:function(e){t.viewMode=e},expression:"viewMode"}},[e("a-radio-button",{attrs:{value:"grid"}},[e("a-icon",{attrs:{type:"appstore"}})],1),e("a-radio-button",{attrs:{value:"group"}},[e("a-icon",{attrs:{type:"folder"}})],1)],1),"grid"===t.viewMode?e("a-select",{staticStyle:{width:"150px","margin-right":"12px"},attrs:{placeholder:t.$t("portfolio.groups.all"),"allow-clear":""},on:{change:t.filterByGroup},model:{value:t.selectedGroup,callback:function(e){t.selectedGroup=e},expression:"selectedGroup"}},[e("a-select-option",{attrs:{value:""}},[t._v(t._s(t.$t("portfolio.groups.all")))]),e("a-select-option",{attrs:{value:"__ungrouped__"}},[t._v(t._s(t.$t("portfolio.groups.ungrouped")))]),t._l(t.groups,function(o){return e("a-select-option",{key:o.name,attrs:{value:o.name}},[t._v(" "+t._s(o.name)+" ("+t._s(o.count)+") ")])})],2):t._e(),e("a-button",{attrs:{type:"primary"},on:{click:function(e){t.showAddPositionModal=!0}}},[e("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("portfolio.positions.add"))+" ")],1)],1)]),e("a-spin",{attrs:{spinning:t.loadingPositions}},[e("div",{staticClass:"positions-list"},[0===t.positions.length?e("div",{staticClass:"empty-state"},[e("a-empty",{attrs:{description:t.$t("portfolio.positions.empty")}},[e("a-button",{attrs:{type:"primary"},on:{click:function(e){t.showAddPositionModal=!0}}},[e("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("portfolio.positions.addFirst"))+" ")],1)],1)],1):"grid"===t.viewMode?e("div",{staticClass:"position-grid"},t._l(t.filteredPositions,function(o){return e("div",{key:o.id,staticClass:"position-card",class:{profit:o.pnl>=0,loss:o.pnl<0}},[e("div",{staticClass:"position-header"},[e("div",{staticClass:"symbol-info"},[e("a-tag",{attrs:{color:t.getMarketColor(o.market),size:"small"}},[t._v(t._s(t.getMarketName(o.market)))]),e("span",{staticClass:"symbol"},[t._v(t._s(o.symbol))]),e("span",{staticClass:"name"},[t._v(t._s(o.name))]),o.group_name?e("a-tag",{staticStyle:{"margin-left":"4px"},attrs:{size:"small",color:"blue"}},[e("a-icon",{attrs:{type:"folder"}}),t._v(" "+t._s(o.group_name)+" ")],1):t._e()],1),e("div",{staticClass:"position-actions"},[e("a-tooltip",{attrs:{title:t.hasAlertForPosition(o.id)?t.$t("portfolio.alerts.editAlert"):t.$t("portfolio.alerts.addAlert")}},[e("a-button",{class:{"has-alert":t.hasAlertForPosition(o.id)},attrs:{type:"link",size:"small"},on:{click:function(e){return t.showAddAlertForPosition(o)}}},[e("a-icon",{attrs:{type:"bell",theme:t.hasAlertForPosition(o.id)?"filled":"outlined"}})],1)],1),e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.editPosition(o)}}},[e("a-icon",{attrs:{type:"edit"}})],1),e("a-popconfirm",{attrs:{title:t.$t("portfolio.positions.deleteConfirm")},on:{confirm:function(e){return t.deletePosition(o.id)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}})],1)],1)],1)]),e("div",{staticClass:"position-body"},[e("div",{staticClass:"price-row"},[e("div",{staticClass:"current-price"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.currentPrice")))]),e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatPrice(o.current_price)))]),e("span",{staticClass:"change",class:o.price_change>=0?"up":"down"},[t._v(" "+t._s(o.price_change>=0?"▲":"▼")+t._s(Math.abs(o.price_change_percent).toFixed(2))+"% ")])]),e("div",{staticClass:"entry-price"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.entryPrice")))]),e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatPrice(o.entry_price)))])])]),e("div",{staticClass:"quantity-row"},[e("div",{staticClass:"item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.quantity")))]),e("span",{staticClass:"value"},[t._v(t._s(t.formatNumber(o.quantity,4)))])]),e("div",{staticClass:"item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.side")))]),e("a-tag",{attrs:{color:"long"===o.side?"green":"red",size:"small"}},[t._v(" "+t._s("long"===o.side?t.$t("portfolio.positions.long"):t.$t("portfolio.positions.short"))+" ")])],1),e("div",{staticClass:"item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.marketValue")))]),e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatNumber(o.market_value)))])])])]),e("div",{staticClass:"position-footer"},[e("div",{staticClass:"pnl"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.pnl")))]),e("span",{staticClass:"value",class:o.pnl>=0?"positive":"negative"},[t._v(" "+t._s(o.pnl>=0?"+":"")+t._s(t.getCurrencySymbol(o.market))+t._s(t.formatNumber(o.pnl))+" "),e("span",{staticClass:"percent"},[t._v("("+t._s(o.pnl_percent>=0?"+":"")+t._s(o.pnl_percent)+"%)")])])])])])}),0):e("div",{staticClass:"position-collapse-view"},[e("a-collapse",{attrs:{bordered:!1},model:{value:t.activeGroups,callback:function(e){t.activeGroups=e},expression:"activeGroups"}},[t.ungroupedPositions.length>0?e("a-collapse-panel",{key:"__ungrouped__",staticClass:"group-panel"},[e("template",{slot:"header"},[e("div",{staticClass:"group-header"},[e("span",{staticClass:"group-name"},[e("a-icon",{staticStyle:{"margin-right":"8px"},attrs:{type:"inbox"}}),t._v(" "+t._s(t.$t("portfolio.groups.ungrouped"))+" ")],1),e("span",{staticClass:"group-stats"},[e("span",{staticClass:"count"},[t._v(t._s(t.ungroupedPositions.length)+" "+t._s(t.$t("portfolio.positions.items")))]),e("span",{staticClass:"group-pnl",class:t.getGroupPnl(t.ungroupedPositions)>=0?"positive":"negative"},[t._v(" "+t._s(t.getGroupPnl(t.ungroupedPositions)>=0?"+":"")+"$"+t._s(t.formatNumber(t.getGroupPnl(t.ungroupedPositions)))+" ")])])])]),e("div",{staticClass:"position-grid compact"},t._l(t.ungroupedPositions,function(o){return e("div",{key:o.id,staticClass:"position-card compact",class:{profit:o.pnl>=0,loss:o.pnl<0}},[e("div",{staticClass:"position-header"},[e("div",{staticClass:"symbol-info"},[e("a-tag",{attrs:{color:t.getMarketColor(o.market),size:"small"}},[t._v(t._s(t.getMarketName(o.market)))]),e("span",{staticClass:"symbol"},[t._v(t._s(o.symbol))]),e("span",{staticClass:"name"},[t._v(t._s(o.name))])],1),e("div",{staticClass:"position-actions"},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.editPosition(o)}}},[e("a-icon",{attrs:{type:"edit"}})],1),e("a-popconfirm",{attrs:{title:t.$t("portfolio.positions.deleteConfirm")},on:{confirm:function(e){return t.deletePosition(o.id)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}})],1)],1)],1)]),e("div",{staticClass:"position-compact-body"},[e("div",{staticClass:"compact-item"},[e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatPrice(o.current_price)))]),e("span",{staticClass:"change",class:o.price_change>=0?"up":"down"},[t._v(" "+t._s(o.price_change>=0?"▲":"▼")+t._s(Math.abs(o.price_change_percent).toFixed(2))+"% ")])]),e("div",{staticClass:"compact-item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.quantity"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatNumber(o.quantity,4)))])]),e("div",{staticClass:"compact-item pnl",class:o.pnl>=0?"positive":"negative"},[t._v(" "+t._s(o.pnl>=0?"+":"")+t._s(t.getCurrencySymbol(o.market))+t._s(t.formatNumber(o.pnl))+" "),e("span",{staticClass:"percent"},[t._v("("+t._s(o.pnl_percent>=0?"+":"")+t._s(o.pnl_percent)+"%)")])])])])}),0)],2):t._e(),t._l(t.groupsWithPositions,function(o){return e("a-collapse-panel",{key:o.name,staticClass:"group-panel"},[e("template",{slot:"header"},[e("div",{staticClass:"group-header"},[e("span",{staticClass:"group-name"},[e("a-icon",{staticStyle:{"margin-right":"8px",color:"#1890ff"},attrs:{type:"folder"}}),t._v(" "+t._s(o.name)+" ")],1),e("span",{staticClass:"group-stats"},[e("span",{staticClass:"count"},[t._v(t._s(o.positions.length)+" "+t._s(t.$t("portfolio.positions.items")))]),e("span",{staticClass:"group-pnl",class:t.getGroupPnl(o.positions)>=0?"positive":"negative"},[t._v(" "+t._s(t.getGroupPnl(o.positions)>=0?"+":"")+"$"+t._s(t.formatNumber(t.getGroupPnl(o.positions)))+" ")])])])]),e("div",{staticClass:"position-grid compact"},t._l(o.positions,function(o){return e("div",{key:o.id,staticClass:"position-card compact",class:{profit:o.pnl>=0,loss:o.pnl<0}},[e("div",{staticClass:"position-header"},[e("div",{staticClass:"symbol-info"},[e("a-tag",{attrs:{color:t.getMarketColor(o.market),size:"small"}},[t._v(t._s(t.getMarketName(o.market)))]),e("span",{staticClass:"symbol"},[t._v(t._s(o.symbol))]),e("span",{staticClass:"name"},[t._v(t._s(o.name))])],1),e("div",{staticClass:"position-actions"},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.editPosition(o)}}},[e("a-icon",{attrs:{type:"edit"}})],1),e("a-popconfirm",{attrs:{title:t.$t("portfolio.positions.deleteConfirm")},on:{confirm:function(e){return t.deletePosition(o.id)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}})],1)],1)],1)]),e("div",{staticClass:"position-compact-body"},[e("div",{staticClass:"compact-item"},[e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatPrice(o.current_price)))]),e("span",{staticClass:"change",class:o.price_change>=0?"up":"down"},[t._v(" "+t._s(o.price_change>=0?"▲":"▼")+t._s(Math.abs(o.price_change_percent).toFixed(2))+"% ")])]),e("div",{staticClass:"compact-item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.quantity"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatNumber(o.quantity,4)))])]),e("div",{staticClass:"compact-item pnl",class:o.pnl>=0?"positive":"negative"},[t._v(" "+t._s(o.pnl>=0?"+":"")+t._s(t.getCurrencySymbol(o.market))+t._s(t.formatNumber(o.pnl))+" "),e("span",{staticClass:"percent"},[t._v("("+t._s(o.pnl_percent>=0?"+":"")+t._s(o.pnl_percent)+"%)")])])])])}),0)],2)})],2)],1)])])],1),e("div",{ref:"monitorsSection",staticClass:"monitors-section"},[e("div",{staticClass:"section-header"},[e("h3",[e("a-icon",{attrs:{type:"eye"}}),e("span",[t._v(t._s(t.$t("portfolio.monitors.title")))])],1),e("a-button",{attrs:{type:"primary"},on:{click:t.openAddMonitorModal}},[e("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("portfolio.monitors.add"))+" ")],1)],1),e("a-spin",{attrs:{spinning:t.loadingMonitors}},[e("div",{staticClass:"monitors-list"},[0===t.monitors.length?e("div",{staticClass:"empty-state small"},[e("a-empty",{attrs:{description:t.$t("portfolio.monitors.empty"),image:t.simpleImage}},[e("a-button",{attrs:{type:"primary",size:"small"},on:{click:t.openAddMonitorModal}},[e("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("portfolio.monitors.addFirst"))+" ")],1)],1)],1):e("div",t._l(t.monitors,function(o){return e("div",{key:o.id,staticClass:"monitor-card"},[e("div",{staticClass:"monitor-header"},[e("div",{staticClass:"monitor-name"},[e("a-icon",{attrs:{type:"robot"}}),e("span",[t._v(t._s(o.name))])],1),e("a-switch",{attrs:{checked:o.is_active,size:"small"},on:{change:function(e){return t.toggleMonitor(o.id,e)}}})],1),e("div",{staticClass:"monitor-body"},[e("div",{staticClass:"monitor-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.monitors.interval"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.getIntervalText(o.config.interval_minutes)))])]),e("div",{staticClass:"monitor-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.form.monitorScope"))+":")]),e("span",{staticClass:"value"},[t.getMonitorPositionIds(o).length>0?[e("a-tooltip",[e("template",{slot:"title"},t._l(t.getMonitorPositionIds(o),function(o){return e("div",{key:o},[t._v(" "+t._s(t.getPositionNameById(o))+" ")])}),0),e("span",{staticClass:"scope-selected"},[t._v(" "+t._s(t.$t("portfolio.form.selectedCount",{count:t.getMonitorPositionIds(o).length,total:t.positions.length}))+" ")])],2)]:e("span",{staticClass:"scope-all"},[t._v(t._s(t.$t("portfolio.form.allPositions")))])],2)]),o.last_run_at?e("div",{staticClass:"monitor-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.monitors.lastRun"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatTime(o.last_run_at)))])]):t._e(),o.next_run_at&&o.is_active?e("div",{staticClass:"monitor-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.monitors.nextRun"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatTime(o.next_run_at)))])]):t._e(),o.notification_config.channels?e("div",{staticClass:"monitor-channels"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.monitors.channels"))+":")]),t._l(o.notification_config.channels,function(o){return e("a-tag",{key:o,attrs:{size:"small"}},[t._v(" "+t._s(o)+" ")])})],2):t._e()]),e("div",{staticClass:"monitor-actions"},[e("a-button",{attrs:{type:"link",size:"small",loading:t.runningMonitor===o.id},on:{click:function(e){return t.runMonitorNow(o.id)}}},[e("a-icon",{attrs:{type:"play-circle"}}),t._v(" "+t._s(t.$t("portfolio.monitors.runNow"))+" ")],1),e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.editMonitor(o)}}},[e("a-icon",{attrs:{type:"edit"}})],1),e("a-popconfirm",{attrs:{title:t.$t("portfolio.monitors.deleteConfirm")},on:{confirm:function(e){return t.deleteMonitor(o.id)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}})],1)],1)],1)])}),0)])])],1)]),e("a-modal",{attrs:{title:t.editingPosition?t.$t("portfolio.modal.editPosition"):t.$t("portfolio.modal.addPosition"),visible:t.showAddPositionModal,confirmLoading:t.savingPosition,width:"600px"},on:{ok:t.handleSavePosition,cancel:t.closePositionModal}},[e("a-form",{attrs:{form:t.positionForm,"label-col":{span:6},"wrapper-col":{span:16}}},[e("a-form-item",{attrs:{label:t.$t("portfolio.form.market")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["market",{rules:[{required:!0,message:t.$t("portfolio.form.marketRequired")}]}],expression:"['market', { rules: [{ required: true, message: $t('portfolio.form.marketRequired') }] }]"}],attrs:{placeholder:t.$t("portfolio.form.selectMarket"),disabled:!!t.editingPosition},on:{change:t.handleMarketChange}},t._l(t.marketTypes,function(o){return e("a-select-option",{key:o.value,attrs:{value:o.value}},[t._v(" "+t._s(t.$t(o.i18nKey))+" ")])}),1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.symbol")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["symbol",{rules:[{required:!0,message:t.$t("portfolio.form.symbolRequired")}]}],expression:"['symbol', { rules: [{ required: true, message: $t('portfolio.form.symbolRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{"show-search":"",placeholder:t.$t("portfolio.form.searchSymbol"),"default-active-first-option":!1,"show-arrow":!1,"filter-option":!1,"not-found-content":null,disabled:!!t.editingPosition},on:{search:t.handleSymbolSearch,change:t.handleSymbolSelect}},[t._l(t.symbolSearchResults,function(o){return e("a-select-option",{key:o.symbol,attrs:{value:o.symbol}},[e("div",{staticClass:"symbol-option"},[e("strong",[t._v(t._s(o.symbol))]),e("span",{staticClass:"symbol-name"},[t._v(t._s(o.name))])])])}),t.symbolSearchKeyword&&0===t.symbolSearchResults.length?e("a-select-option",{key:"__manual__"+t.symbolSearchKeyword.toUpperCase(),attrs:{value:t.symbolSearchKeyword.toUpperCase()}},[e("div",{staticClass:"symbol-option manual-input"},[e("a-icon",{staticStyle:{"margin-right":"6px",color:"#1890ff"},attrs:{type:"edit"}}),e("span",[t._v(t._s(t.$t("portfolio.form.useAsSymbol"))+" ")]),e("strong",{staticStyle:{color:"#1890ff"}},[t._v(t._s(t.symbolSearchKeyword.toUpperCase()))]),e("span",[t._v(" "+t._s(t.$t("portfolio.form.asSymbolCode")))])],1)]):t._e()],2),e("div",{staticClass:"symbol-hint",staticStyle:{"font-size":"12px",color:"#999","margin-top":"4px"}},[t._v(" "+t._s(t.$t("portfolio.form.symbolHint"))+" ")])],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.side")}},[e("a-radio-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["side",{initialValue:"long"}],expression:"['side', { initialValue: 'long' }]"}],attrs:{disabled:!!t.editingPosition}},[e("a-radio-button",{attrs:{value:"long"}},[t._v(t._s(t.$t("portfolio.positions.long")))]),e("a-radio-button",{attrs:{value:"short"}},[t._v(t._s(t.$t("portfolio.positions.short")))])],1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.quantity")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["quantity",{rules:[{required:!0,message:t.$t("portfolio.form.quantityRequired")}]}],expression:"['quantity', { rules: [{ required: true, message: $t('portfolio.form.quantityRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{min:1e-8,step:1,placeholder:t.$t("portfolio.form.enterQuantity")}})],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.entryPrice")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["entry_price",{rules:[{required:!0,message:t.$t("portfolio.form.entryPriceRequired")}]}],expression:"['entry_price', { rules: [{ required: true, message: $t('portfolio.form.entryPriceRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{min:1e-8,step:.01,placeholder:t.$t("portfolio.form.enterEntryPrice")}})],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.notes")}},[e("a-textarea",{directives:[{name:"decorator",rawName:"v-decorator",value:["notes"],expression:"['notes']"}],attrs:{rows:2,placeholder:t.$t("portfolio.form.enterNotes")}})],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.group")}},[e("a-auto-complete",{directives:[{name:"decorator",rawName:"v-decorator",value:["group_name"],expression:"['group_name']"}],attrs:{placeholder:t.$t("portfolio.form.enterGroup"),dataSource:t.groupNames}})],1)],1)],1),e("a-modal",{attrs:{title:t.editingAlert?t.$t("portfolio.modal.editAlert"):t.$t("portfolio.modal.addAlert"),visible:t.showAddAlertModal,width:"560px"},on:{cancel:t.closeAlertModal}},[e("template",{slot:"footer"},[e("div",{staticClass:"alert-modal-footer"},[t.editingAlert?e("a-button",{attrs:{type:"danger",ghost:"",loading:t.deletingAlert},on:{click:t.confirmDeleteAlert}},[e("a-icon",{attrs:{type:"delete"}}),t._v(" "+t._s(t.$t("portfolio.alerts.delete"))+" ")],1):e("span"),e("div",{staticClass:"footer-right"},[e("a-button",{on:{click:t.closeAlertModal}},[t._v(t._s(t.$t("common.cancel")))]),e("a-button",{attrs:{type:"primary",loading:t.savingAlert},on:{click:t.handleSaveAlert}},[t._v(" "+t._s(t.$t("common.save"))+" ")])],1)],1)]),e("a-form",{attrs:{form:t.alertForm,"label-col":{span:6},"wrapper-col":{span:16}}},[e("a-form-item",{attrs:{label:t.$t("portfolio.form.symbol")}},[e("div",{staticClass:"alert-symbol-info"},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["symbol"],expression:"['symbol']"}],staticClass:"symbol-input",attrs:{disabled:""}}),t.alertPosition?e("div",{staticClass:"current-price-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.alerts.currentPrice"))+":")]),e("span",{staticClass:"price"},[t._v("$"+t._s(t.formatNumber(t.alertPosition.current_price||t.alertPosition.entry_price)))])]):t._e()],1)]),e("a-form-item",{attrs:{label:t.$t("portfolio.alerts.alertType")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["alert_type",{initialValue:"price_above",rules:[{required:!0}]}],expression:"['alert_type', { initialValue: 'price_above', rules: [{ required: true }] }]"}]},[e("a-select-option",{attrs:{value:"price_above"}},[e("a-icon",{staticStyle:{color:"#52c41a","margin-right":"6px"},attrs:{type:"rise"}}),t._v(" "+t._s(t.$t("portfolio.alerts.priceAbove"))+" ")],1),e("a-select-option",{attrs:{value:"price_below"}},[e("a-icon",{staticStyle:{color:"#f5222d","margin-right":"6px"},attrs:{type:"fall"}}),t._v(" "+t._s(t.$t("portfolio.alerts.priceBelow"))+" ")],1),e("a-select-option",{attrs:{value:"pnl_above"}},[e("a-icon",{staticStyle:{color:"#52c41a","margin-right":"6px"},attrs:{type:"dollar"}}),t._v(" "+t._s(t.$t("portfolio.alerts.pnlAbove"))+" ")],1),e("a-select-option",{attrs:{value:"pnl_below"}},[e("a-icon",{staticStyle:{color:"#f5222d","margin-right":"6px"},attrs:{type:"dollar"}}),t._v(" "+t._s(t.$t("portfolio.alerts.pnlBelow"))+" ")],1)],1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.alerts.threshold")}},[e("div",{staticClass:"threshold-input-wrapper"},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["threshold",{rules:[{required:!0,message:t.$t("portfolio.alerts.thresholdRequired")}]}],expression:"['threshold', { rules: [{ required: true, message: $t('portfolio.alerts.thresholdRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{step:t.alertTypeIsPrice?.01:1,placeholder:t.alertTypeIsPrice?t.$t("portfolio.alerts.enterPrice"):t.$t("portfolio.alerts.enterPercent"),precision:t.alertTypeIsPrice?4:2}}),t.alertTypeIsPrice?e("span",{staticClass:"alert-unit"},[t._v("$")]):e("span",{staticClass:"alert-unit"},[t._v("%")])],1),t.alertPosition&&t.alertTypeIsPrice?e("div",{staticClass:"threshold-hint"},[t._v(" "+t._s(t.$t("portfolio.alerts.currentPriceHint"))+": $"+t._s(t.formatNumber(t.alertPosition.current_price||t.alertPosition.entry_price))+" ")]):t._e()]),e("a-form-item",{attrs:{label:t.$t("portfolio.alerts.repeatInterval")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["repeat_interval",{initialValue:0}],expression:"['repeat_interval', { initialValue: 0 }]"}]},[e("a-select-option",{attrs:{value:0}},[t._v(t._s(t.$t("portfolio.alerts.noRepeat")))]),e("a-select-option",{attrs:{value:5}},[t._v(t._s(t.$t("portfolio.alerts.every5min")))]),e("a-select-option",{attrs:{value:15}},[t._v(t._s(t.$t("portfolio.alerts.every15min")))]),e("a-select-option",{attrs:{value:30}},[t._v(t._s(t.$t("portfolio.alerts.every30min")))]),e("a-select-option",{attrs:{value:60}},[t._v(t._s(t.$t("portfolio.alerts.every1hour")))]),e("a-select-option",{attrs:{value:240}},[t._v(t._s(t.$t("portfolio.alerts.every4hours")))]),e("a-select-option",{attrs:{value:1440}},[t._v(t._s(t.$t("portfolio.alerts.onceDaily")))])],1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.notifyChannels")}},[e("a-checkbox-group",{model:{value:t.alertChannels,callback:function(e){t.alertChannels=e},expression:"alertChannels"}},[e("a-checkbox",{attrs:{value:"browser"}},[e("a-icon",{attrs:{type:"bell"}}),t._v(" "+t._s(t.$t("portfolio.form.browser"))+" ")],1),e("a-checkbox",{attrs:{value:"telegram"}},[e("a-icon",{attrs:{type:"message"}}),t._v(" Telegram ")],1),e("a-checkbox",{attrs:{value:"email"}},[e("a-icon",{attrs:{type:"mail"}}),t._v(" "+t._s(t.$t("portfolio.form.email"))+" ")],1)],1)],1),t.alertChannels.includes("telegram")||t.alertChannels.includes("email")?e("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"info",showIcon:""},scopedSlots:t._u([{key:"message",fn:function(){return[e("span",[t._v(" "+t._s(t.$t("portfolio.form.notificationFromProfile"))+" "),e("router-link",{staticStyle:{"margin-left":"8px"},attrs:{to:"/profile"}},[e("a-icon",{attrs:{type:"setting"}}),t._v(" "+t._s(t.$t("portfolio.form.goToProfile"))+" ")],1)],1)]},proxy:!0}],null,!1,440262090)}):t._e(),e("a-form-item",{attrs:{label:t.$t("portfolio.alerts.enabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["is_active",{initialValue:!0,valuePropName:"checked"}],expression:"['is_active', { initialValue: true, valuePropName: 'checked' }]"}]}),e("span",{staticClass:"switch-label"},[t._v(t._s(t.$t("portfolio.alerts.enabledDesc")))])],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.notes")}},[e("a-textarea",{directives:[{name:"decorator",rawName:"v-decorator",value:["notes"],expression:"['notes']"}],attrs:{placeholder:t.$t("portfolio.form.enterNotes"),autoSize:{minRows:2,maxRows:4}}})],1)],1)],2),e("a-modal",{attrs:{title:t.editingMonitor?t.$t("portfolio.modal.editMonitor"):t.$t("portfolio.modal.addMonitor"),visible:t.showAddMonitorModal,confirmLoading:t.savingMonitor,width:"600px"},on:{ok:t.handleSaveMonitor,cancel:t.closeMonitorModal}},[e("a-form",{attrs:{form:t.monitorForm,"label-col":{span:6},"wrapper-col":{span:16}}},[e("a-form-item",{attrs:{label:t.$t("portfolio.form.monitorName")}},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["name",{rules:[{required:!0,message:t.$t("portfolio.form.monitorNameRequired")}]}],expression:"['name', { rules: [{ required: true, message: $t('portfolio.form.monitorNameRequired') }] }]"}],attrs:{placeholder:t.$t("portfolio.form.enterMonitorName")}})],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.interval")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["interval_minutes",{initialValue:60,rules:[{required:!0}]}],expression:"['interval_minutes', { initialValue: 60, rules: [{ required: true }] }]"}]},[e("a-select-option",{attrs:{value:5}},[t._v("5 "+t._s(t.$t("portfolio.form.minutes")))]),e("a-select-option",{attrs:{value:10}},[t._v("10 "+t._s(t.$t("portfolio.form.minutes")))]),e("a-select-option",{attrs:{value:30}},[t._v("30 "+t._s(t.$t("portfolio.form.minutes")))]),e("a-select-option",{attrs:{value:60}},[t._v("1 "+t._s(t.$t("portfolio.form.hour")))]),e("a-select-option",{attrs:{value:120}},[t._v("2 "+t._s(t.$t("portfolio.form.hours")))]),e("a-select-option",{attrs:{value:240}},[t._v("4 "+t._s(t.$t("portfolio.form.hours")))]),e("a-select-option",{attrs:{value:480}},[t._v("8 "+t._s(t.$t("portfolio.form.hours")))]),e("a-select-option",{attrs:{value:1440}},[t._v("24 "+t._s(t.$t("portfolio.form.hours")))])],1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.notifyChannels")}},[e("a-checkbox-group",{model:{value:t.monitorChannels,callback:function(e){t.monitorChannels=e},expression:"monitorChannels"}},[e("a-checkbox",{attrs:{value:"browser"}},[t._v(t._s(t.$t("portfolio.form.browser")))]),e("a-checkbox",{attrs:{value:"telegram"}},[t._v("Telegram")]),e("a-checkbox",{attrs:{value:"email"}},[t._v(t._s(t.$t("portfolio.form.email")))])],1)],1),t.monitorChannels.includes("telegram")||t.monitorChannels.includes("email")?e("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"info",showIcon:""},scopedSlots:t._u([{key:"message",fn:function(){return[e("span",[t._v(" "+t._s(t.$t("portfolio.form.notificationFromProfile"))+" "),e("router-link",{staticStyle:{"margin-left":"8px"},attrs:{to:"/profile"}},[e("a-icon",{attrs:{type:"setting"}}),t._v(" "+t._s(t.$t("portfolio.form.goToProfile"))+" ")],1)],1)]},proxy:!0}],null,!1,440262090)}):t._e(),e("a-form-item",{attrs:{label:t.$t("portfolio.form.monitorScope")}},[e("a-radio-group",{on:{change:t.handleMonitorScopeChange},model:{value:t.monitorScope,callback:function(e){t.monitorScope=e},expression:"monitorScope"}},[e("a-radio",{attrs:{value:"all"}},[t._v(t._s(t.$t("portfolio.form.allPositions")))]),e("a-radio",{attrs:{value:"selected"}},[t._v(t._s(t.$t("portfolio.form.selectedPositions")))])],1)],1),"selected"===t.monitorScope?e("a-form-item",{attrs:{label:t.$t("portfolio.form.selectPositions")}},[e("a-checkbox-group",{staticClass:"position-checkbox-group",model:{value:t.selectedMonitorPositions,callback:function(e){t.selectedMonitorPositions=e},expression:"selectedMonitorPositions"}},t._l(t.positions,function(o){return e("div",{key:o.id,staticClass:"position-checkbox-item"},[e("a-checkbox",{staticClass:"position-checkbox",attrs:{value:o.id}},[e("div",{staticClass:"position-checkbox-label"},[e("div",{staticClass:"position-left"},[e("a-tag",{attrs:{color:t.getMarketColor(o.market),size:"small"}},[t._v(t._s(o.market))]),e("span",{staticClass:"symbol"},[t._v(t._s(o.symbol))])],1),e("div",{staticClass:"position-middle"},[e("span",{staticClass:"name",attrs:{title:o.name}},[t._v(t._s(o.name))])]),e("div",{staticClass:"position-right"},[e("span",{class:["pnl",o.pnl>=0?"positive":"negative"]},[t._v(" "+t._s(o.pnl>=0?"+":"")+t._s(t.formatNumber(o.pnl_percent))+"% ")])])])])],1)}),0),e("div",{staticClass:"position-select-actions"},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:t.selectAllPositions}},[t._v(" "+t._s(t.$t("portfolio.form.selectAll"))+" ")]),e("a-divider",{attrs:{type:"vertical"}}),e("a-button",{attrs:{type:"link",size:"small"},on:{click:t.deselectAllPositions}},[t._v(" "+t._s(t.$t("portfolio.form.deselectAll"))+" ")]),e("span",{staticClass:"selected-count"},[t._v(" "+t._s(t.$t("portfolio.form.selectedCount",{count:t.selectedMonitorPositions.length,total:t.positions.length}))+" ")])],1)],1):t._e(),e("a-form-item",{attrs:{label:t.$t("portfolio.form.customPrompt")}},[e("a-textarea",{directives:[{name:"decorator",rawName:"v-decorator",value:["prompt"],expression:"['prompt']"}],attrs:{rows:3,placeholder:t.$t("portfolio.form.customPromptPlaceholder")}})],1)],1)],1)],1)},i=[],a=o(2403),r=o(81127),n=o(56252),l=o(76338),c=(o(93693),o(2970)),u=(o(28706),o(2008),o(50113),o(62062),o(26910),o(2892),o(79432),o(26099),o(16034),o(27495),o(47764),o(11392),o(23500),o(62953),o(95353)),p=o(75769);function m(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,p.Ay)({url:"/api/portfolio/positions",method:"get",params:t})}function d(t){return(0,p.Ay)({url:"/api/portfolio/positions",method:"post",data:t})}function f(t,e){return(0,p.Ay)({url:"/api/portfolio/positions/".concat(t),method:"put",data:e})}function v(t){return(0,p.Ay)({url:"/api/portfolio/positions/".concat(t),method:"delete"})}function h(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,p.Ay)({url:"/api/portfolio/summary",method:"get",params:t})}function _(){return(0,p.Ay)({url:"/api/portfolio/monitors",method:"get"})}function g(t){return(0,p.Ay)({url:"/api/portfolio/monitors",method:"post",data:t})}function y(t,e){return(0,p.Ay)({url:"/api/portfolio/monitors/".concat(t),method:"put",data:e})}function b(t){return(0,p.Ay)({url:"/api/portfolio/monitors/".concat(t),method:"delete"})}function C(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(0,p.Ay)({url:"/api/portfolio/monitors/".concat(t,"/run"),method:"post",data:e})}function $(){return(0,p.Ay)({url:"/api/portfolio/alerts",method:"get"})}function k(t){return(0,p.Ay)({url:"/api/portfolio/alerts",method:"post",data:t})}function w(t,e){return(0,p.Ay)({url:"/api/portfolio/alerts/".concat(t),method:"put",data:e})}function A(t){return(0,p.Ay)({url:"/api/portfolio/alerts/".concat(t),method:"delete"})}function S(){return(0,p.Ay)({url:"/api/portfolio/groups",method:"get"})}function P(t){return(0,p.Ay)({url:"/api/market/symbols/search",method:"post",data:t})}function M(){return(0,p.Ay)({url:"/api/market/types",method:"get"})}var N=o(84841),x={name:"Portfolio",props:{embedded:{type:Boolean,default:!1}},data:function(){return{simpleImage:c.Ay.PRESENTED_IMAGE_SIMPLE,summary:{total_cost:0,total_market_value:0,total_pnl:0,total_pnl_percent:0,position_count:0,market_distribution:[],today_pnl:0,today_change:0},positions:[],loadingPositions:!1,showAddPositionModal:!1,savingPosition:!1,editingPosition:null,positionForm:null,monitors:[],loadingMonitors:!1,showAddMonitorModal:!1,savingMonitor:!1,editingMonitor:null,monitorForm:null,runningMonitor:null,marketTypes:[],symbolSearchResults:[],searchTimer:null,selectedSymbolName:"",symbolSearchKeyword:"",priceRefreshTimer:null,lastSyncTime:null,isSyncing:!1,groups:[],selectedGroup:"",viewMode:"grid",activeGroups:[],alerts:[],loadingAlerts:!1,showAddAlertModal:!1,savingAlert:!1,deletingAlert:!1,editingAlert:null,alertForm:null,alertPosition:null,alertChannels:["browser"],monitorChannels:["browser"],monitorScope:"all",selectedMonitorPositions:[],userNotificationSettings:{default_channels:["browser"],telegram_bot_token:"",telegram_chat_id:"",email:"",phone:"",discord_webhook:"",webhook_url:"",webhook_token:""}}},computed:(0,l.A)((0,l.A)({},(0,u.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},selectedChannels:function(){return this.monitorChannels||[]},selectedAlertChannels:function(){return this.alertChannels||[]},filteredPositions:function(){var t=this;return this.selectedGroup?"__ungrouped__"===this.selectedGroup?this.positions.filter(function(t){return!t.group_name}):this.positions.filter(function(e){return e.group_name===t.selectedGroup}):this.positions},groupNames:function(){return this.groups.map(function(t){return t.name})},alertTypeIsPrice:function(){if(!this.alertForm)return!0;var t=this.alertForm.getFieldValue("alert_type");return t&&t.startsWith("price_")},profitLossStats:function(){var t=this.positions.filter(function(t){return t.pnl>=0}).length,e=this.positions.filter(function(t){return t.pnl<0}).length;return{profit:t,loss:e}},bestPerformer:function(){return 0===this.positions.length?null:this.positions.reduce(function(t,e){return!t||(e.pnl_percent||0)>(t.pnl_percent||0)?e:t},null)},worstPerformer:function(){return 0===this.positions.length?null:this.positions.reduce(function(t,e){return!t||(e.pnl_percent||0)<(t.pnl_percent||0)?e:t},null)},ungroupedPositions:function(){return this.positions.filter(function(t){return!t.group_name})},groupsWithPositions:function(){var t={};return this.positions.forEach(function(e){e.group_name&&(t[e.group_name]||(t[e.group_name]={name:e.group_name,positions:[]}),t[e.group_name].positions.push(e))}),Object.values(t).sort(function(t,e){return t.name.localeCompare(e.name)})}}),created:function(){this.positionForm=this.$form.createForm(this,{name:"position_form"}),this.monitorForm=this.$form.createForm(this,{name:"monitor_form"}),this.alertForm=this.$form.createForm(this,{name:"alert_form"}),this.loadMarketTypes(),this.loadData()},mounted:function(){var t=this;this.priceRefreshTimer=setInterval(function(){t.refreshPrices()},3e4),this.loadUserNotificationSettings()},beforeDestroy:function(){this.priceRefreshTimer&&clearInterval(this.priceRefreshTimer),this.searchTimer&&clearTimeout(this.searchTimer)},methods:{loadUserNotificationSettings:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,N.vF)();case 1:o=e.v,1===o.code&&o.data&&(t.userNotificationSettings={default_channels:o.data.default_channels||["browser"],telegram_bot_token:o.data.telegram_bot_token||"",telegram_chat_id:o.data.telegram_chat_id||"",email:o.data.email||"",phone:o.data.phone||"",discord_webhook:o.data.discord_webhook||"",webhook_url:o.data.webhook_url||"",webhook_token:o.data.webhook_token||""}),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadData:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.n){case 0:return e.n=1,Promise.all([t.loadPositions(),t.loadSummary(),t.loadMonitors(),t.loadGroups(),t.loadAlerts()]);case 1:t.lastSyncTime=new Date;case 2:return e.a(2)}},e)}))()},filterByGroup:function(){},refreshPrices:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!t.isSyncing){e.n=1;break}return e.a(2);case 1:return t.isSyncing=!0,e.p=2,e.n=3,Promise.all([t.loadPositions(!0),t.loadSummary(!0)]);case 3:t.lastSyncTime=new Date;case 4:return e.p=4,t.isSyncing=!1,e.f(4);case 5:return e.a(2)}},e,null,[[2,,4,5]])}))()},formatSyncTime:function(t){if(!t)return"-";var e=new Date,o=Math.floor((e-t)/1e3);return o<60?this.$t("portfolio.summary.justNow"):o<3600?"".concat(Math.floor(o/60)," ").concat(this.$t("portfolio.form.minutes")).concat(this.$t("portfolio.summary.ago")):t.toLocaleTimeString()},getGroupPnl:function(t){return t.reduce(function(t,e){return t+(e.pnl||0)},0)},loadGroups:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,S();case 1:o=e.v,o&&1===o.code&&o.data&&(t.groups=o.data.groups||[]),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadAlerts:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loadingAlerts=!0,e.p=1,e.n=2,$();case 2:o=e.v,o&&1===o.code&&(t.alerts=o.data||[]),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.p=4,t.loadingAlerts=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},loadMarketTypes:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,M();case 1:o=e.v,o&&1===o.code&&o.data&&(t.marketTypes=o.data.map(function(t){return{value:t.value,i18nKey:t.i18nKey||"dashboard.analysis.market.".concat(t.value)}})),e.n=3;break;case 2:e.p=2,e.v,t.marketTypes=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}];case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadPositions:function(){var t=arguments,e=this;return(0,n.A)((0,r.A)().m(function o(){var s,i,a;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return s=t.length>0&&void 0!==t[0]&&t[0],e.loadingPositions=!0,o.p=1,i=s?{refresh:"1"}:{},o.n=2,m(i);case 2:a=o.v,a&&1===a.code&&(e.positions=a.data||[]),o.n=4;break;case 3:o.p=3,o.v,e.$message.error(e.$t("portfolio.message.loadFailed"));case 4:return o.p=4,e.loadingPositions=!1,o.f(4);case 5:return o.a(2)}},o,null,[[1,3,4,5]])}))()},loadSummary:function(){var t=arguments,e=this;return(0,n.A)((0,r.A)().m(function o(){var s,i;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return s=t.length>0&&void 0!==t[0]&&t[0],o.p=1,o.n=2,h(s?{refresh:"1"}:{});case 2:i=o.v,i&&1===i.code&&(e.summary=i.data||e.summary),o.n=4;break;case 3:o.p=3,o.v;case 4:return o.a(2)}},o,null,[[1,3]])}))()},loadMonitors:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loadingMonitors=!0,e.p=1,e.n=2,_();case 2:o=e.v,o&&1===o.code&&(t.monitors=o.data||[]),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.p=4,t.loadingMonitors=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleMarketChange:function(t){this.symbolSearchResults=[],this.symbolSearchKeyword="",this.positionForm.setFieldsValue({symbol:""})},handleSymbolSearch:function(t){var e=this;this.symbolSearchKeyword=t||"",this.searchTimer&&clearTimeout(this.searchTimer),!t||t.length<1?this.symbolSearchResults=[]:this.searchTimer=setTimeout((0,n.A)((0,r.A)().m(function o(){var s,i;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:if(s=e.positionForm.getFieldValue("market"),s){o.n=1;break}return o.a(2);case 1:return o.p=1,o.n=2,P({market:s,keyword:t,limit:10});case 2:i=o.v,i&&1===i.code?e.symbolSearchResults=i.data||[]:e.symbolSearchResults=[],o.n=4;break;case 3:o.p=3,o.v,e.symbolSearchResults=[];case 4:return o.a(2)}},o,null,[[1,3]])})),300)},handleSymbolSelect:function(t,e){var o=this.symbolSearchResults.find(function(e){return e.symbol===t});this.selectedSymbolName=o?o.name:"",this.symbolSearchKeyword=""},editPosition:function(t){var e=this;this.editingPosition=t,this.showAddPositionModal=!0,this.$nextTick(function(){e.positionForm.setFieldsValue({market:t.market,symbol:t.symbol,side:t.side,quantity:t.quantity,entry_price:t.entry_price,notes:t.notes,group_name:t.group_name||""})})},handleSavePosition:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.n){case 0:t.positionForm.validateFields(function(){var e=(0,n.A)((0,r.A)().m(function e(o,s){var i,a,n;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!o){e.n=1;break}return e.a(2);case 1:if(t.savingPosition=!0,e.p=2,i={market:s.market,symbol:s.symbol.toUpperCase(),side:s.side,quantity:s.quantity,entry_price:s.entry_price,notes:s.notes||"",name:t.selectedSymbolName||"",group_name:s.group_name||""},!t.editingPosition){e.n=4;break}return e.n=3,f(t.editingPosition.id,i);case 3:a=e.v,e.n=6;break;case 4:return e.n=5,d(i);case 5:a=e.v;case 6:a&&1===a.code?(t.$message.success(t.$t("portfolio.message.saveSuccess")),t.closePositionModal(),t.loadData()):t.$message.error((null===(n=a)||void 0===n?void 0:n.msg)||t.$t("portfolio.message.saveFailed")),e.n=8;break;case 7:e.p=7,e.v,t.$message.error(t.$t("portfolio.message.saveFailed"));case 8:return e.p=8,t.savingPosition=!1,e.f(8);case 9:return e.a(2)}},e,null,[[2,7,8,9]])}));return function(t,o){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},deletePosition:function(t){var e=this;return(0,n.A)((0,r.A)().m(function o(){var s;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return o.p=0,o.n=1,v(t);case 1:s=o.v,s&&1===s.code?(e.$message.success(e.$t("portfolio.message.deleteSuccess")),e.loadData()):e.$message.error((null===s||void 0===s?void 0:s.msg)||e.$t("portfolio.message.deleteFailed")),o.n=3;break;case 2:o.p=2,o.v,e.$message.error(e.$t("portfolio.message.deleteFailed"));case 3:return o.a(2)}},o,null,[[0,2]])}))()},closePositionModal:function(){this.showAddPositionModal=!1,this.editingPosition=null,this.positionForm.resetFields(),this.symbolSearchResults=[],this.selectedSymbolName="",this.symbolSearchKeyword=""},handleAlertChannelsChange:function(t){this.alertChannels=t||[]},showAddAlertForPosition:function(t){var e=this,o=this.alerts.find(function(e){return e.position_id===t.id});o?this.editAlert(o):(this.editingAlert=null,this.alertPosition=t,this.alertChannels=(0,a.A)(this.userNotificationSettings.default_channels||["browser"]),this.showAddAlertModal=!0,this.$nextTick(function(){e.alertForm.setFieldsValue({symbol:"".concat(t.market,"/").concat(t.symbol),alert_type:"price_above",threshold:t.current_price||t.entry_price,repeat_interval:0,is_active:!0,notes:""})}))},editAlert:function(t){var e,o=this;this.editingAlert=t,this.alertPosition=this.positions.find(function(e){return e.id===t.position_id})||{market:t.market,symbol:t.symbol,current_price:0,entry_price:0},this.alertChannels=(0,a.A)((null===(e=t.notification_config)||void 0===e?void 0:e.channels)||["browser"]),this.showAddAlertModal=!0,this.$nextTick(function(){o.alertForm&&o.alertForm.setFieldsValue({symbol:"".concat(t.market,"/").concat(t.symbol),alert_type:t.alert_type||"price_above",threshold:t.threshold||0,repeat_interval:t.repeat_interval||0,is_active:!1!==t.is_active,notes:t.notes||""})})},handleSaveAlert:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.n){case 0:t.alertForm.validateFields(function(){var e=(0,n.A)((0,r.A)().m(function e(o,s){var i,a,n,l,c,u,p;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!o){e.n=1;break}return e.a(2);case 1:if(t.savingAlert=!0,e.p=2,l={},t.alertChannels.includes("telegram")&&t.userNotificationSettings.telegram_chat_id&&(l.telegram=t.userNotificationSettings.telegram_chat_id,t.userNotificationSettings.telegram_bot_token&&(l.telegram_bot_token=t.userNotificationSettings.telegram_bot_token)),t.alertChannels.includes("email")&&t.userNotificationSettings.email&&(l.email=t.userNotificationSettings.email),t.alertChannels.includes("phone")&&t.userNotificationSettings.phone&&(l.phone=t.userNotificationSettings.phone),t.alertChannels.includes("discord")&&t.userNotificationSettings.discord_webhook&&(l.discord=t.userNotificationSettings.discord_webhook),t.alertChannels.includes("webhook")&&t.userNotificationSettings.webhook_url&&(l.webhook=t.userNotificationSettings.webhook_url,t.userNotificationSettings.webhook_token&&(l.webhook_token=t.userNotificationSettings.webhook_token)),c={position_id:null===(i=t.alertPosition)||void 0===i?void 0:i.id,market:null===(a=t.alertPosition)||void 0===a?void 0:a.market,symbol:null===(n=t.alertPosition)||void 0===n?void 0:n.symbol,alert_type:s.alert_type,threshold:s.threshold,notification_config:{channels:t.alertChannels.length>0?t.alertChannels:["browser"],targets:l,language:t.$store.getters.lang||"en-US"},is_active:!1!==s.is_active,repeat_interval:s.repeat_interval||0,notes:s.notes||""},!t.editingAlert){e.n=4;break}return e.n=3,w(t.editingAlert.id,c);case 3:u=e.v,e.n=6;break;case 4:return e.n=5,k(c);case 5:u=e.v;case 6:u&&1===u.code?(t.$message.success(t.$t("portfolio.message.saveSuccess")),t.closeAlertModal(),t.loadAlerts()):t.$message.error((null===(p=u)||void 0===p?void 0:p.msg)||t.$t("portfolio.message.saveFailed")),e.n=8;break;case 7:e.p=7,e.v,t.$message.error(t.$t("portfolio.message.saveFailed"));case 8:return e.p=8,t.savingAlert=!1,e.f(8);case 9:return e.a(2)}},e,null,[[2,7,8,9]])}));return function(t,o){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},deleteAlert:function(t){var e=this;return(0,n.A)((0,r.A)().m(function o(){var s;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return o.p=0,o.n=1,A(t);case 1:s=o.v,s&&1===s.code?(e.$message.success(e.$t("portfolio.message.deleteSuccess")),e.loadAlerts()):e.$message.error((null===s||void 0===s?void 0:s.msg)||e.$t("portfolio.message.deleteFailed")),o.n=3;break;case 2:o.p=2,o.v,e.$message.error(e.$t("portfolio.message.deleteFailed"));case 3:return o.a(2)}},o,null,[[0,2]])}))()},closeAlertModal:function(){this.showAddAlertModal=!1,this.editingAlert=null,this.alertPosition=null,this.alertChannels=(0,a.A)(this.userNotificationSettings.default_channels||["browser"]),this.alertForm.resetFields()},confirmDeleteAlert:function(){if(this.editingAlert){var t=this;this.$confirm({title:this.$t("portfolio.alerts.deleteConfirm"),okText:this.$t("common.confirm"),okType:"danger",cancelText:this.$t("common.cancel"),onOk:function(){return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.n){case 0:return e.n=1,t.handleDeleteAlert();case 1:return e.a(2)}},e)}))()}})}},handleDeleteAlert:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.editingAlert){e.n=1;break}return e.a(2);case 1:return t.deletingAlert=!0,e.p=2,e.n=3,A(t.editingAlert.id);case 3:if(o=e.v,!o||1!==o.code){e.n=5;break}return t.$message.success(t.$t("portfolio.message.deleteSuccess")),t.closeAlertModal(),e.n=4,t.loadAlerts();case 4:e.n=6;break;case 5:t.$message.error((null===o||void 0===o?void 0:o.msg)||t.$t("portfolio.message.deleteFailed"));case 6:e.n=8;break;case 7:e.p=7,e.v,t.$message.error(t.$t("portfolio.message.deleteFailed"));case 8:return e.p=8,t.deletingAlert=!1,e.f(8);case 9:return e.a(2)}},e,null,[[2,7,8,9]])}))()},focusMonitorsSection:function(){var t=this;this.$nextTick(function(){var e=t.$refs.monitorsSection;e&&"function"===typeof e.scrollIntoView&&e.scrollIntoView({behavior:"smooth",block:"start"})})},openAddMonitorModal:function(){var t=this;this.editingMonitor=null,this.monitorChannels=(0,a.A)(this.userNotificationSettings.default_channels||["browser"]),this.monitorScope="all",this.selectedMonitorPositions=[],this.showAddMonitorModal=!0,this.$nextTick(function(){t.monitorForm&&t.monitorForm.resetFields()})},handleMonitorChannelsChange:function(t){this.monitorChannels=t||[]},editMonitor:function(t){var e,o=this;this.editingMonitor=t,this.monitorChannels=(0,a.A)((null===(e=t.notification_config)||void 0===e?void 0:e.channels)||["browser"]);var s=[];if(t.position_ids)if("string"===typeof t.position_ids)try{s=JSON.parse(t.position_ids)||[]}catch(i){s=[]}else Array.isArray(t.position_ids)&&(s=t.position_ids);this.monitorScope=s.length>0?"selected":"all",this.selectedMonitorPositions=s,this.showAddMonitorModal=!0,this.$nextTick(function(){var e,s;o.monitorForm&&o.monitorForm.setFieldsValue({name:t.name,interval_minutes:(null===(e=t.config)||void 0===e?void 0:e.interval_minutes)||60,prompt:(null===(s=t.config)||void 0===s?void 0:s.prompt)||""})})},handleMonitorScopeChange:function(t){this.monitorScope=t.target.value,"all"===t.target.value&&(this.selectedMonitorPositions=[])},selectAllPositions:function(){this.selectedMonitorPositions=this.positions.map(function(t){return t.id})},deselectAllPositions:function(){this.selectedMonitorPositions=[]},handleSaveMonitor:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.n){case 0:t.monitorForm.validateFields(function(){var e=(0,n.A)((0,r.A)().m(function e(o,s){var i,a,n;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!o){e.n=1;break}return e.a(2);case 1:if("selected"!==t.monitorScope||0!==t.selectedMonitorPositions.length){e.n=2;break}return t.$message.warning(t.$t("portfolio.form.pleaseSelectPositions")),e.a(2);case 2:if(t.savingMonitor=!0,e.p=3,i={name:s.name,monitor_type:"ai",position_ids:"selected"===t.monitorScope?t.selectedMonitorPositions:[],config:{interval_minutes:s.interval_minutes,prompt:s.prompt||"",language:t.$store.getters.lang||"en-US"},notification_config:{channels:t.monitorChannels.length>0?t.monitorChannels:["browser"],targets:{telegram:t.userNotificationSettings.telegram_chat_id||"",telegram_bot_token:t.userNotificationSettings.telegram_bot_token||"",email:t.userNotificationSettings.email||"",phone:t.userNotificationSettings.phone||"",discord:t.userNotificationSettings.discord_webhook||"",webhook:t.userNotificationSettings.webhook_url||"",webhook_token:t.userNotificationSettings.webhook_token||""}},is_active:!0},!t.editingMonitor){e.n=5;break}return e.n=4,y(t.editingMonitor.id,i);case 4:a=e.v,e.n=7;break;case 5:return e.n=6,g(i);case 6:a=e.v;case 7:a&&1===a.code?(t.$message.success(t.$t("portfolio.message.saveSuccess")),t.closeMonitorModal(),t.loadMonitors()):t.$message.error((null===(n=a)||void 0===n?void 0:n.msg)||t.$t("portfolio.message.saveFailed")),e.n=9;break;case 8:e.p=8,e.v,t.$message.error(t.$t("portfolio.message.saveFailed"));case 9:return e.p=9,t.savingMonitor=!1,e.f(9);case 10:return e.a(2)}},e,null,[[3,8,9,10]])}));return function(t,o){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},toggleMonitor:function(t,e){var o=this;return(0,n.A)((0,r.A)().m(function s(){var i;return(0,r.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return s.p=0,s.n=1,y(t,{is_active:e});case 1:i=s.v,i&&1===i.code&&(o.$message.success(e?o.$t("portfolio.message.monitorEnabled"):o.$t("portfolio.message.monitorDisabled")),o.loadMonitors()),s.n=3;break;case 2:s.p=2,s.v,o.$message.error(o.$t("portfolio.message.updateFailed"));case 3:return s.a(2)}},s,null,[[0,2]])}))()},runMonitorNow:function(t){var e=this;return(0,n.A)((0,r.A)().m(function o(){var s,i,a,n,l,c,u;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return e.runningMonitor=t,o.p=1,s=e.$store.getters.lang||"en-US",o.n=2,C(t,{language:s,async:!0});case 2:i=o.v,i&&1===i.code&&("running"===(null===(a=i.data)||void 0===a?void 0:a.status)?(e.$message.success(e.$t("portfolio.message.monitorRunning")),e.$notification.info({message:e.$t("portfolio.monitors.runningTitle"),description:e.$t("portfolio.monitors.runningDesc"),duration:5})):null!==(n=i.data)&&void 0!==n&&n.success?(e.$message.success(e.$t("portfolio.message.monitorRunSuccess")),i.data.analysis&&e.$notification.open({message:e.$t("portfolio.monitors.analysisResult"),description:i.data.analysis.substring(0,500)+(i.data.analysis.length>500?"...":""),duration:0})):null!==(l=i.data)&&void 0!==l&&l.error&&e.$message.error(i.data.error||e.$t("portfolio.message.monitorRunFailed")),e.loadMonitors()),o.n=4;break;case 3:o.p=3,u=o.v,"ECONNABORTED"===u.code||null!==(c=u.message)&&void 0!==c&&c.includes("timeout")?e.$notification.warning({message:e.$t("portfolio.monitors.timeoutTitle"),description:e.$t("portfolio.monitors.timeoutDesc"),duration:8}):e.$message.error(e.$t("portfolio.message.monitorRunFailed"));case 4:return o.p=4,e.runningMonitor=null,o.f(4);case 5:return o.a(2)}},o,null,[[1,3,4,5]])}))()},deleteMonitor:function(t){var e=this;return(0,n.A)((0,r.A)().m(function o(){var s;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return o.p=0,o.n=1,b(t);case 1:s=o.v,s&&1===s.code?(e.$message.success(e.$t("portfolio.message.deleteSuccess")),e.loadMonitors()):e.$message.error((null===s||void 0===s?void 0:s.msg)||e.$t("portfolio.message.deleteFailed")),o.n=3;break;case 2:o.p=2,o.v,e.$message.error(e.$t("portfolio.message.deleteFailed"));case 3:return o.a(2)}},o,null,[[0,2]])}))()},closeMonitorModal:function(){this.showAddMonitorModal=!1,this.editingMonitor=null,this.monitorForm.resetFields(),this.monitorChannels=(0,a.A)(this.userNotificationSettings.default_channels||["browser"]),this.monitorScope="all",this.selectedMonitorPositions=[]},getMonitorPositionIds:function(t){if(!t.position_ids)return[];if("string"===typeof t.position_ids)try{return JSON.parse(t.position_ids)||[]}catch(e){return[]}return Array.isArray(t.position_ids)?t.position_ids:[]},getPositionNameById:function(t){var e=this.positions.find(function(e){return e.id===t});return e?"".concat(e.symbol," (").concat(e.name||e.market,")"):"#".concat(t)},hasAlertForPosition:function(t){return this.alerts.some(function(e){return e.position_id===t})},getAlertForPosition:function(t){return this.alerts.find(function(e){return e.position_id===t})},getMarketColor:function(t){var e={USStock:"green",Crypto:"purple",Forex:"gold",Futures:"cyan"};return e[t]||"default"},getMarketName:function(t){return this.$t("dashboard.analysis.market.".concat(t))||t},getCurrencySymbol:function(t){var e=["USStock","Crypto","Forex","Futures"];return e.includes(t)?"$":"¥"},formatNumber:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return void 0===t||null===t?"0.00":Number(t).toLocaleString("en-US",{minimumFractionDigits:e,maximumFractionDigits:e})},formatPrice:function(t){return t?t>=1e3?this.formatNumber(t,2):t>=1?this.formatNumber(t,4):this.formatNumber(t,6):"0"},formatTime:function(t){if(!t)return"-";var e;if("number"===typeof t)e=new Date(1e3*t);else{if("string"!==typeof t)return"-";e=/^\d+$/.test(t)?new Date(1e3*parseInt(t,10)):new Date(t)}return isNaN(e.getTime())?"-":e.toLocaleString()},getIntervalText:function(t){if(!t)return"-";if(t<60)return"".concat(t," ").concat(this.$t("portfolio.form.minutes"));var e=t/60;return"".concat(e," ").concat(this.$t("portfolio.form.hours"))}}},F=x,T=o(845),q=(0,T.A)(F,s,i,!1,null,"398d904c",null),R=q.exports},84841:function(t,e,o){o.d(e,{DK:function(){return g},E$:function(){return u},Gl:function(){return d},O0:function(){return c},TK:function(){return r},aU:function(){return i},cw:function(){return l},d$:function(){return b},hG:function(){return n},kg:function(){return a},nY:function(){return _},r7:function(){return p},rx:function(){return v},v9:function(){return f},vF:function(){return m},vi:function(){return y},wq:function(){return h}});var s=o(75769);function i(t){return(0,s.Ay)({url:"/api/users/list",method:"get",params:t})}function a(t){return(0,s.Ay)({url:"/api/users/create",method:"post",data:t})}function r(t,e){return(0,s.Ay)({url:"/api/users/update",method:"put",params:{id:t},data:e})}function n(t){return(0,s.Ay)({url:"/api/users/delete",method:"delete",params:{id:t}})}function l(t){return(0,s.Ay)({url:"/api/users/reset-password",method:"post",data:t})}function c(){return(0,s.Ay)({url:"/api/users/roles",method:"get"})}function u(){return(0,s.Ay)({url:"/api/users/profile",method:"get"})}function p(t){return(0,s.Ay)({url:"/api/users/profile/update",method:"put",data:t})}function m(){return(0,s.Ay)({url:"/api/users/notification-settings",method:"get"})}function d(t){return(0,s.Ay)({url:"/api/users/notification-settings",method:"put",data:t})}function f(t){return(0,s.Ay)({url:"/api/users/my-credits-log",method:"get",params:t})}function v(t){return(0,s.Ay)({url:"/api/users/my-referrals",method:"get",params:t})}function h(t){return(0,s.Ay)({url:"/api/users/set-credits",method:"post",data:t})}function _(t){return(0,s.Ay)({url:"/api/users/set-vip",method:"post",data:t})}function g(t){return(0,s.Ay)({url:"/api/users/system-strategies",method:"get",params:t})}function y(t){return(0,s.Ay)({url:"/api/users/admin-orders",method:"get",params:t})}function b(t){return(0,s.Ay)({url:"/api/users/admin-ai-stats",method:"get",params:t})}}}]); \ No newline at end of file diff --git a/frontend/dist/js/185.9e7876ef.js b/frontend/dist/js/185.9e7876ef.js new file mode 100644 index 0000000..6d35cc4 --- /dev/null +++ b/frontend/dist/js/185.9e7876ef.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[185],{16185:function(t,e,o){o.r(e),o.d(e,{default:function(){return R}});o(74423);var s=function(){var t=this,e=t._self._c;return e("div",{staticClass:"portfolio-container",class:{"theme-dark":t.isDarkTheme,embedded:t.embedded}},[e("div",{staticClass:"summary-section"},[e("div",{staticClass:"summary-card total-value"},[e("div",{staticClass:"card-icon"},[e("a-icon",{attrs:{type:"wallet"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.totalValue")))]),e("div",{staticClass:"card-value"},[e("span",{staticClass:"currency"},[t._v("$")]),e("span",{staticClass:"amount"},[t._v(t._s(t.formatNumber(t.summary.total_market_value)))])]),void 0!==t.summary.today_change?e("div",{staticClass:"card-sub"},[e("span",{class:t.summary.today_change>=0?"positive":"negative"},[t._v(" "+t._s(t.$t("portfolio.summary.today"))+": "+t._s(t.summary.today_change>=0?"+":"")+"$"+t._s(t.formatNumber(t.summary.today_change))+" ")])]):t._e()])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"card-icon cost"},[e("a-icon",{attrs:{type:"dollar"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.totalCost")))]),e("div",{staticClass:"card-value"},[t._v("$"+t._s(t.formatNumber(t.summary.total_cost)))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"card-icon",class:t.summary.total_pnl>=0?"profit":"loss"},[e("a-icon",{attrs:{type:t.summary.total_pnl>=0?"rise":"fall"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.totalPnl")))]),e("div",{staticClass:"card-value",class:t.summary.total_pnl>=0?"positive":"negative"},[t._v(" "+t._s(t.summary.total_pnl>=0?"+":"")+"$"+t._s(t.formatNumber(t.summary.total_pnl))+" "),e("span",{staticClass:"percent"},[t._v("("+t._s(t.summary.total_pnl_percent>=0?"+":"")+t._s(t.summary.total_pnl_percent)+"%)")])])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"card-icon positions"},[e("a-icon",{attrs:{type:"fund"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.positionCount")))]),e("div",{staticClass:"card-value"},[t._v(" "+t._s(t.summary.position_count)+" "),t.profitLossStats.profit>0||t.profitLossStats.loss>0?e("span",{staticClass:"position-detail"},[t._v(" ("),e("span",{staticClass:"positive"},[t._v(t._s(t.profitLossStats.profit))]),t._v("/"),e("span",{staticClass:"negative"},[t._v(t._s(t.profitLossStats.loss))]),t._v(") ")]):t._e()]),e("div",{staticClass:"card-sub"},[t._v(" "+t._s(t.$t("portfolio.summary.profitLossRatio"))+" ")])])])]),e("div",{staticClass:"summary-section secondary"},[e("div",{staticClass:"summary-card mini"},[e("div",{staticClass:"card-icon today",class:t.summary.today_pnl>=0?"profit":"loss"},[e("a-icon",{attrs:{type:"stock"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.todayPnl")))]),e("div",{staticClass:"card-value",class:t.summary.today_pnl>=0?"positive":"negative"},[t._v(" "+t._s(t.summary.today_pnl>=0?"+":"")+"$"+t._s(t.formatNumber(t.summary.today_pnl||0))+" ")])])]),e("div",{staticClass:"summary-card mini"},[e("div",{staticClass:"card-icon best"},[e("a-icon",{attrs:{type:"trophy"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.bestPerformer")))]),t.bestPerformer?e("div",{staticClass:"card-value small positive"},[t._v(" "+t._s(t.bestPerformer.symbol)+" +"+t._s(t.bestPerformer.pnl_percent)+"% ")]):e("div",{staticClass:"card-value small"},[t._v("-")])])]),e("div",{staticClass:"summary-card mini"},[e("div",{staticClass:"card-icon worst"},[e("a-icon",{attrs:{type:"warning"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.worstPerformer")))]),t.worstPerformer?e("div",{staticClass:"card-value small negative"},[t._v(" "+t._s(t.worstPerformer.symbol)+" "+t._s(t.worstPerformer.pnl_percent)+"% ")]):e("div",{staticClass:"card-value small"},[t._v("-")])])]),e("div",{staticClass:"summary-card mini sync-card"},[e("div",{staticClass:"card-icon sync",class:{syncing:t.isSyncing}},[e("a-icon",{attrs:{type:"sync",spin:t.isSyncing}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.priceSync")))]),e("div",{staticClass:"card-value small"},[t._v(" "+t._s(t.lastSyncTime?t.formatSyncTime(t.lastSyncTime):"-")+" ")]),e("div",{staticClass:"card-sub"},[t._v(" "+t._s(t.$t("portfolio.summary.syncInterval"))+": 30s "),e("a-button",{staticStyle:{padding:"0","margin-left":"8px"},attrs:{type:"link",size:"small",loading:t.isSyncing},on:{click:t.refreshPrices}},[t.isSyncing?t._e():e("a-icon",{attrs:{type:"reload"}})],1)],1)])])]),e("div",{staticClass:"main-content"},[e("div",{staticClass:"positions-section"},[e("div",{staticClass:"section-header"},[e("h3",[e("a-icon",{attrs:{type:"stock"}}),e("span",[t._v(t._s(t.$t("portfolio.positions.title")))])],1),e("div",{staticClass:"header-actions"},[e("a-radio-group",{staticStyle:{"margin-right":"12px"},attrs:{size:"small"},model:{value:t.viewMode,callback:function(e){t.viewMode=e},expression:"viewMode"}},[e("a-radio-button",{attrs:{value:"grid"}},[e("a-icon",{attrs:{type:"appstore"}})],1),e("a-radio-button",{attrs:{value:"group"}},[e("a-icon",{attrs:{type:"folder"}})],1)],1),"grid"===t.viewMode?e("a-select",{staticStyle:{width:"150px","margin-right":"12px"},attrs:{placeholder:t.$t("portfolio.groups.all"),"allow-clear":""},on:{change:t.filterByGroup},model:{value:t.selectedGroup,callback:function(e){t.selectedGroup=e},expression:"selectedGroup"}},[e("a-select-option",{attrs:{value:""}},[t._v(t._s(t.$t("portfolio.groups.all")))]),e("a-select-option",{attrs:{value:"__ungrouped__"}},[t._v(t._s(t.$t("portfolio.groups.ungrouped")))]),t._l(t.groups,function(o){return e("a-select-option",{key:o.name,attrs:{value:o.name}},[t._v(" "+t._s(o.name)+" ("+t._s(o.count)+") ")])})],2):t._e(),e("a-button",{attrs:{type:"primary"},on:{click:function(e){t.showAddPositionModal=!0}}},[e("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("portfolio.positions.add"))+" ")],1)],1)]),e("a-spin",{attrs:{spinning:t.loadingPositions}},[e("div",{staticClass:"positions-list"},[0===t.positions.length?e("div",{staticClass:"empty-state"},[e("a-empty",{attrs:{description:t.$t("portfolio.positions.empty")}},[e("a-button",{attrs:{type:"primary"},on:{click:function(e){t.showAddPositionModal=!0}}},[e("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("portfolio.positions.addFirst"))+" ")],1)],1)],1):"grid"===t.viewMode?e("div",{staticClass:"position-grid"},t._l(t.filteredPositions,function(o){return e("div",{key:o.id,staticClass:"position-card",class:{profit:o.pnl>=0,loss:o.pnl<0}},[e("div",{staticClass:"position-header"},[e("div",{staticClass:"symbol-info"},[e("a-tag",{attrs:{color:t.getMarketColor(o.market),size:"small"}},[t._v(t._s(t.getMarketName(o.market)))]),e("span",{staticClass:"symbol"},[t._v(t._s(o.symbol))]),e("span",{staticClass:"name"},[t._v(t._s(o.name))]),o.group_name?e("a-tag",{staticStyle:{"margin-left":"4px"},attrs:{size:"small",color:"blue"}},[e("a-icon",{attrs:{type:"folder"}}),t._v(" "+t._s(o.group_name)+" ")],1):t._e()],1),e("div",{staticClass:"position-actions"},[e("a-tooltip",{attrs:{title:t.hasAlertForPosition(o.id)?t.$t("portfolio.alerts.editAlert"):t.$t("portfolio.alerts.addAlert")}},[e("a-button",{class:{"has-alert":t.hasAlertForPosition(o.id)},attrs:{type:"link",size:"small"},on:{click:function(e){return t.showAddAlertForPosition(o)}}},[e("a-icon",{attrs:{type:"bell",theme:t.hasAlertForPosition(o.id)?"filled":"outlined"}})],1)],1),e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.editPosition(o)}}},[e("a-icon",{attrs:{type:"edit"}})],1),e("a-popconfirm",{attrs:{title:t.$t("portfolio.positions.deleteConfirm")},on:{confirm:function(e){return t.deletePosition(o.id)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}})],1)],1)],1)]),e("div",{staticClass:"position-body"},[e("div",{staticClass:"price-row"},[e("div",{staticClass:"current-price"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.currentPrice")))]),e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatPrice(o.current_price)))]),e("span",{staticClass:"change",class:o.price_change>=0?"up":"down"},[t._v(" "+t._s(o.price_change>=0?"▲":"▼")+t._s(Math.abs(o.price_change_percent).toFixed(2))+"% ")])]),e("div",{staticClass:"entry-price"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.entryPrice")))]),e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatPrice(o.entry_price)))])])]),e("div",{staticClass:"quantity-row"},[e("div",{staticClass:"item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.quantity")))]),e("span",{staticClass:"value"},[t._v(t._s(t.formatNumber(o.quantity,4)))])]),e("div",{staticClass:"item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.side")))]),e("a-tag",{attrs:{color:"long"===o.side?"green":"red",size:"small"}},[t._v(" "+t._s("long"===o.side?t.$t("portfolio.positions.long"):t.$t("portfolio.positions.short"))+" ")])],1),e("div",{staticClass:"item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.marketValue")))]),e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatNumber(o.market_value)))])])])]),e("div",{staticClass:"position-footer"},[e("div",{staticClass:"pnl"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.pnl")))]),e("span",{staticClass:"value",class:o.pnl>=0?"positive":"negative"},[t._v(" "+t._s(o.pnl>=0?"+":"")+t._s(t.getCurrencySymbol(o.market))+t._s(t.formatNumber(o.pnl))+" "),e("span",{staticClass:"percent"},[t._v("("+t._s(o.pnl_percent>=0?"+":"")+t._s(o.pnl_percent)+"%)")])])])])])}),0):e("div",{staticClass:"position-collapse-view"},[e("a-collapse",{attrs:{bordered:!1},model:{value:t.activeGroups,callback:function(e){t.activeGroups=e},expression:"activeGroups"}},[t.ungroupedPositions.length>0?e("a-collapse-panel",{key:"__ungrouped__",staticClass:"group-panel"},[e("template",{slot:"header"},[e("div",{staticClass:"group-header"},[e("span",{staticClass:"group-name"},[e("a-icon",{staticStyle:{"margin-right":"8px"},attrs:{type:"inbox"}}),t._v(" "+t._s(t.$t("portfolio.groups.ungrouped"))+" ")],1),e("span",{staticClass:"group-stats"},[e("span",{staticClass:"count"},[t._v(t._s(t.ungroupedPositions.length)+" "+t._s(t.$t("portfolio.positions.items")))]),e("span",{staticClass:"group-pnl",class:t.getGroupPnl(t.ungroupedPositions)>=0?"positive":"negative"},[t._v(" "+t._s(t.getGroupPnl(t.ungroupedPositions)>=0?"+":"")+"$"+t._s(t.formatNumber(t.getGroupPnl(t.ungroupedPositions)))+" ")])])])]),e("div",{staticClass:"position-grid compact"},t._l(t.ungroupedPositions,function(o){return e("div",{key:o.id,staticClass:"position-card compact",class:{profit:o.pnl>=0,loss:o.pnl<0}},[e("div",{staticClass:"position-header"},[e("div",{staticClass:"symbol-info"},[e("a-tag",{attrs:{color:t.getMarketColor(o.market),size:"small"}},[t._v(t._s(t.getMarketName(o.market)))]),e("span",{staticClass:"symbol"},[t._v(t._s(o.symbol))]),e("span",{staticClass:"name"},[t._v(t._s(o.name))])],1),e("div",{staticClass:"position-actions"},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.editPosition(o)}}},[e("a-icon",{attrs:{type:"edit"}})],1),e("a-popconfirm",{attrs:{title:t.$t("portfolio.positions.deleteConfirm")},on:{confirm:function(e){return t.deletePosition(o.id)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}})],1)],1)],1)]),e("div",{staticClass:"position-compact-body"},[e("div",{staticClass:"compact-item"},[e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatPrice(o.current_price)))]),e("span",{staticClass:"change",class:o.price_change>=0?"up":"down"},[t._v(" "+t._s(o.price_change>=0?"▲":"▼")+t._s(Math.abs(o.price_change_percent).toFixed(2))+"% ")])]),e("div",{staticClass:"compact-item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.quantity"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatNumber(o.quantity,4)))])]),e("div",{staticClass:"compact-item pnl",class:o.pnl>=0?"positive":"negative"},[t._v(" "+t._s(o.pnl>=0?"+":"")+t._s(t.getCurrencySymbol(o.market))+t._s(t.formatNumber(o.pnl))+" "),e("span",{staticClass:"percent"},[t._v("("+t._s(o.pnl_percent>=0?"+":"")+t._s(o.pnl_percent)+"%)")])])])])}),0)],2):t._e(),t._l(t.groupsWithPositions,function(o){return e("a-collapse-panel",{key:o.name,staticClass:"group-panel"},[e("template",{slot:"header"},[e("div",{staticClass:"group-header"},[e("span",{staticClass:"group-name"},[e("a-icon",{staticStyle:{"margin-right":"8px",color:"#1890ff"},attrs:{type:"folder"}}),t._v(" "+t._s(o.name)+" ")],1),e("span",{staticClass:"group-stats"},[e("span",{staticClass:"count"},[t._v(t._s(o.positions.length)+" "+t._s(t.$t("portfolio.positions.items")))]),e("span",{staticClass:"group-pnl",class:t.getGroupPnl(o.positions)>=0?"positive":"negative"},[t._v(" "+t._s(t.getGroupPnl(o.positions)>=0?"+":"")+"$"+t._s(t.formatNumber(t.getGroupPnl(o.positions)))+" ")])])])]),e("div",{staticClass:"position-grid compact"},t._l(o.positions,function(o){return e("div",{key:o.id,staticClass:"position-card compact",class:{profit:o.pnl>=0,loss:o.pnl<0}},[e("div",{staticClass:"position-header"},[e("div",{staticClass:"symbol-info"},[e("a-tag",{attrs:{color:t.getMarketColor(o.market),size:"small"}},[t._v(t._s(t.getMarketName(o.market)))]),e("span",{staticClass:"symbol"},[t._v(t._s(o.symbol))]),e("span",{staticClass:"name"},[t._v(t._s(o.name))])],1),e("div",{staticClass:"position-actions"},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.editPosition(o)}}},[e("a-icon",{attrs:{type:"edit"}})],1),e("a-popconfirm",{attrs:{title:t.$t("portfolio.positions.deleteConfirm")},on:{confirm:function(e){return t.deletePosition(o.id)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}})],1)],1)],1)]),e("div",{staticClass:"position-compact-body"},[e("div",{staticClass:"compact-item"},[e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatPrice(o.current_price)))]),e("span",{staticClass:"change",class:o.price_change>=0?"up":"down"},[t._v(" "+t._s(o.price_change>=0?"▲":"▼")+t._s(Math.abs(o.price_change_percent).toFixed(2))+"% ")])]),e("div",{staticClass:"compact-item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.quantity"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatNumber(o.quantity,4)))])]),e("div",{staticClass:"compact-item pnl",class:o.pnl>=0?"positive":"negative"},[t._v(" "+t._s(o.pnl>=0?"+":"")+t._s(t.getCurrencySymbol(o.market))+t._s(t.formatNumber(o.pnl))+" "),e("span",{staticClass:"percent"},[t._v("("+t._s(o.pnl_percent>=0?"+":"")+t._s(o.pnl_percent)+"%)")])])])])}),0)],2)})],2)],1)])])],1),e("div",{ref:"monitorsSection",staticClass:"monitors-section"},[e("div",{staticClass:"section-header"},[e("h3",[e("a-icon",{attrs:{type:"eye"}}),e("span",[t._v(t._s(t.$t("portfolio.monitors.title")))])],1),e("a-button",{attrs:{type:"primary"},on:{click:t.openAddMonitorModal}},[e("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("portfolio.monitors.add"))+" ")],1)],1),e("a-spin",{attrs:{spinning:t.loadingMonitors}},[e("div",{staticClass:"monitors-list"},[0===t.monitors.length?e("div",{staticClass:"empty-state small"},[e("a-empty",{attrs:{description:t.$t("portfolio.monitors.empty"),image:t.simpleImage}},[e("a-button",{attrs:{type:"primary",size:"small"},on:{click:t.openAddMonitorModal}},[e("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("portfolio.monitors.addFirst"))+" ")],1)],1)],1):e("div",t._l(t.monitors,function(o){return e("div",{key:o.id,staticClass:"monitor-card"},[e("div",{staticClass:"monitor-header"},[e("div",{staticClass:"monitor-name"},[e("a-icon",{attrs:{type:"robot"}}),e("span",[t._v(t._s(o.name))])],1),e("a-switch",{attrs:{checked:o.is_active,size:"small"},on:{change:function(e){return t.toggleMonitor(o.id,e)}}})],1),e("div",{staticClass:"monitor-body"},[e("div",{staticClass:"monitor-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.monitors.interval"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.getIntervalText(o.config.interval_minutes)))])]),e("div",{staticClass:"monitor-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.form.monitorScope"))+":")]),e("span",{staticClass:"value"},[t.getMonitorPositionIds(o).length>0?[e("a-tooltip",[e("template",{slot:"title"},t._l(t.getMonitorPositionIds(o),function(o){return e("div",{key:o},[t._v(" "+t._s(t.getPositionNameById(o))+" ")])}),0),e("span",{staticClass:"scope-selected"},[t._v(" "+t._s(t.$t("portfolio.form.selectedCount",{count:t.getMonitorPositionIds(o).length,total:t.positions.length}))+" ")])],2)]:e("span",{staticClass:"scope-all"},[t._v(t._s(t.$t("portfolio.form.allPositions")))])],2)]),o.last_run_at?e("div",{staticClass:"monitor-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.monitors.lastRun"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatTime(o.last_run_at)))])]):t._e(),o.next_run_at&&o.is_active?e("div",{staticClass:"monitor-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.monitors.nextRun"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatTime(o.next_run_at)))])]):t._e(),o.notification_config.channels?e("div",{staticClass:"monitor-channels"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.monitors.channels"))+":")]),t._l(o.notification_config.channels,function(o){return e("a-tag",{key:o,attrs:{size:"small"}},[t._v(" "+t._s(o)+" ")])})],2):t._e()]),e("div",{staticClass:"monitor-actions"},[e("a-button",{attrs:{type:"link",size:"small",loading:t.runningMonitor===o.id},on:{click:function(e){return t.runMonitorNow(o.id)}}},[e("a-icon",{attrs:{type:"play-circle"}}),t._v(" "+t._s(t.$t("portfolio.monitors.runNow"))+" ")],1),e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.editMonitor(o)}}},[e("a-icon",{attrs:{type:"edit"}})],1),e("a-popconfirm",{attrs:{title:t.$t("portfolio.monitors.deleteConfirm")},on:{confirm:function(e){return t.deleteMonitor(o.id)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}})],1)],1)],1)])}),0)])])],1)]),e("a-modal",{attrs:{title:t.editingPosition?t.$t("portfolio.modal.editPosition"):t.$t("portfolio.modal.addPosition"),visible:t.showAddPositionModal,confirmLoading:t.savingPosition,width:"600px"},on:{ok:t.handleSavePosition,cancel:t.closePositionModal}},[e("a-form",{attrs:{form:t.positionForm,"label-col":{span:6},"wrapper-col":{span:16}}},[e("a-form-item",{attrs:{label:t.$t("portfolio.form.market")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["market",{rules:[{required:!0,message:t.$t("portfolio.form.marketRequired")}]}],expression:"['market', { rules: [{ required: true, message: $t('portfolio.form.marketRequired') }] }]"}],attrs:{placeholder:t.$t("portfolio.form.selectMarket"),disabled:!!t.editingPosition},on:{change:t.handleMarketChange}},t._l(t.marketTypes,function(o){return e("a-select-option",{key:o.value,attrs:{value:o.value}},[t._v(" "+t._s(t.$t(o.i18nKey))+" ")])}),1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.symbol")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["symbol",{rules:[{required:!0,message:t.$t("portfolio.form.symbolRequired")}]}],expression:"['symbol', { rules: [{ required: true, message: $t('portfolio.form.symbolRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{"show-search":"",placeholder:t.$t("portfolio.form.searchSymbol"),"default-active-first-option":!1,"show-arrow":!1,"filter-option":!1,"not-found-content":null,disabled:!!t.editingPosition},on:{search:t.handleSymbolSearch,change:t.handleSymbolSelect}},[t._l(t.symbolSearchResults,function(o){return e("a-select-option",{key:o.symbol,attrs:{value:o.symbol}},[e("div",{staticClass:"symbol-option"},[e("strong",[t._v(t._s(o.symbol))]),e("span",{staticClass:"symbol-name"},[t._v(t._s(o.name))])])])}),t.symbolSearchKeyword&&0===t.symbolSearchResults.length?e("a-select-option",{key:"__manual__"+t.symbolSearchKeyword.toUpperCase(),attrs:{value:t.symbolSearchKeyword.toUpperCase()}},[e("div",{staticClass:"symbol-option manual-input"},[e("a-icon",{staticStyle:{"margin-right":"6px",color:"#1890ff"},attrs:{type:"edit"}}),e("span",[t._v(t._s(t.$t("portfolio.form.useAsSymbol"))+" ")]),e("strong",{staticStyle:{color:"#1890ff"}},[t._v(t._s(t.symbolSearchKeyword.toUpperCase()))]),e("span",[t._v(" "+t._s(t.$t("portfolio.form.asSymbolCode")))])],1)]):t._e()],2),e("div",{staticClass:"symbol-hint",staticStyle:{"font-size":"12px",color:"#999","margin-top":"4px"}},[t._v(" "+t._s(t.$t("portfolio.form.symbolHint"))+" ")])],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.side")}},[e("a-radio-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["side",{initialValue:"long"}],expression:"['side', { initialValue: 'long' }]"}],attrs:{disabled:!!t.editingPosition}},[e("a-radio-button",{attrs:{value:"long"}},[t._v(t._s(t.$t("portfolio.positions.long")))]),e("a-radio-button",{attrs:{value:"short"}},[t._v(t._s(t.$t("portfolio.positions.short")))])],1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.quantity")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["quantity",{rules:[{required:!0,message:t.$t("portfolio.form.quantityRequired")}]}],expression:"['quantity', { rules: [{ required: true, message: $t('portfolio.form.quantityRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{min:1e-8,step:1,placeholder:t.$t("portfolio.form.enterQuantity")}})],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.entryPrice")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["entry_price",{rules:[{required:!0,message:t.$t("portfolio.form.entryPriceRequired")}]}],expression:"['entry_price', { rules: [{ required: true, message: $t('portfolio.form.entryPriceRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{min:1e-8,step:.01,placeholder:t.$t("portfolio.form.enterEntryPrice")}})],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.notes")}},[e("a-textarea",{directives:[{name:"decorator",rawName:"v-decorator",value:["notes"],expression:"['notes']"}],attrs:{rows:2,placeholder:t.$t("portfolio.form.enterNotes")}})],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.group")}},[e("a-auto-complete",{directives:[{name:"decorator",rawName:"v-decorator",value:["group_name"],expression:"['group_name']"}],attrs:{placeholder:t.$t("portfolio.form.enterGroup"),dataSource:t.groupNames}})],1)],1)],1),e("a-modal",{attrs:{title:t.editingAlert?t.$t("portfolio.modal.editAlert"):t.$t("portfolio.modal.addAlert"),visible:t.showAddAlertModal,width:"560px"},on:{cancel:t.closeAlertModal}},[e("template",{slot:"footer"},[e("div",{staticClass:"alert-modal-footer"},[t.editingAlert?e("a-button",{attrs:{type:"danger",ghost:"",loading:t.deletingAlert},on:{click:t.confirmDeleteAlert}},[e("a-icon",{attrs:{type:"delete"}}),t._v(" "+t._s(t.$t("portfolio.alerts.delete"))+" ")],1):e("span"),e("div",{staticClass:"footer-right"},[e("a-button",{on:{click:t.closeAlertModal}},[t._v(t._s(t.$t("common.cancel")))]),e("a-button",{attrs:{type:"primary",loading:t.savingAlert},on:{click:t.handleSaveAlert}},[t._v(" "+t._s(t.$t("common.save"))+" ")])],1)],1)]),e("a-form",{attrs:{form:t.alertForm,"label-col":{span:6},"wrapper-col":{span:16}}},[e("a-form-item",{attrs:{label:t.$t("portfolio.form.symbol")}},[e("div",{staticClass:"alert-symbol-info"},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["symbol"],expression:"['symbol']"}],staticClass:"symbol-input",attrs:{disabled:""}}),t.alertPosition?e("div",{staticClass:"current-price-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.alerts.currentPrice"))+":")]),e("span",{staticClass:"price"},[t._v("$"+t._s(t.formatNumber(t.alertPosition.current_price||t.alertPosition.entry_price)))])]):t._e()],1)]),e("a-form-item",{attrs:{label:t.$t("portfolio.alerts.alertType")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["alert_type",{initialValue:"price_above",rules:[{required:!0}]}],expression:"['alert_type', { initialValue: 'price_above', rules: [{ required: true }] }]"}]},[e("a-select-option",{attrs:{value:"price_above"}},[e("a-icon",{staticStyle:{color:"#52c41a","margin-right":"6px"},attrs:{type:"rise"}}),t._v(" "+t._s(t.$t("portfolio.alerts.priceAbove"))+" ")],1),e("a-select-option",{attrs:{value:"price_below"}},[e("a-icon",{staticStyle:{color:"#f5222d","margin-right":"6px"},attrs:{type:"fall"}}),t._v(" "+t._s(t.$t("portfolio.alerts.priceBelow"))+" ")],1),e("a-select-option",{attrs:{value:"pnl_above"}},[e("a-icon",{staticStyle:{color:"#52c41a","margin-right":"6px"},attrs:{type:"dollar"}}),t._v(" "+t._s(t.$t("portfolio.alerts.pnlAbove"))+" ")],1),e("a-select-option",{attrs:{value:"pnl_below"}},[e("a-icon",{staticStyle:{color:"#f5222d","margin-right":"6px"},attrs:{type:"dollar"}}),t._v(" "+t._s(t.$t("portfolio.alerts.pnlBelow"))+" ")],1)],1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.alerts.threshold")}},[e("div",{staticClass:"threshold-input-wrapper"},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["threshold",{rules:[{required:!0,message:t.$t("portfolio.alerts.thresholdRequired")}]}],expression:"['threshold', { rules: [{ required: true, message: $t('portfolio.alerts.thresholdRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{step:t.alertTypeIsPrice?.01:1,placeholder:t.alertTypeIsPrice?t.$t("portfolio.alerts.enterPrice"):t.$t("portfolio.alerts.enterPercent"),precision:t.alertTypeIsPrice?4:2}}),t.alertTypeIsPrice?e("span",{staticClass:"alert-unit"},[t._v("$")]):e("span",{staticClass:"alert-unit"},[t._v("%")])],1),t.alertPosition&&t.alertTypeIsPrice?e("div",{staticClass:"threshold-hint"},[t._v(" "+t._s(t.$t("portfolio.alerts.currentPriceHint"))+": $"+t._s(t.formatNumber(t.alertPosition.current_price||t.alertPosition.entry_price))+" ")]):t._e()]),e("a-form-item",{attrs:{label:t.$t("portfolio.alerts.repeatInterval")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["repeat_interval",{initialValue:0}],expression:"['repeat_interval', { initialValue: 0 }]"}]},[e("a-select-option",{attrs:{value:0}},[t._v(t._s(t.$t("portfolio.alerts.noRepeat")))]),e("a-select-option",{attrs:{value:5}},[t._v(t._s(t.$t("portfolio.alerts.every5min")))]),e("a-select-option",{attrs:{value:15}},[t._v(t._s(t.$t("portfolio.alerts.every15min")))]),e("a-select-option",{attrs:{value:30}},[t._v(t._s(t.$t("portfolio.alerts.every30min")))]),e("a-select-option",{attrs:{value:60}},[t._v(t._s(t.$t("portfolio.alerts.every1hour")))]),e("a-select-option",{attrs:{value:240}},[t._v(t._s(t.$t("portfolio.alerts.every4hours")))]),e("a-select-option",{attrs:{value:1440}},[t._v(t._s(t.$t("portfolio.alerts.onceDaily")))])],1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.notifyChannels")}},[e("a-checkbox-group",{model:{value:t.alertChannels,callback:function(e){t.alertChannels=e},expression:"alertChannels"}},[e("a-checkbox",{attrs:{value:"browser"}},[e("a-icon",{attrs:{type:"bell"}}),t._v(" "+t._s(t.$t("portfolio.form.browser"))+" ")],1),e("a-checkbox",{attrs:{value:"telegram"}},[e("a-icon",{attrs:{type:"message"}}),t._v(" Telegram ")],1),e("a-checkbox",{attrs:{value:"email"}},[e("a-icon",{attrs:{type:"mail"}}),t._v(" "+t._s(t.$t("portfolio.form.email"))+" ")],1)],1)],1),t.alertChannels.includes("telegram")||t.alertChannels.includes("email")?e("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"info",showIcon:""},scopedSlots:t._u([{key:"message",fn:function(){return[e("span",[t._v(" "+t._s(t.$t("portfolio.form.notificationFromProfile"))+" "),e("router-link",{staticStyle:{"margin-left":"8px"},attrs:{to:"/profile"}},[e("a-icon",{attrs:{type:"setting"}}),t._v(" "+t._s(t.$t("portfolio.form.goToProfile"))+" ")],1)],1)]},proxy:!0}],null,!1,440262090)}):t._e(),e("a-form-item",{attrs:{label:t.$t("portfolio.alerts.enabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["is_active",{initialValue:!0,valuePropName:"checked"}],expression:"['is_active', { initialValue: true, valuePropName: 'checked' }]"}]}),e("span",{staticClass:"switch-label"},[t._v(t._s(t.$t("portfolio.alerts.enabledDesc")))])],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.notes")}},[e("a-textarea",{directives:[{name:"decorator",rawName:"v-decorator",value:["notes"],expression:"['notes']"}],attrs:{placeholder:t.$t("portfolio.form.enterNotes"),autoSize:{minRows:2,maxRows:4}}})],1)],1)],2),e("a-modal",{attrs:{title:t.editingMonitor?t.$t("portfolio.modal.editMonitor"):t.$t("portfolio.modal.addMonitor"),visible:t.showAddMonitorModal,confirmLoading:t.savingMonitor,width:"600px"},on:{ok:t.handleSaveMonitor,cancel:t.closeMonitorModal}},[e("a-form",{attrs:{form:t.monitorForm,"label-col":{span:6},"wrapper-col":{span:16}}},[e("a-form-item",{attrs:{label:t.$t("portfolio.form.monitorName")}},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["name",{rules:[{required:!0,message:t.$t("portfolio.form.monitorNameRequired")}]}],expression:"['name', { rules: [{ required: true, message: $t('portfolio.form.monitorNameRequired') }] }]"}],attrs:{placeholder:t.$t("portfolio.form.enterMonitorName")}})],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.interval")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["interval_minutes",{initialValue:60,rules:[{required:!0}]}],expression:"['interval_minutes', { initialValue: 60, rules: [{ required: true }] }]"}]},[e("a-select-option",{attrs:{value:5}},[t._v("5 "+t._s(t.$t("portfolio.form.minutes")))]),e("a-select-option",{attrs:{value:10}},[t._v("10 "+t._s(t.$t("portfolio.form.minutes")))]),e("a-select-option",{attrs:{value:30}},[t._v("30 "+t._s(t.$t("portfolio.form.minutes")))]),e("a-select-option",{attrs:{value:60}},[t._v("1 "+t._s(t.$t("portfolio.form.hour")))]),e("a-select-option",{attrs:{value:120}},[t._v("2 "+t._s(t.$t("portfolio.form.hours")))]),e("a-select-option",{attrs:{value:240}},[t._v("4 "+t._s(t.$t("portfolio.form.hours")))]),e("a-select-option",{attrs:{value:480}},[t._v("8 "+t._s(t.$t("portfolio.form.hours")))]),e("a-select-option",{attrs:{value:1440}},[t._v("24 "+t._s(t.$t("portfolio.form.hours")))])],1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.notifyChannels")}},[e("a-checkbox-group",{model:{value:t.monitorChannels,callback:function(e){t.monitorChannels=e},expression:"monitorChannels"}},[e("a-checkbox",{attrs:{value:"browser"}},[t._v(t._s(t.$t("portfolio.form.browser")))]),e("a-checkbox",{attrs:{value:"telegram"}},[t._v("Telegram")]),e("a-checkbox",{attrs:{value:"email"}},[t._v(t._s(t.$t("portfolio.form.email")))])],1)],1),t.monitorChannels.includes("telegram")||t.monitorChannels.includes("email")?e("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"info",showIcon:""},scopedSlots:t._u([{key:"message",fn:function(){return[e("span",[t._v(" "+t._s(t.$t("portfolio.form.notificationFromProfile"))+" "),e("router-link",{staticStyle:{"margin-left":"8px"},attrs:{to:"/profile"}},[e("a-icon",{attrs:{type:"setting"}}),t._v(" "+t._s(t.$t("portfolio.form.goToProfile"))+" ")],1)],1)]},proxy:!0}],null,!1,440262090)}):t._e(),e("a-form-item",{attrs:{label:t.$t("portfolio.form.monitorScope")}},[e("a-radio-group",{on:{change:t.handleMonitorScopeChange},model:{value:t.monitorScope,callback:function(e){t.monitorScope=e},expression:"monitorScope"}},[e("a-radio",{attrs:{value:"all"}},[t._v(t._s(t.$t("portfolio.form.allPositions")))]),e("a-radio",{attrs:{value:"selected"}},[t._v(t._s(t.$t("portfolio.form.selectedPositions")))])],1)],1),"selected"===t.monitorScope?e("a-form-item",{attrs:{label:t.$t("portfolio.form.selectPositions")}},[e("a-checkbox-group",{staticClass:"position-checkbox-group",model:{value:t.selectedMonitorPositions,callback:function(e){t.selectedMonitorPositions=e},expression:"selectedMonitorPositions"}},t._l(t.positions,function(o){return e("div",{key:o.id,staticClass:"position-checkbox-item"},[e("a-checkbox",{staticClass:"position-checkbox",attrs:{value:o.id}},[e("div",{staticClass:"position-checkbox-label"},[e("div",{staticClass:"position-left"},[e("a-tag",{attrs:{color:t.getMarketColor(o.market),size:"small"}},[t._v(t._s(o.market))]),e("span",{staticClass:"symbol"},[t._v(t._s(o.symbol))])],1),e("div",{staticClass:"position-middle"},[e("span",{staticClass:"name",attrs:{title:o.name}},[t._v(t._s(o.name))])]),e("div",{staticClass:"position-right"},[e("span",{class:["pnl",o.pnl>=0?"positive":"negative"]},[t._v(" "+t._s(o.pnl>=0?"+":"")+t._s(t.formatNumber(o.pnl_percent))+"% ")])])])])],1)}),0),e("div",{staticClass:"position-select-actions"},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:t.selectAllPositions}},[t._v(" "+t._s(t.$t("portfolio.form.selectAll"))+" ")]),e("a-divider",{attrs:{type:"vertical"}}),e("a-button",{attrs:{type:"link",size:"small"},on:{click:t.deselectAllPositions}},[t._v(" "+t._s(t.$t("portfolio.form.deselectAll"))+" ")]),e("span",{staticClass:"selected-count"},[t._v(" "+t._s(t.$t("portfolio.form.selectedCount",{count:t.selectedMonitorPositions.length,total:t.positions.length}))+" ")])],1)],1):t._e(),e("a-form-item",{attrs:{label:t.$t("portfolio.form.customPrompt")}},[e("a-textarea",{directives:[{name:"decorator",rawName:"v-decorator",value:["prompt"],expression:"['prompt']"}],attrs:{rows:3,placeholder:t.$t("portfolio.form.customPromptPlaceholder")}})],1)],1)],1)],1)},i=[],a=o(2403),r=o(81127),n=o(56252),l=o(76338),c=(o(93693),o(2970)),u=o(95353),p=o(75769);function m(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,p.Ay)({url:"/api/portfolio/positions",method:"get",params:t})}function d(t){return(0,p.Ay)({url:"/api/portfolio/positions",method:"post",data:t})}function f(t,e){return(0,p.Ay)({url:"/api/portfolio/positions/".concat(t),method:"put",data:e})}function v(t){return(0,p.Ay)({url:"/api/portfolio/positions/".concat(t),method:"delete"})}function h(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,p.Ay)({url:"/api/portfolio/summary",method:"get",params:t})}function _(){return(0,p.Ay)({url:"/api/portfolio/monitors",method:"get"})}function g(t){return(0,p.Ay)({url:"/api/portfolio/monitors",method:"post",data:t})}function y(t,e){return(0,p.Ay)({url:"/api/portfolio/monitors/".concat(t),method:"put",data:e})}function b(t){return(0,p.Ay)({url:"/api/portfolio/monitors/".concat(t),method:"delete"})}function C(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(0,p.Ay)({url:"/api/portfolio/monitors/".concat(t,"/run"),method:"post",data:e})}function $(){return(0,p.Ay)({url:"/api/portfolio/alerts",method:"get"})}function k(t){return(0,p.Ay)({url:"/api/portfolio/alerts",method:"post",data:t})}function w(t,e){return(0,p.Ay)({url:"/api/portfolio/alerts/".concat(t),method:"put",data:e})}function A(t){return(0,p.Ay)({url:"/api/portfolio/alerts/".concat(t),method:"delete"})}function S(){return(0,p.Ay)({url:"/api/portfolio/groups",method:"get"})}function P(t){return(0,p.Ay)({url:"/api/market/symbols/search",method:"post",data:t})}function M(){return(0,p.Ay)({url:"/api/market/types",method:"get"})}var N=o(84841),x={name:"Portfolio",props:{embedded:{type:Boolean,default:!1}},data:function(){return{simpleImage:c.Ay.PRESENTED_IMAGE_SIMPLE,summary:{total_cost:0,total_market_value:0,total_pnl:0,total_pnl_percent:0,position_count:0,market_distribution:[],today_pnl:0,today_change:0},positions:[],loadingPositions:!1,showAddPositionModal:!1,savingPosition:!1,editingPosition:null,positionForm:null,monitors:[],loadingMonitors:!1,showAddMonitorModal:!1,savingMonitor:!1,editingMonitor:null,monitorForm:null,runningMonitor:null,marketTypes:[],symbolSearchResults:[],searchTimer:null,selectedSymbolName:"",symbolSearchKeyword:"",priceRefreshTimer:null,lastSyncTime:null,isSyncing:!1,groups:[],selectedGroup:"",viewMode:"grid",activeGroups:[],alerts:[],loadingAlerts:!1,showAddAlertModal:!1,savingAlert:!1,deletingAlert:!1,editingAlert:null,alertForm:null,alertPosition:null,alertChannels:["browser"],monitorChannels:["browser"],monitorScope:"all",selectedMonitorPositions:[],userNotificationSettings:{default_channels:["browser"],telegram_bot_token:"",telegram_chat_id:"",email:"",phone:"",discord_webhook:"",webhook_url:"",webhook_token:""}}},computed:(0,l.A)((0,l.A)({},(0,u.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},selectedChannels:function(){return this.monitorChannels||[]},selectedAlertChannels:function(){return this.alertChannels||[]},filteredPositions:function(){var t=this;return this.selectedGroup?"__ungrouped__"===this.selectedGroup?this.positions.filter(function(t){return!t.group_name}):this.positions.filter(function(e){return e.group_name===t.selectedGroup}):this.positions},groupNames:function(){return this.groups.map(function(t){return t.name})},alertTypeIsPrice:function(){if(!this.alertForm)return!0;var t=this.alertForm.getFieldValue("alert_type");return t&&t.startsWith("price_")},profitLossStats:function(){var t=this.positions.filter(function(t){return t.pnl>=0}).length,e=this.positions.filter(function(t){return t.pnl<0}).length;return{profit:t,loss:e}},bestPerformer:function(){return 0===this.positions.length?null:this.positions.reduce(function(t,e){return!t||(e.pnl_percent||0)>(t.pnl_percent||0)?e:t},null)},worstPerformer:function(){return 0===this.positions.length?null:this.positions.reduce(function(t,e){return!t||(e.pnl_percent||0)<(t.pnl_percent||0)?e:t},null)},ungroupedPositions:function(){return this.positions.filter(function(t){return!t.group_name})},groupsWithPositions:function(){var t={};return this.positions.forEach(function(e){e.group_name&&(t[e.group_name]||(t[e.group_name]={name:e.group_name,positions:[]}),t[e.group_name].positions.push(e))}),Object.values(t).sort(function(t,e){return t.name.localeCompare(e.name)})}}),created:function(){this.positionForm=this.$form.createForm(this,{name:"position_form"}),this.monitorForm=this.$form.createForm(this,{name:"monitor_form"}),this.alertForm=this.$form.createForm(this,{name:"alert_form"}),this.loadMarketTypes(),this.loadData()},mounted:function(){var t=this;this.priceRefreshTimer=setInterval(function(){t.refreshPrices()},3e4),this.loadUserNotificationSettings()},beforeDestroy:function(){this.priceRefreshTimer&&clearInterval(this.priceRefreshTimer),this.searchTimer&&clearTimeout(this.searchTimer)},methods:{loadUserNotificationSettings:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,N.vF)();case 1:o=e.v,1===o.code&&o.data&&(t.userNotificationSettings={default_channels:o.data.default_channels||["browser"],telegram_bot_token:o.data.telegram_bot_token||"",telegram_chat_id:o.data.telegram_chat_id||"",email:o.data.email||"",phone:o.data.phone||"",discord_webhook:o.data.discord_webhook||"",webhook_url:o.data.webhook_url||"",webhook_token:o.data.webhook_token||""}),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadData:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.n){case 0:return e.n=1,Promise.all([t.loadPositions(),t.loadSummary(),t.loadMonitors(),t.loadGroups(),t.loadAlerts()]);case 1:t.lastSyncTime=new Date;case 2:return e.a(2)}},e)}))()},filterByGroup:function(){},refreshPrices:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!t.isSyncing){e.n=1;break}return e.a(2);case 1:return t.isSyncing=!0,e.p=2,e.n=3,Promise.all([t.loadPositions(!0),t.loadSummary(!0)]);case 3:t.lastSyncTime=new Date;case 4:return e.p=4,t.isSyncing=!1,e.f(4);case 5:return e.a(2)}},e,null,[[2,,4,5]])}))()},formatSyncTime:function(t){if(!t)return"-";var e=new Date,o=Math.floor((e-t)/1e3);return o<60?this.$t("portfolio.summary.justNow"):o<3600?"".concat(Math.floor(o/60)," ").concat(this.$t("portfolio.form.minutes")).concat(this.$t("portfolio.summary.ago")):t.toLocaleTimeString()},getGroupPnl:function(t){return t.reduce(function(t,e){return t+(e.pnl||0)},0)},loadGroups:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,S();case 1:o=e.v,o&&1===o.code&&o.data&&(t.groups=o.data.groups||[]),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadAlerts:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loadingAlerts=!0,e.p=1,e.n=2,$();case 2:o=e.v,o&&1===o.code&&(t.alerts=o.data||[]),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.p=4,t.loadingAlerts=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},loadMarketTypes:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,M();case 1:o=e.v,o&&1===o.code&&o.data&&(t.marketTypes=o.data.map(function(t){return{value:t.value,i18nKey:t.i18nKey||"dashboard.analysis.market.".concat(t.value)}})),e.n=3;break;case 2:e.p=2,e.v,t.marketTypes=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}];case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadPositions:function(){var t=arguments,e=this;return(0,n.A)((0,r.A)().m(function o(){var s,i,a;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return s=t.length>0&&void 0!==t[0]&&t[0],e.loadingPositions=!0,o.p=1,i=s?{refresh:"1"}:{},o.n=2,m(i);case 2:a=o.v,a&&1===a.code&&(e.positions=a.data||[]),o.n=4;break;case 3:o.p=3,o.v,e.$message.error(e.$t("portfolio.message.loadFailed"));case 4:return o.p=4,e.loadingPositions=!1,o.f(4);case 5:return o.a(2)}},o,null,[[1,3,4,5]])}))()},loadSummary:function(){var t=arguments,e=this;return(0,n.A)((0,r.A)().m(function o(){var s,i;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return s=t.length>0&&void 0!==t[0]&&t[0],o.p=1,o.n=2,h(s?{refresh:"1"}:{});case 2:i=o.v,i&&1===i.code&&(e.summary=i.data||e.summary),o.n=4;break;case 3:o.p=3,o.v;case 4:return o.a(2)}},o,null,[[1,3]])}))()},loadMonitors:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loadingMonitors=!0,e.p=1,e.n=2,_();case 2:o=e.v,o&&1===o.code&&(t.monitors=o.data||[]),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.p=4,t.loadingMonitors=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleMarketChange:function(t){this.symbolSearchResults=[],this.symbolSearchKeyword="",this.positionForm.setFieldsValue({symbol:""})},handleSymbolSearch:function(t){var e=this;this.symbolSearchKeyword=t||"",this.searchTimer&&clearTimeout(this.searchTimer),!t||t.length<1?this.symbolSearchResults=[]:this.searchTimer=setTimeout((0,n.A)((0,r.A)().m(function o(){var s,i;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:if(s=e.positionForm.getFieldValue("market"),s){o.n=1;break}return o.a(2);case 1:return o.p=1,o.n=2,P({market:s,keyword:t,limit:10});case 2:i=o.v,i&&1===i.code?e.symbolSearchResults=i.data||[]:e.symbolSearchResults=[],o.n=4;break;case 3:o.p=3,o.v,e.symbolSearchResults=[];case 4:return o.a(2)}},o,null,[[1,3]])})),300)},handleSymbolSelect:function(t,e){var o=this.symbolSearchResults.find(function(e){return e.symbol===t});this.selectedSymbolName=o?o.name:"",this.symbolSearchKeyword=""},editPosition:function(t){var e=this;this.editingPosition=t,this.showAddPositionModal=!0,this.$nextTick(function(){e.positionForm.setFieldsValue({market:t.market,symbol:t.symbol,side:t.side,quantity:t.quantity,entry_price:t.entry_price,notes:t.notes,group_name:t.group_name||""})})},handleSavePosition:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.n){case 0:t.positionForm.validateFields(function(){var e=(0,n.A)((0,r.A)().m(function e(o,s){var i,a,n;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!o){e.n=1;break}return e.a(2);case 1:if(t.savingPosition=!0,e.p=2,i={market:s.market,symbol:s.symbol.toUpperCase(),side:s.side,quantity:s.quantity,entry_price:s.entry_price,notes:s.notes||"",name:t.selectedSymbolName||"",group_name:s.group_name||""},!t.editingPosition){e.n=4;break}return e.n=3,f(t.editingPosition.id,i);case 3:a=e.v,e.n=6;break;case 4:return e.n=5,d(i);case 5:a=e.v;case 6:a&&1===a.code?(t.$message.success(t.$t("portfolio.message.saveSuccess")),t.closePositionModal(),t.loadData()):t.$message.error((null===(n=a)||void 0===n?void 0:n.msg)||t.$t("portfolio.message.saveFailed")),e.n=8;break;case 7:e.p=7,e.v,t.$message.error(t.$t("portfolio.message.saveFailed"));case 8:return e.p=8,t.savingPosition=!1,e.f(8);case 9:return e.a(2)}},e,null,[[2,7,8,9]])}));return function(t,o){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},deletePosition:function(t){var e=this;return(0,n.A)((0,r.A)().m(function o(){var s;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return o.p=0,o.n=1,v(t);case 1:s=o.v,s&&1===s.code?(e.$message.success(e.$t("portfolio.message.deleteSuccess")),e.loadData()):e.$message.error((null===s||void 0===s?void 0:s.msg)||e.$t("portfolio.message.deleteFailed")),o.n=3;break;case 2:o.p=2,o.v,e.$message.error(e.$t("portfolio.message.deleteFailed"));case 3:return o.a(2)}},o,null,[[0,2]])}))()},closePositionModal:function(){this.showAddPositionModal=!1,this.editingPosition=null,this.positionForm.resetFields(),this.symbolSearchResults=[],this.selectedSymbolName="",this.symbolSearchKeyword=""},handleAlertChannelsChange:function(t){this.alertChannels=t||[]},showAddAlertForPosition:function(t){var e=this,o=this.alerts.find(function(e){return e.position_id===t.id});o?this.editAlert(o):(this.editingAlert=null,this.alertPosition=t,this.alertChannels=(0,a.A)(this.userNotificationSettings.default_channels||["browser"]),this.showAddAlertModal=!0,this.$nextTick(function(){e.alertForm.setFieldsValue({symbol:"".concat(t.market,"/").concat(t.symbol),alert_type:"price_above",threshold:t.current_price||t.entry_price,repeat_interval:0,is_active:!0,notes:""})}))},editAlert:function(t){var e,o=this;this.editingAlert=t,this.alertPosition=this.positions.find(function(e){return e.id===t.position_id})||{market:t.market,symbol:t.symbol,current_price:0,entry_price:0},this.alertChannels=(0,a.A)((null===(e=t.notification_config)||void 0===e?void 0:e.channels)||["browser"]),this.showAddAlertModal=!0,this.$nextTick(function(){o.alertForm&&o.alertForm.setFieldsValue({symbol:"".concat(t.market,"/").concat(t.symbol),alert_type:t.alert_type||"price_above",threshold:t.threshold||0,repeat_interval:t.repeat_interval||0,is_active:!1!==t.is_active,notes:t.notes||""})})},handleSaveAlert:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.n){case 0:t.alertForm.validateFields(function(){var e=(0,n.A)((0,r.A)().m(function e(o,s){var i,a,n,l,c,u,p;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!o){e.n=1;break}return e.a(2);case 1:if(t.savingAlert=!0,e.p=2,l={},t.alertChannels.includes("telegram")&&t.userNotificationSettings.telegram_chat_id&&(l.telegram=t.userNotificationSettings.telegram_chat_id,t.userNotificationSettings.telegram_bot_token&&(l.telegram_bot_token=t.userNotificationSettings.telegram_bot_token)),t.alertChannels.includes("email")&&t.userNotificationSettings.email&&(l.email=t.userNotificationSettings.email),t.alertChannels.includes("phone")&&t.userNotificationSettings.phone&&(l.phone=t.userNotificationSettings.phone),t.alertChannels.includes("discord")&&t.userNotificationSettings.discord_webhook&&(l.discord=t.userNotificationSettings.discord_webhook),t.alertChannels.includes("webhook")&&t.userNotificationSettings.webhook_url&&(l.webhook=t.userNotificationSettings.webhook_url,t.userNotificationSettings.webhook_token&&(l.webhook_token=t.userNotificationSettings.webhook_token)),c={position_id:null===(i=t.alertPosition)||void 0===i?void 0:i.id,market:null===(a=t.alertPosition)||void 0===a?void 0:a.market,symbol:null===(n=t.alertPosition)||void 0===n?void 0:n.symbol,alert_type:s.alert_type,threshold:s.threshold,notification_config:{channels:t.alertChannels.length>0?t.alertChannels:["browser"],targets:l,language:t.$store.getters.lang||"en-US"},is_active:!1!==s.is_active,repeat_interval:s.repeat_interval||0,notes:s.notes||""},!t.editingAlert){e.n=4;break}return e.n=3,w(t.editingAlert.id,c);case 3:u=e.v,e.n=6;break;case 4:return e.n=5,k(c);case 5:u=e.v;case 6:u&&1===u.code?(t.$message.success(t.$t("portfolio.message.saveSuccess")),t.closeAlertModal(),t.loadAlerts()):t.$message.error((null===(p=u)||void 0===p?void 0:p.msg)||t.$t("portfolio.message.saveFailed")),e.n=8;break;case 7:e.p=7,e.v,t.$message.error(t.$t("portfolio.message.saveFailed"));case 8:return e.p=8,t.savingAlert=!1,e.f(8);case 9:return e.a(2)}},e,null,[[2,7,8,9]])}));return function(t,o){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},deleteAlert:function(t){var e=this;return(0,n.A)((0,r.A)().m(function o(){var s;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return o.p=0,o.n=1,A(t);case 1:s=o.v,s&&1===s.code?(e.$message.success(e.$t("portfolio.message.deleteSuccess")),e.loadAlerts()):e.$message.error((null===s||void 0===s?void 0:s.msg)||e.$t("portfolio.message.deleteFailed")),o.n=3;break;case 2:o.p=2,o.v,e.$message.error(e.$t("portfolio.message.deleteFailed"));case 3:return o.a(2)}},o,null,[[0,2]])}))()},closeAlertModal:function(){this.showAddAlertModal=!1,this.editingAlert=null,this.alertPosition=null,this.alertChannels=(0,a.A)(this.userNotificationSettings.default_channels||["browser"]),this.alertForm.resetFields()},confirmDeleteAlert:function(){if(this.editingAlert){var t=this;this.$confirm({title:this.$t("portfolio.alerts.deleteConfirm"),okText:this.$t("common.confirm"),okType:"danger",cancelText:this.$t("common.cancel"),onOk:function(){return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.n){case 0:return e.n=1,t.handleDeleteAlert();case 1:return e.a(2)}},e)}))()}})}},handleDeleteAlert:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.editingAlert){e.n=1;break}return e.a(2);case 1:return t.deletingAlert=!0,e.p=2,e.n=3,A(t.editingAlert.id);case 3:if(o=e.v,!o||1!==o.code){e.n=5;break}return t.$message.success(t.$t("portfolio.message.deleteSuccess")),t.closeAlertModal(),e.n=4,t.loadAlerts();case 4:e.n=6;break;case 5:t.$message.error((null===o||void 0===o?void 0:o.msg)||t.$t("portfolio.message.deleteFailed"));case 6:e.n=8;break;case 7:e.p=7,e.v,t.$message.error(t.$t("portfolio.message.deleteFailed"));case 8:return e.p=8,t.deletingAlert=!1,e.f(8);case 9:return e.a(2)}},e,null,[[2,7,8,9]])}))()},focusMonitorsSection:function(){var t=this;this.$nextTick(function(){var e=t.$refs.monitorsSection;e&&"function"===typeof e.scrollIntoView&&e.scrollIntoView({behavior:"smooth",block:"start"})})},openAddMonitorModal:function(){var t=this;this.editingMonitor=null,this.monitorChannels=(0,a.A)(this.userNotificationSettings.default_channels||["browser"]),this.monitorScope="all",this.selectedMonitorPositions=[],this.showAddMonitorModal=!0,this.$nextTick(function(){t.monitorForm&&t.monitorForm.resetFields()})},handleMonitorChannelsChange:function(t){this.monitorChannels=t||[]},editMonitor:function(t){var e,o=this;this.editingMonitor=t,this.monitorChannels=(0,a.A)((null===(e=t.notification_config)||void 0===e?void 0:e.channels)||["browser"]);var s=[];if(t.position_ids)if("string"===typeof t.position_ids)try{s=JSON.parse(t.position_ids)||[]}catch(i){s=[]}else Array.isArray(t.position_ids)&&(s=t.position_ids);this.monitorScope=s.length>0?"selected":"all",this.selectedMonitorPositions=s,this.showAddMonitorModal=!0,this.$nextTick(function(){var e,s;o.monitorForm&&o.monitorForm.setFieldsValue({name:t.name,interval_minutes:(null===(e=t.config)||void 0===e?void 0:e.interval_minutes)||60,prompt:(null===(s=t.config)||void 0===s?void 0:s.prompt)||""})})},handleMonitorScopeChange:function(t){this.monitorScope=t.target.value,"all"===t.target.value&&(this.selectedMonitorPositions=[])},selectAllPositions:function(){this.selectedMonitorPositions=this.positions.map(function(t){return t.id})},deselectAllPositions:function(){this.selectedMonitorPositions=[]},handleSaveMonitor:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.n){case 0:t.monitorForm.validateFields(function(){var e=(0,n.A)((0,r.A)().m(function e(o,s){var i,a,n;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!o){e.n=1;break}return e.a(2);case 1:if("selected"!==t.monitorScope||0!==t.selectedMonitorPositions.length){e.n=2;break}return t.$message.warning(t.$t("portfolio.form.pleaseSelectPositions")),e.a(2);case 2:if(t.savingMonitor=!0,e.p=3,i={name:s.name,monitor_type:"ai",position_ids:"selected"===t.monitorScope?t.selectedMonitorPositions:[],config:{interval_minutes:s.interval_minutes,prompt:s.prompt||"",language:t.$store.getters.lang||"en-US"},notification_config:{channels:t.monitorChannels.length>0?t.monitorChannels:["browser"],targets:{telegram:t.userNotificationSettings.telegram_chat_id||"",telegram_bot_token:t.userNotificationSettings.telegram_bot_token||"",email:t.userNotificationSettings.email||"",phone:t.userNotificationSettings.phone||"",discord:t.userNotificationSettings.discord_webhook||"",webhook:t.userNotificationSettings.webhook_url||"",webhook_token:t.userNotificationSettings.webhook_token||""}},is_active:!0},!t.editingMonitor){e.n=5;break}return e.n=4,y(t.editingMonitor.id,i);case 4:a=e.v,e.n=7;break;case 5:return e.n=6,g(i);case 6:a=e.v;case 7:a&&1===a.code?(t.$message.success(t.$t("portfolio.message.saveSuccess")),t.closeMonitorModal(),t.loadMonitors()):t.$message.error((null===(n=a)||void 0===n?void 0:n.msg)||t.$t("portfolio.message.saveFailed")),e.n=9;break;case 8:e.p=8,e.v,t.$message.error(t.$t("portfolio.message.saveFailed"));case 9:return e.p=9,t.savingMonitor=!1,e.f(9);case 10:return e.a(2)}},e,null,[[3,8,9,10]])}));return function(t,o){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},toggleMonitor:function(t,e){var o=this;return(0,n.A)((0,r.A)().m(function s(){var i;return(0,r.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return s.p=0,s.n=1,y(t,{is_active:e});case 1:i=s.v,i&&1===i.code&&(o.$message.success(e?o.$t("portfolio.message.monitorEnabled"):o.$t("portfolio.message.monitorDisabled")),o.loadMonitors()),s.n=3;break;case 2:s.p=2,s.v,o.$message.error(o.$t("portfolio.message.updateFailed"));case 3:return s.a(2)}},s,null,[[0,2]])}))()},runMonitorNow:function(t){var e=this;return(0,n.A)((0,r.A)().m(function o(){var s,i,a,n,l,c,u;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return e.runningMonitor=t,o.p=1,s=e.$store.getters.lang||"en-US",o.n=2,C(t,{language:s,async:!0});case 2:i=o.v,i&&1===i.code&&("running"===(null===(a=i.data)||void 0===a?void 0:a.status)?(e.$message.success(e.$t("portfolio.message.monitorRunning")),e.$notification.info({message:e.$t("portfolio.monitors.runningTitle"),description:e.$t("portfolio.monitors.runningDesc"),duration:5})):null!==(n=i.data)&&void 0!==n&&n.success?(e.$message.success(e.$t("portfolio.message.monitorRunSuccess")),i.data.analysis&&e.$notification.open({message:e.$t("portfolio.monitors.analysisResult"),description:i.data.analysis.substring(0,500)+(i.data.analysis.length>500?"...":""),duration:0})):null!==(l=i.data)&&void 0!==l&&l.error&&e.$message.error(i.data.error||e.$t("portfolio.message.monitorRunFailed")),e.loadMonitors()),o.n=4;break;case 3:o.p=3,u=o.v,"ECONNABORTED"===u.code||null!==(c=u.message)&&void 0!==c&&c.includes("timeout")?e.$notification.warning({message:e.$t("portfolio.monitors.timeoutTitle"),description:e.$t("portfolio.monitors.timeoutDesc"),duration:8}):e.$message.error(e.$t("portfolio.message.monitorRunFailed"));case 4:return o.p=4,e.runningMonitor=null,o.f(4);case 5:return o.a(2)}},o,null,[[1,3,4,5]])}))()},deleteMonitor:function(t){var e=this;return(0,n.A)((0,r.A)().m(function o(){var s;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return o.p=0,o.n=1,b(t);case 1:s=o.v,s&&1===s.code?(e.$message.success(e.$t("portfolio.message.deleteSuccess")),e.loadMonitors()):e.$message.error((null===s||void 0===s?void 0:s.msg)||e.$t("portfolio.message.deleteFailed")),o.n=3;break;case 2:o.p=2,o.v,e.$message.error(e.$t("portfolio.message.deleteFailed"));case 3:return o.a(2)}},o,null,[[0,2]])}))()},closeMonitorModal:function(){this.showAddMonitorModal=!1,this.editingMonitor=null,this.monitorForm.resetFields(),this.monitorChannels=(0,a.A)(this.userNotificationSettings.default_channels||["browser"]),this.monitorScope="all",this.selectedMonitorPositions=[]},getMonitorPositionIds:function(t){if(!t.position_ids)return[];if("string"===typeof t.position_ids)try{return JSON.parse(t.position_ids)||[]}catch(e){return[]}return Array.isArray(t.position_ids)?t.position_ids:[]},getPositionNameById:function(t){var e=this.positions.find(function(e){return e.id===t});return e?"".concat(e.symbol," (").concat(e.name||e.market,")"):"#".concat(t)},hasAlertForPosition:function(t){return this.alerts.some(function(e){return e.position_id===t})},getAlertForPosition:function(t){return this.alerts.find(function(e){return e.position_id===t})},getMarketColor:function(t){var e={USStock:"green",Crypto:"purple",Forex:"gold",Futures:"cyan"};return e[t]||"default"},getMarketName:function(t){return this.$t("dashboard.analysis.market.".concat(t))||t},getCurrencySymbol:function(t){var e=["USStock","Crypto","Forex","Futures"];return e.includes(t)?"$":"¥"},formatNumber:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return void 0===t||null===t?"0.00":Number(t).toLocaleString("en-US",{minimumFractionDigits:e,maximumFractionDigits:e})},formatPrice:function(t){return t?t>=1e3?this.formatNumber(t,2):t>=1?this.formatNumber(t,4):this.formatNumber(t,6):"0"},formatTime:function(t){if(!t)return"-";var e;if("number"===typeof t)e=new Date(1e3*t);else{if("string"!==typeof t)return"-";e=/^\d+$/.test(t)?new Date(1e3*parseInt(t,10)):new Date(t)}return isNaN(e.getTime())?"-":e.toLocaleString()},getIntervalText:function(t){if(!t)return"-";if(t<60)return"".concat(t," ").concat(this.$t("portfolio.form.minutes"));var e=t/60;return"".concat(e," ").concat(this.$t("portfolio.form.hours"))}}},F=x,T=o(845),q=(0,T.A)(F,s,i,!1,null,"398d904c",null),R=q.exports},84841:function(t,e,o){o.d(e,{DK:function(){return g},E$:function(){return u},Gl:function(){return d},O0:function(){return c},TK:function(){return r},aU:function(){return i},cw:function(){return l},d$:function(){return b},hG:function(){return n},kg:function(){return a},nY:function(){return _},r7:function(){return p},rx:function(){return v},v9:function(){return f},vF:function(){return m},vi:function(){return y},wq:function(){return h}});var s=o(75769);function i(t){return(0,s.Ay)({url:"/api/users/list",method:"get",params:t})}function a(t){return(0,s.Ay)({url:"/api/users/create",method:"post",data:t})}function r(t,e){return(0,s.Ay)({url:"/api/users/update",method:"put",params:{id:t},data:e})}function n(t){return(0,s.Ay)({url:"/api/users/delete",method:"delete",params:{id:t}})}function l(t){return(0,s.Ay)({url:"/api/users/reset-password",method:"post",data:t})}function c(){return(0,s.Ay)({url:"/api/users/roles",method:"get"})}function u(){return(0,s.Ay)({url:"/api/users/profile",method:"get"})}function p(t){return(0,s.Ay)({url:"/api/users/profile/update",method:"put",data:t})}function m(){return(0,s.Ay)({url:"/api/users/notification-settings",method:"get"})}function d(t){return(0,s.Ay)({url:"/api/users/notification-settings",method:"put",data:t})}function f(t){return(0,s.Ay)({url:"/api/users/my-credits-log",method:"get",params:t})}function v(t){return(0,s.Ay)({url:"/api/users/my-referrals",method:"get",params:t})}function h(t){return(0,s.Ay)({url:"/api/users/set-credits",method:"post",data:t})}function _(t){return(0,s.Ay)({url:"/api/users/set-vip",method:"post",data:t})}function g(t){return(0,s.Ay)({url:"/api/users/system-strategies",method:"get",params:t})}function y(t){return(0,s.Ay)({url:"/api/users/admin-orders",method:"get",params:t})}function b(t){return(0,s.Ay)({url:"/api/users/admin-ai-stats",method:"get",params:t})}}}]); \ No newline at end of file diff --git a/frontend/dist/js/24-legacy.8dae239d.js b/frontend/dist/js/24-legacy.8dae239d.js deleted file mode 100644 index 7c88c8c..0000000 --- a/frontend/dist/js/24-legacy.8dae239d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[24],{20024:function(t,n,r){r.r(n),r.d(n,{changePassword:function(){return p},getGitHubOAuthUrl:function(){return g},getGoogleOAuthUrl:function(){return l},getSecurityConfig:function(){return o},getUserInfo:function(){return c},login:function(){return i},loginWithCode:function(){return s},logout:function(){return a},register:function(){return f},resetPassword:function(){return d},sendVerificationCode:function(){return h}});r(34782),r(27495),r(99449),r(25440),r(11392),r(42762);var u=r(76471);function e(t){var n="/api".trim(),r=t.startsWith("/")?t:"/".concat(t);if(!n)return r;var u=n.replace(/\/+$/,"");return u.endsWith("/api")&&r.startsWith("/api/")?u+r.slice(4):u+r}function o(){return(0,u.Ay)({url:"/api/auth/security-config",method:"get"})}function i(t){return(0,u.Ay)({url:"/api/auth/login",method:"post",data:t})}function a(){return(0,u.Ay)({url:"/api/auth/logout",method:"post"})}function c(){return(0,u.Ay)({url:"/api/auth/info",method:"get"})}function h(t){return(0,u.Ay)({url:"/api/auth/send-code",method:"post",data:t})}function s(t){return(0,u.Ay)({url:"/api/auth/login-code",method:"post",data:t})}function f(t){return(0,u.Ay)({url:"/api/auth/register",method:"post",data:t})}function d(t){return(0,u.Ay)({url:"/api/auth/reset-password",method:"post",data:t})}function p(t){return(0,u.Ay)({url:"/api/auth/change-password",method:"post",data:t})}function l(){return e("/api/auth/oauth/google")}function g(){return e("/api/auth/oauth/github")}}}]); \ No newline at end of file diff --git a/frontend/dist/js/24.70845c3e.js b/frontend/dist/js/24.70845c3e.js deleted file mode 100644 index 2347729..0000000 --- a/frontend/dist/js/24.70845c3e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[24],{20024:function(t,n,r){r.r(n),r.d(n,{changePassword:function(){return p},getGitHubOAuthUrl:function(){return g},getGoogleOAuthUrl:function(){return l},getSecurityConfig:function(){return o},getUserInfo:function(){return c},login:function(){return i},loginWithCode:function(){return s},logout:function(){return a},register:function(){return f},resetPassword:function(){return d},sendVerificationCode:function(){return h}});var u=r(76471);function e(t){var n="/api".trim(),r=t.startsWith("/")?t:"/".concat(t);if(!n)return r;var u=n.replace(/\/+$/,"");return u.endsWith("/api")&&r.startsWith("/api/")?u+r.slice(4):u+r}function o(){return(0,u.Ay)({url:"/api/auth/security-config",method:"get"})}function i(t){return(0,u.Ay)({url:"/api/auth/login",method:"post",data:t})}function a(){return(0,u.Ay)({url:"/api/auth/logout",method:"post"})}function c(){return(0,u.Ay)({url:"/api/auth/info",method:"get"})}function h(t){return(0,u.Ay)({url:"/api/auth/send-code",method:"post",data:t})}function s(t){return(0,u.Ay)({url:"/api/auth/login-code",method:"post",data:t})}function f(t){return(0,u.Ay)({url:"/api/auth/register",method:"post",data:t})}function d(t){return(0,u.Ay)({url:"/api/auth/reset-password",method:"post",data:t})}function p(t){return(0,u.Ay)({url:"/api/auth/change-password",method:"post",data:t})}function l(){return e("/api/auth/oauth/google")}function g(){return e("/api/auth/oauth/github")}}}]); \ No newline at end of file diff --git a/frontend/dist/js/250.f81a6a47.js b/frontend/dist/js/250.f81a6a47.js deleted file mode 100644 index b753f1e..0000000 --- a/frontend/dist/js/250.f81a6a47.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[250],{38250:function(e,t,a){a.d(t,{A:function(){return P}});var i=function(){var e=this,t=e._self._c;return t("a-drawer",{staticClass:"quick-trade-drawer",class:{"theme-dark":e.isDark},attrs:{title:null,width:380,visible:e.visible,closable:!1,bodyStyle:{padding:0},maskStyle:{background:"rgba(0,0,0,0.45)"}},on:{close:e.handleClose}},[t("div",{staticClass:"qt-header"},[t("div",{staticClass:"qt-header-left"},[t("a-icon",{staticClass:"qt-icon",attrs:{type:"thunderbolt",theme:"filled"}}),t("span",{staticClass:"qt-header-title"},[e._v(e._s(e.$t("quickTrade.title")))])],1),t("a-icon",{staticClass:"qt-close",attrs:{type:"close"},on:{click:e.handleClose}})],1),t("div",{staticClass:"qt-symbol-bar"},[t("div",{staticClass:"qt-symbol-selector"},[t("a-select",{staticStyle:{width:"100%"},attrs:{"show-search":"",placeholder:e.$t("quickTrade.selectSymbol"),"filter-option":!1,"not-found-content":e.symbolSearching?null:void 0,loading:e.symbolSearching},on:{search:e.handleSymbolSearch,change:e.handleSymbolChange,focus:e.handleSymbolFocus},model:{value:e.currentSymbol,callback:function(t){e.currentSymbol=t},expression:"currentSymbol"}},[t("a-icon",{staticStyle:{color:"#999"},attrs:{slot:"suffixIcon",type:"search"},slot:"suffixIcon"}),e._l(e.symbolSuggestions,function(a){return t("a-select-option",{key:a.value,attrs:{value:a.value}},[t("div",{staticClass:"qt-symbol-option"},[t("span",{staticClass:"qt-symbol-option-name"},[e._v(e._s(a.symbol))]),a.name?t("span",{staticClass:"qt-symbol-option-desc"},[e._v(e._s(a.name))]):e._e()])])})],2)],1),t("div",{staticClass:"qt-price-display",class:e.priceChangeClass},[t("span",{staticClass:"qt-current-price"},[e._v("$"+e._s(e.formatPrice(e.currentPrice)))])])]),t("div",{staticClass:"qt-section"},[t("div",{staticClass:"qt-label"},[e._v(e._s(e.$t("quickTrade.exchange"))+" "),t("span",{staticClass:"qt-crypto-hint"},[e._v(e._s(e.$t("quickTrade.cryptoOnly")))])]),t("a-select",{staticStyle:{width:"100%"},attrs:{placeholder:e.$t("quickTrade.selectExchange"),loading:e.credLoading,notFoundContent:e.$t("quickTrade.noExchange")},on:{change:e.onCredentialChange},model:{value:e.selectedCredentialId,callback:function(t){e.selectedCredentialId=t},expression:"selectedCredentialId"}},e._l(e.credentials,function(a){return t("a-select-option",{key:a.id,attrs:{value:a.id}},[t("span",{staticStyle:{"text-transform":"capitalize"}},[e._v(e._s(a.exchange_id||a.name))]),a.market_type?t("a-tag",{staticStyle:{"margin-left":"6px"},attrs:{size:"small"}},[e._v(e._s(a.market_type))]):e._e()],1)}),1),e.balance.available>0?t("div",{staticClass:"qt-balance"},[t("span",{staticClass:"qt-balance-label"},[e._v(e._s(e.$t("quickTrade.available"))+":")]),t("span",{staticClass:"qt-balance-value"},[e._v("$"+e._s(e.formatPrice(e.balance.available)))])]):e._e()],1),t("div",{staticClass:"qt-section"},[t("div",{staticClass:"qt-direction-toggle"},[t("div",{staticClass:"qt-dir-btn qt-dir-long",class:{active:"buy"===e.side},on:{click:function(t){e.side="buy"}}},[t("a-icon",{attrs:{type:"arrow-up"}}),e._v(" "+e._s(e.$t("quickTrade.long"))+" ")],1),t("div",{staticClass:"qt-dir-btn qt-dir-short",class:{active:"sell"===e.side},on:{click:function(t){e.side="sell"}}},[t("a-icon",{attrs:{type:"arrow-down"}}),e._v(" "+e._s(e.$t("quickTrade.short"))+" ")],1)])]),t("div",{staticClass:"qt-section"},[t("a-radio-group",{staticStyle:{width:"100%"},attrs:{"button-style":"solid",size:"small"},model:{value:e.orderType,callback:function(t){e.orderType=t},expression:"orderType"}},[t("a-radio-button",{staticStyle:{width:"50%","text-align":"center"},attrs:{value:"market"}},[e._v(" "+e._s(e.$t("quickTrade.market"))+" ")]),t("a-radio-button",{staticStyle:{width:"50%","text-align":"center"},attrs:{value:"limit"}},[e._v(" "+e._s(e.$t("quickTrade.limit"))+" ")])],1)],1),"limit"===e.orderType?t("div",{staticClass:"qt-section"},[t("div",{staticClass:"qt-label"},[e._v(e._s(e.$t("quickTrade.limitPrice")))]),t("a-input-number",{staticStyle:{width:"100%"},attrs:{min:0,step:e.priceStep,precision:e.pricePrecision,placeholder:e.$t("quickTrade.enterPrice")},model:{value:e.limitPrice,callback:function(t){e.limitPrice=t},expression:"limitPrice"}})],1):e._e(),t("div",{staticClass:"qt-section"},[t("div",{staticClass:"qt-label"},[e._v(e._s(e.$t("quickTrade.amount"))+" (USDT)")]),t("a-input-number",{staticStyle:{width:"100%"},attrs:{min:1,step:10,precision:2,placeholder:e.$t("quickTrade.enterAmount")},model:{value:e.amount,callback:function(t){e.amount=t},expression:"amount"}}),t("div",{staticClass:"qt-quick-amounts"},e._l(e.quickAmountPcts,function(a){return t("a-button",{key:a,attrs:{size:"small",disabled:e.balance.available<=0},on:{click:function(t){return e.setAmountByPercent(a)}}},[e._v(" "+e._s(a)+"% ")])}),1)],1),"spot"!==e.marketType?t("div",{staticClass:"qt-section"},[t("div",{staticClass:"qt-label"},[e._v(e._s(e.$t("quickTrade.leverage")))]),t("div",{staticClass:"qt-leverage-row"},[t("a-slider",{staticStyle:{flex:"1","margin-right":"12px"},attrs:{min:1,max:125,marks:e.leverageMarks,tipFormatter:function(e){return e+"x"}},model:{value:e.leverage,callback:function(t){e.leverage=t},expression:"leverage"}}),t("a-input-number",{staticStyle:{width:"80px"},attrs:{min:1,max:125,formatter:function(e){return"".concat(e,"x")},parser:function(e){return e.replace("x","")}},model:{value:e.leverage,callback:function(t){e.leverage=t},expression:"leverage"}})],1)]):e._e(),t("a-collapse",{staticStyle:{background:"transparent",margin:"0 16px"},attrs:{bordered:!1}},[t("a-collapse-panel",{key:"tpsl",style:e.collapseStyle,attrs:{header:e.$t("quickTrade.tpsl")}},[t("div",{staticClass:"qt-tpsl-row"},[t("div",{staticClass:"qt-tpsl-item"},[t("span",{staticClass:"qt-label",staticStyle:{color:"#52c41a"}},[e._v(e._s(e.$t("quickTrade.tp")))]),t("a-input-number",{staticStyle:{width:"100%"},attrs:{min:0,step:e.priceStep,precision:e.pricePrecision,placeholder:e.$t("quickTrade.tpPlaceholder")},model:{value:e.tpPrice,callback:function(t){e.tpPrice=t},expression:"tpPrice"}})],1),t("div",{staticClass:"qt-tpsl-item"},[t("span",{staticClass:"qt-label",staticStyle:{color:"#f5222d"}},[e._v(e._s(e.$t("quickTrade.sl")))]),t("a-input-number",{staticStyle:{width:"100%"},attrs:{min:0,step:e.priceStep,precision:e.pricePrecision,placeholder:e.$t("quickTrade.slPlaceholder")},model:{value:e.slPrice,callback:function(t){e.slPrice=t},expression:"slPrice"}})],1)])])],1),t("div",{staticClass:"qt-submit-section"},[t("a-button",{staticClass:"qt-submit-btn",class:["buy"===e.side?"qt-btn-long":"qt-btn-short"],attrs:{type:"buy"===e.side?"primary":"danger",size:"large",block:"",loading:e.submitting,disabled:!e.canSubmit},on:{click:e.handleSubmit}},[t("a-icon",{attrs:{type:"buy"===e.side?"arrow-up":"arrow-down"}}),e._v(" "+e._s("buy"===e.side?e.$t("quickTrade.buyLong"):e.$t("quickTrade.sellShort"))+" "+e._s(e.symbol)+" ")],1)],1),t("div",{staticClass:"qt-position-section"},[t("div",{staticClass:"qt-section-header"},[t("a-icon",{attrs:{type:"wallet"}}),e._v(" "+e._s(e.$t("quickTrade.currentPosition"))+" ")],1),e.currentPosition?t("div",{staticClass:"qt-position-card",class:e.currentPosition.side},[t("div",{staticClass:"qt-pos-row"},[t("span",[e._v(e._s(e.$t("quickTrade.side")))]),t("a-tag",{attrs:{color:"long"===e.currentPosition.side?"#52c41a":"#f5222d",size:"small"}},[e._v(" "+e._s("long"===e.currentPosition.side?e.$t("quickTrade.long"):e.$t("quickTrade.short"))+" ")])],1),t("div",{staticClass:"qt-pos-row"},[t("span",[e._v(e._s(e.$t("quickTrade.posSize")))]),t("span",[e._v(e._s(e.currentPosition.size))])]),t("div",{staticClass:"qt-pos-row"},[t("span",[e._v(e._s(e.$t("quickTrade.entryPrice")))]),t("span",[e._v("$"+e._s(e.formatPrice(e.currentPosition.entry_price)))])]),e.currentPosition.mark_price?t("div",{staticClass:"qt-pos-row"},[t("span",[e._v(e._s(e.$t("quickTrade.markPrice")))]),t("span",[e._v("$"+e._s(e.formatPrice(e.currentPosition.mark_price)))])]):e._e(),e.currentPosition.leverage&&e.currentPosition.leverage>1?t("div",{staticClass:"qt-pos-row"},[t("span",[e._v(e._s(e.$t("quickTrade.leverage")))]),t("span",[e._v(e._s(e.currentPosition.leverage)+"x")])]):e._e(),t("div",{staticClass:"qt-pos-row"},[t("span",[e._v(e._s(e.$t("quickTrade.unrealizedPnl")))]),t("span",{class:e.currentPosition.unrealized_pnl>=0?"qt-green":"qt-red"},[e._v(" $"+e._s(e.formatPrice(e.currentPosition.unrealized_pnl))+" ")])]),t("a-button",{staticStyle:{"margin-top":"8px"},attrs:{type:"danger",size:"small",block:"",ghost:"",loading:e.closingPosition},on:{click:e.handleClosePosition}},[e._v(" "+e._s(e.$t("quickTrade.closePosition"))+" ")])],1):t("div",{staticClass:"qt-position-empty"},[t("a-empty",{staticStyle:{padding:"20px 0"},attrs:{description:e.$t("quickTrade.noPosition"),image:!1}},[t("template",{slot:"description"},[t("span",{staticStyle:{color:"#999","font-size":"12px"}},[e._v(e._s(e.$t("quickTrade.noPositionHint")))])])],2)],1)]),e.recentTrades.length>0?t("div",{staticClass:"qt-history-section"},[t("a-collapse",{attrs:{bordered:!1,activeKey:e.historyCollapsed?[]:["history"]},on:{change:e.handleHistoryCollapse}},[t("a-collapse-panel",{key:"history",style:e.collapseStyle,attrs:{showArrow:!1}},[t("template",{slot:"header"},[t("div",{staticClass:"qt-section-header",staticStyle:{margin:"0",padding:"0"}},[t("a-icon",{attrs:{type:"history"}}),e._v(" "+e._s(e.$t("quickTrade.recentTrades"))+" "),t("span",{staticClass:"qt-history-count"},[e._v("("+e._s(e.recentTrades.length)+")")])],1)]),t("div",{staticClass:"qt-trade-list"},e._l(e.recentTrades,function(a){return t("div",{key:a.id,staticClass:"qt-trade-item"},[t("div",{staticClass:"qt-trade-main"},[t("a-tag",{attrs:{color:"buy"===a.side?"#52c41a":"#f5222d",size:"small"}},[e._v(" "+e._s("buy"===a.side?"LONG":"SHORT")+" ")]),t("span",{staticClass:"qt-trade-symbol"},[e._v(e._s(a.symbol))]),t("span",{staticClass:"qt-trade-amount"},[e._v("$"+e._s(e.formatPrice(a.amount)))])],1),t("div",{staticClass:"qt-trade-meta"},[t("a-tag",{attrs:{color:"filled"===a.status?"#52c41a":"failed"===a.status?"#f5222d":"#faad14",size:"small"}},[e._v(" "+e._s(a.status)+" ")]),t("span",{staticClass:"qt-trade-time"},[e._v(e._s(e.formatTime(a.created_at)))])],1)])}),0)],2)],1)],1):e._e()],1)},r=[],s=a(76959),n=a(17654),c=a(57888),l=(a(74423),a(95353)),o=a(72694),u=a(76471);function d(e){return(0,u.Ay)({url:"/api/quick-trade/place-order",method:"post",data:e})}function m(e){return(0,u.Ay)({url:"/api/quick-trade/balance",method:"get",params:e})}function p(e){return(0,u.Ay)({url:"/api/quick-trade/position",method:"get",params:e})}function h(e){return(0,u.Ay)({url:"/api/quick-trade/history",method:"get",params:e})}function v(e){return(0,u.Ay)({url:"/api/quick-trade/close-position",method:"post",data:e})}var b=a(64118),y=a(55585),f={name:"QuickTradePanel",props:{visible:{type:Boolean,default:!1},symbol:{type:String,default:""},presetSide:{type:String,default:""},presetPrice:{type:Number,default:0},source:{type:String,default:"manual"},marketType:{type:String,default:"swap"}},data:function(){return{credentials:[],selectedCredentialId:void 0,credLoading:!1,balance:{available:0,total:0},side:"buy",orderType:"market",limitPrice:0,amount:100,leverage:5,tpPrice:null,slPrice:null,submitting:!1,closingPosition:!1,currentPrice:0,currentPosition:null,recentTrades:[],historyCollapsed:!1,currentSymbol:"",symbolSuggestions:[],symbolSearching:!1,symbolSearchTimer:null,userId:null,quickAmountPcts:[10,25,50,75,100],leverageMarks:{1:"1x",5:"5x",10:"10x",25:"25x",50:"50x",100:"100x",125:"125x"},pollTimer:null}},computed:(0,c.A)((0,c.A)({},(0,l.aH)({navTheme:function(e){return e.app.theme}})),{},{isDark:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},priceStep:function(){return this.currentPrice>1e4?1:this.currentPrice>100?.1:this.currentPrice>1?.01:1e-4},pricePrecision:function(){return this.currentPrice>1e4?0:this.currentPrice>100?1:this.currentPrice>1?2:4},canSubmit:function(){return this.selectedCredentialId&&this.currentSymbol&&this.amount>0&&!this.submitting},priceChangeClass:function(){return""},collapseStyle:function(){return{background:"transparent",borderRadius:"4px",border:0,overflow:"hidden"}}}),watch:{visible:function(e){e?this.init():this.stopPolling()},symbol:function(e){e&&(this.currentSymbol=e)},currentSymbol:function(e){e&&(this.loadPrice(),this.selectedCredentialId&&this.loadPosition(),this.$emit("update:symbol",e))},selectedCredentialId:function(e){e&&this.currentSymbol&&this.loadPosition()},presetSide:function(e){e&&(this.side=e)},presetPrice:function(e){e>0&&(this.currentPrice=e,this.limitPrice=e)}},methods:{init:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){return(0,s.A)().w(function(t){while(1)switch(t.n){case 0:return e.currentSymbol=e.symbol||"",e.presetSide&&(e.side=e.presetSide),e.presetPrice>0&&(e.currentPrice=e.presetPrice,e.limitPrice=e.presetPrice),t.n=1,e.loadCredentials();case 1:return t.n=2,e.loadUserInfo();case 2:return t.n=3,e.loadWatchlistSymbols();case 3:if(!e.currentSymbol){t.n=4;break}return t.n=4,e.loadPrice();case 4:if(!e.selectedCredentialId||!e.currentSymbol){t.n=5;break}return t.n=5,e.loadPosition();case 5:e.loadHistory(),e.startPolling();case 6:return t.a(2)}},t)}))()},loadUserInfo:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){var a,i,r,n;return(0,s.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(t.p=0,i=e.$store,r=(null===i||void 0===i||null===(a=i.getters)||void 0===a?void 0:a.userInfo)||{},!r||!r.id){t.n=1;break}return e.userId=r.id,t.a(2);case 1:return t.n=2,(0,y.ug)();case 2:n=t.v,n&&1===n.code&&n.data&&(e.userId=n.data.id,i&&i.commit("SET_INFO",n.data)),t.n=4;break;case 3:t.p=3,t.v;case 4:return t.a(2)}},t,null,[[0,3]])}))()},loadWatchlistSymbols:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){var a,i;return(0,s.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e.userId){t.n=2;break}return t.n=1,e.loadUserInfo();case 1:if(e.userId){t.n=2;break}return t.a(2);case 2:return t.p=2,t.n=3,(0,b.Qo)({userid:e.userId});case 3:a=t.v,a&&1===a.code&&a.data&&(i=(a.data||[]).filter(function(e){return"crypto"===(e.market||"").toLowerCase()}).map(function(e){return{value:e.symbol||"",symbol:e.symbol||"",name:e.name||""}}).filter(function(e){return e.value}),e.symbolSuggestions=i),t.n=5;break;case 4:t.p=4,t.v;case 5:return t.a(2)}},t,null,[[2,4]])}))()},handleSymbolSearch:function(e){var t=this;this.symbolSearchTimer&&clearTimeout(this.symbolSearchTimer),e&&""!==e.trim()?this.symbolSearchTimer=setTimeout((0,n.A)((0,s.A)().m(function a(){var i;return(0,s.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return t.symbolSearching=!0,a.p=1,a.n=2,(0,b._3)({market:"Crypto",keyword:e.trim(),limit:20});case 2:i=a.v,i&&1===i.code&&i.data?t.symbolSuggestions=(i.data.items||i.data||[]).map(function(e){return{value:e.symbol||"",symbol:e.symbol||"",name:e.name||""}}).filter(function(e){return e.value}):t.symbolSuggestions=[],a.n=4;break;case 3:a.p=3,a.v,t.symbolSuggestions=[];case 4:return a.p=4,t.symbolSearching=!1,a.f(4);case 5:return a.a(2)}},a,null,[[1,3,4,5]])})),300):this.loadWatchlistSymbols()},handleSymbolChange:function(e){e&&e!==this.currentSymbol&&(this.currentSymbol=e,this.loadPrice(),this.selectedCredentialId&&this.loadPosition(),this.$emit("update:symbol",e))},loadPrice:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){var a,i;return(0,s.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e.currentSymbol){t.n=1;break}return e.currentPrice=0,t.a(2);case 1:return t.p=1,t.n=2,(0,u.Ay)({url:"/api/market/price",method:"get",params:{market:"Crypto",symbol:e.currentSymbol}});case 2:a=t.v,a&&1===a.code&&a.data&&(i=parseFloat(a.data.price||0),i>0&&(e.currentPrice=i,0!==e.limitPrice&&e.limitPrice!==e.presetPrice||(e.limitPrice=i))),t.n=4;break;case 3:t.p=3,t.v;case 4:return t.a(2)}},t,null,[[1,3]])}))()},handleSymbolFocus:function(){0===this.symbolSuggestions.length&&this.loadWatchlistSymbols()},loadCredentials:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){var a,i,r;return(0,s.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.credLoading=!0,t.p=1,t.n=2,(0,o.IA)();case 2:a=t.v,1===a.code&&a.data&&(i=a.data.items||a.data||[],r=["ibkr","mt5"],e.credentials=i.filter(function(e){var t=(e.exchange_id||e.name||"").toLowerCase();return!r.includes(t)}),!e.selectedCredentialId&&e.credentials.length>0&&(e.selectedCredentialId=e.credentials[0].id,e.onCredentialChange(e.selectedCredentialId))),t.n=4;break;case 3:t.p=3,t.v;case 4:return t.p=4,e.credLoading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},onCredentialChange:function(e){var t=this;return(0,n.A)((0,s.A)().m(function a(){return(0,s.A)().w(function(a){while(1)switch(a.n){case 0:return t.selectedCredentialId=e,a.n=1,t.loadBalance();case 1:return a.n=2,t.loadPosition();case 2:return a.a(2)}},a)}))()},loadBalance:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){var a;return(0,s.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e.selectedCredentialId){t.n=1;break}return t.a(2);case 1:return t.p=1,t.n=2,m({credential_id:e.selectedCredentialId,market_type:e.marketType});case 2:a=t.v,1===a.code&&a.data&&(e.balance=a.data),t.n=4;break;case 3:t.p=3,t.v;case 4:return t.a(2)}},t,null,[[1,3]])}))()},loadPosition:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){var a;return(0,s.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e.selectedCredentialId&&e.currentSymbol){t.n=1;break}return t.a(2);case 1:return t.p=1,t.n=2,p({credential_id:e.selectedCredentialId,symbol:e.currentSymbol,market_type:e.marketType});case 2:if(a=t.v,!(1===a.code&&a.data&&a.data.positions&&a.data.positions.length>0)){t.n=3;break}return e.currentPosition=a.data.positions[0],t.a(2,!0);case 3:return e.currentPosition=null,t.a(2,!1);case 4:t.n=6;break;case 5:return t.p=5,t.v,e.currentPosition=null,t.a(2,!1);case 6:return t.a(2)}},t,null,[[1,5]])}))()},loadPositionWithRetry:function(){var e=arguments,t=this;return(0,n.A)((0,s.A)().m(function a(){var i,r,n,c;return(0,s.A)().w(function(a){while(1)switch(a.n){case 0:return i=e.length>0&&void 0!==e[0]?e[0]:3,r=e.length>1&&void 0!==e[1]?e[1]:2e3,a.n=1,t.loadPosition();case 1:if(n=a.v,!n){a.n=2;break}return a.a(2);case 2:c=0;case 3:if(!(c0&&(this.amount=Math.floor(this.balance.available*e/100*100)/100)},handleSubmit:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){var a,i,r;return(0,s.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e.canSubmit){t.n=1;break}return t.a(2);case 1:return e.submitting=!0,t.p=2,a={credential_id:e.selectedCredentialId,symbol:e.currentSymbol,side:e.side,order_type:e.orderType,amount:e.amount,price:"limit"===e.orderType?e.limitPrice:0,leverage:"spot"!==e.marketType?e.leverage:1,market_type:e.marketType,tp_price:e.tpPrice||0,sl_price:e.slPrice||0,source:e.source},t.n=3,d(a);case 3:if(i=t.v,1!==i.code){t.n=7;break}return e.$emit("order-success",i.data),t.n=4,e.loadBalance();case 4:return t.n=5,e.loadHistory();case 5:return t.n=6,e.loadPositionWithRetry();case 6:t.n=8;break;case 7:e.$message.error(i.msg||e.$t("quickTrade.orderFailed"));case 8:t.n=10;break;case 9:t.p=9,r=t.v,e.$message.error(r.message||e.$t("quickTrade.orderFailed"));case 10:return t.p=10,e.submitting=!1,t.f(10);case 11:return t.a(2)}},t,null,[[2,9,10,11]])}))()},handleClosePosition:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){var a,i,r;return(0,s.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e.currentPosition&&e.selectedCredentialId){t.n=1;break}return t.a(2);case 1:return e.closingPosition=!0,t.p=2,a={credential_id:e.selectedCredentialId,symbol:e.currentSymbol,market_type:e.marketType,size:0,source:"manual"},t.n=3,v(a);case 3:if(i=t.v,1!==i.code){t.n=6;break}return e.$message.success(e.$t("quickTrade.positionClosed")),t.n=4,e.loadBalance();case 4:return t.n=5,e.loadHistory();case 5:e.currentPosition=null,setTimeout((0,n.A)((0,s.A)().m(function t(){return(0,s.A)().w(function(t){while(1)switch(t.n){case 0:return t.n=1,e.loadPosition();case 1:return t.a(2)}},t)})),2e3),t.n=7;break;case 6:e.$message.error(i.msg||e.$t("quickTrade.orderFailed"));case 7:t.n=9;break;case 8:t.p=8,r=t.v,e.$message.error(r.message||e.$t("quickTrade.orderFailed"));case 9:return t.p=9,e.closingPosition=!1,t.f(9);case 10:return t.a(2)}},t,null,[[2,8,9,10]])}))()},startPolling:function(){var e=this;this.stopPolling(),this.pollTimer=setInterval(function(){e.currentSymbol&&e.loadPrice(),e.selectedCredentialId&&e.currentSymbol&&(e.loadBalance(),e.loadPosition())},1e4)},stopPolling:function(){this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=null)},handleClose:function(){this.$emit("close"),this.$emit("update:visible",!1)},handleHistoryCollapse:function(e){this.historyCollapsed=!e.includes("history")},formatPrice:function(e){var t=parseFloat(e||0);return Math.abs(t)>=1e4?t.toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:0}):Math.abs(t)>=100?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):Math.abs(t)>=1?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:4}):t.toLocaleString("en-US",{minimumFractionDigits:4,maximumFractionDigits:6})},formatTime:function(e){if(!e)return"";var t=new Date(e),a=function(e){return String(e).padStart(2,"0")};return"".concat(a(t.getMonth()+1),"-").concat(a(t.getDate())," ").concat(a(t.getHours()),":").concat(a(t.getMinutes()))}},beforeDestroy:function(){this.stopPolling()}},g=f,k=a(845),_=(0,k.A)(g,i,r,!1,null,"0d547552",null),P=_.exports},72694:function(e,t,a){a.d(t,{IA:function(){return n},PR:function(){return c},kI:function(){return l}});var i=a(57888),r=a(76471),s={list:"/api/credentials/list",get:"/api/credentials/get",create:"/api/credentials/create",delete:"/api/credentials/delete"};function n(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,r.Ay)({url:s.list,method:"get",params:e})}function c(e){return(0,r.Ay)({url:s.create,method:"post",data:e})}function l(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(0,r.Ay)({url:s.delete,method:"delete",params:(0,i.A)({id:e},t)})}}}]); \ No newline at end of file diff --git a/frontend/dist/js/268-legacy.a4c6490d.js b/frontend/dist/js/268-legacy.a4c6490d.js deleted file mode 100644 index 1dc3153..0000000 --- a/frontend/dist/js/268-legacy.a4c6490d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[268],{90268:function(t,s,a){a.r(s),a.d(s,{default:function(){return M}});a(28706),a(34782),a(62010),a(9868);var e=function(){var t=this,s=t._self._c;return s("div",{staticClass:"ai-analysis-container",class:{"theme-dark":t.isDarkTheme,embedded:t.embedded},style:{"--primary-color":t.primaryColor}},[s("div",{staticClass:"main-content-full"},[s("div",{staticClass:"top-index-bar"},[t.loadingSentiment?[t._m(0),t._m(1),t._m(2)]:[s("div",{staticClass:"indicator-box fear-greed",class:t.getFearGreedClass(t.marketData.fearGreed)},[s("span",{staticClass:"ind-label"},[t._v(t._s(t.$t("globalMarket.fearGreedShort")))]),s("span",{staticClass:"ind-value"},[t._v(t._s(t.marketData.fearGreed||"--"))])]),s("div",{staticClass:"indicator-box vix",class:t.getVixLevel(t.marketData.vix)},[s("span",{staticClass:"ind-label"},[t._v("VIX")]),s("span",{staticClass:"ind-value"},[t._v(t._s(t.marketData.vix||"--"))])]),s("div",{staticClass:"indicator-box dxy"},[s("span",{staticClass:"ind-label"},[t._v("DXY")]),s("span",{staticClass:"ind-value"},[t._v(t._s(t.marketData.dxy||"--"))])])],s("div",{staticClass:"indices-marquee"},[t.loadingIndices?[s("div",{staticClass:"indices-loading"},[s("a-icon",{attrs:{type:"loading"}}),t._v(" "+t._s(t.$t("common.loading")||"加载中...")+" ")],1)]:t.marketData.indices.length>0?[s("div",{staticClass:"marquee-track"},[t._l(t.marketData.indices,function(a){return s("div",{key:"a-"+a.symbol,staticClass:"index-item"},[s("span",{staticClass:"idx-flag"},[t._v(t._s(a.flag))]),s("span",{staticClass:"idx-symbol"},[t._v(t._s(a.symbol))]),s("span",{staticClass:"idx-price"},[t._v(t._s(t.formatPrice(a.price)))]),s("span",{staticClass:"idx-change",class:a.change>=0?"up":"down"},[s("a-icon",{attrs:{type:a.change>=0?"caret-up":"caret-down"}}),t._v(" "+t._s(Math.abs(a.change).toFixed(2))+"% ")],1)])}),t._l(t.marketData.indices,function(a){return s("div",{key:"b-"+a.symbol,staticClass:"index-item"},[s("span",{staticClass:"idx-flag"},[t._v(t._s(a.flag))]),s("span",{staticClass:"idx-symbol"},[t._v(t._s(a.symbol))]),s("span",{staticClass:"idx-price"},[t._v(t._s(t.formatPrice(a.price)))]),s("span",{staticClass:"idx-change",class:a.change>=0?"up":"down"},[s("a-icon",{attrs:{type:a.change>=0?"caret-up":"caret-down"}}),t._v(" "+t._s(Math.abs(a.change).toFixed(2))+"% ")],1)])})],2)]:[s("div",{staticClass:"indices-empty"},[t._v("--")])]],2),s("a-button",{staticClass:"refresh-btn",attrs:{type:"link",size:"small",loading:t.loadingMarket},on:{click:t.loadMarketData}},[s("a-icon",{attrs:{type:"sync",spin:t.loadingMarket}})],1)],2),s("div",{staticClass:"main-body"},[s("div",{staticClass:"left-panel"},[s("div",{staticClass:"heatmap-box"},[s("div",{staticClass:"box-header"},[s("a-radio-group",{attrs:{size:"small","button-style":"solid"},model:{value:t.heatmapType,callback:function(s){t.heatmapType=s},expression:"heatmapType"}},[s("a-radio-button",{attrs:{value:"crypto"}},[t._v(t._s(t.$t("globalMarket.cryptoHeatmap")))]),s("a-radio-button",{attrs:{value:"commodities"}},[t._v(t._s(t.$t("globalMarket.commoditiesHeatmap")))]),s("a-radio-button",{attrs:{value:"sectors"}},[t._v(t._s(t.$t("globalMarket.sectorHeatmap")))]),s("a-radio-button",{attrs:{value:"forex"}},[t._v(t._s(t.$t("globalMarket.forexHeatmap")))])],1)],1),s("div",{staticClass:"heatmap-grid"},[t.loadingHeatmap?t._l(12,function(t){return s("div",{key:"skel-"+t,staticClass:"heat-cell skeleton-cell"},[s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text"})])}):t.currentHeatmap.length>0?t._l(t.currentHeatmap.slice(0,12),function(a,e){return s("div",{key:e,staticClass:"heat-cell",style:t.getHeatmapStyle(a.value)},[s("span",{staticClass:"heat-name"},[t._v(t._s(t.getHeatmapName(a)))]),a.price?s("span",{staticClass:"heat-price"},[t._v(t._s(t.formatHeatmapPrice(a.price)))]):t._e(),s("span",{staticClass:"heat-val"},[t._v(t._s(a.value>=0?"+":"")+t._s(t.formatNum(a.value))+"%")])])}):[s("div",{staticClass:"heatmap-empty"},[t._v(t._s(t.$t("common.noData")||"暂无数据"))])]],2)]),s("div",{staticClass:"calendar-box"},[s("div",{staticClass:"box-header"},[s("span",{staticClass:"box-title"},[s("a-icon",{attrs:{type:"calendar"}}),t._v(" "+t._s(t.$t("globalMarket.calendar")))],1)]),s("div",{staticClass:"calendar-list"},[t.loadingCalendar?t._l(5,function(t){return s("div",{key:"cal-skel-"+t,staticClass:"cal-item skeleton-item"},[s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text"})])}):t.marketData.calendar.length>0?t._l(t.marketData.calendar.slice(0,10),function(a){return s("div",{key:a.id,staticClass:"cal-item",class:a.importance},[s("span",{staticClass:"cal-date"},[t._v(t._s(t.formatCalendarDate(a.date)))]),s("span",{staticClass:"cal-time"},[t._v(t._s(a.time||"--:--"))]),s("span",{staticClass:"cal-flag"},[t._v(t._s(t.getCountryFlag(a.country)))]),s("span",{staticClass:"cal-name"},[t._v(t._s(t.isZhLocale?a.name:a.name_en))]),s("span",{staticClass:"cal-impact",class:t.getImpactClass(a)},["bullish"===t.getImpactClass(a)?s("a-icon",{attrs:{type:"arrow-up"}}):"bearish"===t.getImpactClass(a)?s("a-icon",{attrs:{type:"arrow-down"}}):s("a-icon",{attrs:{type:"minus"}}),t._v(" "+t._s(a.actual||a.forecast||"--")+" ")],1)])}):[s("div",{staticClass:"cal-empty"},[t._v(t._s(t.$t("globalMarket.noEvents")))])]],2)])]),s("div",{staticClass:"right-panel"},[s("div",{staticClass:"analysis-toolbar"},[s("a-select",{staticClass:"symbol-selector",attrs:{placeholder:t.$t("dashboard.analysis.empty.selectSymbol"),size:"large","show-search":"","allow-clear":"","filter-option":t.filterSymbolOption},on:{change:t.handleSymbolChange},model:{value:t.selectedSymbol,callback:function(s){t.selectedSymbol=s},expression:"selectedSymbol"}},[t._l(t.watchlist||[],function(a){return s("a-select-option",{key:"".concat(a.market,"-").concat(a.symbol),attrs:{value:"".concat(a.market,":").concat(a.symbol)}},[s("span",{staticClass:"symbol-option"},[s("a-tag",{attrs:{color:t.getMarketColor(a.market),size:"small"}},[t._v(t._s(t.getMarketName(a.market)))]),s("strong",{staticStyle:{"margin-left":"6px"}},[t._v(t._s(a.symbol))]),a.name?s("span",{staticClass:"symbol-name"},[t._v(t._s(a.name))]):t._e()],1)])}),s("a-select-option",{key:"add-stock-option",staticClass:"add-stock-option",attrs:{value:"__add_stock_option__"}},[s("div",{staticStyle:{"text-align":"center",padding:"4px 0",color:"#1890ff"}},[s("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"plus"}}),t._v(t._s(t.$t("dashboard.analysis.watchlist.add"))+" ")],1)])],2),s("a-button",{staticClass:"analyze-button",attrs:{type:"primary",size:"large",icon:"thunderbolt",loading:t.analyzing,disabled:!t.selectedSymbol||t.analyzing},on:{click:t.startFastAnalysis}},[t._v(" "+t._s(t.$t("fastAnalysis.startAnalysis"))+" ")]),s("a-button",{staticClass:"history-button",attrs:{size:"large",icon:"history"},on:{click:function(s){t.showHistoryModal=!0,t.loadHistoryList()}}},[t._v(" "+t._s(t.$t("fastAnalysis.history"))+" ")])],1),s("div",{staticClass:"analysis-main"},[t.analysisResult||t.analyzing||t.analysisError?t._e():s("div",{staticClass:"analysis-placeholder"},[s("div",{staticClass:"placeholder-content"},[s("div",{staticClass:"placeholder-icon"},[s("a-icon",{attrs:{type:"robot"}})],1),s("h3",[t._v(t._s(t.$t("fastAnalysis.selectTip")))]),s("p",[t._v(t._s(t.$t("fastAnalysis.selectHint")))])])]),t.analysisResult||t.analyzing||t.analysisError?s("FastAnalysisReport",{attrs:{result:t.analysisResult,loading:t.analyzing,error:t.analysisError,"error-tone":t.analysisErrorTone},on:{retry:t.startFastAnalysis}}):t._e()],1)]),s("div",{staticClass:"watchlist-panel"},[s("div",{staticClass:"panel-header"},[s("span",{staticClass:"panel-title"},[s("a-icon",{attrs:{type:"star",theme:"filled"}}),t._v(" "+t._s(t.$t("dashboard.analysis.watchlist.title")))],1),s("a-button",{attrs:{type:"link",size:"small"},on:{click:function(s){t.showAddStockModal=!0}}},[s("a-icon",{attrs:{type:"plus"}})],1)],1),s("div",{staticClass:"watchlist-list"},[t._l(t.watchlist||[],function(a){var e,i,r;return s("div",{key:"".concat(a.market,"-").concat(a.symbol),staticClass:"watchlist-item",class:{active:t.selectedSymbol==="".concat(a.market,":").concat(a.symbol)},on:{click:function(s){return t.selectWatchlistItem(a)}}},[s("div",{staticClass:"item-main"},[s("span",{staticClass:"item-symbol"},[t._v(t._s(a.symbol))]),s("span",{staticClass:"item-name"},[t._v(t._s(a.name||t.getMarketName(a.market)))])]),t.watchlistPrices["".concat(a.market,":").concat(a.symbol)]?s("div",{staticClass:"item-price"},[s("span",{staticClass:"price-value"},[t._v(t._s(t.formatPrice(t.watchlistPrices["".concat(a.market,":").concat(a.symbol)].price)))]),s("span",{staticClass:"price-change",class:((null===(e=t.watchlistPrices["".concat(a.market,":").concat(a.symbol)])||void 0===e?void 0:e.change)||0)>=0?"up":"down"},[t._v(" "+t._s(((null===(i=t.watchlistPrices["".concat(a.market,":").concat(a.symbol)])||void 0===i?void 0:i.change)||0)>=0?"+":"")+t._s(t.formatNum(null===(r=t.watchlistPrices["".concat(a.market,":").concat(a.symbol)])||void 0===r?void 0:r.change))+"% ")])]):t._e(),s("a-icon",{staticClass:"item-remove",attrs:{type:"close"},on:{click:function(s){return s.stopPropagation(),t.removeFromWatchlist(a)}}})],1)}),t.watchlist&&0!==t.watchlist.length?t._e():s("div",{staticClass:"watchlist-empty"},[s("a-icon",{attrs:{type:"inbox"}}),s("p",[t._v(t._s(t.$t("dashboard.analysis.empty.noWatchlist")))]),s("a-button",{attrs:{type:"primary",size:"small"},on:{click:function(s){t.showAddStockModal=!0}}},[s("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("dashboard.analysis.watchlist.add"))+" ")],1)],1)],2)])])]),s("a-modal",{attrs:{title:t.$t("dashboard.analysis.modal.addStock.title"),visible:t.showAddStockModal,confirmLoading:t.addingStock,width:"600px",okText:t.$t("dashboard.analysis.modal.addStock.confirm"),cancelText:t.$t("dashboard.analysis.modal.addStock.cancel")},on:{ok:t.handleAddStock,cancel:t.handleCloseAddStockModal}},[s("div",{staticClass:"add-stock-modal-content"},[s("a-tabs",{staticClass:"market-tabs",on:{change:t.handleMarketTabChange},model:{value:t.selectedMarketTab,callback:function(s){t.selectedMarketTab=s},expression:"selectedMarketTab"}},t._l(t.marketTypes,function(a){return s("a-tab-pane",{key:a.value,attrs:{tab:t.$t(a.i18nKey||"dashboard.analysis.market.".concat(a.value))}})}),1),s("div",{staticClass:"symbol-search-section"},[s("a-input-search",{attrs:{placeholder:t.$t("dashboard.analysis.modal.addStock.searchOrInputPlaceholder"),loading:t.searchingSymbols,size:"large","allow-clear":""},on:{search:t.handleSearchOrInput,change:t.handleSymbolSearchInput},model:{value:t.symbolSearchKeyword,callback:function(s){t.symbolSearchKeyword=s},expression:"symbolSearchKeyword"}},[s("a-button",{attrs:{slot:"enterButton",type:"primary",icon:"search"},slot:"enterButton"},[t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.search"))+" ")])],1)],1),t.symbolSearchResults.length>0?s("div",{staticClass:"search-results-section"},[s("div",{staticClass:"section-title"},[s("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"search"}}),t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.searchResults"))+" ")],1),s("a-list",{staticClass:"symbol-list",attrs:{"data-source":t.symbolSearchResults,loading:t.searchingSymbols,size:"small"},scopedSlots:t._u([{key:"renderItem",fn:function(a){return s("a-list-item",{staticClass:"symbol-list-item",on:{click:function(s){return t.selectSymbol(a)}}},[s("a-list-item-meta",[s("template",{slot:"title"},[s("div",{staticClass:"symbol-item-content"},[s("span",{staticClass:"symbol-code"},[t._v(t._s(a.symbol))]),s("span",{staticClass:"symbol-name"},[t._v(t._s(a.name))]),a.exchange?s("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"blue"}},[t._v(" "+t._s(a.exchange)+" ")]):t._e()],1)])],2)],1)}}],null,!1,1074844145)})],1):t._e(),s("div",{staticClass:"hot-symbols-section"},[s("div",{staticClass:"section-title"},[s("a-icon",{staticStyle:{color:"#ff4d4f","margin-right":"4px"},attrs:{type:"fire"}}),t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.hotSymbols"))+" ")],1),s("a-spin",{attrs:{spinning:t.loadingHotSymbols}},[t.hotSymbols.length>0?s("a-list",{staticClass:"symbol-list",attrs:{"data-source":t.hotSymbols,size:"small"},scopedSlots:t._u([{key:"renderItem",fn:function(a){return s("a-list-item",{staticClass:"symbol-list-item",on:{click:function(s){return t.selectSymbol(a)}}},[s("a-list-item-meta",[s("template",{slot:"title"},[s("div",{staticClass:"symbol-item-content"},[s("span",{staticClass:"symbol-code"},[t._v(t._s(a.symbol))]),s("span",{staticClass:"symbol-name"},[t._v(t._s(a.name))]),a.exchange?s("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"orange"}},[t._v(" "+t._s(a.exchange)+" ")]):t._e()],1)])],2)],1)}}],null,!1,2177647935)}):s("a-empty",{attrs:{description:t.$t("dashboard.analysis.modal.addStock.noHotSymbols"),image:!1}})],1)],1),t.selectedSymbolForAdd?s("div",{staticClass:"selected-symbol-section"},[s("a-alert",{attrs:{message:t.$t("dashboard.analysis.modal.addStock.selectedSymbol"),type:"info","show-icon":"",closable:""},on:{close:function(s){t.selectedSymbolForAdd=null}}},[s("template",{slot:"description"},[s("div",{staticClass:"selected-symbol-info"},[s("a-tag",{staticStyle:{"margin-right":"8px"},attrs:{color:t.getMarketColor(t.selectedSymbolForAdd.market)}},[t._v(" "+t._s(t.$t("dashboard.analysis.market.".concat(t.selectedSymbolForAdd.market)))+" ")]),s("strong",[t._v(t._s(t.selectedSymbolForAdd.symbol))]),t.selectedSymbolForAdd.name?s("span",{staticStyle:{color:"#999","margin-left":"8px"}},[t._v(t._s(t.selectedSymbolForAdd.name))]):t._e()],1)])],2)],1):t._e()],1)]),s("a-modal",{attrs:{title:t.$t("dashboard.analysis.modal.history.title"),visible:t.showHistoryModal,footer:null,width:"800px",bodyStyle:{maxHeight:"60vh",overflowY:"auto"}},on:{cancel:function(s){t.showHistoryModal=!1}}},[s("a-spin",{attrs:{spinning:t.historyLoading}},[s("a-list",{attrs:{"data-source":t.historyList,pagination:{current:t.historyPage,pageSize:t.historyPageSize,total:t.historyTotal,onChange:function(s){t.historyPage=s,t.loadHistoryList()},showSizeChanger:!0,pageSizeOptions:["10","20","50"],onShowSizeChange:function(s,a){t.historyPageSize=a,t.historyPage=1,t.loadHistoryList()}}},scopedSlots:t._u([{key:"renderItem",fn:function(a){return s("a-list-item",{},[s("a-list-item-meta",[s("template",{slot:"title"},[s("div",{staticStyle:{display:"flex","align-items":"center","justify-content":"space-between"}},[s("div",[s("a-tag",{staticStyle:{"margin-right":"8px"},attrs:{color:t.getMarketColor(a.market)}},[t._v(" "+t._s(t.getMarketName(a.market))+" ")]),s("strong",[t._v(t._s(a.symbol))]),s("a-tag",{staticStyle:{"margin-left":"12px"},attrs:{color:"BUY"===a.decision?"green":"SELL"===a.decision?"red":"blue"}},[t._v(" "+t._s(a.decision)+" ")]),s("span",{staticStyle:{color:"#999","margin-left":"8px","font-size":"12px"}},[t._v(" "+t._s(t.$t("fastAnalysis.confidence"))+": "+t._s(a.confidence)+"% ")])],1),s("div",[s("a-button",{attrs:{type:"link",size:"small",icon:"eye"},on:{click:function(s){return t.viewHistoryResult(a)}}},[t._v(" "+t._s(t.$t("dashboard.analysis.modal.history.viewResult"))+" ")]),s("a-popconfirm",{attrs:{title:t.$t("dashboard.analysis.modal.history.deleteConfirm"),"ok-text":t.$t("common.confirm"),"cancel-text":t.$t("common.cancel")},on:{confirm:function(s){return t.deleteHistoryItem(a)}}},[s("a-button",{staticStyle:{color:"#ff4d4f"},attrs:{type:"link",size:"small",icon:"delete"}},[t._v(" "+t._s(t.$t("dashboard.analysis.modal.history.delete"))+" ")])],1)],1)])]),s("template",{slot:"description"},[s("div",{staticStyle:{color:"#666","font-size":"12px"}},[a.price?s("span",[t._v("$"+t._s(t.formatNumber(a.price)))]):t._e(),a.summary?s("span",{staticStyle:{"margin-left":"8px"}},[t._v(t._s(a.summary.substring(0,80))+t._s(a.summary.length>80?"...":""))]):t._e()]),a.created_at?s("div",{staticStyle:{color:"#999","font-size":"12px","margin-top":"4px"}},[t._v(" "+t._s(t.formatIsoTime(a.created_at))+" ")]):t._e()])],2)],1)}}])}),t.historyLoading||0!==t.historyList.length?t._e():s("a-empty",{attrs:{description:t.$t("dashboard.analysis.empty.noHistory")}})],1)],1)],1)},i=[function(){var t=this,s=t._self._c;return s("div",{staticClass:"indicator-box skeleton-box"},[s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text"})])},function(){var t=this,s=t._self._c;return s("div",{staticClass:"indicator-box skeleton-box"},[s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text"})])},function(){var t=this,s=t._self._c;return s("div",{staticClass:"indicator-box skeleton-box"},[s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text"})])}],r=a(68285),n=a(21092),l=a(76959),o=a(17654),c=a(57888),d=(a(74423),a(62062),a(2892),a(32637),a(40150),a(26099),a(21699),a(42762),a(23500),a(95353)),u=a(55585),m=a(64118),h=a(76471),y="/api/fast-analysis";function p(t){return(0,h.Ay)({url:"".concat(y,"/analyze"),method:"post",data:t,timeout:3e5})}function v(t){return(0,h.Ay)({url:"".concat(y,"/history/all"),method:"get",params:t})}function f(t){return(0,h.Ay)({url:"".concat(y,"/history/").concat(t),method:"delete"})}function g(t){return(0,h.Ay)({url:"".concat(y,"/feedback"),method:"post",data:t})}var b=a(62618),_=(a(79432),function(){var t,s,a,e,i,r,n,l,o,c,d,u,m,h,y,p,v,f,g,b,_,k,C,S,A,w=this,$=w._self._c;return $("div",{staticClass:"fast-analysis-report",class:{"theme-dark":w.isDarkTheme}},[w.loading?$("div",{staticClass:"loading-container"},[$("div",{staticClass:"loading-content-pro"},[$("div",{staticClass:"loading-header"},[$("a-icon",{staticClass:"loading-icon-pro",attrs:{type:"thunderbolt"}}),$("span",{staticClass:"loading-title"},[w._v(w._s(w.$t("fastAnalysis.analyzing")))])],1),$("div",{staticClass:"progress-wrapper"},[$("a-progress",{attrs:{percent:w.progressPercent,showInfo:!1,strokeColor:"#1890ff",strokeWidth:8}}),$("span",{staticClass:"progress-text"},[w._v(w._s(w.formatProgress(w.progressPercent))+"%")])],1),$("div",{staticClass:"current-step"},[$("a-icon",{attrs:{type:"loading",spin:""}}),$("span",[w._v(w._s(w.currentStepText))])],1),$("div",{staticClass:"steps-list"},[$("div",{staticClass:"step-item",class:{done:w.step>1,active:1===w.step}},[$("span",{staticClass:"step-dot"}),$("span",{staticClass:"step-text"},[w._v(w._s(w.$t("fastAnalysis.step1")||"获取实时数据"))]),w.step>1?$("a-icon",{staticClass:"step-check",attrs:{type:"check"}}):w._e()],1),$("div",{staticClass:"step-item",class:{done:w.step>2,active:2===w.step}},[$("span",{staticClass:"step-dot"}),$("span",{staticClass:"step-text"},[w._v(w._s(w.$t("fastAnalysis.step2")||"计算技术指标"))]),w.step>2?$("a-icon",{staticClass:"step-check",attrs:{type:"check"}}):w._e()],1),$("div",{staticClass:"step-item",class:{done:w.step>3,active:3===w.step}},[$("span",{staticClass:"step-dot"}),$("span",{staticClass:"step-text"},[w._v(w._s(w.$t("fastAnalysis.step3")||"AI深度分析"))]),w.step>3?$("a-icon",{staticClass:"step-check",attrs:{type:"check"}}):w._e()],1),$("div",{staticClass:"step-item",class:{done:w.step>4,active:4===w.step}},[$("span",{staticClass:"step-dot"}),$("span",{staticClass:"step-text"},[w._v(w._s(w.$t("fastAnalysis.step4")||"生成报告"))]),w.step>4?$("a-icon",{staticClass:"step-check",attrs:{type:"check"}}):w._e()],1)]),$("div",{staticClass:"loading-footer"},[$("span",{staticClass:"elapsed-time"},[w._v(w._s(w.elapsedTimeText))])])])]):w.error?$("div",{staticClass:"error-container"},[$("a-result",{attrs:{status:"warning"===w.errorTone?"warning":"error",title:w.errorTitle,"sub-title":w.error},scopedSlots:w._u([{key:"extra",fn:function(){return[$("a-button",{attrs:{type:"primary"},on:{click:function(t){return w.$emit("retry")}}},[w._v(" "+w._s(w.$t("fastAnalysis.retry"))+" ")])]},proxy:!0}])})],1):w.result?$("div",{staticClass:"result-container"},[$("div",{staticClass:"decision-card",class:w.decisionClass},[$("div",{staticClass:"decision-main"},[$("div",{staticClass:"decision-badge"},[$("a-icon",{attrs:{type:w.decisionIcon}}),$("span",{staticClass:"decision-text"},[w._v(w._s(w.result.decision))])],1),$("div",{staticClass:"confidence-ring"},[$("a-progress",{attrs:{type:"circle",percent:w.result.confidence,width:80,strokeColor:w.confidenceColor},scopedSlots:w._u([{key:"format",fn:function(t){return[$("span",{staticClass:"confidence-value"},[w._v(w._s(t)+"%")])]}}])}),$("div",{staticClass:"confidence-label"},[w._v(w._s(w.$t("fastAnalysis.confidence")))])],1)]),$("div",{staticClass:"decision-summary"},[w._v(" "+w._s(w.result.summary)+" ")]),w.consensusBlock?$("div",{staticClass:"consensus-strip"},[$("div",{staticClass:"consensus-strip-title"},[$("a-icon",{attrs:{type:"cluster"}}),w._v(" "+w._s(w.$t("fastAnalysis.consensusTitle"))+" ")],1),$("div",{staticClass:"consensus-strip-metrics"},[$("span",{staticClass:"cm-item"},[$("em",[w._v(w._s(w.$t("fastAnalysis.consensusDecision")))]),w._v(" "+w._s(w.consensusBlock.consensus_decision)+" ")]),$("span",{staticClass:"cm-item"},[$("em",[w._v(w._s(w.$t("fastAnalysis.consensusScore")))]),w._v(" "+w._s(w.formatConsensusNum(w.consensusBlock.consensus_score))+" ")]),null!=w.consensusBlock.agreement_ratio?$("span",{staticClass:"cm-item"},[$("em",[w._v(w._s(w.$t("fastAnalysis.consensusAgreement")))]),w._v(" "+w._s(w.formatAgreementPct(w.consensusBlock.agreement_ratio))+" ")]):w._e()])]):w._e()]),$("div",{staticClass:"price-info-row"},[$("div",{staticClass:"price-card current"},[$("div",{staticClass:"price-label"},[w._v(w._s(w.$t("fastAnalysis.currentPrice")))]),$("div",{staticClass:"price-value"},[w._v("$"+w._s(w.formatPrice(null===(t=w.result.market_data)||void 0===t?void 0:t.current_price)))]),$("div",{staticClass:"price-change",class:(null===(s=w.result.market_data)||void 0===s?void 0:s.change_24h)>=0?"positive":"negative"},[w._v(" "+w._s((null===(a=w.result.market_data)||void 0===a?void 0:a.change_24h)>=0?"+":"")+w._s(w.formatNumber(null===(e=w.result.market_data)||void 0===e?void 0:e.change_24h,2))+"% ")])]),$("div",{staticClass:"price-card entry"},[$("div",{staticClass:"price-label"},[w._v(w._s(w.$t("fastAnalysis.entryPrice")))]),$("div",{staticClass:"price-value"},[w._v("$"+w._s(w.formatPrice(null===(i=w.result.trading_plan)||void 0===i?void 0:i.entry_price)))])]),$("div",{staticClass:"price-card stop"},[$("div",{staticClass:"price-label"},[w._v(w._s(w.$t("fastAnalysis.stopLoss")))]),$("div",{staticClass:"price-value negative"},[w._v("$"+w._s(w.formatPrice(null===(r=w.result.trading_plan)||void 0===r?void 0:r.stop_loss)))]),$("div",{staticClass:"price-hint"},[$("a-tooltip",{attrs:{title:w.$t("fastAnalysis.stopLossHint")}},[$("a-icon",{attrs:{type:"info-circle"}}),w._v(" "+w._s(w.$t("fastAnalysis.atrBased"))+" ")],1)],1)]),$("div",{staticClass:"price-card target"},[$("div",{staticClass:"price-label"},[w._v(w._s(w.$t("fastAnalysis.takeProfit")))]),$("div",{staticClass:"price-value positive"},[w._v("$"+w._s(w.formatPrice(null===(n=w.result.trading_plan)||void 0===n?void 0:n.take_profit)))]),$("div",{staticClass:"price-hint"},[$("a-tooltip",{attrs:{title:w.$t("fastAnalysis.takeProfitHint")}},[$("a-icon",{attrs:{type:"info-circle"}}),w._v(" "+w._s(w.$t("fastAnalysis.atrBased"))+" ")],1)],1)])]),$("div",{staticClass:"scores-row"},[$("div",{staticClass:"score-item"},[$("div",{staticClass:"score-header"},[$("a-icon",{attrs:{type:"line-chart"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.technical")))])],1),$("a-progress",{attrs:{percent:(null===(l=w.result.scores)||void 0===l?void 0:l.technical)||50,strokeColor:w.getScoreColor(null===(o=w.result.scores)||void 0===o?void 0:o.technical),showInfo:!1}}),$("div",{staticClass:"score-value"},[w._v(w._s((null===(c=w.result.scores)||void 0===c?void 0:c.technical)||50))])],1),$("div",{staticClass:"score-item"},[$("div",{staticClass:"score-header"},[$("a-icon",{attrs:{type:"bank"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.fundamental")))])],1),$("a-progress",{attrs:{percent:(null===(d=w.result.scores)||void 0===d?void 0:d.fundamental)||50,strokeColor:w.getScoreColor(null===(u=w.result.scores)||void 0===u?void 0:u.fundamental),showInfo:!1}}),$("div",{staticClass:"score-value"},[w._v(w._s((null===(m=w.result.scores)||void 0===m?void 0:m.fundamental)||50))])],1),$("div",{staticClass:"score-item"},[$("div",{staticClass:"score-header"},[$("a-icon",{attrs:{type:"heart"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.sentiment")))])],1),$("a-progress",{attrs:{percent:(null===(h=w.result.scores)||void 0===h?void 0:h.sentiment)||50,strokeColor:w.getScoreColor(null===(y=w.result.scores)||void 0===y?void 0:y.sentiment),showInfo:!1}}),$("div",{staticClass:"score-value"},[w._v(w._s((null===(p=w.result.scores)||void 0===p?void 0:p.sentiment)||50))])],1),$("div",{staticClass:"score-item overall"},[$("div",{staticClass:"score-header"},[$("a-icon",{attrs:{type:"dashboard"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.overall")))])],1),$("a-progress",{attrs:{percent:(null===(v=w.result.scores)||void 0===v?void 0:v.overall)||50,strokeColor:w.getScoreColor(null===(f=w.result.scores)||void 0===f?void 0:f.overall),showInfo:!1}}),$("div",{staticClass:"score-value"},[w._v(w._s((null===(g=w.result.scores)||void 0===g?void 0:g.overall)||50))])],1)]),w.result.detailed_analysis?$("div",{staticClass:"detailed-analysis"},[w.result.detailed_analysis.technical?$("div",{staticClass:"analysis-card technical"},[$("div",{staticClass:"analysis-card-header"},[$("a-icon",{attrs:{type:"line-chart"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.technicalAnalysis")))]),$("a-tag",{attrs:{color:w.getScoreTagColor(null===(b=w.result.scores)||void 0===b?void 0:b.technical)}},[w._v(" "+w._s((null===(_=w.result.scores)||void 0===_?void 0:_.technical)||50)+"分 ")])],1),$("div",{staticClass:"analysis-card-content"},[w._v(" "+w._s(w.result.detailed_analysis.technical)+" ")])]):w._e(),w.result.detailed_analysis.fundamental?$("div",{staticClass:"analysis-card fundamental"},[$("div",{staticClass:"analysis-card-header"},[$("a-icon",{attrs:{type:"bank"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.fundamentalAnalysis")))]),$("a-tag",{attrs:{color:w.getScoreTagColor(null===(k=w.result.scores)||void 0===k?void 0:k.fundamental)}},[w._v(" "+w._s((null===(C=w.result.scores)||void 0===C?void 0:C.fundamental)||50)+"分 ")])],1),$("div",{staticClass:"analysis-card-content"},[w._v(" "+w._s(w.result.detailed_analysis.fundamental)+" ")])]):w._e(),w.result.detailed_analysis.sentiment?$("div",{staticClass:"analysis-card sentiment"},[$("div",{staticClass:"analysis-card-header"},[$("a-icon",{attrs:{type:"heart"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.sentimentAnalysis")))]),$("a-tag",{attrs:{color:w.getScoreTagColor(null===(S=w.result.scores)||void 0===S?void 0:S.sentiment)}},[w._v(" "+w._s((null===(A=w.result.scores)||void 0===A?void 0:A.sentiment)||50)+"分 ")])],1),$("div",{staticClass:"analysis-card-content"},[w._v(" "+w._s(w.result.detailed_analysis.sentiment)+" ")])]):w._e()]):w._e(),$("div",{staticClass:"analysis-details"},[$("div",{staticClass:"detail-section reasons"},[$("div",{staticClass:"section-title"},[$("a-icon",{attrs:{type:"bulb",theme:"twoTone",twoToneColor:"#52c41a"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.keyReasons")))])],1),$("ul",{staticClass:"detail-list"},w._l(w.result.reasons,function(t,s){return $("li",{key:"r-"+s},[w._v(" "+w._s(t)+" ")])}),0)]),$("div",{staticClass:"detail-section risks"},[$("div",{staticClass:"section-title"},[$("a-icon",{attrs:{type:"warning",theme:"twoTone",twoToneColor:"#faad14"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.risks")))])],1),$("ul",{staticClass:"detail-list"},w._l(w.result.risks,function(t,s){return $("li",{key:"k-"+s},[w._v(" "+w._s(t)+" ")])}),0)])]),w.result.indicators&&Object.keys(w.result.indicators).length>0?$("div",{staticClass:"indicators-section"},[$("div",{staticClass:"section-title"},[$("a-icon",{attrs:{type:"stock"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.indicators")))])],1),$("div",{staticClass:"indicators-grid"},[w.result.indicators.rsi?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v("RSI (14)")]),$("div",{staticClass:"indicator-value",class:w.getRsiClass(w.result.indicators.rsi.value)},[w._v(" "+w._s(w.formatNumber(w.result.indicators.rsi.value,1))+" ")]),$("div",{staticClass:"indicator-signal"},[w._v(w._s(w.translateSignal(w.result.indicators.rsi.signal)))])]):w._e(),w.result.indicators.macd?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v("MACD")]),$("div",{staticClass:"indicator-value",class:"bullish"===w.result.indicators.macd.signal?"bullish":"bearish"===w.result.indicators.macd.signal?"bearish":""},[w._v(" "+w._s(w.translateTrend(w.result.indicators.macd.trend))+" ")]),$("div",{staticClass:"indicator-signal"},[w._v(w._s(w.translateSignal(w.result.indicators.macd.signal)))])]):w._e(),w.result.indicators.moving_averages?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v(w._s(w.$t("fastAnalysis.maTrend")))]),$("div",{staticClass:"indicator-value",class:w.getMaTrendClass(w.result.indicators.moving_averages.trend)},[w._v(" "+w._s(w.translateTrend(w.result.indicators.moving_averages.trend))+" ")])]):w._e(),w.result.indicators.levels?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v(w._s(w.$t("fastAnalysis.support")))]),$("div",{staticClass:"indicator-value"},[w._v("$"+w._s(w.formatPrice(w.result.indicators.levels.support)))])]):w._e(),w.result.indicators.levels?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v(w._s(w.$t("fastAnalysis.resistance")))]),$("div",{staticClass:"indicator-value"},[w._v("$"+w._s(w.formatPrice(w.result.indicators.levels.resistance)))])]):w._e(),w.result.indicators.volatility?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v(w._s(w.$t("fastAnalysis.volatility")))]),$("div",{staticClass:"indicator-value",class:w.getVolatilityClass(w.result.indicators.volatility.level)},[w._v(" "+w._s(w.translateVolatility(w.result.indicators.volatility.level))+" ("+w._s(w.result.indicators.volatility.pct)+"%) ")])]):w._e()])]):w._e(),$("div",{staticClass:"feedback-section"},[$("div",{staticClass:"feedback-question"},[w._v(w._s(w.$t("fastAnalysis.wasHelpful")))]),$("div",{staticClass:"feedback-buttons"},[$("a-button",{attrs:{type:"helpful"===w.userFeedback?"primary":"default",size:"small",loading:"helpful"===w.feedbackLoading},on:{click:function(t){return w.submitFeedback("helpful")}}},[$("a-icon",{attrs:{type:"like"}}),w._v(" "+w._s(w.$t("fastAnalysis.helpful"))+" ")],1),$("a-button",{attrs:{type:"not_helpful"===w.userFeedback?"danger":"default",size:"small",loading:"not_helpful"===w.feedbackLoading},on:{click:function(t){return w.submitFeedback("not_helpful")}}},[$("a-icon",{attrs:{type:"dislike"}}),w._v(" "+w._s(w.$t("fastAnalysis.notHelpful"))+" ")],1)],1),$("div",{staticClass:"analysis-meta"},[$("span",[w._v(w._s(w.$t("fastAnalysis.analysisTime"))+": "+w._s(w.result.analysis_time_ms)+"ms")]),w.result.memory_id?$("span",[w._v("ID: #"+w._s(w.result.memory_id))]):w._e()])])]):$("div",{staticClass:"empty-container"},[$("div",{staticClass:"empty-content"},[$("a-icon",{staticClass:"empty-icon",attrs:{type:"radar-chart"}}),$("div",{staticClass:"empty-title"},[w._v(w._s(w.$t("fastAnalysis.selectSymbol")))]),$("div",{staticClass:"empty-hint"},[w._v(w._s(w.$t("fastAnalysis.selectHint")))])],1)])])}),k=[],C={name:"FastAnalysisReport",props:{result:{type:Object,default:null},loading:{type:Boolean,default:!1},error:{type:String,default:null},errorTone:{type:String,default:"error",validator:function(t){return["error","warning","info"].includes(t)}}},data:function(){return{userFeedback:null,feedbackLoading:null,progress:0,elapsedSeconds:0,mainTimer:null}},computed:(0,c.A)((0,c.A)({},(0,d.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},progressPercent:function(){return Math.round(10*this.progress)/10},step:function(){return this.progress<25?1:this.progress<50?2:this.progress<75?3:4},currentStepText:function(){var t={1:this.$t("fastAnalysis.step1")||"获取实时数据",2:this.$t("fastAnalysis.step2")||"计算技术指标",3:this.$t("fastAnalysis.step3")||"AI深度分析",4:this.$t("fastAnalysis.step4")||"生成报告"};return t[this.step]||this.$t("fastAnalysis.preparing")||"准备中..."},elapsedTimeText:function(){if(this.elapsedSeconds<60)return"".concat(this.elapsedSeconds,"s");var t=Math.floor(this.elapsedSeconds/60),s=this.elapsedSeconds%60;return"".concat(t,"m ").concat(s,"s")},decisionClass:function(){if(!this.result)return"";var t=this.result.decision;return"BUY"===t?"decision-buy":"SELL"===t?"decision-sell":"decision-hold"},decisionIcon:function(){if(!this.result)return"question";var t=this.result.decision;return"BUY"===t?"arrow-up":"SELL"===t?"arrow-down":"pause"},confidenceColor:function(){var t,s=(null===(t=this.result)||void 0===t?void 0:t.confidence)||50;return s>=70?"#52c41a":s>=50?"#1890ff":"#faad14"},consensusBlock:function(){var t,s=null===(t=this.result)||void 0===t?void 0:t.consensus;return s&&"object"===(0,r.A)(s)?null==s.consensus_decision&&null==s.consensus_score?null:s:null},insufficientCreditsError:function(){if(!this.error)return!1;var t=String(this.error);return t.includes("积分不足")||t.toLowerCase().includes("insufficient credits")},errorTitle:function(){return"warning"===this.errorTone?this.$t("fastAnalysis.analysisInProgressTitle"):this.insufficientCreditsError?this.$t("fastAnalysis.insufficientCredits"):this.$t("fastAnalysis.error")}}),watch:{result:function(){this.userFeedback=null},loading:{handler:function(t){t?this.startProgressTimer():this.stopProgressTimer()},immediate:!0}},mounted:function(){this.loading&&this.startProgressTimer()},beforeDestroy:function(){this.stopProgressTimer()},methods:{formatPrice:function(t){if(void 0===t||null===t)return"--";var s=parseFloat(t);return isNaN(s)?"--":s<1?s.toFixed(6):s<100?s.toFixed(4):s<1e4?s.toFixed(2):s.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})},formatNumber:function(t){var s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;if(void 0===t||null===t)return"--";var a=parseFloat(t);return isNaN(a)?"--":a.toFixed(s)},formatConsensusNum:function(t){if(void 0===t||null===t||""===t)return"--";var s=Number(t);return Number.isNaN(s)?"--":s.toFixed(1)},formatAgreementPct:function(t){var s=Number(t);return Number.isNaN(s)?"--":"".concat(Math.round(100*s),"%")},formatProgress:function(t){var s=parseFloat(t)||0;return s%1===0?s.toFixed(0):s.toFixed(1)},getScoreColor:function(t){return t>=70?"#52c41a":t>=50?"#1890ff":t>=30?"#faad14":"#ff4d4f"},getScoreTagColor:function(t){return t>=70?"green":t>=50?"blue":t>=30?"orange":"red"},getRsiClass:function(t){return t<30?"oversold":t>70?"overbought":""},getMaTrendClass:function(t){return t?t.includes("uptrend")||t.includes("strong_uptrend")?"bullish":t.includes("downtrend")||t.includes("strong_downtrend")?"bearish":"":""},getVolatilityClass:function(t){return"high"===t?"high-volatility":"low"===t?"low-volatility":""},translateSignal:function(t){if(!t)return"--";var s="fastAnalysis.signal.".concat(t),a=this.$t(s);return a===s?t:a},translateTrend:function(t){if(!t)return"--";var s="fastAnalysis.trend.".concat(t),a=this.$t(s);return a===s?t:a},translateVolatility:function(t){if(!t)return"--";var s="fastAnalysis.volatilityLevel.".concat(t),a=this.$t(s);return a===s?t:a},submitFeedback:function(t){var s=this;return(0,o.A)((0,l.A)().m(function a(){var e;return(0,l.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(null!==(e=s.result)&&void 0!==e&&e.memory_id){a.n=1;break}return s.$message.warning(s.$t("fastAnalysis.feedbackUnavailable")||"反馈功能暂不可用,请刷新后重试"),a.a(2);case 1:return s.feedbackLoading=t,a.p=2,a.n=3,g({memory_id:s.result.memory_id,feedback:t});case 3:s.userFeedback=t,s.$message.success(s.$t("fastAnalysis.feedbackThanks")),a.n=5;break;case 4:a.p=4,a.v,s.$message.error(s.$t("fastAnalysis.feedbackFailed"));case 5:return a.p=5,s.feedbackLoading=null,a.f(5);case 6:return a.a(2)}},a,null,[[2,4,5,6]])}))()},startProgressTimer:function(){var t=this;this.stopProgressTimer(),this.progress=0,this.elapsedSeconds=0;var s=Date.now();this.mainTimer=window.setInterval(function(){t.elapsedSeconds=Math.floor((Date.now()-s)/1e3),t.progress<75?t.progress=Math.min(t.progress+1,75):t.progress<90?t.progress=Math.min(t.progress+.5,90):t.progress<95&&(t.progress=Math.min(t.progress+.2,95))},100)},stopProgressTimer:function(){this.mainTimer&&(window.clearInterval(this.mainTimer),this.mainTimer=null),this.progress=0,this.elapsedSeconds=0}}},S=C,A=a(845),w=(0,A.A)(S,_,k,!1,null,"693144f6",null),$=w.exports,T={name:"Analysis",props:{embedded:{type:Boolean,default:!1},presetSymbol:{type:String,default:""},autoAnalyzeSignal:{type:Number,default:0}},components:{FastAnalysisReport:$},data:function(){return{loadingMarket:!1,heatmapType:"crypto",marketData:{fearGreed:null,vix:null,dxy:null,indices:[],heatmap:{crypto:[],commodities:[],sectors:[],forex:[]},calendar:[]},loadingSentiment:!1,loadingIndices:!1,loadingHeatmap:!1,loadingCalendar:!1,watchlistPriceTimer:null,watchlistPrices:{},localUserInfo:{},loadingUserInfo:!1,userId:1,watchlist:[],loadingWatchlist:!1,showAddStockModal:!1,addingStock:!1,selectedSymbol:void 0,analyzing:!1,analysisResult:null,analysisError:null,analysisErrorTone:"error",showHistoryModal:!1,historyList:[],historyLoading:!1,historyPage:1,historyPageSize:20,historyTotal:0,marketTypes:[],selectedMarketTab:"",symbolSearchKeyword:"",symbolSearchResults:[],searchingSymbols:!1,hotSymbols:[],loadingHotSymbols:!1,selectedSymbolForAdd:null,searchTimer:null,hasSearched:!1}},computed:(0,c.A)((0,c.A)((0,c.A)({},(0,d.L8)(["userInfo"])),(0,d.aH)({navTheme:function(t){return t.app.theme},primaryColor:function(t){return t.app.color||"#1890ff"}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},isZhLocale:function(){return"zh-CN"===this.$i18n.locale},currentHeatmap:function(){return this.marketData.heatmap[this.heatmapType]||[]},storeUserInfo:function(){return this.userInfo||{}},mergedUserInfo:function(){return this.localUserInfo&&this.localUserInfo.email?this.localUserInfo:this.storeUserInfo}}),created:function(){this.loadUserInfo(),this.loadMarketTypes(),this.loadWatchlist(),this.loadMarketData()},mounted:function(){this.startWatchlistPriceRefresh()},beforeDestroy:function(){this.watchlistPriceTimer&&clearInterval(this.watchlistPriceTimer)},methods:{filterSymbolOption:function(t,s){var a,e=(null===(a=s.componentOptions)||void 0===a||null===(a=a.propsData)||void 0===a?void 0:a.value)||"";return"__add_stock_option__"===e||e.toLowerCase().includes(t.toLowerCase())},handleSymbolChange:function(t){var s=this;if("__add_stock_option__"===t)return this.showAddStockModal=!0,void this.$nextTick(function(){s.selectedSymbol=void 0});this.selectedSymbol=t,this.analysisResult=null,this.analysisError=null,this.analysisErrorTone="error",this.$emit("symbol-change",t)},selectWatchlistItem:function(t){this.selectedSymbol="".concat(t.market,":").concat(t.symbol),this.analysisResult=null,this.analysisError=null,this.analysisErrorTone="error",this.$emit("symbol-change",this.selectedSymbol)},loadMarketData:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){return(0,l.A)().w(function(s){while(1)switch(s.n){case 0:t.loadingMarket=!0,t.loadSentimentData(),t.loadIndicesData(),t.loadHeatmapData(),t.loadCalendarData();case 1:return s.a(2)}},s)}))()},loadSentimentData:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a,e,i,r;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.loadingSentiment=!0,s.p=1,s.n=2,(0,b.EF)();case 2:a=s.v,1===(null===a||void 0===a?void 0:a.code)&&null!==a&&void 0!==a&&a.data&&(t.marketData.fearGreed=(null===(e=a.data.fear_greed)||void 0===e?void 0:e.value)||null,t.marketData.vix=(null===(i=a.data.vix)||void 0===i?void 0:i.value)||null,t.marketData.dxy=(null===(r=a.data.dxy)||void 0===r?void 0:r.value)||null),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.p=4,t.loadingSentiment=!1,t.checkAllLoaded(),s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},loadIndicesData:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.loadingIndices=!0,s.p=1,s.n=2,(0,b.yI)();case 2:a=s.v,1===(null===a||void 0===a?void 0:a.code)&&null!==a&&void 0!==a&&a.data&&(t.marketData.indices=a.data.indices||[]),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.p=4,t.loadingIndices=!1,t.checkAllLoaded(),s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},loadHeatmapData:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.loadingHeatmap=!0,s.p=1,s.n=2,(0,b.f$)();case 2:a=s.v,1===(null===a||void 0===a?void 0:a.code)&&null!==a&&void 0!==a&&a.data&&(t.marketData.heatmap={crypto:a.data.crypto||[],commodities:a.data.commodities||[],sectors:a.data.sectors||[],forex:a.data.forex||[]}),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.p=4,t.loadingHeatmap=!1,t.checkAllLoaded(),s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},loadCalendarData:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.loadingCalendar=!0,s.p=1,s.n=2,(0,b.kF)();case 2:a=s.v,1===(null===a||void 0===a?void 0:a.code)&&(t.marketData.calendar=a.data||[]),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.p=4,t.loadingCalendar=!1,t.checkAllLoaded(),s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},checkAllLoaded:function(){this.loadingSentiment||this.loadingIndices||this.loadingHeatmap||this.loadingCalendar||(this.loadingMarket=!1)},getFearGreedClass:function(t){return t?t<=25?"extreme-fear":t<=45?"fear":t<=55?"neutral":t<=75?"greed":"extreme-greed":""},getVixLevel:function(t){return t?t<15?"low":t<25?"medium":"high":""},formatNum:function(t){var s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return void 0===t||null===t||isNaN(t)?"--":Number(t).toFixed(s)},getHeatmapStyle:function(t){var s=parseFloat(t)||0,a=Math.min(Math.abs(s)/5,1);return s>=0?{background:"rgba(34, 197, 94, ".concat(.15+.6*a,")"),color:s>2?"#fff":"#166534"}:{background:"rgba(239, 68, 68, ".concat(.15+.6*a,")"),color:s<-2?"#fff":"#991b1b"}},getCountryFlag:function(t){var s={US:"🇺🇸",CN:"🇨🇳",EU:"🇪🇺",JP:"🇯🇵",UK:"🇬🇧",DE:"🇩🇪",AU:"🇦🇺",CA:"🇨🇦"};return s[t]||"🌍"},formatCalendarDate:function(t){if(!t)return"";try{var s=new Date(t),a=new Date,e=new Date(a);if(e.setDate(e.getDate()+1),s.toDateString()===a.toDateString())return this.isZhLocale?"今天":"Today";if(s.toDateString()===e.toDateString())return this.isZhLocale?"明天":"Tmrw";var i=s.getMonth()+1,r=s.getDate();return"".concat(i,"/").concat(r)}catch(n){return t}},formatPrice:function(t){return t?t>=1e4?(t/1e3).toFixed(1)+"K":t>=1e3?t.toFixed(0):t.toFixed(2):"--"},formatHeatmapPrice:function(t){return t?t>=1e4?"$"+(t/1e3).toFixed(1)+"K":t>=1e3?"$"+t.toFixed(0):t>=1?"$"+t.toFixed(2):"$"+t.toFixed(4):""},getHeatmapName:function(t){return"sectors"===this.heatmapType||"commodities"===this.heatmapType||"forex"===this.heatmapType?this.isZhLocale?t.name_cn||t.name:t.name_en||t.name:t.name},getImpactClass:function(t){return t.actual_impact||t.expected_impact||"neutral"},getMarketColor:function(t){var s={USStock:"green",Crypto:"purple",Forex:"gold",Futures:"cyan"};return s[t]||"default"},getCurrencySymbol:function(t){return"$"},formatCreditNum:function(t){if(void 0===t||null===t||""===t)return"--";var s=Number(t);return Number.isNaN(s)?String(t):Number.isInteger(s)?String(s):s.toFixed(2)},refreshUserInfoFromServer:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return s.p=0,s.n=1,(0,u.ug)();case 1:a=s.v,a&&1===a.code&&a.data&&(t.localUserInfo=a.data,t.userId=a.data.id,t.$store.commit("SET_INFO",a.data)),s.n=3;break;case 2:s.p=2,s.v;case 3:return s.a(2)}},s,null,[[0,2]])}))()},startFastAnalysis:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a,e,i,r,o,d,u,m,h,y,v,f,g,b,_;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(!t.analyzing){s.n=1;break}return s.a(2);case 1:if(t.selectedSymbol){s.n=2;break}return t.$message.warning(t.$t("dashboard.analysis.message.selectSymbol")),s.a(2);case 2:return t.analyzing=!0,t.analysisError=null,t.analysisErrorTone="error",a=t.selectedSymbol.split(":"),e=(0,n.A)(a,2),i=e[0],r=e[1],o=t.$store.getters.lang||"zh-CN",s.p=3,s.n=4,p({market:i,symbol:r,language:o,timeframe:"1D"});case 4:if(d=s.v,!d||1!==d.code||!d.data){s.n=6;break}return u=(0,c.A)({},d.data),delete u.credits_charged,delete u.remaining_credits,t.analysisResult=u,m=d.data.remaining_credits,void 0!==m&&null!==m?t.$message.success(t.$t("fastAnalysis.analysisCompleteWithCredits",{remaining:t.formatCreditNum(m)})):t.$message.success(t.$t("dashboard.analysis.message.analysisComplete")),s.n=5,t.refreshUserInfoFromServer();case 5:s.n=7;break;case 6:throw new Error((null===d||void 0===d?void 0:d.msg)||"分析失败");case 7:s.n=9;break;case 8:s.p=8,_=s.v,v=null===_||void 0===_||null===(h=_.response)||void 0===h?void 0:h.status,f=(null===_||void 0===_||null===(y=_.response)||void 0===y?void 0:y.data)||{},g=f.msg,b=f.data,429===v&&b&&b.in_progress?(t.analysisErrorTone="warning",t.analysisError=t.$t("fastAnalysis.analysisInProgress"),t.$message.warning(t.analysisError)):400===v&&"Insufficient credits"===g?(t.analysisError=t.$t("fastAnalysis.insufficientCreditsDetail",{required:t.formatCreditNum(null===b||void 0===b?void 0:b.required),current:t.formatCreditNum(null===b||void 0===b?void 0:b.current),shortage:t.formatCreditNum(null===b||void 0===b?void 0:b.shortage)}),t.$message.error(t.analysisError)):(t.analysisError=g||(null===_||void 0===_?void 0:_.message)||t.$t("dashboard.analysis.message.analysisFailed"),t.$message.error(t.analysisError));case 9:return s.p=9,t.analyzing=!1,s.f(9);case 10:return s.a(2)}},s,null,[[3,8,9,10]])}))()},loadHistoryList:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.historyLoading=!0,s.p=1,s.n=2,v({page:t.historyPage,pagesize:t.historyPageSize});case 2:a=s.v,a&&1===a.code&&a.data&&(t.historyList=a.data.list||[],t.historyTotal=a.data.total||0),s.n=4;break;case 3:s.p=3,s.v,t.$message.error(t.$t("dashboard.analysis.message.loadHistoryFailed")||"加载历史记录失败");case 4:return s.p=4,t.historyLoading=!1,s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},viewHistoryResult:function(t){var s=this;return(0,o.A)((0,l.A)().m(function a(){return(0,l.A)().w(function(a){while(1)switch(a.n){case 0:if(!t.full_result){a.n=1;break}return s.analysisResult=t.full_result,s.selectedSymbol="".concat(t.market,":").concat(t.symbol),s.showHistoryModal=!1,a.a(2);case 1:s.analysisResult={decision:t.decision,confidence:t.confidence,summary:t.summary,market_data:{current_price:t.price,change_24h:0},trading_plan:{entry_price:t.price,stop_loss:.95*t.price,take_profit:1.05*t.price},scores:t.scores||{},reasons:t.reasons||[],risks:[],indicators:t.indicators||{},memory_id:t.id,analysis_time_ms:0},s.selectedSymbol="".concat(t.market,":").concat(t.symbol),s.showHistoryModal=!1;case 2:return a.a(2)}},a)}))()},deleteHistoryItem:function(t){var s=this;return(0,o.A)((0,l.A)().m(function a(){var e;return(0,l.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,f(t.id);case 1:e=a.v,e&&1===e.code?(s.$message.success(s.$t("dashboard.analysis.message.deleteSuccess")),s.loadHistoryList()):s.$message.error((null===e||void 0===e?void 0:e.msg)||s.$t("dashboard.analysis.message.deleteFailed")),a.n=3;break;case 2:a.p=2,a.v,s.$message.error(s.$t("dashboard.analysis.message.deleteFailed"));case 3:return a.a(2)}},a,null,[[0,2]])}))()},formatTime:function(t){if(!t)return"-";var s=new Date(1e3*t);return s.toLocaleString("zh-CN")},formatIsoTime:function(t){if(!t)return"-";var s=new Date(t);return s.toLocaleString("zh-CN")},getStatusColor:function(t){var s={pending:"orange",processing:"blue",completed:"green",failed:"red"};return s[t]||"default"},getStatusText:function(t){var s={pending:"dashboard.analysis.status.pending",processing:"dashboard.analysis.status.processing",completed:"dashboard.analysis.status.completed",failed:"dashboard.analysis.status.failed"},a=s[t];return a?this.$t(a):t},loadUserInfo:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(t.loadingUserInfo=!0,s.p=1,!t.storeUserInfo||!t.storeUserInfo.email){s.n=2;break}return t.localUserInfo=t.storeUserInfo,t.userId=t.storeUserInfo.id,t.loadingUserInfo=!1,t.loadWatchlist(),s.a(2);case 2:return s.n=3,(0,u.ug)();case 3:a=s.v,a&&1===a.code&&a.data&&(t.localUserInfo=a.data,t.userId=a.data.id,t.$store.commit("SET_INFO",a.data),t.loadWatchlist()),s.n=5;break;case 4:s.p=4,s.v;case 5:return s.p=5,t.loadingUserInfo=!1,s.f(5);case 6:return s.a(2)}},s,null,[[1,4,5,6]])}))()},loadWatchlist:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(t.userId){s.n=1;break}return s.a(2);case 1:return t.loadingWatchlist=!0,s.p=2,s.n=3,(0,m.Qo)({userid:t.userId});case 3:if(a=s.v,!a||1!==a.code||!a.data){s.n=4;break}return t.watchlist=a.data.map(function(t){return(0,c.A)((0,c.A)({},t),{},{price:0,change:0,changePercent:0})}),s.n=4,t.loadWatchlistPrices();case 4:s.n=6;break;case 5:s.p=5,s.v;case 6:return s.p=6,t.loadingWatchlist=!1,s.f(6);case 7:return s.a(2)}},s,null,[[2,5,6,7]])}))()},loadWatchlistPrices:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a,e,i,r;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(t.watchlist&&0!==t.watchlist.length){s.n=1;break}return s.a(2);case 1:return s.p=1,a=t.watchlist.map(function(t){return{market:t.market,symbol:t.symbol}}),s.n=2,(0,m.ms)({watchlist:a});case 2:e=s.v,e&&1===e.code&&e.data&&(i={},r={},e.data.forEach(function(t){i["".concat(t.market,"-").concat(t.symbol)]=t,r["".concat(t.market,":").concat(t.symbol)]={price:t.price||0,change:t.changePercent||0}}),t.watchlistPrices=r,t.watchlist=t.watchlist.map(function(t){var s="".concat(t.market,"-").concat(t.symbol),a=i[s];return a?(0,c.A)((0,c.A)({},t),{},{price:a.price||0,change:a.change||0,changePercent:a.changePercent||0}):t})),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.a(2)}},s,null,[[1,3]])}))()},startWatchlistPriceRefresh:function(){var t=this;this.watchlistPriceTimer=setInterval(function(){t.watchlist&&t.watchlist.length>0&&t.loadWatchlistPrices()},3e4),this.watchlist&&this.watchlist.length>0&&this.loadWatchlistPrices()},handleAddStock:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a,e,i,r,n,o,c;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(a="",e="",i="",!t.selectedSymbolForAdd){s.n=1;break}a=t.selectedSymbolForAdd.market,e=t.selectedSymbolForAdd.symbol.toUpperCase(),i=t.selectedSymbolForAdd.name||"",s.n=4;break;case 1:if(!t.symbolSearchKeyword||!t.symbolSearchKeyword.trim()){s.n=3;break}if(t.selectedMarketTab){s.n=2;break}return t.$message.warning(t.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),s.a(2);case 2:a=t.selectedMarketTab,e=t.symbolSearchKeyword.trim().toUpperCase(),i="",s.n=4;break;case 3:return t.$message.warning(t.$t("dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol")),s.a(2);case 4:return t.addingStock=!0,s.p=5,s.n=6,(0,m.dp)({userid:t.userId,market:a,symbol:e,name:i});case 6:if(r=s.v,!r||1!==r.code){s.n=8;break}return t.$message.success(t.$t("dashboard.analysis.message.addStockSuccess")),t.handleCloseAddStockModal(),s.n=7,t.loadWatchlist();case 7:s.n=9;break;case 8:t.$message.error((null===r||void 0===r?void 0:r.msg)||t.$t("dashboard.analysis.message.addStockFailed"));case 9:s.n=11;break;case 10:s.p=10,c=s.v,o=(null===c||void 0===c||null===(n=c.response)||void 0===n||null===(n=n.data)||void 0===n?void 0:n.msg)||(null===c||void 0===c?void 0:c.message)||t.$t("dashboard.analysis.message.addStockFailed"),t.$message.error(o);case 11:return s.p=11,t.addingStock=!1,s.f(11);case 12:return s.a(2)}},s,null,[[5,10,11,12]])}))()},handleCloseAddStockModal:function(){this.showAddStockModal=!1,this.selectedSymbolForAdd=null,this.symbolSearchKeyword="",this.symbolSearchResults=[],this.hasSearched=!1,this.selectedMarketTab=this.marketTypes.length>0?this.marketTypes[0].value:""},handleMarketTabChange:function(t){this.selectedMarketTab=t,this.symbolSearchKeyword="",this.symbolSearchResults=[],this.selectedSymbolForAdd=null,this.hasSearched=!1,this.loadHotSymbols(t)},handleSymbolSearchInput:function(t){var s=this,a=t.target.value;if(this.symbolSearchKeyword=a,this.searchTimer&&clearTimeout(this.searchTimer),!a||""===a.trim())return this.symbolSearchResults=[],this.hasSearched=!1,void(this.selectedSymbolForAdd=null);this.searchTimer=setTimeout(function(){s.searchSymbolsInModal(a)},500)},handleSearchOrInput:function(t){t&&t.trim()&&(this.selectedMarketTab?this.symbolSearchResults.length>0||(this.hasSearched&&0===this.symbolSearchResults.length?this.handleDirectAdd():this.searchSymbolsInModal(t)):this.$message.warning(this.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")))},searchSymbolsInModal:function(t){var s=this;return(0,o.A)((0,l.A)().m(function a(){var e;return(0,l.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(t&&""!==t.trim()){a.n=1;break}return s.symbolSearchResults=[],s.hasSearched=!1,a.a(2);case 1:if(s.selectedMarketTab){a.n=2;break}return s.$message.warning(s.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),a.a(2);case 2:return s.searchingSymbols=!0,s.hasSearched=!0,a.p=3,a.n=4,(0,m._3)({market:s.selectedMarketTab,keyword:t.trim(),limit:20});case 4:e=a.v,e&&1===e.code&&e.data&&e.data.length>0?s.symbolSearchResults=e.data:(s.symbolSearchResults=[],s.selectedSymbolForAdd={market:s.selectedMarketTab,symbol:t.trim().toUpperCase(),name:""}),a.n=6;break;case 5:a.p=5,a.v,s.symbolSearchResults=[],s.selectedSymbolForAdd={market:s.selectedMarketTab,symbol:t.trim().toUpperCase(),name:""};case 6:return a.p=6,s.searchingSymbols=!1,a.f(6);case 7:return a.a(2)}},a,null,[[3,5,6,7]])}))()},handleDirectAdd:function(){this.symbolSearchKeyword&&this.symbolSearchKeyword.trim()?this.selectedMarketTab?this.selectedSymbolForAdd={market:this.selectedMarketTab,symbol:this.symbolSearchKeyword.trim().toUpperCase(),name:""}:this.$message.warning(this.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")):this.$message.warning(this.$t("dashboard.analysis.modal.addStock.pleaseEnterSymbol"))},selectSymbol:function(t){this.selectedSymbolForAdd={market:t.market,symbol:t.symbol,name:t.name||t.symbol}},loadHotSymbols:function(t){var s=this;return(0,o.A)((0,l.A)().m(function a(){var e;return(0,l.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(t||(t=s.selectedMarketTab||(s.marketTypes.length>0?s.marketTypes[0].value:"")),t){a.n=1;break}return a.a(2);case 1:return s.loadingHotSymbols=!0,a.p=2,a.n=3,(0,m.z6)({market:t,limit:10});case 3:e=a.v,e&&1===e.code&&e.data?s.hotSymbols=e.data:s.hotSymbols=[],a.n=5;break;case 4:a.p=4,a.v,s.hotSymbols=[];case 5:return a.p=5,s.loadingHotSymbols=!1,a.f(5);case 6:return a.a(2)}},a,null,[[2,4,5,6]])}))()},removeFromWatchlist:function(t){var s=arguments,a=this;return(0,o.A)((0,l.A)().m(function e(){var i,n,o;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(a.userId){e.n=1;break}return e.a(2);case 1:return i="object"===(0,r.A)(t)?t.symbol:t,n="object"===(0,r.A)(t)?t.market:s[1],e.p=2,e.n=3,(0,m.mk)({userid:a.userId,symbol:i,market:n});case 3:if(o=e.v,!o||1!==o.code){e.n=5;break}return a.$message.success(a.$t("dashboard.analysis.message.removeStockSuccess")),e.n=4,a.loadWatchlist();case 4:e.n=6;break;case 5:a.$message.error((null===o||void 0===o?void 0:o.msg)||a.$t("dashboard.analysis.message.removeStockFailed"));case 6:e.n=8;break;case 7:e.p=7,e.v,a.$message.error(a.$t("dashboard.analysis.message.removeStockFailed"));case 8:return e.a(2)}},e,null,[[2,7]])}))()},getMarketName:function(t){return this.$t("dashboard.analysis.market.".concat(t))||t},formatNumber:function(t){return"string"===typeof t?t:t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})},loadMarketTypes:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return s.p=0,s.n=1,(0,m.iO)();case 1:a=s.v,a&&1===a.code&&a.data&&Array.isArray(a.data)?t.marketTypes=a.data.map(function(t){return{value:t.value,i18nKey:t.i18nKey||"dashboard.analysis.market.".concat(t.value)}}):t.marketTypes=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}],s.n=3;break;case 2:s.p=2,s.v,t.marketTypes=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}];case 3:t.marketTypes.length>0&&!t.selectedMarketTab&&(t.selectedMarketTab=t.marketTypes[0].value);case 4:return s.a(2)}},s,null,[[0,2]])}))()}},watch:{presetSymbol:function(t){t&&t!==this.selectedSymbol&&(this.selectedSymbol=t,this.analysisResult=null,this.analysisError=null,this.analysisErrorTone="error")},autoAnalyzeSignal:function(t){var s=this;t&&(this.presetSymbol&&this.presetSymbol!==this.selectedSymbol&&(this.selectedSymbol=this.presetSymbol),this.$nextTick(function(){s.startFastAnalysis()}))},showAddStockModal:function(t){t?(this.marketTypes.length>0&&!this.selectedMarketTab&&(this.selectedMarketTab=this.marketTypes[0].value),this.selectedMarketTab&&this.loadHotSymbols(this.selectedMarketTab)):(this.selectedSymbolForAdd=null,this.symbolSearchKeyword="",this.symbolSearchResults=[],this.hasSearched=!1,this.searchTimer&&(clearTimeout(this.searchTimer),this.searchTimer=null))}}},x=T,F=(0,A.A)(x,e,i,!1,null,"41eda137",null),M=F.exports},62618:function(t,s,a){a.d(s,{EF:function(){return o},f$:function(){return n},kF:function(){return l},r9:function(){return c},yI:function(){return r}});var e=a(76471),i="/api/global-market";function r(){return(0,e.Ay)({url:"".concat(i,"/overview"),method:"get"})}function n(){return(0,e.Ay)({url:"".concat(i,"/heatmap"),method:"get"})}function l(){return(0,e.Ay)({url:"".concat(i,"/calendar"),method:"get"})}function o(){return(0,e.Ay)({url:"".concat(i,"/sentiment"),method:"get"})}function c(t){return(0,e.Ay)({url:"".concat(i,"/opportunities"),method:"get",params:t})}},64118:function(t,s,a){a.d(s,{Qo:function(){return r},_3:function(){return d},dp:function(){return n},iO:function(){return c},mk:function(){return l},ms:function(){return o},z6:function(){return u}});var e=a(76471),i={GetWatchlist:"/api/market/watchlist/get",AddWatchlist:"/api/market/watchlist/add",RemoveWatchlist:"/api/market/watchlist/remove",GetWatchlistPrices:"/api/market/watchlist/prices",MultiAnalysis:"/api/analysis/multiAnalysis",CreateAnalysisTask:"/api/analysis/createTask",GetAnalysisTaskStatus:"/api/analysis/getTaskStatus",GetAnalysisHistoryList:"/api/analysis/getHistoryList",DeleteAnalysisTask:"/api/analysis/deleteTask",ReflectAnalysis:"/api/analysis/reflect",ChatMessage:"/api/ai/chat/message",GetChatHistory:"/api/ai/chat/history",SaveChatHistory:"/api/ai/chat/history/save",GetConfig:"/api/market/config",GetMenuFooterConfig:"/api/market/menuFooterConfig",GetMarketTypes:"/api/market/types",SearchSymbols:"/api/market/symbols/search",GetHotSymbols:"/api/market/symbols/hot"};function r(t){return(0,e.Ay)({url:i.GetWatchlist,method:"get",params:t})}function n(t){return(0,e.Ay)({url:i.AddWatchlist,method:"post",data:t})}function l(t){return(0,e.Ay)({url:i.RemoveWatchlist,method:"post",data:t})}function o(t){return(0,e.Ay)({url:i.GetWatchlistPrices,method:"get",params:{watchlist:JSON.stringify(t.watchlist||[])}})}function c(){return(0,e.Ay)({url:i.GetMarketTypes,method:"get"})}function d(t){return(0,e.Ay)({url:i.SearchSymbols,method:"get",params:t})}function u(t){return(0,e.Ay)({url:i.GetHotSymbols,method:"get",params:t})}}}]); \ No newline at end of file diff --git a/frontend/dist/js/296.6f331820.js b/frontend/dist/js/296.6f331820.js deleted file mode 100644 index 69984d1..0000000 --- a/frontend/dist/js/296.6f331820.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[296],{42296:function(e,t,a){a.r(t),a.d(t,{default:function(){return v}});var s=function(){var e=this,t=e._self._c;return t("div",{staticClass:"settings-page",class:{"theme-dark":e.isDarkTheme}},[e.showRestartTip?t("a-alert",{staticClass:"restart-alert",attrs:{type:"warning",showIcon:"",closable:""},on:{close:function(t){e.showRestartTip=!1}}},[t("template",{slot:"message"},[t("span",[e._v(e._s(e.$t("settings.restartRequired")))]),t("a-button",{attrs:{size:"small",type:"link"},on:{click:e.copyRestartCommand}},[e._v(" "+e._s(e.$t("settings.copyRestartCmd"))+" ")])],1)],2):e._e(),t("div",{staticClass:"settings-header"},[t("h2",{staticClass:"page-title"},[t("a-icon",{attrs:{type:"setting"}}),t("span",[e._v(e._s(e.$t("settings.title")))])],1),t("p",{staticClass:"page-desc"},[e._v(e._s(e.$t("settings.description")))])]),t("a-spin",{attrs:{spinning:e.loading}},[t("div",{staticClass:"settings-content"},[t("a-collapse",{staticClass:"settings-collapse",attrs:{bordered:!1},model:{value:e.activeKeys,callback:function(t){e.activeKeys=t},expression:"activeKeys"}},e._l(e.sortedSchema,function(a,s){return t("a-collapse-panel",{key:s},[t("template",{slot:"header"},[t("span",{staticClass:"panel-header"},[t("a-icon",{staticClass:"panel-icon-left",attrs:{type:a.icon||e.getGroupIcon(s)}}),t("span",{staticClass:"panel-title"},[e._v(e._s(e.getGroupTitle(s,a.title)))])],1)]),"ai"===s?t("div",{staticClass:"openrouter-balance-card"},[t("a-card",{attrs:{size:"small",bordered:!1}},[t("div",{staticClass:"balance-header"},[t("span",{staticClass:"balance-title"},[t("a-icon",{staticStyle:{"margin-right":"6px"},attrs:{type:"wallet"}}),e._v(" "+e._s(e.$t("settings.openrouterBalance")||"OpenRouter 账户余额")+" ")],1),t("a-button",{attrs:{size:"small",type:"primary",ghost:"",loading:e.balanceLoading},on:{click:e.queryOpenRouterBalance}},[t("a-icon",{attrs:{type:"sync"}}),e._v(" "+e._s(e.$t("settings.queryBalance")||"查询余额")+" ")],1)],1),e.openrouterBalance?t("div",{staticClass:"balance-info"},[t("a-row",{attrs:{gutter:16}},[t("a-col",{attrs:{span:8}},[t("a-statistic",{attrs:{title:e.$t("settings.balanceUsage")||"已使用",value:e.openrouterBalance.usage,prefix:"$",precision:4,"value-style":{color:"#cf1322"}}})],1),t("a-col",{attrs:{span:8}},[t("a-statistic",{attrs:{title:e.$t("settings.balanceRemaining")||"剩余额度",value:null!==e.openrouterBalance.limit_remaining?e.openrouterBalance.limit_remaining:"∞",prefix:null!==e.openrouterBalance.limit_remaining?"$":"",precision:null!==e.openrouterBalance.limit_remaining?4:0,"value-style":{color:null!==e.openrouterBalance.limit_remaining&&e.openrouterBalance.limit_remaining<1?"#cf1322":"#3f8600"}}})],1),t("a-col",{attrs:{span:8}},[t("a-statistic",{attrs:{title:e.$t("settings.balanceLimit")||"总限额",value:null!==e.openrouterBalance.limit?e.openrouterBalance.limit:"∞",prefix:null!==e.openrouterBalance.limit?"$":"",precision:null!==e.openrouterBalance.limit?2:0}})],1)],1),e.openrouterBalance.is_free_tier?t("div",{staticClass:"free-tier-badge"},[t("a-tag",{attrs:{color:"blue"}},[e._v("Free Tier")])],1):e._e()],1):t("div",{staticClass:"balance-empty"},[t("a-icon",{staticStyle:{"margin-right":"6px"},attrs:{type:"info-circle"}}),e._v(" "+e._s(e.$t("settings.balanceNotQueried")||'点击"查询余额"获取账户信息')+" ")],1)])],1):e._e(),t("a-form",{staticClass:"settings-form",attrs:{form:e.form,layout:"vertical"}},[t("a-row",{attrs:{gutter:24}},e._l(a.items,function(a){return t("a-col",{key:a.key,attrs:{xs:24,sm:24,md:12,lg:12}},[t("a-form-item",[t("template",{slot:"label"},[t("span",{staticClass:"form-label-with-tooltip"},[t("span",{staticClass:"label-text"},[e._v(e._s(e.getItemLabel(s,a)))]),a.description?t("a-tooltip",{attrs:{placement:"top"}},[t("template",{slot:"title"},[e._v(" "+e._s(e.getItemDescription(s,a))+" ")]),t("a-icon",{staticClass:"help-icon",attrs:{type:"question-circle"}})],2):e._e(),a.link?t("a",{staticClass:"api-link",attrs:{href:a.link,target:"_blank",rel:"noopener noreferrer"},on:{click:function(e){e.stopPropagation()}}},[t("a-icon",{attrs:{type:"link"}}),e._v(" "+e._s(e.getLinkText(a.link_text))+" ")],1):e._e()],1)]),"text"===a.type?[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:[a.key,{initialValue:e.getFieldValue(s,a.key)}],expression:"[item.key, { initialValue: getFieldValue(groupKey, item.key) }]"}],attrs:{placeholder:a.default?"".concat(e.$t("settings.default"),": ").concat(a.default):"",allowClear:""}})]:"password"===a.type?[t("div",{staticClass:"password-field"},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:[a.key,{initialValue:e.getFieldValue(s,a.key)}],expression:"[item.key, { initialValue: getFieldValue(groupKey, item.key) }]"}],attrs:{type:e.passwordVisible[a.key]?"text":"password",placeholder:e.$t("settings.inputApiKey"),allowClear:""}},[t("a-icon",{staticStyle:{cursor:"pointer"},attrs:{slot:"suffix",type:e.passwordVisible[a.key]?"eye":"eye-invisible"},on:{click:function(t){return e.togglePasswordVisible(a.key)}},slot:"suffix"})],1)],1)]:"number"===a.type?[t("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:[a.key,{initialValue:e.getNumberValue(s,a.key,a.default)}],expression:"[item.key, { initialValue: getNumberValue(groupKey, item.key, item.default) }]"}],staticStyle:{width:"100%"},attrs:{placeholder:a.default?"".concat(e.$t("settings.default"),": ").concat(a.default):""}})]:"boolean"===a.type?[t("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:[a.key,{valuePropName:"checked",initialValue:e.getBoolValue(s,a.key,a.default)}],expression:"[item.key, { valuePropName: 'checked', initialValue: getBoolValue(groupKey, item.key, item.default) }]"}]})]:"select"===a.type?[t("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:[a.key,{initialValue:e.getFieldValue(s,a.key)||a.default}],expression:"[item.key, { initialValue: getFieldValue(groupKey, item.key) || item.default }]"}],attrs:{placeholder:a.default?"".concat(e.$t("settings.default"),": ").concat(a.default):e.$t("settings.pleaseSelect")}},e._l(e.getSelectOptions(a.options),function(a){return t("a-select-option",{key:a.value,attrs:{value:a.value}},[e._v(" "+e._s(a.label)+" ")])}),1)]:e._e(),a.default&&"boolean"!==a.type&&"password"!==a.type?t("div",{staticClass:"field-default"},[e._v(" "+e._s(e.$t("settings.default"))+": "+e._s(a.default)+" ")]):e._e()],2)],1)}),1)],1)],2)}),1)],1)]),t("div",{staticClass:"settings-footer"},[t("a-button",{attrs:{disabled:e.saving},on:{click:e.handleReset}},[t("a-icon",{attrs:{type:"undo"}}),e._v(" "+e._s(e.$t("settings.reset"))+" ")],1),t("a-button",{attrs:{type:"primary",loading:e.saving},on:{click:e.handleSave}},[t("a-icon",{attrs:{type:"save"}}),e._v(" "+e._s(e.$t("settings.save"))+" ")],1)],1)],1)},i=[],n=a(52074),r=a(76959),l=a(17654),o=a(68285),c=a(21092),u=a(39523),p=a(21170),d={name:"Settings",mixins:[p.t],data:function(){return{loading:!1,saving:!1,schema:{},values:{},activeKeys:["auth","ai","trading"],passwordVisible:{},showRestartTip:!1,balanceLoading:!1,openrouterBalance:null}},computed:{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},sortedSchema:function(){var e=Object.entries(this.schema);e.sort(function(e,t){var a=e[1].order||999,s=t[1].order||999;return a-s});for(var t={},a=0,s=e;a=0?"positive":"negative"},[t._v(" "+t._s(t.summary.total_pnl>=0?"+":"")+t._s(t.formatNumber(t.summary.total_pnl))+" ")]),a("span",{staticClass:"label"},[t._v(t._s(t.$t("dashboard.label.totalPnl")))])])])]),a("div",{staticClass:"kpi-card kpi-win-rate"},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"trophy"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.winRate")||"胜率"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount"},[t._v(t._s(t.formatNumber(t.performance.win_rate,1)))]),a("span",{staticClass:"unit"},[t._v("%")])]),a("div",{staticClass:"kpi-sub"},[a("span",{staticClass:"positive"},[t._v(t._s(t.performance.winning_trades))]),a("span",{staticClass:"label"},[t._v(t._s(t.$t("dashboard.label.win")))]),a("span",{staticClass:"divider"},[t._v("/")]),a("span",{staticClass:"negative"},[t._v(t._s(t.performance.losing_trades))]),a("span",{staticClass:"label"},[t._v(t._s(t.$t("dashboard.label.lose")))])])]),a("div",{staticClass:"kpi-ring"},[a("svg",{attrs:{viewBox:"0 0 36 36"}},[a("path",{staticClass:"ring-bg",attrs:{d:"M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831"}}),a("path",{staticClass:"ring-progress",attrs:{"stroke-dasharray":"".concat(t.performance.win_rate||0,", 100"),d:"M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831"}})])])]),a("div",{staticClass:"kpi-card kpi-profit-factor"},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"rise"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.profitFactor")||"盈亏比"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount"},[t._v(t._s(t.formatNumber(t.performance.profit_factor,2)))]),a("span",{staticClass:"unit"},[t._v(":1")])]),a("div",{staticClass:"kpi-sub"},[a("span",[t._v(t._s(t.$t("dashboard.label.avgProfit"))+" ")]),a("span",{staticClass:"positive"},[t._v("$"+t._s(t.formatNumber(t.performance.avg_win)))])])])]),a("div",{staticClass:"kpi-card kpi-drawdown"},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"fall"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.maxDrawdown")||"最大回撤"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount negative"},[t._v(t._s(t.formatNumber(t.performance.max_drawdown_pct,1)))]),a("span",{staticClass:"unit"},[t._v("%")])]),a("div",{staticClass:"kpi-sub"},[a("span",[t._v("$"+t._s(t.formatNumber(t.performance.max_drawdown)))])])])]),a("div",{staticClass:"kpi-card kpi-trades"},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"swap"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.totalTrades")||"总交易"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount"},[t._v(t._s(t.performance.total_trades))]),a("span",{staticClass:"unit"},[t._v(t._s(t.$t("dashboard.unit.trades")))])]),a("div",{staticClass:"kpi-sub"},[a("span",[t._v(t._s(t.$t("dashboard.label.avgDaily"))+" ")]),a("span",[t._v(t._s(t.avgTradesPerDay))]),a("span",{staticClass:"label"},[t._v(" "+t._s(t.$t("dashboard.unit.trades")))])])])]),a("div",{staticClass:"kpi-card kpi-strategies clickable",on:{click:function(a){return t.$router.push("/trading-assistant")}}},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"thunderbolt",theme:"filled"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.runningStrategies")||"运行中策略"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount"},[t._v(t._s(t.summary.indicator_strategy_count))]),a("span",{staticClass:"unit"},[t._v(t._s(t.$t("dashboard.unit.strategies")))])]),a("div",{staticClass:"kpi-sub"},[a("span",{staticClass:"highlight"},[t._v(t._s(t.summary.indicator_strategy_count))]),a("span",{staticClass:"label"},[t._v(" "+t._s(t.$t("dashboard.label.indicator")))])])]),a("div",{staticClass:"card-arrow"},[a("a-icon",{attrs:{type:"right"}})],1)])]),a("div",{staticClass:"chart-row"},[a("div",{staticClass:"chart-panel chart-main"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"calendar"}}),a("span",[t._v(t._s(t.$t("dashboard.profitCalendar")||"收益日曆"))])],1),a("div",{staticClass:"calendar-nav"},[a("a-button",{attrs:{type:"link",size:"small",disabled:t.currentCalendarIndex>=t.calendarMonths.length-1},on:{click:t.prevMonth}},[a("a-icon",{attrs:{type:"left"}})],1),a("span",{staticClass:"current-month"},[t._v(t._s(t.currentMonthLabel))]),a("a-button",{attrs:{type:"link",size:"small",disabled:t.currentCalendarIndex<=0},on:{click:t.nextMonth}},[a("a-icon",{attrs:{type:"right"}})],1)],1)]),a("div",{staticClass:"profit-calendar"},[t.currentCalendarMonth?[a("div",{staticClass:"month-summary"},[a("div",{staticClass:"summary-item"},[a("span",{staticClass:"summary-label"},[t._v(t._s(t.$t("dashboard.ranking.totalProfit")))]),a("span",{staticClass:"summary-value",class:t.currentCalendarMonth.total>=0?"positive":"negative"},[t._v(" "+t._s(t.currentCalendarMonth.total>=0?"+":"")+"$"+t._s(t.formatNumber(t.currentCalendarMonth.total))+" ")])]),a("div",{staticClass:"summary-item"},[a("span",{staticClass:"summary-label"},[t._v(t._s(t.$t("dashboard.label.win")))]),a("span",{staticClass:"summary-value positive"},[t._v(t._s(t.currentCalendarMonth.win_days))])]),a("div",{staticClass:"summary-item"},[a("span",{staticClass:"summary-label"},[t._v(t._s(t.$t("dashboard.label.lose")))]),a("span",{staticClass:"summary-value negative"},[t._v(t._s(t.currentCalendarMonth.lose_days))])])]),a("div",{staticClass:"calendar-weekdays"},t._l(t.weekdays,function(e){return a("div",{key:e,staticClass:"weekday"},[t._v(t._s(e))])}),0),a("div",{staticClass:"calendar-grid"},[t._l(t.calendarFirstDayOffset,function(t){return a("div",{key:"empty-"+t,staticClass:"calendar-cell empty"})}),t._l(t.currentCalendarMonth.days_in_month,function(e){return a("div",{key:e,staticClass:"calendar-cell",class:t.getDayClass(e)},[a("span",{staticClass:"day-number"},[t._v(t._s(e))]),null!==t.getDayProfit(e)?a("span",{staticClass:"day-profit",class:t.getDayProfit(e)>=0?"positive":"negative"},[t._v(" "+t._s(t.getDayProfit(e)>=0?"+":"")+t._s(t.formatCompactNumber(t.getDayProfit(e)))+" ")]):t._e()])})],2)]:a("div",{staticClass:"calendar-empty"},[a("a-icon",{attrs:{type:"inbox"}}),a("span",[t._v(t._s(t.$t("dashboard.noData")))])],1)],2)]),a("div",{staticClass:"chart-panel chart-side"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"pie-chart"}}),a("span",[t._v(t._s(t.$t("dashboard.strategyAllocation")||"策略分布"))])],1)]),a("div",{ref:"pieChart",staticClass:"chart-body"})])]),a("div",{staticClass:"chart-row"},[a("div",{staticClass:"chart-panel chart-half"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"area-chart"}}),a("span",[t._v(t._s(t.$t("dashboard.drawdownCurve")||"回撤曲线"))])],1)]),a("div",{ref:"drawdownChart",staticClass:"chart-body chart-sm"})]),a("div",{staticClass:"chart-panel chart-half"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"clock-circle"}}),a("span",[t._v(t._s(t.$t("dashboard.hourlyDistribution")||"交易时段"))])],1)]),a("div",{ref:"hourlyChart",staticClass:"chart-body chart-sm"})])]),a("div",{staticClass:"chart-panel"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"ordered-list"}}),a("span",[t._v(t._s(t.$t("dashboard.strategyRanking")||"策略排行榜"))])],1)]),a("div",{staticClass:"strategy-ranking"},[0===t.strategyStats.length?a("div",{staticClass:"empty-state"},[a("a-icon",{attrs:{type:"inbox"}}),a("span",[t._v(t._s(t.$t("dashboard.noStrategyData")))])],1):a("div",{staticClass:"ranking-grid"},t._l(t.strategyStats.slice(0,6),function(e,s){return a("div",{key:e.strategy_id,staticClass:"ranking-card",class:{"rank-top":s<3}},[a("div",{staticClass:"rank-badge",class:"rank-".concat(s+1)},[t._v(t._s(s+1))]),a("div",{staticClass:"rank-info"},[a("div",{staticClass:"rank-name"},[t._v(t._s(e.strategy_name))]),a("div",{staticClass:"rank-stats"},[a("span",{staticClass:"stat"},[a("label",[t._v(t._s(t.$t("dashboard.ranking.totalProfit")))]),a("span",{class:e.total_pnl>=0?"positive":"negative"},[t._v(" "+t._s(e.total_pnl>=0?"+":"")+"$"+t._s(t.formatNumber(e.total_pnl))+" ")])]),a("span",{staticClass:"stat"},[a("label",[t._v(t._s(t.$t("dashboard.winRate")))]),a("span",[t._v(t._s(t.formatNumber(e.win_rate,1))+"%")])]),a("span",{staticClass:"stat"},[a("label",[t._v(t._s(t.$t("dashboard.profitFactor")))]),a("span",[t._v(t._s(t.formatNumber(e.profit_factor,2)))])]),a("span",{staticClass:"stat"},[a("label",[t._v(t._s(t.$t("dashboard.ranking.trades")))]),a("span",[t._v(t._s(e.total_trades))])])])]),a("div",{staticClass:"rank-pnl-bar"},[a("div",{staticClass:"bar-fill",class:e.total_pnl>=0?"positive":"negative",style:{width:"".concat(Math.min(100,Math.abs(e.total_pnl)/t.maxStrategyPnl*100),"%")}})])])}),0)])]),a("div",{staticClass:"table-row"},[a("div",{staticClass:"table-panel"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"stock"}}),a("span",[t._v(t._s(t.$t("dashboard.currentPositions")))])],1),a("div",{staticClass:"panel-badge"},[t._v(t._s((t.summary.current_positions||[]).length))])]),a("a-table",{staticClass:"pro-table",attrs:{columns:t.positionColumns,"data-source":t.summary.current_positions,rowKey:"id",pagination:!1,size:"small",scroll:{x:"max-content"}},scopedSlots:t._u([{key:"symbol",fn:function(e,s){return[a("div",{staticClass:"symbol-cell"},[a("span",{staticClass:"symbol-name"},[t._v(t._s(e))]),a("span",{staticClass:"symbol-strategy"},[t._v(t._s(s.strategy_name))])])]}},{key:"side",fn:function(e){return[a("span",{staticClass:"side-tag",class:"long"===e?"long":"short"},[t._v(" "+t._s("long"===e?"LONG":"SHORT")+" ")])]}},{key:"unrealized_pnl",fn:function(e,s){return[a("div",{staticClass:"pnl-cell"},[a("span",{class:e>=0?"positive":"negative"},[t._v(" "+t._s(e>=0?"+":"")+"$"+t._s(t.formatNumber(e))+" ")]),a("span",{staticClass:"pnl-percent",class:s.pnl_percent>=0?"positive":"negative"},[t._v(" "+t._s(s.pnl_percent>=0?"+":"")+t._s(t.formatNumber(s.pnl_percent))+"% ")])])]}}])})],1),a("div",{staticClass:"table-panel"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"history"}}),a("span",[t._v(t._s(t.$t("dashboard.recentTrades")))])],1)]),a("a-table",{staticClass:"pro-table",attrs:{columns:t.columns,"data-source":t.summary.recent_trades,rowKey:"id",pagination:{pageSize:8,size:"small"},size:"small",scroll:{x:"max-content"}},scopedSlots:t._u([{key:"type",fn:function(e){return[a("span",{staticClass:"type-tag",class:t.getTypeClass(e)},[t._v(" "+t._s(t.getSignalTypeText(e))+" ")])]}},{key:"profit",fn:function(e,s){return[a("span",{class:"--"!==t.formatProfitValue(e,s)?e>=0?"positive":"negative":""},[t._v(" "+t._s(t.formatProfitValue(e,s))+" ")])]}},{key:"time",fn:function(e){return[a("span",{staticClass:"time-cell"},[t._v(t._s(t.formatTime(e)))])]}}])})],1)]),a("div",{staticClass:"chart-panel orders-panel"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"unordered-list"}}),a("span",[t._v(t._s(t.$t("dashboard.pendingOrders")))]),a("a-tooltip",{attrs:{title:t.soundEnabled?t.$t("dashboard.clickToMute"):t.$t("dashboard.clickToUnmute")}},[a("a-icon",{staticClass:"sound-toggle",class:{"sound-off":!t.soundEnabled},attrs:{type:t.soundEnabled?"sound":"audio-muted"},on:{click:t.toggleSound}})],1)],1),a("div",{staticClass:"panel-badge"},[t._v(t._s(t.ordersPagination.total))])]),a("a-table",{staticClass:"pro-table",attrs:{columns:t.orderColumns,"data-source":t.pendingOrders,rowKey:"id",pagination:{current:t.ordersPagination.current,pageSize:t.ordersPagination.pageSize,total:t.ordersPagination.total,showSizeChanger:!0,size:"small",showTotal:function(a){return t.$t("dashboard.totalOrders",{total:a})}},size:"small",loading:t.ordersLoading,scroll:{x:1200}},on:{change:t.handleOrdersTableChange},scopedSlots:t._u([{key:"strategy_name",fn:function(e,s){return[a("div",{staticClass:"symbol-cell"},[a("span",{staticClass:"symbol-name"},[t._v(t._s(e||"-"))]),a("span",{staticClass:"symbol-strategy"},[t._v("ID: "+t._s(s.strategy_id))])])]}},{key:"symbol",fn:function(e){return[a("span",{staticClass:"symbol-tag"},[t._v(t._s(e))])]}},{key:"signal_type",fn:function(e){return[a("span",{staticClass:"type-tag",class:t.getTypeClass(e)},[t._v(" "+t._s(t.getSignalTypeText(e))+" ")])]}},{key:"exchange",fn:function(e,s){return[s&&(s.exchange_display||s.exchange_id||e)?a("span",{staticClass:"exchange-tag",class:(s.exchange_display||s.exchange_id||e).toLowerCase()},[t._v(" "+t._s(String(s.exchange_display||s.exchange_id||e).toUpperCase())+" ")]):a("span",{staticClass:"text-muted"},[t._v("-")]),s&&s.market_type?a("div",{staticClass:"market-type"},[t._v(" "+t._s(String(s.market_type).toUpperCase())+" ")]):t._e()]}},{key:"notify",fn:function(e,s){return[a("div",{staticClass:"notify-icons"},[t._l(s&&s.notify_channels?s.notify_channels:[],function(e){return a("a-tooltip",{key:"".concat(s.id,"-").concat(e),attrs:{title:String(e)}},[a("a-icon",{staticClass:"notify-icon",attrs:{type:t.getNotifyIconType(e)}})],1)}),s&&s.notify_channels&&0!==s.notify_channels.length?t._e():a("span",{staticClass:"text-muted"},[t._v("-")])],2)]}},{key:"status",fn:function(e,s){return[a("span",{staticClass:"status-tag",class:e},[t._v(" "+t._s(t.getStatusText(e))+" ")]),"failed"===e&&s.error_message?a("div",{staticClass:"error-hint"},[a("a-tooltip",{attrs:{title:s.error_message}},[a("a-icon",{attrs:{type:"exclamation-circle"}}),a("span",[t._v(t._s(t.$t("dashboard.viewError")))])],1)],1):t._e()]}},{key:"amount",fn:function(e,s){return[a("div",[t._v(t._s(t.formatNumber(e,8)))]),s.filled_amount?a("div",{staticClass:"sub-text"},[t._v(" "+t._s(t.$t("dashboard.filled"))+": "+t._s(t.formatNumber(s.filled_amount,8))+" ")]):t._e()]}},{key:"price",fn:function(e,s){return[s.filled_price?a("div",[t._v(t._s(t.formatNumber(s.filled_price)))]):a("div",{staticClass:"text-muted"},[t._v("-")])]}},{key:"time_info",fn:function(e,s){return[a("div",{staticClass:"time-cell"},[t._v(t._s(t.formatTime(s.created_at)))]),s.executed_at?a("div",{staticClass:"sub-text"},[t._v(" "+t._s(t.formatTime(s.executed_at))+" ")]):t._e()]}}])})],1)])},r=[],n=e(81127),i=e(56252),o=e(57532),l=e(2403),d=e(76338),c=(e(2008),e(23418),e(74423),e(62062),e(26910),e(62010),e(36033),e(2892),e(9868),e(26099),e(27495),e(21699),e(47764),e(68156),e(42762),e(62953),e(15014)),u=e(75769),p={summary:"/api/dashboard/summary",pendingOrders:"/api/dashboard/pendingOrders"};function h(){return(0,u.Ay)({url:p.summary,method:"get"})}function f(t){return(0,u.Ay)({url:p.pendingOrders,method:"get",params:t})}var m=e(95353),g={name:"Dashboard",data:function(){return{summary:{ai_strategy_count:0,indicator_strategy_count:0,total_equity:0,total_pnl:0,total_realized_pnl:0,total_unrealized_pnl:0,performance:{},strategy_stats:[],daily_pnl_chart:[],strategy_pnl_chart:[],monthly_returns:[],hourly_distribution:[],calendar_months:[],recent_trades:[],current_positions:[]},currentCalendarIndex:0,pieChart:null,drawdownChart:null,hourlyChart:null,pendingOrders:[],ordersLoading:!1,ordersPagination:{current:1,pageSize:20,total:0},orderPollTimer:null,lastOrderId:0,orderPollIntervalMs:5e3,soundEnabled:!0,beepCtx:null}},computed:(0,d.A)((0,d.A)({},(0,m.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},performance:function(){return this.summary.performance||{}},strategyStats:function(){return this.summary.strategy_stats||[]},maxStrategyPnl:function(){var t=this.strategyStats;return t.length?Math.max.apply(Math,(0,l.A)(t.map(function(t){return Math.abs(t.total_pnl||0)})).concat([1])):1},avgTradesPerDay:function(){var t=this.summary.daily_pnl_chart||[],a=t.length||1,e=this.performance.total_trades||0;return(e/a).toFixed(1)},calendarMonths:function(){return this.summary.calendar_months||[]},currentCalendarMonth:function(){var t=this.calendarMonths;return t.length&&t[this.currentCalendarIndex]||null},currentMonthLabel:function(){var t=this.currentCalendarMonth;if(!t)return"-";var a=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];return"".concat(a[t.month-1]," ").concat(t.year)},weekdays:function(){return["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]},calendarFirstDayOffset:function(){var t=this.currentCalendarMonth;return t?t.first_weekday:0},orderStrategyFilters:function(){var t,a=Array.isArray(this.pendingOrders)?this.pendingOrders:[],e=new Map,s=(0,o.A)(a);try{for(s.s();!(t=s.n()).done;){var r=t.value,n=r&&r.strategy_id;if(void 0!==n&&null!==n&&!e.has(String(n))){var i=r&&r.strategy_name?String(r.strategy_name):"",l=i?"".concat(i," (ID: ").concat(n,")"):"ID: ".concat(n);e.set(String(n),{text:l,value:String(n)})}}}catch(d){s.e(d)}finally{s.f()}return Array.from(e.values()).sort(function(t,a){return String(t.text).localeCompare(String(a.text))})},columns:function(){var t=this;return[{title:this.$t("dashboard.table.time"),dataIndex:"created_at",scopedSlots:{customRender:"time"},width:150},{title:this.$t("dashboard.table.symbol"),dataIndex:"symbol",width:100},{title:this.$t("dashboard.table.type"),dataIndex:"type",scopedSlots:{customRender:"type"},width:90},{title:this.$t("dashboard.table.price"),dataIndex:"price",customRender:function(a){return t.formatNumber(a)},width:100},{title:this.$t("dashboard.table.profit"),dataIndex:"profit",scopedSlots:{customRender:"profit"},align:"right",width:100}]},positionColumns:function(){var t=this;return[{title:this.$t("dashboard.table.symbol"),dataIndex:"symbol",scopedSlots:{customRender:"symbol"}},{title:this.$t("dashboard.table.side"),dataIndex:"side",scopedSlots:{customRender:"side"}},{title:this.$t("dashboard.table.size"),dataIndex:"size",customRender:function(a){return t.formatNumber(a,4)}},{title:this.$t("dashboard.table.entryPrice"),dataIndex:"entry_price",customRender:function(a){return t.formatNumber(a)}},{title:this.$t("dashboard.table.pnl"),dataIndex:"unrealized_pnl",scopedSlots:{customRender:"unrealized_pnl"},align:"right"}]},orderColumns:function(){return[{title:this.$t("dashboard.orderTable.strategy"),dataIndex:"strategy_name",scopedSlots:{customRender:"strategy_name"},filters:this.orderStrategyFilters,filterMultiple:!0,onFilter:function(t,a){return String(a&&a.strategy_id)===String(t)},width:150},{title:this.$t("dashboard.orderTable.exchange"),dataIndex:"exchange_id",scopedSlots:{customRender:"exchange"},width:120},{title:this.$t("dashboard.orderTable.notify"),dataIndex:"notify_channels",scopedSlots:{customRender:"notify"},width:100},{title:this.$t("dashboard.orderTable.symbol"),dataIndex:"symbol",scopedSlots:{customRender:"symbol"},width:110},{title:this.$t("dashboard.orderTable.signalType"),dataIndex:"signal_type",scopedSlots:{customRender:"signal_type"},width:100},{title:this.$t("dashboard.orderTable.amount"),dataIndex:"amount",scopedSlots:{customRender:"amount"},width:130},{title:this.$t("dashboard.orderTable.price"),dataIndex:"filled_price",scopedSlots:{customRender:"price"},width:100},{title:this.$t("dashboard.orderTable.status"),dataIndex:"status",scopedSlots:{customRender:"status"},width:130},{title:this.$t("dashboard.orderTable.timeInfo"),dataIndex:"created_at",scopedSlots:{customRender:"time_info"},width:160}]}}),mounted:function(){this.fetchData(),this.fetchPendingOrders(),this.startOrderPolling(),window.addEventListener("resize",this.handleResize)},beforeDestroy:function(){this.stopOrderPolling(),window.removeEventListener("resize",this.handleResize),this.pieChart&&this.pieChart.dispose(),this.drawdownChart&&this.drawdownChart.dispose(),this.hourlyChart&&this.hourlyChart.dispose()},methods:{fetchData:function(){var t=this;return(0,i.A)((0,n.A)().m(function a(){var e;return(0,n.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,h();case 1:e=a.v,1===e.code&&(t.summary=(0,d.A)((0,d.A)({},t.summary),e.data),t.$nextTick(function(){t.initCharts()})),a.n=3;break;case 2:a.p=2,a.v;case 3:return a.a(2)}},a,null,[[0,2]])}))()},fetchPendingOrders:function(t,a){var e=this;return(0,i.A)((0,n.A)().m(function s(){var r,i,o,l;return(0,n.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return e.ordersLoading=!0,s.p=1,r=t||e.ordersPagination.current||1,i=a||e.ordersPagination.pageSize||20,s.n=2,f({page:r,pageSize:i});case 2:o=s.v,1===o.code&&(l=o.data||{},e.pendingOrders=l.list||[],e.ordersPagination.current=Number(l.page||r||1),e.ordersPagination.pageSize=Number(l.pageSize||i||20),e.ordersPagination.total=Number(l.total||0)),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.p=4,e.ordersLoading=!1,s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},playOrderBeep:function(){if(this.soundEnabled)try{var t=window.AudioContext||window.webkitAudioContext;if(!t)return;this.beepCtx||(this.beepCtx=new t);var a=this.beepCtx;"suspended"===a.state&&"function"===typeof a.resume&&a.resume().catch(function(){});var e=function(t,e){var s=a.createOscillator(),r=a.createGain();s.type="sine",s.frequency.value=e,r.gain.value=.08,s.connect(r),r.connect(a.destination),s.start(t),s.stop(t+.12)},s=a.currentTime;e(s,880),e(s+.18,1100)}catch(r){}},startOrderPolling:function(){var t=this;this.stopOrderPolling(),this.initLastOrderId(),this.orderPollTimer=setInterval(function(){t.pollNewOrders()},this.orderPollIntervalMs)},stopOrderPolling:function(){this.orderPollTimer&&(clearInterval(this.orderPollTimer),this.orderPollTimer=null)},initLastOrderId:function(){var t=this;return(0,i.A)((0,n.A)().m(function a(){var e;return(0,n.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,f({page:1,pageSize:1});case 1:e=a.v,1===e.code&&e.data&&e.data.list&&e.data.list.length>0&&(t.lastOrderId=e.data.list[0].id||0),a.n=3;break;case 2:a.p=2,a.v;case 3:return a.a(2)}},a,null,[[0,2]])}))()},pollNewOrders:function(){var t=this;return(0,i.A)((0,n.A)().m(function a(){var e,s,r,i,l,d,c,u;return(0,n.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,f({page:1,pageSize:10});case 1:if(e=a.v,1===e.code&&e.data&&e.data.list){a.n=2;break}return a.a(2);case 2:if(s=e.data.list||[],0!==s.length){a.n=3;break}return a.a(2);case 3:r=!1,i=t.lastOrderId,l=(0,o.A)(s);try{for(l.s();!(d=l.n()).done;)c=d.value,u=c.id||0,u>t.lastOrderId&&(r=!0,u>i&&(i=u))}catch(n){l.e(n)}finally{l.f()}r&&(t.lastOrderId=i,t.playOrderBeep(),t.fetchPendingOrders(),t.$notification.info({message:t.$t("dashboard.newOrderNotify"),description:t.$t("dashboard.newOrderDesc"),duration:4})),a.n=5;break;case 4:a.p=4,a.v;case 5:return a.a(2)}},a,null,[[0,4]])}))()},toggleSound:function(){this.soundEnabled=!this.soundEnabled,this.soundEnabled?this.$message.success(this.$t("dashboard.soundEnabled")):this.$message.info(this.$t("dashboard.soundDisabled"))},handleOrdersTableChange:function(t){var a=t&&t.current?t.current:1,e=t&&t.pageSize?t.pageSize:this.ordersPagination.pageSize||20;this.ordersPagination.current=a,this.ordersPagination.pageSize=e,this.fetchPendingOrders(a,e)},getTypeClass:function(t){if(!t)return"";var a=t.toLowerCase();return a.includes("open_long")||a.includes("add_long")?"long":a.includes("open_short")||a.includes("add_short")?"short":a.includes("close_long")?"close-long":a.includes("close_short")?"close-short":""},getSignalTypeColor:function(t){return t?(t=t.toLowerCase(),t.includes("open_long")||t.includes("add_long")?"green":t.includes("open_short")||t.includes("add_short")?"red":t.includes("close_long")?"orange":t.includes("close_short")?"purple":"blue"):"default"},getSignalTypeText:function(t){if(!t)return"-";var a={open_long:this.$t("dashboard.signalType.openLong"),open_short:this.$t("dashboard.signalType.openShort"),close_long:this.$t("dashboard.signalType.closeLong"),close_short:this.$t("dashboard.signalType.closeShort"),add_long:this.$t("dashboard.signalType.addLong"),add_short:this.$t("dashboard.signalType.addShort")};return a[t.toLowerCase()]||t.toUpperCase()},getStatusColor:function(t){var a={pending:"orange",processing:"blue",completed:"green",failed:"red",cancelled:"default"};return a[t]||"default"},getStatusText:function(t){if(!t)return"-";var a={pending:this.$t("dashboard.status.pending"),processing:this.$t("dashboard.status.processing"),completed:this.$t("dashboard.status.completed"),failed:this.$t("dashboard.status.failed"),cancelled:this.$t("dashboard.status.cancelled")};return a[t.toLowerCase()]||t.toUpperCase()},getNotifyIconType:function(t){var a=String(t||"").trim().toLowerCase(),e={browser:"bell",webhook:"link",discord:"comment",telegram:"message",tg:"message",tele:"message",email:"mail",phone:"phone"};return e[a]||"notification"},getExchangeTagColor:function(t){var a=String(t||"").trim().toLowerCase(),e={binance:"gold",okx:"purple",bitget:"cyan",signal:"geekblue"};return e[a]||"blue"},formatNumber:function(t){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return void 0===t||null===t?"0.00":Number(t).toLocaleString("en-US",{minimumFractionDigits:a,maximumFractionDigits:a})},formatProfitValue:function(t,a){if(null===t||void 0===t)return"--";var e=parseFloat(t),s=["open_long","open_short","add_long","add_short"];if(0===e&&a&&s.includes(a.type))return"--";if(Math.abs(e)<1e-6)return a&&s.includes(a.type)?"--":"$0.00";var r=e>=0?"+":"";return"".concat(r,"$").concat(this.formatNumber(e))},formatCompactNumber:function(t){if(void 0===t||null===t)return"0";var a=Math.abs(t);return a>=1e6?(t/1e6).toFixed(1)+"M":a>=1e3?(t/1e3).toFixed(1)+"k":a>=100?Math.round(t):t.toFixed(0)},prevMonth:function(){this.currentCalendarIndex0&&this.currentCalendarIndex--},getDayProfit:function(t){var a=this.currentCalendarMonth;if(!a||!a.days)return null;var e=String(t).padStart(2,"0");return void 0!==a.days[e]?a.days[e]:null},getDayClass:function(t){var a=this.getDayProfit(t);return null===a?"no-data":a>0?"profit":a<0?"loss":"zero"},formatTime:function(t){if(!t)return"-";try{var a;if("string"===typeof t&&t.includes("-")&&t.includes(":"))a=new Date(t);else{if(!("number"===typeof t||"string"===typeof t&&/^\d+$/.test(t)))return"-";var e="string"===typeof t?parseInt(t,10):t,s=e<1e12?1e3*e:e;a=new Date(s)}return isNaN(a.getTime())?"-":a.toLocaleString()}catch(r){return"-"}},initCharts:function(){this.initPieChart(),this.initDrawdownChart(),this.initHourlyChart()},initPieChart:function(){var t=this,a=this.$refs.pieChart;if(a){this.pieChart=c.Ts(a);var e=Array.isArray(this.summary.strategy_stats)?this.summary.strategy_stats:[],s=Array.isArray(this.summary.strategy_pnl_chart)?this.summary.strategy_pnl_chart:[],r=[];r=e.length>0?e.map(function(t){var a=t&&t.strategy_name?String(t.strategy_name):"-",e=Number(t&&t.total_pnl?t.total_pnl:0),s=Number(t&&t.total_trades?t.total_trades:0),r=0!==e?Math.abs(e):s;return{name:a,value:r,signedValue:e,trades:s}}).filter(function(t){return t.value>0}):s.map(function(t){var a=t&&t.name?String(t.name):"-",e=Number(t&&t.value?t.value:0);return{name:a,value:Math.abs(e),signedValue:e}}).filter(function(t){return t.value>0});var n=this.isDarkTheme,i=n?"#9ca3af":"#6b7280",o=[new c.fA.W4(0,0,1,1,[{offset:0,color:"#3b82f6"},{offset:1,color:"#1d4ed8"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#8b5cf6"},{offset:1,color:"#6d28d9"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#10b981"},{offset:1,color:"#059669"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#f59e0b"},{offset:1,color:"#d97706"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#ec4899"},{offset:1,color:"#be185d"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#06b6d4"},{offset:1,color:"#0891b2"}])],l={backgroundColor:"transparent",tooltip:{trigger:"item",backgroundColor:n?"rgba(17, 24, 39, 0.95)":"rgba(255, 255, 255, 0.95)",borderColor:n?"#374151":"#e5e7eb",textStyle:{color:n?"#f3f4f6":"#1f2937"},formatter:function(a){var e=a&&a.data&&"number"===typeof a.data.signedValue?a.data.signedValue:0,s=(e>=0?"+":"")+t.formatNumber(e,2),r=e>=0?"#10b981":"#ef4444";return'\n
\n
'.concat(a.name,'
\n
占比 ').concat(a.percent,'%
\n
PNL $').concat(s,"
\n
\n ")}},legend:{bottom:10,left:"center",itemWidth:12,itemHeight:12,itemGap:16,textStyle:{color:i,fontSize:11}},color:o,series:[{name:"策略分布",type:"pie",radius:["50%","75%"],center:["50%","45%"],avoidLabelOverlap:!1,itemStyle:{borderRadius:6,borderColor:n?"#1f2937":"#ffffff",borderWidth:3},label:{show:!1},emphasis:{label:{show:!0,fontSize:14,fontWeight:"bold",color:n?"#f3f4f6":"#1f2937"},scaleSize:8},labelLine:{show:!1},data:r.length>0?r:[{value:1,name:this.$t("dashboard.noData"),signedValue:0}]}]};this.pieChart.setOption(l)}},initDrawdownChart:function(){var t=this,a=this.$refs.drawdownChart;if(a){this.drawdownChart=c.Ts(a);var e,s=(this.summary.daily_pnl_chart||[]).map(function(t){return t.date}),r=(this.summary.daily_pnl_chart||[]).map(function(t){return Number(t.profit||0)}),n=[],i=0,l=(0,o.A)(r);try{for(l.s();!(e=l.n()).done;){var d=e.value;i+=Number(d||0),n.push(i)}}catch(y){l.e(y)}finally{l.f()}var u=-1/0,p=0,h=0,f=n.map(function(t,a){u=Math.max(u,t);var e=Number((t-u).toFixed(2));return e\n
').concat(s,'
\n
\n \n \n ').concat(t.$t("dashboard.drawdown")||"Drawdown",'\n \n -$').concat(n,'\n
\n
\n
\n
\n \n ')}},grid:{left:55,right:20,bottom:35,top:20,containLabel:!1},xAxis:{type:"category",data:s,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:g,fontSize:10,formatter:function(t){return t.slice(5)}}},yAxis:{type:"value",axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:g,fontSize:10,formatter:function(t){return Math.abs(t)>=1e3?"-$"+(Math.abs(t)/1e3).toFixed(1)+"k":0===t?"0":"-$"+Math.abs(t)}},splitLine:{lineStyle:{color:v,type:[4,4]}},max:0},series:[{name:this.$t("dashboard.drawdown")||"Drawdown",type:"line",data:f,smooth:.3,showSymbol:!1,lineStyle:{width:2.5,color:new c.fA.W4(0,0,1,0,[{offset:0,color:"#ef4444"},{offset:.5,color:"#f87171"},{offset:1,color:"#fca5a5"}]),shadowColor:"rgba(239, 68, 68, 0.4)",shadowBlur:8,shadowOffsetY:4},areaStyle:{color:new c.fA.W4(0,0,0,1,[{offset:0,color:m?"rgba(239, 68, 68, 0.4)":"rgba(239, 68, 68, 0.25)"},{offset:.5,color:m?"rgba(248, 113, 113, 0.15)":"rgba(248, 113, 113, 0.1)"},{offset:1,color:"transparent"}])},markPoint:p<0?{symbol:"pin",symbolSize:45,itemStyle:{color:new c.fA.W4(0,0,0,1,[{offset:0,color:"#f87171"},{offset:1,color:"#dc2626"}]),shadowColor:"rgba(239, 68, 68, 0.5)",shadowBlur:10},label:{show:!0,color:"#fff",fontSize:10,fontWeight:"bold",formatter:function(){return t.$t("dashboard.label.maxDrawdownPoint")||"MAX"}},data:[{name:this.$t("dashboard.maxDrawdown")||"Max Drawdown",coord:[h,p]}]}:void 0,markLine:{silent:!0,symbol:"none",lineStyle:{color:m?"#52525b":"#a1a1aa",type:"dashed",width:1},data:[{yAxis:0}],label:{show:!1}}}]};this.drawdownChart.setOption(b)}},initHourlyChart:function(){var t=this,a=this.$refs.hourlyChart;if(a){this.hourlyChart=c.Ts(a);var e=this.summary.hourly_distribution||[],s=e.map(function(t){return"".concat(String(t.hour).padStart(2,"0"),":00")}),r=e.map(function(t){return t.count||0}),n=e.map(function(t){return t.profit||0}),i=this.isDarkTheme,l=i?"#9ca3af":"#6b7280",d=i?"rgba(75, 85, 99, 0.3)":"rgba(229, 231, 235, 0.8)",u={backgroundColor:"transparent",tooltip:{trigger:"axis",backgroundColor:i?"rgba(17, 24, 39, 0.95)":"rgba(255, 255, 255, 0.95)",borderColor:i?"#374151":"#e5e7eb",textStyle:{color:i?"#f3f4f6":"#1f2937"},formatter:function(a){var e,s=Array.isArray(a)?a:[],r=s[0]&&s[0].axisValue?s[0].axisValue:"",n=0,d=0,c=t.$t("dashboard.tradeCount")||"Trade Count",u=t.$t("dashboard.profit")||"Profit",p=t.$t("dashboard.unit.trades")||"",h=(0,o.A)(s);try{for(h.s();!(e=h.n()).done;){var f=e.value;f.seriesName===c&&(n=f.data||0),f.seriesName===u&&(d=f.data||0)}}catch(v){h.e(v)}finally{h.f()}var m=d>=0?"#10b981":"#ef4444",g=(d>=0?"+":"")+t.formatNumber(d,2);return'\n
\n
'.concat(r,'
\n
').concat(c,' ').concat(n," ").concat(p,'
\n
').concat(u,' $').concat(g,"
\n
\n ")}},grid:{left:50,right:20,bottom:30,top:10,containLabel:!1},xAxis:{type:"category",data:s,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:l,fontSize:10,interval:3}},yAxis:{type:"value",axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:l,fontSize:10},splitLine:{lineStyle:{color:d,type:"dashed"}}},series:[{name:this.$t("dashboard.tradeCount")||"Trade Count",type:"bar",data:r,barMaxWidth:16,itemStyle:{borderRadius:[3,3,0,0],color:new c.fA.W4(0,0,0,1,[{offset:0,color:"#60a5fa"},{offset:1,color:"#3b82f6"}])}},{name:this.$t("dashboard.profit")||"Profit",type:"line",data:n,smooth:!0,showSymbol:!1,lineStyle:{width:2,color:"#a855f7"}}]};this.hourlyChart.setOption(u)}},handleResize:function(){this.pieChart&&this.pieChart.resize(),this.drawdownChart&&this.drawdownChart.resize(),this.hourlyChart&&this.hourlyChart.resize()}}},v=g,b=e(845),y=(0,b.A)(v,s,r,!1,null,"16dc1b35",null),_=y.exports}}]); \ No newline at end of file diff --git a/frontend/dist/js/359.d158fc20.js b/frontend/dist/js/359.d158fc20.js deleted file mode 100644 index 73b9144..0000000 --- a/frontend/dist/js/359.d158fc20.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[359],{34359:function(t,e,a){a.r(e),a.d(e,{default:function(){return D}});a(74423);var i=function(){var t,e=this,a=e._self._c;return a("div",{staticClass:"trading-assistant",class:{"theme-dark":e.isDarkTheme}},[a("a-row",{staticClass:"strategy-layout",attrs:{gutter:24}},[a("a-col",{staticClass:"strategy-list-col",attrs:{xs:24,sm:24,md:10,lg:8,xl:8}},[a("a-card",{staticClass:"strategy-list-card",attrs:{bordered:!1}},[a("div",{staticClass:"card-title",attrs:{slot:"title"},slot:"title"},[a("span",[e._v(e._s(e.$t("trading-assistant.strategyList")))]),a("a-button",{attrs:{type:"primary",size:"small"},on:{click:e.handleCreateStrategy}},[a("a-icon",{attrs:{type:"plus"}}),e._v(" "+e._s(e.$t("trading-assistant.createStrategy"))+" ")],1)],1),a("div",{staticClass:"group-mode-switch"},[a("span",{staticClass:"group-mode-label"},[e._v(e._s(e.$t("trading-assistant.groupBy"))+":")]),a("a-radio-group",{attrs:{size:"small","button-style":"solid"},model:{value:e.groupByMode,callback:function(t){e.groupByMode=t},expression:"groupByMode"}},[a("a-radio-button",{attrs:{value:"strategy"}},[a("a-icon",{attrs:{type:"folder"}}),e._v(" "+e._s(e.$t("trading-assistant.groupByStrategy"))+" ")],1),a("a-radio-button",{attrs:{value:"symbol"}},[a("a-icon",{attrs:{type:"stock"}}),e._v(" "+e._s(e.$t("trading-assistant.groupBySymbol"))+" ")],1)],1)],1),a("a-spin",{attrs:{spinning:e.loading}},[e.loading||0!==e.strategies.length?a("div",{staticClass:"strategy-grouped-list"},[e._l(e.groupedStrategies.groups,function(t){return a("div",{key:t.id,staticClass:"strategy-group"},[a("div",{staticClass:"strategy-group-header",on:{click:function(a){return e.toggleGroup(t.id)}}},[a("div",{staticClass:"group-header-left"},[a("a-icon",{staticClass:"collapse-icon",attrs:{type:e.collapsedGroups[t.id]?"right":"down"}}),a("a-icon",{staticClass:"group-icon",attrs:{type:"symbol"===e.groupByMode?"stock":"folder"}}),a("span",{staticClass:"group-name"},[e._v(e._s(t.baseName))]),a("a-tag",{attrs:{size:"small",color:"blue"}},[e._v(e._s(t.strategies.length)+" "+e._s("symbol"===e.groupByMode?e.$t("trading-assistant.strategyCount"):e.$t("trading-assistant.symbolCount")))])],1),a("div",{staticClass:"group-header-right",on:{click:function(t){t.stopPropagation()}}},[t.runningCount>0?a("span",{staticClass:"group-status running"},[e._v(" "+e._s(t.runningCount)+" "+e._s(e.$t("trading-assistant.status.running"))+" ")]):e._e(),t.stoppedCount>0?a("span",{staticClass:"group-status stopped"},[e._v(" "+e._s(t.stoppedCount)+" "+e._s(e.$t("trading-assistant.status.stopped"))+" ")]):e._e(),a("a-dropdown",{attrs:{getPopupContainer:e.getDropdownContainer,trigger:["click"]}},[a("a-menu",{attrs:{slot:"overlay"},on:{click:function(a){var i=a.key;return e.handleGroupMenuClick(i,t)}},slot:"overlay"},[a("a-menu-item",{key:"startAll"},[a("a-icon",{attrs:{type:"play-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.startAll"))+" ")],1),a("a-menu-item",{key:"stopAll"},[a("a-icon",{attrs:{type:"pause-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.stopAll"))+" ")],1),a("a-menu-divider"),a("a-menu-item",{key:"deleteAll",staticClass:"danger-item"},[a("a-icon",{attrs:{type:"delete"}}),e._v(" "+e._s(e.$t("trading-assistant.deleteAll"))+" ")],1)],1),a("a-button",{attrs:{type:"link",icon:"more",size:"small"}})],1)],1)]),a("div",{directives:[{name:"show",rawName:"v-show",value:!e.collapsedGroups[t.id],expression:"!collapsedGroups[group.id]"}],staticClass:"strategy-group-content"},e._l(t.strategies,function(t){return a("div",{key:t.id,class:["strategy-list-item",{active:e.selectedStrategy&&e.selectedStrategy.id===t.id}],on:{click:function(a){return e.handleSelectStrategy(t)}}},[a("div",{staticClass:"strategy-item-content"},[a("div",{staticClass:"strategy-item-header"},[a("div",{staticClass:"strategy-name-wrapper"},["strategy"===e.groupByMode?[t.trading_config&&t.trading_config.symbol?a("span",{staticClass:"info-item"},[a("a-icon",{attrs:{type:"dollar"}}),e._v(" "+e._s(t.trading_config.symbol)+" ")],1):e._e()]:[a("span",{staticClass:"info-item strategy-name-text"},[a("a-icon",{attrs:{type:"thunderbolt"}}),e._v(" "+e._s(t.displayInfo?t.displayInfo.strategyName:t.strategy_name)+" ")],1),t.displayInfo&&t.displayInfo.timeframe?a("a-tag",{attrs:{size:"small",color:"cyan"}},[a("a-icon",{staticStyle:{"margin-right":"2px"},attrs:{type:"clock-circle"}}),e._v(" "+e._s(t.displayInfo.timeframe)+" ")],1):e._e(),t.displayInfo&&t.displayInfo.indicatorName&&"-"!==t.displayInfo.indicatorName?a("a-tag",{attrs:{size:"small",color:"purple"}},[a("a-icon",{staticStyle:{"margin-right":"2px"},attrs:{type:"line-chart"}}),e._v(" "+e._s(t.displayInfo.indicatorName)+" ")],1):e._e()],a("span",{staticClass:"status-label",class:[t.status?"status-".concat(t.status):"",{"status-stopped":"stopped"===t.status}]},[e._v(" "+e._s(e.getStatusText(t.status))+" ")])],2)])]),a("div",{staticClass:"strategy-item-actions",on:{click:function(t){t.stopPropagation()}}},[a("a-dropdown",{attrs:{getPopupContainer:e.getDropdownContainer,trigger:["click"]}},[a("a-menu",{attrs:{slot:"overlay"},on:{click:function(a){var i=a.key;return e.handleMenuClick(i,t)}},slot:"overlay"},["stopped"===t.status?a("a-menu-item",{key:"start"},[a("a-icon",{attrs:{type:"play-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.startStrategy"))+" ")],1):e._e(),"running"===t.status?a("a-menu-item",{key:"stop"},[a("a-icon",{attrs:{type:"pause-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.stopStrategy"))+" ")],1):e._e(),a("a-menu-divider"),a("a-menu-item",{key:"edit"},[a("a-icon",{attrs:{type:"edit"}}),e._v(" "+e._s(e.$t("trading-assistant.editStrategy"))+" ")],1),a("a-menu-divider"),a("a-menu-item",{key:"delete",staticClass:"danger-item"},[a("a-icon",{attrs:{type:"delete"}}),e._v(" "+e._s(e.$t("trading-assistant.deleteStrategy"))+" ")],1)],1),a("a-button",{attrs:{type:"link",icon:"more",size:"small"}})],1)],1)])}),0)])}),e._l(e.groupedStrategies.ungrouped,function(t){return a("div",{key:t.id,class:["strategy-list-item",{active:e.selectedStrategy&&e.selectedStrategy.id===t.id}],on:{click:function(a){return e.handleSelectStrategy(t)}}},[a("div",{staticClass:"strategy-item-content"},[a("div",{staticClass:"strategy-item-header"},[a("div",{staticClass:"strategy-name-wrapper"},[t.exchange_config&&t.exchange_config.exchange_id?a("a-tag",{staticClass:"exchange-tag",attrs:{color:e.getExchangeTagColor(t.exchange_config.exchange_id),size:"small"}},[a("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"bank"}}),e._v(" "+e._s(e.getExchangeDisplayName(t.exchange_config.exchange_id))+" ")],1):e._e(),a("span",{staticClass:"strategy-name"},[e._v(e._s(t.strategy_name))]),"PromptBasedStrategy"===t.strategy_type?a("a-tag",{staticClass:"strategy-type-tag",attrs:{color:"purple",size:"small"}},[a("a-icon",{staticStyle:{"margin-right":"2px"},attrs:{type:"robot"}}),e._v(" AI ")],1):e._e()],1)]),a("div",{staticClass:"strategy-item-info"},[t.trading_config&&t.trading_config.symbol?a("span",{staticClass:"info-item"},[a("a-icon",{attrs:{type:"dollar"}}),e._v(" "+e._s(t.trading_config.symbol)+" ")],1):e._e(),a("span",{staticClass:"status-label",class:[t.status?"status-".concat(t.status):"",{"status-stopped":"stopped"===t.status}]},[e._v(" "+e._s(e.getStatusText(t.status))+" ")])])]),a("div",{staticClass:"strategy-item-actions",on:{click:function(t){t.stopPropagation()}}},[a("a-dropdown",{attrs:{getPopupContainer:e.getDropdownContainer,trigger:["click"]}},[a("a-menu",{attrs:{slot:"overlay"},on:{click:function(a){var i=a.key;return e.handleMenuClick(i,t)}},slot:"overlay"},["stopped"===t.status?a("a-menu-item",{key:"start"},[a("a-icon",{attrs:{type:"play-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.startStrategy"))+" ")],1):e._e(),"running"===t.status?a("a-menu-item",{key:"stop"},[a("a-icon",{attrs:{type:"pause-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.stopStrategy"))+" ")],1):e._e(),a("a-menu-divider"),a("a-menu-item",{key:"edit"},[a("a-icon",{attrs:{type:"edit"}}),e._v(" "+e._s(e.$t("trading-assistant.editStrategy"))+" ")],1),a("a-menu-divider"),a("a-menu-item",{key:"delete",staticClass:"danger-item"},[a("a-icon",{attrs:{type:"delete"}}),e._v(" "+e._s(e.$t("trading-assistant.deleteStrategy"))+" ")],1)],1),a("a-button",{attrs:{type:"link",icon:"more",size:"small"}})],1)],1)])})],2):a("a-empty",{attrs:{description:e.$t("trading-assistant.noStrategy")}})],1)],1)],1),a("a-col",{staticClass:"strategy-detail-col",attrs:{xs:24,sm:24,md:14,lg:16,xl:16}},[e.selectedStrategy?a("div",{staticClass:"strategy-detail-panel"},[a("a-card",{staticClass:"strategy-header-card",attrs:{bordered:!1}},[a("div",{staticClass:"strategy-header"},[a("div",{staticClass:"header-left"},[a("div",{staticClass:"strategy-title-row"},[a("h3",{staticClass:"strategy-title"},[e._v(e._s(e.selectedStrategy.strategy_name))]),a("div",{staticClass:"status-badge",class:["status-".concat(e.selectedStrategy.status)]},[a("span",{staticClass:"status-dot"}),e._v(" "+e._s(e.getStatusText(e.selectedStrategy.status))+" ")])]),a("div",{staticClass:"key-stats-grid"},[e.selectedStrategy.initial_capital||e.selectedStrategy.trading_config&&e.selectedStrategy.trading_config.initial_capital?a("div",{staticClass:"stat-card"},[a("div",{staticClass:"stat-icon investment"},[a("a-icon",{attrs:{type:"wallet"}})],1),a("div",{staticClass:"stat-content"},[a("div",{staticClass:"stat-label"},[e._v(e._s(e.$t("trading-assistant.detail.totalInvestment")))]),a("div",{staticClass:"stat-value"},[e._v("$"+e._s(parseFloat(e.selectedStrategy.initial_capital||(null===(t=e.selectedStrategy.trading_config)||void 0===t?void 0:t.initial_capital)||0).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})))])])]):e._e(),null!==e.currentEquity?a("div",{staticClass:"stat-card"},[a("div",{staticClass:"stat-icon equity"},[a("a-icon",{attrs:{type:"fund"}})],1),a("div",{staticClass:"stat-content"},[a("div",{staticClass:"stat-label"},[e._v(e._s(e.$t("trading-assistant.detail.currentEquity")))]),a("div",{staticClass:"stat-value",class:e.getEquityColorClass},[e._v(e._s(e.formatCurrency(e.currentEquity)))])])]):e._e(),null!==e.totalPnl?a("div",{staticClass:"stat-card pnl-card",class:{profit:e.totalPnl>0,loss:e.totalPnl<0}},[a("div",{staticClass:"stat-icon pnl"},[a("a-icon",{attrs:{type:e.totalPnl>=0?"rise":"fall"}})],1),a("div",{staticClass:"stat-content"},[a("div",{staticClass:"stat-label"},[e._v(e._s(e.$t("trading-assistant.detail.totalPnl")))]),a("div",{staticClass:"stat-value",class:e.getPnlColorClass},[e._v(" "+e._s(e.formatPnl(e.totalPnl))+" "),a("span",{staticClass:"pnl-percent"},[e._v("("+e._s(e.formatPnlPercent(e.totalPnlPercent))+")")])])])]):e._e()]),a("div",{staticClass:"strategy-tags"},[e.selectedStrategy.trading_config?a("div",{staticClass:"tag-item"},[a("a-icon",{attrs:{type:"stock"}}),a("span",[e._v(e._s(e.selectedStrategy.trading_config.symbol))])],1):e._e(),e.selectedStrategy.indicator_config&&e.selectedStrategy.indicator_config.indicator_name?a("div",{staticClass:"tag-item"},[a("a-icon",{attrs:{type:"line-chart"}}),a("span",[e._v(e._s(e.selectedStrategy.indicator_config.indicator_name))])],1):e._e(),e.selectedStrategy.trading_config?a("div",{staticClass:"tag-item"},[a("a-icon",{attrs:{type:"thunderbolt"}}),a("span",[e._v(e._s(e.selectedStrategy.trading_config.leverage||1)+"x")])],1):e._e(),e.selectedStrategy.trading_config&&e.selectedStrategy.trading_config.trade_direction?a("div",{staticClass:"tag-item"},[a("a-icon",{attrs:{type:"swap"}}),a("span",[e._v(e._s(e.getTradeDirectionText(e.selectedStrategy.trading_config.trade_direction)))])],1):e._e(),e.selectedStrategy.trading_config&&e.selectedStrategy.trading_config.timeframe?a("div",{staticClass:"tag-item"},[a("a-icon",{attrs:{type:"clock-circle"}}),a("span",[e._v(e._s(e.selectedStrategy.trading_config.timeframe))])],1):e._e()])]),a("div",{staticClass:"header-right"},["stopped"===e.selectedStrategy.status?a("a-button",{staticClass:"action-btn start-btn",attrs:{type:"primary",size:"large"},on:{click:function(t){return e.handleStartStrategy(e.selectedStrategy.id)}}},[a("a-icon",{attrs:{type:"play-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.startStrategy"))+" ")],1):e._e(),"running"===e.selectedStrategy.status?a("a-button",{staticClass:"action-btn stop-btn",attrs:{type:"danger",size:"large"},on:{click:function(t){return e.handleStopStrategy(e.selectedStrategy.id)}}},[a("a-icon",{attrs:{type:"pause-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.stopStrategy"))+" ")],1):e._e()],1)])]),a("a-card",{staticClass:"strategy-content-card",attrs:{bordered:!1}},[a("a-tabs",{attrs:{defaultActiveKey:"positions"}},[a("a-tab-pane",{key:"positions",attrs:{tab:e.$t("trading-assistant.tabs.positions")}},[a("position-records",{attrs:{"strategy-id":e.selectedStrategy.id,"market-type":e.selectedStrategy.trading_config&&e.selectedStrategy.trading_config.market_type||"swap",leverage:e.selectedStrategy.trading_config&&e.selectedStrategy.trading_config.leverage||1,loading:e.loadingRecords}})],1),a("a-tab-pane",{key:"trades",attrs:{tab:e.$t("trading-assistant.tabs.tradingRecords")}},[a("trading-records",{attrs:{"strategy-id":e.selectedStrategy.id,loading:e.loadingRecords}})],1)],1)],1)],1):a("div",{staticClass:"empty-detail"},[a("a-empty",{attrs:{description:e.$t("trading-assistant.selectStrategy")}})],1)])],1),a("a-modal",{attrs:{visible:e.showFormModal,title:e.editingStrategy?e.$t("trading-assistant.editStrategy"):e.$t("trading-assistant.createStrategy"),width:e.isMobile?"95%":1100,confirmLoading:e.saving,maskClosable:!1,wrapClassName:e.isMobile?"mobile-modal":"",bodyStyle:{maxHeight:"70vh",overflowY:"auto"}},on:{ok:e.handleSubmit,cancel:e.handleCloseModal}},[a("a-spin",{attrs:{spinning:e.loadingIndicators}},[e.editingStrategy?e._e():a("div",{staticClass:"creation-mode-toggle"},[a("a-radio-group",{attrs:{size:"small","button-style":"solid"},model:{value:e.creationMode,callback:function(t){e.creationMode=t},expression:"creationMode"}},[a("a-radio-button",{attrs:{value:"simple"}},[a("a-icon",{attrs:{type:"rocket"}}),e._v(" "+e._s(e.$t("trading-assistant.form.simpleMode"))+" ")],1),a("a-radio-button",{attrs:{value:"advanced"}},[a("a-icon",{attrs:{type:"setting"}}),e._v(" "+e._s(e.$t("trading-assistant.form.advancedMode"))+" ")],1)],1),a("span",{staticClass:"mode-hint"},[e._v(e._s(e.isSimpleMode?e.$t("trading-assistant.form.simpleModeHint"):e.$t("trading-assistant.form.advancedModeHint")))])],1),a("a-steps",{staticClass:"steps-container",attrs:{current:e.displayCurrentStep}},[a("a-step",{attrs:{title:e.isSimpleMode&&!e.editingStrategy?e.$t("trading-assistant.form.simpleStep1"):e.$t("trading-assistant.form.step1")}}),e.isAdvancedMode||e.editingStrategy?a("a-step",{attrs:{title:e.$t("trading-assistant.form.step2Params")}}):e._e(),a("a-step",{attrs:{title:e.isSimpleMode&&!e.editingStrategy?e.$t("trading-assistant.form.simpleStep2"):e.$t("trading-assistant.form.step3Signal")}})],1),a("div",{staticClass:"form-container"},[a("div",{directives:[{name:"show",rawName:"v-show",value:0===e.currentStep,expression:"currentStep === 0"}],staticClass:"step-content"},["indicator"===e.strategyType?a("div",[a("a-form",{attrs:{form:e.form,layout:"vertical"}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.indicator")}},[a("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["indicator_id",{rules:[{required:!0,message:e.$t("trading-assistant.validation.indicatorRequired")}]}],expression:"['indicator_id', { rules: [{ required: true, message: $t('trading-assistant.validation.indicatorRequired') }] }]"}],attrs:{placeholder:e.$t("trading-assistant.placeholders.selectIndicator"),"show-search":"","filter-option":e.filterIndicatorOption,loading:e.loadingIndicators,getPopupContainer:function(t){return t.parentNode}},on:{focus:e.handleIndicatorSelectFocus,change:e.handleIndicatorChange}},e._l(e.availableIndicators,function(t){return a("a-select-option",{key:String(t.id),attrs:{value:String(t.id)}},[a("div",{staticClass:"indicator-option"},[a("span",{staticClass:"indicator-name"},[e._v(e._s(t.name))]),t.type?a("a-tag",{attrs:{size:"small",color:e.getIndicatorTypeColor(t.type)}},[e._v(" "+e._s(e.getIndicatorTypeName(t.type))+" ")]):e._e()],1)])}),1),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.indicatorHint"))+" ")])],1),e.selectedIndicator?a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.indicatorDescription")}},[a("div",{staticClass:"indicator-description"},[e._v(" "+e._s(e.selectedIndicator.description||e.$t("trading-assistant.form.noDescription"))+" ")])]):e._e(),e.indicatorParams.length>0?a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.indicatorParams")}},[a("div",{staticClass:"indicator-params-form"},[a("a-row",{attrs:{gutter:16}},e._l(e.indicatorParams,function(t){return a("a-col",{key:t.name,attrs:{xs:24,sm:12,md:8}},[a("div",{staticClass:"param-item"},[a("label",{staticClass:"param-label"},[e._v(" "+e._s(t.name)+" "),t.description?a("a-tooltip",{attrs:{title:t.description}},[a("a-icon",{staticStyle:{"margin-left":"4px",color:"#999"},attrs:{type:"question-circle"}})],1):e._e()],1),"int"===t.type?a("a-input-number",{staticStyle:{width:"100%"},attrs:{precision:0,size:"small"},model:{value:e.indicatorParamValues[t.name],callback:function(a){e.$set(e.indicatorParamValues,t.name,a)},expression:"indicatorParamValues[param.name]"}}):"float"===t.type?a("a-input-number",{staticStyle:{width:"100%"},attrs:{precision:4,size:"small"},model:{value:e.indicatorParamValues[t.name],callback:function(a){e.$set(e.indicatorParamValues,t.name,a)},expression:"indicatorParamValues[param.name]"}}):"bool"===t.type?a("a-switch",{attrs:{size:"small"},model:{value:e.indicatorParamValues[t.name],callback:function(a){e.$set(e.indicatorParamValues,t.name,a)},expression:"indicatorParamValues[param.name]"}}):a("a-input",{attrs:{size:"small"},model:{value:e.indicatorParamValues[t.name],callback:function(a){e.$set(e.indicatorParamValues,t.name,a)},expression:"indicatorParamValues[param.name]"}})],1)])}),1),a("div",{staticClass:"form-item-hint",staticStyle:{"margin-top":"8px"}},[e._v(" "+e._s(e.$t("trading-assistant.form.indicatorParamsHint"))+" ")])],1)]):e._e(),a("a-divider"),a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.strategyName")}},[a("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["strategy_name",{rules:[{required:!0,message:e.$t("trading-assistant.validation.strategyNameRequired")}]}],expression:"['strategy_name', { rules: [{ required: true, message: $t('trading-assistant.validation.strategyNameRequired') }] }]"}],attrs:{placeholder:e.$t("trading-assistant.placeholders.inputStrategyName")}})],1),e.isSimpleMode&&!e.editingStrategy?a("div",{staticClass:"simple-defaults-summary"},[a("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"info","show-icon":""},scopedSlots:e._u([{key:"message",fn:function(){return[a("span",[e._v(e._s(e.$t("trading-assistant.form.simpleDefaultsHint")))])]},proxy:!0},{key:"description",fn:function(){return[a("span",[e._v(" "+e._s(e.$t("trading-assistant.form.klinePeriod"))+": "),a("b",[e._v("15m")]),e._v(" · "+e._s(e.$t("trading-assistant.form.leverage"))+": "),a("b",[e._v("5x")]),e._v(" · "+e._s(e.$t("trading-assistant.form.marketType"))+": "),a("b",[e._v(e._s(e.$t("trading-assistant.form.marketTypeFutures")))]),e._v(" · "+e._s(e.$t("dashboard.indicator.backtest.field.stopLossPct"))+": "),a("b",[e._v("3%")]),e._v(" · "+e._s(e.$t("dashboard.indicator.backtest.field.takeProfitPct"))+": "),a("b",[e._v("6%")])])]},proxy:!0}],null,!1,39555864)}),a("a-button",{staticStyle:{padding:"0","margin-bottom":"12px"},attrs:{type:"link",size:"small"},on:{click:function(t){e.showAdvancedSettings=!e.showAdvancedSettings}}},[a("a-icon",{attrs:{type:e.showAdvancedSettings?"up":"down"}}),e._v(" "+e._s(e.showAdvancedSettings?e.$t("trading-assistant.form.hideAdvancedSettings"):e.$t("trading-assistant.form.showAdvancedSettings"))+" ")],1)],1):e._e(),a("div",{directives:[{name:"show",rawName:"v-show",value:e.isAdvancedMode||e.editingStrategy||e.showAdvancedSettings,expression:"isAdvancedMode || editingStrategy || showAdvancedSettings"}]},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.strategyType")}},[a("a-radio-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["cs_strategy_type",{initialValue:"single"}],expression:"['cs_strategy_type', { initialValue: 'single' }]"}],on:{change:e.handleStrategyTypeChange}},[a("a-radio",{attrs:{value:"single"}},[e._v(e._s(e.$t("trading-assistant.form.strategyTypeSingle")))]),a("a-radio",{attrs:{value:"cross_sectional"}},[e._v(e._s(e.$t("trading-assistant.form.strategyTypeCrossSectional")))])],1),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.strategyTypeHint"))+" ")])],1)],1),"cross_sectional"===e.form.getFieldValue("cs_strategy_type")?[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.symbolList")}},[a("a-select",{attrs:{mode:"multiple",placeholder:e.$t("trading-assistant.placeholders.selectSymbols"),"show-search":"","filter-option":e.filterWatchlistOptionWithAdd,loading:e.loadingWatchlist,getPopupContainer:function(t){return t.parentNode},maxTagCount:5},on:{change:e.handleCrossSectionalSymbolChange},model:{value:e.crossSectionalSymbols,callback:function(t){e.crossSectionalSymbols=t},expression:"crossSectionalSymbols"}},[e._l(e.watchlist,function(t){return a("a-select-option",{key:"".concat(t.market,":").concat(t.symbol),attrs:{value:"".concat(t.market,":").concat(t.symbol)}},[a("div",{staticClass:"symbol-option"},[a("a-tag",{staticStyle:{"margin-right":"8px","margin-bottom":"0"},attrs:{color:e.getMarketColor(t.market)}},[e._v(" "+e._s(t.market)+" ")]),a("span",{staticClass:"symbol-name"},[e._v(e._s(t.symbol))]),t.name?a("span",{staticClass:"symbol-name-extra"},[e._v(e._s(t.name))]):e._e()],1)])}),a("a-select-option",{key:"__add_symbol_option__",staticClass:"add-symbol-option",attrs:{value:"__add_symbol_option__"}},[a("div",{staticStyle:{width:"100%","text-align":"center",padding:"4px 0",color:"#1890ff",cursor:"pointer"}},[a("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"plus"}}),a("span",[e._v(e._s(e.$t("trading-assistant.form.addSymbol")))])],1)])],2),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.symbolListHint"))+" ")])],1),a("a-row",{attrs:{gutter:16}},[a("a-col",{attrs:{xs:24,sm:12}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.portfolioSize")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["portfolio_size",{initialValue:10,rules:[{required:!0,message:e.$t("trading-assistant.validation.portfolioSizeRequired")}]}],expression:"['portfolio_size', { initialValue: 10, rules: [{ required: true, message: $t('trading-assistant.validation.portfolioSizeRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:100,step:1}}),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.portfolioSizeHint"))+" ")])],1)],1),a("a-col",{attrs:{xs:24,sm:12}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.longRatio")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["long_ratio",{initialValue:.5,rules:[{required:!0,message:e.$t("trading-assistant.validation.longRatioRequired")}]}],expression:"['long_ratio', { initialValue: 0.5, rules: [{ required: true, message: $t('trading-assistant.validation.longRatioRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:1,step:.1,precision:2}}),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.longRatioHint"))+" ")])],1)],1)],1),a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.rebalanceFrequency")}},[a("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["rebalance_frequency",{initialValue:"daily"}],expression:"['rebalance_frequency', { initialValue: 'daily' }]"}],staticStyle:{width:"100%"}},[a("a-select-option",{attrs:{value:"daily"}},[e._v(e._s(e.$t("trading-assistant.form.rebalanceDaily")))]),a("a-select-option",{attrs:{value:"weekly"}},[e._v(e._s(e.$t("trading-assistant.form.rebalanceWeekly")))]),a("a-select-option",{attrs:{value:"monthly"}},[e._v(e._s(e.$t("trading-assistant.form.rebalanceMonthly")))])],1),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.rebalanceFrequencyHint"))+" ")])],1)]:e._e(),"cross_sectional"!==e.form.getFieldValue("cs_strategy_type")?a("a-form-item",{attrs:{label:e.isEditMode?e.$t("trading-assistant.form.symbol"):e.$t("trading-assistant.form.symbols")}},[e.isEditMode?a("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["symbol",{rules:[{required:!0,message:e.$t("trading-assistant.validation.symbolRequired")}]}],expression:"['symbol', { rules: [{ required: true, message: $t('trading-assistant.validation.symbolRequired') }] }]"}],attrs:{placeholder:e.$t("trading-assistant.placeholders.selectSymbol"),"show-search":"","filter-option":e.filterWatchlistOption,loading:e.loadingWatchlist,getPopupContainer:function(t){return t.parentNode}},on:{change:e.handleWatchlistSymbolChange}},[e._l(e.watchlist,function(t){return a("a-select-option",{key:"".concat(t.market,":").concat(t.symbol),attrs:{value:"".concat(t.market,":").concat(t.symbol)}},[a("div",{staticClass:"symbol-option"},[a("a-tag",{staticStyle:{"margin-right":"8px","margin-bottom":"0"},attrs:{color:e.getMarketColor(t.market)}},[e._v(" "+e._s(t.market)+" ")]),a("span",{staticClass:"symbol-name"},[e._v(e._s(t.symbol))]),t.name?a("span",{staticClass:"symbol-name-extra"},[e._v(e._s(t.name))]):e._e()],1)])}),a("a-select-option",{key:"__add_symbol_option__",staticClass:"add-symbol-option",attrs:{value:"__add_symbol_option__"}},[a("div",{staticStyle:{width:"100%","text-align":"center",padding:"4px 0",color:"#1890ff",cursor:"pointer"}},[a("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"plus"}}),a("span",[e._v(e._s(e.$t("trading-assistant.form.addSymbol")))])],1)])],2):a("a-select",{attrs:{mode:"multiple",placeholder:e.$t("trading-assistant.placeholders.selectSymbols"),"show-search":"","filter-option":e.filterWatchlistOptionWithAdd,loading:e.loadingWatchlist,getPopupContainer:function(t){return t.parentNode},maxTagCount:3},on:{change:e.handleMultiSymbolChangeWithAdd},model:{value:e.selectedSymbols,callback:function(t){e.selectedSymbols=t},expression:"selectedSymbols"}},[e._l(e.watchlist,function(t){return a("a-select-option",{key:"".concat(t.market,":").concat(t.symbol),attrs:{value:"".concat(t.market,":").concat(t.symbol)}},[a("div",{staticClass:"symbol-option"},[a("a-tag",{staticStyle:{"margin-right":"8px","margin-bottom":"0"},attrs:{color:e.getMarketColor(t.market)}},[e._v(" "+e._s(t.market)+" ")]),a("span",{staticClass:"symbol-name"},[e._v(e._s(t.symbol))]),t.name?a("span",{staticClass:"symbol-name-extra"},[e._v(e._s(t.name))]):e._e()],1)])}),a("a-select-option",{key:"__add_symbol_option__",staticClass:"add-symbol-option",attrs:{value:"__add_symbol_option__"}},[a("div",{staticStyle:{width:"100%","text-align":"center",padding:"4px 0",color:"#1890ff",cursor:"pointer"}},[a("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"plus"}}),a("span",[e._v(e._s(e.$t("trading-assistant.form.addSymbol")))])],1)])],2),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.isEditMode?e.$t("trading-assistant.form.symbolHintCrypto"):e.$t("trading-assistant.form.symbolsHint"))+" ")])],1):e._e(),a("div",{directives:[{name:"show",rawName:"v-show",value:e.isAdvancedMode||e.editingStrategy||e.showAdvancedSettings,expression:"isAdvancedMode || editingStrategy || showAdvancedSettings"}]},[a("a-row",{attrs:{gutter:16}},[a("a-col",{attrs:{xs:24,sm:24,md:12,lg:12}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.initialCapital")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["initial_capital",{rules:[{required:!0,message:e.$t("trading-assistant.validation.initialCapitalRequired")}],initialValue:1e3}],expression:"['initial_capital', { rules: [{ required: true, message: $t('trading-assistant.validation.initialCapitalRequired') }], initialValue: 1000 }]"}],staticStyle:{width:"100%"},attrs:{min:10,step:100,precision:2}})],1)],1),a("a-col",{attrs:{xs:24,sm:24,md:12,lg:12}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.marketType")}},[a("a-radio-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["market_type",{initialValue:"swap"}],expression:"['market_type', { initialValue: 'swap' }]"}],on:{change:e.handleMarketTypeChange}},[a("a-radio",{attrs:{value:"swap"}},[e._v(e._s(e.$t("trading-assistant.form.marketTypeFutures")))]),a("a-radio",{attrs:{value:"spot"}},[e._v(e._s(e.$t("trading-assistant.form.marketTypeSpot")))])],1),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.marketTypeHint"))+" ")])],1)],1)],1),a("a-row",{attrs:{gutter:16}},[a("a-col",{attrs:{xs:24,sm:24,md:12,lg:12}},[a("a-form-item",{attrs:{label:"".concat(e.$t("trading-assistant.form.leverage")," (x)")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["leverage",{initialValue:5,rules:[{required:!0,message:e.$t("trading-assistant.validation.leverageRequired")}]}],expression:"['leverage', { initialValue: 5, rules: [{ required: true, message: $t('trading-assistant.validation.leverageRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:"spot"===e.form.getFieldValue("market_type")?1:125,step:1,disabled:"spot"===e.form.getFieldValue("market_type")}}),a("div",{staticClass:"form-item-hint"},["spot"===e.form.getFieldValue("market_type")?a("span",[e._v(" "+e._s(e.$t("trading-assistant.form.spotLeverageFixed"))+" ")]):a("span",[e._v(" "+e._s(e.$t("trading-assistant.form.leverageHint"))+" ")])])],1)],1),a("a-col",{attrs:{xs:24,sm:24,md:12,lg:12}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.tradeDirection")}},[a("a-radio-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["trade_direction",{initialValue:"long"}],expression:"['trade_direction', { initialValue: 'long' }]"}],attrs:{disabled:"spot"===e.form.getFieldValue("market_type")}},[a("a-radio",{attrs:{value:"long"}},[e._v(e._s(e.$t("trading-assistant.form.tradeDirectionLong")))]),a("a-radio",{attrs:{value:"short",disabled:"spot"===e.form.getFieldValue("market_type")}},[e._v(" "+e._s(e.$t("trading-assistant.form.tradeDirectionShort"))+" ")]),a("a-radio",{attrs:{value:"both",disabled:"spot"===e.form.getFieldValue("market_type")}},[e._v(" "+e._s(e.$t("trading-assistant.form.tradeDirectionBoth"))+" ")])],1),"spot"===e.form.getFieldValue("market_type")?a("div",{staticClass:"form-item-hint",staticStyle:{color:"#ff9800"}},[e._v(" "+e._s(e.$t("trading-assistant.form.spotOnlyLongHint"))+" ")]):e._e()],1)],1)],1),a("a-row",{attrs:{gutter:16}},[a("a-col",{attrs:{xs:24,sm:24,md:12,lg:12}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.klinePeriod")}},[a("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["timeframe",{initialValue:"15m",rules:[{required:!0}]}],expression:"['timeframe', { initialValue: '15m', rules: [{ required: true }] }]"}],attrs:{placeholder:e.$t("trading-assistant.placeholders.selectKlinePeriod"),getPopupContainer:function(t){return t.parentNode}}},[a("a-select-option",{attrs:{value:"1m"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe1m")))]),a("a-select-option",{attrs:{value:"5m"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe5m")))]),a("a-select-option",{attrs:{value:"15m"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe15m")))]),a("a-select-option",{attrs:{value:"30m"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe30m")))]),a("a-select-option",{attrs:{value:"1H"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe1H")))]),a("a-select-option",{attrs:{value:"4H"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe4H")))]),a("a-select-option",{attrs:{value:"1D"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe1D")))])],1)],1)],1),a("a-col",{attrs:{xs:24,sm:24,md:12,lg:12}})],1)],1)],2)],1):e._e()]),a("div",{directives:[{name:"show",rawName:"v-show",value:1===e.currentStep||e.isSimpleMode&&0===e.currentStep&&e.showAdvancedSettings,expression:"currentStep === 1 || (isSimpleMode && currentStep === 0 && showAdvancedSettings)"}],staticClass:"step-content"},["indicator"===e.strategyType?a("div",[a("a-form",{attrs:{form:e.form,layout:"vertical"}},[a("a-collapse",{staticStyle:{background:"#fafafa"},attrs:{bordered:!1},model:{value:e.backtestCollapseKeys,callback:function(t){e.backtestCollapseKeys=t},expression:"backtestCollapseKeys"}},[a("a-collapse-panel",{key:"risk",attrs:{header:e.$t("dashboard.indicator.backtest.panel.risk")}},[a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.stopLossPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["stop_loss_pct",{initialValue:3}],expression:"['stop_loss_pct', { initialValue: 3 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.01,precision:4}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.takeProfitPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["take_profit_pct",{initialValue:6}],expression:"['take_profit_pct', { initialValue: 6 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trailingEnabled")}},[a("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailing_enabled",{valuePropName:"checked",initialValue:!1}],expression:"['trailing_enabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:e.onTrailingToggle}})],1)],1),a("a-col",{attrs:{span:12}})],1),e.trailingEnabledUi?[a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trailingStopPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailing_stop_pct",{initialValue:0}],expression:"['trailing_stop_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.01,precision:4}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trailingActivationPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailing_activation_pct",{initialValue:0}],expression:"['trailing_activation_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1)]:e._e()],2),a("a-collapse-panel",{key:"scale",attrs:{header:e.$t("dashboard.indicator.backtest.panel.scale")}},[a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendAddEnabled")}},[a("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_add_enabled",{valuePropName:"checked",initialValue:!1}],expression:"['trend_add_enabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:e.onTrendAddToggle}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.dcaAddEnabled")}},[a("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["dca_add_enabled",{valuePropName:"checked",initialValue:!1}],expression:"['dca_add_enabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:e.onDcaAddToggle}})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendAddStepPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_add_step_pct",{initialValue:0}],expression:"['trend_add_step_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4},on:{change:e.onScaleParamsChange}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.dcaAddStepPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dca_add_step_pct",{initialValue:0}],expression:"['dca_add_step_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4},on:{change:e.onScaleParamsChange}})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendAddSizePct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_add_size_pct",{initialValue:0}],expression:"['trend_add_size_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4},on:{change:e.onScaleParamsChange}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.dcaAddSizePct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dca_add_size_pct",{initialValue:0}],expression:"['dca_add_size_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4},on:{change:e.onScaleParamsChange}})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendAddMaxTimes")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_add_max_times",{initialValue:0}],expression:"['trend_add_max_times', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:50,step:1,precision:0},on:{change:e.onScaleParamsChange}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.dcaAddMaxTimes")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dca_add_max_times",{initialValue:0}],expression:"['dca_add_max_times', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:50,step:1,precision:0},on:{change:e.onScaleParamsChange}})],1)],1)],1)],1),a("a-collapse-panel",{key:"reduce",attrs:{header:e.$t("dashboard.indicator.backtest.panel.reduce")}},[a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendReduceEnabled")}},[a("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_reduce_enabled",{valuePropName:"checked",initialValue:!1}],expression:"['trend_reduce_enabled', { valuePropName: 'checked', initialValue: false }]"}]})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.adverseReduceEnabled")}},[a("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverse_reduce_enabled",{valuePropName:"checked",initialValue:!1}],expression:"['adverse_reduce_enabled', { valuePropName: 'checked', initialValue: false }]"}]})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendReduceStepPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_reduce_step_pct",{initialValue:0}],expression:"['trend_reduce_step_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.adverseReduceStepPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverse_reduce_step_pct",{initialValue:0}],expression:"['adverse_reduce_step_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendReduceSizePct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_reduce_size_pct",{initialValue:0}],expression:"['trend_reduce_size_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.adverseReduceSizePct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverse_reduce_size_pct",{initialValue:0}],expression:"['adverse_reduce_size_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4}})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendReduceMaxTimes")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_reduce_max_times",{initialValue:0}],expression:"['trend_reduce_max_times', { initialValue: 0 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:50,step:1,precision:0}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.adverseReduceMaxTimes")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverse_reduce_max_times",{initialValue:0}],expression:"['adverse_reduce_max_times', { initialValue: 0 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:50,step:1,precision:0}})],1)],1)],1)],1),a("a-collapse-panel",{key:"position",attrs:{header:e.$t("dashboard.indicator.backtest.panel.position")}},[a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.entryPct"),help:e.$t("dashboard.indicator.backtest.hint.entryPctMax",{maxPct:Number(e.entryPctMaxUi||0).toFixed(0)})}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["entry_pct",{initialValue:100}],expression:"['entry_pct', { initialValue: 100 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:e.entryPctMaxUi,step:.1,precision:4},on:{change:e.onEntryPctChange}})],1)],1),a("a-col",{attrs:{span:12}})],1)],1)],1),a("div",{staticClass:"ai-filter-box"},[a("div",{staticClass:"ai-filter-header"},[a("div",{staticClass:"ai-filter-title"},[a("a-icon",{attrs:{type:"robot"}}),a("span",[e._v(e._s(e.$t("trading-assistant.form.enableAiFilter")))])],1),a("a-switch",{attrs:{checked:e.aiFilterEnabledUi},on:{change:e.onAiFilterToggle}})],1),a("div",{staticClass:"ai-filter-hint"},[e._v(e._s(e.$t("trading-assistant.form.enableAiFilterHint")))])])],1)],1):e._e()]),a("div",{directives:[{name:"show",rawName:"v-show",value:2===e.currentStep,expression:"currentStep === 2"}],staticClass:"step-content"},[a("a-form",{attrs:{form:e.form,layout:"vertical",autocomplete:"off"}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.executionMode")}},[a("a-radio-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["execution_mode",{initialValue:"signal"}],expression:"['execution_mode', { initialValue: 'signal' }]"}],attrs:{disabled:!e.canUseLiveTrading},on:{change:e.onExecutionModeChange}},[a("a-radio",{attrs:{value:"signal"}},[e._v(e._s(e.$t("trading-assistant.form.executionModeSignal")))]),a("a-radio",{attrs:{value:"live",disabled:!e.canUseLiveTrading}},[e._v(e._s(e.$t("trading-assistant.form.executionModeLive")))])],1),e.canUseLiveTrading?e._e():a("div",{staticClass:"form-item-hint",staticStyle:{color:"#ff9800"}},[e._v(" "+e._s(e.$t("trading-assistant.form.liveTradingNotSupportedHint"))+" ")])],1),"live"===e.executionModeUi&&e.canUseLiveTrading?a("a-form-item",{staticClass:"live-disclaimer-item"},[a("a-alert",{staticStyle:{"margin-bottom":"8px"},attrs:{type:"warning",showIcon:"",message:e.$t("trading-assistant.liveDisclaimer.title"),description:e.$t("trading-assistant.liveDisclaimer.content")}}),a("a-checkbox",{directives:[{name:"decorator",rawName:"v-decorator",value:["live_disclaimer_ack",{valuePropName:"checked",initialValue:!1}],expression:"['live_disclaimer_ack', { valuePropName: 'checked', initialValue: false }]"}],on:{change:e.onLiveDisclaimerAckChange}},[e._v(" "+e._s(e.$t("trading-assistant.liveDisclaimer.agree"))+" ")])],1):e._e(),a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.notifyChannels")}},[a("a-checkbox-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["notify_channels",{initialValue:["browser"]}],expression:"['notify_channels', { initialValue: ['browser'] }]"}],on:{change:e.onNotifyChannelsChange}},[a("a-checkbox",{attrs:{value:"browser"}},[e._v(e._s(e.$t("trading-assistant.notify.browser")))]),a("a-checkbox",{attrs:{value:"email"}},[e._v(e._s(e.$t("trading-assistant.notify.email")))]),a("a-checkbox",{attrs:{value:"telegram"}},[e._v(e._s(e.$t("trading-assistant.notify.telegram")))]),a("a-checkbox",{attrs:{value:"discord"}},[e._v(e._s(e.$t("trading-assistant.notify.discord")))]),a("a-checkbox",{attrs:{value:"webhook"}},[e._v(e._s(e.$t("trading-assistant.notify.webhook")))]),a("a-checkbox",{attrs:{value:"phone"}},[e._v(e._s(e.$t("trading-assistant.notify.phone")))])],1),a("div",{staticClass:"form-item-hint"},[e._v(e._s(e.$t("trading-assistant.form.notifyChannelsHint")))])],1),e.unconfiguredChannels.length>0?a("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"warning",showIcon:""},scopedSlots:e._u([{key:"message",fn:function(){return[a("span",[e._v(" "+e._s(e.$t("trading-assistant.form.notificationConfigMissing",{channels:e.unconfiguredChannels.join(", ")}))+" "),a("router-link",{staticStyle:{"margin-left":"8px"},attrs:{to:"/profile"}},[a("a-icon",{attrs:{type:"setting"}}),e._v(" "+e._s(e.$t("trading-assistant.form.goToProfile"))+" ")],1)],1)]},proxy:!0}],null,!1,2930252607)}):e.notifyChannelsUi.length>0&&!e.notifyChannelsUi.includes("browser")||e.notifyChannelsUi.length>1?a("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"info",showIcon:""},scopedSlots:e._u([{key:"message",fn:function(){return[a("span",[e._v(" "+e._s(e.$t("trading-assistant.form.notificationFromProfile"))+" "),a("router-link",{staticStyle:{"margin-left":"8px"},attrs:{to:"/profile"}},[a("a-icon",{attrs:{type:"setting"}}),e._v(" "+e._s(e.$t("trading-assistant.form.goToProfile"))+" ")],1)],1)]},proxy:!0}])}):e._e(),"live"===e.executionModeUi&&e.canUseLiveTrading?a("a-divider"):e._e(),"live"===e.executionModeUi&&e.canUseLiveTrading&&!e.liveDisclaimerAckUi?a("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"warning",showIcon:"",message:e.$t("trading-assistant.liveDisclaimer.blockTitle"),description:e.$t("trading-assistant.liveDisclaimer.blockDesc")}}):e._e(),"live"===e.executionModeUi&&e.canUseLiveTrading&&e.liveDisclaimerAckUi?a("div",[a("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"info","show-icon":"",message:e.$t("trading-assistant.form.liveTradingConfigTitle"),description:e.$t("trading-assistant.form.liveTradingConfigHint")}}),a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.savedCredential")}},[a("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["credential_id",{rules:[{required:!0,message:e.$t("profile.exchange.noCredentialHint")}],getValueFromEvent:function(t){return t||void 0}}],expression:"['credential_id', {\n rules: [{ required: true, message: $t('profile.exchange.noCredentialHint') }],\n getValueFromEvent: (val) => val || undefined\n }]"}],attrs:{placeholder:e.$t("trading-assistant.placeholders.selectSavedCredential"),"allow-clear":"","show-search":"","option-filter-prop":"children",loading:e.loadingExchangeCredentials},on:{change:e.handleCredentialSelectChange}},e._l(e.filteredExchangeCredentials,function(t){return a("a-select-option",{key:t.id,attrs:{value:t.id}},[e._v(" "+e._s(e.formatCredentialLabel(t))+" ")])}),1),a("div",{staticClass:"form-item-hint",staticStyle:{"margin-top":"6px"}},[a("router-link",{attrs:{to:"/profile?tab=exchange"}},[a("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"setting"}}),e._v(e._s(e.$t("profile.exchange.goToManage"))+" ")],1)],1)],1)],1):e._e()],1)],1)])],1),a("template",{slot:"footer"},[a("a-button",{on:{click:e.handleCloseModal}},[e._v(e._s(e.$t("trading-assistant.form.cancel")))]),a("a-button",{directives:[{name:"show",rawName:"v-show",value:e.currentStep>0,expression:"currentStep > 0"}],on:{click:e.handlePrev}},[e._v(" "+e._s(e.$t("trading-assistant.form.prev"))+" ")]),a("a-button",{directives:[{name:"show",rawName:"v-show",value:e.currentStep<2,expression:"currentStep < 2"}],attrs:{type:"primary",loading:e.saving},on:{click:e.handleNext}},[e._v(" "+e._s(e.$t("trading-assistant.form.next"))+" ")]),a("a-button",{directives:[{name:"show",rawName:"v-show",value:2===e.currentStep,expression:"currentStep === 2"}],attrs:{type:"primary",loading:e.saving},on:{click:e.handleSubmit}},[e._v(" "+e._s(e.editingStrategy?e.$t("trading-assistant.form.confirmEdit"):e.$t("trading-assistant.form.confirmCreate"))+" ")])],1)],2),a("a-modal",{attrs:{title:e.$t("trading-assistant.form.addSymbolTitle"),visible:e.showAddSymbolModal,confirmLoading:e.addingSymbol,width:"600px",okText:e.$t("trading-assistant.form.confirmAdd"),cancelText:e.$t("trading-assistant.form.cancel"),maskClosable:!1,keyboard:!1},on:{ok:e.handleConfirmAddSymbol,cancel:e.handleCloseAddSymbolModal}},[a("div",{staticClass:"add-symbol-modal-content"},[a("a-tabs",{staticClass:"market-tabs",on:{change:e.handleAddSymbolMarketChange},model:{value:e.addSymbolMarket,callback:function(t){e.addSymbolMarket=t},expression:"addSymbolMarket"}},e._l(e.addSymbolMarketTypes,function(t){return a("a-tab-pane",{key:t.value,attrs:{tab:e.$t(t.i18nKey||"dashboard.analysis.market.".concat(t.value))}})}),1),a("div",{staticClass:"symbol-search-section"},[a("a-input-search",{attrs:{placeholder:e.$t("dashboard.analysis.modal.addStock.searchOrInputPlaceholder"),loading:e.searchingSymbol,size:"large","allow-clear":""},on:{search:e.handleSearchSymbol,change:e.handleSymbolSearchInputChange},model:{value:e.addSymbolKeyword,callback:function(t){e.addSymbolKeyword=t},expression:"addSymbolKeyword"}},[a("a-button",{attrs:{slot:"enterButton",type:"primary",icon:"search"},slot:"enterButton"},[e._v(" "+e._s(e.$t("dashboard.analysis.modal.addStock.search"))+" ")])],1)],1),e.symbolSearchResults.length>0?a("div",{staticClass:"search-results-section"},[a("div",{staticClass:"section-title"},[a("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"search"}}),e._v(" "+e._s(e.$t("dashboard.analysis.modal.addStock.searchResults"))+" ")],1),a("a-list",{staticClass:"symbol-list",attrs:{"data-source":e.symbolSearchResults,loading:e.searchingSymbol,size:"small"},scopedSlots:e._u([{key:"renderItem",fn:function(t){return a("a-list-item",{staticClass:"symbol-list-item",on:{click:function(a){return e.handleSelectAddSymbol(t)}}},[a("a-list-item-meta",[a("template",{slot:"title"},[a("div",{staticClass:"symbol-item-content"},[a("span",{staticClass:"symbol-code"},[e._v(e._s(t.symbol))]),a("span",{staticClass:"symbol-name"},[e._v(e._s(t.name))]),t.exchange?a("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"blue"}},[e._v(" "+e._s(t.exchange)+" ")]):e._e()],1)])],2)],1)}}],null,!1,2801225082)})],1):e._e(),a("div",{staticClass:"hot-symbols-section"},[a("div",{staticClass:"section-title"},[a("a-icon",{staticStyle:{color:"#ff4d4f","margin-right":"4px"},attrs:{type:"fire"}}),e._v(" "+e._s(e.$t("dashboard.analysis.modal.addStock.hotSymbols"))+" ")],1),a("a-spin",{attrs:{spinning:e.loadingHotSymbols}},[e.hotSymbols.length>0?a("a-list",{staticClass:"symbol-list",attrs:{"data-source":e.hotSymbols,size:"small"},scopedSlots:e._u([{key:"renderItem",fn:function(t){return a("a-list-item",{staticClass:"symbol-list-item",on:{click:function(a){return e.handleSelectAddSymbol(t)}}},[a("a-list-item-meta",[a("template",{slot:"title"},[a("div",{staticClass:"symbol-item-content"},[a("span",{staticClass:"symbol-code"},[e._v(e._s(t.symbol))]),a("span",{staticClass:"symbol-name"},[e._v(e._s(t.name))]),t.exchange?a("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"orange"}},[e._v(" "+e._s(t.exchange)+" ")]):e._e()],1)])],2)],1)}}],null,!1,3959834868)}):a("a-empty",{attrs:{description:e.$t("dashboard.analysis.modal.addStock.noHotSymbols"),image:!1}})],1)],1),e.selectedAddSymbol?a("div",{staticClass:"selected-symbol-section"},[a("div",{staticClass:"section-title"},[a("a-icon",{staticStyle:{color:"#52c41a","margin-right":"4px"},attrs:{type:"check-circle"}}),e._v(" "+e._s(e.$t("dashboard.analysis.modal.addStock.selectedSymbol"))+" ")],1),a("div",{staticClass:"selected-symbol-info"},[a("a-tag",{staticStyle:{"margin-right":"8px"},attrs:{color:e.getMarketColor(e.addSymbolMarket)}},[e._v(e._s(e.addSymbolMarket))]),a("span",{staticClass:"symbol-code"},[e._v(e._s(e.selectedAddSymbol.symbol))]),e.selectedAddSymbol.name?a("span",{staticClass:"symbol-name"},[e._v(e._s(e.selectedAddSymbol.name))]):e._e()],1)]):e._e()],1)])],1)},s=[],r=a(21092),n=a(68285),o=a(76959),l=a(17654),d=a(9133),c=a(52074),u=a(57888),m=a(73047),g=a(64118),p=a(72694),h=a(27617),_=a(21170),y=a(76471),f=function(){var t=this,e=t._self._c;return e("div",{staticClass:"trading-records"},[0!==t.records.length||t.loading?e("a-table",{attrs:{columns:t.columns,"data-source":t.records,loading:t.loading,pagination:{pageSize:10},size:"small",rowKey:"id",scroll:{x:800}},scopedSlots:t._u([{key:"type",fn:function(a){return[e("a-tag",{attrs:{color:t.getTradeTypeColor(a)}},[t._v(" "+t._s(t.getTradeTypeText(a))+" ")])]}},{key:"price",fn:function(e){return[t._v(" $"+t._s(parseFloat(e).toFixed(4))+" ")]}},{key:"amount",fn:function(e){return[t._v(" "+t._s(parseFloat(e).toFixed(4))+" ")]}},{key:"value",fn:function(e){return[t._v(" $"+t._s(parseFloat(e).toFixed(2))+" ")]}},{key:"profit",fn:function(a,i){return[e("span",{style:{color:a>0?"#52c41a":a<0?"#f5222d":"#666"}},[t._v(" "+t._s(t.formatProfit(a,i))+" ")])]}},{key:"commission",fn:function(e){return[t._v(" "+t._s(t.formatCommission(e))+" ")]}},{key:"time",fn:function(e,a){return[t._v(" "+t._s(t.formatTime(a.created_at||e))+" ")]}}])}):e("div",{staticClass:"empty-state"},[e("a-empty",{attrs:{description:t.$t("trading-assistant.table.noPositions")}})],1)],1)},v=[],b={name:"TradingRecords",props:{strategyId:{type:Number,required:!0},loading:{type:Boolean,default:!1}},computed:{columns:function(){return[{title:this.$t("trading-assistant.table.time"),dataIndex:"created_at",key:"created_at",width:180,scopedSlots:{customRender:"time"}},{title:this.$t("dashboard.indicator.backtest.tradeType"),dataIndex:"type",key:"type",width:140,scopedSlots:{customRender:"type"}},{title:this.$t("trading-assistant.table.price"),dataIndex:"price",key:"price",width:120,scopedSlots:{customRender:"price"}},{title:this.$t("trading-assistant.table.amount"),dataIndex:"amount",key:"amount",width:120,scopedSlots:{customRender:"amount"}},{title:this.$t("trading-assistant.table.value"),dataIndex:"value",key:"value",width:120,scopedSlots:{customRender:"value"}},{title:this.$t("dashboard.indicator.backtest.profit"),dataIndex:"profit",key:"profit",width:120,scopedSlots:{customRender:"profit"}},{title:this.$t("trading-assistant.table.commission"),dataIndex:"commission",key:"commission",width:100,scopedSlots:{customRender:"commission"}}]}},data:function(){return{records:[]}},watch:{strategyId:{handler:function(t){t&&this.loadRecords()},immediate:!0}},methods:{loadRecords:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.strategyId){e.n=1;break}return e.a(2);case 1:return e.p=1,e.n=2,(0,m.tq)(t.strategyId);case 2:a=e.v,1===a.code?t.records=(a.data.trades||[]).map(function(t){return(0,u.A)((0,u.A)({},t),{},{time:t.created_at||t.time})}):t.$message.error(a.msg||t.$t("trading-assistant.messages.loadTradesFailed")),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.a(2)}},e,null,[[1,3]])}))()},formatTime:function(t){if(!t)return"--";try{var e;if("number"===typeof t){var a=t<1e12?1e3*t:t;e=new Date(a)}else{if("string"!==typeof t)return"--";if(/^\d+$/.test(t)){var i=parseInt(t,10),s=i<1e12?1e3*i:i;e=new Date(s)}else e=new Date(t)}if(isNaN(e.getTime()))return"--";var r=this.$i18n.locale||"zh-CN",n={"zh-CN":"zh-CN","zh-TW":"zh-TW","en-US":"en-US"};return e.toLocaleString(n[r]||"zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})}catch(o){return"--"}},getTradeTypeColor:function(t){var e={buy:"green",sell:"red",liquidation:"orange",open_long:"green",add_long:"cyan",close_long:"orange",close_long_stop:"red",close_long_profit:"lime",open_short:"red",add_short:"magenta",close_short:"blue",close_short_stop:"red",close_short_profit:"cyan"};return e[t]||"default"},getTradeTypeText:function(t){var e={buy:this.$t("dashboard.indicator.backtest.buy"),sell:this.$t("dashboard.indicator.backtest.sell"),liquidation:this.$t("dashboard.indicator.backtest.liquidation"),open_long:this.$t("dashboard.indicator.backtest.openLong"),add_long:this.$t("dashboard.indicator.backtest.addLong"),close_long:this.$t("dashboard.indicator.backtest.closeLong"),close_long_stop:this.$t("dashboard.indicator.backtest.closeLongStop"),close_long_profit:this.$t("dashboard.indicator.backtest.closeLongProfit"),open_short:this.$t("dashboard.indicator.backtest.openShort"),add_short:this.$t("dashboard.indicator.backtest.addShort"),close_short:this.$t("dashboard.indicator.backtest.closeShort"),close_short_stop:this.$t("dashboard.indicator.backtest.closeShortStop"),close_short_profit:this.$t("dashboard.indicator.backtest.closeShortProfit")};return e[t]||t},formatMoney:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"-";return"".concat(e,"$").concat(Math.abs(t).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}))},formatProfit:function(t,e){if(null===t||void 0===t)return"--";var a=parseFloat(t),i=["open_long","open_short","add_long","add_short"];return 0===a&&e&&i.includes(e.type)?"--":Math.abs(a)<1e-6?e&&i.includes(e.type)?"--":"$0.00":this.formatMoney(a)},formatCommission:function(t){if(null===t||void 0===t)return"--";var e=parseFloat(t);return isNaN(e)||Math.abs(e)<1e-6?"--":"$".concat(e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:6}))}}},S=b,k=a(845),x=(0,k.A)(S,f,v,!1,null,"a5bdef7e",null),C=x.exports,w=function(){var t=this,e=t._self._c;return e("div",{staticClass:"position-records"},[0!==t.positions.length||t.loading?e("a-table",{attrs:{columns:t.columns,"data-source":t.positions,loading:t.loading,pagination:!1,size:"small",rowKey:"id",scroll:{x:800}},scopedSlots:t._u([{key:"symbol",fn:function(a,i){return[e("strong",[t._v(t._s(i.symbol||a))])]}},{key:"side",fn:function(a,i){return[e("a-tag",{attrs:{color:"long"===(i.side||a)?"green":"red"}},[t._v(" "+t._s("long"===(i.side||a)?t.$t("trading-assistant.table.long"):t.$t("trading-assistant.table.short"))+" ")])]}},{key:"entryPrice",fn:function(a,i){return[t.hasValidPrice(i.entry_price||a)?e("span",[t._v(" $"+t._s(parseFloat(i.entry_price||a).toFixed(4))+" ")]):e("span",[t._v("--")])]}},{key:"currentPrice",fn:function(e,a){return[t._v(" $"+t._s(parseFloat(a.current_price||e||0).toFixed(4))+" ")]}},{key:"size",fn:function(e,a){return[t._v(" "+t._s(parseFloat(a.size||e||0).toFixed(4))+" ")]}},{key:"unrealizedPnl",fn:function(a,i){return[e("span",{class:{profit:parseFloat(i.unrealized_pnl||a||0)>0,loss:parseFloat(i.unrealized_pnl||a||0)<0}},[t._v(" $"+t._s(parseFloat(i.unrealized_pnl||a||0).toFixed(2))+" ")])]}},{key:"pnlPercent",fn:function(a,i){return[e("span",{class:{profit:parseFloat(i.pnl_percent||a||0)>0,loss:parseFloat(i.pnl_percent||a||0)<0}},[t._v(" "+t._s(parseFloat(i.pnl_percent||a||0).toFixed(2))+"% ")])]}}])}):e("div",{staticClass:"empty-state"},[e("a-empty",{attrs:{description:t.$t("trading-assistant.table.noPositions")}})],1)],1)},$=[],A={name:"PositionRecords",props:{strategyId:{type:Number,required:!0},marketType:{type:String,default:"swap"},leverage:{type:[Number,String],default:1},loading:{type:Boolean,default:!1}},data:function(){return{positions:[]}},computed:{columns:function(){return[{title:this.$t("trading-assistant.table.symbol"),dataIndex:"symbol",key:"symbol",width:120,scopedSlots:{customRender:"symbol"}},{title:this.$t("trading-assistant.table.side"),dataIndex:"side",key:"side",width:80,scopedSlots:{customRender:"side"}},{title:this.$t("trading-assistant.table.size"),dataIndex:"size",key:"size",width:120,scopedSlots:{customRender:"size"}},{title:this.$t("trading-assistant.table.entryPrice"),dataIndex:"entry_price",key:"entry_price",width:120,scopedSlots:{customRender:"entryPrice"}},{title:this.$t("trading-assistant.table.currentPrice"),dataIndex:"current_price",key:"current_price",width:120,scopedSlots:{customRender:"currentPrice"}},{title:this.$t("trading-assistant.table.unrealizedPnl"),dataIndex:"unrealized_pnl",key:"unrealized_pnl",width:120,scopedSlots:{customRender:"unrealizedPnl"}},{title:this.$t("trading-assistant.table.pnlPercent"),dataIndex:"pnl_percent",key:"pnl_percent",width:100,scopedSlots:{customRender:"pnlPercent"}}]}},watch:{strategyId:{handler:function(t){t?(this.loadPositions(),this.startPolling()):this.stopPolling()},immediate:!0}},beforeDestroy:function(){this.stopPolling()},methods:{loadPositions:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a,i;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.strategyId){e.n=1;break}return e.a(2);case 1:return e.p=1,e.n=2,(0,m.oK)(t.strategyId);case 2:a=e.v,1===a.code?(i=a.data.positions||[],t.positions=i.map(function(e,a){var i=String(t.marketType||"swap").toLowerCase(),s=parseFloat(t.leverage);(!isFinite(s)||s<=0)&&(s=1),"spot"===i&&(s=1);var r=parseFloat(e.entry_price||e.entryPrice||0),n=parseFloat(e.size||"0")||0,o=parseFloat(e.unrealized_pnl||e.unrealizedPnl||"0")||0,l=parseFloat(e.pnl_percent||e.pnlPercent||"0")||0;r>0&&n>0?l=o/(r*n)*100*s:"spot"!==i&&(l*=s);var d={id:e.id||a,symbol:e.symbol||"",side:e.side||"long",size:n>0?n.toString():"0",entry_price:r>0?r.toString():"0",current_price:e.current_price||e.currentPrice||"0",unrealized_pnl:e.unrealized_pnl||e.unrealizedPnl||"0",pnl_percent:l,updated_at:e.updated_at||e.updatedAt||""};return d})):t.positions=[],e.n=4;break;case 3:e.p=3,e.v,t.positions=[];case 4:return e.a(2)}},e,null,[[1,3]])}))()},hasValidPrice:function(t){var e=parseFloat(t);return Number.isFinite(e)&&e>0},startPolling:function(){var t=this;this.stopPolling(),this.pollingTimer=setInterval(function(){t.loadPositions()},5e3)},stopPolling:function(){this.pollingTimer&&(clearInterval(this.pollingTimer),this.pollingTimer=null)}}},P=A,M=(0,k.A)(P,w,$,!1,null,"2abcf4f1",null),F=M.exports,T=["BTC/USDT","ETH/USDT","BNB/USDT","SOL/USDT","ADA/USDT","XRP/USDT","DOGE/USDT","DOT/USDT","MATIC/USDT","AVAX/USDT","LINK/USDT","UNI/USDT","LTC/USDT","ATOM/USDT","ETC/USDT"],V=[{value:"binance",labelKey:"binance"},{value:"okx",labelKey:"okx"},{value:"bitget",labelKey:"bitget"},{value:"bybit",labelKey:"bybit"},{value:"coinbaseexchange",labelKey:"coinbaseexchange"},{value:"kraken",labelKey:"kraken"},{value:"kucoin",labelKey:"kucoin"},{value:"gate",labelKey:"gate"},{value:"bitfinex",labelKey:"bitfinex"},{value:"deepcoin",labelKey:"deepcoin"}],I=[{value:"ibkr",labelKey:"ibkr",name:"Interactive Brokers"}],N=[{value:"mt5",labelKey:"mt5",name:"MetaTrader 5"}],U={name:"TradingAssistant",mixins:[_.t],components:{TradingRecords:C,PositionRecords:F},computed:{isAdvancedMode:function(){return"advanced"===this.creationMode},isSimpleMode:function(){return"simple"===this.creationMode},displayCurrentStep:function(){return this.isSimpleMode&&!this.editingStrategy?0===this.currentStep?0:1:this.currentStep},isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},needsPassphrase:function(){return["okx","okex","coinbaseexchange","kucoin","bitget","deepcoin"].includes(this.currentExchangeId)},isIBKRMarket:function(){return"USStock"===this.selectedMarketCategory},isMT5Market:function(){return"Forex"===this.selectedMarketCategory},isBrokerMarket:function(){return this.isIBKRMarket||this.isMT5Market},filteredExchangeCredentials:function(){var t=this;return this.exchangeCredentials&&Array.isArray(this.exchangeCredentials)?this.exchangeCredentials.filter(function(e){return t.isCredentialCompatible(e)}):[]},formattedExchangeOptions:function(){var t=this;return V.map(function(e){var a="";try{if(e.labelKey){var i="trading-assistant.exchangeNames.".concat(e.labelKey),s=t.$t(i);s!==i&&(a=s)}}catch(r){}return a||(a=e.value.charAt(0).toUpperCase()+e.value.slice(1)),(0,u.A)((0,u.A)({},e),{},{displayName:a})})},totalPnl:function(){return null!==this.currentEquity&&this.selectedStrategy&&this.selectedStrategy.initial_capital?this.currentEquity-(this.selectedStrategy.initial_capital||0):null},totalPnlPercent:function(){return null!==this.totalPnl&&this.selectedStrategy&&this.selectedStrategy.initial_capital?0===this.selectedStrategy.initial_capital?0:this.totalPnl/this.selectedStrategy.initial_capital*100:null},getEquityColorClass:function(){return null===this.totalPnl?"":this.totalPnl>=0?"text-success":"text-danger"},getPnlColorClass:function(){return null===this.totalPnl?"":this.totalPnl>=0?"text-success":"text-danger"},isCryptoMarket:function(){var t=this.selectedMarketCategory||"Crypto";return"crypto"===String(t).toLowerCase()},canUseLiveTrading:function(){var t=this.selectedMarketCategory||"Crypto";return"crypto"===String(t).toLowerCase()||("USStock"===t||"Forex"===t)},isLiveTradingAvailable:function(){var t=this.selectedMarketCategory||"Crypto",e=this.currentExchangeId||"";return"crypto"===String(t).toLowerCase()?["binance","okx","bitget","bybit","coinbaseexchange","kraken","kucoin","gate","bitfinex"].includes(e):"USStock"===t?"ibkr"===this.currentBrokerId:"Forex"===t&&"mt5"===this.currentBrokerId},showDemoTradingSwitch:function(){return this.currentExchangeId&&"binance"===this.currentExchangeId.toLowerCase()},brokerOptions:function(){var t=this;return I.map(function(e){var a="";try{var i="trading-assistant.brokerNames.".concat(e.labelKey),s=t.$t(i);s!==i&&(a=s)}catch(r){}return a||(a=e.name||e.value.toUpperCase()),(0,u.A)((0,u.A)({},e),{},{displayName:a})})},forexBrokerOptions:function(){var t=this;return N.map(function(e){var a="";try{var i="trading-assistant.brokerNames.".concat(e.labelKey),s=t.$t(i);s!==i&&(a=s)}catch(r){}return a||(a=e.name||e.value.toUpperCase()),(0,u.A)((0,u.A)({},e),{},{displayName:a})})},cryptoExchangeOptions:function(){var t=this;return V.map(function(e){var a="";try{if(e.labelKey){var i="trading-assistant.exchangeNames.".concat(e.labelKey),s=t.$t(i);s!==i&&(a=s)}}catch(r){}return a||(a=e.value.charAt(0).toUpperCase()+e.value.slice(1)),(0,u.A)((0,u.A)({},e),{},{displayName:a})})},groupedStrategies:function(){return"symbol"===this.groupByMode?this.groupedBySymbol:this.groupedByStrategy},groupedByStrategy:function(){var t,e={},a=[],i=(0,c.A)(this.strategies);try{for(i.s();!(t=i.n()).done;){var s=t.value,r=s.strategy_group_id;r&&r.trim()?(e[r]||(e[r]={id:r,baseName:s.group_base_name||s.strategy_name.split("-")[0],strategies:[],runningCount:0,stoppedCount:0}),e[r].strategies.push(s),"running"===s.status?e[r].runningCount++:e[r].stoppedCount++):a.push(s)}}catch(o){i.e(o)}finally{i.f()}var n=Object.values(e).sort(function(t,e){var a=Math.max.apply(Math,(0,d.A)(t.strategies.map(function(t){return t.created_at||0}))),i=Math.max.apply(Math,(0,d.A)(e.strategies.map(function(t){return t.created_at||0})));return i-a});return{groups:n,ungrouped:a}},groupedBySymbol:function(){var t,e={},a=[],i=(0,c.A)(this.strategies);try{for(i.s();!(t=i.n()).done;){var s=t.value,r=s.trading_config||{},n=r.symbol;if(n&&n.trim()){e[n]||(e[n]={id:"symbol_".concat(n),baseName:n,strategies:[],runningCount:0,stoppedCount:0});var o=(0,u.A)((0,u.A)({},s),{},{displayInfo:{strategyName:s.strategy_name||s.group_base_name||"Unnamed",timeframe:r.timeframe||"-",indicatorName:s.indicator_name||s.indicator_config&&s.indicator_config.name||"-"}});e[n].strategies.push(o),"running"===s.status?e[n].runningCount++:e[n].stoppedCount++}else a.push(s)}}catch(d){i.e(d)}finally{i.f()}var l=Object.values(e).sort(function(t,e){return t.baseName.localeCompare(e.baseName)});return{groups:l,ungrouped:a}},unconfiguredChannels:function(){var t=[];return this.notifyChannelsUi.includes("telegram")&&(this.userNotificationSettings.telegram_bot_token||this.userNotificationSettings.telegram_chat_id||t.push("Telegram")),this.notifyChannelsUi.includes("email")&&(this.userNotificationSettings.email||t.push("Email")),this.notifyChannelsUi.includes("discord")&&(this.userNotificationSettings.discord_webhook||t.push("Discord")),this.notifyChannelsUi.includes("webhook")&&(this.userNotificationSettings.webhook_url||t.push("Webhook")),t}},data:function(){return{loading:!1,loadingRecords:!1,strategies:[],selectedStrategy:null,showFormModal:!1,creationMode:"simple",showAdvancedSettings:!1,strategyType:"indicator",selectedMarketCategory:"Crypto",currentStep:0,saving:!1,loadingIndicators:!1,availableIndicators:[],selectedIndicator:null,indicatorParams:[],indicatorParamValues:{},cryptoSymbols:T,loadingWatchlist:!1,watchlist:[],exchangeOptions:V,currentExchangeId:"",currentBrokerId:"ibkr",connectionTestResult:null,indicatorsLoaded:!1,editingStrategy:null,currentEquity:null,equityPollingTimer:null,backtestCollapseKeys:["risk"],trailingEnabledUi:!1,entryPctMaxUi:100,aiFilterEnabledUi:!1,isEditMode:!1,supportedIPs:[],executionModeUi:"signal",liveDisclaimerAckUi:!1,notifyChannelsUi:["browser"],userNotificationSettings:{default_channels:["browser"],telegram_bot_token:"",telegram_chat_id:"",email:"",phone:"",discord_webhook:"",webhook_url:"",webhook_token:""},loadingExchangeCredentials:!1,exchangeCredentials:[],saveCredentialUi:!1,suppressApiClearOnce:!1,selectedSymbols:[],crossSectionalSymbols:[],collapsedGroups:{},groupByMode:"strategy",showAddSymbolModal:!1,addSymbolMarket:"Crypto",addSymbolMarketTypes:[{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}],addSymbolKeyword:"",searchingSymbol:!1,symbolSearchResults:[],selectedAddSymbol:null,hasSearchedSymbol:!1,addingSymbol:!1,hotSymbols:[],loadingHotSymbols:!1,searchTimer:null}},beforeCreate:function(){this.form=this.$form.createForm(this)},mounted:function(){this.loadStrategies(),this.loadUserNotificationSettings()},beforeDestroy:function(){this.stopEquityPolling()},methods:{loadUserNotificationSettings:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,h.vF)();case 1:a=e.v,1===a.code&&a.data&&(t.userNotificationSettings={default_channels:a.data.default_channels||["browser"],telegram_bot_token:a.data.telegram_bot_token||"",telegram_chat_id:a.data.telegram_chat_id||"",email:a.data.email||"",phone:a.data.phone||"",discord_webhook:a.data.discord_webhook||"",webhook_url:a.data.webhook_url||"",webhook_token:a.data.webhook_token||""}),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadWatchlist:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loadingWatchlist=!0,e.p=1,e.n=2,(0,g.Qo)({userid:1});case 2:a=e.v,a&&1===a.code?t.watchlist=Array.isArray(a.data)?a.data:[]:t.watchlist=[],e.n=4;break;case 3:e.p=3,e.v,t.watchlist=[];case 4:return e.p=4,t.loadingWatchlist=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleCloseAddSymbolModal:function(){this.showAddSymbolModal=!1,this.addSymbolKeyword="",this.symbolSearchResults=[],this.selectedAddSymbol=null,this.hasSearchedSymbol=!1},handleAddSymbolMarketChange:function(t){this.addSymbolMarket=t,this.addSymbolKeyword="",this.symbolSearchResults=[],this.selectedAddSymbol=null,this.hasSearchedSymbol=!1,this.loadHotSymbols(t)},handleSymbolSearchInputChange:function(t){var e=this,a=t.target.value;if(this.addSymbolKeyword=a,this.searchTimer&&clearTimeout(this.searchTimer),!a||""===a.trim())return this.symbolSearchResults=[],this.hasSearchedSymbol=!1,void(this.selectedAddSymbol=null);this.searchTimer=setTimeout(function(){e.searchSymbolsInModal(a)},500)},handleSearchSymbol:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){return(0,o.A)().w(function(a){while(1)switch(a.n){case 0:if(t&&t.trim()){a.n=1;break}return a.a(2);case 1:if(e.addSymbolMarket){a.n=2;break}return e.$message.warning(e.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),a.a(2);case 2:if(!(e.symbolSearchResults.length>0)){a.n=3;break}return a.a(2);case 3:e.hasSearchedSymbol&&0===e.symbolSearchResults.length?e.handleDirectAdd():e.searchSymbolsInModal(t);case 4:return a.a(2)}},a)}))()},searchSymbolsInModal:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var i;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(t&&""!==t.trim()){a.n=1;break}return e.symbolSearchResults=[],e.hasSearchedSymbol=!1,a.a(2);case 1:if(e.addSymbolMarket){a.n=2;break}return a.a(2);case 2:return e.searchingSymbol=!0,e.hasSearchedSymbol=!0,a.p=3,a.n=4,(0,g._3)({market:e.addSymbolMarket,keyword:t.trim()});case 4:i=a.v,i&&1===i.code&&Array.isArray(i.data)?e.symbolSearchResults=i.data:e.symbolSearchResults=[],a.n=6;break;case 5:a.p=5,a.v,e.symbolSearchResults=[];case 6:return a.p=6,e.searchingSymbol=!1,a.f(6);case 7:return a.a(2)}},a,null,[[3,5,6,7]])}))()},handleDirectAdd:function(){this.addSymbolKeyword&&this.addSymbolKeyword.trim()?this.addSymbolMarket?this.selectedAddSymbol={market:this.addSymbolMarket,symbol:this.addSymbolKeyword.trim().toUpperCase(),name:""}:this.$message.warning(this.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")):this.$message.warning(this.$t("dashboard.analysis.modal.addStock.pleaseEnterSymbol"))},handleSelectAddSymbol:function(t){this.selectedAddSymbol={market:this.addSymbolMarket,symbol:t.symbol,name:t.name||""}},loadHotSymbols:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var i;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(t||(t=e.addSymbolMarket||"Crypto"),t){a.n=1;break}return a.a(2);case 1:return e.loadingHotSymbols=!0,a.p=2,a.n=3,(0,g.z6)({market:t,limit:10});case 3:i=a.v,i&&1===i.code&&i.data?e.hotSymbols=i.data:e.hotSymbols=[],a.n=5;break;case 4:a.p=4,a.v,e.hotSymbols=[];case 5:return a.p=5,e.loadingHotSymbols=!1,a.f(5);case 6:return a.a(2)}},a,null,[[2,4,5,6]])}))()},handleConfirmAddSymbol:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a,i,s,r,n,l,c;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(a="",i="",!t.selectedAddSymbol){e.n=1;break}a=t.selectedAddSymbol.market,i=t.selectedAddSymbol.symbol.toUpperCase(),e.n=4;break;case 1:if(!t.addSymbolKeyword||!t.addSymbolKeyword.trim()){e.n=3;break}if(t.addSymbolMarket){e.n=2;break}return t.$message.warning(t.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),e.a(2);case 2:a=t.addSymbolMarket,i=t.addSymbolKeyword.trim().toUpperCase(),e.n=4;break;case 3:return t.$message.warning(t.$t("dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol")),e.a(2);case 4:return t.addingSymbol=!0,e.p=5,e.n=6,(0,g.dp)({userid:1,market:a,symbol:i});case 6:if(s=e.v,!s||1!==s.code){e.n=8;break}return t.$message.success(t.$t("dashboard.analysis.message.addStockSuccess")),e.n=7,t.loadWatchlist();case 7:r="".concat(a,":").concat(i),t.isEditMode?(t.form.setFieldsValue({symbol:r}),t.handleWatchlistSymbolChange(r)):(t.selectedSymbols.includes(r)||(t.selectedSymbols=[].concat((0,d.A)(t.selectedSymbols),[r])),t.handleMultiSymbolChange(t.selectedSymbols)),t.handleCloseAddSymbolModal(),e.n=9;break;case 8:t.$message.error((null===s||void 0===s?void 0:s.msg)||t.$t("dashboard.analysis.message.addStockFailed"));case 9:e.n=11;break;case 10:e.p=10,c=e.v,l=(null===c||void 0===c||null===(n=c.response)||void 0===n||null===(n=n.data)||void 0===n?void 0:n.msg)||(null===c||void 0===c?void 0:c.message)||t.$t("dashboard.analysis.message.addStockFailed"),t.$message.error(l);case 11:return e.p=11,t.addingSymbol=!1,e.f(11);case 12:return e.a(2)}},e,null,[[5,10,11,12]])}))()},filterWatchlistOption:function(t,e){var a,i=(null===(a=e.componentOptions)||void 0===a||null===(a=a.propsData)||void 0===a?void 0:a.value)||"";return"__add_symbol_option__"===i||String(i).toLowerCase().includes(String(t||"").toLowerCase())},filterWatchlistOptionWithAdd:function(t,e){var a,i=(null===(a=e.componentOptions)||void 0===a||null===(a=a.propsData)||void 0===a?void 0:a.value)||"";return"__add_symbol_option__"===i||String(i).toLowerCase().includes(String(t||"").toLowerCase())},handleMultiSymbolChangeWithAdd:function(t){if(t&&t.includes("__add_symbol_option__"))return this.selectedSymbols=t.filter(function(t){return"__add_symbol_option__"!==t}),this.showAddSymbolModal=!0,void this.loadHotSymbols(this.addSymbolMarket);this.handleMultiSymbolChange(t)},handleStrategyTypeChange:function(t){var e=t.target.value;"single"===e&&(this.crossSectionalSymbols=[])},handleCrossSectionalSymbolChange:function(t){if(t&&t.includes("__add_symbol_option__"))return this.crossSectionalSymbols=t.filter(function(t){return"__add_symbol_option__"!==t}),this.showAddSymbolModal=!0,void this.loadHotSymbols(this.addSymbolMarket);if(this.crossSectionalSymbols=t||[],t&&t.length>0){var e=t[0];if("string"===typeof e&&e.includes(":")){var a=e.indexOf(":"),i=e.slice(0,a);this.selectedMarketCategory=i||"Crypto"}}},getMarketColor:function(t){var e={USStock:"green",Crypto:"purple",Forex:"gold",Futures:"cyan"};return e[t]||"default"},handleWatchlistSymbolChange:function(t){var e=this;if("__add_symbol_option__"===t)return this.$nextTick(function(){e.form.setFieldsValue({symbol:void 0})}),this.showAddSymbolModal=!0,void this.loadHotSymbols(this.addSymbolMarket);if(t&&"string"===typeof t&&t.includes(":")){var a=t.indexOf(":"),i=t.slice(0,a);if(this.selectedMarketCategory=i||"Crypto","Forex"===this.selectedMarketCategory){this.currentBrokerId="mt5";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({forex_broker_id:"mt5"})}catch(r){}}else if("USStock"===this.selectedMarketCategory){this.currentBrokerId="ibkr";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({broker_id:"ibkr"})}catch(r){}}var s=["Crypto","USStock","Forex"].includes(this.selectedMarketCategory);if(!s){this.executionModeUi="signal";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({execution_mode:"signal"})}catch(r){}}this.currentExchangeId="";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({exchange_id:void 0})}catch(r){}}},handleMultiSymbolChange:function(t){if(this.selectedSymbols=t||[],t&&t.length>0){var e=t[0];if("string"===typeof e&&e.includes(":")){var a=e.indexOf(":"),i=e.slice(0,a);this.selectedMarketCategory=i||"Crypto"}}if("Forex"===this.selectedMarketCategory){this.currentBrokerId="mt5";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({forex_broker_id:"mt5"})}catch(r){}}else if("USStock"===this.selectedMarketCategory){this.currentBrokerId="ibkr";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({broker_id:"ibkr"})}catch(r){}}var s=["Crypto","USStock","Forex"].includes(this.selectedMarketCategory);if(!s){this.executionModeUi="signal";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({execution_mode:"signal"})}catch(r){}}this.currentExchangeId="";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({exchange_id:void 0})}catch(r){}},loadExchangeCredentials:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loadingExchangeCredentials=!0,e.p=1,e.n=2,(0,p.IA)({user_id:1});case 2:a=e.v,a&&1===a.code?t.exchangeCredentials=a.data&&a.data.items||[]:(t.exchangeCredentials=[],t.$message.warning((null===a||void 0===a?void 0:a.msg)||t.$t("trading-assistant.messages.loadFailed"))),e.n=4;break;case 3:e.p=3,e.v,t.exchangeCredentials=[],t.$message.warning(t.$t("trading-assistant.exchange.testFailed"));case 4:return e.p=4,t.loadingExchangeCredentials=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},formatCredentialLabel:function(t){if(!t)return"";var e=(t.name||"").trim(),a=t.exchange_id||"",i=t.api_key_hint||"";return e?"".concat(a.toUpperCase()," - ").concat(e," (").concat(i,")"):"".concat(a.toUpperCase()," (").concat(i,")")},isCredentialCompatible:function(t){if(!t||!t.exchange_id)return!0;var e=(t.exchange_id||"").toLowerCase(),a=this.selectedMarketCategory||"Crypto";if("mt5"===e)return"Forex"===a;if("ibkr"===e)return"USStock"===a;var i=["binance","okx","bitget","bybit","coinbaseexchange","kraken","kucoin","gate","bitfinex","deepcoin"];return!i.includes(e)||"Crypto"===a},handleCredentialSelectChange:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var i,s,r;return(0,o.A)().w(function(a){while(1)switch(a.n){case 0:if(t){a.n=1;break}return e.currentExchangeId="",e.connectionTestResult=null,a.a(2);case 1:if(i=e.exchangeCredentials.find(function(e){return String(e.id)===String(t)}),!i){a.n=5;break}if(s=(i.exchange_id||"").toLowerCase(),"mt5"!==s||"Forex"===e.selectedMarketCategory){a.n=2;break}e.$message.error(e.$t("trading-assistant.validation.mt5OnlyForForex"));try{e.form&&e.form.setFieldsValue&&e.form.setFieldsValue({credential_id:void 0})}catch(n){}return e.currentExchangeId="",e.connectionTestResult=null,a.a(2);case 2:if("ibkr"!==s||"USStock"===e.selectedMarketCategory){a.n=3;break}e.$message.error(e.$t("trading-assistant.validation.ibkrOnlyForUSStock"));try{e.form&&e.form.setFieldsValue&&e.form.setFieldsValue({credential_id:void 0})}catch(n){}return e.currentExchangeId="",e.connectionTestResult=null,a.a(2);case 3:if(r=["binance","okx","bitget","bybit","coinbaseexchange","kraken","kucoin","gate","bitfinex"],!r.includes(s)||"Crypto"===e.selectedMarketCategory){a.n=4;break}e.$message.error(e.$t("trading-assistant.validation.cryptoExchangeOnlyForCrypto"));try{e.form&&e.form.setFieldsValue&&e.form.setFieldsValue({credential_id:void 0})}catch(n){}return e.currentExchangeId="",e.connectionTestResult=null,a.a(2);case 4:e.currentExchangeId=i.exchange_id||"";case 5:e.connectionTestResult=null;case 6:return a.a(2)}},a)}))()},onSaveCredentialChange:function(t){var e=!!(t&&t.target&&t.target.checked);this.saveCredentialUi=e;try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({save_credential:e})}catch(a){}},onExecutionModeChange:function(t){var e=t&&t.target?t.target.value:t;this.executionModeUi=e||"signal",this.liveDisclaimerAckUi=!1;try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({live_disclaimer_ack:!1})}catch(a){}if(!this.canUseLiveTrading&&"signal"!==this.executionModeUi){this.executionModeUi="signal";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({execution_mode:"signal"})}catch(a){}}},onLiveDisclaimerAckChange:function(t){var e=!!(t&&t.target&&t.target.checked);this.liveDisclaimerAckUi=e;try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({live_disclaimer_ack:e})}catch(a){}},onNotifyChannelsChange:function(t){this.notifyChannelsUi=Array.isArray(t)?t:[]},formatCurrency:function(t){return null===t||void 0===t?"-":"$"+t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})},formatPnl:function(t){if(null===t||void 0===t)return"-";var e=t>=0?"+":"";return e+"$"+Math.abs(t).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})},formatPnlPercent:function(t){if(null===t||void 0===t)return"-";var e=t>=0?"+":"";return e+Math.abs(t).toFixed(2)+"%"},loadStrategies:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a,i,s;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loading=!0,e.p=1,e.n=2,(0,m.EM)();case 2:a=e.v,1===a.code?(i=a.data.strategies||[],t.strategies=i,t.selectedStrategy&&(s=t.strategies.find(function(e){return e.id===t.selectedStrategy.id}),t.selectedStrategy=s||null)):t.$message.error(a.msg||t.$t("trading-assistant.messages.loadFailed")),e.n=4;break;case 3:e.p=3,e.v,t.$message.error(t.$t("trading-assistant.messages.loadFailed"));case 4:return e.p=4,t.loading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleCreateStrategy:function(){var t=this;this.isEditMode=!1,this.editingStrategy=null,this.strategyType="indicator",this.currentStep=0,this.currentExchangeId="",this.currentBrokerId="ibkr",this.selectedIndicator=null,this.connectionTestResult=null,this.executionModeUi="signal",this.notifyChannelsUi=["browser"],this.saveCredentialUi=!1,this.backtestCollapseKeys=["risk"],this.trailingEnabledUi=!1,this.entryPctMaxUi=100,this.aiFilterEnabledUi=!1,this.selectedMarketCategory="Crypto",this.selectedSymbols=[],this.showAdvancedSettings=!1,this.form.resetFields(),this.form.setFieldsValue({execution_mode:"signal",notify_channels:["browser"],save_credential:!1,live_disclaimer_ack:!1}),this.liveDisclaimerAckUi=!1,this.showFormModal=!0,this.$nextTick(function(){t.loadWatchlist(),t.loadIndicators(),t.loadExchangeCredentials()})},handleEditStrategy:function(t){var e=this;"running"!==t.status?(this.strategyType="indicator",this.isEditMode=!0,this.editingStrategy=t,this.currentStep=0,this.currentExchangeId="",this.selectedIndicator=null,this.connectionTestResult=null,this.form.resetFields(),this.backtestCollapseKeys=["risk"],this.trailingEnabledUi=!1,this.entryPctMaxUi=100,this.aiFilterEnabledUi=!1,this.showFormModal=!0,this.$nextTick((0,l.A)((0,o.A)().m(function a(){return(0,o.A)().w(function(a){while(1)switch(a.n){case 0:return e.loadWatchlist(),e.loadIndicators(),e.loadExchangeCredentials(),a.n=1,e.loadStrategyDataToForm(t);case 1:return a.a(2)}},a)})))):this.$message.warning(this.$t("trading-assistant.messages.runningWarning"))},loadStrategyDataToForm:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var i,s,r,l,d,c,u,m,g,p,h,_,y,f,v,b,S,k,x,C,w,$,A,P,M,F,T,V,I,N,U,E,z,D,R,K,q,L,B,O,H,W;return(0,o.A)().w(function(a){while(1)switch(a.n){case 0:if(e.indicatorsLoaded){a.n=1;break}return a.n=1,e.loadIndicators();case 1:return a.n=2,e.$nextTick();case 2:return e.selectedMarketCategory=t.market_category||"Crypto",c=t.execution_mode||"signal",e.executionModeUi=c,e.liveDisclaimerAckUi="live"===c,u=t.notification_config&&t.notification_config.channels||["browser"],e.notifyChannelsUi=Array.isArray(u)?u:["browser"],m=!1,g=!1,t.trading_config&&(f=t.trading_config||{},v=f.trailing&&"object"===(0,n.A)(f.trailing)?f.trailing:null,m=void 0!==f.trailing_enabled?!!f.trailing_enabled:!(!v||!v.enabled),b=f.enable_ai_filter,g=!0===b||"true"===b||1===b||"1"===b,S=f.scale&&"object"===(0,n.A)(f.scale)?f.scale:null,k=f.position&&"object"===(0,n.A)(f.position)?f.position:null,x=new Set(["risk"]),(f.trend_add_enabled||f.dca_add_enabled||S&&(null!==(p=S.trendAdd)&&void 0!==p&&p.enabled||null!==(h=S.dcaAdd)&&void 0!==h&&h.enabled))&&x.add("scale"),(f.trend_reduce_enabled||f.adverse_reduce_enabled||S&&(null!==(_=S.trendReduce)&&void 0!==_&&_.enabled||null!==(y=S.adverseReduce)&&void 0!==y&&y.enabled))&&x.add("reduce"),(void 0!==f.entry_pct||k&&void 0!==k.entryPct)&&x.add("position"),e.backtestCollapseKeys=Array.from(x)),e.trailingEnabledUi=m,e.aiFilterEnabledUi=g,a.n=3,e.$nextTick();case 3:return e.form.setFieldsValue({enable_ai_filter:g}),a.n=4,e.$nextTick();case 4:if(e.form.setFieldsValue({execution_mode:e.executionModeUi,live_disclaimer_ack:e.liveDisclaimerAckUi,notify_channels:e.notifyChannelsUi,notify_email:(null===(i=t.notification_config)||void 0===i||null===(i=i.targets)||void 0===i?void 0:i.email)||"",notify_phone:(null===(s=t.notification_config)||void 0===s||null===(s=s.targets)||void 0===s?void 0:s.phone)||"",notify_telegram:(null===(r=t.notification_config)||void 0===r||null===(r=r.targets)||void 0===r?void 0:r.telegram)||"",notify_discord:(null===(l=t.notification_config)||void 0===l||null===(l=l.targets)||void 0===l?void 0:l.discord)||"",notify_webhook:(null===(d=t.notification_config)||void 0===d||null===(d=d.targets)||void 0===d?void 0:d.webhook)||""}),!t.indicator_config||!t.indicator_config.indicator_id){a.n=7;break}if(C=t.indicator_config.indicator_id,w=e.availableIndicators.find(function(t){return String(t.id)===String(C)}),!w){a.n=6;break}return A=String(w.id),e.form.setFieldsValue({indicator_id:A}),a.n=5,e.handleIndicatorChange(A);case 5:P=null===($=t.trading_config)||void 0===$?void 0:$.indicator_params,P&&"object"===(0,n.A)(P)&&Object.keys(P).forEach(function(t){t in e.indicatorParamValues&&e.$set(e.indicatorParamValues,t,P[t])}),a.n=7;break;case 6:e.form.setFieldsValue({indicator_id:String(C)});case 7:if(!t.exchange_config){a.n=11;break}if(M=t.exchange_config.exchange_id||"",F="live"===e.executionModeUi,T=["Crypto","USStock","Forex"].includes(e.selectedMarketCategory),V="USStock"===e.selectedMarketCategory,I="Forex"===e.selectedMarketCategory,!F||!T){a.n=10;break}if(!V){a.n=8;break}e.currentBrokerId=M||"ibkr",e.form.setFieldsValue({broker_id:M||"ibkr",ibkr_host:t.exchange_config.ibkr_host||"127.0.0.1",ibkr_port:t.exchange_config.ibkr_port||7497,ibkr_client_id:t.exchange_config.ibkr_client_id||1,ibkr_account:t.exchange_config.ibkr_account||""}),a.n=10;break;case 8:if(!I){a.n=9;break}e.currentBrokerId=M||"mt5",e.form.setFieldsValue({forex_broker_id:M||"mt5",mt5_server:t.exchange_config.mt5_server||"",mt5_login:t.exchange_config.mt5_login||"",mt5_password:t.exchange_config.mt5_password||"",mt5_terminal_path:t.exchange_config.mt5_terminal_path||""}),a.n=10;break;case 9:if(e.currentExchangeId=M||t.exchange_config.exchange_id||"",N=t.exchange_config.credential_id,!N){a.n=10;break}return e.form.setFieldsValue({credential_id:N}),a.n=10,e.handleCredentialSelectChange(N);case 10:V||I?e.currentBrokerId=M||(I?"mt5":"ibkr"):e.currentExchangeId=M;case 11:if(t.trading_config){if(U=t.trading_config||{},E=U.trailing&&"object"===(0,n.A)(U.trailing)?U.trailing:null,z=U.scale&&"object"===(0,n.A)(U.scale)?U.scale:null,D=U.position&&"object"===(0,n.A)(U.position)?U.position:null,R=U.strategy_type||t.strategy_type||"single","cross_sectional"===R)if(e.form.setFieldsValue({cs_strategy_type:"cross_sectional",portfolio_size:U.portfolio_size||10,long_ratio:U.long_ratio||.5,rebalance_frequency:U.rebalance_frequency||"daily"}),U.symbol_list&&Array.isArray(U.symbol_list))e.crossSectionalSymbols=U.symbol_list;else if(t.symbol_list)try{K="string"===typeof t.symbol_list?JSON.parse(t.symbol_list):t.symbol_list,Array.isArray(K)&&(e.crossSectionalSymbols=K)}catch(o){e.crossSectionalSymbols=[]}else e.crossSectionalSymbols=[];else e.form.setFieldsValue({cs_strategy_type:"single"}),e.crossSectionalSymbols=[];q=z&&z.trendAdd?z.trendAdd:null,L=z&&z.dcaAdd?z.dcaAdd:null,B=z&&z.trendReduce?z.trendReduce:null,O=z&&z.adverseReduce?z.adverseReduce:null,H=U.symbol,W="string"===typeof H&&H.includes(":")?H:"".concat(e.selectedMarketCategory,":").concat(H),e.form.setFieldsValue({strategy_name:t.strategy_name,symbol:W,initial_capital:U.initial_capital,leverage:U.leverage,trade_direction:U.trade_direction||"long",timeframe:U.timeframe||"1H",market_type:"futures"===U.market_type?"swap":U.market_type||"swap",take_profit_pct:U.take_profit_pct||0,stop_loss_pct:U.stop_loss_pct||0,trailing_enabled:m,trailing_stop_pct:void 0!==U.trailing_stop_pct?U.trailing_stop_pct||0:E&&E.pct||0,trailing_activation_pct:void 0!==U.trailing_activation_pct?U.trailing_activation_pct||0:E&&E.activationPct||0,trend_add_enabled:void 0!==U.trend_add_enabled?!!U.trend_add_enabled:!(!q||!q.enabled),trend_add_step_pct:void 0!==U.trend_add_step_pct?U.trend_add_step_pct||0:q&&q.stepPct||0,trend_add_size_pct:void 0!==U.trend_add_size_pct?U.trend_add_size_pct||0:q&&q.sizePct||0,trend_add_max_times:void 0!==U.trend_add_max_times?U.trend_add_max_times||0:q&&q.maxTimes||0,dca_add_enabled:void 0!==U.dca_add_enabled?!!U.dca_add_enabled:!(!L||!L.enabled),dca_add_step_pct:void 0!==U.dca_add_step_pct?U.dca_add_step_pct||0:L&&L.stepPct||0,dca_add_size_pct:void 0!==U.dca_add_size_pct?U.dca_add_size_pct||0:L&&L.sizePct||0,dca_add_max_times:void 0!==U.dca_add_max_times?U.dca_add_max_times||0:L&&L.maxTimes||0,trend_reduce_enabled:void 0!==U.trend_reduce_enabled?!!U.trend_reduce_enabled:!(!B||!B.enabled),trend_reduce_step_pct:void 0!==U.trend_reduce_step_pct?U.trend_reduce_step_pct||0:B&&B.stepPct||0,trend_reduce_size_pct:void 0!==U.trend_reduce_size_pct?U.trend_reduce_size_pct||0:B&&B.sizePct||0,trend_reduce_max_times:void 0!==U.trend_reduce_max_times?U.trend_reduce_max_times||0:B&&B.maxTimes||0,adverse_reduce_enabled:void 0!==U.adverse_reduce_enabled?!!U.adverse_reduce_enabled:!(!O||!O.enabled),adverse_reduce_step_pct:void 0!==U.adverse_reduce_step_pct?U.adverse_reduce_step_pct||0:O&&O.stepPct||0,adverse_reduce_size_pct:void 0!==U.adverse_reduce_size_pct?U.adverse_reduce_size_pct||0:O&&O.sizePct||0,adverse_reduce_max_times:void 0!==U.adverse_reduce_max_times?U.adverse_reduce_max_times||0:O&&O.maxTimes||0,entry_pct:0===U.entry_pct||U.entry_pct?U.entry_pct:D&&D.entryPct?D.entryPct:100,enable_ai_filter:g}),e.$nextTick(function(){e.recalcEntryPctMaxUi(),e.normalizeEntryPct()})}case 12:return a.a(2)}},a)}))()},handleSelectStrategy:function(t){this.selectedStrategy=t,this.currentEquity=null,this.loadStrategyDetails(),this.startEquityPolling()},loadStrategyDetails:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a,i,s,n,l,d,u,g,p,h,_,y,f;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.selectedStrategy){e.n=1;break}return e.a(2,Promise.resolve());case 1:return e.p=1,e.n=2,Promise.all([(0,m.Yx)(t.selectedStrategy.id),(0,m.oK)(t.selectedStrategy.id)]);case 2:if(a=e.v,i=(0,r.A)(a,2),s=i[0],n=i[1],l=null,1===s.code&&s.data&&(Array.isArray(s.data)&&s.data.length>0?(d=s.data[s.data.length-1],l=d.equity):(g=(null===(u=t.selectedStrategy.trading_config)||void 0===u?void 0:u.initial_capital)||t.selectedStrategy.initial_capital,l=g||null)),p=0,1===n.code&&n.data){h=n.data.positions||n.data.items||[],_=(0,c.A)(h);try{for(_.s();!(y=_.n()).done;)f=y.value,p+=parseFloat(f.unrealized_pnl||f.unrealizedPnl||0)}catch(o){_.e(o)}finally{_.f()}}t.currentEquity=null!==l?l+p:null,e.n=4;break;case 3:e.p=3,e.v;case 4:return e.a(2)}},e,null,[[1,3]])}))()},startEquityPolling:function(){var t=this;this.stopEquityPolling(),this.selectedStrategy&&(this.loadStrategyDetails(),this.equityPollingTimer=setInterval(function(){t.loadStrategyDetails()},1e4))},stopEquityPolling:function(){this.equityPollingTimer&&(clearInterval(this.equityPollingTimer),this.equityPollingTimer=null)},handleCloseModal:function(){this.showFormModal=!1,this.editingStrategy=null,this.isEditMode=!1,this.strategyType="indicator",this.currentStep=0,this.currentExchangeId="",this.selectedIndicator=null,this.connectionTestResult=null,this.indicatorsLoaded=!1,this.availableIndicators=[],this.backtestCollapseKeys=["risk"],this.trailingEnabledUi=!1,this.entryPctMaxUi=100,this.aiFilterEnabledUi=!1,this.showAdvancedSettings=!1,this.executionModeUi="signal",this.liveDisclaimerAckUi=!1,this.form.resetFields()},handleRefresh:function(){this.loadStrategies(),this.showFormModal=!1},handleMenuClick:function(t,e){switch(t){case"start":this.handleStartStrategy(e.id);break;case"stop":this.handleStopStrategy(e.id);break;case"edit":this.handleEditStrategy(e);break;case"delete":this.handleDeleteStrategy(e);break}},toggleGroup:function(t){this.$set(this.collapsedGroups,t,!this.collapsedGroups[t])},handleGroupMenuClick:function(t,e){var a=this;return(0,l.A)((0,o.A)().m(function i(){var s,r;return(0,o.A)().w(function(i){while(1)switch(i.n){case 0:s=e.strategies.map(function(t){return t.id}),r=t,i.n="startAll"===r?1:"stopAll"===r?3:"deleteAll"===r?5:7;break;case 1:return i.n=2,a.handleBatchStartStrategies(s,e.baseName);case 2:return i.a(3,7);case 3:return i.n=4,a.handleBatchStopStrategies(s,e.baseName);case 4:return i.a(3,7);case 5:return i.n=6,a.handleBatchDeleteStrategies(s,e.baseName);case 6:return i.a(3,7);case 7:return i.a(2)}},i)}))()},handleBatchStartStrategies:function(t,e){var a=this;return(0,l.A)((0,o.A)().m(function e(){var i,s,r;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,m.UH)({strategy_ids:t});case 1:i=e.v,1===i.code?(r=(null===(s=i.data)||void 0===s||null===(s=s.success_ids)||void 0===s?void 0:s.length)||t.length,a.$message.success(a.$t("trading-assistant.messages.batchStartSuccess",{count:r})),a.loadStrategies()):a.$message.error(i.msg||a.$t("trading-assistant.messages.batchStartFailed")),e.n=3;break;case 2:e.p=2,e.v,a.$message.error(a.$t("trading-assistant.messages.batchStartFailed"));case 3:return e.a(2)}},e,null,[[0,2]])}))()},handleBatchStopStrategies:function(t,e){var a=this;return(0,l.A)((0,o.A)().m(function e(){var i,s,r;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,m.GF)({strategy_ids:t});case 1:i=e.v,1===i.code?(r=(null===(s=i.data)||void 0===s||null===(s=s.success_ids)||void 0===s?void 0:s.length)||t.length,a.$message.success(a.$t("trading-assistant.messages.batchStopSuccess",{count:r})),a.loadStrategies()):a.$message.error(i.msg||a.$t("trading-assistant.messages.batchStopFailed")),e.n=3;break;case 2:e.p=2,e.v,a.$message.error(a.$t("trading-assistant.messages.batchStopFailed"));case 3:return e.a(2)}},e,null,[[0,2]])}))()},handleBatchDeleteStrategies:function(t,e){var a=this;return(0,l.A)((0,o.A)().m(function i(){var s;return(0,o.A)().w(function(i){while(1)switch(i.n){case 0:s=a.$t("trading-assistant.messages.batchDeleteConfirm",{count:t.length,name:e}),a.$confirm({title:a.$t("trading-assistant.deleteAll"),content:s,okText:a.$t("trading-assistant.deleteAll"),okType:"danger",cancelText:a.$t("trading-assistant.form.cancel"),onOk:function(){var e=(0,l.A)((0,o.A)().m(function e(){var i,s,r;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,m.xQ)({strategy_ids:t});case 1:i=e.v,1===i.code?(r=(null===(s=i.data)||void 0===s||null===(s=s.success_ids)||void 0===s?void 0:s.length)||t.length,a.$message.success(a.$t("trading-assistant.messages.batchDeleteSuccess",{count:r})),a.selectedStrategy&&t.includes(a.selectedStrategy.id)&&(a.selectedStrategy=null,a.stopEquityPolling()),a.loadStrategies()):a.$message.error(i.msg||a.$t("trading-assistant.messages.batchDeleteFailed")),e.n=3;break;case 2:e.p=2,e.v,a.$message.error(a.$t("trading-assistant.messages.batchDeleteFailed"));case 3:return e.a(2)}},e,null,[[0,2]])}));function i(){return e.apply(this,arguments)}return i}()});case 1:return i.a(2)}},i)}))()},handleStartStrategy:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var i;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,m.mV)(t);case 1:i=a.v,1===i.code?(e.$message.success(e.$t("trading-assistant.messages.startSuccess")),e.loadStrategies(),e.selectedStrategy&&e.selectedStrategy.id===t&&(e.selectedStrategy.status="running")):e.$message.error(i.msg||e.$t("trading-assistant.messages.startFailed")),a.n=3;break;case 2:a.p=2,a.v,e.$message.error(e.$t("trading-assistant.messages.startFailed"));case 3:return a.a(2)}},a,null,[[0,2]])}))()},handleStopStrategy:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var i;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,m.Ke)(t);case 1:i=a.v,1===i.code?(e.$message.success(e.$t("trading-assistant.messages.stopSuccess")),e.loadStrategies(),e.selectedStrategy&&e.selectedStrategy.id===t&&(e.selectedStrategy.status="stopped")):e.$message.error(i.msg||e.$t("trading-assistant.messages.stopFailed")),a.n=3;break;case 2:a.p=2,a.v,e.$message.error(e.$t("trading-assistant.messages.stopFailed"));case 3:return a.a(2)}},a,null,[[0,2]])}))()},handleDeleteStrategy:function(t){var e=this,a=this.$t("trading-assistant.messages.deleteConfirmWithName",{name:t.strategy_name});this.$confirm({title:this.$t("trading-assistant.deleteStrategy"),content:a,okText:this.$t("trading-assistant.deleteStrategy"),okType:"danger",cancelText:this.$t("trading-assistant.form.cancel"),onOk:function(){var a=(0,l.A)((0,o.A)().m(function a(){var i;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,m.v_)(t.id);case 1:i=a.v,1===i.code?(e.$message.success(e.$t("trading-assistant.messages.deleteSuccess")),e.selectedStrategy&&e.selectedStrategy.id===t.id&&(e.selectedStrategy=null,e.stopEquityPolling()),e.loadStrategies()):e.$message.error(i.msg||e.$t("trading-assistant.messages.deleteFailed")),a.n=3;break;case 2:a.p=2,a.v,e.$message.error(e.$t("trading-assistant.messages.deleteFailed"));case 3:return a.a(2)}},a,null,[[0,2]])}));function i(){return a.apply(this,arguments)}return i}()})},getStatusColor:function(t){var e={running:"green",stopped:"default",error:"red"};return e[t]||"default"},getStatusText:function(t){return this.$t("trading-assistant.status.".concat(t))||t},getStrategyTypeText:function(t){return this.$t("trading-assistant.strategyType.".concat(t))||t},getTradeDirectionText:function(t){if(!t)return"";var e={long:this.$t("trading-assistant.form.tradeDirectionLong")||"做多",short:this.$t("trading-assistant.form.tradeDirectionShort")||"做空",both:this.$t("trading-assistant.form.tradeDirectionBoth")||"双向"};return e[t]||t},handleIndicatorSelectFocus:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){return(0,o.A)().w(function(e){while(1)switch(e.n){case 0:if(t.indicatorsLoaded||t.loadingIndicators){e.n=1;break}return e.n=1,t.loadIndicators();case 1:return e.a(2)}},e)}))()},loadIndicators:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a,i,s,r;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!t.loadingIndicators){e.n=1;break}return e.a(2,new Promise(function(e){var a=setInterval(function(){t.loadingIndicators||(clearInterval(a),e())},100)}));case 1:if(!t.indicatorsLoaded){e.n=2;break}return e.a(2,Promise.resolve());case 2:return a=t.$store.getters.userInfo||{},i=a.id||1,t.loadingIndicators=!0,e.p=3,e.n=4,(0,y.Ay)({url:"/api/indicator/getIndicators",method:"get",params:{userid:i}});case 4:s=e.v,1===s.code&&s.data?(r=s.data.map(function(t){return{id:t.id,name:t.name,description:t.description,type:t.indicator_type||t.indicatorType||"python",code:t.code,is_buy:t.is_buy,source:1===t.is_buy?"bought":"custom"}}),t.availableIndicators=r,t.indicatorsLoaded=!0):(t.availableIndicators=[],t.$message.warning(s.msg||t.$t("trading-assistant.messages.loadIndicatorsFailed"))),e.n=6;break;case 5:e.p=5,e.v,t.availableIndicators=[],t.$message.warning(t.$t("trading-assistant.messages.loadIndicatorsFailed"));case 6:return e.p=6,t.loadingIndicators=!1,e.f(6);case 7:return e.a(2)}},e,null,[[3,5,6,7]])}))()},handleIndicatorChange:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var i,s,r;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(i=String(t),e.selectedIndicator=e.availableIndicators.find(function(t){return String(t.id)===i}),e.indicatorParams=[],e.indicatorParamValues={},!t){a.n=4;break}return a.p=1,a.n=2,e.$http.get("/api/indicator/getIndicatorParams",{params:{indicator_id:t}});case 2:s=a.v,s&&1===s.code&&Array.isArray(s.data)&&(e.indicatorParams=s.data,r={},s.data.forEach(function(t){r[t.name]=t.default}),e.indicatorParamValues=r),a.n=4;break;case 3:a.p=3,a.v;case 4:return a.a(2)}},a,null,[[1,3]])}))()},handleMarketTypeChange:function(t){var e=t.target.value;"spot"===e&&this.form.setFieldsValue({trade_direction:"long",leverage:1})},recalcEntryPctMaxUi:function(){if(this.form){var t=!!this.form.getFieldValue("trend_add_enabled"),e=!!this.form.getFieldValue("dca_add_enabled"),a=Number(this.form.getFieldValue("trend_add_max_times")||0),i=Number(this.form.getFieldValue("dca_add_max_times")||0),s=Number(this.form.getFieldValue("trend_add_size_pct")||0),r=Number(this.form.getFieldValue("dca_add_size_pct")||0),n=(t?a*s:0)+(e?i*r:0),o=Math.max(0,Math.min(100,100-n));this.entryPctMaxUi=o}else this.entryPctMaxUi=100},normalizeEntryPct:function(){if(this.form){var t=Number(this.form.getFieldValue("entry_pct")||0),e=Number(this.entryPctMaxUi||100);t>e&&this.form.setFieldsValue({entry_pct:e})}},onTrendAddToggle:function(t){var e=this;this.form&&(t&&this.form.setFieldsValue({dca_add_enabled:!1}),this.$nextTick(function(){e.recalcEntryPctMaxUi(),e.normalizeEntryPct()}))},onDcaAddToggle:function(t){var e=this;this.form&&(t&&this.form.setFieldsValue({trend_add_enabled:!1}),this.$nextTick(function(){e.recalcEntryPctMaxUi(),e.normalizeEntryPct()}))},onScaleParamsChange:function(){var t=this;this.$nextTick(function(){t.recalcEntryPctMaxUi(),t.normalizeEntryPct()})},onEntryPctChange:function(){var t=this;this.$nextTick(function(){return t.normalizeEntryPct()})},onTrailingToggle:function(t){this.form&&(this.trailingEnabledUi=!!t,t||this.form.setFieldsValue({trailing_stop_pct:0,trailing_activation_pct:0}))},onAiFilterToggle:function(t){this.aiFilterEnabledUi=!!t;try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({enable_ai_filter:!!t})}catch(e){}},filterIndicatorOption:function(t,e){var a=e.componentOptions.children[0].children[0].text;return a.toLowerCase().indexOf(t.toLowerCase())>=0},filterSymbolOption:function(t,e){return e.componentOptions.children[0].text.toLowerCase().indexOf(t.toLowerCase())>=0},getIndicatorTypeColor:function(t){var e={trend:"blue",momentum:"green",volatility:"orange",volume:"purple",custom:"default"};return e[t]||"default"},getIndicatorTypeName:function(t){return this.$t("trading-assistant.indicatorType.".concat(t))||t},getExchangeName:function(t){if(t.labelKey){var e="trading-assistant.exchangeNames.".concat(t.labelKey),a=this.$t(e);return a===e?t.value.charAt(0).toUpperCase()+t.value.slice(1):a}return t.label||t.value},getExchangeDisplayName:function(t){if(!t)return"";var e=this.exchangeOptions.find(function(e){return e.value===t});return e?this.getExchangeName(e):t.charAt(0).toUpperCase()+t.slice(1)},getExchangeTagColor:function(t){var e={binance:"gold",okx:"blue",coinbaseexchange:"cyan",kraken:"purple",bitfinex:"geekblue",huobi:"orange",gate:"green",mexc:"lime",kucoin:"volcano",bybit:"red",bitget:"magenta",bitmex:"red",deribit:"blue",phemex:"cyan",bitmart:"geekblue",bitstamp:"purple",bittrex:"orange",poloniex:"green",gemini:"lime",cryptocom:"volcano",blockchaincom:"magenta",bitflyer:"red",upbit:"blue",bithumb:"cyan",coinone:"purple",zb:"geekblue",lbank:"orange",bibox:"green",bigone:"lime",bitrue:"volcano",coinex:"magenta",ftx:"red",ftxus:"blue",binanceus:"gold",binancecoinm:"gold",binanceusdm:"gold",ibkr:"green"};return e[t]||"default"},handleApiConfigChange:function(){this.connectionTestResult=null},getModalPopupContainer:function(){return window.document.body},handleBrokerSelectChange:function(t){this.currentBrokerId=t||"ibkr",this.connectionTestResult=null},handleForexBrokerSelectChange:function(t){this.currentBrokerId=t||"mt5",this.connectionTestResult=null},handleExchangeSelectChange:function(t){var e=this;this.currentExchangeId=t||"",this.connectionTestResult=null,this.suppressApiClearOnce?this.suppressApiClearOnce=!1:this.$nextTick(function(){var t={api_key:void 0,secret_key:void 0,passphrase:void 0,enable_demo_trading:!1};setTimeout(function(){e.form.setFieldsValue(t)},100)})},getPlaceholder:function(t){var e={okx:{api_key:"请输入API Key",secret_key:"请输入Secret Key",passphrase:"请输入Passphrase(创建API时设置)"},okex:{api_key:"请输入API Key",secret_key:"请输入Secret Key",passphrase:"请输入Passphrase(创建API时设置)"},binance:{api_key:"请输入API Key",secret_key:"请输入Secret Key"},coinbaseexchange:{api_key:"请输入API Key(或Key Name)",secret_key:"请输入API Secret(或Private Key)",passphrase:"请输入Passphrase(Legacy Pro API需要)"},kucoin:{api_key:"请输入API Key",secret_key:"请输入Secret Key",passphrase:"请输入Passphrase"},gate:{api_key:"请输入API Key",secret_key:"请输入Secret Key"},mexc:{api_key:"请输入Access Key",secret_key:"请输入Secret Key"},kraken:{api_key:"请输入API Key",secret_key:"请输入Secret Key"},bitfinex:{api_key:"请输入API Key",secret_key:"请输入Secret Key"},bybit:{api_key:"请输入API Key",secret_key:"请输入Secret Key"},bitget:{api_key:"请输入API Key",secret_key:"请输入Secret Key",passphrase:"请输入Passphrase(Legacy Pro API需要)"}},a=e[this.currentExchangeId]||{};if(a[t])return a[t];var i={api_key:this.$t("trading-assistant.placeholders.inputApiKey"),secret_key:this.$t("trading-assistant.placeholders.inputSecretKey"),passphrase:this.$t("trading-assistant.placeholders.inputPassphrase")};return i[t]||this.$t("trading-assistant.placeholders.inputApiKey")},handleNext:function(){var t=this;if(0===this.currentStep){var e=["indicator_id","strategy_name"];(this.isAdvancedMode||this.editingStrategy)&&e.push("initial_capital","market_type","leverage","trade_direction","timeframe"),this.isEditMode&&e.push("symbol"),this.form.validateFields(e,function(e,a){if(!e){if(!t.isEditMode){var i=t.form.getFieldValue("cs_strategy_type")||"single";if("cross_sectional"===i){if(!t.crossSectionalSymbols||0===t.crossSectionalSymbols.length)return void t.$message.warning(t.$t("trading-assistant.validation.symbolsRequired"))}else if(!t.selectedSymbols||0===t.selectedSymbols.length)return void t.$message.warning(t.$t("trading-assistant.validation.symbolsRequired"))}try{var s=a&&a.market_type||t.form.getFieldValue("market_type");"spot"===s&&t.form.setFieldsValue({leverage:1,trade_direction:"long"})}catch(r){}t.backtestCollapseKeys=["risk"];try{t.trailingEnabledUi=!!t.form.getFieldValue("trailing_enabled")}catch(r){t.trailingEnabledUi=!1}t.$nextTick(function(){t.recalcEntryPctMaxUi(),t.normalizeEntryPct()}),t.isSimpleMode&&!t.editingStrategy?t.currentStep=2:t.currentStep++}})}else if(1===this.currentStep){try{var a=this.form.getFieldValue("execution_mode")||"signal";this.executionModeUi=a;var i=this.form.getFieldValue("notify_channels")||["browser"];this.notifyChannelsUi=Array.isArray(i)?i:["browser"]}catch(s){}this.currentStep++}},handlePrev:function(){this.currentStep>0&&(this.isSimpleMode&&!this.editingStrategy&&2===this.currentStep?this.currentStep=0:this.currentStep--)},handleSubmit:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){return(0,o.A)().w(function(e){while(1)switch(e.n){case 0:t.form.validateFields(function(){var e=(0,l.A)((0,o.A)().m(function e(a,i){var s,r,n,l,d,c,u,g,p,h,_,y,f,v,b,S,k;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(a){e.n=14;break}if(e.p=1,t.saving=!0,s=t.canUseLiveTrading&&"live"===i.execution_mode,!s||i.live_disclaimer_ack){e.n=2;break}return t.$message.warning(t.$t("trading-assistant.liveDisclaimer.required")),t.saving=!1,e.a(2);case 2:if(!s){e.n=3;break}if(r=i.credential_id,r){e.n=3;break}return t.$message.warning(t.$t("trading-assistant.validation.credentialRequired")),t.saving=!1,e.a(2);case 3:if(n={channels:i.notify_channels||[],targets:{email:t.userNotificationSettings.email||"",phone:t.userNotificationSettings.phone||"",telegram:t.userNotificationSettings.telegram_chat_id||"",telegram_bot_token:t.userNotificationSettings.telegram_bot_token||"",discord:t.userNotificationSettings.discord_webhook||"",webhook:t.userNotificationSettings.webhook_url||"",webhook_token:t.userNotificationSettings.webhook_token||""}},n.channels&&0!==n.channels.length){e.n=4;break}return t.$message.warning(t.$t("trading-assistant.validation.notifyChannelRequired")),t.saving=!1,e.a(2);case 4:if(l=String(i.indicator_id),d=t.availableIndicators.find(function(t){return String(t.id)===l}),d){e.n=5;break}return t.$message.error(t.$t("trading-assistant.validation.indicatorRequired")),t.saving=!1,e.a(2);case 5:if(c=!!t.aiFilterEnabledUi,u="futures"===i.market_type?"swap":i.market_type||"swap",g=i.leverage||1,p=i.trade_direction||"long","spot"===u?(g=1,p="long",t.$message.info(t.$t("trading-assistant.messages.spotLimitations"))):(g<1&&(g=1),g>125&&(g=125)),h={strategy_name:i.strategy_name,market_category:t.selectedMarketCategory||"Crypto",execution_mode:i.execution_mode||"signal",notification_config:n,indicator_config:{indicator_id:d.id,indicator_name:d.name,indicator_code:d.code||""},exchange_config:s?t.isIBKRMarket?{exchange_id:i.broker_id||t.currentBrokerId||"ibkr",ibkr_host:i.ibkr_host||"127.0.0.1",ibkr_port:i.ibkr_port||7497,ibkr_client_id:i.ibkr_client_id||1,ibkr_account:i.ibkr_account||""}:t.isMT5Market?{exchange_id:i.forex_broker_id||t.currentBrokerId||"mt5",mt5_server:i.mt5_server||"",mt5_login:i.mt5_login||"",mt5_password:i.mt5_password||"",mt5_terminal_path:i.mt5_terminal_path||""}:{credential_id:i.credential_id,exchange_id:t.currentExchangeId||void 0}:void 0,trading_config:{initial_capital:i.initial_capital,leverage:g,trade_direction:p,timeframe:i.timeframe,market_type:u,margin_mode:"cross",signal_mode:"confirmed",take_profit_pct:i.take_profit_pct||0,stop_loss_pct:i.stop_loss_pct||0,trailing_enabled:!!i.trailing_enabled,trailing_stop_pct:i.trailing_stop_pct||0,trailing_activation_pct:i.trailing_activation_pct||0,trend_add_enabled:!!i.trend_add_enabled,trend_add_step_pct:i.trend_add_step_pct||0,trend_add_size_pct:i.trend_add_size_pct||0,trend_add_max_times:i.trend_add_max_times||0,dca_add_enabled:!!i.dca_add_enabled,dca_add_step_pct:i.dca_add_step_pct||0,dca_add_size_pct:i.dca_add_size_pct||0,dca_add_max_times:i.dca_add_max_times||0,trend_reduce_enabled:!!i.trend_reduce_enabled,trend_reduce_step_pct:i.trend_reduce_step_pct||0,trend_reduce_size_pct:i.trend_reduce_size_pct||0,trend_reduce_max_times:i.trend_reduce_max_times||0,adverse_reduce_enabled:!!i.adverse_reduce_enabled,adverse_reduce_step_pct:i.adverse_reduce_step_pct||0,adverse_reduce_size_pct:i.adverse_reduce_size_pct||0,adverse_reduce_max_times:i.adverse_reduce_max_times||0,entry_pct:0===i.entry_pct||i.entry_pct?i.entry_pct:100,commission:i.commission||0,slippage:i.slippage||0,enable_ai_filter:c,indicator_params:t.indicatorParamValues,strategy_type:i.cs_strategy_type||"single",symbol_list:"cross_sectional"===i.cs_strategy_type?t.crossSectionalSymbols:void 0,portfolio_size:"cross_sectional"===i.cs_strategy_type?i.portfolio_size||10:void 0,long_ratio:"cross_sectional"===i.cs_strategy_type?i.long_ratio||.5:void 0,rebalance_frequency:"cross_sectional"===i.cs_strategy_type?i.rebalance_frequency||"daily":void 0}},!t.editingStrategy){e.n=7;break}return y=i.symbol,"string"===typeof y&&y.includes(":")&&(f=y.indexOf(":"),h.market_category=y.slice(0,f)||h.market_category,y=y.slice(f+1)),h.trading_config.symbol=y,e.n=6,(0,m.P7)(t.editingStrategy.id,h);case 6:_=e.v,e.n=11;break;case 7:if(h.user_id=1,h.strategy_type="IndicatorStrategy","cross_sectional"!==i.cs_strategy_type){e.n=9;break}return h.strategy_type="IndicatorStrategy",h.trading_config.symbol=null,e.n=8,(0,m.WM)(h);case 8:_=e.v,e.n=11;break;case 9:return h.symbols=t.selectedSymbols,e.n=10,(0,m.Ox)(h);case 10:_=e.v;case 11:1===_.code?(t.isEditMode?t.$message.success(t.$t("trading-assistant.messages.updateSuccess")):(b=i.cs_strategy_type||"single",S="cross_sectional"===b?t.crossSectionalSymbols.length:t.selectedSymbols.length,k=(null===(v=_.data)||void 0===v?void 0:v.total_created)||S,t.$message.success(t.$t("trading-assistant.messages.batchCreateSuccess",{count:k}))),t.handleRefresh()):t.$message.error(_.msg||(t.isEditMode?t.$t("trading-assistant.messages.updateFailed"):t.$t("trading-assistant.messages.createFailed"))),e.n=13;break;case 12:e.p=12,e.v,t.$message.error(t.isEditMode?t.$t("trading-assistant.messages.updateFailed"):t.$t("trading-assistant.messages.createFailed"));case 13:return e.p=13,t.saving=!1,e.f(13);case 14:return e.a(2)}},e,null,[[1,12,13,14]])}));return function(t,a){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},getFormValues:function(){var t=this;return new Promise(function(e,a){t.form.validateFields(function(t,i){t?a(t):e(i)})})},getDropdownContainer:function(t){return document.body}}},E=U,z=(0,k.A)(E,i,s,!1,null,"13cac835",null),D=z.exports},72694:function(t,e,a){a.d(e,{IA:function(){return n},PR:function(){return o},kI:function(){return l}});var i=a(57888),s=a(76471),r={list:"/api/credentials/list",get:"/api/credentials/get",create:"/api/credentials/create",delete:"/api/credentials/delete"};function n(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,s.Ay)({url:r.list,method:"get",params:t})}function o(t){return(0,s.Ay)({url:r.create,method:"post",data:t})}function l(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(0,s.Ay)({url:r.delete,method:"delete",params:(0,i.A)({id:t},e)})}},64118:function(t,e,a){a.d(e,{Qo:function(){return r},_3:function(){return c},dp:function(){return n},iO:function(){return d},mk:function(){return o},ms:function(){return l},z6:function(){return u}});var i=a(76471),s={GetWatchlist:"/api/market/watchlist/get",AddWatchlist:"/api/market/watchlist/add",RemoveWatchlist:"/api/market/watchlist/remove",GetWatchlistPrices:"/api/market/watchlist/prices",MultiAnalysis:"/api/analysis/multiAnalysis",CreateAnalysisTask:"/api/analysis/createTask",GetAnalysisTaskStatus:"/api/analysis/getTaskStatus",GetAnalysisHistoryList:"/api/analysis/getHistoryList",DeleteAnalysisTask:"/api/analysis/deleteTask",ReflectAnalysis:"/api/analysis/reflect",ChatMessage:"/api/ai/chat/message",GetChatHistory:"/api/ai/chat/history",SaveChatHistory:"/api/ai/chat/history/save",GetConfig:"/api/market/config",GetMenuFooterConfig:"/api/market/menuFooterConfig",GetMarketTypes:"/api/market/types",SearchSymbols:"/api/market/symbols/search",GetHotSymbols:"/api/market/symbols/hot"};function r(t){return(0,i.Ay)({url:s.GetWatchlist,method:"get",params:t})}function n(t){return(0,i.Ay)({url:s.AddWatchlist,method:"post",data:t})}function o(t){return(0,i.Ay)({url:s.RemoveWatchlist,method:"post",data:t})}function l(t){return(0,i.Ay)({url:s.GetWatchlistPrices,method:"get",params:{watchlist:JSON.stringify(t.watchlist||[])}})}function d(){return(0,i.Ay)({url:s.GetMarketTypes,method:"get"})}function c(t){return(0,i.Ay)({url:s.SearchSymbols,method:"get",params:t})}function u(t){return(0,i.Ay)({url:s.GetHotSymbols,method:"get",params:t})}},27617:function(t,e,a){a.d(e,{DK:function(){return f},E$:function(){return c},Gl:function(){return g},O0:function(){return d},TK:function(){return n},aU:function(){return s},cw:function(){return l},d$:function(){return b},hG:function(){return o},kg:function(){return r},nY:function(){return y},r7:function(){return u},rx:function(){return h},v9:function(){return p},vF:function(){return m},vi:function(){return v},wq:function(){return _}});var i=a(76471);function s(t){return(0,i.Ay)({url:"/api/users/list",method:"get",params:t})}function r(t){return(0,i.Ay)({url:"/api/users/create",method:"post",data:t})}function n(t,e){return(0,i.Ay)({url:"/api/users/update",method:"put",params:{id:t},data:e})}function o(t){return(0,i.Ay)({url:"/api/users/delete",method:"delete",params:{id:t}})}function l(t){return(0,i.Ay)({url:"/api/users/reset-password",method:"post",data:t})}function d(){return(0,i.Ay)({url:"/api/users/roles",method:"get"})}function c(){return(0,i.Ay)({url:"/api/users/profile",method:"get"})}function u(t){return(0,i.Ay)({url:"/api/users/profile/update",method:"put",data:t})}function m(){return(0,i.Ay)({url:"/api/users/notification-settings",method:"get"})}function g(t){return(0,i.Ay)({url:"/api/users/notification-settings",method:"put",data:t})}function p(t){return(0,i.Ay)({url:"/api/users/my-credits-log",method:"get",params:t})}function h(t){return(0,i.Ay)({url:"/api/users/my-referrals",method:"get",params:t})}function _(t){return(0,i.Ay)({url:"/api/users/set-credits",method:"post",data:t})}function y(t){return(0,i.Ay)({url:"/api/users/set-vip",method:"post",data:t})}function f(t){return(0,i.Ay)({url:"/api/users/system-strategies",method:"get",params:t})}function v(t){return(0,i.Ay)({url:"/api/users/admin-orders",method:"get",params:t})}function b(t){return(0,i.Ay)({url:"/api/users/admin-ai-stats",method:"get",params:t})}}}]); \ No newline at end of file diff --git a/frontend/dist/js/367.4284ba87.js b/frontend/dist/js/367.4284ba87.js new file mode 100644 index 0000000..cc85adb --- /dev/null +++ b/frontend/dist/js/367.4284ba87.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[367],{7404:function(t,a,e){e.r(a),e.d(a,{default:function(){return x}});var s=function(){var t=this,a=t._self._c;return a("div",{staticClass:"ai-asset-analysis-page",class:{"theme-dark":t.isDarkTheme}},[t.opportunities.length>0?a("div",{staticClass:"opp-section"},[a("div",{staticClass:"opp-header"},[a("span",{staticClass:"opp-title"},[a("a-icon",{attrs:{type:"radar-chart"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.opportunities.title")))],1),a("span",{staticClass:"opp-header-right"},[a("span",{staticClass:"opp-update-hint"},[a("a-icon",{attrs:{type:"clock-circle"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.opportunities.updateHint"))+" ")],1),a("a-button",{attrs:{type:"link",size:"small",icon:"reload",loading:t.oppLoading},on:{click:function(a){return t.loadOpportunities(!0)}}},[t._v(" "+t._s(t.$t("common.refresh")||"刷新")+" ")])],1)]),a("div",{staticClass:"opp-carousel-wrapper",on:{mouseenter:function(a){t.oppHover=!0},mouseleave:function(a){t.oppHover=!1}}},[a("div",{staticClass:"opp-track",class:{paused:t.oppHover},style:t.oppTrackStyle},t._l(t.carouselItems,function(e,s){return a("div",{key:"opp-"+s,staticClass:"opp-card",class:[e.impact,"market-"+(e.market||"").toLowerCase(),{"is-prediction-market":"PredictionMarket"===e.market}],on:{click:function(a){return t.analyzeOpportunity(e)}}},[a("div",{staticClass:"opp-top"},[a("span",{staticClass:"opp-symbol",class:{"prediction-title":"PredictionMarket"===e.market}},[t._v(" "+t._s("PredictionMarket"===e.market&&e.name||e.symbol)+" ")]),a("a-tag",{staticClass:"opp-market-tag",attrs:{color:t.getMarketTagColor(e.market),size:"small"}},[t._v(" "+t._s(t.getMarketLabel(e.market))+" ")])],1),"PredictionMarket"!==e.market?a("div",{staticClass:"opp-price"},[t._v("$"+t._s(t.formatOppPrice(e.price)))]):a("div",{staticClass:"opp-price"},[t._v(t._s((e.price||0).toFixed(1))+"%")]),"PredictionMarket"!==e.market?a("div",{staticClass:"opp-change",class:e.change_24h>=0?"up":"down"},[t._v(" "+t._s(e.change_24h>=0?"+":"")+t._s((e.change_24h||0).toFixed(1))+"% ")]):e.ai_analysis?a("div",{staticClass:"opp-change"},[a("a-tag",{attrs:{color:t.getRecommendationColor(e.ai_analysis.recommendation),size:"small"}},[t._v(" "+t._s(t.getRecommendationLabel(e.ai_analysis.recommendation))+" ")]),a("span",{staticStyle:{"margin-left":"8px","font-size":"12px",color:"rgba(0,0,0,0.65)"}},[t._v(" 机会评分: "+t._s(e.ai_analysis.opportunity_score.toFixed(0))+" ")])],1):t._e(),"PredictionMarket"!==e.market?a("div",{staticClass:"opp-signal"},[a("a-tag",{attrs:{color:t.getSignalColor(e.signal),size:"small"}},[t._v(t._s(t.getSignalLabel(e.signal)))])],1):t._e(),a("div",{staticClass:"opp-reason"},[t._v(t._s(t.getReasonText(e)))]),a("div",{staticClass:"opp-actions"},["PredictionMarket"!==e.market?a("span",{staticClass:"opp-action",on:{click:function(a){return a.stopPropagation(),t.analyzeOpportunity(e)}}},[a("a-icon",{attrs:{type:"thunderbolt"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.opportunities.analyze"))+" ")],1):a("span",{staticClass:"opp-action",on:{click:function(a){return a.stopPropagation(),t.analyzeOpportunity(e)}}},[a("a-icon",{attrs:{type:"link"}}),t._v(" "+t._s(t.$t("polymarket.action.viewDetail"))+" ")],1),"Crypto"===e.market?a("span",{staticClass:"opp-trade-btn",on:{click:function(a){return a.stopPropagation(),t.openQuickTradeFromOpp(e)}}},[a("a-icon",{attrs:{type:"transaction"}}),t._v(" "+t._s(t.$t("quickTrade.tradeNow"))+" ")],1):t._e()])])}),0)])]):t._e(),a("a-tooltip",{attrs:{title:t.$t("quickTrade.openPanel"),placement:"left"}},[!t.showQuickTrade&&t.currentAnalysisSymbol?a("div",{staticClass:"qt-floating-btn",on:{click:t.openQuickTradeFromCurrent}},[a("a-icon",{attrs:{type:"thunderbolt",theme:"filled"}})],1):t._e()]),a("quick-trade-panel",{attrs:{visible:t.showQuickTrade,symbol:t.qtSymbol,"preset-side":t.qtSide,"preset-price":t.qtPrice,source:t.qtSource,"market-type":"swap"},on:{close:function(a){t.showQuickTrade=!1},"order-success":t.onQuickTradeSuccess,"update:symbol":t.handleQuickTradeSymbolChange}}),a("a-card",{staticClass:"workspace-card",attrs:{bordered:!1}},[a("a-tabs",{staticClass:"workspace-tabs",attrs:{size:"large"},model:{value:t.activeTab,callback:function(a){t.activeTab=a},expression:"activeTab"}},[a("a-tab-pane",{key:"quick"},[a("span",{attrs:{slot:"tab"},slot:"tab"},[a("a-icon",{attrs:{type:"thunderbolt"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.tabs.quick"))+" ")],1),a("div",{staticClass:"tab-body"},["quick"===t.activeTab?a("AnalysisView",{attrs:{embedded:!0,"preset-symbol":t.presetSymbol,"auto-analyze-signal":t.autoAnalyzeSignal},on:{"symbol-change":t.onAnalysisSymbolChange}}):t._e()],1)]),a("a-tab-pane",{key:"monitor"},[a("span",{attrs:{slot:"tab"},slot:"tab"},[a("a-icon",{attrs:{type:"eye"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.tabs.monitor"))+" ")],1),a("div",{staticClass:"tab-body"},["monitor"===t.activeTab?a("PortfolioView",{attrs:{embedded:!0}}):t._e()],1)]),a("a-tab-pane",{key:"polymarket"},[a("span",{attrs:{slot:"tab"},slot:"tab"},[a("a-icon",{attrs:{type:"radar-chart"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.tabs.polymarket"))+" ")],1),a("div",{staticClass:"tab-body"},[a("div",{staticClass:"polymarket-tab-content"},[a("div",{staticClass:"polymarket-placeholder"},[a("div",{staticClass:"placeholder-icon"},[a("a-icon",{attrs:{type:"radar-chart"}})],1),a("h3",[t._v(t._s(t.$t("polymarket.analysis.title")))]),a("p",[t._v(t._s(t.$t("polymarket.analysis.description")))]),a("a-button",{staticStyle:{"margin-top":"16px"},attrs:{type:"primary",size:"large",icon:"thunderbolt"},on:{click:function(a){t.showPolymarketModal=!0}}},[t._v(" "+t._s(t.$t("polymarket.analysis.startAnalysis"))+" ")])],1)])])])],1)],1),a("PolymarketAnalysisModal",{attrs:{visible:t.showPolymarketModal},on:{close:function(a){t.showPolymarketModal=!1}}})],1)},i=[],n=e(81127),o=e(56252),r=e(2403),l=e(76338),c=(e(74423),e(95353)),p=e(59896),u=e(16185),y=e(44146),d=e(62611),m=function(){var t=this,a=t._self._c;return a("a-modal",{attrs:{visible:t.visible,title:t.$t("polymarket.analysis.title"),width:900,footer:null,maskClosable:!1},on:{cancel:t.handleClose}},[a("div",{staticClass:"polymarket-analysis-modal"},[a("a-tabs",{attrs:{"default-active-key":"analyze"},on:{change:t.handleTabChange}},[a("a-tab-pane",{key:"analyze",attrs:{tab:t.$t("polymarket.analysis.tabAnalyze")}},[t.analysisResult?t._e():a("div",{staticClass:"input-section"},[a("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{message:t.$t("polymarket.analysis.inputHint"),type:"info","show-icon":""}}),a("a-textarea",{attrs:{placeholder:t.$t("polymarket.analysis.inputPlaceholder"),rows:3,disabled:t.analyzing},on:{pressEnter:t.handleAnalyze},model:{value:t.inputText,callback:function(a){t.inputText=a},expression:"inputText"}}),a("div",{staticClass:"input-actions"},[a("a-button",{staticStyle:{width:"100%","margin-top":"12px"},attrs:{type:"primary",size:"large",icon:"thunderbolt",loading:t.analyzing,disabled:!t.inputText.trim()},on:{click:t.handleAnalyze}},[t._v(" "+t._s(t.$t("polymarket.analysis.analyzeButton"))+" ")])],1)],1),t.analysisResult?a("div",{staticClass:"result-section"},[a("div",{staticClass:"market-info"},[a("h3",[t._v(t._s(t.analysisResult.market.question))]),a("div",{staticClass:"market-meta"},[a("a-tag",{attrs:{color:t.getStatusColor(t.analysisResult.market.status)}},[t._v(" "+t._s(t.analysisResult.market.status)+" ")]),a("span",{staticClass:"meta-item"},[a("a-icon",{attrs:{type:"percentage"}}),t._v(" "+t._s(t.analysisResult.market.current_probability)+"% ")],1),t.analysisResult.market.volume_24h?a("span",{staticClass:"meta-item"},[a("a-icon",{attrs:{type:"dollar"}}),t._v(" "+t._s(t.formatVolume(t.analysisResult.market.volume_24h))+" ")],1):t._e(),t.analysisResult.market.polymarket_url?a("a-button",{attrs:{type:"link",size:"small",icon:"link",href:t.analysisResult.market.polymarket_url,target:"_blank"}},[t._v(" "+t._s(t.$t("polymarket.analysis.viewOnPolymarket"))+" ")]):t._e()],1)]),a("div",{staticClass:"analysis-result"},[a("a-divider",[t._v(t._s(t.$t("polymarket.analysis.aiAnalysis")))]),a("div",{staticClass:"probability-comparison"},[a("div",{staticClass:"prob-item"},[a("div",{staticClass:"prob-label"},[t._v(t._s(t.$t("polymarket.analysis.marketProbability")))]),a("div",{staticClass:"prob-value"},[t._v(t._s(t.analysisResult.analysis.market_probability)+"%")])]),a("div",{staticClass:"prob-item"},[a("div",{staticClass:"prob-label"},[t._v(t._s(t.$t("polymarket.analysis.aiPredictedProbability")))]),a("div",{staticClass:"prob-value ai-prob"},[t._v(t._s(t.analysisResult.analysis.ai_predicted_probability)+"%")])]),a("div",{staticClass:"prob-item"},[a("div",{staticClass:"prob-label"},[t._v(t._s(t.$t("polymarket.analysis.divergence")))]),a("div",{staticClass:"prob-value",class:t.getDivergenceClass(t.analysisResult.analysis.divergence)},[t._v(" "+t._s(t.analysisResult.analysis.divergence>=0?"+":"")+t._s(t.analysisResult.analysis.divergence.toFixed(2))+"% ")])])]),a("div",{staticClass:"recommendation-section"},[a("a-row",{attrs:{gutter:16}},[a("a-col",{attrs:{span:8}},[a("div",{staticClass:"rec-card"},[a("div",{staticClass:"rec-label"},[t._v(t._s(t.$t("polymarket.analysis.recommendation")))]),a("a-tag",{staticStyle:{"font-size":"16px",padding:"4px 12px"},attrs:{color:t.getRecommendationColor(t.analysisResult.analysis.recommendation)}},[t._v(" "+t._s(t.getRecommendationLabel(t.analysisResult.analysis.recommendation))+" ")])],1)]),a("a-col",{attrs:{span:8}},[a("div",{staticClass:"rec-card"},[a("div",{staticClass:"rec-label"},[t._v(t._s(t.$t("polymarket.analysis.confidenceScore")))]),a("div",{staticClass:"rec-value"},[t._v(t._s(t.analysisResult.analysis.confidence_score.toFixed(0)))])])]),a("a-col",{attrs:{span:8}},[a("div",{staticClass:"rec-card"},[a("div",{staticClass:"rec-label"},[t._v(t._s(t.$t("polymarket.analysis.opportunityScore")))]),a("div",{staticClass:"rec-value"},[t._v(t._s(t.analysisResult.analysis.opportunity_score.toFixed(0)))])])])],1)],1),t.analysisResult.analysis.reasoning?a("div",{staticClass:"reasoning-section"},[a("h4",[t._v(t._s(t.$t("polymarket.analysis.reasoning")))]),a("p",{staticClass:"reasoning-text"},[t._v(t._s(t.analysisResult.analysis.reasoning))])]):t._e(),t.analysisResult.analysis.key_factors&&t.analysisResult.analysis.key_factors.length>0?a("div",{staticClass:"key-factors-section"},[a("h4",[t._v(t._s(t.$t("polymarket.analysis.keyFactors")))]),t._l(t.analysisResult.analysis.key_factors,function(e,s){return a("a-tag",{key:s,staticStyle:{margin:"4px"},attrs:{color:"blue"}},[t._v(" "+t._s(e)+" ")])})],2):t._e(),t.analysisResult.credits_charged>0?a("div",{staticClass:"billing-info"},[a("a-alert",{staticStyle:{"margin-top":"16px"},attrs:{message:t.$t("polymarket.analysis.creditsCharged",{credits:t.analysisResult.credits_charged}),type:"success","show-icon":""}}),void 0!==t.analysisResult.remaining_credits?a("div",{staticStyle:{"margin-top":"8px","text-align":"right",color:"rgba(0,0,0,0.65)"}},[t._v(" "+t._s(t.$t("polymarket.analysis.remainingCredits",{credits:t.analysisResult.remaining_credits.toFixed(0)}))+" ")]):t._e()],1):t._e()],1),a("div",{staticClass:"result-actions"},[a("a-button",{staticStyle:{"margin-right":"8px"},on:{click:t.handleNewAnalysis}},[t._v(" "+t._s(t.$t("polymarket.analysis.newAnalysis"))+" ")]),a("a-button",{attrs:{type:"primary"},on:{click:t.handleClose}},[t._v(" "+t._s(t.$t("common.close"))+" ")])],1)]):t._e(),t.analyzing?a("div",{staticClass:"loading-section"},[a("a-spin",{attrs:{size:"large"}}),a("p",{staticStyle:{"margin-top":"16px",color:"rgba(0,0,0,0.65)"}},[t._v(" "+t._s(t.$t("polymarket.analysis.analyzing"))+" ")])],1):t._e()]),a("a-tab-pane",{key:"history",attrs:{tab:t.$t("polymarket.analysis.tabHistory")}},[a("div",{staticClass:"history-section"},[a("a-spin",{attrs:{spinning:t.historyLoading}},[a("a-table",{attrs:{columns:t.historyColumns,"data-source":t.historyList,pagination:t.historyPagination,"row-key":function(t){return t.id},size:"small"},on:{change:t.handleHistoryTableChange},scopedSlots:t._u([{key:"market_title",fn:function(e,s){return[a("a-button",{staticStyle:{padding:"0"},attrs:{type:"link"},on:{click:function(a){return t.viewHistoryItem(s)}}},[t._v(" "+t._s(e)+" ")])]}},{key:"recommendation",fn:function(e){return[a("a-tag",{attrs:{color:t.getRecommendationColor(e)}},[t._v(" "+t._s(t.getRecommendationLabel(e))+" ")])]}},{key:"created_at",fn:function(a){return[t._v(" "+t._s(t.formatDateTime(a))+" ")]}}])})],1)],1)])],1)],1)])},h=[],k=e(75769),v="/api/polymarket";function g(t){return(0,k.Ay)({url:"".concat(v,"/analyze"),method:"post",data:t,timeout:12e4})}function _(t){return(0,k.Ay)({url:"".concat(v,"/history"),method:"get",params:t})}var b={name:"PolymarketAnalysisModal",props:{visible:{type:Boolean,default:!1}},data:function(){var t=this;return{inputText:"",analyzing:!1,analysisResult:null,activeTab:"analyze",historyLoading:!1,historyList:[],historyPagination:{current:1,pageSize:20,total:0,showSizeChanger:!0,showTotal:function(a){return t.$t("polymarket.analysis.historyTotal",{total:a})}},historyColumns:[]}},methods:{handleAnalyze:function(){var t=this;this.inputText.trim()?(this.analyzing=!0,this.analysisResult=null,g({input:this.inputText.trim(),language:this.$i18n.locale||"zh-CN"}).then(function(a){1===a.code?(t.analysisResult=a.data,t.$message.success(t.$t("polymarket.analysis.success"))):"Insufficient credits"===a.msg?(t.$message.error(t.$t("polymarket.analysis.insufficientCredits")),t.$router.push("/billing")):t.$message.error(a.msg||t.$t("polymarket.analysis.failed"))}).catch(function(a){a.response&&a.response.data&&"Insufficient credits"===a.response.data.msg?(t.$message.error(t.$t("polymarket.analysis.insufficientCredits")),t.$router.push("/billing")):t.$message.error(t.$t("polymarket.analysis.failed"))}).finally(function(){t.analyzing=!1})):this.$message.warning(this.$t("polymarket.analysis.inputRequired"))},handleNewAnalysis:function(){this.inputText="",this.analysisResult=null},handleClose:function(){var t=this;this.$emit("close"),setTimeout(function(){t.inputText="",t.analysisResult=null,t.analyzing=!1},300)},getStatusColor:function(t){var a={active:"green",closed:"default",resolved:"blue"};return a[t]||"default"},getRecommendationColor:function(t){var a={YES:"green",NO:"red",HOLD:"orange"};return a[t]||"default"},getRecommendationLabel:function(t){var a={YES:this.$t("polymarket.analysis.recommendationYes"),NO:this.$t("polymarket.analysis.recommendationNo"),HOLD:this.$t("polymarket.analysis.recommendationHold")};return a[t]||t},getDivergenceClass:function(t){return t>5?"divergence-positive":t<-5?"divergence-negative":"divergence-neutral"},formatVolume:function(t){return t>=1e6?"$".concat((t/1e6).toFixed(2),"M"):t>=1e3?"$".concat((t/1e3).toFixed(2),"K"):"$".concat(t.toFixed(2))},handleTabChange:function(t){this.activeTab=t,"history"===t&&0===this.historyList.length&&this.loadHistory()},loadHistory:function(){var t=this;return(0,o.A)((0,n.A)().m(function a(){var e;return(0,n.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return t.historyLoading=!0,a.p=1,a.n=2,_({page:t.historyPagination.current,page_size:t.historyPagination.pageSize});case 2:e=a.v,1===e.code&&e.data&&(t.historyList=e.data.items||[],t.historyPagination.total=e.data.total||0),a.n=4;break;case 3:a.p=3,a.v,t.$message.error(t.$t("polymarket.analysis.loadHistoryFailed"));case 4:return a.p=4,t.historyLoading=!1,a.f(4);case 5:return a.a(2)}},a,null,[[1,3,4,5]])}))()},handleHistoryTableChange:function(t){this.historyPagination.current=t.current,this.historyPagination.pageSize=t.pageSize,this.loadHistory()},viewHistoryItem:function(t){this.activeTab="analyze",this.analysisResult={market:{question:t.market_title,market_id:t.market_id,polymarket_url:t.market_url,current_probability:t.market_probability,status:"active"},analysis:{ai_predicted_probability:t.ai_predicted_probability,market_probability:t.market_probability,recommendation:t.recommendation,opportunity_score:t.opportunity_score,confidence_score:t.confidence_score}}},formatDateTime:function(t){if(!t)return"";var a=new Date(t);return a.toLocaleString("zh-CN"===this.$i18n.locale?"zh-CN":"en-US")}},mounted:function(){this.historyColumns=[{title:this.$t("polymarket.analysis.historyMarket"),dataIndex:"market_title",key:"market_title",scopedSlots:{customRender:"market_title"}},{title:this.$t("polymarket.analysis.historyRecommendation"),dataIndex:"recommendation",key:"recommendation",width:120,scopedSlots:{customRender:"recommendation"}},{title:this.$t("polymarket.analysis.historyOpportunityScore"),dataIndex:"opportunity_score",key:"opportunity_score",width:120,align:"right"},{title:this.$t("polymarket.analysis.historyCreatedAt"),dataIndex:"created_at",key:"created_at",width:180,scopedSlots:{customRender:"created_at"}}]}},f=b,C=e(845),S=(0,C.A)(f,m,h,!1,null,"41dfa054",null),$=S.exports,A={name:"AIAssetAnalysis",components:{AnalysisView:p["default"],PortfolioView:u["default"],QuickTradePanel:d.A,PolymarketAnalysisModal:$},data:function(){return{activeTab:"quick",opportunities:[],oppLoading:!1,oppHover:!1,presetSymbol:"",autoAnalyzeSignal:0,showQuickTrade:!1,qtSymbol:"",qtSide:"",qtPrice:0,qtSource:"ai_radar",currentAnalysisSymbol:"",currentAnalysisMarket:"",showPolymarketModal:!1}},computed:(0,l.A)((0,l.A)({},(0,c.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},carouselItems:function(){return 0===this.opportunities.length?[]:[].concat((0,r.A)(this.opportunities),(0,r.A)(this.opportunities))},oppTrackStyle:function(){var t=3*this.opportunities.length;return{animationDuration:t+"s"}}}),created:function(){this.loadOpportunities()},methods:{loadOpportunities:function(){var t=arguments,a=this;return(0,o.A)((0,n.A)().m(function e(){var s,i,o;return(0,n.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return s=t.length>0&&void 0!==t[0]&&t[0],a.oppLoading=!0,e.p=1,i=s?{force:!0}:{},e.n=2,(0,y.r9)(i);case 2:o=e.v,o&&1===o.code&&Array.isArray(o.data)&&(a.opportunities=o.data.slice(0,20)),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.p=4,a.oppLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},getSignalColor:function(t){var a={overbought:"volcano",oversold:"green",bullish_momentum:"cyan",bearish_momentum:"red"};return a[t]||"default"},getSignalLabel:function(t){var a="aiAssetAnalysis.opportunities.signal.".concat(t),e=this.$t(a);return e!==a?e:t},getMarketTagColor:function(t){var a={Crypto:"purple",USStock:"green",Forex:"gold",PredictionMarket:"cyan"};return a[t]||"default"},getMarketLabel:function(t){var a="aiAssetAnalysis.opportunities.market.".concat(t),e=this.$t(a);return e!==a?e:t},getReasonText:function(t){var a=(t.market||"Crypto").toLowerCase(),e=t.signal||"",s="aiAssetAnalysis.opportunities.reason.".concat(a,".").concat(e),i=this.$t(s);if(i===s)return t.reason||"";var n=Math.abs(t.change_24h||0).toFixed(1),o=Math.abs(t.change_7d||0).toFixed(1);return i.replace("{change}",n).replace("{change7d}",o)},formatOppPrice:function(t){return t?t>=1e4?(t/1e3).toFixed(1)+"K":t>=1?t.toFixed(2):t.toFixed(4):"--"},analyzeOpportunity:function(t){var a=this;if("PredictionMarket"===t.market)return this.activeTab="polymarket",void(this.showPolymarketModal=!0);this.activeTab="quick";var e=t.market||"Crypto";this.presetSymbol="".concat(e,":").concat(t.symbol),this.$nextTick(function(){a.autoAnalyzeSignal++})},getRecommendationColor:function(t){var a={YES:"green",NO:"red",HOLD:"default"};return a[t]||"default"},getRecommendationLabel:function(t){return this.$t("polymarket.recommendation.".concat(t))||t},onAnalysisSymbolChange:function(t){if(!t)return this.currentAnalysisSymbol="",void(this.currentAnalysisMarket="");var a=t.split(":"),e=a.length>1?a[0]:"Crypto",s=a.length>1?a[1]:a[0];this.currentAnalysisMarket=e,this.currentAnalysisSymbol="Crypto"===e?s:""},openQuickTradeFromCurrent:function(){this.currentAnalysisSymbol&&(this.qtSymbol=this.currentAnalysisSymbol,this.qtSide="",this.qtPrice=0,this.qtSource="ai_analysis",this.showQuickTrade=!0)},openQuickTradeFromOpp:function(t){if("Crypto"===t.market){this.qtSymbol=t.symbol||"";var a=(t.signal||"").toLowerCase();a.includes("oversold")||a.includes("bullish")?this.qtSide="buy":a.includes("overbought")||a.includes("bearish")?this.qtSide="sell":this.qtSide="",this.qtPrice=t.price||0,this.qtSource="ai_radar",this.showQuickTrade=!0}},onQuickTradeSuccess:function(){this.$message.success(this.$t("quickTrade.orderSuccess"))},handleQuickTradeSymbolChange:function(t){t&&(this.qtSymbol=t)}}},T=A,w=(0,C.A)(T,s,i,!1,null,"20b827f5",null),x=w.exports}}]); \ No newline at end of file diff --git a/frontend/dist/js/251-legacy.3f3bc7ec.js b/frontend/dist/js/397-legacy.14ad2c5b.js similarity index 97% rename from frontend/dist/js/251-legacy.3f3bc7ec.js rename to frontend/dist/js/397-legacy.14ad2c5b.js index 319e784..e2f7335 100644 --- a/frontend/dist/js/251-legacy.3f3bc7ec.js +++ b/frontend/dist/js/397-legacy.14ad2c5b.js @@ -1 +1 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[251],{97251:function(e,t,a){a.r(t),a.d(t,{default:function(){return v}});a(52675),a(89463),a(28706),a(50778);var s=function(){var e=this,t=e._self._c;return t("div",{staticClass:"settings-page",class:{"theme-dark":e.isDarkTheme}},[e.showRestartTip?t("a-alert",{staticClass:"restart-alert",attrs:{type:"warning",showIcon:"",closable:""},on:{close:function(t){e.showRestartTip=!1}}},[t("template",{slot:"message"},[t("span",[e._v(e._s(e.$t("settings.restartRequired")))]),t("a-button",{attrs:{size:"small",type:"link"},on:{click:e.copyRestartCommand}},[e._v(" "+e._s(e.$t("settings.copyRestartCmd"))+" ")])],1)],2):e._e(),t("div",{staticClass:"settings-header"},[t("h2",{staticClass:"page-title"},[t("a-icon",{attrs:{type:"setting"}}),t("span",[e._v(e._s(e.$t("settings.title")))])],1),t("p",{staticClass:"page-desc"},[e._v(e._s(e.$t("settings.description")))])]),t("a-spin",{attrs:{spinning:e.loading}},[t("div",{staticClass:"settings-content"},[t("a-collapse",{staticClass:"settings-collapse",attrs:{bordered:!1},model:{value:e.activeKeys,callback:function(t){e.activeKeys=t},expression:"activeKeys"}},e._l(e.sortedSchema,function(a,s){return t("a-collapse-panel",{key:s},[t("template",{slot:"header"},[t("span",{staticClass:"panel-header"},[t("a-icon",{staticClass:"panel-icon-left",attrs:{type:a.icon||e.getGroupIcon(s)}}),t("span",{staticClass:"panel-title"},[e._v(e._s(e.getGroupTitle(s,a.title)))])],1)]),"ai"===s?t("div",{staticClass:"openrouter-balance-card"},[t("a-card",{attrs:{size:"small",bordered:!1}},[t("div",{staticClass:"balance-header"},[t("span",{staticClass:"balance-title"},[t("a-icon",{staticStyle:{"margin-right":"6px"},attrs:{type:"wallet"}}),e._v(" "+e._s(e.$t("settings.openrouterBalance")||"OpenRouter 账户余额")+" ")],1),t("a-button",{attrs:{size:"small",type:"primary",ghost:"",loading:e.balanceLoading},on:{click:e.queryOpenRouterBalance}},[t("a-icon",{attrs:{type:"sync"}}),e._v(" "+e._s(e.$t("settings.queryBalance")||"查询余额")+" ")],1)],1),e.openrouterBalance?t("div",{staticClass:"balance-info"},[t("a-row",{attrs:{gutter:16}},[t("a-col",{attrs:{span:8}},[t("a-statistic",{attrs:{title:e.$t("settings.balanceUsage")||"已使用",value:e.openrouterBalance.usage,prefix:"$",precision:4,"value-style":{color:"#cf1322"}}})],1),t("a-col",{attrs:{span:8}},[t("a-statistic",{attrs:{title:e.$t("settings.balanceRemaining")||"剩余额度",value:null!==e.openrouterBalance.limit_remaining?e.openrouterBalance.limit_remaining:"∞",prefix:null!==e.openrouterBalance.limit_remaining?"$":"",precision:null!==e.openrouterBalance.limit_remaining?4:0,"value-style":{color:null!==e.openrouterBalance.limit_remaining&&e.openrouterBalance.limit_remaining<1?"#cf1322":"#3f8600"}}})],1),t("a-col",{attrs:{span:8}},[t("a-statistic",{attrs:{title:e.$t("settings.balanceLimit")||"总限额",value:null!==e.openrouterBalance.limit?e.openrouterBalance.limit:"∞",prefix:null!==e.openrouterBalance.limit?"$":"",precision:null!==e.openrouterBalance.limit?2:0}})],1)],1),e.openrouterBalance.is_free_tier?t("div",{staticClass:"free-tier-badge"},[t("a-tag",{attrs:{color:"blue"}},[e._v("Free Tier")])],1):e._e()],1):t("div",{staticClass:"balance-empty"},[t("a-icon",{staticStyle:{"margin-right":"6px"},attrs:{type:"info-circle"}}),e._v(" "+e._s(e.$t("settings.balanceNotQueried")||'点击"查询余额"获取账户信息')+" ")],1)])],1):e._e(),t("a-form",{staticClass:"settings-form",attrs:{form:e.form,layout:"vertical"}},[t("a-row",{attrs:{gutter:24}},e._l(a.items,function(a){return t("a-col",{key:a.key,attrs:{xs:24,sm:24,md:12,lg:12}},[t("a-form-item",[t("template",{slot:"label"},[t("span",{staticClass:"form-label-with-tooltip"},[t("span",{staticClass:"label-text"},[e._v(e._s(e.getItemLabel(s,a)))]),a.description?t("a-tooltip",{attrs:{placement:"top"}},[t("template",{slot:"title"},[e._v(" "+e._s(e.getItemDescription(s,a))+" ")]),t("a-icon",{staticClass:"help-icon",attrs:{type:"question-circle"}})],2):e._e(),a.link?t("a",{staticClass:"api-link",attrs:{href:a.link,target:"_blank",rel:"noopener noreferrer"},on:{click:function(e){e.stopPropagation()}}},[t("a-icon",{attrs:{type:"link"}}),e._v(" "+e._s(e.getLinkText(a.link_text))+" ")],1):e._e()],1)]),"text"===a.type?[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:[a.key,{initialValue:e.getFieldValue(s,a.key)}],expression:"[item.key, { initialValue: getFieldValue(groupKey, item.key) }]"}],attrs:{placeholder:a.default?"".concat(e.$t("settings.default"),": ").concat(a.default):"",allowClear:""}})]:"password"===a.type?[t("div",{staticClass:"password-field"},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:[a.key,{initialValue:e.getFieldValue(s,a.key)}],expression:"[item.key, { initialValue: getFieldValue(groupKey, item.key) }]"}],attrs:{type:e.passwordVisible[a.key]?"text":"password",placeholder:e.$t("settings.inputApiKey"),allowClear:""}},[t("a-icon",{staticStyle:{cursor:"pointer"},attrs:{slot:"suffix",type:e.passwordVisible[a.key]?"eye":"eye-invisible"},on:{click:function(t){return e.togglePasswordVisible(a.key)}},slot:"suffix"})],1)],1)]:"number"===a.type?[t("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:[a.key,{initialValue:e.getNumberValue(s,a.key,a.default)}],expression:"[item.key, { initialValue: getNumberValue(groupKey, item.key, item.default) }]"}],staticStyle:{width:"100%"},attrs:{placeholder:a.default?"".concat(e.$t("settings.default"),": ").concat(a.default):""}})]:"boolean"===a.type?[t("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:[a.key,{valuePropName:"checked",initialValue:e.getBoolValue(s,a.key,a.default)}],expression:"[item.key, { valuePropName: 'checked', initialValue: getBoolValue(groupKey, item.key, item.default) }]"}]})]:"select"===a.type?[t("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:[a.key,{initialValue:e.getFieldValue(s,a.key)||a.default}],expression:"[item.key, { initialValue: getFieldValue(groupKey, item.key) || item.default }]"}],attrs:{placeholder:a.default?"".concat(e.$t("settings.default"),": ").concat(a.default):e.$t("settings.pleaseSelect")}},e._l(e.getSelectOptions(a.options),function(a){return t("a-select-option",{key:a.value,attrs:{value:a.value}},[e._v(" "+e._s(a.label)+" ")])}),1)]:e._e(),a.default&&"boolean"!==a.type&&"password"!==a.type?t("div",{staticClass:"field-default"},[e._v(" "+e._s(e.$t("settings.default"))+": "+e._s(a.default)+" ")]):e._e()],2)],1)}),1)],1)],2)}),1)],1)]),t("div",{staticClass:"settings-footer"},[t("a-button",{attrs:{disabled:e.saving},on:{click:e.handleReset}},[t("a-icon",{attrs:{type:"undo"}}),e._v(" "+e._s(e.$t("settings.reset"))+" ")],1),t("a-button",{attrs:{type:"primary",loading:e.saving},on:{click:e.handleSave}},[t("a-icon",{attrs:{type:"save"}}),e._v(" "+e._s(e.$t("settings.save"))+" ")],1)],1)],1)},i=[],n=a(52074),r=a(76959),l=a(17654),o=a(68285),c=a(21092),u=(a(2008),a(62062),a(26910),a(5506),a(79432),a(26099),a(47764),a(11392),a(62953),a(39523)),p=a(21170),d={name:"Settings",mixins:[p.t],data:function(){return{loading:!1,saving:!1,schema:{},values:{},activeKeys:["auth","ai","trading"],passwordVisible:{},showRestartTip:!1,balanceLoading:!1,openrouterBalance:null}},computed:{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},sortedSchema:function(){var e=Object.entries(this.schema);e.sort(function(e,t){var a=e[1].order||999,s=t[1].order||999;return a-s});for(var t={},a=0,s=e;a=0?"positive":"negative"},[t._v(" "+t._s(t.summary.total_pnl>=0?"+":"")+t._s(t.formatNumber(t.summary.total_pnl))+" ")]),a("span",{staticClass:"label"},[t._v(t._s(t.$t("dashboard.label.totalPnl")))])])])]),a("div",{staticClass:"kpi-card kpi-win-rate"},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"trophy"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.winRate")||"胜率"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount"},[t._v(t._s(t.formatNumber(t.performance.win_rate,1)))]),a("span",{staticClass:"unit"},[t._v("%")])]),a("div",{staticClass:"kpi-sub"},[a("span",{staticClass:"positive"},[t._v(t._s(t.performance.winning_trades))]),a("span",{staticClass:"label"},[t._v(t._s(t.$t("dashboard.label.win")))]),a("span",{staticClass:"divider"},[t._v("/")]),a("span",{staticClass:"negative"},[t._v(t._s(t.performance.losing_trades))]),a("span",{staticClass:"label"},[t._v(t._s(t.$t("dashboard.label.lose")))])])]),a("div",{staticClass:"kpi-ring"},[a("svg",{attrs:{viewBox:"0 0 36 36"}},[a("path",{staticClass:"ring-bg",attrs:{d:"M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831"}}),a("path",{staticClass:"ring-progress",attrs:{"stroke-dasharray":"".concat(t.performance.win_rate||0,", 100"),d:"M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831"}})])])]),a("div",{staticClass:"kpi-card kpi-profit-factor"},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"rise"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.profitFactor")||"盈亏比"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount"},[t._v(t._s(t.formatNumber(t.performance.profit_factor,2)))]),a("span",{staticClass:"unit"},[t._v(":1")])]),a("div",{staticClass:"kpi-sub"},[a("span",[t._v(t._s(t.$t("dashboard.label.avgProfit"))+" ")]),a("span",{staticClass:"positive"},[t._v("$"+t._s(t.formatNumber(t.performance.avg_win)))])])])]),a("div",{staticClass:"kpi-card kpi-drawdown"},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"fall"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.maxDrawdown")||"最大回撤"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount negative"},[t._v(t._s(t.formatNumber(t.performance.max_drawdown_pct,1)))]),a("span",{staticClass:"unit"},[t._v("%")])]),a("div",{staticClass:"kpi-sub"},[a("span",[t._v("$"+t._s(t.formatNumber(t.performance.max_drawdown)))])])])]),a("div",{staticClass:"kpi-card kpi-trades"},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"swap"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.totalTrades")||"总交易"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount"},[t._v(t._s(t.performance.total_trades))]),a("span",{staticClass:"unit"},[t._v(t._s(t.$t("dashboard.unit.trades")))])]),a("div",{staticClass:"kpi-sub"},[a("span",[t._v(t._s(t.$t("dashboard.label.avgDaily"))+" ")]),a("span",[t._v(t._s(t.avgTradesPerDay))]),a("span",{staticClass:"label"},[t._v(" "+t._s(t.$t("dashboard.unit.trades")))])])])]),a("div",{staticClass:"kpi-card kpi-strategies clickable",on:{click:function(a){return t.$router.push("/trading-assistant")}}},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"thunderbolt",theme:"filled"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.runningStrategies")||"运行中策略"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount"},[t._v(t._s(t.summary.indicator_strategy_count))]),a("span",{staticClass:"unit"},[t._v(t._s(t.$t("dashboard.unit.strategies")))])]),a("div",{staticClass:"kpi-sub"},[a("span",{staticClass:"highlight"},[t._v(t._s(t.summary.indicator_strategy_count))]),a("span",{staticClass:"label"},[t._v(" "+t._s(t.$t("dashboard.label.indicator")))])])]),a("div",{staticClass:"card-arrow"},[a("a-icon",{attrs:{type:"right"}})],1)])]),a("div",{staticClass:"chart-row"},[a("div",{staticClass:"chart-panel chart-main"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"calendar"}}),a("span",[t._v(t._s(t.$t("dashboard.profitCalendar")||"收益日曆"))])],1),a("div",{staticClass:"calendar-nav"},[a("a-button",{attrs:{type:"link",size:"small",disabled:t.currentCalendarIndex>=t.calendarMonths.length-1},on:{click:t.prevMonth}},[a("a-icon",{attrs:{type:"left"}})],1),a("span",{staticClass:"current-month"},[t._v(t._s(t.currentMonthLabel))]),a("a-button",{attrs:{type:"link",size:"small",disabled:t.currentCalendarIndex<=0},on:{click:t.nextMonth}},[a("a-icon",{attrs:{type:"right"}})],1)],1)]),a("div",{staticClass:"profit-calendar"},[t.currentCalendarMonth?[a("div",{staticClass:"month-summary"},[a("div",{staticClass:"summary-item"},[a("span",{staticClass:"summary-label"},[t._v(t._s(t.$t("dashboard.ranking.totalProfit")))]),a("span",{staticClass:"summary-value",class:t.currentCalendarMonth.total>=0?"positive":"negative"},[t._v(" "+t._s(t.currentCalendarMonth.total>=0?"+":"")+"$"+t._s(t.formatNumber(t.currentCalendarMonth.total))+" ")])]),a("div",{staticClass:"summary-item"},[a("span",{staticClass:"summary-label"},[t._v(t._s(t.$t("dashboard.label.win")))]),a("span",{staticClass:"summary-value positive"},[t._v(t._s(t.currentCalendarMonth.win_days))])]),a("div",{staticClass:"summary-item"},[a("span",{staticClass:"summary-label"},[t._v(t._s(t.$t("dashboard.label.lose")))]),a("span",{staticClass:"summary-value negative"},[t._v(t._s(t.currentCalendarMonth.lose_days))])])]),a("div",{staticClass:"calendar-weekdays"},t._l(t.weekdays,function(e){return a("div",{key:e,staticClass:"weekday"},[t._v(t._s(e))])}),0),a("div",{staticClass:"calendar-grid"},[t._l(t.calendarFirstDayOffset,function(t){return a("div",{key:"empty-"+t,staticClass:"calendar-cell empty"})}),t._l(t.currentCalendarMonth.days_in_month,function(e){return a("div",{key:e,staticClass:"calendar-cell",class:t.getDayClass(e)},[a("span",{staticClass:"day-number"},[t._v(t._s(e))]),null!==t.getDayProfit(e)?a("span",{staticClass:"day-profit",class:t.getDayProfit(e)>=0?"positive":"negative"},[t._v(" "+t._s(t.getDayProfit(e)>=0?"+":"")+t._s(t.formatCompactNumber(t.getDayProfit(e)))+" ")]):t._e()])})],2)]:a("div",{staticClass:"calendar-empty"},[a("a-icon",{attrs:{type:"inbox"}}),a("span",[t._v(t._s(t.$t("dashboard.noData")))])],1)],2)]),a("div",{staticClass:"chart-panel chart-side"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"pie-chart"}}),a("span",[t._v(t._s(t.$t("dashboard.strategyAllocation")||"策略分布"))])],1)]),a("div",{ref:"pieChart",staticClass:"chart-body"})])]),a("div",{staticClass:"chart-row"},[a("div",{staticClass:"chart-panel chart-half"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"area-chart"}}),a("span",[t._v(t._s(t.$t("dashboard.drawdownCurve")||"回撤曲线"))])],1)]),a("div",{ref:"drawdownChart",staticClass:"chart-body chart-sm"})]),a("div",{staticClass:"chart-panel chart-half"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"clock-circle"}}),a("span",[t._v(t._s(t.$t("dashboard.hourlyDistribution")||"交易时段"))])],1)]),a("div",{ref:"hourlyChart",staticClass:"chart-body chart-sm"})])]),a("div",{staticClass:"chart-panel"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"ordered-list"}}),a("span",[t._v(t._s(t.$t("dashboard.strategyRanking")||"策略排行榜"))])],1)]),a("div",{staticClass:"strategy-ranking"},[0===t.strategyStats.length?a("div",{staticClass:"empty-state"},[a("a-icon",{attrs:{type:"inbox"}}),a("span",[t._v(t._s(t.$t("dashboard.noStrategyData")))])],1):a("div",{staticClass:"ranking-grid"},t._l(t.strategyStats.slice(0,6),function(e,s){return a("div",{key:e.strategy_id,staticClass:"ranking-card",class:{"rank-top":s<3}},[a("div",{staticClass:"rank-badge",class:"rank-".concat(s+1)},[t._v(t._s(s+1))]),a("div",{staticClass:"rank-info"},[a("div",{staticClass:"rank-name"},[t._v(t._s(e.strategy_name))]),a("div",{staticClass:"rank-stats"},[a("span",{staticClass:"stat"},[a("label",[t._v(t._s(t.$t("dashboard.ranking.totalProfit")))]),a("span",{class:e.total_pnl>=0?"positive":"negative"},[t._v(" "+t._s(e.total_pnl>=0?"+":"")+"$"+t._s(t.formatNumber(e.total_pnl))+" ")])]),a("span",{staticClass:"stat"},[a("label",[t._v(t._s(t.$t("dashboard.winRate")))]),a("span",[t._v(t._s(t.formatNumber(e.win_rate,1))+"%")])]),a("span",{staticClass:"stat"},[a("label",[t._v(t._s(t.$t("dashboard.profitFactor")))]),a("span",[t._v(t._s(t.formatNumber(e.profit_factor,2)))])]),a("span",{staticClass:"stat"},[a("label",[t._v(t._s(t.$t("dashboard.ranking.trades")))]),a("span",[t._v(t._s(e.total_trades))])])])]),a("div",{staticClass:"rank-pnl-bar"},[a("div",{staticClass:"bar-fill",class:e.total_pnl>=0?"positive":"negative",style:{width:"".concat(Math.min(100,Math.abs(e.total_pnl)/t.maxStrategyPnl*100),"%")}})])])}),0)])]),a("div",{staticClass:"table-row"},[a("div",{staticClass:"table-panel"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"stock"}}),a("span",[t._v(t._s(t.$t("dashboard.currentPositions")))])],1),a("div",{staticClass:"panel-badge"},[t._v(t._s((t.summary.current_positions||[]).length))])]),a("a-table",{staticClass:"pro-table",attrs:{columns:t.positionColumns,"data-source":t.summary.current_positions,rowKey:"id",pagination:!1,size:"small",scroll:{x:"max-content"}},scopedSlots:t._u([{key:"symbol",fn:function(e,s){return[a("div",{staticClass:"symbol-cell"},[a("span",{staticClass:"symbol-name"},[t._v(t._s(e))]),a("span",{staticClass:"symbol-strategy"},[t._v(t._s(s.strategy_name))])])]}},{key:"side",fn:function(e){return[a("span",{staticClass:"side-tag",class:"long"===e?"long":"short"},[t._v(" "+t._s("long"===e?"LONG":"SHORT")+" ")])]}},{key:"unrealized_pnl",fn:function(e,s){return[a("div",{staticClass:"pnl-cell"},[a("span",{class:e>=0?"positive":"negative"},[t._v(" "+t._s(e>=0?"+":"")+"$"+t._s(t.formatNumber(e))+" ")]),a("span",{staticClass:"pnl-percent",class:s.pnl_percent>=0?"positive":"negative"},[t._v(" "+t._s(s.pnl_percent>=0?"+":"")+t._s(t.formatNumber(s.pnl_percent))+"% ")])])]}}])})],1),a("div",{staticClass:"table-panel"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"history"}}),a("span",[t._v(t._s(t.$t("dashboard.recentTrades")))])],1)]),a("a-table",{staticClass:"pro-table",attrs:{columns:t.columns,"data-source":t.summary.recent_trades,rowKey:"id",pagination:{pageSize:8,size:"small"},size:"small",scroll:{x:"max-content"}},scopedSlots:t._u([{key:"type",fn:function(e){return[a("span",{staticClass:"type-tag",class:t.getTypeClass(e)},[t._v(" "+t._s(t.getSignalTypeText(e))+" ")])]}},{key:"profit",fn:function(e,s){return[a("span",{class:"--"!==t.formatProfitValue(e,s)?e>=0?"positive":"negative":""},[t._v(" "+t._s(t.formatProfitValue(e,s))+" ")])]}},{key:"time",fn:function(e){return[a("span",{staticClass:"time-cell"},[t._v(t._s(t.formatTime(e)))])]}}])})],1)]),a("div",{staticClass:"chart-panel orders-panel"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"unordered-list"}}),a("span",[t._v(t._s(t.$t("dashboard.pendingOrders")))]),a("a-tooltip",{attrs:{title:t.soundEnabled?t.$t("dashboard.clickToMute"):t.$t("dashboard.clickToUnmute")}},[a("a-icon",{staticClass:"sound-toggle",class:{"sound-off":!t.soundEnabled},attrs:{type:t.soundEnabled?"sound":"audio-muted"},on:{click:t.toggleSound}})],1)],1),a("div",{staticClass:"panel-badge"},[t._v(t._s(t.ordersPagination.total))])]),a("a-table",{staticClass:"pro-table",attrs:{columns:t.orderColumns,"data-source":t.pendingOrders,rowKey:"id",pagination:{current:t.ordersPagination.current,pageSize:t.ordersPagination.pageSize,total:t.ordersPagination.total,showSizeChanger:!0,size:"small",showTotal:function(a){return t.$t("dashboard.totalOrders",{total:a})}},size:"small",loading:t.ordersLoading,scroll:{x:1200}},on:{change:t.handleOrdersTableChange},scopedSlots:t._u([{key:"strategy_name",fn:function(e,s){return[a("div",{staticClass:"symbol-cell"},[a("span",{staticClass:"symbol-name"},[t._v(t._s(e||"-"))]),a("span",{staticClass:"symbol-strategy"},[t._v("ID: "+t._s(s.strategy_id))])])]}},{key:"symbol",fn:function(e){return[a("span",{staticClass:"symbol-tag"},[t._v(t._s(e))])]}},{key:"signal_type",fn:function(e){return[a("span",{staticClass:"type-tag",class:t.getTypeClass(e)},[t._v(" "+t._s(t.getSignalTypeText(e))+" ")])]}},{key:"exchange",fn:function(e,s){return[s&&(s.exchange_display||s.exchange_id||e)?a("span",{staticClass:"exchange-tag",class:(s.exchange_display||s.exchange_id||e).toLowerCase()},[t._v(" "+t._s(String(s.exchange_display||s.exchange_id||e).toUpperCase())+" ")]):a("span",{staticClass:"text-muted"},[t._v("-")]),s&&s.market_type?a("div",{staticClass:"market-type"},[t._v(" "+t._s(String(s.market_type).toUpperCase())+" ")]):t._e()]}},{key:"notify",fn:function(e,s){return[a("div",{staticClass:"notify-icons"},[t._l(s&&s.notify_channels?s.notify_channels:[],function(e){return a("a-tooltip",{key:"".concat(s.id,"-").concat(e),attrs:{title:String(e)}},[a("a-icon",{staticClass:"notify-icon",attrs:{type:t.getNotifyIconType(e)}})],1)}),s&&s.notify_channels&&0!==s.notify_channels.length?t._e():a("span",{staticClass:"text-muted"},[t._v("-")])],2)]}},{key:"status",fn:function(e,s){return[a("span",{staticClass:"status-tag",class:e},[t._v(" "+t._s(t.getStatusText(e))+" ")]),"failed"===e&&s.error_message?a("div",{staticClass:"error-hint"},[a("a-tooltip",{attrs:{title:s.error_message}},[a("a-icon",{attrs:{type:"exclamation-circle"}}),a("span",[t._v(t._s(t.$t("dashboard.viewError")))])],1)],1):t._e()]}},{key:"amount",fn:function(e,s){return[a("div",[t._v(t._s(t.formatNumber(e,8)))]),s.filled_amount?a("div",{staticClass:"sub-text"},[t._v(" "+t._s(t.$t("dashboard.filled"))+": "+t._s(t.formatNumber(s.filled_amount,8))+" ")]):t._e()]}},{key:"price",fn:function(e,s){return[s.filled_price?a("div",[t._v(t._s(t.formatNumber(s.filled_price)))]):a("div",{staticClass:"text-muted"},[t._v("-")])]}},{key:"time_info",fn:function(e,s){return[a("div",{staticClass:"time-cell"},[t._v(t._s(t.formatTime(s.created_at)))]),s.executed_at?a("div",{staticClass:"sub-text"},[t._v(" "+t._s(t.formatTime(s.executed_at))+" ")]):t._e()]}}])})],1)])},r=[],n=e(81127),i=e(56252),o=e(57532),l=e(2403),d=e(76338),c=(e(74423),e(15014)),u=e(75769),p={summary:"/api/dashboard/summary",pendingOrders:"/api/dashboard/pendingOrders"};function h(){return(0,u.Ay)({url:p.summary,method:"get"})}function f(t){return(0,u.Ay)({url:p.pendingOrders,method:"get",params:t})}var m=e(95353),g={name:"Dashboard",data:function(){return{summary:{ai_strategy_count:0,indicator_strategy_count:0,total_equity:0,total_pnl:0,total_realized_pnl:0,total_unrealized_pnl:0,performance:{},strategy_stats:[],daily_pnl_chart:[],strategy_pnl_chart:[],monthly_returns:[],hourly_distribution:[],calendar_months:[],recent_trades:[],current_positions:[]},currentCalendarIndex:0,pieChart:null,drawdownChart:null,hourlyChart:null,pendingOrders:[],ordersLoading:!1,ordersPagination:{current:1,pageSize:20,total:0},orderPollTimer:null,lastOrderId:0,orderPollIntervalMs:5e3,soundEnabled:!0,beepCtx:null}},computed:(0,d.A)((0,d.A)({},(0,m.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},performance:function(){return this.summary.performance||{}},strategyStats:function(){return this.summary.strategy_stats||[]},maxStrategyPnl:function(){var t=this.strategyStats;return t.length?Math.max.apply(Math,(0,l.A)(t.map(function(t){return Math.abs(t.total_pnl||0)})).concat([1])):1},avgTradesPerDay:function(){var t=this.summary.daily_pnl_chart||[],a=t.length||1,e=this.performance.total_trades||0;return(e/a).toFixed(1)},calendarMonths:function(){return this.summary.calendar_months||[]},currentCalendarMonth:function(){var t=this.calendarMonths;return t.length&&t[this.currentCalendarIndex]||null},currentMonthLabel:function(){var t=this.currentCalendarMonth;if(!t)return"-";var a=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];return"".concat(a[t.month-1]," ").concat(t.year)},weekdays:function(){return["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]},calendarFirstDayOffset:function(){var t=this.currentCalendarMonth;return t?t.first_weekday:0},orderStrategyFilters:function(){var t,a=Array.isArray(this.pendingOrders)?this.pendingOrders:[],e=new Map,s=(0,o.A)(a);try{for(s.s();!(t=s.n()).done;){var r=t.value,n=r&&r.strategy_id;if(void 0!==n&&null!==n&&!e.has(String(n))){var i=r&&r.strategy_name?String(r.strategy_name):"",l=i?"".concat(i," (ID: ").concat(n,")"):"ID: ".concat(n);e.set(String(n),{text:l,value:String(n)})}}}catch(d){s.e(d)}finally{s.f()}return Array.from(e.values()).sort(function(t,a){return String(t.text).localeCompare(String(a.text))})},columns:function(){var t=this;return[{title:this.$t("dashboard.table.time"),dataIndex:"created_at",scopedSlots:{customRender:"time"},width:150},{title:this.$t("dashboard.table.symbol"),dataIndex:"symbol",width:100},{title:this.$t("dashboard.table.type"),dataIndex:"type",scopedSlots:{customRender:"type"},width:90},{title:this.$t("dashboard.table.price"),dataIndex:"price",customRender:function(a){return t.formatNumber(a)},width:100},{title:this.$t("dashboard.table.profit"),dataIndex:"profit",scopedSlots:{customRender:"profit"},align:"right",width:100}]},positionColumns:function(){var t=this;return[{title:this.$t("dashboard.table.symbol"),dataIndex:"symbol",scopedSlots:{customRender:"symbol"}},{title:this.$t("dashboard.table.side"),dataIndex:"side",scopedSlots:{customRender:"side"}},{title:this.$t("dashboard.table.size"),dataIndex:"size",customRender:function(a){return t.formatNumber(a,4)}},{title:this.$t("dashboard.table.entryPrice"),dataIndex:"entry_price",customRender:function(a){return t.formatNumber(a)}},{title:this.$t("dashboard.table.pnl"),dataIndex:"unrealized_pnl",scopedSlots:{customRender:"unrealized_pnl"},align:"right"}]},orderColumns:function(){return[{title:this.$t("dashboard.orderTable.strategy"),dataIndex:"strategy_name",scopedSlots:{customRender:"strategy_name"},filters:this.orderStrategyFilters,filterMultiple:!0,onFilter:function(t,a){return String(a&&a.strategy_id)===String(t)},width:150},{title:this.$t("dashboard.orderTable.exchange"),dataIndex:"exchange_id",scopedSlots:{customRender:"exchange"},width:120},{title:this.$t("dashboard.orderTable.notify"),dataIndex:"notify_channels",scopedSlots:{customRender:"notify"},width:100},{title:this.$t("dashboard.orderTable.symbol"),dataIndex:"symbol",scopedSlots:{customRender:"symbol"},width:110},{title:this.$t("dashboard.orderTable.signalType"),dataIndex:"signal_type",scopedSlots:{customRender:"signal_type"},width:100},{title:this.$t("dashboard.orderTable.amount"),dataIndex:"amount",scopedSlots:{customRender:"amount"},width:130},{title:this.$t("dashboard.orderTable.price"),dataIndex:"filled_price",scopedSlots:{customRender:"price"},width:100},{title:this.$t("dashboard.orderTable.status"),dataIndex:"status",scopedSlots:{customRender:"status"},width:130},{title:this.$t("dashboard.orderTable.timeInfo"),dataIndex:"created_at",scopedSlots:{customRender:"time_info"},width:160}]}}),mounted:function(){this.fetchData(),this.fetchPendingOrders(),this.startOrderPolling(),window.addEventListener("resize",this.handleResize)},beforeDestroy:function(){this.stopOrderPolling(),window.removeEventListener("resize",this.handleResize),this.pieChart&&this.pieChart.dispose(),this.drawdownChart&&this.drawdownChart.dispose(),this.hourlyChart&&this.hourlyChart.dispose()},methods:{fetchData:function(){var t=this;return(0,i.A)((0,n.A)().m(function a(){var e;return(0,n.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,h();case 1:e=a.v,1===e.code&&(t.summary=(0,d.A)((0,d.A)({},t.summary),e.data),t.$nextTick(function(){t.initCharts()})),a.n=3;break;case 2:a.p=2,a.v;case 3:return a.a(2)}},a,null,[[0,2]])}))()},fetchPendingOrders:function(t,a){var e=this;return(0,i.A)((0,n.A)().m(function s(){var r,i,o,l;return(0,n.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return e.ordersLoading=!0,s.p=1,r=t||e.ordersPagination.current||1,i=a||e.ordersPagination.pageSize||20,s.n=2,f({page:r,pageSize:i});case 2:o=s.v,1===o.code&&(l=o.data||{},e.pendingOrders=l.list||[],e.ordersPagination.current=Number(l.page||r||1),e.ordersPagination.pageSize=Number(l.pageSize||i||20),e.ordersPagination.total=Number(l.total||0)),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.p=4,e.ordersLoading=!1,s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},playOrderBeep:function(){if(this.soundEnabled)try{var t=window.AudioContext||window.webkitAudioContext;if(!t)return;this.beepCtx||(this.beepCtx=new t);var a=this.beepCtx;"suspended"===a.state&&"function"===typeof a.resume&&a.resume().catch(function(){});var e=function(t,e){var s=a.createOscillator(),r=a.createGain();s.type="sine",s.frequency.value=e,r.gain.value=.08,s.connect(r),r.connect(a.destination),s.start(t),s.stop(t+.12)},s=a.currentTime;e(s,880),e(s+.18,1100)}catch(r){}},startOrderPolling:function(){var t=this;this.stopOrderPolling(),this.initLastOrderId(),this.orderPollTimer=setInterval(function(){t.pollNewOrders()},this.orderPollIntervalMs)},stopOrderPolling:function(){this.orderPollTimer&&(clearInterval(this.orderPollTimer),this.orderPollTimer=null)},initLastOrderId:function(){var t=this;return(0,i.A)((0,n.A)().m(function a(){var e;return(0,n.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,f({page:1,pageSize:1});case 1:e=a.v,1===e.code&&e.data&&e.data.list&&e.data.list.length>0&&(t.lastOrderId=e.data.list[0].id||0),a.n=3;break;case 2:a.p=2,a.v;case 3:return a.a(2)}},a,null,[[0,2]])}))()},pollNewOrders:function(){var t=this;return(0,i.A)((0,n.A)().m(function a(){var e,s,r,i,l,d,c,u;return(0,n.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,f({page:1,pageSize:10});case 1:if(e=a.v,1===e.code&&e.data&&e.data.list){a.n=2;break}return a.a(2);case 2:if(s=e.data.list||[],0!==s.length){a.n=3;break}return a.a(2);case 3:r=!1,i=t.lastOrderId,l=(0,o.A)(s);try{for(l.s();!(d=l.n()).done;)c=d.value,u=c.id||0,u>t.lastOrderId&&(r=!0,u>i&&(i=u))}catch(n){l.e(n)}finally{l.f()}r&&(t.lastOrderId=i,t.playOrderBeep(),t.fetchPendingOrders(),t.$notification.info({message:t.$t("dashboard.newOrderNotify"),description:t.$t("dashboard.newOrderDesc"),duration:4})),a.n=5;break;case 4:a.p=4,a.v;case 5:return a.a(2)}},a,null,[[0,4]])}))()},toggleSound:function(){this.soundEnabled=!this.soundEnabled,this.soundEnabled?this.$message.success(this.$t("dashboard.soundEnabled")):this.$message.info(this.$t("dashboard.soundDisabled"))},handleOrdersTableChange:function(t){var a=t&&t.current?t.current:1,e=t&&t.pageSize?t.pageSize:this.ordersPagination.pageSize||20;this.ordersPagination.current=a,this.ordersPagination.pageSize=e,this.fetchPendingOrders(a,e)},getTypeClass:function(t){if(!t)return"";var a=t.toLowerCase();return a.includes("open_long")||a.includes("add_long")?"long":a.includes("open_short")||a.includes("add_short")?"short":a.includes("close_long")?"close-long":a.includes("close_short")?"close-short":""},getSignalTypeColor:function(t){return t?(t=t.toLowerCase(),t.includes("open_long")||t.includes("add_long")?"green":t.includes("open_short")||t.includes("add_short")?"red":t.includes("close_long")?"orange":t.includes("close_short")?"purple":"blue"):"default"},getSignalTypeText:function(t){if(!t)return"-";var a={open_long:this.$t("dashboard.signalType.openLong"),open_short:this.$t("dashboard.signalType.openShort"),close_long:this.$t("dashboard.signalType.closeLong"),close_short:this.$t("dashboard.signalType.closeShort"),add_long:this.$t("dashboard.signalType.addLong"),add_short:this.$t("dashboard.signalType.addShort")};return a[t.toLowerCase()]||t.toUpperCase()},getStatusColor:function(t){var a={pending:"orange",processing:"blue",completed:"green",failed:"red",cancelled:"default"};return a[t]||"default"},getStatusText:function(t){if(!t)return"-";var a={pending:this.$t("dashboard.status.pending"),processing:this.$t("dashboard.status.processing"),completed:this.$t("dashboard.status.completed"),failed:this.$t("dashboard.status.failed"),cancelled:this.$t("dashboard.status.cancelled")};return a[t.toLowerCase()]||t.toUpperCase()},getNotifyIconType:function(t){var a=String(t||"").trim().toLowerCase(),e={browser:"bell",webhook:"link",discord:"comment",telegram:"message",tg:"message",tele:"message",email:"mail",phone:"phone"};return e[a]||"notification"},getExchangeTagColor:function(t){var a=String(t||"").trim().toLowerCase(),e={binance:"gold",okx:"purple",bitget:"cyan",signal:"geekblue"};return e[a]||"blue"},formatNumber:function(t){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return void 0===t||null===t?"0.00":Number(t).toLocaleString("en-US",{minimumFractionDigits:a,maximumFractionDigits:a})},formatProfitValue:function(t,a){if(null===t||void 0===t)return"--";var e=parseFloat(t),s=["open_long","open_short","add_long","add_short"];if(0===e&&a&&s.includes(a.type))return"--";if(Math.abs(e)<1e-6)return a&&s.includes(a.type)?"--":"$0.00";var r=e>=0?"+":"";return"".concat(r,"$").concat(this.formatNumber(e))},formatCompactNumber:function(t){if(void 0===t||null===t)return"0";var a=Math.abs(t);return a>=1e6?(t/1e6).toFixed(1)+"M":a>=1e3?(t/1e3).toFixed(1)+"k":a>=100?Math.round(t):t.toFixed(0)},prevMonth:function(){this.currentCalendarIndex0&&this.currentCalendarIndex--},getDayProfit:function(t){var a=this.currentCalendarMonth;if(!a||!a.days)return null;var e=String(t).padStart(2,"0");return void 0!==a.days[e]?a.days[e]:null},getDayClass:function(t){var a=this.getDayProfit(t);return null===a?"no-data":a>0?"profit":a<0?"loss":"zero"},formatTime:function(t){if(!t)return"-";try{var a;if("string"===typeof t&&t.includes("-")&&t.includes(":"))a=new Date(t);else{if(!("number"===typeof t||"string"===typeof t&&/^\d+$/.test(t)))return"-";var e="string"===typeof t?parseInt(t,10):t,s=e<1e12?1e3*e:e;a=new Date(s)}return isNaN(a.getTime())?"-":a.toLocaleString()}catch(r){return"-"}},initCharts:function(){this.initPieChart(),this.initDrawdownChart(),this.initHourlyChart()},initPieChart:function(){var t=this,a=this.$refs.pieChart;if(a){this.pieChart=c.Ts(a);var e=Array.isArray(this.summary.strategy_stats)?this.summary.strategy_stats:[],s=Array.isArray(this.summary.strategy_pnl_chart)?this.summary.strategy_pnl_chart:[],r=[];r=e.length>0?e.map(function(t){var a=t&&t.strategy_name?String(t.strategy_name):"-",e=Number(t&&t.total_pnl?t.total_pnl:0),s=Number(t&&t.total_trades?t.total_trades:0),r=0!==e?Math.abs(e):s;return{name:a,value:r,signedValue:e,trades:s}}).filter(function(t){return t.value>0}):s.map(function(t){var a=t&&t.name?String(t.name):"-",e=Number(t&&t.value?t.value:0);return{name:a,value:Math.abs(e),signedValue:e}}).filter(function(t){return t.value>0});var n=this.isDarkTheme,i=n?"#9ca3af":"#6b7280",o=[new c.fA.W4(0,0,1,1,[{offset:0,color:"#3b82f6"},{offset:1,color:"#1d4ed8"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#8b5cf6"},{offset:1,color:"#6d28d9"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#10b981"},{offset:1,color:"#059669"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#f59e0b"},{offset:1,color:"#d97706"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#ec4899"},{offset:1,color:"#be185d"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#06b6d4"},{offset:1,color:"#0891b2"}])],l={backgroundColor:"transparent",tooltip:{trigger:"item",backgroundColor:n?"rgba(17, 24, 39, 0.95)":"rgba(255, 255, 255, 0.95)",borderColor:n?"#374151":"#e5e7eb",textStyle:{color:n?"#f3f4f6":"#1f2937"},formatter:function(a){var e=a&&a.data&&"number"===typeof a.data.signedValue?a.data.signedValue:0,s=(e>=0?"+":"")+t.formatNumber(e,2),r=e>=0?"#10b981":"#ef4444";return'\n
\n
'.concat(a.name,'
\n
占比 ').concat(a.percent,'%
\n
PNL $').concat(s,"
\n
\n ")}},legend:{bottom:10,left:"center",itemWidth:12,itemHeight:12,itemGap:16,textStyle:{color:i,fontSize:11}},color:o,series:[{name:"策略分布",type:"pie",radius:["50%","75%"],center:["50%","45%"],avoidLabelOverlap:!1,itemStyle:{borderRadius:6,borderColor:n?"#1f2937":"#ffffff",borderWidth:3},label:{show:!1},emphasis:{label:{show:!0,fontSize:14,fontWeight:"bold",color:n?"#f3f4f6":"#1f2937"},scaleSize:8},labelLine:{show:!1},data:r.length>0?r:[{value:1,name:this.$t("dashboard.noData"),signedValue:0}]}]};this.pieChart.setOption(l)}},initDrawdownChart:function(){var t=this,a=this.$refs.drawdownChart;if(a){this.drawdownChart=c.Ts(a);var e,s=(this.summary.daily_pnl_chart||[]).map(function(t){return t.date}),r=(this.summary.daily_pnl_chart||[]).map(function(t){return Number(t.profit||0)}),n=[],i=0,l=(0,o.A)(r);try{for(l.s();!(e=l.n()).done;){var d=e.value;i+=Number(d||0),n.push(i)}}catch(y){l.e(y)}finally{l.f()}var u=-1/0,p=0,h=0,f=n.map(function(t,a){u=Math.max(u,t);var e=Number((t-u).toFixed(2));return e\n
').concat(s,'
\n
\n \n \n ').concat(t.$t("dashboard.drawdown")||"Drawdown",'\n \n -$').concat(n,'\n
\n
\n
\n
\n \n ')}},grid:{left:55,right:20,bottom:35,top:20,containLabel:!1},xAxis:{type:"category",data:s,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:g,fontSize:10,formatter:function(t){return t.slice(5)}}},yAxis:{type:"value",axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:g,fontSize:10,formatter:function(t){return Math.abs(t)>=1e3?"-$"+(Math.abs(t)/1e3).toFixed(1)+"k":0===t?"0":"-$"+Math.abs(t)}},splitLine:{lineStyle:{color:v,type:[4,4]}},max:0},series:[{name:this.$t("dashboard.drawdown")||"Drawdown",type:"line",data:f,smooth:.3,showSymbol:!1,lineStyle:{width:2.5,color:new c.fA.W4(0,0,1,0,[{offset:0,color:"#ef4444"},{offset:.5,color:"#f87171"},{offset:1,color:"#fca5a5"}]),shadowColor:"rgba(239, 68, 68, 0.4)",shadowBlur:8,shadowOffsetY:4},areaStyle:{color:new c.fA.W4(0,0,0,1,[{offset:0,color:m?"rgba(239, 68, 68, 0.4)":"rgba(239, 68, 68, 0.25)"},{offset:.5,color:m?"rgba(248, 113, 113, 0.15)":"rgba(248, 113, 113, 0.1)"},{offset:1,color:"transparent"}])},markPoint:p<0?{symbol:"pin",symbolSize:45,itemStyle:{color:new c.fA.W4(0,0,0,1,[{offset:0,color:"#f87171"},{offset:1,color:"#dc2626"}]),shadowColor:"rgba(239, 68, 68, 0.5)",shadowBlur:10},label:{show:!0,color:"#fff",fontSize:10,fontWeight:"bold",formatter:function(){return t.$t("dashboard.label.maxDrawdownPoint")||"MAX"}},data:[{name:this.$t("dashboard.maxDrawdown")||"Max Drawdown",coord:[h,p]}]}:void 0,markLine:{silent:!0,symbol:"none",lineStyle:{color:m?"#52525b":"#a1a1aa",type:"dashed",width:1},data:[{yAxis:0}],label:{show:!1}}}]};this.drawdownChart.setOption(b)}},initHourlyChart:function(){var t=this,a=this.$refs.hourlyChart;if(a){this.hourlyChart=c.Ts(a);var e=this.summary.hourly_distribution||[],s=e.map(function(t){return"".concat(String(t.hour).padStart(2,"0"),":00")}),r=e.map(function(t){return t.count||0}),n=e.map(function(t){return t.profit||0}),i=this.isDarkTheme,l=i?"#9ca3af":"#6b7280",d=i?"rgba(75, 85, 99, 0.3)":"rgba(229, 231, 235, 0.8)",u={backgroundColor:"transparent",tooltip:{trigger:"axis",backgroundColor:i?"rgba(17, 24, 39, 0.95)":"rgba(255, 255, 255, 0.95)",borderColor:i?"#374151":"#e5e7eb",textStyle:{color:i?"#f3f4f6":"#1f2937"},formatter:function(a){var e,s=Array.isArray(a)?a:[],r=s[0]&&s[0].axisValue?s[0].axisValue:"",n=0,d=0,c=t.$t("dashboard.tradeCount")||"Trade Count",u=t.$t("dashboard.profit")||"Profit",p=t.$t("dashboard.unit.trades")||"",h=(0,o.A)(s);try{for(h.s();!(e=h.n()).done;){var f=e.value;f.seriesName===c&&(n=f.data||0),f.seriesName===u&&(d=f.data||0)}}catch(v){h.e(v)}finally{h.f()}var m=d>=0?"#10b981":"#ef4444",g=(d>=0?"+":"")+t.formatNumber(d,2);return'\n
\n
'.concat(r,'
\n
').concat(c,' ').concat(n," ").concat(p,'
\n
').concat(u,' $').concat(g,"
\n
\n ")}},grid:{left:50,right:20,bottom:30,top:10,containLabel:!1},xAxis:{type:"category",data:s,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:l,fontSize:10,interval:3}},yAxis:{type:"value",axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:l,fontSize:10},splitLine:{lineStyle:{color:d,type:"dashed"}}},series:[{name:this.$t("dashboard.tradeCount")||"Trade Count",type:"bar",data:r,barMaxWidth:16,itemStyle:{borderRadius:[3,3,0,0],color:new c.fA.W4(0,0,0,1,[{offset:0,color:"#60a5fa"},{offset:1,color:"#3b82f6"}])}},{name:this.$t("dashboard.profit")||"Profit",type:"line",data:n,smooth:!0,showSymbol:!1,lineStyle:{width:2,color:"#a855f7"}}]};this.hourlyChart.setOption(u)}},handleResize:function(){this.pieChart&&this.pieChart.resize(),this.drawdownChart&&this.drawdownChart.resize(),this.hourlyChart&&this.hourlyChart.resize()}}},v=g,b=e(845),y=(0,b.A)(v,s,r,!1,null,"16dc1b35",null),_=y.exports}}]); \ No newline at end of file diff --git a/frontend/dist/js/407-legacy.5cf8d721.js b/frontend/dist/js/407-legacy.5cf8d721.js deleted file mode 100644 index 65a68e3..0000000 --- a/frontend/dist/js/407-legacy.5cf8d721.js +++ /dev/null @@ -1,18 +0,0 @@ -(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[407],{24396:function(t,e,i){"use strict";i.r(e),i.d(e,{default:function(){return ua}});i(52675),i(89463),i(62010),i(9868);var n=function(){var t=this,e=t._self._c;return e("div",{staticClass:"chart-container",class:{"theme-dark":t.isDarkTheme}},[e("div",{staticClass:"chart-header"},[e("div",{staticClass:"header-top"},[e("div",{staticClass:"header-left"},[e("div",{staticClass:"search-section"},[e("a-select",{staticClass:"symbol-select",attrs:{"show-search":"",placeholder:t.$t("dashboard.indicator.selectSymbol"),dropdownClassName:"dark-dropdown","filter-option":t.filterSymbolOption,"not-found-content":null,open:t.symbolSearchOpen},on:{search:t.handleSymbolSearch,change:t.handleSymbolSelect,dropdownVisibleChange:t.handleDropdownVisibleChange},model:{value:t.searchSymbol,callback:function(e){t.searchSymbol=e},expression:"searchSymbol"}},[e("a-icon",{staticStyle:{color:"#999"},attrs:{slot:"suffixIcon",type:"search"},slot:"suffixIcon"}),t._l(t.symbolSuggestions,function(i){return e("a-select-option",{key:i.value,attrs:{value:i.value}},[e("div",{staticClass:"symbol-option"},[e("a-tag",{staticStyle:{"margin-right":"8px","margin-bottom":"0"},attrs:{color:t.getMarketColor(i.market)}},[t._v(" "+t._s(t.getMarketName(i.market))+" ")]),e("span",{staticClass:"symbol-name"},[t._v(t._s(i.symbol))]),i.name?e("span",{staticClass:"symbol-name-extra"},[t._v(t._s(i.name))]):t._e()],1)])}),e("a-select-option",{key:"add-stock-option",staticClass:"add-stock-option",attrs:{value:"__add_stock_option__"}},[e("div",{staticStyle:{width:"100%","text-align":"center",padding:"4px 0",color:"#1890ff",cursor:"pointer"}},[e("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"plus"}}),e("span",[t._v(t._s(t.$t("dashboard.analysis.watchlist.add")))])],1)])],2)],1),e("div",{staticClass:"timeframe-group"},t._l(["1m","5m","15m","30m","1H","4H","1D","1W"],function(i){return e("div",{key:i,staticClass:"timeframe-item",class:{active:t.timeframe===i},on:{click:function(e){return t.setTimeframe(i)}}},[t._v(" "+t._s(i)+" ")])}),0)]),t.currentSymbol?e("div",{staticClass:"current-symbol"},[e("div",{staticClass:"symbol-info"},[e("span",{staticClass:"symbol-label"},[t._v(t._s(t.currentSymbol))]),e("span",{staticClass:"market-tag"},[t._v(t._s(t.currentMarket))])]),e("div",{staticClass:"price-info",class:t.priceChangeClass},[e("span",{staticClass:"symbol-price"},[t._v(t._s(t.currentPrice))]),e("span",{staticClass:"symbol-change"},[t._v(" "+t._s(t.priceChange>0?"+":"")+t._s(t.priceChange.toFixed(2))+"% ")])]),t.isCryptoMarket?e("a-button",{staticClass:"qt-header-btn",attrs:{size:"small"},on:{click:t.openQuickTrade}},[e("a-icon",{attrs:{type:"thunderbolt",theme:"filled"}}),t._v(" "+t._s(t.$t("quickTrade.openPanel"))+" ")],1):t._e()],1):t._e()])]),e("div",{staticClass:"chart-content"},[e("div",{staticClass:"chart-main-row"},[t.currentSymbol?e("div",{staticClass:"mobile-symbol-price"},[e("div",{staticClass:"mobile-symbol-info"},[e("span",{staticClass:"mobile-market-tag"},[t._v(t._s(t.currentMarket))]),e("span",[t._v("-")]),e("span",{staticClass:"mobile-symbol-label"},[t._v(t._s(t.currentSymbol))])]),e("div",{staticClass:"mobile-price-info",class:t.priceChangeClass},[e("span",{staticClass:"mobile-symbol-price"},[t._v(t._s(t.currentPrice))]),e("span",{staticClass:"mobile-symbol-change"},[t._v(" "+t._s(t.priceChange>0?"+":"")+t._s(t.priceChange.toFixed(2))+"% ")])])]):t._e(),e("kline-chart",{ref:"klineChart",attrs:{symbol:t.currentSymbol,market:t.currentMarket,timeframe:t.timeframe,theme:t.chartTheme,activeIndicators:t.activeIndicators,realtimeEnabled:t.realtimeEnabled},on:{"price-change":t.handlePriceChange,retry:t.handleChartRetry,"indicator-toggle":t.handleIndicatorToggle}}),e("div",{staticClass:"chart-right"},[e("div",{staticClass:"indicators-panel"},[e("div",{staticClass:"panel-header"},[e("span",[t._v(t._s(t.$t("dashboard.indicator.panel.title")))]),e("div",{staticStyle:{display:"flex","align-items":"center","margin-left":"auto",gap:"8px"}},[t.isMobile?e("a-button",{staticClass:"mobile-header-create-btn",attrs:{type:"primary",size:"small",icon:"plus"},on:{click:t.handleCreateIndicator}},[t._v(" "+t._s(t.$t("dashboard.indicator.create"))+" ")]):t._e(),e("a-tooltip",{attrs:{title:t.realtimeEnabled?t.$t("dashboard.indicator.panel.realtimeOn"):t.$t("dashboard.indicator.panel.realtimeOff")}},[e("a-button",{staticClass:"realtime-toggle-btn",class:{active:t.realtimeEnabled},attrs:{type:"text"},on:{click:t.toggleRealtime}},[e("a-icon",{attrs:{type:t.realtimeEnabled?"sync":"pause-circle",spin:t.realtimeEnabled}})],1)],1)],1)]),e("div",{staticClass:"panel-body"},[t.isMobile?[e("div",{staticClass:"mobile-tab-content"},[e("div",{staticClass:"section-content custom-scrollbar"},[t._l(t.customIndicators,function(i){return e("div",{key:"custom-"+i.id,class:["indicator-card",{"indicator-active":t.isIndicatorActive("custom-"+i.id)}],on:{click:function(e){return t.toggleIndicator(i,"custom")}}},[e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-header"},[e("span",{staticClass:"card-name"},[t._v(t._s(i.name))]),e("div",{staticClass:"card-actions"},[e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.action.edit")}},[e("a-icon",{staticClass:"action-icon edit-icon",attrs:{type:"edit"},on:{click:function(e){return e.stopPropagation(),t.handleEditIndicator(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.action.delete")}},[e("a-icon",{staticClass:"action-icon delete-icon",attrs:{type:"delete"},on:{click:function(e){return e.stopPropagation(),t.handleDeleteIndicator(i)}}})],1),e("a-tooltip",{attrs:{title:t.isIndicatorActive("custom-"+i.id)?t.$t("dashboard.indicator.action.stop"):t.$t("dashboard.indicator.action.start")}},[e("a-icon",{class:["action-icon","toggle-icon",{active:t.isIndicatorActive("custom-"+i.id)}],attrs:{type:t.isIndicatorActive("custom-"+i.id)?"pause-circle":"play-circle"},on:{click:function(e){return e.stopPropagation(),t.toggleIndicator(i,"custom")}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.title")}},[e("a-icon",{staticClass:"action-icon backtest-icon",attrs:{type:"experiment"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktest(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.historyTitle")}},[e("a-icon",{staticClass:"action-icon backtest-history-icon",attrs:{type:"clock-circle"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktestHistory(i)}}})],1),e("a-tooltip",{attrs:{title:i.publish_to_community?t.$t("dashboard.indicator.action.unpublish"):t.$t("dashboard.indicator.action.publish")}},[e("a-icon",{class:["action-icon","publish-icon",{published:i.publish_to_community}],attrs:{type:i.publish_to_community?"cloud":"cloud-upload"},on:{click:function(e){return e.stopPropagation(),t.handlePublishIndicator(i)}}})],1)],1)]),e("span",{staticClass:"card-desc"},[t._v(t._s(i.description||""))])])])}),0===t.customIndicators.length?e("div",{staticClass:"empty-indicators"},[e("a-icon",{attrs:{type:"info-circle"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.empty")))])],1):t._e()],2)])]:[e("div",{staticClass:"indicator-section",class:{"section-empty":0===t.customIndicators.length}},[e("div",{staticClass:"section-label"},[e("div",{staticClass:"section-label-left",on:{click:t.toggleCustomSection}},[e("a-icon",{staticClass:"collapse-icon",attrs:{type:t.customSectionCollapsed?"right":"down"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.section.myCreated"))+" ("+t._s(t.customIndicators.length)+")")])],1),e("a-button",{staticClass:"create-indicator-btn",attrs:{type:"primary",size:"small",icon:"plus"},on:{click:function(e){return e.stopPropagation(),t.handleCreateIndicator.apply(null,arguments)}}},[t._v(" "+t._s(t.$t("dashboard.indicator.create"))+" ")])],1),e("div",{directives:[{name:"show",rawName:"v-show",value:!t.customSectionCollapsed,expression:"!customSectionCollapsed"}],staticClass:"section-content custom-scrollbar"},[t._l(t.customIndicators,function(i){return e("div",{key:"custom-"+i.id,class:["indicator-card",{"indicator-active":t.isIndicatorActive("custom-"+i.id)}],on:{click:function(e){return t.toggleIndicator(i,"custom")}}},[e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-header"},[e("span",{staticClass:"card-name"},[t._v(t._s(i.name))]),e("div",{staticClass:"card-actions"},[e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.action.edit")}},[e("a-icon",{staticClass:"action-icon edit-icon",attrs:{type:"edit"},on:{click:function(e){return e.stopPropagation(),t.handleEditIndicator(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.action.delete")}},[e("a-icon",{staticClass:"action-icon delete-icon",attrs:{type:"delete"},on:{click:function(e){return e.stopPropagation(),t.handleDeleteIndicator(i)}}})],1),e("a-tooltip",{attrs:{title:t.isIndicatorActive("custom-"+i.id)?t.$t("dashboard.indicator.action.stop"):t.$t("dashboard.indicator.action.start")}},[e("a-icon",{class:["action-icon","toggle-icon",{active:t.isIndicatorActive("custom-"+i.id)}],attrs:{type:t.isIndicatorActive("custom-"+i.id)?"pause-circle":"play-circle"},on:{click:function(e){return e.stopPropagation(),t.toggleIndicator(i,"custom")}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.title")}},[e("a-icon",{staticClass:"action-icon backtest-icon",attrs:{type:"experiment"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktest(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.historyTitle")}},[e("a-icon",{staticClass:"action-icon backtest-history-icon",attrs:{type:"clock-circle"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktestHistory(i)}}})],1),e("a-tooltip",{attrs:{title:i.publish_to_community?t.$t("dashboard.indicator.action.unpublish"):t.$t("dashboard.indicator.action.publish")}},[e("a-icon",{class:["action-icon","publish-icon",{published:i.publish_to_community}],attrs:{type:i.publish_to_community?"cloud":"cloud-upload"},on:{click:function(e){return e.stopPropagation(),t.handlePublishIndicator(i)}}})],1)],1)]),e("span",{staticClass:"card-desc"},[t._v(t._s(i.description||""))])])])}),0===t.customIndicators.length?e("div",{staticClass:"empty-indicators"},[e("a-icon",{attrs:{type:"info-circle"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.empty")))])],1):t._e()],2)]),e("div",{staticClass:"indicator-section",class:{"section-empty":0===t.purchasedIndicators.length}},[e("div",{staticClass:"section-label"},[e("div",{staticClass:"section-label-left",on:{click:function(e){t.purchasedSectionCollapsed=!t.purchasedSectionCollapsed}}},[e("a-icon",{staticClass:"collapse-icon",attrs:{type:t.purchasedSectionCollapsed?"right":"down"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.section.purchased"))+" ("+t._s(t.purchasedIndicators.length)+")")])],1),e("a-button",{staticClass:"buy-indicator-btn",attrs:{type:"link",size:"small",icon:"shop"},on:{click:function(e){return e.stopPropagation(),t.goToIndicatorMarket.apply(null,arguments)}}},[t._v(" "+t._s(t.$t("menu.dashboard.community"))+" ")])],1),e("div",{directives:[{name:"show",rawName:"v-show",value:!t.purchasedSectionCollapsed,expression:"!purchasedSectionCollapsed"}],staticClass:"section-content custom-scrollbar"},[t._l(t.purchasedIndicators,function(i){return e("div",{key:"purchased-"+i.id,class:["indicator-card","purchased-indicator",{"indicator-active":t.isIndicatorActive("purchased-"+i.id)}],on:{click:function(e){return t.toggleIndicator(i,"purchased")}}},[e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-header"},[e("span",{staticClass:"card-name"},[e("a-icon",{staticClass:"purchased-icon",attrs:{type:"shopping"}}),t._v(" "+t._s(i.name)+" ")],1),e("div",{staticClass:"card-actions"},[e("a-tooltip",{attrs:{title:t.isIndicatorActive("purchased-"+i.id)?t.$t("dashboard.indicator.action.stop"):t.$t("dashboard.indicator.action.start")}},[e("a-icon",{class:["action-icon","toggle-icon",{active:t.isIndicatorActive("purchased-"+i.id)}],attrs:{type:t.isIndicatorActive("purchased-"+i.id)?"pause-circle":"play-circle"},on:{click:function(e){return e.stopPropagation(),t.toggleIndicator(i,"purchased")}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.title")}},[e("a-icon",{staticClass:"action-icon backtest-icon",attrs:{type:"experiment"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktest(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.historyTitle")}},[e("a-icon",{staticClass:"action-icon backtest-history-icon",attrs:{type:"clock-circle"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktestHistory(i)}}})],1)],1)]),e("span",{staticClass:"card-desc"},[t._v(t._s(i.description||""))])])])}),0===t.purchasedIndicators.length?e("div",{staticClass:"empty-indicators"},[e("a-icon",{attrs:{type:"shopping"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.emptyPurchased")))])],1):t._e()],2)])]],2)])])],1),e("indicator-editor",{ref:"indicatorEditor",attrs:{visible:t.showIndicatorEditor,indicator:t.editingIndicator,userId:t.userId},on:{run:t.handleRunIndicator,save:t.handleSaveIndicator,cancel:function(e){t.showIndicatorEditor=!1,t.editingIndicator=null}}}),e("backtest-modal",{attrs:{visible:t.showBacktestModal,userId:t.userId,indicator:t.backtestIndicator,symbol:t.selectedSymbol,market:t.selectedMarket,timeframe:t.selectedTimeframe},on:{cancel:function(e){t.showBacktestModal=!1,t.backtestIndicator=null}}}),e("a-modal",{attrs:{visible:t.showParamsModal,title:t.$t("dashboard.indicator.paramsConfig.title"),confirmLoading:t.loadingParams,width:500,maskClosable:!1,keyboard:!1},on:{ok:t.confirmIndicatorParams,cancel:t.cancelIndicatorParams,afterClose:t.handleParamsModalAfterClose}},[t.pendingIndicator?e("div",{staticClass:"params-config-modal"},[e("div",{staticClass:"indicator-info"},[e("span",{staticClass:"indicator-name"},[t._v(t._s(t.pendingIndicator.name))])]),e("a-divider"),t.indicatorParams.length>0?e("div",{staticClass:"params-form"},t._l(t.indicatorParams,function(i){return e("div",{key:i.name,staticClass:"param-item"},[e("div",{staticClass:"param-header"},[e("label",{staticClass:"param-label"},[t._v(t._s(i.name))]),i.description?e("a-tooltip",{attrs:{title:i.description}},[e("a-icon",{staticStyle:{color:"#999","margin-left":"4px"},attrs:{type:"question-circle"}})],1):t._e()],1),"int"===i.type?e("a-input-number",{staticStyle:{width:"100%"},attrs:{precision:0},model:{value:t.indicatorParamValues[i.name],callback:function(e){t.$set(t.indicatorParamValues,i.name,e)},expression:"indicatorParamValues[param.name]"}}):"float"===i.type?e("a-input-number",{staticStyle:{width:"100%"},attrs:{precision:4},model:{value:t.indicatorParamValues[i.name],callback:function(e){t.$set(t.indicatorParamValues,i.name,e)},expression:"indicatorParamValues[param.name]"}}):"bool"===i.type?e("a-switch",{model:{value:t.indicatorParamValues[i.name],callback:function(e){t.$set(t.indicatorParamValues,i.name,e)},expression:"indicatorParamValues[param.name]"}}):e("a-input",{model:{value:t.indicatorParamValues[i.name],callback:function(e){t.$set(t.indicatorParamValues,i.name,e)},expression:"indicatorParamValues[param.name]"}})],1)}),0):e("a-empty",{attrs:{description:t.$t("dashboard.indicator.paramsConfig.noParams")}})],1):t._e()]),e("backtest-history-drawer",{attrs:{visible:t.showBacktestHistoryDrawer,userId:t.userId,indicatorId:t.backtestHistoryIndicator?t.backtestHistoryIndicator.id:null,symbol:t.selectedSymbol,market:t.selectedMarket,timeframe:t.selectedTimeframe,isMobile:t.isMobile},on:{cancel:function(e){t.showBacktestHistoryDrawer=!1,t.backtestHistoryIndicator=null},view:t.handleViewBacktestRun}}),e("backtest-run-viewer",{attrs:{visible:t.showBacktestRunViewer,run:t.selectedBacktestRun},on:{cancel:function(e){t.showBacktestRunViewer=!1,t.selectedBacktestRun=null}}}),e("a-modal",{attrs:{title:t.publishIndicator&&t.publishIndicator.publish_to_community?t.$t("dashboard.indicator.publish.editTitle"):t.$t("dashboard.indicator.publish.title"),visible:t.showPublishModal,confirmLoading:t.publishing,width:"500px",okText:t.publishIndicator&&t.publishIndicator.publish_to_community?t.$t("dashboard.indicator.publish.update"):t.$t("dashboard.indicator.publish.confirm"),cancelText:t.$t("common.cancel")},on:{ok:t.handleConfirmPublish,cancel:function(e){t.showPublishModal=!1,t.publishIndicator=null}}},[e("a-form-model",{ref:"publishForm",attrs:{model:t.publishForm,rules:t.publishRules,layout:"vertical"}},[e("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"info","show-icon":"",message:t.$t("dashboard.indicator.publish.hint")}}),e("a-form-model-item",{attrs:{label:t.$t("dashboard.indicator.publish.pricingType"),prop:"pricingType"}},[e("a-radio-group",{model:{value:t.publishPricingType,callback:function(e){t.publishPricingType=e},expression:"publishPricingType"}},[e("a-radio",{attrs:{value:"free"}},[t._v(t._s(t.$t("dashboard.indicator.publish.free")))]),e("a-radio",{attrs:{value:"paid"}},[t._v(t._s(t.$t("dashboard.indicator.publish.paid")))])],1)],1),"paid"===t.publishPricingType?e("a-form-model-item",{attrs:{label:t.$t("dashboard.indicator.publish.price"),prop:"price"}},[e("a-input-number",{staticStyle:{width:"200px"},attrs:{min:1,max:1e4,precision:0},model:{value:t.publishPrice,callback:function(e){t.publishPrice=e},expression:"publishPrice"}}),e("span",{staticStyle:{"margin-left":"8px"}},[t._v(t._s(t.$t("community.credits")))])],1):t._e(),"paid"===t.publishPricingType?e("a-form-model-item",{attrs:{label:t.$t("dashboard.indicator.publish.vipFree")}},[e("a-switch",{model:{value:t.publishVipFree,callback:function(e){t.publishVipFree=e},expression:"publishVipFree"}}),e("div",{staticStyle:{"margin-top":"6px",color:"rgba(0,0,0,0.45)","font-size":"12px"}},[t._v(" "+t._s(t.$t("dashboard.indicator.publish.vipFreeHint"))+" ")])],1):t._e(),e("a-form-model-item",{attrs:{label:t.$t("dashboard.indicator.publish.description"),prop:"description"}},[e("a-textarea",{attrs:{placeholder:t.$t("dashboard.indicator.publish.descriptionPlaceholder"),rows:4,maxLength:500},model:{value:t.publishDescription,callback:function(e){t.publishDescription=e},expression:"publishDescription"}})],1),t.publishIndicator&&t.publishIndicator.publish_to_community?e("div",{staticStyle:{"margin-top":"16px"}},[e("a-button",{attrs:{type:"danger",ghost:"",loading:t.unpublishing},on:{click:t.handleUnpublish}},[e("a-icon",{attrs:{type:"close-circle"}}),t._v(" "+t._s(t.$t("dashboard.indicator.publish.unpublish"))+" ")],1)],1):t._e()],1)],1),e("a-modal",{attrs:{title:t.$t("dashboard.analysis.modal.addStock.title"),visible:t.showAddStockModal,confirmLoading:t.addingStock,width:"600px",okText:t.$t("dashboard.analysis.modal.addStock.confirm"),cancelText:t.$t("dashboard.analysis.modal.addStock.cancel")},on:{ok:t.handleAddStock,cancel:t.handleCloseAddStockModal}},[e("div",{staticClass:"add-stock-modal-content"},[e("a-tabs",{staticClass:"market-tabs",on:{change:t.handleMarketTabChange},model:{value:t.selectedMarketTab,callback:function(e){t.selectedMarketTab=e},expression:"selectedMarketTab"}},t._l(t.marketTypes,function(i){return e("a-tab-pane",{key:i.value,attrs:{tab:t.$t(i.i18nKey||"dashboard.analysis.market.".concat(i.value))}})}),1),e("div",{staticClass:"symbol-search-section"},[e("a-input-search",{attrs:{placeholder:t.$t("dashboard.analysis.modal.addStock.searchOrInputPlaceholder"),loading:t.searchingSymbols,size:"large","allow-clear":""},on:{search:t.handleSearchOrInput,change:t.handleSymbolSearchInput},model:{value:t.symbolSearchKeyword,callback:function(e){t.symbolSearchKeyword=e},expression:"symbolSearchKeyword"}},[e("a-button",{attrs:{slot:"enterButton",type:"primary",icon:"search"},slot:"enterButton"},[t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.search"))+" ")])],1)],1),t.symbolSearchResults.length>0?e("div",{staticClass:"search-results-section"},[e("div",{staticClass:"section-title"},[e("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"search"}}),t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.searchResults"))+" ")],1),e("a-list",{staticClass:"symbol-list",attrs:{"data-source":t.symbolSearchResults,loading:t.searchingSymbols,size:"small"},scopedSlots:t._u([{key:"renderItem",fn:function(i){return e("a-list-item",{staticClass:"symbol-list-item",on:{click:function(e){return t.selectSymbol(i)}}},[e("a-list-item-meta",[e("template",{slot:"title"},[e("div",{staticClass:"symbol-item-content"},[e("span",{staticClass:"symbol-code"},[t._v(t._s(i.symbol))]),e("span",{staticClass:"symbol-name"},[t._v(t._s(i.name))]),i.exchange?e("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"blue"}},[t._v(" "+t._s(i.exchange)+" ")]):t._e()],1)])],2)],1)}}],null,!1,1074844145)})],1):t._e(),e("div",{staticClass:"hot-symbols-section"},[e("div",{staticClass:"section-title"},[e("a-icon",{staticStyle:{color:"#ff4d4f","margin-right":"4px"},attrs:{type:"fire"}}),t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.hotSymbols"))+" ")],1),e("a-spin",{attrs:{spinning:t.loadingHotSymbols}},[t.hotSymbols.length>0?e("a-list",{staticClass:"symbol-list",attrs:{"data-source":t.hotSymbols,size:"small"},scopedSlots:t._u([{key:"renderItem",fn:function(i){return e("a-list-item",{staticClass:"symbol-list-item",on:{click:function(e){return t.selectSymbol(i)}}},[e("a-list-item-meta",[e("template",{slot:"title"},[e("div",{staticClass:"symbol-item-content"},[e("span",{staticClass:"symbol-code"},[t._v(t._s(i.symbol))]),e("span",{staticClass:"symbol-name"},[t._v(t._s(i.name))]),i.exchange?e("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"orange"}},[t._v(" "+t._s(i.exchange)+" ")]):t._e()],1)])],2)],1)}}],null,!1,2177647935)}):e("a-empty",{attrs:{description:t.$t("dashboard.analysis.modal.addStock.noHotSymbols"),image:!1}})],1)],1),t.selectedSymbolForAdd?e("div",{staticClass:"selected-symbol-section"},[e("a-alert",{attrs:{message:t.$t("dashboard.analysis.modal.addStock.selectedSymbol"),type:"info","show-icon":"",closable:""},on:{close:function(e){t.selectedSymbolForAdd=null}}},[e("template",{slot:"description"},[e("div",{staticClass:"selected-symbol-info"},[e("a-tag",{staticStyle:{"margin-right":"8px"},attrs:{color:t.getMarketColor(t.selectedSymbolForAdd.market)}},[t._v(" "+t._s(t.$t("dashboard.analysis.market.".concat(t.selectedSymbolForAdd.market)))+" ")]),e("strong",[t._v(t._s(t.selectedSymbolForAdd.symbol))]),t.selectedSymbolForAdd.name?e("span",{staticStyle:{color:"#999","margin-left":"8px"}},[t._v(t._s(t.selectedSymbolForAdd.name))]):e("span",{staticStyle:{color:"#999","margin-left":"8px","font-style":"italic"}},[t._v(t._s(t.$t("dashboard.analysis.modal.addStock.nameWillBeFetched")))])],1)])],2)],1):t._e()],1)])],1),e("a-tooltip",{attrs:{title:t.$t("quickTrade.openPanel"),placement:"left"}},[!t.showQuickTrade&&t.currentSymbol&&t.isCryptoMarket?e("div",{staticClass:"qt-floating-btn",on:{click:t.openQuickTrade}},[e("a-icon",{attrs:{type:"thunderbolt",theme:"filled"}})],1):t._e()]),e("quick-trade-panel",{attrs:{visible:t.showQuickTrade,symbol:t.qtSymbol,"preset-side":t.qtSide,"preset-price":t.qtPrice,source:"indicator","market-type":"swap"},on:{close:function(e){t.showQuickTrade=!1},"order-success":t.onQuickTradeSuccess,"update:symbol":t.handleQuickTradeSymbolChange}})],1)},r=[],a=(i(62621),i(43898)),o=i(68285),s=i(21092),l=i(76959),c=i(17654),u=(i(6011),i(18787)),d=i(57888),h=(i(28706),i(2008),i(50113),i(48980),i(74423),i(48598),i(62062),i(54554),i(79432),i(26099),i(16034),i(38781),i(31415),i(21699),i(47764),i(42762),i(23500),i(62953),i(85471)),p=i(95353),f=i(76471),v=i(64118),g=i(55585),m=function(){var t=this,e=t._self._c;return e("div",[e("a-modal",{staticClass:"indicator-editor-modal",style:t.isMobile?{top:0,paddingBottom:0}:{top:"2%"},attrs:{title:t.$t("dashboard.indicator.editor.title"),visible:t.visible,width:t.isMobile?"100%":"95vw",confirmLoading:t.saving,okText:t.$t("dashboard.indicator.editor.save"),cancelText:t.$t("dashboard.indicator.editor.cancel"),maskClosable:!1,centered:!1},on:{ok:t.handleSave,cancel:t.handleCancel,afterClose:t.handleAfterClose}},[e("div",{staticClass:"editor-content"},[e("a-row",{staticClass:"editor-layout",class:{"mobile-layout":t.isMobile},attrs:{gutter:16}},[e("a-col",{staticClass:"code-editor-column",attrs:{span:24,xs:24,sm:24,md:24}},[e("div",{staticClass:"code-section"},[e("div",{staticClass:"section-header"},[e("div",{staticClass:"header-left"},[e("span",{staticClass:"section-title"},[t._v(t._s(t.$t("dashboard.indicator.editor.code")))])]),e("div",{staticClass:"section-actions"},[e("a-button",{staticStyle:{padding:"0 8px",color:"#52c41a","font-weight":"bold"},attrs:{type:"link",size:"small",loading:t.verifying},on:{click:t.handleVerifyCode}},[e("a-icon",{attrs:{type:"check-circle"}}),t._v(" "+t._s(t.$t("dashboard.indicator.editor.verifyCode"))+" ")],1),e("a-button",{staticStyle:{padding:"0"},attrs:{type:"link",size:"small"},on:{click:t.goToDocs}},[e("a-icon",{attrs:{type:"book"}}),t._v(" "+t._s(t.$t("dashboard.indicator.editor.guide"))+" ")],1)],1)]),e("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"info","show-icon":"",message:t.$t("dashboard.indicator.boundary.message"),description:t.$t("dashboard.indicator.boundary.indicatorRule")}}),e("div",{staticClass:"code-mode-split"},[e("a-row",{staticClass:"code-mode-row",attrs:{gutter:16}},[e("a-col",{staticClass:"code-pane",attrs:{xs:24,sm:24,md:18}},[e("div",{ref:"codeEditorContainer",staticClass:"code-editor-container"})]),e("a-col",{staticClass:"ai-pane",attrs:{xs:24,sm:24,md:6}},[e("div",{staticClass:"ai-panel"},[e("div",{staticClass:"ai-panel-title"},[e("a-icon",{attrs:{type:"robot"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.editor.aiGenerate")))])],1),e("a-textarea",{attrs:{placeholder:t.$t("dashboard.indicator.editor.aiPromptPlaceholder"),rows:12,"auto-size":{minRows:12,maxRows:20}},model:{value:t.aiPrompt,callback:function(e){t.aiPrompt=e},expression:"aiPrompt"}}),e("a-button",{staticStyle:{"margin-top":"10px"},attrs:{type:"primary",block:"",loading:t.aiGenerating,size:"large"},on:{click:t.handleAIGenerate}},[t._v(" "+t._s(t.$t("dashboard.indicator.editor.aiGenerateBtn"))+" ")])],1)])],1)],1)],1)])],1)],1),e("div",{staticClass:"editor-footer",attrs:{slot:"footer"},slot:"footer"},[e("a-button",{on:{click:t.handleCancel}},[t._v(" "+t._s(t.$t("dashboard.indicator.editor.cancel"))+" ")]),e("a-button",{attrs:{type:"primary",loading:t.saving},on:{click:t.handleSave}},[t._v(" "+t._s(t.$t("dashboard.indicator.editor.save"))+" ")])],1)])],1)},y=[],b=i(52074),x=(i(2892),i(27495),i(99449),i(25440),i(11392),i(15237)),_=i.n(x),w=(i(74806),i(55218),i(97923),i(50436),i(74053)),C=i.n(w),S=i(41802),k={name:"IndicatorEditor",props:{visible:{type:Boolean,default:!1},indicator:{type:Object,default:null},userId:{type:Number,default:null}},data:function(){return{saving:!1,codeEditor:null,aiPrompt:"",aiGenerating:!1,verifying:!1,isMobile:!1}},computed:{},watch:{visible:function(t){var e=this;t?this.$nextTick(function(){setTimeout(function(){!e.codeEditor&&e.$refs.codeEditorContainer&&e.initCodeEditor(),e.initFormData()},200)}):this.codeEditor&&this.codeEditor.refresh()},indicator:{handler:function(t){var e=this;t&&this.visible&&this.$nextTick(function(){setTimeout(function(){e.initFormData()},100)})},deep:!0}},mounted:function(){var t=this;this.checkMobile(),window.addEventListener("resize",this.checkMobile),this.visible&&this.$nextTick(function(){setTimeout(function(){t.initCodeEditor()},100)})},beforeDestroy:function(){if(window.removeEventListener("resize",this.checkMobile),this.codeEditor)try{if("function"===typeof this.codeEditor.toTextArea)this.codeEditor.toTextArea();else if("function"===typeof this.codeEditor.getWrapperElement){var t=this.codeEditor.getWrapperElement();t&&t.parentNode&&t.parentNode.removeChild(t)}}catch(e){}finally{this.codeEditor=null}},methods:{getDefaultIndicatorCode:function(){return'#Demo Code:\n#my_indicator_name = "My Buy/Sell Indicator"\n#my_indicator_description = "Buy/Sell only; execution is normalized in backend."\n\n#df = df.copy()\n#sma = df["close"].rolling(14).mean()\n#buy = (df["close"] > sma) & (df["close"].shift(1) <= sma.shift(1))\n#sell = (df["close"] < sma) & (df["close"].shift(1) >= sma.shift(1))\n#df["buy"] = buy.fillna(False).astype(bool)\n#df["sell"] = sell.fillna(False).astype(bool)\n\n#buy_marks = [df["low"].iloc[i] * 0.995 if df["buy"].iloc[i] else None for i in range(len(df))]\n#sell_marks = [df["high"].iloc[i] * 1.005 if df["sell"].iloc[i] else None for i in range(len(df))]\n\n#output = {\n# "name": my_indicator_name,\n# "plots": [],\n# "signals": [\n# {"type": "buy", "text": "B", "data": buy_marks, "color": "#00E676"},\n# {"type": "sell", "text": "S", "data": sell_marks, "color": "#FF5252"}\n# ]\n#}\n'},checkMobile:function(){this.isMobile=window.innerWidth<=768},goToDocs:function(){window.open("https://github.com/brokermr810/QuantDinger/blob/main/docs/STRATEGY_DEV_GUIDE.md","_blank")},handleVerifyCode:function(){var t=this,e=this.codeEditor?this.codeEditor.getValue():"";e&&e.trim()?(this.verifying=!0,(0,f.Ay)({url:"/api/indicator/verifyCode",method:"post",data:{code:e}}).then(function(e){if(1===e.code){var i=e.data||{};t.$message.success("".concat(t.$t("dashboard.indicator.editor.verifyCodeSuccess")," (").concat(i.plots_count||0," plots, ").concat(i.signals_count||0," signals)"))}else{var n=e.data||{};t.$error({title:t.$t("dashboard.indicator.editor.verifyCodeFailed"),width:600,content:function(t){return t("div",[t("p",{style:{fontWeight:"bold",color:"#ff4d4f"}},e.msg),n.details?t("pre",{style:{background:"#f5f5f5",padding:"8px",overflow:"auto",maxHeight:"300px",marginTop:"8px",fontSize:"12px",fontFamily:"monospace"}},n.details):null])}})}}).catch(function(e){t.$message.error("Request Failed: "+(e.message||"Unknown Error"))}).finally(function(){t.verifying=!1})):this.$message.warning(this.$t("dashboard.indicator.editor.verifyCodeEmpty"))},cleanMarkdownCodeBlocks:function(t){if(!t||"string"!==typeof t)return t;var e=t.trim(),i=/```/.test(e);return i?(e=e.replace(/^```[\w]*\s*\n?/i,""),e.startsWith("```")&&(e=e.replace(/^```\s*\n?/g,"")),e.endsWith("```")&&(e=e.replace(/\n?```\s*$/g,"")),e=e.replace(/^\s*```[\w]*\s*$/gm,""),e=e.replace(/^\s*```\s*$/gm,""),e=e.replace(/\n{3,}/g,"\n\n"),e=e.trim(),e):e},initFormData:function(){var t=this;if(this.visible){var e=this.indicator&&this.indicator.code||"";e&&String(e).trim()||(e=this.getDefaultIndicatorCode()),this.$nextTick(function(){setTimeout(function(){t.aiPrompt="",t.codeEditor&&(t.codeEditor.setValue(e),t.codeEditor.refresh())},50)})}},initCodeEditor:function(){var t=this;if(this.$refs.codeEditorContainer){if(this.codeEditor){try{if("function"===typeof this.codeEditor.toTextArea)this.codeEditor.toTextArea();else if("function"===typeof this.codeEditor.getWrapperElement){var e=this.codeEditor.getWrapperElement();e&&e.parentNode&&e.parentNode.removeChild(e)}}catch(i){}this.codeEditor=null}try{this.$refs.codeEditorContainer.innerHTML="",this.codeEditor=_()(this.$refs.codeEditorContainer,{value:function(){var e=t.indicator&&t.indicator.code||"";return e&&String(e).trim()?e:t.getDefaultIndicatorCode()}(),mode:"python",theme:"eclipse",lineNumbers:!0,lineWrapping:!0,indentUnit:4,indentWithTabs:!1,smartIndent:!0,matchBrackets:!0,autoCloseBrackets:!0,styleActiveLine:!0,foldGutter:!1,gutters:["CodeMirror-linenumbers"],tabSize:4,viewportMargin:1/0}),this.codeEditor.on("change",function(t){t.getValue()}),this.$nextTick(function(){t.codeEditor&&t.codeEditor.refresh()})}catch(n){}}},handleSave:function(){var t=this.codeEditor?this.codeEditor.getValue():"",e=t||"";e.trim()?(this.saving=!0,this.$emit("save",{id:this.indicator?this.indicator.id:0,code:e,userid:this.userId})):this.$message.warning(this.$t("dashboard.indicator.editor.codeRequired"))},handleCancel:function(){this.codeEditor&&this.codeEditor.setValue(""),this.$emit("cancel")},handleAfterClose:function(){var t=this;this.codeEditor&&this.$nextTick(function(){t.codeEditor&&t.codeEditor.refresh()}),this.aiPrompt=""},handleAIGenerate:function(){var t=this;return(0,c.A)((0,l.A)().m(function e(){var i,n,r,a,o,s,c,u,d,h,p,f,v,g,m,y,x,_,w,k,A,T,M,I,E;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.aiPrompt&&t.aiPrompt.trim()){e.n=1;break}return t.$message.warning(t.$t("dashboard.indicator.editor.aiPromptRequired")),e.a(2);case 1:return t.aiGenerating=!0,i="",t.codeEditor&&(i=t.codeEditor.getValue()||""),t.codeEditor&&(t.codeEditor.setValue("# AI generating...\n"),t.codeEditor.refresh()),n="",e.p=2,r="/api/indicator/aiGenerate",a=C().get(S.Xh),o={prompt:t.aiPrompt.trim()},i.trim()&&(o.existingCode=i.trim()),e.n=3,fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:a?"Bearer ".concat(a):"","Access-Token":a||"",Token:a||""},body:JSON.stringify(o),credentials:"include"});case 3:if(s=e.v,s.ok){e.n=5;break}return e.n=4,s.text().catch(function(){return""});case 4:throw c=e.v,new Error(c||"HTTP error! status: ".concat(s.status));case 5:if(s.body&&"function"===typeof s.body.getReader){e.n=6;break}throw new Error("AI 服务未返回可读取的流(response.body 不存在)");case 6:u=s.body.getReader(),d=new TextDecoder,h="";case 7:return e.n=8,u.read();case 8:if(p=e.v,f=p.done,v=p.value,!f){e.n=9;break}return e.a(3,21);case 9:h+=d.decode(v,{stream:!0}),g=h.split("\n\n"),h=g.pop()||"",m=(0,b.A)(g),e.p=10,m.s();case 11:if((y=m.n()).done){e.n=17;break}if(x=y.value,x.trim()&&x.startsWith("data: ")){e.n=12;break}return e.a(3,16);case 12:if(_=x.substring(6),"[DONE]"!==_){e.n=13;break}return e.a(3,17);case 13:if(e.p=13,w=JSON.parse(_),!w.error){e.n=14;break}throw new Error(w.error);case 14:w.content&&(n+=w.content,k=t.cleanMarkdownCodeBlocks(n),t.codeEditor&&(t.codeEditor.setValue(k),A=t.codeEditor.lineCount(),t.codeEditor.setCursor({line:A-1,ch:0}),t.codeEditor.refresh())),e.n=16;break;case 15:e.p=15,e.v;case 16:e.n=11;break;case 17:e.n=19;break;case 18:e.p=18,I=e.v,m.e(I);case 19:return e.p=19,m.f(),e.f(19);case 20:e.n=7;break;case 21:t.codeEditor&&n?(T=t.cleanMarkdownCodeBlocks(n),t.codeEditor.setValue(T),t.codeEditor.refresh(),t.$message.success(t.$t("dashboard.indicator.editor.aiGenerateSuccess"))):n||t.$message.warning("未生成任何代码,请尝试更详细的提示词"),e.n=23;break;case 22:e.p=22,E=e.v,t.$message.error(E.message||t.$t("dashboard.indicator.editor.aiGenerateError")),n&&t.codeEditor&&(M=t.cleanMarkdownCodeBlocks(n),t.codeEditor.setValue(M));case 23:return e.p=23,t.aiGenerating=!1,e.f(23);case 24:return e.a(2)}},e,null,[[13,15],[10,18,19,20],[2,22,23,24]])}))()}}},A=k,T=i(845),M=(0,T.A)(A,m,y,!1,null,"4fea1865",null),I=M.exports,E=function(){var t=this,e=t._self._c;return e("div",{staticClass:"chart-left",class:{"theme-dark":"dark"===t.chartTheme}},[e("div",{staticClass:"chart-wrapper"},[e("div",{staticClass:"drawing-toolbar"},[t._l(t.drawingTools,function(i){return e("a-tooltip",{key:i.name,attrs:{title:i.title,placement:"right"}},[e("div",{staticClass:"drawing-tool-btn",class:{active:t.activeDrawingTool===i.name},on:{click:function(e){return t.selectDrawingTool(i.name)}}},[e("a-icon",{attrs:{type:i.icon}})],1)])}),e("a-divider",{attrs:{type:"vertical"}}),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.drawing.clearAll"),placement:"right"}},[e("div",{staticClass:"drawing-tool-btn",on:{click:t.clearAllDrawings}},[e("a-icon",{attrs:{type:"delete"}})],1)])],2),e("div",{staticClass:"chart-content-area"},[e("div",{staticClass:"indicator-toolbar"},t._l(t.indicatorButtons,function(i){return e("div",{key:i.id,staticClass:"indicator-btn",class:{active:t.isIndicatorActive(i.id)},attrs:{title:i.name},on:{click:function(e){return t.toggleIndicator(i)}}},[t._v(" "+t._s(i.shortName)+" ")])}),0),e("div",{staticClass:"kline-chart-container",attrs:{id:"kline-chart-container"}})]),t.loading?e("div",{staticClass:"chart-overlay"},[e("a-spin",{attrs:{size:"large"}},[e("a-icon",{staticStyle:{"font-size":"24px",color:"#13c2c2"},attrs:{slot:"indicator",type:"loading",spin:""},slot:"indicator"})],1)],1):t._e(),t.error?e("div",{staticClass:"chart-overlay"},[e("div",{staticClass:"error-box"},[e("a-icon",{staticStyle:{"font-size":"24px",color:"#ef5350","margin-bottom":"10px"},attrs:{type:"warning"}}),e("span",[t._v(t._s(t.error))]),e("a-button",{staticStyle:{"margin-top":"12px"},attrs:{type:"primary",size:"small",ghost:""},on:{click:t.handleRetry}},[t._v(" "+t._s(t.$t("dashboard.indicator.retry"))+" ")])],1)]):t._e(),t.pyodideLoadFailed?e("div",{staticClass:"chart-overlay pyodide-warning"},[e("div",{staticClass:"warning-box"},[e("a-icon",{staticStyle:{"font-size":"32px",color:"#faad14","margin-bottom":"12px"},attrs:{type:"warning"}}),e("div",{staticClass:"warning-title"},[t._v(t._s(t.$t("dashboard.indicator.warning.pyodideLoadFailed")))]),e("div",{staticClass:"warning-desc"},[t._v(t._s(t.$t("dashboard.indicator.warning.pyodideLoadFailedDesc")))])],1)]):t._e(),t.symbol||t.loading||t.error||t.pyodideLoadFailed?t._e():e("div",{staticClass:"chart-overlay initial-hint"},[e("div",{staticClass:"hint-box"},[e("a-icon",{staticStyle:{"font-size":"48px",color:"#1890ff","margin-bottom":"16px"},attrs:{type:"line-chart"}}),e("div",{staticClass:"hint-title"},[t._v(t._s(t.$t("dashboard.indicator.hint.selectSymbol")))]),e("div",{staticClass:"hint-desc"},[t._v(t._s(t.$t("dashboard.indicator.hint.selectSymbolDesc")))])],1)])])])},D=[];i(2259);function P(t){if(null!=t){var e=t["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],i=0;if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length))return{next:function(){return t&&i>=t.length&&(t=void 0),{value:t&&t[i++],done:!t}}}}throw new TypeError((0,o.A)(t)+" is not iterable")}var L=i(42822),R=i(9133),F=(i(34782),i(26910),i(71761),function(t,e){return F=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i])},F(t,e)});function B(t,e){if("function"!==typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function i(){this.constructor=t}F(t,e),t.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}var N,O,z,W,V,$,H,K,Y,X=function(){return X=Object.assign||function(t){for(var e,i=1,n=arguments.length;i0&&r[r.length-1])&&(6===s[0]||2===s[0])){a=0;continue}if(3===s[0]&&(!r||s[1]>r[0]&&s[1]=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function q(t,e){var i="function"===typeof Symbol&&t[Symbol.iterator];if(!i)return t;var n,r,a=i.call(t),o=[];try{while((void 0===e||e-- >0)&&!(n=a.next()).done)o.push(n.value)}catch(s){r={error:s}}finally{try{n&&!n.done&&(i=a["return"])&&i.call(a)}finally{if(r)throw r.error}}return o}function Z(t,e,i){if(i||2===arguments.length)for(var n,r=0,a=e.length;r1e9)return"".concat(+(e/1e9).toFixed(3),"B");if(e>1e6)return"".concat(+(e/1e6).toFixed(3),"M");if(e>1e3)return"".concat(+(e/1e3).toFixed(3),"K")}return"".concat(t)}function zt(t,e){var i="".concat(t);if(0===e.length)return i;if(i.includes(".")){var n=i.split(".");return"".concat(n[0].replace(/(\d)(?=(\d{3})+$)/g,function(t){return"".concat(t).concat(e)}),".").concat(n[1])}return i.replace(/(\d)(?=(\d{3})+$)/g,function(t){return"".concat(t).concat(e)})}function Wt(t,e){var i="".concat(t),n=new RegExp("\\.0{"+e+",}[1-9][0-9]*$");if(n.test(i)){var r=i.split("."),a=r[r.length-1],o=a.match(/0*/);if(Mt(o)){var s=o[0].length;return r[r.length-1]=a.replace(/0*/,"0{".concat(s,"}")),r.join(".")}}return i}function Vt(t){var e,i,n;return null!==(n=null===(i=null===(e=t.ownerDocument)||void 0===e?void 0:e.defaultView)||void 0===i?void 0:i.devicePixelRatio)&&void 0!==n?n:1}function $t(t,e,i){return"".concat(null!==e&&void 0!==e?e:"normal"," ").concat(null!==t&&void 0!==t?t:12,"px ").concat(null!==i&&void 0!==i?i:"Helvetica Neue")}function Ht(t,e,i,n){if(!Mt(Dt)){var r=document.createElement("canvas"),a=Vt(r);Dt=r.getContext("2d"),Dt.scale(a,a)}return Dt.font=$t(e,i,n),Math.round(Dt.measureText(t).width)}(function(t){t["OnDataReady"]="onDataReady",t["OnZoom"]="onZoom",t["OnScroll"]="onScroll",t["OnVisibleRangeChange"]="onVisibleRangeChange",t["OnTooltipIconClick"]="onTooltipIconClick",t["OnCrosshairChange"]="onCrosshairChange",t["OnCandleBarClick"]="onCandleBarClick",t["OnPaneDrag"]="onPaneDrag"})(Pt||(Pt={}));var Kt,Yt,Xt=function(){function t(){this._callbacks=[]}return t.prototype.subscribe=function(t){var e,i=null!==(e=this._callbacks.indexOf(t))&&void 0!==e?e:-1;i<0&&this._callbacks.push(t)},t.prototype.unsubscribe=function(t){var e;if(kt(t)){var i=null!==(e=this._callbacks.indexOf(t))&&void 0!==e?e:-1;i>-1&&this._callbacks.splice(i,1)}else this._callbacks=[]},t.prototype.execute=function(t){this._callbacks.forEach(function(e){e(t)})},t.prototype.isEmpty=function(){return 0===this._callbacks.length},t}();function Ut(t,e,i,n,r){var a,o=e.result,s=e.figures,l=e.styles,c=Ft(l,"circles",n.circles),u=c.length,d=Ft(l,"bars",n.bars),h=d.length,p=Ft(l,"lines",n.lines),f=p.length,v=0,g=0,m=0,y=0;s.forEach(function(s){var l;switch(s.type){case"circle":y=v;var b=c[v%u];a=X(X({},b),{color:b.noChangeColor}),v++;break;case"bar":y=g;var x=d[g%h];a=X(X({},x),{color:x.noChangeColor}),g++;break;case"line":y=m,a=p[m%f],m++;break}if(Mt(a)){var _={prev:{kLineData:t[i-1],indicatorData:o[i-1]},current:{kLineData:t[i],indicatorData:o[i]},next:{kLineData:t[i+1],indicatorData:o[i+1]}},w=null===(l=s.styles)||void 0===l?void 0:l.call(s,_,e,n);r(s,X(X({},a),w),y)}})}(function(t){t["Init"]="init",t["Forward"]="forward",t["Backward"]="backward"})(Kt||(Kt={})),function(t){t["Normal"]="normal",t["Price"]="price",t["Volume"]="volume"}(Yt||(Yt={}));var Gt,jt=function(){function t(t){this.result=[],this._precisionFlag=!1;var e=t.name,i=t.shortName,n=t.series,r=t.calcParams,a=t.figures,o=t.precision,s=t.shouldOhlc,l=t.shouldFormatBigNumber,c=t.visible,u=t.zLevel,d=t.minValue,h=t.maxValue,p=t.styles,f=t.extendData,v=t.regenerateFigures,g=t.createTooltipDataSource,m=t.draw;this.name=e,this.shortName=null!==i&&void 0!==i?i:e,this.series=null!==n&&void 0!==n?n:Yt.Normal,this.precision=null!==o&&void 0!==o?o:4,this.calcParams=null!==r&&void 0!==r?r:[],this.figures=null!==a&&void 0!==a?a:[],this.shouldOhlc=null!==s&&void 0!==s&&s,this.shouldFormatBigNumber=null!==l&&void 0!==l&&l,this.visible=null===c||void 0===c||c,this.zLevel=null!==u&&void 0!==u?u:0,this.minValue=null!==d&&void 0!==d?d:null,this.maxValue=null!==h&&void 0!==h?h:null,this.styles=Ct(null!==p&&void 0!==p?p:{}),this.extendData=f,this.regenerateFigures=null!==v&&void 0!==v?v:null,this.createTooltipDataSource=null!==g&&void 0!==g?g:null,this.draw=null!==m&&void 0!==m?m:null}return t.prototype.setShortName=function(t){return this.shortName!==t&&(this.shortName=t,!0)},t.prototype.setSeries=function(t){return this.series!==t&&(this.series=t,!0)},t.prototype.setPrecision=function(t,e){var i=null!==e&&void 0!==e&&e,n=Math.floor(t);return!(!(n!==this.precision&&t>=0)||i&&(!i||this._precisionFlag))&&(this.precision=n,i||(this._precisionFlag=!0),!0)},t.prototype.setCalcParams=function(t){var e,i;return this.calcParams=t,this.figures=null!==(i=null===(e=this.regenerateFigures)||void 0===e?void 0:e.call(this,t))&&void 0!==i?i:this.figures,!0},t.prototype.setShouldOhlc=function(t){return this.shouldOhlc!==t&&(this.shouldOhlc=t,!0)},t.prototype.setShouldFormatBigNumber=function(t){return this.shouldFormatBigNumber!==t&&(this.shouldFormatBigNumber=t,!0)},t.prototype.setVisible=function(t){return this.visible!==t&&(this.visible=t,!0)},t.prototype.setZLevel=function(t){return this.zLevel!==t&&(this.zLevel=t,!0)},t.prototype.setStyles=function(t){return wt(this.styles,t),!0},t.prototype.setExtendData=function(t){return this.extendData!==t&&(this.extendData=t,!0)},t.prototype.setFigures=function(t){return this.figures!==t&&(this.figures=t,!0)},t.prototype.setMinValue=function(t){return this.minValue!==t&&(this.minValue=t,!0)},t.prototype.setMaxValue=function(t){return this.maxValue!==t&&(this.maxValue=t,!0)},t.prototype.setRegenerateFigures=function(t){return this.regenerateFigures!==t&&(this.regenerateFigures=t,!0)},t.prototype.setCreateTooltipDataSource=function(t){return this.createTooltipDataSource!==t&&(this.createTooltipDataSource=t,!0)},t.prototype.setDraw=function(t){return this.draw!==t&&(this.draw=t,!0)},t.prototype.calcIndicator=function(t){return U(this,void 0,void 0,function(){var e;return G(this,function(i){switch(i.label){case 0:return i.trys.push([0,2,,3]),[4,this.calc(t,this)];case 1:return e=i.sent(),this.result=e,[2,!0];case 2:return i.sent(),[2,!1];case 3:return[2]}})})},t.extend=function(e){var i=function(t){function i(){return t.call(this,e)||this}return B(i,t),i.prototype.calc=function(t,i){return e.calc(t,i)},i}(t);return i},t}();function qt(){return["mouseClickEvent","mouseDoubleClickEvent","mouseRightClickEvent","tapEvent","doubleTapEvent","mouseDownEvent","touchStartEvent","mouseMoveEvent","touchMoveEvent"]}(function(t){t["Normal"]="normal",t["WeakMagnet"]="weak_magnet",t["StrongMagnet"]="strong_magnet"})(Gt||(Gt={}));var Zt,Jt=1,Qt=-1,te="overlay_",ee="overlay_figure_",ie=function(){function t(t){this.currentStep=Jt,this.points=[],this._prevPressedPoint=null,this._prevPressedPoints=[];var e=t.mode,i=t.modeSensitivity,n=t.extendData,r=t.styles,a=t.name,o=t.totalStep,s=t.lock,l=t.visible,c=t.zLevel,u=t.needDefaultPointFigure,d=t.needDefaultXAxisFigure,h=t.needDefaultYAxisFigure,p=t.createPointFigures,f=t.createXAxisFigures,v=t.createYAxisFigures,g=t.performEventPressedMove,m=t.performEventMoveForDrawing,y=t.onDrawStart,b=t.onDrawing,x=t.onDrawEnd,_=t.onClick,w=t.onDoubleClick,C=t.onRightClick,S=t.onPressedMoveStart,k=t.onPressedMoving,A=t.onPressedMoveEnd,T=t.onMouseEnter,M=t.onMouseLeave,I=t.onRemoved,E=t.onSelected,D=t.onDeselected;this.name=a,this.totalStep=!Tt(o)||o<2?1:o,this.lock=null!==s&&void 0!==s&&s,this.visible=null===l||void 0===l||l,this.zLevel=null!==c&&void 0!==c?c:0,this.needDefaultPointFigure=null!==u&&void 0!==u&&u,this.needDefaultXAxisFigure=null!==d&&void 0!==d&&d,this.needDefaultYAxisFigure=null!==h&&void 0!==h&&h,this.mode=null!==e&&void 0!==e?e:Gt.Normal,this.modeSensitivity=null!==i&&void 0!==i?i:8,this.extendData=n,this.styles=Ct(null!==r&&void 0!==r?r:{}),this.createPointFigures=null!==p&&void 0!==p?p:null,this.createXAxisFigures=null!==f&&void 0!==f?f:null,this.createYAxisFigures=null!==v&&void 0!==v?v:null,this.performEventPressedMove=null!==g&&void 0!==g?g:null,this.performEventMoveForDrawing=null!==m&&void 0!==m?m:null,this.onDrawStart=null!==y&&void 0!==y?y:null,this.onDrawing=null!==b&&void 0!==b?b:null,this.onDrawEnd=null!==x&&void 0!==x?x:null,this.onClick=null!==_&&void 0!==_?_:null,this.onDoubleClick=null!==w&&void 0!==w?w:null,this.onRightClick=null!==C&&void 0!==C?C:null,this.onPressedMoveStart=null!==S&&void 0!==S?S:null,this.onPressedMoving=null!==k&&void 0!==k?k:null,this.onPressedMoveEnd=null!==A&&void 0!==A?A:null,this.onMouseEnter=null!==T&&void 0!==T?T:null,this.onMouseLeave=null!==M&&void 0!==M?M:null,this.onRemoved=null!==I&&void 0!==I?I:null,this.onSelected=null!==E&&void 0!==E?E:null,this.onDeselected=null!==D&&void 0!==D?D:null}return t.prototype.setId=function(t){return!Et(this.id)&&(this.id=t,!0)},t.prototype.setGroupId=function(t){return!Et(this.groupId)&&(this.groupId=t,!0)},t.prototype.setPaneId=function(t){this.paneId=t},t.prototype.setExtendData=function(t){return t!==this.extendData&&(this.extendData=t,!0)},t.prototype.setStyles=function(t){return wt(this.styles,t),!0},t.prototype.setPoints=function(t){if(t.length>0){var e=void 0;if(this.points=Z([],q(t),!1),t.length>=this.totalStep-1?(this.currentStep=Qt,e=this.totalStep-1):(this.currentStep=t.length+1,e=t.length),null!==this.performEventMoveForDrawing)for(var i=0;is?n=a:r=a,o<=2)break}return n}function fe(t){var e=Math.floor(ye(t)),i=be(e),n=t/i,r=0;return r=n<1.5?1:n<2.5?2:n<3.5?3:n<4.5?4:n<5.5?5:n<6.5?6:8,t=r*i,e>=-20?+t.toFixed(e<0?-e:0):t}function ve(t,e){null==e&&(e=10),e=Math.min(Math.max(0,e),20);var i=(+t).toFixed(e);return+i}function ge(t){var e=t.toString(),i=e.indexOf("e");if(i>0){var n=+e.slice(i+1);return n<0?-n:0}var r=e.indexOf(".");return r<0?0:e.length-1-r}function me(t,e,i){var n=[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER];return t.forEach(function(t){var r,a;n[0]=Math.max(null!==(r=t[e])&&void 0!==r?r:t,n[0]),n[1]=Math.min(null!==(a=t[i])&&void 0!==a?a:t,n[1])}),n}function ye(t){return Math.log(t)/Math.log(10)}function be(t){return Math.pow(10,t)}function xe(){return{from:0,to:0,realFrom:0,realTo:0}}var _e={MIN:1,MAX:50},we=8,Ce=80,Se=.88,ke=10,Ae=function(){function t(t){this._dateTimeFormat=this._buildDateTimeFormat(),this._zoomEnabled=!0,this._scrollEnabled=!0,this._totalBarSpace=0,this._barSpace=we,this._offsetRightDistance=Ce,this._startLastBarRightSideDiffBarCount=0,this._scrollLimitRole=0,this._minVisibleBarCount={left:2,right:2},this._maxOffsetDistance={left:50,right:50},this._visibleRange=xe(),this._chartStore=t,this._gapBarSpace=this._calcGapBarSpace(),this._lastBarRightSideDiffBarCount=this._offsetRightDistance/this._barSpace}return t.prototype._calcGapBarSpace=function(){var t;return this._barSpace>3?t=Math.floor(this._barSpace*Se):(t=Math.floor(this._barSpace),t===this._barSpace&&t--),t%2===0&&t--,t=Math.max(1,t),t},t.prototype.adjustVisibleRange=function(){var t,e,i,n,r=this._chartStore.getDataList(),a=r.length,o=this._totalBarSpace/this._barSpace;1===this._scrollLimitRole?(i=(this._totalBarSpace-this._maxOffsetDistance.right)/this._barSpace,n=(this._totalBarSpace-this._maxOffsetDistance.left)/this._barSpace):(i=this._minVisibleBarCount.left,n=this._minVisibleBarCount.right),i=Math.max(0,i),n=Math.max(0,n);var s=o-Math.min(i,a);this._lastBarRightSideDiffBarCount>s&&(this._lastBarRightSideDiffBarCount=s);var l=-a+Math.min(n,a);this._lastBarRightSideDiffBarCounta&&(c=a);var d=Math.round(c-o)-1;d<0&&(d=0);var h=this._lastBarRightSideDiffBarCount>0?Math.round(a+this._lastBarRightSideDiffBarCount-o)-1:d;if(this._visibleRange={from:d,to:c,realFrom:h,realTo:u},this._chartStore.getActionStore().execute(Pt.OnVisibleRangeChange,this._visibleRange),this._chartStore.adjustVisibleDataList(),0===d){var p=r[0];this._chartStore.executeLoadMoreCallback(null!==(t=null===p||void 0===p?void 0:p.timestamp)&&void 0!==t?t:null),this._chartStore.executeLoadDataCallback({type:Kt.Forward,data:null!==p&&void 0!==p?p:null})}c===a&&this._chartStore.executeLoadDataCallback({type:Kt.Backward,data:null!==(e=r[a-1])&&void 0!==e?e:null})},t.prototype.getDateTimeFormat=function(){return this._dateTimeFormat},t.prototype._buildDateTimeFormat=function(t){var e={hour12:!1,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"};Et(t)&&(e.timeZone=t);var i=null;try{i=new Intl.DateTimeFormat("en",e)}catch(n){bt("","","Timezone is error!!!")}return i},t.prototype.setTimezone=function(t){var e=this._buildDateTimeFormat(t);null!==e&&(this._dateTimeFormat=e)},t.prototype.getTimezone=function(){return this._dateTimeFormat.resolvedOptions().timeZone},t.prototype.getBarSpace=function(){return{bar:this._barSpace,halfBar:this._barSpace/2,gapBar:this._gapBarSpace,halfGapBar:Math.floor(this._gapBarSpace/2)}},t.prototype.setBarSpace=function(t,e){t<_e.MIN||t>_e.MAX||this._barSpace===t||(this._barSpace=t,this._gapBarSpace=this._calcGapBarSpace(),null===e||void 0===e||e(),this.adjustVisibleRange(),this._chartStore.getTooltipStore().recalculateCrosshair(!0),this._chartStore.getChart().adjustPaneViewport(!1,!0,!0,!0))},t.prototype.setTotalBarSpace=function(t){return this._totalBarSpace!==t&&(this._totalBarSpace=t,this.adjustVisibleRange(),this._chartStore.getTooltipStore().recalculateCrosshair(!0)),this},t.prototype.setOffsetRightDistance=function(t,e){return this._offsetRightDistance=1===this._scrollLimitRole?Math.min(this._maxOffsetDistance.right,t):t,this._lastBarRightSideDiffBarCount=this._offsetRightDistance/this._barSpace,null!==e&&void 0!==e&&e&&(this.adjustVisibleRange(),this._chartStore.getTooltipStore().recalculateCrosshair(!0),this._chartStore.getChart().adjustPaneViewport(!1,!0,!0,!0)),this},t.prototype.resetOffsetRightDistance=function(){this.setOffsetRightDistance(this._offsetRightDistance)},t.prototype.getInitialOffsetRightDistance=function(){return this._offsetRightDistance},t.prototype.getOffsetRightDistance=function(){return Math.max(0,this._lastBarRightSideDiffBarCount*this._barSpace)},t.prototype.getLastBarRightSideDiffBarCount=function(){return this._lastBarRightSideDiffBarCount},t.prototype.setLastBarRightSideDiffBarCount=function(t){return this._lastBarRightSideDiffBarCount=t,this},t.prototype.setMaxOffsetLeftDistance=function(t){return this._scrollLimitRole=1,this._maxOffsetDistance.left=t,this},t.prototype.setMaxOffsetRightDistance=function(t){return this._scrollLimitRole=1,this._maxOffsetDistance.right=t,this},t.prototype.setLeftMinVisibleBarCount=function(t){return this._scrollLimitRole=0,this._minVisibleBarCount.left=t,this},t.prototype.setRightMinVisibleBarCount=function(t){return this._scrollLimitRole=0,this._minVisibleBarCount.right=t,this},t.prototype.getVisibleRange=function(){return this._visibleRange},t.prototype.startScroll=function(){this._startLastBarRightSideDiffBarCount=this._lastBarRightSideDiffBarCount},t.prototype.scroll=function(t){if(this._scrollEnabled){var e=t/this._barSpace,i=this._lastBarRightSideDiffBarCount*this._barSpace;this._lastBarRightSideDiffBarCount=this._startLastBarRightSideDiffBarCount-e,this.adjustVisibleRange(),this._chartStore.getTooltipStore().recalculateCrosshair(!0),this._chartStore.getChart().adjustPaneViewport(!1,!0,!0,!0);var n=Math.round(i-this._lastBarRightSideDiffBarCount*this._barSpace);0!==n&&this._chartStore.getActionStore().execute(Pt.OnScroll,{distance:n})}},t.prototype.getDataByDataIndex=function(t){var e;return null!==(e=this._chartStore.getDataList()[t])&&void 0!==e?e:null},t.prototype.coordinateToFloatIndex=function(t){var e=this._chartStore.getDataList().length,i=(this._totalBarSpace-t)/this._barSpace,n=e+this._lastBarRightSideDiffBarCount-i;return Math.round(1e6*n)/1e6},t.prototype.dataIndexToTimestamp=function(t){var e,i=this.getDataByDataIndex(t);return null!==(e=null===i||void 0===i?void 0:i.timestamp)&&void 0!==e?e:null},t.prototype.timestampToDataIndex=function(t){var e=this._chartStore.getDataList();return 0===e.length?0:pe(e,"timestamp",t)},t.prototype.dataIndexToCoordinate=function(t){var e=this._chartStore.getDataList().length,i=e+this._lastBarRightSideDiffBarCount-t;return Math.floor(this._totalBarSpace-(i-.5)*this._barSpace)},t.prototype.coordinateToDataIndex=function(t){return Math.ceil(this.coordinateToFloatIndex(t))-1},t.prototype.zoom=function(t,e){var i,n=this;if(this._zoomEnabled){var r=null!==e&&void 0!==e?e:null;if(!Tt(null===r||void 0===r?void 0:r.x)){var a=this._chartStore.getTooltipStore().getCrosshair();r={x:null!==(i=null===a||void 0===a?void 0:a.x)&&void 0!==i?i:this._totalBarSpace/2}}var o=r.x,s=this.coordinateToFloatIndex(o),l=this._barSpace,c=this._barSpace+t*(this._barSpace/ke);this.setBarSpace(c,function(){n._lastBarRightSideDiffBarCount+=s-n.coordinateToFloatIndex(o)});var u=this._barSpace/l;1!==u&&this._chartStore.getActionStore().execute(Pt.OnZoom,{scale:u})}},t.prototype.setZoomEnabled=function(t){return this._zoomEnabled=t,this},t.prototype.getZoomEnabled=function(){return this._zoomEnabled},t.prototype.setScrollEnabled=function(t){return this._scrollEnabled=t,this},t.prototype.getScrollEnabled=function(){return this._scrollEnabled},t.prototype.clear=function(){this._visibleRange=xe()},t}(),Te={name:"AVP",shortName:"AVP",series:Yt.Price,precision:2,figures:[{key:"avp",title:"AVP: ",type:"line"}],calc:function(t){var e=0,i=0;return t.map(function(t){var n,r,a={},o=null!==(n=null===t||void 0===t?void 0:t.turnover)&&void 0!==n?n:0,s=null!==(r=null===t||void 0===t?void 0:t.volume)&&void 0!==r?r:0;return e+=o,i+=s,0!==i&&(a.avp=e/i),a})}},Me={name:"AO",shortName:"AO",calcParams:[5,34],figures:[{key:"ao",title:"AO: ",type:"bar",baseValue:0,styles:function(t,e,i){var n,r,a,o,s,l=t.prev,c=t.current,u=null!==(r=null===(n=l.indicatorData)||void 0===n?void 0:n.ao)&&void 0!==r?r:Number.MIN_SAFE_INTEGER,d=null!==(o=null===(a=c.indicatorData)||void 0===a?void 0:a.ao)&&void 0!==o?o:Number.MIN_SAFE_INTEGER;s=d>u?Ft(e.styles,"bars[0].upColor",i.bars[0].upColor):Ft(e.styles,"bars[0].downColor",i.bars[0].downColor);var h=d>u?O.Stroke:O.Fill;return{color:s,style:h,borderColor:s}}}],calc:function(t,e){var i=e.calcParams,n=Math.max(i[0],i[1]),r=0,a=0,o=0,s=0;return t.map(function(e,l){var c={},u=(e.low+e.high)/2;if(r+=u,a+=u,l>=i[0]-1){o=r/i[0];var d=t[l-(i[0]-1)];r-=(d.low+d.high)/2}if(l>=i[1]-1){s=a/i[1];d=t[l-(i[1]-1)];a-=(d.low+d.high)/2}return l>=n-1&&(c.ao=o-s),c})}},Ie={name:"BIAS",shortName:"BIAS",calcParams:[6,12,24],figures:[{key:"bias1",title:"BIAS6: ",type:"line"},{key:"bias2",title:"BIAS12: ",type:"line"},{key:"bias3",title:"BIAS24: ",type:"line"}],regenerateFigures:function(t){return t.map(function(t,e){return{key:"bias".concat(e+1),title:"BIAS".concat(t,": "),type:"line"}})},calc:function(t,e){var i=e.calcParams,n=e.figures,r=[];return t.map(function(e,a){var o={},s=e.close;return i.forEach(function(e,l){var c;if(r[l]=(null!==(c=r[l])&&void 0!==c?c:0)+s,a>=e-1){var u=r[l]/i[l];o[n[l].key]=(s-u)/u*100,r[l]-=t[a-(e-1)].close}}),o})}};function Ee(t,e){var i=t.length,n=0;return t.forEach(function(t){var i=t.close-e;n+=i*i}),n=Math.abs(n),Math.sqrt(n/i)}var De={name:"BOLL",shortName:"BOLL",series:Yt.Price,calcParams:[20,2],precision:2,shouldOhlc:!0,figures:[{key:"up",title:"UP: ",type:"line"},{key:"mid",title:"MID: ",type:"line"},{key:"dn",title:"DN: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=i[0]-1,r=0;return t.map(function(e,a){var o=e.close,s={};if(r+=o,a>=n){s.mid=r/i[0];var l=Ee(t.slice(a-n,a+1),s.mid);s.up=s.mid+i[1]*l,s.dn=s.mid-i[1]*l,r-=t[a-n].close}return s})}},Pe={name:"BRAR",shortName:"BRAR",calcParams:[26],figures:[{key:"br",title:"BR: ",type:"line"},{key:"ar",title:"AR: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=0,o=0;return t.map(function(e,s){var l,c,u={},d=e.high,h=e.low,p=e.open,f=(null!==(l=t[s-1])&&void 0!==l?l:e).close;if(a+=d-p,o+=p-h,n+=d-f,r+=f-h,s>=i[0]-1){u.ar=0!==o?a/o*100:0,u.br=0!==r?n/r*100:0;var v=t[s-(i[0]-1)],g=v.high,m=v.low,y=v.open,b=(null!==(c=t[s-i[0]])&&void 0!==c?c:t[s-(i[0]-1)]).close;n-=g-b,r-=b-m,a-=g-y,o-=y-m}return u})}},Le={name:"BBI",shortName:"BBI",series:Yt.Price,precision:2,calcParams:[3,6,12,24],shouldOhlc:!0,figures:[{key:"bbi",title:"BBI: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=Math.max.apply(Math,Z([],q(i),!1)),r=[],a=[];return t.map(function(e,o){var s={},l=e.close;if(i.forEach(function(e,i){var n;r[i]=(null!==(n=r[i])&&void 0!==n?n:0)+l,o>=e-1&&(a[i]=r[i]/e,r[i]-=t[o-(e-1)].close)}),o>=n-1){var c=0;a.forEach(function(t){c+=t}),s.bbi=c/4}return s})}},Re={name:"CCI",shortName:"CCI",calcParams:[20],figures:[{key:"cci",title:"CCI: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=i[0]-1,r=0,a=[];return t.map(function(e,o){var s={},l=(e.high+e.low+e.close)/3;if(r+=l,a.push(l),o>=n){var c=r/i[0],u=a.slice(o-n,o+1),d=0;u.forEach(function(t){d+=Math.abs(t-c)});var h=d/i[0];s.cci=0!==h?(l-c)/h/.015:0;var p=(t[o-n].high+t[o-n].low+t[o-n].close)/3;r-=p}return s})}},Fe={name:"CR",shortName:"CR",calcParams:[26,10,20,40,60],figures:[{key:"cr",title:"CR: ",type:"line"},{key:"ma1",title:"MA1: ",type:"line"},{key:"ma2",title:"MA2: ",type:"line"},{key:"ma3",title:"MA3: ",type:"line"},{key:"ma4",title:"MA4: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=Math.ceil(i[1]/2.5+1),r=Math.ceil(i[2]/2.5+1),a=Math.ceil(i[3]/2.5+1),o=Math.ceil(i[4]/2.5+1),s=0,l=[],c=0,u=[],d=0,h=[],p=0,f=[],v=[];return t.forEach(function(e,g){var m,y,b,x,_,w={},C=null!==(m=t[g-1])&&void 0!==m?m:e,S=(C.high+C.close+C.low+C.open)/4,k=Math.max(0,e.high-S),A=Math.max(0,S-e.low);g>=i[0]-1&&(w.cr=0!==A?k/A*100:0,s+=w.cr,c+=w.cr,d+=w.cr,p+=w.cr,g>=i[0]+i[1]-2&&(l.push(s/i[1]),g>=i[0]+i[1]+n-3&&(w.ma1=l[l.length-1-n]),s-=null!==(y=v[g-(i[1]-1)].cr)&&void 0!==y?y:0),g>=i[0]+i[2]-2&&(u.push(c/i[2]),g>=i[0]+i[2]+r-3&&(w.ma2=u[u.length-1-r]),c-=null!==(b=v[g-(i[2]-1)].cr)&&void 0!==b?b:0),g>=i[0]+i[3]-2&&(h.push(d/i[3]),g>=i[0]+i[3]+a-3&&(w.ma3=h[h.length-1-a]),d-=null!==(x=v[g-(i[3]-1)].cr)&&void 0!==x?x:0),g>=i[0]+i[4]-2&&(f.push(p/i[4]),g>=i[0]+i[4]+o-3&&(w.ma4=f[f.length-1-o]),p-=null!==(_=v[g-(i[4]-1)].cr)&&void 0!==_?_:0)),v.push(w)}),v}},Be={name:"DMA",shortName:"DMA",calcParams:[10,50,10],figures:[{key:"dma",title:"DMA: ",type:"line"},{key:"ama",title:"AMA: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=Math.max(i[0],i[1]),r=0,a=0,o=0,s=[];return t.forEach(function(e,l){var c,u={},d=e.close;r+=d,a+=d;var h=0,p=0;if(l>=i[0]-1&&(h=r/i[0],r-=t[l-(i[0]-1)].close),l>=i[1]-1&&(p=a/i[1],a-=t[l-(i[1]-1)].close),l>=n-1){var f=h-p;u.dma=f,o+=f,l>=n+i[2]-2&&(u.ama=o/i[2],o-=null!==(c=s[l-(i[2]-1)].dma)&&void 0!==c?c:0)}s.push(u)}),s}},Ne={name:"DMI",shortName:"DMI",calcParams:[14,6],figures:[{key:"pdi",title:"PDI: ",type:"line"},{key:"mdi",title:"MDI: ",type:"line"},{key:"adx",title:"ADX: ",type:"line"},{key:"adxr",title:"ADXR: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=0,o=0,s=0,l=0,c=0,u=0,d=[];return t.forEach(function(e,h){var p,f,v={},g=null!==(p=t[h-1])&&void 0!==p?p:e,m=g.close,y=e.high,b=e.low,x=y-b,_=Math.abs(y-m),w=Math.abs(m-b),C=y-g.high,S=g.low-b,k=Math.max(Math.max(x,_),w),A=C>0&&C>S?C:0,T=S>0&&S>C?S:0;if(n+=k,r+=A,a+=T,h>=i[0]-1){h>i[0]-1?(o=o-o/i[0]+k,s=s-s/i[0]+A,l=l-l/i[0]+T):(o=n,s=r,l=a);var M=0,I=0;0!==o&&(M=100*s/o,I=100*l/o),v.pdi=M,v.mdi=I;var E=0;I+M!==0&&(E=Math.abs(I-M)/(I+M)*100),c+=E,h>=2*i[0]-2&&(u=h>2*i[0]-2?(u*(i[0]-1)+E)/i[0]:c/i[0],v.adx=u,h>=2*i[0]+i[1]-3&&(v.adxr=((null!==(f=d[h-(i[1]-1)].adx)&&void 0!==f?f:0)+u)/2))}d.push(v)}),d}},Oe={name:"EMV",shortName:"EMV",calcParams:[14,9],figures:[{key:"emv",title:"EMV: ",type:"line"},{key:"maEmv",title:"MAEMV: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=[];return t.map(function(e,a){var o,s={};if(a>0){var l=t[a-1],c=e.high,u=e.low,d=null!==(o=e.volume)&&void 0!==o?o:0,h=(c+u)/2-(l.high+l.low)/2;if(0===d||c-u===0)s.emv=0;else{var p=d/1e8/(c-u);s.emv=h/p}n+=s.emv,r.push(s.emv),a>=i[0]&&(s.maEmv=n/i[0],n-=r[a-i[0]])}return s})}},ze={name:"EMA",shortName:"EMA",series:Yt.Price,calcParams:[6,12,20],precision:2,shouldOhlc:!0,figures:[{key:"ema1",title:"EMA6: ",type:"line"},{key:"ema2",title:"EMA12: ",type:"line"},{key:"ema3",title:"EMA20: ",type:"line"}],regenerateFigures:function(t){return t.map(function(t,e){return{key:"ema".concat(e+1),title:"EMA".concat(t,": "),type:"line"}})},calc:function(t,e){var i=e.calcParams,n=e.figures,r=0,a=[];return t.map(function(t,e){var o={},s=t.close;return r+=s,i.forEach(function(t,i){e>=t-1&&(a[i]=e>t-1?(2*s+(t-1)*a[i])/(t+1):r/t,o[n[i].key]=a[i])}),o})}},We={name:"MTM",shortName:"MTM",calcParams:[12,6],figures:[{key:"mtm",title:"MTM: ",type:"line"},{key:"maMtm",title:"MAMTM: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=[];return t.forEach(function(e,a){var o,s={};if(a>=i[0]){var l=e.close,c=t[a-i[0]].close;s.mtm=l-c,n+=s.mtm,a>=i[0]+i[1]-1&&(s.maMtm=n/i[1],n-=null!==(o=r[a-(i[1]-1)].mtm)&&void 0!==o?o:0)}r.push(s)}),r}},Ve={name:"MA",shortName:"MA",series:Yt.Price,calcParams:[5,10,30,60],precision:2,shouldOhlc:!0,figures:[{key:"ma5",title:"MA5: ",type:"line"},{key:"ma10",title:"MA10: ",type:"line"},{key:"ma30",title:"MA30: ",type:"line"},{key:"ma60",title:"MA60: ",type:"line"}],regenerateFigures:function(t){return t.map(function(t,e){return{key:"ma".concat(e+1),title:"MA".concat(t,": "),type:"line"}})},calc:function(t,e){var i=e.calcParams,n=e.figures,r=[];return t.map(function(e,a){var o={},s=e.close;return i.forEach(function(e,i){var l;r[i]=(null!==(l=r[i])&&void 0!==l?l:0)+s,a>=e-1&&(o[n[i].key]=r[i]/e,r[i]-=t[a-(e-1)].close)}),o})}},$e={name:"MACD",shortName:"MACD",calcParams:[12,26,9],figures:[{key:"dif",title:"DIF: ",type:"line"},{key:"dea",title:"DEA: ",type:"line"},{key:"macd",title:"MACD: ",type:"bar",baseValue:0,styles:function(t,e,i){var n,r,a,o,s,l=t.prev,c=t.current,u=null!==(r=null===(n=l.indicatorData)||void 0===n?void 0:n.macd)&&void 0!==r?r:Number.MIN_SAFE_INTEGER,d=null!==(o=null===(a=c.indicatorData)||void 0===a?void 0:a.macd)&&void 0!==o?o:Number.MIN_SAFE_INTEGER;s=d>0?Ft(e.styles,"bars[0].upColor",i.bars[0].upColor):d<0?Ft(e.styles,"bars[0].downColor",i.bars[0].downColor):Ft(e.styles,"bars[0].noChangeColor",i.bars[0].noChangeColor);var h=u=r[0]-1&&(i=e>r[0]-1?(2*d+(r[0]-1)*i)/(r[0]+1):a/r[0]),e>=r[1]-1&&(n=e>r[1]-1?(2*d+(r[1]-1)*n)/(r[1]+1):a/r[1]),e>=c-1&&(o=i-n,u.dif=o,s+=o,e>=c+r[2]-2&&(l=e>c+r[2]-2?(2*o+l*(r[2]-1))/(r[2]+1):s/r[2],u.macd=2*(o-l),u.dea=l)),u})}},He={name:"OBV",shortName:"OBV",calcParams:[30],figures:[{key:"obv",title:"OBV: ",type:"line"},{key:"maObv",title:"MAOBV: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=[];return t.forEach(function(e,o){var s,l,c,u,d=null!==(s=t[o-1])&&void 0!==s?s:e;e.closed.close&&(r+=null!==(c=e.volume)&&void 0!==c?c:0);var h={obv:r};n+=r,o>=i[0]-1&&(h.maObv=n/i[0],n-=null!==(u=a[o-(i[0]-1)].obv)&&void 0!==u?u:0),a.push(h)}),a}},Ke={name:"PVT",shortName:"PVT",figures:[{key:"pvt",title:"PVT: ",type:"line"}],calc:function(t){var e=0;return t.map(function(i,n){var r,a,o={},s=i.close,l=null!==(r=i.volume)&&void 0!==r?r:1,c=(null!==(a=t[n-1])&&void 0!==a?a:i).close,u=0,d=c*l;return 0!==d&&(u=(s-c)/d),e+=u,o.pvt=e,o})}},Ye={name:"PSY",shortName:"PSY",calcParams:[12,6],figures:[{key:"psy",title:"PSY: ",type:"line"},{key:"maPsy",title:"MAPSY: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=[],o=[];return t.forEach(function(e,s){var l,c,u={},d=(null!==(l=t[s-1])&&void 0!==l?l:e).close,h=e.close-d>0?1:0;a.push(h),n+=h,s>=i[0]-1&&(u.psy=n/i[0]*100,r+=u.psy,s>=i[0]+i[1]-2&&(u.maPsy=r/i[1],r-=null!==(c=o[s-(i[1]-1)].psy)&&void 0!==c?c:0),n-=a[s-(i[0]-1)]),o.push(u)}),o}},Xe={name:"ROC",shortName:"ROC",calcParams:[12,6],figures:[{key:"roc",title:"ROC: ",type:"line"},{key:"maRoc",title:"MAROC: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=[],r=0;return t.forEach(function(e,a){var o,s,l={};if(a>=i[0]-1){var c=e.close,u=(null!==(o=t[a-i[0]])&&void 0!==o?o:t[a-(i[0]-1)]).close;l.roc=0!==u?(c-u)/u*100:0,r+=l.roc,a>=i[0]-1+i[1]-1&&(l.maRoc=r/i[1],r-=null!==(s=n[a-(i[1]-1)].roc)&&void 0!==s?s:0)}n.push(l)}),n}},Ue={name:"RSI",shortName:"RSI",calcParams:[6,12,24],figures:[{key:"rsi1",title:"RSI1: ",type:"line"},{key:"rsi2",title:"RSI2: ",type:"line"},{key:"rsi3",title:"RSI3: ",type:"line"}],regenerateFigures:function(t){return t.map(function(t,e){var i=e+1;return{key:"rsi".concat(i),title:"RSI".concat(i,": "),type:"line"}})},calc:function(t,e){var i=e.calcParams,n=e.figures,r=[],a=[];return t.map(function(e,o){var s,l={},c=(null!==(s=t[o-1])&&void 0!==s?s:e).close,u=e.close-c;return i.forEach(function(e,i){var s,c,d;if(u>0?r[i]=(null!==(s=r[i])&&void 0!==s?s:0)+u:a[i]=(null!==(c=a[i])&&void 0!==c?c:0)+Math.abs(u),o>=e-1){0!==a[i]?l[n[i].key]=100-100/(1+r[i]/a[i]):l[n[i].key]=0;var h=t[o-(e-1)],p=null!==(d=t[o-e])&&void 0!==d?d:h,f=h.close-p.close;f>0?r[i]-=f:a[i]-=Math.abs(f)}}),l})}},Ge={name:"SMA",shortName:"SMA",series:Yt.Price,calcParams:[12,2],precision:2,figures:[{key:"sma",title:"SMA: ",type:"line"}],shouldOhlc:!0,calc:function(t,e){var i=e.calcParams,n=0,r=0;return t.map(function(t,e){var a={},o=t.close;return n+=o,e>=i[0]-1&&(r=e>i[0]-1?(o*i[1]+r*(i[0]-i[1]+1))/(i[0]+1):n/i[0],a.sma=r),a})}},je={name:"KDJ",shortName:"KDJ",calcParams:[9,3,3],figures:[{key:"k",title:"K: ",type:"line"},{key:"d",title:"D: ",type:"line"},{key:"j",title:"J: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=[];return t.forEach(function(e,r){var a,o,s,l,c={},u=e.close;if(r>=i[0]-1){var d=me(t.slice(r-(i[0]-1),r+1),"high","low"),h=d[0],p=d[1],f=h-p,v=(u-p)/(0===f?1:f)*100;c.k=((i[1]-1)*(null!==(o=null===(a=n[r-1])||void 0===a?void 0:a.k)&&void 0!==o?o:50)+v)/i[1],c.d=((i[2]-1)*(null!==(l=null===(s=n[r-1])||void 0===s?void 0:s.d)&&void 0!==l?l:50)+c.k)/i[2],c.j=3*c.k-2*c.d}n.push(c)}),n}},qe={name:"SAR",shortName:"SAR",series:Yt.Price,calcParams:[2,2,20],precision:2,shouldOhlc:!0,figures:[{key:"sar",title:"SAR: ",type:"circle",styles:function(t,e,i){var n,r,a=t.current,o=null!==(r=null===(n=a.indicatorData)||void 0===n?void 0:n.sar)&&void 0!==r?r:Number.MIN_SAFE_INTEGER,s=a.kLineData,l=((null===s||void 0===s?void 0:s.high)+(null===s||void 0===s?void 0:s.low))/2,c=oe.low?(c=s,o=n,s=-100,l=!l):c>p&&(c=p)}else{(-100===s||s>h)&&(s=h,o=Math.min(o+r,a)),c=u+o*(s-u);var f=Math.max(t[Math.max(1,i)-1].high,d);c=a[0]-1&&(i=e>a[0]-1?(2*p+(a[0]-1)*i)/(a[0]+1):o/a[0],s+=i,e>=2*a[0]-2&&(n=e>2*a[0]-2?(2*i+(a[0]-1)*n)/(a[0]+1):s/a[0],l+=n,e>=3*a[0]-3))){var f=void 0,v=0;e>3*a[0]-3?(f=(2*n+(a[0]-1)*r)/(a[0]+1),v=(f-r)/r*100):f=l/a[0],r=f,h.trix=v,c+=v,e>=3*a[0]+a[1]-4&&(h.maTrix=c/a[1],c-=null!==(d=u[e-(a[1]-1)].trix)&&void 0!==d?d:0)}u.push(h)}),u}};function Je(){return{key:"volume",title:"VOLUME: ",type:"bar",baseValue:0,styles:function(t,e,i){var n=t.current.kLineData,r=Ft(e.styles,"bars[0].noChangeColor",i.bars[0].noChangeColor);return Mt(n)&&(n.close>n.open?r=Ft(e.styles,"bars[0].upColor",i.bars[0].upColor):n.close=e-1&&(l[n[i].key]=r[i]/e,r[i]-=null!==(c=t[a-(e-1)].volume)&&void 0!==c?c:0)}),l})}},ti={name:"VR",shortName:"VR",calcParams:[26,6],figures:[{key:"vr",title:"VR: ",type:"line"},{key:"maVr",title:"MAVR: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=0,o=0,s=[];return t.forEach(function(e,l){var c,u,d,h,p,f={},v=e.close,g=(null!==(c=t[l-1])&&void 0!==c?c:e).close,m=null!==(u=e.volume)&&void 0!==u?u:0;if(v>g?n+=m:v=i[0]-1){var y=a/2;f.vr=r+y===0?0:(n+y)/(r+y)*100,o+=f.vr,l>=i[0]+i[1]-2&&(f.maVr=o/i[1],o-=null!==(d=s[l-(i[1]-1)].vr)&&void 0!==d?d:0);var b=t[l-(i[0]-1)],x=null!==(h=t[l-i[0]])&&void 0!==h?h:b,_=b.close,w=null!==(p=b.volume)&&void 0!==p?p:0;_>x.close?n-=w:_=s){var l=me(t.slice(r-s,r+1),"high","low"),c=l[0],u=l[1],d=c-u;a[n[i].key]=0===d?0:(o-c)/d*100}}),a})}},ii={},ni=[Te,Me,Ie,De,Pe,Le,Re,Fe,Be,Ne,Oe,ze,We,Ve,$e,He,Ke,Ye,Xe,Ue,Ge,je,qe,Ze,Qe,ti,ei];function ri(t){ii[t.name]=jt.extend(t)}function ai(t){var e;return null!==(e=ii[t])&&void 0!==e?e:null}ni.forEach(function(t){ii[t.name]=jt.extend(t)});var oi=function(){function t(t){this._instances=new Map,this._chartStore=t}return t.prototype._overrideInstance=function(t,e){var i=e.shortName,n=e.series,r=e.calcParams,a=e.precision,o=e.figures,s=e.minValue,l=e.maxValue,c=e.shouldOhlc,u=e.shouldFormatBigNumber,d=e.visible,h=e.zLevel,p=e.styles,f=e.extendData,v=e.regenerateFigures,g=e.createTooltipDataSource,m=e.draw,y=e.calc,b=!1;Et(i)&&t.setShortName(i)&&(b=!0),Mt(n)&&t.setSeries(n)&&(b=!0);var x=!1;St(r)&&t.setCalcParams(r)&&(b=!0,x=!0),St(o)&&t.setFigures(o)&&(b=!0,x=!0),void 0!==s&&t.setMinValue(s)&&(b=!0),void 0!==l&&t.setMinValue(l)&&(b=!0),Tt(a)&&t.setPrecision(a)&&(b=!0),It(c)&&t.setShouldOhlc(c)&&(b=!0),It(u)&&t.setShouldFormatBigNumber(u)&&(b=!0),It(d)&&t.setVisible(d)&&(b=!0);var _=!1;return Tt(h)&&t.setZLevel(h)&&(b=!0,_=!0),Mt(p)&&t.setStyles(p)&&(b=!0),void 0!==f&&t.setExtendData(f)&&(b=!0,x=!0),void 0!==v&&t.setRegenerateFigures(v)&&(b=!0),void 0!==g&&t.setCreateTooltipDataSource(g)&&(b=!0),void 0!==m&&t.setDraw(m)&&(b=!0),kt(y)&&(t.calc=y,x=!0),[b,x,_]},t.prototype._sort=function(t){var e;Et(t)?null===(e=this._instances.get(t))||void 0===e||e.sort(function(t,e){return t.zLevel-e.zLevel}):this._instances.forEach(function(t){t.sort(function(t,e){return t.zLevel-e.zLevel})})},t.prototype.addInstance=function(t,e,i){return U(this,void 0,void 0,function(){var n,r,a,o,s;return G(this,function(l){switch(l.label){case 0:return n=t.name,r=this._instances.get(e),Mt(r)?(a=r.find(function(t){return t.name===n}),Mt(a)?[4,Promise.reject(new Error("Duplicate indicators."))]:[3,2]):[3,2];case 1:return[2,l.sent()];case 2:return Mt(r)||(r=[]),o=ai(n),s=new o,this.synchronizeSeriesPrecision(s),this._overrideInstance(s,t),i||(r=[]),r.push(s),this._instances.set(e,r),this._sort(e),[4,s.calcIndicator(this._chartStore.getDataList())];case 3:return[2,l.sent()]}})})},t.prototype.getInstances=function(t){var e;return null!==(e=this._instances.get(t))&&void 0!==e?e:[]},t.prototype.removeInstance=function(t,e){var i,n=!1,r=this._instances.get(t);if(Mt(r)){if(Et(e)){var a=r.findIndex(function(t){return t.name===e});a>-1&&(r.splice(a,1),n=!0)}else this._instances.set(t,[]),n=!0;0===(null===(i=this._instances.get(t))||void 0===i?void 0:i.length)&&this._instances.delete(t)}return n},t.prototype.hasInstances=function(t){return this._instances.has(t)},t.prototype.calcInstance=function(t,e){return U(this,void 0,void 0,function(){var i,n,r,a,o=this;return G(this,function(s){switch(s.label){case 0:return i=[],Et(t)?Et(e)?(n=this._instances.get(e),Mt(n)&&(r=n.find(function(e){return e.name===t}),Mt(r)&&i.push(r.calcIndicator(this._chartStore.getDataList())))):this._instances.forEach(function(e){var n=e.find(function(e){return e.name===t});Mt(n)&&i.push(n.calcIndicator(o._chartStore.getDataList()))}):this._instances.forEach(function(t){t.forEach(function(t){i.push(t.calcIndicator(o._chartStore.getDataList()))})}),[4,Promise.all(i)];case 1:return a=s.sent(),[2,a.includes(!0)]}})})},t.prototype.getInstanceByPaneId=function(t,e){var i,n,r=function(t){var e=new Map;return t.forEach(function(t){e.set(t.name,t)}),e};if(Et(t)){var a=null!==(i=this._instances.get(t))&&void 0!==i?i:[];return Et(e)?null!==(n=null===a||void 0===a?void 0:a.find(function(t){return t.name===e}))&&void 0!==n?n:null:r(a)}var o=new Map;return this._instances.forEach(function(t,e){o.set(e,r(t))}),o},t.prototype.synchronizeSeriesPrecision=function(t){var e=this._chartStore.getPrecision(),i=e.price,n=e.volume,r=function(t){switch(t.series){case Yt.Price:t.setPrecision(i,!0);break;case Yt.Volume:t.setPrecision(n,!0);break}};Mt(t)?r(t):this._instances.forEach(function(t){t.forEach(function(t){r(t)})})},t.prototype.override=function(t,e){return U(this,void 0,void 0,function(){var i,n,r,a,o,s,l,c=this;return G(this,function(u){switch(u.label){case 0:return i=t.name,n=new Map,null!==e?(r=this._instances.get(e),Mt(r)&&n.set(e,r)):n=this._instances,a=!1,o=[],s=!1,n.forEach(function(e){var n=e.find(function(t){return t.name===i});if(Mt(n)){var r=c._overrideInstance(n,t);r[2]&&(s=!0),r[1]?o.push(n.calcIndicator(c._chartStore.getDataList())):r[0]&&(a=!0)}}),s&&this._sort(),[4,Promise.all(o)];case 1:return l=u.sent(),[2,[a,l.includes(!0)]]}})})},t}(),si=function(){function t(t){this._crosshair={},this._activeIcon=null,this._chartStore=t}return t.prototype.setCrosshair=function(t,e){var i,n,r=null!==e&&void 0!==e?e:{},a=r.notInvalidate,o=r.notExecuteAction,s=this._chartStore.getDataList(),l=null!==t&&void 0!==t?t:{};Tt(l.x)?(i=this._chartStore.getTimeScaleStore().coordinateToDataIndex(l.x),n=i<0?0:i>s.length-1?s.length-1:i):(i=s.length-1,n=i);var c=s[n],u=this._chartStore.getTimeScaleStore().dataIndexToCoordinate(i),d={x:this._crosshair.x,y:this._crosshair.y,paneId:this._crosshair.paneId};this._crosshair=X(X({},l),{realX:u,kLineData:c,realDataIndex:i,dataIndex:n}),d.x===l.x&&d.y===l.y&&d.paneId===l.paneId||(null===c||null!==o&&void 0!==o&&o||this._chartStore.getChart().crosshairChange(this._crosshair),null!==a&&void 0!==a&&a||this._chartStore.getChart().updatePane(1))},t.prototype.recalculateCrosshair=function(t){this.setCrosshair(this._crosshair,{notInvalidate:t})},t.prototype.getCrosshair=function(){return this._crosshair},t.prototype.setActiveIcon=function(t){this._activeIcon=null!==t&&void 0!==t?t:null},t.prototype.getActiveIcon=function(){return this._activeIcon},t.prototype.clear=function(){this.setCrosshair({},{notInvalidate:!0}),this.setActiveIcon()},t}(),li={name:"fibonacciLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e,i=t.coordinates,n=t.bounding,r=t.overlay,a=t.precision,o=t.thousandsSeparator,s=t.decimalFoldThreshold,l=t.yAxis,c=r.points;if(i.length>0){var u=null===(e=null===l||void 0===l?void 0:l.isInCandle())||void 0===e||e?a.price:a.excludePriceVolumeMax,d=[],h=[],p=0,f=n.width;if(i.length>1&&Tt(c[0].value)&&Tt(c[1].value)){var v=[1,.786,.618,.5,.382,.236,0],g=i[0].y-i[1].y,m=c[0].value-c[1].value;v.forEach(function(t){var e,n=i[1].y+g*t,r=Wt(zt(((null!==(e=c[1].value)&&void 0!==e?e:0)+m*t).toFixed(u),o),s);d.push({coordinates:[{x:p,y:n},{x:f,y:n}]}),h.push({x:p,y:n,text:"".concat(r," (").concat((100*t).toFixed(1),"%)"),baseline:"bottom"})})}return[{type:"line",attrs:d},{type:"text",isCheckEvent:!1,attrs:h}]}return[]}},ci={name:"horizontalRayLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates,i=t.bounding,n={x:0,y:e[0].y};return Mt(e[1])&&e[0].x-1)for(var r=n;r>-1;r--)if(this._children[r].dispatchEvent(t,e,i))return!0;return this.onEvent(t,e,i)},t.prototype.addChild=function(t){return this._children.push(t),this},t.prototype.clear=function(){this._children=[]},t}(),pi=2,fi=function(t){function e(e){var i=t.call(this)||this;return i.attrs=e.attrs,i.styles=e.styles,i}return B(e,t),e.prototype.checkEventOn=function(t){return this.checkEventOnImp(t,this.attrs,this.styles)},e.prototype.setAttrs=function(t){return this.attrs=t,this},e.prototype.setStyles=function(t){return this.styles=t,this},e.prototype.draw=function(t){this.drawImp(t,this.attrs,this.styles)},e.extend=function(t){var i=function(e){function i(){return null!==e&&e.apply(this,arguments)||this}return B(i,e),i.prototype.checkEventOnImp=function(e,i,n){return t.checkEventOn(e,i,n)},i.prototype.drawImp=function(e,i,n){t.draw(e,i,n)},i}(e);return i},e}(hi);function vi(t,e){var i=[];i=i.concat(e);for(var n=0;n1)for(var a=1;a0&&i<1?i:0:i?.5:0;if(r>0&&n>2){for(var a=e[0].x,o=e[0].y,s=1;s1&&(2!==i.length||i[0].x!==i[1].x&&i[0].y!==i[1].y?(t.save(),c%2===1&&t.translate(.5,.5),t.beginPath(),t.moveTo(i[0].x,i[0].y),bi(t,i,s),t.stroke(),t.closePath(),t.restore()):(t.beginPath(),i[0].x===i[1].x?(t.moveTo(i[0].x+f,i[0].y),t.lineTo(i[1].x+f,i[1].y)):(t.moveTo(i[0].x,i[0].y+f),t.lineTo(i[1].x,i[1].y+f)),t.stroke(),t.closePath()))})}var _i={name:"line",checkEventOn:vi,draw:function(t,e,i){xi(t,e,i)}};function wi(t,e,i){var n=null!==i&&void 0!==i?i:0,r=[];if(t.length>1)if(t[0].x===t[1].x){var a=0,o=e.height;if(r.push({coordinates:[{x:t[0].x,y:a},{x:t[0].x,y:o}]}),t.length>2){r.push({coordinates:[{x:t[2].x,y:a},{x:t[2].x,y:o}]});for(var s=t[0].x-t[2].x,l=0;l2){var v=t[2].y-p*t[2].x;r.push({coordinates:[{x:u,y:u*p+v},{x:d,y:d*p+v}]});for(s=f-v,l=0;l1){var i=void 0;return i=t[0].x===t[1].x&&t[0].y!==t[1].y?t[0].yt[1].x?{x:0,y:mi(t[0],t[1],{x:0,y:t[0].y})}:{x:e.width,y:mi(t[0],t[1],{x:e.width,y:t[0].y})},{coordinates:[t[0],i]}}return[]}var Ti={name:"rayLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates,i=t.bounding;return[{type:"line",attrs:Ai(e,i)}]}},Mi={name:"segment",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates;return 2===e.length?[{type:"line",attrs:{coordinates:e}}]:[]}},Ii={name:"straightLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates,i=t.bounding;return 2===e.length?e[0].x===e[1].x?[{type:"line",attrs:{coordinates:[{x:e[0].x,y:0},{x:e[0].x,y:i.height}]}}]:[{type:"line",attrs:{coordinates:[{x:0,y:mi(e[0],e[1],{x:0,y:e[0].y})},{x:i.width,y:mi(e[0],e[1],{x:i.width,y:e[0].y})}]}}]:[]}},Ei={name:"verticalRayLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates,i=t.bounding;if(2===e.length){var n={x:e[0].x,y:0};return e[0].y0&&l.set(e[0],n)};try{for(var u=j(this._instances),d=u.next();!d.done;d=u.next()){var h=d.value;c(h)}}catch(f){e={error:f}}finally{try{d&&!d.done&&(i=u.return)&&i.call(u)}finally{if(e)throw e.error}}this._instances=l}else this._instances.forEach(function(t,e){a.push(e),t.forEach(function(t){var e;null===(e=t.onRemoved)||void 0===e||e.call(t,{overlay:t})})}),this._instances.clear();if(a.length>0){var p=this._chartStore.getChart();a.forEach(function(t){p.updatePane(1,t)}),p.updatePane(1,Vi.X_AXIS)}},t.prototype.setPressedInstanceInfo=function(t){this._pressedInstanceInfo=t},t.prototype.getPressedInstanceInfo=function(){return this._pressedInstanceInfo},t.prototype.updatePointPosition=function(t,e){if(t>0){var i=this._chartStore.getDataList();this._instances.forEach(function(n){n.forEach(function(n){var r=n.points;r.forEach(function(n){if(!Mt(n.timestamp)&&Mt(n.dataIndex)){e===Kt.Forward&&(n.dataIndex=n.dataIndex+t);var r=i[n.dataIndex];n.timestamp=null===r||void 0===r?void 0:r.timestamp}})})})}},t.prototype.setHoverInstanceInfo=function(t,e){var i,n,r=this._hoverInstanceInfo,a=r.instance,o=r.figureType,s=r.figureKey,l=r.figureIndex;if(((null===a||void 0===a?void 0:a.id)!==(null===(i=t.instance)||void 0===i?void 0:i.id)||o!==t.figureType||l!==t.figureIndex)&&(this._hoverInstanceInfo=t,(null===a||void 0===a?void 0:a.id)!==(null===(n=t.instance)||void 0===n?void 0:n.id))){var c=!1,u=!1;null!==a&&(u=!0,kt(a.onMouseLeave)&&(a.onMouseLeave(X({overlay:a,figureKey:s,figureIndex:l},e)),c=!0)),null!==t.instance&&(u=!0,kt(t.instance.onMouseEnter)&&(t.instance.onMouseEnter(X({overlay:t.instance,figureKey:t.figureKey,figureIndex:t.figureIndex},e)),c=!0)),u&&this._sort(),c||this._chartStore.getChart().updatePane(1)}},t.prototype.getHoverInstanceInfo=function(){return this._hoverInstanceInfo},t.prototype.setClickInstanceInfo=function(t,e){var i,n,r,a,o,s,l,c,u,d=this._clickInstanceInfo,h=d.paneId,p=d.instance,f=d.figureType,v=d.figureKey,g=d.figureIndex;if(null!==(n=null===(i=t.instance)||void 0===i?void 0:i.isDrawing())&&void 0!==n&&n||null===(a=null===(r=t.instance)||void 0===r?void 0:r.onClick)||void 0===a||a.call(r,X({overlay:t.instance,figureKey:t.figureKey,figureIndex:t.figureIndex},e)),((null===p||void 0===p?void 0:p.id)!==(null===(o=t.instance)||void 0===o?void 0:o.id)||f!==t.figureType||g!==t.figureIndex)&&(this._clickInstanceInfo=t,(null===p||void 0===p?void 0:p.id)!==(null===(s=t.instance)||void 0===s?void 0:s.id))){null===(l=null===p||void 0===p?void 0:p.onDeselected)||void 0===l||l.call(p,X({overlay:p,figureKey:v,figureIndex:g},e)),null===(u=null===(c=t.instance)||void 0===c?void 0:c.onSelected)||void 0===u||u.call(c,X({overlay:t.instance,figureKey:t.figureKey,figureIndex:t.figureIndex},e));var m=this._chartStore.getChart();m.updatePane(1,t.paneId),h!==t.paneId&&m.updatePane(1,h),m.updatePane(1,Vi.X_AXIS)}},t.prototype.getClickInstanceInfo=function(){return this._clickInstanceInfo},t.prototype.isEmpty=function(){return 0===this._instances.size&&null===this._progressInstanceInfo},t.prototype.isDrawing=function(){var t,e;return null!==this._progressInstanceInfo&&null!==(e=null===(t=this._progressInstanceInfo)||void 0===t?void 0:t.instance.isDrawing())&&void 0!==e&&e},t}(),Hi=function(){function t(){this._actions=new Map}return t.prototype.execute=function(t,e){var i;null===(i=this._actions.get(t))||void 0===i||i.execute(e)},t.prototype.subscribe=function(t,e){var i;this._actions.has(t)||this._actions.set(t,new Xt),null===(i=this._actions.get(t))||void 0===i||i.subscribe(e)},t.prototype.unsubscribe=function(t,e){var i=this._actions.get(t);Mt(i)&&(i.unsubscribe(e),i.isEmpty()&&this._actions.delete(t))},t.prototype.has=function(t){var e=this._actions.get(t);return Mt(e)&&!e.isEmpty()},t}(),Ki={grid:{horizontal:{color:"#EDEDED"},vertical:{color:"#EDEDED"}},candle:{priceMark:{high:{color:"#76808F"},low:{color:"#76808F"}},tooltip:{rect:{color:"#FEFEFE",borderColor:"#F2F3F5"},text:{color:"#76808F"}}},indicator:{tooltip:{text:{color:"#76808F"}}},xAxis:{axisLine:{color:"#DDDDDD"},tickText:{color:"#76808F"},tickLine:{color:"#DDDDDD"}},yAxis:{axisLine:{color:"#DDDDDD"},tickText:{color:"#76808F"},tickLine:{color:"#DDDDDD"}},separator:{color:"#DDDDDD"},crosshair:{horizontal:{line:{color:"#76808F"},text:{borderColor:"#686D76",backgroundColor:"#686D76"}},vertical:{line:{color:"#76808F"},text:{borderColor:"#686D76",backgroundColor:"#686D76"}}}},Yi={grid:{horizontal:{color:"#292929"},vertical:{color:"#292929"}},candle:{priceMark:{high:{color:"#929AA5"},low:{color:"#929AA5"}},tooltip:{rect:{color:"rgba(10, 10, 10, .6)",borderColor:"rgba(10, 10, 10, .6)"},text:{color:"#929AA5"}}},indicator:{tooltip:{text:{color:"#929AA5"}}},xAxis:{axisLine:{color:"#333333"},tickText:{color:"#929AA5"},tickLine:{color:"#333333"}},yAxis:{axisLine:{color:"#333333"},tickText:{color:"#929AA5"},tickLine:{color:"#333333"}},separator:{color:"#333333"},crosshair:{horizontal:{line:{color:"#929AA5"},text:{borderColor:"#373a40",backgroundColor:"#373a40"}},vertical:{line:{color:"#929AA5"},text:{borderColor:"#373a40",backgroundColor:"#373a40"}}}},Xi={light:Ki,dark:Yi};function Ui(t){var e;return null!==(e=Xi[t])&&void 0!==e?e:null}var Gi=function(){function t(t,e){this._styles=gt(),this._customApi=ne(),this._locale=re,this._precision={price:2,volume:0},this._thousandsSeparator=",",this._decimalFoldThreshold=3,this._dataList=[],this._loadMoreCallback=null,this._loadDataCallback=null,this._loading=!0,this._forwardMore=!0,this._backwardMore=!0,this._timeScaleStore=new Ae(this),this._indicatorStore=new oi(this),this._overlayStore=new $i(this),this._tooltipStore=new si(this),this._actionStore=new Hi,this._visibleDataList=[],this._chart=t,this.setOptions(e)}return t.prototype.adjustVisibleDataList=function(){this._visibleDataList=[];for(var t=this._timeScaleStore.getVisibleRange(),e=t.realFrom,i=t.realTo,n=e;n0&&(this._decimalFoldThreshold=u)}return this},t.prototype.getStyles=function(){return this._styles},t.prototype.getLocale=function(){return this._locale},t.prototype.getCustomApi=function(){return this._customApi},t.prototype.getThousandsSeparator=function(){return this._thousandsSeparator},t.prototype.getDecimalFoldThreshold=function(){return this._decimalFoldThreshold},t.prototype.getPrecision=function(){return this._precision},t.prototype.setPrecision=function(t){return this._precision=t,this._indicatorStore.synchronizeSeriesPrecision(),this},t.prototype.getDataList=function(){return this._dataList},t.prototype.getVisibleFirstData=function(){var t,e=this._timeScaleStore.getVisibleRange().from;return null!==(t=this._dataList[e])&&void 0!==t?t:null},t.prototype.getVisibleDataList=function(){return this._visibleDataList},t.prototype.addData=function(t,e,i){return U(this,void 0,void 0,function(){var n,r,a,o,s,l,c;return G(this,function(u){switch(u.label){case 0:if(n=!1,r=!1,a=0,St(t)){switch(a=t.length,e){case Kt.Init:this.clear(),this._dataList=t,this._forwardMore=null===i||void 0===i||i,this._timeScaleStore.resetOffsetRightDistance(),r=!0;break;case Kt.Backward:this._dataList=this._dataList.concat(t),this._backwardMore=null!==i&&void 0!==i&&i,r=a>0;break;case Kt.Forward:this._dataList=t.concat(this._dataList),this._forwardMore=null!==i&&void 0!==i&&i,r=a>0}this._loading=!1,n=!0}else o=this._dataList.length,s=t.timestamp,l=Ft(this._dataList[o-1],"timestamp",0),s>l?(this._dataList.push(t),c=this._timeScaleStore.getLastBarRightSideDiffBarCount(),c<0&&this._timeScaleStore.setLastBarRightSideDiffBarCount(--c),a=1,n=!0,r=!0):s===l&&(this._dataList[o-1]=t,n=!0,r=!0);if(!n)return[3,5];u.label=1;case 1:return u.trys.push([1,4,,5]),this._overlayStore.updatePointPosition(a,e),r?(this._timeScaleStore.adjustVisibleRange(),this._tooltipStore.recalculateCrosshair(!0),[4,this._indicatorStore.calcInstance()]):[3,3];case 2:u.sent(),this._chart.adjustPaneViewport(!1,!0,!0,!0),u.label=3;case 3:return this._actionStore.execute(Pt.OnDataReady),[3,5];case 4:return u.sent(),[3,5];case 5:return[2]}})})},t.prototype.setLoadMoreCallback=function(t){this._loadMoreCallback=t},t.prototype.executeLoadMoreCallback=function(t){this._forwardMore&&!this._loading&&Mt(this._loadMoreCallback)&&(this._loading=!0,this._loadMoreCallback(t))},t.prototype.setLoadDataCallback=function(t){this._loadDataCallback=t},t.prototype.executeLoadDataCallback=function(t){var e=this;if(!this._loading&&Mt(this._loadDataCallback)&&(this._forwardMore&&t.type===Kt.Forward||this._backwardMore&&t.type===Kt.Backward)){var i=function(i,n){e.addData(i,t.type,n).then(function(){}).catch(function(){})};this._loading=!0,this._loadDataCallback(X(X({},t),{callback:i}))}},t.prototype.clear=function(){this._forwardMore=!0,this._backwardMore=!0,this._loading=!0,this._dataList=[],this._visibleDataList=[],this._timeScaleStore.clear(),this._tooltipStore.clear()},t.prototype.getTimeScaleStore=function(){return this._timeScaleStore},t.prototype.getIndicatorStore=function(){return this._indicatorStore},t.prototype.getOverlayStore=function(){return this._overlayStore},t.prototype.getTooltipStore=function(){return this._tooltipStore},t.prototype.getActionStore=function(){return this._actionStore},t.prototype.getChart=function(){return this._chart},t}(),ji={MAIN:"main",X_AXIS:"xAxis",Y_AXIS:"yAxis",SEPARATOR:"separator"},qi=7;function Zi(){return U(this,void 0,void 0,function(){return G(this,function(t){switch(t.label){case 0:return[4,new Promise(function(t){var e=new ResizeObserver(function(i){t(i.every(function(t){return"devicePixelContentBoxSize"in t})),e.disconnect()});e.observe(document.body,{box:"device-pixel-content-box"})}).catch(function(){return!1})];case 1:return[2,t.sent()]}})})}var Ji=function(){function t(t,e){var i=this;this._supportedDevicePixelContentBox=!1,this._width=0,this._height=0,this._pixelWidth=0,this._pixelHeight=0,this._nextPixelWidth=0,this._nextPixelHeight=0,this._requestAnimationId=ae,this._mediaQueryListener=function(){var t=Vt(i._element);i._nextPixelWidth=Math.round(i._element.clientWidth*t),i._nextPixelHeight=Math.round(i._element.clientHeight*t),i._resetPixelRatio()},this._listener=e,this._element=he("canvas",t),this._ctx=this._element.getContext("2d",{willReadFrequently:!0}),Zi().then(function(t){i._supportedDevicePixelContentBox=t,t?(i._resizeObserver=new ResizeObserver(function(t){var e,n=t.find(function(t){return t.target===i._element}),r=null===(e=null===n||void 0===n?void 0:n.devicePixelContentBoxSize)||void 0===e?void 0:e[0];Mt(r)&&(i._nextPixelWidth=r.inlineSize,i._nextPixelHeight=r.blockSize,i._pixelWidth===i._nextPixelWidth&&i._pixelHeight===i._nextPixelHeight||i._resetPixelRatio())}),i._resizeObserver.observe(i._element,{box:"device-pixel-content-box"})):(i._mediaQueryList=window.matchMedia("(resolution: ".concat(Vt(i._element),"dppx)")),i._mediaQueryList.addListener(i._mediaQueryListener))}).catch(function(t){return!1})}return t.prototype._resetPixelRatio=function(){var t=this;this._executeListener(function(){var e=t._element.clientWidth,i=t._element.clientHeight,n=t._nextPixelWidth/e,r=t._nextPixelHeight/i;t._width=e,t._height=i,t._pixelWidth=t._nextPixelWidth,t._pixelHeight=t._nextPixelHeight,t._element.width=t._nextPixelWidth,t._element.height=t._nextPixelHeight,t._ctx.scale(n,r)})},t.prototype._executeListener=function(t){var e=this;this._requestAnimationId===ae&&(this._requestAnimationId=oe(function(){e._ctx.clearRect(0,0,e._width,e._height),null===t||void 0===t||t(),e._listener(),e._requestAnimationId=ae}))},t.prototype.update=function(t,e){if(this._width!==t||this._height!==e){if(this._element.style.width="".concat(t,"px"),this._element.style.height="".concat(e,"px"),!this._supportedDevicePixelContentBox){var i=Vt(this._element);this._nextPixelWidth=Math.round(t*i),this._nextPixelHeight=Math.round(e*i),this._resetPixelRatio()}}else this._executeListener()},t.prototype.getElement=function(){return this._element},t.prototype.getContext=function(){return this._ctx},t.prototype.destroy=function(){Mt(this._resizeObserver)&&this._resizeObserver.unobserve(this._element),Mt(this._mediaQueryList)&&this._mediaQueryList.removeListener(this._mediaQueryListener)},t}();function Qi(t){var e={width:0,height:0,left:0,right:0,top:0,bottom:0};return Mt(t)&&wt(e,t),e}var tn=function(t){function e(e,i){var n=t.call(this)||this;return n._bounding=Qi(),n._pane=i,n._rootContainer=e,n._container=n.createContainer(),e.appendChild(n._container),n}return B(e,t),e.prototype.setBounding=function(t){return wt(this._bounding,t),this},e.prototype.getContainer=function(){return this._container},e.prototype.getBounding=function(){return this._bounding},e.prototype.getPane=function(){return this._pane},e.prototype.update=function(t){this.updateImp(this._container,this._bounding,null!==t&&void 0!==t?t:3)},e.prototype.destroy=function(){this._rootContainer.removeChild(this._container)},e}(hi),en=function(t){function e(e,i){var n=t.call(this,e,i)||this;n._mainCanvas=new Ji({position:"absolute",top:"0",left:"0",zIndex:"2",boxSizing:"border-box"},function(){n.updateMain(n._mainCanvas.getContext())}),n._overlayCanvas=new Ji({position:"absolute",top:"0",left:"0",zIndex:"2",boxSizing:"border-box"},function(){n.updateOverlay(n._overlayCanvas.getContext())});var r=n.getContainer();return r.appendChild(n._mainCanvas.getElement()),r.appendChild(n._overlayCanvas.getElement()),n}return B(e,t),e.prototype.createContainer=function(){return he("div",{margin:"0",padding:"0",position:"absolute",top:"0",overflow:"hidden",boxSizing:"border-box",zIndex:"1"})},e.prototype.updateImp=function(t,e,i){var n=e.width,r=e.height,a=e.left;t.style.left="".concat(a,"px");var o=i,s=t.clientWidth,l=t.clientHeight;switch(n===s&&r===l||(t.style.width="".concat(n,"px"),t.style.height="".concat(r,"px"),o=3),o){case 0:this._mainCanvas.update(n,r);break;case 1:this._overlayCanvas.update(n,r);break;case 3:case 4:this._mainCanvas.update(n,r),this._overlayCanvas.update(n,r);break}},e.prototype.destroy=function(){this._mainCanvas.destroy(),this._overlayCanvas.destroy()},e.prototype.getImage=function(t){var e=this.getBounding(),i=e.width,n=e.height,r=he("canvas",{width:"".concat(i,"px"),height:"".concat(n,"px"),boxSizing:"border-box"}),a=r.getContext("2d"),o=Vt(r);return r.width=i*o,r.height=n*o,a.scale(o,o),a.drawImage(this._mainCanvas.getElement(),0,0,i,n),t&&a.drawImage(this._overlayCanvas.getElement(),0,0,i,n),r},e}(tn);function nn(t){return"transparent"===t||"none"===t||/^[rR][gG][Bb][Aa]\(([\s]*(2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?)[\s]*,){3}[\s]*0[\s]*\)$/.test(t)||/^[hH][Ss][Ll][Aa]\(([\s]*(360|3[0-5][0-9]|[012]?[0-9][0-9]?)[\s]*,)([\s]*((100|[0-9][0-9]?)%|0)[\s]*,){2}([\s]*0[\s]*)\)$/.test(t)}function rn(t,e){var i=[];i=i.concat(e);for(var n=0;ns*s))return!0}return!1}function an(t,e,i){var n=[];n=n.concat(e);var r=i.style,a=void 0===r?O.Fill:r,o=i.color,s=void 0===o?"currentColor":o,l=i.borderSize,c=void 0===l?1:l,u=i.borderColor,d=void 0===u?"currentColor":u,h=i.borderStyle,p=void 0===h?N.Solid:h,f=i.borderDashedValue,v=void 0===f?[2,2]:f,g=(a===O.Fill||i.style===O.StrokeFill)&&(!Et(s)||!nn(s));g&&(t.fillStyle=s,n.forEach(function(e){var i=e.x,n=e.y,r=e.r;t.beginPath(),t.arc(i,n,r,0,2*Math.PI),t.closePath(),t.fill()})),(a===O.Stroke||i.style===O.StrokeFill)&&c>0&&!nn(d)&&(t.strokeStyle=d,t.lineWidth=c,p===N.Dashed?t.setLineDash(v):t.setLineDash([]),n.forEach(function(e){var i=e.x,n=e.y,r=e.r;(!g||r>c)&&(t.beginPath(),t.arc(i,n,r,0,2*Math.PI),t.closePath(),t.stroke())}))}var on={name:"circle",checkEventOn:rn,draw:function(t,e,i){an(t,e,i)}};function sn(t,e){var i=[];i=i.concat(e);for(var n=0;nt.y!==a[s].y>t.y&&t.x<(a[s].x-a[o].x)*(t.y-a[o].y)/(a[s].y-a[o].y)+a[o].x&&(r=!r);if(r)return!0}return!1}function ln(t,e,i){var n=[];n=n.concat(e);var r=i.style,a=void 0===r?O.Fill:r,o=i.color,s=void 0===o?"currentColor":o,l=i.borderSize,c=void 0===l?1:l,u=i.borderColor,d=void 0===u?"currentColor":u,h=i.borderStyle,p=void 0===h?N.Solid:h,f=i.borderDashedValue,v=void 0===f?[2,2]:f;a!==O.Fill&&i.style!==O.StrokeFill||Et(s)&&nn(s)||(t.fillStyle=s,n.forEach(function(e){var i=e.coordinates;t.beginPath(),t.moveTo(i[0].x,i[0].y);for(var n=1;n0&&!nn(d)&&(t.strokeStyle=d,t.lineWidth=c,p===N.Dashed?t.setLineDash(v):t.setLineDash([]),n.forEach(function(e){var i=e.coordinates;t.beginPath(),t.moveTo(i[0].x,i[0].y);for(var n=1;n=a&&t.x<=a+o&&t.y>=s&&t.y<=s+l)return!0}return!1}function dn(t,e,i){var n,r=[];r=r.concat(e);var a=i.style,o=void 0===a?O.Fill:a,s=i.color,l=void 0===s?"transparent":s,c=i.borderSize,u=void 0===c?1:c,d=i.borderColor,h=void 0===d?"transparent":d,p=i.borderStyle,f=void 0===p?N.Solid:p,v=i.borderRadius,g=void 0===v?0:v,m=i.borderDashedValue,y=void 0===m?[2,2]:m,b=null!==(n=t.roundRect)&&void 0!==n?n:t.rect,x=(o===O.Fill||i.style===O.StrokeFill)&&(!Et(l)||!nn(l));if(x&&(t.fillStyle=l,r.forEach(function(e){var i=e.x,n=e.y,r=e.width,a=e.height;t.beginPath(),b.call(t,i,n,r,a,g),t.closePath(),t.fill()})),(o===O.Stroke||i.style===O.StrokeFill)&&u>0&&!nn(h)){t.strokeStyle=h,t.fillStyle=h,t.lineWidth=u,f===N.Dashed?t.setLineDash(y):t.setLineDash([]);var _=u%2===1?.5:0,w=Math.round(2*_);r.forEach(function(e){var i=e.x,n=e.y,r=e.width,a=e.height;r>2*u&&a>2*u?(t.beginPath(),b.call(t,i+_,n+_,r-w,a-w,g),t.closePath(),t.stroke()):x||t.fillRect(i,n,r,a)})}}var hn={name:"rect",checkEventOn:un,draw:function(t,e,i){dn(t,e,i)}};function pn(t,e){var i,n,r=e.size,a=void 0===r?12:r,o=e.paddingLeft,s=void 0===o?0:o,l=e.paddingTop,c=void 0===l?0:l,u=e.paddingRight,d=void 0===u?0:u,h=e.paddingBottom,p=void 0===h?0:h,f=e.weight,v=void 0===f?"normal":f,g=e.family,m=t.x,y=t.y,b=t.text,x=t.align,_=void 0===x?"left":x,w=t.baseline,C=void 0===w?"top":w,S=t.width,k=t.height,A=null!==S&&void 0!==S?S:s+Ht(b,a,v,g)+d,T=null!==k&&void 0!==k?k:c+a+p;switch(_){case"left":case"start":i=m;break;case"right":case"end":i=m-A;break;default:i=m-A/2;break}switch(C){case"top":case"hanging":n=y;break;case"bottom":case"ideographic":case"alphabetic":n=y-T;break;default:n=y-T/2;break}return{x:i,y:n,width:A,height:T}}function fn(t,e,i){var n=[];n=n.concat(e);for(var r=0;r=o&&t.x<=o+l&&t.y>=s&&t.y<=s+c)return!0}return!1}function vn(t,e,i){var n=[];n=n.concat(e);var r=i.color,a=void 0===r?"currentColor":r,o=i.size,s=void 0===o?12:o,l=i.family,c=i.weight,u=i.paddingLeft,d=void 0===u?0:u,h=i.paddingTop,p=void 0===h?0:h,f=i.paddingRight,v=void 0===f?0:f,g=n.map(function(t){return pn(t,i)});dn(t,g,X(X({},i),{color:i.backgroundColor})),t.textAlign="left",t.textBaseline="top",t.font=$t(s,c,l),t.fillStyle=a,n.forEach(function(e,i){var n=g[i];t.fillText(e.text,n.x+d,n.y+p,n.width-d-v)})}var gn={name:"text",checkEventOn:fn,draw:function(t,e,i){vn(t,e,i)}},mn=gn;function yn(t,e){var i=t.x-e.x,n=t.y-e.y;return Math.sqrt(i*i+n*n)}function bn(t,e){var i=[];i=i.concat(e);for(var n=0;n=Math.min(l,u)-pi&&t.y<=Math.max(c,d)+pi&&t.y>=Math.min(c,d)-pi)return!0}}return!1}function xn(t,e,i){var n=[];n=n.concat(e);var r=i.style,a=void 0===r?N.Solid:r,o=i.size,s=void 0===o?1:o,l=i.color,c=void 0===l?"currentColor":l,u=i.dashedValue,d=void 0===u?[2,2]:u;t.lineWidth=s,t.strokeStyle=c,a===N.Dashed?t.setLineDash(d):t.setLineDash([]),n.forEach(function(e){var i=e.x,n=e.y,r=e.r,a=e.startAngle,o=e.endAngle;t.beginPath(),t.arc(i,n,r,a,o),t.stroke(),t.closePath()})}var _n={name:"arc",checkEventOn:bn,draw:function(t,e,i){xn(t,e,i)}},wn={},Cn=[on,_i,cn,hn,gn,mn,_n];function Sn(t){var e;return null!==(e=wn[t])&&void 0!==e?e:null}Cn.forEach(function(t){wn[t.name]=fi.extend(t)});var kn=function(t){function e(e){var i=t.call(this)||this;return i._widget=e,i}return B(e,t),e.prototype.getWidget=function(){return this._widget},e.prototype.createFigure=function(t,e){var i=Sn(t.name);if(null!==i){var n=new i(t);if(Mt(e)){for(var r in e)e.hasOwnProperty(r)&&n.registerEvent(r,e[r]);this.addChild(n)}return n}return null},e.prototype.draw=function(t){this.clear(),this.drawImp(t)},e}(hi),An=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i,n=this.getWidget(),r=this.getWidget().getPane(),a=r.getChart(),o=n.getBounding(),s=a.getStyles().grid,l=s.show;if(l){t.save(),t.globalCompositeOperation="destination-over";var c=s.horizontal,u=c.show;if(u){var d=r.getAxisComponent(),h=d.getTicks().map(function(t){return{coordinates:[{x:0,y:t.coord},{x:o.width,y:t.coord}]}});null===(e=this.createFigure({name:"line",attrs:h,styles:c}))||void 0===e||e.draw(t)}var p=s.vertical,f=p.show;if(f){var v=a.getXAxisPane().getAxisComponent();h=v.getTicks().map(function(t){return{coordinates:[{x:t.coord,y:0},{x:t.coord,y:o.height}]}});null===(i=this.createFigure({name:"line",attrs:h,styles:p}))||void 0===i||i.draw(t)}t.restore()}},e}(kn),Tn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.eachChildren=function(t){var e=this.getWidget().getPane(),i=e.getChart().getChartStore(),n=i.getVisibleDataList(),r=i.getTimeScaleStore().getBarSpace();n.forEach(function(e,i){t(e,r,i)})},e}(kn),Mn=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._boundCandleBarClickEvent=function(t){return function(){return e.getWidget().getPane().getChart().getChartStore().getActionStore().execute(Pt.OnCandleBarClick,t),!1}},e}return B(e,t),e.prototype.drawImp=function(t){var e=this,i=this.getWidget().getPane(),n=i.getId()===Vi.CANDLE,r=i.getChart().getChartStore(),a=this.getCandleBarOptions(r);if(null!==a){var o=0,s=0;if(a.type===H.Ohlc){var l=r.getTimeScaleStore().getBarSpace().gapBar;o=Math.min(Math.max(Math.round(.2*l),1),8),o>2&&o%2===1&&o--,s=Math.floor(s/2)}var c=i.getAxisComponent();this.eachChildren(function(i,r){var l=i.data,u=i.x;if(Mt(l)){var d=l.open,h=l.high,p=l.low,f=l.close,v=a.type,g=a.styles,m=[];f>d?(m[0]=g.upColor,m[1]=g.upBorderColor,m[2]=g.upWickColor):fd?e._createStrokeBar(u,x,r,m):e._createSolidBar(u,x,r,m);break;case H.CandleDownStroke:_=d>f?e._createStrokeBar(u,x,r,m):e._createSolidBar(u,x,r,m);break;case H.Ohlc:_=[{name:"rect",attrs:[{x:u-s,y:x[0],width:o,height:x[3]-x[0]},{x:u-r.halfGapBar,y:y+o>x[3]?x[3]-o:y,width:r.halfGapBar,height:o},{x:u+s,y:b+o>x[3]?x[3]-o:b,width:r.halfGapBar-s,height:o}],styles:{color:m[0]}}];break}_.forEach(function(r){var a,o;n&&(o={mouseClickEvent:e._boundCandleBarClickEvent(i)}),null===(a=e.createFigure(r,o))||void 0===a||a.draw(t)})}})}},e.prototype.getCandleBarOptions=function(t){var e=t.getStyles().candle;return{type:e.type,styles:e.bar}},e.prototype._createSolidBar=function(t,e,i,n){return[{name:"rect",attrs:{x:t,y:e[0],width:1,height:e[3]-e[0]},styles:{color:n[2]}},{name:"rect",attrs:{x:t-i.halfGapBar,y:e[1],width:i.gapBar,height:Math.max(1,e[2]-e[1])},styles:{style:O.StrokeFill,color:n[0],borderColor:n[1]}}]},e.prototype._createStrokeBar=function(t,e,i,n){return[{name:"rect",attrs:[{x:t,y:e[0],width:1,height:e[1]-e[0]},{x:t,y:e[2],width:1,height:e[3]-e[2]}],styles:{color:n[2]}},{name:"rect",attrs:{x:t-i.halfGapBar,y:e[1],width:i.gapBar,height:Math.max(1,e[2]-e[1])},styles:{style:O.Stroke,borderColor:n[1]}}]},e}(Tn),In=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.getCandleBarOptions=function(t){var e,i,n=this.getWidget().getPane(),r=n.getAxisComponent();if(!r.isInCandle()){var a=t.getIndicatorStore().getInstances(n.getId());try{for(var o=j(a),s=o.next();!s.done;s=o.next()){var l=s.value;if(l.shouldOhlc&&l.visible){var c=l.styles,u=t.getStyles().indicator,d=Ft(c,"ohlc.upColor",u.ohlc.upColor),h=Ft(c,"ohlc.downColor",u.ohlc.downColor),p=Ft(c,"ohlc.noChangeColor",u.ohlc.noChangeColor);return{type:H.Ohlc,styles:{upColor:d,downColor:h,noChangeColor:p,upBorderColor:d,downBorderColor:h,noChangeBorderColor:p,upWickColor:d,downWickColor:h,noChangeWickColor:p}}}}}catch(f){e={error:f}}finally{try{s&&!s.done&&(i=o.return)&&i.call(o)}finally{if(e)throw e.error}}}return null},e.prototype.drawImp=function(e){var i=this;t.prototype.drawImp.call(this,e);var n=this.getWidget(),r=n.getPane(),a=r.getChart(),o=n.getBounding(),s=a.getXAxisPane().getAxisComponent(),l=r.getAxisComponent(),c=a.getChartStore(),u=c.getDataList(),d=c.getTimeScaleStore(),h=d.getVisibleRange(),p=c.getIndicatorStore().getInstances(r.getId()),f=c.getStyles().indicator;e.save(),p.forEach(function(t){var n;if(t.visible){t.zLevel<0?e.globalCompositeOperation="destination-over":e.globalCompositeOperation="source-over";var r=!1;if(null!==t.draw&&(e.save(),r=null!==(n=t.draw({ctx:e,kLineDataList:u,indicator:t,visibleRange:h,bounding:o,barSpace:d.getBarSpace(),defaultStyles:f,xAxis:s,yAxis:l}))&&void 0!==n&&n,e.restore()),!r){var a=t.result,c=[];i.eachChildren(function(n,r){var d,h,p,v=r.halfGapBar,g=n.dataIndex,m=n.x,y=s.convertToPixel(g-1),b=s.convertToPixel(g+1),x=null!==(d=a[g-1])&&void 0!==d?d:null,_=null!==(h=a[g])&&void 0!==h?h:null,w=null!==(p=a[g+1])&&void 0!==p?p:null,C={x:y},S={x:m},k={x:b};t.figures.forEach(function(t){var e=t.key,i=null===x||void 0===x?void 0:x[e];Tt(i)&&(C[e]=l.convertToPixel(i));var n=null===_||void 0===_?void 0:_[e];Tt(n)&&(S[e]=l.convertToPixel(n));var r=null===w||void 0===w?void 0:w[e];Tt(r)&&(k[e]=l.convertToPixel(r))}),Ut(u,t,g,f,function(t,n,a){var u,d,h;if(Mt(null===_||void 0===_?void 0:_[t.key])){var p=S[t.key],f=null===(u=t.attrs)||void 0===u?void 0:u.call(t,{data:{prev:x,current:_,next:w},coordinate:{prev:C,current:S,next:k},bounding:o,barSpace:r,xAxis:s,yAxis:l});if(!Mt(f))switch(t.type){case"circle":f={x:m,y:p,r:Math.max(1,v)};break;case"rect":case"bar":var g=null!==(d=t.baseValue)&&void 0!==d?d:l.getRange().from,y=l.convertToPixel(g),b=Math.abs(y-p);g!==(null===_||void 0===_?void 0:_[t.key])&&(b=Math.max(1,b));var A=void 0;A=p>y?y:p,f={x:m-v,y:A,width:Math.max(1,2*v),height:b};break;case"line":Mt(c[a])||(c[a]=[]),Tt(S[t.key])&&Tt(k[t.key])&&c[a].push({coordinates:[{x:S.x,y:S[t.key]},{x:k.x,y:k[t.key]}],styles:n});break}var T=t.type;Mt(f)&&"line"!==T&&(null===(h=i.createFigure({name:"bar"===T?"rect":T,attrs:f,styles:n}))||void 0===h||h.draw(e))}})}),c.forEach(function(t){if(t.length>1){for(var n=[{coordinates:[t[0].coordinates[0],t[0].coordinates[1]],styles:t[0].styles}],r=1;r0,S=_.length>0;if(C||S){var k=q(p.classifyTooltipIcons(w),3),A=k[0],T=k[1],M=k[2];if(g=p.drawStandardTooltipIcons(t,r,A,m,e,a.name,c,g,d),C){var I=b;x.length>0&&(I="".concat(I).concat(x)),g=p.drawStandardTooltipLegends(t,[{title:{text:"",color:v.color},value:{text:I,color:v.color}}],m,c,g,d,v)}g=p.drawStandardTooltipIcons(t,r,T,m,e,a.name,c,g,d),S&&(g=p.drawStandardTooltipLegends(t,_,m,c,g,d,f.text)),g=p.drawStandardTooltipIcons(t,r,M,m,e,a.name,c,g,d),u=m.y+g}})}return u},e.prototype.drawStandardTooltipIcons=function(t,e,i,n,r,a,o,s,l){var c=this;if(i.length>0){var u=0,d=0;i.forEach(function(e){var i=e.marginLeft,n=void 0===i?0:i,r=e.marginTop,a=void 0===r?0:r,o=e.marginRight,s=void 0===o?0:o,l=e.marginBottom,c=void 0===l?0:l,h=e.paddingLeft,p=void 0===h?0:h,f=e.paddingTop,v=void 0===f?0:f,g=e.paddingRight,m=void 0===g?0:g,y=e.paddingBottom,b=void 0===y?0:y,x=e.size,_=e.fontFamily,w=e.icon;t.font=$t(x,"normal",_),u+=n+p+t.measureText(w).width+m+s,d=Math.max(d,a+v+x+b+c)}),n.x+u>l?(n.x=o,n.y+=s,s=d):s=Math.max(s,d),i.forEach(function(i){var o,s=i.marginLeft,l=void 0===s?0:s,u=i.marginTop,d=void 0===u?0:u,h=i.marginRight,p=void 0===h?0:h,f=i.paddingLeft,v=void 0===f?0:f,g=i.paddingTop,m=void 0===g?0:g,y=i.paddingRight,b=void 0===y?0:y,x=i.paddingBottom,_=void 0===x?0:x,w=i.color,C=i.activeColor,S=i.size,k=i.fontFamily,A=i.icon,T=i.backgroundColor,M=i.activeBackgroundColor,I=(null===e||void 0===e?void 0:e.paneId)===r&&(null===e||void 0===e?void 0:e.indicatorName)===a&&(null===e||void 0===e?void 0:e.iconId)===i.id;null===(o=c.createFigure({name:"text",attrs:{text:A,x:n.x+l,y:n.y+d},styles:{paddingLeft:v,paddingTop:m,paddingRight:b,paddingBottom:_,color:I?C:w,size:S,family:k,backgroundColor:I?M:T}},{mouseClickEvent:c._boundIconClickEvent({paneId:r,indicatorName:a,iconId:i.id}),mouseMoveEvent:c._boundIconMouseMoveEvent({paneId:r,indicatorName:a,iconId:i.id})}))||void 0===o||o.draw(t),n.x+=l+v+t.measureText(A).width+b+p})}return s},e.prototype.drawStandardTooltipLegends=function(t,e,i,n,r,a,o){var s=this;if(e.length>0){var l=o.marginLeft,c=o.marginTop,u=o.marginRight,d=o.marginBottom,h=o.size,p=o.family,f=o.weight;t.font=$t(h,f,p),e.forEach(function(e){var o,v,g=e.title,m=e.value,y=t.measureText(g.text).width,b=t.measureText(m.text).width,x=y+b,_=c+h+d;i.x+l+x+u>a?(i.x=n,i.y+=r,r=_):r=Math.max(r,_),g.text.length>0&&(null===(o=s.createFigure({name:"text",attrs:{x:i.x+l,y:i.y+c,text:g.text},styles:{color:g.color,size:h,family:p,weight:f}}))||void 0===o||o.draw(t)),null===(v=s.createFigure({name:"text",attrs:{x:i.x+l+y,y:i.y+c,text:m.text},styles:{color:m.color,size:h,family:p,weight:f}}))||void 0===v||v.draw(t),i.x+=l+x+u})}return r},e.prototype.isDrawTooltip=function(t,e){var i=e.showRule;return i===z.Always||i===z.FollowCross&&Et(t.paneId)},e.prototype.getIndicatorTooltipData=function(t,e,i,n,r,a,o){var s,l,c=o.tooltip,u=c.showName?i.shortName:"",d="",h=i.calcParams;h.length>0&&c.showParams&&(d="(".concat(h.join(","),")"));var p={name:u,calcParamsText:d,values:[],icons:c.icons},f=e.dataIndex,v=null!==(s=i.result)&&void 0!==s?s:[],g=[];if(i.visible){var m=null!==(l=v[f])&&void 0!==l?l:{};Ut(t,i,f,o,function(t,e){var o;if(Et(t.title)){var s=e.color,l=null!==(o=m[t.key])&&void 0!==o?o:c.defaultValue;Tt(l)&&(l=Nt(l,i.precision),i.shouldFormatBigNumber&&(l=n.formatBigNumber(l)),l=Wt(zt(l,r),a)),g.push({title:{text:t.title,color:s},value:{text:l,color:s}})}}),p.values=g}if(null!==i.createTooltipDataSource){var y=this.getWidget(),b=y.getPane(),x=b.getChart().getChartStore(),_=i.createTooltipDataSource({kLineDataList:t,indicator:i,visibleRange:x.getTimeScaleStore().getVisibleRange(),bounding:y.getBounding(),crosshair:e,defaultStyles:o,xAxis:b.getChart().getXAxisPane().getAxisComponent(),yAxis:b.getAxisComponent()}),w=_.name,C=_.calcParamsText,S=_.values,k=_.icons;if(Et(w)&&c.showName&&(p.name=w),Et(C)&&c.showParams&&(p.calcParamsText=C),Mt(k)&&(p.icons=k),Mt(S)&&i.visible){var A=[],T=o.tooltip.text.color;S.forEach(function(t){var e,o={text:"",color:T};At(t.title)?o=t.title:o.text=t.title;var s={text:"",color:T};if(At(t.value)?s=t.value:s.text=null!==(e=t.value)&&void 0!==e?e:c.defaultValue,Tt(s.text)){var l=Nt(s.text,i.precision);i.shouldFormatBigNumber&&(l=n.formatBigNumber(l)),l=Wt(zt(l,r),a),s.text=l}A.push({title:o,value:s})}),p.values=A}}return p},e.prototype.classifyTooltipIcons=function(t){var e=[],i=[],n=[];return t.forEach(function(t){switch(t.position){case V.Left:e.push(t);break;case V.Middle:i.push(t);break;case V.Right:n.push(t);break}}),[e,i,n]},e}(kn),Pn=function(t){function e(e){var i=t.call(this,e)||this;return i._initEvent(),i}return B(e,t),e.prototype._initEvent=function(){var t=this,e=this.getWidget().getPane(),i=e.getId(),n=e.getChart().getChartStore().getOverlayStore();this.registerEvent("mouseMoveEvent",function(e){var r,a=n.getProgressInstanceInfo();if(null!==a){var o=a.instance,s=a.paneId;o.isStart()&&(n.updateProgressInstanceInfo(i),s=i);var l=o.points.length-1,c="".concat(ee,"point_").concat(l);return o.isDrawing()&&s===i&&(o.eventMoveForDrawing(t._coordinateToPoint(a.instance,e)),null===(r=o.onDrawing)||void 0===r||r.call(o,X({overlay:o,figureKey:c,figureIndex:l},e))),t._figureMouseMoveEvent(o,1,c,l,0)(e)}return n.setHoverInstanceInfo({paneId:i,instance:null,figureType:0,figureKey:"",figureIndex:-1,attrsIndex:-1},e),!1}).registerEvent("mouseClickEvent",function(e){var r,a,o=n.getProgressInstanceInfo();if(null!==o){var s=o.instance,l=o.paneId;s.isStart()&&(n.updateProgressInstanceInfo(i,!0),l=i);var c=s.points.length-1,u="".concat(ee,"point_").concat(c);return s.isDrawing()&&l===i&&(s.eventMoveForDrawing(t._coordinateToPoint(s,e)),null===(r=s.onDrawing)||void 0===r||r.call(s,X({overlay:s,figureKey:u,figureIndex:c},e)),s.nextStep(),s.isDrawing()||(n.progressInstanceComplete(),null===(a=s.onDrawEnd)||void 0===a||a.call(s,X({overlay:s,figureKey:u,figureIndex:c},e)))),t._figureMouseClickEvent(s,1,u,c,0)(e)}return n.setClickInstanceInfo({paneId:i,instance:null,figureType:0,figureKey:"",figureIndex:-1,attrsIndex:-1},e),!1}).registerEvent("mouseDoubleClickEvent",function(e){var r,a=n.getProgressInstanceInfo();if(null!==a){var o=a.instance,s=a.paneId;if(o.isDrawing()&&s===i&&(o.forceComplete(),!o.isDrawing())){n.progressInstanceComplete();var l=o.points.length-1,c="".concat(ee,"point_").concat(l);null===(r=o.onDrawEnd)||void 0===r||r.call(o,X({overlay:o,figureKey:c,figureIndex:l},e))}var u=o.points.length-1;return t._figureMouseClickEvent(o,1,"".concat(ee,"point_").concat(u),u,0)(e)}return!1}).registerEvent("mouseRightClickEvent",function(e){var i=n.getProgressInstanceInfo();if(null!==i){var r=i.instance;if(r.isDrawing()){var a=r.points.length-1;return t._figureMouseRightClickEvent(r,1,"".concat(ee,"point_").concat(a),a,0)(e)}}return!1}).registerEvent("mouseUpEvent",function(t){var e,r=n.getPressedInstanceInfo(),a=r.instance,o=r.figureIndex,s=r.figureKey;return null!==a&&(null===(e=a.onPressedMoveEnd)||void 0===e||e.call(a,X({overlay:a,figureKey:s,figureIndex:o},t))),n.setPressedInstanceInfo({paneId:i,instance:null,figureType:0,figureKey:"",figureIndex:-1,attrsIndex:-1}),!1}).registerEvent("pressedMouseMoveEvent",function(e){var i,r,a=n.getPressedInstanceInfo(),o=a.instance,s=a.figureType,l=a.figureIndex,c=a.figureKey;if(null!==o){if(!o.lock&&(null===(r=null===(i=o.onPressedMoving)||void 0===i?void 0:i.call(o,X({overlay:o,figureIndex:l,figureKey:c},e)))||void 0===r||!r)){var u=t._coordinateToPoint(o,e);1===s?o.eventPressedPointMove(u,l):o.eventPressedOtherMove(u,t.getWidget().getPane().getChart().getChartStore().getTimeScaleStore())}return!0}return!1})},e.prototype._createFigureEvents=function(t,e,i,n,r,a){var o;if(!t.isDrawing()){var s=[];if(Mt(a)&&(It(a)?a&&(s=qt()):s=a),0===s.length)return{mouseMoveEvent:this._figureMouseMoveEvent(t,e,i,n,r),mouseDownEvent:this._figureMouseDownEvent(t,e,i,n,r),mouseClickEvent:this._figureMouseClickEvent(t,e,i,n,r),mouseRightClickEvent:this._figureMouseRightClickEvent(t,e,i,n,r),mouseDoubleClickEvent:this._figureMouseDoubleClickEvent(t,e,i,n,r)};o={},s.includes("mouseMoveEvent")||s.includes("touchMoveEvent")||(o.mouseMoveEvent=this._figureMouseMoveEvent(t,e,i,n,r)),s.includes("mouseDownEvent")||s.includes("touchStartEvent")||(o.mouseDownEvent=this._figureMouseDownEvent(t,e,i,n,r)),s.includes("mouseClickEvent")||s.includes("tapEvent")||(o.mouseClickEvent=this._figureMouseClickEvent(t,e,i,n,r)),s.includes("mouseDoubleClickEvent")||s.includes("doubleTapEvent")||(o.mouseDoubleClickEvent=this._figureMouseDoubleClickEvent(t,e,i,n,r)),s.includes("mouseRightClickEvent")||(o.mouseRightClickEvent=this._figureMouseRightClickEvent(t,e,i,n,r))}return o},e.prototype._figureMouseMoveEvent=function(t,e,i,n,r){var a=this;return function(o){var s=a.getWidget().getPane(),l=s.getChart().getChartStore().getOverlayStore();return l.setHoverInstanceInfo({paneId:s.getId(),instance:t,figureType:e,figureKey:i,figureIndex:n,attrsIndex:r},o),!0}},e.prototype._figureMouseDownEvent=function(t,e,i,n,r){var a=this;return function(o){var s,l=a.getWidget().getPane(),c=l.getId(),u=l.getChart().getChartStore().getOverlayStore();return t.startPressedMove(a._coordinateToPoint(t,o)),null===(s=t.onPressedMoveStart)||void 0===s||s.call(t,X({overlay:t,figureIndex:n,figureKey:i},o)),u.setPressedInstanceInfo({paneId:c,instance:t,figureType:e,figureKey:i,figureIndex:n,attrsIndex:r}),!0}},e.prototype._figureMouseClickEvent=function(t,e,i,n,r){var a=this;return function(o){var s=a.getWidget().getPane(),l=s.getId(),c=s.getChart().getChartStore().getOverlayStore();return c.setClickInstanceInfo({paneId:l,instance:t,figureType:e,figureKey:i,figureIndex:n,attrsIndex:r},o),!0}},e.prototype._figureMouseDoubleClickEvent=function(t,e,i,n,r){return function(e){var r;return null===(r=t.onDoubleClick)||void 0===r||r.call(t,X(X({},e),{figureIndex:n,figureKey:i,overlay:t})),!0}},e.prototype._figureMouseRightClickEvent=function(t,e,i,n,r){var a=this;return function(e){var r,o;if(null===(o=null===(r=t.onRightClick)||void 0===r?void 0:r.call(t,X({overlay:t,figureIndex:n,figureKey:i},e)))||void 0===o||!o){var s=a.getWidget().getPane(),l=s.getChart().getChartStore().getOverlayStore();l.removeInstance(t)}return!0}},e.prototype._coordinateToPoint=function(t,e){var i,n={},r=this.getWidget().getPane(),a=r.getChart(),o=r.getId(),s=a.getChartStore().getTimeScaleStore();if(this.coordinateToPointTimestampDataIndexFlag()){var l=a.getXAxisPane().getAxisComponent(),c=l.convertFromPixel(e.x),u=null!==(i=s.dataIndexToTimestamp(c))&&void 0!==i?i:void 0;n.dataIndex=c,n.timestamp=u}if(this.coordinateToPointValueFlag()){var d=r.getAxisComponent(),h=d.convertFromPixel(e.y);if(t.mode!==Gt.Normal&&o===Vi.CANDLE&&Tt(n.dataIndex)){var p=s.getDataByDataIndex(n.dataIndex);if(null!==p){var f=t.modeSensitivity;if(h>p.high)if(t.mode===Gt.WeakMagnet){var v=d.convertToPixel(p.high),g=d.convertFromPixel(v-f);hg&&(h=p.low)}else h=p.low;else{var y=Math.max(p.open,p.close),b=Math.min(p.open,p.close);h=h>y?h-y0){var m=(new Array).concat(this.getFigures(e,g,i,n,r,s,l,a,c,u,d));this.drawFigures(t,e,m,c)}this.drawDefaultFigures(t,e,g,i,r,a,o,s,l,c,u,d,h,p)},e.prototype.drawFigures=function(t,e,i,n){var r=this;i.forEach(function(i,a){var o=i.type,s=i.styles,l=i.attrs,c=i.ignoreEvent,u=[].concat(l);u.forEach(function(l,u){var d,h,p,f=r._createFigureEvents(e,2,null!==(d=i.key)&&void 0!==d?d:"",a,u,c),v=X(X(X({},n[o]),null===(h=e.styles)||void 0===h?void 0:h[o]),s);null===(p=r.createFigure({name:o,attrs:l,styles:v},f))||void 0===p||p.draw(t)})})},e.prototype.getCompleteOverlays=function(t,e){return t.getInstances(e)},e.prototype.getProgressOverlay=function(t,e){return t.paneId===e?t.instance:null},e.prototype.getFigures=function(t,e,i,n,r,a,o,s,l,c,u){var d,h;return null!==(h=null===(d=t.createPointFigures)||void 0===d?void 0:d.call(t,{overlay:t,coordinates:e,bounding:i,barSpace:n,precision:r,thousandsSeparator:a,decimalFoldThreshold:o,dateTimeFormat:s,defaultStyles:l,xAxis:c,yAxis:u}))&&void 0!==h?h:[]},e.prototype.drawDefaultFigures=function(t,e,i,n,r,a,o,s,l,c,u,d,h,p){var f,v,g=this;if(e.needDefaultPointFigure&&((null===(f=h.instance)||void 0===f?void 0:f.id)===e.id&&0!==h.figureType||(null===(v=p.instance)||void 0===v?void 0:v.id)===e.id&&0!==p.figureType)){var m=e.styles,y=X(X({},c.point),null===m||void 0===m?void 0:m.point);i.forEach(function(i,n){var r,a,o,s=i.x,l=i.y,c=y.radius,u=y.color,d=y.borderColor,p=y.borderSize;(null===(r=h.instance)||void 0===r?void 0:r.id)===e.id&&1===h.figureType&&h.figureIndex===n&&(c=y.activeRadius,u=y.activeColor,d=y.activeBorderColor,p=y.activeBorderSize),null===(a=g.createFigure({name:"circle",attrs:{x:s,y:l,r:c+p},styles:{color:d}},g._createFigureEvents(e,1,"".concat(ee,"point_").concat(n),n,0)))||void 0===a||a.draw(t),null===(o=g.createFigure({name:"circle",attrs:{x:s,y:l,r:c},styles:{color:u}}))||void 0===o||o.draw(t)})}},e}(kn),Ln=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._gridView=new An(n),n._indicatorView=new In(n),n._crosshairLineView=new En(n),n._tooltipView=n.createTooltipView(),n._overlayView=new Pn(n),n.addChild(n._tooltipView),n.addChild(n._overlayView),n.getContainer().style.cursor="crosshair",n.registerEvent("mouseMoveEvent",function(){return i.getChart().getChartStore().getTooltipStore().setActiveIcon(),!1}),n}return B(e,t),e.prototype.getName=function(){return ji.MAIN},e.prototype.updateMain=function(t){this.updateMainContent(t),this._indicatorView.draw(t),this._gridView.draw(t)},e.prototype.createTooltipView=function(){return new Dn(this)},e.prototype.updateMainContent=function(t){},e.prototype.updateOverlay=function(t){this._overlayView.draw(t),this._crosshairLineView.draw(t),this._tooltipView.draw(t)},e}(en),Rn=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._ripplePoint=e.createFigure({name:"circle",attrs:{x:0,y:0,r:0},styles:{style:"fill"}}),e._animationFrameTime=0,e._animation=new le({iterationCount:1/0}).doFrame(function(t){e._animationFrameTime=t;var i=e.getWidget().getPane();i.getChart().updatePane(0,i.getId())}),e}return B(e,t),e.prototype.drawImp=function(t){var e,i,n,r=this.getWidget(),a=r.getPane(),o=a.getChart(),s=o.getDataList(),l=s.length-1,c=r.getBounding(),u=a.getAxisComponent(),d=o.getStyles().candle.area,h=[],p=Number.MAX_SAFE_INTEGER,f=Number.MIN_SAFE_INTEGER,v=null;if(this.eachChildren(function(t){var e=t.data,i=t.x,n=null===e||void 0===e?void 0:e[d.value];if(Tt(n)){var r=u.convertToPixel(n);f===Number.MIN_SAFE_INTEGER&&(f=i),h.push({x:i,y:r}),p=Math.min(p,r),t.dataIndex===l&&(v={x:i,y:r})}}),h.length>0){null===(e=this.createFigure({name:"line",attrs:{coordinates:h},styles:{color:d.lineColor,size:d.lineSize,smooth:d.smooth}}))||void 0===e||e.draw(t);var g=d.backgroundColor,m=void 0;if(St(g)){var y=t.createLinearGradient(0,c.height,0,p);try{g.forEach(function(t){var e=t.offset,i=t.color;y.addColorStop(e,i)})}catch(_){}m=y}else m=g;t.fillStyle=m,t.beginPath(),t.moveTo(f,c.height),t.lineTo(h[0].x,h[0].y),bi(t,h,d.smooth),t.lineTo(h[h.length-1].x,c.height),t.closePath(),t.fill()}var b=d.point;if(b.show&&Mt(v)){null===(i=this.createFigure({name:"circle",attrs:{x:v.x,y:v.y,r:b.radius},styles:{style:"fill",color:b.color}}))||void 0===i||i.draw(t);var x=b.rippleRadius;b.animation&&(x=b.radius+this._animationFrameTime/b.animationDuration*(b.rippleRadius-b.radius),this._animation.setDuration(b.animationDuration).start()),null===(n=this._ripplePoint)||void 0===n||n.setAttrs({x:v.x,y:v.y,r:x}).setStyles({style:"fill",color:b.rippleColor}).draw(t)}else this.stopAnimation()},e.prototype.stopAnimation=function(){this._animation.stop()},e}(Tn),Fn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e=this.getWidget(),i=e.getPane(),n=i.getChart().getChartStore(),r=n.getStyles().candle.priceMark,a=r.high,o=r.low;if(r.show&&(a.show||o.show)){var s=n.getThousandsSeparator(),l=n.getDecimalFoldThreshold(),c=n.getPrecision(),u=i.getAxisComponent(),d=Number.MIN_SAFE_INTEGER,h=0,p=Number.MAX_SAFE_INTEGER,f=0;this.eachChildren(function(t){var e=t.data,i=t.x;Mt(e)&&(de.low&&(p=e.low,f=i))});var v=u.convertToPixel(d),g=u.convertToPixel(p);a.show&&d!==Number.MIN_SAFE_INTEGER&&this._drawMark(t,Wt(zt(Nt(d,c.price),s),l),{x:h,y:v},vp/2?(l=d-5,c=l-r.textOffset,u="right"):(l=d+5,u="left",c=l+r.textOffset);var f=h+n[1];null===(o=this.createFigure({name:"line",attrs:{coordinates:[{x:d,y:h},{x:d,y:f},{x:l,y:f}]},styles:{color:r.color}}))||void 0===o||o.draw(t),null===(s=this.createFigure({name:"text",attrs:{x:c,y:f,text:e,align:u,baseline:"middle"},styles:{color:r.color,size:r.textSize,family:r.textFamily,weight:r.textWeight}}))||void 0===s||s.draw(t)},e}(Tn),Bn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i=this.getWidget(),n=i.getPane(),r=i.getBounding(),a=n.getChart().getChartStore(),o=a.getStyles().candle.priceMark,s=o.last,l=s.line;if(o.show&&s.show&&l.show){var c=n.getAxisComponent(),u=a.getDataList(),d=u[u.length-1];if(null!=d){var h=d.close,p=d.open,f=c.convertToNicePixel(h),v=void 0;v=h>p?s.upColor:h0&&(x=this.drawStandardTooltipLegends(t,C,_,d,x,p,b)),x=this.drawStandardTooltipIcons(t,r,T,_,i,"",d,x,p)}return _.y+x},e.prototype._drawRectTooltip=function(t,e,i,n,r,a,o,s,l,c,u,d,h,p,f,v){var g,m,y,b,x,_=this,w=v.candle,C=v.indicator,S=w.tooltip,k=C.tooltip;if(h||p){var A=null!==(g=a.dataIndex)&&void 0!==g?g:0,T=this._getCandleTooltipLegends({prev:null!==(m=e[A-1])&&void 0!==m?m:null,current:a.kLineData,next:null!==(y=e[A+1])&&void 0!==y?y:null},o,s,l,c,u,d,w),M=S.offsetLeft,I=S.offsetTop,E=S.offsetRight,D=S.offsetBottom,P=S.text,L=P.marginLeft,R=P.marginRight,F=P.marginTop,B=P.marginBottom,N=P.size,z=P.weight,W=P.family,V=S.rect,H=V.position,Y=V.paddingLeft,X=V.paddingRight,U=V.paddingTop,G=V.paddingBottom,j=V.offsetLeft,q=V.offsetRight,Z=V.offsetTop,J=V.offsetBottom,Q=V.borderSize,tt=V.borderRadius,et=V.borderColor,it=V.color,nt=0,rt=0,at=0;h&&(t.font=$t(N,z,W),T.forEach(function(e){var i=e.title,n=e.value,r="".concat(i.text).concat(n.text),a=t.measureText(r).width+L+R;nt=Math.max(nt,a)}),at+=(B+F+N)*T.length);var ot=k.text,st=ot.marginLeft,lt=ot.marginRight,ct=ot.marginTop,ut=ot.marginBottom,dt=ot.size,ht=ot.weight,pt=ot.family,ft=[];if(p&&(t.font=$t(dt,ht,pt),i.forEach(function(i){var n,r=null!==(n=_.getIndicatorTooltipData(e,a,i,c,u,d,C).values)&&void 0!==n?n:[];ft.push(r),r.forEach(function(e){var i=e.title,n=e.value,r="".concat(i.text).concat(n.text),a=t.measureText(r).width+st+lt;nt=Math.max(nt,a),at+=ct+ut+dt})})),rt+=nt,0!==rt&&0!==at){rt+=2*Q+Y+X,at+=2*Q+U+G;var vt=n.width/2,gt=H===$.Pointer&&a.paneId===Vi.CANDLE,mt=(null!==(b=a.realX)&&void 0!==b?b:0)>vt,yt=0;if(gt){var bt=a.realX;yt=mt?bt-q-rt:bt+j}else mt?(yt=j+M,v.yAxis.inside&&v.yAxis.position===K.Left&&(yt+=r.width)):(yt=n.width-q-rt-E,v.yAxis.inside&&v.yAxis.position===K.Right&&(yt-=r.width));var xt=f+Z;if(gt){var _t=a.y;xt=_t-at/2,xt+at>n.height-J-D&&(xt=n.height-J-at-D),xt1){var c="{".concat(l[1],"}");o.text=o.text.replace(c,null!==(e=x[c])&&void 0!==e?e:p.defaultValue),"{change}"===c&&(o.color=0===m?s.priceMark.last.noChangeColor:m>0?s.priceMark.last.upColor:s.priceMark.last.downColor)}return{title:a,value:o}})},e}(Dn),$n=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._candleBarView=new Mn(n),n._candleAreaView=new Rn(n),n._candleHighLowPriceView=new Fn(n),n._candleLastPriceLineView=new Bn(n),n.addChild(n._candleBarView),n}return B(e,t),e.prototype.updateMainContent=function(t){var e=this.getPane().getChart().getStyles().candle;e.type!==H.Area?(this._candleBarView.draw(t),this._candleHighLowPriceView.draw(t),this._candleAreaView.stopAnimation()):this._candleAreaView.draw(t),this._candleLastPriceLineView.draw(t)},e.prototype.createTooltipView=function(){return new Vn(this)},e}(Ln),Hn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i,n=this,r=this.getWidget(),a=r.getPane(),o=r.getBounding(),s=a.getAxisComponent(),l=this.getAxisStyles(a.getChart().getStyles());if(l.show){l.axisLine.show&&(null===(e=this.createFigure({name:"line",attrs:this.createAxisLine(o,l),styles:l.axisLine}))||void 0===e||e.draw(t));var c=s.getTicks();if(l.tickLine.show){var u=this.createTickLines(c,o,l);u.forEach(function(e){var i;null===(i=n.createFigure({name:"line",attrs:e,styles:l.tickLine}))||void 0===i||i.draw(t)})}if(l.tickText.show){var d=this.createTickTexts(c,o,l);null===(i=this.createFigure({name:"text",attrs:d,styles:l.tickText}))||void 0===i||i.draw(t)}}},e}(kn),Kn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.getAxisStyles=function(t){return t.yAxis},e.prototype.createAxisLine=function(t,e){var i,n=this.getWidget().getPane().getAxisComponent(),r=e.axisLine.size;return i=n.isFromZero()?0:t.width-r,{coordinates:[{x:i,y:0},{x:i,y:t.height}]}},e.prototype.createTickLines=function(t,e,i){var n=this.getWidget().getPane().getAxisComponent(),r=i.axisLine,a=i.tickLine,o=0,s=0;return n.isFromZero()?(o=0,r.show&&(o+=r.size),s=o+a.length):(o=e.width,r.show&&(o-=r.size),s=o-a.length),t.map(function(t){return{coordinates:[{x:o,y:t.coord},{x:s,y:t.coord}]}})},e.prototype.createTickTexts=function(t,e,i){var n=this.getWidget().getPane().getAxisComponent(),r=i.axisLine,a=i.tickLine,o=i.tickText,s=0;n.isFromZero()?(s=o.marginStart,r.show&&(s+=r.size),a.show&&(s+=a.length)):(s=e.width-o.marginEnd,r.show&&(s-=r.size),a.show&&(s-=a.length));var l=this.getWidget().getPane().getAxisComponent().isFromZero()?"left":"right";return t.map(function(t){return{x:s,y:t.coord,text:t.text,align:l,baseline:"middle"}})},e}(Hn),Yn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i=this.getWidget(),n=i.getPane(),r=i.getBounding(),a=n.getChart().getChartStore(),o=a.getStyles().candle.priceMark,s=o.last,l=s.text;if(o.show&&s.show&&l.show){var c=a.getPrecision(),u=n.getAxisComponent(),d=a.getDataList(),h=d[d.length-1];if(Mt(h)){var p=h.close,f=h.open,v=u.convertToNicePixel(p),g=void 0;g=p>f?s.upColor:p1&&p.unshift({type:"rect",attrs:{x:0,y:g,width:i.width,height:m-g},ignoreEvent:!0})}return p},e.prototype.getFigures=function(t,e,i,n,r,a,o,s,l,c,u){var d,h;return null!==(h=null===(d=t.createYAxisFigures)||void 0===d?void 0:d.call(t,{overlay:t,coordinates:e,bounding:i,barSpace:n,precision:r,thousandsSeparator:a,decimalFoldThreshold:o,dateTimeFormat:s,defaultStyles:l,xAxis:c,yAxis:u}))&&void 0!==h?h:[]},e}(Pn),Gn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i=this.getWidget(),n=i.getPane(),r=i.getBounding(),a=i.getPane().getChart().getChartStore(),o=a.getTooltipStore().getCrosshair(),s=a.getStyles().crosshair;if(Et(o.paneId)&&this.compare(o,n.getId())&&s.show){var l=this.getDirectionStyles(s),c=l.text;if(l.show&&c.show){var u=n.getAxisComponent(),d=this.getText(o,a,u);t.font=$t(c.size,c.weight,c.family),null===(e=this.createFigure({name:"text",attrs:this.getTextAttrs(d,t.measureText(d).width,o,r,u,c),styles:c}))||void 0===e||e.draw(t)}}},e.prototype.compare=function(t,e){return t.paneId===e},e.prototype.getDirectionStyles=function(t){return t.horizontal},e.prototype.getText=function(t,e,i){var n,r=i,a=i.convertFromPixel(t.y);if(r.getType()===Y.Percentage){var o=e.getVisibleFirstData();n="".concat(((a-o.close)/o.close*100).toFixed(2),"%")}else{var s=e.getIndicatorStore().getInstances(t.paneId),l=0,c=!1;r.isInCandle()?l=e.getPrecision().price:s.forEach(function(t){l=Math.max(t.precision,l),c||(c=t.shouldFormatBigNumber)}),n=Nt(a,l),c&&(n=e.getCustomApi().formatBigNumber(n))}return Wt(zt(n,e.getThousandsSeparator()),e.getDecimalFoldThreshold())},e.prototype.getTextAttrs=function(t,e,i,n,r,a){var o,s,l=r;return l.isFromZero()?(o=0,s="left"):(o=n.width,s="right"),{x:o,y:i.y,text:t,align:s,baseline:"middle"}},e}(kn),jn=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._yAxisView=new Kn(n),n._candleLastPriceLabelView=new Yn(n),n._indicatorLastValueView=new Xn(n),n._overlayYAxisView=new Un(n),n._crosshairHorizontalLabelView=new Gn(n),n.getContainer().style.cursor="ns-resize",n.addChild(n._overlayYAxisView),n}return B(e,t),e.prototype.getName=function(){return ji.Y_AXIS},e.prototype.updateMain=function(t){this._yAxisView.draw(t),this.getPane().getAxisComponent().isInCandle()&&this._candleLastPriceLabelView.draw(t),this._indicatorLastValueView.draw(t)},e.prototype.updateOverlay=function(t){this._overlayYAxisView.draw(t),this._crosshairHorizontalLabelView.draw(t)},e}(en),qn=function(){function t(t){this._range={from:0,to:0,range:0,realFrom:0,realTo:0,realRange:0},this._prevRange={from:0,to:0,range:0,realFrom:0,realTo:0,realRange:0},this._ticks=[],this._autoCalcTickFlag=!0,this._parent=t}return t.prototype.getParent=function(){return this._parent},t.prototype.buildTicks=function(t){if(this._autoCalcTickFlag&&(this._range=this.calcRange()),this._prevRange.from!==this._range.from||this._prevRange.to!==this._range.to||t){this._prevRange=this._range;var e=this.optimalTicks(this._calcTicks());return this._ticks=this.createTicks({range:this._range,bounding:this.getSelfBounding(),defaultTicks:e}),!0}return!1},t.prototype.getTicks=function(){return this._ticks},t.prototype.getScrollZoomEnabled=function(){var t;return null===(t=this.getParent().getOptions().axisOptions.scrollZoomEnabled)||void 0===t||t},t.prototype.setRange=function(t){this._autoCalcTickFlag=!1,this._range=t},t.prototype.getRange=function(){return this._range},t.prototype.setAutoCalcTickFlag=function(t){this._autoCalcTickFlag=t},t.prototype.getAutoCalcTickFlag=function(){return this._autoCalcTickFlag},t.prototype._calcTicks=function(){var t=this._range,e=t.realFrom,i=t.realTo,n=t.realRange,r=[];if(n>=0){var a=q(this._calcTickInterval(n),2),o=a[0],s=a[1],l=ve(Math.ceil(e/o)*o,s),c=ve(Math.floor(i/o)*o,s),u=0,d=l;if(0!==o)while(d<=c){var h=d.toFixed(s);r[u]={text:h,coord:0,value:h},++u,d+=o}}return r},t.prototype._calcTickInterval=function(t){var e=fe(t/8),i=ge(e);return[e,i]},t}(),Zn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.calcRange=function(){var t,e,i,n,r=this.getParent(),a=r.getChart(),o=a.getChartStore(),s=Number.MAX_SAFE_INTEGER,l=Number.MIN_SAFE_INTEGER,c=[],u=!1,d=Number.MAX_SAFE_INTEGER,h=Number.MIN_SAFE_INTEGER,p=Number.MAX_SAFE_INTEGER,f=o.getIndicatorStore().getInstances(r.getId());f.forEach(function(t){var e,i,n;u||(u=null!==(e=t.shouldOhlc)&&void 0!==e&&e),p=Math.min(p,t.precision),Tt(t.minValue)&&(d=Math.min(d,t.minValue)),Tt(t.maxValue)&&(h=Math.max(h,t.maxValue)),c.push({figures:null!==(i=t.figures)&&void 0!==i?i:[],result:null!==(n=t.result)&&void 0!==n?n:[]})});var v=4,g=this.isInCandle();if(g){var m=o.getPrecision().price;v=p!==Number.MAX_SAFE_INTEGER?Math.min(p,m):m}else p!==Number.MAX_SAFE_INTEGER&&(v=p);var y=o.getVisibleDataList(),b=a.getStyles().candle,x=b.type===H.Area,_=b.area.value,w=g&&!x||!g&&u;y.forEach(function(t){var e=t.dataIndex,i=t.data;if(Mt(i)&&(w&&(s=Math.min(s,i.low),l=Math.max(l,i.high)),g&&x)){var n=i[_];Tt(n)&&(s=Math.min(s,n),l=Math.max(l,n))}c.forEach(function(t){var i,n=t.figures,r=t.result,a=null!==(i=r[e])&&void 0!==i?i:{};n.forEach(function(t){var e=a[t.key];Tt(e)&&(s=Math.min(s,e),l=Math.max(l,e))})})}),s!==Number.MAX_SAFE_INTEGER&&l!==Number.MIN_SAFE_INTEGER?(s=Math.min(d,s),l=Math.max(h,l)):(s=0,l=10);var C,S=this.getType();switch(S){case Y.Percentage:var k=o.getVisibleFirstData();Mt(k)&&Tt(k.close)&&(s=(s-k.close)/k.close*100,l=(l-k.close)/k.close*100),C=Math.pow(10,-2);break;case Y.Log:s=ye(s),l=ye(l),C=.05*be(-v);break;default:C=be(-v)}if(s===l||Math.abs(s-l)=1&&(E/=M);var D=null!==(n=null===I||void 0===I?void 0:I.bottom)&&void 0!==n?n:.1;D>=1&&(D/=M);var P,L,R,F=Math.abs(l-s);return s-=F*D,l+=F*E,F=Math.abs(l-s),S===Y.Log?(P=be(s),L=be(l),R=Math.abs(L-P)):(P=s,L=l,R=F),{from:s,to:l,range:F,realFrom:P,realTo:L,realRange:R}},e.prototype._innerConvertToPixel=function(t){var e,i,n=null!==(i=null===(e=this.getParent().getYAxisWidget())||void 0===e?void 0:e.getBounding().height)&&void 0!==i?i:0,r=this.getRange(),a=r.from,o=r.range,s=(t-a)/o;return this.isReverse()?Math.round(s*n):Math.round((1-s)*n)},e.prototype.isInCandle=function(){return this.getParent().getId()===Vi.CANDLE},e.prototype.getType=function(){return this.isInCandle()?this.getParent().getChart().getStyles().yAxis.type:Y.Normal},e.prototype.getPosition=function(){return this.getParent().getChart().getStyles().yAxis.position},e.prototype.isReverse=function(){return!!this.isInCandle()&&this.getParent().getChart().getStyles().yAxis.reverse},e.prototype.isFromZero=function(){var t=this.getParent().getChart().getStyles().yAxis,e=t.inside;return t.position===K.Left&&e||t.position===K.Right&&!e},e.prototype.optimalTicks=function(t){var e,i,n=this,r=this.getParent(),a=null!==(i=null===(e=r.getYAxisWidget())||void 0===e?void 0:e.getBounding().height)&&void 0!==i?i:0,o=r.getChart().getChartStore(),s=o.getCustomApi(),l=[],c=this.getType(),u=o.getIndicatorStore().getInstances(r.getId()),d=o.getThousandsSeparator(),h=o.getDecimalFoldThreshold(),p=0,f=!1;this.isInCandle()?p=o.getPrecision().price:u.forEach(function(t){p=Math.max(p,t.precision),f||(f=t.shouldFormatBigNumber)});var v,g=o.getStyles().xAxis.tickText.size;return t.forEach(function(t){var e,i=t.value,r=n._innerConvertToPixel(+i);switch(c){case Y.Percentage:e="".concat(Nt(i,2),"%");break;case Y.Log:r=n._innerConvertToPixel(ye(+i)),e=Nt(i,p);break;default:e=Nt(i,p),f&&(e=s.formatBigNumber(i));break}e=Wt(zt(e,d),h);var o=Tt(v);r>g&&r2*g||!o)&&(l.push({text:e,coord:r,value:i}),v=r)}),l},e.prototype.getAutoSize=function(){var t=this.getParent(),e=t.getChart(),i=e.getStyles(),n=i.yAxis,r=n.size;if("auto"!==r)return r;var a=e.getChartStore(),o=a.getCustomApi(),s=0;if(n.show&&(n.axisLine.show&&(s+=n.axisLine.size),n.tickLine.show&&(s+=n.tickLine.length),n.tickText.show)){var l=0;this.getTicks().forEach(function(t){l=Math.max(l,Ht(t.text,n.tickText.size,n.tickText.weight,n.tickText.family))}),s+=n.tickText.marginStart+n.tickText.marginEnd+l}var c=i.crosshair,u=0;if(c.show&&c.horizontal.show&&c.horizontal.text.show){var d=a.getIndicatorStore().getInstances(t.getId()),h=0,p=!1;d.forEach(function(t){h=Math.max(t.precision,h),p||(p=t.shouldFormatBigNumber)});var f=2;if(this.getType()!==Y.Percentage)if(this.isInCandle()){var v=a.getPrecision().price,g=i.indicator.lastValueMark;f=g.show&&g.text.show?Math.max(h,v):v}else f=h;var m=Nt(this.getRange().to,f);p&&(m=o.formatBigNumber(m)),m=Wt(m,a.getDecimalFoldThreshold()),u+=c.horizontal.text.paddingLeft+c.horizontal.text.paddingRight+2*c.horizontal.text.borderSize+Ht(m,c.horizontal.text.size,c.horizontal.text.weight,c.horizontal.text.family)}return Math.max(s,u)},e.prototype.getSelfBounding=function(){return this.getParent().getYAxisWidget().getBounding()},e.prototype.convertFromPixel=function(t){var e,i,n=null!==(i=null===(e=this.getParent().getYAxisWidget())||void 0===e?void 0:e.getBounding().height)&&void 0!==i?i:0,r=this.getRange(),a=r.from,o=r.range,s=this.isReverse()?t/n:1-t/n,l=s*o+a;switch(this.getType()){case Y.Percentage:var c=this.getParent().getChart().getChartStore().getVisibleFirstData();return Mt(c)&&Tt(c.close)?c.close*l/100+c.close:0;case Y.Log:return be(l);default:return l}},e.prototype.convertToRealValue=function(t){var e=t;return this.getType()===Y.Log&&(e=be(t)),e},e.prototype.convertToPixel=function(t){var e=t;switch(this.getType()){case Y.Percentage:var i=this.getParent().getChart().getChartStore().getVisibleFirstData();Mt(i)&&Tt(i.close)&&(e=(t-i.close)/i.close*100);break;case Y.Log:e=ye(t);break;default:e=t}return this._innerConvertToPixel(e)},e.prototype.convertToNicePixel=function(t){var e,i,n=null!==(i=null===(e=this.getParent().getYAxisWidget())||void 0===e?void 0:e.getBounding().height)&&void 0!==i?i:0,r=this.convertToPixel(t);return Math.round(Math.max(.05*n,Math.min(r,.98*n)))},e.extend=function(t){var i=function(e){function i(){return null!==e&&e.apply(this,arguments)||this}return B(i,e),i.prototype.createTicks=function(e){return t.createTicks(e)},i}(e);return i},e}(qn),Jn={name:"default",createTicks:function(t){var e=t.defaultTicks;return e}},Qn={default:Zn.extend(Jn)};function tr(t){var e;return null!==(e=Qn[t])&&void 0!==e?e:Qn.default}var er=function(){function t(t,e,i,n){this._bounding=Qi(),this._chart=i,this._id=n,this._init(t,e)}return t.prototype._init=function(t,e){this._rootContainer=t,this._container=he("div",{width:"100%",margin:"0",padding:"0",position:"relative",overflow:"hidden",boxSizing:"border-box"}),null!==e?t.insertBefore(this._container,e):t.appendChild(this._container)},t.prototype.getContainer=function(){return this._container},t.prototype.getId=function(){return this._id},t.prototype.getChart=function(){return this._chart},t.prototype.getBounding=function(){return this._bounding},t.prototype.update=function(t){this._bounding.height!==this._container.clientHeight&&(this._container.style.height="".concat(this._bounding.height,"px")),this.updateImp(null!==t&&void 0!==t?t:3,this._container,this._bounding)},t.prototype.destroy=function(){this._rootContainer.removeChild(this._container)},t}(),ir=function(t){function e(e,i,n,r,a){var o=t.call(this,e,i,n,r)||this;o._yAxisWidget=null,o._options={minHeight:zi,dragEnabled:!0,gap:{top:.2,bottom:.1},axisOptions:{name:"default",scrollZoomEnabled:!0}};var s=o.getContainer();return o._mainWidget=o.createMainWidget(s),o._yAxisWidget=o.createYAxisWidget(s),o.setOptions(a),o}return B(e,t),e.prototype.setOptions=function(t){var e,i,n,r,a,o=null===(e=t.axisOptions)||void 0===e?void 0:e.name;return(this._options.axisOptions.name!==o&&Et(o)||!Mt(this._axis))&&(this._axis=this.createAxisComponent(null!==o&&void 0!==o?o:"default")),wt(this._options,t),this.getId()===Vi.X_AXIS?(r=this.getMainWidget().getContainer(),a="ew-resize"):(r=this.getYAxisWidget().getContainer(),a="ns-resize"),null===(n=null===(i=t.axisOptions)||void 0===i?void 0:i.scrollZoomEnabled)||void 0===n||n?r.style.cursor=a:r.style.cursor="default",this},e.prototype.getOptions=function(){return this._options},e.prototype.getAxisComponent=function(){return this._axis},e.prototype.setBounding=function(t,e,i){var n,r;wt(this.getBounding(),t);var a={};return Mt(t.height)&&(a.height=t.height),Mt(t.top)&&(a.top=t.top),this._mainWidget.setBounding(a),null===(n=this._yAxisWidget)||void 0===n||n.setBounding(a),Mt(e)&&this._mainWidget.setBounding(e),Mt(i)&&(null===(r=this._yAxisWidget)||void 0===r||r.setBounding(i)),this},e.prototype.getMainWidget=function(){return this._mainWidget},e.prototype.getYAxisWidget=function(){return this._yAxisWidget},e.prototype.updateImp=function(t){var e;this._mainWidget.update(t),null===(e=this._yAxisWidget)||void 0===e||e.update(t)},e.prototype.destroy=function(){var e;t.prototype.destroy.call(this),this._mainWidget.destroy(),null===(e=this._yAxisWidget)||void 0===e||e.destroy()},e.prototype.getImage=function(t){var e=this.getBounding(),i=e.width,n=e.height,r=he("canvas",{width:"".concat(i,"px"),height:"".concat(n,"px"),boxSizing:"border-box"}),a=r.getContext("2d"),o=Vt(r);r.width=i*o,r.height=n*o,a.scale(o,o);var s=this._mainWidget.getBounding();if(a.drawImage(this._mainWidget.getImage(t),s.left,0,s.width,s.height),null!==this._yAxisWidget){var l=this._yAxisWidget.getBounding();a.drawImage(this._yAxisWidget.getImage(t),l.left,0,l.width,l.height)}return r},e.prototype.createYAxisWidget=function(t){return null},e}(er),nr=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.createAxisComponent=function(t){var e=tr(null!==t&&void 0!==t?t:"default");return new e(this)},e.prototype.createMainWidget=function(t){return new Ln(t,this)},e.prototype.createYAxisWidget=function(t){return new jn(t,this)},e}(ir),rr=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.createMainWidget=function(t){return new $n(t,this)},e}(nr),ar=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.getAxisStyles=function(t){return t.xAxis},e.prototype.createAxisLine=function(t){return{coordinates:[{x:0,y:0},{x:t.width,y:0}]}},e.prototype.createTickLines=function(t,e,i){var n=i.tickLine,r=i.axisLine.size;return t.map(function(t){return{coordinates:[{x:t.coord,y:0},{x:t.coord,y:r+n.length}]}})},e.prototype.createTickTexts=function(t,e,i){var n=i.tickText,r=i.axisLine.size,a=i.tickLine.length;return t.map(function(t){return{x:t.coord,y:r+a+n.marginStart,text:t.text,align:"center",baseline:"top"}})},e}(Hn),or=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.coordinateToPointTimestampDataIndexFlag=function(){return!0},e.prototype.coordinateToPointValueFlag=function(){return!1},e.prototype.getCompleteOverlays=function(t){return t.getInstances()},e.prototype.getProgressOverlay=function(t){return t.instance},e.prototype.getDefaultFigures=function(t,e,i,n,r,a,o,s,l,c,u){var d,h=[];if(t.needDefaultXAxisFigure&&t.id===(null===(d=u.instance)||void 0===d?void 0:d.id)){var p=Number.MAX_SAFE_INTEGER,f=Number.MIN_SAFE_INTEGER;e.forEach(function(e,i){p=Math.min(p,e.x),f=Math.max(f,e.x);var n=t.points[i];if(Tt(n.timestamp)){var o=a.formatDate(r,n.timestamp,"YYYY-MM-DD HH:mm",Zt.Crosshair);h.push({type:"text",attrs:{x:e.x,y:0,text:o,align:"center"},ignoreEvent:!0})}}),e.length>1&&h.unshift({type:"rect",attrs:{x:p,y:0,width:f-p,height:i.height},ignoreEvent:!0})}return h},e.prototype.getFigures=function(t,e,i,n,r,a,o,s,l,c,u){var d,h;return null!==(h=null===(d=t.createXAxisFigures)||void 0===d?void 0:d.call(t,{overlay:t,coordinates:e,bounding:i,barSpace:n,precision:r,thousandsSeparator:a,decimalFoldThreshold:o,dateTimeFormat:s,defaultStyles:l,xAxis:c,yAxis:u}))&&void 0!==h?h:[]},e}(Un),sr=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.compare=function(t){return Mt(t.kLineData)&&t.dataIndex===t.realDataIndex},e.prototype.getDirectionStyles=function(t){return t.vertical},e.prototype.getText=function(t,e){var i,n=null===(i=t.kLineData)||void 0===i?void 0:i.timestamp;return e.getCustomApi().formatDate(e.getTimeScaleStore().getDateTimeFormat(),n,"YYYY-MM-DD HH:mm",Zt.Crosshair)},e.prototype.getTextAttrs=function(t,e,i,n,r,a){var o,s=i.realX,l="center";return s-e/2-a.paddingLeft<0?(o=0,l="left"):s+e/2+a.paddingRight>n.width?(o=n.width,l="right"):o=s,{x:o,y:0,text:t,align:l,baseline:"top"}},e}(Gn),lr=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._xAxisView=new ar(n),n._overlayXAxisView=new or(n),n._crosshairVerticalLabelView=new sr(n),n.getContainer().style.cursor="ew-resize",n.addChild(n._overlayXAxisView),n}return B(e,t),e.prototype.getName=function(){return ji.X_AXIS},e.prototype.updateMain=function(t){this._xAxisView.draw(t)},e.prototype.updateOverlay=function(t){this._overlayXAxisView.draw(t),this._crosshairVerticalLabelView.draw(t)},e}(en),cr=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.calcRange=function(){var t=this.getParent().getChart().getChartStore(),e=t.getTimeScaleStore().getVisibleRange(),i=e.from,n=e.to,r=i,a=n-1,o=n-i;return{from:r,to:a,range:o,realFrom:r,realTo:a,realRange:o}},e.prototype.optimalTicks=function(t){var e,i,n=this.getParent().getChart(),r=n.getChartStore(),a=r.getCustomApi().formatDate,o=[],s=t.length,l=r.getDataList();if(s>0){var c=r.getTimeScaleStore().getDateTimeFormat(),u=n.getStyles().xAxis.tickText,d=Ht("00-00 00:00",u.size,u.weight,u.family),h=parseInt(t[0].value,10),p=this.convertToPixel(h),f=1;if(s>1){var v=parseInt(t[1].value,10),g=this.convertToPixel(v),m=Math.abs(g-p);me&&(t.apply(this,arguments),i=n)}}var vr=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._dragFlag=!1,n._dragStartY=0,n._topPaneHeight=0,n._bottomPaneHeight=0,n._pressedMouseMoveEvent=fr(n._pressedTouchMouseMoveEvent,20),n.registerEvent("touchStartEvent",n._mouseDownEvent.bind(n)).registerEvent("touchMoveEvent",n._pressedMouseMoveEvent.bind(n)).registerEvent("touchEndEvent",n._mouseUpEvent.bind(n)).registerEvent("mouseDownEvent",n._mouseDownEvent.bind(n)).registerEvent("mouseUpEvent",n._mouseUpEvent.bind(n)).registerEvent("pressedMouseMoveEvent",n._pressedMouseMoveEvent.bind(n)).registerEvent("mouseEnterEvent",n._mouseEnterEvent.bind(n)).registerEvent("mouseLeaveEvent",n._mouseLeaveEvent.bind(n)),n}return B(e,t),e.prototype.getName=function(){return ji.SEPARATOR},e.prototype.checkEventOn=function(){return!0},e.prototype._mouseDownEvent=function(t){this._dragFlag=!0,this._dragStartY=t.pageY;var e=this.getPane();return this._topPaneHeight=e.getTopPane().getBounding().height,this._bottomPaneHeight=e.getBottomPane().getBounding().height,!0},e.prototype._mouseUpEvent=function(){return this._dragFlag=!1,this._mouseLeaveEvent()},e.prototype._pressedTouchMouseMoveEvent=function(t){var e=t.pageY-this._dragStartY,i=this.getPane(),n=i.getTopPane(),r=i.getBottomPane(),a=e<0;if(null!==n&&(null===r||void 0===r?void 0:r.getOptions().dragEnabled)){var o=void 0,s=void 0,l=void 0,c=void 0;a?(o=n,s=r,l=this._topPaneHeight,c=this._bottomPaneHeight):(o=r,s=n,l=this._bottomPaneHeight,c=this._topPaneHeight);var u=o.getOptions().minHeight;if(l>u){var d=Math.max(l-Math.abs(e),u),h=l-d;o.setBounding({height:d}),s.setBounding({height:c+h});var p=i.getChart();p.getChartStore().getActionStore().execute(Pt.OnPaneDrag,{paneId:i.getId()}),p.adjustPaneViewport(!0,!0,!0,!0,!0)}}return!0},e.prototype._mouseEnterEvent=function(){var t,e=this.getPane(),i=e.getBottomPane();if(null!==(t=null===i||void 0===i?void 0:i.getOptions().dragEnabled)&&void 0!==t&&t){var n=e.getChart(),r=n.getStyles().separator;return this.getContainer().style.background=r.activeBackgroundColor,!0}return!1},e.prototype._mouseLeaveEvent=function(){return!this._dragFlag&&(this.getContainer().style.background="",!0)},e.prototype.createContainer=function(){return he("div",{width:"100%",height:"".concat(qi,"px"),margin:"0",padding:"0",position:"absolute",top:"-3px",zIndex:"20",boxSizing:"border-box",cursor:"ns-resize"})},e.prototype.updateImp=function(t,e,i){if(4===i||2===i){var n=this.getPane().getChart().getStyles().separator;t.style.top="".concat(-Math.floor((qi-n.size)/2),"px"),t.style.height="".concat(qi,"px")}},e}(tn),gr=function(t){function e(e,i,n,r,a,o){var s=t.call(this,e,i,n,r)||this;return s.getContainer().style.overflow="",s._topPane=a,s._bottomPane=o,s._separatorWidget=new vr(s.getContainer(),s),s}return B(e,t),e.prototype.setBounding=function(t){return wt(this.getBounding(),t),this},e.prototype.getTopPane=function(){return this._topPane},e.prototype.setTopPane=function(t){return this._topPane=t,this},e.prototype.getBottomPane=function(){return this._bottomPane},e.prototype.setBottomPane=function(t){return this._bottomPane=t,this},e.prototype.getWidget=function(){return this._separatorWidget},e.prototype.getImage=function(t){var e=this.getBounding(),i=e.width,n=e.height,r=this.getChart().getStyles().separator,a=he("canvas",{width:"".concat(i,"px"),height:"".concat(n,"px"),boxSizing:"border-box"}),o=a.getContext("2d"),s=Vt(a);return a.width=i*s,a.height=n*s,o.scale(s,s),o.fillStyle=r.color,o.fillRect(0,0,i,n),a},e.prototype.updateImp=function(t,e,i){if(4===t||2===t){var n=this.getChart().getStyles().separator;e.style.backgroundColor=n.color,e.style.height="".concat(i.height,"px"),e.style.marginLeft="".concat(i.left,"px"),e.style.width="".concat(i.width,"px"),this._separatorWidget.update(t)}},e}(er);function mr(){var t;return"undefined"!==typeof window&&(null!==(t=window.navigator.userAgent.toLowerCase().indexOf("firefox"))&&void 0!==t?t:-1)>-1}function yr(){return"undefined"!==typeof window&&/iPhone|iPad|iPod/.test(window.navigator.platform)}var br,xr=10,_r=function(){function t(t,e,i){var n=this;this._clickCount=0,this._clickTimeoutId=null,this._clickCoordinate={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY},this._tapCount=0,this._tapTimeoutId=null,this._tapCoordinate={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY},this._longTapTimeoutId=null,this._longTapActive=!1,this._mouseMoveStartCoordinate=null,this._touchMoveStartCoordinate=null,this._touchMoveExceededManhattanDistance=!1,this._cancelClick=!1,this._cancelTap=!1,this._unsubscribeOutsideMouseEvents=null,this._unsubscribeOutsideTouchEvents=null,this._unsubscribeMobileSafariEvents=null,this._unsubscribeMousemove=null,this._unsubscribeMouseWheel=null,this._unsubscribeContextMenu=null,this._unsubscribeRootMouseEvents=null,this._unsubscribeRootTouchEvents=null,this._startPinchMiddleCoordinate=null,this._startPinchDistance=0,this._pinchPrevented=!1,this._preventTouchDragProcess=!1,this._mousePressed=!1,this._lastTouchEventTimeStamp=0,this._activeTouchId=null,this._acceptMouseLeave=!yr(),this._onFirefoxOutsideMouseUp=function(t){n._mouseUpHandler(t)},this._onMobileSafariDoubleClick=function(t){if(n._firesTouchEvents(t)){if(++n._tapCount,null!==n._tapTimeoutId&&n._tapCount>1){var e=n._mouseTouchMoveWithDownInfo(n._getCoordinate(t),n._tapCoordinate).manhattanDistance;e<30&&!n._cancelTap&&n._processEvent(n._makeCompatEvent(t),n._handler.doubleTapEvent),n._resetTapTimeout()}}else if(++n._clickCount,null!==n._clickTimeoutId&&n._clickCount>1){e=n._mouseTouchMoveWithDownInfo(n._getCoordinate(t),n._clickCoordinate).manhattanDistance;e<5&&!n._cancelClick&&n._processEvent(n._makeCompatEvent(t),n._handler.mouseDoubleClickEvent),n._resetClickTimeout()}},this._target=t,this._handler=e,this._options=i,this._init()}return t.prototype.destroy=function(){null!==this._unsubscribeOutsideMouseEvents&&(this._unsubscribeOutsideMouseEvents(),this._unsubscribeOutsideMouseEvents=null),null!==this._unsubscribeOutsideTouchEvents&&(this._unsubscribeOutsideTouchEvents(),this._unsubscribeOutsideTouchEvents=null),null!==this._unsubscribeMousemove&&(this._unsubscribeMousemove(),this._unsubscribeMousemove=null),null!==this._unsubscribeMouseWheel&&(this._unsubscribeMouseWheel(),this._unsubscribeMouseWheel=null),null!==this._unsubscribeContextMenu&&(this._unsubscribeContextMenu(),this._unsubscribeContextMenu=null),null!==this._unsubscribeRootMouseEvents&&(this._unsubscribeRootMouseEvents(),this._unsubscribeRootMouseEvents=null),null!==this._unsubscribeRootTouchEvents&&(this._unsubscribeRootTouchEvents(),this._unsubscribeRootTouchEvents=null),null!==this._unsubscribeMobileSafariEvents&&(this._unsubscribeMobileSafariEvents(),this._unsubscribeMobileSafariEvents=null),this._clearLongTapTimeout(),this._resetClickTimeout()},t.prototype._mouseEnterHandler=function(t){var e,i,n,r=this;null===(e=this._unsubscribeMousemove)||void 0===e||e.call(this),null===(i=this._unsubscribeMouseWheel)||void 0===i||i.call(this),null===(n=this._unsubscribeContextMenu)||void 0===n||n.call(this);var a=this._mouseMoveHandler.bind(this);this._unsubscribeMousemove=function(){r._target.removeEventListener("mousemove",a)},this._target.addEventListener("mousemove",a);var o=this._mouseWheelHandler.bind(this);this._unsubscribeMouseWheel=function(){r._target.removeEventListener("wheel",o)},this._target.addEventListener("wheel",o,{passive:!1});var s=this._contextMenuHandler.bind(this);this._unsubscribeContextMenu=function(){r._target.removeEventListener("contextmenu",s)},this._target.addEventListener("contextmenu",s,{passive:!1}),this._firesTouchEvents(t)||(this._processEvent(this._makeCompatEvent(t),this._handler.mouseEnterEvent),this._acceptMouseLeave=!0)},t.prototype._resetClickTimeout=function(){null!==this._clickTimeoutId&&clearTimeout(this._clickTimeoutId),this._clickCount=0,this._clickTimeoutId=null,this._clickCoordinate={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY}},t.prototype._resetTapTimeout=function(){null!==this._tapTimeoutId&&clearTimeout(this._tapTimeoutId),this._tapCount=0,this._tapTimeoutId=null,this._tapCoordinate={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY}},t.prototype._mouseMoveHandler=function(t){this._mousePressed||null!==this._touchMoveStartCoordinate||this._firesTouchEvents(t)||(this._processEvent(this._makeCompatEvent(t),this._handler.mouseMoveEvent),this._acceptMouseLeave=!0)},t.prototype._mouseWheelHandler=function(t){if(Math.abs(t.deltaX)>Math.abs(t.deltaY)){if(!Mt(this._handler.mouseWheelHortEvent))return;if(this._preventDefault(t),0===Math.abs(t.deltaX))return;this._handler.mouseWheelHortEvent(this._makeCompatEvent(t),-t.deltaX)}else{if(!Mt(this._handler.mouseWheelVertEvent))return;var e=-t.deltaY/100;if(0===e)return;switch(this._preventDefault(t),t.deltaMode){case t.DOM_DELTA_PAGE:e*=120;break;case t.DOM_DELTA_LINE:e*=32;break}if(0!==e){var i=Math.sign(e)*Math.min(1,Math.abs(e));this._handler.mouseWheelVertEvent(this._makeCompatEvent(t),i)}}},t.prototype._contextMenuHandler=function(t){this._preventDefault(t)},t.prototype._touchMoveHandler=function(t){var e=this._touchWithId(t.changedTouches,this._activeTouchId);if(null!==e&&(this._lastTouchEventTimeStamp=this._eventTimeStamp(t),null===this._startPinchMiddleCoordinate&&!this._preventTouchDragProcess)){this._pinchPrevented=!0;var i=this._mouseTouchMoveWithDownInfo(this._getCoordinate(e),this._touchMoveStartCoordinate),n=i.xOffset,r=i.yOffset,a=i.manhattanDistance;if(this._touchMoveExceededManhattanDistance||!(a<5)){if(!this._touchMoveExceededManhattanDistance){var o=.5*n,s=r>=o&&!this._options.treatVertDragAsPageScroll(),l=o>r&&!this._options.treatHorzDragAsPageScroll();s||l||(this._preventTouchDragProcess=!0),this._touchMoveExceededManhattanDistance=!0,this._cancelTap=!0,this._clearLongTapTimeout(),this._resetTapTimeout()}this._preventTouchDragProcess||this._processEvent(this._makeCompatEvent(t,e),this._handler.touchMoveEvent)}}},t.prototype._mouseMoveWithDownHandler=function(t){if(0===t.button){var e=this._mouseTouchMoveWithDownInfo(this._getCoordinate(t),this._mouseMoveStartCoordinate),i=e.manhattanDistance;i>=5&&(this._cancelClick=!0,this._resetClickTimeout()),this._cancelClick&&this._processEvent(this._makeCompatEvent(t),this._handler.pressedMouseMoveEvent)}},t.prototype._mouseTouchMoveWithDownInfo=function(t,e){var i=Math.abs(e.x-t.x),n=Math.abs(e.y-t.y),r=i+n;return{xOffset:i,yOffset:n,manhattanDistance:r}},t.prototype._touchEndHandler=function(t){var e=this._touchWithId(t.changedTouches,this._activeTouchId);if(null===e&&0===t.touches.length&&(e=t.changedTouches[0]),null!==e){this._activeTouchId=null,this._lastTouchEventTimeStamp=this._eventTimeStamp(t),this._clearLongTapTimeout(),this._touchMoveStartCoordinate=null,null!==this._unsubscribeRootTouchEvents&&(this._unsubscribeRootTouchEvents(),this._unsubscribeRootTouchEvents=null);var i=this._makeCompatEvent(t,e);if(this._processEvent(i,this._handler.touchEndEvent),++this._tapCount,null!==this._tapTimeoutId&&this._tapCount>1){var n=this._mouseTouchMoveWithDownInfo(this._getCoordinate(e),this._tapCoordinate).manhattanDistance;n<30&&!this._cancelTap&&this._processEvent(i,this._handler.doubleTapEvent),this._resetTapTimeout()}else this._cancelTap||(this._processEvent(i,this._handler.tapEvent),Mt(this._handler.tapEvent)&&this._preventDefault(t));0===this._tapCount&&this._preventDefault(t),0===t.touches.length&&this._longTapActive&&(this._longTapActive=!1,this._preventDefault(t))}},t.prototype._mouseUpHandler=function(t){if(0===t.button){var e=this._makeCompatEvent(t);if(this._mouseMoveStartCoordinate=null,this._mousePressed=!1,null!==this._unsubscribeRootMouseEvents&&(this._unsubscribeRootMouseEvents(),this._unsubscribeRootMouseEvents=null),mr()){var i=this._target.ownerDocument.documentElement;i.removeEventListener("mouseleave",this._onFirefoxOutsideMouseUp)}if(!this._firesTouchEvents(t))if(this._processEvent(e,this._handler.mouseUpEvent),++this._clickCount,null!==this._clickTimeoutId&&this._clickCount>1){var n=this._mouseTouchMoveWithDownInfo(this._getCoordinate(t),this._clickCoordinate).manhattanDistance;n<5&&!this._cancelClick&&this._processEvent(e,this._handler.mouseDoubleClickEvent),this._resetClickTimeout()}else this._cancelClick||this._processEvent(e,this._handler.mouseClickEvent)}},t.prototype._clearLongTapTimeout=function(){null!==this._longTapTimeoutId&&(clearTimeout(this._longTapTimeoutId),this._longTapTimeoutId=null)},t.prototype._touchStartHandler=function(t){if(null===this._activeTouchId){var e=t.changedTouches[0];this._activeTouchId=e.identifier,this._lastTouchEventTimeStamp=this._eventTimeStamp(t);var i=this._target.ownerDocument.documentElement;this._cancelTap=!1,this._touchMoveExceededManhattanDistance=!1,this._preventTouchDragProcess=!1,this._touchMoveStartCoordinate=this._getCoordinate(e),null!==this._unsubscribeRootTouchEvents&&(this._unsubscribeRootTouchEvents(),this._unsubscribeRootTouchEvents=null);var n=this._touchMoveHandler.bind(this),r=this._touchEndHandler.bind(this);this._unsubscribeRootTouchEvents=function(){i.removeEventListener("touchmove",n),i.removeEventListener("touchend",r)},i.addEventListener("touchmove",n,{passive:!1}),i.addEventListener("touchend",r,{passive:!1}),this._clearLongTapTimeout(),this._longTapTimeoutId=setTimeout(this._longTapHandler.bind(this,t),500),this._processEvent(this._makeCompatEvent(t,e),this._handler.touchStartEvent),null===this._tapTimeoutId&&(this._tapCount=0,this._tapTimeoutId=setTimeout(this._resetTapTimeout.bind(this),500),this._tapCoordinate=this._getCoordinate(e))}},t.prototype._mouseDownHandler=function(t){if(2===t.button)return this._preventDefault(t),void this._processEvent(this._makeCompatEvent(t),this._handler.mouseRightClickEvent);if(0===t.button){var e=this._target.ownerDocument.documentElement;mr()&&e.addEventListener("mouseleave",this._onFirefoxOutsideMouseUp),this._cancelClick=!1,this._mouseMoveStartCoordinate=this._getCoordinate(t),null!==this._unsubscribeRootMouseEvents&&(this._unsubscribeRootMouseEvents(),this._unsubscribeRootMouseEvents=null);var i=this._mouseMoveWithDownHandler.bind(this),n=this._mouseUpHandler.bind(this);this._unsubscribeRootMouseEvents=function(){e.removeEventListener("mousemove",i),e.removeEventListener("mouseup",n)},e.addEventListener("mousemove",i),e.addEventListener("mouseup",n),this._mousePressed=!0,this._firesTouchEvents(t)||(this._processEvent(this._makeCompatEvent(t),this._handler.mouseDownEvent),null===this._clickTimeoutId&&(this._clickCount=0,this._clickTimeoutId=setTimeout(this._resetClickTimeout.bind(this),500),this._clickCoordinate=this._getCoordinate(t)))}},t.prototype._init=function(){var t=this;this._target.addEventListener("mouseenter",this._mouseEnterHandler.bind(this)),this._target.addEventListener("touchcancel",this._clearLongTapTimeout.bind(this));var e=this._target.ownerDocument,i=function(e){null!=t._handler.mouseDownOutsideEvent&&(e.composed&&t._target.contains(e.composedPath()[0])||null!==e.target&&t._target.contains(e.target)||t._handler.mouseDownOutsideEvent({x:0,y:0,pageX:0,pageY:0}))};this._unsubscribeOutsideTouchEvents=function(){e.removeEventListener("touchstart",i)},this._unsubscribeOutsideMouseEvents=function(){e.removeEventListener("mousedown",i)},e.addEventListener("mousedown",i),e.addEventListener("touchstart",i,{passive:!0}),yr()&&(this._unsubscribeMobileSafariEvents=function(){t._target.removeEventListener("dblclick",t._onMobileSafariDoubleClick)},this._target.addEventListener("dblclick",this._onMobileSafariDoubleClick)),this._target.addEventListener("mouseleave",this._mouseLeaveHandler.bind(this)),this._target.addEventListener("touchstart",this._touchStartHandler.bind(this),{passive:!0}),this._target.addEventListener("mousedown",function(t){if(1===t.button)return t.preventDefault(),!1}),this._target.addEventListener("mousedown",this._mouseDownHandler.bind(this)),this._initPinch(),this._target.addEventListener("touchmove",function(){},{passive:!1})},t.prototype._initPinch=function(){var t=this;(Mt(this._handler.pinchStartEvent)||Mt(this._handler.pinchEvent)||Mt(this._handler.pinchEndEvent))&&(this._target.addEventListener("touchstart",function(e){t._checkPinchState(e.touches)},{passive:!0}),this._target.addEventListener("touchmove",function(e){if(2===e.touches.length&&null!==t._startPinchMiddleCoordinate&&Mt(t._handler.pinchEvent)){var i=t._getTouchDistance(e.touches[0],e.touches[1]),n=i/t._startPinchDistance;t._handler.pinchEvent(X(X({},t._startPinchMiddleCoordinate),{pageX:0,pageY:0}),n),t._preventDefault(e)}},{passive:!1}),this._target.addEventListener("touchend",function(e){t._checkPinchState(e.touches)}))},t.prototype._checkPinchState=function(t){1===t.length&&(this._pinchPrevented=!1),2!==t.length||this._pinchPrevented||this._longTapActive?this._stopPinch():this._startPinch(t)},t.prototype._startPinch=function(t){var e,i=null!==(e=this._target.getBoundingClientRect())&&void 0!==e?e:{left:0,top:0};this._startPinchMiddleCoordinate={x:(t[0].clientX-i.left+(t[1].clientX-i.left))/2,y:(t[0].clientY-i.top+(t[1].clientY-i.top))/2},this._startPinchDistance=this._getTouchDistance(t[0],t[1]),Mt(this._handler.pinchStartEvent)&&this._handler.pinchStartEvent({x:0,y:0,pageX:0,pageY:0}),this._clearLongTapTimeout()},t.prototype._stopPinch=function(){null!==this._startPinchMiddleCoordinate&&(this._startPinchMiddleCoordinate=null,Mt(this._handler.pinchEndEvent)&&this._handler.pinchEndEvent({x:0,y:0,pageX:0,pageY:0}))},t.prototype._mouseLeaveHandler=function(t){var e,i,n;null===(e=this._unsubscribeMousemove)||void 0===e||e.call(this),null===(i=this._unsubscribeMouseWheel)||void 0===i||i.call(this),null===(n=this._unsubscribeContextMenu)||void 0===n||n.call(this),this._firesTouchEvents(t)||this._acceptMouseLeave&&(this._processEvent(this._makeCompatEvent(t),this._handler.mouseLeaveEvent),this._acceptMouseLeave=!yr())},t.prototype._longTapHandler=function(t){var e=this._touchWithId(t.touches,this._activeTouchId);null!==e&&(this._processEvent(this._makeCompatEvent(t,e),this._handler.longTapEvent),this._cancelTap=!0,this._longTapActive=!0)},t.prototype._firesTouchEvents=function(t){var e;return Mt(null===(e=t.sourceCapabilities)||void 0===e?void 0:e.firesTouchEvents)?t.sourceCapabilities.firesTouchEvents:this._eventTimeStamp(t)this._startScrollCoordinate.y-s.y){var d=s.x-this._startScrollCoordinate.x;c.getTimeScaleStore().scroll(d)}return!0;case ji.X_AXIS:case ji.Y_AXIS:var h=o.dispatchEvent("pressedMouseMoveEvent",s);return h&&(null===(n=s.preventDefault)||void 0===n||n.call(s),this._chart.updatePane(1)),h}}return!1},t.prototype.touchEndEvent=function(t){var e=this,i=this._findWidgetByEvent(t).widget;if(null!==i){var n=this._makeWidgetEvent(t,i),r=i.getName();switch(r){case ji.MAIN:if(i.dispatchEvent("mouseUpEvent",n),null!==this._startScrollCoordinate){var a=(new Date).getTime()-this._flingStartTime,o=n.x-this._startScrollCoordinate.x,s=o/(a>0?a:1)*20;if(a<200&&Math.abs(s)>0){var l=this._chart.getChartStore().getTimeScaleStore(),c=function(){e._flingScrollRequestId=oe(function(){l.startScroll(),l.scroll(s),s*=.975,Math.abs(s)<1?null!==e._flingScrollRequestId&&(se(e._flingScrollRequestId),e._flingScrollRequestId=null):c()})};c()}}return!0;case ji.X_AXIS:case ji.Y_AXIS:var u=i.dispatchEvent("mouseUpEvent",n);u&&this._chart.updatePane(1)}}return!1},t.prototype.tapEvent=function(t){var e=this._findWidgetByEvent(t),i=e.pane,n=e.widget,r=!1;if(null!==n){var a=this._makeWidgetEvent(t,n),o=n.dispatchEvent("mouseClickEvent",a);if(n.getName()===ji.MAIN){var s=this._makeWidgetEvent(t,n),l=this._chart.getChartStore(),c=l.getTooltipStore();o?(this._touchCancelCrosshair=!0,this._touchCoordinate=null,c.setCrosshair(void 0,{notInvalidate:!0}),r=!0):(this._touchCancelCrosshair||this._touchZoomed||(this._touchCoordinate={x:s.x,y:s.y},c.setCrosshair({x:s.x,y:s.y,paneId:null===i||void 0===i?void 0:i.getId()},{notInvalidate:!0}),r=!0),this._touchCancelCrosshair=!1)}(r||o)&&this._chart.updatePane(1)}return r},t.prototype.doubleTapEvent=function(t){return this.mouseDoubleClickEvent(t)},t.prototype.longTapEvent=function(t){var e=this._findWidgetByEvent(t),i=e.pane,n=e.widget;if(null!==n&&n.getName()===ji.MAIN){var r=this._makeWidgetEvent(t,n);return this._touchCoordinate={x:r.x,y:r.y},this._chart.getChartStore().getTooltipStore().setCrosshair({x:r.x,y:r.y,paneId:null===i||void 0===i?void 0:i.getId()}),!0}return!1},t.prototype._findWidgetByEvent=function(t){var e,i,n,r,a=t.x,o=t.y,s=this._chart.getAllSeparatorPanes(),l=this._chart.getChartStore().getStyles().separator.size;try{for(var c=j(s),u=c.next();!u.done;u=c.next()){var d=q(u.value,2),h=d[1],p=h.getBounding(),f=p.top-Math.round((qi-l)/2);if(a>=p.left&&a<=p.left+p.width&&o>=f&&o<=f+qi)return{pane:h,widget:h.getWidget()}}}catch(k){e={error:k}}finally{try{u&&!u.done&&(i=c.return)&&i.call(c)}finally{if(e)throw e.error}}var v=this._chart.getAllDrawPanes(),g=null;try{for(var m=j(v),y=m.next();!y.done;y=m.next()){var b=y.value;p=b.getBounding();if(a>=p.left&&a<=p.left+p.width&&o>=p.top&&o<=p.top+p.height){g=b;break}}}catch(A){n={error:A}}finally{try{y&&!y.done&&(r=m.return)&&r.call(m)}finally{if(n)throw n.error}}var x=null;if(null!==g){if(null===x){var _=g.getMainWidget(),w=_.getBounding();a>=w.left&&a<=w.left+w.width&&o>=w.top&&o<=w.top+w.height&&(x=_)}if(null===x){var C=g.getYAxisWidget();if(null!==C){var S=C.getBounding();a>=S.left&&a<=S.left+S.width&&o>=S.top&&o<=S.top+S.height&&(x=C)}}}return{pane:g,widget:x}},t.prototype._makeWidgetEvent=function(t,e){var i,n,r,a=null!==(i=null===e||void 0===e?void 0:e.getBounding())&&void 0!==i?i:null;return X(X({},t),{x:t.x-(null!==(n=null===a||void 0===a?void 0:a.left)&&void 0!==n?n:0),y:t.y-(null!==(r=null===a||void 0===a?void 0:a.top)&&void 0!==r?r:0)})},t.prototype.destroy=function(){this._container.removeEventListener("keydown",this._boundKeyBoardDownEvent),this._event.destroy()},t}();(function(t){t["Root"]="root",t["Main"]="main",t["YAxis"]="yAxis"})(br||(br={}));var Cr=function(){function t(t,e){this._drawPanes=[],this._separatorPanes=new Map,this._initContainer(t),this._chartEvent=new wr(this._chartContainer,this),this._chartStore=new Gi(this,e),this._initPanes(e),this.adjustPaneViewport(!0,!0,!0)}return t.prototype._initContainer=function(t){this._container=t,this._chartContainer=he("div",{position:"relative",width:"100%",outline:"none",borderStyle:"none",cursor:"crosshair",boxSizing:"border-box",userSelect:"none",webkitUserSelect:"none",msUserSelect:"none",MozUserSelect:"none",webkitTapHighlightColor:"transparent"}),this._chartContainer.tabIndex=1,t.appendChild(this._chartContainer)},t.prototype._initPanes=function(t){var e,i=this,n=null!==(e=null===t||void 0===t?void 0:t.layout)&&void 0!==e?e:[{type:"candle"}],r=!1,a=!1,o=function(t){if(!a){var e=i._createPane(pr,Vi.X_AXIS,null!==t&&void 0!==t?t:{});i._xAxisPane=e,a=!0}};n.forEach(function(t){var e,n,a;switch(t.type){case"candle":if(!r){var s=null!==(e=t.options)&&void 0!==e?e:{};wt(s,{id:Vi.CANDLE}),i._candlePane=i._createPane(rr,Vi.CANDLE,s);var l=null!==(n=t.content)&&void 0!==n?n:[];l.forEach(function(t){i.createIndicator(t,!0,s)}),r=!0}break;case"indicator":var c;l=null!==(a=t.content)&&void 0!==a?a:[];if(l.length>0)l.forEach(function(e){Mt(c)?i.createIndicator(e,!0,{id:c}):c=i.createIndicator(e,!0,t.options)});break;case"xAxis":o(t.options);break}}),o({position:"bottom"})},t.prototype._createPane=function(t,e,i){var n,r=null,a=null,o=null===i||void 0===i?void 0:i.position;switch(o){case"top":var s=this._drawPanes[0];Mt(s)&&(a=new t(this._chartContainer,s.getContainer(),this,e,null!==i&&void 0!==i?i:{}),r=0);break;case"bottom":break;default:for(var l=this._drawPanes.length-1;l>-1;l--){var c=this._drawPanes[l],u=this._drawPanes[l-1];if("bottom"===(null===c||void 0===c?void 0:c.getOptions().position)&&"bottom"!==(null===u||void 0===u?void 0:u.getOptions().position)){a=new t(this._chartContainer,c.getContainer(),this,e,null!==i&&void 0!==i?i:{}),r=l;break}}}if(Mt(a)||(a=new t(this._chartContainer,null,this,e,null!==i&&void 0!==i?i:{})),Tt(r)?(this._drawPanes.splice(r,0,a),n=r):(this._drawPanes.push(a),n=this._drawPanes.length-1),a.getId()!==Vi.X_AXIS){var d=this._drawPanes[n+1];if(Mt(d)&&d.getId()===Vi.X_AXIS&&(d=this._drawPanes[n+2]),Mt(d)){var h=this._separatorPanes.get(d);Mt(h)?h.setTopPane(a):(h=new gr(this._chartContainer,d.getContainer(),this,"",a,d),this._separatorPanes.set(d,h))}var p=this._drawPanes[n-1];if(Mt(p)&&p.getId()===Vi.X_AXIS&&(p=this._drawPanes[n-2]),Mt(p)){h=new gr(this._chartContainer,a.getContainer(),this,"",p,a);this._separatorPanes.set(a,h)}}return a},t.prototype._measurePaneHeight=function(){var t,e=this,i=Math.floor(this._container.clientHeight),n=this._chartStore.getStyles().separator.size,r=this._xAxisPane.getAxisComponent().getAutoSize(),a=i-r-this._separatorPanes.size*n;a<0&&(a=0);var o=0;this._drawPanes.forEach(function(t){if(t.getId()!==Vi.CANDLE&&t.getId()!==Vi.X_AXIS){var e=t.getBounding().height,i=t.getOptions().minHeight;ea?(o=a,e=Math.max(a-o,0)):o+=e,t.setBounding({height:e})}});var s=a-o;null===(t=this._candlePane)||void 0===t||t.setBounding({height:s}),this._xAxisPane.setBounding({height:r});var l=0;this._drawPanes.forEach(function(t){var i=e._separatorPanes.get(t);Mt(i)&&(i.setBounding({height:n,top:l}),l+=n),t.setBounding({top:l}),l+=t.getBounding().height})},t.prototype._measurePaneWidth=function(){var t=this,e=Math.floor(this._container.clientWidth),i=this._chartStore.getStyles(),n=i.yAxis,r=n.position===K.Left,a=!n.inside,o=0,s=0,l=0,c=0;this._drawPanes.forEach(function(t){t.getId()!==Vi.X_AXIS&&(s=Math.max(s,t.getAxisComponent().getAutoSize()))}),s>e&&(s=e),a?(o=e-s,r?(l=0,c=s):(l=e-s,c=0)):(o=e,c=0,l=r?0:e-s),this._chartStore.getTimeScaleStore().setTotalBarSpace(o);var u,d={width:e},h={width:o,left:c},p={width:s,left:l},f=i.separator.fill;u=a&&!f?h:d,this._drawPanes.forEach(function(e){var i;null===(i=t._separatorPanes.get(e))||void 0===i||i.setBounding(u),e.setBounding(d,h,p)})},t.prototype._setPaneOptions=function(t,e){var i,n;if(Et(t.id)){var r=this.getDrawPaneById(t.id),a=!1;if(null!==r){var o=e;if(t.id!==Vi.CANDLE&&Tt(t.height)&&t.height>0){var s=Math.max(null!==(i=t.minHeight)&&void 0!==i?i:r.getOptions().minHeight,0),l=Math.max(s,t.height);r.setBounding({height:l}),o=!0,a=!0}(Et(null===(n=t.axisOptions)||void 0===n?void 0:n.name)||Mt(t.gap))&&(o=!0),r.setOptions(t),o&&this.adjustPaneViewport(a,!0,!0,!0,!0)}}},t.prototype.getDrawPaneById=function(t){if(t===Vi.CANDLE)return this._candlePane;if(t===Vi.X_AXIS)return this._xAxisPane;var e=this._drawPanes.find(function(e){return e.getId()===t});return null!==e&&void 0!==e?e:null},t.prototype.getContainer=function(){return this._container},t.prototype.getChartStore=function(){return this._chartStore},t.prototype.getXAxisPane=function(){return this._xAxisPane},t.prototype.getAllDrawPanes=function(){return this._drawPanes},t.prototype.getAllSeparatorPanes=function(){return this._separatorPanes},t.prototype.adjustPaneViewport=function(t,e,i,n,r){t&&this._measurePaneHeight();var a=e,o=null!==n&&void 0!==n&&n,s=null!==r&&void 0!==r&&r;(o||s)&&this._drawPanes.forEach(function(t){var e=t.getAxisComponent().buildTicks(s);a||(a=e)}),a&&this._measurePaneWidth(),null!==i&&void 0!==i&&i&&(this._xAxisPane.getAxisComponent().buildTicks(!0),this.updatePane(4))},t.prototype.updatePane=function(t,e){if(Mt(e)){var i=this.getDrawPaneById(e);null===i||void 0===i||i.update(t)}else this._separatorPanes.forEach(function(e){e.update(t)}),this._drawPanes.forEach(function(e){e.update(t)})},t.prototype.crosshairChange=function(t){var e=this,i=this._chartStore.getActionStore();if(i.has(Pt.OnCrosshairChange)){var n={};this._drawPanes.forEach(function(i){var r=i.getId(),a={},o=e._chartStore.getIndicatorStore().getInstances(r);o.forEach(function(e){var i,n=e.result;a[e.name]=n[null!==(i=t.dataIndex)&&void 0!==i?i:n.length-1]}),n[r]=a}),Et(t.paneId)&&i.execute(Pt.OnCrosshairChange,X(X({},t),{indicatorData:n}))}},t.prototype.getDom=function(t,e){var i,n;if(!Et(t))return this._chartContainer;var r=this.getDrawPaneById(t);if(null!==r){var a=null!==e&&void 0!==e?e:br.Root;switch(a){case br.Root:return r.getContainer();case br.Main:return r.getMainWidget().getContainer();case br.YAxis:return null!==(n=null===(i=r.getYAxisWidget())||void 0===i?void 0:i.getContainer())&&void 0!==n?n:null}}return null},t.prototype.getSize=function(t,e){var i,n;if(!Mt(t))return{width:Math.floor(this._chartContainer.clientWidth),height:Math.floor(this._chartContainer.clientHeight),left:0,top:0,right:0,bottom:0};var r=this.getDrawPaneById(t);if(null!==r){var a=null!==e&&void 0!==e?e:br.Root;switch(a){case br.Root:return r.getBounding();case br.Main:return r.getMainWidget().getBounding();case br.YAxis:return null!==(n=null===(i=r.getYAxisWidget())||void 0===i?void 0:i.getBounding())&&void 0!==n?n:null}}return null},t.prototype.setStyles=function(t){var e,i,n;this._chartStore.setOptions({styles:t}),n=Et(t)?Ui(t):t,Mt(null===(e=null===n||void 0===n?void 0:n.yAxis)||void 0===e?void 0:e.type)&&(null===(i=this._candlePane)||void 0===i||i.getAxisComponent().setAutoCalcTickFlag(!0)),this.adjustPaneViewport(!0,!0,!0,!0,!0)},t.prototype.getStyles=function(){return this._chartStore.getStyles()},t.prototype.setLocale=function(t){this._chartStore.setOptions({locale:t}),this.adjustPaneViewport(!0,!0,!0,!0,!0)},t.prototype.getLocale=function(){return this._chartStore.getLocale()},t.prototype.setCustomApi=function(t){this._chartStore.setOptions({customApi:t}),this.adjustPaneViewport(!0,!0,!0,!0,!0)},t.prototype.setPriceVolumePrecision=function(t,e){this._chartStore.setPrecision({price:t,volume:e})},t.prototype.getPriceVolumePrecision=function(){return this._chartStore.getPrecision()},t.prototype.setTimezone=function(t){this._chartStore.setOptions({timezone:t}),this._xAxisPane.getAxisComponent().buildTicks(!0),this._xAxisPane.update(3)},t.prototype.getTimezone=function(){return this._chartStore.getTimeScaleStore().getTimezone()},t.prototype.setOffsetRightDistance=function(t){this._chartStore.getTimeScaleStore().setOffsetRightDistance(t,!0)},t.prototype.getOffsetRightDistance=function(){return this._chartStore.getTimeScaleStore().getOffsetRightDistance()},t.prototype.setMaxOffsetLeftDistance=function(t){t<0?bt("setMaxOffsetLeftDistance","distance","distance must greater than zero!!!"):this._chartStore.getTimeScaleStore().setMaxOffsetLeftDistance(t)},t.prototype.setMaxOffsetRightDistance=function(t){t<0?bt("setMaxOffsetRightDistance","distance","distance must greater than zero!!!"):this._chartStore.getTimeScaleStore().setMaxOffsetRightDistance(t)},t.prototype.setLeftMinVisibleBarCount=function(t){t<0?bt("setLeftMinVisibleBarCount","barCount","barCount must greater than zero!!!"):this._chartStore.getTimeScaleStore().setLeftMinVisibleBarCount(Math.ceil(t))},t.prototype.setRightMinVisibleBarCount=function(t){t<0?bt("setRightMinVisibleBarCount","barCount","barCount must greater than zero!!!"):this._chartStore.getTimeScaleStore().setRightMinVisibleBarCount(Math.ceil(t))},t.prototype.setBarSpace=function(t){this._chartStore.getTimeScaleStore().setBarSpace(t)},t.prototype.getBarSpace=function(){return this._chartStore.getTimeScaleStore().getBarSpace().bar},t.prototype.getVisibleRange=function(){return this._chartStore.getTimeScaleStore().getVisibleRange()},t.prototype.clearData=function(){this._chartStore.clear()},t.prototype.getDataList=function(){return this._chartStore.getDataList()},t.prototype.applyNewData=function(t,e,i){Mt(i)&&bt("applyNewData","","param `callback` has been deprecated since version 9.8.0, use `subscribeAction('onDataReady')` instead."),this._chartStore.addData(t,Kt.Init,e).then(function(){}).catch(function(){}).finally(function(){null===i||void 0===i||i()})},t.prototype.applyMoreData=function(t,e,i){bt("","","Api `applyMoreData` has been deprecated since version 9.8.0."),this._chartStore.addData(t,Kt.Forward,null===e||void 0===e||e).then(function(){}).catch(function(){}).finally(function(){null===i||void 0===i||i()})},t.prototype.updateData=function(t,e){Mt(e)&&bt("updateData","","param `callback` has been deprecated since version 9.8.0, use `subscribeAction('onDataReady')` instead."),this._chartStore.addData(t).then(function(){}).catch(function(){}).finally(function(){null===e||void 0===e||e()})},t.prototype.loadMore=function(t){bt("","","Api `loadMore` has been deprecated since version 9.8.0, use `setLoadDataCallback` instead."),this._chartStore.setLoadMoreCallback(t)},t.prototype.setLoadDataCallback=function(t){this._chartStore.setLoadDataCallback(t)},t.prototype.createIndicator=function(t,e,i,n){var r,a=this,o=Et(t)?{name:t}:t;if(null===ai(o.name))return bt("createIndicator","value","indicator not supported, you may need to use registerIndicator to add one!!!"),null;var s=null===i||void 0===i?void 0:i.id,l=this.getDrawPaneById(null!==s&&void 0!==s?s:"");if(null!==l)this._chartStore.getIndicatorStore().addInstance(o,null!==s&&void 0!==s?s:"",null!==e&&void 0!==e&&e).then(function(t){var e;a._setPaneOptions(null!==i&&void 0!==i?i:{},null!==(e=l.getAxisComponent().buildTicks(!0))&&void 0!==e&&e)}).catch(function(t){});else{null!==s&&void 0!==s||(s=de(Vi.INDICATOR));var c=this._createPane(nr,s,null!==i&&void 0!==i?i:{}),u=null!==(r=null===i||void 0===i?void 0:i.height)&&void 0!==r?r:Wi;c.setBounding({height:u}),this._chartStore.getIndicatorStore().addInstance(o,s,null!==e&&void 0!==e&&e).finally(function(){a.adjustPaneViewport(!0,!0,!0,!0,!0),null===n||void 0===n||n()})}return null!==s&&void 0!==s?s:null},t.prototype.overrideIndicator=function(t,e,i){var n=this;this._chartStore.getIndicatorStore().override(t,null!==e&&void 0!==e?e:null).then(function(t){var e=q(t,2),r=e[0],a=e[1];(r||a)&&(n.adjustPaneViewport(!1,a,!0,a),null===i||void 0===i||i())}).catch(function(){})},t.prototype.getIndicatorByPaneId=function(t,e){return this._chartStore.getIndicatorStore().getInstanceByPaneId(t,e)},t.prototype.removeIndicator=function(t,e){var i,n,r,a=this._chartStore.getIndicatorStore(),o=a.removeInstance(t,e);if(o){var s=!1;if(t!==Vi.CANDLE&&!a.hasInstances(t)){var l=this.getDrawPaneById(t),c=this._drawPanes.findIndex(function(e){return e.getId()===t});if(null!==l){s=!0;var u=this._separatorPanes.get(l);if(Mt(u)){var d=null===u||void 0===u?void 0:u.getTopPane();try{for(var h=j(this._separatorPanes),p=h.next();!p.done;p=h.next()){var f=p.value;if(f[1].getTopPane().getId()===l.getId()){f[1].setTopPane(d);break}}}catch(g){i={error:g}}finally{try{p&&!p.done&&(n=h.return)&&n.call(h)}finally{if(i)throw i.error}}u.destroy(),this._separatorPanes.delete(l)}this._drawPanes.splice(c,1),l.destroy();var v=this._drawPanes[0];Mt(v)&&v.getId()===Vi.X_AXIS&&(v=this._drawPanes[1]),null===(r=this._separatorPanes.get(v))||void 0===r||r.destroy(),this._separatorPanes.delete(v)}}this.adjustPaneViewport(s,!0,!0,!0,!0)}},t.prototype.createOverlay=function(t,e){var i=[];if(Et(t))i=[{name:t}];else if(St(t))i=t.map(function(t){return Et(t)?{name:t}:t});else{var n=t;i=[n]}var r=!0;Mt(e)&&null!==this.getDrawPaneById(e)||(e=Vi.CANDLE,r=!1);var a=this._chartStore.getOverlayStore().addInstances(i,e,r);return St(t)?a:a[0]},t.prototype.getOverlayById=function(t){return this._chartStore.getOverlayStore().getInstanceById(t)},t.prototype.overrideOverlay=function(t){this._chartStore.getOverlayStore().override(t)},t.prototype.removeOverlay=function(t){var e;Mt(t)&&(e=Et(t)?{id:t}:t),this._chartStore.getOverlayStore().removeInstance(e)},t.prototype.setPaneOptions=function(t){this._setPaneOptions(t,!1)},t.prototype.setZoomEnabled=function(t){this._chartStore.getTimeScaleStore().setZoomEnabled(t)},t.prototype.isZoomEnabled=function(){return this._chartStore.getTimeScaleStore().getZoomEnabled()},t.prototype.setScrollEnabled=function(t){this._chartStore.getTimeScaleStore().setScrollEnabled(t)},t.prototype.isScrollEnabled=function(){return this._chartStore.getTimeScaleStore().getScrollEnabled()},t.prototype.scrollByDistance=function(t,e){var i=Tt(e)&&e>0?e:0,n=this._chartStore.getTimeScaleStore();if(n.startScroll(),i>0){var r=new le({duration:i});r.doFrame(function(e){var r=t*(e/i);n.scroll(r)}),r.start()}else n.scroll(t)},t.prototype.scrollToRealTime=function(t){var e=this._chartStore.getTimeScaleStore(),i=e.getBarSpace().bar,n=e.getLastBarRightSideDiffBarCount()-e.getInitialOffsetRightDistance()/i,r=n*i;this.scrollByDistance(r,t)},t.prototype.scrollToDataIndex=function(t,e){var i=this._chartStore.getTimeScaleStore(),n=(i.getLastBarRightSideDiffBarCount()+(this.getDataList().length-1-t))*i.getBarSpace().bar;this.scrollByDistance(n,e)},t.prototype.scrollToTimestamp=function(t,e){var i=pe(this.getDataList(),"timestamp",t);this.scrollToDataIndex(i,e)},t.prototype.zoomAtCoordinate=function(t,e,i){var n=Tt(i)&&i>0?i:0,r=this._chartStore.getTimeScaleStore(),a=r.getBarSpace().bar,o=a*t,s=o-a;if(n>0){var l=0,c=new le({duration:n});c.doFrame(function(t){var i=s*(t/n),a=(i-l)/r.getBarSpace().bar*ke;r.zoom(a,e),l=i}),c.start()}else r.zoom(s/a*ke,e)},t.prototype.zoomAtDataIndex=function(t,e,i){var n=this._chartStore.getTimeScaleStore().dataIndexToCoordinate(e);this.zoomAtCoordinate(t,{x:n,y:0},i)},t.prototype.zoomAtTimestamp=function(t,e,i){var n=pe(this.getDataList(),"timestamp",e);this.zoomAtDataIndex(t,n,i)},t.prototype.convertToPixel=function(t,e){var i,n=e.paneId,r=void 0===n?Vi.CANDLE:n,a=e.absolute,o=void 0!==a&&a,s=[];if(r!==Vi.X_AXIS){var l=this.getDrawPaneById(r);if(null!==l){var c=this._chartStore.getTimeScaleStore(),u=l.getBounding(),d=(new Array).concat(t),h=this._xAxisPane.getAxisComponent(),p=l.getAxisComponent();s=d.map(function(t){var e={},i=t.dataIndex;if(Tt(t.timestamp)&&(i=c.timestampToDataIndex(t.timestamp)),Tt(i)&&(e.x=null===h||void 0===h?void 0:h.convertToPixel(i)),Tt(t.value)){var n=null===p||void 0===p?void 0:p.convertToPixel(t.value);e.y=o?u.top+n:n}return e})}}return St(t)?s:null!==(i=s[0])&&void 0!==i?i:{}},t.prototype.convertFromPixel=function(t,e){var i,n=e.paneId,r=void 0===n?Vi.CANDLE:n,a=e.absolute,o=void 0!==a&&a,s=[];if(r!==Vi.X_AXIS){var l=this.getDrawPaneById(r);if(null!==l){var c=this._chartStore.getTimeScaleStore(),u=l.getBounding(),d=(new Array).concat(t),h=this._xAxisPane.getAxisComponent(),p=l.getAxisComponent();s=d.map(function(t){var e,i,n={};if(Tt(t.x)){var r=null!==(e=null===h||void 0===h?void 0:h.convertFromPixel(t.x))&&void 0!==e?e:-1;n.dataIndex=r,n.timestamp=null!==(i=c.dataIndexToTimestamp(r))&&void 0!==i?i:void 0}if(Tt(t.y)){var a=o?t.y-u.top:t.y;n.value=p.convertFromPixel(a)}return n})}}return St(t)?s:null!==(i=s[0])&&void 0!==i?i:{}},t.prototype.executeAction=function(t,e){var i;switch(t){case Pt.OnCrosshairChange:var n=X({},e);n.paneId=null!==(i=n.paneId)&&void 0!==i?i:Vi.CANDLE,this._chartStore.getTooltipStore().setCrosshair(n,{notExecuteAction:!0});break}},t.prototype.subscribeAction=function(t,e){this._chartStore.getActionStore().subscribe(t,e)},t.prototype.unsubscribeAction=function(t,e){this._chartStore.getActionStore().unsubscribe(t,e)},t.prototype.getConvertPictureUrl=function(t,e,i){var n=this,r=this._chartContainer.clientWidth,a=this._chartContainer.clientHeight,o=he("canvas",{width:"".concat(r,"px"),height:"".concat(a,"px"),boxSizing:"border-box"}),s=o.getContext("2d"),l=Vt(o);o.width=r*l,o.height=a*l,s.scale(l,l),s.fillStyle=null!==i&&void 0!==i?i:"#FFFFFF",s.fillRect(0,0,r,a);var c=null!==t&&void 0!==t&&t;return this._drawPanes.forEach(function(t){var e=n._separatorPanes.get(t);if(Mt(e)){var i=e.getBounding();s.drawImage(e.getImage(c),i.left,i.top,i.width,i.height)}var a=t.getBounding();s.drawImage(t.getImage(c),0,a.top,r,a.height)}),o.toDataURL("image/".concat(null!==e&&void 0!==e?e:"jpeg"))},t.prototype.resize=function(){this.adjustPaneViewport(!0,!0,!0,!0,!0)},t.prototype.destroy=function(){this._chartEvent.destroy(),this._drawPanes.forEach(function(t){t.destroy()}),this._drawPanes=[],this._separatorPanes.forEach(function(t){t.destroy()}),this._separatorPanes.clear(),this._container.removeChild(this._chartContainer)},t}(),Sr=new Map,kr=1;function Ar(t,e){var i;if(_t(),i=Et(t)?document.getElementById(t):t,null===i)return xt("","","The chart cannot be initialized correctly. Please check the parameters. The chart container cannot be null and child elements need to be added!!!"),null;var n=Sr.get(i.id);if(Mt(n))return bt("","","The chart has been initialized on the dom!!!"),n;var r="k_line_chart_".concat(kr++);return n=new Cr(i,e),n.id=r,i.setAttribute("k-line-chart-id",r),Sr.set(r,n),n}var Tr=i(21396),Mr=i.n(Tr);function Ir(t,e,i,n){if(!t||!e||!i||!n)return t;try{var r=Mr().enc.Base64.parse(t),a=Mr().lib.WordArray.create(r.words.slice(0,4)),o=Mr().lib.WordArray.create(r.words.slice(4)),s=Mr().enc.Base64.parse(n),l=Mr().AES.decrypt({ciphertext:o},s,{iv:a,mode:Mr().mode.CBC,padding:Mr().pad.Pkcs7}),c=l.toString(Mr().enc.Utf8);return c||t}catch(u){return t}}function Er(t,e){return Dr.apply(this,arguments)}function Dr(){return Dr=(0,c.A)((0,l.A)().m(function t(e,i){var n,r;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e&&i){t.n=1;break}throw new Error("用户ID和指标ID不能为空");case 1:return t.p=1,t.n=2,(0,f.Ay)({url:"/api/indicator/getDecryptKey",method:"post",data:{userid:e,indicatorId:i}});case 2:if(n=t.v,1!==n.code||!n.data||!n.data.key){t.n=3;break}return t.a(2,n.data.key);case 3:throw new Error(n.msg||"获取解密密钥失败");case 4:t.n=6;break;case 5:throw t.p=5,r=t.v,new Error("无法获取解密密钥,请检查网络连接或联系管理员: "+(r.message||"未知错误"));case 6:return t.a(2)}},t,null,[[1,5]])})),Dr.apply(this,arguments)}function Pr(t,e,i){return Lr.apply(this,arguments)}function Lr(){return Lr=(0,c.A)((0,l.A)().m(function t(e,i,n){var r;return(0,l.A)().w(function(t){while(1)switch(t.n){case 0:return t.n=1,Er(i,n);case 1:return r=t.v,t.a(2,Ir(e,i,n,r))}},t)})),Lr.apply(this,arguments)}function Rr(t,e){if(1===e||!0===e)return!0;if(t&&t.length>100)try{var i=atob(t);if(i.length>50)return!0}catch(n){}return!1}var Fr={name:"KlineChart",props:{symbol:{type:String,default:""},market:{type:String,default:""},timeframe:{type:String,default:"1H"},theme:{type:String,default:"light"},activeIndicators:{type:Array,default:function(){return[]}},realtimeEnabled:{type:Boolean,default:!1},userId:{type:Number,default:null}},emits:["retry","price-change","load","indicator-toggle"],setup:function(t,e){var i=e.emit,n=(0,h.IJ)([]),r=(0,h.KR)(!1),a=(0,h.KR)(null),s=(0,h.KR)(!1),u=(0,h.KR)(!0),p=null,v=(0,h.KR)(!1),g=(0,h.IJ)(null),m=(0,h.KR)(t.theme||"light"),y=(0,h.KR)(null),x=(0,h.KR)(5e3),_=(0,h.KR)(!1),w=(0,h.KR)(1e4),C=(0,h.KR)(0),S=function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(g.value){var e=Date.now(),i=Number(w.value||1e4);(t||!C.value||e-C.value>=i)&&(C.value=e,_t())}},k=(0,h.KR)([]),A=(0,h.KR)([]),T=(0,h.KR)([]),M=(0,h.KR)(null),I=(0,h.nI)(),E=I.proxy,D=(0,h.EW)(function(){return[{name:"line",title:E.$t("dashboard.indicator.drawing.line"),icon:"line"},{name:"horizontalLine",title:E.$t("dashboard.indicator.drawing.horizontalLine"),icon:"minus"},{name:"verticalLine",title:E.$t("dashboard.indicator.drawing.verticalLine"),icon:"column-width"},{name:"ray",title:E.$t("dashboard.indicator.drawing.ray"),icon:"arrow-right"},{name:"straightLine",title:E.$t("dashboard.indicator.drawing.straightLine"),icon:"menu"},{name:"parallelStraightLine",title:E.$t("dashboard.indicator.drawing.parallelLine"),icon:"menu"},{name:"priceLine",title:E.$t("dashboard.indicator.drawing.priceLine"),icon:"dollar"},{name:"priceChannelLine",title:E.$t("dashboard.indicator.drawing.priceChannel"),icon:"border"},{name:"fibonacciLine",title:E.$t("dashboard.indicator.drawing.fibonacciLine"),icon:"rise"},{name:"measure",title:E.$t("dashboard.indicator.drawing.measure"),icon:"drag"}]}),F=(0,h.KR)([{id:"sma",name:"SMA (简单移动平均)",shortName:"SMA",type:"line",defaultParams:{length:20}},{id:"ema",name:"EMA (指数移动平均)",shortName:"EMA",type:"line",defaultParams:{length:20}},{id:"rsi",name:"RSI (相对强弱)",shortName:"RSI",type:"line",defaultParams:{length:14}},{id:"macd",name:"MACD",shortName:"MACD",type:"macd",defaultParams:{fast:12,slow:26,signal:9}},{id:"bb",name:"布林带 (Bollinger Bands)",shortName:"BB",type:"band",defaultParams:{length:20,mult:2}},{id:"atr",name:"ATR (平均真实波幅)",shortName:"ATR",type:"line",defaultParams:{period:14}},{id:"cci",name:"CCI (商品通道指数)",shortName:"CCI",type:"line",defaultParams:{length:20}},{id:"williams",name:"Williams %R (威廉指标)",shortName:"W%R",type:"line",defaultParams:{length:14}},{id:"mfi",name:"MFI (资金流量指标)",shortName:"MFI",type:"line",defaultParams:{length:14}},{id:"adx",name:"ADX (平均趋向指数)",shortName:"ADX",type:"adx",defaultParams:{length:14}},{id:"obv",name:"OBV (能量潮)",shortName:"OBV",type:"line",defaultParams:{}},{id:"adosc",name:"ADOSC (积累/派发振荡器)",shortName:"ADOSC",type:"line",defaultParams:{fast:3,slow:10}},{id:"ad",name:"AD (积累/派发线)",shortName:"AD",type:"line",defaultParams:{}},{id:"kdj",name:"KDJ (随机指标)",shortName:"KDJ",type:"line",defaultParams:{period:9,k:3,d:3}}]),B=function(e){return t.activeIndicators.some(function(t){return t.id===e})},N=function(t){if(g.value){var e={line:"segment",horizontalLine:"horizontalStraightLine",verticalLine:"verticalStraightLine",ray:"rayLine",straightLine:"straightLine",parallelStraightLine:"parallelStraightLine",priceLine:"priceLine",priceChannelLine:"priceChannelLine",fibonacciLine:"fibonacciLine",measure:"priceRangeMeasure"},i=e[t]||t;if(M.value!==t){M.value=t;try{var n=["priceRangeMeasure"];if(n.includes(i)){if("function"!==typeof g.value.overrideOverlay)return void(M.value=null);g.value.overrideOverlay({name:i,lock:!1})}else{var r={name:i,lock:!1,extendData:{isDrawing:!0}},a=g.value.createOverlay(r);a?T.value.push(a):M.value=null}}catch(o){M.value=null}}else{M.value=null;try{"function"===typeof g.value.overrideOverlay&&g.value.overrideOverlay(null)}catch(s){}}}},O=function(){if(g.value)try{T.value.forEach(function(t){try{"function"===typeof g.value.removeOverlay?g.value.removeOverlay(t):"function"===typeof g.value.removeOverlayById&&g.value.removeOverlayById(t)}catch(e){}}),T.value=[],M.value=null,"function"===typeof g.value.overrideOverlay&&g.value.overrideOverlay(null)}catch(t){}},z=function(t){var e=B(t.id);if(e)i("indicator-toggle",{action:"remove",indicator:{id:t.id}});else{var n=(0,d.A)((0,d.A)({},t),{},{params:(0,d.A)({},t.defaultParams),calculate:null});i("indicator-toggle",{action:"add",indicator:n})}},W=(0,h.KR)(null),V=(0,h.KR)(!1),$=(0,h.KR)(!1),H=(0,h.KR)(!1),K=(0,h.EW)(function(){return"dark"===m.value?{backgroundColor:"#131722",textColor:"#d1d4dc",textColorSecondary:"#787b86",borderColor:"#2a2e39",gridLineColor:"#1f2943",gridLineColorDashed:"#363c4e",tooltipBg:"rgba(25, 27, 32, 0.95)",tooltipBorder:"#333",tooltipText:"#ccc",tooltipTextSecondary:"#888",axisLabelColor:"#787b86",splitAreaColor:["rgba(250,250,250,0.05)","rgba(200,200,200,0.02)"],dataZoomBorder:"#2a2e39",dataZoomFiller:"rgba(41, 98, 255, 0.15)",dataZoomHandle:"#13c2c2",dataZoomText:"transparent",dataZoomBg:"#1f2943"}:{backgroundColor:"#fff",textColor:"#333",textColorSecondary:"#666",borderColor:"#e8e8e8",gridLineColor:"#e8e8e8",gridLineColorDashed:"#e8e8e8",tooltipBg:"rgba(255, 255, 255, 0.95)",tooltipBorder:"#e8e8e8",tooltipText:"#333",tooltipTextSecondary:"#666",axisLabelColor:"#666",splitAreaColor:["rgba(250,250,250,0.05)","rgba(200,200,200,0.02)"],dataZoomBorder:"#e8e8e8",dataZoomFiller:"rgba(24, 144, 255, 0.15)",dataZoomHandle:"#1890ff",dataZoomText:"#999",dataZoomBg:"#f0f2f5"}}),Y=function(t){return"dark"===m.value?["#13c2c2","#e040fb","#ffeb3b","#00e676","#ff6d00","#9c27b0"][t%6]:["#13c2c2","#9c27b0","#f57c00","#1976d2","#c2185b","#7b1fa2"][t%6]},X=function(){return new Promise(function(t,e){if(window.pyodide)return W.value=window.pyodide,$.value=!0,void t(window.pyodide);V.value=!0;var i="0.25.0",n=function(t){return t&&t.endsWith("/")?t:t?t+"/":t},r="/assets/pyodide/v".concat(i,"/full/"),a="https://cdn.jsdelivr.net/pyodide/v".concat(i,"/full/"),o=n({NODE_ENV:"production",VUE_APP_PREVIEW:"false",VUE_APP_API_BASE_URL:"/api",BASE_URL:"/"}.VUE_APP_PYODIDE_LOCAL_BASE||r),s=n({NODE_ENV:"production",VUE_APP_PREVIEW:"false",VUE_APP_API_BASE_URL:"/api",BASE_URL:"/"}.VUE_APP_PYODIDE_CDN_BASE||a),u=({NODE_ENV:"production",VUE_APP_PREVIEW:"false",VUE_APP_API_BASE_URL:"/api",BASE_URL:"/"}.VUE_APP_PYODIDE_PREFER_CDN||"").toString().toLowerCase(),d=!u||("true"===u||"1"===u||"yes"===u),h=function(t){return new Promise(function(e,i){var n=document.querySelector('script[data-pyodide-src="'.concat(t,'"]'));if(n)return"function"===typeof window.loadPyodide?e():(n.addEventListener("load",function(){return e()},{once:!0}),void n.addEventListener("error",function(){return i(new Error("Pyodide 脚本加载失败"))},{once:!0}));var r=document.createElement("script");r.dataset.pyodideSrc=t,r.src=t,r.onload=function(){return e()},r.onerror=function(){return i(new Error("Pyodide 脚本加载失败"))},document.head.appendChild(r)})},p=function(){var e=(0,c.A)((0,l.A)().m(function e(i){return(0,l.A)().w(function(e){while(1)switch(e.n){case 0:if("function"===typeof window.loadPyodide){e.n=1;break}throw new Error("loadPyodide 函数未找到");case 1:return e.n=2,window.loadPyodide({indexURL:i});case 2:return window.pyodide=e.v,e.n=3,window.pyodide.loadPackage(["pandas","numpy"]);case 3:W.value=window.pyodide,$.value=!0,V.value=!1,t(window.pyodide);case 4:return e.a(2)}},e)}));return function(t){return e.apply(this,arguments)}}();(0,c.A)((0,l.A)().m(function t(){var e,i,n;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e=function(){var t=(0,c.A)((0,l.A)().m(function t(e){return(0,l.A)().w(function(t){while(1)switch(t.n){case 0:return t.n=1,h(e+"pyodide.js");case 1:return t.n=2,p(e);case 2:return t.a(2)}},t)}));return function(e){return t.apply(this,arguments)}}(),t.p=1,!d){t.n=3;break}return t.n=2,e(s);case 2:t.n=4;break;case 3:return t.n=4,e(o);case 4:t.n=9;break;case 5:return t.p=5,i=t.v,t.p=6,t.n=7,e(d?o:s);case 7:t.n=9;break;case 8:throw t.p=8,n=t.v,n||i;case 9:return t.a(2)}},t,null,[[6,8],[1,5]])}))().catch(function(t){V.value=!1,H.value=!0,e(t)})})},U=function(t){if(!t||"string"!==typeof t)return null;try{var e={},i=t.match(/(\w+)\s*=\s*(\d+\.?\d*)/g);return i&&i.forEach(function(t){var i=t.split("=");if(2===i.length){var n=i[0].trim(),r=parseFloat(i[1].trim());isNaN(r)||(e[n]=r)}}),{params:e,plots:[],success:!0}}catch(n){return{params:{},plots:[],success:!1}}},G=function(){var e=(0,c.A)((0,l.A)().m(function e(i,n){var r,a,s,c,u,d,h,p,f,v,g,m,y,b,x,_,w,C,S=arguments;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(r=S.length>2&&void 0!==S[2]?S[2]:{},a=S.length>3&&void 0!==S[3]?S[3]:{},$.value&&W.value){e.n=5;break}if(!V.value){e.n=4;break}s=0;case 1:if(!(V.value&&s<30)){e.n=4;break}return e.n=2,new Promise(function(t){return setTimeout(t,500)});case 2:if(s++,!$.value||!W.value){e.n=3;break}return e.a(3,4);case 3:e.n=1;break;case 4:if($.value&&W.value){e.n=5;break}throw V.value?(V.value=!1,H.value=!0):H.value=!0,new Error("Python 引擎未就绪,请等待加载完成");case 5:if(e.p=5,c=i,u=a.is_encrypted||a.isEncrypted||0,!u&&!Rr(i,u)){e.n=11;break}if(d=a.user_id||a.userId||t.userId||r.userId,h=a.originalId||a.id||r.indicatorId,!d||!h){e.n=10;break}return e.p=6,e.n=7,Pr(c,d,h);case 7:c=e.v,e.n=9;break;case 8:throw e.p=8,_=e.v,new Error("代码解密失败,无法执行指标: "+(_.message||"未知错误"));case 9:e.n=11;break;case 10:throw new Error("缺少必要的解密参数(用户ID或指标ID),无法执行加密指标");case 11:return p=n.map(function(t){var e=t.timestamp||t.time;return e<1e10&&(e*=1e3),{time:Math.floor(e/1e3),open:parseFloat(t.open)||0,high:parseFloat(t.high)||0,low:parseFloat(t.low)||0,close:parseFloat(t.close)||0,volume:parseFloat(t.volume)||0}}),f=JSON.stringify(p),v=JSON.stringify(r||{}),g=f.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\n/g,"\\n").replace(/\r/g,"\\r"),m=v.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\n/g,"\\n").replace(/\r/g,"\\r"),y="\nimport json\nimport pandas as pd\nimport numpy as np\n\n# 递归清理 NaN 值的函数\ndef clean_nan(obj):\n if isinstance(obj, dict):\n return {k: clean_nan(v) for k, v in obj.items()}\n elif isinstance(obj, list):\n return [clean_nan(item) for item in obj]\n elif isinstance(obj, (pd.Series, np.ndarray)):\n return [None if (isinstance(x, float) and (np.isnan(x) or np.isinf(x))) else x for x in obj]\n elif isinstance(obj, (float, np.floating)):\n if np.isnan(obj) or np.isinf(obj):\n return None\n return float(obj)\n elif pd.isna(obj):\n return None\n else:\n return obj\n\n# 接收 JSON 数据\nraw_data = json.loads('".concat(g,"')\nparams = json.loads('").concat(m,"')\n\n# 将前端参数注入为指标代码可直接使用的变量(对齐回测/实盘执行环境)\n# 兼容多种命名(snake_case / camelCase)\ndef _get_param(key, default=None):\n if key in params:\n return params.get(key, default)\n # camelCase fallback\n camel = ''.join([key.split('_')[0]] + [p.capitalize() for p in key.split('_')[1:]])\n return params.get(camel, default)\n\ntry:\n leverage = float(_get_param('leverage', 1) or 1)\nexcept Exception:\n leverage = 1\n\ntrade_direction = _get_param('trade_direction', _get_param('tradeDirection', 'both')) or 'both'\n\ntry:\n initial_position = int(_get_param('initial_position', 0) or 0)\nexcept Exception:\n initial_position = 0\n\ntry:\n initial_avg_entry_price = float(_get_param('initial_avg_entry_price', 0.0) or 0.0)\nexcept Exception:\n initial_avg_entry_price = 0.0\n\ntry:\n initial_position_count = int(_get_param('initial_position_count', 0) or 0)\nexcept Exception:\n initial_position_count = 0\n\ntry:\n initial_last_add_price = float(_get_param('initial_last_add_price', 0.0) or 0.0)\nexcept Exception:\n initial_last_add_price = 0.0\n\ntry:\n initial_highest_price = float(_get_param('initial_highest_price', 0.0) or 0.0)\nexcept Exception:\n initial_highest_price = 0.0\n\n# 转换为 DataFrame\ndf = pd.DataFrame(raw_data)\n\n# 转换数据类型\ndf['open'] = df['open'].astype(float)\ndf['high'] = df['high'].astype(float)\ndf['low'] = df['low'].astype(float)\ndf['close'] = df['close'].astype(float)\ndf['volume'] = df['volume'].astype(float)\n\n# 用户代码(已解密)\n").concat(c,"\n\n# 构造输出(如果用户没有定义 output,则尝试从 result_json 获取)\nif 'output' not in locals():\n if 'result_json' in locals():\n output = json.loads(result_json)\n else:\n output = {\"plots\": []}\nelse:\n # 确保 output 是字典格式\n if isinstance(output, str):\n output = json.loads(output)\n\n# 清理 output 中的所有 NaN 值\noutput = clean_nan(output)\n\n# 返回 JSON 字符串\njson.dumps(output)\n"),e.n=12,W.value.runPythonAsync(y);case 12:if(b=e.v,b&&"string"===typeof b){e.n=13;break}throw new Error("Python 代码执行后未返回有效的 JSON 字符串,返回类型: ".concat((0,o.A)(b)));case 13:e.p=13,x=JSON.parse(b),e.n=15;break;case 14:throw e.p=14,w=e.v,new Error("JSON 解析失败: ".concat(w.message,"。可能是数据中包含 NaN 或其他无效值。"));case 15:if(x){e.n=16;break}return e.a(2,{plots:[],signals:[],calculatedVars:{}});case 16:return x.plots&&Array.isArray(x.plots)||(x.plots=[]),x.plots=x.plots.map(function(t){return t.data&&Array.isArray(t.data)&&(t.data=t.data.map(function(t){return null===t||void 0===t||"number"===typeof t&&isNaN(t)?null:t})),t}),x.signals&&Array.isArray(x.signals)&&(x.signals=x.signals.map(function(t){return t.data&&Array.isArray(t.data)&&(t.data=t.data.map(function(t){return null===t||void 0===t||"number"===typeof t&&isNaN(t)?null:t})),t})),x.calculatedVars||(x.calculatedVars={}),e.a(2,x);case 17:throw e.p=17,C=e.v,new Error("Python 执行失败: ".concat(C.message));case 18:return e.a(2)}},e,null,[[13,14],[6,8],[5,17]])}));return function(t,i){return e.apply(this,arguments)}}();function j(t,e){for(var i=[],n=0;nn-e+1){var c=(t[o-1].high+t[o-1].low+t[o-1].close)/3;s>c?r+=l:sp&&h>0?o.push(h):o.push(0),p>h&&p>0?s.push(p):s.push(0)}for(var f=[],v=[],g=[],m=0;m=e-1){var w=f[m],C=v[m],S=g[m];if(0===w?(i.push(0),n.push(0)):(i.push(C/w*100),n.push(S/w*100)),m>=e-1){var k=i[m]+n[m],A=0===k?0:Math.abs(i[m]-n[m])/k*100;if(m===e-1)r.push(A);else if(m===e){var T=Math.abs(i[m-1]-n[m-1])/(i[m-1]+n[m-1])*100;r.push((T+A)/2)}else r.push((r[m-1]*(e-1)+A)/e)}}}return{adx:r,plusDI:i,minusDI:n}}function nt(t){for(var e=[],i=0,n=0;nt[n-1].close?i+=t[n].volume:t[n].close255?12:7)},0),m=g+2*h,y=f+2*p,b=(null===(i=a.extendData)||void 0===i?void 0:i.side)||(null===(n=a.extendData)||void 0===n?void 0:n.type)||"buy",x="buy"===b,_=x?u:u-y,w=d,C=w,S=x?_:_+y;return[{type:"line",attrs:{coordinates:[{x:c,y:C},{x:c,y:S}]},styles:{style:"stroke",color:l,dashedValue:[2,2]},ignoreEvent:!0},{type:"circle",attrs:{x:c,y:w,r:4},styles:{style:"fill",color:l},ignoreEvent:!0},{type:"rect",attrs:{x:c-m/2,y:_,width:m,height:y,r:4},styles:{style:"fill",color:l,borderSize:0},ignoreEvent:!0},{type:"text",attrs:{x:c,y:_+y/2,text:v,align:"center",baseline:"middle"},styles:{color:"#ffffff",size:f,weight:"bold",backgroundColor:l,borderRadius:5},ignoreEvent:!0}]}}),Ni({name:"priceRangeMeasure",totalStep:2,lock:!1,needDefaultPointFigure:!1,needDefaultXAxisFigure:!1,needDefaultYAxisFigure:!1,createPointFigures:function(t){var e=t.coordinates,i=t.overlay,n=t.ctx;if(!e[0]||!e[1])return[];var r=i.points[0],a=i.points[1];if(!r||!a)return[];var o=r.value,s=a.value,l=s-o,c=l/o*100,u=r.timestamp,d=a.timestamp,h=Math.abs(d-u),p="",f=Math.floor(h/864e5),v=Math.floor(h%864e5/36e5),g=Math.floor(h%36e5/6e4),m=Math.floor(h%6e4/1e3);p=f>0?"".concat(f,"天").concat(v>0?v+"小时":""):v>0?"".concat(v,"小时").concat(g>0?g+"分钟":""):g>0?"".concat(g,"分钟"):"".concat(m,"秒");var y=0;try{if(n&&n.chart){var b=n.chart.getData();if(b&&Array.isArray(b)&&b.length>0){var x=b.findIndex(function(t){return Math.abs(t.timestamp-u)<1e3}),_=b.findIndex(function(t){return Math.abs(t.timestamp-d)<1e3});x>=0&&_>=0&&(y=Math.abs(_-x))}}}catch(z){}var w=c>=0?"+".concat(c.toFixed(2),"%"):"".concat(c.toFixed(2),"%"),C=l>=0?"+".concat(l.toFixed(2)):"".concat(l.toFixed(2)),S="".concat(w," ").concat(C);y>0?(S+=" (".concat(y,"根"),p&&(S+=" / ".concat(p)),S+=")"):p&&(S+=" (".concat(p,")"));var k=l>=0,A=k?"#0ecb81":"#f6465d",T=k?"#0ecb81":"#f6465d",M=k?"rgba(14, 203, 129, 0.1)":"rgba(246, 70, 93, 0.1)",I=e[0].x,E=e[0].y,D=e[1].x,P=e[1].y,L=(I+D)/2,R=(E+P)/2,F=-20,B=12,N=7*S.length+16,O=B+8;return[{type:"line",attrs:{coordinates:[{x:I,y:E},{x:D,y:P}]},styles:{style:"stroke",color:A,size:2,dashedValue:[4,4]},ignoreEvent:!1},{type:"circle",attrs:{x:I,y:E,r:4},styles:{style:"fill",color:A},ignoreEvent:!1},{type:"circle",attrs:{x:D,y:P,r:4},styles:{style:"fill",color:A},ignoreEvent:!1},{type:"rect",attrs:{x:L-N/2,y:R+F-O/2,width:N,height:O,r:4},styles:{style:"fill",color:M,borderSize:1,borderColor:A},ignoreEvent:!1},{type:"text",attrs:{x:L,y:R+F,text:S,align:"center",baseline:"middle"},styles:{color:T,size:B,weight:"bold"},ignoreEvent:!1}]}});var st=function(t){return t.map(function(t){var e=t.time||t.timestamp;return"string"===typeof e&&(e=parseInt(e)),e<1e10&&(e*=1e3),{timestamp:e,open:parseFloat(t.open),high:parseFloat(t.high),low:parseFloat(t.low),close:parseFloat(t.close),volume:parseFloat(t.volume||0)}}).filter(function(t){return t.timestamp&&!isNaN(t.open)&&!isNaN(t.high)&&!isNaN(t.low)&&!isNaN(t.close)}).sort(function(t,e){return t.timestamp-e.timestamp})},lt=function(t){if(t.length>0){var e=t[t.length-1];if(t.length>1){var n=t[t.length-2],r=e.close.toFixed(2),a=(e.close-n.close)/n.close*100;i("price-change",{price:r,change:a})}else{var o=e.close.toFixed(2);i("price-change",{price:o,change:0})}}},ct=function(t){return t.map(function(t){return{time:Math.floor(t.timestamp/1e3),open:t.open,high:t.high,low:t.low,close:t.close,volume:t.volume}})},ut=function(t,e,i){var n=new Date(1e3*t),r=new Date(1e3*e);switch(i){case"1m":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours()&&n.getMinutes()===r.getMinutes();case"5m":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours()&&Math.floor(n.getMinutes()/5)===Math.floor(r.getMinutes()/5);case"15m":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours()&&Math.floor(n.getMinutes()/15)===Math.floor(r.getMinutes()/15);case"30m":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours()&&Math.floor(n.getMinutes()/30)===Math.floor(r.getMinutes()/30);case"1H":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours();case"4H":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&Math.floor(n.getHours()/4)===Math.floor(r.getHours()/4);case"1D":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate();case"1W":var a=Math.floor((n.getTime()-new Date(n.getFullYear(),0,1).getTime())/6048e5),o=Math.floor((r.getTime()-new Date(r.getFullYear(),0,1).getTime())/6048e5);return n.getFullYear()===r.getFullYear()&&a===o;default:return t===e}},dt=function(){var e=(0,c.A)((0,l.A)().m(function e(){var i,o,s,c,d,p,v,m=arguments;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(i=m.length>0&&void 0!==m[0]&&m[0],t.symbol){e.n=1;break}return e.a(2);case 1:if(!r.value||i){e.n=2;break}return e.a(2);case 2:return r.value=!0,a.value=null,e.p=3,o=[],e.p=4,e.n=5,(0,f.Ay)({url:"/api/indicator/kline",method:"get",params:{market:t.market,symbol:t.symbol,timeframe:t.timeframe,limit:500}});case 5:if(s=e.v,1!==s.code||!s.data||!Array.isArray(s.data)){e.n=6;break}o=st(s.data),e.n=7;break;case 6:throw c=s.msg||"获取K线数据失败","tiingo_subscription"===s.hint&&(c=E.$t("dashboard.indicator.error.tiingoSubscription")||"Forex 1-minute data requires Tiingo paid subscription"),new Error(c);case 7:e.n=9;break;case 8:throw e.p=8,p=e.v,p;case 9:if(o&&0!==o.length){e.n=10;break}throw new Error("未获取到K线数据");case 10:n.value=o,u.value=!0,d=ct(o),lt(d),(0,h.dY)(function(){if(g.value){var e=n.value.filter(function(t){return t.timestamp&&!isNaN(t.open)&&!isNaN(t.high)&&!isNaN(t.low)&&!isNaN(t.close)});if(e.length>0&&g.value){try{g.value.applyNewData(e)}catch(i){g.value.applyNewData(e)}setTimeout(function(){g.value&&_t()},100)}}else mt();t.realtimeEnabled&&(gt(),vt())}),e.n=12;break;case 11:if(e.p=11,v=e.v,a.value=E.$t("dashboard.indicator.error.loadDataFailed")+": "+(v.message||E.$t("dashboard.indicator.error.loadDataFailedDesc")),n.value=[],g.value)try{g.value.applyNewData([])}catch(l){}case 12:return e.p=12,r.value=!1,e.f(12);case 13:return e.a(2)}},e,null,[[4,8],[3,11,12,13]])}));return function(){return e.apply(this,arguments)}}(),ht=function(){var e=(0,c.A)((0,l.A)().m(function e(i){return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.symbol&&n.value&&0!==n.value.length){e.n=1;break}return e.a(2);case 1:if(!s.value&&!p){e.n=6;break}if(!p){e.n=5;break}return e.p=2,e.n=3,p;case 3:e.n=5;break;case 4:e.p=4,e.v;case 5:return e.a(2);case 6:if(u.value){e.n=7;break}return g.value&&"function"===typeof g.value.noMoreData&&g.value.noMoreData(),e.a(2);case 7:return s.value=!0,p=(0,c.A)((0,l.A)().m(function e(){var r,a,o,c,d,v;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.n=1,(0,h.dY)();case 1:return e.p=1,r=Math.floor(i/1e3),e.n=2,(0,f.Ay)({url:"/api/indicator/kline",method:"get",params:{market:t.market,symbol:t.symbol,timeframe:t.timeframe,limit:500,before_time:r}});case 2:if(a=e.v,1!==a.code||!a.data||!Array.isArray(a.data)){e.n=5;break}if(o=st(a.data),0!==o.length){e.n=3;break}return u.value=!1,g.value&&"function"===typeof g.value.noMoreData&&g.value.noMoreData(),e.a(2);case 3:if(c=o.filter(function(t){return t.timestamp0&&(r=st(i.data),a=(0,R.A)(n.value),r.length>0&&(o=Math.floor(r[r.length-1].timestamp/1e3),s=Math.floor(a[a.length-1].timestamp/1e3),ut(o,s,t.timeframe)?(c=a[a.length-1],u=r[r.length-1],a[a.length-1]={timestamp:c.timestamp,open:c.open,high:Math.max(c.high,u.high),low:Math.min(c.low,u.low),close:u.close,volume:u.volume},n.value=a,d=ct(n.value),lt(d),g.value&&"function"===typeof g.value.updateData?(h=n.value.length-1,g.value.updateData(a[h]),S(!1)):g.value&&(g.value.applyNewData(n.value),S(!1))):o>s&&(p=r.filter(function(e){var i=Math.floor(e.timestamp/1e3);return!a.some(function(e){var n=Math.floor(e.timestamp/1e3);return ut(i,n,t.timeframe)})}),p.length>0&&(n.value=[].concat((0,R.A)(a),(0,R.A)(p)),n.value.length>500&&(n.value=n.value.slice(-500)),v=ct(n.value),lt(v),g.value&&"function"===typeof g.value.applyMoreData?(g.value.applyMoreData(p),S(!0)):g.value&&(g.value.applyNewData(n.value),S(!0)))))),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.a(2)}},e,null,[[1,3]])}));return function(){return e.apply(this,arguments)}}(),vt=function(){y.value&&clearInterval(y.value);var e={"1m":5e3,"5m":1e4,"15m":15e3,"30m":3e4,"1H":6e4,"4H":3e5,"1D":6e5,"1W":18e5},i=e[t.timeframe]||1e4;x.value=Math.min(i,1e3),t.realtimeEnabled&&t.symbol&&n.value.length>0&&(y.value=setInterval(function(){!r.value&&t.symbol&&n.value&&n.value.length>0&&ft()},x.value))},gt=function(){y.value&&(clearInterval(y.value),y.value=null)},mt=function(){var t=document.getElementById("kline-chart-container");if(t)if(0!==t.clientWidth&&0!==t.clientHeight){if(g.value){try{g.value.destroy()}catch(y){}g.value=null}try{var e=document.getElementById("kline-chart-container");if(!e)throw new Error("容器元素不存在");try{g.value=Ar(e,{drawingBarVisible:!0,overlay:{visible:!0}})}catch(y){g.value=Ar(e)}if(g.value&&"function"===typeof g.value.setDrawingBarVisible?g.value.setDrawingBarVisible(!0):g.value&&"function"===typeof g.value.setDrawingBar?g.value.setDrawingBar(!0):g.value&&"function"===typeof g.value.enableDrawing&&g.value.enableDrawing(!0),!g.value)throw new Error("图表初始化失败:无法创建图表实例");if(g.value&&("function"===typeof g.value.setDrawingBarVisible&&g.value.setDrawingBarVisible(!0),"function"===typeof g.value.setDrawingBar&&g.value.setDrawingBar(!0),"function"===typeof g.value.enableDrawing&&g.value.enableDrawing(!0)),bt(),g.value&&"function"===typeof g.value.subscribeAction){if(g.value.subscribeAction("onOverlayCreated",function(t){if(M.value&&t&&t.id){var e={line:"segment",horizontalLine:"horizontalStraightLine",verticalLine:"verticalStraightLine",ray:"rayLine",straightLine:"straightLine",parallelStraightLine:"parallelStraightLine",priceLine:"priceLine",priceChannelLine:"priceChannelLine",fibonacciLine:"fibonacciLine",measure:"priceRangeMeasure"},i=e[M.value];if(!t.name||t.name===i||"priceRangeMeasure"===i){T.value.push(t.id),M.value=null;try{"function"===typeof g.value.overrideOverlay&&g.value.overrideOverlay(null)}catch(y){}}}}),"function"===typeof g.value.subscribeAction)try{g.value.subscribeAction("onOverlayComplete",function(t){M.value&&t&&t.id&&(T.value.push(t.id),M.value=null)})}catch(y){}g.value.subscribeAction("onOverlayRemoved",function(t){var e=T.value.indexOf(t);e>-1&&T.value.splice(e,1)})}if(g.value&&"function"===typeof g.value.subscribeAction){var i=null,r=!1;g.value.subscribeAction("onVisibleRangeChange",function(){var t=(0,c.A)((0,l.A)().m(function t(e){var a,o,c,d,h,f;return(0,l.A)().w(function(t){while(1)switch(t.n){case 0:if(!e||"number"!==typeof e.from){t.n=5;break}if(r){t.n=1;break}return i=e.from,r=!0,setTimeout(function(){v.value=!0},1e3),t.a(2);case 1:if(v.value){t.n=2;break}return i=e.from,t.a(2);case 2:if(!(s.value&&e.from<=0)){t.n=3;break}try{g.value&&"function"===typeof g.value.setVisibleRange&&(a=n.value.length,a>0&&(o=g.value.getVisibleRange(),o&&(c=Math.ceil((o.to-o.from)*a/100),d=.1,h=Math.min(100,d+c/a*100),g.value.setVisibleRange(d,h))))}catch(y){}return t.a(2);case 3:if(!(e.from<=5&&!s.value&&!p&&u.value&&v.value)){t.n=4;break}if(!(null!==i&&i>e.from)){t.n=4;break}if(!(n.value.length>0)){t.n=4;break}return f=n.value[0].timestamp,t.n=4,ht(f);case 4:i=e.from;case 5:return t.a(2)}},t)}));return function(e){return t.apply(this,arguments)}}())}if(n.value&&n.value.length>0){var o=n.value.filter(function(t){return t.timestamp&&!isNaN(t.open)&&!isNaN(t.high)&&!isNaN(t.low)&&!isNaN(t.close)});if(o.length>0){try{g.value.applyNewData(o)}catch(y){try{g.value.applyNewData(o)}catch(b){}}try{g.value.createIndicator("VOL",!1,{height:100,dragEnabled:!0})}catch(y){}(0,h.dY)(function(){_t()})}}window.addEventListener("resize",yt)}catch(a){a.value=E.$t("dashboard.indicator.error.chartInitFailed")+": "+(a.message||"未知错误")}}else{var d=0,f=10,m=function(){var t=document.getElementById("kline-chart-container");t&&t.clientWidth>0&&t.clientHeight>0?mt():d0&&t.clientHeight>0&&mt()}},bt=function(){if(g.value){var t=K.value,e="dark"===m.value;g.value.setStyles({grid:{show:!0,horizontal:{show:!0,color:t.gridLineColor,style:"dashed",size:1},vertical:{show:!1}},candle:{priceMark:{show:!0,high:{show:!0,color:t.axisLabelColor},low:{show:!0,color:t.axisLabelColor}},tooltip:{showRule:"always",showType:"standard",labels:[E.$t("dashboard.indicator.tooltip.time"),E.$t("dashboard.indicator.tooltip.open"),E.$t("dashboard.indicator.tooltip.high"),E.$t("dashboard.indicator.tooltip.low"),E.$t("dashboard.indicator.tooltip.close"),E.$t("dashboard.indicator.tooltip.volume")],values:function(t){var e=new Date(t.timestamp);return["".concat(e.getFullYear(),"-").concat(e.getMonth()+1,"-").concat(e.getDate()," ").concat(e.getHours(),":").concat(e.getMinutes()),t.open.toFixed(2),t.high.toFixed(2),t.low.toFixed(2),t.close.toFixed(2),t.volume.toFixed(0)]}},bar:{upColor:e?"#0ecb81":"#13c2c2",downColor:e?"#f6465d":"#fa541c",noChangeColor:t.borderColor}},indicator:{tooltip:{showRule:"always",showType:"standard"}},xAxis:{show:!0,axisLine:{show:!0,color:t.borderColor}},yAxis:{show:!0,axisLine:{show:!1}},crosshair:{show:!0,horizontal:{show:!0,line:{show:!0,style:"dashed",color:t.gridLineColor,size:1}},vertical:{show:!0,line:{show:!0,style:"dashed",color:t.gridLineColor,size:1}}},watermark:{show:!1}})}},xt=function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:2,a=arguments.length>5&&void 0!==arguments[5]&&arguments[5];try{var o={name:t,shortName:t,calc:e,figures:i,calcParams:n,precision:r,series:a?"price":"normal"};return ri(o),!0}catch(s){return!(!s.message||!s.message.includes("already registered"))}},_t=function(){var e=(0,c.A)((0,l.A)().m(function e(){var i,r,a,o;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!_.value){e.n=1;break}return e.a(2);case 1:if(g.value&&0!==n.value.length){e.n=2;break}return e.a(2);case 2:_.value=!0,e.p=3;try{A.value.length>0&&g.value&&(A.value.forEach(function(t){try{"function"===typeof g.value.removeOverlay?g.value.removeOverlay(t):"function"===typeof g.value.removeOverlayById&&g.value.removeOverlayById(t)}catch(e){}}),A.value=[])}catch(s){}try{k.value.length>0&&(k.value.forEach(function(t){var e="string"===typeof t?t:t.name,i="string"===typeof t?void 0:t.paneId;i?g.value.removeIndicator(i,e):(g.value.removeIndicator("candle_pane",e),g.value.removeIndicator(e))}),k.value=[])}catch(s){}i=ct(n.value),r=(0,l.A)().m(function e(){var n,r,a,s,c,u,d,h,p,f,v,m,y,x,_,w,C,S,T,M,I,E,D,P,F,B,N,O,z,W,$,K,X,U,st,lt,ct,ut,dt,ht,pt,ft,vt,gt,mt,yt,bt,_t,wt,Ct,St,kt,At,Tt,Mt,It,Et,Dt,Pt,Lt,Rt,Ft,Bt,Nt,Ot,zt,Wt,Vt,$t,Ht,Kt,Yt,Xt,Ut,Gt,jt,qt,Zt,Jt,Qt,te,ee,ie,ne,re,ae,oe,se,le,ce,ue,de,he,pe,fe,ve,ge,me,ye,be,xe,_e,we,Ce,Se,ke,Ae,Te,Me,Ie,Ee,De,Pe,Le,Re,Fe,Be,Ne,Oe,ze,We,Ve,$e,He,Ke,Ye,Xe,Ue,Ge,je,qe,Ze,Je,Qe,ti,ei,ii,ni,ri,ai,oi,si,li,ci,ui,di,hi,pi,fi,vi,gi,mi,yi,bi;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(n=t.activeIndicators[o],e.p=1,"python"!==n.type){e.n=31;break}if(n.code){e.n=2;break}return e.a(2,0);case 2:if(e.p=2,!n.calculate||"function"!==typeof n.calculate){e.n=15;break}return e.n=3,n.calculate(i,n.params||{});case 3:if(r=e.v,a=[],r&&r.plots&&Array.isArray(r.plots)&&(a=(0,R.A)(r.plots)),!(r&&r.signals&&Array.isArray(r.signals))){e.n=14;break}s=(0,b.A)(r.signals),e.p=4,s.s();case 5:if((c=s.n()).done){e.n=11;break}if(u=c.value,!(u.data&&Array.isArray(u.data)&&u.data.length>0)){e.n=10;break}for(d=[],h=0;h0&&g.value){E=(0,b.A)(f);try{for(E.s();!(D=E.n()).done;){P=D.value;try{F=P.timestamp,F<1e10&&(F*=1e3),B=P.text,"function"===typeof g.value.createOverlay&&(N=g.value.createOverlay({name:"signalTag",points:[{timestamp:F,value:P.price},{timestamp:F,value:P.anchorPrice}],extendData:{text:B,color:P.color,side:P.side,action:P.action,price:P.price},lock:!0},"candle_pane"),N&&A.value.push(N))}catch(l){}}}catch(xi){E.e(xi)}finally{E.f()}}case 10:e.n=5;break;case 11:e.n=13;break;case 12:e.p=12,mi=e.v,s.e(mi);case 13:return e.p=13,s.f(),e.f(13);case 14:if(a.length>0&&(O=a.filter(function(t){return t.data&&Array.isArray(t.data)&&t.data.length>0}),O.length>0)){for(z=[],W={},$=0;$0)){e.n=23;break}for(_t=[],wt=0;wt0&&g.value){Bt=(0,b.A)(St);try{for(Bt.s();!(Nt=Bt.n()).done;){Ot=Nt.value;try{zt=Ot.timestamp,zt<1e10&&(zt*=1e3),Wt=Ot.text,"function"===typeof g.value.createOverlay&&(Vt=g.value.createOverlay({name:"signalTag",points:[{timestamp:zt,value:Ot.price},{timestamp:zt,value:Ot.anchorPrice}],extendData:{text:Wt,color:Ot.color,side:Ot.side,action:Ot.action,price:Ot.price},lock:!0},"candle_pane"),Vt&&A.value.push(Vt))}catch(l){}}}catch(xi){Bt.e(xi)}finally{Bt.f()}}case 23:e.n=18;break;case 24:e.n=26;break;case 25:e.p=25,yi=e.v,mt.e(yi);case 26:return e.p=26,mt.f(),e.f(26);case 27:if(gt.length>0&&($t=gt.filter(function(t){return t.data&&Array.isArray(t.data)&&t.data.length>0}),$t.length>0)){for(Ht=[],Kt={},Yt=0;Yt<$t.length;Yt++)Xt=$t[Yt],Ut=Xt.name||"PLOT_".concat(Yt),Gt=Ut.toLowerCase().replace(/\s+/g,"_").replace(/[^a-z0-9_]/g,"_"),jt=Xt.color||Y(Yt),qt=Xt.type||"line",Ht.push({key:Gt,title:Xt.name||Ut,type:qt,color:jt}),Kt[Gt]=Xt.data;Zt=$t.every(function(t){return!1!==t.overlay}),Jt="".concat(n.id,"_combined"),vt&&vt.name&&(Jt=vt.name);try{Qt=xt(Jt,function(t){for(var e=[],i=0;i0&&(0,h.dY)(function(){g.value&&_t()})},{deep:!0}),(0,h.wB)(function(){return t.realtimeEnabled},function(t){t?vt():gt()}),(0,h.sV)((0,c.A)((0,l.A)().m(function e(){return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.n=1,(0,h.dY)();case 1:return!t.theme||"dark"!==t.theme&&"light"!==t.theme||(m.value=t.theme),e.p=2,e.n=3,X();case 3:e.n=5;break;case 4:e.p=4,e.v,H.value=!0;case 5:(0,h.dY)(function(){setTimeout(function(){!g.value&&t.symbol&&mt()},300)});case 6:return e.a(2)}},e,null,[[2,4]])}))),(0,h.xo)(function(){gt(),g.value&&(g.value.destroy(),g.value=null),window.removeEventListener("resize",yt)}),{klineData:n,loading:r,error:a,loadingHistory:s,chartRef:g,chartTheme:m,themeConfig:K,getIndicatorColor:Y,handleRetry:wt,loadingPython:V,pythonReady:$,pyodideLoadFailed:H,formatKlineData:st,updatePricePanel:lt,isSameTimeframe:ut,loadKlineData:dt,loadMoreHistoryData:pt,updateKlineRealtime:ft,startRealtime:vt,stopRealtime:gt,initChart:mt,handleResize:yt,updateChartTheme:bt,updateIndicators:_t,executePythonStrategy:G,parsePythonStrategy:U,indicatorButtons:F,isIndicatorActive:B,toggleIndicator:z,drawingTools:D,activeDrawingTool:M,selectDrawingTool:N,clearAllDrawings:O}}},Br=Fr,Nr=(0,T.A)(Br,E,D,!1,null,"5f0b12e1",null),Or=Nr.exports,zr=function(){var t=this,e=t._self._c;return e("a-modal",{staticClass:"backtest-modal",attrs:{title:t.$t("dashboard.indicator.backtest.title"),visible:t.visible,width:1100,maskClosable:!1},on:{cancel:t.handleCancel}},[e("div",{staticClass:"backtest-content"},[e("a-steps",{staticStyle:{"margin-bottom":"16px"},attrs:{current:t.currentStep,size:"small"}},[e("a-step",{attrs:{title:t.$t("dashboard.indicator.backtest.steps.strategy.title"),description:t.$t("dashboard.indicator.backtest.steps.strategy.desc")}}),e("a-step",{attrs:{title:t.$t("dashboard.indicator.backtest.steps.trading.title"),description:t.$t("dashboard.indicator.backtest.steps.trading.desc")}}),e("a-step",{attrs:{title:t.$t("dashboard.indicator.backtest.steps.results.title"),description:t.$t("dashboard.indicator.backtest.steps.results.desc")}})],1),e("div",{directives:[{name:"show",rawName:"v-show",value:2!==t.currentStep,expression:"currentStep !== 2"}],staticClass:"config-section"},[e("a-form",{attrs:{form:t.form,"label-col":t.labelCol,"wrapper-col":t.wrapperCol}},[e("div",{directives:[{name:"show",rawName:"v-show",value:0===t.currentStep,expression:"currentStep === 0"}]},[e("a-collapse",{staticStyle:{background:"#fafafa"},attrs:{bordered:!1},model:{value:t.step1CollapseKeys,callback:function(e){t.step1CollapseKeys=e},expression:"step1CollapseKeys"}},[e("a-collapse-panel",{key:"risk",attrs:{header:t.$t("dashboard.indicator.backtest.panel.risk")}},[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.stopLossPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["stopLossPct",{initialValue:0}],expression:"['stopLossPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.01,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.takeProfitPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["takeProfitPct",{initialValue:0}],expression:"['takeProfitPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trailingEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailingEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['trailingEnabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:t.onTrailingToggle}})],1)],1),e("a-col",{attrs:{span:12}})],1),t.trailingEnabledUi?[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trailingStopPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailingStopPct",{initialValue:0}],expression:"['trailingStopPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.01,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trailingActivationPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailingActivationPct",{initialValue:0}],expression:"['trailingActivationPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1)]:t._e()],2),e("a-collapse-panel",{key:"scale",attrs:{header:t.$t("dashboard.indicator.backtest.panel.scale")}},[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendAddEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendAddEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['trendAddEnabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:t.onTrendAddToggle}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.dcaAddEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["dcaAddEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['dcaAddEnabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:t.onDcaAddToggle}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendAddStepPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendAddStepPct",{initialValue:0}],expression:"['trendAddStepPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4},on:{change:t.onScaleParamsChange}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.dcaAddStepPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dcaAddStepPct",{initialValue:0}],expression:"['dcaAddStepPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4},on:{change:t.onScaleParamsChange}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendAddSizePct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendAddSizePct",{initialValue:0}],expression:"['trendAddSizePct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4},on:{change:t.onScaleParamsChange}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.dcaAddSizePct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dcaAddSizePct",{initialValue:0}],expression:"['dcaAddSizePct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4},on:{change:t.onScaleParamsChange}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendAddMaxTimes")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendAddMaxTimes",{initialValue:0}],expression:"['trendAddMaxTimes', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:50,step:1,precision:0},on:{change:t.onScaleParamsChange}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.dcaAddMaxTimes")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dcaAddMaxTimes",{initialValue:0}],expression:"['dcaAddMaxTimes', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:50,step:1,precision:0},on:{change:t.onScaleParamsChange}})],1)],1)],1)],1),e("a-collapse-panel",{key:"reduce",attrs:{header:t.$t("dashboard.indicator.backtest.panel.reduce")}},[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendReduceEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendReduceEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['trendReduceEnabled', { valuePropName: 'checked', initialValue: false }]"}]})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.adverseReduceEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverseReduceEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['adverseReduceEnabled', { valuePropName: 'checked', initialValue: false }]"}]})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendReduceStepPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendReduceStepPct",{initialValue:0}],expression:"['trendReduceStepPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.adverseReduceStepPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverseReduceStepPct",{initialValue:0}],expression:"['adverseReduceStepPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendReduceSizePct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendReduceSizePct",{initialValue:0}],expression:"['trendReduceSizePct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.adverseReduceSizePct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverseReduceSizePct",{initialValue:0}],expression:"['adverseReduceSizePct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendReduceMaxTimes")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendReduceMaxTimes",{initialValue:0}],expression:"['trendReduceMaxTimes', { initialValue: 0 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:50,step:1,precision:0}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.adverseReduceMaxTimes")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverseReduceMaxTimes",{initialValue:0}],expression:"['adverseReduceMaxTimes', { initialValue: 0 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:50,step:1,precision:0}})],1)],1)],1)],1),e("a-collapse-panel",{key:"position",attrs:{header:t.$t("dashboard.indicator.backtest.panel.position")}},[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.entryPct"),help:t.$t("dashboard.indicator.backtest.hint.entryPctMax",{maxPct:Number(t.entryPctMaxUi||0).toFixed(0)})}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["entryPct",{initialValue:100}],expression:"['entryPct', { initialValue: 100 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:t.entryPctMaxUi,step:.1,precision:4},on:{change:t.onEntryPctChange}})],1)],1),e("a-col",{attrs:{span:12}})],1)],1)],1)],1),e("div",{directives:[{name:"show",rawName:"v-show",value:1===t.currentStep,expression:"currentStep === 1"}]},[e("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:t.combinedAlertType,"show-icon":""}},[e("template",{slot:"message"},[e("div",{staticStyle:{display:"flex","align-items":"center","flex-wrap":"wrap",gap:"8px"}},[e("span",[e("strong",[t._v("Symbol:")]),t._v(" "+t._s(t.symbol||"-")+" "),e("span",{staticStyle:{color:"#999",margin:"0 6px"}},[t._v("|")]),e("strong",[t._v("Market:")]),t._v(" "+t._s(t.market||"-")+" "),e("span",{staticStyle:{color:"#999",margin:"0 6px"}},[t._v("|")]),e("strong",[t._v("Timeframe:")]),t._v(" "+t._s(t.selectedTimeframe||t.timeframe||"-")+" ")]),t.precisionInfo&&t.precisionInfo.enabled?e("span",{staticStyle:{"margin-left":"12px","border-left":"1px solid #d9d9d9","padding-left":"12px"}},[e("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"high"===t.precisionInfo.precision?"thunderbolt":"clock-circle"}}),t._v(" "+t._s(t.$t("dashboard.indicator.backtest.precisionMode"))+": "),e("a-tag",{staticStyle:{"margin-left":"4px"},attrs:{color:"high"===t.precisionInfo.precision?"green":"blue",size:"small"}},[t._v(" "+t._s(t.precisionInfo.timeframe)+" ")]),e("span",{staticStyle:{color:"#666","margin-left":"6px"}},[t._v(" ("+t._s(t.$t("dashboard.indicator.backtest.estimatedCandles",{count:t.precisionInfo.estimated_candles?t.precisionInfo.estimated_candles.toLocaleString():"-"}))+") ")])],1):t.precisionInfo&&!t.precisionInfo.enabled&&t.market&&"crypto"===t.market.toLowerCase()?e("span",{staticStyle:{"margin-left":"12px","border-left":"1px solid #d9d9d9","padding-left":"12px",color:"#faad14"}},[e("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"warning"}}),t._v(" "+t._s(t.$t("dashboard.indicator.backtest.standardModeWarning"))+" ")],1):t._e()])]),e("template",{slot:"description"},[t.precisionInfo&&t.precisionInfo.enabled?e("span",{staticStyle:{"font-size":"12px",color:"#888"}},[t._v(" "+t._s("high"===t.precisionInfo.precision?t.$t("dashboard.indicator.backtest.highPrecisionDesc"):t.$t("dashboard.indicator.backtest.mediumPrecisionDesc"))+" ")]):t.precisionInfo&&!t.precisionInfo.enabled&&t.market&&"crypto"===t.market.toLowerCase()?e("span",{staticStyle:{"font-size":"12px",color:"#888"}},[t._v(" "+t._s(t.precisionInfo.message||t.$t("dashboard.indicator.backtest.standardModeDesc"))+" ")]):t._e()])],2),e("div",{staticClass:"date-quick-select",staticStyle:{"margin-bottom":"12px"}},[e("span",{staticStyle:{"margin-right":"8px",color:"#666","font-size":"13px"}},[t._v(t._s(t.$t("dashboard.indicator.backtest.quickSelect")||"快速选择")+":")]),e("a-button-group",{attrs:{size:"small"}},t._l(t.datePresets,function(i){return e("a-button",{key:i.key,attrs:{type:t.selectedDatePreset===i.key?"primary":"default"},on:{click:function(e){return t.applyDatePreset(i)}}},[t._v(t._s(i.label))])}),1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.startDate")}},[e("a-date-picker",{directives:[{name:"decorator",rawName:"v-decorator",value:["startDate",{rules:[{required:!0,message:t.$t("dashboard.indicator.backtest.startDateRequired")}],initialValue:t.defaultStartDate}],expression:"['startDate', { rules: [{ required: true, message: $t('dashboard.indicator.backtest.startDateRequired') }], initialValue: defaultStartDate }]"}],staticStyle:{width:"100%"},attrs:{"disabled-date":t.disabledStartDate,placeholder:t.$t("dashboard.indicator.backtest.selectStartDate")},on:{change:t.onDateChange}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.endDate")}},[e("a-date-picker",{directives:[{name:"decorator",rawName:"v-decorator",value:["endDate",{rules:[{required:!0,message:t.$t("dashboard.indicator.backtest.endDateRequired")}],initialValue:t.defaultEndDate}],expression:"['endDate', { rules: [{ required: true, message: $t('dashboard.indicator.backtest.endDateRequired') }], initialValue: defaultEndDate }]"}],staticStyle:{width:"100%"},attrs:{"disabled-date":t.disabledEndDate,placeholder:t.$t("dashboard.indicator.backtest.selectEndDate")},on:{change:t.onDateChange}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.initialCapital")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["initialCapital",{rules:[{required:!0,message:t.$t("dashboard.indicator.backtest.initialCapitalRequired")}],initialValue:1e4}],expression:"['initialCapital', { rules: [{ required: true, message: $t('dashboard.indicator.backtest.initialCapitalRequired') }], initialValue: 10000 }]"}],staticStyle:{width:"100%"},attrs:{min:1e3,step:1e4,precision:2,formatter:function(t){return"$ ".concat(t).replace(/\B(?=(\d{3})+(?!\d))/g,",")},parser:function(t){return t.replace(/\$\s?|(,*)/g,"")}}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.commission")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["commission",{initialValue:.02}],expression:"['commission', { initialValue: 0.02 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:10,step:.01,precision:4}}),e("div",{staticClass:"field-hint"},[t._v(t._s(t.$t("dashboard.indicator.backtest.commissionHint")))])],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.slippage")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["slippage",{initialValue:0}],expression:"['slippage', { initialValue: 0 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:10,step:.01,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.leverage")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["leverage",{initialValue:1}],expression:"['leverage', { initialValue: 1 }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:125,step:1,precision:0,formatter:function(t){return"".concat(t,"x")},parser:function(t){return t.replace("x","")}}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.tradeDirection")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["tradeDirection",{initialValue:"long"}],expression:"['tradeDirection', { initialValue: 'long' }]"}],staticStyle:{width:"100%"}},[e("a-select-option",{attrs:{value:"long"}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.longOnly"))+" ")]),e("a-select-option",{attrs:{value:"short"}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.shortOnly"))+" ")]),e("a-select-option",{attrs:{value:"both"}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.both"))+" ")])],1)],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.timeframe")}},[e("a-select",{staticStyle:{width:"100%"},on:{change:t.onTimeframeChange},model:{value:t.selectedTimeframe,callback:function(e){t.selectedTimeframe=e},expression:"selectedTimeframe"}},[e("a-select-option",{attrs:{value:"1m"}},[t._v("1m")]),e("a-select-option",{attrs:{value:"5m"}},[t._v("5m")]),e("a-select-option",{attrs:{value:"15m"}},[t._v("15m")]),e("a-select-option",{attrs:{value:"30m"}},[t._v("30m")]),e("a-select-option",{attrs:{value:"1H"}},[t._v("1H")]),e("a-select-option",{attrs:{value:"4H"}},[t._v("4H")]),e("a-select-option",{attrs:{value:"1D"}},[t._v("1D")]),e("a-select-option",{attrs:{value:"1W"}},[t._v("1W")])],1)],1)],1)],1)],1)])],1),e("div",{directives:[{name:"show",rawName:"v-show",value:2===t.currentStep&&t.hasResult,expression:"currentStep === 2 && hasResult"}],staticClass:"result-section"},[t.backtestRunId?e("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"success","show-icon":"",message:t.$t("dashboard.indicator.backtest.savedRunId",{id:t.backtestRunId})}}):t._e(),e("div",{staticClass:"metrics-cards"},[e("div",{staticClass:"metric-card",class:{positive:t.result.totalReturn>0,negative:t.result.totalReturn<0}},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.totalReturn")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.result.totalReturn)))]),e("div",{staticClass:"metric-amount"},[t._v(t._s(t.formatMoney(t.result.totalProfit)))])]),e("div",{staticClass:"metric-card",class:{positive:t.result.annualReturn>0,negative:t.result.annualReturn<0}},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.annualReturn")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.result.annualReturn)))])]),e("div",{staticClass:"metric-card negative"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.maxDrawdown")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.result.maxDrawdown)))])]),e("div",{staticClass:"metric-card"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.sharpeRatio")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.result.sharpeRatio.toFixed(2)))])]),e("div",{staticClass:"metric-card"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.winRate")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.result.winRate)))])]),e("div",{staticClass:"metric-card",class:{positive:t.result.profitFactor>=1.5,negative:t.result.profitFactor<1}},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.profitFactor")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.result.profitFactor.toFixed(2)))])]),e("div",{staticClass:"metric-card"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.totalTrades")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.result.totalTrades))])]),e("div",{staticClass:"metric-card negative"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.totalCommission")))]),e("div",{staticClass:"metric-value"},[t._v("-$"+t._s(t.result.totalCommission?t.result.totalCommission.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"))])])]),e("div",{staticClass:"chart-section"},[e("div",{staticClass:"chart-title"},[t._v(t._s(t.$t("dashboard.indicator.backtest.equityCurve")))]),e("div",{ref:"equityChartRef",staticClass:"equity-chart"})]),e("div",{staticClass:"trades-section"},[e("div",{staticClass:"chart-title"},[t._v(t._s(t.$t("dashboard.indicator.backtest.tradeHistory")))]),e("a-table",{attrs:{columns:t.tradeColumns,"data-source":t.result.trades,pagination:{pageSize:5,size:"small"},size:"small",scroll:{x:600}},scopedSlots:t._u([{key:"type",fn:function(i){return[e("a-tag",{attrs:{color:t.getTradeTypeColor(i)}},[t._v(" "+t._s(t.getTradeTypeText(i))+" ")])]}},{key:"balance",fn:function(i){return[e("span",{staticStyle:{color:"#1890ff","font-weight":"500"}},[t._v(" $"+t._s(i?i.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"--")+" ")])]}},{key:"profit",fn:function(i){return[e("span",{style:{color:i>0?"#52c41a":i<0?"#f5222d":"#666"}},[t._v(" "+t._s(t.formatMoney(i))+" ")])]}}])})],1)],1),t.loading?e("div",{staticClass:"loading-overlay"},[e("div",{staticClass:"loading-content"},[e("div",{staticClass:"loading-animation"},[e("div",{staticClass:"chart-bars"},[e("div",{staticClass:"bar bar1"}),e("div",{staticClass:"bar bar2"}),e("div",{staticClass:"bar bar3"}),e("div",{staticClass:"bar bar4"}),e("div",{staticClass:"bar bar5"})])]),e("div",{staticClass:"loading-text"},[t._v(t._s(t.$t("dashboard.indicator.backtest.running")))]),e("div",{staticClass:"loading-subtext"},[t._v(t._s(t.loadingTip))])])]):t._e()],1),e("template",{slot:"footer"},[e("div",{staticStyle:{display:"flex","justify-content":"space-between","align-items":"center",width:"100%"}},[e("div",[t.currentStep>0?e("a-button",{attrs:{disabled:t.loading},on:{click:t.handlePrev}},[t._v(t._s(t.$t("dashboard.indicator.backtest.prev")))]):t._e()],1),e("div",[e("a-button",{attrs:{disabled:t.loading},on:{click:t.handleCancel}},[t._v(t._s(t.$t("dashboard.indicator.backtest.close")))]),t.currentStep<1?e("a-button",{staticStyle:{"margin-left":"8px"},attrs:{type:"primary",disabled:t.loading},on:{click:t.handleNext}},[t._v(t._s(t.$t("dashboard.indicator.backtest.next")))]):1===t.currentStep?e("a-button",{staticStyle:{"margin-left":"8px"},attrs:{type:"primary",loading:t.loading},on:{click:t.handleRunBacktest}},[t._v(t._s(t.$t("dashboard.indicator.backtest.run")))]):e("a-button",{staticStyle:{"margin-left":"8px"},attrs:{type:"primary",disabled:t.loading},on:{click:t.handleRerun}},[t._v(t._s(t.$t("dashboard.indicator.backtest.rerun")))])],1)])])],2)},Wr=[],Vr=i(95093),$r=i.n(Vr),Hr=i(15014),Kr={name:"BacktestModal",props:{visible:{type:Boolean,default:!1},userId:{type:[Number,String],default:1},indicator:{type:Object,default:null},symbol:{type:String,default:""},market:{type:String,default:""},timeframe:{type:String,default:"1D"}},data:function(){return{form:this.$form.createForm(this),loading:!1,loadingTip:"",loadingTimer:null,currentStep:0,hasResult:!1,backtestRunId:null,step1CollapseKeys:["risk"],trailingEnabledUi:!1,entryPctMaxUi:100,precisionInfo:null,selectedDatePreset:null,selectedTimeframe:"1D",result:{totalReturn:0,annualReturn:0,maxDrawdown:0,sharpeRatio:0,winRate:0,profitFactor:0,totalTrades:0,totalProfit:0,totalCommission:0,trades:[],equityCurve:[]},equityChart:null,tradeColumns:[]}},computed:{maxBacktestRange:function(){var t=this.selectedTimeframe||this.timeframe||"1D";return"1m"===t?{days:30,label:"1个月"}:"5m"===t?{days:180,label:"6个月"}:["15m","30m"].includes(t)?{days:365,label:"1年"}:{days:1095,label:"3年"}},recommendedRange:function(){return{days:30,label:"30天",key:"30d"}},combinedAlertType:function(){return this.precisionInfo&&this.precisionInfo.enabled?"high"===this.precisionInfo.precision?"success":"info":this.precisionInfo&&!this.precisionInfo.enabled&&this.market&&"crypto"===this.market.toLowerCase()?"warning":"info"},datePresets:function(){var t=[],e=this.selectedTimeframe||this.timeframe||"1D";return"1m"===e?(t.push({key:"7d",days:7,label:"7D"}),t.push({key:"14d",days:14,label:"14D"}),t.push({key:"30d",days:30,label:"30D"})):"5m"===e?(t.push({key:"14d",days:14,label:"14D"}),t.push({key:"30d",days:30,label:"30D"}),t.push({key:"90d",days:90,label:"3M"}),t.push({key:"180d",days:180,label:"6M"})):(["15m","30m"].includes(e),t.push({key:"30d",days:30,label:"30D"}),t.push({key:"90d",days:90,label:"3M"}),t.push({key:"180d",days:180,label:"6M"}),t.push({key:"365d",days:365,label:"1Y"})),t},defaultStartDate:function(){return $r()().subtract(this.recommendedRange.days,"days")},defaultEndDate:function(){return $r()()},earliestDate:function(){return $r()().subtract(this.maxBacktestRange.days,"days")},labelCol:function(){return 0===this.currentStep?{span:9}:{span:6}},wrapperCol:function(){return 0===this.currentStep?{span:15}:{span:18}}},watch:{visible:function(t){var e=this;t?(this.currentStep=0,this.hasResult=!1,this.backtestRunId=null,this.step1CollapseKeys=["risk"],this.trailingEnabledUi=!1,this.entryPctMaxUi=100,this.precisionInfo=null,this.selectedDatePreset=null,this.selectedTimeframe=this.timeframe||"1D",this.result={totalReturn:0,annualReturn:0,maxDrawdown:0,sharpeRatio:0,winRate:0,profitFactor:0,totalTrades:0,totalProfit:0,totalCommission:0,trades:[],equityCurve:[]},this.$nextTick(function(){e.form&&(e.form.resetFields(),e.trailingEnabledUi=!!e.form.getFieldValue("trailingEnabled"),e.recalcEntryPctMaxUi(),e.selectedDatePreset="30d",e.fetchPrecisionInfo())})):this.equityChart&&(this.equityChart.dispose(),this.equityChart=null)}},created:function(){this.tradeColumns=[{title:this.$t("dashboard.indicator.backtest.tradeTime"),dataIndex:"time",key:"time",width:160},{title:this.$t("dashboard.indicator.backtest.tradeType"),dataIndex:"type",key:"type",width:120,scopedSlots:{customRender:"type"}},{title:this.$t("dashboard.indicator.backtest.price"),dataIndex:"price",key:"price",width:110},{title:this.$t("dashboard.indicator.backtest.amount"),dataIndex:"amount",key:"amount",width:100,customRender:function(t){return t?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:4}):"--"}},{title:this.$t("dashboard.indicator.backtest.profit"),dataIndex:"profit",key:"profit",width:110,scopedSlots:{customRender:"profit"}},{title:this.$t("dashboard.indicator.backtest.balance"),dataIndex:"balance",key:"balance",width:130,scopedSlots:{customRender:"balance"}}]},methods:{recalcEntryPctMaxUi:function(){if(this.form){var t=!!this.form.getFieldValue("trendAddEnabled"),e=!!this.form.getFieldValue("dcaAddEnabled"),i=Number(this.form.getFieldValue("trendAddMaxTimes")||0),n=Number(this.form.getFieldValue("dcaAddMaxTimes")||0),r=Number(this.form.getFieldValue("trendAddSizePct")||0),a=Number(this.form.getFieldValue("dcaAddSizePct")||0),o=(t?i*r:0)+(e?n*a:0),s=Math.max(0,Math.min(100,100-o));this.entryPctMaxUi=s}else this.entryPctMaxUi=100},normalizeEntryPct:function(){if(this.form){var t=Number(this.form.getFieldValue("entryPct")||0),e=Number(this.entryPctMaxUi||100);t>e&&this.form.setFieldsValue({entryPct:e})}},onTrendAddToggle:function(t){var e=this;this.form&&(t&&this.form.setFieldsValue({dcaAddEnabled:!1}),this.$nextTick(function(){e.recalcEntryPctMaxUi(),e.normalizeEntryPct()}))},onDcaAddToggle:function(t){var e=this;this.form&&(t&&this.form.setFieldsValue({trendAddEnabled:!1}),this.$nextTick(function(){e.recalcEntryPctMaxUi(),e.normalizeEntryPct()}))},onScaleParamsChange:function(){var t=this;this.$nextTick(function(){t.recalcEntryPctMaxUi(),t.normalizeEntryPct()})},onEntryPctChange:function(){var t=this;this.$nextTick(function(){return t.normalizeEntryPct()})},onTrailingToggle:function(t){this.form&&(this.trailingEnabledUi=!!t,t||this.form.setFieldsValue({trailingStopPct:0,trailingActivationPct:0}))},getTradeTypeColor:function(t){var e={buy:"green",sell:"red",liquidation:"orange",open_long:"green",add_long:"cyan",close_long:"orange",close_long_stop:"red",close_long_profit:"lime",close_long_trailing:"gold",reduce_long:"volcano",open_short:"red",add_short:"magenta",close_short:"blue",close_short_stop:"red",close_short_profit:"cyan",close_short_trailing:"gold",reduce_short:"volcano"};return e[t]||"default"},getTradeTypeText:function(t){var e={buy:this.$t("dashboard.indicator.backtest.buy"),sell:this.$t("dashboard.indicator.backtest.sell"),liquidation:this.$t("dashboard.indicator.backtest.liquidation"),open_long:this.$t("dashboard.indicator.backtest.openLong"),add_long:this.$t("dashboard.indicator.backtest.addLong"),close_long:this.$t("dashboard.indicator.backtest.closeLong"),close_long_stop:this.$t("dashboard.indicator.backtest.closeLongStop"),close_long_profit:this.$t("dashboard.indicator.backtest.closeLongProfit"),close_long_trailing:this.$t("dashboard.indicator.backtest.closeLongTrailing"),reduce_long:this.$t("dashboard.indicator.backtest.reduceLong"),open_short:this.$t("dashboard.indicator.backtest.openShort"),add_short:this.$t("dashboard.indicator.backtest.addShort"),close_short:this.$t("dashboard.indicator.backtest.closeShort"),close_short_stop:this.$t("dashboard.indicator.backtest.closeShortStop"),close_short_profit:this.$t("dashboard.indicator.backtest.closeShortProfit"),close_short_trailing:this.$t("dashboard.indicator.backtest.closeShortTrailing"),reduce_short:this.$t("dashboard.indicator.backtest.reduceShort")};return e[t]||t},disabledStartDate:function(t){return!!t&&(t>$r()().endOf("day")||t$r()().endOf("day"))return!0;if(tn.endOf("day"))return!0}return!1},applyDatePreset:function(t){this.selectedDatePreset=t.key;var e=$r()(),i=$r()().subtract(t.days,"days");this.form.setFieldsValue({startDate:i,endDate:e}),this.fetchPrecisionInfo(i,e)},fetchPrecisionInfo:function(t,e){var i=this;return(0,c.A)((0,l.A)().m(function n(){var r;return(0,l.A)().w(function(n){while(1)switch(n.p=n.n){case 0:if(t&&e||(t=i.form?i.form.getFieldValue("startDate"):null,e=i.form?i.form.getFieldValue("endDate"):null),t||(t=i.defaultStartDate),e||(e=i.defaultEndDate),i.market&&"crypto"===i.market.toLowerCase()){n.n=1;break}return i.precisionInfo={enabled:!1,reason:"only_crypto",message:i.$t("dashboard.indicator.backtest.onlyCryptoSupported")},n.a(2);case 1:return n.p=1,n.n=2,(0,f.Ay)({url:"/api/indicator/backtest/precision-info",method:"get",params:{market:i.market,startDate:t.format("YYYY-MM-DD"),endDate:e.format("YYYY-MM-DD")},timeout:3e4});case 2:r=n.v,1===r.code&&r.data&&(i.precisionInfo=r.data),n.n=4;break;case 3:n.p=3,n.v,i.precisionInfo=null;case 4:return n.a(2)}},n,null,[[1,3]])}))()},onTimeframeChange:function(){this.selectedDatePreset="30d";var t=$r()(),e=$r()().subtract(30,"days");this.form.setFieldsValue({startDate:e,endDate:t}),this.fetchPrecisionInfo(e,t)},onDateChange:function(){var t=this;this.selectedDatePreset=null,this.$nextTick(function(){t.fetchPrecisionInfo()})},validateDateRange:function(t,e){if(!t||!e)return!0;var i=e.diff(t,"days"),n=this.maxBacktestRange.days||365;return!(i>n)||(this.$message.error(this.$t("dashboard.indicator.backtest.dateRangeExceededDays",{timeframe:this.selectedTimeframe||this.timeframe,maxRange:this.maxBacktestRange.label,maxDays:n})),!1)},formatPercent:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"";return"".concat(e).concat(t.toFixed(2),"%")},formatMoney:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"-";return"".concat(e,"$").concat(Math.abs(t).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}))},handleCancel:function(){this.$emit("cancel")},handlePrev:function(){this.loading||this.currentStep>0&&(this.currentStep-=1)},handleNext:function(){this.loading||(0!==this.currentStep?1===this.currentStep&&this.handleRunBacktest():this.currentStep=1)},handleRerun:function(){this.loading||(this.currentStep=1,this.hasResult=!1,this.backtestRunId=null)},startLoadingAnimation:function(){var t=this,e=[this.$t("dashboard.indicator.backtest.loadingTip1")||"正在获取历史K线数据...",this.$t("dashboard.indicator.backtest.loadingTip2")||"正在执行策略信号计算...",this.$t("dashboard.indicator.backtest.loadingTip3")||"正在模拟交易执行...",this.$t("dashboard.indicator.backtest.loadingTip4")||"正在计算回测指标...",this.$t("dashboard.indicator.backtest.loadingTip5")||"即将完成,请稍候..."],i=0;this.loadingTip=e[0],this.loadingTimer=setInterval(function(){i=(i+1)%e.length,t.loadingTip=e[i]},2e3)},stopLoadingAnimation:function(){this.loadingTimer&&(clearInterval(this.loadingTimer),this.loadingTimer=null),this.loadingTip=""},handleRunBacktest:function(){var t=this;return(0,c.A)((0,l.A)().m(function e(){var i;return(0,l.A)().w(function(e){while(1)switch(e.n){case 0:i=["startDate","endDate","initialCapital","commission","leverage","tradeDirection","slippage"],t.form.validateFields(i,function(){var e=(0,c.A)((0,l.A)().m(function e(i,n){var r,a,o,s,c,u,h,p,v;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!i){e.n=1;break}return e.a(2);case 1:if(r=(0,d.A)((0,d.A)({},t.form.getFieldsValue()||{}),n||{}),a=Date.now(),t.indicator&&t.indicator.id){e.n=2;break}return t.$message.error(t.$t("dashboard.indicator.backtest.noIndicatorCode")),e.a(2);case 2:if(t.symbol){e.n=3;break}return t.$message.error(t.$t("dashboard.indicator.backtest.noSymbol")),e.a(2);case 3:if(t.validateDateRange(n.startDate,n.endDate)){e.n=4;break}return e.a(2);case 4:return t.loading=!0,t.hasResult=!1,t.startLoadingAnimation(),e.p=5,o=function(t){return Number(t||0)/100},s={risk:{stopLossPct:o(r.stopLossPct),takeProfitPct:o(r.takeProfitPct),trailing:{enabled:!!r.trailingEnabled,pct:o(r.trailingStopPct),activationPct:o(r.trailingActivationPct)}},position:{entryPct:o(r.entryPct||0)},scale:{trendAdd:{enabled:!!r.trendAddEnabled,stepPct:o(r.trendAddStepPct),sizePct:o(r.trendAddSizePct),maxTimes:r.trendAddMaxTimes||0},dcaAdd:{enabled:!!r.dcaAddEnabled,stepPct:o(r.dcaAddStepPct),sizePct:o(r.dcaAddSizePct),maxTimes:r.dcaAddMaxTimes||0},trendReduce:{enabled:!!r.trendReduceEnabled,stepPct:o(r.trendReduceStepPct),sizePct:o(r.trendReduceSizePct),maxTimes:r.trendReduceMaxTimes||0},adverseReduce:{enabled:!!r.adverseReduceEnabled,stepPct:o(r.adverseReduceStepPct),sizePct:o(r.adverseReduceSizePct),maxTimes:r.adverseReduceMaxTimes||0}}},c={userid:t.userId||1,indicatorId:t.indicator.id,symbol:t.symbol,market:t.market,timeframe:t.selectedTimeframe||t.timeframe,startDate:n.startDate.format("YYYY-MM-DD"),endDate:n.endDate.format("YYYY-MM-DD"),initialCapital:n.initialCapital,commission:o(n.commission||0),slippage:o(n.slippage||0),leverage:n.leverage||1,tradeDirection:n.tradeDirection||"long",strategyConfig:s,enableMtf:t.market&&"crypto"===t.market.toLowerCase()},e.n=6,(0,f.Ay)({url:"/api/indicator/backtest",method:"post",data:c,timeout:6e5});case 6:u=e.v,((Date.now()-a)/1e3).toFixed(1),1===u.code&&u.data?(u.data.runId&&(t.backtestRunId=u.data.runId),t.result=u.data.result||u.data,t.hasResult=!0,t.currentStep=2,t.$nextTick(function(){t.renderEquityChart()}),t.$message.success(t.$t("dashboard.indicator.backtest.success"))):t.$message.error(u.msg||t.$t("dashboard.indicator.backtest.failed")),e.n=8;break;case 7:e.p=7,v=e.v,h=t.$t("dashboard.indicator.backtest.failed"),"ECONNABORTED"===v.code||v.message&&v.message.includes("timeout")?h="回测超时,请减少回测时间范围或使用更大的时间周期":v.response?h=(null===(p=v.response.data)||void 0===p?void 0:p.msg)||v.response.statusText||h:v.message&&(h=v.message),t.$message.error(h);case 8:return e.p=8,t.stopLoadingAnimation(),t.loading=!1,e.f(8);case 9:return e.a(2)}},e,null,[[5,7,8,9]])}));return function(t,i){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},renderEquityChart:function(){var t=this;if(this.$refs.equityChartRef){this.equityChart&&this.equityChart.dispose(),this.equityChart=Hr.Ts(this.$refs.equityChartRef);var e=this.result.equityCurve||[],i=e.map(function(t){return t.time||t.date}),n=e.map(function(t){return void 0!==t.value?t.value:t.equity}),r=n[0]||1e5,a=n[n.length-1]||r,o=a>=r,s=o?"#52c41a":"#f5222d",l=o?[{offset:0,color:"rgba(82, 196, 26, 0.35)"},{offset:1,color:"rgba(82, 196, 26, 0.02)"}]:[{offset:0,color:"rgba(245, 34, 45, 0.35)"},{offset:1,color:"rgba(245, 34, 45, 0.02)"}],c={tooltip:{trigger:"axis",backgroundColor:"rgba(255, 255, 255, 0.96)",borderColor:"#e8e8e8",borderWidth:1,textStyle:{color:"#333"},formatter:function(t){var e='
'.concat(t[0].axisValue,"
");return t.forEach(function(t){if(void 0!==t.value&&null!==t.value){var i=t.value.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2});e+='
\n '.concat(t.marker," ").concat(t.seriesName,'\n $').concat(i,"\n
")}}),e}},legend:{show:!1},grid:{left:"3%",right:"4%",bottom:"12%",top:"8%",containLabel:!0},xAxis:{type:"category",data:i,boundaryGap:!1,axisLine:{lineStyle:{color:"#e8e8e8"}},axisTick:{show:!1},axisLabel:{color:"#8c8c8c",fontSize:11,rotate:0,interval:Math.floor(i.length/6)}},yAxis:{type:"value",splitLine:{lineStyle:{color:"#f5f5f5",type:"dashed"}},axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:"#8c8c8c",fontSize:11,formatter:function(t){return t>=1e6?(t/1e6).toFixed(1)+"M":t>=1e3?(t/1e3).toFixed(0)+"K":t}}},series:[{name:this.$t("dashboard.indicator.backtest.strategy"),type:"line",data:n,smooth:.4,symbol:"none",sampling:"lttb",lineStyle:{width:2.5,color:s,cap:"round",join:"round"},areaStyle:{color:new Hr.fA.W4(0,0,0,1,l)},emphasis:{lineStyle:{width:3}}}],animation:!0,animationDuration:800,animationEasing:"cubicOut"};this.equityChart.setOption(c),window.addEventListener("resize",function(){t.equityChart&&t.equityChart.resize()})}}},beforeDestroy:function(){this.equityChart&&(this.equityChart.dispose(),this.equityChart=null)}},Yr=Kr,Xr=(0,T.A)(Yr,zr,Wr,!1,null,"473e449c",null),Ur=Xr.exports,Gr=function(){var t=this,e=t._self._c;return e("a-drawer",{attrs:{title:t.$t("dashboard.indicator.backtest.historyTitle"),visible:t.visible,width:t.isMobile?"100%":980,maskClosable:!0},on:{close:function(e){return t.$emit("cancel")}}},[e("div",{staticStyle:{display:"flex",gap:"12px","margin-bottom":"12px","align-items":"center","flex-wrap":"wrap"}},[e("a-switch",{model:{value:t.useCurrentFilters,callback:function(e){t.useCurrentFilters=e},expression:"useCurrentFilters"}}),e("span",{staticStyle:{color:"#8c8c8c"}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.historyUseCurrent"))+" ")]),e("a-button",{attrs:{type:"primary",loading:t.loading},on:{click:t.loadRuns}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.historyRefresh"))+" ")]),e("a-button",{attrs:{type:"primary",disabled:0===t.selectedRowKeys.length,loading:t.analyzing},on:{click:t.handleAIAnalyze}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.historyAIAnalyze"))+" ")])],1),t.useCurrentFilters?t._e():e("div",{staticStyle:{display:"flex",gap:"12px","margin-bottom":"12px","align-items":"center","flex-wrap":"wrap"}},[e("a-input",{staticStyle:{width:"220px"},attrs:{placeholder:t.$t("dashboard.indicator.backtest.historyFilterSymbol")},model:{value:t.filterSymbol,callback:function(e){t.filterSymbol=e},expression:"filterSymbol"}}),e("a-select",{staticStyle:{width:"140px"},attrs:{placeholder:t.$t("dashboard.indicator.backtest.historyFilterTimeframe"),allowClear:""},model:{value:t.filterTimeframe,callback:function(e){t.filterTimeframe=e},expression:"filterTimeframe"}},t._l(t.timeframes,function(i){return e("a-select-option",{key:i,attrs:{value:i}},[t._v(t._s(i))])}),1),e("a-button",{attrs:{loading:t.loading},on:{click:t.loadRuns}},[t._v(t._s(t.$t("dashboard.indicator.backtest.historyApply")))]),e("span",{staticStyle:{color:"#8c8c8c"}},[t._v(t._s(t.filterLabel))])],1),e("a-table",{attrs:{columns:t.columns,"data-source":t.runs,loading:t.loading,size:"small",pagination:{pageSize:10,size:"small"},rowKey:"id",scroll:{x:900},rowSelection:{selectedRowKeys:t.selectedRowKeys,onChange:t.onRowSelectionChange}},scopedSlots:t._u([{key:"range",fn:function(i,n){return[e("span",[t._v(t._s(n.start_date||"")+" ~ "+t._s(n.end_date||""))])]}},{key:"status",fn:function(i){return[e("a-tag",{attrs:{color:"success"===i?"green":"failed"===i?"red":"blue"}},[t._v(" "+t._s("success"===i?t.$t("dashboard.indicator.backtest.historyStatusSuccess"):"failed"===i?t.$t("dashboard.indicator.backtest.historyStatusFailed"):i)+" ")])]}},{key:"actions",fn:function(i,n){return[e("a-button",{attrs:{type:"link",size:"small",loading:t.detailLoadingId===n.id},on:{click:function(e){return t.viewRun(n)}}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.historyView"))+" ")])]}}])}),t.loading||0!==t.runs.length?t._e():e("a-empty",{attrs:{description:t.$t("dashboard.indicator.backtest.historyNoData")}}),e("a-modal",{attrs:{title:t.$t("dashboard.indicator.backtest.historyAIAnalyzeTitle"),visible:t.showAIResult,footer:null,width:t.isMobile?"100%":900},on:{cancel:function(e){t.showAIResult=!1}}},[t.analyzing?e("div",{staticStyle:{padding:"12px 0"}},[e("a-spin")],1):e("div",{staticStyle:{"white-space":"pre-wrap","font-family":"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace"}},[t._v(" "+t._s(t.aiResult||t.$t("dashboard.indicator.backtest.historyNoAIResult"))+" ")])])],1)},jr=[],qr={name:"BacktestHistoryDrawer",props:{visible:{type:Boolean,default:!1},userId:{type:[Number,String],default:1},indicatorId:{type:[Number,String],default:null},symbol:{type:String,default:""},market:{type:String,default:""},timeframe:{type:String,default:""},isMobile:{type:Boolean,default:!1}},data:function(){return{loading:!1,detailLoadingId:null,analyzing:!1,showAIResult:!1,aiResult:"",useCurrentFilters:!0,filterSymbol:"",filterTimeframe:"",timeframes:["1m","5m","15m","30m","1H","4H","1D","1W"],runs:[],columns:[],selectedRowKeys:[]}},computed:{filterLabel:function(){var t=[];this.indicatorId&&t.push("indicatorId=".concat(this.indicatorId));var e=this.useCurrentFilters?this.market:this.market||"",i=this.useCurrentFilters?this.symbol:this.filterSymbol||"",n=this.useCurrentFilters?this.timeframe:this.filterTimeframe||"";return e&&t.push("market=".concat(e)),i&&t.push("symbol=".concat(i)),n&&t.push("timeframe=".concat(n)),t.length?t.join(" | "):""}},watch:{visible:function(t){t&&(this.initColumns(),this.useCurrentFilters=!0,this.filterSymbol=this.symbol||"",this.filterTimeframe=this.timeframe||"",this.selectedRowKeys=[],this.aiResult="",this.showAIResult=!1,this.loadRuns())}},methods:{onRowSelectionChange:function(t){this.selectedRowKeys=t||[]},initColumns:function(){this.columns.length||(this.columns=[{title:this.$t("dashboard.indicator.backtest.historyRunId"),dataIndex:"id",key:"id",width:90},{title:this.$t("dashboard.indicator.backtest.historyCreatedAt"),dataIndex:"created_at",key:"created_at",width:140},{title:this.$t("dashboard.indicator.backtest.tradeDirection"),dataIndex:"trade_direction",key:"trade_direction",width:90},{title:this.$t("dashboard.indicator.backtest.leverage"),dataIndex:"leverage",key:"leverage",width:90},{title:this.$t("dashboard.indicator.backtest.historyRange"),key:"range",width:220,scopedSlots:{customRender:"range"}},{title:this.$t("dashboard.indicator.backtest.historyStatus"),dataIndex:"status",key:"status",width:90,scopedSlots:{customRender:"status"}},{title:this.$t("dashboard.indicator.backtest.historyActions"),key:"actions",width:90,scopedSlots:{customRender:"actions"}}])},loadRuns:function(){var t=this;return(0,c.A)((0,l.A)().m(function e(){var i,n,r,a;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.userId){e.n=1;break}return e.a(2);case 1:return t.loading=!0,e.p=2,i=t.useCurrentFilters?t.symbol:t.filterSymbol||"",n=t.useCurrentFilters?t.timeframe:t.filterTimeframe||"",r=t.market||"",e.n=3,(0,f.Ay)({url:"/api/indicator/backtest/history",method:"get",params:{userid:t.userId,limit:100,offset:0,indicatorId:t.indicatorId,symbol:i,market:r,timeframe:n}});case 3:a=e.v,a&&1===a.code&&Array.isArray(a.data)?t.runs=a.data:t.runs=[];case 4:return e.p=4,t.loading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[2,,4,5]])}))()},viewRun:function(t){var e=this;return(0,c.A)((0,l.A)().m(function i(){var n;return(0,l.A)().w(function(i){while(1)switch(i.p=i.n){case 0:if(t&&t.id){i.n=1;break}return i.a(2);case 1:return e.detailLoadingId=t.id,i.p=2,i.n=3,(0,f.Ay)({url:"/api/indicator/backtest/get",method:"get",params:{userid:e.userId,runId:t.id}});case 3:n=i.v,n&&1===n.code&&n.data&&e.$emit("view",n.data);case 4:return i.p=4,e.detailLoadingId=null,i.f(4);case 5:return i.a(2)}},i,null,[[2,,4,5]])}))()},handleAIAnalyze:function(){var t=this;return(0,c.A)((0,l.A)().m(function e(){var i,n;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.userId&&t.selectedRowKeys.length){e.n=1;break}return e.a(2);case 1:return t.analyzing=!0,t.showAIResult=!0,t.aiResult="",e.p=2,i=t.$i18n&&t.$i18n.locale?t.$i18n.locale:"zh-CN",e.n=3,(0,f.Ay)({url:"/api/indicator/backtest/aiAnalyze",method:"post",data:{userid:t.userId,runIds:t.selectedRowKeys,lang:i}});case 3:n=e.v,n&&1===n.code&&n.data&&n.data.analysis?t.aiResult=n.data.analysis:t.aiResult=n.msg||t.$t("dashboard.indicator.backtest.historyNoAIResult");case 4:return e.p=4,t.analyzing=!1,e.f(4);case 5:return e.a(2)}},e,null,[[2,,4,5]])}))()}}},Zr=qr,Jr=(0,T.A)(Zr,Gr,jr,!1,null,null,null),Qr=Jr.exports,ta=function(){var t,e,i,n=this,r=n._self._c;return r("a-modal",{staticClass:"backtest-run-viewer",attrs:{title:n.modalTitle,visible:n.visible,width:1100,maskClosable:!1},on:{cancel:function(t){return n.$emit("cancel")}}},[n.run&&n.run.result?r("div",[n.run.id?r("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"info","show-icon":"",message:n.$t("dashboard.indicator.backtest.savedRunId",{id:n.run.id})}}):n._e(),r("div",{staticClass:"metrics-cards"},[r("div",{staticClass:"metric-card",class:{positive:n.result.totalReturn>0,negative:n.result.totalReturn<0}},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.totalReturn")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(n.formatPercent(n.result.totalReturn)))]),r("div",{staticClass:"metric-amount"},[n._v(n._s(n.formatMoney(n.result.totalProfit)))])]),r("div",{staticClass:"metric-card",class:{positive:n.result.annualReturn>0,negative:n.result.annualReturn<0}},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.annualReturn")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(n.formatPercent(n.result.annualReturn)))])]),r("div",{staticClass:"metric-card negative"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.maxDrawdown")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(n.formatPercent(n.result.maxDrawdown)))])]),r("div",{staticClass:"metric-card"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.sharpeRatio")))]),r("div",{staticClass:"metric-value"},[n._v(n._s((null!==(t=n.result.sharpeRatio)&&void 0!==t?t:0).toFixed(2)))])]),r("div",{staticClass:"metric-card"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.winRate")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(n.formatPercent(n.result.winRate)))])]),r("div",{staticClass:"metric-card",class:{positive:n.result.profitFactor>=1.5,negative:n.result.profitFactor<1}},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.profitFactor")))]),r("div",{staticClass:"metric-value"},[n._v(n._s((null!==(e=n.result.profitFactor)&&void 0!==e?e:0).toFixed(2)))])]),r("div",{staticClass:"metric-card"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.totalTrades")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(null!==(i=n.result.totalTrades)&&void 0!==i?i:0))])]),r("div",{staticClass:"metric-card negative"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.totalCommission")))]),r("div",{staticClass:"metric-value"},[n._v("-$"+n._s(n.result.totalCommission?n.result.totalCommission.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"))])])]),r("div",{staticClass:"chart-section"},[r("div",{staticClass:"chart-title"},[n._v(n._s(n.$t("dashboard.indicator.backtest.equityCurve")))]),r("div",{ref:"equityChartRef",staticClass:"equity-chart"})]),r("div",{staticClass:"trades-section"},[r("div",{staticClass:"chart-title"},[n._v(n._s(n.$t("dashboard.indicator.backtest.tradeHistory")))]),r("a-table",{attrs:{columns:n.tradeColumns,"data-source":n.result.trades||[],pagination:{pageSize:10,size:"small"},size:"small",scroll:{x:800},rowKey:n.rowKey},scopedSlots:n._u([{key:"type",fn:function(t){return[r("a-tag",{attrs:{color:n.getTradeTypeColor(t)}},[n._v(" "+n._s(n.getTradeTypeText(t))+" ")])]}},{key:"balance",fn:function(t){return[r("span",{staticStyle:{color:"#1890ff","font-weight":"500"}},[n._v(" $"+n._s(t?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"--")+" ")])]}},{key:"profit",fn:function(t){return[r("span",{style:{color:t>0?"#52c41a":t<0?"#f5222d":"#666"}},[n._v(" "+n._s(n.formatMoney(t))+" ")])]}}])})],1)],1):r("div",{staticStyle:{padding:"12px 0"}},[r("a-empty",{attrs:{description:n.$t("dashboard.indicator.backtest.historyNoData")}})],1),r("template",{slot:"footer"},[r("a-button",{on:{click:function(t){return n.$emit("cancel")}}},[n._v(n._s(n.$t("dashboard.indicator.backtest.close")))])],1)],2)},ea=[],ia={name:"BacktestRunViewer",props:{visible:{type:Boolean,default:!1},run:{type:Object,default:null}},data:function(){return{equityChart:null,tradeColumns:[]}},computed:{result:function(){return this.run&&this.run.result?this.run.result:{}},modalTitle:function(){var t=this.run&&this.run.id?"#".concat(this.run.id):"";return"".concat(this.$t("dashboard.indicator.backtest.historyTitle")," ").concat(t).trim()}},watch:{visible:function(t){var e=this;t?this.$nextTick(function(){e.initColumns(),e.renderEquityChart()}):this.equityChart&&(this.equityChart.dispose(),this.equityChart=null)}},methods:{rowKey:function(t,e){return e},initColumns:function(){this.tradeColumns.length||(this.tradeColumns=[{title:this.$t("dashboard.indicator.backtest.tradeTime"),dataIndex:"time",key:"time",width:160},{title:this.$t("dashboard.indicator.backtest.tradeType"),dataIndex:"type",key:"type",width:150,scopedSlots:{customRender:"type"}},{title:this.$t("dashboard.indicator.backtest.price"),dataIndex:"price",key:"price",width:110},{title:this.$t("dashboard.indicator.backtest.amount"),dataIndex:"amount",key:"amount",width:100},{title:this.$t("dashboard.indicator.backtest.profit"),dataIndex:"profit",key:"profit",width:110,scopedSlots:{customRender:"profit"}},{title:this.$t("dashboard.indicator.backtest.balance"),dataIndex:"balance",key:"balance",width:120,scopedSlots:{customRender:"balance"}}])},getTradeTypeColor:function(t){var e={buy:"green",sell:"red",liquidation:"orange",open_long:"green",add_long:"cyan",close_long:"orange",close_long_stop:"red",close_long_profit:"lime",close_long_trailing:"gold",reduce_long:"volcano",open_short:"red",add_short:"magenta",close_short:"blue",close_short_stop:"red",close_short_profit:"cyan",close_short_trailing:"gold",reduce_short:"volcano"};return e[t]||"default"},getTradeTypeText:function(t){var e={open_long:this.$t("dashboard.indicator.backtest.openLong"),add_long:this.$t("dashboard.indicator.backtest.addLong"),close_long:this.$t("dashboard.indicator.backtest.closeLong"),close_long_stop:this.$t("dashboard.indicator.backtest.closeLongStop"),close_long_profit:this.$t("dashboard.indicator.backtest.closeLongProfit"),close_long_trailing:this.$t("dashboard.indicator.backtest.closeLongTrailing"),reduce_long:this.$t("dashboard.indicator.backtest.reduceLong"),open_short:this.$t("dashboard.indicator.backtest.openShort"),add_short:this.$t("dashboard.indicator.backtest.addShort"),close_short:this.$t("dashboard.indicator.backtest.closeShort"),close_short_stop:this.$t("dashboard.indicator.backtest.closeShortStop"),close_short_profit:this.$t("dashboard.indicator.backtest.closeShortProfit"),close_short_trailing:this.$t("dashboard.indicator.backtest.closeShortTrailing"),reduce_short:this.$t("dashboard.indicator.backtest.reduceShort"),liquidation:this.$t("dashboard.indicator.backtest.liquidation")};return e[t]||t},formatPercent:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"";return"".concat(e).concat(Number(t).toFixed(2),"%")},formatMoney:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"-";return"".concat(e,"$").concat(Math.abs(t).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}))},renderEquityChart:function(){var t=this;if(this.$refs.equityChartRef){this.equityChart&&this.equityChart.dispose(),this.equityChart=Hr.Ts(this.$refs.equityChartRef);var e=this.result.equityCurve||[],i=e.map(function(t){return t.time||t.date}),n=e.map(function(t){return void 0!==t.value?t.value:t.equity}),r=n[0]||1e5,a=n[n.length-1]||r,o=a>=r,s=o?"#52c41a":"#f5222d",l=o?[{offset:0,color:"rgba(82, 196, 26, 0.35)"},{offset:1,color:"rgba(82, 196, 26, 0.02)"}]:[{offset:0,color:"rgba(245, 34, 45, 0.35)"},{offset:1,color:"rgba(245, 34, 45, 0.02)"}],c={tooltip:{trigger:"axis"},grid:{left:"3%",right:"4%",bottom:"12%",top:"8%",containLabel:!0},xAxis:{type:"category",data:i,boundaryGap:!1},yAxis:{type:"value"},series:[{name:this.$t("dashboard.indicator.backtest.strategy"),type:"line",data:n,smooth:.4,symbol:"none",sampling:"lttb",lineStyle:{width:2.5,color:s},areaStyle:{color:new Hr.fA.W4(0,0,0,1,l)}}]};this.equityChart.setOption(c),window.addEventListener("resize",function(){return t.equityChart&&t.equityChart.resize()})}}}},na=ia,ra=(0,T.A)(na,ta,ea,!1,null,"a484239a",null),aa=ra.exports,oa=i(89523),sa={name:"DashboardIndicator",components:{IndicatorEditor:I,KlineChart:Or,BacktestModal:Ur,BacktestHistoryDrawer:Qr,BacktestRunViewer:aa,QuickTradePanel:oa.A},computed:(0,d.A)((0,d.A)({},(0,p.aH)({navTheme:function(t){return t.app.theme}})),{},{chartTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme?"dark":"light"},isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme}}),setup:function(){var t=(0,h.nI)(),e=t||{},i=e.proxy,n=(0,h.KR)(1),r=(0,h.KR)(!1),p=(0,h.KR)(void 0),m=(0,h.KR)([]),y=(0,h.KR)([]),b=(0,h.KR)(!1),x=(0,h.KR)(""),_=(0,h.KR)(!1),w=(0,h.KR)(!1),C=(0,h.KR)(!1),S=(0,h.KR)(""),k=(0,h.KR)(""),A=(0,h.KR)([]),T=(0,h.KR)(!1),M=(0,h.KR)([]),I=(0,h.KR)(!1),E=(0,h.KR)(null),D=(0,h.KR)(null),P=(0,h.KR)([]),L=(0,h.KR)(!1),R=(0,h.KR)(!1),F=(0,h.KR)(""),B=(0,h.KR)(""),N=(0,h.KR)(0),O=(0,h.EW)(function(){return"crypto"===(K.value||"").toLowerCase()}),z=function(){O.value?(F.value=H.value||"",N.value=parseFloat(Y.value)||0,B.value="",R.value=!0):u.A.warning(i.$t("quickTrade.cryptoOnly"))},W=function(){u.A.success(i.$t("quickTrade.orderSuccess"))},V=function(t){t&&O.value&&(F.value=t)},$=function(){i&&i.$router&&i.$router.push("/indicator-community")},H=(0,h.KR)(""),K=(0,h.KR)(""),Y=(0,h.KR)("--"),X=(0,h.KR)(0),U=(0,h.EW)(function(){return X.value>0?"color-up":X.value<0?"color-down":""}),G=(0,h.KR)("1D"),j=(0,h.KR)([]),q=(0,h.KR)(!1),Z=[{id:"sma5",name:"SMA5 (5日均线)",shortName:"SMA5",type:"line",defaultParams:{length:5}},{id:"sma10",name:"SMA10 (10日均线)",shortName:"SMA10",type:"line",defaultParams:{length:10}},{id:"sma20",name:"SMA20 (20日均线)",shortName:"SMA20",type:"line",defaultParams:{length:20}},{id:"sma30",name:"SMA30 (30日均线)",shortName:"SMA30",type:"line",defaultParams:{length:30}}],J=[{id:"ema5",name:"EMA5 (5日指数均线)",shortName:"EMA5",type:"line",defaultParams:{length:5}},{id:"ema10",name:"EMA10 (10日指数均线)",shortName:"EMA10",type:"line",defaultParams:{length:10}},{id:"ema20",name:"EMA20 (20日指数均线)",shortName:"EMA20",type:"line",defaultParams:{length:20}},{id:"ema30",name:"EMA30 (30日指数均线)",shortName:"EMA30",type:"line",defaultParams:{length:30}}],Q=(0,h.KR)([]),tt=(0,h.KR)([]),et=(0,h.KR)(!1),it=(0,h.KR)(!1),nt=(0,h.KR)(null),rt=(0,h.KR)(""),at=(0,h.KR)([]),ot=(0,h.KR)({}),st=(0,h.KR)(!1),lt=(0,h.KR)({}),ct=(0,h.KR)(!1),ut=(0,h.KR)(!1),dt=(0,h.KR)(!1),ht=(0,h.KR)(null),pt=(0,h.KR)(!1),ft=(0,h.KR)(null),vt=(0,h.KR)(!1),gt=(0,h.KR)(null),mt=(0,h.KR)(!1),yt=(0,h.KR)(null),bt=(0,h.KR)(!1),xt=(0,h.KR)(null),_t=(0,h.KR)(!1),wt=(0,h.KR)(!1),Ct=(0,h.KR)("free"),St=(0,h.KR)(10),kt=(0,h.KR)(""),At=(0,h.KR)(!1),Tt={price:[{required:!0,message:"请输入价格",trigger:"blur",type:"number"}]},Mt=(0,h.KR)(!1),It=function(t){var e=t.price,i=t.change;Y.value=e,X.value=i},Et=function(){},Dt=(0,h.KR)([]),Pt=(0,h.KR)([]),Lt=function(t){G.value=t},Rt=function(t){return t?Object.values(t).join(", "):""},Ft=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,i,a,o,s,c;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(r.value=!0,t.p=1,a=(0,h.nI)(),o=null===a||void 0===a||null===(e=a.proxy)||void 0===e?void 0:e.$store,s=(null===o||void 0===o||null===(i=o.getters)||void 0===i?void 0:i.userInfo)||{},!s||!s.email){t.n=2;break}return n.value=s.id,r.value=!1,Bt(),re(),t.a(2);case 2:return t.n=3,(0,g.ug)();case 3:c=t.v,c&&1===c.code&&c.data&&(n.value=c.data.id,o&&o.commit("SET_INFO",c.data),Bt(),re()),t.n=5;break;case 4:t.p=4,t.v;case 5:return t.p=5,r.value=!1,t.f(5);case 6:return t.a(2)}},t,null,[[1,4,5,6]])}));return function(){return t.apply(this,arguments)}}(),Bt=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,r;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value){t.n=1;break}return t.a(2);case 1:return b.value=!0,t.p=2,t.n=3,(0,v.Qo)({userid:n.value});case 3:e=t.v,e&&1===e.code&&e.data&&(y.value=e.data.map(function(t){return(0,d.A)((0,d.A)({},t),{},{label:t.symbol+(t.name?" (".concat(t.name,")"):""),value:"".concat(t.market,":").concat(t.symbol)})}),Nt(),y.value.length>0&&!H.value&&(r=y.value[0],K.value=r.market,H.value=r.symbol,p.value=r.value)),t.n=5;break;case 4:t.p=4,t.v,u.A.error(i.$t("dashboard.indicator.error.loadWatchlistFailed"));case 5:return t.p=5,b.value=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(){return t.apply(this,arguments)}}(),Nt=function(){x.value?m.value=y.value.filter(function(t){return t.symbol.toLowerCase().includes(x.value.toLowerCase())||t.name&&t.name.toLowerCase().includes(x.value.toLowerCase())}):m.value=y.value},Ot=function(t){x.value=t,0===y.value.length&&t&&(_.value=!0),Nt()},zt=function(t){_.value=t,t||(x.value="")},Wt=function(t){if("__empty_watchlist_hint__"!==t){if("__add_stock_option__"===t)return w.value=!0,void setTimeout(function(){p.value=void 0},0);var e=y.value.find(function(e){return e.value===t});if(e||(e=m.value.find(function(e){return e.value===t})),!e&&t.includes(":")){var i=t.split(":"),n=(0,s.A)(i,2),r=n[0],a=n[1];e={market:r,symbol:a,value:t}}e&&(K.value=e.market,H.value=e.symbol,p.value=e.value)}},Vt=function(t,e){var i,n=(null===(i=e.componentOptions)||void 0===i||null===(i=i.propsData)||void 0===i?void 0:i.value)||"";return"__empty_watchlist_hint__"===n||"__add_stock_option__"===n||n.toLowerCase().includes(t.toLowerCase())},$t=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return t.p=0,t.n=1,(0,v.iO)();case 1:e=t.v,e&&1===e.code&&e.data&&Array.isArray(e.data)?P.value=e.data.map(function(t){return{value:t.value,i18nKey:t.i18nKey||"dashboard.analysis.market.".concat(t.value)}}):e&&1===e.code&&e.data&&"object"===(0,o.A)(e.data)?P.value=Object.keys(e.data).map(function(t){return{value:t,i18nKey:"dashboard.analysis.market.".concat(t)}}):P.value=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}],P.value.length>0&&!S.value&&(S.value=P.value[0].value),t.n=3;break;case 2:t.p=2,t.v,P.value=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}];case 3:return t.a(2)}},t,null,[[0,2]])}));return function(){return t.apply(this,arguments)}}(),Ht=function(){w.value=!1,E.value=null,k.value="",A.value=[],L.value=!1,S.value=P.value.length>0?P.value[0].value:""},Kt=function(t){S.value=t,k.value="",A.value=[],E.value=null,L.value=!1,qt(t)},Yt=function(t){var e=t.target.value;if(k.value=e,D.value&&clearTimeout(D.value),!e||""===e.trim())return A.value=[],L.value=!1,void(E.value=null);D.value=setTimeout(function(){Ut(e)},500)},Xt=function(t){t&&t.trim()&&(S.value?A.value.length>0||(L.value&&0===A.value.length?Gt():Ut(t)):u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")))},Ut=function(){var t=(0,c.A)((0,l.A)().m(function t(e){var n;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e&&""!==e.trim()){t.n=1;break}return A.value=[],L.value=!1,t.a(2);case 1:if(S.value){t.n=2;break}return u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),t.a(2);case 2:return T.value=!0,L.value=!0,t.p=3,t.n=4,(0,v._3)({market:S.value,keyword:e.trim(),limit:20});case 4:n=t.v,n&&1===n.code&&n.data&&n.data.length>0?A.value=n.data:(A.value=[],E.value={market:S.value,symbol:e.trim().toUpperCase(),name:""}),t.n=6;break;case 5:t.p=5,t.v,A.value=[],E.value={market:S.value,symbol:e.trim().toUpperCase(),name:""};case 6:return t.p=6,T.value=!1,t.f(6);case 7:return t.a(2)}},t,null,[[3,5,6,7]])}));return function(e){return t.apply(this,arguments)}}(),Gt=function(){k.value&&k.value.trim()?S.value?E.value={market:S.value,symbol:k.value.trim().toUpperCase(),name:""}:u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")):u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseEnterSymbol"))},jt=function(t){E.value={market:t.market,symbol:t.symbol,name:t.name||t.symbol}},qt=function(){var t=(0,c.A)((0,l.A)().m(function t(e){var i;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e||(e=S.value||(P.value.length>0?P.value[0].value:"")),e){t.n=1;break}return t.a(2);case 1:return I.value=!0,t.p=2,t.n=3,(0,v.z6)({market:e,limit:10});case 3:i=t.v,i&&1===i.code&&i.data?M.value=i.data:M.value=[],t.n=5;break;case 4:t.p=4,t.v,M.value=[];case 5:return t.p=5,I.value=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(e){return t.apply(this,arguments)}}(),Zt=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,r,a,o,s,c;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e="",r="",!E.value){t.n=1;break}e=E.value.market,r=E.value.symbol.toUpperCase(),t.n=4;break;case 1:if(!k.value||!k.value.trim()){t.n=3;break}if(S.value){t.n=2;break}return u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),t.a(2);case 2:e=S.value,r=k.value.trim().toUpperCase(),t.n=4;break;case 3:return u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol")),t.a(2);case 4:return C.value=!0,t.p=5,t.n=6,(0,v.dp)({userid:n.value,market:e,symbol:r});case 6:if(a=t.v,!a||1!==a.code){t.n=8;break}return u.A.success(i.$t("dashboard.analysis.message.addStockSuccess")),Ht(),t.n=7,Bt();case 7:t.n=9;break;case 8:u.A.error((null===a||void 0===a?void 0:a.msg)||i.$t("dashboard.analysis.message.addStockFailed"));case 9:t.n=11;break;case 10:t.p=10,c=t.v,s=(null===c||void 0===c||null===(o=c.response)||void 0===o||null===(o=o.data)||void 0===o?void 0:o.msg)||(null===c||void 0===c?void 0:c.message)||i.$t("dashboard.analysis.message.addStockFailed"),u.A.error(s);case 11:return t.p=11,C.value=!1,t.f(11);case 12:return t.a(2)}},t,null,[[5,10,11,12]])}));return function(){return t.apply(this,arguments)}}(),Jt=function(t){if(!ie(t.id)){var e=t.params||t.defaultParams||{};j.value.push((0,d.A)((0,d.A)({},t),{},{id:t.id,params:(0,d.A)({},e)}))}},Qt=function(t){j.value=j.value.filter(function(e){return e.id!==t})},te=function(t){var e=t.action,i=t.indicator;if("add"===e){var n=(0,d.A)((0,d.A)({},i),{},{calculate:ee(i.id)});Jt(n)}else"remove"===e&&Qt(i.id)},ee=function(t){return null},ie=function(t){return"sma"===t?Z.some(function(t){return j.value.some(function(e){return e.id===t.id})}):"ema"===t?J.some(function(t){return j.value.some(function(e){return e.id===t.id})}):j.value.some(function(e){return e.id===t})},ne=function(){var t=new Set;return Z.forEach(function(e){return t.add(e.id)}),J.forEach(function(e){return t.add(e.id)}),j.value.filter(function(e){return!t.has(e.id)})},re=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,i,r;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value){t.n=1;break}return t.a(2);case 1:return et.value=!0,t.p=2,t.n=3,(0,f.Ay)({url:"/api/indicator/getIndicators",method:"get",params:{userid:n.value}});case 3:e=t.v,1===e.code&&e.data&&(i=e.data.filter(function(t){return!t.is_buy||0===t.is_buy||"0"===t.is_buy}),r=e.data.filter(function(t){return 1===t.is_buy||"1"===t.is_buy}),Q.value=i.map(function(t){return(0,d.A)((0,d.A)({},t),{},{type:"python",source:"custom"})}),tt.value=r.map(function(t){return(0,d.A)((0,d.A)({},t),{},{type:"python",source:"purchased"})})),t.n=5;break;case 4:t.p=4,t.v;case 5:return t.p=5,et.value=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(){return t.apply(this,arguments)}}(),ae=(0,h.KR)(null),oe=function(){var t=(0,c.A)((0,l.A)().m(function t(e,n){var r,a,o,s,c,h,p,f,v;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(r="".concat(n,"-").concat(e.id),!ie(r)){t.n=1;break}return Qt(r),t.a(2);case 1:if(t.p=1,a=e.code||"",ae.value){t.n=2;break}return u.A.error(i.$t("dashboard.indicator.error.chartNotReady")),t.a(2);case 2:if("function"===typeof ae.value.parsePythonStrategy){t.n=3;break}return u.A.error(i.$t("dashboard.indicator.error.chartMethodNotReady")),t.a(2);case 3:if("function"===typeof ae.value.executePythonStrategy){t.n=4;break}return u.A.error(i.$t("dashboard.indicator.error.chartExecuteNotReady")),t.a(2);case 4:if(o=ae.value.parsePythonStrategy(a),o){t.n=5;break}return u.A.error(i.$t("dashboard.indicator.error.parseFailed")),t.a(2);case 5:s=e.userParams||{},c=a,h=(0,d.A)({},s),p={id:r,name:e.name,type:"python",code:c,description:e.description,parsed:o,userParams:h,originalId:e.id,user_id:e.user_id||e.userId,is_encrypted:e.is_encrypted||e.isEncrypted||0,calculate:function(t,i){return ae.value.executePythonStrategy(c,t,(0,d.A)((0,d.A)({},i),h),{id:e.id,user_id:e.user_id||e.userId,is_encrypted:e.is_encrypted||e.isEncrypted||0})}},f=(0,d.A)((0,d.A)({},o.params),s),j.value.push((0,d.A)((0,d.A)({},p),{},{params:f})),t.n=7;break;case 6:t.p=6,v=t.v,u.A.error(i.$t("dashboard.indicator.error.addIndicatorFailed")+": "+(v.message||"未知错误"));case 7:return t.a(2)}},t,null,[[1,6]])}));return function(e,i){return t.apply(this,arguments)}}(),se=function(){var t=(0,c.A)((0,l.A)().m(function t(e,n){var r,a,o,s,c;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(r="".concat(n,"-").concat(e.id),!ie(r)){t.n=1;break}Qt(r),t.n=5;break;case 1:return t.p=1,st.value=!0,t.n=2,i.$http.get("/api/indicator/getIndicatorParams",{params:{indicator_id:e.id}});case 2:a=t.v,a&&1===a.code&&Array.isArray(a.data)&&a.data.length>0?(at.value=a.data,o="".concat(n,"-").concat(e.id),s=lt.value[o],c={},a.data.forEach(function(t){var e=s&&void 0!==s[t.name]?s[t.name]:t.default;e="int"===t.type?parseInt(e)||0:"float"===t.type?parseFloat(e)||0:"bool"===t.type?!0===e||"true"===e||1===e||"1"===e:e||"",c[t.name]=e}),ot.value=c,nt.value=e,rt.value=n,it.value=!0):oe(e,n),t.n=4;break;case 3:t.p=3,t.v,oe(e,n);case 4:return t.p=4,st.value=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}));return function(e,i){return t.apply(this,arguments)}}(),le=function(){if(nt.value){var t="".concat(rt.value,"-").concat(nt.value.id);lt.value[t]=(0,d.A)({},ot.value);var e=(0,d.A)((0,d.A)({},nt.value),{},{userParams:(0,d.A)({},ot.value)});oe(e,rt.value)}it.value=!1,nt.value=null,rt.value=""},ce=function(){ue(),it.value=!1,setTimeout(function(){nt.value=null,rt.value=""},100)},ue=function(){if(nt.value&&rt.value){var t="".concat(rt.value,"-").concat(nt.value.id);lt.value[t]=JSON.parse(JSON.stringify(ot.value))}},de=function(){ue()},he=function(t){var e=t.code,n=t.name;if(e&&e.trim())try{if(!ae.value)return void u.A.error(i.$t("dashboard.indicator.error.chartNotReady"));if("function"!==typeof ae.value.parsePythonStrategy)return void u.A.error(i.$t("dashboard.indicator.error.chartMethodNotReady"));if("function"!==typeof ae.value.executePythonStrategy)return void u.A.error(i.$t("dashboard.indicator.error.chartExecuteNotReady"));var r=ae.value.parsePythonStrategy(e);if(!r)return void u.A.error(i.$t("dashboard.indicator.error.parseFailedCheck"));var a={id:"temp-editor-indicator",name:n||"临时指标",type:"python",code:e,description:"",parsed:r,calculate:function(t,i){var n=e;return ae.value.executePythonStrategy(n,t,i)}},o=j.value.findIndex(function(t){return"temp-editor-indicator"===t.id});o>=0&&j.value.splice(o,1),j.value.push((0,d.A)((0,d.A)({},a),{},{params:(0,d.A)({},r.params)})),u.A.success(i.$t("dashboard.indicator.success.runIndicator"))}catch(s){u.A.error(i.$t("dashboard.indicator.error.runIndicatorFailed")+": "+(s.message||"未知错误"))}else u.A.warning(i.$t("dashboard.indicator.warning.enterCode"))},pe=function(){ht.value=null,dt.value=!0},fe=function(t){ht.value=t,dt.value=!0},ve=function(){ct.value=!ct.value},ge=function(t){a.A.confirm({title:i.$t("dashboard.indicator.delete.confirmTitle"),content:i.$t("dashboard.indicator.delete.confirmContent",{name:t.name}),okText:i.$t("dashboard.indicator.delete.confirmOk"),okType:"danger",cancelText:i.$t("dashboard.indicator.delete.confirmCancel"),onOk:function(){var e=(0,c.A)((0,l.A)().m(function e(){var r,a,o;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,f.Ay)({url:"/api/indicator/deleteIndicator",method:"post",data:{id:t.id,userid:n.value}});case 1:if(r=e.v,1!==r.code){e.n=3;break}return u.A.success(i.$t("dashboard.indicator.delete.success")),a="custom-"+t.id,ie(a)&&Qt(a),e.n=2,re();case 2:e.n=4;break;case 3:u.A.error(r.msg||i.$t("dashboard.indicator.delete.failed"));case 4:e.n=6;break;case 5:e.p=5,o=e.v,u.A.error(i.$t("dashboard.indicator.delete.failed")+": "+(o.message||"未知错误"));case 6:return e.a(2)}},e,null,[[0,5]])}));function r(){return e.apply(this,arguments)}return r}()})},me=function(t){ft.value=(0,d.A)({},t),pt.value=!0},ye=function(t){gt.value=(0,d.A)({},t),vt.value=!0},be=function(t){yt.value=t,mt.value=!0},xe=function(t){xt.value=(0,d.A)({},t),Ct.value=t.pricing_type||"free",St.value=t.price||10,kt.value=t.description||"",At.value=!!t.vip_free,bt.value=!0},_e=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,r;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value){t.n=1;break}return u.A.error(i.$t("dashboard.indicator.error.pleaseLogin")),t.a(2);case 1:return _t.value=!0,t.p=2,t.n=3,(0,f.Ay)({url:"/api/indicator/saveIndicator",method:"post",data:{userid:n.value,id:xt.value.id,code:xt.value.code,name:xt.value.name,description:kt.value,publishToCommunity:!0,pricingType:Ct.value,price:"paid"===Ct.value?St.value:0,vipFree:"paid"===Ct.value&&At.value}});case 3:if(e=t.v,1!==e.code){t.n=5;break}return u.A.success(i.$t("dashboard.indicator.publish.success")),bt.value=!1,xt.value=null,t.n=4,re();case 4:t.n=6;break;case 5:u.A.error(e.msg||i.$t("dashboard.indicator.publish.failed"));case 6:t.n=8;break;case 7:t.p=7,r=t.v,u.A.error(i.$t("dashboard.indicator.publish.failed")+": "+(r.message||""));case 8:return t.p=8,_t.value=!1,t.f(8);case 9:return t.a(2)}},t,null,[[2,7,8,9]])}));return function(){return t.apply(this,arguments)}}(),we=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value&&xt.value){t.n=1;break}return t.a(2);case 1:return wt.value=!0,t.p=2,t.n=3,(0,f.Ay)({url:"/api/indicator/saveIndicator",method:"post",data:{userid:n.value,id:xt.value.id,code:xt.value.code,name:xt.value.name,description:xt.value.description,publishToCommunity:!1,pricingType:"free",price:0,vipFree:!1}});case 3:if(e=t.v,1!==e.code){t.n=5;break}return u.A.success(i.$t("dashboard.indicator.publish.unpublishSuccess")),bt.value=!1,xt.value=null,t.n=4,re();case 4:t.n=6;break;case 5:u.A.error(e.msg||i.$t("dashboard.indicator.publish.unpublishFailed"));case 6:t.n=8;break;case 7:t.p=7,t.v,u.A.error(i.$t("dashboard.indicator.publish.unpublishFailed"));case 8:return t.p=8,wt.value=!1,t.f(8);case 9:return t.a(2)}},t,null,[[2,7,8,9]])}));return function(){return t.apply(this,arguments)}}(),Ce=function(){var t=(0,c.A)((0,l.A)().m(function t(e){var r,a,o;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value){t.n=1;break}return u.A.error(i.$t("dashboard.indicator.error.pleaseLogin")),t.a(2);case 1:return r=i.$refs.indicatorEditor,r&&(r.saving=!0),t.p=2,t.n=3,(0,f.Ay)({url:"/api/indicator/saveIndicator",method:"post",data:{userid:n.value,id:e.id||0,code:e.code}});case 3:if(a=t.v,1!==a.code){t.n=5;break}return u.A.success(i.$t("dashboard.indicator.save.success")),dt.value=!1,ht.value=null,t.n=4,re();case 4:t.n=6;break;case 5:u.A.error(a.msg||i.$t("dashboard.indicator.save.failed"));case 6:t.n=8;break;case 7:t.p=7,o=t.v,u.A.error(i.$t("dashboard.indicator.save.failed")+": "+(o.message||"未知错误"));case 8:return t.p=8,r&&(r.saving=!1),t.f(8);case 9:return t.a(2)}},t,null,[[2,7,8,9]])}));return function(e){return t.apply(this,arguments)}}(),Se=function(t){var e=t.end_time;if(1===e||"1"===e)return i.$t("dashboard.indicator.status.normalPermanent");if(!e||0===e)return i.$t("dashboard.indicator.status.normal");var n=Math.floor(Date.now()/1e3);return e0&&!S.value&&(S.value=P.value[0].value),S.value&&qt(S.value)):(E.value=null,k.value="",A.value=[],L.value=!1,D.value&&(clearTimeout(D.value),D.value=null))}),(0,h.wB)(function(){return ot.value},function(t){if(it.value&&nt.value&&rt.value){var e="".concat(rt.value,"-").concat(nt.value.id);lt.value[e]=JSON.parse(JSON.stringify(t))}},{deep:!0,immediate:!1}),(0,h.wB)(it,function(t){t||ue()}),{userId:n,klineChart:ae,searchSymbol:p,symbolSuggestions:m,watchlist:y,symbolSearchValue:x,symbolSearchOpen:_,currentSymbol:H,currentMarket:K,currentPrice:Y,priceChange:X,priceChangeClass:U,timeframe:G,loadingWatchlist:b,activeIndicators:j,trendIndicators:Dt,oscillatorIndicators:Pt,customIndicators:Q,purchasedIndicators:tt,loadingIndicators:et,realtimeEnabled:Mt,toggleRealtime:Ee,handleSymbolSearch:Ot,handleSymbolSelect:Wt,handleDropdownVisibleChange:zt,filterSymbolOption:Vt,getMarketName:Me,getMarketColor:Ie,setTimeframe:Lt,addIndicator:Jt,removeIndicator:Qt,isIndicatorActive:ie,loadIndicators:re,addPythonIndicator:oe,toggleIndicator:se,getIndicatorStatus:Se,getIndicatorStatusIcon:ke,getIndicatorStatusClass:Ae,getExpiryTimeText:Te,formatParams:Rt,loadWatchlist:Bt,getCustomActiveIndicators:ne,showIndicatorEditor:dt,editingIndicator:ht,handleCreateIndicator:pe,handleRunIndicator:he,handleSaveIndicator:Ce,handleEditIndicator:fe,handleDeleteIndicator:ge,toggleCustomSection:ve,customSectionCollapsed:ct,purchasedSectionCollapsed:ut,handlePriceChange:It,handleChartRetry:Et,handleIndicatorToggle:te,showParamsModal:it,pendingIndicator:nt,indicatorParams:at,indicatorParamValues:ot,loadingParams:st,confirmIndicatorParams:le,cancelIndicatorParams:ce,handleParamsModalAfterClose:de,showBacktestModal:pt,backtestIndicator:ft,handleOpenBacktest:me,showBacktestHistoryDrawer:vt,backtestHistoryIndicator:gt,handleOpenBacktestHistory:ye,showBacktestRunViewer:mt,selectedBacktestRun:yt,handleViewBacktestRun:be,showPublishModal:bt,publishIndicator:xt,publishing:_t,unpublishing:wt,publishPricingType:Ct,publishPrice:St,publishDescription:kt,publishVipFree:At,publishRules:Tt,handlePublishIndicator:xe,handleConfirmPublish:_e,handleUnpublish:we,selectedSymbol:H,selectedMarket:K,selectedTimeframe:G,isMobile:q,showAddStockModal:w,addingStock:C,selectedMarketTab:S,symbolSearchKeyword:k,symbolSearchResults:A,searchingSymbols:T,hotSymbols:M,loadingHotSymbols:I,selectedSymbolForAdd:E,marketTypes:P,hasSearched:L,handleCloseAddStockModal:Ht,handleMarketTabChange:Kt,handleSymbolSearchInput:Yt,handleSearchOrInput:Xt,searchSymbolsInModal:Ut,selectSymbol:jt,loadHotSymbols:qt,handleAddStock:Zt,handleDirectAdd:Gt,loadMarketTypes:$t,showQuickTrade:R,qtSymbol:F,qtSide:B,qtPrice:N,isCryptoMarket:O,openQuickTrade:z,onQuickTradeSuccess:W,handleQuickTradeSymbolChange:V,goToIndicatorMarket:$}}},la=sa,ca=(0,T.A)(la,n,r,!1,null,"b17e86c2",null),ua=ca.exports},64118:function(t,e,i){"use strict";i.d(e,{Qo:function(){return a},_3:function(){return u},dp:function(){return o},iO:function(){return c},mk:function(){return s},ms:function(){return l},z6:function(){return d}});var n=i(76471),r={GetWatchlist:"/api/market/watchlist/get",AddWatchlist:"/api/market/watchlist/add",RemoveWatchlist:"/api/market/watchlist/remove",GetWatchlistPrices:"/api/market/watchlist/prices",MultiAnalysis:"/api/analysis/multiAnalysis",CreateAnalysisTask:"/api/analysis/createTask",GetAnalysisTaskStatus:"/api/analysis/getTaskStatus",GetAnalysisHistoryList:"/api/analysis/getHistoryList",DeleteAnalysisTask:"/api/analysis/deleteTask",ReflectAnalysis:"/api/analysis/reflect",ChatMessage:"/api/ai/chat/message",GetChatHistory:"/api/ai/chat/history",SaveChatHistory:"/api/ai/chat/history/save",GetConfig:"/api/market/config",GetMenuFooterConfig:"/api/market/menuFooterConfig",GetMarketTypes:"/api/market/types",SearchSymbols:"/api/market/symbols/search",GetHotSymbols:"/api/market/symbols/hot"};function a(t){return(0,n.Ay)({url:r.GetWatchlist,method:"get",params:t})}function o(t){return(0,n.Ay)({url:r.AddWatchlist,method:"post",data:t})}function s(t){return(0,n.Ay)({url:r.RemoveWatchlist,method:"post",data:t})}function l(t){return(0,n.Ay)({url:r.GetWatchlistPrices,method:"get",params:{watchlist:JSON.stringify(t.watchlist||[])}})}function c(){return(0,n.Ay)({url:r.GetMarketTypes,method:"get"})}function u(t){return(0,n.Ay)({url:r.SearchSymbols,method:"get",params:t})}function d(t){return(0,n.Ay)({url:r.GetHotSymbols,method:"get",params:t})}},55218:function(t,e,i){(function(t){t(i(15237))})(function(t){var e={pairs:"()[]{}''\"\"",closeBefore:")]}'\":;>",triples:"",explode:"[]{}"},i=t.Pos;function n(t,i){return"pairs"==i&&"string"==typeof t?t:"object"==typeof t&&null!=t[i]?t[i]:e[i]}t.defineOption("autoCloseBrackets",!1,function(e,i,o){o&&o!=t.Init&&(e.removeKeyMap(r),e.state.closeBrackets=null),i&&(a(n(i,"pairs")),e.state.closeBrackets=i,e.addKeyMap(r))});var r={Backspace:l,Enter:c};function a(t){for(var e=0;e=0;l--){var u=o[l].head;e.replaceRange("",i(u.line,u.ch-1),i(u.line,u.ch+1),"+delete")}}function c(e){var i=s(e),r=i&&n(i,"explode");if(!r||e.getOption("disableInput"))return t.Pass;for(var a=e.listSelections(),o=0;o0?{line:o.head.line,ch:o.head.ch+e}:{line:o.head.line-1};i.push({anchor:s,head:s})}t.setSelections(i,r)}function d(e){var n=t.cmpPos(e.anchor,e.head)>0;return{anchor:new i(e.anchor.line,e.anchor.ch+(n?-1:1)),head:new i(e.head.line,e.head.ch+(n?1:-1))}}function h(e,r){var a=s(e);if(!a||e.getOption("disableInput"))return t.Pass;var o=n(a,"pairs"),l=o.indexOf(r);if(-1==l)return t.Pass;for(var c,h=n(a,"closeBefore"),p=n(a,"triples"),v=o.charAt(l+1)==r,g=e.listSelections(),m=l%2==0,y=0;y1&&p.indexOf(r)>=0&&e.getRange(i(_.line,_.ch-2),_)==r+r){if(_.ch>2&&/\bstring/.test(e.getTokenTypeAt(i(_.line,_.ch-2))))return t.Pass;b="addFour"}else if(v){var C=0==_.ch?" ":e.getRange(i(_.line,_.ch-1),_);if(t.isWordChar(w)||C==r||t.isWordChar(C))return t.Pass;b="both"}else{if(!m||!(0===w.length||/\s/.test(w)||h.indexOf(w)>-1))return t.Pass;b="both"}else b=v&&f(e,_)?"both":p.indexOf(r)>=0&&e.getRange(_,i(_.line,_.ch+3))==r+r+r?"skipThree":"skip";if(c){if(c!=b)return t.Pass}else c=b}var S=l%2?o.charAt(l-1):r,k=l%2?r:o.charAt(l+1);e.operation(function(){if("skip"==c)u(e,1);else if("skipThree"==c)u(e,3);else if("surround"==c){for(var t=e.getSelections(),i=0;i",")":"(<","[":"]>","]":"[<","{":"}>","}":"{<","<":">>",">":"<<"};function r(t){return t&&t.bracketRegex||/[(){}[\]]/}function a(t,e,a){var s=t.getLineHandle(e.line),l=e.ch-1,c=a&&a.afterCursor;null==c&&(c=/(^| )cm-fat-cursor($| )/.test(t.getWrapperElement().className));var u=r(a),d=!c&&l>=0&&u.test(s.text.charAt(l))&&n[s.text.charAt(l)]||u.test(s.text.charAt(l+1))&&n[s.text.charAt(++l)];if(!d)return null;var h=">"==d.charAt(1)?1:-1;if(a&&a.strict&&h>0!=(l==e.ch))return null;var p=t.getTokenTypeAt(i(e.line,l+1)),f=o(t,i(e.line,l+(h>0?1:0)),h,p,a);return null==f?null:{from:i(e.line,l),to:f&&f.pos,match:f&&f.ch==d.charAt(0),forward:h>0}}function o(t,e,a,o,s){for(var l=s&&s.maxScanLineLength||1e4,c=s&&s.maxScanLines||1e3,u=[],d=r(s),h=a>0?Math.min(e.line+c,t.lastLine()+1):Math.max(t.firstLine()-1,e.line-c),p=e.line;p!=h;p+=a){var f=t.getLine(p);if(f){var v=a>0?0:f.length-1,g=a>0?f.length:-1;if(!(f.length>l))for(p==e.line&&(v=e.ch-(a<0?1:0));v!=g;v+=a){var m=f.charAt(v);if(d.test(m)&&(void 0===o||(t.getTokenTypeAt(i(p,v+1))||"")==(o||""))){var y=n[m];if(y&&">"==y.charAt(1)==a>0)u.push(m);else{if(!u.length)return{pos:i(p,v),ch:m};u.pop()}}}}}return p-a!=(a>0?t.lastLine():t.firstLine())&&null}function s(t,n,r){for(var o=t.state.matchBrackets.maxHighlightLineLength||1e3,s=r&&r.highlightNonMatching,l=[],c=t.listSelections(),u=0;u2),m=/Android/.test(t),y=g||m||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(t),b=g||/Mac/.test(e),x=/\bCrOS\b/.test(t),_=/win/i.test(e),w=h&&t.match(/Version\/(\d*\.\d*)/);w&&(w=Number(w[1])),w&&w>=15&&(h=!1,l=!0);var C=b&&(c||h&&(null==w||w<12.11)),S=i||o&&s>=9;function k(t){return new RegExp("(^|\\s)"+t+"(?:$|\\s)\\s*")}var A,T=function(t,e){var i=t.className,n=k(e).exec(i);if(n){var r=i.slice(n.index+n[0].length);t.className=i.slice(0,n.index)+(r?n[1]+r:"")}};function M(t){for(var e=t.childNodes.length;e>0;--e)t.removeChild(t.firstChild);return t}function I(t,e){return M(t).appendChild(e)}function E(t,e,i,n){var r=document.createElement(t);if(i&&(r.className=i),n&&(r.style.cssText=n),"string"==typeof e)r.appendChild(document.createTextNode(e));else if(e)for(var a=0;a=e)return o+(e-a);o+=s-a,o+=i-o%i,a=s+1}}g?B=function(t){t.selectionStart=0,t.selectionEnd=t.value.length}:o&&(B=function(t){try{t.select()}catch(e){}});var K=function(){this.id=null,this.f=null,this.time=0,this.handler=V(this.onTimeout,this)};function Y(t,e){for(var i=0;i=e)return n+Math.min(o,e-r);if(r+=a-n,r+=i-r%i,n=a+1,r>=e)return n}}var J=[""];function Q(t){while(J.length<=t)J.push(tt(J)+" ");return J[t]}function tt(t){return t[t.length-1]}function et(t,e){for(var i=[],n=0;n"€"&&(t.toUpperCase()!=t.toLowerCase()||at.test(t))}function st(t,e){return e?!!(e.source.indexOf("\\w")>-1&&ot(t))||e.test(t):ot(t)}function lt(t){for(var e in t)if(t.hasOwnProperty(e)&&t[e])return!1;return!0}var ct=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function ut(t){return t.charCodeAt(0)>=768&&ct.test(t)}function dt(t,e,i){while((i<0?e>0:ei?-1:1;;){if(e==i)return e;var r=(e+i)/2,a=n<0?Math.ceil(r):Math.floor(r);if(a==e)return t(a)?e:i;t(a)?i=a:e=a+n}}function pt(t,e,i,n){if(!t)return n(e,i,"ltr",0);for(var r=!1,a=0;ae||e==i&&o.to==e)&&(n(Math.max(o.from,e),Math.min(o.to,i),1==o.level?"rtl":"ltr",a),r=!0)}r||n(e,i,"ltr")}var ft=null;function vt(t,e,i){var n;ft=null;for(var r=0;re)return r;a.to==e&&(a.from!=a.to&&"before"==i?n=r:ft=r),a.from==e&&(a.from!=a.to&&"before"!=i?n=r:ft=r)}return null!=n?n:ft}var gt=function(){var t="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",e="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";function i(i){return i<=247?t.charAt(i):1424<=i&&i<=1524?"R":1536<=i&&i<=1785?e.charAt(i-1536):1774<=i&&i<=2220?"r":8192<=i&&i<=8203?"w":8204==i?"b":"L"}var n=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,r=/[stwN]/,a=/[LRr]/,o=/[Lb1n]/,s=/[1n]/;function l(t,e,i){this.level=t,this.from=e,this.to=i}return function(t,e){var c="ltr"==e?"L":"R";if(0==t.length||"ltr"==e&&!n.test(t))return!1;for(var u=t.length,d=[],h=0;h-1&&(n[e]=r.slice(0,a).concat(r.slice(a+1)))}}}function wt(t,e){var i=xt(t,e);if(i.length)for(var n=Array.prototype.slice.call(arguments,2),r=0;r0}function At(t){t.prototype.on=function(t,e){bt(this,t,e)},t.prototype.off=function(t,e){_t(this,t,e)}}function Tt(t){t.preventDefault?t.preventDefault():t.returnValue=!1}function Mt(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0}function It(t){return null!=t.defaultPrevented?t.defaultPrevented:0==t.returnValue}function Et(t){Tt(t),Mt(t)}function Dt(t){return t.target||t.srcElement}function Pt(t){var e=t.which;return null==e&&(1&t.button?e=1:2&t.button?e=3:4&t.button&&(e=2)),b&&t.ctrlKey&&1==e&&(e=3),e}var Lt,Rt,Ft=function(){if(o&&s<9)return!1;var t=E("div");return"draggable"in t||"dragDrop"in t}();function Bt(t){if(null==Lt){var e=E("span","​");I(t,E("span",[e,document.createTextNode("x")])),0!=t.firstChild.offsetHeight&&(Lt=e.offsetWidth<=1&&e.offsetHeight>2&&!(o&&s<8))}var i=Lt?E("span","​"):E("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return i.setAttribute("cm-text",""),i}function Nt(t){if(null!=Rt)return Rt;var e=I(t,document.createTextNode("AخA")),i=A(e,0,1).getBoundingClientRect(),n=A(e,1,2).getBoundingClientRect();return M(t),!(!i||i.left==i.right)&&(Rt=n.right-i.right<3)}var Ot=3!="\n\nb".split(/\n/).length?function(t){var e=0,i=[],n=t.length;while(e<=n){var r=t.indexOf("\n",e);-1==r&&(r=t.length);var a=t.slice(e,"\r"==t.charAt(r-1)?r-1:r),o=a.indexOf("\r");-1!=o?(i.push(a.slice(0,o)),e+=o+1):(i.push(a),e=r+1)}return i}:function(t){return t.split(/\r\n?|\n/)},zt=window.getSelection?function(t){try{return t.selectionStart!=t.selectionEnd}catch(e){return!1}}:function(t){var e;try{e=t.ownerDocument.selection.createRange()}catch(i){}return!(!e||e.parentElement()!=t)&&0!=e.compareEndPoints("StartToEnd",e)},Wt=function(){var t=E("div");return"oncopy"in t||(t.setAttribute("oncopy","return;"),"function"==typeof t.oncopy)}(),Vt=null;function $t(t){if(null!=Vt)return Vt;var e=I(t,E("span","x")),i=e.getBoundingClientRect(),n=A(e,0,1).getBoundingClientRect();return Vt=Math.abs(i.left-n.left)>1}var Ht={},Kt={};function Yt(t,e){arguments.length>2&&(e.dependencies=Array.prototype.slice.call(arguments,2)),Ht[t]=e}function Xt(t,e){Kt[t]=e}function Ut(t){if("string"==typeof t&&Kt.hasOwnProperty(t))t=Kt[t];else if(t&&"string"==typeof t.name&&Kt.hasOwnProperty(t.name)){var e=Kt[t.name];"string"==typeof e&&(e={name:e}),t=rt(e,t),t.name=e.name}else{if("string"==typeof t&&/^[\w\-]+\/[\w\-]+\+xml$/.test(t))return Ut("application/xml");if("string"==typeof t&&/^[\w\-]+\/[\w\-]+\+json$/.test(t))return Ut("application/json")}return"string"==typeof t?{name:t}:t||{name:"null"}}function Gt(t,e){e=Ut(e);var i=Ht[e.name];if(!i)return Gt(t,"text/plain");var n=i(t,e);if(jt.hasOwnProperty(e.name)){var r=jt[e.name];for(var a in r)r.hasOwnProperty(a)&&(n.hasOwnProperty(a)&&(n["_"+a]=n[a]),n[a]=r[a])}if(n.name=e.name,e.helperType&&(n.helperType=e.helperType),e.modeProps)for(var o in e.modeProps)n[o]=e.modeProps[o];return n}var jt={};function qt(t,e){var i=jt.hasOwnProperty(t)?jt[t]:jt[t]={};$(e,i)}function Zt(t,e){if(!0===e)return e;if(t.copyState)return t.copyState(e);var i={};for(var n in e){var r=e[n];r instanceof Array&&(r=r.concat([])),i[n]=r}return i}function Jt(t,e){var i;while(t.innerMode){if(i=t.innerMode(e),!i||i.mode==t)break;e=i.state,t=i.mode}return i||{mode:t,state:e}}function Qt(t,e,i){return!t.startState||t.startState(e,i)}var te=function(t,e,i){this.pos=this.start=0,this.string=t,this.tabSize=e||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=i};function ee(t,e){if(e-=t.first,e<0||e>=t.size)throw new Error("There is no line "+(e+t.first)+" in the document.");var i=t;while(!i.lines)for(var n=0;;++n){var r=i.children[n],a=r.chunkSize();if(e=t.first&&ei?ce(i,ee(t,i).text.length):me(e,ee(t,e.line).text.length)}function me(t,e){var i=t.ch;return null==i||i>e?ce(t.line,e):i<0?ce(t.line,0):t}function ye(t,e){for(var i=[],n=0;n=this.string.length},te.prototype.sol=function(){return this.pos==this.lineStart},te.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},te.prototype.next=function(){if(this.pose},te.prototype.eatSpace=function(){var t=this.pos;while(/[\s\u00a0]/.test(this.string.charAt(this.pos)))++this.pos;return this.pos>t},te.prototype.skipToEnd=function(){this.pos=this.string.length},te.prototype.skipTo=function(t){var e=this.string.indexOf(t,this.pos);if(e>-1)return this.pos=e,!0},te.prototype.backUp=function(t){this.pos-=t},te.prototype.column=function(){return this.lastColumnPos0?null:(n&&!1!==e&&(this.pos+=n[0].length),n)}var r=function(t){return i?t.toLowerCase():t},a=this.string.substr(this.pos,t.length);if(r(a)==r(t))return!1!==e&&(this.pos+=t.length),!0},te.prototype.current=function(){return this.string.slice(this.start,this.pos)},te.prototype.hideFirstChars=function(t,e){this.lineStart+=t;try{return e()}finally{this.lineStart-=t}},te.prototype.lookAhead=function(t){var e=this.lineOracle;return e&&e.lookAhead(t)},te.prototype.baseToken=function(){var t=this.lineOracle;return t&&t.baseToken(this.pos)};var be=function(t,e){this.state=t,this.lookAhead=e},xe=function(t,e,i,n){this.state=e,this.doc=t,this.line=i,this.maxLookAhead=n||0,this.baseTokens=null,this.baseTokenPos=1};function _e(t,e,i,n){var r=[t.state.modeGen],a={};Ee(t,e.text,t.doc.mode,i,function(t,e){return r.push(t,e)},a,n);for(var o=i.state,s=function(n){i.baseTokens=r;var s=t.state.overlays[n],l=1,c=0;i.state=!0,Ee(t,e.text,s.mode,i,function(t,e){var i=l;while(ct&&r.splice(l,1,t,r[l+1],n),l+=2,c=Math.min(t,n)}if(e)if(s.opaque)r.splice(i,l-i,t,"overlay "+e),l=i+2;else for(;it.options.maxHighlightLength&&Zt(t.doc.mode,n.state),a=_e(t,e,n);r&&(n.state=r),e.stateAfter=n.save(!r),e.styles=a.styles,a.classes?e.styleClasses=a.classes:e.styleClasses&&(e.styleClasses=null),i===t.doc.highlightFrontier&&(t.doc.modeFrontier=Math.max(t.doc.modeFrontier,++t.doc.highlightFrontier))}return e.styles}function Ce(t,e,i){var n=t.doc,r=t.display;if(!n.mode.startState)return new xe(n,!0,e);var a=De(t,e,i),o=a>n.first&&ee(n,a-1).stateAfter,s=o?xe.fromSaved(n,o,a):new xe(n,Qt(n.mode),a);return n.iter(a,e,function(i){Se(t,i.text,s);var n=s.line;i.stateAfter=n==e-1||n%5==0||n>=r.viewFrom&&ne.start)return a}throw new Error("Mode "+t.name+" failed to advance stream.")}xe.prototype.lookAhead=function(t){var e=this.doc.getLine(this.line+t);return null!=e&&t>this.maxLookAhead&&(this.maxLookAhead=t),e},xe.prototype.baseToken=function(t){if(!this.baseTokens)return null;while(this.baseTokens[this.baseTokenPos]<=t)this.baseTokenPos+=2;var e=this.baseTokens[this.baseTokenPos+1];return{type:e&&e.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-t}},xe.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},xe.fromSaved=function(t,e,i){return e instanceof be?new xe(t,Zt(t.mode,e.state),i,e.lookAhead):new xe(t,Zt(t.mode,e),i)},xe.prototype.save=function(t){var e=!1!==t?Zt(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new be(e,this.maxLookAhead):e};var Te=function(t,e,i){this.start=t.start,this.end=t.pos,this.string=t.current(),this.type=e||null,this.state=i};function Me(t,e,i,n){var r,a=t.doc,o=a.mode;e=ge(a,e);var s,l=ee(a,e.line),c=Ce(t,e.line,i),u=new te(l.text,t.options.tabSize,c);n&&(s=[]);while((n||u.post.options.maxHighlightLength?(s=!1,o&&Se(t,e,n,d.pos),d.pos=e.length,l=null):l=Ie(Ae(i,d,n.state,h),a),h){var p=h[0].name;p&&(l="m-"+(l?p+" "+l:p))}if(!s||u!=l){while(co;--s){if(s<=a.first)return a.first;var l=ee(a,s-1),c=l.stateAfter;if(c&&(!i||s+(c instanceof be?c.lookAhead:0)<=a.modeFrontier))return s;var u=H(l.text,null,t.options.tabSize);(null==r||n>u)&&(r=s-1,n=u)}return r}function Pe(t,e){if(t.modeFrontier=Math.min(t.modeFrontier,e),!(t.highlightFrontieri;n--){var r=ee(t,n).stateAfter;if(r&&(!(r instanceof be)||n+r.lookAhead=e:a.to>e);(n||(n=[])).push(new Ne(o,a.from,l?null:a.to))}}return n}function $e(t,e,i){var n;if(t)for(var r=0;r=e:a.to>e);if(s||a.from==e&&"bookmark"==o.type&&(!i||a.marker.insertLeft)){var l=null==a.from||(o.inclusiveLeft?a.from<=e:a.from0&&s)for(var x=0;x0)){var u=[l,1],d=ue(c.from,s.from),h=ue(c.to,s.to);(d<0||!o.inclusiveLeft&&!d)&&u.push({from:c.from,to:s.from}),(h>0||!o.inclusiveRight&&!h)&&u.push({from:s.to,to:c.to}),r.splice.apply(r,u),l+=u.length-3}}return r}function Xe(t){var e=t.markedSpans;if(e){for(var i=0;ie)&&(!i||qe(i,a.marker)<0)&&(i=a.marker)}return i}function ei(t,e,i,n,r){var a=ee(t,e),o=Re&&a.markedSpans;if(o)for(var s=0;s=0&&d<=0||u<=0&&d>=0)&&(u<=0&&(l.marker.inclusiveRight&&r.inclusiveLeft?ue(c.to,i)>=0:ue(c.to,i)>0)||u>=0&&(l.marker.inclusiveRight&&r.inclusiveLeft?ue(c.from,n)<=0:ue(c.from,n)<0)))return!0}}}function ii(t){var e;while(e=Je(t))t=e.find(-1,!0).line;return t}function ni(t){var e;while(e=Qe(t))t=e.find(1,!0).line;return t}function ri(t){var e,i;while(e=Qe(t))t=e.find(1,!0).line,(i||(i=[])).push(t);return i}function ai(t,e){var i=ee(t,e),n=ii(i);return i==n?e:ae(n)}function oi(t,e){if(e>t.lastLine())return e;var i,n=ee(t,e);if(!si(t,n))return e;while(i=Qe(n))n=i.find(1,!0).line;return ae(n)+1}function si(t,e){var i=Re&&e.markedSpans;if(i)for(var n=void 0,r=0;re.maxLineLength&&(e.maxLineLength=i,e.maxLine=t)})}var hi=function(t,e,i){this.text=t,Ue(this,e),this.height=i?i(this):1};function pi(t,e,i,n){t.text=e,t.stateAfter&&(t.stateAfter=null),t.styles&&(t.styles=null),null!=t.order&&(t.order=null),Xe(t),Ue(t,i);var r=n?n(t):1;r!=t.height&&re(t,r)}function fi(t){t.parent=null,Xe(t)}hi.prototype.lineNo=function(){return ae(this)},At(hi);var vi={},gi={};function mi(t,e){if(!t||/^\s*$/.test(t))return null;var i=e.addModeClass?gi:vi;return i[t]||(i[t]=t.replace(/\S+/g,"cm-$&"))}function yi(t,e){var i=D("span",null,null,l?"padding-right: .1px":null),n={pre:D("pre",[i],"CodeMirror-line"),content:i,col:0,pos:0,cm:t,trailingSpace:!1,splitSpaces:t.getOption("lineWrapping")};e.measure={};for(var r=0;r<=(e.rest?e.rest.length:0);r++){var a=r?e.rest[r-1]:e.line,o=void 0;n.pos=0,n.addToken=xi,Nt(t.display.measure)&&(o=mt(a,t.doc.direction))&&(n.addToken=wi(n.addToken,o)),n.map=[];var s=e!=t.display.externalMeasured&&ae(a);Si(a,n,we(t,a,s)),a.styleClasses&&(a.styleClasses.bgClass&&(n.bgClass=F(a.styleClasses.bgClass,n.bgClass||"")),a.styleClasses.textClass&&(n.textClass=F(a.styleClasses.textClass,n.textClass||""))),0==n.map.length&&n.map.push(0,0,n.content.appendChild(Bt(t.display.measure))),0==r?(e.measure.map=n.map,e.measure.cache={}):((e.measure.maps||(e.measure.maps=[])).push(n.map),(e.measure.caches||(e.measure.caches=[])).push({}))}if(l){var c=n.content.lastChild;(/\bcm-tab\b/.test(c.className)||c.querySelector&&c.querySelector(".cm-tab"))&&(n.content.className="cm-tab-wrap-hack")}return wt(t,"renderLine",t,e.line,n.pre),n.pre.className&&(n.textClass=F(n.pre.className,n.textClass||"")),n}function bi(t){var e=E("span","•","cm-invalidchar");return e.title="\\u"+t.charCodeAt(0).toString(16),e.setAttribute("aria-label",e.title),e}function xi(t,e,i,n,r,a,l){if(e){var c,u=t.splitSpaces?_i(e,t.trailingSpace):e,d=t.cm.state.specialChars,h=!1;if(d.test(e)){c=document.createDocumentFragment();var p=0;while(1){d.lastIndex=p;var f=d.exec(e),v=f?f.index-p:e.length-p;if(v){var g=document.createTextNode(u.slice(p,p+v));o&&s<9?c.appendChild(E("span",[g])):c.appendChild(g),t.map.push(t.pos,t.pos+v,g),t.col+=v,t.pos+=v}if(!f)break;p+=v+1;var m=void 0;if("\t"==f[0]){var y=t.cm.options.tabSize,b=y-t.col%y;m=c.appendChild(E("span",Q(b),"cm-tab")),m.setAttribute("role","presentation"),m.setAttribute("cm-text","\t"),t.col+=b}else"\r"==f[0]||"\n"==f[0]?(m=c.appendChild(E("span","\r"==f[0]?"␍":"␤","cm-invalidchar")),m.setAttribute("cm-text",f[0]),t.col+=1):(m=t.cm.options.specialCharPlaceholder(f[0]),m.setAttribute("cm-text",f[0]),o&&s<9?c.appendChild(E("span",[m])):c.appendChild(m),t.col+=1);t.map.push(t.pos,t.pos+1,m),t.pos++}}else t.col+=e.length,c=document.createTextNode(u),t.map.push(t.pos,t.pos+e.length,c),o&&s<9&&(h=!0),t.pos+=e.length;if(t.trailingSpace=32==u.charCodeAt(e.length-1),i||n||r||h||a||l){var x=i||"";n&&(x+=n),r&&(x+=r);var _=E("span",[c],x,a);if(l)for(var w in l)l.hasOwnProperty(w)&&"style"!=w&&"class"!=w&&_.setAttribute(w,l[w]);return t.content.appendChild(_)}t.content.appendChild(c)}}function _i(t,e){if(t.length>1&&!/ /.test(t))return t;for(var i=e,n="",r=0;rc&&d.from<=c)break;if(d.to>=u)return t(i,n,r,a,o,s,l);t(i,n.slice(0,d.to-c),r,a,null,s,l),a=null,n=n.slice(d.to-c),c=d.to}}}function Ci(t,e,i,n){var r=!n&&i.widgetNode;r&&t.map.push(t.pos,t.pos+e,r),!n&&t.cm.display.input.needsContentAttribute&&(r||(r=t.content.appendChild(document.createElement("span"))),r.setAttribute("cm-marker",i.id)),r&&(t.cm.display.input.setUneditable(r),t.content.appendChild(r)),t.pos+=e,t.trailingSpace=!1}function Si(t,e,i){var n=t.markedSpans,r=t.text,a=0;if(n)for(var o,s,l,c,u,d,h,p=r.length,f=0,v=1,g="",m=0;;){if(m==f){l=c=u=s="",h=null,d=null,m=1/0;for(var y=[],b=void 0,x=0;xf||w.collapsed&&_.to==f&&_.from==f)){if(null!=_.to&&_.to!=f&&m>_.to&&(m=_.to,c=""),w.className&&(l+=" "+w.className),w.css&&(s=(s?s+";":"")+w.css),w.startStyle&&_.from==f&&(u+=" "+w.startStyle),w.endStyle&&_.to==m&&(b||(b=[])).push(w.endStyle,_.to),w.title&&((h||(h={})).title=w.title),w.attributes)for(var C in w.attributes)(h||(h={}))[C]=w.attributes[C];w.collapsed&&(!d||qe(d.marker,w)<0)&&(d=_)}else _.from>f&&m>_.from&&(m=_.from)}if(b)for(var S=0;S=p)break;var A=Math.min(p,m);while(1){if(g){var T=f+g.length;if(!d){var M=T>A?g.slice(0,A-f):g;e.addToken(e,M,o?o+l:l,u,f+M.length==m?c:"",s,h)}if(T>=A){g=g.slice(A-f),f=A;break}f=T,u=""}g=r.slice(a,a=i[v++]),o=mi(i[v++],e.cm.options)}}else for(var I=1;I2&&a.push((l.bottom+c.top)/2-i.top)}}a.push(i.bottom-i.top)}}function en(t,e,i){if(t.line==e)return{map:t.measure.map,cache:t.measure.cache};if(t.rest){for(var n=0;ni)return{map:t.measure.maps[r],cache:t.measure.caches[r],before:!0}}}function nn(t,e){e=ii(e);var i=ae(e),n=t.display.externalMeasured=new ki(t.doc,e,i);n.lineN=i;var r=n.built=yi(t,n);return n.text=r.pre,I(t.display.lineMeasure,r.pre),n}function rn(t,e,i,n){return sn(t,on(t,e),i,n)}function an(t,e){if(e>=t.display.viewFrom&&e=i.lineN&&ee)&&(a=l-s,r=a-1,e>=l&&(o="right")),null!=r){if(n=t[c+2],s==l&&i==(n.insertLeft?"left":"right")&&(o=i),"left"==i&&0==r)while(c&&t[c-2]==t[c-3]&&t[c-1].insertLeft)n=t[2+(c-=3)],o="left";if("right"==i&&r==l-s)while(c=0;r--)if((i=t[r]).left!=i.right)break;return i}function hn(t,e,i,n){var r,a=un(e.map,i,n),l=a.node,c=a.start,u=a.end,d=a.collapse;if(3==l.nodeType){for(var h=0;h<4;h++){while(c&&ut(e.line.text.charAt(a.coverStart+c)))--c;while(a.coverStart+u0&&(d=n="right"),r=t.options.lineWrapping&&(p=l.getClientRects()).length>1?p["right"==n?p.length-1:0]:l.getBoundingClientRect()}if(o&&s<9&&!c&&(!r||!r.left&&!r.right)){var f=l.parentNode.getClientRects()[0];r=f?{left:f.left,right:f.left+Rn(t.display),top:f.top,bottom:f.bottom}:cn}for(var v=r.top-e.rect.top,g=r.bottom-e.rect.top,m=(v+g)/2,y=e.view.measure.heights,b=0;b=n.text.length?(l=n.text.length,c="before"):l<=0&&(l=0,c="after"),!s)return o("before"==c?l-1:l,"before"==c);function u(t,e,i){var n=s[e],r=1==n.level;return o(i?t-1:t,r!=i)}var d=vt(s,l,c),h=ft,p=u(l,d,"before"==c);return null!=h&&(p.other=u(l,h,"before"!=c)),p}function Sn(t,e){var i=0;e=ge(t.doc,e),t.options.lineWrapping||(i=Rn(t.display)*e.ch);var n=ee(t.doc,e.line),r=ci(n)+Gi(t.display);return{left:i,right:i,top:r,bottom:r+n.height}}function kn(t,e,i,n,r){var a=ce(t,e,i);return a.xRel=r,n&&(a.outside=n),a}function An(t,e,i){var n=t.doc;if(i+=t.display.viewOffset,i<0)return kn(n.first,0,null,-1,-1);var r=oe(n,i),a=n.first+n.size-1;if(r>a)return kn(n.first+n.size-1,ee(n,a).text.length,null,1,1);e<0&&(e=0);for(var o=ee(n,r);;){var s=En(t,o,r,e,i),l=ti(o,s.ch+(s.xRel>0||s.outside>0?1:0));if(!l)return s;var c=l.find(1);if(c.line==r)return c;o=ee(n,r=c.line)}}function Tn(t,e,i,n){n-=bn(e);var r=e.text.length,a=ht(function(e){return sn(t,i,e-1).bottom<=n},r,0);return r=ht(function(e){return sn(t,i,e).top>n},a,r),{begin:a,end:r}}function Mn(t,e,i,n){i||(i=on(t,e));var r=xn(t,e,sn(t,i,n),"line").top;return Tn(t,e,i,r)}function In(t,e,i,n){return!(t.bottom<=i)&&(t.top>i||(n?t.left:t.right)>e)}function En(t,e,i,n,r){r-=ci(e);var a=on(t,e),o=bn(e),s=0,l=e.text.length,c=!0,u=mt(e,t.doc.direction);if(u){var d=(t.options.lineWrapping?Pn:Dn)(t,e,i,a,u,n,r);c=1!=d.level,s=c?d.from:d.to-1,l=c?d.to:d.from-1}var h,p,f=null,v=null,g=ht(function(e){var i=sn(t,a,e);return i.top+=o,i.bottom+=o,!!In(i,n,r,!1)&&(i.top<=r&&i.left<=n&&(f=e,v=i),!0)},s,l),m=!1;if(v){var y=n-v.left=x.bottom?1:0}return g=dt(e.text,g,1),kn(i,g,p,m,n-h)}function Dn(t,e,i,n,r,a,o){var s=ht(function(s){var l=r[s],c=1!=l.level;return In(Cn(t,ce(i,c?l.to:l.from,c?"before":"after"),"line",e,n),a,o,!0)},0,r.length-1),l=r[s];if(s>0){var c=1!=l.level,u=Cn(t,ce(i,c?l.from:l.to,c?"after":"before"),"line",e,n);In(u,a,o,!0)&&u.top>o&&(l=r[s-1])}return l}function Pn(t,e,i,n,r,a,o){var s=Tn(t,e,n,o),l=s.begin,c=s.end;/\s/.test(e.text.charAt(c-1))&&c--;for(var u=null,d=null,h=0;h=c||p.to<=l)){var f=1!=p.level,v=sn(t,n,f?Math.min(c,p.to)-1:Math.max(l,p.from)).right,g=vg)&&(u=p,d=g)}}return u||(u=r[r.length-1]),u.fromc&&(u={from:u.from,to:c,level:u.level}),u}function Ln(t){if(null!=t.cachedTextHeight)return t.cachedTextHeight;if(null==ln){ln=E("pre",null,"CodeMirror-line-like");for(var e=0;e<49;++e)ln.appendChild(document.createTextNode("x")),ln.appendChild(E("br"));ln.appendChild(document.createTextNode("x"))}I(t.measure,ln);var i=ln.offsetHeight/50;return i>3&&(t.cachedTextHeight=i),M(t.measure),i||1}function Rn(t){if(null!=t.cachedCharWidth)return t.cachedCharWidth;var e=E("span","xxxxxxxxxx"),i=E("pre",[e],"CodeMirror-line-like");I(t.measure,i);var n=e.getBoundingClientRect(),r=(n.right-n.left)/10;return r>2&&(t.cachedCharWidth=r),r||10}function Fn(t){for(var e=t.display,i={},n={},r=e.gutters.clientLeft,a=e.gutters.firstChild,o=0;a;a=a.nextSibling,++o){var s=t.display.gutterSpecs[o].className;i[s]=a.offsetLeft+a.clientLeft+r,n[s]=a.clientWidth}return{fixedPos:Bn(e),gutterTotalWidth:e.gutters.offsetWidth,gutterLeft:i,gutterWidth:n,wrapperWidth:e.wrapper.clientWidth}}function Bn(t){return t.scroller.getBoundingClientRect().left-t.sizer.getBoundingClientRect().left}function Nn(t){var e=Ln(t.display),i=t.options.lineWrapping,n=i&&Math.max(5,t.display.scroller.clientWidth/Rn(t.display)-3);return function(r){if(si(t.doc,r))return 0;var a=0;if(r.widgets)for(var o=0;o0&&(l=ee(t.doc,c.line).text).length==c.ch){var u=H(l,l.length,t.options.tabSize)-l.length;c=ce(c.line,Math.max(0,Math.round((a-qi(t.display).left)/Rn(t.display))-u))}return c}function Wn(t,e){if(e>=t.display.viewTo)return null;if(e-=t.display.viewFrom,e<0)return null;for(var i=t.display.view,n=0;ne)&&(r.updateLineNumbers=e),t.curOp.viewChanged=!0,e>=r.viewTo)Re&&ai(t.doc,e)r.viewFrom?Hn(t):(r.viewFrom+=n,r.viewTo+=n);else if(e<=r.viewFrom&&i>=r.viewTo)Hn(t);else if(e<=r.viewFrom){var a=Kn(t,i,i+n,1);a?(r.view=r.view.slice(a.index),r.viewFrom=a.lineN,r.viewTo+=n):Hn(t)}else if(i>=r.viewTo){var o=Kn(t,e,e,-1);o?(r.view=r.view.slice(0,o.index),r.viewTo=o.lineN):Hn(t)}else{var s=Kn(t,e,e,-1),l=Kn(t,i,i+n,1);s&&l?(r.view=r.view.slice(0,s.index).concat(Ai(t,s.lineN,l.lineN)).concat(r.view.slice(l.index)),r.viewTo+=n):Hn(t)}var c=r.externalMeasured;c&&(i=r.lineN&&e=n.viewTo)){var a=n.view[Wn(t,e)];if(null!=a.node){var o=a.changes||(a.changes=[]);-1==Y(o,i)&&o.push(i)}}}function Hn(t){t.display.viewFrom=t.display.viewTo=t.doc.first,t.display.view=[],t.display.viewOffset=0}function Kn(t,e,i,n){var r,a=Wn(t,e),o=t.display.view;if(!Re||i==t.doc.first+t.doc.size)return{index:a,lineN:i};for(var s=t.display.viewFrom,l=0;l0){if(a==o.length-1)return null;r=s+o[a].size-e,a++}else r=s-e;e+=r,i+=r}while(ai(t.doc,i)!=i){if(a==(n<0?0:o.length-1))return null;i+=n*o[a-(n<0?1:0)].size,a+=n}return{index:a,lineN:i}}function Yn(t,e,i){var n=t.display,r=n.view;0==r.length||e>=n.viewTo||i<=n.viewFrom?(n.view=Ai(t,e,i),n.viewFrom=e):(n.viewFrom>e?n.view=Ai(t,e,n.viewFrom).concat(n.view):n.viewFromi&&(n.view=n.view.slice(0,Wn(t,i)))),n.viewTo=i}function Xn(t){for(var e=t.display.view,i=0,n=0;n=t.display.viewTo||l.to().line0?o:t.defaultCharWidth())+"px"}if(n.other){var s=i.appendChild(E("div"," ","CodeMirror-cursor CodeMirror-secondarycursor"));s.style.display="",s.style.left=n.other.left+"px",s.style.top=n.other.top+"px",s.style.height=.85*(n.other.bottom-n.other.top)+"px"}}function qn(t,e){return t.top-e.top||t.left-e.left}function Zn(t,e,i){var n=t.display,r=t.doc,a=document.createDocumentFragment(),o=qi(t.display),s=o.left,l=Math.max(n.sizerWidth,Ji(t)-n.sizer.offsetLeft)-o.right,c="ltr"==r.direction;function u(t,e,i,n){e<0&&(e=0),e=Math.round(e),n=Math.round(n),a.appendChild(E("div",null,"CodeMirror-selected","position: absolute; left: "+t+"px;\n top: "+e+"px; width: "+(null==i?l-t:i)+"px;\n height: "+(n-e)+"px"))}function d(e,i,n){var a,o,d=ee(r,e),h=d.text.length;function p(i,n){return wn(t,ce(e,i),"div",d,n)}function f(e,i,n){var r=Mn(t,d,null,e),a="ltr"==i==("after"==n)?"left":"right",o="after"==n?r.begin:r.end-(/\s/.test(d.text.charAt(r.end-1))?2:1);return p(o,a)[a]}var v=mt(d,r.direction);return pt(v,i||0,null==n?h:n,function(t,e,r,d){var g="ltr"==r,m=p(t,g?"left":"right"),y=p(e-1,g?"right":"left"),b=null==i&&0==t,x=null==n&&e==h,_=0==d,w=!v||d==v.length-1;if(y.top-m.top<=3){var C=(c?b:x)&&_,S=(c?x:b)&&w,k=C?s:(g?m:y).left,A=S?l:(g?y:m).right;u(k,m.top,A-k,m.bottom)}else{var T,M,I,E;g?(T=c&&b&&_?s:m.left,M=c?l:f(t,r,"before"),I=c?s:f(e,r,"after"),E=c&&x&&w?l:y.right):(T=c?f(t,r,"before"):s,M=!c&&b&&_?l:m.right,I=!c&&x&&w?s:y.left,E=c?f(e,r,"after"):l),u(T,m.top,M-T,m.bottom),m.bottom0?e.blinker=setInterval(function(){t.hasFocus()||ir(t),e.cursorDiv.style.visibility=(i=!i)?"":"hidden"},t.options.cursorBlinkRate):t.options.cursorBlinkRate<0&&(e.cursorDiv.style.visibility="hidden")}}function Qn(t){t.hasFocus()||(t.display.input.focus(),t.state.focused||er(t))}function tr(t){t.state.delayingBlurEvent=!0,setTimeout(function(){t.state.delayingBlurEvent&&(t.state.delayingBlurEvent=!1,t.state.focused&&ir(t))},100)}function er(t,e){t.state.delayingBlurEvent&&!t.state.draggingText&&(t.state.delayingBlurEvent=!1),"nocursor"!=t.options.readOnly&&(t.state.focused||(wt(t,"focus",t,e),t.state.focused=!0,R(t.display.wrapper,"CodeMirror-focused"),t.curOp||t.display.selForContextMenu==t.doc.sel||(t.display.input.reset(),l&&setTimeout(function(){return t.display.input.reset(!0)},20)),t.display.input.receivedFocus()),Jn(t))}function ir(t,e){t.state.delayingBlurEvent||(t.state.focused&&(wt(t,"blur",t,e),t.state.focused=!1,T(t.display.wrapper,"CodeMirror-focused")),clearInterval(t.display.blinker),setTimeout(function(){t.state.focused||(t.display.shift=!1)},150))}function nr(t){for(var e=t.display,i=e.lineDiv.offsetTop,n=Math.max(0,e.scroller.getBoundingClientRect().top),r=e.lineDiv.getBoundingClientRect().top,a=0,l=0;l.005||v<-.005)&&(rt.display.sizerWidth){var m=Math.ceil(h/Rn(t.display));m>t.display.maxLineLength&&(t.display.maxLineLength=m,t.display.maxLine=c.line,t.display.maxLineChanged=!0)}}}Math.abs(a)>2&&(e.scroller.scrollTop+=a)}function rr(t){if(t.widgets)for(var e=0;e=o&&(a=oe(e,ci(ee(e,l))-t.wrapper.clientHeight),o=l)}return{from:a,to:Math.max(o,a+1)}}function or(t,e){if(!Ct(t,"scrollCursorIntoView")){var i=t.display,n=i.sizer.getBoundingClientRect(),r=null,a=i.wrapper.ownerDocument;if(e.top+n.top<0?r=!0:e.bottom+n.top>(a.defaultView.innerHeight||a.documentElement.clientHeight)&&(r=!1),null!=r&&!v){var o=E("div","​",null,"position: absolute;\n top: "+(e.top-i.viewOffset-Gi(t.display))+"px;\n height: "+(e.bottom-e.top+Zi(t)+i.barHeight)+"px;\n left: "+e.left+"px; width: "+Math.max(2,e.right-e.left)+"px;");t.display.lineSpace.appendChild(o),o.scrollIntoView(r),t.display.lineSpace.removeChild(o)}}}function sr(t,e,i,n){var r;null==n&&(n=0),t.options.lineWrapping||e!=i||(i="before"==e.sticky?ce(e.line,e.ch+1,"before"):e,e=e.ch?ce(e.line,"before"==e.sticky?e.ch-1:e.ch,"after"):e);for(var a=0;a<5;a++){var o=!1,s=Cn(t,e),l=i&&i!=e?Cn(t,i):s;r={left:Math.min(s.left,l.left),top:Math.min(s.top,l.top)-n,right:Math.max(s.left,l.left),bottom:Math.max(s.bottom,l.bottom)+n};var c=cr(t,r),u=t.doc.scrollTop,d=t.doc.scrollLeft;if(null!=c.scrollTop&&(gr(t,c.scrollTop),Math.abs(t.doc.scrollTop-u)>1&&(o=!0)),null!=c.scrollLeft&&(yr(t,c.scrollLeft),Math.abs(t.doc.scrollLeft-d)>1&&(o=!0)),!o)break}return r}function lr(t,e){var i=cr(t,e);null!=i.scrollTop&&gr(t,i.scrollTop),null!=i.scrollLeft&&yr(t,i.scrollLeft)}function cr(t,e){var i=t.display,n=Ln(t.display);e.top<0&&(e.top=0);var r=t.curOp&&null!=t.curOp.scrollTop?t.curOp.scrollTop:i.scroller.scrollTop,a=Qi(t),o={};e.bottom-e.top>a&&(e.bottom=e.top+a);var s=t.doc.height+ji(i),l=e.tops-n;if(e.topr+a){var u=Math.min(e.top,(c?s:e.bottom)-a);u!=r&&(o.scrollTop=u)}var d=t.options.fixedGutter?0:i.gutters.offsetWidth,h=t.curOp&&null!=t.curOp.scrollLeft?t.curOp.scrollLeft:i.scroller.scrollLeft-d,p=Ji(t)-i.gutters.offsetWidth,f=e.right-e.left>p;return f&&(e.right=e.left+p),e.left<10?o.scrollLeft=0:e.leftp+h-3&&(o.scrollLeft=e.right+(f?0:10)-p),o}function ur(t,e){null!=e&&(fr(t),t.curOp.scrollTop=(null==t.curOp.scrollTop?t.doc.scrollTop:t.curOp.scrollTop)+e)}function dr(t){fr(t);var e=t.getCursor();t.curOp.scrollToPos={from:e,to:e,margin:t.options.cursorScrollMargin}}function hr(t,e,i){null==e&&null==i||fr(t),null!=e&&(t.curOp.scrollLeft=e),null!=i&&(t.curOp.scrollTop=i)}function pr(t,e){fr(t),t.curOp.scrollToPos=e}function fr(t){var e=t.curOp.scrollToPos;if(e){t.curOp.scrollToPos=null;var i=Sn(t,e.from),n=Sn(t,e.to);vr(t,i,n,e.margin)}}function vr(t,e,i,n){var r=cr(t,{left:Math.min(e.left,i.left),top:Math.min(e.top,i.top)-n,right:Math.max(e.right,i.right),bottom:Math.max(e.bottom,i.bottom)+n});hr(t,r.scrollLeft,r.scrollTop)}function gr(t,e){Math.abs(t.doc.scrollTop-e)<2||(i||Ur(t,{top:e}),mr(t,e,!0),i&&Ur(t),zr(t,100))}function mr(t,e,i){e=Math.max(0,Math.min(t.display.scroller.scrollHeight-t.display.scroller.clientHeight,e)),(t.display.scroller.scrollTop!=e||i)&&(t.doc.scrollTop=e,t.display.scrollbars.setScrollTop(e),t.display.scroller.scrollTop!=e&&(t.display.scroller.scrollTop=e))}function yr(t,e,i,n){e=Math.max(0,Math.min(e,t.display.scroller.scrollWidth-t.display.scroller.clientWidth)),(i?e==t.doc.scrollLeft:Math.abs(t.doc.scrollLeft-e)<2)&&!n||(t.doc.scrollLeft=e,Zr(t),t.display.scroller.scrollLeft!=e&&(t.display.scroller.scrollLeft=e),t.display.scrollbars.setScrollLeft(e))}function br(t){var e=t.display,i=e.gutters.offsetWidth,n=Math.round(t.doc.height+ji(t.display));return{clientHeight:e.scroller.clientHeight,viewHeight:e.wrapper.clientHeight,scrollWidth:e.scroller.scrollWidth,clientWidth:e.scroller.clientWidth,viewWidth:e.wrapper.clientWidth,barLeft:t.options.fixedGutter?i:0,docHeight:n,scrollHeight:n+Zi(t)+e.barHeight,nativeBarWidth:e.nativeBarWidth,gutterWidth:i}}var xr=function(t,e,i){this.cm=i;var n=this.vert=E("div",[E("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),r=this.horiz=E("div",[E("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");n.tabIndex=r.tabIndex=-1,t(n),t(r),bt(n,"scroll",function(){n.clientHeight&&e(n.scrollTop,"vertical")}),bt(r,"scroll",function(){r.clientWidth&&e(r.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,o&&s<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};xr.prototype.update=function(t){var e=t.scrollWidth>t.clientWidth+1,i=t.scrollHeight>t.clientHeight+1,n=t.nativeBarWidth;if(i){this.vert.style.display="block",this.vert.style.bottom=e?n+"px":"0";var r=t.viewHeight-(e?n:0);this.vert.firstChild.style.height=Math.max(0,t.scrollHeight-t.clientHeight+r)+"px"}else this.vert.scrollTop=0,this.vert.style.display="",this.vert.firstChild.style.height="0";if(e){this.horiz.style.display="block",this.horiz.style.right=i?n+"px":"0",this.horiz.style.left=t.barLeft+"px";var a=t.viewWidth-t.barLeft-(i?n:0);this.horiz.firstChild.style.width=Math.max(0,t.scrollWidth-t.clientWidth+a)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&t.clientHeight>0&&(0==n&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:i?n:0,bottom:e?n:0}},xr.prototype.setScrollLeft=function(t){this.horiz.scrollLeft!=t&&(this.horiz.scrollLeft=t),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},xr.prototype.setScrollTop=function(t){this.vert.scrollTop!=t&&(this.vert.scrollTop=t),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},xr.prototype.zeroWidthHack=function(){var t=b&&!f?"12px":"18px";this.horiz.style.height=this.vert.style.width=t,this.horiz.style.visibility=this.vert.style.visibility="hidden",this.disableHoriz=new K,this.disableVert=new K},xr.prototype.enableZeroWidthBar=function(t,e,i){function n(){var r=t.getBoundingClientRect(),a="vert"==i?document.elementFromPoint(r.right-1,(r.top+r.bottom)/2):document.elementFromPoint((r.right+r.left)/2,r.bottom-1);a!=t?t.style.visibility="hidden":e.set(1e3,n)}t.style.visibility="",e.set(1e3,n)},xr.prototype.clear=function(){var t=this.horiz.parentNode;t.removeChild(this.horiz),t.removeChild(this.vert)};var _r=function(){};function wr(t,e){e||(e=br(t));var i=t.display.barWidth,n=t.display.barHeight;Cr(t,e);for(var r=0;r<4&&i!=t.display.barWidth||n!=t.display.barHeight;r++)i!=t.display.barWidth&&t.options.lineWrapping&&nr(t),Cr(t,br(t)),i=t.display.barWidth,n=t.display.barHeight}function Cr(t,e){var i=t.display,n=i.scrollbars.update(e);i.sizer.style.paddingRight=(i.barWidth=n.right)+"px",i.sizer.style.paddingBottom=(i.barHeight=n.bottom)+"px",i.heightForcer.style.borderBottom=n.bottom+"px solid transparent",n.right&&n.bottom?(i.scrollbarFiller.style.display="block",i.scrollbarFiller.style.height=n.bottom+"px",i.scrollbarFiller.style.width=n.right+"px"):i.scrollbarFiller.style.display="",n.bottom&&t.options.coverGutterNextToScrollbar&&t.options.fixedGutter?(i.gutterFiller.style.display="block",i.gutterFiller.style.height=n.bottom+"px",i.gutterFiller.style.width=e.gutterWidth+"px"):i.gutterFiller.style.display=""}_r.prototype.update=function(){return{bottom:0,right:0}},_r.prototype.setScrollLeft=function(){},_r.prototype.setScrollTop=function(){},_r.prototype.clear=function(){};var Sr={native:xr,null:_r};function kr(t){t.display.scrollbars&&(t.display.scrollbars.clear(),t.display.scrollbars.addClass&&T(t.display.wrapper,t.display.scrollbars.addClass)),t.display.scrollbars=new Sr[t.options.scrollbarStyle](function(e){t.display.wrapper.insertBefore(e,t.display.scrollbarFiller),bt(e,"mousedown",function(){t.state.focused&&setTimeout(function(){return t.display.input.focus()},0)}),e.setAttribute("cm-not-content","true")},function(e,i){"horizontal"==i?yr(t,e):gr(t,e)},t),t.display.scrollbars.addClass&&R(t.display.wrapper,t.display.scrollbars.addClass)}var Ar=0;function Tr(t){t.curOp={cm:t,viewChanged:!1,startHeight:t.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Ar,markArrays:null},Mi(t.curOp)}function Mr(t){var e=t.curOp;e&&Ei(e,function(t){for(var e=0;e=i.viewTo)||i.maxLineChanged&&e.options.lineWrapping,t.update=t.mustUpdate&&new Vr(e,t.mustUpdate&&{top:t.scrollTop,ensure:t.scrollToPos},t.forceUpdate)}function Dr(t){t.updatedDisplay=t.mustUpdate&&Yr(t.cm,t.update)}function Pr(t){var e=t.cm,i=e.display;t.updatedDisplay&&nr(e),t.barMeasure=br(e),i.maxLineChanged&&!e.options.lineWrapping&&(t.adjustWidthTo=rn(e,i.maxLine,i.maxLine.text.length).left+3,e.display.sizerWidth=t.adjustWidthTo,t.barMeasure.scrollWidth=Math.max(i.scroller.clientWidth,i.sizer.offsetLeft+t.adjustWidthTo+Zi(e)+e.display.barWidth),t.maxScrollLeft=Math.max(0,i.sizer.offsetLeft+t.adjustWidthTo-Ji(e))),(t.updatedDisplay||t.selectionChanged)&&(t.preparedSelection=i.input.prepareSelection())}function Lr(t){var e=t.cm;null!=t.adjustWidthTo&&(e.display.sizer.style.minWidth=t.adjustWidthTo+"px",t.maxScrollLeft=t.display.viewTo)){var i=+new Date+t.options.workTime,n=Ce(t,e.highlightFrontier),r=[];e.iter(n.line,Math.min(e.first+e.size,t.display.viewTo+500),function(a){if(n.line>=t.display.viewFrom){var o=a.styles,s=a.text.length>t.options.maxHighlightLength?Zt(e.mode,n.state):null,l=_e(t,a,n,!0);s&&(n.state=s),a.styles=l.styles;var c=a.styleClasses,u=l.classes;u?a.styleClasses=u:c&&(a.styleClasses=null);for(var d=!o||o.length!=a.styles.length||c!=u&&(!c||!u||c.bgClass!=u.bgClass||c.textClass!=u.textClass),h=0;!d&&hi)return zr(t,t.options.workDelay),!0}),e.highlightFrontier=n.line,e.modeFrontier=Math.max(e.modeFrontier,n.line),r.length&&Fr(t,function(){for(var e=0;e=i.viewFrom&&e.visible.to<=i.viewTo&&(null==i.updateLineNumbers||i.updateLineNumbers>=i.viewTo)&&i.renderedView==i.view&&0==Xn(t))return!1;Jr(t)&&(Hn(t),e.dims=Fn(t));var r=n.first+n.size,a=Math.max(e.visible.from-t.options.viewportMargin,n.first),o=Math.min(r,e.visible.to+t.options.viewportMargin);i.viewFromo&&i.viewTo-o<20&&(o=Math.min(r,i.viewTo)),Re&&(a=ai(t.doc,a),o=oi(t.doc,o));var s=a!=i.viewFrom||o!=i.viewTo||i.lastWrapHeight!=e.wrapperHeight||i.lastWrapWidth!=e.wrapperWidth;Yn(t,a,o),i.viewOffset=ci(ee(t.doc,i.viewFrom)),t.display.mover.style.top=i.viewOffset+"px";var l=Xn(t);if(!s&&0==l&&!e.force&&i.renderedView==i.view&&(null==i.updateLineNumbers||i.updateLineNumbers>=i.viewTo))return!1;var c=Hr(t);return l>4&&(i.lineDiv.style.display="none"),Gr(t,i.updateLineNumbers,e.dims),l>4&&(i.lineDiv.style.display=""),i.renderedView=i.view,Kr(c),M(i.cursorDiv),M(i.selectionDiv),i.gutters.style.height=i.sizer.style.minHeight=0,s&&(i.lastWrapHeight=e.wrapperHeight,i.lastWrapWidth=e.wrapperWidth,zr(t,400)),i.updateLineNumbers=null,!0}function Xr(t,e){for(var i=e.viewport,n=!0;;n=!1){if(n&&t.options.lineWrapping&&e.oldDisplayWidth!=Ji(t))n&&(e.visible=ar(t.display,t.doc,i));else if(i&&null!=i.top&&(i={top:Math.min(t.doc.height+ji(t.display)-Qi(t),i.top)}),e.visible=ar(t.display,t.doc,i),e.visible.from>=t.display.viewFrom&&e.visible.to<=t.display.viewTo)break;if(!Yr(t,e))break;nr(t);var r=br(t);Un(t),wr(t,r),qr(t,r),e.force=!1}e.signal(t,"update",t),t.display.viewFrom==t.display.reportedViewFrom&&t.display.viewTo==t.display.reportedViewTo||(e.signal(t,"viewportChange",t,t.display.viewFrom,t.display.viewTo),t.display.reportedViewFrom=t.display.viewFrom,t.display.reportedViewTo=t.display.viewTo)}function Ur(t,e){var i=new Vr(t,e);if(Yr(t,i)){nr(t),Xr(t,i);var n=br(t);Un(t),wr(t,n),qr(t,n),i.finish()}}function Gr(t,e,i){var n=t.display,r=t.options.lineNumbers,a=n.lineDiv,o=a.firstChild;function s(e){var i=e.nextSibling;return l&&b&&t.display.currentWheelTarget==e?e.style.display="none":e.parentNode.removeChild(e),i}for(var c=n.view,u=n.viewFrom,d=0;d-1&&(p=!1),Ri(t,h,u,i)),p&&(M(h.lineNumber),h.lineNumber.appendChild(document.createTextNode(le(t.options,u)))),o=h.node.nextSibling}else{var f=$i(t,h,u,i);a.insertBefore(f,o)}u+=h.size}while(o)o=s(o)}function jr(t){var e=t.gutters.offsetWidth;t.sizer.style.marginLeft=e+"px",Pi(t,"gutterChanged",t)}function qr(t,e){t.display.sizer.style.minHeight=e.docHeight+"px",t.display.heightForcer.style.top=e.docHeight+"px",t.display.gutters.style.height=e.docHeight+t.display.barHeight+Zi(t)+"px"}function Zr(t){var e=t.display,i=e.view;if(e.alignWidgets||e.gutters.firstChild&&t.options.fixedGutter){for(var n=Bn(e)-e.scroller.scrollLeft+t.doc.scrollLeft,r=e.gutters.offsetWidth,a=n+"px",o=0;oc.clientWidth,f=c.scrollHeight>c.clientHeight;if(r&&p||a&&f){if(a&&b&&l)t:for(var v=e.target,g=s.view;v!=c;v=v.parentNode)for(var m=0;m=0&&ue(t,n.to())<=0)return i}return-1};var ca=function(t,e){this.anchor=t,this.head=e};function ua(t,e,i){var n=t&&t.options.selectionsMayTouch,r=e[i];e.sort(function(t,e){return ue(t.from(),e.from())}),i=Y(e,r);for(var a=1;a0:l>=0){var c=fe(s.from(),o.from()),u=pe(s.to(),o.to()),d=s.empty()?o.from()==o.head:s.from()==s.head;a<=i&&--i,e.splice(--a,2,new ca(d?u:c,d?c:u))}}return new la(e,i)}function da(t,e){return new la([new ca(t,e||t)],0)}function ha(t){return t.text?ce(t.from.line+t.text.length-1,tt(t.text).length+(1==t.text.length?t.from.ch:0)):t.to}function pa(t,e){if(ue(t,e.from)<0)return t;if(ue(t,e.to)<=0)return ha(e);var i=t.line+e.text.length-(e.to.line-e.from.line)-1,n=t.ch;return t.line==e.to.line&&(n+=ha(e).ch-e.to.ch),ce(i,n)}function fa(t,e){for(var i=[],n=0;n1&&t.remove(s.line+1,f-1),t.insert(s.line+1,m)}Pi(t,"change",t,e)}function _a(t,e,i){function n(t,r,a){if(t.linked)for(var o=0;o1&&!t.done[t.done.length-2].ranges?(t.done.pop(),tt(t.done)):void 0}function Ia(t,e,i,n){var r=t.history;r.undone.length=0;var a,o,s=+new Date;if((r.lastOp==n||r.lastOrigin==e.origin&&e.origin&&("+"==e.origin.charAt(0)&&r.lastModTime>s-(t.cm?t.cm.options.historyEventDelay:500)||"*"==e.origin.charAt(0)))&&(a=Ma(r,r.lastOp==n)))o=tt(a.changes),0==ue(e.from,e.to)&&0==ue(e.from,o.to)?o.to=ha(e):a.changes.push(Aa(t,e));else{var l=tt(r.done);l&&l.ranges||Pa(t.sel,r.done),a={changes:[Aa(t,e)],generation:r.generation},r.done.push(a);while(r.done.length>r.undoDepth)r.done.shift(),r.done[0].ranges||r.done.shift()}r.done.push(i),r.generation=++r.maxGeneration,r.lastModTime=r.lastSelTime=s,r.lastOp=r.lastSelOp=n,r.lastOrigin=r.lastSelOrigin=e.origin,o||wt(t,"historyAdded")}function Ea(t,e,i,n){var r=e.charAt(0);return"*"==r||"+"==r&&i.ranges.length==n.ranges.length&&i.somethingSelected()==n.somethingSelected()&&new Date-t.history.lastSelTime<=(t.cm?t.cm.options.historyEventDelay:500)}function Da(t,e,i,n){var r=t.history,a=n&&n.origin;i==r.lastSelOp||a&&r.lastSelOrigin==a&&(r.lastModTime==r.lastSelTime&&r.lastOrigin==a||Ea(t,a,tt(r.done),e))?r.done[r.done.length-1]=e:Pa(e,r.done),r.lastSelTime=+new Date,r.lastSelOrigin=a,r.lastSelOp=i,n&&!1!==n.clearRedo&&Ta(r.undone)}function Pa(t,e){var i=tt(e);i&&i.ranges&&i.equals(t)||e.push(t)}function La(t,e,i,n){var r=e["spans_"+t.id],a=0;t.iter(Math.max(t.first,i),Math.min(t.first+t.size,n),function(i){i.markedSpans&&((r||(r=e["spans_"+t.id]={}))[a]=i.markedSpans),++a})}function Ra(t){if(!t)return null;for(var e,i=0;i-1&&(tt(s)[d]=c[d],delete c[d])}}}return n}function Oa(t,e,i,n){if(n){var r=t.anchor;if(i){var a=ue(e,r)<0;a!=ue(i,r)<0?(r=e,e=i):a!=ue(e,i)<0&&(e=i)}return new ca(r,e)}return new ca(i||e,e)}function za(t,e,i,n,r){null==r&&(r=t.cm&&(t.cm.display.shift||t.extend)),Ya(t,new la([Oa(t.sel.primary(),e,i,r)],0),n)}function Wa(t,e,i){for(var n=[],r=t.cm&&(t.cm.display.shift||t.extend),a=0;a=e.ch:s.to>e.ch))){if(r&&(wt(l,"beforeCursorEnter"),l.explicitlyCleared)){if(a.markedSpans){--o;continue}break}if(!l.atomic)continue;if(i){var d=l.find(n<0?1:-1),h=void 0;if((n<0?u:c)&&(d=Ja(t,d,-n,d&&d.line==e.line?a:null)),d&&d.line==e.line&&(h=ue(d,i))&&(n<0?h<0:h>0))return qa(t,d,e,n,r)}var p=l.find(n<0?-1:1);return(n<0?c:u)&&(p=Ja(t,p,n,p.line==e.line?a:null)),p?qa(t,p,e,n,r):null}}return e}function Za(t,e,i,n,r){var a=n||1,o=qa(t,e,i,a,r)||!r&&qa(t,e,i,a,!0)||qa(t,e,i,-a,r)||!r&&qa(t,e,i,-a,!0);return o||(t.cantEdit=!0,ce(t.first,0))}function Ja(t,e,i,n){return i<0&&0==e.ch?e.line>t.first?ge(t,ce(e.line-1)):null:i>0&&e.ch==(n||ee(t,e.line)).text.length?e.line=0;--r)io(t,{from:n[r].from,to:n[r].to,text:r?[""]:e.text,origin:e.origin});else io(t,e)}}function io(t,e){if(1!=e.text.length||""!=e.text[0]||0!=ue(e.from,e.to)){var i=fa(t,e);Ia(t,e,i,t.cm?t.cm.curOp.id:NaN),ao(t,e,i,He(t,e));var n=[];_a(t,function(t,i){i||-1!=Y(n,t.history)||(uo(t.history,e),n.push(t.history)),ao(t,e,null,He(t,e))})}}function no(t,e,i){var n=t.cm&&t.cm.state.suppressEdits;if(!n||i){for(var r,a=t.history,o=t.sel,s="undo"==e?a.done:a.undone,l="undo"==e?a.undone:a.done,c=0;c=0;--p){var f=h(p);if(f)return f.v}}}}function ro(t,e){if(0!=e&&(t.first+=e,t.sel=new la(et(t.sel.ranges,function(t){return new ca(ce(t.anchor.line+e,t.anchor.ch),ce(t.head.line+e,t.head.ch))}),t.sel.primIndex),t.cm)){Vn(t.cm,t.first,t.first-e,e);for(var i=t.cm.display,n=i.viewFrom;nt.lastLine())){if(e.from.linea&&(e={from:e.from,to:ce(a,ee(t,a).text.length),text:[e.text[0]],origin:e.origin}),e.removed=ie(t,e.from,e.to),i||(i=fa(t,e)),t.cm?oo(t.cm,e,n):xa(t,e,n),Xa(t,i,G),t.cantEdit&&Za(t,ce(t.firstLine(),0))&&(t.cantEdit=!1)}}function oo(t,e,i){var n=t.doc,r=t.display,a=e.from,o=e.to,s=!1,l=a.line;t.options.lineWrapping||(l=ae(ii(ee(n,a.line))),n.iter(l,o.line+1,function(t){if(t==r.maxLine)return s=!0,!0})),n.sel.contains(e.from,e.to)>-1&&St(t),xa(n,e,i,Nn(t)),t.options.lineWrapping||(n.iter(l,a.line+e.text.length,function(t){var e=ui(t);e>r.maxLineLength&&(r.maxLine=t,r.maxLineLength=e,r.maxLineChanged=!0,s=!1)}),s&&(t.curOp.updateMaxLine=!0)),Pe(n,a.line),zr(t,400);var c=e.text.length-(o.line-a.line)-1;e.full?Vn(t):a.line!=o.line||1!=e.text.length||ba(t.doc,e)?Vn(t,a.line,o.line+1,c):$n(t,a.line,"text");var u=kt(t,"changes"),d=kt(t,"change");if(d||u){var h={from:a,to:o,text:e.text,removed:e.removed,origin:e.origin};d&&Pi(t,"change",t,h),u&&(t.curOp.changeObjs||(t.curOp.changeObjs=[])).push(h)}t.display.selForContextMenu=null}function so(t,e,i,n,r){var a;n||(n=i),ue(n,i)<0&&(a=[n,i],i=a[0],n=a[1]),"string"==typeof e&&(e=t.splitLines(e)),eo(t,{from:i,to:n,text:e,origin:r})}function lo(t,e,i,n){i1||!(this.children[0]instanceof po))){var s=[];this.collapse(s),this.children=[new po(s)],this.children[0].parent=this}},collapse:function(t){for(var e=0;e50){for(var o=r.lines.length%25+25,s=o;s10);t.parent.maybeSpill()}},iterN:function(t,e,i){for(var n=0;n0||0==o&&!1!==a.clearWhenEmpty)return a;if(a.replacedWith&&(a.collapsed=!0,a.widgetNode=D("span",[a.replacedWith],"CodeMirror-widget"),n.handleMouseEvents||a.widgetNode.setAttribute("cm-ignore-events","true"),n.insertLeft&&(a.widgetNode.insertLeft=!0)),a.collapsed){if(ei(t,e.line,e,i,a)||e.line!=i.line&&ei(t,i.line,e,i,a))throw new Error("Inserting collapsed marker partially overlapping an existing one");Be()}a.addToHistory&&Ia(t,{from:e,to:i,origin:"markText"},t.sel,NaN);var s,l=e.line,c=t.cm;if(t.iter(l,i.line+1,function(n){c&&a.collapsed&&!c.options.lineWrapping&&ii(n)==c.display.maxLine&&(s=!0),a.collapsed&&l!=e.line&&re(n,0),We(n,new Ne(a,l==e.line?e.ch:null,l==i.line?i.ch:null),t.cm&&t.cm.curOp),++l}),a.collapsed&&t.iter(e.line,i.line+1,function(e){si(t,e)&&re(e,0)}),a.clearOnEnter&&bt(a,"beforeCursorEnter",function(){return a.clear()}),a.readOnly&&(Fe(),(t.history.done.length||t.history.undone.length)&&t.clearHistory()),a.collapsed&&(a.id=++yo,a.atomic=!0),c){if(s&&(c.curOp.updateMaxLine=!0),a.collapsed)Vn(c,e.line,i.line+1);else if(a.className||a.startStyle||a.endStyle||a.css||a.attributes||a.title)for(var u=e.line;u<=i.line;u++)$n(c,u,"text");a.atomic&&Ga(c.doc),Pi(c,"markerAdded",c,a)}return a}bo.prototype.clear=function(){if(!this.explicitlyCleared){var t=this.doc.cm,e=t&&!t.curOp;if(e&&Tr(t),kt(this,"clear")){var i=this.find();i&&Pi(this,"clear",i.from,i.to)}for(var n=null,r=null,a=0;at.display.maxLineLength&&(t.display.maxLine=c,t.display.maxLineLength=u,t.display.maxLineChanged=!0)}null!=n&&t&&this.collapsed&&Vn(t,n,r+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,t&&Ga(t.doc)),t&&Pi(t,"markerCleared",t,this,n,r),e&&Mr(t),this.parent&&this.parent.clear()}},bo.prototype.find=function(t,e){var i,n;null==t&&"bookmark"==this.type&&(t=1);for(var r=0;r=0;l--)eo(this,n[l]);s?Ka(this,s):this.cm&&dr(this.cm)}),undo:Or(function(){no(this,"undo")}),redo:Or(function(){no(this,"redo")}),undoSelection:Or(function(){no(this,"undo",!0)}),redoSelection:Or(function(){no(this,"redo",!0)}),setExtending:function(t){this.extend=t},getExtending:function(){return this.extend},historySize:function(){for(var t=this.history,e=0,i=0,n=0;n=t.ch)&&e.push(r.marker.parent||r.marker)}return e},findMarks:function(t,e,i){t=ge(this,t),e=ge(this,e);var n=[],r=t.line;return this.iter(t.line,e.line+1,function(a){var o=a.markedSpans;if(o)for(var s=0;s=l.to||null==l.from&&r!=t.line||null!=l.from&&r==e.line&&l.from>=e.ch||i&&!i(l.marker)||n.push(l.marker.parent||l.marker)}++r}),n},getAllMarks:function(){var t=[];return this.iter(function(e){var i=e.markedSpans;if(i)for(var n=0;nt)return e=t,!0;t-=a,++i}),ge(this,ce(i,e))},indexFromPos:function(t){t=ge(this,t);var e=t.ch;if(t.linee&&(e=t.from),null!=t.to&&t.to-1)return e.state.draggingText(t),void setTimeout(function(){return e.display.input.focus()},20);try{var d=t.dataTransfer.getData("Text");if(d){var h;if(e.state.draggingText&&!e.state.draggingText.copy&&(h=e.listSelections()),Xa(e.doc,da(i,i)),h)for(var p=0;p=0;e--)so(t.doc,"",n[e].from,n[e].to,"+delete");dr(t)})}function Zo(t,e,i){var n=dt(t.text,e+i,i);return n<0||n>t.text.length?null:n}function Jo(t,e,i){var n=Zo(t,e.ch,i);return null==n?null:new ce(e.line,n,i<0?"after":"before")}function Qo(t,e,i,n,r){if(t){"rtl"==e.doc.direction&&(r=-r);var a=mt(i,e.doc.direction);if(a){var o,s=r<0?tt(a):a[0],l=r<0==(1==s.level),c=l?"after":"before";if(s.level>0||"rtl"==e.doc.direction){var u=on(e,i);o=r<0?i.text.length-1:0;var d=sn(e,u,o).top;o=ht(function(t){return sn(e,u,t).top==d},r<0==(1==s.level)?s.from:s.to-1,o),"before"==c&&(o=Zo(i,o,1))}else o=r<0?s.to:s.from;return new ce(n,o,c)}}return new ce(n,r<0?i.text.length:0,r<0?"before":"after")}function ts(t,e,i,n){var r=mt(e,t.doc.direction);if(!r)return Jo(e,i,n);i.ch>=e.text.length?(i.ch=e.text.length,i.sticky="before"):i.ch<=0&&(i.ch=0,i.sticky="after");var a=vt(r,i.ch,i.sticky),o=r[a];if("ltr"==t.doc.direction&&o.level%2==0&&(n>0?o.to>i.ch:o.from=o.from&&h>=u.begin)){var p=d?"before":"after";return new ce(i.line,h,p)}}var f=function(t,e,n){for(var a=function(t,e){return e?new ce(i.line,l(t,1),"before"):new ce(i.line,t,"after")};t>=0&&t0==(1!=o.level),c=s?n.begin:l(n.end,-1);if(o.from<=c&&c0?u.end:l(u.begin,-1);return null==g||n>0&&g==e.text.length||(v=f(n>0?0:r.length-1,n,c(g)),!v)?null:v}$o.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},$o.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},$o.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},$o.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},$o["default"]=b?$o.macDefault:$o.pcDefault;var es={selectAll:Qa,singleSelection:function(t){return t.setSelection(t.getCursor("anchor"),t.getCursor("head"),G)},killLine:function(t){return qo(t,function(e){if(e.empty()){var i=ee(t.doc,e.head.line).text.length;return e.head.ch==i&&e.head.line0)r=new ce(r.line,r.ch+1),t.replaceRange(a.charAt(r.ch-1)+a.charAt(r.ch-2),ce(r.line,r.ch-2),r,"+transpose");else if(r.line>t.doc.first){var o=ee(t.doc,r.line-1).text;o&&(r=new ce(r.line,1),t.replaceRange(a.charAt(0)+t.doc.lineSeparator()+o.charAt(o.length-1),ce(r.line-1,o.length-1),r,"+transpose"))}i.push(new ca(r,r))}t.setSelections(i)})},newlineAndIndent:function(t){return Fr(t,function(){for(var e=t.listSelections(),i=e.length-1;i>=0;i--)t.replaceRange(t.doc.lineSeparator(),e[i].anchor,e[i].head,"+input");e=t.listSelections();for(var n=0;n-1&&(ue((r=s.ranges[r]).from(),e)<0||e.xRel>0)&&(ue(r.to(),e)>0||e.xRel<0)?As(t,n,e,a):Ms(t,n,e,a)}function As(t,e,i,n){var r=t.display,a=!1,c=Br(t,function(e){l&&(r.scroller.draggable=!1),t.state.draggingText=!1,t.state.delayingBlurEvent&&(t.hasFocus()?t.state.delayingBlurEvent=!1:tr(t)),_t(r.wrapper.ownerDocument,"mouseup",c),_t(r.wrapper.ownerDocument,"mousemove",u),_t(r.scroller,"dragstart",d),_t(r.scroller,"drop",c),a||(Tt(e),n.addNew||za(t.doc,i,null,null,n.extend),l&&!p||o&&9==s?setTimeout(function(){r.wrapper.ownerDocument.body.focus({preventScroll:!0}),r.input.focus()},20):r.input.focus())}),u=function(t){a=a||Math.abs(e.clientX-t.clientX)+Math.abs(e.clientY-t.clientY)>=10},d=function(){return a=!0};l&&(r.scroller.draggable=!0),t.state.draggingText=c,c.copy=!n.moveOnDrag,bt(r.wrapper.ownerDocument,"mouseup",c),bt(r.wrapper.ownerDocument,"mousemove",u),bt(r.scroller,"dragstart",d),bt(r.scroller,"drop",c),t.state.delayingBlurEvent=!0,setTimeout(function(){return r.input.focus()},20),r.scroller.dragDrop&&r.scroller.dragDrop()}function Ts(t,e,i){if("char"==i)return new ca(e,e);if("word"==i)return t.findWordAt(e);if("line"==i)return new ca(ce(e.line,0),ge(t.doc,ce(e.line+1,0)));var n=i(t,e);return new ca(n.from,n.to)}function Ms(t,e,i,n){o&&tr(t);var r=t.display,a=t.doc;Tt(e);var s,l,c=a.sel,u=c.ranges;if(n.addNew&&!n.extend?(l=a.sel.contains(i),s=l>-1?u[l]:new ca(i,i)):(s=a.sel.primary(),l=a.sel.primIndex),"rectangle"==n.unit)n.addNew||(s=new ca(i,i)),i=zn(t,e,!0,!0),l=-1;else{var d=Ts(t,i,n.unit);s=n.extend?Oa(s,d.anchor,d.head,n.extend):d}n.addNew?-1==l?(l=u.length,Ya(a,ua(t,u.concat([s]),l),{scroll:!1,origin:"*mouse"})):u.length>1&&u[l].empty()&&"char"==n.unit&&!n.extend?(Ya(a,ua(t,u.slice(0,l).concat(u.slice(l+1)),0),{scroll:!1,origin:"*mouse"}),c=a.sel):Va(a,l,s,j):(l=0,Ya(a,new la([s],0),j),c=a.sel);var h=i;function p(e){if(0!=ue(h,e))if(h=e,"rectangle"==n.unit){for(var r=[],o=t.options.tabSize,u=H(ee(a,i.line).text,i.ch,o),d=H(ee(a,e.line).text,e.ch,o),p=Math.min(u,d),f=Math.max(u,d),v=Math.min(i.line,e.line),g=Math.min(t.lastLine(),Math.max(i.line,e.line));v<=g;v++){var m=ee(a,v).text,y=Z(m,p,o);p==f?r.push(new ca(ce(v,y),ce(v,y))):m.length>y&&r.push(new ca(ce(v,y),ce(v,Z(m,f,o))))}r.length||r.push(new ca(i,i)),Ya(a,ua(t,c.ranges.slice(0,l).concat(r),l),{origin:"*mouse",scroll:!1}),t.scrollIntoView(e)}else{var b,x=s,_=Ts(t,e,n.unit),w=x.anchor;ue(_.anchor,w)>0?(b=_.head,w=fe(x.from(),_.anchor)):(b=_.anchor,w=pe(x.to(),_.head));var C=c.ranges.slice(0);C[l]=Is(t,new ca(ge(a,w),b)),Ya(a,ua(t,C,l),j)}}var f=r.wrapper.getBoundingClientRect(),v=0;function g(e){var i=++v,o=zn(t,e,!0,"rectangle"==n.unit);if(o)if(0!=ue(o,h)){t.curOp.focus=L(O(t)),p(o);var s=ar(r,a);(o.line>=s.to||o.linef.bottom?20:0;l&&setTimeout(Br(t,function(){v==i&&(r.scroller.scrollTop+=l,g(e))}),50)}}function m(e){t.state.selectingText=!1,v=1/0,e&&(Tt(e),r.input.focus()),_t(r.wrapper.ownerDocument,"mousemove",y),_t(r.wrapper.ownerDocument,"mouseup",b),a.history.lastSelOrigin=null}var y=Br(t,function(t){0!==t.buttons&&Pt(t)?g(t):m(t)}),b=Br(t,m);t.state.selectingText=b,bt(r.wrapper.ownerDocument,"mousemove",y),bt(r.wrapper.ownerDocument,"mouseup",b)}function Is(t,e){var i=e.anchor,n=e.head,r=ee(t.doc,i.line);if(0==ue(i,n)&&i.sticky==n.sticky)return e;var a=mt(r);if(!a)return e;var o=vt(a,i.ch,i.sticky),s=a[o];if(s.from!=i.ch&&s.to!=i.ch)return e;var l,c=o+(s.from==i.ch==(1!=s.level)?0:1);if(0==c||c==a.length)return e;if(n.line!=i.line)l=(n.line-i.line)*("ltr"==t.doc.direction?1:-1)>0;else{var u=vt(a,n.ch,n.sticky),d=u-o||(n.ch-i.ch)*(1==s.level?-1:1);l=u==c-1||u==c?d<0:d>0}var h=a[c+(l?-1:0)],p=l==(1==h.level),f=p?h.from:h.to,v=p?"after":"before";return i.ch==f&&i.sticky==v?e:new ca(new ce(i.line,f,v),n)}function Es(t,e,i,n){var r,a;if(e.touches)r=e.touches[0].clientX,a=e.touches[0].clientY;else try{r=e.clientX,a=e.clientY}catch(h){return!1}if(r>=Math.floor(t.display.gutters.getBoundingClientRect().right))return!1;n&&Tt(e);var o=t.display,s=o.lineDiv.getBoundingClientRect();if(a>s.bottom||!kt(t,i))return It(e);a-=s.top-o.viewOffset;for(var l=0;l=r){var u=oe(t.doc,a),d=t.display.gutterSpecs[l];return wt(t,i,t,u,d.className,e),It(e)}}}function Ds(t,e){return Es(t,e,"gutterClick",!0)}function Ps(t,e){Ui(t.display,e)||Ls(t,e)||Ct(t,e,"contextmenu")||S||t.display.input.onContextMenu(e)}function Ls(t,e){return!!kt(t,"gutterContextMenu")&&Es(t,e,"gutterContextMenu",!1)}function Rs(t){t.display.wrapper.className=t.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+t.options.theme.replace(/(^|\s)\s*/g," cm-s-"),gn(t)}xs.prototype.compare=function(t,e,i){return this.time+bs>t&&0==ue(e,this.pos)&&i==this.button};var Fs={toString:function(){return"CodeMirror.Init"}},Bs={},Ns={};function Os(t){var e=t.optionHandlers;function i(i,n,r,a){t.defaults[i]=n,r&&(e[i]=a?function(t,e,i){i!=Fs&&r(t,e,i)}:r)}t.defineOption=i,t.Init=Fs,i("value","",function(t,e){return t.setValue(e)},!0),i("mode",null,function(t,e){t.doc.modeOption=e,ma(t)},!0),i("indentUnit",2,ma,!0),i("indentWithTabs",!1),i("smartIndent",!0),i("tabSize",4,function(t){ya(t),gn(t),Vn(t)},!0),i("lineSeparator",null,function(t,e){if(t.doc.lineSep=e,e){var i=[],n=t.doc.first;t.doc.iter(function(t){for(var r=0;;){var a=t.text.indexOf(e,r);if(-1==a)break;r=a+e.length,i.push(ce(n,a))}n++});for(var r=i.length-1;r>=0;r--)so(t.doc,e,i[r],ce(i[r].line,i[r].ch+e.length))}}),i("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\u202d\u202e\u2066\u2067\u2069\ufeff\ufff9-\ufffc]/g,function(t,e,i){t.state.specialChars=new RegExp(e.source+(e.test("\t")?"":"|\t"),"g"),i!=Fs&&t.refresh()}),i("specialCharPlaceholder",bi,function(t){return t.refresh()},!0),i("electricChars",!0),i("inputStyle",y?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),i("spellcheck",!1,function(t,e){return t.getInputField().spellcheck=e},!0),i("autocorrect",!1,function(t,e){return t.getInputField().autocorrect=e},!0),i("autocapitalize",!1,function(t,e){return t.getInputField().autocapitalize=e},!0),i("rtlMoveVisually",!_),i("wholeLineUpdateBefore",!0),i("theme","default",function(t){Rs(t),ea(t)},!0),i("keyMap","default",function(t,e,i){var n=jo(e),r=i!=Fs&&jo(i);r&&r.detach&&r.detach(t,n),n.attach&&n.attach(t,r||null)}),i("extraKeys",null),i("configureMouse",null),i("lineWrapping",!1,Ws,!0),i("gutters",[],function(t,e){t.display.gutterSpecs=Qr(e,t.options.lineNumbers),ea(t)},!0),i("fixedGutter",!0,function(t,e){t.display.gutters.style.left=e?Bn(t.display)+"px":"0",t.refresh()},!0),i("coverGutterNextToScrollbar",!1,function(t){return wr(t)},!0),i("scrollbarStyle","native",function(t){kr(t),wr(t),t.display.scrollbars.setScrollTop(t.doc.scrollTop),t.display.scrollbars.setScrollLeft(t.doc.scrollLeft)},!0),i("lineNumbers",!1,function(t,e){t.display.gutterSpecs=Qr(t.options.gutters,e),ea(t)},!0),i("firstLineNumber",1,ea,!0),i("lineNumberFormatter",function(t){return t},ea,!0),i("showCursorWhenSelecting",!1,Un,!0),i("resetSelectionOnContextMenu",!0),i("lineWiseCopyCut",!0),i("pasteLinesPerSelection",!0),i("selectionsMayTouch",!1),i("readOnly",!1,function(t,e){"nocursor"==e&&(ir(t),t.display.input.blur()),t.display.input.readOnlyChanged(e)}),i("screenReaderLabel",null,function(t,e){e=""===e?null:e,t.display.input.screenReaderLabelChanged(e)}),i("disableInput",!1,function(t,e){e||t.display.input.reset()},!0),i("dragDrop",!0,zs),i("allowDropFileTypes",null),i("cursorBlinkRate",530),i("cursorScrollMargin",0),i("cursorHeight",1,Un,!0),i("singleCursorHeightPerLine",!0,Un,!0),i("workTime",100),i("workDelay",100),i("flattenSpans",!0,ya,!0),i("addModeClass",!1,ya,!0),i("pollInterval",100),i("undoDepth",200,function(t,e){return t.doc.history.undoDepth=e}),i("historyEventDelay",1250),i("viewportMargin",10,function(t){return t.refresh()},!0),i("maxHighlightLength",1e4,ya,!0),i("moveInputWithCursor",!0,function(t,e){e||t.display.input.resetPosition()}),i("tabindex",null,function(t,e){return t.display.input.getField().tabIndex=e||""}),i("autofocus",null),i("direction","ltr",function(t,e){return t.doc.setDirection(e)},!0),i("phrases",null)}function zs(t,e,i){var n=i&&i!=Fs;if(!e!=!n){var r=t.display.dragFunctions,a=e?bt:_t;a(t.display.scroller,"dragstart",r.start),a(t.display.scroller,"dragenter",r.enter),a(t.display.scroller,"dragover",r.over),a(t.display.scroller,"dragleave",r.leave),a(t.display.scroller,"drop",r.drop)}}function Ws(t){t.options.lineWrapping?(R(t.display.wrapper,"CodeMirror-wrap"),t.display.sizer.style.minWidth="",t.display.sizerWidth=null):(T(t.display.wrapper,"CodeMirror-wrap"),di(t)),On(t),Vn(t),gn(t),setTimeout(function(){return wr(t)},100)}function Vs(t,e){var i=this;if(!(this instanceof Vs))return new Vs(t,e);this.options=e=e?$(e):{},$(Bs,e,!1);var n=e.value;"string"==typeof n?n=new To(n,e.mode,null,e.lineSeparator,e.direction):e.mode&&(n.modeOption=e.mode),this.doc=n;var r=new Vs.inputStyles[e.inputStyle](this),a=this.display=new ia(t,n,r,e);for(var c in a.wrapper.CodeMirror=this,Rs(this),e.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),kr(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new K,keySeq:null,specialChars:null},e.autofocus&&!y&&a.input.focus(),o&&s<11&&setTimeout(function(){return i.display.input.reset(!0)},20),$s(this),Fo(),Tr(this),this.curOp.forceUpdate=!0,wa(this,n),e.autofocus&&!y||this.hasFocus()?setTimeout(function(){i.hasFocus()&&!i.state.focused&&er(i)},20):ir(this),Ns)Ns.hasOwnProperty(c)&&Ns[c](this,e[c],Fs);Jr(this),e.finishInit&&e.finishInit(this);for(var u=0;u400}bt(e.scroller,"touchstart",function(r){if(!Ct(t,r)&&!a(r)&&!Ds(t,r)){e.input.ensurePolled(),clearTimeout(i);var o=+new Date;e.activeTouch={start:o,moved:!1,prev:o-n.end<=300?n:null},1==r.touches.length&&(e.activeTouch.left=r.touches[0].pageX,e.activeTouch.top=r.touches[0].pageY)}}),bt(e.scroller,"touchmove",function(){e.activeTouch&&(e.activeTouch.moved=!0)}),bt(e.scroller,"touchend",function(i){var n=e.activeTouch;if(n&&!Ui(e,i)&&null!=n.left&&!n.moved&&new Date-n.start<300){var a,o=t.coordsChar(e.activeTouch,"page");a=!n.prev||l(n,n.prev)?new ca(o,o):!n.prev.prev||l(n,n.prev.prev)?t.findWordAt(o):new ca(ce(o.line,0),ge(t.doc,ce(o.line+1,0))),t.setSelection(a.anchor,a.head),t.focus(),Tt(i)}r()}),bt(e.scroller,"touchcancel",r),bt(e.scroller,"scroll",function(){e.scroller.clientHeight&&(gr(t,e.scroller.scrollTop),yr(t,e.scroller.scrollLeft,!0),wt(t,"scroll",t))}),bt(e.scroller,"mousewheel",function(e){return sa(t,e)}),bt(e.scroller,"DOMMouseScroll",function(e){return sa(t,e)}),bt(e.wrapper,"scroll",function(){return e.wrapper.scrollTop=e.wrapper.scrollLeft=0}),e.dragFunctions={enter:function(e){Ct(t,e)||Et(e)},over:function(e){Ct(t,e)||(Do(t,e),Et(e))},start:function(e){return Eo(t,e)},drop:Br(t,Io),leave:function(e){Ct(t,e)||Po(t)}};var c=e.input.getField();bt(c,"keyup",function(e){return vs.call(t,e)}),bt(c,"keydown",Br(t,ps)),bt(c,"keypress",Br(t,gs)),bt(c,"focus",function(e){return er(t,e)}),bt(c,"blur",function(e){return ir(t,e)})}Vs.defaults=Bs,Vs.optionHandlers=Ns;var Hs=[];function Ks(t,e,i,n){var r,a=t.doc;null==i&&(i="add"),"smart"==i&&(a.mode.indent?r=Ce(t,e).state:i="prev");var o=t.options.tabSize,s=ee(a,e),l=H(s.text,null,o);s.stateAfter&&(s.stateAfter=null);var c,u=s.text.match(/^\s*/)[0];if(n||/\S/.test(s.text)){if("smart"==i&&(c=a.mode.indent(r,s.text.slice(u.length),s.text),c==U||c>150)){if(!n)return;i="prev"}}else c=0,i="not";"prev"==i?c=e>a.first?H(ee(a,e-1).text,null,o):0:"add"==i?c=l+t.options.indentUnit:"subtract"==i?c=l-t.options.indentUnit:"number"==typeof i&&(c=l+i),c=Math.max(0,c);var d="",h=0;if(t.options.indentWithTabs)for(var p=Math.floor(c/o);p;--p)h+=o,d+="\t";if(ho,l=Ot(e),c=null;if(s&&n.ranges.length>1)if(Ys&&Ys.text.join("\n")==e){if(n.ranges.length%Ys.text.length==0){c=[];for(var u=0;u=0;h--){var p=n.ranges[h],f=p.from(),v=p.to();p.empty()&&(i&&i>0?f=ce(f.line,f.ch-i):t.state.overwrite&&!s?v=ce(v.line,Math.min(ee(a,v.line).text.length,v.ch+tt(l).length)):s&&Ys&&Ys.lineWise&&Ys.text.join("\n")==l.join("\n")&&(f=v=ce(f.line,0)));var g={from:f,to:v,text:c?c[h%c.length]:l,origin:r||(s?"paste":t.state.cutIncoming>o?"cut":"+input")};eo(t.doc,g),Pi(t,"inputRead",t,g)}e&&!s&&js(t,e),dr(t),t.curOp.updateInput<2&&(t.curOp.updateInput=d),t.curOp.typing=!0,t.state.pasteIncoming=t.state.cutIncoming=-1}function Gs(t,e){var i=t.clipboardData&&t.clipboardData.getData("Text");if(i)return t.preventDefault(),e.isReadOnly()||e.options.disableInput||!e.hasFocus()||Fr(e,function(){return Us(e,i,0,null,"paste")}),!0}function js(t,e){if(t.options.electricChars&&t.options.smartIndent)for(var i=t.doc.sel,n=i.ranges.length-1;n>=0;n--){var r=i.ranges[n];if(!(r.head.ch>100||n&&i.ranges[n-1].head.line==r.head.line)){var a=t.getModeAt(r.head),o=!1;if(a.electricChars){for(var s=0;s-1){o=Ks(t,r.head.line,"smart");break}}else a.electricInput&&a.electricInput.test(ee(t.doc,r.head.line).text.slice(0,r.head.ch))&&(o=Ks(t,r.head.line,"smart"));o&&Pi(t,"electricInput",t,r.head.line)}}}function qs(t){for(var e=[],i=[],n=0;ni&&(Ks(this,r.head.line,t,!0),i=r.head.line,n==this.doc.sel.primIndex&&dr(this));else{var a=r.from(),o=r.to(),s=Math.max(i,a.line);i=Math.min(this.lastLine(),o.line-(o.ch?0:1))+1;for(var l=s;l0&&Va(this.doc,n,new ca(a,c[n].to()),G)}}}),getTokenAt:function(t,e){return Me(this,t,e)},getLineTokens:function(t,e){return Me(this,ce(t),e,!0)},getTokenTypeAt:function(t){t=ge(this.doc,t);var e,i=we(this,ee(this.doc,t.line)),n=0,r=(i.length-1)/2,a=t.ch;if(0==a)e=i[2];else for(;;){var o=n+r>>1;if((o?i[2*o-1]:0)>=a)r=o;else{if(!(i[2*o+1]a&&(t=a,r=!0),n=ee(this.doc,t)}else n=t;return xn(this,n,{top:0,left:0},e||"page",i||r).top+(r?this.doc.height-ci(n):0)},defaultTextHeight:function(){return Ln(this.display)},defaultCharWidth:function(){return Rn(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(t,e,i,n,r){var a=this.display;t=Cn(this,ge(this.doc,t));var o=t.bottom,s=t.left;if(e.style.position="absolute",e.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(e),a.sizer.appendChild(e),"over"==n)o=t.top;else if("above"==n||"near"==n){var l=Math.max(a.wrapper.clientHeight,this.doc.height),c=Math.max(a.sizer.clientWidth,a.lineSpace.clientWidth);("above"==n||t.bottom+e.offsetHeight>l)&&t.top>e.offsetHeight?o=t.top-e.offsetHeight:t.bottom+e.offsetHeight<=l&&(o=t.bottom),s+e.offsetWidth>c&&(s=c-e.offsetWidth)}e.style.top=o+"px",e.style.left=e.style.right="","right"==r?(s=a.sizer.clientWidth-e.offsetWidth,e.style.right="0px"):("left"==r?s=0:"middle"==r&&(s=(a.sizer.clientWidth-e.offsetWidth)/2),e.style.left=s+"px"),i&&lr(this,{left:s,top:o,right:s+e.offsetWidth,bottom:o+e.offsetHeight})},triggerOnKeyDown:Nr(ps),triggerOnKeyPress:Nr(gs),triggerOnKeyUp:vs,triggerOnMouseDown:Nr(ws),execCommand:function(t){if(es.hasOwnProperty(t))return es[t].call(null,this)},triggerElectric:Nr(function(t){js(this,t)}),findPosH:function(t,e,i,n){var r=1;e<0&&(r=-1,e=-e);for(var a=ge(this.doc,t),o=0;o0&&s(i.charAt(n-1)))--n;while(r.5||this.options.lineWrapping)&&On(this),wt(this,"refresh",this)}),swapDoc:Nr(function(t){var e=this.doc;return e.cm=null,this.state.selectingText&&this.state.selectingText(),wa(this,t),gn(this),this.display.input.reset(),hr(this,t.scrollLeft,t.scrollTop),this.curOp.forceScroll=!0,Pi(this,"swapDoc",this,e),e}),phrase:function(t){var e=this.options.phrases;return e&&Object.prototype.hasOwnProperty.call(e,t)?e[t]:t},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},At(t),t.registerHelper=function(e,n,r){i.hasOwnProperty(e)||(i[e]=t[e]={_global:[]}),i[e][n]=r},t.registerGlobalHelper=function(e,n,r,a){t.registerHelper(e,n,a),i[e]._global.push({pred:r,val:a})}}function tl(t,e,i,n,r){var a=e,o=i,s=ee(t,e.line),l=r&&"rtl"==t.direction?-i:i;function c(){var i=e.line+l;return!(i=t.first+t.size)&&(e=new ce(i,e.ch,e.sticky),s=ee(t,i))}function u(a){var o;if("codepoint"==n){var u=s.text.charCodeAt(e.ch+(i>0?0:-1));if(isNaN(u))o=null;else{var d=i>0?u>=55296&&u<56320:u>=56320&&u<57343;o=new ce(e.line,Math.max(0,Math.min(s.text.length,e.ch+i*(d?2:1))),-i)}}else o=r?ts(t.cm,s,e,i):Jo(s,e,i);if(null==o){if(a||!c())return!1;e=Qo(r,t.cm,s,e.line,l)}else e=o;return!0}if("char"==n||"codepoint"==n)u();else if("column"==n)u(!0);else if("word"==n||"group"==n)for(var d=null,h="group"==n,p=t.cm&&t.cm.getHelper(e,"wordChars"),f=!0;;f=!1){if(i<0&&!u(!f))break;var v=s.text.charAt(e.ch)||"\n",g=st(v,p)?"w":h&&"\n"==v?"n":!h||/\s/.test(v)?null:"p";if(!h||f||g||(g="s"),d&&d!=g){i<0&&(i=1,u(),e.sticky="after");break}if(g&&(d=g),i>0&&!u(!f))break}var m=Za(t,e,a,o,!0);return de(a,m)&&(m.hitSide=!0),m}function el(t,e,i,n){var r,a,o=t.doc,s=e.left;if("page"==n){var l=Math.min(t.display.wrapper.clientHeight,W(t).innerHeight||o(t).documentElement.clientHeight),c=Math.max(l-.5*Ln(t.display),3);r=(i>0?e.bottom:e.top)+i*c}else"line"==n&&(r=i>0?e.bottom+3:e.top-3);for(;;){if(a=An(t,s,r),!a.outside)break;if(i<0?r<=0:r>=o.height){a.hitSide=!0;break}r+=5*i}return a}var il=function(t){this.cm=t,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new K,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function nl(t,e){var i=an(t,e.line);if(!i||i.hidden)return null;var n=ee(t.doc,e.line),r=en(i,n,e.line),a=mt(n,t.doc.direction),o="left";if(a){var s=vt(a,e.ch);o=s%2?"right":"left"}var l=un(r.map,e.ch,o);return l.offset="right"==l.collapse?l.end:l.start,l}function rl(t){for(var e=t;e;e=e.parentNode)if(/CodeMirror-gutter-wrapper/.test(e.className))return!0;return!1}function al(t,e){return e&&(t.bad=!0),t}function ol(t,e,i,n,r){var a="",o=!1,s=t.doc.lineSeparator(),l=!1;function c(t){return function(e){return e.id==t}}function u(){o&&(a+=s,l&&(a+=s),o=l=!1)}function d(t){t&&(u(),a+=t)}function h(e){if(1==e.nodeType){var i=e.getAttribute("cm-text");if(i)return void d(i);var a,p=e.getAttribute("cm-marker");if(p){var f=t.findMarks(ce(n,0),ce(r+1,0),c(+p));return void(f.length&&(a=f[0].find(0))&&d(ie(t.doc,a.from,a.to).join(s)))}if("false"==e.getAttribute("contenteditable"))return;var v=/^(pre|div|p|li|table|br)$/i.test(e.nodeName);if(!/^br$/i.test(e.nodeName)&&0==e.textContent.length)return;v&&u();for(var g=0;g=e.display.viewTo||a.line=e.display.viewFrom&&nl(e,r)||{node:l[0].measure.map[2],offset:0},u=a.linen.firstLine()&&(o=ce(o.line-1,ee(n.doc,o.line-1).length)),s.ch==ee(n.doc,s.line).text.length&&s.liner.viewTo-1)return!1;o.line==r.viewFrom||0==(t=Wn(n,o.line))?(e=ae(r.view[0].line),i=r.view[0].node):(e=ae(r.view[t].line),i=r.view[t-1].node.nextSibling);var l,c,u=Wn(n,s.line);if(u==r.view.length-1?(l=r.viewTo-1,c=r.lineDiv.lastChild):(l=ae(r.view[u+1].line)-1,c=r.view[u+1].node.previousSibling),!i)return!1;var d=n.doc.splitLines(ol(n,i,c,e,l)),h=ie(n.doc,ce(e,0),ce(l,ee(n.doc,l).text.length));while(d.length>1&&h.length>1)if(tt(d)==tt(h))d.pop(),h.pop(),l--;else{if(d[0]!=h[0])break;d.shift(),h.shift(),e++}var p=0,f=0,v=d[0],g=h[0],m=Math.min(v.length,g.length);while(po.ch&&y.charCodeAt(y.length-f-1)==b.charCodeAt(b.length-f-1))p--,f++;d[d.length-1]=y.slice(0,y.length-f).replace(/^\u200b+/,""),d[0]=d[0].slice(p).replace(/\u200b+$/,"");var _=ce(e,p),w=ce(l,h.length?tt(h).length-f:0);return d.length>1||d[0]||ue(_,w)?(so(n.doc,d,_,w,"+input"),!0):void 0},il.prototype.ensurePolled=function(){this.forceCompositionEnd()},il.prototype.reset=function(){this.forceCompositionEnd()},il.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},il.prototype.readFromDOMSoon=function(){var t=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(t.readDOMTimeout=null,t.composing){if(!t.composing.done)return;t.composing=null}t.updateFromDOM()},80))},il.prototype.updateFromDOM=function(){var t=this;!this.cm.isReadOnly()&&this.pollContent()||Fr(this.cm,function(){return Vn(t.cm)})},il.prototype.setUneditable=function(t){t.contentEditable="false"},il.prototype.onKeyPress=function(t){0==t.charCode||this.composing||(t.preventDefault(),this.cm.isReadOnly()||Br(this.cm,Us)(this.cm,String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),0))},il.prototype.readOnlyChanged=function(t){this.div.contentEditable=String("nocursor"!=t)},il.prototype.onContextMenu=function(){},il.prototype.resetPosition=function(){},il.prototype.needsContentAttribute=!0;var cl=function(t){this.cm=t,this.prevInput="",this.pollingFast=!1,this.polling=new K,this.hasSelection=!1,this.composing=null,this.resetting=!1};function ul(t,e){if(e=e?$(e):{},e.value=t.value,!e.tabindex&&t.tabIndex&&(e.tabindex=t.tabIndex),!e.placeholder&&t.placeholder&&(e.placeholder=t.placeholder),null==e.autofocus){var i=L(z(t));e.autofocus=i==t||null!=t.getAttribute("autofocus")&&i==document.body}function n(){t.value=s.getValue()}var r;if(t.form&&(bt(t.form,"submit",n),!e.leaveSubmitMethodAlone)){var a=t.form;r=a.submit;try{var o=a.submit=function(){n(),a.submit=r,a.submit(),a.submit=o}}catch(l){}}e.finishInit=function(i){i.save=n,i.getTextArea=function(){return t},i.toTextArea=function(){i.toTextArea=isNaN,n(),t.parentNode.removeChild(i.getWrapperElement()),t.style.display="",t.form&&(_t(t.form,"submit",n),e.leaveSubmitMethodAlone||"function"!=typeof t.form.submit||(t.form.submit=r))}},t.style.display="none";var s=Vs(function(e){return t.parentNode.insertBefore(e,t.nextSibling)},e);return s}function dl(t){t.off=_t,t.on=bt,t.wheelEventPixels=oa,t.Doc=To,t.splitLines=Ot,t.countColumn=H,t.findColumn=Z,t.isWordChar=ot,t.Pass=U,t.signal=wt,t.Line=hi,t.changeEnd=ha,t.scrollbarModel=Sr,t.Pos=ce,t.cmpPos=ue,t.modes=Ht,t.mimeModes=Kt,t.resolveMode=Ut,t.getMode=Gt,t.modeExtensions=jt,t.extendMode=qt,t.copyState=Zt,t.startState=Qt,t.innerMode=Jt,t.commands=es,t.keyMap=$o,t.keyName=Go,t.isModifierKey=Xo,t.lookupKey=Yo,t.normalizeKeyMap=Ko,t.StringStream=te,t.SharedTextMarker=_o,t.TextMarker=bo,t.LineWidget=vo,t.e_preventDefault=Tt,t.e_stopPropagation=Mt,t.e_stop=Et,t.addClass=R,t.contains=P,t.rmClass=T,t.keyNames=Oo}cl.prototype.init=function(t){var e=this,i=this,n=this.cm;this.createField(t);var r=this.textarea;function a(t){if(!Ct(n,t)){if(n.somethingSelected())Xs({lineWise:!1,text:n.getSelections()});else{if(!n.options.lineWiseCopyCut)return;var e=qs(n);Xs({lineWise:!0,text:e.text}),"cut"==t.type?n.setSelections(e.ranges,null,G):(i.prevInput="",r.value=e.text.join("\n"),B(r))}"cut"==t.type&&(n.state.cutIncoming=+new Date)}}t.wrapper.insertBefore(this.wrapper,t.wrapper.firstChild),g&&(r.style.width="0px"),bt(r,"input",function(){o&&s>=9&&e.hasSelection&&(e.hasSelection=null),i.poll()}),bt(r,"paste",function(t){Ct(n,t)||Gs(t,n)||(n.state.pasteIncoming=+new Date,i.fastPoll())}),bt(r,"cut",a),bt(r,"copy",a),bt(t.scroller,"paste",function(e){if(!Ui(t,e)&&!Ct(n,e)){if(!r.dispatchEvent)return n.state.pasteIncoming=+new Date,void i.focus();var a=new Event("paste");a.clipboardData=e.clipboardData,r.dispatchEvent(a)}}),bt(t.lineSpace,"selectstart",function(e){Ui(t,e)||Tt(e)}),bt(r,"compositionstart",function(){var t=n.getCursor("from");i.composing&&i.composing.range.clear(),i.composing={start:t,range:n.markText(t,n.getCursor("to"),{className:"CodeMirror-composing"})}}),bt(r,"compositionend",function(){i.composing&&(i.poll(),i.composing.range.clear(),i.composing=null)})},cl.prototype.createField=function(t){this.wrapper=Js(),this.textarea=this.wrapper.firstChild;var e=this.cm.options;Zs(this.textarea,e.spellcheck,e.autocorrect,e.autocapitalize)},cl.prototype.screenReaderLabelChanged=function(t){t?this.textarea.setAttribute("aria-label",t):this.textarea.removeAttribute("aria-label")},cl.prototype.prepareSelection=function(){var t=this.cm,e=t.display,i=t.doc,n=Gn(t);if(t.options.moveInputWithCursor){var r=Cn(t,i.sel.primary().head,"div"),a=e.wrapper.getBoundingClientRect(),o=e.lineDiv.getBoundingClientRect();n.teTop=Math.max(0,Math.min(e.wrapper.clientHeight-10,r.top+o.top-a.top)),n.teLeft=Math.max(0,Math.min(e.wrapper.clientWidth-10,r.left+o.left-a.left))}return n},cl.prototype.showSelection=function(t){var e=this.cm,i=e.display;I(i.cursorDiv,t.cursors),I(i.selectionDiv,t.selection),null!=t.teTop&&(this.wrapper.style.top=t.teTop+"px",this.wrapper.style.left=t.teLeft+"px")},cl.prototype.reset=function(t){if(!(this.contextMenuPending||this.composing&&t)){var e=this.cm;if(this.resetting=!0,e.somethingSelected()){this.prevInput="";var i=e.getSelection();this.textarea.value=i,e.state.focused&&B(this.textarea),o&&s>=9&&(this.hasSelection=i)}else t||(this.prevInput=this.textarea.value="",o&&s>=9&&(this.hasSelection=null));this.resetting=!1}},cl.prototype.getField=function(){return this.textarea},cl.prototype.supportsTouch=function(){return!1},cl.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!y||L(z(this.textarea))!=this.textarea))try{this.textarea.focus()}catch(t){}},cl.prototype.blur=function(){this.textarea.blur()},cl.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},cl.prototype.receivedFocus=function(){this.slowPoll()},cl.prototype.slowPoll=function(){var t=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){t.poll(),t.cm.state.focused&&t.slowPoll()})},cl.prototype.fastPoll=function(){var t=!1,e=this;function i(){var n=e.poll();n||t?(e.pollingFast=!1,e.slowPoll()):(t=!0,e.polling.set(60,i))}e.pollingFast=!0,e.polling.set(20,i)},cl.prototype.poll=function(){var t=this,e=this.cm,i=this.textarea,n=this.prevInput;if(this.contextMenuPending||this.resetting||!e.state.focused||zt(i)&&!n&&!this.composing||e.isReadOnly()||e.options.disableInput||e.state.keySeq)return!1;var r=i.value;if(r==n&&!e.somethingSelected())return!1;if(o&&s>=9&&this.hasSelection===r||b&&/[\uf700-\uf7ff]/.test(r))return e.display.input.reset(),!1;if(e.doc.sel==e.display.selForContextMenu){var a=r.charCodeAt(0);if(8203!=a||n||(n="​"),8666==a)return this.reset(),this.cm.execCommand("undo")}var l=0,c=Math.min(n.length,r.length);while(l1e3||r.indexOf("\n")>-1?i.value=t.prevInput="":t.prevInput=r,t.composing&&(t.composing.range.clear(),t.composing.range=e.markText(t.composing.start,e.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},cl.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},cl.prototype.onKeyPress=function(){o&&s>=9&&(this.hasSelection=null),this.fastPoll()},cl.prototype.onContextMenu=function(t){var e=this,i=e.cm,n=i.display,r=e.textarea;e.contextMenuPending&&e.contextMenuPending();var a=zn(i,t),c=n.scroller.scrollTop;if(a&&!h){var u=i.options.resetSelectionOnContextMenu;u&&-1==i.doc.sel.contains(a)&&Br(i,Ya)(i.doc,da(a),G);var d,p=r.style.cssText,f=e.wrapper.style.cssText,v=e.wrapper.offsetParent.getBoundingClientRect();if(e.wrapper.style.cssText="position: static",r.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(t.clientY-v.top-5)+"px; left: "+(t.clientX-v.left-5)+"px;\n z-index: 1000; background: "+(o?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",l&&(d=r.ownerDocument.defaultView.scrollY),n.input.focus(),l&&r.ownerDocument.defaultView.scrollTo(null,d),n.input.reset(),i.somethingSelected()||(r.value=e.prevInput=" "),e.contextMenuPending=y,n.selForContextMenu=i.doc.sel,clearTimeout(n.detectingSelectAll),o&&s>=9&&m(),S){Et(t);var g=function(){_t(window,"mouseup",g),setTimeout(y,20)};bt(window,"mouseup",g)}else setTimeout(y,50)}function m(){if(null!=r.selectionStart){var t=i.somethingSelected(),a="​"+(t?r.value:"");r.value="⇚",r.value=a,e.prevInput=t?"":"​",r.selectionStart=1,r.selectionEnd=a.length,n.selForContextMenu=i.doc.sel}}function y(){if(e.contextMenuPending==y&&(e.contextMenuPending=!1,e.wrapper.style.cssText=f,r.style.cssText=p,o&&s<9&&n.scrollbars.setScrollTop(n.scroller.scrollTop=c),null!=r.selectionStart)){(!o||o&&s<9)&&m();var t=0,a=function(){n.selForContextMenu==i.doc.sel&&0==r.selectionStart&&r.selectionEnd>0&&"​"==e.prevInput?Br(i,Qa)(i):t++<10?n.detectingSelectAll=setTimeout(a,500):(n.selForContextMenu=null,n.input.reset())};n.detectingSelectAll=setTimeout(a,200)}}},cl.prototype.readOnlyChanged=function(t){t||this.reset(),this.textarea.disabled="nocursor"==t,this.textarea.readOnly=!!t},cl.prototype.setUneditable=function(){},cl.prototype.needsContentAttribute=!1,Os(Vs),Qs(Vs);var hl="iter insert remove copy getEditor constructor".split(" ");for(var pl in To.prototype)To.prototype.hasOwnProperty(pl)&&Y(hl,pl)<0&&(Vs.prototype[pl]=function(t){return function(){return t.apply(this.doc,arguments)}}(To.prototype[pl]));return At(To),Vs.inputStyles={textarea:cl,contenteditable:il},Vs.defineMode=function(t){Vs.defaults.mode||"null"==t||(Vs.defaults.mode=t),Yt.apply(this,arguments)},Vs.defineMIME=Xt,Vs.defineMode("null",function(){return{token:function(t){return t.skipToEnd()}}}),Vs.defineMIME("text/plain","null"),Vs.defineExtension=function(t,e){Vs.prototype[t]=e},Vs.defineDocExtension=function(t,e){To.prototype[t]=e},Vs.fromTextArea=ul,dl(Vs),Vs.version="5.65.21",Vs})},74806:function(t,e,i){(function(t){t(i(15237))})(function(t){"use strict";function e(t){return new RegExp("^(("+t.join(")|(")+"))\\b")}var i=e(["and","or","not","is"]),n=["as","assert","break","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","lambda","pass","raise","return","try","while","with","yield","in","False","True"],r=["abs","all","any","bin","bool","bytearray","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip","__import__","NotImplemented","Ellipsis","__debug__"];function a(t){return t.scopes[t.scopes.length-1]}t.registerHelper("hintWords","python",n.concat(r).concat(["exec","print"])),t.defineMode("python",function(o,s){for(var l="error",c=s.delimiters||s.singleDelimiters||/^[\(\)\[\]\{\}@,:`=;\.\\]/,u=[s.singleOperators,s.doubleOperators,s.doubleDelimiters,s.tripleDelimiters,s.operators||/^([-+*/%\/&|^]=?|[<>=]+|\/\/=?|\*\*=?|!=|[~!@]|\.\.\.)/],d=0;dn?S(e):r0&&A(t,e)&&(o+=" "+l),o}return _(t,e)}function _(t,e,n){if(t.eatSpace())return null;if(!n&&t.match(/^#.*/))return"comment";if(t.match(/^[0-9\.]/,!1)){var r=!1;if(t.match(/^[\d_]*\.\d+(e[\+\-]?\d+)?/i)&&(r=!0),t.match(/^[\d_]+\.\d*/)&&(r=!0),t.match(/^\.\d+/)&&(r=!0),r)return t.eat(/J/i),"number";var a=!1;if(t.match(/^0x[0-9a-f_]+/i)&&(a=!0),t.match(/^0b[01_]+/i)&&(a=!0),t.match(/^0o[0-7_]+/i)&&(a=!0),t.match(/^[1-9][\d_]*(e[\+\-]?[\d_]+)?/)&&(t.eat(/J/i),a=!0),t.match(/^0(?![\dx])/i)&&(a=!0),a)return t.eat(/L/i),"number"}if(t.match(m)){var o=-1!==t.current().toLowerCase().indexOf("f");return o?(e.tokenize=w(t.current(),e.tokenize),e.tokenize(t,e)):(e.tokenize=C(t.current(),e.tokenize),e.tokenize(t,e))}for(var s=0;s=0)t=t.substr(1);var i=1==t.length,n="string";function r(t){return function(e,i){var n=_(e,i,!0);return"punctuation"==n&&("{"==e.current()?i.tokenize=r(t+1):"}"==e.current()&&(i.tokenize=t>1?r(t-1):a)),n}}function a(a,o){while(!a.eol())if(a.eatWhile(/[^'"\{\}\\]/),a.eat("\\")){if(a.next(),i&&a.eol())return n}else{if(a.match(t))return o.tokenize=e,n;if(a.match("{{"))return n;if(a.match("{",!1))return o.tokenize=r(0),a.current()?n:o.tokenize(a,o);if(a.match("}}"))return n;if(a.match("}"))return l;a.eat(/['"]/)}if(i){if(s.singleLineStringErrors)return l;o.tokenize=e}return n}return a.isString=!0,a}function C(t,e){while("rubf".indexOf(t.charAt(0).toLowerCase())>=0)t=t.substr(1);var i=1==t.length,n="string";function r(r,a){while(!r.eol())if(r.eatWhile(/[^'"\\]/),r.eat("\\")){if(r.next(),i&&r.eol())return n}else{if(r.match(t))return a.tokenize=e,n;r.eat(/['"]/)}if(i){if(s.singleLineStringErrors)return l;a.tokenize=e}return n}return r.isString=!0,r}function S(t){while("py"!=a(t).type)t.scopes.pop();t.scopes.push({offset:a(t).offset+o.indentUnit,type:"py",align:null})}function k(t,e,i){var n=t.match(/^[\s\[\{\(]*(?:#|$)/,!1)?null:t.column()+1;e.scopes.push({offset:e.indent+h,type:i,align:n})}function A(t,e){var i=t.indentation();while(e.scopes.length>1&&a(e).offset>i){if("py"!=a(e).type)return!0;e.scopes.pop()}return a(e).offset!=i}function T(t,e){t.sol()&&(e.beginningOfLine=!0,e.dedent=!1);var i=e.tokenize(t,e),n=t.current();if(e.beginningOfLine&&"@"==n)return t.match(g,!1)?"meta":v?"operator":l;if(/\S/.test(n)&&(e.beginningOfLine=!1),"variable"!=i&&"builtin"!=i||"meta"!=e.lastToken||(i="meta"),"pass"!=n&&"return"!=n||(e.dedent=!0),"lambda"==n&&(e.lambda=!0),":"==n&&!e.lambda&&"py"==a(e).type&&t.match(/^\s*(?:#|$)/,!1)&&S(e),1==n.length&&!/string|comment/.test(i)){var r="[({".indexOf(n);if(-1!=r&&k(t,e,"])}".slice(r,r+1)),r="])}".indexOf(n),-1!=r){if(a(e).type!=n)return l;e.indent=e.scopes.pop().offset-h}}return e.dedent&&t.eol()&&"py"==a(e).type&&e.scopes.length>1&&e.scopes.pop(),i}var M={startState:function(t){return{tokenize:x,scopes:[{offset:t||0,type:"py",align:null}],indent:t||0,lastToken:null,lambda:!1,dedent:0}},token:function(t,e){var i=e.errorToken;i&&(e.errorToken=!1);var n=T(t,e);return n&&"comment"!=n&&(e.lastToken="keyword"==n||"punctuation"==n?t.current():n),"punctuation"==n&&(n=null),t.eol()&&e.lambda&&(e.lambda=!1),i?n+" "+l:n},indent:function(e,i){if(e.tokenize!=x)return e.tokenize.isString?t.Pass:0;var n=a(e),r=n.type==i.charAt(0)||"py"==n.type&&!e.dedent&&/^(else:|elif |except |finally:)/.test(i);return null!=n.align?n.align-(r?1:0):n.offset-(r?h:0)},electricInput:/^\s*([\}\]\)]|else:|elif |except |finally:)$/,closeBrackets:{triples:"'\""},lineComment:"#",fold:"indent"};return M}),t.defineMIME("text/x-python","python");var o=function(t){return t.split(" ")};t.defineMIME("text/x-cython",{name:"python",extra_keywords:o("by cdef cimport cpdef ctypedef enum except extern gil include nogil property public readonly struct union DEF IF ELIF ELSE")})})},40955:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.BlockCipher,r=e.algo,a=[],o=[],s=[],l=[],c=[],u=[],d=[],h=[],p=[],f=[];(function(){for(var t=[],e=0;e<256;e++)t[e]=e<128?e<<1:e<<1^283;var i=0,n=0;for(e=0;e<256;e++){var r=n^n<<1^n<<2^n<<3^n<<4;r=r>>>8^255&r^99,a[i]=r,o[r]=i;var v=t[i],g=t[v],m=t[g],y=257*t[r]^16843008*r;s[i]=y<<24|y>>>8,l[i]=y<<16|y>>>16,c[i]=y<<8|y>>>24,u[i]=y;y=16843009*m^65537*g^257*v^16843008*i;d[r]=y<<24|y>>>8,h[r]=y<<16|y>>>16,p[r]=y<<8|y>>>24,f[r]=y,i?(i=v^t[t[t[m^v]]],n^=t[t[n]]):i=n=1}})();var v=[0,1,2,4,8,16,32,64,128,27,54],g=r.AES=n.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var t=this._keyPriorReset=this._key,e=t.words,i=t.sigBytes/4,n=this._nRounds=i+6,r=4*(n+1),o=this._keySchedule=[],s=0;s6&&s%i==4&&(u=a[u>>>24]<<24|a[u>>>16&255]<<16|a[u>>>8&255]<<8|a[255&u]):(u=u<<8|u>>>24,u=a[u>>>24]<<24|a[u>>>16&255]<<16|a[u>>>8&255]<<8|a[255&u],u^=v[s/i|0]<<24),o[s]=o[s-i]^u);for(var l=this._invKeySchedule=[],c=0;c>>24]]^h[a[u>>>16&255]]^p[a[u>>>8&255]]^f[a[255&u]]}}},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._keySchedule,s,l,c,u,a)},decryptBlock:function(t,e){var i=t[e+1];t[e+1]=t[e+3],t[e+3]=i,this._doCryptBlock(t,e,this._invKeySchedule,d,h,p,f,o);i=t[e+1];t[e+1]=t[e+3],t[e+3]=i},_doCryptBlock:function(t,e,i,n,r,a,o,s){for(var l=this._nRounds,c=t[e]^i[0],u=t[e+1]^i[1],d=t[e+2]^i[2],h=t[e+3]^i[3],p=4,f=1;f>>24]^r[u>>>16&255]^a[d>>>8&255]^o[255&h]^i[p++],g=n[u>>>24]^r[d>>>16&255]^a[h>>>8&255]^o[255&c]^i[p++],m=n[d>>>24]^r[h>>>16&255]^a[c>>>8&255]^o[255&u]^i[p++],y=n[h>>>24]^r[c>>>16&255]^a[u>>>8&255]^o[255&d]^i[p++];c=v,u=g,d=m,h=y}v=(s[c>>>24]<<24|s[u>>>16&255]<<16|s[d>>>8&255]<<8|s[255&h])^i[p++],g=(s[u>>>24]<<24|s[d>>>16&255]<<16|s[h>>>8&255]<<8|s[255&c])^i[p++],m=(s[d>>>24]<<24|s[h>>>16&255]<<16|s[c>>>8&255]<<8|s[255&u])^i[p++],y=(s[h>>>24]<<24|s[c>>>16&255]<<16|s[u>>>8&255]<<8|s[255&d])^i[p++];t[e]=v,t[e+1]=g,t[e+2]=m,t[e+3]=y},keySize:8});e.AES=n._createHelper(g)}(),t.AES})},43128:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.BlockCipher,r=e.algo;const a=16,o=[608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,3041331479,2450970073,2306472731],s=[[3509652390,2564797868,805139163,3491422135,3101798381,1780907670,3128725573,4046225305,614570311,3012652279,134345442,2240740374,1667834072,1901547113,2757295779,4103290238,227898511,1921955416,1904987480,2182433518,2069144605,3260701109,2620446009,720527379,3318853667,677414384,3393288472,3101374703,2390351024,1614419982,1822297739,2954791486,3608508353,3174124327,2024746970,1432378464,3864339955,2857741204,1464375394,1676153920,1439316330,715854006,3033291828,289532110,2706671279,2087905683,3018724369,1668267050,732546397,1947742710,3462151702,2609353502,2950085171,1814351708,2050118529,680887927,999245976,1800124847,3300911131,1713906067,1641548236,4213287313,1216130144,1575780402,4018429277,3917837745,3693486850,3949271944,596196993,3549867205,258830323,2213823033,772490370,2760122372,1774776394,2652871518,566650946,4142492826,1728879713,2882767088,1783734482,3629395816,2517608232,2874225571,1861159788,326777828,3124490320,2130389656,2716951837,967770486,1724537150,2185432712,2364442137,1164943284,2105845187,998989502,3765401048,2244026483,1075463327,1455516326,1322494562,910128902,469688178,1117454909,936433444,3490320968,3675253459,1240580251,122909385,2157517691,634681816,4142456567,3825094682,3061402683,2540495037,79693498,3249098678,1084186820,1583128258,426386531,1761308591,1047286709,322548459,995290223,1845252383,2603652396,3431023940,2942221577,3202600964,3727903485,1712269319,422464435,3234572375,1170764815,3523960633,3117677531,1434042557,442511882,3600875718,1076654713,1738483198,4213154764,2393238008,3677496056,1014306527,4251020053,793779912,2902807211,842905082,4246964064,1395751752,1040244610,2656851899,3396308128,445077038,3742853595,3577915638,679411651,2892444358,2354009459,1767581616,3150600392,3791627101,3102740896,284835224,4246832056,1258075500,768725851,2589189241,3069724005,3532540348,1274779536,3789419226,2764799539,1660621633,3471099624,4011903706,913787905,3497959166,737222580,2514213453,2928710040,3937242737,1804850592,3499020752,2949064160,2386320175,2390070455,2415321851,4061277028,2290661394,2416832540,1336762016,1754252060,3520065937,3014181293,791618072,3188594551,3933548030,2332172193,3852520463,3043980520,413987798,3465142937,3030929376,4245938359,2093235073,3534596313,375366246,2157278981,2479649556,555357303,3870105701,2008414854,3344188149,4221384143,3956125452,2067696032,3594591187,2921233993,2428461,544322398,577241275,1471733935,610547355,4027169054,1432588573,1507829418,2025931657,3646575487,545086370,48609733,2200306550,1653985193,298326376,1316178497,3007786442,2064951626,458293330,2589141269,3591329599,3164325604,727753846,2179363840,146436021,1461446943,4069977195,705550613,3059967265,3887724982,4281599278,3313849956,1404054877,2845806497,146425753,1854211946],[1266315497,3048417604,3681880366,3289982499,290971e4,1235738493,2632868024,2414719590,3970600049,1771706367,1449415276,3266420449,422970021,1963543593,2690192192,3826793022,1062508698,1531092325,1804592342,2583117782,2714934279,4024971509,1294809318,4028980673,1289560198,2221992742,1669523910,35572830,157838143,1052438473,1016535060,1802137761,1753167236,1386275462,3080475397,2857371447,1040679964,2145300060,2390574316,1461121720,2956646967,4031777805,4028374788,33600511,2920084762,1018524850,629373528,3691585981,3515945977,2091462646,2486323059,586499841,988145025,935516892,3367335476,2599673255,2839830854,265290510,3972581182,2759138881,3795373465,1005194799,847297441,406762289,1314163512,1332590856,1866599683,4127851711,750260880,613907577,1450815602,3165620655,3734664991,3650291728,3012275730,3704569646,1427272223,778793252,1343938022,2676280711,2052605720,1946737175,3164576444,3914038668,3967478842,3682934266,1661551462,3294938066,4011595847,840292616,3712170807,616741398,312560963,711312465,1351876610,322626781,1910503582,271666773,2175563734,1594956187,70604529,3617834859,1007753275,1495573769,4069517037,2549218298,2663038764,504708206,2263041392,3941167025,2249088522,1514023603,1998579484,1312622330,694541497,2582060303,2151582166,1382467621,776784248,2618340202,3323268794,2497899128,2784771155,503983604,4076293799,907881277,423175695,432175456,1378068232,4145222326,3954048622,3938656102,3820766613,2793130115,2977904593,26017576,3274890735,3194772133,1700274565,1756076034,4006520079,3677328699,720338349,1533947780,354530856,688349552,3973924725,1637815568,332179504,3949051286,53804574,2852348879,3044236432,1282449977,3583942155,3416972820,4006381244,1617046695,2628476075,3002303598,1686838959,431878346,2686675385,1700445008,1080580658,1009431731,832498133,3223435511,2605976345,2271191193,2516031870,1648197032,4164389018,2548247927,300782431,375919233,238389289,3353747414,2531188641,2019080857,1475708069,455242339,2609103871,448939670,3451063019,1395535956,2413381860,1841049896,1491858159,885456874,4264095073,4001119347,1565136089,3898914787,1108368660,540939232,1173283510,2745871338,3681308437,4207628240,3343053890,4016749493,1699691293,1103962373,3625875870,2256883143,3830138730,1031889488,3479347698,1535977030,4236805024,3251091107,2132092099,1774941330,1199868427,1452454533,157007616,2904115357,342012276,595725824,1480756522,206960106,497939518,591360097,863170706,2375253569,3596610801,1814182875,2094937945,3421402208,1082520231,3463918190,2785509508,435703966,3908032597,1641649973,2842273706,3305899714,1510255612,2148256476,2655287854,3276092548,4258621189,236887753,3681803219,274041037,1734335097,3815195456,3317970021,1899903192,1026095262,4050517792,356393447,2410691914,3873677099,3682840055],[3913112168,2491498743,4132185628,2489919796,1091903735,1979897079,3170134830,3567386728,3557303409,857797738,1136121015,1342202287,507115054,2535736646,337727348,3213592640,1301675037,2528481711,1895095763,1721773893,3216771564,62756741,2142006736,835421444,2531993523,1442658625,3659876326,2882144922,676362277,1392781812,170690266,3921047035,1759253602,3611846912,1745797284,664899054,1329594018,3901205900,3045908486,2062866102,2865634940,3543621612,3464012697,1080764994,553557557,3656615353,3996768171,991055499,499776247,1265440854,648242737,3940784050,980351604,3713745714,1749149687,3396870395,4211799374,3640570775,1161844396,3125318951,1431517754,545492359,4268468663,3499529547,1437099964,2702547544,3433638243,2581715763,2787789398,1060185593,1593081372,2418618748,4260947970,69676912,2159744348,86519011,2512459080,3838209314,1220612927,3339683548,133810670,1090789135,1078426020,1569222167,845107691,3583754449,4072456591,1091646820,628848692,1613405280,3757631651,526609435,236106946,48312990,2942717905,3402727701,1797494240,859738849,992217954,4005476642,2243076622,3870952857,3732016268,765654824,3490871365,2511836413,1685915746,3888969200,1414112111,2273134842,3281911079,4080962846,172450625,2569994100,980381355,4109958455,2819808352,2716589560,2568741196,3681446669,3329971472,1835478071,660984891,3704678404,4045999559,3422617507,3040415634,1762651403,1719377915,3470491036,2693910283,3642056355,3138596744,1364962596,2073328063,1983633131,926494387,3423689081,2150032023,4096667949,1749200295,3328846651,309677260,2016342300,1779581495,3079819751,111262694,1274766160,443224088,298511866,1025883608,3806446537,1145181785,168956806,3641502830,3584813610,1689216846,3666258015,3200248200,1692713982,2646376535,4042768518,1618508792,1610833997,3523052358,4130873264,2001055236,3610705100,2202168115,4028541809,2961195399,1006657119,2006996926,3186142756,1430667929,3210227297,1314452623,4074634658,4101304120,2273951170,1399257539,3367210612,3027628629,1190975929,2062231137,2333990788,2221543033,2438960610,1181637006,548689776,2362791313,3372408396,3104550113,3145860560,296247880,1970579870,3078560182,3769228297,1714227617,3291629107,3898220290,166772364,1251581989,493813264,448347421,195405023,2709975567,677966185,3703036547,1463355134,2715995803,1338867538,1343315457,2802222074,2684532164,233230375,2599980071,2000651841,3277868038,1638401717,4028070440,3237316320,6314154,819756386,300326615,590932579,1405279636,3267499572,3150704214,2428286686,3959192993,3461946742,1862657033,1266418056,963775037,2089974820,2263052895,1917689273,448879540,3550394620,3981727096,150775221,3627908307,1303187396,508620638,2975983352,2726630617,1817252668,1876281319,1457606340,908771278,3720792119,3617206836,2455994898,1729034894,1080033504],[976866871,3556439503,2881648439,1522871579,1555064734,1336096578,3548522304,2579274686,3574697629,3205460757,3593280638,3338716283,3079412587,564236357,2993598910,1781952180,1464380207,3163844217,3332601554,1699332808,1393555694,1183702653,3581086237,1288719814,691649499,2847557200,2895455976,3193889540,2717570544,1781354906,1676643554,2592534050,3230253752,1126444790,2770207658,2633158820,2210423226,2615765581,2414155088,3127139286,673620729,2805611233,1269405062,4015350505,3341807571,4149409754,1057255273,2012875353,2162469141,2276492801,2601117357,993977747,3918593370,2654263191,753973209,36408145,2530585658,25011837,3520020182,2088578344,530523599,2918365339,1524020338,1518925132,3760827505,3759777254,1202760957,3985898139,3906192525,674977740,4174734889,2031300136,2019492241,3983892565,4153806404,3822280332,352677332,2297720250,60907813,90501309,3286998549,1016092578,2535922412,2839152426,457141659,509813237,4120667899,652014361,1966332200,2975202805,55981186,2327461051,676427537,3255491064,2882294119,3433927263,1307055953,942726286,933058658,2468411793,3933900994,4215176142,1361170020,2001714738,2830558078,3274259782,1222529897,1679025792,2729314320,3714953764,1770335741,151462246,3013232138,1682292957,1483529935,471910574,1539241949,458788160,3436315007,1807016891,3718408830,978976581,1043663428,3165965781,1927990952,4200891579,2372276910,3208408903,3533431907,1412390302,2931980059,4132332400,1947078029,3881505623,4168226417,2941484381,1077988104,1320477388,886195818,18198404,3786409e3,2509781533,112762804,3463356488,1866414978,891333506,18488651,661792760,1628790961,3885187036,3141171499,876946877,2693282273,1372485963,791857591,2686433993,3759982718,3167212022,3472953795,2716379847,445679433,3561995674,3504004811,3574258232,54117162,3331405415,2381918588,3769707343,4154350007,1140177722,4074052095,668550556,3214352940,367459370,261225585,2610173221,4209349473,3468074219,3265815641,314222801,3066103646,3808782860,282218597,3406013506,3773591054,379116347,1285071038,846784868,2669647154,3771962079,3550491691,2305946142,453669953,1268987020,3317592352,3279303384,3744833421,2610507566,3859509063,266596637,3847019092,517658769,3462560207,3443424879,370717030,4247526661,2224018117,4143653529,4112773975,2788324899,2477274417,1456262402,2901442914,1517677493,1846949527,2295493580,3734397586,2176403920,1280348187,1908823572,3871786941,846861322,1172426758,3287448474,3383383037,1655181056,3139813346,901632758,1897031941,2986607138,3066810236,3447102507,1393639104,373351379,950779232,625454576,3124240540,4148612726,2007998917,544563296,2244738638,2330496472,2058025392,1291430526,424198748,50039436,29584100,3605783033,2429876329,2791104160,1057563949,3255363231,3075367218,3463963227,1469046755,985887462]];var l={pbox:[],sbox:[]};function c(t,e){let i=e>>24&255,n=e>>16&255,r=e>>8&255,a=255&e,o=t.sbox[0][i]+t.sbox[1][n];return o^=t.sbox[2][r],o+=t.sbox[3][a],o}function u(t,e,i){let n,r=e,o=i;for(let s=0;s1;--s)r^=t.pbox[s],o=c(t,r)^o,n=r,r=o,o=n;return n=r,r=o,o=n,o^=t.pbox[1],r^=t.pbox[0],{left:r,right:o}}function h(t,e,i){for(let a=0;a<4;a++){t.sbox[a]=[];for(let e=0;e<256;e++)t.sbox[a][e]=s[a][e]}let n=0;for(let s=0;s=i&&(n=0);let r=0,l=0,c=0;for(let o=0;o>>2];t.sigBytes-=e}},m=(n.BlockCipher=d.extend({cfg:d.cfg.extend({mode:f,padding:g}),reset:function(){var t;d.reset.call(this);var e=this.cfg,i=e.iv,n=e.mode;this._xformMode==this._ENC_XFORM_MODE?t=n.createEncryptor:(t=n.createDecryptor,this._minBufferSize=1),this._mode&&this._mode.__creator==t?this._mode.init(this,i&&i.words):(this._mode=t.call(n,this,i&&i.words),this._mode.__creator=t)},_doProcessBlock:function(t,e){this._mode.processBlock(t,e)},_doFinalize:function(){var t,e=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(e.pad(this._data,this.blockSize),t=this._process(!0)):(t=this._process(!0),e.unpad(t)),t},blockSize:4}),n.CipherParams=r.extend({init:function(t){this.mixIn(t)},toString:function(t){return(t||this.formatter).stringify(this)}})),y=i.format={},b=y.OpenSSL={stringify:function(t){var e,i=t.ciphertext,n=t.salt;return e=n?a.create([1398893684,1701076831]).concat(n).concat(i):i,e.toString(l)},parse:function(t){var e,i=l.parse(t),n=i.words;return 1398893684==n[0]&&1701076831==n[1]&&(e=a.create(n.slice(2,4)),n.splice(0,4),i.sigBytes-=16),m.create({ciphertext:i,salt:e})}},x=n.SerializableCipher=r.extend({cfg:r.extend({format:b}),encrypt:function(t,e,i,n){n=this.cfg.extend(n);var r=t.createEncryptor(i,n),a=r.finalize(e),o=r.cfg;return m.create({ciphertext:a,key:i,iv:o.iv,algorithm:t,mode:o.mode,padding:o.padding,blockSize:t.blockSize,formatter:n.format})},decrypt:function(t,e,i,n){n=this.cfg.extend(n),e=this._parse(e,n.format);var r=t.createDecryptor(i,n).finalize(e.ciphertext);return r},_parse:function(t,e){return"string"==typeof t?e.parse(t,this):t}}),_=i.kdf={},w=_.OpenSSL={execute:function(t,e,i,n,r){if(n||(n=a.random(8)),r)o=u.create({keySize:e+i,hasher:r}).compute(t,n);else var o=u.create({keySize:e+i}).compute(t,n);var s=a.create(o.words.slice(e),4*i);return o.sigBytes=4*e,m.create({key:o,iv:s,salt:n})}},C=n.PasswordBasedCipher=x.extend({cfg:x.cfg.extend({kdf:w}),encrypt:function(t,e,i,n){n=this.cfg.extend(n);var r=n.kdf.execute(i,t.keySize,t.ivSize,n.salt,n.hasher);n.iv=r.iv;var a=x.encrypt.call(this,t,e,r.key,n);return a.mixIn(r),a},decrypt:function(t,e,i,n){n=this.cfg.extend(n),e=this._parse(e,n.format);var r=n.kdf.execute(i,t.keySize,t.ivSize,e.salt,n.hasher);n.iv=r.iv;var a=x.decrypt.call(this,t,e,r.key,n);return a}})}()})},19021:function(t,e,i){(function(e,i){t.exports=i()})(0,function(){var t=t||function(t,e){var n;if("undefined"!==typeof window&&window.crypto&&(n=window.crypto),"undefined"!==typeof self&&self.crypto&&(n=self.crypto),"undefined"!==typeof globalThis&&globalThis.crypto&&(n=globalThis.crypto),!n&&"undefined"!==typeof window&&window.msCrypto&&(n=window.msCrypto),!n&&"undefined"!==typeof i.g&&i.g.crypto&&(n=i.g.crypto),!n)try{n=i(50477)}catch(g){}var r=function(){if(n){if("function"===typeof n.getRandomValues)try{return n.getRandomValues(new Uint32Array(1))[0]}catch(g){}if("function"===typeof n.randomBytes)try{return n.randomBytes(4).readInt32LE()}catch(g){}}throw new Error("Native crypto module could not be used to get secure random number.")},a=Object.create||function(){function t(){}return function(e){var i;return t.prototype=e,i=new t,t.prototype=null,i}}(),o={},s=o.lib={},l=s.Base=function(){return{extend:function(t){var e=a(this);return t&&e.mixIn(t),e.hasOwnProperty("init")&&this.init!==e.init||(e.init=function(){e.$super.init.apply(this,arguments)}),e.init.prototype=e,e.$super=this,e},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),c=s.WordArray=l.extend({init:function(t,i){t=this.words=t||[],this.sigBytes=i!=e?i:4*t.length},toString:function(t){return(t||d).stringify(this)},concat:function(t){var e=this.words,i=t.words,n=this.sigBytes,r=t.sigBytes;if(this.clamp(),n%4)for(var a=0;a>>2]>>>24-a%4*8&255;e[n+a>>>2]|=o<<24-(n+a)%4*8}else for(var s=0;s>>2]=i[s>>>2];return this.sigBytes+=r,this},clamp:function(){var e=this.words,i=this.sigBytes;e[i>>>2]&=4294967295<<32-i%4*8,e.length=t.ceil(i/4)},clone:function(){var t=l.clone.call(this);return t.words=this.words.slice(0),t},random:function(t){for(var e=[],i=0;i>>2]>>>24-r%4*8&255;n.push((a>>>4).toString(16)),n.push((15&a).toString(16))}return n.join("")},parse:function(t){for(var e=t.length,i=[],n=0;n>>3]|=parseInt(t.substr(n,2),16)<<24-n%8*4;return new c.init(i,e/2)}},h=u.Latin1={stringify:function(t){for(var e=t.words,i=t.sigBytes,n=[],r=0;r>>2]>>>24-r%4*8&255;n.push(String.fromCharCode(a))}return n.join("")},parse:function(t){for(var e=t.length,i=[],n=0;n>>2]|=(255&t.charCodeAt(n))<<24-n%4*8;return new c.init(i,e)}},p=u.Utf8={stringify:function(t){try{return decodeURIComponent(escape(h.stringify(t)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(t){return h.parse(unescape(encodeURIComponent(t)))}},f=s.BufferedBlockAlgorithm=l.extend({reset:function(){this._data=new c.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=p.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(e){var i,n=this._data,r=n.words,a=n.sigBytes,o=this.blockSize,s=4*o,l=a/s;l=e?t.ceil(l):t.max((0|l)-this._minBufferSize,0);var u=l*o,d=t.min(4*u,a);if(u){for(var h=0;h>>2]>>>24-a%4*8&255,s=e[a+1>>>2]>>>24-(a+1)%4*8&255,l=e[a+2>>>2]>>>24-(a+2)%4*8&255,c=o<<16|s<<8|l,u=0;u<4&&a+.75*u>>6*(3-u)&63));var d=n.charAt(64);if(d)while(r.length%4)r.push(d);return r.join("")},parse:function(t){var e=t.length,i=this._map,n=this._reverseMap;if(!n){n=this._reverseMap=[];for(var r=0;r>>6-o%4*2,c=s|l;r[a>>>2]|=c<<24-a%4*8,a++}return n.create(r,a)}}(),t.enc.Base64})},64725:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=e.enc;r.Base64url={stringify:function(t,e){void 0===e&&(e=!0);var i=t.words,n=t.sigBytes,r=e?this._safe_map:this._map;t.clamp();for(var a=[],o=0;o>>2]>>>24-o%4*8&255,l=i[o+1>>>2]>>>24-(o+1)%4*8&255,c=i[o+2>>>2]>>>24-(o+2)%4*8&255,u=s<<16|l<<8|c,d=0;d<4&&o+.75*d>>6*(3-d)&63));var h=r.charAt(64);if(h)while(a.length%4)a.push(h);return a.join("")},parse:function(t,e){void 0===e&&(e=!0);var i=t.length,n=e?this._safe_map:this._map,r=this._reverseMap;if(!r){r=this._reverseMap=[];for(var o=0;o>>6-o%4*2,c=s|l;r[a>>>2]|=c<<24-a%4*8,a++}return n.create(r,a)}}(),t.enc.Base64url})},45503:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=e.enc;r.Utf16=r.Utf16BE={stringify:function(t){for(var e=t.words,i=t.sigBytes,n=[],r=0;r>>2]>>>16-r%4*8&65535;n.push(String.fromCharCode(a))}return n.join("")},parse:function(t){for(var e=t.length,i=[],r=0;r>>1]|=t.charCodeAt(r)<<16-r%2*16;return n.create(i,2*e)}};function a(t){return t<<8&4278255360|t>>>8&16711935}r.Utf16LE={stringify:function(t){for(var e=t.words,i=t.sigBytes,n=[],r=0;r>>2]>>>16-r%4*8&65535);n.push(String.fromCharCode(o))}return n.join("")},parse:function(t){for(var e=t.length,i=[],r=0;r>>1]|=a(t.charCodeAt(r)<<16-r%2*16);return n.create(i,2*e)}}}(),t.enc.Utf16})},39506:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(45471),i(51025))})(0,function(t){return function(){var e=t,i=e.lib,n=i.Base,r=i.WordArray,a=e.algo,o=a.MD5,s=a.EvpKDF=n.extend({cfg:n.extend({keySize:4,hasher:o,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){var i,n=this.cfg,a=n.hasher.create(),o=r.create(),s=o.words,l=n.keySize,c=n.iterations;while(s.lengthn&&(e=t.finalize(e)),e.clamp();for(var r=this._oKey=e.clone(),o=this._iKey=e.clone(),s=r.words,l=o.words,c=0;c>>2]|=t[n]<<24-n%4*8;r.call(this,i,e)}else r.apply(this,arguments)};a.prototype=n}}(),t.lib.WordArray})},84636:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(e){var i=t,n=i.lib,r=n.WordArray,a=n.Hasher,o=i.algo,s=[];(function(){for(var t=0;t<64;t++)s[t]=4294967296*e.abs(e.sin(t+1))|0})();var l=o.MD5=a.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(t,e){for(var i=0;i<16;i++){var n=e+i,r=t[n];t[n]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8)}var a=this._hash.words,o=t[e+0],l=t[e+1],p=t[e+2],f=t[e+3],v=t[e+4],g=t[e+5],m=t[e+6],y=t[e+7],b=t[e+8],x=t[e+9],_=t[e+10],w=t[e+11],C=t[e+12],S=t[e+13],k=t[e+14],A=t[e+15],T=a[0],M=a[1],I=a[2],E=a[3];T=c(T,M,I,E,o,7,s[0]),E=c(E,T,M,I,l,12,s[1]),I=c(I,E,T,M,p,17,s[2]),M=c(M,I,E,T,f,22,s[3]),T=c(T,M,I,E,v,7,s[4]),E=c(E,T,M,I,g,12,s[5]),I=c(I,E,T,M,m,17,s[6]),M=c(M,I,E,T,y,22,s[7]),T=c(T,M,I,E,b,7,s[8]),E=c(E,T,M,I,x,12,s[9]),I=c(I,E,T,M,_,17,s[10]),M=c(M,I,E,T,w,22,s[11]),T=c(T,M,I,E,C,7,s[12]),E=c(E,T,M,I,S,12,s[13]),I=c(I,E,T,M,k,17,s[14]),M=c(M,I,E,T,A,22,s[15]),T=u(T,M,I,E,l,5,s[16]),E=u(E,T,M,I,m,9,s[17]),I=u(I,E,T,M,w,14,s[18]),M=u(M,I,E,T,o,20,s[19]),T=u(T,M,I,E,g,5,s[20]),E=u(E,T,M,I,_,9,s[21]),I=u(I,E,T,M,A,14,s[22]),M=u(M,I,E,T,v,20,s[23]),T=u(T,M,I,E,x,5,s[24]),E=u(E,T,M,I,k,9,s[25]),I=u(I,E,T,M,f,14,s[26]),M=u(M,I,E,T,b,20,s[27]),T=u(T,M,I,E,S,5,s[28]),E=u(E,T,M,I,p,9,s[29]),I=u(I,E,T,M,y,14,s[30]),M=u(M,I,E,T,C,20,s[31]),T=d(T,M,I,E,g,4,s[32]),E=d(E,T,M,I,b,11,s[33]),I=d(I,E,T,M,w,16,s[34]),M=d(M,I,E,T,k,23,s[35]),T=d(T,M,I,E,l,4,s[36]),E=d(E,T,M,I,v,11,s[37]),I=d(I,E,T,M,y,16,s[38]),M=d(M,I,E,T,_,23,s[39]),T=d(T,M,I,E,S,4,s[40]),E=d(E,T,M,I,o,11,s[41]),I=d(I,E,T,M,f,16,s[42]),M=d(M,I,E,T,m,23,s[43]),T=d(T,M,I,E,x,4,s[44]),E=d(E,T,M,I,C,11,s[45]),I=d(I,E,T,M,A,16,s[46]),M=d(M,I,E,T,p,23,s[47]),T=h(T,M,I,E,o,6,s[48]),E=h(E,T,M,I,y,10,s[49]),I=h(I,E,T,M,k,15,s[50]),M=h(M,I,E,T,g,21,s[51]),T=h(T,M,I,E,C,6,s[52]),E=h(E,T,M,I,f,10,s[53]),I=h(I,E,T,M,_,15,s[54]),M=h(M,I,E,T,l,21,s[55]),T=h(T,M,I,E,b,6,s[56]),E=h(E,T,M,I,A,10,s[57]),I=h(I,E,T,M,m,15,s[58]),M=h(M,I,E,T,S,21,s[59]),T=h(T,M,I,E,v,6,s[60]),E=h(E,T,M,I,w,10,s[61]),I=h(I,E,T,M,p,15,s[62]),M=h(M,I,E,T,x,21,s[63]),a[0]=a[0]+T|0,a[1]=a[1]+M|0,a[2]=a[2]+I|0,a[3]=a[3]+E|0},_doFinalize:function(){var t=this._data,i=t.words,n=8*this._nDataBytes,r=8*t.sigBytes;i[r>>>5]|=128<<24-r%32;var a=e.floor(n/4294967296),o=n;i[15+(r+64>>>9<<4)]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),i[14+(r+64>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),t.sigBytes=4*(i.length+1),this._process();for(var s=this._hash,l=s.words,c=0;c<4;c++){var u=l[c];l[c]=16711935&(u<<8|u>>>24)|4278255360&(u<<24|u>>>8)}return s},clone:function(){var t=a.clone.call(this);return t._hash=this._hash.clone(),t}});function c(t,e,i,n,r,a,o){var s=t+(e&i|~e&n)+r+o;return(s<>>32-a)+e}function u(t,e,i,n,r,a,o){var s=t+(e&n|i&~n)+r+o;return(s<>>32-a)+e}function d(t,e,i,n,r,a,o){var s=t+(e^i^n)+r+o;return(s<>>32-a)+e}function h(t,e,i,n,r,a,o){var s=t+(i^(e|~n))+r+o;return(s<>>32-a)+e}i.MD5=a._createHelper(l),i.HmacMD5=a._createHmacHelper(l)}(Math),t.MD5})},82169:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.mode.CFB=function(){var e=t.lib.BlockCipherMode.extend();function i(t,e,i,n){var r,a=this._iv;a?(r=a.slice(0),this._iv=void 0):r=this._prevBlock,n.encryptBlock(r,0);for(var o=0;o>24&255)){var e=t>>16&255,i=t>>8&255,n=255&t;255===e?(e=0,255===i?(i=0,255===n?n=0:++n):++i):++e,t=0,t+=e<<16,t+=i<<8,t+=n}else t+=1<<24;return t}function n(t){return 0===(t[0]=i(t[0]))&&(t[1]=i(t[1])),t}var r=e.Encryptor=e.extend({processBlock:function(t,e){var i=this._cipher,r=i.blockSize,a=this._iv,o=this._counter;a&&(o=this._counter=a.slice(0),this._iv=void 0),n(o);var s=o.slice(0);i.encryptBlock(s,0);for(var l=0;l>>2]|=r<<24-a%4*8,t.sigBytes+=r},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},t.pad.Ansix923})},54905:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.pad.Iso10126={pad:function(e,i){var n=4*i,r=n-e.sigBytes%n;e.concat(t.lib.WordArray.random(r-1)).concat(t.lib.WordArray.create([r<<24],1))},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},t.pad.Iso10126})},10482:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.pad.Iso97971={pad:function(e,i){e.concat(t.lib.WordArray.create([2147483648],1)),t.pad.ZeroPadding.pad(e,i)},unpad:function(e){t.pad.ZeroPadding.unpad(e),e.sigBytes--}},t.pad.Iso97971})},58124:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.pad.NoPadding={pad:function(){},unpad:function(){}},t.pad.NoPadding})},52155:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.pad.ZeroPadding={pad:function(t,e){var i=4*e;t.clamp(),t.sigBytes+=i-(t.sigBytes%i||i)},unpad:function(t){var e=t.words,i=t.sigBytes-1;for(i=t.sigBytes-1;i>=0;i--)if(e[i>>>2]>>>24-i%4*8&255){t.sigBytes=i+1;break}}},t.pad.ZeroPadding})},70019:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(63009),i(51025))})(0,function(t){return function(){var e=t,i=e.lib,n=i.Base,r=i.WordArray,a=e.algo,o=a.SHA256,s=a.HMAC,l=a.PBKDF2=n.extend({cfg:n.extend({keySize:4,hasher:o,iterations:25e4}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){var i=this.cfg,n=s.create(i.hasher,t),a=r.create(),o=r.create([1]),l=a.words,c=o.words,u=i.keySize,d=i.iterations;while(l.length>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],n=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];this._b=0;for(var r=0;r<4;r++)c.call(this);for(r=0;r<8;r++)n[r]^=i[r+4&7];if(e){var a=e.words,o=a[0],s=a[1],l=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),u=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),d=l>>>16|4294901760&u,h=u<<16|65535&l;n[0]^=l,n[1]^=d,n[2]^=u,n[3]^=h,n[4]^=l,n[5]^=d,n[6]^=u,n[7]^=h;for(r=0;r<4;r++)c.call(this)}},_doProcessBlock:function(t,e){var i=this._X;c.call(this),a[0]=i[0]^i[5]>>>16^i[3]<<16,a[1]=i[2]^i[7]>>>16^i[5]<<16,a[2]=i[4]^i[1]>>>16^i[7]<<16,a[3]=i[6]^i[3]>>>16^i[1]<<16;for(var n=0;n<4;n++)a[n]=16711935&(a[n]<<8|a[n]>>>24)|4278255360&(a[n]<<24|a[n]>>>8),t[e+n]^=a[n]},blockSize:4,ivSize:2});function c(){for(var t=this._X,e=this._C,i=0;i<8;i++)o[i]=e[i];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(i=0;i<8;i++){var n=t[i]+e[i],r=65535&n,a=n>>>16,l=((r*r>>>17)+r*a>>>15)+a*a,c=((4294901760&n)*n|0)+((65535&n)*n|0);s[i]=l^c}t[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,t[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,t[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,t[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,t[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,t[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,t[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,t[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}e.RabbitLegacy=n._createHelper(l)}(),t.RabbitLegacy})},96298:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.StreamCipher,r=e.algo,a=[],o=[],s=[],l=r.Rabbit=n.extend({_doReset:function(){for(var t=this._key.words,e=this.cfg.iv,i=0;i<4;i++)t[i]=16711935&(t[i]<<8|t[i]>>>24)|4278255360&(t[i]<<24|t[i]>>>8);var n=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],r=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];this._b=0;for(i=0;i<4;i++)c.call(this);for(i=0;i<8;i++)r[i]^=n[i+4&7];if(e){var a=e.words,o=a[0],s=a[1],l=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),u=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),d=l>>>16|4294901760&u,h=u<<16|65535&l;r[0]^=l,r[1]^=d,r[2]^=u,r[3]^=h,r[4]^=l,r[5]^=d,r[6]^=u,r[7]^=h;for(i=0;i<4;i++)c.call(this)}},_doProcessBlock:function(t,e){var i=this._X;c.call(this),a[0]=i[0]^i[5]>>>16^i[3]<<16,a[1]=i[2]^i[7]>>>16^i[5]<<16,a[2]=i[4]^i[1]>>>16^i[7]<<16,a[3]=i[6]^i[3]>>>16^i[1]<<16;for(var n=0;n<4;n++)a[n]=16711935&(a[n]<<8|a[n]>>>24)|4278255360&(a[n]<<24|a[n]>>>8),t[e+n]^=a[n]},blockSize:4,ivSize:2});function c(){for(var t=this._X,e=this._C,i=0;i<8;i++)o[i]=e[i];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(i=0;i<8;i++){var n=t[i]+e[i],r=65535&n,a=n>>>16,l=((r*r>>>17)+r*a>>>15)+a*a,c=((4294901760&n)*n|0)+((65535&n)*n|0);s[i]=l^c}t[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,t[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,t[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,t[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,t[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,t[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,t[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,t[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}e.Rabbit=n._createHelper(l)}(),t.Rabbit})},77193:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.StreamCipher,r=e.algo,a=r.RC4=n.extend({_doReset:function(){for(var t=this._key,e=t.words,i=t.sigBytes,n=this._S=[],r=0;r<256;r++)n[r]=r;r=0;for(var a=0;r<256;r++){var o=r%i,s=e[o>>>2]>>>24-o%4*8&255;a=(a+n[r]+s)%256;var l=n[r];n[r]=n[a],n[a]=l}this._i=this._j=0},_doProcessBlock:function(t,e){t[e]^=o.call(this)},keySize:8,ivSize:0});function o(){for(var t=this._S,e=this._i,i=this._j,n=0,r=0;r<4;r++){e=(e+1)%256,i=(i+t[e])%256;var a=t[e];t[e]=t[i],t[i]=a,n|=t[(t[e]+t[i])%256]<<24-8*r}return this._i=e,this._j=i,n}e.RC4=n._createHelper(a);var s=r.RC4Drop=a.extend({cfg:a.cfg.extend({drop:192}),_doReset:function(){a._doReset.call(this);for(var t=this.cfg.drop;t>0;t--)o.call(this)}});e.RC4Drop=n._createHelper(s)}(),t.RC4})},78056:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){ -/** @preserve - (c) 2012 by Cédric Mesnil. All rights reserved. - - Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -return function(){var e=t,i=e.lib,n=i.WordArray,r=i.Hasher,a=e.algo,o=n.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),s=n.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),l=n.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),c=n.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),u=n.create([0,1518500249,1859775393,2400959708,2840853838]),d=n.create([1352829926,1548603684,1836072691,2053994217,0]),h=a.RIPEMD160=r.extend({_doReset:function(){this._hash=n.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var i=0;i<16;i++){var n=e+i,r=t[n];t[n]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8)}var a,h,b,x,_,w,C,S,k,A,T,M=this._hash.words,I=u.words,E=d.words,D=o.words,P=s.words,L=l.words,R=c.words;w=a=M[0],C=h=M[1],S=b=M[2],k=x=M[3],A=_=M[4];for(i=0;i<80;i+=1)T=a+t[e+D[i]]|0,T+=i<16?p(h,b,x)+I[0]:i<32?f(h,b,x)+I[1]:i<48?v(h,b,x)+I[2]:i<64?g(h,b,x)+I[3]:m(h,b,x)+I[4],T|=0,T=y(T,L[i]),T=T+_|0,a=_,_=x,x=y(b,10),b=h,h=T,T=w+t[e+P[i]]|0,T+=i<16?m(C,S,k)+E[0]:i<32?g(C,S,k)+E[1]:i<48?v(C,S,k)+E[2]:i<64?f(C,S,k)+E[3]:p(C,S,k)+E[4],T|=0,T=y(T,R[i]),T=T+A|0,w=A,A=k,k=y(S,10),S=C,C=T;T=M[1]+b+k|0,M[1]=M[2]+x+A|0,M[2]=M[3]+_+w|0,M[3]=M[4]+a+C|0,M[4]=M[0]+h+S|0,M[0]=T},_doFinalize:function(){var t=this._data,e=t.words,i=8*this._nDataBytes,n=8*t.sigBytes;e[n>>>5]|=128<<24-n%32,e[14+(n+64>>>9<<4)]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),t.sigBytes=4*(e.length+1),this._process();for(var r=this._hash,a=r.words,o=0;o<5;o++){var s=a[o];a[o]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8)}return r},clone:function(){var t=r.clone.call(this);return t._hash=this._hash.clone(),t}});function p(t,e,i){return t^e^i}function f(t,e,i){return t&e|~t&i}function v(t,e,i){return(t|~e)^i}function g(t,e,i){return t&i|e&~i}function m(t,e,i){return t^(e|~i)}function y(t,e){return t<>>32-e}e.RIPEMD160=r._createHelper(h),e.HmacRIPEMD160=r._createHmacHelper(h)}(Math),t.RIPEMD160})},45471:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=i.Hasher,a=e.algo,o=[],s=a.SHA1=r.extend({_doReset:function(){this._hash=new n.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var i=this._hash.words,n=i[0],r=i[1],a=i[2],s=i[3],l=i[4],c=0;c<80;c++){if(c<16)o[c]=0|t[e+c];else{var u=o[c-3]^o[c-8]^o[c-14]^o[c-16];o[c]=u<<1|u>>>31}var d=(n<<5|n>>>27)+l+o[c];d+=c<20?1518500249+(r&a|~r&s):c<40?1859775393+(r^a^s):c<60?(r&a|r&s|a&s)-1894007588:(r^a^s)-899497514,l=s,s=a,a=r<<30|r>>>2,r=n,n=d}i[0]=i[0]+n|0,i[1]=i[1]+r|0,i[2]=i[2]+a|0,i[3]=i[3]+s|0,i[4]=i[4]+l|0},_doFinalize:function(){var t=this._data,e=t.words,i=8*this._nDataBytes,n=8*t.sigBytes;return e[n>>>5]|=128<<24-n%32,e[14+(n+64>>>9<<4)]=Math.floor(i/4294967296),e[15+(n+64>>>9<<4)]=i,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=r.clone.call(this);return t._hash=this._hash.clone(),t}});e.SHA1=r._createHelper(s),e.HmacSHA1=r._createHmacHelper(s)}(),t.SHA1})},36308:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(63009))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=e.algo,a=r.SHA256,o=r.SHA224=a.extend({_doReset:function(){this._hash=new n.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var t=a._doFinalize.call(this);return t.sigBytes-=4,t}});e.SHA224=a._createHelper(o),e.HmacSHA224=a._createHmacHelper(o)}(),t.SHA224})},63009:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(e){var i=t,n=i.lib,r=n.WordArray,a=n.Hasher,o=i.algo,s=[],l=[];(function(){function t(t){for(var i=e.sqrt(t),n=2;n<=i;n++)if(!(t%n))return!1;return!0}function i(t){return 4294967296*(t-(0|t))|0}var n=2,r=0;while(r<64)t(n)&&(r<8&&(s[r]=i(e.pow(n,.5))),l[r]=i(e.pow(n,1/3)),r++),n++})();var c=[],u=o.SHA256=a.extend({_doReset:function(){this._hash=new r.init(s.slice(0))},_doProcessBlock:function(t,e){for(var i=this._hash.words,n=i[0],r=i[1],a=i[2],o=i[3],s=i[4],u=i[5],d=i[6],h=i[7],p=0;p<64;p++){if(p<16)c[p]=0|t[e+p];else{var f=c[p-15],v=(f<<25|f>>>7)^(f<<14|f>>>18)^f>>>3,g=c[p-2],m=(g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10;c[p]=v+c[p-7]+m+c[p-16]}var y=s&u^~s&d,b=n&r^n&a^r&a,x=(n<<30|n>>>2)^(n<<19|n>>>13)^(n<<10|n>>>22),_=(s<<26|s>>>6)^(s<<21|s>>>11)^(s<<7|s>>>25),w=h+_+y+l[p]+c[p],C=x+b;h=d,d=u,u=s,s=o+w|0,o=a,a=r,r=n,n=w+C|0}i[0]=i[0]+n|0,i[1]=i[1]+r|0,i[2]=i[2]+a|0,i[3]=i[3]+o|0,i[4]=i[4]+s|0,i[5]=i[5]+u|0,i[6]=i[6]+d|0,i[7]=i[7]+h|0},_doFinalize:function(){var t=this._data,i=t.words,n=8*this._nDataBytes,r=8*t.sigBytes;return i[r>>>5]|=128<<24-r%32,i[14+(r+64>>>9<<4)]=e.floor(n/4294967296),i[15+(r+64>>>9<<4)]=n,t.sigBytes=4*i.length,this._process(),this._hash},clone:function(){var t=a.clone.call(this);return t._hash=this._hash.clone(),t}});i.SHA256=a._createHelper(u),i.HmacSHA256=a._createHmacHelper(u)}(Math),t.SHA256})},45953:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(43240))})(0,function(t){return function(e){var i=t,n=i.lib,r=n.WordArray,a=n.Hasher,o=i.x64,s=o.Word,l=i.algo,c=[],u=[],d=[];(function(){for(var t=1,e=0,i=0;i<24;i++){c[t+5*e]=(i+1)*(i+2)/2%64;var n=e%5,r=(2*t+3*e)%5;t=n,e=r}for(t=0;t<5;t++)for(e=0;e<5;e++)u[t+5*e]=e+(2*t+3*e)%5*5;for(var a=1,o=0;o<24;o++){for(var l=0,h=0,p=0;p<7;p++){if(1&a){var f=(1<>>24)|4278255360&(a<<24|a>>>8),o=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8);var s=i[r];s.high^=o,s.low^=a}for(var l=0;l<24;l++){for(var p=0;p<5;p++){for(var f=0,v=0,g=0;g<5;g++){s=i[p+5*g];f^=s.high,v^=s.low}var m=h[p];m.high=f,m.low=v}for(p=0;p<5;p++){var y=h[(p+4)%5],b=h[(p+1)%5],x=b.high,_=b.low;for(f=y.high^(x<<1|_>>>31),v=y.low^(_<<1|x>>>31),g=0;g<5;g++){s=i[p+5*g];s.high^=f,s.low^=v}}for(var w=1;w<25;w++){s=i[w];var C=s.high,S=s.low,k=c[w];k<32?(f=C<>>32-k,v=S<>>32-k):(f=S<>>64-k,v=C<>>64-k);var A=h[u[w]];A.high=f,A.low=v}var T=h[0],M=i[0];T.high=M.high,T.low=M.low;for(p=0;p<5;p++)for(g=0;g<5;g++){w=p+5*g,s=i[w];var I=h[w],E=h[(p+1)%5+5*g],D=h[(p+2)%5+5*g];s.high=I.high^~E.high&D.high,s.low=I.low^~E.low&D.low}s=i[0];var P=d[l];s.high^=P.high,s.low^=P.low}},_doFinalize:function(){var t=this._data,i=t.words,n=(this._nDataBytes,8*t.sigBytes),a=32*this.blockSize;i[n>>>5]|=1<<24-n%32,i[(e.ceil((n+1)/a)*a>>>5)-1]|=128,t.sigBytes=4*i.length,this._process();for(var o=this._state,s=this.cfg.outputLength/8,l=s/8,c=[],u=0;u>>24)|4278255360&(h<<24|h>>>8),p=16711935&(p<<8|p>>>24)|4278255360&(p<<24|p>>>8),c.push(p),c.push(h)}return new r.init(c,s)},clone:function(){for(var t=a.clone.call(this),e=t._state=this._state.slice(0),i=0;i<25;i++)e[i]=e[i].clone();return t}});i.SHA3=a._createHelper(p),i.HmacSHA3=a._createHmacHelper(p)}(Math),t.SHA3})},89557:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(43240),i(81380))})(0,function(t){return function(){var e=t,i=e.x64,n=i.Word,r=i.WordArray,a=e.algo,o=a.SHA512,s=a.SHA384=o.extend({_doReset:function(){this._hash=new r.init([new n.init(3418070365,3238371032),new n.init(1654270250,914150663),new n.init(2438529370,812702999),new n.init(355462360,4144912697),new n.init(1731405415,4290775857),new n.init(2394180231,1750603025),new n.init(3675008525,1694076839),new n.init(1203062813,3204075428)])},_doFinalize:function(){var t=o._doFinalize.call(this);return t.sigBytes-=16,t}});e.SHA384=o._createHelper(s),e.HmacSHA384=o._createHmacHelper(s)}(),t.SHA384})},81380:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(43240))})(0,function(t){return function(){var e=t,i=e.lib,n=i.Hasher,r=e.x64,a=r.Word,o=r.WordArray,s=e.algo;function l(){return a.create.apply(a,arguments)}var c=[l(1116352408,3609767458),l(1899447441,602891725),l(3049323471,3964484399),l(3921009573,2173295548),l(961987163,4081628472),l(1508970993,3053834265),l(2453635748,2937671579),l(2870763221,3664609560),l(3624381080,2734883394),l(310598401,1164996542),l(607225278,1323610764),l(1426881987,3590304994),l(1925078388,4068182383),l(2162078206,991336113),l(2614888103,633803317),l(3248222580,3479774868),l(3835390401,2666613458),l(4022224774,944711139),l(264347078,2341262773),l(604807628,2007800933),l(770255983,1495990901),l(1249150122,1856431235),l(1555081692,3175218132),l(1996064986,2198950837),l(2554220882,3999719339),l(2821834349,766784016),l(2952996808,2566594879),l(3210313671,3203337956),l(3336571891,1034457026),l(3584528711,2466948901),l(113926993,3758326383),l(338241895,168717936),l(666307205,1188179964),l(773529912,1546045734),l(1294757372,1522805485),l(1396182291,2643833823),l(1695183700,2343527390),l(1986661051,1014477480),l(2177026350,1206759142),l(2456956037,344077627),l(2730485921,1290863460),l(2820302411,3158454273),l(3259730800,3505952657),l(3345764771,106217008),l(3516065817,3606008344),l(3600352804,1432725776),l(4094571909,1467031594),l(275423344,851169720),l(430227734,3100823752),l(506948616,1363258195),l(659060556,3750685593),l(883997877,3785050280),l(958139571,3318307427),l(1322822218,3812723403),l(1537002063,2003034995),l(1747873779,3602036899),l(1955562222,1575990012),l(2024104815,1125592928),l(2227730452,2716904306),l(2361852424,442776044),l(2428436474,593698344),l(2756734187,3733110249),l(3204031479,2999351573),l(3329325298,3815920427),l(3391569614,3928383900),l(3515267271,566280711),l(3940187606,3454069534),l(4118630271,4000239992),l(116418474,1914138554),l(174292421,2731055270),l(289380356,3203993006),l(460393269,320620315),l(685471733,587496836),l(852142971,1086792851),l(1017036298,365543100),l(1126000580,2618297676),l(1288033470,3409855158),l(1501505948,4234509866),l(1607167915,987167468),l(1816402316,1246189591)],u=[];(function(){for(var t=0;t<80;t++)u[t]=l()})();var d=s.SHA512=n.extend({_doReset:function(){this._hash=new o.init([new a.init(1779033703,4089235720),new a.init(3144134277,2227873595),new a.init(1013904242,4271175723),new a.init(2773480762,1595750129),new a.init(1359893119,2917565137),new a.init(2600822924,725511199),new a.init(528734635,4215389547),new a.init(1541459225,327033209)])},_doProcessBlock:function(t,e){for(var i=this._hash.words,n=i[0],r=i[1],a=i[2],o=i[3],s=i[4],l=i[5],d=i[6],h=i[7],p=n.high,f=n.low,v=r.high,g=r.low,m=a.high,y=a.low,b=o.high,x=o.low,_=s.high,w=s.low,C=l.high,S=l.low,k=d.high,A=d.low,T=h.high,M=h.low,I=p,E=f,D=v,P=g,L=m,R=y,F=b,B=x,N=_,O=w,z=C,W=S,V=k,$=A,H=T,K=M,Y=0;Y<80;Y++){var X,U,G=u[Y];if(Y<16)U=G.high=0|t[e+2*Y],X=G.low=0|t[e+2*Y+1];else{var j=u[Y-15],q=j.high,Z=j.low,J=(q>>>1|Z<<31)^(q>>>8|Z<<24)^q>>>7,Q=(Z>>>1|q<<31)^(Z>>>8|q<<24)^(Z>>>7|q<<25),tt=u[Y-2],et=tt.high,it=tt.low,nt=(et>>>19|it<<13)^(et<<3|it>>>29)^et>>>6,rt=(it>>>19|et<<13)^(it<<3|et>>>29)^(it>>>6|et<<26),at=u[Y-7],ot=at.high,st=at.low,lt=u[Y-16],ct=lt.high,ut=lt.low;X=Q+st,U=J+ot+(X>>>0>>0?1:0),X+=rt,U=U+nt+(X>>>0>>0?1:0),X+=ut,U=U+ct+(X>>>0>>0?1:0),G.high=U,G.low=X}var dt=N&z^~N&V,ht=O&W^~O&$,pt=I&D^I&L^D&L,ft=E&P^E&R^P&R,vt=(I>>>28|E<<4)^(I<<30|E>>>2)^(I<<25|E>>>7),gt=(E>>>28|I<<4)^(E<<30|I>>>2)^(E<<25|I>>>7),mt=(N>>>14|O<<18)^(N>>>18|O<<14)^(N<<23|O>>>9),yt=(O>>>14|N<<18)^(O>>>18|N<<14)^(O<<23|N>>>9),bt=c[Y],xt=bt.high,_t=bt.low,wt=K+yt,Ct=H+mt+(wt>>>0>>0?1:0),St=(wt=wt+ht,Ct=Ct+dt+(wt>>>0>>0?1:0),wt=wt+_t,Ct=Ct+xt+(wt>>>0<_t>>>0?1:0),wt=wt+X,Ct=Ct+U+(wt>>>0>>0?1:0),gt+ft),kt=vt+pt+(St>>>0>>0?1:0);H=V,K=$,V=z,$=W,z=N,W=O,O=B+wt|0,N=F+Ct+(O>>>0>>0?1:0)|0,F=L,B=R,L=D,R=P,D=I,P=E,E=wt+St|0,I=Ct+kt+(E>>>0>>0?1:0)|0}f=n.low=f+E,n.high=p+I+(f>>>0>>0?1:0),g=r.low=g+P,r.high=v+D+(g>>>0

>>0?1:0),y=a.low=y+R,a.high=m+L+(y>>>0>>0?1:0),x=o.low=x+B,o.high=b+F+(x>>>0>>0?1:0),w=s.low=w+O,s.high=_+N+(w>>>0>>0?1:0),S=l.low=S+W,l.high=C+z+(S>>>0>>0?1:0),A=d.low=A+$,d.high=k+V+(A>>>0<$>>>0?1:0),M=h.low=M+K,h.high=T+H+(M>>>0>>0?1:0)},_doFinalize:function(){var t=this._data,e=t.words,i=8*this._nDataBytes,n=8*t.sigBytes;e[n>>>5]|=128<<24-n%32,e[30+(n+128>>>10<<5)]=Math.floor(i/4294967296),e[31+(n+128>>>10<<5)]=i,t.sigBytes=4*e.length,this._process();var r=this._hash.toX32();return r},clone:function(){var t=n.clone.call(this);return t._hash=this._hash.clone(),t},blockSize:32});e.SHA512=n._createHelper(d),e.HmacSHA512=n._createHmacHelper(d)}(),t.SHA512})},7628:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=i.BlockCipher,a=e.algo,o=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],s=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],l=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],c=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],u=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],d=a.DES=r.extend({_doReset:function(){for(var t=this._key,e=t.words,i=[],n=0;n<56;n++){var r=o[n]-1;i[n]=e[r>>>5]>>>31-r%32&1}for(var a=this._subKeys=[],c=0;c<16;c++){var u=a[c]=[],d=l[c];for(n=0;n<24;n++)u[n/6|0]|=i[(s[n]-1+d)%28]<<31-n%6,u[4+(n/6|0)]|=i[28+(s[n+24]-1+d)%28]<<31-n%6;u[0]=u[0]<<1|u[0]>>>31;for(n=1;n<7;n++)u[n]=u[n]>>>4*(n-1)+3;u[7]=u[7]<<5|u[7]>>>27}var h=this._invSubKeys=[];for(n=0;n<16;n++)h[n]=a[15-n]},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._subKeys)},decryptBlock:function(t,e){this._doCryptBlock(t,e,this._invSubKeys)},_doCryptBlock:function(t,e,i){this._lBlock=t[e],this._rBlock=t[e+1],h.call(this,4,252645135),h.call(this,16,65535),p.call(this,2,858993459),p.call(this,8,16711935),h.call(this,1,1431655765);for(var n=0;n<16;n++){for(var r=i[n],a=this._lBlock,o=this._rBlock,s=0,l=0;l<8;l++)s|=c[l][((o^r[l])&u[l])>>>0];this._lBlock=o,this._rBlock=a^s}var d=this._lBlock;this._lBlock=this._rBlock,this._rBlock=d,h.call(this,1,1431655765),p.call(this,8,16711935),p.call(this,2,858993459),h.call(this,16,65535),h.call(this,4,252645135),t[e]=this._lBlock,t[e+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});function h(t,e){var i=(this._lBlock>>>t^this._rBlock)&e;this._rBlock^=i,this._lBlock^=i<>>t^this._lBlock)&e;this._lBlock^=i,this._rBlock^=i<192.");var i=e.slice(0,2),r=e.length<4?e.slice(0,2):e.slice(2,4),a=e.length<6?e.slice(0,2):e.slice(4,6);this._des1=d.createEncryptor(n.create(i)),this._des2=d.createEncryptor(n.create(r)),this._des3=d.createEncryptor(n.create(a))},encryptBlock:function(t,e){this._des1.encryptBlock(t,e),this._des2.decryptBlock(t,e),this._des3.encryptBlock(t,e)},decryptBlock:function(t,e){this._des3.decryptBlock(t,e),this._des2.encryptBlock(t,e),this._des1.decryptBlock(t,e)},keySize:6,ivSize:2,blockSize:2});e.TripleDES=r._createHelper(f)}(),t.TripleDES})},43240:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(e){var i=t,n=i.lib,r=n.Base,a=n.WordArray,o=i.x64={};o.Word=r.extend({init:function(t,e){this.high=t,this.low=e}}),o.WordArray=r.extend({init:function(t,i){t=this.words=t||[],this.sigBytes=i!=e?i:8*t.length},toX32:function(){for(var t=this.words,e=t.length,i=[],n=0;n=0?"linear-gradient(135deg, #11998e, #38ef7d)":"linear-gradient(135deg, #ff416c, #ff4b2b)"}},[e("a-icon",{attrs:{type:"rise"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value",class:(t.strategySummary.total_pnl||0)>=0?"text-profit":"text-loss"},[t._v(" "+t._s(t.formatPnl(t.strategySummary.total_pnl))+" "),e("span",{staticClass:"roi-badge"},[t._v(t._s(t.strategySummary.total_roi||0)+"%")])]),e("div",{staticClass:"summary-sub"},[t._v(" "+t._s(t.$t("systemOverview.live")||"实盘")+": "+t._s(t.formatPnl(t.strategySummary.live_pnl))+" / "+t._s(t.$t("systemOverview.signal")||"仅通知")+": "+t._s(t.formatPnl(t.strategySummary.signal_pnl))+" ")]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("systemOverview.totalPnl")||"Total PnL"))])])])]):t._e(),e("div",{staticClass:"toolbar"},[e("div",{staticClass:"toolbar-left"},[e("a-button",{on:{click:t.loadSystemStrategies}},[e("a-icon",{attrs:{type:"reload"}}),t._v(" "+t._s(t.$t("common.refresh")||"Refresh")+" ")],1),e("a-select",{staticStyle:{width:"140px"},on:{change:t.handleStrategyFilterChange},model:{value:t.strategyStatusFilter,callback:function(e){t.strategyStatusFilter=e},expression:"strategyStatusFilter"}},[e("a-select-option",{attrs:{value:"all"}},[t._v(t._s(t.$t("systemOverview.filterAll")||"All Status"))]),e("a-select-option",{attrs:{value:"running"}},[t._v(t._s(t.$t("systemOverview.filterRunning")||"Running"))]),e("a-select-option",{attrs:{value:"stopped"}},[t._v(t._s(t.$t("systemOverview.filterStopped")||"Stopped"))])],1)],1),e("div",{staticClass:"toolbar-right"},[e("a-input-search",{staticStyle:{width:"280px"},attrs:{placeholder:t.$t("systemOverview.searchPlaceholder")||"Search strategy/symbol/user",allowClear:""},on:{search:t.handleStrategySearch,pressEnter:t.handleStrategySearch},model:{value:t.strategySearchKeyword,callback:function(e){t.strategySearchKeyword=e},expression:"strategySearchKeyword"}})],1)]),e("a-card",{staticClass:"user-table-card",attrs:{bordered:!1}},[e("a-table",{attrs:{columns:t.strategyColumns,dataSource:t.systemStrategies,loading:t.strategyLoading,pagination:t.strategyPagination,rowKey:function(t){return t.id},scroll:{x:1600}},on:{change:t.handleStrategyTableChange},scopedSlots:t._u([{key:"strategyStatus",fn:function(a){return[e("span",{staticClass:"status-cell"},[e("span",{staticClass:"status-dot",class:"running"===a?"dot-running":"dot-stopped"}),e("span",{class:"running"===a?"status-running":"status-stopped"},[t._v(" "+t._s("running"===a?t.$t("systemOverview.running")||"Running":t.$t("systemOverview.stopped")||"Stopped")+" ")])])]}},{key:"userInfo",fn:function(a,s){return[e("a-tooltip",{attrs:{title:s.nickname||s.username||"-"}},[e("span",{staticClass:"user-cell"},[e("a-avatar",{style:{backgroundColor:t.getUserColor(s.user_id),fontSize:"11px",marginRight:"6px"},attrs:{size:"small"}},[t._v(" "+t._s((s.nickname||s.username||"?").charAt(0).toUpperCase())+" ")]),e("span",{staticClass:"user-name"},[t._v(t._s(t.truncate(s.nickname||s.username||"-",8)))])],1)])]}},{key:"symbolInfo",fn:function(a,s){return[e("div",[e("span",{staticClass:"symbol-text"},[t._v(t._s(s.symbol||"-"))]),"cross_sectional"===s.cs_strategy_type?e("a-tag",{staticStyle:{"margin-left":"4px"},attrs:{color:"purple",size:"small"}},[t._v("CS")]):t._e()],1),"cross_sectional"===s.cs_strategy_type&&s.symbol_list&&s.symbol_list.length?e("div",{staticClass:"symbol-count text-muted"},[t._v(" "+t._s(s.symbol_list.length)+" "+t._s(t.$t("systemOverview.symbols")||"symbols")+" ")]):t._e()]}},{key:"capitalInfo",fn:function(a){return[e("span",[t._v(t._s(t.formatNumber(a)))])]}},{key:"pnlInfo",fn:function(a,s){return[e("div",{class:s.total_pnl>=0?"text-profit":"text-loss"},[e("span",{staticClass:"pnl-value"},[t._v(t._s(t.formatPnl(s.total_pnl)))]),e("span",{staticClass:"roi-text"},[t._v("("+t._s(s.roi>=0?"+":"")+t._s(s.roi)+"%)")])]),e("div",{staticClass:"pnl-detail text-muted"},[e("span",[t._v(t._s(t.$t("systemOverview.realized")||"Real")+": "+t._s(t.formatPnl(s.total_realized_pnl)))]),e("span",{staticStyle:{"margin-left":"8px"}},[t._v(t._s(t.$t("systemOverview.unrealized")||"Unreal")+": "+t._s(t.formatPnl(s.total_unrealized_pnl)))])])]}},{key:"positionInfo",fn:function(t,a){return[e("a-badge",{attrs:{count:a.position_count,numberStyle:{backgroundColor:a.position_count>0?"#52c41a":"#d9d9d9"}}})]}},{key:"tradeInfo",fn:function(a){return[e("span",[t._v(t._s(a||0))])]}},{key:"indicatorInfo",fn:function(a){return[a?e("a-tooltip",{attrs:{title:a}},[e("span",{staticClass:"indicator-name"},[t._v(t._s(t.truncate(a,16)))])]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"exchangeInfo",fn:function(a){return[a?e("span",{staticClass:"exchange-name"},[t._v(t._s(a))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"timeframeInfo",fn:function(a){return[a?e("a-tag",{attrs:{size:"small"}},[t._v(t._s(a))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"leverageInfo",fn:function(a){return[a>1?e("span",{staticStyle:{color:"#fa8c16","font-weight":"600"}},[t._v(t._s(a)+"x")]):e("span",[t._v(t._s(a||1)+"x")])]}},{key:"createdAtInfo",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}}])})],1)],1),e("a-tab-pane",{key:"orders",attrs:{tab:t.$t("adminOrders.tabTitle")||"Order List"}},[t.orderSummary?e("div",{staticClass:"summary-cards"},[e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #667eea, #764ba2)"}},[e("a-icon",{attrs:{type:"file-text"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.orderSummary.total_orders||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminOrders.totalOrders")||"Total Orders"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #11998e, #38ef7d)"}},[e("a-icon",{attrs:{type:"check-circle"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.orderSummary.paid_orders||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminOrders.paidOrders")||"Paid"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #f093fb, #f5576c)"}},[e("a-icon",{attrs:{type:"clock-circle"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.orderSummary.pending_orders||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminOrders.pendingOrders")||"Pending"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #fa709a, #fee140)"}},[e("a-icon",{attrs:{type:"dollar"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.formatNumber(t.orderSummary.total_revenue))+" "),e("span",{staticStyle:{"font-size":"13px",color:"#999"}},[t._v("USDT")])]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminOrders.totalRevenue")||"Total Revenue"))])])])]):t._e(),e("div",{staticClass:"toolbar"},[e("div",{staticClass:"toolbar-left"},[e("a-button",{on:{click:t.loadOrders}},[e("a-icon",{attrs:{type:"reload"}}),t._v(" "+t._s(t.$t("common.refresh")||"Refresh")+" ")],1),e("a-select",{staticStyle:{width:"140px"},on:{change:t.handleOrderFilterChange},model:{value:t.orderStatusFilter,callback:function(e){t.orderStatusFilter=e},expression:"orderStatusFilter"}},[e("a-select-option",{attrs:{value:"all"}},[t._v(t._s(t.$t("adminOrders.filterAll")||"All Status"))]),e("a-select-option",{attrs:{value:"pending"}},[t._v(t._s(t.$t("adminOrders.filterPending")||"Pending"))]),e("a-select-option",{attrs:{value:"paid"}},[t._v(t._s(t.$t("adminOrders.filterPaid")||"Paid"))]),e("a-select-option",{attrs:{value:"confirmed"}},[t._v(t._s(t.$t("adminOrders.filterConfirmed")||"Confirmed"))]),e("a-select-option",{attrs:{value:"expired"}},[t._v(t._s(t.$t("adminOrders.filterExpired")||"Expired"))])],1)],1),e("div",{staticClass:"toolbar-right"},[e("a-input-search",{staticStyle:{width:"280px"},attrs:{placeholder:t.$t("adminOrders.searchPlaceholder")||"Search by username/email",allowClear:""},on:{search:t.handleOrderSearch,pressEnter:t.handleOrderSearch},model:{value:t.orderSearchKeyword,callback:function(e){t.orderSearchKeyword=e},expression:"orderSearchKeyword"}})],1)]),e("a-card",{staticClass:"user-table-card",attrs:{bordered:!1}},[e("a-table",{attrs:{columns:t.orderColumns,dataSource:t.orders,loading:t.orderLoading,pagination:t.orderPagination,rowKey:function(t){return t.order_type+"-"+t.id},scroll:{x:1400}},on:{change:t.handleOrderTableChange},scopedSlots:t._u([{key:"orderUserInfo",fn:function(a,s){return[e("a-tooltip",{attrs:{title:(s.nickname||s.username||"-")+" ("+(s.user_email||"")+")"}},[e("span",{staticClass:"user-cell"},[e("a-avatar",{style:{backgroundColor:t.getUserColor(s.user_id),fontSize:"11px",marginRight:"6px"},attrs:{size:"small"}},[t._v(" "+t._s((s.nickname||s.username||"?").charAt(0).toUpperCase())+" ")]),e("span",{staticClass:"user-name"},[t._v(t._s(t.truncate(s.nickname||s.username||"-",10)))])],1)])]}},{key:"orderTypeInfo",fn:function(a){return[e("a-tag",{attrs:{color:"usdt"===a?"green":"blue"}},[t._v(" "+t._s("usdt"===a?"USDT":"Mock")+" ")])]}},{key:"planInfo",fn:function(a){return[e("a-tag",{attrs:{color:"lifetime"===a?"gold":"yearly"===a?"purple":"cyan"}},[t._v(" "+t._s("lifetime"===a?t.$t("adminOrders.lifetime")||"Lifetime":"yearly"===a?t.$t("adminOrders.yearly")||"Yearly":t.$t("adminOrders.monthly")||"Monthly")+" ")])]}},{key:"amountInfo",fn:function(a,s){return[e("span",{staticStyle:{"font-weight":"600"}},[t._v(t._s(a))]),e("span",{staticClass:"text-muted",staticStyle:{"margin-left":"4px"}},[t._v(t._s(s.currency))])]}},{key:"orderStatusInfo",fn:function(a){return[e("a-tag",{attrs:{color:t.getOrderStatusColor(a)}},[t._v(t._s(t.getOrderStatusLabel(a)))])]}},{key:"chainInfo",fn:function(a){return[a?e("span",[t._v(t._s(a))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"addressInfo",fn:function(a){return[a?e("a-tooltip",{attrs:{title:a}},[e("span",{staticClass:"address-text"},[t._v(t._s(t.truncate(a,12)))])]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"txHashInfo",fn:function(a){return[a?e("a-tooltip",{attrs:{title:a}},[e("span",{staticClass:"hash-text"},[t._v(t._s(t.truncate(a,14)))])]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"orderCreatedAt",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}}])})],1)],1),e("a-tab-pane",{key:"aiStats",attrs:{tab:t.$t("adminAiStats.tabTitle")||"AI Analysis"}},[t.aiStatsSummary?e("div",{staticClass:"summary-cards"},[e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #667eea, #764ba2)"}},[e("a-icon",{attrs:{type:"thunderbolt"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.aiStatsSummary.total_analyses||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminAiStats.totalAnalyses")||"Total Analyses"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #11998e, #38ef7d)"}},[e("a-icon",{attrs:{type:"team"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.aiStatsSummary.unique_users||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminAiStats.activeUsers")||"Active Users"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #f093fb, #f5576c)"}},[e("a-icon",{attrs:{type:"stock"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.aiStatsSummary.unique_symbols||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminAiStats.uniqueSymbols")||"Symbols Analyzed"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #fa709a, #fee140)"}},[e("a-icon",{attrs:{type:"like"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(" "+t._s(t.aiStatsSummary.correct_count||0)+" "),e("span",{staticStyle:{"font-size":"13px",color:"#999"}},[t._v("/ "+t._s(t.aiStatsSummary.total_memory||0))])]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminAiStats.accuracy")||"Correct / Verified"))])])])]):t._e(),e("div",{staticClass:"toolbar"},[e("div",{staticClass:"toolbar-left"},[e("a-button",{on:{click:t.loadAiStats}},[e("a-icon",{attrs:{type:"reload"}}),t._v(" "+t._s(t.$t("common.refresh")||"Refresh")+" ")],1)],1),e("div",{staticClass:"toolbar-right"},[e("a-input-search",{staticStyle:{width:"280px"},attrs:{placeholder:t.$t("adminAiStats.searchPlaceholder")||"Search by username",allowClear:""},on:{search:t.handleAiStatsSearch,pressEnter:t.handleAiStatsSearch},model:{value:t.aiStatsSearchKeyword,callback:function(e){t.aiStatsSearchKeyword=e},expression:"aiStatsSearchKeyword"}})],1)]),e("a-card",{staticClass:"user-table-card",staticStyle:{"margin-bottom":"20px"},attrs:{bordered:!1}},[e("h4",{staticStyle:{"margin-bottom":"12px",color:"#1e3a5f","font-weight":"600"}},[e("a-icon",{staticStyle:{"margin-right":"8px"},attrs:{type:"bar-chart"}}),t._v(" "+t._s(t.$t("adminAiStats.userStatsTitle")||"Per-User Statistics")+" ")],1),e("a-table",{attrs:{columns:t.aiUserColumns,dataSource:t.aiUserStats,loading:t.aiStatsLoading,pagination:t.aiStatsPagination,rowKey:function(t){return t.user_id}},on:{change:t.handleAiStatsTableChange},scopedSlots:t._u([{key:"aiUserInfo",fn:function(a,s){return[e("a-tooltip",{attrs:{title:(s.nickname||s.username||"-")+" ("+(s.email||"")+")"}},[e("span",{staticClass:"user-cell"},[e("a-avatar",{style:{backgroundColor:t.getUserColor(s.user_id),fontSize:"11px",marginRight:"6px"},attrs:{size:"small"}},[t._v(" "+t._s((s.nickname||s.username||"?").charAt(0).toUpperCase())+" ")]),e("span",{staticClass:"user-name"},[t._v(t._s(t.truncate(s.nickname||s.username||"-",10)))])],1)])]}},{key:"analysisCountInfo",fn:function(a){return[e("span",{staticStyle:{"font-weight":"600",color:"#1890ff"}},[t._v(t._s(a||0))])]}},{key:"accuracyInfo",fn:function(a,s){return[e("span",{staticClass:"text-profit"},[t._v(t._s(s.correct||0))]),e("span",{staticClass:"text-muted"},[t._v(" / ")]),e("span",{staticClass:"text-loss"},[t._v(t._s(s.incorrect||0))])]}},{key:"feedbackInfo",fn:function(a,s){return[e("a-tooltip",{attrs:{title:(t.$t("adminAiStats.helpful")||"Helpful")+" / "+(t.$t("adminAiStats.notHelpful")||"Not Helpful")}},[e("span",{staticStyle:{color:"#52c41a"}},[e("a-icon",{attrs:{type:"like"}}),t._v(" "+t._s(s.helpful||0))],1),e("span",{staticClass:"text-muted"},[t._v(" / ")]),e("span",{staticStyle:{color:"#ff4d4f"}},[e("a-icon",{attrs:{type:"dislike"}}),t._v(" "+t._s(s.not_helpful||0))],1)])]}},{key:"lastAnalysisAt",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}}])})],1),e("a-card",{staticClass:"user-table-card",attrs:{bordered:!1}},[e("h4",{staticStyle:{"margin-bottom":"12px",color:"#1e3a5f","font-weight":"600"}},[e("a-icon",{staticStyle:{"margin-right":"8px"},attrs:{type:"history"}}),t._v(" "+t._s(t.$t("adminAiStats.recentTitle")||"Recent Analysis Records")+" ")],1),e("a-table",{attrs:{columns:t.aiRecentColumns,dataSource:t.aiRecentRecords,loading:t.aiStatsLoading,pagination:!1,rowKey:function(t){return t.id},size:"small"},scopedSlots:t._u([{key:"recentUserInfo",fn:function(a,s){return[e("span",{staticClass:"user-cell"},[e("a-avatar",{style:{backgroundColor:t.getUserColor(s.user_id),fontSize:"11px",marginRight:"6px"},attrs:{size:"small"}},[t._v(" "+t._s((s.nickname||s.username||"?").charAt(0).toUpperCase())+" ")]),e("span",{staticClass:"user-name"},[t._v(t._s(t.truncate(s.nickname||s.username||"-",8)))])],1)]}},{key:"recentStatusInfo",fn:function(a){return[e("a-tag",{attrs:{color:"completed"===a?"green":"failed"===a?"red":"blue"}},[t._v(" "+t._s(a)+" ")])]}},{key:"recentCreatedAt",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}}])})],1)],1)],1),e("a-modal",{attrs:{title:t.isEdit?t.$t("userManage.editUser")||"Edit User":t.$t("userManage.createUser")||"Create User",confirmLoading:t.modalLoading},on:{ok:t.handleModalOk,cancel:t.handleModalCancel},model:{value:t.modalVisible,callback:function(e){t.modalVisible=e},expression:"modalVisible"}},[e("a-form",{attrs:{form:t.form,layout:"vertical"}},[e("a-form-item",{attrs:{label:t.$t("userManage.username")||"Username"}},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["username",{rules:[{required:!t.isEdit,message:t.$t("userManage.usernameRequired")||"Please enter username"}]}],expression:"['username', {\n rules: [{ required: !isEdit, message: $t('userManage.usernameRequired') || 'Please enter username' }]\n }]"}],attrs:{disabled:t.isEdit,placeholder:t.$t("userManage.usernamePlaceholder")||"Enter username"}},[e("a-icon",{attrs:{slot:"prefix",type:"user"},slot:"prefix"})],1)],1),t.isEdit?t._e():e("a-form-item",{attrs:{label:t.$t("userManage.password")||"Password"}},[e("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["password",{rules:[{required:!0,message:t.$t("userManage.passwordRequired")||"Please enter password"},{min:6,message:t.$t("userManage.passwordMin")||"Password must be at least 6 characters"}]}],expression:"['password', {\n rules: [\n { required: true, message: $t('userManage.passwordRequired') || 'Please enter password' },\n { min: 6, message: $t('userManage.passwordMin') || 'Password must be at least 6 characters' }\n ]\n }]"}],attrs:{placeholder:t.$t("userManage.passwordPlaceholder")||"Enter password (min 6 characters)"}},[e("a-icon",{attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),e("a-form-item",{attrs:{label:t.$t("userManage.nickname")||"Nickname"}},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["nickname"],expression:"['nickname']"}],attrs:{placeholder:t.$t("userManage.nicknamePlaceholder")||"Enter nickname"}},[e("a-icon",{attrs:{slot:"prefix",type:"smile"},slot:"prefix"})],1)],1),e("a-form-item",{attrs:{label:t.$t("userManage.email")||"Email"}},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["email",{rules:[{type:"email",message:t.$t("userManage.emailInvalid")||"Invalid email format"}]}],expression:"['email', {\n rules: [{ type: 'email', message: $t('userManage.emailInvalid') || 'Invalid email format' }]\n }]"}],attrs:{placeholder:t.$t("userManage.emailPlaceholder")||"Enter email"}},[e("a-icon",{attrs:{slot:"prefix",type:"mail"},slot:"prefix"})],1)],1),e("a-form-item",{attrs:{label:t.$t("userManage.role")||"Role"}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["role",{initialValue:"user"}],expression:"['role', { initialValue: 'user' }]"}],attrs:{placeholder:t.$t("userManage.rolePlaceholder")||"Select role"}},t._l(t.roles,function(a){return e("a-select-option",{key:a.id,attrs:{value:a.id}},[t._v(" "+t._s(t.getRoleLabel(a.id))+" ")])}),1)],1),t.isEdit?e("a-form-item",{attrs:{label:t.$t("userManage.status")||"Status"}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["status",{initialValue:"active"}],expression:"['status', { initialValue: 'active' }]"}],attrs:{placeholder:t.$t("userManage.statusPlaceholder")||"Select status"}},[e("a-select-option",{attrs:{value:"active"}},[t._v(t._s(t.$t("userManage.active")||"Active"))]),e("a-select-option",{attrs:{value:"disabled"}},[t._v(t._s(t.$t("userManage.disabled")||"Disabled"))])],1)],1):t._e()],1)],1),e("a-modal",{attrs:{title:t.$t("userManage.resetPassword")||"Reset Password",confirmLoading:t.resetPasswordLoading},on:{ok:t.handleResetPassword},model:{value:t.resetPasswordVisible,callback:function(e){t.resetPasswordVisible=e},expression:"resetPasswordVisible"}},[e("a-form",{attrs:{form:t.resetPasswordForm,layout:"vertical"}},[e("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{message:t.$t("userManage.resetPasswordWarning")||"This will reset the user's password",type:"warning",showIcon:""}}),e("a-form-item",{attrs:{label:t.$t("userManage.newPassword")||"New Password"}},[e("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["new_password",{rules:[{required:!0,message:t.$t("userManage.passwordRequired")||"Please enter new password"},{min:6,message:t.$t("userManage.passwordMin")||"Password must be at least 6 characters"}]}],expression:"['new_password', {\n rules: [\n { required: true, message: $t('userManage.passwordRequired') || 'Please enter new password' },\n { min: 6, message: $t('userManage.passwordMin') || 'Password must be at least 6 characters' }\n ]\n }]"}],attrs:{placeholder:t.$t("userManage.newPasswordPlaceholder")||"Enter new password"}},[e("a-icon",{attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1)],1)],1),e("a-modal",{attrs:{title:(t.$t("userManage.adjustCredits")||"Adjust Credits")+(t.creditsEditingUser?" - ".concat(t.creditsEditingUser.username):""),confirmLoading:t.creditsLoading},on:{ok:t.handleSetCredits},model:{value:t.creditsModalVisible,callback:function(e){t.creditsModalVisible=e},expression:"creditsModalVisible"}},[e("a-form",{attrs:{layout:"vertical"}},[t.creditsEditingUser?e("div",{staticClass:"current-credits-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("userManage.currentCredits")||"Current Credits")+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatCredits(t.creditsEditingUser.credits)))])]):t._e(),e("a-form-item",{attrs:{label:t.$t("userManage.newCredits")||"New Credits"}},[e("a-input-number",{staticStyle:{width:"100%"},attrs:{min:0,precision:2,placeholder:t.$t("userManage.enterCredits")||"Enter new credits amount"},model:{value:t.newCredits,callback:function(e){t.newCredits=e},expression:"newCredits"}})],1),e("a-form-item",{attrs:{label:t.$t("userManage.remark")||"Remark"}},[e("a-input",{attrs:{placeholder:t.$t("userManage.remarkPlaceholder")||"Optional remark"},model:{value:t.creditsRemark,callback:function(e){t.creditsRemark=e},expression:"creditsRemark"}})],1)],1)],1),e("a-modal",{attrs:{title:(t.$t("userManage.setVip")||"Set VIP")+(t.vipEditingUser?" - ".concat(t.vipEditingUser.username):""),confirmLoading:t.vipLoading},on:{ok:t.handleSetVip},model:{value:t.vipModalVisible,callback:function(e){t.vipModalVisible=e},expression:"vipModalVisible"}},[e("a-form",{attrs:{layout:"vertical"}},[t.vipEditingUser&&t.vipEditingUser.vip_expires_at?e("div",{staticClass:"current-vip-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("userManage.currentVip")||"Current VIP")+":")]),e("span",{staticClass:"value",class:t.isVipActive(t.vipEditingUser.vip_expires_at)?"active":"expired"},[t._v(" "+t._s(t.isVipActive(t.vipEditingUser.vip_expires_at)?(t.$t("userManage.vipActive")||"Active")+" (".concat(t.formatDate(t.vipEditingUser.vip_expires_at),")"):t.$t("userManage.vipExpired")||"Expired")+" ")])]):t._e(),e("a-form-item",{attrs:{label:t.$t("userManage.vipDays")||"VIP Days"}},[e("a-select",{staticStyle:{width:"100%"},model:{value:t.vipDays,callback:function(e){t.vipDays=e},expression:"vipDays"}},[e("a-select-option",{attrs:{value:0}},[t._v(t._s(t.$t("userManage.cancelVip")||"Cancel VIP"))]),e("a-select-option",{attrs:{value:7}},[t._v("7 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:30}},[t._v("30 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:90}},[t._v("90 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:180}},[t._v("180 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:365}},[t._v("365 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:-1}},[t._v(t._s(t.$t("userManage.customDate")||"Custom Date"))])],1)],1),-1===t.vipDays?e("a-form-item",{attrs:{label:t.$t("userManage.vipExpiresAt")||"VIP Expires At"}},[e("a-date-picker",{staticStyle:{width:"100%"},attrs:{showTime:"",format:"YYYY-MM-DD HH:mm:ss"},model:{value:t.vipCustomDate,callback:function(e){t.vipCustomDate=e},expression:"vipCustomDate"}})],1):t._e(),e("a-form-item",{attrs:{label:t.$t("userManage.remark")||"Remark"}},[e("a-input",{attrs:{placeholder:t.$t("userManage.remarkPlaceholder")||"Optional remark"},model:{value:t.vipRemark,callback:function(e){t.vipRemark=e},expression:"vipRemark"}})],1)],1)],1)],1)},r=[],i=a(76959),n=a(17654),o=a(57888),l=(a(2892),a(27617)),d=a(21170),c=a(95353),u={name:"UserManage",mixins:[d.t],data:function(){return{activeTab:"users",loading:!1,users:[],roles:[],searchKeyword:"",pagination:{current:1,pageSize:10,total:0},modalVisible:!1,modalLoading:!1,isEdit:!1,editingUser:null,resetPasswordVisible:!1,resetPasswordLoading:!1,resetPasswordUserId:null,creditsModalVisible:!1,creditsLoading:!1,creditsEditingUser:null,newCredits:0,creditsRemark:"",vipModalVisible:!1,vipLoading:!1,vipEditingUser:null,vipDays:30,vipCustomDate:null,vipRemark:"",strategyLoading:!1,systemStrategies:[],strategySummary:null,strategyStatusFilter:"all",strategySearchKeyword:"",strategyPagination:{current:1,pageSize:20,total:0},strategiesLoaded:!1,orderLoading:!1,orders:[],orderSummary:null,orderStatusFilter:"all",orderSearchKeyword:"",orderPagination:{current:1,pageSize:20,total:0},ordersLoaded:!1,aiStatsLoading:!1,aiUserStats:[],aiRecentRecords:[],aiStatsSummary:null,aiStatsSearchKeyword:"",aiStatsPagination:{current:1,pageSize:20,total:0},aiStatsLoaded:!1}},computed:(0,o.A)((0,o.A)({},(0,c.L8)(["userInfo"])),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},currentUserId:function(){var t;return null===(t=this.userInfo)||void 0===t?void 0:t.id},columns:function(){return[{title:"ID",dataIndex:"id",width:60},{title:this.$t("userManage.username")||"Username",dataIndex:"username",width:120},{title:this.$t("userManage.nickname")||"Nickname",dataIndex:"nickname",width:100},{title:this.$t("userManage.email")||"Email",dataIndex:"email",width:180},{title:this.$t("userManage.role")||"Role",dataIndex:"role",width:90,scopedSlots:{customRender:"role"}},{title:this.$t("userManage.credits")||"Credits",dataIndex:"credits",width:100,scopedSlots:{customRender:"credits"}},{title:"VIP",dataIndex:"vip_expires_at",width:120,scopedSlots:{customRender:"vip_expires_at"}},{title:this.$t("userManage.status")||"Status",dataIndex:"status",width:90,scopedSlots:{customRender:"status"}},{title:this.$t("userManage.lastLogin")||"Last Login",dataIndex:"last_login_at",width:150,scopedSlots:{customRender:"last_login_at"}},{title:this.$t("common.actions")||"Actions",dataIndex:"action",width:180,scopedSlots:{customRender:"action"}}]},strategyColumns:function(){return[{title:"ID",dataIndex:"id",width:60,fixed:"left"},{title:this.$t("systemOverview.colUser")||"User",dataIndex:"username",width:110,fixed:"left",scopedSlots:{customRender:"userInfo"}},{title:this.$t("systemOverview.colStrategy")||"Strategy",dataIndex:"strategy_name",width:160,ellipsis:!0},{title:this.$t("systemOverview.colStatus")||"Status",dataIndex:"status",width:100,scopedSlots:{customRender:"strategyStatus"}},{title:this.$t("systemOverview.colSymbol")||"Symbol",dataIndex:"symbol",width:140,scopedSlots:{customRender:"symbolInfo"}},{title:this.$t("systemOverview.colCapital")||"Capital",dataIndex:"initial_capital",width:110,scopedSlots:{customRender:"capitalInfo"}},{title:this.$t("systemOverview.colPnl")||"PnL / ROI",dataIndex:"total_pnl",width:200,scopedSlots:{customRender:"pnlInfo"}},{title:this.$t("systemOverview.colPositions")||"Pos",dataIndex:"position_count",width:70,align:"center",scopedSlots:{customRender:"positionInfo"}},{title:this.$t("systemOverview.colTrades")||"Trades",dataIndex:"trade_count",width:80,align:"center",scopedSlots:{customRender:"tradeInfo"}},{title:this.$t("systemOverview.colIndicator")||"Indicator",dataIndex:"indicator_name",width:130,scopedSlots:{customRender:"indicatorInfo"}},{title:this.$t("systemOverview.colExchange")||"Exchange",dataIndex:"exchange_name",width:100,scopedSlots:{customRender:"exchangeInfo"}},{title:this.$t("systemOverview.colTimeframe")||"TF",dataIndex:"timeframe",width:70,align:"center",scopedSlots:{customRender:"timeframeInfo"}},{title:this.$t("systemOverview.colLeverage")||"Lev",dataIndex:"leverage",width:70,align:"center",scopedSlots:{customRender:"leverageInfo"}},{title:this.$t("systemOverview.colCreatedAt")||"Created",dataIndex:"created_at",width:150,scopedSlots:{customRender:"createdAtInfo"}}]},orderColumns:function(){return[{title:this.$t("adminOrders.colUser")||"User",dataIndex:"username",width:120,scopedSlots:{customRender:"orderUserInfo"}},{title:this.$t("adminOrders.colType")||"Type",dataIndex:"order_type",width:80,scopedSlots:{customRender:"orderTypeInfo"}},{title:this.$t("adminOrders.colPlan")||"Plan",dataIndex:"plan",width:100,scopedSlots:{customRender:"planInfo"}},{title:this.$t("adminOrders.colAmount")||"Amount",dataIndex:"amount",width:120,scopedSlots:{customRender:"amountInfo"}},{title:this.$t("adminOrders.colStatus")||"Status",dataIndex:"status",width:100,scopedSlots:{customRender:"orderStatusInfo"}},{title:this.$t("adminOrders.colChain")||"Chain",dataIndex:"chain",width:80,scopedSlots:{customRender:"chainInfo"}},{title:this.$t("adminOrders.colAddress")||"Address",dataIndex:"address",width:140,scopedSlots:{customRender:"addressInfo"}},{title:this.$t("adminOrders.colTxHash")||"Tx Hash",dataIndex:"tx_hash",width:160,scopedSlots:{customRender:"txHashInfo"}},{title:this.$t("adminOrders.colCreatedAt")||"Created",dataIndex:"created_at",width:150,scopedSlots:{customRender:"orderCreatedAt"}}]},aiUserColumns:function(){return[{title:this.$t("adminAiStats.colUser")||"User",dataIndex:"username",width:140,scopedSlots:{customRender:"aiUserInfo"}},{title:this.$t("adminAiStats.colAnalysisCount")||"Analyses",dataIndex:"analysis_count",width:100,align:"center",scopedSlots:{customRender:"analysisCountInfo"},sorter:function(t,e){return t.analysis_count-e.analysis_count},defaultSortOrder:"descend"},{title:this.$t("adminAiStats.colSymbols")||"Symbols",dataIndex:"symbol_count",width:90,align:"center"},{title:this.$t("adminAiStats.colMarkets")||"Markets",dataIndex:"market_count",width:90,align:"center"},{title:this.$t("adminAiStats.colAccuracy")||"Correct / Wrong",dataIndex:"correct",width:130,align:"center",scopedSlots:{customRender:"accuracyInfo"}},{title:this.$t("adminAiStats.colFeedback")||"Feedback",dataIndex:"helpful",width:130,align:"center",scopedSlots:{customRender:"feedbackInfo"}},{title:this.$t("adminAiStats.colLastAnalysis")||"Last Analysis",dataIndex:"last_analysis_at",width:160,scopedSlots:{customRender:"lastAnalysisAt"}}]},aiRecentColumns:function(){return[{title:"ID",dataIndex:"id",width:60},{title:this.$t("adminAiStats.colUser")||"User",dataIndex:"username",width:120,scopedSlots:{customRender:"recentUserInfo"}},{title:this.$t("adminAiStats.colMarket")||"Market",dataIndex:"market",width:80},{title:this.$t("adminAiStats.colSymbol")||"Symbol",dataIndex:"symbol",width:120},{title:this.$t("adminAiStats.colModel")||"Model",dataIndex:"model",width:140,ellipsis:!0},{title:this.$t("adminAiStats.colStatus")||"Status",dataIndex:"status",width:100,scopedSlots:{customRender:"recentStatusInfo"}},{title:this.$t("adminAiStats.colCreatedAt")||"Time",dataIndex:"created_at",width:160,scopedSlots:{customRender:"recentCreatedAt"}}]}}),beforeCreate:function(){this.form=this.$form.createForm(this),this.resetPasswordForm=this.$form.createForm(this,{name:"resetPassword"})},mounted:function(){this.loadUsers(),this.loadRoles()},methods:{handleTabChange:function(t){"strategies"!==t||this.strategiesLoaded||this.loadSystemStrategies(),"orders"!==t||this.ordersLoaded||this.loadOrders(),"aiStats"!==t||this.aiStatsLoaded||this.loadAiStats()},loadSystemStrategies:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.strategyLoading=!0,e.p=1,e.n=2,(0,l.DK)({page:t.strategyPagination.current,page_size:t.strategyPagination.pageSize,status:"all"===t.strategyStatusFilter?"":t.strategyStatusFilter,search:t.strategySearchKeyword||""});case 2:a=e.v,1===a.code?(t.systemStrategies=a.data.items||[],t.strategyPagination.total=a.data.total||0,t.strategySummary=a.data.summary||{},t.strategiesLoaded=!0):t.$message.error(a.msg||"Failed to load strategies"),e.n=4;break;case 3:e.p=3,e.v,t.$message.error("Failed to load system strategies");case 4:return e.p=4,t.strategyLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleStrategySearch:function(){this.strategyPagination.current=1,this.loadSystemStrategies()},handleStrategyFilterChange:function(){this.strategyPagination.current=1,this.loadSystemStrategies()},handleStrategyTableChange:function(t){this.strategyPagination.current=t.current,this.strategyPagination.pageSize=t.pageSize,this.loadSystemStrategies()},getUserColor:function(t){var e=["#1890ff","#722ed1","#13c2c2","#fa8c16","#eb2f96","#52c41a","#2f54eb","#faad14"];return e[(t||0)%e.length]},formatNumber:function(t){return t||0===t?Number(t).toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:2}):"0"},formatPnl:function(t){if(!t&&0!==t)return"0";var e=Number(t),a=e>=0?"+":"";return a+e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:4})},truncate:function(t,e){return t?t.length>e?t.substring(0,e)+"...":t:""},loadUsers:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loading=!0,e.p=1,e.n=2,(0,l.aU)({page:t.pagination.current,page_size:t.pagination.pageSize,search:t.searchKeyword||""});case 2:a=e.v,1===a.code?(t.users=a.data.items||[],t.pagination.total=a.data.total||0):t.$message.error(a.msg||"Failed to load users"),e.n=4;break;case 3:e.p=3,e.v,t.$message.error("Failed to load users");case 4:return e.p=4,t.loading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleSearch:function(){this.pagination.current=1,this.loadUsers()},loadRoles:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,l.O0)();case 1:a=e.v,1===a.code&&(t.roles=a.data.roles||[]),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},handleTableChange:function(t){this.pagination.current=t.current,this.pagination.pageSize=t.pageSize,this.loadUsers()},showCreateModal:function(){var t=this;this.isEdit=!1,this.editingUser=null,this.modalVisible=!0,this.$nextTick(function(){t.form.resetFields()})},showEditModal:function(t){var e=this;this.isEdit=!0,this.editingUser=t,this.modalVisible=!0,this.$nextTick(function(){e.form.setFieldsValue({username:t.username,nickname:t.nickname,email:t.email,role:t.role,status:t.status})})},handleModalCancel:function(){this.modalVisible=!1,this.form.resetFields()},handleModalOk:function(){var t=this;this.form.validateFields(function(){var e=(0,n.A)((0,i.A)().m(function e(a,s){var r;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!a){e.n=1;break}return e.a(2);case 1:if(t.modalLoading=!0,e.p=2,!t.isEdit){e.n=4;break}return e.n=3,(0,l.TK)(t.editingUser.id,{nickname:s.nickname,email:s.email,role:s.role,status:s.status});case 3:r=e.v,e.n=6;break;case 4:return e.n=5,(0,l.kg)(s);case 5:r=e.v;case 6:1===r.code?(t.$message.success(r.msg||"Success"),t.modalVisible=!1,t.form.resetFields(),t.loadUsers()):t.$message.error(r.msg||"Operation failed"),e.n=8;break;case 7:e.p=7,e.v,t.$message.error("Operation failed");case 8:return e.p=8,t.modalLoading=!1,e.f(8);case 9:return e.a(2)}},e,null,[[2,7,8,9]])}));return function(t,a){return e.apply(this,arguments)}}())},handleDelete:function(t){var e=this;return(0,n.A)((0,i.A)().m(function a(){var s;return(0,i.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,l.hG)(t);case 1:s=a.v,1===s.code?(e.$message.success(s.msg||"User deleted"),e.loadUsers()):e.$message.error(s.msg||"Delete failed"),a.n=3;break;case 2:a.p=2,a.v,e.$message.error("Delete failed");case 3:return a.a(2)}},a,null,[[0,2]])}))()},showResetPasswordModal:function(t){var e=this;this.resetPasswordUserId=t.id,this.resetPasswordVisible=!0,this.$nextTick(function(){e.resetPasswordForm.resetFields()})},handleResetPassword:function(){var t=this;this.resetPasswordForm.validateFields(function(){var e=(0,n.A)((0,i.A)().m(function e(a,s){var r;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!a){e.n=1;break}return e.a(2);case 1:return t.resetPasswordLoading=!0,e.p=2,e.n=3,(0,l.cw)({user_id:t.resetPasswordUserId,new_password:s.new_password});case 3:r=e.v,1===r.code?(t.$message.success(r.msg||"Password reset successfully"),t.resetPasswordVisible=!1,t.resetPasswordForm.resetFields()):t.$message.error(r.msg||"Reset failed"),e.n=5;break;case 4:e.p=4,e.v,t.$message.error("Reset failed");case 5:return e.p=5,t.resetPasswordLoading=!1,e.f(5);case 6:return e.a(2)}},e,null,[[2,4,5,6]])}));return function(t,a){return e.apply(this,arguments)}}())},getRoleColor:function(t){var e={admin:"red",manager:"orange",user:"blue",viewer:"default"};return e[t]||"default"},getRoleLabel:function(t){var e={admin:this.$t("userManage.roleAdmin")||"Admin",manager:this.$t("userManage.roleManager")||"Manager",user:this.$t("userManage.roleUser")||"User",viewer:this.$t("userManage.roleViewer")||"Viewer"};return e[t]||t},formatTime:function(t){if(!t)return"";var e=new Date("number"===typeof t?1e3*t:t);return e.toLocaleString()},formatCredits:function(t){return t||0===t?Number(t).toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:2}):"0"},formatDate:function(t){if(!t)return"";var e=new Date(t);return e.toLocaleDateString()},isVipActive:function(t){return!!t&&new Date(t)>new Date},showCreditsModal:function(t){this.creditsEditingUser=t,this.newCredits=parseFloat(t.credits)||0,this.creditsRemark="",this.creditsModalVisible=!0},handleSetCredits:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!(t.newCredits<0)){e.n=1;break}return t.$message.error(t.$t("userManage.creditsNonNegative")||"Credits cannot be negative"),e.a(2);case 1:return t.creditsLoading=!0,e.p=2,e.n=3,(0,l.wq)({user_id:t.creditsEditingUser.id,credits:t.newCredits,remark:t.creditsRemark});case 3:a=e.v,1===a.code?(t.$message.success(a.msg||"Credits updated successfully"),t.creditsModalVisible=!1,t.loadUsers()):t.$message.error(a.msg||"Update failed"),e.n=5;break;case 4:e.p=4,e.v,t.$message.error("Update failed");case 5:return e.p=5,t.creditsLoading=!1,e.f(5);case 6:return e.a(2)}},e,null,[[2,4,5,6]])}))()},showVipModal:function(t){this.vipEditingUser=t,this.vipDays=30,this.vipCustomDate=null,this.vipRemark="",this.vipModalVisible=!0},handleSetVip:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a,s;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(a={user_id:t.vipEditingUser.id,remark:t.vipRemark},-1!==t.vipDays){e.n=2;break}if(t.vipCustomDate){e.n=1;break}return t.$message.error(t.$t("userManage.selectDate")||"Please select a date"),e.a(2);case 1:a.vip_expires_at=t.vipCustomDate.toISOString(),e.n=3;break;case 2:a.vip_days=t.vipDays;case 3:return t.vipLoading=!0,e.p=4,e.n=5,(0,l.nY)(a);case 5:s=e.v,1===s.code?(t.$message.success(s.msg||"VIP status updated successfully"),t.vipModalVisible=!1,t.loadUsers()):t.$message.error(s.msg||"Update failed"),e.n=7;break;case 6:e.p=6,e.v,t.$message.error("Update failed");case 7:return e.p=7,t.vipLoading=!1,e.f(7);case 8:return e.a(2)}},e,null,[[4,6,7,8]])}))()},loadOrders:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.orderLoading=!0,e.p=1,e.n=2,(0,l.vi)({page:t.orderPagination.current,page_size:t.orderPagination.pageSize,status:"all"===t.orderStatusFilter?"":t.orderStatusFilter,search:t.orderSearchKeyword||""});case 2:a=e.v,1===a.code?(t.orders=a.data.items||[],t.orderPagination.total=a.data.total||0,t.orderSummary=a.data.summary||{},t.ordersLoaded=!0):t.$message.error(a.msg||"Failed to load orders"),e.n=4;break;case 3:e.p=3,e.v,t.$message.error("Failed to load orders");case 4:return e.p=4,t.orderLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleOrderSearch:function(){this.orderPagination.current=1,this.loadOrders()},handleOrderFilterChange:function(){this.orderPagination.current=1,this.loadOrders()},handleOrderTableChange:function(t){this.orderPagination.current=t.current,this.orderPagination.pageSize=t.pageSize,this.loadOrders()},getOrderStatusColor:function(t){var e={paid:"green",confirmed:"green",pending:"orange",expired:"grey",cancelled:"default",failed:"red"};return e[t]||"default"},getOrderStatusLabel:function(t){var e={paid:this.$t("adminOrders.statusPaid")||"Paid",confirmed:this.$t("adminOrders.statusConfirmed")||"Confirmed",pending:this.$t("adminOrders.statusPending")||"Pending",expired:this.$t("adminOrders.statusExpired")||"Expired",cancelled:this.$t("adminOrders.statusCancelled")||"Cancelled",failed:this.$t("adminOrders.statusFailed")||"Failed"};return e[t]||t},loadAiStats:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.aiStatsLoading=!0,e.p=1,e.n=2,(0,l.d$)({page:t.aiStatsPagination.current,page_size:t.aiStatsPagination.pageSize,search:t.aiStatsSearchKeyword||""});case 2:a=e.v,1===a.code?(t.aiUserStats=a.data.user_stats||[],t.aiRecentRecords=a.data.recent||[],t.aiStatsPagination.total=a.data.user_total||0,t.aiStatsSummary=a.data.summary||{},t.aiStatsLoaded=!0):t.$message.error(a.msg||"Failed to load AI stats"),e.n=4;break;case 3:e.p=3,e.v,t.$message.error("Failed to load AI stats");case 4:return e.p=4,t.aiStatsLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleAiStatsSearch:function(){this.aiStatsPagination.current=1,this.loadAiStats()},handleAiStatsTableChange:function(t){this.aiStatsPagination.current=t.current,this.aiStatsPagination.pageSize=t.pageSize,this.loadAiStats()}}},m=u,p=a(845),g=(0,p.A)(m,s,r,!1,null,"49c4f239",null),v=g.exports},27617:function(t,e,a){a.d(e,{DK:function(){return h},E$:function(){return c},Gl:function(){return p},O0:function(){return d},TK:function(){return n},aU:function(){return r},cw:function(){return l},d$:function(){return S},hG:function(){return o},kg:function(){return i},nY:function(){return y},r7:function(){return u},rx:function(){return v},v9:function(){return g},vF:function(){return m},vi:function(){return _},wq:function(){return f}});var s=a(76471);function r(t){return(0,s.Ay)({url:"/api/users/list",method:"get",params:t})}function i(t){return(0,s.Ay)({url:"/api/users/create",method:"post",data:t})}function n(t,e){return(0,s.Ay)({url:"/api/users/update",method:"put",params:{id:t},data:e})}function o(t){return(0,s.Ay)({url:"/api/users/delete",method:"delete",params:{id:t}})}function l(t){return(0,s.Ay)({url:"/api/users/reset-password",method:"post",data:t})}function d(){return(0,s.Ay)({url:"/api/users/roles",method:"get"})}function c(){return(0,s.Ay)({url:"/api/users/profile",method:"get"})}function u(t){return(0,s.Ay)({url:"/api/users/profile/update",method:"put",data:t})}function m(){return(0,s.Ay)({url:"/api/users/notification-settings",method:"get"})}function p(t){return(0,s.Ay)({url:"/api/users/notification-settings",method:"put",data:t})}function g(t){return(0,s.Ay)({url:"/api/users/my-credits-log",method:"get",params:t})}function v(t){return(0,s.Ay)({url:"/api/users/my-referrals",method:"get",params:t})}function f(t){return(0,s.Ay)({url:"/api/users/set-credits",method:"post",data:t})}function y(t){return(0,s.Ay)({url:"/api/users/set-vip",method:"post",data:t})}function h(t){return(0,s.Ay)({url:"/api/users/system-strategies",method:"get",params:t})}function _(t){return(0,s.Ay)({url:"/api/users/admin-orders",method:"get",params:t})}function S(t){return(0,s.Ay)({url:"/api/users/admin-ai-stats",method:"get",params:t})}}}]); \ No newline at end of file diff --git a/frontend/dist/js/438.6e82970a.js b/frontend/dist/js/438.6e82970a.js deleted file mode 100644 index 170f22d..0000000 --- a/frontend/dist/js/438.6e82970a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[438],{89438:function(t,e,a){a.r(e),a.d(e,{default:function(){return v}});var s=function(){var t=this,e=t._self._c;return e("div",{staticClass:"user-manage-page",class:{"theme-dark":t.isDarkTheme}},[e("div",{staticClass:"page-header"},[e("h2",{staticClass:"page-title"},[e("a-icon",{attrs:{type:"team"}}),e("span",[t._v(t._s(t.$t("userManage.title")||"User Management"))])],1),e("p",{staticClass:"page-desc"},[t._v(t._s(t.$t("userManage.description")||"Manage system users, roles and permissions"))])]),e("a-tabs",{staticClass:"manage-tabs",on:{change:t.handleTabChange},model:{value:t.activeTab,callback:function(e){t.activeTab=e},expression:"activeTab"}},[e("a-tab-pane",{key:"users",attrs:{tab:t.$t("userManage.tabUsers")||"User Management"}},[e("div",{staticClass:"toolbar"},[e("div",{staticClass:"toolbar-left"},[e("a-button",{attrs:{type:"primary"},on:{click:t.showCreateModal}},[e("a-icon",{attrs:{type:"user-add"}}),t._v(" "+t._s(t.$t("userManage.createUser")||"Create User")+" ")],1),e("a-button",{on:{click:t.loadUsers}},[e("a-icon",{attrs:{type:"reload"}}),t._v(" "+t._s(t.$t("common.refresh")||"Refresh")+" ")],1)],1),e("div",{staticClass:"toolbar-right"},[e("a-input-search",{staticStyle:{width:"280px"},attrs:{placeholder:t.$t("userManage.searchPlaceholder")||"Search by username/email",allowClear:""},on:{search:t.handleSearch,pressEnter:t.handleSearch},model:{value:t.searchKeyword,callback:function(e){t.searchKeyword=e},expression:"searchKeyword"}})],1)]),e("a-card",{staticClass:"user-table-card",attrs:{bordered:!1}},[e("a-table",{attrs:{columns:t.columns,dataSource:t.users,loading:t.loading,pagination:t.pagination,rowKey:function(t){return t.id}},on:{change:t.handleTableChange},scopedSlots:t._u([{key:"status",fn:function(a){return[e("a-tag",{attrs:{color:"active"===a?"green":"red"}},[t._v(" "+t._s("active"===a?t.$t("userManage.active")||"Active":t.$t("userManage.disabled")||"Disabled")+" ")])]}},{key:"role",fn:function(a){return[e("a-tag",{attrs:{color:t.getRoleColor(a)}},[t._v(" "+t._s(t.getRoleLabel(a))+" ")])]}},{key:"last_login_at",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v(t._s(t.$t("userManage.neverLogin")||"Never"))])]}},{key:"credits",fn:function(a){return[e("span",{staticClass:"credits-value"},[t._v(t._s(t.formatCredits(a)))])]}},{key:"vip_expires_at",fn:function(a){return[a&&t.isVipActive(a)?[e("a-tag",{attrs:{color:"gold"}},[e("a-icon",{attrs:{type:"crown"}}),t._v(" "+t._s(t.formatDate(a))+" ")],1)]:e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"action",fn:function(a,s){return[e("a-space",[e("a-tooltip",{attrs:{title:t.$t("common.edit")||"Edit"}},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.showEditModal(s)}}},[e("a-icon",{attrs:{type:"edit"}})],1)],1),e("a-tooltip",{attrs:{title:t.$t("userManage.adjustCredits")||"Adjust Credits"}},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.showCreditsModal(s)}}},[e("a-icon",{staticStyle:{color:"#722ed1"},attrs:{type:"wallet"}})],1)],1),e("a-tooltip",{attrs:{title:t.$t("userManage.setVip")||"Set VIP"}},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.showVipModal(s)}}},[e("a-icon",{staticStyle:{color:"#faad14"},attrs:{type:"crown"}})],1)],1),e("a-tooltip",{attrs:{title:t.$t("userManage.resetPassword")||"Reset Password"}},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.showResetPasswordModal(s)}}},[e("a-icon",{attrs:{type:"key"}})],1)],1),e("a-tooltip",{attrs:{title:t.$t("common.delete")||"Delete"}},[e("a-popconfirm",{attrs:{title:t.$t("userManage.confirmDelete")||"Are you sure to delete this user?"},on:{confirm:function(e){return t.handleDelete(s.id)}}},[e("a-button",{attrs:{type:"link",size:"small",disabled:s.id===t.currentUserId}},[e("a-icon",{staticStyle:{color:"#ff4d4f"},attrs:{type:"delete"}})],1)],1)],1)],1)]}}])})],1)],1),e("a-tab-pane",{key:"strategies",attrs:{tab:t.$t("systemOverview.tabTitle")||"System Overview"}},[t.strategySummary?e("div",{staticClass:"summary-cards"},[e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #667eea, #764ba2)"}},[e("a-icon",{attrs:{type:"fund"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.strategySummary.total_strategies||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("systemOverview.totalStrategies")||"Total Strategies"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #11998e, #38ef7d)"}},[e("a-icon",{attrs:{type:"play-circle"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.strategySummary.running_strategies||0))]),e("div",{staticClass:"summary-sub"},[t._v(" "+t._s(t.$t("systemOverview.live")||"实盘")+": "+t._s(t.strategySummary.running_live_strategies||0)+" / "+t._s(t.$t("systemOverview.signal")||"仅通知")+": "+t._s(t.strategySummary.running_signal_strategies||0)+" ")]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("systemOverview.runningStrategies")||"Running"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #f093fb, #f5576c)"}},[e("a-icon",{attrs:{type:"dollar"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.formatNumber(t.strategySummary.total_capital)))]),e("div",{staticClass:"summary-sub"},[t._v(" "+t._s(t.$t("systemOverview.live")||"实盘")+": "+t._s(t.formatNumber(t.strategySummary.live_capital))+" / "+t._s(t.$t("systemOverview.signal")||"仅通知")+": "+t._s(t.formatNumber(t.strategySummary.signal_capital))+" ")]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("systemOverview.totalCapital")||"Total Capital"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",style:{background:(t.strategySummary.total_pnl||0)>=0?"linear-gradient(135deg, #11998e, #38ef7d)":"linear-gradient(135deg, #ff416c, #ff4b2b)"}},[e("a-icon",{attrs:{type:"rise"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value",class:(t.strategySummary.total_pnl||0)>=0?"text-profit":"text-loss"},[t._v(" "+t._s(t.formatPnl(t.strategySummary.total_pnl))+" "),e("span",{staticClass:"roi-badge"},[t._v(t._s(t.strategySummary.total_roi||0)+"%")])]),e("div",{staticClass:"summary-sub"},[t._v(" "+t._s(t.$t("systemOverview.live")||"实盘")+": "+t._s(t.formatPnl(t.strategySummary.live_pnl))+" / "+t._s(t.$t("systemOverview.signal")||"仅通知")+": "+t._s(t.formatPnl(t.strategySummary.signal_pnl))+" ")]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("systemOverview.totalPnl")||"Total PnL"))])])])]):t._e(),e("div",{staticClass:"toolbar"},[e("div",{staticClass:"toolbar-left"},[e("a-button",{on:{click:t.loadSystemStrategies}},[e("a-icon",{attrs:{type:"reload"}}),t._v(" "+t._s(t.$t("common.refresh")||"Refresh")+" ")],1),e("a-select",{staticStyle:{width:"140px"},on:{change:t.handleStrategyFilterChange},model:{value:t.strategyStatusFilter,callback:function(e){t.strategyStatusFilter=e},expression:"strategyStatusFilter"}},[e("a-select-option",{attrs:{value:"all"}},[t._v(t._s(t.$t("systemOverview.filterAll")||"All Status"))]),e("a-select-option",{attrs:{value:"running"}},[t._v(t._s(t.$t("systemOverview.filterRunning")||"Running"))]),e("a-select-option",{attrs:{value:"stopped"}},[t._v(t._s(t.$t("systemOverview.filterStopped")||"Stopped"))])],1)],1),e("div",{staticClass:"toolbar-right"},[e("a-input-search",{staticStyle:{width:"280px"},attrs:{placeholder:t.$t("systemOverview.searchPlaceholder")||"Search strategy/symbol/user",allowClear:""},on:{search:t.handleStrategySearch,pressEnter:t.handleStrategySearch},model:{value:t.strategySearchKeyword,callback:function(e){t.strategySearchKeyword=e},expression:"strategySearchKeyword"}})],1)]),e("a-card",{staticClass:"user-table-card",attrs:{bordered:!1}},[e("a-table",{attrs:{columns:t.strategyColumns,dataSource:t.systemStrategies,loading:t.strategyLoading,pagination:t.strategyPagination,rowKey:function(t){return t.id},scroll:{x:1600}},on:{change:t.handleStrategyTableChange},scopedSlots:t._u([{key:"strategyStatus",fn:function(a){return[e("span",{staticClass:"status-cell"},[e("span",{staticClass:"status-dot",class:"running"===a?"dot-running":"dot-stopped"}),e("span",{class:"running"===a?"status-running":"status-stopped"},[t._v(" "+t._s("running"===a?t.$t("systemOverview.running")||"Running":t.$t("systemOverview.stopped")||"Stopped")+" ")])])]}},{key:"userInfo",fn:function(a,s){return[e("a-tooltip",{attrs:{title:s.nickname||s.username||"-"}},[e("span",{staticClass:"user-cell"},[e("a-avatar",{style:{backgroundColor:t.getUserColor(s.user_id),fontSize:"11px",marginRight:"6px"},attrs:{size:"small"}},[t._v(" "+t._s((s.nickname||s.username||"?").charAt(0).toUpperCase())+" ")]),e("span",{staticClass:"user-name"},[t._v(t._s(t.truncate(s.nickname||s.username||"-",8)))])],1)])]}},{key:"symbolInfo",fn:function(a,s){return[e("div",[e("span",{staticClass:"symbol-text"},[t._v(t._s(s.symbol||"-"))]),"cross_sectional"===s.cs_strategy_type?e("a-tag",{staticStyle:{"margin-left":"4px"},attrs:{color:"purple",size:"small"}},[t._v("CS")]):t._e()],1),"cross_sectional"===s.cs_strategy_type&&s.symbol_list&&s.symbol_list.length?e("div",{staticClass:"symbol-count text-muted"},[t._v(" "+t._s(s.symbol_list.length)+" "+t._s(t.$t("systemOverview.symbols")||"symbols")+" ")]):t._e()]}},{key:"capitalInfo",fn:function(a){return[e("span",[t._v(t._s(t.formatNumber(a)))])]}},{key:"pnlInfo",fn:function(a,s){return[e("div",{class:s.total_pnl>=0?"text-profit":"text-loss"},[e("span",{staticClass:"pnl-value"},[t._v(t._s(t.formatPnl(s.total_pnl)))]),e("span",{staticClass:"roi-text"},[t._v("("+t._s(s.roi>=0?"+":"")+t._s(s.roi)+"%)")])]),e("div",{staticClass:"pnl-detail text-muted"},[e("span",[t._v(t._s(t.$t("systemOverview.realized")||"Real")+": "+t._s(t.formatPnl(s.total_realized_pnl)))]),e("span",{staticStyle:{"margin-left":"8px"}},[t._v(t._s(t.$t("systemOverview.unrealized")||"Unreal")+": "+t._s(t.formatPnl(s.total_unrealized_pnl)))])])]}},{key:"positionInfo",fn:function(t,a){return[e("a-badge",{attrs:{count:a.position_count,numberStyle:{backgroundColor:a.position_count>0?"#52c41a":"#d9d9d9"}}})]}},{key:"tradeInfo",fn:function(a){return[e("span",[t._v(t._s(a||0))])]}},{key:"indicatorInfo",fn:function(a){return[a?e("a-tooltip",{attrs:{title:a}},[e("span",{staticClass:"indicator-name"},[t._v(t._s(t.truncate(a,16)))])]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"exchangeInfo",fn:function(a){return[a?e("span",{staticClass:"exchange-name"},[t._v(t._s(a))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"timeframeInfo",fn:function(a){return[a?e("a-tag",{attrs:{size:"small"}},[t._v(t._s(a))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"leverageInfo",fn:function(a){return[a>1?e("span",{staticStyle:{color:"#fa8c16","font-weight":"600"}},[t._v(t._s(a)+"x")]):e("span",[t._v(t._s(a||1)+"x")])]}},{key:"createdAtInfo",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}}])})],1)],1),e("a-tab-pane",{key:"orders",attrs:{tab:t.$t("adminOrders.tabTitle")||"Order List"}},[t.orderSummary?e("div",{staticClass:"summary-cards"},[e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #667eea, #764ba2)"}},[e("a-icon",{attrs:{type:"file-text"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.orderSummary.total_orders||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminOrders.totalOrders")||"Total Orders"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #11998e, #38ef7d)"}},[e("a-icon",{attrs:{type:"check-circle"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.orderSummary.paid_orders||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminOrders.paidOrders")||"Paid"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #f093fb, #f5576c)"}},[e("a-icon",{attrs:{type:"clock-circle"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.orderSummary.pending_orders||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminOrders.pendingOrders")||"Pending"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #fa709a, #fee140)"}},[e("a-icon",{attrs:{type:"dollar"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.formatNumber(t.orderSummary.total_revenue))+" "),e("span",{staticStyle:{"font-size":"13px",color:"#999"}},[t._v("USDT")])]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminOrders.totalRevenue")||"Total Revenue"))])])])]):t._e(),e("div",{staticClass:"toolbar"},[e("div",{staticClass:"toolbar-left"},[e("a-button",{on:{click:t.loadOrders}},[e("a-icon",{attrs:{type:"reload"}}),t._v(" "+t._s(t.$t("common.refresh")||"Refresh")+" ")],1),e("a-select",{staticStyle:{width:"140px"},on:{change:t.handleOrderFilterChange},model:{value:t.orderStatusFilter,callback:function(e){t.orderStatusFilter=e},expression:"orderStatusFilter"}},[e("a-select-option",{attrs:{value:"all"}},[t._v(t._s(t.$t("adminOrders.filterAll")||"All Status"))]),e("a-select-option",{attrs:{value:"pending"}},[t._v(t._s(t.$t("adminOrders.filterPending")||"Pending"))]),e("a-select-option",{attrs:{value:"paid"}},[t._v(t._s(t.$t("adminOrders.filterPaid")||"Paid"))]),e("a-select-option",{attrs:{value:"confirmed"}},[t._v(t._s(t.$t("adminOrders.filterConfirmed")||"Confirmed"))]),e("a-select-option",{attrs:{value:"expired"}},[t._v(t._s(t.$t("adminOrders.filterExpired")||"Expired"))])],1)],1),e("div",{staticClass:"toolbar-right"},[e("a-input-search",{staticStyle:{width:"280px"},attrs:{placeholder:t.$t("adminOrders.searchPlaceholder")||"Search by username/email",allowClear:""},on:{search:t.handleOrderSearch,pressEnter:t.handleOrderSearch},model:{value:t.orderSearchKeyword,callback:function(e){t.orderSearchKeyword=e},expression:"orderSearchKeyword"}})],1)]),e("a-card",{staticClass:"user-table-card",attrs:{bordered:!1}},[e("a-table",{attrs:{columns:t.orderColumns,dataSource:t.orders,loading:t.orderLoading,pagination:t.orderPagination,rowKey:function(t){return t.order_type+"-"+t.id},scroll:{x:1400}},on:{change:t.handleOrderTableChange},scopedSlots:t._u([{key:"orderUserInfo",fn:function(a,s){return[e("a-tooltip",{attrs:{title:(s.nickname||s.username||"-")+" ("+(s.user_email||"")+")"}},[e("span",{staticClass:"user-cell"},[e("a-avatar",{style:{backgroundColor:t.getUserColor(s.user_id),fontSize:"11px",marginRight:"6px"},attrs:{size:"small"}},[t._v(" "+t._s((s.nickname||s.username||"?").charAt(0).toUpperCase())+" ")]),e("span",{staticClass:"user-name"},[t._v(t._s(t.truncate(s.nickname||s.username||"-",10)))])],1)])]}},{key:"orderTypeInfo",fn:function(a){return[e("a-tag",{attrs:{color:"usdt"===a?"green":"blue"}},[t._v(" "+t._s("usdt"===a?"USDT":"Mock")+" ")])]}},{key:"planInfo",fn:function(a){return[e("a-tag",{attrs:{color:"lifetime"===a?"gold":"yearly"===a?"purple":"cyan"}},[t._v(" "+t._s("lifetime"===a?t.$t("adminOrders.lifetime")||"Lifetime":"yearly"===a?t.$t("adminOrders.yearly")||"Yearly":t.$t("adminOrders.monthly")||"Monthly")+" ")])]}},{key:"amountInfo",fn:function(a,s){return[e("span",{staticStyle:{"font-weight":"600"}},[t._v(t._s(a))]),e("span",{staticClass:"text-muted",staticStyle:{"margin-left":"4px"}},[t._v(t._s(s.currency))])]}},{key:"orderStatusInfo",fn:function(a){return[e("a-tag",{attrs:{color:t.getOrderStatusColor(a)}},[t._v(t._s(t.getOrderStatusLabel(a)))])]}},{key:"chainInfo",fn:function(a){return[a?e("span",[t._v(t._s(a))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"addressInfo",fn:function(a){return[a?e("a-tooltip",{attrs:{title:a}},[e("span",{staticClass:"address-text"},[t._v(t._s(t.truncate(a,12)))])]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"txHashInfo",fn:function(a){return[a?e("a-tooltip",{attrs:{title:a}},[e("span",{staticClass:"hash-text"},[t._v(t._s(t.truncate(a,14)))])]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"orderCreatedAt",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}}])})],1)],1),e("a-tab-pane",{key:"aiStats",attrs:{tab:t.$t("adminAiStats.tabTitle")||"AI Analysis"}},[t.aiStatsSummary?e("div",{staticClass:"summary-cards"},[e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #667eea, #764ba2)"}},[e("a-icon",{attrs:{type:"thunderbolt"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.aiStatsSummary.total_analyses||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminAiStats.totalAnalyses")||"Total Analyses"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #11998e, #38ef7d)"}},[e("a-icon",{attrs:{type:"team"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.aiStatsSummary.unique_users||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminAiStats.activeUsers")||"Active Users"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #f093fb, #f5576c)"}},[e("a-icon",{attrs:{type:"stock"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.aiStatsSummary.unique_symbols||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminAiStats.uniqueSymbols")||"Symbols Analyzed"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #fa709a, #fee140)"}},[e("a-icon",{attrs:{type:"like"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(" "+t._s(t.aiStatsSummary.correct_count||0)+" "),e("span",{staticStyle:{"font-size":"13px",color:"#999"}},[t._v("/ "+t._s(t.aiStatsSummary.total_memory||0))])]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminAiStats.accuracy")||"Correct / Verified"))])])])]):t._e(),e("div",{staticClass:"toolbar"},[e("div",{staticClass:"toolbar-left"},[e("a-button",{on:{click:t.loadAiStats}},[e("a-icon",{attrs:{type:"reload"}}),t._v(" "+t._s(t.$t("common.refresh")||"Refresh")+" ")],1)],1),e("div",{staticClass:"toolbar-right"},[e("a-input-search",{staticStyle:{width:"280px"},attrs:{placeholder:t.$t("adminAiStats.searchPlaceholder")||"Search by username",allowClear:""},on:{search:t.handleAiStatsSearch,pressEnter:t.handleAiStatsSearch},model:{value:t.aiStatsSearchKeyword,callback:function(e){t.aiStatsSearchKeyword=e},expression:"aiStatsSearchKeyword"}})],1)]),e("a-card",{staticClass:"user-table-card",staticStyle:{"margin-bottom":"20px"},attrs:{bordered:!1}},[e("h4",{staticStyle:{"margin-bottom":"12px",color:"#1e3a5f","font-weight":"600"}},[e("a-icon",{staticStyle:{"margin-right":"8px"},attrs:{type:"bar-chart"}}),t._v(" "+t._s(t.$t("adminAiStats.userStatsTitle")||"Per-User Statistics")+" ")],1),e("a-table",{attrs:{columns:t.aiUserColumns,dataSource:t.aiUserStats,loading:t.aiStatsLoading,pagination:t.aiStatsPagination,rowKey:function(t){return t.user_id}},on:{change:t.handleAiStatsTableChange},scopedSlots:t._u([{key:"aiUserInfo",fn:function(a,s){return[e("a-tooltip",{attrs:{title:(s.nickname||s.username||"-")+" ("+(s.email||"")+")"}},[e("span",{staticClass:"user-cell"},[e("a-avatar",{style:{backgroundColor:t.getUserColor(s.user_id),fontSize:"11px",marginRight:"6px"},attrs:{size:"small"}},[t._v(" "+t._s((s.nickname||s.username||"?").charAt(0).toUpperCase())+" ")]),e("span",{staticClass:"user-name"},[t._v(t._s(t.truncate(s.nickname||s.username||"-",10)))])],1)])]}},{key:"analysisCountInfo",fn:function(a){return[e("span",{staticStyle:{"font-weight":"600",color:"#1890ff"}},[t._v(t._s(a||0))])]}},{key:"accuracyInfo",fn:function(a,s){return[e("span",{staticClass:"text-profit"},[t._v(t._s(s.correct||0))]),e("span",{staticClass:"text-muted"},[t._v(" / ")]),e("span",{staticClass:"text-loss"},[t._v(t._s(s.incorrect||0))])]}},{key:"feedbackInfo",fn:function(a,s){return[e("a-tooltip",{attrs:{title:(t.$t("adminAiStats.helpful")||"Helpful")+" / "+(t.$t("adminAiStats.notHelpful")||"Not Helpful")}},[e("span",{staticStyle:{color:"#52c41a"}},[e("a-icon",{attrs:{type:"like"}}),t._v(" "+t._s(s.helpful||0))],1),e("span",{staticClass:"text-muted"},[t._v(" / ")]),e("span",{staticStyle:{color:"#ff4d4f"}},[e("a-icon",{attrs:{type:"dislike"}}),t._v(" "+t._s(s.not_helpful||0))],1)])]}},{key:"lastAnalysisAt",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}}])})],1),e("a-card",{staticClass:"user-table-card",attrs:{bordered:!1}},[e("h4",{staticStyle:{"margin-bottom":"12px",color:"#1e3a5f","font-weight":"600"}},[e("a-icon",{staticStyle:{"margin-right":"8px"},attrs:{type:"history"}}),t._v(" "+t._s(t.$t("adminAiStats.recentTitle")||"Recent Analysis Records")+" ")],1),e("a-table",{attrs:{columns:t.aiRecentColumns,dataSource:t.aiRecentRecords,loading:t.aiStatsLoading,pagination:!1,rowKey:function(t){return t.id},size:"small"},scopedSlots:t._u([{key:"recentUserInfo",fn:function(a,s){return[e("span",{staticClass:"user-cell"},[e("a-avatar",{style:{backgroundColor:t.getUserColor(s.user_id),fontSize:"11px",marginRight:"6px"},attrs:{size:"small"}},[t._v(" "+t._s((s.nickname||s.username||"?").charAt(0).toUpperCase())+" ")]),e("span",{staticClass:"user-name"},[t._v(t._s(t.truncate(s.nickname||s.username||"-",8)))])],1)]}},{key:"recentStatusInfo",fn:function(a){return[e("a-tag",{attrs:{color:"completed"===a?"green":"failed"===a?"red":"blue"}},[t._v(" "+t._s(a)+" ")])]}},{key:"recentCreatedAt",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}}])})],1)],1)],1),e("a-modal",{attrs:{title:t.isEdit?t.$t("userManage.editUser")||"Edit User":t.$t("userManage.createUser")||"Create User",confirmLoading:t.modalLoading},on:{ok:t.handleModalOk,cancel:t.handleModalCancel},model:{value:t.modalVisible,callback:function(e){t.modalVisible=e},expression:"modalVisible"}},[e("a-form",{attrs:{form:t.form,layout:"vertical"}},[e("a-form-item",{attrs:{label:t.$t("userManage.username")||"Username"}},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["username",{rules:[{required:!t.isEdit,message:t.$t("userManage.usernameRequired")||"Please enter username"}]}],expression:"['username', {\n rules: [{ required: !isEdit, message: $t('userManage.usernameRequired') || 'Please enter username' }]\n }]"}],attrs:{disabled:t.isEdit,placeholder:t.$t("userManage.usernamePlaceholder")||"Enter username"}},[e("a-icon",{attrs:{slot:"prefix",type:"user"},slot:"prefix"})],1)],1),t.isEdit?t._e():e("a-form-item",{attrs:{label:t.$t("userManage.password")||"Password"}},[e("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["password",{rules:[{required:!0,message:t.$t("userManage.passwordRequired")||"Please enter password"},{min:6,message:t.$t("userManage.passwordMin")||"Password must be at least 6 characters"}]}],expression:"['password', {\n rules: [\n { required: true, message: $t('userManage.passwordRequired') || 'Please enter password' },\n { min: 6, message: $t('userManage.passwordMin') || 'Password must be at least 6 characters' }\n ]\n }]"}],attrs:{placeholder:t.$t("userManage.passwordPlaceholder")||"Enter password (min 6 characters)"}},[e("a-icon",{attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),e("a-form-item",{attrs:{label:t.$t("userManage.nickname")||"Nickname"}},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["nickname"],expression:"['nickname']"}],attrs:{placeholder:t.$t("userManage.nicknamePlaceholder")||"Enter nickname"}},[e("a-icon",{attrs:{slot:"prefix",type:"smile"},slot:"prefix"})],1)],1),e("a-form-item",{attrs:{label:t.$t("userManage.email")||"Email"}},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["email",{rules:[{type:"email",message:t.$t("userManage.emailInvalid")||"Invalid email format"}]}],expression:"['email', {\n rules: [{ type: 'email', message: $t('userManage.emailInvalid') || 'Invalid email format' }]\n }]"}],attrs:{placeholder:t.$t("userManage.emailPlaceholder")||"Enter email"}},[e("a-icon",{attrs:{slot:"prefix",type:"mail"},slot:"prefix"})],1)],1),e("a-form-item",{attrs:{label:t.$t("userManage.role")||"Role"}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["role",{initialValue:"user"}],expression:"['role', { initialValue: 'user' }]"}],attrs:{placeholder:t.$t("userManage.rolePlaceholder")||"Select role"}},t._l(t.roles,function(a){return e("a-select-option",{key:a.id,attrs:{value:a.id}},[t._v(" "+t._s(t.getRoleLabel(a.id))+" ")])}),1)],1),t.isEdit?e("a-form-item",{attrs:{label:t.$t("userManage.status")||"Status"}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["status",{initialValue:"active"}],expression:"['status', { initialValue: 'active' }]"}],attrs:{placeholder:t.$t("userManage.statusPlaceholder")||"Select status"}},[e("a-select-option",{attrs:{value:"active"}},[t._v(t._s(t.$t("userManage.active")||"Active"))]),e("a-select-option",{attrs:{value:"disabled"}},[t._v(t._s(t.$t("userManage.disabled")||"Disabled"))])],1)],1):t._e()],1)],1),e("a-modal",{attrs:{title:t.$t("userManage.resetPassword")||"Reset Password",confirmLoading:t.resetPasswordLoading},on:{ok:t.handleResetPassword},model:{value:t.resetPasswordVisible,callback:function(e){t.resetPasswordVisible=e},expression:"resetPasswordVisible"}},[e("a-form",{attrs:{form:t.resetPasswordForm,layout:"vertical"}},[e("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{message:t.$t("userManage.resetPasswordWarning")||"This will reset the user's password",type:"warning",showIcon:""}}),e("a-form-item",{attrs:{label:t.$t("userManage.newPassword")||"New Password"}},[e("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["new_password",{rules:[{required:!0,message:t.$t("userManage.passwordRequired")||"Please enter new password"},{min:6,message:t.$t("userManage.passwordMin")||"Password must be at least 6 characters"}]}],expression:"['new_password', {\n rules: [\n { required: true, message: $t('userManage.passwordRequired') || 'Please enter new password' },\n { min: 6, message: $t('userManage.passwordMin') || 'Password must be at least 6 characters' }\n ]\n }]"}],attrs:{placeholder:t.$t("userManage.newPasswordPlaceholder")||"Enter new password"}},[e("a-icon",{attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1)],1)],1),e("a-modal",{attrs:{title:(t.$t("userManage.adjustCredits")||"Adjust Credits")+(t.creditsEditingUser?" - ".concat(t.creditsEditingUser.username):""),confirmLoading:t.creditsLoading},on:{ok:t.handleSetCredits},model:{value:t.creditsModalVisible,callback:function(e){t.creditsModalVisible=e},expression:"creditsModalVisible"}},[e("a-form",{attrs:{layout:"vertical"}},[t.creditsEditingUser?e("div",{staticClass:"current-credits-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("userManage.currentCredits")||"Current Credits")+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatCredits(t.creditsEditingUser.credits)))])]):t._e(),e("a-form-item",{attrs:{label:t.$t("userManage.newCredits")||"New Credits"}},[e("a-input-number",{staticStyle:{width:"100%"},attrs:{min:0,precision:2,placeholder:t.$t("userManage.enterCredits")||"Enter new credits amount"},model:{value:t.newCredits,callback:function(e){t.newCredits=e},expression:"newCredits"}})],1),e("a-form-item",{attrs:{label:t.$t("userManage.remark")||"Remark"}},[e("a-input",{attrs:{placeholder:t.$t("userManage.remarkPlaceholder")||"Optional remark"},model:{value:t.creditsRemark,callback:function(e){t.creditsRemark=e},expression:"creditsRemark"}})],1)],1)],1),e("a-modal",{attrs:{title:(t.$t("userManage.setVip")||"Set VIP")+(t.vipEditingUser?" - ".concat(t.vipEditingUser.username):""),confirmLoading:t.vipLoading},on:{ok:t.handleSetVip},model:{value:t.vipModalVisible,callback:function(e){t.vipModalVisible=e},expression:"vipModalVisible"}},[e("a-form",{attrs:{layout:"vertical"}},[t.vipEditingUser&&t.vipEditingUser.vip_expires_at?e("div",{staticClass:"current-vip-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("userManage.currentVip")||"Current VIP")+":")]),e("span",{staticClass:"value",class:t.isVipActive(t.vipEditingUser.vip_expires_at)?"active":"expired"},[t._v(" "+t._s(t.isVipActive(t.vipEditingUser.vip_expires_at)?(t.$t("userManage.vipActive")||"Active")+" (".concat(t.formatDate(t.vipEditingUser.vip_expires_at),")"):t.$t("userManage.vipExpired")||"Expired")+" ")])]):t._e(),e("a-form-item",{attrs:{label:t.$t("userManage.vipDays")||"VIP Days"}},[e("a-select",{staticStyle:{width:"100%"},model:{value:t.vipDays,callback:function(e){t.vipDays=e},expression:"vipDays"}},[e("a-select-option",{attrs:{value:0}},[t._v(t._s(t.$t("userManage.cancelVip")||"Cancel VIP"))]),e("a-select-option",{attrs:{value:7}},[t._v("7 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:30}},[t._v("30 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:90}},[t._v("90 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:180}},[t._v("180 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:365}},[t._v("365 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:-1}},[t._v(t._s(t.$t("userManage.customDate")||"Custom Date"))])],1)],1),-1===t.vipDays?e("a-form-item",{attrs:{label:t.$t("userManage.vipExpiresAt")||"VIP Expires At"}},[e("a-date-picker",{staticStyle:{width:"100%"},attrs:{showTime:"",format:"YYYY-MM-DD HH:mm:ss"},model:{value:t.vipCustomDate,callback:function(e){t.vipCustomDate=e},expression:"vipCustomDate"}})],1):t._e(),e("a-form-item",{attrs:{label:t.$t("userManage.remark")||"Remark"}},[e("a-input",{attrs:{placeholder:t.$t("userManage.remarkPlaceholder")||"Optional remark"},model:{value:t.vipRemark,callback:function(e){t.vipRemark=e},expression:"vipRemark"}})],1)],1)],1)],1)},r=[],i=a(76959),n=a(17654),o=a(57888),l=a(27617),d=a(21170),c=a(95353),u={name:"UserManage",mixins:[d.t],data:function(){return{activeTab:"users",loading:!1,users:[],roles:[],searchKeyword:"",pagination:{current:1,pageSize:10,total:0},modalVisible:!1,modalLoading:!1,isEdit:!1,editingUser:null,resetPasswordVisible:!1,resetPasswordLoading:!1,resetPasswordUserId:null,creditsModalVisible:!1,creditsLoading:!1,creditsEditingUser:null,newCredits:0,creditsRemark:"",vipModalVisible:!1,vipLoading:!1,vipEditingUser:null,vipDays:30,vipCustomDate:null,vipRemark:"",strategyLoading:!1,systemStrategies:[],strategySummary:null,strategyStatusFilter:"all",strategySearchKeyword:"",strategyPagination:{current:1,pageSize:20,total:0},strategiesLoaded:!1,orderLoading:!1,orders:[],orderSummary:null,orderStatusFilter:"all",orderSearchKeyword:"",orderPagination:{current:1,pageSize:20,total:0},ordersLoaded:!1,aiStatsLoading:!1,aiUserStats:[],aiRecentRecords:[],aiStatsSummary:null,aiStatsSearchKeyword:"",aiStatsPagination:{current:1,pageSize:20,total:0},aiStatsLoaded:!1}},computed:(0,o.A)((0,o.A)({},(0,c.L8)(["userInfo"])),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},currentUserId:function(){var t;return null===(t=this.userInfo)||void 0===t?void 0:t.id},columns:function(){return[{title:"ID",dataIndex:"id",width:60},{title:this.$t("userManage.username")||"Username",dataIndex:"username",width:120},{title:this.$t("userManage.nickname")||"Nickname",dataIndex:"nickname",width:100},{title:this.$t("userManage.email")||"Email",dataIndex:"email",width:180},{title:this.$t("userManage.role")||"Role",dataIndex:"role",width:90,scopedSlots:{customRender:"role"}},{title:this.$t("userManage.credits")||"Credits",dataIndex:"credits",width:100,scopedSlots:{customRender:"credits"}},{title:"VIP",dataIndex:"vip_expires_at",width:120,scopedSlots:{customRender:"vip_expires_at"}},{title:this.$t("userManage.status")||"Status",dataIndex:"status",width:90,scopedSlots:{customRender:"status"}},{title:this.$t("userManage.lastLogin")||"Last Login",dataIndex:"last_login_at",width:150,scopedSlots:{customRender:"last_login_at"}},{title:this.$t("common.actions")||"Actions",dataIndex:"action",width:180,scopedSlots:{customRender:"action"}}]},strategyColumns:function(){return[{title:"ID",dataIndex:"id",width:60,fixed:"left"},{title:this.$t("systemOverview.colUser")||"User",dataIndex:"username",width:110,fixed:"left",scopedSlots:{customRender:"userInfo"}},{title:this.$t("systemOverview.colStrategy")||"Strategy",dataIndex:"strategy_name",width:160,ellipsis:!0},{title:this.$t("systemOverview.colStatus")||"Status",dataIndex:"status",width:100,scopedSlots:{customRender:"strategyStatus"}},{title:this.$t("systemOverview.colSymbol")||"Symbol",dataIndex:"symbol",width:140,scopedSlots:{customRender:"symbolInfo"}},{title:this.$t("systemOverview.colCapital")||"Capital",dataIndex:"initial_capital",width:110,scopedSlots:{customRender:"capitalInfo"}},{title:this.$t("systemOverview.colPnl")||"PnL / ROI",dataIndex:"total_pnl",width:200,scopedSlots:{customRender:"pnlInfo"}},{title:this.$t("systemOverview.colPositions")||"Pos",dataIndex:"position_count",width:70,align:"center",scopedSlots:{customRender:"positionInfo"}},{title:this.$t("systemOverview.colTrades")||"Trades",dataIndex:"trade_count",width:80,align:"center",scopedSlots:{customRender:"tradeInfo"}},{title:this.$t("systemOverview.colIndicator")||"Indicator",dataIndex:"indicator_name",width:130,scopedSlots:{customRender:"indicatorInfo"}},{title:this.$t("systemOverview.colExchange")||"Exchange",dataIndex:"exchange_name",width:100,scopedSlots:{customRender:"exchangeInfo"}},{title:this.$t("systemOverview.colTimeframe")||"TF",dataIndex:"timeframe",width:70,align:"center",scopedSlots:{customRender:"timeframeInfo"}},{title:this.$t("systemOverview.colLeverage")||"Lev",dataIndex:"leverage",width:70,align:"center",scopedSlots:{customRender:"leverageInfo"}},{title:this.$t("systemOverview.colCreatedAt")||"Created",dataIndex:"created_at",width:150,scopedSlots:{customRender:"createdAtInfo"}}]},orderColumns:function(){return[{title:this.$t("adminOrders.colUser")||"User",dataIndex:"username",width:120,scopedSlots:{customRender:"orderUserInfo"}},{title:this.$t("adminOrders.colType")||"Type",dataIndex:"order_type",width:80,scopedSlots:{customRender:"orderTypeInfo"}},{title:this.$t("adminOrders.colPlan")||"Plan",dataIndex:"plan",width:100,scopedSlots:{customRender:"planInfo"}},{title:this.$t("adminOrders.colAmount")||"Amount",dataIndex:"amount",width:120,scopedSlots:{customRender:"amountInfo"}},{title:this.$t("adminOrders.colStatus")||"Status",dataIndex:"status",width:100,scopedSlots:{customRender:"orderStatusInfo"}},{title:this.$t("adminOrders.colChain")||"Chain",dataIndex:"chain",width:80,scopedSlots:{customRender:"chainInfo"}},{title:this.$t("adminOrders.colAddress")||"Address",dataIndex:"address",width:140,scopedSlots:{customRender:"addressInfo"}},{title:this.$t("adminOrders.colTxHash")||"Tx Hash",dataIndex:"tx_hash",width:160,scopedSlots:{customRender:"txHashInfo"}},{title:this.$t("adminOrders.colCreatedAt")||"Created",dataIndex:"created_at",width:150,scopedSlots:{customRender:"orderCreatedAt"}}]},aiUserColumns:function(){return[{title:this.$t("adminAiStats.colUser")||"User",dataIndex:"username",width:140,scopedSlots:{customRender:"aiUserInfo"}},{title:this.$t("adminAiStats.colAnalysisCount")||"Analyses",dataIndex:"analysis_count",width:100,align:"center",scopedSlots:{customRender:"analysisCountInfo"},sorter:function(t,e){return t.analysis_count-e.analysis_count},defaultSortOrder:"descend"},{title:this.$t("adminAiStats.colSymbols")||"Symbols",dataIndex:"symbol_count",width:90,align:"center"},{title:this.$t("adminAiStats.colMarkets")||"Markets",dataIndex:"market_count",width:90,align:"center"},{title:this.$t("adminAiStats.colAccuracy")||"Correct / Wrong",dataIndex:"correct",width:130,align:"center",scopedSlots:{customRender:"accuracyInfo"}},{title:this.$t("adminAiStats.colFeedback")||"Feedback",dataIndex:"helpful",width:130,align:"center",scopedSlots:{customRender:"feedbackInfo"}},{title:this.$t("adminAiStats.colLastAnalysis")||"Last Analysis",dataIndex:"last_analysis_at",width:160,scopedSlots:{customRender:"lastAnalysisAt"}}]},aiRecentColumns:function(){return[{title:"ID",dataIndex:"id",width:60},{title:this.$t("adminAiStats.colUser")||"User",dataIndex:"username",width:120,scopedSlots:{customRender:"recentUserInfo"}},{title:this.$t("adminAiStats.colMarket")||"Market",dataIndex:"market",width:80},{title:this.$t("adminAiStats.colSymbol")||"Symbol",dataIndex:"symbol",width:120},{title:this.$t("adminAiStats.colModel")||"Model",dataIndex:"model",width:140,ellipsis:!0},{title:this.$t("adminAiStats.colStatus")||"Status",dataIndex:"status",width:100,scopedSlots:{customRender:"recentStatusInfo"}},{title:this.$t("adminAiStats.colCreatedAt")||"Time",dataIndex:"created_at",width:160,scopedSlots:{customRender:"recentCreatedAt"}}]}}),beforeCreate:function(){this.form=this.$form.createForm(this),this.resetPasswordForm=this.$form.createForm(this,{name:"resetPassword"})},mounted:function(){this.loadUsers(),this.loadRoles()},methods:{handleTabChange:function(t){"strategies"!==t||this.strategiesLoaded||this.loadSystemStrategies(),"orders"!==t||this.ordersLoaded||this.loadOrders(),"aiStats"!==t||this.aiStatsLoaded||this.loadAiStats()},loadSystemStrategies:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.strategyLoading=!0,e.p=1,e.n=2,(0,l.DK)({page:t.strategyPagination.current,page_size:t.strategyPagination.pageSize,status:"all"===t.strategyStatusFilter?"":t.strategyStatusFilter,search:t.strategySearchKeyword||""});case 2:a=e.v,1===a.code?(t.systemStrategies=a.data.items||[],t.strategyPagination.total=a.data.total||0,t.strategySummary=a.data.summary||{},t.strategiesLoaded=!0):t.$message.error(a.msg||"Failed to load strategies"),e.n=4;break;case 3:e.p=3,e.v,t.$message.error("Failed to load system strategies");case 4:return e.p=4,t.strategyLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleStrategySearch:function(){this.strategyPagination.current=1,this.loadSystemStrategies()},handleStrategyFilterChange:function(){this.strategyPagination.current=1,this.loadSystemStrategies()},handleStrategyTableChange:function(t){this.strategyPagination.current=t.current,this.strategyPagination.pageSize=t.pageSize,this.loadSystemStrategies()},getUserColor:function(t){var e=["#1890ff","#722ed1","#13c2c2","#fa8c16","#eb2f96","#52c41a","#2f54eb","#faad14"];return e[(t||0)%e.length]},formatNumber:function(t){return t||0===t?Number(t).toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:2}):"0"},formatPnl:function(t){if(!t&&0!==t)return"0";var e=Number(t),a=e>=0?"+":"";return a+e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:4})},truncate:function(t,e){return t?t.length>e?t.substring(0,e)+"...":t:""},loadUsers:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loading=!0,e.p=1,e.n=2,(0,l.aU)({page:t.pagination.current,page_size:t.pagination.pageSize,search:t.searchKeyword||""});case 2:a=e.v,1===a.code?(t.users=a.data.items||[],t.pagination.total=a.data.total||0):t.$message.error(a.msg||"Failed to load users"),e.n=4;break;case 3:e.p=3,e.v,t.$message.error("Failed to load users");case 4:return e.p=4,t.loading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleSearch:function(){this.pagination.current=1,this.loadUsers()},loadRoles:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,l.O0)();case 1:a=e.v,1===a.code&&(t.roles=a.data.roles||[]),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},handleTableChange:function(t){this.pagination.current=t.current,this.pagination.pageSize=t.pageSize,this.loadUsers()},showCreateModal:function(){var t=this;this.isEdit=!1,this.editingUser=null,this.modalVisible=!0,this.$nextTick(function(){t.form.resetFields()})},showEditModal:function(t){var e=this;this.isEdit=!0,this.editingUser=t,this.modalVisible=!0,this.$nextTick(function(){e.form.setFieldsValue({username:t.username,nickname:t.nickname,email:t.email,role:t.role,status:t.status})})},handleModalCancel:function(){this.modalVisible=!1,this.form.resetFields()},handleModalOk:function(){var t=this;this.form.validateFields(function(){var e=(0,n.A)((0,i.A)().m(function e(a,s){var r;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!a){e.n=1;break}return e.a(2);case 1:if(t.modalLoading=!0,e.p=2,!t.isEdit){e.n=4;break}return e.n=3,(0,l.TK)(t.editingUser.id,{nickname:s.nickname,email:s.email,role:s.role,status:s.status});case 3:r=e.v,e.n=6;break;case 4:return e.n=5,(0,l.kg)(s);case 5:r=e.v;case 6:1===r.code?(t.$message.success(r.msg||"Success"),t.modalVisible=!1,t.form.resetFields(),t.loadUsers()):t.$message.error(r.msg||"Operation failed"),e.n=8;break;case 7:e.p=7,e.v,t.$message.error("Operation failed");case 8:return e.p=8,t.modalLoading=!1,e.f(8);case 9:return e.a(2)}},e,null,[[2,7,8,9]])}));return function(t,a){return e.apply(this,arguments)}}())},handleDelete:function(t){var e=this;return(0,n.A)((0,i.A)().m(function a(){var s;return(0,i.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,l.hG)(t);case 1:s=a.v,1===s.code?(e.$message.success(s.msg||"User deleted"),e.loadUsers()):e.$message.error(s.msg||"Delete failed"),a.n=3;break;case 2:a.p=2,a.v,e.$message.error("Delete failed");case 3:return a.a(2)}},a,null,[[0,2]])}))()},showResetPasswordModal:function(t){var e=this;this.resetPasswordUserId=t.id,this.resetPasswordVisible=!0,this.$nextTick(function(){e.resetPasswordForm.resetFields()})},handleResetPassword:function(){var t=this;this.resetPasswordForm.validateFields(function(){var e=(0,n.A)((0,i.A)().m(function e(a,s){var r;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!a){e.n=1;break}return e.a(2);case 1:return t.resetPasswordLoading=!0,e.p=2,e.n=3,(0,l.cw)({user_id:t.resetPasswordUserId,new_password:s.new_password});case 3:r=e.v,1===r.code?(t.$message.success(r.msg||"Password reset successfully"),t.resetPasswordVisible=!1,t.resetPasswordForm.resetFields()):t.$message.error(r.msg||"Reset failed"),e.n=5;break;case 4:e.p=4,e.v,t.$message.error("Reset failed");case 5:return e.p=5,t.resetPasswordLoading=!1,e.f(5);case 6:return e.a(2)}},e,null,[[2,4,5,6]])}));return function(t,a){return e.apply(this,arguments)}}())},getRoleColor:function(t){var e={admin:"red",manager:"orange",user:"blue",viewer:"default"};return e[t]||"default"},getRoleLabel:function(t){var e={admin:this.$t("userManage.roleAdmin")||"Admin",manager:this.$t("userManage.roleManager")||"Manager",user:this.$t("userManage.roleUser")||"User",viewer:this.$t("userManage.roleViewer")||"Viewer"};return e[t]||t},formatTime:function(t){if(!t)return"";var e=new Date("number"===typeof t?1e3*t:t);return e.toLocaleString()},formatCredits:function(t){return t||0===t?Number(t).toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:2}):"0"},formatDate:function(t){if(!t)return"";var e=new Date(t);return e.toLocaleDateString()},isVipActive:function(t){return!!t&&new Date(t)>new Date},showCreditsModal:function(t){this.creditsEditingUser=t,this.newCredits=parseFloat(t.credits)||0,this.creditsRemark="",this.creditsModalVisible=!0},handleSetCredits:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!(t.newCredits<0)){e.n=1;break}return t.$message.error(t.$t("userManage.creditsNonNegative")||"Credits cannot be negative"),e.a(2);case 1:return t.creditsLoading=!0,e.p=2,e.n=3,(0,l.wq)({user_id:t.creditsEditingUser.id,credits:t.newCredits,remark:t.creditsRemark});case 3:a=e.v,1===a.code?(t.$message.success(a.msg||"Credits updated successfully"),t.creditsModalVisible=!1,t.loadUsers()):t.$message.error(a.msg||"Update failed"),e.n=5;break;case 4:e.p=4,e.v,t.$message.error("Update failed");case 5:return e.p=5,t.creditsLoading=!1,e.f(5);case 6:return e.a(2)}},e,null,[[2,4,5,6]])}))()},showVipModal:function(t){this.vipEditingUser=t,this.vipDays=30,this.vipCustomDate=null,this.vipRemark="",this.vipModalVisible=!0},handleSetVip:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a,s;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(a={user_id:t.vipEditingUser.id,remark:t.vipRemark},-1!==t.vipDays){e.n=2;break}if(t.vipCustomDate){e.n=1;break}return t.$message.error(t.$t("userManage.selectDate")||"Please select a date"),e.a(2);case 1:a.vip_expires_at=t.vipCustomDate.toISOString(),e.n=3;break;case 2:a.vip_days=t.vipDays;case 3:return t.vipLoading=!0,e.p=4,e.n=5,(0,l.nY)(a);case 5:s=e.v,1===s.code?(t.$message.success(s.msg||"VIP status updated successfully"),t.vipModalVisible=!1,t.loadUsers()):t.$message.error(s.msg||"Update failed"),e.n=7;break;case 6:e.p=6,e.v,t.$message.error("Update failed");case 7:return e.p=7,t.vipLoading=!1,e.f(7);case 8:return e.a(2)}},e,null,[[4,6,7,8]])}))()},loadOrders:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.orderLoading=!0,e.p=1,e.n=2,(0,l.vi)({page:t.orderPagination.current,page_size:t.orderPagination.pageSize,status:"all"===t.orderStatusFilter?"":t.orderStatusFilter,search:t.orderSearchKeyword||""});case 2:a=e.v,1===a.code?(t.orders=a.data.items||[],t.orderPagination.total=a.data.total||0,t.orderSummary=a.data.summary||{},t.ordersLoaded=!0):t.$message.error(a.msg||"Failed to load orders"),e.n=4;break;case 3:e.p=3,e.v,t.$message.error("Failed to load orders");case 4:return e.p=4,t.orderLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleOrderSearch:function(){this.orderPagination.current=1,this.loadOrders()},handleOrderFilterChange:function(){this.orderPagination.current=1,this.loadOrders()},handleOrderTableChange:function(t){this.orderPagination.current=t.current,this.orderPagination.pageSize=t.pageSize,this.loadOrders()},getOrderStatusColor:function(t){var e={paid:"green",confirmed:"green",pending:"orange",expired:"grey",cancelled:"default",failed:"red"};return e[t]||"default"},getOrderStatusLabel:function(t){var e={paid:this.$t("adminOrders.statusPaid")||"Paid",confirmed:this.$t("adminOrders.statusConfirmed")||"Confirmed",pending:this.$t("adminOrders.statusPending")||"Pending",expired:this.$t("adminOrders.statusExpired")||"Expired",cancelled:this.$t("adminOrders.statusCancelled")||"Cancelled",failed:this.$t("adminOrders.statusFailed")||"Failed"};return e[t]||t},loadAiStats:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.aiStatsLoading=!0,e.p=1,e.n=2,(0,l.d$)({page:t.aiStatsPagination.current,page_size:t.aiStatsPagination.pageSize,search:t.aiStatsSearchKeyword||""});case 2:a=e.v,1===a.code?(t.aiUserStats=a.data.user_stats||[],t.aiRecentRecords=a.data.recent||[],t.aiStatsPagination.total=a.data.user_total||0,t.aiStatsSummary=a.data.summary||{},t.aiStatsLoaded=!0):t.$message.error(a.msg||"Failed to load AI stats"),e.n=4;break;case 3:e.p=3,e.v,t.$message.error("Failed to load AI stats");case 4:return e.p=4,t.aiStatsLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleAiStatsSearch:function(){this.aiStatsPagination.current=1,this.loadAiStats()},handleAiStatsTableChange:function(t){this.aiStatsPagination.current=t.current,this.aiStatsPagination.pageSize=t.pageSize,this.loadAiStats()}}},m=u,p=a(845),g=(0,p.A)(m,s,r,!1,null,"49c4f239",null),v=g.exports},27617:function(t,e,a){a.d(e,{DK:function(){return h},E$:function(){return c},Gl:function(){return p},O0:function(){return d},TK:function(){return n},aU:function(){return r},cw:function(){return l},d$:function(){return S},hG:function(){return o},kg:function(){return i},nY:function(){return y},r7:function(){return u},rx:function(){return v},v9:function(){return g},vF:function(){return m},vi:function(){return _},wq:function(){return f}});var s=a(76471);function r(t){return(0,s.Ay)({url:"/api/users/list",method:"get",params:t})}function i(t){return(0,s.Ay)({url:"/api/users/create",method:"post",data:t})}function n(t,e){return(0,s.Ay)({url:"/api/users/update",method:"put",params:{id:t},data:e})}function o(t){return(0,s.Ay)({url:"/api/users/delete",method:"delete",params:{id:t}})}function l(t){return(0,s.Ay)({url:"/api/users/reset-password",method:"post",data:t})}function d(){return(0,s.Ay)({url:"/api/users/roles",method:"get"})}function c(){return(0,s.Ay)({url:"/api/users/profile",method:"get"})}function u(t){return(0,s.Ay)({url:"/api/users/profile/update",method:"put",data:t})}function m(){return(0,s.Ay)({url:"/api/users/notification-settings",method:"get"})}function p(t){return(0,s.Ay)({url:"/api/users/notification-settings",method:"put",data:t})}function g(t){return(0,s.Ay)({url:"/api/users/my-credits-log",method:"get",params:t})}function v(t){return(0,s.Ay)({url:"/api/users/my-referrals",method:"get",params:t})}function f(t){return(0,s.Ay)({url:"/api/users/set-credits",method:"post",data:t})}function y(t){return(0,s.Ay)({url:"/api/users/set-vip",method:"post",data:t})}function h(t){return(0,s.Ay)({url:"/api/users/system-strategies",method:"get",params:t})}function _(t){return(0,s.Ay)({url:"/api/users/admin-orders",method:"get",params:t})}function S(t){return(0,s.Ay)({url:"/api/users/admin-ai-stats",method:"get",params:t})}}}]); \ No newline at end of file diff --git a/frontend/dist/js/447.1f8e0f21.js b/frontend/dist/js/447.1f8e0f21.js new file mode 100644 index 0000000..8321565 --- /dev/null +++ b/frontend/dist/js/447.1f8e0f21.js @@ -0,0 +1,18 @@ +(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[447],{87108:function(t,e,i){"use strict";i.r(e),i.d(e,{default:function(){return ua}});var n=function(){var t=this,e=t._self._c;return e("div",{staticClass:"chart-container",class:{"theme-dark":t.isDarkTheme}},[e("div",{staticClass:"chart-header"},[e("div",{staticClass:"header-top"},[e("div",{staticClass:"header-left"},[e("div",{staticClass:"search-section"},[e("a-select",{staticClass:"symbol-select",attrs:{"show-search":"",placeholder:t.$t("dashboard.indicator.selectSymbol"),dropdownClassName:"dark-dropdown","filter-option":t.filterSymbolOption,"not-found-content":null,open:t.symbolSearchOpen},on:{search:t.handleSymbolSearch,change:t.handleSymbolSelect,dropdownVisibleChange:t.handleDropdownVisibleChange},model:{value:t.searchSymbol,callback:function(e){t.searchSymbol=e},expression:"searchSymbol"}},[e("a-icon",{staticStyle:{color:"#999"},attrs:{slot:"suffixIcon",type:"search"},slot:"suffixIcon"}),t._l(t.symbolSuggestions,function(i){return e("a-select-option",{key:i.value,attrs:{value:i.value}},[e("div",{staticClass:"symbol-option"},[e("a-tag",{staticStyle:{"margin-right":"8px","margin-bottom":"0"},attrs:{color:t.getMarketColor(i.market)}},[t._v(" "+t._s(t.getMarketName(i.market))+" ")]),e("span",{staticClass:"symbol-name"},[t._v(t._s(i.symbol))]),i.name?e("span",{staticClass:"symbol-name-extra"},[t._v(t._s(i.name))]):t._e()],1)])}),e("a-select-option",{key:"add-stock-option",staticClass:"add-stock-option",attrs:{value:"__add_stock_option__"}},[e("div",{staticStyle:{width:"100%","text-align":"center",padding:"4px 0",color:"#1890ff",cursor:"pointer"}},[e("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"plus"}}),e("span",[t._v(t._s(t.$t("dashboard.analysis.watchlist.add")))])],1)])],2)],1),e("div",{staticClass:"timeframe-group"},t._l(["1m","5m","15m","30m","1H","4H","1D","1W"],function(i){return e("div",{key:i,staticClass:"timeframe-item",class:{active:t.timeframe===i},on:{click:function(e){return t.setTimeframe(i)}}},[t._v(" "+t._s(i)+" ")])}),0)]),t.currentSymbol?e("div",{staticClass:"current-symbol"},[e("div",{staticClass:"symbol-info"},[e("span",{staticClass:"symbol-label"},[t._v(t._s(t.currentSymbol))]),e("span",{staticClass:"market-tag"},[t._v(t._s(t.currentMarket))])]),e("div",{staticClass:"price-info",class:t.priceChangeClass},[e("span",{staticClass:"symbol-price"},[t._v(t._s(t.currentPrice))]),e("span",{staticClass:"symbol-change"},[t._v(" "+t._s(t.priceChange>0?"+":"")+t._s(t.priceChange.toFixed(2))+"% ")])]),t.isCryptoMarket?e("a-button",{staticClass:"qt-header-btn",attrs:{size:"small"},on:{click:t.openQuickTrade}},[e("a-icon",{attrs:{type:"thunderbolt",theme:"filled"}}),t._v(" "+t._s(t.$t("quickTrade.openPanel"))+" ")],1):t._e()],1):t._e()])]),e("div",{staticClass:"chart-content"},[e("div",{staticClass:"chart-main-row"},[t.currentSymbol?e("div",{staticClass:"mobile-symbol-price"},[e("div",{staticClass:"mobile-symbol-info"},[e("span",{staticClass:"mobile-market-tag"},[t._v(t._s(t.currentMarket))]),e("span",[t._v("-")]),e("span",{staticClass:"mobile-symbol-label"},[t._v(t._s(t.currentSymbol))])]),e("div",{staticClass:"mobile-price-info",class:t.priceChangeClass},[e("span",{staticClass:"mobile-symbol-price"},[t._v(t._s(t.currentPrice))]),e("span",{staticClass:"mobile-symbol-change"},[t._v(" "+t._s(t.priceChange>0?"+":"")+t._s(t.priceChange.toFixed(2))+"% ")])])]):t._e(),e("kline-chart",{ref:"klineChart",attrs:{symbol:t.currentSymbol,market:t.currentMarket,timeframe:t.timeframe,theme:t.chartTheme,activeIndicators:t.activeIndicators,realtimeEnabled:t.realtimeEnabled},on:{"price-change":t.handlePriceChange,retry:t.handleChartRetry,"indicator-toggle":t.handleIndicatorToggle}}),e("div",{staticClass:"chart-right"},[e("div",{staticClass:"indicators-panel"},[e("div",{staticClass:"panel-header"},[e("span",[t._v(t._s(t.$t("dashboard.indicator.panel.title")))]),e("div",{staticStyle:{display:"flex","align-items":"center","margin-left":"auto",gap:"8px"}},[t.isMobile?e("a-button",{staticClass:"mobile-header-create-btn",attrs:{type:"primary",size:"small",icon:"plus"},on:{click:t.handleCreateIndicator}},[t._v(" "+t._s(t.$t("dashboard.indicator.create"))+" ")]):t._e(),e("a-tooltip",{attrs:{title:t.realtimeEnabled?t.$t("dashboard.indicator.panel.realtimeOn"):t.$t("dashboard.indicator.panel.realtimeOff")}},[e("a-button",{staticClass:"realtime-toggle-btn",class:{active:t.realtimeEnabled},attrs:{type:"text"},on:{click:t.toggleRealtime}},[e("a-icon",{attrs:{type:t.realtimeEnabled?"sync":"pause-circle",spin:t.realtimeEnabled}})],1)],1)],1)]),e("div",{staticClass:"panel-body"},[t.isMobile?[e("div",{staticClass:"mobile-tab-content"},[e("div",{staticClass:"section-content custom-scrollbar"},[t._l(t.customIndicators,function(i){return e("div",{key:"custom-"+i.id,class:["indicator-card",{"indicator-active":t.isIndicatorActive("custom-"+i.id)}],on:{click:function(e){return t.toggleIndicator(i,"custom")}}},[e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-header"},[e("span",{staticClass:"card-name"},[t._v(t._s(i.name))]),e("div",{staticClass:"card-actions"},[e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.action.edit")}},[e("a-icon",{staticClass:"action-icon edit-icon",attrs:{type:"edit"},on:{click:function(e){return e.stopPropagation(),t.handleEditIndicator(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.action.delete")}},[e("a-icon",{staticClass:"action-icon delete-icon",attrs:{type:"delete"},on:{click:function(e){return e.stopPropagation(),t.handleDeleteIndicator(i)}}})],1),e("a-tooltip",{attrs:{title:t.isIndicatorActive("custom-"+i.id)?t.$t("dashboard.indicator.action.stop"):t.$t("dashboard.indicator.action.start")}},[e("a-icon",{class:["action-icon","toggle-icon",{active:t.isIndicatorActive("custom-"+i.id)}],attrs:{type:t.isIndicatorActive("custom-"+i.id)?"pause-circle":"play-circle"},on:{click:function(e){return e.stopPropagation(),t.toggleIndicator(i,"custom")}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.title")}},[e("a-icon",{staticClass:"action-icon backtest-icon",attrs:{type:"experiment"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktest(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.historyTitle")}},[e("a-icon",{staticClass:"action-icon backtest-history-icon",attrs:{type:"clock-circle"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktestHistory(i)}}})],1),e("a-tooltip",{attrs:{title:i.publish_to_community?t.$t("dashboard.indicator.action.unpublish"):t.$t("dashboard.indicator.action.publish")}},[e("a-icon",{class:["action-icon","publish-icon",{published:i.publish_to_community}],attrs:{type:i.publish_to_community?"cloud":"cloud-upload"},on:{click:function(e){return e.stopPropagation(),t.handlePublishIndicator(i)}}})],1)],1)]),e("span",{staticClass:"card-desc"},[t._v(t._s(i.description||""))])])])}),0===t.customIndicators.length?e("div",{staticClass:"empty-indicators"},[e("a-icon",{attrs:{type:"info-circle"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.empty")))])],1):t._e()],2)])]:[e("div",{staticClass:"indicator-section",class:{"section-empty":0===t.customIndicators.length}},[e("div",{staticClass:"section-label"},[e("div",{staticClass:"section-label-left",on:{click:t.toggleCustomSection}},[e("a-icon",{staticClass:"collapse-icon",attrs:{type:t.customSectionCollapsed?"right":"down"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.section.myCreated"))+" ("+t._s(t.customIndicators.length)+")")])],1),e("a-button",{staticClass:"create-indicator-btn",attrs:{type:"primary",size:"small",icon:"plus"},on:{click:function(e){return e.stopPropagation(),t.handleCreateIndicator.apply(null,arguments)}}},[t._v(" "+t._s(t.$t("dashboard.indicator.create"))+" ")])],1),e("div",{directives:[{name:"show",rawName:"v-show",value:!t.customSectionCollapsed,expression:"!customSectionCollapsed"}],staticClass:"section-content custom-scrollbar"},[t._l(t.customIndicators,function(i){return e("div",{key:"custom-"+i.id,class:["indicator-card",{"indicator-active":t.isIndicatorActive("custom-"+i.id)}],on:{click:function(e){return t.toggleIndicator(i,"custom")}}},[e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-header"},[e("span",{staticClass:"card-name"},[t._v(t._s(i.name))]),e("div",{staticClass:"card-actions"},[e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.action.edit")}},[e("a-icon",{staticClass:"action-icon edit-icon",attrs:{type:"edit"},on:{click:function(e){return e.stopPropagation(),t.handleEditIndicator(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.action.delete")}},[e("a-icon",{staticClass:"action-icon delete-icon",attrs:{type:"delete"},on:{click:function(e){return e.stopPropagation(),t.handleDeleteIndicator(i)}}})],1),e("a-tooltip",{attrs:{title:t.isIndicatorActive("custom-"+i.id)?t.$t("dashboard.indicator.action.stop"):t.$t("dashboard.indicator.action.start")}},[e("a-icon",{class:["action-icon","toggle-icon",{active:t.isIndicatorActive("custom-"+i.id)}],attrs:{type:t.isIndicatorActive("custom-"+i.id)?"pause-circle":"play-circle"},on:{click:function(e){return e.stopPropagation(),t.toggleIndicator(i,"custom")}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.title")}},[e("a-icon",{staticClass:"action-icon backtest-icon",attrs:{type:"experiment"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktest(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.historyTitle")}},[e("a-icon",{staticClass:"action-icon backtest-history-icon",attrs:{type:"clock-circle"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktestHistory(i)}}})],1),e("a-tooltip",{attrs:{title:i.publish_to_community?t.$t("dashboard.indicator.action.unpublish"):t.$t("dashboard.indicator.action.publish")}},[e("a-icon",{class:["action-icon","publish-icon",{published:i.publish_to_community}],attrs:{type:i.publish_to_community?"cloud":"cloud-upload"},on:{click:function(e){return e.stopPropagation(),t.handlePublishIndicator(i)}}})],1)],1)]),e("span",{staticClass:"card-desc"},[t._v(t._s(i.description||""))])])])}),0===t.customIndicators.length?e("div",{staticClass:"empty-indicators"},[e("a-icon",{attrs:{type:"info-circle"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.empty")))])],1):t._e()],2)]),e("div",{staticClass:"indicator-section",class:{"section-empty":0===t.purchasedIndicators.length}},[e("div",{staticClass:"section-label"},[e("div",{staticClass:"section-label-left",on:{click:function(e){t.purchasedSectionCollapsed=!t.purchasedSectionCollapsed}}},[e("a-icon",{staticClass:"collapse-icon",attrs:{type:t.purchasedSectionCollapsed?"right":"down"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.section.purchased"))+" ("+t._s(t.purchasedIndicators.length)+")")])],1),e("a-button",{staticClass:"buy-indicator-btn",attrs:{type:"link",size:"small",icon:"shop"},on:{click:function(e){return e.stopPropagation(),t.goToIndicatorMarket.apply(null,arguments)}}},[t._v(" "+t._s(t.$t("menu.dashboard.community"))+" ")])],1),e("div",{directives:[{name:"show",rawName:"v-show",value:!t.purchasedSectionCollapsed,expression:"!purchasedSectionCollapsed"}],staticClass:"section-content custom-scrollbar"},[t._l(t.purchasedIndicators,function(i){return e("div",{key:"purchased-"+i.id,class:["indicator-card","purchased-indicator",{"indicator-active":t.isIndicatorActive("purchased-"+i.id)}],on:{click:function(e){return t.toggleIndicator(i,"purchased")}}},[e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-header"},[e("span",{staticClass:"card-name"},[e("a-icon",{staticClass:"purchased-icon",attrs:{type:"shopping"}}),t._v(" "+t._s(i.name)+" ")],1),e("div",{staticClass:"card-actions"},[e("a-tooltip",{attrs:{title:t.isIndicatorActive("purchased-"+i.id)?t.$t("dashboard.indicator.action.stop"):t.$t("dashboard.indicator.action.start")}},[e("a-icon",{class:["action-icon","toggle-icon",{active:t.isIndicatorActive("purchased-"+i.id)}],attrs:{type:t.isIndicatorActive("purchased-"+i.id)?"pause-circle":"play-circle"},on:{click:function(e){return e.stopPropagation(),t.toggleIndicator(i,"purchased")}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.title")}},[e("a-icon",{staticClass:"action-icon backtest-icon",attrs:{type:"experiment"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktest(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.historyTitle")}},[e("a-icon",{staticClass:"action-icon backtest-history-icon",attrs:{type:"clock-circle"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktestHistory(i)}}})],1)],1)]),e("span",{staticClass:"card-desc"},[t._v(t._s(i.description||""))])])])}),0===t.purchasedIndicators.length?e("div",{staticClass:"empty-indicators"},[e("a-icon",{attrs:{type:"shopping"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.emptyPurchased")))])],1):t._e()],2)])]],2)])])],1),e("indicator-editor",{ref:"indicatorEditor",attrs:{visible:t.showIndicatorEditor,indicator:t.editingIndicator,userId:t.userId},on:{run:t.handleRunIndicator,save:t.handleSaveIndicator,cancel:function(e){t.showIndicatorEditor=!1,t.editingIndicator=null}}}),e("backtest-modal",{attrs:{visible:t.showBacktestModal,userId:t.userId,indicator:t.backtestIndicator,symbol:t.selectedSymbol,market:t.selectedMarket,timeframe:t.selectedTimeframe},on:{cancel:function(e){t.showBacktestModal=!1,t.backtestIndicator=null}}}),e("a-modal",{attrs:{visible:t.showParamsModal,title:t.$t("dashboard.indicator.paramsConfig.title"),confirmLoading:t.loadingParams,width:500,maskClosable:!1,keyboard:!1},on:{ok:t.confirmIndicatorParams,cancel:t.cancelIndicatorParams,afterClose:t.handleParamsModalAfterClose}},[t.pendingIndicator?e("div",{staticClass:"params-config-modal"},[e("div",{staticClass:"indicator-info"},[e("span",{staticClass:"indicator-name"},[t._v(t._s(t.pendingIndicator.name))])]),e("a-divider"),t.indicatorParams.length>0?e("div",{staticClass:"params-form"},t._l(t.indicatorParams,function(i){return e("div",{key:i.name,staticClass:"param-item"},[e("div",{staticClass:"param-header"},[e("label",{staticClass:"param-label"},[t._v(t._s(i.name))]),i.description?e("a-tooltip",{attrs:{title:i.description}},[e("a-icon",{staticStyle:{color:"#999","margin-left":"4px"},attrs:{type:"question-circle"}})],1):t._e()],1),"int"===i.type?e("a-input-number",{staticStyle:{width:"100%"},attrs:{precision:0},model:{value:t.indicatorParamValues[i.name],callback:function(e){t.$set(t.indicatorParamValues,i.name,e)},expression:"indicatorParamValues[param.name]"}}):"float"===i.type?e("a-input-number",{staticStyle:{width:"100%"},attrs:{precision:4},model:{value:t.indicatorParamValues[i.name],callback:function(e){t.$set(t.indicatorParamValues,i.name,e)},expression:"indicatorParamValues[param.name]"}}):"bool"===i.type?e("a-switch",{model:{value:t.indicatorParamValues[i.name],callback:function(e){t.$set(t.indicatorParamValues,i.name,e)},expression:"indicatorParamValues[param.name]"}}):e("a-input",{model:{value:t.indicatorParamValues[i.name],callback:function(e){t.$set(t.indicatorParamValues,i.name,e)},expression:"indicatorParamValues[param.name]"}})],1)}),0):e("a-empty",{attrs:{description:t.$t("dashboard.indicator.paramsConfig.noParams")}})],1):t._e()]),e("backtest-history-drawer",{attrs:{visible:t.showBacktestHistoryDrawer,userId:t.userId,indicatorId:t.backtestHistoryIndicator?t.backtestHistoryIndicator.id:null,symbol:t.selectedSymbol,market:t.selectedMarket,timeframe:t.selectedTimeframe,isMobile:t.isMobile},on:{cancel:function(e){t.showBacktestHistoryDrawer=!1,t.backtestHistoryIndicator=null},view:t.handleViewBacktestRun}}),e("backtest-run-viewer",{attrs:{visible:t.showBacktestRunViewer,run:t.selectedBacktestRun},on:{cancel:function(e){t.showBacktestRunViewer=!1,t.selectedBacktestRun=null}}}),e("a-modal",{attrs:{title:t.publishIndicator&&t.publishIndicator.publish_to_community?t.$t("dashboard.indicator.publish.editTitle"):t.$t("dashboard.indicator.publish.title"),visible:t.showPublishModal,confirmLoading:t.publishing,width:"500px",okText:t.publishIndicator&&t.publishIndicator.publish_to_community?t.$t("dashboard.indicator.publish.update"):t.$t("dashboard.indicator.publish.confirm"),cancelText:t.$t("common.cancel")},on:{ok:t.handleConfirmPublish,cancel:function(e){t.showPublishModal=!1,t.publishIndicator=null}}},[e("a-form-model",{ref:"publishForm",attrs:{model:t.publishForm,rules:t.publishRules,layout:"vertical"}},[e("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"info","show-icon":"",message:t.$t("dashboard.indicator.publish.hint")}}),e("a-form-model-item",{attrs:{label:t.$t("dashboard.indicator.publish.pricingType"),prop:"pricingType"}},[e("a-radio-group",{model:{value:t.publishPricingType,callback:function(e){t.publishPricingType=e},expression:"publishPricingType"}},[e("a-radio",{attrs:{value:"free"}},[t._v(t._s(t.$t("dashboard.indicator.publish.free")))]),e("a-radio",{attrs:{value:"paid"}},[t._v(t._s(t.$t("dashboard.indicator.publish.paid")))])],1)],1),"paid"===t.publishPricingType?e("a-form-model-item",{attrs:{label:t.$t("dashboard.indicator.publish.price"),prop:"price"}},[e("a-input-number",{staticStyle:{width:"200px"},attrs:{min:1,max:1e4,precision:0},model:{value:t.publishPrice,callback:function(e){t.publishPrice=e},expression:"publishPrice"}}),e("span",{staticStyle:{"margin-left":"8px"}},[t._v(t._s(t.$t("community.credits")))])],1):t._e(),"paid"===t.publishPricingType?e("a-form-model-item",{attrs:{label:t.$t("dashboard.indicator.publish.vipFree")}},[e("a-switch",{model:{value:t.publishVipFree,callback:function(e){t.publishVipFree=e},expression:"publishVipFree"}}),e("div",{staticStyle:{"margin-top":"6px",color:"rgba(0,0,0,0.45)","font-size":"12px"}},[t._v(" "+t._s(t.$t("dashboard.indicator.publish.vipFreeHint"))+" ")])],1):t._e(),e("a-form-model-item",{attrs:{label:t.$t("dashboard.indicator.publish.description"),prop:"description"}},[e("a-textarea",{attrs:{placeholder:t.$t("dashboard.indicator.publish.descriptionPlaceholder"),rows:4,maxLength:500},model:{value:t.publishDescription,callback:function(e){t.publishDescription=e},expression:"publishDescription"}})],1),t.publishIndicator&&t.publishIndicator.publish_to_community?e("div",{staticStyle:{"margin-top":"16px"}},[e("a-button",{attrs:{type:"danger",ghost:"",loading:t.unpublishing},on:{click:t.handleUnpublish}},[e("a-icon",{attrs:{type:"close-circle"}}),t._v(" "+t._s(t.$t("dashboard.indicator.publish.unpublish"))+" ")],1)],1):t._e()],1)],1),e("a-modal",{attrs:{title:t.$t("dashboard.analysis.modal.addStock.title"),visible:t.showAddStockModal,confirmLoading:t.addingStock,width:"600px",okText:t.$t("dashboard.analysis.modal.addStock.confirm"),cancelText:t.$t("dashboard.analysis.modal.addStock.cancel")},on:{ok:t.handleAddStock,cancel:t.handleCloseAddStockModal}},[e("div",{staticClass:"add-stock-modal-content"},[e("a-tabs",{staticClass:"market-tabs",on:{change:t.handleMarketTabChange},model:{value:t.selectedMarketTab,callback:function(e){t.selectedMarketTab=e},expression:"selectedMarketTab"}},t._l(t.marketTypes,function(i){return e("a-tab-pane",{key:i.value,attrs:{tab:t.$t(i.i18nKey||"dashboard.analysis.market.".concat(i.value))}})}),1),e("div",{staticClass:"symbol-search-section"},[e("a-input-search",{attrs:{placeholder:t.$t("dashboard.analysis.modal.addStock.searchOrInputPlaceholder"),loading:t.searchingSymbols,size:"large","allow-clear":""},on:{search:t.handleSearchOrInput,change:t.handleSymbolSearchInput},model:{value:t.symbolSearchKeyword,callback:function(e){t.symbolSearchKeyword=e},expression:"symbolSearchKeyword"}},[e("a-button",{attrs:{slot:"enterButton",type:"primary",icon:"search"},slot:"enterButton"},[t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.search"))+" ")])],1)],1),t.symbolSearchResults.length>0?e("div",{staticClass:"search-results-section"},[e("div",{staticClass:"section-title"},[e("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"search"}}),t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.searchResults"))+" ")],1),e("a-list",{staticClass:"symbol-list",attrs:{"data-source":t.symbolSearchResults,loading:t.searchingSymbols,size:"small"},scopedSlots:t._u([{key:"renderItem",fn:function(i){return e("a-list-item",{staticClass:"symbol-list-item",on:{click:function(e){return t.selectSymbol(i)}}},[e("a-list-item-meta",[e("template",{slot:"title"},[e("div",{staticClass:"symbol-item-content"},[e("span",{staticClass:"symbol-code"},[t._v(t._s(i.symbol))]),e("span",{staticClass:"symbol-name"},[t._v(t._s(i.name))]),i.exchange?e("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"blue"}},[t._v(" "+t._s(i.exchange)+" ")]):t._e()],1)])],2)],1)}}],null,!1,1074844145)})],1):t._e(),e("div",{staticClass:"hot-symbols-section"},[e("div",{staticClass:"section-title"},[e("a-icon",{staticStyle:{color:"#ff4d4f","margin-right":"4px"},attrs:{type:"fire"}}),t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.hotSymbols"))+" ")],1),e("a-spin",{attrs:{spinning:t.loadingHotSymbols}},[t.hotSymbols.length>0?e("a-list",{staticClass:"symbol-list",attrs:{"data-source":t.hotSymbols,size:"small"},scopedSlots:t._u([{key:"renderItem",fn:function(i){return e("a-list-item",{staticClass:"symbol-list-item",on:{click:function(e){return t.selectSymbol(i)}}},[e("a-list-item-meta",[e("template",{slot:"title"},[e("div",{staticClass:"symbol-item-content"},[e("span",{staticClass:"symbol-code"},[t._v(t._s(i.symbol))]),e("span",{staticClass:"symbol-name"},[t._v(t._s(i.name))]),i.exchange?e("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"orange"}},[t._v(" "+t._s(i.exchange)+" ")]):t._e()],1)])],2)],1)}}],null,!1,2177647935)}):e("a-empty",{attrs:{description:t.$t("dashboard.analysis.modal.addStock.noHotSymbols"),image:!1}})],1)],1),t.selectedSymbolForAdd?e("div",{staticClass:"selected-symbol-section"},[e("a-alert",{attrs:{message:t.$t("dashboard.analysis.modal.addStock.selectedSymbol"),type:"info","show-icon":"",closable:""},on:{close:function(e){t.selectedSymbolForAdd=null}}},[e("template",{slot:"description"},[e("div",{staticClass:"selected-symbol-info"},[e("a-tag",{staticStyle:{"margin-right":"8px"},attrs:{color:t.getMarketColor(t.selectedSymbolForAdd.market)}},[t._v(" "+t._s(t.$t("dashboard.analysis.market.".concat(t.selectedSymbolForAdd.market)))+" ")]),e("strong",[t._v(t._s(t.selectedSymbolForAdd.symbol))]),t.selectedSymbolForAdd.name?e("span",{staticStyle:{color:"#999","margin-left":"8px"}},[t._v(t._s(t.selectedSymbolForAdd.name))]):e("span",{staticStyle:{color:"#999","margin-left":"8px","font-style":"italic"}},[t._v(t._s(t.$t("dashboard.analysis.modal.addStock.nameWillBeFetched")))])],1)])],2)],1):t._e()],1)])],1),e("a-tooltip",{attrs:{title:t.$t("quickTrade.openPanel"),placement:"left"}},[!t.showQuickTrade&&t.currentSymbol&&t.isCryptoMarket?e("div",{staticClass:"qt-floating-btn",on:{click:t.openQuickTrade}},[e("a-icon",{attrs:{type:"thunderbolt",theme:"filled"}})],1):t._e()]),e("quick-trade-panel",{attrs:{visible:t.showQuickTrade,symbol:t.qtSymbol,"preset-side":t.qtSide,"preset-price":t.qtPrice,source:"indicator","market-type":"swap"},on:{close:function(e){t.showQuickTrade=!1},"order-success":t.onQuickTradeSuccess,"update:symbol":t.handleQuickTradeSymbolChange}})],1)},r=[],a=(i(62621),i(43898)),o=i(44735),s=i(15863),l=i(81127),c=i(56252),u=(i(6011),i(18787)),d=i(76338),h=(i(74423),i(85471)),p=i(95353),f=i(75769),v=i(35038),g=i(505),m=function(){var t=this,e=t._self._c;return e("div",[e("a-modal",{staticClass:"indicator-editor-modal",style:t.isMobile?{top:0,paddingBottom:0}:{top:"2%"},attrs:{title:t.$t("dashboard.indicator.editor.title"),visible:t.visible,width:t.isMobile?"100%":"95vw",confirmLoading:t.saving,okText:t.$t("dashboard.indicator.editor.save"),cancelText:t.$t("dashboard.indicator.editor.cancel"),maskClosable:!1,centered:!1},on:{ok:t.handleSave,cancel:t.handleCancel,afterClose:t.handleAfterClose}},[e("div",{staticClass:"editor-content"},[e("a-row",{staticClass:"editor-layout",class:{"mobile-layout":t.isMobile},attrs:{gutter:16}},[e("a-col",{staticClass:"code-editor-column",attrs:{span:24,xs:24,sm:24,md:24}},[e("div",{staticClass:"code-section"},[e("div",{staticClass:"section-header"},[e("div",{staticClass:"header-left"},[e("span",{staticClass:"section-title"},[t._v(t._s(t.$t("dashboard.indicator.editor.code")))])]),e("div",{staticClass:"section-actions"},[e("a-button",{staticStyle:{padding:"0 8px",color:"#52c41a","font-weight":"bold"},attrs:{type:"link",size:"small",loading:t.verifying},on:{click:t.handleVerifyCode}},[e("a-icon",{attrs:{type:"check-circle"}}),t._v(" "+t._s(t.$t("dashboard.indicator.editor.verifyCode"))+" ")],1),e("a-button",{staticStyle:{padding:"0"},attrs:{type:"link",size:"small"},on:{click:t.goToDocs}},[e("a-icon",{attrs:{type:"book"}}),t._v(" "+t._s(t.$t("dashboard.indicator.editor.guide"))+" ")],1)],1)]),e("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"info","show-icon":"",message:t.$t("dashboard.indicator.boundary.message"),description:t.$t("dashboard.indicator.boundary.indicatorRule")}}),e("div",{staticClass:"code-mode-split"},[e("a-row",{staticClass:"code-mode-row",attrs:{gutter:16}},[e("a-col",{staticClass:"code-pane",attrs:{xs:24,sm:24,md:18}},[e("div",{ref:"codeEditorContainer",staticClass:"code-editor-container"})]),e("a-col",{staticClass:"ai-pane",attrs:{xs:24,sm:24,md:6}},[e("div",{staticClass:"ai-panel"},[e("div",{staticClass:"ai-panel-title"},[e("a-icon",{attrs:{type:"robot"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.editor.aiGenerate")))])],1),e("a-textarea",{attrs:{placeholder:t.$t("dashboard.indicator.editor.aiPromptPlaceholder"),rows:12,"auto-size":{minRows:12,maxRows:20}},model:{value:t.aiPrompt,callback:function(e){t.aiPrompt=e},expression:"aiPrompt"}}),e("a-button",{staticStyle:{"margin-top":"10px"},attrs:{type:"primary",block:"",loading:t.aiGenerating,size:"large"},on:{click:t.handleAIGenerate}},[t._v(" "+t._s(t.$t("dashboard.indicator.editor.aiGenerateBtn"))+" ")])],1)])],1)],1)],1)])],1)],1),e("div",{staticClass:"editor-footer",attrs:{slot:"footer"},slot:"footer"},[e("a-button",{on:{click:t.handleCancel}},[t._v(" "+t._s(t.$t("dashboard.indicator.editor.cancel"))+" ")]),e("a-button",{attrs:{type:"primary",loading:t.saving},on:{click:t.handleSave}},[t._v(" "+t._s(t.$t("dashboard.indicator.editor.save"))+" ")])],1)])],1)},y=[],b=i(57532),x=i(15237),_=i.n(x),w=(i(74806),i(55218),i(97923),i(50436),i(74053)),C=i.n(w),S=i(75314),k={name:"IndicatorEditor",props:{visible:{type:Boolean,default:!1},indicator:{type:Object,default:null},userId:{type:Number,default:null}},data:function(){return{saving:!1,codeEditor:null,aiPrompt:"",aiGenerating:!1,verifying:!1,isMobile:!1}},computed:{},watch:{visible:function(t){var e=this;t?this.$nextTick(function(){setTimeout(function(){!e.codeEditor&&e.$refs.codeEditorContainer&&e.initCodeEditor(),e.initFormData()},200)}):this.codeEditor&&this.codeEditor.refresh()},indicator:{handler:function(t){var e=this;t&&this.visible&&this.$nextTick(function(){setTimeout(function(){e.initFormData()},100)})},deep:!0}},mounted:function(){var t=this;this.checkMobile(),window.addEventListener("resize",this.checkMobile),this.visible&&this.$nextTick(function(){setTimeout(function(){t.initCodeEditor()},100)})},beforeDestroy:function(){if(window.removeEventListener("resize",this.checkMobile),this.codeEditor)try{if("function"===typeof this.codeEditor.toTextArea)this.codeEditor.toTextArea();else if("function"===typeof this.codeEditor.getWrapperElement){var t=this.codeEditor.getWrapperElement();t&&t.parentNode&&t.parentNode.removeChild(t)}}catch(e){}finally{this.codeEditor=null}},methods:{getDefaultIndicatorCode:function(){return'#Demo Code:\n#my_indicator_name = "My Buy/Sell Indicator"\n#my_indicator_description = "Buy/Sell only; execution is normalized in backend."\n\n#df = df.copy()\n#sma = df["close"].rolling(14).mean()\n#buy = (df["close"] > sma) & (df["close"].shift(1) <= sma.shift(1))\n#sell = (df["close"] < sma) & (df["close"].shift(1) >= sma.shift(1))\n#df["buy"] = buy.fillna(False).astype(bool)\n#df["sell"] = sell.fillna(False).astype(bool)\n\n#buy_marks = [df["low"].iloc[i] * 0.995 if df["buy"].iloc[i] else None for i in range(len(df))]\n#sell_marks = [df["high"].iloc[i] * 1.005 if df["sell"].iloc[i] else None for i in range(len(df))]\n\n#output = {\n# "name": my_indicator_name,\n# "plots": [],\n# "signals": [\n# {"type": "buy", "text": "B", "data": buy_marks, "color": "#00E676"},\n# {"type": "sell", "text": "S", "data": sell_marks, "color": "#FF5252"}\n# ]\n#}\n'},checkMobile:function(){this.isMobile=window.innerWidth<=768},goToDocs:function(){window.open("https://github.com/brokermr810/QuantDinger/blob/main/docs/STRATEGY_DEV_GUIDE.md","_blank")},handleVerifyCode:function(){var t=this,e=this.codeEditor?this.codeEditor.getValue():"";e&&e.trim()?(this.verifying=!0,(0,f.Ay)({url:"/api/indicator/verifyCode",method:"post",data:{code:e}}).then(function(e){if(1===e.code){var i=e.data||{};t.$message.success("".concat(t.$t("dashboard.indicator.editor.verifyCodeSuccess")," (").concat(i.plots_count||0," plots, ").concat(i.signals_count||0," signals)"))}else{var n=e.data||{};t.$error({title:t.$t("dashboard.indicator.editor.verifyCodeFailed"),width:600,content:function(t){return t("div",[t("p",{style:{fontWeight:"bold",color:"#ff4d4f"}},e.msg),n.details?t("pre",{style:{background:"#f5f5f5",padding:"8px",overflow:"auto",maxHeight:"300px",marginTop:"8px",fontSize:"12px",fontFamily:"monospace"}},n.details):null])}})}}).catch(function(e){t.$message.error("Request Failed: "+(e.message||"Unknown Error"))}).finally(function(){t.verifying=!1})):this.$message.warning(this.$t("dashboard.indicator.editor.verifyCodeEmpty"))},cleanMarkdownCodeBlocks:function(t){if(!t||"string"!==typeof t)return t;var e=t.trim(),i=/```/.test(e);return i?(e=e.replace(/^```[\w]*\s*\n?/i,""),e.startsWith("```")&&(e=e.replace(/^```\s*\n?/g,"")),e.endsWith("```")&&(e=e.replace(/\n?```\s*$/g,"")),e=e.replace(/^\s*```[\w]*\s*$/gm,""),e=e.replace(/^\s*```\s*$/gm,""),e=e.replace(/\n{3,}/g,"\n\n"),e=e.trim(),e):e},initFormData:function(){var t=this;if(this.visible){var e=this.indicator&&this.indicator.code||"";e&&String(e).trim()||(e=this.getDefaultIndicatorCode()),this.$nextTick(function(){setTimeout(function(){t.aiPrompt="",t.codeEditor&&(t.codeEditor.setValue(e),t.codeEditor.refresh())},50)})}},initCodeEditor:function(){var t=this;if(this.$refs.codeEditorContainer){if(this.codeEditor){try{if("function"===typeof this.codeEditor.toTextArea)this.codeEditor.toTextArea();else if("function"===typeof this.codeEditor.getWrapperElement){var e=this.codeEditor.getWrapperElement();e&&e.parentNode&&e.parentNode.removeChild(e)}}catch(i){}this.codeEditor=null}try{this.$refs.codeEditorContainer.innerHTML="",this.codeEditor=_()(this.$refs.codeEditorContainer,{value:function(){var e=t.indicator&&t.indicator.code||"";return e&&String(e).trim()?e:t.getDefaultIndicatorCode()}(),mode:"python",theme:"eclipse",lineNumbers:!0,lineWrapping:!0,indentUnit:4,indentWithTabs:!1,smartIndent:!0,matchBrackets:!0,autoCloseBrackets:!0,styleActiveLine:!0,foldGutter:!1,gutters:["CodeMirror-linenumbers"],tabSize:4,viewportMargin:1/0}),this.codeEditor.on("change",function(t){t.getValue()}),this.$nextTick(function(){t.codeEditor&&t.codeEditor.refresh()})}catch(n){}}},handleSave:function(){var t=this.codeEditor?this.codeEditor.getValue():"",e=t||"";e.trim()?(this.saving=!0,this.$emit("save",{id:this.indicator?this.indicator.id:0,code:e,userid:this.userId})):this.$message.warning(this.$t("dashboard.indicator.editor.codeRequired"))},handleCancel:function(){this.codeEditor&&this.codeEditor.setValue(""),this.$emit("cancel")},handleAfterClose:function(){var t=this;this.codeEditor&&this.$nextTick(function(){t.codeEditor&&t.codeEditor.refresh()}),this.aiPrompt=""},handleAIGenerate:function(){var t=this;return(0,c.A)((0,l.A)().m(function e(){var i,n,r,a,o,s,c,u,d,h,p,f,v,g,m,y,x,_,w,k,A,T,M,I,E;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.aiPrompt&&t.aiPrompt.trim()){e.n=1;break}return t.$message.warning(t.$t("dashboard.indicator.editor.aiPromptRequired")),e.a(2);case 1:return t.aiGenerating=!0,i="",t.codeEditor&&(i=t.codeEditor.getValue()||""),t.codeEditor&&(t.codeEditor.setValue("# AI generating...\n"),t.codeEditor.refresh()),n="",e.p=2,r="/api/indicator/aiGenerate",a=C().get(S.Xh),o={prompt:t.aiPrompt.trim()},i.trim()&&(o.existingCode=i.trim()),e.n=3,fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:a?"Bearer ".concat(a):"","Access-Token":a||"",Token:a||""},body:JSON.stringify(o),credentials:"include"});case 3:if(s=e.v,s.ok){e.n=5;break}return e.n=4,s.text().catch(function(){return""});case 4:throw c=e.v,new Error(c||"HTTP error! status: ".concat(s.status));case 5:if(s.body&&"function"===typeof s.body.getReader){e.n=6;break}throw new Error("AI 服务未返回可读取的流(response.body 不存在)");case 6:u=s.body.getReader(),d=new TextDecoder,h="";case 7:return e.n=8,u.read();case 8:if(p=e.v,f=p.done,v=p.value,!f){e.n=9;break}return e.a(3,21);case 9:h+=d.decode(v,{stream:!0}),g=h.split("\n\n"),h=g.pop()||"",m=(0,b.A)(g),e.p=10,m.s();case 11:if((y=m.n()).done){e.n=17;break}if(x=y.value,x.trim()&&x.startsWith("data: ")){e.n=12;break}return e.a(3,16);case 12:if(_=x.substring(6),"[DONE]"!==_){e.n=13;break}return e.a(3,17);case 13:if(e.p=13,w=JSON.parse(_),!w.error){e.n=14;break}throw new Error(w.error);case 14:w.content&&(n+=w.content,k=t.cleanMarkdownCodeBlocks(n),t.codeEditor&&(t.codeEditor.setValue(k),A=t.codeEditor.lineCount(),t.codeEditor.setCursor({line:A-1,ch:0}),t.codeEditor.refresh())),e.n=16;break;case 15:e.p=15,e.v;case 16:e.n=11;break;case 17:e.n=19;break;case 18:e.p=18,I=e.v,m.e(I);case 19:return e.p=19,m.f(),e.f(19);case 20:e.n=7;break;case 21:t.codeEditor&&n?(T=t.cleanMarkdownCodeBlocks(n),t.codeEditor.setValue(T),t.codeEditor.refresh(),t.$message.success(t.$t("dashboard.indicator.editor.aiGenerateSuccess"))):n||t.$message.warning("未生成任何代码,请尝试更详细的提示词"),e.n=23;break;case 22:e.p=22,E=e.v,t.$message.error(E.message||t.$t("dashboard.indicator.editor.aiGenerateError")),n&&t.codeEditor&&(M=t.cleanMarkdownCodeBlocks(n),t.codeEditor.setValue(M));case 23:return e.p=23,t.aiGenerating=!1,e.f(23);case 24:return e.a(2)}},e,null,[[13,15],[10,18,19,20],[2,22,23,24]])}))()}}},A=k,T=i(845),M=(0,T.A)(A,m,y,!1,null,"4fea1865",null),I=M.exports,E=function(){var t=this,e=t._self._c;return e("div",{staticClass:"chart-left",class:{"theme-dark":"dark"===t.chartTheme}},[e("div",{staticClass:"chart-wrapper"},[e("div",{staticClass:"drawing-toolbar"},[t._l(t.drawingTools,function(i){return e("a-tooltip",{key:i.name,attrs:{title:i.title,placement:"right"}},[e("div",{staticClass:"drawing-tool-btn",class:{active:t.activeDrawingTool===i.name},on:{click:function(e){return t.selectDrawingTool(i.name)}}},[e("a-icon",{attrs:{type:i.icon}})],1)])}),e("a-divider",{attrs:{type:"vertical"}}),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.drawing.clearAll"),placement:"right"}},[e("div",{staticClass:"drawing-tool-btn",on:{click:t.clearAllDrawings}},[e("a-icon",{attrs:{type:"delete"}})],1)])],2),e("div",{staticClass:"chart-content-area"},[e("div",{staticClass:"indicator-toolbar"},t._l(t.indicatorButtons,function(i){return e("div",{key:i.id,staticClass:"indicator-btn",class:{active:t.isIndicatorActive(i.id)},attrs:{title:i.name},on:{click:function(e){return t.toggleIndicator(i)}}},[t._v(" "+t._s(i.shortName)+" ")])}),0),e("div",{staticClass:"kline-chart-container",attrs:{id:"kline-chart-container"}})]),t.loading?e("div",{staticClass:"chart-overlay"},[e("a-spin",{attrs:{size:"large"}},[e("a-icon",{staticStyle:{"font-size":"24px",color:"#13c2c2"},attrs:{slot:"indicator",type:"loading",spin:""},slot:"indicator"})],1)],1):t._e(),t.error?e("div",{staticClass:"chart-overlay"},[e("div",{staticClass:"error-box"},[e("a-icon",{staticStyle:{"font-size":"24px",color:"#ef5350","margin-bottom":"10px"},attrs:{type:"warning"}}),e("span",[t._v(t._s(t.error))]),e("a-button",{staticStyle:{"margin-top":"12px"},attrs:{type:"primary",size:"small",ghost:""},on:{click:t.handleRetry}},[t._v(" "+t._s(t.$t("dashboard.indicator.retry"))+" ")])],1)]):t._e(),t.pyodideLoadFailed?e("div",{staticClass:"chart-overlay pyodide-warning"},[e("div",{staticClass:"warning-box"},[e("a-icon",{staticStyle:{"font-size":"32px",color:"#faad14","margin-bottom":"12px"},attrs:{type:"warning"}}),e("div",{staticClass:"warning-title"},[t._v(t._s(t.$t("dashboard.indicator.warning.pyodideLoadFailed")))]),e("div",{staticClass:"warning-desc"},[t._v(t._s(t.$t("dashboard.indicator.warning.pyodideLoadFailedDesc")))])],1)]):t._e(),t.symbol||t.loading||t.error||t.pyodideLoadFailed?t._e():e("div",{staticClass:"chart-overlay initial-hint"},[e("div",{staticClass:"hint-box"},[e("a-icon",{staticStyle:{"font-size":"48px",color:"#1890ff","margin-bottom":"16px"},attrs:{type:"line-chart"}}),e("div",{staticClass:"hint-title"},[t._v(t._s(t.$t("dashboard.indicator.hint.selectSymbol")))]),e("div",{staticClass:"hint-desc"},[t._v(t._s(t.$t("dashboard.indicator.hint.selectSymbolDesc")))])],1)])])])},D=[];function P(t){if(null!=t){var e=t["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],i=0;if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length))return{next:function(){return t&&i>=t.length&&(t=void 0),{value:t&&t[i++],done:!t}}}}throw new TypeError((0,o.A)(t)+" is not iterable")}var L=i(26297),R=i(2403),F=function(t,e){return F=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i])},F(t,e)};function B(t,e){if("function"!==typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function i(){this.constructor=t}F(t,e),t.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}var N,O,z,W,V,$,H,K,Y,X=function(){return X=Object.assign||function(t){for(var e,i=1,n=arguments.length;i0&&r[r.length-1])&&(6===s[0]||2===s[0])){a=0;continue}if(3===s[0]&&(!r||s[1]>r[0]&&s[1]=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function q(t,e){var i="function"===typeof Symbol&&t[Symbol.iterator];if(!i)return t;var n,r,a=i.call(t),o=[];try{while((void 0===e||e-- >0)&&!(n=a.next()).done)o.push(n.value)}catch(s){r={error:s}}finally{try{n&&!n.done&&(i=a["return"])&&i.call(a)}finally{if(r)throw r.error}}return o}function Z(t,e,i){if(i||2===arguments.length)for(var n,r=0,a=e.length;r1e9)return"".concat(+(e/1e9).toFixed(3),"B");if(e>1e6)return"".concat(+(e/1e6).toFixed(3),"M");if(e>1e3)return"".concat(+(e/1e3).toFixed(3),"K")}return"".concat(t)}function zt(t,e){var i="".concat(t);if(0===e.length)return i;if(i.includes(".")){var n=i.split(".");return"".concat(n[0].replace(/(\d)(?=(\d{3})+$)/g,function(t){return"".concat(t).concat(e)}),".").concat(n[1])}return i.replace(/(\d)(?=(\d{3})+$)/g,function(t){return"".concat(t).concat(e)})}function Wt(t,e){var i="".concat(t),n=new RegExp("\\.0{"+e+",}[1-9][0-9]*$");if(n.test(i)){var r=i.split("."),a=r[r.length-1],o=a.match(/0*/);if(Mt(o)){var s=o[0].length;return r[r.length-1]=a.replace(/0*/,"0{".concat(s,"}")),r.join(".")}}return i}function Vt(t){var e,i,n;return null!==(n=null===(i=null===(e=t.ownerDocument)||void 0===e?void 0:e.defaultView)||void 0===i?void 0:i.devicePixelRatio)&&void 0!==n?n:1}function $t(t,e,i){return"".concat(null!==e&&void 0!==e?e:"normal"," ").concat(null!==t&&void 0!==t?t:12,"px ").concat(null!==i&&void 0!==i?i:"Helvetica Neue")}function Ht(t,e,i,n){if(!Mt(Dt)){var r=document.createElement("canvas"),a=Vt(r);Dt=r.getContext("2d"),Dt.scale(a,a)}return Dt.font=$t(e,i,n),Math.round(Dt.measureText(t).width)}(function(t){t["OnDataReady"]="onDataReady",t["OnZoom"]="onZoom",t["OnScroll"]="onScroll",t["OnVisibleRangeChange"]="onVisibleRangeChange",t["OnTooltipIconClick"]="onTooltipIconClick",t["OnCrosshairChange"]="onCrosshairChange",t["OnCandleBarClick"]="onCandleBarClick",t["OnPaneDrag"]="onPaneDrag"})(Pt||(Pt={}));var Kt,Yt,Xt=function(){function t(){this._callbacks=[]}return t.prototype.subscribe=function(t){var e,i=null!==(e=this._callbacks.indexOf(t))&&void 0!==e?e:-1;i<0&&this._callbacks.push(t)},t.prototype.unsubscribe=function(t){var e;if(kt(t)){var i=null!==(e=this._callbacks.indexOf(t))&&void 0!==e?e:-1;i>-1&&this._callbacks.splice(i,1)}else this._callbacks=[]},t.prototype.execute=function(t){this._callbacks.forEach(function(e){e(t)})},t.prototype.isEmpty=function(){return 0===this._callbacks.length},t}();function Ut(t,e,i,n,r){var a,o=e.result,s=e.figures,l=e.styles,c=Ft(l,"circles",n.circles),u=c.length,d=Ft(l,"bars",n.bars),h=d.length,p=Ft(l,"lines",n.lines),f=p.length,v=0,g=0,m=0,y=0;s.forEach(function(s){var l;switch(s.type){case"circle":y=v;var b=c[v%u];a=X(X({},b),{color:b.noChangeColor}),v++;break;case"bar":y=g;var x=d[g%h];a=X(X({},x),{color:x.noChangeColor}),g++;break;case"line":y=m,a=p[m%f],m++;break}if(Mt(a)){var _={prev:{kLineData:t[i-1],indicatorData:o[i-1]},current:{kLineData:t[i],indicatorData:o[i]},next:{kLineData:t[i+1],indicatorData:o[i+1]}},w=null===(l=s.styles)||void 0===l?void 0:l.call(s,_,e,n);r(s,X(X({},a),w),y)}})}(function(t){t["Init"]="init",t["Forward"]="forward",t["Backward"]="backward"})(Kt||(Kt={})),function(t){t["Normal"]="normal",t["Price"]="price",t["Volume"]="volume"}(Yt||(Yt={}));var Gt,jt=function(){function t(t){this.result=[],this._precisionFlag=!1;var e=t.name,i=t.shortName,n=t.series,r=t.calcParams,a=t.figures,o=t.precision,s=t.shouldOhlc,l=t.shouldFormatBigNumber,c=t.visible,u=t.zLevel,d=t.minValue,h=t.maxValue,p=t.styles,f=t.extendData,v=t.regenerateFigures,g=t.createTooltipDataSource,m=t.draw;this.name=e,this.shortName=null!==i&&void 0!==i?i:e,this.series=null!==n&&void 0!==n?n:Yt.Normal,this.precision=null!==o&&void 0!==o?o:4,this.calcParams=null!==r&&void 0!==r?r:[],this.figures=null!==a&&void 0!==a?a:[],this.shouldOhlc=null!==s&&void 0!==s&&s,this.shouldFormatBigNumber=null!==l&&void 0!==l&&l,this.visible=null===c||void 0===c||c,this.zLevel=null!==u&&void 0!==u?u:0,this.minValue=null!==d&&void 0!==d?d:null,this.maxValue=null!==h&&void 0!==h?h:null,this.styles=Ct(null!==p&&void 0!==p?p:{}),this.extendData=f,this.regenerateFigures=null!==v&&void 0!==v?v:null,this.createTooltipDataSource=null!==g&&void 0!==g?g:null,this.draw=null!==m&&void 0!==m?m:null}return t.prototype.setShortName=function(t){return this.shortName!==t&&(this.shortName=t,!0)},t.prototype.setSeries=function(t){return this.series!==t&&(this.series=t,!0)},t.prototype.setPrecision=function(t,e){var i=null!==e&&void 0!==e&&e,n=Math.floor(t);return!(!(n!==this.precision&&t>=0)||i&&(!i||this._precisionFlag))&&(this.precision=n,i||(this._precisionFlag=!0),!0)},t.prototype.setCalcParams=function(t){var e,i;return this.calcParams=t,this.figures=null!==(i=null===(e=this.regenerateFigures)||void 0===e?void 0:e.call(this,t))&&void 0!==i?i:this.figures,!0},t.prototype.setShouldOhlc=function(t){return this.shouldOhlc!==t&&(this.shouldOhlc=t,!0)},t.prototype.setShouldFormatBigNumber=function(t){return this.shouldFormatBigNumber!==t&&(this.shouldFormatBigNumber=t,!0)},t.prototype.setVisible=function(t){return this.visible!==t&&(this.visible=t,!0)},t.prototype.setZLevel=function(t){return this.zLevel!==t&&(this.zLevel=t,!0)},t.prototype.setStyles=function(t){return wt(this.styles,t),!0},t.prototype.setExtendData=function(t){return this.extendData!==t&&(this.extendData=t,!0)},t.prototype.setFigures=function(t){return this.figures!==t&&(this.figures=t,!0)},t.prototype.setMinValue=function(t){return this.minValue!==t&&(this.minValue=t,!0)},t.prototype.setMaxValue=function(t){return this.maxValue!==t&&(this.maxValue=t,!0)},t.prototype.setRegenerateFigures=function(t){return this.regenerateFigures!==t&&(this.regenerateFigures=t,!0)},t.prototype.setCreateTooltipDataSource=function(t){return this.createTooltipDataSource!==t&&(this.createTooltipDataSource=t,!0)},t.prototype.setDraw=function(t){return this.draw!==t&&(this.draw=t,!0)},t.prototype.calcIndicator=function(t){return U(this,void 0,void 0,function(){var e;return G(this,function(i){switch(i.label){case 0:return i.trys.push([0,2,,3]),[4,this.calc(t,this)];case 1:return e=i.sent(),this.result=e,[2,!0];case 2:return i.sent(),[2,!1];case 3:return[2]}})})},t.extend=function(e){var i=function(t){function i(){return t.call(this,e)||this}return B(i,t),i.prototype.calc=function(t,i){return e.calc(t,i)},i}(t);return i},t}();function qt(){return["mouseClickEvent","mouseDoubleClickEvent","mouseRightClickEvent","tapEvent","doubleTapEvent","mouseDownEvent","touchStartEvent","mouseMoveEvent","touchMoveEvent"]}(function(t){t["Normal"]="normal",t["WeakMagnet"]="weak_magnet",t["StrongMagnet"]="strong_magnet"})(Gt||(Gt={}));var Zt,Jt=1,Qt=-1,te="overlay_",ee="overlay_figure_",ie=function(){function t(t){this.currentStep=Jt,this.points=[],this._prevPressedPoint=null,this._prevPressedPoints=[];var e=t.mode,i=t.modeSensitivity,n=t.extendData,r=t.styles,a=t.name,o=t.totalStep,s=t.lock,l=t.visible,c=t.zLevel,u=t.needDefaultPointFigure,d=t.needDefaultXAxisFigure,h=t.needDefaultYAxisFigure,p=t.createPointFigures,f=t.createXAxisFigures,v=t.createYAxisFigures,g=t.performEventPressedMove,m=t.performEventMoveForDrawing,y=t.onDrawStart,b=t.onDrawing,x=t.onDrawEnd,_=t.onClick,w=t.onDoubleClick,C=t.onRightClick,S=t.onPressedMoveStart,k=t.onPressedMoving,A=t.onPressedMoveEnd,T=t.onMouseEnter,M=t.onMouseLeave,I=t.onRemoved,E=t.onSelected,D=t.onDeselected;this.name=a,this.totalStep=!Tt(o)||o<2?1:o,this.lock=null!==s&&void 0!==s&&s,this.visible=null===l||void 0===l||l,this.zLevel=null!==c&&void 0!==c?c:0,this.needDefaultPointFigure=null!==u&&void 0!==u&&u,this.needDefaultXAxisFigure=null!==d&&void 0!==d&&d,this.needDefaultYAxisFigure=null!==h&&void 0!==h&&h,this.mode=null!==e&&void 0!==e?e:Gt.Normal,this.modeSensitivity=null!==i&&void 0!==i?i:8,this.extendData=n,this.styles=Ct(null!==r&&void 0!==r?r:{}),this.createPointFigures=null!==p&&void 0!==p?p:null,this.createXAxisFigures=null!==f&&void 0!==f?f:null,this.createYAxisFigures=null!==v&&void 0!==v?v:null,this.performEventPressedMove=null!==g&&void 0!==g?g:null,this.performEventMoveForDrawing=null!==m&&void 0!==m?m:null,this.onDrawStart=null!==y&&void 0!==y?y:null,this.onDrawing=null!==b&&void 0!==b?b:null,this.onDrawEnd=null!==x&&void 0!==x?x:null,this.onClick=null!==_&&void 0!==_?_:null,this.onDoubleClick=null!==w&&void 0!==w?w:null,this.onRightClick=null!==C&&void 0!==C?C:null,this.onPressedMoveStart=null!==S&&void 0!==S?S:null,this.onPressedMoving=null!==k&&void 0!==k?k:null,this.onPressedMoveEnd=null!==A&&void 0!==A?A:null,this.onMouseEnter=null!==T&&void 0!==T?T:null,this.onMouseLeave=null!==M&&void 0!==M?M:null,this.onRemoved=null!==I&&void 0!==I?I:null,this.onSelected=null!==E&&void 0!==E?E:null,this.onDeselected=null!==D&&void 0!==D?D:null}return t.prototype.setId=function(t){return!Et(this.id)&&(this.id=t,!0)},t.prototype.setGroupId=function(t){return!Et(this.groupId)&&(this.groupId=t,!0)},t.prototype.setPaneId=function(t){this.paneId=t},t.prototype.setExtendData=function(t){return t!==this.extendData&&(this.extendData=t,!0)},t.prototype.setStyles=function(t){return wt(this.styles,t),!0},t.prototype.setPoints=function(t){if(t.length>0){var e=void 0;if(this.points=Z([],q(t),!1),t.length>=this.totalStep-1?(this.currentStep=Qt,e=this.totalStep-1):(this.currentStep=t.length+1,e=t.length),null!==this.performEventMoveForDrawing)for(var i=0;is?n=a:r=a,o<=2)break}return n}function fe(t){var e=Math.floor(ye(t)),i=be(e),n=t/i,r=0;return r=n<1.5?1:n<2.5?2:n<3.5?3:n<4.5?4:n<5.5?5:n<6.5?6:8,t=r*i,e>=-20?+t.toFixed(e<0?-e:0):t}function ve(t,e){null==e&&(e=10),e=Math.min(Math.max(0,e),20);var i=(+t).toFixed(e);return+i}function ge(t){var e=t.toString(),i=e.indexOf("e");if(i>0){var n=+e.slice(i+1);return n<0?-n:0}var r=e.indexOf(".");return r<0?0:e.length-1-r}function me(t,e,i){var n=[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER];return t.forEach(function(t){var r,a;n[0]=Math.max(null!==(r=t[e])&&void 0!==r?r:t,n[0]),n[1]=Math.min(null!==(a=t[i])&&void 0!==a?a:t,n[1])}),n}function ye(t){return Math.log(t)/Math.log(10)}function be(t){return Math.pow(10,t)}function xe(){return{from:0,to:0,realFrom:0,realTo:0}}var _e={MIN:1,MAX:50},we=8,Ce=80,Se=.88,ke=10,Ae=function(){function t(t){this._dateTimeFormat=this._buildDateTimeFormat(),this._zoomEnabled=!0,this._scrollEnabled=!0,this._totalBarSpace=0,this._barSpace=we,this._offsetRightDistance=Ce,this._startLastBarRightSideDiffBarCount=0,this._scrollLimitRole=0,this._minVisibleBarCount={left:2,right:2},this._maxOffsetDistance={left:50,right:50},this._visibleRange=xe(),this._chartStore=t,this._gapBarSpace=this._calcGapBarSpace(),this._lastBarRightSideDiffBarCount=this._offsetRightDistance/this._barSpace}return t.prototype._calcGapBarSpace=function(){var t;return this._barSpace>3?t=Math.floor(this._barSpace*Se):(t=Math.floor(this._barSpace),t===this._barSpace&&t--),t%2===0&&t--,t=Math.max(1,t),t},t.prototype.adjustVisibleRange=function(){var t,e,i,n,r=this._chartStore.getDataList(),a=r.length,o=this._totalBarSpace/this._barSpace;1===this._scrollLimitRole?(i=(this._totalBarSpace-this._maxOffsetDistance.right)/this._barSpace,n=(this._totalBarSpace-this._maxOffsetDistance.left)/this._barSpace):(i=this._minVisibleBarCount.left,n=this._minVisibleBarCount.right),i=Math.max(0,i),n=Math.max(0,n);var s=o-Math.min(i,a);this._lastBarRightSideDiffBarCount>s&&(this._lastBarRightSideDiffBarCount=s);var l=-a+Math.min(n,a);this._lastBarRightSideDiffBarCounta&&(c=a);var d=Math.round(c-o)-1;d<0&&(d=0);var h=this._lastBarRightSideDiffBarCount>0?Math.round(a+this._lastBarRightSideDiffBarCount-o)-1:d;if(this._visibleRange={from:d,to:c,realFrom:h,realTo:u},this._chartStore.getActionStore().execute(Pt.OnVisibleRangeChange,this._visibleRange),this._chartStore.adjustVisibleDataList(),0===d){var p=r[0];this._chartStore.executeLoadMoreCallback(null!==(t=null===p||void 0===p?void 0:p.timestamp)&&void 0!==t?t:null),this._chartStore.executeLoadDataCallback({type:Kt.Forward,data:null!==p&&void 0!==p?p:null})}c===a&&this._chartStore.executeLoadDataCallback({type:Kt.Backward,data:null!==(e=r[a-1])&&void 0!==e?e:null})},t.prototype.getDateTimeFormat=function(){return this._dateTimeFormat},t.prototype._buildDateTimeFormat=function(t){var e={hour12:!1,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"};Et(t)&&(e.timeZone=t);var i=null;try{i=new Intl.DateTimeFormat("en",e)}catch(n){bt("","","Timezone is error!!!")}return i},t.prototype.setTimezone=function(t){var e=this._buildDateTimeFormat(t);null!==e&&(this._dateTimeFormat=e)},t.prototype.getTimezone=function(){return this._dateTimeFormat.resolvedOptions().timeZone},t.prototype.getBarSpace=function(){return{bar:this._barSpace,halfBar:this._barSpace/2,gapBar:this._gapBarSpace,halfGapBar:Math.floor(this._gapBarSpace/2)}},t.prototype.setBarSpace=function(t,e){t<_e.MIN||t>_e.MAX||this._barSpace===t||(this._barSpace=t,this._gapBarSpace=this._calcGapBarSpace(),null===e||void 0===e||e(),this.adjustVisibleRange(),this._chartStore.getTooltipStore().recalculateCrosshair(!0),this._chartStore.getChart().adjustPaneViewport(!1,!0,!0,!0))},t.prototype.setTotalBarSpace=function(t){return this._totalBarSpace!==t&&(this._totalBarSpace=t,this.adjustVisibleRange(),this._chartStore.getTooltipStore().recalculateCrosshair(!0)),this},t.prototype.setOffsetRightDistance=function(t,e){return this._offsetRightDistance=1===this._scrollLimitRole?Math.min(this._maxOffsetDistance.right,t):t,this._lastBarRightSideDiffBarCount=this._offsetRightDistance/this._barSpace,null!==e&&void 0!==e&&e&&(this.adjustVisibleRange(),this._chartStore.getTooltipStore().recalculateCrosshair(!0),this._chartStore.getChart().adjustPaneViewport(!1,!0,!0,!0)),this},t.prototype.resetOffsetRightDistance=function(){this.setOffsetRightDistance(this._offsetRightDistance)},t.prototype.getInitialOffsetRightDistance=function(){return this._offsetRightDistance},t.prototype.getOffsetRightDistance=function(){return Math.max(0,this._lastBarRightSideDiffBarCount*this._barSpace)},t.prototype.getLastBarRightSideDiffBarCount=function(){return this._lastBarRightSideDiffBarCount},t.prototype.setLastBarRightSideDiffBarCount=function(t){return this._lastBarRightSideDiffBarCount=t,this},t.prototype.setMaxOffsetLeftDistance=function(t){return this._scrollLimitRole=1,this._maxOffsetDistance.left=t,this},t.prototype.setMaxOffsetRightDistance=function(t){return this._scrollLimitRole=1,this._maxOffsetDistance.right=t,this},t.prototype.setLeftMinVisibleBarCount=function(t){return this._scrollLimitRole=0,this._minVisibleBarCount.left=t,this},t.prototype.setRightMinVisibleBarCount=function(t){return this._scrollLimitRole=0,this._minVisibleBarCount.right=t,this},t.prototype.getVisibleRange=function(){return this._visibleRange},t.prototype.startScroll=function(){this._startLastBarRightSideDiffBarCount=this._lastBarRightSideDiffBarCount},t.prototype.scroll=function(t){if(this._scrollEnabled){var e=t/this._barSpace,i=this._lastBarRightSideDiffBarCount*this._barSpace;this._lastBarRightSideDiffBarCount=this._startLastBarRightSideDiffBarCount-e,this.adjustVisibleRange(),this._chartStore.getTooltipStore().recalculateCrosshair(!0),this._chartStore.getChart().adjustPaneViewport(!1,!0,!0,!0);var n=Math.round(i-this._lastBarRightSideDiffBarCount*this._barSpace);0!==n&&this._chartStore.getActionStore().execute(Pt.OnScroll,{distance:n})}},t.prototype.getDataByDataIndex=function(t){var e;return null!==(e=this._chartStore.getDataList()[t])&&void 0!==e?e:null},t.prototype.coordinateToFloatIndex=function(t){var e=this._chartStore.getDataList().length,i=(this._totalBarSpace-t)/this._barSpace,n=e+this._lastBarRightSideDiffBarCount-i;return Math.round(1e6*n)/1e6},t.prototype.dataIndexToTimestamp=function(t){var e,i=this.getDataByDataIndex(t);return null!==(e=null===i||void 0===i?void 0:i.timestamp)&&void 0!==e?e:null},t.prototype.timestampToDataIndex=function(t){var e=this._chartStore.getDataList();return 0===e.length?0:pe(e,"timestamp",t)},t.prototype.dataIndexToCoordinate=function(t){var e=this._chartStore.getDataList().length,i=e+this._lastBarRightSideDiffBarCount-t;return Math.floor(this._totalBarSpace-(i-.5)*this._barSpace)},t.prototype.coordinateToDataIndex=function(t){return Math.ceil(this.coordinateToFloatIndex(t))-1},t.prototype.zoom=function(t,e){var i,n=this;if(this._zoomEnabled){var r=null!==e&&void 0!==e?e:null;if(!Tt(null===r||void 0===r?void 0:r.x)){var a=this._chartStore.getTooltipStore().getCrosshair();r={x:null!==(i=null===a||void 0===a?void 0:a.x)&&void 0!==i?i:this._totalBarSpace/2}}var o=r.x,s=this.coordinateToFloatIndex(o),l=this._barSpace,c=this._barSpace+t*(this._barSpace/ke);this.setBarSpace(c,function(){n._lastBarRightSideDiffBarCount+=s-n.coordinateToFloatIndex(o)});var u=this._barSpace/l;1!==u&&this._chartStore.getActionStore().execute(Pt.OnZoom,{scale:u})}},t.prototype.setZoomEnabled=function(t){return this._zoomEnabled=t,this},t.prototype.getZoomEnabled=function(){return this._zoomEnabled},t.prototype.setScrollEnabled=function(t){return this._scrollEnabled=t,this},t.prototype.getScrollEnabled=function(){return this._scrollEnabled},t.prototype.clear=function(){this._visibleRange=xe()},t}(),Te={name:"AVP",shortName:"AVP",series:Yt.Price,precision:2,figures:[{key:"avp",title:"AVP: ",type:"line"}],calc:function(t){var e=0,i=0;return t.map(function(t){var n,r,a={},o=null!==(n=null===t||void 0===t?void 0:t.turnover)&&void 0!==n?n:0,s=null!==(r=null===t||void 0===t?void 0:t.volume)&&void 0!==r?r:0;return e+=o,i+=s,0!==i&&(a.avp=e/i),a})}},Me={name:"AO",shortName:"AO",calcParams:[5,34],figures:[{key:"ao",title:"AO: ",type:"bar",baseValue:0,styles:function(t,e,i){var n,r,a,o,s,l=t.prev,c=t.current,u=null!==(r=null===(n=l.indicatorData)||void 0===n?void 0:n.ao)&&void 0!==r?r:Number.MIN_SAFE_INTEGER,d=null!==(o=null===(a=c.indicatorData)||void 0===a?void 0:a.ao)&&void 0!==o?o:Number.MIN_SAFE_INTEGER;s=d>u?Ft(e.styles,"bars[0].upColor",i.bars[0].upColor):Ft(e.styles,"bars[0].downColor",i.bars[0].downColor);var h=d>u?O.Stroke:O.Fill;return{color:s,style:h,borderColor:s}}}],calc:function(t,e){var i=e.calcParams,n=Math.max(i[0],i[1]),r=0,a=0,o=0,s=0;return t.map(function(e,l){var c={},u=(e.low+e.high)/2;if(r+=u,a+=u,l>=i[0]-1){o=r/i[0];var d=t[l-(i[0]-1)];r-=(d.low+d.high)/2}if(l>=i[1]-1){s=a/i[1];d=t[l-(i[1]-1)];a-=(d.low+d.high)/2}return l>=n-1&&(c.ao=o-s),c})}},Ie={name:"BIAS",shortName:"BIAS",calcParams:[6,12,24],figures:[{key:"bias1",title:"BIAS6: ",type:"line"},{key:"bias2",title:"BIAS12: ",type:"line"},{key:"bias3",title:"BIAS24: ",type:"line"}],regenerateFigures:function(t){return t.map(function(t,e){return{key:"bias".concat(e+1),title:"BIAS".concat(t,": "),type:"line"}})},calc:function(t,e){var i=e.calcParams,n=e.figures,r=[];return t.map(function(e,a){var o={},s=e.close;return i.forEach(function(e,l){var c;if(r[l]=(null!==(c=r[l])&&void 0!==c?c:0)+s,a>=e-1){var u=r[l]/i[l];o[n[l].key]=(s-u)/u*100,r[l]-=t[a-(e-1)].close}}),o})}};function Ee(t,e){var i=t.length,n=0;return t.forEach(function(t){var i=t.close-e;n+=i*i}),n=Math.abs(n),Math.sqrt(n/i)}var De={name:"BOLL",shortName:"BOLL",series:Yt.Price,calcParams:[20,2],precision:2,shouldOhlc:!0,figures:[{key:"up",title:"UP: ",type:"line"},{key:"mid",title:"MID: ",type:"line"},{key:"dn",title:"DN: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=i[0]-1,r=0;return t.map(function(e,a){var o=e.close,s={};if(r+=o,a>=n){s.mid=r/i[0];var l=Ee(t.slice(a-n,a+1),s.mid);s.up=s.mid+i[1]*l,s.dn=s.mid-i[1]*l,r-=t[a-n].close}return s})}},Pe={name:"BRAR",shortName:"BRAR",calcParams:[26],figures:[{key:"br",title:"BR: ",type:"line"},{key:"ar",title:"AR: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=0,o=0;return t.map(function(e,s){var l,c,u={},d=e.high,h=e.low,p=e.open,f=(null!==(l=t[s-1])&&void 0!==l?l:e).close;if(a+=d-p,o+=p-h,n+=d-f,r+=f-h,s>=i[0]-1){u.ar=0!==o?a/o*100:0,u.br=0!==r?n/r*100:0;var v=t[s-(i[0]-1)],g=v.high,m=v.low,y=v.open,b=(null!==(c=t[s-i[0]])&&void 0!==c?c:t[s-(i[0]-1)]).close;n-=g-b,r-=b-m,a-=g-y,o-=y-m}return u})}},Le={name:"BBI",shortName:"BBI",series:Yt.Price,precision:2,calcParams:[3,6,12,24],shouldOhlc:!0,figures:[{key:"bbi",title:"BBI: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=Math.max.apply(Math,Z([],q(i),!1)),r=[],a=[];return t.map(function(e,o){var s={},l=e.close;if(i.forEach(function(e,i){var n;r[i]=(null!==(n=r[i])&&void 0!==n?n:0)+l,o>=e-1&&(a[i]=r[i]/e,r[i]-=t[o-(e-1)].close)}),o>=n-1){var c=0;a.forEach(function(t){c+=t}),s.bbi=c/4}return s})}},Re={name:"CCI",shortName:"CCI",calcParams:[20],figures:[{key:"cci",title:"CCI: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=i[0]-1,r=0,a=[];return t.map(function(e,o){var s={},l=(e.high+e.low+e.close)/3;if(r+=l,a.push(l),o>=n){var c=r/i[0],u=a.slice(o-n,o+1),d=0;u.forEach(function(t){d+=Math.abs(t-c)});var h=d/i[0];s.cci=0!==h?(l-c)/h/.015:0;var p=(t[o-n].high+t[o-n].low+t[o-n].close)/3;r-=p}return s})}},Fe={name:"CR",shortName:"CR",calcParams:[26,10,20,40,60],figures:[{key:"cr",title:"CR: ",type:"line"},{key:"ma1",title:"MA1: ",type:"line"},{key:"ma2",title:"MA2: ",type:"line"},{key:"ma3",title:"MA3: ",type:"line"},{key:"ma4",title:"MA4: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=Math.ceil(i[1]/2.5+1),r=Math.ceil(i[2]/2.5+1),a=Math.ceil(i[3]/2.5+1),o=Math.ceil(i[4]/2.5+1),s=0,l=[],c=0,u=[],d=0,h=[],p=0,f=[],v=[];return t.forEach(function(e,g){var m,y,b,x,_,w={},C=null!==(m=t[g-1])&&void 0!==m?m:e,S=(C.high+C.close+C.low+C.open)/4,k=Math.max(0,e.high-S),A=Math.max(0,S-e.low);g>=i[0]-1&&(w.cr=0!==A?k/A*100:0,s+=w.cr,c+=w.cr,d+=w.cr,p+=w.cr,g>=i[0]+i[1]-2&&(l.push(s/i[1]),g>=i[0]+i[1]+n-3&&(w.ma1=l[l.length-1-n]),s-=null!==(y=v[g-(i[1]-1)].cr)&&void 0!==y?y:0),g>=i[0]+i[2]-2&&(u.push(c/i[2]),g>=i[0]+i[2]+r-3&&(w.ma2=u[u.length-1-r]),c-=null!==(b=v[g-(i[2]-1)].cr)&&void 0!==b?b:0),g>=i[0]+i[3]-2&&(h.push(d/i[3]),g>=i[0]+i[3]+a-3&&(w.ma3=h[h.length-1-a]),d-=null!==(x=v[g-(i[3]-1)].cr)&&void 0!==x?x:0),g>=i[0]+i[4]-2&&(f.push(p/i[4]),g>=i[0]+i[4]+o-3&&(w.ma4=f[f.length-1-o]),p-=null!==(_=v[g-(i[4]-1)].cr)&&void 0!==_?_:0)),v.push(w)}),v}},Be={name:"DMA",shortName:"DMA",calcParams:[10,50,10],figures:[{key:"dma",title:"DMA: ",type:"line"},{key:"ama",title:"AMA: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=Math.max(i[0],i[1]),r=0,a=0,o=0,s=[];return t.forEach(function(e,l){var c,u={},d=e.close;r+=d,a+=d;var h=0,p=0;if(l>=i[0]-1&&(h=r/i[0],r-=t[l-(i[0]-1)].close),l>=i[1]-1&&(p=a/i[1],a-=t[l-(i[1]-1)].close),l>=n-1){var f=h-p;u.dma=f,o+=f,l>=n+i[2]-2&&(u.ama=o/i[2],o-=null!==(c=s[l-(i[2]-1)].dma)&&void 0!==c?c:0)}s.push(u)}),s}},Ne={name:"DMI",shortName:"DMI",calcParams:[14,6],figures:[{key:"pdi",title:"PDI: ",type:"line"},{key:"mdi",title:"MDI: ",type:"line"},{key:"adx",title:"ADX: ",type:"line"},{key:"adxr",title:"ADXR: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=0,o=0,s=0,l=0,c=0,u=0,d=[];return t.forEach(function(e,h){var p,f,v={},g=null!==(p=t[h-1])&&void 0!==p?p:e,m=g.close,y=e.high,b=e.low,x=y-b,_=Math.abs(y-m),w=Math.abs(m-b),C=y-g.high,S=g.low-b,k=Math.max(Math.max(x,_),w),A=C>0&&C>S?C:0,T=S>0&&S>C?S:0;if(n+=k,r+=A,a+=T,h>=i[0]-1){h>i[0]-1?(o=o-o/i[0]+k,s=s-s/i[0]+A,l=l-l/i[0]+T):(o=n,s=r,l=a);var M=0,I=0;0!==o&&(M=100*s/o,I=100*l/o),v.pdi=M,v.mdi=I;var E=0;I+M!==0&&(E=Math.abs(I-M)/(I+M)*100),c+=E,h>=2*i[0]-2&&(u=h>2*i[0]-2?(u*(i[0]-1)+E)/i[0]:c/i[0],v.adx=u,h>=2*i[0]+i[1]-3&&(v.adxr=((null!==(f=d[h-(i[1]-1)].adx)&&void 0!==f?f:0)+u)/2))}d.push(v)}),d}},Oe={name:"EMV",shortName:"EMV",calcParams:[14,9],figures:[{key:"emv",title:"EMV: ",type:"line"},{key:"maEmv",title:"MAEMV: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=[];return t.map(function(e,a){var o,s={};if(a>0){var l=t[a-1],c=e.high,u=e.low,d=null!==(o=e.volume)&&void 0!==o?o:0,h=(c+u)/2-(l.high+l.low)/2;if(0===d||c-u===0)s.emv=0;else{var p=d/1e8/(c-u);s.emv=h/p}n+=s.emv,r.push(s.emv),a>=i[0]&&(s.maEmv=n/i[0],n-=r[a-i[0]])}return s})}},ze={name:"EMA",shortName:"EMA",series:Yt.Price,calcParams:[6,12,20],precision:2,shouldOhlc:!0,figures:[{key:"ema1",title:"EMA6: ",type:"line"},{key:"ema2",title:"EMA12: ",type:"line"},{key:"ema3",title:"EMA20: ",type:"line"}],regenerateFigures:function(t){return t.map(function(t,e){return{key:"ema".concat(e+1),title:"EMA".concat(t,": "),type:"line"}})},calc:function(t,e){var i=e.calcParams,n=e.figures,r=0,a=[];return t.map(function(t,e){var o={},s=t.close;return r+=s,i.forEach(function(t,i){e>=t-1&&(a[i]=e>t-1?(2*s+(t-1)*a[i])/(t+1):r/t,o[n[i].key]=a[i])}),o})}},We={name:"MTM",shortName:"MTM",calcParams:[12,6],figures:[{key:"mtm",title:"MTM: ",type:"line"},{key:"maMtm",title:"MAMTM: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=[];return t.forEach(function(e,a){var o,s={};if(a>=i[0]){var l=e.close,c=t[a-i[0]].close;s.mtm=l-c,n+=s.mtm,a>=i[0]+i[1]-1&&(s.maMtm=n/i[1],n-=null!==(o=r[a-(i[1]-1)].mtm)&&void 0!==o?o:0)}r.push(s)}),r}},Ve={name:"MA",shortName:"MA",series:Yt.Price,calcParams:[5,10,30,60],precision:2,shouldOhlc:!0,figures:[{key:"ma5",title:"MA5: ",type:"line"},{key:"ma10",title:"MA10: ",type:"line"},{key:"ma30",title:"MA30: ",type:"line"},{key:"ma60",title:"MA60: ",type:"line"}],regenerateFigures:function(t){return t.map(function(t,e){return{key:"ma".concat(e+1),title:"MA".concat(t,": "),type:"line"}})},calc:function(t,e){var i=e.calcParams,n=e.figures,r=[];return t.map(function(e,a){var o={},s=e.close;return i.forEach(function(e,i){var l;r[i]=(null!==(l=r[i])&&void 0!==l?l:0)+s,a>=e-1&&(o[n[i].key]=r[i]/e,r[i]-=t[a-(e-1)].close)}),o})}},$e={name:"MACD",shortName:"MACD",calcParams:[12,26,9],figures:[{key:"dif",title:"DIF: ",type:"line"},{key:"dea",title:"DEA: ",type:"line"},{key:"macd",title:"MACD: ",type:"bar",baseValue:0,styles:function(t,e,i){var n,r,a,o,s,l=t.prev,c=t.current,u=null!==(r=null===(n=l.indicatorData)||void 0===n?void 0:n.macd)&&void 0!==r?r:Number.MIN_SAFE_INTEGER,d=null!==(o=null===(a=c.indicatorData)||void 0===a?void 0:a.macd)&&void 0!==o?o:Number.MIN_SAFE_INTEGER;s=d>0?Ft(e.styles,"bars[0].upColor",i.bars[0].upColor):d<0?Ft(e.styles,"bars[0].downColor",i.bars[0].downColor):Ft(e.styles,"bars[0].noChangeColor",i.bars[0].noChangeColor);var h=u=r[0]-1&&(i=e>r[0]-1?(2*d+(r[0]-1)*i)/(r[0]+1):a/r[0]),e>=r[1]-1&&(n=e>r[1]-1?(2*d+(r[1]-1)*n)/(r[1]+1):a/r[1]),e>=c-1&&(o=i-n,u.dif=o,s+=o,e>=c+r[2]-2&&(l=e>c+r[2]-2?(2*o+l*(r[2]-1))/(r[2]+1):s/r[2],u.macd=2*(o-l),u.dea=l)),u})}},He={name:"OBV",shortName:"OBV",calcParams:[30],figures:[{key:"obv",title:"OBV: ",type:"line"},{key:"maObv",title:"MAOBV: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=[];return t.forEach(function(e,o){var s,l,c,u,d=null!==(s=t[o-1])&&void 0!==s?s:e;e.closed.close&&(r+=null!==(c=e.volume)&&void 0!==c?c:0);var h={obv:r};n+=r,o>=i[0]-1&&(h.maObv=n/i[0],n-=null!==(u=a[o-(i[0]-1)].obv)&&void 0!==u?u:0),a.push(h)}),a}},Ke={name:"PVT",shortName:"PVT",figures:[{key:"pvt",title:"PVT: ",type:"line"}],calc:function(t){var e=0;return t.map(function(i,n){var r,a,o={},s=i.close,l=null!==(r=i.volume)&&void 0!==r?r:1,c=(null!==(a=t[n-1])&&void 0!==a?a:i).close,u=0,d=c*l;return 0!==d&&(u=(s-c)/d),e+=u,o.pvt=e,o})}},Ye={name:"PSY",shortName:"PSY",calcParams:[12,6],figures:[{key:"psy",title:"PSY: ",type:"line"},{key:"maPsy",title:"MAPSY: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=[],o=[];return t.forEach(function(e,s){var l,c,u={},d=(null!==(l=t[s-1])&&void 0!==l?l:e).close,h=e.close-d>0?1:0;a.push(h),n+=h,s>=i[0]-1&&(u.psy=n/i[0]*100,r+=u.psy,s>=i[0]+i[1]-2&&(u.maPsy=r/i[1],r-=null!==(c=o[s-(i[1]-1)].psy)&&void 0!==c?c:0),n-=a[s-(i[0]-1)]),o.push(u)}),o}},Xe={name:"ROC",shortName:"ROC",calcParams:[12,6],figures:[{key:"roc",title:"ROC: ",type:"line"},{key:"maRoc",title:"MAROC: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=[],r=0;return t.forEach(function(e,a){var o,s,l={};if(a>=i[0]-1){var c=e.close,u=(null!==(o=t[a-i[0]])&&void 0!==o?o:t[a-(i[0]-1)]).close;l.roc=0!==u?(c-u)/u*100:0,r+=l.roc,a>=i[0]-1+i[1]-1&&(l.maRoc=r/i[1],r-=null!==(s=n[a-(i[1]-1)].roc)&&void 0!==s?s:0)}n.push(l)}),n}},Ue={name:"RSI",shortName:"RSI",calcParams:[6,12,24],figures:[{key:"rsi1",title:"RSI1: ",type:"line"},{key:"rsi2",title:"RSI2: ",type:"line"},{key:"rsi3",title:"RSI3: ",type:"line"}],regenerateFigures:function(t){return t.map(function(t,e){var i=e+1;return{key:"rsi".concat(i),title:"RSI".concat(i,": "),type:"line"}})},calc:function(t,e){var i=e.calcParams,n=e.figures,r=[],a=[];return t.map(function(e,o){var s,l={},c=(null!==(s=t[o-1])&&void 0!==s?s:e).close,u=e.close-c;return i.forEach(function(e,i){var s,c,d;if(u>0?r[i]=(null!==(s=r[i])&&void 0!==s?s:0)+u:a[i]=(null!==(c=a[i])&&void 0!==c?c:0)+Math.abs(u),o>=e-1){0!==a[i]?l[n[i].key]=100-100/(1+r[i]/a[i]):l[n[i].key]=0;var h=t[o-(e-1)],p=null!==(d=t[o-e])&&void 0!==d?d:h,f=h.close-p.close;f>0?r[i]-=f:a[i]-=Math.abs(f)}}),l})}},Ge={name:"SMA",shortName:"SMA",series:Yt.Price,calcParams:[12,2],precision:2,figures:[{key:"sma",title:"SMA: ",type:"line"}],shouldOhlc:!0,calc:function(t,e){var i=e.calcParams,n=0,r=0;return t.map(function(t,e){var a={},o=t.close;return n+=o,e>=i[0]-1&&(r=e>i[0]-1?(o*i[1]+r*(i[0]-i[1]+1))/(i[0]+1):n/i[0],a.sma=r),a})}},je={name:"KDJ",shortName:"KDJ",calcParams:[9,3,3],figures:[{key:"k",title:"K: ",type:"line"},{key:"d",title:"D: ",type:"line"},{key:"j",title:"J: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=[];return t.forEach(function(e,r){var a,o,s,l,c={},u=e.close;if(r>=i[0]-1){var d=me(t.slice(r-(i[0]-1),r+1),"high","low"),h=d[0],p=d[1],f=h-p,v=(u-p)/(0===f?1:f)*100;c.k=((i[1]-1)*(null!==(o=null===(a=n[r-1])||void 0===a?void 0:a.k)&&void 0!==o?o:50)+v)/i[1],c.d=((i[2]-1)*(null!==(l=null===(s=n[r-1])||void 0===s?void 0:s.d)&&void 0!==l?l:50)+c.k)/i[2],c.j=3*c.k-2*c.d}n.push(c)}),n}},qe={name:"SAR",shortName:"SAR",series:Yt.Price,calcParams:[2,2,20],precision:2,shouldOhlc:!0,figures:[{key:"sar",title:"SAR: ",type:"circle",styles:function(t,e,i){var n,r,a=t.current,o=null!==(r=null===(n=a.indicatorData)||void 0===n?void 0:n.sar)&&void 0!==r?r:Number.MIN_SAFE_INTEGER,s=a.kLineData,l=((null===s||void 0===s?void 0:s.high)+(null===s||void 0===s?void 0:s.low))/2,c=oe.low?(c=s,o=n,s=-100,l=!l):c>p&&(c=p)}else{(-100===s||s>h)&&(s=h,o=Math.min(o+r,a)),c=u+o*(s-u);var f=Math.max(t[Math.max(1,i)-1].high,d);c=a[0]-1&&(i=e>a[0]-1?(2*p+(a[0]-1)*i)/(a[0]+1):o/a[0],s+=i,e>=2*a[0]-2&&(n=e>2*a[0]-2?(2*i+(a[0]-1)*n)/(a[0]+1):s/a[0],l+=n,e>=3*a[0]-3))){var f=void 0,v=0;e>3*a[0]-3?(f=(2*n+(a[0]-1)*r)/(a[0]+1),v=(f-r)/r*100):f=l/a[0],r=f,h.trix=v,c+=v,e>=3*a[0]+a[1]-4&&(h.maTrix=c/a[1],c-=null!==(d=u[e-(a[1]-1)].trix)&&void 0!==d?d:0)}u.push(h)}),u}};function Je(){return{key:"volume",title:"VOLUME: ",type:"bar",baseValue:0,styles:function(t,e,i){var n=t.current.kLineData,r=Ft(e.styles,"bars[0].noChangeColor",i.bars[0].noChangeColor);return Mt(n)&&(n.close>n.open?r=Ft(e.styles,"bars[0].upColor",i.bars[0].upColor):n.close=e-1&&(l[n[i].key]=r[i]/e,r[i]-=null!==(c=t[a-(e-1)].volume)&&void 0!==c?c:0)}),l})}},ti={name:"VR",shortName:"VR",calcParams:[26,6],figures:[{key:"vr",title:"VR: ",type:"line"},{key:"maVr",title:"MAVR: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=0,o=0,s=[];return t.forEach(function(e,l){var c,u,d,h,p,f={},v=e.close,g=(null!==(c=t[l-1])&&void 0!==c?c:e).close,m=null!==(u=e.volume)&&void 0!==u?u:0;if(v>g?n+=m:v=i[0]-1){var y=a/2;f.vr=r+y===0?0:(n+y)/(r+y)*100,o+=f.vr,l>=i[0]+i[1]-2&&(f.maVr=o/i[1],o-=null!==(d=s[l-(i[1]-1)].vr)&&void 0!==d?d:0);var b=t[l-(i[0]-1)],x=null!==(h=t[l-i[0]])&&void 0!==h?h:b,_=b.close,w=null!==(p=b.volume)&&void 0!==p?p:0;_>x.close?n-=w:_=s){var l=me(t.slice(r-s,r+1),"high","low"),c=l[0],u=l[1],d=c-u;a[n[i].key]=0===d?0:(o-c)/d*100}}),a})}},ii={},ni=[Te,Me,Ie,De,Pe,Le,Re,Fe,Be,Ne,Oe,ze,We,Ve,$e,He,Ke,Ye,Xe,Ue,Ge,je,qe,Ze,Qe,ti,ei];function ri(t){ii[t.name]=jt.extend(t)}function ai(t){var e;return null!==(e=ii[t])&&void 0!==e?e:null}ni.forEach(function(t){ii[t.name]=jt.extend(t)});var oi=function(){function t(t){this._instances=new Map,this._chartStore=t}return t.prototype._overrideInstance=function(t,e){var i=e.shortName,n=e.series,r=e.calcParams,a=e.precision,o=e.figures,s=e.minValue,l=e.maxValue,c=e.shouldOhlc,u=e.shouldFormatBigNumber,d=e.visible,h=e.zLevel,p=e.styles,f=e.extendData,v=e.regenerateFigures,g=e.createTooltipDataSource,m=e.draw,y=e.calc,b=!1;Et(i)&&t.setShortName(i)&&(b=!0),Mt(n)&&t.setSeries(n)&&(b=!0);var x=!1;St(r)&&t.setCalcParams(r)&&(b=!0,x=!0),St(o)&&t.setFigures(o)&&(b=!0,x=!0),void 0!==s&&t.setMinValue(s)&&(b=!0),void 0!==l&&t.setMinValue(l)&&(b=!0),Tt(a)&&t.setPrecision(a)&&(b=!0),It(c)&&t.setShouldOhlc(c)&&(b=!0),It(u)&&t.setShouldFormatBigNumber(u)&&(b=!0),It(d)&&t.setVisible(d)&&(b=!0);var _=!1;return Tt(h)&&t.setZLevel(h)&&(b=!0,_=!0),Mt(p)&&t.setStyles(p)&&(b=!0),void 0!==f&&t.setExtendData(f)&&(b=!0,x=!0),void 0!==v&&t.setRegenerateFigures(v)&&(b=!0),void 0!==g&&t.setCreateTooltipDataSource(g)&&(b=!0),void 0!==m&&t.setDraw(m)&&(b=!0),kt(y)&&(t.calc=y,x=!0),[b,x,_]},t.prototype._sort=function(t){var e;Et(t)?null===(e=this._instances.get(t))||void 0===e||e.sort(function(t,e){return t.zLevel-e.zLevel}):this._instances.forEach(function(t){t.sort(function(t,e){return t.zLevel-e.zLevel})})},t.prototype.addInstance=function(t,e,i){return U(this,void 0,void 0,function(){var n,r,a,o,s;return G(this,function(l){switch(l.label){case 0:return n=t.name,r=this._instances.get(e),Mt(r)?(a=r.find(function(t){return t.name===n}),Mt(a)?[4,Promise.reject(new Error("Duplicate indicators."))]:[3,2]):[3,2];case 1:return[2,l.sent()];case 2:return Mt(r)||(r=[]),o=ai(n),s=new o,this.synchronizeSeriesPrecision(s),this._overrideInstance(s,t),i||(r=[]),r.push(s),this._instances.set(e,r),this._sort(e),[4,s.calcIndicator(this._chartStore.getDataList())];case 3:return[2,l.sent()]}})})},t.prototype.getInstances=function(t){var e;return null!==(e=this._instances.get(t))&&void 0!==e?e:[]},t.prototype.removeInstance=function(t,e){var i,n=!1,r=this._instances.get(t);if(Mt(r)){if(Et(e)){var a=r.findIndex(function(t){return t.name===e});a>-1&&(r.splice(a,1),n=!0)}else this._instances.set(t,[]),n=!0;0===(null===(i=this._instances.get(t))||void 0===i?void 0:i.length)&&this._instances.delete(t)}return n},t.prototype.hasInstances=function(t){return this._instances.has(t)},t.prototype.calcInstance=function(t,e){return U(this,void 0,void 0,function(){var i,n,r,a,o=this;return G(this,function(s){switch(s.label){case 0:return i=[],Et(t)?Et(e)?(n=this._instances.get(e),Mt(n)&&(r=n.find(function(e){return e.name===t}),Mt(r)&&i.push(r.calcIndicator(this._chartStore.getDataList())))):this._instances.forEach(function(e){var n=e.find(function(e){return e.name===t});Mt(n)&&i.push(n.calcIndicator(o._chartStore.getDataList()))}):this._instances.forEach(function(t){t.forEach(function(t){i.push(t.calcIndicator(o._chartStore.getDataList()))})}),[4,Promise.all(i)];case 1:return a=s.sent(),[2,a.includes(!0)]}})})},t.prototype.getInstanceByPaneId=function(t,e){var i,n,r=function(t){var e=new Map;return t.forEach(function(t){e.set(t.name,t)}),e};if(Et(t)){var a=null!==(i=this._instances.get(t))&&void 0!==i?i:[];return Et(e)?null!==(n=null===a||void 0===a?void 0:a.find(function(t){return t.name===e}))&&void 0!==n?n:null:r(a)}var o=new Map;return this._instances.forEach(function(t,e){o.set(e,r(t))}),o},t.prototype.synchronizeSeriesPrecision=function(t){var e=this._chartStore.getPrecision(),i=e.price,n=e.volume,r=function(t){switch(t.series){case Yt.Price:t.setPrecision(i,!0);break;case Yt.Volume:t.setPrecision(n,!0);break}};Mt(t)?r(t):this._instances.forEach(function(t){t.forEach(function(t){r(t)})})},t.prototype.override=function(t,e){return U(this,void 0,void 0,function(){var i,n,r,a,o,s,l,c=this;return G(this,function(u){switch(u.label){case 0:return i=t.name,n=new Map,null!==e?(r=this._instances.get(e),Mt(r)&&n.set(e,r)):n=this._instances,a=!1,o=[],s=!1,n.forEach(function(e){var n=e.find(function(t){return t.name===i});if(Mt(n)){var r=c._overrideInstance(n,t);r[2]&&(s=!0),r[1]?o.push(n.calcIndicator(c._chartStore.getDataList())):r[0]&&(a=!0)}}),s&&this._sort(),[4,Promise.all(o)];case 1:return l=u.sent(),[2,[a,l.includes(!0)]]}})})},t}(),si=function(){function t(t){this._crosshair={},this._activeIcon=null,this._chartStore=t}return t.prototype.setCrosshair=function(t,e){var i,n,r=null!==e&&void 0!==e?e:{},a=r.notInvalidate,o=r.notExecuteAction,s=this._chartStore.getDataList(),l=null!==t&&void 0!==t?t:{};Tt(l.x)?(i=this._chartStore.getTimeScaleStore().coordinateToDataIndex(l.x),n=i<0?0:i>s.length-1?s.length-1:i):(i=s.length-1,n=i);var c=s[n],u=this._chartStore.getTimeScaleStore().dataIndexToCoordinate(i),d={x:this._crosshair.x,y:this._crosshair.y,paneId:this._crosshair.paneId};this._crosshair=X(X({},l),{realX:u,kLineData:c,realDataIndex:i,dataIndex:n}),d.x===l.x&&d.y===l.y&&d.paneId===l.paneId||(null===c||null!==o&&void 0!==o&&o||this._chartStore.getChart().crosshairChange(this._crosshair),null!==a&&void 0!==a&&a||this._chartStore.getChart().updatePane(1))},t.prototype.recalculateCrosshair=function(t){this.setCrosshair(this._crosshair,{notInvalidate:t})},t.prototype.getCrosshair=function(){return this._crosshair},t.prototype.setActiveIcon=function(t){this._activeIcon=null!==t&&void 0!==t?t:null},t.prototype.getActiveIcon=function(){return this._activeIcon},t.prototype.clear=function(){this.setCrosshair({},{notInvalidate:!0}),this.setActiveIcon()},t}(),li={name:"fibonacciLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e,i=t.coordinates,n=t.bounding,r=t.overlay,a=t.precision,o=t.thousandsSeparator,s=t.decimalFoldThreshold,l=t.yAxis,c=r.points;if(i.length>0){var u=null===(e=null===l||void 0===l?void 0:l.isInCandle())||void 0===e||e?a.price:a.excludePriceVolumeMax,d=[],h=[],p=0,f=n.width;if(i.length>1&&Tt(c[0].value)&&Tt(c[1].value)){var v=[1,.786,.618,.5,.382,.236,0],g=i[0].y-i[1].y,m=c[0].value-c[1].value;v.forEach(function(t){var e,n=i[1].y+g*t,r=Wt(zt(((null!==(e=c[1].value)&&void 0!==e?e:0)+m*t).toFixed(u),o),s);d.push({coordinates:[{x:p,y:n},{x:f,y:n}]}),h.push({x:p,y:n,text:"".concat(r," (").concat((100*t).toFixed(1),"%)"),baseline:"bottom"})})}return[{type:"line",attrs:d},{type:"text",isCheckEvent:!1,attrs:h}]}return[]}},ci={name:"horizontalRayLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates,i=t.bounding,n={x:0,y:e[0].y};return Mt(e[1])&&e[0].x-1)for(var r=n;r>-1;r--)if(this._children[r].dispatchEvent(t,e,i))return!0;return this.onEvent(t,e,i)},t.prototype.addChild=function(t){return this._children.push(t),this},t.prototype.clear=function(){this._children=[]},t}(),pi=2,fi=function(t){function e(e){var i=t.call(this)||this;return i.attrs=e.attrs,i.styles=e.styles,i}return B(e,t),e.prototype.checkEventOn=function(t){return this.checkEventOnImp(t,this.attrs,this.styles)},e.prototype.setAttrs=function(t){return this.attrs=t,this},e.prototype.setStyles=function(t){return this.styles=t,this},e.prototype.draw=function(t){this.drawImp(t,this.attrs,this.styles)},e.extend=function(t){var i=function(e){function i(){return null!==e&&e.apply(this,arguments)||this}return B(i,e),i.prototype.checkEventOnImp=function(e,i,n){return t.checkEventOn(e,i,n)},i.prototype.drawImp=function(e,i,n){t.draw(e,i,n)},i}(e);return i},e}(hi);function vi(t,e){var i=[];i=i.concat(e);for(var n=0;n1)for(var a=1;a0&&i<1?i:0:i?.5:0;if(r>0&&n>2){for(var a=e[0].x,o=e[0].y,s=1;s1&&(2!==i.length||i[0].x!==i[1].x&&i[0].y!==i[1].y?(t.save(),c%2===1&&t.translate(.5,.5),t.beginPath(),t.moveTo(i[0].x,i[0].y),bi(t,i,s),t.stroke(),t.closePath(),t.restore()):(t.beginPath(),i[0].x===i[1].x?(t.moveTo(i[0].x+f,i[0].y),t.lineTo(i[1].x+f,i[1].y)):(t.moveTo(i[0].x,i[0].y+f),t.lineTo(i[1].x,i[1].y+f)),t.stroke(),t.closePath()))})}var _i={name:"line",checkEventOn:vi,draw:function(t,e,i){xi(t,e,i)}};function wi(t,e,i){var n=null!==i&&void 0!==i?i:0,r=[];if(t.length>1)if(t[0].x===t[1].x){var a=0,o=e.height;if(r.push({coordinates:[{x:t[0].x,y:a},{x:t[0].x,y:o}]}),t.length>2){r.push({coordinates:[{x:t[2].x,y:a},{x:t[2].x,y:o}]});for(var s=t[0].x-t[2].x,l=0;l2){var v=t[2].y-p*t[2].x;r.push({coordinates:[{x:u,y:u*p+v},{x:d,y:d*p+v}]});for(s=f-v,l=0;l1){var i=void 0;return i=t[0].x===t[1].x&&t[0].y!==t[1].y?t[0].yt[1].x?{x:0,y:mi(t[0],t[1],{x:0,y:t[0].y})}:{x:e.width,y:mi(t[0],t[1],{x:e.width,y:t[0].y})},{coordinates:[t[0],i]}}return[]}var Ti={name:"rayLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates,i=t.bounding;return[{type:"line",attrs:Ai(e,i)}]}},Mi={name:"segment",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates;return 2===e.length?[{type:"line",attrs:{coordinates:e}}]:[]}},Ii={name:"straightLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates,i=t.bounding;return 2===e.length?e[0].x===e[1].x?[{type:"line",attrs:{coordinates:[{x:e[0].x,y:0},{x:e[0].x,y:i.height}]}}]:[{type:"line",attrs:{coordinates:[{x:0,y:mi(e[0],e[1],{x:0,y:e[0].y})},{x:i.width,y:mi(e[0],e[1],{x:i.width,y:e[0].y})}]}}]:[]}},Ei={name:"verticalRayLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates,i=t.bounding;if(2===e.length){var n={x:e[0].x,y:0};return e[0].y0&&l.set(e[0],n)};try{for(var u=j(this._instances),d=u.next();!d.done;d=u.next()){var h=d.value;c(h)}}catch(f){e={error:f}}finally{try{d&&!d.done&&(i=u.return)&&i.call(u)}finally{if(e)throw e.error}}this._instances=l}else this._instances.forEach(function(t,e){a.push(e),t.forEach(function(t){var e;null===(e=t.onRemoved)||void 0===e||e.call(t,{overlay:t})})}),this._instances.clear();if(a.length>0){var p=this._chartStore.getChart();a.forEach(function(t){p.updatePane(1,t)}),p.updatePane(1,Vi.X_AXIS)}},t.prototype.setPressedInstanceInfo=function(t){this._pressedInstanceInfo=t},t.prototype.getPressedInstanceInfo=function(){return this._pressedInstanceInfo},t.prototype.updatePointPosition=function(t,e){if(t>0){var i=this._chartStore.getDataList();this._instances.forEach(function(n){n.forEach(function(n){var r=n.points;r.forEach(function(n){if(!Mt(n.timestamp)&&Mt(n.dataIndex)){e===Kt.Forward&&(n.dataIndex=n.dataIndex+t);var r=i[n.dataIndex];n.timestamp=null===r||void 0===r?void 0:r.timestamp}})})})}},t.prototype.setHoverInstanceInfo=function(t,e){var i,n,r=this._hoverInstanceInfo,a=r.instance,o=r.figureType,s=r.figureKey,l=r.figureIndex;if(((null===a||void 0===a?void 0:a.id)!==(null===(i=t.instance)||void 0===i?void 0:i.id)||o!==t.figureType||l!==t.figureIndex)&&(this._hoverInstanceInfo=t,(null===a||void 0===a?void 0:a.id)!==(null===(n=t.instance)||void 0===n?void 0:n.id))){var c=!1,u=!1;null!==a&&(u=!0,kt(a.onMouseLeave)&&(a.onMouseLeave(X({overlay:a,figureKey:s,figureIndex:l},e)),c=!0)),null!==t.instance&&(u=!0,kt(t.instance.onMouseEnter)&&(t.instance.onMouseEnter(X({overlay:t.instance,figureKey:t.figureKey,figureIndex:t.figureIndex},e)),c=!0)),u&&this._sort(),c||this._chartStore.getChart().updatePane(1)}},t.prototype.getHoverInstanceInfo=function(){return this._hoverInstanceInfo},t.prototype.setClickInstanceInfo=function(t,e){var i,n,r,a,o,s,l,c,u,d=this._clickInstanceInfo,h=d.paneId,p=d.instance,f=d.figureType,v=d.figureKey,g=d.figureIndex;if(null!==(n=null===(i=t.instance)||void 0===i?void 0:i.isDrawing())&&void 0!==n&&n||null===(a=null===(r=t.instance)||void 0===r?void 0:r.onClick)||void 0===a||a.call(r,X({overlay:t.instance,figureKey:t.figureKey,figureIndex:t.figureIndex},e)),((null===p||void 0===p?void 0:p.id)!==(null===(o=t.instance)||void 0===o?void 0:o.id)||f!==t.figureType||g!==t.figureIndex)&&(this._clickInstanceInfo=t,(null===p||void 0===p?void 0:p.id)!==(null===(s=t.instance)||void 0===s?void 0:s.id))){null===(l=null===p||void 0===p?void 0:p.onDeselected)||void 0===l||l.call(p,X({overlay:p,figureKey:v,figureIndex:g},e)),null===(u=null===(c=t.instance)||void 0===c?void 0:c.onSelected)||void 0===u||u.call(c,X({overlay:t.instance,figureKey:t.figureKey,figureIndex:t.figureIndex},e));var m=this._chartStore.getChart();m.updatePane(1,t.paneId),h!==t.paneId&&m.updatePane(1,h),m.updatePane(1,Vi.X_AXIS)}},t.prototype.getClickInstanceInfo=function(){return this._clickInstanceInfo},t.prototype.isEmpty=function(){return 0===this._instances.size&&null===this._progressInstanceInfo},t.prototype.isDrawing=function(){var t,e;return null!==this._progressInstanceInfo&&null!==(e=null===(t=this._progressInstanceInfo)||void 0===t?void 0:t.instance.isDrawing())&&void 0!==e&&e},t}(),Hi=function(){function t(){this._actions=new Map}return t.prototype.execute=function(t,e){var i;null===(i=this._actions.get(t))||void 0===i||i.execute(e)},t.prototype.subscribe=function(t,e){var i;this._actions.has(t)||this._actions.set(t,new Xt),null===(i=this._actions.get(t))||void 0===i||i.subscribe(e)},t.prototype.unsubscribe=function(t,e){var i=this._actions.get(t);Mt(i)&&(i.unsubscribe(e),i.isEmpty()&&this._actions.delete(t))},t.prototype.has=function(t){var e=this._actions.get(t);return Mt(e)&&!e.isEmpty()},t}(),Ki={grid:{horizontal:{color:"#EDEDED"},vertical:{color:"#EDEDED"}},candle:{priceMark:{high:{color:"#76808F"},low:{color:"#76808F"}},tooltip:{rect:{color:"#FEFEFE",borderColor:"#F2F3F5"},text:{color:"#76808F"}}},indicator:{tooltip:{text:{color:"#76808F"}}},xAxis:{axisLine:{color:"#DDDDDD"},tickText:{color:"#76808F"},tickLine:{color:"#DDDDDD"}},yAxis:{axisLine:{color:"#DDDDDD"},tickText:{color:"#76808F"},tickLine:{color:"#DDDDDD"}},separator:{color:"#DDDDDD"},crosshair:{horizontal:{line:{color:"#76808F"},text:{borderColor:"#686D76",backgroundColor:"#686D76"}},vertical:{line:{color:"#76808F"},text:{borderColor:"#686D76",backgroundColor:"#686D76"}}}},Yi={grid:{horizontal:{color:"#292929"},vertical:{color:"#292929"}},candle:{priceMark:{high:{color:"#929AA5"},low:{color:"#929AA5"}},tooltip:{rect:{color:"rgba(10, 10, 10, .6)",borderColor:"rgba(10, 10, 10, .6)"},text:{color:"#929AA5"}}},indicator:{tooltip:{text:{color:"#929AA5"}}},xAxis:{axisLine:{color:"#333333"},tickText:{color:"#929AA5"},tickLine:{color:"#333333"}},yAxis:{axisLine:{color:"#333333"},tickText:{color:"#929AA5"},tickLine:{color:"#333333"}},separator:{color:"#333333"},crosshair:{horizontal:{line:{color:"#929AA5"},text:{borderColor:"#373a40",backgroundColor:"#373a40"}},vertical:{line:{color:"#929AA5"},text:{borderColor:"#373a40",backgroundColor:"#373a40"}}}},Xi={light:Ki,dark:Yi};function Ui(t){var e;return null!==(e=Xi[t])&&void 0!==e?e:null}var Gi=function(){function t(t,e){this._styles=gt(),this._customApi=ne(),this._locale=re,this._precision={price:2,volume:0},this._thousandsSeparator=",",this._decimalFoldThreshold=3,this._dataList=[],this._loadMoreCallback=null,this._loadDataCallback=null,this._loading=!0,this._forwardMore=!0,this._backwardMore=!0,this._timeScaleStore=new Ae(this),this._indicatorStore=new oi(this),this._overlayStore=new $i(this),this._tooltipStore=new si(this),this._actionStore=new Hi,this._visibleDataList=[],this._chart=t,this.setOptions(e)}return t.prototype.adjustVisibleDataList=function(){this._visibleDataList=[];for(var t=this._timeScaleStore.getVisibleRange(),e=t.realFrom,i=t.realTo,n=e;n0&&(this._decimalFoldThreshold=u)}return this},t.prototype.getStyles=function(){return this._styles},t.prototype.getLocale=function(){return this._locale},t.prototype.getCustomApi=function(){return this._customApi},t.prototype.getThousandsSeparator=function(){return this._thousandsSeparator},t.prototype.getDecimalFoldThreshold=function(){return this._decimalFoldThreshold},t.prototype.getPrecision=function(){return this._precision},t.prototype.setPrecision=function(t){return this._precision=t,this._indicatorStore.synchronizeSeriesPrecision(),this},t.prototype.getDataList=function(){return this._dataList},t.prototype.getVisibleFirstData=function(){var t,e=this._timeScaleStore.getVisibleRange().from;return null!==(t=this._dataList[e])&&void 0!==t?t:null},t.prototype.getVisibleDataList=function(){return this._visibleDataList},t.prototype.addData=function(t,e,i){return U(this,void 0,void 0,function(){var n,r,a,o,s,l,c;return G(this,function(u){switch(u.label){case 0:if(n=!1,r=!1,a=0,St(t)){switch(a=t.length,e){case Kt.Init:this.clear(),this._dataList=t,this._forwardMore=null===i||void 0===i||i,this._timeScaleStore.resetOffsetRightDistance(),r=!0;break;case Kt.Backward:this._dataList=this._dataList.concat(t),this._backwardMore=null!==i&&void 0!==i&&i,r=a>0;break;case Kt.Forward:this._dataList=t.concat(this._dataList),this._forwardMore=null!==i&&void 0!==i&&i,r=a>0}this._loading=!1,n=!0}else o=this._dataList.length,s=t.timestamp,l=Ft(this._dataList[o-1],"timestamp",0),s>l?(this._dataList.push(t),c=this._timeScaleStore.getLastBarRightSideDiffBarCount(),c<0&&this._timeScaleStore.setLastBarRightSideDiffBarCount(--c),a=1,n=!0,r=!0):s===l&&(this._dataList[o-1]=t,n=!0,r=!0);if(!n)return[3,5];u.label=1;case 1:return u.trys.push([1,4,,5]),this._overlayStore.updatePointPosition(a,e),r?(this._timeScaleStore.adjustVisibleRange(),this._tooltipStore.recalculateCrosshair(!0),[4,this._indicatorStore.calcInstance()]):[3,3];case 2:u.sent(),this._chart.adjustPaneViewport(!1,!0,!0,!0),u.label=3;case 3:return this._actionStore.execute(Pt.OnDataReady),[3,5];case 4:return u.sent(),[3,5];case 5:return[2]}})})},t.prototype.setLoadMoreCallback=function(t){this._loadMoreCallback=t},t.prototype.executeLoadMoreCallback=function(t){this._forwardMore&&!this._loading&&Mt(this._loadMoreCallback)&&(this._loading=!0,this._loadMoreCallback(t))},t.prototype.setLoadDataCallback=function(t){this._loadDataCallback=t},t.prototype.executeLoadDataCallback=function(t){var e=this;if(!this._loading&&Mt(this._loadDataCallback)&&(this._forwardMore&&t.type===Kt.Forward||this._backwardMore&&t.type===Kt.Backward)){var i=function(i,n){e.addData(i,t.type,n).then(function(){}).catch(function(){})};this._loading=!0,this._loadDataCallback(X(X({},t),{callback:i}))}},t.prototype.clear=function(){this._forwardMore=!0,this._backwardMore=!0,this._loading=!0,this._dataList=[],this._visibleDataList=[],this._timeScaleStore.clear(),this._tooltipStore.clear()},t.prototype.getTimeScaleStore=function(){return this._timeScaleStore},t.prototype.getIndicatorStore=function(){return this._indicatorStore},t.prototype.getOverlayStore=function(){return this._overlayStore},t.prototype.getTooltipStore=function(){return this._tooltipStore},t.prototype.getActionStore=function(){return this._actionStore},t.prototype.getChart=function(){return this._chart},t}(),ji={MAIN:"main",X_AXIS:"xAxis",Y_AXIS:"yAxis",SEPARATOR:"separator"},qi=7;function Zi(){return U(this,void 0,void 0,function(){return G(this,function(t){switch(t.label){case 0:return[4,new Promise(function(t){var e=new ResizeObserver(function(i){t(i.every(function(t){return"devicePixelContentBoxSize"in t})),e.disconnect()});e.observe(document.body,{box:"device-pixel-content-box"})}).catch(function(){return!1})];case 1:return[2,t.sent()]}})})}var Ji=function(){function t(t,e){var i=this;this._supportedDevicePixelContentBox=!1,this._width=0,this._height=0,this._pixelWidth=0,this._pixelHeight=0,this._nextPixelWidth=0,this._nextPixelHeight=0,this._requestAnimationId=ae,this._mediaQueryListener=function(){var t=Vt(i._element);i._nextPixelWidth=Math.round(i._element.clientWidth*t),i._nextPixelHeight=Math.round(i._element.clientHeight*t),i._resetPixelRatio()},this._listener=e,this._element=he("canvas",t),this._ctx=this._element.getContext("2d",{willReadFrequently:!0}),Zi().then(function(t){i._supportedDevicePixelContentBox=t,t?(i._resizeObserver=new ResizeObserver(function(t){var e,n=t.find(function(t){return t.target===i._element}),r=null===(e=null===n||void 0===n?void 0:n.devicePixelContentBoxSize)||void 0===e?void 0:e[0];Mt(r)&&(i._nextPixelWidth=r.inlineSize,i._nextPixelHeight=r.blockSize,i._pixelWidth===i._nextPixelWidth&&i._pixelHeight===i._nextPixelHeight||i._resetPixelRatio())}),i._resizeObserver.observe(i._element,{box:"device-pixel-content-box"})):(i._mediaQueryList=window.matchMedia("(resolution: ".concat(Vt(i._element),"dppx)")),i._mediaQueryList.addListener(i._mediaQueryListener))}).catch(function(t){return!1})}return t.prototype._resetPixelRatio=function(){var t=this;this._executeListener(function(){var e=t._element.clientWidth,i=t._element.clientHeight,n=t._nextPixelWidth/e,r=t._nextPixelHeight/i;t._width=e,t._height=i,t._pixelWidth=t._nextPixelWidth,t._pixelHeight=t._nextPixelHeight,t._element.width=t._nextPixelWidth,t._element.height=t._nextPixelHeight,t._ctx.scale(n,r)})},t.prototype._executeListener=function(t){var e=this;this._requestAnimationId===ae&&(this._requestAnimationId=oe(function(){e._ctx.clearRect(0,0,e._width,e._height),null===t||void 0===t||t(),e._listener(),e._requestAnimationId=ae}))},t.prototype.update=function(t,e){if(this._width!==t||this._height!==e){if(this._element.style.width="".concat(t,"px"),this._element.style.height="".concat(e,"px"),!this._supportedDevicePixelContentBox){var i=Vt(this._element);this._nextPixelWidth=Math.round(t*i),this._nextPixelHeight=Math.round(e*i),this._resetPixelRatio()}}else this._executeListener()},t.prototype.getElement=function(){return this._element},t.prototype.getContext=function(){return this._ctx},t.prototype.destroy=function(){Mt(this._resizeObserver)&&this._resizeObserver.unobserve(this._element),Mt(this._mediaQueryList)&&this._mediaQueryList.removeListener(this._mediaQueryListener)},t}();function Qi(t){var e={width:0,height:0,left:0,right:0,top:0,bottom:0};return Mt(t)&&wt(e,t),e}var tn=function(t){function e(e,i){var n=t.call(this)||this;return n._bounding=Qi(),n._pane=i,n._rootContainer=e,n._container=n.createContainer(),e.appendChild(n._container),n}return B(e,t),e.prototype.setBounding=function(t){return wt(this._bounding,t),this},e.prototype.getContainer=function(){return this._container},e.prototype.getBounding=function(){return this._bounding},e.prototype.getPane=function(){return this._pane},e.prototype.update=function(t){this.updateImp(this._container,this._bounding,null!==t&&void 0!==t?t:3)},e.prototype.destroy=function(){this._rootContainer.removeChild(this._container)},e}(hi),en=function(t){function e(e,i){var n=t.call(this,e,i)||this;n._mainCanvas=new Ji({position:"absolute",top:"0",left:"0",zIndex:"2",boxSizing:"border-box"},function(){n.updateMain(n._mainCanvas.getContext())}),n._overlayCanvas=new Ji({position:"absolute",top:"0",left:"0",zIndex:"2",boxSizing:"border-box"},function(){n.updateOverlay(n._overlayCanvas.getContext())});var r=n.getContainer();return r.appendChild(n._mainCanvas.getElement()),r.appendChild(n._overlayCanvas.getElement()),n}return B(e,t),e.prototype.createContainer=function(){return he("div",{margin:"0",padding:"0",position:"absolute",top:"0",overflow:"hidden",boxSizing:"border-box",zIndex:"1"})},e.prototype.updateImp=function(t,e,i){var n=e.width,r=e.height,a=e.left;t.style.left="".concat(a,"px");var o=i,s=t.clientWidth,l=t.clientHeight;switch(n===s&&r===l||(t.style.width="".concat(n,"px"),t.style.height="".concat(r,"px"),o=3),o){case 0:this._mainCanvas.update(n,r);break;case 1:this._overlayCanvas.update(n,r);break;case 3:case 4:this._mainCanvas.update(n,r),this._overlayCanvas.update(n,r);break}},e.prototype.destroy=function(){this._mainCanvas.destroy(),this._overlayCanvas.destroy()},e.prototype.getImage=function(t){var e=this.getBounding(),i=e.width,n=e.height,r=he("canvas",{width:"".concat(i,"px"),height:"".concat(n,"px"),boxSizing:"border-box"}),a=r.getContext("2d"),o=Vt(r);return r.width=i*o,r.height=n*o,a.scale(o,o),a.drawImage(this._mainCanvas.getElement(),0,0,i,n),t&&a.drawImage(this._overlayCanvas.getElement(),0,0,i,n),r},e}(tn);function nn(t){return"transparent"===t||"none"===t||/^[rR][gG][Bb][Aa]\(([\s]*(2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?)[\s]*,){3}[\s]*0[\s]*\)$/.test(t)||/^[hH][Ss][Ll][Aa]\(([\s]*(360|3[0-5][0-9]|[012]?[0-9][0-9]?)[\s]*,)([\s]*((100|[0-9][0-9]?)%|0)[\s]*,){2}([\s]*0[\s]*)\)$/.test(t)}function rn(t,e){var i=[];i=i.concat(e);for(var n=0;ns*s))return!0}return!1}function an(t,e,i){var n=[];n=n.concat(e);var r=i.style,a=void 0===r?O.Fill:r,o=i.color,s=void 0===o?"currentColor":o,l=i.borderSize,c=void 0===l?1:l,u=i.borderColor,d=void 0===u?"currentColor":u,h=i.borderStyle,p=void 0===h?N.Solid:h,f=i.borderDashedValue,v=void 0===f?[2,2]:f,g=(a===O.Fill||i.style===O.StrokeFill)&&(!Et(s)||!nn(s));g&&(t.fillStyle=s,n.forEach(function(e){var i=e.x,n=e.y,r=e.r;t.beginPath(),t.arc(i,n,r,0,2*Math.PI),t.closePath(),t.fill()})),(a===O.Stroke||i.style===O.StrokeFill)&&c>0&&!nn(d)&&(t.strokeStyle=d,t.lineWidth=c,p===N.Dashed?t.setLineDash(v):t.setLineDash([]),n.forEach(function(e){var i=e.x,n=e.y,r=e.r;(!g||r>c)&&(t.beginPath(),t.arc(i,n,r,0,2*Math.PI),t.closePath(),t.stroke())}))}var on={name:"circle",checkEventOn:rn,draw:function(t,e,i){an(t,e,i)}};function sn(t,e){var i=[];i=i.concat(e);for(var n=0;nt.y!==a[s].y>t.y&&t.x<(a[s].x-a[o].x)*(t.y-a[o].y)/(a[s].y-a[o].y)+a[o].x&&(r=!r);if(r)return!0}return!1}function ln(t,e,i){var n=[];n=n.concat(e);var r=i.style,a=void 0===r?O.Fill:r,o=i.color,s=void 0===o?"currentColor":o,l=i.borderSize,c=void 0===l?1:l,u=i.borderColor,d=void 0===u?"currentColor":u,h=i.borderStyle,p=void 0===h?N.Solid:h,f=i.borderDashedValue,v=void 0===f?[2,2]:f;a!==O.Fill&&i.style!==O.StrokeFill||Et(s)&&nn(s)||(t.fillStyle=s,n.forEach(function(e){var i=e.coordinates;t.beginPath(),t.moveTo(i[0].x,i[0].y);for(var n=1;n0&&!nn(d)&&(t.strokeStyle=d,t.lineWidth=c,p===N.Dashed?t.setLineDash(v):t.setLineDash([]),n.forEach(function(e){var i=e.coordinates;t.beginPath(),t.moveTo(i[0].x,i[0].y);for(var n=1;n=a&&t.x<=a+o&&t.y>=s&&t.y<=s+l)return!0}return!1}function dn(t,e,i){var n,r=[];r=r.concat(e);var a=i.style,o=void 0===a?O.Fill:a,s=i.color,l=void 0===s?"transparent":s,c=i.borderSize,u=void 0===c?1:c,d=i.borderColor,h=void 0===d?"transparent":d,p=i.borderStyle,f=void 0===p?N.Solid:p,v=i.borderRadius,g=void 0===v?0:v,m=i.borderDashedValue,y=void 0===m?[2,2]:m,b=null!==(n=t.roundRect)&&void 0!==n?n:t.rect,x=(o===O.Fill||i.style===O.StrokeFill)&&(!Et(l)||!nn(l));if(x&&(t.fillStyle=l,r.forEach(function(e){var i=e.x,n=e.y,r=e.width,a=e.height;t.beginPath(),b.call(t,i,n,r,a,g),t.closePath(),t.fill()})),(o===O.Stroke||i.style===O.StrokeFill)&&u>0&&!nn(h)){t.strokeStyle=h,t.fillStyle=h,t.lineWidth=u,f===N.Dashed?t.setLineDash(y):t.setLineDash([]);var _=u%2===1?.5:0,w=Math.round(2*_);r.forEach(function(e){var i=e.x,n=e.y,r=e.width,a=e.height;r>2*u&&a>2*u?(t.beginPath(),b.call(t,i+_,n+_,r-w,a-w,g),t.closePath(),t.stroke()):x||t.fillRect(i,n,r,a)})}}var hn={name:"rect",checkEventOn:un,draw:function(t,e,i){dn(t,e,i)}};function pn(t,e){var i,n,r=e.size,a=void 0===r?12:r,o=e.paddingLeft,s=void 0===o?0:o,l=e.paddingTop,c=void 0===l?0:l,u=e.paddingRight,d=void 0===u?0:u,h=e.paddingBottom,p=void 0===h?0:h,f=e.weight,v=void 0===f?"normal":f,g=e.family,m=t.x,y=t.y,b=t.text,x=t.align,_=void 0===x?"left":x,w=t.baseline,C=void 0===w?"top":w,S=t.width,k=t.height,A=null!==S&&void 0!==S?S:s+Ht(b,a,v,g)+d,T=null!==k&&void 0!==k?k:c+a+p;switch(_){case"left":case"start":i=m;break;case"right":case"end":i=m-A;break;default:i=m-A/2;break}switch(C){case"top":case"hanging":n=y;break;case"bottom":case"ideographic":case"alphabetic":n=y-T;break;default:n=y-T/2;break}return{x:i,y:n,width:A,height:T}}function fn(t,e,i){var n=[];n=n.concat(e);for(var r=0;r=o&&t.x<=o+l&&t.y>=s&&t.y<=s+c)return!0}return!1}function vn(t,e,i){var n=[];n=n.concat(e);var r=i.color,a=void 0===r?"currentColor":r,o=i.size,s=void 0===o?12:o,l=i.family,c=i.weight,u=i.paddingLeft,d=void 0===u?0:u,h=i.paddingTop,p=void 0===h?0:h,f=i.paddingRight,v=void 0===f?0:f,g=n.map(function(t){return pn(t,i)});dn(t,g,X(X({},i),{color:i.backgroundColor})),t.textAlign="left",t.textBaseline="top",t.font=$t(s,c,l),t.fillStyle=a,n.forEach(function(e,i){var n=g[i];t.fillText(e.text,n.x+d,n.y+p,n.width-d-v)})}var gn={name:"text",checkEventOn:fn,draw:function(t,e,i){vn(t,e,i)}},mn=gn;function yn(t,e){var i=t.x-e.x,n=t.y-e.y;return Math.sqrt(i*i+n*n)}function bn(t,e){var i=[];i=i.concat(e);for(var n=0;n=Math.min(l,u)-pi&&t.y<=Math.max(c,d)+pi&&t.y>=Math.min(c,d)-pi)return!0}}return!1}function xn(t,e,i){var n=[];n=n.concat(e);var r=i.style,a=void 0===r?N.Solid:r,o=i.size,s=void 0===o?1:o,l=i.color,c=void 0===l?"currentColor":l,u=i.dashedValue,d=void 0===u?[2,2]:u;t.lineWidth=s,t.strokeStyle=c,a===N.Dashed?t.setLineDash(d):t.setLineDash([]),n.forEach(function(e){var i=e.x,n=e.y,r=e.r,a=e.startAngle,o=e.endAngle;t.beginPath(),t.arc(i,n,r,a,o),t.stroke(),t.closePath()})}var _n={name:"arc",checkEventOn:bn,draw:function(t,e,i){xn(t,e,i)}},wn={},Cn=[on,_i,cn,hn,gn,mn,_n];function Sn(t){var e;return null!==(e=wn[t])&&void 0!==e?e:null}Cn.forEach(function(t){wn[t.name]=fi.extend(t)});var kn=function(t){function e(e){var i=t.call(this)||this;return i._widget=e,i}return B(e,t),e.prototype.getWidget=function(){return this._widget},e.prototype.createFigure=function(t,e){var i=Sn(t.name);if(null!==i){var n=new i(t);if(Mt(e)){for(var r in e)e.hasOwnProperty(r)&&n.registerEvent(r,e[r]);this.addChild(n)}return n}return null},e.prototype.draw=function(t){this.clear(),this.drawImp(t)},e}(hi),An=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i,n=this.getWidget(),r=this.getWidget().getPane(),a=r.getChart(),o=n.getBounding(),s=a.getStyles().grid,l=s.show;if(l){t.save(),t.globalCompositeOperation="destination-over";var c=s.horizontal,u=c.show;if(u){var d=r.getAxisComponent(),h=d.getTicks().map(function(t){return{coordinates:[{x:0,y:t.coord},{x:o.width,y:t.coord}]}});null===(e=this.createFigure({name:"line",attrs:h,styles:c}))||void 0===e||e.draw(t)}var p=s.vertical,f=p.show;if(f){var v=a.getXAxisPane().getAxisComponent();h=v.getTicks().map(function(t){return{coordinates:[{x:t.coord,y:0},{x:t.coord,y:o.height}]}});null===(i=this.createFigure({name:"line",attrs:h,styles:p}))||void 0===i||i.draw(t)}t.restore()}},e}(kn),Tn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.eachChildren=function(t){var e=this.getWidget().getPane(),i=e.getChart().getChartStore(),n=i.getVisibleDataList(),r=i.getTimeScaleStore().getBarSpace();n.forEach(function(e,i){t(e,r,i)})},e}(kn),Mn=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._boundCandleBarClickEvent=function(t){return function(){return e.getWidget().getPane().getChart().getChartStore().getActionStore().execute(Pt.OnCandleBarClick,t),!1}},e}return B(e,t),e.prototype.drawImp=function(t){var e=this,i=this.getWidget().getPane(),n=i.getId()===Vi.CANDLE,r=i.getChart().getChartStore(),a=this.getCandleBarOptions(r);if(null!==a){var o=0,s=0;if(a.type===H.Ohlc){var l=r.getTimeScaleStore().getBarSpace().gapBar;o=Math.min(Math.max(Math.round(.2*l),1),8),o>2&&o%2===1&&o--,s=Math.floor(s/2)}var c=i.getAxisComponent();this.eachChildren(function(i,r){var l=i.data,u=i.x;if(Mt(l)){var d=l.open,h=l.high,p=l.low,f=l.close,v=a.type,g=a.styles,m=[];f>d?(m[0]=g.upColor,m[1]=g.upBorderColor,m[2]=g.upWickColor):fd?e._createStrokeBar(u,x,r,m):e._createSolidBar(u,x,r,m);break;case H.CandleDownStroke:_=d>f?e._createStrokeBar(u,x,r,m):e._createSolidBar(u,x,r,m);break;case H.Ohlc:_=[{name:"rect",attrs:[{x:u-s,y:x[0],width:o,height:x[3]-x[0]},{x:u-r.halfGapBar,y:y+o>x[3]?x[3]-o:y,width:r.halfGapBar,height:o},{x:u+s,y:b+o>x[3]?x[3]-o:b,width:r.halfGapBar-s,height:o}],styles:{color:m[0]}}];break}_.forEach(function(r){var a,o;n&&(o={mouseClickEvent:e._boundCandleBarClickEvent(i)}),null===(a=e.createFigure(r,o))||void 0===a||a.draw(t)})}})}},e.prototype.getCandleBarOptions=function(t){var e=t.getStyles().candle;return{type:e.type,styles:e.bar}},e.prototype._createSolidBar=function(t,e,i,n){return[{name:"rect",attrs:{x:t,y:e[0],width:1,height:e[3]-e[0]},styles:{color:n[2]}},{name:"rect",attrs:{x:t-i.halfGapBar,y:e[1],width:i.gapBar,height:Math.max(1,e[2]-e[1])},styles:{style:O.StrokeFill,color:n[0],borderColor:n[1]}}]},e.prototype._createStrokeBar=function(t,e,i,n){return[{name:"rect",attrs:[{x:t,y:e[0],width:1,height:e[1]-e[0]},{x:t,y:e[2],width:1,height:e[3]-e[2]}],styles:{color:n[2]}},{name:"rect",attrs:{x:t-i.halfGapBar,y:e[1],width:i.gapBar,height:Math.max(1,e[2]-e[1])},styles:{style:O.Stroke,borderColor:n[1]}}]},e}(Tn),In=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.getCandleBarOptions=function(t){var e,i,n=this.getWidget().getPane(),r=n.getAxisComponent();if(!r.isInCandle()){var a=t.getIndicatorStore().getInstances(n.getId());try{for(var o=j(a),s=o.next();!s.done;s=o.next()){var l=s.value;if(l.shouldOhlc&&l.visible){var c=l.styles,u=t.getStyles().indicator,d=Ft(c,"ohlc.upColor",u.ohlc.upColor),h=Ft(c,"ohlc.downColor",u.ohlc.downColor),p=Ft(c,"ohlc.noChangeColor",u.ohlc.noChangeColor);return{type:H.Ohlc,styles:{upColor:d,downColor:h,noChangeColor:p,upBorderColor:d,downBorderColor:h,noChangeBorderColor:p,upWickColor:d,downWickColor:h,noChangeWickColor:p}}}}}catch(f){e={error:f}}finally{try{s&&!s.done&&(i=o.return)&&i.call(o)}finally{if(e)throw e.error}}}return null},e.prototype.drawImp=function(e){var i=this;t.prototype.drawImp.call(this,e);var n=this.getWidget(),r=n.getPane(),a=r.getChart(),o=n.getBounding(),s=a.getXAxisPane().getAxisComponent(),l=r.getAxisComponent(),c=a.getChartStore(),u=c.getDataList(),d=c.getTimeScaleStore(),h=d.getVisibleRange(),p=c.getIndicatorStore().getInstances(r.getId()),f=c.getStyles().indicator;e.save(),p.forEach(function(t){var n;if(t.visible){t.zLevel<0?e.globalCompositeOperation="destination-over":e.globalCompositeOperation="source-over";var r=!1;if(null!==t.draw&&(e.save(),r=null!==(n=t.draw({ctx:e,kLineDataList:u,indicator:t,visibleRange:h,bounding:o,barSpace:d.getBarSpace(),defaultStyles:f,xAxis:s,yAxis:l}))&&void 0!==n&&n,e.restore()),!r){var a=t.result,c=[];i.eachChildren(function(n,r){var d,h,p,v=r.halfGapBar,g=n.dataIndex,m=n.x,y=s.convertToPixel(g-1),b=s.convertToPixel(g+1),x=null!==(d=a[g-1])&&void 0!==d?d:null,_=null!==(h=a[g])&&void 0!==h?h:null,w=null!==(p=a[g+1])&&void 0!==p?p:null,C={x:y},S={x:m},k={x:b};t.figures.forEach(function(t){var e=t.key,i=null===x||void 0===x?void 0:x[e];Tt(i)&&(C[e]=l.convertToPixel(i));var n=null===_||void 0===_?void 0:_[e];Tt(n)&&(S[e]=l.convertToPixel(n));var r=null===w||void 0===w?void 0:w[e];Tt(r)&&(k[e]=l.convertToPixel(r))}),Ut(u,t,g,f,function(t,n,a){var u,d,h;if(Mt(null===_||void 0===_?void 0:_[t.key])){var p=S[t.key],f=null===(u=t.attrs)||void 0===u?void 0:u.call(t,{data:{prev:x,current:_,next:w},coordinate:{prev:C,current:S,next:k},bounding:o,barSpace:r,xAxis:s,yAxis:l});if(!Mt(f))switch(t.type){case"circle":f={x:m,y:p,r:Math.max(1,v)};break;case"rect":case"bar":var g=null!==(d=t.baseValue)&&void 0!==d?d:l.getRange().from,y=l.convertToPixel(g),b=Math.abs(y-p);g!==(null===_||void 0===_?void 0:_[t.key])&&(b=Math.max(1,b));var A=void 0;A=p>y?y:p,f={x:m-v,y:A,width:Math.max(1,2*v),height:b};break;case"line":Mt(c[a])||(c[a]=[]),Tt(S[t.key])&&Tt(k[t.key])&&c[a].push({coordinates:[{x:S.x,y:S[t.key]},{x:k.x,y:k[t.key]}],styles:n});break}var T=t.type;Mt(f)&&"line"!==T&&(null===(h=i.createFigure({name:"bar"===T?"rect":T,attrs:f,styles:n}))||void 0===h||h.draw(e))}})}),c.forEach(function(t){if(t.length>1){for(var n=[{coordinates:[t[0].coordinates[0],t[0].coordinates[1]],styles:t[0].styles}],r=1;r0,S=_.length>0;if(C||S){var k=q(p.classifyTooltipIcons(w),3),A=k[0],T=k[1],M=k[2];if(g=p.drawStandardTooltipIcons(t,r,A,m,e,a.name,c,g,d),C){var I=b;x.length>0&&(I="".concat(I).concat(x)),g=p.drawStandardTooltipLegends(t,[{title:{text:"",color:v.color},value:{text:I,color:v.color}}],m,c,g,d,v)}g=p.drawStandardTooltipIcons(t,r,T,m,e,a.name,c,g,d),S&&(g=p.drawStandardTooltipLegends(t,_,m,c,g,d,f.text)),g=p.drawStandardTooltipIcons(t,r,M,m,e,a.name,c,g,d),u=m.y+g}})}return u},e.prototype.drawStandardTooltipIcons=function(t,e,i,n,r,a,o,s,l){var c=this;if(i.length>0){var u=0,d=0;i.forEach(function(e){var i=e.marginLeft,n=void 0===i?0:i,r=e.marginTop,a=void 0===r?0:r,o=e.marginRight,s=void 0===o?0:o,l=e.marginBottom,c=void 0===l?0:l,h=e.paddingLeft,p=void 0===h?0:h,f=e.paddingTop,v=void 0===f?0:f,g=e.paddingRight,m=void 0===g?0:g,y=e.paddingBottom,b=void 0===y?0:y,x=e.size,_=e.fontFamily,w=e.icon;t.font=$t(x,"normal",_),u+=n+p+t.measureText(w).width+m+s,d=Math.max(d,a+v+x+b+c)}),n.x+u>l?(n.x=o,n.y+=s,s=d):s=Math.max(s,d),i.forEach(function(i){var o,s=i.marginLeft,l=void 0===s?0:s,u=i.marginTop,d=void 0===u?0:u,h=i.marginRight,p=void 0===h?0:h,f=i.paddingLeft,v=void 0===f?0:f,g=i.paddingTop,m=void 0===g?0:g,y=i.paddingRight,b=void 0===y?0:y,x=i.paddingBottom,_=void 0===x?0:x,w=i.color,C=i.activeColor,S=i.size,k=i.fontFamily,A=i.icon,T=i.backgroundColor,M=i.activeBackgroundColor,I=(null===e||void 0===e?void 0:e.paneId)===r&&(null===e||void 0===e?void 0:e.indicatorName)===a&&(null===e||void 0===e?void 0:e.iconId)===i.id;null===(o=c.createFigure({name:"text",attrs:{text:A,x:n.x+l,y:n.y+d},styles:{paddingLeft:v,paddingTop:m,paddingRight:b,paddingBottom:_,color:I?C:w,size:S,family:k,backgroundColor:I?M:T}},{mouseClickEvent:c._boundIconClickEvent({paneId:r,indicatorName:a,iconId:i.id}),mouseMoveEvent:c._boundIconMouseMoveEvent({paneId:r,indicatorName:a,iconId:i.id})}))||void 0===o||o.draw(t),n.x+=l+v+t.measureText(A).width+b+p})}return s},e.prototype.drawStandardTooltipLegends=function(t,e,i,n,r,a,o){var s=this;if(e.length>0){var l=o.marginLeft,c=o.marginTop,u=o.marginRight,d=o.marginBottom,h=o.size,p=o.family,f=o.weight;t.font=$t(h,f,p),e.forEach(function(e){var o,v,g=e.title,m=e.value,y=t.measureText(g.text).width,b=t.measureText(m.text).width,x=y+b,_=c+h+d;i.x+l+x+u>a?(i.x=n,i.y+=r,r=_):r=Math.max(r,_),g.text.length>0&&(null===(o=s.createFigure({name:"text",attrs:{x:i.x+l,y:i.y+c,text:g.text},styles:{color:g.color,size:h,family:p,weight:f}}))||void 0===o||o.draw(t)),null===(v=s.createFigure({name:"text",attrs:{x:i.x+l+y,y:i.y+c,text:m.text},styles:{color:m.color,size:h,family:p,weight:f}}))||void 0===v||v.draw(t),i.x+=l+x+u})}return r},e.prototype.isDrawTooltip=function(t,e){var i=e.showRule;return i===z.Always||i===z.FollowCross&&Et(t.paneId)},e.prototype.getIndicatorTooltipData=function(t,e,i,n,r,a,o){var s,l,c=o.tooltip,u=c.showName?i.shortName:"",d="",h=i.calcParams;h.length>0&&c.showParams&&(d="(".concat(h.join(","),")"));var p={name:u,calcParamsText:d,values:[],icons:c.icons},f=e.dataIndex,v=null!==(s=i.result)&&void 0!==s?s:[],g=[];if(i.visible){var m=null!==(l=v[f])&&void 0!==l?l:{};Ut(t,i,f,o,function(t,e){var o;if(Et(t.title)){var s=e.color,l=null!==(o=m[t.key])&&void 0!==o?o:c.defaultValue;Tt(l)&&(l=Nt(l,i.precision),i.shouldFormatBigNumber&&(l=n.formatBigNumber(l)),l=Wt(zt(l,r),a)),g.push({title:{text:t.title,color:s},value:{text:l,color:s}})}}),p.values=g}if(null!==i.createTooltipDataSource){var y=this.getWidget(),b=y.getPane(),x=b.getChart().getChartStore(),_=i.createTooltipDataSource({kLineDataList:t,indicator:i,visibleRange:x.getTimeScaleStore().getVisibleRange(),bounding:y.getBounding(),crosshair:e,defaultStyles:o,xAxis:b.getChart().getXAxisPane().getAxisComponent(),yAxis:b.getAxisComponent()}),w=_.name,C=_.calcParamsText,S=_.values,k=_.icons;if(Et(w)&&c.showName&&(p.name=w),Et(C)&&c.showParams&&(p.calcParamsText=C),Mt(k)&&(p.icons=k),Mt(S)&&i.visible){var A=[],T=o.tooltip.text.color;S.forEach(function(t){var e,o={text:"",color:T};At(t.title)?o=t.title:o.text=t.title;var s={text:"",color:T};if(At(t.value)?s=t.value:s.text=null!==(e=t.value)&&void 0!==e?e:c.defaultValue,Tt(s.text)){var l=Nt(s.text,i.precision);i.shouldFormatBigNumber&&(l=n.formatBigNumber(l)),l=Wt(zt(l,r),a),s.text=l}A.push({title:o,value:s})}),p.values=A}}return p},e.prototype.classifyTooltipIcons=function(t){var e=[],i=[],n=[];return t.forEach(function(t){switch(t.position){case V.Left:e.push(t);break;case V.Middle:i.push(t);break;case V.Right:n.push(t);break}}),[e,i,n]},e}(kn),Pn=function(t){function e(e){var i=t.call(this,e)||this;return i._initEvent(),i}return B(e,t),e.prototype._initEvent=function(){var t=this,e=this.getWidget().getPane(),i=e.getId(),n=e.getChart().getChartStore().getOverlayStore();this.registerEvent("mouseMoveEvent",function(e){var r,a=n.getProgressInstanceInfo();if(null!==a){var o=a.instance,s=a.paneId;o.isStart()&&(n.updateProgressInstanceInfo(i),s=i);var l=o.points.length-1,c="".concat(ee,"point_").concat(l);return o.isDrawing()&&s===i&&(o.eventMoveForDrawing(t._coordinateToPoint(a.instance,e)),null===(r=o.onDrawing)||void 0===r||r.call(o,X({overlay:o,figureKey:c,figureIndex:l},e))),t._figureMouseMoveEvent(o,1,c,l,0)(e)}return n.setHoverInstanceInfo({paneId:i,instance:null,figureType:0,figureKey:"",figureIndex:-1,attrsIndex:-1},e),!1}).registerEvent("mouseClickEvent",function(e){var r,a,o=n.getProgressInstanceInfo();if(null!==o){var s=o.instance,l=o.paneId;s.isStart()&&(n.updateProgressInstanceInfo(i,!0),l=i);var c=s.points.length-1,u="".concat(ee,"point_").concat(c);return s.isDrawing()&&l===i&&(s.eventMoveForDrawing(t._coordinateToPoint(s,e)),null===(r=s.onDrawing)||void 0===r||r.call(s,X({overlay:s,figureKey:u,figureIndex:c},e)),s.nextStep(),s.isDrawing()||(n.progressInstanceComplete(),null===(a=s.onDrawEnd)||void 0===a||a.call(s,X({overlay:s,figureKey:u,figureIndex:c},e)))),t._figureMouseClickEvent(s,1,u,c,0)(e)}return n.setClickInstanceInfo({paneId:i,instance:null,figureType:0,figureKey:"",figureIndex:-1,attrsIndex:-1},e),!1}).registerEvent("mouseDoubleClickEvent",function(e){var r,a=n.getProgressInstanceInfo();if(null!==a){var o=a.instance,s=a.paneId;if(o.isDrawing()&&s===i&&(o.forceComplete(),!o.isDrawing())){n.progressInstanceComplete();var l=o.points.length-1,c="".concat(ee,"point_").concat(l);null===(r=o.onDrawEnd)||void 0===r||r.call(o,X({overlay:o,figureKey:c,figureIndex:l},e))}var u=o.points.length-1;return t._figureMouseClickEvent(o,1,"".concat(ee,"point_").concat(u),u,0)(e)}return!1}).registerEvent("mouseRightClickEvent",function(e){var i=n.getProgressInstanceInfo();if(null!==i){var r=i.instance;if(r.isDrawing()){var a=r.points.length-1;return t._figureMouseRightClickEvent(r,1,"".concat(ee,"point_").concat(a),a,0)(e)}}return!1}).registerEvent("mouseUpEvent",function(t){var e,r=n.getPressedInstanceInfo(),a=r.instance,o=r.figureIndex,s=r.figureKey;return null!==a&&(null===(e=a.onPressedMoveEnd)||void 0===e||e.call(a,X({overlay:a,figureKey:s,figureIndex:o},t))),n.setPressedInstanceInfo({paneId:i,instance:null,figureType:0,figureKey:"",figureIndex:-1,attrsIndex:-1}),!1}).registerEvent("pressedMouseMoveEvent",function(e){var i,r,a=n.getPressedInstanceInfo(),o=a.instance,s=a.figureType,l=a.figureIndex,c=a.figureKey;if(null!==o){if(!o.lock&&(null===(r=null===(i=o.onPressedMoving)||void 0===i?void 0:i.call(o,X({overlay:o,figureIndex:l,figureKey:c},e)))||void 0===r||!r)){var u=t._coordinateToPoint(o,e);1===s?o.eventPressedPointMove(u,l):o.eventPressedOtherMove(u,t.getWidget().getPane().getChart().getChartStore().getTimeScaleStore())}return!0}return!1})},e.prototype._createFigureEvents=function(t,e,i,n,r,a){var o;if(!t.isDrawing()){var s=[];if(Mt(a)&&(It(a)?a&&(s=qt()):s=a),0===s.length)return{mouseMoveEvent:this._figureMouseMoveEvent(t,e,i,n,r),mouseDownEvent:this._figureMouseDownEvent(t,e,i,n,r),mouseClickEvent:this._figureMouseClickEvent(t,e,i,n,r),mouseRightClickEvent:this._figureMouseRightClickEvent(t,e,i,n,r),mouseDoubleClickEvent:this._figureMouseDoubleClickEvent(t,e,i,n,r)};o={},s.includes("mouseMoveEvent")||s.includes("touchMoveEvent")||(o.mouseMoveEvent=this._figureMouseMoveEvent(t,e,i,n,r)),s.includes("mouseDownEvent")||s.includes("touchStartEvent")||(o.mouseDownEvent=this._figureMouseDownEvent(t,e,i,n,r)),s.includes("mouseClickEvent")||s.includes("tapEvent")||(o.mouseClickEvent=this._figureMouseClickEvent(t,e,i,n,r)),s.includes("mouseDoubleClickEvent")||s.includes("doubleTapEvent")||(o.mouseDoubleClickEvent=this._figureMouseDoubleClickEvent(t,e,i,n,r)),s.includes("mouseRightClickEvent")||(o.mouseRightClickEvent=this._figureMouseRightClickEvent(t,e,i,n,r))}return o},e.prototype._figureMouseMoveEvent=function(t,e,i,n,r){var a=this;return function(o){var s=a.getWidget().getPane(),l=s.getChart().getChartStore().getOverlayStore();return l.setHoverInstanceInfo({paneId:s.getId(),instance:t,figureType:e,figureKey:i,figureIndex:n,attrsIndex:r},o),!0}},e.prototype._figureMouseDownEvent=function(t,e,i,n,r){var a=this;return function(o){var s,l=a.getWidget().getPane(),c=l.getId(),u=l.getChart().getChartStore().getOverlayStore();return t.startPressedMove(a._coordinateToPoint(t,o)),null===(s=t.onPressedMoveStart)||void 0===s||s.call(t,X({overlay:t,figureIndex:n,figureKey:i},o)),u.setPressedInstanceInfo({paneId:c,instance:t,figureType:e,figureKey:i,figureIndex:n,attrsIndex:r}),!0}},e.prototype._figureMouseClickEvent=function(t,e,i,n,r){var a=this;return function(o){var s=a.getWidget().getPane(),l=s.getId(),c=s.getChart().getChartStore().getOverlayStore();return c.setClickInstanceInfo({paneId:l,instance:t,figureType:e,figureKey:i,figureIndex:n,attrsIndex:r},o),!0}},e.prototype._figureMouseDoubleClickEvent=function(t,e,i,n,r){return function(e){var r;return null===(r=t.onDoubleClick)||void 0===r||r.call(t,X(X({},e),{figureIndex:n,figureKey:i,overlay:t})),!0}},e.prototype._figureMouseRightClickEvent=function(t,e,i,n,r){var a=this;return function(e){var r,o;if(null===(o=null===(r=t.onRightClick)||void 0===r?void 0:r.call(t,X({overlay:t,figureIndex:n,figureKey:i},e)))||void 0===o||!o){var s=a.getWidget().getPane(),l=s.getChart().getChartStore().getOverlayStore();l.removeInstance(t)}return!0}},e.prototype._coordinateToPoint=function(t,e){var i,n={},r=this.getWidget().getPane(),a=r.getChart(),o=r.getId(),s=a.getChartStore().getTimeScaleStore();if(this.coordinateToPointTimestampDataIndexFlag()){var l=a.getXAxisPane().getAxisComponent(),c=l.convertFromPixel(e.x),u=null!==(i=s.dataIndexToTimestamp(c))&&void 0!==i?i:void 0;n.dataIndex=c,n.timestamp=u}if(this.coordinateToPointValueFlag()){var d=r.getAxisComponent(),h=d.convertFromPixel(e.y);if(t.mode!==Gt.Normal&&o===Vi.CANDLE&&Tt(n.dataIndex)){var p=s.getDataByDataIndex(n.dataIndex);if(null!==p){var f=t.modeSensitivity;if(h>p.high)if(t.mode===Gt.WeakMagnet){var v=d.convertToPixel(p.high),g=d.convertFromPixel(v-f);hg&&(h=p.low)}else h=p.low;else{var y=Math.max(p.open,p.close),b=Math.min(p.open,p.close);h=h>y?h-y0){var m=(new Array).concat(this.getFigures(e,g,i,n,r,s,l,a,c,u,d));this.drawFigures(t,e,m,c)}this.drawDefaultFigures(t,e,g,i,r,a,o,s,l,c,u,d,h,p)},e.prototype.drawFigures=function(t,e,i,n){var r=this;i.forEach(function(i,a){var o=i.type,s=i.styles,l=i.attrs,c=i.ignoreEvent,u=[].concat(l);u.forEach(function(l,u){var d,h,p,f=r._createFigureEvents(e,2,null!==(d=i.key)&&void 0!==d?d:"",a,u,c),v=X(X(X({},n[o]),null===(h=e.styles)||void 0===h?void 0:h[o]),s);null===(p=r.createFigure({name:o,attrs:l,styles:v},f))||void 0===p||p.draw(t)})})},e.prototype.getCompleteOverlays=function(t,e){return t.getInstances(e)},e.prototype.getProgressOverlay=function(t,e){return t.paneId===e?t.instance:null},e.prototype.getFigures=function(t,e,i,n,r,a,o,s,l,c,u){var d,h;return null!==(h=null===(d=t.createPointFigures)||void 0===d?void 0:d.call(t,{overlay:t,coordinates:e,bounding:i,barSpace:n,precision:r,thousandsSeparator:a,decimalFoldThreshold:o,dateTimeFormat:s,defaultStyles:l,xAxis:c,yAxis:u}))&&void 0!==h?h:[]},e.prototype.drawDefaultFigures=function(t,e,i,n,r,a,o,s,l,c,u,d,h,p){var f,v,g=this;if(e.needDefaultPointFigure&&((null===(f=h.instance)||void 0===f?void 0:f.id)===e.id&&0!==h.figureType||(null===(v=p.instance)||void 0===v?void 0:v.id)===e.id&&0!==p.figureType)){var m=e.styles,y=X(X({},c.point),null===m||void 0===m?void 0:m.point);i.forEach(function(i,n){var r,a,o,s=i.x,l=i.y,c=y.radius,u=y.color,d=y.borderColor,p=y.borderSize;(null===(r=h.instance)||void 0===r?void 0:r.id)===e.id&&1===h.figureType&&h.figureIndex===n&&(c=y.activeRadius,u=y.activeColor,d=y.activeBorderColor,p=y.activeBorderSize),null===(a=g.createFigure({name:"circle",attrs:{x:s,y:l,r:c+p},styles:{color:d}},g._createFigureEvents(e,1,"".concat(ee,"point_").concat(n),n,0)))||void 0===a||a.draw(t),null===(o=g.createFigure({name:"circle",attrs:{x:s,y:l,r:c},styles:{color:u}}))||void 0===o||o.draw(t)})}},e}(kn),Ln=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._gridView=new An(n),n._indicatorView=new In(n),n._crosshairLineView=new En(n),n._tooltipView=n.createTooltipView(),n._overlayView=new Pn(n),n.addChild(n._tooltipView),n.addChild(n._overlayView),n.getContainer().style.cursor="crosshair",n.registerEvent("mouseMoveEvent",function(){return i.getChart().getChartStore().getTooltipStore().setActiveIcon(),!1}),n}return B(e,t),e.prototype.getName=function(){return ji.MAIN},e.prototype.updateMain=function(t){this.updateMainContent(t),this._indicatorView.draw(t),this._gridView.draw(t)},e.prototype.createTooltipView=function(){return new Dn(this)},e.prototype.updateMainContent=function(t){},e.prototype.updateOverlay=function(t){this._overlayView.draw(t),this._crosshairLineView.draw(t),this._tooltipView.draw(t)},e}(en),Rn=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._ripplePoint=e.createFigure({name:"circle",attrs:{x:0,y:0,r:0},styles:{style:"fill"}}),e._animationFrameTime=0,e._animation=new le({iterationCount:1/0}).doFrame(function(t){e._animationFrameTime=t;var i=e.getWidget().getPane();i.getChart().updatePane(0,i.getId())}),e}return B(e,t),e.prototype.drawImp=function(t){var e,i,n,r=this.getWidget(),a=r.getPane(),o=a.getChart(),s=o.getDataList(),l=s.length-1,c=r.getBounding(),u=a.getAxisComponent(),d=o.getStyles().candle.area,h=[],p=Number.MAX_SAFE_INTEGER,f=Number.MIN_SAFE_INTEGER,v=null;if(this.eachChildren(function(t){var e=t.data,i=t.x,n=null===e||void 0===e?void 0:e[d.value];if(Tt(n)){var r=u.convertToPixel(n);f===Number.MIN_SAFE_INTEGER&&(f=i),h.push({x:i,y:r}),p=Math.min(p,r),t.dataIndex===l&&(v={x:i,y:r})}}),h.length>0){null===(e=this.createFigure({name:"line",attrs:{coordinates:h},styles:{color:d.lineColor,size:d.lineSize,smooth:d.smooth}}))||void 0===e||e.draw(t);var g=d.backgroundColor,m=void 0;if(St(g)){var y=t.createLinearGradient(0,c.height,0,p);try{g.forEach(function(t){var e=t.offset,i=t.color;y.addColorStop(e,i)})}catch(_){}m=y}else m=g;t.fillStyle=m,t.beginPath(),t.moveTo(f,c.height),t.lineTo(h[0].x,h[0].y),bi(t,h,d.smooth),t.lineTo(h[h.length-1].x,c.height),t.closePath(),t.fill()}var b=d.point;if(b.show&&Mt(v)){null===(i=this.createFigure({name:"circle",attrs:{x:v.x,y:v.y,r:b.radius},styles:{style:"fill",color:b.color}}))||void 0===i||i.draw(t);var x=b.rippleRadius;b.animation&&(x=b.radius+this._animationFrameTime/b.animationDuration*(b.rippleRadius-b.radius),this._animation.setDuration(b.animationDuration).start()),null===(n=this._ripplePoint)||void 0===n||n.setAttrs({x:v.x,y:v.y,r:x}).setStyles({style:"fill",color:b.rippleColor}).draw(t)}else this.stopAnimation()},e.prototype.stopAnimation=function(){this._animation.stop()},e}(Tn),Fn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e=this.getWidget(),i=e.getPane(),n=i.getChart().getChartStore(),r=n.getStyles().candle.priceMark,a=r.high,o=r.low;if(r.show&&(a.show||o.show)){var s=n.getThousandsSeparator(),l=n.getDecimalFoldThreshold(),c=n.getPrecision(),u=i.getAxisComponent(),d=Number.MIN_SAFE_INTEGER,h=0,p=Number.MAX_SAFE_INTEGER,f=0;this.eachChildren(function(t){var e=t.data,i=t.x;Mt(e)&&(de.low&&(p=e.low,f=i))});var v=u.convertToPixel(d),g=u.convertToPixel(p);a.show&&d!==Number.MIN_SAFE_INTEGER&&this._drawMark(t,Wt(zt(Nt(d,c.price),s),l),{x:h,y:v},vp/2?(l=d-5,c=l-r.textOffset,u="right"):(l=d+5,u="left",c=l+r.textOffset);var f=h+n[1];null===(o=this.createFigure({name:"line",attrs:{coordinates:[{x:d,y:h},{x:d,y:f},{x:l,y:f}]},styles:{color:r.color}}))||void 0===o||o.draw(t),null===(s=this.createFigure({name:"text",attrs:{x:c,y:f,text:e,align:u,baseline:"middle"},styles:{color:r.color,size:r.textSize,family:r.textFamily,weight:r.textWeight}}))||void 0===s||s.draw(t)},e}(Tn),Bn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i=this.getWidget(),n=i.getPane(),r=i.getBounding(),a=n.getChart().getChartStore(),o=a.getStyles().candle.priceMark,s=o.last,l=s.line;if(o.show&&s.show&&l.show){var c=n.getAxisComponent(),u=a.getDataList(),d=u[u.length-1];if(null!=d){var h=d.close,p=d.open,f=c.convertToNicePixel(h),v=void 0;v=h>p?s.upColor:h0&&(x=this.drawStandardTooltipLegends(t,C,_,d,x,p,b)),x=this.drawStandardTooltipIcons(t,r,T,_,i,"",d,x,p)}return _.y+x},e.prototype._drawRectTooltip=function(t,e,i,n,r,a,o,s,l,c,u,d,h,p,f,v){var g,m,y,b,x,_=this,w=v.candle,C=v.indicator,S=w.tooltip,k=C.tooltip;if(h||p){var A=null!==(g=a.dataIndex)&&void 0!==g?g:0,T=this._getCandleTooltipLegends({prev:null!==(m=e[A-1])&&void 0!==m?m:null,current:a.kLineData,next:null!==(y=e[A+1])&&void 0!==y?y:null},o,s,l,c,u,d,w),M=S.offsetLeft,I=S.offsetTop,E=S.offsetRight,D=S.offsetBottom,P=S.text,L=P.marginLeft,R=P.marginRight,F=P.marginTop,B=P.marginBottom,N=P.size,z=P.weight,W=P.family,V=S.rect,H=V.position,Y=V.paddingLeft,X=V.paddingRight,U=V.paddingTop,G=V.paddingBottom,j=V.offsetLeft,q=V.offsetRight,Z=V.offsetTop,J=V.offsetBottom,Q=V.borderSize,tt=V.borderRadius,et=V.borderColor,it=V.color,nt=0,rt=0,at=0;h&&(t.font=$t(N,z,W),T.forEach(function(e){var i=e.title,n=e.value,r="".concat(i.text).concat(n.text),a=t.measureText(r).width+L+R;nt=Math.max(nt,a)}),at+=(B+F+N)*T.length);var ot=k.text,st=ot.marginLeft,lt=ot.marginRight,ct=ot.marginTop,ut=ot.marginBottom,dt=ot.size,ht=ot.weight,pt=ot.family,ft=[];if(p&&(t.font=$t(dt,ht,pt),i.forEach(function(i){var n,r=null!==(n=_.getIndicatorTooltipData(e,a,i,c,u,d,C).values)&&void 0!==n?n:[];ft.push(r),r.forEach(function(e){var i=e.title,n=e.value,r="".concat(i.text).concat(n.text),a=t.measureText(r).width+st+lt;nt=Math.max(nt,a),at+=ct+ut+dt})})),rt+=nt,0!==rt&&0!==at){rt+=2*Q+Y+X,at+=2*Q+U+G;var vt=n.width/2,gt=H===$.Pointer&&a.paneId===Vi.CANDLE,mt=(null!==(b=a.realX)&&void 0!==b?b:0)>vt,yt=0;if(gt){var bt=a.realX;yt=mt?bt-q-rt:bt+j}else mt?(yt=j+M,v.yAxis.inside&&v.yAxis.position===K.Left&&(yt+=r.width)):(yt=n.width-q-rt-E,v.yAxis.inside&&v.yAxis.position===K.Right&&(yt-=r.width));var xt=f+Z;if(gt){var _t=a.y;xt=_t-at/2,xt+at>n.height-J-D&&(xt=n.height-J-at-D),xt1){var c="{".concat(l[1],"}");o.text=o.text.replace(c,null!==(e=x[c])&&void 0!==e?e:p.defaultValue),"{change}"===c&&(o.color=0===m?s.priceMark.last.noChangeColor:m>0?s.priceMark.last.upColor:s.priceMark.last.downColor)}return{title:a,value:o}})},e}(Dn),$n=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._candleBarView=new Mn(n),n._candleAreaView=new Rn(n),n._candleHighLowPriceView=new Fn(n),n._candleLastPriceLineView=new Bn(n),n.addChild(n._candleBarView),n}return B(e,t),e.prototype.updateMainContent=function(t){var e=this.getPane().getChart().getStyles().candle;e.type!==H.Area?(this._candleBarView.draw(t),this._candleHighLowPriceView.draw(t),this._candleAreaView.stopAnimation()):this._candleAreaView.draw(t),this._candleLastPriceLineView.draw(t)},e.prototype.createTooltipView=function(){return new Vn(this)},e}(Ln),Hn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i,n=this,r=this.getWidget(),a=r.getPane(),o=r.getBounding(),s=a.getAxisComponent(),l=this.getAxisStyles(a.getChart().getStyles());if(l.show){l.axisLine.show&&(null===(e=this.createFigure({name:"line",attrs:this.createAxisLine(o,l),styles:l.axisLine}))||void 0===e||e.draw(t));var c=s.getTicks();if(l.tickLine.show){var u=this.createTickLines(c,o,l);u.forEach(function(e){var i;null===(i=n.createFigure({name:"line",attrs:e,styles:l.tickLine}))||void 0===i||i.draw(t)})}if(l.tickText.show){var d=this.createTickTexts(c,o,l);null===(i=this.createFigure({name:"text",attrs:d,styles:l.tickText}))||void 0===i||i.draw(t)}}},e}(kn),Kn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.getAxisStyles=function(t){return t.yAxis},e.prototype.createAxisLine=function(t,e){var i,n=this.getWidget().getPane().getAxisComponent(),r=e.axisLine.size;return i=n.isFromZero()?0:t.width-r,{coordinates:[{x:i,y:0},{x:i,y:t.height}]}},e.prototype.createTickLines=function(t,e,i){var n=this.getWidget().getPane().getAxisComponent(),r=i.axisLine,a=i.tickLine,o=0,s=0;return n.isFromZero()?(o=0,r.show&&(o+=r.size),s=o+a.length):(o=e.width,r.show&&(o-=r.size),s=o-a.length),t.map(function(t){return{coordinates:[{x:o,y:t.coord},{x:s,y:t.coord}]}})},e.prototype.createTickTexts=function(t,e,i){var n=this.getWidget().getPane().getAxisComponent(),r=i.axisLine,a=i.tickLine,o=i.tickText,s=0;n.isFromZero()?(s=o.marginStart,r.show&&(s+=r.size),a.show&&(s+=a.length)):(s=e.width-o.marginEnd,r.show&&(s-=r.size),a.show&&(s-=a.length));var l=this.getWidget().getPane().getAxisComponent().isFromZero()?"left":"right";return t.map(function(t){return{x:s,y:t.coord,text:t.text,align:l,baseline:"middle"}})},e}(Hn),Yn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i=this.getWidget(),n=i.getPane(),r=i.getBounding(),a=n.getChart().getChartStore(),o=a.getStyles().candle.priceMark,s=o.last,l=s.text;if(o.show&&s.show&&l.show){var c=a.getPrecision(),u=n.getAxisComponent(),d=a.getDataList(),h=d[d.length-1];if(Mt(h)){var p=h.close,f=h.open,v=u.convertToNicePixel(p),g=void 0;g=p>f?s.upColor:p1&&p.unshift({type:"rect",attrs:{x:0,y:g,width:i.width,height:m-g},ignoreEvent:!0})}return p},e.prototype.getFigures=function(t,e,i,n,r,a,o,s,l,c,u){var d,h;return null!==(h=null===(d=t.createYAxisFigures)||void 0===d?void 0:d.call(t,{overlay:t,coordinates:e,bounding:i,barSpace:n,precision:r,thousandsSeparator:a,decimalFoldThreshold:o,dateTimeFormat:s,defaultStyles:l,xAxis:c,yAxis:u}))&&void 0!==h?h:[]},e}(Pn),Gn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i=this.getWidget(),n=i.getPane(),r=i.getBounding(),a=i.getPane().getChart().getChartStore(),o=a.getTooltipStore().getCrosshair(),s=a.getStyles().crosshair;if(Et(o.paneId)&&this.compare(o,n.getId())&&s.show){var l=this.getDirectionStyles(s),c=l.text;if(l.show&&c.show){var u=n.getAxisComponent(),d=this.getText(o,a,u);t.font=$t(c.size,c.weight,c.family),null===(e=this.createFigure({name:"text",attrs:this.getTextAttrs(d,t.measureText(d).width,o,r,u,c),styles:c}))||void 0===e||e.draw(t)}}},e.prototype.compare=function(t,e){return t.paneId===e},e.prototype.getDirectionStyles=function(t){return t.horizontal},e.prototype.getText=function(t,e,i){var n,r=i,a=i.convertFromPixel(t.y);if(r.getType()===Y.Percentage){var o=e.getVisibleFirstData();n="".concat(((a-o.close)/o.close*100).toFixed(2),"%")}else{var s=e.getIndicatorStore().getInstances(t.paneId),l=0,c=!1;r.isInCandle()?l=e.getPrecision().price:s.forEach(function(t){l=Math.max(t.precision,l),c||(c=t.shouldFormatBigNumber)}),n=Nt(a,l),c&&(n=e.getCustomApi().formatBigNumber(n))}return Wt(zt(n,e.getThousandsSeparator()),e.getDecimalFoldThreshold())},e.prototype.getTextAttrs=function(t,e,i,n,r,a){var o,s,l=r;return l.isFromZero()?(o=0,s="left"):(o=n.width,s="right"),{x:o,y:i.y,text:t,align:s,baseline:"middle"}},e}(kn),jn=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._yAxisView=new Kn(n),n._candleLastPriceLabelView=new Yn(n),n._indicatorLastValueView=new Xn(n),n._overlayYAxisView=new Un(n),n._crosshairHorizontalLabelView=new Gn(n),n.getContainer().style.cursor="ns-resize",n.addChild(n._overlayYAxisView),n}return B(e,t),e.prototype.getName=function(){return ji.Y_AXIS},e.prototype.updateMain=function(t){this._yAxisView.draw(t),this.getPane().getAxisComponent().isInCandle()&&this._candleLastPriceLabelView.draw(t),this._indicatorLastValueView.draw(t)},e.prototype.updateOverlay=function(t){this._overlayYAxisView.draw(t),this._crosshairHorizontalLabelView.draw(t)},e}(en),qn=function(){function t(t){this._range={from:0,to:0,range:0,realFrom:0,realTo:0,realRange:0},this._prevRange={from:0,to:0,range:0,realFrom:0,realTo:0,realRange:0},this._ticks=[],this._autoCalcTickFlag=!0,this._parent=t}return t.prototype.getParent=function(){return this._parent},t.prototype.buildTicks=function(t){if(this._autoCalcTickFlag&&(this._range=this.calcRange()),this._prevRange.from!==this._range.from||this._prevRange.to!==this._range.to||t){this._prevRange=this._range;var e=this.optimalTicks(this._calcTicks());return this._ticks=this.createTicks({range:this._range,bounding:this.getSelfBounding(),defaultTicks:e}),!0}return!1},t.prototype.getTicks=function(){return this._ticks},t.prototype.getScrollZoomEnabled=function(){var t;return null===(t=this.getParent().getOptions().axisOptions.scrollZoomEnabled)||void 0===t||t},t.prototype.setRange=function(t){this._autoCalcTickFlag=!1,this._range=t},t.prototype.getRange=function(){return this._range},t.prototype.setAutoCalcTickFlag=function(t){this._autoCalcTickFlag=t},t.prototype.getAutoCalcTickFlag=function(){return this._autoCalcTickFlag},t.prototype._calcTicks=function(){var t=this._range,e=t.realFrom,i=t.realTo,n=t.realRange,r=[];if(n>=0){var a=q(this._calcTickInterval(n),2),o=a[0],s=a[1],l=ve(Math.ceil(e/o)*o,s),c=ve(Math.floor(i/o)*o,s),u=0,d=l;if(0!==o)while(d<=c){var h=d.toFixed(s);r[u]={text:h,coord:0,value:h},++u,d+=o}}return r},t.prototype._calcTickInterval=function(t){var e=fe(t/8),i=ge(e);return[e,i]},t}(),Zn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.calcRange=function(){var t,e,i,n,r=this.getParent(),a=r.getChart(),o=a.getChartStore(),s=Number.MAX_SAFE_INTEGER,l=Number.MIN_SAFE_INTEGER,c=[],u=!1,d=Number.MAX_SAFE_INTEGER,h=Number.MIN_SAFE_INTEGER,p=Number.MAX_SAFE_INTEGER,f=o.getIndicatorStore().getInstances(r.getId());f.forEach(function(t){var e,i,n;u||(u=null!==(e=t.shouldOhlc)&&void 0!==e&&e),p=Math.min(p,t.precision),Tt(t.minValue)&&(d=Math.min(d,t.minValue)),Tt(t.maxValue)&&(h=Math.max(h,t.maxValue)),c.push({figures:null!==(i=t.figures)&&void 0!==i?i:[],result:null!==(n=t.result)&&void 0!==n?n:[]})});var v=4,g=this.isInCandle();if(g){var m=o.getPrecision().price;v=p!==Number.MAX_SAFE_INTEGER?Math.min(p,m):m}else p!==Number.MAX_SAFE_INTEGER&&(v=p);var y=o.getVisibleDataList(),b=a.getStyles().candle,x=b.type===H.Area,_=b.area.value,w=g&&!x||!g&&u;y.forEach(function(t){var e=t.dataIndex,i=t.data;if(Mt(i)&&(w&&(s=Math.min(s,i.low),l=Math.max(l,i.high)),g&&x)){var n=i[_];Tt(n)&&(s=Math.min(s,n),l=Math.max(l,n))}c.forEach(function(t){var i,n=t.figures,r=t.result,a=null!==(i=r[e])&&void 0!==i?i:{};n.forEach(function(t){var e=a[t.key];Tt(e)&&(s=Math.min(s,e),l=Math.max(l,e))})})}),s!==Number.MAX_SAFE_INTEGER&&l!==Number.MIN_SAFE_INTEGER?(s=Math.min(d,s),l=Math.max(h,l)):(s=0,l=10);var C,S=this.getType();switch(S){case Y.Percentage:var k=o.getVisibleFirstData();Mt(k)&&Tt(k.close)&&(s=(s-k.close)/k.close*100,l=(l-k.close)/k.close*100),C=Math.pow(10,-2);break;case Y.Log:s=ye(s),l=ye(l),C=.05*be(-v);break;default:C=be(-v)}if(s===l||Math.abs(s-l)=1&&(E/=M);var D=null!==(n=null===I||void 0===I?void 0:I.bottom)&&void 0!==n?n:.1;D>=1&&(D/=M);var P,L,R,F=Math.abs(l-s);return s-=F*D,l+=F*E,F=Math.abs(l-s),S===Y.Log?(P=be(s),L=be(l),R=Math.abs(L-P)):(P=s,L=l,R=F),{from:s,to:l,range:F,realFrom:P,realTo:L,realRange:R}},e.prototype._innerConvertToPixel=function(t){var e,i,n=null!==(i=null===(e=this.getParent().getYAxisWidget())||void 0===e?void 0:e.getBounding().height)&&void 0!==i?i:0,r=this.getRange(),a=r.from,o=r.range,s=(t-a)/o;return this.isReverse()?Math.round(s*n):Math.round((1-s)*n)},e.prototype.isInCandle=function(){return this.getParent().getId()===Vi.CANDLE},e.prototype.getType=function(){return this.isInCandle()?this.getParent().getChart().getStyles().yAxis.type:Y.Normal},e.prototype.getPosition=function(){return this.getParent().getChart().getStyles().yAxis.position},e.prototype.isReverse=function(){return!!this.isInCandle()&&this.getParent().getChart().getStyles().yAxis.reverse},e.prototype.isFromZero=function(){var t=this.getParent().getChart().getStyles().yAxis,e=t.inside;return t.position===K.Left&&e||t.position===K.Right&&!e},e.prototype.optimalTicks=function(t){var e,i,n=this,r=this.getParent(),a=null!==(i=null===(e=r.getYAxisWidget())||void 0===e?void 0:e.getBounding().height)&&void 0!==i?i:0,o=r.getChart().getChartStore(),s=o.getCustomApi(),l=[],c=this.getType(),u=o.getIndicatorStore().getInstances(r.getId()),d=o.getThousandsSeparator(),h=o.getDecimalFoldThreshold(),p=0,f=!1;this.isInCandle()?p=o.getPrecision().price:u.forEach(function(t){p=Math.max(p,t.precision),f||(f=t.shouldFormatBigNumber)});var v,g=o.getStyles().xAxis.tickText.size;return t.forEach(function(t){var e,i=t.value,r=n._innerConvertToPixel(+i);switch(c){case Y.Percentage:e="".concat(Nt(i,2),"%");break;case Y.Log:r=n._innerConvertToPixel(ye(+i)),e=Nt(i,p);break;default:e=Nt(i,p),f&&(e=s.formatBigNumber(i));break}e=Wt(zt(e,d),h);var o=Tt(v);r>g&&r2*g||!o)&&(l.push({text:e,coord:r,value:i}),v=r)}),l},e.prototype.getAutoSize=function(){var t=this.getParent(),e=t.getChart(),i=e.getStyles(),n=i.yAxis,r=n.size;if("auto"!==r)return r;var a=e.getChartStore(),o=a.getCustomApi(),s=0;if(n.show&&(n.axisLine.show&&(s+=n.axisLine.size),n.tickLine.show&&(s+=n.tickLine.length),n.tickText.show)){var l=0;this.getTicks().forEach(function(t){l=Math.max(l,Ht(t.text,n.tickText.size,n.tickText.weight,n.tickText.family))}),s+=n.tickText.marginStart+n.tickText.marginEnd+l}var c=i.crosshair,u=0;if(c.show&&c.horizontal.show&&c.horizontal.text.show){var d=a.getIndicatorStore().getInstances(t.getId()),h=0,p=!1;d.forEach(function(t){h=Math.max(t.precision,h),p||(p=t.shouldFormatBigNumber)});var f=2;if(this.getType()!==Y.Percentage)if(this.isInCandle()){var v=a.getPrecision().price,g=i.indicator.lastValueMark;f=g.show&&g.text.show?Math.max(h,v):v}else f=h;var m=Nt(this.getRange().to,f);p&&(m=o.formatBigNumber(m)),m=Wt(m,a.getDecimalFoldThreshold()),u+=c.horizontal.text.paddingLeft+c.horizontal.text.paddingRight+2*c.horizontal.text.borderSize+Ht(m,c.horizontal.text.size,c.horizontal.text.weight,c.horizontal.text.family)}return Math.max(s,u)},e.prototype.getSelfBounding=function(){return this.getParent().getYAxisWidget().getBounding()},e.prototype.convertFromPixel=function(t){var e,i,n=null!==(i=null===(e=this.getParent().getYAxisWidget())||void 0===e?void 0:e.getBounding().height)&&void 0!==i?i:0,r=this.getRange(),a=r.from,o=r.range,s=this.isReverse()?t/n:1-t/n,l=s*o+a;switch(this.getType()){case Y.Percentage:var c=this.getParent().getChart().getChartStore().getVisibleFirstData();return Mt(c)&&Tt(c.close)?c.close*l/100+c.close:0;case Y.Log:return be(l);default:return l}},e.prototype.convertToRealValue=function(t){var e=t;return this.getType()===Y.Log&&(e=be(t)),e},e.prototype.convertToPixel=function(t){var e=t;switch(this.getType()){case Y.Percentage:var i=this.getParent().getChart().getChartStore().getVisibleFirstData();Mt(i)&&Tt(i.close)&&(e=(t-i.close)/i.close*100);break;case Y.Log:e=ye(t);break;default:e=t}return this._innerConvertToPixel(e)},e.prototype.convertToNicePixel=function(t){var e,i,n=null!==(i=null===(e=this.getParent().getYAxisWidget())||void 0===e?void 0:e.getBounding().height)&&void 0!==i?i:0,r=this.convertToPixel(t);return Math.round(Math.max(.05*n,Math.min(r,.98*n)))},e.extend=function(t){var i=function(e){function i(){return null!==e&&e.apply(this,arguments)||this}return B(i,e),i.prototype.createTicks=function(e){return t.createTicks(e)},i}(e);return i},e}(qn),Jn={name:"default",createTicks:function(t){var e=t.defaultTicks;return e}},Qn={default:Zn.extend(Jn)};function tr(t){var e;return null!==(e=Qn[t])&&void 0!==e?e:Qn.default}var er=function(){function t(t,e,i,n){this._bounding=Qi(),this._chart=i,this._id=n,this._init(t,e)}return t.prototype._init=function(t,e){this._rootContainer=t,this._container=he("div",{width:"100%",margin:"0",padding:"0",position:"relative",overflow:"hidden",boxSizing:"border-box"}),null!==e?t.insertBefore(this._container,e):t.appendChild(this._container)},t.prototype.getContainer=function(){return this._container},t.prototype.getId=function(){return this._id},t.prototype.getChart=function(){return this._chart},t.prototype.getBounding=function(){return this._bounding},t.prototype.update=function(t){this._bounding.height!==this._container.clientHeight&&(this._container.style.height="".concat(this._bounding.height,"px")),this.updateImp(null!==t&&void 0!==t?t:3,this._container,this._bounding)},t.prototype.destroy=function(){this._rootContainer.removeChild(this._container)},t}(),ir=function(t){function e(e,i,n,r,a){var o=t.call(this,e,i,n,r)||this;o._yAxisWidget=null,o._options={minHeight:zi,dragEnabled:!0,gap:{top:.2,bottom:.1},axisOptions:{name:"default",scrollZoomEnabled:!0}};var s=o.getContainer();return o._mainWidget=o.createMainWidget(s),o._yAxisWidget=o.createYAxisWidget(s),o.setOptions(a),o}return B(e,t),e.prototype.setOptions=function(t){var e,i,n,r,a,o=null===(e=t.axisOptions)||void 0===e?void 0:e.name;return(this._options.axisOptions.name!==o&&Et(o)||!Mt(this._axis))&&(this._axis=this.createAxisComponent(null!==o&&void 0!==o?o:"default")),wt(this._options,t),this.getId()===Vi.X_AXIS?(r=this.getMainWidget().getContainer(),a="ew-resize"):(r=this.getYAxisWidget().getContainer(),a="ns-resize"),null===(n=null===(i=t.axisOptions)||void 0===i?void 0:i.scrollZoomEnabled)||void 0===n||n?r.style.cursor=a:r.style.cursor="default",this},e.prototype.getOptions=function(){return this._options},e.prototype.getAxisComponent=function(){return this._axis},e.prototype.setBounding=function(t,e,i){var n,r;wt(this.getBounding(),t);var a={};return Mt(t.height)&&(a.height=t.height),Mt(t.top)&&(a.top=t.top),this._mainWidget.setBounding(a),null===(n=this._yAxisWidget)||void 0===n||n.setBounding(a),Mt(e)&&this._mainWidget.setBounding(e),Mt(i)&&(null===(r=this._yAxisWidget)||void 0===r||r.setBounding(i)),this},e.prototype.getMainWidget=function(){return this._mainWidget},e.prototype.getYAxisWidget=function(){return this._yAxisWidget},e.prototype.updateImp=function(t){var e;this._mainWidget.update(t),null===(e=this._yAxisWidget)||void 0===e||e.update(t)},e.prototype.destroy=function(){var e;t.prototype.destroy.call(this),this._mainWidget.destroy(),null===(e=this._yAxisWidget)||void 0===e||e.destroy()},e.prototype.getImage=function(t){var e=this.getBounding(),i=e.width,n=e.height,r=he("canvas",{width:"".concat(i,"px"),height:"".concat(n,"px"),boxSizing:"border-box"}),a=r.getContext("2d"),o=Vt(r);r.width=i*o,r.height=n*o,a.scale(o,o);var s=this._mainWidget.getBounding();if(a.drawImage(this._mainWidget.getImage(t),s.left,0,s.width,s.height),null!==this._yAxisWidget){var l=this._yAxisWidget.getBounding();a.drawImage(this._yAxisWidget.getImage(t),l.left,0,l.width,l.height)}return r},e.prototype.createYAxisWidget=function(t){return null},e}(er),nr=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.createAxisComponent=function(t){var e=tr(null!==t&&void 0!==t?t:"default");return new e(this)},e.prototype.createMainWidget=function(t){return new Ln(t,this)},e.prototype.createYAxisWidget=function(t){return new jn(t,this)},e}(ir),rr=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.createMainWidget=function(t){return new $n(t,this)},e}(nr),ar=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.getAxisStyles=function(t){return t.xAxis},e.prototype.createAxisLine=function(t){return{coordinates:[{x:0,y:0},{x:t.width,y:0}]}},e.prototype.createTickLines=function(t,e,i){var n=i.tickLine,r=i.axisLine.size;return t.map(function(t){return{coordinates:[{x:t.coord,y:0},{x:t.coord,y:r+n.length}]}})},e.prototype.createTickTexts=function(t,e,i){var n=i.tickText,r=i.axisLine.size,a=i.tickLine.length;return t.map(function(t){return{x:t.coord,y:r+a+n.marginStart,text:t.text,align:"center",baseline:"top"}})},e}(Hn),or=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.coordinateToPointTimestampDataIndexFlag=function(){return!0},e.prototype.coordinateToPointValueFlag=function(){return!1},e.prototype.getCompleteOverlays=function(t){return t.getInstances()},e.prototype.getProgressOverlay=function(t){return t.instance},e.prototype.getDefaultFigures=function(t,e,i,n,r,a,o,s,l,c,u){var d,h=[];if(t.needDefaultXAxisFigure&&t.id===(null===(d=u.instance)||void 0===d?void 0:d.id)){var p=Number.MAX_SAFE_INTEGER,f=Number.MIN_SAFE_INTEGER;e.forEach(function(e,i){p=Math.min(p,e.x),f=Math.max(f,e.x);var n=t.points[i];if(Tt(n.timestamp)){var o=a.formatDate(r,n.timestamp,"YYYY-MM-DD HH:mm",Zt.Crosshair);h.push({type:"text",attrs:{x:e.x,y:0,text:o,align:"center"},ignoreEvent:!0})}}),e.length>1&&h.unshift({type:"rect",attrs:{x:p,y:0,width:f-p,height:i.height},ignoreEvent:!0})}return h},e.prototype.getFigures=function(t,e,i,n,r,a,o,s,l,c,u){var d,h;return null!==(h=null===(d=t.createXAxisFigures)||void 0===d?void 0:d.call(t,{overlay:t,coordinates:e,bounding:i,barSpace:n,precision:r,thousandsSeparator:a,decimalFoldThreshold:o,dateTimeFormat:s,defaultStyles:l,xAxis:c,yAxis:u}))&&void 0!==h?h:[]},e}(Un),sr=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.compare=function(t){return Mt(t.kLineData)&&t.dataIndex===t.realDataIndex},e.prototype.getDirectionStyles=function(t){return t.vertical},e.prototype.getText=function(t,e){var i,n=null===(i=t.kLineData)||void 0===i?void 0:i.timestamp;return e.getCustomApi().formatDate(e.getTimeScaleStore().getDateTimeFormat(),n,"YYYY-MM-DD HH:mm",Zt.Crosshair)},e.prototype.getTextAttrs=function(t,e,i,n,r,a){var o,s=i.realX,l="center";return s-e/2-a.paddingLeft<0?(o=0,l="left"):s+e/2+a.paddingRight>n.width?(o=n.width,l="right"):o=s,{x:o,y:0,text:t,align:l,baseline:"top"}},e}(Gn),lr=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._xAxisView=new ar(n),n._overlayXAxisView=new or(n),n._crosshairVerticalLabelView=new sr(n),n.getContainer().style.cursor="ew-resize",n.addChild(n._overlayXAxisView),n}return B(e,t),e.prototype.getName=function(){return ji.X_AXIS},e.prototype.updateMain=function(t){this._xAxisView.draw(t)},e.prototype.updateOverlay=function(t){this._overlayXAxisView.draw(t),this._crosshairVerticalLabelView.draw(t)},e}(en),cr=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.calcRange=function(){var t=this.getParent().getChart().getChartStore(),e=t.getTimeScaleStore().getVisibleRange(),i=e.from,n=e.to,r=i,a=n-1,o=n-i;return{from:r,to:a,range:o,realFrom:r,realTo:a,realRange:o}},e.prototype.optimalTicks=function(t){var e,i,n=this.getParent().getChart(),r=n.getChartStore(),a=r.getCustomApi().formatDate,o=[],s=t.length,l=r.getDataList();if(s>0){var c=r.getTimeScaleStore().getDateTimeFormat(),u=n.getStyles().xAxis.tickText,d=Ht("00-00 00:00",u.size,u.weight,u.family),h=parseInt(t[0].value,10),p=this.convertToPixel(h),f=1;if(s>1){var v=parseInt(t[1].value,10),g=this.convertToPixel(v),m=Math.abs(g-p);me&&(t.apply(this,arguments),i=n)}}var vr=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._dragFlag=!1,n._dragStartY=0,n._topPaneHeight=0,n._bottomPaneHeight=0,n._pressedMouseMoveEvent=fr(n._pressedTouchMouseMoveEvent,20),n.registerEvent("touchStartEvent",n._mouseDownEvent.bind(n)).registerEvent("touchMoveEvent",n._pressedMouseMoveEvent.bind(n)).registerEvent("touchEndEvent",n._mouseUpEvent.bind(n)).registerEvent("mouseDownEvent",n._mouseDownEvent.bind(n)).registerEvent("mouseUpEvent",n._mouseUpEvent.bind(n)).registerEvent("pressedMouseMoveEvent",n._pressedMouseMoveEvent.bind(n)).registerEvent("mouseEnterEvent",n._mouseEnterEvent.bind(n)).registerEvent("mouseLeaveEvent",n._mouseLeaveEvent.bind(n)),n}return B(e,t),e.prototype.getName=function(){return ji.SEPARATOR},e.prototype.checkEventOn=function(){return!0},e.prototype._mouseDownEvent=function(t){this._dragFlag=!0,this._dragStartY=t.pageY;var e=this.getPane();return this._topPaneHeight=e.getTopPane().getBounding().height,this._bottomPaneHeight=e.getBottomPane().getBounding().height,!0},e.prototype._mouseUpEvent=function(){return this._dragFlag=!1,this._mouseLeaveEvent()},e.prototype._pressedTouchMouseMoveEvent=function(t){var e=t.pageY-this._dragStartY,i=this.getPane(),n=i.getTopPane(),r=i.getBottomPane(),a=e<0;if(null!==n&&(null===r||void 0===r?void 0:r.getOptions().dragEnabled)){var o=void 0,s=void 0,l=void 0,c=void 0;a?(o=n,s=r,l=this._topPaneHeight,c=this._bottomPaneHeight):(o=r,s=n,l=this._bottomPaneHeight,c=this._topPaneHeight);var u=o.getOptions().minHeight;if(l>u){var d=Math.max(l-Math.abs(e),u),h=l-d;o.setBounding({height:d}),s.setBounding({height:c+h});var p=i.getChart();p.getChartStore().getActionStore().execute(Pt.OnPaneDrag,{paneId:i.getId()}),p.adjustPaneViewport(!0,!0,!0,!0,!0)}}return!0},e.prototype._mouseEnterEvent=function(){var t,e=this.getPane(),i=e.getBottomPane();if(null!==(t=null===i||void 0===i?void 0:i.getOptions().dragEnabled)&&void 0!==t&&t){var n=e.getChart(),r=n.getStyles().separator;return this.getContainer().style.background=r.activeBackgroundColor,!0}return!1},e.prototype._mouseLeaveEvent=function(){return!this._dragFlag&&(this.getContainer().style.background="",!0)},e.prototype.createContainer=function(){return he("div",{width:"100%",height:"".concat(qi,"px"),margin:"0",padding:"0",position:"absolute",top:"-3px",zIndex:"20",boxSizing:"border-box",cursor:"ns-resize"})},e.prototype.updateImp=function(t,e,i){if(4===i||2===i){var n=this.getPane().getChart().getStyles().separator;t.style.top="".concat(-Math.floor((qi-n.size)/2),"px"),t.style.height="".concat(qi,"px")}},e}(tn),gr=function(t){function e(e,i,n,r,a,o){var s=t.call(this,e,i,n,r)||this;return s.getContainer().style.overflow="",s._topPane=a,s._bottomPane=o,s._separatorWidget=new vr(s.getContainer(),s),s}return B(e,t),e.prototype.setBounding=function(t){return wt(this.getBounding(),t),this},e.prototype.getTopPane=function(){return this._topPane},e.prototype.setTopPane=function(t){return this._topPane=t,this},e.prototype.getBottomPane=function(){return this._bottomPane},e.prototype.setBottomPane=function(t){return this._bottomPane=t,this},e.prototype.getWidget=function(){return this._separatorWidget},e.prototype.getImage=function(t){var e=this.getBounding(),i=e.width,n=e.height,r=this.getChart().getStyles().separator,a=he("canvas",{width:"".concat(i,"px"),height:"".concat(n,"px"),boxSizing:"border-box"}),o=a.getContext("2d"),s=Vt(a);return a.width=i*s,a.height=n*s,o.scale(s,s),o.fillStyle=r.color,o.fillRect(0,0,i,n),a},e.prototype.updateImp=function(t,e,i){if(4===t||2===t){var n=this.getChart().getStyles().separator;e.style.backgroundColor=n.color,e.style.height="".concat(i.height,"px"),e.style.marginLeft="".concat(i.left,"px"),e.style.width="".concat(i.width,"px"),this._separatorWidget.update(t)}},e}(er);function mr(){var t;return"undefined"!==typeof window&&(null!==(t=window.navigator.userAgent.toLowerCase().indexOf("firefox"))&&void 0!==t?t:-1)>-1}function yr(){return"undefined"!==typeof window&&/iPhone|iPad|iPod/.test(window.navigator.platform)}var br,xr=10,_r=function(){function t(t,e,i){var n=this;this._clickCount=0,this._clickTimeoutId=null,this._clickCoordinate={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY},this._tapCount=0,this._tapTimeoutId=null,this._tapCoordinate={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY},this._longTapTimeoutId=null,this._longTapActive=!1,this._mouseMoveStartCoordinate=null,this._touchMoveStartCoordinate=null,this._touchMoveExceededManhattanDistance=!1,this._cancelClick=!1,this._cancelTap=!1,this._unsubscribeOutsideMouseEvents=null,this._unsubscribeOutsideTouchEvents=null,this._unsubscribeMobileSafariEvents=null,this._unsubscribeMousemove=null,this._unsubscribeMouseWheel=null,this._unsubscribeContextMenu=null,this._unsubscribeRootMouseEvents=null,this._unsubscribeRootTouchEvents=null,this._startPinchMiddleCoordinate=null,this._startPinchDistance=0,this._pinchPrevented=!1,this._preventTouchDragProcess=!1,this._mousePressed=!1,this._lastTouchEventTimeStamp=0,this._activeTouchId=null,this._acceptMouseLeave=!yr(),this._onFirefoxOutsideMouseUp=function(t){n._mouseUpHandler(t)},this._onMobileSafariDoubleClick=function(t){if(n._firesTouchEvents(t)){if(++n._tapCount,null!==n._tapTimeoutId&&n._tapCount>1){var e=n._mouseTouchMoveWithDownInfo(n._getCoordinate(t),n._tapCoordinate).manhattanDistance;e<30&&!n._cancelTap&&n._processEvent(n._makeCompatEvent(t),n._handler.doubleTapEvent),n._resetTapTimeout()}}else if(++n._clickCount,null!==n._clickTimeoutId&&n._clickCount>1){e=n._mouseTouchMoveWithDownInfo(n._getCoordinate(t),n._clickCoordinate).manhattanDistance;e<5&&!n._cancelClick&&n._processEvent(n._makeCompatEvent(t),n._handler.mouseDoubleClickEvent),n._resetClickTimeout()}},this._target=t,this._handler=e,this._options=i,this._init()}return t.prototype.destroy=function(){null!==this._unsubscribeOutsideMouseEvents&&(this._unsubscribeOutsideMouseEvents(),this._unsubscribeOutsideMouseEvents=null),null!==this._unsubscribeOutsideTouchEvents&&(this._unsubscribeOutsideTouchEvents(),this._unsubscribeOutsideTouchEvents=null),null!==this._unsubscribeMousemove&&(this._unsubscribeMousemove(),this._unsubscribeMousemove=null),null!==this._unsubscribeMouseWheel&&(this._unsubscribeMouseWheel(),this._unsubscribeMouseWheel=null),null!==this._unsubscribeContextMenu&&(this._unsubscribeContextMenu(),this._unsubscribeContextMenu=null),null!==this._unsubscribeRootMouseEvents&&(this._unsubscribeRootMouseEvents(),this._unsubscribeRootMouseEvents=null),null!==this._unsubscribeRootTouchEvents&&(this._unsubscribeRootTouchEvents(),this._unsubscribeRootTouchEvents=null),null!==this._unsubscribeMobileSafariEvents&&(this._unsubscribeMobileSafariEvents(),this._unsubscribeMobileSafariEvents=null),this._clearLongTapTimeout(),this._resetClickTimeout()},t.prototype._mouseEnterHandler=function(t){var e,i,n,r=this;null===(e=this._unsubscribeMousemove)||void 0===e||e.call(this),null===(i=this._unsubscribeMouseWheel)||void 0===i||i.call(this),null===(n=this._unsubscribeContextMenu)||void 0===n||n.call(this);var a=this._mouseMoveHandler.bind(this);this._unsubscribeMousemove=function(){r._target.removeEventListener("mousemove",a)},this._target.addEventListener("mousemove",a);var o=this._mouseWheelHandler.bind(this);this._unsubscribeMouseWheel=function(){r._target.removeEventListener("wheel",o)},this._target.addEventListener("wheel",o,{passive:!1});var s=this._contextMenuHandler.bind(this);this._unsubscribeContextMenu=function(){r._target.removeEventListener("contextmenu",s)},this._target.addEventListener("contextmenu",s,{passive:!1}),this._firesTouchEvents(t)||(this._processEvent(this._makeCompatEvent(t),this._handler.mouseEnterEvent),this._acceptMouseLeave=!0)},t.prototype._resetClickTimeout=function(){null!==this._clickTimeoutId&&clearTimeout(this._clickTimeoutId),this._clickCount=0,this._clickTimeoutId=null,this._clickCoordinate={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY}},t.prototype._resetTapTimeout=function(){null!==this._tapTimeoutId&&clearTimeout(this._tapTimeoutId),this._tapCount=0,this._tapTimeoutId=null,this._tapCoordinate={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY}},t.prototype._mouseMoveHandler=function(t){this._mousePressed||null!==this._touchMoveStartCoordinate||this._firesTouchEvents(t)||(this._processEvent(this._makeCompatEvent(t),this._handler.mouseMoveEvent),this._acceptMouseLeave=!0)},t.prototype._mouseWheelHandler=function(t){if(Math.abs(t.deltaX)>Math.abs(t.deltaY)){if(!Mt(this._handler.mouseWheelHortEvent))return;if(this._preventDefault(t),0===Math.abs(t.deltaX))return;this._handler.mouseWheelHortEvent(this._makeCompatEvent(t),-t.deltaX)}else{if(!Mt(this._handler.mouseWheelVertEvent))return;var e=-t.deltaY/100;if(0===e)return;switch(this._preventDefault(t),t.deltaMode){case t.DOM_DELTA_PAGE:e*=120;break;case t.DOM_DELTA_LINE:e*=32;break}if(0!==e){var i=Math.sign(e)*Math.min(1,Math.abs(e));this._handler.mouseWheelVertEvent(this._makeCompatEvent(t),i)}}},t.prototype._contextMenuHandler=function(t){this._preventDefault(t)},t.prototype._touchMoveHandler=function(t){var e=this._touchWithId(t.changedTouches,this._activeTouchId);if(null!==e&&(this._lastTouchEventTimeStamp=this._eventTimeStamp(t),null===this._startPinchMiddleCoordinate&&!this._preventTouchDragProcess)){this._pinchPrevented=!0;var i=this._mouseTouchMoveWithDownInfo(this._getCoordinate(e),this._touchMoveStartCoordinate),n=i.xOffset,r=i.yOffset,a=i.manhattanDistance;if(this._touchMoveExceededManhattanDistance||!(a<5)){if(!this._touchMoveExceededManhattanDistance){var o=.5*n,s=r>=o&&!this._options.treatVertDragAsPageScroll(),l=o>r&&!this._options.treatHorzDragAsPageScroll();s||l||(this._preventTouchDragProcess=!0),this._touchMoveExceededManhattanDistance=!0,this._cancelTap=!0,this._clearLongTapTimeout(),this._resetTapTimeout()}this._preventTouchDragProcess||this._processEvent(this._makeCompatEvent(t,e),this._handler.touchMoveEvent)}}},t.prototype._mouseMoveWithDownHandler=function(t){if(0===t.button){var e=this._mouseTouchMoveWithDownInfo(this._getCoordinate(t),this._mouseMoveStartCoordinate),i=e.manhattanDistance;i>=5&&(this._cancelClick=!0,this._resetClickTimeout()),this._cancelClick&&this._processEvent(this._makeCompatEvent(t),this._handler.pressedMouseMoveEvent)}},t.prototype._mouseTouchMoveWithDownInfo=function(t,e){var i=Math.abs(e.x-t.x),n=Math.abs(e.y-t.y),r=i+n;return{xOffset:i,yOffset:n,manhattanDistance:r}},t.prototype._touchEndHandler=function(t){var e=this._touchWithId(t.changedTouches,this._activeTouchId);if(null===e&&0===t.touches.length&&(e=t.changedTouches[0]),null!==e){this._activeTouchId=null,this._lastTouchEventTimeStamp=this._eventTimeStamp(t),this._clearLongTapTimeout(),this._touchMoveStartCoordinate=null,null!==this._unsubscribeRootTouchEvents&&(this._unsubscribeRootTouchEvents(),this._unsubscribeRootTouchEvents=null);var i=this._makeCompatEvent(t,e);if(this._processEvent(i,this._handler.touchEndEvent),++this._tapCount,null!==this._tapTimeoutId&&this._tapCount>1){var n=this._mouseTouchMoveWithDownInfo(this._getCoordinate(e),this._tapCoordinate).manhattanDistance;n<30&&!this._cancelTap&&this._processEvent(i,this._handler.doubleTapEvent),this._resetTapTimeout()}else this._cancelTap||(this._processEvent(i,this._handler.tapEvent),Mt(this._handler.tapEvent)&&this._preventDefault(t));0===this._tapCount&&this._preventDefault(t),0===t.touches.length&&this._longTapActive&&(this._longTapActive=!1,this._preventDefault(t))}},t.prototype._mouseUpHandler=function(t){if(0===t.button){var e=this._makeCompatEvent(t);if(this._mouseMoveStartCoordinate=null,this._mousePressed=!1,null!==this._unsubscribeRootMouseEvents&&(this._unsubscribeRootMouseEvents(),this._unsubscribeRootMouseEvents=null),mr()){var i=this._target.ownerDocument.documentElement;i.removeEventListener("mouseleave",this._onFirefoxOutsideMouseUp)}if(!this._firesTouchEvents(t))if(this._processEvent(e,this._handler.mouseUpEvent),++this._clickCount,null!==this._clickTimeoutId&&this._clickCount>1){var n=this._mouseTouchMoveWithDownInfo(this._getCoordinate(t),this._clickCoordinate).manhattanDistance;n<5&&!this._cancelClick&&this._processEvent(e,this._handler.mouseDoubleClickEvent),this._resetClickTimeout()}else this._cancelClick||this._processEvent(e,this._handler.mouseClickEvent)}},t.prototype._clearLongTapTimeout=function(){null!==this._longTapTimeoutId&&(clearTimeout(this._longTapTimeoutId),this._longTapTimeoutId=null)},t.prototype._touchStartHandler=function(t){if(null===this._activeTouchId){var e=t.changedTouches[0];this._activeTouchId=e.identifier,this._lastTouchEventTimeStamp=this._eventTimeStamp(t);var i=this._target.ownerDocument.documentElement;this._cancelTap=!1,this._touchMoveExceededManhattanDistance=!1,this._preventTouchDragProcess=!1,this._touchMoveStartCoordinate=this._getCoordinate(e),null!==this._unsubscribeRootTouchEvents&&(this._unsubscribeRootTouchEvents(),this._unsubscribeRootTouchEvents=null);var n=this._touchMoveHandler.bind(this),r=this._touchEndHandler.bind(this);this._unsubscribeRootTouchEvents=function(){i.removeEventListener("touchmove",n),i.removeEventListener("touchend",r)},i.addEventListener("touchmove",n,{passive:!1}),i.addEventListener("touchend",r,{passive:!1}),this._clearLongTapTimeout(),this._longTapTimeoutId=setTimeout(this._longTapHandler.bind(this,t),500),this._processEvent(this._makeCompatEvent(t,e),this._handler.touchStartEvent),null===this._tapTimeoutId&&(this._tapCount=0,this._tapTimeoutId=setTimeout(this._resetTapTimeout.bind(this),500),this._tapCoordinate=this._getCoordinate(e))}},t.prototype._mouseDownHandler=function(t){if(2===t.button)return this._preventDefault(t),void this._processEvent(this._makeCompatEvent(t),this._handler.mouseRightClickEvent);if(0===t.button){var e=this._target.ownerDocument.documentElement;mr()&&e.addEventListener("mouseleave",this._onFirefoxOutsideMouseUp),this._cancelClick=!1,this._mouseMoveStartCoordinate=this._getCoordinate(t),null!==this._unsubscribeRootMouseEvents&&(this._unsubscribeRootMouseEvents(),this._unsubscribeRootMouseEvents=null);var i=this._mouseMoveWithDownHandler.bind(this),n=this._mouseUpHandler.bind(this);this._unsubscribeRootMouseEvents=function(){e.removeEventListener("mousemove",i),e.removeEventListener("mouseup",n)},e.addEventListener("mousemove",i),e.addEventListener("mouseup",n),this._mousePressed=!0,this._firesTouchEvents(t)||(this._processEvent(this._makeCompatEvent(t),this._handler.mouseDownEvent),null===this._clickTimeoutId&&(this._clickCount=0,this._clickTimeoutId=setTimeout(this._resetClickTimeout.bind(this),500),this._clickCoordinate=this._getCoordinate(t)))}},t.prototype._init=function(){var t=this;this._target.addEventListener("mouseenter",this._mouseEnterHandler.bind(this)),this._target.addEventListener("touchcancel",this._clearLongTapTimeout.bind(this));var e=this._target.ownerDocument,i=function(e){null!=t._handler.mouseDownOutsideEvent&&(e.composed&&t._target.contains(e.composedPath()[0])||null!==e.target&&t._target.contains(e.target)||t._handler.mouseDownOutsideEvent({x:0,y:0,pageX:0,pageY:0}))};this._unsubscribeOutsideTouchEvents=function(){e.removeEventListener("touchstart",i)},this._unsubscribeOutsideMouseEvents=function(){e.removeEventListener("mousedown",i)},e.addEventListener("mousedown",i),e.addEventListener("touchstart",i,{passive:!0}),yr()&&(this._unsubscribeMobileSafariEvents=function(){t._target.removeEventListener("dblclick",t._onMobileSafariDoubleClick)},this._target.addEventListener("dblclick",this._onMobileSafariDoubleClick)),this._target.addEventListener("mouseleave",this._mouseLeaveHandler.bind(this)),this._target.addEventListener("touchstart",this._touchStartHandler.bind(this),{passive:!0}),this._target.addEventListener("mousedown",function(t){if(1===t.button)return t.preventDefault(),!1}),this._target.addEventListener("mousedown",this._mouseDownHandler.bind(this)),this._initPinch(),this._target.addEventListener("touchmove",function(){},{passive:!1})},t.prototype._initPinch=function(){var t=this;(Mt(this._handler.pinchStartEvent)||Mt(this._handler.pinchEvent)||Mt(this._handler.pinchEndEvent))&&(this._target.addEventListener("touchstart",function(e){t._checkPinchState(e.touches)},{passive:!0}),this._target.addEventListener("touchmove",function(e){if(2===e.touches.length&&null!==t._startPinchMiddleCoordinate&&Mt(t._handler.pinchEvent)){var i=t._getTouchDistance(e.touches[0],e.touches[1]),n=i/t._startPinchDistance;t._handler.pinchEvent(X(X({},t._startPinchMiddleCoordinate),{pageX:0,pageY:0}),n),t._preventDefault(e)}},{passive:!1}),this._target.addEventListener("touchend",function(e){t._checkPinchState(e.touches)}))},t.prototype._checkPinchState=function(t){1===t.length&&(this._pinchPrevented=!1),2!==t.length||this._pinchPrevented||this._longTapActive?this._stopPinch():this._startPinch(t)},t.prototype._startPinch=function(t){var e,i=null!==(e=this._target.getBoundingClientRect())&&void 0!==e?e:{left:0,top:0};this._startPinchMiddleCoordinate={x:(t[0].clientX-i.left+(t[1].clientX-i.left))/2,y:(t[0].clientY-i.top+(t[1].clientY-i.top))/2},this._startPinchDistance=this._getTouchDistance(t[0],t[1]),Mt(this._handler.pinchStartEvent)&&this._handler.pinchStartEvent({x:0,y:0,pageX:0,pageY:0}),this._clearLongTapTimeout()},t.prototype._stopPinch=function(){null!==this._startPinchMiddleCoordinate&&(this._startPinchMiddleCoordinate=null,Mt(this._handler.pinchEndEvent)&&this._handler.pinchEndEvent({x:0,y:0,pageX:0,pageY:0}))},t.prototype._mouseLeaveHandler=function(t){var e,i,n;null===(e=this._unsubscribeMousemove)||void 0===e||e.call(this),null===(i=this._unsubscribeMouseWheel)||void 0===i||i.call(this),null===(n=this._unsubscribeContextMenu)||void 0===n||n.call(this),this._firesTouchEvents(t)||this._acceptMouseLeave&&(this._processEvent(this._makeCompatEvent(t),this._handler.mouseLeaveEvent),this._acceptMouseLeave=!yr())},t.prototype._longTapHandler=function(t){var e=this._touchWithId(t.touches,this._activeTouchId);null!==e&&(this._processEvent(this._makeCompatEvent(t,e),this._handler.longTapEvent),this._cancelTap=!0,this._longTapActive=!0)},t.prototype._firesTouchEvents=function(t){var e;return Mt(null===(e=t.sourceCapabilities)||void 0===e?void 0:e.firesTouchEvents)?t.sourceCapabilities.firesTouchEvents:this._eventTimeStamp(t)this._startScrollCoordinate.y-s.y){var d=s.x-this._startScrollCoordinate.x;c.getTimeScaleStore().scroll(d)}return!0;case ji.X_AXIS:case ji.Y_AXIS:var h=o.dispatchEvent("pressedMouseMoveEvent",s);return h&&(null===(n=s.preventDefault)||void 0===n||n.call(s),this._chart.updatePane(1)),h}}return!1},t.prototype.touchEndEvent=function(t){var e=this,i=this._findWidgetByEvent(t).widget;if(null!==i){var n=this._makeWidgetEvent(t,i),r=i.getName();switch(r){case ji.MAIN:if(i.dispatchEvent("mouseUpEvent",n),null!==this._startScrollCoordinate){var a=(new Date).getTime()-this._flingStartTime,o=n.x-this._startScrollCoordinate.x,s=o/(a>0?a:1)*20;if(a<200&&Math.abs(s)>0){var l=this._chart.getChartStore().getTimeScaleStore(),c=function(){e._flingScrollRequestId=oe(function(){l.startScroll(),l.scroll(s),s*=.975,Math.abs(s)<1?null!==e._flingScrollRequestId&&(se(e._flingScrollRequestId),e._flingScrollRequestId=null):c()})};c()}}return!0;case ji.X_AXIS:case ji.Y_AXIS:var u=i.dispatchEvent("mouseUpEvent",n);u&&this._chart.updatePane(1)}}return!1},t.prototype.tapEvent=function(t){var e=this._findWidgetByEvent(t),i=e.pane,n=e.widget,r=!1;if(null!==n){var a=this._makeWidgetEvent(t,n),o=n.dispatchEvent("mouseClickEvent",a);if(n.getName()===ji.MAIN){var s=this._makeWidgetEvent(t,n),l=this._chart.getChartStore(),c=l.getTooltipStore();o?(this._touchCancelCrosshair=!0,this._touchCoordinate=null,c.setCrosshair(void 0,{notInvalidate:!0}),r=!0):(this._touchCancelCrosshair||this._touchZoomed||(this._touchCoordinate={x:s.x,y:s.y},c.setCrosshair({x:s.x,y:s.y,paneId:null===i||void 0===i?void 0:i.getId()},{notInvalidate:!0}),r=!0),this._touchCancelCrosshair=!1)}(r||o)&&this._chart.updatePane(1)}return r},t.prototype.doubleTapEvent=function(t){return this.mouseDoubleClickEvent(t)},t.prototype.longTapEvent=function(t){var e=this._findWidgetByEvent(t),i=e.pane,n=e.widget;if(null!==n&&n.getName()===ji.MAIN){var r=this._makeWidgetEvent(t,n);return this._touchCoordinate={x:r.x,y:r.y},this._chart.getChartStore().getTooltipStore().setCrosshair({x:r.x,y:r.y,paneId:null===i||void 0===i?void 0:i.getId()}),!0}return!1},t.prototype._findWidgetByEvent=function(t){var e,i,n,r,a=t.x,o=t.y,s=this._chart.getAllSeparatorPanes(),l=this._chart.getChartStore().getStyles().separator.size;try{for(var c=j(s),u=c.next();!u.done;u=c.next()){var d=q(u.value,2),h=d[1],p=h.getBounding(),f=p.top-Math.round((qi-l)/2);if(a>=p.left&&a<=p.left+p.width&&o>=f&&o<=f+qi)return{pane:h,widget:h.getWidget()}}}catch(k){e={error:k}}finally{try{u&&!u.done&&(i=c.return)&&i.call(c)}finally{if(e)throw e.error}}var v=this._chart.getAllDrawPanes(),g=null;try{for(var m=j(v),y=m.next();!y.done;y=m.next()){var b=y.value;p=b.getBounding();if(a>=p.left&&a<=p.left+p.width&&o>=p.top&&o<=p.top+p.height){g=b;break}}}catch(A){n={error:A}}finally{try{y&&!y.done&&(r=m.return)&&r.call(m)}finally{if(n)throw n.error}}var x=null;if(null!==g){if(null===x){var _=g.getMainWidget(),w=_.getBounding();a>=w.left&&a<=w.left+w.width&&o>=w.top&&o<=w.top+w.height&&(x=_)}if(null===x){var C=g.getYAxisWidget();if(null!==C){var S=C.getBounding();a>=S.left&&a<=S.left+S.width&&o>=S.top&&o<=S.top+S.height&&(x=C)}}}return{pane:g,widget:x}},t.prototype._makeWidgetEvent=function(t,e){var i,n,r,a=null!==(i=null===e||void 0===e?void 0:e.getBounding())&&void 0!==i?i:null;return X(X({},t),{x:t.x-(null!==(n=null===a||void 0===a?void 0:a.left)&&void 0!==n?n:0),y:t.y-(null!==(r=null===a||void 0===a?void 0:a.top)&&void 0!==r?r:0)})},t.prototype.destroy=function(){this._container.removeEventListener("keydown",this._boundKeyBoardDownEvent),this._event.destroy()},t}();(function(t){t["Root"]="root",t["Main"]="main",t["YAxis"]="yAxis"})(br||(br={}));var Cr=function(){function t(t,e){this._drawPanes=[],this._separatorPanes=new Map,this._initContainer(t),this._chartEvent=new wr(this._chartContainer,this),this._chartStore=new Gi(this,e),this._initPanes(e),this.adjustPaneViewport(!0,!0,!0)}return t.prototype._initContainer=function(t){this._container=t,this._chartContainer=he("div",{position:"relative",width:"100%",outline:"none",borderStyle:"none",cursor:"crosshair",boxSizing:"border-box",userSelect:"none",webkitUserSelect:"none",msUserSelect:"none",MozUserSelect:"none",webkitTapHighlightColor:"transparent"}),this._chartContainer.tabIndex=1,t.appendChild(this._chartContainer)},t.prototype._initPanes=function(t){var e,i=this,n=null!==(e=null===t||void 0===t?void 0:t.layout)&&void 0!==e?e:[{type:"candle"}],r=!1,a=!1,o=function(t){if(!a){var e=i._createPane(pr,Vi.X_AXIS,null!==t&&void 0!==t?t:{});i._xAxisPane=e,a=!0}};n.forEach(function(t){var e,n,a;switch(t.type){case"candle":if(!r){var s=null!==(e=t.options)&&void 0!==e?e:{};wt(s,{id:Vi.CANDLE}),i._candlePane=i._createPane(rr,Vi.CANDLE,s);var l=null!==(n=t.content)&&void 0!==n?n:[];l.forEach(function(t){i.createIndicator(t,!0,s)}),r=!0}break;case"indicator":var c;l=null!==(a=t.content)&&void 0!==a?a:[];if(l.length>0)l.forEach(function(e){Mt(c)?i.createIndicator(e,!0,{id:c}):c=i.createIndicator(e,!0,t.options)});break;case"xAxis":o(t.options);break}}),o({position:"bottom"})},t.prototype._createPane=function(t,e,i){var n,r=null,a=null,o=null===i||void 0===i?void 0:i.position;switch(o){case"top":var s=this._drawPanes[0];Mt(s)&&(a=new t(this._chartContainer,s.getContainer(),this,e,null!==i&&void 0!==i?i:{}),r=0);break;case"bottom":break;default:for(var l=this._drawPanes.length-1;l>-1;l--){var c=this._drawPanes[l],u=this._drawPanes[l-1];if("bottom"===(null===c||void 0===c?void 0:c.getOptions().position)&&"bottom"!==(null===u||void 0===u?void 0:u.getOptions().position)){a=new t(this._chartContainer,c.getContainer(),this,e,null!==i&&void 0!==i?i:{}),r=l;break}}}if(Mt(a)||(a=new t(this._chartContainer,null,this,e,null!==i&&void 0!==i?i:{})),Tt(r)?(this._drawPanes.splice(r,0,a),n=r):(this._drawPanes.push(a),n=this._drawPanes.length-1),a.getId()!==Vi.X_AXIS){var d=this._drawPanes[n+1];if(Mt(d)&&d.getId()===Vi.X_AXIS&&(d=this._drawPanes[n+2]),Mt(d)){var h=this._separatorPanes.get(d);Mt(h)?h.setTopPane(a):(h=new gr(this._chartContainer,d.getContainer(),this,"",a,d),this._separatorPanes.set(d,h))}var p=this._drawPanes[n-1];if(Mt(p)&&p.getId()===Vi.X_AXIS&&(p=this._drawPanes[n-2]),Mt(p)){h=new gr(this._chartContainer,a.getContainer(),this,"",p,a);this._separatorPanes.set(a,h)}}return a},t.prototype._measurePaneHeight=function(){var t,e=this,i=Math.floor(this._container.clientHeight),n=this._chartStore.getStyles().separator.size,r=this._xAxisPane.getAxisComponent().getAutoSize(),a=i-r-this._separatorPanes.size*n;a<0&&(a=0);var o=0;this._drawPanes.forEach(function(t){if(t.getId()!==Vi.CANDLE&&t.getId()!==Vi.X_AXIS){var e=t.getBounding().height,i=t.getOptions().minHeight;ea?(o=a,e=Math.max(a-o,0)):o+=e,t.setBounding({height:e})}});var s=a-o;null===(t=this._candlePane)||void 0===t||t.setBounding({height:s}),this._xAxisPane.setBounding({height:r});var l=0;this._drawPanes.forEach(function(t){var i=e._separatorPanes.get(t);Mt(i)&&(i.setBounding({height:n,top:l}),l+=n),t.setBounding({top:l}),l+=t.getBounding().height})},t.prototype._measurePaneWidth=function(){var t=this,e=Math.floor(this._container.clientWidth),i=this._chartStore.getStyles(),n=i.yAxis,r=n.position===K.Left,a=!n.inside,o=0,s=0,l=0,c=0;this._drawPanes.forEach(function(t){t.getId()!==Vi.X_AXIS&&(s=Math.max(s,t.getAxisComponent().getAutoSize()))}),s>e&&(s=e),a?(o=e-s,r?(l=0,c=s):(l=e-s,c=0)):(o=e,c=0,l=r?0:e-s),this._chartStore.getTimeScaleStore().setTotalBarSpace(o);var u,d={width:e},h={width:o,left:c},p={width:s,left:l},f=i.separator.fill;u=a&&!f?h:d,this._drawPanes.forEach(function(e){var i;null===(i=t._separatorPanes.get(e))||void 0===i||i.setBounding(u),e.setBounding(d,h,p)})},t.prototype._setPaneOptions=function(t,e){var i,n;if(Et(t.id)){var r=this.getDrawPaneById(t.id),a=!1;if(null!==r){var o=e;if(t.id!==Vi.CANDLE&&Tt(t.height)&&t.height>0){var s=Math.max(null!==(i=t.minHeight)&&void 0!==i?i:r.getOptions().minHeight,0),l=Math.max(s,t.height);r.setBounding({height:l}),o=!0,a=!0}(Et(null===(n=t.axisOptions)||void 0===n?void 0:n.name)||Mt(t.gap))&&(o=!0),r.setOptions(t),o&&this.adjustPaneViewport(a,!0,!0,!0,!0)}}},t.prototype.getDrawPaneById=function(t){if(t===Vi.CANDLE)return this._candlePane;if(t===Vi.X_AXIS)return this._xAxisPane;var e=this._drawPanes.find(function(e){return e.getId()===t});return null!==e&&void 0!==e?e:null},t.prototype.getContainer=function(){return this._container},t.prototype.getChartStore=function(){return this._chartStore},t.prototype.getXAxisPane=function(){return this._xAxisPane},t.prototype.getAllDrawPanes=function(){return this._drawPanes},t.prototype.getAllSeparatorPanes=function(){return this._separatorPanes},t.prototype.adjustPaneViewport=function(t,e,i,n,r){t&&this._measurePaneHeight();var a=e,o=null!==n&&void 0!==n&&n,s=null!==r&&void 0!==r&&r;(o||s)&&this._drawPanes.forEach(function(t){var e=t.getAxisComponent().buildTicks(s);a||(a=e)}),a&&this._measurePaneWidth(),null!==i&&void 0!==i&&i&&(this._xAxisPane.getAxisComponent().buildTicks(!0),this.updatePane(4))},t.prototype.updatePane=function(t,e){if(Mt(e)){var i=this.getDrawPaneById(e);null===i||void 0===i||i.update(t)}else this._separatorPanes.forEach(function(e){e.update(t)}),this._drawPanes.forEach(function(e){e.update(t)})},t.prototype.crosshairChange=function(t){var e=this,i=this._chartStore.getActionStore();if(i.has(Pt.OnCrosshairChange)){var n={};this._drawPanes.forEach(function(i){var r=i.getId(),a={},o=e._chartStore.getIndicatorStore().getInstances(r);o.forEach(function(e){var i,n=e.result;a[e.name]=n[null!==(i=t.dataIndex)&&void 0!==i?i:n.length-1]}),n[r]=a}),Et(t.paneId)&&i.execute(Pt.OnCrosshairChange,X(X({},t),{indicatorData:n}))}},t.prototype.getDom=function(t,e){var i,n;if(!Et(t))return this._chartContainer;var r=this.getDrawPaneById(t);if(null!==r){var a=null!==e&&void 0!==e?e:br.Root;switch(a){case br.Root:return r.getContainer();case br.Main:return r.getMainWidget().getContainer();case br.YAxis:return null!==(n=null===(i=r.getYAxisWidget())||void 0===i?void 0:i.getContainer())&&void 0!==n?n:null}}return null},t.prototype.getSize=function(t,e){var i,n;if(!Mt(t))return{width:Math.floor(this._chartContainer.clientWidth),height:Math.floor(this._chartContainer.clientHeight),left:0,top:0,right:0,bottom:0};var r=this.getDrawPaneById(t);if(null!==r){var a=null!==e&&void 0!==e?e:br.Root;switch(a){case br.Root:return r.getBounding();case br.Main:return r.getMainWidget().getBounding();case br.YAxis:return null!==(n=null===(i=r.getYAxisWidget())||void 0===i?void 0:i.getBounding())&&void 0!==n?n:null}}return null},t.prototype.setStyles=function(t){var e,i,n;this._chartStore.setOptions({styles:t}),n=Et(t)?Ui(t):t,Mt(null===(e=null===n||void 0===n?void 0:n.yAxis)||void 0===e?void 0:e.type)&&(null===(i=this._candlePane)||void 0===i||i.getAxisComponent().setAutoCalcTickFlag(!0)),this.adjustPaneViewport(!0,!0,!0,!0,!0)},t.prototype.getStyles=function(){return this._chartStore.getStyles()},t.prototype.setLocale=function(t){this._chartStore.setOptions({locale:t}),this.adjustPaneViewport(!0,!0,!0,!0,!0)},t.prototype.getLocale=function(){return this._chartStore.getLocale()},t.prototype.setCustomApi=function(t){this._chartStore.setOptions({customApi:t}),this.adjustPaneViewport(!0,!0,!0,!0,!0)},t.prototype.setPriceVolumePrecision=function(t,e){this._chartStore.setPrecision({price:t,volume:e})},t.prototype.getPriceVolumePrecision=function(){return this._chartStore.getPrecision()},t.prototype.setTimezone=function(t){this._chartStore.setOptions({timezone:t}),this._xAxisPane.getAxisComponent().buildTicks(!0),this._xAxisPane.update(3)},t.prototype.getTimezone=function(){return this._chartStore.getTimeScaleStore().getTimezone()},t.prototype.setOffsetRightDistance=function(t){this._chartStore.getTimeScaleStore().setOffsetRightDistance(t,!0)},t.prototype.getOffsetRightDistance=function(){return this._chartStore.getTimeScaleStore().getOffsetRightDistance()},t.prototype.setMaxOffsetLeftDistance=function(t){t<0?bt("setMaxOffsetLeftDistance","distance","distance must greater than zero!!!"):this._chartStore.getTimeScaleStore().setMaxOffsetLeftDistance(t)},t.prototype.setMaxOffsetRightDistance=function(t){t<0?bt("setMaxOffsetRightDistance","distance","distance must greater than zero!!!"):this._chartStore.getTimeScaleStore().setMaxOffsetRightDistance(t)},t.prototype.setLeftMinVisibleBarCount=function(t){t<0?bt("setLeftMinVisibleBarCount","barCount","barCount must greater than zero!!!"):this._chartStore.getTimeScaleStore().setLeftMinVisibleBarCount(Math.ceil(t))},t.prototype.setRightMinVisibleBarCount=function(t){t<0?bt("setRightMinVisibleBarCount","barCount","barCount must greater than zero!!!"):this._chartStore.getTimeScaleStore().setRightMinVisibleBarCount(Math.ceil(t))},t.prototype.setBarSpace=function(t){this._chartStore.getTimeScaleStore().setBarSpace(t)},t.prototype.getBarSpace=function(){return this._chartStore.getTimeScaleStore().getBarSpace().bar},t.prototype.getVisibleRange=function(){return this._chartStore.getTimeScaleStore().getVisibleRange()},t.prototype.clearData=function(){this._chartStore.clear()},t.prototype.getDataList=function(){return this._chartStore.getDataList()},t.prototype.applyNewData=function(t,e,i){Mt(i)&&bt("applyNewData","","param `callback` has been deprecated since version 9.8.0, use `subscribeAction('onDataReady')` instead."),this._chartStore.addData(t,Kt.Init,e).then(function(){}).catch(function(){}).finally(function(){null===i||void 0===i||i()})},t.prototype.applyMoreData=function(t,e,i){bt("","","Api `applyMoreData` has been deprecated since version 9.8.0."),this._chartStore.addData(t,Kt.Forward,null===e||void 0===e||e).then(function(){}).catch(function(){}).finally(function(){null===i||void 0===i||i()})},t.prototype.updateData=function(t,e){Mt(e)&&bt("updateData","","param `callback` has been deprecated since version 9.8.0, use `subscribeAction('onDataReady')` instead."),this._chartStore.addData(t).then(function(){}).catch(function(){}).finally(function(){null===e||void 0===e||e()})},t.prototype.loadMore=function(t){bt("","","Api `loadMore` has been deprecated since version 9.8.0, use `setLoadDataCallback` instead."),this._chartStore.setLoadMoreCallback(t)},t.prototype.setLoadDataCallback=function(t){this._chartStore.setLoadDataCallback(t)},t.prototype.createIndicator=function(t,e,i,n){var r,a=this,o=Et(t)?{name:t}:t;if(null===ai(o.name))return bt("createIndicator","value","indicator not supported, you may need to use registerIndicator to add one!!!"),null;var s=null===i||void 0===i?void 0:i.id,l=this.getDrawPaneById(null!==s&&void 0!==s?s:"");if(null!==l)this._chartStore.getIndicatorStore().addInstance(o,null!==s&&void 0!==s?s:"",null!==e&&void 0!==e&&e).then(function(t){var e;a._setPaneOptions(null!==i&&void 0!==i?i:{},null!==(e=l.getAxisComponent().buildTicks(!0))&&void 0!==e&&e)}).catch(function(t){});else{null!==s&&void 0!==s||(s=de(Vi.INDICATOR));var c=this._createPane(nr,s,null!==i&&void 0!==i?i:{}),u=null!==(r=null===i||void 0===i?void 0:i.height)&&void 0!==r?r:Wi;c.setBounding({height:u}),this._chartStore.getIndicatorStore().addInstance(o,s,null!==e&&void 0!==e&&e).finally(function(){a.adjustPaneViewport(!0,!0,!0,!0,!0),null===n||void 0===n||n()})}return null!==s&&void 0!==s?s:null},t.prototype.overrideIndicator=function(t,e,i){var n=this;this._chartStore.getIndicatorStore().override(t,null!==e&&void 0!==e?e:null).then(function(t){var e=q(t,2),r=e[0],a=e[1];(r||a)&&(n.adjustPaneViewport(!1,a,!0,a),null===i||void 0===i||i())}).catch(function(){})},t.prototype.getIndicatorByPaneId=function(t,e){return this._chartStore.getIndicatorStore().getInstanceByPaneId(t,e)},t.prototype.removeIndicator=function(t,e){var i,n,r,a=this._chartStore.getIndicatorStore(),o=a.removeInstance(t,e);if(o){var s=!1;if(t!==Vi.CANDLE&&!a.hasInstances(t)){var l=this.getDrawPaneById(t),c=this._drawPanes.findIndex(function(e){return e.getId()===t});if(null!==l){s=!0;var u=this._separatorPanes.get(l);if(Mt(u)){var d=null===u||void 0===u?void 0:u.getTopPane();try{for(var h=j(this._separatorPanes),p=h.next();!p.done;p=h.next()){var f=p.value;if(f[1].getTopPane().getId()===l.getId()){f[1].setTopPane(d);break}}}catch(g){i={error:g}}finally{try{p&&!p.done&&(n=h.return)&&n.call(h)}finally{if(i)throw i.error}}u.destroy(),this._separatorPanes.delete(l)}this._drawPanes.splice(c,1),l.destroy();var v=this._drawPanes[0];Mt(v)&&v.getId()===Vi.X_AXIS&&(v=this._drawPanes[1]),null===(r=this._separatorPanes.get(v))||void 0===r||r.destroy(),this._separatorPanes.delete(v)}}this.adjustPaneViewport(s,!0,!0,!0,!0)}},t.prototype.createOverlay=function(t,e){var i=[];if(Et(t))i=[{name:t}];else if(St(t))i=t.map(function(t){return Et(t)?{name:t}:t});else{var n=t;i=[n]}var r=!0;Mt(e)&&null!==this.getDrawPaneById(e)||(e=Vi.CANDLE,r=!1);var a=this._chartStore.getOverlayStore().addInstances(i,e,r);return St(t)?a:a[0]},t.prototype.getOverlayById=function(t){return this._chartStore.getOverlayStore().getInstanceById(t)},t.prototype.overrideOverlay=function(t){this._chartStore.getOverlayStore().override(t)},t.prototype.removeOverlay=function(t){var e;Mt(t)&&(e=Et(t)?{id:t}:t),this._chartStore.getOverlayStore().removeInstance(e)},t.prototype.setPaneOptions=function(t){this._setPaneOptions(t,!1)},t.prototype.setZoomEnabled=function(t){this._chartStore.getTimeScaleStore().setZoomEnabled(t)},t.prototype.isZoomEnabled=function(){return this._chartStore.getTimeScaleStore().getZoomEnabled()},t.prototype.setScrollEnabled=function(t){this._chartStore.getTimeScaleStore().setScrollEnabled(t)},t.prototype.isScrollEnabled=function(){return this._chartStore.getTimeScaleStore().getScrollEnabled()},t.prototype.scrollByDistance=function(t,e){var i=Tt(e)&&e>0?e:0,n=this._chartStore.getTimeScaleStore();if(n.startScroll(),i>0){var r=new le({duration:i});r.doFrame(function(e){var r=t*(e/i);n.scroll(r)}),r.start()}else n.scroll(t)},t.prototype.scrollToRealTime=function(t){var e=this._chartStore.getTimeScaleStore(),i=e.getBarSpace().bar,n=e.getLastBarRightSideDiffBarCount()-e.getInitialOffsetRightDistance()/i,r=n*i;this.scrollByDistance(r,t)},t.prototype.scrollToDataIndex=function(t,e){var i=this._chartStore.getTimeScaleStore(),n=(i.getLastBarRightSideDiffBarCount()+(this.getDataList().length-1-t))*i.getBarSpace().bar;this.scrollByDistance(n,e)},t.prototype.scrollToTimestamp=function(t,e){var i=pe(this.getDataList(),"timestamp",t);this.scrollToDataIndex(i,e)},t.prototype.zoomAtCoordinate=function(t,e,i){var n=Tt(i)&&i>0?i:0,r=this._chartStore.getTimeScaleStore(),a=r.getBarSpace().bar,o=a*t,s=o-a;if(n>0){var l=0,c=new le({duration:n});c.doFrame(function(t){var i=s*(t/n),a=(i-l)/r.getBarSpace().bar*ke;r.zoom(a,e),l=i}),c.start()}else r.zoom(s/a*ke,e)},t.prototype.zoomAtDataIndex=function(t,e,i){var n=this._chartStore.getTimeScaleStore().dataIndexToCoordinate(e);this.zoomAtCoordinate(t,{x:n,y:0},i)},t.prototype.zoomAtTimestamp=function(t,e,i){var n=pe(this.getDataList(),"timestamp",e);this.zoomAtDataIndex(t,n,i)},t.prototype.convertToPixel=function(t,e){var i,n=e.paneId,r=void 0===n?Vi.CANDLE:n,a=e.absolute,o=void 0!==a&&a,s=[];if(r!==Vi.X_AXIS){var l=this.getDrawPaneById(r);if(null!==l){var c=this._chartStore.getTimeScaleStore(),u=l.getBounding(),d=(new Array).concat(t),h=this._xAxisPane.getAxisComponent(),p=l.getAxisComponent();s=d.map(function(t){var e={},i=t.dataIndex;if(Tt(t.timestamp)&&(i=c.timestampToDataIndex(t.timestamp)),Tt(i)&&(e.x=null===h||void 0===h?void 0:h.convertToPixel(i)),Tt(t.value)){var n=null===p||void 0===p?void 0:p.convertToPixel(t.value);e.y=o?u.top+n:n}return e})}}return St(t)?s:null!==(i=s[0])&&void 0!==i?i:{}},t.prototype.convertFromPixel=function(t,e){var i,n=e.paneId,r=void 0===n?Vi.CANDLE:n,a=e.absolute,o=void 0!==a&&a,s=[];if(r!==Vi.X_AXIS){var l=this.getDrawPaneById(r);if(null!==l){var c=this._chartStore.getTimeScaleStore(),u=l.getBounding(),d=(new Array).concat(t),h=this._xAxisPane.getAxisComponent(),p=l.getAxisComponent();s=d.map(function(t){var e,i,n={};if(Tt(t.x)){var r=null!==(e=null===h||void 0===h?void 0:h.convertFromPixel(t.x))&&void 0!==e?e:-1;n.dataIndex=r,n.timestamp=null!==(i=c.dataIndexToTimestamp(r))&&void 0!==i?i:void 0}if(Tt(t.y)){var a=o?t.y-u.top:t.y;n.value=p.convertFromPixel(a)}return n})}}return St(t)?s:null!==(i=s[0])&&void 0!==i?i:{}},t.prototype.executeAction=function(t,e){var i;switch(t){case Pt.OnCrosshairChange:var n=X({},e);n.paneId=null!==(i=n.paneId)&&void 0!==i?i:Vi.CANDLE,this._chartStore.getTooltipStore().setCrosshair(n,{notExecuteAction:!0});break}},t.prototype.subscribeAction=function(t,e){this._chartStore.getActionStore().subscribe(t,e)},t.prototype.unsubscribeAction=function(t,e){this._chartStore.getActionStore().unsubscribe(t,e)},t.prototype.getConvertPictureUrl=function(t,e,i){var n=this,r=this._chartContainer.clientWidth,a=this._chartContainer.clientHeight,o=he("canvas",{width:"".concat(r,"px"),height:"".concat(a,"px"),boxSizing:"border-box"}),s=o.getContext("2d"),l=Vt(o);o.width=r*l,o.height=a*l,s.scale(l,l),s.fillStyle=null!==i&&void 0!==i?i:"#FFFFFF",s.fillRect(0,0,r,a);var c=null!==t&&void 0!==t&&t;return this._drawPanes.forEach(function(t){var e=n._separatorPanes.get(t);if(Mt(e)){var i=e.getBounding();s.drawImage(e.getImage(c),i.left,i.top,i.width,i.height)}var a=t.getBounding();s.drawImage(t.getImage(c),0,a.top,r,a.height)}),o.toDataURL("image/".concat(null!==e&&void 0!==e?e:"jpeg"))},t.prototype.resize=function(){this.adjustPaneViewport(!0,!0,!0,!0,!0)},t.prototype.destroy=function(){this._chartEvent.destroy(),this._drawPanes.forEach(function(t){t.destroy()}),this._drawPanes=[],this._separatorPanes.forEach(function(t){t.destroy()}),this._separatorPanes.clear(),this._container.removeChild(this._chartContainer)},t}(),Sr=new Map,kr=1;function Ar(t,e){var i;if(_t(),i=Et(t)?document.getElementById(t):t,null===i)return xt("","","The chart cannot be initialized correctly. Please check the parameters. The chart container cannot be null and child elements need to be added!!!"),null;var n=Sr.get(i.id);if(Mt(n))return bt("","","The chart has been initialized on the dom!!!"),n;var r="k_line_chart_".concat(kr++);return n=new Cr(i,e),n.id=r,i.setAttribute("k-line-chart-id",r),Sr.set(r,n),n}var Tr=i(21396),Mr=i.n(Tr);function Ir(t,e,i,n){if(!t||!e||!i||!n)return t;try{var r=Mr().enc.Base64.parse(t),a=Mr().lib.WordArray.create(r.words.slice(0,4)),o=Mr().lib.WordArray.create(r.words.slice(4)),s=Mr().enc.Base64.parse(n),l=Mr().AES.decrypt({ciphertext:o},s,{iv:a,mode:Mr().mode.CBC,padding:Mr().pad.Pkcs7}),c=l.toString(Mr().enc.Utf8);return c||t}catch(u){return t}}function Er(t,e){return Dr.apply(this,arguments)}function Dr(){return Dr=(0,c.A)((0,l.A)().m(function t(e,i){var n,r;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e&&i){t.n=1;break}throw new Error("用户ID和指标ID不能为空");case 1:return t.p=1,t.n=2,(0,f.Ay)({url:"/api/indicator/getDecryptKey",method:"post",data:{userid:e,indicatorId:i}});case 2:if(n=t.v,1!==n.code||!n.data||!n.data.key){t.n=3;break}return t.a(2,n.data.key);case 3:throw new Error(n.msg||"获取解密密钥失败");case 4:t.n=6;break;case 5:throw t.p=5,r=t.v,new Error("无法获取解密密钥,请检查网络连接或联系管理员: "+(r.message||"未知错误"));case 6:return t.a(2)}},t,null,[[1,5]])})),Dr.apply(this,arguments)}function Pr(t,e,i){return Lr.apply(this,arguments)}function Lr(){return Lr=(0,c.A)((0,l.A)().m(function t(e,i,n){var r;return(0,l.A)().w(function(t){while(1)switch(t.n){case 0:return t.n=1,Er(i,n);case 1:return r=t.v,t.a(2,Ir(e,i,n,r))}},t)})),Lr.apply(this,arguments)}function Rr(t,e){if(1===e||!0===e)return!0;if(t&&t.length>100)try{var i=atob(t);if(i.length>50)return!0}catch(n){}return!1}var Fr={name:"KlineChart",props:{symbol:{type:String,default:""},market:{type:String,default:""},timeframe:{type:String,default:"1H"},theme:{type:String,default:"light"},activeIndicators:{type:Array,default:function(){return[]}},realtimeEnabled:{type:Boolean,default:!1},userId:{type:Number,default:null}},emits:["retry","price-change","load","indicator-toggle"],setup:function(t,e){var i=e.emit,n=(0,h.IJ)([]),r=(0,h.KR)(!1),a=(0,h.KR)(null),s=(0,h.KR)(!1),u=(0,h.KR)(!0),p=null,v=(0,h.KR)(!1),g=(0,h.IJ)(null),m=(0,h.KR)(t.theme||"light"),y=(0,h.KR)(null),x=(0,h.KR)(5e3),_=(0,h.KR)(!1),w=(0,h.KR)(1e4),C=(0,h.KR)(0),S=function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(g.value){var e=Date.now(),i=Number(w.value||1e4);(t||!C.value||e-C.value>=i)&&(C.value=e,_t())}},k=(0,h.KR)([]),A=(0,h.KR)([]),T=(0,h.KR)([]),M=(0,h.KR)(null),I=(0,h.nI)(),E=I.proxy,D=(0,h.EW)(function(){return[{name:"line",title:E.$t("dashboard.indicator.drawing.line"),icon:"line"},{name:"horizontalLine",title:E.$t("dashboard.indicator.drawing.horizontalLine"),icon:"minus"},{name:"verticalLine",title:E.$t("dashboard.indicator.drawing.verticalLine"),icon:"column-width"},{name:"ray",title:E.$t("dashboard.indicator.drawing.ray"),icon:"arrow-right"},{name:"straightLine",title:E.$t("dashboard.indicator.drawing.straightLine"),icon:"menu"},{name:"parallelStraightLine",title:E.$t("dashboard.indicator.drawing.parallelLine"),icon:"menu"},{name:"priceLine",title:E.$t("dashboard.indicator.drawing.priceLine"),icon:"dollar"},{name:"priceChannelLine",title:E.$t("dashboard.indicator.drawing.priceChannel"),icon:"border"},{name:"fibonacciLine",title:E.$t("dashboard.indicator.drawing.fibonacciLine"),icon:"rise"},{name:"measure",title:E.$t("dashboard.indicator.drawing.measure"),icon:"drag"}]}),F=(0,h.KR)([{id:"sma",name:"SMA (简单移动平均)",shortName:"SMA",type:"line",defaultParams:{length:20}},{id:"ema",name:"EMA (指数移动平均)",shortName:"EMA",type:"line",defaultParams:{length:20}},{id:"rsi",name:"RSI (相对强弱)",shortName:"RSI",type:"line",defaultParams:{length:14}},{id:"macd",name:"MACD",shortName:"MACD",type:"macd",defaultParams:{fast:12,slow:26,signal:9}},{id:"bb",name:"布林带 (Bollinger Bands)",shortName:"BB",type:"band",defaultParams:{length:20,mult:2}},{id:"atr",name:"ATR (平均真实波幅)",shortName:"ATR",type:"line",defaultParams:{period:14}},{id:"cci",name:"CCI (商品通道指数)",shortName:"CCI",type:"line",defaultParams:{length:20}},{id:"williams",name:"Williams %R (威廉指标)",shortName:"W%R",type:"line",defaultParams:{length:14}},{id:"mfi",name:"MFI (资金流量指标)",shortName:"MFI",type:"line",defaultParams:{length:14}},{id:"adx",name:"ADX (平均趋向指数)",shortName:"ADX",type:"adx",defaultParams:{length:14}},{id:"obv",name:"OBV (能量潮)",shortName:"OBV",type:"line",defaultParams:{}},{id:"adosc",name:"ADOSC (积累/派发振荡器)",shortName:"ADOSC",type:"line",defaultParams:{fast:3,slow:10}},{id:"ad",name:"AD (积累/派发线)",shortName:"AD",type:"line",defaultParams:{}},{id:"kdj",name:"KDJ (随机指标)",shortName:"KDJ",type:"line",defaultParams:{period:9,k:3,d:3}}]),B=function(e){return t.activeIndicators.some(function(t){return t.id===e})},N=function(t){if(g.value){var e={line:"segment",horizontalLine:"horizontalStraightLine",verticalLine:"verticalStraightLine",ray:"rayLine",straightLine:"straightLine",parallelStraightLine:"parallelStraightLine",priceLine:"priceLine",priceChannelLine:"priceChannelLine",fibonacciLine:"fibonacciLine",measure:"priceRangeMeasure"},i=e[t]||t;if(M.value!==t){M.value=t;try{var n=["priceRangeMeasure"];if(n.includes(i)){if("function"!==typeof g.value.overrideOverlay)return void(M.value=null);g.value.overrideOverlay({name:i,lock:!1})}else{var r={name:i,lock:!1,extendData:{isDrawing:!0}},a=g.value.createOverlay(r);a?T.value.push(a):M.value=null}}catch(o){M.value=null}}else{M.value=null;try{"function"===typeof g.value.overrideOverlay&&g.value.overrideOverlay(null)}catch(s){}}}},O=function(){if(g.value)try{T.value.forEach(function(t){try{"function"===typeof g.value.removeOverlay?g.value.removeOverlay(t):"function"===typeof g.value.removeOverlayById&&g.value.removeOverlayById(t)}catch(e){}}),T.value=[],M.value=null,"function"===typeof g.value.overrideOverlay&&g.value.overrideOverlay(null)}catch(t){}},z=function(t){var e=B(t.id);if(e)i("indicator-toggle",{action:"remove",indicator:{id:t.id}});else{var n=(0,d.A)((0,d.A)({},t),{},{params:(0,d.A)({},t.defaultParams),calculate:null});i("indicator-toggle",{action:"add",indicator:n})}},W=(0,h.KR)(null),V=(0,h.KR)(!1),$=(0,h.KR)(!1),H=(0,h.KR)(!1),K=(0,h.EW)(function(){return"dark"===m.value?{backgroundColor:"#131722",textColor:"#d1d4dc",textColorSecondary:"#787b86",borderColor:"#2a2e39",gridLineColor:"#1f2943",gridLineColorDashed:"#363c4e",tooltipBg:"rgba(25, 27, 32, 0.95)",tooltipBorder:"#333",tooltipText:"#ccc",tooltipTextSecondary:"#888",axisLabelColor:"#787b86",splitAreaColor:["rgba(250,250,250,0.05)","rgba(200,200,200,0.02)"],dataZoomBorder:"#2a2e39",dataZoomFiller:"rgba(41, 98, 255, 0.15)",dataZoomHandle:"#13c2c2",dataZoomText:"transparent",dataZoomBg:"#1f2943"}:{backgroundColor:"#fff",textColor:"#333",textColorSecondary:"#666",borderColor:"#e8e8e8",gridLineColor:"#e8e8e8",gridLineColorDashed:"#e8e8e8",tooltipBg:"rgba(255, 255, 255, 0.95)",tooltipBorder:"#e8e8e8",tooltipText:"#333",tooltipTextSecondary:"#666",axisLabelColor:"#666",splitAreaColor:["rgba(250,250,250,0.05)","rgba(200,200,200,0.02)"],dataZoomBorder:"#e8e8e8",dataZoomFiller:"rgba(24, 144, 255, 0.15)",dataZoomHandle:"#1890ff",dataZoomText:"#999",dataZoomBg:"#f0f2f5"}}),Y=function(t){return"dark"===m.value?["#13c2c2","#e040fb","#ffeb3b","#00e676","#ff6d00","#9c27b0"][t%6]:["#13c2c2","#9c27b0","#f57c00","#1976d2","#c2185b","#7b1fa2"][t%6]},X=function(){return new Promise(function(t,e){if(window.pyodide)return W.value=window.pyodide,$.value=!0,void t(window.pyodide);V.value=!0;var i="0.25.0",n=function(t){return t&&t.endsWith("/")?t:t?t+"/":t},r="/assets/pyodide/v".concat(i,"/full/"),a="https://cdn.jsdelivr.net/pyodide/v".concat(i,"/full/"),o=n({NODE_ENV:"production",VUE_APP_API_BASE_URL:"/api",VUE_APP_PREVIEW:"false",BASE_URL:"/"}.VUE_APP_PYODIDE_LOCAL_BASE||r),s=n({NODE_ENV:"production",VUE_APP_API_BASE_URL:"/api",VUE_APP_PREVIEW:"false",BASE_URL:"/"}.VUE_APP_PYODIDE_CDN_BASE||a),u=({NODE_ENV:"production",VUE_APP_API_BASE_URL:"/api",VUE_APP_PREVIEW:"false",BASE_URL:"/"}.VUE_APP_PYODIDE_PREFER_CDN||"").toString().toLowerCase(),d=!u||("true"===u||"1"===u||"yes"===u),h=function(t){return new Promise(function(e,i){var n=document.querySelector('script[data-pyodide-src="'.concat(t,'"]'));if(n)return"function"===typeof window.loadPyodide?e():(n.addEventListener("load",function(){return e()},{once:!0}),void n.addEventListener("error",function(){return i(new Error("Pyodide 脚本加载失败"))},{once:!0}));var r=document.createElement("script");r.dataset.pyodideSrc=t,r.src=t,r.onload=function(){return e()},r.onerror=function(){return i(new Error("Pyodide 脚本加载失败"))},document.head.appendChild(r)})},p=function(){var e=(0,c.A)((0,l.A)().m(function e(i){return(0,l.A)().w(function(e){while(1)switch(e.n){case 0:if("function"===typeof window.loadPyodide){e.n=1;break}throw new Error("loadPyodide 函数未找到");case 1:return e.n=2,window.loadPyodide({indexURL:i});case 2:return window.pyodide=e.v,e.n=3,window.pyodide.loadPackage(["pandas","numpy"]);case 3:W.value=window.pyodide,$.value=!0,V.value=!1,t(window.pyodide);case 4:return e.a(2)}},e)}));return function(t){return e.apply(this,arguments)}}();(0,c.A)((0,l.A)().m(function t(){var e,i,n;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e=function(){var t=(0,c.A)((0,l.A)().m(function t(e){return(0,l.A)().w(function(t){while(1)switch(t.n){case 0:return t.n=1,h(e+"pyodide.js");case 1:return t.n=2,p(e);case 2:return t.a(2)}},t)}));return function(e){return t.apply(this,arguments)}}(),t.p=1,!d){t.n=3;break}return t.n=2,e(s);case 2:t.n=4;break;case 3:return t.n=4,e(o);case 4:t.n=9;break;case 5:return t.p=5,i=t.v,t.p=6,t.n=7,e(d?o:s);case 7:t.n=9;break;case 8:throw t.p=8,n=t.v,n||i;case 9:return t.a(2)}},t,null,[[6,8],[1,5]])}))().catch(function(t){V.value=!1,H.value=!0,e(t)})})},U=function(t){if(!t||"string"!==typeof t)return null;try{var e={},i=t.match(/(\w+)\s*=\s*(\d+\.?\d*)/g);return i&&i.forEach(function(t){var i=t.split("=");if(2===i.length){var n=i[0].trim(),r=parseFloat(i[1].trim());isNaN(r)||(e[n]=r)}}),{params:e,plots:[],success:!0}}catch(n){return{params:{},plots:[],success:!1}}},G=function(){var e=(0,c.A)((0,l.A)().m(function e(i,n){var r,a,s,c,u,d,h,p,f,v,g,m,y,b,x,_,w,C,S=arguments;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(r=S.length>2&&void 0!==S[2]?S[2]:{},a=S.length>3&&void 0!==S[3]?S[3]:{},$.value&&W.value){e.n=5;break}if(!V.value){e.n=4;break}s=0;case 1:if(!(V.value&&s<30)){e.n=4;break}return e.n=2,new Promise(function(t){return setTimeout(t,500)});case 2:if(s++,!$.value||!W.value){e.n=3;break}return e.a(3,4);case 3:e.n=1;break;case 4:if($.value&&W.value){e.n=5;break}throw V.value?(V.value=!1,H.value=!0):H.value=!0,new Error("Python 引擎未就绪,请等待加载完成");case 5:if(e.p=5,c=i,u=a.is_encrypted||a.isEncrypted||0,!u&&!Rr(i,u)){e.n=11;break}if(d=a.user_id||a.userId||t.userId||r.userId,h=a.originalId||a.id||r.indicatorId,!d||!h){e.n=10;break}return e.p=6,e.n=7,Pr(c,d,h);case 7:c=e.v,e.n=9;break;case 8:throw e.p=8,_=e.v,new Error("代码解密失败,无法执行指标: "+(_.message||"未知错误"));case 9:e.n=11;break;case 10:throw new Error("缺少必要的解密参数(用户ID或指标ID),无法执行加密指标");case 11:return p=n.map(function(t){var e=t.timestamp||t.time;return e<1e10&&(e*=1e3),{time:Math.floor(e/1e3),open:parseFloat(t.open)||0,high:parseFloat(t.high)||0,low:parseFloat(t.low)||0,close:parseFloat(t.close)||0,volume:parseFloat(t.volume)||0}}),f=JSON.stringify(p),v=JSON.stringify(r||{}),g=f.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\n/g,"\\n").replace(/\r/g,"\\r"),m=v.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\n/g,"\\n").replace(/\r/g,"\\r"),y="\nimport json\nimport pandas as pd\nimport numpy as np\n\n# 递归清理 NaN 值的函数\ndef clean_nan(obj):\n if isinstance(obj, dict):\n return {k: clean_nan(v) for k, v in obj.items()}\n elif isinstance(obj, list):\n return [clean_nan(item) for item in obj]\n elif isinstance(obj, (pd.Series, np.ndarray)):\n return [None if (isinstance(x, float) and (np.isnan(x) or np.isinf(x))) else x for x in obj]\n elif isinstance(obj, (float, np.floating)):\n if np.isnan(obj) or np.isinf(obj):\n return None\n return float(obj)\n elif pd.isna(obj):\n return None\n else:\n return obj\n\n# 接收 JSON 数据\nraw_data = json.loads('".concat(g,"')\nparams = json.loads('").concat(m,"')\n\n# 将前端参数注入为指标代码可直接使用的变量(对齐回测/实盘执行环境)\n# 兼容多种命名(snake_case / camelCase)\ndef _get_param(key, default=None):\n if key in params:\n return params.get(key, default)\n # camelCase fallback\n camel = ''.join([key.split('_')[0]] + [p.capitalize() for p in key.split('_')[1:]])\n return params.get(camel, default)\n\ntry:\n leverage = float(_get_param('leverage', 1) or 1)\nexcept Exception:\n leverage = 1\n\ntrade_direction = _get_param('trade_direction', _get_param('tradeDirection', 'both')) or 'both'\n\ntry:\n initial_position = int(_get_param('initial_position', 0) or 0)\nexcept Exception:\n initial_position = 0\n\ntry:\n initial_avg_entry_price = float(_get_param('initial_avg_entry_price', 0.0) or 0.0)\nexcept Exception:\n initial_avg_entry_price = 0.0\n\ntry:\n initial_position_count = int(_get_param('initial_position_count', 0) or 0)\nexcept Exception:\n initial_position_count = 0\n\ntry:\n initial_last_add_price = float(_get_param('initial_last_add_price', 0.0) or 0.0)\nexcept Exception:\n initial_last_add_price = 0.0\n\ntry:\n initial_highest_price = float(_get_param('initial_highest_price', 0.0) or 0.0)\nexcept Exception:\n initial_highest_price = 0.0\n\n# 转换为 DataFrame\ndf = pd.DataFrame(raw_data)\n\n# 转换数据类型\ndf['open'] = df['open'].astype(float)\ndf['high'] = df['high'].astype(float)\ndf['low'] = df['low'].astype(float)\ndf['close'] = df['close'].astype(float)\ndf['volume'] = df['volume'].astype(float)\n\n# 用户代码(已解密)\n").concat(c,"\n\n# 构造输出(如果用户没有定义 output,则尝试从 result_json 获取)\nif 'output' not in locals():\n if 'result_json' in locals():\n output = json.loads(result_json)\n else:\n output = {\"plots\": []}\nelse:\n # 确保 output 是字典格式\n if isinstance(output, str):\n output = json.loads(output)\n\n# 清理 output 中的所有 NaN 值\noutput = clean_nan(output)\n\n# 返回 JSON 字符串\njson.dumps(output)\n"),e.n=12,W.value.runPythonAsync(y);case 12:if(b=e.v,b&&"string"===typeof b){e.n=13;break}throw new Error("Python 代码执行后未返回有效的 JSON 字符串,返回类型: ".concat((0,o.A)(b)));case 13:e.p=13,x=JSON.parse(b),e.n=15;break;case 14:throw e.p=14,w=e.v,new Error("JSON 解析失败: ".concat(w.message,"。可能是数据中包含 NaN 或其他无效值。"));case 15:if(x){e.n=16;break}return e.a(2,{plots:[],signals:[],calculatedVars:{}});case 16:return x.plots&&Array.isArray(x.plots)||(x.plots=[]),x.plots=x.plots.map(function(t){return t.data&&Array.isArray(t.data)&&(t.data=t.data.map(function(t){return null===t||void 0===t||"number"===typeof t&&isNaN(t)?null:t})),t}),x.signals&&Array.isArray(x.signals)&&(x.signals=x.signals.map(function(t){return t.data&&Array.isArray(t.data)&&(t.data=t.data.map(function(t){return null===t||void 0===t||"number"===typeof t&&isNaN(t)?null:t})),t})),x.calculatedVars||(x.calculatedVars={}),e.a(2,x);case 17:throw e.p=17,C=e.v,new Error("Python 执行失败: ".concat(C.message));case 18:return e.a(2)}},e,null,[[13,14],[6,8],[5,17]])}));return function(t,i){return e.apply(this,arguments)}}();function j(t,e){for(var i=[],n=0;nn-e+1){var c=(t[o-1].high+t[o-1].low+t[o-1].close)/3;s>c?r+=l:sp&&h>0?o.push(h):o.push(0),p>h&&p>0?s.push(p):s.push(0)}for(var f=[],v=[],g=[],m=0;m=e-1){var w=f[m],C=v[m],S=g[m];if(0===w?(i.push(0),n.push(0)):(i.push(C/w*100),n.push(S/w*100)),m>=e-1){var k=i[m]+n[m],A=0===k?0:Math.abs(i[m]-n[m])/k*100;if(m===e-1)r.push(A);else if(m===e){var T=Math.abs(i[m-1]-n[m-1])/(i[m-1]+n[m-1])*100;r.push((T+A)/2)}else r.push((r[m-1]*(e-1)+A)/e)}}}return{adx:r,plusDI:i,minusDI:n}}function nt(t){for(var e=[],i=0,n=0;nt[n-1].close?i+=t[n].volume:t[n].close255?12:7)},0),m=g+2*h,y=f+2*p,b=(null===(i=a.extendData)||void 0===i?void 0:i.side)||(null===(n=a.extendData)||void 0===n?void 0:n.type)||"buy",x="buy"===b,_=x?u:u-y,w=d,C=w,S=x?_:_+y;return[{type:"line",attrs:{coordinates:[{x:c,y:C},{x:c,y:S}]},styles:{style:"stroke",color:l,dashedValue:[2,2]},ignoreEvent:!0},{type:"circle",attrs:{x:c,y:w,r:4},styles:{style:"fill",color:l},ignoreEvent:!0},{type:"rect",attrs:{x:c-m/2,y:_,width:m,height:y,r:4},styles:{style:"fill",color:l,borderSize:0},ignoreEvent:!0},{type:"text",attrs:{x:c,y:_+y/2,text:v,align:"center",baseline:"middle"},styles:{color:"#ffffff",size:f,weight:"bold",backgroundColor:l,borderRadius:5},ignoreEvent:!0}]}}),Ni({name:"priceRangeMeasure",totalStep:2,lock:!1,needDefaultPointFigure:!1,needDefaultXAxisFigure:!1,needDefaultYAxisFigure:!1,createPointFigures:function(t){var e=t.coordinates,i=t.overlay,n=t.ctx;if(!e[0]||!e[1])return[];var r=i.points[0],a=i.points[1];if(!r||!a)return[];var o=r.value,s=a.value,l=s-o,c=l/o*100,u=r.timestamp,d=a.timestamp,h=Math.abs(d-u),p="",f=Math.floor(h/864e5),v=Math.floor(h%864e5/36e5),g=Math.floor(h%36e5/6e4),m=Math.floor(h%6e4/1e3);p=f>0?"".concat(f,"天").concat(v>0?v+"小时":""):v>0?"".concat(v,"小时").concat(g>0?g+"分钟":""):g>0?"".concat(g,"分钟"):"".concat(m,"秒");var y=0;try{if(n&&n.chart){var b=n.chart.getData();if(b&&Array.isArray(b)&&b.length>0){var x=b.findIndex(function(t){return Math.abs(t.timestamp-u)<1e3}),_=b.findIndex(function(t){return Math.abs(t.timestamp-d)<1e3});x>=0&&_>=0&&(y=Math.abs(_-x))}}}catch(z){}var w=c>=0?"+".concat(c.toFixed(2),"%"):"".concat(c.toFixed(2),"%"),C=l>=0?"+".concat(l.toFixed(2)):"".concat(l.toFixed(2)),S="".concat(w," ").concat(C);y>0?(S+=" (".concat(y,"根"),p&&(S+=" / ".concat(p)),S+=")"):p&&(S+=" (".concat(p,")"));var k=l>=0,A=k?"#0ecb81":"#f6465d",T=k?"#0ecb81":"#f6465d",M=k?"rgba(14, 203, 129, 0.1)":"rgba(246, 70, 93, 0.1)",I=e[0].x,E=e[0].y,D=e[1].x,P=e[1].y,L=(I+D)/2,R=(E+P)/2,F=-20,B=12,N=7*S.length+16,O=B+8;return[{type:"line",attrs:{coordinates:[{x:I,y:E},{x:D,y:P}]},styles:{style:"stroke",color:A,size:2,dashedValue:[4,4]},ignoreEvent:!1},{type:"circle",attrs:{x:I,y:E,r:4},styles:{style:"fill",color:A},ignoreEvent:!1},{type:"circle",attrs:{x:D,y:P,r:4},styles:{style:"fill",color:A},ignoreEvent:!1},{type:"rect",attrs:{x:L-N/2,y:R+F-O/2,width:N,height:O,r:4},styles:{style:"fill",color:M,borderSize:1,borderColor:A},ignoreEvent:!1},{type:"text",attrs:{x:L,y:R+F,text:S,align:"center",baseline:"middle"},styles:{color:T,size:B,weight:"bold"},ignoreEvent:!1}]}});var st=function(t){return t.map(function(t){var e=t.time||t.timestamp;return"string"===typeof e&&(e=parseInt(e)),e<1e10&&(e*=1e3),{timestamp:e,open:parseFloat(t.open),high:parseFloat(t.high),low:parseFloat(t.low),close:parseFloat(t.close),volume:parseFloat(t.volume||0)}}).filter(function(t){return t.timestamp&&!isNaN(t.open)&&!isNaN(t.high)&&!isNaN(t.low)&&!isNaN(t.close)}).sort(function(t,e){return t.timestamp-e.timestamp})},lt=function(t){if(t.length>0){var e=t[t.length-1];if(t.length>1){var n=t[t.length-2],r=e.close.toFixed(2),a=(e.close-n.close)/n.close*100;i("price-change",{price:r,change:a})}else{var o=e.close.toFixed(2);i("price-change",{price:o,change:0})}}},ct=function(t){return t.map(function(t){return{time:Math.floor(t.timestamp/1e3),open:t.open,high:t.high,low:t.low,close:t.close,volume:t.volume}})},ut=function(t,e,i){var n=new Date(1e3*t),r=new Date(1e3*e);switch(i){case"1m":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours()&&n.getMinutes()===r.getMinutes();case"5m":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours()&&Math.floor(n.getMinutes()/5)===Math.floor(r.getMinutes()/5);case"15m":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours()&&Math.floor(n.getMinutes()/15)===Math.floor(r.getMinutes()/15);case"30m":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours()&&Math.floor(n.getMinutes()/30)===Math.floor(r.getMinutes()/30);case"1H":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours();case"4H":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&Math.floor(n.getHours()/4)===Math.floor(r.getHours()/4);case"1D":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate();case"1W":var a=Math.floor((n.getTime()-new Date(n.getFullYear(),0,1).getTime())/6048e5),o=Math.floor((r.getTime()-new Date(r.getFullYear(),0,1).getTime())/6048e5);return n.getFullYear()===r.getFullYear()&&a===o;default:return t===e}},dt=function(){var e=(0,c.A)((0,l.A)().m(function e(){var i,o,s,c,d,p,v,m=arguments;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(i=m.length>0&&void 0!==m[0]&&m[0],t.symbol){e.n=1;break}return e.a(2);case 1:if(!r.value||i){e.n=2;break}return e.a(2);case 2:return r.value=!0,a.value=null,e.p=3,o=[],e.p=4,e.n=5,(0,f.Ay)({url:"/api/indicator/kline",method:"get",params:{market:t.market,symbol:t.symbol,timeframe:t.timeframe,limit:500}});case 5:if(s=e.v,1!==s.code||!s.data||!Array.isArray(s.data)){e.n=6;break}o=st(s.data),e.n=7;break;case 6:throw c=s.msg||"获取K线数据失败","tiingo_subscription"===s.hint&&(c=E.$t("dashboard.indicator.error.tiingoSubscription")||"Forex 1-minute data requires Tiingo paid subscription"),new Error(c);case 7:e.n=9;break;case 8:throw e.p=8,p=e.v,p;case 9:if(o&&0!==o.length){e.n=10;break}throw new Error("未获取到K线数据");case 10:n.value=o,u.value=!0,d=ct(o),lt(d),(0,h.dY)(function(){if(g.value){var e=n.value.filter(function(t){return t.timestamp&&!isNaN(t.open)&&!isNaN(t.high)&&!isNaN(t.low)&&!isNaN(t.close)});if(e.length>0&&g.value){try{g.value.applyNewData(e)}catch(i){g.value.applyNewData(e)}setTimeout(function(){g.value&&_t()},100)}}else mt();t.realtimeEnabled&&(gt(),vt())}),e.n=12;break;case 11:if(e.p=11,v=e.v,a.value=E.$t("dashboard.indicator.error.loadDataFailed")+": "+(v.message||E.$t("dashboard.indicator.error.loadDataFailedDesc")),n.value=[],g.value)try{g.value.applyNewData([])}catch(l){}case 12:return e.p=12,r.value=!1,e.f(12);case 13:return e.a(2)}},e,null,[[4,8],[3,11,12,13]])}));return function(){return e.apply(this,arguments)}}(),ht=function(){var e=(0,c.A)((0,l.A)().m(function e(i){return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.symbol&&n.value&&0!==n.value.length){e.n=1;break}return e.a(2);case 1:if(!s.value&&!p){e.n=6;break}if(!p){e.n=5;break}return e.p=2,e.n=3,p;case 3:e.n=5;break;case 4:e.p=4,e.v;case 5:return e.a(2);case 6:if(u.value){e.n=7;break}return g.value&&"function"===typeof g.value.noMoreData&&g.value.noMoreData(),e.a(2);case 7:return s.value=!0,p=(0,c.A)((0,l.A)().m(function e(){var r,a,o,c,d,v;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.n=1,(0,h.dY)();case 1:return e.p=1,r=Math.floor(i/1e3),e.n=2,(0,f.Ay)({url:"/api/indicator/kline",method:"get",params:{market:t.market,symbol:t.symbol,timeframe:t.timeframe,limit:500,before_time:r}});case 2:if(a=e.v,1!==a.code||!a.data||!Array.isArray(a.data)){e.n=5;break}if(o=st(a.data),0!==o.length){e.n=3;break}return u.value=!1,g.value&&"function"===typeof g.value.noMoreData&&g.value.noMoreData(),e.a(2);case 3:if(c=o.filter(function(t){return t.timestamp0&&(r=st(i.data),a=(0,R.A)(n.value),r.length>0&&(o=Math.floor(r[r.length-1].timestamp/1e3),s=Math.floor(a[a.length-1].timestamp/1e3),ut(o,s,t.timeframe)?(c=a[a.length-1],u=r[r.length-1],a[a.length-1]={timestamp:c.timestamp,open:c.open,high:Math.max(c.high,u.high),low:Math.min(c.low,u.low),close:u.close,volume:u.volume},n.value=a,d=ct(n.value),lt(d),g.value&&"function"===typeof g.value.updateData?(h=n.value.length-1,g.value.updateData(a[h]),S(!1)):g.value&&(g.value.applyNewData(n.value),S(!1))):o>s&&(p=r.filter(function(e){var i=Math.floor(e.timestamp/1e3);return!a.some(function(e){var n=Math.floor(e.timestamp/1e3);return ut(i,n,t.timeframe)})}),p.length>0&&(n.value=[].concat((0,R.A)(a),(0,R.A)(p)),n.value.length>500&&(n.value=n.value.slice(-500)),v=ct(n.value),lt(v),g.value&&"function"===typeof g.value.applyMoreData?(g.value.applyMoreData(p),S(!0)):g.value&&(g.value.applyNewData(n.value),S(!0)))))),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.a(2)}},e,null,[[1,3]])}));return function(){return e.apply(this,arguments)}}(),vt=function(){y.value&&clearInterval(y.value);var e={"1m":5e3,"5m":1e4,"15m":15e3,"30m":3e4,"1H":6e4,"4H":3e5,"1D":6e5,"1W":18e5},i=e[t.timeframe]||1e4;x.value=Math.min(i,1e3),t.realtimeEnabled&&t.symbol&&n.value.length>0&&(y.value=setInterval(function(){!r.value&&t.symbol&&n.value&&n.value.length>0&&ft()},x.value))},gt=function(){y.value&&(clearInterval(y.value),y.value=null)},mt=function(){var t=document.getElementById("kline-chart-container");if(t)if(0!==t.clientWidth&&0!==t.clientHeight){if(g.value){try{g.value.destroy()}catch(y){}g.value=null}try{var e=document.getElementById("kline-chart-container");if(!e)throw new Error("容器元素不存在");try{g.value=Ar(e,{drawingBarVisible:!0,overlay:{visible:!0}})}catch(y){g.value=Ar(e)}if(g.value&&"function"===typeof g.value.setDrawingBarVisible?g.value.setDrawingBarVisible(!0):g.value&&"function"===typeof g.value.setDrawingBar?g.value.setDrawingBar(!0):g.value&&"function"===typeof g.value.enableDrawing&&g.value.enableDrawing(!0),!g.value)throw new Error("图表初始化失败:无法创建图表实例");if(g.value&&("function"===typeof g.value.setDrawingBarVisible&&g.value.setDrawingBarVisible(!0),"function"===typeof g.value.setDrawingBar&&g.value.setDrawingBar(!0),"function"===typeof g.value.enableDrawing&&g.value.enableDrawing(!0)),bt(),g.value&&"function"===typeof g.value.subscribeAction){if(g.value.subscribeAction("onOverlayCreated",function(t){if(M.value&&t&&t.id){var e={line:"segment",horizontalLine:"horizontalStraightLine",verticalLine:"verticalStraightLine",ray:"rayLine",straightLine:"straightLine",parallelStraightLine:"parallelStraightLine",priceLine:"priceLine",priceChannelLine:"priceChannelLine",fibonacciLine:"fibonacciLine",measure:"priceRangeMeasure"},i=e[M.value];if(!t.name||t.name===i||"priceRangeMeasure"===i){T.value.push(t.id),M.value=null;try{"function"===typeof g.value.overrideOverlay&&g.value.overrideOverlay(null)}catch(y){}}}}),"function"===typeof g.value.subscribeAction)try{g.value.subscribeAction("onOverlayComplete",function(t){M.value&&t&&t.id&&(T.value.push(t.id),M.value=null)})}catch(y){}g.value.subscribeAction("onOverlayRemoved",function(t){var e=T.value.indexOf(t);e>-1&&T.value.splice(e,1)})}if(g.value&&"function"===typeof g.value.subscribeAction){var i=null,r=!1;g.value.subscribeAction("onVisibleRangeChange",function(){var t=(0,c.A)((0,l.A)().m(function t(e){var a,o,c,d,h,f;return(0,l.A)().w(function(t){while(1)switch(t.n){case 0:if(!e||"number"!==typeof e.from){t.n=5;break}if(r){t.n=1;break}return i=e.from,r=!0,setTimeout(function(){v.value=!0},1e3),t.a(2);case 1:if(v.value){t.n=2;break}return i=e.from,t.a(2);case 2:if(!(s.value&&e.from<=0)){t.n=3;break}try{g.value&&"function"===typeof g.value.setVisibleRange&&(a=n.value.length,a>0&&(o=g.value.getVisibleRange(),o&&(c=Math.ceil((o.to-o.from)*a/100),d=.1,h=Math.min(100,d+c/a*100),g.value.setVisibleRange(d,h))))}catch(y){}return t.a(2);case 3:if(!(e.from<=5&&!s.value&&!p&&u.value&&v.value)){t.n=4;break}if(!(null!==i&&i>e.from)){t.n=4;break}if(!(n.value.length>0)){t.n=4;break}return f=n.value[0].timestamp,t.n=4,ht(f);case 4:i=e.from;case 5:return t.a(2)}},t)}));return function(e){return t.apply(this,arguments)}}())}if(n.value&&n.value.length>0){var o=n.value.filter(function(t){return t.timestamp&&!isNaN(t.open)&&!isNaN(t.high)&&!isNaN(t.low)&&!isNaN(t.close)});if(o.length>0){try{g.value.applyNewData(o)}catch(y){try{g.value.applyNewData(o)}catch(b){}}try{g.value.createIndicator("VOL",!1,{height:100,dragEnabled:!0})}catch(y){}(0,h.dY)(function(){_t()})}}window.addEventListener("resize",yt)}catch(a){a.value=E.$t("dashboard.indicator.error.chartInitFailed")+": "+(a.message||"未知错误")}}else{var d=0,f=10,m=function(){var t=document.getElementById("kline-chart-container");t&&t.clientWidth>0&&t.clientHeight>0?mt():d0&&t.clientHeight>0&&mt()}},bt=function(){if(g.value){var t=K.value,e="dark"===m.value;g.value.setStyles({grid:{show:!0,horizontal:{show:!0,color:t.gridLineColor,style:"dashed",size:1},vertical:{show:!1}},candle:{priceMark:{show:!0,high:{show:!0,color:t.axisLabelColor},low:{show:!0,color:t.axisLabelColor}},tooltip:{showRule:"always",showType:"standard",labels:[E.$t("dashboard.indicator.tooltip.time"),E.$t("dashboard.indicator.tooltip.open"),E.$t("dashboard.indicator.tooltip.high"),E.$t("dashboard.indicator.tooltip.low"),E.$t("dashboard.indicator.tooltip.close"),E.$t("dashboard.indicator.tooltip.volume")],values:function(t){var e=new Date(t.timestamp);return["".concat(e.getFullYear(),"-").concat(e.getMonth()+1,"-").concat(e.getDate()," ").concat(e.getHours(),":").concat(e.getMinutes()),t.open.toFixed(2),t.high.toFixed(2),t.low.toFixed(2),t.close.toFixed(2),t.volume.toFixed(0)]}},bar:{upColor:e?"#0ecb81":"#13c2c2",downColor:e?"#f6465d":"#fa541c",noChangeColor:t.borderColor}},indicator:{tooltip:{showRule:"always",showType:"standard"}},xAxis:{show:!0,axisLine:{show:!0,color:t.borderColor}},yAxis:{show:!0,axisLine:{show:!1}},crosshair:{show:!0,horizontal:{show:!0,line:{show:!0,style:"dashed",color:t.gridLineColor,size:1}},vertical:{show:!0,line:{show:!0,style:"dashed",color:t.gridLineColor,size:1}}},watermark:{show:!1}})}},xt=function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:2,a=arguments.length>5&&void 0!==arguments[5]&&arguments[5];try{var o={name:t,shortName:t,calc:e,figures:i,calcParams:n,precision:r,series:a?"price":"normal"};return ri(o),!0}catch(s){return!(!s.message||!s.message.includes("already registered"))}},_t=function(){var e=(0,c.A)((0,l.A)().m(function e(){var i,r,a,o;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!_.value){e.n=1;break}return e.a(2);case 1:if(g.value&&0!==n.value.length){e.n=2;break}return e.a(2);case 2:_.value=!0,e.p=3;try{A.value.length>0&&g.value&&(A.value.forEach(function(t){try{"function"===typeof g.value.removeOverlay?g.value.removeOverlay(t):"function"===typeof g.value.removeOverlayById&&g.value.removeOverlayById(t)}catch(e){}}),A.value=[])}catch(s){}try{k.value.length>0&&(k.value.forEach(function(t){var e="string"===typeof t?t:t.name,i="string"===typeof t?void 0:t.paneId;i?g.value.removeIndicator(i,e):(g.value.removeIndicator("candle_pane",e),g.value.removeIndicator(e))}),k.value=[])}catch(s){}i=ct(n.value),r=(0,l.A)().m(function e(){var n,r,a,s,c,u,d,h,p,f,v,m,y,x,_,w,C,S,T,M,I,E,D,P,F,B,N,O,z,W,$,K,X,U,st,lt,ct,ut,dt,ht,pt,ft,vt,gt,mt,yt,bt,_t,wt,Ct,St,kt,At,Tt,Mt,It,Et,Dt,Pt,Lt,Rt,Ft,Bt,Nt,Ot,zt,Wt,Vt,$t,Ht,Kt,Yt,Xt,Ut,Gt,jt,qt,Zt,Jt,Qt,te,ee,ie,ne,re,ae,oe,se,le,ce,ue,de,he,pe,fe,ve,ge,me,ye,be,xe,_e,we,Ce,Se,ke,Ae,Te,Me,Ie,Ee,De,Pe,Le,Re,Fe,Be,Ne,Oe,ze,We,Ve,$e,He,Ke,Ye,Xe,Ue,Ge,je,qe,Ze,Je,Qe,ti,ei,ii,ni,ri,ai,oi,si,li,ci,ui,di,hi,pi,fi,vi,gi,mi,yi,bi;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(n=t.activeIndicators[o],e.p=1,"python"!==n.type){e.n=31;break}if(n.code){e.n=2;break}return e.a(2,0);case 2:if(e.p=2,!n.calculate||"function"!==typeof n.calculate){e.n=15;break}return e.n=3,n.calculate(i,n.params||{});case 3:if(r=e.v,a=[],r&&r.plots&&Array.isArray(r.plots)&&(a=(0,R.A)(r.plots)),!(r&&r.signals&&Array.isArray(r.signals))){e.n=14;break}s=(0,b.A)(r.signals),e.p=4,s.s();case 5:if((c=s.n()).done){e.n=11;break}if(u=c.value,!(u.data&&Array.isArray(u.data)&&u.data.length>0)){e.n=10;break}for(d=[],h=0;h0&&g.value){E=(0,b.A)(f);try{for(E.s();!(D=E.n()).done;){P=D.value;try{F=P.timestamp,F<1e10&&(F*=1e3),B=P.text,"function"===typeof g.value.createOverlay&&(N=g.value.createOverlay({name:"signalTag",points:[{timestamp:F,value:P.price},{timestamp:F,value:P.anchorPrice}],extendData:{text:B,color:P.color,side:P.side,action:P.action,price:P.price},lock:!0},"candle_pane"),N&&A.value.push(N))}catch(l){}}}catch(xi){E.e(xi)}finally{E.f()}}case 10:e.n=5;break;case 11:e.n=13;break;case 12:e.p=12,mi=e.v,s.e(mi);case 13:return e.p=13,s.f(),e.f(13);case 14:if(a.length>0&&(O=a.filter(function(t){return t.data&&Array.isArray(t.data)&&t.data.length>0}),O.length>0)){for(z=[],W={},$=0;$0)){e.n=23;break}for(_t=[],wt=0;wt0&&g.value){Bt=(0,b.A)(St);try{for(Bt.s();!(Nt=Bt.n()).done;){Ot=Nt.value;try{zt=Ot.timestamp,zt<1e10&&(zt*=1e3),Wt=Ot.text,"function"===typeof g.value.createOverlay&&(Vt=g.value.createOverlay({name:"signalTag",points:[{timestamp:zt,value:Ot.price},{timestamp:zt,value:Ot.anchorPrice}],extendData:{text:Wt,color:Ot.color,side:Ot.side,action:Ot.action,price:Ot.price},lock:!0},"candle_pane"),Vt&&A.value.push(Vt))}catch(l){}}}catch(xi){Bt.e(xi)}finally{Bt.f()}}case 23:e.n=18;break;case 24:e.n=26;break;case 25:e.p=25,yi=e.v,mt.e(yi);case 26:return e.p=26,mt.f(),e.f(26);case 27:if(gt.length>0&&($t=gt.filter(function(t){return t.data&&Array.isArray(t.data)&&t.data.length>0}),$t.length>0)){for(Ht=[],Kt={},Yt=0;Yt<$t.length;Yt++)Xt=$t[Yt],Ut=Xt.name||"PLOT_".concat(Yt),Gt=Ut.toLowerCase().replace(/\s+/g,"_").replace(/[^a-z0-9_]/g,"_"),jt=Xt.color||Y(Yt),qt=Xt.type||"line",Ht.push({key:Gt,title:Xt.name||Ut,type:qt,color:jt}),Kt[Gt]=Xt.data;Zt=$t.every(function(t){return!1!==t.overlay}),Jt="".concat(n.id,"_combined"),vt&&vt.name&&(Jt=vt.name);try{Qt=xt(Jt,function(t){for(var e=[],i=0;i0&&(0,h.dY)(function(){g.value&&_t()})},{deep:!0}),(0,h.wB)(function(){return t.realtimeEnabled},function(t){t?vt():gt()}),(0,h.sV)((0,c.A)((0,l.A)().m(function e(){return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.n=1,(0,h.dY)();case 1:return!t.theme||"dark"!==t.theme&&"light"!==t.theme||(m.value=t.theme),e.p=2,e.n=3,X();case 3:e.n=5;break;case 4:e.p=4,e.v,H.value=!0;case 5:(0,h.dY)(function(){setTimeout(function(){!g.value&&t.symbol&&mt()},300)});case 6:return e.a(2)}},e,null,[[2,4]])}))),(0,h.xo)(function(){gt(),g.value&&(g.value.destroy(),g.value=null),window.removeEventListener("resize",yt)}),{klineData:n,loading:r,error:a,loadingHistory:s,chartRef:g,chartTheme:m,themeConfig:K,getIndicatorColor:Y,handleRetry:wt,loadingPython:V,pythonReady:$,pyodideLoadFailed:H,formatKlineData:st,updatePricePanel:lt,isSameTimeframe:ut,loadKlineData:dt,loadMoreHistoryData:pt,updateKlineRealtime:ft,startRealtime:vt,stopRealtime:gt,initChart:mt,handleResize:yt,updateChartTheme:bt,updateIndicators:_t,executePythonStrategy:G,parsePythonStrategy:U,indicatorButtons:F,isIndicatorActive:B,toggleIndicator:z,drawingTools:D,activeDrawingTool:M,selectDrawingTool:N,clearAllDrawings:O}}},Br=Fr,Nr=(0,T.A)(Br,E,D,!1,null,"5f0b12e1",null),Or=Nr.exports,zr=function(){var t=this,e=t._self._c;return e("a-modal",{staticClass:"backtest-modal",attrs:{title:t.$t("dashboard.indicator.backtest.title"),visible:t.visible,width:1100,maskClosable:!1},on:{cancel:t.handleCancel}},[e("div",{staticClass:"backtest-content"},[e("a-steps",{staticStyle:{"margin-bottom":"16px"},attrs:{current:t.currentStep,size:"small"}},[e("a-step",{attrs:{title:t.$t("dashboard.indicator.backtest.steps.strategy.title"),description:t.$t("dashboard.indicator.backtest.steps.strategy.desc")}}),e("a-step",{attrs:{title:t.$t("dashboard.indicator.backtest.steps.trading.title"),description:t.$t("dashboard.indicator.backtest.steps.trading.desc")}}),e("a-step",{attrs:{title:t.$t("dashboard.indicator.backtest.steps.results.title"),description:t.$t("dashboard.indicator.backtest.steps.results.desc")}})],1),e("div",{directives:[{name:"show",rawName:"v-show",value:2!==t.currentStep,expression:"currentStep !== 2"}],staticClass:"config-section"},[e("a-form",{attrs:{form:t.form,"label-col":t.labelCol,"wrapper-col":t.wrapperCol}},[e("div",{directives:[{name:"show",rawName:"v-show",value:0===t.currentStep,expression:"currentStep === 0"}]},[e("a-collapse",{staticStyle:{background:"#fafafa"},attrs:{bordered:!1},model:{value:t.step1CollapseKeys,callback:function(e){t.step1CollapseKeys=e},expression:"step1CollapseKeys"}},[e("a-collapse-panel",{key:"risk",attrs:{header:t.$t("dashboard.indicator.backtest.panel.risk")}},[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.stopLossPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["stopLossPct",{initialValue:0}],expression:"['stopLossPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.01,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.takeProfitPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["takeProfitPct",{initialValue:0}],expression:"['takeProfitPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trailingEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailingEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['trailingEnabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:t.onTrailingToggle}})],1)],1),e("a-col",{attrs:{span:12}})],1),t.trailingEnabledUi?[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trailingStopPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailingStopPct",{initialValue:0}],expression:"['trailingStopPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.01,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trailingActivationPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailingActivationPct",{initialValue:0}],expression:"['trailingActivationPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1)]:t._e()],2),e("a-collapse-panel",{key:"scale",attrs:{header:t.$t("dashboard.indicator.backtest.panel.scale")}},[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendAddEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendAddEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['trendAddEnabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:t.onTrendAddToggle}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.dcaAddEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["dcaAddEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['dcaAddEnabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:t.onDcaAddToggle}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendAddStepPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendAddStepPct",{initialValue:0}],expression:"['trendAddStepPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4},on:{change:t.onScaleParamsChange}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.dcaAddStepPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dcaAddStepPct",{initialValue:0}],expression:"['dcaAddStepPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4},on:{change:t.onScaleParamsChange}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendAddSizePct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendAddSizePct",{initialValue:0}],expression:"['trendAddSizePct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4},on:{change:t.onScaleParamsChange}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.dcaAddSizePct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dcaAddSizePct",{initialValue:0}],expression:"['dcaAddSizePct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4},on:{change:t.onScaleParamsChange}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendAddMaxTimes")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendAddMaxTimes",{initialValue:0}],expression:"['trendAddMaxTimes', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:50,step:1,precision:0},on:{change:t.onScaleParamsChange}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.dcaAddMaxTimes")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dcaAddMaxTimes",{initialValue:0}],expression:"['dcaAddMaxTimes', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:50,step:1,precision:0},on:{change:t.onScaleParamsChange}})],1)],1)],1)],1),e("a-collapse-panel",{key:"reduce",attrs:{header:t.$t("dashboard.indicator.backtest.panel.reduce")}},[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendReduceEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendReduceEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['trendReduceEnabled', { valuePropName: 'checked', initialValue: false }]"}]})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.adverseReduceEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverseReduceEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['adverseReduceEnabled', { valuePropName: 'checked', initialValue: false }]"}]})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendReduceStepPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendReduceStepPct",{initialValue:0}],expression:"['trendReduceStepPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.adverseReduceStepPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverseReduceStepPct",{initialValue:0}],expression:"['adverseReduceStepPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendReduceSizePct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendReduceSizePct",{initialValue:0}],expression:"['trendReduceSizePct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.adverseReduceSizePct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverseReduceSizePct",{initialValue:0}],expression:"['adverseReduceSizePct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendReduceMaxTimes")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendReduceMaxTimes",{initialValue:0}],expression:"['trendReduceMaxTimes', { initialValue: 0 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:50,step:1,precision:0}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.adverseReduceMaxTimes")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverseReduceMaxTimes",{initialValue:0}],expression:"['adverseReduceMaxTimes', { initialValue: 0 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:50,step:1,precision:0}})],1)],1)],1)],1),e("a-collapse-panel",{key:"position",attrs:{header:t.$t("dashboard.indicator.backtest.panel.position")}},[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.entryPct"),help:t.$t("dashboard.indicator.backtest.hint.entryPctMax",{maxPct:Number(t.entryPctMaxUi||0).toFixed(0)})}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["entryPct",{initialValue:100}],expression:"['entryPct', { initialValue: 100 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:t.entryPctMaxUi,step:.1,precision:4},on:{change:t.onEntryPctChange}})],1)],1),e("a-col",{attrs:{span:12}})],1)],1)],1)],1),e("div",{directives:[{name:"show",rawName:"v-show",value:1===t.currentStep,expression:"currentStep === 1"}]},[e("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:t.combinedAlertType,"show-icon":""}},[e("template",{slot:"message"},[e("div",{staticStyle:{display:"flex","align-items":"center","flex-wrap":"wrap",gap:"8px"}},[e("span",[e("strong",[t._v("Symbol:")]),t._v(" "+t._s(t.symbol||"-")+" "),e("span",{staticStyle:{color:"#999",margin:"0 6px"}},[t._v("|")]),e("strong",[t._v("Market:")]),t._v(" "+t._s(t.market||"-")+" "),e("span",{staticStyle:{color:"#999",margin:"0 6px"}},[t._v("|")]),e("strong",[t._v("Timeframe:")]),t._v(" "+t._s(t.selectedTimeframe||t.timeframe||"-")+" ")]),t.precisionInfo&&t.precisionInfo.enabled?e("span",{staticStyle:{"margin-left":"12px","border-left":"1px solid #d9d9d9","padding-left":"12px"}},[e("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"high"===t.precisionInfo.precision?"thunderbolt":"clock-circle"}}),t._v(" "+t._s(t.$t("dashboard.indicator.backtest.precisionMode"))+": "),e("a-tag",{staticStyle:{"margin-left":"4px"},attrs:{color:"high"===t.precisionInfo.precision?"green":"blue",size:"small"}},[t._v(" "+t._s(t.precisionInfo.timeframe)+" ")]),e("span",{staticStyle:{color:"#666","margin-left":"6px"}},[t._v(" ("+t._s(t.$t("dashboard.indicator.backtest.estimatedCandles",{count:t.precisionInfo.estimated_candles?t.precisionInfo.estimated_candles.toLocaleString():"-"}))+") ")])],1):t.precisionInfo&&!t.precisionInfo.enabled&&t.market&&"crypto"===t.market.toLowerCase()?e("span",{staticStyle:{"margin-left":"12px","border-left":"1px solid #d9d9d9","padding-left":"12px",color:"#faad14"}},[e("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"warning"}}),t._v(" "+t._s(t.$t("dashboard.indicator.backtest.standardModeWarning"))+" ")],1):t._e()])]),e("template",{slot:"description"},[t.precisionInfo&&t.precisionInfo.enabled?e("span",{staticStyle:{"font-size":"12px",color:"#888"}},[t._v(" "+t._s("high"===t.precisionInfo.precision?t.$t("dashboard.indicator.backtest.highPrecisionDesc"):t.$t("dashboard.indicator.backtest.mediumPrecisionDesc"))+" ")]):t.precisionInfo&&!t.precisionInfo.enabled&&t.market&&"crypto"===t.market.toLowerCase()?e("span",{staticStyle:{"font-size":"12px",color:"#888"}},[t._v(" "+t._s(t.precisionInfo.message||t.$t("dashboard.indicator.backtest.standardModeDesc"))+" ")]):t._e()])],2),e("div",{staticClass:"date-quick-select",staticStyle:{"margin-bottom":"12px"}},[e("span",{staticStyle:{"margin-right":"8px",color:"#666","font-size":"13px"}},[t._v(t._s(t.$t("dashboard.indicator.backtest.quickSelect")||"快速选择")+":")]),e("a-button-group",{attrs:{size:"small"}},t._l(t.datePresets,function(i){return e("a-button",{key:i.key,attrs:{type:t.selectedDatePreset===i.key?"primary":"default"},on:{click:function(e){return t.applyDatePreset(i)}}},[t._v(t._s(i.label))])}),1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.startDate")}},[e("a-date-picker",{directives:[{name:"decorator",rawName:"v-decorator",value:["startDate",{rules:[{required:!0,message:t.$t("dashboard.indicator.backtest.startDateRequired")}],initialValue:t.defaultStartDate}],expression:"['startDate', { rules: [{ required: true, message: $t('dashboard.indicator.backtest.startDateRequired') }], initialValue: defaultStartDate }]"}],staticStyle:{width:"100%"},attrs:{"disabled-date":t.disabledStartDate,placeholder:t.$t("dashboard.indicator.backtest.selectStartDate")},on:{change:t.onDateChange}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.endDate")}},[e("a-date-picker",{directives:[{name:"decorator",rawName:"v-decorator",value:["endDate",{rules:[{required:!0,message:t.$t("dashboard.indicator.backtest.endDateRequired")}],initialValue:t.defaultEndDate}],expression:"['endDate', { rules: [{ required: true, message: $t('dashboard.indicator.backtest.endDateRequired') }], initialValue: defaultEndDate }]"}],staticStyle:{width:"100%"},attrs:{"disabled-date":t.disabledEndDate,placeholder:t.$t("dashboard.indicator.backtest.selectEndDate")},on:{change:t.onDateChange}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.initialCapital")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["initialCapital",{rules:[{required:!0,message:t.$t("dashboard.indicator.backtest.initialCapitalRequired")}],initialValue:1e4}],expression:"['initialCapital', { rules: [{ required: true, message: $t('dashboard.indicator.backtest.initialCapitalRequired') }], initialValue: 10000 }]"}],staticStyle:{width:"100%"},attrs:{min:1e3,step:1e4,precision:2,formatter:function(t){return"$ ".concat(t).replace(/\B(?=(\d{3})+(?!\d))/g,",")},parser:function(t){return t.replace(/\$\s?|(,*)/g,"")}}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.commission")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["commission",{initialValue:.02}],expression:"['commission', { initialValue: 0.02 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:10,step:.01,precision:4}}),e("div",{staticClass:"field-hint"},[t._v(t._s(t.$t("dashboard.indicator.backtest.commissionHint")))])],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.slippage")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["slippage",{initialValue:0}],expression:"['slippage', { initialValue: 0 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:10,step:.01,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.leverage")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["leverage",{initialValue:1}],expression:"['leverage', { initialValue: 1 }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:125,step:1,precision:0,formatter:function(t){return"".concat(t,"x")},parser:function(t){return t.replace("x","")}}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.tradeDirection")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["tradeDirection",{initialValue:"long"}],expression:"['tradeDirection', { initialValue: 'long' }]"}],staticStyle:{width:"100%"}},[e("a-select-option",{attrs:{value:"long"}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.longOnly"))+" ")]),e("a-select-option",{attrs:{value:"short"}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.shortOnly"))+" ")]),e("a-select-option",{attrs:{value:"both"}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.both"))+" ")])],1)],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.timeframe")}},[e("a-select",{staticStyle:{width:"100%"},on:{change:t.onTimeframeChange},model:{value:t.selectedTimeframe,callback:function(e){t.selectedTimeframe=e},expression:"selectedTimeframe"}},[e("a-select-option",{attrs:{value:"1m"}},[t._v("1m")]),e("a-select-option",{attrs:{value:"5m"}},[t._v("5m")]),e("a-select-option",{attrs:{value:"15m"}},[t._v("15m")]),e("a-select-option",{attrs:{value:"30m"}},[t._v("30m")]),e("a-select-option",{attrs:{value:"1H"}},[t._v("1H")]),e("a-select-option",{attrs:{value:"4H"}},[t._v("4H")]),e("a-select-option",{attrs:{value:"1D"}},[t._v("1D")]),e("a-select-option",{attrs:{value:"1W"}},[t._v("1W")])],1)],1)],1)],1)],1)])],1),e("div",{directives:[{name:"show",rawName:"v-show",value:2===t.currentStep&&t.hasResult,expression:"currentStep === 2 && hasResult"}],staticClass:"result-section"},[t.backtestRunId?e("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"success","show-icon":"",message:t.$t("dashboard.indicator.backtest.savedRunId",{id:t.backtestRunId})}}):t._e(),e("div",{staticClass:"metrics-cards"},[e("div",{staticClass:"metric-card",class:{positive:t.result.totalReturn>0,negative:t.result.totalReturn<0}},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.totalReturn")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.result.totalReturn)))]),e("div",{staticClass:"metric-amount"},[t._v(t._s(t.formatMoney(t.result.totalProfit)))])]),e("div",{staticClass:"metric-card",class:{positive:t.result.annualReturn>0,negative:t.result.annualReturn<0}},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.annualReturn")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.result.annualReturn)))])]),e("div",{staticClass:"metric-card negative"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.maxDrawdown")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.result.maxDrawdown)))])]),e("div",{staticClass:"metric-card"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.sharpeRatio")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.result.sharpeRatio.toFixed(2)))])]),e("div",{staticClass:"metric-card"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.winRate")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.result.winRate)))])]),e("div",{staticClass:"metric-card",class:{positive:t.result.profitFactor>=1.5,negative:t.result.profitFactor<1}},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.profitFactor")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.result.profitFactor.toFixed(2)))])]),e("div",{staticClass:"metric-card"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.totalTrades")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.result.totalTrades))])]),e("div",{staticClass:"metric-card negative"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.totalCommission")))]),e("div",{staticClass:"metric-value"},[t._v("-$"+t._s(t.result.totalCommission?t.result.totalCommission.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"))])])]),e("div",{staticClass:"chart-section"},[e("div",{staticClass:"chart-title"},[t._v(t._s(t.$t("dashboard.indicator.backtest.equityCurve")))]),e("div",{ref:"equityChartRef",staticClass:"equity-chart"})]),e("div",{staticClass:"trades-section"},[e("div",{staticClass:"chart-title"},[t._v(t._s(t.$t("dashboard.indicator.backtest.tradeHistory")))]),e("a-table",{attrs:{columns:t.tradeColumns,"data-source":t.result.trades,pagination:{pageSize:5,size:"small"},size:"small",scroll:{x:600}},scopedSlots:t._u([{key:"type",fn:function(i){return[e("a-tag",{attrs:{color:t.getTradeTypeColor(i)}},[t._v(" "+t._s(t.getTradeTypeText(i))+" ")])]}},{key:"balance",fn:function(i){return[e("span",{staticStyle:{color:"#1890ff","font-weight":"500"}},[t._v(" $"+t._s(i?i.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"--")+" ")])]}},{key:"profit",fn:function(i){return[e("span",{style:{color:i>0?"#52c41a":i<0?"#f5222d":"#666"}},[t._v(" "+t._s(t.formatMoney(i))+" ")])]}}])})],1)],1),t.loading?e("div",{staticClass:"loading-overlay"},[e("div",{staticClass:"loading-content"},[e("div",{staticClass:"loading-animation"},[e("div",{staticClass:"chart-bars"},[e("div",{staticClass:"bar bar1"}),e("div",{staticClass:"bar bar2"}),e("div",{staticClass:"bar bar3"}),e("div",{staticClass:"bar bar4"}),e("div",{staticClass:"bar bar5"})])]),e("div",{staticClass:"loading-text"},[t._v(t._s(t.$t("dashboard.indicator.backtest.running")))]),e("div",{staticClass:"loading-subtext"},[t._v(t._s(t.loadingTip))])])]):t._e()],1),e("template",{slot:"footer"},[e("div",{staticStyle:{display:"flex","justify-content":"space-between","align-items":"center",width:"100%"}},[e("div",[t.currentStep>0?e("a-button",{attrs:{disabled:t.loading},on:{click:t.handlePrev}},[t._v(t._s(t.$t("dashboard.indicator.backtest.prev")))]):t._e()],1),e("div",[e("a-button",{attrs:{disabled:t.loading},on:{click:t.handleCancel}},[t._v(t._s(t.$t("dashboard.indicator.backtest.close")))]),t.currentStep<1?e("a-button",{staticStyle:{"margin-left":"8px"},attrs:{type:"primary",disabled:t.loading},on:{click:t.handleNext}},[t._v(t._s(t.$t("dashboard.indicator.backtest.next")))]):1===t.currentStep?e("a-button",{staticStyle:{"margin-left":"8px"},attrs:{type:"primary",loading:t.loading},on:{click:t.handleRunBacktest}},[t._v(t._s(t.$t("dashboard.indicator.backtest.run")))]):e("a-button",{staticStyle:{"margin-left":"8px"},attrs:{type:"primary",disabled:t.loading},on:{click:t.handleRerun}},[t._v(t._s(t.$t("dashboard.indicator.backtest.rerun")))])],1)])])],2)},Wr=[],Vr=i(95093),$r=i.n(Vr),Hr=i(15014),Kr={name:"BacktestModal",props:{visible:{type:Boolean,default:!1},userId:{type:[Number,String],default:1},indicator:{type:Object,default:null},symbol:{type:String,default:""},market:{type:String,default:""},timeframe:{type:String,default:"1D"}},data:function(){return{form:this.$form.createForm(this),loading:!1,loadingTip:"",loadingTimer:null,currentStep:0,hasResult:!1,backtestRunId:null,step1CollapseKeys:["risk"],trailingEnabledUi:!1,entryPctMaxUi:100,precisionInfo:null,selectedDatePreset:null,selectedTimeframe:"1D",result:{totalReturn:0,annualReturn:0,maxDrawdown:0,sharpeRatio:0,winRate:0,profitFactor:0,totalTrades:0,totalProfit:0,totalCommission:0,trades:[],equityCurve:[]},equityChart:null,tradeColumns:[]}},computed:{maxBacktestRange:function(){var t=this.selectedTimeframe||this.timeframe||"1D";return"1m"===t?{days:30,label:"1个月"}:"5m"===t?{days:180,label:"6个月"}:["15m","30m"].includes(t)?{days:365,label:"1年"}:{days:1095,label:"3年"}},recommendedRange:function(){return{days:30,label:"30天",key:"30d"}},combinedAlertType:function(){return this.precisionInfo&&this.precisionInfo.enabled?"high"===this.precisionInfo.precision?"success":"info":this.precisionInfo&&!this.precisionInfo.enabled&&this.market&&"crypto"===this.market.toLowerCase()?"warning":"info"},datePresets:function(){var t=[],e=this.selectedTimeframe||this.timeframe||"1D";return"1m"===e?(t.push({key:"7d",days:7,label:"7D"}),t.push({key:"14d",days:14,label:"14D"}),t.push({key:"30d",days:30,label:"30D"})):"5m"===e?(t.push({key:"14d",days:14,label:"14D"}),t.push({key:"30d",days:30,label:"30D"}),t.push({key:"90d",days:90,label:"3M"}),t.push({key:"180d",days:180,label:"6M"})):(["15m","30m"].includes(e),t.push({key:"30d",days:30,label:"30D"}),t.push({key:"90d",days:90,label:"3M"}),t.push({key:"180d",days:180,label:"6M"}),t.push({key:"365d",days:365,label:"1Y"})),t},defaultStartDate:function(){return $r()().subtract(this.recommendedRange.days,"days")},defaultEndDate:function(){return $r()()},earliestDate:function(){return $r()().subtract(this.maxBacktestRange.days,"days")},labelCol:function(){return 0===this.currentStep?{span:9}:{span:6}},wrapperCol:function(){return 0===this.currentStep?{span:15}:{span:18}}},watch:{visible:function(t){var e=this;t?(this.currentStep=0,this.hasResult=!1,this.backtestRunId=null,this.step1CollapseKeys=["risk"],this.trailingEnabledUi=!1,this.entryPctMaxUi=100,this.precisionInfo=null,this.selectedDatePreset=null,this.selectedTimeframe=this.timeframe||"1D",this.result={totalReturn:0,annualReturn:0,maxDrawdown:0,sharpeRatio:0,winRate:0,profitFactor:0,totalTrades:0,totalProfit:0,totalCommission:0,trades:[],equityCurve:[]},this.$nextTick(function(){e.form&&(e.form.resetFields(),e.trailingEnabledUi=!!e.form.getFieldValue("trailingEnabled"),e.recalcEntryPctMaxUi(),e.selectedDatePreset="30d",e.fetchPrecisionInfo())})):this.equityChart&&(this.equityChart.dispose(),this.equityChart=null)}},created:function(){this.tradeColumns=[{title:this.$t("dashboard.indicator.backtest.tradeTime"),dataIndex:"time",key:"time",width:160},{title:this.$t("dashboard.indicator.backtest.tradeType"),dataIndex:"type",key:"type",width:120,scopedSlots:{customRender:"type"}},{title:this.$t("dashboard.indicator.backtest.price"),dataIndex:"price",key:"price",width:110},{title:this.$t("dashboard.indicator.backtest.amount"),dataIndex:"amount",key:"amount",width:100,customRender:function(t){return t?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:4}):"--"}},{title:this.$t("dashboard.indicator.backtest.profit"),dataIndex:"profit",key:"profit",width:110,scopedSlots:{customRender:"profit"}},{title:this.$t("dashboard.indicator.backtest.balance"),dataIndex:"balance",key:"balance",width:130,scopedSlots:{customRender:"balance"}}]},methods:{recalcEntryPctMaxUi:function(){if(this.form){var t=!!this.form.getFieldValue("trendAddEnabled"),e=!!this.form.getFieldValue("dcaAddEnabled"),i=Number(this.form.getFieldValue("trendAddMaxTimes")||0),n=Number(this.form.getFieldValue("dcaAddMaxTimes")||0),r=Number(this.form.getFieldValue("trendAddSizePct")||0),a=Number(this.form.getFieldValue("dcaAddSizePct")||0),o=(t?i*r:0)+(e?n*a:0),s=Math.max(0,Math.min(100,100-o));this.entryPctMaxUi=s}else this.entryPctMaxUi=100},normalizeEntryPct:function(){if(this.form){var t=Number(this.form.getFieldValue("entryPct")||0),e=Number(this.entryPctMaxUi||100);t>e&&this.form.setFieldsValue({entryPct:e})}},onTrendAddToggle:function(t){var e=this;this.form&&(t&&this.form.setFieldsValue({dcaAddEnabled:!1}),this.$nextTick(function(){e.recalcEntryPctMaxUi(),e.normalizeEntryPct()}))},onDcaAddToggle:function(t){var e=this;this.form&&(t&&this.form.setFieldsValue({trendAddEnabled:!1}),this.$nextTick(function(){e.recalcEntryPctMaxUi(),e.normalizeEntryPct()}))},onScaleParamsChange:function(){var t=this;this.$nextTick(function(){t.recalcEntryPctMaxUi(),t.normalizeEntryPct()})},onEntryPctChange:function(){var t=this;this.$nextTick(function(){return t.normalizeEntryPct()})},onTrailingToggle:function(t){this.form&&(this.trailingEnabledUi=!!t,t||this.form.setFieldsValue({trailingStopPct:0,trailingActivationPct:0}))},getTradeTypeColor:function(t){var e={buy:"green",sell:"red",liquidation:"orange",open_long:"green",add_long:"cyan",close_long:"orange",close_long_stop:"red",close_long_profit:"lime",close_long_trailing:"gold",reduce_long:"volcano",open_short:"red",add_short:"magenta",close_short:"blue",close_short_stop:"red",close_short_profit:"cyan",close_short_trailing:"gold",reduce_short:"volcano"};return e[t]||"default"},getTradeTypeText:function(t){var e={buy:this.$t("dashboard.indicator.backtest.buy"),sell:this.$t("dashboard.indicator.backtest.sell"),liquidation:this.$t("dashboard.indicator.backtest.liquidation"),open_long:this.$t("dashboard.indicator.backtest.openLong"),add_long:this.$t("dashboard.indicator.backtest.addLong"),close_long:this.$t("dashboard.indicator.backtest.closeLong"),close_long_stop:this.$t("dashboard.indicator.backtest.closeLongStop"),close_long_profit:this.$t("dashboard.indicator.backtest.closeLongProfit"),close_long_trailing:this.$t("dashboard.indicator.backtest.closeLongTrailing"),reduce_long:this.$t("dashboard.indicator.backtest.reduceLong"),open_short:this.$t("dashboard.indicator.backtest.openShort"),add_short:this.$t("dashboard.indicator.backtest.addShort"),close_short:this.$t("dashboard.indicator.backtest.closeShort"),close_short_stop:this.$t("dashboard.indicator.backtest.closeShortStop"),close_short_profit:this.$t("dashboard.indicator.backtest.closeShortProfit"),close_short_trailing:this.$t("dashboard.indicator.backtest.closeShortTrailing"),reduce_short:this.$t("dashboard.indicator.backtest.reduceShort")};return e[t]||t},disabledStartDate:function(t){return!!t&&(t>$r()().endOf("day")||t$r()().endOf("day"))return!0;if(tn.endOf("day"))return!0}return!1},applyDatePreset:function(t){this.selectedDatePreset=t.key;var e=$r()(),i=$r()().subtract(t.days,"days");this.form.setFieldsValue({startDate:i,endDate:e}),this.fetchPrecisionInfo(i,e)},fetchPrecisionInfo:function(t,e){var i=this;return(0,c.A)((0,l.A)().m(function n(){var r;return(0,l.A)().w(function(n){while(1)switch(n.p=n.n){case 0:if(t&&e||(t=i.form?i.form.getFieldValue("startDate"):null,e=i.form?i.form.getFieldValue("endDate"):null),t||(t=i.defaultStartDate),e||(e=i.defaultEndDate),i.market&&"crypto"===i.market.toLowerCase()){n.n=1;break}return i.precisionInfo={enabled:!1,reason:"only_crypto",message:i.$t("dashboard.indicator.backtest.onlyCryptoSupported")},n.a(2);case 1:return n.p=1,n.n=2,(0,f.Ay)({url:"/api/indicator/backtest/precision-info",method:"get",params:{market:i.market,startDate:t.format("YYYY-MM-DD"),endDate:e.format("YYYY-MM-DD")},timeout:3e4});case 2:r=n.v,1===r.code&&r.data&&(i.precisionInfo=r.data),n.n=4;break;case 3:n.p=3,n.v,i.precisionInfo=null;case 4:return n.a(2)}},n,null,[[1,3]])}))()},onTimeframeChange:function(){this.selectedDatePreset="30d";var t=$r()(),e=$r()().subtract(30,"days");this.form.setFieldsValue({startDate:e,endDate:t}),this.fetchPrecisionInfo(e,t)},onDateChange:function(){var t=this;this.selectedDatePreset=null,this.$nextTick(function(){t.fetchPrecisionInfo()})},validateDateRange:function(t,e){if(!t||!e)return!0;var i=e.diff(t,"days"),n=this.maxBacktestRange.days||365;return!(i>n)||(this.$message.error(this.$t("dashboard.indicator.backtest.dateRangeExceededDays",{timeframe:this.selectedTimeframe||this.timeframe,maxRange:this.maxBacktestRange.label,maxDays:n})),!1)},formatPercent:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"";return"".concat(e).concat(t.toFixed(2),"%")},formatMoney:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"-";return"".concat(e,"$").concat(Math.abs(t).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}))},handleCancel:function(){this.$emit("cancel")},handlePrev:function(){this.loading||this.currentStep>0&&(this.currentStep-=1)},handleNext:function(){this.loading||(0!==this.currentStep?1===this.currentStep&&this.handleRunBacktest():this.currentStep=1)},handleRerun:function(){this.loading||(this.currentStep=1,this.hasResult=!1,this.backtestRunId=null)},startLoadingAnimation:function(){var t=this,e=[this.$t("dashboard.indicator.backtest.loadingTip1")||"正在获取历史K线数据...",this.$t("dashboard.indicator.backtest.loadingTip2")||"正在执行策略信号计算...",this.$t("dashboard.indicator.backtest.loadingTip3")||"正在模拟交易执行...",this.$t("dashboard.indicator.backtest.loadingTip4")||"正在计算回测指标...",this.$t("dashboard.indicator.backtest.loadingTip5")||"即将完成,请稍候..."],i=0;this.loadingTip=e[0],this.loadingTimer=setInterval(function(){i=(i+1)%e.length,t.loadingTip=e[i]},2e3)},stopLoadingAnimation:function(){this.loadingTimer&&(clearInterval(this.loadingTimer),this.loadingTimer=null),this.loadingTip=""},handleRunBacktest:function(){var t=this;return(0,c.A)((0,l.A)().m(function e(){var i;return(0,l.A)().w(function(e){while(1)switch(e.n){case 0:i=["startDate","endDate","initialCapital","commission","leverage","tradeDirection","slippage"],t.form.validateFields(i,function(){var e=(0,c.A)((0,l.A)().m(function e(i,n){var r,a,o,s,c,u,h,p,v;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!i){e.n=1;break}return e.a(2);case 1:if(r=(0,d.A)((0,d.A)({},t.form.getFieldsValue()||{}),n||{}),a=Date.now(),t.indicator&&t.indicator.id){e.n=2;break}return t.$message.error(t.$t("dashboard.indicator.backtest.noIndicatorCode")),e.a(2);case 2:if(t.symbol){e.n=3;break}return t.$message.error(t.$t("dashboard.indicator.backtest.noSymbol")),e.a(2);case 3:if(t.validateDateRange(n.startDate,n.endDate)){e.n=4;break}return e.a(2);case 4:return t.loading=!0,t.hasResult=!1,t.startLoadingAnimation(),e.p=5,o=function(t){return Number(t||0)/100},s={risk:{stopLossPct:o(r.stopLossPct),takeProfitPct:o(r.takeProfitPct),trailing:{enabled:!!r.trailingEnabled,pct:o(r.trailingStopPct),activationPct:o(r.trailingActivationPct)}},position:{entryPct:o(r.entryPct||0)},scale:{trendAdd:{enabled:!!r.trendAddEnabled,stepPct:o(r.trendAddStepPct),sizePct:o(r.trendAddSizePct),maxTimes:r.trendAddMaxTimes||0},dcaAdd:{enabled:!!r.dcaAddEnabled,stepPct:o(r.dcaAddStepPct),sizePct:o(r.dcaAddSizePct),maxTimes:r.dcaAddMaxTimes||0},trendReduce:{enabled:!!r.trendReduceEnabled,stepPct:o(r.trendReduceStepPct),sizePct:o(r.trendReduceSizePct),maxTimes:r.trendReduceMaxTimes||0},adverseReduce:{enabled:!!r.adverseReduceEnabled,stepPct:o(r.adverseReduceStepPct),sizePct:o(r.adverseReduceSizePct),maxTimes:r.adverseReduceMaxTimes||0}}},c={userid:t.userId||1,indicatorId:t.indicator.id,symbol:t.symbol,market:t.market,timeframe:t.selectedTimeframe||t.timeframe,startDate:n.startDate.format("YYYY-MM-DD"),endDate:n.endDate.format("YYYY-MM-DD"),initialCapital:n.initialCapital,commission:o(n.commission||0),slippage:o(n.slippage||0),leverage:n.leverage||1,tradeDirection:n.tradeDirection||"long",strategyConfig:s,enableMtf:t.market&&"crypto"===t.market.toLowerCase()},e.n=6,(0,f.Ay)({url:"/api/indicator/backtest",method:"post",data:c,timeout:6e5});case 6:u=e.v,((Date.now()-a)/1e3).toFixed(1),1===u.code&&u.data?(u.data.runId&&(t.backtestRunId=u.data.runId),t.result=u.data.result||u.data,t.hasResult=!0,t.currentStep=2,t.$nextTick(function(){t.renderEquityChart()}),t.$message.success(t.$t("dashboard.indicator.backtest.success"))):t.$message.error(u.msg||t.$t("dashboard.indicator.backtest.failed")),e.n=8;break;case 7:e.p=7,v=e.v,h=t.$t("dashboard.indicator.backtest.failed"),"ECONNABORTED"===v.code||v.message&&v.message.includes("timeout")?h="回测超时,请减少回测时间范围或使用更大的时间周期":v.response?h=(null===(p=v.response.data)||void 0===p?void 0:p.msg)||v.response.statusText||h:v.message&&(h=v.message),t.$message.error(h);case 8:return e.p=8,t.stopLoadingAnimation(),t.loading=!1,e.f(8);case 9:return e.a(2)}},e,null,[[5,7,8,9]])}));return function(t,i){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},renderEquityChart:function(){var t=this;if(this.$refs.equityChartRef){this.equityChart&&this.equityChart.dispose(),this.equityChart=Hr.Ts(this.$refs.equityChartRef);var e=this.result.equityCurve||[],i=e.map(function(t){return t.time||t.date}),n=e.map(function(t){return void 0!==t.value?t.value:t.equity}),r=n[0]||1e5,a=n[n.length-1]||r,o=a>=r,s=o?"#52c41a":"#f5222d",l=o?[{offset:0,color:"rgba(82, 196, 26, 0.35)"},{offset:1,color:"rgba(82, 196, 26, 0.02)"}]:[{offset:0,color:"rgba(245, 34, 45, 0.35)"},{offset:1,color:"rgba(245, 34, 45, 0.02)"}],c={tooltip:{trigger:"axis",backgroundColor:"rgba(255, 255, 255, 0.96)",borderColor:"#e8e8e8",borderWidth:1,textStyle:{color:"#333"},formatter:function(t){var e='

'.concat(t[0].axisValue,"
");return t.forEach(function(t){if(void 0!==t.value&&null!==t.value){var i=t.value.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2});e+='
\n '.concat(t.marker," ").concat(t.seriesName,'\n $').concat(i,"\n
")}}),e}},legend:{show:!1},grid:{left:"3%",right:"4%",bottom:"12%",top:"8%",containLabel:!0},xAxis:{type:"category",data:i,boundaryGap:!1,axisLine:{lineStyle:{color:"#e8e8e8"}},axisTick:{show:!1},axisLabel:{color:"#8c8c8c",fontSize:11,rotate:0,interval:Math.floor(i.length/6)}},yAxis:{type:"value",splitLine:{lineStyle:{color:"#f5f5f5",type:"dashed"}},axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:"#8c8c8c",fontSize:11,formatter:function(t){return t>=1e6?(t/1e6).toFixed(1)+"M":t>=1e3?(t/1e3).toFixed(0)+"K":t}}},series:[{name:this.$t("dashboard.indicator.backtest.strategy"),type:"line",data:n,smooth:.4,symbol:"none",sampling:"lttb",lineStyle:{width:2.5,color:s,cap:"round",join:"round"},areaStyle:{color:new Hr.fA.W4(0,0,0,1,l)},emphasis:{lineStyle:{width:3}}}],animation:!0,animationDuration:800,animationEasing:"cubicOut"};this.equityChart.setOption(c),window.addEventListener("resize",function(){t.equityChart&&t.equityChart.resize()})}}},beforeDestroy:function(){this.equityChart&&(this.equityChart.dispose(),this.equityChart=null)}},Yr=Kr,Xr=(0,T.A)(Yr,zr,Wr,!1,null,"473e449c",null),Ur=Xr.exports,Gr=function(){var t=this,e=t._self._c;return e("a-drawer",{attrs:{title:t.$t("dashboard.indicator.backtest.historyTitle"),visible:t.visible,width:t.isMobile?"100%":980,maskClosable:!0},on:{close:function(e){return t.$emit("cancel")}}},[e("div",{staticStyle:{display:"flex",gap:"12px","margin-bottom":"12px","align-items":"center","flex-wrap":"wrap"}},[e("a-switch",{model:{value:t.useCurrentFilters,callback:function(e){t.useCurrentFilters=e},expression:"useCurrentFilters"}}),e("span",{staticStyle:{color:"#8c8c8c"}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.historyUseCurrent"))+" ")]),e("a-button",{attrs:{type:"primary",loading:t.loading},on:{click:t.loadRuns}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.historyRefresh"))+" ")]),e("a-button",{attrs:{type:"primary",disabled:0===t.selectedRowKeys.length,loading:t.analyzing},on:{click:t.handleAIAnalyze}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.historyAIAnalyze"))+" ")])],1),t.useCurrentFilters?t._e():e("div",{staticStyle:{display:"flex",gap:"12px","margin-bottom":"12px","align-items":"center","flex-wrap":"wrap"}},[e("a-input",{staticStyle:{width:"220px"},attrs:{placeholder:t.$t("dashboard.indicator.backtest.historyFilterSymbol")},model:{value:t.filterSymbol,callback:function(e){t.filterSymbol=e},expression:"filterSymbol"}}),e("a-select",{staticStyle:{width:"140px"},attrs:{placeholder:t.$t("dashboard.indicator.backtest.historyFilterTimeframe"),allowClear:""},model:{value:t.filterTimeframe,callback:function(e){t.filterTimeframe=e},expression:"filterTimeframe"}},t._l(t.timeframes,function(i){return e("a-select-option",{key:i,attrs:{value:i}},[t._v(t._s(i))])}),1),e("a-button",{attrs:{loading:t.loading},on:{click:t.loadRuns}},[t._v(t._s(t.$t("dashboard.indicator.backtest.historyApply")))]),e("span",{staticStyle:{color:"#8c8c8c"}},[t._v(t._s(t.filterLabel))])],1),e("a-table",{attrs:{columns:t.columns,"data-source":t.runs,loading:t.loading,size:"small",pagination:{pageSize:10,size:"small"},rowKey:"id",scroll:{x:900},rowSelection:{selectedRowKeys:t.selectedRowKeys,onChange:t.onRowSelectionChange}},scopedSlots:t._u([{key:"range",fn:function(i,n){return[e("span",[t._v(t._s(n.start_date||"")+" ~ "+t._s(n.end_date||""))])]}},{key:"status",fn:function(i){return[e("a-tag",{attrs:{color:"success"===i?"green":"failed"===i?"red":"blue"}},[t._v(" "+t._s("success"===i?t.$t("dashboard.indicator.backtest.historyStatusSuccess"):"failed"===i?t.$t("dashboard.indicator.backtest.historyStatusFailed"):i)+" ")])]}},{key:"actions",fn:function(i,n){return[e("a-button",{attrs:{type:"link",size:"small",loading:t.detailLoadingId===n.id},on:{click:function(e){return t.viewRun(n)}}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.historyView"))+" ")])]}}])}),t.loading||0!==t.runs.length?t._e():e("a-empty",{attrs:{description:t.$t("dashboard.indicator.backtest.historyNoData")}}),e("a-modal",{attrs:{title:t.$t("dashboard.indicator.backtest.historyAIAnalyzeTitle"),visible:t.showAIResult,footer:null,width:t.isMobile?"100%":900},on:{cancel:function(e){t.showAIResult=!1}}},[t.analyzing?e("div",{staticStyle:{padding:"12px 0"}},[e("a-spin")],1):e("div",{staticStyle:{"white-space":"pre-wrap","font-family":"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace"}},[t._v(" "+t._s(t.aiResult||t.$t("dashboard.indicator.backtest.historyNoAIResult"))+" ")])])],1)},jr=[],qr={name:"BacktestHistoryDrawer",props:{visible:{type:Boolean,default:!1},userId:{type:[Number,String],default:1},indicatorId:{type:[Number,String],default:null},symbol:{type:String,default:""},market:{type:String,default:""},timeframe:{type:String,default:""},isMobile:{type:Boolean,default:!1}},data:function(){return{loading:!1,detailLoadingId:null,analyzing:!1,showAIResult:!1,aiResult:"",useCurrentFilters:!0,filterSymbol:"",filterTimeframe:"",timeframes:["1m","5m","15m","30m","1H","4H","1D","1W"],runs:[],columns:[],selectedRowKeys:[]}},computed:{filterLabel:function(){var t=[];this.indicatorId&&t.push("indicatorId=".concat(this.indicatorId));var e=this.useCurrentFilters?this.market:this.market||"",i=this.useCurrentFilters?this.symbol:this.filterSymbol||"",n=this.useCurrentFilters?this.timeframe:this.filterTimeframe||"";return e&&t.push("market=".concat(e)),i&&t.push("symbol=".concat(i)),n&&t.push("timeframe=".concat(n)),t.length?t.join(" | "):""}},watch:{visible:function(t){t&&(this.initColumns(),this.useCurrentFilters=!0,this.filterSymbol=this.symbol||"",this.filterTimeframe=this.timeframe||"",this.selectedRowKeys=[],this.aiResult="",this.showAIResult=!1,this.loadRuns())}},methods:{onRowSelectionChange:function(t){this.selectedRowKeys=t||[]},initColumns:function(){this.columns.length||(this.columns=[{title:this.$t("dashboard.indicator.backtest.historyRunId"),dataIndex:"id",key:"id",width:90},{title:this.$t("dashboard.indicator.backtest.historyCreatedAt"),dataIndex:"created_at",key:"created_at",width:140},{title:this.$t("dashboard.indicator.backtest.tradeDirection"),dataIndex:"trade_direction",key:"trade_direction",width:90},{title:this.$t("dashboard.indicator.backtest.leverage"),dataIndex:"leverage",key:"leverage",width:90},{title:this.$t("dashboard.indicator.backtest.historyRange"),key:"range",width:220,scopedSlots:{customRender:"range"}},{title:this.$t("dashboard.indicator.backtest.historyStatus"),dataIndex:"status",key:"status",width:90,scopedSlots:{customRender:"status"}},{title:this.$t("dashboard.indicator.backtest.historyActions"),key:"actions",width:90,scopedSlots:{customRender:"actions"}}])},loadRuns:function(){var t=this;return(0,c.A)((0,l.A)().m(function e(){var i,n,r,a;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.userId){e.n=1;break}return e.a(2);case 1:return t.loading=!0,e.p=2,i=t.useCurrentFilters?t.symbol:t.filterSymbol||"",n=t.useCurrentFilters?t.timeframe:t.filterTimeframe||"",r=t.market||"",e.n=3,(0,f.Ay)({url:"/api/indicator/backtest/history",method:"get",params:{userid:t.userId,limit:100,offset:0,indicatorId:t.indicatorId,symbol:i,market:r,timeframe:n}});case 3:a=e.v,a&&1===a.code&&Array.isArray(a.data)?t.runs=a.data:t.runs=[];case 4:return e.p=4,t.loading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[2,,4,5]])}))()},viewRun:function(t){var e=this;return(0,c.A)((0,l.A)().m(function i(){var n;return(0,l.A)().w(function(i){while(1)switch(i.p=i.n){case 0:if(t&&t.id){i.n=1;break}return i.a(2);case 1:return e.detailLoadingId=t.id,i.p=2,i.n=3,(0,f.Ay)({url:"/api/indicator/backtest/get",method:"get",params:{userid:e.userId,runId:t.id}});case 3:n=i.v,n&&1===n.code&&n.data&&e.$emit("view",n.data);case 4:return i.p=4,e.detailLoadingId=null,i.f(4);case 5:return i.a(2)}},i,null,[[2,,4,5]])}))()},handleAIAnalyze:function(){var t=this;return(0,c.A)((0,l.A)().m(function e(){var i,n;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.userId&&t.selectedRowKeys.length){e.n=1;break}return e.a(2);case 1:return t.analyzing=!0,t.showAIResult=!0,t.aiResult="",e.p=2,i=t.$i18n&&t.$i18n.locale?t.$i18n.locale:"zh-CN",e.n=3,(0,f.Ay)({url:"/api/indicator/backtest/aiAnalyze",method:"post",data:{userid:t.userId,runIds:t.selectedRowKeys,lang:i}});case 3:n=e.v,n&&1===n.code&&n.data&&n.data.analysis?t.aiResult=n.data.analysis:t.aiResult=n.msg||t.$t("dashboard.indicator.backtest.historyNoAIResult");case 4:return e.p=4,t.analyzing=!1,e.f(4);case 5:return e.a(2)}},e,null,[[2,,4,5]])}))()}}},Zr=qr,Jr=(0,T.A)(Zr,Gr,jr,!1,null,null,null),Qr=Jr.exports,ta=function(){var t,e,i,n=this,r=n._self._c;return r("a-modal",{staticClass:"backtest-run-viewer",attrs:{title:n.modalTitle,visible:n.visible,width:1100,maskClosable:!1},on:{cancel:function(t){return n.$emit("cancel")}}},[n.run&&n.run.result?r("div",[n.run.id?r("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"info","show-icon":"",message:n.$t("dashboard.indicator.backtest.savedRunId",{id:n.run.id})}}):n._e(),r("div",{staticClass:"metrics-cards"},[r("div",{staticClass:"metric-card",class:{positive:n.result.totalReturn>0,negative:n.result.totalReturn<0}},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.totalReturn")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(n.formatPercent(n.result.totalReturn)))]),r("div",{staticClass:"metric-amount"},[n._v(n._s(n.formatMoney(n.result.totalProfit)))])]),r("div",{staticClass:"metric-card",class:{positive:n.result.annualReturn>0,negative:n.result.annualReturn<0}},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.annualReturn")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(n.formatPercent(n.result.annualReturn)))])]),r("div",{staticClass:"metric-card negative"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.maxDrawdown")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(n.formatPercent(n.result.maxDrawdown)))])]),r("div",{staticClass:"metric-card"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.sharpeRatio")))]),r("div",{staticClass:"metric-value"},[n._v(n._s((null!==(t=n.result.sharpeRatio)&&void 0!==t?t:0).toFixed(2)))])]),r("div",{staticClass:"metric-card"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.winRate")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(n.formatPercent(n.result.winRate)))])]),r("div",{staticClass:"metric-card",class:{positive:n.result.profitFactor>=1.5,negative:n.result.profitFactor<1}},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.profitFactor")))]),r("div",{staticClass:"metric-value"},[n._v(n._s((null!==(e=n.result.profitFactor)&&void 0!==e?e:0).toFixed(2)))])]),r("div",{staticClass:"metric-card"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.totalTrades")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(null!==(i=n.result.totalTrades)&&void 0!==i?i:0))])]),r("div",{staticClass:"metric-card negative"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.totalCommission")))]),r("div",{staticClass:"metric-value"},[n._v("-$"+n._s(n.result.totalCommission?n.result.totalCommission.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"))])])]),r("div",{staticClass:"chart-section"},[r("div",{staticClass:"chart-title"},[n._v(n._s(n.$t("dashboard.indicator.backtest.equityCurve")))]),r("div",{ref:"equityChartRef",staticClass:"equity-chart"})]),r("div",{staticClass:"trades-section"},[r("div",{staticClass:"chart-title"},[n._v(n._s(n.$t("dashboard.indicator.backtest.tradeHistory")))]),r("a-table",{attrs:{columns:n.tradeColumns,"data-source":n.result.trades||[],pagination:{pageSize:10,size:"small"},size:"small",scroll:{x:800},rowKey:n.rowKey},scopedSlots:n._u([{key:"type",fn:function(t){return[r("a-tag",{attrs:{color:n.getTradeTypeColor(t)}},[n._v(" "+n._s(n.getTradeTypeText(t))+" ")])]}},{key:"balance",fn:function(t){return[r("span",{staticStyle:{color:"#1890ff","font-weight":"500"}},[n._v(" $"+n._s(t?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"--")+" ")])]}},{key:"profit",fn:function(t){return[r("span",{style:{color:t>0?"#52c41a":t<0?"#f5222d":"#666"}},[n._v(" "+n._s(n.formatMoney(t))+" ")])]}}])})],1)],1):r("div",{staticStyle:{padding:"12px 0"}},[r("a-empty",{attrs:{description:n.$t("dashboard.indicator.backtest.historyNoData")}})],1),r("template",{slot:"footer"},[r("a-button",{on:{click:function(t){return n.$emit("cancel")}}},[n._v(n._s(n.$t("dashboard.indicator.backtest.close")))])],1)],2)},ea=[],ia={name:"BacktestRunViewer",props:{visible:{type:Boolean,default:!1},run:{type:Object,default:null}},data:function(){return{equityChart:null,tradeColumns:[]}},computed:{result:function(){return this.run&&this.run.result?this.run.result:{}},modalTitle:function(){var t=this.run&&this.run.id?"#".concat(this.run.id):"";return"".concat(this.$t("dashboard.indicator.backtest.historyTitle")," ").concat(t).trim()}},watch:{visible:function(t){var e=this;t?this.$nextTick(function(){e.initColumns(),e.renderEquityChart()}):this.equityChart&&(this.equityChart.dispose(),this.equityChart=null)}},methods:{rowKey:function(t,e){return e},initColumns:function(){this.tradeColumns.length||(this.tradeColumns=[{title:this.$t("dashboard.indicator.backtest.tradeTime"),dataIndex:"time",key:"time",width:160},{title:this.$t("dashboard.indicator.backtest.tradeType"),dataIndex:"type",key:"type",width:150,scopedSlots:{customRender:"type"}},{title:this.$t("dashboard.indicator.backtest.price"),dataIndex:"price",key:"price",width:110},{title:this.$t("dashboard.indicator.backtest.amount"),dataIndex:"amount",key:"amount",width:100},{title:this.$t("dashboard.indicator.backtest.profit"),dataIndex:"profit",key:"profit",width:110,scopedSlots:{customRender:"profit"}},{title:this.$t("dashboard.indicator.backtest.balance"),dataIndex:"balance",key:"balance",width:120,scopedSlots:{customRender:"balance"}}])},getTradeTypeColor:function(t){var e={buy:"green",sell:"red",liquidation:"orange",open_long:"green",add_long:"cyan",close_long:"orange",close_long_stop:"red",close_long_profit:"lime",close_long_trailing:"gold",reduce_long:"volcano",open_short:"red",add_short:"magenta",close_short:"blue",close_short_stop:"red",close_short_profit:"cyan",close_short_trailing:"gold",reduce_short:"volcano"};return e[t]||"default"},getTradeTypeText:function(t){var e={open_long:this.$t("dashboard.indicator.backtest.openLong"),add_long:this.$t("dashboard.indicator.backtest.addLong"),close_long:this.$t("dashboard.indicator.backtest.closeLong"),close_long_stop:this.$t("dashboard.indicator.backtest.closeLongStop"),close_long_profit:this.$t("dashboard.indicator.backtest.closeLongProfit"),close_long_trailing:this.$t("dashboard.indicator.backtest.closeLongTrailing"),reduce_long:this.$t("dashboard.indicator.backtest.reduceLong"),open_short:this.$t("dashboard.indicator.backtest.openShort"),add_short:this.$t("dashboard.indicator.backtest.addShort"),close_short:this.$t("dashboard.indicator.backtest.closeShort"),close_short_stop:this.$t("dashboard.indicator.backtest.closeShortStop"),close_short_profit:this.$t("dashboard.indicator.backtest.closeShortProfit"),close_short_trailing:this.$t("dashboard.indicator.backtest.closeShortTrailing"),reduce_short:this.$t("dashboard.indicator.backtest.reduceShort"),liquidation:this.$t("dashboard.indicator.backtest.liquidation")};return e[t]||t},formatPercent:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"";return"".concat(e).concat(Number(t).toFixed(2),"%")},formatMoney:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"-";return"".concat(e,"$").concat(Math.abs(t).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}))},renderEquityChart:function(){var t=this;if(this.$refs.equityChartRef){this.equityChart&&this.equityChart.dispose(),this.equityChart=Hr.Ts(this.$refs.equityChartRef);var e=this.result.equityCurve||[],i=e.map(function(t){return t.time||t.date}),n=e.map(function(t){return void 0!==t.value?t.value:t.equity}),r=n[0]||1e5,a=n[n.length-1]||r,o=a>=r,s=o?"#52c41a":"#f5222d",l=o?[{offset:0,color:"rgba(82, 196, 26, 0.35)"},{offset:1,color:"rgba(82, 196, 26, 0.02)"}]:[{offset:0,color:"rgba(245, 34, 45, 0.35)"},{offset:1,color:"rgba(245, 34, 45, 0.02)"}],c={tooltip:{trigger:"axis"},grid:{left:"3%",right:"4%",bottom:"12%",top:"8%",containLabel:!0},xAxis:{type:"category",data:i,boundaryGap:!1},yAxis:{type:"value"},series:[{name:this.$t("dashboard.indicator.backtest.strategy"),type:"line",data:n,smooth:.4,symbol:"none",sampling:"lttb",lineStyle:{width:2.5,color:s},areaStyle:{color:new Hr.fA.W4(0,0,0,1,l)}}]};this.equityChart.setOption(c),window.addEventListener("resize",function(){return t.equityChart&&t.equityChart.resize()})}}}},na=ia,ra=(0,T.A)(na,ta,ea,!1,null,"a484239a",null),aa=ra.exports,oa=i(62611),sa={name:"DashboardIndicator",components:{IndicatorEditor:I,KlineChart:Or,BacktestModal:Ur,BacktestHistoryDrawer:Qr,BacktestRunViewer:aa,QuickTradePanel:oa.A},computed:(0,d.A)((0,d.A)({},(0,p.aH)({navTheme:function(t){return t.app.theme}})),{},{chartTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme?"dark":"light"},isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme}}),setup:function(){var t=(0,h.nI)(),e=t||{},i=e.proxy,n=(0,h.KR)(1),r=(0,h.KR)(!1),p=(0,h.KR)(void 0),m=(0,h.KR)([]),y=(0,h.KR)([]),b=(0,h.KR)(!1),x=(0,h.KR)(""),_=(0,h.KR)(!1),w=(0,h.KR)(!1),C=(0,h.KR)(!1),S=(0,h.KR)(""),k=(0,h.KR)(""),A=(0,h.KR)([]),T=(0,h.KR)(!1),M=(0,h.KR)([]),I=(0,h.KR)(!1),E=(0,h.KR)(null),D=(0,h.KR)(null),P=(0,h.KR)([]),L=(0,h.KR)(!1),R=(0,h.KR)(!1),F=(0,h.KR)(""),B=(0,h.KR)(""),N=(0,h.KR)(0),O=(0,h.EW)(function(){return"crypto"===(K.value||"").toLowerCase()}),z=function(){O.value?(F.value=H.value||"",N.value=parseFloat(Y.value)||0,B.value="",R.value=!0):u.A.warning(i.$t("quickTrade.cryptoOnly"))},W=function(){u.A.success(i.$t("quickTrade.orderSuccess"))},V=function(t){t&&O.value&&(F.value=t)},$=function(){i&&i.$router&&i.$router.push("/indicator-community")},H=(0,h.KR)(""),K=(0,h.KR)(""),Y=(0,h.KR)("--"),X=(0,h.KR)(0),U=(0,h.EW)(function(){return X.value>0?"color-up":X.value<0?"color-down":""}),G=(0,h.KR)("1D"),j=(0,h.KR)([]),q=(0,h.KR)(!1),Z=[{id:"sma5",name:"SMA5 (5日均线)",shortName:"SMA5",type:"line",defaultParams:{length:5}},{id:"sma10",name:"SMA10 (10日均线)",shortName:"SMA10",type:"line",defaultParams:{length:10}},{id:"sma20",name:"SMA20 (20日均线)",shortName:"SMA20",type:"line",defaultParams:{length:20}},{id:"sma30",name:"SMA30 (30日均线)",shortName:"SMA30",type:"line",defaultParams:{length:30}}],J=[{id:"ema5",name:"EMA5 (5日指数均线)",shortName:"EMA5",type:"line",defaultParams:{length:5}},{id:"ema10",name:"EMA10 (10日指数均线)",shortName:"EMA10",type:"line",defaultParams:{length:10}},{id:"ema20",name:"EMA20 (20日指数均线)",shortName:"EMA20",type:"line",defaultParams:{length:20}},{id:"ema30",name:"EMA30 (30日指数均线)",shortName:"EMA30",type:"line",defaultParams:{length:30}}],Q=(0,h.KR)([]),tt=(0,h.KR)([]),et=(0,h.KR)(!1),it=(0,h.KR)(!1),nt=(0,h.KR)(null),rt=(0,h.KR)(""),at=(0,h.KR)([]),ot=(0,h.KR)({}),st=(0,h.KR)(!1),lt=(0,h.KR)({}),ct=(0,h.KR)(!1),ut=(0,h.KR)(!1),dt=(0,h.KR)(!1),ht=(0,h.KR)(null),pt=(0,h.KR)(!1),ft=(0,h.KR)(null),vt=(0,h.KR)(!1),gt=(0,h.KR)(null),mt=(0,h.KR)(!1),yt=(0,h.KR)(null),bt=(0,h.KR)(!1),xt=(0,h.KR)(null),_t=(0,h.KR)(!1),wt=(0,h.KR)(!1),Ct=(0,h.KR)("free"),St=(0,h.KR)(10),kt=(0,h.KR)(""),At=(0,h.KR)(!1),Tt={price:[{required:!0,message:"请输入价格",trigger:"blur",type:"number"}]},Mt=(0,h.KR)(!1),It=function(t){var e=t.price,i=t.change;Y.value=e,X.value=i},Et=function(){},Dt=(0,h.KR)([]),Pt=(0,h.KR)([]),Lt=function(t){G.value=t},Rt=function(t){return t?Object.values(t).join(", "):""},Ft=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,i,a,o,s,c;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(r.value=!0,t.p=1,a=(0,h.nI)(),o=null===a||void 0===a||null===(e=a.proxy)||void 0===e?void 0:e.$store,s=(null===o||void 0===o||null===(i=o.getters)||void 0===i?void 0:i.userInfo)||{},!s||!s.email){t.n=2;break}return n.value=s.id,r.value=!1,Bt(),re(),t.a(2);case 2:return t.n=3,(0,g.ug)();case 3:c=t.v,c&&1===c.code&&c.data&&(n.value=c.data.id,o&&o.commit("SET_INFO",c.data),Bt(),re()),t.n=5;break;case 4:t.p=4,t.v;case 5:return t.p=5,r.value=!1,t.f(5);case 6:return t.a(2)}},t,null,[[1,4,5,6]])}));return function(){return t.apply(this,arguments)}}(),Bt=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,r;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value){t.n=1;break}return t.a(2);case 1:return b.value=!0,t.p=2,t.n=3,(0,v.Qo)({userid:n.value});case 3:e=t.v,e&&1===e.code&&e.data&&(y.value=e.data.map(function(t){return(0,d.A)((0,d.A)({},t),{},{label:t.symbol+(t.name?" (".concat(t.name,")"):""),value:"".concat(t.market,":").concat(t.symbol)})}),Nt(),y.value.length>0&&!H.value&&(r=y.value[0],K.value=r.market,H.value=r.symbol,p.value=r.value)),t.n=5;break;case 4:t.p=4,t.v,u.A.error(i.$t("dashboard.indicator.error.loadWatchlistFailed"));case 5:return t.p=5,b.value=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(){return t.apply(this,arguments)}}(),Nt=function(){x.value?m.value=y.value.filter(function(t){return t.symbol.toLowerCase().includes(x.value.toLowerCase())||t.name&&t.name.toLowerCase().includes(x.value.toLowerCase())}):m.value=y.value},Ot=function(t){x.value=t,0===y.value.length&&t&&(_.value=!0),Nt()},zt=function(t){_.value=t,t||(x.value="")},Wt=function(t){if("__empty_watchlist_hint__"!==t){if("__add_stock_option__"===t)return w.value=!0,void setTimeout(function(){p.value=void 0},0);var e=y.value.find(function(e){return e.value===t});if(e||(e=m.value.find(function(e){return e.value===t})),!e&&t.includes(":")){var i=t.split(":"),n=(0,s.A)(i,2),r=n[0],a=n[1];e={market:r,symbol:a,value:t}}e&&(K.value=e.market,H.value=e.symbol,p.value=e.value)}},Vt=function(t,e){var i,n=(null===(i=e.componentOptions)||void 0===i||null===(i=i.propsData)||void 0===i?void 0:i.value)||"";return"__empty_watchlist_hint__"===n||"__add_stock_option__"===n||n.toLowerCase().includes(t.toLowerCase())},$t=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return t.p=0,t.n=1,(0,v.iO)();case 1:e=t.v,e&&1===e.code&&e.data&&Array.isArray(e.data)?P.value=e.data.map(function(t){return{value:t.value,i18nKey:t.i18nKey||"dashboard.analysis.market.".concat(t.value)}}):e&&1===e.code&&e.data&&"object"===(0,o.A)(e.data)?P.value=Object.keys(e.data).map(function(t){return{value:t,i18nKey:"dashboard.analysis.market.".concat(t)}}):P.value=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}],P.value.length>0&&!S.value&&(S.value=P.value[0].value),t.n=3;break;case 2:t.p=2,t.v,P.value=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}];case 3:return t.a(2)}},t,null,[[0,2]])}));return function(){return t.apply(this,arguments)}}(),Ht=function(){w.value=!1,E.value=null,k.value="",A.value=[],L.value=!1,S.value=P.value.length>0?P.value[0].value:""},Kt=function(t){S.value=t,k.value="",A.value=[],E.value=null,L.value=!1,qt(t)},Yt=function(t){var e=t.target.value;if(k.value=e,D.value&&clearTimeout(D.value),!e||""===e.trim())return A.value=[],L.value=!1,void(E.value=null);D.value=setTimeout(function(){Ut(e)},500)},Xt=function(t){t&&t.trim()&&(S.value?A.value.length>0||(L.value&&0===A.value.length?Gt():Ut(t)):u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")))},Ut=function(){var t=(0,c.A)((0,l.A)().m(function t(e){var n;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e&&""!==e.trim()){t.n=1;break}return A.value=[],L.value=!1,t.a(2);case 1:if(S.value){t.n=2;break}return u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),t.a(2);case 2:return T.value=!0,L.value=!0,t.p=3,t.n=4,(0,v._3)({market:S.value,keyword:e.trim(),limit:20});case 4:n=t.v,n&&1===n.code&&n.data&&n.data.length>0?A.value=n.data:(A.value=[],E.value={market:S.value,symbol:e.trim().toUpperCase(),name:""}),t.n=6;break;case 5:t.p=5,t.v,A.value=[],E.value={market:S.value,symbol:e.trim().toUpperCase(),name:""};case 6:return t.p=6,T.value=!1,t.f(6);case 7:return t.a(2)}},t,null,[[3,5,6,7]])}));return function(e){return t.apply(this,arguments)}}(),Gt=function(){k.value&&k.value.trim()?S.value?E.value={market:S.value,symbol:k.value.trim().toUpperCase(),name:""}:u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")):u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseEnterSymbol"))},jt=function(t){E.value={market:t.market,symbol:t.symbol,name:t.name||t.symbol}},qt=function(){var t=(0,c.A)((0,l.A)().m(function t(e){var i;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e||(e=S.value||(P.value.length>0?P.value[0].value:"")),e){t.n=1;break}return t.a(2);case 1:return I.value=!0,t.p=2,t.n=3,(0,v.z6)({market:e,limit:10});case 3:i=t.v,i&&1===i.code&&i.data?M.value=i.data:M.value=[],t.n=5;break;case 4:t.p=4,t.v,M.value=[];case 5:return t.p=5,I.value=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(e){return t.apply(this,arguments)}}(),Zt=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,r,a,o,s,c;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e="",r="",!E.value){t.n=1;break}e=E.value.market,r=E.value.symbol.toUpperCase(),t.n=4;break;case 1:if(!k.value||!k.value.trim()){t.n=3;break}if(S.value){t.n=2;break}return u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),t.a(2);case 2:e=S.value,r=k.value.trim().toUpperCase(),t.n=4;break;case 3:return u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol")),t.a(2);case 4:return C.value=!0,t.p=5,t.n=6,(0,v.dp)({userid:n.value,market:e,symbol:r});case 6:if(a=t.v,!a||1!==a.code){t.n=8;break}return u.A.success(i.$t("dashboard.analysis.message.addStockSuccess")),Ht(),t.n=7,Bt();case 7:t.n=9;break;case 8:u.A.error((null===a||void 0===a?void 0:a.msg)||i.$t("dashboard.analysis.message.addStockFailed"));case 9:t.n=11;break;case 10:t.p=10,c=t.v,s=(null===c||void 0===c||null===(o=c.response)||void 0===o||null===(o=o.data)||void 0===o?void 0:o.msg)||(null===c||void 0===c?void 0:c.message)||i.$t("dashboard.analysis.message.addStockFailed"),u.A.error(s);case 11:return t.p=11,C.value=!1,t.f(11);case 12:return t.a(2)}},t,null,[[5,10,11,12]])}));return function(){return t.apply(this,arguments)}}(),Jt=function(t){if(!ie(t.id)){var e=t.params||t.defaultParams||{};j.value.push((0,d.A)((0,d.A)({},t),{},{id:t.id,params:(0,d.A)({},e)}))}},Qt=function(t){j.value=j.value.filter(function(e){return e.id!==t})},te=function(t){var e=t.action,i=t.indicator;if("add"===e){var n=(0,d.A)((0,d.A)({},i),{},{calculate:ee(i.id)});Jt(n)}else"remove"===e&&Qt(i.id)},ee=function(t){return null},ie=function(t){return"sma"===t?Z.some(function(t){return j.value.some(function(e){return e.id===t.id})}):"ema"===t?J.some(function(t){return j.value.some(function(e){return e.id===t.id})}):j.value.some(function(e){return e.id===t})},ne=function(){var t=new Set;return Z.forEach(function(e){return t.add(e.id)}),J.forEach(function(e){return t.add(e.id)}),j.value.filter(function(e){return!t.has(e.id)})},re=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,i,r;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value){t.n=1;break}return t.a(2);case 1:return et.value=!0,t.p=2,t.n=3,(0,f.Ay)({url:"/api/indicator/getIndicators",method:"get",params:{userid:n.value}});case 3:e=t.v,1===e.code&&e.data&&(i=e.data.filter(function(t){return!t.is_buy||0===t.is_buy||"0"===t.is_buy}),r=e.data.filter(function(t){return 1===t.is_buy||"1"===t.is_buy}),Q.value=i.map(function(t){return(0,d.A)((0,d.A)({},t),{},{type:"python",source:"custom"})}),tt.value=r.map(function(t){return(0,d.A)((0,d.A)({},t),{},{type:"python",source:"purchased"})})),t.n=5;break;case 4:t.p=4,t.v;case 5:return t.p=5,et.value=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(){return t.apply(this,arguments)}}(),ae=(0,h.KR)(null),oe=function(){var t=(0,c.A)((0,l.A)().m(function t(e,n){var r,a,o,s,c,h,p,f,v;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(r="".concat(n,"-").concat(e.id),!ie(r)){t.n=1;break}return Qt(r),t.a(2);case 1:if(t.p=1,a=e.code||"",ae.value){t.n=2;break}return u.A.error(i.$t("dashboard.indicator.error.chartNotReady")),t.a(2);case 2:if("function"===typeof ae.value.parsePythonStrategy){t.n=3;break}return u.A.error(i.$t("dashboard.indicator.error.chartMethodNotReady")),t.a(2);case 3:if("function"===typeof ae.value.executePythonStrategy){t.n=4;break}return u.A.error(i.$t("dashboard.indicator.error.chartExecuteNotReady")),t.a(2);case 4:if(o=ae.value.parsePythonStrategy(a),o){t.n=5;break}return u.A.error(i.$t("dashboard.indicator.error.parseFailed")),t.a(2);case 5:s=e.userParams||{},c=a,h=(0,d.A)({},s),p={id:r,name:e.name,type:"python",code:c,description:e.description,parsed:o,userParams:h,originalId:e.id,user_id:e.user_id||e.userId,is_encrypted:e.is_encrypted||e.isEncrypted||0,calculate:function(t,i){return ae.value.executePythonStrategy(c,t,(0,d.A)((0,d.A)({},i),h),{id:e.id,user_id:e.user_id||e.userId,is_encrypted:e.is_encrypted||e.isEncrypted||0})}},f=(0,d.A)((0,d.A)({},o.params),s),j.value.push((0,d.A)((0,d.A)({},p),{},{params:f})),t.n=7;break;case 6:t.p=6,v=t.v,u.A.error(i.$t("dashboard.indicator.error.addIndicatorFailed")+": "+(v.message||"未知错误"));case 7:return t.a(2)}},t,null,[[1,6]])}));return function(e,i){return t.apply(this,arguments)}}(),se=function(){var t=(0,c.A)((0,l.A)().m(function t(e,n){var r,a,o,s,c;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(r="".concat(n,"-").concat(e.id),!ie(r)){t.n=1;break}Qt(r),t.n=5;break;case 1:return t.p=1,st.value=!0,t.n=2,i.$http.get("/api/indicator/getIndicatorParams",{params:{indicator_id:e.id}});case 2:a=t.v,a&&1===a.code&&Array.isArray(a.data)&&a.data.length>0?(at.value=a.data,o="".concat(n,"-").concat(e.id),s=lt.value[o],c={},a.data.forEach(function(t){var e=s&&void 0!==s[t.name]?s[t.name]:t.default;e="int"===t.type?parseInt(e)||0:"float"===t.type?parseFloat(e)||0:"bool"===t.type?!0===e||"true"===e||1===e||"1"===e:e||"",c[t.name]=e}),ot.value=c,nt.value=e,rt.value=n,it.value=!0):oe(e,n),t.n=4;break;case 3:t.p=3,t.v,oe(e,n);case 4:return t.p=4,st.value=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}));return function(e,i){return t.apply(this,arguments)}}(),le=function(){if(nt.value){var t="".concat(rt.value,"-").concat(nt.value.id);lt.value[t]=(0,d.A)({},ot.value);var e=(0,d.A)((0,d.A)({},nt.value),{},{userParams:(0,d.A)({},ot.value)});oe(e,rt.value)}it.value=!1,nt.value=null,rt.value=""},ce=function(){ue(),it.value=!1,setTimeout(function(){nt.value=null,rt.value=""},100)},ue=function(){if(nt.value&&rt.value){var t="".concat(rt.value,"-").concat(nt.value.id);lt.value[t]=JSON.parse(JSON.stringify(ot.value))}},de=function(){ue()},he=function(t){var e=t.code,n=t.name;if(e&&e.trim())try{if(!ae.value)return void u.A.error(i.$t("dashboard.indicator.error.chartNotReady"));if("function"!==typeof ae.value.parsePythonStrategy)return void u.A.error(i.$t("dashboard.indicator.error.chartMethodNotReady"));if("function"!==typeof ae.value.executePythonStrategy)return void u.A.error(i.$t("dashboard.indicator.error.chartExecuteNotReady"));var r=ae.value.parsePythonStrategy(e);if(!r)return void u.A.error(i.$t("dashboard.indicator.error.parseFailedCheck"));var a={id:"temp-editor-indicator",name:n||"临时指标",type:"python",code:e,description:"",parsed:r,calculate:function(t,i){var n=e;return ae.value.executePythonStrategy(n,t,i)}},o=j.value.findIndex(function(t){return"temp-editor-indicator"===t.id});o>=0&&j.value.splice(o,1),j.value.push((0,d.A)((0,d.A)({},a),{},{params:(0,d.A)({},r.params)})),u.A.success(i.$t("dashboard.indicator.success.runIndicator"))}catch(s){u.A.error(i.$t("dashboard.indicator.error.runIndicatorFailed")+": "+(s.message||"未知错误"))}else u.A.warning(i.$t("dashboard.indicator.warning.enterCode"))},pe=function(){ht.value=null,dt.value=!0},fe=function(t){ht.value=t,dt.value=!0},ve=function(){ct.value=!ct.value},ge=function(t){a.A.confirm({title:i.$t("dashboard.indicator.delete.confirmTitle"),content:i.$t("dashboard.indicator.delete.confirmContent",{name:t.name}),okText:i.$t("dashboard.indicator.delete.confirmOk"),okType:"danger",cancelText:i.$t("dashboard.indicator.delete.confirmCancel"),onOk:function(){var e=(0,c.A)((0,l.A)().m(function e(){var r,a,o;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,f.Ay)({url:"/api/indicator/deleteIndicator",method:"post",data:{id:t.id,userid:n.value}});case 1:if(r=e.v,1!==r.code){e.n=3;break}return u.A.success(i.$t("dashboard.indicator.delete.success")),a="custom-"+t.id,ie(a)&&Qt(a),e.n=2,re();case 2:e.n=4;break;case 3:u.A.error(r.msg||i.$t("dashboard.indicator.delete.failed"));case 4:e.n=6;break;case 5:e.p=5,o=e.v,u.A.error(i.$t("dashboard.indicator.delete.failed")+": "+(o.message||"未知错误"));case 6:return e.a(2)}},e,null,[[0,5]])}));function r(){return e.apply(this,arguments)}return r}()})},me=function(t){ft.value=(0,d.A)({},t),pt.value=!0},ye=function(t){gt.value=(0,d.A)({},t),vt.value=!0},be=function(t){yt.value=t,mt.value=!0},xe=function(t){xt.value=(0,d.A)({},t),Ct.value=t.pricing_type||"free",St.value=t.price||10,kt.value=t.description||"",At.value=!!t.vip_free,bt.value=!0},_e=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,r;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value){t.n=1;break}return u.A.error(i.$t("dashboard.indicator.error.pleaseLogin")),t.a(2);case 1:return _t.value=!0,t.p=2,t.n=3,(0,f.Ay)({url:"/api/indicator/saveIndicator",method:"post",data:{userid:n.value,id:xt.value.id,code:xt.value.code,name:xt.value.name,description:kt.value,publishToCommunity:!0,pricingType:Ct.value,price:"paid"===Ct.value?St.value:0,vipFree:"paid"===Ct.value&&At.value}});case 3:if(e=t.v,1!==e.code){t.n=5;break}return u.A.success(i.$t("dashboard.indicator.publish.success")),bt.value=!1,xt.value=null,t.n=4,re();case 4:t.n=6;break;case 5:u.A.error(e.msg||i.$t("dashboard.indicator.publish.failed"));case 6:t.n=8;break;case 7:t.p=7,r=t.v,u.A.error(i.$t("dashboard.indicator.publish.failed")+": "+(r.message||""));case 8:return t.p=8,_t.value=!1,t.f(8);case 9:return t.a(2)}},t,null,[[2,7,8,9]])}));return function(){return t.apply(this,arguments)}}(),we=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value&&xt.value){t.n=1;break}return t.a(2);case 1:return wt.value=!0,t.p=2,t.n=3,(0,f.Ay)({url:"/api/indicator/saveIndicator",method:"post",data:{userid:n.value,id:xt.value.id,code:xt.value.code,name:xt.value.name,description:xt.value.description,publishToCommunity:!1,pricingType:"free",price:0,vipFree:!1}});case 3:if(e=t.v,1!==e.code){t.n=5;break}return u.A.success(i.$t("dashboard.indicator.publish.unpublishSuccess")),bt.value=!1,xt.value=null,t.n=4,re();case 4:t.n=6;break;case 5:u.A.error(e.msg||i.$t("dashboard.indicator.publish.unpublishFailed"));case 6:t.n=8;break;case 7:t.p=7,t.v,u.A.error(i.$t("dashboard.indicator.publish.unpublishFailed"));case 8:return t.p=8,wt.value=!1,t.f(8);case 9:return t.a(2)}},t,null,[[2,7,8,9]])}));return function(){return t.apply(this,arguments)}}(),Ce=function(){var t=(0,c.A)((0,l.A)().m(function t(e){var r,a,o;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value){t.n=1;break}return u.A.error(i.$t("dashboard.indicator.error.pleaseLogin")),t.a(2);case 1:return r=i.$refs.indicatorEditor,r&&(r.saving=!0),t.p=2,t.n=3,(0,f.Ay)({url:"/api/indicator/saveIndicator",method:"post",data:{userid:n.value,id:e.id||0,code:e.code}});case 3:if(a=t.v,1!==a.code){t.n=5;break}return u.A.success(i.$t("dashboard.indicator.save.success")),dt.value=!1,ht.value=null,t.n=4,re();case 4:t.n=6;break;case 5:u.A.error(a.msg||i.$t("dashboard.indicator.save.failed"));case 6:t.n=8;break;case 7:t.p=7,o=t.v,u.A.error(i.$t("dashboard.indicator.save.failed")+": "+(o.message||"未知错误"));case 8:return t.p=8,r&&(r.saving=!1),t.f(8);case 9:return t.a(2)}},t,null,[[2,7,8,9]])}));return function(e){return t.apply(this,arguments)}}(),Se=function(t){var e=t.end_time;if(1===e||"1"===e)return i.$t("dashboard.indicator.status.normalPermanent");if(!e||0===e)return i.$t("dashboard.indicator.status.normal");var n=Math.floor(Date.now()/1e3);return e0&&!S.value&&(S.value=P.value[0].value),S.value&&qt(S.value)):(E.value=null,k.value="",A.value=[],L.value=!1,D.value&&(clearTimeout(D.value),D.value=null))}),(0,h.wB)(function(){return ot.value},function(t){if(it.value&&nt.value&&rt.value){var e="".concat(rt.value,"-").concat(nt.value.id);lt.value[e]=JSON.parse(JSON.stringify(t))}},{deep:!0,immediate:!1}),(0,h.wB)(it,function(t){t||ue()}),{userId:n,klineChart:ae,searchSymbol:p,symbolSuggestions:m,watchlist:y,symbolSearchValue:x,symbolSearchOpen:_,currentSymbol:H,currentMarket:K,currentPrice:Y,priceChange:X,priceChangeClass:U,timeframe:G,loadingWatchlist:b,activeIndicators:j,trendIndicators:Dt,oscillatorIndicators:Pt,customIndicators:Q,purchasedIndicators:tt,loadingIndicators:et,realtimeEnabled:Mt,toggleRealtime:Ee,handleSymbolSearch:Ot,handleSymbolSelect:Wt,handleDropdownVisibleChange:zt,filterSymbolOption:Vt,getMarketName:Me,getMarketColor:Ie,setTimeframe:Lt,addIndicator:Jt,removeIndicator:Qt,isIndicatorActive:ie,loadIndicators:re,addPythonIndicator:oe,toggleIndicator:se,getIndicatorStatus:Se,getIndicatorStatusIcon:ke,getIndicatorStatusClass:Ae,getExpiryTimeText:Te,formatParams:Rt,loadWatchlist:Bt,getCustomActiveIndicators:ne,showIndicatorEditor:dt,editingIndicator:ht,handleCreateIndicator:pe,handleRunIndicator:he,handleSaveIndicator:Ce,handleEditIndicator:fe,handleDeleteIndicator:ge,toggleCustomSection:ve,customSectionCollapsed:ct,purchasedSectionCollapsed:ut,handlePriceChange:It,handleChartRetry:Et,handleIndicatorToggle:te,showParamsModal:it,pendingIndicator:nt,indicatorParams:at,indicatorParamValues:ot,loadingParams:st,confirmIndicatorParams:le,cancelIndicatorParams:ce,handleParamsModalAfterClose:de,showBacktestModal:pt,backtestIndicator:ft,handleOpenBacktest:me,showBacktestHistoryDrawer:vt,backtestHistoryIndicator:gt,handleOpenBacktestHistory:ye,showBacktestRunViewer:mt,selectedBacktestRun:yt,handleViewBacktestRun:be,showPublishModal:bt,publishIndicator:xt,publishing:_t,unpublishing:wt,publishPricingType:Ct,publishPrice:St,publishDescription:kt,publishVipFree:At,publishRules:Tt,handlePublishIndicator:xe,handleConfirmPublish:_e,handleUnpublish:we,selectedSymbol:H,selectedMarket:K,selectedTimeframe:G,isMobile:q,showAddStockModal:w,addingStock:C,selectedMarketTab:S,symbolSearchKeyword:k,symbolSearchResults:A,searchingSymbols:T,hotSymbols:M,loadingHotSymbols:I,selectedSymbolForAdd:E,marketTypes:P,hasSearched:L,handleCloseAddStockModal:Ht,handleMarketTabChange:Kt,handleSymbolSearchInput:Yt,handleSearchOrInput:Xt,searchSymbolsInModal:Ut,selectSymbol:jt,loadHotSymbols:qt,handleAddStock:Zt,handleDirectAdd:Gt,loadMarketTypes:$t,showQuickTrade:R,qtSymbol:F,qtSide:B,qtPrice:N,isCryptoMarket:O,openQuickTrade:z,onQuickTradeSuccess:W,handleQuickTradeSymbolChange:V,goToIndicatorMarket:$}}},la=sa,ca=(0,T.A)(la,n,r,!1,null,"b17e86c2",null),ua=ca.exports},55218:function(t,e,i){(function(t){t(i(15237))})(function(t){var e={pairs:"()[]{}''\"\"",closeBefore:")]}'\":;>",triples:"",explode:"[]{}"},i=t.Pos;function n(t,i){return"pairs"==i&&"string"==typeof t?t:"object"==typeof t&&null!=t[i]?t[i]:e[i]}t.defineOption("autoCloseBrackets",!1,function(e,i,o){o&&o!=t.Init&&(e.removeKeyMap(r),e.state.closeBrackets=null),i&&(a(n(i,"pairs")),e.state.closeBrackets=i,e.addKeyMap(r))});var r={Backspace:l,Enter:c};function a(t){for(var e=0;e=0;l--){var u=o[l].head;e.replaceRange("",i(u.line,u.ch-1),i(u.line,u.ch+1),"+delete")}}function c(e){var i=s(e),r=i&&n(i,"explode");if(!r||e.getOption("disableInput"))return t.Pass;for(var a=e.listSelections(),o=0;o0?{line:o.head.line,ch:o.head.ch+e}:{line:o.head.line-1};i.push({anchor:s,head:s})}t.setSelections(i,r)}function d(e){var n=t.cmpPos(e.anchor,e.head)>0;return{anchor:new i(e.anchor.line,e.anchor.ch+(n?-1:1)),head:new i(e.head.line,e.head.ch+(n?1:-1))}}function h(e,r){var a=s(e);if(!a||e.getOption("disableInput"))return t.Pass;var o=n(a,"pairs"),l=o.indexOf(r);if(-1==l)return t.Pass;for(var c,h=n(a,"closeBefore"),p=n(a,"triples"),v=o.charAt(l+1)==r,g=e.listSelections(),m=l%2==0,y=0;y1&&p.indexOf(r)>=0&&e.getRange(i(_.line,_.ch-2),_)==r+r){if(_.ch>2&&/\bstring/.test(e.getTokenTypeAt(i(_.line,_.ch-2))))return t.Pass;b="addFour"}else if(v){var C=0==_.ch?" ":e.getRange(i(_.line,_.ch-1),_);if(t.isWordChar(w)||C==r||t.isWordChar(C))return t.Pass;b="both"}else{if(!m||!(0===w.length||/\s/.test(w)||h.indexOf(w)>-1))return t.Pass;b="both"}else b=v&&f(e,_)?"both":p.indexOf(r)>=0&&e.getRange(_,i(_.line,_.ch+3))==r+r+r?"skipThree":"skip";if(c){if(c!=b)return t.Pass}else c=b}var S=l%2?o.charAt(l-1):r,k=l%2?r:o.charAt(l+1);e.operation(function(){if("skip"==c)u(e,1);else if("skipThree"==c)u(e,3);else if("surround"==c){for(var t=e.getSelections(),i=0;i",")":"(<","[":"]>","]":"[<","{":"}>","}":"{<","<":">>",">":"<<"};function r(t){return t&&t.bracketRegex||/[(){}[\]]/}function a(t,e,a){var s=t.getLineHandle(e.line),l=e.ch-1,c=a&&a.afterCursor;null==c&&(c=/(^| )cm-fat-cursor($| )/.test(t.getWrapperElement().className));var u=r(a),d=!c&&l>=0&&u.test(s.text.charAt(l))&&n[s.text.charAt(l)]||u.test(s.text.charAt(l+1))&&n[s.text.charAt(++l)];if(!d)return null;var h=">"==d.charAt(1)?1:-1;if(a&&a.strict&&h>0!=(l==e.ch))return null;var p=t.getTokenTypeAt(i(e.line,l+1)),f=o(t,i(e.line,l+(h>0?1:0)),h,p,a);return null==f?null:{from:i(e.line,l),to:f&&f.pos,match:f&&f.ch==d.charAt(0),forward:h>0}}function o(t,e,a,o,s){for(var l=s&&s.maxScanLineLength||1e4,c=s&&s.maxScanLines||1e3,u=[],d=r(s),h=a>0?Math.min(e.line+c,t.lastLine()+1):Math.max(t.firstLine()-1,e.line-c),p=e.line;p!=h;p+=a){var f=t.getLine(p);if(f){var v=a>0?0:f.length-1,g=a>0?f.length:-1;if(!(f.length>l))for(p==e.line&&(v=e.ch-(a<0?1:0));v!=g;v+=a){var m=f.charAt(v);if(d.test(m)&&(void 0===o||(t.getTokenTypeAt(i(p,v+1))||"")==(o||""))){var y=n[m];if(y&&">"==y.charAt(1)==a>0)u.push(m);else{if(!u.length)return{pos:i(p,v),ch:m};u.pop()}}}}}return p-a!=(a>0?t.lastLine():t.firstLine())&&null}function s(t,n,r){for(var o=t.state.matchBrackets.maxHighlightLineLength||1e3,s=r&&r.highlightNonMatching,l=[],c=t.listSelections(),u=0;u2),m=/Android/.test(t),y=g||m||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(t),b=g||/Mac/.test(e),x=/\bCrOS\b/.test(t),_=/win/i.test(e),w=h&&t.match(/Version\/(\d*\.\d*)/);w&&(w=Number(w[1])),w&&w>=15&&(h=!1,l=!0);var C=b&&(c||h&&(null==w||w<12.11)),S=i||o&&s>=9;function k(t){return new RegExp("(^|\\s)"+t+"(?:$|\\s)\\s*")}var A,T=function(t,e){var i=t.className,n=k(e).exec(i);if(n){var r=i.slice(n.index+n[0].length);t.className=i.slice(0,n.index)+(r?n[1]+r:"")}};function M(t){for(var e=t.childNodes.length;e>0;--e)t.removeChild(t.firstChild);return t}function I(t,e){return M(t).appendChild(e)}function E(t,e,i,n){var r=document.createElement(t);if(i&&(r.className=i),n&&(r.style.cssText=n),"string"==typeof e)r.appendChild(document.createTextNode(e));else if(e)for(var a=0;a=e)return o+(e-a);o+=s-a,o+=i-o%i,a=s+1}}g?B=function(t){t.selectionStart=0,t.selectionEnd=t.value.length}:o&&(B=function(t){try{t.select()}catch(e){}});var K=function(){this.id=null,this.f=null,this.time=0,this.handler=V(this.onTimeout,this)};function Y(t,e){for(var i=0;i=e)return n+Math.min(o,e-r);if(r+=a-n,r+=i-r%i,n=a+1,r>=e)return n}}var J=[""];function Q(t){while(J.length<=t)J.push(tt(J)+" ");return J[t]}function tt(t){return t[t.length-1]}function et(t,e){for(var i=[],n=0;n"€"&&(t.toUpperCase()!=t.toLowerCase()||at.test(t))}function st(t,e){return e?!!(e.source.indexOf("\\w")>-1&&ot(t))||e.test(t):ot(t)}function lt(t){for(var e in t)if(t.hasOwnProperty(e)&&t[e])return!1;return!0}var ct=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function ut(t){return t.charCodeAt(0)>=768&&ct.test(t)}function dt(t,e,i){while((i<0?e>0:ei?-1:1;;){if(e==i)return e;var r=(e+i)/2,a=n<0?Math.ceil(r):Math.floor(r);if(a==e)return t(a)?e:i;t(a)?i=a:e=a+n}}function pt(t,e,i,n){if(!t)return n(e,i,"ltr",0);for(var r=!1,a=0;ae||e==i&&o.to==e)&&(n(Math.max(o.from,e),Math.min(o.to,i),1==o.level?"rtl":"ltr",a),r=!0)}r||n(e,i,"ltr")}var ft=null;function vt(t,e,i){var n;ft=null;for(var r=0;re)return r;a.to==e&&(a.from!=a.to&&"before"==i?n=r:ft=r),a.from==e&&(a.from!=a.to&&"before"!=i?n=r:ft=r)}return null!=n?n:ft}var gt=function(){var t="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",e="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";function i(i){return i<=247?t.charAt(i):1424<=i&&i<=1524?"R":1536<=i&&i<=1785?e.charAt(i-1536):1774<=i&&i<=2220?"r":8192<=i&&i<=8203?"w":8204==i?"b":"L"}var n=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,r=/[stwN]/,a=/[LRr]/,o=/[Lb1n]/,s=/[1n]/;function l(t,e,i){this.level=t,this.from=e,this.to=i}return function(t,e){var c="ltr"==e?"L":"R";if(0==t.length||"ltr"==e&&!n.test(t))return!1;for(var u=t.length,d=[],h=0;h-1&&(n[e]=r.slice(0,a).concat(r.slice(a+1)))}}}function wt(t,e){var i=xt(t,e);if(i.length)for(var n=Array.prototype.slice.call(arguments,2),r=0;r0}function At(t){t.prototype.on=function(t,e){bt(this,t,e)},t.prototype.off=function(t,e){_t(this,t,e)}}function Tt(t){t.preventDefault?t.preventDefault():t.returnValue=!1}function Mt(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0}function It(t){return null!=t.defaultPrevented?t.defaultPrevented:0==t.returnValue}function Et(t){Tt(t),Mt(t)}function Dt(t){return t.target||t.srcElement}function Pt(t){var e=t.which;return null==e&&(1&t.button?e=1:2&t.button?e=3:4&t.button&&(e=2)),b&&t.ctrlKey&&1==e&&(e=3),e}var Lt,Rt,Ft=function(){if(o&&s<9)return!1;var t=E("div");return"draggable"in t||"dragDrop"in t}();function Bt(t){if(null==Lt){var e=E("span","​");I(t,E("span",[e,document.createTextNode("x")])),0!=t.firstChild.offsetHeight&&(Lt=e.offsetWidth<=1&&e.offsetHeight>2&&!(o&&s<8))}var i=Lt?E("span","​"):E("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return i.setAttribute("cm-text",""),i}function Nt(t){if(null!=Rt)return Rt;var e=I(t,document.createTextNode("AخA")),i=A(e,0,1).getBoundingClientRect(),n=A(e,1,2).getBoundingClientRect();return M(t),!(!i||i.left==i.right)&&(Rt=n.right-i.right<3)}var Ot=3!="\n\nb".split(/\n/).length?function(t){var e=0,i=[],n=t.length;while(e<=n){var r=t.indexOf("\n",e);-1==r&&(r=t.length);var a=t.slice(e,"\r"==t.charAt(r-1)?r-1:r),o=a.indexOf("\r");-1!=o?(i.push(a.slice(0,o)),e+=o+1):(i.push(a),e=r+1)}return i}:function(t){return t.split(/\r\n?|\n/)},zt=window.getSelection?function(t){try{return t.selectionStart!=t.selectionEnd}catch(e){return!1}}:function(t){var e;try{e=t.ownerDocument.selection.createRange()}catch(i){}return!(!e||e.parentElement()!=t)&&0!=e.compareEndPoints("StartToEnd",e)},Wt=function(){var t=E("div");return"oncopy"in t||(t.setAttribute("oncopy","return;"),"function"==typeof t.oncopy)}(),Vt=null;function $t(t){if(null!=Vt)return Vt;var e=I(t,E("span","x")),i=e.getBoundingClientRect(),n=A(e,0,1).getBoundingClientRect();return Vt=Math.abs(i.left-n.left)>1}var Ht={},Kt={};function Yt(t,e){arguments.length>2&&(e.dependencies=Array.prototype.slice.call(arguments,2)),Ht[t]=e}function Xt(t,e){Kt[t]=e}function Ut(t){if("string"==typeof t&&Kt.hasOwnProperty(t))t=Kt[t];else if(t&&"string"==typeof t.name&&Kt.hasOwnProperty(t.name)){var e=Kt[t.name];"string"==typeof e&&(e={name:e}),t=rt(e,t),t.name=e.name}else{if("string"==typeof t&&/^[\w\-]+\/[\w\-]+\+xml$/.test(t))return Ut("application/xml");if("string"==typeof t&&/^[\w\-]+\/[\w\-]+\+json$/.test(t))return Ut("application/json")}return"string"==typeof t?{name:t}:t||{name:"null"}}function Gt(t,e){e=Ut(e);var i=Ht[e.name];if(!i)return Gt(t,"text/plain");var n=i(t,e);if(jt.hasOwnProperty(e.name)){var r=jt[e.name];for(var a in r)r.hasOwnProperty(a)&&(n.hasOwnProperty(a)&&(n["_"+a]=n[a]),n[a]=r[a])}if(n.name=e.name,e.helperType&&(n.helperType=e.helperType),e.modeProps)for(var o in e.modeProps)n[o]=e.modeProps[o];return n}var jt={};function qt(t,e){var i=jt.hasOwnProperty(t)?jt[t]:jt[t]={};$(e,i)}function Zt(t,e){if(!0===e)return e;if(t.copyState)return t.copyState(e);var i={};for(var n in e){var r=e[n];r instanceof Array&&(r=r.concat([])),i[n]=r}return i}function Jt(t,e){var i;while(t.innerMode){if(i=t.innerMode(e),!i||i.mode==t)break;e=i.state,t=i.mode}return i||{mode:t,state:e}}function Qt(t,e,i){return!t.startState||t.startState(e,i)}var te=function(t,e,i){this.pos=this.start=0,this.string=t,this.tabSize=e||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=i};function ee(t,e){if(e-=t.first,e<0||e>=t.size)throw new Error("There is no line "+(e+t.first)+" in the document.");var i=t;while(!i.lines)for(var n=0;;++n){var r=i.children[n],a=r.chunkSize();if(e=t.first&&ei?ce(i,ee(t,i).text.length):me(e,ee(t,e.line).text.length)}function me(t,e){var i=t.ch;return null==i||i>e?ce(t.line,e):i<0?ce(t.line,0):t}function ye(t,e){for(var i=[],n=0;n=this.string.length},te.prototype.sol=function(){return this.pos==this.lineStart},te.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},te.prototype.next=function(){if(this.pose},te.prototype.eatSpace=function(){var t=this.pos;while(/[\s\u00a0]/.test(this.string.charAt(this.pos)))++this.pos;return this.pos>t},te.prototype.skipToEnd=function(){this.pos=this.string.length},te.prototype.skipTo=function(t){var e=this.string.indexOf(t,this.pos);if(e>-1)return this.pos=e,!0},te.prototype.backUp=function(t){this.pos-=t},te.prototype.column=function(){return this.lastColumnPos0?null:(n&&!1!==e&&(this.pos+=n[0].length),n)}var r=function(t){return i?t.toLowerCase():t},a=this.string.substr(this.pos,t.length);if(r(a)==r(t))return!1!==e&&(this.pos+=t.length),!0},te.prototype.current=function(){return this.string.slice(this.start,this.pos)},te.prototype.hideFirstChars=function(t,e){this.lineStart+=t;try{return e()}finally{this.lineStart-=t}},te.prototype.lookAhead=function(t){var e=this.lineOracle;return e&&e.lookAhead(t)},te.prototype.baseToken=function(){var t=this.lineOracle;return t&&t.baseToken(this.pos)};var be=function(t,e){this.state=t,this.lookAhead=e},xe=function(t,e,i,n){this.state=e,this.doc=t,this.line=i,this.maxLookAhead=n||0,this.baseTokens=null,this.baseTokenPos=1};function _e(t,e,i,n){var r=[t.state.modeGen],a={};Ee(t,e.text,t.doc.mode,i,function(t,e){return r.push(t,e)},a,n);for(var o=i.state,s=function(n){i.baseTokens=r;var s=t.state.overlays[n],l=1,c=0;i.state=!0,Ee(t,e.text,s.mode,i,function(t,e){var i=l;while(ct&&r.splice(l,1,t,r[l+1],n),l+=2,c=Math.min(t,n)}if(e)if(s.opaque)r.splice(i,l-i,t,"overlay "+e),l=i+2;else for(;it.options.maxHighlightLength&&Zt(t.doc.mode,n.state),a=_e(t,e,n);r&&(n.state=r),e.stateAfter=n.save(!r),e.styles=a.styles,a.classes?e.styleClasses=a.classes:e.styleClasses&&(e.styleClasses=null),i===t.doc.highlightFrontier&&(t.doc.modeFrontier=Math.max(t.doc.modeFrontier,++t.doc.highlightFrontier))}return e.styles}function Ce(t,e,i){var n=t.doc,r=t.display;if(!n.mode.startState)return new xe(n,!0,e);var a=De(t,e,i),o=a>n.first&&ee(n,a-1).stateAfter,s=o?xe.fromSaved(n,o,a):new xe(n,Qt(n.mode),a);return n.iter(a,e,function(i){Se(t,i.text,s);var n=s.line;i.stateAfter=n==e-1||n%5==0||n>=r.viewFrom&&ne.start)return a}throw new Error("Mode "+t.name+" failed to advance stream.")}xe.prototype.lookAhead=function(t){var e=this.doc.getLine(this.line+t);return null!=e&&t>this.maxLookAhead&&(this.maxLookAhead=t),e},xe.prototype.baseToken=function(t){if(!this.baseTokens)return null;while(this.baseTokens[this.baseTokenPos]<=t)this.baseTokenPos+=2;var e=this.baseTokens[this.baseTokenPos+1];return{type:e&&e.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-t}},xe.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},xe.fromSaved=function(t,e,i){return e instanceof be?new xe(t,Zt(t.mode,e.state),i,e.lookAhead):new xe(t,Zt(t.mode,e),i)},xe.prototype.save=function(t){var e=!1!==t?Zt(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new be(e,this.maxLookAhead):e};var Te=function(t,e,i){this.start=t.start,this.end=t.pos,this.string=t.current(),this.type=e||null,this.state=i};function Me(t,e,i,n){var r,a=t.doc,o=a.mode;e=ge(a,e);var s,l=ee(a,e.line),c=Ce(t,e.line,i),u=new te(l.text,t.options.tabSize,c);n&&(s=[]);while((n||u.post.options.maxHighlightLength?(s=!1,o&&Se(t,e,n,d.pos),d.pos=e.length,l=null):l=Ie(Ae(i,d,n.state,h),a),h){var p=h[0].name;p&&(l="m-"+(l?p+" "+l:p))}if(!s||u!=l){while(co;--s){if(s<=a.first)return a.first;var l=ee(a,s-1),c=l.stateAfter;if(c&&(!i||s+(c instanceof be?c.lookAhead:0)<=a.modeFrontier))return s;var u=H(l.text,null,t.options.tabSize);(null==r||n>u)&&(r=s-1,n=u)}return r}function Pe(t,e){if(t.modeFrontier=Math.min(t.modeFrontier,e),!(t.highlightFrontieri;n--){var r=ee(t,n).stateAfter;if(r&&(!(r instanceof be)||n+r.lookAhead=e:a.to>e);(n||(n=[])).push(new Ne(o,a.from,l?null:a.to))}}return n}function $e(t,e,i){var n;if(t)for(var r=0;r=e:a.to>e);if(s||a.from==e&&"bookmark"==o.type&&(!i||a.marker.insertLeft)){var l=null==a.from||(o.inclusiveLeft?a.from<=e:a.from0&&s)for(var x=0;x0)){var u=[l,1],d=ue(c.from,s.from),h=ue(c.to,s.to);(d<0||!o.inclusiveLeft&&!d)&&u.push({from:c.from,to:s.from}),(h>0||!o.inclusiveRight&&!h)&&u.push({from:s.to,to:c.to}),r.splice.apply(r,u),l+=u.length-3}}return r}function Xe(t){var e=t.markedSpans;if(e){for(var i=0;ie)&&(!i||qe(i,a.marker)<0)&&(i=a.marker)}return i}function ei(t,e,i,n,r){var a=ee(t,e),o=Re&&a.markedSpans;if(o)for(var s=0;s=0&&d<=0||u<=0&&d>=0)&&(u<=0&&(l.marker.inclusiveRight&&r.inclusiveLeft?ue(c.to,i)>=0:ue(c.to,i)>0)||u>=0&&(l.marker.inclusiveRight&&r.inclusiveLeft?ue(c.from,n)<=0:ue(c.from,n)<0)))return!0}}}function ii(t){var e;while(e=Je(t))t=e.find(-1,!0).line;return t}function ni(t){var e;while(e=Qe(t))t=e.find(1,!0).line;return t}function ri(t){var e,i;while(e=Qe(t))t=e.find(1,!0).line,(i||(i=[])).push(t);return i}function ai(t,e){var i=ee(t,e),n=ii(i);return i==n?e:ae(n)}function oi(t,e){if(e>t.lastLine())return e;var i,n=ee(t,e);if(!si(t,n))return e;while(i=Qe(n))n=i.find(1,!0).line;return ae(n)+1}function si(t,e){var i=Re&&e.markedSpans;if(i)for(var n=void 0,r=0;re.maxLineLength&&(e.maxLineLength=i,e.maxLine=t)})}var hi=function(t,e,i){this.text=t,Ue(this,e),this.height=i?i(this):1};function pi(t,e,i,n){t.text=e,t.stateAfter&&(t.stateAfter=null),t.styles&&(t.styles=null),null!=t.order&&(t.order=null),Xe(t),Ue(t,i);var r=n?n(t):1;r!=t.height&&re(t,r)}function fi(t){t.parent=null,Xe(t)}hi.prototype.lineNo=function(){return ae(this)},At(hi);var vi={},gi={};function mi(t,e){if(!t||/^\s*$/.test(t))return null;var i=e.addModeClass?gi:vi;return i[t]||(i[t]=t.replace(/\S+/g,"cm-$&"))}function yi(t,e){var i=D("span",null,null,l?"padding-right: .1px":null),n={pre:D("pre",[i],"CodeMirror-line"),content:i,col:0,pos:0,cm:t,trailingSpace:!1,splitSpaces:t.getOption("lineWrapping")};e.measure={};for(var r=0;r<=(e.rest?e.rest.length:0);r++){var a=r?e.rest[r-1]:e.line,o=void 0;n.pos=0,n.addToken=xi,Nt(t.display.measure)&&(o=mt(a,t.doc.direction))&&(n.addToken=wi(n.addToken,o)),n.map=[];var s=e!=t.display.externalMeasured&&ae(a);Si(a,n,we(t,a,s)),a.styleClasses&&(a.styleClasses.bgClass&&(n.bgClass=F(a.styleClasses.bgClass,n.bgClass||"")),a.styleClasses.textClass&&(n.textClass=F(a.styleClasses.textClass,n.textClass||""))),0==n.map.length&&n.map.push(0,0,n.content.appendChild(Bt(t.display.measure))),0==r?(e.measure.map=n.map,e.measure.cache={}):((e.measure.maps||(e.measure.maps=[])).push(n.map),(e.measure.caches||(e.measure.caches=[])).push({}))}if(l){var c=n.content.lastChild;(/\bcm-tab\b/.test(c.className)||c.querySelector&&c.querySelector(".cm-tab"))&&(n.content.className="cm-tab-wrap-hack")}return wt(t,"renderLine",t,e.line,n.pre),n.pre.className&&(n.textClass=F(n.pre.className,n.textClass||"")),n}function bi(t){var e=E("span","•","cm-invalidchar");return e.title="\\u"+t.charCodeAt(0).toString(16),e.setAttribute("aria-label",e.title),e}function xi(t,e,i,n,r,a,l){if(e){var c,u=t.splitSpaces?_i(e,t.trailingSpace):e,d=t.cm.state.specialChars,h=!1;if(d.test(e)){c=document.createDocumentFragment();var p=0;while(1){d.lastIndex=p;var f=d.exec(e),v=f?f.index-p:e.length-p;if(v){var g=document.createTextNode(u.slice(p,p+v));o&&s<9?c.appendChild(E("span",[g])):c.appendChild(g),t.map.push(t.pos,t.pos+v,g),t.col+=v,t.pos+=v}if(!f)break;p+=v+1;var m=void 0;if("\t"==f[0]){var y=t.cm.options.tabSize,b=y-t.col%y;m=c.appendChild(E("span",Q(b),"cm-tab")),m.setAttribute("role","presentation"),m.setAttribute("cm-text","\t"),t.col+=b}else"\r"==f[0]||"\n"==f[0]?(m=c.appendChild(E("span","\r"==f[0]?"␍":"␤","cm-invalidchar")),m.setAttribute("cm-text",f[0]),t.col+=1):(m=t.cm.options.specialCharPlaceholder(f[0]),m.setAttribute("cm-text",f[0]),o&&s<9?c.appendChild(E("span",[m])):c.appendChild(m),t.col+=1);t.map.push(t.pos,t.pos+1,m),t.pos++}}else t.col+=e.length,c=document.createTextNode(u),t.map.push(t.pos,t.pos+e.length,c),o&&s<9&&(h=!0),t.pos+=e.length;if(t.trailingSpace=32==u.charCodeAt(e.length-1),i||n||r||h||a||l){var x=i||"";n&&(x+=n),r&&(x+=r);var _=E("span",[c],x,a);if(l)for(var w in l)l.hasOwnProperty(w)&&"style"!=w&&"class"!=w&&_.setAttribute(w,l[w]);return t.content.appendChild(_)}t.content.appendChild(c)}}function _i(t,e){if(t.length>1&&!/ /.test(t))return t;for(var i=e,n="",r=0;rc&&d.from<=c)break;if(d.to>=u)return t(i,n,r,a,o,s,l);t(i,n.slice(0,d.to-c),r,a,null,s,l),a=null,n=n.slice(d.to-c),c=d.to}}}function Ci(t,e,i,n){var r=!n&&i.widgetNode;r&&t.map.push(t.pos,t.pos+e,r),!n&&t.cm.display.input.needsContentAttribute&&(r||(r=t.content.appendChild(document.createElement("span"))),r.setAttribute("cm-marker",i.id)),r&&(t.cm.display.input.setUneditable(r),t.content.appendChild(r)),t.pos+=e,t.trailingSpace=!1}function Si(t,e,i){var n=t.markedSpans,r=t.text,a=0;if(n)for(var o,s,l,c,u,d,h,p=r.length,f=0,v=1,g="",m=0;;){if(m==f){l=c=u=s="",h=null,d=null,m=1/0;for(var y=[],b=void 0,x=0;xf||w.collapsed&&_.to==f&&_.from==f)){if(null!=_.to&&_.to!=f&&m>_.to&&(m=_.to,c=""),w.className&&(l+=" "+w.className),w.css&&(s=(s?s+";":"")+w.css),w.startStyle&&_.from==f&&(u+=" "+w.startStyle),w.endStyle&&_.to==m&&(b||(b=[])).push(w.endStyle,_.to),w.title&&((h||(h={})).title=w.title),w.attributes)for(var C in w.attributes)(h||(h={}))[C]=w.attributes[C];w.collapsed&&(!d||qe(d.marker,w)<0)&&(d=_)}else _.from>f&&m>_.from&&(m=_.from)}if(b)for(var S=0;S=p)break;var A=Math.min(p,m);while(1){if(g){var T=f+g.length;if(!d){var M=T>A?g.slice(0,A-f):g;e.addToken(e,M,o?o+l:l,u,f+M.length==m?c:"",s,h)}if(T>=A){g=g.slice(A-f),f=A;break}f=T,u=""}g=r.slice(a,a=i[v++]),o=mi(i[v++],e.cm.options)}}else for(var I=1;I2&&a.push((l.bottom+c.top)/2-i.top)}}a.push(i.bottom-i.top)}}function en(t,e,i){if(t.line==e)return{map:t.measure.map,cache:t.measure.cache};if(t.rest){for(var n=0;ni)return{map:t.measure.maps[r],cache:t.measure.caches[r],before:!0}}}function nn(t,e){e=ii(e);var i=ae(e),n=t.display.externalMeasured=new ki(t.doc,e,i);n.lineN=i;var r=n.built=yi(t,n);return n.text=r.pre,I(t.display.lineMeasure,r.pre),n}function rn(t,e,i,n){return sn(t,on(t,e),i,n)}function an(t,e){if(e>=t.display.viewFrom&&e=i.lineN&&ee)&&(a=l-s,r=a-1,e>=l&&(o="right")),null!=r){if(n=t[c+2],s==l&&i==(n.insertLeft?"left":"right")&&(o=i),"left"==i&&0==r)while(c&&t[c-2]==t[c-3]&&t[c-1].insertLeft)n=t[2+(c-=3)],o="left";if("right"==i&&r==l-s)while(c=0;r--)if((i=t[r]).left!=i.right)break;return i}function hn(t,e,i,n){var r,a=un(e.map,i,n),l=a.node,c=a.start,u=a.end,d=a.collapse;if(3==l.nodeType){for(var h=0;h<4;h++){while(c&&ut(e.line.text.charAt(a.coverStart+c)))--c;while(a.coverStart+u0&&(d=n="right"),r=t.options.lineWrapping&&(p=l.getClientRects()).length>1?p["right"==n?p.length-1:0]:l.getBoundingClientRect()}if(o&&s<9&&!c&&(!r||!r.left&&!r.right)){var f=l.parentNode.getClientRects()[0];r=f?{left:f.left,right:f.left+Rn(t.display),top:f.top,bottom:f.bottom}:cn}for(var v=r.top-e.rect.top,g=r.bottom-e.rect.top,m=(v+g)/2,y=e.view.measure.heights,b=0;b=n.text.length?(l=n.text.length,c="before"):l<=0&&(l=0,c="after"),!s)return o("before"==c?l-1:l,"before"==c);function u(t,e,i){var n=s[e],r=1==n.level;return o(i?t-1:t,r!=i)}var d=vt(s,l,c),h=ft,p=u(l,d,"before"==c);return null!=h&&(p.other=u(l,h,"before"!=c)),p}function Sn(t,e){var i=0;e=ge(t.doc,e),t.options.lineWrapping||(i=Rn(t.display)*e.ch);var n=ee(t.doc,e.line),r=ci(n)+Gi(t.display);return{left:i,right:i,top:r,bottom:r+n.height}}function kn(t,e,i,n,r){var a=ce(t,e,i);return a.xRel=r,n&&(a.outside=n),a}function An(t,e,i){var n=t.doc;if(i+=t.display.viewOffset,i<0)return kn(n.first,0,null,-1,-1);var r=oe(n,i),a=n.first+n.size-1;if(r>a)return kn(n.first+n.size-1,ee(n,a).text.length,null,1,1);e<0&&(e=0);for(var o=ee(n,r);;){var s=En(t,o,r,e,i),l=ti(o,s.ch+(s.xRel>0||s.outside>0?1:0));if(!l)return s;var c=l.find(1);if(c.line==r)return c;o=ee(n,r=c.line)}}function Tn(t,e,i,n){n-=bn(e);var r=e.text.length,a=ht(function(e){return sn(t,i,e-1).bottom<=n},r,0);return r=ht(function(e){return sn(t,i,e).top>n},a,r),{begin:a,end:r}}function Mn(t,e,i,n){i||(i=on(t,e));var r=xn(t,e,sn(t,i,n),"line").top;return Tn(t,e,i,r)}function In(t,e,i,n){return!(t.bottom<=i)&&(t.top>i||(n?t.left:t.right)>e)}function En(t,e,i,n,r){r-=ci(e);var a=on(t,e),o=bn(e),s=0,l=e.text.length,c=!0,u=mt(e,t.doc.direction);if(u){var d=(t.options.lineWrapping?Pn:Dn)(t,e,i,a,u,n,r);c=1!=d.level,s=c?d.from:d.to-1,l=c?d.to:d.from-1}var h,p,f=null,v=null,g=ht(function(e){var i=sn(t,a,e);return i.top+=o,i.bottom+=o,!!In(i,n,r,!1)&&(i.top<=r&&i.left<=n&&(f=e,v=i),!0)},s,l),m=!1;if(v){var y=n-v.left=x.bottom?1:0}return g=dt(e.text,g,1),kn(i,g,p,m,n-h)}function Dn(t,e,i,n,r,a,o){var s=ht(function(s){var l=r[s],c=1!=l.level;return In(Cn(t,ce(i,c?l.to:l.from,c?"before":"after"),"line",e,n),a,o,!0)},0,r.length-1),l=r[s];if(s>0){var c=1!=l.level,u=Cn(t,ce(i,c?l.from:l.to,c?"after":"before"),"line",e,n);In(u,a,o,!0)&&u.top>o&&(l=r[s-1])}return l}function Pn(t,e,i,n,r,a,o){var s=Tn(t,e,n,o),l=s.begin,c=s.end;/\s/.test(e.text.charAt(c-1))&&c--;for(var u=null,d=null,h=0;h=c||p.to<=l)){var f=1!=p.level,v=sn(t,n,f?Math.min(c,p.to)-1:Math.max(l,p.from)).right,g=vg)&&(u=p,d=g)}}return u||(u=r[r.length-1]),u.fromc&&(u={from:u.from,to:c,level:u.level}),u}function Ln(t){if(null!=t.cachedTextHeight)return t.cachedTextHeight;if(null==ln){ln=E("pre",null,"CodeMirror-line-like");for(var e=0;e<49;++e)ln.appendChild(document.createTextNode("x")),ln.appendChild(E("br"));ln.appendChild(document.createTextNode("x"))}I(t.measure,ln);var i=ln.offsetHeight/50;return i>3&&(t.cachedTextHeight=i),M(t.measure),i||1}function Rn(t){if(null!=t.cachedCharWidth)return t.cachedCharWidth;var e=E("span","xxxxxxxxxx"),i=E("pre",[e],"CodeMirror-line-like");I(t.measure,i);var n=e.getBoundingClientRect(),r=(n.right-n.left)/10;return r>2&&(t.cachedCharWidth=r),r||10}function Fn(t){for(var e=t.display,i={},n={},r=e.gutters.clientLeft,a=e.gutters.firstChild,o=0;a;a=a.nextSibling,++o){var s=t.display.gutterSpecs[o].className;i[s]=a.offsetLeft+a.clientLeft+r,n[s]=a.clientWidth}return{fixedPos:Bn(e),gutterTotalWidth:e.gutters.offsetWidth,gutterLeft:i,gutterWidth:n,wrapperWidth:e.wrapper.clientWidth}}function Bn(t){return t.scroller.getBoundingClientRect().left-t.sizer.getBoundingClientRect().left}function Nn(t){var e=Ln(t.display),i=t.options.lineWrapping,n=i&&Math.max(5,t.display.scroller.clientWidth/Rn(t.display)-3);return function(r){if(si(t.doc,r))return 0;var a=0;if(r.widgets)for(var o=0;o0&&(l=ee(t.doc,c.line).text).length==c.ch){var u=H(l,l.length,t.options.tabSize)-l.length;c=ce(c.line,Math.max(0,Math.round((a-qi(t.display).left)/Rn(t.display))-u))}return c}function Wn(t,e){if(e>=t.display.viewTo)return null;if(e-=t.display.viewFrom,e<0)return null;for(var i=t.display.view,n=0;ne)&&(r.updateLineNumbers=e),t.curOp.viewChanged=!0,e>=r.viewTo)Re&&ai(t.doc,e)r.viewFrom?Hn(t):(r.viewFrom+=n,r.viewTo+=n);else if(e<=r.viewFrom&&i>=r.viewTo)Hn(t);else if(e<=r.viewFrom){var a=Kn(t,i,i+n,1);a?(r.view=r.view.slice(a.index),r.viewFrom=a.lineN,r.viewTo+=n):Hn(t)}else if(i>=r.viewTo){var o=Kn(t,e,e,-1);o?(r.view=r.view.slice(0,o.index),r.viewTo=o.lineN):Hn(t)}else{var s=Kn(t,e,e,-1),l=Kn(t,i,i+n,1);s&&l?(r.view=r.view.slice(0,s.index).concat(Ai(t,s.lineN,l.lineN)).concat(r.view.slice(l.index)),r.viewTo+=n):Hn(t)}var c=r.externalMeasured;c&&(i=r.lineN&&e=n.viewTo)){var a=n.view[Wn(t,e)];if(null!=a.node){var o=a.changes||(a.changes=[]);-1==Y(o,i)&&o.push(i)}}}function Hn(t){t.display.viewFrom=t.display.viewTo=t.doc.first,t.display.view=[],t.display.viewOffset=0}function Kn(t,e,i,n){var r,a=Wn(t,e),o=t.display.view;if(!Re||i==t.doc.first+t.doc.size)return{index:a,lineN:i};for(var s=t.display.viewFrom,l=0;l0){if(a==o.length-1)return null;r=s+o[a].size-e,a++}else r=s-e;e+=r,i+=r}while(ai(t.doc,i)!=i){if(a==(n<0?0:o.length-1))return null;i+=n*o[a-(n<0?1:0)].size,a+=n}return{index:a,lineN:i}}function Yn(t,e,i){var n=t.display,r=n.view;0==r.length||e>=n.viewTo||i<=n.viewFrom?(n.view=Ai(t,e,i),n.viewFrom=e):(n.viewFrom>e?n.view=Ai(t,e,n.viewFrom).concat(n.view):n.viewFromi&&(n.view=n.view.slice(0,Wn(t,i)))),n.viewTo=i}function Xn(t){for(var e=t.display.view,i=0,n=0;n=t.display.viewTo||l.to().line0?o:t.defaultCharWidth())+"px"}if(n.other){var s=i.appendChild(E("div"," ","CodeMirror-cursor CodeMirror-secondarycursor"));s.style.display="",s.style.left=n.other.left+"px",s.style.top=n.other.top+"px",s.style.height=.85*(n.other.bottom-n.other.top)+"px"}}function qn(t,e){return t.top-e.top||t.left-e.left}function Zn(t,e,i){var n=t.display,r=t.doc,a=document.createDocumentFragment(),o=qi(t.display),s=o.left,l=Math.max(n.sizerWidth,Ji(t)-n.sizer.offsetLeft)-o.right,c="ltr"==r.direction;function u(t,e,i,n){e<0&&(e=0),e=Math.round(e),n=Math.round(n),a.appendChild(E("div",null,"CodeMirror-selected","position: absolute; left: "+t+"px;\n top: "+e+"px; width: "+(null==i?l-t:i)+"px;\n height: "+(n-e)+"px"))}function d(e,i,n){var a,o,d=ee(r,e),h=d.text.length;function p(i,n){return wn(t,ce(e,i),"div",d,n)}function f(e,i,n){var r=Mn(t,d,null,e),a="ltr"==i==("after"==n)?"left":"right",o="after"==n?r.begin:r.end-(/\s/.test(d.text.charAt(r.end-1))?2:1);return p(o,a)[a]}var v=mt(d,r.direction);return pt(v,i||0,null==n?h:n,function(t,e,r,d){var g="ltr"==r,m=p(t,g?"left":"right"),y=p(e-1,g?"right":"left"),b=null==i&&0==t,x=null==n&&e==h,_=0==d,w=!v||d==v.length-1;if(y.top-m.top<=3){var C=(c?b:x)&&_,S=(c?x:b)&&w,k=C?s:(g?m:y).left,A=S?l:(g?y:m).right;u(k,m.top,A-k,m.bottom)}else{var T,M,I,E;g?(T=c&&b&&_?s:m.left,M=c?l:f(t,r,"before"),I=c?s:f(e,r,"after"),E=c&&x&&w?l:y.right):(T=c?f(t,r,"before"):s,M=!c&&b&&_?l:m.right,I=!c&&x&&w?s:y.left,E=c?f(e,r,"after"):l),u(T,m.top,M-T,m.bottom),m.bottom0?e.blinker=setInterval(function(){t.hasFocus()||ir(t),e.cursorDiv.style.visibility=(i=!i)?"":"hidden"},t.options.cursorBlinkRate):t.options.cursorBlinkRate<0&&(e.cursorDiv.style.visibility="hidden")}}function Qn(t){t.hasFocus()||(t.display.input.focus(),t.state.focused||er(t))}function tr(t){t.state.delayingBlurEvent=!0,setTimeout(function(){t.state.delayingBlurEvent&&(t.state.delayingBlurEvent=!1,t.state.focused&&ir(t))},100)}function er(t,e){t.state.delayingBlurEvent&&!t.state.draggingText&&(t.state.delayingBlurEvent=!1),"nocursor"!=t.options.readOnly&&(t.state.focused||(wt(t,"focus",t,e),t.state.focused=!0,R(t.display.wrapper,"CodeMirror-focused"),t.curOp||t.display.selForContextMenu==t.doc.sel||(t.display.input.reset(),l&&setTimeout(function(){return t.display.input.reset(!0)},20)),t.display.input.receivedFocus()),Jn(t))}function ir(t,e){t.state.delayingBlurEvent||(t.state.focused&&(wt(t,"blur",t,e),t.state.focused=!1,T(t.display.wrapper,"CodeMirror-focused")),clearInterval(t.display.blinker),setTimeout(function(){t.state.focused||(t.display.shift=!1)},150))}function nr(t){for(var e=t.display,i=e.lineDiv.offsetTop,n=Math.max(0,e.scroller.getBoundingClientRect().top),r=e.lineDiv.getBoundingClientRect().top,a=0,l=0;l.005||v<-.005)&&(rt.display.sizerWidth){var m=Math.ceil(h/Rn(t.display));m>t.display.maxLineLength&&(t.display.maxLineLength=m,t.display.maxLine=c.line,t.display.maxLineChanged=!0)}}}Math.abs(a)>2&&(e.scroller.scrollTop+=a)}function rr(t){if(t.widgets)for(var e=0;e=o&&(a=oe(e,ci(ee(e,l))-t.wrapper.clientHeight),o=l)}return{from:a,to:Math.max(o,a+1)}}function or(t,e){if(!Ct(t,"scrollCursorIntoView")){var i=t.display,n=i.sizer.getBoundingClientRect(),r=null,a=i.wrapper.ownerDocument;if(e.top+n.top<0?r=!0:e.bottom+n.top>(a.defaultView.innerHeight||a.documentElement.clientHeight)&&(r=!1),null!=r&&!v){var o=E("div","​",null,"position: absolute;\n top: "+(e.top-i.viewOffset-Gi(t.display))+"px;\n height: "+(e.bottom-e.top+Zi(t)+i.barHeight)+"px;\n left: "+e.left+"px; width: "+Math.max(2,e.right-e.left)+"px;");t.display.lineSpace.appendChild(o),o.scrollIntoView(r),t.display.lineSpace.removeChild(o)}}}function sr(t,e,i,n){var r;null==n&&(n=0),t.options.lineWrapping||e!=i||(i="before"==e.sticky?ce(e.line,e.ch+1,"before"):e,e=e.ch?ce(e.line,"before"==e.sticky?e.ch-1:e.ch,"after"):e);for(var a=0;a<5;a++){var o=!1,s=Cn(t,e),l=i&&i!=e?Cn(t,i):s;r={left:Math.min(s.left,l.left),top:Math.min(s.top,l.top)-n,right:Math.max(s.left,l.left),bottom:Math.max(s.bottom,l.bottom)+n};var c=cr(t,r),u=t.doc.scrollTop,d=t.doc.scrollLeft;if(null!=c.scrollTop&&(gr(t,c.scrollTop),Math.abs(t.doc.scrollTop-u)>1&&(o=!0)),null!=c.scrollLeft&&(yr(t,c.scrollLeft),Math.abs(t.doc.scrollLeft-d)>1&&(o=!0)),!o)break}return r}function lr(t,e){var i=cr(t,e);null!=i.scrollTop&&gr(t,i.scrollTop),null!=i.scrollLeft&&yr(t,i.scrollLeft)}function cr(t,e){var i=t.display,n=Ln(t.display);e.top<0&&(e.top=0);var r=t.curOp&&null!=t.curOp.scrollTop?t.curOp.scrollTop:i.scroller.scrollTop,a=Qi(t),o={};e.bottom-e.top>a&&(e.bottom=e.top+a);var s=t.doc.height+ji(i),l=e.tops-n;if(e.topr+a){var u=Math.min(e.top,(c?s:e.bottom)-a);u!=r&&(o.scrollTop=u)}var d=t.options.fixedGutter?0:i.gutters.offsetWidth,h=t.curOp&&null!=t.curOp.scrollLeft?t.curOp.scrollLeft:i.scroller.scrollLeft-d,p=Ji(t)-i.gutters.offsetWidth,f=e.right-e.left>p;return f&&(e.right=e.left+p),e.left<10?o.scrollLeft=0:e.leftp+h-3&&(o.scrollLeft=e.right+(f?0:10)-p),o}function ur(t,e){null!=e&&(fr(t),t.curOp.scrollTop=(null==t.curOp.scrollTop?t.doc.scrollTop:t.curOp.scrollTop)+e)}function dr(t){fr(t);var e=t.getCursor();t.curOp.scrollToPos={from:e,to:e,margin:t.options.cursorScrollMargin}}function hr(t,e,i){null==e&&null==i||fr(t),null!=e&&(t.curOp.scrollLeft=e),null!=i&&(t.curOp.scrollTop=i)}function pr(t,e){fr(t),t.curOp.scrollToPos=e}function fr(t){var e=t.curOp.scrollToPos;if(e){t.curOp.scrollToPos=null;var i=Sn(t,e.from),n=Sn(t,e.to);vr(t,i,n,e.margin)}}function vr(t,e,i,n){var r=cr(t,{left:Math.min(e.left,i.left),top:Math.min(e.top,i.top)-n,right:Math.max(e.right,i.right),bottom:Math.max(e.bottom,i.bottom)+n});hr(t,r.scrollLeft,r.scrollTop)}function gr(t,e){Math.abs(t.doc.scrollTop-e)<2||(i||Ur(t,{top:e}),mr(t,e,!0),i&&Ur(t),zr(t,100))}function mr(t,e,i){e=Math.max(0,Math.min(t.display.scroller.scrollHeight-t.display.scroller.clientHeight,e)),(t.display.scroller.scrollTop!=e||i)&&(t.doc.scrollTop=e,t.display.scrollbars.setScrollTop(e),t.display.scroller.scrollTop!=e&&(t.display.scroller.scrollTop=e))}function yr(t,e,i,n){e=Math.max(0,Math.min(e,t.display.scroller.scrollWidth-t.display.scroller.clientWidth)),(i?e==t.doc.scrollLeft:Math.abs(t.doc.scrollLeft-e)<2)&&!n||(t.doc.scrollLeft=e,Zr(t),t.display.scroller.scrollLeft!=e&&(t.display.scroller.scrollLeft=e),t.display.scrollbars.setScrollLeft(e))}function br(t){var e=t.display,i=e.gutters.offsetWidth,n=Math.round(t.doc.height+ji(t.display));return{clientHeight:e.scroller.clientHeight,viewHeight:e.wrapper.clientHeight,scrollWidth:e.scroller.scrollWidth,clientWidth:e.scroller.clientWidth,viewWidth:e.wrapper.clientWidth,barLeft:t.options.fixedGutter?i:0,docHeight:n,scrollHeight:n+Zi(t)+e.barHeight,nativeBarWidth:e.nativeBarWidth,gutterWidth:i}}var xr=function(t,e,i){this.cm=i;var n=this.vert=E("div",[E("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),r=this.horiz=E("div",[E("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");n.tabIndex=r.tabIndex=-1,t(n),t(r),bt(n,"scroll",function(){n.clientHeight&&e(n.scrollTop,"vertical")}),bt(r,"scroll",function(){r.clientWidth&&e(r.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,o&&s<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};xr.prototype.update=function(t){var e=t.scrollWidth>t.clientWidth+1,i=t.scrollHeight>t.clientHeight+1,n=t.nativeBarWidth;if(i){this.vert.style.display="block",this.vert.style.bottom=e?n+"px":"0";var r=t.viewHeight-(e?n:0);this.vert.firstChild.style.height=Math.max(0,t.scrollHeight-t.clientHeight+r)+"px"}else this.vert.scrollTop=0,this.vert.style.display="",this.vert.firstChild.style.height="0";if(e){this.horiz.style.display="block",this.horiz.style.right=i?n+"px":"0",this.horiz.style.left=t.barLeft+"px";var a=t.viewWidth-t.barLeft-(i?n:0);this.horiz.firstChild.style.width=Math.max(0,t.scrollWidth-t.clientWidth+a)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&t.clientHeight>0&&(0==n&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:i?n:0,bottom:e?n:0}},xr.prototype.setScrollLeft=function(t){this.horiz.scrollLeft!=t&&(this.horiz.scrollLeft=t),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},xr.prototype.setScrollTop=function(t){this.vert.scrollTop!=t&&(this.vert.scrollTop=t),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},xr.prototype.zeroWidthHack=function(){var t=b&&!f?"12px":"18px";this.horiz.style.height=this.vert.style.width=t,this.horiz.style.visibility=this.vert.style.visibility="hidden",this.disableHoriz=new K,this.disableVert=new K},xr.prototype.enableZeroWidthBar=function(t,e,i){function n(){var r=t.getBoundingClientRect(),a="vert"==i?document.elementFromPoint(r.right-1,(r.top+r.bottom)/2):document.elementFromPoint((r.right+r.left)/2,r.bottom-1);a!=t?t.style.visibility="hidden":e.set(1e3,n)}t.style.visibility="",e.set(1e3,n)},xr.prototype.clear=function(){var t=this.horiz.parentNode;t.removeChild(this.horiz),t.removeChild(this.vert)};var _r=function(){};function wr(t,e){e||(e=br(t));var i=t.display.barWidth,n=t.display.barHeight;Cr(t,e);for(var r=0;r<4&&i!=t.display.barWidth||n!=t.display.barHeight;r++)i!=t.display.barWidth&&t.options.lineWrapping&&nr(t),Cr(t,br(t)),i=t.display.barWidth,n=t.display.barHeight}function Cr(t,e){var i=t.display,n=i.scrollbars.update(e);i.sizer.style.paddingRight=(i.barWidth=n.right)+"px",i.sizer.style.paddingBottom=(i.barHeight=n.bottom)+"px",i.heightForcer.style.borderBottom=n.bottom+"px solid transparent",n.right&&n.bottom?(i.scrollbarFiller.style.display="block",i.scrollbarFiller.style.height=n.bottom+"px",i.scrollbarFiller.style.width=n.right+"px"):i.scrollbarFiller.style.display="",n.bottom&&t.options.coverGutterNextToScrollbar&&t.options.fixedGutter?(i.gutterFiller.style.display="block",i.gutterFiller.style.height=n.bottom+"px",i.gutterFiller.style.width=e.gutterWidth+"px"):i.gutterFiller.style.display=""}_r.prototype.update=function(){return{bottom:0,right:0}},_r.prototype.setScrollLeft=function(){},_r.prototype.setScrollTop=function(){},_r.prototype.clear=function(){};var Sr={native:xr,null:_r};function kr(t){t.display.scrollbars&&(t.display.scrollbars.clear(),t.display.scrollbars.addClass&&T(t.display.wrapper,t.display.scrollbars.addClass)),t.display.scrollbars=new Sr[t.options.scrollbarStyle](function(e){t.display.wrapper.insertBefore(e,t.display.scrollbarFiller),bt(e,"mousedown",function(){t.state.focused&&setTimeout(function(){return t.display.input.focus()},0)}),e.setAttribute("cm-not-content","true")},function(e,i){"horizontal"==i?yr(t,e):gr(t,e)},t),t.display.scrollbars.addClass&&R(t.display.wrapper,t.display.scrollbars.addClass)}var Ar=0;function Tr(t){t.curOp={cm:t,viewChanged:!1,startHeight:t.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Ar,markArrays:null},Mi(t.curOp)}function Mr(t){var e=t.curOp;e&&Ei(e,function(t){for(var e=0;e=i.viewTo)||i.maxLineChanged&&e.options.lineWrapping,t.update=t.mustUpdate&&new Vr(e,t.mustUpdate&&{top:t.scrollTop,ensure:t.scrollToPos},t.forceUpdate)}function Dr(t){t.updatedDisplay=t.mustUpdate&&Yr(t.cm,t.update)}function Pr(t){var e=t.cm,i=e.display;t.updatedDisplay&&nr(e),t.barMeasure=br(e),i.maxLineChanged&&!e.options.lineWrapping&&(t.adjustWidthTo=rn(e,i.maxLine,i.maxLine.text.length).left+3,e.display.sizerWidth=t.adjustWidthTo,t.barMeasure.scrollWidth=Math.max(i.scroller.clientWidth,i.sizer.offsetLeft+t.adjustWidthTo+Zi(e)+e.display.barWidth),t.maxScrollLeft=Math.max(0,i.sizer.offsetLeft+t.adjustWidthTo-Ji(e))),(t.updatedDisplay||t.selectionChanged)&&(t.preparedSelection=i.input.prepareSelection())}function Lr(t){var e=t.cm;null!=t.adjustWidthTo&&(e.display.sizer.style.minWidth=t.adjustWidthTo+"px",t.maxScrollLeft=t.display.viewTo)){var i=+new Date+t.options.workTime,n=Ce(t,e.highlightFrontier),r=[];e.iter(n.line,Math.min(e.first+e.size,t.display.viewTo+500),function(a){if(n.line>=t.display.viewFrom){var o=a.styles,s=a.text.length>t.options.maxHighlightLength?Zt(e.mode,n.state):null,l=_e(t,a,n,!0);s&&(n.state=s),a.styles=l.styles;var c=a.styleClasses,u=l.classes;u?a.styleClasses=u:c&&(a.styleClasses=null);for(var d=!o||o.length!=a.styles.length||c!=u&&(!c||!u||c.bgClass!=u.bgClass||c.textClass!=u.textClass),h=0;!d&&hi)return zr(t,t.options.workDelay),!0}),e.highlightFrontier=n.line,e.modeFrontier=Math.max(e.modeFrontier,n.line),r.length&&Fr(t,function(){for(var e=0;e=i.viewFrom&&e.visible.to<=i.viewTo&&(null==i.updateLineNumbers||i.updateLineNumbers>=i.viewTo)&&i.renderedView==i.view&&0==Xn(t))return!1;Jr(t)&&(Hn(t),e.dims=Fn(t));var r=n.first+n.size,a=Math.max(e.visible.from-t.options.viewportMargin,n.first),o=Math.min(r,e.visible.to+t.options.viewportMargin);i.viewFromo&&i.viewTo-o<20&&(o=Math.min(r,i.viewTo)),Re&&(a=ai(t.doc,a),o=oi(t.doc,o));var s=a!=i.viewFrom||o!=i.viewTo||i.lastWrapHeight!=e.wrapperHeight||i.lastWrapWidth!=e.wrapperWidth;Yn(t,a,o),i.viewOffset=ci(ee(t.doc,i.viewFrom)),t.display.mover.style.top=i.viewOffset+"px";var l=Xn(t);if(!s&&0==l&&!e.force&&i.renderedView==i.view&&(null==i.updateLineNumbers||i.updateLineNumbers>=i.viewTo))return!1;var c=Hr(t);return l>4&&(i.lineDiv.style.display="none"),Gr(t,i.updateLineNumbers,e.dims),l>4&&(i.lineDiv.style.display=""),i.renderedView=i.view,Kr(c),M(i.cursorDiv),M(i.selectionDiv),i.gutters.style.height=i.sizer.style.minHeight=0,s&&(i.lastWrapHeight=e.wrapperHeight,i.lastWrapWidth=e.wrapperWidth,zr(t,400)),i.updateLineNumbers=null,!0}function Xr(t,e){for(var i=e.viewport,n=!0;;n=!1){if(n&&t.options.lineWrapping&&e.oldDisplayWidth!=Ji(t))n&&(e.visible=ar(t.display,t.doc,i));else if(i&&null!=i.top&&(i={top:Math.min(t.doc.height+ji(t.display)-Qi(t),i.top)}),e.visible=ar(t.display,t.doc,i),e.visible.from>=t.display.viewFrom&&e.visible.to<=t.display.viewTo)break;if(!Yr(t,e))break;nr(t);var r=br(t);Un(t),wr(t,r),qr(t,r),e.force=!1}e.signal(t,"update",t),t.display.viewFrom==t.display.reportedViewFrom&&t.display.viewTo==t.display.reportedViewTo||(e.signal(t,"viewportChange",t,t.display.viewFrom,t.display.viewTo),t.display.reportedViewFrom=t.display.viewFrom,t.display.reportedViewTo=t.display.viewTo)}function Ur(t,e){var i=new Vr(t,e);if(Yr(t,i)){nr(t),Xr(t,i);var n=br(t);Un(t),wr(t,n),qr(t,n),i.finish()}}function Gr(t,e,i){var n=t.display,r=t.options.lineNumbers,a=n.lineDiv,o=a.firstChild;function s(e){var i=e.nextSibling;return l&&b&&t.display.currentWheelTarget==e?e.style.display="none":e.parentNode.removeChild(e),i}for(var c=n.view,u=n.viewFrom,d=0;d-1&&(p=!1),Ri(t,h,u,i)),p&&(M(h.lineNumber),h.lineNumber.appendChild(document.createTextNode(le(t.options,u)))),o=h.node.nextSibling}else{var f=$i(t,h,u,i);a.insertBefore(f,o)}u+=h.size}while(o)o=s(o)}function jr(t){var e=t.gutters.offsetWidth;t.sizer.style.marginLeft=e+"px",Pi(t,"gutterChanged",t)}function qr(t,e){t.display.sizer.style.minHeight=e.docHeight+"px",t.display.heightForcer.style.top=e.docHeight+"px",t.display.gutters.style.height=e.docHeight+t.display.barHeight+Zi(t)+"px"}function Zr(t){var e=t.display,i=e.view;if(e.alignWidgets||e.gutters.firstChild&&t.options.fixedGutter){for(var n=Bn(e)-e.scroller.scrollLeft+t.doc.scrollLeft,r=e.gutters.offsetWidth,a=n+"px",o=0;oc.clientWidth,f=c.scrollHeight>c.clientHeight;if(r&&p||a&&f){if(a&&b&&l)t:for(var v=e.target,g=s.view;v!=c;v=v.parentNode)for(var m=0;m=0&&ue(t,n.to())<=0)return i}return-1};var ca=function(t,e){this.anchor=t,this.head=e};function ua(t,e,i){var n=t&&t.options.selectionsMayTouch,r=e[i];e.sort(function(t,e){return ue(t.from(),e.from())}),i=Y(e,r);for(var a=1;a0:l>=0){var c=fe(s.from(),o.from()),u=pe(s.to(),o.to()),d=s.empty()?o.from()==o.head:s.from()==s.head;a<=i&&--i,e.splice(--a,2,new ca(d?u:c,d?c:u))}}return new la(e,i)}function da(t,e){return new la([new ca(t,e||t)],0)}function ha(t){return t.text?ce(t.from.line+t.text.length-1,tt(t.text).length+(1==t.text.length?t.from.ch:0)):t.to}function pa(t,e){if(ue(t,e.from)<0)return t;if(ue(t,e.to)<=0)return ha(e);var i=t.line+e.text.length-(e.to.line-e.from.line)-1,n=t.ch;return t.line==e.to.line&&(n+=ha(e).ch-e.to.ch),ce(i,n)}function fa(t,e){for(var i=[],n=0;n1&&t.remove(s.line+1,f-1),t.insert(s.line+1,m)}Pi(t,"change",t,e)}function _a(t,e,i){function n(t,r,a){if(t.linked)for(var o=0;o1&&!t.done[t.done.length-2].ranges?(t.done.pop(),tt(t.done)):void 0}function Ia(t,e,i,n){var r=t.history;r.undone.length=0;var a,o,s=+new Date;if((r.lastOp==n||r.lastOrigin==e.origin&&e.origin&&("+"==e.origin.charAt(0)&&r.lastModTime>s-(t.cm?t.cm.options.historyEventDelay:500)||"*"==e.origin.charAt(0)))&&(a=Ma(r,r.lastOp==n)))o=tt(a.changes),0==ue(e.from,e.to)&&0==ue(e.from,o.to)?o.to=ha(e):a.changes.push(Aa(t,e));else{var l=tt(r.done);l&&l.ranges||Pa(t.sel,r.done),a={changes:[Aa(t,e)],generation:r.generation},r.done.push(a);while(r.done.length>r.undoDepth)r.done.shift(),r.done[0].ranges||r.done.shift()}r.done.push(i),r.generation=++r.maxGeneration,r.lastModTime=r.lastSelTime=s,r.lastOp=r.lastSelOp=n,r.lastOrigin=r.lastSelOrigin=e.origin,o||wt(t,"historyAdded")}function Ea(t,e,i,n){var r=e.charAt(0);return"*"==r||"+"==r&&i.ranges.length==n.ranges.length&&i.somethingSelected()==n.somethingSelected()&&new Date-t.history.lastSelTime<=(t.cm?t.cm.options.historyEventDelay:500)}function Da(t,e,i,n){var r=t.history,a=n&&n.origin;i==r.lastSelOp||a&&r.lastSelOrigin==a&&(r.lastModTime==r.lastSelTime&&r.lastOrigin==a||Ea(t,a,tt(r.done),e))?r.done[r.done.length-1]=e:Pa(e,r.done),r.lastSelTime=+new Date,r.lastSelOrigin=a,r.lastSelOp=i,n&&!1!==n.clearRedo&&Ta(r.undone)}function Pa(t,e){var i=tt(e);i&&i.ranges&&i.equals(t)||e.push(t)}function La(t,e,i,n){var r=e["spans_"+t.id],a=0;t.iter(Math.max(t.first,i),Math.min(t.first+t.size,n),function(i){i.markedSpans&&((r||(r=e["spans_"+t.id]={}))[a]=i.markedSpans),++a})}function Ra(t){if(!t)return null;for(var e,i=0;i-1&&(tt(s)[d]=c[d],delete c[d])}}}return n}function Oa(t,e,i,n){if(n){var r=t.anchor;if(i){var a=ue(e,r)<0;a!=ue(i,r)<0?(r=e,e=i):a!=ue(e,i)<0&&(e=i)}return new ca(r,e)}return new ca(i||e,e)}function za(t,e,i,n,r){null==r&&(r=t.cm&&(t.cm.display.shift||t.extend)),Ya(t,new la([Oa(t.sel.primary(),e,i,r)],0),n)}function Wa(t,e,i){for(var n=[],r=t.cm&&(t.cm.display.shift||t.extend),a=0;a=e.ch:s.to>e.ch))){if(r&&(wt(l,"beforeCursorEnter"),l.explicitlyCleared)){if(a.markedSpans){--o;continue}break}if(!l.atomic)continue;if(i){var d=l.find(n<0?1:-1),h=void 0;if((n<0?u:c)&&(d=Ja(t,d,-n,d&&d.line==e.line?a:null)),d&&d.line==e.line&&(h=ue(d,i))&&(n<0?h<0:h>0))return qa(t,d,e,n,r)}var p=l.find(n<0?-1:1);return(n<0?c:u)&&(p=Ja(t,p,n,p.line==e.line?a:null)),p?qa(t,p,e,n,r):null}}return e}function Za(t,e,i,n,r){var a=n||1,o=qa(t,e,i,a,r)||!r&&qa(t,e,i,a,!0)||qa(t,e,i,-a,r)||!r&&qa(t,e,i,-a,!0);return o||(t.cantEdit=!0,ce(t.first,0))}function Ja(t,e,i,n){return i<0&&0==e.ch?e.line>t.first?ge(t,ce(e.line-1)):null:i>0&&e.ch==(n||ee(t,e.line)).text.length?e.line=0;--r)io(t,{from:n[r].from,to:n[r].to,text:r?[""]:e.text,origin:e.origin});else io(t,e)}}function io(t,e){if(1!=e.text.length||""!=e.text[0]||0!=ue(e.from,e.to)){var i=fa(t,e);Ia(t,e,i,t.cm?t.cm.curOp.id:NaN),ao(t,e,i,He(t,e));var n=[];_a(t,function(t,i){i||-1!=Y(n,t.history)||(uo(t.history,e),n.push(t.history)),ao(t,e,null,He(t,e))})}}function no(t,e,i){var n=t.cm&&t.cm.state.suppressEdits;if(!n||i){for(var r,a=t.history,o=t.sel,s="undo"==e?a.done:a.undone,l="undo"==e?a.undone:a.done,c=0;c=0;--p){var f=h(p);if(f)return f.v}}}}function ro(t,e){if(0!=e&&(t.first+=e,t.sel=new la(et(t.sel.ranges,function(t){return new ca(ce(t.anchor.line+e,t.anchor.ch),ce(t.head.line+e,t.head.ch))}),t.sel.primIndex),t.cm)){Vn(t.cm,t.first,t.first-e,e);for(var i=t.cm.display,n=i.viewFrom;nt.lastLine())){if(e.from.linea&&(e={from:e.from,to:ce(a,ee(t,a).text.length),text:[e.text[0]],origin:e.origin}),e.removed=ie(t,e.from,e.to),i||(i=fa(t,e)),t.cm?oo(t.cm,e,n):xa(t,e,n),Xa(t,i,G),t.cantEdit&&Za(t,ce(t.firstLine(),0))&&(t.cantEdit=!1)}}function oo(t,e,i){var n=t.doc,r=t.display,a=e.from,o=e.to,s=!1,l=a.line;t.options.lineWrapping||(l=ae(ii(ee(n,a.line))),n.iter(l,o.line+1,function(t){if(t==r.maxLine)return s=!0,!0})),n.sel.contains(e.from,e.to)>-1&&St(t),xa(n,e,i,Nn(t)),t.options.lineWrapping||(n.iter(l,a.line+e.text.length,function(t){var e=ui(t);e>r.maxLineLength&&(r.maxLine=t,r.maxLineLength=e,r.maxLineChanged=!0,s=!1)}),s&&(t.curOp.updateMaxLine=!0)),Pe(n,a.line),zr(t,400);var c=e.text.length-(o.line-a.line)-1;e.full?Vn(t):a.line!=o.line||1!=e.text.length||ba(t.doc,e)?Vn(t,a.line,o.line+1,c):$n(t,a.line,"text");var u=kt(t,"changes"),d=kt(t,"change");if(d||u){var h={from:a,to:o,text:e.text,removed:e.removed,origin:e.origin};d&&Pi(t,"change",t,h),u&&(t.curOp.changeObjs||(t.curOp.changeObjs=[])).push(h)}t.display.selForContextMenu=null}function so(t,e,i,n,r){var a;n||(n=i),ue(n,i)<0&&(a=[n,i],i=a[0],n=a[1]),"string"==typeof e&&(e=t.splitLines(e)),eo(t,{from:i,to:n,text:e,origin:r})}function lo(t,e,i,n){i1||!(this.children[0]instanceof po))){var s=[];this.collapse(s),this.children=[new po(s)],this.children[0].parent=this}},collapse:function(t){for(var e=0;e50){for(var o=r.lines.length%25+25,s=o;s10);t.parent.maybeSpill()}},iterN:function(t,e,i){for(var n=0;n0||0==o&&!1!==a.clearWhenEmpty)return a;if(a.replacedWith&&(a.collapsed=!0,a.widgetNode=D("span",[a.replacedWith],"CodeMirror-widget"),n.handleMouseEvents||a.widgetNode.setAttribute("cm-ignore-events","true"),n.insertLeft&&(a.widgetNode.insertLeft=!0)),a.collapsed){if(ei(t,e.line,e,i,a)||e.line!=i.line&&ei(t,i.line,e,i,a))throw new Error("Inserting collapsed marker partially overlapping an existing one");Be()}a.addToHistory&&Ia(t,{from:e,to:i,origin:"markText"},t.sel,NaN);var s,l=e.line,c=t.cm;if(t.iter(l,i.line+1,function(n){c&&a.collapsed&&!c.options.lineWrapping&&ii(n)==c.display.maxLine&&(s=!0),a.collapsed&&l!=e.line&&re(n,0),We(n,new Ne(a,l==e.line?e.ch:null,l==i.line?i.ch:null),t.cm&&t.cm.curOp),++l}),a.collapsed&&t.iter(e.line,i.line+1,function(e){si(t,e)&&re(e,0)}),a.clearOnEnter&&bt(a,"beforeCursorEnter",function(){return a.clear()}),a.readOnly&&(Fe(),(t.history.done.length||t.history.undone.length)&&t.clearHistory()),a.collapsed&&(a.id=++yo,a.atomic=!0),c){if(s&&(c.curOp.updateMaxLine=!0),a.collapsed)Vn(c,e.line,i.line+1);else if(a.className||a.startStyle||a.endStyle||a.css||a.attributes||a.title)for(var u=e.line;u<=i.line;u++)$n(c,u,"text");a.atomic&&Ga(c.doc),Pi(c,"markerAdded",c,a)}return a}bo.prototype.clear=function(){if(!this.explicitlyCleared){var t=this.doc.cm,e=t&&!t.curOp;if(e&&Tr(t),kt(this,"clear")){var i=this.find();i&&Pi(this,"clear",i.from,i.to)}for(var n=null,r=null,a=0;at.display.maxLineLength&&(t.display.maxLine=c,t.display.maxLineLength=u,t.display.maxLineChanged=!0)}null!=n&&t&&this.collapsed&&Vn(t,n,r+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,t&&Ga(t.doc)),t&&Pi(t,"markerCleared",t,this,n,r),e&&Mr(t),this.parent&&this.parent.clear()}},bo.prototype.find=function(t,e){var i,n;null==t&&"bookmark"==this.type&&(t=1);for(var r=0;r=0;l--)eo(this,n[l]);s?Ka(this,s):this.cm&&dr(this.cm)}),undo:Or(function(){no(this,"undo")}),redo:Or(function(){no(this,"redo")}),undoSelection:Or(function(){no(this,"undo",!0)}),redoSelection:Or(function(){no(this,"redo",!0)}),setExtending:function(t){this.extend=t},getExtending:function(){return this.extend},historySize:function(){for(var t=this.history,e=0,i=0,n=0;n=t.ch)&&e.push(r.marker.parent||r.marker)}return e},findMarks:function(t,e,i){t=ge(this,t),e=ge(this,e);var n=[],r=t.line;return this.iter(t.line,e.line+1,function(a){var o=a.markedSpans;if(o)for(var s=0;s=l.to||null==l.from&&r!=t.line||null!=l.from&&r==e.line&&l.from>=e.ch||i&&!i(l.marker)||n.push(l.marker.parent||l.marker)}++r}),n},getAllMarks:function(){var t=[];return this.iter(function(e){var i=e.markedSpans;if(i)for(var n=0;nt)return e=t,!0;t-=a,++i}),ge(this,ce(i,e))},indexFromPos:function(t){t=ge(this,t);var e=t.ch;if(t.linee&&(e=t.from),null!=t.to&&t.to-1)return e.state.draggingText(t),void setTimeout(function(){return e.display.input.focus()},20);try{var d=t.dataTransfer.getData("Text");if(d){var h;if(e.state.draggingText&&!e.state.draggingText.copy&&(h=e.listSelections()),Xa(e.doc,da(i,i)),h)for(var p=0;p=0;e--)so(t.doc,"",n[e].from,n[e].to,"+delete");dr(t)})}function Zo(t,e,i){var n=dt(t.text,e+i,i);return n<0||n>t.text.length?null:n}function Jo(t,e,i){var n=Zo(t,e.ch,i);return null==n?null:new ce(e.line,n,i<0?"after":"before")}function Qo(t,e,i,n,r){if(t){"rtl"==e.doc.direction&&(r=-r);var a=mt(i,e.doc.direction);if(a){var o,s=r<0?tt(a):a[0],l=r<0==(1==s.level),c=l?"after":"before";if(s.level>0||"rtl"==e.doc.direction){var u=on(e,i);o=r<0?i.text.length-1:0;var d=sn(e,u,o).top;o=ht(function(t){return sn(e,u,t).top==d},r<0==(1==s.level)?s.from:s.to-1,o),"before"==c&&(o=Zo(i,o,1))}else o=r<0?s.to:s.from;return new ce(n,o,c)}}return new ce(n,r<0?i.text.length:0,r<0?"before":"after")}function ts(t,e,i,n){var r=mt(e,t.doc.direction);if(!r)return Jo(e,i,n);i.ch>=e.text.length?(i.ch=e.text.length,i.sticky="before"):i.ch<=0&&(i.ch=0,i.sticky="after");var a=vt(r,i.ch,i.sticky),o=r[a];if("ltr"==t.doc.direction&&o.level%2==0&&(n>0?o.to>i.ch:o.from=o.from&&h>=u.begin)){var p=d?"before":"after";return new ce(i.line,h,p)}}var f=function(t,e,n){for(var a=function(t,e){return e?new ce(i.line,l(t,1),"before"):new ce(i.line,t,"after")};t>=0&&t0==(1!=o.level),c=s?n.begin:l(n.end,-1);if(o.from<=c&&c0?u.end:l(u.begin,-1);return null==g||n>0&&g==e.text.length||(v=f(n>0?0:r.length-1,n,c(g)),!v)?null:v}$o.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},$o.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},$o.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},$o.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},$o["default"]=b?$o.macDefault:$o.pcDefault;var es={selectAll:Qa,singleSelection:function(t){return t.setSelection(t.getCursor("anchor"),t.getCursor("head"),G)},killLine:function(t){return qo(t,function(e){if(e.empty()){var i=ee(t.doc,e.head.line).text.length;return e.head.ch==i&&e.head.line0)r=new ce(r.line,r.ch+1),t.replaceRange(a.charAt(r.ch-1)+a.charAt(r.ch-2),ce(r.line,r.ch-2),r,"+transpose");else if(r.line>t.doc.first){var o=ee(t.doc,r.line-1).text;o&&(r=new ce(r.line,1),t.replaceRange(a.charAt(0)+t.doc.lineSeparator()+o.charAt(o.length-1),ce(r.line-1,o.length-1),r,"+transpose"))}i.push(new ca(r,r))}t.setSelections(i)})},newlineAndIndent:function(t){return Fr(t,function(){for(var e=t.listSelections(),i=e.length-1;i>=0;i--)t.replaceRange(t.doc.lineSeparator(),e[i].anchor,e[i].head,"+input");e=t.listSelections();for(var n=0;n-1&&(ue((r=s.ranges[r]).from(),e)<0||e.xRel>0)&&(ue(r.to(),e)>0||e.xRel<0)?As(t,n,e,a):Ms(t,n,e,a)}function As(t,e,i,n){var r=t.display,a=!1,c=Br(t,function(e){l&&(r.scroller.draggable=!1),t.state.draggingText=!1,t.state.delayingBlurEvent&&(t.hasFocus()?t.state.delayingBlurEvent=!1:tr(t)),_t(r.wrapper.ownerDocument,"mouseup",c),_t(r.wrapper.ownerDocument,"mousemove",u),_t(r.scroller,"dragstart",d),_t(r.scroller,"drop",c),a||(Tt(e),n.addNew||za(t.doc,i,null,null,n.extend),l&&!p||o&&9==s?setTimeout(function(){r.wrapper.ownerDocument.body.focus({preventScroll:!0}),r.input.focus()},20):r.input.focus())}),u=function(t){a=a||Math.abs(e.clientX-t.clientX)+Math.abs(e.clientY-t.clientY)>=10},d=function(){return a=!0};l&&(r.scroller.draggable=!0),t.state.draggingText=c,c.copy=!n.moveOnDrag,bt(r.wrapper.ownerDocument,"mouseup",c),bt(r.wrapper.ownerDocument,"mousemove",u),bt(r.scroller,"dragstart",d),bt(r.scroller,"drop",c),t.state.delayingBlurEvent=!0,setTimeout(function(){return r.input.focus()},20),r.scroller.dragDrop&&r.scroller.dragDrop()}function Ts(t,e,i){if("char"==i)return new ca(e,e);if("word"==i)return t.findWordAt(e);if("line"==i)return new ca(ce(e.line,0),ge(t.doc,ce(e.line+1,0)));var n=i(t,e);return new ca(n.from,n.to)}function Ms(t,e,i,n){o&&tr(t);var r=t.display,a=t.doc;Tt(e);var s,l,c=a.sel,u=c.ranges;if(n.addNew&&!n.extend?(l=a.sel.contains(i),s=l>-1?u[l]:new ca(i,i)):(s=a.sel.primary(),l=a.sel.primIndex),"rectangle"==n.unit)n.addNew||(s=new ca(i,i)),i=zn(t,e,!0,!0),l=-1;else{var d=Ts(t,i,n.unit);s=n.extend?Oa(s,d.anchor,d.head,n.extend):d}n.addNew?-1==l?(l=u.length,Ya(a,ua(t,u.concat([s]),l),{scroll:!1,origin:"*mouse"})):u.length>1&&u[l].empty()&&"char"==n.unit&&!n.extend?(Ya(a,ua(t,u.slice(0,l).concat(u.slice(l+1)),0),{scroll:!1,origin:"*mouse"}),c=a.sel):Va(a,l,s,j):(l=0,Ya(a,new la([s],0),j),c=a.sel);var h=i;function p(e){if(0!=ue(h,e))if(h=e,"rectangle"==n.unit){for(var r=[],o=t.options.tabSize,u=H(ee(a,i.line).text,i.ch,o),d=H(ee(a,e.line).text,e.ch,o),p=Math.min(u,d),f=Math.max(u,d),v=Math.min(i.line,e.line),g=Math.min(t.lastLine(),Math.max(i.line,e.line));v<=g;v++){var m=ee(a,v).text,y=Z(m,p,o);p==f?r.push(new ca(ce(v,y),ce(v,y))):m.length>y&&r.push(new ca(ce(v,y),ce(v,Z(m,f,o))))}r.length||r.push(new ca(i,i)),Ya(a,ua(t,c.ranges.slice(0,l).concat(r),l),{origin:"*mouse",scroll:!1}),t.scrollIntoView(e)}else{var b,x=s,_=Ts(t,e,n.unit),w=x.anchor;ue(_.anchor,w)>0?(b=_.head,w=fe(x.from(),_.anchor)):(b=_.anchor,w=pe(x.to(),_.head));var C=c.ranges.slice(0);C[l]=Is(t,new ca(ge(a,w),b)),Ya(a,ua(t,C,l),j)}}var f=r.wrapper.getBoundingClientRect(),v=0;function g(e){var i=++v,o=zn(t,e,!0,"rectangle"==n.unit);if(o)if(0!=ue(o,h)){t.curOp.focus=L(O(t)),p(o);var s=ar(r,a);(o.line>=s.to||o.linef.bottom?20:0;l&&setTimeout(Br(t,function(){v==i&&(r.scroller.scrollTop+=l,g(e))}),50)}}function m(e){t.state.selectingText=!1,v=1/0,e&&(Tt(e),r.input.focus()),_t(r.wrapper.ownerDocument,"mousemove",y),_t(r.wrapper.ownerDocument,"mouseup",b),a.history.lastSelOrigin=null}var y=Br(t,function(t){0!==t.buttons&&Pt(t)?g(t):m(t)}),b=Br(t,m);t.state.selectingText=b,bt(r.wrapper.ownerDocument,"mousemove",y),bt(r.wrapper.ownerDocument,"mouseup",b)}function Is(t,e){var i=e.anchor,n=e.head,r=ee(t.doc,i.line);if(0==ue(i,n)&&i.sticky==n.sticky)return e;var a=mt(r);if(!a)return e;var o=vt(a,i.ch,i.sticky),s=a[o];if(s.from!=i.ch&&s.to!=i.ch)return e;var l,c=o+(s.from==i.ch==(1!=s.level)?0:1);if(0==c||c==a.length)return e;if(n.line!=i.line)l=(n.line-i.line)*("ltr"==t.doc.direction?1:-1)>0;else{var u=vt(a,n.ch,n.sticky),d=u-o||(n.ch-i.ch)*(1==s.level?-1:1);l=u==c-1||u==c?d<0:d>0}var h=a[c+(l?-1:0)],p=l==(1==h.level),f=p?h.from:h.to,v=p?"after":"before";return i.ch==f&&i.sticky==v?e:new ca(new ce(i.line,f,v),n)}function Es(t,e,i,n){var r,a;if(e.touches)r=e.touches[0].clientX,a=e.touches[0].clientY;else try{r=e.clientX,a=e.clientY}catch(h){return!1}if(r>=Math.floor(t.display.gutters.getBoundingClientRect().right))return!1;n&&Tt(e);var o=t.display,s=o.lineDiv.getBoundingClientRect();if(a>s.bottom||!kt(t,i))return It(e);a-=s.top-o.viewOffset;for(var l=0;l=r){var u=oe(t.doc,a),d=t.display.gutterSpecs[l];return wt(t,i,t,u,d.className,e),It(e)}}}function Ds(t,e){return Es(t,e,"gutterClick",!0)}function Ps(t,e){Ui(t.display,e)||Ls(t,e)||Ct(t,e,"contextmenu")||S||t.display.input.onContextMenu(e)}function Ls(t,e){return!!kt(t,"gutterContextMenu")&&Es(t,e,"gutterContextMenu",!1)}function Rs(t){t.display.wrapper.className=t.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+t.options.theme.replace(/(^|\s)\s*/g," cm-s-"),gn(t)}xs.prototype.compare=function(t,e,i){return this.time+bs>t&&0==ue(e,this.pos)&&i==this.button};var Fs={toString:function(){return"CodeMirror.Init"}},Bs={},Ns={};function Os(t){var e=t.optionHandlers;function i(i,n,r,a){t.defaults[i]=n,r&&(e[i]=a?function(t,e,i){i!=Fs&&r(t,e,i)}:r)}t.defineOption=i,t.Init=Fs,i("value","",function(t,e){return t.setValue(e)},!0),i("mode",null,function(t,e){t.doc.modeOption=e,ma(t)},!0),i("indentUnit",2,ma,!0),i("indentWithTabs",!1),i("smartIndent",!0),i("tabSize",4,function(t){ya(t),gn(t),Vn(t)},!0),i("lineSeparator",null,function(t,e){if(t.doc.lineSep=e,e){var i=[],n=t.doc.first;t.doc.iter(function(t){for(var r=0;;){var a=t.text.indexOf(e,r);if(-1==a)break;r=a+e.length,i.push(ce(n,a))}n++});for(var r=i.length-1;r>=0;r--)so(t.doc,e,i[r],ce(i[r].line,i[r].ch+e.length))}}),i("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\u202d\u202e\u2066\u2067\u2069\ufeff\ufff9-\ufffc]/g,function(t,e,i){t.state.specialChars=new RegExp(e.source+(e.test("\t")?"":"|\t"),"g"),i!=Fs&&t.refresh()}),i("specialCharPlaceholder",bi,function(t){return t.refresh()},!0),i("electricChars",!0),i("inputStyle",y?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),i("spellcheck",!1,function(t,e){return t.getInputField().spellcheck=e},!0),i("autocorrect",!1,function(t,e){return t.getInputField().autocorrect=e},!0),i("autocapitalize",!1,function(t,e){return t.getInputField().autocapitalize=e},!0),i("rtlMoveVisually",!_),i("wholeLineUpdateBefore",!0),i("theme","default",function(t){Rs(t),ea(t)},!0),i("keyMap","default",function(t,e,i){var n=jo(e),r=i!=Fs&&jo(i);r&&r.detach&&r.detach(t,n),n.attach&&n.attach(t,r||null)}),i("extraKeys",null),i("configureMouse",null),i("lineWrapping",!1,Ws,!0),i("gutters",[],function(t,e){t.display.gutterSpecs=Qr(e,t.options.lineNumbers),ea(t)},!0),i("fixedGutter",!0,function(t,e){t.display.gutters.style.left=e?Bn(t.display)+"px":"0",t.refresh()},!0),i("coverGutterNextToScrollbar",!1,function(t){return wr(t)},!0),i("scrollbarStyle","native",function(t){kr(t),wr(t),t.display.scrollbars.setScrollTop(t.doc.scrollTop),t.display.scrollbars.setScrollLeft(t.doc.scrollLeft)},!0),i("lineNumbers",!1,function(t,e){t.display.gutterSpecs=Qr(t.options.gutters,e),ea(t)},!0),i("firstLineNumber",1,ea,!0),i("lineNumberFormatter",function(t){return t},ea,!0),i("showCursorWhenSelecting",!1,Un,!0),i("resetSelectionOnContextMenu",!0),i("lineWiseCopyCut",!0),i("pasteLinesPerSelection",!0),i("selectionsMayTouch",!1),i("readOnly",!1,function(t,e){"nocursor"==e&&(ir(t),t.display.input.blur()),t.display.input.readOnlyChanged(e)}),i("screenReaderLabel",null,function(t,e){e=""===e?null:e,t.display.input.screenReaderLabelChanged(e)}),i("disableInput",!1,function(t,e){e||t.display.input.reset()},!0),i("dragDrop",!0,zs),i("allowDropFileTypes",null),i("cursorBlinkRate",530),i("cursorScrollMargin",0),i("cursorHeight",1,Un,!0),i("singleCursorHeightPerLine",!0,Un,!0),i("workTime",100),i("workDelay",100),i("flattenSpans",!0,ya,!0),i("addModeClass",!1,ya,!0),i("pollInterval",100),i("undoDepth",200,function(t,e){return t.doc.history.undoDepth=e}),i("historyEventDelay",1250),i("viewportMargin",10,function(t){return t.refresh()},!0),i("maxHighlightLength",1e4,ya,!0),i("moveInputWithCursor",!0,function(t,e){e||t.display.input.resetPosition()}),i("tabindex",null,function(t,e){return t.display.input.getField().tabIndex=e||""}),i("autofocus",null),i("direction","ltr",function(t,e){return t.doc.setDirection(e)},!0),i("phrases",null)}function zs(t,e,i){var n=i&&i!=Fs;if(!e!=!n){var r=t.display.dragFunctions,a=e?bt:_t;a(t.display.scroller,"dragstart",r.start),a(t.display.scroller,"dragenter",r.enter),a(t.display.scroller,"dragover",r.over),a(t.display.scroller,"dragleave",r.leave),a(t.display.scroller,"drop",r.drop)}}function Ws(t){t.options.lineWrapping?(R(t.display.wrapper,"CodeMirror-wrap"),t.display.sizer.style.minWidth="",t.display.sizerWidth=null):(T(t.display.wrapper,"CodeMirror-wrap"),di(t)),On(t),Vn(t),gn(t),setTimeout(function(){return wr(t)},100)}function Vs(t,e){var i=this;if(!(this instanceof Vs))return new Vs(t,e);this.options=e=e?$(e):{},$(Bs,e,!1);var n=e.value;"string"==typeof n?n=new To(n,e.mode,null,e.lineSeparator,e.direction):e.mode&&(n.modeOption=e.mode),this.doc=n;var r=new Vs.inputStyles[e.inputStyle](this),a=this.display=new ia(t,n,r,e);for(var c in a.wrapper.CodeMirror=this,Rs(this),e.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),kr(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new K,keySeq:null,specialChars:null},e.autofocus&&!y&&a.input.focus(),o&&s<11&&setTimeout(function(){return i.display.input.reset(!0)},20),$s(this),Fo(),Tr(this),this.curOp.forceUpdate=!0,wa(this,n),e.autofocus&&!y||this.hasFocus()?setTimeout(function(){i.hasFocus()&&!i.state.focused&&er(i)},20):ir(this),Ns)Ns.hasOwnProperty(c)&&Ns[c](this,e[c],Fs);Jr(this),e.finishInit&&e.finishInit(this);for(var u=0;u400}bt(e.scroller,"touchstart",function(r){if(!Ct(t,r)&&!a(r)&&!Ds(t,r)){e.input.ensurePolled(),clearTimeout(i);var o=+new Date;e.activeTouch={start:o,moved:!1,prev:o-n.end<=300?n:null},1==r.touches.length&&(e.activeTouch.left=r.touches[0].pageX,e.activeTouch.top=r.touches[0].pageY)}}),bt(e.scroller,"touchmove",function(){e.activeTouch&&(e.activeTouch.moved=!0)}),bt(e.scroller,"touchend",function(i){var n=e.activeTouch;if(n&&!Ui(e,i)&&null!=n.left&&!n.moved&&new Date-n.start<300){var a,o=t.coordsChar(e.activeTouch,"page");a=!n.prev||l(n,n.prev)?new ca(o,o):!n.prev.prev||l(n,n.prev.prev)?t.findWordAt(o):new ca(ce(o.line,0),ge(t.doc,ce(o.line+1,0))),t.setSelection(a.anchor,a.head),t.focus(),Tt(i)}r()}),bt(e.scroller,"touchcancel",r),bt(e.scroller,"scroll",function(){e.scroller.clientHeight&&(gr(t,e.scroller.scrollTop),yr(t,e.scroller.scrollLeft,!0),wt(t,"scroll",t))}),bt(e.scroller,"mousewheel",function(e){return sa(t,e)}),bt(e.scroller,"DOMMouseScroll",function(e){return sa(t,e)}),bt(e.wrapper,"scroll",function(){return e.wrapper.scrollTop=e.wrapper.scrollLeft=0}),e.dragFunctions={enter:function(e){Ct(t,e)||Et(e)},over:function(e){Ct(t,e)||(Do(t,e),Et(e))},start:function(e){return Eo(t,e)},drop:Br(t,Io),leave:function(e){Ct(t,e)||Po(t)}};var c=e.input.getField();bt(c,"keyup",function(e){return vs.call(t,e)}),bt(c,"keydown",Br(t,ps)),bt(c,"keypress",Br(t,gs)),bt(c,"focus",function(e){return er(t,e)}),bt(c,"blur",function(e){return ir(t,e)})}Vs.defaults=Bs,Vs.optionHandlers=Ns;var Hs=[];function Ks(t,e,i,n){var r,a=t.doc;null==i&&(i="add"),"smart"==i&&(a.mode.indent?r=Ce(t,e).state:i="prev");var o=t.options.tabSize,s=ee(a,e),l=H(s.text,null,o);s.stateAfter&&(s.stateAfter=null);var c,u=s.text.match(/^\s*/)[0];if(n||/\S/.test(s.text)){if("smart"==i&&(c=a.mode.indent(r,s.text.slice(u.length),s.text),c==U||c>150)){if(!n)return;i="prev"}}else c=0,i="not";"prev"==i?c=e>a.first?H(ee(a,e-1).text,null,o):0:"add"==i?c=l+t.options.indentUnit:"subtract"==i?c=l-t.options.indentUnit:"number"==typeof i&&(c=l+i),c=Math.max(0,c);var d="",h=0;if(t.options.indentWithTabs)for(var p=Math.floor(c/o);p;--p)h+=o,d+="\t";if(ho,l=Ot(e),c=null;if(s&&n.ranges.length>1)if(Ys&&Ys.text.join("\n")==e){if(n.ranges.length%Ys.text.length==0){c=[];for(var u=0;u=0;h--){var p=n.ranges[h],f=p.from(),v=p.to();p.empty()&&(i&&i>0?f=ce(f.line,f.ch-i):t.state.overwrite&&!s?v=ce(v.line,Math.min(ee(a,v.line).text.length,v.ch+tt(l).length)):s&&Ys&&Ys.lineWise&&Ys.text.join("\n")==l.join("\n")&&(f=v=ce(f.line,0)));var g={from:f,to:v,text:c?c[h%c.length]:l,origin:r||(s?"paste":t.state.cutIncoming>o?"cut":"+input")};eo(t.doc,g),Pi(t,"inputRead",t,g)}e&&!s&&js(t,e),dr(t),t.curOp.updateInput<2&&(t.curOp.updateInput=d),t.curOp.typing=!0,t.state.pasteIncoming=t.state.cutIncoming=-1}function Gs(t,e){var i=t.clipboardData&&t.clipboardData.getData("Text");if(i)return t.preventDefault(),e.isReadOnly()||e.options.disableInput||!e.hasFocus()||Fr(e,function(){return Us(e,i,0,null,"paste")}),!0}function js(t,e){if(t.options.electricChars&&t.options.smartIndent)for(var i=t.doc.sel,n=i.ranges.length-1;n>=0;n--){var r=i.ranges[n];if(!(r.head.ch>100||n&&i.ranges[n-1].head.line==r.head.line)){var a=t.getModeAt(r.head),o=!1;if(a.electricChars){for(var s=0;s-1){o=Ks(t,r.head.line,"smart");break}}else a.electricInput&&a.electricInput.test(ee(t.doc,r.head.line).text.slice(0,r.head.ch))&&(o=Ks(t,r.head.line,"smart"));o&&Pi(t,"electricInput",t,r.head.line)}}}function qs(t){for(var e=[],i=[],n=0;ni&&(Ks(this,r.head.line,t,!0),i=r.head.line,n==this.doc.sel.primIndex&&dr(this));else{var a=r.from(),o=r.to(),s=Math.max(i,a.line);i=Math.min(this.lastLine(),o.line-(o.ch?0:1))+1;for(var l=s;l0&&Va(this.doc,n,new ca(a,c[n].to()),G)}}}),getTokenAt:function(t,e){return Me(this,t,e)},getLineTokens:function(t,e){return Me(this,ce(t),e,!0)},getTokenTypeAt:function(t){t=ge(this.doc,t);var e,i=we(this,ee(this.doc,t.line)),n=0,r=(i.length-1)/2,a=t.ch;if(0==a)e=i[2];else for(;;){var o=n+r>>1;if((o?i[2*o-1]:0)>=a)r=o;else{if(!(i[2*o+1]a&&(t=a,r=!0),n=ee(this.doc,t)}else n=t;return xn(this,n,{top:0,left:0},e||"page",i||r).top+(r?this.doc.height-ci(n):0)},defaultTextHeight:function(){return Ln(this.display)},defaultCharWidth:function(){return Rn(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(t,e,i,n,r){var a=this.display;t=Cn(this,ge(this.doc,t));var o=t.bottom,s=t.left;if(e.style.position="absolute",e.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(e),a.sizer.appendChild(e),"over"==n)o=t.top;else if("above"==n||"near"==n){var l=Math.max(a.wrapper.clientHeight,this.doc.height),c=Math.max(a.sizer.clientWidth,a.lineSpace.clientWidth);("above"==n||t.bottom+e.offsetHeight>l)&&t.top>e.offsetHeight?o=t.top-e.offsetHeight:t.bottom+e.offsetHeight<=l&&(o=t.bottom),s+e.offsetWidth>c&&(s=c-e.offsetWidth)}e.style.top=o+"px",e.style.left=e.style.right="","right"==r?(s=a.sizer.clientWidth-e.offsetWidth,e.style.right="0px"):("left"==r?s=0:"middle"==r&&(s=(a.sizer.clientWidth-e.offsetWidth)/2),e.style.left=s+"px"),i&&lr(this,{left:s,top:o,right:s+e.offsetWidth,bottom:o+e.offsetHeight})},triggerOnKeyDown:Nr(ps),triggerOnKeyPress:Nr(gs),triggerOnKeyUp:vs,triggerOnMouseDown:Nr(ws),execCommand:function(t){if(es.hasOwnProperty(t))return es[t].call(null,this)},triggerElectric:Nr(function(t){js(this,t)}),findPosH:function(t,e,i,n){var r=1;e<0&&(r=-1,e=-e);for(var a=ge(this.doc,t),o=0;o0&&s(i.charAt(n-1)))--n;while(r.5||this.options.lineWrapping)&&On(this),wt(this,"refresh",this)}),swapDoc:Nr(function(t){var e=this.doc;return e.cm=null,this.state.selectingText&&this.state.selectingText(),wa(this,t),gn(this),this.display.input.reset(),hr(this,t.scrollLeft,t.scrollTop),this.curOp.forceScroll=!0,Pi(this,"swapDoc",this,e),e}),phrase:function(t){var e=this.options.phrases;return e&&Object.prototype.hasOwnProperty.call(e,t)?e[t]:t},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},At(t),t.registerHelper=function(e,n,r){i.hasOwnProperty(e)||(i[e]=t[e]={_global:[]}),i[e][n]=r},t.registerGlobalHelper=function(e,n,r,a){t.registerHelper(e,n,a),i[e]._global.push({pred:r,val:a})}}function tl(t,e,i,n,r){var a=e,o=i,s=ee(t,e.line),l=r&&"rtl"==t.direction?-i:i;function c(){var i=e.line+l;return!(i=t.first+t.size)&&(e=new ce(i,e.ch,e.sticky),s=ee(t,i))}function u(a){var o;if("codepoint"==n){var u=s.text.charCodeAt(e.ch+(i>0?0:-1));if(isNaN(u))o=null;else{var d=i>0?u>=55296&&u<56320:u>=56320&&u<57343;o=new ce(e.line,Math.max(0,Math.min(s.text.length,e.ch+i*(d?2:1))),-i)}}else o=r?ts(t.cm,s,e,i):Jo(s,e,i);if(null==o){if(a||!c())return!1;e=Qo(r,t.cm,s,e.line,l)}else e=o;return!0}if("char"==n||"codepoint"==n)u();else if("column"==n)u(!0);else if("word"==n||"group"==n)for(var d=null,h="group"==n,p=t.cm&&t.cm.getHelper(e,"wordChars"),f=!0;;f=!1){if(i<0&&!u(!f))break;var v=s.text.charAt(e.ch)||"\n",g=st(v,p)?"w":h&&"\n"==v?"n":!h||/\s/.test(v)?null:"p";if(!h||f||g||(g="s"),d&&d!=g){i<0&&(i=1,u(),e.sticky="after");break}if(g&&(d=g),i>0&&!u(!f))break}var m=Za(t,e,a,o,!0);return de(a,m)&&(m.hitSide=!0),m}function el(t,e,i,n){var r,a,o=t.doc,s=e.left;if("page"==n){var l=Math.min(t.display.wrapper.clientHeight,W(t).innerHeight||o(t).documentElement.clientHeight),c=Math.max(l-.5*Ln(t.display),3);r=(i>0?e.bottom:e.top)+i*c}else"line"==n&&(r=i>0?e.bottom+3:e.top-3);for(;;){if(a=An(t,s,r),!a.outside)break;if(i<0?r<=0:r>=o.height){a.hitSide=!0;break}r+=5*i}return a}var il=function(t){this.cm=t,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new K,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function nl(t,e){var i=an(t,e.line);if(!i||i.hidden)return null;var n=ee(t.doc,e.line),r=en(i,n,e.line),a=mt(n,t.doc.direction),o="left";if(a){var s=vt(a,e.ch);o=s%2?"right":"left"}var l=un(r.map,e.ch,o);return l.offset="right"==l.collapse?l.end:l.start,l}function rl(t){for(var e=t;e;e=e.parentNode)if(/CodeMirror-gutter-wrapper/.test(e.className))return!0;return!1}function al(t,e){return e&&(t.bad=!0),t}function ol(t,e,i,n,r){var a="",o=!1,s=t.doc.lineSeparator(),l=!1;function c(t){return function(e){return e.id==t}}function u(){o&&(a+=s,l&&(a+=s),o=l=!1)}function d(t){t&&(u(),a+=t)}function h(e){if(1==e.nodeType){var i=e.getAttribute("cm-text");if(i)return void d(i);var a,p=e.getAttribute("cm-marker");if(p){var f=t.findMarks(ce(n,0),ce(r+1,0),c(+p));return void(f.length&&(a=f[0].find(0))&&d(ie(t.doc,a.from,a.to).join(s)))}if("false"==e.getAttribute("contenteditable"))return;var v=/^(pre|div|p|li|table|br)$/i.test(e.nodeName);if(!/^br$/i.test(e.nodeName)&&0==e.textContent.length)return;v&&u();for(var g=0;g=e.display.viewTo||a.line=e.display.viewFrom&&nl(e,r)||{node:l[0].measure.map[2],offset:0},u=a.linen.firstLine()&&(o=ce(o.line-1,ee(n.doc,o.line-1).length)),s.ch==ee(n.doc,s.line).text.length&&s.liner.viewTo-1)return!1;o.line==r.viewFrom||0==(t=Wn(n,o.line))?(e=ae(r.view[0].line),i=r.view[0].node):(e=ae(r.view[t].line),i=r.view[t-1].node.nextSibling);var l,c,u=Wn(n,s.line);if(u==r.view.length-1?(l=r.viewTo-1,c=r.lineDiv.lastChild):(l=ae(r.view[u+1].line)-1,c=r.view[u+1].node.previousSibling),!i)return!1;var d=n.doc.splitLines(ol(n,i,c,e,l)),h=ie(n.doc,ce(e,0),ce(l,ee(n.doc,l).text.length));while(d.length>1&&h.length>1)if(tt(d)==tt(h))d.pop(),h.pop(),l--;else{if(d[0]!=h[0])break;d.shift(),h.shift(),e++}var p=0,f=0,v=d[0],g=h[0],m=Math.min(v.length,g.length);while(po.ch&&y.charCodeAt(y.length-f-1)==b.charCodeAt(b.length-f-1))p--,f++;d[d.length-1]=y.slice(0,y.length-f).replace(/^\u200b+/,""),d[0]=d[0].slice(p).replace(/\u200b+$/,"");var _=ce(e,p),w=ce(l,h.length?tt(h).length-f:0);return d.length>1||d[0]||ue(_,w)?(so(n.doc,d,_,w,"+input"),!0):void 0},il.prototype.ensurePolled=function(){this.forceCompositionEnd()},il.prototype.reset=function(){this.forceCompositionEnd()},il.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},il.prototype.readFromDOMSoon=function(){var t=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(t.readDOMTimeout=null,t.composing){if(!t.composing.done)return;t.composing=null}t.updateFromDOM()},80))},il.prototype.updateFromDOM=function(){var t=this;!this.cm.isReadOnly()&&this.pollContent()||Fr(this.cm,function(){return Vn(t.cm)})},il.prototype.setUneditable=function(t){t.contentEditable="false"},il.prototype.onKeyPress=function(t){0==t.charCode||this.composing||(t.preventDefault(),this.cm.isReadOnly()||Br(this.cm,Us)(this.cm,String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),0))},il.prototype.readOnlyChanged=function(t){this.div.contentEditable=String("nocursor"!=t)},il.prototype.onContextMenu=function(){},il.prototype.resetPosition=function(){},il.prototype.needsContentAttribute=!0;var cl=function(t){this.cm=t,this.prevInput="",this.pollingFast=!1,this.polling=new K,this.hasSelection=!1,this.composing=null,this.resetting=!1};function ul(t,e){if(e=e?$(e):{},e.value=t.value,!e.tabindex&&t.tabIndex&&(e.tabindex=t.tabIndex),!e.placeholder&&t.placeholder&&(e.placeholder=t.placeholder),null==e.autofocus){var i=L(z(t));e.autofocus=i==t||null!=t.getAttribute("autofocus")&&i==document.body}function n(){t.value=s.getValue()}var r;if(t.form&&(bt(t.form,"submit",n),!e.leaveSubmitMethodAlone)){var a=t.form;r=a.submit;try{var o=a.submit=function(){n(),a.submit=r,a.submit(),a.submit=o}}catch(l){}}e.finishInit=function(i){i.save=n,i.getTextArea=function(){return t},i.toTextArea=function(){i.toTextArea=isNaN,n(),t.parentNode.removeChild(i.getWrapperElement()),t.style.display="",t.form&&(_t(t.form,"submit",n),e.leaveSubmitMethodAlone||"function"!=typeof t.form.submit||(t.form.submit=r))}},t.style.display="none";var s=Vs(function(e){return t.parentNode.insertBefore(e,t.nextSibling)},e);return s}function dl(t){t.off=_t,t.on=bt,t.wheelEventPixels=oa,t.Doc=To,t.splitLines=Ot,t.countColumn=H,t.findColumn=Z,t.isWordChar=ot,t.Pass=U,t.signal=wt,t.Line=hi,t.changeEnd=ha,t.scrollbarModel=Sr,t.Pos=ce,t.cmpPos=ue,t.modes=Ht,t.mimeModes=Kt,t.resolveMode=Ut,t.getMode=Gt,t.modeExtensions=jt,t.extendMode=qt,t.copyState=Zt,t.startState=Qt,t.innerMode=Jt,t.commands=es,t.keyMap=$o,t.keyName=Go,t.isModifierKey=Xo,t.lookupKey=Yo,t.normalizeKeyMap=Ko,t.StringStream=te,t.SharedTextMarker=_o,t.TextMarker=bo,t.LineWidget=vo,t.e_preventDefault=Tt,t.e_stopPropagation=Mt,t.e_stop=Et,t.addClass=R,t.contains=P,t.rmClass=T,t.keyNames=Oo}cl.prototype.init=function(t){var e=this,i=this,n=this.cm;this.createField(t);var r=this.textarea;function a(t){if(!Ct(n,t)){if(n.somethingSelected())Xs({lineWise:!1,text:n.getSelections()});else{if(!n.options.lineWiseCopyCut)return;var e=qs(n);Xs({lineWise:!0,text:e.text}),"cut"==t.type?n.setSelections(e.ranges,null,G):(i.prevInput="",r.value=e.text.join("\n"),B(r))}"cut"==t.type&&(n.state.cutIncoming=+new Date)}}t.wrapper.insertBefore(this.wrapper,t.wrapper.firstChild),g&&(r.style.width="0px"),bt(r,"input",function(){o&&s>=9&&e.hasSelection&&(e.hasSelection=null),i.poll()}),bt(r,"paste",function(t){Ct(n,t)||Gs(t,n)||(n.state.pasteIncoming=+new Date,i.fastPoll())}),bt(r,"cut",a),bt(r,"copy",a),bt(t.scroller,"paste",function(e){if(!Ui(t,e)&&!Ct(n,e)){if(!r.dispatchEvent)return n.state.pasteIncoming=+new Date,void i.focus();var a=new Event("paste");a.clipboardData=e.clipboardData,r.dispatchEvent(a)}}),bt(t.lineSpace,"selectstart",function(e){Ui(t,e)||Tt(e)}),bt(r,"compositionstart",function(){var t=n.getCursor("from");i.composing&&i.composing.range.clear(),i.composing={start:t,range:n.markText(t,n.getCursor("to"),{className:"CodeMirror-composing"})}}),bt(r,"compositionend",function(){i.composing&&(i.poll(),i.composing.range.clear(),i.composing=null)})},cl.prototype.createField=function(t){this.wrapper=Js(),this.textarea=this.wrapper.firstChild;var e=this.cm.options;Zs(this.textarea,e.spellcheck,e.autocorrect,e.autocapitalize)},cl.prototype.screenReaderLabelChanged=function(t){t?this.textarea.setAttribute("aria-label",t):this.textarea.removeAttribute("aria-label")},cl.prototype.prepareSelection=function(){var t=this.cm,e=t.display,i=t.doc,n=Gn(t);if(t.options.moveInputWithCursor){var r=Cn(t,i.sel.primary().head,"div"),a=e.wrapper.getBoundingClientRect(),o=e.lineDiv.getBoundingClientRect();n.teTop=Math.max(0,Math.min(e.wrapper.clientHeight-10,r.top+o.top-a.top)),n.teLeft=Math.max(0,Math.min(e.wrapper.clientWidth-10,r.left+o.left-a.left))}return n},cl.prototype.showSelection=function(t){var e=this.cm,i=e.display;I(i.cursorDiv,t.cursors),I(i.selectionDiv,t.selection),null!=t.teTop&&(this.wrapper.style.top=t.teTop+"px",this.wrapper.style.left=t.teLeft+"px")},cl.prototype.reset=function(t){if(!(this.contextMenuPending||this.composing&&t)){var e=this.cm;if(this.resetting=!0,e.somethingSelected()){this.prevInput="";var i=e.getSelection();this.textarea.value=i,e.state.focused&&B(this.textarea),o&&s>=9&&(this.hasSelection=i)}else t||(this.prevInput=this.textarea.value="",o&&s>=9&&(this.hasSelection=null));this.resetting=!1}},cl.prototype.getField=function(){return this.textarea},cl.prototype.supportsTouch=function(){return!1},cl.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!y||L(z(this.textarea))!=this.textarea))try{this.textarea.focus()}catch(t){}},cl.prototype.blur=function(){this.textarea.blur()},cl.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},cl.prototype.receivedFocus=function(){this.slowPoll()},cl.prototype.slowPoll=function(){var t=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){t.poll(),t.cm.state.focused&&t.slowPoll()})},cl.prototype.fastPoll=function(){var t=!1,e=this;function i(){var n=e.poll();n||t?(e.pollingFast=!1,e.slowPoll()):(t=!0,e.polling.set(60,i))}e.pollingFast=!0,e.polling.set(20,i)},cl.prototype.poll=function(){var t=this,e=this.cm,i=this.textarea,n=this.prevInput;if(this.contextMenuPending||this.resetting||!e.state.focused||zt(i)&&!n&&!this.composing||e.isReadOnly()||e.options.disableInput||e.state.keySeq)return!1;var r=i.value;if(r==n&&!e.somethingSelected())return!1;if(o&&s>=9&&this.hasSelection===r||b&&/[\uf700-\uf7ff]/.test(r))return e.display.input.reset(),!1;if(e.doc.sel==e.display.selForContextMenu){var a=r.charCodeAt(0);if(8203!=a||n||(n="​"),8666==a)return this.reset(),this.cm.execCommand("undo")}var l=0,c=Math.min(n.length,r.length);while(l1e3||r.indexOf("\n")>-1?i.value=t.prevInput="":t.prevInput=r,t.composing&&(t.composing.range.clear(),t.composing.range=e.markText(t.composing.start,e.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},cl.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},cl.prototype.onKeyPress=function(){o&&s>=9&&(this.hasSelection=null),this.fastPoll()},cl.prototype.onContextMenu=function(t){var e=this,i=e.cm,n=i.display,r=e.textarea;e.contextMenuPending&&e.contextMenuPending();var a=zn(i,t),c=n.scroller.scrollTop;if(a&&!h){var u=i.options.resetSelectionOnContextMenu;u&&-1==i.doc.sel.contains(a)&&Br(i,Ya)(i.doc,da(a),G);var d,p=r.style.cssText,f=e.wrapper.style.cssText,v=e.wrapper.offsetParent.getBoundingClientRect();if(e.wrapper.style.cssText="position: static",r.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(t.clientY-v.top-5)+"px; left: "+(t.clientX-v.left-5)+"px;\n z-index: 1000; background: "+(o?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",l&&(d=r.ownerDocument.defaultView.scrollY),n.input.focus(),l&&r.ownerDocument.defaultView.scrollTo(null,d),n.input.reset(),i.somethingSelected()||(r.value=e.prevInput=" "),e.contextMenuPending=y,n.selForContextMenu=i.doc.sel,clearTimeout(n.detectingSelectAll),o&&s>=9&&m(),S){Et(t);var g=function(){_t(window,"mouseup",g),setTimeout(y,20)};bt(window,"mouseup",g)}else setTimeout(y,50)}function m(){if(null!=r.selectionStart){var t=i.somethingSelected(),a="​"+(t?r.value:"");r.value="⇚",r.value=a,e.prevInput=t?"":"​",r.selectionStart=1,r.selectionEnd=a.length,n.selForContextMenu=i.doc.sel}}function y(){if(e.contextMenuPending==y&&(e.contextMenuPending=!1,e.wrapper.style.cssText=f,r.style.cssText=p,o&&s<9&&n.scrollbars.setScrollTop(n.scroller.scrollTop=c),null!=r.selectionStart)){(!o||o&&s<9)&&m();var t=0,a=function(){n.selForContextMenu==i.doc.sel&&0==r.selectionStart&&r.selectionEnd>0&&"​"==e.prevInput?Br(i,Qa)(i):t++<10?n.detectingSelectAll=setTimeout(a,500):(n.selForContextMenu=null,n.input.reset())};n.detectingSelectAll=setTimeout(a,200)}}},cl.prototype.readOnlyChanged=function(t){t||this.reset(),this.textarea.disabled="nocursor"==t,this.textarea.readOnly=!!t},cl.prototype.setUneditable=function(){},cl.prototype.needsContentAttribute=!1,Os(Vs),Qs(Vs);var hl="iter insert remove copy getEditor constructor".split(" ");for(var pl in To.prototype)To.prototype.hasOwnProperty(pl)&&Y(hl,pl)<0&&(Vs.prototype[pl]=function(t){return function(){return t.apply(this.doc,arguments)}}(To.prototype[pl]));return At(To),Vs.inputStyles={textarea:cl,contenteditable:il},Vs.defineMode=function(t){Vs.defaults.mode||"null"==t||(Vs.defaults.mode=t),Yt.apply(this,arguments)},Vs.defineMIME=Xt,Vs.defineMode("null",function(){return{token:function(t){return t.skipToEnd()}}}),Vs.defineMIME("text/plain","null"),Vs.defineExtension=function(t,e){Vs.prototype[t]=e},Vs.defineDocExtension=function(t,e){To.prototype[t]=e},Vs.fromTextArea=ul,dl(Vs),Vs.version="5.65.21",Vs})},74806:function(t,e,i){(function(t){t(i(15237))})(function(t){"use strict";function e(t){return new RegExp("^(("+t.join(")|(")+"))\\b")}var i=e(["and","or","not","is"]),n=["as","assert","break","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","lambda","pass","raise","return","try","while","with","yield","in","False","True"],r=["abs","all","any","bin","bool","bytearray","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip","__import__","NotImplemented","Ellipsis","__debug__"];function a(t){return t.scopes[t.scopes.length-1]}t.registerHelper("hintWords","python",n.concat(r).concat(["exec","print"])),t.defineMode("python",function(o,s){for(var l="error",c=s.delimiters||s.singleDelimiters||/^[\(\)\[\]\{\}@,:`=;\.\\]/,u=[s.singleOperators,s.doubleOperators,s.doubleDelimiters,s.tripleDelimiters,s.operators||/^([-+*/%\/&|^]=?|[<>=]+|\/\/=?|\*\*=?|!=|[~!@]|\.\.\.)/],d=0;dn?S(e):r0&&A(t,e)&&(o+=" "+l),o}return _(t,e)}function _(t,e,n){if(t.eatSpace())return null;if(!n&&t.match(/^#.*/))return"comment";if(t.match(/^[0-9\.]/,!1)){var r=!1;if(t.match(/^[\d_]*\.\d+(e[\+\-]?\d+)?/i)&&(r=!0),t.match(/^[\d_]+\.\d*/)&&(r=!0),t.match(/^\.\d+/)&&(r=!0),r)return t.eat(/J/i),"number";var a=!1;if(t.match(/^0x[0-9a-f_]+/i)&&(a=!0),t.match(/^0b[01_]+/i)&&(a=!0),t.match(/^0o[0-7_]+/i)&&(a=!0),t.match(/^[1-9][\d_]*(e[\+\-]?[\d_]+)?/)&&(t.eat(/J/i),a=!0),t.match(/^0(?![\dx])/i)&&(a=!0),a)return t.eat(/L/i),"number"}if(t.match(m)){var o=-1!==t.current().toLowerCase().indexOf("f");return o?(e.tokenize=w(t.current(),e.tokenize),e.tokenize(t,e)):(e.tokenize=C(t.current(),e.tokenize),e.tokenize(t,e))}for(var s=0;s=0)t=t.substr(1);var i=1==t.length,n="string";function r(t){return function(e,i){var n=_(e,i,!0);return"punctuation"==n&&("{"==e.current()?i.tokenize=r(t+1):"}"==e.current()&&(i.tokenize=t>1?r(t-1):a)),n}}function a(a,o){while(!a.eol())if(a.eatWhile(/[^'"\{\}\\]/),a.eat("\\")){if(a.next(),i&&a.eol())return n}else{if(a.match(t))return o.tokenize=e,n;if(a.match("{{"))return n;if(a.match("{",!1))return o.tokenize=r(0),a.current()?n:o.tokenize(a,o);if(a.match("}}"))return n;if(a.match("}"))return l;a.eat(/['"]/)}if(i){if(s.singleLineStringErrors)return l;o.tokenize=e}return n}return a.isString=!0,a}function C(t,e){while("rubf".indexOf(t.charAt(0).toLowerCase())>=0)t=t.substr(1);var i=1==t.length,n="string";function r(r,a){while(!r.eol())if(r.eatWhile(/[^'"\\]/),r.eat("\\")){if(r.next(),i&&r.eol())return n}else{if(r.match(t))return a.tokenize=e,n;r.eat(/['"]/)}if(i){if(s.singleLineStringErrors)return l;a.tokenize=e}return n}return r.isString=!0,r}function S(t){while("py"!=a(t).type)t.scopes.pop();t.scopes.push({offset:a(t).offset+o.indentUnit,type:"py",align:null})}function k(t,e,i){var n=t.match(/^[\s\[\{\(]*(?:#|$)/,!1)?null:t.column()+1;e.scopes.push({offset:e.indent+h,type:i,align:n})}function A(t,e){var i=t.indentation();while(e.scopes.length>1&&a(e).offset>i){if("py"!=a(e).type)return!0;e.scopes.pop()}return a(e).offset!=i}function T(t,e){t.sol()&&(e.beginningOfLine=!0,e.dedent=!1);var i=e.tokenize(t,e),n=t.current();if(e.beginningOfLine&&"@"==n)return t.match(g,!1)?"meta":v?"operator":l;if(/\S/.test(n)&&(e.beginningOfLine=!1),"variable"!=i&&"builtin"!=i||"meta"!=e.lastToken||(i="meta"),"pass"!=n&&"return"!=n||(e.dedent=!0),"lambda"==n&&(e.lambda=!0),":"==n&&!e.lambda&&"py"==a(e).type&&t.match(/^\s*(?:#|$)/,!1)&&S(e),1==n.length&&!/string|comment/.test(i)){var r="[({".indexOf(n);if(-1!=r&&k(t,e,"])}".slice(r,r+1)),r="])}".indexOf(n),-1!=r){if(a(e).type!=n)return l;e.indent=e.scopes.pop().offset-h}}return e.dedent&&t.eol()&&"py"==a(e).type&&e.scopes.length>1&&e.scopes.pop(),i}var M={startState:function(t){return{tokenize:x,scopes:[{offset:t||0,type:"py",align:null}],indent:t||0,lastToken:null,lambda:!1,dedent:0}},token:function(t,e){var i=e.errorToken;i&&(e.errorToken=!1);var n=T(t,e);return n&&"comment"!=n&&(e.lastToken="keyword"==n||"punctuation"==n?t.current():n),"punctuation"==n&&(n=null),t.eol()&&e.lambda&&(e.lambda=!1),i?n+" "+l:n},indent:function(e,i){if(e.tokenize!=x)return e.tokenize.isString?t.Pass:0;var n=a(e),r=n.type==i.charAt(0)||"py"==n.type&&!e.dedent&&/^(else:|elif |except |finally:)/.test(i);return null!=n.align?n.align-(r?1:0):n.offset-(r?h:0)},electricInput:/^\s*([\}\]\)]|else:|elif |except |finally:)$/,closeBrackets:{triples:"'\""},lineComment:"#",fold:"indent"};return M}),t.defineMIME("text/x-python","python");var o=function(t){return t.split(" ")};t.defineMIME("text/x-cython",{name:"python",extra_keywords:o("by cdef cimport cpdef ctypedef enum except extern gil include nogil property public readonly struct union DEF IF ELIF ELSE")})})},40955:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.BlockCipher,r=e.algo,a=[],o=[],s=[],l=[],c=[],u=[],d=[],h=[],p=[],f=[];(function(){for(var t=[],e=0;e<256;e++)t[e]=e<128?e<<1:e<<1^283;var i=0,n=0;for(e=0;e<256;e++){var r=n^n<<1^n<<2^n<<3^n<<4;r=r>>>8^255&r^99,a[i]=r,o[r]=i;var v=t[i],g=t[v],m=t[g],y=257*t[r]^16843008*r;s[i]=y<<24|y>>>8,l[i]=y<<16|y>>>16,c[i]=y<<8|y>>>24,u[i]=y;y=16843009*m^65537*g^257*v^16843008*i;d[r]=y<<24|y>>>8,h[r]=y<<16|y>>>16,p[r]=y<<8|y>>>24,f[r]=y,i?(i=v^t[t[t[m^v]]],n^=t[t[n]]):i=n=1}})();var v=[0,1,2,4,8,16,32,64,128,27,54],g=r.AES=n.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var t=this._keyPriorReset=this._key,e=t.words,i=t.sigBytes/4,n=this._nRounds=i+6,r=4*(n+1),o=this._keySchedule=[],s=0;s6&&s%i==4&&(u=a[u>>>24]<<24|a[u>>>16&255]<<16|a[u>>>8&255]<<8|a[255&u]):(u=u<<8|u>>>24,u=a[u>>>24]<<24|a[u>>>16&255]<<16|a[u>>>8&255]<<8|a[255&u],u^=v[s/i|0]<<24),o[s]=o[s-i]^u);for(var l=this._invKeySchedule=[],c=0;c>>24]]^h[a[u>>>16&255]]^p[a[u>>>8&255]]^f[a[255&u]]}}},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._keySchedule,s,l,c,u,a)},decryptBlock:function(t,e){var i=t[e+1];t[e+1]=t[e+3],t[e+3]=i,this._doCryptBlock(t,e,this._invKeySchedule,d,h,p,f,o);i=t[e+1];t[e+1]=t[e+3],t[e+3]=i},_doCryptBlock:function(t,e,i,n,r,a,o,s){for(var l=this._nRounds,c=t[e]^i[0],u=t[e+1]^i[1],d=t[e+2]^i[2],h=t[e+3]^i[3],p=4,f=1;f>>24]^r[u>>>16&255]^a[d>>>8&255]^o[255&h]^i[p++],g=n[u>>>24]^r[d>>>16&255]^a[h>>>8&255]^o[255&c]^i[p++],m=n[d>>>24]^r[h>>>16&255]^a[c>>>8&255]^o[255&u]^i[p++],y=n[h>>>24]^r[c>>>16&255]^a[u>>>8&255]^o[255&d]^i[p++];c=v,u=g,d=m,h=y}v=(s[c>>>24]<<24|s[u>>>16&255]<<16|s[d>>>8&255]<<8|s[255&h])^i[p++],g=(s[u>>>24]<<24|s[d>>>16&255]<<16|s[h>>>8&255]<<8|s[255&c])^i[p++],m=(s[d>>>24]<<24|s[h>>>16&255]<<16|s[c>>>8&255]<<8|s[255&u])^i[p++],y=(s[h>>>24]<<24|s[c>>>16&255]<<16|s[u>>>8&255]<<8|s[255&d])^i[p++];t[e]=v,t[e+1]=g,t[e+2]=m,t[e+3]=y},keySize:8});e.AES=n._createHelper(g)}(),t.AES})},43128:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.BlockCipher,r=e.algo;const a=16,o=[608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,3041331479,2450970073,2306472731],s=[[3509652390,2564797868,805139163,3491422135,3101798381,1780907670,3128725573,4046225305,614570311,3012652279,134345442,2240740374,1667834072,1901547113,2757295779,4103290238,227898511,1921955416,1904987480,2182433518,2069144605,3260701109,2620446009,720527379,3318853667,677414384,3393288472,3101374703,2390351024,1614419982,1822297739,2954791486,3608508353,3174124327,2024746970,1432378464,3864339955,2857741204,1464375394,1676153920,1439316330,715854006,3033291828,289532110,2706671279,2087905683,3018724369,1668267050,732546397,1947742710,3462151702,2609353502,2950085171,1814351708,2050118529,680887927,999245976,1800124847,3300911131,1713906067,1641548236,4213287313,1216130144,1575780402,4018429277,3917837745,3693486850,3949271944,596196993,3549867205,258830323,2213823033,772490370,2760122372,1774776394,2652871518,566650946,4142492826,1728879713,2882767088,1783734482,3629395816,2517608232,2874225571,1861159788,326777828,3124490320,2130389656,2716951837,967770486,1724537150,2185432712,2364442137,1164943284,2105845187,998989502,3765401048,2244026483,1075463327,1455516326,1322494562,910128902,469688178,1117454909,936433444,3490320968,3675253459,1240580251,122909385,2157517691,634681816,4142456567,3825094682,3061402683,2540495037,79693498,3249098678,1084186820,1583128258,426386531,1761308591,1047286709,322548459,995290223,1845252383,2603652396,3431023940,2942221577,3202600964,3727903485,1712269319,422464435,3234572375,1170764815,3523960633,3117677531,1434042557,442511882,3600875718,1076654713,1738483198,4213154764,2393238008,3677496056,1014306527,4251020053,793779912,2902807211,842905082,4246964064,1395751752,1040244610,2656851899,3396308128,445077038,3742853595,3577915638,679411651,2892444358,2354009459,1767581616,3150600392,3791627101,3102740896,284835224,4246832056,1258075500,768725851,2589189241,3069724005,3532540348,1274779536,3789419226,2764799539,1660621633,3471099624,4011903706,913787905,3497959166,737222580,2514213453,2928710040,3937242737,1804850592,3499020752,2949064160,2386320175,2390070455,2415321851,4061277028,2290661394,2416832540,1336762016,1754252060,3520065937,3014181293,791618072,3188594551,3933548030,2332172193,3852520463,3043980520,413987798,3465142937,3030929376,4245938359,2093235073,3534596313,375366246,2157278981,2479649556,555357303,3870105701,2008414854,3344188149,4221384143,3956125452,2067696032,3594591187,2921233993,2428461,544322398,577241275,1471733935,610547355,4027169054,1432588573,1507829418,2025931657,3646575487,545086370,48609733,2200306550,1653985193,298326376,1316178497,3007786442,2064951626,458293330,2589141269,3591329599,3164325604,727753846,2179363840,146436021,1461446943,4069977195,705550613,3059967265,3887724982,4281599278,3313849956,1404054877,2845806497,146425753,1854211946],[1266315497,3048417604,3681880366,3289982499,290971e4,1235738493,2632868024,2414719590,3970600049,1771706367,1449415276,3266420449,422970021,1963543593,2690192192,3826793022,1062508698,1531092325,1804592342,2583117782,2714934279,4024971509,1294809318,4028980673,1289560198,2221992742,1669523910,35572830,157838143,1052438473,1016535060,1802137761,1753167236,1386275462,3080475397,2857371447,1040679964,2145300060,2390574316,1461121720,2956646967,4031777805,4028374788,33600511,2920084762,1018524850,629373528,3691585981,3515945977,2091462646,2486323059,586499841,988145025,935516892,3367335476,2599673255,2839830854,265290510,3972581182,2759138881,3795373465,1005194799,847297441,406762289,1314163512,1332590856,1866599683,4127851711,750260880,613907577,1450815602,3165620655,3734664991,3650291728,3012275730,3704569646,1427272223,778793252,1343938022,2676280711,2052605720,1946737175,3164576444,3914038668,3967478842,3682934266,1661551462,3294938066,4011595847,840292616,3712170807,616741398,312560963,711312465,1351876610,322626781,1910503582,271666773,2175563734,1594956187,70604529,3617834859,1007753275,1495573769,4069517037,2549218298,2663038764,504708206,2263041392,3941167025,2249088522,1514023603,1998579484,1312622330,694541497,2582060303,2151582166,1382467621,776784248,2618340202,3323268794,2497899128,2784771155,503983604,4076293799,907881277,423175695,432175456,1378068232,4145222326,3954048622,3938656102,3820766613,2793130115,2977904593,26017576,3274890735,3194772133,1700274565,1756076034,4006520079,3677328699,720338349,1533947780,354530856,688349552,3973924725,1637815568,332179504,3949051286,53804574,2852348879,3044236432,1282449977,3583942155,3416972820,4006381244,1617046695,2628476075,3002303598,1686838959,431878346,2686675385,1700445008,1080580658,1009431731,832498133,3223435511,2605976345,2271191193,2516031870,1648197032,4164389018,2548247927,300782431,375919233,238389289,3353747414,2531188641,2019080857,1475708069,455242339,2609103871,448939670,3451063019,1395535956,2413381860,1841049896,1491858159,885456874,4264095073,4001119347,1565136089,3898914787,1108368660,540939232,1173283510,2745871338,3681308437,4207628240,3343053890,4016749493,1699691293,1103962373,3625875870,2256883143,3830138730,1031889488,3479347698,1535977030,4236805024,3251091107,2132092099,1774941330,1199868427,1452454533,157007616,2904115357,342012276,595725824,1480756522,206960106,497939518,591360097,863170706,2375253569,3596610801,1814182875,2094937945,3421402208,1082520231,3463918190,2785509508,435703966,3908032597,1641649973,2842273706,3305899714,1510255612,2148256476,2655287854,3276092548,4258621189,236887753,3681803219,274041037,1734335097,3815195456,3317970021,1899903192,1026095262,4050517792,356393447,2410691914,3873677099,3682840055],[3913112168,2491498743,4132185628,2489919796,1091903735,1979897079,3170134830,3567386728,3557303409,857797738,1136121015,1342202287,507115054,2535736646,337727348,3213592640,1301675037,2528481711,1895095763,1721773893,3216771564,62756741,2142006736,835421444,2531993523,1442658625,3659876326,2882144922,676362277,1392781812,170690266,3921047035,1759253602,3611846912,1745797284,664899054,1329594018,3901205900,3045908486,2062866102,2865634940,3543621612,3464012697,1080764994,553557557,3656615353,3996768171,991055499,499776247,1265440854,648242737,3940784050,980351604,3713745714,1749149687,3396870395,4211799374,3640570775,1161844396,3125318951,1431517754,545492359,4268468663,3499529547,1437099964,2702547544,3433638243,2581715763,2787789398,1060185593,1593081372,2418618748,4260947970,69676912,2159744348,86519011,2512459080,3838209314,1220612927,3339683548,133810670,1090789135,1078426020,1569222167,845107691,3583754449,4072456591,1091646820,628848692,1613405280,3757631651,526609435,236106946,48312990,2942717905,3402727701,1797494240,859738849,992217954,4005476642,2243076622,3870952857,3732016268,765654824,3490871365,2511836413,1685915746,3888969200,1414112111,2273134842,3281911079,4080962846,172450625,2569994100,980381355,4109958455,2819808352,2716589560,2568741196,3681446669,3329971472,1835478071,660984891,3704678404,4045999559,3422617507,3040415634,1762651403,1719377915,3470491036,2693910283,3642056355,3138596744,1364962596,2073328063,1983633131,926494387,3423689081,2150032023,4096667949,1749200295,3328846651,309677260,2016342300,1779581495,3079819751,111262694,1274766160,443224088,298511866,1025883608,3806446537,1145181785,168956806,3641502830,3584813610,1689216846,3666258015,3200248200,1692713982,2646376535,4042768518,1618508792,1610833997,3523052358,4130873264,2001055236,3610705100,2202168115,4028541809,2961195399,1006657119,2006996926,3186142756,1430667929,3210227297,1314452623,4074634658,4101304120,2273951170,1399257539,3367210612,3027628629,1190975929,2062231137,2333990788,2221543033,2438960610,1181637006,548689776,2362791313,3372408396,3104550113,3145860560,296247880,1970579870,3078560182,3769228297,1714227617,3291629107,3898220290,166772364,1251581989,493813264,448347421,195405023,2709975567,677966185,3703036547,1463355134,2715995803,1338867538,1343315457,2802222074,2684532164,233230375,2599980071,2000651841,3277868038,1638401717,4028070440,3237316320,6314154,819756386,300326615,590932579,1405279636,3267499572,3150704214,2428286686,3959192993,3461946742,1862657033,1266418056,963775037,2089974820,2263052895,1917689273,448879540,3550394620,3981727096,150775221,3627908307,1303187396,508620638,2975983352,2726630617,1817252668,1876281319,1457606340,908771278,3720792119,3617206836,2455994898,1729034894,1080033504],[976866871,3556439503,2881648439,1522871579,1555064734,1336096578,3548522304,2579274686,3574697629,3205460757,3593280638,3338716283,3079412587,564236357,2993598910,1781952180,1464380207,3163844217,3332601554,1699332808,1393555694,1183702653,3581086237,1288719814,691649499,2847557200,2895455976,3193889540,2717570544,1781354906,1676643554,2592534050,3230253752,1126444790,2770207658,2633158820,2210423226,2615765581,2414155088,3127139286,673620729,2805611233,1269405062,4015350505,3341807571,4149409754,1057255273,2012875353,2162469141,2276492801,2601117357,993977747,3918593370,2654263191,753973209,36408145,2530585658,25011837,3520020182,2088578344,530523599,2918365339,1524020338,1518925132,3760827505,3759777254,1202760957,3985898139,3906192525,674977740,4174734889,2031300136,2019492241,3983892565,4153806404,3822280332,352677332,2297720250,60907813,90501309,3286998549,1016092578,2535922412,2839152426,457141659,509813237,4120667899,652014361,1966332200,2975202805,55981186,2327461051,676427537,3255491064,2882294119,3433927263,1307055953,942726286,933058658,2468411793,3933900994,4215176142,1361170020,2001714738,2830558078,3274259782,1222529897,1679025792,2729314320,3714953764,1770335741,151462246,3013232138,1682292957,1483529935,471910574,1539241949,458788160,3436315007,1807016891,3718408830,978976581,1043663428,3165965781,1927990952,4200891579,2372276910,3208408903,3533431907,1412390302,2931980059,4132332400,1947078029,3881505623,4168226417,2941484381,1077988104,1320477388,886195818,18198404,3786409e3,2509781533,112762804,3463356488,1866414978,891333506,18488651,661792760,1628790961,3885187036,3141171499,876946877,2693282273,1372485963,791857591,2686433993,3759982718,3167212022,3472953795,2716379847,445679433,3561995674,3504004811,3574258232,54117162,3331405415,2381918588,3769707343,4154350007,1140177722,4074052095,668550556,3214352940,367459370,261225585,2610173221,4209349473,3468074219,3265815641,314222801,3066103646,3808782860,282218597,3406013506,3773591054,379116347,1285071038,846784868,2669647154,3771962079,3550491691,2305946142,453669953,1268987020,3317592352,3279303384,3744833421,2610507566,3859509063,266596637,3847019092,517658769,3462560207,3443424879,370717030,4247526661,2224018117,4143653529,4112773975,2788324899,2477274417,1456262402,2901442914,1517677493,1846949527,2295493580,3734397586,2176403920,1280348187,1908823572,3871786941,846861322,1172426758,3287448474,3383383037,1655181056,3139813346,901632758,1897031941,2986607138,3066810236,3447102507,1393639104,373351379,950779232,625454576,3124240540,4148612726,2007998917,544563296,2244738638,2330496472,2058025392,1291430526,424198748,50039436,29584100,3605783033,2429876329,2791104160,1057563949,3255363231,3075367218,3463963227,1469046755,985887462]];var l={pbox:[],sbox:[]};function c(t,e){let i=e>>24&255,n=e>>16&255,r=e>>8&255,a=255&e,o=t.sbox[0][i]+t.sbox[1][n];return o^=t.sbox[2][r],o+=t.sbox[3][a],o}function u(t,e,i){let n,r=e,o=i;for(let s=0;s1;--s)r^=t.pbox[s],o=c(t,r)^o,n=r,r=o,o=n;return n=r,r=o,o=n,o^=t.pbox[1],r^=t.pbox[0],{left:r,right:o}}function h(t,e,i){for(let a=0;a<4;a++){t.sbox[a]=[];for(let e=0;e<256;e++)t.sbox[a][e]=s[a][e]}let n=0;for(let s=0;s=i&&(n=0);let r=0,l=0,c=0;for(let o=0;o>>2];t.sigBytes-=e}},m=(n.BlockCipher=d.extend({cfg:d.cfg.extend({mode:f,padding:g}),reset:function(){var t;d.reset.call(this);var e=this.cfg,i=e.iv,n=e.mode;this._xformMode==this._ENC_XFORM_MODE?t=n.createEncryptor:(t=n.createDecryptor,this._minBufferSize=1),this._mode&&this._mode.__creator==t?this._mode.init(this,i&&i.words):(this._mode=t.call(n,this,i&&i.words),this._mode.__creator=t)},_doProcessBlock:function(t,e){this._mode.processBlock(t,e)},_doFinalize:function(){var t,e=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(e.pad(this._data,this.blockSize),t=this._process(!0)):(t=this._process(!0),e.unpad(t)),t},blockSize:4}),n.CipherParams=r.extend({init:function(t){this.mixIn(t)},toString:function(t){return(t||this.formatter).stringify(this)}})),y=i.format={},b=y.OpenSSL={stringify:function(t){var e,i=t.ciphertext,n=t.salt;return e=n?a.create([1398893684,1701076831]).concat(n).concat(i):i,e.toString(l)},parse:function(t){var e,i=l.parse(t),n=i.words;return 1398893684==n[0]&&1701076831==n[1]&&(e=a.create(n.slice(2,4)),n.splice(0,4),i.sigBytes-=16),m.create({ciphertext:i,salt:e})}},x=n.SerializableCipher=r.extend({cfg:r.extend({format:b}),encrypt:function(t,e,i,n){n=this.cfg.extend(n);var r=t.createEncryptor(i,n),a=r.finalize(e),o=r.cfg;return m.create({ciphertext:a,key:i,iv:o.iv,algorithm:t,mode:o.mode,padding:o.padding,blockSize:t.blockSize,formatter:n.format})},decrypt:function(t,e,i,n){n=this.cfg.extend(n),e=this._parse(e,n.format);var r=t.createDecryptor(i,n).finalize(e.ciphertext);return r},_parse:function(t,e){return"string"==typeof t?e.parse(t,this):t}}),_=i.kdf={},w=_.OpenSSL={execute:function(t,e,i,n,r){if(n||(n=a.random(8)),r)o=u.create({keySize:e+i,hasher:r}).compute(t,n);else var o=u.create({keySize:e+i}).compute(t,n);var s=a.create(o.words.slice(e),4*i);return o.sigBytes=4*e,m.create({key:o,iv:s,salt:n})}},C=n.PasswordBasedCipher=x.extend({cfg:x.cfg.extend({kdf:w}),encrypt:function(t,e,i,n){n=this.cfg.extend(n);var r=n.kdf.execute(i,t.keySize,t.ivSize,n.salt,n.hasher);n.iv=r.iv;var a=x.encrypt.call(this,t,e,r.key,n);return a.mixIn(r),a},decrypt:function(t,e,i,n){n=this.cfg.extend(n),e=this._parse(e,n.format);var r=n.kdf.execute(i,t.keySize,t.ivSize,e.salt,n.hasher);n.iv=r.iv;var a=x.decrypt.call(this,t,e,r.key,n);return a}})}()})},19021:function(t,e,i){(function(e,i){t.exports=i()})(0,function(){var t=t||function(t,e){var n;if("undefined"!==typeof window&&window.crypto&&(n=window.crypto),"undefined"!==typeof self&&self.crypto&&(n=self.crypto),"undefined"!==typeof globalThis&&globalThis.crypto&&(n=globalThis.crypto),!n&&"undefined"!==typeof window&&window.msCrypto&&(n=window.msCrypto),!n&&"undefined"!==typeof i.g&&i.g.crypto&&(n=i.g.crypto),!n)try{n=i(50477)}catch(g){}var r=function(){if(n){if("function"===typeof n.getRandomValues)try{return n.getRandomValues(new Uint32Array(1))[0]}catch(g){}if("function"===typeof n.randomBytes)try{return n.randomBytes(4).readInt32LE()}catch(g){}}throw new Error("Native crypto module could not be used to get secure random number.")},a=Object.create||function(){function t(){}return function(e){var i;return t.prototype=e,i=new t,t.prototype=null,i}}(),o={},s=o.lib={},l=s.Base=function(){return{extend:function(t){var e=a(this);return t&&e.mixIn(t),e.hasOwnProperty("init")&&this.init!==e.init||(e.init=function(){e.$super.init.apply(this,arguments)}),e.init.prototype=e,e.$super=this,e},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),c=s.WordArray=l.extend({init:function(t,i){t=this.words=t||[],this.sigBytes=i!=e?i:4*t.length},toString:function(t){return(t||d).stringify(this)},concat:function(t){var e=this.words,i=t.words,n=this.sigBytes,r=t.sigBytes;if(this.clamp(),n%4)for(var a=0;a>>2]>>>24-a%4*8&255;e[n+a>>>2]|=o<<24-(n+a)%4*8}else for(var s=0;s>>2]=i[s>>>2];return this.sigBytes+=r,this},clamp:function(){var e=this.words,i=this.sigBytes;e[i>>>2]&=4294967295<<32-i%4*8,e.length=t.ceil(i/4)},clone:function(){var t=l.clone.call(this);return t.words=this.words.slice(0),t},random:function(t){for(var e=[],i=0;i>>2]>>>24-r%4*8&255;n.push((a>>>4).toString(16)),n.push((15&a).toString(16))}return n.join("")},parse:function(t){for(var e=t.length,i=[],n=0;n>>3]|=parseInt(t.substr(n,2),16)<<24-n%8*4;return new c.init(i,e/2)}},h=u.Latin1={stringify:function(t){for(var e=t.words,i=t.sigBytes,n=[],r=0;r>>2]>>>24-r%4*8&255;n.push(String.fromCharCode(a))}return n.join("")},parse:function(t){for(var e=t.length,i=[],n=0;n>>2]|=(255&t.charCodeAt(n))<<24-n%4*8;return new c.init(i,e)}},p=u.Utf8={stringify:function(t){try{return decodeURIComponent(escape(h.stringify(t)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(t){return h.parse(unescape(encodeURIComponent(t)))}},f=s.BufferedBlockAlgorithm=l.extend({reset:function(){this._data=new c.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=p.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(e){var i,n=this._data,r=n.words,a=n.sigBytes,o=this.blockSize,s=4*o,l=a/s;l=e?t.ceil(l):t.max((0|l)-this._minBufferSize,0);var u=l*o,d=t.min(4*u,a);if(u){for(var h=0;h>>2]>>>24-a%4*8&255,s=e[a+1>>>2]>>>24-(a+1)%4*8&255,l=e[a+2>>>2]>>>24-(a+2)%4*8&255,c=o<<16|s<<8|l,u=0;u<4&&a+.75*u>>6*(3-u)&63));var d=n.charAt(64);if(d)while(r.length%4)r.push(d);return r.join("")},parse:function(t){var e=t.length,i=this._map,n=this._reverseMap;if(!n){n=this._reverseMap=[];for(var r=0;r>>6-o%4*2,c=s|l;r[a>>>2]|=c<<24-a%4*8,a++}return n.create(r,a)}}(),t.enc.Base64})},64725:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=e.enc;r.Base64url={stringify:function(t,e){void 0===e&&(e=!0);var i=t.words,n=t.sigBytes,r=e?this._safe_map:this._map;t.clamp();for(var a=[],o=0;o>>2]>>>24-o%4*8&255,l=i[o+1>>>2]>>>24-(o+1)%4*8&255,c=i[o+2>>>2]>>>24-(o+2)%4*8&255,u=s<<16|l<<8|c,d=0;d<4&&o+.75*d>>6*(3-d)&63));var h=r.charAt(64);if(h)while(a.length%4)a.push(h);return a.join("")},parse:function(t,e){void 0===e&&(e=!0);var i=t.length,n=e?this._safe_map:this._map,r=this._reverseMap;if(!r){r=this._reverseMap=[];for(var o=0;o>>6-o%4*2,c=s|l;r[a>>>2]|=c<<24-a%4*8,a++}return n.create(r,a)}}(),t.enc.Base64url})},45503:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=e.enc;r.Utf16=r.Utf16BE={stringify:function(t){for(var e=t.words,i=t.sigBytes,n=[],r=0;r>>2]>>>16-r%4*8&65535;n.push(String.fromCharCode(a))}return n.join("")},parse:function(t){for(var e=t.length,i=[],r=0;r>>1]|=t.charCodeAt(r)<<16-r%2*16;return n.create(i,2*e)}};function a(t){return t<<8&4278255360|t>>>8&16711935}r.Utf16LE={stringify:function(t){for(var e=t.words,i=t.sigBytes,n=[],r=0;r>>2]>>>16-r%4*8&65535);n.push(String.fromCharCode(o))}return n.join("")},parse:function(t){for(var e=t.length,i=[],r=0;r>>1]|=a(t.charCodeAt(r)<<16-r%2*16);return n.create(i,2*e)}}}(),t.enc.Utf16})},39506:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(45471),i(51025))})(0,function(t){return function(){var e=t,i=e.lib,n=i.Base,r=i.WordArray,a=e.algo,o=a.MD5,s=a.EvpKDF=n.extend({cfg:n.extend({keySize:4,hasher:o,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){var i,n=this.cfg,a=n.hasher.create(),o=r.create(),s=o.words,l=n.keySize,c=n.iterations;while(s.lengthn&&(e=t.finalize(e)),e.clamp();for(var r=this._oKey=e.clone(),o=this._iKey=e.clone(),s=r.words,l=o.words,c=0;c>>2]|=t[n]<<24-n%4*8;r.call(this,i,e)}else r.apply(this,arguments)};a.prototype=n}}(),t.lib.WordArray})},84636:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(e){var i=t,n=i.lib,r=n.WordArray,a=n.Hasher,o=i.algo,s=[];(function(){for(var t=0;t<64;t++)s[t]=4294967296*e.abs(e.sin(t+1))|0})();var l=o.MD5=a.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(t,e){for(var i=0;i<16;i++){var n=e+i,r=t[n];t[n]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8)}var a=this._hash.words,o=t[e+0],l=t[e+1],p=t[e+2],f=t[e+3],v=t[e+4],g=t[e+5],m=t[e+6],y=t[e+7],b=t[e+8],x=t[e+9],_=t[e+10],w=t[e+11],C=t[e+12],S=t[e+13],k=t[e+14],A=t[e+15],T=a[0],M=a[1],I=a[2],E=a[3];T=c(T,M,I,E,o,7,s[0]),E=c(E,T,M,I,l,12,s[1]),I=c(I,E,T,M,p,17,s[2]),M=c(M,I,E,T,f,22,s[3]),T=c(T,M,I,E,v,7,s[4]),E=c(E,T,M,I,g,12,s[5]),I=c(I,E,T,M,m,17,s[6]),M=c(M,I,E,T,y,22,s[7]),T=c(T,M,I,E,b,7,s[8]),E=c(E,T,M,I,x,12,s[9]),I=c(I,E,T,M,_,17,s[10]),M=c(M,I,E,T,w,22,s[11]),T=c(T,M,I,E,C,7,s[12]),E=c(E,T,M,I,S,12,s[13]),I=c(I,E,T,M,k,17,s[14]),M=c(M,I,E,T,A,22,s[15]),T=u(T,M,I,E,l,5,s[16]),E=u(E,T,M,I,m,9,s[17]),I=u(I,E,T,M,w,14,s[18]),M=u(M,I,E,T,o,20,s[19]),T=u(T,M,I,E,g,5,s[20]),E=u(E,T,M,I,_,9,s[21]),I=u(I,E,T,M,A,14,s[22]),M=u(M,I,E,T,v,20,s[23]),T=u(T,M,I,E,x,5,s[24]),E=u(E,T,M,I,k,9,s[25]),I=u(I,E,T,M,f,14,s[26]),M=u(M,I,E,T,b,20,s[27]),T=u(T,M,I,E,S,5,s[28]),E=u(E,T,M,I,p,9,s[29]),I=u(I,E,T,M,y,14,s[30]),M=u(M,I,E,T,C,20,s[31]),T=d(T,M,I,E,g,4,s[32]),E=d(E,T,M,I,b,11,s[33]),I=d(I,E,T,M,w,16,s[34]),M=d(M,I,E,T,k,23,s[35]),T=d(T,M,I,E,l,4,s[36]),E=d(E,T,M,I,v,11,s[37]),I=d(I,E,T,M,y,16,s[38]),M=d(M,I,E,T,_,23,s[39]),T=d(T,M,I,E,S,4,s[40]),E=d(E,T,M,I,o,11,s[41]),I=d(I,E,T,M,f,16,s[42]),M=d(M,I,E,T,m,23,s[43]),T=d(T,M,I,E,x,4,s[44]),E=d(E,T,M,I,C,11,s[45]),I=d(I,E,T,M,A,16,s[46]),M=d(M,I,E,T,p,23,s[47]),T=h(T,M,I,E,o,6,s[48]),E=h(E,T,M,I,y,10,s[49]),I=h(I,E,T,M,k,15,s[50]),M=h(M,I,E,T,g,21,s[51]),T=h(T,M,I,E,C,6,s[52]),E=h(E,T,M,I,f,10,s[53]),I=h(I,E,T,M,_,15,s[54]),M=h(M,I,E,T,l,21,s[55]),T=h(T,M,I,E,b,6,s[56]),E=h(E,T,M,I,A,10,s[57]),I=h(I,E,T,M,m,15,s[58]),M=h(M,I,E,T,S,21,s[59]),T=h(T,M,I,E,v,6,s[60]),E=h(E,T,M,I,w,10,s[61]),I=h(I,E,T,M,p,15,s[62]),M=h(M,I,E,T,x,21,s[63]),a[0]=a[0]+T|0,a[1]=a[1]+M|0,a[2]=a[2]+I|0,a[3]=a[3]+E|0},_doFinalize:function(){var t=this._data,i=t.words,n=8*this._nDataBytes,r=8*t.sigBytes;i[r>>>5]|=128<<24-r%32;var a=e.floor(n/4294967296),o=n;i[15+(r+64>>>9<<4)]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),i[14+(r+64>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),t.sigBytes=4*(i.length+1),this._process();for(var s=this._hash,l=s.words,c=0;c<4;c++){var u=l[c];l[c]=16711935&(u<<8|u>>>24)|4278255360&(u<<24|u>>>8)}return s},clone:function(){var t=a.clone.call(this);return t._hash=this._hash.clone(),t}});function c(t,e,i,n,r,a,o){var s=t+(e&i|~e&n)+r+o;return(s<>>32-a)+e}function u(t,e,i,n,r,a,o){var s=t+(e&n|i&~n)+r+o;return(s<>>32-a)+e}function d(t,e,i,n,r,a,o){var s=t+(e^i^n)+r+o;return(s<>>32-a)+e}function h(t,e,i,n,r,a,o){var s=t+(i^(e|~n))+r+o;return(s<>>32-a)+e}i.MD5=a._createHelper(l),i.HmacMD5=a._createHmacHelper(l)}(Math),t.MD5})},82169:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.mode.CFB=function(){var e=t.lib.BlockCipherMode.extend();function i(t,e,i,n){var r,a=this._iv;a?(r=a.slice(0),this._iv=void 0):r=this._prevBlock,n.encryptBlock(r,0);for(var o=0;o>24&255)){var e=t>>16&255,i=t>>8&255,n=255&t;255===e?(e=0,255===i?(i=0,255===n?n=0:++n):++i):++e,t=0,t+=e<<16,t+=i<<8,t+=n}else t+=1<<24;return t}function n(t){return 0===(t[0]=i(t[0]))&&(t[1]=i(t[1])),t}var r=e.Encryptor=e.extend({processBlock:function(t,e){var i=this._cipher,r=i.blockSize,a=this._iv,o=this._counter;a&&(o=this._counter=a.slice(0),this._iv=void 0),n(o);var s=o.slice(0);i.encryptBlock(s,0);for(var l=0;l>>2]|=r<<24-a%4*8,t.sigBytes+=r},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},t.pad.Ansix923})},54905:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.pad.Iso10126={pad:function(e,i){var n=4*i,r=n-e.sigBytes%n;e.concat(t.lib.WordArray.random(r-1)).concat(t.lib.WordArray.create([r<<24],1))},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},t.pad.Iso10126})},10482:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.pad.Iso97971={pad:function(e,i){e.concat(t.lib.WordArray.create([2147483648],1)),t.pad.ZeroPadding.pad(e,i)},unpad:function(e){t.pad.ZeroPadding.unpad(e),e.sigBytes--}},t.pad.Iso97971})},58124:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.pad.NoPadding={pad:function(){},unpad:function(){}},t.pad.NoPadding})},52155:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.pad.ZeroPadding={pad:function(t,e){var i=4*e;t.clamp(),t.sigBytes+=i-(t.sigBytes%i||i)},unpad:function(t){var e=t.words,i=t.sigBytes-1;for(i=t.sigBytes-1;i>=0;i--)if(e[i>>>2]>>>24-i%4*8&255){t.sigBytes=i+1;break}}},t.pad.ZeroPadding})},70019:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(63009),i(51025))})(0,function(t){return function(){var e=t,i=e.lib,n=i.Base,r=i.WordArray,a=e.algo,o=a.SHA256,s=a.HMAC,l=a.PBKDF2=n.extend({cfg:n.extend({keySize:4,hasher:o,iterations:25e4}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){var i=this.cfg,n=s.create(i.hasher,t),a=r.create(),o=r.create([1]),l=a.words,c=o.words,u=i.keySize,d=i.iterations;while(l.length>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],n=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];this._b=0;for(var r=0;r<4;r++)c.call(this);for(r=0;r<8;r++)n[r]^=i[r+4&7];if(e){var a=e.words,o=a[0],s=a[1],l=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),u=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),d=l>>>16|4294901760&u,h=u<<16|65535&l;n[0]^=l,n[1]^=d,n[2]^=u,n[3]^=h,n[4]^=l,n[5]^=d,n[6]^=u,n[7]^=h;for(r=0;r<4;r++)c.call(this)}},_doProcessBlock:function(t,e){var i=this._X;c.call(this),a[0]=i[0]^i[5]>>>16^i[3]<<16,a[1]=i[2]^i[7]>>>16^i[5]<<16,a[2]=i[4]^i[1]>>>16^i[7]<<16,a[3]=i[6]^i[3]>>>16^i[1]<<16;for(var n=0;n<4;n++)a[n]=16711935&(a[n]<<8|a[n]>>>24)|4278255360&(a[n]<<24|a[n]>>>8),t[e+n]^=a[n]},blockSize:4,ivSize:2});function c(){for(var t=this._X,e=this._C,i=0;i<8;i++)o[i]=e[i];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(i=0;i<8;i++){var n=t[i]+e[i],r=65535&n,a=n>>>16,l=((r*r>>>17)+r*a>>>15)+a*a,c=((4294901760&n)*n|0)+((65535&n)*n|0);s[i]=l^c}t[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,t[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,t[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,t[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,t[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,t[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,t[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,t[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}e.RabbitLegacy=n._createHelper(l)}(),t.RabbitLegacy})},96298:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.StreamCipher,r=e.algo,a=[],o=[],s=[],l=r.Rabbit=n.extend({_doReset:function(){for(var t=this._key.words,e=this.cfg.iv,i=0;i<4;i++)t[i]=16711935&(t[i]<<8|t[i]>>>24)|4278255360&(t[i]<<24|t[i]>>>8);var n=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],r=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];this._b=0;for(i=0;i<4;i++)c.call(this);for(i=0;i<8;i++)r[i]^=n[i+4&7];if(e){var a=e.words,o=a[0],s=a[1],l=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),u=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),d=l>>>16|4294901760&u,h=u<<16|65535&l;r[0]^=l,r[1]^=d,r[2]^=u,r[3]^=h,r[4]^=l,r[5]^=d,r[6]^=u,r[7]^=h;for(i=0;i<4;i++)c.call(this)}},_doProcessBlock:function(t,e){var i=this._X;c.call(this),a[0]=i[0]^i[5]>>>16^i[3]<<16,a[1]=i[2]^i[7]>>>16^i[5]<<16,a[2]=i[4]^i[1]>>>16^i[7]<<16,a[3]=i[6]^i[3]>>>16^i[1]<<16;for(var n=0;n<4;n++)a[n]=16711935&(a[n]<<8|a[n]>>>24)|4278255360&(a[n]<<24|a[n]>>>8),t[e+n]^=a[n]},blockSize:4,ivSize:2});function c(){for(var t=this._X,e=this._C,i=0;i<8;i++)o[i]=e[i];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(i=0;i<8;i++){var n=t[i]+e[i],r=65535&n,a=n>>>16,l=((r*r>>>17)+r*a>>>15)+a*a,c=((4294901760&n)*n|0)+((65535&n)*n|0);s[i]=l^c}t[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,t[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,t[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,t[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,t[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,t[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,t[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,t[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}e.Rabbit=n._createHelper(l)}(),t.Rabbit})},77193:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.StreamCipher,r=e.algo,a=r.RC4=n.extend({_doReset:function(){for(var t=this._key,e=t.words,i=t.sigBytes,n=this._S=[],r=0;r<256;r++)n[r]=r;r=0;for(var a=0;r<256;r++){var o=r%i,s=e[o>>>2]>>>24-o%4*8&255;a=(a+n[r]+s)%256;var l=n[r];n[r]=n[a],n[a]=l}this._i=this._j=0},_doProcessBlock:function(t,e){t[e]^=o.call(this)},keySize:8,ivSize:0});function o(){for(var t=this._S,e=this._i,i=this._j,n=0,r=0;r<4;r++){e=(e+1)%256,i=(i+t[e])%256;var a=t[e];t[e]=t[i],t[i]=a,n|=t[(t[e]+t[i])%256]<<24-8*r}return this._i=e,this._j=i,n}e.RC4=n._createHelper(a);var s=r.RC4Drop=a.extend({cfg:a.cfg.extend({drop:192}),_doReset:function(){a._doReset.call(this);for(var t=this.cfg.drop;t>0;t--)o.call(this)}});e.RC4Drop=n._createHelper(s)}(),t.RC4})},78056:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){ +/** @preserve + (c) 2012 by Cédric Mesnil. All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +return function(){var e=t,i=e.lib,n=i.WordArray,r=i.Hasher,a=e.algo,o=n.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),s=n.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),l=n.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),c=n.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),u=n.create([0,1518500249,1859775393,2400959708,2840853838]),d=n.create([1352829926,1548603684,1836072691,2053994217,0]),h=a.RIPEMD160=r.extend({_doReset:function(){this._hash=n.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var i=0;i<16;i++){var n=e+i,r=t[n];t[n]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8)}var a,h,b,x,_,w,C,S,k,A,T,M=this._hash.words,I=u.words,E=d.words,D=o.words,P=s.words,L=l.words,R=c.words;w=a=M[0],C=h=M[1],S=b=M[2],k=x=M[3],A=_=M[4];for(i=0;i<80;i+=1)T=a+t[e+D[i]]|0,T+=i<16?p(h,b,x)+I[0]:i<32?f(h,b,x)+I[1]:i<48?v(h,b,x)+I[2]:i<64?g(h,b,x)+I[3]:m(h,b,x)+I[4],T|=0,T=y(T,L[i]),T=T+_|0,a=_,_=x,x=y(b,10),b=h,h=T,T=w+t[e+P[i]]|0,T+=i<16?m(C,S,k)+E[0]:i<32?g(C,S,k)+E[1]:i<48?v(C,S,k)+E[2]:i<64?f(C,S,k)+E[3]:p(C,S,k)+E[4],T|=0,T=y(T,R[i]),T=T+A|0,w=A,A=k,k=y(S,10),S=C,C=T;T=M[1]+b+k|0,M[1]=M[2]+x+A|0,M[2]=M[3]+_+w|0,M[3]=M[4]+a+C|0,M[4]=M[0]+h+S|0,M[0]=T},_doFinalize:function(){var t=this._data,e=t.words,i=8*this._nDataBytes,n=8*t.sigBytes;e[n>>>5]|=128<<24-n%32,e[14+(n+64>>>9<<4)]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),t.sigBytes=4*(e.length+1),this._process();for(var r=this._hash,a=r.words,o=0;o<5;o++){var s=a[o];a[o]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8)}return r},clone:function(){var t=r.clone.call(this);return t._hash=this._hash.clone(),t}});function p(t,e,i){return t^e^i}function f(t,e,i){return t&e|~t&i}function v(t,e,i){return(t|~e)^i}function g(t,e,i){return t&i|e&~i}function m(t,e,i){return t^(e|~i)}function y(t,e){return t<>>32-e}e.RIPEMD160=r._createHelper(h),e.HmacRIPEMD160=r._createHmacHelper(h)}(Math),t.RIPEMD160})},45471:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=i.Hasher,a=e.algo,o=[],s=a.SHA1=r.extend({_doReset:function(){this._hash=new n.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var i=this._hash.words,n=i[0],r=i[1],a=i[2],s=i[3],l=i[4],c=0;c<80;c++){if(c<16)o[c]=0|t[e+c];else{var u=o[c-3]^o[c-8]^o[c-14]^o[c-16];o[c]=u<<1|u>>>31}var d=(n<<5|n>>>27)+l+o[c];d+=c<20?1518500249+(r&a|~r&s):c<40?1859775393+(r^a^s):c<60?(r&a|r&s|a&s)-1894007588:(r^a^s)-899497514,l=s,s=a,a=r<<30|r>>>2,r=n,n=d}i[0]=i[0]+n|0,i[1]=i[1]+r|0,i[2]=i[2]+a|0,i[3]=i[3]+s|0,i[4]=i[4]+l|0},_doFinalize:function(){var t=this._data,e=t.words,i=8*this._nDataBytes,n=8*t.sigBytes;return e[n>>>5]|=128<<24-n%32,e[14+(n+64>>>9<<4)]=Math.floor(i/4294967296),e[15+(n+64>>>9<<4)]=i,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=r.clone.call(this);return t._hash=this._hash.clone(),t}});e.SHA1=r._createHelper(s),e.HmacSHA1=r._createHmacHelper(s)}(),t.SHA1})},36308:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(63009))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=e.algo,a=r.SHA256,o=r.SHA224=a.extend({_doReset:function(){this._hash=new n.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var t=a._doFinalize.call(this);return t.sigBytes-=4,t}});e.SHA224=a._createHelper(o),e.HmacSHA224=a._createHmacHelper(o)}(),t.SHA224})},63009:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(e){var i=t,n=i.lib,r=n.WordArray,a=n.Hasher,o=i.algo,s=[],l=[];(function(){function t(t){for(var i=e.sqrt(t),n=2;n<=i;n++)if(!(t%n))return!1;return!0}function i(t){return 4294967296*(t-(0|t))|0}var n=2,r=0;while(r<64)t(n)&&(r<8&&(s[r]=i(e.pow(n,.5))),l[r]=i(e.pow(n,1/3)),r++),n++})();var c=[],u=o.SHA256=a.extend({_doReset:function(){this._hash=new r.init(s.slice(0))},_doProcessBlock:function(t,e){for(var i=this._hash.words,n=i[0],r=i[1],a=i[2],o=i[3],s=i[4],u=i[5],d=i[6],h=i[7],p=0;p<64;p++){if(p<16)c[p]=0|t[e+p];else{var f=c[p-15],v=(f<<25|f>>>7)^(f<<14|f>>>18)^f>>>3,g=c[p-2],m=(g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10;c[p]=v+c[p-7]+m+c[p-16]}var y=s&u^~s&d,b=n&r^n&a^r&a,x=(n<<30|n>>>2)^(n<<19|n>>>13)^(n<<10|n>>>22),_=(s<<26|s>>>6)^(s<<21|s>>>11)^(s<<7|s>>>25),w=h+_+y+l[p]+c[p],C=x+b;h=d,d=u,u=s,s=o+w|0,o=a,a=r,r=n,n=w+C|0}i[0]=i[0]+n|0,i[1]=i[1]+r|0,i[2]=i[2]+a|0,i[3]=i[3]+o|0,i[4]=i[4]+s|0,i[5]=i[5]+u|0,i[6]=i[6]+d|0,i[7]=i[7]+h|0},_doFinalize:function(){var t=this._data,i=t.words,n=8*this._nDataBytes,r=8*t.sigBytes;return i[r>>>5]|=128<<24-r%32,i[14+(r+64>>>9<<4)]=e.floor(n/4294967296),i[15+(r+64>>>9<<4)]=n,t.sigBytes=4*i.length,this._process(),this._hash},clone:function(){var t=a.clone.call(this);return t._hash=this._hash.clone(),t}});i.SHA256=a._createHelper(u),i.HmacSHA256=a._createHmacHelper(u)}(Math),t.SHA256})},45953:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(43240))})(0,function(t){return function(e){var i=t,n=i.lib,r=n.WordArray,a=n.Hasher,o=i.x64,s=o.Word,l=i.algo,c=[],u=[],d=[];(function(){for(var t=1,e=0,i=0;i<24;i++){c[t+5*e]=(i+1)*(i+2)/2%64;var n=e%5,r=(2*t+3*e)%5;t=n,e=r}for(t=0;t<5;t++)for(e=0;e<5;e++)u[t+5*e]=e+(2*t+3*e)%5*5;for(var a=1,o=0;o<24;o++){for(var l=0,h=0,p=0;p<7;p++){if(1&a){var f=(1<>>24)|4278255360&(a<<24|a>>>8),o=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8);var s=i[r];s.high^=o,s.low^=a}for(var l=0;l<24;l++){for(var p=0;p<5;p++){for(var f=0,v=0,g=0;g<5;g++){s=i[p+5*g];f^=s.high,v^=s.low}var m=h[p];m.high=f,m.low=v}for(p=0;p<5;p++){var y=h[(p+4)%5],b=h[(p+1)%5],x=b.high,_=b.low;for(f=y.high^(x<<1|_>>>31),v=y.low^(_<<1|x>>>31),g=0;g<5;g++){s=i[p+5*g];s.high^=f,s.low^=v}}for(var w=1;w<25;w++){s=i[w];var C=s.high,S=s.low,k=c[w];k<32?(f=C<>>32-k,v=S<>>32-k):(f=S<>>64-k,v=C<>>64-k);var A=h[u[w]];A.high=f,A.low=v}var T=h[0],M=i[0];T.high=M.high,T.low=M.low;for(p=0;p<5;p++)for(g=0;g<5;g++){w=p+5*g,s=i[w];var I=h[w],E=h[(p+1)%5+5*g],D=h[(p+2)%5+5*g];s.high=I.high^~E.high&D.high,s.low=I.low^~E.low&D.low}s=i[0];var P=d[l];s.high^=P.high,s.low^=P.low}},_doFinalize:function(){var t=this._data,i=t.words,n=(this._nDataBytes,8*t.sigBytes),a=32*this.blockSize;i[n>>>5]|=1<<24-n%32,i[(e.ceil((n+1)/a)*a>>>5)-1]|=128,t.sigBytes=4*i.length,this._process();for(var o=this._state,s=this.cfg.outputLength/8,l=s/8,c=[],u=0;u>>24)|4278255360&(h<<24|h>>>8),p=16711935&(p<<8|p>>>24)|4278255360&(p<<24|p>>>8),c.push(p),c.push(h)}return new r.init(c,s)},clone:function(){for(var t=a.clone.call(this),e=t._state=this._state.slice(0),i=0;i<25;i++)e[i]=e[i].clone();return t}});i.SHA3=a._createHelper(p),i.HmacSHA3=a._createHmacHelper(p)}(Math),t.SHA3})},89557:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(43240),i(81380))})(0,function(t){return function(){var e=t,i=e.x64,n=i.Word,r=i.WordArray,a=e.algo,o=a.SHA512,s=a.SHA384=o.extend({_doReset:function(){this._hash=new r.init([new n.init(3418070365,3238371032),new n.init(1654270250,914150663),new n.init(2438529370,812702999),new n.init(355462360,4144912697),new n.init(1731405415,4290775857),new n.init(2394180231,1750603025),new n.init(3675008525,1694076839),new n.init(1203062813,3204075428)])},_doFinalize:function(){var t=o._doFinalize.call(this);return t.sigBytes-=16,t}});e.SHA384=o._createHelper(s),e.HmacSHA384=o._createHmacHelper(s)}(),t.SHA384})},81380:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(43240))})(0,function(t){return function(){var e=t,i=e.lib,n=i.Hasher,r=e.x64,a=r.Word,o=r.WordArray,s=e.algo;function l(){return a.create.apply(a,arguments)}var c=[l(1116352408,3609767458),l(1899447441,602891725),l(3049323471,3964484399),l(3921009573,2173295548),l(961987163,4081628472),l(1508970993,3053834265),l(2453635748,2937671579),l(2870763221,3664609560),l(3624381080,2734883394),l(310598401,1164996542),l(607225278,1323610764),l(1426881987,3590304994),l(1925078388,4068182383),l(2162078206,991336113),l(2614888103,633803317),l(3248222580,3479774868),l(3835390401,2666613458),l(4022224774,944711139),l(264347078,2341262773),l(604807628,2007800933),l(770255983,1495990901),l(1249150122,1856431235),l(1555081692,3175218132),l(1996064986,2198950837),l(2554220882,3999719339),l(2821834349,766784016),l(2952996808,2566594879),l(3210313671,3203337956),l(3336571891,1034457026),l(3584528711,2466948901),l(113926993,3758326383),l(338241895,168717936),l(666307205,1188179964),l(773529912,1546045734),l(1294757372,1522805485),l(1396182291,2643833823),l(1695183700,2343527390),l(1986661051,1014477480),l(2177026350,1206759142),l(2456956037,344077627),l(2730485921,1290863460),l(2820302411,3158454273),l(3259730800,3505952657),l(3345764771,106217008),l(3516065817,3606008344),l(3600352804,1432725776),l(4094571909,1467031594),l(275423344,851169720),l(430227734,3100823752),l(506948616,1363258195),l(659060556,3750685593),l(883997877,3785050280),l(958139571,3318307427),l(1322822218,3812723403),l(1537002063,2003034995),l(1747873779,3602036899),l(1955562222,1575990012),l(2024104815,1125592928),l(2227730452,2716904306),l(2361852424,442776044),l(2428436474,593698344),l(2756734187,3733110249),l(3204031479,2999351573),l(3329325298,3815920427),l(3391569614,3928383900),l(3515267271,566280711),l(3940187606,3454069534),l(4118630271,4000239992),l(116418474,1914138554),l(174292421,2731055270),l(289380356,3203993006),l(460393269,320620315),l(685471733,587496836),l(852142971,1086792851),l(1017036298,365543100),l(1126000580,2618297676),l(1288033470,3409855158),l(1501505948,4234509866),l(1607167915,987167468),l(1816402316,1246189591)],u=[];(function(){for(var t=0;t<80;t++)u[t]=l()})();var d=s.SHA512=n.extend({_doReset:function(){this._hash=new o.init([new a.init(1779033703,4089235720),new a.init(3144134277,2227873595),new a.init(1013904242,4271175723),new a.init(2773480762,1595750129),new a.init(1359893119,2917565137),new a.init(2600822924,725511199),new a.init(528734635,4215389547),new a.init(1541459225,327033209)])},_doProcessBlock:function(t,e){for(var i=this._hash.words,n=i[0],r=i[1],a=i[2],o=i[3],s=i[4],l=i[5],d=i[6],h=i[7],p=n.high,f=n.low,v=r.high,g=r.low,m=a.high,y=a.low,b=o.high,x=o.low,_=s.high,w=s.low,C=l.high,S=l.low,k=d.high,A=d.low,T=h.high,M=h.low,I=p,E=f,D=v,P=g,L=m,R=y,F=b,B=x,N=_,O=w,z=C,W=S,V=k,$=A,H=T,K=M,Y=0;Y<80;Y++){var X,U,G=u[Y];if(Y<16)U=G.high=0|t[e+2*Y],X=G.low=0|t[e+2*Y+1];else{var j=u[Y-15],q=j.high,Z=j.low,J=(q>>>1|Z<<31)^(q>>>8|Z<<24)^q>>>7,Q=(Z>>>1|q<<31)^(Z>>>8|q<<24)^(Z>>>7|q<<25),tt=u[Y-2],et=tt.high,it=tt.low,nt=(et>>>19|it<<13)^(et<<3|it>>>29)^et>>>6,rt=(it>>>19|et<<13)^(it<<3|et>>>29)^(it>>>6|et<<26),at=u[Y-7],ot=at.high,st=at.low,lt=u[Y-16],ct=lt.high,ut=lt.low;X=Q+st,U=J+ot+(X>>>0>>0?1:0),X+=rt,U=U+nt+(X>>>0>>0?1:0),X+=ut,U=U+ct+(X>>>0>>0?1:0),G.high=U,G.low=X}var dt=N&z^~N&V,ht=O&W^~O&$,pt=I&D^I&L^D&L,ft=E&P^E&R^P&R,vt=(I>>>28|E<<4)^(I<<30|E>>>2)^(I<<25|E>>>7),gt=(E>>>28|I<<4)^(E<<30|I>>>2)^(E<<25|I>>>7),mt=(N>>>14|O<<18)^(N>>>18|O<<14)^(N<<23|O>>>9),yt=(O>>>14|N<<18)^(O>>>18|N<<14)^(O<<23|N>>>9),bt=c[Y],xt=bt.high,_t=bt.low,wt=K+yt,Ct=H+mt+(wt>>>0>>0?1:0),St=(wt=wt+ht,Ct=Ct+dt+(wt>>>0>>0?1:0),wt=wt+_t,Ct=Ct+xt+(wt>>>0<_t>>>0?1:0),wt=wt+X,Ct=Ct+U+(wt>>>0>>0?1:0),gt+ft),kt=vt+pt+(St>>>0>>0?1:0);H=V,K=$,V=z,$=W,z=N,W=O,O=B+wt|0,N=F+Ct+(O>>>0>>0?1:0)|0,F=L,B=R,L=D,R=P,D=I,P=E,E=wt+St|0,I=Ct+kt+(E>>>0>>0?1:0)|0}f=n.low=f+E,n.high=p+I+(f>>>0>>0?1:0),g=r.low=g+P,r.high=v+D+(g>>>0

>>0?1:0),y=a.low=y+R,a.high=m+L+(y>>>0>>0?1:0),x=o.low=x+B,o.high=b+F+(x>>>0>>0?1:0),w=s.low=w+O,s.high=_+N+(w>>>0>>0?1:0),S=l.low=S+W,l.high=C+z+(S>>>0>>0?1:0),A=d.low=A+$,d.high=k+V+(A>>>0<$>>>0?1:0),M=h.low=M+K,h.high=T+H+(M>>>0>>0?1:0)},_doFinalize:function(){var t=this._data,e=t.words,i=8*this._nDataBytes,n=8*t.sigBytes;e[n>>>5]|=128<<24-n%32,e[30+(n+128>>>10<<5)]=Math.floor(i/4294967296),e[31+(n+128>>>10<<5)]=i,t.sigBytes=4*e.length,this._process();var r=this._hash.toX32();return r},clone:function(){var t=n.clone.call(this);return t._hash=this._hash.clone(),t},blockSize:32});e.SHA512=n._createHelper(d),e.HmacSHA512=n._createHmacHelper(d)}(),t.SHA512})},7628:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=i.BlockCipher,a=e.algo,o=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],s=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],l=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],c=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],u=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],d=a.DES=r.extend({_doReset:function(){for(var t=this._key,e=t.words,i=[],n=0;n<56;n++){var r=o[n]-1;i[n]=e[r>>>5]>>>31-r%32&1}for(var a=this._subKeys=[],c=0;c<16;c++){var u=a[c]=[],d=l[c];for(n=0;n<24;n++)u[n/6|0]|=i[(s[n]-1+d)%28]<<31-n%6,u[4+(n/6|0)]|=i[28+(s[n+24]-1+d)%28]<<31-n%6;u[0]=u[0]<<1|u[0]>>>31;for(n=1;n<7;n++)u[n]=u[n]>>>4*(n-1)+3;u[7]=u[7]<<5|u[7]>>>27}var h=this._invSubKeys=[];for(n=0;n<16;n++)h[n]=a[15-n]},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._subKeys)},decryptBlock:function(t,e){this._doCryptBlock(t,e,this._invSubKeys)},_doCryptBlock:function(t,e,i){this._lBlock=t[e],this._rBlock=t[e+1],h.call(this,4,252645135),h.call(this,16,65535),p.call(this,2,858993459),p.call(this,8,16711935),h.call(this,1,1431655765);for(var n=0;n<16;n++){for(var r=i[n],a=this._lBlock,o=this._rBlock,s=0,l=0;l<8;l++)s|=c[l][((o^r[l])&u[l])>>>0];this._lBlock=o,this._rBlock=a^s}var d=this._lBlock;this._lBlock=this._rBlock,this._rBlock=d,h.call(this,1,1431655765),p.call(this,8,16711935),p.call(this,2,858993459),h.call(this,16,65535),h.call(this,4,252645135),t[e]=this._lBlock,t[e+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});function h(t,e){var i=(this._lBlock>>>t^this._rBlock)&e;this._rBlock^=i,this._lBlock^=i<>>t^this._lBlock)&e;this._lBlock^=i,this._rBlock^=i<192.");var i=e.slice(0,2),r=e.length<4?e.slice(0,2):e.slice(2,4),a=e.length<6?e.slice(0,2):e.slice(4,6);this._des1=d.createEncryptor(n.create(i)),this._des2=d.createEncryptor(n.create(r)),this._des3=d.createEncryptor(n.create(a))},encryptBlock:function(t,e){this._des1.encryptBlock(t,e),this._des2.decryptBlock(t,e),this._des3.encryptBlock(t,e)},decryptBlock:function(t,e){this._des3.decryptBlock(t,e),this._des2.encryptBlock(t,e),this._des1.decryptBlock(t,e)},keySize:6,ivSize:2,blockSize:2});e.TripleDES=r._createHelper(f)}(),t.TripleDES})},43240:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(e){var i=t,n=i.lib,r=n.Base,a=n.WordArray,o=i.x64={};o.Word=r.extend({init:function(t,e){this.high=t,this.low=e}}),o.WordArray=r.extend({init:function(t,i){t=this.words=t||[],this.sigBytes=i!=e?i:8*t.length},toX32:function(){for(var t=this.words,e=t.length,i=[],n=0;n=0?"positive":"negative"},[t._v(" "+t._s(t.summary.total_pnl>=0?"+":"")+t._s(t.formatNumber(t.summary.total_pnl))+" ")]),a("span",{staticClass:"label"},[t._v(t._s(t.$t("dashboard.label.totalPnl")))])])])]),a("div",{staticClass:"kpi-card kpi-win-rate"},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"trophy"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.winRate")||"胜率"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount"},[t._v(t._s(t.formatNumber(t.performance.win_rate,1)))]),a("span",{staticClass:"unit"},[t._v("%")])]),a("div",{staticClass:"kpi-sub"},[a("span",{staticClass:"positive"},[t._v(t._s(t.performance.winning_trades))]),a("span",{staticClass:"label"},[t._v(t._s(t.$t("dashboard.label.win")))]),a("span",{staticClass:"divider"},[t._v("/")]),a("span",{staticClass:"negative"},[t._v(t._s(t.performance.losing_trades))]),a("span",{staticClass:"label"},[t._v(t._s(t.$t("dashboard.label.lose")))])])]),a("div",{staticClass:"kpi-ring"},[a("svg",{attrs:{viewBox:"0 0 36 36"}},[a("path",{staticClass:"ring-bg",attrs:{d:"M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831"}}),a("path",{staticClass:"ring-progress",attrs:{"stroke-dasharray":"".concat(t.performance.win_rate||0,", 100"),d:"M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831"}})])])]),a("div",{staticClass:"kpi-card kpi-profit-factor"},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"rise"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.profitFactor")||"盈亏比"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount"},[t._v(t._s(t.formatNumber(t.performance.profit_factor,2)))]),a("span",{staticClass:"unit"},[t._v(":1")])]),a("div",{staticClass:"kpi-sub"},[a("span",[t._v(t._s(t.$t("dashboard.label.avgProfit"))+" ")]),a("span",{staticClass:"positive"},[t._v("$"+t._s(t.formatNumber(t.performance.avg_win)))])])])]),a("div",{staticClass:"kpi-card kpi-drawdown"},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"fall"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.maxDrawdown")||"最大回撤"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount negative"},[t._v(t._s(t.formatNumber(t.performance.max_drawdown_pct,1)))]),a("span",{staticClass:"unit"},[t._v("%")])]),a("div",{staticClass:"kpi-sub"},[a("span",[t._v("$"+t._s(t.formatNumber(t.performance.max_drawdown)))])])])]),a("div",{staticClass:"kpi-card kpi-trades"},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"swap"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.totalTrades")||"总交易"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount"},[t._v(t._s(t.performance.total_trades))]),a("span",{staticClass:"unit"},[t._v(t._s(t.$t("dashboard.unit.trades")))])]),a("div",{staticClass:"kpi-sub"},[a("span",[t._v(t._s(t.$t("dashboard.label.avgDaily"))+" ")]),a("span",[t._v(t._s(t.avgTradesPerDay))]),a("span",{staticClass:"label"},[t._v(" "+t._s(t.$t("dashboard.unit.trades")))])])])]),a("div",{staticClass:"kpi-card kpi-strategies clickable",on:{click:function(a){return t.$router.push("/trading-assistant")}}},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"thunderbolt",theme:"filled"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.runningStrategies")||"运行中策略"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount"},[t._v(t._s(t.summary.indicator_strategy_count))]),a("span",{staticClass:"unit"},[t._v(t._s(t.$t("dashboard.unit.strategies")))])]),a("div",{staticClass:"kpi-sub"},[a("span",{staticClass:"highlight"},[t._v(t._s(t.summary.indicator_strategy_count))]),a("span",{staticClass:"label"},[t._v(" "+t._s(t.$t("dashboard.label.indicator")))])])]),a("div",{staticClass:"card-arrow"},[a("a-icon",{attrs:{type:"right"}})],1)])]),a("div",{staticClass:"chart-row"},[a("div",{staticClass:"chart-panel chart-main"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"calendar"}}),a("span",[t._v(t._s(t.$t("dashboard.profitCalendar")||"收益日曆"))])],1),a("div",{staticClass:"calendar-nav"},[a("a-button",{attrs:{type:"link",size:"small",disabled:t.currentCalendarIndex>=t.calendarMonths.length-1},on:{click:t.prevMonth}},[a("a-icon",{attrs:{type:"left"}})],1),a("span",{staticClass:"current-month"},[t._v(t._s(t.currentMonthLabel))]),a("a-button",{attrs:{type:"link",size:"small",disabled:t.currentCalendarIndex<=0},on:{click:t.nextMonth}},[a("a-icon",{attrs:{type:"right"}})],1)],1)]),a("div",{staticClass:"profit-calendar"},[t.currentCalendarMonth?[a("div",{staticClass:"month-summary"},[a("div",{staticClass:"summary-item"},[a("span",{staticClass:"summary-label"},[t._v(t._s(t.$t("dashboard.ranking.totalProfit")))]),a("span",{staticClass:"summary-value",class:t.currentCalendarMonth.total>=0?"positive":"negative"},[t._v(" "+t._s(t.currentCalendarMonth.total>=0?"+":"")+"$"+t._s(t.formatNumber(t.currentCalendarMonth.total))+" ")])]),a("div",{staticClass:"summary-item"},[a("span",{staticClass:"summary-label"},[t._v(t._s(t.$t("dashboard.label.win")))]),a("span",{staticClass:"summary-value positive"},[t._v(t._s(t.currentCalendarMonth.win_days))])]),a("div",{staticClass:"summary-item"},[a("span",{staticClass:"summary-label"},[t._v(t._s(t.$t("dashboard.label.lose")))]),a("span",{staticClass:"summary-value negative"},[t._v(t._s(t.currentCalendarMonth.lose_days))])])]),a("div",{staticClass:"calendar-weekdays"},t._l(t.weekdays,function(e){return a("div",{key:e,staticClass:"weekday"},[t._v(t._s(e))])}),0),a("div",{staticClass:"calendar-grid"},[t._l(t.calendarFirstDayOffset,function(t){return a("div",{key:"empty-"+t,staticClass:"calendar-cell empty"})}),t._l(t.currentCalendarMonth.days_in_month,function(e){return a("div",{key:e,staticClass:"calendar-cell",class:t.getDayClass(e)},[a("span",{staticClass:"day-number"},[t._v(t._s(e))]),null!==t.getDayProfit(e)?a("span",{staticClass:"day-profit",class:t.getDayProfit(e)>=0?"positive":"negative"},[t._v(" "+t._s(t.getDayProfit(e)>=0?"+":"")+t._s(t.formatCompactNumber(t.getDayProfit(e)))+" ")]):t._e()])})],2)]:a("div",{staticClass:"calendar-empty"},[a("a-icon",{attrs:{type:"inbox"}}),a("span",[t._v(t._s(t.$t("dashboard.noData")))])],1)],2)]),a("div",{staticClass:"chart-panel chart-side"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"pie-chart"}}),a("span",[t._v(t._s(t.$t("dashboard.strategyAllocation")||"策略分布"))])],1)]),a("div",{ref:"pieChart",staticClass:"chart-body"})])]),a("div",{staticClass:"chart-row"},[a("div",{staticClass:"chart-panel chart-half"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"area-chart"}}),a("span",[t._v(t._s(t.$t("dashboard.drawdownCurve")||"回撤曲线"))])],1)]),a("div",{ref:"drawdownChart",staticClass:"chart-body chart-sm"})]),a("div",{staticClass:"chart-panel chart-half"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"clock-circle"}}),a("span",[t._v(t._s(t.$t("dashboard.hourlyDistribution")||"交易时段"))])],1)]),a("div",{ref:"hourlyChart",staticClass:"chart-body chart-sm"})])]),a("div",{staticClass:"chart-panel"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"ordered-list"}}),a("span",[t._v(t._s(t.$t("dashboard.strategyRanking")||"策略排行榜"))])],1)]),a("div",{staticClass:"strategy-ranking"},[0===t.strategyStats.length?a("div",{staticClass:"empty-state"},[a("a-icon",{attrs:{type:"inbox"}}),a("span",[t._v(t._s(t.$t("dashboard.noStrategyData")))])],1):a("div",{staticClass:"ranking-grid"},t._l(t.strategyStats.slice(0,6),function(e,s){return a("div",{key:e.strategy_id,staticClass:"ranking-card",class:{"rank-top":s<3}},[a("div",{staticClass:"rank-badge",class:"rank-".concat(s+1)},[t._v(t._s(s+1))]),a("div",{staticClass:"rank-info"},[a("div",{staticClass:"rank-name"},[t._v(t._s(e.strategy_name))]),a("div",{staticClass:"rank-stats"},[a("span",{staticClass:"stat"},[a("label",[t._v(t._s(t.$t("dashboard.ranking.totalProfit")))]),a("span",{class:e.total_pnl>=0?"positive":"negative"},[t._v(" "+t._s(e.total_pnl>=0?"+":"")+"$"+t._s(t.formatNumber(e.total_pnl))+" ")])]),a("span",{staticClass:"stat"},[a("label",[t._v(t._s(t.$t("dashboard.winRate")))]),a("span",[t._v(t._s(t.formatNumber(e.win_rate,1))+"%")])]),a("span",{staticClass:"stat"},[a("label",[t._v(t._s(t.$t("dashboard.profitFactor")))]),a("span",[t._v(t._s(t.formatNumber(e.profit_factor,2)))])]),a("span",{staticClass:"stat"},[a("label",[t._v(t._s(t.$t("dashboard.ranking.trades")))]),a("span",[t._v(t._s(e.total_trades))])])])]),a("div",{staticClass:"rank-pnl-bar"},[a("div",{staticClass:"bar-fill",class:e.total_pnl>=0?"positive":"negative",style:{width:"".concat(Math.min(100,Math.abs(e.total_pnl)/t.maxStrategyPnl*100),"%")}})])])}),0)])]),a("div",{staticClass:"table-row"},[a("div",{staticClass:"table-panel"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"stock"}}),a("span",[t._v(t._s(t.$t("dashboard.currentPositions")))])],1),a("div",{staticClass:"panel-badge"},[t._v(t._s((t.summary.current_positions||[]).length))])]),a("a-table",{staticClass:"pro-table",attrs:{columns:t.positionColumns,"data-source":t.summary.current_positions,rowKey:"id",pagination:!1,size:"small",scroll:{x:"max-content"}},scopedSlots:t._u([{key:"symbol",fn:function(e,s){return[a("div",{staticClass:"symbol-cell"},[a("span",{staticClass:"symbol-name"},[t._v(t._s(e))]),a("span",{staticClass:"symbol-strategy"},[t._v(t._s(s.strategy_name))])])]}},{key:"side",fn:function(e){return[a("span",{staticClass:"side-tag",class:"long"===e?"long":"short"},[t._v(" "+t._s("long"===e?"LONG":"SHORT")+" ")])]}},{key:"unrealized_pnl",fn:function(e,s){return[a("div",{staticClass:"pnl-cell"},[a("span",{class:e>=0?"positive":"negative"},[t._v(" "+t._s(e>=0?"+":"")+"$"+t._s(t.formatNumber(e))+" ")]),a("span",{staticClass:"pnl-percent",class:s.pnl_percent>=0?"positive":"negative"},[t._v(" "+t._s(s.pnl_percent>=0?"+":"")+t._s(t.formatNumber(s.pnl_percent))+"% ")])])]}}])})],1),a("div",{staticClass:"table-panel"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"history"}}),a("span",[t._v(t._s(t.$t("dashboard.recentTrades")))])],1)]),a("a-table",{staticClass:"pro-table",attrs:{columns:t.columns,"data-source":t.summary.recent_trades,rowKey:"id",pagination:{pageSize:8,size:"small"},size:"small",scroll:{x:"max-content"}},scopedSlots:t._u([{key:"type",fn:function(e){return[a("span",{staticClass:"type-tag",class:t.getTypeClass(e)},[t._v(" "+t._s(t.getSignalTypeText(e))+" ")])]}},{key:"profit",fn:function(e,s){return[a("span",{class:"--"!==t.formatProfitValue(e,s)?e>=0?"positive":"negative":""},[t._v(" "+t._s(t.formatProfitValue(e,s))+" ")])]}},{key:"time",fn:function(e){return[a("span",{staticClass:"time-cell"},[t._v(t._s(t.formatTime(e)))])]}}])})],1)]),a("div",{staticClass:"chart-panel orders-panel"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"unordered-list"}}),a("span",[t._v(t._s(t.$t("dashboard.pendingOrders")))]),a("a-tooltip",{attrs:{title:t.soundEnabled?t.$t("dashboard.clickToMute"):t.$t("dashboard.clickToUnmute")}},[a("a-icon",{staticClass:"sound-toggle",class:{"sound-off":!t.soundEnabled},attrs:{type:t.soundEnabled?"sound":"audio-muted"},on:{click:t.toggleSound}})],1)],1),a("div",{staticClass:"panel-badge"},[t._v(t._s(t.ordersPagination.total))])]),a("a-table",{staticClass:"pro-table",attrs:{columns:t.orderColumns,"data-source":t.pendingOrders,rowKey:"id",pagination:{current:t.ordersPagination.current,pageSize:t.ordersPagination.pageSize,total:t.ordersPagination.total,showSizeChanger:!0,size:"small",showTotal:function(a){return t.$t("dashboard.totalOrders",{total:a})}},size:"small",loading:t.ordersLoading,scroll:{x:1200}},on:{change:t.handleOrdersTableChange},scopedSlots:t._u([{key:"strategy_name",fn:function(e,s){return[a("div",{staticClass:"symbol-cell"},[a("span",{staticClass:"symbol-name"},[t._v(t._s(e||"-"))]),a("span",{staticClass:"symbol-strategy"},[t._v("ID: "+t._s(s.strategy_id))])])]}},{key:"symbol",fn:function(e){return[a("span",{staticClass:"symbol-tag"},[t._v(t._s(e))])]}},{key:"signal_type",fn:function(e){return[a("span",{staticClass:"type-tag",class:t.getTypeClass(e)},[t._v(" "+t._s(t.getSignalTypeText(e))+" ")])]}},{key:"exchange",fn:function(e,s){return[s&&(s.exchange_display||s.exchange_id||e)?a("span",{staticClass:"exchange-tag",class:(s.exchange_display||s.exchange_id||e).toLowerCase()},[t._v(" "+t._s(String(s.exchange_display||s.exchange_id||e).toUpperCase())+" ")]):a("span",{staticClass:"text-muted"},[t._v("-")]),s&&s.market_type?a("div",{staticClass:"market-type"},[t._v(" "+t._s(String(s.market_type).toUpperCase())+" ")]):t._e()]}},{key:"notify",fn:function(e,s){return[a("div",{staticClass:"notify-icons"},[t._l(s&&s.notify_channels?s.notify_channels:[],function(e){return a("a-tooltip",{key:"".concat(s.id,"-").concat(e),attrs:{title:String(e)}},[a("a-icon",{staticClass:"notify-icon",attrs:{type:t.getNotifyIconType(e)}})],1)}),s&&s.notify_channels&&0!==s.notify_channels.length?t._e():a("span",{staticClass:"text-muted"},[t._v("-")])],2)]}},{key:"status",fn:function(e,s){return[a("span",{staticClass:"status-tag",class:e},[t._v(" "+t._s(t.getStatusText(e))+" ")]),"failed"===e&&s.error_message?a("div",{staticClass:"error-hint"},[a("a-tooltip",{attrs:{title:s.error_message}},[a("a-icon",{attrs:{type:"exclamation-circle"}}),a("span",[t._v(t._s(t.$t("dashboard.viewError")))])],1)],1):t._e()]}},{key:"amount",fn:function(e,s){return[a("div",[t._v(t._s(t.formatNumber(e,8)))]),s.filled_amount?a("div",{staticClass:"sub-text"},[t._v(" "+t._s(t.$t("dashboard.filled"))+": "+t._s(t.formatNumber(s.filled_amount,8))+" ")]):t._e()]}},{key:"price",fn:function(e,s){return[s.filled_price?a("div",[t._v(t._s(t.formatNumber(s.filled_price)))]):a("div",{staticClass:"text-muted"},[t._v("-")])]}},{key:"time_info",fn:function(e,s){return[a("div",{staticClass:"time-cell"},[t._v(t._s(t.formatTime(s.created_at)))]),s.executed_at?a("div",{staticClass:"sub-text"},[t._v(" "+t._s(t.formatTime(s.executed_at))+" ")]):t._e()]}}])})],1)])},r=[],n=e(76959),i=e(17654),o=e(52074),l=e(9133),d=e(57888),c=(e(74423),e(15014)),u=e(76471),p={summary:"/api/dashboard/summary",pendingOrders:"/api/dashboard/pendingOrders"};function h(){return(0,u.Ay)({url:p.summary,method:"get"})}function f(t){return(0,u.Ay)({url:p.pendingOrders,method:"get",params:t})}var m=e(95353),g={name:"Dashboard",data:function(){return{summary:{ai_strategy_count:0,indicator_strategy_count:0,total_equity:0,total_pnl:0,total_realized_pnl:0,total_unrealized_pnl:0,performance:{},strategy_stats:[],daily_pnl_chart:[],strategy_pnl_chart:[],monthly_returns:[],hourly_distribution:[],calendar_months:[],recent_trades:[],current_positions:[]},currentCalendarIndex:0,pieChart:null,drawdownChart:null,hourlyChart:null,pendingOrders:[],ordersLoading:!1,ordersPagination:{current:1,pageSize:20,total:0},orderPollTimer:null,lastOrderId:0,orderPollIntervalMs:5e3,soundEnabled:!0,beepCtx:null}},computed:(0,d.A)((0,d.A)({},(0,m.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},performance:function(){return this.summary.performance||{}},strategyStats:function(){return this.summary.strategy_stats||[]},maxStrategyPnl:function(){var t=this.strategyStats;return t.length?Math.max.apply(Math,(0,l.A)(t.map(function(t){return Math.abs(t.total_pnl||0)})).concat([1])):1},avgTradesPerDay:function(){var t=this.summary.daily_pnl_chart||[],a=t.length||1,e=this.performance.total_trades||0;return(e/a).toFixed(1)},calendarMonths:function(){return this.summary.calendar_months||[]},currentCalendarMonth:function(){var t=this.calendarMonths;return t.length&&t[this.currentCalendarIndex]||null},currentMonthLabel:function(){var t=this.currentCalendarMonth;if(!t)return"-";var a=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];return"".concat(a[t.month-1]," ").concat(t.year)},weekdays:function(){return["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]},calendarFirstDayOffset:function(){var t=this.currentCalendarMonth;return t?t.first_weekday:0},orderStrategyFilters:function(){var t,a=Array.isArray(this.pendingOrders)?this.pendingOrders:[],e=new Map,s=(0,o.A)(a);try{for(s.s();!(t=s.n()).done;){var r=t.value,n=r&&r.strategy_id;if(void 0!==n&&null!==n&&!e.has(String(n))){var i=r&&r.strategy_name?String(r.strategy_name):"",l=i?"".concat(i," (ID: ").concat(n,")"):"ID: ".concat(n);e.set(String(n),{text:l,value:String(n)})}}}catch(d){s.e(d)}finally{s.f()}return Array.from(e.values()).sort(function(t,a){return String(t.text).localeCompare(String(a.text))})},columns:function(){var t=this;return[{title:this.$t("dashboard.table.time"),dataIndex:"created_at",scopedSlots:{customRender:"time"},width:150},{title:this.$t("dashboard.table.symbol"),dataIndex:"symbol",width:100},{title:this.$t("dashboard.table.type"),dataIndex:"type",scopedSlots:{customRender:"type"},width:90},{title:this.$t("dashboard.table.price"),dataIndex:"price",customRender:function(a){return t.formatNumber(a)},width:100},{title:this.$t("dashboard.table.profit"),dataIndex:"profit",scopedSlots:{customRender:"profit"},align:"right",width:100}]},positionColumns:function(){var t=this;return[{title:this.$t("dashboard.table.symbol"),dataIndex:"symbol",scopedSlots:{customRender:"symbol"}},{title:this.$t("dashboard.table.side"),dataIndex:"side",scopedSlots:{customRender:"side"}},{title:this.$t("dashboard.table.size"),dataIndex:"size",customRender:function(a){return t.formatNumber(a,4)}},{title:this.$t("dashboard.table.entryPrice"),dataIndex:"entry_price",customRender:function(a){return t.formatNumber(a)}},{title:this.$t("dashboard.table.pnl"),dataIndex:"unrealized_pnl",scopedSlots:{customRender:"unrealized_pnl"},align:"right"}]},orderColumns:function(){return[{title:this.$t("dashboard.orderTable.strategy"),dataIndex:"strategy_name",scopedSlots:{customRender:"strategy_name"},filters:this.orderStrategyFilters,filterMultiple:!0,onFilter:function(t,a){return String(a&&a.strategy_id)===String(t)},width:150},{title:this.$t("dashboard.orderTable.exchange"),dataIndex:"exchange_id",scopedSlots:{customRender:"exchange"},width:120},{title:this.$t("dashboard.orderTable.notify"),dataIndex:"notify_channels",scopedSlots:{customRender:"notify"},width:100},{title:this.$t("dashboard.orderTable.symbol"),dataIndex:"symbol",scopedSlots:{customRender:"symbol"},width:110},{title:this.$t("dashboard.orderTable.signalType"),dataIndex:"signal_type",scopedSlots:{customRender:"signal_type"},width:100},{title:this.$t("dashboard.orderTable.amount"),dataIndex:"amount",scopedSlots:{customRender:"amount"},width:130},{title:this.$t("dashboard.orderTable.price"),dataIndex:"filled_price",scopedSlots:{customRender:"price"},width:100},{title:this.$t("dashboard.orderTable.status"),dataIndex:"status",scopedSlots:{customRender:"status"},width:130},{title:this.$t("dashboard.orderTable.timeInfo"),dataIndex:"created_at",scopedSlots:{customRender:"time_info"},width:160}]}}),mounted:function(){this.fetchData(),this.fetchPendingOrders(),this.startOrderPolling(),window.addEventListener("resize",this.handleResize)},beforeDestroy:function(){this.stopOrderPolling(),window.removeEventListener("resize",this.handleResize),this.pieChart&&this.pieChart.dispose(),this.drawdownChart&&this.drawdownChart.dispose(),this.hourlyChart&&this.hourlyChart.dispose()},methods:{fetchData:function(){var t=this;return(0,i.A)((0,n.A)().m(function a(){var e;return(0,n.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,h();case 1:e=a.v,1===e.code&&(t.summary=(0,d.A)((0,d.A)({},t.summary),e.data),t.$nextTick(function(){t.initCharts()})),a.n=3;break;case 2:a.p=2,a.v;case 3:return a.a(2)}},a,null,[[0,2]])}))()},fetchPendingOrders:function(t,a){var e=this;return(0,i.A)((0,n.A)().m(function s(){var r,i,o,l;return(0,n.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return e.ordersLoading=!0,s.p=1,r=t||e.ordersPagination.current||1,i=a||e.ordersPagination.pageSize||20,s.n=2,f({page:r,pageSize:i});case 2:o=s.v,1===o.code&&(l=o.data||{},e.pendingOrders=l.list||[],e.ordersPagination.current=Number(l.page||r||1),e.ordersPagination.pageSize=Number(l.pageSize||i||20),e.ordersPagination.total=Number(l.total||0)),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.p=4,e.ordersLoading=!1,s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},playOrderBeep:function(){if(this.soundEnabled)try{var t=window.AudioContext||window.webkitAudioContext;if(!t)return;this.beepCtx||(this.beepCtx=new t);var a=this.beepCtx;"suspended"===a.state&&"function"===typeof a.resume&&a.resume().catch(function(){});var e=function(t,e){var s=a.createOscillator(),r=a.createGain();s.type="sine",s.frequency.value=e,r.gain.value=.08,s.connect(r),r.connect(a.destination),s.start(t),s.stop(t+.12)},s=a.currentTime;e(s,880),e(s+.18,1100)}catch(r){}},startOrderPolling:function(){var t=this;this.stopOrderPolling(),this.initLastOrderId(),this.orderPollTimer=setInterval(function(){t.pollNewOrders()},this.orderPollIntervalMs)},stopOrderPolling:function(){this.orderPollTimer&&(clearInterval(this.orderPollTimer),this.orderPollTimer=null)},initLastOrderId:function(){var t=this;return(0,i.A)((0,n.A)().m(function a(){var e;return(0,n.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,f({page:1,pageSize:1});case 1:e=a.v,1===e.code&&e.data&&e.data.list&&e.data.list.length>0&&(t.lastOrderId=e.data.list[0].id||0),a.n=3;break;case 2:a.p=2,a.v;case 3:return a.a(2)}},a,null,[[0,2]])}))()},pollNewOrders:function(){var t=this;return(0,i.A)((0,n.A)().m(function a(){var e,s,r,i,l,d,c,u;return(0,n.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,f({page:1,pageSize:10});case 1:if(e=a.v,1===e.code&&e.data&&e.data.list){a.n=2;break}return a.a(2);case 2:if(s=e.data.list||[],0!==s.length){a.n=3;break}return a.a(2);case 3:r=!1,i=t.lastOrderId,l=(0,o.A)(s);try{for(l.s();!(d=l.n()).done;)c=d.value,u=c.id||0,u>t.lastOrderId&&(r=!0,u>i&&(i=u))}catch(n){l.e(n)}finally{l.f()}r&&(t.lastOrderId=i,t.playOrderBeep(),t.fetchPendingOrders(),t.$notification.info({message:t.$t("dashboard.newOrderNotify"),description:t.$t("dashboard.newOrderDesc"),duration:4})),a.n=5;break;case 4:a.p=4,a.v;case 5:return a.a(2)}},a,null,[[0,4]])}))()},toggleSound:function(){this.soundEnabled=!this.soundEnabled,this.soundEnabled?this.$message.success(this.$t("dashboard.soundEnabled")):this.$message.info(this.$t("dashboard.soundDisabled"))},handleOrdersTableChange:function(t){var a=t&&t.current?t.current:1,e=t&&t.pageSize?t.pageSize:this.ordersPagination.pageSize||20;this.ordersPagination.current=a,this.ordersPagination.pageSize=e,this.fetchPendingOrders(a,e)},getTypeClass:function(t){if(!t)return"";var a=t.toLowerCase();return a.includes("open_long")||a.includes("add_long")?"long":a.includes("open_short")||a.includes("add_short")?"short":a.includes("close_long")?"close-long":a.includes("close_short")?"close-short":""},getSignalTypeColor:function(t){return t?(t=t.toLowerCase(),t.includes("open_long")||t.includes("add_long")?"green":t.includes("open_short")||t.includes("add_short")?"red":t.includes("close_long")?"orange":t.includes("close_short")?"purple":"blue"):"default"},getSignalTypeText:function(t){if(!t)return"-";var a={open_long:this.$t("dashboard.signalType.openLong"),open_short:this.$t("dashboard.signalType.openShort"),close_long:this.$t("dashboard.signalType.closeLong"),close_short:this.$t("dashboard.signalType.closeShort"),add_long:this.$t("dashboard.signalType.addLong"),add_short:this.$t("dashboard.signalType.addShort")};return a[t.toLowerCase()]||t.toUpperCase()},getStatusColor:function(t){var a={pending:"orange",processing:"blue",completed:"green",failed:"red",cancelled:"default"};return a[t]||"default"},getStatusText:function(t){if(!t)return"-";var a={pending:this.$t("dashboard.status.pending"),processing:this.$t("dashboard.status.processing"),completed:this.$t("dashboard.status.completed"),failed:this.$t("dashboard.status.failed"),cancelled:this.$t("dashboard.status.cancelled")};return a[t.toLowerCase()]||t.toUpperCase()},getNotifyIconType:function(t){var a=String(t||"").trim().toLowerCase(),e={browser:"bell",webhook:"link",discord:"comment",telegram:"message",tg:"message",tele:"message",email:"mail",phone:"phone"};return e[a]||"notification"},getExchangeTagColor:function(t){var a=String(t||"").trim().toLowerCase(),e={binance:"gold",okx:"purple",bitget:"cyan",signal:"geekblue"};return e[a]||"blue"},formatNumber:function(t){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return void 0===t||null===t?"0.00":Number(t).toLocaleString("en-US",{minimumFractionDigits:a,maximumFractionDigits:a})},formatProfitValue:function(t,a){if(null===t||void 0===t)return"--";var e=parseFloat(t),s=["open_long","open_short","add_long","add_short"];if(0===e&&a&&s.includes(a.type))return"--";if(Math.abs(e)<1e-6)return a&&s.includes(a.type)?"--":"$0.00";var r=e>=0?"+":"";return"".concat(r,"$").concat(this.formatNumber(e))},formatCompactNumber:function(t){if(void 0===t||null===t)return"0";var a=Math.abs(t);return a>=1e6?(t/1e6).toFixed(1)+"M":a>=1e3?(t/1e3).toFixed(1)+"k":a>=100?Math.round(t):t.toFixed(0)},prevMonth:function(){this.currentCalendarIndex0&&this.currentCalendarIndex--},getDayProfit:function(t){var a=this.currentCalendarMonth;if(!a||!a.days)return null;var e=String(t).padStart(2,"0");return void 0!==a.days[e]?a.days[e]:null},getDayClass:function(t){var a=this.getDayProfit(t);return null===a?"no-data":a>0?"profit":a<0?"loss":"zero"},formatTime:function(t){if(!t)return"-";try{var a;if("string"===typeof t&&t.includes("-")&&t.includes(":"))a=new Date(t);else{if(!("number"===typeof t||"string"===typeof t&&/^\d+$/.test(t)))return"-";var e="string"===typeof t?parseInt(t,10):t,s=e<1e12?1e3*e:e;a=new Date(s)}return isNaN(a.getTime())?"-":a.toLocaleString()}catch(r){return"-"}},initCharts:function(){this.initPieChart(),this.initDrawdownChart(),this.initHourlyChart()},initPieChart:function(){var t=this,a=this.$refs.pieChart;if(a){this.pieChart=c.Ts(a);var e=Array.isArray(this.summary.strategy_stats)?this.summary.strategy_stats:[],s=Array.isArray(this.summary.strategy_pnl_chart)?this.summary.strategy_pnl_chart:[],r=[];r=e.length>0?e.map(function(t){var a=t&&t.strategy_name?String(t.strategy_name):"-",e=Number(t&&t.total_pnl?t.total_pnl:0),s=Number(t&&t.total_trades?t.total_trades:0),r=0!==e?Math.abs(e):s;return{name:a,value:r,signedValue:e,trades:s}}).filter(function(t){return t.value>0}):s.map(function(t){var a=t&&t.name?String(t.name):"-",e=Number(t&&t.value?t.value:0);return{name:a,value:Math.abs(e),signedValue:e}}).filter(function(t){return t.value>0});var n=this.isDarkTheme,i=n?"#9ca3af":"#6b7280",o=[new c.fA.W4(0,0,1,1,[{offset:0,color:"#3b82f6"},{offset:1,color:"#1d4ed8"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#8b5cf6"},{offset:1,color:"#6d28d9"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#10b981"},{offset:1,color:"#059669"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#f59e0b"},{offset:1,color:"#d97706"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#ec4899"},{offset:1,color:"#be185d"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#06b6d4"},{offset:1,color:"#0891b2"}])],l={backgroundColor:"transparent",tooltip:{trigger:"item",backgroundColor:n?"rgba(17, 24, 39, 0.95)":"rgba(255, 255, 255, 0.95)",borderColor:n?"#374151":"#e5e7eb",textStyle:{color:n?"#f3f4f6":"#1f2937"},formatter:function(a){var e=a&&a.data&&"number"===typeof a.data.signedValue?a.data.signedValue:0,s=(e>=0?"+":"")+t.formatNumber(e,2),r=e>=0?"#10b981":"#ef4444";return'\n

\n
'.concat(a.name,'
\n
占比 ').concat(a.percent,'%
\n
PNL $').concat(s,"
\n
\n ")}},legend:{bottom:10,left:"center",itemWidth:12,itemHeight:12,itemGap:16,textStyle:{color:i,fontSize:11}},color:o,series:[{name:"策略分布",type:"pie",radius:["50%","75%"],center:["50%","45%"],avoidLabelOverlap:!1,itemStyle:{borderRadius:6,borderColor:n?"#1f2937":"#ffffff",borderWidth:3},label:{show:!1},emphasis:{label:{show:!0,fontSize:14,fontWeight:"bold",color:n?"#f3f4f6":"#1f2937"},scaleSize:8},labelLine:{show:!1},data:r.length>0?r:[{value:1,name:this.$t("dashboard.noData"),signedValue:0}]}]};this.pieChart.setOption(l)}},initDrawdownChart:function(){var t=this,a=this.$refs.drawdownChart;if(a){this.drawdownChart=c.Ts(a);var e,s=(this.summary.daily_pnl_chart||[]).map(function(t){return t.date}),r=(this.summary.daily_pnl_chart||[]).map(function(t){return Number(t.profit||0)}),n=[],i=0,l=(0,o.A)(r);try{for(l.s();!(e=l.n()).done;){var d=e.value;i+=Number(d||0),n.push(i)}}catch(y){l.e(y)}finally{l.f()}var u=-1/0,p=0,h=0,f=n.map(function(t,a){u=Math.max(u,t);var e=Number((t-u).toFixed(2));return e\n
').concat(s,'
\n
\n \n \n ').concat(t.$t("dashboard.drawdown")||"Drawdown",'\n \n -$').concat(n,'\n
\n
\n
\n
\n \n ')}},grid:{left:55,right:20,bottom:35,top:20,containLabel:!1},xAxis:{type:"category",data:s,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:g,fontSize:10,formatter:function(t){return t.slice(5)}}},yAxis:{type:"value",axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:g,fontSize:10,formatter:function(t){return Math.abs(t)>=1e3?"-$"+(Math.abs(t)/1e3).toFixed(1)+"k":0===t?"0":"-$"+Math.abs(t)}},splitLine:{lineStyle:{color:v,type:[4,4]}},max:0},series:[{name:this.$t("dashboard.drawdown")||"Drawdown",type:"line",data:f,smooth:.3,showSymbol:!1,lineStyle:{width:2.5,color:new c.fA.W4(0,0,1,0,[{offset:0,color:"#ef4444"},{offset:.5,color:"#f87171"},{offset:1,color:"#fca5a5"}]),shadowColor:"rgba(239, 68, 68, 0.4)",shadowBlur:8,shadowOffsetY:4},areaStyle:{color:new c.fA.W4(0,0,0,1,[{offset:0,color:m?"rgba(239, 68, 68, 0.4)":"rgba(239, 68, 68, 0.25)"},{offset:.5,color:m?"rgba(248, 113, 113, 0.15)":"rgba(248, 113, 113, 0.1)"},{offset:1,color:"transparent"}])},markPoint:p<0?{symbol:"pin",symbolSize:45,itemStyle:{color:new c.fA.W4(0,0,0,1,[{offset:0,color:"#f87171"},{offset:1,color:"#dc2626"}]),shadowColor:"rgba(239, 68, 68, 0.5)",shadowBlur:10},label:{show:!0,color:"#fff",fontSize:10,fontWeight:"bold",formatter:function(){return t.$t("dashboard.label.maxDrawdownPoint")||"MAX"}},data:[{name:this.$t("dashboard.maxDrawdown")||"Max Drawdown",coord:[h,p]}]}:void 0,markLine:{silent:!0,symbol:"none",lineStyle:{color:m?"#52525b":"#a1a1aa",type:"dashed",width:1},data:[{yAxis:0}],label:{show:!1}}}]};this.drawdownChart.setOption(b)}},initHourlyChart:function(){var t=this,a=this.$refs.hourlyChart;if(a){this.hourlyChart=c.Ts(a);var e=this.summary.hourly_distribution||[],s=e.map(function(t){return"".concat(String(t.hour).padStart(2,"0"),":00")}),r=e.map(function(t){return t.count||0}),n=e.map(function(t){return t.profit||0}),i=this.isDarkTheme,l=i?"#9ca3af":"#6b7280",d=i?"rgba(75, 85, 99, 0.3)":"rgba(229, 231, 235, 0.8)",u={backgroundColor:"transparent",tooltip:{trigger:"axis",backgroundColor:i?"rgba(17, 24, 39, 0.95)":"rgba(255, 255, 255, 0.95)",borderColor:i?"#374151":"#e5e7eb",textStyle:{color:i?"#f3f4f6":"#1f2937"},formatter:function(a){var e,s=Array.isArray(a)?a:[],r=s[0]&&s[0].axisValue?s[0].axisValue:"",n=0,d=0,c=t.$t("dashboard.tradeCount")||"Trade Count",u=t.$t("dashboard.profit")||"Profit",p=t.$t("dashboard.unit.trades")||"",h=(0,o.A)(s);try{for(h.s();!(e=h.n()).done;){var f=e.value;f.seriesName===c&&(n=f.data||0),f.seriesName===u&&(d=f.data||0)}}catch(v){h.e(v)}finally{h.f()}var m=d>=0?"#10b981":"#ef4444",g=(d>=0?"+":"")+t.formatNumber(d,2);return'\n
\n
'.concat(r,'
\n
').concat(c,' ').concat(n," ").concat(p,'
\n
').concat(u,' $').concat(g,"
\n
\n ")}},grid:{left:50,right:20,bottom:30,top:10,containLabel:!1},xAxis:{type:"category",data:s,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:l,fontSize:10,interval:3}},yAxis:{type:"value",axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:l,fontSize:10},splitLine:{lineStyle:{color:d,type:"dashed"}}},series:[{name:this.$t("dashboard.tradeCount")||"Trade Count",type:"bar",data:r,barMaxWidth:16,itemStyle:{borderRadius:[3,3,0,0],color:new c.fA.W4(0,0,0,1,[{offset:0,color:"#60a5fa"},{offset:1,color:"#3b82f6"}])}},{name:this.$t("dashboard.profit")||"Profit",type:"line",data:n,smooth:!0,showSymbol:!1,lineStyle:{width:2,color:"#a855f7"}}]};this.hourlyChart.setOption(u)}},handleResize:function(){this.pieChart&&this.pieChart.resize(),this.drawdownChart&&this.drawdownChart.resize(),this.hourlyChart&&this.hourlyChart.resize()}}},v=g,b=e(845),y=(0,b.A)(v,s,r,!1,null,"16dc1b35",null),_=y.exports}}]); \ No newline at end of file diff --git a/frontend/dist/js/471.83ed35af.js b/frontend/dist/js/471.83ed35af.js deleted file mode 100644 index 0a41ea2..0000000 --- a/frontend/dist/js/471.83ed35af.js +++ /dev/null @@ -1,18 +0,0 @@ -(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[471],{53004:function(t,e,i){"use strict";i.r(e),i.d(e,{default:function(){return ua}});var n=function(){var t=this,e=t._self._c;return e("div",{staticClass:"chart-container",class:{"theme-dark":t.isDarkTheme}},[e("div",{staticClass:"chart-header"},[e("div",{staticClass:"header-top"},[e("div",{staticClass:"header-left"},[e("div",{staticClass:"search-section"},[e("a-select",{staticClass:"symbol-select",attrs:{"show-search":"",placeholder:t.$t("dashboard.indicator.selectSymbol"),dropdownClassName:"dark-dropdown","filter-option":t.filterSymbolOption,"not-found-content":null,open:t.symbolSearchOpen},on:{search:t.handleSymbolSearch,change:t.handleSymbolSelect,dropdownVisibleChange:t.handleDropdownVisibleChange},model:{value:t.searchSymbol,callback:function(e){t.searchSymbol=e},expression:"searchSymbol"}},[e("a-icon",{staticStyle:{color:"#999"},attrs:{slot:"suffixIcon",type:"search"},slot:"suffixIcon"}),t._l(t.symbolSuggestions,function(i){return e("a-select-option",{key:i.value,attrs:{value:i.value}},[e("div",{staticClass:"symbol-option"},[e("a-tag",{staticStyle:{"margin-right":"8px","margin-bottom":"0"},attrs:{color:t.getMarketColor(i.market)}},[t._v(" "+t._s(t.getMarketName(i.market))+" ")]),e("span",{staticClass:"symbol-name"},[t._v(t._s(i.symbol))]),i.name?e("span",{staticClass:"symbol-name-extra"},[t._v(t._s(i.name))]):t._e()],1)])}),e("a-select-option",{key:"add-stock-option",staticClass:"add-stock-option",attrs:{value:"__add_stock_option__"}},[e("div",{staticStyle:{width:"100%","text-align":"center",padding:"4px 0",color:"#1890ff",cursor:"pointer"}},[e("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"plus"}}),e("span",[t._v(t._s(t.$t("dashboard.analysis.watchlist.add")))])],1)])],2)],1),e("div",{staticClass:"timeframe-group"},t._l(["1m","5m","15m","30m","1H","4H","1D","1W"],function(i){return e("div",{key:i,staticClass:"timeframe-item",class:{active:t.timeframe===i},on:{click:function(e){return t.setTimeframe(i)}}},[t._v(" "+t._s(i)+" ")])}),0)]),t.currentSymbol?e("div",{staticClass:"current-symbol"},[e("div",{staticClass:"symbol-info"},[e("span",{staticClass:"symbol-label"},[t._v(t._s(t.currentSymbol))]),e("span",{staticClass:"market-tag"},[t._v(t._s(t.currentMarket))])]),e("div",{staticClass:"price-info",class:t.priceChangeClass},[e("span",{staticClass:"symbol-price"},[t._v(t._s(t.currentPrice))]),e("span",{staticClass:"symbol-change"},[t._v(" "+t._s(t.priceChange>0?"+":"")+t._s(t.priceChange.toFixed(2))+"% ")])]),t.isCryptoMarket?e("a-button",{staticClass:"qt-header-btn",attrs:{size:"small"},on:{click:t.openQuickTrade}},[e("a-icon",{attrs:{type:"thunderbolt",theme:"filled"}}),t._v(" "+t._s(t.$t("quickTrade.openPanel"))+" ")],1):t._e()],1):t._e()])]),e("div",{staticClass:"chart-content"},[e("div",{staticClass:"chart-main-row"},[t.currentSymbol?e("div",{staticClass:"mobile-symbol-price"},[e("div",{staticClass:"mobile-symbol-info"},[e("span",{staticClass:"mobile-market-tag"},[t._v(t._s(t.currentMarket))]),e("span",[t._v("-")]),e("span",{staticClass:"mobile-symbol-label"},[t._v(t._s(t.currentSymbol))])]),e("div",{staticClass:"mobile-price-info",class:t.priceChangeClass},[e("span",{staticClass:"mobile-symbol-price"},[t._v(t._s(t.currentPrice))]),e("span",{staticClass:"mobile-symbol-change"},[t._v(" "+t._s(t.priceChange>0?"+":"")+t._s(t.priceChange.toFixed(2))+"% ")])])]):t._e(),e("kline-chart",{ref:"klineChart",attrs:{symbol:t.currentSymbol,market:t.currentMarket,timeframe:t.timeframe,theme:t.chartTheme,activeIndicators:t.activeIndicators,realtimeEnabled:t.realtimeEnabled},on:{"price-change":t.handlePriceChange,retry:t.handleChartRetry,"indicator-toggle":t.handleIndicatorToggle}}),e("div",{staticClass:"chart-right"},[e("div",{staticClass:"indicators-panel"},[e("div",{staticClass:"panel-header"},[e("span",[t._v(t._s(t.$t("dashboard.indicator.panel.title")))]),e("div",{staticStyle:{display:"flex","align-items":"center","margin-left":"auto",gap:"8px"}},[t.isMobile?e("a-button",{staticClass:"mobile-header-create-btn",attrs:{type:"primary",size:"small",icon:"plus"},on:{click:t.handleCreateIndicator}},[t._v(" "+t._s(t.$t("dashboard.indicator.create"))+" ")]):t._e(),e("a-tooltip",{attrs:{title:t.realtimeEnabled?t.$t("dashboard.indicator.panel.realtimeOn"):t.$t("dashboard.indicator.panel.realtimeOff")}},[e("a-button",{staticClass:"realtime-toggle-btn",class:{active:t.realtimeEnabled},attrs:{type:"text"},on:{click:t.toggleRealtime}},[e("a-icon",{attrs:{type:t.realtimeEnabled?"sync":"pause-circle",spin:t.realtimeEnabled}})],1)],1)],1)]),e("div",{staticClass:"panel-body"},[t.isMobile?[e("div",{staticClass:"mobile-tab-content"},[e("div",{staticClass:"section-content custom-scrollbar"},[t._l(t.customIndicators,function(i){return e("div",{key:"custom-"+i.id,class:["indicator-card",{"indicator-active":t.isIndicatorActive("custom-"+i.id)}],on:{click:function(e){return t.toggleIndicator(i,"custom")}}},[e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-header"},[e("span",{staticClass:"card-name"},[t._v(t._s(i.name))]),e("div",{staticClass:"card-actions"},[e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.action.edit")}},[e("a-icon",{staticClass:"action-icon edit-icon",attrs:{type:"edit"},on:{click:function(e){return e.stopPropagation(),t.handleEditIndicator(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.action.delete")}},[e("a-icon",{staticClass:"action-icon delete-icon",attrs:{type:"delete"},on:{click:function(e){return e.stopPropagation(),t.handleDeleteIndicator(i)}}})],1),e("a-tooltip",{attrs:{title:t.isIndicatorActive("custom-"+i.id)?t.$t("dashboard.indicator.action.stop"):t.$t("dashboard.indicator.action.start")}},[e("a-icon",{class:["action-icon","toggle-icon",{active:t.isIndicatorActive("custom-"+i.id)}],attrs:{type:t.isIndicatorActive("custom-"+i.id)?"pause-circle":"play-circle"},on:{click:function(e){return e.stopPropagation(),t.toggleIndicator(i,"custom")}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.title")}},[e("a-icon",{staticClass:"action-icon backtest-icon",attrs:{type:"experiment"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktest(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.historyTitle")}},[e("a-icon",{staticClass:"action-icon backtest-history-icon",attrs:{type:"clock-circle"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktestHistory(i)}}})],1),e("a-tooltip",{attrs:{title:i.publish_to_community?t.$t("dashboard.indicator.action.unpublish"):t.$t("dashboard.indicator.action.publish")}},[e("a-icon",{class:["action-icon","publish-icon",{published:i.publish_to_community}],attrs:{type:i.publish_to_community?"cloud":"cloud-upload"},on:{click:function(e){return e.stopPropagation(),t.handlePublishIndicator(i)}}})],1)],1)]),e("span",{staticClass:"card-desc"},[t._v(t._s(i.description||""))])])])}),0===t.customIndicators.length?e("div",{staticClass:"empty-indicators"},[e("a-icon",{attrs:{type:"info-circle"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.empty")))])],1):t._e()],2)])]:[e("div",{staticClass:"indicator-section",class:{"section-empty":0===t.customIndicators.length}},[e("div",{staticClass:"section-label"},[e("div",{staticClass:"section-label-left",on:{click:t.toggleCustomSection}},[e("a-icon",{staticClass:"collapse-icon",attrs:{type:t.customSectionCollapsed?"right":"down"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.section.myCreated"))+" ("+t._s(t.customIndicators.length)+")")])],1),e("a-button",{staticClass:"create-indicator-btn",attrs:{type:"primary",size:"small",icon:"plus"},on:{click:function(e){return e.stopPropagation(),t.handleCreateIndicator.apply(null,arguments)}}},[t._v(" "+t._s(t.$t("dashboard.indicator.create"))+" ")])],1),e("div",{directives:[{name:"show",rawName:"v-show",value:!t.customSectionCollapsed,expression:"!customSectionCollapsed"}],staticClass:"section-content custom-scrollbar"},[t._l(t.customIndicators,function(i){return e("div",{key:"custom-"+i.id,class:["indicator-card",{"indicator-active":t.isIndicatorActive("custom-"+i.id)}],on:{click:function(e){return t.toggleIndicator(i,"custom")}}},[e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-header"},[e("span",{staticClass:"card-name"},[t._v(t._s(i.name))]),e("div",{staticClass:"card-actions"},[e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.action.edit")}},[e("a-icon",{staticClass:"action-icon edit-icon",attrs:{type:"edit"},on:{click:function(e){return e.stopPropagation(),t.handleEditIndicator(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.action.delete")}},[e("a-icon",{staticClass:"action-icon delete-icon",attrs:{type:"delete"},on:{click:function(e){return e.stopPropagation(),t.handleDeleteIndicator(i)}}})],1),e("a-tooltip",{attrs:{title:t.isIndicatorActive("custom-"+i.id)?t.$t("dashboard.indicator.action.stop"):t.$t("dashboard.indicator.action.start")}},[e("a-icon",{class:["action-icon","toggle-icon",{active:t.isIndicatorActive("custom-"+i.id)}],attrs:{type:t.isIndicatorActive("custom-"+i.id)?"pause-circle":"play-circle"},on:{click:function(e){return e.stopPropagation(),t.toggleIndicator(i,"custom")}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.title")}},[e("a-icon",{staticClass:"action-icon backtest-icon",attrs:{type:"experiment"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktest(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.historyTitle")}},[e("a-icon",{staticClass:"action-icon backtest-history-icon",attrs:{type:"clock-circle"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktestHistory(i)}}})],1),e("a-tooltip",{attrs:{title:i.publish_to_community?t.$t("dashboard.indicator.action.unpublish"):t.$t("dashboard.indicator.action.publish")}},[e("a-icon",{class:["action-icon","publish-icon",{published:i.publish_to_community}],attrs:{type:i.publish_to_community?"cloud":"cloud-upload"},on:{click:function(e){return e.stopPropagation(),t.handlePublishIndicator(i)}}})],1)],1)]),e("span",{staticClass:"card-desc"},[t._v(t._s(i.description||""))])])])}),0===t.customIndicators.length?e("div",{staticClass:"empty-indicators"},[e("a-icon",{attrs:{type:"info-circle"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.empty")))])],1):t._e()],2)]),e("div",{staticClass:"indicator-section",class:{"section-empty":0===t.purchasedIndicators.length}},[e("div",{staticClass:"section-label"},[e("div",{staticClass:"section-label-left",on:{click:function(e){t.purchasedSectionCollapsed=!t.purchasedSectionCollapsed}}},[e("a-icon",{staticClass:"collapse-icon",attrs:{type:t.purchasedSectionCollapsed?"right":"down"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.section.purchased"))+" ("+t._s(t.purchasedIndicators.length)+")")])],1),e("a-button",{staticClass:"buy-indicator-btn",attrs:{type:"link",size:"small",icon:"shop"},on:{click:function(e){return e.stopPropagation(),t.goToIndicatorMarket.apply(null,arguments)}}},[t._v(" "+t._s(t.$t("menu.dashboard.community"))+" ")])],1),e("div",{directives:[{name:"show",rawName:"v-show",value:!t.purchasedSectionCollapsed,expression:"!purchasedSectionCollapsed"}],staticClass:"section-content custom-scrollbar"},[t._l(t.purchasedIndicators,function(i){return e("div",{key:"purchased-"+i.id,class:["indicator-card","purchased-indicator",{"indicator-active":t.isIndicatorActive("purchased-"+i.id)}],on:{click:function(e){return t.toggleIndicator(i,"purchased")}}},[e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-header"},[e("span",{staticClass:"card-name"},[e("a-icon",{staticClass:"purchased-icon",attrs:{type:"shopping"}}),t._v(" "+t._s(i.name)+" ")],1),e("div",{staticClass:"card-actions"},[e("a-tooltip",{attrs:{title:t.isIndicatorActive("purchased-"+i.id)?t.$t("dashboard.indicator.action.stop"):t.$t("dashboard.indicator.action.start")}},[e("a-icon",{class:["action-icon","toggle-icon",{active:t.isIndicatorActive("purchased-"+i.id)}],attrs:{type:t.isIndicatorActive("purchased-"+i.id)?"pause-circle":"play-circle"},on:{click:function(e){return e.stopPropagation(),t.toggleIndicator(i,"purchased")}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.title")}},[e("a-icon",{staticClass:"action-icon backtest-icon",attrs:{type:"experiment"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktest(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.historyTitle")}},[e("a-icon",{staticClass:"action-icon backtest-history-icon",attrs:{type:"clock-circle"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktestHistory(i)}}})],1)],1)]),e("span",{staticClass:"card-desc"},[t._v(t._s(i.description||""))])])])}),0===t.purchasedIndicators.length?e("div",{staticClass:"empty-indicators"},[e("a-icon",{attrs:{type:"shopping"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.emptyPurchased")))])],1):t._e()],2)])]],2)])])],1),e("indicator-editor",{ref:"indicatorEditor",attrs:{visible:t.showIndicatorEditor,indicator:t.editingIndicator,userId:t.userId},on:{run:t.handleRunIndicator,save:t.handleSaveIndicator,cancel:function(e){t.showIndicatorEditor=!1,t.editingIndicator=null}}}),e("backtest-modal",{attrs:{visible:t.showBacktestModal,userId:t.userId,indicator:t.backtestIndicator,symbol:t.selectedSymbol,market:t.selectedMarket,timeframe:t.selectedTimeframe},on:{cancel:function(e){t.showBacktestModal=!1,t.backtestIndicator=null}}}),e("a-modal",{attrs:{visible:t.showParamsModal,title:t.$t("dashboard.indicator.paramsConfig.title"),confirmLoading:t.loadingParams,width:500,maskClosable:!1,keyboard:!1},on:{ok:t.confirmIndicatorParams,cancel:t.cancelIndicatorParams,afterClose:t.handleParamsModalAfterClose}},[t.pendingIndicator?e("div",{staticClass:"params-config-modal"},[e("div",{staticClass:"indicator-info"},[e("span",{staticClass:"indicator-name"},[t._v(t._s(t.pendingIndicator.name))])]),e("a-divider"),t.indicatorParams.length>0?e("div",{staticClass:"params-form"},t._l(t.indicatorParams,function(i){return e("div",{key:i.name,staticClass:"param-item"},[e("div",{staticClass:"param-header"},[e("label",{staticClass:"param-label"},[t._v(t._s(i.name))]),i.description?e("a-tooltip",{attrs:{title:i.description}},[e("a-icon",{staticStyle:{color:"#999","margin-left":"4px"},attrs:{type:"question-circle"}})],1):t._e()],1),"int"===i.type?e("a-input-number",{staticStyle:{width:"100%"},attrs:{precision:0},model:{value:t.indicatorParamValues[i.name],callback:function(e){t.$set(t.indicatorParamValues,i.name,e)},expression:"indicatorParamValues[param.name]"}}):"float"===i.type?e("a-input-number",{staticStyle:{width:"100%"},attrs:{precision:4},model:{value:t.indicatorParamValues[i.name],callback:function(e){t.$set(t.indicatorParamValues,i.name,e)},expression:"indicatorParamValues[param.name]"}}):"bool"===i.type?e("a-switch",{model:{value:t.indicatorParamValues[i.name],callback:function(e){t.$set(t.indicatorParamValues,i.name,e)},expression:"indicatorParamValues[param.name]"}}):e("a-input",{model:{value:t.indicatorParamValues[i.name],callback:function(e){t.$set(t.indicatorParamValues,i.name,e)},expression:"indicatorParamValues[param.name]"}})],1)}),0):e("a-empty",{attrs:{description:t.$t("dashboard.indicator.paramsConfig.noParams")}})],1):t._e()]),e("backtest-history-drawer",{attrs:{visible:t.showBacktestHistoryDrawer,userId:t.userId,indicatorId:t.backtestHistoryIndicator?t.backtestHistoryIndicator.id:null,symbol:t.selectedSymbol,market:t.selectedMarket,timeframe:t.selectedTimeframe,isMobile:t.isMobile},on:{cancel:function(e){t.showBacktestHistoryDrawer=!1,t.backtestHistoryIndicator=null},view:t.handleViewBacktestRun}}),e("backtest-run-viewer",{attrs:{visible:t.showBacktestRunViewer,run:t.selectedBacktestRun},on:{cancel:function(e){t.showBacktestRunViewer=!1,t.selectedBacktestRun=null}}}),e("a-modal",{attrs:{title:t.publishIndicator&&t.publishIndicator.publish_to_community?t.$t("dashboard.indicator.publish.editTitle"):t.$t("dashboard.indicator.publish.title"),visible:t.showPublishModal,confirmLoading:t.publishing,width:"500px",okText:t.publishIndicator&&t.publishIndicator.publish_to_community?t.$t("dashboard.indicator.publish.update"):t.$t("dashboard.indicator.publish.confirm"),cancelText:t.$t("common.cancel")},on:{ok:t.handleConfirmPublish,cancel:function(e){t.showPublishModal=!1,t.publishIndicator=null}}},[e("a-form-model",{ref:"publishForm",attrs:{model:t.publishForm,rules:t.publishRules,layout:"vertical"}},[e("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"info","show-icon":"",message:t.$t("dashboard.indicator.publish.hint")}}),e("a-form-model-item",{attrs:{label:t.$t("dashboard.indicator.publish.pricingType"),prop:"pricingType"}},[e("a-radio-group",{model:{value:t.publishPricingType,callback:function(e){t.publishPricingType=e},expression:"publishPricingType"}},[e("a-radio",{attrs:{value:"free"}},[t._v(t._s(t.$t("dashboard.indicator.publish.free")))]),e("a-radio",{attrs:{value:"paid"}},[t._v(t._s(t.$t("dashboard.indicator.publish.paid")))])],1)],1),"paid"===t.publishPricingType?e("a-form-model-item",{attrs:{label:t.$t("dashboard.indicator.publish.price"),prop:"price"}},[e("a-input-number",{staticStyle:{width:"200px"},attrs:{min:1,max:1e4,precision:0},model:{value:t.publishPrice,callback:function(e){t.publishPrice=e},expression:"publishPrice"}}),e("span",{staticStyle:{"margin-left":"8px"}},[t._v(t._s(t.$t("community.credits")))])],1):t._e(),"paid"===t.publishPricingType?e("a-form-model-item",{attrs:{label:t.$t("dashboard.indicator.publish.vipFree")}},[e("a-switch",{model:{value:t.publishVipFree,callback:function(e){t.publishVipFree=e},expression:"publishVipFree"}}),e("div",{staticStyle:{"margin-top":"6px",color:"rgba(0,0,0,0.45)","font-size":"12px"}},[t._v(" "+t._s(t.$t("dashboard.indicator.publish.vipFreeHint"))+" ")])],1):t._e(),e("a-form-model-item",{attrs:{label:t.$t("dashboard.indicator.publish.description"),prop:"description"}},[e("a-textarea",{attrs:{placeholder:t.$t("dashboard.indicator.publish.descriptionPlaceholder"),rows:4,maxLength:500},model:{value:t.publishDescription,callback:function(e){t.publishDescription=e},expression:"publishDescription"}})],1),t.publishIndicator&&t.publishIndicator.publish_to_community?e("div",{staticStyle:{"margin-top":"16px"}},[e("a-button",{attrs:{type:"danger",ghost:"",loading:t.unpublishing},on:{click:t.handleUnpublish}},[e("a-icon",{attrs:{type:"close-circle"}}),t._v(" "+t._s(t.$t("dashboard.indicator.publish.unpublish"))+" ")],1)],1):t._e()],1)],1),e("a-modal",{attrs:{title:t.$t("dashboard.analysis.modal.addStock.title"),visible:t.showAddStockModal,confirmLoading:t.addingStock,width:"600px",okText:t.$t("dashboard.analysis.modal.addStock.confirm"),cancelText:t.$t("dashboard.analysis.modal.addStock.cancel")},on:{ok:t.handleAddStock,cancel:t.handleCloseAddStockModal}},[e("div",{staticClass:"add-stock-modal-content"},[e("a-tabs",{staticClass:"market-tabs",on:{change:t.handleMarketTabChange},model:{value:t.selectedMarketTab,callback:function(e){t.selectedMarketTab=e},expression:"selectedMarketTab"}},t._l(t.marketTypes,function(i){return e("a-tab-pane",{key:i.value,attrs:{tab:t.$t(i.i18nKey||"dashboard.analysis.market.".concat(i.value))}})}),1),e("div",{staticClass:"symbol-search-section"},[e("a-input-search",{attrs:{placeholder:t.$t("dashboard.analysis.modal.addStock.searchOrInputPlaceholder"),loading:t.searchingSymbols,size:"large","allow-clear":""},on:{search:t.handleSearchOrInput,change:t.handleSymbolSearchInput},model:{value:t.symbolSearchKeyword,callback:function(e){t.symbolSearchKeyword=e},expression:"symbolSearchKeyword"}},[e("a-button",{attrs:{slot:"enterButton",type:"primary",icon:"search"},slot:"enterButton"},[t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.search"))+" ")])],1)],1),t.symbolSearchResults.length>0?e("div",{staticClass:"search-results-section"},[e("div",{staticClass:"section-title"},[e("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"search"}}),t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.searchResults"))+" ")],1),e("a-list",{staticClass:"symbol-list",attrs:{"data-source":t.symbolSearchResults,loading:t.searchingSymbols,size:"small"},scopedSlots:t._u([{key:"renderItem",fn:function(i){return e("a-list-item",{staticClass:"symbol-list-item",on:{click:function(e){return t.selectSymbol(i)}}},[e("a-list-item-meta",[e("template",{slot:"title"},[e("div",{staticClass:"symbol-item-content"},[e("span",{staticClass:"symbol-code"},[t._v(t._s(i.symbol))]),e("span",{staticClass:"symbol-name"},[t._v(t._s(i.name))]),i.exchange?e("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"blue"}},[t._v(" "+t._s(i.exchange)+" ")]):t._e()],1)])],2)],1)}}],null,!1,1074844145)})],1):t._e(),e("div",{staticClass:"hot-symbols-section"},[e("div",{staticClass:"section-title"},[e("a-icon",{staticStyle:{color:"#ff4d4f","margin-right":"4px"},attrs:{type:"fire"}}),t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.hotSymbols"))+" ")],1),e("a-spin",{attrs:{spinning:t.loadingHotSymbols}},[t.hotSymbols.length>0?e("a-list",{staticClass:"symbol-list",attrs:{"data-source":t.hotSymbols,size:"small"},scopedSlots:t._u([{key:"renderItem",fn:function(i){return e("a-list-item",{staticClass:"symbol-list-item",on:{click:function(e){return t.selectSymbol(i)}}},[e("a-list-item-meta",[e("template",{slot:"title"},[e("div",{staticClass:"symbol-item-content"},[e("span",{staticClass:"symbol-code"},[t._v(t._s(i.symbol))]),e("span",{staticClass:"symbol-name"},[t._v(t._s(i.name))]),i.exchange?e("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"orange"}},[t._v(" "+t._s(i.exchange)+" ")]):t._e()],1)])],2)],1)}}],null,!1,2177647935)}):e("a-empty",{attrs:{description:t.$t("dashboard.analysis.modal.addStock.noHotSymbols"),image:!1}})],1)],1),t.selectedSymbolForAdd?e("div",{staticClass:"selected-symbol-section"},[e("a-alert",{attrs:{message:t.$t("dashboard.analysis.modal.addStock.selectedSymbol"),type:"info","show-icon":"",closable:""},on:{close:function(e){t.selectedSymbolForAdd=null}}},[e("template",{slot:"description"},[e("div",{staticClass:"selected-symbol-info"},[e("a-tag",{staticStyle:{"margin-right":"8px"},attrs:{color:t.getMarketColor(t.selectedSymbolForAdd.market)}},[t._v(" "+t._s(t.$t("dashboard.analysis.market.".concat(t.selectedSymbolForAdd.market)))+" ")]),e("strong",[t._v(t._s(t.selectedSymbolForAdd.symbol))]),t.selectedSymbolForAdd.name?e("span",{staticStyle:{color:"#999","margin-left":"8px"}},[t._v(t._s(t.selectedSymbolForAdd.name))]):e("span",{staticStyle:{color:"#999","margin-left":"8px","font-style":"italic"}},[t._v(t._s(t.$t("dashboard.analysis.modal.addStock.nameWillBeFetched")))])],1)])],2)],1):t._e()],1)])],1),e("a-tooltip",{attrs:{title:t.$t("quickTrade.openPanel"),placement:"left"}},[!t.showQuickTrade&&t.currentSymbol&&t.isCryptoMarket?e("div",{staticClass:"qt-floating-btn",on:{click:t.openQuickTrade}},[e("a-icon",{attrs:{type:"thunderbolt",theme:"filled"}})],1):t._e()]),e("quick-trade-panel",{attrs:{visible:t.showQuickTrade,symbol:t.qtSymbol,"preset-side":t.qtSide,"preset-price":t.qtPrice,source:"indicator","market-type":"swap"},on:{close:function(e){t.showQuickTrade=!1},"order-success":t.onQuickTradeSuccess,"update:symbol":t.handleQuickTradeSymbolChange}})],1)},r=[],a=(i(62621),i(43898)),o=i(68285),s=i(21092),l=i(76959),c=i(17654),u=(i(6011),i(18787)),d=i(57888),h=(i(74423),i(85471)),p=i(95353),f=i(76471),v=i(64118),g=i(55585),m=function(){var t=this,e=t._self._c;return e("div",[e("a-modal",{staticClass:"indicator-editor-modal",style:t.isMobile?{top:0,paddingBottom:0}:{top:"2%"},attrs:{title:t.$t("dashboard.indicator.editor.title"),visible:t.visible,width:t.isMobile?"100%":"95vw",confirmLoading:t.saving,okText:t.$t("dashboard.indicator.editor.save"),cancelText:t.$t("dashboard.indicator.editor.cancel"),maskClosable:!1,centered:!1},on:{ok:t.handleSave,cancel:t.handleCancel,afterClose:t.handleAfterClose}},[e("div",{staticClass:"editor-content"},[e("a-row",{staticClass:"editor-layout",class:{"mobile-layout":t.isMobile},attrs:{gutter:16}},[e("a-col",{staticClass:"code-editor-column",attrs:{span:24,xs:24,sm:24,md:24}},[e("div",{staticClass:"code-section"},[e("div",{staticClass:"section-header"},[e("div",{staticClass:"header-left"},[e("span",{staticClass:"section-title"},[t._v(t._s(t.$t("dashboard.indicator.editor.code")))])]),e("div",{staticClass:"section-actions"},[e("a-button",{staticStyle:{padding:"0 8px",color:"#52c41a","font-weight":"bold"},attrs:{type:"link",size:"small",loading:t.verifying},on:{click:t.handleVerifyCode}},[e("a-icon",{attrs:{type:"check-circle"}}),t._v(" "+t._s(t.$t("dashboard.indicator.editor.verifyCode"))+" ")],1),e("a-button",{staticStyle:{padding:"0"},attrs:{type:"link",size:"small"},on:{click:t.goToDocs}},[e("a-icon",{attrs:{type:"book"}}),t._v(" "+t._s(t.$t("dashboard.indicator.editor.guide"))+" ")],1)],1)]),e("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"info","show-icon":"",message:t.$t("dashboard.indicator.boundary.message"),description:t.$t("dashboard.indicator.boundary.indicatorRule")}}),e("div",{staticClass:"code-mode-split"},[e("a-row",{staticClass:"code-mode-row",attrs:{gutter:16}},[e("a-col",{staticClass:"code-pane",attrs:{xs:24,sm:24,md:18}},[e("div",{ref:"codeEditorContainer",staticClass:"code-editor-container"})]),e("a-col",{staticClass:"ai-pane",attrs:{xs:24,sm:24,md:6}},[e("div",{staticClass:"ai-panel"},[e("div",{staticClass:"ai-panel-title"},[e("a-icon",{attrs:{type:"robot"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.editor.aiGenerate")))])],1),e("a-textarea",{attrs:{placeholder:t.$t("dashboard.indicator.editor.aiPromptPlaceholder"),rows:12,"auto-size":{minRows:12,maxRows:20}},model:{value:t.aiPrompt,callback:function(e){t.aiPrompt=e},expression:"aiPrompt"}}),e("a-button",{staticStyle:{"margin-top":"10px"},attrs:{type:"primary",block:"",loading:t.aiGenerating,size:"large"},on:{click:t.handleAIGenerate}},[t._v(" "+t._s(t.$t("dashboard.indicator.editor.aiGenerateBtn"))+" ")])],1)])],1)],1)],1)])],1)],1),e("div",{staticClass:"editor-footer",attrs:{slot:"footer"},slot:"footer"},[e("a-button",{on:{click:t.handleCancel}},[t._v(" "+t._s(t.$t("dashboard.indicator.editor.cancel"))+" ")]),e("a-button",{attrs:{type:"primary",loading:t.saving},on:{click:t.handleSave}},[t._v(" "+t._s(t.$t("dashboard.indicator.editor.save"))+" ")])],1)])],1)},y=[],b=i(52074),x=i(15237),_=i.n(x),w=(i(74806),i(55218),i(97923),i(50436),i(74053)),C=i.n(w),S=i(41802),k={name:"IndicatorEditor",props:{visible:{type:Boolean,default:!1},indicator:{type:Object,default:null},userId:{type:Number,default:null}},data:function(){return{saving:!1,codeEditor:null,aiPrompt:"",aiGenerating:!1,verifying:!1,isMobile:!1}},computed:{},watch:{visible:function(t){var e=this;t?this.$nextTick(function(){setTimeout(function(){!e.codeEditor&&e.$refs.codeEditorContainer&&e.initCodeEditor(),e.initFormData()},200)}):this.codeEditor&&this.codeEditor.refresh()},indicator:{handler:function(t){var e=this;t&&this.visible&&this.$nextTick(function(){setTimeout(function(){e.initFormData()},100)})},deep:!0}},mounted:function(){var t=this;this.checkMobile(),window.addEventListener("resize",this.checkMobile),this.visible&&this.$nextTick(function(){setTimeout(function(){t.initCodeEditor()},100)})},beforeDestroy:function(){if(window.removeEventListener("resize",this.checkMobile),this.codeEditor)try{if("function"===typeof this.codeEditor.toTextArea)this.codeEditor.toTextArea();else if("function"===typeof this.codeEditor.getWrapperElement){var t=this.codeEditor.getWrapperElement();t&&t.parentNode&&t.parentNode.removeChild(t)}}catch(e){}finally{this.codeEditor=null}},methods:{getDefaultIndicatorCode:function(){return'#Demo Code:\n#my_indicator_name = "My Buy/Sell Indicator"\n#my_indicator_description = "Buy/Sell only; execution is normalized in backend."\n\n#df = df.copy()\n#sma = df["close"].rolling(14).mean()\n#buy = (df["close"] > sma) & (df["close"].shift(1) <= sma.shift(1))\n#sell = (df["close"] < sma) & (df["close"].shift(1) >= sma.shift(1))\n#df["buy"] = buy.fillna(False).astype(bool)\n#df["sell"] = sell.fillna(False).astype(bool)\n\n#buy_marks = [df["low"].iloc[i] * 0.995 if df["buy"].iloc[i] else None for i in range(len(df))]\n#sell_marks = [df["high"].iloc[i] * 1.005 if df["sell"].iloc[i] else None for i in range(len(df))]\n\n#output = {\n# "name": my_indicator_name,\n# "plots": [],\n# "signals": [\n# {"type": "buy", "text": "B", "data": buy_marks, "color": "#00E676"},\n# {"type": "sell", "text": "S", "data": sell_marks, "color": "#FF5252"}\n# ]\n#}\n'},checkMobile:function(){this.isMobile=window.innerWidth<=768},goToDocs:function(){window.open("https://github.com/brokermr810/QuantDinger/blob/main/docs/STRATEGY_DEV_GUIDE.md","_blank")},handleVerifyCode:function(){var t=this,e=this.codeEditor?this.codeEditor.getValue():"";e&&e.trim()?(this.verifying=!0,(0,f.Ay)({url:"/api/indicator/verifyCode",method:"post",data:{code:e}}).then(function(e){if(1===e.code){var i=e.data||{};t.$message.success("".concat(t.$t("dashboard.indicator.editor.verifyCodeSuccess")," (").concat(i.plots_count||0," plots, ").concat(i.signals_count||0," signals)"))}else{var n=e.data||{};t.$error({title:t.$t("dashboard.indicator.editor.verifyCodeFailed"),width:600,content:function(t){return t("div",[t("p",{style:{fontWeight:"bold",color:"#ff4d4f"}},e.msg),n.details?t("pre",{style:{background:"#f5f5f5",padding:"8px",overflow:"auto",maxHeight:"300px",marginTop:"8px",fontSize:"12px",fontFamily:"monospace"}},n.details):null])}})}}).catch(function(e){t.$message.error("Request Failed: "+(e.message||"Unknown Error"))}).finally(function(){t.verifying=!1})):this.$message.warning(this.$t("dashboard.indicator.editor.verifyCodeEmpty"))},cleanMarkdownCodeBlocks:function(t){if(!t||"string"!==typeof t)return t;var e=t.trim(),i=/```/.test(e);return i?(e=e.replace(/^```[\w]*\s*\n?/i,""),e.startsWith("```")&&(e=e.replace(/^```\s*\n?/g,"")),e.endsWith("```")&&(e=e.replace(/\n?```\s*$/g,"")),e=e.replace(/^\s*```[\w]*\s*$/gm,""),e=e.replace(/^\s*```\s*$/gm,""),e=e.replace(/\n{3,}/g,"\n\n"),e=e.trim(),e):e},initFormData:function(){var t=this;if(this.visible){var e=this.indicator&&this.indicator.code||"";e&&String(e).trim()||(e=this.getDefaultIndicatorCode()),this.$nextTick(function(){setTimeout(function(){t.aiPrompt="",t.codeEditor&&(t.codeEditor.setValue(e),t.codeEditor.refresh())},50)})}},initCodeEditor:function(){var t=this;if(this.$refs.codeEditorContainer){if(this.codeEditor){try{if("function"===typeof this.codeEditor.toTextArea)this.codeEditor.toTextArea();else if("function"===typeof this.codeEditor.getWrapperElement){var e=this.codeEditor.getWrapperElement();e&&e.parentNode&&e.parentNode.removeChild(e)}}catch(i){}this.codeEditor=null}try{this.$refs.codeEditorContainer.innerHTML="",this.codeEditor=_()(this.$refs.codeEditorContainer,{value:function(){var e=t.indicator&&t.indicator.code||"";return e&&String(e).trim()?e:t.getDefaultIndicatorCode()}(),mode:"python",theme:"eclipse",lineNumbers:!0,lineWrapping:!0,indentUnit:4,indentWithTabs:!1,smartIndent:!0,matchBrackets:!0,autoCloseBrackets:!0,styleActiveLine:!0,foldGutter:!1,gutters:["CodeMirror-linenumbers"],tabSize:4,viewportMargin:1/0}),this.codeEditor.on("change",function(t){t.getValue()}),this.$nextTick(function(){t.codeEditor&&t.codeEditor.refresh()})}catch(n){}}},handleSave:function(){var t=this.codeEditor?this.codeEditor.getValue():"",e=t||"";e.trim()?(this.saving=!0,this.$emit("save",{id:this.indicator?this.indicator.id:0,code:e,userid:this.userId})):this.$message.warning(this.$t("dashboard.indicator.editor.codeRequired"))},handleCancel:function(){this.codeEditor&&this.codeEditor.setValue(""),this.$emit("cancel")},handleAfterClose:function(){var t=this;this.codeEditor&&this.$nextTick(function(){t.codeEditor&&t.codeEditor.refresh()}),this.aiPrompt=""},handleAIGenerate:function(){var t=this;return(0,c.A)((0,l.A)().m(function e(){var i,n,r,a,o,s,c,u,d,h,p,f,v,g,m,y,x,_,w,k,A,T,M,I,E;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.aiPrompt&&t.aiPrompt.trim()){e.n=1;break}return t.$message.warning(t.$t("dashboard.indicator.editor.aiPromptRequired")),e.a(2);case 1:return t.aiGenerating=!0,i="",t.codeEditor&&(i=t.codeEditor.getValue()||""),t.codeEditor&&(t.codeEditor.setValue("# AI generating...\n"),t.codeEditor.refresh()),n="",e.p=2,r="/api/indicator/aiGenerate",a=C().get(S.Xh),o={prompt:t.aiPrompt.trim()},i.trim()&&(o.existingCode=i.trim()),e.n=3,fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:a?"Bearer ".concat(a):"","Access-Token":a||"",Token:a||""},body:JSON.stringify(o),credentials:"include"});case 3:if(s=e.v,s.ok){e.n=5;break}return e.n=4,s.text().catch(function(){return""});case 4:throw c=e.v,new Error(c||"HTTP error! status: ".concat(s.status));case 5:if(s.body&&"function"===typeof s.body.getReader){e.n=6;break}throw new Error("AI 服务未返回可读取的流(response.body 不存在)");case 6:u=s.body.getReader(),d=new TextDecoder,h="";case 7:return e.n=8,u.read();case 8:if(p=e.v,f=p.done,v=p.value,!f){e.n=9;break}return e.a(3,21);case 9:h+=d.decode(v,{stream:!0}),g=h.split("\n\n"),h=g.pop()||"",m=(0,b.A)(g),e.p=10,m.s();case 11:if((y=m.n()).done){e.n=17;break}if(x=y.value,x.trim()&&x.startsWith("data: ")){e.n=12;break}return e.a(3,16);case 12:if(_=x.substring(6),"[DONE]"!==_){e.n=13;break}return e.a(3,17);case 13:if(e.p=13,w=JSON.parse(_),!w.error){e.n=14;break}throw new Error(w.error);case 14:w.content&&(n+=w.content,k=t.cleanMarkdownCodeBlocks(n),t.codeEditor&&(t.codeEditor.setValue(k),A=t.codeEditor.lineCount(),t.codeEditor.setCursor({line:A-1,ch:0}),t.codeEditor.refresh())),e.n=16;break;case 15:e.p=15,e.v;case 16:e.n=11;break;case 17:e.n=19;break;case 18:e.p=18,I=e.v,m.e(I);case 19:return e.p=19,m.f(),e.f(19);case 20:e.n=7;break;case 21:t.codeEditor&&n?(T=t.cleanMarkdownCodeBlocks(n),t.codeEditor.setValue(T),t.codeEditor.refresh(),t.$message.success(t.$t("dashboard.indicator.editor.aiGenerateSuccess"))):n||t.$message.warning("未生成任何代码,请尝试更详细的提示词"),e.n=23;break;case 22:e.p=22,E=e.v,t.$message.error(E.message||t.$t("dashboard.indicator.editor.aiGenerateError")),n&&t.codeEditor&&(M=t.cleanMarkdownCodeBlocks(n),t.codeEditor.setValue(M));case 23:return e.p=23,t.aiGenerating=!1,e.f(23);case 24:return e.a(2)}},e,null,[[13,15],[10,18,19,20],[2,22,23,24]])}))()}}},A=k,T=i(845),M=(0,T.A)(A,m,y,!1,null,"4fea1865",null),I=M.exports,E=function(){var t=this,e=t._self._c;return e("div",{staticClass:"chart-left",class:{"theme-dark":"dark"===t.chartTheme}},[e("div",{staticClass:"chart-wrapper"},[e("div",{staticClass:"drawing-toolbar"},[t._l(t.drawingTools,function(i){return e("a-tooltip",{key:i.name,attrs:{title:i.title,placement:"right"}},[e("div",{staticClass:"drawing-tool-btn",class:{active:t.activeDrawingTool===i.name},on:{click:function(e){return t.selectDrawingTool(i.name)}}},[e("a-icon",{attrs:{type:i.icon}})],1)])}),e("a-divider",{attrs:{type:"vertical"}}),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.drawing.clearAll"),placement:"right"}},[e("div",{staticClass:"drawing-tool-btn",on:{click:t.clearAllDrawings}},[e("a-icon",{attrs:{type:"delete"}})],1)])],2),e("div",{staticClass:"chart-content-area"},[e("div",{staticClass:"indicator-toolbar"},t._l(t.indicatorButtons,function(i){return e("div",{key:i.id,staticClass:"indicator-btn",class:{active:t.isIndicatorActive(i.id)},attrs:{title:i.name},on:{click:function(e){return t.toggleIndicator(i)}}},[t._v(" "+t._s(i.shortName)+" ")])}),0),e("div",{staticClass:"kline-chart-container",attrs:{id:"kline-chart-container"}})]),t.loading?e("div",{staticClass:"chart-overlay"},[e("a-spin",{attrs:{size:"large"}},[e("a-icon",{staticStyle:{"font-size":"24px",color:"#13c2c2"},attrs:{slot:"indicator",type:"loading",spin:""},slot:"indicator"})],1)],1):t._e(),t.error?e("div",{staticClass:"chart-overlay"},[e("div",{staticClass:"error-box"},[e("a-icon",{staticStyle:{"font-size":"24px",color:"#ef5350","margin-bottom":"10px"},attrs:{type:"warning"}}),e("span",[t._v(t._s(t.error))]),e("a-button",{staticStyle:{"margin-top":"12px"},attrs:{type:"primary",size:"small",ghost:""},on:{click:t.handleRetry}},[t._v(" "+t._s(t.$t("dashboard.indicator.retry"))+" ")])],1)]):t._e(),t.pyodideLoadFailed?e("div",{staticClass:"chart-overlay pyodide-warning"},[e("div",{staticClass:"warning-box"},[e("a-icon",{staticStyle:{"font-size":"32px",color:"#faad14","margin-bottom":"12px"},attrs:{type:"warning"}}),e("div",{staticClass:"warning-title"},[t._v(t._s(t.$t("dashboard.indicator.warning.pyodideLoadFailed")))]),e("div",{staticClass:"warning-desc"},[t._v(t._s(t.$t("dashboard.indicator.warning.pyodideLoadFailedDesc")))])],1)]):t._e(),t.symbol||t.loading||t.error||t.pyodideLoadFailed?t._e():e("div",{staticClass:"chart-overlay initial-hint"},[e("div",{staticClass:"hint-box"},[e("a-icon",{staticStyle:{"font-size":"48px",color:"#1890ff","margin-bottom":"16px"},attrs:{type:"line-chart"}}),e("div",{staticClass:"hint-title"},[t._v(t._s(t.$t("dashboard.indicator.hint.selectSymbol")))]),e("div",{staticClass:"hint-desc"},[t._v(t._s(t.$t("dashboard.indicator.hint.selectSymbolDesc")))])],1)])])])},D=[];function P(t){if(null!=t){var e=t["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],i=0;if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length))return{next:function(){return t&&i>=t.length&&(t=void 0),{value:t&&t[i++],done:!t}}}}throw new TypeError((0,o.A)(t)+" is not iterable")}var L=i(42822),R=i(9133),F=function(t,e){return F=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i])},F(t,e)};function B(t,e){if("function"!==typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function i(){this.constructor=t}F(t,e),t.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}var N,O,z,W,V,$,H,K,Y,X=function(){return X=Object.assign||function(t){for(var e,i=1,n=arguments.length;i0&&r[r.length-1])&&(6===s[0]||2===s[0])){a=0;continue}if(3===s[0]&&(!r||s[1]>r[0]&&s[1]=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function q(t,e){var i="function"===typeof Symbol&&t[Symbol.iterator];if(!i)return t;var n,r,a=i.call(t),o=[];try{while((void 0===e||e-- >0)&&!(n=a.next()).done)o.push(n.value)}catch(s){r={error:s}}finally{try{n&&!n.done&&(i=a["return"])&&i.call(a)}finally{if(r)throw r.error}}return o}function Z(t,e,i){if(i||2===arguments.length)for(var n,r=0,a=e.length;r1e9)return"".concat(+(e/1e9).toFixed(3),"B");if(e>1e6)return"".concat(+(e/1e6).toFixed(3),"M");if(e>1e3)return"".concat(+(e/1e3).toFixed(3),"K")}return"".concat(t)}function zt(t,e){var i="".concat(t);if(0===e.length)return i;if(i.includes(".")){var n=i.split(".");return"".concat(n[0].replace(/(\d)(?=(\d{3})+$)/g,function(t){return"".concat(t).concat(e)}),".").concat(n[1])}return i.replace(/(\d)(?=(\d{3})+$)/g,function(t){return"".concat(t).concat(e)})}function Wt(t,e){var i="".concat(t),n=new RegExp("\\.0{"+e+",}[1-9][0-9]*$");if(n.test(i)){var r=i.split("."),a=r[r.length-1],o=a.match(/0*/);if(Mt(o)){var s=o[0].length;return r[r.length-1]=a.replace(/0*/,"0{".concat(s,"}")),r.join(".")}}return i}function Vt(t){var e,i,n;return null!==(n=null===(i=null===(e=t.ownerDocument)||void 0===e?void 0:e.defaultView)||void 0===i?void 0:i.devicePixelRatio)&&void 0!==n?n:1}function $t(t,e,i){return"".concat(null!==e&&void 0!==e?e:"normal"," ").concat(null!==t&&void 0!==t?t:12,"px ").concat(null!==i&&void 0!==i?i:"Helvetica Neue")}function Ht(t,e,i,n){if(!Mt(Dt)){var r=document.createElement("canvas"),a=Vt(r);Dt=r.getContext("2d"),Dt.scale(a,a)}return Dt.font=$t(e,i,n),Math.round(Dt.measureText(t).width)}(function(t){t["OnDataReady"]="onDataReady",t["OnZoom"]="onZoom",t["OnScroll"]="onScroll",t["OnVisibleRangeChange"]="onVisibleRangeChange",t["OnTooltipIconClick"]="onTooltipIconClick",t["OnCrosshairChange"]="onCrosshairChange",t["OnCandleBarClick"]="onCandleBarClick",t["OnPaneDrag"]="onPaneDrag"})(Pt||(Pt={}));var Kt,Yt,Xt=function(){function t(){this._callbacks=[]}return t.prototype.subscribe=function(t){var e,i=null!==(e=this._callbacks.indexOf(t))&&void 0!==e?e:-1;i<0&&this._callbacks.push(t)},t.prototype.unsubscribe=function(t){var e;if(kt(t)){var i=null!==(e=this._callbacks.indexOf(t))&&void 0!==e?e:-1;i>-1&&this._callbacks.splice(i,1)}else this._callbacks=[]},t.prototype.execute=function(t){this._callbacks.forEach(function(e){e(t)})},t.prototype.isEmpty=function(){return 0===this._callbacks.length},t}();function Ut(t,e,i,n,r){var a,o=e.result,s=e.figures,l=e.styles,c=Ft(l,"circles",n.circles),u=c.length,d=Ft(l,"bars",n.bars),h=d.length,p=Ft(l,"lines",n.lines),f=p.length,v=0,g=0,m=0,y=0;s.forEach(function(s){var l;switch(s.type){case"circle":y=v;var b=c[v%u];a=X(X({},b),{color:b.noChangeColor}),v++;break;case"bar":y=g;var x=d[g%h];a=X(X({},x),{color:x.noChangeColor}),g++;break;case"line":y=m,a=p[m%f],m++;break}if(Mt(a)){var _={prev:{kLineData:t[i-1],indicatorData:o[i-1]},current:{kLineData:t[i],indicatorData:o[i]},next:{kLineData:t[i+1],indicatorData:o[i+1]}},w=null===(l=s.styles)||void 0===l?void 0:l.call(s,_,e,n);r(s,X(X({},a),w),y)}})}(function(t){t["Init"]="init",t["Forward"]="forward",t["Backward"]="backward"})(Kt||(Kt={})),function(t){t["Normal"]="normal",t["Price"]="price",t["Volume"]="volume"}(Yt||(Yt={}));var Gt,jt=function(){function t(t){this.result=[],this._precisionFlag=!1;var e=t.name,i=t.shortName,n=t.series,r=t.calcParams,a=t.figures,o=t.precision,s=t.shouldOhlc,l=t.shouldFormatBigNumber,c=t.visible,u=t.zLevel,d=t.minValue,h=t.maxValue,p=t.styles,f=t.extendData,v=t.regenerateFigures,g=t.createTooltipDataSource,m=t.draw;this.name=e,this.shortName=null!==i&&void 0!==i?i:e,this.series=null!==n&&void 0!==n?n:Yt.Normal,this.precision=null!==o&&void 0!==o?o:4,this.calcParams=null!==r&&void 0!==r?r:[],this.figures=null!==a&&void 0!==a?a:[],this.shouldOhlc=null!==s&&void 0!==s&&s,this.shouldFormatBigNumber=null!==l&&void 0!==l&&l,this.visible=null===c||void 0===c||c,this.zLevel=null!==u&&void 0!==u?u:0,this.minValue=null!==d&&void 0!==d?d:null,this.maxValue=null!==h&&void 0!==h?h:null,this.styles=Ct(null!==p&&void 0!==p?p:{}),this.extendData=f,this.regenerateFigures=null!==v&&void 0!==v?v:null,this.createTooltipDataSource=null!==g&&void 0!==g?g:null,this.draw=null!==m&&void 0!==m?m:null}return t.prototype.setShortName=function(t){return this.shortName!==t&&(this.shortName=t,!0)},t.prototype.setSeries=function(t){return this.series!==t&&(this.series=t,!0)},t.prototype.setPrecision=function(t,e){var i=null!==e&&void 0!==e&&e,n=Math.floor(t);return!(!(n!==this.precision&&t>=0)||i&&(!i||this._precisionFlag))&&(this.precision=n,i||(this._precisionFlag=!0),!0)},t.prototype.setCalcParams=function(t){var e,i;return this.calcParams=t,this.figures=null!==(i=null===(e=this.regenerateFigures)||void 0===e?void 0:e.call(this,t))&&void 0!==i?i:this.figures,!0},t.prototype.setShouldOhlc=function(t){return this.shouldOhlc!==t&&(this.shouldOhlc=t,!0)},t.prototype.setShouldFormatBigNumber=function(t){return this.shouldFormatBigNumber!==t&&(this.shouldFormatBigNumber=t,!0)},t.prototype.setVisible=function(t){return this.visible!==t&&(this.visible=t,!0)},t.prototype.setZLevel=function(t){return this.zLevel!==t&&(this.zLevel=t,!0)},t.prototype.setStyles=function(t){return wt(this.styles,t),!0},t.prototype.setExtendData=function(t){return this.extendData!==t&&(this.extendData=t,!0)},t.prototype.setFigures=function(t){return this.figures!==t&&(this.figures=t,!0)},t.prototype.setMinValue=function(t){return this.minValue!==t&&(this.minValue=t,!0)},t.prototype.setMaxValue=function(t){return this.maxValue!==t&&(this.maxValue=t,!0)},t.prototype.setRegenerateFigures=function(t){return this.regenerateFigures!==t&&(this.regenerateFigures=t,!0)},t.prototype.setCreateTooltipDataSource=function(t){return this.createTooltipDataSource!==t&&(this.createTooltipDataSource=t,!0)},t.prototype.setDraw=function(t){return this.draw!==t&&(this.draw=t,!0)},t.prototype.calcIndicator=function(t){return U(this,void 0,void 0,function(){var e;return G(this,function(i){switch(i.label){case 0:return i.trys.push([0,2,,3]),[4,this.calc(t,this)];case 1:return e=i.sent(),this.result=e,[2,!0];case 2:return i.sent(),[2,!1];case 3:return[2]}})})},t.extend=function(e){var i=function(t){function i(){return t.call(this,e)||this}return B(i,t),i.prototype.calc=function(t,i){return e.calc(t,i)},i}(t);return i},t}();function qt(){return["mouseClickEvent","mouseDoubleClickEvent","mouseRightClickEvent","tapEvent","doubleTapEvent","mouseDownEvent","touchStartEvent","mouseMoveEvent","touchMoveEvent"]}(function(t){t["Normal"]="normal",t["WeakMagnet"]="weak_magnet",t["StrongMagnet"]="strong_magnet"})(Gt||(Gt={}));var Zt,Jt=1,Qt=-1,te="overlay_",ee="overlay_figure_",ie=function(){function t(t){this.currentStep=Jt,this.points=[],this._prevPressedPoint=null,this._prevPressedPoints=[];var e=t.mode,i=t.modeSensitivity,n=t.extendData,r=t.styles,a=t.name,o=t.totalStep,s=t.lock,l=t.visible,c=t.zLevel,u=t.needDefaultPointFigure,d=t.needDefaultXAxisFigure,h=t.needDefaultYAxisFigure,p=t.createPointFigures,f=t.createXAxisFigures,v=t.createYAxisFigures,g=t.performEventPressedMove,m=t.performEventMoveForDrawing,y=t.onDrawStart,b=t.onDrawing,x=t.onDrawEnd,_=t.onClick,w=t.onDoubleClick,C=t.onRightClick,S=t.onPressedMoveStart,k=t.onPressedMoving,A=t.onPressedMoveEnd,T=t.onMouseEnter,M=t.onMouseLeave,I=t.onRemoved,E=t.onSelected,D=t.onDeselected;this.name=a,this.totalStep=!Tt(o)||o<2?1:o,this.lock=null!==s&&void 0!==s&&s,this.visible=null===l||void 0===l||l,this.zLevel=null!==c&&void 0!==c?c:0,this.needDefaultPointFigure=null!==u&&void 0!==u&&u,this.needDefaultXAxisFigure=null!==d&&void 0!==d&&d,this.needDefaultYAxisFigure=null!==h&&void 0!==h&&h,this.mode=null!==e&&void 0!==e?e:Gt.Normal,this.modeSensitivity=null!==i&&void 0!==i?i:8,this.extendData=n,this.styles=Ct(null!==r&&void 0!==r?r:{}),this.createPointFigures=null!==p&&void 0!==p?p:null,this.createXAxisFigures=null!==f&&void 0!==f?f:null,this.createYAxisFigures=null!==v&&void 0!==v?v:null,this.performEventPressedMove=null!==g&&void 0!==g?g:null,this.performEventMoveForDrawing=null!==m&&void 0!==m?m:null,this.onDrawStart=null!==y&&void 0!==y?y:null,this.onDrawing=null!==b&&void 0!==b?b:null,this.onDrawEnd=null!==x&&void 0!==x?x:null,this.onClick=null!==_&&void 0!==_?_:null,this.onDoubleClick=null!==w&&void 0!==w?w:null,this.onRightClick=null!==C&&void 0!==C?C:null,this.onPressedMoveStart=null!==S&&void 0!==S?S:null,this.onPressedMoving=null!==k&&void 0!==k?k:null,this.onPressedMoveEnd=null!==A&&void 0!==A?A:null,this.onMouseEnter=null!==T&&void 0!==T?T:null,this.onMouseLeave=null!==M&&void 0!==M?M:null,this.onRemoved=null!==I&&void 0!==I?I:null,this.onSelected=null!==E&&void 0!==E?E:null,this.onDeselected=null!==D&&void 0!==D?D:null}return t.prototype.setId=function(t){return!Et(this.id)&&(this.id=t,!0)},t.prototype.setGroupId=function(t){return!Et(this.groupId)&&(this.groupId=t,!0)},t.prototype.setPaneId=function(t){this.paneId=t},t.prototype.setExtendData=function(t){return t!==this.extendData&&(this.extendData=t,!0)},t.prototype.setStyles=function(t){return wt(this.styles,t),!0},t.prototype.setPoints=function(t){if(t.length>0){var e=void 0;if(this.points=Z([],q(t),!1),t.length>=this.totalStep-1?(this.currentStep=Qt,e=this.totalStep-1):(this.currentStep=t.length+1,e=t.length),null!==this.performEventMoveForDrawing)for(var i=0;is?n=a:r=a,o<=2)break}return n}function fe(t){var e=Math.floor(ye(t)),i=be(e),n=t/i,r=0;return r=n<1.5?1:n<2.5?2:n<3.5?3:n<4.5?4:n<5.5?5:n<6.5?6:8,t=r*i,e>=-20?+t.toFixed(e<0?-e:0):t}function ve(t,e){null==e&&(e=10),e=Math.min(Math.max(0,e),20);var i=(+t).toFixed(e);return+i}function ge(t){var e=t.toString(),i=e.indexOf("e");if(i>0){var n=+e.slice(i+1);return n<0?-n:0}var r=e.indexOf(".");return r<0?0:e.length-1-r}function me(t,e,i){var n=[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER];return t.forEach(function(t){var r,a;n[0]=Math.max(null!==(r=t[e])&&void 0!==r?r:t,n[0]),n[1]=Math.min(null!==(a=t[i])&&void 0!==a?a:t,n[1])}),n}function ye(t){return Math.log(t)/Math.log(10)}function be(t){return Math.pow(10,t)}function xe(){return{from:0,to:0,realFrom:0,realTo:0}}var _e={MIN:1,MAX:50},we=8,Ce=80,Se=.88,ke=10,Ae=function(){function t(t){this._dateTimeFormat=this._buildDateTimeFormat(),this._zoomEnabled=!0,this._scrollEnabled=!0,this._totalBarSpace=0,this._barSpace=we,this._offsetRightDistance=Ce,this._startLastBarRightSideDiffBarCount=0,this._scrollLimitRole=0,this._minVisibleBarCount={left:2,right:2},this._maxOffsetDistance={left:50,right:50},this._visibleRange=xe(),this._chartStore=t,this._gapBarSpace=this._calcGapBarSpace(),this._lastBarRightSideDiffBarCount=this._offsetRightDistance/this._barSpace}return t.prototype._calcGapBarSpace=function(){var t;return this._barSpace>3?t=Math.floor(this._barSpace*Se):(t=Math.floor(this._barSpace),t===this._barSpace&&t--),t%2===0&&t--,t=Math.max(1,t),t},t.prototype.adjustVisibleRange=function(){var t,e,i,n,r=this._chartStore.getDataList(),a=r.length,o=this._totalBarSpace/this._barSpace;1===this._scrollLimitRole?(i=(this._totalBarSpace-this._maxOffsetDistance.right)/this._barSpace,n=(this._totalBarSpace-this._maxOffsetDistance.left)/this._barSpace):(i=this._minVisibleBarCount.left,n=this._minVisibleBarCount.right),i=Math.max(0,i),n=Math.max(0,n);var s=o-Math.min(i,a);this._lastBarRightSideDiffBarCount>s&&(this._lastBarRightSideDiffBarCount=s);var l=-a+Math.min(n,a);this._lastBarRightSideDiffBarCounta&&(c=a);var d=Math.round(c-o)-1;d<0&&(d=0);var h=this._lastBarRightSideDiffBarCount>0?Math.round(a+this._lastBarRightSideDiffBarCount-o)-1:d;if(this._visibleRange={from:d,to:c,realFrom:h,realTo:u},this._chartStore.getActionStore().execute(Pt.OnVisibleRangeChange,this._visibleRange),this._chartStore.adjustVisibleDataList(),0===d){var p=r[0];this._chartStore.executeLoadMoreCallback(null!==(t=null===p||void 0===p?void 0:p.timestamp)&&void 0!==t?t:null),this._chartStore.executeLoadDataCallback({type:Kt.Forward,data:null!==p&&void 0!==p?p:null})}c===a&&this._chartStore.executeLoadDataCallback({type:Kt.Backward,data:null!==(e=r[a-1])&&void 0!==e?e:null})},t.prototype.getDateTimeFormat=function(){return this._dateTimeFormat},t.prototype._buildDateTimeFormat=function(t){var e={hour12:!1,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"};Et(t)&&(e.timeZone=t);var i=null;try{i=new Intl.DateTimeFormat("en",e)}catch(n){bt("","","Timezone is error!!!")}return i},t.prototype.setTimezone=function(t){var e=this._buildDateTimeFormat(t);null!==e&&(this._dateTimeFormat=e)},t.prototype.getTimezone=function(){return this._dateTimeFormat.resolvedOptions().timeZone},t.prototype.getBarSpace=function(){return{bar:this._barSpace,halfBar:this._barSpace/2,gapBar:this._gapBarSpace,halfGapBar:Math.floor(this._gapBarSpace/2)}},t.prototype.setBarSpace=function(t,e){t<_e.MIN||t>_e.MAX||this._barSpace===t||(this._barSpace=t,this._gapBarSpace=this._calcGapBarSpace(),null===e||void 0===e||e(),this.adjustVisibleRange(),this._chartStore.getTooltipStore().recalculateCrosshair(!0),this._chartStore.getChart().adjustPaneViewport(!1,!0,!0,!0))},t.prototype.setTotalBarSpace=function(t){return this._totalBarSpace!==t&&(this._totalBarSpace=t,this.adjustVisibleRange(),this._chartStore.getTooltipStore().recalculateCrosshair(!0)),this},t.prototype.setOffsetRightDistance=function(t,e){return this._offsetRightDistance=1===this._scrollLimitRole?Math.min(this._maxOffsetDistance.right,t):t,this._lastBarRightSideDiffBarCount=this._offsetRightDistance/this._barSpace,null!==e&&void 0!==e&&e&&(this.adjustVisibleRange(),this._chartStore.getTooltipStore().recalculateCrosshair(!0),this._chartStore.getChart().adjustPaneViewport(!1,!0,!0,!0)),this},t.prototype.resetOffsetRightDistance=function(){this.setOffsetRightDistance(this._offsetRightDistance)},t.prototype.getInitialOffsetRightDistance=function(){return this._offsetRightDistance},t.prototype.getOffsetRightDistance=function(){return Math.max(0,this._lastBarRightSideDiffBarCount*this._barSpace)},t.prototype.getLastBarRightSideDiffBarCount=function(){return this._lastBarRightSideDiffBarCount},t.prototype.setLastBarRightSideDiffBarCount=function(t){return this._lastBarRightSideDiffBarCount=t,this},t.prototype.setMaxOffsetLeftDistance=function(t){return this._scrollLimitRole=1,this._maxOffsetDistance.left=t,this},t.prototype.setMaxOffsetRightDistance=function(t){return this._scrollLimitRole=1,this._maxOffsetDistance.right=t,this},t.prototype.setLeftMinVisibleBarCount=function(t){return this._scrollLimitRole=0,this._minVisibleBarCount.left=t,this},t.prototype.setRightMinVisibleBarCount=function(t){return this._scrollLimitRole=0,this._minVisibleBarCount.right=t,this},t.prototype.getVisibleRange=function(){return this._visibleRange},t.prototype.startScroll=function(){this._startLastBarRightSideDiffBarCount=this._lastBarRightSideDiffBarCount},t.prototype.scroll=function(t){if(this._scrollEnabled){var e=t/this._barSpace,i=this._lastBarRightSideDiffBarCount*this._barSpace;this._lastBarRightSideDiffBarCount=this._startLastBarRightSideDiffBarCount-e,this.adjustVisibleRange(),this._chartStore.getTooltipStore().recalculateCrosshair(!0),this._chartStore.getChart().adjustPaneViewport(!1,!0,!0,!0);var n=Math.round(i-this._lastBarRightSideDiffBarCount*this._barSpace);0!==n&&this._chartStore.getActionStore().execute(Pt.OnScroll,{distance:n})}},t.prototype.getDataByDataIndex=function(t){var e;return null!==(e=this._chartStore.getDataList()[t])&&void 0!==e?e:null},t.prototype.coordinateToFloatIndex=function(t){var e=this._chartStore.getDataList().length,i=(this._totalBarSpace-t)/this._barSpace,n=e+this._lastBarRightSideDiffBarCount-i;return Math.round(1e6*n)/1e6},t.prototype.dataIndexToTimestamp=function(t){var e,i=this.getDataByDataIndex(t);return null!==(e=null===i||void 0===i?void 0:i.timestamp)&&void 0!==e?e:null},t.prototype.timestampToDataIndex=function(t){var e=this._chartStore.getDataList();return 0===e.length?0:pe(e,"timestamp",t)},t.prototype.dataIndexToCoordinate=function(t){var e=this._chartStore.getDataList().length,i=e+this._lastBarRightSideDiffBarCount-t;return Math.floor(this._totalBarSpace-(i-.5)*this._barSpace)},t.prototype.coordinateToDataIndex=function(t){return Math.ceil(this.coordinateToFloatIndex(t))-1},t.prototype.zoom=function(t,e){var i,n=this;if(this._zoomEnabled){var r=null!==e&&void 0!==e?e:null;if(!Tt(null===r||void 0===r?void 0:r.x)){var a=this._chartStore.getTooltipStore().getCrosshair();r={x:null!==(i=null===a||void 0===a?void 0:a.x)&&void 0!==i?i:this._totalBarSpace/2}}var o=r.x,s=this.coordinateToFloatIndex(o),l=this._barSpace,c=this._barSpace+t*(this._barSpace/ke);this.setBarSpace(c,function(){n._lastBarRightSideDiffBarCount+=s-n.coordinateToFloatIndex(o)});var u=this._barSpace/l;1!==u&&this._chartStore.getActionStore().execute(Pt.OnZoom,{scale:u})}},t.prototype.setZoomEnabled=function(t){return this._zoomEnabled=t,this},t.prototype.getZoomEnabled=function(){return this._zoomEnabled},t.prototype.setScrollEnabled=function(t){return this._scrollEnabled=t,this},t.prototype.getScrollEnabled=function(){return this._scrollEnabled},t.prototype.clear=function(){this._visibleRange=xe()},t}(),Te={name:"AVP",shortName:"AVP",series:Yt.Price,precision:2,figures:[{key:"avp",title:"AVP: ",type:"line"}],calc:function(t){var e=0,i=0;return t.map(function(t){var n,r,a={},o=null!==(n=null===t||void 0===t?void 0:t.turnover)&&void 0!==n?n:0,s=null!==(r=null===t||void 0===t?void 0:t.volume)&&void 0!==r?r:0;return e+=o,i+=s,0!==i&&(a.avp=e/i),a})}},Me={name:"AO",shortName:"AO",calcParams:[5,34],figures:[{key:"ao",title:"AO: ",type:"bar",baseValue:0,styles:function(t,e,i){var n,r,a,o,s,l=t.prev,c=t.current,u=null!==(r=null===(n=l.indicatorData)||void 0===n?void 0:n.ao)&&void 0!==r?r:Number.MIN_SAFE_INTEGER,d=null!==(o=null===(a=c.indicatorData)||void 0===a?void 0:a.ao)&&void 0!==o?o:Number.MIN_SAFE_INTEGER;s=d>u?Ft(e.styles,"bars[0].upColor",i.bars[0].upColor):Ft(e.styles,"bars[0].downColor",i.bars[0].downColor);var h=d>u?O.Stroke:O.Fill;return{color:s,style:h,borderColor:s}}}],calc:function(t,e){var i=e.calcParams,n=Math.max(i[0],i[1]),r=0,a=0,o=0,s=0;return t.map(function(e,l){var c={},u=(e.low+e.high)/2;if(r+=u,a+=u,l>=i[0]-1){o=r/i[0];var d=t[l-(i[0]-1)];r-=(d.low+d.high)/2}if(l>=i[1]-1){s=a/i[1];d=t[l-(i[1]-1)];a-=(d.low+d.high)/2}return l>=n-1&&(c.ao=o-s),c})}},Ie={name:"BIAS",shortName:"BIAS",calcParams:[6,12,24],figures:[{key:"bias1",title:"BIAS6: ",type:"line"},{key:"bias2",title:"BIAS12: ",type:"line"},{key:"bias3",title:"BIAS24: ",type:"line"}],regenerateFigures:function(t){return t.map(function(t,e){return{key:"bias".concat(e+1),title:"BIAS".concat(t,": "),type:"line"}})},calc:function(t,e){var i=e.calcParams,n=e.figures,r=[];return t.map(function(e,a){var o={},s=e.close;return i.forEach(function(e,l){var c;if(r[l]=(null!==(c=r[l])&&void 0!==c?c:0)+s,a>=e-1){var u=r[l]/i[l];o[n[l].key]=(s-u)/u*100,r[l]-=t[a-(e-1)].close}}),o})}};function Ee(t,e){var i=t.length,n=0;return t.forEach(function(t){var i=t.close-e;n+=i*i}),n=Math.abs(n),Math.sqrt(n/i)}var De={name:"BOLL",shortName:"BOLL",series:Yt.Price,calcParams:[20,2],precision:2,shouldOhlc:!0,figures:[{key:"up",title:"UP: ",type:"line"},{key:"mid",title:"MID: ",type:"line"},{key:"dn",title:"DN: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=i[0]-1,r=0;return t.map(function(e,a){var o=e.close,s={};if(r+=o,a>=n){s.mid=r/i[0];var l=Ee(t.slice(a-n,a+1),s.mid);s.up=s.mid+i[1]*l,s.dn=s.mid-i[1]*l,r-=t[a-n].close}return s})}},Pe={name:"BRAR",shortName:"BRAR",calcParams:[26],figures:[{key:"br",title:"BR: ",type:"line"},{key:"ar",title:"AR: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=0,o=0;return t.map(function(e,s){var l,c,u={},d=e.high,h=e.low,p=e.open,f=(null!==(l=t[s-1])&&void 0!==l?l:e).close;if(a+=d-p,o+=p-h,n+=d-f,r+=f-h,s>=i[0]-1){u.ar=0!==o?a/o*100:0,u.br=0!==r?n/r*100:0;var v=t[s-(i[0]-1)],g=v.high,m=v.low,y=v.open,b=(null!==(c=t[s-i[0]])&&void 0!==c?c:t[s-(i[0]-1)]).close;n-=g-b,r-=b-m,a-=g-y,o-=y-m}return u})}},Le={name:"BBI",shortName:"BBI",series:Yt.Price,precision:2,calcParams:[3,6,12,24],shouldOhlc:!0,figures:[{key:"bbi",title:"BBI: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=Math.max.apply(Math,Z([],q(i),!1)),r=[],a=[];return t.map(function(e,o){var s={},l=e.close;if(i.forEach(function(e,i){var n;r[i]=(null!==(n=r[i])&&void 0!==n?n:0)+l,o>=e-1&&(a[i]=r[i]/e,r[i]-=t[o-(e-1)].close)}),o>=n-1){var c=0;a.forEach(function(t){c+=t}),s.bbi=c/4}return s})}},Re={name:"CCI",shortName:"CCI",calcParams:[20],figures:[{key:"cci",title:"CCI: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=i[0]-1,r=0,a=[];return t.map(function(e,o){var s={},l=(e.high+e.low+e.close)/3;if(r+=l,a.push(l),o>=n){var c=r/i[0],u=a.slice(o-n,o+1),d=0;u.forEach(function(t){d+=Math.abs(t-c)});var h=d/i[0];s.cci=0!==h?(l-c)/h/.015:0;var p=(t[o-n].high+t[o-n].low+t[o-n].close)/3;r-=p}return s})}},Fe={name:"CR",shortName:"CR",calcParams:[26,10,20,40,60],figures:[{key:"cr",title:"CR: ",type:"line"},{key:"ma1",title:"MA1: ",type:"line"},{key:"ma2",title:"MA2: ",type:"line"},{key:"ma3",title:"MA3: ",type:"line"},{key:"ma4",title:"MA4: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=Math.ceil(i[1]/2.5+1),r=Math.ceil(i[2]/2.5+1),a=Math.ceil(i[3]/2.5+1),o=Math.ceil(i[4]/2.5+1),s=0,l=[],c=0,u=[],d=0,h=[],p=0,f=[],v=[];return t.forEach(function(e,g){var m,y,b,x,_,w={},C=null!==(m=t[g-1])&&void 0!==m?m:e,S=(C.high+C.close+C.low+C.open)/4,k=Math.max(0,e.high-S),A=Math.max(0,S-e.low);g>=i[0]-1&&(w.cr=0!==A?k/A*100:0,s+=w.cr,c+=w.cr,d+=w.cr,p+=w.cr,g>=i[0]+i[1]-2&&(l.push(s/i[1]),g>=i[0]+i[1]+n-3&&(w.ma1=l[l.length-1-n]),s-=null!==(y=v[g-(i[1]-1)].cr)&&void 0!==y?y:0),g>=i[0]+i[2]-2&&(u.push(c/i[2]),g>=i[0]+i[2]+r-3&&(w.ma2=u[u.length-1-r]),c-=null!==(b=v[g-(i[2]-1)].cr)&&void 0!==b?b:0),g>=i[0]+i[3]-2&&(h.push(d/i[3]),g>=i[0]+i[3]+a-3&&(w.ma3=h[h.length-1-a]),d-=null!==(x=v[g-(i[3]-1)].cr)&&void 0!==x?x:0),g>=i[0]+i[4]-2&&(f.push(p/i[4]),g>=i[0]+i[4]+o-3&&(w.ma4=f[f.length-1-o]),p-=null!==(_=v[g-(i[4]-1)].cr)&&void 0!==_?_:0)),v.push(w)}),v}},Be={name:"DMA",shortName:"DMA",calcParams:[10,50,10],figures:[{key:"dma",title:"DMA: ",type:"line"},{key:"ama",title:"AMA: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=Math.max(i[0],i[1]),r=0,a=0,o=0,s=[];return t.forEach(function(e,l){var c,u={},d=e.close;r+=d,a+=d;var h=0,p=0;if(l>=i[0]-1&&(h=r/i[0],r-=t[l-(i[0]-1)].close),l>=i[1]-1&&(p=a/i[1],a-=t[l-(i[1]-1)].close),l>=n-1){var f=h-p;u.dma=f,o+=f,l>=n+i[2]-2&&(u.ama=o/i[2],o-=null!==(c=s[l-(i[2]-1)].dma)&&void 0!==c?c:0)}s.push(u)}),s}},Ne={name:"DMI",shortName:"DMI",calcParams:[14,6],figures:[{key:"pdi",title:"PDI: ",type:"line"},{key:"mdi",title:"MDI: ",type:"line"},{key:"adx",title:"ADX: ",type:"line"},{key:"adxr",title:"ADXR: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=0,o=0,s=0,l=0,c=0,u=0,d=[];return t.forEach(function(e,h){var p,f,v={},g=null!==(p=t[h-1])&&void 0!==p?p:e,m=g.close,y=e.high,b=e.low,x=y-b,_=Math.abs(y-m),w=Math.abs(m-b),C=y-g.high,S=g.low-b,k=Math.max(Math.max(x,_),w),A=C>0&&C>S?C:0,T=S>0&&S>C?S:0;if(n+=k,r+=A,a+=T,h>=i[0]-1){h>i[0]-1?(o=o-o/i[0]+k,s=s-s/i[0]+A,l=l-l/i[0]+T):(o=n,s=r,l=a);var M=0,I=0;0!==o&&(M=100*s/o,I=100*l/o),v.pdi=M,v.mdi=I;var E=0;I+M!==0&&(E=Math.abs(I-M)/(I+M)*100),c+=E,h>=2*i[0]-2&&(u=h>2*i[0]-2?(u*(i[0]-1)+E)/i[0]:c/i[0],v.adx=u,h>=2*i[0]+i[1]-3&&(v.adxr=((null!==(f=d[h-(i[1]-1)].adx)&&void 0!==f?f:0)+u)/2))}d.push(v)}),d}},Oe={name:"EMV",shortName:"EMV",calcParams:[14,9],figures:[{key:"emv",title:"EMV: ",type:"line"},{key:"maEmv",title:"MAEMV: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=[];return t.map(function(e,a){var o,s={};if(a>0){var l=t[a-1],c=e.high,u=e.low,d=null!==(o=e.volume)&&void 0!==o?o:0,h=(c+u)/2-(l.high+l.low)/2;if(0===d||c-u===0)s.emv=0;else{var p=d/1e8/(c-u);s.emv=h/p}n+=s.emv,r.push(s.emv),a>=i[0]&&(s.maEmv=n/i[0],n-=r[a-i[0]])}return s})}},ze={name:"EMA",shortName:"EMA",series:Yt.Price,calcParams:[6,12,20],precision:2,shouldOhlc:!0,figures:[{key:"ema1",title:"EMA6: ",type:"line"},{key:"ema2",title:"EMA12: ",type:"line"},{key:"ema3",title:"EMA20: ",type:"line"}],regenerateFigures:function(t){return t.map(function(t,e){return{key:"ema".concat(e+1),title:"EMA".concat(t,": "),type:"line"}})},calc:function(t,e){var i=e.calcParams,n=e.figures,r=0,a=[];return t.map(function(t,e){var o={},s=t.close;return r+=s,i.forEach(function(t,i){e>=t-1&&(a[i]=e>t-1?(2*s+(t-1)*a[i])/(t+1):r/t,o[n[i].key]=a[i])}),o})}},We={name:"MTM",shortName:"MTM",calcParams:[12,6],figures:[{key:"mtm",title:"MTM: ",type:"line"},{key:"maMtm",title:"MAMTM: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=[];return t.forEach(function(e,a){var o,s={};if(a>=i[0]){var l=e.close,c=t[a-i[0]].close;s.mtm=l-c,n+=s.mtm,a>=i[0]+i[1]-1&&(s.maMtm=n/i[1],n-=null!==(o=r[a-(i[1]-1)].mtm)&&void 0!==o?o:0)}r.push(s)}),r}},Ve={name:"MA",shortName:"MA",series:Yt.Price,calcParams:[5,10,30,60],precision:2,shouldOhlc:!0,figures:[{key:"ma5",title:"MA5: ",type:"line"},{key:"ma10",title:"MA10: ",type:"line"},{key:"ma30",title:"MA30: ",type:"line"},{key:"ma60",title:"MA60: ",type:"line"}],regenerateFigures:function(t){return t.map(function(t,e){return{key:"ma".concat(e+1),title:"MA".concat(t,": "),type:"line"}})},calc:function(t,e){var i=e.calcParams,n=e.figures,r=[];return t.map(function(e,a){var o={},s=e.close;return i.forEach(function(e,i){var l;r[i]=(null!==(l=r[i])&&void 0!==l?l:0)+s,a>=e-1&&(o[n[i].key]=r[i]/e,r[i]-=t[a-(e-1)].close)}),o})}},$e={name:"MACD",shortName:"MACD",calcParams:[12,26,9],figures:[{key:"dif",title:"DIF: ",type:"line"},{key:"dea",title:"DEA: ",type:"line"},{key:"macd",title:"MACD: ",type:"bar",baseValue:0,styles:function(t,e,i){var n,r,a,o,s,l=t.prev,c=t.current,u=null!==(r=null===(n=l.indicatorData)||void 0===n?void 0:n.macd)&&void 0!==r?r:Number.MIN_SAFE_INTEGER,d=null!==(o=null===(a=c.indicatorData)||void 0===a?void 0:a.macd)&&void 0!==o?o:Number.MIN_SAFE_INTEGER;s=d>0?Ft(e.styles,"bars[0].upColor",i.bars[0].upColor):d<0?Ft(e.styles,"bars[0].downColor",i.bars[0].downColor):Ft(e.styles,"bars[0].noChangeColor",i.bars[0].noChangeColor);var h=u=r[0]-1&&(i=e>r[0]-1?(2*d+(r[0]-1)*i)/(r[0]+1):a/r[0]),e>=r[1]-1&&(n=e>r[1]-1?(2*d+(r[1]-1)*n)/(r[1]+1):a/r[1]),e>=c-1&&(o=i-n,u.dif=o,s+=o,e>=c+r[2]-2&&(l=e>c+r[2]-2?(2*o+l*(r[2]-1))/(r[2]+1):s/r[2],u.macd=2*(o-l),u.dea=l)),u})}},He={name:"OBV",shortName:"OBV",calcParams:[30],figures:[{key:"obv",title:"OBV: ",type:"line"},{key:"maObv",title:"MAOBV: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=[];return t.forEach(function(e,o){var s,l,c,u,d=null!==(s=t[o-1])&&void 0!==s?s:e;e.closed.close&&(r+=null!==(c=e.volume)&&void 0!==c?c:0);var h={obv:r};n+=r,o>=i[0]-1&&(h.maObv=n/i[0],n-=null!==(u=a[o-(i[0]-1)].obv)&&void 0!==u?u:0),a.push(h)}),a}},Ke={name:"PVT",shortName:"PVT",figures:[{key:"pvt",title:"PVT: ",type:"line"}],calc:function(t){var e=0;return t.map(function(i,n){var r,a,o={},s=i.close,l=null!==(r=i.volume)&&void 0!==r?r:1,c=(null!==(a=t[n-1])&&void 0!==a?a:i).close,u=0,d=c*l;return 0!==d&&(u=(s-c)/d),e+=u,o.pvt=e,o})}},Ye={name:"PSY",shortName:"PSY",calcParams:[12,6],figures:[{key:"psy",title:"PSY: ",type:"line"},{key:"maPsy",title:"MAPSY: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=[],o=[];return t.forEach(function(e,s){var l,c,u={},d=(null!==(l=t[s-1])&&void 0!==l?l:e).close,h=e.close-d>0?1:0;a.push(h),n+=h,s>=i[0]-1&&(u.psy=n/i[0]*100,r+=u.psy,s>=i[0]+i[1]-2&&(u.maPsy=r/i[1],r-=null!==(c=o[s-(i[1]-1)].psy)&&void 0!==c?c:0),n-=a[s-(i[0]-1)]),o.push(u)}),o}},Xe={name:"ROC",shortName:"ROC",calcParams:[12,6],figures:[{key:"roc",title:"ROC: ",type:"line"},{key:"maRoc",title:"MAROC: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=[],r=0;return t.forEach(function(e,a){var o,s,l={};if(a>=i[0]-1){var c=e.close,u=(null!==(o=t[a-i[0]])&&void 0!==o?o:t[a-(i[0]-1)]).close;l.roc=0!==u?(c-u)/u*100:0,r+=l.roc,a>=i[0]-1+i[1]-1&&(l.maRoc=r/i[1],r-=null!==(s=n[a-(i[1]-1)].roc)&&void 0!==s?s:0)}n.push(l)}),n}},Ue={name:"RSI",shortName:"RSI",calcParams:[6,12,24],figures:[{key:"rsi1",title:"RSI1: ",type:"line"},{key:"rsi2",title:"RSI2: ",type:"line"},{key:"rsi3",title:"RSI3: ",type:"line"}],regenerateFigures:function(t){return t.map(function(t,e){var i=e+1;return{key:"rsi".concat(i),title:"RSI".concat(i,": "),type:"line"}})},calc:function(t,e){var i=e.calcParams,n=e.figures,r=[],a=[];return t.map(function(e,o){var s,l={},c=(null!==(s=t[o-1])&&void 0!==s?s:e).close,u=e.close-c;return i.forEach(function(e,i){var s,c,d;if(u>0?r[i]=(null!==(s=r[i])&&void 0!==s?s:0)+u:a[i]=(null!==(c=a[i])&&void 0!==c?c:0)+Math.abs(u),o>=e-1){0!==a[i]?l[n[i].key]=100-100/(1+r[i]/a[i]):l[n[i].key]=0;var h=t[o-(e-1)],p=null!==(d=t[o-e])&&void 0!==d?d:h,f=h.close-p.close;f>0?r[i]-=f:a[i]-=Math.abs(f)}}),l})}},Ge={name:"SMA",shortName:"SMA",series:Yt.Price,calcParams:[12,2],precision:2,figures:[{key:"sma",title:"SMA: ",type:"line"}],shouldOhlc:!0,calc:function(t,e){var i=e.calcParams,n=0,r=0;return t.map(function(t,e){var a={},o=t.close;return n+=o,e>=i[0]-1&&(r=e>i[0]-1?(o*i[1]+r*(i[0]-i[1]+1))/(i[0]+1):n/i[0],a.sma=r),a})}},je={name:"KDJ",shortName:"KDJ",calcParams:[9,3,3],figures:[{key:"k",title:"K: ",type:"line"},{key:"d",title:"D: ",type:"line"},{key:"j",title:"J: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=[];return t.forEach(function(e,r){var a,o,s,l,c={},u=e.close;if(r>=i[0]-1){var d=me(t.slice(r-(i[0]-1),r+1),"high","low"),h=d[0],p=d[1],f=h-p,v=(u-p)/(0===f?1:f)*100;c.k=((i[1]-1)*(null!==(o=null===(a=n[r-1])||void 0===a?void 0:a.k)&&void 0!==o?o:50)+v)/i[1],c.d=((i[2]-1)*(null!==(l=null===(s=n[r-1])||void 0===s?void 0:s.d)&&void 0!==l?l:50)+c.k)/i[2],c.j=3*c.k-2*c.d}n.push(c)}),n}},qe={name:"SAR",shortName:"SAR",series:Yt.Price,calcParams:[2,2,20],precision:2,shouldOhlc:!0,figures:[{key:"sar",title:"SAR: ",type:"circle",styles:function(t,e,i){var n,r,a=t.current,o=null!==(r=null===(n=a.indicatorData)||void 0===n?void 0:n.sar)&&void 0!==r?r:Number.MIN_SAFE_INTEGER,s=a.kLineData,l=((null===s||void 0===s?void 0:s.high)+(null===s||void 0===s?void 0:s.low))/2,c=oe.low?(c=s,o=n,s=-100,l=!l):c>p&&(c=p)}else{(-100===s||s>h)&&(s=h,o=Math.min(o+r,a)),c=u+o*(s-u);var f=Math.max(t[Math.max(1,i)-1].high,d);c=a[0]-1&&(i=e>a[0]-1?(2*p+(a[0]-1)*i)/(a[0]+1):o/a[0],s+=i,e>=2*a[0]-2&&(n=e>2*a[0]-2?(2*i+(a[0]-1)*n)/(a[0]+1):s/a[0],l+=n,e>=3*a[0]-3))){var f=void 0,v=0;e>3*a[0]-3?(f=(2*n+(a[0]-1)*r)/(a[0]+1),v=(f-r)/r*100):f=l/a[0],r=f,h.trix=v,c+=v,e>=3*a[0]+a[1]-4&&(h.maTrix=c/a[1],c-=null!==(d=u[e-(a[1]-1)].trix)&&void 0!==d?d:0)}u.push(h)}),u}};function Je(){return{key:"volume",title:"VOLUME: ",type:"bar",baseValue:0,styles:function(t,e,i){var n=t.current.kLineData,r=Ft(e.styles,"bars[0].noChangeColor",i.bars[0].noChangeColor);return Mt(n)&&(n.close>n.open?r=Ft(e.styles,"bars[0].upColor",i.bars[0].upColor):n.close=e-1&&(l[n[i].key]=r[i]/e,r[i]-=null!==(c=t[a-(e-1)].volume)&&void 0!==c?c:0)}),l})}},ti={name:"VR",shortName:"VR",calcParams:[26,6],figures:[{key:"vr",title:"VR: ",type:"line"},{key:"maVr",title:"MAVR: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=0,o=0,s=[];return t.forEach(function(e,l){var c,u,d,h,p,f={},v=e.close,g=(null!==(c=t[l-1])&&void 0!==c?c:e).close,m=null!==(u=e.volume)&&void 0!==u?u:0;if(v>g?n+=m:v=i[0]-1){var y=a/2;f.vr=r+y===0?0:(n+y)/(r+y)*100,o+=f.vr,l>=i[0]+i[1]-2&&(f.maVr=o/i[1],o-=null!==(d=s[l-(i[1]-1)].vr)&&void 0!==d?d:0);var b=t[l-(i[0]-1)],x=null!==(h=t[l-i[0]])&&void 0!==h?h:b,_=b.close,w=null!==(p=b.volume)&&void 0!==p?p:0;_>x.close?n-=w:_=s){var l=me(t.slice(r-s,r+1),"high","low"),c=l[0],u=l[1],d=c-u;a[n[i].key]=0===d?0:(o-c)/d*100}}),a})}},ii={},ni=[Te,Me,Ie,De,Pe,Le,Re,Fe,Be,Ne,Oe,ze,We,Ve,$e,He,Ke,Ye,Xe,Ue,Ge,je,qe,Ze,Qe,ti,ei];function ri(t){ii[t.name]=jt.extend(t)}function ai(t){var e;return null!==(e=ii[t])&&void 0!==e?e:null}ni.forEach(function(t){ii[t.name]=jt.extend(t)});var oi=function(){function t(t){this._instances=new Map,this._chartStore=t}return t.prototype._overrideInstance=function(t,e){var i=e.shortName,n=e.series,r=e.calcParams,a=e.precision,o=e.figures,s=e.minValue,l=e.maxValue,c=e.shouldOhlc,u=e.shouldFormatBigNumber,d=e.visible,h=e.zLevel,p=e.styles,f=e.extendData,v=e.regenerateFigures,g=e.createTooltipDataSource,m=e.draw,y=e.calc,b=!1;Et(i)&&t.setShortName(i)&&(b=!0),Mt(n)&&t.setSeries(n)&&(b=!0);var x=!1;St(r)&&t.setCalcParams(r)&&(b=!0,x=!0),St(o)&&t.setFigures(o)&&(b=!0,x=!0),void 0!==s&&t.setMinValue(s)&&(b=!0),void 0!==l&&t.setMinValue(l)&&(b=!0),Tt(a)&&t.setPrecision(a)&&(b=!0),It(c)&&t.setShouldOhlc(c)&&(b=!0),It(u)&&t.setShouldFormatBigNumber(u)&&(b=!0),It(d)&&t.setVisible(d)&&(b=!0);var _=!1;return Tt(h)&&t.setZLevel(h)&&(b=!0,_=!0),Mt(p)&&t.setStyles(p)&&(b=!0),void 0!==f&&t.setExtendData(f)&&(b=!0,x=!0),void 0!==v&&t.setRegenerateFigures(v)&&(b=!0),void 0!==g&&t.setCreateTooltipDataSource(g)&&(b=!0),void 0!==m&&t.setDraw(m)&&(b=!0),kt(y)&&(t.calc=y,x=!0),[b,x,_]},t.prototype._sort=function(t){var e;Et(t)?null===(e=this._instances.get(t))||void 0===e||e.sort(function(t,e){return t.zLevel-e.zLevel}):this._instances.forEach(function(t){t.sort(function(t,e){return t.zLevel-e.zLevel})})},t.prototype.addInstance=function(t,e,i){return U(this,void 0,void 0,function(){var n,r,a,o,s;return G(this,function(l){switch(l.label){case 0:return n=t.name,r=this._instances.get(e),Mt(r)?(a=r.find(function(t){return t.name===n}),Mt(a)?[4,Promise.reject(new Error("Duplicate indicators."))]:[3,2]):[3,2];case 1:return[2,l.sent()];case 2:return Mt(r)||(r=[]),o=ai(n),s=new o,this.synchronizeSeriesPrecision(s),this._overrideInstance(s,t),i||(r=[]),r.push(s),this._instances.set(e,r),this._sort(e),[4,s.calcIndicator(this._chartStore.getDataList())];case 3:return[2,l.sent()]}})})},t.prototype.getInstances=function(t){var e;return null!==(e=this._instances.get(t))&&void 0!==e?e:[]},t.prototype.removeInstance=function(t,e){var i,n=!1,r=this._instances.get(t);if(Mt(r)){if(Et(e)){var a=r.findIndex(function(t){return t.name===e});a>-1&&(r.splice(a,1),n=!0)}else this._instances.set(t,[]),n=!0;0===(null===(i=this._instances.get(t))||void 0===i?void 0:i.length)&&this._instances.delete(t)}return n},t.prototype.hasInstances=function(t){return this._instances.has(t)},t.prototype.calcInstance=function(t,e){return U(this,void 0,void 0,function(){var i,n,r,a,o=this;return G(this,function(s){switch(s.label){case 0:return i=[],Et(t)?Et(e)?(n=this._instances.get(e),Mt(n)&&(r=n.find(function(e){return e.name===t}),Mt(r)&&i.push(r.calcIndicator(this._chartStore.getDataList())))):this._instances.forEach(function(e){var n=e.find(function(e){return e.name===t});Mt(n)&&i.push(n.calcIndicator(o._chartStore.getDataList()))}):this._instances.forEach(function(t){t.forEach(function(t){i.push(t.calcIndicator(o._chartStore.getDataList()))})}),[4,Promise.all(i)];case 1:return a=s.sent(),[2,a.includes(!0)]}})})},t.prototype.getInstanceByPaneId=function(t,e){var i,n,r=function(t){var e=new Map;return t.forEach(function(t){e.set(t.name,t)}),e};if(Et(t)){var a=null!==(i=this._instances.get(t))&&void 0!==i?i:[];return Et(e)?null!==(n=null===a||void 0===a?void 0:a.find(function(t){return t.name===e}))&&void 0!==n?n:null:r(a)}var o=new Map;return this._instances.forEach(function(t,e){o.set(e,r(t))}),o},t.prototype.synchronizeSeriesPrecision=function(t){var e=this._chartStore.getPrecision(),i=e.price,n=e.volume,r=function(t){switch(t.series){case Yt.Price:t.setPrecision(i,!0);break;case Yt.Volume:t.setPrecision(n,!0);break}};Mt(t)?r(t):this._instances.forEach(function(t){t.forEach(function(t){r(t)})})},t.prototype.override=function(t,e){return U(this,void 0,void 0,function(){var i,n,r,a,o,s,l,c=this;return G(this,function(u){switch(u.label){case 0:return i=t.name,n=new Map,null!==e?(r=this._instances.get(e),Mt(r)&&n.set(e,r)):n=this._instances,a=!1,o=[],s=!1,n.forEach(function(e){var n=e.find(function(t){return t.name===i});if(Mt(n)){var r=c._overrideInstance(n,t);r[2]&&(s=!0),r[1]?o.push(n.calcIndicator(c._chartStore.getDataList())):r[0]&&(a=!0)}}),s&&this._sort(),[4,Promise.all(o)];case 1:return l=u.sent(),[2,[a,l.includes(!0)]]}})})},t}(),si=function(){function t(t){this._crosshair={},this._activeIcon=null,this._chartStore=t}return t.prototype.setCrosshair=function(t,e){var i,n,r=null!==e&&void 0!==e?e:{},a=r.notInvalidate,o=r.notExecuteAction,s=this._chartStore.getDataList(),l=null!==t&&void 0!==t?t:{};Tt(l.x)?(i=this._chartStore.getTimeScaleStore().coordinateToDataIndex(l.x),n=i<0?0:i>s.length-1?s.length-1:i):(i=s.length-1,n=i);var c=s[n],u=this._chartStore.getTimeScaleStore().dataIndexToCoordinate(i),d={x:this._crosshair.x,y:this._crosshair.y,paneId:this._crosshair.paneId};this._crosshair=X(X({},l),{realX:u,kLineData:c,realDataIndex:i,dataIndex:n}),d.x===l.x&&d.y===l.y&&d.paneId===l.paneId||(null===c||null!==o&&void 0!==o&&o||this._chartStore.getChart().crosshairChange(this._crosshair),null!==a&&void 0!==a&&a||this._chartStore.getChart().updatePane(1))},t.prototype.recalculateCrosshair=function(t){this.setCrosshair(this._crosshair,{notInvalidate:t})},t.prototype.getCrosshair=function(){return this._crosshair},t.prototype.setActiveIcon=function(t){this._activeIcon=null!==t&&void 0!==t?t:null},t.prototype.getActiveIcon=function(){return this._activeIcon},t.prototype.clear=function(){this.setCrosshair({},{notInvalidate:!0}),this.setActiveIcon()},t}(),li={name:"fibonacciLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e,i=t.coordinates,n=t.bounding,r=t.overlay,a=t.precision,o=t.thousandsSeparator,s=t.decimalFoldThreshold,l=t.yAxis,c=r.points;if(i.length>0){var u=null===(e=null===l||void 0===l?void 0:l.isInCandle())||void 0===e||e?a.price:a.excludePriceVolumeMax,d=[],h=[],p=0,f=n.width;if(i.length>1&&Tt(c[0].value)&&Tt(c[1].value)){var v=[1,.786,.618,.5,.382,.236,0],g=i[0].y-i[1].y,m=c[0].value-c[1].value;v.forEach(function(t){var e,n=i[1].y+g*t,r=Wt(zt(((null!==(e=c[1].value)&&void 0!==e?e:0)+m*t).toFixed(u),o),s);d.push({coordinates:[{x:p,y:n},{x:f,y:n}]}),h.push({x:p,y:n,text:"".concat(r," (").concat((100*t).toFixed(1),"%)"),baseline:"bottom"})})}return[{type:"line",attrs:d},{type:"text",isCheckEvent:!1,attrs:h}]}return[]}},ci={name:"horizontalRayLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates,i=t.bounding,n={x:0,y:e[0].y};return Mt(e[1])&&e[0].x-1)for(var r=n;r>-1;r--)if(this._children[r].dispatchEvent(t,e,i))return!0;return this.onEvent(t,e,i)},t.prototype.addChild=function(t){return this._children.push(t),this},t.prototype.clear=function(){this._children=[]},t}(),pi=2,fi=function(t){function e(e){var i=t.call(this)||this;return i.attrs=e.attrs,i.styles=e.styles,i}return B(e,t),e.prototype.checkEventOn=function(t){return this.checkEventOnImp(t,this.attrs,this.styles)},e.prototype.setAttrs=function(t){return this.attrs=t,this},e.prototype.setStyles=function(t){return this.styles=t,this},e.prototype.draw=function(t){this.drawImp(t,this.attrs,this.styles)},e.extend=function(t){var i=function(e){function i(){return null!==e&&e.apply(this,arguments)||this}return B(i,e),i.prototype.checkEventOnImp=function(e,i,n){return t.checkEventOn(e,i,n)},i.prototype.drawImp=function(e,i,n){t.draw(e,i,n)},i}(e);return i},e}(hi);function vi(t,e){var i=[];i=i.concat(e);for(var n=0;n1)for(var a=1;a0&&i<1?i:0:i?.5:0;if(r>0&&n>2){for(var a=e[0].x,o=e[0].y,s=1;s1&&(2!==i.length||i[0].x!==i[1].x&&i[0].y!==i[1].y?(t.save(),c%2===1&&t.translate(.5,.5),t.beginPath(),t.moveTo(i[0].x,i[0].y),bi(t,i,s),t.stroke(),t.closePath(),t.restore()):(t.beginPath(),i[0].x===i[1].x?(t.moveTo(i[0].x+f,i[0].y),t.lineTo(i[1].x+f,i[1].y)):(t.moveTo(i[0].x,i[0].y+f),t.lineTo(i[1].x,i[1].y+f)),t.stroke(),t.closePath()))})}var _i={name:"line",checkEventOn:vi,draw:function(t,e,i){xi(t,e,i)}};function wi(t,e,i){var n=null!==i&&void 0!==i?i:0,r=[];if(t.length>1)if(t[0].x===t[1].x){var a=0,o=e.height;if(r.push({coordinates:[{x:t[0].x,y:a},{x:t[0].x,y:o}]}),t.length>2){r.push({coordinates:[{x:t[2].x,y:a},{x:t[2].x,y:o}]});for(var s=t[0].x-t[2].x,l=0;l2){var v=t[2].y-p*t[2].x;r.push({coordinates:[{x:u,y:u*p+v},{x:d,y:d*p+v}]});for(s=f-v,l=0;l1){var i=void 0;return i=t[0].x===t[1].x&&t[0].y!==t[1].y?t[0].yt[1].x?{x:0,y:mi(t[0],t[1],{x:0,y:t[0].y})}:{x:e.width,y:mi(t[0],t[1],{x:e.width,y:t[0].y})},{coordinates:[t[0],i]}}return[]}var Ti={name:"rayLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates,i=t.bounding;return[{type:"line",attrs:Ai(e,i)}]}},Mi={name:"segment",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates;return 2===e.length?[{type:"line",attrs:{coordinates:e}}]:[]}},Ii={name:"straightLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates,i=t.bounding;return 2===e.length?e[0].x===e[1].x?[{type:"line",attrs:{coordinates:[{x:e[0].x,y:0},{x:e[0].x,y:i.height}]}}]:[{type:"line",attrs:{coordinates:[{x:0,y:mi(e[0],e[1],{x:0,y:e[0].y})},{x:i.width,y:mi(e[0],e[1],{x:i.width,y:e[0].y})}]}}]:[]}},Ei={name:"verticalRayLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates,i=t.bounding;if(2===e.length){var n={x:e[0].x,y:0};return e[0].y0&&l.set(e[0],n)};try{for(var u=j(this._instances),d=u.next();!d.done;d=u.next()){var h=d.value;c(h)}}catch(f){e={error:f}}finally{try{d&&!d.done&&(i=u.return)&&i.call(u)}finally{if(e)throw e.error}}this._instances=l}else this._instances.forEach(function(t,e){a.push(e),t.forEach(function(t){var e;null===(e=t.onRemoved)||void 0===e||e.call(t,{overlay:t})})}),this._instances.clear();if(a.length>0){var p=this._chartStore.getChart();a.forEach(function(t){p.updatePane(1,t)}),p.updatePane(1,Vi.X_AXIS)}},t.prototype.setPressedInstanceInfo=function(t){this._pressedInstanceInfo=t},t.prototype.getPressedInstanceInfo=function(){return this._pressedInstanceInfo},t.prototype.updatePointPosition=function(t,e){if(t>0){var i=this._chartStore.getDataList();this._instances.forEach(function(n){n.forEach(function(n){var r=n.points;r.forEach(function(n){if(!Mt(n.timestamp)&&Mt(n.dataIndex)){e===Kt.Forward&&(n.dataIndex=n.dataIndex+t);var r=i[n.dataIndex];n.timestamp=null===r||void 0===r?void 0:r.timestamp}})})})}},t.prototype.setHoverInstanceInfo=function(t,e){var i,n,r=this._hoverInstanceInfo,a=r.instance,o=r.figureType,s=r.figureKey,l=r.figureIndex;if(((null===a||void 0===a?void 0:a.id)!==(null===(i=t.instance)||void 0===i?void 0:i.id)||o!==t.figureType||l!==t.figureIndex)&&(this._hoverInstanceInfo=t,(null===a||void 0===a?void 0:a.id)!==(null===(n=t.instance)||void 0===n?void 0:n.id))){var c=!1,u=!1;null!==a&&(u=!0,kt(a.onMouseLeave)&&(a.onMouseLeave(X({overlay:a,figureKey:s,figureIndex:l},e)),c=!0)),null!==t.instance&&(u=!0,kt(t.instance.onMouseEnter)&&(t.instance.onMouseEnter(X({overlay:t.instance,figureKey:t.figureKey,figureIndex:t.figureIndex},e)),c=!0)),u&&this._sort(),c||this._chartStore.getChart().updatePane(1)}},t.prototype.getHoverInstanceInfo=function(){return this._hoverInstanceInfo},t.prototype.setClickInstanceInfo=function(t,e){var i,n,r,a,o,s,l,c,u,d=this._clickInstanceInfo,h=d.paneId,p=d.instance,f=d.figureType,v=d.figureKey,g=d.figureIndex;if(null!==(n=null===(i=t.instance)||void 0===i?void 0:i.isDrawing())&&void 0!==n&&n||null===(a=null===(r=t.instance)||void 0===r?void 0:r.onClick)||void 0===a||a.call(r,X({overlay:t.instance,figureKey:t.figureKey,figureIndex:t.figureIndex},e)),((null===p||void 0===p?void 0:p.id)!==(null===(o=t.instance)||void 0===o?void 0:o.id)||f!==t.figureType||g!==t.figureIndex)&&(this._clickInstanceInfo=t,(null===p||void 0===p?void 0:p.id)!==(null===(s=t.instance)||void 0===s?void 0:s.id))){null===(l=null===p||void 0===p?void 0:p.onDeselected)||void 0===l||l.call(p,X({overlay:p,figureKey:v,figureIndex:g},e)),null===(u=null===(c=t.instance)||void 0===c?void 0:c.onSelected)||void 0===u||u.call(c,X({overlay:t.instance,figureKey:t.figureKey,figureIndex:t.figureIndex},e));var m=this._chartStore.getChart();m.updatePane(1,t.paneId),h!==t.paneId&&m.updatePane(1,h),m.updatePane(1,Vi.X_AXIS)}},t.prototype.getClickInstanceInfo=function(){return this._clickInstanceInfo},t.prototype.isEmpty=function(){return 0===this._instances.size&&null===this._progressInstanceInfo},t.prototype.isDrawing=function(){var t,e;return null!==this._progressInstanceInfo&&null!==(e=null===(t=this._progressInstanceInfo)||void 0===t?void 0:t.instance.isDrawing())&&void 0!==e&&e},t}(),Hi=function(){function t(){this._actions=new Map}return t.prototype.execute=function(t,e){var i;null===(i=this._actions.get(t))||void 0===i||i.execute(e)},t.prototype.subscribe=function(t,e){var i;this._actions.has(t)||this._actions.set(t,new Xt),null===(i=this._actions.get(t))||void 0===i||i.subscribe(e)},t.prototype.unsubscribe=function(t,e){var i=this._actions.get(t);Mt(i)&&(i.unsubscribe(e),i.isEmpty()&&this._actions.delete(t))},t.prototype.has=function(t){var e=this._actions.get(t);return Mt(e)&&!e.isEmpty()},t}(),Ki={grid:{horizontal:{color:"#EDEDED"},vertical:{color:"#EDEDED"}},candle:{priceMark:{high:{color:"#76808F"},low:{color:"#76808F"}},tooltip:{rect:{color:"#FEFEFE",borderColor:"#F2F3F5"},text:{color:"#76808F"}}},indicator:{tooltip:{text:{color:"#76808F"}}},xAxis:{axisLine:{color:"#DDDDDD"},tickText:{color:"#76808F"},tickLine:{color:"#DDDDDD"}},yAxis:{axisLine:{color:"#DDDDDD"},tickText:{color:"#76808F"},tickLine:{color:"#DDDDDD"}},separator:{color:"#DDDDDD"},crosshair:{horizontal:{line:{color:"#76808F"},text:{borderColor:"#686D76",backgroundColor:"#686D76"}},vertical:{line:{color:"#76808F"},text:{borderColor:"#686D76",backgroundColor:"#686D76"}}}},Yi={grid:{horizontal:{color:"#292929"},vertical:{color:"#292929"}},candle:{priceMark:{high:{color:"#929AA5"},low:{color:"#929AA5"}},tooltip:{rect:{color:"rgba(10, 10, 10, .6)",borderColor:"rgba(10, 10, 10, .6)"},text:{color:"#929AA5"}}},indicator:{tooltip:{text:{color:"#929AA5"}}},xAxis:{axisLine:{color:"#333333"},tickText:{color:"#929AA5"},tickLine:{color:"#333333"}},yAxis:{axisLine:{color:"#333333"},tickText:{color:"#929AA5"},tickLine:{color:"#333333"}},separator:{color:"#333333"},crosshair:{horizontal:{line:{color:"#929AA5"},text:{borderColor:"#373a40",backgroundColor:"#373a40"}},vertical:{line:{color:"#929AA5"},text:{borderColor:"#373a40",backgroundColor:"#373a40"}}}},Xi={light:Ki,dark:Yi};function Ui(t){var e;return null!==(e=Xi[t])&&void 0!==e?e:null}var Gi=function(){function t(t,e){this._styles=gt(),this._customApi=ne(),this._locale=re,this._precision={price:2,volume:0},this._thousandsSeparator=",",this._decimalFoldThreshold=3,this._dataList=[],this._loadMoreCallback=null,this._loadDataCallback=null,this._loading=!0,this._forwardMore=!0,this._backwardMore=!0,this._timeScaleStore=new Ae(this),this._indicatorStore=new oi(this),this._overlayStore=new $i(this),this._tooltipStore=new si(this),this._actionStore=new Hi,this._visibleDataList=[],this._chart=t,this.setOptions(e)}return t.prototype.adjustVisibleDataList=function(){this._visibleDataList=[];for(var t=this._timeScaleStore.getVisibleRange(),e=t.realFrom,i=t.realTo,n=e;n0&&(this._decimalFoldThreshold=u)}return this},t.prototype.getStyles=function(){return this._styles},t.prototype.getLocale=function(){return this._locale},t.prototype.getCustomApi=function(){return this._customApi},t.prototype.getThousandsSeparator=function(){return this._thousandsSeparator},t.prototype.getDecimalFoldThreshold=function(){return this._decimalFoldThreshold},t.prototype.getPrecision=function(){return this._precision},t.prototype.setPrecision=function(t){return this._precision=t,this._indicatorStore.synchronizeSeriesPrecision(),this},t.prototype.getDataList=function(){return this._dataList},t.prototype.getVisibleFirstData=function(){var t,e=this._timeScaleStore.getVisibleRange().from;return null!==(t=this._dataList[e])&&void 0!==t?t:null},t.prototype.getVisibleDataList=function(){return this._visibleDataList},t.prototype.addData=function(t,e,i){return U(this,void 0,void 0,function(){var n,r,a,o,s,l,c;return G(this,function(u){switch(u.label){case 0:if(n=!1,r=!1,a=0,St(t)){switch(a=t.length,e){case Kt.Init:this.clear(),this._dataList=t,this._forwardMore=null===i||void 0===i||i,this._timeScaleStore.resetOffsetRightDistance(),r=!0;break;case Kt.Backward:this._dataList=this._dataList.concat(t),this._backwardMore=null!==i&&void 0!==i&&i,r=a>0;break;case Kt.Forward:this._dataList=t.concat(this._dataList),this._forwardMore=null!==i&&void 0!==i&&i,r=a>0}this._loading=!1,n=!0}else o=this._dataList.length,s=t.timestamp,l=Ft(this._dataList[o-1],"timestamp",0),s>l?(this._dataList.push(t),c=this._timeScaleStore.getLastBarRightSideDiffBarCount(),c<0&&this._timeScaleStore.setLastBarRightSideDiffBarCount(--c),a=1,n=!0,r=!0):s===l&&(this._dataList[o-1]=t,n=!0,r=!0);if(!n)return[3,5];u.label=1;case 1:return u.trys.push([1,4,,5]),this._overlayStore.updatePointPosition(a,e),r?(this._timeScaleStore.adjustVisibleRange(),this._tooltipStore.recalculateCrosshair(!0),[4,this._indicatorStore.calcInstance()]):[3,3];case 2:u.sent(),this._chart.adjustPaneViewport(!1,!0,!0,!0),u.label=3;case 3:return this._actionStore.execute(Pt.OnDataReady),[3,5];case 4:return u.sent(),[3,5];case 5:return[2]}})})},t.prototype.setLoadMoreCallback=function(t){this._loadMoreCallback=t},t.prototype.executeLoadMoreCallback=function(t){this._forwardMore&&!this._loading&&Mt(this._loadMoreCallback)&&(this._loading=!0,this._loadMoreCallback(t))},t.prototype.setLoadDataCallback=function(t){this._loadDataCallback=t},t.prototype.executeLoadDataCallback=function(t){var e=this;if(!this._loading&&Mt(this._loadDataCallback)&&(this._forwardMore&&t.type===Kt.Forward||this._backwardMore&&t.type===Kt.Backward)){var i=function(i,n){e.addData(i,t.type,n).then(function(){}).catch(function(){})};this._loading=!0,this._loadDataCallback(X(X({},t),{callback:i}))}},t.prototype.clear=function(){this._forwardMore=!0,this._backwardMore=!0,this._loading=!0,this._dataList=[],this._visibleDataList=[],this._timeScaleStore.clear(),this._tooltipStore.clear()},t.prototype.getTimeScaleStore=function(){return this._timeScaleStore},t.prototype.getIndicatorStore=function(){return this._indicatorStore},t.prototype.getOverlayStore=function(){return this._overlayStore},t.prototype.getTooltipStore=function(){return this._tooltipStore},t.prototype.getActionStore=function(){return this._actionStore},t.prototype.getChart=function(){return this._chart},t}(),ji={MAIN:"main",X_AXIS:"xAxis",Y_AXIS:"yAxis",SEPARATOR:"separator"},qi=7;function Zi(){return U(this,void 0,void 0,function(){return G(this,function(t){switch(t.label){case 0:return[4,new Promise(function(t){var e=new ResizeObserver(function(i){t(i.every(function(t){return"devicePixelContentBoxSize"in t})),e.disconnect()});e.observe(document.body,{box:"device-pixel-content-box"})}).catch(function(){return!1})];case 1:return[2,t.sent()]}})})}var Ji=function(){function t(t,e){var i=this;this._supportedDevicePixelContentBox=!1,this._width=0,this._height=0,this._pixelWidth=0,this._pixelHeight=0,this._nextPixelWidth=0,this._nextPixelHeight=0,this._requestAnimationId=ae,this._mediaQueryListener=function(){var t=Vt(i._element);i._nextPixelWidth=Math.round(i._element.clientWidth*t),i._nextPixelHeight=Math.round(i._element.clientHeight*t),i._resetPixelRatio()},this._listener=e,this._element=he("canvas",t),this._ctx=this._element.getContext("2d",{willReadFrequently:!0}),Zi().then(function(t){i._supportedDevicePixelContentBox=t,t?(i._resizeObserver=new ResizeObserver(function(t){var e,n=t.find(function(t){return t.target===i._element}),r=null===(e=null===n||void 0===n?void 0:n.devicePixelContentBoxSize)||void 0===e?void 0:e[0];Mt(r)&&(i._nextPixelWidth=r.inlineSize,i._nextPixelHeight=r.blockSize,i._pixelWidth===i._nextPixelWidth&&i._pixelHeight===i._nextPixelHeight||i._resetPixelRatio())}),i._resizeObserver.observe(i._element,{box:"device-pixel-content-box"})):(i._mediaQueryList=window.matchMedia("(resolution: ".concat(Vt(i._element),"dppx)")),i._mediaQueryList.addListener(i._mediaQueryListener))}).catch(function(t){return!1})}return t.prototype._resetPixelRatio=function(){var t=this;this._executeListener(function(){var e=t._element.clientWidth,i=t._element.clientHeight,n=t._nextPixelWidth/e,r=t._nextPixelHeight/i;t._width=e,t._height=i,t._pixelWidth=t._nextPixelWidth,t._pixelHeight=t._nextPixelHeight,t._element.width=t._nextPixelWidth,t._element.height=t._nextPixelHeight,t._ctx.scale(n,r)})},t.prototype._executeListener=function(t){var e=this;this._requestAnimationId===ae&&(this._requestAnimationId=oe(function(){e._ctx.clearRect(0,0,e._width,e._height),null===t||void 0===t||t(),e._listener(),e._requestAnimationId=ae}))},t.prototype.update=function(t,e){if(this._width!==t||this._height!==e){if(this._element.style.width="".concat(t,"px"),this._element.style.height="".concat(e,"px"),!this._supportedDevicePixelContentBox){var i=Vt(this._element);this._nextPixelWidth=Math.round(t*i),this._nextPixelHeight=Math.round(e*i),this._resetPixelRatio()}}else this._executeListener()},t.prototype.getElement=function(){return this._element},t.prototype.getContext=function(){return this._ctx},t.prototype.destroy=function(){Mt(this._resizeObserver)&&this._resizeObserver.unobserve(this._element),Mt(this._mediaQueryList)&&this._mediaQueryList.removeListener(this._mediaQueryListener)},t}();function Qi(t){var e={width:0,height:0,left:0,right:0,top:0,bottom:0};return Mt(t)&&wt(e,t),e}var tn=function(t){function e(e,i){var n=t.call(this)||this;return n._bounding=Qi(),n._pane=i,n._rootContainer=e,n._container=n.createContainer(),e.appendChild(n._container),n}return B(e,t),e.prototype.setBounding=function(t){return wt(this._bounding,t),this},e.prototype.getContainer=function(){return this._container},e.prototype.getBounding=function(){return this._bounding},e.prototype.getPane=function(){return this._pane},e.prototype.update=function(t){this.updateImp(this._container,this._bounding,null!==t&&void 0!==t?t:3)},e.prototype.destroy=function(){this._rootContainer.removeChild(this._container)},e}(hi),en=function(t){function e(e,i){var n=t.call(this,e,i)||this;n._mainCanvas=new Ji({position:"absolute",top:"0",left:"0",zIndex:"2",boxSizing:"border-box"},function(){n.updateMain(n._mainCanvas.getContext())}),n._overlayCanvas=new Ji({position:"absolute",top:"0",left:"0",zIndex:"2",boxSizing:"border-box"},function(){n.updateOverlay(n._overlayCanvas.getContext())});var r=n.getContainer();return r.appendChild(n._mainCanvas.getElement()),r.appendChild(n._overlayCanvas.getElement()),n}return B(e,t),e.prototype.createContainer=function(){return he("div",{margin:"0",padding:"0",position:"absolute",top:"0",overflow:"hidden",boxSizing:"border-box",zIndex:"1"})},e.prototype.updateImp=function(t,e,i){var n=e.width,r=e.height,a=e.left;t.style.left="".concat(a,"px");var o=i,s=t.clientWidth,l=t.clientHeight;switch(n===s&&r===l||(t.style.width="".concat(n,"px"),t.style.height="".concat(r,"px"),o=3),o){case 0:this._mainCanvas.update(n,r);break;case 1:this._overlayCanvas.update(n,r);break;case 3:case 4:this._mainCanvas.update(n,r),this._overlayCanvas.update(n,r);break}},e.prototype.destroy=function(){this._mainCanvas.destroy(),this._overlayCanvas.destroy()},e.prototype.getImage=function(t){var e=this.getBounding(),i=e.width,n=e.height,r=he("canvas",{width:"".concat(i,"px"),height:"".concat(n,"px"),boxSizing:"border-box"}),a=r.getContext("2d"),o=Vt(r);return r.width=i*o,r.height=n*o,a.scale(o,o),a.drawImage(this._mainCanvas.getElement(),0,0,i,n),t&&a.drawImage(this._overlayCanvas.getElement(),0,0,i,n),r},e}(tn);function nn(t){return"transparent"===t||"none"===t||/^[rR][gG][Bb][Aa]\(([\s]*(2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?)[\s]*,){3}[\s]*0[\s]*\)$/.test(t)||/^[hH][Ss][Ll][Aa]\(([\s]*(360|3[0-5][0-9]|[012]?[0-9][0-9]?)[\s]*,)([\s]*((100|[0-9][0-9]?)%|0)[\s]*,){2}([\s]*0[\s]*)\)$/.test(t)}function rn(t,e){var i=[];i=i.concat(e);for(var n=0;ns*s))return!0}return!1}function an(t,e,i){var n=[];n=n.concat(e);var r=i.style,a=void 0===r?O.Fill:r,o=i.color,s=void 0===o?"currentColor":o,l=i.borderSize,c=void 0===l?1:l,u=i.borderColor,d=void 0===u?"currentColor":u,h=i.borderStyle,p=void 0===h?N.Solid:h,f=i.borderDashedValue,v=void 0===f?[2,2]:f,g=(a===O.Fill||i.style===O.StrokeFill)&&(!Et(s)||!nn(s));g&&(t.fillStyle=s,n.forEach(function(e){var i=e.x,n=e.y,r=e.r;t.beginPath(),t.arc(i,n,r,0,2*Math.PI),t.closePath(),t.fill()})),(a===O.Stroke||i.style===O.StrokeFill)&&c>0&&!nn(d)&&(t.strokeStyle=d,t.lineWidth=c,p===N.Dashed?t.setLineDash(v):t.setLineDash([]),n.forEach(function(e){var i=e.x,n=e.y,r=e.r;(!g||r>c)&&(t.beginPath(),t.arc(i,n,r,0,2*Math.PI),t.closePath(),t.stroke())}))}var on={name:"circle",checkEventOn:rn,draw:function(t,e,i){an(t,e,i)}};function sn(t,e){var i=[];i=i.concat(e);for(var n=0;nt.y!==a[s].y>t.y&&t.x<(a[s].x-a[o].x)*(t.y-a[o].y)/(a[s].y-a[o].y)+a[o].x&&(r=!r);if(r)return!0}return!1}function ln(t,e,i){var n=[];n=n.concat(e);var r=i.style,a=void 0===r?O.Fill:r,o=i.color,s=void 0===o?"currentColor":o,l=i.borderSize,c=void 0===l?1:l,u=i.borderColor,d=void 0===u?"currentColor":u,h=i.borderStyle,p=void 0===h?N.Solid:h,f=i.borderDashedValue,v=void 0===f?[2,2]:f;a!==O.Fill&&i.style!==O.StrokeFill||Et(s)&&nn(s)||(t.fillStyle=s,n.forEach(function(e){var i=e.coordinates;t.beginPath(),t.moveTo(i[0].x,i[0].y);for(var n=1;n0&&!nn(d)&&(t.strokeStyle=d,t.lineWidth=c,p===N.Dashed?t.setLineDash(v):t.setLineDash([]),n.forEach(function(e){var i=e.coordinates;t.beginPath(),t.moveTo(i[0].x,i[0].y);for(var n=1;n=a&&t.x<=a+o&&t.y>=s&&t.y<=s+l)return!0}return!1}function dn(t,e,i){var n,r=[];r=r.concat(e);var a=i.style,o=void 0===a?O.Fill:a,s=i.color,l=void 0===s?"transparent":s,c=i.borderSize,u=void 0===c?1:c,d=i.borderColor,h=void 0===d?"transparent":d,p=i.borderStyle,f=void 0===p?N.Solid:p,v=i.borderRadius,g=void 0===v?0:v,m=i.borderDashedValue,y=void 0===m?[2,2]:m,b=null!==(n=t.roundRect)&&void 0!==n?n:t.rect,x=(o===O.Fill||i.style===O.StrokeFill)&&(!Et(l)||!nn(l));if(x&&(t.fillStyle=l,r.forEach(function(e){var i=e.x,n=e.y,r=e.width,a=e.height;t.beginPath(),b.call(t,i,n,r,a,g),t.closePath(),t.fill()})),(o===O.Stroke||i.style===O.StrokeFill)&&u>0&&!nn(h)){t.strokeStyle=h,t.fillStyle=h,t.lineWidth=u,f===N.Dashed?t.setLineDash(y):t.setLineDash([]);var _=u%2===1?.5:0,w=Math.round(2*_);r.forEach(function(e){var i=e.x,n=e.y,r=e.width,a=e.height;r>2*u&&a>2*u?(t.beginPath(),b.call(t,i+_,n+_,r-w,a-w,g),t.closePath(),t.stroke()):x||t.fillRect(i,n,r,a)})}}var hn={name:"rect",checkEventOn:un,draw:function(t,e,i){dn(t,e,i)}};function pn(t,e){var i,n,r=e.size,a=void 0===r?12:r,o=e.paddingLeft,s=void 0===o?0:o,l=e.paddingTop,c=void 0===l?0:l,u=e.paddingRight,d=void 0===u?0:u,h=e.paddingBottom,p=void 0===h?0:h,f=e.weight,v=void 0===f?"normal":f,g=e.family,m=t.x,y=t.y,b=t.text,x=t.align,_=void 0===x?"left":x,w=t.baseline,C=void 0===w?"top":w,S=t.width,k=t.height,A=null!==S&&void 0!==S?S:s+Ht(b,a,v,g)+d,T=null!==k&&void 0!==k?k:c+a+p;switch(_){case"left":case"start":i=m;break;case"right":case"end":i=m-A;break;default:i=m-A/2;break}switch(C){case"top":case"hanging":n=y;break;case"bottom":case"ideographic":case"alphabetic":n=y-T;break;default:n=y-T/2;break}return{x:i,y:n,width:A,height:T}}function fn(t,e,i){var n=[];n=n.concat(e);for(var r=0;r=o&&t.x<=o+l&&t.y>=s&&t.y<=s+c)return!0}return!1}function vn(t,e,i){var n=[];n=n.concat(e);var r=i.color,a=void 0===r?"currentColor":r,o=i.size,s=void 0===o?12:o,l=i.family,c=i.weight,u=i.paddingLeft,d=void 0===u?0:u,h=i.paddingTop,p=void 0===h?0:h,f=i.paddingRight,v=void 0===f?0:f,g=n.map(function(t){return pn(t,i)});dn(t,g,X(X({},i),{color:i.backgroundColor})),t.textAlign="left",t.textBaseline="top",t.font=$t(s,c,l),t.fillStyle=a,n.forEach(function(e,i){var n=g[i];t.fillText(e.text,n.x+d,n.y+p,n.width-d-v)})}var gn={name:"text",checkEventOn:fn,draw:function(t,e,i){vn(t,e,i)}},mn=gn;function yn(t,e){var i=t.x-e.x,n=t.y-e.y;return Math.sqrt(i*i+n*n)}function bn(t,e){var i=[];i=i.concat(e);for(var n=0;n=Math.min(l,u)-pi&&t.y<=Math.max(c,d)+pi&&t.y>=Math.min(c,d)-pi)return!0}}return!1}function xn(t,e,i){var n=[];n=n.concat(e);var r=i.style,a=void 0===r?N.Solid:r,o=i.size,s=void 0===o?1:o,l=i.color,c=void 0===l?"currentColor":l,u=i.dashedValue,d=void 0===u?[2,2]:u;t.lineWidth=s,t.strokeStyle=c,a===N.Dashed?t.setLineDash(d):t.setLineDash([]),n.forEach(function(e){var i=e.x,n=e.y,r=e.r,a=e.startAngle,o=e.endAngle;t.beginPath(),t.arc(i,n,r,a,o),t.stroke(),t.closePath()})}var _n={name:"arc",checkEventOn:bn,draw:function(t,e,i){xn(t,e,i)}},wn={},Cn=[on,_i,cn,hn,gn,mn,_n];function Sn(t){var e;return null!==(e=wn[t])&&void 0!==e?e:null}Cn.forEach(function(t){wn[t.name]=fi.extend(t)});var kn=function(t){function e(e){var i=t.call(this)||this;return i._widget=e,i}return B(e,t),e.prototype.getWidget=function(){return this._widget},e.prototype.createFigure=function(t,e){var i=Sn(t.name);if(null!==i){var n=new i(t);if(Mt(e)){for(var r in e)e.hasOwnProperty(r)&&n.registerEvent(r,e[r]);this.addChild(n)}return n}return null},e.prototype.draw=function(t){this.clear(),this.drawImp(t)},e}(hi),An=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i,n=this.getWidget(),r=this.getWidget().getPane(),a=r.getChart(),o=n.getBounding(),s=a.getStyles().grid,l=s.show;if(l){t.save(),t.globalCompositeOperation="destination-over";var c=s.horizontal,u=c.show;if(u){var d=r.getAxisComponent(),h=d.getTicks().map(function(t){return{coordinates:[{x:0,y:t.coord},{x:o.width,y:t.coord}]}});null===(e=this.createFigure({name:"line",attrs:h,styles:c}))||void 0===e||e.draw(t)}var p=s.vertical,f=p.show;if(f){var v=a.getXAxisPane().getAxisComponent();h=v.getTicks().map(function(t){return{coordinates:[{x:t.coord,y:0},{x:t.coord,y:o.height}]}});null===(i=this.createFigure({name:"line",attrs:h,styles:p}))||void 0===i||i.draw(t)}t.restore()}},e}(kn),Tn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.eachChildren=function(t){var e=this.getWidget().getPane(),i=e.getChart().getChartStore(),n=i.getVisibleDataList(),r=i.getTimeScaleStore().getBarSpace();n.forEach(function(e,i){t(e,r,i)})},e}(kn),Mn=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._boundCandleBarClickEvent=function(t){return function(){return e.getWidget().getPane().getChart().getChartStore().getActionStore().execute(Pt.OnCandleBarClick,t),!1}},e}return B(e,t),e.prototype.drawImp=function(t){var e=this,i=this.getWidget().getPane(),n=i.getId()===Vi.CANDLE,r=i.getChart().getChartStore(),a=this.getCandleBarOptions(r);if(null!==a){var o=0,s=0;if(a.type===H.Ohlc){var l=r.getTimeScaleStore().getBarSpace().gapBar;o=Math.min(Math.max(Math.round(.2*l),1),8),o>2&&o%2===1&&o--,s=Math.floor(s/2)}var c=i.getAxisComponent();this.eachChildren(function(i,r){var l=i.data,u=i.x;if(Mt(l)){var d=l.open,h=l.high,p=l.low,f=l.close,v=a.type,g=a.styles,m=[];f>d?(m[0]=g.upColor,m[1]=g.upBorderColor,m[2]=g.upWickColor):fd?e._createStrokeBar(u,x,r,m):e._createSolidBar(u,x,r,m);break;case H.CandleDownStroke:_=d>f?e._createStrokeBar(u,x,r,m):e._createSolidBar(u,x,r,m);break;case H.Ohlc:_=[{name:"rect",attrs:[{x:u-s,y:x[0],width:o,height:x[3]-x[0]},{x:u-r.halfGapBar,y:y+o>x[3]?x[3]-o:y,width:r.halfGapBar,height:o},{x:u+s,y:b+o>x[3]?x[3]-o:b,width:r.halfGapBar-s,height:o}],styles:{color:m[0]}}];break}_.forEach(function(r){var a,o;n&&(o={mouseClickEvent:e._boundCandleBarClickEvent(i)}),null===(a=e.createFigure(r,o))||void 0===a||a.draw(t)})}})}},e.prototype.getCandleBarOptions=function(t){var e=t.getStyles().candle;return{type:e.type,styles:e.bar}},e.prototype._createSolidBar=function(t,e,i,n){return[{name:"rect",attrs:{x:t,y:e[0],width:1,height:e[3]-e[0]},styles:{color:n[2]}},{name:"rect",attrs:{x:t-i.halfGapBar,y:e[1],width:i.gapBar,height:Math.max(1,e[2]-e[1])},styles:{style:O.StrokeFill,color:n[0],borderColor:n[1]}}]},e.prototype._createStrokeBar=function(t,e,i,n){return[{name:"rect",attrs:[{x:t,y:e[0],width:1,height:e[1]-e[0]},{x:t,y:e[2],width:1,height:e[3]-e[2]}],styles:{color:n[2]}},{name:"rect",attrs:{x:t-i.halfGapBar,y:e[1],width:i.gapBar,height:Math.max(1,e[2]-e[1])},styles:{style:O.Stroke,borderColor:n[1]}}]},e}(Tn),In=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.getCandleBarOptions=function(t){var e,i,n=this.getWidget().getPane(),r=n.getAxisComponent();if(!r.isInCandle()){var a=t.getIndicatorStore().getInstances(n.getId());try{for(var o=j(a),s=o.next();!s.done;s=o.next()){var l=s.value;if(l.shouldOhlc&&l.visible){var c=l.styles,u=t.getStyles().indicator,d=Ft(c,"ohlc.upColor",u.ohlc.upColor),h=Ft(c,"ohlc.downColor",u.ohlc.downColor),p=Ft(c,"ohlc.noChangeColor",u.ohlc.noChangeColor);return{type:H.Ohlc,styles:{upColor:d,downColor:h,noChangeColor:p,upBorderColor:d,downBorderColor:h,noChangeBorderColor:p,upWickColor:d,downWickColor:h,noChangeWickColor:p}}}}}catch(f){e={error:f}}finally{try{s&&!s.done&&(i=o.return)&&i.call(o)}finally{if(e)throw e.error}}}return null},e.prototype.drawImp=function(e){var i=this;t.prototype.drawImp.call(this,e);var n=this.getWidget(),r=n.getPane(),a=r.getChart(),o=n.getBounding(),s=a.getXAxisPane().getAxisComponent(),l=r.getAxisComponent(),c=a.getChartStore(),u=c.getDataList(),d=c.getTimeScaleStore(),h=d.getVisibleRange(),p=c.getIndicatorStore().getInstances(r.getId()),f=c.getStyles().indicator;e.save(),p.forEach(function(t){var n;if(t.visible){t.zLevel<0?e.globalCompositeOperation="destination-over":e.globalCompositeOperation="source-over";var r=!1;if(null!==t.draw&&(e.save(),r=null!==(n=t.draw({ctx:e,kLineDataList:u,indicator:t,visibleRange:h,bounding:o,barSpace:d.getBarSpace(),defaultStyles:f,xAxis:s,yAxis:l}))&&void 0!==n&&n,e.restore()),!r){var a=t.result,c=[];i.eachChildren(function(n,r){var d,h,p,v=r.halfGapBar,g=n.dataIndex,m=n.x,y=s.convertToPixel(g-1),b=s.convertToPixel(g+1),x=null!==(d=a[g-1])&&void 0!==d?d:null,_=null!==(h=a[g])&&void 0!==h?h:null,w=null!==(p=a[g+1])&&void 0!==p?p:null,C={x:y},S={x:m},k={x:b};t.figures.forEach(function(t){var e=t.key,i=null===x||void 0===x?void 0:x[e];Tt(i)&&(C[e]=l.convertToPixel(i));var n=null===_||void 0===_?void 0:_[e];Tt(n)&&(S[e]=l.convertToPixel(n));var r=null===w||void 0===w?void 0:w[e];Tt(r)&&(k[e]=l.convertToPixel(r))}),Ut(u,t,g,f,function(t,n,a){var u,d,h;if(Mt(null===_||void 0===_?void 0:_[t.key])){var p=S[t.key],f=null===(u=t.attrs)||void 0===u?void 0:u.call(t,{data:{prev:x,current:_,next:w},coordinate:{prev:C,current:S,next:k},bounding:o,barSpace:r,xAxis:s,yAxis:l});if(!Mt(f))switch(t.type){case"circle":f={x:m,y:p,r:Math.max(1,v)};break;case"rect":case"bar":var g=null!==(d=t.baseValue)&&void 0!==d?d:l.getRange().from,y=l.convertToPixel(g),b=Math.abs(y-p);g!==(null===_||void 0===_?void 0:_[t.key])&&(b=Math.max(1,b));var A=void 0;A=p>y?y:p,f={x:m-v,y:A,width:Math.max(1,2*v),height:b};break;case"line":Mt(c[a])||(c[a]=[]),Tt(S[t.key])&&Tt(k[t.key])&&c[a].push({coordinates:[{x:S.x,y:S[t.key]},{x:k.x,y:k[t.key]}],styles:n});break}var T=t.type;Mt(f)&&"line"!==T&&(null===(h=i.createFigure({name:"bar"===T?"rect":T,attrs:f,styles:n}))||void 0===h||h.draw(e))}})}),c.forEach(function(t){if(t.length>1){for(var n=[{coordinates:[t[0].coordinates[0],t[0].coordinates[1]],styles:t[0].styles}],r=1;r0,S=_.length>0;if(C||S){var k=q(p.classifyTooltipIcons(w),3),A=k[0],T=k[1],M=k[2];if(g=p.drawStandardTooltipIcons(t,r,A,m,e,a.name,c,g,d),C){var I=b;x.length>0&&(I="".concat(I).concat(x)),g=p.drawStandardTooltipLegends(t,[{title:{text:"",color:v.color},value:{text:I,color:v.color}}],m,c,g,d,v)}g=p.drawStandardTooltipIcons(t,r,T,m,e,a.name,c,g,d),S&&(g=p.drawStandardTooltipLegends(t,_,m,c,g,d,f.text)),g=p.drawStandardTooltipIcons(t,r,M,m,e,a.name,c,g,d),u=m.y+g}})}return u},e.prototype.drawStandardTooltipIcons=function(t,e,i,n,r,a,o,s,l){var c=this;if(i.length>0){var u=0,d=0;i.forEach(function(e){var i=e.marginLeft,n=void 0===i?0:i,r=e.marginTop,a=void 0===r?0:r,o=e.marginRight,s=void 0===o?0:o,l=e.marginBottom,c=void 0===l?0:l,h=e.paddingLeft,p=void 0===h?0:h,f=e.paddingTop,v=void 0===f?0:f,g=e.paddingRight,m=void 0===g?0:g,y=e.paddingBottom,b=void 0===y?0:y,x=e.size,_=e.fontFamily,w=e.icon;t.font=$t(x,"normal",_),u+=n+p+t.measureText(w).width+m+s,d=Math.max(d,a+v+x+b+c)}),n.x+u>l?(n.x=o,n.y+=s,s=d):s=Math.max(s,d),i.forEach(function(i){var o,s=i.marginLeft,l=void 0===s?0:s,u=i.marginTop,d=void 0===u?0:u,h=i.marginRight,p=void 0===h?0:h,f=i.paddingLeft,v=void 0===f?0:f,g=i.paddingTop,m=void 0===g?0:g,y=i.paddingRight,b=void 0===y?0:y,x=i.paddingBottom,_=void 0===x?0:x,w=i.color,C=i.activeColor,S=i.size,k=i.fontFamily,A=i.icon,T=i.backgroundColor,M=i.activeBackgroundColor,I=(null===e||void 0===e?void 0:e.paneId)===r&&(null===e||void 0===e?void 0:e.indicatorName)===a&&(null===e||void 0===e?void 0:e.iconId)===i.id;null===(o=c.createFigure({name:"text",attrs:{text:A,x:n.x+l,y:n.y+d},styles:{paddingLeft:v,paddingTop:m,paddingRight:b,paddingBottom:_,color:I?C:w,size:S,family:k,backgroundColor:I?M:T}},{mouseClickEvent:c._boundIconClickEvent({paneId:r,indicatorName:a,iconId:i.id}),mouseMoveEvent:c._boundIconMouseMoveEvent({paneId:r,indicatorName:a,iconId:i.id})}))||void 0===o||o.draw(t),n.x+=l+v+t.measureText(A).width+b+p})}return s},e.prototype.drawStandardTooltipLegends=function(t,e,i,n,r,a,o){var s=this;if(e.length>0){var l=o.marginLeft,c=o.marginTop,u=o.marginRight,d=o.marginBottom,h=o.size,p=o.family,f=o.weight;t.font=$t(h,f,p),e.forEach(function(e){var o,v,g=e.title,m=e.value,y=t.measureText(g.text).width,b=t.measureText(m.text).width,x=y+b,_=c+h+d;i.x+l+x+u>a?(i.x=n,i.y+=r,r=_):r=Math.max(r,_),g.text.length>0&&(null===(o=s.createFigure({name:"text",attrs:{x:i.x+l,y:i.y+c,text:g.text},styles:{color:g.color,size:h,family:p,weight:f}}))||void 0===o||o.draw(t)),null===(v=s.createFigure({name:"text",attrs:{x:i.x+l+y,y:i.y+c,text:m.text},styles:{color:m.color,size:h,family:p,weight:f}}))||void 0===v||v.draw(t),i.x+=l+x+u})}return r},e.prototype.isDrawTooltip=function(t,e){var i=e.showRule;return i===z.Always||i===z.FollowCross&&Et(t.paneId)},e.prototype.getIndicatorTooltipData=function(t,e,i,n,r,a,o){var s,l,c=o.tooltip,u=c.showName?i.shortName:"",d="",h=i.calcParams;h.length>0&&c.showParams&&(d="(".concat(h.join(","),")"));var p={name:u,calcParamsText:d,values:[],icons:c.icons},f=e.dataIndex,v=null!==(s=i.result)&&void 0!==s?s:[],g=[];if(i.visible){var m=null!==(l=v[f])&&void 0!==l?l:{};Ut(t,i,f,o,function(t,e){var o;if(Et(t.title)){var s=e.color,l=null!==(o=m[t.key])&&void 0!==o?o:c.defaultValue;Tt(l)&&(l=Nt(l,i.precision),i.shouldFormatBigNumber&&(l=n.formatBigNumber(l)),l=Wt(zt(l,r),a)),g.push({title:{text:t.title,color:s},value:{text:l,color:s}})}}),p.values=g}if(null!==i.createTooltipDataSource){var y=this.getWidget(),b=y.getPane(),x=b.getChart().getChartStore(),_=i.createTooltipDataSource({kLineDataList:t,indicator:i,visibleRange:x.getTimeScaleStore().getVisibleRange(),bounding:y.getBounding(),crosshair:e,defaultStyles:o,xAxis:b.getChart().getXAxisPane().getAxisComponent(),yAxis:b.getAxisComponent()}),w=_.name,C=_.calcParamsText,S=_.values,k=_.icons;if(Et(w)&&c.showName&&(p.name=w),Et(C)&&c.showParams&&(p.calcParamsText=C),Mt(k)&&(p.icons=k),Mt(S)&&i.visible){var A=[],T=o.tooltip.text.color;S.forEach(function(t){var e,o={text:"",color:T};At(t.title)?o=t.title:o.text=t.title;var s={text:"",color:T};if(At(t.value)?s=t.value:s.text=null!==(e=t.value)&&void 0!==e?e:c.defaultValue,Tt(s.text)){var l=Nt(s.text,i.precision);i.shouldFormatBigNumber&&(l=n.formatBigNumber(l)),l=Wt(zt(l,r),a),s.text=l}A.push({title:o,value:s})}),p.values=A}}return p},e.prototype.classifyTooltipIcons=function(t){var e=[],i=[],n=[];return t.forEach(function(t){switch(t.position){case V.Left:e.push(t);break;case V.Middle:i.push(t);break;case V.Right:n.push(t);break}}),[e,i,n]},e}(kn),Pn=function(t){function e(e){var i=t.call(this,e)||this;return i._initEvent(),i}return B(e,t),e.prototype._initEvent=function(){var t=this,e=this.getWidget().getPane(),i=e.getId(),n=e.getChart().getChartStore().getOverlayStore();this.registerEvent("mouseMoveEvent",function(e){var r,a=n.getProgressInstanceInfo();if(null!==a){var o=a.instance,s=a.paneId;o.isStart()&&(n.updateProgressInstanceInfo(i),s=i);var l=o.points.length-1,c="".concat(ee,"point_").concat(l);return o.isDrawing()&&s===i&&(o.eventMoveForDrawing(t._coordinateToPoint(a.instance,e)),null===(r=o.onDrawing)||void 0===r||r.call(o,X({overlay:o,figureKey:c,figureIndex:l},e))),t._figureMouseMoveEvent(o,1,c,l,0)(e)}return n.setHoverInstanceInfo({paneId:i,instance:null,figureType:0,figureKey:"",figureIndex:-1,attrsIndex:-1},e),!1}).registerEvent("mouseClickEvent",function(e){var r,a,o=n.getProgressInstanceInfo();if(null!==o){var s=o.instance,l=o.paneId;s.isStart()&&(n.updateProgressInstanceInfo(i,!0),l=i);var c=s.points.length-1,u="".concat(ee,"point_").concat(c);return s.isDrawing()&&l===i&&(s.eventMoveForDrawing(t._coordinateToPoint(s,e)),null===(r=s.onDrawing)||void 0===r||r.call(s,X({overlay:s,figureKey:u,figureIndex:c},e)),s.nextStep(),s.isDrawing()||(n.progressInstanceComplete(),null===(a=s.onDrawEnd)||void 0===a||a.call(s,X({overlay:s,figureKey:u,figureIndex:c},e)))),t._figureMouseClickEvent(s,1,u,c,0)(e)}return n.setClickInstanceInfo({paneId:i,instance:null,figureType:0,figureKey:"",figureIndex:-1,attrsIndex:-1},e),!1}).registerEvent("mouseDoubleClickEvent",function(e){var r,a=n.getProgressInstanceInfo();if(null!==a){var o=a.instance,s=a.paneId;if(o.isDrawing()&&s===i&&(o.forceComplete(),!o.isDrawing())){n.progressInstanceComplete();var l=o.points.length-1,c="".concat(ee,"point_").concat(l);null===(r=o.onDrawEnd)||void 0===r||r.call(o,X({overlay:o,figureKey:c,figureIndex:l},e))}var u=o.points.length-1;return t._figureMouseClickEvent(o,1,"".concat(ee,"point_").concat(u),u,0)(e)}return!1}).registerEvent("mouseRightClickEvent",function(e){var i=n.getProgressInstanceInfo();if(null!==i){var r=i.instance;if(r.isDrawing()){var a=r.points.length-1;return t._figureMouseRightClickEvent(r,1,"".concat(ee,"point_").concat(a),a,0)(e)}}return!1}).registerEvent("mouseUpEvent",function(t){var e,r=n.getPressedInstanceInfo(),a=r.instance,o=r.figureIndex,s=r.figureKey;return null!==a&&(null===(e=a.onPressedMoveEnd)||void 0===e||e.call(a,X({overlay:a,figureKey:s,figureIndex:o},t))),n.setPressedInstanceInfo({paneId:i,instance:null,figureType:0,figureKey:"",figureIndex:-1,attrsIndex:-1}),!1}).registerEvent("pressedMouseMoveEvent",function(e){var i,r,a=n.getPressedInstanceInfo(),o=a.instance,s=a.figureType,l=a.figureIndex,c=a.figureKey;if(null!==o){if(!o.lock&&(null===(r=null===(i=o.onPressedMoving)||void 0===i?void 0:i.call(o,X({overlay:o,figureIndex:l,figureKey:c},e)))||void 0===r||!r)){var u=t._coordinateToPoint(o,e);1===s?o.eventPressedPointMove(u,l):o.eventPressedOtherMove(u,t.getWidget().getPane().getChart().getChartStore().getTimeScaleStore())}return!0}return!1})},e.prototype._createFigureEvents=function(t,e,i,n,r,a){var o;if(!t.isDrawing()){var s=[];if(Mt(a)&&(It(a)?a&&(s=qt()):s=a),0===s.length)return{mouseMoveEvent:this._figureMouseMoveEvent(t,e,i,n,r),mouseDownEvent:this._figureMouseDownEvent(t,e,i,n,r),mouseClickEvent:this._figureMouseClickEvent(t,e,i,n,r),mouseRightClickEvent:this._figureMouseRightClickEvent(t,e,i,n,r),mouseDoubleClickEvent:this._figureMouseDoubleClickEvent(t,e,i,n,r)};o={},s.includes("mouseMoveEvent")||s.includes("touchMoveEvent")||(o.mouseMoveEvent=this._figureMouseMoveEvent(t,e,i,n,r)),s.includes("mouseDownEvent")||s.includes("touchStartEvent")||(o.mouseDownEvent=this._figureMouseDownEvent(t,e,i,n,r)),s.includes("mouseClickEvent")||s.includes("tapEvent")||(o.mouseClickEvent=this._figureMouseClickEvent(t,e,i,n,r)),s.includes("mouseDoubleClickEvent")||s.includes("doubleTapEvent")||(o.mouseDoubleClickEvent=this._figureMouseDoubleClickEvent(t,e,i,n,r)),s.includes("mouseRightClickEvent")||(o.mouseRightClickEvent=this._figureMouseRightClickEvent(t,e,i,n,r))}return o},e.prototype._figureMouseMoveEvent=function(t,e,i,n,r){var a=this;return function(o){var s=a.getWidget().getPane(),l=s.getChart().getChartStore().getOverlayStore();return l.setHoverInstanceInfo({paneId:s.getId(),instance:t,figureType:e,figureKey:i,figureIndex:n,attrsIndex:r},o),!0}},e.prototype._figureMouseDownEvent=function(t,e,i,n,r){var a=this;return function(o){var s,l=a.getWidget().getPane(),c=l.getId(),u=l.getChart().getChartStore().getOverlayStore();return t.startPressedMove(a._coordinateToPoint(t,o)),null===(s=t.onPressedMoveStart)||void 0===s||s.call(t,X({overlay:t,figureIndex:n,figureKey:i},o)),u.setPressedInstanceInfo({paneId:c,instance:t,figureType:e,figureKey:i,figureIndex:n,attrsIndex:r}),!0}},e.prototype._figureMouseClickEvent=function(t,e,i,n,r){var a=this;return function(o){var s=a.getWidget().getPane(),l=s.getId(),c=s.getChart().getChartStore().getOverlayStore();return c.setClickInstanceInfo({paneId:l,instance:t,figureType:e,figureKey:i,figureIndex:n,attrsIndex:r},o),!0}},e.prototype._figureMouseDoubleClickEvent=function(t,e,i,n,r){return function(e){var r;return null===(r=t.onDoubleClick)||void 0===r||r.call(t,X(X({},e),{figureIndex:n,figureKey:i,overlay:t})),!0}},e.prototype._figureMouseRightClickEvent=function(t,e,i,n,r){var a=this;return function(e){var r,o;if(null===(o=null===(r=t.onRightClick)||void 0===r?void 0:r.call(t,X({overlay:t,figureIndex:n,figureKey:i},e)))||void 0===o||!o){var s=a.getWidget().getPane(),l=s.getChart().getChartStore().getOverlayStore();l.removeInstance(t)}return!0}},e.prototype._coordinateToPoint=function(t,e){var i,n={},r=this.getWidget().getPane(),a=r.getChart(),o=r.getId(),s=a.getChartStore().getTimeScaleStore();if(this.coordinateToPointTimestampDataIndexFlag()){var l=a.getXAxisPane().getAxisComponent(),c=l.convertFromPixel(e.x),u=null!==(i=s.dataIndexToTimestamp(c))&&void 0!==i?i:void 0;n.dataIndex=c,n.timestamp=u}if(this.coordinateToPointValueFlag()){var d=r.getAxisComponent(),h=d.convertFromPixel(e.y);if(t.mode!==Gt.Normal&&o===Vi.CANDLE&&Tt(n.dataIndex)){var p=s.getDataByDataIndex(n.dataIndex);if(null!==p){var f=t.modeSensitivity;if(h>p.high)if(t.mode===Gt.WeakMagnet){var v=d.convertToPixel(p.high),g=d.convertFromPixel(v-f);hg&&(h=p.low)}else h=p.low;else{var y=Math.max(p.open,p.close),b=Math.min(p.open,p.close);h=h>y?h-y0){var m=(new Array).concat(this.getFigures(e,g,i,n,r,s,l,a,c,u,d));this.drawFigures(t,e,m,c)}this.drawDefaultFigures(t,e,g,i,r,a,o,s,l,c,u,d,h,p)},e.prototype.drawFigures=function(t,e,i,n){var r=this;i.forEach(function(i,a){var o=i.type,s=i.styles,l=i.attrs,c=i.ignoreEvent,u=[].concat(l);u.forEach(function(l,u){var d,h,p,f=r._createFigureEvents(e,2,null!==(d=i.key)&&void 0!==d?d:"",a,u,c),v=X(X(X({},n[o]),null===(h=e.styles)||void 0===h?void 0:h[o]),s);null===(p=r.createFigure({name:o,attrs:l,styles:v},f))||void 0===p||p.draw(t)})})},e.prototype.getCompleteOverlays=function(t,e){return t.getInstances(e)},e.prototype.getProgressOverlay=function(t,e){return t.paneId===e?t.instance:null},e.prototype.getFigures=function(t,e,i,n,r,a,o,s,l,c,u){var d,h;return null!==(h=null===(d=t.createPointFigures)||void 0===d?void 0:d.call(t,{overlay:t,coordinates:e,bounding:i,barSpace:n,precision:r,thousandsSeparator:a,decimalFoldThreshold:o,dateTimeFormat:s,defaultStyles:l,xAxis:c,yAxis:u}))&&void 0!==h?h:[]},e.prototype.drawDefaultFigures=function(t,e,i,n,r,a,o,s,l,c,u,d,h,p){var f,v,g=this;if(e.needDefaultPointFigure&&((null===(f=h.instance)||void 0===f?void 0:f.id)===e.id&&0!==h.figureType||(null===(v=p.instance)||void 0===v?void 0:v.id)===e.id&&0!==p.figureType)){var m=e.styles,y=X(X({},c.point),null===m||void 0===m?void 0:m.point);i.forEach(function(i,n){var r,a,o,s=i.x,l=i.y,c=y.radius,u=y.color,d=y.borderColor,p=y.borderSize;(null===(r=h.instance)||void 0===r?void 0:r.id)===e.id&&1===h.figureType&&h.figureIndex===n&&(c=y.activeRadius,u=y.activeColor,d=y.activeBorderColor,p=y.activeBorderSize),null===(a=g.createFigure({name:"circle",attrs:{x:s,y:l,r:c+p},styles:{color:d}},g._createFigureEvents(e,1,"".concat(ee,"point_").concat(n),n,0)))||void 0===a||a.draw(t),null===(o=g.createFigure({name:"circle",attrs:{x:s,y:l,r:c},styles:{color:u}}))||void 0===o||o.draw(t)})}},e}(kn),Ln=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._gridView=new An(n),n._indicatorView=new In(n),n._crosshairLineView=new En(n),n._tooltipView=n.createTooltipView(),n._overlayView=new Pn(n),n.addChild(n._tooltipView),n.addChild(n._overlayView),n.getContainer().style.cursor="crosshair",n.registerEvent("mouseMoveEvent",function(){return i.getChart().getChartStore().getTooltipStore().setActiveIcon(),!1}),n}return B(e,t),e.prototype.getName=function(){return ji.MAIN},e.prototype.updateMain=function(t){this.updateMainContent(t),this._indicatorView.draw(t),this._gridView.draw(t)},e.prototype.createTooltipView=function(){return new Dn(this)},e.prototype.updateMainContent=function(t){},e.prototype.updateOverlay=function(t){this._overlayView.draw(t),this._crosshairLineView.draw(t),this._tooltipView.draw(t)},e}(en),Rn=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._ripplePoint=e.createFigure({name:"circle",attrs:{x:0,y:0,r:0},styles:{style:"fill"}}),e._animationFrameTime=0,e._animation=new le({iterationCount:1/0}).doFrame(function(t){e._animationFrameTime=t;var i=e.getWidget().getPane();i.getChart().updatePane(0,i.getId())}),e}return B(e,t),e.prototype.drawImp=function(t){var e,i,n,r=this.getWidget(),a=r.getPane(),o=a.getChart(),s=o.getDataList(),l=s.length-1,c=r.getBounding(),u=a.getAxisComponent(),d=o.getStyles().candle.area,h=[],p=Number.MAX_SAFE_INTEGER,f=Number.MIN_SAFE_INTEGER,v=null;if(this.eachChildren(function(t){var e=t.data,i=t.x,n=null===e||void 0===e?void 0:e[d.value];if(Tt(n)){var r=u.convertToPixel(n);f===Number.MIN_SAFE_INTEGER&&(f=i),h.push({x:i,y:r}),p=Math.min(p,r),t.dataIndex===l&&(v={x:i,y:r})}}),h.length>0){null===(e=this.createFigure({name:"line",attrs:{coordinates:h},styles:{color:d.lineColor,size:d.lineSize,smooth:d.smooth}}))||void 0===e||e.draw(t);var g=d.backgroundColor,m=void 0;if(St(g)){var y=t.createLinearGradient(0,c.height,0,p);try{g.forEach(function(t){var e=t.offset,i=t.color;y.addColorStop(e,i)})}catch(_){}m=y}else m=g;t.fillStyle=m,t.beginPath(),t.moveTo(f,c.height),t.lineTo(h[0].x,h[0].y),bi(t,h,d.smooth),t.lineTo(h[h.length-1].x,c.height),t.closePath(),t.fill()}var b=d.point;if(b.show&&Mt(v)){null===(i=this.createFigure({name:"circle",attrs:{x:v.x,y:v.y,r:b.radius},styles:{style:"fill",color:b.color}}))||void 0===i||i.draw(t);var x=b.rippleRadius;b.animation&&(x=b.radius+this._animationFrameTime/b.animationDuration*(b.rippleRadius-b.radius),this._animation.setDuration(b.animationDuration).start()),null===(n=this._ripplePoint)||void 0===n||n.setAttrs({x:v.x,y:v.y,r:x}).setStyles({style:"fill",color:b.rippleColor}).draw(t)}else this.stopAnimation()},e.prototype.stopAnimation=function(){this._animation.stop()},e}(Tn),Fn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e=this.getWidget(),i=e.getPane(),n=i.getChart().getChartStore(),r=n.getStyles().candle.priceMark,a=r.high,o=r.low;if(r.show&&(a.show||o.show)){var s=n.getThousandsSeparator(),l=n.getDecimalFoldThreshold(),c=n.getPrecision(),u=i.getAxisComponent(),d=Number.MIN_SAFE_INTEGER,h=0,p=Number.MAX_SAFE_INTEGER,f=0;this.eachChildren(function(t){var e=t.data,i=t.x;Mt(e)&&(de.low&&(p=e.low,f=i))});var v=u.convertToPixel(d),g=u.convertToPixel(p);a.show&&d!==Number.MIN_SAFE_INTEGER&&this._drawMark(t,Wt(zt(Nt(d,c.price),s),l),{x:h,y:v},vp/2?(l=d-5,c=l-r.textOffset,u="right"):(l=d+5,u="left",c=l+r.textOffset);var f=h+n[1];null===(o=this.createFigure({name:"line",attrs:{coordinates:[{x:d,y:h},{x:d,y:f},{x:l,y:f}]},styles:{color:r.color}}))||void 0===o||o.draw(t),null===(s=this.createFigure({name:"text",attrs:{x:c,y:f,text:e,align:u,baseline:"middle"},styles:{color:r.color,size:r.textSize,family:r.textFamily,weight:r.textWeight}}))||void 0===s||s.draw(t)},e}(Tn),Bn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i=this.getWidget(),n=i.getPane(),r=i.getBounding(),a=n.getChart().getChartStore(),o=a.getStyles().candle.priceMark,s=o.last,l=s.line;if(o.show&&s.show&&l.show){var c=n.getAxisComponent(),u=a.getDataList(),d=u[u.length-1];if(null!=d){var h=d.close,p=d.open,f=c.convertToNicePixel(h),v=void 0;v=h>p?s.upColor:h0&&(x=this.drawStandardTooltipLegends(t,C,_,d,x,p,b)),x=this.drawStandardTooltipIcons(t,r,T,_,i,"",d,x,p)}return _.y+x},e.prototype._drawRectTooltip=function(t,e,i,n,r,a,o,s,l,c,u,d,h,p,f,v){var g,m,y,b,x,_=this,w=v.candle,C=v.indicator,S=w.tooltip,k=C.tooltip;if(h||p){var A=null!==(g=a.dataIndex)&&void 0!==g?g:0,T=this._getCandleTooltipLegends({prev:null!==(m=e[A-1])&&void 0!==m?m:null,current:a.kLineData,next:null!==(y=e[A+1])&&void 0!==y?y:null},o,s,l,c,u,d,w),M=S.offsetLeft,I=S.offsetTop,E=S.offsetRight,D=S.offsetBottom,P=S.text,L=P.marginLeft,R=P.marginRight,F=P.marginTop,B=P.marginBottom,N=P.size,z=P.weight,W=P.family,V=S.rect,H=V.position,Y=V.paddingLeft,X=V.paddingRight,U=V.paddingTop,G=V.paddingBottom,j=V.offsetLeft,q=V.offsetRight,Z=V.offsetTop,J=V.offsetBottom,Q=V.borderSize,tt=V.borderRadius,et=V.borderColor,it=V.color,nt=0,rt=0,at=0;h&&(t.font=$t(N,z,W),T.forEach(function(e){var i=e.title,n=e.value,r="".concat(i.text).concat(n.text),a=t.measureText(r).width+L+R;nt=Math.max(nt,a)}),at+=(B+F+N)*T.length);var ot=k.text,st=ot.marginLeft,lt=ot.marginRight,ct=ot.marginTop,ut=ot.marginBottom,dt=ot.size,ht=ot.weight,pt=ot.family,ft=[];if(p&&(t.font=$t(dt,ht,pt),i.forEach(function(i){var n,r=null!==(n=_.getIndicatorTooltipData(e,a,i,c,u,d,C).values)&&void 0!==n?n:[];ft.push(r),r.forEach(function(e){var i=e.title,n=e.value,r="".concat(i.text).concat(n.text),a=t.measureText(r).width+st+lt;nt=Math.max(nt,a),at+=ct+ut+dt})})),rt+=nt,0!==rt&&0!==at){rt+=2*Q+Y+X,at+=2*Q+U+G;var vt=n.width/2,gt=H===$.Pointer&&a.paneId===Vi.CANDLE,mt=(null!==(b=a.realX)&&void 0!==b?b:0)>vt,yt=0;if(gt){var bt=a.realX;yt=mt?bt-q-rt:bt+j}else mt?(yt=j+M,v.yAxis.inside&&v.yAxis.position===K.Left&&(yt+=r.width)):(yt=n.width-q-rt-E,v.yAxis.inside&&v.yAxis.position===K.Right&&(yt-=r.width));var xt=f+Z;if(gt){var _t=a.y;xt=_t-at/2,xt+at>n.height-J-D&&(xt=n.height-J-at-D),xt1){var c="{".concat(l[1],"}");o.text=o.text.replace(c,null!==(e=x[c])&&void 0!==e?e:p.defaultValue),"{change}"===c&&(o.color=0===m?s.priceMark.last.noChangeColor:m>0?s.priceMark.last.upColor:s.priceMark.last.downColor)}return{title:a,value:o}})},e}(Dn),$n=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._candleBarView=new Mn(n),n._candleAreaView=new Rn(n),n._candleHighLowPriceView=new Fn(n),n._candleLastPriceLineView=new Bn(n),n.addChild(n._candleBarView),n}return B(e,t),e.prototype.updateMainContent=function(t){var e=this.getPane().getChart().getStyles().candle;e.type!==H.Area?(this._candleBarView.draw(t),this._candleHighLowPriceView.draw(t),this._candleAreaView.stopAnimation()):this._candleAreaView.draw(t),this._candleLastPriceLineView.draw(t)},e.prototype.createTooltipView=function(){return new Vn(this)},e}(Ln),Hn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i,n=this,r=this.getWidget(),a=r.getPane(),o=r.getBounding(),s=a.getAxisComponent(),l=this.getAxisStyles(a.getChart().getStyles());if(l.show){l.axisLine.show&&(null===(e=this.createFigure({name:"line",attrs:this.createAxisLine(o,l),styles:l.axisLine}))||void 0===e||e.draw(t));var c=s.getTicks();if(l.tickLine.show){var u=this.createTickLines(c,o,l);u.forEach(function(e){var i;null===(i=n.createFigure({name:"line",attrs:e,styles:l.tickLine}))||void 0===i||i.draw(t)})}if(l.tickText.show){var d=this.createTickTexts(c,o,l);null===(i=this.createFigure({name:"text",attrs:d,styles:l.tickText}))||void 0===i||i.draw(t)}}},e}(kn),Kn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.getAxisStyles=function(t){return t.yAxis},e.prototype.createAxisLine=function(t,e){var i,n=this.getWidget().getPane().getAxisComponent(),r=e.axisLine.size;return i=n.isFromZero()?0:t.width-r,{coordinates:[{x:i,y:0},{x:i,y:t.height}]}},e.prototype.createTickLines=function(t,e,i){var n=this.getWidget().getPane().getAxisComponent(),r=i.axisLine,a=i.tickLine,o=0,s=0;return n.isFromZero()?(o=0,r.show&&(o+=r.size),s=o+a.length):(o=e.width,r.show&&(o-=r.size),s=o-a.length),t.map(function(t){return{coordinates:[{x:o,y:t.coord},{x:s,y:t.coord}]}})},e.prototype.createTickTexts=function(t,e,i){var n=this.getWidget().getPane().getAxisComponent(),r=i.axisLine,a=i.tickLine,o=i.tickText,s=0;n.isFromZero()?(s=o.marginStart,r.show&&(s+=r.size),a.show&&(s+=a.length)):(s=e.width-o.marginEnd,r.show&&(s-=r.size),a.show&&(s-=a.length));var l=this.getWidget().getPane().getAxisComponent().isFromZero()?"left":"right";return t.map(function(t){return{x:s,y:t.coord,text:t.text,align:l,baseline:"middle"}})},e}(Hn),Yn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i=this.getWidget(),n=i.getPane(),r=i.getBounding(),a=n.getChart().getChartStore(),o=a.getStyles().candle.priceMark,s=o.last,l=s.text;if(o.show&&s.show&&l.show){var c=a.getPrecision(),u=n.getAxisComponent(),d=a.getDataList(),h=d[d.length-1];if(Mt(h)){var p=h.close,f=h.open,v=u.convertToNicePixel(p),g=void 0;g=p>f?s.upColor:p1&&p.unshift({type:"rect",attrs:{x:0,y:g,width:i.width,height:m-g},ignoreEvent:!0})}return p},e.prototype.getFigures=function(t,e,i,n,r,a,o,s,l,c,u){var d,h;return null!==(h=null===(d=t.createYAxisFigures)||void 0===d?void 0:d.call(t,{overlay:t,coordinates:e,bounding:i,barSpace:n,precision:r,thousandsSeparator:a,decimalFoldThreshold:o,dateTimeFormat:s,defaultStyles:l,xAxis:c,yAxis:u}))&&void 0!==h?h:[]},e}(Pn),Gn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i=this.getWidget(),n=i.getPane(),r=i.getBounding(),a=i.getPane().getChart().getChartStore(),o=a.getTooltipStore().getCrosshair(),s=a.getStyles().crosshair;if(Et(o.paneId)&&this.compare(o,n.getId())&&s.show){var l=this.getDirectionStyles(s),c=l.text;if(l.show&&c.show){var u=n.getAxisComponent(),d=this.getText(o,a,u);t.font=$t(c.size,c.weight,c.family),null===(e=this.createFigure({name:"text",attrs:this.getTextAttrs(d,t.measureText(d).width,o,r,u,c),styles:c}))||void 0===e||e.draw(t)}}},e.prototype.compare=function(t,e){return t.paneId===e},e.prototype.getDirectionStyles=function(t){return t.horizontal},e.prototype.getText=function(t,e,i){var n,r=i,a=i.convertFromPixel(t.y);if(r.getType()===Y.Percentage){var o=e.getVisibleFirstData();n="".concat(((a-o.close)/o.close*100).toFixed(2),"%")}else{var s=e.getIndicatorStore().getInstances(t.paneId),l=0,c=!1;r.isInCandle()?l=e.getPrecision().price:s.forEach(function(t){l=Math.max(t.precision,l),c||(c=t.shouldFormatBigNumber)}),n=Nt(a,l),c&&(n=e.getCustomApi().formatBigNumber(n))}return Wt(zt(n,e.getThousandsSeparator()),e.getDecimalFoldThreshold())},e.prototype.getTextAttrs=function(t,e,i,n,r,a){var o,s,l=r;return l.isFromZero()?(o=0,s="left"):(o=n.width,s="right"),{x:o,y:i.y,text:t,align:s,baseline:"middle"}},e}(kn),jn=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._yAxisView=new Kn(n),n._candleLastPriceLabelView=new Yn(n),n._indicatorLastValueView=new Xn(n),n._overlayYAxisView=new Un(n),n._crosshairHorizontalLabelView=new Gn(n),n.getContainer().style.cursor="ns-resize",n.addChild(n._overlayYAxisView),n}return B(e,t),e.prototype.getName=function(){return ji.Y_AXIS},e.prototype.updateMain=function(t){this._yAxisView.draw(t),this.getPane().getAxisComponent().isInCandle()&&this._candleLastPriceLabelView.draw(t),this._indicatorLastValueView.draw(t)},e.prototype.updateOverlay=function(t){this._overlayYAxisView.draw(t),this._crosshairHorizontalLabelView.draw(t)},e}(en),qn=function(){function t(t){this._range={from:0,to:0,range:0,realFrom:0,realTo:0,realRange:0},this._prevRange={from:0,to:0,range:0,realFrom:0,realTo:0,realRange:0},this._ticks=[],this._autoCalcTickFlag=!0,this._parent=t}return t.prototype.getParent=function(){return this._parent},t.prototype.buildTicks=function(t){if(this._autoCalcTickFlag&&(this._range=this.calcRange()),this._prevRange.from!==this._range.from||this._prevRange.to!==this._range.to||t){this._prevRange=this._range;var e=this.optimalTicks(this._calcTicks());return this._ticks=this.createTicks({range:this._range,bounding:this.getSelfBounding(),defaultTicks:e}),!0}return!1},t.prototype.getTicks=function(){return this._ticks},t.prototype.getScrollZoomEnabled=function(){var t;return null===(t=this.getParent().getOptions().axisOptions.scrollZoomEnabled)||void 0===t||t},t.prototype.setRange=function(t){this._autoCalcTickFlag=!1,this._range=t},t.prototype.getRange=function(){return this._range},t.prototype.setAutoCalcTickFlag=function(t){this._autoCalcTickFlag=t},t.prototype.getAutoCalcTickFlag=function(){return this._autoCalcTickFlag},t.prototype._calcTicks=function(){var t=this._range,e=t.realFrom,i=t.realTo,n=t.realRange,r=[];if(n>=0){var a=q(this._calcTickInterval(n),2),o=a[0],s=a[1],l=ve(Math.ceil(e/o)*o,s),c=ve(Math.floor(i/o)*o,s),u=0,d=l;if(0!==o)while(d<=c){var h=d.toFixed(s);r[u]={text:h,coord:0,value:h},++u,d+=o}}return r},t.prototype._calcTickInterval=function(t){var e=fe(t/8),i=ge(e);return[e,i]},t}(),Zn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.calcRange=function(){var t,e,i,n,r=this.getParent(),a=r.getChart(),o=a.getChartStore(),s=Number.MAX_SAFE_INTEGER,l=Number.MIN_SAFE_INTEGER,c=[],u=!1,d=Number.MAX_SAFE_INTEGER,h=Number.MIN_SAFE_INTEGER,p=Number.MAX_SAFE_INTEGER,f=o.getIndicatorStore().getInstances(r.getId());f.forEach(function(t){var e,i,n;u||(u=null!==(e=t.shouldOhlc)&&void 0!==e&&e),p=Math.min(p,t.precision),Tt(t.minValue)&&(d=Math.min(d,t.minValue)),Tt(t.maxValue)&&(h=Math.max(h,t.maxValue)),c.push({figures:null!==(i=t.figures)&&void 0!==i?i:[],result:null!==(n=t.result)&&void 0!==n?n:[]})});var v=4,g=this.isInCandle();if(g){var m=o.getPrecision().price;v=p!==Number.MAX_SAFE_INTEGER?Math.min(p,m):m}else p!==Number.MAX_SAFE_INTEGER&&(v=p);var y=o.getVisibleDataList(),b=a.getStyles().candle,x=b.type===H.Area,_=b.area.value,w=g&&!x||!g&&u;y.forEach(function(t){var e=t.dataIndex,i=t.data;if(Mt(i)&&(w&&(s=Math.min(s,i.low),l=Math.max(l,i.high)),g&&x)){var n=i[_];Tt(n)&&(s=Math.min(s,n),l=Math.max(l,n))}c.forEach(function(t){var i,n=t.figures,r=t.result,a=null!==(i=r[e])&&void 0!==i?i:{};n.forEach(function(t){var e=a[t.key];Tt(e)&&(s=Math.min(s,e),l=Math.max(l,e))})})}),s!==Number.MAX_SAFE_INTEGER&&l!==Number.MIN_SAFE_INTEGER?(s=Math.min(d,s),l=Math.max(h,l)):(s=0,l=10);var C,S=this.getType();switch(S){case Y.Percentage:var k=o.getVisibleFirstData();Mt(k)&&Tt(k.close)&&(s=(s-k.close)/k.close*100,l=(l-k.close)/k.close*100),C=Math.pow(10,-2);break;case Y.Log:s=ye(s),l=ye(l),C=.05*be(-v);break;default:C=be(-v)}if(s===l||Math.abs(s-l)=1&&(E/=M);var D=null!==(n=null===I||void 0===I?void 0:I.bottom)&&void 0!==n?n:.1;D>=1&&(D/=M);var P,L,R,F=Math.abs(l-s);return s-=F*D,l+=F*E,F=Math.abs(l-s),S===Y.Log?(P=be(s),L=be(l),R=Math.abs(L-P)):(P=s,L=l,R=F),{from:s,to:l,range:F,realFrom:P,realTo:L,realRange:R}},e.prototype._innerConvertToPixel=function(t){var e,i,n=null!==(i=null===(e=this.getParent().getYAxisWidget())||void 0===e?void 0:e.getBounding().height)&&void 0!==i?i:0,r=this.getRange(),a=r.from,o=r.range,s=(t-a)/o;return this.isReverse()?Math.round(s*n):Math.round((1-s)*n)},e.prototype.isInCandle=function(){return this.getParent().getId()===Vi.CANDLE},e.prototype.getType=function(){return this.isInCandle()?this.getParent().getChart().getStyles().yAxis.type:Y.Normal},e.prototype.getPosition=function(){return this.getParent().getChart().getStyles().yAxis.position},e.prototype.isReverse=function(){return!!this.isInCandle()&&this.getParent().getChart().getStyles().yAxis.reverse},e.prototype.isFromZero=function(){var t=this.getParent().getChart().getStyles().yAxis,e=t.inside;return t.position===K.Left&&e||t.position===K.Right&&!e},e.prototype.optimalTicks=function(t){var e,i,n=this,r=this.getParent(),a=null!==(i=null===(e=r.getYAxisWidget())||void 0===e?void 0:e.getBounding().height)&&void 0!==i?i:0,o=r.getChart().getChartStore(),s=o.getCustomApi(),l=[],c=this.getType(),u=o.getIndicatorStore().getInstances(r.getId()),d=o.getThousandsSeparator(),h=o.getDecimalFoldThreshold(),p=0,f=!1;this.isInCandle()?p=o.getPrecision().price:u.forEach(function(t){p=Math.max(p,t.precision),f||(f=t.shouldFormatBigNumber)});var v,g=o.getStyles().xAxis.tickText.size;return t.forEach(function(t){var e,i=t.value,r=n._innerConvertToPixel(+i);switch(c){case Y.Percentage:e="".concat(Nt(i,2),"%");break;case Y.Log:r=n._innerConvertToPixel(ye(+i)),e=Nt(i,p);break;default:e=Nt(i,p),f&&(e=s.formatBigNumber(i));break}e=Wt(zt(e,d),h);var o=Tt(v);r>g&&r2*g||!o)&&(l.push({text:e,coord:r,value:i}),v=r)}),l},e.prototype.getAutoSize=function(){var t=this.getParent(),e=t.getChart(),i=e.getStyles(),n=i.yAxis,r=n.size;if("auto"!==r)return r;var a=e.getChartStore(),o=a.getCustomApi(),s=0;if(n.show&&(n.axisLine.show&&(s+=n.axisLine.size),n.tickLine.show&&(s+=n.tickLine.length),n.tickText.show)){var l=0;this.getTicks().forEach(function(t){l=Math.max(l,Ht(t.text,n.tickText.size,n.tickText.weight,n.tickText.family))}),s+=n.tickText.marginStart+n.tickText.marginEnd+l}var c=i.crosshair,u=0;if(c.show&&c.horizontal.show&&c.horizontal.text.show){var d=a.getIndicatorStore().getInstances(t.getId()),h=0,p=!1;d.forEach(function(t){h=Math.max(t.precision,h),p||(p=t.shouldFormatBigNumber)});var f=2;if(this.getType()!==Y.Percentage)if(this.isInCandle()){var v=a.getPrecision().price,g=i.indicator.lastValueMark;f=g.show&&g.text.show?Math.max(h,v):v}else f=h;var m=Nt(this.getRange().to,f);p&&(m=o.formatBigNumber(m)),m=Wt(m,a.getDecimalFoldThreshold()),u+=c.horizontal.text.paddingLeft+c.horizontal.text.paddingRight+2*c.horizontal.text.borderSize+Ht(m,c.horizontal.text.size,c.horizontal.text.weight,c.horizontal.text.family)}return Math.max(s,u)},e.prototype.getSelfBounding=function(){return this.getParent().getYAxisWidget().getBounding()},e.prototype.convertFromPixel=function(t){var e,i,n=null!==(i=null===(e=this.getParent().getYAxisWidget())||void 0===e?void 0:e.getBounding().height)&&void 0!==i?i:0,r=this.getRange(),a=r.from,o=r.range,s=this.isReverse()?t/n:1-t/n,l=s*o+a;switch(this.getType()){case Y.Percentage:var c=this.getParent().getChart().getChartStore().getVisibleFirstData();return Mt(c)&&Tt(c.close)?c.close*l/100+c.close:0;case Y.Log:return be(l);default:return l}},e.prototype.convertToRealValue=function(t){var e=t;return this.getType()===Y.Log&&(e=be(t)),e},e.prototype.convertToPixel=function(t){var e=t;switch(this.getType()){case Y.Percentage:var i=this.getParent().getChart().getChartStore().getVisibleFirstData();Mt(i)&&Tt(i.close)&&(e=(t-i.close)/i.close*100);break;case Y.Log:e=ye(t);break;default:e=t}return this._innerConvertToPixel(e)},e.prototype.convertToNicePixel=function(t){var e,i,n=null!==(i=null===(e=this.getParent().getYAxisWidget())||void 0===e?void 0:e.getBounding().height)&&void 0!==i?i:0,r=this.convertToPixel(t);return Math.round(Math.max(.05*n,Math.min(r,.98*n)))},e.extend=function(t){var i=function(e){function i(){return null!==e&&e.apply(this,arguments)||this}return B(i,e),i.prototype.createTicks=function(e){return t.createTicks(e)},i}(e);return i},e}(qn),Jn={name:"default",createTicks:function(t){var e=t.defaultTicks;return e}},Qn={default:Zn.extend(Jn)};function tr(t){var e;return null!==(e=Qn[t])&&void 0!==e?e:Qn.default}var er=function(){function t(t,e,i,n){this._bounding=Qi(),this._chart=i,this._id=n,this._init(t,e)}return t.prototype._init=function(t,e){this._rootContainer=t,this._container=he("div",{width:"100%",margin:"0",padding:"0",position:"relative",overflow:"hidden",boxSizing:"border-box"}),null!==e?t.insertBefore(this._container,e):t.appendChild(this._container)},t.prototype.getContainer=function(){return this._container},t.prototype.getId=function(){return this._id},t.prototype.getChart=function(){return this._chart},t.prototype.getBounding=function(){return this._bounding},t.prototype.update=function(t){this._bounding.height!==this._container.clientHeight&&(this._container.style.height="".concat(this._bounding.height,"px")),this.updateImp(null!==t&&void 0!==t?t:3,this._container,this._bounding)},t.prototype.destroy=function(){this._rootContainer.removeChild(this._container)},t}(),ir=function(t){function e(e,i,n,r,a){var o=t.call(this,e,i,n,r)||this;o._yAxisWidget=null,o._options={minHeight:zi,dragEnabled:!0,gap:{top:.2,bottom:.1},axisOptions:{name:"default",scrollZoomEnabled:!0}};var s=o.getContainer();return o._mainWidget=o.createMainWidget(s),o._yAxisWidget=o.createYAxisWidget(s),o.setOptions(a),o}return B(e,t),e.prototype.setOptions=function(t){var e,i,n,r,a,o=null===(e=t.axisOptions)||void 0===e?void 0:e.name;return(this._options.axisOptions.name!==o&&Et(o)||!Mt(this._axis))&&(this._axis=this.createAxisComponent(null!==o&&void 0!==o?o:"default")),wt(this._options,t),this.getId()===Vi.X_AXIS?(r=this.getMainWidget().getContainer(),a="ew-resize"):(r=this.getYAxisWidget().getContainer(),a="ns-resize"),null===(n=null===(i=t.axisOptions)||void 0===i?void 0:i.scrollZoomEnabled)||void 0===n||n?r.style.cursor=a:r.style.cursor="default",this},e.prototype.getOptions=function(){return this._options},e.prototype.getAxisComponent=function(){return this._axis},e.prototype.setBounding=function(t,e,i){var n,r;wt(this.getBounding(),t);var a={};return Mt(t.height)&&(a.height=t.height),Mt(t.top)&&(a.top=t.top),this._mainWidget.setBounding(a),null===(n=this._yAxisWidget)||void 0===n||n.setBounding(a),Mt(e)&&this._mainWidget.setBounding(e),Mt(i)&&(null===(r=this._yAxisWidget)||void 0===r||r.setBounding(i)),this},e.prototype.getMainWidget=function(){return this._mainWidget},e.prototype.getYAxisWidget=function(){return this._yAxisWidget},e.prototype.updateImp=function(t){var e;this._mainWidget.update(t),null===(e=this._yAxisWidget)||void 0===e||e.update(t)},e.prototype.destroy=function(){var e;t.prototype.destroy.call(this),this._mainWidget.destroy(),null===(e=this._yAxisWidget)||void 0===e||e.destroy()},e.prototype.getImage=function(t){var e=this.getBounding(),i=e.width,n=e.height,r=he("canvas",{width:"".concat(i,"px"),height:"".concat(n,"px"),boxSizing:"border-box"}),a=r.getContext("2d"),o=Vt(r);r.width=i*o,r.height=n*o,a.scale(o,o);var s=this._mainWidget.getBounding();if(a.drawImage(this._mainWidget.getImage(t),s.left,0,s.width,s.height),null!==this._yAxisWidget){var l=this._yAxisWidget.getBounding();a.drawImage(this._yAxisWidget.getImage(t),l.left,0,l.width,l.height)}return r},e.prototype.createYAxisWidget=function(t){return null},e}(er),nr=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.createAxisComponent=function(t){var e=tr(null!==t&&void 0!==t?t:"default");return new e(this)},e.prototype.createMainWidget=function(t){return new Ln(t,this)},e.prototype.createYAxisWidget=function(t){return new jn(t,this)},e}(ir),rr=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.createMainWidget=function(t){return new $n(t,this)},e}(nr),ar=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.getAxisStyles=function(t){return t.xAxis},e.prototype.createAxisLine=function(t){return{coordinates:[{x:0,y:0},{x:t.width,y:0}]}},e.prototype.createTickLines=function(t,e,i){var n=i.tickLine,r=i.axisLine.size;return t.map(function(t){return{coordinates:[{x:t.coord,y:0},{x:t.coord,y:r+n.length}]}})},e.prototype.createTickTexts=function(t,e,i){var n=i.tickText,r=i.axisLine.size,a=i.tickLine.length;return t.map(function(t){return{x:t.coord,y:r+a+n.marginStart,text:t.text,align:"center",baseline:"top"}})},e}(Hn),or=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.coordinateToPointTimestampDataIndexFlag=function(){return!0},e.prototype.coordinateToPointValueFlag=function(){return!1},e.prototype.getCompleteOverlays=function(t){return t.getInstances()},e.prototype.getProgressOverlay=function(t){return t.instance},e.prototype.getDefaultFigures=function(t,e,i,n,r,a,o,s,l,c,u){var d,h=[];if(t.needDefaultXAxisFigure&&t.id===(null===(d=u.instance)||void 0===d?void 0:d.id)){var p=Number.MAX_SAFE_INTEGER,f=Number.MIN_SAFE_INTEGER;e.forEach(function(e,i){p=Math.min(p,e.x),f=Math.max(f,e.x);var n=t.points[i];if(Tt(n.timestamp)){var o=a.formatDate(r,n.timestamp,"YYYY-MM-DD HH:mm",Zt.Crosshair);h.push({type:"text",attrs:{x:e.x,y:0,text:o,align:"center"},ignoreEvent:!0})}}),e.length>1&&h.unshift({type:"rect",attrs:{x:p,y:0,width:f-p,height:i.height},ignoreEvent:!0})}return h},e.prototype.getFigures=function(t,e,i,n,r,a,o,s,l,c,u){var d,h;return null!==(h=null===(d=t.createXAxisFigures)||void 0===d?void 0:d.call(t,{overlay:t,coordinates:e,bounding:i,barSpace:n,precision:r,thousandsSeparator:a,decimalFoldThreshold:o,dateTimeFormat:s,defaultStyles:l,xAxis:c,yAxis:u}))&&void 0!==h?h:[]},e}(Un),sr=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.compare=function(t){return Mt(t.kLineData)&&t.dataIndex===t.realDataIndex},e.prototype.getDirectionStyles=function(t){return t.vertical},e.prototype.getText=function(t,e){var i,n=null===(i=t.kLineData)||void 0===i?void 0:i.timestamp;return e.getCustomApi().formatDate(e.getTimeScaleStore().getDateTimeFormat(),n,"YYYY-MM-DD HH:mm",Zt.Crosshair)},e.prototype.getTextAttrs=function(t,e,i,n,r,a){var o,s=i.realX,l="center";return s-e/2-a.paddingLeft<0?(o=0,l="left"):s+e/2+a.paddingRight>n.width?(o=n.width,l="right"):o=s,{x:o,y:0,text:t,align:l,baseline:"top"}},e}(Gn),lr=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._xAxisView=new ar(n),n._overlayXAxisView=new or(n),n._crosshairVerticalLabelView=new sr(n),n.getContainer().style.cursor="ew-resize",n.addChild(n._overlayXAxisView),n}return B(e,t),e.prototype.getName=function(){return ji.X_AXIS},e.prototype.updateMain=function(t){this._xAxisView.draw(t)},e.prototype.updateOverlay=function(t){this._overlayXAxisView.draw(t),this._crosshairVerticalLabelView.draw(t)},e}(en),cr=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.calcRange=function(){var t=this.getParent().getChart().getChartStore(),e=t.getTimeScaleStore().getVisibleRange(),i=e.from,n=e.to,r=i,a=n-1,o=n-i;return{from:r,to:a,range:o,realFrom:r,realTo:a,realRange:o}},e.prototype.optimalTicks=function(t){var e,i,n=this.getParent().getChart(),r=n.getChartStore(),a=r.getCustomApi().formatDate,o=[],s=t.length,l=r.getDataList();if(s>0){var c=r.getTimeScaleStore().getDateTimeFormat(),u=n.getStyles().xAxis.tickText,d=Ht("00-00 00:00",u.size,u.weight,u.family),h=parseInt(t[0].value,10),p=this.convertToPixel(h),f=1;if(s>1){var v=parseInt(t[1].value,10),g=this.convertToPixel(v),m=Math.abs(g-p);me&&(t.apply(this,arguments),i=n)}}var vr=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._dragFlag=!1,n._dragStartY=0,n._topPaneHeight=0,n._bottomPaneHeight=0,n._pressedMouseMoveEvent=fr(n._pressedTouchMouseMoveEvent,20),n.registerEvent("touchStartEvent",n._mouseDownEvent.bind(n)).registerEvent("touchMoveEvent",n._pressedMouseMoveEvent.bind(n)).registerEvent("touchEndEvent",n._mouseUpEvent.bind(n)).registerEvent("mouseDownEvent",n._mouseDownEvent.bind(n)).registerEvent("mouseUpEvent",n._mouseUpEvent.bind(n)).registerEvent("pressedMouseMoveEvent",n._pressedMouseMoveEvent.bind(n)).registerEvent("mouseEnterEvent",n._mouseEnterEvent.bind(n)).registerEvent("mouseLeaveEvent",n._mouseLeaveEvent.bind(n)),n}return B(e,t),e.prototype.getName=function(){return ji.SEPARATOR},e.prototype.checkEventOn=function(){return!0},e.prototype._mouseDownEvent=function(t){this._dragFlag=!0,this._dragStartY=t.pageY;var e=this.getPane();return this._topPaneHeight=e.getTopPane().getBounding().height,this._bottomPaneHeight=e.getBottomPane().getBounding().height,!0},e.prototype._mouseUpEvent=function(){return this._dragFlag=!1,this._mouseLeaveEvent()},e.prototype._pressedTouchMouseMoveEvent=function(t){var e=t.pageY-this._dragStartY,i=this.getPane(),n=i.getTopPane(),r=i.getBottomPane(),a=e<0;if(null!==n&&(null===r||void 0===r?void 0:r.getOptions().dragEnabled)){var o=void 0,s=void 0,l=void 0,c=void 0;a?(o=n,s=r,l=this._topPaneHeight,c=this._bottomPaneHeight):(o=r,s=n,l=this._bottomPaneHeight,c=this._topPaneHeight);var u=o.getOptions().minHeight;if(l>u){var d=Math.max(l-Math.abs(e),u),h=l-d;o.setBounding({height:d}),s.setBounding({height:c+h});var p=i.getChart();p.getChartStore().getActionStore().execute(Pt.OnPaneDrag,{paneId:i.getId()}),p.adjustPaneViewport(!0,!0,!0,!0,!0)}}return!0},e.prototype._mouseEnterEvent=function(){var t,e=this.getPane(),i=e.getBottomPane();if(null!==(t=null===i||void 0===i?void 0:i.getOptions().dragEnabled)&&void 0!==t&&t){var n=e.getChart(),r=n.getStyles().separator;return this.getContainer().style.background=r.activeBackgroundColor,!0}return!1},e.prototype._mouseLeaveEvent=function(){return!this._dragFlag&&(this.getContainer().style.background="",!0)},e.prototype.createContainer=function(){return he("div",{width:"100%",height:"".concat(qi,"px"),margin:"0",padding:"0",position:"absolute",top:"-3px",zIndex:"20",boxSizing:"border-box",cursor:"ns-resize"})},e.prototype.updateImp=function(t,e,i){if(4===i||2===i){var n=this.getPane().getChart().getStyles().separator;t.style.top="".concat(-Math.floor((qi-n.size)/2),"px"),t.style.height="".concat(qi,"px")}},e}(tn),gr=function(t){function e(e,i,n,r,a,o){var s=t.call(this,e,i,n,r)||this;return s.getContainer().style.overflow="",s._topPane=a,s._bottomPane=o,s._separatorWidget=new vr(s.getContainer(),s),s}return B(e,t),e.prototype.setBounding=function(t){return wt(this.getBounding(),t),this},e.prototype.getTopPane=function(){return this._topPane},e.prototype.setTopPane=function(t){return this._topPane=t,this},e.prototype.getBottomPane=function(){return this._bottomPane},e.prototype.setBottomPane=function(t){return this._bottomPane=t,this},e.prototype.getWidget=function(){return this._separatorWidget},e.prototype.getImage=function(t){var e=this.getBounding(),i=e.width,n=e.height,r=this.getChart().getStyles().separator,a=he("canvas",{width:"".concat(i,"px"),height:"".concat(n,"px"),boxSizing:"border-box"}),o=a.getContext("2d"),s=Vt(a);return a.width=i*s,a.height=n*s,o.scale(s,s),o.fillStyle=r.color,o.fillRect(0,0,i,n),a},e.prototype.updateImp=function(t,e,i){if(4===t||2===t){var n=this.getChart().getStyles().separator;e.style.backgroundColor=n.color,e.style.height="".concat(i.height,"px"),e.style.marginLeft="".concat(i.left,"px"),e.style.width="".concat(i.width,"px"),this._separatorWidget.update(t)}},e}(er);function mr(){var t;return"undefined"!==typeof window&&(null!==(t=window.navigator.userAgent.toLowerCase().indexOf("firefox"))&&void 0!==t?t:-1)>-1}function yr(){return"undefined"!==typeof window&&/iPhone|iPad|iPod/.test(window.navigator.platform)}var br,xr=10,_r=function(){function t(t,e,i){var n=this;this._clickCount=0,this._clickTimeoutId=null,this._clickCoordinate={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY},this._tapCount=0,this._tapTimeoutId=null,this._tapCoordinate={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY},this._longTapTimeoutId=null,this._longTapActive=!1,this._mouseMoveStartCoordinate=null,this._touchMoveStartCoordinate=null,this._touchMoveExceededManhattanDistance=!1,this._cancelClick=!1,this._cancelTap=!1,this._unsubscribeOutsideMouseEvents=null,this._unsubscribeOutsideTouchEvents=null,this._unsubscribeMobileSafariEvents=null,this._unsubscribeMousemove=null,this._unsubscribeMouseWheel=null,this._unsubscribeContextMenu=null,this._unsubscribeRootMouseEvents=null,this._unsubscribeRootTouchEvents=null,this._startPinchMiddleCoordinate=null,this._startPinchDistance=0,this._pinchPrevented=!1,this._preventTouchDragProcess=!1,this._mousePressed=!1,this._lastTouchEventTimeStamp=0,this._activeTouchId=null,this._acceptMouseLeave=!yr(),this._onFirefoxOutsideMouseUp=function(t){n._mouseUpHandler(t)},this._onMobileSafariDoubleClick=function(t){if(n._firesTouchEvents(t)){if(++n._tapCount,null!==n._tapTimeoutId&&n._tapCount>1){var e=n._mouseTouchMoveWithDownInfo(n._getCoordinate(t),n._tapCoordinate).manhattanDistance;e<30&&!n._cancelTap&&n._processEvent(n._makeCompatEvent(t),n._handler.doubleTapEvent),n._resetTapTimeout()}}else if(++n._clickCount,null!==n._clickTimeoutId&&n._clickCount>1){e=n._mouseTouchMoveWithDownInfo(n._getCoordinate(t),n._clickCoordinate).manhattanDistance;e<5&&!n._cancelClick&&n._processEvent(n._makeCompatEvent(t),n._handler.mouseDoubleClickEvent),n._resetClickTimeout()}},this._target=t,this._handler=e,this._options=i,this._init()}return t.prototype.destroy=function(){null!==this._unsubscribeOutsideMouseEvents&&(this._unsubscribeOutsideMouseEvents(),this._unsubscribeOutsideMouseEvents=null),null!==this._unsubscribeOutsideTouchEvents&&(this._unsubscribeOutsideTouchEvents(),this._unsubscribeOutsideTouchEvents=null),null!==this._unsubscribeMousemove&&(this._unsubscribeMousemove(),this._unsubscribeMousemove=null),null!==this._unsubscribeMouseWheel&&(this._unsubscribeMouseWheel(),this._unsubscribeMouseWheel=null),null!==this._unsubscribeContextMenu&&(this._unsubscribeContextMenu(),this._unsubscribeContextMenu=null),null!==this._unsubscribeRootMouseEvents&&(this._unsubscribeRootMouseEvents(),this._unsubscribeRootMouseEvents=null),null!==this._unsubscribeRootTouchEvents&&(this._unsubscribeRootTouchEvents(),this._unsubscribeRootTouchEvents=null),null!==this._unsubscribeMobileSafariEvents&&(this._unsubscribeMobileSafariEvents(),this._unsubscribeMobileSafariEvents=null),this._clearLongTapTimeout(),this._resetClickTimeout()},t.prototype._mouseEnterHandler=function(t){var e,i,n,r=this;null===(e=this._unsubscribeMousemove)||void 0===e||e.call(this),null===(i=this._unsubscribeMouseWheel)||void 0===i||i.call(this),null===(n=this._unsubscribeContextMenu)||void 0===n||n.call(this);var a=this._mouseMoveHandler.bind(this);this._unsubscribeMousemove=function(){r._target.removeEventListener("mousemove",a)},this._target.addEventListener("mousemove",a);var o=this._mouseWheelHandler.bind(this);this._unsubscribeMouseWheel=function(){r._target.removeEventListener("wheel",o)},this._target.addEventListener("wheel",o,{passive:!1});var s=this._contextMenuHandler.bind(this);this._unsubscribeContextMenu=function(){r._target.removeEventListener("contextmenu",s)},this._target.addEventListener("contextmenu",s,{passive:!1}),this._firesTouchEvents(t)||(this._processEvent(this._makeCompatEvent(t),this._handler.mouseEnterEvent),this._acceptMouseLeave=!0)},t.prototype._resetClickTimeout=function(){null!==this._clickTimeoutId&&clearTimeout(this._clickTimeoutId),this._clickCount=0,this._clickTimeoutId=null,this._clickCoordinate={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY}},t.prototype._resetTapTimeout=function(){null!==this._tapTimeoutId&&clearTimeout(this._tapTimeoutId),this._tapCount=0,this._tapTimeoutId=null,this._tapCoordinate={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY}},t.prototype._mouseMoveHandler=function(t){this._mousePressed||null!==this._touchMoveStartCoordinate||this._firesTouchEvents(t)||(this._processEvent(this._makeCompatEvent(t),this._handler.mouseMoveEvent),this._acceptMouseLeave=!0)},t.prototype._mouseWheelHandler=function(t){if(Math.abs(t.deltaX)>Math.abs(t.deltaY)){if(!Mt(this._handler.mouseWheelHortEvent))return;if(this._preventDefault(t),0===Math.abs(t.deltaX))return;this._handler.mouseWheelHortEvent(this._makeCompatEvent(t),-t.deltaX)}else{if(!Mt(this._handler.mouseWheelVertEvent))return;var e=-t.deltaY/100;if(0===e)return;switch(this._preventDefault(t),t.deltaMode){case t.DOM_DELTA_PAGE:e*=120;break;case t.DOM_DELTA_LINE:e*=32;break}if(0!==e){var i=Math.sign(e)*Math.min(1,Math.abs(e));this._handler.mouseWheelVertEvent(this._makeCompatEvent(t),i)}}},t.prototype._contextMenuHandler=function(t){this._preventDefault(t)},t.prototype._touchMoveHandler=function(t){var e=this._touchWithId(t.changedTouches,this._activeTouchId);if(null!==e&&(this._lastTouchEventTimeStamp=this._eventTimeStamp(t),null===this._startPinchMiddleCoordinate&&!this._preventTouchDragProcess)){this._pinchPrevented=!0;var i=this._mouseTouchMoveWithDownInfo(this._getCoordinate(e),this._touchMoveStartCoordinate),n=i.xOffset,r=i.yOffset,a=i.manhattanDistance;if(this._touchMoveExceededManhattanDistance||!(a<5)){if(!this._touchMoveExceededManhattanDistance){var o=.5*n,s=r>=o&&!this._options.treatVertDragAsPageScroll(),l=o>r&&!this._options.treatHorzDragAsPageScroll();s||l||(this._preventTouchDragProcess=!0),this._touchMoveExceededManhattanDistance=!0,this._cancelTap=!0,this._clearLongTapTimeout(),this._resetTapTimeout()}this._preventTouchDragProcess||this._processEvent(this._makeCompatEvent(t,e),this._handler.touchMoveEvent)}}},t.prototype._mouseMoveWithDownHandler=function(t){if(0===t.button){var e=this._mouseTouchMoveWithDownInfo(this._getCoordinate(t),this._mouseMoveStartCoordinate),i=e.manhattanDistance;i>=5&&(this._cancelClick=!0,this._resetClickTimeout()),this._cancelClick&&this._processEvent(this._makeCompatEvent(t),this._handler.pressedMouseMoveEvent)}},t.prototype._mouseTouchMoveWithDownInfo=function(t,e){var i=Math.abs(e.x-t.x),n=Math.abs(e.y-t.y),r=i+n;return{xOffset:i,yOffset:n,manhattanDistance:r}},t.prototype._touchEndHandler=function(t){var e=this._touchWithId(t.changedTouches,this._activeTouchId);if(null===e&&0===t.touches.length&&(e=t.changedTouches[0]),null!==e){this._activeTouchId=null,this._lastTouchEventTimeStamp=this._eventTimeStamp(t),this._clearLongTapTimeout(),this._touchMoveStartCoordinate=null,null!==this._unsubscribeRootTouchEvents&&(this._unsubscribeRootTouchEvents(),this._unsubscribeRootTouchEvents=null);var i=this._makeCompatEvent(t,e);if(this._processEvent(i,this._handler.touchEndEvent),++this._tapCount,null!==this._tapTimeoutId&&this._tapCount>1){var n=this._mouseTouchMoveWithDownInfo(this._getCoordinate(e),this._tapCoordinate).manhattanDistance;n<30&&!this._cancelTap&&this._processEvent(i,this._handler.doubleTapEvent),this._resetTapTimeout()}else this._cancelTap||(this._processEvent(i,this._handler.tapEvent),Mt(this._handler.tapEvent)&&this._preventDefault(t));0===this._tapCount&&this._preventDefault(t),0===t.touches.length&&this._longTapActive&&(this._longTapActive=!1,this._preventDefault(t))}},t.prototype._mouseUpHandler=function(t){if(0===t.button){var e=this._makeCompatEvent(t);if(this._mouseMoveStartCoordinate=null,this._mousePressed=!1,null!==this._unsubscribeRootMouseEvents&&(this._unsubscribeRootMouseEvents(),this._unsubscribeRootMouseEvents=null),mr()){var i=this._target.ownerDocument.documentElement;i.removeEventListener("mouseleave",this._onFirefoxOutsideMouseUp)}if(!this._firesTouchEvents(t))if(this._processEvent(e,this._handler.mouseUpEvent),++this._clickCount,null!==this._clickTimeoutId&&this._clickCount>1){var n=this._mouseTouchMoveWithDownInfo(this._getCoordinate(t),this._clickCoordinate).manhattanDistance;n<5&&!this._cancelClick&&this._processEvent(e,this._handler.mouseDoubleClickEvent),this._resetClickTimeout()}else this._cancelClick||this._processEvent(e,this._handler.mouseClickEvent)}},t.prototype._clearLongTapTimeout=function(){null!==this._longTapTimeoutId&&(clearTimeout(this._longTapTimeoutId),this._longTapTimeoutId=null)},t.prototype._touchStartHandler=function(t){if(null===this._activeTouchId){var e=t.changedTouches[0];this._activeTouchId=e.identifier,this._lastTouchEventTimeStamp=this._eventTimeStamp(t);var i=this._target.ownerDocument.documentElement;this._cancelTap=!1,this._touchMoveExceededManhattanDistance=!1,this._preventTouchDragProcess=!1,this._touchMoveStartCoordinate=this._getCoordinate(e),null!==this._unsubscribeRootTouchEvents&&(this._unsubscribeRootTouchEvents(),this._unsubscribeRootTouchEvents=null);var n=this._touchMoveHandler.bind(this),r=this._touchEndHandler.bind(this);this._unsubscribeRootTouchEvents=function(){i.removeEventListener("touchmove",n),i.removeEventListener("touchend",r)},i.addEventListener("touchmove",n,{passive:!1}),i.addEventListener("touchend",r,{passive:!1}),this._clearLongTapTimeout(),this._longTapTimeoutId=setTimeout(this._longTapHandler.bind(this,t),500),this._processEvent(this._makeCompatEvent(t,e),this._handler.touchStartEvent),null===this._tapTimeoutId&&(this._tapCount=0,this._tapTimeoutId=setTimeout(this._resetTapTimeout.bind(this),500),this._tapCoordinate=this._getCoordinate(e))}},t.prototype._mouseDownHandler=function(t){if(2===t.button)return this._preventDefault(t),void this._processEvent(this._makeCompatEvent(t),this._handler.mouseRightClickEvent);if(0===t.button){var e=this._target.ownerDocument.documentElement;mr()&&e.addEventListener("mouseleave",this._onFirefoxOutsideMouseUp),this._cancelClick=!1,this._mouseMoveStartCoordinate=this._getCoordinate(t),null!==this._unsubscribeRootMouseEvents&&(this._unsubscribeRootMouseEvents(),this._unsubscribeRootMouseEvents=null);var i=this._mouseMoveWithDownHandler.bind(this),n=this._mouseUpHandler.bind(this);this._unsubscribeRootMouseEvents=function(){e.removeEventListener("mousemove",i),e.removeEventListener("mouseup",n)},e.addEventListener("mousemove",i),e.addEventListener("mouseup",n),this._mousePressed=!0,this._firesTouchEvents(t)||(this._processEvent(this._makeCompatEvent(t),this._handler.mouseDownEvent),null===this._clickTimeoutId&&(this._clickCount=0,this._clickTimeoutId=setTimeout(this._resetClickTimeout.bind(this),500),this._clickCoordinate=this._getCoordinate(t)))}},t.prototype._init=function(){var t=this;this._target.addEventListener("mouseenter",this._mouseEnterHandler.bind(this)),this._target.addEventListener("touchcancel",this._clearLongTapTimeout.bind(this));var e=this._target.ownerDocument,i=function(e){null!=t._handler.mouseDownOutsideEvent&&(e.composed&&t._target.contains(e.composedPath()[0])||null!==e.target&&t._target.contains(e.target)||t._handler.mouseDownOutsideEvent({x:0,y:0,pageX:0,pageY:0}))};this._unsubscribeOutsideTouchEvents=function(){e.removeEventListener("touchstart",i)},this._unsubscribeOutsideMouseEvents=function(){e.removeEventListener("mousedown",i)},e.addEventListener("mousedown",i),e.addEventListener("touchstart",i,{passive:!0}),yr()&&(this._unsubscribeMobileSafariEvents=function(){t._target.removeEventListener("dblclick",t._onMobileSafariDoubleClick)},this._target.addEventListener("dblclick",this._onMobileSafariDoubleClick)),this._target.addEventListener("mouseleave",this._mouseLeaveHandler.bind(this)),this._target.addEventListener("touchstart",this._touchStartHandler.bind(this),{passive:!0}),this._target.addEventListener("mousedown",function(t){if(1===t.button)return t.preventDefault(),!1}),this._target.addEventListener("mousedown",this._mouseDownHandler.bind(this)),this._initPinch(),this._target.addEventListener("touchmove",function(){},{passive:!1})},t.prototype._initPinch=function(){var t=this;(Mt(this._handler.pinchStartEvent)||Mt(this._handler.pinchEvent)||Mt(this._handler.pinchEndEvent))&&(this._target.addEventListener("touchstart",function(e){t._checkPinchState(e.touches)},{passive:!0}),this._target.addEventListener("touchmove",function(e){if(2===e.touches.length&&null!==t._startPinchMiddleCoordinate&&Mt(t._handler.pinchEvent)){var i=t._getTouchDistance(e.touches[0],e.touches[1]),n=i/t._startPinchDistance;t._handler.pinchEvent(X(X({},t._startPinchMiddleCoordinate),{pageX:0,pageY:0}),n),t._preventDefault(e)}},{passive:!1}),this._target.addEventListener("touchend",function(e){t._checkPinchState(e.touches)}))},t.prototype._checkPinchState=function(t){1===t.length&&(this._pinchPrevented=!1),2!==t.length||this._pinchPrevented||this._longTapActive?this._stopPinch():this._startPinch(t)},t.prototype._startPinch=function(t){var e,i=null!==(e=this._target.getBoundingClientRect())&&void 0!==e?e:{left:0,top:0};this._startPinchMiddleCoordinate={x:(t[0].clientX-i.left+(t[1].clientX-i.left))/2,y:(t[0].clientY-i.top+(t[1].clientY-i.top))/2},this._startPinchDistance=this._getTouchDistance(t[0],t[1]),Mt(this._handler.pinchStartEvent)&&this._handler.pinchStartEvent({x:0,y:0,pageX:0,pageY:0}),this._clearLongTapTimeout()},t.prototype._stopPinch=function(){null!==this._startPinchMiddleCoordinate&&(this._startPinchMiddleCoordinate=null,Mt(this._handler.pinchEndEvent)&&this._handler.pinchEndEvent({x:0,y:0,pageX:0,pageY:0}))},t.prototype._mouseLeaveHandler=function(t){var e,i,n;null===(e=this._unsubscribeMousemove)||void 0===e||e.call(this),null===(i=this._unsubscribeMouseWheel)||void 0===i||i.call(this),null===(n=this._unsubscribeContextMenu)||void 0===n||n.call(this),this._firesTouchEvents(t)||this._acceptMouseLeave&&(this._processEvent(this._makeCompatEvent(t),this._handler.mouseLeaveEvent),this._acceptMouseLeave=!yr())},t.prototype._longTapHandler=function(t){var e=this._touchWithId(t.touches,this._activeTouchId);null!==e&&(this._processEvent(this._makeCompatEvent(t,e),this._handler.longTapEvent),this._cancelTap=!0,this._longTapActive=!0)},t.prototype._firesTouchEvents=function(t){var e;return Mt(null===(e=t.sourceCapabilities)||void 0===e?void 0:e.firesTouchEvents)?t.sourceCapabilities.firesTouchEvents:this._eventTimeStamp(t)this._startScrollCoordinate.y-s.y){var d=s.x-this._startScrollCoordinate.x;c.getTimeScaleStore().scroll(d)}return!0;case ji.X_AXIS:case ji.Y_AXIS:var h=o.dispatchEvent("pressedMouseMoveEvent",s);return h&&(null===(n=s.preventDefault)||void 0===n||n.call(s),this._chart.updatePane(1)),h}}return!1},t.prototype.touchEndEvent=function(t){var e=this,i=this._findWidgetByEvent(t).widget;if(null!==i){var n=this._makeWidgetEvent(t,i),r=i.getName();switch(r){case ji.MAIN:if(i.dispatchEvent("mouseUpEvent",n),null!==this._startScrollCoordinate){var a=(new Date).getTime()-this._flingStartTime,o=n.x-this._startScrollCoordinate.x,s=o/(a>0?a:1)*20;if(a<200&&Math.abs(s)>0){var l=this._chart.getChartStore().getTimeScaleStore(),c=function(){e._flingScrollRequestId=oe(function(){l.startScroll(),l.scroll(s),s*=.975,Math.abs(s)<1?null!==e._flingScrollRequestId&&(se(e._flingScrollRequestId),e._flingScrollRequestId=null):c()})};c()}}return!0;case ji.X_AXIS:case ji.Y_AXIS:var u=i.dispatchEvent("mouseUpEvent",n);u&&this._chart.updatePane(1)}}return!1},t.prototype.tapEvent=function(t){var e=this._findWidgetByEvent(t),i=e.pane,n=e.widget,r=!1;if(null!==n){var a=this._makeWidgetEvent(t,n),o=n.dispatchEvent("mouseClickEvent",a);if(n.getName()===ji.MAIN){var s=this._makeWidgetEvent(t,n),l=this._chart.getChartStore(),c=l.getTooltipStore();o?(this._touchCancelCrosshair=!0,this._touchCoordinate=null,c.setCrosshair(void 0,{notInvalidate:!0}),r=!0):(this._touchCancelCrosshair||this._touchZoomed||(this._touchCoordinate={x:s.x,y:s.y},c.setCrosshair({x:s.x,y:s.y,paneId:null===i||void 0===i?void 0:i.getId()},{notInvalidate:!0}),r=!0),this._touchCancelCrosshair=!1)}(r||o)&&this._chart.updatePane(1)}return r},t.prototype.doubleTapEvent=function(t){return this.mouseDoubleClickEvent(t)},t.prototype.longTapEvent=function(t){var e=this._findWidgetByEvent(t),i=e.pane,n=e.widget;if(null!==n&&n.getName()===ji.MAIN){var r=this._makeWidgetEvent(t,n);return this._touchCoordinate={x:r.x,y:r.y},this._chart.getChartStore().getTooltipStore().setCrosshair({x:r.x,y:r.y,paneId:null===i||void 0===i?void 0:i.getId()}),!0}return!1},t.prototype._findWidgetByEvent=function(t){var e,i,n,r,a=t.x,o=t.y,s=this._chart.getAllSeparatorPanes(),l=this._chart.getChartStore().getStyles().separator.size;try{for(var c=j(s),u=c.next();!u.done;u=c.next()){var d=q(u.value,2),h=d[1],p=h.getBounding(),f=p.top-Math.round((qi-l)/2);if(a>=p.left&&a<=p.left+p.width&&o>=f&&o<=f+qi)return{pane:h,widget:h.getWidget()}}}catch(k){e={error:k}}finally{try{u&&!u.done&&(i=c.return)&&i.call(c)}finally{if(e)throw e.error}}var v=this._chart.getAllDrawPanes(),g=null;try{for(var m=j(v),y=m.next();!y.done;y=m.next()){var b=y.value;p=b.getBounding();if(a>=p.left&&a<=p.left+p.width&&o>=p.top&&o<=p.top+p.height){g=b;break}}}catch(A){n={error:A}}finally{try{y&&!y.done&&(r=m.return)&&r.call(m)}finally{if(n)throw n.error}}var x=null;if(null!==g){if(null===x){var _=g.getMainWidget(),w=_.getBounding();a>=w.left&&a<=w.left+w.width&&o>=w.top&&o<=w.top+w.height&&(x=_)}if(null===x){var C=g.getYAxisWidget();if(null!==C){var S=C.getBounding();a>=S.left&&a<=S.left+S.width&&o>=S.top&&o<=S.top+S.height&&(x=C)}}}return{pane:g,widget:x}},t.prototype._makeWidgetEvent=function(t,e){var i,n,r,a=null!==(i=null===e||void 0===e?void 0:e.getBounding())&&void 0!==i?i:null;return X(X({},t),{x:t.x-(null!==(n=null===a||void 0===a?void 0:a.left)&&void 0!==n?n:0),y:t.y-(null!==(r=null===a||void 0===a?void 0:a.top)&&void 0!==r?r:0)})},t.prototype.destroy=function(){this._container.removeEventListener("keydown",this._boundKeyBoardDownEvent),this._event.destroy()},t}();(function(t){t["Root"]="root",t["Main"]="main",t["YAxis"]="yAxis"})(br||(br={}));var Cr=function(){function t(t,e){this._drawPanes=[],this._separatorPanes=new Map,this._initContainer(t),this._chartEvent=new wr(this._chartContainer,this),this._chartStore=new Gi(this,e),this._initPanes(e),this.adjustPaneViewport(!0,!0,!0)}return t.prototype._initContainer=function(t){this._container=t,this._chartContainer=he("div",{position:"relative",width:"100%",outline:"none",borderStyle:"none",cursor:"crosshair",boxSizing:"border-box",userSelect:"none",webkitUserSelect:"none",msUserSelect:"none",MozUserSelect:"none",webkitTapHighlightColor:"transparent"}),this._chartContainer.tabIndex=1,t.appendChild(this._chartContainer)},t.prototype._initPanes=function(t){var e,i=this,n=null!==(e=null===t||void 0===t?void 0:t.layout)&&void 0!==e?e:[{type:"candle"}],r=!1,a=!1,o=function(t){if(!a){var e=i._createPane(pr,Vi.X_AXIS,null!==t&&void 0!==t?t:{});i._xAxisPane=e,a=!0}};n.forEach(function(t){var e,n,a;switch(t.type){case"candle":if(!r){var s=null!==(e=t.options)&&void 0!==e?e:{};wt(s,{id:Vi.CANDLE}),i._candlePane=i._createPane(rr,Vi.CANDLE,s);var l=null!==(n=t.content)&&void 0!==n?n:[];l.forEach(function(t){i.createIndicator(t,!0,s)}),r=!0}break;case"indicator":var c;l=null!==(a=t.content)&&void 0!==a?a:[];if(l.length>0)l.forEach(function(e){Mt(c)?i.createIndicator(e,!0,{id:c}):c=i.createIndicator(e,!0,t.options)});break;case"xAxis":o(t.options);break}}),o({position:"bottom"})},t.prototype._createPane=function(t,e,i){var n,r=null,a=null,o=null===i||void 0===i?void 0:i.position;switch(o){case"top":var s=this._drawPanes[0];Mt(s)&&(a=new t(this._chartContainer,s.getContainer(),this,e,null!==i&&void 0!==i?i:{}),r=0);break;case"bottom":break;default:for(var l=this._drawPanes.length-1;l>-1;l--){var c=this._drawPanes[l],u=this._drawPanes[l-1];if("bottom"===(null===c||void 0===c?void 0:c.getOptions().position)&&"bottom"!==(null===u||void 0===u?void 0:u.getOptions().position)){a=new t(this._chartContainer,c.getContainer(),this,e,null!==i&&void 0!==i?i:{}),r=l;break}}}if(Mt(a)||(a=new t(this._chartContainer,null,this,e,null!==i&&void 0!==i?i:{})),Tt(r)?(this._drawPanes.splice(r,0,a),n=r):(this._drawPanes.push(a),n=this._drawPanes.length-1),a.getId()!==Vi.X_AXIS){var d=this._drawPanes[n+1];if(Mt(d)&&d.getId()===Vi.X_AXIS&&(d=this._drawPanes[n+2]),Mt(d)){var h=this._separatorPanes.get(d);Mt(h)?h.setTopPane(a):(h=new gr(this._chartContainer,d.getContainer(),this,"",a,d),this._separatorPanes.set(d,h))}var p=this._drawPanes[n-1];if(Mt(p)&&p.getId()===Vi.X_AXIS&&(p=this._drawPanes[n-2]),Mt(p)){h=new gr(this._chartContainer,a.getContainer(),this,"",p,a);this._separatorPanes.set(a,h)}}return a},t.prototype._measurePaneHeight=function(){var t,e=this,i=Math.floor(this._container.clientHeight),n=this._chartStore.getStyles().separator.size,r=this._xAxisPane.getAxisComponent().getAutoSize(),a=i-r-this._separatorPanes.size*n;a<0&&(a=0);var o=0;this._drawPanes.forEach(function(t){if(t.getId()!==Vi.CANDLE&&t.getId()!==Vi.X_AXIS){var e=t.getBounding().height,i=t.getOptions().minHeight;ea?(o=a,e=Math.max(a-o,0)):o+=e,t.setBounding({height:e})}});var s=a-o;null===(t=this._candlePane)||void 0===t||t.setBounding({height:s}),this._xAxisPane.setBounding({height:r});var l=0;this._drawPanes.forEach(function(t){var i=e._separatorPanes.get(t);Mt(i)&&(i.setBounding({height:n,top:l}),l+=n),t.setBounding({top:l}),l+=t.getBounding().height})},t.prototype._measurePaneWidth=function(){var t=this,e=Math.floor(this._container.clientWidth),i=this._chartStore.getStyles(),n=i.yAxis,r=n.position===K.Left,a=!n.inside,o=0,s=0,l=0,c=0;this._drawPanes.forEach(function(t){t.getId()!==Vi.X_AXIS&&(s=Math.max(s,t.getAxisComponent().getAutoSize()))}),s>e&&(s=e),a?(o=e-s,r?(l=0,c=s):(l=e-s,c=0)):(o=e,c=0,l=r?0:e-s),this._chartStore.getTimeScaleStore().setTotalBarSpace(o);var u,d={width:e},h={width:o,left:c},p={width:s,left:l},f=i.separator.fill;u=a&&!f?h:d,this._drawPanes.forEach(function(e){var i;null===(i=t._separatorPanes.get(e))||void 0===i||i.setBounding(u),e.setBounding(d,h,p)})},t.prototype._setPaneOptions=function(t,e){var i,n;if(Et(t.id)){var r=this.getDrawPaneById(t.id),a=!1;if(null!==r){var o=e;if(t.id!==Vi.CANDLE&&Tt(t.height)&&t.height>0){var s=Math.max(null!==(i=t.minHeight)&&void 0!==i?i:r.getOptions().minHeight,0),l=Math.max(s,t.height);r.setBounding({height:l}),o=!0,a=!0}(Et(null===(n=t.axisOptions)||void 0===n?void 0:n.name)||Mt(t.gap))&&(o=!0),r.setOptions(t),o&&this.adjustPaneViewport(a,!0,!0,!0,!0)}}},t.prototype.getDrawPaneById=function(t){if(t===Vi.CANDLE)return this._candlePane;if(t===Vi.X_AXIS)return this._xAxisPane;var e=this._drawPanes.find(function(e){return e.getId()===t});return null!==e&&void 0!==e?e:null},t.prototype.getContainer=function(){return this._container},t.prototype.getChartStore=function(){return this._chartStore},t.prototype.getXAxisPane=function(){return this._xAxisPane},t.prototype.getAllDrawPanes=function(){return this._drawPanes},t.prototype.getAllSeparatorPanes=function(){return this._separatorPanes},t.prototype.adjustPaneViewport=function(t,e,i,n,r){t&&this._measurePaneHeight();var a=e,o=null!==n&&void 0!==n&&n,s=null!==r&&void 0!==r&&r;(o||s)&&this._drawPanes.forEach(function(t){var e=t.getAxisComponent().buildTicks(s);a||(a=e)}),a&&this._measurePaneWidth(),null!==i&&void 0!==i&&i&&(this._xAxisPane.getAxisComponent().buildTicks(!0),this.updatePane(4))},t.prototype.updatePane=function(t,e){if(Mt(e)){var i=this.getDrawPaneById(e);null===i||void 0===i||i.update(t)}else this._separatorPanes.forEach(function(e){e.update(t)}),this._drawPanes.forEach(function(e){e.update(t)})},t.prototype.crosshairChange=function(t){var e=this,i=this._chartStore.getActionStore();if(i.has(Pt.OnCrosshairChange)){var n={};this._drawPanes.forEach(function(i){var r=i.getId(),a={},o=e._chartStore.getIndicatorStore().getInstances(r);o.forEach(function(e){var i,n=e.result;a[e.name]=n[null!==(i=t.dataIndex)&&void 0!==i?i:n.length-1]}),n[r]=a}),Et(t.paneId)&&i.execute(Pt.OnCrosshairChange,X(X({},t),{indicatorData:n}))}},t.prototype.getDom=function(t,e){var i,n;if(!Et(t))return this._chartContainer;var r=this.getDrawPaneById(t);if(null!==r){var a=null!==e&&void 0!==e?e:br.Root;switch(a){case br.Root:return r.getContainer();case br.Main:return r.getMainWidget().getContainer();case br.YAxis:return null!==(n=null===(i=r.getYAxisWidget())||void 0===i?void 0:i.getContainer())&&void 0!==n?n:null}}return null},t.prototype.getSize=function(t,e){var i,n;if(!Mt(t))return{width:Math.floor(this._chartContainer.clientWidth),height:Math.floor(this._chartContainer.clientHeight),left:0,top:0,right:0,bottom:0};var r=this.getDrawPaneById(t);if(null!==r){var a=null!==e&&void 0!==e?e:br.Root;switch(a){case br.Root:return r.getBounding();case br.Main:return r.getMainWidget().getBounding();case br.YAxis:return null!==(n=null===(i=r.getYAxisWidget())||void 0===i?void 0:i.getBounding())&&void 0!==n?n:null}}return null},t.prototype.setStyles=function(t){var e,i,n;this._chartStore.setOptions({styles:t}),n=Et(t)?Ui(t):t,Mt(null===(e=null===n||void 0===n?void 0:n.yAxis)||void 0===e?void 0:e.type)&&(null===(i=this._candlePane)||void 0===i||i.getAxisComponent().setAutoCalcTickFlag(!0)),this.adjustPaneViewport(!0,!0,!0,!0,!0)},t.prototype.getStyles=function(){return this._chartStore.getStyles()},t.prototype.setLocale=function(t){this._chartStore.setOptions({locale:t}),this.adjustPaneViewport(!0,!0,!0,!0,!0)},t.prototype.getLocale=function(){return this._chartStore.getLocale()},t.prototype.setCustomApi=function(t){this._chartStore.setOptions({customApi:t}),this.adjustPaneViewport(!0,!0,!0,!0,!0)},t.prototype.setPriceVolumePrecision=function(t,e){this._chartStore.setPrecision({price:t,volume:e})},t.prototype.getPriceVolumePrecision=function(){return this._chartStore.getPrecision()},t.prototype.setTimezone=function(t){this._chartStore.setOptions({timezone:t}),this._xAxisPane.getAxisComponent().buildTicks(!0),this._xAxisPane.update(3)},t.prototype.getTimezone=function(){return this._chartStore.getTimeScaleStore().getTimezone()},t.prototype.setOffsetRightDistance=function(t){this._chartStore.getTimeScaleStore().setOffsetRightDistance(t,!0)},t.prototype.getOffsetRightDistance=function(){return this._chartStore.getTimeScaleStore().getOffsetRightDistance()},t.prototype.setMaxOffsetLeftDistance=function(t){t<0?bt("setMaxOffsetLeftDistance","distance","distance must greater than zero!!!"):this._chartStore.getTimeScaleStore().setMaxOffsetLeftDistance(t)},t.prototype.setMaxOffsetRightDistance=function(t){t<0?bt("setMaxOffsetRightDistance","distance","distance must greater than zero!!!"):this._chartStore.getTimeScaleStore().setMaxOffsetRightDistance(t)},t.prototype.setLeftMinVisibleBarCount=function(t){t<0?bt("setLeftMinVisibleBarCount","barCount","barCount must greater than zero!!!"):this._chartStore.getTimeScaleStore().setLeftMinVisibleBarCount(Math.ceil(t))},t.prototype.setRightMinVisibleBarCount=function(t){t<0?bt("setRightMinVisibleBarCount","barCount","barCount must greater than zero!!!"):this._chartStore.getTimeScaleStore().setRightMinVisibleBarCount(Math.ceil(t))},t.prototype.setBarSpace=function(t){this._chartStore.getTimeScaleStore().setBarSpace(t)},t.prototype.getBarSpace=function(){return this._chartStore.getTimeScaleStore().getBarSpace().bar},t.prototype.getVisibleRange=function(){return this._chartStore.getTimeScaleStore().getVisibleRange()},t.prototype.clearData=function(){this._chartStore.clear()},t.prototype.getDataList=function(){return this._chartStore.getDataList()},t.prototype.applyNewData=function(t,e,i){Mt(i)&&bt("applyNewData","","param `callback` has been deprecated since version 9.8.0, use `subscribeAction('onDataReady')` instead."),this._chartStore.addData(t,Kt.Init,e).then(function(){}).catch(function(){}).finally(function(){null===i||void 0===i||i()})},t.prototype.applyMoreData=function(t,e,i){bt("","","Api `applyMoreData` has been deprecated since version 9.8.0."),this._chartStore.addData(t,Kt.Forward,null===e||void 0===e||e).then(function(){}).catch(function(){}).finally(function(){null===i||void 0===i||i()})},t.prototype.updateData=function(t,e){Mt(e)&&bt("updateData","","param `callback` has been deprecated since version 9.8.0, use `subscribeAction('onDataReady')` instead."),this._chartStore.addData(t).then(function(){}).catch(function(){}).finally(function(){null===e||void 0===e||e()})},t.prototype.loadMore=function(t){bt("","","Api `loadMore` has been deprecated since version 9.8.0, use `setLoadDataCallback` instead."),this._chartStore.setLoadMoreCallback(t)},t.prototype.setLoadDataCallback=function(t){this._chartStore.setLoadDataCallback(t)},t.prototype.createIndicator=function(t,e,i,n){var r,a=this,o=Et(t)?{name:t}:t;if(null===ai(o.name))return bt("createIndicator","value","indicator not supported, you may need to use registerIndicator to add one!!!"),null;var s=null===i||void 0===i?void 0:i.id,l=this.getDrawPaneById(null!==s&&void 0!==s?s:"");if(null!==l)this._chartStore.getIndicatorStore().addInstance(o,null!==s&&void 0!==s?s:"",null!==e&&void 0!==e&&e).then(function(t){var e;a._setPaneOptions(null!==i&&void 0!==i?i:{},null!==(e=l.getAxisComponent().buildTicks(!0))&&void 0!==e&&e)}).catch(function(t){});else{null!==s&&void 0!==s||(s=de(Vi.INDICATOR));var c=this._createPane(nr,s,null!==i&&void 0!==i?i:{}),u=null!==(r=null===i||void 0===i?void 0:i.height)&&void 0!==r?r:Wi;c.setBounding({height:u}),this._chartStore.getIndicatorStore().addInstance(o,s,null!==e&&void 0!==e&&e).finally(function(){a.adjustPaneViewport(!0,!0,!0,!0,!0),null===n||void 0===n||n()})}return null!==s&&void 0!==s?s:null},t.prototype.overrideIndicator=function(t,e,i){var n=this;this._chartStore.getIndicatorStore().override(t,null!==e&&void 0!==e?e:null).then(function(t){var e=q(t,2),r=e[0],a=e[1];(r||a)&&(n.adjustPaneViewport(!1,a,!0,a),null===i||void 0===i||i())}).catch(function(){})},t.prototype.getIndicatorByPaneId=function(t,e){return this._chartStore.getIndicatorStore().getInstanceByPaneId(t,e)},t.prototype.removeIndicator=function(t,e){var i,n,r,a=this._chartStore.getIndicatorStore(),o=a.removeInstance(t,e);if(o){var s=!1;if(t!==Vi.CANDLE&&!a.hasInstances(t)){var l=this.getDrawPaneById(t),c=this._drawPanes.findIndex(function(e){return e.getId()===t});if(null!==l){s=!0;var u=this._separatorPanes.get(l);if(Mt(u)){var d=null===u||void 0===u?void 0:u.getTopPane();try{for(var h=j(this._separatorPanes),p=h.next();!p.done;p=h.next()){var f=p.value;if(f[1].getTopPane().getId()===l.getId()){f[1].setTopPane(d);break}}}catch(g){i={error:g}}finally{try{p&&!p.done&&(n=h.return)&&n.call(h)}finally{if(i)throw i.error}}u.destroy(),this._separatorPanes.delete(l)}this._drawPanes.splice(c,1),l.destroy();var v=this._drawPanes[0];Mt(v)&&v.getId()===Vi.X_AXIS&&(v=this._drawPanes[1]),null===(r=this._separatorPanes.get(v))||void 0===r||r.destroy(),this._separatorPanes.delete(v)}}this.adjustPaneViewport(s,!0,!0,!0,!0)}},t.prototype.createOverlay=function(t,e){var i=[];if(Et(t))i=[{name:t}];else if(St(t))i=t.map(function(t){return Et(t)?{name:t}:t});else{var n=t;i=[n]}var r=!0;Mt(e)&&null!==this.getDrawPaneById(e)||(e=Vi.CANDLE,r=!1);var a=this._chartStore.getOverlayStore().addInstances(i,e,r);return St(t)?a:a[0]},t.prototype.getOverlayById=function(t){return this._chartStore.getOverlayStore().getInstanceById(t)},t.prototype.overrideOverlay=function(t){this._chartStore.getOverlayStore().override(t)},t.prototype.removeOverlay=function(t){var e;Mt(t)&&(e=Et(t)?{id:t}:t),this._chartStore.getOverlayStore().removeInstance(e)},t.prototype.setPaneOptions=function(t){this._setPaneOptions(t,!1)},t.prototype.setZoomEnabled=function(t){this._chartStore.getTimeScaleStore().setZoomEnabled(t)},t.prototype.isZoomEnabled=function(){return this._chartStore.getTimeScaleStore().getZoomEnabled()},t.prototype.setScrollEnabled=function(t){this._chartStore.getTimeScaleStore().setScrollEnabled(t)},t.prototype.isScrollEnabled=function(){return this._chartStore.getTimeScaleStore().getScrollEnabled()},t.prototype.scrollByDistance=function(t,e){var i=Tt(e)&&e>0?e:0,n=this._chartStore.getTimeScaleStore();if(n.startScroll(),i>0){var r=new le({duration:i});r.doFrame(function(e){var r=t*(e/i);n.scroll(r)}),r.start()}else n.scroll(t)},t.prototype.scrollToRealTime=function(t){var e=this._chartStore.getTimeScaleStore(),i=e.getBarSpace().bar,n=e.getLastBarRightSideDiffBarCount()-e.getInitialOffsetRightDistance()/i,r=n*i;this.scrollByDistance(r,t)},t.prototype.scrollToDataIndex=function(t,e){var i=this._chartStore.getTimeScaleStore(),n=(i.getLastBarRightSideDiffBarCount()+(this.getDataList().length-1-t))*i.getBarSpace().bar;this.scrollByDistance(n,e)},t.prototype.scrollToTimestamp=function(t,e){var i=pe(this.getDataList(),"timestamp",t);this.scrollToDataIndex(i,e)},t.prototype.zoomAtCoordinate=function(t,e,i){var n=Tt(i)&&i>0?i:0,r=this._chartStore.getTimeScaleStore(),a=r.getBarSpace().bar,o=a*t,s=o-a;if(n>0){var l=0,c=new le({duration:n});c.doFrame(function(t){var i=s*(t/n),a=(i-l)/r.getBarSpace().bar*ke;r.zoom(a,e),l=i}),c.start()}else r.zoom(s/a*ke,e)},t.prototype.zoomAtDataIndex=function(t,e,i){var n=this._chartStore.getTimeScaleStore().dataIndexToCoordinate(e);this.zoomAtCoordinate(t,{x:n,y:0},i)},t.prototype.zoomAtTimestamp=function(t,e,i){var n=pe(this.getDataList(),"timestamp",e);this.zoomAtDataIndex(t,n,i)},t.prototype.convertToPixel=function(t,e){var i,n=e.paneId,r=void 0===n?Vi.CANDLE:n,a=e.absolute,o=void 0!==a&&a,s=[];if(r!==Vi.X_AXIS){var l=this.getDrawPaneById(r);if(null!==l){var c=this._chartStore.getTimeScaleStore(),u=l.getBounding(),d=(new Array).concat(t),h=this._xAxisPane.getAxisComponent(),p=l.getAxisComponent();s=d.map(function(t){var e={},i=t.dataIndex;if(Tt(t.timestamp)&&(i=c.timestampToDataIndex(t.timestamp)),Tt(i)&&(e.x=null===h||void 0===h?void 0:h.convertToPixel(i)),Tt(t.value)){var n=null===p||void 0===p?void 0:p.convertToPixel(t.value);e.y=o?u.top+n:n}return e})}}return St(t)?s:null!==(i=s[0])&&void 0!==i?i:{}},t.prototype.convertFromPixel=function(t,e){var i,n=e.paneId,r=void 0===n?Vi.CANDLE:n,a=e.absolute,o=void 0!==a&&a,s=[];if(r!==Vi.X_AXIS){var l=this.getDrawPaneById(r);if(null!==l){var c=this._chartStore.getTimeScaleStore(),u=l.getBounding(),d=(new Array).concat(t),h=this._xAxisPane.getAxisComponent(),p=l.getAxisComponent();s=d.map(function(t){var e,i,n={};if(Tt(t.x)){var r=null!==(e=null===h||void 0===h?void 0:h.convertFromPixel(t.x))&&void 0!==e?e:-1;n.dataIndex=r,n.timestamp=null!==(i=c.dataIndexToTimestamp(r))&&void 0!==i?i:void 0}if(Tt(t.y)){var a=o?t.y-u.top:t.y;n.value=p.convertFromPixel(a)}return n})}}return St(t)?s:null!==(i=s[0])&&void 0!==i?i:{}},t.prototype.executeAction=function(t,e){var i;switch(t){case Pt.OnCrosshairChange:var n=X({},e);n.paneId=null!==(i=n.paneId)&&void 0!==i?i:Vi.CANDLE,this._chartStore.getTooltipStore().setCrosshair(n,{notExecuteAction:!0});break}},t.prototype.subscribeAction=function(t,e){this._chartStore.getActionStore().subscribe(t,e)},t.prototype.unsubscribeAction=function(t,e){this._chartStore.getActionStore().unsubscribe(t,e)},t.prototype.getConvertPictureUrl=function(t,e,i){var n=this,r=this._chartContainer.clientWidth,a=this._chartContainer.clientHeight,o=he("canvas",{width:"".concat(r,"px"),height:"".concat(a,"px"),boxSizing:"border-box"}),s=o.getContext("2d"),l=Vt(o);o.width=r*l,o.height=a*l,s.scale(l,l),s.fillStyle=null!==i&&void 0!==i?i:"#FFFFFF",s.fillRect(0,0,r,a);var c=null!==t&&void 0!==t&&t;return this._drawPanes.forEach(function(t){var e=n._separatorPanes.get(t);if(Mt(e)){var i=e.getBounding();s.drawImage(e.getImage(c),i.left,i.top,i.width,i.height)}var a=t.getBounding();s.drawImage(t.getImage(c),0,a.top,r,a.height)}),o.toDataURL("image/".concat(null!==e&&void 0!==e?e:"jpeg"))},t.prototype.resize=function(){this.adjustPaneViewport(!0,!0,!0,!0,!0)},t.prototype.destroy=function(){this._chartEvent.destroy(),this._drawPanes.forEach(function(t){t.destroy()}),this._drawPanes=[],this._separatorPanes.forEach(function(t){t.destroy()}),this._separatorPanes.clear(),this._container.removeChild(this._chartContainer)},t}(),Sr=new Map,kr=1;function Ar(t,e){var i;if(_t(),i=Et(t)?document.getElementById(t):t,null===i)return xt("","","The chart cannot be initialized correctly. Please check the parameters. The chart container cannot be null and child elements need to be added!!!"),null;var n=Sr.get(i.id);if(Mt(n))return bt("","","The chart has been initialized on the dom!!!"),n;var r="k_line_chart_".concat(kr++);return n=new Cr(i,e),n.id=r,i.setAttribute("k-line-chart-id",r),Sr.set(r,n),n}var Tr=i(21396),Mr=i.n(Tr);function Ir(t,e,i,n){if(!t||!e||!i||!n)return t;try{var r=Mr().enc.Base64.parse(t),a=Mr().lib.WordArray.create(r.words.slice(0,4)),o=Mr().lib.WordArray.create(r.words.slice(4)),s=Mr().enc.Base64.parse(n),l=Mr().AES.decrypt({ciphertext:o},s,{iv:a,mode:Mr().mode.CBC,padding:Mr().pad.Pkcs7}),c=l.toString(Mr().enc.Utf8);return c||t}catch(u){return t}}function Er(t,e){return Dr.apply(this,arguments)}function Dr(){return Dr=(0,c.A)((0,l.A)().m(function t(e,i){var n,r;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e&&i){t.n=1;break}throw new Error("用户ID和指标ID不能为空");case 1:return t.p=1,t.n=2,(0,f.Ay)({url:"/api/indicator/getDecryptKey",method:"post",data:{userid:e,indicatorId:i}});case 2:if(n=t.v,1!==n.code||!n.data||!n.data.key){t.n=3;break}return t.a(2,n.data.key);case 3:throw new Error(n.msg||"获取解密密钥失败");case 4:t.n=6;break;case 5:throw t.p=5,r=t.v,new Error("无法获取解密密钥,请检查网络连接或联系管理员: "+(r.message||"未知错误"));case 6:return t.a(2)}},t,null,[[1,5]])})),Dr.apply(this,arguments)}function Pr(t,e,i){return Lr.apply(this,arguments)}function Lr(){return Lr=(0,c.A)((0,l.A)().m(function t(e,i,n){var r;return(0,l.A)().w(function(t){while(1)switch(t.n){case 0:return t.n=1,Er(i,n);case 1:return r=t.v,t.a(2,Ir(e,i,n,r))}},t)})),Lr.apply(this,arguments)}function Rr(t,e){if(1===e||!0===e)return!0;if(t&&t.length>100)try{var i=atob(t);if(i.length>50)return!0}catch(n){}return!1}var Fr={name:"KlineChart",props:{symbol:{type:String,default:""},market:{type:String,default:""},timeframe:{type:String,default:"1H"},theme:{type:String,default:"light"},activeIndicators:{type:Array,default:function(){return[]}},realtimeEnabled:{type:Boolean,default:!1},userId:{type:Number,default:null}},emits:["retry","price-change","load","indicator-toggle"],setup:function(t,e){var i=e.emit,n=(0,h.IJ)([]),r=(0,h.KR)(!1),a=(0,h.KR)(null),s=(0,h.KR)(!1),u=(0,h.KR)(!0),p=null,v=(0,h.KR)(!1),g=(0,h.IJ)(null),m=(0,h.KR)(t.theme||"light"),y=(0,h.KR)(null),x=(0,h.KR)(5e3),_=(0,h.KR)(!1),w=(0,h.KR)(1e4),C=(0,h.KR)(0),S=function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(g.value){var e=Date.now(),i=Number(w.value||1e4);(t||!C.value||e-C.value>=i)&&(C.value=e,_t())}},k=(0,h.KR)([]),A=(0,h.KR)([]),T=(0,h.KR)([]),M=(0,h.KR)(null),I=(0,h.nI)(),E=I.proxy,D=(0,h.EW)(function(){return[{name:"line",title:E.$t("dashboard.indicator.drawing.line"),icon:"line"},{name:"horizontalLine",title:E.$t("dashboard.indicator.drawing.horizontalLine"),icon:"minus"},{name:"verticalLine",title:E.$t("dashboard.indicator.drawing.verticalLine"),icon:"column-width"},{name:"ray",title:E.$t("dashboard.indicator.drawing.ray"),icon:"arrow-right"},{name:"straightLine",title:E.$t("dashboard.indicator.drawing.straightLine"),icon:"menu"},{name:"parallelStraightLine",title:E.$t("dashboard.indicator.drawing.parallelLine"),icon:"menu"},{name:"priceLine",title:E.$t("dashboard.indicator.drawing.priceLine"),icon:"dollar"},{name:"priceChannelLine",title:E.$t("dashboard.indicator.drawing.priceChannel"),icon:"border"},{name:"fibonacciLine",title:E.$t("dashboard.indicator.drawing.fibonacciLine"),icon:"rise"},{name:"measure",title:E.$t("dashboard.indicator.drawing.measure"),icon:"drag"}]}),F=(0,h.KR)([{id:"sma",name:"SMA (简单移动平均)",shortName:"SMA",type:"line",defaultParams:{length:20}},{id:"ema",name:"EMA (指数移动平均)",shortName:"EMA",type:"line",defaultParams:{length:20}},{id:"rsi",name:"RSI (相对强弱)",shortName:"RSI",type:"line",defaultParams:{length:14}},{id:"macd",name:"MACD",shortName:"MACD",type:"macd",defaultParams:{fast:12,slow:26,signal:9}},{id:"bb",name:"布林带 (Bollinger Bands)",shortName:"BB",type:"band",defaultParams:{length:20,mult:2}},{id:"atr",name:"ATR (平均真实波幅)",shortName:"ATR",type:"line",defaultParams:{period:14}},{id:"cci",name:"CCI (商品通道指数)",shortName:"CCI",type:"line",defaultParams:{length:20}},{id:"williams",name:"Williams %R (威廉指标)",shortName:"W%R",type:"line",defaultParams:{length:14}},{id:"mfi",name:"MFI (资金流量指标)",shortName:"MFI",type:"line",defaultParams:{length:14}},{id:"adx",name:"ADX (平均趋向指数)",shortName:"ADX",type:"adx",defaultParams:{length:14}},{id:"obv",name:"OBV (能量潮)",shortName:"OBV",type:"line",defaultParams:{}},{id:"adosc",name:"ADOSC (积累/派发振荡器)",shortName:"ADOSC",type:"line",defaultParams:{fast:3,slow:10}},{id:"ad",name:"AD (积累/派发线)",shortName:"AD",type:"line",defaultParams:{}},{id:"kdj",name:"KDJ (随机指标)",shortName:"KDJ",type:"line",defaultParams:{period:9,k:3,d:3}}]),B=function(e){return t.activeIndicators.some(function(t){return t.id===e})},N=function(t){if(g.value){var e={line:"segment",horizontalLine:"horizontalStraightLine",verticalLine:"verticalStraightLine",ray:"rayLine",straightLine:"straightLine",parallelStraightLine:"parallelStraightLine",priceLine:"priceLine",priceChannelLine:"priceChannelLine",fibonacciLine:"fibonacciLine",measure:"priceRangeMeasure"},i=e[t]||t;if(M.value!==t){M.value=t;try{var n=["priceRangeMeasure"];if(n.includes(i)){if("function"!==typeof g.value.overrideOverlay)return void(M.value=null);g.value.overrideOverlay({name:i,lock:!1})}else{var r={name:i,lock:!1,extendData:{isDrawing:!0}},a=g.value.createOverlay(r);a?T.value.push(a):M.value=null}}catch(o){M.value=null}}else{M.value=null;try{"function"===typeof g.value.overrideOverlay&&g.value.overrideOverlay(null)}catch(s){}}}},O=function(){if(g.value)try{T.value.forEach(function(t){try{"function"===typeof g.value.removeOverlay?g.value.removeOverlay(t):"function"===typeof g.value.removeOverlayById&&g.value.removeOverlayById(t)}catch(e){}}),T.value=[],M.value=null,"function"===typeof g.value.overrideOverlay&&g.value.overrideOverlay(null)}catch(t){}},z=function(t){var e=B(t.id);if(e)i("indicator-toggle",{action:"remove",indicator:{id:t.id}});else{var n=(0,d.A)((0,d.A)({},t),{},{params:(0,d.A)({},t.defaultParams),calculate:null});i("indicator-toggle",{action:"add",indicator:n})}},W=(0,h.KR)(null),V=(0,h.KR)(!1),$=(0,h.KR)(!1),H=(0,h.KR)(!1),K=(0,h.EW)(function(){return"dark"===m.value?{backgroundColor:"#131722",textColor:"#d1d4dc",textColorSecondary:"#787b86",borderColor:"#2a2e39",gridLineColor:"#1f2943",gridLineColorDashed:"#363c4e",tooltipBg:"rgba(25, 27, 32, 0.95)",tooltipBorder:"#333",tooltipText:"#ccc",tooltipTextSecondary:"#888",axisLabelColor:"#787b86",splitAreaColor:["rgba(250,250,250,0.05)","rgba(200,200,200,0.02)"],dataZoomBorder:"#2a2e39",dataZoomFiller:"rgba(41, 98, 255, 0.15)",dataZoomHandle:"#13c2c2",dataZoomText:"transparent",dataZoomBg:"#1f2943"}:{backgroundColor:"#fff",textColor:"#333",textColorSecondary:"#666",borderColor:"#e8e8e8",gridLineColor:"#e8e8e8",gridLineColorDashed:"#e8e8e8",tooltipBg:"rgba(255, 255, 255, 0.95)",tooltipBorder:"#e8e8e8",tooltipText:"#333",tooltipTextSecondary:"#666",axisLabelColor:"#666",splitAreaColor:["rgba(250,250,250,0.05)","rgba(200,200,200,0.02)"],dataZoomBorder:"#e8e8e8",dataZoomFiller:"rgba(24, 144, 255, 0.15)",dataZoomHandle:"#1890ff",dataZoomText:"#999",dataZoomBg:"#f0f2f5"}}),Y=function(t){return"dark"===m.value?["#13c2c2","#e040fb","#ffeb3b","#00e676","#ff6d00","#9c27b0"][t%6]:["#13c2c2","#9c27b0","#f57c00","#1976d2","#c2185b","#7b1fa2"][t%6]},X=function(){return new Promise(function(t,e){if(window.pyodide)return W.value=window.pyodide,$.value=!0,void t(window.pyodide);V.value=!0;var i="0.25.0",n=function(t){return t&&t.endsWith("/")?t:t?t+"/":t},r="/assets/pyodide/v".concat(i,"/full/"),a="https://cdn.jsdelivr.net/pyodide/v".concat(i,"/full/"),o=n({NODE_ENV:"production",VUE_APP_PREVIEW:"false",VUE_APP_API_BASE_URL:"/api",BASE_URL:"/"}.VUE_APP_PYODIDE_LOCAL_BASE||r),s=n({NODE_ENV:"production",VUE_APP_PREVIEW:"false",VUE_APP_API_BASE_URL:"/api",BASE_URL:"/"}.VUE_APP_PYODIDE_CDN_BASE||a),u=({NODE_ENV:"production",VUE_APP_PREVIEW:"false",VUE_APP_API_BASE_URL:"/api",BASE_URL:"/"}.VUE_APP_PYODIDE_PREFER_CDN||"").toString().toLowerCase(),d=!u||("true"===u||"1"===u||"yes"===u),h=function(t){return new Promise(function(e,i){var n=document.querySelector('script[data-pyodide-src="'.concat(t,'"]'));if(n)return"function"===typeof window.loadPyodide?e():(n.addEventListener("load",function(){return e()},{once:!0}),void n.addEventListener("error",function(){return i(new Error("Pyodide 脚本加载失败"))},{once:!0}));var r=document.createElement("script");r.dataset.pyodideSrc=t,r.src=t,r.onload=function(){return e()},r.onerror=function(){return i(new Error("Pyodide 脚本加载失败"))},document.head.appendChild(r)})},p=function(){var e=(0,c.A)((0,l.A)().m(function e(i){return(0,l.A)().w(function(e){while(1)switch(e.n){case 0:if("function"===typeof window.loadPyodide){e.n=1;break}throw new Error("loadPyodide 函数未找到");case 1:return e.n=2,window.loadPyodide({indexURL:i});case 2:return window.pyodide=e.v,e.n=3,window.pyodide.loadPackage(["pandas","numpy"]);case 3:W.value=window.pyodide,$.value=!0,V.value=!1,t(window.pyodide);case 4:return e.a(2)}},e)}));return function(t){return e.apply(this,arguments)}}();(0,c.A)((0,l.A)().m(function t(){var e,i,n;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e=function(){var t=(0,c.A)((0,l.A)().m(function t(e){return(0,l.A)().w(function(t){while(1)switch(t.n){case 0:return t.n=1,h(e+"pyodide.js");case 1:return t.n=2,p(e);case 2:return t.a(2)}},t)}));return function(e){return t.apply(this,arguments)}}(),t.p=1,!d){t.n=3;break}return t.n=2,e(s);case 2:t.n=4;break;case 3:return t.n=4,e(o);case 4:t.n=9;break;case 5:return t.p=5,i=t.v,t.p=6,t.n=7,e(d?o:s);case 7:t.n=9;break;case 8:throw t.p=8,n=t.v,n||i;case 9:return t.a(2)}},t,null,[[6,8],[1,5]])}))().catch(function(t){V.value=!1,H.value=!0,e(t)})})},U=function(t){if(!t||"string"!==typeof t)return null;try{var e={},i=t.match(/(\w+)\s*=\s*(\d+\.?\d*)/g);return i&&i.forEach(function(t){var i=t.split("=");if(2===i.length){var n=i[0].trim(),r=parseFloat(i[1].trim());isNaN(r)||(e[n]=r)}}),{params:e,plots:[],success:!0}}catch(n){return{params:{},plots:[],success:!1}}},G=function(){var e=(0,c.A)((0,l.A)().m(function e(i,n){var r,a,s,c,u,d,h,p,f,v,g,m,y,b,x,_,w,C,S=arguments;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(r=S.length>2&&void 0!==S[2]?S[2]:{},a=S.length>3&&void 0!==S[3]?S[3]:{},$.value&&W.value){e.n=5;break}if(!V.value){e.n=4;break}s=0;case 1:if(!(V.value&&s<30)){e.n=4;break}return e.n=2,new Promise(function(t){return setTimeout(t,500)});case 2:if(s++,!$.value||!W.value){e.n=3;break}return e.a(3,4);case 3:e.n=1;break;case 4:if($.value&&W.value){e.n=5;break}throw V.value?(V.value=!1,H.value=!0):H.value=!0,new Error("Python 引擎未就绪,请等待加载完成");case 5:if(e.p=5,c=i,u=a.is_encrypted||a.isEncrypted||0,!u&&!Rr(i,u)){e.n=11;break}if(d=a.user_id||a.userId||t.userId||r.userId,h=a.originalId||a.id||r.indicatorId,!d||!h){e.n=10;break}return e.p=6,e.n=7,Pr(c,d,h);case 7:c=e.v,e.n=9;break;case 8:throw e.p=8,_=e.v,new Error("代码解密失败,无法执行指标: "+(_.message||"未知错误"));case 9:e.n=11;break;case 10:throw new Error("缺少必要的解密参数(用户ID或指标ID),无法执行加密指标");case 11:return p=n.map(function(t){var e=t.timestamp||t.time;return e<1e10&&(e*=1e3),{time:Math.floor(e/1e3),open:parseFloat(t.open)||0,high:parseFloat(t.high)||0,low:parseFloat(t.low)||0,close:parseFloat(t.close)||0,volume:parseFloat(t.volume)||0}}),f=JSON.stringify(p),v=JSON.stringify(r||{}),g=f.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\n/g,"\\n").replace(/\r/g,"\\r"),m=v.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\n/g,"\\n").replace(/\r/g,"\\r"),y="\nimport json\nimport pandas as pd\nimport numpy as np\n\n# 递归清理 NaN 值的函数\ndef clean_nan(obj):\n if isinstance(obj, dict):\n return {k: clean_nan(v) for k, v in obj.items()}\n elif isinstance(obj, list):\n return [clean_nan(item) for item in obj]\n elif isinstance(obj, (pd.Series, np.ndarray)):\n return [None if (isinstance(x, float) and (np.isnan(x) or np.isinf(x))) else x for x in obj]\n elif isinstance(obj, (float, np.floating)):\n if np.isnan(obj) or np.isinf(obj):\n return None\n return float(obj)\n elif pd.isna(obj):\n return None\n else:\n return obj\n\n# 接收 JSON 数据\nraw_data = json.loads('".concat(g,"')\nparams = json.loads('").concat(m,"')\n\n# 将前端参数注入为指标代码可直接使用的变量(对齐回测/实盘执行环境)\n# 兼容多种命名(snake_case / camelCase)\ndef _get_param(key, default=None):\n if key in params:\n return params.get(key, default)\n # camelCase fallback\n camel = ''.join([key.split('_')[0]] + [p.capitalize() for p in key.split('_')[1:]])\n return params.get(camel, default)\n\ntry:\n leverage = float(_get_param('leverage', 1) or 1)\nexcept Exception:\n leverage = 1\n\ntrade_direction = _get_param('trade_direction', _get_param('tradeDirection', 'both')) or 'both'\n\ntry:\n initial_position = int(_get_param('initial_position', 0) or 0)\nexcept Exception:\n initial_position = 0\n\ntry:\n initial_avg_entry_price = float(_get_param('initial_avg_entry_price', 0.0) or 0.0)\nexcept Exception:\n initial_avg_entry_price = 0.0\n\ntry:\n initial_position_count = int(_get_param('initial_position_count', 0) or 0)\nexcept Exception:\n initial_position_count = 0\n\ntry:\n initial_last_add_price = float(_get_param('initial_last_add_price', 0.0) or 0.0)\nexcept Exception:\n initial_last_add_price = 0.0\n\ntry:\n initial_highest_price = float(_get_param('initial_highest_price', 0.0) or 0.0)\nexcept Exception:\n initial_highest_price = 0.0\n\n# 转换为 DataFrame\ndf = pd.DataFrame(raw_data)\n\n# 转换数据类型\ndf['open'] = df['open'].astype(float)\ndf['high'] = df['high'].astype(float)\ndf['low'] = df['low'].astype(float)\ndf['close'] = df['close'].astype(float)\ndf['volume'] = df['volume'].astype(float)\n\n# 用户代码(已解密)\n").concat(c,"\n\n# 构造输出(如果用户没有定义 output,则尝试从 result_json 获取)\nif 'output' not in locals():\n if 'result_json' in locals():\n output = json.loads(result_json)\n else:\n output = {\"plots\": []}\nelse:\n # 确保 output 是字典格式\n if isinstance(output, str):\n output = json.loads(output)\n\n# 清理 output 中的所有 NaN 值\noutput = clean_nan(output)\n\n# 返回 JSON 字符串\njson.dumps(output)\n"),e.n=12,W.value.runPythonAsync(y);case 12:if(b=e.v,b&&"string"===typeof b){e.n=13;break}throw new Error("Python 代码执行后未返回有效的 JSON 字符串,返回类型: ".concat((0,o.A)(b)));case 13:e.p=13,x=JSON.parse(b),e.n=15;break;case 14:throw e.p=14,w=e.v,new Error("JSON 解析失败: ".concat(w.message,"。可能是数据中包含 NaN 或其他无效值。"));case 15:if(x){e.n=16;break}return e.a(2,{plots:[],signals:[],calculatedVars:{}});case 16:return x.plots&&Array.isArray(x.plots)||(x.plots=[]),x.plots=x.plots.map(function(t){return t.data&&Array.isArray(t.data)&&(t.data=t.data.map(function(t){return null===t||void 0===t||"number"===typeof t&&isNaN(t)?null:t})),t}),x.signals&&Array.isArray(x.signals)&&(x.signals=x.signals.map(function(t){return t.data&&Array.isArray(t.data)&&(t.data=t.data.map(function(t){return null===t||void 0===t||"number"===typeof t&&isNaN(t)?null:t})),t})),x.calculatedVars||(x.calculatedVars={}),e.a(2,x);case 17:throw e.p=17,C=e.v,new Error("Python 执行失败: ".concat(C.message));case 18:return e.a(2)}},e,null,[[13,14],[6,8],[5,17]])}));return function(t,i){return e.apply(this,arguments)}}();function j(t,e){for(var i=[],n=0;nn-e+1){var c=(t[o-1].high+t[o-1].low+t[o-1].close)/3;s>c?r+=l:sp&&h>0?o.push(h):o.push(0),p>h&&p>0?s.push(p):s.push(0)}for(var f=[],v=[],g=[],m=0;m=e-1){var w=f[m],C=v[m],S=g[m];if(0===w?(i.push(0),n.push(0)):(i.push(C/w*100),n.push(S/w*100)),m>=e-1){var k=i[m]+n[m],A=0===k?0:Math.abs(i[m]-n[m])/k*100;if(m===e-1)r.push(A);else if(m===e){var T=Math.abs(i[m-1]-n[m-1])/(i[m-1]+n[m-1])*100;r.push((T+A)/2)}else r.push((r[m-1]*(e-1)+A)/e)}}}return{adx:r,plusDI:i,minusDI:n}}function nt(t){for(var e=[],i=0,n=0;nt[n-1].close?i+=t[n].volume:t[n].close255?12:7)},0),m=g+2*h,y=f+2*p,b=(null===(i=a.extendData)||void 0===i?void 0:i.side)||(null===(n=a.extendData)||void 0===n?void 0:n.type)||"buy",x="buy"===b,_=x?u:u-y,w=d,C=w,S=x?_:_+y;return[{type:"line",attrs:{coordinates:[{x:c,y:C},{x:c,y:S}]},styles:{style:"stroke",color:l,dashedValue:[2,2]},ignoreEvent:!0},{type:"circle",attrs:{x:c,y:w,r:4},styles:{style:"fill",color:l},ignoreEvent:!0},{type:"rect",attrs:{x:c-m/2,y:_,width:m,height:y,r:4},styles:{style:"fill",color:l,borderSize:0},ignoreEvent:!0},{type:"text",attrs:{x:c,y:_+y/2,text:v,align:"center",baseline:"middle"},styles:{color:"#ffffff",size:f,weight:"bold",backgroundColor:l,borderRadius:5},ignoreEvent:!0}]}}),Ni({name:"priceRangeMeasure",totalStep:2,lock:!1,needDefaultPointFigure:!1,needDefaultXAxisFigure:!1,needDefaultYAxisFigure:!1,createPointFigures:function(t){var e=t.coordinates,i=t.overlay,n=t.ctx;if(!e[0]||!e[1])return[];var r=i.points[0],a=i.points[1];if(!r||!a)return[];var o=r.value,s=a.value,l=s-o,c=l/o*100,u=r.timestamp,d=a.timestamp,h=Math.abs(d-u),p="",f=Math.floor(h/864e5),v=Math.floor(h%864e5/36e5),g=Math.floor(h%36e5/6e4),m=Math.floor(h%6e4/1e3);p=f>0?"".concat(f,"天").concat(v>0?v+"小时":""):v>0?"".concat(v,"小时").concat(g>0?g+"分钟":""):g>0?"".concat(g,"分钟"):"".concat(m,"秒");var y=0;try{if(n&&n.chart){var b=n.chart.getData();if(b&&Array.isArray(b)&&b.length>0){var x=b.findIndex(function(t){return Math.abs(t.timestamp-u)<1e3}),_=b.findIndex(function(t){return Math.abs(t.timestamp-d)<1e3});x>=0&&_>=0&&(y=Math.abs(_-x))}}}catch(z){}var w=c>=0?"+".concat(c.toFixed(2),"%"):"".concat(c.toFixed(2),"%"),C=l>=0?"+".concat(l.toFixed(2)):"".concat(l.toFixed(2)),S="".concat(w," ").concat(C);y>0?(S+=" (".concat(y,"根"),p&&(S+=" / ".concat(p)),S+=")"):p&&(S+=" (".concat(p,")"));var k=l>=0,A=k?"#0ecb81":"#f6465d",T=k?"#0ecb81":"#f6465d",M=k?"rgba(14, 203, 129, 0.1)":"rgba(246, 70, 93, 0.1)",I=e[0].x,E=e[0].y,D=e[1].x,P=e[1].y,L=(I+D)/2,R=(E+P)/2,F=-20,B=12,N=7*S.length+16,O=B+8;return[{type:"line",attrs:{coordinates:[{x:I,y:E},{x:D,y:P}]},styles:{style:"stroke",color:A,size:2,dashedValue:[4,4]},ignoreEvent:!1},{type:"circle",attrs:{x:I,y:E,r:4},styles:{style:"fill",color:A},ignoreEvent:!1},{type:"circle",attrs:{x:D,y:P,r:4},styles:{style:"fill",color:A},ignoreEvent:!1},{type:"rect",attrs:{x:L-N/2,y:R+F-O/2,width:N,height:O,r:4},styles:{style:"fill",color:M,borderSize:1,borderColor:A},ignoreEvent:!1},{type:"text",attrs:{x:L,y:R+F,text:S,align:"center",baseline:"middle"},styles:{color:T,size:B,weight:"bold"},ignoreEvent:!1}]}});var st=function(t){return t.map(function(t){var e=t.time||t.timestamp;return"string"===typeof e&&(e=parseInt(e)),e<1e10&&(e*=1e3),{timestamp:e,open:parseFloat(t.open),high:parseFloat(t.high),low:parseFloat(t.low),close:parseFloat(t.close),volume:parseFloat(t.volume||0)}}).filter(function(t){return t.timestamp&&!isNaN(t.open)&&!isNaN(t.high)&&!isNaN(t.low)&&!isNaN(t.close)}).sort(function(t,e){return t.timestamp-e.timestamp})},lt=function(t){if(t.length>0){var e=t[t.length-1];if(t.length>1){var n=t[t.length-2],r=e.close.toFixed(2),a=(e.close-n.close)/n.close*100;i("price-change",{price:r,change:a})}else{var o=e.close.toFixed(2);i("price-change",{price:o,change:0})}}},ct=function(t){return t.map(function(t){return{time:Math.floor(t.timestamp/1e3),open:t.open,high:t.high,low:t.low,close:t.close,volume:t.volume}})},ut=function(t,e,i){var n=new Date(1e3*t),r=new Date(1e3*e);switch(i){case"1m":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours()&&n.getMinutes()===r.getMinutes();case"5m":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours()&&Math.floor(n.getMinutes()/5)===Math.floor(r.getMinutes()/5);case"15m":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours()&&Math.floor(n.getMinutes()/15)===Math.floor(r.getMinutes()/15);case"30m":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours()&&Math.floor(n.getMinutes()/30)===Math.floor(r.getMinutes()/30);case"1H":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours();case"4H":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&Math.floor(n.getHours()/4)===Math.floor(r.getHours()/4);case"1D":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate();case"1W":var a=Math.floor((n.getTime()-new Date(n.getFullYear(),0,1).getTime())/6048e5),o=Math.floor((r.getTime()-new Date(r.getFullYear(),0,1).getTime())/6048e5);return n.getFullYear()===r.getFullYear()&&a===o;default:return t===e}},dt=function(){var e=(0,c.A)((0,l.A)().m(function e(){var i,o,s,c,d,p,v,m=arguments;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(i=m.length>0&&void 0!==m[0]&&m[0],t.symbol){e.n=1;break}return e.a(2);case 1:if(!r.value||i){e.n=2;break}return e.a(2);case 2:return r.value=!0,a.value=null,e.p=3,o=[],e.p=4,e.n=5,(0,f.Ay)({url:"/api/indicator/kline",method:"get",params:{market:t.market,symbol:t.symbol,timeframe:t.timeframe,limit:500}});case 5:if(s=e.v,1!==s.code||!s.data||!Array.isArray(s.data)){e.n=6;break}o=st(s.data),e.n=7;break;case 6:throw c=s.msg||"获取K线数据失败","tiingo_subscription"===s.hint&&(c=E.$t("dashboard.indicator.error.tiingoSubscription")||"Forex 1-minute data requires Tiingo paid subscription"),new Error(c);case 7:e.n=9;break;case 8:throw e.p=8,p=e.v,p;case 9:if(o&&0!==o.length){e.n=10;break}throw new Error("未获取到K线数据");case 10:n.value=o,u.value=!0,d=ct(o),lt(d),(0,h.dY)(function(){if(g.value){var e=n.value.filter(function(t){return t.timestamp&&!isNaN(t.open)&&!isNaN(t.high)&&!isNaN(t.low)&&!isNaN(t.close)});if(e.length>0&&g.value){try{g.value.applyNewData(e)}catch(i){g.value.applyNewData(e)}setTimeout(function(){g.value&&_t()},100)}}else mt();t.realtimeEnabled&&(gt(),vt())}),e.n=12;break;case 11:if(e.p=11,v=e.v,a.value=E.$t("dashboard.indicator.error.loadDataFailed")+": "+(v.message||E.$t("dashboard.indicator.error.loadDataFailedDesc")),n.value=[],g.value)try{g.value.applyNewData([])}catch(l){}case 12:return e.p=12,r.value=!1,e.f(12);case 13:return e.a(2)}},e,null,[[4,8],[3,11,12,13]])}));return function(){return e.apply(this,arguments)}}(),ht=function(){var e=(0,c.A)((0,l.A)().m(function e(i){return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.symbol&&n.value&&0!==n.value.length){e.n=1;break}return e.a(2);case 1:if(!s.value&&!p){e.n=6;break}if(!p){e.n=5;break}return e.p=2,e.n=3,p;case 3:e.n=5;break;case 4:e.p=4,e.v;case 5:return e.a(2);case 6:if(u.value){e.n=7;break}return g.value&&"function"===typeof g.value.noMoreData&&g.value.noMoreData(),e.a(2);case 7:return s.value=!0,p=(0,c.A)((0,l.A)().m(function e(){var r,a,o,c,d,v;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.n=1,(0,h.dY)();case 1:return e.p=1,r=Math.floor(i/1e3),e.n=2,(0,f.Ay)({url:"/api/indicator/kline",method:"get",params:{market:t.market,symbol:t.symbol,timeframe:t.timeframe,limit:500,before_time:r}});case 2:if(a=e.v,1!==a.code||!a.data||!Array.isArray(a.data)){e.n=5;break}if(o=st(a.data),0!==o.length){e.n=3;break}return u.value=!1,g.value&&"function"===typeof g.value.noMoreData&&g.value.noMoreData(),e.a(2);case 3:if(c=o.filter(function(t){return t.timestamp0&&(r=st(i.data),a=(0,R.A)(n.value),r.length>0&&(o=Math.floor(r[r.length-1].timestamp/1e3),s=Math.floor(a[a.length-1].timestamp/1e3),ut(o,s,t.timeframe)?(c=a[a.length-1],u=r[r.length-1],a[a.length-1]={timestamp:c.timestamp,open:c.open,high:Math.max(c.high,u.high),low:Math.min(c.low,u.low),close:u.close,volume:u.volume},n.value=a,d=ct(n.value),lt(d),g.value&&"function"===typeof g.value.updateData?(h=n.value.length-1,g.value.updateData(a[h]),S(!1)):g.value&&(g.value.applyNewData(n.value),S(!1))):o>s&&(p=r.filter(function(e){var i=Math.floor(e.timestamp/1e3);return!a.some(function(e){var n=Math.floor(e.timestamp/1e3);return ut(i,n,t.timeframe)})}),p.length>0&&(n.value=[].concat((0,R.A)(a),(0,R.A)(p)),n.value.length>500&&(n.value=n.value.slice(-500)),v=ct(n.value),lt(v),g.value&&"function"===typeof g.value.applyMoreData?(g.value.applyMoreData(p),S(!0)):g.value&&(g.value.applyNewData(n.value),S(!0)))))),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.a(2)}},e,null,[[1,3]])}));return function(){return e.apply(this,arguments)}}(),vt=function(){y.value&&clearInterval(y.value);var e={"1m":5e3,"5m":1e4,"15m":15e3,"30m":3e4,"1H":6e4,"4H":3e5,"1D":6e5,"1W":18e5},i=e[t.timeframe]||1e4;x.value=Math.min(i,1e3),t.realtimeEnabled&&t.symbol&&n.value.length>0&&(y.value=setInterval(function(){!r.value&&t.symbol&&n.value&&n.value.length>0&&ft()},x.value))},gt=function(){y.value&&(clearInterval(y.value),y.value=null)},mt=function(){var t=document.getElementById("kline-chart-container");if(t)if(0!==t.clientWidth&&0!==t.clientHeight){if(g.value){try{g.value.destroy()}catch(y){}g.value=null}try{var e=document.getElementById("kline-chart-container");if(!e)throw new Error("容器元素不存在");try{g.value=Ar(e,{drawingBarVisible:!0,overlay:{visible:!0}})}catch(y){g.value=Ar(e)}if(g.value&&"function"===typeof g.value.setDrawingBarVisible?g.value.setDrawingBarVisible(!0):g.value&&"function"===typeof g.value.setDrawingBar?g.value.setDrawingBar(!0):g.value&&"function"===typeof g.value.enableDrawing&&g.value.enableDrawing(!0),!g.value)throw new Error("图表初始化失败:无法创建图表实例");if(g.value&&("function"===typeof g.value.setDrawingBarVisible&&g.value.setDrawingBarVisible(!0),"function"===typeof g.value.setDrawingBar&&g.value.setDrawingBar(!0),"function"===typeof g.value.enableDrawing&&g.value.enableDrawing(!0)),bt(),g.value&&"function"===typeof g.value.subscribeAction){if(g.value.subscribeAction("onOverlayCreated",function(t){if(M.value&&t&&t.id){var e={line:"segment",horizontalLine:"horizontalStraightLine",verticalLine:"verticalStraightLine",ray:"rayLine",straightLine:"straightLine",parallelStraightLine:"parallelStraightLine",priceLine:"priceLine",priceChannelLine:"priceChannelLine",fibonacciLine:"fibonacciLine",measure:"priceRangeMeasure"},i=e[M.value];if(!t.name||t.name===i||"priceRangeMeasure"===i){T.value.push(t.id),M.value=null;try{"function"===typeof g.value.overrideOverlay&&g.value.overrideOverlay(null)}catch(y){}}}}),"function"===typeof g.value.subscribeAction)try{g.value.subscribeAction("onOverlayComplete",function(t){M.value&&t&&t.id&&(T.value.push(t.id),M.value=null)})}catch(y){}g.value.subscribeAction("onOverlayRemoved",function(t){var e=T.value.indexOf(t);e>-1&&T.value.splice(e,1)})}if(g.value&&"function"===typeof g.value.subscribeAction){var i=null,r=!1;g.value.subscribeAction("onVisibleRangeChange",function(){var t=(0,c.A)((0,l.A)().m(function t(e){var a,o,c,d,h,f;return(0,l.A)().w(function(t){while(1)switch(t.n){case 0:if(!e||"number"!==typeof e.from){t.n=5;break}if(r){t.n=1;break}return i=e.from,r=!0,setTimeout(function(){v.value=!0},1e3),t.a(2);case 1:if(v.value){t.n=2;break}return i=e.from,t.a(2);case 2:if(!(s.value&&e.from<=0)){t.n=3;break}try{g.value&&"function"===typeof g.value.setVisibleRange&&(a=n.value.length,a>0&&(o=g.value.getVisibleRange(),o&&(c=Math.ceil((o.to-o.from)*a/100),d=.1,h=Math.min(100,d+c/a*100),g.value.setVisibleRange(d,h))))}catch(y){}return t.a(2);case 3:if(!(e.from<=5&&!s.value&&!p&&u.value&&v.value)){t.n=4;break}if(!(null!==i&&i>e.from)){t.n=4;break}if(!(n.value.length>0)){t.n=4;break}return f=n.value[0].timestamp,t.n=4,ht(f);case 4:i=e.from;case 5:return t.a(2)}},t)}));return function(e){return t.apply(this,arguments)}}())}if(n.value&&n.value.length>0){var o=n.value.filter(function(t){return t.timestamp&&!isNaN(t.open)&&!isNaN(t.high)&&!isNaN(t.low)&&!isNaN(t.close)});if(o.length>0){try{g.value.applyNewData(o)}catch(y){try{g.value.applyNewData(o)}catch(b){}}try{g.value.createIndicator("VOL",!1,{height:100,dragEnabled:!0})}catch(y){}(0,h.dY)(function(){_t()})}}window.addEventListener("resize",yt)}catch(a){a.value=E.$t("dashboard.indicator.error.chartInitFailed")+": "+(a.message||"未知错误")}}else{var d=0,f=10,m=function(){var t=document.getElementById("kline-chart-container");t&&t.clientWidth>0&&t.clientHeight>0?mt():d0&&t.clientHeight>0&&mt()}},bt=function(){if(g.value){var t=K.value,e="dark"===m.value;g.value.setStyles({grid:{show:!0,horizontal:{show:!0,color:t.gridLineColor,style:"dashed",size:1},vertical:{show:!1}},candle:{priceMark:{show:!0,high:{show:!0,color:t.axisLabelColor},low:{show:!0,color:t.axisLabelColor}},tooltip:{showRule:"always",showType:"standard",labels:[E.$t("dashboard.indicator.tooltip.time"),E.$t("dashboard.indicator.tooltip.open"),E.$t("dashboard.indicator.tooltip.high"),E.$t("dashboard.indicator.tooltip.low"),E.$t("dashboard.indicator.tooltip.close"),E.$t("dashboard.indicator.tooltip.volume")],values:function(t){var e=new Date(t.timestamp);return["".concat(e.getFullYear(),"-").concat(e.getMonth()+1,"-").concat(e.getDate()," ").concat(e.getHours(),":").concat(e.getMinutes()),t.open.toFixed(2),t.high.toFixed(2),t.low.toFixed(2),t.close.toFixed(2),t.volume.toFixed(0)]}},bar:{upColor:e?"#0ecb81":"#13c2c2",downColor:e?"#f6465d":"#fa541c",noChangeColor:t.borderColor}},indicator:{tooltip:{showRule:"always",showType:"standard"}},xAxis:{show:!0,axisLine:{show:!0,color:t.borderColor}},yAxis:{show:!0,axisLine:{show:!1}},crosshair:{show:!0,horizontal:{show:!0,line:{show:!0,style:"dashed",color:t.gridLineColor,size:1}},vertical:{show:!0,line:{show:!0,style:"dashed",color:t.gridLineColor,size:1}}},watermark:{show:!1}})}},xt=function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:2,a=arguments.length>5&&void 0!==arguments[5]&&arguments[5];try{var o={name:t,shortName:t,calc:e,figures:i,calcParams:n,precision:r,series:a?"price":"normal"};return ri(o),!0}catch(s){return!(!s.message||!s.message.includes("already registered"))}},_t=function(){var e=(0,c.A)((0,l.A)().m(function e(){var i,r,a,o;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!_.value){e.n=1;break}return e.a(2);case 1:if(g.value&&0!==n.value.length){e.n=2;break}return e.a(2);case 2:_.value=!0,e.p=3;try{A.value.length>0&&g.value&&(A.value.forEach(function(t){try{"function"===typeof g.value.removeOverlay?g.value.removeOverlay(t):"function"===typeof g.value.removeOverlayById&&g.value.removeOverlayById(t)}catch(e){}}),A.value=[])}catch(s){}try{k.value.length>0&&(k.value.forEach(function(t){var e="string"===typeof t?t:t.name,i="string"===typeof t?void 0:t.paneId;i?g.value.removeIndicator(i,e):(g.value.removeIndicator("candle_pane",e),g.value.removeIndicator(e))}),k.value=[])}catch(s){}i=ct(n.value),r=(0,l.A)().m(function e(){var n,r,a,s,c,u,d,h,p,f,v,m,y,x,_,w,C,S,T,M,I,E,D,P,F,B,N,O,z,W,$,K,X,U,st,lt,ct,ut,dt,ht,pt,ft,vt,gt,mt,yt,bt,_t,wt,Ct,St,kt,At,Tt,Mt,It,Et,Dt,Pt,Lt,Rt,Ft,Bt,Nt,Ot,zt,Wt,Vt,$t,Ht,Kt,Yt,Xt,Ut,Gt,jt,qt,Zt,Jt,Qt,te,ee,ie,ne,re,ae,oe,se,le,ce,ue,de,he,pe,fe,ve,ge,me,ye,be,xe,_e,we,Ce,Se,ke,Ae,Te,Me,Ie,Ee,De,Pe,Le,Re,Fe,Be,Ne,Oe,ze,We,Ve,$e,He,Ke,Ye,Xe,Ue,Ge,je,qe,Ze,Je,Qe,ti,ei,ii,ni,ri,ai,oi,si,li,ci,ui,di,hi,pi,fi,vi,gi,mi,yi,bi;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(n=t.activeIndicators[o],e.p=1,"python"!==n.type){e.n=31;break}if(n.code){e.n=2;break}return e.a(2,0);case 2:if(e.p=2,!n.calculate||"function"!==typeof n.calculate){e.n=15;break}return e.n=3,n.calculate(i,n.params||{});case 3:if(r=e.v,a=[],r&&r.plots&&Array.isArray(r.plots)&&(a=(0,R.A)(r.plots)),!(r&&r.signals&&Array.isArray(r.signals))){e.n=14;break}s=(0,b.A)(r.signals),e.p=4,s.s();case 5:if((c=s.n()).done){e.n=11;break}if(u=c.value,!(u.data&&Array.isArray(u.data)&&u.data.length>0)){e.n=10;break}for(d=[],h=0;h0&&g.value){E=(0,b.A)(f);try{for(E.s();!(D=E.n()).done;){P=D.value;try{F=P.timestamp,F<1e10&&(F*=1e3),B=P.text,"function"===typeof g.value.createOverlay&&(N=g.value.createOverlay({name:"signalTag",points:[{timestamp:F,value:P.price},{timestamp:F,value:P.anchorPrice}],extendData:{text:B,color:P.color,side:P.side,action:P.action,price:P.price},lock:!0},"candle_pane"),N&&A.value.push(N))}catch(l){}}}catch(xi){E.e(xi)}finally{E.f()}}case 10:e.n=5;break;case 11:e.n=13;break;case 12:e.p=12,mi=e.v,s.e(mi);case 13:return e.p=13,s.f(),e.f(13);case 14:if(a.length>0&&(O=a.filter(function(t){return t.data&&Array.isArray(t.data)&&t.data.length>0}),O.length>0)){for(z=[],W={},$=0;$0)){e.n=23;break}for(_t=[],wt=0;wt0&&g.value){Bt=(0,b.A)(St);try{for(Bt.s();!(Nt=Bt.n()).done;){Ot=Nt.value;try{zt=Ot.timestamp,zt<1e10&&(zt*=1e3),Wt=Ot.text,"function"===typeof g.value.createOverlay&&(Vt=g.value.createOverlay({name:"signalTag",points:[{timestamp:zt,value:Ot.price},{timestamp:zt,value:Ot.anchorPrice}],extendData:{text:Wt,color:Ot.color,side:Ot.side,action:Ot.action,price:Ot.price},lock:!0},"candle_pane"),Vt&&A.value.push(Vt))}catch(l){}}}catch(xi){Bt.e(xi)}finally{Bt.f()}}case 23:e.n=18;break;case 24:e.n=26;break;case 25:e.p=25,yi=e.v,mt.e(yi);case 26:return e.p=26,mt.f(),e.f(26);case 27:if(gt.length>0&&($t=gt.filter(function(t){return t.data&&Array.isArray(t.data)&&t.data.length>0}),$t.length>0)){for(Ht=[],Kt={},Yt=0;Yt<$t.length;Yt++)Xt=$t[Yt],Ut=Xt.name||"PLOT_".concat(Yt),Gt=Ut.toLowerCase().replace(/\s+/g,"_").replace(/[^a-z0-9_]/g,"_"),jt=Xt.color||Y(Yt),qt=Xt.type||"line",Ht.push({key:Gt,title:Xt.name||Ut,type:qt,color:jt}),Kt[Gt]=Xt.data;Zt=$t.every(function(t){return!1!==t.overlay}),Jt="".concat(n.id,"_combined"),vt&&vt.name&&(Jt=vt.name);try{Qt=xt(Jt,function(t){for(var e=[],i=0;i0&&(0,h.dY)(function(){g.value&&_t()})},{deep:!0}),(0,h.wB)(function(){return t.realtimeEnabled},function(t){t?vt():gt()}),(0,h.sV)((0,c.A)((0,l.A)().m(function e(){return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.n=1,(0,h.dY)();case 1:return!t.theme||"dark"!==t.theme&&"light"!==t.theme||(m.value=t.theme),e.p=2,e.n=3,X();case 3:e.n=5;break;case 4:e.p=4,e.v,H.value=!0;case 5:(0,h.dY)(function(){setTimeout(function(){!g.value&&t.symbol&&mt()},300)});case 6:return e.a(2)}},e,null,[[2,4]])}))),(0,h.xo)(function(){gt(),g.value&&(g.value.destroy(),g.value=null),window.removeEventListener("resize",yt)}),{klineData:n,loading:r,error:a,loadingHistory:s,chartRef:g,chartTheme:m,themeConfig:K,getIndicatorColor:Y,handleRetry:wt,loadingPython:V,pythonReady:$,pyodideLoadFailed:H,formatKlineData:st,updatePricePanel:lt,isSameTimeframe:ut,loadKlineData:dt,loadMoreHistoryData:pt,updateKlineRealtime:ft,startRealtime:vt,stopRealtime:gt,initChart:mt,handleResize:yt,updateChartTheme:bt,updateIndicators:_t,executePythonStrategy:G,parsePythonStrategy:U,indicatorButtons:F,isIndicatorActive:B,toggleIndicator:z,drawingTools:D,activeDrawingTool:M,selectDrawingTool:N,clearAllDrawings:O}}},Br=Fr,Nr=(0,T.A)(Br,E,D,!1,null,"5f0b12e1",null),Or=Nr.exports,zr=function(){var t=this,e=t._self._c;return e("a-modal",{staticClass:"backtest-modal",attrs:{title:t.$t("dashboard.indicator.backtest.title"),visible:t.visible,width:1100,maskClosable:!1},on:{cancel:t.handleCancel}},[e("div",{staticClass:"backtest-content"},[e("a-steps",{staticStyle:{"margin-bottom":"16px"},attrs:{current:t.currentStep,size:"small"}},[e("a-step",{attrs:{title:t.$t("dashboard.indicator.backtest.steps.strategy.title"),description:t.$t("dashboard.indicator.backtest.steps.strategy.desc")}}),e("a-step",{attrs:{title:t.$t("dashboard.indicator.backtest.steps.trading.title"),description:t.$t("dashboard.indicator.backtest.steps.trading.desc")}}),e("a-step",{attrs:{title:t.$t("dashboard.indicator.backtest.steps.results.title"),description:t.$t("dashboard.indicator.backtest.steps.results.desc")}})],1),e("div",{directives:[{name:"show",rawName:"v-show",value:2!==t.currentStep,expression:"currentStep !== 2"}],staticClass:"config-section"},[e("a-form",{attrs:{form:t.form,"label-col":t.labelCol,"wrapper-col":t.wrapperCol}},[e("div",{directives:[{name:"show",rawName:"v-show",value:0===t.currentStep,expression:"currentStep === 0"}]},[e("a-collapse",{staticStyle:{background:"#fafafa"},attrs:{bordered:!1},model:{value:t.step1CollapseKeys,callback:function(e){t.step1CollapseKeys=e},expression:"step1CollapseKeys"}},[e("a-collapse-panel",{key:"risk",attrs:{header:t.$t("dashboard.indicator.backtest.panel.risk")}},[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.stopLossPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["stopLossPct",{initialValue:0}],expression:"['stopLossPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.01,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.takeProfitPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["takeProfitPct",{initialValue:0}],expression:"['takeProfitPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trailingEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailingEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['trailingEnabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:t.onTrailingToggle}})],1)],1),e("a-col",{attrs:{span:12}})],1),t.trailingEnabledUi?[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trailingStopPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailingStopPct",{initialValue:0}],expression:"['trailingStopPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.01,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trailingActivationPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailingActivationPct",{initialValue:0}],expression:"['trailingActivationPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1)]:t._e()],2),e("a-collapse-panel",{key:"scale",attrs:{header:t.$t("dashboard.indicator.backtest.panel.scale")}},[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendAddEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendAddEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['trendAddEnabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:t.onTrendAddToggle}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.dcaAddEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["dcaAddEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['dcaAddEnabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:t.onDcaAddToggle}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendAddStepPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendAddStepPct",{initialValue:0}],expression:"['trendAddStepPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4},on:{change:t.onScaleParamsChange}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.dcaAddStepPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dcaAddStepPct",{initialValue:0}],expression:"['dcaAddStepPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4},on:{change:t.onScaleParamsChange}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendAddSizePct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendAddSizePct",{initialValue:0}],expression:"['trendAddSizePct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4},on:{change:t.onScaleParamsChange}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.dcaAddSizePct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dcaAddSizePct",{initialValue:0}],expression:"['dcaAddSizePct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4},on:{change:t.onScaleParamsChange}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendAddMaxTimes")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendAddMaxTimes",{initialValue:0}],expression:"['trendAddMaxTimes', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:50,step:1,precision:0},on:{change:t.onScaleParamsChange}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.dcaAddMaxTimes")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dcaAddMaxTimes",{initialValue:0}],expression:"['dcaAddMaxTimes', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:50,step:1,precision:0},on:{change:t.onScaleParamsChange}})],1)],1)],1)],1),e("a-collapse-panel",{key:"reduce",attrs:{header:t.$t("dashboard.indicator.backtest.panel.reduce")}},[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendReduceEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendReduceEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['trendReduceEnabled', { valuePropName: 'checked', initialValue: false }]"}]})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.adverseReduceEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverseReduceEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['adverseReduceEnabled', { valuePropName: 'checked', initialValue: false }]"}]})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendReduceStepPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendReduceStepPct",{initialValue:0}],expression:"['trendReduceStepPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.adverseReduceStepPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverseReduceStepPct",{initialValue:0}],expression:"['adverseReduceStepPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendReduceSizePct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendReduceSizePct",{initialValue:0}],expression:"['trendReduceSizePct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.adverseReduceSizePct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverseReduceSizePct",{initialValue:0}],expression:"['adverseReduceSizePct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendReduceMaxTimes")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendReduceMaxTimes",{initialValue:0}],expression:"['trendReduceMaxTimes', { initialValue: 0 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:50,step:1,precision:0}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.adverseReduceMaxTimes")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverseReduceMaxTimes",{initialValue:0}],expression:"['adverseReduceMaxTimes', { initialValue: 0 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:50,step:1,precision:0}})],1)],1)],1)],1),e("a-collapse-panel",{key:"position",attrs:{header:t.$t("dashboard.indicator.backtest.panel.position")}},[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.entryPct"),help:t.$t("dashboard.indicator.backtest.hint.entryPctMax",{maxPct:Number(t.entryPctMaxUi||0).toFixed(0)})}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["entryPct",{initialValue:100}],expression:"['entryPct', { initialValue: 100 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:t.entryPctMaxUi,step:.1,precision:4},on:{change:t.onEntryPctChange}})],1)],1),e("a-col",{attrs:{span:12}})],1)],1)],1)],1),e("div",{directives:[{name:"show",rawName:"v-show",value:1===t.currentStep,expression:"currentStep === 1"}]},[e("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:t.combinedAlertType,"show-icon":""}},[e("template",{slot:"message"},[e("div",{staticStyle:{display:"flex","align-items":"center","flex-wrap":"wrap",gap:"8px"}},[e("span",[e("strong",[t._v("Symbol:")]),t._v(" "+t._s(t.symbol||"-")+" "),e("span",{staticStyle:{color:"#999",margin:"0 6px"}},[t._v("|")]),e("strong",[t._v("Market:")]),t._v(" "+t._s(t.market||"-")+" "),e("span",{staticStyle:{color:"#999",margin:"0 6px"}},[t._v("|")]),e("strong",[t._v("Timeframe:")]),t._v(" "+t._s(t.selectedTimeframe||t.timeframe||"-")+" ")]),t.precisionInfo&&t.precisionInfo.enabled?e("span",{staticStyle:{"margin-left":"12px","border-left":"1px solid #d9d9d9","padding-left":"12px"}},[e("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"high"===t.precisionInfo.precision?"thunderbolt":"clock-circle"}}),t._v(" "+t._s(t.$t("dashboard.indicator.backtest.precisionMode"))+": "),e("a-tag",{staticStyle:{"margin-left":"4px"},attrs:{color:"high"===t.precisionInfo.precision?"green":"blue",size:"small"}},[t._v(" "+t._s(t.precisionInfo.timeframe)+" ")]),e("span",{staticStyle:{color:"#666","margin-left":"6px"}},[t._v(" ("+t._s(t.$t("dashboard.indicator.backtest.estimatedCandles",{count:t.precisionInfo.estimated_candles?t.precisionInfo.estimated_candles.toLocaleString():"-"}))+") ")])],1):t.precisionInfo&&!t.precisionInfo.enabled&&t.market&&"crypto"===t.market.toLowerCase()?e("span",{staticStyle:{"margin-left":"12px","border-left":"1px solid #d9d9d9","padding-left":"12px",color:"#faad14"}},[e("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"warning"}}),t._v(" "+t._s(t.$t("dashboard.indicator.backtest.standardModeWarning"))+" ")],1):t._e()])]),e("template",{slot:"description"},[t.precisionInfo&&t.precisionInfo.enabled?e("span",{staticStyle:{"font-size":"12px",color:"#888"}},[t._v(" "+t._s("high"===t.precisionInfo.precision?t.$t("dashboard.indicator.backtest.highPrecisionDesc"):t.$t("dashboard.indicator.backtest.mediumPrecisionDesc"))+" ")]):t.precisionInfo&&!t.precisionInfo.enabled&&t.market&&"crypto"===t.market.toLowerCase()?e("span",{staticStyle:{"font-size":"12px",color:"#888"}},[t._v(" "+t._s(t.precisionInfo.message||t.$t("dashboard.indicator.backtest.standardModeDesc"))+" ")]):t._e()])],2),e("div",{staticClass:"date-quick-select",staticStyle:{"margin-bottom":"12px"}},[e("span",{staticStyle:{"margin-right":"8px",color:"#666","font-size":"13px"}},[t._v(t._s(t.$t("dashboard.indicator.backtest.quickSelect")||"快速选择")+":")]),e("a-button-group",{attrs:{size:"small"}},t._l(t.datePresets,function(i){return e("a-button",{key:i.key,attrs:{type:t.selectedDatePreset===i.key?"primary":"default"},on:{click:function(e){return t.applyDatePreset(i)}}},[t._v(t._s(i.label))])}),1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.startDate")}},[e("a-date-picker",{directives:[{name:"decorator",rawName:"v-decorator",value:["startDate",{rules:[{required:!0,message:t.$t("dashboard.indicator.backtest.startDateRequired")}],initialValue:t.defaultStartDate}],expression:"['startDate', { rules: [{ required: true, message: $t('dashboard.indicator.backtest.startDateRequired') }], initialValue: defaultStartDate }]"}],staticStyle:{width:"100%"},attrs:{"disabled-date":t.disabledStartDate,placeholder:t.$t("dashboard.indicator.backtest.selectStartDate")},on:{change:t.onDateChange}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.endDate")}},[e("a-date-picker",{directives:[{name:"decorator",rawName:"v-decorator",value:["endDate",{rules:[{required:!0,message:t.$t("dashboard.indicator.backtest.endDateRequired")}],initialValue:t.defaultEndDate}],expression:"['endDate', { rules: [{ required: true, message: $t('dashboard.indicator.backtest.endDateRequired') }], initialValue: defaultEndDate }]"}],staticStyle:{width:"100%"},attrs:{"disabled-date":t.disabledEndDate,placeholder:t.$t("dashboard.indicator.backtest.selectEndDate")},on:{change:t.onDateChange}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.initialCapital")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["initialCapital",{rules:[{required:!0,message:t.$t("dashboard.indicator.backtest.initialCapitalRequired")}],initialValue:1e4}],expression:"['initialCapital', { rules: [{ required: true, message: $t('dashboard.indicator.backtest.initialCapitalRequired') }], initialValue: 10000 }]"}],staticStyle:{width:"100%"},attrs:{min:1e3,step:1e4,precision:2,formatter:function(t){return"$ ".concat(t).replace(/\B(?=(\d{3})+(?!\d))/g,",")},parser:function(t){return t.replace(/\$\s?|(,*)/g,"")}}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.commission")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["commission",{initialValue:.02}],expression:"['commission', { initialValue: 0.02 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:10,step:.01,precision:4}}),e("div",{staticClass:"field-hint"},[t._v(t._s(t.$t("dashboard.indicator.backtest.commissionHint")))])],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.slippage")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["slippage",{initialValue:0}],expression:"['slippage', { initialValue: 0 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:10,step:.01,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.leverage")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["leverage",{initialValue:1}],expression:"['leverage', { initialValue: 1 }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:125,step:1,precision:0,formatter:function(t){return"".concat(t,"x")},parser:function(t){return t.replace("x","")}}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.tradeDirection")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["tradeDirection",{initialValue:"long"}],expression:"['tradeDirection', { initialValue: 'long' }]"}],staticStyle:{width:"100%"}},[e("a-select-option",{attrs:{value:"long"}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.longOnly"))+" ")]),e("a-select-option",{attrs:{value:"short"}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.shortOnly"))+" ")]),e("a-select-option",{attrs:{value:"both"}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.both"))+" ")])],1)],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.timeframe")}},[e("a-select",{staticStyle:{width:"100%"},on:{change:t.onTimeframeChange},model:{value:t.selectedTimeframe,callback:function(e){t.selectedTimeframe=e},expression:"selectedTimeframe"}},[e("a-select-option",{attrs:{value:"1m"}},[t._v("1m")]),e("a-select-option",{attrs:{value:"5m"}},[t._v("5m")]),e("a-select-option",{attrs:{value:"15m"}},[t._v("15m")]),e("a-select-option",{attrs:{value:"30m"}},[t._v("30m")]),e("a-select-option",{attrs:{value:"1H"}},[t._v("1H")]),e("a-select-option",{attrs:{value:"4H"}},[t._v("4H")]),e("a-select-option",{attrs:{value:"1D"}},[t._v("1D")]),e("a-select-option",{attrs:{value:"1W"}},[t._v("1W")])],1)],1)],1)],1)],1)])],1),e("div",{directives:[{name:"show",rawName:"v-show",value:2===t.currentStep&&t.hasResult,expression:"currentStep === 2 && hasResult"}],staticClass:"result-section"},[t.backtestRunId?e("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"success","show-icon":"",message:t.$t("dashboard.indicator.backtest.savedRunId",{id:t.backtestRunId})}}):t._e(),e("div",{staticClass:"metrics-cards"},[e("div",{staticClass:"metric-card",class:{positive:t.result.totalReturn>0,negative:t.result.totalReturn<0}},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.totalReturn")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.result.totalReturn)))]),e("div",{staticClass:"metric-amount"},[t._v(t._s(t.formatMoney(t.result.totalProfit)))])]),e("div",{staticClass:"metric-card",class:{positive:t.result.annualReturn>0,negative:t.result.annualReturn<0}},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.annualReturn")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.result.annualReturn)))])]),e("div",{staticClass:"metric-card negative"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.maxDrawdown")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.result.maxDrawdown)))])]),e("div",{staticClass:"metric-card"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.sharpeRatio")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.result.sharpeRatio.toFixed(2)))])]),e("div",{staticClass:"metric-card"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.winRate")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.result.winRate)))])]),e("div",{staticClass:"metric-card",class:{positive:t.result.profitFactor>=1.5,negative:t.result.profitFactor<1}},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.profitFactor")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.result.profitFactor.toFixed(2)))])]),e("div",{staticClass:"metric-card"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.totalTrades")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.result.totalTrades))])]),e("div",{staticClass:"metric-card negative"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.totalCommission")))]),e("div",{staticClass:"metric-value"},[t._v("-$"+t._s(t.result.totalCommission?t.result.totalCommission.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"))])])]),e("div",{staticClass:"chart-section"},[e("div",{staticClass:"chart-title"},[t._v(t._s(t.$t("dashboard.indicator.backtest.equityCurve")))]),e("div",{ref:"equityChartRef",staticClass:"equity-chart"})]),e("div",{staticClass:"trades-section"},[e("div",{staticClass:"chart-title"},[t._v(t._s(t.$t("dashboard.indicator.backtest.tradeHistory")))]),e("a-table",{attrs:{columns:t.tradeColumns,"data-source":t.result.trades,pagination:{pageSize:5,size:"small"},size:"small",scroll:{x:600}},scopedSlots:t._u([{key:"type",fn:function(i){return[e("a-tag",{attrs:{color:t.getTradeTypeColor(i)}},[t._v(" "+t._s(t.getTradeTypeText(i))+" ")])]}},{key:"balance",fn:function(i){return[e("span",{staticStyle:{color:"#1890ff","font-weight":"500"}},[t._v(" $"+t._s(i?i.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"--")+" ")])]}},{key:"profit",fn:function(i){return[e("span",{style:{color:i>0?"#52c41a":i<0?"#f5222d":"#666"}},[t._v(" "+t._s(t.formatMoney(i))+" ")])]}}])})],1)],1),t.loading?e("div",{staticClass:"loading-overlay"},[e("div",{staticClass:"loading-content"},[e("div",{staticClass:"loading-animation"},[e("div",{staticClass:"chart-bars"},[e("div",{staticClass:"bar bar1"}),e("div",{staticClass:"bar bar2"}),e("div",{staticClass:"bar bar3"}),e("div",{staticClass:"bar bar4"}),e("div",{staticClass:"bar bar5"})])]),e("div",{staticClass:"loading-text"},[t._v(t._s(t.$t("dashboard.indicator.backtest.running")))]),e("div",{staticClass:"loading-subtext"},[t._v(t._s(t.loadingTip))])])]):t._e()],1),e("template",{slot:"footer"},[e("div",{staticStyle:{display:"flex","justify-content":"space-between","align-items":"center",width:"100%"}},[e("div",[t.currentStep>0?e("a-button",{attrs:{disabled:t.loading},on:{click:t.handlePrev}},[t._v(t._s(t.$t("dashboard.indicator.backtest.prev")))]):t._e()],1),e("div",[e("a-button",{attrs:{disabled:t.loading},on:{click:t.handleCancel}},[t._v(t._s(t.$t("dashboard.indicator.backtest.close")))]),t.currentStep<1?e("a-button",{staticStyle:{"margin-left":"8px"},attrs:{type:"primary",disabled:t.loading},on:{click:t.handleNext}},[t._v(t._s(t.$t("dashboard.indicator.backtest.next")))]):1===t.currentStep?e("a-button",{staticStyle:{"margin-left":"8px"},attrs:{type:"primary",loading:t.loading},on:{click:t.handleRunBacktest}},[t._v(t._s(t.$t("dashboard.indicator.backtest.run")))]):e("a-button",{staticStyle:{"margin-left":"8px"},attrs:{type:"primary",disabled:t.loading},on:{click:t.handleRerun}},[t._v(t._s(t.$t("dashboard.indicator.backtest.rerun")))])],1)])])],2)},Wr=[],Vr=i(95093),$r=i.n(Vr),Hr=i(15014),Kr={name:"BacktestModal",props:{visible:{type:Boolean,default:!1},userId:{type:[Number,String],default:1},indicator:{type:Object,default:null},symbol:{type:String,default:""},market:{type:String,default:""},timeframe:{type:String,default:"1D"}},data:function(){return{form:this.$form.createForm(this),loading:!1,loadingTip:"",loadingTimer:null,currentStep:0,hasResult:!1,backtestRunId:null,step1CollapseKeys:["risk"],trailingEnabledUi:!1,entryPctMaxUi:100,precisionInfo:null,selectedDatePreset:null,selectedTimeframe:"1D",result:{totalReturn:0,annualReturn:0,maxDrawdown:0,sharpeRatio:0,winRate:0,profitFactor:0,totalTrades:0,totalProfit:0,totalCommission:0,trades:[],equityCurve:[]},equityChart:null,tradeColumns:[]}},computed:{maxBacktestRange:function(){var t=this.selectedTimeframe||this.timeframe||"1D";return"1m"===t?{days:30,label:"1个月"}:"5m"===t?{days:180,label:"6个月"}:["15m","30m"].includes(t)?{days:365,label:"1年"}:{days:1095,label:"3年"}},recommendedRange:function(){return{days:30,label:"30天",key:"30d"}},combinedAlertType:function(){return this.precisionInfo&&this.precisionInfo.enabled?"high"===this.precisionInfo.precision?"success":"info":this.precisionInfo&&!this.precisionInfo.enabled&&this.market&&"crypto"===this.market.toLowerCase()?"warning":"info"},datePresets:function(){var t=[],e=this.selectedTimeframe||this.timeframe||"1D";return"1m"===e?(t.push({key:"7d",days:7,label:"7D"}),t.push({key:"14d",days:14,label:"14D"}),t.push({key:"30d",days:30,label:"30D"})):"5m"===e?(t.push({key:"14d",days:14,label:"14D"}),t.push({key:"30d",days:30,label:"30D"}),t.push({key:"90d",days:90,label:"3M"}),t.push({key:"180d",days:180,label:"6M"})):(["15m","30m"].includes(e),t.push({key:"30d",days:30,label:"30D"}),t.push({key:"90d",days:90,label:"3M"}),t.push({key:"180d",days:180,label:"6M"}),t.push({key:"365d",days:365,label:"1Y"})),t},defaultStartDate:function(){return $r()().subtract(this.recommendedRange.days,"days")},defaultEndDate:function(){return $r()()},earliestDate:function(){return $r()().subtract(this.maxBacktestRange.days,"days")},labelCol:function(){return 0===this.currentStep?{span:9}:{span:6}},wrapperCol:function(){return 0===this.currentStep?{span:15}:{span:18}}},watch:{visible:function(t){var e=this;t?(this.currentStep=0,this.hasResult=!1,this.backtestRunId=null,this.step1CollapseKeys=["risk"],this.trailingEnabledUi=!1,this.entryPctMaxUi=100,this.precisionInfo=null,this.selectedDatePreset=null,this.selectedTimeframe=this.timeframe||"1D",this.result={totalReturn:0,annualReturn:0,maxDrawdown:0,sharpeRatio:0,winRate:0,profitFactor:0,totalTrades:0,totalProfit:0,totalCommission:0,trades:[],equityCurve:[]},this.$nextTick(function(){e.form&&(e.form.resetFields(),e.trailingEnabledUi=!!e.form.getFieldValue("trailingEnabled"),e.recalcEntryPctMaxUi(),e.selectedDatePreset="30d",e.fetchPrecisionInfo())})):this.equityChart&&(this.equityChart.dispose(),this.equityChart=null)}},created:function(){this.tradeColumns=[{title:this.$t("dashboard.indicator.backtest.tradeTime"),dataIndex:"time",key:"time",width:160},{title:this.$t("dashboard.indicator.backtest.tradeType"),dataIndex:"type",key:"type",width:120,scopedSlots:{customRender:"type"}},{title:this.$t("dashboard.indicator.backtest.price"),dataIndex:"price",key:"price",width:110},{title:this.$t("dashboard.indicator.backtest.amount"),dataIndex:"amount",key:"amount",width:100,customRender:function(t){return t?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:4}):"--"}},{title:this.$t("dashboard.indicator.backtest.profit"),dataIndex:"profit",key:"profit",width:110,scopedSlots:{customRender:"profit"}},{title:this.$t("dashboard.indicator.backtest.balance"),dataIndex:"balance",key:"balance",width:130,scopedSlots:{customRender:"balance"}}]},methods:{recalcEntryPctMaxUi:function(){if(this.form){var t=!!this.form.getFieldValue("trendAddEnabled"),e=!!this.form.getFieldValue("dcaAddEnabled"),i=Number(this.form.getFieldValue("trendAddMaxTimes")||0),n=Number(this.form.getFieldValue("dcaAddMaxTimes")||0),r=Number(this.form.getFieldValue("trendAddSizePct")||0),a=Number(this.form.getFieldValue("dcaAddSizePct")||0),o=(t?i*r:0)+(e?n*a:0),s=Math.max(0,Math.min(100,100-o));this.entryPctMaxUi=s}else this.entryPctMaxUi=100},normalizeEntryPct:function(){if(this.form){var t=Number(this.form.getFieldValue("entryPct")||0),e=Number(this.entryPctMaxUi||100);t>e&&this.form.setFieldsValue({entryPct:e})}},onTrendAddToggle:function(t){var e=this;this.form&&(t&&this.form.setFieldsValue({dcaAddEnabled:!1}),this.$nextTick(function(){e.recalcEntryPctMaxUi(),e.normalizeEntryPct()}))},onDcaAddToggle:function(t){var e=this;this.form&&(t&&this.form.setFieldsValue({trendAddEnabled:!1}),this.$nextTick(function(){e.recalcEntryPctMaxUi(),e.normalizeEntryPct()}))},onScaleParamsChange:function(){var t=this;this.$nextTick(function(){t.recalcEntryPctMaxUi(),t.normalizeEntryPct()})},onEntryPctChange:function(){var t=this;this.$nextTick(function(){return t.normalizeEntryPct()})},onTrailingToggle:function(t){this.form&&(this.trailingEnabledUi=!!t,t||this.form.setFieldsValue({trailingStopPct:0,trailingActivationPct:0}))},getTradeTypeColor:function(t){var e={buy:"green",sell:"red",liquidation:"orange",open_long:"green",add_long:"cyan",close_long:"orange",close_long_stop:"red",close_long_profit:"lime",close_long_trailing:"gold",reduce_long:"volcano",open_short:"red",add_short:"magenta",close_short:"blue",close_short_stop:"red",close_short_profit:"cyan",close_short_trailing:"gold",reduce_short:"volcano"};return e[t]||"default"},getTradeTypeText:function(t){var e={buy:this.$t("dashboard.indicator.backtest.buy"),sell:this.$t("dashboard.indicator.backtest.sell"),liquidation:this.$t("dashboard.indicator.backtest.liquidation"),open_long:this.$t("dashboard.indicator.backtest.openLong"),add_long:this.$t("dashboard.indicator.backtest.addLong"),close_long:this.$t("dashboard.indicator.backtest.closeLong"),close_long_stop:this.$t("dashboard.indicator.backtest.closeLongStop"),close_long_profit:this.$t("dashboard.indicator.backtest.closeLongProfit"),close_long_trailing:this.$t("dashboard.indicator.backtest.closeLongTrailing"),reduce_long:this.$t("dashboard.indicator.backtest.reduceLong"),open_short:this.$t("dashboard.indicator.backtest.openShort"),add_short:this.$t("dashboard.indicator.backtest.addShort"),close_short:this.$t("dashboard.indicator.backtest.closeShort"),close_short_stop:this.$t("dashboard.indicator.backtest.closeShortStop"),close_short_profit:this.$t("dashboard.indicator.backtest.closeShortProfit"),close_short_trailing:this.$t("dashboard.indicator.backtest.closeShortTrailing"),reduce_short:this.$t("dashboard.indicator.backtest.reduceShort")};return e[t]||t},disabledStartDate:function(t){return!!t&&(t>$r()().endOf("day")||t$r()().endOf("day"))return!0;if(tn.endOf("day"))return!0}return!1},applyDatePreset:function(t){this.selectedDatePreset=t.key;var e=$r()(),i=$r()().subtract(t.days,"days");this.form.setFieldsValue({startDate:i,endDate:e}),this.fetchPrecisionInfo(i,e)},fetchPrecisionInfo:function(t,e){var i=this;return(0,c.A)((0,l.A)().m(function n(){var r;return(0,l.A)().w(function(n){while(1)switch(n.p=n.n){case 0:if(t&&e||(t=i.form?i.form.getFieldValue("startDate"):null,e=i.form?i.form.getFieldValue("endDate"):null),t||(t=i.defaultStartDate),e||(e=i.defaultEndDate),i.market&&"crypto"===i.market.toLowerCase()){n.n=1;break}return i.precisionInfo={enabled:!1,reason:"only_crypto",message:i.$t("dashboard.indicator.backtest.onlyCryptoSupported")},n.a(2);case 1:return n.p=1,n.n=2,(0,f.Ay)({url:"/api/indicator/backtest/precision-info",method:"get",params:{market:i.market,startDate:t.format("YYYY-MM-DD"),endDate:e.format("YYYY-MM-DD")},timeout:3e4});case 2:r=n.v,1===r.code&&r.data&&(i.precisionInfo=r.data),n.n=4;break;case 3:n.p=3,n.v,i.precisionInfo=null;case 4:return n.a(2)}},n,null,[[1,3]])}))()},onTimeframeChange:function(){this.selectedDatePreset="30d";var t=$r()(),e=$r()().subtract(30,"days");this.form.setFieldsValue({startDate:e,endDate:t}),this.fetchPrecisionInfo(e,t)},onDateChange:function(){var t=this;this.selectedDatePreset=null,this.$nextTick(function(){t.fetchPrecisionInfo()})},validateDateRange:function(t,e){if(!t||!e)return!0;var i=e.diff(t,"days"),n=this.maxBacktestRange.days||365;return!(i>n)||(this.$message.error(this.$t("dashboard.indicator.backtest.dateRangeExceededDays",{timeframe:this.selectedTimeframe||this.timeframe,maxRange:this.maxBacktestRange.label,maxDays:n})),!1)},formatPercent:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"";return"".concat(e).concat(t.toFixed(2),"%")},formatMoney:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"-";return"".concat(e,"$").concat(Math.abs(t).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}))},handleCancel:function(){this.$emit("cancel")},handlePrev:function(){this.loading||this.currentStep>0&&(this.currentStep-=1)},handleNext:function(){this.loading||(0!==this.currentStep?1===this.currentStep&&this.handleRunBacktest():this.currentStep=1)},handleRerun:function(){this.loading||(this.currentStep=1,this.hasResult=!1,this.backtestRunId=null)},startLoadingAnimation:function(){var t=this,e=[this.$t("dashboard.indicator.backtest.loadingTip1")||"正在获取历史K线数据...",this.$t("dashboard.indicator.backtest.loadingTip2")||"正在执行策略信号计算...",this.$t("dashboard.indicator.backtest.loadingTip3")||"正在模拟交易执行...",this.$t("dashboard.indicator.backtest.loadingTip4")||"正在计算回测指标...",this.$t("dashboard.indicator.backtest.loadingTip5")||"即将完成,请稍候..."],i=0;this.loadingTip=e[0],this.loadingTimer=setInterval(function(){i=(i+1)%e.length,t.loadingTip=e[i]},2e3)},stopLoadingAnimation:function(){this.loadingTimer&&(clearInterval(this.loadingTimer),this.loadingTimer=null),this.loadingTip=""},handleRunBacktest:function(){var t=this;return(0,c.A)((0,l.A)().m(function e(){var i;return(0,l.A)().w(function(e){while(1)switch(e.n){case 0:i=["startDate","endDate","initialCapital","commission","leverage","tradeDirection","slippage"],t.form.validateFields(i,function(){var e=(0,c.A)((0,l.A)().m(function e(i,n){var r,a,o,s,c,u,h,p,v;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!i){e.n=1;break}return e.a(2);case 1:if(r=(0,d.A)((0,d.A)({},t.form.getFieldsValue()||{}),n||{}),a=Date.now(),t.indicator&&t.indicator.id){e.n=2;break}return t.$message.error(t.$t("dashboard.indicator.backtest.noIndicatorCode")),e.a(2);case 2:if(t.symbol){e.n=3;break}return t.$message.error(t.$t("dashboard.indicator.backtest.noSymbol")),e.a(2);case 3:if(t.validateDateRange(n.startDate,n.endDate)){e.n=4;break}return e.a(2);case 4:return t.loading=!0,t.hasResult=!1,t.startLoadingAnimation(),e.p=5,o=function(t){return Number(t||0)/100},s={risk:{stopLossPct:o(r.stopLossPct),takeProfitPct:o(r.takeProfitPct),trailing:{enabled:!!r.trailingEnabled,pct:o(r.trailingStopPct),activationPct:o(r.trailingActivationPct)}},position:{entryPct:o(r.entryPct||0)},scale:{trendAdd:{enabled:!!r.trendAddEnabled,stepPct:o(r.trendAddStepPct),sizePct:o(r.trendAddSizePct),maxTimes:r.trendAddMaxTimes||0},dcaAdd:{enabled:!!r.dcaAddEnabled,stepPct:o(r.dcaAddStepPct),sizePct:o(r.dcaAddSizePct),maxTimes:r.dcaAddMaxTimes||0},trendReduce:{enabled:!!r.trendReduceEnabled,stepPct:o(r.trendReduceStepPct),sizePct:o(r.trendReduceSizePct),maxTimes:r.trendReduceMaxTimes||0},adverseReduce:{enabled:!!r.adverseReduceEnabled,stepPct:o(r.adverseReduceStepPct),sizePct:o(r.adverseReduceSizePct),maxTimes:r.adverseReduceMaxTimes||0}}},c={userid:t.userId||1,indicatorId:t.indicator.id,symbol:t.symbol,market:t.market,timeframe:t.selectedTimeframe||t.timeframe,startDate:n.startDate.format("YYYY-MM-DD"),endDate:n.endDate.format("YYYY-MM-DD"),initialCapital:n.initialCapital,commission:o(n.commission||0),slippage:o(n.slippage||0),leverage:n.leverage||1,tradeDirection:n.tradeDirection||"long",strategyConfig:s,enableMtf:t.market&&"crypto"===t.market.toLowerCase()},e.n=6,(0,f.Ay)({url:"/api/indicator/backtest",method:"post",data:c,timeout:6e5});case 6:u=e.v,((Date.now()-a)/1e3).toFixed(1),1===u.code&&u.data?(u.data.runId&&(t.backtestRunId=u.data.runId),t.result=u.data.result||u.data,t.hasResult=!0,t.currentStep=2,t.$nextTick(function(){t.renderEquityChart()}),t.$message.success(t.$t("dashboard.indicator.backtest.success"))):t.$message.error(u.msg||t.$t("dashboard.indicator.backtest.failed")),e.n=8;break;case 7:e.p=7,v=e.v,h=t.$t("dashboard.indicator.backtest.failed"),"ECONNABORTED"===v.code||v.message&&v.message.includes("timeout")?h="回测超时,请减少回测时间范围或使用更大的时间周期":v.response?h=(null===(p=v.response.data)||void 0===p?void 0:p.msg)||v.response.statusText||h:v.message&&(h=v.message),t.$message.error(h);case 8:return e.p=8,t.stopLoadingAnimation(),t.loading=!1,e.f(8);case 9:return e.a(2)}},e,null,[[5,7,8,9]])}));return function(t,i){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},renderEquityChart:function(){var t=this;if(this.$refs.equityChartRef){this.equityChart&&this.equityChart.dispose(),this.equityChart=Hr.Ts(this.$refs.equityChartRef);var e=this.result.equityCurve||[],i=e.map(function(t){return t.time||t.date}),n=e.map(function(t){return void 0!==t.value?t.value:t.equity}),r=n[0]||1e5,a=n[n.length-1]||r,o=a>=r,s=o?"#52c41a":"#f5222d",l=o?[{offset:0,color:"rgba(82, 196, 26, 0.35)"},{offset:1,color:"rgba(82, 196, 26, 0.02)"}]:[{offset:0,color:"rgba(245, 34, 45, 0.35)"},{offset:1,color:"rgba(245, 34, 45, 0.02)"}],c={tooltip:{trigger:"axis",backgroundColor:"rgba(255, 255, 255, 0.96)",borderColor:"#e8e8e8",borderWidth:1,textStyle:{color:"#333"},formatter:function(t){var e='
'.concat(t[0].axisValue,"
");return t.forEach(function(t){if(void 0!==t.value&&null!==t.value){var i=t.value.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2});e+='
\n '.concat(t.marker," ").concat(t.seriesName,'\n $').concat(i,"\n
")}}),e}},legend:{show:!1},grid:{left:"3%",right:"4%",bottom:"12%",top:"8%",containLabel:!0},xAxis:{type:"category",data:i,boundaryGap:!1,axisLine:{lineStyle:{color:"#e8e8e8"}},axisTick:{show:!1},axisLabel:{color:"#8c8c8c",fontSize:11,rotate:0,interval:Math.floor(i.length/6)}},yAxis:{type:"value",splitLine:{lineStyle:{color:"#f5f5f5",type:"dashed"}},axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:"#8c8c8c",fontSize:11,formatter:function(t){return t>=1e6?(t/1e6).toFixed(1)+"M":t>=1e3?(t/1e3).toFixed(0)+"K":t}}},series:[{name:this.$t("dashboard.indicator.backtest.strategy"),type:"line",data:n,smooth:.4,symbol:"none",sampling:"lttb",lineStyle:{width:2.5,color:s,cap:"round",join:"round"},areaStyle:{color:new Hr.fA.W4(0,0,0,1,l)},emphasis:{lineStyle:{width:3}}}],animation:!0,animationDuration:800,animationEasing:"cubicOut"};this.equityChart.setOption(c),window.addEventListener("resize",function(){t.equityChart&&t.equityChart.resize()})}}},beforeDestroy:function(){this.equityChart&&(this.equityChart.dispose(),this.equityChart=null)}},Yr=Kr,Xr=(0,T.A)(Yr,zr,Wr,!1,null,"473e449c",null),Ur=Xr.exports,Gr=function(){var t=this,e=t._self._c;return e("a-drawer",{attrs:{title:t.$t("dashboard.indicator.backtest.historyTitle"),visible:t.visible,width:t.isMobile?"100%":980,maskClosable:!0},on:{close:function(e){return t.$emit("cancel")}}},[e("div",{staticStyle:{display:"flex",gap:"12px","margin-bottom":"12px","align-items":"center","flex-wrap":"wrap"}},[e("a-switch",{model:{value:t.useCurrentFilters,callback:function(e){t.useCurrentFilters=e},expression:"useCurrentFilters"}}),e("span",{staticStyle:{color:"#8c8c8c"}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.historyUseCurrent"))+" ")]),e("a-button",{attrs:{type:"primary",loading:t.loading},on:{click:t.loadRuns}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.historyRefresh"))+" ")]),e("a-button",{attrs:{type:"primary",disabled:0===t.selectedRowKeys.length,loading:t.analyzing},on:{click:t.handleAIAnalyze}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.historyAIAnalyze"))+" ")])],1),t.useCurrentFilters?t._e():e("div",{staticStyle:{display:"flex",gap:"12px","margin-bottom":"12px","align-items":"center","flex-wrap":"wrap"}},[e("a-input",{staticStyle:{width:"220px"},attrs:{placeholder:t.$t("dashboard.indicator.backtest.historyFilterSymbol")},model:{value:t.filterSymbol,callback:function(e){t.filterSymbol=e},expression:"filterSymbol"}}),e("a-select",{staticStyle:{width:"140px"},attrs:{placeholder:t.$t("dashboard.indicator.backtest.historyFilterTimeframe"),allowClear:""},model:{value:t.filterTimeframe,callback:function(e){t.filterTimeframe=e},expression:"filterTimeframe"}},t._l(t.timeframes,function(i){return e("a-select-option",{key:i,attrs:{value:i}},[t._v(t._s(i))])}),1),e("a-button",{attrs:{loading:t.loading},on:{click:t.loadRuns}},[t._v(t._s(t.$t("dashboard.indicator.backtest.historyApply")))]),e("span",{staticStyle:{color:"#8c8c8c"}},[t._v(t._s(t.filterLabel))])],1),e("a-table",{attrs:{columns:t.columns,"data-source":t.runs,loading:t.loading,size:"small",pagination:{pageSize:10,size:"small"},rowKey:"id",scroll:{x:900},rowSelection:{selectedRowKeys:t.selectedRowKeys,onChange:t.onRowSelectionChange}},scopedSlots:t._u([{key:"range",fn:function(i,n){return[e("span",[t._v(t._s(n.start_date||"")+" ~ "+t._s(n.end_date||""))])]}},{key:"status",fn:function(i){return[e("a-tag",{attrs:{color:"success"===i?"green":"failed"===i?"red":"blue"}},[t._v(" "+t._s("success"===i?t.$t("dashboard.indicator.backtest.historyStatusSuccess"):"failed"===i?t.$t("dashboard.indicator.backtest.historyStatusFailed"):i)+" ")])]}},{key:"actions",fn:function(i,n){return[e("a-button",{attrs:{type:"link",size:"small",loading:t.detailLoadingId===n.id},on:{click:function(e){return t.viewRun(n)}}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.historyView"))+" ")])]}}])}),t.loading||0!==t.runs.length?t._e():e("a-empty",{attrs:{description:t.$t("dashboard.indicator.backtest.historyNoData")}}),e("a-modal",{attrs:{title:t.$t("dashboard.indicator.backtest.historyAIAnalyzeTitle"),visible:t.showAIResult,footer:null,width:t.isMobile?"100%":900},on:{cancel:function(e){t.showAIResult=!1}}},[t.analyzing?e("div",{staticStyle:{padding:"12px 0"}},[e("a-spin")],1):e("div",{staticStyle:{"white-space":"pre-wrap","font-family":"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace"}},[t._v(" "+t._s(t.aiResult||t.$t("dashboard.indicator.backtest.historyNoAIResult"))+" ")])])],1)},jr=[],qr={name:"BacktestHistoryDrawer",props:{visible:{type:Boolean,default:!1},userId:{type:[Number,String],default:1},indicatorId:{type:[Number,String],default:null},symbol:{type:String,default:""},market:{type:String,default:""},timeframe:{type:String,default:""},isMobile:{type:Boolean,default:!1}},data:function(){return{loading:!1,detailLoadingId:null,analyzing:!1,showAIResult:!1,aiResult:"",useCurrentFilters:!0,filterSymbol:"",filterTimeframe:"",timeframes:["1m","5m","15m","30m","1H","4H","1D","1W"],runs:[],columns:[],selectedRowKeys:[]}},computed:{filterLabel:function(){var t=[];this.indicatorId&&t.push("indicatorId=".concat(this.indicatorId));var e=this.useCurrentFilters?this.market:this.market||"",i=this.useCurrentFilters?this.symbol:this.filterSymbol||"",n=this.useCurrentFilters?this.timeframe:this.filterTimeframe||"";return e&&t.push("market=".concat(e)),i&&t.push("symbol=".concat(i)),n&&t.push("timeframe=".concat(n)),t.length?t.join(" | "):""}},watch:{visible:function(t){t&&(this.initColumns(),this.useCurrentFilters=!0,this.filterSymbol=this.symbol||"",this.filterTimeframe=this.timeframe||"",this.selectedRowKeys=[],this.aiResult="",this.showAIResult=!1,this.loadRuns())}},methods:{onRowSelectionChange:function(t){this.selectedRowKeys=t||[]},initColumns:function(){this.columns.length||(this.columns=[{title:this.$t("dashboard.indicator.backtest.historyRunId"),dataIndex:"id",key:"id",width:90},{title:this.$t("dashboard.indicator.backtest.historyCreatedAt"),dataIndex:"created_at",key:"created_at",width:140},{title:this.$t("dashboard.indicator.backtest.tradeDirection"),dataIndex:"trade_direction",key:"trade_direction",width:90},{title:this.$t("dashboard.indicator.backtest.leverage"),dataIndex:"leverage",key:"leverage",width:90},{title:this.$t("dashboard.indicator.backtest.historyRange"),key:"range",width:220,scopedSlots:{customRender:"range"}},{title:this.$t("dashboard.indicator.backtest.historyStatus"),dataIndex:"status",key:"status",width:90,scopedSlots:{customRender:"status"}},{title:this.$t("dashboard.indicator.backtest.historyActions"),key:"actions",width:90,scopedSlots:{customRender:"actions"}}])},loadRuns:function(){var t=this;return(0,c.A)((0,l.A)().m(function e(){var i,n,r,a;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.userId){e.n=1;break}return e.a(2);case 1:return t.loading=!0,e.p=2,i=t.useCurrentFilters?t.symbol:t.filterSymbol||"",n=t.useCurrentFilters?t.timeframe:t.filterTimeframe||"",r=t.market||"",e.n=3,(0,f.Ay)({url:"/api/indicator/backtest/history",method:"get",params:{userid:t.userId,limit:100,offset:0,indicatorId:t.indicatorId,symbol:i,market:r,timeframe:n}});case 3:a=e.v,a&&1===a.code&&Array.isArray(a.data)?t.runs=a.data:t.runs=[];case 4:return e.p=4,t.loading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[2,,4,5]])}))()},viewRun:function(t){var e=this;return(0,c.A)((0,l.A)().m(function i(){var n;return(0,l.A)().w(function(i){while(1)switch(i.p=i.n){case 0:if(t&&t.id){i.n=1;break}return i.a(2);case 1:return e.detailLoadingId=t.id,i.p=2,i.n=3,(0,f.Ay)({url:"/api/indicator/backtest/get",method:"get",params:{userid:e.userId,runId:t.id}});case 3:n=i.v,n&&1===n.code&&n.data&&e.$emit("view",n.data);case 4:return i.p=4,e.detailLoadingId=null,i.f(4);case 5:return i.a(2)}},i,null,[[2,,4,5]])}))()},handleAIAnalyze:function(){var t=this;return(0,c.A)((0,l.A)().m(function e(){var i,n;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.userId&&t.selectedRowKeys.length){e.n=1;break}return e.a(2);case 1:return t.analyzing=!0,t.showAIResult=!0,t.aiResult="",e.p=2,i=t.$i18n&&t.$i18n.locale?t.$i18n.locale:"zh-CN",e.n=3,(0,f.Ay)({url:"/api/indicator/backtest/aiAnalyze",method:"post",data:{userid:t.userId,runIds:t.selectedRowKeys,lang:i}});case 3:n=e.v,n&&1===n.code&&n.data&&n.data.analysis?t.aiResult=n.data.analysis:t.aiResult=n.msg||t.$t("dashboard.indicator.backtest.historyNoAIResult");case 4:return e.p=4,t.analyzing=!1,e.f(4);case 5:return e.a(2)}},e,null,[[2,,4,5]])}))()}}},Zr=qr,Jr=(0,T.A)(Zr,Gr,jr,!1,null,null,null),Qr=Jr.exports,ta=function(){var t,e,i,n=this,r=n._self._c;return r("a-modal",{staticClass:"backtest-run-viewer",attrs:{title:n.modalTitle,visible:n.visible,width:1100,maskClosable:!1},on:{cancel:function(t){return n.$emit("cancel")}}},[n.run&&n.run.result?r("div",[n.run.id?r("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"info","show-icon":"",message:n.$t("dashboard.indicator.backtest.savedRunId",{id:n.run.id})}}):n._e(),r("div",{staticClass:"metrics-cards"},[r("div",{staticClass:"metric-card",class:{positive:n.result.totalReturn>0,negative:n.result.totalReturn<0}},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.totalReturn")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(n.formatPercent(n.result.totalReturn)))]),r("div",{staticClass:"metric-amount"},[n._v(n._s(n.formatMoney(n.result.totalProfit)))])]),r("div",{staticClass:"metric-card",class:{positive:n.result.annualReturn>0,negative:n.result.annualReturn<0}},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.annualReturn")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(n.formatPercent(n.result.annualReturn)))])]),r("div",{staticClass:"metric-card negative"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.maxDrawdown")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(n.formatPercent(n.result.maxDrawdown)))])]),r("div",{staticClass:"metric-card"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.sharpeRatio")))]),r("div",{staticClass:"metric-value"},[n._v(n._s((null!==(t=n.result.sharpeRatio)&&void 0!==t?t:0).toFixed(2)))])]),r("div",{staticClass:"metric-card"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.winRate")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(n.formatPercent(n.result.winRate)))])]),r("div",{staticClass:"metric-card",class:{positive:n.result.profitFactor>=1.5,negative:n.result.profitFactor<1}},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.profitFactor")))]),r("div",{staticClass:"metric-value"},[n._v(n._s((null!==(e=n.result.profitFactor)&&void 0!==e?e:0).toFixed(2)))])]),r("div",{staticClass:"metric-card"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.totalTrades")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(null!==(i=n.result.totalTrades)&&void 0!==i?i:0))])]),r("div",{staticClass:"metric-card negative"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.totalCommission")))]),r("div",{staticClass:"metric-value"},[n._v("-$"+n._s(n.result.totalCommission?n.result.totalCommission.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"))])])]),r("div",{staticClass:"chart-section"},[r("div",{staticClass:"chart-title"},[n._v(n._s(n.$t("dashboard.indicator.backtest.equityCurve")))]),r("div",{ref:"equityChartRef",staticClass:"equity-chart"})]),r("div",{staticClass:"trades-section"},[r("div",{staticClass:"chart-title"},[n._v(n._s(n.$t("dashboard.indicator.backtest.tradeHistory")))]),r("a-table",{attrs:{columns:n.tradeColumns,"data-source":n.result.trades||[],pagination:{pageSize:10,size:"small"},size:"small",scroll:{x:800},rowKey:n.rowKey},scopedSlots:n._u([{key:"type",fn:function(t){return[r("a-tag",{attrs:{color:n.getTradeTypeColor(t)}},[n._v(" "+n._s(n.getTradeTypeText(t))+" ")])]}},{key:"balance",fn:function(t){return[r("span",{staticStyle:{color:"#1890ff","font-weight":"500"}},[n._v(" $"+n._s(t?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"--")+" ")])]}},{key:"profit",fn:function(t){return[r("span",{style:{color:t>0?"#52c41a":t<0?"#f5222d":"#666"}},[n._v(" "+n._s(n.formatMoney(t))+" ")])]}}])})],1)],1):r("div",{staticStyle:{padding:"12px 0"}},[r("a-empty",{attrs:{description:n.$t("dashboard.indicator.backtest.historyNoData")}})],1),r("template",{slot:"footer"},[r("a-button",{on:{click:function(t){return n.$emit("cancel")}}},[n._v(n._s(n.$t("dashboard.indicator.backtest.close")))])],1)],2)},ea=[],ia={name:"BacktestRunViewer",props:{visible:{type:Boolean,default:!1},run:{type:Object,default:null}},data:function(){return{equityChart:null,tradeColumns:[]}},computed:{result:function(){return this.run&&this.run.result?this.run.result:{}},modalTitle:function(){var t=this.run&&this.run.id?"#".concat(this.run.id):"";return"".concat(this.$t("dashboard.indicator.backtest.historyTitle")," ").concat(t).trim()}},watch:{visible:function(t){var e=this;t?this.$nextTick(function(){e.initColumns(),e.renderEquityChart()}):this.equityChart&&(this.equityChart.dispose(),this.equityChart=null)}},methods:{rowKey:function(t,e){return e},initColumns:function(){this.tradeColumns.length||(this.tradeColumns=[{title:this.$t("dashboard.indicator.backtest.tradeTime"),dataIndex:"time",key:"time",width:160},{title:this.$t("dashboard.indicator.backtest.tradeType"),dataIndex:"type",key:"type",width:150,scopedSlots:{customRender:"type"}},{title:this.$t("dashboard.indicator.backtest.price"),dataIndex:"price",key:"price",width:110},{title:this.$t("dashboard.indicator.backtest.amount"),dataIndex:"amount",key:"amount",width:100},{title:this.$t("dashboard.indicator.backtest.profit"),dataIndex:"profit",key:"profit",width:110,scopedSlots:{customRender:"profit"}},{title:this.$t("dashboard.indicator.backtest.balance"),dataIndex:"balance",key:"balance",width:120,scopedSlots:{customRender:"balance"}}])},getTradeTypeColor:function(t){var e={buy:"green",sell:"red",liquidation:"orange",open_long:"green",add_long:"cyan",close_long:"orange",close_long_stop:"red",close_long_profit:"lime",close_long_trailing:"gold",reduce_long:"volcano",open_short:"red",add_short:"magenta",close_short:"blue",close_short_stop:"red",close_short_profit:"cyan",close_short_trailing:"gold",reduce_short:"volcano"};return e[t]||"default"},getTradeTypeText:function(t){var e={open_long:this.$t("dashboard.indicator.backtest.openLong"),add_long:this.$t("dashboard.indicator.backtest.addLong"),close_long:this.$t("dashboard.indicator.backtest.closeLong"),close_long_stop:this.$t("dashboard.indicator.backtest.closeLongStop"),close_long_profit:this.$t("dashboard.indicator.backtest.closeLongProfit"),close_long_trailing:this.$t("dashboard.indicator.backtest.closeLongTrailing"),reduce_long:this.$t("dashboard.indicator.backtest.reduceLong"),open_short:this.$t("dashboard.indicator.backtest.openShort"),add_short:this.$t("dashboard.indicator.backtest.addShort"),close_short:this.$t("dashboard.indicator.backtest.closeShort"),close_short_stop:this.$t("dashboard.indicator.backtest.closeShortStop"),close_short_profit:this.$t("dashboard.indicator.backtest.closeShortProfit"),close_short_trailing:this.$t("dashboard.indicator.backtest.closeShortTrailing"),reduce_short:this.$t("dashboard.indicator.backtest.reduceShort"),liquidation:this.$t("dashboard.indicator.backtest.liquidation")};return e[t]||t},formatPercent:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"";return"".concat(e).concat(Number(t).toFixed(2),"%")},formatMoney:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"-";return"".concat(e,"$").concat(Math.abs(t).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}))},renderEquityChart:function(){var t=this;if(this.$refs.equityChartRef){this.equityChart&&this.equityChart.dispose(),this.equityChart=Hr.Ts(this.$refs.equityChartRef);var e=this.result.equityCurve||[],i=e.map(function(t){return t.time||t.date}),n=e.map(function(t){return void 0!==t.value?t.value:t.equity}),r=n[0]||1e5,a=n[n.length-1]||r,o=a>=r,s=o?"#52c41a":"#f5222d",l=o?[{offset:0,color:"rgba(82, 196, 26, 0.35)"},{offset:1,color:"rgba(82, 196, 26, 0.02)"}]:[{offset:0,color:"rgba(245, 34, 45, 0.35)"},{offset:1,color:"rgba(245, 34, 45, 0.02)"}],c={tooltip:{trigger:"axis"},grid:{left:"3%",right:"4%",bottom:"12%",top:"8%",containLabel:!0},xAxis:{type:"category",data:i,boundaryGap:!1},yAxis:{type:"value"},series:[{name:this.$t("dashboard.indicator.backtest.strategy"),type:"line",data:n,smooth:.4,symbol:"none",sampling:"lttb",lineStyle:{width:2.5,color:s},areaStyle:{color:new Hr.fA.W4(0,0,0,1,l)}}]};this.equityChart.setOption(c),window.addEventListener("resize",function(){return t.equityChart&&t.equityChart.resize()})}}}},na=ia,ra=(0,T.A)(na,ta,ea,!1,null,"a484239a",null),aa=ra.exports,oa=i(38250),sa={name:"DashboardIndicator",components:{IndicatorEditor:I,KlineChart:Or,BacktestModal:Ur,BacktestHistoryDrawer:Qr,BacktestRunViewer:aa,QuickTradePanel:oa.A},computed:(0,d.A)((0,d.A)({},(0,p.aH)({navTheme:function(t){return t.app.theme}})),{},{chartTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme?"dark":"light"},isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme}}),setup:function(){var t=(0,h.nI)(),e=t||{},i=e.proxy,n=(0,h.KR)(1),r=(0,h.KR)(!1),p=(0,h.KR)(void 0),m=(0,h.KR)([]),y=(0,h.KR)([]),b=(0,h.KR)(!1),x=(0,h.KR)(""),_=(0,h.KR)(!1),w=(0,h.KR)(!1),C=(0,h.KR)(!1),S=(0,h.KR)(""),k=(0,h.KR)(""),A=(0,h.KR)([]),T=(0,h.KR)(!1),M=(0,h.KR)([]),I=(0,h.KR)(!1),E=(0,h.KR)(null),D=(0,h.KR)(null),P=(0,h.KR)([]),L=(0,h.KR)(!1),R=(0,h.KR)(!1),F=(0,h.KR)(""),B=(0,h.KR)(""),N=(0,h.KR)(0),O=(0,h.EW)(function(){return"crypto"===(K.value||"").toLowerCase()}),z=function(){O.value?(F.value=H.value||"",N.value=parseFloat(Y.value)||0,B.value="",R.value=!0):u.A.warning(i.$t("quickTrade.cryptoOnly"))},W=function(){u.A.success(i.$t("quickTrade.orderSuccess"))},V=function(t){t&&O.value&&(F.value=t)},$=function(){i&&i.$router&&i.$router.push("/indicator-community")},H=(0,h.KR)(""),K=(0,h.KR)(""),Y=(0,h.KR)("--"),X=(0,h.KR)(0),U=(0,h.EW)(function(){return X.value>0?"color-up":X.value<0?"color-down":""}),G=(0,h.KR)("1D"),j=(0,h.KR)([]),q=(0,h.KR)(!1),Z=[{id:"sma5",name:"SMA5 (5日均线)",shortName:"SMA5",type:"line",defaultParams:{length:5}},{id:"sma10",name:"SMA10 (10日均线)",shortName:"SMA10",type:"line",defaultParams:{length:10}},{id:"sma20",name:"SMA20 (20日均线)",shortName:"SMA20",type:"line",defaultParams:{length:20}},{id:"sma30",name:"SMA30 (30日均线)",shortName:"SMA30",type:"line",defaultParams:{length:30}}],J=[{id:"ema5",name:"EMA5 (5日指数均线)",shortName:"EMA5",type:"line",defaultParams:{length:5}},{id:"ema10",name:"EMA10 (10日指数均线)",shortName:"EMA10",type:"line",defaultParams:{length:10}},{id:"ema20",name:"EMA20 (20日指数均线)",shortName:"EMA20",type:"line",defaultParams:{length:20}},{id:"ema30",name:"EMA30 (30日指数均线)",shortName:"EMA30",type:"line",defaultParams:{length:30}}],Q=(0,h.KR)([]),tt=(0,h.KR)([]),et=(0,h.KR)(!1),it=(0,h.KR)(!1),nt=(0,h.KR)(null),rt=(0,h.KR)(""),at=(0,h.KR)([]),ot=(0,h.KR)({}),st=(0,h.KR)(!1),lt=(0,h.KR)({}),ct=(0,h.KR)(!1),ut=(0,h.KR)(!1),dt=(0,h.KR)(!1),ht=(0,h.KR)(null),pt=(0,h.KR)(!1),ft=(0,h.KR)(null),vt=(0,h.KR)(!1),gt=(0,h.KR)(null),mt=(0,h.KR)(!1),yt=(0,h.KR)(null),bt=(0,h.KR)(!1),xt=(0,h.KR)(null),_t=(0,h.KR)(!1),wt=(0,h.KR)(!1),Ct=(0,h.KR)("free"),St=(0,h.KR)(10),kt=(0,h.KR)(""),At=(0,h.KR)(!1),Tt={price:[{required:!0,message:"请输入价格",trigger:"blur",type:"number"}]},Mt=(0,h.KR)(!1),It=function(t){var e=t.price,i=t.change;Y.value=e,X.value=i},Et=function(){},Dt=(0,h.KR)([]),Pt=(0,h.KR)([]),Lt=function(t){G.value=t},Rt=function(t){return t?Object.values(t).join(", "):""},Ft=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,i,a,o,s,c;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(r.value=!0,t.p=1,a=(0,h.nI)(),o=null===a||void 0===a||null===(e=a.proxy)||void 0===e?void 0:e.$store,s=(null===o||void 0===o||null===(i=o.getters)||void 0===i?void 0:i.userInfo)||{},!s||!s.email){t.n=2;break}return n.value=s.id,r.value=!1,Bt(),re(),t.a(2);case 2:return t.n=3,(0,g.ug)();case 3:c=t.v,c&&1===c.code&&c.data&&(n.value=c.data.id,o&&o.commit("SET_INFO",c.data),Bt(),re()),t.n=5;break;case 4:t.p=4,t.v;case 5:return t.p=5,r.value=!1,t.f(5);case 6:return t.a(2)}},t,null,[[1,4,5,6]])}));return function(){return t.apply(this,arguments)}}(),Bt=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,r;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value){t.n=1;break}return t.a(2);case 1:return b.value=!0,t.p=2,t.n=3,(0,v.Qo)({userid:n.value});case 3:e=t.v,e&&1===e.code&&e.data&&(y.value=e.data.map(function(t){return(0,d.A)((0,d.A)({},t),{},{label:t.symbol+(t.name?" (".concat(t.name,")"):""),value:"".concat(t.market,":").concat(t.symbol)})}),Nt(),y.value.length>0&&!H.value&&(r=y.value[0],K.value=r.market,H.value=r.symbol,p.value=r.value)),t.n=5;break;case 4:t.p=4,t.v,u.A.error(i.$t("dashboard.indicator.error.loadWatchlistFailed"));case 5:return t.p=5,b.value=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(){return t.apply(this,arguments)}}(),Nt=function(){x.value?m.value=y.value.filter(function(t){return t.symbol.toLowerCase().includes(x.value.toLowerCase())||t.name&&t.name.toLowerCase().includes(x.value.toLowerCase())}):m.value=y.value},Ot=function(t){x.value=t,0===y.value.length&&t&&(_.value=!0),Nt()},zt=function(t){_.value=t,t||(x.value="")},Wt=function(t){if("__empty_watchlist_hint__"!==t){if("__add_stock_option__"===t)return w.value=!0,void setTimeout(function(){p.value=void 0},0);var e=y.value.find(function(e){return e.value===t});if(e||(e=m.value.find(function(e){return e.value===t})),!e&&t.includes(":")){var i=t.split(":"),n=(0,s.A)(i,2),r=n[0],a=n[1];e={market:r,symbol:a,value:t}}e&&(K.value=e.market,H.value=e.symbol,p.value=e.value)}},Vt=function(t,e){var i,n=(null===(i=e.componentOptions)||void 0===i||null===(i=i.propsData)||void 0===i?void 0:i.value)||"";return"__empty_watchlist_hint__"===n||"__add_stock_option__"===n||n.toLowerCase().includes(t.toLowerCase())},$t=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return t.p=0,t.n=1,(0,v.iO)();case 1:e=t.v,e&&1===e.code&&e.data&&Array.isArray(e.data)?P.value=e.data.map(function(t){return{value:t.value,i18nKey:t.i18nKey||"dashboard.analysis.market.".concat(t.value)}}):e&&1===e.code&&e.data&&"object"===(0,o.A)(e.data)?P.value=Object.keys(e.data).map(function(t){return{value:t,i18nKey:"dashboard.analysis.market.".concat(t)}}):P.value=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}],P.value.length>0&&!S.value&&(S.value=P.value[0].value),t.n=3;break;case 2:t.p=2,t.v,P.value=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}];case 3:return t.a(2)}},t,null,[[0,2]])}));return function(){return t.apply(this,arguments)}}(),Ht=function(){w.value=!1,E.value=null,k.value="",A.value=[],L.value=!1,S.value=P.value.length>0?P.value[0].value:""},Kt=function(t){S.value=t,k.value="",A.value=[],E.value=null,L.value=!1,qt(t)},Yt=function(t){var e=t.target.value;if(k.value=e,D.value&&clearTimeout(D.value),!e||""===e.trim())return A.value=[],L.value=!1,void(E.value=null);D.value=setTimeout(function(){Ut(e)},500)},Xt=function(t){t&&t.trim()&&(S.value?A.value.length>0||(L.value&&0===A.value.length?Gt():Ut(t)):u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")))},Ut=function(){var t=(0,c.A)((0,l.A)().m(function t(e){var n;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e&&""!==e.trim()){t.n=1;break}return A.value=[],L.value=!1,t.a(2);case 1:if(S.value){t.n=2;break}return u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),t.a(2);case 2:return T.value=!0,L.value=!0,t.p=3,t.n=4,(0,v._3)({market:S.value,keyword:e.trim(),limit:20});case 4:n=t.v,n&&1===n.code&&n.data&&n.data.length>0?A.value=n.data:(A.value=[],E.value={market:S.value,symbol:e.trim().toUpperCase(),name:""}),t.n=6;break;case 5:t.p=5,t.v,A.value=[],E.value={market:S.value,symbol:e.trim().toUpperCase(),name:""};case 6:return t.p=6,T.value=!1,t.f(6);case 7:return t.a(2)}},t,null,[[3,5,6,7]])}));return function(e){return t.apply(this,arguments)}}(),Gt=function(){k.value&&k.value.trim()?S.value?E.value={market:S.value,symbol:k.value.trim().toUpperCase(),name:""}:u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")):u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseEnterSymbol"))},jt=function(t){E.value={market:t.market,symbol:t.symbol,name:t.name||t.symbol}},qt=function(){var t=(0,c.A)((0,l.A)().m(function t(e){var i;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e||(e=S.value||(P.value.length>0?P.value[0].value:"")),e){t.n=1;break}return t.a(2);case 1:return I.value=!0,t.p=2,t.n=3,(0,v.z6)({market:e,limit:10});case 3:i=t.v,i&&1===i.code&&i.data?M.value=i.data:M.value=[],t.n=5;break;case 4:t.p=4,t.v,M.value=[];case 5:return t.p=5,I.value=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(e){return t.apply(this,arguments)}}(),Zt=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,r,a,o,s,c;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e="",r="",!E.value){t.n=1;break}e=E.value.market,r=E.value.symbol.toUpperCase(),t.n=4;break;case 1:if(!k.value||!k.value.trim()){t.n=3;break}if(S.value){t.n=2;break}return u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),t.a(2);case 2:e=S.value,r=k.value.trim().toUpperCase(),t.n=4;break;case 3:return u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol")),t.a(2);case 4:return C.value=!0,t.p=5,t.n=6,(0,v.dp)({userid:n.value,market:e,symbol:r});case 6:if(a=t.v,!a||1!==a.code){t.n=8;break}return u.A.success(i.$t("dashboard.analysis.message.addStockSuccess")),Ht(),t.n=7,Bt();case 7:t.n=9;break;case 8:u.A.error((null===a||void 0===a?void 0:a.msg)||i.$t("dashboard.analysis.message.addStockFailed"));case 9:t.n=11;break;case 10:t.p=10,c=t.v,s=(null===c||void 0===c||null===(o=c.response)||void 0===o||null===(o=o.data)||void 0===o?void 0:o.msg)||(null===c||void 0===c?void 0:c.message)||i.$t("dashboard.analysis.message.addStockFailed"),u.A.error(s);case 11:return t.p=11,C.value=!1,t.f(11);case 12:return t.a(2)}},t,null,[[5,10,11,12]])}));return function(){return t.apply(this,arguments)}}(),Jt=function(t){if(!ie(t.id)){var e=t.params||t.defaultParams||{};j.value.push((0,d.A)((0,d.A)({},t),{},{id:t.id,params:(0,d.A)({},e)}))}},Qt=function(t){j.value=j.value.filter(function(e){return e.id!==t})},te=function(t){var e=t.action,i=t.indicator;if("add"===e){var n=(0,d.A)((0,d.A)({},i),{},{calculate:ee(i.id)});Jt(n)}else"remove"===e&&Qt(i.id)},ee=function(t){return null},ie=function(t){return"sma"===t?Z.some(function(t){return j.value.some(function(e){return e.id===t.id})}):"ema"===t?J.some(function(t){return j.value.some(function(e){return e.id===t.id})}):j.value.some(function(e){return e.id===t})},ne=function(){var t=new Set;return Z.forEach(function(e){return t.add(e.id)}),J.forEach(function(e){return t.add(e.id)}),j.value.filter(function(e){return!t.has(e.id)})},re=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,i,r;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value){t.n=1;break}return t.a(2);case 1:return et.value=!0,t.p=2,t.n=3,(0,f.Ay)({url:"/api/indicator/getIndicators",method:"get",params:{userid:n.value}});case 3:e=t.v,1===e.code&&e.data&&(i=e.data.filter(function(t){return!t.is_buy||0===t.is_buy||"0"===t.is_buy}),r=e.data.filter(function(t){return 1===t.is_buy||"1"===t.is_buy}),Q.value=i.map(function(t){return(0,d.A)((0,d.A)({},t),{},{type:"python",source:"custom"})}),tt.value=r.map(function(t){return(0,d.A)((0,d.A)({},t),{},{type:"python",source:"purchased"})})),t.n=5;break;case 4:t.p=4,t.v;case 5:return t.p=5,et.value=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(){return t.apply(this,arguments)}}(),ae=(0,h.KR)(null),oe=function(){var t=(0,c.A)((0,l.A)().m(function t(e,n){var r,a,o,s,c,h,p,f,v;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(r="".concat(n,"-").concat(e.id),!ie(r)){t.n=1;break}return Qt(r),t.a(2);case 1:if(t.p=1,a=e.code||"",ae.value){t.n=2;break}return u.A.error(i.$t("dashboard.indicator.error.chartNotReady")),t.a(2);case 2:if("function"===typeof ae.value.parsePythonStrategy){t.n=3;break}return u.A.error(i.$t("dashboard.indicator.error.chartMethodNotReady")),t.a(2);case 3:if("function"===typeof ae.value.executePythonStrategy){t.n=4;break}return u.A.error(i.$t("dashboard.indicator.error.chartExecuteNotReady")),t.a(2);case 4:if(o=ae.value.parsePythonStrategy(a),o){t.n=5;break}return u.A.error(i.$t("dashboard.indicator.error.parseFailed")),t.a(2);case 5:s=e.userParams||{},c=a,h=(0,d.A)({},s),p={id:r,name:e.name,type:"python",code:c,description:e.description,parsed:o,userParams:h,originalId:e.id,user_id:e.user_id||e.userId,is_encrypted:e.is_encrypted||e.isEncrypted||0,calculate:function(t,i){return ae.value.executePythonStrategy(c,t,(0,d.A)((0,d.A)({},i),h),{id:e.id,user_id:e.user_id||e.userId,is_encrypted:e.is_encrypted||e.isEncrypted||0})}},f=(0,d.A)((0,d.A)({},o.params),s),j.value.push((0,d.A)((0,d.A)({},p),{},{params:f})),t.n=7;break;case 6:t.p=6,v=t.v,u.A.error(i.$t("dashboard.indicator.error.addIndicatorFailed")+": "+(v.message||"未知错误"));case 7:return t.a(2)}},t,null,[[1,6]])}));return function(e,i){return t.apply(this,arguments)}}(),se=function(){var t=(0,c.A)((0,l.A)().m(function t(e,n){var r,a,o,s,c;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(r="".concat(n,"-").concat(e.id),!ie(r)){t.n=1;break}Qt(r),t.n=5;break;case 1:return t.p=1,st.value=!0,t.n=2,i.$http.get("/api/indicator/getIndicatorParams",{params:{indicator_id:e.id}});case 2:a=t.v,a&&1===a.code&&Array.isArray(a.data)&&a.data.length>0?(at.value=a.data,o="".concat(n,"-").concat(e.id),s=lt.value[o],c={},a.data.forEach(function(t){var e=s&&void 0!==s[t.name]?s[t.name]:t.default;e="int"===t.type?parseInt(e)||0:"float"===t.type?parseFloat(e)||0:"bool"===t.type?!0===e||"true"===e||1===e||"1"===e:e||"",c[t.name]=e}),ot.value=c,nt.value=e,rt.value=n,it.value=!0):oe(e,n),t.n=4;break;case 3:t.p=3,t.v,oe(e,n);case 4:return t.p=4,st.value=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}));return function(e,i){return t.apply(this,arguments)}}(),le=function(){if(nt.value){var t="".concat(rt.value,"-").concat(nt.value.id);lt.value[t]=(0,d.A)({},ot.value);var e=(0,d.A)((0,d.A)({},nt.value),{},{userParams:(0,d.A)({},ot.value)});oe(e,rt.value)}it.value=!1,nt.value=null,rt.value=""},ce=function(){ue(),it.value=!1,setTimeout(function(){nt.value=null,rt.value=""},100)},ue=function(){if(nt.value&&rt.value){var t="".concat(rt.value,"-").concat(nt.value.id);lt.value[t]=JSON.parse(JSON.stringify(ot.value))}},de=function(){ue()},he=function(t){var e=t.code,n=t.name;if(e&&e.trim())try{if(!ae.value)return void u.A.error(i.$t("dashboard.indicator.error.chartNotReady"));if("function"!==typeof ae.value.parsePythonStrategy)return void u.A.error(i.$t("dashboard.indicator.error.chartMethodNotReady"));if("function"!==typeof ae.value.executePythonStrategy)return void u.A.error(i.$t("dashboard.indicator.error.chartExecuteNotReady"));var r=ae.value.parsePythonStrategy(e);if(!r)return void u.A.error(i.$t("dashboard.indicator.error.parseFailedCheck"));var a={id:"temp-editor-indicator",name:n||"临时指标",type:"python",code:e,description:"",parsed:r,calculate:function(t,i){var n=e;return ae.value.executePythonStrategy(n,t,i)}},o=j.value.findIndex(function(t){return"temp-editor-indicator"===t.id});o>=0&&j.value.splice(o,1),j.value.push((0,d.A)((0,d.A)({},a),{},{params:(0,d.A)({},r.params)})),u.A.success(i.$t("dashboard.indicator.success.runIndicator"))}catch(s){u.A.error(i.$t("dashboard.indicator.error.runIndicatorFailed")+": "+(s.message||"未知错误"))}else u.A.warning(i.$t("dashboard.indicator.warning.enterCode"))},pe=function(){ht.value=null,dt.value=!0},fe=function(t){ht.value=t,dt.value=!0},ve=function(){ct.value=!ct.value},ge=function(t){a.A.confirm({title:i.$t("dashboard.indicator.delete.confirmTitle"),content:i.$t("dashboard.indicator.delete.confirmContent",{name:t.name}),okText:i.$t("dashboard.indicator.delete.confirmOk"),okType:"danger",cancelText:i.$t("dashboard.indicator.delete.confirmCancel"),onOk:function(){var e=(0,c.A)((0,l.A)().m(function e(){var r,a,o;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,f.Ay)({url:"/api/indicator/deleteIndicator",method:"post",data:{id:t.id,userid:n.value}});case 1:if(r=e.v,1!==r.code){e.n=3;break}return u.A.success(i.$t("dashboard.indicator.delete.success")),a="custom-"+t.id,ie(a)&&Qt(a),e.n=2,re();case 2:e.n=4;break;case 3:u.A.error(r.msg||i.$t("dashboard.indicator.delete.failed"));case 4:e.n=6;break;case 5:e.p=5,o=e.v,u.A.error(i.$t("dashboard.indicator.delete.failed")+": "+(o.message||"未知错误"));case 6:return e.a(2)}},e,null,[[0,5]])}));function r(){return e.apply(this,arguments)}return r}()})},me=function(t){ft.value=(0,d.A)({},t),pt.value=!0},ye=function(t){gt.value=(0,d.A)({},t),vt.value=!0},be=function(t){yt.value=t,mt.value=!0},xe=function(t){xt.value=(0,d.A)({},t),Ct.value=t.pricing_type||"free",St.value=t.price||10,kt.value=t.description||"",At.value=!!t.vip_free,bt.value=!0},_e=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,r;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value){t.n=1;break}return u.A.error(i.$t("dashboard.indicator.error.pleaseLogin")),t.a(2);case 1:return _t.value=!0,t.p=2,t.n=3,(0,f.Ay)({url:"/api/indicator/saveIndicator",method:"post",data:{userid:n.value,id:xt.value.id,code:xt.value.code,name:xt.value.name,description:kt.value,publishToCommunity:!0,pricingType:Ct.value,price:"paid"===Ct.value?St.value:0,vipFree:"paid"===Ct.value&&At.value}});case 3:if(e=t.v,1!==e.code){t.n=5;break}return u.A.success(i.$t("dashboard.indicator.publish.success")),bt.value=!1,xt.value=null,t.n=4,re();case 4:t.n=6;break;case 5:u.A.error(e.msg||i.$t("dashboard.indicator.publish.failed"));case 6:t.n=8;break;case 7:t.p=7,r=t.v,u.A.error(i.$t("dashboard.indicator.publish.failed")+": "+(r.message||""));case 8:return t.p=8,_t.value=!1,t.f(8);case 9:return t.a(2)}},t,null,[[2,7,8,9]])}));return function(){return t.apply(this,arguments)}}(),we=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value&&xt.value){t.n=1;break}return t.a(2);case 1:return wt.value=!0,t.p=2,t.n=3,(0,f.Ay)({url:"/api/indicator/saveIndicator",method:"post",data:{userid:n.value,id:xt.value.id,code:xt.value.code,name:xt.value.name,description:xt.value.description,publishToCommunity:!1,pricingType:"free",price:0,vipFree:!1}});case 3:if(e=t.v,1!==e.code){t.n=5;break}return u.A.success(i.$t("dashboard.indicator.publish.unpublishSuccess")),bt.value=!1,xt.value=null,t.n=4,re();case 4:t.n=6;break;case 5:u.A.error(e.msg||i.$t("dashboard.indicator.publish.unpublishFailed"));case 6:t.n=8;break;case 7:t.p=7,t.v,u.A.error(i.$t("dashboard.indicator.publish.unpublishFailed"));case 8:return t.p=8,wt.value=!1,t.f(8);case 9:return t.a(2)}},t,null,[[2,7,8,9]])}));return function(){return t.apply(this,arguments)}}(),Ce=function(){var t=(0,c.A)((0,l.A)().m(function t(e){var r,a,o;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value){t.n=1;break}return u.A.error(i.$t("dashboard.indicator.error.pleaseLogin")),t.a(2);case 1:return r=i.$refs.indicatorEditor,r&&(r.saving=!0),t.p=2,t.n=3,(0,f.Ay)({url:"/api/indicator/saveIndicator",method:"post",data:{userid:n.value,id:e.id||0,code:e.code}});case 3:if(a=t.v,1!==a.code){t.n=5;break}return u.A.success(i.$t("dashboard.indicator.save.success")),dt.value=!1,ht.value=null,t.n=4,re();case 4:t.n=6;break;case 5:u.A.error(a.msg||i.$t("dashboard.indicator.save.failed"));case 6:t.n=8;break;case 7:t.p=7,o=t.v,u.A.error(i.$t("dashboard.indicator.save.failed")+": "+(o.message||"未知错误"));case 8:return t.p=8,r&&(r.saving=!1),t.f(8);case 9:return t.a(2)}},t,null,[[2,7,8,9]])}));return function(e){return t.apply(this,arguments)}}(),Se=function(t){var e=t.end_time;if(1===e||"1"===e)return i.$t("dashboard.indicator.status.normalPermanent");if(!e||0===e)return i.$t("dashboard.indicator.status.normal");var n=Math.floor(Date.now()/1e3);return e0&&!S.value&&(S.value=P.value[0].value),S.value&&qt(S.value)):(E.value=null,k.value="",A.value=[],L.value=!1,D.value&&(clearTimeout(D.value),D.value=null))}),(0,h.wB)(function(){return ot.value},function(t){if(it.value&&nt.value&&rt.value){var e="".concat(rt.value,"-").concat(nt.value.id);lt.value[e]=JSON.parse(JSON.stringify(t))}},{deep:!0,immediate:!1}),(0,h.wB)(it,function(t){t||ue()}),{userId:n,klineChart:ae,searchSymbol:p,symbolSuggestions:m,watchlist:y,symbolSearchValue:x,symbolSearchOpen:_,currentSymbol:H,currentMarket:K,currentPrice:Y,priceChange:X,priceChangeClass:U,timeframe:G,loadingWatchlist:b,activeIndicators:j,trendIndicators:Dt,oscillatorIndicators:Pt,customIndicators:Q,purchasedIndicators:tt,loadingIndicators:et,realtimeEnabled:Mt,toggleRealtime:Ee,handleSymbolSearch:Ot,handleSymbolSelect:Wt,handleDropdownVisibleChange:zt,filterSymbolOption:Vt,getMarketName:Me,getMarketColor:Ie,setTimeframe:Lt,addIndicator:Jt,removeIndicator:Qt,isIndicatorActive:ie,loadIndicators:re,addPythonIndicator:oe,toggleIndicator:se,getIndicatorStatus:Se,getIndicatorStatusIcon:ke,getIndicatorStatusClass:Ae,getExpiryTimeText:Te,formatParams:Rt,loadWatchlist:Bt,getCustomActiveIndicators:ne,showIndicatorEditor:dt,editingIndicator:ht,handleCreateIndicator:pe,handleRunIndicator:he,handleSaveIndicator:Ce,handleEditIndicator:fe,handleDeleteIndicator:ge,toggleCustomSection:ve,customSectionCollapsed:ct,purchasedSectionCollapsed:ut,handlePriceChange:It,handleChartRetry:Et,handleIndicatorToggle:te,showParamsModal:it,pendingIndicator:nt,indicatorParams:at,indicatorParamValues:ot,loadingParams:st,confirmIndicatorParams:le,cancelIndicatorParams:ce,handleParamsModalAfterClose:de,showBacktestModal:pt,backtestIndicator:ft,handleOpenBacktest:me,showBacktestHistoryDrawer:vt,backtestHistoryIndicator:gt,handleOpenBacktestHistory:ye,showBacktestRunViewer:mt,selectedBacktestRun:yt,handleViewBacktestRun:be,showPublishModal:bt,publishIndicator:xt,publishing:_t,unpublishing:wt,publishPricingType:Ct,publishPrice:St,publishDescription:kt,publishVipFree:At,publishRules:Tt,handlePublishIndicator:xe,handleConfirmPublish:_e,handleUnpublish:we,selectedSymbol:H,selectedMarket:K,selectedTimeframe:G,isMobile:q,showAddStockModal:w,addingStock:C,selectedMarketTab:S,symbolSearchKeyword:k,symbolSearchResults:A,searchingSymbols:T,hotSymbols:M,loadingHotSymbols:I,selectedSymbolForAdd:E,marketTypes:P,hasSearched:L,handleCloseAddStockModal:Ht,handleMarketTabChange:Kt,handleSymbolSearchInput:Yt,handleSearchOrInput:Xt,searchSymbolsInModal:Ut,selectSymbol:jt,loadHotSymbols:qt,handleAddStock:Zt,handleDirectAdd:Gt,loadMarketTypes:$t,showQuickTrade:R,qtSymbol:F,qtSide:B,qtPrice:N,isCryptoMarket:O,openQuickTrade:z,onQuickTradeSuccess:W,handleQuickTradeSymbolChange:V,goToIndicatorMarket:$}}},la=sa,ca=(0,T.A)(la,n,r,!1,null,"b17e86c2",null),ua=ca.exports},64118:function(t,e,i){"use strict";i.d(e,{Qo:function(){return a},_3:function(){return u},dp:function(){return o},iO:function(){return c},mk:function(){return s},ms:function(){return l},z6:function(){return d}});var n=i(76471),r={GetWatchlist:"/api/market/watchlist/get",AddWatchlist:"/api/market/watchlist/add",RemoveWatchlist:"/api/market/watchlist/remove",GetWatchlistPrices:"/api/market/watchlist/prices",MultiAnalysis:"/api/analysis/multiAnalysis",CreateAnalysisTask:"/api/analysis/createTask",GetAnalysisTaskStatus:"/api/analysis/getTaskStatus",GetAnalysisHistoryList:"/api/analysis/getHistoryList",DeleteAnalysisTask:"/api/analysis/deleteTask",ReflectAnalysis:"/api/analysis/reflect",ChatMessage:"/api/ai/chat/message",GetChatHistory:"/api/ai/chat/history",SaveChatHistory:"/api/ai/chat/history/save",GetConfig:"/api/market/config",GetMenuFooterConfig:"/api/market/menuFooterConfig",GetMarketTypes:"/api/market/types",SearchSymbols:"/api/market/symbols/search",GetHotSymbols:"/api/market/symbols/hot"};function a(t){return(0,n.Ay)({url:r.GetWatchlist,method:"get",params:t})}function o(t){return(0,n.Ay)({url:r.AddWatchlist,method:"post",data:t})}function s(t){return(0,n.Ay)({url:r.RemoveWatchlist,method:"post",data:t})}function l(t){return(0,n.Ay)({url:r.GetWatchlistPrices,method:"get",params:{watchlist:JSON.stringify(t.watchlist||[])}})}function c(){return(0,n.Ay)({url:r.GetMarketTypes,method:"get"})}function u(t){return(0,n.Ay)({url:r.SearchSymbols,method:"get",params:t})}function d(t){return(0,n.Ay)({url:r.GetHotSymbols,method:"get",params:t})}},55218:function(t,e,i){(function(t){t(i(15237))})(function(t){var e={pairs:"()[]{}''\"\"",closeBefore:")]}'\":;>",triples:"",explode:"[]{}"},i=t.Pos;function n(t,i){return"pairs"==i&&"string"==typeof t?t:"object"==typeof t&&null!=t[i]?t[i]:e[i]}t.defineOption("autoCloseBrackets",!1,function(e,i,o){o&&o!=t.Init&&(e.removeKeyMap(r),e.state.closeBrackets=null),i&&(a(n(i,"pairs")),e.state.closeBrackets=i,e.addKeyMap(r))});var r={Backspace:l,Enter:c};function a(t){for(var e=0;e=0;l--){var u=o[l].head;e.replaceRange("",i(u.line,u.ch-1),i(u.line,u.ch+1),"+delete")}}function c(e){var i=s(e),r=i&&n(i,"explode");if(!r||e.getOption("disableInput"))return t.Pass;for(var a=e.listSelections(),o=0;o0?{line:o.head.line,ch:o.head.ch+e}:{line:o.head.line-1};i.push({anchor:s,head:s})}t.setSelections(i,r)}function d(e){var n=t.cmpPos(e.anchor,e.head)>0;return{anchor:new i(e.anchor.line,e.anchor.ch+(n?-1:1)),head:new i(e.head.line,e.head.ch+(n?1:-1))}}function h(e,r){var a=s(e);if(!a||e.getOption("disableInput"))return t.Pass;var o=n(a,"pairs"),l=o.indexOf(r);if(-1==l)return t.Pass;for(var c,h=n(a,"closeBefore"),p=n(a,"triples"),v=o.charAt(l+1)==r,g=e.listSelections(),m=l%2==0,y=0;y1&&p.indexOf(r)>=0&&e.getRange(i(_.line,_.ch-2),_)==r+r){if(_.ch>2&&/\bstring/.test(e.getTokenTypeAt(i(_.line,_.ch-2))))return t.Pass;b="addFour"}else if(v){var C=0==_.ch?" ":e.getRange(i(_.line,_.ch-1),_);if(t.isWordChar(w)||C==r||t.isWordChar(C))return t.Pass;b="both"}else{if(!m||!(0===w.length||/\s/.test(w)||h.indexOf(w)>-1))return t.Pass;b="both"}else b=v&&f(e,_)?"both":p.indexOf(r)>=0&&e.getRange(_,i(_.line,_.ch+3))==r+r+r?"skipThree":"skip";if(c){if(c!=b)return t.Pass}else c=b}var S=l%2?o.charAt(l-1):r,k=l%2?r:o.charAt(l+1);e.operation(function(){if("skip"==c)u(e,1);else if("skipThree"==c)u(e,3);else if("surround"==c){for(var t=e.getSelections(),i=0;i",")":"(<","[":"]>","]":"[<","{":"}>","}":"{<","<":">>",">":"<<"};function r(t){return t&&t.bracketRegex||/[(){}[\]]/}function a(t,e,a){var s=t.getLineHandle(e.line),l=e.ch-1,c=a&&a.afterCursor;null==c&&(c=/(^| )cm-fat-cursor($| )/.test(t.getWrapperElement().className));var u=r(a),d=!c&&l>=0&&u.test(s.text.charAt(l))&&n[s.text.charAt(l)]||u.test(s.text.charAt(l+1))&&n[s.text.charAt(++l)];if(!d)return null;var h=">"==d.charAt(1)?1:-1;if(a&&a.strict&&h>0!=(l==e.ch))return null;var p=t.getTokenTypeAt(i(e.line,l+1)),f=o(t,i(e.line,l+(h>0?1:0)),h,p,a);return null==f?null:{from:i(e.line,l),to:f&&f.pos,match:f&&f.ch==d.charAt(0),forward:h>0}}function o(t,e,a,o,s){for(var l=s&&s.maxScanLineLength||1e4,c=s&&s.maxScanLines||1e3,u=[],d=r(s),h=a>0?Math.min(e.line+c,t.lastLine()+1):Math.max(t.firstLine()-1,e.line-c),p=e.line;p!=h;p+=a){var f=t.getLine(p);if(f){var v=a>0?0:f.length-1,g=a>0?f.length:-1;if(!(f.length>l))for(p==e.line&&(v=e.ch-(a<0?1:0));v!=g;v+=a){var m=f.charAt(v);if(d.test(m)&&(void 0===o||(t.getTokenTypeAt(i(p,v+1))||"")==(o||""))){var y=n[m];if(y&&">"==y.charAt(1)==a>0)u.push(m);else{if(!u.length)return{pos:i(p,v),ch:m};u.pop()}}}}}return p-a!=(a>0?t.lastLine():t.firstLine())&&null}function s(t,n,r){for(var o=t.state.matchBrackets.maxHighlightLineLength||1e3,s=r&&r.highlightNonMatching,l=[],c=t.listSelections(),u=0;u2),m=/Android/.test(t),y=g||m||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(t),b=g||/Mac/.test(e),x=/\bCrOS\b/.test(t),_=/win/i.test(e),w=h&&t.match(/Version\/(\d*\.\d*)/);w&&(w=Number(w[1])),w&&w>=15&&(h=!1,l=!0);var C=b&&(c||h&&(null==w||w<12.11)),S=i||o&&s>=9;function k(t){return new RegExp("(^|\\s)"+t+"(?:$|\\s)\\s*")}var A,T=function(t,e){var i=t.className,n=k(e).exec(i);if(n){var r=i.slice(n.index+n[0].length);t.className=i.slice(0,n.index)+(r?n[1]+r:"")}};function M(t){for(var e=t.childNodes.length;e>0;--e)t.removeChild(t.firstChild);return t}function I(t,e){return M(t).appendChild(e)}function E(t,e,i,n){var r=document.createElement(t);if(i&&(r.className=i),n&&(r.style.cssText=n),"string"==typeof e)r.appendChild(document.createTextNode(e));else if(e)for(var a=0;a=e)return o+(e-a);o+=s-a,o+=i-o%i,a=s+1}}g?B=function(t){t.selectionStart=0,t.selectionEnd=t.value.length}:o&&(B=function(t){try{t.select()}catch(e){}});var K=function(){this.id=null,this.f=null,this.time=0,this.handler=V(this.onTimeout,this)};function Y(t,e){for(var i=0;i=e)return n+Math.min(o,e-r);if(r+=a-n,r+=i-r%i,n=a+1,r>=e)return n}}var J=[""];function Q(t){while(J.length<=t)J.push(tt(J)+" ");return J[t]}function tt(t){return t[t.length-1]}function et(t,e){for(var i=[],n=0;n"€"&&(t.toUpperCase()!=t.toLowerCase()||at.test(t))}function st(t,e){return e?!!(e.source.indexOf("\\w")>-1&&ot(t))||e.test(t):ot(t)}function lt(t){for(var e in t)if(t.hasOwnProperty(e)&&t[e])return!1;return!0}var ct=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function ut(t){return t.charCodeAt(0)>=768&&ct.test(t)}function dt(t,e,i){while((i<0?e>0:ei?-1:1;;){if(e==i)return e;var r=(e+i)/2,a=n<0?Math.ceil(r):Math.floor(r);if(a==e)return t(a)?e:i;t(a)?i=a:e=a+n}}function pt(t,e,i,n){if(!t)return n(e,i,"ltr",0);for(var r=!1,a=0;ae||e==i&&o.to==e)&&(n(Math.max(o.from,e),Math.min(o.to,i),1==o.level?"rtl":"ltr",a),r=!0)}r||n(e,i,"ltr")}var ft=null;function vt(t,e,i){var n;ft=null;for(var r=0;re)return r;a.to==e&&(a.from!=a.to&&"before"==i?n=r:ft=r),a.from==e&&(a.from!=a.to&&"before"!=i?n=r:ft=r)}return null!=n?n:ft}var gt=function(){var t="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",e="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";function i(i){return i<=247?t.charAt(i):1424<=i&&i<=1524?"R":1536<=i&&i<=1785?e.charAt(i-1536):1774<=i&&i<=2220?"r":8192<=i&&i<=8203?"w":8204==i?"b":"L"}var n=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,r=/[stwN]/,a=/[LRr]/,o=/[Lb1n]/,s=/[1n]/;function l(t,e,i){this.level=t,this.from=e,this.to=i}return function(t,e){var c="ltr"==e?"L":"R";if(0==t.length||"ltr"==e&&!n.test(t))return!1;for(var u=t.length,d=[],h=0;h-1&&(n[e]=r.slice(0,a).concat(r.slice(a+1)))}}}function wt(t,e){var i=xt(t,e);if(i.length)for(var n=Array.prototype.slice.call(arguments,2),r=0;r0}function At(t){t.prototype.on=function(t,e){bt(this,t,e)},t.prototype.off=function(t,e){_t(this,t,e)}}function Tt(t){t.preventDefault?t.preventDefault():t.returnValue=!1}function Mt(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0}function It(t){return null!=t.defaultPrevented?t.defaultPrevented:0==t.returnValue}function Et(t){Tt(t),Mt(t)}function Dt(t){return t.target||t.srcElement}function Pt(t){var e=t.which;return null==e&&(1&t.button?e=1:2&t.button?e=3:4&t.button&&(e=2)),b&&t.ctrlKey&&1==e&&(e=3),e}var Lt,Rt,Ft=function(){if(o&&s<9)return!1;var t=E("div");return"draggable"in t||"dragDrop"in t}();function Bt(t){if(null==Lt){var e=E("span","​");I(t,E("span",[e,document.createTextNode("x")])),0!=t.firstChild.offsetHeight&&(Lt=e.offsetWidth<=1&&e.offsetHeight>2&&!(o&&s<8))}var i=Lt?E("span","​"):E("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return i.setAttribute("cm-text",""),i}function Nt(t){if(null!=Rt)return Rt;var e=I(t,document.createTextNode("AخA")),i=A(e,0,1).getBoundingClientRect(),n=A(e,1,2).getBoundingClientRect();return M(t),!(!i||i.left==i.right)&&(Rt=n.right-i.right<3)}var Ot=3!="\n\nb".split(/\n/).length?function(t){var e=0,i=[],n=t.length;while(e<=n){var r=t.indexOf("\n",e);-1==r&&(r=t.length);var a=t.slice(e,"\r"==t.charAt(r-1)?r-1:r),o=a.indexOf("\r");-1!=o?(i.push(a.slice(0,o)),e+=o+1):(i.push(a),e=r+1)}return i}:function(t){return t.split(/\r\n?|\n/)},zt=window.getSelection?function(t){try{return t.selectionStart!=t.selectionEnd}catch(e){return!1}}:function(t){var e;try{e=t.ownerDocument.selection.createRange()}catch(i){}return!(!e||e.parentElement()!=t)&&0!=e.compareEndPoints("StartToEnd",e)},Wt=function(){var t=E("div");return"oncopy"in t||(t.setAttribute("oncopy","return;"),"function"==typeof t.oncopy)}(),Vt=null;function $t(t){if(null!=Vt)return Vt;var e=I(t,E("span","x")),i=e.getBoundingClientRect(),n=A(e,0,1).getBoundingClientRect();return Vt=Math.abs(i.left-n.left)>1}var Ht={},Kt={};function Yt(t,e){arguments.length>2&&(e.dependencies=Array.prototype.slice.call(arguments,2)),Ht[t]=e}function Xt(t,e){Kt[t]=e}function Ut(t){if("string"==typeof t&&Kt.hasOwnProperty(t))t=Kt[t];else if(t&&"string"==typeof t.name&&Kt.hasOwnProperty(t.name)){var e=Kt[t.name];"string"==typeof e&&(e={name:e}),t=rt(e,t),t.name=e.name}else{if("string"==typeof t&&/^[\w\-]+\/[\w\-]+\+xml$/.test(t))return Ut("application/xml");if("string"==typeof t&&/^[\w\-]+\/[\w\-]+\+json$/.test(t))return Ut("application/json")}return"string"==typeof t?{name:t}:t||{name:"null"}}function Gt(t,e){e=Ut(e);var i=Ht[e.name];if(!i)return Gt(t,"text/plain");var n=i(t,e);if(jt.hasOwnProperty(e.name)){var r=jt[e.name];for(var a in r)r.hasOwnProperty(a)&&(n.hasOwnProperty(a)&&(n["_"+a]=n[a]),n[a]=r[a])}if(n.name=e.name,e.helperType&&(n.helperType=e.helperType),e.modeProps)for(var o in e.modeProps)n[o]=e.modeProps[o];return n}var jt={};function qt(t,e){var i=jt.hasOwnProperty(t)?jt[t]:jt[t]={};$(e,i)}function Zt(t,e){if(!0===e)return e;if(t.copyState)return t.copyState(e);var i={};for(var n in e){var r=e[n];r instanceof Array&&(r=r.concat([])),i[n]=r}return i}function Jt(t,e){var i;while(t.innerMode){if(i=t.innerMode(e),!i||i.mode==t)break;e=i.state,t=i.mode}return i||{mode:t,state:e}}function Qt(t,e,i){return!t.startState||t.startState(e,i)}var te=function(t,e,i){this.pos=this.start=0,this.string=t,this.tabSize=e||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=i};function ee(t,e){if(e-=t.first,e<0||e>=t.size)throw new Error("There is no line "+(e+t.first)+" in the document.");var i=t;while(!i.lines)for(var n=0;;++n){var r=i.children[n],a=r.chunkSize();if(e=t.first&&ei?ce(i,ee(t,i).text.length):me(e,ee(t,e.line).text.length)}function me(t,e){var i=t.ch;return null==i||i>e?ce(t.line,e):i<0?ce(t.line,0):t}function ye(t,e){for(var i=[],n=0;n=this.string.length},te.prototype.sol=function(){return this.pos==this.lineStart},te.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},te.prototype.next=function(){if(this.pose},te.prototype.eatSpace=function(){var t=this.pos;while(/[\s\u00a0]/.test(this.string.charAt(this.pos)))++this.pos;return this.pos>t},te.prototype.skipToEnd=function(){this.pos=this.string.length},te.prototype.skipTo=function(t){var e=this.string.indexOf(t,this.pos);if(e>-1)return this.pos=e,!0},te.prototype.backUp=function(t){this.pos-=t},te.prototype.column=function(){return this.lastColumnPos0?null:(n&&!1!==e&&(this.pos+=n[0].length),n)}var r=function(t){return i?t.toLowerCase():t},a=this.string.substr(this.pos,t.length);if(r(a)==r(t))return!1!==e&&(this.pos+=t.length),!0},te.prototype.current=function(){return this.string.slice(this.start,this.pos)},te.prototype.hideFirstChars=function(t,e){this.lineStart+=t;try{return e()}finally{this.lineStart-=t}},te.prototype.lookAhead=function(t){var e=this.lineOracle;return e&&e.lookAhead(t)},te.prototype.baseToken=function(){var t=this.lineOracle;return t&&t.baseToken(this.pos)};var be=function(t,e){this.state=t,this.lookAhead=e},xe=function(t,e,i,n){this.state=e,this.doc=t,this.line=i,this.maxLookAhead=n||0,this.baseTokens=null,this.baseTokenPos=1};function _e(t,e,i,n){var r=[t.state.modeGen],a={};Ee(t,e.text,t.doc.mode,i,function(t,e){return r.push(t,e)},a,n);for(var o=i.state,s=function(n){i.baseTokens=r;var s=t.state.overlays[n],l=1,c=0;i.state=!0,Ee(t,e.text,s.mode,i,function(t,e){var i=l;while(ct&&r.splice(l,1,t,r[l+1],n),l+=2,c=Math.min(t,n)}if(e)if(s.opaque)r.splice(i,l-i,t,"overlay "+e),l=i+2;else for(;it.options.maxHighlightLength&&Zt(t.doc.mode,n.state),a=_e(t,e,n);r&&(n.state=r),e.stateAfter=n.save(!r),e.styles=a.styles,a.classes?e.styleClasses=a.classes:e.styleClasses&&(e.styleClasses=null),i===t.doc.highlightFrontier&&(t.doc.modeFrontier=Math.max(t.doc.modeFrontier,++t.doc.highlightFrontier))}return e.styles}function Ce(t,e,i){var n=t.doc,r=t.display;if(!n.mode.startState)return new xe(n,!0,e);var a=De(t,e,i),o=a>n.first&&ee(n,a-1).stateAfter,s=o?xe.fromSaved(n,o,a):new xe(n,Qt(n.mode),a);return n.iter(a,e,function(i){Se(t,i.text,s);var n=s.line;i.stateAfter=n==e-1||n%5==0||n>=r.viewFrom&&ne.start)return a}throw new Error("Mode "+t.name+" failed to advance stream.")}xe.prototype.lookAhead=function(t){var e=this.doc.getLine(this.line+t);return null!=e&&t>this.maxLookAhead&&(this.maxLookAhead=t),e},xe.prototype.baseToken=function(t){if(!this.baseTokens)return null;while(this.baseTokens[this.baseTokenPos]<=t)this.baseTokenPos+=2;var e=this.baseTokens[this.baseTokenPos+1];return{type:e&&e.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-t}},xe.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},xe.fromSaved=function(t,e,i){return e instanceof be?new xe(t,Zt(t.mode,e.state),i,e.lookAhead):new xe(t,Zt(t.mode,e),i)},xe.prototype.save=function(t){var e=!1!==t?Zt(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new be(e,this.maxLookAhead):e};var Te=function(t,e,i){this.start=t.start,this.end=t.pos,this.string=t.current(),this.type=e||null,this.state=i};function Me(t,e,i,n){var r,a=t.doc,o=a.mode;e=ge(a,e);var s,l=ee(a,e.line),c=Ce(t,e.line,i),u=new te(l.text,t.options.tabSize,c);n&&(s=[]);while((n||u.post.options.maxHighlightLength?(s=!1,o&&Se(t,e,n,d.pos),d.pos=e.length,l=null):l=Ie(Ae(i,d,n.state,h),a),h){var p=h[0].name;p&&(l="m-"+(l?p+" "+l:p))}if(!s||u!=l){while(co;--s){if(s<=a.first)return a.first;var l=ee(a,s-1),c=l.stateAfter;if(c&&(!i||s+(c instanceof be?c.lookAhead:0)<=a.modeFrontier))return s;var u=H(l.text,null,t.options.tabSize);(null==r||n>u)&&(r=s-1,n=u)}return r}function Pe(t,e){if(t.modeFrontier=Math.min(t.modeFrontier,e),!(t.highlightFrontieri;n--){var r=ee(t,n).stateAfter;if(r&&(!(r instanceof be)||n+r.lookAhead=e:a.to>e);(n||(n=[])).push(new Ne(o,a.from,l?null:a.to))}}return n}function $e(t,e,i){var n;if(t)for(var r=0;r=e:a.to>e);if(s||a.from==e&&"bookmark"==o.type&&(!i||a.marker.insertLeft)){var l=null==a.from||(o.inclusiveLeft?a.from<=e:a.from0&&s)for(var x=0;x0)){var u=[l,1],d=ue(c.from,s.from),h=ue(c.to,s.to);(d<0||!o.inclusiveLeft&&!d)&&u.push({from:c.from,to:s.from}),(h>0||!o.inclusiveRight&&!h)&&u.push({from:s.to,to:c.to}),r.splice.apply(r,u),l+=u.length-3}}return r}function Xe(t){var e=t.markedSpans;if(e){for(var i=0;ie)&&(!i||qe(i,a.marker)<0)&&(i=a.marker)}return i}function ei(t,e,i,n,r){var a=ee(t,e),o=Re&&a.markedSpans;if(o)for(var s=0;s=0&&d<=0||u<=0&&d>=0)&&(u<=0&&(l.marker.inclusiveRight&&r.inclusiveLeft?ue(c.to,i)>=0:ue(c.to,i)>0)||u>=0&&(l.marker.inclusiveRight&&r.inclusiveLeft?ue(c.from,n)<=0:ue(c.from,n)<0)))return!0}}}function ii(t){var e;while(e=Je(t))t=e.find(-1,!0).line;return t}function ni(t){var e;while(e=Qe(t))t=e.find(1,!0).line;return t}function ri(t){var e,i;while(e=Qe(t))t=e.find(1,!0).line,(i||(i=[])).push(t);return i}function ai(t,e){var i=ee(t,e),n=ii(i);return i==n?e:ae(n)}function oi(t,e){if(e>t.lastLine())return e;var i,n=ee(t,e);if(!si(t,n))return e;while(i=Qe(n))n=i.find(1,!0).line;return ae(n)+1}function si(t,e){var i=Re&&e.markedSpans;if(i)for(var n=void 0,r=0;re.maxLineLength&&(e.maxLineLength=i,e.maxLine=t)})}var hi=function(t,e,i){this.text=t,Ue(this,e),this.height=i?i(this):1};function pi(t,e,i,n){t.text=e,t.stateAfter&&(t.stateAfter=null),t.styles&&(t.styles=null),null!=t.order&&(t.order=null),Xe(t),Ue(t,i);var r=n?n(t):1;r!=t.height&&re(t,r)}function fi(t){t.parent=null,Xe(t)}hi.prototype.lineNo=function(){return ae(this)},At(hi);var vi={},gi={};function mi(t,e){if(!t||/^\s*$/.test(t))return null;var i=e.addModeClass?gi:vi;return i[t]||(i[t]=t.replace(/\S+/g,"cm-$&"))}function yi(t,e){var i=D("span",null,null,l?"padding-right: .1px":null),n={pre:D("pre",[i],"CodeMirror-line"),content:i,col:0,pos:0,cm:t,trailingSpace:!1,splitSpaces:t.getOption("lineWrapping")};e.measure={};for(var r=0;r<=(e.rest?e.rest.length:0);r++){var a=r?e.rest[r-1]:e.line,o=void 0;n.pos=0,n.addToken=xi,Nt(t.display.measure)&&(o=mt(a,t.doc.direction))&&(n.addToken=wi(n.addToken,o)),n.map=[];var s=e!=t.display.externalMeasured&&ae(a);Si(a,n,we(t,a,s)),a.styleClasses&&(a.styleClasses.bgClass&&(n.bgClass=F(a.styleClasses.bgClass,n.bgClass||"")),a.styleClasses.textClass&&(n.textClass=F(a.styleClasses.textClass,n.textClass||""))),0==n.map.length&&n.map.push(0,0,n.content.appendChild(Bt(t.display.measure))),0==r?(e.measure.map=n.map,e.measure.cache={}):((e.measure.maps||(e.measure.maps=[])).push(n.map),(e.measure.caches||(e.measure.caches=[])).push({}))}if(l){var c=n.content.lastChild;(/\bcm-tab\b/.test(c.className)||c.querySelector&&c.querySelector(".cm-tab"))&&(n.content.className="cm-tab-wrap-hack")}return wt(t,"renderLine",t,e.line,n.pre),n.pre.className&&(n.textClass=F(n.pre.className,n.textClass||"")),n}function bi(t){var e=E("span","•","cm-invalidchar");return e.title="\\u"+t.charCodeAt(0).toString(16),e.setAttribute("aria-label",e.title),e}function xi(t,e,i,n,r,a,l){if(e){var c,u=t.splitSpaces?_i(e,t.trailingSpace):e,d=t.cm.state.specialChars,h=!1;if(d.test(e)){c=document.createDocumentFragment();var p=0;while(1){d.lastIndex=p;var f=d.exec(e),v=f?f.index-p:e.length-p;if(v){var g=document.createTextNode(u.slice(p,p+v));o&&s<9?c.appendChild(E("span",[g])):c.appendChild(g),t.map.push(t.pos,t.pos+v,g),t.col+=v,t.pos+=v}if(!f)break;p+=v+1;var m=void 0;if("\t"==f[0]){var y=t.cm.options.tabSize,b=y-t.col%y;m=c.appendChild(E("span",Q(b),"cm-tab")),m.setAttribute("role","presentation"),m.setAttribute("cm-text","\t"),t.col+=b}else"\r"==f[0]||"\n"==f[0]?(m=c.appendChild(E("span","\r"==f[0]?"␍":"␤","cm-invalidchar")),m.setAttribute("cm-text",f[0]),t.col+=1):(m=t.cm.options.specialCharPlaceholder(f[0]),m.setAttribute("cm-text",f[0]),o&&s<9?c.appendChild(E("span",[m])):c.appendChild(m),t.col+=1);t.map.push(t.pos,t.pos+1,m),t.pos++}}else t.col+=e.length,c=document.createTextNode(u),t.map.push(t.pos,t.pos+e.length,c),o&&s<9&&(h=!0),t.pos+=e.length;if(t.trailingSpace=32==u.charCodeAt(e.length-1),i||n||r||h||a||l){var x=i||"";n&&(x+=n),r&&(x+=r);var _=E("span",[c],x,a);if(l)for(var w in l)l.hasOwnProperty(w)&&"style"!=w&&"class"!=w&&_.setAttribute(w,l[w]);return t.content.appendChild(_)}t.content.appendChild(c)}}function _i(t,e){if(t.length>1&&!/ /.test(t))return t;for(var i=e,n="",r=0;rc&&d.from<=c)break;if(d.to>=u)return t(i,n,r,a,o,s,l);t(i,n.slice(0,d.to-c),r,a,null,s,l),a=null,n=n.slice(d.to-c),c=d.to}}}function Ci(t,e,i,n){var r=!n&&i.widgetNode;r&&t.map.push(t.pos,t.pos+e,r),!n&&t.cm.display.input.needsContentAttribute&&(r||(r=t.content.appendChild(document.createElement("span"))),r.setAttribute("cm-marker",i.id)),r&&(t.cm.display.input.setUneditable(r),t.content.appendChild(r)),t.pos+=e,t.trailingSpace=!1}function Si(t,e,i){var n=t.markedSpans,r=t.text,a=0;if(n)for(var o,s,l,c,u,d,h,p=r.length,f=0,v=1,g="",m=0;;){if(m==f){l=c=u=s="",h=null,d=null,m=1/0;for(var y=[],b=void 0,x=0;xf||w.collapsed&&_.to==f&&_.from==f)){if(null!=_.to&&_.to!=f&&m>_.to&&(m=_.to,c=""),w.className&&(l+=" "+w.className),w.css&&(s=(s?s+";":"")+w.css),w.startStyle&&_.from==f&&(u+=" "+w.startStyle),w.endStyle&&_.to==m&&(b||(b=[])).push(w.endStyle,_.to),w.title&&((h||(h={})).title=w.title),w.attributes)for(var C in w.attributes)(h||(h={}))[C]=w.attributes[C];w.collapsed&&(!d||qe(d.marker,w)<0)&&(d=_)}else _.from>f&&m>_.from&&(m=_.from)}if(b)for(var S=0;S=p)break;var A=Math.min(p,m);while(1){if(g){var T=f+g.length;if(!d){var M=T>A?g.slice(0,A-f):g;e.addToken(e,M,o?o+l:l,u,f+M.length==m?c:"",s,h)}if(T>=A){g=g.slice(A-f),f=A;break}f=T,u=""}g=r.slice(a,a=i[v++]),o=mi(i[v++],e.cm.options)}}else for(var I=1;I2&&a.push((l.bottom+c.top)/2-i.top)}}a.push(i.bottom-i.top)}}function en(t,e,i){if(t.line==e)return{map:t.measure.map,cache:t.measure.cache};if(t.rest){for(var n=0;ni)return{map:t.measure.maps[r],cache:t.measure.caches[r],before:!0}}}function nn(t,e){e=ii(e);var i=ae(e),n=t.display.externalMeasured=new ki(t.doc,e,i);n.lineN=i;var r=n.built=yi(t,n);return n.text=r.pre,I(t.display.lineMeasure,r.pre),n}function rn(t,e,i,n){return sn(t,on(t,e),i,n)}function an(t,e){if(e>=t.display.viewFrom&&e=i.lineN&&ee)&&(a=l-s,r=a-1,e>=l&&(o="right")),null!=r){if(n=t[c+2],s==l&&i==(n.insertLeft?"left":"right")&&(o=i),"left"==i&&0==r)while(c&&t[c-2]==t[c-3]&&t[c-1].insertLeft)n=t[2+(c-=3)],o="left";if("right"==i&&r==l-s)while(c=0;r--)if((i=t[r]).left!=i.right)break;return i}function hn(t,e,i,n){var r,a=un(e.map,i,n),l=a.node,c=a.start,u=a.end,d=a.collapse;if(3==l.nodeType){for(var h=0;h<4;h++){while(c&&ut(e.line.text.charAt(a.coverStart+c)))--c;while(a.coverStart+u0&&(d=n="right"),r=t.options.lineWrapping&&(p=l.getClientRects()).length>1?p["right"==n?p.length-1:0]:l.getBoundingClientRect()}if(o&&s<9&&!c&&(!r||!r.left&&!r.right)){var f=l.parentNode.getClientRects()[0];r=f?{left:f.left,right:f.left+Rn(t.display),top:f.top,bottom:f.bottom}:cn}for(var v=r.top-e.rect.top,g=r.bottom-e.rect.top,m=(v+g)/2,y=e.view.measure.heights,b=0;b=n.text.length?(l=n.text.length,c="before"):l<=0&&(l=0,c="after"),!s)return o("before"==c?l-1:l,"before"==c);function u(t,e,i){var n=s[e],r=1==n.level;return o(i?t-1:t,r!=i)}var d=vt(s,l,c),h=ft,p=u(l,d,"before"==c);return null!=h&&(p.other=u(l,h,"before"!=c)),p}function Sn(t,e){var i=0;e=ge(t.doc,e),t.options.lineWrapping||(i=Rn(t.display)*e.ch);var n=ee(t.doc,e.line),r=ci(n)+Gi(t.display);return{left:i,right:i,top:r,bottom:r+n.height}}function kn(t,e,i,n,r){var a=ce(t,e,i);return a.xRel=r,n&&(a.outside=n),a}function An(t,e,i){var n=t.doc;if(i+=t.display.viewOffset,i<0)return kn(n.first,0,null,-1,-1);var r=oe(n,i),a=n.first+n.size-1;if(r>a)return kn(n.first+n.size-1,ee(n,a).text.length,null,1,1);e<0&&(e=0);for(var o=ee(n,r);;){var s=En(t,o,r,e,i),l=ti(o,s.ch+(s.xRel>0||s.outside>0?1:0));if(!l)return s;var c=l.find(1);if(c.line==r)return c;o=ee(n,r=c.line)}}function Tn(t,e,i,n){n-=bn(e);var r=e.text.length,a=ht(function(e){return sn(t,i,e-1).bottom<=n},r,0);return r=ht(function(e){return sn(t,i,e).top>n},a,r),{begin:a,end:r}}function Mn(t,e,i,n){i||(i=on(t,e));var r=xn(t,e,sn(t,i,n),"line").top;return Tn(t,e,i,r)}function In(t,e,i,n){return!(t.bottom<=i)&&(t.top>i||(n?t.left:t.right)>e)}function En(t,e,i,n,r){r-=ci(e);var a=on(t,e),o=bn(e),s=0,l=e.text.length,c=!0,u=mt(e,t.doc.direction);if(u){var d=(t.options.lineWrapping?Pn:Dn)(t,e,i,a,u,n,r);c=1!=d.level,s=c?d.from:d.to-1,l=c?d.to:d.from-1}var h,p,f=null,v=null,g=ht(function(e){var i=sn(t,a,e);return i.top+=o,i.bottom+=o,!!In(i,n,r,!1)&&(i.top<=r&&i.left<=n&&(f=e,v=i),!0)},s,l),m=!1;if(v){var y=n-v.left=x.bottom?1:0}return g=dt(e.text,g,1),kn(i,g,p,m,n-h)}function Dn(t,e,i,n,r,a,o){var s=ht(function(s){var l=r[s],c=1!=l.level;return In(Cn(t,ce(i,c?l.to:l.from,c?"before":"after"),"line",e,n),a,o,!0)},0,r.length-1),l=r[s];if(s>0){var c=1!=l.level,u=Cn(t,ce(i,c?l.from:l.to,c?"after":"before"),"line",e,n);In(u,a,o,!0)&&u.top>o&&(l=r[s-1])}return l}function Pn(t,e,i,n,r,a,o){var s=Tn(t,e,n,o),l=s.begin,c=s.end;/\s/.test(e.text.charAt(c-1))&&c--;for(var u=null,d=null,h=0;h=c||p.to<=l)){var f=1!=p.level,v=sn(t,n,f?Math.min(c,p.to)-1:Math.max(l,p.from)).right,g=vg)&&(u=p,d=g)}}return u||(u=r[r.length-1]),u.fromc&&(u={from:u.from,to:c,level:u.level}),u}function Ln(t){if(null!=t.cachedTextHeight)return t.cachedTextHeight;if(null==ln){ln=E("pre",null,"CodeMirror-line-like");for(var e=0;e<49;++e)ln.appendChild(document.createTextNode("x")),ln.appendChild(E("br"));ln.appendChild(document.createTextNode("x"))}I(t.measure,ln);var i=ln.offsetHeight/50;return i>3&&(t.cachedTextHeight=i),M(t.measure),i||1}function Rn(t){if(null!=t.cachedCharWidth)return t.cachedCharWidth;var e=E("span","xxxxxxxxxx"),i=E("pre",[e],"CodeMirror-line-like");I(t.measure,i);var n=e.getBoundingClientRect(),r=(n.right-n.left)/10;return r>2&&(t.cachedCharWidth=r),r||10}function Fn(t){for(var e=t.display,i={},n={},r=e.gutters.clientLeft,a=e.gutters.firstChild,o=0;a;a=a.nextSibling,++o){var s=t.display.gutterSpecs[o].className;i[s]=a.offsetLeft+a.clientLeft+r,n[s]=a.clientWidth}return{fixedPos:Bn(e),gutterTotalWidth:e.gutters.offsetWidth,gutterLeft:i,gutterWidth:n,wrapperWidth:e.wrapper.clientWidth}}function Bn(t){return t.scroller.getBoundingClientRect().left-t.sizer.getBoundingClientRect().left}function Nn(t){var e=Ln(t.display),i=t.options.lineWrapping,n=i&&Math.max(5,t.display.scroller.clientWidth/Rn(t.display)-3);return function(r){if(si(t.doc,r))return 0;var a=0;if(r.widgets)for(var o=0;o0&&(l=ee(t.doc,c.line).text).length==c.ch){var u=H(l,l.length,t.options.tabSize)-l.length;c=ce(c.line,Math.max(0,Math.round((a-qi(t.display).left)/Rn(t.display))-u))}return c}function Wn(t,e){if(e>=t.display.viewTo)return null;if(e-=t.display.viewFrom,e<0)return null;for(var i=t.display.view,n=0;ne)&&(r.updateLineNumbers=e),t.curOp.viewChanged=!0,e>=r.viewTo)Re&&ai(t.doc,e)r.viewFrom?Hn(t):(r.viewFrom+=n,r.viewTo+=n);else if(e<=r.viewFrom&&i>=r.viewTo)Hn(t);else if(e<=r.viewFrom){var a=Kn(t,i,i+n,1);a?(r.view=r.view.slice(a.index),r.viewFrom=a.lineN,r.viewTo+=n):Hn(t)}else if(i>=r.viewTo){var o=Kn(t,e,e,-1);o?(r.view=r.view.slice(0,o.index),r.viewTo=o.lineN):Hn(t)}else{var s=Kn(t,e,e,-1),l=Kn(t,i,i+n,1);s&&l?(r.view=r.view.slice(0,s.index).concat(Ai(t,s.lineN,l.lineN)).concat(r.view.slice(l.index)),r.viewTo+=n):Hn(t)}var c=r.externalMeasured;c&&(i=r.lineN&&e=n.viewTo)){var a=n.view[Wn(t,e)];if(null!=a.node){var o=a.changes||(a.changes=[]);-1==Y(o,i)&&o.push(i)}}}function Hn(t){t.display.viewFrom=t.display.viewTo=t.doc.first,t.display.view=[],t.display.viewOffset=0}function Kn(t,e,i,n){var r,a=Wn(t,e),o=t.display.view;if(!Re||i==t.doc.first+t.doc.size)return{index:a,lineN:i};for(var s=t.display.viewFrom,l=0;l0){if(a==o.length-1)return null;r=s+o[a].size-e,a++}else r=s-e;e+=r,i+=r}while(ai(t.doc,i)!=i){if(a==(n<0?0:o.length-1))return null;i+=n*o[a-(n<0?1:0)].size,a+=n}return{index:a,lineN:i}}function Yn(t,e,i){var n=t.display,r=n.view;0==r.length||e>=n.viewTo||i<=n.viewFrom?(n.view=Ai(t,e,i),n.viewFrom=e):(n.viewFrom>e?n.view=Ai(t,e,n.viewFrom).concat(n.view):n.viewFromi&&(n.view=n.view.slice(0,Wn(t,i)))),n.viewTo=i}function Xn(t){for(var e=t.display.view,i=0,n=0;n=t.display.viewTo||l.to().line0?o:t.defaultCharWidth())+"px"}if(n.other){var s=i.appendChild(E("div"," ","CodeMirror-cursor CodeMirror-secondarycursor"));s.style.display="",s.style.left=n.other.left+"px",s.style.top=n.other.top+"px",s.style.height=.85*(n.other.bottom-n.other.top)+"px"}}function qn(t,e){return t.top-e.top||t.left-e.left}function Zn(t,e,i){var n=t.display,r=t.doc,a=document.createDocumentFragment(),o=qi(t.display),s=o.left,l=Math.max(n.sizerWidth,Ji(t)-n.sizer.offsetLeft)-o.right,c="ltr"==r.direction;function u(t,e,i,n){e<0&&(e=0),e=Math.round(e),n=Math.round(n),a.appendChild(E("div",null,"CodeMirror-selected","position: absolute; left: "+t+"px;\n top: "+e+"px; width: "+(null==i?l-t:i)+"px;\n height: "+(n-e)+"px"))}function d(e,i,n){var a,o,d=ee(r,e),h=d.text.length;function p(i,n){return wn(t,ce(e,i),"div",d,n)}function f(e,i,n){var r=Mn(t,d,null,e),a="ltr"==i==("after"==n)?"left":"right",o="after"==n?r.begin:r.end-(/\s/.test(d.text.charAt(r.end-1))?2:1);return p(o,a)[a]}var v=mt(d,r.direction);return pt(v,i||0,null==n?h:n,function(t,e,r,d){var g="ltr"==r,m=p(t,g?"left":"right"),y=p(e-1,g?"right":"left"),b=null==i&&0==t,x=null==n&&e==h,_=0==d,w=!v||d==v.length-1;if(y.top-m.top<=3){var C=(c?b:x)&&_,S=(c?x:b)&&w,k=C?s:(g?m:y).left,A=S?l:(g?y:m).right;u(k,m.top,A-k,m.bottom)}else{var T,M,I,E;g?(T=c&&b&&_?s:m.left,M=c?l:f(t,r,"before"),I=c?s:f(e,r,"after"),E=c&&x&&w?l:y.right):(T=c?f(t,r,"before"):s,M=!c&&b&&_?l:m.right,I=!c&&x&&w?s:y.left,E=c?f(e,r,"after"):l),u(T,m.top,M-T,m.bottom),m.bottom0?e.blinker=setInterval(function(){t.hasFocus()||ir(t),e.cursorDiv.style.visibility=(i=!i)?"":"hidden"},t.options.cursorBlinkRate):t.options.cursorBlinkRate<0&&(e.cursorDiv.style.visibility="hidden")}}function Qn(t){t.hasFocus()||(t.display.input.focus(),t.state.focused||er(t))}function tr(t){t.state.delayingBlurEvent=!0,setTimeout(function(){t.state.delayingBlurEvent&&(t.state.delayingBlurEvent=!1,t.state.focused&&ir(t))},100)}function er(t,e){t.state.delayingBlurEvent&&!t.state.draggingText&&(t.state.delayingBlurEvent=!1),"nocursor"!=t.options.readOnly&&(t.state.focused||(wt(t,"focus",t,e),t.state.focused=!0,R(t.display.wrapper,"CodeMirror-focused"),t.curOp||t.display.selForContextMenu==t.doc.sel||(t.display.input.reset(),l&&setTimeout(function(){return t.display.input.reset(!0)},20)),t.display.input.receivedFocus()),Jn(t))}function ir(t,e){t.state.delayingBlurEvent||(t.state.focused&&(wt(t,"blur",t,e),t.state.focused=!1,T(t.display.wrapper,"CodeMirror-focused")),clearInterval(t.display.blinker),setTimeout(function(){t.state.focused||(t.display.shift=!1)},150))}function nr(t){for(var e=t.display,i=e.lineDiv.offsetTop,n=Math.max(0,e.scroller.getBoundingClientRect().top),r=e.lineDiv.getBoundingClientRect().top,a=0,l=0;l.005||v<-.005)&&(rt.display.sizerWidth){var m=Math.ceil(h/Rn(t.display));m>t.display.maxLineLength&&(t.display.maxLineLength=m,t.display.maxLine=c.line,t.display.maxLineChanged=!0)}}}Math.abs(a)>2&&(e.scroller.scrollTop+=a)}function rr(t){if(t.widgets)for(var e=0;e=o&&(a=oe(e,ci(ee(e,l))-t.wrapper.clientHeight),o=l)}return{from:a,to:Math.max(o,a+1)}}function or(t,e){if(!Ct(t,"scrollCursorIntoView")){var i=t.display,n=i.sizer.getBoundingClientRect(),r=null,a=i.wrapper.ownerDocument;if(e.top+n.top<0?r=!0:e.bottom+n.top>(a.defaultView.innerHeight||a.documentElement.clientHeight)&&(r=!1),null!=r&&!v){var o=E("div","​",null,"position: absolute;\n top: "+(e.top-i.viewOffset-Gi(t.display))+"px;\n height: "+(e.bottom-e.top+Zi(t)+i.barHeight)+"px;\n left: "+e.left+"px; width: "+Math.max(2,e.right-e.left)+"px;");t.display.lineSpace.appendChild(o),o.scrollIntoView(r),t.display.lineSpace.removeChild(o)}}}function sr(t,e,i,n){var r;null==n&&(n=0),t.options.lineWrapping||e!=i||(i="before"==e.sticky?ce(e.line,e.ch+1,"before"):e,e=e.ch?ce(e.line,"before"==e.sticky?e.ch-1:e.ch,"after"):e);for(var a=0;a<5;a++){var o=!1,s=Cn(t,e),l=i&&i!=e?Cn(t,i):s;r={left:Math.min(s.left,l.left),top:Math.min(s.top,l.top)-n,right:Math.max(s.left,l.left),bottom:Math.max(s.bottom,l.bottom)+n};var c=cr(t,r),u=t.doc.scrollTop,d=t.doc.scrollLeft;if(null!=c.scrollTop&&(gr(t,c.scrollTop),Math.abs(t.doc.scrollTop-u)>1&&(o=!0)),null!=c.scrollLeft&&(yr(t,c.scrollLeft),Math.abs(t.doc.scrollLeft-d)>1&&(o=!0)),!o)break}return r}function lr(t,e){var i=cr(t,e);null!=i.scrollTop&&gr(t,i.scrollTop),null!=i.scrollLeft&&yr(t,i.scrollLeft)}function cr(t,e){var i=t.display,n=Ln(t.display);e.top<0&&(e.top=0);var r=t.curOp&&null!=t.curOp.scrollTop?t.curOp.scrollTop:i.scroller.scrollTop,a=Qi(t),o={};e.bottom-e.top>a&&(e.bottom=e.top+a);var s=t.doc.height+ji(i),l=e.tops-n;if(e.topr+a){var u=Math.min(e.top,(c?s:e.bottom)-a);u!=r&&(o.scrollTop=u)}var d=t.options.fixedGutter?0:i.gutters.offsetWidth,h=t.curOp&&null!=t.curOp.scrollLeft?t.curOp.scrollLeft:i.scroller.scrollLeft-d,p=Ji(t)-i.gutters.offsetWidth,f=e.right-e.left>p;return f&&(e.right=e.left+p),e.left<10?o.scrollLeft=0:e.leftp+h-3&&(o.scrollLeft=e.right+(f?0:10)-p),o}function ur(t,e){null!=e&&(fr(t),t.curOp.scrollTop=(null==t.curOp.scrollTop?t.doc.scrollTop:t.curOp.scrollTop)+e)}function dr(t){fr(t);var e=t.getCursor();t.curOp.scrollToPos={from:e,to:e,margin:t.options.cursorScrollMargin}}function hr(t,e,i){null==e&&null==i||fr(t),null!=e&&(t.curOp.scrollLeft=e),null!=i&&(t.curOp.scrollTop=i)}function pr(t,e){fr(t),t.curOp.scrollToPos=e}function fr(t){var e=t.curOp.scrollToPos;if(e){t.curOp.scrollToPos=null;var i=Sn(t,e.from),n=Sn(t,e.to);vr(t,i,n,e.margin)}}function vr(t,e,i,n){var r=cr(t,{left:Math.min(e.left,i.left),top:Math.min(e.top,i.top)-n,right:Math.max(e.right,i.right),bottom:Math.max(e.bottom,i.bottom)+n});hr(t,r.scrollLeft,r.scrollTop)}function gr(t,e){Math.abs(t.doc.scrollTop-e)<2||(i||Ur(t,{top:e}),mr(t,e,!0),i&&Ur(t),zr(t,100))}function mr(t,e,i){e=Math.max(0,Math.min(t.display.scroller.scrollHeight-t.display.scroller.clientHeight,e)),(t.display.scroller.scrollTop!=e||i)&&(t.doc.scrollTop=e,t.display.scrollbars.setScrollTop(e),t.display.scroller.scrollTop!=e&&(t.display.scroller.scrollTop=e))}function yr(t,e,i,n){e=Math.max(0,Math.min(e,t.display.scroller.scrollWidth-t.display.scroller.clientWidth)),(i?e==t.doc.scrollLeft:Math.abs(t.doc.scrollLeft-e)<2)&&!n||(t.doc.scrollLeft=e,Zr(t),t.display.scroller.scrollLeft!=e&&(t.display.scroller.scrollLeft=e),t.display.scrollbars.setScrollLeft(e))}function br(t){var e=t.display,i=e.gutters.offsetWidth,n=Math.round(t.doc.height+ji(t.display));return{clientHeight:e.scroller.clientHeight,viewHeight:e.wrapper.clientHeight,scrollWidth:e.scroller.scrollWidth,clientWidth:e.scroller.clientWidth,viewWidth:e.wrapper.clientWidth,barLeft:t.options.fixedGutter?i:0,docHeight:n,scrollHeight:n+Zi(t)+e.barHeight,nativeBarWidth:e.nativeBarWidth,gutterWidth:i}}var xr=function(t,e,i){this.cm=i;var n=this.vert=E("div",[E("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),r=this.horiz=E("div",[E("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");n.tabIndex=r.tabIndex=-1,t(n),t(r),bt(n,"scroll",function(){n.clientHeight&&e(n.scrollTop,"vertical")}),bt(r,"scroll",function(){r.clientWidth&&e(r.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,o&&s<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};xr.prototype.update=function(t){var e=t.scrollWidth>t.clientWidth+1,i=t.scrollHeight>t.clientHeight+1,n=t.nativeBarWidth;if(i){this.vert.style.display="block",this.vert.style.bottom=e?n+"px":"0";var r=t.viewHeight-(e?n:0);this.vert.firstChild.style.height=Math.max(0,t.scrollHeight-t.clientHeight+r)+"px"}else this.vert.scrollTop=0,this.vert.style.display="",this.vert.firstChild.style.height="0";if(e){this.horiz.style.display="block",this.horiz.style.right=i?n+"px":"0",this.horiz.style.left=t.barLeft+"px";var a=t.viewWidth-t.barLeft-(i?n:0);this.horiz.firstChild.style.width=Math.max(0,t.scrollWidth-t.clientWidth+a)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&t.clientHeight>0&&(0==n&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:i?n:0,bottom:e?n:0}},xr.prototype.setScrollLeft=function(t){this.horiz.scrollLeft!=t&&(this.horiz.scrollLeft=t),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},xr.prototype.setScrollTop=function(t){this.vert.scrollTop!=t&&(this.vert.scrollTop=t),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},xr.prototype.zeroWidthHack=function(){var t=b&&!f?"12px":"18px";this.horiz.style.height=this.vert.style.width=t,this.horiz.style.visibility=this.vert.style.visibility="hidden",this.disableHoriz=new K,this.disableVert=new K},xr.prototype.enableZeroWidthBar=function(t,e,i){function n(){var r=t.getBoundingClientRect(),a="vert"==i?document.elementFromPoint(r.right-1,(r.top+r.bottom)/2):document.elementFromPoint((r.right+r.left)/2,r.bottom-1);a!=t?t.style.visibility="hidden":e.set(1e3,n)}t.style.visibility="",e.set(1e3,n)},xr.prototype.clear=function(){var t=this.horiz.parentNode;t.removeChild(this.horiz),t.removeChild(this.vert)};var _r=function(){};function wr(t,e){e||(e=br(t));var i=t.display.barWidth,n=t.display.barHeight;Cr(t,e);for(var r=0;r<4&&i!=t.display.barWidth||n!=t.display.barHeight;r++)i!=t.display.barWidth&&t.options.lineWrapping&&nr(t),Cr(t,br(t)),i=t.display.barWidth,n=t.display.barHeight}function Cr(t,e){var i=t.display,n=i.scrollbars.update(e);i.sizer.style.paddingRight=(i.barWidth=n.right)+"px",i.sizer.style.paddingBottom=(i.barHeight=n.bottom)+"px",i.heightForcer.style.borderBottom=n.bottom+"px solid transparent",n.right&&n.bottom?(i.scrollbarFiller.style.display="block",i.scrollbarFiller.style.height=n.bottom+"px",i.scrollbarFiller.style.width=n.right+"px"):i.scrollbarFiller.style.display="",n.bottom&&t.options.coverGutterNextToScrollbar&&t.options.fixedGutter?(i.gutterFiller.style.display="block",i.gutterFiller.style.height=n.bottom+"px",i.gutterFiller.style.width=e.gutterWidth+"px"):i.gutterFiller.style.display=""}_r.prototype.update=function(){return{bottom:0,right:0}},_r.prototype.setScrollLeft=function(){},_r.prototype.setScrollTop=function(){},_r.prototype.clear=function(){};var Sr={native:xr,null:_r};function kr(t){t.display.scrollbars&&(t.display.scrollbars.clear(),t.display.scrollbars.addClass&&T(t.display.wrapper,t.display.scrollbars.addClass)),t.display.scrollbars=new Sr[t.options.scrollbarStyle](function(e){t.display.wrapper.insertBefore(e,t.display.scrollbarFiller),bt(e,"mousedown",function(){t.state.focused&&setTimeout(function(){return t.display.input.focus()},0)}),e.setAttribute("cm-not-content","true")},function(e,i){"horizontal"==i?yr(t,e):gr(t,e)},t),t.display.scrollbars.addClass&&R(t.display.wrapper,t.display.scrollbars.addClass)}var Ar=0;function Tr(t){t.curOp={cm:t,viewChanged:!1,startHeight:t.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Ar,markArrays:null},Mi(t.curOp)}function Mr(t){var e=t.curOp;e&&Ei(e,function(t){for(var e=0;e=i.viewTo)||i.maxLineChanged&&e.options.lineWrapping,t.update=t.mustUpdate&&new Vr(e,t.mustUpdate&&{top:t.scrollTop,ensure:t.scrollToPos},t.forceUpdate)}function Dr(t){t.updatedDisplay=t.mustUpdate&&Yr(t.cm,t.update)}function Pr(t){var e=t.cm,i=e.display;t.updatedDisplay&&nr(e),t.barMeasure=br(e),i.maxLineChanged&&!e.options.lineWrapping&&(t.adjustWidthTo=rn(e,i.maxLine,i.maxLine.text.length).left+3,e.display.sizerWidth=t.adjustWidthTo,t.barMeasure.scrollWidth=Math.max(i.scroller.clientWidth,i.sizer.offsetLeft+t.adjustWidthTo+Zi(e)+e.display.barWidth),t.maxScrollLeft=Math.max(0,i.sizer.offsetLeft+t.adjustWidthTo-Ji(e))),(t.updatedDisplay||t.selectionChanged)&&(t.preparedSelection=i.input.prepareSelection())}function Lr(t){var e=t.cm;null!=t.adjustWidthTo&&(e.display.sizer.style.minWidth=t.adjustWidthTo+"px",t.maxScrollLeft=t.display.viewTo)){var i=+new Date+t.options.workTime,n=Ce(t,e.highlightFrontier),r=[];e.iter(n.line,Math.min(e.first+e.size,t.display.viewTo+500),function(a){if(n.line>=t.display.viewFrom){var o=a.styles,s=a.text.length>t.options.maxHighlightLength?Zt(e.mode,n.state):null,l=_e(t,a,n,!0);s&&(n.state=s),a.styles=l.styles;var c=a.styleClasses,u=l.classes;u?a.styleClasses=u:c&&(a.styleClasses=null);for(var d=!o||o.length!=a.styles.length||c!=u&&(!c||!u||c.bgClass!=u.bgClass||c.textClass!=u.textClass),h=0;!d&&hi)return zr(t,t.options.workDelay),!0}),e.highlightFrontier=n.line,e.modeFrontier=Math.max(e.modeFrontier,n.line),r.length&&Fr(t,function(){for(var e=0;e=i.viewFrom&&e.visible.to<=i.viewTo&&(null==i.updateLineNumbers||i.updateLineNumbers>=i.viewTo)&&i.renderedView==i.view&&0==Xn(t))return!1;Jr(t)&&(Hn(t),e.dims=Fn(t));var r=n.first+n.size,a=Math.max(e.visible.from-t.options.viewportMargin,n.first),o=Math.min(r,e.visible.to+t.options.viewportMargin);i.viewFromo&&i.viewTo-o<20&&(o=Math.min(r,i.viewTo)),Re&&(a=ai(t.doc,a),o=oi(t.doc,o));var s=a!=i.viewFrom||o!=i.viewTo||i.lastWrapHeight!=e.wrapperHeight||i.lastWrapWidth!=e.wrapperWidth;Yn(t,a,o),i.viewOffset=ci(ee(t.doc,i.viewFrom)),t.display.mover.style.top=i.viewOffset+"px";var l=Xn(t);if(!s&&0==l&&!e.force&&i.renderedView==i.view&&(null==i.updateLineNumbers||i.updateLineNumbers>=i.viewTo))return!1;var c=Hr(t);return l>4&&(i.lineDiv.style.display="none"),Gr(t,i.updateLineNumbers,e.dims),l>4&&(i.lineDiv.style.display=""),i.renderedView=i.view,Kr(c),M(i.cursorDiv),M(i.selectionDiv),i.gutters.style.height=i.sizer.style.minHeight=0,s&&(i.lastWrapHeight=e.wrapperHeight,i.lastWrapWidth=e.wrapperWidth,zr(t,400)),i.updateLineNumbers=null,!0}function Xr(t,e){for(var i=e.viewport,n=!0;;n=!1){if(n&&t.options.lineWrapping&&e.oldDisplayWidth!=Ji(t))n&&(e.visible=ar(t.display,t.doc,i));else if(i&&null!=i.top&&(i={top:Math.min(t.doc.height+ji(t.display)-Qi(t),i.top)}),e.visible=ar(t.display,t.doc,i),e.visible.from>=t.display.viewFrom&&e.visible.to<=t.display.viewTo)break;if(!Yr(t,e))break;nr(t);var r=br(t);Un(t),wr(t,r),qr(t,r),e.force=!1}e.signal(t,"update",t),t.display.viewFrom==t.display.reportedViewFrom&&t.display.viewTo==t.display.reportedViewTo||(e.signal(t,"viewportChange",t,t.display.viewFrom,t.display.viewTo),t.display.reportedViewFrom=t.display.viewFrom,t.display.reportedViewTo=t.display.viewTo)}function Ur(t,e){var i=new Vr(t,e);if(Yr(t,i)){nr(t),Xr(t,i);var n=br(t);Un(t),wr(t,n),qr(t,n),i.finish()}}function Gr(t,e,i){var n=t.display,r=t.options.lineNumbers,a=n.lineDiv,o=a.firstChild;function s(e){var i=e.nextSibling;return l&&b&&t.display.currentWheelTarget==e?e.style.display="none":e.parentNode.removeChild(e),i}for(var c=n.view,u=n.viewFrom,d=0;d-1&&(p=!1),Ri(t,h,u,i)),p&&(M(h.lineNumber),h.lineNumber.appendChild(document.createTextNode(le(t.options,u)))),o=h.node.nextSibling}else{var f=$i(t,h,u,i);a.insertBefore(f,o)}u+=h.size}while(o)o=s(o)}function jr(t){var e=t.gutters.offsetWidth;t.sizer.style.marginLeft=e+"px",Pi(t,"gutterChanged",t)}function qr(t,e){t.display.sizer.style.minHeight=e.docHeight+"px",t.display.heightForcer.style.top=e.docHeight+"px",t.display.gutters.style.height=e.docHeight+t.display.barHeight+Zi(t)+"px"}function Zr(t){var e=t.display,i=e.view;if(e.alignWidgets||e.gutters.firstChild&&t.options.fixedGutter){for(var n=Bn(e)-e.scroller.scrollLeft+t.doc.scrollLeft,r=e.gutters.offsetWidth,a=n+"px",o=0;oc.clientWidth,f=c.scrollHeight>c.clientHeight;if(r&&p||a&&f){if(a&&b&&l)t:for(var v=e.target,g=s.view;v!=c;v=v.parentNode)for(var m=0;m=0&&ue(t,n.to())<=0)return i}return-1};var ca=function(t,e){this.anchor=t,this.head=e};function ua(t,e,i){var n=t&&t.options.selectionsMayTouch,r=e[i];e.sort(function(t,e){return ue(t.from(),e.from())}),i=Y(e,r);for(var a=1;a0:l>=0){var c=fe(s.from(),o.from()),u=pe(s.to(),o.to()),d=s.empty()?o.from()==o.head:s.from()==s.head;a<=i&&--i,e.splice(--a,2,new ca(d?u:c,d?c:u))}}return new la(e,i)}function da(t,e){return new la([new ca(t,e||t)],0)}function ha(t){return t.text?ce(t.from.line+t.text.length-1,tt(t.text).length+(1==t.text.length?t.from.ch:0)):t.to}function pa(t,e){if(ue(t,e.from)<0)return t;if(ue(t,e.to)<=0)return ha(e);var i=t.line+e.text.length-(e.to.line-e.from.line)-1,n=t.ch;return t.line==e.to.line&&(n+=ha(e).ch-e.to.ch),ce(i,n)}function fa(t,e){for(var i=[],n=0;n1&&t.remove(s.line+1,f-1),t.insert(s.line+1,m)}Pi(t,"change",t,e)}function _a(t,e,i){function n(t,r,a){if(t.linked)for(var o=0;o1&&!t.done[t.done.length-2].ranges?(t.done.pop(),tt(t.done)):void 0}function Ia(t,e,i,n){var r=t.history;r.undone.length=0;var a,o,s=+new Date;if((r.lastOp==n||r.lastOrigin==e.origin&&e.origin&&("+"==e.origin.charAt(0)&&r.lastModTime>s-(t.cm?t.cm.options.historyEventDelay:500)||"*"==e.origin.charAt(0)))&&(a=Ma(r,r.lastOp==n)))o=tt(a.changes),0==ue(e.from,e.to)&&0==ue(e.from,o.to)?o.to=ha(e):a.changes.push(Aa(t,e));else{var l=tt(r.done);l&&l.ranges||Pa(t.sel,r.done),a={changes:[Aa(t,e)],generation:r.generation},r.done.push(a);while(r.done.length>r.undoDepth)r.done.shift(),r.done[0].ranges||r.done.shift()}r.done.push(i),r.generation=++r.maxGeneration,r.lastModTime=r.lastSelTime=s,r.lastOp=r.lastSelOp=n,r.lastOrigin=r.lastSelOrigin=e.origin,o||wt(t,"historyAdded")}function Ea(t,e,i,n){var r=e.charAt(0);return"*"==r||"+"==r&&i.ranges.length==n.ranges.length&&i.somethingSelected()==n.somethingSelected()&&new Date-t.history.lastSelTime<=(t.cm?t.cm.options.historyEventDelay:500)}function Da(t,e,i,n){var r=t.history,a=n&&n.origin;i==r.lastSelOp||a&&r.lastSelOrigin==a&&(r.lastModTime==r.lastSelTime&&r.lastOrigin==a||Ea(t,a,tt(r.done),e))?r.done[r.done.length-1]=e:Pa(e,r.done),r.lastSelTime=+new Date,r.lastSelOrigin=a,r.lastSelOp=i,n&&!1!==n.clearRedo&&Ta(r.undone)}function Pa(t,e){var i=tt(e);i&&i.ranges&&i.equals(t)||e.push(t)}function La(t,e,i,n){var r=e["spans_"+t.id],a=0;t.iter(Math.max(t.first,i),Math.min(t.first+t.size,n),function(i){i.markedSpans&&((r||(r=e["spans_"+t.id]={}))[a]=i.markedSpans),++a})}function Ra(t){if(!t)return null;for(var e,i=0;i-1&&(tt(s)[d]=c[d],delete c[d])}}}return n}function Oa(t,e,i,n){if(n){var r=t.anchor;if(i){var a=ue(e,r)<0;a!=ue(i,r)<0?(r=e,e=i):a!=ue(e,i)<0&&(e=i)}return new ca(r,e)}return new ca(i||e,e)}function za(t,e,i,n,r){null==r&&(r=t.cm&&(t.cm.display.shift||t.extend)),Ya(t,new la([Oa(t.sel.primary(),e,i,r)],0),n)}function Wa(t,e,i){for(var n=[],r=t.cm&&(t.cm.display.shift||t.extend),a=0;a=e.ch:s.to>e.ch))){if(r&&(wt(l,"beforeCursorEnter"),l.explicitlyCleared)){if(a.markedSpans){--o;continue}break}if(!l.atomic)continue;if(i){var d=l.find(n<0?1:-1),h=void 0;if((n<0?u:c)&&(d=Ja(t,d,-n,d&&d.line==e.line?a:null)),d&&d.line==e.line&&(h=ue(d,i))&&(n<0?h<0:h>0))return qa(t,d,e,n,r)}var p=l.find(n<0?-1:1);return(n<0?c:u)&&(p=Ja(t,p,n,p.line==e.line?a:null)),p?qa(t,p,e,n,r):null}}return e}function Za(t,e,i,n,r){var a=n||1,o=qa(t,e,i,a,r)||!r&&qa(t,e,i,a,!0)||qa(t,e,i,-a,r)||!r&&qa(t,e,i,-a,!0);return o||(t.cantEdit=!0,ce(t.first,0))}function Ja(t,e,i,n){return i<0&&0==e.ch?e.line>t.first?ge(t,ce(e.line-1)):null:i>0&&e.ch==(n||ee(t,e.line)).text.length?e.line=0;--r)io(t,{from:n[r].from,to:n[r].to,text:r?[""]:e.text,origin:e.origin});else io(t,e)}}function io(t,e){if(1!=e.text.length||""!=e.text[0]||0!=ue(e.from,e.to)){var i=fa(t,e);Ia(t,e,i,t.cm?t.cm.curOp.id:NaN),ao(t,e,i,He(t,e));var n=[];_a(t,function(t,i){i||-1!=Y(n,t.history)||(uo(t.history,e),n.push(t.history)),ao(t,e,null,He(t,e))})}}function no(t,e,i){var n=t.cm&&t.cm.state.suppressEdits;if(!n||i){for(var r,a=t.history,o=t.sel,s="undo"==e?a.done:a.undone,l="undo"==e?a.undone:a.done,c=0;c=0;--p){var f=h(p);if(f)return f.v}}}}function ro(t,e){if(0!=e&&(t.first+=e,t.sel=new la(et(t.sel.ranges,function(t){return new ca(ce(t.anchor.line+e,t.anchor.ch),ce(t.head.line+e,t.head.ch))}),t.sel.primIndex),t.cm)){Vn(t.cm,t.first,t.first-e,e);for(var i=t.cm.display,n=i.viewFrom;nt.lastLine())){if(e.from.linea&&(e={from:e.from,to:ce(a,ee(t,a).text.length),text:[e.text[0]],origin:e.origin}),e.removed=ie(t,e.from,e.to),i||(i=fa(t,e)),t.cm?oo(t.cm,e,n):xa(t,e,n),Xa(t,i,G),t.cantEdit&&Za(t,ce(t.firstLine(),0))&&(t.cantEdit=!1)}}function oo(t,e,i){var n=t.doc,r=t.display,a=e.from,o=e.to,s=!1,l=a.line;t.options.lineWrapping||(l=ae(ii(ee(n,a.line))),n.iter(l,o.line+1,function(t){if(t==r.maxLine)return s=!0,!0})),n.sel.contains(e.from,e.to)>-1&&St(t),xa(n,e,i,Nn(t)),t.options.lineWrapping||(n.iter(l,a.line+e.text.length,function(t){var e=ui(t);e>r.maxLineLength&&(r.maxLine=t,r.maxLineLength=e,r.maxLineChanged=!0,s=!1)}),s&&(t.curOp.updateMaxLine=!0)),Pe(n,a.line),zr(t,400);var c=e.text.length-(o.line-a.line)-1;e.full?Vn(t):a.line!=o.line||1!=e.text.length||ba(t.doc,e)?Vn(t,a.line,o.line+1,c):$n(t,a.line,"text");var u=kt(t,"changes"),d=kt(t,"change");if(d||u){var h={from:a,to:o,text:e.text,removed:e.removed,origin:e.origin};d&&Pi(t,"change",t,h),u&&(t.curOp.changeObjs||(t.curOp.changeObjs=[])).push(h)}t.display.selForContextMenu=null}function so(t,e,i,n,r){var a;n||(n=i),ue(n,i)<0&&(a=[n,i],i=a[0],n=a[1]),"string"==typeof e&&(e=t.splitLines(e)),eo(t,{from:i,to:n,text:e,origin:r})}function lo(t,e,i,n){i1||!(this.children[0]instanceof po))){var s=[];this.collapse(s),this.children=[new po(s)],this.children[0].parent=this}},collapse:function(t){for(var e=0;e50){for(var o=r.lines.length%25+25,s=o;s10);t.parent.maybeSpill()}},iterN:function(t,e,i){for(var n=0;n0||0==o&&!1!==a.clearWhenEmpty)return a;if(a.replacedWith&&(a.collapsed=!0,a.widgetNode=D("span",[a.replacedWith],"CodeMirror-widget"),n.handleMouseEvents||a.widgetNode.setAttribute("cm-ignore-events","true"),n.insertLeft&&(a.widgetNode.insertLeft=!0)),a.collapsed){if(ei(t,e.line,e,i,a)||e.line!=i.line&&ei(t,i.line,e,i,a))throw new Error("Inserting collapsed marker partially overlapping an existing one");Be()}a.addToHistory&&Ia(t,{from:e,to:i,origin:"markText"},t.sel,NaN);var s,l=e.line,c=t.cm;if(t.iter(l,i.line+1,function(n){c&&a.collapsed&&!c.options.lineWrapping&&ii(n)==c.display.maxLine&&(s=!0),a.collapsed&&l!=e.line&&re(n,0),We(n,new Ne(a,l==e.line?e.ch:null,l==i.line?i.ch:null),t.cm&&t.cm.curOp),++l}),a.collapsed&&t.iter(e.line,i.line+1,function(e){si(t,e)&&re(e,0)}),a.clearOnEnter&&bt(a,"beforeCursorEnter",function(){return a.clear()}),a.readOnly&&(Fe(),(t.history.done.length||t.history.undone.length)&&t.clearHistory()),a.collapsed&&(a.id=++yo,a.atomic=!0),c){if(s&&(c.curOp.updateMaxLine=!0),a.collapsed)Vn(c,e.line,i.line+1);else if(a.className||a.startStyle||a.endStyle||a.css||a.attributes||a.title)for(var u=e.line;u<=i.line;u++)$n(c,u,"text");a.atomic&&Ga(c.doc),Pi(c,"markerAdded",c,a)}return a}bo.prototype.clear=function(){if(!this.explicitlyCleared){var t=this.doc.cm,e=t&&!t.curOp;if(e&&Tr(t),kt(this,"clear")){var i=this.find();i&&Pi(this,"clear",i.from,i.to)}for(var n=null,r=null,a=0;at.display.maxLineLength&&(t.display.maxLine=c,t.display.maxLineLength=u,t.display.maxLineChanged=!0)}null!=n&&t&&this.collapsed&&Vn(t,n,r+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,t&&Ga(t.doc)),t&&Pi(t,"markerCleared",t,this,n,r),e&&Mr(t),this.parent&&this.parent.clear()}},bo.prototype.find=function(t,e){var i,n;null==t&&"bookmark"==this.type&&(t=1);for(var r=0;r=0;l--)eo(this,n[l]);s?Ka(this,s):this.cm&&dr(this.cm)}),undo:Or(function(){no(this,"undo")}),redo:Or(function(){no(this,"redo")}),undoSelection:Or(function(){no(this,"undo",!0)}),redoSelection:Or(function(){no(this,"redo",!0)}),setExtending:function(t){this.extend=t},getExtending:function(){return this.extend},historySize:function(){for(var t=this.history,e=0,i=0,n=0;n=t.ch)&&e.push(r.marker.parent||r.marker)}return e},findMarks:function(t,e,i){t=ge(this,t),e=ge(this,e);var n=[],r=t.line;return this.iter(t.line,e.line+1,function(a){var o=a.markedSpans;if(o)for(var s=0;s=l.to||null==l.from&&r!=t.line||null!=l.from&&r==e.line&&l.from>=e.ch||i&&!i(l.marker)||n.push(l.marker.parent||l.marker)}++r}),n},getAllMarks:function(){var t=[];return this.iter(function(e){var i=e.markedSpans;if(i)for(var n=0;nt)return e=t,!0;t-=a,++i}),ge(this,ce(i,e))},indexFromPos:function(t){t=ge(this,t);var e=t.ch;if(t.linee&&(e=t.from),null!=t.to&&t.to-1)return e.state.draggingText(t),void setTimeout(function(){return e.display.input.focus()},20);try{var d=t.dataTransfer.getData("Text");if(d){var h;if(e.state.draggingText&&!e.state.draggingText.copy&&(h=e.listSelections()),Xa(e.doc,da(i,i)),h)for(var p=0;p=0;e--)so(t.doc,"",n[e].from,n[e].to,"+delete");dr(t)})}function Zo(t,e,i){var n=dt(t.text,e+i,i);return n<0||n>t.text.length?null:n}function Jo(t,e,i){var n=Zo(t,e.ch,i);return null==n?null:new ce(e.line,n,i<0?"after":"before")}function Qo(t,e,i,n,r){if(t){"rtl"==e.doc.direction&&(r=-r);var a=mt(i,e.doc.direction);if(a){var o,s=r<0?tt(a):a[0],l=r<0==(1==s.level),c=l?"after":"before";if(s.level>0||"rtl"==e.doc.direction){var u=on(e,i);o=r<0?i.text.length-1:0;var d=sn(e,u,o).top;o=ht(function(t){return sn(e,u,t).top==d},r<0==(1==s.level)?s.from:s.to-1,o),"before"==c&&(o=Zo(i,o,1))}else o=r<0?s.to:s.from;return new ce(n,o,c)}}return new ce(n,r<0?i.text.length:0,r<0?"before":"after")}function ts(t,e,i,n){var r=mt(e,t.doc.direction);if(!r)return Jo(e,i,n);i.ch>=e.text.length?(i.ch=e.text.length,i.sticky="before"):i.ch<=0&&(i.ch=0,i.sticky="after");var a=vt(r,i.ch,i.sticky),o=r[a];if("ltr"==t.doc.direction&&o.level%2==0&&(n>0?o.to>i.ch:o.from=o.from&&h>=u.begin)){var p=d?"before":"after";return new ce(i.line,h,p)}}var f=function(t,e,n){for(var a=function(t,e){return e?new ce(i.line,l(t,1),"before"):new ce(i.line,t,"after")};t>=0&&t0==(1!=o.level),c=s?n.begin:l(n.end,-1);if(o.from<=c&&c0?u.end:l(u.begin,-1);return null==g||n>0&&g==e.text.length||(v=f(n>0?0:r.length-1,n,c(g)),!v)?null:v}$o.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},$o.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},$o.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},$o.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},$o["default"]=b?$o.macDefault:$o.pcDefault;var es={selectAll:Qa,singleSelection:function(t){return t.setSelection(t.getCursor("anchor"),t.getCursor("head"),G)},killLine:function(t){return qo(t,function(e){if(e.empty()){var i=ee(t.doc,e.head.line).text.length;return e.head.ch==i&&e.head.line0)r=new ce(r.line,r.ch+1),t.replaceRange(a.charAt(r.ch-1)+a.charAt(r.ch-2),ce(r.line,r.ch-2),r,"+transpose");else if(r.line>t.doc.first){var o=ee(t.doc,r.line-1).text;o&&(r=new ce(r.line,1),t.replaceRange(a.charAt(0)+t.doc.lineSeparator()+o.charAt(o.length-1),ce(r.line-1,o.length-1),r,"+transpose"))}i.push(new ca(r,r))}t.setSelections(i)})},newlineAndIndent:function(t){return Fr(t,function(){for(var e=t.listSelections(),i=e.length-1;i>=0;i--)t.replaceRange(t.doc.lineSeparator(),e[i].anchor,e[i].head,"+input");e=t.listSelections();for(var n=0;n-1&&(ue((r=s.ranges[r]).from(),e)<0||e.xRel>0)&&(ue(r.to(),e)>0||e.xRel<0)?As(t,n,e,a):Ms(t,n,e,a)}function As(t,e,i,n){var r=t.display,a=!1,c=Br(t,function(e){l&&(r.scroller.draggable=!1),t.state.draggingText=!1,t.state.delayingBlurEvent&&(t.hasFocus()?t.state.delayingBlurEvent=!1:tr(t)),_t(r.wrapper.ownerDocument,"mouseup",c),_t(r.wrapper.ownerDocument,"mousemove",u),_t(r.scroller,"dragstart",d),_t(r.scroller,"drop",c),a||(Tt(e),n.addNew||za(t.doc,i,null,null,n.extend),l&&!p||o&&9==s?setTimeout(function(){r.wrapper.ownerDocument.body.focus({preventScroll:!0}),r.input.focus()},20):r.input.focus())}),u=function(t){a=a||Math.abs(e.clientX-t.clientX)+Math.abs(e.clientY-t.clientY)>=10},d=function(){return a=!0};l&&(r.scroller.draggable=!0),t.state.draggingText=c,c.copy=!n.moveOnDrag,bt(r.wrapper.ownerDocument,"mouseup",c),bt(r.wrapper.ownerDocument,"mousemove",u),bt(r.scroller,"dragstart",d),bt(r.scroller,"drop",c),t.state.delayingBlurEvent=!0,setTimeout(function(){return r.input.focus()},20),r.scroller.dragDrop&&r.scroller.dragDrop()}function Ts(t,e,i){if("char"==i)return new ca(e,e);if("word"==i)return t.findWordAt(e);if("line"==i)return new ca(ce(e.line,0),ge(t.doc,ce(e.line+1,0)));var n=i(t,e);return new ca(n.from,n.to)}function Ms(t,e,i,n){o&&tr(t);var r=t.display,a=t.doc;Tt(e);var s,l,c=a.sel,u=c.ranges;if(n.addNew&&!n.extend?(l=a.sel.contains(i),s=l>-1?u[l]:new ca(i,i)):(s=a.sel.primary(),l=a.sel.primIndex),"rectangle"==n.unit)n.addNew||(s=new ca(i,i)),i=zn(t,e,!0,!0),l=-1;else{var d=Ts(t,i,n.unit);s=n.extend?Oa(s,d.anchor,d.head,n.extend):d}n.addNew?-1==l?(l=u.length,Ya(a,ua(t,u.concat([s]),l),{scroll:!1,origin:"*mouse"})):u.length>1&&u[l].empty()&&"char"==n.unit&&!n.extend?(Ya(a,ua(t,u.slice(0,l).concat(u.slice(l+1)),0),{scroll:!1,origin:"*mouse"}),c=a.sel):Va(a,l,s,j):(l=0,Ya(a,new la([s],0),j),c=a.sel);var h=i;function p(e){if(0!=ue(h,e))if(h=e,"rectangle"==n.unit){for(var r=[],o=t.options.tabSize,u=H(ee(a,i.line).text,i.ch,o),d=H(ee(a,e.line).text,e.ch,o),p=Math.min(u,d),f=Math.max(u,d),v=Math.min(i.line,e.line),g=Math.min(t.lastLine(),Math.max(i.line,e.line));v<=g;v++){var m=ee(a,v).text,y=Z(m,p,o);p==f?r.push(new ca(ce(v,y),ce(v,y))):m.length>y&&r.push(new ca(ce(v,y),ce(v,Z(m,f,o))))}r.length||r.push(new ca(i,i)),Ya(a,ua(t,c.ranges.slice(0,l).concat(r),l),{origin:"*mouse",scroll:!1}),t.scrollIntoView(e)}else{var b,x=s,_=Ts(t,e,n.unit),w=x.anchor;ue(_.anchor,w)>0?(b=_.head,w=fe(x.from(),_.anchor)):(b=_.anchor,w=pe(x.to(),_.head));var C=c.ranges.slice(0);C[l]=Is(t,new ca(ge(a,w),b)),Ya(a,ua(t,C,l),j)}}var f=r.wrapper.getBoundingClientRect(),v=0;function g(e){var i=++v,o=zn(t,e,!0,"rectangle"==n.unit);if(o)if(0!=ue(o,h)){t.curOp.focus=L(O(t)),p(o);var s=ar(r,a);(o.line>=s.to||o.linef.bottom?20:0;l&&setTimeout(Br(t,function(){v==i&&(r.scroller.scrollTop+=l,g(e))}),50)}}function m(e){t.state.selectingText=!1,v=1/0,e&&(Tt(e),r.input.focus()),_t(r.wrapper.ownerDocument,"mousemove",y),_t(r.wrapper.ownerDocument,"mouseup",b),a.history.lastSelOrigin=null}var y=Br(t,function(t){0!==t.buttons&&Pt(t)?g(t):m(t)}),b=Br(t,m);t.state.selectingText=b,bt(r.wrapper.ownerDocument,"mousemove",y),bt(r.wrapper.ownerDocument,"mouseup",b)}function Is(t,e){var i=e.anchor,n=e.head,r=ee(t.doc,i.line);if(0==ue(i,n)&&i.sticky==n.sticky)return e;var a=mt(r);if(!a)return e;var o=vt(a,i.ch,i.sticky),s=a[o];if(s.from!=i.ch&&s.to!=i.ch)return e;var l,c=o+(s.from==i.ch==(1!=s.level)?0:1);if(0==c||c==a.length)return e;if(n.line!=i.line)l=(n.line-i.line)*("ltr"==t.doc.direction?1:-1)>0;else{var u=vt(a,n.ch,n.sticky),d=u-o||(n.ch-i.ch)*(1==s.level?-1:1);l=u==c-1||u==c?d<0:d>0}var h=a[c+(l?-1:0)],p=l==(1==h.level),f=p?h.from:h.to,v=p?"after":"before";return i.ch==f&&i.sticky==v?e:new ca(new ce(i.line,f,v),n)}function Es(t,e,i,n){var r,a;if(e.touches)r=e.touches[0].clientX,a=e.touches[0].clientY;else try{r=e.clientX,a=e.clientY}catch(h){return!1}if(r>=Math.floor(t.display.gutters.getBoundingClientRect().right))return!1;n&&Tt(e);var o=t.display,s=o.lineDiv.getBoundingClientRect();if(a>s.bottom||!kt(t,i))return It(e);a-=s.top-o.viewOffset;for(var l=0;l=r){var u=oe(t.doc,a),d=t.display.gutterSpecs[l];return wt(t,i,t,u,d.className,e),It(e)}}}function Ds(t,e){return Es(t,e,"gutterClick",!0)}function Ps(t,e){Ui(t.display,e)||Ls(t,e)||Ct(t,e,"contextmenu")||S||t.display.input.onContextMenu(e)}function Ls(t,e){return!!kt(t,"gutterContextMenu")&&Es(t,e,"gutterContextMenu",!1)}function Rs(t){t.display.wrapper.className=t.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+t.options.theme.replace(/(^|\s)\s*/g," cm-s-"),gn(t)}xs.prototype.compare=function(t,e,i){return this.time+bs>t&&0==ue(e,this.pos)&&i==this.button};var Fs={toString:function(){return"CodeMirror.Init"}},Bs={},Ns={};function Os(t){var e=t.optionHandlers;function i(i,n,r,a){t.defaults[i]=n,r&&(e[i]=a?function(t,e,i){i!=Fs&&r(t,e,i)}:r)}t.defineOption=i,t.Init=Fs,i("value","",function(t,e){return t.setValue(e)},!0),i("mode",null,function(t,e){t.doc.modeOption=e,ma(t)},!0),i("indentUnit",2,ma,!0),i("indentWithTabs",!1),i("smartIndent",!0),i("tabSize",4,function(t){ya(t),gn(t),Vn(t)},!0),i("lineSeparator",null,function(t,e){if(t.doc.lineSep=e,e){var i=[],n=t.doc.first;t.doc.iter(function(t){for(var r=0;;){var a=t.text.indexOf(e,r);if(-1==a)break;r=a+e.length,i.push(ce(n,a))}n++});for(var r=i.length-1;r>=0;r--)so(t.doc,e,i[r],ce(i[r].line,i[r].ch+e.length))}}),i("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\u202d\u202e\u2066\u2067\u2069\ufeff\ufff9-\ufffc]/g,function(t,e,i){t.state.specialChars=new RegExp(e.source+(e.test("\t")?"":"|\t"),"g"),i!=Fs&&t.refresh()}),i("specialCharPlaceholder",bi,function(t){return t.refresh()},!0),i("electricChars",!0),i("inputStyle",y?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),i("spellcheck",!1,function(t,e){return t.getInputField().spellcheck=e},!0),i("autocorrect",!1,function(t,e){return t.getInputField().autocorrect=e},!0),i("autocapitalize",!1,function(t,e){return t.getInputField().autocapitalize=e},!0),i("rtlMoveVisually",!_),i("wholeLineUpdateBefore",!0),i("theme","default",function(t){Rs(t),ea(t)},!0),i("keyMap","default",function(t,e,i){var n=jo(e),r=i!=Fs&&jo(i);r&&r.detach&&r.detach(t,n),n.attach&&n.attach(t,r||null)}),i("extraKeys",null),i("configureMouse",null),i("lineWrapping",!1,Ws,!0),i("gutters",[],function(t,e){t.display.gutterSpecs=Qr(e,t.options.lineNumbers),ea(t)},!0),i("fixedGutter",!0,function(t,e){t.display.gutters.style.left=e?Bn(t.display)+"px":"0",t.refresh()},!0),i("coverGutterNextToScrollbar",!1,function(t){return wr(t)},!0),i("scrollbarStyle","native",function(t){kr(t),wr(t),t.display.scrollbars.setScrollTop(t.doc.scrollTop),t.display.scrollbars.setScrollLeft(t.doc.scrollLeft)},!0),i("lineNumbers",!1,function(t,e){t.display.gutterSpecs=Qr(t.options.gutters,e),ea(t)},!0),i("firstLineNumber",1,ea,!0),i("lineNumberFormatter",function(t){return t},ea,!0),i("showCursorWhenSelecting",!1,Un,!0),i("resetSelectionOnContextMenu",!0),i("lineWiseCopyCut",!0),i("pasteLinesPerSelection",!0),i("selectionsMayTouch",!1),i("readOnly",!1,function(t,e){"nocursor"==e&&(ir(t),t.display.input.blur()),t.display.input.readOnlyChanged(e)}),i("screenReaderLabel",null,function(t,e){e=""===e?null:e,t.display.input.screenReaderLabelChanged(e)}),i("disableInput",!1,function(t,e){e||t.display.input.reset()},!0),i("dragDrop",!0,zs),i("allowDropFileTypes",null),i("cursorBlinkRate",530),i("cursorScrollMargin",0),i("cursorHeight",1,Un,!0),i("singleCursorHeightPerLine",!0,Un,!0),i("workTime",100),i("workDelay",100),i("flattenSpans",!0,ya,!0),i("addModeClass",!1,ya,!0),i("pollInterval",100),i("undoDepth",200,function(t,e){return t.doc.history.undoDepth=e}),i("historyEventDelay",1250),i("viewportMargin",10,function(t){return t.refresh()},!0),i("maxHighlightLength",1e4,ya,!0),i("moveInputWithCursor",!0,function(t,e){e||t.display.input.resetPosition()}),i("tabindex",null,function(t,e){return t.display.input.getField().tabIndex=e||""}),i("autofocus",null),i("direction","ltr",function(t,e){return t.doc.setDirection(e)},!0),i("phrases",null)}function zs(t,e,i){var n=i&&i!=Fs;if(!e!=!n){var r=t.display.dragFunctions,a=e?bt:_t;a(t.display.scroller,"dragstart",r.start),a(t.display.scroller,"dragenter",r.enter),a(t.display.scroller,"dragover",r.over),a(t.display.scroller,"dragleave",r.leave),a(t.display.scroller,"drop",r.drop)}}function Ws(t){t.options.lineWrapping?(R(t.display.wrapper,"CodeMirror-wrap"),t.display.sizer.style.minWidth="",t.display.sizerWidth=null):(T(t.display.wrapper,"CodeMirror-wrap"),di(t)),On(t),Vn(t),gn(t),setTimeout(function(){return wr(t)},100)}function Vs(t,e){var i=this;if(!(this instanceof Vs))return new Vs(t,e);this.options=e=e?$(e):{},$(Bs,e,!1);var n=e.value;"string"==typeof n?n=new To(n,e.mode,null,e.lineSeparator,e.direction):e.mode&&(n.modeOption=e.mode),this.doc=n;var r=new Vs.inputStyles[e.inputStyle](this),a=this.display=new ia(t,n,r,e);for(var c in a.wrapper.CodeMirror=this,Rs(this),e.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),kr(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new K,keySeq:null,specialChars:null},e.autofocus&&!y&&a.input.focus(),o&&s<11&&setTimeout(function(){return i.display.input.reset(!0)},20),$s(this),Fo(),Tr(this),this.curOp.forceUpdate=!0,wa(this,n),e.autofocus&&!y||this.hasFocus()?setTimeout(function(){i.hasFocus()&&!i.state.focused&&er(i)},20):ir(this),Ns)Ns.hasOwnProperty(c)&&Ns[c](this,e[c],Fs);Jr(this),e.finishInit&&e.finishInit(this);for(var u=0;u400}bt(e.scroller,"touchstart",function(r){if(!Ct(t,r)&&!a(r)&&!Ds(t,r)){e.input.ensurePolled(),clearTimeout(i);var o=+new Date;e.activeTouch={start:o,moved:!1,prev:o-n.end<=300?n:null},1==r.touches.length&&(e.activeTouch.left=r.touches[0].pageX,e.activeTouch.top=r.touches[0].pageY)}}),bt(e.scroller,"touchmove",function(){e.activeTouch&&(e.activeTouch.moved=!0)}),bt(e.scroller,"touchend",function(i){var n=e.activeTouch;if(n&&!Ui(e,i)&&null!=n.left&&!n.moved&&new Date-n.start<300){var a,o=t.coordsChar(e.activeTouch,"page");a=!n.prev||l(n,n.prev)?new ca(o,o):!n.prev.prev||l(n,n.prev.prev)?t.findWordAt(o):new ca(ce(o.line,0),ge(t.doc,ce(o.line+1,0))),t.setSelection(a.anchor,a.head),t.focus(),Tt(i)}r()}),bt(e.scroller,"touchcancel",r),bt(e.scroller,"scroll",function(){e.scroller.clientHeight&&(gr(t,e.scroller.scrollTop),yr(t,e.scroller.scrollLeft,!0),wt(t,"scroll",t))}),bt(e.scroller,"mousewheel",function(e){return sa(t,e)}),bt(e.scroller,"DOMMouseScroll",function(e){return sa(t,e)}),bt(e.wrapper,"scroll",function(){return e.wrapper.scrollTop=e.wrapper.scrollLeft=0}),e.dragFunctions={enter:function(e){Ct(t,e)||Et(e)},over:function(e){Ct(t,e)||(Do(t,e),Et(e))},start:function(e){return Eo(t,e)},drop:Br(t,Io),leave:function(e){Ct(t,e)||Po(t)}};var c=e.input.getField();bt(c,"keyup",function(e){return vs.call(t,e)}),bt(c,"keydown",Br(t,ps)),bt(c,"keypress",Br(t,gs)),bt(c,"focus",function(e){return er(t,e)}),bt(c,"blur",function(e){return ir(t,e)})}Vs.defaults=Bs,Vs.optionHandlers=Ns;var Hs=[];function Ks(t,e,i,n){var r,a=t.doc;null==i&&(i="add"),"smart"==i&&(a.mode.indent?r=Ce(t,e).state:i="prev");var o=t.options.tabSize,s=ee(a,e),l=H(s.text,null,o);s.stateAfter&&(s.stateAfter=null);var c,u=s.text.match(/^\s*/)[0];if(n||/\S/.test(s.text)){if("smart"==i&&(c=a.mode.indent(r,s.text.slice(u.length),s.text),c==U||c>150)){if(!n)return;i="prev"}}else c=0,i="not";"prev"==i?c=e>a.first?H(ee(a,e-1).text,null,o):0:"add"==i?c=l+t.options.indentUnit:"subtract"==i?c=l-t.options.indentUnit:"number"==typeof i&&(c=l+i),c=Math.max(0,c);var d="",h=0;if(t.options.indentWithTabs)for(var p=Math.floor(c/o);p;--p)h+=o,d+="\t";if(ho,l=Ot(e),c=null;if(s&&n.ranges.length>1)if(Ys&&Ys.text.join("\n")==e){if(n.ranges.length%Ys.text.length==0){c=[];for(var u=0;u=0;h--){var p=n.ranges[h],f=p.from(),v=p.to();p.empty()&&(i&&i>0?f=ce(f.line,f.ch-i):t.state.overwrite&&!s?v=ce(v.line,Math.min(ee(a,v.line).text.length,v.ch+tt(l).length)):s&&Ys&&Ys.lineWise&&Ys.text.join("\n")==l.join("\n")&&(f=v=ce(f.line,0)));var g={from:f,to:v,text:c?c[h%c.length]:l,origin:r||(s?"paste":t.state.cutIncoming>o?"cut":"+input")};eo(t.doc,g),Pi(t,"inputRead",t,g)}e&&!s&&js(t,e),dr(t),t.curOp.updateInput<2&&(t.curOp.updateInput=d),t.curOp.typing=!0,t.state.pasteIncoming=t.state.cutIncoming=-1}function Gs(t,e){var i=t.clipboardData&&t.clipboardData.getData("Text");if(i)return t.preventDefault(),e.isReadOnly()||e.options.disableInput||!e.hasFocus()||Fr(e,function(){return Us(e,i,0,null,"paste")}),!0}function js(t,e){if(t.options.electricChars&&t.options.smartIndent)for(var i=t.doc.sel,n=i.ranges.length-1;n>=0;n--){var r=i.ranges[n];if(!(r.head.ch>100||n&&i.ranges[n-1].head.line==r.head.line)){var a=t.getModeAt(r.head),o=!1;if(a.electricChars){for(var s=0;s-1){o=Ks(t,r.head.line,"smart");break}}else a.electricInput&&a.electricInput.test(ee(t.doc,r.head.line).text.slice(0,r.head.ch))&&(o=Ks(t,r.head.line,"smart"));o&&Pi(t,"electricInput",t,r.head.line)}}}function qs(t){for(var e=[],i=[],n=0;ni&&(Ks(this,r.head.line,t,!0),i=r.head.line,n==this.doc.sel.primIndex&&dr(this));else{var a=r.from(),o=r.to(),s=Math.max(i,a.line);i=Math.min(this.lastLine(),o.line-(o.ch?0:1))+1;for(var l=s;l0&&Va(this.doc,n,new ca(a,c[n].to()),G)}}}),getTokenAt:function(t,e){return Me(this,t,e)},getLineTokens:function(t,e){return Me(this,ce(t),e,!0)},getTokenTypeAt:function(t){t=ge(this.doc,t);var e,i=we(this,ee(this.doc,t.line)),n=0,r=(i.length-1)/2,a=t.ch;if(0==a)e=i[2];else for(;;){var o=n+r>>1;if((o?i[2*o-1]:0)>=a)r=o;else{if(!(i[2*o+1]a&&(t=a,r=!0),n=ee(this.doc,t)}else n=t;return xn(this,n,{top:0,left:0},e||"page",i||r).top+(r?this.doc.height-ci(n):0)},defaultTextHeight:function(){return Ln(this.display)},defaultCharWidth:function(){return Rn(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(t,e,i,n,r){var a=this.display;t=Cn(this,ge(this.doc,t));var o=t.bottom,s=t.left;if(e.style.position="absolute",e.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(e),a.sizer.appendChild(e),"over"==n)o=t.top;else if("above"==n||"near"==n){var l=Math.max(a.wrapper.clientHeight,this.doc.height),c=Math.max(a.sizer.clientWidth,a.lineSpace.clientWidth);("above"==n||t.bottom+e.offsetHeight>l)&&t.top>e.offsetHeight?o=t.top-e.offsetHeight:t.bottom+e.offsetHeight<=l&&(o=t.bottom),s+e.offsetWidth>c&&(s=c-e.offsetWidth)}e.style.top=o+"px",e.style.left=e.style.right="","right"==r?(s=a.sizer.clientWidth-e.offsetWidth,e.style.right="0px"):("left"==r?s=0:"middle"==r&&(s=(a.sizer.clientWidth-e.offsetWidth)/2),e.style.left=s+"px"),i&&lr(this,{left:s,top:o,right:s+e.offsetWidth,bottom:o+e.offsetHeight})},triggerOnKeyDown:Nr(ps),triggerOnKeyPress:Nr(gs),triggerOnKeyUp:vs,triggerOnMouseDown:Nr(ws),execCommand:function(t){if(es.hasOwnProperty(t))return es[t].call(null,this)},triggerElectric:Nr(function(t){js(this,t)}),findPosH:function(t,e,i,n){var r=1;e<0&&(r=-1,e=-e);for(var a=ge(this.doc,t),o=0;o0&&s(i.charAt(n-1)))--n;while(r.5||this.options.lineWrapping)&&On(this),wt(this,"refresh",this)}),swapDoc:Nr(function(t){var e=this.doc;return e.cm=null,this.state.selectingText&&this.state.selectingText(),wa(this,t),gn(this),this.display.input.reset(),hr(this,t.scrollLeft,t.scrollTop),this.curOp.forceScroll=!0,Pi(this,"swapDoc",this,e),e}),phrase:function(t){var e=this.options.phrases;return e&&Object.prototype.hasOwnProperty.call(e,t)?e[t]:t},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},At(t),t.registerHelper=function(e,n,r){i.hasOwnProperty(e)||(i[e]=t[e]={_global:[]}),i[e][n]=r},t.registerGlobalHelper=function(e,n,r,a){t.registerHelper(e,n,a),i[e]._global.push({pred:r,val:a})}}function tl(t,e,i,n,r){var a=e,o=i,s=ee(t,e.line),l=r&&"rtl"==t.direction?-i:i;function c(){var i=e.line+l;return!(i=t.first+t.size)&&(e=new ce(i,e.ch,e.sticky),s=ee(t,i))}function u(a){var o;if("codepoint"==n){var u=s.text.charCodeAt(e.ch+(i>0?0:-1));if(isNaN(u))o=null;else{var d=i>0?u>=55296&&u<56320:u>=56320&&u<57343;o=new ce(e.line,Math.max(0,Math.min(s.text.length,e.ch+i*(d?2:1))),-i)}}else o=r?ts(t.cm,s,e,i):Jo(s,e,i);if(null==o){if(a||!c())return!1;e=Qo(r,t.cm,s,e.line,l)}else e=o;return!0}if("char"==n||"codepoint"==n)u();else if("column"==n)u(!0);else if("word"==n||"group"==n)for(var d=null,h="group"==n,p=t.cm&&t.cm.getHelper(e,"wordChars"),f=!0;;f=!1){if(i<0&&!u(!f))break;var v=s.text.charAt(e.ch)||"\n",g=st(v,p)?"w":h&&"\n"==v?"n":!h||/\s/.test(v)?null:"p";if(!h||f||g||(g="s"),d&&d!=g){i<0&&(i=1,u(),e.sticky="after");break}if(g&&(d=g),i>0&&!u(!f))break}var m=Za(t,e,a,o,!0);return de(a,m)&&(m.hitSide=!0),m}function el(t,e,i,n){var r,a,o=t.doc,s=e.left;if("page"==n){var l=Math.min(t.display.wrapper.clientHeight,W(t).innerHeight||o(t).documentElement.clientHeight),c=Math.max(l-.5*Ln(t.display),3);r=(i>0?e.bottom:e.top)+i*c}else"line"==n&&(r=i>0?e.bottom+3:e.top-3);for(;;){if(a=An(t,s,r),!a.outside)break;if(i<0?r<=0:r>=o.height){a.hitSide=!0;break}r+=5*i}return a}var il=function(t){this.cm=t,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new K,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function nl(t,e){var i=an(t,e.line);if(!i||i.hidden)return null;var n=ee(t.doc,e.line),r=en(i,n,e.line),a=mt(n,t.doc.direction),o="left";if(a){var s=vt(a,e.ch);o=s%2?"right":"left"}var l=un(r.map,e.ch,o);return l.offset="right"==l.collapse?l.end:l.start,l}function rl(t){for(var e=t;e;e=e.parentNode)if(/CodeMirror-gutter-wrapper/.test(e.className))return!0;return!1}function al(t,e){return e&&(t.bad=!0),t}function ol(t,e,i,n,r){var a="",o=!1,s=t.doc.lineSeparator(),l=!1;function c(t){return function(e){return e.id==t}}function u(){o&&(a+=s,l&&(a+=s),o=l=!1)}function d(t){t&&(u(),a+=t)}function h(e){if(1==e.nodeType){var i=e.getAttribute("cm-text");if(i)return void d(i);var a,p=e.getAttribute("cm-marker");if(p){var f=t.findMarks(ce(n,0),ce(r+1,0),c(+p));return void(f.length&&(a=f[0].find(0))&&d(ie(t.doc,a.from,a.to).join(s)))}if("false"==e.getAttribute("contenteditable"))return;var v=/^(pre|div|p|li|table|br)$/i.test(e.nodeName);if(!/^br$/i.test(e.nodeName)&&0==e.textContent.length)return;v&&u();for(var g=0;g=e.display.viewTo||a.line=e.display.viewFrom&&nl(e,r)||{node:l[0].measure.map[2],offset:0},u=a.linen.firstLine()&&(o=ce(o.line-1,ee(n.doc,o.line-1).length)),s.ch==ee(n.doc,s.line).text.length&&s.liner.viewTo-1)return!1;o.line==r.viewFrom||0==(t=Wn(n,o.line))?(e=ae(r.view[0].line),i=r.view[0].node):(e=ae(r.view[t].line),i=r.view[t-1].node.nextSibling);var l,c,u=Wn(n,s.line);if(u==r.view.length-1?(l=r.viewTo-1,c=r.lineDiv.lastChild):(l=ae(r.view[u+1].line)-1,c=r.view[u+1].node.previousSibling),!i)return!1;var d=n.doc.splitLines(ol(n,i,c,e,l)),h=ie(n.doc,ce(e,0),ce(l,ee(n.doc,l).text.length));while(d.length>1&&h.length>1)if(tt(d)==tt(h))d.pop(),h.pop(),l--;else{if(d[0]!=h[0])break;d.shift(),h.shift(),e++}var p=0,f=0,v=d[0],g=h[0],m=Math.min(v.length,g.length);while(po.ch&&y.charCodeAt(y.length-f-1)==b.charCodeAt(b.length-f-1))p--,f++;d[d.length-1]=y.slice(0,y.length-f).replace(/^\u200b+/,""),d[0]=d[0].slice(p).replace(/\u200b+$/,"");var _=ce(e,p),w=ce(l,h.length?tt(h).length-f:0);return d.length>1||d[0]||ue(_,w)?(so(n.doc,d,_,w,"+input"),!0):void 0},il.prototype.ensurePolled=function(){this.forceCompositionEnd()},il.prototype.reset=function(){this.forceCompositionEnd()},il.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},il.prototype.readFromDOMSoon=function(){var t=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(t.readDOMTimeout=null,t.composing){if(!t.composing.done)return;t.composing=null}t.updateFromDOM()},80))},il.prototype.updateFromDOM=function(){var t=this;!this.cm.isReadOnly()&&this.pollContent()||Fr(this.cm,function(){return Vn(t.cm)})},il.prototype.setUneditable=function(t){t.contentEditable="false"},il.prototype.onKeyPress=function(t){0==t.charCode||this.composing||(t.preventDefault(),this.cm.isReadOnly()||Br(this.cm,Us)(this.cm,String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),0))},il.prototype.readOnlyChanged=function(t){this.div.contentEditable=String("nocursor"!=t)},il.prototype.onContextMenu=function(){},il.prototype.resetPosition=function(){},il.prototype.needsContentAttribute=!0;var cl=function(t){this.cm=t,this.prevInput="",this.pollingFast=!1,this.polling=new K,this.hasSelection=!1,this.composing=null,this.resetting=!1};function ul(t,e){if(e=e?$(e):{},e.value=t.value,!e.tabindex&&t.tabIndex&&(e.tabindex=t.tabIndex),!e.placeholder&&t.placeholder&&(e.placeholder=t.placeholder),null==e.autofocus){var i=L(z(t));e.autofocus=i==t||null!=t.getAttribute("autofocus")&&i==document.body}function n(){t.value=s.getValue()}var r;if(t.form&&(bt(t.form,"submit",n),!e.leaveSubmitMethodAlone)){var a=t.form;r=a.submit;try{var o=a.submit=function(){n(),a.submit=r,a.submit(),a.submit=o}}catch(l){}}e.finishInit=function(i){i.save=n,i.getTextArea=function(){return t},i.toTextArea=function(){i.toTextArea=isNaN,n(),t.parentNode.removeChild(i.getWrapperElement()),t.style.display="",t.form&&(_t(t.form,"submit",n),e.leaveSubmitMethodAlone||"function"!=typeof t.form.submit||(t.form.submit=r))}},t.style.display="none";var s=Vs(function(e){return t.parentNode.insertBefore(e,t.nextSibling)},e);return s}function dl(t){t.off=_t,t.on=bt,t.wheelEventPixels=oa,t.Doc=To,t.splitLines=Ot,t.countColumn=H,t.findColumn=Z,t.isWordChar=ot,t.Pass=U,t.signal=wt,t.Line=hi,t.changeEnd=ha,t.scrollbarModel=Sr,t.Pos=ce,t.cmpPos=ue,t.modes=Ht,t.mimeModes=Kt,t.resolveMode=Ut,t.getMode=Gt,t.modeExtensions=jt,t.extendMode=qt,t.copyState=Zt,t.startState=Qt,t.innerMode=Jt,t.commands=es,t.keyMap=$o,t.keyName=Go,t.isModifierKey=Xo,t.lookupKey=Yo,t.normalizeKeyMap=Ko,t.StringStream=te,t.SharedTextMarker=_o,t.TextMarker=bo,t.LineWidget=vo,t.e_preventDefault=Tt,t.e_stopPropagation=Mt,t.e_stop=Et,t.addClass=R,t.contains=P,t.rmClass=T,t.keyNames=Oo}cl.prototype.init=function(t){var e=this,i=this,n=this.cm;this.createField(t);var r=this.textarea;function a(t){if(!Ct(n,t)){if(n.somethingSelected())Xs({lineWise:!1,text:n.getSelections()});else{if(!n.options.lineWiseCopyCut)return;var e=qs(n);Xs({lineWise:!0,text:e.text}),"cut"==t.type?n.setSelections(e.ranges,null,G):(i.prevInput="",r.value=e.text.join("\n"),B(r))}"cut"==t.type&&(n.state.cutIncoming=+new Date)}}t.wrapper.insertBefore(this.wrapper,t.wrapper.firstChild),g&&(r.style.width="0px"),bt(r,"input",function(){o&&s>=9&&e.hasSelection&&(e.hasSelection=null),i.poll()}),bt(r,"paste",function(t){Ct(n,t)||Gs(t,n)||(n.state.pasteIncoming=+new Date,i.fastPoll())}),bt(r,"cut",a),bt(r,"copy",a),bt(t.scroller,"paste",function(e){if(!Ui(t,e)&&!Ct(n,e)){if(!r.dispatchEvent)return n.state.pasteIncoming=+new Date,void i.focus();var a=new Event("paste");a.clipboardData=e.clipboardData,r.dispatchEvent(a)}}),bt(t.lineSpace,"selectstart",function(e){Ui(t,e)||Tt(e)}),bt(r,"compositionstart",function(){var t=n.getCursor("from");i.composing&&i.composing.range.clear(),i.composing={start:t,range:n.markText(t,n.getCursor("to"),{className:"CodeMirror-composing"})}}),bt(r,"compositionend",function(){i.composing&&(i.poll(),i.composing.range.clear(),i.composing=null)})},cl.prototype.createField=function(t){this.wrapper=Js(),this.textarea=this.wrapper.firstChild;var e=this.cm.options;Zs(this.textarea,e.spellcheck,e.autocorrect,e.autocapitalize)},cl.prototype.screenReaderLabelChanged=function(t){t?this.textarea.setAttribute("aria-label",t):this.textarea.removeAttribute("aria-label")},cl.prototype.prepareSelection=function(){var t=this.cm,e=t.display,i=t.doc,n=Gn(t);if(t.options.moveInputWithCursor){var r=Cn(t,i.sel.primary().head,"div"),a=e.wrapper.getBoundingClientRect(),o=e.lineDiv.getBoundingClientRect();n.teTop=Math.max(0,Math.min(e.wrapper.clientHeight-10,r.top+o.top-a.top)),n.teLeft=Math.max(0,Math.min(e.wrapper.clientWidth-10,r.left+o.left-a.left))}return n},cl.prototype.showSelection=function(t){var e=this.cm,i=e.display;I(i.cursorDiv,t.cursors),I(i.selectionDiv,t.selection),null!=t.teTop&&(this.wrapper.style.top=t.teTop+"px",this.wrapper.style.left=t.teLeft+"px")},cl.prototype.reset=function(t){if(!(this.contextMenuPending||this.composing&&t)){var e=this.cm;if(this.resetting=!0,e.somethingSelected()){this.prevInput="";var i=e.getSelection();this.textarea.value=i,e.state.focused&&B(this.textarea),o&&s>=9&&(this.hasSelection=i)}else t||(this.prevInput=this.textarea.value="",o&&s>=9&&(this.hasSelection=null));this.resetting=!1}},cl.prototype.getField=function(){return this.textarea},cl.prototype.supportsTouch=function(){return!1},cl.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!y||L(z(this.textarea))!=this.textarea))try{this.textarea.focus()}catch(t){}},cl.prototype.blur=function(){this.textarea.blur()},cl.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},cl.prototype.receivedFocus=function(){this.slowPoll()},cl.prototype.slowPoll=function(){var t=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){t.poll(),t.cm.state.focused&&t.slowPoll()})},cl.prototype.fastPoll=function(){var t=!1,e=this;function i(){var n=e.poll();n||t?(e.pollingFast=!1,e.slowPoll()):(t=!0,e.polling.set(60,i))}e.pollingFast=!0,e.polling.set(20,i)},cl.prototype.poll=function(){var t=this,e=this.cm,i=this.textarea,n=this.prevInput;if(this.contextMenuPending||this.resetting||!e.state.focused||zt(i)&&!n&&!this.composing||e.isReadOnly()||e.options.disableInput||e.state.keySeq)return!1;var r=i.value;if(r==n&&!e.somethingSelected())return!1;if(o&&s>=9&&this.hasSelection===r||b&&/[\uf700-\uf7ff]/.test(r))return e.display.input.reset(),!1;if(e.doc.sel==e.display.selForContextMenu){var a=r.charCodeAt(0);if(8203!=a||n||(n="​"),8666==a)return this.reset(),this.cm.execCommand("undo")}var l=0,c=Math.min(n.length,r.length);while(l1e3||r.indexOf("\n")>-1?i.value=t.prevInput="":t.prevInput=r,t.composing&&(t.composing.range.clear(),t.composing.range=e.markText(t.composing.start,e.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},cl.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},cl.prototype.onKeyPress=function(){o&&s>=9&&(this.hasSelection=null),this.fastPoll()},cl.prototype.onContextMenu=function(t){var e=this,i=e.cm,n=i.display,r=e.textarea;e.contextMenuPending&&e.contextMenuPending();var a=zn(i,t),c=n.scroller.scrollTop;if(a&&!h){var u=i.options.resetSelectionOnContextMenu;u&&-1==i.doc.sel.contains(a)&&Br(i,Ya)(i.doc,da(a),G);var d,p=r.style.cssText,f=e.wrapper.style.cssText,v=e.wrapper.offsetParent.getBoundingClientRect();if(e.wrapper.style.cssText="position: static",r.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(t.clientY-v.top-5)+"px; left: "+(t.clientX-v.left-5)+"px;\n z-index: 1000; background: "+(o?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",l&&(d=r.ownerDocument.defaultView.scrollY),n.input.focus(),l&&r.ownerDocument.defaultView.scrollTo(null,d),n.input.reset(),i.somethingSelected()||(r.value=e.prevInput=" "),e.contextMenuPending=y,n.selForContextMenu=i.doc.sel,clearTimeout(n.detectingSelectAll),o&&s>=9&&m(),S){Et(t);var g=function(){_t(window,"mouseup",g),setTimeout(y,20)};bt(window,"mouseup",g)}else setTimeout(y,50)}function m(){if(null!=r.selectionStart){var t=i.somethingSelected(),a="​"+(t?r.value:"");r.value="⇚",r.value=a,e.prevInput=t?"":"​",r.selectionStart=1,r.selectionEnd=a.length,n.selForContextMenu=i.doc.sel}}function y(){if(e.contextMenuPending==y&&(e.contextMenuPending=!1,e.wrapper.style.cssText=f,r.style.cssText=p,o&&s<9&&n.scrollbars.setScrollTop(n.scroller.scrollTop=c),null!=r.selectionStart)){(!o||o&&s<9)&&m();var t=0,a=function(){n.selForContextMenu==i.doc.sel&&0==r.selectionStart&&r.selectionEnd>0&&"​"==e.prevInput?Br(i,Qa)(i):t++<10?n.detectingSelectAll=setTimeout(a,500):(n.selForContextMenu=null,n.input.reset())};n.detectingSelectAll=setTimeout(a,200)}}},cl.prototype.readOnlyChanged=function(t){t||this.reset(),this.textarea.disabled="nocursor"==t,this.textarea.readOnly=!!t},cl.prototype.setUneditable=function(){},cl.prototype.needsContentAttribute=!1,Os(Vs),Qs(Vs);var hl="iter insert remove copy getEditor constructor".split(" ");for(var pl in To.prototype)To.prototype.hasOwnProperty(pl)&&Y(hl,pl)<0&&(Vs.prototype[pl]=function(t){return function(){return t.apply(this.doc,arguments)}}(To.prototype[pl]));return At(To),Vs.inputStyles={textarea:cl,contenteditable:il},Vs.defineMode=function(t){Vs.defaults.mode||"null"==t||(Vs.defaults.mode=t),Yt.apply(this,arguments)},Vs.defineMIME=Xt,Vs.defineMode("null",function(){return{token:function(t){return t.skipToEnd()}}}),Vs.defineMIME("text/plain","null"),Vs.defineExtension=function(t,e){Vs.prototype[t]=e},Vs.defineDocExtension=function(t,e){To.prototype[t]=e},Vs.fromTextArea=ul,dl(Vs),Vs.version="5.65.21",Vs})},74806:function(t,e,i){(function(t){t(i(15237))})(function(t){"use strict";function e(t){return new RegExp("^(("+t.join(")|(")+"))\\b")}var i=e(["and","or","not","is"]),n=["as","assert","break","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","lambda","pass","raise","return","try","while","with","yield","in","False","True"],r=["abs","all","any","bin","bool","bytearray","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip","__import__","NotImplemented","Ellipsis","__debug__"];function a(t){return t.scopes[t.scopes.length-1]}t.registerHelper("hintWords","python",n.concat(r).concat(["exec","print"])),t.defineMode("python",function(o,s){for(var l="error",c=s.delimiters||s.singleDelimiters||/^[\(\)\[\]\{\}@,:`=;\.\\]/,u=[s.singleOperators,s.doubleOperators,s.doubleDelimiters,s.tripleDelimiters,s.operators||/^([-+*/%\/&|^]=?|[<>=]+|\/\/=?|\*\*=?|!=|[~!@]|\.\.\.)/],d=0;dn?S(e):r0&&A(t,e)&&(o+=" "+l),o}return _(t,e)}function _(t,e,n){if(t.eatSpace())return null;if(!n&&t.match(/^#.*/))return"comment";if(t.match(/^[0-9\.]/,!1)){var r=!1;if(t.match(/^[\d_]*\.\d+(e[\+\-]?\d+)?/i)&&(r=!0),t.match(/^[\d_]+\.\d*/)&&(r=!0),t.match(/^\.\d+/)&&(r=!0),r)return t.eat(/J/i),"number";var a=!1;if(t.match(/^0x[0-9a-f_]+/i)&&(a=!0),t.match(/^0b[01_]+/i)&&(a=!0),t.match(/^0o[0-7_]+/i)&&(a=!0),t.match(/^[1-9][\d_]*(e[\+\-]?[\d_]+)?/)&&(t.eat(/J/i),a=!0),t.match(/^0(?![\dx])/i)&&(a=!0),a)return t.eat(/L/i),"number"}if(t.match(m)){var o=-1!==t.current().toLowerCase().indexOf("f");return o?(e.tokenize=w(t.current(),e.tokenize),e.tokenize(t,e)):(e.tokenize=C(t.current(),e.tokenize),e.tokenize(t,e))}for(var s=0;s=0)t=t.substr(1);var i=1==t.length,n="string";function r(t){return function(e,i){var n=_(e,i,!0);return"punctuation"==n&&("{"==e.current()?i.tokenize=r(t+1):"}"==e.current()&&(i.tokenize=t>1?r(t-1):a)),n}}function a(a,o){while(!a.eol())if(a.eatWhile(/[^'"\{\}\\]/),a.eat("\\")){if(a.next(),i&&a.eol())return n}else{if(a.match(t))return o.tokenize=e,n;if(a.match("{{"))return n;if(a.match("{",!1))return o.tokenize=r(0),a.current()?n:o.tokenize(a,o);if(a.match("}}"))return n;if(a.match("}"))return l;a.eat(/['"]/)}if(i){if(s.singleLineStringErrors)return l;o.tokenize=e}return n}return a.isString=!0,a}function C(t,e){while("rubf".indexOf(t.charAt(0).toLowerCase())>=0)t=t.substr(1);var i=1==t.length,n="string";function r(r,a){while(!r.eol())if(r.eatWhile(/[^'"\\]/),r.eat("\\")){if(r.next(),i&&r.eol())return n}else{if(r.match(t))return a.tokenize=e,n;r.eat(/['"]/)}if(i){if(s.singleLineStringErrors)return l;a.tokenize=e}return n}return r.isString=!0,r}function S(t){while("py"!=a(t).type)t.scopes.pop();t.scopes.push({offset:a(t).offset+o.indentUnit,type:"py",align:null})}function k(t,e,i){var n=t.match(/^[\s\[\{\(]*(?:#|$)/,!1)?null:t.column()+1;e.scopes.push({offset:e.indent+h,type:i,align:n})}function A(t,e){var i=t.indentation();while(e.scopes.length>1&&a(e).offset>i){if("py"!=a(e).type)return!0;e.scopes.pop()}return a(e).offset!=i}function T(t,e){t.sol()&&(e.beginningOfLine=!0,e.dedent=!1);var i=e.tokenize(t,e),n=t.current();if(e.beginningOfLine&&"@"==n)return t.match(g,!1)?"meta":v?"operator":l;if(/\S/.test(n)&&(e.beginningOfLine=!1),"variable"!=i&&"builtin"!=i||"meta"!=e.lastToken||(i="meta"),"pass"!=n&&"return"!=n||(e.dedent=!0),"lambda"==n&&(e.lambda=!0),":"==n&&!e.lambda&&"py"==a(e).type&&t.match(/^\s*(?:#|$)/,!1)&&S(e),1==n.length&&!/string|comment/.test(i)){var r="[({".indexOf(n);if(-1!=r&&k(t,e,"])}".slice(r,r+1)),r="])}".indexOf(n),-1!=r){if(a(e).type!=n)return l;e.indent=e.scopes.pop().offset-h}}return e.dedent&&t.eol()&&"py"==a(e).type&&e.scopes.length>1&&e.scopes.pop(),i}var M={startState:function(t){return{tokenize:x,scopes:[{offset:t||0,type:"py",align:null}],indent:t||0,lastToken:null,lambda:!1,dedent:0}},token:function(t,e){var i=e.errorToken;i&&(e.errorToken=!1);var n=T(t,e);return n&&"comment"!=n&&(e.lastToken="keyword"==n||"punctuation"==n?t.current():n),"punctuation"==n&&(n=null),t.eol()&&e.lambda&&(e.lambda=!1),i?n+" "+l:n},indent:function(e,i){if(e.tokenize!=x)return e.tokenize.isString?t.Pass:0;var n=a(e),r=n.type==i.charAt(0)||"py"==n.type&&!e.dedent&&/^(else:|elif |except |finally:)/.test(i);return null!=n.align?n.align-(r?1:0):n.offset-(r?h:0)},electricInput:/^\s*([\}\]\)]|else:|elif |except |finally:)$/,closeBrackets:{triples:"'\""},lineComment:"#",fold:"indent"};return M}),t.defineMIME("text/x-python","python");var o=function(t){return t.split(" ")};t.defineMIME("text/x-cython",{name:"python",extra_keywords:o("by cdef cimport cpdef ctypedef enum except extern gil include nogil property public readonly struct union DEF IF ELIF ELSE")})})},40955:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.BlockCipher,r=e.algo,a=[],o=[],s=[],l=[],c=[],u=[],d=[],h=[],p=[],f=[];(function(){for(var t=[],e=0;e<256;e++)t[e]=e<128?e<<1:e<<1^283;var i=0,n=0;for(e=0;e<256;e++){var r=n^n<<1^n<<2^n<<3^n<<4;r=r>>>8^255&r^99,a[i]=r,o[r]=i;var v=t[i],g=t[v],m=t[g],y=257*t[r]^16843008*r;s[i]=y<<24|y>>>8,l[i]=y<<16|y>>>16,c[i]=y<<8|y>>>24,u[i]=y;y=16843009*m^65537*g^257*v^16843008*i;d[r]=y<<24|y>>>8,h[r]=y<<16|y>>>16,p[r]=y<<8|y>>>24,f[r]=y,i?(i=v^t[t[t[m^v]]],n^=t[t[n]]):i=n=1}})();var v=[0,1,2,4,8,16,32,64,128,27,54],g=r.AES=n.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var t=this._keyPriorReset=this._key,e=t.words,i=t.sigBytes/4,n=this._nRounds=i+6,r=4*(n+1),o=this._keySchedule=[],s=0;s6&&s%i==4&&(u=a[u>>>24]<<24|a[u>>>16&255]<<16|a[u>>>8&255]<<8|a[255&u]):(u=u<<8|u>>>24,u=a[u>>>24]<<24|a[u>>>16&255]<<16|a[u>>>8&255]<<8|a[255&u],u^=v[s/i|0]<<24),o[s]=o[s-i]^u);for(var l=this._invKeySchedule=[],c=0;c>>24]]^h[a[u>>>16&255]]^p[a[u>>>8&255]]^f[a[255&u]]}}},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._keySchedule,s,l,c,u,a)},decryptBlock:function(t,e){var i=t[e+1];t[e+1]=t[e+3],t[e+3]=i,this._doCryptBlock(t,e,this._invKeySchedule,d,h,p,f,o);i=t[e+1];t[e+1]=t[e+3],t[e+3]=i},_doCryptBlock:function(t,e,i,n,r,a,o,s){for(var l=this._nRounds,c=t[e]^i[0],u=t[e+1]^i[1],d=t[e+2]^i[2],h=t[e+3]^i[3],p=4,f=1;f>>24]^r[u>>>16&255]^a[d>>>8&255]^o[255&h]^i[p++],g=n[u>>>24]^r[d>>>16&255]^a[h>>>8&255]^o[255&c]^i[p++],m=n[d>>>24]^r[h>>>16&255]^a[c>>>8&255]^o[255&u]^i[p++],y=n[h>>>24]^r[c>>>16&255]^a[u>>>8&255]^o[255&d]^i[p++];c=v,u=g,d=m,h=y}v=(s[c>>>24]<<24|s[u>>>16&255]<<16|s[d>>>8&255]<<8|s[255&h])^i[p++],g=(s[u>>>24]<<24|s[d>>>16&255]<<16|s[h>>>8&255]<<8|s[255&c])^i[p++],m=(s[d>>>24]<<24|s[h>>>16&255]<<16|s[c>>>8&255]<<8|s[255&u])^i[p++],y=(s[h>>>24]<<24|s[c>>>16&255]<<16|s[u>>>8&255]<<8|s[255&d])^i[p++];t[e]=v,t[e+1]=g,t[e+2]=m,t[e+3]=y},keySize:8});e.AES=n._createHelper(g)}(),t.AES})},43128:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.BlockCipher,r=e.algo;const a=16,o=[608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,3041331479,2450970073,2306472731],s=[[3509652390,2564797868,805139163,3491422135,3101798381,1780907670,3128725573,4046225305,614570311,3012652279,134345442,2240740374,1667834072,1901547113,2757295779,4103290238,227898511,1921955416,1904987480,2182433518,2069144605,3260701109,2620446009,720527379,3318853667,677414384,3393288472,3101374703,2390351024,1614419982,1822297739,2954791486,3608508353,3174124327,2024746970,1432378464,3864339955,2857741204,1464375394,1676153920,1439316330,715854006,3033291828,289532110,2706671279,2087905683,3018724369,1668267050,732546397,1947742710,3462151702,2609353502,2950085171,1814351708,2050118529,680887927,999245976,1800124847,3300911131,1713906067,1641548236,4213287313,1216130144,1575780402,4018429277,3917837745,3693486850,3949271944,596196993,3549867205,258830323,2213823033,772490370,2760122372,1774776394,2652871518,566650946,4142492826,1728879713,2882767088,1783734482,3629395816,2517608232,2874225571,1861159788,326777828,3124490320,2130389656,2716951837,967770486,1724537150,2185432712,2364442137,1164943284,2105845187,998989502,3765401048,2244026483,1075463327,1455516326,1322494562,910128902,469688178,1117454909,936433444,3490320968,3675253459,1240580251,122909385,2157517691,634681816,4142456567,3825094682,3061402683,2540495037,79693498,3249098678,1084186820,1583128258,426386531,1761308591,1047286709,322548459,995290223,1845252383,2603652396,3431023940,2942221577,3202600964,3727903485,1712269319,422464435,3234572375,1170764815,3523960633,3117677531,1434042557,442511882,3600875718,1076654713,1738483198,4213154764,2393238008,3677496056,1014306527,4251020053,793779912,2902807211,842905082,4246964064,1395751752,1040244610,2656851899,3396308128,445077038,3742853595,3577915638,679411651,2892444358,2354009459,1767581616,3150600392,3791627101,3102740896,284835224,4246832056,1258075500,768725851,2589189241,3069724005,3532540348,1274779536,3789419226,2764799539,1660621633,3471099624,4011903706,913787905,3497959166,737222580,2514213453,2928710040,3937242737,1804850592,3499020752,2949064160,2386320175,2390070455,2415321851,4061277028,2290661394,2416832540,1336762016,1754252060,3520065937,3014181293,791618072,3188594551,3933548030,2332172193,3852520463,3043980520,413987798,3465142937,3030929376,4245938359,2093235073,3534596313,375366246,2157278981,2479649556,555357303,3870105701,2008414854,3344188149,4221384143,3956125452,2067696032,3594591187,2921233993,2428461,544322398,577241275,1471733935,610547355,4027169054,1432588573,1507829418,2025931657,3646575487,545086370,48609733,2200306550,1653985193,298326376,1316178497,3007786442,2064951626,458293330,2589141269,3591329599,3164325604,727753846,2179363840,146436021,1461446943,4069977195,705550613,3059967265,3887724982,4281599278,3313849956,1404054877,2845806497,146425753,1854211946],[1266315497,3048417604,3681880366,3289982499,290971e4,1235738493,2632868024,2414719590,3970600049,1771706367,1449415276,3266420449,422970021,1963543593,2690192192,3826793022,1062508698,1531092325,1804592342,2583117782,2714934279,4024971509,1294809318,4028980673,1289560198,2221992742,1669523910,35572830,157838143,1052438473,1016535060,1802137761,1753167236,1386275462,3080475397,2857371447,1040679964,2145300060,2390574316,1461121720,2956646967,4031777805,4028374788,33600511,2920084762,1018524850,629373528,3691585981,3515945977,2091462646,2486323059,586499841,988145025,935516892,3367335476,2599673255,2839830854,265290510,3972581182,2759138881,3795373465,1005194799,847297441,406762289,1314163512,1332590856,1866599683,4127851711,750260880,613907577,1450815602,3165620655,3734664991,3650291728,3012275730,3704569646,1427272223,778793252,1343938022,2676280711,2052605720,1946737175,3164576444,3914038668,3967478842,3682934266,1661551462,3294938066,4011595847,840292616,3712170807,616741398,312560963,711312465,1351876610,322626781,1910503582,271666773,2175563734,1594956187,70604529,3617834859,1007753275,1495573769,4069517037,2549218298,2663038764,504708206,2263041392,3941167025,2249088522,1514023603,1998579484,1312622330,694541497,2582060303,2151582166,1382467621,776784248,2618340202,3323268794,2497899128,2784771155,503983604,4076293799,907881277,423175695,432175456,1378068232,4145222326,3954048622,3938656102,3820766613,2793130115,2977904593,26017576,3274890735,3194772133,1700274565,1756076034,4006520079,3677328699,720338349,1533947780,354530856,688349552,3973924725,1637815568,332179504,3949051286,53804574,2852348879,3044236432,1282449977,3583942155,3416972820,4006381244,1617046695,2628476075,3002303598,1686838959,431878346,2686675385,1700445008,1080580658,1009431731,832498133,3223435511,2605976345,2271191193,2516031870,1648197032,4164389018,2548247927,300782431,375919233,238389289,3353747414,2531188641,2019080857,1475708069,455242339,2609103871,448939670,3451063019,1395535956,2413381860,1841049896,1491858159,885456874,4264095073,4001119347,1565136089,3898914787,1108368660,540939232,1173283510,2745871338,3681308437,4207628240,3343053890,4016749493,1699691293,1103962373,3625875870,2256883143,3830138730,1031889488,3479347698,1535977030,4236805024,3251091107,2132092099,1774941330,1199868427,1452454533,157007616,2904115357,342012276,595725824,1480756522,206960106,497939518,591360097,863170706,2375253569,3596610801,1814182875,2094937945,3421402208,1082520231,3463918190,2785509508,435703966,3908032597,1641649973,2842273706,3305899714,1510255612,2148256476,2655287854,3276092548,4258621189,236887753,3681803219,274041037,1734335097,3815195456,3317970021,1899903192,1026095262,4050517792,356393447,2410691914,3873677099,3682840055],[3913112168,2491498743,4132185628,2489919796,1091903735,1979897079,3170134830,3567386728,3557303409,857797738,1136121015,1342202287,507115054,2535736646,337727348,3213592640,1301675037,2528481711,1895095763,1721773893,3216771564,62756741,2142006736,835421444,2531993523,1442658625,3659876326,2882144922,676362277,1392781812,170690266,3921047035,1759253602,3611846912,1745797284,664899054,1329594018,3901205900,3045908486,2062866102,2865634940,3543621612,3464012697,1080764994,553557557,3656615353,3996768171,991055499,499776247,1265440854,648242737,3940784050,980351604,3713745714,1749149687,3396870395,4211799374,3640570775,1161844396,3125318951,1431517754,545492359,4268468663,3499529547,1437099964,2702547544,3433638243,2581715763,2787789398,1060185593,1593081372,2418618748,4260947970,69676912,2159744348,86519011,2512459080,3838209314,1220612927,3339683548,133810670,1090789135,1078426020,1569222167,845107691,3583754449,4072456591,1091646820,628848692,1613405280,3757631651,526609435,236106946,48312990,2942717905,3402727701,1797494240,859738849,992217954,4005476642,2243076622,3870952857,3732016268,765654824,3490871365,2511836413,1685915746,3888969200,1414112111,2273134842,3281911079,4080962846,172450625,2569994100,980381355,4109958455,2819808352,2716589560,2568741196,3681446669,3329971472,1835478071,660984891,3704678404,4045999559,3422617507,3040415634,1762651403,1719377915,3470491036,2693910283,3642056355,3138596744,1364962596,2073328063,1983633131,926494387,3423689081,2150032023,4096667949,1749200295,3328846651,309677260,2016342300,1779581495,3079819751,111262694,1274766160,443224088,298511866,1025883608,3806446537,1145181785,168956806,3641502830,3584813610,1689216846,3666258015,3200248200,1692713982,2646376535,4042768518,1618508792,1610833997,3523052358,4130873264,2001055236,3610705100,2202168115,4028541809,2961195399,1006657119,2006996926,3186142756,1430667929,3210227297,1314452623,4074634658,4101304120,2273951170,1399257539,3367210612,3027628629,1190975929,2062231137,2333990788,2221543033,2438960610,1181637006,548689776,2362791313,3372408396,3104550113,3145860560,296247880,1970579870,3078560182,3769228297,1714227617,3291629107,3898220290,166772364,1251581989,493813264,448347421,195405023,2709975567,677966185,3703036547,1463355134,2715995803,1338867538,1343315457,2802222074,2684532164,233230375,2599980071,2000651841,3277868038,1638401717,4028070440,3237316320,6314154,819756386,300326615,590932579,1405279636,3267499572,3150704214,2428286686,3959192993,3461946742,1862657033,1266418056,963775037,2089974820,2263052895,1917689273,448879540,3550394620,3981727096,150775221,3627908307,1303187396,508620638,2975983352,2726630617,1817252668,1876281319,1457606340,908771278,3720792119,3617206836,2455994898,1729034894,1080033504],[976866871,3556439503,2881648439,1522871579,1555064734,1336096578,3548522304,2579274686,3574697629,3205460757,3593280638,3338716283,3079412587,564236357,2993598910,1781952180,1464380207,3163844217,3332601554,1699332808,1393555694,1183702653,3581086237,1288719814,691649499,2847557200,2895455976,3193889540,2717570544,1781354906,1676643554,2592534050,3230253752,1126444790,2770207658,2633158820,2210423226,2615765581,2414155088,3127139286,673620729,2805611233,1269405062,4015350505,3341807571,4149409754,1057255273,2012875353,2162469141,2276492801,2601117357,993977747,3918593370,2654263191,753973209,36408145,2530585658,25011837,3520020182,2088578344,530523599,2918365339,1524020338,1518925132,3760827505,3759777254,1202760957,3985898139,3906192525,674977740,4174734889,2031300136,2019492241,3983892565,4153806404,3822280332,352677332,2297720250,60907813,90501309,3286998549,1016092578,2535922412,2839152426,457141659,509813237,4120667899,652014361,1966332200,2975202805,55981186,2327461051,676427537,3255491064,2882294119,3433927263,1307055953,942726286,933058658,2468411793,3933900994,4215176142,1361170020,2001714738,2830558078,3274259782,1222529897,1679025792,2729314320,3714953764,1770335741,151462246,3013232138,1682292957,1483529935,471910574,1539241949,458788160,3436315007,1807016891,3718408830,978976581,1043663428,3165965781,1927990952,4200891579,2372276910,3208408903,3533431907,1412390302,2931980059,4132332400,1947078029,3881505623,4168226417,2941484381,1077988104,1320477388,886195818,18198404,3786409e3,2509781533,112762804,3463356488,1866414978,891333506,18488651,661792760,1628790961,3885187036,3141171499,876946877,2693282273,1372485963,791857591,2686433993,3759982718,3167212022,3472953795,2716379847,445679433,3561995674,3504004811,3574258232,54117162,3331405415,2381918588,3769707343,4154350007,1140177722,4074052095,668550556,3214352940,367459370,261225585,2610173221,4209349473,3468074219,3265815641,314222801,3066103646,3808782860,282218597,3406013506,3773591054,379116347,1285071038,846784868,2669647154,3771962079,3550491691,2305946142,453669953,1268987020,3317592352,3279303384,3744833421,2610507566,3859509063,266596637,3847019092,517658769,3462560207,3443424879,370717030,4247526661,2224018117,4143653529,4112773975,2788324899,2477274417,1456262402,2901442914,1517677493,1846949527,2295493580,3734397586,2176403920,1280348187,1908823572,3871786941,846861322,1172426758,3287448474,3383383037,1655181056,3139813346,901632758,1897031941,2986607138,3066810236,3447102507,1393639104,373351379,950779232,625454576,3124240540,4148612726,2007998917,544563296,2244738638,2330496472,2058025392,1291430526,424198748,50039436,29584100,3605783033,2429876329,2791104160,1057563949,3255363231,3075367218,3463963227,1469046755,985887462]];var l={pbox:[],sbox:[]};function c(t,e){let i=e>>24&255,n=e>>16&255,r=e>>8&255,a=255&e,o=t.sbox[0][i]+t.sbox[1][n];return o^=t.sbox[2][r],o+=t.sbox[3][a],o}function u(t,e,i){let n,r=e,o=i;for(let s=0;s1;--s)r^=t.pbox[s],o=c(t,r)^o,n=r,r=o,o=n;return n=r,r=o,o=n,o^=t.pbox[1],r^=t.pbox[0],{left:r,right:o}}function h(t,e,i){for(let a=0;a<4;a++){t.sbox[a]=[];for(let e=0;e<256;e++)t.sbox[a][e]=s[a][e]}let n=0;for(let s=0;s=i&&(n=0);let r=0,l=0,c=0;for(let o=0;o>>2];t.sigBytes-=e}},m=(n.BlockCipher=d.extend({cfg:d.cfg.extend({mode:f,padding:g}),reset:function(){var t;d.reset.call(this);var e=this.cfg,i=e.iv,n=e.mode;this._xformMode==this._ENC_XFORM_MODE?t=n.createEncryptor:(t=n.createDecryptor,this._minBufferSize=1),this._mode&&this._mode.__creator==t?this._mode.init(this,i&&i.words):(this._mode=t.call(n,this,i&&i.words),this._mode.__creator=t)},_doProcessBlock:function(t,e){this._mode.processBlock(t,e)},_doFinalize:function(){var t,e=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(e.pad(this._data,this.blockSize),t=this._process(!0)):(t=this._process(!0),e.unpad(t)),t},blockSize:4}),n.CipherParams=r.extend({init:function(t){this.mixIn(t)},toString:function(t){return(t||this.formatter).stringify(this)}})),y=i.format={},b=y.OpenSSL={stringify:function(t){var e,i=t.ciphertext,n=t.salt;return e=n?a.create([1398893684,1701076831]).concat(n).concat(i):i,e.toString(l)},parse:function(t){var e,i=l.parse(t),n=i.words;return 1398893684==n[0]&&1701076831==n[1]&&(e=a.create(n.slice(2,4)),n.splice(0,4),i.sigBytes-=16),m.create({ciphertext:i,salt:e})}},x=n.SerializableCipher=r.extend({cfg:r.extend({format:b}),encrypt:function(t,e,i,n){n=this.cfg.extend(n);var r=t.createEncryptor(i,n),a=r.finalize(e),o=r.cfg;return m.create({ciphertext:a,key:i,iv:o.iv,algorithm:t,mode:o.mode,padding:o.padding,blockSize:t.blockSize,formatter:n.format})},decrypt:function(t,e,i,n){n=this.cfg.extend(n),e=this._parse(e,n.format);var r=t.createDecryptor(i,n).finalize(e.ciphertext);return r},_parse:function(t,e){return"string"==typeof t?e.parse(t,this):t}}),_=i.kdf={},w=_.OpenSSL={execute:function(t,e,i,n,r){if(n||(n=a.random(8)),r)o=u.create({keySize:e+i,hasher:r}).compute(t,n);else var o=u.create({keySize:e+i}).compute(t,n);var s=a.create(o.words.slice(e),4*i);return o.sigBytes=4*e,m.create({key:o,iv:s,salt:n})}},C=n.PasswordBasedCipher=x.extend({cfg:x.cfg.extend({kdf:w}),encrypt:function(t,e,i,n){n=this.cfg.extend(n);var r=n.kdf.execute(i,t.keySize,t.ivSize,n.salt,n.hasher);n.iv=r.iv;var a=x.encrypt.call(this,t,e,r.key,n);return a.mixIn(r),a},decrypt:function(t,e,i,n){n=this.cfg.extend(n),e=this._parse(e,n.format);var r=n.kdf.execute(i,t.keySize,t.ivSize,e.salt,n.hasher);n.iv=r.iv;var a=x.decrypt.call(this,t,e,r.key,n);return a}})}()})},19021:function(t,e,i){(function(e,i){t.exports=i()})(0,function(){var t=t||function(t,e){var n;if("undefined"!==typeof window&&window.crypto&&(n=window.crypto),"undefined"!==typeof self&&self.crypto&&(n=self.crypto),"undefined"!==typeof globalThis&&globalThis.crypto&&(n=globalThis.crypto),!n&&"undefined"!==typeof window&&window.msCrypto&&(n=window.msCrypto),!n&&"undefined"!==typeof i.g&&i.g.crypto&&(n=i.g.crypto),!n)try{n=i(50477)}catch(g){}var r=function(){if(n){if("function"===typeof n.getRandomValues)try{return n.getRandomValues(new Uint32Array(1))[0]}catch(g){}if("function"===typeof n.randomBytes)try{return n.randomBytes(4).readInt32LE()}catch(g){}}throw new Error("Native crypto module could not be used to get secure random number.")},a=Object.create||function(){function t(){}return function(e){var i;return t.prototype=e,i=new t,t.prototype=null,i}}(),o={},s=o.lib={},l=s.Base=function(){return{extend:function(t){var e=a(this);return t&&e.mixIn(t),e.hasOwnProperty("init")&&this.init!==e.init||(e.init=function(){e.$super.init.apply(this,arguments)}),e.init.prototype=e,e.$super=this,e},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),c=s.WordArray=l.extend({init:function(t,i){t=this.words=t||[],this.sigBytes=i!=e?i:4*t.length},toString:function(t){return(t||d).stringify(this)},concat:function(t){var e=this.words,i=t.words,n=this.sigBytes,r=t.sigBytes;if(this.clamp(),n%4)for(var a=0;a>>2]>>>24-a%4*8&255;e[n+a>>>2]|=o<<24-(n+a)%4*8}else for(var s=0;s>>2]=i[s>>>2];return this.sigBytes+=r,this},clamp:function(){var e=this.words,i=this.sigBytes;e[i>>>2]&=4294967295<<32-i%4*8,e.length=t.ceil(i/4)},clone:function(){var t=l.clone.call(this);return t.words=this.words.slice(0),t},random:function(t){for(var e=[],i=0;i>>2]>>>24-r%4*8&255;n.push((a>>>4).toString(16)),n.push((15&a).toString(16))}return n.join("")},parse:function(t){for(var e=t.length,i=[],n=0;n>>3]|=parseInt(t.substr(n,2),16)<<24-n%8*4;return new c.init(i,e/2)}},h=u.Latin1={stringify:function(t){for(var e=t.words,i=t.sigBytes,n=[],r=0;r>>2]>>>24-r%4*8&255;n.push(String.fromCharCode(a))}return n.join("")},parse:function(t){for(var e=t.length,i=[],n=0;n>>2]|=(255&t.charCodeAt(n))<<24-n%4*8;return new c.init(i,e)}},p=u.Utf8={stringify:function(t){try{return decodeURIComponent(escape(h.stringify(t)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(t){return h.parse(unescape(encodeURIComponent(t)))}},f=s.BufferedBlockAlgorithm=l.extend({reset:function(){this._data=new c.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=p.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(e){var i,n=this._data,r=n.words,a=n.sigBytes,o=this.blockSize,s=4*o,l=a/s;l=e?t.ceil(l):t.max((0|l)-this._minBufferSize,0);var u=l*o,d=t.min(4*u,a);if(u){for(var h=0;h>>2]>>>24-a%4*8&255,s=e[a+1>>>2]>>>24-(a+1)%4*8&255,l=e[a+2>>>2]>>>24-(a+2)%4*8&255,c=o<<16|s<<8|l,u=0;u<4&&a+.75*u>>6*(3-u)&63));var d=n.charAt(64);if(d)while(r.length%4)r.push(d);return r.join("")},parse:function(t){var e=t.length,i=this._map,n=this._reverseMap;if(!n){n=this._reverseMap=[];for(var r=0;r>>6-o%4*2,c=s|l;r[a>>>2]|=c<<24-a%4*8,a++}return n.create(r,a)}}(),t.enc.Base64})},64725:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=e.enc;r.Base64url={stringify:function(t,e){void 0===e&&(e=!0);var i=t.words,n=t.sigBytes,r=e?this._safe_map:this._map;t.clamp();for(var a=[],o=0;o>>2]>>>24-o%4*8&255,l=i[o+1>>>2]>>>24-(o+1)%4*8&255,c=i[o+2>>>2]>>>24-(o+2)%4*8&255,u=s<<16|l<<8|c,d=0;d<4&&o+.75*d>>6*(3-d)&63));var h=r.charAt(64);if(h)while(a.length%4)a.push(h);return a.join("")},parse:function(t,e){void 0===e&&(e=!0);var i=t.length,n=e?this._safe_map:this._map,r=this._reverseMap;if(!r){r=this._reverseMap=[];for(var o=0;o>>6-o%4*2,c=s|l;r[a>>>2]|=c<<24-a%4*8,a++}return n.create(r,a)}}(),t.enc.Base64url})},45503:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=e.enc;r.Utf16=r.Utf16BE={stringify:function(t){for(var e=t.words,i=t.sigBytes,n=[],r=0;r>>2]>>>16-r%4*8&65535;n.push(String.fromCharCode(a))}return n.join("")},parse:function(t){for(var e=t.length,i=[],r=0;r>>1]|=t.charCodeAt(r)<<16-r%2*16;return n.create(i,2*e)}};function a(t){return t<<8&4278255360|t>>>8&16711935}r.Utf16LE={stringify:function(t){for(var e=t.words,i=t.sigBytes,n=[],r=0;r>>2]>>>16-r%4*8&65535);n.push(String.fromCharCode(o))}return n.join("")},parse:function(t){for(var e=t.length,i=[],r=0;r>>1]|=a(t.charCodeAt(r)<<16-r%2*16);return n.create(i,2*e)}}}(),t.enc.Utf16})},39506:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(45471),i(51025))})(0,function(t){return function(){var e=t,i=e.lib,n=i.Base,r=i.WordArray,a=e.algo,o=a.MD5,s=a.EvpKDF=n.extend({cfg:n.extend({keySize:4,hasher:o,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){var i,n=this.cfg,a=n.hasher.create(),o=r.create(),s=o.words,l=n.keySize,c=n.iterations;while(s.lengthn&&(e=t.finalize(e)),e.clamp();for(var r=this._oKey=e.clone(),o=this._iKey=e.clone(),s=r.words,l=o.words,c=0;c>>2]|=t[n]<<24-n%4*8;r.call(this,i,e)}else r.apply(this,arguments)};a.prototype=n}}(),t.lib.WordArray})},84636:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(e){var i=t,n=i.lib,r=n.WordArray,a=n.Hasher,o=i.algo,s=[];(function(){for(var t=0;t<64;t++)s[t]=4294967296*e.abs(e.sin(t+1))|0})();var l=o.MD5=a.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(t,e){for(var i=0;i<16;i++){var n=e+i,r=t[n];t[n]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8)}var a=this._hash.words,o=t[e+0],l=t[e+1],p=t[e+2],f=t[e+3],v=t[e+4],g=t[e+5],m=t[e+6],y=t[e+7],b=t[e+8],x=t[e+9],_=t[e+10],w=t[e+11],C=t[e+12],S=t[e+13],k=t[e+14],A=t[e+15],T=a[0],M=a[1],I=a[2],E=a[3];T=c(T,M,I,E,o,7,s[0]),E=c(E,T,M,I,l,12,s[1]),I=c(I,E,T,M,p,17,s[2]),M=c(M,I,E,T,f,22,s[3]),T=c(T,M,I,E,v,7,s[4]),E=c(E,T,M,I,g,12,s[5]),I=c(I,E,T,M,m,17,s[6]),M=c(M,I,E,T,y,22,s[7]),T=c(T,M,I,E,b,7,s[8]),E=c(E,T,M,I,x,12,s[9]),I=c(I,E,T,M,_,17,s[10]),M=c(M,I,E,T,w,22,s[11]),T=c(T,M,I,E,C,7,s[12]),E=c(E,T,M,I,S,12,s[13]),I=c(I,E,T,M,k,17,s[14]),M=c(M,I,E,T,A,22,s[15]),T=u(T,M,I,E,l,5,s[16]),E=u(E,T,M,I,m,9,s[17]),I=u(I,E,T,M,w,14,s[18]),M=u(M,I,E,T,o,20,s[19]),T=u(T,M,I,E,g,5,s[20]),E=u(E,T,M,I,_,9,s[21]),I=u(I,E,T,M,A,14,s[22]),M=u(M,I,E,T,v,20,s[23]),T=u(T,M,I,E,x,5,s[24]),E=u(E,T,M,I,k,9,s[25]),I=u(I,E,T,M,f,14,s[26]),M=u(M,I,E,T,b,20,s[27]),T=u(T,M,I,E,S,5,s[28]),E=u(E,T,M,I,p,9,s[29]),I=u(I,E,T,M,y,14,s[30]),M=u(M,I,E,T,C,20,s[31]),T=d(T,M,I,E,g,4,s[32]),E=d(E,T,M,I,b,11,s[33]),I=d(I,E,T,M,w,16,s[34]),M=d(M,I,E,T,k,23,s[35]),T=d(T,M,I,E,l,4,s[36]),E=d(E,T,M,I,v,11,s[37]),I=d(I,E,T,M,y,16,s[38]),M=d(M,I,E,T,_,23,s[39]),T=d(T,M,I,E,S,4,s[40]),E=d(E,T,M,I,o,11,s[41]),I=d(I,E,T,M,f,16,s[42]),M=d(M,I,E,T,m,23,s[43]),T=d(T,M,I,E,x,4,s[44]),E=d(E,T,M,I,C,11,s[45]),I=d(I,E,T,M,A,16,s[46]),M=d(M,I,E,T,p,23,s[47]),T=h(T,M,I,E,o,6,s[48]),E=h(E,T,M,I,y,10,s[49]),I=h(I,E,T,M,k,15,s[50]),M=h(M,I,E,T,g,21,s[51]),T=h(T,M,I,E,C,6,s[52]),E=h(E,T,M,I,f,10,s[53]),I=h(I,E,T,M,_,15,s[54]),M=h(M,I,E,T,l,21,s[55]),T=h(T,M,I,E,b,6,s[56]),E=h(E,T,M,I,A,10,s[57]),I=h(I,E,T,M,m,15,s[58]),M=h(M,I,E,T,S,21,s[59]),T=h(T,M,I,E,v,6,s[60]),E=h(E,T,M,I,w,10,s[61]),I=h(I,E,T,M,p,15,s[62]),M=h(M,I,E,T,x,21,s[63]),a[0]=a[0]+T|0,a[1]=a[1]+M|0,a[2]=a[2]+I|0,a[3]=a[3]+E|0},_doFinalize:function(){var t=this._data,i=t.words,n=8*this._nDataBytes,r=8*t.sigBytes;i[r>>>5]|=128<<24-r%32;var a=e.floor(n/4294967296),o=n;i[15+(r+64>>>9<<4)]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),i[14+(r+64>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),t.sigBytes=4*(i.length+1),this._process();for(var s=this._hash,l=s.words,c=0;c<4;c++){var u=l[c];l[c]=16711935&(u<<8|u>>>24)|4278255360&(u<<24|u>>>8)}return s},clone:function(){var t=a.clone.call(this);return t._hash=this._hash.clone(),t}});function c(t,e,i,n,r,a,o){var s=t+(e&i|~e&n)+r+o;return(s<>>32-a)+e}function u(t,e,i,n,r,a,o){var s=t+(e&n|i&~n)+r+o;return(s<>>32-a)+e}function d(t,e,i,n,r,a,o){var s=t+(e^i^n)+r+o;return(s<>>32-a)+e}function h(t,e,i,n,r,a,o){var s=t+(i^(e|~n))+r+o;return(s<>>32-a)+e}i.MD5=a._createHelper(l),i.HmacMD5=a._createHmacHelper(l)}(Math),t.MD5})},82169:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.mode.CFB=function(){var e=t.lib.BlockCipherMode.extend();function i(t,e,i,n){var r,a=this._iv;a?(r=a.slice(0),this._iv=void 0):r=this._prevBlock,n.encryptBlock(r,0);for(var o=0;o>24&255)){var e=t>>16&255,i=t>>8&255,n=255&t;255===e?(e=0,255===i?(i=0,255===n?n=0:++n):++i):++e,t=0,t+=e<<16,t+=i<<8,t+=n}else t+=1<<24;return t}function n(t){return 0===(t[0]=i(t[0]))&&(t[1]=i(t[1])),t}var r=e.Encryptor=e.extend({processBlock:function(t,e){var i=this._cipher,r=i.blockSize,a=this._iv,o=this._counter;a&&(o=this._counter=a.slice(0),this._iv=void 0),n(o);var s=o.slice(0);i.encryptBlock(s,0);for(var l=0;l>>2]|=r<<24-a%4*8,t.sigBytes+=r},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},t.pad.Ansix923})},54905:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.pad.Iso10126={pad:function(e,i){var n=4*i,r=n-e.sigBytes%n;e.concat(t.lib.WordArray.random(r-1)).concat(t.lib.WordArray.create([r<<24],1))},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},t.pad.Iso10126})},10482:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.pad.Iso97971={pad:function(e,i){e.concat(t.lib.WordArray.create([2147483648],1)),t.pad.ZeroPadding.pad(e,i)},unpad:function(e){t.pad.ZeroPadding.unpad(e),e.sigBytes--}},t.pad.Iso97971})},58124:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.pad.NoPadding={pad:function(){},unpad:function(){}},t.pad.NoPadding})},52155:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.pad.ZeroPadding={pad:function(t,e){var i=4*e;t.clamp(),t.sigBytes+=i-(t.sigBytes%i||i)},unpad:function(t){var e=t.words,i=t.sigBytes-1;for(i=t.sigBytes-1;i>=0;i--)if(e[i>>>2]>>>24-i%4*8&255){t.sigBytes=i+1;break}}},t.pad.ZeroPadding})},70019:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(63009),i(51025))})(0,function(t){return function(){var e=t,i=e.lib,n=i.Base,r=i.WordArray,a=e.algo,o=a.SHA256,s=a.HMAC,l=a.PBKDF2=n.extend({cfg:n.extend({keySize:4,hasher:o,iterations:25e4}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){var i=this.cfg,n=s.create(i.hasher,t),a=r.create(),o=r.create([1]),l=a.words,c=o.words,u=i.keySize,d=i.iterations;while(l.length>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],n=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];this._b=0;for(var r=0;r<4;r++)c.call(this);for(r=0;r<8;r++)n[r]^=i[r+4&7];if(e){var a=e.words,o=a[0],s=a[1],l=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),u=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),d=l>>>16|4294901760&u,h=u<<16|65535&l;n[0]^=l,n[1]^=d,n[2]^=u,n[3]^=h,n[4]^=l,n[5]^=d,n[6]^=u,n[7]^=h;for(r=0;r<4;r++)c.call(this)}},_doProcessBlock:function(t,e){var i=this._X;c.call(this),a[0]=i[0]^i[5]>>>16^i[3]<<16,a[1]=i[2]^i[7]>>>16^i[5]<<16,a[2]=i[4]^i[1]>>>16^i[7]<<16,a[3]=i[6]^i[3]>>>16^i[1]<<16;for(var n=0;n<4;n++)a[n]=16711935&(a[n]<<8|a[n]>>>24)|4278255360&(a[n]<<24|a[n]>>>8),t[e+n]^=a[n]},blockSize:4,ivSize:2});function c(){for(var t=this._X,e=this._C,i=0;i<8;i++)o[i]=e[i];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(i=0;i<8;i++){var n=t[i]+e[i],r=65535&n,a=n>>>16,l=((r*r>>>17)+r*a>>>15)+a*a,c=((4294901760&n)*n|0)+((65535&n)*n|0);s[i]=l^c}t[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,t[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,t[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,t[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,t[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,t[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,t[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,t[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}e.RabbitLegacy=n._createHelper(l)}(),t.RabbitLegacy})},96298:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.StreamCipher,r=e.algo,a=[],o=[],s=[],l=r.Rabbit=n.extend({_doReset:function(){for(var t=this._key.words,e=this.cfg.iv,i=0;i<4;i++)t[i]=16711935&(t[i]<<8|t[i]>>>24)|4278255360&(t[i]<<24|t[i]>>>8);var n=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],r=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];this._b=0;for(i=0;i<4;i++)c.call(this);for(i=0;i<8;i++)r[i]^=n[i+4&7];if(e){var a=e.words,o=a[0],s=a[1],l=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),u=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),d=l>>>16|4294901760&u,h=u<<16|65535&l;r[0]^=l,r[1]^=d,r[2]^=u,r[3]^=h,r[4]^=l,r[5]^=d,r[6]^=u,r[7]^=h;for(i=0;i<4;i++)c.call(this)}},_doProcessBlock:function(t,e){var i=this._X;c.call(this),a[0]=i[0]^i[5]>>>16^i[3]<<16,a[1]=i[2]^i[7]>>>16^i[5]<<16,a[2]=i[4]^i[1]>>>16^i[7]<<16,a[3]=i[6]^i[3]>>>16^i[1]<<16;for(var n=0;n<4;n++)a[n]=16711935&(a[n]<<8|a[n]>>>24)|4278255360&(a[n]<<24|a[n]>>>8),t[e+n]^=a[n]},blockSize:4,ivSize:2});function c(){for(var t=this._X,e=this._C,i=0;i<8;i++)o[i]=e[i];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(i=0;i<8;i++){var n=t[i]+e[i],r=65535&n,a=n>>>16,l=((r*r>>>17)+r*a>>>15)+a*a,c=((4294901760&n)*n|0)+((65535&n)*n|0);s[i]=l^c}t[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,t[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,t[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,t[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,t[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,t[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,t[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,t[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}e.Rabbit=n._createHelper(l)}(),t.Rabbit})},77193:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.StreamCipher,r=e.algo,a=r.RC4=n.extend({_doReset:function(){for(var t=this._key,e=t.words,i=t.sigBytes,n=this._S=[],r=0;r<256;r++)n[r]=r;r=0;for(var a=0;r<256;r++){var o=r%i,s=e[o>>>2]>>>24-o%4*8&255;a=(a+n[r]+s)%256;var l=n[r];n[r]=n[a],n[a]=l}this._i=this._j=0},_doProcessBlock:function(t,e){t[e]^=o.call(this)},keySize:8,ivSize:0});function o(){for(var t=this._S,e=this._i,i=this._j,n=0,r=0;r<4;r++){e=(e+1)%256,i=(i+t[e])%256;var a=t[e];t[e]=t[i],t[i]=a,n|=t[(t[e]+t[i])%256]<<24-8*r}return this._i=e,this._j=i,n}e.RC4=n._createHelper(a);var s=r.RC4Drop=a.extend({cfg:a.cfg.extend({drop:192}),_doReset:function(){a._doReset.call(this);for(var t=this.cfg.drop;t>0;t--)o.call(this)}});e.RC4Drop=n._createHelper(s)}(),t.RC4})},78056:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){ -/** @preserve - (c) 2012 by Cédric Mesnil. All rights reserved. - - Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -return function(){var e=t,i=e.lib,n=i.WordArray,r=i.Hasher,a=e.algo,o=n.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),s=n.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),l=n.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),c=n.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),u=n.create([0,1518500249,1859775393,2400959708,2840853838]),d=n.create([1352829926,1548603684,1836072691,2053994217,0]),h=a.RIPEMD160=r.extend({_doReset:function(){this._hash=n.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var i=0;i<16;i++){var n=e+i,r=t[n];t[n]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8)}var a,h,b,x,_,w,C,S,k,A,T,M=this._hash.words,I=u.words,E=d.words,D=o.words,P=s.words,L=l.words,R=c.words;w=a=M[0],C=h=M[1],S=b=M[2],k=x=M[3],A=_=M[4];for(i=0;i<80;i+=1)T=a+t[e+D[i]]|0,T+=i<16?p(h,b,x)+I[0]:i<32?f(h,b,x)+I[1]:i<48?v(h,b,x)+I[2]:i<64?g(h,b,x)+I[3]:m(h,b,x)+I[4],T|=0,T=y(T,L[i]),T=T+_|0,a=_,_=x,x=y(b,10),b=h,h=T,T=w+t[e+P[i]]|0,T+=i<16?m(C,S,k)+E[0]:i<32?g(C,S,k)+E[1]:i<48?v(C,S,k)+E[2]:i<64?f(C,S,k)+E[3]:p(C,S,k)+E[4],T|=0,T=y(T,R[i]),T=T+A|0,w=A,A=k,k=y(S,10),S=C,C=T;T=M[1]+b+k|0,M[1]=M[2]+x+A|0,M[2]=M[3]+_+w|0,M[3]=M[4]+a+C|0,M[4]=M[0]+h+S|0,M[0]=T},_doFinalize:function(){var t=this._data,e=t.words,i=8*this._nDataBytes,n=8*t.sigBytes;e[n>>>5]|=128<<24-n%32,e[14+(n+64>>>9<<4)]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),t.sigBytes=4*(e.length+1),this._process();for(var r=this._hash,a=r.words,o=0;o<5;o++){var s=a[o];a[o]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8)}return r},clone:function(){var t=r.clone.call(this);return t._hash=this._hash.clone(),t}});function p(t,e,i){return t^e^i}function f(t,e,i){return t&e|~t&i}function v(t,e,i){return(t|~e)^i}function g(t,e,i){return t&i|e&~i}function m(t,e,i){return t^(e|~i)}function y(t,e){return t<>>32-e}e.RIPEMD160=r._createHelper(h),e.HmacRIPEMD160=r._createHmacHelper(h)}(Math),t.RIPEMD160})},45471:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=i.Hasher,a=e.algo,o=[],s=a.SHA1=r.extend({_doReset:function(){this._hash=new n.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var i=this._hash.words,n=i[0],r=i[1],a=i[2],s=i[3],l=i[4],c=0;c<80;c++){if(c<16)o[c]=0|t[e+c];else{var u=o[c-3]^o[c-8]^o[c-14]^o[c-16];o[c]=u<<1|u>>>31}var d=(n<<5|n>>>27)+l+o[c];d+=c<20?1518500249+(r&a|~r&s):c<40?1859775393+(r^a^s):c<60?(r&a|r&s|a&s)-1894007588:(r^a^s)-899497514,l=s,s=a,a=r<<30|r>>>2,r=n,n=d}i[0]=i[0]+n|0,i[1]=i[1]+r|0,i[2]=i[2]+a|0,i[3]=i[3]+s|0,i[4]=i[4]+l|0},_doFinalize:function(){var t=this._data,e=t.words,i=8*this._nDataBytes,n=8*t.sigBytes;return e[n>>>5]|=128<<24-n%32,e[14+(n+64>>>9<<4)]=Math.floor(i/4294967296),e[15+(n+64>>>9<<4)]=i,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=r.clone.call(this);return t._hash=this._hash.clone(),t}});e.SHA1=r._createHelper(s),e.HmacSHA1=r._createHmacHelper(s)}(),t.SHA1})},36308:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(63009))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=e.algo,a=r.SHA256,o=r.SHA224=a.extend({_doReset:function(){this._hash=new n.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var t=a._doFinalize.call(this);return t.sigBytes-=4,t}});e.SHA224=a._createHelper(o),e.HmacSHA224=a._createHmacHelper(o)}(),t.SHA224})},63009:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(e){var i=t,n=i.lib,r=n.WordArray,a=n.Hasher,o=i.algo,s=[],l=[];(function(){function t(t){for(var i=e.sqrt(t),n=2;n<=i;n++)if(!(t%n))return!1;return!0}function i(t){return 4294967296*(t-(0|t))|0}var n=2,r=0;while(r<64)t(n)&&(r<8&&(s[r]=i(e.pow(n,.5))),l[r]=i(e.pow(n,1/3)),r++),n++})();var c=[],u=o.SHA256=a.extend({_doReset:function(){this._hash=new r.init(s.slice(0))},_doProcessBlock:function(t,e){for(var i=this._hash.words,n=i[0],r=i[1],a=i[2],o=i[3],s=i[4],u=i[5],d=i[6],h=i[7],p=0;p<64;p++){if(p<16)c[p]=0|t[e+p];else{var f=c[p-15],v=(f<<25|f>>>7)^(f<<14|f>>>18)^f>>>3,g=c[p-2],m=(g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10;c[p]=v+c[p-7]+m+c[p-16]}var y=s&u^~s&d,b=n&r^n&a^r&a,x=(n<<30|n>>>2)^(n<<19|n>>>13)^(n<<10|n>>>22),_=(s<<26|s>>>6)^(s<<21|s>>>11)^(s<<7|s>>>25),w=h+_+y+l[p]+c[p],C=x+b;h=d,d=u,u=s,s=o+w|0,o=a,a=r,r=n,n=w+C|0}i[0]=i[0]+n|0,i[1]=i[1]+r|0,i[2]=i[2]+a|0,i[3]=i[3]+o|0,i[4]=i[4]+s|0,i[5]=i[5]+u|0,i[6]=i[6]+d|0,i[7]=i[7]+h|0},_doFinalize:function(){var t=this._data,i=t.words,n=8*this._nDataBytes,r=8*t.sigBytes;return i[r>>>5]|=128<<24-r%32,i[14+(r+64>>>9<<4)]=e.floor(n/4294967296),i[15+(r+64>>>9<<4)]=n,t.sigBytes=4*i.length,this._process(),this._hash},clone:function(){var t=a.clone.call(this);return t._hash=this._hash.clone(),t}});i.SHA256=a._createHelper(u),i.HmacSHA256=a._createHmacHelper(u)}(Math),t.SHA256})},45953:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(43240))})(0,function(t){return function(e){var i=t,n=i.lib,r=n.WordArray,a=n.Hasher,o=i.x64,s=o.Word,l=i.algo,c=[],u=[],d=[];(function(){for(var t=1,e=0,i=0;i<24;i++){c[t+5*e]=(i+1)*(i+2)/2%64;var n=e%5,r=(2*t+3*e)%5;t=n,e=r}for(t=0;t<5;t++)for(e=0;e<5;e++)u[t+5*e]=e+(2*t+3*e)%5*5;for(var a=1,o=0;o<24;o++){for(var l=0,h=0,p=0;p<7;p++){if(1&a){var f=(1<>>24)|4278255360&(a<<24|a>>>8),o=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8);var s=i[r];s.high^=o,s.low^=a}for(var l=0;l<24;l++){for(var p=0;p<5;p++){for(var f=0,v=0,g=0;g<5;g++){s=i[p+5*g];f^=s.high,v^=s.low}var m=h[p];m.high=f,m.low=v}for(p=0;p<5;p++){var y=h[(p+4)%5],b=h[(p+1)%5],x=b.high,_=b.low;for(f=y.high^(x<<1|_>>>31),v=y.low^(_<<1|x>>>31),g=0;g<5;g++){s=i[p+5*g];s.high^=f,s.low^=v}}for(var w=1;w<25;w++){s=i[w];var C=s.high,S=s.low,k=c[w];k<32?(f=C<>>32-k,v=S<>>32-k):(f=S<>>64-k,v=C<>>64-k);var A=h[u[w]];A.high=f,A.low=v}var T=h[0],M=i[0];T.high=M.high,T.low=M.low;for(p=0;p<5;p++)for(g=0;g<5;g++){w=p+5*g,s=i[w];var I=h[w],E=h[(p+1)%5+5*g],D=h[(p+2)%5+5*g];s.high=I.high^~E.high&D.high,s.low=I.low^~E.low&D.low}s=i[0];var P=d[l];s.high^=P.high,s.low^=P.low}},_doFinalize:function(){var t=this._data,i=t.words,n=(this._nDataBytes,8*t.sigBytes),a=32*this.blockSize;i[n>>>5]|=1<<24-n%32,i[(e.ceil((n+1)/a)*a>>>5)-1]|=128,t.sigBytes=4*i.length,this._process();for(var o=this._state,s=this.cfg.outputLength/8,l=s/8,c=[],u=0;u>>24)|4278255360&(h<<24|h>>>8),p=16711935&(p<<8|p>>>24)|4278255360&(p<<24|p>>>8),c.push(p),c.push(h)}return new r.init(c,s)},clone:function(){for(var t=a.clone.call(this),e=t._state=this._state.slice(0),i=0;i<25;i++)e[i]=e[i].clone();return t}});i.SHA3=a._createHelper(p),i.HmacSHA3=a._createHmacHelper(p)}(Math),t.SHA3})},89557:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(43240),i(81380))})(0,function(t){return function(){var e=t,i=e.x64,n=i.Word,r=i.WordArray,a=e.algo,o=a.SHA512,s=a.SHA384=o.extend({_doReset:function(){this._hash=new r.init([new n.init(3418070365,3238371032),new n.init(1654270250,914150663),new n.init(2438529370,812702999),new n.init(355462360,4144912697),new n.init(1731405415,4290775857),new n.init(2394180231,1750603025),new n.init(3675008525,1694076839),new n.init(1203062813,3204075428)])},_doFinalize:function(){var t=o._doFinalize.call(this);return t.sigBytes-=16,t}});e.SHA384=o._createHelper(s),e.HmacSHA384=o._createHmacHelper(s)}(),t.SHA384})},81380:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(43240))})(0,function(t){return function(){var e=t,i=e.lib,n=i.Hasher,r=e.x64,a=r.Word,o=r.WordArray,s=e.algo;function l(){return a.create.apply(a,arguments)}var c=[l(1116352408,3609767458),l(1899447441,602891725),l(3049323471,3964484399),l(3921009573,2173295548),l(961987163,4081628472),l(1508970993,3053834265),l(2453635748,2937671579),l(2870763221,3664609560),l(3624381080,2734883394),l(310598401,1164996542),l(607225278,1323610764),l(1426881987,3590304994),l(1925078388,4068182383),l(2162078206,991336113),l(2614888103,633803317),l(3248222580,3479774868),l(3835390401,2666613458),l(4022224774,944711139),l(264347078,2341262773),l(604807628,2007800933),l(770255983,1495990901),l(1249150122,1856431235),l(1555081692,3175218132),l(1996064986,2198950837),l(2554220882,3999719339),l(2821834349,766784016),l(2952996808,2566594879),l(3210313671,3203337956),l(3336571891,1034457026),l(3584528711,2466948901),l(113926993,3758326383),l(338241895,168717936),l(666307205,1188179964),l(773529912,1546045734),l(1294757372,1522805485),l(1396182291,2643833823),l(1695183700,2343527390),l(1986661051,1014477480),l(2177026350,1206759142),l(2456956037,344077627),l(2730485921,1290863460),l(2820302411,3158454273),l(3259730800,3505952657),l(3345764771,106217008),l(3516065817,3606008344),l(3600352804,1432725776),l(4094571909,1467031594),l(275423344,851169720),l(430227734,3100823752),l(506948616,1363258195),l(659060556,3750685593),l(883997877,3785050280),l(958139571,3318307427),l(1322822218,3812723403),l(1537002063,2003034995),l(1747873779,3602036899),l(1955562222,1575990012),l(2024104815,1125592928),l(2227730452,2716904306),l(2361852424,442776044),l(2428436474,593698344),l(2756734187,3733110249),l(3204031479,2999351573),l(3329325298,3815920427),l(3391569614,3928383900),l(3515267271,566280711),l(3940187606,3454069534),l(4118630271,4000239992),l(116418474,1914138554),l(174292421,2731055270),l(289380356,3203993006),l(460393269,320620315),l(685471733,587496836),l(852142971,1086792851),l(1017036298,365543100),l(1126000580,2618297676),l(1288033470,3409855158),l(1501505948,4234509866),l(1607167915,987167468),l(1816402316,1246189591)],u=[];(function(){for(var t=0;t<80;t++)u[t]=l()})();var d=s.SHA512=n.extend({_doReset:function(){this._hash=new o.init([new a.init(1779033703,4089235720),new a.init(3144134277,2227873595),new a.init(1013904242,4271175723),new a.init(2773480762,1595750129),new a.init(1359893119,2917565137),new a.init(2600822924,725511199),new a.init(528734635,4215389547),new a.init(1541459225,327033209)])},_doProcessBlock:function(t,e){for(var i=this._hash.words,n=i[0],r=i[1],a=i[2],o=i[3],s=i[4],l=i[5],d=i[6],h=i[7],p=n.high,f=n.low,v=r.high,g=r.low,m=a.high,y=a.low,b=o.high,x=o.low,_=s.high,w=s.low,C=l.high,S=l.low,k=d.high,A=d.low,T=h.high,M=h.low,I=p,E=f,D=v,P=g,L=m,R=y,F=b,B=x,N=_,O=w,z=C,W=S,V=k,$=A,H=T,K=M,Y=0;Y<80;Y++){var X,U,G=u[Y];if(Y<16)U=G.high=0|t[e+2*Y],X=G.low=0|t[e+2*Y+1];else{var j=u[Y-15],q=j.high,Z=j.low,J=(q>>>1|Z<<31)^(q>>>8|Z<<24)^q>>>7,Q=(Z>>>1|q<<31)^(Z>>>8|q<<24)^(Z>>>7|q<<25),tt=u[Y-2],et=tt.high,it=tt.low,nt=(et>>>19|it<<13)^(et<<3|it>>>29)^et>>>6,rt=(it>>>19|et<<13)^(it<<3|et>>>29)^(it>>>6|et<<26),at=u[Y-7],ot=at.high,st=at.low,lt=u[Y-16],ct=lt.high,ut=lt.low;X=Q+st,U=J+ot+(X>>>0>>0?1:0),X+=rt,U=U+nt+(X>>>0>>0?1:0),X+=ut,U=U+ct+(X>>>0>>0?1:0),G.high=U,G.low=X}var dt=N&z^~N&V,ht=O&W^~O&$,pt=I&D^I&L^D&L,ft=E&P^E&R^P&R,vt=(I>>>28|E<<4)^(I<<30|E>>>2)^(I<<25|E>>>7),gt=(E>>>28|I<<4)^(E<<30|I>>>2)^(E<<25|I>>>7),mt=(N>>>14|O<<18)^(N>>>18|O<<14)^(N<<23|O>>>9),yt=(O>>>14|N<<18)^(O>>>18|N<<14)^(O<<23|N>>>9),bt=c[Y],xt=bt.high,_t=bt.low,wt=K+yt,Ct=H+mt+(wt>>>0>>0?1:0),St=(wt=wt+ht,Ct=Ct+dt+(wt>>>0>>0?1:0),wt=wt+_t,Ct=Ct+xt+(wt>>>0<_t>>>0?1:0),wt=wt+X,Ct=Ct+U+(wt>>>0>>0?1:0),gt+ft),kt=vt+pt+(St>>>0>>0?1:0);H=V,K=$,V=z,$=W,z=N,W=O,O=B+wt|0,N=F+Ct+(O>>>0>>0?1:0)|0,F=L,B=R,L=D,R=P,D=I,P=E,E=wt+St|0,I=Ct+kt+(E>>>0>>0?1:0)|0}f=n.low=f+E,n.high=p+I+(f>>>0>>0?1:0),g=r.low=g+P,r.high=v+D+(g>>>0

>>0?1:0),y=a.low=y+R,a.high=m+L+(y>>>0>>0?1:0),x=o.low=x+B,o.high=b+F+(x>>>0>>0?1:0),w=s.low=w+O,s.high=_+N+(w>>>0>>0?1:0),S=l.low=S+W,l.high=C+z+(S>>>0>>0?1:0),A=d.low=A+$,d.high=k+V+(A>>>0<$>>>0?1:0),M=h.low=M+K,h.high=T+H+(M>>>0>>0?1:0)},_doFinalize:function(){var t=this._data,e=t.words,i=8*this._nDataBytes,n=8*t.sigBytes;e[n>>>5]|=128<<24-n%32,e[30+(n+128>>>10<<5)]=Math.floor(i/4294967296),e[31+(n+128>>>10<<5)]=i,t.sigBytes=4*e.length,this._process();var r=this._hash.toX32();return r},clone:function(){var t=n.clone.call(this);return t._hash=this._hash.clone(),t},blockSize:32});e.SHA512=n._createHelper(d),e.HmacSHA512=n._createHmacHelper(d)}(),t.SHA512})},7628:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=i.BlockCipher,a=e.algo,o=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],s=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],l=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],c=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],u=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],d=a.DES=r.extend({_doReset:function(){for(var t=this._key,e=t.words,i=[],n=0;n<56;n++){var r=o[n]-1;i[n]=e[r>>>5]>>>31-r%32&1}for(var a=this._subKeys=[],c=0;c<16;c++){var u=a[c]=[],d=l[c];for(n=0;n<24;n++)u[n/6|0]|=i[(s[n]-1+d)%28]<<31-n%6,u[4+(n/6|0)]|=i[28+(s[n+24]-1+d)%28]<<31-n%6;u[0]=u[0]<<1|u[0]>>>31;for(n=1;n<7;n++)u[n]=u[n]>>>4*(n-1)+3;u[7]=u[7]<<5|u[7]>>>27}var h=this._invSubKeys=[];for(n=0;n<16;n++)h[n]=a[15-n]},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._subKeys)},decryptBlock:function(t,e){this._doCryptBlock(t,e,this._invSubKeys)},_doCryptBlock:function(t,e,i){this._lBlock=t[e],this._rBlock=t[e+1],h.call(this,4,252645135),h.call(this,16,65535),p.call(this,2,858993459),p.call(this,8,16711935),h.call(this,1,1431655765);for(var n=0;n<16;n++){for(var r=i[n],a=this._lBlock,o=this._rBlock,s=0,l=0;l<8;l++)s|=c[l][((o^r[l])&u[l])>>>0];this._lBlock=o,this._rBlock=a^s}var d=this._lBlock;this._lBlock=this._rBlock,this._rBlock=d,h.call(this,1,1431655765),p.call(this,8,16711935),p.call(this,2,858993459),h.call(this,16,65535),h.call(this,4,252645135),t[e]=this._lBlock,t[e+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});function h(t,e){var i=(this._lBlock>>>t^this._rBlock)&e;this._rBlock^=i,this._lBlock^=i<>>t^this._lBlock)&e;this._lBlock^=i,this._rBlock^=i<192.");var i=e.slice(0,2),r=e.length<4?e.slice(0,2):e.slice(2,4),a=e.length<6?e.slice(0,2):e.slice(4,6);this._des1=d.createEncryptor(n.create(i)),this._des2=d.createEncryptor(n.create(r)),this._des3=d.createEncryptor(n.create(a))},encryptBlock:function(t,e){this._des1.encryptBlock(t,e),this._des2.decryptBlock(t,e),this._des3.encryptBlock(t,e)},decryptBlock:function(t,e){this._des3.decryptBlock(t,e),this._des2.encryptBlock(t,e),this._des1.decryptBlock(t,e)},keySize:6,ivSize:2,blockSize:2});e.TripleDES=r._createHelper(f)}(),t.TripleDES})},43240:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(e){var i=t,n=i.lib,r=n.Base,a=n.WordArray,o=i.x64={};o.Word=r.extend({init:function(t,e){this.high=t,this.low=e}}),o.WordArray=r.extend({init:function(t,i){t=this.words=t||[],this.sigBytes=i!=e?i:8*t.length},toX32:function(){for(var t=this.words,e=t.length,i=[],n=0;n0?e("div",{staticClass:"pagination-wrapper"},[e("a-pagination",{attrs:{current:t.pagination.current,total:t.pagination.total,"page-size":t.pagination.pageSize,"show-total":function(e){return"".concat(t.$t("community.total")," ").concat(e," ").concat(t.$t("community.items"))},"show-quick-jumper":""},on:{change:t.handlePageChange}})],1):t._e()]:t._e(),"review"===t.activeTab&&t.isAdmin?[e("div",{staticClass:"review-panel"},[e("div",{staticClass:"review-header"},[e("a-radio-group",{attrs:{"button-style":"solid"},on:{change:t.loadPendingIndicators},model:{value:t.reviewFilter,callback:function(e){t.reviewFilter=e},expression:"reviewFilter"}},[e("a-radio-button",{attrs:{value:"pending"}},[e("a-badge",{attrs:{count:t.reviewStats.pending,offset:[8,-2],"number-style":{backgroundColor:"#faad14"}}},[t._v(" "+t._s(t.$t("community.admin.pending"))+" ")])],1),e("a-radio-button",{attrs:{value:"approved"}},[t._v(" "+t._s(t.$t("community.admin.approved"))+" ("+t._s(t.reviewStats.approved)+") ")]),e("a-radio-button",{attrs:{value:"rejected"}},[t._v(" "+t._s(t.$t("community.admin.rejected"))+" ("+t._s(t.reviewStats.rejected)+") ")])],1)],1),e("a-spin",{attrs:{spinning:t.reviewLoading}},[0!==t.pendingIndicators.length||t.reviewLoading?e("div",{staticClass:"review-list"},t._l(t.pendingIndicators,function(a){return e("div",{key:a.id,staticClass:"review-item"},[e("div",{staticClass:"review-item-header"},[e("div",{staticClass:"item-info"},[e("span",{staticClass:"item-name"},[t._v(t._s(a.name))]),"free"===a.pricing_type?e("a-tag",{attrs:{color:"green"}},[t._v(t._s(t.$t("community.free")))]):e("a-tag",{attrs:{color:"orange"}},[t._v(t._s(a.price)+" "+t._s(t.$t("community.credits")))]),e("a-tag",{attrs:{color:t.getStatusColor(a.review_status)}},[t._v(t._s(t.getStatusText(a.review_status)))])],1),e("div",{staticClass:"item-author"},[e("a-avatar",{attrs:{src:a.author.avatar,size:"small"}}),e("span",[t._v(t._s(a.author.nickname||a.author.username))]),e("span",{staticClass:"item-time"},[t._v(t._s(t.formatDate(a.created_at)))])],1)]),e("div",{staticClass:"review-item-body"},[e("div",{staticClass:"item-desc"},[t._v(t._s(a.description||t.$t("community.admin.noDescription")))]),a.code?e("div",{staticClass:"item-code"},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.toggleCode(a.id)}}},[e("a-icon",{attrs:{type:t.expandedCodes[a.id]?"up":"down"}}),t._v(" "+t._s(t.$t("community.admin.viewCode"))+" ")],1),t.expandedCodes[a.id]?e("pre",{staticClass:"code-preview"},[t._v(t._s(a.code))]):t._e()],1):t._e(),a.review_note?e("div",{staticClass:"review-note"},[e("a-icon",{attrs:{type:"info-circle"}}),t._v(" "+t._s(t.$t("community.admin.note"))+": "+t._s(a.review_note)+" ")],1):t._e()]),e("div",{staticClass:"review-item-actions"},["pending"===a.review_status?[e("a-button",{attrs:{type:"primary",size:"small"},on:{click:function(e){return t.handleReview(a,"approve")}}},[e("a-icon",{attrs:{type:"check"}}),t._v(" "+t._s(t.$t("community.admin.approve"))+" ")],1),e("a-button",{attrs:{type:"danger",size:"small"},on:{click:function(e){return t.handleReview(a,"reject")}}},[e("a-icon",{attrs:{type:"close"}}),t._v(" "+t._s(t.$t("community.admin.reject"))+" ")],1)]:"approved"===a.review_status?[e("a-button",{attrs:{size:"small"},on:{click:function(e){return t.handleUnpublish(a)}}},[e("a-icon",{attrs:{type:"stop"}}),t._v(" "+t._s(t.$t("community.admin.unpublish"))+" ")],1)]:t._e(),e("a-popconfirm",{attrs:{title:t.$t("community.admin.deleteConfirm")},on:{confirm:function(e){return t.handleDelete(a)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}}),t._v(" "+t._s(t.$t("community.admin.delete"))+" ")],1)],1)],2)])}),0):e("div",{staticClass:"empty-state"},[e("a-empty",{attrs:{description:t.$t("community.admin.noItems")}})],1)]),t.reviewPagination.total>0?e("div",{staticClass:"pagination-wrapper"},[e("a-pagination",{attrs:{current:t.reviewPagination.current,total:t.reviewPagination.total,"page-size":t.reviewPagination.pageSize,"show-total":function(e){return"".concat(t.$t("community.total")," ").concat(e," ").concat(t.$t("community.items"))}},on:{change:t.handleReviewPageChange}})],1):t._e()],1)]:t._e(),e("a-modal",{attrs:{title:"approve"===t.reviewAction?t.$t("community.admin.approveTitle"):t.$t("community.admin.rejectTitle"),"ok-text":"approve"===t.reviewAction?t.$t("community.admin.approve"):t.$t("community.admin.reject"),"ok-button-props":{props:{type:"approve"===t.reviewAction?"primary":"danger"}}},on:{ok:t.submitReview},model:{value:t.showReviewModal,callback:function(e){t.showReviewModal=e},expression:"showReviewModal"}},[e("a-form",{attrs:{layout:"vertical"}},[e("a-form-item",{attrs:{label:t.$t("community.admin.noteLabel")}},[e("a-textarea",{attrs:{placeholder:t.$t("community.admin.notePlaceholder"),rows:3},model:{value:t.reviewNote,callback:function(e){t.reviewNote=e},expression:"reviewNote"}})],1)],1)],1),e("indicator-detail",{attrs:{visible:t.detailVisible,"indicator-id":t.selectedIndicatorId,"current-user-id":t.currentUserId},on:{close:function(e){t.detailVisible=!1},purchased:t.handlePurchased}}),e("a-modal",{attrs:{title:t.$t("community.myPurchases"),footer:null,width:"600px"},model:{value:t.showMyPurchases,callback:function(e){t.showMyPurchases=e},expression:"showMyPurchases"}},[e("a-spin",{attrs:{spinning:t.purchasesLoading}},[0===t.myPurchases.length?e("div",{staticClass:"empty-purchases"},[e("a-empty",{attrs:{description:t.$t("community.noPurchases")}})],1):e("a-list",{attrs:{"data-source":t.myPurchases,"item-layout":"horizontal"},scopedSlots:t._u([{key:"renderItem",fn:function(a){return e("a-list-item",{scopedSlots:t._u([{key:"actions",fn:function(){return[e("a-button",{attrs:{type:"link",size:"small"},on:{click:t.goToUse}},[t._v(" "+t._s(t.$t("community.useNow"))+" ")])]},proxy:!0}])},[e("a-list-item-meta",{scopedSlots:t._u([{key:"title",fn:function(){return[e("a",{on:{click:function(e){return t.openDetailById(a.indicator.id)}}},[t._v(t._s(a.indicator.name))])]},proxy:!0},{key:"description",fn:function(){return[e("div",[t._v(t._s(t.$t("community.purchasedFrom"))+": "+t._s(a.seller.nickname))]),e("div",[t._v(t._s(t.$t("community.purchaseTime"))+": "+t._s(t.formatDate(a.purchase_time)))])]},proxy:!0}],null,!0)})],1)}}])})],1)],1)],2)},n=[],s=a(76959),r=a(17654),o=a(57888),c=(a(2892),a(95353)),d=function(){var t=this,e=t._self._c;return e("a-card",{staticClass:"indicator-card",attrs:{hoverable:"","body-style":{padding:"12px"}},on:{click:function(e){return t.$emit("click",t.indicator)}}},[e("div",{staticClass:"card-cover",style:t.coverStyle},[t.indicator.preview_image&&!t.imageError?e("img",{attrs:{src:t.indicator.preview_image,alt:t.indicator.name},on:{error:t.handleImageError}}):e("div",{staticClass:"default-cover",style:{background:t.coverGradient}},[e("span",{staticClass:"cover-title"},[t._v(t._s(t.indicatorInitials))]),e("span",{staticClass:"cover-subtitle"},[t._v(t._s(t.indicator.name))])]),e("div",{staticClass:"price-tag",class:t.isPaid?"paid":"free"},[t._v(" "+t._s(t.isPaid?"".concat(t.indicator.price," ").concat(t.$t("community.credits")):t.$t("community.free"))+" ")]),t.indicator.vip_free?e("div",{staticClass:"vip-free-tag"},[t._v(" "+t._s(t.$t("community.vipFree"))+" ")]):t._e(),t.indicator.is_own?e("div",{staticClass:"own-tag"},[t._v(" "+t._s(t.$t("community.myIndicator"))+" ")]):t.indicator.is_purchased?e("div",{staticClass:"purchased-tag"},[e("a-icon",{attrs:{type:"check-circle"}}),t._v(" "+t._s(t.$t("community.purchased"))+" ")],1):t._e()]),e("div",{staticClass:"card-content"},[e("h3",{staticClass:"card-title",attrs:{title:t.indicator.name}},[t._v(t._s(t.indicator.name))]),e("p",{staticClass:"card-desc"},[t._v(t._s(t.indicator.description||t.$t("community.noDescription")))]),e("div",{staticClass:"card-author"},[e("a-avatar",{attrs:{src:t.indicator.author.avatar,size:24}}),e("span",{staticClass:"author-name"},[t._v(t._s(t.indicator.author.nickname||t.indicator.author.username))])],1),e("div",{staticClass:"card-stats"},[e("span",{staticClass:"stat-item"},[e("a-icon",{attrs:{type:"download"}}),t._v(" "+t._s(t.indicator.purchase_count||0)+" ")],1),e("span",{staticClass:"stat-item"},[e("a-icon",{style:{color:"#faad14"},attrs:{type:"star",theme:"filled"}}),t._v(" "+t._s(t.formatRating(t.indicator.avg_rating))+" ")],1),e("span",{staticClass:"stat-item"},[e("a-icon",{attrs:{type:"eye"}}),t._v(" "+t._s(t.indicator.view_count||0)+" ")],1)])])])},m=[],l=(a(34782),a(9868),a(27495),a(90744),["linear-gradient(135deg, #667eea 0%, #764ba2 100%)","linear-gradient(135deg, #f093fb 0%, #f5576c 100%)","linear-gradient(135deg, #4facfe 0%, #00f2fe 100%)","linear-gradient(135deg, #43e97b 0%, #38f9d7 100%)","linear-gradient(135deg, #fa709a 0%, #fee140 100%)","linear-gradient(135deg, #a8edea 0%, #fed6e3 100%)","linear-gradient(135deg, #d299c2 0%, #fef9d7 100%)","linear-gradient(135deg, #89f7fe 0%, #66a6ff 100%)","linear-gradient(135deg, #fddb92 0%, #d1fdff 100%)","linear-gradient(135deg, #9890e3 0%, #b1f4cf 100%)","linear-gradient(135deg, #ebc0fd 0%, #d9ded8 100%)","linear-gradient(135deg, #f6d365 0%, #fda085 100%)"]),u={name:"IndicatorCard",props:{indicator:{type:Object,required:!0}},data:function(){return{imageError:!1}},computed:{isPaid:function(){return"free"!==this.indicator.pricing_type&&this.indicator.price>0},coverGradient:function(){var t=(this.indicator.id||0)%l.length;return l[t]},indicatorInitials:function(){var t=this.indicator.name||"I";if(/[\u4e00-\u9fa5]/.test(t))return t.slice(0,2);var e=t.split(/\s+/);return e.length>=2?(e[0][0]+e[1][0]).toUpperCase():t.slice(0,2).toUpperCase()},coverStyle:function(){return{background:!this.indicator.preview_image||this.imageError?this.coverGradient:"#f5f5f5"}}},methods:{formatRating:function(t){var e=parseFloat(t)||0;return e>0?e.toFixed(1):"-"},handleImageError:function(){this.imageError=!0}}},p=u,v=a(845),h=(0,v.A)(p,d,m,!1,null,"b59176ee",null),g=h.exports,f=function(){var t=this,e=t._self._c;return e("a-modal",{staticClass:"indicator-detail-modal",attrs:{visible:t.visible,title:null,footer:null,width:720,"body-style":{padding:0}},on:{cancel:function(e){return t.$emit("close")}}},[e("a-spin",{attrs:{spinning:t.loading}},[t.detail?e("div",{staticClass:"detail-container"},[e("div",{staticClass:"detail-header",style:t.headerStyle},[t.detail.preview_image?e("div",{staticClass:"header-cover"},[e("img",{attrs:{src:t.detail.preview_image,alt:t.detail.name},on:{error:function(e){t.imageError=!0}}})]):e("div",{staticClass:"header-cover default-cover"},[e("span",{staticClass:"cover-initials"},[t._v(t._s(t.indicatorInitials))])]),e("div",{staticClass:"header-info"},[e("h2",{staticClass:"indicator-name"},[t._v(t._s(t.detail.name))]),e("div",{staticClass:"indicator-meta"},[e("div",{staticClass:"author-info"},[e("a-avatar",{attrs:{src:t.detail.author.avatar,size:32}}),e("span",{staticClass:"author-name"},[t._v(t._s(t.detail.author.nickname||t.detail.author.username))])],1),e("div",{staticClass:"publish-time"},[t._v(" "+t._s(t.$t("community.publishedAt"))+": "+t._s(t.formatDate(t.detail.created_at))+" ")])]),e("div",{staticClass:"indicator-stats"},[e("a-statistic",{attrs:{title:t.$t("community.downloads"),value:t.detail.purchase_count||0},scopedSlots:t._u([{key:"prefix",fn:function(){return[e("a-icon",{attrs:{type:"download"}})]},proxy:!0}],null,!1,3253357727)}),e("a-statistic",{attrs:{title:t.$t("community.rating")},scopedSlots:t._u([{key:"formatter",fn:function(){return[e("a-rate",{style:{fontSize:"14px"},attrs:{value:t.detail.avg_rating,disabled:"","allow-half":""}}),e("span",{staticClass:"rating-text"},[t._v("("+t._s(t.detail.rating_count||0)+")")])]},proxy:!0}],null,!1,1010155712)}),e("a-statistic",{attrs:{title:t.$t("community.views"),value:t.detail.view_count||0},scopedSlots:t._u([{key:"prefix",fn:function(){return[e("a-icon",{attrs:{type:"eye"}})]},proxy:!0}],null,!1,3492011442)})],1)])]),e("div",{staticClass:"detail-body"},[e("div",{staticClass:"section"},[e("h3",[t._v(t._s(t.$t("community.description")))]),e("p",{staticClass:"description"},[t._v(t._s(t.detail.description||t.$t("community.noDescription")))])]),t.performance?e("div",{staticClass:"section"},[e("h3",[t._v(t._s(t.$t("community.performance")))]),e("div",{staticClass:"performance-grid"},[e("div",{staticClass:"perf-item"},[e("div",{staticClass:"perf-label"},[t._v(t._s(t.$t("community.strategyCount")))]),e("div",{staticClass:"perf-value"},[t._v(t._s(t.performance.strategy_count))])]),e("div",{staticClass:"perf-item"},[e("div",{staticClass:"perf-label"},[t._v(t._s(t.$t("community.tradeCount")))]),e("div",{staticClass:"perf-value"},[t._v(t._s(t.performance.trade_count))])]),e("div",{staticClass:"perf-item"},[e("div",{staticClass:"perf-label"},[t._v(t._s(t.$t("community.winRate")))]),e("div",{staticClass:"perf-value",class:t.performance.win_rate>=50?"positive":"negative"},[t._v(" "+t._s(t.performance.win_rate)+"% ")])]),e("div",{staticClass:"perf-item"},[e("div",{staticClass:"perf-label"},[t._v(t._s(t.$t("community.totalProfit")))]),e("div",{staticClass:"perf-value",class:t.performance.total_profit>=0?"positive":"negative"},[t._v(" "+t._s(t.performance.total_profit>=0?"+":"")+t._s(t.performance.total_profit)+" ")])])])]):t._e(),e("div",{staticClass:"section"},[e("h3",[t._v(t._s(t.$t("community.reviews"))+" ("+t._s(t.comments.total||0)+")")]),e("comment-list",{attrs:{comments:t.comments.items,loading:t.commentsLoading,"can-comment":t.detail.is_purchased&&!t.detail.is_own&&!t.myComment,"current-user-id":t.currentUserId,"my-comment":t.myComment,total:t.comments.total},on:{"add-comment":t.handleAddComment,"update-comment":t.handleUpdateComment,"load-more":t.loadMoreComments}})],1)]),e("div",{staticClass:"detail-footer"},[e("div",{staticClass:"price-info"},[t.detail.vip_free?e("a-tag",{staticStyle:{"margin-right":"8px"},attrs:{color:"gold"}},[t._v(" "+t._s(t.$t("community.vipFree"))+" ")]):t._e(),"free"===t.detail.pricing_type||t.detail.price<=0?e("span",{staticClass:"free-badge"},[t._v(" "+t._s(t.$t("community.free"))+" ")]):e("span",{staticClass:"price-badge"},[t._v(" "+t._s(t.detail.price)+" "+t._s(t.$t("community.credits"))+" ")])],1),e("div",{staticClass:"action-buttons"},[t.detail.is_own?e("a-button",{attrs:{disabled:""}},[t._v(" "+t._s(t.$t("community.myIndicator"))+" ")]):t.detail.is_purchased?e("a-button",{attrs:{type:"primary"},on:{click:t.goToUse}},[e("a-icon",{attrs:{type:"code"}}),t._v(" "+t._s(t.$t("community.useNow"))+" ")],1):e("a-button",{attrs:{type:"primary",loading:t.purchasing},on:{click:t.handlePurchase}},[e("a-icon",{attrs:{type:"shopping-cart"}}),t._v(" "+t._s("free"===t.detail.pricing_type||t.detail.price<=0?t.$t("community.getFree"):t.$t("community.buyNow"))+" ")],1)],1)])]):t._e()])],1)},y=[],_=a(9133),w=function(){var t=this,e=t._self._c;return e("div",{staticClass:"comment-list"},[t.canComment||t.isEditing?e("div",{staticClass:"comment-form"},[t.isEditing?e("div",{staticClass:"form-header"},[e("span",{staticClass:"edit-label"},[t._v(t._s(t.$t("community.editComment")))]),e("a-button",{attrs:{type:"link",size:"small"},on:{click:t.cancelEdit}},[t._v(t._s(t.$t("community.cancelEdit")))])],1):t._e(),e("div",{staticClass:"rating-input"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("community.yourRating"))+":")]),e("a-rate",{model:{value:t.formData.rating,callback:function(e){t.$set(t.formData,"rating",e)},expression:"formData.rating"}})],1),e("a-textarea",{attrs:{placeholder:t.$t("community.commentPlaceholder"),rows:3,"max-length":500},model:{value:t.formData.content,callback:function(e){t.$set(t.formData,"content",e)},expression:"formData.content"}}),e("div",{staticClass:"form-actions"},[e("span",{staticClass:"char-count"},[t._v(t._s(t.formData.content.length)+"/500")]),e("a-button",{attrs:{type:"primary",size:"small",loading:t.submitting},on:{click:t.submitComment}},[t._v(" "+t._s(t.isEditing?t.$t("community.updateComment"):t.$t("community.submitComment"))+" ")])],1)],1):!t.myComment||t.canComment||t.isEditing?t._e():e("div",{staticClass:"my-comment-hint"},[e("a-icon",{attrs:{type:"check-circle",theme:"twoTone","two-tone-color":"#52c41a"}}),e("span",[t._v(t._s(t.$t("community.alreadyCommented")))]),e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.startEdit(t.myComment)}}},[t._v(" "+t._s(t.$t("community.editMyComment"))+" ")])],1),e("a-spin",{attrs:{spinning:t.loading}},[0===t.comments.length?e("div",{staticClass:"empty-comments"},[e("a-empty",{attrs:{description:t.$t("community.noComments")}})],1):e("div",{staticClass:"comments"},t._l(t.comments,function(a){return e("div",{key:a.id,staticClass:"comment-item",class:{"is-mine":a.user&&a.user.id===t.currentUserId}},[e("div",{staticClass:"comment-header"},[e("a-avatar",{attrs:{src:a.user&&a.user.avatar,size:36}}),e("div",{staticClass:"comment-meta"},[e("div",{staticClass:"user-name"},[t._v(" "+t._s(a.user&&a.user.nickname)+" "),a.user&&a.user.id===t.currentUserId?e("a-tag",{attrs:{size:"small",color:"blue"}},[t._v(t._s(t.$t("community.me")))]):t._e()],1),e("div",{staticClass:"comment-info"},[e("a-rate",{style:{fontSize:"12px"},attrs:{value:a.rating,disabled:""}}),e("span",{staticClass:"comment-time"},[t._v(t._s(t.formatTime(a.created_at)))]),a.updated_at&&a.updated_at!==a.created_at?e("span",{staticClass:"edited-tag"},[t._v(" ("+t._s(t.$t("community.edited"))+") ")]):t._e()],1)]),a.user&&a.user.id===t.currentUserId?e("div",{staticClass:"comment-actions"},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.startEdit(a)}}},[e("a-icon",{attrs:{type:"edit"}})],1)],1):t._e()],1),e("div",{staticClass:"comment-content"},[t._v(t._s(a.content))])])}),0)]),t.hasMore?e("div",{staticClass:"load-more"},[e("a-button",{attrs:{type:"link"},on:{click:function(e){return t.$emit("load-more")}}},[t._v(" "+t._s(t.$t("community.loadMore"))+" ")])],1):t._e()],1)},C=[],$=(a(42762),{name:"CommentList",props:{comments:{type:Array,default:function(){return[]}},total:{type:Number,default:0},loading:{type:Boolean,default:!1},canComment:{type:Boolean,default:!1},currentUserId:{type:[Number,String],default:null},myComment:{type:Object,default:null}},data:function(){return{submitting:!1,isEditing:!1,editingCommentId:null,formData:{rating:5,content:""}}},computed:{hasMore:function(){return this.comments.length=2?(e[0][0]+e[1][0]).toUpperCase():t.slice(0,2).toUpperCase()}},watch:{visible:function(t){t&&this.indicatorId?(this.loadDetail(),this.loadPerformance(),this.loadComments(1),this.loadMyComment()):this.resetData()}},methods:{resetData:function(){this.detail=null,this.performance=null,this.comments={items:[],total:0,page:1},this.myComment=null},loadDetail:function(){var t=this;return(0,r.A)((0,s.A)().m(function e(){var a;return(0,s.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loading=!0,e.p=1,e.n=2,(0,I.Ay)({url:"/api/community/indicators/".concat(t.indicatorId),method:"get"});case 2:a=e.v,1===a.code?t.detail=a.data:t.$message.error(a.msg||t.$t("community.loadFailed")),e.n=4;break;case 3:e.p=3,e.v,t.$message.error(t.$t("community.loadFailed"));case 4:return e.p=4,t.loading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},loadPerformance:function(){var t=this;return(0,r.A)((0,s.A)().m(function e(){var a;return(0,s.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,I.Ay)({url:"/api/community/indicators/".concat(t.indicatorId,"/performance"),method:"get"});case 1:a=e.v,1===a.code&&(t.performance=a.data),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadComments:function(){var t=arguments,e=this;return(0,r.A)((0,s.A)().m(function a(){var i,n;return(0,s.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return i=t.length>0&&void 0!==t[0]?t[0]:1,e.commentsLoading=!0,a.p=1,a.n=2,(0,I.Ay)({url:"/api/community/indicators/".concat(e.indicatorId,"/comments"),method:"get",params:{page:i,page_size:10}});case 2:n=a.v,1===n.code&&(e.comments.items=1===i?n.data.items:[].concat((0,_.A)(e.comments.items),(0,_.A)(n.data.items)),e.comments.total=n.data.total,e.comments.page=i),a.n=4;break;case 3:a.p=3,a.v;case 4:return a.p=4,e.commentsLoading=!1,a.f(4);case 5:return a.a(2)}},a,null,[[1,3,4,5]])}))()},loadMoreComments:function(){this.comments.items.lengthi&&(t.pagination.current=i)):t.$message.error(a.msg||t.$t("community.loadFailed")),e.n=4;break;case 3:e.p=3,e.v,t.$message.error(t.$t("community.loadFailed"));case 4:return e.p=4,t.loading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},loadMyPurchases:function(){var t=this;return(0,r.A)((0,s.A)().m(function e(){var a;return(0,s.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.purchasesLoading=!0,e.p=1,e.n=2,(0,I.Ay)({url:"/api/community/my-purchases",method:"get",params:{page:1,page_size:50}});case 2:a=e.v,1===a.code&&(t.myPurchases=a.data.items||[]),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.p=4,t.purchasesLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleSearch:function(){this.pagination.current=1,this.loadIndicators()},handleFilterChange:function(){this.pagination.current=1,this.loadIndicators()},handlePageChange:function(t){this.pagination.current=Number(t||1),this.loadIndicators()},openDetail:function(t){this.selectedIndicatorId=t.id,this.detailVisible=!0},openDetailById:function(t){this.showMyPurchases=!1,this.selectedIndicatorId=t,this.detailVisible=!0},handlePurchased:function(){this.loadIndicators()},goToCreate:function(){this.$router.push("/indicator-analysis")},goToUse:function(){this.showMyPurchases=!1,this.$router.push("/indicator-analysis")},formatDate:function(t){return t?new Date(t).toLocaleString():"-"},handleTabChange:function(t){"review"===t&&(this.loadPendingIndicators(),this.loadReviewStats())},loadReviewStats:function(){var t=this;return(0,r.A)((0,s.A)().m(function e(){var a;return(0,s.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,I.Ay)({url:"/api/community/admin/review-stats",method:"get"});case 1:a=e.v,1===a.code&&(t.reviewStats=a.data||{pending:0,approved:0,rejected:0}),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadPendingIndicators:function(){var t=this;return(0,r.A)((0,s.A)().m(function e(){var a;return(0,s.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.reviewLoading=!0,e.p=1,e.n=2,(0,I.Ay)({url:"/api/community/admin/pending-indicators",method:"get",params:{page:t.reviewPagination.current,page_size:t.reviewPagination.pageSize,review_status:t.reviewFilter}});case 2:a=e.v,1===a.code&&(t.pendingIndicators=a.data.items||[],t.reviewPagination.total=Number(a.data.total||0)),e.n=4;break;case 3:e.p=3,e.v,t.$message.error(t.$t("community.admin.loadFailed"));case 4:return e.p=4,t.reviewLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleReviewPageChange:function(t){this.reviewPagination.current=Number(t||1),this.loadPendingIndicators()},toggleCode:function(t){this.$set(this.expandedCodes,t,!this.expandedCodes[t])},getStatusColor:function(t){var e={pending:"orange",approved:"green",rejected:"red"};return e[t]||"default"},getStatusText:function(t){var e={pending:this.$t("community.admin.pending"),approved:this.$t("community.admin.approved"),rejected:this.$t("community.admin.rejected")};return e[t]||t},handleReview:function(t,e){this.reviewingIndicator=t,this.reviewAction=e,this.reviewNote="",this.showReviewModal=!0},submitReview:function(){var t=this;return(0,r.A)((0,s.A)().m(function e(){var a;return(0,s.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.reviewingIndicator){e.n=1;break}return e.a(2);case 1:return e.p=1,e.n=2,(0,I.Ay)({url:"/api/community/admin/indicators/".concat(t.reviewingIndicator.id,"/review"),method:"post",data:{action:t.reviewAction,note:t.reviewNote}});case 2:a=e.v,1===a.code?(t.$message.success(t.$t("community.admin.reviewSuccess")),t.showReviewModal=!1,t.loadPendingIndicators(),t.loadReviewStats()):t.$message.error(a.msg||t.$t("community.admin.reviewFailed")),e.n=4;break;case 3:e.p=3,e.v,t.$message.error(t.$t("community.admin.reviewFailed"));case 4:return e.a(2)}},e,null,[[1,3]])}))()},handleUnpublish:function(t){var e=this;return(0,r.A)((0,s.A)().m(function a(){return(0,s.A)().w(function(a){while(1)switch(a.n){case 0:e.$confirm({title:e.$t("community.admin.unpublishConfirm"),content:e.$t("community.admin.unpublishHint"),okText:e.$t("community.admin.confirm"),cancelText:e.$t("community.admin.cancel"),onOk:function(){var a=(0,r.A)((0,s.A)().m(function a(){var i;return(0,s.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,I.Ay)({url:"/api/community/admin/indicators/".concat(t.id,"/unpublish"),method:"post",data:{note:""}});case 1:i=a.v,1===i.code?(e.$message.success(e.$t("community.admin.unpublishSuccess")),e.loadPendingIndicators(),e.loadReviewStats()):e.$message.error(i.msg||e.$t("community.admin.unpublishFailed")),a.n=3;break;case 2:a.p=2,a.v,e.$message.error(e.$t("community.admin.unpublishFailed"));case 3:return a.a(2)}},a,null,[[0,2]])}));function i(){return a.apply(this,arguments)}return i}()});case 1:return a.a(2)}},a)}))()},handleDelete:function(t){var e=this;return(0,r.A)((0,s.A)().m(function a(){var i;return(0,s.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,I.Ay)({url:"/api/community/admin/indicators/".concat(t.id),method:"delete"});case 1:i=a.v,1===i.code?(e.$message.success(e.$t("community.admin.deleteSuccess")),e.loadPendingIndicators(),e.loadReviewStats()):e.$message.error(i.msg||e.$t("community.admin.deleteFailed")),a.n=3;break;case 2:a.p=2,a.v,e.$message.error(e.$t("community.admin.deleteFailed"));case 3:return a.a(2)}},a,null,[[0,2]])}))()}}},z=T,M=(0,v.A)(z,i,n,!1,null,"f59e48f0",null),F=M.exports}}]); \ No newline at end of file diff --git a/frontend/dist/js/484-legacy.e4323859.js b/frontend/dist/js/484-legacy.e4323859.js deleted file mode 100644 index 2deabc0..0000000 --- a/frontend/dist/js/484-legacy.e4323859.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[484],{4103:function(t,e,o){o.r(e),o.d(e,{default:function(){return R}});o(74423),o(62010),o(9868),o(21699);var s=function(){var t=this,e=t._self._c;return e("div",{staticClass:"portfolio-container",class:{"theme-dark":t.isDarkTheme,embedded:t.embedded}},[e("div",{staticClass:"summary-section"},[e("div",{staticClass:"summary-card total-value"},[e("div",{staticClass:"card-icon"},[e("a-icon",{attrs:{type:"wallet"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.totalValue")))]),e("div",{staticClass:"card-value"},[e("span",{staticClass:"currency"},[t._v("$")]),e("span",{staticClass:"amount"},[t._v(t._s(t.formatNumber(t.summary.total_market_value)))])]),void 0!==t.summary.today_change?e("div",{staticClass:"card-sub"},[e("span",{class:t.summary.today_change>=0?"positive":"negative"},[t._v(" "+t._s(t.$t("portfolio.summary.today"))+": "+t._s(t.summary.today_change>=0?"+":"")+"$"+t._s(t.formatNumber(t.summary.today_change))+" ")])]):t._e()])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"card-icon cost"},[e("a-icon",{attrs:{type:"dollar"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.totalCost")))]),e("div",{staticClass:"card-value"},[t._v("$"+t._s(t.formatNumber(t.summary.total_cost)))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"card-icon",class:t.summary.total_pnl>=0?"profit":"loss"},[e("a-icon",{attrs:{type:t.summary.total_pnl>=0?"rise":"fall"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.totalPnl")))]),e("div",{staticClass:"card-value",class:t.summary.total_pnl>=0?"positive":"negative"},[t._v(" "+t._s(t.summary.total_pnl>=0?"+":"")+"$"+t._s(t.formatNumber(t.summary.total_pnl))+" "),e("span",{staticClass:"percent"},[t._v("("+t._s(t.summary.total_pnl_percent>=0?"+":"")+t._s(t.summary.total_pnl_percent)+"%)")])])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"card-icon positions"},[e("a-icon",{attrs:{type:"fund"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.positionCount")))]),e("div",{staticClass:"card-value"},[t._v(" "+t._s(t.summary.position_count)+" "),t.profitLossStats.profit>0||t.profitLossStats.loss>0?e("span",{staticClass:"position-detail"},[t._v(" ("),e("span",{staticClass:"positive"},[t._v(t._s(t.profitLossStats.profit))]),t._v("/"),e("span",{staticClass:"negative"},[t._v(t._s(t.profitLossStats.loss))]),t._v(") ")]):t._e()]),e("div",{staticClass:"card-sub"},[t._v(" "+t._s(t.$t("portfolio.summary.profitLossRatio"))+" ")])])])]),e("div",{staticClass:"summary-section secondary"},[e("div",{staticClass:"summary-card mini"},[e("div",{staticClass:"card-icon today",class:t.summary.today_pnl>=0?"profit":"loss"},[e("a-icon",{attrs:{type:"stock"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.todayPnl")))]),e("div",{staticClass:"card-value",class:t.summary.today_pnl>=0?"positive":"negative"},[t._v(" "+t._s(t.summary.today_pnl>=0?"+":"")+"$"+t._s(t.formatNumber(t.summary.today_pnl||0))+" ")])])]),e("div",{staticClass:"summary-card mini"},[e("div",{staticClass:"card-icon best"},[e("a-icon",{attrs:{type:"trophy"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.bestPerformer")))]),t.bestPerformer?e("div",{staticClass:"card-value small positive"},[t._v(" "+t._s(t.bestPerformer.symbol)+" +"+t._s(t.bestPerformer.pnl_percent)+"% ")]):e("div",{staticClass:"card-value small"},[t._v("-")])])]),e("div",{staticClass:"summary-card mini"},[e("div",{staticClass:"card-icon worst"},[e("a-icon",{attrs:{type:"warning"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.worstPerformer")))]),t.worstPerformer?e("div",{staticClass:"card-value small negative"},[t._v(" "+t._s(t.worstPerformer.symbol)+" "+t._s(t.worstPerformer.pnl_percent)+"% ")]):e("div",{staticClass:"card-value small"},[t._v("-")])])]),e("div",{staticClass:"summary-card mini sync-card"},[e("div",{staticClass:"card-icon sync",class:{syncing:t.isSyncing}},[e("a-icon",{attrs:{type:"sync",spin:t.isSyncing}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.priceSync")))]),e("div",{staticClass:"card-value small"},[t._v(" "+t._s(t.lastSyncTime?t.formatSyncTime(t.lastSyncTime):"-")+" ")]),e("div",{staticClass:"card-sub"},[t._v(" "+t._s(t.$t("portfolio.summary.syncInterval"))+": 30s "),e("a-button",{staticStyle:{padding:"0","margin-left":"8px"},attrs:{type:"link",size:"small",loading:t.isSyncing},on:{click:t.refreshPrices}},[t.isSyncing?t._e():e("a-icon",{attrs:{type:"reload"}})],1)],1)])])]),e("div",{staticClass:"main-content"},[e("div",{staticClass:"positions-section"},[e("div",{staticClass:"section-header"},[e("h3",[e("a-icon",{attrs:{type:"stock"}}),e("span",[t._v(t._s(t.$t("portfolio.positions.title")))])],1),e("div",{staticClass:"header-actions"},[e("a-radio-group",{staticStyle:{"margin-right":"12px"},attrs:{size:"small"},model:{value:t.viewMode,callback:function(e){t.viewMode=e},expression:"viewMode"}},[e("a-radio-button",{attrs:{value:"grid"}},[e("a-icon",{attrs:{type:"appstore"}})],1),e("a-radio-button",{attrs:{value:"group"}},[e("a-icon",{attrs:{type:"folder"}})],1)],1),"grid"===t.viewMode?e("a-select",{staticStyle:{width:"150px","margin-right":"12px"},attrs:{placeholder:t.$t("portfolio.groups.all"),"allow-clear":""},on:{change:t.filterByGroup},model:{value:t.selectedGroup,callback:function(e){t.selectedGroup=e},expression:"selectedGroup"}},[e("a-select-option",{attrs:{value:""}},[t._v(t._s(t.$t("portfolio.groups.all")))]),e("a-select-option",{attrs:{value:"__ungrouped__"}},[t._v(t._s(t.$t("portfolio.groups.ungrouped")))]),t._l(t.groups,function(o){return e("a-select-option",{key:o.name,attrs:{value:o.name}},[t._v(" "+t._s(o.name)+" ("+t._s(o.count)+") ")])})],2):t._e(),e("a-button",{attrs:{type:"primary"},on:{click:function(e){t.showAddPositionModal=!0}}},[e("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("portfolio.positions.add"))+" ")],1)],1)]),e("a-spin",{attrs:{spinning:t.loadingPositions}},[e("div",{staticClass:"positions-list"},[0===t.positions.length?e("div",{staticClass:"empty-state"},[e("a-empty",{attrs:{description:t.$t("portfolio.positions.empty")}},[e("a-button",{attrs:{type:"primary"},on:{click:function(e){t.showAddPositionModal=!0}}},[e("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("portfolio.positions.addFirst"))+" ")],1)],1)],1):"grid"===t.viewMode?e("div",{staticClass:"position-grid"},t._l(t.filteredPositions,function(o){return e("div",{key:o.id,staticClass:"position-card",class:{profit:o.pnl>=0,loss:o.pnl<0}},[e("div",{staticClass:"position-header"},[e("div",{staticClass:"symbol-info"},[e("a-tag",{attrs:{color:t.getMarketColor(o.market),size:"small"}},[t._v(t._s(t.getMarketName(o.market)))]),e("span",{staticClass:"symbol"},[t._v(t._s(o.symbol))]),e("span",{staticClass:"name"},[t._v(t._s(o.name))]),o.group_name?e("a-tag",{staticStyle:{"margin-left":"4px"},attrs:{size:"small",color:"blue"}},[e("a-icon",{attrs:{type:"folder"}}),t._v(" "+t._s(o.group_name)+" ")],1):t._e()],1),e("div",{staticClass:"position-actions"},[e("a-tooltip",{attrs:{title:t.hasAlertForPosition(o.id)?t.$t("portfolio.alerts.editAlert"):t.$t("portfolio.alerts.addAlert")}},[e("a-button",{class:{"has-alert":t.hasAlertForPosition(o.id)},attrs:{type:"link",size:"small"},on:{click:function(e){return t.showAddAlertForPosition(o)}}},[e("a-icon",{attrs:{type:"bell",theme:t.hasAlertForPosition(o.id)?"filled":"outlined"}})],1)],1),e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.editPosition(o)}}},[e("a-icon",{attrs:{type:"edit"}})],1),e("a-popconfirm",{attrs:{title:t.$t("portfolio.positions.deleteConfirm")},on:{confirm:function(e){return t.deletePosition(o.id)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}})],1)],1)],1)]),e("div",{staticClass:"position-body"},[e("div",{staticClass:"price-row"},[e("div",{staticClass:"current-price"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.currentPrice")))]),e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatPrice(o.current_price)))]),e("span",{staticClass:"change",class:o.price_change>=0?"up":"down"},[t._v(" "+t._s(o.price_change>=0?"▲":"▼")+t._s(Math.abs(o.price_change_percent).toFixed(2))+"% ")])]),e("div",{staticClass:"entry-price"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.entryPrice")))]),e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatPrice(o.entry_price)))])])]),e("div",{staticClass:"quantity-row"},[e("div",{staticClass:"item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.quantity")))]),e("span",{staticClass:"value"},[t._v(t._s(t.formatNumber(o.quantity,4)))])]),e("div",{staticClass:"item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.side")))]),e("a-tag",{attrs:{color:"long"===o.side?"green":"red",size:"small"}},[t._v(" "+t._s("long"===o.side?t.$t("portfolio.positions.long"):t.$t("portfolio.positions.short"))+" ")])],1),e("div",{staticClass:"item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.marketValue")))]),e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatNumber(o.market_value)))])])])]),e("div",{staticClass:"position-footer"},[e("div",{staticClass:"pnl"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.pnl")))]),e("span",{staticClass:"value",class:o.pnl>=0?"positive":"negative"},[t._v(" "+t._s(o.pnl>=0?"+":"")+t._s(t.getCurrencySymbol(o.market))+t._s(t.formatNumber(o.pnl))+" "),e("span",{staticClass:"percent"},[t._v("("+t._s(o.pnl_percent>=0?"+":"")+t._s(o.pnl_percent)+"%)")])])])])])}),0):e("div",{staticClass:"position-collapse-view"},[e("a-collapse",{attrs:{bordered:!1},model:{value:t.activeGroups,callback:function(e){t.activeGroups=e},expression:"activeGroups"}},[t.ungroupedPositions.length>0?e("a-collapse-panel",{key:"__ungrouped__",staticClass:"group-panel"},[e("template",{slot:"header"},[e("div",{staticClass:"group-header"},[e("span",{staticClass:"group-name"},[e("a-icon",{staticStyle:{"margin-right":"8px"},attrs:{type:"inbox"}}),t._v(" "+t._s(t.$t("portfolio.groups.ungrouped"))+" ")],1),e("span",{staticClass:"group-stats"},[e("span",{staticClass:"count"},[t._v(t._s(t.ungroupedPositions.length)+" "+t._s(t.$t("portfolio.positions.items")))]),e("span",{staticClass:"group-pnl",class:t.getGroupPnl(t.ungroupedPositions)>=0?"positive":"negative"},[t._v(" "+t._s(t.getGroupPnl(t.ungroupedPositions)>=0?"+":"")+"$"+t._s(t.formatNumber(t.getGroupPnl(t.ungroupedPositions)))+" ")])])])]),e("div",{staticClass:"position-grid compact"},t._l(t.ungroupedPositions,function(o){return e("div",{key:o.id,staticClass:"position-card compact",class:{profit:o.pnl>=0,loss:o.pnl<0}},[e("div",{staticClass:"position-header"},[e("div",{staticClass:"symbol-info"},[e("a-tag",{attrs:{color:t.getMarketColor(o.market),size:"small"}},[t._v(t._s(t.getMarketName(o.market)))]),e("span",{staticClass:"symbol"},[t._v(t._s(o.symbol))]),e("span",{staticClass:"name"},[t._v(t._s(o.name))])],1),e("div",{staticClass:"position-actions"},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.editPosition(o)}}},[e("a-icon",{attrs:{type:"edit"}})],1),e("a-popconfirm",{attrs:{title:t.$t("portfolio.positions.deleteConfirm")},on:{confirm:function(e){return t.deletePosition(o.id)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}})],1)],1)],1)]),e("div",{staticClass:"position-compact-body"},[e("div",{staticClass:"compact-item"},[e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatPrice(o.current_price)))]),e("span",{staticClass:"change",class:o.price_change>=0?"up":"down"},[t._v(" "+t._s(o.price_change>=0?"▲":"▼")+t._s(Math.abs(o.price_change_percent).toFixed(2))+"% ")])]),e("div",{staticClass:"compact-item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.quantity"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatNumber(o.quantity,4)))])]),e("div",{staticClass:"compact-item pnl",class:o.pnl>=0?"positive":"negative"},[t._v(" "+t._s(o.pnl>=0?"+":"")+t._s(t.getCurrencySymbol(o.market))+t._s(t.formatNumber(o.pnl))+" "),e("span",{staticClass:"percent"},[t._v("("+t._s(o.pnl_percent>=0?"+":"")+t._s(o.pnl_percent)+"%)")])])])])}),0)],2):t._e(),t._l(t.groupsWithPositions,function(o){return e("a-collapse-panel",{key:o.name,staticClass:"group-panel"},[e("template",{slot:"header"},[e("div",{staticClass:"group-header"},[e("span",{staticClass:"group-name"},[e("a-icon",{staticStyle:{"margin-right":"8px",color:"#1890ff"},attrs:{type:"folder"}}),t._v(" "+t._s(o.name)+" ")],1),e("span",{staticClass:"group-stats"},[e("span",{staticClass:"count"},[t._v(t._s(o.positions.length)+" "+t._s(t.$t("portfolio.positions.items")))]),e("span",{staticClass:"group-pnl",class:t.getGroupPnl(o.positions)>=0?"positive":"negative"},[t._v(" "+t._s(t.getGroupPnl(o.positions)>=0?"+":"")+"$"+t._s(t.formatNumber(t.getGroupPnl(o.positions)))+" ")])])])]),e("div",{staticClass:"position-grid compact"},t._l(o.positions,function(o){return e("div",{key:o.id,staticClass:"position-card compact",class:{profit:o.pnl>=0,loss:o.pnl<0}},[e("div",{staticClass:"position-header"},[e("div",{staticClass:"symbol-info"},[e("a-tag",{attrs:{color:t.getMarketColor(o.market),size:"small"}},[t._v(t._s(t.getMarketName(o.market)))]),e("span",{staticClass:"symbol"},[t._v(t._s(o.symbol))]),e("span",{staticClass:"name"},[t._v(t._s(o.name))])],1),e("div",{staticClass:"position-actions"},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.editPosition(o)}}},[e("a-icon",{attrs:{type:"edit"}})],1),e("a-popconfirm",{attrs:{title:t.$t("portfolio.positions.deleteConfirm")},on:{confirm:function(e){return t.deletePosition(o.id)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}})],1)],1)],1)]),e("div",{staticClass:"position-compact-body"},[e("div",{staticClass:"compact-item"},[e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatPrice(o.current_price)))]),e("span",{staticClass:"change",class:o.price_change>=0?"up":"down"},[t._v(" "+t._s(o.price_change>=0?"▲":"▼")+t._s(Math.abs(o.price_change_percent).toFixed(2))+"% ")])]),e("div",{staticClass:"compact-item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.quantity"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatNumber(o.quantity,4)))])]),e("div",{staticClass:"compact-item pnl",class:o.pnl>=0?"positive":"negative"},[t._v(" "+t._s(o.pnl>=0?"+":"")+t._s(t.getCurrencySymbol(o.market))+t._s(t.formatNumber(o.pnl))+" "),e("span",{staticClass:"percent"},[t._v("("+t._s(o.pnl_percent>=0?"+":"")+t._s(o.pnl_percent)+"%)")])])])])}),0)],2)})],2)],1)])])],1),e("div",{ref:"monitorsSection",staticClass:"monitors-section"},[e("div",{staticClass:"section-header"},[e("h3",[e("a-icon",{attrs:{type:"eye"}}),e("span",[t._v(t._s(t.$t("portfolio.monitors.title")))])],1),e("a-button",{attrs:{type:"primary"},on:{click:t.openAddMonitorModal}},[e("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("portfolio.monitors.add"))+" ")],1)],1),e("a-spin",{attrs:{spinning:t.loadingMonitors}},[e("div",{staticClass:"monitors-list"},[0===t.monitors.length?e("div",{staticClass:"empty-state small"},[e("a-empty",{attrs:{description:t.$t("portfolio.monitors.empty"),image:t.simpleImage}},[e("a-button",{attrs:{type:"primary",size:"small"},on:{click:t.openAddMonitorModal}},[e("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("portfolio.monitors.addFirst"))+" ")],1)],1)],1):e("div",t._l(t.monitors,function(o){return e("div",{key:o.id,staticClass:"monitor-card"},[e("div",{staticClass:"monitor-header"},[e("div",{staticClass:"monitor-name"},[e("a-icon",{attrs:{type:"robot"}}),e("span",[t._v(t._s(o.name))])],1),e("a-switch",{attrs:{checked:o.is_active,size:"small"},on:{change:function(e){return t.toggleMonitor(o.id,e)}}})],1),e("div",{staticClass:"monitor-body"},[e("div",{staticClass:"monitor-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.monitors.interval"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.getIntervalText(o.config.interval_minutes)))])]),e("div",{staticClass:"monitor-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.form.monitorScope"))+":")]),e("span",{staticClass:"value"},[t.getMonitorPositionIds(o).length>0?[e("a-tooltip",[e("template",{slot:"title"},t._l(t.getMonitorPositionIds(o),function(o){return e("div",{key:o},[t._v(" "+t._s(t.getPositionNameById(o))+" ")])}),0),e("span",{staticClass:"scope-selected"},[t._v(" "+t._s(t.$t("portfolio.form.selectedCount",{count:t.getMonitorPositionIds(o).length,total:t.positions.length}))+" ")])],2)]:e("span",{staticClass:"scope-all"},[t._v(t._s(t.$t("portfolio.form.allPositions")))])],2)]),o.last_run_at?e("div",{staticClass:"monitor-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.monitors.lastRun"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatTime(o.last_run_at)))])]):t._e(),o.next_run_at&&o.is_active?e("div",{staticClass:"monitor-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.monitors.nextRun"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatTime(o.next_run_at)))])]):t._e(),o.notification_config.channels?e("div",{staticClass:"monitor-channels"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.monitors.channels"))+":")]),t._l(o.notification_config.channels,function(o){return e("a-tag",{key:o,attrs:{size:"small"}},[t._v(" "+t._s(o)+" ")])})],2):t._e()]),e("div",{staticClass:"monitor-actions"},[e("a-button",{attrs:{type:"link",size:"small",loading:t.runningMonitor===o.id},on:{click:function(e){return t.runMonitorNow(o.id)}}},[e("a-icon",{attrs:{type:"play-circle"}}),t._v(" "+t._s(t.$t("portfolio.monitors.runNow"))+" ")],1),e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.editMonitor(o)}}},[e("a-icon",{attrs:{type:"edit"}})],1),e("a-popconfirm",{attrs:{title:t.$t("portfolio.monitors.deleteConfirm")},on:{confirm:function(e){return t.deleteMonitor(o.id)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}})],1)],1)],1)])}),0)])])],1)]),e("a-modal",{attrs:{title:t.editingPosition?t.$t("portfolio.modal.editPosition"):t.$t("portfolio.modal.addPosition"),visible:t.showAddPositionModal,confirmLoading:t.savingPosition,width:"600px"},on:{ok:t.handleSavePosition,cancel:t.closePositionModal}},[e("a-form",{attrs:{form:t.positionForm,"label-col":{span:6},"wrapper-col":{span:16}}},[e("a-form-item",{attrs:{label:t.$t("portfolio.form.market")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["market",{rules:[{required:!0,message:t.$t("portfolio.form.marketRequired")}]}],expression:"['market', { rules: [{ required: true, message: $t('portfolio.form.marketRequired') }] }]"}],attrs:{placeholder:t.$t("portfolio.form.selectMarket"),disabled:!!t.editingPosition},on:{change:t.handleMarketChange}},t._l(t.marketTypes,function(o){return e("a-select-option",{key:o.value,attrs:{value:o.value}},[t._v(" "+t._s(t.$t(o.i18nKey))+" ")])}),1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.symbol")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["symbol",{rules:[{required:!0,message:t.$t("portfolio.form.symbolRequired")}]}],expression:"['symbol', { rules: [{ required: true, message: $t('portfolio.form.symbolRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{"show-search":"",placeholder:t.$t("portfolio.form.searchSymbol"),"default-active-first-option":!1,"show-arrow":!1,"filter-option":!1,"not-found-content":null,disabled:!!t.editingPosition},on:{search:t.handleSymbolSearch,change:t.handleSymbolSelect}},[t._l(t.symbolSearchResults,function(o){return e("a-select-option",{key:o.symbol,attrs:{value:o.symbol}},[e("div",{staticClass:"symbol-option"},[e("strong",[t._v(t._s(o.symbol))]),e("span",{staticClass:"symbol-name"},[t._v(t._s(o.name))])])])}),t.symbolSearchKeyword&&0===t.symbolSearchResults.length?e("a-select-option",{key:"__manual__"+t.symbolSearchKeyword.toUpperCase(),attrs:{value:t.symbolSearchKeyword.toUpperCase()}},[e("div",{staticClass:"symbol-option manual-input"},[e("a-icon",{staticStyle:{"margin-right":"6px",color:"#1890ff"},attrs:{type:"edit"}}),e("span",[t._v(t._s(t.$t("portfolio.form.useAsSymbol"))+" ")]),e("strong",{staticStyle:{color:"#1890ff"}},[t._v(t._s(t.symbolSearchKeyword.toUpperCase()))]),e("span",[t._v(" "+t._s(t.$t("portfolio.form.asSymbolCode")))])],1)]):t._e()],2),e("div",{staticClass:"symbol-hint",staticStyle:{"font-size":"12px",color:"#999","margin-top":"4px"}},[t._v(" "+t._s(t.$t("portfolio.form.symbolHint"))+" ")])],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.side")}},[e("a-radio-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["side",{initialValue:"long"}],expression:"['side', { initialValue: 'long' }]"}],attrs:{disabled:!!t.editingPosition}},[e("a-radio-button",{attrs:{value:"long"}},[t._v(t._s(t.$t("portfolio.positions.long")))]),e("a-radio-button",{attrs:{value:"short"}},[t._v(t._s(t.$t("portfolio.positions.short")))])],1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.quantity")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["quantity",{rules:[{required:!0,message:t.$t("portfolio.form.quantityRequired")}]}],expression:"['quantity', { rules: [{ required: true, message: $t('portfolio.form.quantityRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{min:1e-8,step:1,placeholder:t.$t("portfolio.form.enterQuantity")}})],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.entryPrice")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["entry_price",{rules:[{required:!0,message:t.$t("portfolio.form.entryPriceRequired")}]}],expression:"['entry_price', { rules: [{ required: true, message: $t('portfolio.form.entryPriceRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{min:1e-8,step:.01,placeholder:t.$t("portfolio.form.enterEntryPrice")}})],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.notes")}},[e("a-textarea",{directives:[{name:"decorator",rawName:"v-decorator",value:["notes"],expression:"['notes']"}],attrs:{rows:2,placeholder:t.$t("portfolio.form.enterNotes")}})],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.group")}},[e("a-auto-complete",{directives:[{name:"decorator",rawName:"v-decorator",value:["group_name"],expression:"['group_name']"}],attrs:{placeholder:t.$t("portfolio.form.enterGroup"),dataSource:t.groupNames}})],1)],1)],1),e("a-modal",{attrs:{title:t.editingAlert?t.$t("portfolio.modal.editAlert"):t.$t("portfolio.modal.addAlert"),visible:t.showAddAlertModal,width:"560px"},on:{cancel:t.closeAlertModal}},[e("template",{slot:"footer"},[e("div",{staticClass:"alert-modal-footer"},[t.editingAlert?e("a-button",{attrs:{type:"danger",ghost:"",loading:t.deletingAlert},on:{click:t.confirmDeleteAlert}},[e("a-icon",{attrs:{type:"delete"}}),t._v(" "+t._s(t.$t("portfolio.alerts.delete"))+" ")],1):e("span"),e("div",{staticClass:"footer-right"},[e("a-button",{on:{click:t.closeAlertModal}},[t._v(t._s(t.$t("common.cancel")))]),e("a-button",{attrs:{type:"primary",loading:t.savingAlert},on:{click:t.handleSaveAlert}},[t._v(" "+t._s(t.$t("common.save"))+" ")])],1)],1)]),e("a-form",{attrs:{form:t.alertForm,"label-col":{span:6},"wrapper-col":{span:16}}},[e("a-form-item",{attrs:{label:t.$t("portfolio.form.symbol")}},[e("div",{staticClass:"alert-symbol-info"},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["symbol"],expression:"['symbol']"}],staticClass:"symbol-input",attrs:{disabled:""}}),t.alertPosition?e("div",{staticClass:"current-price-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.alerts.currentPrice"))+":")]),e("span",{staticClass:"price"},[t._v("$"+t._s(t.formatNumber(t.alertPosition.current_price||t.alertPosition.entry_price)))])]):t._e()],1)]),e("a-form-item",{attrs:{label:t.$t("portfolio.alerts.alertType")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["alert_type",{initialValue:"price_above",rules:[{required:!0}]}],expression:"['alert_type', { initialValue: 'price_above', rules: [{ required: true }] }]"}]},[e("a-select-option",{attrs:{value:"price_above"}},[e("a-icon",{staticStyle:{color:"#52c41a","margin-right":"6px"},attrs:{type:"rise"}}),t._v(" "+t._s(t.$t("portfolio.alerts.priceAbove"))+" ")],1),e("a-select-option",{attrs:{value:"price_below"}},[e("a-icon",{staticStyle:{color:"#f5222d","margin-right":"6px"},attrs:{type:"fall"}}),t._v(" "+t._s(t.$t("portfolio.alerts.priceBelow"))+" ")],1),e("a-select-option",{attrs:{value:"pnl_above"}},[e("a-icon",{staticStyle:{color:"#52c41a","margin-right":"6px"},attrs:{type:"dollar"}}),t._v(" "+t._s(t.$t("portfolio.alerts.pnlAbove"))+" ")],1),e("a-select-option",{attrs:{value:"pnl_below"}},[e("a-icon",{staticStyle:{color:"#f5222d","margin-right":"6px"},attrs:{type:"dollar"}}),t._v(" "+t._s(t.$t("portfolio.alerts.pnlBelow"))+" ")],1)],1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.alerts.threshold")}},[e("div",{staticClass:"threshold-input-wrapper"},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["threshold",{rules:[{required:!0,message:t.$t("portfolio.alerts.thresholdRequired")}]}],expression:"['threshold', { rules: [{ required: true, message: $t('portfolio.alerts.thresholdRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{step:t.alertTypeIsPrice?.01:1,placeholder:t.alertTypeIsPrice?t.$t("portfolio.alerts.enterPrice"):t.$t("portfolio.alerts.enterPercent"),precision:t.alertTypeIsPrice?4:2}}),t.alertTypeIsPrice?e("span",{staticClass:"alert-unit"},[t._v("$")]):e("span",{staticClass:"alert-unit"},[t._v("%")])],1),t.alertPosition&&t.alertTypeIsPrice?e("div",{staticClass:"threshold-hint"},[t._v(" "+t._s(t.$t("portfolio.alerts.currentPriceHint"))+": $"+t._s(t.formatNumber(t.alertPosition.current_price||t.alertPosition.entry_price))+" ")]):t._e()]),e("a-form-item",{attrs:{label:t.$t("portfolio.alerts.repeatInterval")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["repeat_interval",{initialValue:0}],expression:"['repeat_interval', { initialValue: 0 }]"}]},[e("a-select-option",{attrs:{value:0}},[t._v(t._s(t.$t("portfolio.alerts.noRepeat")))]),e("a-select-option",{attrs:{value:5}},[t._v(t._s(t.$t("portfolio.alerts.every5min")))]),e("a-select-option",{attrs:{value:15}},[t._v(t._s(t.$t("portfolio.alerts.every15min")))]),e("a-select-option",{attrs:{value:30}},[t._v(t._s(t.$t("portfolio.alerts.every30min")))]),e("a-select-option",{attrs:{value:60}},[t._v(t._s(t.$t("portfolio.alerts.every1hour")))]),e("a-select-option",{attrs:{value:240}},[t._v(t._s(t.$t("portfolio.alerts.every4hours")))]),e("a-select-option",{attrs:{value:1440}},[t._v(t._s(t.$t("portfolio.alerts.onceDaily")))])],1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.notifyChannels")}},[e("a-checkbox-group",{model:{value:t.alertChannels,callback:function(e){t.alertChannels=e},expression:"alertChannels"}},[e("a-checkbox",{attrs:{value:"browser"}},[e("a-icon",{attrs:{type:"bell"}}),t._v(" "+t._s(t.$t("portfolio.form.browser"))+" ")],1),e("a-checkbox",{attrs:{value:"telegram"}},[e("a-icon",{attrs:{type:"message"}}),t._v(" Telegram ")],1),e("a-checkbox",{attrs:{value:"email"}},[e("a-icon",{attrs:{type:"mail"}}),t._v(" "+t._s(t.$t("portfolio.form.email"))+" ")],1)],1)],1),t.alertChannels.includes("telegram")||t.alertChannels.includes("email")?e("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"info",showIcon:""},scopedSlots:t._u([{key:"message",fn:function(){return[e("span",[t._v(" "+t._s(t.$t("portfolio.form.notificationFromProfile"))+" "),e("router-link",{staticStyle:{"margin-left":"8px"},attrs:{to:"/profile"}},[e("a-icon",{attrs:{type:"setting"}}),t._v(" "+t._s(t.$t("portfolio.form.goToProfile"))+" ")],1)],1)]},proxy:!0}],null,!1,440262090)}):t._e(),e("a-form-item",{attrs:{label:t.$t("portfolio.alerts.enabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["is_active",{initialValue:!0,valuePropName:"checked"}],expression:"['is_active', { initialValue: true, valuePropName: 'checked' }]"}]}),e("span",{staticClass:"switch-label"},[t._v(t._s(t.$t("portfolio.alerts.enabledDesc")))])],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.notes")}},[e("a-textarea",{directives:[{name:"decorator",rawName:"v-decorator",value:["notes"],expression:"['notes']"}],attrs:{placeholder:t.$t("portfolio.form.enterNotes"),autoSize:{minRows:2,maxRows:4}}})],1)],1)],2),e("a-modal",{attrs:{title:t.editingMonitor?t.$t("portfolio.modal.editMonitor"):t.$t("portfolio.modal.addMonitor"),visible:t.showAddMonitorModal,confirmLoading:t.savingMonitor,width:"600px"},on:{ok:t.handleSaveMonitor,cancel:t.closeMonitorModal}},[e("a-form",{attrs:{form:t.monitorForm,"label-col":{span:6},"wrapper-col":{span:16}}},[e("a-form-item",{attrs:{label:t.$t("portfolio.form.monitorName")}},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["name",{rules:[{required:!0,message:t.$t("portfolio.form.monitorNameRequired")}]}],expression:"['name', { rules: [{ required: true, message: $t('portfolio.form.monitorNameRequired') }] }]"}],attrs:{placeholder:t.$t("portfolio.form.enterMonitorName")}})],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.interval")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["interval_minutes",{initialValue:60,rules:[{required:!0}]}],expression:"['interval_minutes', { initialValue: 60, rules: [{ required: true }] }]"}]},[e("a-select-option",{attrs:{value:5}},[t._v("5 "+t._s(t.$t("portfolio.form.minutes")))]),e("a-select-option",{attrs:{value:10}},[t._v("10 "+t._s(t.$t("portfolio.form.minutes")))]),e("a-select-option",{attrs:{value:30}},[t._v("30 "+t._s(t.$t("portfolio.form.minutes")))]),e("a-select-option",{attrs:{value:60}},[t._v("1 "+t._s(t.$t("portfolio.form.hour")))]),e("a-select-option",{attrs:{value:120}},[t._v("2 "+t._s(t.$t("portfolio.form.hours")))]),e("a-select-option",{attrs:{value:240}},[t._v("4 "+t._s(t.$t("portfolio.form.hours")))]),e("a-select-option",{attrs:{value:480}},[t._v("8 "+t._s(t.$t("portfolio.form.hours")))]),e("a-select-option",{attrs:{value:1440}},[t._v("24 "+t._s(t.$t("portfolio.form.hours")))])],1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.notifyChannels")}},[e("a-checkbox-group",{model:{value:t.monitorChannels,callback:function(e){t.monitorChannels=e},expression:"monitorChannels"}},[e("a-checkbox",{attrs:{value:"browser"}},[t._v(t._s(t.$t("portfolio.form.browser")))]),e("a-checkbox",{attrs:{value:"telegram"}},[t._v("Telegram")]),e("a-checkbox",{attrs:{value:"email"}},[t._v(t._s(t.$t("portfolio.form.email")))])],1)],1),t.monitorChannels.includes("telegram")||t.monitorChannels.includes("email")?e("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"info",showIcon:""},scopedSlots:t._u([{key:"message",fn:function(){return[e("span",[t._v(" "+t._s(t.$t("portfolio.form.notificationFromProfile"))+" "),e("router-link",{staticStyle:{"margin-left":"8px"},attrs:{to:"/profile"}},[e("a-icon",{attrs:{type:"setting"}}),t._v(" "+t._s(t.$t("portfolio.form.goToProfile"))+" ")],1)],1)]},proxy:!0}],null,!1,440262090)}):t._e(),e("a-form-item",{attrs:{label:t.$t("portfolio.form.monitorScope")}},[e("a-radio-group",{on:{change:t.handleMonitorScopeChange},model:{value:t.monitorScope,callback:function(e){t.monitorScope=e},expression:"monitorScope"}},[e("a-radio",{attrs:{value:"all"}},[t._v(t._s(t.$t("portfolio.form.allPositions")))]),e("a-radio",{attrs:{value:"selected"}},[t._v(t._s(t.$t("portfolio.form.selectedPositions")))])],1)],1),"selected"===t.monitorScope?e("a-form-item",{attrs:{label:t.$t("portfolio.form.selectPositions")}},[e("a-checkbox-group",{staticClass:"position-checkbox-group",model:{value:t.selectedMonitorPositions,callback:function(e){t.selectedMonitorPositions=e},expression:"selectedMonitorPositions"}},t._l(t.positions,function(o){return e("div",{key:o.id,staticClass:"position-checkbox-item"},[e("a-checkbox",{staticClass:"position-checkbox",attrs:{value:o.id}},[e("div",{staticClass:"position-checkbox-label"},[e("div",{staticClass:"position-left"},[e("a-tag",{attrs:{color:t.getMarketColor(o.market),size:"small"}},[t._v(t._s(o.market))]),e("span",{staticClass:"symbol"},[t._v(t._s(o.symbol))])],1),e("div",{staticClass:"position-middle"},[e("span",{staticClass:"name",attrs:{title:o.name}},[t._v(t._s(o.name))])]),e("div",{staticClass:"position-right"},[e("span",{class:["pnl",o.pnl>=0?"positive":"negative"]},[t._v(" "+t._s(o.pnl>=0?"+":"")+t._s(t.formatNumber(o.pnl_percent))+"% ")])])])])],1)}),0),e("div",{staticClass:"position-select-actions"},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:t.selectAllPositions}},[t._v(" "+t._s(t.$t("portfolio.form.selectAll"))+" ")]),e("a-divider",{attrs:{type:"vertical"}}),e("a-button",{attrs:{type:"link",size:"small"},on:{click:t.deselectAllPositions}},[t._v(" "+t._s(t.$t("portfolio.form.deselectAll"))+" ")]),e("span",{staticClass:"selected-count"},[t._v(" "+t._s(t.$t("portfolio.form.selectedCount",{count:t.selectedMonitorPositions.length,total:t.positions.length}))+" ")])],1)],1):t._e(),e("a-form-item",{attrs:{label:t.$t("portfolio.form.customPrompt")}},[e("a-textarea",{directives:[{name:"decorator",rawName:"v-decorator",value:["prompt"],expression:"['prompt']"}],attrs:{rows:3,placeholder:t.$t("portfolio.form.customPromptPlaceholder")}})],1)],1)],1)],1)},i=[],a=o(9133),r=o(76959),n=o(17654),l=o(57888),c=(o(93693),o(2970)),u=(o(28706),o(2008),o(50113),o(62062),o(26910),o(2892),o(79432),o(26099),o(16034),o(27495),o(47764),o(11392),o(23500),o(62953),o(95353)),p=o(76471);function m(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,p.Ay)({url:"/api/portfolio/positions",method:"get",params:t})}function d(t){return(0,p.Ay)({url:"/api/portfolio/positions",method:"post",data:t})}function f(t,e){return(0,p.Ay)({url:"/api/portfolio/positions/".concat(t),method:"put",data:e})}function v(t){return(0,p.Ay)({url:"/api/portfolio/positions/".concat(t),method:"delete"})}function h(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,p.Ay)({url:"/api/portfolio/summary",method:"get",params:t})}function _(){return(0,p.Ay)({url:"/api/portfolio/monitors",method:"get"})}function g(t){return(0,p.Ay)({url:"/api/portfolio/monitors",method:"post",data:t})}function y(t,e){return(0,p.Ay)({url:"/api/portfolio/monitors/".concat(t),method:"put",data:e})}function b(t){return(0,p.Ay)({url:"/api/portfolio/monitors/".concat(t),method:"delete"})}function C(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(0,p.Ay)({url:"/api/portfolio/monitors/".concat(t,"/run"),method:"post",data:e})}function $(){return(0,p.Ay)({url:"/api/portfolio/alerts",method:"get"})}function k(t){return(0,p.Ay)({url:"/api/portfolio/alerts",method:"post",data:t})}function w(t,e){return(0,p.Ay)({url:"/api/portfolio/alerts/".concat(t),method:"put",data:e})}function A(t){return(0,p.Ay)({url:"/api/portfolio/alerts/".concat(t),method:"delete"})}function S(){return(0,p.Ay)({url:"/api/portfolio/groups",method:"get"})}function P(t){return(0,p.Ay)({url:"/api/market/symbols/search",method:"post",data:t})}function M(){return(0,p.Ay)({url:"/api/market/types",method:"get"})}var N=o(27617),x={name:"Portfolio",props:{embedded:{type:Boolean,default:!1}},data:function(){return{simpleImage:c.Ay.PRESENTED_IMAGE_SIMPLE,summary:{total_cost:0,total_market_value:0,total_pnl:0,total_pnl_percent:0,position_count:0,market_distribution:[],today_pnl:0,today_change:0},positions:[],loadingPositions:!1,showAddPositionModal:!1,savingPosition:!1,editingPosition:null,positionForm:null,monitors:[],loadingMonitors:!1,showAddMonitorModal:!1,savingMonitor:!1,editingMonitor:null,monitorForm:null,runningMonitor:null,marketTypes:[],symbolSearchResults:[],searchTimer:null,selectedSymbolName:"",symbolSearchKeyword:"",priceRefreshTimer:null,lastSyncTime:null,isSyncing:!1,groups:[],selectedGroup:"",viewMode:"grid",activeGroups:[],alerts:[],loadingAlerts:!1,showAddAlertModal:!1,savingAlert:!1,deletingAlert:!1,editingAlert:null,alertForm:null,alertPosition:null,alertChannels:["browser"],monitorChannels:["browser"],monitorScope:"all",selectedMonitorPositions:[],userNotificationSettings:{default_channels:["browser"],telegram_bot_token:"",telegram_chat_id:"",email:"",phone:"",discord_webhook:"",webhook_url:"",webhook_token:""}}},computed:(0,l.A)((0,l.A)({},(0,u.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},selectedChannels:function(){return this.monitorChannels||[]},selectedAlertChannels:function(){return this.alertChannels||[]},filteredPositions:function(){var t=this;return this.selectedGroup?"__ungrouped__"===this.selectedGroup?this.positions.filter(function(t){return!t.group_name}):this.positions.filter(function(e){return e.group_name===t.selectedGroup}):this.positions},groupNames:function(){return this.groups.map(function(t){return t.name})},alertTypeIsPrice:function(){if(!this.alertForm)return!0;var t=this.alertForm.getFieldValue("alert_type");return t&&t.startsWith("price_")},profitLossStats:function(){var t=this.positions.filter(function(t){return t.pnl>=0}).length,e=this.positions.filter(function(t){return t.pnl<0}).length;return{profit:t,loss:e}},bestPerformer:function(){return 0===this.positions.length?null:this.positions.reduce(function(t,e){return!t||(e.pnl_percent||0)>(t.pnl_percent||0)?e:t},null)},worstPerformer:function(){return 0===this.positions.length?null:this.positions.reduce(function(t,e){return!t||(e.pnl_percent||0)<(t.pnl_percent||0)?e:t},null)},ungroupedPositions:function(){return this.positions.filter(function(t){return!t.group_name})},groupsWithPositions:function(){var t={};return this.positions.forEach(function(e){e.group_name&&(t[e.group_name]||(t[e.group_name]={name:e.group_name,positions:[]}),t[e.group_name].positions.push(e))}),Object.values(t).sort(function(t,e){return t.name.localeCompare(e.name)})}}),created:function(){this.positionForm=this.$form.createForm(this,{name:"position_form"}),this.monitorForm=this.$form.createForm(this,{name:"monitor_form"}),this.alertForm=this.$form.createForm(this,{name:"alert_form"}),this.loadMarketTypes(),this.loadData()},mounted:function(){var t=this;this.priceRefreshTimer=setInterval(function(){t.refreshPrices()},3e4),this.loadUserNotificationSettings()},beforeDestroy:function(){this.priceRefreshTimer&&clearInterval(this.priceRefreshTimer),this.searchTimer&&clearTimeout(this.searchTimer)},methods:{loadUserNotificationSettings:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,N.vF)();case 1:o=e.v,1===o.code&&o.data&&(t.userNotificationSettings={default_channels:o.data.default_channels||["browser"],telegram_bot_token:o.data.telegram_bot_token||"",telegram_chat_id:o.data.telegram_chat_id||"",email:o.data.email||"",phone:o.data.phone||"",discord_webhook:o.data.discord_webhook||"",webhook_url:o.data.webhook_url||"",webhook_token:o.data.webhook_token||""}),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadData:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.n){case 0:return e.n=1,Promise.all([t.loadPositions(),t.loadSummary(),t.loadMonitors(),t.loadGroups(),t.loadAlerts()]);case 1:t.lastSyncTime=new Date;case 2:return e.a(2)}},e)}))()},filterByGroup:function(){},refreshPrices:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!t.isSyncing){e.n=1;break}return e.a(2);case 1:return t.isSyncing=!0,e.p=2,e.n=3,Promise.all([t.loadPositions(!0),t.loadSummary(!0)]);case 3:t.lastSyncTime=new Date;case 4:return e.p=4,t.isSyncing=!1,e.f(4);case 5:return e.a(2)}},e,null,[[2,,4,5]])}))()},formatSyncTime:function(t){if(!t)return"-";var e=new Date,o=Math.floor((e-t)/1e3);return o<60?this.$t("portfolio.summary.justNow"):o<3600?"".concat(Math.floor(o/60)," ").concat(this.$t("portfolio.form.minutes")).concat(this.$t("portfolio.summary.ago")):t.toLocaleTimeString()},getGroupPnl:function(t){return t.reduce(function(t,e){return t+(e.pnl||0)},0)},loadGroups:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,S();case 1:o=e.v,o&&1===o.code&&o.data&&(t.groups=o.data.groups||[]),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadAlerts:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loadingAlerts=!0,e.p=1,e.n=2,$();case 2:o=e.v,o&&1===o.code&&(t.alerts=o.data||[]),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.p=4,t.loadingAlerts=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},loadMarketTypes:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,M();case 1:o=e.v,o&&1===o.code&&o.data&&(t.marketTypes=o.data.map(function(t){return{value:t.value,i18nKey:t.i18nKey||"dashboard.analysis.market.".concat(t.value)}})),e.n=3;break;case 2:e.p=2,e.v,t.marketTypes=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}];case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadPositions:function(){var t=arguments,e=this;return(0,n.A)((0,r.A)().m(function o(){var s,i,a;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return s=t.length>0&&void 0!==t[0]&&t[0],e.loadingPositions=!0,o.p=1,i=s?{refresh:"1"}:{},o.n=2,m(i);case 2:a=o.v,a&&1===a.code&&(e.positions=a.data||[]),o.n=4;break;case 3:o.p=3,o.v,e.$message.error(e.$t("portfolio.message.loadFailed"));case 4:return o.p=4,e.loadingPositions=!1,o.f(4);case 5:return o.a(2)}},o,null,[[1,3,4,5]])}))()},loadSummary:function(){var t=arguments,e=this;return(0,n.A)((0,r.A)().m(function o(){var s,i;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return s=t.length>0&&void 0!==t[0]&&t[0],o.p=1,o.n=2,h(s?{refresh:"1"}:{});case 2:i=o.v,i&&1===i.code&&(e.summary=i.data||e.summary),o.n=4;break;case 3:o.p=3,o.v;case 4:return o.a(2)}},o,null,[[1,3]])}))()},loadMonitors:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loadingMonitors=!0,e.p=1,e.n=2,_();case 2:o=e.v,o&&1===o.code&&(t.monitors=o.data||[]),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.p=4,t.loadingMonitors=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleMarketChange:function(t){this.symbolSearchResults=[],this.symbolSearchKeyword="",this.positionForm.setFieldsValue({symbol:""})},handleSymbolSearch:function(t){var e=this;this.symbolSearchKeyword=t||"",this.searchTimer&&clearTimeout(this.searchTimer),!t||t.length<1?this.symbolSearchResults=[]:this.searchTimer=setTimeout((0,n.A)((0,r.A)().m(function o(){var s,i;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:if(s=e.positionForm.getFieldValue("market"),s){o.n=1;break}return o.a(2);case 1:return o.p=1,o.n=2,P({market:s,keyword:t,limit:10});case 2:i=o.v,i&&1===i.code?e.symbolSearchResults=i.data||[]:e.symbolSearchResults=[],o.n=4;break;case 3:o.p=3,o.v,e.symbolSearchResults=[];case 4:return o.a(2)}},o,null,[[1,3]])})),300)},handleSymbolSelect:function(t,e){var o=this.symbolSearchResults.find(function(e){return e.symbol===t});this.selectedSymbolName=o?o.name:"",this.symbolSearchKeyword=""},editPosition:function(t){var e=this;this.editingPosition=t,this.showAddPositionModal=!0,this.$nextTick(function(){e.positionForm.setFieldsValue({market:t.market,symbol:t.symbol,side:t.side,quantity:t.quantity,entry_price:t.entry_price,notes:t.notes,group_name:t.group_name||""})})},handleSavePosition:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.n){case 0:t.positionForm.validateFields(function(){var e=(0,n.A)((0,r.A)().m(function e(o,s){var i,a,n;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!o){e.n=1;break}return e.a(2);case 1:if(t.savingPosition=!0,e.p=2,i={market:s.market,symbol:s.symbol.toUpperCase(),side:s.side,quantity:s.quantity,entry_price:s.entry_price,notes:s.notes||"",name:t.selectedSymbolName||"",group_name:s.group_name||""},!t.editingPosition){e.n=4;break}return e.n=3,f(t.editingPosition.id,i);case 3:a=e.v,e.n=6;break;case 4:return e.n=5,d(i);case 5:a=e.v;case 6:a&&1===a.code?(t.$message.success(t.$t("portfolio.message.saveSuccess")),t.closePositionModal(),t.loadData()):t.$message.error((null===(n=a)||void 0===n?void 0:n.msg)||t.$t("portfolio.message.saveFailed")),e.n=8;break;case 7:e.p=7,e.v,t.$message.error(t.$t("portfolio.message.saveFailed"));case 8:return e.p=8,t.savingPosition=!1,e.f(8);case 9:return e.a(2)}},e,null,[[2,7,8,9]])}));return function(t,o){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},deletePosition:function(t){var e=this;return(0,n.A)((0,r.A)().m(function o(){var s;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return o.p=0,o.n=1,v(t);case 1:s=o.v,s&&1===s.code?(e.$message.success(e.$t("portfolio.message.deleteSuccess")),e.loadData()):e.$message.error((null===s||void 0===s?void 0:s.msg)||e.$t("portfolio.message.deleteFailed")),o.n=3;break;case 2:o.p=2,o.v,e.$message.error(e.$t("portfolio.message.deleteFailed"));case 3:return o.a(2)}},o,null,[[0,2]])}))()},closePositionModal:function(){this.showAddPositionModal=!1,this.editingPosition=null,this.positionForm.resetFields(),this.symbolSearchResults=[],this.selectedSymbolName="",this.symbolSearchKeyword=""},handleAlertChannelsChange:function(t){this.alertChannels=t||[]},showAddAlertForPosition:function(t){var e=this,o=this.alerts.find(function(e){return e.position_id===t.id});o?this.editAlert(o):(this.editingAlert=null,this.alertPosition=t,this.alertChannels=(0,a.A)(this.userNotificationSettings.default_channels||["browser"]),this.showAddAlertModal=!0,this.$nextTick(function(){e.alertForm.setFieldsValue({symbol:"".concat(t.market,"/").concat(t.symbol),alert_type:"price_above",threshold:t.current_price||t.entry_price,repeat_interval:0,is_active:!0,notes:""})}))},editAlert:function(t){var e,o=this;this.editingAlert=t,this.alertPosition=this.positions.find(function(e){return e.id===t.position_id})||{market:t.market,symbol:t.symbol,current_price:0,entry_price:0},this.alertChannels=(0,a.A)((null===(e=t.notification_config)||void 0===e?void 0:e.channels)||["browser"]),this.showAddAlertModal=!0,this.$nextTick(function(){o.alertForm&&o.alertForm.setFieldsValue({symbol:"".concat(t.market,"/").concat(t.symbol),alert_type:t.alert_type||"price_above",threshold:t.threshold||0,repeat_interval:t.repeat_interval||0,is_active:!1!==t.is_active,notes:t.notes||""})})},handleSaveAlert:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.n){case 0:t.alertForm.validateFields(function(){var e=(0,n.A)((0,r.A)().m(function e(o,s){var i,a,n,l,c,u,p;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!o){e.n=1;break}return e.a(2);case 1:if(t.savingAlert=!0,e.p=2,l={},t.alertChannels.includes("telegram")&&t.userNotificationSettings.telegram_chat_id&&(l.telegram=t.userNotificationSettings.telegram_chat_id,t.userNotificationSettings.telegram_bot_token&&(l.telegram_bot_token=t.userNotificationSettings.telegram_bot_token)),t.alertChannels.includes("email")&&t.userNotificationSettings.email&&(l.email=t.userNotificationSettings.email),t.alertChannels.includes("phone")&&t.userNotificationSettings.phone&&(l.phone=t.userNotificationSettings.phone),t.alertChannels.includes("discord")&&t.userNotificationSettings.discord_webhook&&(l.discord=t.userNotificationSettings.discord_webhook),t.alertChannels.includes("webhook")&&t.userNotificationSettings.webhook_url&&(l.webhook=t.userNotificationSettings.webhook_url,t.userNotificationSettings.webhook_token&&(l.webhook_token=t.userNotificationSettings.webhook_token)),c={position_id:null===(i=t.alertPosition)||void 0===i?void 0:i.id,market:null===(a=t.alertPosition)||void 0===a?void 0:a.market,symbol:null===(n=t.alertPosition)||void 0===n?void 0:n.symbol,alert_type:s.alert_type,threshold:s.threshold,notification_config:{channels:t.alertChannels.length>0?t.alertChannels:["browser"],targets:l,language:t.$store.getters.lang||"en-US"},is_active:!1!==s.is_active,repeat_interval:s.repeat_interval||0,notes:s.notes||""},!t.editingAlert){e.n=4;break}return e.n=3,w(t.editingAlert.id,c);case 3:u=e.v,e.n=6;break;case 4:return e.n=5,k(c);case 5:u=e.v;case 6:u&&1===u.code?(t.$message.success(t.$t("portfolio.message.saveSuccess")),t.closeAlertModal(),t.loadAlerts()):t.$message.error((null===(p=u)||void 0===p?void 0:p.msg)||t.$t("portfolio.message.saveFailed")),e.n=8;break;case 7:e.p=7,e.v,t.$message.error(t.$t("portfolio.message.saveFailed"));case 8:return e.p=8,t.savingAlert=!1,e.f(8);case 9:return e.a(2)}},e,null,[[2,7,8,9]])}));return function(t,o){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},deleteAlert:function(t){var e=this;return(0,n.A)((0,r.A)().m(function o(){var s;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return o.p=0,o.n=1,A(t);case 1:s=o.v,s&&1===s.code?(e.$message.success(e.$t("portfolio.message.deleteSuccess")),e.loadAlerts()):e.$message.error((null===s||void 0===s?void 0:s.msg)||e.$t("portfolio.message.deleteFailed")),o.n=3;break;case 2:o.p=2,o.v,e.$message.error(e.$t("portfolio.message.deleteFailed"));case 3:return o.a(2)}},o,null,[[0,2]])}))()},closeAlertModal:function(){this.showAddAlertModal=!1,this.editingAlert=null,this.alertPosition=null,this.alertChannels=(0,a.A)(this.userNotificationSettings.default_channels||["browser"]),this.alertForm.resetFields()},confirmDeleteAlert:function(){if(this.editingAlert){var t=this;this.$confirm({title:this.$t("portfolio.alerts.deleteConfirm"),okText:this.$t("common.confirm"),okType:"danger",cancelText:this.$t("common.cancel"),onOk:function(){return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.n){case 0:return e.n=1,t.handleDeleteAlert();case 1:return e.a(2)}},e)}))()}})}},handleDeleteAlert:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.editingAlert){e.n=1;break}return e.a(2);case 1:return t.deletingAlert=!0,e.p=2,e.n=3,A(t.editingAlert.id);case 3:if(o=e.v,!o||1!==o.code){e.n=5;break}return t.$message.success(t.$t("portfolio.message.deleteSuccess")),t.closeAlertModal(),e.n=4,t.loadAlerts();case 4:e.n=6;break;case 5:t.$message.error((null===o||void 0===o?void 0:o.msg)||t.$t("portfolio.message.deleteFailed"));case 6:e.n=8;break;case 7:e.p=7,e.v,t.$message.error(t.$t("portfolio.message.deleteFailed"));case 8:return e.p=8,t.deletingAlert=!1,e.f(8);case 9:return e.a(2)}},e,null,[[2,7,8,9]])}))()},focusMonitorsSection:function(){var t=this;this.$nextTick(function(){var e=t.$refs.monitorsSection;e&&"function"===typeof e.scrollIntoView&&e.scrollIntoView({behavior:"smooth",block:"start"})})},openAddMonitorModal:function(){var t=this;this.editingMonitor=null,this.monitorChannels=(0,a.A)(this.userNotificationSettings.default_channels||["browser"]),this.monitorScope="all",this.selectedMonitorPositions=[],this.showAddMonitorModal=!0,this.$nextTick(function(){t.monitorForm&&t.monitorForm.resetFields()})},handleMonitorChannelsChange:function(t){this.monitorChannels=t||[]},editMonitor:function(t){var e,o=this;this.editingMonitor=t,this.monitorChannels=(0,a.A)((null===(e=t.notification_config)||void 0===e?void 0:e.channels)||["browser"]);var s=[];if(t.position_ids)if("string"===typeof t.position_ids)try{s=JSON.parse(t.position_ids)||[]}catch(i){s=[]}else Array.isArray(t.position_ids)&&(s=t.position_ids);this.monitorScope=s.length>0?"selected":"all",this.selectedMonitorPositions=s,this.showAddMonitorModal=!0,this.$nextTick(function(){var e,s;o.monitorForm&&o.monitorForm.setFieldsValue({name:t.name,interval_minutes:(null===(e=t.config)||void 0===e?void 0:e.interval_minutes)||60,prompt:(null===(s=t.config)||void 0===s?void 0:s.prompt)||""})})},handleMonitorScopeChange:function(t){this.monitorScope=t.target.value,"all"===t.target.value&&(this.selectedMonitorPositions=[])},selectAllPositions:function(){this.selectedMonitorPositions=this.positions.map(function(t){return t.id})},deselectAllPositions:function(){this.selectedMonitorPositions=[]},handleSaveMonitor:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.n){case 0:t.monitorForm.validateFields(function(){var e=(0,n.A)((0,r.A)().m(function e(o,s){var i,a,n;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!o){e.n=1;break}return e.a(2);case 1:if("selected"!==t.monitorScope||0!==t.selectedMonitorPositions.length){e.n=2;break}return t.$message.warning(t.$t("portfolio.form.pleaseSelectPositions")),e.a(2);case 2:if(t.savingMonitor=!0,e.p=3,i={name:s.name,monitor_type:"ai",position_ids:"selected"===t.monitorScope?t.selectedMonitorPositions:[],config:{interval_minutes:s.interval_minutes,prompt:s.prompt||"",language:t.$store.getters.lang||"en-US"},notification_config:{channels:t.monitorChannels.length>0?t.monitorChannels:["browser"],targets:{telegram:t.userNotificationSettings.telegram_chat_id||"",telegram_bot_token:t.userNotificationSettings.telegram_bot_token||"",email:t.userNotificationSettings.email||"",phone:t.userNotificationSettings.phone||"",discord:t.userNotificationSettings.discord_webhook||"",webhook:t.userNotificationSettings.webhook_url||"",webhook_token:t.userNotificationSettings.webhook_token||""}},is_active:!0},!t.editingMonitor){e.n=5;break}return e.n=4,y(t.editingMonitor.id,i);case 4:a=e.v,e.n=7;break;case 5:return e.n=6,g(i);case 6:a=e.v;case 7:a&&1===a.code?(t.$message.success(t.$t("portfolio.message.saveSuccess")),t.closeMonitorModal(),t.loadMonitors()):t.$message.error((null===(n=a)||void 0===n?void 0:n.msg)||t.$t("portfolio.message.saveFailed")),e.n=9;break;case 8:e.p=8,e.v,t.$message.error(t.$t("portfolio.message.saveFailed"));case 9:return e.p=9,t.savingMonitor=!1,e.f(9);case 10:return e.a(2)}},e,null,[[3,8,9,10]])}));return function(t,o){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},toggleMonitor:function(t,e){var o=this;return(0,n.A)((0,r.A)().m(function s(){var i;return(0,r.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return s.p=0,s.n=1,y(t,{is_active:e});case 1:i=s.v,i&&1===i.code&&(o.$message.success(e?o.$t("portfolio.message.monitorEnabled"):o.$t("portfolio.message.monitorDisabled")),o.loadMonitors()),s.n=3;break;case 2:s.p=2,s.v,o.$message.error(o.$t("portfolio.message.updateFailed"));case 3:return s.a(2)}},s,null,[[0,2]])}))()},runMonitorNow:function(t){var e=this;return(0,n.A)((0,r.A)().m(function o(){var s,i,a,n,l,c,u;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return e.runningMonitor=t,o.p=1,s=e.$store.getters.lang||"en-US",o.n=2,C(t,{language:s,async:!0});case 2:i=o.v,i&&1===i.code&&("running"===(null===(a=i.data)||void 0===a?void 0:a.status)?(e.$message.success(e.$t("portfolio.message.monitorRunning")),e.$notification.info({message:e.$t("portfolio.monitors.runningTitle"),description:e.$t("portfolio.monitors.runningDesc"),duration:5})):null!==(n=i.data)&&void 0!==n&&n.success?(e.$message.success(e.$t("portfolio.message.monitorRunSuccess")),i.data.analysis&&e.$notification.open({message:e.$t("portfolio.monitors.analysisResult"),description:i.data.analysis.substring(0,500)+(i.data.analysis.length>500?"...":""),duration:0})):null!==(l=i.data)&&void 0!==l&&l.error&&e.$message.error(i.data.error||e.$t("portfolio.message.monitorRunFailed")),e.loadMonitors()),o.n=4;break;case 3:o.p=3,u=o.v,"ECONNABORTED"===u.code||null!==(c=u.message)&&void 0!==c&&c.includes("timeout")?e.$notification.warning({message:e.$t("portfolio.monitors.timeoutTitle"),description:e.$t("portfolio.monitors.timeoutDesc"),duration:8}):e.$message.error(e.$t("portfolio.message.monitorRunFailed"));case 4:return o.p=4,e.runningMonitor=null,o.f(4);case 5:return o.a(2)}},o,null,[[1,3,4,5]])}))()},deleteMonitor:function(t){var e=this;return(0,n.A)((0,r.A)().m(function o(){var s;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return o.p=0,o.n=1,b(t);case 1:s=o.v,s&&1===s.code?(e.$message.success(e.$t("portfolio.message.deleteSuccess")),e.loadMonitors()):e.$message.error((null===s||void 0===s?void 0:s.msg)||e.$t("portfolio.message.deleteFailed")),o.n=3;break;case 2:o.p=2,o.v,e.$message.error(e.$t("portfolio.message.deleteFailed"));case 3:return o.a(2)}},o,null,[[0,2]])}))()},closeMonitorModal:function(){this.showAddMonitorModal=!1,this.editingMonitor=null,this.monitorForm.resetFields(),this.monitorChannels=(0,a.A)(this.userNotificationSettings.default_channels||["browser"]),this.monitorScope="all",this.selectedMonitorPositions=[]},getMonitorPositionIds:function(t){if(!t.position_ids)return[];if("string"===typeof t.position_ids)try{return JSON.parse(t.position_ids)||[]}catch(e){return[]}return Array.isArray(t.position_ids)?t.position_ids:[]},getPositionNameById:function(t){var e=this.positions.find(function(e){return e.id===t});return e?"".concat(e.symbol," (").concat(e.name||e.market,")"):"#".concat(t)},hasAlertForPosition:function(t){return this.alerts.some(function(e){return e.position_id===t})},getAlertForPosition:function(t){return this.alerts.find(function(e){return e.position_id===t})},getMarketColor:function(t){var e={USStock:"green",Crypto:"purple",Forex:"gold",Futures:"cyan"};return e[t]||"default"},getMarketName:function(t){return this.$t("dashboard.analysis.market.".concat(t))||t},getCurrencySymbol:function(t){var e=["USStock","Crypto","Forex","Futures"];return e.includes(t)?"$":"¥"},formatNumber:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return void 0===t||null===t?"0.00":Number(t).toLocaleString("en-US",{minimumFractionDigits:e,maximumFractionDigits:e})},formatPrice:function(t){return t?t>=1e3?this.formatNumber(t,2):t>=1?this.formatNumber(t,4):this.formatNumber(t,6):"0"},formatTime:function(t){if(!t)return"-";var e;if("number"===typeof t)e=new Date(1e3*t);else{if("string"!==typeof t)return"-";e=/^\d+$/.test(t)?new Date(1e3*parseInt(t,10)):new Date(t)}return isNaN(e.getTime())?"-":e.toLocaleString()},getIntervalText:function(t){if(!t)return"-";if(t<60)return"".concat(t," ").concat(this.$t("portfolio.form.minutes"));var e=t/60;return"".concat(e," ").concat(this.$t("portfolio.form.hours"))}}},F=x,T=o(845),q=(0,T.A)(F,s,i,!1,null,"398d904c",null),R=q.exports},27617:function(t,e,o){o.d(e,{DK:function(){return g},E$:function(){return u},Gl:function(){return d},O0:function(){return c},TK:function(){return r},aU:function(){return i},cw:function(){return l},d$:function(){return b},hG:function(){return n},kg:function(){return a},nY:function(){return _},r7:function(){return p},rx:function(){return v},v9:function(){return f},vF:function(){return m},vi:function(){return y},wq:function(){return h}});var s=o(76471);function i(t){return(0,s.Ay)({url:"/api/users/list",method:"get",params:t})}function a(t){return(0,s.Ay)({url:"/api/users/create",method:"post",data:t})}function r(t,e){return(0,s.Ay)({url:"/api/users/update",method:"put",params:{id:t},data:e})}function n(t){return(0,s.Ay)({url:"/api/users/delete",method:"delete",params:{id:t}})}function l(t){return(0,s.Ay)({url:"/api/users/reset-password",method:"post",data:t})}function c(){return(0,s.Ay)({url:"/api/users/roles",method:"get"})}function u(){return(0,s.Ay)({url:"/api/users/profile",method:"get"})}function p(t){return(0,s.Ay)({url:"/api/users/profile/update",method:"put",data:t})}function m(){return(0,s.Ay)({url:"/api/users/notification-settings",method:"get"})}function d(t){return(0,s.Ay)({url:"/api/users/notification-settings",method:"put",data:t})}function f(t){return(0,s.Ay)({url:"/api/users/my-credits-log",method:"get",params:t})}function v(t){return(0,s.Ay)({url:"/api/users/my-referrals",method:"get",params:t})}function h(t){return(0,s.Ay)({url:"/api/users/set-credits",method:"post",data:t})}function _(t){return(0,s.Ay)({url:"/api/users/set-vip",method:"post",data:t})}function g(t){return(0,s.Ay)({url:"/api/users/system-strategies",method:"get",params:t})}function y(t){return(0,s.Ay)({url:"/api/users/admin-orders",method:"get",params:t})}function b(t){return(0,s.Ay)({url:"/api/users/admin-ai-stats",method:"get",params:t})}}}]); \ No newline at end of file diff --git a/frontend/dist/js/484.83fccff2.js b/frontend/dist/js/484.83fccff2.js deleted file mode 100644 index e05157b..0000000 --- a/frontend/dist/js/484.83fccff2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[484],{4103:function(t,e,o){o.r(e),o.d(e,{default:function(){return R}});o(74423);var s=function(){var t=this,e=t._self._c;return e("div",{staticClass:"portfolio-container",class:{"theme-dark":t.isDarkTheme,embedded:t.embedded}},[e("div",{staticClass:"summary-section"},[e("div",{staticClass:"summary-card total-value"},[e("div",{staticClass:"card-icon"},[e("a-icon",{attrs:{type:"wallet"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.totalValue")))]),e("div",{staticClass:"card-value"},[e("span",{staticClass:"currency"},[t._v("$")]),e("span",{staticClass:"amount"},[t._v(t._s(t.formatNumber(t.summary.total_market_value)))])]),void 0!==t.summary.today_change?e("div",{staticClass:"card-sub"},[e("span",{class:t.summary.today_change>=0?"positive":"negative"},[t._v(" "+t._s(t.$t("portfolio.summary.today"))+": "+t._s(t.summary.today_change>=0?"+":"")+"$"+t._s(t.formatNumber(t.summary.today_change))+" ")])]):t._e()])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"card-icon cost"},[e("a-icon",{attrs:{type:"dollar"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.totalCost")))]),e("div",{staticClass:"card-value"},[t._v("$"+t._s(t.formatNumber(t.summary.total_cost)))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"card-icon",class:t.summary.total_pnl>=0?"profit":"loss"},[e("a-icon",{attrs:{type:t.summary.total_pnl>=0?"rise":"fall"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.totalPnl")))]),e("div",{staticClass:"card-value",class:t.summary.total_pnl>=0?"positive":"negative"},[t._v(" "+t._s(t.summary.total_pnl>=0?"+":"")+"$"+t._s(t.formatNumber(t.summary.total_pnl))+" "),e("span",{staticClass:"percent"},[t._v("("+t._s(t.summary.total_pnl_percent>=0?"+":"")+t._s(t.summary.total_pnl_percent)+"%)")])])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"card-icon positions"},[e("a-icon",{attrs:{type:"fund"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.positionCount")))]),e("div",{staticClass:"card-value"},[t._v(" "+t._s(t.summary.position_count)+" "),t.profitLossStats.profit>0||t.profitLossStats.loss>0?e("span",{staticClass:"position-detail"},[t._v(" ("),e("span",{staticClass:"positive"},[t._v(t._s(t.profitLossStats.profit))]),t._v("/"),e("span",{staticClass:"negative"},[t._v(t._s(t.profitLossStats.loss))]),t._v(") ")]):t._e()]),e("div",{staticClass:"card-sub"},[t._v(" "+t._s(t.$t("portfolio.summary.profitLossRatio"))+" ")])])])]),e("div",{staticClass:"summary-section secondary"},[e("div",{staticClass:"summary-card mini"},[e("div",{staticClass:"card-icon today",class:t.summary.today_pnl>=0?"profit":"loss"},[e("a-icon",{attrs:{type:"stock"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.todayPnl")))]),e("div",{staticClass:"card-value",class:t.summary.today_pnl>=0?"positive":"negative"},[t._v(" "+t._s(t.summary.today_pnl>=0?"+":"")+"$"+t._s(t.formatNumber(t.summary.today_pnl||0))+" ")])])]),e("div",{staticClass:"summary-card mini"},[e("div",{staticClass:"card-icon best"},[e("a-icon",{attrs:{type:"trophy"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.bestPerformer")))]),t.bestPerformer?e("div",{staticClass:"card-value small positive"},[t._v(" "+t._s(t.bestPerformer.symbol)+" +"+t._s(t.bestPerformer.pnl_percent)+"% ")]):e("div",{staticClass:"card-value small"},[t._v("-")])])]),e("div",{staticClass:"summary-card mini"},[e("div",{staticClass:"card-icon worst"},[e("a-icon",{attrs:{type:"warning"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.worstPerformer")))]),t.worstPerformer?e("div",{staticClass:"card-value small negative"},[t._v(" "+t._s(t.worstPerformer.symbol)+" "+t._s(t.worstPerformer.pnl_percent)+"% ")]):e("div",{staticClass:"card-value small"},[t._v("-")])])]),e("div",{staticClass:"summary-card mini sync-card"},[e("div",{staticClass:"card-icon sync",class:{syncing:t.isSyncing}},[e("a-icon",{attrs:{type:"sync",spin:t.isSyncing}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.priceSync")))]),e("div",{staticClass:"card-value small"},[t._v(" "+t._s(t.lastSyncTime?t.formatSyncTime(t.lastSyncTime):"-")+" ")]),e("div",{staticClass:"card-sub"},[t._v(" "+t._s(t.$t("portfolio.summary.syncInterval"))+": 30s "),e("a-button",{staticStyle:{padding:"0","margin-left":"8px"},attrs:{type:"link",size:"small",loading:t.isSyncing},on:{click:t.refreshPrices}},[t.isSyncing?t._e():e("a-icon",{attrs:{type:"reload"}})],1)],1)])])]),e("div",{staticClass:"main-content"},[e("div",{staticClass:"positions-section"},[e("div",{staticClass:"section-header"},[e("h3",[e("a-icon",{attrs:{type:"stock"}}),e("span",[t._v(t._s(t.$t("portfolio.positions.title")))])],1),e("div",{staticClass:"header-actions"},[e("a-radio-group",{staticStyle:{"margin-right":"12px"},attrs:{size:"small"},model:{value:t.viewMode,callback:function(e){t.viewMode=e},expression:"viewMode"}},[e("a-radio-button",{attrs:{value:"grid"}},[e("a-icon",{attrs:{type:"appstore"}})],1),e("a-radio-button",{attrs:{value:"group"}},[e("a-icon",{attrs:{type:"folder"}})],1)],1),"grid"===t.viewMode?e("a-select",{staticStyle:{width:"150px","margin-right":"12px"},attrs:{placeholder:t.$t("portfolio.groups.all"),"allow-clear":""},on:{change:t.filterByGroup},model:{value:t.selectedGroup,callback:function(e){t.selectedGroup=e},expression:"selectedGroup"}},[e("a-select-option",{attrs:{value:""}},[t._v(t._s(t.$t("portfolio.groups.all")))]),e("a-select-option",{attrs:{value:"__ungrouped__"}},[t._v(t._s(t.$t("portfolio.groups.ungrouped")))]),t._l(t.groups,function(o){return e("a-select-option",{key:o.name,attrs:{value:o.name}},[t._v(" "+t._s(o.name)+" ("+t._s(o.count)+") ")])})],2):t._e(),e("a-button",{attrs:{type:"primary"},on:{click:function(e){t.showAddPositionModal=!0}}},[e("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("portfolio.positions.add"))+" ")],1)],1)]),e("a-spin",{attrs:{spinning:t.loadingPositions}},[e("div",{staticClass:"positions-list"},[0===t.positions.length?e("div",{staticClass:"empty-state"},[e("a-empty",{attrs:{description:t.$t("portfolio.positions.empty")}},[e("a-button",{attrs:{type:"primary"},on:{click:function(e){t.showAddPositionModal=!0}}},[e("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("portfolio.positions.addFirst"))+" ")],1)],1)],1):"grid"===t.viewMode?e("div",{staticClass:"position-grid"},t._l(t.filteredPositions,function(o){return e("div",{key:o.id,staticClass:"position-card",class:{profit:o.pnl>=0,loss:o.pnl<0}},[e("div",{staticClass:"position-header"},[e("div",{staticClass:"symbol-info"},[e("a-tag",{attrs:{color:t.getMarketColor(o.market),size:"small"}},[t._v(t._s(t.getMarketName(o.market)))]),e("span",{staticClass:"symbol"},[t._v(t._s(o.symbol))]),e("span",{staticClass:"name"},[t._v(t._s(o.name))]),o.group_name?e("a-tag",{staticStyle:{"margin-left":"4px"},attrs:{size:"small",color:"blue"}},[e("a-icon",{attrs:{type:"folder"}}),t._v(" "+t._s(o.group_name)+" ")],1):t._e()],1),e("div",{staticClass:"position-actions"},[e("a-tooltip",{attrs:{title:t.hasAlertForPosition(o.id)?t.$t("portfolio.alerts.editAlert"):t.$t("portfolio.alerts.addAlert")}},[e("a-button",{class:{"has-alert":t.hasAlertForPosition(o.id)},attrs:{type:"link",size:"small"},on:{click:function(e){return t.showAddAlertForPosition(o)}}},[e("a-icon",{attrs:{type:"bell",theme:t.hasAlertForPosition(o.id)?"filled":"outlined"}})],1)],1),e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.editPosition(o)}}},[e("a-icon",{attrs:{type:"edit"}})],1),e("a-popconfirm",{attrs:{title:t.$t("portfolio.positions.deleteConfirm")},on:{confirm:function(e){return t.deletePosition(o.id)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}})],1)],1)],1)]),e("div",{staticClass:"position-body"},[e("div",{staticClass:"price-row"},[e("div",{staticClass:"current-price"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.currentPrice")))]),e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatPrice(o.current_price)))]),e("span",{staticClass:"change",class:o.price_change>=0?"up":"down"},[t._v(" "+t._s(o.price_change>=0?"▲":"▼")+t._s(Math.abs(o.price_change_percent).toFixed(2))+"% ")])]),e("div",{staticClass:"entry-price"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.entryPrice")))]),e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatPrice(o.entry_price)))])])]),e("div",{staticClass:"quantity-row"},[e("div",{staticClass:"item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.quantity")))]),e("span",{staticClass:"value"},[t._v(t._s(t.formatNumber(o.quantity,4)))])]),e("div",{staticClass:"item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.side")))]),e("a-tag",{attrs:{color:"long"===o.side?"green":"red",size:"small"}},[t._v(" "+t._s("long"===o.side?t.$t("portfolio.positions.long"):t.$t("portfolio.positions.short"))+" ")])],1),e("div",{staticClass:"item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.marketValue")))]),e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatNumber(o.market_value)))])])])]),e("div",{staticClass:"position-footer"},[e("div",{staticClass:"pnl"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.pnl")))]),e("span",{staticClass:"value",class:o.pnl>=0?"positive":"negative"},[t._v(" "+t._s(o.pnl>=0?"+":"")+t._s(t.getCurrencySymbol(o.market))+t._s(t.formatNumber(o.pnl))+" "),e("span",{staticClass:"percent"},[t._v("("+t._s(o.pnl_percent>=0?"+":"")+t._s(o.pnl_percent)+"%)")])])])])])}),0):e("div",{staticClass:"position-collapse-view"},[e("a-collapse",{attrs:{bordered:!1},model:{value:t.activeGroups,callback:function(e){t.activeGroups=e},expression:"activeGroups"}},[t.ungroupedPositions.length>0?e("a-collapse-panel",{key:"__ungrouped__",staticClass:"group-panel"},[e("template",{slot:"header"},[e("div",{staticClass:"group-header"},[e("span",{staticClass:"group-name"},[e("a-icon",{staticStyle:{"margin-right":"8px"},attrs:{type:"inbox"}}),t._v(" "+t._s(t.$t("portfolio.groups.ungrouped"))+" ")],1),e("span",{staticClass:"group-stats"},[e("span",{staticClass:"count"},[t._v(t._s(t.ungroupedPositions.length)+" "+t._s(t.$t("portfolio.positions.items")))]),e("span",{staticClass:"group-pnl",class:t.getGroupPnl(t.ungroupedPositions)>=0?"positive":"negative"},[t._v(" "+t._s(t.getGroupPnl(t.ungroupedPositions)>=0?"+":"")+"$"+t._s(t.formatNumber(t.getGroupPnl(t.ungroupedPositions)))+" ")])])])]),e("div",{staticClass:"position-grid compact"},t._l(t.ungroupedPositions,function(o){return e("div",{key:o.id,staticClass:"position-card compact",class:{profit:o.pnl>=0,loss:o.pnl<0}},[e("div",{staticClass:"position-header"},[e("div",{staticClass:"symbol-info"},[e("a-tag",{attrs:{color:t.getMarketColor(o.market),size:"small"}},[t._v(t._s(t.getMarketName(o.market)))]),e("span",{staticClass:"symbol"},[t._v(t._s(o.symbol))]),e("span",{staticClass:"name"},[t._v(t._s(o.name))])],1),e("div",{staticClass:"position-actions"},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.editPosition(o)}}},[e("a-icon",{attrs:{type:"edit"}})],1),e("a-popconfirm",{attrs:{title:t.$t("portfolio.positions.deleteConfirm")},on:{confirm:function(e){return t.deletePosition(o.id)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}})],1)],1)],1)]),e("div",{staticClass:"position-compact-body"},[e("div",{staticClass:"compact-item"},[e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatPrice(o.current_price)))]),e("span",{staticClass:"change",class:o.price_change>=0?"up":"down"},[t._v(" "+t._s(o.price_change>=0?"▲":"▼")+t._s(Math.abs(o.price_change_percent).toFixed(2))+"% ")])]),e("div",{staticClass:"compact-item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.quantity"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatNumber(o.quantity,4)))])]),e("div",{staticClass:"compact-item pnl",class:o.pnl>=0?"positive":"negative"},[t._v(" "+t._s(o.pnl>=0?"+":"")+t._s(t.getCurrencySymbol(o.market))+t._s(t.formatNumber(o.pnl))+" "),e("span",{staticClass:"percent"},[t._v("("+t._s(o.pnl_percent>=0?"+":"")+t._s(o.pnl_percent)+"%)")])])])])}),0)],2):t._e(),t._l(t.groupsWithPositions,function(o){return e("a-collapse-panel",{key:o.name,staticClass:"group-panel"},[e("template",{slot:"header"},[e("div",{staticClass:"group-header"},[e("span",{staticClass:"group-name"},[e("a-icon",{staticStyle:{"margin-right":"8px",color:"#1890ff"},attrs:{type:"folder"}}),t._v(" "+t._s(o.name)+" ")],1),e("span",{staticClass:"group-stats"},[e("span",{staticClass:"count"},[t._v(t._s(o.positions.length)+" "+t._s(t.$t("portfolio.positions.items")))]),e("span",{staticClass:"group-pnl",class:t.getGroupPnl(o.positions)>=0?"positive":"negative"},[t._v(" "+t._s(t.getGroupPnl(o.positions)>=0?"+":"")+"$"+t._s(t.formatNumber(t.getGroupPnl(o.positions)))+" ")])])])]),e("div",{staticClass:"position-grid compact"},t._l(o.positions,function(o){return e("div",{key:o.id,staticClass:"position-card compact",class:{profit:o.pnl>=0,loss:o.pnl<0}},[e("div",{staticClass:"position-header"},[e("div",{staticClass:"symbol-info"},[e("a-tag",{attrs:{color:t.getMarketColor(o.market),size:"small"}},[t._v(t._s(t.getMarketName(o.market)))]),e("span",{staticClass:"symbol"},[t._v(t._s(o.symbol))]),e("span",{staticClass:"name"},[t._v(t._s(o.name))])],1),e("div",{staticClass:"position-actions"},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.editPosition(o)}}},[e("a-icon",{attrs:{type:"edit"}})],1),e("a-popconfirm",{attrs:{title:t.$t("portfolio.positions.deleteConfirm")},on:{confirm:function(e){return t.deletePosition(o.id)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}})],1)],1)],1)]),e("div",{staticClass:"position-compact-body"},[e("div",{staticClass:"compact-item"},[e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatPrice(o.current_price)))]),e("span",{staticClass:"change",class:o.price_change>=0?"up":"down"},[t._v(" "+t._s(o.price_change>=0?"▲":"▼")+t._s(Math.abs(o.price_change_percent).toFixed(2))+"% ")])]),e("div",{staticClass:"compact-item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.quantity"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatNumber(o.quantity,4)))])]),e("div",{staticClass:"compact-item pnl",class:o.pnl>=0?"positive":"negative"},[t._v(" "+t._s(o.pnl>=0?"+":"")+t._s(t.getCurrencySymbol(o.market))+t._s(t.formatNumber(o.pnl))+" "),e("span",{staticClass:"percent"},[t._v("("+t._s(o.pnl_percent>=0?"+":"")+t._s(o.pnl_percent)+"%)")])])])])}),0)],2)})],2)],1)])])],1),e("div",{ref:"monitorsSection",staticClass:"monitors-section"},[e("div",{staticClass:"section-header"},[e("h3",[e("a-icon",{attrs:{type:"eye"}}),e("span",[t._v(t._s(t.$t("portfolio.monitors.title")))])],1),e("a-button",{attrs:{type:"primary"},on:{click:t.openAddMonitorModal}},[e("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("portfolio.monitors.add"))+" ")],1)],1),e("a-spin",{attrs:{spinning:t.loadingMonitors}},[e("div",{staticClass:"monitors-list"},[0===t.monitors.length?e("div",{staticClass:"empty-state small"},[e("a-empty",{attrs:{description:t.$t("portfolio.monitors.empty"),image:t.simpleImage}},[e("a-button",{attrs:{type:"primary",size:"small"},on:{click:t.openAddMonitorModal}},[e("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("portfolio.monitors.addFirst"))+" ")],1)],1)],1):e("div",t._l(t.monitors,function(o){return e("div",{key:o.id,staticClass:"monitor-card"},[e("div",{staticClass:"monitor-header"},[e("div",{staticClass:"monitor-name"},[e("a-icon",{attrs:{type:"robot"}}),e("span",[t._v(t._s(o.name))])],1),e("a-switch",{attrs:{checked:o.is_active,size:"small"},on:{change:function(e){return t.toggleMonitor(o.id,e)}}})],1),e("div",{staticClass:"monitor-body"},[e("div",{staticClass:"monitor-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.monitors.interval"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.getIntervalText(o.config.interval_minutes)))])]),e("div",{staticClass:"monitor-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.form.monitorScope"))+":")]),e("span",{staticClass:"value"},[t.getMonitorPositionIds(o).length>0?[e("a-tooltip",[e("template",{slot:"title"},t._l(t.getMonitorPositionIds(o),function(o){return e("div",{key:o},[t._v(" "+t._s(t.getPositionNameById(o))+" ")])}),0),e("span",{staticClass:"scope-selected"},[t._v(" "+t._s(t.$t("portfolio.form.selectedCount",{count:t.getMonitorPositionIds(o).length,total:t.positions.length}))+" ")])],2)]:e("span",{staticClass:"scope-all"},[t._v(t._s(t.$t("portfolio.form.allPositions")))])],2)]),o.last_run_at?e("div",{staticClass:"monitor-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.monitors.lastRun"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatTime(o.last_run_at)))])]):t._e(),o.next_run_at&&o.is_active?e("div",{staticClass:"monitor-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.monitors.nextRun"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatTime(o.next_run_at)))])]):t._e(),o.notification_config.channels?e("div",{staticClass:"monitor-channels"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.monitors.channels"))+":")]),t._l(o.notification_config.channels,function(o){return e("a-tag",{key:o,attrs:{size:"small"}},[t._v(" "+t._s(o)+" ")])})],2):t._e()]),e("div",{staticClass:"monitor-actions"},[e("a-button",{attrs:{type:"link",size:"small",loading:t.runningMonitor===o.id},on:{click:function(e){return t.runMonitorNow(o.id)}}},[e("a-icon",{attrs:{type:"play-circle"}}),t._v(" "+t._s(t.$t("portfolio.monitors.runNow"))+" ")],1),e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.editMonitor(o)}}},[e("a-icon",{attrs:{type:"edit"}})],1),e("a-popconfirm",{attrs:{title:t.$t("portfolio.monitors.deleteConfirm")},on:{confirm:function(e){return t.deleteMonitor(o.id)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}})],1)],1)],1)])}),0)])])],1)]),e("a-modal",{attrs:{title:t.editingPosition?t.$t("portfolio.modal.editPosition"):t.$t("portfolio.modal.addPosition"),visible:t.showAddPositionModal,confirmLoading:t.savingPosition,width:"600px"},on:{ok:t.handleSavePosition,cancel:t.closePositionModal}},[e("a-form",{attrs:{form:t.positionForm,"label-col":{span:6},"wrapper-col":{span:16}}},[e("a-form-item",{attrs:{label:t.$t("portfolio.form.market")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["market",{rules:[{required:!0,message:t.$t("portfolio.form.marketRequired")}]}],expression:"['market', { rules: [{ required: true, message: $t('portfolio.form.marketRequired') }] }]"}],attrs:{placeholder:t.$t("portfolio.form.selectMarket"),disabled:!!t.editingPosition},on:{change:t.handleMarketChange}},t._l(t.marketTypes,function(o){return e("a-select-option",{key:o.value,attrs:{value:o.value}},[t._v(" "+t._s(t.$t(o.i18nKey))+" ")])}),1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.symbol")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["symbol",{rules:[{required:!0,message:t.$t("portfolio.form.symbolRequired")}]}],expression:"['symbol', { rules: [{ required: true, message: $t('portfolio.form.symbolRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{"show-search":"",placeholder:t.$t("portfolio.form.searchSymbol"),"default-active-first-option":!1,"show-arrow":!1,"filter-option":!1,"not-found-content":null,disabled:!!t.editingPosition},on:{search:t.handleSymbolSearch,change:t.handleSymbolSelect}},[t._l(t.symbolSearchResults,function(o){return e("a-select-option",{key:o.symbol,attrs:{value:o.symbol}},[e("div",{staticClass:"symbol-option"},[e("strong",[t._v(t._s(o.symbol))]),e("span",{staticClass:"symbol-name"},[t._v(t._s(o.name))])])])}),t.symbolSearchKeyword&&0===t.symbolSearchResults.length?e("a-select-option",{key:"__manual__"+t.symbolSearchKeyword.toUpperCase(),attrs:{value:t.symbolSearchKeyword.toUpperCase()}},[e("div",{staticClass:"symbol-option manual-input"},[e("a-icon",{staticStyle:{"margin-right":"6px",color:"#1890ff"},attrs:{type:"edit"}}),e("span",[t._v(t._s(t.$t("portfolio.form.useAsSymbol"))+" ")]),e("strong",{staticStyle:{color:"#1890ff"}},[t._v(t._s(t.symbolSearchKeyword.toUpperCase()))]),e("span",[t._v(" "+t._s(t.$t("portfolio.form.asSymbolCode")))])],1)]):t._e()],2),e("div",{staticClass:"symbol-hint",staticStyle:{"font-size":"12px",color:"#999","margin-top":"4px"}},[t._v(" "+t._s(t.$t("portfolio.form.symbolHint"))+" ")])],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.side")}},[e("a-radio-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["side",{initialValue:"long"}],expression:"['side', { initialValue: 'long' }]"}],attrs:{disabled:!!t.editingPosition}},[e("a-radio-button",{attrs:{value:"long"}},[t._v(t._s(t.$t("portfolio.positions.long")))]),e("a-radio-button",{attrs:{value:"short"}},[t._v(t._s(t.$t("portfolio.positions.short")))])],1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.quantity")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["quantity",{rules:[{required:!0,message:t.$t("portfolio.form.quantityRequired")}]}],expression:"['quantity', { rules: [{ required: true, message: $t('portfolio.form.quantityRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{min:1e-8,step:1,placeholder:t.$t("portfolio.form.enterQuantity")}})],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.entryPrice")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["entry_price",{rules:[{required:!0,message:t.$t("portfolio.form.entryPriceRequired")}]}],expression:"['entry_price', { rules: [{ required: true, message: $t('portfolio.form.entryPriceRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{min:1e-8,step:.01,placeholder:t.$t("portfolio.form.enterEntryPrice")}})],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.notes")}},[e("a-textarea",{directives:[{name:"decorator",rawName:"v-decorator",value:["notes"],expression:"['notes']"}],attrs:{rows:2,placeholder:t.$t("portfolio.form.enterNotes")}})],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.group")}},[e("a-auto-complete",{directives:[{name:"decorator",rawName:"v-decorator",value:["group_name"],expression:"['group_name']"}],attrs:{placeholder:t.$t("portfolio.form.enterGroup"),dataSource:t.groupNames}})],1)],1)],1),e("a-modal",{attrs:{title:t.editingAlert?t.$t("portfolio.modal.editAlert"):t.$t("portfolio.modal.addAlert"),visible:t.showAddAlertModal,width:"560px"},on:{cancel:t.closeAlertModal}},[e("template",{slot:"footer"},[e("div",{staticClass:"alert-modal-footer"},[t.editingAlert?e("a-button",{attrs:{type:"danger",ghost:"",loading:t.deletingAlert},on:{click:t.confirmDeleteAlert}},[e("a-icon",{attrs:{type:"delete"}}),t._v(" "+t._s(t.$t("portfolio.alerts.delete"))+" ")],1):e("span"),e("div",{staticClass:"footer-right"},[e("a-button",{on:{click:t.closeAlertModal}},[t._v(t._s(t.$t("common.cancel")))]),e("a-button",{attrs:{type:"primary",loading:t.savingAlert},on:{click:t.handleSaveAlert}},[t._v(" "+t._s(t.$t("common.save"))+" ")])],1)],1)]),e("a-form",{attrs:{form:t.alertForm,"label-col":{span:6},"wrapper-col":{span:16}}},[e("a-form-item",{attrs:{label:t.$t("portfolio.form.symbol")}},[e("div",{staticClass:"alert-symbol-info"},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["symbol"],expression:"['symbol']"}],staticClass:"symbol-input",attrs:{disabled:""}}),t.alertPosition?e("div",{staticClass:"current-price-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.alerts.currentPrice"))+":")]),e("span",{staticClass:"price"},[t._v("$"+t._s(t.formatNumber(t.alertPosition.current_price||t.alertPosition.entry_price)))])]):t._e()],1)]),e("a-form-item",{attrs:{label:t.$t("portfolio.alerts.alertType")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["alert_type",{initialValue:"price_above",rules:[{required:!0}]}],expression:"['alert_type', { initialValue: 'price_above', rules: [{ required: true }] }]"}]},[e("a-select-option",{attrs:{value:"price_above"}},[e("a-icon",{staticStyle:{color:"#52c41a","margin-right":"6px"},attrs:{type:"rise"}}),t._v(" "+t._s(t.$t("portfolio.alerts.priceAbove"))+" ")],1),e("a-select-option",{attrs:{value:"price_below"}},[e("a-icon",{staticStyle:{color:"#f5222d","margin-right":"6px"},attrs:{type:"fall"}}),t._v(" "+t._s(t.$t("portfolio.alerts.priceBelow"))+" ")],1),e("a-select-option",{attrs:{value:"pnl_above"}},[e("a-icon",{staticStyle:{color:"#52c41a","margin-right":"6px"},attrs:{type:"dollar"}}),t._v(" "+t._s(t.$t("portfolio.alerts.pnlAbove"))+" ")],1),e("a-select-option",{attrs:{value:"pnl_below"}},[e("a-icon",{staticStyle:{color:"#f5222d","margin-right":"6px"},attrs:{type:"dollar"}}),t._v(" "+t._s(t.$t("portfolio.alerts.pnlBelow"))+" ")],1)],1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.alerts.threshold")}},[e("div",{staticClass:"threshold-input-wrapper"},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["threshold",{rules:[{required:!0,message:t.$t("portfolio.alerts.thresholdRequired")}]}],expression:"['threshold', { rules: [{ required: true, message: $t('portfolio.alerts.thresholdRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{step:t.alertTypeIsPrice?.01:1,placeholder:t.alertTypeIsPrice?t.$t("portfolio.alerts.enterPrice"):t.$t("portfolio.alerts.enterPercent"),precision:t.alertTypeIsPrice?4:2}}),t.alertTypeIsPrice?e("span",{staticClass:"alert-unit"},[t._v("$")]):e("span",{staticClass:"alert-unit"},[t._v("%")])],1),t.alertPosition&&t.alertTypeIsPrice?e("div",{staticClass:"threshold-hint"},[t._v(" "+t._s(t.$t("portfolio.alerts.currentPriceHint"))+": $"+t._s(t.formatNumber(t.alertPosition.current_price||t.alertPosition.entry_price))+" ")]):t._e()]),e("a-form-item",{attrs:{label:t.$t("portfolio.alerts.repeatInterval")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["repeat_interval",{initialValue:0}],expression:"['repeat_interval', { initialValue: 0 }]"}]},[e("a-select-option",{attrs:{value:0}},[t._v(t._s(t.$t("portfolio.alerts.noRepeat")))]),e("a-select-option",{attrs:{value:5}},[t._v(t._s(t.$t("portfolio.alerts.every5min")))]),e("a-select-option",{attrs:{value:15}},[t._v(t._s(t.$t("portfolio.alerts.every15min")))]),e("a-select-option",{attrs:{value:30}},[t._v(t._s(t.$t("portfolio.alerts.every30min")))]),e("a-select-option",{attrs:{value:60}},[t._v(t._s(t.$t("portfolio.alerts.every1hour")))]),e("a-select-option",{attrs:{value:240}},[t._v(t._s(t.$t("portfolio.alerts.every4hours")))]),e("a-select-option",{attrs:{value:1440}},[t._v(t._s(t.$t("portfolio.alerts.onceDaily")))])],1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.notifyChannels")}},[e("a-checkbox-group",{model:{value:t.alertChannels,callback:function(e){t.alertChannels=e},expression:"alertChannels"}},[e("a-checkbox",{attrs:{value:"browser"}},[e("a-icon",{attrs:{type:"bell"}}),t._v(" "+t._s(t.$t("portfolio.form.browser"))+" ")],1),e("a-checkbox",{attrs:{value:"telegram"}},[e("a-icon",{attrs:{type:"message"}}),t._v(" Telegram ")],1),e("a-checkbox",{attrs:{value:"email"}},[e("a-icon",{attrs:{type:"mail"}}),t._v(" "+t._s(t.$t("portfolio.form.email"))+" ")],1)],1)],1),t.alertChannels.includes("telegram")||t.alertChannels.includes("email")?e("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"info",showIcon:""},scopedSlots:t._u([{key:"message",fn:function(){return[e("span",[t._v(" "+t._s(t.$t("portfolio.form.notificationFromProfile"))+" "),e("router-link",{staticStyle:{"margin-left":"8px"},attrs:{to:"/profile"}},[e("a-icon",{attrs:{type:"setting"}}),t._v(" "+t._s(t.$t("portfolio.form.goToProfile"))+" ")],1)],1)]},proxy:!0}],null,!1,440262090)}):t._e(),e("a-form-item",{attrs:{label:t.$t("portfolio.alerts.enabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["is_active",{initialValue:!0,valuePropName:"checked"}],expression:"['is_active', { initialValue: true, valuePropName: 'checked' }]"}]}),e("span",{staticClass:"switch-label"},[t._v(t._s(t.$t("portfolio.alerts.enabledDesc")))])],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.notes")}},[e("a-textarea",{directives:[{name:"decorator",rawName:"v-decorator",value:["notes"],expression:"['notes']"}],attrs:{placeholder:t.$t("portfolio.form.enterNotes"),autoSize:{minRows:2,maxRows:4}}})],1)],1)],2),e("a-modal",{attrs:{title:t.editingMonitor?t.$t("portfolio.modal.editMonitor"):t.$t("portfolio.modal.addMonitor"),visible:t.showAddMonitorModal,confirmLoading:t.savingMonitor,width:"600px"},on:{ok:t.handleSaveMonitor,cancel:t.closeMonitorModal}},[e("a-form",{attrs:{form:t.monitorForm,"label-col":{span:6},"wrapper-col":{span:16}}},[e("a-form-item",{attrs:{label:t.$t("portfolio.form.monitorName")}},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["name",{rules:[{required:!0,message:t.$t("portfolio.form.monitorNameRequired")}]}],expression:"['name', { rules: [{ required: true, message: $t('portfolio.form.monitorNameRequired') }] }]"}],attrs:{placeholder:t.$t("portfolio.form.enterMonitorName")}})],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.interval")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["interval_minutes",{initialValue:60,rules:[{required:!0}]}],expression:"['interval_minutes', { initialValue: 60, rules: [{ required: true }] }]"}]},[e("a-select-option",{attrs:{value:5}},[t._v("5 "+t._s(t.$t("portfolio.form.minutes")))]),e("a-select-option",{attrs:{value:10}},[t._v("10 "+t._s(t.$t("portfolio.form.minutes")))]),e("a-select-option",{attrs:{value:30}},[t._v("30 "+t._s(t.$t("portfolio.form.minutes")))]),e("a-select-option",{attrs:{value:60}},[t._v("1 "+t._s(t.$t("portfolio.form.hour")))]),e("a-select-option",{attrs:{value:120}},[t._v("2 "+t._s(t.$t("portfolio.form.hours")))]),e("a-select-option",{attrs:{value:240}},[t._v("4 "+t._s(t.$t("portfolio.form.hours")))]),e("a-select-option",{attrs:{value:480}},[t._v("8 "+t._s(t.$t("portfolio.form.hours")))]),e("a-select-option",{attrs:{value:1440}},[t._v("24 "+t._s(t.$t("portfolio.form.hours")))])],1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.notifyChannels")}},[e("a-checkbox-group",{model:{value:t.monitorChannels,callback:function(e){t.monitorChannels=e},expression:"monitorChannels"}},[e("a-checkbox",{attrs:{value:"browser"}},[t._v(t._s(t.$t("portfolio.form.browser")))]),e("a-checkbox",{attrs:{value:"telegram"}},[t._v("Telegram")]),e("a-checkbox",{attrs:{value:"email"}},[t._v(t._s(t.$t("portfolio.form.email")))])],1)],1),t.monitorChannels.includes("telegram")||t.monitorChannels.includes("email")?e("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"info",showIcon:""},scopedSlots:t._u([{key:"message",fn:function(){return[e("span",[t._v(" "+t._s(t.$t("portfolio.form.notificationFromProfile"))+" "),e("router-link",{staticStyle:{"margin-left":"8px"},attrs:{to:"/profile"}},[e("a-icon",{attrs:{type:"setting"}}),t._v(" "+t._s(t.$t("portfolio.form.goToProfile"))+" ")],1)],1)]},proxy:!0}],null,!1,440262090)}):t._e(),e("a-form-item",{attrs:{label:t.$t("portfolio.form.monitorScope")}},[e("a-radio-group",{on:{change:t.handleMonitorScopeChange},model:{value:t.monitorScope,callback:function(e){t.monitorScope=e},expression:"monitorScope"}},[e("a-radio",{attrs:{value:"all"}},[t._v(t._s(t.$t("portfolio.form.allPositions")))]),e("a-radio",{attrs:{value:"selected"}},[t._v(t._s(t.$t("portfolio.form.selectedPositions")))])],1)],1),"selected"===t.monitorScope?e("a-form-item",{attrs:{label:t.$t("portfolio.form.selectPositions")}},[e("a-checkbox-group",{staticClass:"position-checkbox-group",model:{value:t.selectedMonitorPositions,callback:function(e){t.selectedMonitorPositions=e},expression:"selectedMonitorPositions"}},t._l(t.positions,function(o){return e("div",{key:o.id,staticClass:"position-checkbox-item"},[e("a-checkbox",{staticClass:"position-checkbox",attrs:{value:o.id}},[e("div",{staticClass:"position-checkbox-label"},[e("div",{staticClass:"position-left"},[e("a-tag",{attrs:{color:t.getMarketColor(o.market),size:"small"}},[t._v(t._s(o.market))]),e("span",{staticClass:"symbol"},[t._v(t._s(o.symbol))])],1),e("div",{staticClass:"position-middle"},[e("span",{staticClass:"name",attrs:{title:o.name}},[t._v(t._s(o.name))])]),e("div",{staticClass:"position-right"},[e("span",{class:["pnl",o.pnl>=0?"positive":"negative"]},[t._v(" "+t._s(o.pnl>=0?"+":"")+t._s(t.formatNumber(o.pnl_percent))+"% ")])])])])],1)}),0),e("div",{staticClass:"position-select-actions"},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:t.selectAllPositions}},[t._v(" "+t._s(t.$t("portfolio.form.selectAll"))+" ")]),e("a-divider",{attrs:{type:"vertical"}}),e("a-button",{attrs:{type:"link",size:"small"},on:{click:t.deselectAllPositions}},[t._v(" "+t._s(t.$t("portfolio.form.deselectAll"))+" ")]),e("span",{staticClass:"selected-count"},[t._v(" "+t._s(t.$t("portfolio.form.selectedCount",{count:t.selectedMonitorPositions.length,total:t.positions.length}))+" ")])],1)],1):t._e(),e("a-form-item",{attrs:{label:t.$t("portfolio.form.customPrompt")}},[e("a-textarea",{directives:[{name:"decorator",rawName:"v-decorator",value:["prompt"],expression:"['prompt']"}],attrs:{rows:3,placeholder:t.$t("portfolio.form.customPromptPlaceholder")}})],1)],1)],1)],1)},i=[],a=o(9133),r=o(76959),n=o(17654),l=o(57888),c=(o(93693),o(2970)),u=o(95353),p=o(76471);function m(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,p.Ay)({url:"/api/portfolio/positions",method:"get",params:t})}function d(t){return(0,p.Ay)({url:"/api/portfolio/positions",method:"post",data:t})}function f(t,e){return(0,p.Ay)({url:"/api/portfolio/positions/".concat(t),method:"put",data:e})}function v(t){return(0,p.Ay)({url:"/api/portfolio/positions/".concat(t),method:"delete"})}function h(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,p.Ay)({url:"/api/portfolio/summary",method:"get",params:t})}function _(){return(0,p.Ay)({url:"/api/portfolio/monitors",method:"get"})}function g(t){return(0,p.Ay)({url:"/api/portfolio/monitors",method:"post",data:t})}function y(t,e){return(0,p.Ay)({url:"/api/portfolio/monitors/".concat(t),method:"put",data:e})}function b(t){return(0,p.Ay)({url:"/api/portfolio/monitors/".concat(t),method:"delete"})}function C(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(0,p.Ay)({url:"/api/portfolio/monitors/".concat(t,"/run"),method:"post",data:e})}function $(){return(0,p.Ay)({url:"/api/portfolio/alerts",method:"get"})}function k(t){return(0,p.Ay)({url:"/api/portfolio/alerts",method:"post",data:t})}function w(t,e){return(0,p.Ay)({url:"/api/portfolio/alerts/".concat(t),method:"put",data:e})}function A(t){return(0,p.Ay)({url:"/api/portfolio/alerts/".concat(t),method:"delete"})}function S(){return(0,p.Ay)({url:"/api/portfolio/groups",method:"get"})}function P(t){return(0,p.Ay)({url:"/api/market/symbols/search",method:"post",data:t})}function M(){return(0,p.Ay)({url:"/api/market/types",method:"get"})}var N=o(27617),x={name:"Portfolio",props:{embedded:{type:Boolean,default:!1}},data:function(){return{simpleImage:c.Ay.PRESENTED_IMAGE_SIMPLE,summary:{total_cost:0,total_market_value:0,total_pnl:0,total_pnl_percent:0,position_count:0,market_distribution:[],today_pnl:0,today_change:0},positions:[],loadingPositions:!1,showAddPositionModal:!1,savingPosition:!1,editingPosition:null,positionForm:null,monitors:[],loadingMonitors:!1,showAddMonitorModal:!1,savingMonitor:!1,editingMonitor:null,monitorForm:null,runningMonitor:null,marketTypes:[],symbolSearchResults:[],searchTimer:null,selectedSymbolName:"",symbolSearchKeyword:"",priceRefreshTimer:null,lastSyncTime:null,isSyncing:!1,groups:[],selectedGroup:"",viewMode:"grid",activeGroups:[],alerts:[],loadingAlerts:!1,showAddAlertModal:!1,savingAlert:!1,deletingAlert:!1,editingAlert:null,alertForm:null,alertPosition:null,alertChannels:["browser"],monitorChannels:["browser"],monitorScope:"all",selectedMonitorPositions:[],userNotificationSettings:{default_channels:["browser"],telegram_bot_token:"",telegram_chat_id:"",email:"",phone:"",discord_webhook:"",webhook_url:"",webhook_token:""}}},computed:(0,l.A)((0,l.A)({},(0,u.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},selectedChannels:function(){return this.monitorChannels||[]},selectedAlertChannels:function(){return this.alertChannels||[]},filteredPositions:function(){var t=this;return this.selectedGroup?"__ungrouped__"===this.selectedGroup?this.positions.filter(function(t){return!t.group_name}):this.positions.filter(function(e){return e.group_name===t.selectedGroup}):this.positions},groupNames:function(){return this.groups.map(function(t){return t.name})},alertTypeIsPrice:function(){if(!this.alertForm)return!0;var t=this.alertForm.getFieldValue("alert_type");return t&&t.startsWith("price_")},profitLossStats:function(){var t=this.positions.filter(function(t){return t.pnl>=0}).length,e=this.positions.filter(function(t){return t.pnl<0}).length;return{profit:t,loss:e}},bestPerformer:function(){return 0===this.positions.length?null:this.positions.reduce(function(t,e){return!t||(e.pnl_percent||0)>(t.pnl_percent||0)?e:t},null)},worstPerformer:function(){return 0===this.positions.length?null:this.positions.reduce(function(t,e){return!t||(e.pnl_percent||0)<(t.pnl_percent||0)?e:t},null)},ungroupedPositions:function(){return this.positions.filter(function(t){return!t.group_name})},groupsWithPositions:function(){var t={};return this.positions.forEach(function(e){e.group_name&&(t[e.group_name]||(t[e.group_name]={name:e.group_name,positions:[]}),t[e.group_name].positions.push(e))}),Object.values(t).sort(function(t,e){return t.name.localeCompare(e.name)})}}),created:function(){this.positionForm=this.$form.createForm(this,{name:"position_form"}),this.monitorForm=this.$form.createForm(this,{name:"monitor_form"}),this.alertForm=this.$form.createForm(this,{name:"alert_form"}),this.loadMarketTypes(),this.loadData()},mounted:function(){var t=this;this.priceRefreshTimer=setInterval(function(){t.refreshPrices()},3e4),this.loadUserNotificationSettings()},beforeDestroy:function(){this.priceRefreshTimer&&clearInterval(this.priceRefreshTimer),this.searchTimer&&clearTimeout(this.searchTimer)},methods:{loadUserNotificationSettings:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,N.vF)();case 1:o=e.v,1===o.code&&o.data&&(t.userNotificationSettings={default_channels:o.data.default_channels||["browser"],telegram_bot_token:o.data.telegram_bot_token||"",telegram_chat_id:o.data.telegram_chat_id||"",email:o.data.email||"",phone:o.data.phone||"",discord_webhook:o.data.discord_webhook||"",webhook_url:o.data.webhook_url||"",webhook_token:o.data.webhook_token||""}),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadData:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.n){case 0:return e.n=1,Promise.all([t.loadPositions(),t.loadSummary(),t.loadMonitors(),t.loadGroups(),t.loadAlerts()]);case 1:t.lastSyncTime=new Date;case 2:return e.a(2)}},e)}))()},filterByGroup:function(){},refreshPrices:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!t.isSyncing){e.n=1;break}return e.a(2);case 1:return t.isSyncing=!0,e.p=2,e.n=3,Promise.all([t.loadPositions(!0),t.loadSummary(!0)]);case 3:t.lastSyncTime=new Date;case 4:return e.p=4,t.isSyncing=!1,e.f(4);case 5:return e.a(2)}},e,null,[[2,,4,5]])}))()},formatSyncTime:function(t){if(!t)return"-";var e=new Date,o=Math.floor((e-t)/1e3);return o<60?this.$t("portfolio.summary.justNow"):o<3600?"".concat(Math.floor(o/60)," ").concat(this.$t("portfolio.form.minutes")).concat(this.$t("portfolio.summary.ago")):t.toLocaleTimeString()},getGroupPnl:function(t){return t.reduce(function(t,e){return t+(e.pnl||0)},0)},loadGroups:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,S();case 1:o=e.v,o&&1===o.code&&o.data&&(t.groups=o.data.groups||[]),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadAlerts:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loadingAlerts=!0,e.p=1,e.n=2,$();case 2:o=e.v,o&&1===o.code&&(t.alerts=o.data||[]),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.p=4,t.loadingAlerts=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},loadMarketTypes:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,M();case 1:o=e.v,o&&1===o.code&&o.data&&(t.marketTypes=o.data.map(function(t){return{value:t.value,i18nKey:t.i18nKey||"dashboard.analysis.market.".concat(t.value)}})),e.n=3;break;case 2:e.p=2,e.v,t.marketTypes=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}];case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadPositions:function(){var t=arguments,e=this;return(0,n.A)((0,r.A)().m(function o(){var s,i,a;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return s=t.length>0&&void 0!==t[0]&&t[0],e.loadingPositions=!0,o.p=1,i=s?{refresh:"1"}:{},o.n=2,m(i);case 2:a=o.v,a&&1===a.code&&(e.positions=a.data||[]),o.n=4;break;case 3:o.p=3,o.v,e.$message.error(e.$t("portfolio.message.loadFailed"));case 4:return o.p=4,e.loadingPositions=!1,o.f(4);case 5:return o.a(2)}},o,null,[[1,3,4,5]])}))()},loadSummary:function(){var t=arguments,e=this;return(0,n.A)((0,r.A)().m(function o(){var s,i;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return s=t.length>0&&void 0!==t[0]&&t[0],o.p=1,o.n=2,h(s?{refresh:"1"}:{});case 2:i=o.v,i&&1===i.code&&(e.summary=i.data||e.summary),o.n=4;break;case 3:o.p=3,o.v;case 4:return o.a(2)}},o,null,[[1,3]])}))()},loadMonitors:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loadingMonitors=!0,e.p=1,e.n=2,_();case 2:o=e.v,o&&1===o.code&&(t.monitors=o.data||[]),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.p=4,t.loadingMonitors=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleMarketChange:function(t){this.symbolSearchResults=[],this.symbolSearchKeyword="",this.positionForm.setFieldsValue({symbol:""})},handleSymbolSearch:function(t){var e=this;this.symbolSearchKeyword=t||"",this.searchTimer&&clearTimeout(this.searchTimer),!t||t.length<1?this.symbolSearchResults=[]:this.searchTimer=setTimeout((0,n.A)((0,r.A)().m(function o(){var s,i;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:if(s=e.positionForm.getFieldValue("market"),s){o.n=1;break}return o.a(2);case 1:return o.p=1,o.n=2,P({market:s,keyword:t,limit:10});case 2:i=o.v,i&&1===i.code?e.symbolSearchResults=i.data||[]:e.symbolSearchResults=[],o.n=4;break;case 3:o.p=3,o.v,e.symbolSearchResults=[];case 4:return o.a(2)}},o,null,[[1,3]])})),300)},handleSymbolSelect:function(t,e){var o=this.symbolSearchResults.find(function(e){return e.symbol===t});this.selectedSymbolName=o?o.name:"",this.symbolSearchKeyword=""},editPosition:function(t){var e=this;this.editingPosition=t,this.showAddPositionModal=!0,this.$nextTick(function(){e.positionForm.setFieldsValue({market:t.market,symbol:t.symbol,side:t.side,quantity:t.quantity,entry_price:t.entry_price,notes:t.notes,group_name:t.group_name||""})})},handleSavePosition:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.n){case 0:t.positionForm.validateFields(function(){var e=(0,n.A)((0,r.A)().m(function e(o,s){var i,a,n;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!o){e.n=1;break}return e.a(2);case 1:if(t.savingPosition=!0,e.p=2,i={market:s.market,symbol:s.symbol.toUpperCase(),side:s.side,quantity:s.quantity,entry_price:s.entry_price,notes:s.notes||"",name:t.selectedSymbolName||"",group_name:s.group_name||""},!t.editingPosition){e.n=4;break}return e.n=3,f(t.editingPosition.id,i);case 3:a=e.v,e.n=6;break;case 4:return e.n=5,d(i);case 5:a=e.v;case 6:a&&1===a.code?(t.$message.success(t.$t("portfolio.message.saveSuccess")),t.closePositionModal(),t.loadData()):t.$message.error((null===(n=a)||void 0===n?void 0:n.msg)||t.$t("portfolio.message.saveFailed")),e.n=8;break;case 7:e.p=7,e.v,t.$message.error(t.$t("portfolio.message.saveFailed"));case 8:return e.p=8,t.savingPosition=!1,e.f(8);case 9:return e.a(2)}},e,null,[[2,7,8,9]])}));return function(t,o){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},deletePosition:function(t){var e=this;return(0,n.A)((0,r.A)().m(function o(){var s;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return o.p=0,o.n=1,v(t);case 1:s=o.v,s&&1===s.code?(e.$message.success(e.$t("portfolio.message.deleteSuccess")),e.loadData()):e.$message.error((null===s||void 0===s?void 0:s.msg)||e.$t("portfolio.message.deleteFailed")),o.n=3;break;case 2:o.p=2,o.v,e.$message.error(e.$t("portfolio.message.deleteFailed"));case 3:return o.a(2)}},o,null,[[0,2]])}))()},closePositionModal:function(){this.showAddPositionModal=!1,this.editingPosition=null,this.positionForm.resetFields(),this.symbolSearchResults=[],this.selectedSymbolName="",this.symbolSearchKeyword=""},handleAlertChannelsChange:function(t){this.alertChannels=t||[]},showAddAlertForPosition:function(t){var e=this,o=this.alerts.find(function(e){return e.position_id===t.id});o?this.editAlert(o):(this.editingAlert=null,this.alertPosition=t,this.alertChannels=(0,a.A)(this.userNotificationSettings.default_channels||["browser"]),this.showAddAlertModal=!0,this.$nextTick(function(){e.alertForm.setFieldsValue({symbol:"".concat(t.market,"/").concat(t.symbol),alert_type:"price_above",threshold:t.current_price||t.entry_price,repeat_interval:0,is_active:!0,notes:""})}))},editAlert:function(t){var e,o=this;this.editingAlert=t,this.alertPosition=this.positions.find(function(e){return e.id===t.position_id})||{market:t.market,symbol:t.symbol,current_price:0,entry_price:0},this.alertChannels=(0,a.A)((null===(e=t.notification_config)||void 0===e?void 0:e.channels)||["browser"]),this.showAddAlertModal=!0,this.$nextTick(function(){o.alertForm&&o.alertForm.setFieldsValue({symbol:"".concat(t.market,"/").concat(t.symbol),alert_type:t.alert_type||"price_above",threshold:t.threshold||0,repeat_interval:t.repeat_interval||0,is_active:!1!==t.is_active,notes:t.notes||""})})},handleSaveAlert:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.n){case 0:t.alertForm.validateFields(function(){var e=(0,n.A)((0,r.A)().m(function e(o,s){var i,a,n,l,c,u,p;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!o){e.n=1;break}return e.a(2);case 1:if(t.savingAlert=!0,e.p=2,l={},t.alertChannels.includes("telegram")&&t.userNotificationSettings.telegram_chat_id&&(l.telegram=t.userNotificationSettings.telegram_chat_id,t.userNotificationSettings.telegram_bot_token&&(l.telegram_bot_token=t.userNotificationSettings.telegram_bot_token)),t.alertChannels.includes("email")&&t.userNotificationSettings.email&&(l.email=t.userNotificationSettings.email),t.alertChannels.includes("phone")&&t.userNotificationSettings.phone&&(l.phone=t.userNotificationSettings.phone),t.alertChannels.includes("discord")&&t.userNotificationSettings.discord_webhook&&(l.discord=t.userNotificationSettings.discord_webhook),t.alertChannels.includes("webhook")&&t.userNotificationSettings.webhook_url&&(l.webhook=t.userNotificationSettings.webhook_url,t.userNotificationSettings.webhook_token&&(l.webhook_token=t.userNotificationSettings.webhook_token)),c={position_id:null===(i=t.alertPosition)||void 0===i?void 0:i.id,market:null===(a=t.alertPosition)||void 0===a?void 0:a.market,symbol:null===(n=t.alertPosition)||void 0===n?void 0:n.symbol,alert_type:s.alert_type,threshold:s.threshold,notification_config:{channels:t.alertChannels.length>0?t.alertChannels:["browser"],targets:l,language:t.$store.getters.lang||"en-US"},is_active:!1!==s.is_active,repeat_interval:s.repeat_interval||0,notes:s.notes||""},!t.editingAlert){e.n=4;break}return e.n=3,w(t.editingAlert.id,c);case 3:u=e.v,e.n=6;break;case 4:return e.n=5,k(c);case 5:u=e.v;case 6:u&&1===u.code?(t.$message.success(t.$t("portfolio.message.saveSuccess")),t.closeAlertModal(),t.loadAlerts()):t.$message.error((null===(p=u)||void 0===p?void 0:p.msg)||t.$t("portfolio.message.saveFailed")),e.n=8;break;case 7:e.p=7,e.v,t.$message.error(t.$t("portfolio.message.saveFailed"));case 8:return e.p=8,t.savingAlert=!1,e.f(8);case 9:return e.a(2)}},e,null,[[2,7,8,9]])}));return function(t,o){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},deleteAlert:function(t){var e=this;return(0,n.A)((0,r.A)().m(function o(){var s;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return o.p=0,o.n=1,A(t);case 1:s=o.v,s&&1===s.code?(e.$message.success(e.$t("portfolio.message.deleteSuccess")),e.loadAlerts()):e.$message.error((null===s||void 0===s?void 0:s.msg)||e.$t("portfolio.message.deleteFailed")),o.n=3;break;case 2:o.p=2,o.v,e.$message.error(e.$t("portfolio.message.deleteFailed"));case 3:return o.a(2)}},o,null,[[0,2]])}))()},closeAlertModal:function(){this.showAddAlertModal=!1,this.editingAlert=null,this.alertPosition=null,this.alertChannels=(0,a.A)(this.userNotificationSettings.default_channels||["browser"]),this.alertForm.resetFields()},confirmDeleteAlert:function(){if(this.editingAlert){var t=this;this.$confirm({title:this.$t("portfolio.alerts.deleteConfirm"),okText:this.$t("common.confirm"),okType:"danger",cancelText:this.$t("common.cancel"),onOk:function(){return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.n){case 0:return e.n=1,t.handleDeleteAlert();case 1:return e.a(2)}},e)}))()}})}},handleDeleteAlert:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.editingAlert){e.n=1;break}return e.a(2);case 1:return t.deletingAlert=!0,e.p=2,e.n=3,A(t.editingAlert.id);case 3:if(o=e.v,!o||1!==o.code){e.n=5;break}return t.$message.success(t.$t("portfolio.message.deleteSuccess")),t.closeAlertModal(),e.n=4,t.loadAlerts();case 4:e.n=6;break;case 5:t.$message.error((null===o||void 0===o?void 0:o.msg)||t.$t("portfolio.message.deleteFailed"));case 6:e.n=8;break;case 7:e.p=7,e.v,t.$message.error(t.$t("portfolio.message.deleteFailed"));case 8:return e.p=8,t.deletingAlert=!1,e.f(8);case 9:return e.a(2)}},e,null,[[2,7,8,9]])}))()},focusMonitorsSection:function(){var t=this;this.$nextTick(function(){var e=t.$refs.monitorsSection;e&&"function"===typeof e.scrollIntoView&&e.scrollIntoView({behavior:"smooth",block:"start"})})},openAddMonitorModal:function(){var t=this;this.editingMonitor=null,this.monitorChannels=(0,a.A)(this.userNotificationSettings.default_channels||["browser"]),this.monitorScope="all",this.selectedMonitorPositions=[],this.showAddMonitorModal=!0,this.$nextTick(function(){t.monitorForm&&t.monitorForm.resetFields()})},handleMonitorChannelsChange:function(t){this.monitorChannels=t||[]},editMonitor:function(t){var e,o=this;this.editingMonitor=t,this.monitorChannels=(0,a.A)((null===(e=t.notification_config)||void 0===e?void 0:e.channels)||["browser"]);var s=[];if(t.position_ids)if("string"===typeof t.position_ids)try{s=JSON.parse(t.position_ids)||[]}catch(i){s=[]}else Array.isArray(t.position_ids)&&(s=t.position_ids);this.monitorScope=s.length>0?"selected":"all",this.selectedMonitorPositions=s,this.showAddMonitorModal=!0,this.$nextTick(function(){var e,s;o.monitorForm&&o.monitorForm.setFieldsValue({name:t.name,interval_minutes:(null===(e=t.config)||void 0===e?void 0:e.interval_minutes)||60,prompt:(null===(s=t.config)||void 0===s?void 0:s.prompt)||""})})},handleMonitorScopeChange:function(t){this.monitorScope=t.target.value,"all"===t.target.value&&(this.selectedMonitorPositions=[])},selectAllPositions:function(){this.selectedMonitorPositions=this.positions.map(function(t){return t.id})},deselectAllPositions:function(){this.selectedMonitorPositions=[]},handleSaveMonitor:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.n){case 0:t.monitorForm.validateFields(function(){var e=(0,n.A)((0,r.A)().m(function e(o,s){var i,a,n;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!o){e.n=1;break}return e.a(2);case 1:if("selected"!==t.monitorScope||0!==t.selectedMonitorPositions.length){e.n=2;break}return t.$message.warning(t.$t("portfolio.form.pleaseSelectPositions")),e.a(2);case 2:if(t.savingMonitor=!0,e.p=3,i={name:s.name,monitor_type:"ai",position_ids:"selected"===t.monitorScope?t.selectedMonitorPositions:[],config:{interval_minutes:s.interval_minutes,prompt:s.prompt||"",language:t.$store.getters.lang||"en-US"},notification_config:{channels:t.monitorChannels.length>0?t.monitorChannels:["browser"],targets:{telegram:t.userNotificationSettings.telegram_chat_id||"",telegram_bot_token:t.userNotificationSettings.telegram_bot_token||"",email:t.userNotificationSettings.email||"",phone:t.userNotificationSettings.phone||"",discord:t.userNotificationSettings.discord_webhook||"",webhook:t.userNotificationSettings.webhook_url||"",webhook_token:t.userNotificationSettings.webhook_token||""}},is_active:!0},!t.editingMonitor){e.n=5;break}return e.n=4,y(t.editingMonitor.id,i);case 4:a=e.v,e.n=7;break;case 5:return e.n=6,g(i);case 6:a=e.v;case 7:a&&1===a.code?(t.$message.success(t.$t("portfolio.message.saveSuccess")),t.closeMonitorModal(),t.loadMonitors()):t.$message.error((null===(n=a)||void 0===n?void 0:n.msg)||t.$t("portfolio.message.saveFailed")),e.n=9;break;case 8:e.p=8,e.v,t.$message.error(t.$t("portfolio.message.saveFailed"));case 9:return e.p=9,t.savingMonitor=!1,e.f(9);case 10:return e.a(2)}},e,null,[[3,8,9,10]])}));return function(t,o){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},toggleMonitor:function(t,e){var o=this;return(0,n.A)((0,r.A)().m(function s(){var i;return(0,r.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return s.p=0,s.n=1,y(t,{is_active:e});case 1:i=s.v,i&&1===i.code&&(o.$message.success(e?o.$t("portfolio.message.monitorEnabled"):o.$t("portfolio.message.monitorDisabled")),o.loadMonitors()),s.n=3;break;case 2:s.p=2,s.v,o.$message.error(o.$t("portfolio.message.updateFailed"));case 3:return s.a(2)}},s,null,[[0,2]])}))()},runMonitorNow:function(t){var e=this;return(0,n.A)((0,r.A)().m(function o(){var s,i,a,n,l,c,u;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return e.runningMonitor=t,o.p=1,s=e.$store.getters.lang||"en-US",o.n=2,C(t,{language:s,async:!0});case 2:i=o.v,i&&1===i.code&&("running"===(null===(a=i.data)||void 0===a?void 0:a.status)?(e.$message.success(e.$t("portfolio.message.monitorRunning")),e.$notification.info({message:e.$t("portfolio.monitors.runningTitle"),description:e.$t("portfolio.monitors.runningDesc"),duration:5})):null!==(n=i.data)&&void 0!==n&&n.success?(e.$message.success(e.$t("portfolio.message.monitorRunSuccess")),i.data.analysis&&e.$notification.open({message:e.$t("portfolio.monitors.analysisResult"),description:i.data.analysis.substring(0,500)+(i.data.analysis.length>500?"...":""),duration:0})):null!==(l=i.data)&&void 0!==l&&l.error&&e.$message.error(i.data.error||e.$t("portfolio.message.monitorRunFailed")),e.loadMonitors()),o.n=4;break;case 3:o.p=3,u=o.v,"ECONNABORTED"===u.code||null!==(c=u.message)&&void 0!==c&&c.includes("timeout")?e.$notification.warning({message:e.$t("portfolio.monitors.timeoutTitle"),description:e.$t("portfolio.monitors.timeoutDesc"),duration:8}):e.$message.error(e.$t("portfolio.message.monitorRunFailed"));case 4:return o.p=4,e.runningMonitor=null,o.f(4);case 5:return o.a(2)}},o,null,[[1,3,4,5]])}))()},deleteMonitor:function(t){var e=this;return(0,n.A)((0,r.A)().m(function o(){var s;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return o.p=0,o.n=1,b(t);case 1:s=o.v,s&&1===s.code?(e.$message.success(e.$t("portfolio.message.deleteSuccess")),e.loadMonitors()):e.$message.error((null===s||void 0===s?void 0:s.msg)||e.$t("portfolio.message.deleteFailed")),o.n=3;break;case 2:o.p=2,o.v,e.$message.error(e.$t("portfolio.message.deleteFailed"));case 3:return o.a(2)}},o,null,[[0,2]])}))()},closeMonitorModal:function(){this.showAddMonitorModal=!1,this.editingMonitor=null,this.monitorForm.resetFields(),this.monitorChannels=(0,a.A)(this.userNotificationSettings.default_channels||["browser"]),this.monitorScope="all",this.selectedMonitorPositions=[]},getMonitorPositionIds:function(t){if(!t.position_ids)return[];if("string"===typeof t.position_ids)try{return JSON.parse(t.position_ids)||[]}catch(e){return[]}return Array.isArray(t.position_ids)?t.position_ids:[]},getPositionNameById:function(t){var e=this.positions.find(function(e){return e.id===t});return e?"".concat(e.symbol," (").concat(e.name||e.market,")"):"#".concat(t)},hasAlertForPosition:function(t){return this.alerts.some(function(e){return e.position_id===t})},getAlertForPosition:function(t){return this.alerts.find(function(e){return e.position_id===t})},getMarketColor:function(t){var e={USStock:"green",Crypto:"purple",Forex:"gold",Futures:"cyan"};return e[t]||"default"},getMarketName:function(t){return this.$t("dashboard.analysis.market.".concat(t))||t},getCurrencySymbol:function(t){var e=["USStock","Crypto","Forex","Futures"];return e.includes(t)?"$":"¥"},formatNumber:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return void 0===t||null===t?"0.00":Number(t).toLocaleString("en-US",{minimumFractionDigits:e,maximumFractionDigits:e})},formatPrice:function(t){return t?t>=1e3?this.formatNumber(t,2):t>=1?this.formatNumber(t,4):this.formatNumber(t,6):"0"},formatTime:function(t){if(!t)return"-";var e;if("number"===typeof t)e=new Date(1e3*t);else{if("string"!==typeof t)return"-";e=/^\d+$/.test(t)?new Date(1e3*parseInt(t,10)):new Date(t)}return isNaN(e.getTime())?"-":e.toLocaleString()},getIntervalText:function(t){if(!t)return"-";if(t<60)return"".concat(t," ").concat(this.$t("portfolio.form.minutes"));var e=t/60;return"".concat(e," ").concat(this.$t("portfolio.form.hours"))}}},F=x,T=o(845),q=(0,T.A)(F,s,i,!1,null,"398d904c",null),R=q.exports},27617:function(t,e,o){o.d(e,{DK:function(){return g},E$:function(){return u},Gl:function(){return d},O0:function(){return c},TK:function(){return r},aU:function(){return i},cw:function(){return l},d$:function(){return b},hG:function(){return n},kg:function(){return a},nY:function(){return _},r7:function(){return p},rx:function(){return v},v9:function(){return f},vF:function(){return m},vi:function(){return y},wq:function(){return h}});var s=o(76471);function i(t){return(0,s.Ay)({url:"/api/users/list",method:"get",params:t})}function a(t){return(0,s.Ay)({url:"/api/users/create",method:"post",data:t})}function r(t,e){return(0,s.Ay)({url:"/api/users/update",method:"put",params:{id:t},data:e})}function n(t){return(0,s.Ay)({url:"/api/users/delete",method:"delete",params:{id:t}})}function l(t){return(0,s.Ay)({url:"/api/users/reset-password",method:"post",data:t})}function c(){return(0,s.Ay)({url:"/api/users/roles",method:"get"})}function u(){return(0,s.Ay)({url:"/api/users/profile",method:"get"})}function p(t){return(0,s.Ay)({url:"/api/users/profile/update",method:"put",data:t})}function m(){return(0,s.Ay)({url:"/api/users/notification-settings",method:"get"})}function d(t){return(0,s.Ay)({url:"/api/users/notification-settings",method:"put",data:t})}function f(t){return(0,s.Ay)({url:"/api/users/my-credits-log",method:"get",params:t})}function v(t){return(0,s.Ay)({url:"/api/users/my-referrals",method:"get",params:t})}function h(t){return(0,s.Ay)({url:"/api/users/set-credits",method:"post",data:t})}function _(t){return(0,s.Ay)({url:"/api/users/set-vip",method:"post",data:t})}function g(t){return(0,s.Ay)({url:"/api/users/system-strategies",method:"get",params:t})}function y(t){return(0,s.Ay)({url:"/api/users/admin-orders",method:"get",params:t})}function b(t){return(0,s.Ay)({url:"/api/users/admin-ai-stats",method:"get",params:t})}}}]); \ No newline at end of file diff --git a/frontend/dist/js/523-legacy.f12bf31a.js b/frontend/dist/js/523-legacy.f12bf31a.js deleted file mode 100644 index 4ca54d3..0000000 --- a/frontend/dist/js/523-legacy.f12bf31a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[523],{89523:function(e,t,a){a.d(t,{A:function(){return P}});a(62010),a(27495),a(25440);var i=function(){var e=this,t=e._self._c;return t("a-drawer",{staticClass:"quick-trade-drawer",class:{"theme-dark":e.isDark},attrs:{title:null,width:380,visible:e.visible,closable:!1,bodyStyle:{padding:0},maskStyle:{background:"rgba(0,0,0,0.45)"}},on:{close:e.handleClose}},[t("div",{staticClass:"qt-header"},[t("div",{staticClass:"qt-header-left"},[t("a-icon",{staticClass:"qt-icon",attrs:{type:"thunderbolt",theme:"filled"}}),t("span",{staticClass:"qt-header-title"},[e._v(e._s(e.$t("quickTrade.title")))])],1),t("a-icon",{staticClass:"qt-close",attrs:{type:"close"},on:{click:e.handleClose}})],1),t("div",{staticClass:"qt-symbol-bar"},[t("div",{staticClass:"qt-symbol-selector"},[t("a-select",{staticStyle:{width:"100%"},attrs:{"show-search":"",placeholder:e.$t("quickTrade.selectSymbol"),"filter-option":!1,"not-found-content":e.symbolSearching?null:void 0,loading:e.symbolSearching},on:{search:e.handleSymbolSearch,change:e.handleSymbolChange,focus:e.handleSymbolFocus},model:{value:e.currentSymbol,callback:function(t){e.currentSymbol=t},expression:"currentSymbol"}},[t("a-icon",{staticStyle:{color:"#999"},attrs:{slot:"suffixIcon",type:"search"},slot:"suffixIcon"}),e._l(e.symbolSuggestions,function(a){return t("a-select-option",{key:a.value,attrs:{value:a.value}},[t("div",{staticClass:"qt-symbol-option"},[t("span",{staticClass:"qt-symbol-option-name"},[e._v(e._s(a.symbol))]),a.name?t("span",{staticClass:"qt-symbol-option-desc"},[e._v(e._s(a.name))]):e._e()])])})],2)],1),t("div",{staticClass:"qt-price-display",class:e.priceChangeClass},[t("span",{staticClass:"qt-current-price"},[e._v("$"+e._s(e.formatPrice(e.currentPrice)))])])]),t("div",{staticClass:"qt-section"},[t("div",{staticClass:"qt-label"},[e._v(e._s(e.$t("quickTrade.exchange"))+" "),t("span",{staticClass:"qt-crypto-hint"},[e._v(e._s(e.$t("quickTrade.cryptoOnly")))])]),t("a-select",{staticStyle:{width:"100%"},attrs:{placeholder:e.$t("quickTrade.selectExchange"),loading:e.credLoading,notFoundContent:e.$t("quickTrade.noExchange")},on:{change:e.onCredentialChange},model:{value:e.selectedCredentialId,callback:function(t){e.selectedCredentialId=t},expression:"selectedCredentialId"}},e._l(e.credentials,function(a){return t("a-select-option",{key:a.id,attrs:{value:a.id}},[t("span",{staticStyle:{"text-transform":"capitalize"}},[e._v(e._s(a.exchange_id||a.name))]),a.market_type?t("a-tag",{staticStyle:{"margin-left":"6px"},attrs:{size:"small"}},[e._v(e._s(a.market_type))]):e._e()],1)}),1),e.balance.available>0?t("div",{staticClass:"qt-balance"},[t("span",{staticClass:"qt-balance-label"},[e._v(e._s(e.$t("quickTrade.available"))+":")]),t("span",{staticClass:"qt-balance-value"},[e._v("$"+e._s(e.formatPrice(e.balance.available)))])]):e._e()],1),t("div",{staticClass:"qt-section"},[t("div",{staticClass:"qt-direction-toggle"},[t("div",{staticClass:"qt-dir-btn qt-dir-long",class:{active:"buy"===e.side},on:{click:function(t){e.side="buy"}}},[t("a-icon",{attrs:{type:"arrow-up"}}),e._v(" "+e._s(e.$t("quickTrade.long"))+" ")],1),t("div",{staticClass:"qt-dir-btn qt-dir-short",class:{active:"sell"===e.side},on:{click:function(t){e.side="sell"}}},[t("a-icon",{attrs:{type:"arrow-down"}}),e._v(" "+e._s(e.$t("quickTrade.short"))+" ")],1)])]),t("div",{staticClass:"qt-section"},[t("a-radio-group",{staticStyle:{width:"100%"},attrs:{"button-style":"solid",size:"small"},model:{value:e.orderType,callback:function(t){e.orderType=t},expression:"orderType"}},[t("a-radio-button",{staticStyle:{width:"50%","text-align":"center"},attrs:{value:"market"}},[e._v(" "+e._s(e.$t("quickTrade.market"))+" ")]),t("a-radio-button",{staticStyle:{width:"50%","text-align":"center"},attrs:{value:"limit"}},[e._v(" "+e._s(e.$t("quickTrade.limit"))+" ")])],1)],1),"limit"===e.orderType?t("div",{staticClass:"qt-section"},[t("div",{staticClass:"qt-label"},[e._v(e._s(e.$t("quickTrade.limitPrice")))]),t("a-input-number",{staticStyle:{width:"100%"},attrs:{min:0,step:e.priceStep,precision:e.pricePrecision,placeholder:e.$t("quickTrade.enterPrice")},model:{value:e.limitPrice,callback:function(t){e.limitPrice=t},expression:"limitPrice"}})],1):e._e(),t("div",{staticClass:"qt-section"},[t("div",{staticClass:"qt-label"},[e._v(e._s(e.$t("quickTrade.amount"))+" (USDT)")]),t("a-input-number",{staticStyle:{width:"100%"},attrs:{min:1,step:10,precision:2,placeholder:e.$t("quickTrade.enterAmount")},model:{value:e.amount,callback:function(t){e.amount=t},expression:"amount"}}),t("div",{staticClass:"qt-quick-amounts"},e._l(e.quickAmountPcts,function(a){return t("a-button",{key:a,attrs:{size:"small",disabled:e.balance.available<=0},on:{click:function(t){return e.setAmountByPercent(a)}}},[e._v(" "+e._s(a)+"% ")])}),1)],1),"spot"!==e.marketType?t("div",{staticClass:"qt-section"},[t("div",{staticClass:"qt-label"},[e._v(e._s(e.$t("quickTrade.leverage")))]),t("div",{staticClass:"qt-leverage-row"},[t("a-slider",{staticStyle:{flex:"1","margin-right":"12px"},attrs:{min:1,max:125,marks:e.leverageMarks,tipFormatter:function(e){return e+"x"}},model:{value:e.leverage,callback:function(t){e.leverage=t},expression:"leverage"}}),t("a-input-number",{staticStyle:{width:"80px"},attrs:{min:1,max:125,formatter:function(e){return"".concat(e,"x")},parser:function(e){return e.replace("x","")}},model:{value:e.leverage,callback:function(t){e.leverage=t},expression:"leverage"}})],1)]):e._e(),t("a-collapse",{staticStyle:{background:"transparent",margin:"0 16px"},attrs:{bordered:!1}},[t("a-collapse-panel",{key:"tpsl",style:e.collapseStyle,attrs:{header:e.$t("quickTrade.tpsl")}},[t("div",{staticClass:"qt-tpsl-row"},[t("div",{staticClass:"qt-tpsl-item"},[t("span",{staticClass:"qt-label",staticStyle:{color:"#52c41a"}},[e._v(e._s(e.$t("quickTrade.tp")))]),t("a-input-number",{staticStyle:{width:"100%"},attrs:{min:0,step:e.priceStep,precision:e.pricePrecision,placeholder:e.$t("quickTrade.tpPlaceholder")},model:{value:e.tpPrice,callback:function(t){e.tpPrice=t},expression:"tpPrice"}})],1),t("div",{staticClass:"qt-tpsl-item"},[t("span",{staticClass:"qt-label",staticStyle:{color:"#f5222d"}},[e._v(e._s(e.$t("quickTrade.sl")))]),t("a-input-number",{staticStyle:{width:"100%"},attrs:{min:0,step:e.priceStep,precision:e.pricePrecision,placeholder:e.$t("quickTrade.slPlaceholder")},model:{value:e.slPrice,callback:function(t){e.slPrice=t},expression:"slPrice"}})],1)])])],1),t("div",{staticClass:"qt-submit-section"},[t("a-button",{staticClass:"qt-submit-btn",class:["buy"===e.side?"qt-btn-long":"qt-btn-short"],attrs:{type:"buy"===e.side?"primary":"danger",size:"large",block:"",loading:e.submitting,disabled:!e.canSubmit},on:{click:e.handleSubmit}},[t("a-icon",{attrs:{type:"buy"===e.side?"arrow-up":"arrow-down"}}),e._v(" "+e._s("buy"===e.side?e.$t("quickTrade.buyLong"):e.$t("quickTrade.sellShort"))+" "+e._s(e.symbol)+" ")],1)],1),t("div",{staticClass:"qt-position-section"},[t("div",{staticClass:"qt-section-header"},[t("a-icon",{attrs:{type:"wallet"}}),e._v(" "+e._s(e.$t("quickTrade.currentPosition"))+" ")],1),e.currentPosition?t("div",{staticClass:"qt-position-card",class:e.currentPosition.side},[t("div",{staticClass:"qt-pos-row"},[t("span",[e._v(e._s(e.$t("quickTrade.side")))]),t("a-tag",{attrs:{color:"long"===e.currentPosition.side?"#52c41a":"#f5222d",size:"small"}},[e._v(" "+e._s("long"===e.currentPosition.side?e.$t("quickTrade.long"):e.$t("quickTrade.short"))+" ")])],1),t("div",{staticClass:"qt-pos-row"},[t("span",[e._v(e._s(e.$t("quickTrade.posSize")))]),t("span",[e._v(e._s(e.currentPosition.size))])]),t("div",{staticClass:"qt-pos-row"},[t("span",[e._v(e._s(e.$t("quickTrade.entryPrice")))]),t("span",[e._v("$"+e._s(e.formatPrice(e.currentPosition.entry_price)))])]),e.currentPosition.mark_price?t("div",{staticClass:"qt-pos-row"},[t("span",[e._v(e._s(e.$t("quickTrade.markPrice")))]),t("span",[e._v("$"+e._s(e.formatPrice(e.currentPosition.mark_price)))])]):e._e(),e.currentPosition.leverage&&e.currentPosition.leverage>1?t("div",{staticClass:"qt-pos-row"},[t("span",[e._v(e._s(e.$t("quickTrade.leverage")))]),t("span",[e._v(e._s(e.currentPosition.leverage)+"x")])]):e._e(),t("div",{staticClass:"qt-pos-row"},[t("span",[e._v(e._s(e.$t("quickTrade.unrealizedPnl")))]),t("span",{class:e.currentPosition.unrealized_pnl>=0?"qt-green":"qt-red"},[e._v(" $"+e._s(e.formatPrice(e.currentPosition.unrealized_pnl))+" ")])]),t("a-button",{staticStyle:{"margin-top":"8px"},attrs:{type:"danger",size:"small",block:"",ghost:"",loading:e.closingPosition},on:{click:e.handleClosePosition}},[e._v(" "+e._s(e.$t("quickTrade.closePosition"))+" ")])],1):t("div",{staticClass:"qt-position-empty"},[t("a-empty",{staticStyle:{padding:"20px 0"},attrs:{description:e.$t("quickTrade.noPosition"),image:!1}},[t("template",{slot:"description"},[t("span",{staticStyle:{color:"#999","font-size":"12px"}},[e._v(e._s(e.$t("quickTrade.noPositionHint")))])])],2)],1)]),e.recentTrades.length>0?t("div",{staticClass:"qt-history-section"},[t("a-collapse",{attrs:{bordered:!1,activeKey:e.historyCollapsed?[]:["history"]},on:{change:e.handleHistoryCollapse}},[t("a-collapse-panel",{key:"history",style:e.collapseStyle,attrs:{showArrow:!1}},[t("template",{slot:"header"},[t("div",{staticClass:"qt-section-header",staticStyle:{margin:"0",padding:"0"}},[t("a-icon",{attrs:{type:"history"}}),e._v(" "+e._s(e.$t("quickTrade.recentTrades"))+" "),t("span",{staticClass:"qt-history-count"},[e._v("("+e._s(e.recentTrades.length)+")")])],1)]),t("div",{staticClass:"qt-trade-list"},e._l(e.recentTrades,function(a){return t("div",{key:a.id,staticClass:"qt-trade-item"},[t("div",{staticClass:"qt-trade-main"},[t("a-tag",{attrs:{color:"buy"===a.side?"#52c41a":"#f5222d",size:"small"}},[e._v(" "+e._s("buy"===a.side?"LONG":"SHORT")+" ")]),t("span",{staticClass:"qt-trade-symbol"},[e._v(e._s(a.symbol))]),t("span",{staticClass:"qt-trade-amount"},[e._v("$"+e._s(e.formatPrice(a.amount)))])],1),t("div",{staticClass:"qt-trade-meta"},[t("a-tag",{attrs:{color:"filled"===a.status?"#52c41a":"failed"===a.status?"#f5222d":"#faad14",size:"small"}},[e._v(" "+e._s(a.status)+" ")]),t("span",{staticClass:"qt-trade-time"},[e._v(e._s(e.formatTime(a.created_at)))])],1)])}),0)],2)],1)],1):e._e()],1)},r=[],s=a(76959),n=a(17654),c=a(57888),l=(a(28706),a(2008),a(74423),a(62062),a(2892),a(26099),a(21699),a(68156),a(42762),a(95353)),o=a(72694),u=a(76471);function d(e){return(0,u.Ay)({url:"/api/quick-trade/place-order",method:"post",data:e})}function m(e){return(0,u.Ay)({url:"/api/quick-trade/balance",method:"get",params:e})}function p(e){return(0,u.Ay)({url:"/api/quick-trade/position",method:"get",params:e})}function h(e){return(0,u.Ay)({url:"/api/quick-trade/history",method:"get",params:e})}function v(e){return(0,u.Ay)({url:"/api/quick-trade/close-position",method:"post",data:e})}var b=a(64118),y=a(55585),f={name:"QuickTradePanel",props:{visible:{type:Boolean,default:!1},symbol:{type:String,default:""},presetSide:{type:String,default:""},presetPrice:{type:Number,default:0},source:{type:String,default:"manual"},marketType:{type:String,default:"swap"}},data:function(){return{credentials:[],selectedCredentialId:void 0,credLoading:!1,balance:{available:0,total:0},side:"buy",orderType:"market",limitPrice:0,amount:100,leverage:5,tpPrice:null,slPrice:null,submitting:!1,closingPosition:!1,currentPrice:0,currentPosition:null,recentTrades:[],historyCollapsed:!1,currentSymbol:"",symbolSuggestions:[],symbolSearching:!1,symbolSearchTimer:null,userId:null,quickAmountPcts:[10,25,50,75,100],leverageMarks:{1:"1x",5:"5x",10:"10x",25:"25x",50:"50x",100:"100x",125:"125x"},pollTimer:null}},computed:(0,c.A)((0,c.A)({},(0,l.aH)({navTheme:function(e){return e.app.theme}})),{},{isDark:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},priceStep:function(){return this.currentPrice>1e4?1:this.currentPrice>100?.1:this.currentPrice>1?.01:1e-4},pricePrecision:function(){return this.currentPrice>1e4?0:this.currentPrice>100?1:this.currentPrice>1?2:4},canSubmit:function(){return this.selectedCredentialId&&this.currentSymbol&&this.amount>0&&!this.submitting},priceChangeClass:function(){return""},collapseStyle:function(){return{background:"transparent",borderRadius:"4px",border:0,overflow:"hidden"}}}),watch:{visible:function(e){e?this.init():this.stopPolling()},symbol:function(e){e&&(this.currentSymbol=e)},currentSymbol:function(e){e&&(this.loadPrice(),this.selectedCredentialId&&this.loadPosition(),this.$emit("update:symbol",e))},selectedCredentialId:function(e){e&&this.currentSymbol&&this.loadPosition()},presetSide:function(e){e&&(this.side=e)},presetPrice:function(e){e>0&&(this.currentPrice=e,this.limitPrice=e)}},methods:{init:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){return(0,s.A)().w(function(t){while(1)switch(t.n){case 0:return e.currentSymbol=e.symbol||"",e.presetSide&&(e.side=e.presetSide),e.presetPrice>0&&(e.currentPrice=e.presetPrice,e.limitPrice=e.presetPrice),t.n=1,e.loadCredentials();case 1:return t.n=2,e.loadUserInfo();case 2:return t.n=3,e.loadWatchlistSymbols();case 3:if(!e.currentSymbol){t.n=4;break}return t.n=4,e.loadPrice();case 4:if(!e.selectedCredentialId||!e.currentSymbol){t.n=5;break}return t.n=5,e.loadPosition();case 5:e.loadHistory(),e.startPolling();case 6:return t.a(2)}},t)}))()},loadUserInfo:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){var a,i,r,n;return(0,s.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(t.p=0,i=e.$store,r=(null===i||void 0===i||null===(a=i.getters)||void 0===a?void 0:a.userInfo)||{},!r||!r.id){t.n=1;break}return e.userId=r.id,t.a(2);case 1:return t.n=2,(0,y.ug)();case 2:n=t.v,n&&1===n.code&&n.data&&(e.userId=n.data.id,i&&i.commit("SET_INFO",n.data)),t.n=4;break;case 3:t.p=3,t.v;case 4:return t.a(2)}},t,null,[[0,3]])}))()},loadWatchlistSymbols:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){var a,i;return(0,s.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e.userId){t.n=2;break}return t.n=1,e.loadUserInfo();case 1:if(e.userId){t.n=2;break}return t.a(2);case 2:return t.p=2,t.n=3,(0,b.Qo)({userid:e.userId});case 3:a=t.v,a&&1===a.code&&a.data&&(i=(a.data||[]).filter(function(e){return"crypto"===(e.market||"").toLowerCase()}).map(function(e){return{value:e.symbol||"",symbol:e.symbol||"",name:e.name||""}}).filter(function(e){return e.value}),e.symbolSuggestions=i),t.n=5;break;case 4:t.p=4,t.v;case 5:return t.a(2)}},t,null,[[2,4]])}))()},handleSymbolSearch:function(e){var t=this;this.symbolSearchTimer&&clearTimeout(this.symbolSearchTimer),e&&""!==e.trim()?this.symbolSearchTimer=setTimeout((0,n.A)((0,s.A)().m(function a(){var i;return(0,s.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return t.symbolSearching=!0,a.p=1,a.n=2,(0,b._3)({market:"Crypto",keyword:e.trim(),limit:20});case 2:i=a.v,i&&1===i.code&&i.data?t.symbolSuggestions=(i.data.items||i.data||[]).map(function(e){return{value:e.symbol||"",symbol:e.symbol||"",name:e.name||""}}).filter(function(e){return e.value}):t.symbolSuggestions=[],a.n=4;break;case 3:a.p=3,a.v,t.symbolSuggestions=[];case 4:return a.p=4,t.symbolSearching=!1,a.f(4);case 5:return a.a(2)}},a,null,[[1,3,4,5]])})),300):this.loadWatchlistSymbols()},handleSymbolChange:function(e){e&&e!==this.currentSymbol&&(this.currentSymbol=e,this.loadPrice(),this.selectedCredentialId&&this.loadPosition(),this.$emit("update:symbol",e))},loadPrice:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){var a,i;return(0,s.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e.currentSymbol){t.n=1;break}return e.currentPrice=0,t.a(2);case 1:return t.p=1,t.n=2,(0,u.Ay)({url:"/api/market/price",method:"get",params:{market:"Crypto",symbol:e.currentSymbol}});case 2:a=t.v,a&&1===a.code&&a.data&&(i=parseFloat(a.data.price||0),i>0&&(e.currentPrice=i,0!==e.limitPrice&&e.limitPrice!==e.presetPrice||(e.limitPrice=i))),t.n=4;break;case 3:t.p=3,t.v;case 4:return t.a(2)}},t,null,[[1,3]])}))()},handleSymbolFocus:function(){0===this.symbolSuggestions.length&&this.loadWatchlistSymbols()},loadCredentials:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){var a,i,r;return(0,s.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.credLoading=!0,t.p=1,t.n=2,(0,o.IA)();case 2:a=t.v,1===a.code&&a.data&&(i=a.data.items||a.data||[],r=["ibkr","mt5"],e.credentials=i.filter(function(e){var t=(e.exchange_id||e.name||"").toLowerCase();return!r.includes(t)}),!e.selectedCredentialId&&e.credentials.length>0&&(e.selectedCredentialId=e.credentials[0].id,e.onCredentialChange(e.selectedCredentialId))),t.n=4;break;case 3:t.p=3,t.v;case 4:return t.p=4,e.credLoading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},onCredentialChange:function(e){var t=this;return(0,n.A)((0,s.A)().m(function a(){return(0,s.A)().w(function(a){while(1)switch(a.n){case 0:return t.selectedCredentialId=e,a.n=1,t.loadBalance();case 1:return a.n=2,t.loadPosition();case 2:return a.a(2)}},a)}))()},loadBalance:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){var a;return(0,s.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e.selectedCredentialId){t.n=1;break}return t.a(2);case 1:return t.p=1,t.n=2,m({credential_id:e.selectedCredentialId,market_type:e.marketType});case 2:a=t.v,1===a.code&&a.data&&(e.balance=a.data),t.n=4;break;case 3:t.p=3,t.v;case 4:return t.a(2)}},t,null,[[1,3]])}))()},loadPosition:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){var a;return(0,s.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e.selectedCredentialId&&e.currentSymbol){t.n=1;break}return t.a(2);case 1:return t.p=1,t.n=2,p({credential_id:e.selectedCredentialId,symbol:e.currentSymbol,market_type:e.marketType});case 2:if(a=t.v,!(1===a.code&&a.data&&a.data.positions&&a.data.positions.length>0)){t.n=3;break}return e.currentPosition=a.data.positions[0],t.a(2,!0);case 3:return e.currentPosition=null,t.a(2,!1);case 4:t.n=6;break;case 5:return t.p=5,t.v,e.currentPosition=null,t.a(2,!1);case 6:return t.a(2)}},t,null,[[1,5]])}))()},loadPositionWithRetry:function(){var e=arguments,t=this;return(0,n.A)((0,s.A)().m(function a(){var i,r,n,c;return(0,s.A)().w(function(a){while(1)switch(a.n){case 0:return i=e.length>0&&void 0!==e[0]?e[0]:3,r=e.length>1&&void 0!==e[1]?e[1]:2e3,a.n=1,t.loadPosition();case 1:if(n=a.v,!n){a.n=2;break}return a.a(2);case 2:c=0;case 3:if(!(c0&&(this.amount=Math.floor(this.balance.available*e/100*100)/100)},handleSubmit:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){var a,i,r;return(0,s.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e.canSubmit){t.n=1;break}return t.a(2);case 1:return e.submitting=!0,t.p=2,a={credential_id:e.selectedCredentialId,symbol:e.currentSymbol,side:e.side,order_type:e.orderType,amount:e.amount,price:"limit"===e.orderType?e.limitPrice:0,leverage:"spot"!==e.marketType?e.leverage:1,market_type:e.marketType,tp_price:e.tpPrice||0,sl_price:e.slPrice||0,source:e.source},t.n=3,d(a);case 3:if(i=t.v,1!==i.code){t.n=7;break}return e.$emit("order-success",i.data),t.n=4,e.loadBalance();case 4:return t.n=5,e.loadHistory();case 5:return t.n=6,e.loadPositionWithRetry();case 6:t.n=8;break;case 7:e.$message.error(i.msg||e.$t("quickTrade.orderFailed"));case 8:t.n=10;break;case 9:t.p=9,r=t.v,e.$message.error(r.message||e.$t("quickTrade.orderFailed"));case 10:return t.p=10,e.submitting=!1,t.f(10);case 11:return t.a(2)}},t,null,[[2,9,10,11]])}))()},handleClosePosition:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){var a,i,r;return(0,s.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e.currentPosition&&e.selectedCredentialId){t.n=1;break}return t.a(2);case 1:return e.closingPosition=!0,t.p=2,a={credential_id:e.selectedCredentialId,symbol:e.currentSymbol,market_type:e.marketType,size:0,source:"manual"},t.n=3,v(a);case 3:if(i=t.v,1!==i.code){t.n=6;break}return e.$message.success(e.$t("quickTrade.positionClosed")),t.n=4,e.loadBalance();case 4:return t.n=5,e.loadHistory();case 5:e.currentPosition=null,setTimeout((0,n.A)((0,s.A)().m(function t(){return(0,s.A)().w(function(t){while(1)switch(t.n){case 0:return t.n=1,e.loadPosition();case 1:return t.a(2)}},t)})),2e3),t.n=7;break;case 6:e.$message.error(i.msg||e.$t("quickTrade.orderFailed"));case 7:t.n=9;break;case 8:t.p=8,r=t.v,e.$message.error(r.message||e.$t("quickTrade.orderFailed"));case 9:return t.p=9,e.closingPosition=!1,t.f(9);case 10:return t.a(2)}},t,null,[[2,8,9,10]])}))()},startPolling:function(){var e=this;this.stopPolling(),this.pollTimer=setInterval(function(){e.currentSymbol&&e.loadPrice(),e.selectedCredentialId&&e.currentSymbol&&(e.loadBalance(),e.loadPosition())},1e4)},stopPolling:function(){this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=null)},handleClose:function(){this.$emit("close"),this.$emit("update:visible",!1)},handleHistoryCollapse:function(e){this.historyCollapsed=!e.includes("history")},formatPrice:function(e){var t=parseFloat(e||0);return Math.abs(t)>=1e4?t.toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:0}):Math.abs(t)>=100?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):Math.abs(t)>=1?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:4}):t.toLocaleString("en-US",{minimumFractionDigits:4,maximumFractionDigits:6})},formatTime:function(e){if(!e)return"";var t=new Date(e),a=function(e){return String(e).padStart(2,"0")};return"".concat(a(t.getMonth()+1),"-").concat(a(t.getDate())," ").concat(a(t.getHours()),":").concat(a(t.getMinutes()))}},beforeDestroy:function(){this.stopPolling()}},g=f,k=a(845),_=(0,k.A)(g,i,r,!1,null,"0d547552",null),P=_.exports},72694:function(e,t,a){a.d(t,{IA:function(){return n},PR:function(){return c},kI:function(){return l}});var i=a(57888),r=a(76471),s={list:"/api/credentials/list",get:"/api/credentials/get",create:"/api/credentials/create",delete:"/api/credentials/delete"};function n(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,r.Ay)({url:s.list,method:"get",params:e})}function c(e){return(0,r.Ay)({url:s.create,method:"post",data:e})}function l(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(0,r.Ay)({url:s.delete,method:"delete",params:(0,i.A)({id:e},t)})}}}]); \ No newline at end of file diff --git a/frontend/dist/js/748-legacy.41034eae.js b/frontend/dist/js/55-legacy.e43a5f53.js similarity index 98% rename from frontend/dist/js/748-legacy.41034eae.js rename to frontend/dist/js/55-legacy.e43a5f53.js index 7ede29c..de99d2e 100644 --- a/frontend/dist/js/748-legacy.41034eae.js +++ b/frontend/dist/js/55-legacy.e43a5f53.js @@ -1 +1 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[748],{4748:function(t,s,i){i.r(s),i.d(s,{default:function(){return b}});var a=function(){var t=this,s=t._self._c;return s("div",{staticClass:"billing-page",class:{"theme-dark":t.isDarkTheme}},[s("div",{staticClass:"page-header"},[s("h2",{staticClass:"page-title"},[s("a-icon",{attrs:{type:"wallet"}}),s("span",[t._v(t._s(t.$t("billing.title")))])],1),s("p",{staticClass:"page-desc"},[t._v(t._s(t.$t("billing.desc")))])]),s("a-card",{staticClass:"snapshot-card",attrs:{bordered:!1}},[s("div",{staticClass:"snapshot-row"},[s("div",{staticClass:"snap-item"},[s("div",{staticClass:"snap-label"},[t._v(t._s(t.$t("billing.snapshot.credits")))]),s("div",{staticClass:"snap-value"},[t._v(t._s(t.formatCredits(t.billing.credits)))])]),s("div",{staticClass:"snap-item"},[s("div",{staticClass:"snap-label"},[t._v(t._s(t.$t("billing.snapshot.vip")))]),s("div",{staticClass:"snap-value"},[t.billing.is_vip?s("a-tag",{attrs:{color:"gold"}},[s("a-icon",{attrs:{type:"crown"}}),t._v(" VIP ")],1):s("a-tag",[t._v(t._s(t.$t("billing.snapshot.notVip")))]),t.billing.vip_expires_at?s("span",{staticClass:"vip-exp"},[t._v(" "+t._s(t.$t("billing.snapshot.expires"))+": "+t._s(t.formatDate(t.billing.vip_expires_at))+" ")]):t._e()],1)])]),s("a-alert",{staticStyle:{"margin-top":"12px"},attrs:{type:"info","show-icon":"",message:t.$t("billing.vipRule.title"),description:t.$t("billing.vipRule.desc")}})],1),s("a-row",{staticStyle:{"margin-top":"16px"},attrs:{gutter:16}},[s("a-col",{attrs:{xs:24,md:8}},[s("a-card",{staticClass:"plan-card",attrs:{bordered:!1}},[s("div",{staticClass:"plan-title"},[t._v(t._s(t.$t("billing.plan.monthly")))]),s("div",{staticClass:"plan-price"},[t._v(" $"+t._s(t.plans.monthly.price_usd)+" "),s("span",{staticClass:"plan-unit"},[t._v("/ "+t._s(t.$t("billing.perMonth")))])]),s("div",{staticClass:"plan-benefit"},[t._v(" +"+t._s(t.plans.monthly.credits_once)+" "+t._s(t.$t("billing.credits"))+" ")]),s("a-button",{attrs:{type:"primary",block:"",loading:"monthly"===t.purchasing},on:{click:function(s){return t.buy("monthly")}}},[t._v(" "+t._s(t.$t("billing.buyNow"))+" ")])],1)],1),s("a-col",{attrs:{xs:24,md:8}},[s("a-card",{staticClass:"plan-card highlight",attrs:{bordered:!1}},[s("div",{staticClass:"plan-title"},[t._v(t._s(t.$t("billing.plan.yearly")))]),s("div",{staticClass:"plan-price"},[t._v(" $"+t._s(t.plans.yearly.price_usd)+" "),s("span",{staticClass:"plan-unit"},[t._v("/ "+t._s(t.$t("billing.perYear")))])]),s("div",{staticClass:"plan-benefit"},[t._v(" +"+t._s(t.plans.yearly.credits_once)+" "+t._s(t.$t("billing.credits"))+" ")]),s("a-button",{attrs:{type:"primary",block:"",loading:"yearly"===t.purchasing},on:{click:function(s){return t.buy("yearly")}}},[t._v(" "+t._s(t.$t("billing.buyNow"))+" ")])],1)],1),s("a-col",{attrs:{xs:24,md:8}},[s("a-card",{staticClass:"plan-card",attrs:{bordered:!1}},[s("div",{staticClass:"plan-title"},[t._v(t._s(t.$t("billing.plan.lifetime")))]),s("div",{staticClass:"plan-price"},[t._v(" $"+t._s(t.plans.lifetime.price_usd)+" "),s("span",{staticClass:"plan-unit"},[t._v(t._s(t.$t("billing.once")))])]),s("div",{staticClass:"plan-benefit"},[t._v(" "+t._s(t.$t("billing.lifetimeMonthly"))+" +"+t._s(t.plans.lifetime.credits_monthly)+" "+t._s(t.$t("billing.credits"))+" ")]),s("a-button",{attrs:{type:"primary",block:"",loading:"lifetime"===t.purchasing},on:{click:function(s){return t.buy("lifetime")}}},[t._v(" "+t._s(t.$t("billing.buyNow"))+" ")])],1)],1)],1),s("a-modal",{attrs:{title:null,footer:null,maskClosable:!1,closable:!1,wrapClassName:"usdt-pay-modal-wrap",width:"600px"},on:{cancel:t.closeUsdtModal},model:{value:t.usdtModalVisible,callback:function(s){t.usdtModalVisible=s},expression:"usdtModalVisible"}},[t.usdtOrder?s("div",{staticClass:"usdt-checkout"},[s("div",{staticClass:"checkout-header"},[s("div",{staticClass:"header-left"},[s("div",{staticClass:"usdt-logo"},[s("svg",{attrs:{viewBox:"0 0 32 32",width:"28",height:"28"}},[s("circle",{attrs:{cx:"16",cy:"16",r:"16",fill:"#26A17B"}}),s("path",{attrs:{d:"M17.9 17.9v-.003c-.1.008-.6.04-1.8.04-1 0-1.5-.028-1.7-.04v.004c-3.4-.15-5.9-.74-5.9-1.44 0-.7 2.5-1.29 5.9-1.44v2.3c.2.013.7.05 1.7.05 1.2 0 1.6-.04 1.8-.05v-2.3c3.4.15 5.9.74 5.9 1.44 0 .7-2.5 1.29-5.9 1.44zm0-3.12V12.7h5v-2.4H9.2v2.4h5v2.08c-3.8.18-6.7.93-6.7 1.83s2.9 1.65 6.7 1.83v6.56h3.6v-6.56c3.8-.18 6.7-.93 6.7-1.83s-2.8-1.65-6.6-1.83z",fill:"#fff"}})])]),s("div",{staticClass:"header-text"},[s("div",{staticClass:"header-title"},[t._v(t._s(t.$t("billing.usdt.title")))]),s("div",{staticClass:"header-desc"},[t._v(t._s(t.$t("billing.usdt.hintDesc")))])])]),s("a-button",{staticClass:"close-btn",attrs:{type:"link"},on:{click:t.closeUsdtModal}},[s("a-icon",{attrs:{type:"close"}})],1)],1),s("div",{staticClass:"checkout-steps"},t._l(t.stepItems,function(i,a){return s("div",{key:a,staticClass:"step-item",class:{active:a<=t.usdtStepCurrent,current:a===t.usdtStepCurrent}},[s("div",{staticClass:"step-dot"},[s("span",{staticClass:"dot-inner"}),a===t.usdtStepCurrent&&"pending"===t.usdtOrder.status?s("span",{staticClass:"dot-pulse"}):t._e()]),s("span",{staticClass:"step-label"},[t._v(t._s(i))]),a1&&void 0!==arguments[1])||arguments[1];return(0,c.Ay)({url:o.UsdtOrder(t),method:"get",params:{refresh:s?1:0}})}var g={name:"BillingPage",computed:(0,n.A)((0,n.A)({},(0,d.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},usdtQrUrl:function(){var t=this.getUsdtQrText();return t?"https://api.qrserver.com/v1/create-qr-code/?size=220x220&data=".concat(encodeURIComponent(t)):""},statusText:function(){var t=this.usdtOrder&&this.usdtOrder.status?String(this.usdtOrder.status):"",s={pending:this.$t("billing.usdt.status.pending"),paid:this.$t("billing.usdt.status.paid"),confirmed:this.$t("billing.usdt.status.confirmed"),expired:this.$t("billing.usdt.status.expired"),cancelled:this.$t("billing.usdt.status.cancelled"),failed:this.$t("billing.usdt.status.failed")};return s[t]||t||"--"},statusColor:function(){var t=this.usdtOrder&&this.usdtOrder.status?String(this.usdtOrder.status):"";return"confirmed"===t?"green":"paid"===t?"blue":"expired"===t||"failed"===t||"cancelled"===t?"red":"orange"},usdtStepCurrent:function(){var t=this.usdtOrder&&this.usdtOrder.status?String(this.usdtOrder.status):"";return"confirmed"===t?2:"paid"===t?1:0},stepItems:function(){return[this.$t("billing.usdt.status.pending"),this.$t("billing.usdt.status.paid"),this.$t("billing.usdt.status.confirmed")]}}),data:function(){return{loading:!1,purchasing:"",usdtModalVisible:!1,usdtOrder:null,usdtPollingTimer:null,usdtRefreshing:!1,billing:{credits:0,is_vip:!1,vip_expires_at:null},plans:{monthly:{price_usd:19.9,credits_once:500},yearly:{price_usd:199,credits_once:8e3},lifetime:{price_usd:499,credits_monthly:800}}}},created:function(){this.load()},beforeDestroy:function(){this.stopUsdtPolling()},methods:{load:function(){var t=this;return(0,l.A)((0,r.A)().m(function s(){var i,a,e;return(0,r.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.loading=!0,s.p=1,s.n=2,u();case 2:i=s.v,i&&1===i.code&&i.data?(t.plans=i.data.plans||t.plans,t.billing=i.data.billing||t.billing):t.$message.error((null===i||void 0===i?void 0:i.msg)||"Load failed"),s.n=4;break;case 3:s.p=3,e=s.v,t.$message.error((null===e||void 0===e||null===(a=e.response)||void 0===a||null===(a=a.data)||void 0===a?void 0:a.msg)||"Load failed");case 4:return s.p=4,t.loading=!1,s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},formatCredits:function(t){return t||0===t?Number(t).toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:2}):"0"},formatDate:function(t){return t?new Date(t).toLocaleDateString():""},buy:function(t){var s=this;return(0,l.A)((0,r.A)().m(function i(){var a,e,l;return(0,r.A)().w(function(i){while(1)switch(i.p=i.n){case 0:return s.purchasing=t,i.p=1,i.n=2,p(t);case 2:a=i.v,a&&1===a.code&&a.data?(s.usdtOrder=a.data,s.usdtModalVisible=!0,s.startUsdtPolling()):s.$message.error((null===a||void 0===a?void 0:a.msg)||s.$t("billing.purchaseFailed")),i.n=4;break;case 3:i.p=3,l=i.v,s.$message.error((null===l||void 0===l||null===(e=l.response)||void 0===e||null===(e=e.data)||void 0===e?void 0:e.msg)||s.$t("billing.purchaseFailed"));case 4:return i.p=4,s.purchasing="",i.f(4);case 5:return i.a(2)}},i,null,[[1,3,4,5]])}))()},getUsdtQrText:function(){return this.usdtOrder&&this.usdtOrder.address||""},copyText:function(t){try{var s=String(t||"");if(!s)return;this.$copyText(s),this.$message.success(this.$t("common.copySuccess")||"Copied")}catch(i){this.$message.error(this.$t("common.copyFailed")||"Copy failed")}},formatDateTime:function(t){return t?new Date(t).toLocaleString():""},refreshUsdtOrder:function(){var t=this;return(0,l.A)((0,r.A)().m(function s(){var i,a;return(0,r.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(t.usdtOrder&&t.usdtOrder.order_id){s.n=1;break}return s.a(2);case 1:return t.usdtRefreshing=!0,s.p=2,s.n=3,v(t.usdtOrder.order_id,!0);case 3:if(i=s.v,!i||1!==i.code||!i.data){s.n=6;break}if(t.usdtOrder=i.data,a=t.usdtOrder.status,"confirmed"!==a){s.n=5;break}return t.$message.success(t.$t("billing.usdt.paidSuccess")),t.stopUsdtPolling(),s.n=4,t.load();case 4:s.n=6;break;case 5:"expired"!==a&&"failed"!==a&&"cancelled"!==a||t.stopUsdtPolling();case 6:s.n=8;break;case 7:s.p=7,s.v;case 8:return s.p=8,t.usdtRefreshing=!1,s.f(8);case 9:return s.a(2)}},s,null,[[2,7,8,9]])}))()},startUsdtPolling:function(){var t=this;this.stopUsdtPolling(),this.usdtPollingTimer=setInterval(function(){t.refreshUsdtOrder()},5e3)},stopUsdtPolling:function(){this.usdtPollingTimer&&(clearInterval(this.usdtPollingTimer),this.usdtPollingTimer=null)},closeUsdtModal:function(){this.usdtModalVisible=!1,this.stopUsdtPolling()}}},h=g,m=i(845),_=(0,m.A)(h,a,e,!1,null,"0cdd5f9c",null),b=_.exports}}]); \ No newline at end of file +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[55],{58055:function(t,s,i){i.r(s),i.d(s,{default:function(){return b}});var a=function(){var t=this,s=t._self._c;return s("div",{staticClass:"billing-page",class:{"theme-dark":t.isDarkTheme}},[s("div",{staticClass:"page-header"},[s("h2",{staticClass:"page-title"},[s("a-icon",{attrs:{type:"wallet"}}),s("span",[t._v(t._s(t.$t("billing.title")))])],1),s("p",{staticClass:"page-desc"},[t._v(t._s(t.$t("billing.desc")))])]),s("a-card",{staticClass:"snapshot-card",attrs:{bordered:!1}},[s("div",{staticClass:"snapshot-row"},[s("div",{staticClass:"snap-item"},[s("div",{staticClass:"snap-label"},[t._v(t._s(t.$t("billing.snapshot.credits")))]),s("div",{staticClass:"snap-value"},[t._v(t._s(t.formatCredits(t.billing.credits)))])]),s("div",{staticClass:"snap-item"},[s("div",{staticClass:"snap-label"},[t._v(t._s(t.$t("billing.snapshot.vip")))]),s("div",{staticClass:"snap-value"},[t.billing.is_vip?s("a-tag",{attrs:{color:"gold"}},[s("a-icon",{attrs:{type:"crown"}}),t._v(" VIP ")],1):s("a-tag",[t._v(t._s(t.$t("billing.snapshot.notVip")))]),t.billing.vip_expires_at?s("span",{staticClass:"vip-exp"},[t._v(" "+t._s(t.$t("billing.snapshot.expires"))+": "+t._s(t.formatDate(t.billing.vip_expires_at))+" ")]):t._e()],1)])]),s("a-alert",{staticStyle:{"margin-top":"12px"},attrs:{type:"info","show-icon":"",message:t.$t("billing.vipRule.title"),description:t.$t("billing.vipRule.desc")}})],1),s("a-row",{staticStyle:{"margin-top":"16px"},attrs:{gutter:16}},[s("a-col",{attrs:{xs:24,md:8}},[s("a-card",{staticClass:"plan-card",attrs:{bordered:!1}},[s("div",{staticClass:"plan-title"},[t._v(t._s(t.$t("billing.plan.monthly")))]),s("div",{staticClass:"plan-price"},[t._v(" $"+t._s(t.plans.monthly.price_usd)+" "),s("span",{staticClass:"plan-unit"},[t._v("/ "+t._s(t.$t("billing.perMonth")))])]),s("div",{staticClass:"plan-benefit"},[t._v(" +"+t._s(t.plans.monthly.credits_once)+" "+t._s(t.$t("billing.credits"))+" ")]),s("a-button",{attrs:{type:"primary",block:"",loading:"monthly"===t.purchasing},on:{click:function(s){return t.buy("monthly")}}},[t._v(" "+t._s(t.$t("billing.buyNow"))+" ")])],1)],1),s("a-col",{attrs:{xs:24,md:8}},[s("a-card",{staticClass:"plan-card highlight",attrs:{bordered:!1}},[s("div",{staticClass:"plan-title"},[t._v(t._s(t.$t("billing.plan.yearly")))]),s("div",{staticClass:"plan-price"},[t._v(" $"+t._s(t.plans.yearly.price_usd)+" "),s("span",{staticClass:"plan-unit"},[t._v("/ "+t._s(t.$t("billing.perYear")))])]),s("div",{staticClass:"plan-benefit"},[t._v(" +"+t._s(t.plans.yearly.credits_once)+" "+t._s(t.$t("billing.credits"))+" ")]),s("a-button",{attrs:{type:"primary",block:"",loading:"yearly"===t.purchasing},on:{click:function(s){return t.buy("yearly")}}},[t._v(" "+t._s(t.$t("billing.buyNow"))+" ")])],1)],1),s("a-col",{attrs:{xs:24,md:8}},[s("a-card",{staticClass:"plan-card",attrs:{bordered:!1}},[s("div",{staticClass:"plan-title"},[t._v(t._s(t.$t("billing.plan.lifetime")))]),s("div",{staticClass:"plan-price"},[t._v(" $"+t._s(t.plans.lifetime.price_usd)+" "),s("span",{staticClass:"plan-unit"},[t._v(t._s(t.$t("billing.once")))])]),s("div",{staticClass:"plan-benefit"},[t._v(" "+t._s(t.$t("billing.lifetimeMonthly"))+" +"+t._s(t.plans.lifetime.credits_monthly)+" "+t._s(t.$t("billing.credits"))+" ")]),s("a-button",{attrs:{type:"primary",block:"",loading:"lifetime"===t.purchasing},on:{click:function(s){return t.buy("lifetime")}}},[t._v(" "+t._s(t.$t("billing.buyNow"))+" ")])],1)],1)],1),s("a-modal",{attrs:{title:null,footer:null,maskClosable:!1,closable:!1,wrapClassName:"usdt-pay-modal-wrap",width:"600px"},on:{cancel:t.closeUsdtModal},model:{value:t.usdtModalVisible,callback:function(s){t.usdtModalVisible=s},expression:"usdtModalVisible"}},[t.usdtOrder?s("div",{staticClass:"usdt-checkout"},[s("div",{staticClass:"checkout-header"},[s("div",{staticClass:"header-left"},[s("div",{staticClass:"usdt-logo"},[s("svg",{attrs:{viewBox:"0 0 32 32",width:"28",height:"28"}},[s("circle",{attrs:{cx:"16",cy:"16",r:"16",fill:"#26A17B"}}),s("path",{attrs:{d:"M17.9 17.9v-.003c-.1.008-.6.04-1.8.04-1 0-1.5-.028-1.7-.04v.004c-3.4-.15-5.9-.74-5.9-1.44 0-.7 2.5-1.29 5.9-1.44v2.3c.2.013.7.05 1.7.05 1.2 0 1.6-.04 1.8-.05v-2.3c3.4.15 5.9.74 5.9 1.44 0 .7-2.5 1.29-5.9 1.44zm0-3.12V12.7h5v-2.4H9.2v2.4h5v2.08c-3.8.18-6.7.93-6.7 1.83s2.9 1.65 6.7 1.83v6.56h3.6v-6.56c3.8-.18 6.7-.93 6.7-1.83s-2.8-1.65-6.6-1.83z",fill:"#fff"}})])]),s("div",{staticClass:"header-text"},[s("div",{staticClass:"header-title"},[t._v(t._s(t.$t("billing.usdt.title")))]),s("div",{staticClass:"header-desc"},[t._v(t._s(t.$t("billing.usdt.hintDesc")))])])]),s("a-button",{staticClass:"close-btn",attrs:{type:"link"},on:{click:t.closeUsdtModal}},[s("a-icon",{attrs:{type:"close"}})],1)],1),s("div",{staticClass:"checkout-steps"},t._l(t.stepItems,function(i,a){return s("div",{key:a,staticClass:"step-item",class:{active:a<=t.usdtStepCurrent,current:a===t.usdtStepCurrent}},[s("div",{staticClass:"step-dot"},[s("span",{staticClass:"dot-inner"}),a===t.usdtStepCurrent&&"pending"===t.usdtOrder.status?s("span",{staticClass:"dot-pulse"}):t._e()]),s("span",{staticClass:"step-label"},[t._v(t._s(i))]),a1&&void 0!==arguments[1])||arguments[1];return(0,c.Ay)({url:o.UsdtOrder(t),method:"get",params:{refresh:s?1:0}})}var g={name:"BillingPage",computed:(0,n.A)((0,n.A)({},(0,d.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},usdtQrUrl:function(){var t=this.getUsdtQrText();return t?"https://api.qrserver.com/v1/create-qr-code/?size=220x220&data=".concat(encodeURIComponent(t)):""},statusText:function(){var t=this.usdtOrder&&this.usdtOrder.status?String(this.usdtOrder.status):"",s={pending:this.$t("billing.usdt.status.pending"),paid:this.$t("billing.usdt.status.paid"),confirmed:this.$t("billing.usdt.status.confirmed"),expired:this.$t("billing.usdt.status.expired"),cancelled:this.$t("billing.usdt.status.cancelled"),failed:this.$t("billing.usdt.status.failed")};return s[t]||t||"--"},statusColor:function(){var t=this.usdtOrder&&this.usdtOrder.status?String(this.usdtOrder.status):"";return"confirmed"===t?"green":"paid"===t?"blue":"expired"===t||"failed"===t||"cancelled"===t?"red":"orange"},usdtStepCurrent:function(){var t=this.usdtOrder&&this.usdtOrder.status?String(this.usdtOrder.status):"";return"confirmed"===t?2:"paid"===t?1:0},stepItems:function(){return[this.$t("billing.usdt.status.pending"),this.$t("billing.usdt.status.paid"),this.$t("billing.usdt.status.confirmed")]}}),data:function(){return{loading:!1,purchasing:"",usdtModalVisible:!1,usdtOrder:null,usdtPollingTimer:null,usdtRefreshing:!1,billing:{credits:0,is_vip:!1,vip_expires_at:null},plans:{monthly:{price_usd:19.9,credits_once:500},yearly:{price_usd:199,credits_once:8e3},lifetime:{price_usd:499,credits_monthly:800}}}},created:function(){this.load()},beforeDestroy:function(){this.stopUsdtPolling()},methods:{load:function(){var t=this;return(0,l.A)((0,r.A)().m(function s(){var i,a,e;return(0,r.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.loading=!0,s.p=1,s.n=2,u();case 2:i=s.v,i&&1===i.code&&i.data?(t.plans=i.data.plans||t.plans,t.billing=i.data.billing||t.billing):t.$message.error((null===i||void 0===i?void 0:i.msg)||"Load failed"),s.n=4;break;case 3:s.p=3,e=s.v,t.$message.error((null===e||void 0===e||null===(a=e.response)||void 0===a||null===(a=a.data)||void 0===a?void 0:a.msg)||"Load failed");case 4:return s.p=4,t.loading=!1,s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},formatCredits:function(t){return t||0===t?Number(t).toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:2}):"0"},formatDate:function(t){return t?new Date(t).toLocaleDateString():""},buy:function(t){var s=this;return(0,l.A)((0,r.A)().m(function i(){var a,e,l;return(0,r.A)().w(function(i){while(1)switch(i.p=i.n){case 0:return s.purchasing=t,i.p=1,i.n=2,p(t);case 2:a=i.v,a&&1===a.code&&a.data?(s.usdtOrder=a.data,s.usdtModalVisible=!0,s.startUsdtPolling()):s.$message.error((null===a||void 0===a?void 0:a.msg)||s.$t("billing.purchaseFailed")),i.n=4;break;case 3:i.p=3,l=i.v,s.$message.error((null===l||void 0===l||null===(e=l.response)||void 0===e||null===(e=e.data)||void 0===e?void 0:e.msg)||s.$t("billing.purchaseFailed"));case 4:return i.p=4,s.purchasing="",i.f(4);case 5:return i.a(2)}},i,null,[[1,3,4,5]])}))()},getUsdtQrText:function(){return this.usdtOrder&&this.usdtOrder.address||""},copyText:function(t){try{var s=String(t||"");if(!s)return;this.$copyText(s),this.$message.success(this.$t("common.copySuccess")||"Copied")}catch(i){this.$message.error(this.$t("common.copyFailed")||"Copy failed")}},formatDateTime:function(t){return t?new Date(t).toLocaleString():""},refreshUsdtOrder:function(){var t=this;return(0,l.A)((0,r.A)().m(function s(){var i,a;return(0,r.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(t.usdtOrder&&t.usdtOrder.order_id){s.n=1;break}return s.a(2);case 1:return t.usdtRefreshing=!0,s.p=2,s.n=3,v(t.usdtOrder.order_id,!0);case 3:if(i=s.v,!i||1!==i.code||!i.data){s.n=6;break}if(t.usdtOrder=i.data,a=t.usdtOrder.status,"confirmed"!==a){s.n=5;break}return t.$message.success(t.$t("billing.usdt.paidSuccess")),t.stopUsdtPolling(),s.n=4,t.load();case 4:s.n=6;break;case 5:"expired"!==a&&"failed"!==a&&"cancelled"!==a||t.stopUsdtPolling();case 6:s.n=8;break;case 7:s.p=7,s.v;case 8:return s.p=8,t.usdtRefreshing=!1,s.f(8);case 9:return s.a(2)}},s,null,[[2,7,8,9]])}))()},startUsdtPolling:function(){var t=this;this.stopUsdtPolling(),this.usdtPollingTimer=setInterval(function(){t.refreshUsdtOrder()},5e3)},stopUsdtPolling:function(){this.usdtPollingTimer&&(clearInterval(this.usdtPollingTimer),this.usdtPollingTimer=null)},closeUsdtModal:function(){this.usdtModalVisible=!1,this.stopUsdtPolling()}}},h=g,m=i(845),_=(0,m.A)(h,a,e,!1,null,"0cdd5f9c",null),b=_.exports}}]); \ No newline at end of file diff --git a/frontend/dist/js/748.251022c5.js b/frontend/dist/js/55.8272df87.js similarity index 98% rename from frontend/dist/js/748.251022c5.js rename to frontend/dist/js/55.8272df87.js index 6a6151e..ff3733c 100644 --- a/frontend/dist/js/748.251022c5.js +++ b/frontend/dist/js/55.8272df87.js @@ -1 +1 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[748],{4748:function(t,s,i){i.r(s),i.d(s,{default:function(){return b}});var a=function(){var t=this,s=t._self._c;return s("div",{staticClass:"billing-page",class:{"theme-dark":t.isDarkTheme}},[s("div",{staticClass:"page-header"},[s("h2",{staticClass:"page-title"},[s("a-icon",{attrs:{type:"wallet"}}),s("span",[t._v(t._s(t.$t("billing.title")))])],1),s("p",{staticClass:"page-desc"},[t._v(t._s(t.$t("billing.desc")))])]),s("a-card",{staticClass:"snapshot-card",attrs:{bordered:!1}},[s("div",{staticClass:"snapshot-row"},[s("div",{staticClass:"snap-item"},[s("div",{staticClass:"snap-label"},[t._v(t._s(t.$t("billing.snapshot.credits")))]),s("div",{staticClass:"snap-value"},[t._v(t._s(t.formatCredits(t.billing.credits)))])]),s("div",{staticClass:"snap-item"},[s("div",{staticClass:"snap-label"},[t._v(t._s(t.$t("billing.snapshot.vip")))]),s("div",{staticClass:"snap-value"},[t.billing.is_vip?s("a-tag",{attrs:{color:"gold"}},[s("a-icon",{attrs:{type:"crown"}}),t._v(" VIP ")],1):s("a-tag",[t._v(t._s(t.$t("billing.snapshot.notVip")))]),t.billing.vip_expires_at?s("span",{staticClass:"vip-exp"},[t._v(" "+t._s(t.$t("billing.snapshot.expires"))+": "+t._s(t.formatDate(t.billing.vip_expires_at))+" ")]):t._e()],1)])]),s("a-alert",{staticStyle:{"margin-top":"12px"},attrs:{type:"info","show-icon":"",message:t.$t("billing.vipRule.title"),description:t.$t("billing.vipRule.desc")}})],1),s("a-row",{staticStyle:{"margin-top":"16px"},attrs:{gutter:16}},[s("a-col",{attrs:{xs:24,md:8}},[s("a-card",{staticClass:"plan-card",attrs:{bordered:!1}},[s("div",{staticClass:"plan-title"},[t._v(t._s(t.$t("billing.plan.monthly")))]),s("div",{staticClass:"plan-price"},[t._v(" $"+t._s(t.plans.monthly.price_usd)+" "),s("span",{staticClass:"plan-unit"},[t._v("/ "+t._s(t.$t("billing.perMonth")))])]),s("div",{staticClass:"plan-benefit"},[t._v(" +"+t._s(t.plans.monthly.credits_once)+" "+t._s(t.$t("billing.credits"))+" ")]),s("a-button",{attrs:{type:"primary",block:"",loading:"monthly"===t.purchasing},on:{click:function(s){return t.buy("monthly")}}},[t._v(" "+t._s(t.$t("billing.buyNow"))+" ")])],1)],1),s("a-col",{attrs:{xs:24,md:8}},[s("a-card",{staticClass:"plan-card highlight",attrs:{bordered:!1}},[s("div",{staticClass:"plan-title"},[t._v(t._s(t.$t("billing.plan.yearly")))]),s("div",{staticClass:"plan-price"},[t._v(" $"+t._s(t.plans.yearly.price_usd)+" "),s("span",{staticClass:"plan-unit"},[t._v("/ "+t._s(t.$t("billing.perYear")))])]),s("div",{staticClass:"plan-benefit"},[t._v(" +"+t._s(t.plans.yearly.credits_once)+" "+t._s(t.$t("billing.credits"))+" ")]),s("a-button",{attrs:{type:"primary",block:"",loading:"yearly"===t.purchasing},on:{click:function(s){return t.buy("yearly")}}},[t._v(" "+t._s(t.$t("billing.buyNow"))+" ")])],1)],1),s("a-col",{attrs:{xs:24,md:8}},[s("a-card",{staticClass:"plan-card",attrs:{bordered:!1}},[s("div",{staticClass:"plan-title"},[t._v(t._s(t.$t("billing.plan.lifetime")))]),s("div",{staticClass:"plan-price"},[t._v(" $"+t._s(t.plans.lifetime.price_usd)+" "),s("span",{staticClass:"plan-unit"},[t._v(t._s(t.$t("billing.once")))])]),s("div",{staticClass:"plan-benefit"},[t._v(" "+t._s(t.$t("billing.lifetimeMonthly"))+" +"+t._s(t.plans.lifetime.credits_monthly)+" "+t._s(t.$t("billing.credits"))+" ")]),s("a-button",{attrs:{type:"primary",block:"",loading:"lifetime"===t.purchasing},on:{click:function(s){return t.buy("lifetime")}}},[t._v(" "+t._s(t.$t("billing.buyNow"))+" ")])],1)],1)],1),s("a-modal",{attrs:{title:null,footer:null,maskClosable:!1,closable:!1,wrapClassName:"usdt-pay-modal-wrap",width:"600px"},on:{cancel:t.closeUsdtModal},model:{value:t.usdtModalVisible,callback:function(s){t.usdtModalVisible=s},expression:"usdtModalVisible"}},[t.usdtOrder?s("div",{staticClass:"usdt-checkout"},[s("div",{staticClass:"checkout-header"},[s("div",{staticClass:"header-left"},[s("div",{staticClass:"usdt-logo"},[s("svg",{attrs:{viewBox:"0 0 32 32",width:"28",height:"28"}},[s("circle",{attrs:{cx:"16",cy:"16",r:"16",fill:"#26A17B"}}),s("path",{attrs:{d:"M17.9 17.9v-.003c-.1.008-.6.04-1.8.04-1 0-1.5-.028-1.7-.04v.004c-3.4-.15-5.9-.74-5.9-1.44 0-.7 2.5-1.29 5.9-1.44v2.3c.2.013.7.05 1.7.05 1.2 0 1.6-.04 1.8-.05v-2.3c3.4.15 5.9.74 5.9 1.44 0 .7-2.5 1.29-5.9 1.44zm0-3.12V12.7h5v-2.4H9.2v2.4h5v2.08c-3.8.18-6.7.93-6.7 1.83s2.9 1.65 6.7 1.83v6.56h3.6v-6.56c3.8-.18 6.7-.93 6.7-1.83s-2.8-1.65-6.6-1.83z",fill:"#fff"}})])]),s("div",{staticClass:"header-text"},[s("div",{staticClass:"header-title"},[t._v(t._s(t.$t("billing.usdt.title")))]),s("div",{staticClass:"header-desc"},[t._v(t._s(t.$t("billing.usdt.hintDesc")))])])]),s("a-button",{staticClass:"close-btn",attrs:{type:"link"},on:{click:t.closeUsdtModal}},[s("a-icon",{attrs:{type:"close"}})],1)],1),s("div",{staticClass:"checkout-steps"},t._l(t.stepItems,function(i,a){return s("div",{key:a,staticClass:"step-item",class:{active:a<=t.usdtStepCurrent,current:a===t.usdtStepCurrent}},[s("div",{staticClass:"step-dot"},[s("span",{staticClass:"dot-inner"}),a===t.usdtStepCurrent&&"pending"===t.usdtOrder.status?s("span",{staticClass:"dot-pulse"}):t._e()]),s("span",{staticClass:"step-label"},[t._v(t._s(i))]),a1&&void 0!==arguments[1])||arguments[1];return(0,c.Ay)({url:o.UsdtOrder(t),method:"get",params:{refresh:s?1:0}})}var g={name:"BillingPage",computed:(0,n.A)((0,n.A)({},(0,d.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},usdtQrUrl:function(){var t=this.getUsdtQrText();return t?"https://api.qrserver.com/v1/create-qr-code/?size=220x220&data=".concat(encodeURIComponent(t)):""},statusText:function(){var t=this.usdtOrder&&this.usdtOrder.status?String(this.usdtOrder.status):"",s={pending:this.$t("billing.usdt.status.pending"),paid:this.$t("billing.usdt.status.paid"),confirmed:this.$t("billing.usdt.status.confirmed"),expired:this.$t("billing.usdt.status.expired"),cancelled:this.$t("billing.usdt.status.cancelled"),failed:this.$t("billing.usdt.status.failed")};return s[t]||t||"--"},statusColor:function(){var t=this.usdtOrder&&this.usdtOrder.status?String(this.usdtOrder.status):"";return"confirmed"===t?"green":"paid"===t?"blue":"expired"===t||"failed"===t||"cancelled"===t?"red":"orange"},usdtStepCurrent:function(){var t=this.usdtOrder&&this.usdtOrder.status?String(this.usdtOrder.status):"";return"confirmed"===t?2:"paid"===t?1:0},stepItems:function(){return[this.$t("billing.usdt.status.pending"),this.$t("billing.usdt.status.paid"),this.$t("billing.usdt.status.confirmed")]}}),data:function(){return{loading:!1,purchasing:"",usdtModalVisible:!1,usdtOrder:null,usdtPollingTimer:null,usdtRefreshing:!1,billing:{credits:0,is_vip:!1,vip_expires_at:null},plans:{monthly:{price_usd:19.9,credits_once:500},yearly:{price_usd:199,credits_once:8e3},lifetime:{price_usd:499,credits_monthly:800}}}},created:function(){this.load()},beforeDestroy:function(){this.stopUsdtPolling()},methods:{load:function(){var t=this;return(0,l.A)((0,r.A)().m(function s(){var i,a,e;return(0,r.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.loading=!0,s.p=1,s.n=2,u();case 2:i=s.v,i&&1===i.code&&i.data?(t.plans=i.data.plans||t.plans,t.billing=i.data.billing||t.billing):t.$message.error((null===i||void 0===i?void 0:i.msg)||"Load failed"),s.n=4;break;case 3:s.p=3,e=s.v,t.$message.error((null===e||void 0===e||null===(a=e.response)||void 0===a||null===(a=a.data)||void 0===a?void 0:a.msg)||"Load failed");case 4:return s.p=4,t.loading=!1,s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},formatCredits:function(t){return t||0===t?Number(t).toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:2}):"0"},formatDate:function(t){return t?new Date(t).toLocaleDateString():""},buy:function(t){var s=this;return(0,l.A)((0,r.A)().m(function i(){var a,e,l;return(0,r.A)().w(function(i){while(1)switch(i.p=i.n){case 0:return s.purchasing=t,i.p=1,i.n=2,p(t);case 2:a=i.v,a&&1===a.code&&a.data?(s.usdtOrder=a.data,s.usdtModalVisible=!0,s.startUsdtPolling()):s.$message.error((null===a||void 0===a?void 0:a.msg)||s.$t("billing.purchaseFailed")),i.n=4;break;case 3:i.p=3,l=i.v,s.$message.error((null===l||void 0===l||null===(e=l.response)||void 0===e||null===(e=e.data)||void 0===e?void 0:e.msg)||s.$t("billing.purchaseFailed"));case 4:return i.p=4,s.purchasing="",i.f(4);case 5:return i.a(2)}},i,null,[[1,3,4,5]])}))()},getUsdtQrText:function(){return this.usdtOrder&&this.usdtOrder.address||""},copyText:function(t){try{var s=String(t||"");if(!s)return;this.$copyText(s),this.$message.success(this.$t("common.copySuccess")||"Copied")}catch(i){this.$message.error(this.$t("common.copyFailed")||"Copy failed")}},formatDateTime:function(t){return t?new Date(t).toLocaleString():""},refreshUsdtOrder:function(){var t=this;return(0,l.A)((0,r.A)().m(function s(){var i,a;return(0,r.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(t.usdtOrder&&t.usdtOrder.order_id){s.n=1;break}return s.a(2);case 1:return t.usdtRefreshing=!0,s.p=2,s.n=3,v(t.usdtOrder.order_id,!0);case 3:if(i=s.v,!i||1!==i.code||!i.data){s.n=6;break}if(t.usdtOrder=i.data,a=t.usdtOrder.status,"confirmed"!==a){s.n=5;break}return t.$message.success(t.$t("billing.usdt.paidSuccess")),t.stopUsdtPolling(),s.n=4,t.load();case 4:s.n=6;break;case 5:"expired"!==a&&"failed"!==a&&"cancelled"!==a||t.stopUsdtPolling();case 6:s.n=8;break;case 7:s.p=7,s.v;case 8:return s.p=8,t.usdtRefreshing=!1,s.f(8);case 9:return s.a(2)}},s,null,[[2,7,8,9]])}))()},startUsdtPolling:function(){var t=this;this.stopUsdtPolling(),this.usdtPollingTimer=setInterval(function(){t.refreshUsdtOrder()},5e3)},stopUsdtPolling:function(){this.usdtPollingTimer&&(clearInterval(this.usdtPollingTimer),this.usdtPollingTimer=null)},closeUsdtModal:function(){this.usdtModalVisible=!1,this.stopUsdtPolling()}}},h=g,m=i(845),_=(0,m.A)(h,a,e,!1,null,"0cdd5f9c",null),b=_.exports}}]); \ No newline at end of file +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[55],{58055:function(t,s,i){i.r(s),i.d(s,{default:function(){return b}});var a=function(){var t=this,s=t._self._c;return s("div",{staticClass:"billing-page",class:{"theme-dark":t.isDarkTheme}},[s("div",{staticClass:"page-header"},[s("h2",{staticClass:"page-title"},[s("a-icon",{attrs:{type:"wallet"}}),s("span",[t._v(t._s(t.$t("billing.title")))])],1),s("p",{staticClass:"page-desc"},[t._v(t._s(t.$t("billing.desc")))])]),s("a-card",{staticClass:"snapshot-card",attrs:{bordered:!1}},[s("div",{staticClass:"snapshot-row"},[s("div",{staticClass:"snap-item"},[s("div",{staticClass:"snap-label"},[t._v(t._s(t.$t("billing.snapshot.credits")))]),s("div",{staticClass:"snap-value"},[t._v(t._s(t.formatCredits(t.billing.credits)))])]),s("div",{staticClass:"snap-item"},[s("div",{staticClass:"snap-label"},[t._v(t._s(t.$t("billing.snapshot.vip")))]),s("div",{staticClass:"snap-value"},[t.billing.is_vip?s("a-tag",{attrs:{color:"gold"}},[s("a-icon",{attrs:{type:"crown"}}),t._v(" VIP ")],1):s("a-tag",[t._v(t._s(t.$t("billing.snapshot.notVip")))]),t.billing.vip_expires_at?s("span",{staticClass:"vip-exp"},[t._v(" "+t._s(t.$t("billing.snapshot.expires"))+": "+t._s(t.formatDate(t.billing.vip_expires_at))+" ")]):t._e()],1)])]),s("a-alert",{staticStyle:{"margin-top":"12px"},attrs:{type:"info","show-icon":"",message:t.$t("billing.vipRule.title"),description:t.$t("billing.vipRule.desc")}})],1),s("a-row",{staticStyle:{"margin-top":"16px"},attrs:{gutter:16}},[s("a-col",{attrs:{xs:24,md:8}},[s("a-card",{staticClass:"plan-card",attrs:{bordered:!1}},[s("div",{staticClass:"plan-title"},[t._v(t._s(t.$t("billing.plan.monthly")))]),s("div",{staticClass:"plan-price"},[t._v(" $"+t._s(t.plans.monthly.price_usd)+" "),s("span",{staticClass:"plan-unit"},[t._v("/ "+t._s(t.$t("billing.perMonth")))])]),s("div",{staticClass:"plan-benefit"},[t._v(" +"+t._s(t.plans.monthly.credits_once)+" "+t._s(t.$t("billing.credits"))+" ")]),s("a-button",{attrs:{type:"primary",block:"",loading:"monthly"===t.purchasing},on:{click:function(s){return t.buy("monthly")}}},[t._v(" "+t._s(t.$t("billing.buyNow"))+" ")])],1)],1),s("a-col",{attrs:{xs:24,md:8}},[s("a-card",{staticClass:"plan-card highlight",attrs:{bordered:!1}},[s("div",{staticClass:"plan-title"},[t._v(t._s(t.$t("billing.plan.yearly")))]),s("div",{staticClass:"plan-price"},[t._v(" $"+t._s(t.plans.yearly.price_usd)+" "),s("span",{staticClass:"plan-unit"},[t._v("/ "+t._s(t.$t("billing.perYear")))])]),s("div",{staticClass:"plan-benefit"},[t._v(" +"+t._s(t.plans.yearly.credits_once)+" "+t._s(t.$t("billing.credits"))+" ")]),s("a-button",{attrs:{type:"primary",block:"",loading:"yearly"===t.purchasing},on:{click:function(s){return t.buy("yearly")}}},[t._v(" "+t._s(t.$t("billing.buyNow"))+" ")])],1)],1),s("a-col",{attrs:{xs:24,md:8}},[s("a-card",{staticClass:"plan-card",attrs:{bordered:!1}},[s("div",{staticClass:"plan-title"},[t._v(t._s(t.$t("billing.plan.lifetime")))]),s("div",{staticClass:"plan-price"},[t._v(" $"+t._s(t.plans.lifetime.price_usd)+" "),s("span",{staticClass:"plan-unit"},[t._v(t._s(t.$t("billing.once")))])]),s("div",{staticClass:"plan-benefit"},[t._v(" "+t._s(t.$t("billing.lifetimeMonthly"))+" +"+t._s(t.plans.lifetime.credits_monthly)+" "+t._s(t.$t("billing.credits"))+" ")]),s("a-button",{attrs:{type:"primary",block:"",loading:"lifetime"===t.purchasing},on:{click:function(s){return t.buy("lifetime")}}},[t._v(" "+t._s(t.$t("billing.buyNow"))+" ")])],1)],1)],1),s("a-modal",{attrs:{title:null,footer:null,maskClosable:!1,closable:!1,wrapClassName:"usdt-pay-modal-wrap",width:"600px"},on:{cancel:t.closeUsdtModal},model:{value:t.usdtModalVisible,callback:function(s){t.usdtModalVisible=s},expression:"usdtModalVisible"}},[t.usdtOrder?s("div",{staticClass:"usdt-checkout"},[s("div",{staticClass:"checkout-header"},[s("div",{staticClass:"header-left"},[s("div",{staticClass:"usdt-logo"},[s("svg",{attrs:{viewBox:"0 0 32 32",width:"28",height:"28"}},[s("circle",{attrs:{cx:"16",cy:"16",r:"16",fill:"#26A17B"}}),s("path",{attrs:{d:"M17.9 17.9v-.003c-.1.008-.6.04-1.8.04-1 0-1.5-.028-1.7-.04v.004c-3.4-.15-5.9-.74-5.9-1.44 0-.7 2.5-1.29 5.9-1.44v2.3c.2.013.7.05 1.7.05 1.2 0 1.6-.04 1.8-.05v-2.3c3.4.15 5.9.74 5.9 1.44 0 .7-2.5 1.29-5.9 1.44zm0-3.12V12.7h5v-2.4H9.2v2.4h5v2.08c-3.8.18-6.7.93-6.7 1.83s2.9 1.65 6.7 1.83v6.56h3.6v-6.56c3.8-.18 6.7-.93 6.7-1.83s-2.8-1.65-6.6-1.83z",fill:"#fff"}})])]),s("div",{staticClass:"header-text"},[s("div",{staticClass:"header-title"},[t._v(t._s(t.$t("billing.usdt.title")))]),s("div",{staticClass:"header-desc"},[t._v(t._s(t.$t("billing.usdt.hintDesc")))])])]),s("a-button",{staticClass:"close-btn",attrs:{type:"link"},on:{click:t.closeUsdtModal}},[s("a-icon",{attrs:{type:"close"}})],1)],1),s("div",{staticClass:"checkout-steps"},t._l(t.stepItems,function(i,a){return s("div",{key:a,staticClass:"step-item",class:{active:a<=t.usdtStepCurrent,current:a===t.usdtStepCurrent}},[s("div",{staticClass:"step-dot"},[s("span",{staticClass:"dot-inner"}),a===t.usdtStepCurrent&&"pending"===t.usdtOrder.status?s("span",{staticClass:"dot-pulse"}):t._e()]),s("span",{staticClass:"step-label"},[t._v(t._s(i))]),a1&&void 0!==arguments[1])||arguments[1];return(0,c.Ay)({url:o.UsdtOrder(t),method:"get",params:{refresh:s?1:0}})}var g={name:"BillingPage",computed:(0,n.A)((0,n.A)({},(0,d.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},usdtQrUrl:function(){var t=this.getUsdtQrText();return t?"https://api.qrserver.com/v1/create-qr-code/?size=220x220&data=".concat(encodeURIComponent(t)):""},statusText:function(){var t=this.usdtOrder&&this.usdtOrder.status?String(this.usdtOrder.status):"",s={pending:this.$t("billing.usdt.status.pending"),paid:this.$t("billing.usdt.status.paid"),confirmed:this.$t("billing.usdt.status.confirmed"),expired:this.$t("billing.usdt.status.expired"),cancelled:this.$t("billing.usdt.status.cancelled"),failed:this.$t("billing.usdt.status.failed")};return s[t]||t||"--"},statusColor:function(){var t=this.usdtOrder&&this.usdtOrder.status?String(this.usdtOrder.status):"";return"confirmed"===t?"green":"paid"===t?"blue":"expired"===t||"failed"===t||"cancelled"===t?"red":"orange"},usdtStepCurrent:function(){var t=this.usdtOrder&&this.usdtOrder.status?String(this.usdtOrder.status):"";return"confirmed"===t?2:"paid"===t?1:0},stepItems:function(){return[this.$t("billing.usdt.status.pending"),this.$t("billing.usdt.status.paid"),this.$t("billing.usdt.status.confirmed")]}}),data:function(){return{loading:!1,purchasing:"",usdtModalVisible:!1,usdtOrder:null,usdtPollingTimer:null,usdtRefreshing:!1,billing:{credits:0,is_vip:!1,vip_expires_at:null},plans:{monthly:{price_usd:19.9,credits_once:500},yearly:{price_usd:199,credits_once:8e3},lifetime:{price_usd:499,credits_monthly:800}}}},created:function(){this.load()},beforeDestroy:function(){this.stopUsdtPolling()},methods:{load:function(){var t=this;return(0,l.A)((0,r.A)().m(function s(){var i,a,e;return(0,r.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.loading=!0,s.p=1,s.n=2,u();case 2:i=s.v,i&&1===i.code&&i.data?(t.plans=i.data.plans||t.plans,t.billing=i.data.billing||t.billing):t.$message.error((null===i||void 0===i?void 0:i.msg)||"Load failed"),s.n=4;break;case 3:s.p=3,e=s.v,t.$message.error((null===e||void 0===e||null===(a=e.response)||void 0===a||null===(a=a.data)||void 0===a?void 0:a.msg)||"Load failed");case 4:return s.p=4,t.loading=!1,s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},formatCredits:function(t){return t||0===t?Number(t).toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:2}):"0"},formatDate:function(t){return t?new Date(t).toLocaleDateString():""},buy:function(t){var s=this;return(0,l.A)((0,r.A)().m(function i(){var a,e,l;return(0,r.A)().w(function(i){while(1)switch(i.p=i.n){case 0:return s.purchasing=t,i.p=1,i.n=2,p(t);case 2:a=i.v,a&&1===a.code&&a.data?(s.usdtOrder=a.data,s.usdtModalVisible=!0,s.startUsdtPolling()):s.$message.error((null===a||void 0===a?void 0:a.msg)||s.$t("billing.purchaseFailed")),i.n=4;break;case 3:i.p=3,l=i.v,s.$message.error((null===l||void 0===l||null===(e=l.response)||void 0===e||null===(e=e.data)||void 0===e?void 0:e.msg)||s.$t("billing.purchaseFailed"));case 4:return i.p=4,s.purchasing="",i.f(4);case 5:return i.a(2)}},i,null,[[1,3,4,5]])}))()},getUsdtQrText:function(){return this.usdtOrder&&this.usdtOrder.address||""},copyText:function(t){try{var s=String(t||"");if(!s)return;this.$copyText(s),this.$message.success(this.$t("common.copySuccess")||"Copied")}catch(i){this.$message.error(this.$t("common.copyFailed")||"Copy failed")}},formatDateTime:function(t){return t?new Date(t).toLocaleString():""},refreshUsdtOrder:function(){var t=this;return(0,l.A)((0,r.A)().m(function s(){var i,a;return(0,r.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(t.usdtOrder&&t.usdtOrder.order_id){s.n=1;break}return s.a(2);case 1:return t.usdtRefreshing=!0,s.p=2,s.n=3,v(t.usdtOrder.order_id,!0);case 3:if(i=s.v,!i||1!==i.code||!i.data){s.n=6;break}if(t.usdtOrder=i.data,a=t.usdtOrder.status,"confirmed"!==a){s.n=5;break}return t.$message.success(t.$t("billing.usdt.paidSuccess")),t.stopUsdtPolling(),s.n=4,t.load();case 4:s.n=6;break;case 5:"expired"!==a&&"failed"!==a&&"cancelled"!==a||t.stopUsdtPolling();case 6:s.n=8;break;case 7:s.p=7,s.v;case 8:return s.p=8,t.usdtRefreshing=!1,s.f(8);case 9:return s.a(2)}},s,null,[[2,7,8,9]])}))()},startUsdtPolling:function(){var t=this;this.stopUsdtPolling(),this.usdtPollingTimer=setInterval(function(){t.refreshUsdtOrder()},5e3)},stopUsdtPolling:function(){this.usdtPollingTimer&&(clearInterval(this.usdtPollingTimer),this.usdtPollingTimer=null)},closeUsdtModal:function(){this.usdtModalVisible=!1,this.stopUsdtPolling()}}},h=g,m=i(845),_=(0,m.A)(h,a,e,!1,null,"0cdd5f9c",null),b=_.exports}}]); \ No newline at end of file diff --git a/frontend/dist/js/576.8b80412c.js b/frontend/dist/js/576.8b80412c.js deleted file mode 100644 index aea4b8c..0000000 --- a/frontend/dist/js/576.8b80412c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[576],{53576:function(t,s,a){a.r(s),a.d(s,{default:function(){return M}});var e=function(){var t=this,s=t._self._c;return s("div",{staticClass:"ai-analysis-container",class:{"theme-dark":t.isDarkTheme,embedded:t.embedded},style:{"--primary-color":t.primaryColor}},[s("div",{staticClass:"main-content-full"},[s("div",{staticClass:"top-index-bar"},[t.loadingSentiment?[t._m(0),t._m(1),t._m(2)]:[s("div",{staticClass:"indicator-box fear-greed",class:t.getFearGreedClass(t.marketData.fearGreed)},[s("span",{staticClass:"ind-label"},[t._v(t._s(t.$t("globalMarket.fearGreedShort")))]),s("span",{staticClass:"ind-value"},[t._v(t._s(t.marketData.fearGreed||"--"))])]),s("div",{staticClass:"indicator-box vix",class:t.getVixLevel(t.marketData.vix)},[s("span",{staticClass:"ind-label"},[t._v("VIX")]),s("span",{staticClass:"ind-value"},[t._v(t._s(t.marketData.vix||"--"))])]),s("div",{staticClass:"indicator-box dxy"},[s("span",{staticClass:"ind-label"},[t._v("DXY")]),s("span",{staticClass:"ind-value"},[t._v(t._s(t.marketData.dxy||"--"))])])],s("div",{staticClass:"indices-marquee"},[t.loadingIndices?[s("div",{staticClass:"indices-loading"},[s("a-icon",{attrs:{type:"loading"}}),t._v(" "+t._s(t.$t("common.loading")||"加载中...")+" ")],1)]:t.marketData.indices.length>0?[s("div",{staticClass:"marquee-track"},[t._l(t.marketData.indices,function(a){return s("div",{key:"a-"+a.symbol,staticClass:"index-item"},[s("span",{staticClass:"idx-flag"},[t._v(t._s(a.flag))]),s("span",{staticClass:"idx-symbol"},[t._v(t._s(a.symbol))]),s("span",{staticClass:"idx-price"},[t._v(t._s(t.formatPrice(a.price)))]),s("span",{staticClass:"idx-change",class:a.change>=0?"up":"down"},[s("a-icon",{attrs:{type:a.change>=0?"caret-up":"caret-down"}}),t._v(" "+t._s(Math.abs(a.change).toFixed(2))+"% ")],1)])}),t._l(t.marketData.indices,function(a){return s("div",{key:"b-"+a.symbol,staticClass:"index-item"},[s("span",{staticClass:"idx-flag"},[t._v(t._s(a.flag))]),s("span",{staticClass:"idx-symbol"},[t._v(t._s(a.symbol))]),s("span",{staticClass:"idx-price"},[t._v(t._s(t.formatPrice(a.price)))]),s("span",{staticClass:"idx-change",class:a.change>=0?"up":"down"},[s("a-icon",{attrs:{type:a.change>=0?"caret-up":"caret-down"}}),t._v(" "+t._s(Math.abs(a.change).toFixed(2))+"% ")],1)])})],2)]:[s("div",{staticClass:"indices-empty"},[t._v("--")])]],2),s("a-button",{staticClass:"refresh-btn",attrs:{type:"link",size:"small",loading:t.loadingMarket},on:{click:t.loadMarketData}},[s("a-icon",{attrs:{type:"sync",spin:t.loadingMarket}})],1)],2),s("div",{staticClass:"main-body"},[s("div",{staticClass:"left-panel"},[s("div",{staticClass:"heatmap-box"},[s("div",{staticClass:"box-header"},[s("a-radio-group",{attrs:{size:"small","button-style":"solid"},model:{value:t.heatmapType,callback:function(s){t.heatmapType=s},expression:"heatmapType"}},[s("a-radio-button",{attrs:{value:"crypto"}},[t._v(t._s(t.$t("globalMarket.cryptoHeatmap")))]),s("a-radio-button",{attrs:{value:"commodities"}},[t._v(t._s(t.$t("globalMarket.commoditiesHeatmap")))]),s("a-radio-button",{attrs:{value:"sectors"}},[t._v(t._s(t.$t("globalMarket.sectorHeatmap")))]),s("a-radio-button",{attrs:{value:"forex"}},[t._v(t._s(t.$t("globalMarket.forexHeatmap")))])],1)],1),s("div",{staticClass:"heatmap-grid"},[t.loadingHeatmap?t._l(12,function(t){return s("div",{key:"skel-"+t,staticClass:"heat-cell skeleton-cell"},[s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text"})])}):t.currentHeatmap.length>0?t._l(t.currentHeatmap.slice(0,12),function(a,e){return s("div",{key:e,staticClass:"heat-cell",style:t.getHeatmapStyle(a.value)},[s("span",{staticClass:"heat-name"},[t._v(t._s(t.getHeatmapName(a)))]),a.price?s("span",{staticClass:"heat-price"},[t._v(t._s(t.formatHeatmapPrice(a.price)))]):t._e(),s("span",{staticClass:"heat-val"},[t._v(t._s(a.value>=0?"+":"")+t._s(t.formatNum(a.value))+"%")])])}):[s("div",{staticClass:"heatmap-empty"},[t._v(t._s(t.$t("common.noData")||"暂无数据"))])]],2)]),s("div",{staticClass:"calendar-box"},[s("div",{staticClass:"box-header"},[s("span",{staticClass:"box-title"},[s("a-icon",{attrs:{type:"calendar"}}),t._v(" "+t._s(t.$t("globalMarket.calendar")))],1)]),s("div",{staticClass:"calendar-list"},[t.loadingCalendar?t._l(5,function(t){return s("div",{key:"cal-skel-"+t,staticClass:"cal-item skeleton-item"},[s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text"})])}):t.marketData.calendar.length>0?t._l(t.marketData.calendar.slice(0,10),function(a){return s("div",{key:a.id,staticClass:"cal-item",class:a.importance},[s("span",{staticClass:"cal-date"},[t._v(t._s(t.formatCalendarDate(a.date)))]),s("span",{staticClass:"cal-time"},[t._v(t._s(a.time||"--:--"))]),s("span",{staticClass:"cal-flag"},[t._v(t._s(t.getCountryFlag(a.country)))]),s("span",{staticClass:"cal-name"},[t._v(t._s(t.isZhLocale?a.name:a.name_en))]),s("span",{staticClass:"cal-impact",class:t.getImpactClass(a)},["bullish"===t.getImpactClass(a)?s("a-icon",{attrs:{type:"arrow-up"}}):"bearish"===t.getImpactClass(a)?s("a-icon",{attrs:{type:"arrow-down"}}):s("a-icon",{attrs:{type:"minus"}}),t._v(" "+t._s(a.actual||a.forecast||"--")+" ")],1)])}):[s("div",{staticClass:"cal-empty"},[t._v(t._s(t.$t("globalMarket.noEvents")))])]],2)])]),s("div",{staticClass:"right-panel"},[s("div",{staticClass:"analysis-toolbar"},[s("a-select",{staticClass:"symbol-selector",attrs:{placeholder:t.$t("dashboard.analysis.empty.selectSymbol"),size:"large","show-search":"","allow-clear":"","filter-option":t.filterSymbolOption},on:{change:t.handleSymbolChange},model:{value:t.selectedSymbol,callback:function(s){t.selectedSymbol=s},expression:"selectedSymbol"}},[t._l(t.watchlist||[],function(a){return s("a-select-option",{key:"".concat(a.market,"-").concat(a.symbol),attrs:{value:"".concat(a.market,":").concat(a.symbol)}},[s("span",{staticClass:"symbol-option"},[s("a-tag",{attrs:{color:t.getMarketColor(a.market),size:"small"}},[t._v(t._s(t.getMarketName(a.market)))]),s("strong",{staticStyle:{"margin-left":"6px"}},[t._v(t._s(a.symbol))]),a.name?s("span",{staticClass:"symbol-name"},[t._v(t._s(a.name))]):t._e()],1)])}),s("a-select-option",{key:"add-stock-option",staticClass:"add-stock-option",attrs:{value:"__add_stock_option__"}},[s("div",{staticStyle:{"text-align":"center",padding:"4px 0",color:"#1890ff"}},[s("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"plus"}}),t._v(t._s(t.$t("dashboard.analysis.watchlist.add"))+" ")],1)])],2),s("a-button",{staticClass:"analyze-button",attrs:{type:"primary",size:"large",icon:"thunderbolt",loading:t.analyzing,disabled:!t.selectedSymbol||t.analyzing},on:{click:t.startFastAnalysis}},[t._v(" "+t._s(t.$t("fastAnalysis.startAnalysis"))+" ")]),s("a-button",{staticClass:"history-button",attrs:{size:"large",icon:"history"},on:{click:function(s){t.showHistoryModal=!0,t.loadHistoryList()}}},[t._v(" "+t._s(t.$t("fastAnalysis.history"))+" ")])],1),s("div",{staticClass:"analysis-main"},[t.analysisResult||t.analyzing||t.analysisError?t._e():s("div",{staticClass:"analysis-placeholder"},[s("div",{staticClass:"placeholder-content"},[s("div",{staticClass:"placeholder-icon"},[s("a-icon",{attrs:{type:"robot"}})],1),s("h3",[t._v(t._s(t.$t("fastAnalysis.selectTip")))]),s("p",[t._v(t._s(t.$t("fastAnalysis.selectHint")))])])]),t.analysisResult||t.analyzing||t.analysisError?s("FastAnalysisReport",{attrs:{result:t.analysisResult,loading:t.analyzing,error:t.analysisError,"error-tone":t.analysisErrorTone},on:{retry:t.startFastAnalysis}}):t._e()],1)]),s("div",{staticClass:"watchlist-panel"},[s("div",{staticClass:"panel-header"},[s("span",{staticClass:"panel-title"},[s("a-icon",{attrs:{type:"star",theme:"filled"}}),t._v(" "+t._s(t.$t("dashboard.analysis.watchlist.title")))],1),s("a-button",{attrs:{type:"link",size:"small"},on:{click:function(s){t.showAddStockModal=!0}}},[s("a-icon",{attrs:{type:"plus"}})],1)],1),s("div",{staticClass:"watchlist-list"},[t._l(t.watchlist||[],function(a){var e,i,r;return s("div",{key:"".concat(a.market,"-").concat(a.symbol),staticClass:"watchlist-item",class:{active:t.selectedSymbol==="".concat(a.market,":").concat(a.symbol)},on:{click:function(s){return t.selectWatchlistItem(a)}}},[s("div",{staticClass:"item-main"},[s("span",{staticClass:"item-symbol"},[t._v(t._s(a.symbol))]),s("span",{staticClass:"item-name"},[t._v(t._s(a.name||t.getMarketName(a.market)))])]),t.watchlistPrices["".concat(a.market,":").concat(a.symbol)]?s("div",{staticClass:"item-price"},[s("span",{staticClass:"price-value"},[t._v(t._s(t.formatPrice(t.watchlistPrices["".concat(a.market,":").concat(a.symbol)].price)))]),s("span",{staticClass:"price-change",class:((null===(e=t.watchlistPrices["".concat(a.market,":").concat(a.symbol)])||void 0===e?void 0:e.change)||0)>=0?"up":"down"},[t._v(" "+t._s(((null===(i=t.watchlistPrices["".concat(a.market,":").concat(a.symbol)])||void 0===i?void 0:i.change)||0)>=0?"+":"")+t._s(t.formatNum(null===(r=t.watchlistPrices["".concat(a.market,":").concat(a.symbol)])||void 0===r?void 0:r.change))+"% ")])]):t._e(),s("a-icon",{staticClass:"item-remove",attrs:{type:"close"},on:{click:function(s){return s.stopPropagation(),t.removeFromWatchlist(a)}}})],1)}),t.watchlist&&0!==t.watchlist.length?t._e():s("div",{staticClass:"watchlist-empty"},[s("a-icon",{attrs:{type:"inbox"}}),s("p",[t._v(t._s(t.$t("dashboard.analysis.empty.noWatchlist")))]),s("a-button",{attrs:{type:"primary",size:"small"},on:{click:function(s){t.showAddStockModal=!0}}},[s("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("dashboard.analysis.watchlist.add"))+" ")],1)],1)],2)])])]),s("a-modal",{attrs:{title:t.$t("dashboard.analysis.modal.addStock.title"),visible:t.showAddStockModal,confirmLoading:t.addingStock,width:"600px",okText:t.$t("dashboard.analysis.modal.addStock.confirm"),cancelText:t.$t("dashboard.analysis.modal.addStock.cancel")},on:{ok:t.handleAddStock,cancel:t.handleCloseAddStockModal}},[s("div",{staticClass:"add-stock-modal-content"},[s("a-tabs",{staticClass:"market-tabs",on:{change:t.handleMarketTabChange},model:{value:t.selectedMarketTab,callback:function(s){t.selectedMarketTab=s},expression:"selectedMarketTab"}},t._l(t.marketTypes,function(a){return s("a-tab-pane",{key:a.value,attrs:{tab:t.$t(a.i18nKey||"dashboard.analysis.market.".concat(a.value))}})}),1),s("div",{staticClass:"symbol-search-section"},[s("a-input-search",{attrs:{placeholder:t.$t("dashboard.analysis.modal.addStock.searchOrInputPlaceholder"),loading:t.searchingSymbols,size:"large","allow-clear":""},on:{search:t.handleSearchOrInput,change:t.handleSymbolSearchInput},model:{value:t.symbolSearchKeyword,callback:function(s){t.symbolSearchKeyword=s},expression:"symbolSearchKeyword"}},[s("a-button",{attrs:{slot:"enterButton",type:"primary",icon:"search"},slot:"enterButton"},[t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.search"))+" ")])],1)],1),t.symbolSearchResults.length>0?s("div",{staticClass:"search-results-section"},[s("div",{staticClass:"section-title"},[s("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"search"}}),t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.searchResults"))+" ")],1),s("a-list",{staticClass:"symbol-list",attrs:{"data-source":t.symbolSearchResults,loading:t.searchingSymbols,size:"small"},scopedSlots:t._u([{key:"renderItem",fn:function(a){return s("a-list-item",{staticClass:"symbol-list-item",on:{click:function(s){return t.selectSymbol(a)}}},[s("a-list-item-meta",[s("template",{slot:"title"},[s("div",{staticClass:"symbol-item-content"},[s("span",{staticClass:"symbol-code"},[t._v(t._s(a.symbol))]),s("span",{staticClass:"symbol-name"},[t._v(t._s(a.name))]),a.exchange?s("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"blue"}},[t._v(" "+t._s(a.exchange)+" ")]):t._e()],1)])],2)],1)}}],null,!1,1074844145)})],1):t._e(),s("div",{staticClass:"hot-symbols-section"},[s("div",{staticClass:"section-title"},[s("a-icon",{staticStyle:{color:"#ff4d4f","margin-right":"4px"},attrs:{type:"fire"}}),t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.hotSymbols"))+" ")],1),s("a-spin",{attrs:{spinning:t.loadingHotSymbols}},[t.hotSymbols.length>0?s("a-list",{staticClass:"symbol-list",attrs:{"data-source":t.hotSymbols,size:"small"},scopedSlots:t._u([{key:"renderItem",fn:function(a){return s("a-list-item",{staticClass:"symbol-list-item",on:{click:function(s){return t.selectSymbol(a)}}},[s("a-list-item-meta",[s("template",{slot:"title"},[s("div",{staticClass:"symbol-item-content"},[s("span",{staticClass:"symbol-code"},[t._v(t._s(a.symbol))]),s("span",{staticClass:"symbol-name"},[t._v(t._s(a.name))]),a.exchange?s("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"orange"}},[t._v(" "+t._s(a.exchange)+" ")]):t._e()],1)])],2)],1)}}],null,!1,2177647935)}):s("a-empty",{attrs:{description:t.$t("dashboard.analysis.modal.addStock.noHotSymbols"),image:!1}})],1)],1),t.selectedSymbolForAdd?s("div",{staticClass:"selected-symbol-section"},[s("a-alert",{attrs:{message:t.$t("dashboard.analysis.modal.addStock.selectedSymbol"),type:"info","show-icon":"",closable:""},on:{close:function(s){t.selectedSymbolForAdd=null}}},[s("template",{slot:"description"},[s("div",{staticClass:"selected-symbol-info"},[s("a-tag",{staticStyle:{"margin-right":"8px"},attrs:{color:t.getMarketColor(t.selectedSymbolForAdd.market)}},[t._v(" "+t._s(t.$t("dashboard.analysis.market.".concat(t.selectedSymbolForAdd.market)))+" ")]),s("strong",[t._v(t._s(t.selectedSymbolForAdd.symbol))]),t.selectedSymbolForAdd.name?s("span",{staticStyle:{color:"#999","margin-left":"8px"}},[t._v(t._s(t.selectedSymbolForAdd.name))]):t._e()],1)])],2)],1):t._e()],1)]),s("a-modal",{attrs:{title:t.$t("dashboard.analysis.modal.history.title"),visible:t.showHistoryModal,footer:null,width:"800px",bodyStyle:{maxHeight:"60vh",overflowY:"auto"}},on:{cancel:function(s){t.showHistoryModal=!1}}},[s("a-spin",{attrs:{spinning:t.historyLoading}},[s("a-list",{attrs:{"data-source":t.historyList,pagination:{current:t.historyPage,pageSize:t.historyPageSize,total:t.historyTotal,onChange:function(s){t.historyPage=s,t.loadHistoryList()},showSizeChanger:!0,pageSizeOptions:["10","20","50"],onShowSizeChange:function(s,a){t.historyPageSize=a,t.historyPage=1,t.loadHistoryList()}}},scopedSlots:t._u([{key:"renderItem",fn:function(a){return s("a-list-item",{},[s("a-list-item-meta",[s("template",{slot:"title"},[s("div",{staticStyle:{display:"flex","align-items":"center","justify-content":"space-between"}},[s("div",[s("a-tag",{staticStyle:{"margin-right":"8px"},attrs:{color:t.getMarketColor(a.market)}},[t._v(" "+t._s(t.getMarketName(a.market))+" ")]),s("strong",[t._v(t._s(a.symbol))]),s("a-tag",{staticStyle:{"margin-left":"12px"},attrs:{color:"BUY"===a.decision?"green":"SELL"===a.decision?"red":"blue"}},[t._v(" "+t._s(a.decision)+" ")]),s("span",{staticStyle:{color:"#999","margin-left":"8px","font-size":"12px"}},[t._v(" "+t._s(t.$t("fastAnalysis.confidence"))+": "+t._s(a.confidence)+"% ")])],1),s("div",[s("a-button",{attrs:{type:"link",size:"small",icon:"eye"},on:{click:function(s){return t.viewHistoryResult(a)}}},[t._v(" "+t._s(t.$t("dashboard.analysis.modal.history.viewResult"))+" ")]),s("a-popconfirm",{attrs:{title:t.$t("dashboard.analysis.modal.history.deleteConfirm"),"ok-text":t.$t("common.confirm"),"cancel-text":t.$t("common.cancel")},on:{confirm:function(s){return t.deleteHistoryItem(a)}}},[s("a-button",{staticStyle:{color:"#ff4d4f"},attrs:{type:"link",size:"small",icon:"delete"}},[t._v(" "+t._s(t.$t("dashboard.analysis.modal.history.delete"))+" ")])],1)],1)])]),s("template",{slot:"description"},[s("div",{staticStyle:{color:"#666","font-size":"12px"}},[a.price?s("span",[t._v("$"+t._s(t.formatNumber(a.price)))]):t._e(),a.summary?s("span",{staticStyle:{"margin-left":"8px"}},[t._v(t._s(a.summary.substring(0,80))+t._s(a.summary.length>80?"...":""))]):t._e()]),a.created_at?s("div",{staticStyle:{color:"#999","font-size":"12px","margin-top":"4px"}},[t._v(" "+t._s(t.formatIsoTime(a.created_at))+" ")]):t._e()])],2)],1)}}])}),t.historyLoading||0!==t.historyList.length?t._e():s("a-empty",{attrs:{description:t.$t("dashboard.analysis.empty.noHistory")}})],1)],1)],1)},i=[function(){var t=this,s=t._self._c;return s("div",{staticClass:"indicator-box skeleton-box"},[s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text"})])},function(){var t=this,s=t._self._c;return s("div",{staticClass:"indicator-box skeleton-box"},[s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text"})])},function(){var t=this,s=t._self._c;return s("div",{staticClass:"indicator-box skeleton-box"},[s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text"})])}],r=a(68285),n=a(21092),l=a(76959),o=a(17654),c=a(57888),d=(a(74423),a(95353)),u=a(55585),m=a(64118),h=a(76471),y="/api/fast-analysis";function p(t){return(0,h.Ay)({url:"".concat(y,"/analyze"),method:"post",data:t,timeout:3e5})}function v(t){return(0,h.Ay)({url:"".concat(y,"/history/all"),method:"get",params:t})}function f(t){return(0,h.Ay)({url:"".concat(y,"/history/").concat(t),method:"delete"})}function g(t){return(0,h.Ay)({url:"".concat(y,"/feedback"),method:"post",data:t})}var b=a(62618),_=function(){var t,s,a,e,i,r,n,l,o,c,d,u,m,h,y,p,v,f,g,b,_,k,C,S,A,w=this,$=w._self._c;return $("div",{staticClass:"fast-analysis-report",class:{"theme-dark":w.isDarkTheme}},[w.loading?$("div",{staticClass:"loading-container"},[$("div",{staticClass:"loading-content-pro"},[$("div",{staticClass:"loading-header"},[$("a-icon",{staticClass:"loading-icon-pro",attrs:{type:"thunderbolt"}}),$("span",{staticClass:"loading-title"},[w._v(w._s(w.$t("fastAnalysis.analyzing")))])],1),$("div",{staticClass:"progress-wrapper"},[$("a-progress",{attrs:{percent:w.progressPercent,showInfo:!1,strokeColor:"#1890ff",strokeWidth:8}}),$("span",{staticClass:"progress-text"},[w._v(w._s(w.formatProgress(w.progressPercent))+"%")])],1),$("div",{staticClass:"current-step"},[$("a-icon",{attrs:{type:"loading",spin:""}}),$("span",[w._v(w._s(w.currentStepText))])],1),$("div",{staticClass:"steps-list"},[$("div",{staticClass:"step-item",class:{done:w.step>1,active:1===w.step}},[$("span",{staticClass:"step-dot"}),$("span",{staticClass:"step-text"},[w._v(w._s(w.$t("fastAnalysis.step1")||"获取实时数据"))]),w.step>1?$("a-icon",{staticClass:"step-check",attrs:{type:"check"}}):w._e()],1),$("div",{staticClass:"step-item",class:{done:w.step>2,active:2===w.step}},[$("span",{staticClass:"step-dot"}),$("span",{staticClass:"step-text"},[w._v(w._s(w.$t("fastAnalysis.step2")||"计算技术指标"))]),w.step>2?$("a-icon",{staticClass:"step-check",attrs:{type:"check"}}):w._e()],1),$("div",{staticClass:"step-item",class:{done:w.step>3,active:3===w.step}},[$("span",{staticClass:"step-dot"}),$("span",{staticClass:"step-text"},[w._v(w._s(w.$t("fastAnalysis.step3")||"AI深度分析"))]),w.step>3?$("a-icon",{staticClass:"step-check",attrs:{type:"check"}}):w._e()],1),$("div",{staticClass:"step-item",class:{done:w.step>4,active:4===w.step}},[$("span",{staticClass:"step-dot"}),$("span",{staticClass:"step-text"},[w._v(w._s(w.$t("fastAnalysis.step4")||"生成报告"))]),w.step>4?$("a-icon",{staticClass:"step-check",attrs:{type:"check"}}):w._e()],1)]),$("div",{staticClass:"loading-footer"},[$("span",{staticClass:"elapsed-time"},[w._v(w._s(w.elapsedTimeText))])])])]):w.error?$("div",{staticClass:"error-container"},[$("a-result",{attrs:{status:"warning"===w.errorTone?"warning":"error",title:w.errorTitle,"sub-title":w.error},scopedSlots:w._u([{key:"extra",fn:function(){return[$("a-button",{attrs:{type:"primary"},on:{click:function(t){return w.$emit("retry")}}},[w._v(" "+w._s(w.$t("fastAnalysis.retry"))+" ")])]},proxy:!0}])})],1):w.result?$("div",{staticClass:"result-container"},[$("div",{staticClass:"decision-card",class:w.decisionClass},[$("div",{staticClass:"decision-main"},[$("div",{staticClass:"decision-badge"},[$("a-icon",{attrs:{type:w.decisionIcon}}),$("span",{staticClass:"decision-text"},[w._v(w._s(w.result.decision))])],1),$("div",{staticClass:"confidence-ring"},[$("a-progress",{attrs:{type:"circle",percent:w.result.confidence,width:80,strokeColor:w.confidenceColor},scopedSlots:w._u([{key:"format",fn:function(t){return[$("span",{staticClass:"confidence-value"},[w._v(w._s(t)+"%")])]}}])}),$("div",{staticClass:"confidence-label"},[w._v(w._s(w.$t("fastAnalysis.confidence")))])],1)]),$("div",{staticClass:"decision-summary"},[w._v(" "+w._s(w.result.summary)+" ")]),w.consensusBlock?$("div",{staticClass:"consensus-strip"},[$("div",{staticClass:"consensus-strip-title"},[$("a-icon",{attrs:{type:"cluster"}}),w._v(" "+w._s(w.$t("fastAnalysis.consensusTitle"))+" ")],1),$("div",{staticClass:"consensus-strip-metrics"},[$("span",{staticClass:"cm-item"},[$("em",[w._v(w._s(w.$t("fastAnalysis.consensusDecision")))]),w._v(" "+w._s(w.consensusBlock.consensus_decision)+" ")]),$("span",{staticClass:"cm-item"},[$("em",[w._v(w._s(w.$t("fastAnalysis.consensusScore")))]),w._v(" "+w._s(w.formatConsensusNum(w.consensusBlock.consensus_score))+" ")]),null!=w.consensusBlock.agreement_ratio?$("span",{staticClass:"cm-item"},[$("em",[w._v(w._s(w.$t("fastAnalysis.consensusAgreement")))]),w._v(" "+w._s(w.formatAgreementPct(w.consensusBlock.agreement_ratio))+" ")]):w._e()])]):w._e()]),$("div",{staticClass:"price-info-row"},[$("div",{staticClass:"price-card current"},[$("div",{staticClass:"price-label"},[w._v(w._s(w.$t("fastAnalysis.currentPrice")))]),$("div",{staticClass:"price-value"},[w._v("$"+w._s(w.formatPrice(null===(t=w.result.market_data)||void 0===t?void 0:t.current_price)))]),$("div",{staticClass:"price-change",class:(null===(s=w.result.market_data)||void 0===s?void 0:s.change_24h)>=0?"positive":"negative"},[w._v(" "+w._s((null===(a=w.result.market_data)||void 0===a?void 0:a.change_24h)>=0?"+":"")+w._s(w.formatNumber(null===(e=w.result.market_data)||void 0===e?void 0:e.change_24h,2))+"% ")])]),$("div",{staticClass:"price-card entry"},[$("div",{staticClass:"price-label"},[w._v(w._s(w.$t("fastAnalysis.entryPrice")))]),$("div",{staticClass:"price-value"},[w._v("$"+w._s(w.formatPrice(null===(i=w.result.trading_plan)||void 0===i?void 0:i.entry_price)))])]),$("div",{staticClass:"price-card stop"},[$("div",{staticClass:"price-label"},[w._v(w._s(w.$t("fastAnalysis.stopLoss")))]),$("div",{staticClass:"price-value negative"},[w._v("$"+w._s(w.formatPrice(null===(r=w.result.trading_plan)||void 0===r?void 0:r.stop_loss)))]),$("div",{staticClass:"price-hint"},[$("a-tooltip",{attrs:{title:w.$t("fastAnalysis.stopLossHint")}},[$("a-icon",{attrs:{type:"info-circle"}}),w._v(" "+w._s(w.$t("fastAnalysis.atrBased"))+" ")],1)],1)]),$("div",{staticClass:"price-card target"},[$("div",{staticClass:"price-label"},[w._v(w._s(w.$t("fastAnalysis.takeProfit")))]),$("div",{staticClass:"price-value positive"},[w._v("$"+w._s(w.formatPrice(null===(n=w.result.trading_plan)||void 0===n?void 0:n.take_profit)))]),$("div",{staticClass:"price-hint"},[$("a-tooltip",{attrs:{title:w.$t("fastAnalysis.takeProfitHint")}},[$("a-icon",{attrs:{type:"info-circle"}}),w._v(" "+w._s(w.$t("fastAnalysis.atrBased"))+" ")],1)],1)])]),$("div",{staticClass:"scores-row"},[$("div",{staticClass:"score-item"},[$("div",{staticClass:"score-header"},[$("a-icon",{attrs:{type:"line-chart"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.technical")))])],1),$("a-progress",{attrs:{percent:(null===(l=w.result.scores)||void 0===l?void 0:l.technical)||50,strokeColor:w.getScoreColor(null===(o=w.result.scores)||void 0===o?void 0:o.technical),showInfo:!1}}),$("div",{staticClass:"score-value"},[w._v(w._s((null===(c=w.result.scores)||void 0===c?void 0:c.technical)||50))])],1),$("div",{staticClass:"score-item"},[$("div",{staticClass:"score-header"},[$("a-icon",{attrs:{type:"bank"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.fundamental")))])],1),$("a-progress",{attrs:{percent:(null===(d=w.result.scores)||void 0===d?void 0:d.fundamental)||50,strokeColor:w.getScoreColor(null===(u=w.result.scores)||void 0===u?void 0:u.fundamental),showInfo:!1}}),$("div",{staticClass:"score-value"},[w._v(w._s((null===(m=w.result.scores)||void 0===m?void 0:m.fundamental)||50))])],1),$("div",{staticClass:"score-item"},[$("div",{staticClass:"score-header"},[$("a-icon",{attrs:{type:"heart"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.sentiment")))])],1),$("a-progress",{attrs:{percent:(null===(h=w.result.scores)||void 0===h?void 0:h.sentiment)||50,strokeColor:w.getScoreColor(null===(y=w.result.scores)||void 0===y?void 0:y.sentiment),showInfo:!1}}),$("div",{staticClass:"score-value"},[w._v(w._s((null===(p=w.result.scores)||void 0===p?void 0:p.sentiment)||50))])],1),$("div",{staticClass:"score-item overall"},[$("div",{staticClass:"score-header"},[$("a-icon",{attrs:{type:"dashboard"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.overall")))])],1),$("a-progress",{attrs:{percent:(null===(v=w.result.scores)||void 0===v?void 0:v.overall)||50,strokeColor:w.getScoreColor(null===(f=w.result.scores)||void 0===f?void 0:f.overall),showInfo:!1}}),$("div",{staticClass:"score-value"},[w._v(w._s((null===(g=w.result.scores)||void 0===g?void 0:g.overall)||50))])],1)]),w.result.detailed_analysis?$("div",{staticClass:"detailed-analysis"},[w.result.detailed_analysis.technical?$("div",{staticClass:"analysis-card technical"},[$("div",{staticClass:"analysis-card-header"},[$("a-icon",{attrs:{type:"line-chart"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.technicalAnalysis")))]),$("a-tag",{attrs:{color:w.getScoreTagColor(null===(b=w.result.scores)||void 0===b?void 0:b.technical)}},[w._v(" "+w._s((null===(_=w.result.scores)||void 0===_?void 0:_.technical)||50)+"分 ")])],1),$("div",{staticClass:"analysis-card-content"},[w._v(" "+w._s(w.result.detailed_analysis.technical)+" ")])]):w._e(),w.result.detailed_analysis.fundamental?$("div",{staticClass:"analysis-card fundamental"},[$("div",{staticClass:"analysis-card-header"},[$("a-icon",{attrs:{type:"bank"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.fundamentalAnalysis")))]),$("a-tag",{attrs:{color:w.getScoreTagColor(null===(k=w.result.scores)||void 0===k?void 0:k.fundamental)}},[w._v(" "+w._s((null===(C=w.result.scores)||void 0===C?void 0:C.fundamental)||50)+"分 ")])],1),$("div",{staticClass:"analysis-card-content"},[w._v(" "+w._s(w.result.detailed_analysis.fundamental)+" ")])]):w._e(),w.result.detailed_analysis.sentiment?$("div",{staticClass:"analysis-card sentiment"},[$("div",{staticClass:"analysis-card-header"},[$("a-icon",{attrs:{type:"heart"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.sentimentAnalysis")))]),$("a-tag",{attrs:{color:w.getScoreTagColor(null===(S=w.result.scores)||void 0===S?void 0:S.sentiment)}},[w._v(" "+w._s((null===(A=w.result.scores)||void 0===A?void 0:A.sentiment)||50)+"分 ")])],1),$("div",{staticClass:"analysis-card-content"},[w._v(" "+w._s(w.result.detailed_analysis.sentiment)+" ")])]):w._e()]):w._e(),$("div",{staticClass:"analysis-details"},[$("div",{staticClass:"detail-section reasons"},[$("div",{staticClass:"section-title"},[$("a-icon",{attrs:{type:"bulb",theme:"twoTone",twoToneColor:"#52c41a"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.keyReasons")))])],1),$("ul",{staticClass:"detail-list"},w._l(w.result.reasons,function(t,s){return $("li",{key:"r-"+s},[w._v(" "+w._s(t)+" ")])}),0)]),$("div",{staticClass:"detail-section risks"},[$("div",{staticClass:"section-title"},[$("a-icon",{attrs:{type:"warning",theme:"twoTone",twoToneColor:"#faad14"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.risks")))])],1),$("ul",{staticClass:"detail-list"},w._l(w.result.risks,function(t,s){return $("li",{key:"k-"+s},[w._v(" "+w._s(t)+" ")])}),0)])]),w.result.indicators&&Object.keys(w.result.indicators).length>0?$("div",{staticClass:"indicators-section"},[$("div",{staticClass:"section-title"},[$("a-icon",{attrs:{type:"stock"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.indicators")))])],1),$("div",{staticClass:"indicators-grid"},[w.result.indicators.rsi?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v("RSI (14)")]),$("div",{staticClass:"indicator-value",class:w.getRsiClass(w.result.indicators.rsi.value)},[w._v(" "+w._s(w.formatNumber(w.result.indicators.rsi.value,1))+" ")]),$("div",{staticClass:"indicator-signal"},[w._v(w._s(w.translateSignal(w.result.indicators.rsi.signal)))])]):w._e(),w.result.indicators.macd?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v("MACD")]),$("div",{staticClass:"indicator-value",class:"bullish"===w.result.indicators.macd.signal?"bullish":"bearish"===w.result.indicators.macd.signal?"bearish":""},[w._v(" "+w._s(w.translateTrend(w.result.indicators.macd.trend))+" ")]),$("div",{staticClass:"indicator-signal"},[w._v(w._s(w.translateSignal(w.result.indicators.macd.signal)))])]):w._e(),w.result.indicators.moving_averages?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v(w._s(w.$t("fastAnalysis.maTrend")))]),$("div",{staticClass:"indicator-value",class:w.getMaTrendClass(w.result.indicators.moving_averages.trend)},[w._v(" "+w._s(w.translateTrend(w.result.indicators.moving_averages.trend))+" ")])]):w._e(),w.result.indicators.levels?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v(w._s(w.$t("fastAnalysis.support")))]),$("div",{staticClass:"indicator-value"},[w._v("$"+w._s(w.formatPrice(w.result.indicators.levels.support)))])]):w._e(),w.result.indicators.levels?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v(w._s(w.$t("fastAnalysis.resistance")))]),$("div",{staticClass:"indicator-value"},[w._v("$"+w._s(w.formatPrice(w.result.indicators.levels.resistance)))])]):w._e(),w.result.indicators.volatility?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v(w._s(w.$t("fastAnalysis.volatility")))]),$("div",{staticClass:"indicator-value",class:w.getVolatilityClass(w.result.indicators.volatility.level)},[w._v(" "+w._s(w.translateVolatility(w.result.indicators.volatility.level))+" ("+w._s(w.result.indicators.volatility.pct)+"%) ")])]):w._e()])]):w._e(),$("div",{staticClass:"feedback-section"},[$("div",{staticClass:"feedback-question"},[w._v(w._s(w.$t("fastAnalysis.wasHelpful")))]),$("div",{staticClass:"feedback-buttons"},[$("a-button",{attrs:{type:"helpful"===w.userFeedback?"primary":"default",size:"small",loading:"helpful"===w.feedbackLoading},on:{click:function(t){return w.submitFeedback("helpful")}}},[$("a-icon",{attrs:{type:"like"}}),w._v(" "+w._s(w.$t("fastAnalysis.helpful"))+" ")],1),$("a-button",{attrs:{type:"not_helpful"===w.userFeedback?"danger":"default",size:"small",loading:"not_helpful"===w.feedbackLoading},on:{click:function(t){return w.submitFeedback("not_helpful")}}},[$("a-icon",{attrs:{type:"dislike"}}),w._v(" "+w._s(w.$t("fastAnalysis.notHelpful"))+" ")],1)],1),$("div",{staticClass:"analysis-meta"},[$("span",[w._v(w._s(w.$t("fastAnalysis.analysisTime"))+": "+w._s(w.result.analysis_time_ms)+"ms")]),w.result.memory_id?$("span",[w._v("ID: #"+w._s(w.result.memory_id))]):w._e()])])]):$("div",{staticClass:"empty-container"},[$("div",{staticClass:"empty-content"},[$("a-icon",{staticClass:"empty-icon",attrs:{type:"radar-chart"}}),$("div",{staticClass:"empty-title"},[w._v(w._s(w.$t("fastAnalysis.selectSymbol")))]),$("div",{staticClass:"empty-hint"},[w._v(w._s(w.$t("fastAnalysis.selectHint")))])],1)])])},k=[],C={name:"FastAnalysisReport",props:{result:{type:Object,default:null},loading:{type:Boolean,default:!1},error:{type:String,default:null},errorTone:{type:String,default:"error",validator:function(t){return["error","warning","info"].includes(t)}}},data:function(){return{userFeedback:null,feedbackLoading:null,progress:0,elapsedSeconds:0,mainTimer:null}},computed:(0,c.A)((0,c.A)({},(0,d.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},progressPercent:function(){return Math.round(10*this.progress)/10},step:function(){return this.progress<25?1:this.progress<50?2:this.progress<75?3:4},currentStepText:function(){var t={1:this.$t("fastAnalysis.step1")||"获取实时数据",2:this.$t("fastAnalysis.step2")||"计算技术指标",3:this.$t("fastAnalysis.step3")||"AI深度分析",4:this.$t("fastAnalysis.step4")||"生成报告"};return t[this.step]||this.$t("fastAnalysis.preparing")||"准备中..."},elapsedTimeText:function(){if(this.elapsedSeconds<60)return"".concat(this.elapsedSeconds,"s");var t=Math.floor(this.elapsedSeconds/60),s=this.elapsedSeconds%60;return"".concat(t,"m ").concat(s,"s")},decisionClass:function(){if(!this.result)return"";var t=this.result.decision;return"BUY"===t?"decision-buy":"SELL"===t?"decision-sell":"decision-hold"},decisionIcon:function(){if(!this.result)return"question";var t=this.result.decision;return"BUY"===t?"arrow-up":"SELL"===t?"arrow-down":"pause"},confidenceColor:function(){var t,s=(null===(t=this.result)||void 0===t?void 0:t.confidence)||50;return s>=70?"#52c41a":s>=50?"#1890ff":"#faad14"},consensusBlock:function(){var t,s=null===(t=this.result)||void 0===t?void 0:t.consensus;return s&&"object"===(0,r.A)(s)?null==s.consensus_decision&&null==s.consensus_score?null:s:null},insufficientCreditsError:function(){if(!this.error)return!1;var t=String(this.error);return t.includes("积分不足")||t.toLowerCase().includes("insufficient credits")},errorTitle:function(){return"warning"===this.errorTone?this.$t("fastAnalysis.analysisInProgressTitle"):this.insufficientCreditsError?this.$t("fastAnalysis.insufficientCredits"):this.$t("fastAnalysis.error")}}),watch:{result:function(){this.userFeedback=null},loading:{handler:function(t){t?this.startProgressTimer():this.stopProgressTimer()},immediate:!0}},mounted:function(){this.loading&&this.startProgressTimer()},beforeDestroy:function(){this.stopProgressTimer()},methods:{formatPrice:function(t){if(void 0===t||null===t)return"--";var s=parseFloat(t);return isNaN(s)?"--":s<1?s.toFixed(6):s<100?s.toFixed(4):s<1e4?s.toFixed(2):s.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})},formatNumber:function(t){var s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;if(void 0===t||null===t)return"--";var a=parseFloat(t);return isNaN(a)?"--":a.toFixed(s)},formatConsensusNum:function(t){if(void 0===t||null===t||""===t)return"--";var s=Number(t);return Number.isNaN(s)?"--":s.toFixed(1)},formatAgreementPct:function(t){var s=Number(t);return Number.isNaN(s)?"--":"".concat(Math.round(100*s),"%")},formatProgress:function(t){var s=parseFloat(t)||0;return s%1===0?s.toFixed(0):s.toFixed(1)},getScoreColor:function(t){return t>=70?"#52c41a":t>=50?"#1890ff":t>=30?"#faad14":"#ff4d4f"},getScoreTagColor:function(t){return t>=70?"green":t>=50?"blue":t>=30?"orange":"red"},getRsiClass:function(t){return t<30?"oversold":t>70?"overbought":""},getMaTrendClass:function(t){return t?t.includes("uptrend")||t.includes("strong_uptrend")?"bullish":t.includes("downtrend")||t.includes("strong_downtrend")?"bearish":"":""},getVolatilityClass:function(t){return"high"===t?"high-volatility":"low"===t?"low-volatility":""},translateSignal:function(t){if(!t)return"--";var s="fastAnalysis.signal.".concat(t),a=this.$t(s);return a===s?t:a},translateTrend:function(t){if(!t)return"--";var s="fastAnalysis.trend.".concat(t),a=this.$t(s);return a===s?t:a},translateVolatility:function(t){if(!t)return"--";var s="fastAnalysis.volatilityLevel.".concat(t),a=this.$t(s);return a===s?t:a},submitFeedback:function(t){var s=this;return(0,o.A)((0,l.A)().m(function a(){var e;return(0,l.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(null!==(e=s.result)&&void 0!==e&&e.memory_id){a.n=1;break}return s.$message.warning(s.$t("fastAnalysis.feedbackUnavailable")||"反馈功能暂不可用,请刷新后重试"),a.a(2);case 1:return s.feedbackLoading=t,a.p=2,a.n=3,g({memory_id:s.result.memory_id,feedback:t});case 3:s.userFeedback=t,s.$message.success(s.$t("fastAnalysis.feedbackThanks")),a.n=5;break;case 4:a.p=4,a.v,s.$message.error(s.$t("fastAnalysis.feedbackFailed"));case 5:return a.p=5,s.feedbackLoading=null,a.f(5);case 6:return a.a(2)}},a,null,[[2,4,5,6]])}))()},startProgressTimer:function(){var t=this;this.stopProgressTimer(),this.progress=0,this.elapsedSeconds=0;var s=Date.now();this.mainTimer=window.setInterval(function(){t.elapsedSeconds=Math.floor((Date.now()-s)/1e3),t.progress<75?t.progress=Math.min(t.progress+1,75):t.progress<90?t.progress=Math.min(t.progress+.5,90):t.progress<95&&(t.progress=Math.min(t.progress+.2,95))},100)},stopProgressTimer:function(){this.mainTimer&&(window.clearInterval(this.mainTimer),this.mainTimer=null),this.progress=0,this.elapsedSeconds=0}}},S=C,A=a(845),w=(0,A.A)(S,_,k,!1,null,"693144f6",null),$=w.exports,T={name:"Analysis",props:{embedded:{type:Boolean,default:!1},presetSymbol:{type:String,default:""},autoAnalyzeSignal:{type:Number,default:0}},components:{FastAnalysisReport:$},data:function(){return{loadingMarket:!1,heatmapType:"crypto",marketData:{fearGreed:null,vix:null,dxy:null,indices:[],heatmap:{crypto:[],commodities:[],sectors:[],forex:[]},calendar:[]},loadingSentiment:!1,loadingIndices:!1,loadingHeatmap:!1,loadingCalendar:!1,watchlistPriceTimer:null,watchlistPrices:{},localUserInfo:{},loadingUserInfo:!1,userId:1,watchlist:[],loadingWatchlist:!1,showAddStockModal:!1,addingStock:!1,selectedSymbol:void 0,analyzing:!1,analysisResult:null,analysisError:null,analysisErrorTone:"error",showHistoryModal:!1,historyList:[],historyLoading:!1,historyPage:1,historyPageSize:20,historyTotal:0,marketTypes:[],selectedMarketTab:"",symbolSearchKeyword:"",symbolSearchResults:[],searchingSymbols:!1,hotSymbols:[],loadingHotSymbols:!1,selectedSymbolForAdd:null,searchTimer:null,hasSearched:!1}},computed:(0,c.A)((0,c.A)((0,c.A)({},(0,d.L8)(["userInfo"])),(0,d.aH)({navTheme:function(t){return t.app.theme},primaryColor:function(t){return t.app.color||"#1890ff"}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},isZhLocale:function(){return"zh-CN"===this.$i18n.locale},currentHeatmap:function(){return this.marketData.heatmap[this.heatmapType]||[]},storeUserInfo:function(){return this.userInfo||{}},mergedUserInfo:function(){return this.localUserInfo&&this.localUserInfo.email?this.localUserInfo:this.storeUserInfo}}),created:function(){this.loadUserInfo(),this.loadMarketTypes(),this.loadWatchlist(),this.loadMarketData()},mounted:function(){this.startWatchlistPriceRefresh()},beforeDestroy:function(){this.watchlistPriceTimer&&clearInterval(this.watchlistPriceTimer)},methods:{filterSymbolOption:function(t,s){var a,e=(null===(a=s.componentOptions)||void 0===a||null===(a=a.propsData)||void 0===a?void 0:a.value)||"";return"__add_stock_option__"===e||e.toLowerCase().includes(t.toLowerCase())},handleSymbolChange:function(t){var s=this;if("__add_stock_option__"===t)return this.showAddStockModal=!0,void this.$nextTick(function(){s.selectedSymbol=void 0});this.selectedSymbol=t,this.analysisResult=null,this.analysisError=null,this.analysisErrorTone="error",this.$emit("symbol-change",t)},selectWatchlistItem:function(t){this.selectedSymbol="".concat(t.market,":").concat(t.symbol),this.analysisResult=null,this.analysisError=null,this.analysisErrorTone="error",this.$emit("symbol-change",this.selectedSymbol)},loadMarketData:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){return(0,l.A)().w(function(s){while(1)switch(s.n){case 0:t.loadingMarket=!0,t.loadSentimentData(),t.loadIndicesData(),t.loadHeatmapData(),t.loadCalendarData();case 1:return s.a(2)}},s)}))()},loadSentimentData:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a,e,i,r;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.loadingSentiment=!0,s.p=1,s.n=2,(0,b.EF)();case 2:a=s.v,1===(null===a||void 0===a?void 0:a.code)&&null!==a&&void 0!==a&&a.data&&(t.marketData.fearGreed=(null===(e=a.data.fear_greed)||void 0===e?void 0:e.value)||null,t.marketData.vix=(null===(i=a.data.vix)||void 0===i?void 0:i.value)||null,t.marketData.dxy=(null===(r=a.data.dxy)||void 0===r?void 0:r.value)||null),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.p=4,t.loadingSentiment=!1,t.checkAllLoaded(),s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},loadIndicesData:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.loadingIndices=!0,s.p=1,s.n=2,(0,b.yI)();case 2:a=s.v,1===(null===a||void 0===a?void 0:a.code)&&null!==a&&void 0!==a&&a.data&&(t.marketData.indices=a.data.indices||[]),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.p=4,t.loadingIndices=!1,t.checkAllLoaded(),s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},loadHeatmapData:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.loadingHeatmap=!0,s.p=1,s.n=2,(0,b.f$)();case 2:a=s.v,1===(null===a||void 0===a?void 0:a.code)&&null!==a&&void 0!==a&&a.data&&(t.marketData.heatmap={crypto:a.data.crypto||[],commodities:a.data.commodities||[],sectors:a.data.sectors||[],forex:a.data.forex||[]}),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.p=4,t.loadingHeatmap=!1,t.checkAllLoaded(),s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},loadCalendarData:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.loadingCalendar=!0,s.p=1,s.n=2,(0,b.kF)();case 2:a=s.v,1===(null===a||void 0===a?void 0:a.code)&&(t.marketData.calendar=a.data||[]),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.p=4,t.loadingCalendar=!1,t.checkAllLoaded(),s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},checkAllLoaded:function(){this.loadingSentiment||this.loadingIndices||this.loadingHeatmap||this.loadingCalendar||(this.loadingMarket=!1)},getFearGreedClass:function(t){return t?t<=25?"extreme-fear":t<=45?"fear":t<=55?"neutral":t<=75?"greed":"extreme-greed":""},getVixLevel:function(t){return t?t<15?"low":t<25?"medium":"high":""},formatNum:function(t){var s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return void 0===t||null===t||isNaN(t)?"--":Number(t).toFixed(s)},getHeatmapStyle:function(t){var s=parseFloat(t)||0,a=Math.min(Math.abs(s)/5,1);return s>=0?{background:"rgba(34, 197, 94, ".concat(.15+.6*a,")"),color:s>2?"#fff":"#166534"}:{background:"rgba(239, 68, 68, ".concat(.15+.6*a,")"),color:s<-2?"#fff":"#991b1b"}},getCountryFlag:function(t){var s={US:"🇺🇸",CN:"🇨🇳",EU:"🇪🇺",JP:"🇯🇵",UK:"🇬🇧",DE:"🇩🇪",AU:"🇦🇺",CA:"🇨🇦"};return s[t]||"🌍"},formatCalendarDate:function(t){if(!t)return"";try{var s=new Date(t),a=new Date,e=new Date(a);if(e.setDate(e.getDate()+1),s.toDateString()===a.toDateString())return this.isZhLocale?"今天":"Today";if(s.toDateString()===e.toDateString())return this.isZhLocale?"明天":"Tmrw";var i=s.getMonth()+1,r=s.getDate();return"".concat(i,"/").concat(r)}catch(n){return t}},formatPrice:function(t){return t?t>=1e4?(t/1e3).toFixed(1)+"K":t>=1e3?t.toFixed(0):t.toFixed(2):"--"},formatHeatmapPrice:function(t){return t?t>=1e4?"$"+(t/1e3).toFixed(1)+"K":t>=1e3?"$"+t.toFixed(0):t>=1?"$"+t.toFixed(2):"$"+t.toFixed(4):""},getHeatmapName:function(t){return"sectors"===this.heatmapType||"commodities"===this.heatmapType||"forex"===this.heatmapType?this.isZhLocale?t.name_cn||t.name:t.name_en||t.name:t.name},getImpactClass:function(t){return t.actual_impact||t.expected_impact||"neutral"},getMarketColor:function(t){var s={USStock:"green",Crypto:"purple",Forex:"gold",Futures:"cyan"};return s[t]||"default"},getCurrencySymbol:function(t){return"$"},formatCreditNum:function(t){if(void 0===t||null===t||""===t)return"--";var s=Number(t);return Number.isNaN(s)?String(t):Number.isInteger(s)?String(s):s.toFixed(2)},refreshUserInfoFromServer:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return s.p=0,s.n=1,(0,u.ug)();case 1:a=s.v,a&&1===a.code&&a.data&&(t.localUserInfo=a.data,t.userId=a.data.id,t.$store.commit("SET_INFO",a.data)),s.n=3;break;case 2:s.p=2,s.v;case 3:return s.a(2)}},s,null,[[0,2]])}))()},startFastAnalysis:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a,e,i,r,o,d,u,m,h,y,v,f,g,b,_;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(!t.analyzing){s.n=1;break}return s.a(2);case 1:if(t.selectedSymbol){s.n=2;break}return t.$message.warning(t.$t("dashboard.analysis.message.selectSymbol")),s.a(2);case 2:return t.analyzing=!0,t.analysisError=null,t.analysisErrorTone="error",a=t.selectedSymbol.split(":"),e=(0,n.A)(a,2),i=e[0],r=e[1],o=t.$store.getters.lang||"zh-CN",s.p=3,s.n=4,p({market:i,symbol:r,language:o,timeframe:"1D"});case 4:if(d=s.v,!d||1!==d.code||!d.data){s.n=6;break}return u=(0,c.A)({},d.data),delete u.credits_charged,delete u.remaining_credits,t.analysisResult=u,m=d.data.remaining_credits,void 0!==m&&null!==m?t.$message.success(t.$t("fastAnalysis.analysisCompleteWithCredits",{remaining:t.formatCreditNum(m)})):t.$message.success(t.$t("dashboard.analysis.message.analysisComplete")),s.n=5,t.refreshUserInfoFromServer();case 5:s.n=7;break;case 6:throw new Error((null===d||void 0===d?void 0:d.msg)||"分析失败");case 7:s.n=9;break;case 8:s.p=8,_=s.v,v=null===_||void 0===_||null===(h=_.response)||void 0===h?void 0:h.status,f=(null===_||void 0===_||null===(y=_.response)||void 0===y?void 0:y.data)||{},g=f.msg,b=f.data,429===v&&b&&b.in_progress?(t.analysisErrorTone="warning",t.analysisError=t.$t("fastAnalysis.analysisInProgress"),t.$message.warning(t.analysisError)):400===v&&"Insufficient credits"===g?(t.analysisError=t.$t("fastAnalysis.insufficientCreditsDetail",{required:t.formatCreditNum(null===b||void 0===b?void 0:b.required),current:t.formatCreditNum(null===b||void 0===b?void 0:b.current),shortage:t.formatCreditNum(null===b||void 0===b?void 0:b.shortage)}),t.$message.error(t.analysisError)):(t.analysisError=g||(null===_||void 0===_?void 0:_.message)||t.$t("dashboard.analysis.message.analysisFailed"),t.$message.error(t.analysisError));case 9:return s.p=9,t.analyzing=!1,s.f(9);case 10:return s.a(2)}},s,null,[[3,8,9,10]])}))()},loadHistoryList:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.historyLoading=!0,s.p=1,s.n=2,v({page:t.historyPage,pagesize:t.historyPageSize});case 2:a=s.v,a&&1===a.code&&a.data&&(t.historyList=a.data.list||[],t.historyTotal=a.data.total||0),s.n=4;break;case 3:s.p=3,s.v,t.$message.error(t.$t("dashboard.analysis.message.loadHistoryFailed")||"加载历史记录失败");case 4:return s.p=4,t.historyLoading=!1,s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},viewHistoryResult:function(t){var s=this;return(0,o.A)((0,l.A)().m(function a(){return(0,l.A)().w(function(a){while(1)switch(a.n){case 0:if(!t.full_result){a.n=1;break}return s.analysisResult=t.full_result,s.selectedSymbol="".concat(t.market,":").concat(t.symbol),s.showHistoryModal=!1,a.a(2);case 1:s.analysisResult={decision:t.decision,confidence:t.confidence,summary:t.summary,market_data:{current_price:t.price,change_24h:0},trading_plan:{entry_price:t.price,stop_loss:.95*t.price,take_profit:1.05*t.price},scores:t.scores||{},reasons:t.reasons||[],risks:[],indicators:t.indicators||{},memory_id:t.id,analysis_time_ms:0},s.selectedSymbol="".concat(t.market,":").concat(t.symbol),s.showHistoryModal=!1;case 2:return a.a(2)}},a)}))()},deleteHistoryItem:function(t){var s=this;return(0,o.A)((0,l.A)().m(function a(){var e;return(0,l.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,f(t.id);case 1:e=a.v,e&&1===e.code?(s.$message.success(s.$t("dashboard.analysis.message.deleteSuccess")),s.loadHistoryList()):s.$message.error((null===e||void 0===e?void 0:e.msg)||s.$t("dashboard.analysis.message.deleteFailed")),a.n=3;break;case 2:a.p=2,a.v,s.$message.error(s.$t("dashboard.analysis.message.deleteFailed"));case 3:return a.a(2)}},a,null,[[0,2]])}))()},formatTime:function(t){if(!t)return"-";var s=new Date(1e3*t);return s.toLocaleString("zh-CN")},formatIsoTime:function(t){if(!t)return"-";var s=new Date(t);return s.toLocaleString("zh-CN")},getStatusColor:function(t){var s={pending:"orange",processing:"blue",completed:"green",failed:"red"};return s[t]||"default"},getStatusText:function(t){var s={pending:"dashboard.analysis.status.pending",processing:"dashboard.analysis.status.processing",completed:"dashboard.analysis.status.completed",failed:"dashboard.analysis.status.failed"},a=s[t];return a?this.$t(a):t},loadUserInfo:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(t.loadingUserInfo=!0,s.p=1,!t.storeUserInfo||!t.storeUserInfo.email){s.n=2;break}return t.localUserInfo=t.storeUserInfo,t.userId=t.storeUserInfo.id,t.loadingUserInfo=!1,t.loadWatchlist(),s.a(2);case 2:return s.n=3,(0,u.ug)();case 3:a=s.v,a&&1===a.code&&a.data&&(t.localUserInfo=a.data,t.userId=a.data.id,t.$store.commit("SET_INFO",a.data),t.loadWatchlist()),s.n=5;break;case 4:s.p=4,s.v;case 5:return s.p=5,t.loadingUserInfo=!1,s.f(5);case 6:return s.a(2)}},s,null,[[1,4,5,6]])}))()},loadWatchlist:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(t.userId){s.n=1;break}return s.a(2);case 1:return t.loadingWatchlist=!0,s.p=2,s.n=3,(0,m.Qo)({userid:t.userId});case 3:if(a=s.v,!a||1!==a.code||!a.data){s.n=4;break}return t.watchlist=a.data.map(function(t){return(0,c.A)((0,c.A)({},t),{},{price:0,change:0,changePercent:0})}),s.n=4,t.loadWatchlistPrices();case 4:s.n=6;break;case 5:s.p=5,s.v;case 6:return s.p=6,t.loadingWatchlist=!1,s.f(6);case 7:return s.a(2)}},s,null,[[2,5,6,7]])}))()},loadWatchlistPrices:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a,e,i,r;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(t.watchlist&&0!==t.watchlist.length){s.n=1;break}return s.a(2);case 1:return s.p=1,a=t.watchlist.map(function(t){return{market:t.market,symbol:t.symbol}}),s.n=2,(0,m.ms)({watchlist:a});case 2:e=s.v,e&&1===e.code&&e.data&&(i={},r={},e.data.forEach(function(t){i["".concat(t.market,"-").concat(t.symbol)]=t,r["".concat(t.market,":").concat(t.symbol)]={price:t.price||0,change:t.changePercent||0}}),t.watchlistPrices=r,t.watchlist=t.watchlist.map(function(t){var s="".concat(t.market,"-").concat(t.symbol),a=i[s];return a?(0,c.A)((0,c.A)({},t),{},{price:a.price||0,change:a.change||0,changePercent:a.changePercent||0}):t})),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.a(2)}},s,null,[[1,3]])}))()},startWatchlistPriceRefresh:function(){var t=this;this.watchlistPriceTimer=setInterval(function(){t.watchlist&&t.watchlist.length>0&&t.loadWatchlistPrices()},3e4),this.watchlist&&this.watchlist.length>0&&this.loadWatchlistPrices()},handleAddStock:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a,e,i,r,n,o,c;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(a="",e="",i="",!t.selectedSymbolForAdd){s.n=1;break}a=t.selectedSymbolForAdd.market,e=t.selectedSymbolForAdd.symbol.toUpperCase(),i=t.selectedSymbolForAdd.name||"",s.n=4;break;case 1:if(!t.symbolSearchKeyword||!t.symbolSearchKeyword.trim()){s.n=3;break}if(t.selectedMarketTab){s.n=2;break}return t.$message.warning(t.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),s.a(2);case 2:a=t.selectedMarketTab,e=t.symbolSearchKeyword.trim().toUpperCase(),i="",s.n=4;break;case 3:return t.$message.warning(t.$t("dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol")),s.a(2);case 4:return t.addingStock=!0,s.p=5,s.n=6,(0,m.dp)({userid:t.userId,market:a,symbol:e,name:i});case 6:if(r=s.v,!r||1!==r.code){s.n=8;break}return t.$message.success(t.$t("dashboard.analysis.message.addStockSuccess")),t.handleCloseAddStockModal(),s.n=7,t.loadWatchlist();case 7:s.n=9;break;case 8:t.$message.error((null===r||void 0===r?void 0:r.msg)||t.$t("dashboard.analysis.message.addStockFailed"));case 9:s.n=11;break;case 10:s.p=10,c=s.v,o=(null===c||void 0===c||null===(n=c.response)||void 0===n||null===(n=n.data)||void 0===n?void 0:n.msg)||(null===c||void 0===c?void 0:c.message)||t.$t("dashboard.analysis.message.addStockFailed"),t.$message.error(o);case 11:return s.p=11,t.addingStock=!1,s.f(11);case 12:return s.a(2)}},s,null,[[5,10,11,12]])}))()},handleCloseAddStockModal:function(){this.showAddStockModal=!1,this.selectedSymbolForAdd=null,this.symbolSearchKeyword="",this.symbolSearchResults=[],this.hasSearched=!1,this.selectedMarketTab=this.marketTypes.length>0?this.marketTypes[0].value:""},handleMarketTabChange:function(t){this.selectedMarketTab=t,this.symbolSearchKeyword="",this.symbolSearchResults=[],this.selectedSymbolForAdd=null,this.hasSearched=!1,this.loadHotSymbols(t)},handleSymbolSearchInput:function(t){var s=this,a=t.target.value;if(this.symbolSearchKeyword=a,this.searchTimer&&clearTimeout(this.searchTimer),!a||""===a.trim())return this.symbolSearchResults=[],this.hasSearched=!1,void(this.selectedSymbolForAdd=null);this.searchTimer=setTimeout(function(){s.searchSymbolsInModal(a)},500)},handleSearchOrInput:function(t){t&&t.trim()&&(this.selectedMarketTab?this.symbolSearchResults.length>0||(this.hasSearched&&0===this.symbolSearchResults.length?this.handleDirectAdd():this.searchSymbolsInModal(t)):this.$message.warning(this.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")))},searchSymbolsInModal:function(t){var s=this;return(0,o.A)((0,l.A)().m(function a(){var e;return(0,l.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(t&&""!==t.trim()){a.n=1;break}return s.symbolSearchResults=[],s.hasSearched=!1,a.a(2);case 1:if(s.selectedMarketTab){a.n=2;break}return s.$message.warning(s.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),a.a(2);case 2:return s.searchingSymbols=!0,s.hasSearched=!0,a.p=3,a.n=4,(0,m._3)({market:s.selectedMarketTab,keyword:t.trim(),limit:20});case 4:e=a.v,e&&1===e.code&&e.data&&e.data.length>0?s.symbolSearchResults=e.data:(s.symbolSearchResults=[],s.selectedSymbolForAdd={market:s.selectedMarketTab,symbol:t.trim().toUpperCase(),name:""}),a.n=6;break;case 5:a.p=5,a.v,s.symbolSearchResults=[],s.selectedSymbolForAdd={market:s.selectedMarketTab,symbol:t.trim().toUpperCase(),name:""};case 6:return a.p=6,s.searchingSymbols=!1,a.f(6);case 7:return a.a(2)}},a,null,[[3,5,6,7]])}))()},handleDirectAdd:function(){this.symbolSearchKeyword&&this.symbolSearchKeyword.trim()?this.selectedMarketTab?this.selectedSymbolForAdd={market:this.selectedMarketTab,symbol:this.symbolSearchKeyword.trim().toUpperCase(),name:""}:this.$message.warning(this.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")):this.$message.warning(this.$t("dashboard.analysis.modal.addStock.pleaseEnterSymbol"))},selectSymbol:function(t){this.selectedSymbolForAdd={market:t.market,symbol:t.symbol,name:t.name||t.symbol}},loadHotSymbols:function(t){var s=this;return(0,o.A)((0,l.A)().m(function a(){var e;return(0,l.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(t||(t=s.selectedMarketTab||(s.marketTypes.length>0?s.marketTypes[0].value:"")),t){a.n=1;break}return a.a(2);case 1:return s.loadingHotSymbols=!0,a.p=2,a.n=3,(0,m.z6)({market:t,limit:10});case 3:e=a.v,e&&1===e.code&&e.data?s.hotSymbols=e.data:s.hotSymbols=[],a.n=5;break;case 4:a.p=4,a.v,s.hotSymbols=[];case 5:return a.p=5,s.loadingHotSymbols=!1,a.f(5);case 6:return a.a(2)}},a,null,[[2,4,5,6]])}))()},removeFromWatchlist:function(t){var s=arguments,a=this;return(0,o.A)((0,l.A)().m(function e(){var i,n,o;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(a.userId){e.n=1;break}return e.a(2);case 1:return i="object"===(0,r.A)(t)?t.symbol:t,n="object"===(0,r.A)(t)?t.market:s[1],e.p=2,e.n=3,(0,m.mk)({userid:a.userId,symbol:i,market:n});case 3:if(o=e.v,!o||1!==o.code){e.n=5;break}return a.$message.success(a.$t("dashboard.analysis.message.removeStockSuccess")),e.n=4,a.loadWatchlist();case 4:e.n=6;break;case 5:a.$message.error((null===o||void 0===o?void 0:o.msg)||a.$t("dashboard.analysis.message.removeStockFailed"));case 6:e.n=8;break;case 7:e.p=7,e.v,a.$message.error(a.$t("dashboard.analysis.message.removeStockFailed"));case 8:return e.a(2)}},e,null,[[2,7]])}))()},getMarketName:function(t){return this.$t("dashboard.analysis.market.".concat(t))||t},formatNumber:function(t){return"string"===typeof t?t:t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})},loadMarketTypes:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return s.p=0,s.n=1,(0,m.iO)();case 1:a=s.v,a&&1===a.code&&a.data&&Array.isArray(a.data)?t.marketTypes=a.data.map(function(t){return{value:t.value,i18nKey:t.i18nKey||"dashboard.analysis.market.".concat(t.value)}}):t.marketTypes=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}],s.n=3;break;case 2:s.p=2,s.v,t.marketTypes=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}];case 3:t.marketTypes.length>0&&!t.selectedMarketTab&&(t.selectedMarketTab=t.marketTypes[0].value);case 4:return s.a(2)}},s,null,[[0,2]])}))()}},watch:{presetSymbol:function(t){t&&t!==this.selectedSymbol&&(this.selectedSymbol=t,this.analysisResult=null,this.analysisError=null,this.analysisErrorTone="error")},autoAnalyzeSignal:function(t){var s=this;t&&(this.presetSymbol&&this.presetSymbol!==this.selectedSymbol&&(this.selectedSymbol=this.presetSymbol),this.$nextTick(function(){s.startFastAnalysis()}))},showAddStockModal:function(t){t?(this.marketTypes.length>0&&!this.selectedMarketTab&&(this.selectedMarketTab=this.marketTypes[0].value),this.selectedMarketTab&&this.loadHotSymbols(this.selectedMarketTab)):(this.selectedSymbolForAdd=null,this.symbolSearchKeyword="",this.symbolSearchResults=[],this.hasSearched=!1,this.searchTimer&&(clearTimeout(this.searchTimer),this.searchTimer=null))}}},x=T,F=(0,A.A)(x,e,i,!1,null,"41eda137",null),M=F.exports},62618:function(t,s,a){a.d(s,{EF:function(){return o},f$:function(){return n},kF:function(){return l},r9:function(){return c},yI:function(){return r}});var e=a(76471),i="/api/global-market";function r(){return(0,e.Ay)({url:"".concat(i,"/overview"),method:"get"})}function n(){return(0,e.Ay)({url:"".concat(i,"/heatmap"),method:"get"})}function l(){return(0,e.Ay)({url:"".concat(i,"/calendar"),method:"get"})}function o(){return(0,e.Ay)({url:"".concat(i,"/sentiment"),method:"get"})}function c(t){return(0,e.Ay)({url:"".concat(i,"/opportunities"),method:"get",params:t})}},64118:function(t,s,a){a.d(s,{Qo:function(){return r},_3:function(){return d},dp:function(){return n},iO:function(){return c},mk:function(){return l},ms:function(){return o},z6:function(){return u}});var e=a(76471),i={GetWatchlist:"/api/market/watchlist/get",AddWatchlist:"/api/market/watchlist/add",RemoveWatchlist:"/api/market/watchlist/remove",GetWatchlistPrices:"/api/market/watchlist/prices",MultiAnalysis:"/api/analysis/multiAnalysis",CreateAnalysisTask:"/api/analysis/createTask",GetAnalysisTaskStatus:"/api/analysis/getTaskStatus",GetAnalysisHistoryList:"/api/analysis/getHistoryList",DeleteAnalysisTask:"/api/analysis/deleteTask",ReflectAnalysis:"/api/analysis/reflect",ChatMessage:"/api/ai/chat/message",GetChatHistory:"/api/ai/chat/history",SaveChatHistory:"/api/ai/chat/history/save",GetConfig:"/api/market/config",GetMenuFooterConfig:"/api/market/menuFooterConfig",GetMarketTypes:"/api/market/types",SearchSymbols:"/api/market/symbols/search",GetHotSymbols:"/api/market/symbols/hot"};function r(t){return(0,e.Ay)({url:i.GetWatchlist,method:"get",params:t})}function n(t){return(0,e.Ay)({url:i.AddWatchlist,method:"post",data:t})}function l(t){return(0,e.Ay)({url:i.RemoveWatchlist,method:"post",data:t})}function o(t){return(0,e.Ay)({url:i.GetWatchlistPrices,method:"get",params:{watchlist:JSON.stringify(t.watchlist||[])}})}function c(){return(0,e.Ay)({url:i.GetMarketTypes,method:"get"})}function d(t){return(0,e.Ay)({url:i.SearchSymbols,method:"get",params:t})}function u(t){return(0,e.Ay)({url:i.GetHotSymbols,method:"get",params:t})}}}]); \ No newline at end of file diff --git a/frontend/dist/js/59.538b1612.js b/frontend/dist/js/59.538b1612.js deleted file mode 100644 index e397cea..0000000 --- a/frontend/dist/js/59.538b1612.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[59],{50992:function(t,a,e){e.r(a),e.d(a,{default:function(){return x}});var s=function(){var t=this,a=t._self._c;return a("div",{staticClass:"ai-asset-analysis-page",class:{"theme-dark":t.isDarkTheme}},[t.opportunities.length>0?a("div",{staticClass:"opp-section"},[a("div",{staticClass:"opp-header"},[a("span",{staticClass:"opp-title"},[a("a-icon",{attrs:{type:"radar-chart"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.opportunities.title")))],1),a("span",{staticClass:"opp-header-right"},[a("span",{staticClass:"opp-update-hint"},[a("a-icon",{attrs:{type:"clock-circle"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.opportunities.updateHint"))+" ")],1),a("a-button",{attrs:{type:"link",size:"small",icon:"reload",loading:t.oppLoading},on:{click:function(a){return t.loadOpportunities(!0)}}},[t._v(" "+t._s(t.$t("common.refresh")||"刷新")+" ")])],1)]),a("div",{staticClass:"opp-carousel-wrapper",on:{mouseenter:function(a){t.oppHover=!0},mouseleave:function(a){t.oppHover=!1}}},[a("div",{staticClass:"opp-track",class:{paused:t.oppHover},style:t.oppTrackStyle},t._l(t.carouselItems,function(e,s){return a("div",{key:"opp-"+s,staticClass:"opp-card",class:[e.impact,"market-"+(e.market||"").toLowerCase(),{"is-prediction-market":"PredictionMarket"===e.market}],on:{click:function(a){return t.analyzeOpportunity(e)}}},[a("div",{staticClass:"opp-top"},[a("span",{staticClass:"opp-symbol",class:{"prediction-title":"PredictionMarket"===e.market}},[t._v(" "+t._s("PredictionMarket"===e.market&&e.name||e.symbol)+" ")]),a("a-tag",{staticClass:"opp-market-tag",attrs:{color:t.getMarketTagColor(e.market),size:"small"}},[t._v(" "+t._s(t.getMarketLabel(e.market))+" ")])],1),"PredictionMarket"!==e.market?a("div",{staticClass:"opp-price"},[t._v("$"+t._s(t.formatOppPrice(e.price)))]):a("div",{staticClass:"opp-price"},[t._v(t._s((e.price||0).toFixed(1))+"%")]),"PredictionMarket"!==e.market?a("div",{staticClass:"opp-change",class:e.change_24h>=0?"up":"down"},[t._v(" "+t._s(e.change_24h>=0?"+":"")+t._s((e.change_24h||0).toFixed(1))+"% ")]):e.ai_analysis?a("div",{staticClass:"opp-change"},[a("a-tag",{attrs:{color:t.getRecommendationColor(e.ai_analysis.recommendation),size:"small"}},[t._v(" "+t._s(t.getRecommendationLabel(e.ai_analysis.recommendation))+" ")]),a("span",{staticStyle:{"margin-left":"8px","font-size":"12px",color:"rgba(0,0,0,0.65)"}},[t._v(" 机会评分: "+t._s(e.ai_analysis.opportunity_score.toFixed(0))+" ")])],1):t._e(),"PredictionMarket"!==e.market?a("div",{staticClass:"opp-signal"},[a("a-tag",{attrs:{color:t.getSignalColor(e.signal),size:"small"}},[t._v(t._s(t.getSignalLabel(e.signal)))])],1):t._e(),a("div",{staticClass:"opp-reason"},[t._v(t._s(t.getReasonText(e)))]),a("div",{staticClass:"opp-actions"},["PredictionMarket"!==e.market?a("span",{staticClass:"opp-action",on:{click:function(a){return a.stopPropagation(),t.analyzeOpportunity(e)}}},[a("a-icon",{attrs:{type:"thunderbolt"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.opportunities.analyze"))+" ")],1):a("span",{staticClass:"opp-action",on:{click:function(a){return a.stopPropagation(),t.analyzeOpportunity(e)}}},[a("a-icon",{attrs:{type:"link"}}),t._v(" "+t._s(t.$t("polymarket.action.viewDetail"))+" ")],1),"Crypto"===e.market?a("span",{staticClass:"opp-trade-btn",on:{click:function(a){return a.stopPropagation(),t.openQuickTradeFromOpp(e)}}},[a("a-icon",{attrs:{type:"transaction"}}),t._v(" "+t._s(t.$t("quickTrade.tradeNow"))+" ")],1):t._e()])])}),0)])]):t._e(),a("a-tooltip",{attrs:{title:t.$t("quickTrade.openPanel"),placement:"left"}},[!t.showQuickTrade&&t.currentAnalysisSymbol?a("div",{staticClass:"qt-floating-btn",on:{click:t.openQuickTradeFromCurrent}},[a("a-icon",{attrs:{type:"thunderbolt",theme:"filled"}})],1):t._e()]),a("quick-trade-panel",{attrs:{visible:t.showQuickTrade,symbol:t.qtSymbol,"preset-side":t.qtSide,"preset-price":t.qtPrice,source:t.qtSource,"market-type":"swap"},on:{close:function(a){t.showQuickTrade=!1},"order-success":t.onQuickTradeSuccess,"update:symbol":t.handleQuickTradeSymbolChange}}),a("a-card",{staticClass:"workspace-card",attrs:{bordered:!1}},[a("a-tabs",{staticClass:"workspace-tabs",attrs:{size:"large"},model:{value:t.activeTab,callback:function(a){t.activeTab=a},expression:"activeTab"}},[a("a-tab-pane",{key:"quick"},[a("span",{attrs:{slot:"tab"},slot:"tab"},[a("a-icon",{attrs:{type:"thunderbolt"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.tabs.quick"))+" ")],1),a("div",{staticClass:"tab-body"},["quick"===t.activeTab?a("AnalysisView",{attrs:{embedded:!0,"preset-symbol":t.presetSymbol,"auto-analyze-signal":t.autoAnalyzeSignal},on:{"symbol-change":t.onAnalysisSymbolChange}}):t._e()],1)]),a("a-tab-pane",{key:"monitor"},[a("span",{attrs:{slot:"tab"},slot:"tab"},[a("a-icon",{attrs:{type:"eye"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.tabs.monitor"))+" ")],1),a("div",{staticClass:"tab-body"},["monitor"===t.activeTab?a("PortfolioView",{attrs:{embedded:!0}}):t._e()],1)]),a("a-tab-pane",{key:"polymarket"},[a("span",{attrs:{slot:"tab"},slot:"tab"},[a("a-icon",{attrs:{type:"radar-chart"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.tabs.polymarket"))+" ")],1),a("div",{staticClass:"tab-body"},[a("div",{staticClass:"polymarket-tab-content"},[a("div",{staticClass:"polymarket-placeholder"},[a("div",{staticClass:"placeholder-icon"},[a("a-icon",{attrs:{type:"radar-chart"}})],1),a("h3",[t._v(t._s(t.$t("polymarket.analysis.title")))]),a("p",[t._v(t._s(t.$t("polymarket.analysis.description")))]),a("a-button",{staticStyle:{"margin-top":"16px"},attrs:{type:"primary",size:"large",icon:"thunderbolt"},on:{click:function(a){t.showPolymarketModal=!0}}},[t._v(" "+t._s(t.$t("polymarket.analysis.startAnalysis"))+" ")])],1)])])])],1)],1),a("PolymarketAnalysisModal",{attrs:{visible:t.showPolymarketModal},on:{close:function(a){t.showPolymarketModal=!1}}})],1)},i=[],n=e(76959),o=e(17654),r=e(9133),l=e(57888),c=(e(74423),e(95353)),p=e(53576),u=e(4103),y=e(62618),d=e(38250),m=function(){var t=this,a=t._self._c;return a("a-modal",{attrs:{visible:t.visible,title:t.$t("polymarket.analysis.title"),width:900,footer:null,maskClosable:!1},on:{cancel:t.handleClose}},[a("div",{staticClass:"polymarket-analysis-modal"},[a("a-tabs",{attrs:{"default-active-key":"analyze"},on:{change:t.handleTabChange}},[a("a-tab-pane",{key:"analyze",attrs:{tab:t.$t("polymarket.analysis.tabAnalyze")}},[t.analysisResult?t._e():a("div",{staticClass:"input-section"},[a("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{message:t.$t("polymarket.analysis.inputHint"),type:"info","show-icon":""}}),a("a-textarea",{attrs:{placeholder:t.$t("polymarket.analysis.inputPlaceholder"),rows:3,disabled:t.analyzing},on:{pressEnter:t.handleAnalyze},model:{value:t.inputText,callback:function(a){t.inputText=a},expression:"inputText"}}),a("div",{staticClass:"input-actions"},[a("a-button",{staticStyle:{width:"100%","margin-top":"12px"},attrs:{type:"primary",size:"large",icon:"thunderbolt",loading:t.analyzing,disabled:!t.inputText.trim()},on:{click:t.handleAnalyze}},[t._v(" "+t._s(t.$t("polymarket.analysis.analyzeButton"))+" ")])],1)],1),t.analysisResult?a("div",{staticClass:"result-section"},[a("div",{staticClass:"market-info"},[a("h3",[t._v(t._s(t.analysisResult.market.question))]),a("div",{staticClass:"market-meta"},[a("a-tag",{attrs:{color:t.getStatusColor(t.analysisResult.market.status)}},[t._v(" "+t._s(t.analysisResult.market.status)+" ")]),a("span",{staticClass:"meta-item"},[a("a-icon",{attrs:{type:"percentage"}}),t._v(" "+t._s(t.analysisResult.market.current_probability)+"% ")],1),t.analysisResult.market.volume_24h?a("span",{staticClass:"meta-item"},[a("a-icon",{attrs:{type:"dollar"}}),t._v(" "+t._s(t.formatVolume(t.analysisResult.market.volume_24h))+" ")],1):t._e(),t.analysisResult.market.polymarket_url?a("a-button",{attrs:{type:"link",size:"small",icon:"link",href:t.analysisResult.market.polymarket_url,target:"_blank"}},[t._v(" "+t._s(t.$t("polymarket.analysis.viewOnPolymarket"))+" ")]):t._e()],1)]),a("div",{staticClass:"analysis-result"},[a("a-divider",[t._v(t._s(t.$t("polymarket.analysis.aiAnalysis")))]),a("div",{staticClass:"probability-comparison"},[a("div",{staticClass:"prob-item"},[a("div",{staticClass:"prob-label"},[t._v(t._s(t.$t("polymarket.analysis.marketProbability")))]),a("div",{staticClass:"prob-value"},[t._v(t._s(t.analysisResult.analysis.market_probability)+"%")])]),a("div",{staticClass:"prob-item"},[a("div",{staticClass:"prob-label"},[t._v(t._s(t.$t("polymarket.analysis.aiPredictedProbability")))]),a("div",{staticClass:"prob-value ai-prob"},[t._v(t._s(t.analysisResult.analysis.ai_predicted_probability)+"%")])]),a("div",{staticClass:"prob-item"},[a("div",{staticClass:"prob-label"},[t._v(t._s(t.$t("polymarket.analysis.divergence")))]),a("div",{staticClass:"prob-value",class:t.getDivergenceClass(t.analysisResult.analysis.divergence)},[t._v(" "+t._s(t.analysisResult.analysis.divergence>=0?"+":"")+t._s(t.analysisResult.analysis.divergence.toFixed(2))+"% ")])])]),a("div",{staticClass:"recommendation-section"},[a("a-row",{attrs:{gutter:16}},[a("a-col",{attrs:{span:8}},[a("div",{staticClass:"rec-card"},[a("div",{staticClass:"rec-label"},[t._v(t._s(t.$t("polymarket.analysis.recommendation")))]),a("a-tag",{staticStyle:{"font-size":"16px",padding:"4px 12px"},attrs:{color:t.getRecommendationColor(t.analysisResult.analysis.recommendation)}},[t._v(" "+t._s(t.getRecommendationLabel(t.analysisResult.analysis.recommendation))+" ")])],1)]),a("a-col",{attrs:{span:8}},[a("div",{staticClass:"rec-card"},[a("div",{staticClass:"rec-label"},[t._v(t._s(t.$t("polymarket.analysis.confidenceScore")))]),a("div",{staticClass:"rec-value"},[t._v(t._s(t.analysisResult.analysis.confidence_score.toFixed(0)))])])]),a("a-col",{attrs:{span:8}},[a("div",{staticClass:"rec-card"},[a("div",{staticClass:"rec-label"},[t._v(t._s(t.$t("polymarket.analysis.opportunityScore")))]),a("div",{staticClass:"rec-value"},[t._v(t._s(t.analysisResult.analysis.opportunity_score.toFixed(0)))])])])],1)],1),t.analysisResult.analysis.reasoning?a("div",{staticClass:"reasoning-section"},[a("h4",[t._v(t._s(t.$t("polymarket.analysis.reasoning")))]),a("p",{staticClass:"reasoning-text"},[t._v(t._s(t.analysisResult.analysis.reasoning))])]):t._e(),t.analysisResult.analysis.key_factors&&t.analysisResult.analysis.key_factors.length>0?a("div",{staticClass:"key-factors-section"},[a("h4",[t._v(t._s(t.$t("polymarket.analysis.keyFactors")))]),t._l(t.analysisResult.analysis.key_factors,function(e,s){return a("a-tag",{key:s,staticStyle:{margin:"4px"},attrs:{color:"blue"}},[t._v(" "+t._s(e)+" ")])})],2):t._e(),t.analysisResult.credits_charged>0?a("div",{staticClass:"billing-info"},[a("a-alert",{staticStyle:{"margin-top":"16px"},attrs:{message:t.$t("polymarket.analysis.creditsCharged",{credits:t.analysisResult.credits_charged}),type:"success","show-icon":""}}),void 0!==t.analysisResult.remaining_credits?a("div",{staticStyle:{"margin-top":"8px","text-align":"right",color:"rgba(0,0,0,0.65)"}},[t._v(" "+t._s(t.$t("polymarket.analysis.remainingCredits",{credits:t.analysisResult.remaining_credits.toFixed(0)}))+" ")]):t._e()],1):t._e()],1),a("div",{staticClass:"result-actions"},[a("a-button",{staticStyle:{"margin-right":"8px"},on:{click:t.handleNewAnalysis}},[t._v(" "+t._s(t.$t("polymarket.analysis.newAnalysis"))+" ")]),a("a-button",{attrs:{type:"primary"},on:{click:t.handleClose}},[t._v(" "+t._s(t.$t("common.close"))+" ")])],1)]):t._e(),t.analyzing?a("div",{staticClass:"loading-section"},[a("a-spin",{attrs:{size:"large"}}),a("p",{staticStyle:{"margin-top":"16px",color:"rgba(0,0,0,0.65)"}},[t._v(" "+t._s(t.$t("polymarket.analysis.analyzing"))+" ")])],1):t._e()]),a("a-tab-pane",{key:"history",attrs:{tab:t.$t("polymarket.analysis.tabHistory")}},[a("div",{staticClass:"history-section"},[a("a-spin",{attrs:{spinning:t.historyLoading}},[a("a-table",{attrs:{columns:t.historyColumns,"data-source":t.historyList,pagination:t.historyPagination,"row-key":function(t){return t.id},size:"small"},on:{change:t.handleHistoryTableChange},scopedSlots:t._u([{key:"market_title",fn:function(e,s){return[a("a-button",{staticStyle:{padding:"0"},attrs:{type:"link"},on:{click:function(a){return t.viewHistoryItem(s)}}},[t._v(" "+t._s(e)+" ")])]}},{key:"recommendation",fn:function(e){return[a("a-tag",{attrs:{color:t.getRecommendationColor(e)}},[t._v(" "+t._s(t.getRecommendationLabel(e))+" ")])]}},{key:"created_at",fn:function(a){return[t._v(" "+t._s(t.formatDateTime(a))+" ")]}}])})],1)],1)])],1)],1)])},h=[],k=e(76471),v="/api/polymarket";function g(t){return(0,k.Ay)({url:"".concat(v,"/analyze"),method:"post",data:t,timeout:12e4})}function _(t){return(0,k.Ay)({url:"".concat(v,"/history"),method:"get",params:t})}var b={name:"PolymarketAnalysisModal",props:{visible:{type:Boolean,default:!1}},data:function(){var t=this;return{inputText:"",analyzing:!1,analysisResult:null,activeTab:"analyze",historyLoading:!1,historyList:[],historyPagination:{current:1,pageSize:20,total:0,showSizeChanger:!0,showTotal:function(a){return t.$t("polymarket.analysis.historyTotal",{total:a})}},historyColumns:[]}},methods:{handleAnalyze:function(){var t=this;this.inputText.trim()?(this.analyzing=!0,this.analysisResult=null,g({input:this.inputText.trim(),language:this.$i18n.locale||"zh-CN"}).then(function(a){1===a.code?(t.analysisResult=a.data,t.$message.success(t.$t("polymarket.analysis.success"))):"Insufficient credits"===a.msg?(t.$message.error(t.$t("polymarket.analysis.insufficientCredits")),t.$router.push("/billing")):t.$message.error(a.msg||t.$t("polymarket.analysis.failed"))}).catch(function(a){a.response&&a.response.data&&"Insufficient credits"===a.response.data.msg?(t.$message.error(t.$t("polymarket.analysis.insufficientCredits")),t.$router.push("/billing")):t.$message.error(t.$t("polymarket.analysis.failed"))}).finally(function(){t.analyzing=!1})):this.$message.warning(this.$t("polymarket.analysis.inputRequired"))},handleNewAnalysis:function(){this.inputText="",this.analysisResult=null},handleClose:function(){var t=this;this.$emit("close"),setTimeout(function(){t.inputText="",t.analysisResult=null,t.analyzing=!1},300)},getStatusColor:function(t){var a={active:"green",closed:"default",resolved:"blue"};return a[t]||"default"},getRecommendationColor:function(t){var a={YES:"green",NO:"red",HOLD:"orange"};return a[t]||"default"},getRecommendationLabel:function(t){var a={YES:this.$t("polymarket.analysis.recommendationYes"),NO:this.$t("polymarket.analysis.recommendationNo"),HOLD:this.$t("polymarket.analysis.recommendationHold")};return a[t]||t},getDivergenceClass:function(t){return t>5?"divergence-positive":t<-5?"divergence-negative":"divergence-neutral"},formatVolume:function(t){return t>=1e6?"$".concat((t/1e6).toFixed(2),"M"):t>=1e3?"$".concat((t/1e3).toFixed(2),"K"):"$".concat(t.toFixed(2))},handleTabChange:function(t){this.activeTab=t,"history"===t&&0===this.historyList.length&&this.loadHistory()},loadHistory:function(){var t=this;return(0,o.A)((0,n.A)().m(function a(){var e;return(0,n.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return t.historyLoading=!0,a.p=1,a.n=2,_({page:t.historyPagination.current,page_size:t.historyPagination.pageSize});case 2:e=a.v,1===e.code&&e.data&&(t.historyList=e.data.items||[],t.historyPagination.total=e.data.total||0),a.n=4;break;case 3:a.p=3,a.v,t.$message.error(t.$t("polymarket.analysis.loadHistoryFailed"));case 4:return a.p=4,t.historyLoading=!1,a.f(4);case 5:return a.a(2)}},a,null,[[1,3,4,5]])}))()},handleHistoryTableChange:function(t){this.historyPagination.current=t.current,this.historyPagination.pageSize=t.pageSize,this.loadHistory()},viewHistoryItem:function(t){this.activeTab="analyze",this.analysisResult={market:{question:t.market_title,market_id:t.market_id,polymarket_url:t.market_url,current_probability:t.market_probability,status:"active"},analysis:{ai_predicted_probability:t.ai_predicted_probability,market_probability:t.market_probability,recommendation:t.recommendation,opportunity_score:t.opportunity_score,confidence_score:t.confidence_score}}},formatDateTime:function(t){if(!t)return"";var a=new Date(t);return a.toLocaleString("zh-CN"===this.$i18n.locale?"zh-CN":"en-US")}},mounted:function(){this.historyColumns=[{title:this.$t("polymarket.analysis.historyMarket"),dataIndex:"market_title",key:"market_title",scopedSlots:{customRender:"market_title"}},{title:this.$t("polymarket.analysis.historyRecommendation"),dataIndex:"recommendation",key:"recommendation",width:120,scopedSlots:{customRender:"recommendation"}},{title:this.$t("polymarket.analysis.historyOpportunityScore"),dataIndex:"opportunity_score",key:"opportunity_score",width:120,align:"right"},{title:this.$t("polymarket.analysis.historyCreatedAt"),dataIndex:"created_at",key:"created_at",width:180,scopedSlots:{customRender:"created_at"}}]}},f=b,C=e(845),S=(0,C.A)(f,m,h,!1,null,"41dfa054",null),$=S.exports,A={name:"AIAssetAnalysis",components:{AnalysisView:p["default"],PortfolioView:u["default"],QuickTradePanel:d.A,PolymarketAnalysisModal:$},data:function(){return{activeTab:"quick",opportunities:[],oppLoading:!1,oppHover:!1,presetSymbol:"",autoAnalyzeSignal:0,showQuickTrade:!1,qtSymbol:"",qtSide:"",qtPrice:0,qtSource:"ai_radar",currentAnalysisSymbol:"",currentAnalysisMarket:"",showPolymarketModal:!1}},computed:(0,l.A)((0,l.A)({},(0,c.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},carouselItems:function(){return 0===this.opportunities.length?[]:[].concat((0,r.A)(this.opportunities),(0,r.A)(this.opportunities))},oppTrackStyle:function(){var t=3*this.opportunities.length;return{animationDuration:t+"s"}}}),created:function(){this.loadOpportunities()},methods:{loadOpportunities:function(){var t=arguments,a=this;return(0,o.A)((0,n.A)().m(function e(){var s,i,o;return(0,n.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return s=t.length>0&&void 0!==t[0]&&t[0],a.oppLoading=!0,e.p=1,i=s?{force:!0}:{},e.n=2,(0,y.r9)(i);case 2:o=e.v,o&&1===o.code&&Array.isArray(o.data)&&(a.opportunities=o.data.slice(0,20)),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.p=4,a.oppLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},getSignalColor:function(t){var a={overbought:"volcano",oversold:"green",bullish_momentum:"cyan",bearish_momentum:"red"};return a[t]||"default"},getSignalLabel:function(t){var a="aiAssetAnalysis.opportunities.signal.".concat(t),e=this.$t(a);return e!==a?e:t},getMarketTagColor:function(t){var a={Crypto:"purple",USStock:"green",Forex:"gold",PredictionMarket:"cyan"};return a[t]||"default"},getMarketLabel:function(t){var a="aiAssetAnalysis.opportunities.market.".concat(t),e=this.$t(a);return e!==a?e:t},getReasonText:function(t){var a=(t.market||"Crypto").toLowerCase(),e=t.signal||"",s="aiAssetAnalysis.opportunities.reason.".concat(a,".").concat(e),i=this.$t(s);if(i===s)return t.reason||"";var n=Math.abs(t.change_24h||0).toFixed(1),o=Math.abs(t.change_7d||0).toFixed(1);return i.replace("{change}",n).replace("{change7d}",o)},formatOppPrice:function(t){return t?t>=1e4?(t/1e3).toFixed(1)+"K":t>=1?t.toFixed(2):t.toFixed(4):"--"},analyzeOpportunity:function(t){var a=this;if("PredictionMarket"===t.market)return this.activeTab="polymarket",void(this.showPolymarketModal=!0);this.activeTab="quick";var e=t.market||"Crypto";this.presetSymbol="".concat(e,":").concat(t.symbol),this.$nextTick(function(){a.autoAnalyzeSignal++})},getRecommendationColor:function(t){var a={YES:"green",NO:"red",HOLD:"default"};return a[t]||"default"},getRecommendationLabel:function(t){return this.$t("polymarket.recommendation.".concat(t))||t},onAnalysisSymbolChange:function(t){if(!t)return this.currentAnalysisSymbol="",void(this.currentAnalysisMarket="");var a=t.split(":"),e=a.length>1?a[0]:"Crypto",s=a.length>1?a[1]:a[0];this.currentAnalysisMarket=e,this.currentAnalysisSymbol="Crypto"===e?s:""},openQuickTradeFromCurrent:function(){this.currentAnalysisSymbol&&(this.qtSymbol=this.currentAnalysisSymbol,this.qtSide="",this.qtPrice=0,this.qtSource="ai_analysis",this.showQuickTrade=!0)},openQuickTradeFromOpp:function(t){if("Crypto"===t.market){this.qtSymbol=t.symbol||"";var a=(t.signal||"").toLowerCase();a.includes("oversold")||a.includes("bullish")?this.qtSide="buy":a.includes("overbought")||a.includes("bearish")?this.qtSide="sell":this.qtSide="",this.qtPrice=t.price||0,this.qtSource="ai_radar",this.showQuickTrade=!0}},onQuickTradeSuccess:function(){this.$message.success(this.$t("quickTrade.orderSuccess"))},handleQuickTradeSymbolChange:function(t){t&&(this.qtSymbol=t)}}},T=A,w=(0,C.A)(T,s,i,!1,null,"20b827f5",null),x=w.exports}}]); \ No newline at end of file diff --git a/frontend/dist/js/611.a7ee790d.js b/frontend/dist/js/611.a7ee790d.js new file mode 100644 index 0000000..c29dd95 --- /dev/null +++ b/frontend/dist/js/611.a7ee790d.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[611],{62611:function(e,t,a){a.d(t,{A:function(){return P}});var i=function(){var e=this,t=e._self._c;return t("a-drawer",{staticClass:"quick-trade-drawer",class:{"theme-dark":e.isDark},attrs:{title:null,width:380,visible:e.visible,closable:!1,bodyStyle:{padding:0},maskStyle:{background:"rgba(0,0,0,0.45)"}},on:{close:e.handleClose}},[t("div",{staticClass:"qt-header"},[t("div",{staticClass:"qt-header-left"},[t("a-icon",{staticClass:"qt-icon",attrs:{type:"thunderbolt",theme:"filled"}}),t("span",{staticClass:"qt-header-title"},[e._v(e._s(e.$t("quickTrade.title")))])],1),t("a-icon",{staticClass:"qt-close",attrs:{type:"close"},on:{click:e.handleClose}})],1),t("div",{staticClass:"qt-symbol-bar"},[t("div",{staticClass:"qt-symbol-selector"},[t("a-select",{staticStyle:{width:"100%"},attrs:{"show-search":"",placeholder:e.$t("quickTrade.selectSymbol"),"filter-option":!1,"not-found-content":e.symbolSearching?null:void 0,loading:e.symbolSearching},on:{search:e.handleSymbolSearch,change:e.handleSymbolChange,focus:e.handleSymbolFocus},model:{value:e.currentSymbol,callback:function(t){e.currentSymbol=t},expression:"currentSymbol"}},[t("a-icon",{staticStyle:{color:"#999"},attrs:{slot:"suffixIcon",type:"search"},slot:"suffixIcon"}),e._l(e.symbolSuggestions,function(a){return t("a-select-option",{key:a.value,attrs:{value:a.value}},[t("div",{staticClass:"qt-symbol-option"},[t("span",{staticClass:"qt-symbol-option-name"},[e._v(e._s(a.symbol))]),a.name?t("span",{staticClass:"qt-symbol-option-desc"},[e._v(e._s(a.name))]):e._e()])])})],2)],1),t("div",{staticClass:"qt-price-display",class:e.priceChangeClass},[t("span",{staticClass:"qt-current-price"},[e._v("$"+e._s(e.formatPrice(e.currentPrice)))])])]),t("div",{staticClass:"qt-section"},[t("div",{staticClass:"qt-label"},[e._v(e._s(e.$t("quickTrade.exchange"))+" "),t("span",{staticClass:"qt-crypto-hint"},[e._v(e._s(e.$t("quickTrade.cryptoOnly")))])]),t("a-select",{staticStyle:{width:"100%"},attrs:{placeholder:e.$t("quickTrade.selectExchange"),loading:e.credLoading,notFoundContent:e.$t("quickTrade.noExchange")},on:{change:e.onCredentialChange},model:{value:e.selectedCredentialId,callback:function(t){e.selectedCredentialId=t},expression:"selectedCredentialId"}},e._l(e.credentials,function(a){return t("a-select-option",{key:a.id,attrs:{value:a.id}},[t("span",{staticStyle:{"text-transform":"capitalize"}},[e._v(e._s(a.exchange_id||a.name))]),a.market_type?t("a-tag",{staticStyle:{"margin-left":"6px"},attrs:{size:"small"}},[e._v(e._s(a.market_type))]):e._e()],1)}),1),e.balance.available>0?t("div",{staticClass:"qt-balance"},[t("span",{staticClass:"qt-balance-label"},[e._v(e._s(e.$t("quickTrade.available"))+":")]),t("span",{staticClass:"qt-balance-value"},[e._v("$"+e._s(e.formatPrice(e.balance.available)))])]):e._e()],1),t("div",{staticClass:"qt-section"},[t("div",{staticClass:"qt-direction-toggle"},[t("div",{staticClass:"qt-dir-btn qt-dir-long",class:{active:"buy"===e.side},on:{click:function(t){e.side="buy"}}},[t("a-icon",{attrs:{type:"arrow-up"}}),e._v(" "+e._s(e.$t("quickTrade.long"))+" ")],1),t("div",{staticClass:"qt-dir-btn qt-dir-short",class:{active:"sell"===e.side},on:{click:function(t){e.side="sell"}}},[t("a-icon",{attrs:{type:"arrow-down"}}),e._v(" "+e._s(e.$t("quickTrade.short"))+" ")],1)])]),t("div",{staticClass:"qt-section"},[t("a-radio-group",{staticStyle:{width:"100%"},attrs:{"button-style":"solid",size:"small"},model:{value:e.orderType,callback:function(t){e.orderType=t},expression:"orderType"}},[t("a-radio-button",{staticStyle:{width:"50%","text-align":"center"},attrs:{value:"market"}},[e._v(" "+e._s(e.$t("quickTrade.market"))+" ")]),t("a-radio-button",{staticStyle:{width:"50%","text-align":"center"},attrs:{value:"limit"}},[e._v(" "+e._s(e.$t("quickTrade.limit"))+" ")])],1)],1),"limit"===e.orderType?t("div",{staticClass:"qt-section"},[t("div",{staticClass:"qt-label"},[e._v(e._s(e.$t("quickTrade.limitPrice")))]),t("a-input-number",{staticStyle:{width:"100%"},attrs:{min:0,step:e.priceStep,precision:e.pricePrecision,placeholder:e.$t("quickTrade.enterPrice")},model:{value:e.limitPrice,callback:function(t){e.limitPrice=t},expression:"limitPrice"}})],1):e._e(),t("div",{staticClass:"qt-section"},[t("div",{staticClass:"qt-label"},[e._v(e._s(e.$t("quickTrade.amount"))+" (USDT)")]),t("a-input-number",{staticStyle:{width:"100%"},attrs:{min:1,step:10,precision:2,placeholder:e.$t("quickTrade.enterAmount")},model:{value:e.amount,callback:function(t){e.amount=t},expression:"amount"}}),t("div",{staticClass:"qt-quick-amounts"},e._l(e.quickAmountPcts,function(a){return t("a-button",{key:a,attrs:{size:"small",disabled:e.balance.available<=0},on:{click:function(t){return e.setAmountByPercent(a)}}},[e._v(" "+e._s(a)+"% ")])}),1)],1),"spot"!==e.marketType?t("div",{staticClass:"qt-section"},[t("div",{staticClass:"qt-label"},[e._v(e._s(e.$t("quickTrade.leverage")))]),t("div",{staticClass:"qt-leverage-row"},[t("a-slider",{staticStyle:{flex:"1","margin-right":"12px"},attrs:{min:1,max:125,marks:e.leverageMarks,tipFormatter:function(e){return e+"x"}},model:{value:e.leverage,callback:function(t){e.leverage=t},expression:"leverage"}}),t("a-input-number",{staticStyle:{width:"80px"},attrs:{min:1,max:125,formatter:function(e){return"".concat(e,"x")},parser:function(e){return e.replace("x","")}},model:{value:e.leverage,callback:function(t){e.leverage=t},expression:"leverage"}})],1)]):e._e(),t("a-collapse",{staticStyle:{background:"transparent",margin:"0 16px"},attrs:{bordered:!1}},[t("a-collapse-panel",{key:"tpsl",style:e.collapseStyle,attrs:{header:e.$t("quickTrade.tpsl")}},[t("div",{staticClass:"qt-tpsl-row"},[t("div",{staticClass:"qt-tpsl-item"},[t("span",{staticClass:"qt-label",staticStyle:{color:"#52c41a"}},[e._v(e._s(e.$t("quickTrade.tp")))]),t("a-input-number",{staticStyle:{width:"100%"},attrs:{min:0,step:e.priceStep,precision:e.pricePrecision,placeholder:e.$t("quickTrade.tpPlaceholder")},model:{value:e.tpPrice,callback:function(t){e.tpPrice=t},expression:"tpPrice"}})],1),t("div",{staticClass:"qt-tpsl-item"},[t("span",{staticClass:"qt-label",staticStyle:{color:"#f5222d"}},[e._v(e._s(e.$t("quickTrade.sl")))]),t("a-input-number",{staticStyle:{width:"100%"},attrs:{min:0,step:e.priceStep,precision:e.pricePrecision,placeholder:e.$t("quickTrade.slPlaceholder")},model:{value:e.slPrice,callback:function(t){e.slPrice=t},expression:"slPrice"}})],1)])])],1),t("div",{staticClass:"qt-submit-section"},[t("a-button",{staticClass:"qt-submit-btn",class:["buy"===e.side?"qt-btn-long":"qt-btn-short"],attrs:{type:"buy"===e.side?"primary":"danger",size:"large",block:"",loading:e.submitting,disabled:!e.canSubmit},on:{click:e.handleSubmit}},[t("a-icon",{attrs:{type:"buy"===e.side?"arrow-up":"arrow-down"}}),e._v(" "+e._s("buy"===e.side?e.$t("quickTrade.buyLong"):e.$t("quickTrade.sellShort"))+" "+e._s(e.symbol)+" ")],1)],1),t("div",{staticClass:"qt-position-section"},[t("div",{staticClass:"qt-section-header"},[t("a-icon",{attrs:{type:"wallet"}}),e._v(" "+e._s(e.$t("quickTrade.currentPosition"))+" ")],1),e.currentPosition?t("div",{staticClass:"qt-position-card",class:e.currentPosition.side},[t("div",{staticClass:"qt-pos-row"},[t("span",[e._v(e._s(e.$t("quickTrade.side")))]),t("a-tag",{attrs:{color:"long"===e.currentPosition.side?"#52c41a":"#f5222d",size:"small"}},[e._v(" "+e._s("long"===e.currentPosition.side?e.$t("quickTrade.long"):e.$t("quickTrade.short"))+" ")])],1),t("div",{staticClass:"qt-pos-row"},[t("span",[e._v(e._s(e.$t("quickTrade.posSize")))]),t("span",[e._v(e._s(e.currentPosition.size))])]),t("div",{staticClass:"qt-pos-row"},[t("span",[e._v(e._s(e.$t("quickTrade.entryPrice")))]),t("span",[e._v("$"+e._s(e.formatPrice(e.currentPosition.entry_price)))])]),e.currentPosition.mark_price?t("div",{staticClass:"qt-pos-row"},[t("span",[e._v(e._s(e.$t("quickTrade.markPrice")))]),t("span",[e._v("$"+e._s(e.formatPrice(e.currentPosition.mark_price)))])]):e._e(),e.currentPosition.leverage&&e.currentPosition.leverage>1?t("div",{staticClass:"qt-pos-row"},[t("span",[e._v(e._s(e.$t("quickTrade.leverage")))]),t("span",[e._v(e._s(e.currentPosition.leverage)+"x")])]):e._e(),t("div",{staticClass:"qt-pos-row"},[t("span",[e._v(e._s(e.$t("quickTrade.unrealizedPnl")))]),t("span",{class:e.currentPosition.unrealized_pnl>=0?"qt-green":"qt-red"},[e._v(" $"+e._s(e.formatPrice(e.currentPosition.unrealized_pnl))+" ")])]),t("a-button",{staticStyle:{"margin-top":"8px"},attrs:{type:"danger",size:"small",block:"",ghost:"",loading:e.closingPosition},on:{click:e.handleClosePosition}},[e._v(" "+e._s(e.$t("quickTrade.closePosition"))+" ")])],1):t("div",{staticClass:"qt-position-empty"},[t("a-empty",{staticStyle:{padding:"20px 0"},attrs:{description:e.$t("quickTrade.noPosition"),image:!1}},[t("template",{slot:"description"},[t("span",{staticStyle:{color:"#999","font-size":"12px"}},[e._v(e._s(e.$t("quickTrade.noPositionHint")))])])],2)],1)]),e.recentTrades.length>0?t("div",{staticClass:"qt-history-section"},[t("a-collapse",{attrs:{bordered:!1,activeKey:e.historyCollapsed?[]:["history"]},on:{change:e.handleHistoryCollapse}},[t("a-collapse-panel",{key:"history",style:e.collapseStyle,attrs:{showArrow:!1}},[t("template",{slot:"header"},[t("div",{staticClass:"qt-section-header",staticStyle:{margin:"0",padding:"0"}},[t("a-icon",{attrs:{type:"history"}}),e._v(" "+e._s(e.$t("quickTrade.recentTrades"))+" "),t("span",{staticClass:"qt-history-count"},[e._v("("+e._s(e.recentTrades.length)+")")])],1)]),t("div",{staticClass:"qt-trade-list"},e._l(e.recentTrades,function(a){return t("div",{key:a.id,staticClass:"qt-trade-item"},[t("div",{staticClass:"qt-trade-main"},[t("a-tag",{attrs:{color:"buy"===a.side?"#52c41a":"#f5222d",size:"small"}},[e._v(" "+e._s("buy"===a.side?"LONG":"SHORT")+" ")]),t("span",{staticClass:"qt-trade-symbol"},[e._v(e._s(a.symbol))]),t("span",{staticClass:"qt-trade-amount"},[e._v("$"+e._s(e.formatPrice(a.amount)))])],1),t("div",{staticClass:"qt-trade-meta"},[t("a-tag",{attrs:{color:"filled"===a.status?"#52c41a":"failed"===a.status?"#f5222d":"#faad14",size:"small"}},[e._v(" "+e._s(a.status)+" ")]),t("span",{staticClass:"qt-trade-time"},[e._v(e._s(e.formatTime(a.created_at)))])],1)])}),0)],2)],1)],1):e._e()],1)},r=[],s=a(81127),n=a(56252),c=a(76338),l=(a(74423),a(95353)),o=a(42430),u=a(75769);function d(e){return(0,u.Ay)({url:"/api/quick-trade/place-order",method:"post",data:e})}function m(e){return(0,u.Ay)({url:"/api/quick-trade/balance",method:"get",params:e})}function p(e){return(0,u.Ay)({url:"/api/quick-trade/position",method:"get",params:e})}function h(e){return(0,u.Ay)({url:"/api/quick-trade/history",method:"get",params:e})}function v(e){return(0,u.Ay)({url:"/api/quick-trade/close-position",method:"post",data:e})}var b=a(35038),y=a(505),f={name:"QuickTradePanel",props:{visible:{type:Boolean,default:!1},symbol:{type:String,default:""},presetSide:{type:String,default:""},presetPrice:{type:Number,default:0},source:{type:String,default:"manual"},marketType:{type:String,default:"swap"}},data:function(){return{credentials:[],selectedCredentialId:void 0,credLoading:!1,balance:{available:0,total:0},side:"buy",orderType:"market",limitPrice:0,amount:100,leverage:5,tpPrice:null,slPrice:null,submitting:!1,closingPosition:!1,currentPrice:0,currentPosition:null,recentTrades:[],historyCollapsed:!1,currentSymbol:"",symbolSuggestions:[],symbolSearching:!1,symbolSearchTimer:null,userId:null,quickAmountPcts:[10,25,50,75,100],leverageMarks:{1:"1x",5:"5x",10:"10x",25:"25x",50:"50x",100:"100x",125:"125x"},pollTimer:null}},computed:(0,c.A)((0,c.A)({},(0,l.aH)({navTheme:function(e){return e.app.theme}})),{},{isDark:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},priceStep:function(){return this.currentPrice>1e4?1:this.currentPrice>100?.1:this.currentPrice>1?.01:1e-4},pricePrecision:function(){return this.currentPrice>1e4?0:this.currentPrice>100?1:this.currentPrice>1?2:4},canSubmit:function(){return this.selectedCredentialId&&this.currentSymbol&&this.amount>0&&!this.submitting},priceChangeClass:function(){return""},collapseStyle:function(){return{background:"transparent",borderRadius:"4px",border:0,overflow:"hidden"}}}),watch:{visible:function(e){e?this.init():this.stopPolling()},symbol:function(e){e&&(this.currentSymbol=e)},currentSymbol:function(e){e&&(this.loadPrice(),this.selectedCredentialId&&this.loadPosition(),this.$emit("update:symbol",e))},selectedCredentialId:function(e){e&&this.currentSymbol&&this.loadPosition()},presetSide:function(e){e&&(this.side=e)},presetPrice:function(e){e>0&&(this.currentPrice=e,this.limitPrice=e)}},methods:{init:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){return(0,s.A)().w(function(t){while(1)switch(t.n){case 0:return e.currentSymbol=e.symbol||"",e.presetSide&&(e.side=e.presetSide),e.presetPrice>0&&(e.currentPrice=e.presetPrice,e.limitPrice=e.presetPrice),t.n=1,e.loadCredentials();case 1:return t.n=2,e.loadUserInfo();case 2:return t.n=3,e.loadWatchlistSymbols();case 3:if(!e.currentSymbol){t.n=4;break}return t.n=4,e.loadPrice();case 4:if(!e.selectedCredentialId||!e.currentSymbol){t.n=5;break}return t.n=5,e.loadPosition();case 5:e.loadHistory(),e.startPolling();case 6:return t.a(2)}},t)}))()},loadUserInfo:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){var a,i,r,n;return(0,s.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(t.p=0,i=e.$store,r=(null===i||void 0===i||null===(a=i.getters)||void 0===a?void 0:a.userInfo)||{},!r||!r.id){t.n=1;break}return e.userId=r.id,t.a(2);case 1:return t.n=2,(0,y.ug)();case 2:n=t.v,n&&1===n.code&&n.data&&(e.userId=n.data.id,i&&i.commit("SET_INFO",n.data)),t.n=4;break;case 3:t.p=3,t.v;case 4:return t.a(2)}},t,null,[[0,3]])}))()},loadWatchlistSymbols:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){var a,i;return(0,s.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e.userId){t.n=2;break}return t.n=1,e.loadUserInfo();case 1:if(e.userId){t.n=2;break}return t.a(2);case 2:return t.p=2,t.n=3,(0,b.Qo)({userid:e.userId});case 3:a=t.v,a&&1===a.code&&a.data&&(i=(a.data||[]).filter(function(e){return"crypto"===(e.market||"").toLowerCase()}).map(function(e){return{value:e.symbol||"",symbol:e.symbol||"",name:e.name||""}}).filter(function(e){return e.value}),e.symbolSuggestions=i),t.n=5;break;case 4:t.p=4,t.v;case 5:return t.a(2)}},t,null,[[2,4]])}))()},handleSymbolSearch:function(e){var t=this;this.symbolSearchTimer&&clearTimeout(this.symbolSearchTimer),e&&""!==e.trim()?this.symbolSearchTimer=setTimeout((0,n.A)((0,s.A)().m(function a(){var i;return(0,s.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return t.symbolSearching=!0,a.p=1,a.n=2,(0,b._3)({market:"Crypto",keyword:e.trim(),limit:20});case 2:i=a.v,i&&1===i.code&&i.data?t.symbolSuggestions=(i.data.items||i.data||[]).map(function(e){return{value:e.symbol||"",symbol:e.symbol||"",name:e.name||""}}).filter(function(e){return e.value}):t.symbolSuggestions=[],a.n=4;break;case 3:a.p=3,a.v,t.symbolSuggestions=[];case 4:return a.p=4,t.symbolSearching=!1,a.f(4);case 5:return a.a(2)}},a,null,[[1,3,4,5]])})),300):this.loadWatchlistSymbols()},handleSymbolChange:function(e){e&&e!==this.currentSymbol&&(this.currentSymbol=e,this.loadPrice(),this.selectedCredentialId&&this.loadPosition(),this.$emit("update:symbol",e))},loadPrice:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){var a,i;return(0,s.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e.currentSymbol){t.n=1;break}return e.currentPrice=0,t.a(2);case 1:return t.p=1,t.n=2,(0,u.Ay)({url:"/api/market/price",method:"get",params:{market:"Crypto",symbol:e.currentSymbol}});case 2:a=t.v,a&&1===a.code&&a.data&&(i=parseFloat(a.data.price||0),i>0&&(e.currentPrice=i,0!==e.limitPrice&&e.limitPrice!==e.presetPrice||(e.limitPrice=i))),t.n=4;break;case 3:t.p=3,t.v;case 4:return t.a(2)}},t,null,[[1,3]])}))()},handleSymbolFocus:function(){0===this.symbolSuggestions.length&&this.loadWatchlistSymbols()},loadCredentials:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){var a,i,r;return(0,s.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.credLoading=!0,t.p=1,t.n=2,(0,o.IA)();case 2:a=t.v,1===a.code&&a.data&&(i=a.data.items||a.data||[],r=["ibkr","mt5"],e.credentials=i.filter(function(e){var t=(e.exchange_id||e.name||"").toLowerCase();return!r.includes(t)}),!e.selectedCredentialId&&e.credentials.length>0&&(e.selectedCredentialId=e.credentials[0].id,e.onCredentialChange(e.selectedCredentialId))),t.n=4;break;case 3:t.p=3,t.v;case 4:return t.p=4,e.credLoading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},onCredentialChange:function(e){var t=this;return(0,n.A)((0,s.A)().m(function a(){return(0,s.A)().w(function(a){while(1)switch(a.n){case 0:return t.selectedCredentialId=e,a.n=1,t.loadBalance();case 1:return a.n=2,t.loadPosition();case 2:return a.a(2)}},a)}))()},loadBalance:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){var a;return(0,s.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e.selectedCredentialId){t.n=1;break}return t.a(2);case 1:return t.p=1,t.n=2,m({credential_id:e.selectedCredentialId,market_type:e.marketType});case 2:a=t.v,1===a.code&&a.data&&(e.balance=a.data),t.n=4;break;case 3:t.p=3,t.v;case 4:return t.a(2)}},t,null,[[1,3]])}))()},loadPosition:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){var a;return(0,s.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e.selectedCredentialId&&e.currentSymbol){t.n=1;break}return t.a(2);case 1:return t.p=1,t.n=2,p({credential_id:e.selectedCredentialId,symbol:e.currentSymbol,market_type:e.marketType});case 2:if(a=t.v,!(1===a.code&&a.data&&a.data.positions&&a.data.positions.length>0)){t.n=3;break}return e.currentPosition=a.data.positions[0],t.a(2,!0);case 3:return e.currentPosition=null,t.a(2,!1);case 4:t.n=6;break;case 5:return t.p=5,t.v,e.currentPosition=null,t.a(2,!1);case 6:return t.a(2)}},t,null,[[1,5]])}))()},loadPositionWithRetry:function(){var e=arguments,t=this;return(0,n.A)((0,s.A)().m(function a(){var i,r,n,c;return(0,s.A)().w(function(a){while(1)switch(a.n){case 0:return i=e.length>0&&void 0!==e[0]?e[0]:3,r=e.length>1&&void 0!==e[1]?e[1]:2e3,a.n=1,t.loadPosition();case 1:if(n=a.v,!n){a.n=2;break}return a.a(2);case 2:c=0;case 3:if(!(c0&&(this.amount=Math.floor(this.balance.available*e/100*100)/100)},handleSubmit:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){var a,i,r;return(0,s.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e.canSubmit){t.n=1;break}return t.a(2);case 1:return e.submitting=!0,t.p=2,a={credential_id:e.selectedCredentialId,symbol:e.currentSymbol,side:e.side,order_type:e.orderType,amount:e.amount,price:"limit"===e.orderType?e.limitPrice:0,leverage:"spot"!==e.marketType?e.leverage:1,market_type:e.marketType,tp_price:e.tpPrice||0,sl_price:e.slPrice||0,source:e.source},t.n=3,d(a);case 3:if(i=t.v,1!==i.code){t.n=7;break}return e.$emit("order-success",i.data),t.n=4,e.loadBalance();case 4:return t.n=5,e.loadHistory();case 5:return t.n=6,e.loadPositionWithRetry();case 6:t.n=8;break;case 7:e.$message.error(i.msg||e.$t("quickTrade.orderFailed"));case 8:t.n=10;break;case 9:t.p=9,r=t.v,e.$message.error(r.message||e.$t("quickTrade.orderFailed"));case 10:return t.p=10,e.submitting=!1,t.f(10);case 11:return t.a(2)}},t,null,[[2,9,10,11]])}))()},handleClosePosition:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){var a,i,r;return(0,s.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e.currentPosition&&e.selectedCredentialId){t.n=1;break}return t.a(2);case 1:return e.closingPosition=!0,t.p=2,a={credential_id:e.selectedCredentialId,symbol:e.currentSymbol,market_type:e.marketType,size:0,source:"manual"},t.n=3,v(a);case 3:if(i=t.v,1!==i.code){t.n=6;break}return e.$message.success(e.$t("quickTrade.positionClosed")),t.n=4,e.loadBalance();case 4:return t.n=5,e.loadHistory();case 5:e.currentPosition=null,setTimeout((0,n.A)((0,s.A)().m(function t(){return(0,s.A)().w(function(t){while(1)switch(t.n){case 0:return t.n=1,e.loadPosition();case 1:return t.a(2)}},t)})),2e3),t.n=7;break;case 6:e.$message.error(i.msg||e.$t("quickTrade.orderFailed"));case 7:t.n=9;break;case 8:t.p=8,r=t.v,e.$message.error(r.message||e.$t("quickTrade.orderFailed"));case 9:return t.p=9,e.closingPosition=!1,t.f(9);case 10:return t.a(2)}},t,null,[[2,8,9,10]])}))()},startPolling:function(){var e=this;this.stopPolling(),this.pollTimer=setInterval(function(){e.currentSymbol&&e.loadPrice(),e.selectedCredentialId&&e.currentSymbol&&(e.loadBalance(),e.loadPosition())},1e4)},stopPolling:function(){this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=null)},handleClose:function(){this.$emit("close"),this.$emit("update:visible",!1)},handleHistoryCollapse:function(e){this.historyCollapsed=!e.includes("history")},formatPrice:function(e){var t=parseFloat(e||0);return Math.abs(t)>=1e4?t.toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:0}):Math.abs(t)>=100?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):Math.abs(t)>=1?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:4}):t.toLocaleString("en-US",{minimumFractionDigits:4,maximumFractionDigits:6})},formatTime:function(e){if(!e)return"";var t=new Date(e),a=function(e){return String(e).padStart(2,"0")};return"".concat(a(t.getMonth()+1),"-").concat(a(t.getDate())," ").concat(a(t.getHours()),":").concat(a(t.getMinutes()))}},beforeDestroy:function(){this.stopPolling()}},g=f,k=a(845),_=(0,k.A)(g,i,r,!1,null,"0d547552",null),P=_.exports},42430:function(e,t,a){a.d(t,{IA:function(){return n},PR:function(){return c},kI:function(){return l}});var i=a(76338),r=a(75769),s={list:"/api/credentials/list",get:"/api/credentials/get",create:"/api/credentials/create",delete:"/api/credentials/delete"};function n(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,r.Ay)({url:s.list,method:"get",params:e})}function c(e){return(0,r.Ay)({url:s.create,method:"post",data:e})}function l(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(0,r.Ay)({url:s.delete,method:"delete",params:(0,i.A)({id:e},t)})}}}]); \ No newline at end of file diff --git a/frontend/dist/js/715.6efbb113.js b/frontend/dist/js/635.5382a6de.js similarity index 99% rename from frontend/dist/js/715.6efbb113.js rename to frontend/dist/js/635.5382a6de.js index da424c9..154ae3e 100644 --- a/frontend/dist/js/715.6efbb113.js +++ b/frontend/dist/js/635.5382a6de.js @@ -1 +1 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[715],{49715:function(t,e,a){a.r(e),a.d(e,{default:function(){return F}});var i=function(){var t=this,e=t._self._c;return e("div",{staticClass:"indicator-community-container",class:{"theme-dark":t.isDarkTheme}},[t.isAdmin?e("a-tabs",{staticClass:"admin-tabs",on:{change:t.handleTabChange},model:{value:t.activeTab,callback:function(e){t.activeTab=e},expression:"activeTab"}},[e("a-tab-pane",{key:"market",attrs:{tab:t.$t("community.title")}}),e("a-tab-pane",{key:"review"},[e("template",{slot:"tab"},[e("a-badge",{attrs:{count:t.reviewStats.pending,offset:[10,0]}},[t._v(" "+t._s(t.$t("community.admin.reviewTab"))+" ")])],1)],2)],1):t._e(),e("div",{directives:[{name:"show",rawName:"v-show",value:"market"===t.activeTab,expression:"activeTab === 'market'"}],staticClass:"market-header"},[e("div",{staticClass:"header-left"},[e("h2",{staticClass:"page-title"},[e("a-icon",{attrs:{type:"shop"}}),t._v(" "+t._s(t.$t("community.title"))+" ")],1)]),e("div",{staticClass:"header-right"},[e("a-input-search",{staticStyle:{width:"240px"},attrs:{placeholder:t.$t("community.searchPlaceholder"),"allow-clear":""},on:{search:t.handleSearch,pressEnter:t.handleSearch},model:{value:t.filters.keyword,callback:function(e){t.$set(t.filters,"keyword",e)},expression:"filters.keyword"}}),e("a-radio-group",{attrs:{"button-style":"solid"},on:{change:t.handleFilterChange},model:{value:t.filters.pricingType,callback:function(e){t.$set(t.filters,"pricingType",e)},expression:"filters.pricingType"}},[e("a-radio-button",{attrs:{value:""}},[t._v(t._s(t.$t("community.all")))]),e("a-radio-button",{attrs:{value:"free"}},[t._v(t._s(t.$t("community.freeOnly")))]),e("a-radio-button",{attrs:{value:"paid"}},[t._v(t._s(t.$t("community.paidOnly")))])],1),e("a-select",{staticStyle:{width:"140px"},on:{change:t.handleFilterChange},model:{value:t.filters.sortBy,callback:function(e){t.$set(t.filters,"sortBy",e)},expression:"filters.sortBy"}},[e("a-select-option",{attrs:{value:"newest"}},[t._v(t._s(t.$t("community.sortNewest")))]),e("a-select-option",{attrs:{value:"hot"}},[t._v(t._s(t.$t("community.sortHot")))]),e("a-select-option",{attrs:{value:"rating"}},[t._v(t._s(t.$t("community.sortRating")))]),e("a-select-option",{attrs:{value:"price_asc"}},[t._v(t._s(t.$t("community.sortPriceLow")))]),e("a-select-option",{attrs:{value:"price_desc"}},[t._v(t._s(t.$t("community.sortPriceHigh")))])],1),e("a-button",{attrs:{type:"link"},on:{click:function(e){t.showMyPurchases=!0}}},[e("a-icon",{attrs:{type:"shopping"}}),t._v(" "+t._s(t.$t("community.myPurchases"))+" ")],1)],1)]),"market"===t.activeTab?[e("a-spin",{attrs:{spinning:t.loading}},[0!==t.indicators.length||t.loading?e("div",{staticClass:"indicator-grid"},t._l(t.indicators,function(a){return e("indicator-card",{key:a.id,attrs:{indicator:a},on:{click:function(e){return t.openDetail(a)}}})}),1):e("div",{staticClass:"empty-state"},[e("a-empty",{attrs:{description:t.$t("community.noIndicators")}},[e("a-button",{attrs:{type:"primary"},on:{click:t.goToCreate}},[t._v(" "+t._s(t.$t("community.createFirst"))+" ")])],1)],1)]),t.pagination.total>0?e("div",{staticClass:"pagination-wrapper"},[e("a-pagination",{attrs:{current:t.pagination.current,total:t.pagination.total,"page-size":t.pagination.pageSize,"show-total":function(e){return"".concat(t.$t("community.total")," ").concat(e," ").concat(t.$t("community.items"))},"show-quick-jumper":""},on:{change:t.handlePageChange}})],1):t._e()]:t._e(),"review"===t.activeTab&&t.isAdmin?[e("div",{staticClass:"review-panel"},[e("div",{staticClass:"review-header"},[e("a-radio-group",{attrs:{"button-style":"solid"},on:{change:t.loadPendingIndicators},model:{value:t.reviewFilter,callback:function(e){t.reviewFilter=e},expression:"reviewFilter"}},[e("a-radio-button",{attrs:{value:"pending"}},[e("a-badge",{attrs:{count:t.reviewStats.pending,offset:[8,-2],"number-style":{backgroundColor:"#faad14"}}},[t._v(" "+t._s(t.$t("community.admin.pending"))+" ")])],1),e("a-radio-button",{attrs:{value:"approved"}},[t._v(" "+t._s(t.$t("community.admin.approved"))+" ("+t._s(t.reviewStats.approved)+") ")]),e("a-radio-button",{attrs:{value:"rejected"}},[t._v(" "+t._s(t.$t("community.admin.rejected"))+" ("+t._s(t.reviewStats.rejected)+") ")])],1)],1),e("a-spin",{attrs:{spinning:t.reviewLoading}},[0!==t.pendingIndicators.length||t.reviewLoading?e("div",{staticClass:"review-list"},t._l(t.pendingIndicators,function(a){return e("div",{key:a.id,staticClass:"review-item"},[e("div",{staticClass:"review-item-header"},[e("div",{staticClass:"item-info"},[e("span",{staticClass:"item-name"},[t._v(t._s(a.name))]),"free"===a.pricing_type?e("a-tag",{attrs:{color:"green"}},[t._v(t._s(t.$t("community.free")))]):e("a-tag",{attrs:{color:"orange"}},[t._v(t._s(a.price)+" "+t._s(t.$t("community.credits")))]),e("a-tag",{attrs:{color:t.getStatusColor(a.review_status)}},[t._v(t._s(t.getStatusText(a.review_status)))])],1),e("div",{staticClass:"item-author"},[e("a-avatar",{attrs:{src:a.author.avatar,size:"small"}}),e("span",[t._v(t._s(a.author.nickname||a.author.username))]),e("span",{staticClass:"item-time"},[t._v(t._s(t.formatDate(a.created_at)))])],1)]),e("div",{staticClass:"review-item-body"},[e("div",{staticClass:"item-desc"},[t._v(t._s(a.description||t.$t("community.admin.noDescription")))]),a.code?e("div",{staticClass:"item-code"},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.toggleCode(a.id)}}},[e("a-icon",{attrs:{type:t.expandedCodes[a.id]?"up":"down"}}),t._v(" "+t._s(t.$t("community.admin.viewCode"))+" ")],1),t.expandedCodes[a.id]?e("pre",{staticClass:"code-preview"},[t._v(t._s(a.code))]):t._e()],1):t._e(),a.review_note?e("div",{staticClass:"review-note"},[e("a-icon",{attrs:{type:"info-circle"}}),t._v(" "+t._s(t.$t("community.admin.note"))+": "+t._s(a.review_note)+" ")],1):t._e()]),e("div",{staticClass:"review-item-actions"},["pending"===a.review_status?[e("a-button",{attrs:{type:"primary",size:"small"},on:{click:function(e){return t.handleReview(a,"approve")}}},[e("a-icon",{attrs:{type:"check"}}),t._v(" "+t._s(t.$t("community.admin.approve"))+" ")],1),e("a-button",{attrs:{type:"danger",size:"small"},on:{click:function(e){return t.handleReview(a,"reject")}}},[e("a-icon",{attrs:{type:"close"}}),t._v(" "+t._s(t.$t("community.admin.reject"))+" ")],1)]:"approved"===a.review_status?[e("a-button",{attrs:{size:"small"},on:{click:function(e){return t.handleUnpublish(a)}}},[e("a-icon",{attrs:{type:"stop"}}),t._v(" "+t._s(t.$t("community.admin.unpublish"))+" ")],1)]:t._e(),e("a-popconfirm",{attrs:{title:t.$t("community.admin.deleteConfirm")},on:{confirm:function(e){return t.handleDelete(a)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}}),t._v(" "+t._s(t.$t("community.admin.delete"))+" ")],1)],1)],2)])}),0):e("div",{staticClass:"empty-state"},[e("a-empty",{attrs:{description:t.$t("community.admin.noItems")}})],1)]),t.reviewPagination.total>0?e("div",{staticClass:"pagination-wrapper"},[e("a-pagination",{attrs:{current:t.reviewPagination.current,total:t.reviewPagination.total,"page-size":t.reviewPagination.pageSize,"show-total":function(e){return"".concat(t.$t("community.total")," ").concat(e," ").concat(t.$t("community.items"))}},on:{change:t.handleReviewPageChange}})],1):t._e()],1)]:t._e(),e("a-modal",{attrs:{title:"approve"===t.reviewAction?t.$t("community.admin.approveTitle"):t.$t("community.admin.rejectTitle"),"ok-text":"approve"===t.reviewAction?t.$t("community.admin.approve"):t.$t("community.admin.reject"),"ok-button-props":{props:{type:"approve"===t.reviewAction?"primary":"danger"}}},on:{ok:t.submitReview},model:{value:t.showReviewModal,callback:function(e){t.showReviewModal=e},expression:"showReviewModal"}},[e("a-form",{attrs:{layout:"vertical"}},[e("a-form-item",{attrs:{label:t.$t("community.admin.noteLabel")}},[e("a-textarea",{attrs:{placeholder:t.$t("community.admin.notePlaceholder"),rows:3},model:{value:t.reviewNote,callback:function(e){t.reviewNote=e},expression:"reviewNote"}})],1)],1)],1),e("indicator-detail",{attrs:{visible:t.detailVisible,"indicator-id":t.selectedIndicatorId,"current-user-id":t.currentUserId},on:{close:function(e){t.detailVisible=!1},purchased:t.handlePurchased}}),e("a-modal",{attrs:{title:t.$t("community.myPurchases"),footer:null,width:"600px"},model:{value:t.showMyPurchases,callback:function(e){t.showMyPurchases=e},expression:"showMyPurchases"}},[e("a-spin",{attrs:{spinning:t.purchasesLoading}},[0===t.myPurchases.length?e("div",{staticClass:"empty-purchases"},[e("a-empty",{attrs:{description:t.$t("community.noPurchases")}})],1):e("a-list",{attrs:{"data-source":t.myPurchases,"item-layout":"horizontal"},scopedSlots:t._u([{key:"renderItem",fn:function(a){return e("a-list-item",{scopedSlots:t._u([{key:"actions",fn:function(){return[e("a-button",{attrs:{type:"link",size:"small"},on:{click:t.goToUse}},[t._v(" "+t._s(t.$t("community.useNow"))+" ")])]},proxy:!0}])},[e("a-list-item-meta",{scopedSlots:t._u([{key:"title",fn:function(){return[e("a",{on:{click:function(e){return t.openDetailById(a.indicator.id)}}},[t._v(t._s(a.indicator.name))])]},proxy:!0},{key:"description",fn:function(){return[e("div",[t._v(t._s(t.$t("community.purchasedFrom"))+": "+t._s(a.seller.nickname))]),e("div",[t._v(t._s(t.$t("community.purchaseTime"))+": "+t._s(t.formatDate(a.purchase_time)))])]},proxy:!0}],null,!0)})],1)}}])})],1)],1)],2)},n=[],s=a(76959),r=a(17654),o=a(57888),c=a(95353),d=function(){var t=this,e=t._self._c;return e("a-card",{staticClass:"indicator-card",attrs:{hoverable:"","body-style":{padding:"12px"}},on:{click:function(e){return t.$emit("click",t.indicator)}}},[e("div",{staticClass:"card-cover",style:t.coverStyle},[t.indicator.preview_image&&!t.imageError?e("img",{attrs:{src:t.indicator.preview_image,alt:t.indicator.name},on:{error:t.handleImageError}}):e("div",{staticClass:"default-cover",style:{background:t.coverGradient}},[e("span",{staticClass:"cover-title"},[t._v(t._s(t.indicatorInitials))]),e("span",{staticClass:"cover-subtitle"},[t._v(t._s(t.indicator.name))])]),e("div",{staticClass:"price-tag",class:t.isPaid?"paid":"free"},[t._v(" "+t._s(t.isPaid?"".concat(t.indicator.price," ").concat(t.$t("community.credits")):t.$t("community.free"))+" ")]),t.indicator.vip_free?e("div",{staticClass:"vip-free-tag"},[t._v(" "+t._s(t.$t("community.vipFree"))+" ")]):t._e(),t.indicator.is_own?e("div",{staticClass:"own-tag"},[t._v(" "+t._s(t.$t("community.myIndicator"))+" ")]):t.indicator.is_purchased?e("div",{staticClass:"purchased-tag"},[e("a-icon",{attrs:{type:"check-circle"}}),t._v(" "+t._s(t.$t("community.purchased"))+" ")],1):t._e()]),e("div",{staticClass:"card-content"},[e("h3",{staticClass:"card-title",attrs:{title:t.indicator.name}},[t._v(t._s(t.indicator.name))]),e("p",{staticClass:"card-desc"},[t._v(t._s(t.indicator.description||t.$t("community.noDescription")))]),e("div",{staticClass:"card-author"},[e("a-avatar",{attrs:{src:t.indicator.author.avatar,size:24}}),e("span",{staticClass:"author-name"},[t._v(t._s(t.indicator.author.nickname||t.indicator.author.username))])],1),e("div",{staticClass:"card-stats"},[e("span",{staticClass:"stat-item"},[e("a-icon",{attrs:{type:"download"}}),t._v(" "+t._s(t.indicator.purchase_count||0)+" ")],1),e("span",{staticClass:"stat-item"},[e("a-icon",{style:{color:"#faad14"},attrs:{type:"star",theme:"filled"}}),t._v(" "+t._s(t.formatRating(t.indicator.avg_rating))+" ")],1),e("span",{staticClass:"stat-item"},[e("a-icon",{attrs:{type:"eye"}}),t._v(" "+t._s(t.indicator.view_count||0)+" ")],1)])])])},m=[],l=["linear-gradient(135deg, #667eea 0%, #764ba2 100%)","linear-gradient(135deg, #f093fb 0%, #f5576c 100%)","linear-gradient(135deg, #4facfe 0%, #00f2fe 100%)","linear-gradient(135deg, #43e97b 0%, #38f9d7 100%)","linear-gradient(135deg, #fa709a 0%, #fee140 100%)","linear-gradient(135deg, #a8edea 0%, #fed6e3 100%)","linear-gradient(135deg, #d299c2 0%, #fef9d7 100%)","linear-gradient(135deg, #89f7fe 0%, #66a6ff 100%)","linear-gradient(135deg, #fddb92 0%, #d1fdff 100%)","linear-gradient(135deg, #9890e3 0%, #b1f4cf 100%)","linear-gradient(135deg, #ebc0fd 0%, #d9ded8 100%)","linear-gradient(135deg, #f6d365 0%, #fda085 100%)"],u={name:"IndicatorCard",props:{indicator:{type:Object,required:!0}},data:function(){return{imageError:!1}},computed:{isPaid:function(){return"free"!==this.indicator.pricing_type&&this.indicator.price>0},coverGradient:function(){var t=(this.indicator.id||0)%l.length;return l[t]},indicatorInitials:function(){var t=this.indicator.name||"I";if(/[\u4e00-\u9fa5]/.test(t))return t.slice(0,2);var e=t.split(/\s+/);return e.length>=2?(e[0][0]+e[1][0]).toUpperCase():t.slice(0,2).toUpperCase()},coverStyle:function(){return{background:!this.indicator.preview_image||this.imageError?this.coverGradient:"#f5f5f5"}}},methods:{formatRating:function(t){var e=parseFloat(t)||0;return e>0?e.toFixed(1):"-"},handleImageError:function(){this.imageError=!0}}},p=u,v=a(845),h=(0,v.A)(p,d,m,!1,null,"b59176ee",null),g=h.exports,f=function(){var t=this,e=t._self._c;return e("a-modal",{staticClass:"indicator-detail-modal",attrs:{visible:t.visible,title:null,footer:null,width:720,"body-style":{padding:0}},on:{cancel:function(e){return t.$emit("close")}}},[e("a-spin",{attrs:{spinning:t.loading}},[t.detail?e("div",{staticClass:"detail-container"},[e("div",{staticClass:"detail-header",style:t.headerStyle},[t.detail.preview_image?e("div",{staticClass:"header-cover"},[e("img",{attrs:{src:t.detail.preview_image,alt:t.detail.name},on:{error:function(e){t.imageError=!0}}})]):e("div",{staticClass:"header-cover default-cover"},[e("span",{staticClass:"cover-initials"},[t._v(t._s(t.indicatorInitials))])]),e("div",{staticClass:"header-info"},[e("h2",{staticClass:"indicator-name"},[t._v(t._s(t.detail.name))]),e("div",{staticClass:"indicator-meta"},[e("div",{staticClass:"author-info"},[e("a-avatar",{attrs:{src:t.detail.author.avatar,size:32}}),e("span",{staticClass:"author-name"},[t._v(t._s(t.detail.author.nickname||t.detail.author.username))])],1),e("div",{staticClass:"publish-time"},[t._v(" "+t._s(t.$t("community.publishedAt"))+": "+t._s(t.formatDate(t.detail.created_at))+" ")])]),e("div",{staticClass:"indicator-stats"},[e("a-statistic",{attrs:{title:t.$t("community.downloads"),value:t.detail.purchase_count||0},scopedSlots:t._u([{key:"prefix",fn:function(){return[e("a-icon",{attrs:{type:"download"}})]},proxy:!0}],null,!1,3253357727)}),e("a-statistic",{attrs:{title:t.$t("community.rating")},scopedSlots:t._u([{key:"formatter",fn:function(){return[e("a-rate",{style:{fontSize:"14px"},attrs:{value:t.detail.avg_rating,disabled:"","allow-half":""}}),e("span",{staticClass:"rating-text"},[t._v("("+t._s(t.detail.rating_count||0)+")")])]},proxy:!0}],null,!1,1010155712)}),e("a-statistic",{attrs:{title:t.$t("community.views"),value:t.detail.view_count||0},scopedSlots:t._u([{key:"prefix",fn:function(){return[e("a-icon",{attrs:{type:"eye"}})]},proxy:!0}],null,!1,3492011442)})],1)])]),e("div",{staticClass:"detail-body"},[e("div",{staticClass:"section"},[e("h3",[t._v(t._s(t.$t("community.description")))]),e("p",{staticClass:"description"},[t._v(t._s(t.detail.description||t.$t("community.noDescription")))])]),t.performance?e("div",{staticClass:"section"},[e("h3",[t._v(t._s(t.$t("community.performance")))]),e("div",{staticClass:"performance-grid"},[e("div",{staticClass:"perf-item"},[e("div",{staticClass:"perf-label"},[t._v(t._s(t.$t("community.strategyCount")))]),e("div",{staticClass:"perf-value"},[t._v(t._s(t.performance.strategy_count))])]),e("div",{staticClass:"perf-item"},[e("div",{staticClass:"perf-label"},[t._v(t._s(t.$t("community.tradeCount")))]),e("div",{staticClass:"perf-value"},[t._v(t._s(t.performance.trade_count))])]),e("div",{staticClass:"perf-item"},[e("div",{staticClass:"perf-label"},[t._v(t._s(t.$t("community.winRate")))]),e("div",{staticClass:"perf-value",class:t.performance.win_rate>=50?"positive":"negative"},[t._v(" "+t._s(t.performance.win_rate)+"% ")])]),e("div",{staticClass:"perf-item"},[e("div",{staticClass:"perf-label"},[t._v(t._s(t.$t("community.totalProfit")))]),e("div",{staticClass:"perf-value",class:t.performance.total_profit>=0?"positive":"negative"},[t._v(" "+t._s(t.performance.total_profit>=0?"+":"")+t._s(t.performance.total_profit)+" ")])])])]):t._e(),e("div",{staticClass:"section"},[e("h3",[t._v(t._s(t.$t("community.reviews"))+" ("+t._s(t.comments.total||0)+")")]),e("comment-list",{attrs:{comments:t.comments.items,loading:t.commentsLoading,"can-comment":t.detail.is_purchased&&!t.detail.is_own&&!t.myComment,"current-user-id":t.currentUserId,"my-comment":t.myComment,total:t.comments.total},on:{"add-comment":t.handleAddComment,"update-comment":t.handleUpdateComment,"load-more":t.loadMoreComments}})],1)]),e("div",{staticClass:"detail-footer"},[e("div",{staticClass:"price-info"},[t.detail.vip_free?e("a-tag",{staticStyle:{"margin-right":"8px"},attrs:{color:"gold"}},[t._v(" "+t._s(t.$t("community.vipFree"))+" ")]):t._e(),"free"===t.detail.pricing_type||t.detail.price<=0?e("span",{staticClass:"free-badge"},[t._v(" "+t._s(t.$t("community.free"))+" ")]):e("span",{staticClass:"price-badge"},[t._v(" "+t._s(t.detail.price)+" "+t._s(t.$t("community.credits"))+" ")])],1),e("div",{staticClass:"action-buttons"},[t.detail.is_own?e("a-button",{attrs:{disabled:""}},[t._v(" "+t._s(t.$t("community.myIndicator"))+" ")]):t.detail.is_purchased?e("a-button",{attrs:{type:"primary"},on:{click:t.goToUse}},[e("a-icon",{attrs:{type:"code"}}),t._v(" "+t._s(t.$t("community.useNow"))+" ")],1):e("a-button",{attrs:{type:"primary",loading:t.purchasing},on:{click:t.handlePurchase}},[e("a-icon",{attrs:{type:"shopping-cart"}}),t._v(" "+t._s("free"===t.detail.pricing_type||t.detail.price<=0?t.$t("community.getFree"):t.$t("community.buyNow"))+" ")],1)],1)])]):t._e()])],1)},y=[],_=a(9133),w=function(){var t=this,e=t._self._c;return e("div",{staticClass:"comment-list"},[t.canComment||t.isEditing?e("div",{staticClass:"comment-form"},[t.isEditing?e("div",{staticClass:"form-header"},[e("span",{staticClass:"edit-label"},[t._v(t._s(t.$t("community.editComment")))]),e("a-button",{attrs:{type:"link",size:"small"},on:{click:t.cancelEdit}},[t._v(t._s(t.$t("community.cancelEdit")))])],1):t._e(),e("div",{staticClass:"rating-input"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("community.yourRating"))+":")]),e("a-rate",{model:{value:t.formData.rating,callback:function(e){t.$set(t.formData,"rating",e)},expression:"formData.rating"}})],1),e("a-textarea",{attrs:{placeholder:t.$t("community.commentPlaceholder"),rows:3,"max-length":500},model:{value:t.formData.content,callback:function(e){t.$set(t.formData,"content",e)},expression:"formData.content"}}),e("div",{staticClass:"form-actions"},[e("span",{staticClass:"char-count"},[t._v(t._s(t.formData.content.length)+"/500")]),e("a-button",{attrs:{type:"primary",size:"small",loading:t.submitting},on:{click:t.submitComment}},[t._v(" "+t._s(t.isEditing?t.$t("community.updateComment"):t.$t("community.submitComment"))+" ")])],1)],1):!t.myComment||t.canComment||t.isEditing?t._e():e("div",{staticClass:"my-comment-hint"},[e("a-icon",{attrs:{type:"check-circle",theme:"twoTone","two-tone-color":"#52c41a"}}),e("span",[t._v(t._s(t.$t("community.alreadyCommented")))]),e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.startEdit(t.myComment)}}},[t._v(" "+t._s(t.$t("community.editMyComment"))+" ")])],1),e("a-spin",{attrs:{spinning:t.loading}},[0===t.comments.length?e("div",{staticClass:"empty-comments"},[e("a-empty",{attrs:{description:t.$t("community.noComments")}})],1):e("div",{staticClass:"comments"},t._l(t.comments,function(a){return e("div",{key:a.id,staticClass:"comment-item",class:{"is-mine":a.user&&a.user.id===t.currentUserId}},[e("div",{staticClass:"comment-header"},[e("a-avatar",{attrs:{src:a.user&&a.user.avatar,size:36}}),e("div",{staticClass:"comment-meta"},[e("div",{staticClass:"user-name"},[t._v(" "+t._s(a.user&&a.user.nickname)+" "),a.user&&a.user.id===t.currentUserId?e("a-tag",{attrs:{size:"small",color:"blue"}},[t._v(t._s(t.$t("community.me")))]):t._e()],1),e("div",{staticClass:"comment-info"},[e("a-rate",{style:{fontSize:"12px"},attrs:{value:a.rating,disabled:""}}),e("span",{staticClass:"comment-time"},[t._v(t._s(t.formatTime(a.created_at)))]),a.updated_at&&a.updated_at!==a.created_at?e("span",{staticClass:"edited-tag"},[t._v(" ("+t._s(t.$t("community.edited"))+") ")]):t._e()],1)]),a.user&&a.user.id===t.currentUserId?e("div",{staticClass:"comment-actions"},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.startEdit(a)}}},[e("a-icon",{attrs:{type:"edit"}})],1)],1):t._e()],1),e("div",{staticClass:"comment-content"},[t._v(t._s(a.content))])])}),0)]),t.hasMore?e("div",{staticClass:"load-more"},[e("a-button",{attrs:{type:"link"},on:{click:function(e){return t.$emit("load-more")}}},[t._v(" "+t._s(t.$t("community.loadMore"))+" ")])],1):t._e()],1)},C=[],$={name:"CommentList",props:{comments:{type:Array,default:function(){return[]}},total:{type:Number,default:0},loading:{type:Boolean,default:!1},canComment:{type:Boolean,default:!1},currentUserId:{type:[Number,String],default:null},myComment:{type:Object,default:null}},data:function(){return{submitting:!1,isEditing:!1,editingCommentId:null,formData:{rating:5,content:""}}},computed:{hasMore:function(){return this.comments.length=2?(e[0][0]+e[1][0]).toUpperCase():t.slice(0,2).toUpperCase()}},watch:{visible:function(t){t&&this.indicatorId?(this.loadDetail(),this.loadPerformance(),this.loadComments(1),this.loadMyComment()):this.resetData()}},methods:{resetData:function(){this.detail=null,this.performance=null,this.comments={items:[],total:0,page:1},this.myComment=null},loadDetail:function(){var t=this;return(0,r.A)((0,s.A)().m(function e(){var a;return(0,s.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loading=!0,e.p=1,e.n=2,(0,I.Ay)({url:"/api/community/indicators/".concat(t.indicatorId),method:"get"});case 2:a=e.v,1===a.code?t.detail=a.data:t.$message.error(a.msg||t.$t("community.loadFailed")),e.n=4;break;case 3:e.p=3,e.v,t.$message.error(t.$t("community.loadFailed"));case 4:return e.p=4,t.loading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},loadPerformance:function(){var t=this;return(0,r.A)((0,s.A)().m(function e(){var a;return(0,s.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,I.Ay)({url:"/api/community/indicators/".concat(t.indicatorId,"/performance"),method:"get"});case 1:a=e.v,1===a.code&&(t.performance=a.data),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadComments:function(){var t=arguments,e=this;return(0,r.A)((0,s.A)().m(function a(){var i,n;return(0,s.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return i=t.length>0&&void 0!==t[0]?t[0]:1,e.commentsLoading=!0,a.p=1,a.n=2,(0,I.Ay)({url:"/api/community/indicators/".concat(e.indicatorId,"/comments"),method:"get",params:{page:i,page_size:10}});case 2:n=a.v,1===n.code&&(e.comments.items=1===i?n.data.items:[].concat((0,_.A)(e.comments.items),(0,_.A)(n.data.items)),e.comments.total=n.data.total,e.comments.page=i),a.n=4;break;case 3:a.p=3,a.v;case 4:return a.p=4,e.commentsLoading=!1,a.f(4);case 5:return a.a(2)}},a,null,[[1,3,4,5]])}))()},loadMoreComments:function(){this.comments.items.lengthi&&(t.pagination.current=i)):t.$message.error(a.msg||t.$t("community.loadFailed")),e.n=4;break;case 3:e.p=3,e.v,t.$message.error(t.$t("community.loadFailed"));case 4:return e.p=4,t.loading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},loadMyPurchases:function(){var t=this;return(0,r.A)((0,s.A)().m(function e(){var a;return(0,s.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.purchasesLoading=!0,e.p=1,e.n=2,(0,I.Ay)({url:"/api/community/my-purchases",method:"get",params:{page:1,page_size:50}});case 2:a=e.v,1===a.code&&(t.myPurchases=a.data.items||[]),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.p=4,t.purchasesLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleSearch:function(){this.pagination.current=1,this.loadIndicators()},handleFilterChange:function(){this.pagination.current=1,this.loadIndicators()},handlePageChange:function(t){this.pagination.current=Number(t||1),this.loadIndicators()},openDetail:function(t){this.selectedIndicatorId=t.id,this.detailVisible=!0},openDetailById:function(t){this.showMyPurchases=!1,this.selectedIndicatorId=t,this.detailVisible=!0},handlePurchased:function(){this.loadIndicators()},goToCreate:function(){this.$router.push("/indicator-analysis")},goToUse:function(){this.showMyPurchases=!1,this.$router.push("/indicator-analysis")},formatDate:function(t){return t?new Date(t).toLocaleString():"-"},handleTabChange:function(t){"review"===t&&(this.loadPendingIndicators(),this.loadReviewStats())},loadReviewStats:function(){var t=this;return(0,r.A)((0,s.A)().m(function e(){var a;return(0,s.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,I.Ay)({url:"/api/community/admin/review-stats",method:"get"});case 1:a=e.v,1===a.code&&(t.reviewStats=a.data||{pending:0,approved:0,rejected:0}),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadPendingIndicators:function(){var t=this;return(0,r.A)((0,s.A)().m(function e(){var a;return(0,s.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.reviewLoading=!0,e.p=1,e.n=2,(0,I.Ay)({url:"/api/community/admin/pending-indicators",method:"get",params:{page:t.reviewPagination.current,page_size:t.reviewPagination.pageSize,review_status:t.reviewFilter}});case 2:a=e.v,1===a.code&&(t.pendingIndicators=a.data.items||[],t.reviewPagination.total=Number(a.data.total||0)),e.n=4;break;case 3:e.p=3,e.v,t.$message.error(t.$t("community.admin.loadFailed"));case 4:return e.p=4,t.reviewLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleReviewPageChange:function(t){this.reviewPagination.current=Number(t||1),this.loadPendingIndicators()},toggleCode:function(t){this.$set(this.expandedCodes,t,!this.expandedCodes[t])},getStatusColor:function(t){var e={pending:"orange",approved:"green",rejected:"red"};return e[t]||"default"},getStatusText:function(t){var e={pending:this.$t("community.admin.pending"),approved:this.$t("community.admin.approved"),rejected:this.$t("community.admin.rejected")};return e[t]||t},handleReview:function(t,e){this.reviewingIndicator=t,this.reviewAction=e,this.reviewNote="",this.showReviewModal=!0},submitReview:function(){var t=this;return(0,r.A)((0,s.A)().m(function e(){var a;return(0,s.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.reviewingIndicator){e.n=1;break}return e.a(2);case 1:return e.p=1,e.n=2,(0,I.Ay)({url:"/api/community/admin/indicators/".concat(t.reviewingIndicator.id,"/review"),method:"post",data:{action:t.reviewAction,note:t.reviewNote}});case 2:a=e.v,1===a.code?(t.$message.success(t.$t("community.admin.reviewSuccess")),t.showReviewModal=!1,t.loadPendingIndicators(),t.loadReviewStats()):t.$message.error(a.msg||t.$t("community.admin.reviewFailed")),e.n=4;break;case 3:e.p=3,e.v,t.$message.error(t.$t("community.admin.reviewFailed"));case 4:return e.a(2)}},e,null,[[1,3]])}))()},handleUnpublish:function(t){var e=this;return(0,r.A)((0,s.A)().m(function a(){return(0,s.A)().w(function(a){while(1)switch(a.n){case 0:e.$confirm({title:e.$t("community.admin.unpublishConfirm"),content:e.$t("community.admin.unpublishHint"),okText:e.$t("community.admin.confirm"),cancelText:e.$t("community.admin.cancel"),onOk:function(){var a=(0,r.A)((0,s.A)().m(function a(){var i;return(0,s.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,I.Ay)({url:"/api/community/admin/indicators/".concat(t.id,"/unpublish"),method:"post",data:{note:""}});case 1:i=a.v,1===i.code?(e.$message.success(e.$t("community.admin.unpublishSuccess")),e.loadPendingIndicators(),e.loadReviewStats()):e.$message.error(i.msg||e.$t("community.admin.unpublishFailed")),a.n=3;break;case 2:a.p=2,a.v,e.$message.error(e.$t("community.admin.unpublishFailed"));case 3:return a.a(2)}},a,null,[[0,2]])}));function i(){return a.apply(this,arguments)}return i}()});case 1:return a.a(2)}},a)}))()},handleDelete:function(t){var e=this;return(0,r.A)((0,s.A)().m(function a(){var i;return(0,s.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,I.Ay)({url:"/api/community/admin/indicators/".concat(t.id),method:"delete"});case 1:i=a.v,1===i.code?(e.$message.success(e.$t("community.admin.deleteSuccess")),e.loadPendingIndicators(),e.loadReviewStats()):e.$message.error(i.msg||e.$t("community.admin.deleteFailed")),a.n=3;break;case 2:a.p=2,a.v,e.$message.error(e.$t("community.admin.deleteFailed"));case 3:return a.a(2)}},a,null,[[0,2]])}))()}}},z=T,M=(0,v.A)(z,i,n,!1,null,"f59e48f0",null),F=M.exports}}]); \ No newline at end of file +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[635],{55635:function(t,e,a){a.r(e),a.d(e,{default:function(){return F}});var i=function(){var t=this,e=t._self._c;return e("div",{staticClass:"indicator-community-container",class:{"theme-dark":t.isDarkTheme}},[t.isAdmin?e("a-tabs",{staticClass:"admin-tabs",on:{change:t.handleTabChange},model:{value:t.activeTab,callback:function(e){t.activeTab=e},expression:"activeTab"}},[e("a-tab-pane",{key:"market",attrs:{tab:t.$t("community.title")}}),e("a-tab-pane",{key:"review"},[e("template",{slot:"tab"},[e("a-badge",{attrs:{count:t.reviewStats.pending,offset:[10,0]}},[t._v(" "+t._s(t.$t("community.admin.reviewTab"))+" ")])],1)],2)],1):t._e(),e("div",{directives:[{name:"show",rawName:"v-show",value:"market"===t.activeTab,expression:"activeTab === 'market'"}],staticClass:"market-header"},[e("div",{staticClass:"header-left"},[e("h2",{staticClass:"page-title"},[e("a-icon",{attrs:{type:"shop"}}),t._v(" "+t._s(t.$t("community.title"))+" ")],1)]),e("div",{staticClass:"header-right"},[e("a-input-search",{staticStyle:{width:"240px"},attrs:{placeholder:t.$t("community.searchPlaceholder"),"allow-clear":""},on:{search:t.handleSearch,pressEnter:t.handleSearch},model:{value:t.filters.keyword,callback:function(e){t.$set(t.filters,"keyword",e)},expression:"filters.keyword"}}),e("a-radio-group",{attrs:{"button-style":"solid"},on:{change:t.handleFilterChange},model:{value:t.filters.pricingType,callback:function(e){t.$set(t.filters,"pricingType",e)},expression:"filters.pricingType"}},[e("a-radio-button",{attrs:{value:""}},[t._v(t._s(t.$t("community.all")))]),e("a-radio-button",{attrs:{value:"free"}},[t._v(t._s(t.$t("community.freeOnly")))]),e("a-radio-button",{attrs:{value:"paid"}},[t._v(t._s(t.$t("community.paidOnly")))])],1),e("a-select",{staticStyle:{width:"140px"},on:{change:t.handleFilterChange},model:{value:t.filters.sortBy,callback:function(e){t.$set(t.filters,"sortBy",e)},expression:"filters.sortBy"}},[e("a-select-option",{attrs:{value:"newest"}},[t._v(t._s(t.$t("community.sortNewest")))]),e("a-select-option",{attrs:{value:"hot"}},[t._v(t._s(t.$t("community.sortHot")))]),e("a-select-option",{attrs:{value:"rating"}},[t._v(t._s(t.$t("community.sortRating")))]),e("a-select-option",{attrs:{value:"price_asc"}},[t._v(t._s(t.$t("community.sortPriceLow")))]),e("a-select-option",{attrs:{value:"price_desc"}},[t._v(t._s(t.$t("community.sortPriceHigh")))])],1),e("a-button",{attrs:{type:"link"},on:{click:function(e){t.showMyPurchases=!0}}},[e("a-icon",{attrs:{type:"shopping"}}),t._v(" "+t._s(t.$t("community.myPurchases"))+" ")],1)],1)]),"market"===t.activeTab?[e("a-spin",{attrs:{spinning:t.loading}},[0!==t.indicators.length||t.loading?e("div",{staticClass:"indicator-grid"},t._l(t.indicators,function(a){return e("indicator-card",{key:a.id,attrs:{indicator:a},on:{click:function(e){return t.openDetail(a)}}})}),1):e("div",{staticClass:"empty-state"},[e("a-empty",{attrs:{description:t.$t("community.noIndicators")}},[e("a-button",{attrs:{type:"primary"},on:{click:t.goToCreate}},[t._v(" "+t._s(t.$t("community.createFirst"))+" ")])],1)],1)]),t.pagination.total>0?e("div",{staticClass:"pagination-wrapper"},[e("a-pagination",{attrs:{current:t.pagination.current,total:t.pagination.total,"page-size":t.pagination.pageSize,"show-total":function(e){return"".concat(t.$t("community.total")," ").concat(e," ").concat(t.$t("community.items"))},"show-quick-jumper":""},on:{change:t.handlePageChange}})],1):t._e()]:t._e(),"review"===t.activeTab&&t.isAdmin?[e("div",{staticClass:"review-panel"},[e("div",{staticClass:"review-header"},[e("a-radio-group",{attrs:{"button-style":"solid"},on:{change:t.loadPendingIndicators},model:{value:t.reviewFilter,callback:function(e){t.reviewFilter=e},expression:"reviewFilter"}},[e("a-radio-button",{attrs:{value:"pending"}},[e("a-badge",{attrs:{count:t.reviewStats.pending,offset:[8,-2],"number-style":{backgroundColor:"#faad14"}}},[t._v(" "+t._s(t.$t("community.admin.pending"))+" ")])],1),e("a-radio-button",{attrs:{value:"approved"}},[t._v(" "+t._s(t.$t("community.admin.approved"))+" ("+t._s(t.reviewStats.approved)+") ")]),e("a-radio-button",{attrs:{value:"rejected"}},[t._v(" "+t._s(t.$t("community.admin.rejected"))+" ("+t._s(t.reviewStats.rejected)+") ")])],1)],1),e("a-spin",{attrs:{spinning:t.reviewLoading}},[0!==t.pendingIndicators.length||t.reviewLoading?e("div",{staticClass:"review-list"},t._l(t.pendingIndicators,function(a){return e("div",{key:a.id,staticClass:"review-item"},[e("div",{staticClass:"review-item-header"},[e("div",{staticClass:"item-info"},[e("span",{staticClass:"item-name"},[t._v(t._s(a.name))]),"free"===a.pricing_type?e("a-tag",{attrs:{color:"green"}},[t._v(t._s(t.$t("community.free")))]):e("a-tag",{attrs:{color:"orange"}},[t._v(t._s(a.price)+" "+t._s(t.$t("community.credits")))]),e("a-tag",{attrs:{color:t.getStatusColor(a.review_status)}},[t._v(t._s(t.getStatusText(a.review_status)))])],1),e("div",{staticClass:"item-author"},[e("a-avatar",{attrs:{src:a.author.avatar,size:"small"}}),e("span",[t._v(t._s(a.author.nickname||a.author.username))]),e("span",{staticClass:"item-time"},[t._v(t._s(t.formatDate(a.created_at)))])],1)]),e("div",{staticClass:"review-item-body"},[e("div",{staticClass:"item-desc"},[t._v(t._s(a.description||t.$t("community.admin.noDescription")))]),a.code?e("div",{staticClass:"item-code"},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.toggleCode(a.id)}}},[e("a-icon",{attrs:{type:t.expandedCodes[a.id]?"up":"down"}}),t._v(" "+t._s(t.$t("community.admin.viewCode"))+" ")],1),t.expandedCodes[a.id]?e("pre",{staticClass:"code-preview"},[t._v(t._s(a.code))]):t._e()],1):t._e(),a.review_note?e("div",{staticClass:"review-note"},[e("a-icon",{attrs:{type:"info-circle"}}),t._v(" "+t._s(t.$t("community.admin.note"))+": "+t._s(a.review_note)+" ")],1):t._e()]),e("div",{staticClass:"review-item-actions"},["pending"===a.review_status?[e("a-button",{attrs:{type:"primary",size:"small"},on:{click:function(e){return t.handleReview(a,"approve")}}},[e("a-icon",{attrs:{type:"check"}}),t._v(" "+t._s(t.$t("community.admin.approve"))+" ")],1),e("a-button",{attrs:{type:"danger",size:"small"},on:{click:function(e){return t.handleReview(a,"reject")}}},[e("a-icon",{attrs:{type:"close"}}),t._v(" "+t._s(t.$t("community.admin.reject"))+" ")],1)]:"approved"===a.review_status?[e("a-button",{attrs:{size:"small"},on:{click:function(e){return t.handleUnpublish(a)}}},[e("a-icon",{attrs:{type:"stop"}}),t._v(" "+t._s(t.$t("community.admin.unpublish"))+" ")],1)]:t._e(),e("a-popconfirm",{attrs:{title:t.$t("community.admin.deleteConfirm")},on:{confirm:function(e){return t.handleDelete(a)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}}),t._v(" "+t._s(t.$t("community.admin.delete"))+" ")],1)],1)],2)])}),0):e("div",{staticClass:"empty-state"},[e("a-empty",{attrs:{description:t.$t("community.admin.noItems")}})],1)]),t.reviewPagination.total>0?e("div",{staticClass:"pagination-wrapper"},[e("a-pagination",{attrs:{current:t.reviewPagination.current,total:t.reviewPagination.total,"page-size":t.reviewPagination.pageSize,"show-total":function(e){return"".concat(t.$t("community.total")," ").concat(e," ").concat(t.$t("community.items"))}},on:{change:t.handleReviewPageChange}})],1):t._e()],1)]:t._e(),e("a-modal",{attrs:{title:"approve"===t.reviewAction?t.$t("community.admin.approveTitle"):t.$t("community.admin.rejectTitle"),"ok-text":"approve"===t.reviewAction?t.$t("community.admin.approve"):t.$t("community.admin.reject"),"ok-button-props":{props:{type:"approve"===t.reviewAction?"primary":"danger"}}},on:{ok:t.submitReview},model:{value:t.showReviewModal,callback:function(e){t.showReviewModal=e},expression:"showReviewModal"}},[e("a-form",{attrs:{layout:"vertical"}},[e("a-form-item",{attrs:{label:t.$t("community.admin.noteLabel")}},[e("a-textarea",{attrs:{placeholder:t.$t("community.admin.notePlaceholder"),rows:3},model:{value:t.reviewNote,callback:function(e){t.reviewNote=e},expression:"reviewNote"}})],1)],1)],1),e("indicator-detail",{attrs:{visible:t.detailVisible,"indicator-id":t.selectedIndicatorId,"current-user-id":t.currentUserId},on:{close:function(e){t.detailVisible=!1},purchased:t.handlePurchased}}),e("a-modal",{attrs:{title:t.$t("community.myPurchases"),footer:null,width:"600px"},model:{value:t.showMyPurchases,callback:function(e){t.showMyPurchases=e},expression:"showMyPurchases"}},[e("a-spin",{attrs:{spinning:t.purchasesLoading}},[0===t.myPurchases.length?e("div",{staticClass:"empty-purchases"},[e("a-empty",{attrs:{description:t.$t("community.noPurchases")}})],1):e("a-list",{attrs:{"data-source":t.myPurchases,"item-layout":"horizontal"},scopedSlots:t._u([{key:"renderItem",fn:function(a){return e("a-list-item",{scopedSlots:t._u([{key:"actions",fn:function(){return[e("a-button",{attrs:{type:"link",size:"small"},on:{click:t.goToUse}},[t._v(" "+t._s(t.$t("community.useNow"))+" ")])]},proxy:!0}])},[e("a-list-item-meta",{scopedSlots:t._u([{key:"title",fn:function(){return[e("a",{on:{click:function(e){return t.openDetailById(a.indicator.id)}}},[t._v(t._s(a.indicator.name))])]},proxy:!0},{key:"description",fn:function(){return[e("div",[t._v(t._s(t.$t("community.purchasedFrom"))+": "+t._s(a.seller.nickname))]),e("div",[t._v(t._s(t.$t("community.purchaseTime"))+": "+t._s(t.formatDate(a.purchase_time)))])]},proxy:!0}],null,!0)})],1)}}])})],1)],1)],2)},n=[],s=a(81127),r=a(56252),o=a(76338),c=a(95353),d=function(){var t=this,e=t._self._c;return e("a-card",{staticClass:"indicator-card",attrs:{hoverable:"","body-style":{padding:"12px"}},on:{click:function(e){return t.$emit("click",t.indicator)}}},[e("div",{staticClass:"card-cover",style:t.coverStyle},[t.indicator.preview_image&&!t.imageError?e("img",{attrs:{src:t.indicator.preview_image,alt:t.indicator.name},on:{error:t.handleImageError}}):e("div",{staticClass:"default-cover",style:{background:t.coverGradient}},[e("span",{staticClass:"cover-title"},[t._v(t._s(t.indicatorInitials))]),e("span",{staticClass:"cover-subtitle"},[t._v(t._s(t.indicator.name))])]),e("div",{staticClass:"price-tag",class:t.isPaid?"paid":"free"},[t._v(" "+t._s(t.isPaid?"".concat(t.indicator.price," ").concat(t.$t("community.credits")):t.$t("community.free"))+" ")]),t.indicator.vip_free?e("div",{staticClass:"vip-free-tag"},[t._v(" "+t._s(t.$t("community.vipFree"))+" ")]):t._e(),t.indicator.is_own?e("div",{staticClass:"own-tag"},[t._v(" "+t._s(t.$t("community.myIndicator"))+" ")]):t.indicator.is_purchased?e("div",{staticClass:"purchased-tag"},[e("a-icon",{attrs:{type:"check-circle"}}),t._v(" "+t._s(t.$t("community.purchased"))+" ")],1):t._e()]),e("div",{staticClass:"card-content"},[e("h3",{staticClass:"card-title",attrs:{title:t.indicator.name}},[t._v(t._s(t.indicator.name))]),e("p",{staticClass:"card-desc"},[t._v(t._s(t.indicator.description||t.$t("community.noDescription")))]),e("div",{staticClass:"card-author"},[e("a-avatar",{attrs:{src:t.indicator.author.avatar,size:24}}),e("span",{staticClass:"author-name"},[t._v(t._s(t.indicator.author.nickname||t.indicator.author.username))])],1),e("div",{staticClass:"card-stats"},[e("span",{staticClass:"stat-item"},[e("a-icon",{attrs:{type:"download"}}),t._v(" "+t._s(t.indicator.purchase_count||0)+" ")],1),e("span",{staticClass:"stat-item"},[e("a-icon",{style:{color:"#faad14"},attrs:{type:"star",theme:"filled"}}),t._v(" "+t._s(t.formatRating(t.indicator.avg_rating))+" ")],1),e("span",{staticClass:"stat-item"},[e("a-icon",{attrs:{type:"eye"}}),t._v(" "+t._s(t.indicator.view_count||0)+" ")],1)])])])},m=[],l=["linear-gradient(135deg, #667eea 0%, #764ba2 100%)","linear-gradient(135deg, #f093fb 0%, #f5576c 100%)","linear-gradient(135deg, #4facfe 0%, #00f2fe 100%)","linear-gradient(135deg, #43e97b 0%, #38f9d7 100%)","linear-gradient(135deg, #fa709a 0%, #fee140 100%)","linear-gradient(135deg, #a8edea 0%, #fed6e3 100%)","linear-gradient(135deg, #d299c2 0%, #fef9d7 100%)","linear-gradient(135deg, #89f7fe 0%, #66a6ff 100%)","linear-gradient(135deg, #fddb92 0%, #d1fdff 100%)","linear-gradient(135deg, #9890e3 0%, #b1f4cf 100%)","linear-gradient(135deg, #ebc0fd 0%, #d9ded8 100%)","linear-gradient(135deg, #f6d365 0%, #fda085 100%)"],u={name:"IndicatorCard",props:{indicator:{type:Object,required:!0}},data:function(){return{imageError:!1}},computed:{isPaid:function(){return"free"!==this.indicator.pricing_type&&this.indicator.price>0},coverGradient:function(){var t=(this.indicator.id||0)%l.length;return l[t]},indicatorInitials:function(){var t=this.indicator.name||"I";if(/[\u4e00-\u9fa5]/.test(t))return t.slice(0,2);var e=t.split(/\s+/);return e.length>=2?(e[0][0]+e[1][0]).toUpperCase():t.slice(0,2).toUpperCase()},coverStyle:function(){return{background:!this.indicator.preview_image||this.imageError?this.coverGradient:"#f5f5f5"}}},methods:{formatRating:function(t){var e=parseFloat(t)||0;return e>0?e.toFixed(1):"-"},handleImageError:function(){this.imageError=!0}}},p=u,v=a(845),h=(0,v.A)(p,d,m,!1,null,"b59176ee",null),g=h.exports,f=function(){var t=this,e=t._self._c;return e("a-modal",{staticClass:"indicator-detail-modal",attrs:{visible:t.visible,title:null,footer:null,width:720,"body-style":{padding:0}},on:{cancel:function(e){return t.$emit("close")}}},[e("a-spin",{attrs:{spinning:t.loading}},[t.detail?e("div",{staticClass:"detail-container"},[e("div",{staticClass:"detail-header",style:t.headerStyle},[t.detail.preview_image?e("div",{staticClass:"header-cover"},[e("img",{attrs:{src:t.detail.preview_image,alt:t.detail.name},on:{error:function(e){t.imageError=!0}}})]):e("div",{staticClass:"header-cover default-cover"},[e("span",{staticClass:"cover-initials"},[t._v(t._s(t.indicatorInitials))])]),e("div",{staticClass:"header-info"},[e("h2",{staticClass:"indicator-name"},[t._v(t._s(t.detail.name))]),e("div",{staticClass:"indicator-meta"},[e("div",{staticClass:"author-info"},[e("a-avatar",{attrs:{src:t.detail.author.avatar,size:32}}),e("span",{staticClass:"author-name"},[t._v(t._s(t.detail.author.nickname||t.detail.author.username))])],1),e("div",{staticClass:"publish-time"},[t._v(" "+t._s(t.$t("community.publishedAt"))+": "+t._s(t.formatDate(t.detail.created_at))+" ")])]),e("div",{staticClass:"indicator-stats"},[e("a-statistic",{attrs:{title:t.$t("community.downloads"),value:t.detail.purchase_count||0},scopedSlots:t._u([{key:"prefix",fn:function(){return[e("a-icon",{attrs:{type:"download"}})]},proxy:!0}],null,!1,3253357727)}),e("a-statistic",{attrs:{title:t.$t("community.rating")},scopedSlots:t._u([{key:"formatter",fn:function(){return[e("a-rate",{style:{fontSize:"14px"},attrs:{value:t.detail.avg_rating,disabled:"","allow-half":""}}),e("span",{staticClass:"rating-text"},[t._v("("+t._s(t.detail.rating_count||0)+")")])]},proxy:!0}],null,!1,1010155712)}),e("a-statistic",{attrs:{title:t.$t("community.views"),value:t.detail.view_count||0},scopedSlots:t._u([{key:"prefix",fn:function(){return[e("a-icon",{attrs:{type:"eye"}})]},proxy:!0}],null,!1,3492011442)})],1)])]),e("div",{staticClass:"detail-body"},[e("div",{staticClass:"section"},[e("h3",[t._v(t._s(t.$t("community.description")))]),e("p",{staticClass:"description"},[t._v(t._s(t.detail.description||t.$t("community.noDescription")))])]),t.performance?e("div",{staticClass:"section"},[e("h3",[t._v(t._s(t.$t("community.performance")))]),e("div",{staticClass:"performance-grid"},[e("div",{staticClass:"perf-item"},[e("div",{staticClass:"perf-label"},[t._v(t._s(t.$t("community.strategyCount")))]),e("div",{staticClass:"perf-value"},[t._v(t._s(t.performance.strategy_count))])]),e("div",{staticClass:"perf-item"},[e("div",{staticClass:"perf-label"},[t._v(t._s(t.$t("community.tradeCount")))]),e("div",{staticClass:"perf-value"},[t._v(t._s(t.performance.trade_count))])]),e("div",{staticClass:"perf-item"},[e("div",{staticClass:"perf-label"},[t._v(t._s(t.$t("community.winRate")))]),e("div",{staticClass:"perf-value",class:t.performance.win_rate>=50?"positive":"negative"},[t._v(" "+t._s(t.performance.win_rate)+"% ")])]),e("div",{staticClass:"perf-item"},[e("div",{staticClass:"perf-label"},[t._v(t._s(t.$t("community.totalProfit")))]),e("div",{staticClass:"perf-value",class:t.performance.total_profit>=0?"positive":"negative"},[t._v(" "+t._s(t.performance.total_profit>=0?"+":"")+t._s(t.performance.total_profit)+" ")])])])]):t._e(),e("div",{staticClass:"section"},[e("h3",[t._v(t._s(t.$t("community.reviews"))+" ("+t._s(t.comments.total||0)+")")]),e("comment-list",{attrs:{comments:t.comments.items,loading:t.commentsLoading,"can-comment":t.detail.is_purchased&&!t.detail.is_own&&!t.myComment,"current-user-id":t.currentUserId,"my-comment":t.myComment,total:t.comments.total},on:{"add-comment":t.handleAddComment,"update-comment":t.handleUpdateComment,"load-more":t.loadMoreComments}})],1)]),e("div",{staticClass:"detail-footer"},[e("div",{staticClass:"price-info"},[t.detail.vip_free?e("a-tag",{staticStyle:{"margin-right":"8px"},attrs:{color:"gold"}},[t._v(" "+t._s(t.$t("community.vipFree"))+" ")]):t._e(),"free"===t.detail.pricing_type||t.detail.price<=0?e("span",{staticClass:"free-badge"},[t._v(" "+t._s(t.$t("community.free"))+" ")]):e("span",{staticClass:"price-badge"},[t._v(" "+t._s(t.detail.price)+" "+t._s(t.$t("community.credits"))+" ")])],1),e("div",{staticClass:"action-buttons"},[t.detail.is_own?e("a-button",{attrs:{disabled:""}},[t._v(" "+t._s(t.$t("community.myIndicator"))+" ")]):t.detail.is_purchased?e("a-button",{attrs:{type:"primary"},on:{click:t.goToUse}},[e("a-icon",{attrs:{type:"code"}}),t._v(" "+t._s(t.$t("community.useNow"))+" ")],1):e("a-button",{attrs:{type:"primary",loading:t.purchasing},on:{click:t.handlePurchase}},[e("a-icon",{attrs:{type:"shopping-cart"}}),t._v(" "+t._s("free"===t.detail.pricing_type||t.detail.price<=0?t.$t("community.getFree"):t.$t("community.buyNow"))+" ")],1)],1)])]):t._e()])],1)},y=[],_=a(2403),w=function(){var t=this,e=t._self._c;return e("div",{staticClass:"comment-list"},[t.canComment||t.isEditing?e("div",{staticClass:"comment-form"},[t.isEditing?e("div",{staticClass:"form-header"},[e("span",{staticClass:"edit-label"},[t._v(t._s(t.$t("community.editComment")))]),e("a-button",{attrs:{type:"link",size:"small"},on:{click:t.cancelEdit}},[t._v(t._s(t.$t("community.cancelEdit")))])],1):t._e(),e("div",{staticClass:"rating-input"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("community.yourRating"))+":")]),e("a-rate",{model:{value:t.formData.rating,callback:function(e){t.$set(t.formData,"rating",e)},expression:"formData.rating"}})],1),e("a-textarea",{attrs:{placeholder:t.$t("community.commentPlaceholder"),rows:3,"max-length":500},model:{value:t.formData.content,callback:function(e){t.$set(t.formData,"content",e)},expression:"formData.content"}}),e("div",{staticClass:"form-actions"},[e("span",{staticClass:"char-count"},[t._v(t._s(t.formData.content.length)+"/500")]),e("a-button",{attrs:{type:"primary",size:"small",loading:t.submitting},on:{click:t.submitComment}},[t._v(" "+t._s(t.isEditing?t.$t("community.updateComment"):t.$t("community.submitComment"))+" ")])],1)],1):!t.myComment||t.canComment||t.isEditing?t._e():e("div",{staticClass:"my-comment-hint"},[e("a-icon",{attrs:{type:"check-circle",theme:"twoTone","two-tone-color":"#52c41a"}}),e("span",[t._v(t._s(t.$t("community.alreadyCommented")))]),e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.startEdit(t.myComment)}}},[t._v(" "+t._s(t.$t("community.editMyComment"))+" ")])],1),e("a-spin",{attrs:{spinning:t.loading}},[0===t.comments.length?e("div",{staticClass:"empty-comments"},[e("a-empty",{attrs:{description:t.$t("community.noComments")}})],1):e("div",{staticClass:"comments"},t._l(t.comments,function(a){return e("div",{key:a.id,staticClass:"comment-item",class:{"is-mine":a.user&&a.user.id===t.currentUserId}},[e("div",{staticClass:"comment-header"},[e("a-avatar",{attrs:{src:a.user&&a.user.avatar,size:36}}),e("div",{staticClass:"comment-meta"},[e("div",{staticClass:"user-name"},[t._v(" "+t._s(a.user&&a.user.nickname)+" "),a.user&&a.user.id===t.currentUserId?e("a-tag",{attrs:{size:"small",color:"blue"}},[t._v(t._s(t.$t("community.me")))]):t._e()],1),e("div",{staticClass:"comment-info"},[e("a-rate",{style:{fontSize:"12px"},attrs:{value:a.rating,disabled:""}}),e("span",{staticClass:"comment-time"},[t._v(t._s(t.formatTime(a.created_at)))]),a.updated_at&&a.updated_at!==a.created_at?e("span",{staticClass:"edited-tag"},[t._v(" ("+t._s(t.$t("community.edited"))+") ")]):t._e()],1)]),a.user&&a.user.id===t.currentUserId?e("div",{staticClass:"comment-actions"},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.startEdit(a)}}},[e("a-icon",{attrs:{type:"edit"}})],1)],1):t._e()],1),e("div",{staticClass:"comment-content"},[t._v(t._s(a.content))])])}),0)]),t.hasMore?e("div",{staticClass:"load-more"},[e("a-button",{attrs:{type:"link"},on:{click:function(e){return t.$emit("load-more")}}},[t._v(" "+t._s(t.$t("community.loadMore"))+" ")])],1):t._e()],1)},C=[],$={name:"CommentList",props:{comments:{type:Array,default:function(){return[]}},total:{type:Number,default:0},loading:{type:Boolean,default:!1},canComment:{type:Boolean,default:!1},currentUserId:{type:[Number,String],default:null},myComment:{type:Object,default:null}},data:function(){return{submitting:!1,isEditing:!1,editingCommentId:null,formData:{rating:5,content:""}}},computed:{hasMore:function(){return this.comments.length=2?(e[0][0]+e[1][0]).toUpperCase():t.slice(0,2).toUpperCase()}},watch:{visible:function(t){t&&this.indicatorId?(this.loadDetail(),this.loadPerformance(),this.loadComments(1),this.loadMyComment()):this.resetData()}},methods:{resetData:function(){this.detail=null,this.performance=null,this.comments={items:[],total:0,page:1},this.myComment=null},loadDetail:function(){var t=this;return(0,r.A)((0,s.A)().m(function e(){var a;return(0,s.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loading=!0,e.p=1,e.n=2,(0,I.Ay)({url:"/api/community/indicators/".concat(t.indicatorId),method:"get"});case 2:a=e.v,1===a.code?t.detail=a.data:t.$message.error(a.msg||t.$t("community.loadFailed")),e.n=4;break;case 3:e.p=3,e.v,t.$message.error(t.$t("community.loadFailed"));case 4:return e.p=4,t.loading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},loadPerformance:function(){var t=this;return(0,r.A)((0,s.A)().m(function e(){var a;return(0,s.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,I.Ay)({url:"/api/community/indicators/".concat(t.indicatorId,"/performance"),method:"get"});case 1:a=e.v,1===a.code&&(t.performance=a.data),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadComments:function(){var t=arguments,e=this;return(0,r.A)((0,s.A)().m(function a(){var i,n;return(0,s.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return i=t.length>0&&void 0!==t[0]?t[0]:1,e.commentsLoading=!0,a.p=1,a.n=2,(0,I.Ay)({url:"/api/community/indicators/".concat(e.indicatorId,"/comments"),method:"get",params:{page:i,page_size:10}});case 2:n=a.v,1===n.code&&(e.comments.items=1===i?n.data.items:[].concat((0,_.A)(e.comments.items),(0,_.A)(n.data.items)),e.comments.total=n.data.total,e.comments.page=i),a.n=4;break;case 3:a.p=3,a.v;case 4:return a.p=4,e.commentsLoading=!1,a.f(4);case 5:return a.a(2)}},a,null,[[1,3,4,5]])}))()},loadMoreComments:function(){this.comments.items.lengthi&&(t.pagination.current=i)):t.$message.error(a.msg||t.$t("community.loadFailed")),e.n=4;break;case 3:e.p=3,e.v,t.$message.error(t.$t("community.loadFailed"));case 4:return e.p=4,t.loading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},loadMyPurchases:function(){var t=this;return(0,r.A)((0,s.A)().m(function e(){var a;return(0,s.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.purchasesLoading=!0,e.p=1,e.n=2,(0,I.Ay)({url:"/api/community/my-purchases",method:"get",params:{page:1,page_size:50}});case 2:a=e.v,1===a.code&&(t.myPurchases=a.data.items||[]),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.p=4,t.purchasesLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleSearch:function(){this.pagination.current=1,this.loadIndicators()},handleFilterChange:function(){this.pagination.current=1,this.loadIndicators()},handlePageChange:function(t){this.pagination.current=Number(t||1),this.loadIndicators()},openDetail:function(t){this.selectedIndicatorId=t.id,this.detailVisible=!0},openDetailById:function(t){this.showMyPurchases=!1,this.selectedIndicatorId=t,this.detailVisible=!0},handlePurchased:function(){this.loadIndicators()},goToCreate:function(){this.$router.push("/indicator-analysis")},goToUse:function(){this.showMyPurchases=!1,this.$router.push("/indicator-analysis")},formatDate:function(t){return t?new Date(t).toLocaleString():"-"},handleTabChange:function(t){"review"===t&&(this.loadPendingIndicators(),this.loadReviewStats())},loadReviewStats:function(){var t=this;return(0,r.A)((0,s.A)().m(function e(){var a;return(0,s.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,I.Ay)({url:"/api/community/admin/review-stats",method:"get"});case 1:a=e.v,1===a.code&&(t.reviewStats=a.data||{pending:0,approved:0,rejected:0}),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadPendingIndicators:function(){var t=this;return(0,r.A)((0,s.A)().m(function e(){var a;return(0,s.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.reviewLoading=!0,e.p=1,e.n=2,(0,I.Ay)({url:"/api/community/admin/pending-indicators",method:"get",params:{page:t.reviewPagination.current,page_size:t.reviewPagination.pageSize,review_status:t.reviewFilter}});case 2:a=e.v,1===a.code&&(t.pendingIndicators=a.data.items||[],t.reviewPagination.total=Number(a.data.total||0)),e.n=4;break;case 3:e.p=3,e.v,t.$message.error(t.$t("community.admin.loadFailed"));case 4:return e.p=4,t.reviewLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleReviewPageChange:function(t){this.reviewPagination.current=Number(t||1),this.loadPendingIndicators()},toggleCode:function(t){this.$set(this.expandedCodes,t,!this.expandedCodes[t])},getStatusColor:function(t){var e={pending:"orange",approved:"green",rejected:"red"};return e[t]||"default"},getStatusText:function(t){var e={pending:this.$t("community.admin.pending"),approved:this.$t("community.admin.approved"),rejected:this.$t("community.admin.rejected")};return e[t]||t},handleReview:function(t,e){this.reviewingIndicator=t,this.reviewAction=e,this.reviewNote="",this.showReviewModal=!0},submitReview:function(){var t=this;return(0,r.A)((0,s.A)().m(function e(){var a;return(0,s.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.reviewingIndicator){e.n=1;break}return e.a(2);case 1:return e.p=1,e.n=2,(0,I.Ay)({url:"/api/community/admin/indicators/".concat(t.reviewingIndicator.id,"/review"),method:"post",data:{action:t.reviewAction,note:t.reviewNote}});case 2:a=e.v,1===a.code?(t.$message.success(t.$t("community.admin.reviewSuccess")),t.showReviewModal=!1,t.loadPendingIndicators(),t.loadReviewStats()):t.$message.error(a.msg||t.$t("community.admin.reviewFailed")),e.n=4;break;case 3:e.p=3,e.v,t.$message.error(t.$t("community.admin.reviewFailed"));case 4:return e.a(2)}},e,null,[[1,3]])}))()},handleUnpublish:function(t){var e=this;return(0,r.A)((0,s.A)().m(function a(){return(0,s.A)().w(function(a){while(1)switch(a.n){case 0:e.$confirm({title:e.$t("community.admin.unpublishConfirm"),content:e.$t("community.admin.unpublishHint"),okText:e.$t("community.admin.confirm"),cancelText:e.$t("community.admin.cancel"),onOk:function(){var a=(0,r.A)((0,s.A)().m(function a(){var i;return(0,s.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,I.Ay)({url:"/api/community/admin/indicators/".concat(t.id,"/unpublish"),method:"post",data:{note:""}});case 1:i=a.v,1===i.code?(e.$message.success(e.$t("community.admin.unpublishSuccess")),e.loadPendingIndicators(),e.loadReviewStats()):e.$message.error(i.msg||e.$t("community.admin.unpublishFailed")),a.n=3;break;case 2:a.p=2,a.v,e.$message.error(e.$t("community.admin.unpublishFailed"));case 3:return a.a(2)}},a,null,[[0,2]])}));function i(){return a.apply(this,arguments)}return i}()});case 1:return a.a(2)}},a)}))()},handleDelete:function(t){var e=this;return(0,r.A)((0,s.A)().m(function a(){var i;return(0,s.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,I.Ay)({url:"/api/community/admin/indicators/".concat(t.id),method:"delete"});case 1:i=a.v,1===i.code?(e.$message.success(e.$t("community.admin.deleteSuccess")),e.loadPendingIndicators(),e.loadReviewStats()):e.$message.error(i.msg||e.$t("community.admin.deleteFailed")),a.n=3;break;case 2:a.p=2,a.v,e.$message.error(e.$t("community.admin.deleteFailed"));case 3:return a.a(2)}},a,null,[[0,2]])}))()}}},z=T,M=(0,v.A)(z,i,n,!1,null,"f59e48f0",null),F=M.exports}}]); \ No newline at end of file diff --git a/frontend/dist/js/645.22e27101.js b/frontend/dist/js/645.22e27101.js new file mode 100644 index 0000000..5dd278a --- /dev/null +++ b/frontend/dist/js/645.22e27101.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[645],{8645:function(e,t,a){a.r(t),a.d(t,{default:function(){return v}});var s=function(){var e=this,t=e._self._c;return t("div",{staticClass:"settings-page",class:{"theme-dark":e.isDarkTheme}},[e.showRestartTip?t("a-alert",{staticClass:"restart-alert",attrs:{type:"warning",showIcon:"",closable:""},on:{close:function(t){e.showRestartTip=!1}}},[t("template",{slot:"message"},[t("span",[e._v(e._s(e.$t("settings.restartRequired")))]),t("a-button",{attrs:{size:"small",type:"link"},on:{click:e.copyRestartCommand}},[e._v(" "+e._s(e.$t("settings.copyRestartCmd"))+" ")])],1)],2):e._e(),t("div",{staticClass:"settings-header"},[t("h2",{staticClass:"page-title"},[t("a-icon",{attrs:{type:"setting"}}),t("span",[e._v(e._s(e.$t("settings.title")))])],1),t("p",{staticClass:"page-desc"},[e._v(e._s(e.$t("settings.description")))])]),t("a-spin",{attrs:{spinning:e.loading}},[t("div",{staticClass:"settings-content"},[t("a-collapse",{staticClass:"settings-collapse",attrs:{bordered:!1},model:{value:e.activeKeys,callback:function(t){e.activeKeys=t},expression:"activeKeys"}},e._l(e.sortedSchema,function(a,s){return t("a-collapse-panel",{key:s},[t("template",{slot:"header"},[t("span",{staticClass:"panel-header"},[t("a-icon",{staticClass:"panel-icon-left",attrs:{type:a.icon||e.getGroupIcon(s)}}),t("span",{staticClass:"panel-title"},[e._v(e._s(e.getGroupTitle(s,a.title)))])],1)]),"ai"===s?t("div",{staticClass:"openrouter-balance-card"},[t("a-card",{attrs:{size:"small",bordered:!1}},[t("div",{staticClass:"balance-header"},[t("span",{staticClass:"balance-title"},[t("a-icon",{staticStyle:{"margin-right":"6px"},attrs:{type:"wallet"}}),e._v(" "+e._s(e.$t("settings.openrouterBalance")||"OpenRouter 账户余额")+" ")],1),t("a-button",{attrs:{size:"small",type:"primary",ghost:"",loading:e.balanceLoading},on:{click:e.queryOpenRouterBalance}},[t("a-icon",{attrs:{type:"sync"}}),e._v(" "+e._s(e.$t("settings.queryBalance")||"查询余额")+" ")],1)],1),e.openrouterBalance?t("div",{staticClass:"balance-info"},[t("a-row",{attrs:{gutter:16}},[t("a-col",{attrs:{span:8}},[t("a-statistic",{attrs:{title:e.$t("settings.balanceUsage")||"已使用",value:e.openrouterBalance.usage,prefix:"$",precision:4,"value-style":{color:"#cf1322"}}})],1),t("a-col",{attrs:{span:8}},[t("a-statistic",{attrs:{title:e.$t("settings.balanceRemaining")||"剩余额度",value:null!==e.openrouterBalance.limit_remaining?e.openrouterBalance.limit_remaining:"∞",prefix:null!==e.openrouterBalance.limit_remaining?"$":"",precision:null!==e.openrouterBalance.limit_remaining?4:0,"value-style":{color:null!==e.openrouterBalance.limit_remaining&&e.openrouterBalance.limit_remaining<1?"#cf1322":"#3f8600"}}})],1),t("a-col",{attrs:{span:8}},[t("a-statistic",{attrs:{title:e.$t("settings.balanceLimit")||"总限额",value:null!==e.openrouterBalance.limit?e.openrouterBalance.limit:"∞",prefix:null!==e.openrouterBalance.limit?"$":"",precision:null!==e.openrouterBalance.limit?2:0}})],1)],1),e.openrouterBalance.is_free_tier?t("div",{staticClass:"free-tier-badge"},[t("a-tag",{attrs:{color:"blue"}},[e._v("Free Tier")])],1):e._e()],1):t("div",{staticClass:"balance-empty"},[t("a-icon",{staticStyle:{"margin-right":"6px"},attrs:{type:"info-circle"}}),e._v(" "+e._s(e.$t("settings.balanceNotQueried")||'点击"查询余额"获取账户信息')+" ")],1)])],1):e._e(),t("a-form",{staticClass:"settings-form",attrs:{form:e.form,layout:"vertical"}},[t("a-row",{attrs:{gutter:24}},e._l(a.items,function(a){return t("a-col",{key:a.key,attrs:{xs:24,sm:24,md:12,lg:12}},[t("a-form-item",[t("template",{slot:"label"},[t("span",{staticClass:"form-label-with-tooltip"},[t("span",{staticClass:"label-text"},[e._v(e._s(e.getItemLabel(s,a)))]),a.description?t("a-tooltip",{attrs:{placement:"top"}},[t("template",{slot:"title"},[e._v(" "+e._s(e.getItemDescription(s,a))+" ")]),t("a-icon",{staticClass:"help-icon",attrs:{type:"question-circle"}})],2):e._e(),a.link?t("a",{staticClass:"api-link",attrs:{href:a.link,target:"_blank",rel:"noopener noreferrer"},on:{click:function(e){e.stopPropagation()}}},[t("a-icon",{attrs:{type:"link"}}),e._v(" "+e._s(e.getLinkText(a.link_text))+" ")],1):e._e()],1)]),"text"===a.type?[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:[a.key,{initialValue:e.getFieldValue(s,a.key)}],expression:"[item.key, { initialValue: getFieldValue(groupKey, item.key) }]"}],attrs:{placeholder:a.default?"".concat(e.$t("settings.default"),": ").concat(a.default):"",allowClear:""}})]:"password"===a.type?[t("div",{staticClass:"password-field"},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:[a.key,{initialValue:e.getFieldValue(s,a.key)}],expression:"[item.key, { initialValue: getFieldValue(groupKey, item.key) }]"}],attrs:{type:e.passwordVisible[a.key]?"text":"password",placeholder:e.$t("settings.inputApiKey"),allowClear:""}},[t("a-icon",{staticStyle:{cursor:"pointer"},attrs:{slot:"suffix",type:e.passwordVisible[a.key]?"eye":"eye-invisible"},on:{click:function(t){return e.togglePasswordVisible(a.key)}},slot:"suffix"})],1)],1)]:"number"===a.type?[t("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:[a.key,{initialValue:e.getNumberValue(s,a.key,a.default)}],expression:"[item.key, { initialValue: getNumberValue(groupKey, item.key, item.default) }]"}],staticStyle:{width:"100%"},attrs:{placeholder:a.default?"".concat(e.$t("settings.default"),": ").concat(a.default):""}})]:"boolean"===a.type?[t("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:[a.key,{valuePropName:"checked",initialValue:e.getBoolValue(s,a.key,a.default)}],expression:"[item.key, { valuePropName: 'checked', initialValue: getBoolValue(groupKey, item.key, item.default) }]"}]})]:"select"===a.type?[t("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:[a.key,{initialValue:e.getFieldValue(s,a.key)||a.default}],expression:"[item.key, { initialValue: getFieldValue(groupKey, item.key) || item.default }]"}],attrs:{placeholder:a.default?"".concat(e.$t("settings.default"),": ").concat(a.default):e.$t("settings.pleaseSelect")}},e._l(e.getSelectOptions(a.options),function(a){return t("a-select-option",{key:a.value,attrs:{value:a.value}},[e._v(" "+e._s(a.label)+" ")])}),1)]:e._e(),a.default&&"boolean"!==a.type&&"password"!==a.type?t("div",{staticClass:"field-default"},[e._v(" "+e._s(e.$t("settings.default"))+": "+e._s(a.default)+" ")]):e._e()],2)],1)}),1)],1)],2)}),1)],1)]),t("div",{staticClass:"settings-footer"},[t("a-button",{attrs:{disabled:e.saving},on:{click:e.handleReset}},[t("a-icon",{attrs:{type:"undo"}}),e._v(" "+e._s(e.$t("settings.reset"))+" ")],1),t("a-button",{attrs:{type:"primary",loading:e.saving},on:{click:e.handleSave}},[t("a-icon",{attrs:{type:"save"}}),e._v(" "+e._s(e.$t("settings.save"))+" ")],1)],1)],1)},i=[],n=a(57532),r=a(81127),l=a(56252),o=a(44735),c=a(15863),u=a(53003),p=a(55434),d={name:"Settings",mixins:[p.t],data:function(){return{loading:!1,saving:!1,schema:{},values:{},activeKeys:["auth","ai","trading"],passwordVisible:{},showRestartTip:!1,balanceLoading:!1,openrouterBalance:null}},computed:{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},sortedSchema:function(){var e=Object.entries(this.schema);e.sort(function(e,t){var a=e[1].order||999,s=t[1].order||999;return a-s});for(var t={},a=0,s=e;a0?a("span",{staticClass:"group-status running"},[e._v(" "+e._s(t.runningCount)+" "+e._s(e.$t("trading-assistant.status.running"))+" ")]):e._e(),t.stoppedCount>0?a("span",{staticClass:"group-status stopped"},[e._v(" "+e._s(t.stoppedCount)+" "+e._s(e.$t("trading-assistant.status.stopped"))+" ")]):e._e(),a("a-dropdown",{attrs:{getPopupContainer:e.getDropdownContainer,trigger:["click"]}},[a("a-menu",{attrs:{slot:"overlay"},on:{click:function(a){var i=a.key;return e.handleGroupMenuClick(i,t)}},slot:"overlay"},[a("a-menu-item",{key:"startAll"},[a("a-icon",{attrs:{type:"play-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.startAll"))+" ")],1),a("a-menu-item",{key:"stopAll"},[a("a-icon",{attrs:{type:"pause-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.stopAll"))+" ")],1),a("a-menu-divider"),a("a-menu-item",{key:"deleteAll",staticClass:"danger-item"},[a("a-icon",{attrs:{type:"delete"}}),e._v(" "+e._s(e.$t("trading-assistant.deleteAll"))+" ")],1)],1),a("a-button",{attrs:{type:"link",icon:"more",size:"small"}})],1)],1)]),a("div",{directives:[{name:"show",rawName:"v-show",value:!e.collapsedGroups[t.id],expression:"!collapsedGroups[group.id]"}],staticClass:"strategy-group-content"},e._l(t.strategies,function(t){return a("div",{key:t.id,class:["strategy-list-item",{active:e.selectedStrategy&&e.selectedStrategy.id===t.id}],on:{click:function(a){return e.handleSelectStrategy(t)}}},[a("div",{staticClass:"strategy-item-content"},[a("div",{staticClass:"strategy-item-header"},[a("div",{staticClass:"strategy-name-wrapper"},["strategy"===e.groupByMode?[t.trading_config&&t.trading_config.symbol?a("span",{staticClass:"info-item"},[a("a-icon",{attrs:{type:"dollar"}}),e._v(" "+e._s(t.trading_config.symbol)+" ")],1):e._e()]:[a("span",{staticClass:"info-item strategy-name-text"},[a("a-icon",{attrs:{type:"thunderbolt"}}),e._v(" "+e._s(t.displayInfo?t.displayInfo.strategyName:t.strategy_name)+" ")],1),t.displayInfo&&t.displayInfo.timeframe?a("a-tag",{attrs:{size:"small",color:"cyan"}},[a("a-icon",{staticStyle:{"margin-right":"2px"},attrs:{type:"clock-circle"}}),e._v(" "+e._s(t.displayInfo.timeframe)+" ")],1):e._e(),t.displayInfo&&t.displayInfo.indicatorName&&"-"!==t.displayInfo.indicatorName?a("a-tag",{attrs:{size:"small",color:"purple"}},[a("a-icon",{staticStyle:{"margin-right":"2px"},attrs:{type:"line-chart"}}),e._v(" "+e._s(t.displayInfo.indicatorName)+" ")],1):e._e()],a("span",{staticClass:"status-label",class:[t.status?"status-".concat(t.status):"",{"status-stopped":"stopped"===t.status}]},[e._v(" "+e._s(e.getStatusText(t.status))+" ")])],2)])]),a("div",{staticClass:"strategy-item-actions",on:{click:function(t){t.stopPropagation()}}},[a("a-dropdown",{attrs:{getPopupContainer:e.getDropdownContainer,trigger:["click"]}},[a("a-menu",{attrs:{slot:"overlay"},on:{click:function(a){var i=a.key;return e.handleMenuClick(i,t)}},slot:"overlay"},["stopped"===t.status?a("a-menu-item",{key:"start"},[a("a-icon",{attrs:{type:"play-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.startStrategy"))+" ")],1):e._e(),"running"===t.status?a("a-menu-item",{key:"stop"},[a("a-icon",{attrs:{type:"pause-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.stopStrategy"))+" ")],1):e._e(),a("a-menu-divider"),a("a-menu-item",{key:"edit"},[a("a-icon",{attrs:{type:"edit"}}),e._v(" "+e._s(e.$t("trading-assistant.editStrategy"))+" ")],1),a("a-menu-divider"),a("a-menu-item",{key:"delete",staticClass:"danger-item"},[a("a-icon",{attrs:{type:"delete"}}),e._v(" "+e._s(e.$t("trading-assistant.deleteStrategy"))+" ")],1)],1),a("a-button",{attrs:{type:"link",icon:"more",size:"small"}})],1)],1)])}),0)])}),e._l(e.groupedStrategies.ungrouped,function(t){return a("div",{key:t.id,class:["strategy-list-item",{active:e.selectedStrategy&&e.selectedStrategy.id===t.id}],on:{click:function(a){return e.handleSelectStrategy(t)}}},[a("div",{staticClass:"strategy-item-content"},[a("div",{staticClass:"strategy-item-header"},[a("div",{staticClass:"strategy-name-wrapper"},[t.exchange_config&&t.exchange_config.exchange_id?a("a-tag",{staticClass:"exchange-tag",attrs:{color:e.getExchangeTagColor(t.exchange_config.exchange_id),size:"small"}},[a("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"bank"}}),e._v(" "+e._s(e.getExchangeDisplayName(t.exchange_config.exchange_id))+" ")],1):e._e(),a("span",{staticClass:"strategy-name"},[e._v(e._s(t.strategy_name))]),"PromptBasedStrategy"===t.strategy_type?a("a-tag",{staticClass:"strategy-type-tag",attrs:{color:"purple",size:"small"}},[a("a-icon",{staticStyle:{"margin-right":"2px"},attrs:{type:"robot"}}),e._v(" AI ")],1):e._e()],1)]),a("div",{staticClass:"strategy-item-info"},[t.trading_config&&t.trading_config.symbol?a("span",{staticClass:"info-item"},[a("a-icon",{attrs:{type:"dollar"}}),e._v(" "+e._s(t.trading_config.symbol)+" ")],1):e._e(),a("span",{staticClass:"status-label",class:[t.status?"status-".concat(t.status):"",{"status-stopped":"stopped"===t.status}]},[e._v(" "+e._s(e.getStatusText(t.status))+" ")])])]),a("div",{staticClass:"strategy-item-actions",on:{click:function(t){t.stopPropagation()}}},[a("a-dropdown",{attrs:{getPopupContainer:e.getDropdownContainer,trigger:["click"]}},[a("a-menu",{attrs:{slot:"overlay"},on:{click:function(a){var i=a.key;return e.handleMenuClick(i,t)}},slot:"overlay"},["stopped"===t.status?a("a-menu-item",{key:"start"},[a("a-icon",{attrs:{type:"play-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.startStrategy"))+" ")],1):e._e(),"running"===t.status?a("a-menu-item",{key:"stop"},[a("a-icon",{attrs:{type:"pause-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.stopStrategy"))+" ")],1):e._e(),a("a-menu-divider"),a("a-menu-item",{key:"edit"},[a("a-icon",{attrs:{type:"edit"}}),e._v(" "+e._s(e.$t("trading-assistant.editStrategy"))+" ")],1),a("a-menu-divider"),a("a-menu-item",{key:"delete",staticClass:"danger-item"},[a("a-icon",{attrs:{type:"delete"}}),e._v(" "+e._s(e.$t("trading-assistant.deleteStrategy"))+" ")],1)],1),a("a-button",{attrs:{type:"link",icon:"more",size:"small"}})],1)],1)])})],2):a("a-empty",{attrs:{description:e.$t("trading-assistant.noStrategy")}})],1)],1)],1),a("a-col",{staticClass:"strategy-detail-col",attrs:{xs:24,sm:24,md:14,lg:16,xl:16}},[e.selectedStrategy?a("div",{staticClass:"strategy-detail-panel"},[a("a-card",{staticClass:"strategy-header-card",attrs:{bordered:!1}},[a("div",{staticClass:"strategy-header"},[a("div",{staticClass:"header-left"},[a("div",{staticClass:"strategy-title-row"},[a("h3",{staticClass:"strategy-title"},[e._v(e._s(e.selectedStrategy.strategy_name))]),a("div",{staticClass:"status-badge",class:["status-".concat(e.selectedStrategy.status)]},[a("span",{staticClass:"status-dot"}),e._v(" "+e._s(e.getStatusText(e.selectedStrategy.status))+" ")])]),a("div",{staticClass:"key-stats-grid"},[e.selectedStrategy.initial_capital||e.selectedStrategy.trading_config&&e.selectedStrategy.trading_config.initial_capital?a("div",{staticClass:"stat-card"},[a("div",{staticClass:"stat-icon investment"},[a("a-icon",{attrs:{type:"wallet"}})],1),a("div",{staticClass:"stat-content"},[a("div",{staticClass:"stat-label"},[e._v(e._s(e.$t("trading-assistant.detail.totalInvestment")))]),a("div",{staticClass:"stat-value"},[e._v("$"+e._s(parseFloat(e.selectedStrategy.initial_capital||(null===(t=e.selectedStrategy.trading_config)||void 0===t?void 0:t.initial_capital)||0).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})))])])]):e._e(),null!==e.currentEquity?a("div",{staticClass:"stat-card"},[a("div",{staticClass:"stat-icon equity"},[a("a-icon",{attrs:{type:"fund"}})],1),a("div",{staticClass:"stat-content"},[a("div",{staticClass:"stat-label"},[e._v(e._s(e.$t("trading-assistant.detail.currentEquity")))]),a("div",{staticClass:"stat-value",class:e.getEquityColorClass},[e._v(e._s(e.formatCurrency(e.currentEquity)))])])]):e._e(),null!==e.totalPnl?a("div",{staticClass:"stat-card pnl-card",class:{profit:e.totalPnl>0,loss:e.totalPnl<0}},[a("div",{staticClass:"stat-icon pnl"},[a("a-icon",{attrs:{type:e.totalPnl>=0?"rise":"fall"}})],1),a("div",{staticClass:"stat-content"},[a("div",{staticClass:"stat-label"},[e._v(e._s(e.$t("trading-assistant.detail.totalPnl")))]),a("div",{staticClass:"stat-value",class:e.getPnlColorClass},[e._v(" "+e._s(e.formatPnl(e.totalPnl))+" "),a("span",{staticClass:"pnl-percent"},[e._v("("+e._s(e.formatPnlPercent(e.totalPnlPercent))+")")])])])]):e._e()]),a("div",{staticClass:"strategy-tags"},[e.selectedStrategy.trading_config?a("div",{staticClass:"tag-item"},[a("a-icon",{attrs:{type:"stock"}}),a("span",[e._v(e._s(e.selectedStrategy.trading_config.symbol))])],1):e._e(),e.selectedStrategy.indicator_config&&e.selectedStrategy.indicator_config.indicator_name?a("div",{staticClass:"tag-item"},[a("a-icon",{attrs:{type:"line-chart"}}),a("span",[e._v(e._s(e.selectedStrategy.indicator_config.indicator_name))])],1):e._e(),e.selectedStrategy.trading_config?a("div",{staticClass:"tag-item"},[a("a-icon",{attrs:{type:"thunderbolt"}}),a("span",[e._v(e._s(e.selectedStrategy.trading_config.leverage||1)+"x")])],1):e._e(),e.selectedStrategy.trading_config&&e.selectedStrategy.trading_config.trade_direction?a("div",{staticClass:"tag-item"},[a("a-icon",{attrs:{type:"swap"}}),a("span",[e._v(e._s(e.getTradeDirectionText(e.selectedStrategy.trading_config.trade_direction)))])],1):e._e(),e.selectedStrategy.trading_config&&e.selectedStrategy.trading_config.timeframe?a("div",{staticClass:"tag-item"},[a("a-icon",{attrs:{type:"clock-circle"}}),a("span",[e._v(e._s(e.selectedStrategy.trading_config.timeframe))])],1):e._e()])]),a("div",{staticClass:"header-right"},["stopped"===e.selectedStrategy.status?a("a-button",{staticClass:"action-btn start-btn",attrs:{type:"primary",size:"large"},on:{click:function(t){return e.handleStartStrategy(e.selectedStrategy.id)}}},[a("a-icon",{attrs:{type:"play-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.startStrategy"))+" ")],1):e._e(),"running"===e.selectedStrategy.status?a("a-button",{staticClass:"action-btn stop-btn",attrs:{type:"danger",size:"large"},on:{click:function(t){return e.handleStopStrategy(e.selectedStrategy.id)}}},[a("a-icon",{attrs:{type:"pause-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.stopStrategy"))+" ")],1):e._e()],1)])]),a("a-card",{staticClass:"strategy-content-card",attrs:{bordered:!1}},[a("a-tabs",{attrs:{defaultActiveKey:"positions"}},[a("a-tab-pane",{key:"positions",attrs:{tab:e.$t("trading-assistant.tabs.positions")}},[a("position-records",{attrs:{"strategy-id":e.selectedStrategy.id,"market-type":e.selectedStrategy.trading_config&&e.selectedStrategy.trading_config.market_type||"swap",leverage:e.selectedStrategy.trading_config&&e.selectedStrategy.trading_config.leverage||1,loading:e.loadingRecords}})],1),a("a-tab-pane",{key:"trades",attrs:{tab:e.$t("trading-assistant.tabs.tradingRecords")}},[a("trading-records",{attrs:{"strategy-id":e.selectedStrategy.id,loading:e.loadingRecords}})],1)],1)],1)],1):a("div",{staticClass:"empty-detail"},[a("a-empty",{attrs:{description:e.$t("trading-assistant.selectStrategy")}})],1)])],1),a("a-modal",{attrs:{visible:e.showFormModal,title:e.editingStrategy?e.$t("trading-assistant.editStrategy"):e.$t("trading-assistant.createStrategy"),width:e.isMobile?"95%":1100,confirmLoading:e.saving,maskClosable:!1,wrapClassName:e.isMobile?"mobile-modal":"",bodyStyle:{maxHeight:"70vh",overflowY:"auto"}},on:{ok:e.handleSubmit,cancel:e.handleCloseModal}},[a("a-spin",{attrs:{spinning:e.loadingIndicators}},[e.editingStrategy?e._e():a("div",{staticClass:"creation-mode-toggle"},[a("a-radio-group",{attrs:{size:"small","button-style":"solid"},model:{value:e.creationMode,callback:function(t){e.creationMode=t},expression:"creationMode"}},[a("a-radio-button",{attrs:{value:"simple"}},[a("a-icon",{attrs:{type:"rocket"}}),e._v(" "+e._s(e.$t("trading-assistant.form.simpleMode"))+" ")],1),a("a-radio-button",{attrs:{value:"advanced"}},[a("a-icon",{attrs:{type:"setting"}}),e._v(" "+e._s(e.$t("trading-assistant.form.advancedMode"))+" ")],1)],1),a("span",{staticClass:"mode-hint"},[e._v(e._s(e.isSimpleMode?e.$t("trading-assistant.form.simpleModeHint"):e.$t("trading-assistant.form.advancedModeHint")))])],1),a("a-steps",{staticClass:"steps-container",attrs:{current:e.displayCurrentStep}},[a("a-step",{attrs:{title:e.isSimpleMode&&!e.editingStrategy?e.$t("trading-assistant.form.simpleStep1"):e.$t("trading-assistant.form.step1")}}),e.isAdvancedMode||e.editingStrategy?a("a-step",{attrs:{title:e.$t("trading-assistant.form.step2Params")}}):e._e(),a("a-step",{attrs:{title:e.isSimpleMode&&!e.editingStrategy?e.$t("trading-assistant.form.simpleStep2"):e.$t("trading-assistant.form.step3Signal")}})],1),a("div",{staticClass:"form-container"},[a("div",{directives:[{name:"show",rawName:"v-show",value:0===e.currentStep,expression:"currentStep === 0"}],staticClass:"step-content"},["indicator"===e.strategyType?a("div",[a("a-form",{attrs:{form:e.form,layout:"vertical"}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.indicator")}},[a("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["indicator_id",{rules:[{required:!0,message:e.$t("trading-assistant.validation.indicatorRequired")}]}],expression:"['indicator_id', { rules: [{ required: true, message: $t('trading-assistant.validation.indicatorRequired') }] }]"}],attrs:{placeholder:e.$t("trading-assistant.placeholders.selectIndicator"),"show-search":"","filter-option":e.filterIndicatorOption,loading:e.loadingIndicators,getPopupContainer:function(t){return t.parentNode}},on:{focus:e.handleIndicatorSelectFocus,change:e.handleIndicatorChange}},e._l(e.availableIndicators,function(t){return a("a-select-option",{key:String(t.id),attrs:{value:String(t.id)}},[a("div",{staticClass:"indicator-option"},[a("span",{staticClass:"indicator-name"},[e._v(e._s(t.name))]),t.type?a("a-tag",{attrs:{size:"small",color:e.getIndicatorTypeColor(t.type)}},[e._v(" "+e._s(e.getIndicatorTypeName(t.type))+" ")]):e._e()],1)])}),1),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.indicatorHint"))+" ")])],1),e.selectedIndicator?a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.indicatorDescription")}},[a("div",{staticClass:"indicator-description"},[e._v(" "+e._s(e.selectedIndicator.description||e.$t("trading-assistant.form.noDescription"))+" ")])]):e._e(),e.indicatorParams.length>0?a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.indicatorParams")}},[a("div",{staticClass:"indicator-params-form"},[a("a-row",{attrs:{gutter:16}},e._l(e.indicatorParams,function(t){return a("a-col",{key:t.name,attrs:{xs:24,sm:12,md:8}},[a("div",{staticClass:"param-item"},[a("label",{staticClass:"param-label"},[e._v(" "+e._s(t.name)+" "),t.description?a("a-tooltip",{attrs:{title:t.description}},[a("a-icon",{staticStyle:{"margin-left":"4px",color:"#999"},attrs:{type:"question-circle"}})],1):e._e()],1),"int"===t.type?a("a-input-number",{staticStyle:{width:"100%"},attrs:{precision:0,size:"small"},model:{value:e.indicatorParamValues[t.name],callback:function(a){e.$set(e.indicatorParamValues,t.name,a)},expression:"indicatorParamValues[param.name]"}}):"float"===t.type?a("a-input-number",{staticStyle:{width:"100%"},attrs:{precision:4,size:"small"},model:{value:e.indicatorParamValues[t.name],callback:function(a){e.$set(e.indicatorParamValues,t.name,a)},expression:"indicatorParamValues[param.name]"}}):"bool"===t.type?a("a-switch",{attrs:{size:"small"},model:{value:e.indicatorParamValues[t.name],callback:function(a){e.$set(e.indicatorParamValues,t.name,a)},expression:"indicatorParamValues[param.name]"}}):a("a-input",{attrs:{size:"small"},model:{value:e.indicatorParamValues[t.name],callback:function(a){e.$set(e.indicatorParamValues,t.name,a)},expression:"indicatorParamValues[param.name]"}})],1)])}),1),a("div",{staticClass:"form-item-hint",staticStyle:{"margin-top":"8px"}},[e._v(" "+e._s(e.$t("trading-assistant.form.indicatorParamsHint"))+" ")])],1)]):e._e(),a("a-divider"),a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.strategyName")}},[a("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["strategy_name",{rules:[{required:!0,message:e.$t("trading-assistant.validation.strategyNameRequired")}]}],expression:"['strategy_name', { rules: [{ required: true, message: $t('trading-assistant.validation.strategyNameRequired') }] }]"}],attrs:{placeholder:e.$t("trading-assistant.placeholders.inputStrategyName")}})],1),e.isSimpleMode&&!e.editingStrategy?a("div",{staticClass:"simple-defaults-summary"},[a("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"info","show-icon":""},scopedSlots:e._u([{key:"message",fn:function(){return[a("span",[e._v(e._s(e.$t("trading-assistant.form.simpleDefaultsHint")))])]},proxy:!0},{key:"description",fn:function(){return[a("span",[e._v(" "+e._s(e.$t("trading-assistant.form.klinePeriod"))+": "),a("b",[e._v("15m")]),e._v(" · "+e._s(e.$t("trading-assistant.form.leverage"))+": "),a("b",[e._v("5x")]),e._v(" · "+e._s(e.$t("trading-assistant.form.marketType"))+": "),a("b",[e._v(e._s(e.$t("trading-assistant.form.marketTypeFutures")))]),e._v(" · "+e._s(e.$t("dashboard.indicator.backtest.field.stopLossPct"))+": "),a("b",[e._v("3%")]),e._v(" · "+e._s(e.$t("dashboard.indicator.backtest.field.takeProfitPct"))+": "),a("b",[e._v("6%")])])]},proxy:!0}],null,!1,39555864)}),a("a-button",{staticStyle:{padding:"0","margin-bottom":"12px"},attrs:{type:"link",size:"small"},on:{click:function(t){e.showAdvancedSettings=!e.showAdvancedSettings}}},[a("a-icon",{attrs:{type:e.showAdvancedSettings?"up":"down"}}),e._v(" "+e._s(e.showAdvancedSettings?e.$t("trading-assistant.form.hideAdvancedSettings"):e.$t("trading-assistant.form.showAdvancedSettings"))+" ")],1)],1):e._e(),a("div",{directives:[{name:"show",rawName:"v-show",value:e.isAdvancedMode||e.editingStrategy||e.showAdvancedSettings,expression:"isAdvancedMode || editingStrategy || showAdvancedSettings"}]},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.strategyType")}},[a("a-radio-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["cs_strategy_type",{initialValue:"single"}],expression:"['cs_strategy_type', { initialValue: 'single' }]"}],on:{change:e.handleStrategyTypeChange}},[a("a-radio",{attrs:{value:"single"}},[e._v(e._s(e.$t("trading-assistant.form.strategyTypeSingle")))]),a("a-radio",{attrs:{value:"cross_sectional"}},[e._v(e._s(e.$t("trading-assistant.form.strategyTypeCrossSectional")))])],1),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.strategyTypeHint"))+" ")])],1)],1),"cross_sectional"===e.form.getFieldValue("cs_strategy_type")?[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.symbolList")}},[a("a-select",{attrs:{mode:"multiple",placeholder:e.$t("trading-assistant.placeholders.selectSymbols"),"show-search":"","filter-option":e.filterWatchlistOptionWithAdd,loading:e.loadingWatchlist,getPopupContainer:function(t){return t.parentNode},maxTagCount:5},on:{change:e.handleCrossSectionalSymbolChange},model:{value:e.crossSectionalSymbols,callback:function(t){e.crossSectionalSymbols=t},expression:"crossSectionalSymbols"}},[e._l(e.watchlist,function(t){return a("a-select-option",{key:"".concat(t.market,":").concat(t.symbol),attrs:{value:"".concat(t.market,":").concat(t.symbol)}},[a("div",{staticClass:"symbol-option"},[a("a-tag",{staticStyle:{"margin-right":"8px","margin-bottom":"0"},attrs:{color:e.getMarketColor(t.market)}},[e._v(" "+e._s(t.market)+" ")]),a("span",{staticClass:"symbol-name"},[e._v(e._s(t.symbol))]),t.name?a("span",{staticClass:"symbol-name-extra"},[e._v(e._s(t.name))]):e._e()],1)])}),a("a-select-option",{key:"__add_symbol_option__",staticClass:"add-symbol-option",attrs:{value:"__add_symbol_option__"}},[a("div",{staticStyle:{width:"100%","text-align":"center",padding:"4px 0",color:"#1890ff",cursor:"pointer"}},[a("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"plus"}}),a("span",[e._v(e._s(e.$t("trading-assistant.form.addSymbol")))])],1)])],2),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.symbolListHint"))+" ")])],1),a("a-row",{attrs:{gutter:16}},[a("a-col",{attrs:{xs:24,sm:12}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.portfolioSize")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["portfolio_size",{initialValue:10,rules:[{required:!0,message:e.$t("trading-assistant.validation.portfolioSizeRequired")}]}],expression:"['portfolio_size', { initialValue: 10, rules: [{ required: true, message: $t('trading-assistant.validation.portfolioSizeRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:100,step:1}}),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.portfolioSizeHint"))+" ")])],1)],1),a("a-col",{attrs:{xs:24,sm:12}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.longRatio")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["long_ratio",{initialValue:.5,rules:[{required:!0,message:e.$t("trading-assistant.validation.longRatioRequired")}]}],expression:"['long_ratio', { initialValue: 0.5, rules: [{ required: true, message: $t('trading-assistant.validation.longRatioRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:1,step:.1,precision:2}}),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.longRatioHint"))+" ")])],1)],1)],1),a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.rebalanceFrequency")}},[a("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["rebalance_frequency",{initialValue:"daily"}],expression:"['rebalance_frequency', { initialValue: 'daily' }]"}],staticStyle:{width:"100%"}},[a("a-select-option",{attrs:{value:"daily"}},[e._v(e._s(e.$t("trading-assistant.form.rebalanceDaily")))]),a("a-select-option",{attrs:{value:"weekly"}},[e._v(e._s(e.$t("trading-assistant.form.rebalanceWeekly")))]),a("a-select-option",{attrs:{value:"monthly"}},[e._v(e._s(e.$t("trading-assistant.form.rebalanceMonthly")))])],1),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.rebalanceFrequencyHint"))+" ")])],1)]:e._e(),"cross_sectional"!==e.form.getFieldValue("cs_strategy_type")?a("a-form-item",{attrs:{label:e.isEditMode?e.$t("trading-assistant.form.symbol"):e.$t("trading-assistant.form.symbols")}},[e.isEditMode?a("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["symbol",{rules:[{required:!0,message:e.$t("trading-assistant.validation.symbolRequired")}]}],expression:"['symbol', { rules: [{ required: true, message: $t('trading-assistant.validation.symbolRequired') }] }]"}],attrs:{placeholder:e.$t("trading-assistant.placeholders.selectSymbol"),"show-search":"","filter-option":e.filterWatchlistOption,loading:e.loadingWatchlist,getPopupContainer:function(t){return t.parentNode}},on:{change:e.handleWatchlistSymbolChange}},[e._l(e.watchlist,function(t){return a("a-select-option",{key:"".concat(t.market,":").concat(t.symbol),attrs:{value:"".concat(t.market,":").concat(t.symbol)}},[a("div",{staticClass:"symbol-option"},[a("a-tag",{staticStyle:{"margin-right":"8px","margin-bottom":"0"},attrs:{color:e.getMarketColor(t.market)}},[e._v(" "+e._s(t.market)+" ")]),a("span",{staticClass:"symbol-name"},[e._v(e._s(t.symbol))]),t.name?a("span",{staticClass:"symbol-name-extra"},[e._v(e._s(t.name))]):e._e()],1)])}),a("a-select-option",{key:"__add_symbol_option__",staticClass:"add-symbol-option",attrs:{value:"__add_symbol_option__"}},[a("div",{staticStyle:{width:"100%","text-align":"center",padding:"4px 0",color:"#1890ff",cursor:"pointer"}},[a("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"plus"}}),a("span",[e._v(e._s(e.$t("trading-assistant.form.addSymbol")))])],1)])],2):a("a-select",{attrs:{mode:"multiple",placeholder:e.$t("trading-assistant.placeholders.selectSymbols"),"show-search":"","filter-option":e.filterWatchlistOptionWithAdd,loading:e.loadingWatchlist,getPopupContainer:function(t){return t.parentNode},maxTagCount:3},on:{change:e.handleMultiSymbolChangeWithAdd},model:{value:e.selectedSymbols,callback:function(t){e.selectedSymbols=t},expression:"selectedSymbols"}},[e._l(e.watchlist,function(t){return a("a-select-option",{key:"".concat(t.market,":").concat(t.symbol),attrs:{value:"".concat(t.market,":").concat(t.symbol)}},[a("div",{staticClass:"symbol-option"},[a("a-tag",{staticStyle:{"margin-right":"8px","margin-bottom":"0"},attrs:{color:e.getMarketColor(t.market)}},[e._v(" "+e._s(t.market)+" ")]),a("span",{staticClass:"symbol-name"},[e._v(e._s(t.symbol))]),t.name?a("span",{staticClass:"symbol-name-extra"},[e._v(e._s(t.name))]):e._e()],1)])}),a("a-select-option",{key:"__add_symbol_option__",staticClass:"add-symbol-option",attrs:{value:"__add_symbol_option__"}},[a("div",{staticStyle:{width:"100%","text-align":"center",padding:"4px 0",color:"#1890ff",cursor:"pointer"}},[a("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"plus"}}),a("span",[e._v(e._s(e.$t("trading-assistant.form.addSymbol")))])],1)])],2),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.isEditMode?e.$t("trading-assistant.form.symbolHintCrypto"):e.$t("trading-assistant.form.symbolsHint"))+" ")])],1):e._e(),a("div",{directives:[{name:"show",rawName:"v-show",value:e.isAdvancedMode||e.editingStrategy||e.showAdvancedSettings,expression:"isAdvancedMode || editingStrategy || showAdvancedSettings"}]},[a("a-row",{attrs:{gutter:16}},[a("a-col",{attrs:{xs:24,sm:24,md:12,lg:12}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.initialCapital")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["initial_capital",{rules:[{required:!0,message:e.$t("trading-assistant.validation.initialCapitalRequired")}],initialValue:1e3}],expression:"['initial_capital', { rules: [{ required: true, message: $t('trading-assistant.validation.initialCapitalRequired') }], initialValue: 1000 }]"}],staticStyle:{width:"100%"},attrs:{min:10,step:100,precision:2}})],1)],1),a("a-col",{attrs:{xs:24,sm:24,md:12,lg:12}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.marketType")}},[a("a-radio-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["market_type",{initialValue:"swap"}],expression:"['market_type', { initialValue: 'swap' }]"}],on:{change:e.handleMarketTypeChange}},[a("a-radio",{attrs:{value:"swap"}},[e._v(e._s(e.$t("trading-assistant.form.marketTypeFutures")))]),a("a-radio",{attrs:{value:"spot"}},[e._v(e._s(e.$t("trading-assistant.form.marketTypeSpot")))])],1),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.marketTypeHint"))+" ")])],1)],1)],1),a("a-row",{attrs:{gutter:16}},[a("a-col",{attrs:{xs:24,sm:24,md:12,lg:12}},[a("a-form-item",{attrs:{label:"".concat(e.$t("trading-assistant.form.leverage")," (x)")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["leverage",{initialValue:5,rules:[{required:!0,message:e.$t("trading-assistant.validation.leverageRequired")}]}],expression:"['leverage', { initialValue: 5, rules: [{ required: true, message: $t('trading-assistant.validation.leverageRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:"spot"===e.form.getFieldValue("market_type")?1:125,step:1,disabled:"spot"===e.form.getFieldValue("market_type")}}),a("div",{staticClass:"form-item-hint"},["spot"===e.form.getFieldValue("market_type")?a("span",[e._v(" "+e._s(e.$t("trading-assistant.form.spotLeverageFixed"))+" ")]):a("span",[e._v(" "+e._s(e.$t("trading-assistant.form.leverageHint"))+" ")])])],1)],1),a("a-col",{attrs:{xs:24,sm:24,md:12,lg:12}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.tradeDirection")}},[a("a-radio-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["trade_direction",{initialValue:"long"}],expression:"['trade_direction', { initialValue: 'long' }]"}],attrs:{disabled:"spot"===e.form.getFieldValue("market_type")}},[a("a-radio",{attrs:{value:"long"}},[e._v(e._s(e.$t("trading-assistant.form.tradeDirectionLong")))]),a("a-radio",{attrs:{value:"short",disabled:"spot"===e.form.getFieldValue("market_type")}},[e._v(" "+e._s(e.$t("trading-assistant.form.tradeDirectionShort"))+" ")]),a("a-radio",{attrs:{value:"both",disabled:"spot"===e.form.getFieldValue("market_type")}},[e._v(" "+e._s(e.$t("trading-assistant.form.tradeDirectionBoth"))+" ")])],1),"spot"===e.form.getFieldValue("market_type")?a("div",{staticClass:"form-item-hint",staticStyle:{color:"#ff9800"}},[e._v(" "+e._s(e.$t("trading-assistant.form.spotOnlyLongHint"))+" ")]):e._e()],1)],1)],1),a("a-row",{attrs:{gutter:16}},[a("a-col",{attrs:{xs:24,sm:24,md:12,lg:12}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.klinePeriod")}},[a("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["timeframe",{initialValue:"15m",rules:[{required:!0}]}],expression:"['timeframe', { initialValue: '15m', rules: [{ required: true }] }]"}],attrs:{placeholder:e.$t("trading-assistant.placeholders.selectKlinePeriod"),getPopupContainer:function(t){return t.parentNode}}},[a("a-select-option",{attrs:{value:"1m"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe1m")))]),a("a-select-option",{attrs:{value:"5m"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe5m")))]),a("a-select-option",{attrs:{value:"15m"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe15m")))]),a("a-select-option",{attrs:{value:"30m"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe30m")))]),a("a-select-option",{attrs:{value:"1H"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe1H")))]),a("a-select-option",{attrs:{value:"4H"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe4H")))]),a("a-select-option",{attrs:{value:"1D"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe1D")))])],1)],1)],1),a("a-col",{attrs:{xs:24,sm:24,md:12,lg:12}})],1)],1)],2)],1):e._e()]),a("div",{directives:[{name:"show",rawName:"v-show",value:1===e.currentStep||e.isSimpleMode&&0===e.currentStep&&e.showAdvancedSettings,expression:"currentStep === 1 || (isSimpleMode && currentStep === 0 && showAdvancedSettings)"}],staticClass:"step-content"},["indicator"===e.strategyType?a("div",[a("a-form",{attrs:{form:e.form,layout:"vertical"}},[a("a-collapse",{staticStyle:{background:"#fafafa"},attrs:{bordered:!1},model:{value:e.backtestCollapseKeys,callback:function(t){e.backtestCollapseKeys=t},expression:"backtestCollapseKeys"}},[a("a-collapse-panel",{key:"risk",attrs:{header:e.$t("dashboard.indicator.backtest.panel.risk")}},[a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.stopLossPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["stop_loss_pct",{initialValue:3}],expression:"['stop_loss_pct', { initialValue: 3 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.01,precision:4}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.takeProfitPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["take_profit_pct",{initialValue:6}],expression:"['take_profit_pct', { initialValue: 6 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trailingEnabled")}},[a("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailing_enabled",{valuePropName:"checked",initialValue:!1}],expression:"['trailing_enabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:e.onTrailingToggle}})],1)],1),a("a-col",{attrs:{span:12}})],1),e.trailingEnabledUi?[a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trailingStopPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailing_stop_pct",{initialValue:0}],expression:"['trailing_stop_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.01,precision:4}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trailingActivationPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailing_activation_pct",{initialValue:0}],expression:"['trailing_activation_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1)]:e._e()],2),a("a-collapse-panel",{key:"scale",attrs:{header:e.$t("dashboard.indicator.backtest.panel.scale")}},[a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendAddEnabled")}},[a("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_add_enabled",{valuePropName:"checked",initialValue:!1}],expression:"['trend_add_enabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:e.onTrendAddToggle}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.dcaAddEnabled")}},[a("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["dca_add_enabled",{valuePropName:"checked",initialValue:!1}],expression:"['dca_add_enabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:e.onDcaAddToggle}})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendAddStepPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_add_step_pct",{initialValue:0}],expression:"['trend_add_step_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4},on:{change:e.onScaleParamsChange}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.dcaAddStepPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dca_add_step_pct",{initialValue:0}],expression:"['dca_add_step_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4},on:{change:e.onScaleParamsChange}})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendAddSizePct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_add_size_pct",{initialValue:0}],expression:"['trend_add_size_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4},on:{change:e.onScaleParamsChange}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.dcaAddSizePct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dca_add_size_pct",{initialValue:0}],expression:"['dca_add_size_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4},on:{change:e.onScaleParamsChange}})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendAddMaxTimes")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_add_max_times",{initialValue:0}],expression:"['trend_add_max_times', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:50,step:1,precision:0},on:{change:e.onScaleParamsChange}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.dcaAddMaxTimes")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dca_add_max_times",{initialValue:0}],expression:"['dca_add_max_times', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:50,step:1,precision:0},on:{change:e.onScaleParamsChange}})],1)],1)],1)],1),a("a-collapse-panel",{key:"reduce",attrs:{header:e.$t("dashboard.indicator.backtest.panel.reduce")}},[a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendReduceEnabled")}},[a("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_reduce_enabled",{valuePropName:"checked",initialValue:!1}],expression:"['trend_reduce_enabled', { valuePropName: 'checked', initialValue: false }]"}]})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.adverseReduceEnabled")}},[a("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverse_reduce_enabled",{valuePropName:"checked",initialValue:!1}],expression:"['adverse_reduce_enabled', { valuePropName: 'checked', initialValue: false }]"}]})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendReduceStepPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_reduce_step_pct",{initialValue:0}],expression:"['trend_reduce_step_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.adverseReduceStepPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverse_reduce_step_pct",{initialValue:0}],expression:"['adverse_reduce_step_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendReduceSizePct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_reduce_size_pct",{initialValue:0}],expression:"['trend_reduce_size_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.adverseReduceSizePct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverse_reduce_size_pct",{initialValue:0}],expression:"['adverse_reduce_size_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4}})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendReduceMaxTimes")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_reduce_max_times",{initialValue:0}],expression:"['trend_reduce_max_times', { initialValue: 0 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:50,step:1,precision:0}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.adverseReduceMaxTimes")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverse_reduce_max_times",{initialValue:0}],expression:"['adverse_reduce_max_times', { initialValue: 0 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:50,step:1,precision:0}})],1)],1)],1)],1),a("a-collapse-panel",{key:"position",attrs:{header:e.$t("dashboard.indicator.backtest.panel.position")}},[a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.entryPct"),help:e.$t("dashboard.indicator.backtest.hint.entryPctMax",{maxPct:Number(e.entryPctMaxUi||0).toFixed(0)})}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["entry_pct",{initialValue:100}],expression:"['entry_pct', { initialValue: 100 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:e.entryPctMaxUi,step:.1,precision:4},on:{change:e.onEntryPctChange}})],1)],1),a("a-col",{attrs:{span:12}})],1)],1)],1),a("div",{staticClass:"ai-filter-box"},[a("div",{staticClass:"ai-filter-header"},[a("div",{staticClass:"ai-filter-title"},[a("a-icon",{attrs:{type:"robot"}}),a("span",[e._v(e._s(e.$t("trading-assistant.form.enableAiFilter")))])],1),a("a-switch",{attrs:{checked:e.aiFilterEnabledUi},on:{change:e.onAiFilterToggle}})],1),a("div",{staticClass:"ai-filter-hint"},[e._v(e._s(e.$t("trading-assistant.form.enableAiFilterHint")))])])],1)],1):e._e()]),a("div",{directives:[{name:"show",rawName:"v-show",value:2===e.currentStep,expression:"currentStep === 2"}],staticClass:"step-content"},[a("a-form",{attrs:{form:e.form,layout:"vertical",autocomplete:"off"}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.executionMode")}},[a("a-radio-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["execution_mode",{initialValue:"signal"}],expression:"['execution_mode', { initialValue: 'signal' }]"}],attrs:{disabled:!e.canUseLiveTrading},on:{change:e.onExecutionModeChange}},[a("a-radio",{attrs:{value:"signal"}},[e._v(e._s(e.$t("trading-assistant.form.executionModeSignal")))]),a("a-radio",{attrs:{value:"live",disabled:!e.canUseLiveTrading}},[e._v(e._s(e.$t("trading-assistant.form.executionModeLive")))])],1),e.canUseLiveTrading?e._e():a("div",{staticClass:"form-item-hint",staticStyle:{color:"#ff9800"}},[e._v(" "+e._s(e.$t("trading-assistant.form.liveTradingNotSupportedHint"))+" ")])],1),"live"===e.executionModeUi&&e.canUseLiveTrading?a("a-form-item",{staticClass:"live-disclaimer-item"},[a("a-alert",{staticStyle:{"margin-bottom":"8px"},attrs:{type:"warning",showIcon:"",message:e.$t("trading-assistant.liveDisclaimer.title"),description:e.$t("trading-assistant.liveDisclaimer.content")}}),a("a-checkbox",{directives:[{name:"decorator",rawName:"v-decorator",value:["live_disclaimer_ack",{valuePropName:"checked",initialValue:!1}],expression:"['live_disclaimer_ack', { valuePropName: 'checked', initialValue: false }]"}],on:{change:e.onLiveDisclaimerAckChange}},[e._v(" "+e._s(e.$t("trading-assistant.liveDisclaimer.agree"))+" ")])],1):e._e(),a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.notifyChannels")}},[a("a-checkbox-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["notify_channels",{initialValue:["browser"]}],expression:"['notify_channels', { initialValue: ['browser'] }]"}],on:{change:e.onNotifyChannelsChange}},[a("a-checkbox",{attrs:{value:"browser"}},[e._v(e._s(e.$t("trading-assistant.notify.browser")))]),a("a-checkbox",{attrs:{value:"email"}},[e._v(e._s(e.$t("trading-assistant.notify.email")))]),a("a-checkbox",{attrs:{value:"telegram"}},[e._v(e._s(e.$t("trading-assistant.notify.telegram")))]),a("a-checkbox",{attrs:{value:"discord"}},[e._v(e._s(e.$t("trading-assistant.notify.discord")))]),a("a-checkbox",{attrs:{value:"webhook"}},[e._v(e._s(e.$t("trading-assistant.notify.webhook")))]),a("a-checkbox",{attrs:{value:"phone"}},[e._v(e._s(e.$t("trading-assistant.notify.phone")))])],1),a("div",{staticClass:"form-item-hint"},[e._v(e._s(e.$t("trading-assistant.form.notifyChannelsHint")))])],1),e.unconfiguredChannels.length>0?a("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"warning",showIcon:""},scopedSlots:e._u([{key:"message",fn:function(){return[a("span",[e._v(" "+e._s(e.$t("trading-assistant.form.notificationConfigMissing",{channels:e.unconfiguredChannels.join(", ")}))+" "),a("router-link",{staticStyle:{"margin-left":"8px"},attrs:{to:"/profile"}},[a("a-icon",{attrs:{type:"setting"}}),e._v(" "+e._s(e.$t("trading-assistant.form.goToProfile"))+" ")],1)],1)]},proxy:!0}],null,!1,2930252607)}):e.notifyChannelsUi.length>0&&!e.notifyChannelsUi.includes("browser")||e.notifyChannelsUi.length>1?a("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"info",showIcon:""},scopedSlots:e._u([{key:"message",fn:function(){return[a("span",[e._v(" "+e._s(e.$t("trading-assistant.form.notificationFromProfile"))+" "),a("router-link",{staticStyle:{"margin-left":"8px"},attrs:{to:"/profile"}},[a("a-icon",{attrs:{type:"setting"}}),e._v(" "+e._s(e.$t("trading-assistant.form.goToProfile"))+" ")],1)],1)]},proxy:!0}])}):e._e(),"live"===e.executionModeUi&&e.canUseLiveTrading?a("a-divider"):e._e(),"live"===e.executionModeUi&&e.canUseLiveTrading&&!e.liveDisclaimerAckUi?a("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"warning",showIcon:"",message:e.$t("trading-assistant.liveDisclaimer.blockTitle"),description:e.$t("trading-assistant.liveDisclaimer.blockDesc")}}):e._e(),"live"===e.executionModeUi&&e.canUseLiveTrading&&e.liveDisclaimerAckUi?a("div",[a("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"info","show-icon":"",message:e.$t("trading-assistant.form.liveTradingConfigTitle"),description:e.$t("trading-assistant.form.liveTradingConfigHint")}}),a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.savedCredential")}},[a("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["credential_id",{rules:[{required:!0,message:e.$t("profile.exchange.noCredentialHint")}],getValueFromEvent:function(t){return t||void 0}}],expression:"['credential_id', {\n rules: [{ required: true, message: $t('profile.exchange.noCredentialHint') }],\n getValueFromEvent: (val) => val || undefined\n }]"}],attrs:{placeholder:e.$t("trading-assistant.placeholders.selectSavedCredential"),"allow-clear":"","show-search":"","option-filter-prop":"children",loading:e.loadingExchangeCredentials},on:{change:e.handleCredentialSelectChange}},e._l(e.filteredExchangeCredentials,function(t){return a("a-select-option",{key:t.id,attrs:{value:t.id}},[e._v(" "+e._s(e.formatCredentialLabel(t))+" ")])}),1),a("div",{staticClass:"form-item-hint",staticStyle:{"margin-top":"6px"}},[a("router-link",{attrs:{to:"/profile?tab=exchange"}},[a("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"setting"}}),e._v(e._s(e.$t("profile.exchange.goToManage"))+" ")],1)],1)],1)],1):e._e()],1)],1)])],1),a("template",{slot:"footer"},[a("a-button",{on:{click:e.handleCloseModal}},[e._v(e._s(e.$t("trading-assistant.form.cancel")))]),a("a-button",{directives:[{name:"show",rawName:"v-show",value:e.currentStep>0,expression:"currentStep > 0"}],on:{click:e.handlePrev}},[e._v(" "+e._s(e.$t("trading-assistant.form.prev"))+" ")]),a("a-button",{directives:[{name:"show",rawName:"v-show",value:e.currentStep<2,expression:"currentStep < 2"}],attrs:{type:"primary",loading:e.saving},on:{click:e.handleNext}},[e._v(" "+e._s(e.$t("trading-assistant.form.next"))+" ")]),a("a-button",{directives:[{name:"show",rawName:"v-show",value:2===e.currentStep,expression:"currentStep === 2"}],attrs:{type:"primary",loading:e.saving},on:{click:e.handleSubmit}},[e._v(" "+e._s(e.editingStrategy?e.$t("trading-assistant.form.confirmEdit"):e.$t("trading-assistant.form.confirmCreate"))+" ")])],1)],2),a("a-modal",{attrs:{title:e.$t("trading-assistant.form.addSymbolTitle"),visible:e.showAddSymbolModal,confirmLoading:e.addingSymbol,width:"600px",okText:e.$t("trading-assistant.form.confirmAdd"),cancelText:e.$t("trading-assistant.form.cancel"),maskClosable:!1,keyboard:!1},on:{ok:e.handleConfirmAddSymbol,cancel:e.handleCloseAddSymbolModal}},[a("div",{staticClass:"add-symbol-modal-content"},[a("a-tabs",{staticClass:"market-tabs",on:{change:e.handleAddSymbolMarketChange},model:{value:e.addSymbolMarket,callback:function(t){e.addSymbolMarket=t},expression:"addSymbolMarket"}},e._l(e.addSymbolMarketTypes,function(t){return a("a-tab-pane",{key:t.value,attrs:{tab:e.$t(t.i18nKey||"dashboard.analysis.market.".concat(t.value))}})}),1),a("div",{staticClass:"symbol-search-section"},[a("a-input-search",{attrs:{placeholder:e.$t("dashboard.analysis.modal.addStock.searchOrInputPlaceholder"),loading:e.searchingSymbol,size:"large","allow-clear":""},on:{search:e.handleSearchSymbol,change:e.handleSymbolSearchInputChange},model:{value:e.addSymbolKeyword,callback:function(t){e.addSymbolKeyword=t},expression:"addSymbolKeyword"}},[a("a-button",{attrs:{slot:"enterButton",type:"primary",icon:"search"},slot:"enterButton"},[e._v(" "+e._s(e.$t("dashboard.analysis.modal.addStock.search"))+" ")])],1)],1),e.symbolSearchResults.length>0?a("div",{staticClass:"search-results-section"},[a("div",{staticClass:"section-title"},[a("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"search"}}),e._v(" "+e._s(e.$t("dashboard.analysis.modal.addStock.searchResults"))+" ")],1),a("a-list",{staticClass:"symbol-list",attrs:{"data-source":e.symbolSearchResults,loading:e.searchingSymbol,size:"small"},scopedSlots:e._u([{key:"renderItem",fn:function(t){return a("a-list-item",{staticClass:"symbol-list-item",on:{click:function(a){return e.handleSelectAddSymbol(t)}}},[a("a-list-item-meta",[a("template",{slot:"title"},[a("div",{staticClass:"symbol-item-content"},[a("span",{staticClass:"symbol-code"},[e._v(e._s(t.symbol))]),a("span",{staticClass:"symbol-name"},[e._v(e._s(t.name))]),t.exchange?a("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"blue"}},[e._v(" "+e._s(t.exchange)+" ")]):e._e()],1)])],2)],1)}}],null,!1,2801225082)})],1):e._e(),a("div",{staticClass:"hot-symbols-section"},[a("div",{staticClass:"section-title"},[a("a-icon",{staticStyle:{color:"#ff4d4f","margin-right":"4px"},attrs:{type:"fire"}}),e._v(" "+e._s(e.$t("dashboard.analysis.modal.addStock.hotSymbols"))+" ")],1),a("a-spin",{attrs:{spinning:e.loadingHotSymbols}},[e.hotSymbols.length>0?a("a-list",{staticClass:"symbol-list",attrs:{"data-source":e.hotSymbols,size:"small"},scopedSlots:e._u([{key:"renderItem",fn:function(t){return a("a-list-item",{staticClass:"symbol-list-item",on:{click:function(a){return e.handleSelectAddSymbol(t)}}},[a("a-list-item-meta",[a("template",{slot:"title"},[a("div",{staticClass:"symbol-item-content"},[a("span",{staticClass:"symbol-code"},[e._v(e._s(t.symbol))]),a("span",{staticClass:"symbol-name"},[e._v(e._s(t.name))]),t.exchange?a("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"orange"}},[e._v(" "+e._s(t.exchange)+" ")]):e._e()],1)])],2)],1)}}],null,!1,3959834868)}):a("a-empty",{attrs:{description:e.$t("dashboard.analysis.modal.addStock.noHotSymbols"),image:!1}})],1)],1),e.selectedAddSymbol?a("div",{staticClass:"selected-symbol-section"},[a("div",{staticClass:"section-title"},[a("a-icon",{staticStyle:{color:"#52c41a","margin-right":"4px"},attrs:{type:"check-circle"}}),e._v(" "+e._s(e.$t("dashboard.analysis.modal.addStock.selectedSymbol"))+" ")],1),a("div",{staticClass:"selected-symbol-info"},[a("a-tag",{staticStyle:{"margin-right":"8px"},attrs:{color:e.getMarketColor(e.addSymbolMarket)}},[e._v(e._s(e.addSymbolMarket))]),a("span",{staticClass:"symbol-code"},[e._v(e._s(e.selectedAddSymbol.symbol))]),e.selectedAddSymbol.name?a("span",{staticClass:"symbol-name"},[e._v(e._s(e.selectedAddSymbol.name))]):e._e()],1)]):e._e()],1)])],1)},s=[],r=a(21092),n=a(68285),o=a(76959),l=a(17654),d=a(9133),c=a(52074),u=a(57888),m=(a(2008),a(50113),a(23418),a(62062),a(34782),a(26910),a(79432),a(26099),a(16034),a(31415),a(47764),a(42762),a(23500),a(62953),a(73047)),g=a(64118),p=a(72694),h=a(27617),_=a(21170),y=a(76471),f=function(){var t=this,e=t._self._c;return e("div",{staticClass:"trading-records"},[0!==t.records.length||t.loading?e("a-table",{attrs:{columns:t.columns,"data-source":t.records,loading:t.loading,pagination:{pageSize:10},size:"small",rowKey:"id",scroll:{x:800}},scopedSlots:t._u([{key:"type",fn:function(a){return[e("a-tag",{attrs:{color:t.getTradeTypeColor(a)}},[t._v(" "+t._s(t.getTradeTypeText(a))+" ")])]}},{key:"price",fn:function(e){return[t._v(" $"+t._s(parseFloat(e).toFixed(4))+" ")]}},{key:"amount",fn:function(e){return[t._v(" "+t._s(parseFloat(e).toFixed(4))+" ")]}},{key:"value",fn:function(e){return[t._v(" $"+t._s(parseFloat(e).toFixed(2))+" ")]}},{key:"profit",fn:function(a,i){return[e("span",{style:{color:a>0?"#52c41a":a<0?"#f5222d":"#666"}},[t._v(" "+t._s(t.formatProfit(a,i))+" ")])]}},{key:"commission",fn:function(e){return[t._v(" "+t._s(t.formatCommission(e))+" ")]}},{key:"time",fn:function(e,a){return[t._v(" "+t._s(t.formatTime(a.created_at||e))+" ")]}}])}):e("div",{staticClass:"empty-state"},[e("a-empty",{attrs:{description:t.$t("trading-assistant.table.noPositions")}})],1)],1)},v=[],b=(a(27495),{name:"TradingRecords",props:{strategyId:{type:Number,required:!0},loading:{type:Boolean,default:!1}},computed:{columns:function(){return[{title:this.$t("trading-assistant.table.time"),dataIndex:"created_at",key:"created_at",width:180,scopedSlots:{customRender:"time"}},{title:this.$t("dashboard.indicator.backtest.tradeType"),dataIndex:"type",key:"type",width:140,scopedSlots:{customRender:"type"}},{title:this.$t("trading-assistant.table.price"),dataIndex:"price",key:"price",width:120,scopedSlots:{customRender:"price"}},{title:this.$t("trading-assistant.table.amount"),dataIndex:"amount",key:"amount",width:120,scopedSlots:{customRender:"amount"}},{title:this.$t("trading-assistant.table.value"),dataIndex:"value",key:"value",width:120,scopedSlots:{customRender:"value"}},{title:this.$t("dashboard.indicator.backtest.profit"),dataIndex:"profit",key:"profit",width:120,scopedSlots:{customRender:"profit"}},{title:this.$t("trading-assistant.table.commission"),dataIndex:"commission",key:"commission",width:100,scopedSlots:{customRender:"commission"}}]}},data:function(){return{records:[]}},watch:{strategyId:{handler:function(t){t&&this.loadRecords()},immediate:!0}},methods:{loadRecords:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.strategyId){e.n=1;break}return e.a(2);case 1:return e.p=1,e.n=2,(0,m.tq)(t.strategyId);case 2:a=e.v,1===a.code?t.records=(a.data.trades||[]).map(function(t){return(0,u.A)((0,u.A)({},t),{},{time:t.created_at||t.time})}):t.$message.error(a.msg||t.$t("trading-assistant.messages.loadTradesFailed")),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.a(2)}},e,null,[[1,3]])}))()},formatTime:function(t){if(!t)return"--";try{var e;if("number"===typeof t){var a=t<1e12?1e3*t:t;e=new Date(a)}else{if("string"!==typeof t)return"--";if(/^\d+$/.test(t)){var i=parseInt(t,10),s=i<1e12?1e3*i:i;e=new Date(s)}else e=new Date(t)}if(isNaN(e.getTime()))return"--";var r=this.$i18n.locale||"zh-CN",n={"zh-CN":"zh-CN","zh-TW":"zh-TW","en-US":"en-US"};return e.toLocaleString(n[r]||"zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})}catch(o){return"--"}},getTradeTypeColor:function(t){var e={buy:"green",sell:"red",liquidation:"orange",open_long:"green",add_long:"cyan",close_long:"orange",close_long_stop:"red",close_long_profit:"lime",open_short:"red",add_short:"magenta",close_short:"blue",close_short_stop:"red",close_short_profit:"cyan"};return e[t]||"default"},getTradeTypeText:function(t){var e={buy:this.$t("dashboard.indicator.backtest.buy"),sell:this.$t("dashboard.indicator.backtest.sell"),liquidation:this.$t("dashboard.indicator.backtest.liquidation"),open_long:this.$t("dashboard.indicator.backtest.openLong"),add_long:this.$t("dashboard.indicator.backtest.addLong"),close_long:this.$t("dashboard.indicator.backtest.closeLong"),close_long_stop:this.$t("dashboard.indicator.backtest.closeLongStop"),close_long_profit:this.$t("dashboard.indicator.backtest.closeLongProfit"),open_short:this.$t("dashboard.indicator.backtest.openShort"),add_short:this.$t("dashboard.indicator.backtest.addShort"),close_short:this.$t("dashboard.indicator.backtest.closeShort"),close_short_stop:this.$t("dashboard.indicator.backtest.closeShortStop"),close_short_profit:this.$t("dashboard.indicator.backtest.closeShortProfit")};return e[t]||t},formatMoney:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"-";return"".concat(e,"$").concat(Math.abs(t).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}))},formatProfit:function(t,e){if(null===t||void 0===t)return"--";var a=parseFloat(t),i=["open_long","open_short","add_long","add_short"];return 0===a&&e&&i.includes(e.type)?"--":Math.abs(a)<1e-6?e&&i.includes(e.type)?"--":"$0.00":this.formatMoney(a)},formatCommission:function(t){if(null===t||void 0===t)return"--";var e=parseFloat(t);return isNaN(e)||Math.abs(e)<1e-6?"--":"$".concat(e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:6}))}}}),S=b,k=a(845),x=(0,k.A)(S,f,v,!1,null,"a5bdef7e",null),C=x.exports,w=function(){var t=this,e=t._self._c;return e("div",{staticClass:"position-records"},[0!==t.positions.length||t.loading?e("a-table",{attrs:{columns:t.columns,"data-source":t.positions,loading:t.loading,pagination:!1,size:"small",rowKey:"id",scroll:{x:800}},scopedSlots:t._u([{key:"symbol",fn:function(a,i){return[e("strong",[t._v(t._s(i.symbol||a))])]}},{key:"side",fn:function(a,i){return[e("a-tag",{attrs:{color:"long"===(i.side||a)?"green":"red"}},[t._v(" "+t._s("long"===(i.side||a)?t.$t("trading-assistant.table.long"):t.$t("trading-assistant.table.short"))+" ")])]}},{key:"entryPrice",fn:function(a,i){return[t.hasValidPrice(i.entry_price||a)?e("span",[t._v(" $"+t._s(parseFloat(i.entry_price||a).toFixed(4))+" ")]):e("span",[t._v("--")])]}},{key:"currentPrice",fn:function(e,a){return[t._v(" $"+t._s(parseFloat(a.current_price||e||0).toFixed(4))+" ")]}},{key:"size",fn:function(e,a){return[t._v(" "+t._s(parseFloat(a.size||e||0).toFixed(4))+" ")]}},{key:"unrealizedPnl",fn:function(a,i){return[e("span",{class:{profit:parseFloat(i.unrealized_pnl||a||0)>0,loss:parseFloat(i.unrealized_pnl||a||0)<0}},[t._v(" $"+t._s(parseFloat(i.unrealized_pnl||a||0).toFixed(2))+" ")])]}},{key:"pnlPercent",fn:function(a,i){return[e("span",{class:{profit:parseFloat(i.pnl_percent||a||0)>0,loss:parseFloat(i.pnl_percent||a||0)<0}},[t._v(" "+t._s(parseFloat(i.pnl_percent||a||0).toFixed(2))+"% ")])]}}])}):e("div",{staticClass:"empty-state"},[e("a-empty",{attrs:{description:t.$t("trading-assistant.table.noPositions")}})],1)],1)},$=[],A=(a(25428),a(38781),{name:"PositionRecords",props:{strategyId:{type:Number,required:!0},marketType:{type:String,default:"swap"},leverage:{type:[Number,String],default:1},loading:{type:Boolean,default:!1}},data:function(){return{positions:[]}},computed:{columns:function(){return[{title:this.$t("trading-assistant.table.symbol"),dataIndex:"symbol",key:"symbol",width:120,scopedSlots:{customRender:"symbol"}},{title:this.$t("trading-assistant.table.side"),dataIndex:"side",key:"side",width:80,scopedSlots:{customRender:"side"}},{title:this.$t("trading-assistant.table.size"),dataIndex:"size",key:"size",width:120,scopedSlots:{customRender:"size"}},{title:this.$t("trading-assistant.table.entryPrice"),dataIndex:"entry_price",key:"entry_price",width:120,scopedSlots:{customRender:"entryPrice"}},{title:this.$t("trading-assistant.table.currentPrice"),dataIndex:"current_price",key:"current_price",width:120,scopedSlots:{customRender:"currentPrice"}},{title:this.$t("trading-assistant.table.unrealizedPnl"),dataIndex:"unrealized_pnl",key:"unrealized_pnl",width:120,scopedSlots:{customRender:"unrealizedPnl"}},{title:this.$t("trading-assistant.table.pnlPercent"),dataIndex:"pnl_percent",key:"pnl_percent",width:100,scopedSlots:{customRender:"pnlPercent"}}]}},watch:{strategyId:{handler:function(t){t?(this.loadPositions(),this.startPolling()):this.stopPolling()},immediate:!0}},beforeDestroy:function(){this.stopPolling()},methods:{loadPositions:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a,i;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.strategyId){e.n=1;break}return e.a(2);case 1:return e.p=1,e.n=2,(0,m.oK)(t.strategyId);case 2:a=e.v,1===a.code?(i=a.data.positions||[],t.positions=i.map(function(e,a){var i=String(t.marketType||"swap").toLowerCase(),s=parseFloat(t.leverage);(!isFinite(s)||s<=0)&&(s=1),"spot"===i&&(s=1);var r=parseFloat(e.entry_price||e.entryPrice||0),n=parseFloat(e.size||"0")||0,o=parseFloat(e.unrealized_pnl||e.unrealizedPnl||"0")||0,l=parseFloat(e.pnl_percent||e.pnlPercent||"0")||0;r>0&&n>0?l=o/(r*n)*100*s:"spot"!==i&&(l*=s);var d={id:e.id||a,symbol:e.symbol||"",side:e.side||"long",size:n>0?n.toString():"0",entry_price:r>0?r.toString():"0",current_price:e.current_price||e.currentPrice||"0",unrealized_pnl:e.unrealized_pnl||e.unrealizedPnl||"0",pnl_percent:l,updated_at:e.updated_at||e.updatedAt||""};return d})):t.positions=[],e.n=4;break;case 3:e.p=3,e.v,t.positions=[];case 4:return e.a(2)}},e,null,[[1,3]])}))()},hasValidPrice:function(t){var e=parseFloat(t);return Number.isFinite(e)&&e>0},startPolling:function(){var t=this;this.stopPolling(),this.pollingTimer=setInterval(function(){t.loadPositions()},5e3)},stopPolling:function(){this.pollingTimer&&(clearInterval(this.pollingTimer),this.pollingTimer=null)}}}),P=A,M=(0,k.A)(P,w,$,!1,null,"2abcf4f1",null),F=M.exports,T=["BTC/USDT","ETH/USDT","BNB/USDT","SOL/USDT","ADA/USDT","XRP/USDT","DOGE/USDT","DOT/USDT","MATIC/USDT","AVAX/USDT","LINK/USDT","UNI/USDT","LTC/USDT","ATOM/USDT","ETC/USDT"],V=[{value:"binance",labelKey:"binance"},{value:"okx",labelKey:"okx"},{value:"bitget",labelKey:"bitget"},{value:"bybit",labelKey:"bybit"},{value:"coinbaseexchange",labelKey:"coinbaseexchange"},{value:"kraken",labelKey:"kraken"},{value:"kucoin",labelKey:"kucoin"},{value:"gate",labelKey:"gate"},{value:"bitfinex",labelKey:"bitfinex"},{value:"deepcoin",labelKey:"deepcoin"}],I=[{value:"ibkr",labelKey:"ibkr",name:"Interactive Brokers"}],N=[{value:"mt5",labelKey:"mt5",name:"MetaTrader 5"}],U={name:"TradingAssistant",mixins:[_.t],components:{TradingRecords:C,PositionRecords:F},computed:{isAdvancedMode:function(){return"advanced"===this.creationMode},isSimpleMode:function(){return"simple"===this.creationMode},displayCurrentStep:function(){return this.isSimpleMode&&!this.editingStrategy?0===this.currentStep?0:1:this.currentStep},isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},needsPassphrase:function(){return["okx","okex","coinbaseexchange","kucoin","bitget","deepcoin"].includes(this.currentExchangeId)},isIBKRMarket:function(){return"USStock"===this.selectedMarketCategory},isMT5Market:function(){return"Forex"===this.selectedMarketCategory},isBrokerMarket:function(){return this.isIBKRMarket||this.isMT5Market},filteredExchangeCredentials:function(){var t=this;return this.exchangeCredentials&&Array.isArray(this.exchangeCredentials)?this.exchangeCredentials.filter(function(e){return t.isCredentialCompatible(e)}):[]},formattedExchangeOptions:function(){var t=this;return V.map(function(e){var a="";try{if(e.labelKey){var i="trading-assistant.exchangeNames.".concat(e.labelKey),s=t.$t(i);s!==i&&(a=s)}}catch(r){}return a||(a=e.value.charAt(0).toUpperCase()+e.value.slice(1)),(0,u.A)((0,u.A)({},e),{},{displayName:a})})},totalPnl:function(){return null!==this.currentEquity&&this.selectedStrategy&&this.selectedStrategy.initial_capital?this.currentEquity-(this.selectedStrategy.initial_capital||0):null},totalPnlPercent:function(){return null!==this.totalPnl&&this.selectedStrategy&&this.selectedStrategy.initial_capital?0===this.selectedStrategy.initial_capital?0:this.totalPnl/this.selectedStrategy.initial_capital*100:null},getEquityColorClass:function(){return null===this.totalPnl?"":this.totalPnl>=0?"text-success":"text-danger"},getPnlColorClass:function(){return null===this.totalPnl?"":this.totalPnl>=0?"text-success":"text-danger"},isCryptoMarket:function(){var t=this.selectedMarketCategory||"Crypto";return"crypto"===String(t).toLowerCase()},canUseLiveTrading:function(){var t=this.selectedMarketCategory||"Crypto";return"crypto"===String(t).toLowerCase()||("USStock"===t||"Forex"===t)},isLiveTradingAvailable:function(){var t=this.selectedMarketCategory||"Crypto",e=this.currentExchangeId||"";return"crypto"===String(t).toLowerCase()?["binance","okx","bitget","bybit","coinbaseexchange","kraken","kucoin","gate","bitfinex"].includes(e):"USStock"===t?"ibkr"===this.currentBrokerId:"Forex"===t&&"mt5"===this.currentBrokerId},showDemoTradingSwitch:function(){return this.currentExchangeId&&"binance"===this.currentExchangeId.toLowerCase()},brokerOptions:function(){var t=this;return I.map(function(e){var a="";try{var i="trading-assistant.brokerNames.".concat(e.labelKey),s=t.$t(i);s!==i&&(a=s)}catch(r){}return a||(a=e.name||e.value.toUpperCase()),(0,u.A)((0,u.A)({},e),{},{displayName:a})})},forexBrokerOptions:function(){var t=this;return N.map(function(e){var a="";try{var i="trading-assistant.brokerNames.".concat(e.labelKey),s=t.$t(i);s!==i&&(a=s)}catch(r){}return a||(a=e.name||e.value.toUpperCase()),(0,u.A)((0,u.A)({},e),{},{displayName:a})})},cryptoExchangeOptions:function(){var t=this;return V.map(function(e){var a="";try{if(e.labelKey){var i="trading-assistant.exchangeNames.".concat(e.labelKey),s=t.$t(i);s!==i&&(a=s)}}catch(r){}return a||(a=e.value.charAt(0).toUpperCase()+e.value.slice(1)),(0,u.A)((0,u.A)({},e),{},{displayName:a})})},groupedStrategies:function(){return"symbol"===this.groupByMode?this.groupedBySymbol:this.groupedByStrategy},groupedByStrategy:function(){var t,e={},a=[],i=(0,c.A)(this.strategies);try{for(i.s();!(t=i.n()).done;){var s=t.value,r=s.strategy_group_id;r&&r.trim()?(e[r]||(e[r]={id:r,baseName:s.group_base_name||s.strategy_name.split("-")[0],strategies:[],runningCount:0,stoppedCount:0}),e[r].strategies.push(s),"running"===s.status?e[r].runningCount++:e[r].stoppedCount++):a.push(s)}}catch(o){i.e(o)}finally{i.f()}var n=Object.values(e).sort(function(t,e){var a=Math.max.apply(Math,(0,d.A)(t.strategies.map(function(t){return t.created_at||0}))),i=Math.max.apply(Math,(0,d.A)(e.strategies.map(function(t){return t.created_at||0})));return i-a});return{groups:n,ungrouped:a}},groupedBySymbol:function(){var t,e={},a=[],i=(0,c.A)(this.strategies);try{for(i.s();!(t=i.n()).done;){var s=t.value,r=s.trading_config||{},n=r.symbol;if(n&&n.trim()){e[n]||(e[n]={id:"symbol_".concat(n),baseName:n,strategies:[],runningCount:0,stoppedCount:0});var o=(0,u.A)((0,u.A)({},s),{},{displayInfo:{strategyName:s.strategy_name||s.group_base_name||"Unnamed",timeframe:r.timeframe||"-",indicatorName:s.indicator_name||s.indicator_config&&s.indicator_config.name||"-"}});e[n].strategies.push(o),"running"===s.status?e[n].runningCount++:e[n].stoppedCount++}else a.push(s)}}catch(d){i.e(d)}finally{i.f()}var l=Object.values(e).sort(function(t,e){return t.baseName.localeCompare(e.baseName)});return{groups:l,ungrouped:a}},unconfiguredChannels:function(){var t=[];return this.notifyChannelsUi.includes("telegram")&&(this.userNotificationSettings.telegram_bot_token||this.userNotificationSettings.telegram_chat_id||t.push("Telegram")),this.notifyChannelsUi.includes("email")&&(this.userNotificationSettings.email||t.push("Email")),this.notifyChannelsUi.includes("discord")&&(this.userNotificationSettings.discord_webhook||t.push("Discord")),this.notifyChannelsUi.includes("webhook")&&(this.userNotificationSettings.webhook_url||t.push("Webhook")),t}},data:function(){return{loading:!1,loadingRecords:!1,strategies:[],selectedStrategy:null,showFormModal:!1,creationMode:"simple",showAdvancedSettings:!1,strategyType:"indicator",selectedMarketCategory:"Crypto",currentStep:0,saving:!1,loadingIndicators:!1,availableIndicators:[],selectedIndicator:null,indicatorParams:[],indicatorParamValues:{},cryptoSymbols:T,loadingWatchlist:!1,watchlist:[],exchangeOptions:V,currentExchangeId:"",currentBrokerId:"ibkr",connectionTestResult:null,indicatorsLoaded:!1,editingStrategy:null,currentEquity:null,equityPollingTimer:null,backtestCollapseKeys:["risk"],trailingEnabledUi:!1,entryPctMaxUi:100,aiFilterEnabledUi:!1,isEditMode:!1,supportedIPs:[],executionModeUi:"signal",liveDisclaimerAckUi:!1,notifyChannelsUi:["browser"],userNotificationSettings:{default_channels:["browser"],telegram_bot_token:"",telegram_chat_id:"",email:"",phone:"",discord_webhook:"",webhook_url:"",webhook_token:""},loadingExchangeCredentials:!1,exchangeCredentials:[],saveCredentialUi:!1,suppressApiClearOnce:!1,selectedSymbols:[],crossSectionalSymbols:[],collapsedGroups:{},groupByMode:"strategy",showAddSymbolModal:!1,addSymbolMarket:"Crypto",addSymbolMarketTypes:[{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}],addSymbolKeyword:"",searchingSymbol:!1,symbolSearchResults:[],selectedAddSymbol:null,hasSearchedSymbol:!1,addingSymbol:!1,hotSymbols:[],loadingHotSymbols:!1,searchTimer:null}},beforeCreate:function(){this.form=this.$form.createForm(this)},mounted:function(){this.loadStrategies(),this.loadUserNotificationSettings()},beforeDestroy:function(){this.stopEquityPolling()},methods:{loadUserNotificationSettings:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,h.vF)();case 1:a=e.v,1===a.code&&a.data&&(t.userNotificationSettings={default_channels:a.data.default_channels||["browser"],telegram_bot_token:a.data.telegram_bot_token||"",telegram_chat_id:a.data.telegram_chat_id||"",email:a.data.email||"",phone:a.data.phone||"",discord_webhook:a.data.discord_webhook||"",webhook_url:a.data.webhook_url||"",webhook_token:a.data.webhook_token||""}),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadWatchlist:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loadingWatchlist=!0,e.p=1,e.n=2,(0,g.Qo)({userid:1});case 2:a=e.v,a&&1===a.code?t.watchlist=Array.isArray(a.data)?a.data:[]:t.watchlist=[],e.n=4;break;case 3:e.p=3,e.v,t.watchlist=[];case 4:return e.p=4,t.loadingWatchlist=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleCloseAddSymbolModal:function(){this.showAddSymbolModal=!1,this.addSymbolKeyword="",this.symbolSearchResults=[],this.selectedAddSymbol=null,this.hasSearchedSymbol=!1},handleAddSymbolMarketChange:function(t){this.addSymbolMarket=t,this.addSymbolKeyword="",this.symbolSearchResults=[],this.selectedAddSymbol=null,this.hasSearchedSymbol=!1,this.loadHotSymbols(t)},handleSymbolSearchInputChange:function(t){var e=this,a=t.target.value;if(this.addSymbolKeyword=a,this.searchTimer&&clearTimeout(this.searchTimer),!a||""===a.trim())return this.symbolSearchResults=[],this.hasSearchedSymbol=!1,void(this.selectedAddSymbol=null);this.searchTimer=setTimeout(function(){e.searchSymbolsInModal(a)},500)},handleSearchSymbol:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){return(0,o.A)().w(function(a){while(1)switch(a.n){case 0:if(t&&t.trim()){a.n=1;break}return a.a(2);case 1:if(e.addSymbolMarket){a.n=2;break}return e.$message.warning(e.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),a.a(2);case 2:if(!(e.symbolSearchResults.length>0)){a.n=3;break}return a.a(2);case 3:e.hasSearchedSymbol&&0===e.symbolSearchResults.length?e.handleDirectAdd():e.searchSymbolsInModal(t);case 4:return a.a(2)}},a)}))()},searchSymbolsInModal:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var i;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(t&&""!==t.trim()){a.n=1;break}return e.symbolSearchResults=[],e.hasSearchedSymbol=!1,a.a(2);case 1:if(e.addSymbolMarket){a.n=2;break}return a.a(2);case 2:return e.searchingSymbol=!0,e.hasSearchedSymbol=!0,a.p=3,a.n=4,(0,g._3)({market:e.addSymbolMarket,keyword:t.trim()});case 4:i=a.v,i&&1===i.code&&Array.isArray(i.data)?e.symbolSearchResults=i.data:e.symbolSearchResults=[],a.n=6;break;case 5:a.p=5,a.v,e.symbolSearchResults=[];case 6:return a.p=6,e.searchingSymbol=!1,a.f(6);case 7:return a.a(2)}},a,null,[[3,5,6,7]])}))()},handleDirectAdd:function(){this.addSymbolKeyword&&this.addSymbolKeyword.trim()?this.addSymbolMarket?this.selectedAddSymbol={market:this.addSymbolMarket,symbol:this.addSymbolKeyword.trim().toUpperCase(),name:""}:this.$message.warning(this.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")):this.$message.warning(this.$t("dashboard.analysis.modal.addStock.pleaseEnterSymbol"))},handleSelectAddSymbol:function(t){this.selectedAddSymbol={market:this.addSymbolMarket,symbol:t.symbol,name:t.name||""}},loadHotSymbols:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var i;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(t||(t=e.addSymbolMarket||"Crypto"),t){a.n=1;break}return a.a(2);case 1:return e.loadingHotSymbols=!0,a.p=2,a.n=3,(0,g.z6)({market:t,limit:10});case 3:i=a.v,i&&1===i.code&&i.data?e.hotSymbols=i.data:e.hotSymbols=[],a.n=5;break;case 4:a.p=4,a.v,e.hotSymbols=[];case 5:return a.p=5,e.loadingHotSymbols=!1,a.f(5);case 6:return a.a(2)}},a,null,[[2,4,5,6]])}))()},handleConfirmAddSymbol:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a,i,s,r,n,l,c;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(a="",i="",!t.selectedAddSymbol){e.n=1;break}a=t.selectedAddSymbol.market,i=t.selectedAddSymbol.symbol.toUpperCase(),e.n=4;break;case 1:if(!t.addSymbolKeyword||!t.addSymbolKeyword.trim()){e.n=3;break}if(t.addSymbolMarket){e.n=2;break}return t.$message.warning(t.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),e.a(2);case 2:a=t.addSymbolMarket,i=t.addSymbolKeyword.trim().toUpperCase(),e.n=4;break;case 3:return t.$message.warning(t.$t("dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol")),e.a(2);case 4:return t.addingSymbol=!0,e.p=5,e.n=6,(0,g.dp)({userid:1,market:a,symbol:i});case 6:if(s=e.v,!s||1!==s.code){e.n=8;break}return t.$message.success(t.$t("dashboard.analysis.message.addStockSuccess")),e.n=7,t.loadWatchlist();case 7:r="".concat(a,":").concat(i),t.isEditMode?(t.form.setFieldsValue({symbol:r}),t.handleWatchlistSymbolChange(r)):(t.selectedSymbols.includes(r)||(t.selectedSymbols=[].concat((0,d.A)(t.selectedSymbols),[r])),t.handleMultiSymbolChange(t.selectedSymbols)),t.handleCloseAddSymbolModal(),e.n=9;break;case 8:t.$message.error((null===s||void 0===s?void 0:s.msg)||t.$t("dashboard.analysis.message.addStockFailed"));case 9:e.n=11;break;case 10:e.p=10,c=e.v,l=(null===c||void 0===c||null===(n=c.response)||void 0===n||null===(n=n.data)||void 0===n?void 0:n.msg)||(null===c||void 0===c?void 0:c.message)||t.$t("dashboard.analysis.message.addStockFailed"),t.$message.error(l);case 11:return e.p=11,t.addingSymbol=!1,e.f(11);case 12:return e.a(2)}},e,null,[[5,10,11,12]])}))()},filterWatchlistOption:function(t,e){var a,i=(null===(a=e.componentOptions)||void 0===a||null===(a=a.propsData)||void 0===a?void 0:a.value)||"";return"__add_symbol_option__"===i||String(i).toLowerCase().includes(String(t||"").toLowerCase())},filterWatchlistOptionWithAdd:function(t,e){var a,i=(null===(a=e.componentOptions)||void 0===a||null===(a=a.propsData)||void 0===a?void 0:a.value)||"";return"__add_symbol_option__"===i||String(i).toLowerCase().includes(String(t||"").toLowerCase())},handleMultiSymbolChangeWithAdd:function(t){if(t&&t.includes("__add_symbol_option__"))return this.selectedSymbols=t.filter(function(t){return"__add_symbol_option__"!==t}),this.showAddSymbolModal=!0,void this.loadHotSymbols(this.addSymbolMarket);this.handleMultiSymbolChange(t)},handleStrategyTypeChange:function(t){var e=t.target.value;"single"===e&&(this.crossSectionalSymbols=[])},handleCrossSectionalSymbolChange:function(t){if(t&&t.includes("__add_symbol_option__"))return this.crossSectionalSymbols=t.filter(function(t){return"__add_symbol_option__"!==t}),this.showAddSymbolModal=!0,void this.loadHotSymbols(this.addSymbolMarket);if(this.crossSectionalSymbols=t||[],t&&t.length>0){var e=t[0];if("string"===typeof e&&e.includes(":")){var a=e.indexOf(":"),i=e.slice(0,a);this.selectedMarketCategory=i||"Crypto"}}},getMarketColor:function(t){var e={USStock:"green",Crypto:"purple",Forex:"gold",Futures:"cyan"};return e[t]||"default"},handleWatchlistSymbolChange:function(t){var e=this;if("__add_symbol_option__"===t)return this.$nextTick(function(){e.form.setFieldsValue({symbol:void 0})}),this.showAddSymbolModal=!0,void this.loadHotSymbols(this.addSymbolMarket);if(t&&"string"===typeof t&&t.includes(":")){var a=t.indexOf(":"),i=t.slice(0,a);if(this.selectedMarketCategory=i||"Crypto","Forex"===this.selectedMarketCategory){this.currentBrokerId="mt5";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({forex_broker_id:"mt5"})}catch(r){}}else if("USStock"===this.selectedMarketCategory){this.currentBrokerId="ibkr";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({broker_id:"ibkr"})}catch(r){}}var s=["Crypto","USStock","Forex"].includes(this.selectedMarketCategory);if(!s){this.executionModeUi="signal";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({execution_mode:"signal"})}catch(r){}}this.currentExchangeId="";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({exchange_id:void 0})}catch(r){}}},handleMultiSymbolChange:function(t){if(this.selectedSymbols=t||[],t&&t.length>0){var e=t[0];if("string"===typeof e&&e.includes(":")){var a=e.indexOf(":"),i=e.slice(0,a);this.selectedMarketCategory=i||"Crypto"}}if("Forex"===this.selectedMarketCategory){this.currentBrokerId="mt5";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({forex_broker_id:"mt5"})}catch(r){}}else if("USStock"===this.selectedMarketCategory){this.currentBrokerId="ibkr";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({broker_id:"ibkr"})}catch(r){}}var s=["Crypto","USStock","Forex"].includes(this.selectedMarketCategory);if(!s){this.executionModeUi="signal";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({execution_mode:"signal"})}catch(r){}}this.currentExchangeId="";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({exchange_id:void 0})}catch(r){}},loadExchangeCredentials:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loadingExchangeCredentials=!0,e.p=1,e.n=2,(0,p.IA)({user_id:1});case 2:a=e.v,a&&1===a.code?t.exchangeCredentials=a.data&&a.data.items||[]:(t.exchangeCredentials=[],t.$message.warning((null===a||void 0===a?void 0:a.msg)||t.$t("trading-assistant.messages.loadFailed"))),e.n=4;break;case 3:e.p=3,e.v,t.exchangeCredentials=[],t.$message.warning(t.$t("trading-assistant.exchange.testFailed"));case 4:return e.p=4,t.loadingExchangeCredentials=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},formatCredentialLabel:function(t){if(!t)return"";var e=(t.name||"").trim(),a=t.exchange_id||"",i=t.api_key_hint||"";return e?"".concat(a.toUpperCase()," - ").concat(e," (").concat(i,")"):"".concat(a.toUpperCase()," (").concat(i,")")},isCredentialCompatible:function(t){if(!t||!t.exchange_id)return!0;var e=(t.exchange_id||"").toLowerCase(),a=this.selectedMarketCategory||"Crypto";if("mt5"===e)return"Forex"===a;if("ibkr"===e)return"USStock"===a;var i=["binance","okx","bitget","bybit","coinbaseexchange","kraken","kucoin","gate","bitfinex","deepcoin"];return!i.includes(e)||"Crypto"===a},handleCredentialSelectChange:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var i,s,r;return(0,o.A)().w(function(a){while(1)switch(a.n){case 0:if(t){a.n=1;break}return e.currentExchangeId="",e.connectionTestResult=null,a.a(2);case 1:if(i=e.exchangeCredentials.find(function(e){return String(e.id)===String(t)}),!i){a.n=5;break}if(s=(i.exchange_id||"").toLowerCase(),"mt5"!==s||"Forex"===e.selectedMarketCategory){a.n=2;break}e.$message.error(e.$t("trading-assistant.validation.mt5OnlyForForex"));try{e.form&&e.form.setFieldsValue&&e.form.setFieldsValue({credential_id:void 0})}catch(n){}return e.currentExchangeId="",e.connectionTestResult=null,a.a(2);case 2:if("ibkr"!==s||"USStock"===e.selectedMarketCategory){a.n=3;break}e.$message.error(e.$t("trading-assistant.validation.ibkrOnlyForUSStock"));try{e.form&&e.form.setFieldsValue&&e.form.setFieldsValue({credential_id:void 0})}catch(n){}return e.currentExchangeId="",e.connectionTestResult=null,a.a(2);case 3:if(r=["binance","okx","bitget","bybit","coinbaseexchange","kraken","kucoin","gate","bitfinex"],!r.includes(s)||"Crypto"===e.selectedMarketCategory){a.n=4;break}e.$message.error(e.$t("trading-assistant.validation.cryptoExchangeOnlyForCrypto"));try{e.form&&e.form.setFieldsValue&&e.form.setFieldsValue({credential_id:void 0})}catch(n){}return e.currentExchangeId="",e.connectionTestResult=null,a.a(2);case 4:e.currentExchangeId=i.exchange_id||"";case 5:e.connectionTestResult=null;case 6:return a.a(2)}},a)}))()},onSaveCredentialChange:function(t){var e=!!(t&&t.target&&t.target.checked);this.saveCredentialUi=e;try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({save_credential:e})}catch(a){}},onExecutionModeChange:function(t){var e=t&&t.target?t.target.value:t;this.executionModeUi=e||"signal",this.liveDisclaimerAckUi=!1;try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({live_disclaimer_ack:!1})}catch(a){}if(!this.canUseLiveTrading&&"signal"!==this.executionModeUi){this.executionModeUi="signal";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({execution_mode:"signal"})}catch(a){}}},onLiveDisclaimerAckChange:function(t){var e=!!(t&&t.target&&t.target.checked);this.liveDisclaimerAckUi=e;try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({live_disclaimer_ack:e})}catch(a){}},onNotifyChannelsChange:function(t){this.notifyChannelsUi=Array.isArray(t)?t:[]},formatCurrency:function(t){return null===t||void 0===t?"-":"$"+t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})},formatPnl:function(t){if(null===t||void 0===t)return"-";var e=t>=0?"+":"";return e+"$"+Math.abs(t).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})},formatPnlPercent:function(t){if(null===t||void 0===t)return"-";var e=t>=0?"+":"";return e+Math.abs(t).toFixed(2)+"%"},loadStrategies:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a,i,s;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loading=!0,e.p=1,e.n=2,(0,m.EM)();case 2:a=e.v,1===a.code?(i=a.data.strategies||[],t.strategies=i,t.selectedStrategy&&(s=t.strategies.find(function(e){return e.id===t.selectedStrategy.id}),t.selectedStrategy=s||null)):t.$message.error(a.msg||t.$t("trading-assistant.messages.loadFailed")),e.n=4;break;case 3:e.p=3,e.v,t.$message.error(t.$t("trading-assistant.messages.loadFailed"));case 4:return e.p=4,t.loading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleCreateStrategy:function(){var t=this;this.isEditMode=!1,this.editingStrategy=null,this.strategyType="indicator",this.currentStep=0,this.currentExchangeId="",this.currentBrokerId="ibkr",this.selectedIndicator=null,this.connectionTestResult=null,this.executionModeUi="signal",this.notifyChannelsUi=["browser"],this.saveCredentialUi=!1,this.backtestCollapseKeys=["risk"],this.trailingEnabledUi=!1,this.entryPctMaxUi=100,this.aiFilterEnabledUi=!1,this.selectedMarketCategory="Crypto",this.selectedSymbols=[],this.showAdvancedSettings=!1,this.form.resetFields(),this.form.setFieldsValue({execution_mode:"signal",notify_channels:["browser"],save_credential:!1,live_disclaimer_ack:!1}),this.liveDisclaimerAckUi=!1,this.showFormModal=!0,this.$nextTick(function(){t.loadWatchlist(),t.loadIndicators(),t.loadExchangeCredentials()})},handleEditStrategy:function(t){var e=this;"running"!==t.status?(this.strategyType="indicator",this.isEditMode=!0,this.editingStrategy=t,this.currentStep=0,this.currentExchangeId="",this.selectedIndicator=null,this.connectionTestResult=null,this.form.resetFields(),this.backtestCollapseKeys=["risk"],this.trailingEnabledUi=!1,this.entryPctMaxUi=100,this.aiFilterEnabledUi=!1,this.showFormModal=!0,this.$nextTick((0,l.A)((0,o.A)().m(function a(){return(0,o.A)().w(function(a){while(1)switch(a.n){case 0:return e.loadWatchlist(),e.loadIndicators(),e.loadExchangeCredentials(),a.n=1,e.loadStrategyDataToForm(t);case 1:return a.a(2)}},a)})))):this.$message.warning(this.$t("trading-assistant.messages.runningWarning"))},loadStrategyDataToForm:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var i,s,r,l,d,c,u,m,g,p,h,_,y,f,v,b,S,k,x,C,w,$,A,P,M,F,T,V,I,N,U,E,z,D,R,K,q,L,B,O,H,W;return(0,o.A)().w(function(a){while(1)switch(a.n){case 0:if(e.indicatorsLoaded){a.n=1;break}return a.n=1,e.loadIndicators();case 1:return a.n=2,e.$nextTick();case 2:return e.selectedMarketCategory=t.market_category||"Crypto",c=t.execution_mode||"signal",e.executionModeUi=c,e.liveDisclaimerAckUi="live"===c,u=t.notification_config&&t.notification_config.channels||["browser"],e.notifyChannelsUi=Array.isArray(u)?u:["browser"],m=!1,g=!1,t.trading_config&&(f=t.trading_config||{},v=f.trailing&&"object"===(0,n.A)(f.trailing)?f.trailing:null,m=void 0!==f.trailing_enabled?!!f.trailing_enabled:!(!v||!v.enabled),b=f.enable_ai_filter,g=!0===b||"true"===b||1===b||"1"===b,S=f.scale&&"object"===(0,n.A)(f.scale)?f.scale:null,k=f.position&&"object"===(0,n.A)(f.position)?f.position:null,x=new Set(["risk"]),(f.trend_add_enabled||f.dca_add_enabled||S&&(null!==(p=S.trendAdd)&&void 0!==p&&p.enabled||null!==(h=S.dcaAdd)&&void 0!==h&&h.enabled))&&x.add("scale"),(f.trend_reduce_enabled||f.adverse_reduce_enabled||S&&(null!==(_=S.trendReduce)&&void 0!==_&&_.enabled||null!==(y=S.adverseReduce)&&void 0!==y&&y.enabled))&&x.add("reduce"),(void 0!==f.entry_pct||k&&void 0!==k.entryPct)&&x.add("position"),e.backtestCollapseKeys=Array.from(x)),e.trailingEnabledUi=m,e.aiFilterEnabledUi=g,a.n=3,e.$nextTick();case 3:return e.form.setFieldsValue({enable_ai_filter:g}),a.n=4,e.$nextTick();case 4:if(e.form.setFieldsValue({execution_mode:e.executionModeUi,live_disclaimer_ack:e.liveDisclaimerAckUi,notify_channels:e.notifyChannelsUi,notify_email:(null===(i=t.notification_config)||void 0===i||null===(i=i.targets)||void 0===i?void 0:i.email)||"",notify_phone:(null===(s=t.notification_config)||void 0===s||null===(s=s.targets)||void 0===s?void 0:s.phone)||"",notify_telegram:(null===(r=t.notification_config)||void 0===r||null===(r=r.targets)||void 0===r?void 0:r.telegram)||"",notify_discord:(null===(l=t.notification_config)||void 0===l||null===(l=l.targets)||void 0===l?void 0:l.discord)||"",notify_webhook:(null===(d=t.notification_config)||void 0===d||null===(d=d.targets)||void 0===d?void 0:d.webhook)||""}),!t.indicator_config||!t.indicator_config.indicator_id){a.n=7;break}if(C=t.indicator_config.indicator_id,w=e.availableIndicators.find(function(t){return String(t.id)===String(C)}),!w){a.n=6;break}return A=String(w.id),e.form.setFieldsValue({indicator_id:A}),a.n=5,e.handleIndicatorChange(A);case 5:P=null===($=t.trading_config)||void 0===$?void 0:$.indicator_params,P&&"object"===(0,n.A)(P)&&Object.keys(P).forEach(function(t){t in e.indicatorParamValues&&e.$set(e.indicatorParamValues,t,P[t])}),a.n=7;break;case 6:e.form.setFieldsValue({indicator_id:String(C)});case 7:if(!t.exchange_config){a.n=11;break}if(M=t.exchange_config.exchange_id||"",F="live"===e.executionModeUi,T=["Crypto","USStock","Forex"].includes(e.selectedMarketCategory),V="USStock"===e.selectedMarketCategory,I="Forex"===e.selectedMarketCategory,!F||!T){a.n=10;break}if(!V){a.n=8;break}e.currentBrokerId=M||"ibkr",e.form.setFieldsValue({broker_id:M||"ibkr",ibkr_host:t.exchange_config.ibkr_host||"127.0.0.1",ibkr_port:t.exchange_config.ibkr_port||7497,ibkr_client_id:t.exchange_config.ibkr_client_id||1,ibkr_account:t.exchange_config.ibkr_account||""}),a.n=10;break;case 8:if(!I){a.n=9;break}e.currentBrokerId=M||"mt5",e.form.setFieldsValue({forex_broker_id:M||"mt5",mt5_server:t.exchange_config.mt5_server||"",mt5_login:t.exchange_config.mt5_login||"",mt5_password:t.exchange_config.mt5_password||"",mt5_terminal_path:t.exchange_config.mt5_terminal_path||""}),a.n=10;break;case 9:if(e.currentExchangeId=M||t.exchange_config.exchange_id||"",N=t.exchange_config.credential_id,!N){a.n=10;break}return e.form.setFieldsValue({credential_id:N}),a.n=10,e.handleCredentialSelectChange(N);case 10:V||I?e.currentBrokerId=M||(I?"mt5":"ibkr"):e.currentExchangeId=M;case 11:if(t.trading_config){if(U=t.trading_config||{},E=U.trailing&&"object"===(0,n.A)(U.trailing)?U.trailing:null,z=U.scale&&"object"===(0,n.A)(U.scale)?U.scale:null,D=U.position&&"object"===(0,n.A)(U.position)?U.position:null,R=U.strategy_type||t.strategy_type||"single","cross_sectional"===R)if(e.form.setFieldsValue({cs_strategy_type:"cross_sectional",portfolio_size:U.portfolio_size||10,long_ratio:U.long_ratio||.5,rebalance_frequency:U.rebalance_frequency||"daily"}),U.symbol_list&&Array.isArray(U.symbol_list))e.crossSectionalSymbols=U.symbol_list;else if(t.symbol_list)try{K="string"===typeof t.symbol_list?JSON.parse(t.symbol_list):t.symbol_list,Array.isArray(K)&&(e.crossSectionalSymbols=K)}catch(o){e.crossSectionalSymbols=[]}else e.crossSectionalSymbols=[];else e.form.setFieldsValue({cs_strategy_type:"single"}),e.crossSectionalSymbols=[];q=z&&z.trendAdd?z.trendAdd:null,L=z&&z.dcaAdd?z.dcaAdd:null,B=z&&z.trendReduce?z.trendReduce:null,O=z&&z.adverseReduce?z.adverseReduce:null,H=U.symbol,W="string"===typeof H&&H.includes(":")?H:"".concat(e.selectedMarketCategory,":").concat(H),e.form.setFieldsValue({strategy_name:t.strategy_name,symbol:W,initial_capital:U.initial_capital,leverage:U.leverage,trade_direction:U.trade_direction||"long",timeframe:U.timeframe||"1H",market_type:"futures"===U.market_type?"swap":U.market_type||"swap",take_profit_pct:U.take_profit_pct||0,stop_loss_pct:U.stop_loss_pct||0,trailing_enabled:m,trailing_stop_pct:void 0!==U.trailing_stop_pct?U.trailing_stop_pct||0:E&&E.pct||0,trailing_activation_pct:void 0!==U.trailing_activation_pct?U.trailing_activation_pct||0:E&&E.activationPct||0,trend_add_enabled:void 0!==U.trend_add_enabled?!!U.trend_add_enabled:!(!q||!q.enabled),trend_add_step_pct:void 0!==U.trend_add_step_pct?U.trend_add_step_pct||0:q&&q.stepPct||0,trend_add_size_pct:void 0!==U.trend_add_size_pct?U.trend_add_size_pct||0:q&&q.sizePct||0,trend_add_max_times:void 0!==U.trend_add_max_times?U.trend_add_max_times||0:q&&q.maxTimes||0,dca_add_enabled:void 0!==U.dca_add_enabled?!!U.dca_add_enabled:!(!L||!L.enabled),dca_add_step_pct:void 0!==U.dca_add_step_pct?U.dca_add_step_pct||0:L&&L.stepPct||0,dca_add_size_pct:void 0!==U.dca_add_size_pct?U.dca_add_size_pct||0:L&&L.sizePct||0,dca_add_max_times:void 0!==U.dca_add_max_times?U.dca_add_max_times||0:L&&L.maxTimes||0,trend_reduce_enabled:void 0!==U.trend_reduce_enabled?!!U.trend_reduce_enabled:!(!B||!B.enabled),trend_reduce_step_pct:void 0!==U.trend_reduce_step_pct?U.trend_reduce_step_pct||0:B&&B.stepPct||0,trend_reduce_size_pct:void 0!==U.trend_reduce_size_pct?U.trend_reduce_size_pct||0:B&&B.sizePct||0,trend_reduce_max_times:void 0!==U.trend_reduce_max_times?U.trend_reduce_max_times||0:B&&B.maxTimes||0,adverse_reduce_enabled:void 0!==U.adverse_reduce_enabled?!!U.adverse_reduce_enabled:!(!O||!O.enabled),adverse_reduce_step_pct:void 0!==U.adverse_reduce_step_pct?U.adverse_reduce_step_pct||0:O&&O.stepPct||0,adverse_reduce_size_pct:void 0!==U.adverse_reduce_size_pct?U.adverse_reduce_size_pct||0:O&&O.sizePct||0,adverse_reduce_max_times:void 0!==U.adverse_reduce_max_times?U.adverse_reduce_max_times||0:O&&O.maxTimes||0,entry_pct:0===U.entry_pct||U.entry_pct?U.entry_pct:D&&D.entryPct?D.entryPct:100,enable_ai_filter:g}),e.$nextTick(function(){e.recalcEntryPctMaxUi(),e.normalizeEntryPct()})}case 12:return a.a(2)}},a)}))()},handleSelectStrategy:function(t){this.selectedStrategy=t,this.currentEquity=null,this.loadStrategyDetails(),this.startEquityPolling()},loadStrategyDetails:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a,i,s,n,l,d,u,g,p,h,_,y,f;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.selectedStrategy){e.n=1;break}return e.a(2,Promise.resolve());case 1:return e.p=1,e.n=2,Promise.all([(0,m.Yx)(t.selectedStrategy.id),(0,m.oK)(t.selectedStrategy.id)]);case 2:if(a=e.v,i=(0,r.A)(a,2),s=i[0],n=i[1],l=null,1===s.code&&s.data&&(Array.isArray(s.data)&&s.data.length>0?(d=s.data[s.data.length-1],l=d.equity):(g=(null===(u=t.selectedStrategy.trading_config)||void 0===u?void 0:u.initial_capital)||t.selectedStrategy.initial_capital,l=g||null)),p=0,1===n.code&&n.data){h=n.data.positions||n.data.items||[],_=(0,c.A)(h);try{for(_.s();!(y=_.n()).done;)f=y.value,p+=parseFloat(f.unrealized_pnl||f.unrealizedPnl||0)}catch(o){_.e(o)}finally{_.f()}}t.currentEquity=null!==l?l+p:null,e.n=4;break;case 3:e.p=3,e.v;case 4:return e.a(2)}},e,null,[[1,3]])}))()},startEquityPolling:function(){var t=this;this.stopEquityPolling(),this.selectedStrategy&&(this.loadStrategyDetails(),this.equityPollingTimer=setInterval(function(){t.loadStrategyDetails()},1e4))},stopEquityPolling:function(){this.equityPollingTimer&&(clearInterval(this.equityPollingTimer),this.equityPollingTimer=null)},handleCloseModal:function(){this.showFormModal=!1,this.editingStrategy=null,this.isEditMode=!1,this.strategyType="indicator",this.currentStep=0,this.currentExchangeId="",this.selectedIndicator=null,this.connectionTestResult=null,this.indicatorsLoaded=!1,this.availableIndicators=[],this.backtestCollapseKeys=["risk"],this.trailingEnabledUi=!1,this.entryPctMaxUi=100,this.aiFilterEnabledUi=!1,this.showAdvancedSettings=!1,this.executionModeUi="signal",this.liveDisclaimerAckUi=!1,this.form.resetFields()},handleRefresh:function(){this.loadStrategies(),this.showFormModal=!1},handleMenuClick:function(t,e){switch(t){case"start":this.handleStartStrategy(e.id);break;case"stop":this.handleStopStrategy(e.id);break;case"edit":this.handleEditStrategy(e);break;case"delete":this.handleDeleteStrategy(e);break}},toggleGroup:function(t){this.$set(this.collapsedGroups,t,!this.collapsedGroups[t])},handleGroupMenuClick:function(t,e){var a=this;return(0,l.A)((0,o.A)().m(function i(){var s,r;return(0,o.A)().w(function(i){while(1)switch(i.n){case 0:s=e.strategies.map(function(t){return t.id}),r=t,i.n="startAll"===r?1:"stopAll"===r?3:"deleteAll"===r?5:7;break;case 1:return i.n=2,a.handleBatchStartStrategies(s,e.baseName);case 2:return i.a(3,7);case 3:return i.n=4,a.handleBatchStopStrategies(s,e.baseName);case 4:return i.a(3,7);case 5:return i.n=6,a.handleBatchDeleteStrategies(s,e.baseName);case 6:return i.a(3,7);case 7:return i.a(2)}},i)}))()},handleBatchStartStrategies:function(t,e){var a=this;return(0,l.A)((0,o.A)().m(function e(){var i,s,r;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,m.UH)({strategy_ids:t});case 1:i=e.v,1===i.code?(r=(null===(s=i.data)||void 0===s||null===(s=s.success_ids)||void 0===s?void 0:s.length)||t.length,a.$message.success(a.$t("trading-assistant.messages.batchStartSuccess",{count:r})),a.loadStrategies()):a.$message.error(i.msg||a.$t("trading-assistant.messages.batchStartFailed")),e.n=3;break;case 2:e.p=2,e.v,a.$message.error(a.$t("trading-assistant.messages.batchStartFailed"));case 3:return e.a(2)}},e,null,[[0,2]])}))()},handleBatchStopStrategies:function(t,e){var a=this;return(0,l.A)((0,o.A)().m(function e(){var i,s,r;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,m.GF)({strategy_ids:t});case 1:i=e.v,1===i.code?(r=(null===(s=i.data)||void 0===s||null===(s=s.success_ids)||void 0===s?void 0:s.length)||t.length,a.$message.success(a.$t("trading-assistant.messages.batchStopSuccess",{count:r})),a.loadStrategies()):a.$message.error(i.msg||a.$t("trading-assistant.messages.batchStopFailed")),e.n=3;break;case 2:e.p=2,e.v,a.$message.error(a.$t("trading-assistant.messages.batchStopFailed"));case 3:return e.a(2)}},e,null,[[0,2]])}))()},handleBatchDeleteStrategies:function(t,e){var a=this;return(0,l.A)((0,o.A)().m(function i(){var s;return(0,o.A)().w(function(i){while(1)switch(i.n){case 0:s=a.$t("trading-assistant.messages.batchDeleteConfirm",{count:t.length,name:e}),a.$confirm({title:a.$t("trading-assistant.deleteAll"),content:s,okText:a.$t("trading-assistant.deleteAll"),okType:"danger",cancelText:a.$t("trading-assistant.form.cancel"),onOk:function(){var e=(0,l.A)((0,o.A)().m(function e(){var i,s,r;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,m.xQ)({strategy_ids:t});case 1:i=e.v,1===i.code?(r=(null===(s=i.data)||void 0===s||null===(s=s.success_ids)||void 0===s?void 0:s.length)||t.length,a.$message.success(a.$t("trading-assistant.messages.batchDeleteSuccess",{count:r})),a.selectedStrategy&&t.includes(a.selectedStrategy.id)&&(a.selectedStrategy=null,a.stopEquityPolling()),a.loadStrategies()):a.$message.error(i.msg||a.$t("trading-assistant.messages.batchDeleteFailed")),e.n=3;break;case 2:e.p=2,e.v,a.$message.error(a.$t("trading-assistant.messages.batchDeleteFailed"));case 3:return e.a(2)}},e,null,[[0,2]])}));function i(){return e.apply(this,arguments)}return i}()});case 1:return i.a(2)}},i)}))()},handleStartStrategy:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var i;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,m.mV)(t);case 1:i=a.v,1===i.code?(e.$message.success(e.$t("trading-assistant.messages.startSuccess")),e.loadStrategies(),e.selectedStrategy&&e.selectedStrategy.id===t&&(e.selectedStrategy.status="running")):e.$message.error(i.msg||e.$t("trading-assistant.messages.startFailed")),a.n=3;break;case 2:a.p=2,a.v,e.$message.error(e.$t("trading-assistant.messages.startFailed"));case 3:return a.a(2)}},a,null,[[0,2]])}))()},handleStopStrategy:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var i;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,m.Ke)(t);case 1:i=a.v,1===i.code?(e.$message.success(e.$t("trading-assistant.messages.stopSuccess")),e.loadStrategies(),e.selectedStrategy&&e.selectedStrategy.id===t&&(e.selectedStrategy.status="stopped")):e.$message.error(i.msg||e.$t("trading-assistant.messages.stopFailed")),a.n=3;break;case 2:a.p=2,a.v,e.$message.error(e.$t("trading-assistant.messages.stopFailed"));case 3:return a.a(2)}},a,null,[[0,2]])}))()},handleDeleteStrategy:function(t){var e=this,a=this.$t("trading-assistant.messages.deleteConfirmWithName",{name:t.strategy_name});this.$confirm({title:this.$t("trading-assistant.deleteStrategy"),content:a,okText:this.$t("trading-assistant.deleteStrategy"),okType:"danger",cancelText:this.$t("trading-assistant.form.cancel"),onOk:function(){var a=(0,l.A)((0,o.A)().m(function a(){var i;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,m.v_)(t.id);case 1:i=a.v,1===i.code?(e.$message.success(e.$t("trading-assistant.messages.deleteSuccess")),e.selectedStrategy&&e.selectedStrategy.id===t.id&&(e.selectedStrategy=null,e.stopEquityPolling()),e.loadStrategies()):e.$message.error(i.msg||e.$t("trading-assistant.messages.deleteFailed")),a.n=3;break;case 2:a.p=2,a.v,e.$message.error(e.$t("trading-assistant.messages.deleteFailed"));case 3:return a.a(2)}},a,null,[[0,2]])}));function i(){return a.apply(this,arguments)}return i}()})},getStatusColor:function(t){var e={running:"green",stopped:"default",error:"red"};return e[t]||"default"},getStatusText:function(t){return this.$t("trading-assistant.status.".concat(t))||t},getStrategyTypeText:function(t){return this.$t("trading-assistant.strategyType.".concat(t))||t},getTradeDirectionText:function(t){if(!t)return"";var e={long:this.$t("trading-assistant.form.tradeDirectionLong")||"做多",short:this.$t("trading-assistant.form.tradeDirectionShort")||"做空",both:this.$t("trading-assistant.form.tradeDirectionBoth")||"双向"};return e[t]||t},handleIndicatorSelectFocus:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){return(0,o.A)().w(function(e){while(1)switch(e.n){case 0:if(t.indicatorsLoaded||t.loadingIndicators){e.n=1;break}return e.n=1,t.loadIndicators();case 1:return e.a(2)}},e)}))()},loadIndicators:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a,i,s,r;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!t.loadingIndicators){e.n=1;break}return e.a(2,new Promise(function(e){var a=setInterval(function(){t.loadingIndicators||(clearInterval(a),e())},100)}));case 1:if(!t.indicatorsLoaded){e.n=2;break}return e.a(2,Promise.resolve());case 2:return a=t.$store.getters.userInfo||{},i=a.id||1,t.loadingIndicators=!0,e.p=3,e.n=4,(0,y.Ay)({url:"/api/indicator/getIndicators",method:"get",params:{userid:i}});case 4:s=e.v,1===s.code&&s.data?(r=s.data.map(function(t){return{id:t.id,name:t.name,description:t.description,type:t.indicator_type||t.indicatorType||"python",code:t.code,is_buy:t.is_buy,source:1===t.is_buy?"bought":"custom"}}),t.availableIndicators=r,t.indicatorsLoaded=!0):(t.availableIndicators=[],t.$message.warning(s.msg||t.$t("trading-assistant.messages.loadIndicatorsFailed"))),e.n=6;break;case 5:e.p=5,e.v,t.availableIndicators=[],t.$message.warning(t.$t("trading-assistant.messages.loadIndicatorsFailed"));case 6:return e.p=6,t.loadingIndicators=!1,e.f(6);case 7:return e.a(2)}},e,null,[[3,5,6,7]])}))()},handleIndicatorChange:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var i,s,r;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(i=String(t),e.selectedIndicator=e.availableIndicators.find(function(t){return String(t.id)===i}),e.indicatorParams=[],e.indicatorParamValues={},!t){a.n=4;break}return a.p=1,a.n=2,e.$http.get("/api/indicator/getIndicatorParams",{params:{indicator_id:t}});case 2:s=a.v,s&&1===s.code&&Array.isArray(s.data)&&(e.indicatorParams=s.data,r={},s.data.forEach(function(t){r[t.name]=t.default}),e.indicatorParamValues=r),a.n=4;break;case 3:a.p=3,a.v;case 4:return a.a(2)}},a,null,[[1,3]])}))()},handleMarketTypeChange:function(t){var e=t.target.value;"spot"===e&&this.form.setFieldsValue({trade_direction:"long",leverage:1})},recalcEntryPctMaxUi:function(){if(this.form){var t=!!this.form.getFieldValue("trend_add_enabled"),e=!!this.form.getFieldValue("dca_add_enabled"),a=Number(this.form.getFieldValue("trend_add_max_times")||0),i=Number(this.form.getFieldValue("dca_add_max_times")||0),s=Number(this.form.getFieldValue("trend_add_size_pct")||0),r=Number(this.form.getFieldValue("dca_add_size_pct")||0),n=(t?a*s:0)+(e?i*r:0),o=Math.max(0,Math.min(100,100-n));this.entryPctMaxUi=o}else this.entryPctMaxUi=100},normalizeEntryPct:function(){if(this.form){var t=Number(this.form.getFieldValue("entry_pct")||0),e=Number(this.entryPctMaxUi||100);t>e&&this.form.setFieldsValue({entry_pct:e})}},onTrendAddToggle:function(t){var e=this;this.form&&(t&&this.form.setFieldsValue({dca_add_enabled:!1}),this.$nextTick(function(){e.recalcEntryPctMaxUi(),e.normalizeEntryPct()}))},onDcaAddToggle:function(t){var e=this;this.form&&(t&&this.form.setFieldsValue({trend_add_enabled:!1}),this.$nextTick(function(){e.recalcEntryPctMaxUi(),e.normalizeEntryPct()}))},onScaleParamsChange:function(){var t=this;this.$nextTick(function(){t.recalcEntryPctMaxUi(),t.normalizeEntryPct()})},onEntryPctChange:function(){var t=this;this.$nextTick(function(){return t.normalizeEntryPct()})},onTrailingToggle:function(t){this.form&&(this.trailingEnabledUi=!!t,t||this.form.setFieldsValue({trailing_stop_pct:0,trailing_activation_pct:0}))},onAiFilterToggle:function(t){this.aiFilterEnabledUi=!!t;try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({enable_ai_filter:!!t})}catch(e){}},filterIndicatorOption:function(t,e){var a=e.componentOptions.children[0].children[0].text;return a.toLowerCase().indexOf(t.toLowerCase())>=0},filterSymbolOption:function(t,e){return e.componentOptions.children[0].text.toLowerCase().indexOf(t.toLowerCase())>=0},getIndicatorTypeColor:function(t){var e={trend:"blue",momentum:"green",volatility:"orange",volume:"purple",custom:"default"};return e[t]||"default"},getIndicatorTypeName:function(t){return this.$t("trading-assistant.indicatorType.".concat(t))||t},getExchangeName:function(t){if(t.labelKey){var e="trading-assistant.exchangeNames.".concat(t.labelKey),a=this.$t(e);return a===e?t.value.charAt(0).toUpperCase()+t.value.slice(1):a}return t.label||t.value},getExchangeDisplayName:function(t){if(!t)return"";var e=this.exchangeOptions.find(function(e){return e.value===t});return e?this.getExchangeName(e):t.charAt(0).toUpperCase()+t.slice(1)},getExchangeTagColor:function(t){var e={binance:"gold",okx:"blue",coinbaseexchange:"cyan",kraken:"purple",bitfinex:"geekblue",huobi:"orange",gate:"green",mexc:"lime",kucoin:"volcano",bybit:"red",bitget:"magenta",bitmex:"red",deribit:"blue",phemex:"cyan",bitmart:"geekblue",bitstamp:"purple",bittrex:"orange",poloniex:"green",gemini:"lime",cryptocom:"volcano",blockchaincom:"magenta",bitflyer:"red",upbit:"blue",bithumb:"cyan",coinone:"purple",zb:"geekblue",lbank:"orange",bibox:"green",bigone:"lime",bitrue:"volcano",coinex:"magenta",ftx:"red",ftxus:"blue",binanceus:"gold",binancecoinm:"gold",binanceusdm:"gold",ibkr:"green"};return e[t]||"default"},handleApiConfigChange:function(){this.connectionTestResult=null},getModalPopupContainer:function(){return window.document.body},handleBrokerSelectChange:function(t){this.currentBrokerId=t||"ibkr",this.connectionTestResult=null},handleForexBrokerSelectChange:function(t){this.currentBrokerId=t||"mt5",this.connectionTestResult=null},handleExchangeSelectChange:function(t){var e=this;this.currentExchangeId=t||"",this.connectionTestResult=null,this.suppressApiClearOnce?this.suppressApiClearOnce=!1:this.$nextTick(function(){var t={api_key:void 0,secret_key:void 0,passphrase:void 0,enable_demo_trading:!1};setTimeout(function(){e.form.setFieldsValue(t)},100)})},getPlaceholder:function(t){var e={okx:{api_key:"请输入API Key",secret_key:"请输入Secret Key",passphrase:"请输入Passphrase(创建API时设置)"},okex:{api_key:"请输入API Key",secret_key:"请输入Secret Key",passphrase:"请输入Passphrase(创建API时设置)"},binance:{api_key:"请输入API Key",secret_key:"请输入Secret Key"},coinbaseexchange:{api_key:"请输入API Key(或Key Name)",secret_key:"请输入API Secret(或Private Key)",passphrase:"请输入Passphrase(Legacy Pro API需要)"},kucoin:{api_key:"请输入API Key",secret_key:"请输入Secret Key",passphrase:"请输入Passphrase"},gate:{api_key:"请输入API Key",secret_key:"请输入Secret Key"},mexc:{api_key:"请输入Access Key",secret_key:"请输入Secret Key"},kraken:{api_key:"请输入API Key",secret_key:"请输入Secret Key"},bitfinex:{api_key:"请输入API Key",secret_key:"请输入Secret Key"},bybit:{api_key:"请输入API Key",secret_key:"请输入Secret Key"},bitget:{api_key:"请输入API Key",secret_key:"请输入Secret Key",passphrase:"请输入Passphrase(Legacy Pro API需要)"}},a=e[this.currentExchangeId]||{};if(a[t])return a[t];var i={api_key:this.$t("trading-assistant.placeholders.inputApiKey"),secret_key:this.$t("trading-assistant.placeholders.inputSecretKey"),passphrase:this.$t("trading-assistant.placeholders.inputPassphrase")};return i[t]||this.$t("trading-assistant.placeholders.inputApiKey")},handleNext:function(){var t=this;if(0===this.currentStep){var e=["indicator_id","strategy_name"];(this.isAdvancedMode||this.editingStrategy)&&e.push("initial_capital","market_type","leverage","trade_direction","timeframe"),this.isEditMode&&e.push("symbol"),this.form.validateFields(e,function(e,a){if(!e){if(!t.isEditMode){var i=t.form.getFieldValue("cs_strategy_type")||"single";if("cross_sectional"===i){if(!t.crossSectionalSymbols||0===t.crossSectionalSymbols.length)return void t.$message.warning(t.$t("trading-assistant.validation.symbolsRequired"))}else if(!t.selectedSymbols||0===t.selectedSymbols.length)return void t.$message.warning(t.$t("trading-assistant.validation.symbolsRequired"))}try{var s=a&&a.market_type||t.form.getFieldValue("market_type");"spot"===s&&t.form.setFieldsValue({leverage:1,trade_direction:"long"})}catch(r){}t.backtestCollapseKeys=["risk"];try{t.trailingEnabledUi=!!t.form.getFieldValue("trailing_enabled")}catch(r){t.trailingEnabledUi=!1}t.$nextTick(function(){t.recalcEntryPctMaxUi(),t.normalizeEntryPct()}),t.isSimpleMode&&!t.editingStrategy?t.currentStep=2:t.currentStep++}})}else if(1===this.currentStep){try{var a=this.form.getFieldValue("execution_mode")||"signal";this.executionModeUi=a;var i=this.form.getFieldValue("notify_channels")||["browser"];this.notifyChannelsUi=Array.isArray(i)?i:["browser"]}catch(s){}this.currentStep++}},handlePrev:function(){this.currentStep>0&&(this.isSimpleMode&&!this.editingStrategy&&2===this.currentStep?this.currentStep=0:this.currentStep--)},handleSubmit:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){return(0,o.A)().w(function(e){while(1)switch(e.n){case 0:t.form.validateFields(function(){var e=(0,l.A)((0,o.A)().m(function e(a,i){var s,r,n,l,d,c,u,g,p,h,_,y,f,v,b,S,k;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(a){e.n=14;break}if(e.p=1,t.saving=!0,s=t.canUseLiveTrading&&"live"===i.execution_mode,!s||i.live_disclaimer_ack){e.n=2;break}return t.$message.warning(t.$t("trading-assistant.liveDisclaimer.required")),t.saving=!1,e.a(2);case 2:if(!s){e.n=3;break}if(r=i.credential_id,r){e.n=3;break}return t.$message.warning(t.$t("trading-assistant.validation.credentialRequired")),t.saving=!1,e.a(2);case 3:if(n={channels:i.notify_channels||[],targets:{email:t.userNotificationSettings.email||"",phone:t.userNotificationSettings.phone||"",telegram:t.userNotificationSettings.telegram_chat_id||"",telegram_bot_token:t.userNotificationSettings.telegram_bot_token||"",discord:t.userNotificationSettings.discord_webhook||"",webhook:t.userNotificationSettings.webhook_url||"",webhook_token:t.userNotificationSettings.webhook_token||""}},n.channels&&0!==n.channels.length){e.n=4;break}return t.$message.warning(t.$t("trading-assistant.validation.notifyChannelRequired")),t.saving=!1,e.a(2);case 4:if(l=String(i.indicator_id),d=t.availableIndicators.find(function(t){return String(t.id)===l}),d){e.n=5;break}return t.$message.error(t.$t("trading-assistant.validation.indicatorRequired")),t.saving=!1,e.a(2);case 5:if(c=!!t.aiFilterEnabledUi,u="futures"===i.market_type?"swap":i.market_type||"swap",g=i.leverage||1,p=i.trade_direction||"long","spot"===u?(g=1,p="long",t.$message.info(t.$t("trading-assistant.messages.spotLimitations"))):(g<1&&(g=1),g>125&&(g=125)),h={strategy_name:i.strategy_name,market_category:t.selectedMarketCategory||"Crypto",execution_mode:i.execution_mode||"signal",notification_config:n,indicator_config:{indicator_id:d.id,indicator_name:d.name,indicator_code:d.code||""},exchange_config:s?t.isIBKRMarket?{exchange_id:i.broker_id||t.currentBrokerId||"ibkr",ibkr_host:i.ibkr_host||"127.0.0.1",ibkr_port:i.ibkr_port||7497,ibkr_client_id:i.ibkr_client_id||1,ibkr_account:i.ibkr_account||""}:t.isMT5Market?{exchange_id:i.forex_broker_id||t.currentBrokerId||"mt5",mt5_server:i.mt5_server||"",mt5_login:i.mt5_login||"",mt5_password:i.mt5_password||"",mt5_terminal_path:i.mt5_terminal_path||""}:{credential_id:i.credential_id,exchange_id:t.currentExchangeId||void 0}:void 0,trading_config:{initial_capital:i.initial_capital,leverage:g,trade_direction:p,timeframe:i.timeframe,market_type:u,margin_mode:"cross",signal_mode:"confirmed",take_profit_pct:i.take_profit_pct||0,stop_loss_pct:i.stop_loss_pct||0,trailing_enabled:!!i.trailing_enabled,trailing_stop_pct:i.trailing_stop_pct||0,trailing_activation_pct:i.trailing_activation_pct||0,trend_add_enabled:!!i.trend_add_enabled,trend_add_step_pct:i.trend_add_step_pct||0,trend_add_size_pct:i.trend_add_size_pct||0,trend_add_max_times:i.trend_add_max_times||0,dca_add_enabled:!!i.dca_add_enabled,dca_add_step_pct:i.dca_add_step_pct||0,dca_add_size_pct:i.dca_add_size_pct||0,dca_add_max_times:i.dca_add_max_times||0,trend_reduce_enabled:!!i.trend_reduce_enabled,trend_reduce_step_pct:i.trend_reduce_step_pct||0,trend_reduce_size_pct:i.trend_reduce_size_pct||0,trend_reduce_max_times:i.trend_reduce_max_times||0,adverse_reduce_enabled:!!i.adverse_reduce_enabled,adverse_reduce_step_pct:i.adverse_reduce_step_pct||0,adverse_reduce_size_pct:i.adverse_reduce_size_pct||0,adverse_reduce_max_times:i.adverse_reduce_max_times||0,entry_pct:0===i.entry_pct||i.entry_pct?i.entry_pct:100,commission:i.commission||0,slippage:i.slippage||0,enable_ai_filter:c,indicator_params:t.indicatorParamValues,strategy_type:i.cs_strategy_type||"single",symbol_list:"cross_sectional"===i.cs_strategy_type?t.crossSectionalSymbols:void 0,portfolio_size:"cross_sectional"===i.cs_strategy_type?i.portfolio_size||10:void 0,long_ratio:"cross_sectional"===i.cs_strategy_type?i.long_ratio||.5:void 0,rebalance_frequency:"cross_sectional"===i.cs_strategy_type?i.rebalance_frequency||"daily":void 0}},!t.editingStrategy){e.n=7;break}return y=i.symbol,"string"===typeof y&&y.includes(":")&&(f=y.indexOf(":"),h.market_category=y.slice(0,f)||h.market_category,y=y.slice(f+1)),h.trading_config.symbol=y,e.n=6,(0,m.P7)(t.editingStrategy.id,h);case 6:_=e.v,e.n=11;break;case 7:if(h.user_id=1,h.strategy_type="IndicatorStrategy","cross_sectional"!==i.cs_strategy_type){e.n=9;break}return h.strategy_type="IndicatorStrategy",h.trading_config.symbol=null,e.n=8,(0,m.WM)(h);case 8:_=e.v,e.n=11;break;case 9:return h.symbols=t.selectedSymbols,e.n=10,(0,m.Ox)(h);case 10:_=e.v;case 11:1===_.code?(t.isEditMode?t.$message.success(t.$t("trading-assistant.messages.updateSuccess")):(b=i.cs_strategy_type||"single",S="cross_sectional"===b?t.crossSectionalSymbols.length:t.selectedSymbols.length,k=(null===(v=_.data)||void 0===v?void 0:v.total_created)||S,t.$message.success(t.$t("trading-assistant.messages.batchCreateSuccess",{count:k}))),t.handleRefresh()):t.$message.error(_.msg||(t.isEditMode?t.$t("trading-assistant.messages.updateFailed"):t.$t("trading-assistant.messages.createFailed"))),e.n=13;break;case 12:e.p=12,e.v,t.$message.error(t.isEditMode?t.$t("trading-assistant.messages.updateFailed"):t.$t("trading-assistant.messages.createFailed"));case 13:return e.p=13,t.saving=!1,e.f(13);case 14:return e.a(2)}},e,null,[[1,12,13,14]])}));return function(t,a){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},getFormValues:function(){var t=this;return new Promise(function(e,a){t.form.validateFields(function(t,i){t?a(t):e(i)})})},getDropdownContainer:function(t){return document.body}}},E=U,z=(0,k.A)(E,i,s,!1,null,"13cac835",null),D=z.exports},72694:function(t,e,a){a.d(e,{IA:function(){return n},PR:function(){return o},kI:function(){return l}});var i=a(57888),s=a(76471),r={list:"/api/credentials/list",get:"/api/credentials/get",create:"/api/credentials/create",delete:"/api/credentials/delete"};function n(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,s.Ay)({url:r.list,method:"get",params:t})}function o(t){return(0,s.Ay)({url:r.create,method:"post",data:t})}function l(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(0,s.Ay)({url:r.delete,method:"delete",params:(0,i.A)({id:t},e)})}},64118:function(t,e,a){a.d(e,{Qo:function(){return r},_3:function(){return c},dp:function(){return n},iO:function(){return d},mk:function(){return o},ms:function(){return l},z6:function(){return u}});var i=a(76471),s={GetWatchlist:"/api/market/watchlist/get",AddWatchlist:"/api/market/watchlist/add",RemoveWatchlist:"/api/market/watchlist/remove",GetWatchlistPrices:"/api/market/watchlist/prices",MultiAnalysis:"/api/analysis/multiAnalysis",CreateAnalysisTask:"/api/analysis/createTask",GetAnalysisTaskStatus:"/api/analysis/getTaskStatus",GetAnalysisHistoryList:"/api/analysis/getHistoryList",DeleteAnalysisTask:"/api/analysis/deleteTask",ReflectAnalysis:"/api/analysis/reflect",ChatMessage:"/api/ai/chat/message",GetChatHistory:"/api/ai/chat/history",SaveChatHistory:"/api/ai/chat/history/save",GetConfig:"/api/market/config",GetMenuFooterConfig:"/api/market/menuFooterConfig",GetMarketTypes:"/api/market/types",SearchSymbols:"/api/market/symbols/search",GetHotSymbols:"/api/market/symbols/hot"};function r(t){return(0,i.Ay)({url:s.GetWatchlist,method:"get",params:t})}function n(t){return(0,i.Ay)({url:s.AddWatchlist,method:"post",data:t})}function o(t){return(0,i.Ay)({url:s.RemoveWatchlist,method:"post",data:t})}function l(t){return(0,i.Ay)({url:s.GetWatchlistPrices,method:"get",params:{watchlist:JSON.stringify(t.watchlist||[])}})}function d(){return(0,i.Ay)({url:s.GetMarketTypes,method:"get"})}function c(t){return(0,i.Ay)({url:s.SearchSymbols,method:"get",params:t})}function u(t){return(0,i.Ay)({url:s.GetHotSymbols,method:"get",params:t})}},27617:function(t,e,a){a.d(e,{DK:function(){return f},E$:function(){return c},Gl:function(){return g},O0:function(){return d},TK:function(){return n},aU:function(){return s},cw:function(){return l},d$:function(){return b},hG:function(){return o},kg:function(){return r},nY:function(){return y},r7:function(){return u},rx:function(){return h},v9:function(){return p},vF:function(){return m},vi:function(){return v},wq:function(){return _}});var i=a(76471);function s(t){return(0,i.Ay)({url:"/api/users/list",method:"get",params:t})}function r(t){return(0,i.Ay)({url:"/api/users/create",method:"post",data:t})}function n(t,e){return(0,i.Ay)({url:"/api/users/update",method:"put",params:{id:t},data:e})}function o(t){return(0,i.Ay)({url:"/api/users/delete",method:"delete",params:{id:t}})}function l(t){return(0,i.Ay)({url:"/api/users/reset-password",method:"post",data:t})}function d(){return(0,i.Ay)({url:"/api/users/roles",method:"get"})}function c(){return(0,i.Ay)({url:"/api/users/profile",method:"get"})}function u(t){return(0,i.Ay)({url:"/api/users/profile/update",method:"put",data:t})}function m(){return(0,i.Ay)({url:"/api/users/notification-settings",method:"get"})}function g(t){return(0,i.Ay)({url:"/api/users/notification-settings",method:"put",data:t})}function p(t){return(0,i.Ay)({url:"/api/users/my-credits-log",method:"get",params:t})}function h(t){return(0,i.Ay)({url:"/api/users/my-referrals",method:"get",params:t})}function _(t){return(0,i.Ay)({url:"/api/users/set-credits",method:"post",data:t})}function y(t){return(0,i.Ay)({url:"/api/users/set-vip",method:"post",data:t})}function f(t){return(0,i.Ay)({url:"/api/users/system-strategies",method:"get",params:t})}function v(t){return(0,i.Ay)({url:"/api/users/admin-orders",method:"get",params:t})}function b(t){return(0,i.Ay)({url:"/api/users/admin-ai-stats",method:"get",params:t})}}}]); \ No newline at end of file +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[684],{72684:function(t,e,a){a.r(e),a.d(e,{default:function(){return D}});a(52675),a(89463),a(28706),a(74423),a(48598),a(62010),a(2892),a(9868),a(21699);var i=function(){var t,e=this,a=e._self._c;return a("div",{staticClass:"trading-assistant",class:{"theme-dark":e.isDarkTheme}},[a("a-row",{staticClass:"strategy-layout",attrs:{gutter:24}},[a("a-col",{staticClass:"strategy-list-col",attrs:{xs:24,sm:24,md:10,lg:8,xl:8}},[a("a-card",{staticClass:"strategy-list-card",attrs:{bordered:!1}},[a("div",{staticClass:"card-title",attrs:{slot:"title"},slot:"title"},[a("span",[e._v(e._s(e.$t("trading-assistant.strategyList")))]),a("a-button",{attrs:{type:"primary",size:"small"},on:{click:e.handleCreateStrategy}},[a("a-icon",{attrs:{type:"plus"}}),e._v(" "+e._s(e.$t("trading-assistant.createStrategy"))+" ")],1)],1),a("div",{staticClass:"group-mode-switch"},[a("span",{staticClass:"group-mode-label"},[e._v(e._s(e.$t("trading-assistant.groupBy"))+":")]),a("a-radio-group",{attrs:{size:"small","button-style":"solid"},model:{value:e.groupByMode,callback:function(t){e.groupByMode=t},expression:"groupByMode"}},[a("a-radio-button",{attrs:{value:"strategy"}},[a("a-icon",{attrs:{type:"folder"}}),e._v(" "+e._s(e.$t("trading-assistant.groupByStrategy"))+" ")],1),a("a-radio-button",{attrs:{value:"symbol"}},[a("a-icon",{attrs:{type:"stock"}}),e._v(" "+e._s(e.$t("trading-assistant.groupBySymbol"))+" ")],1)],1)],1),a("a-spin",{attrs:{spinning:e.loading}},[e.loading||0!==e.strategies.length?a("div",{staticClass:"strategy-grouped-list"},[e._l(e.groupedStrategies.groups,function(t){return a("div",{key:t.id,staticClass:"strategy-group"},[a("div",{staticClass:"strategy-group-header",on:{click:function(a){return e.toggleGroup(t.id)}}},[a("div",{staticClass:"group-header-left"},[a("a-icon",{staticClass:"collapse-icon",attrs:{type:e.collapsedGroups[t.id]?"right":"down"}}),a("a-icon",{staticClass:"group-icon",attrs:{type:"symbol"===e.groupByMode?"stock":"folder"}}),a("span",{staticClass:"group-name"},[e._v(e._s(t.baseName))]),a("a-tag",{attrs:{size:"small",color:"blue"}},[e._v(e._s(t.strategies.length)+" "+e._s("symbol"===e.groupByMode?e.$t("trading-assistant.strategyCount"):e.$t("trading-assistant.symbolCount")))])],1),a("div",{staticClass:"group-header-right",on:{click:function(t){t.stopPropagation()}}},[t.runningCount>0?a("span",{staticClass:"group-status running"},[e._v(" "+e._s(t.runningCount)+" "+e._s(e.$t("trading-assistant.status.running"))+" ")]):e._e(),t.stoppedCount>0?a("span",{staticClass:"group-status stopped"},[e._v(" "+e._s(t.stoppedCount)+" "+e._s(e.$t("trading-assistant.status.stopped"))+" ")]):e._e(),a("a-dropdown",{attrs:{getPopupContainer:e.getDropdownContainer,trigger:["click"]}},[a("a-menu",{attrs:{slot:"overlay"},on:{click:function(a){var i=a.key;return e.handleGroupMenuClick(i,t)}},slot:"overlay"},[a("a-menu-item",{key:"startAll"},[a("a-icon",{attrs:{type:"play-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.startAll"))+" ")],1),a("a-menu-item",{key:"stopAll"},[a("a-icon",{attrs:{type:"pause-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.stopAll"))+" ")],1),a("a-menu-divider"),a("a-menu-item",{key:"deleteAll",staticClass:"danger-item"},[a("a-icon",{attrs:{type:"delete"}}),e._v(" "+e._s(e.$t("trading-assistant.deleteAll"))+" ")],1)],1),a("a-button",{attrs:{type:"link",icon:"more",size:"small"}})],1)],1)]),a("div",{directives:[{name:"show",rawName:"v-show",value:!e.collapsedGroups[t.id],expression:"!collapsedGroups[group.id]"}],staticClass:"strategy-group-content"},e._l(t.strategies,function(t){return a("div",{key:t.id,class:["strategy-list-item",{active:e.selectedStrategy&&e.selectedStrategy.id===t.id}],on:{click:function(a){return e.handleSelectStrategy(t)}}},[a("div",{staticClass:"strategy-item-content"},[a("div",{staticClass:"strategy-item-header"},[a("div",{staticClass:"strategy-name-wrapper"},["strategy"===e.groupByMode?[t.trading_config&&t.trading_config.symbol?a("span",{staticClass:"info-item"},[a("a-icon",{attrs:{type:"dollar"}}),e._v(" "+e._s(t.trading_config.symbol)+" ")],1):e._e()]:[a("span",{staticClass:"info-item strategy-name-text"},[a("a-icon",{attrs:{type:"thunderbolt"}}),e._v(" "+e._s(t.displayInfo?t.displayInfo.strategyName:t.strategy_name)+" ")],1),t.displayInfo&&t.displayInfo.timeframe?a("a-tag",{attrs:{size:"small",color:"cyan"}},[a("a-icon",{staticStyle:{"margin-right":"2px"},attrs:{type:"clock-circle"}}),e._v(" "+e._s(t.displayInfo.timeframe)+" ")],1):e._e(),t.displayInfo&&t.displayInfo.indicatorName&&"-"!==t.displayInfo.indicatorName?a("a-tag",{attrs:{size:"small",color:"purple"}},[a("a-icon",{staticStyle:{"margin-right":"2px"},attrs:{type:"line-chart"}}),e._v(" "+e._s(t.displayInfo.indicatorName)+" ")],1):e._e()],a("span",{staticClass:"status-label",class:[t.status?"status-".concat(t.status):"",{"status-stopped":"stopped"===t.status}]},[e._v(" "+e._s(e.getStatusText(t.status))+" ")])],2)])]),a("div",{staticClass:"strategy-item-actions",on:{click:function(t){t.stopPropagation()}}},[a("a-dropdown",{attrs:{getPopupContainer:e.getDropdownContainer,trigger:["click"]}},[a("a-menu",{attrs:{slot:"overlay"},on:{click:function(a){var i=a.key;return e.handleMenuClick(i,t)}},slot:"overlay"},["stopped"===t.status?a("a-menu-item",{key:"start"},[a("a-icon",{attrs:{type:"play-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.startStrategy"))+" ")],1):e._e(),"running"===t.status?a("a-menu-item",{key:"stop"},[a("a-icon",{attrs:{type:"pause-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.stopStrategy"))+" ")],1):e._e(),a("a-menu-divider"),a("a-menu-item",{key:"edit"},[a("a-icon",{attrs:{type:"edit"}}),e._v(" "+e._s(e.$t("trading-assistant.editStrategy"))+" ")],1),a("a-menu-divider"),a("a-menu-item",{key:"delete",staticClass:"danger-item"},[a("a-icon",{attrs:{type:"delete"}}),e._v(" "+e._s(e.$t("trading-assistant.deleteStrategy"))+" ")],1)],1),a("a-button",{attrs:{type:"link",icon:"more",size:"small"}})],1)],1)])}),0)])}),e._l(e.groupedStrategies.ungrouped,function(t){return a("div",{key:t.id,class:["strategy-list-item",{active:e.selectedStrategy&&e.selectedStrategy.id===t.id}],on:{click:function(a){return e.handleSelectStrategy(t)}}},[a("div",{staticClass:"strategy-item-content"},[a("div",{staticClass:"strategy-item-header"},[a("div",{staticClass:"strategy-name-wrapper"},[t.exchange_config&&t.exchange_config.exchange_id?a("a-tag",{staticClass:"exchange-tag",attrs:{color:e.getExchangeTagColor(t.exchange_config.exchange_id),size:"small"}},[a("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"bank"}}),e._v(" "+e._s(e.getExchangeDisplayName(t.exchange_config.exchange_id))+" ")],1):e._e(),a("span",{staticClass:"strategy-name"},[e._v(e._s(t.strategy_name))]),"PromptBasedStrategy"===t.strategy_type?a("a-tag",{staticClass:"strategy-type-tag",attrs:{color:"purple",size:"small"}},[a("a-icon",{staticStyle:{"margin-right":"2px"},attrs:{type:"robot"}}),e._v(" AI ")],1):e._e()],1)]),a("div",{staticClass:"strategy-item-info"},[t.trading_config&&t.trading_config.symbol?a("span",{staticClass:"info-item"},[a("a-icon",{attrs:{type:"dollar"}}),e._v(" "+e._s(t.trading_config.symbol)+" ")],1):e._e(),a("span",{staticClass:"status-label",class:[t.status?"status-".concat(t.status):"",{"status-stopped":"stopped"===t.status}]},[e._v(" "+e._s(e.getStatusText(t.status))+" ")])])]),a("div",{staticClass:"strategy-item-actions",on:{click:function(t){t.stopPropagation()}}},[a("a-dropdown",{attrs:{getPopupContainer:e.getDropdownContainer,trigger:["click"]}},[a("a-menu",{attrs:{slot:"overlay"},on:{click:function(a){var i=a.key;return e.handleMenuClick(i,t)}},slot:"overlay"},["stopped"===t.status?a("a-menu-item",{key:"start"},[a("a-icon",{attrs:{type:"play-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.startStrategy"))+" ")],1):e._e(),"running"===t.status?a("a-menu-item",{key:"stop"},[a("a-icon",{attrs:{type:"pause-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.stopStrategy"))+" ")],1):e._e(),a("a-menu-divider"),a("a-menu-item",{key:"edit"},[a("a-icon",{attrs:{type:"edit"}}),e._v(" "+e._s(e.$t("trading-assistant.editStrategy"))+" ")],1),a("a-menu-divider"),a("a-menu-item",{key:"delete",staticClass:"danger-item"},[a("a-icon",{attrs:{type:"delete"}}),e._v(" "+e._s(e.$t("trading-assistant.deleteStrategy"))+" ")],1)],1),a("a-button",{attrs:{type:"link",icon:"more",size:"small"}})],1)],1)])})],2):a("a-empty",{attrs:{description:e.$t("trading-assistant.noStrategy")}})],1)],1)],1),a("a-col",{staticClass:"strategy-detail-col",attrs:{xs:24,sm:24,md:14,lg:16,xl:16}},[e.selectedStrategy?a("div",{staticClass:"strategy-detail-panel"},[a("a-card",{staticClass:"strategy-header-card",attrs:{bordered:!1}},[a("div",{staticClass:"strategy-header"},[a("div",{staticClass:"header-left"},[a("div",{staticClass:"strategy-title-row"},[a("h3",{staticClass:"strategy-title"},[e._v(e._s(e.selectedStrategy.strategy_name))]),a("div",{staticClass:"status-badge",class:["status-".concat(e.selectedStrategy.status)]},[a("span",{staticClass:"status-dot"}),e._v(" "+e._s(e.getStatusText(e.selectedStrategy.status))+" ")])]),a("div",{staticClass:"key-stats-grid"},[e.selectedStrategy.initial_capital||e.selectedStrategy.trading_config&&e.selectedStrategy.trading_config.initial_capital?a("div",{staticClass:"stat-card"},[a("div",{staticClass:"stat-icon investment"},[a("a-icon",{attrs:{type:"wallet"}})],1),a("div",{staticClass:"stat-content"},[a("div",{staticClass:"stat-label"},[e._v(e._s(e.$t("trading-assistant.detail.totalInvestment")))]),a("div",{staticClass:"stat-value"},[e._v("$"+e._s(parseFloat(e.selectedStrategy.initial_capital||(null===(t=e.selectedStrategy.trading_config)||void 0===t?void 0:t.initial_capital)||0).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})))])])]):e._e(),null!==e.currentEquity?a("div",{staticClass:"stat-card"},[a("div",{staticClass:"stat-icon equity"},[a("a-icon",{attrs:{type:"fund"}})],1),a("div",{staticClass:"stat-content"},[a("div",{staticClass:"stat-label"},[e._v(e._s(e.$t("trading-assistant.detail.currentEquity")))]),a("div",{staticClass:"stat-value",class:e.getEquityColorClass},[e._v(e._s(e.formatCurrency(e.currentEquity)))])])]):e._e(),null!==e.totalPnl?a("div",{staticClass:"stat-card pnl-card",class:{profit:e.totalPnl>0,loss:e.totalPnl<0}},[a("div",{staticClass:"stat-icon pnl"},[a("a-icon",{attrs:{type:e.totalPnl>=0?"rise":"fall"}})],1),a("div",{staticClass:"stat-content"},[a("div",{staticClass:"stat-label"},[e._v(e._s(e.$t("trading-assistant.detail.totalPnl")))]),a("div",{staticClass:"stat-value",class:e.getPnlColorClass},[e._v(" "+e._s(e.formatPnl(e.totalPnl))+" "),a("span",{staticClass:"pnl-percent"},[e._v("("+e._s(e.formatPnlPercent(e.totalPnlPercent))+")")])])])]):e._e()]),a("div",{staticClass:"strategy-tags"},[e.selectedStrategy.trading_config?a("div",{staticClass:"tag-item"},[a("a-icon",{attrs:{type:"stock"}}),a("span",[e._v(e._s(e.selectedStrategy.trading_config.symbol))])],1):e._e(),e.selectedStrategy.indicator_config&&e.selectedStrategy.indicator_config.indicator_name?a("div",{staticClass:"tag-item"},[a("a-icon",{attrs:{type:"line-chart"}}),a("span",[e._v(e._s(e.selectedStrategy.indicator_config.indicator_name))])],1):e._e(),e.selectedStrategy.trading_config?a("div",{staticClass:"tag-item"},[a("a-icon",{attrs:{type:"thunderbolt"}}),a("span",[e._v(e._s(e.selectedStrategy.trading_config.leverage||1)+"x")])],1):e._e(),e.selectedStrategy.trading_config&&e.selectedStrategy.trading_config.trade_direction?a("div",{staticClass:"tag-item"},[a("a-icon",{attrs:{type:"swap"}}),a("span",[e._v(e._s(e.getTradeDirectionText(e.selectedStrategy.trading_config.trade_direction)))])],1):e._e(),e.selectedStrategy.trading_config&&e.selectedStrategy.trading_config.timeframe?a("div",{staticClass:"tag-item"},[a("a-icon",{attrs:{type:"clock-circle"}}),a("span",[e._v(e._s(e.selectedStrategy.trading_config.timeframe))])],1):e._e()])]),a("div",{staticClass:"header-right"},["stopped"===e.selectedStrategy.status?a("a-button",{staticClass:"action-btn start-btn",attrs:{type:"primary",size:"large"},on:{click:function(t){return e.handleStartStrategy(e.selectedStrategy.id)}}},[a("a-icon",{attrs:{type:"play-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.startStrategy"))+" ")],1):e._e(),"running"===e.selectedStrategy.status?a("a-button",{staticClass:"action-btn stop-btn",attrs:{type:"danger",size:"large"},on:{click:function(t){return e.handleStopStrategy(e.selectedStrategy.id)}}},[a("a-icon",{attrs:{type:"pause-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.stopStrategy"))+" ")],1):e._e()],1)])]),a("a-card",{staticClass:"strategy-content-card",attrs:{bordered:!1}},[a("a-tabs",{attrs:{defaultActiveKey:"positions"}},[a("a-tab-pane",{key:"positions",attrs:{tab:e.$t("trading-assistant.tabs.positions")}},[a("position-records",{attrs:{"strategy-id":e.selectedStrategy.id,"market-type":e.selectedStrategy.trading_config&&e.selectedStrategy.trading_config.market_type||"swap",leverage:e.selectedStrategy.trading_config&&e.selectedStrategy.trading_config.leverage||1,loading:e.loadingRecords}})],1),a("a-tab-pane",{key:"trades",attrs:{tab:e.$t("trading-assistant.tabs.tradingRecords")}},[a("trading-records",{attrs:{"strategy-id":e.selectedStrategy.id,loading:e.loadingRecords}})],1)],1)],1)],1):a("div",{staticClass:"empty-detail"},[a("a-empty",{attrs:{description:e.$t("trading-assistant.selectStrategy")}})],1)])],1),a("a-modal",{attrs:{visible:e.showFormModal,title:e.editingStrategy?e.$t("trading-assistant.editStrategy"):e.$t("trading-assistant.createStrategy"),width:e.isMobile?"95%":1100,confirmLoading:e.saving,maskClosable:!1,wrapClassName:e.isMobile?"mobile-modal":"",bodyStyle:{maxHeight:"70vh",overflowY:"auto"}},on:{ok:e.handleSubmit,cancel:e.handleCloseModal}},[a("a-spin",{attrs:{spinning:e.loadingIndicators}},[e.editingStrategy?e._e():a("div",{staticClass:"creation-mode-toggle"},[a("a-radio-group",{attrs:{size:"small","button-style":"solid"},model:{value:e.creationMode,callback:function(t){e.creationMode=t},expression:"creationMode"}},[a("a-radio-button",{attrs:{value:"simple"}},[a("a-icon",{attrs:{type:"rocket"}}),e._v(" "+e._s(e.$t("trading-assistant.form.simpleMode"))+" ")],1),a("a-radio-button",{attrs:{value:"advanced"}},[a("a-icon",{attrs:{type:"setting"}}),e._v(" "+e._s(e.$t("trading-assistant.form.advancedMode"))+" ")],1)],1),a("span",{staticClass:"mode-hint"},[e._v(e._s(e.isSimpleMode?e.$t("trading-assistant.form.simpleModeHint"):e.$t("trading-assistant.form.advancedModeHint")))])],1),a("a-steps",{staticClass:"steps-container",attrs:{current:e.displayCurrentStep}},[a("a-step",{attrs:{title:e.isSimpleMode&&!e.editingStrategy?e.$t("trading-assistant.form.simpleStep1"):e.$t("trading-assistant.form.step1")}}),e.isAdvancedMode||e.editingStrategy?a("a-step",{attrs:{title:e.$t("trading-assistant.form.step2Params")}}):e._e(),a("a-step",{attrs:{title:e.isSimpleMode&&!e.editingStrategy?e.$t("trading-assistant.form.simpleStep2"):e.$t("trading-assistant.form.step3Signal")}})],1),a("div",{staticClass:"form-container"},[a("div",{directives:[{name:"show",rawName:"v-show",value:0===e.currentStep,expression:"currentStep === 0"}],staticClass:"step-content"},["indicator"===e.strategyType?a("div",[a("a-form",{attrs:{form:e.form,layout:"vertical"}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.indicator")}},[a("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["indicator_id",{rules:[{required:!0,message:e.$t("trading-assistant.validation.indicatorRequired")}]}],expression:"['indicator_id', { rules: [{ required: true, message: $t('trading-assistant.validation.indicatorRequired') }] }]"}],attrs:{placeholder:e.$t("trading-assistant.placeholders.selectIndicator"),"show-search":"","filter-option":e.filterIndicatorOption,loading:e.loadingIndicators,getPopupContainer:function(t){return t.parentNode}},on:{focus:e.handleIndicatorSelectFocus,change:e.handleIndicatorChange}},e._l(e.availableIndicators,function(t){return a("a-select-option",{key:String(t.id),attrs:{value:String(t.id)}},[a("div",{staticClass:"indicator-option"},[a("span",{staticClass:"indicator-name"},[e._v(e._s(t.name))]),t.type?a("a-tag",{attrs:{size:"small",color:e.getIndicatorTypeColor(t.type)}},[e._v(" "+e._s(e.getIndicatorTypeName(t.type))+" ")]):e._e()],1)])}),1),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.indicatorHint"))+" ")])],1),e.selectedIndicator?a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.indicatorDescription")}},[a("div",{staticClass:"indicator-description"},[e._v(" "+e._s(e.selectedIndicator.description||e.$t("trading-assistant.form.noDescription"))+" ")])]):e._e(),e.indicatorParams.length>0?a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.indicatorParams")}},[a("div",{staticClass:"indicator-params-form"},[a("a-row",{attrs:{gutter:16}},e._l(e.indicatorParams,function(t){return a("a-col",{key:t.name,attrs:{xs:24,sm:12,md:8}},[a("div",{staticClass:"param-item"},[a("label",{staticClass:"param-label"},[e._v(" "+e._s(t.name)+" "),t.description?a("a-tooltip",{attrs:{title:t.description}},[a("a-icon",{staticStyle:{"margin-left":"4px",color:"#999"},attrs:{type:"question-circle"}})],1):e._e()],1),"int"===t.type?a("a-input-number",{staticStyle:{width:"100%"},attrs:{precision:0,size:"small"},model:{value:e.indicatorParamValues[t.name],callback:function(a){e.$set(e.indicatorParamValues,t.name,a)},expression:"indicatorParamValues[param.name]"}}):"float"===t.type?a("a-input-number",{staticStyle:{width:"100%"},attrs:{precision:4,size:"small"},model:{value:e.indicatorParamValues[t.name],callback:function(a){e.$set(e.indicatorParamValues,t.name,a)},expression:"indicatorParamValues[param.name]"}}):"bool"===t.type?a("a-switch",{attrs:{size:"small"},model:{value:e.indicatorParamValues[t.name],callback:function(a){e.$set(e.indicatorParamValues,t.name,a)},expression:"indicatorParamValues[param.name]"}}):a("a-input",{attrs:{size:"small"},model:{value:e.indicatorParamValues[t.name],callback:function(a){e.$set(e.indicatorParamValues,t.name,a)},expression:"indicatorParamValues[param.name]"}})],1)])}),1),a("div",{staticClass:"form-item-hint",staticStyle:{"margin-top":"8px"}},[e._v(" "+e._s(e.$t("trading-assistant.form.indicatorParamsHint"))+" ")])],1)]):e._e(),a("a-divider"),a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.strategyName")}},[a("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["strategy_name",{rules:[{required:!0,message:e.$t("trading-assistant.validation.strategyNameRequired")}]}],expression:"['strategy_name', { rules: [{ required: true, message: $t('trading-assistant.validation.strategyNameRequired') }] }]"}],attrs:{placeholder:e.$t("trading-assistant.placeholders.inputStrategyName")}})],1),e.isSimpleMode&&!e.editingStrategy?a("div",{staticClass:"simple-defaults-summary"},[a("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"info","show-icon":""},scopedSlots:e._u([{key:"message",fn:function(){return[a("span",[e._v(e._s(e.$t("trading-assistant.form.simpleDefaultsHint")))])]},proxy:!0},{key:"description",fn:function(){return[a("span",[e._v(" "+e._s(e.$t("trading-assistant.form.klinePeriod"))+": "),a("b",[e._v("15m")]),e._v(" · "+e._s(e.$t("trading-assistant.form.leverage"))+": "),a("b",[e._v("5x")]),e._v(" · "+e._s(e.$t("trading-assistant.form.marketType"))+": "),a("b",[e._v(e._s(e.$t("trading-assistant.form.marketTypeFutures")))]),e._v(" · "+e._s(e.$t("dashboard.indicator.backtest.field.stopLossPct"))+": "),a("b",[e._v("3%")]),e._v(" · "+e._s(e.$t("dashboard.indicator.backtest.field.takeProfitPct"))+": "),a("b",[e._v("6%")])])]},proxy:!0}],null,!1,39555864)}),a("a-button",{staticStyle:{padding:"0","margin-bottom":"12px"},attrs:{type:"link",size:"small"},on:{click:function(t){e.showAdvancedSettings=!e.showAdvancedSettings}}},[a("a-icon",{attrs:{type:e.showAdvancedSettings?"up":"down"}}),e._v(" "+e._s(e.showAdvancedSettings?e.$t("trading-assistant.form.hideAdvancedSettings"):e.$t("trading-assistant.form.showAdvancedSettings"))+" ")],1)],1):e._e(),a("div",{directives:[{name:"show",rawName:"v-show",value:e.isAdvancedMode||e.editingStrategy||e.showAdvancedSettings,expression:"isAdvancedMode || editingStrategy || showAdvancedSettings"}]},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.strategyType")}},[a("a-radio-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["cs_strategy_type",{initialValue:"single"}],expression:"['cs_strategy_type', { initialValue: 'single' }]"}],on:{change:e.handleStrategyTypeChange}},[a("a-radio",{attrs:{value:"single"}},[e._v(e._s(e.$t("trading-assistant.form.strategyTypeSingle")))]),a("a-radio",{attrs:{value:"cross_sectional"}},[e._v(e._s(e.$t("trading-assistant.form.strategyTypeCrossSectional")))])],1),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.strategyTypeHint"))+" ")])],1)],1),"cross_sectional"===e.form.getFieldValue("cs_strategy_type")?[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.symbolList")}},[a("a-select",{attrs:{mode:"multiple",placeholder:e.$t("trading-assistant.placeholders.selectSymbols"),"show-search":"","filter-option":e.filterWatchlistOptionWithAdd,loading:e.loadingWatchlist,getPopupContainer:function(t){return t.parentNode},maxTagCount:5},on:{change:e.handleCrossSectionalSymbolChange},model:{value:e.crossSectionalSymbols,callback:function(t){e.crossSectionalSymbols=t},expression:"crossSectionalSymbols"}},[e._l(e.watchlist,function(t){return a("a-select-option",{key:"".concat(t.market,":").concat(t.symbol),attrs:{value:"".concat(t.market,":").concat(t.symbol)}},[a("div",{staticClass:"symbol-option"},[a("a-tag",{staticStyle:{"margin-right":"8px","margin-bottom":"0"},attrs:{color:e.getMarketColor(t.market)}},[e._v(" "+e._s(t.market)+" ")]),a("span",{staticClass:"symbol-name"},[e._v(e._s(t.symbol))]),t.name?a("span",{staticClass:"symbol-name-extra"},[e._v(e._s(t.name))]):e._e()],1)])}),a("a-select-option",{key:"__add_symbol_option__",staticClass:"add-symbol-option",attrs:{value:"__add_symbol_option__"}},[a("div",{staticStyle:{width:"100%","text-align":"center",padding:"4px 0",color:"#1890ff",cursor:"pointer"}},[a("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"plus"}}),a("span",[e._v(e._s(e.$t("trading-assistant.form.addSymbol")))])],1)])],2),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.symbolListHint"))+" ")])],1),a("a-row",{attrs:{gutter:16}},[a("a-col",{attrs:{xs:24,sm:12}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.portfolioSize")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["portfolio_size",{initialValue:10,rules:[{required:!0,message:e.$t("trading-assistant.validation.portfolioSizeRequired")}]}],expression:"['portfolio_size', { initialValue: 10, rules: [{ required: true, message: $t('trading-assistant.validation.portfolioSizeRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:100,step:1}}),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.portfolioSizeHint"))+" ")])],1)],1),a("a-col",{attrs:{xs:24,sm:12}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.longRatio")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["long_ratio",{initialValue:.5,rules:[{required:!0,message:e.$t("trading-assistant.validation.longRatioRequired")}]}],expression:"['long_ratio', { initialValue: 0.5, rules: [{ required: true, message: $t('trading-assistant.validation.longRatioRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:1,step:.1,precision:2}}),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.longRatioHint"))+" ")])],1)],1)],1),a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.rebalanceFrequency")}},[a("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["rebalance_frequency",{initialValue:"daily"}],expression:"['rebalance_frequency', { initialValue: 'daily' }]"}],staticStyle:{width:"100%"}},[a("a-select-option",{attrs:{value:"daily"}},[e._v(e._s(e.$t("trading-assistant.form.rebalanceDaily")))]),a("a-select-option",{attrs:{value:"weekly"}},[e._v(e._s(e.$t("trading-assistant.form.rebalanceWeekly")))]),a("a-select-option",{attrs:{value:"monthly"}},[e._v(e._s(e.$t("trading-assistant.form.rebalanceMonthly")))])],1),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.rebalanceFrequencyHint"))+" ")])],1)]:e._e(),"cross_sectional"!==e.form.getFieldValue("cs_strategy_type")?a("a-form-item",{attrs:{label:e.isEditMode?e.$t("trading-assistant.form.symbol"):e.$t("trading-assistant.form.symbols")}},[e.isEditMode?a("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["symbol",{rules:[{required:!0,message:e.$t("trading-assistant.validation.symbolRequired")}]}],expression:"['symbol', { rules: [{ required: true, message: $t('trading-assistant.validation.symbolRequired') }] }]"}],attrs:{placeholder:e.$t("trading-assistant.placeholders.selectSymbol"),"show-search":"","filter-option":e.filterWatchlistOption,loading:e.loadingWatchlist,getPopupContainer:function(t){return t.parentNode}},on:{change:e.handleWatchlistSymbolChange}},[e._l(e.watchlist,function(t){return a("a-select-option",{key:"".concat(t.market,":").concat(t.symbol),attrs:{value:"".concat(t.market,":").concat(t.symbol)}},[a("div",{staticClass:"symbol-option"},[a("a-tag",{staticStyle:{"margin-right":"8px","margin-bottom":"0"},attrs:{color:e.getMarketColor(t.market)}},[e._v(" "+e._s(t.market)+" ")]),a("span",{staticClass:"symbol-name"},[e._v(e._s(t.symbol))]),t.name?a("span",{staticClass:"symbol-name-extra"},[e._v(e._s(t.name))]):e._e()],1)])}),a("a-select-option",{key:"__add_symbol_option__",staticClass:"add-symbol-option",attrs:{value:"__add_symbol_option__"}},[a("div",{staticStyle:{width:"100%","text-align":"center",padding:"4px 0",color:"#1890ff",cursor:"pointer"}},[a("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"plus"}}),a("span",[e._v(e._s(e.$t("trading-assistant.form.addSymbol")))])],1)])],2):a("a-select",{attrs:{mode:"multiple",placeholder:e.$t("trading-assistant.placeholders.selectSymbols"),"show-search":"","filter-option":e.filterWatchlistOptionWithAdd,loading:e.loadingWatchlist,getPopupContainer:function(t){return t.parentNode},maxTagCount:3},on:{change:e.handleMultiSymbolChangeWithAdd},model:{value:e.selectedSymbols,callback:function(t){e.selectedSymbols=t},expression:"selectedSymbols"}},[e._l(e.watchlist,function(t){return a("a-select-option",{key:"".concat(t.market,":").concat(t.symbol),attrs:{value:"".concat(t.market,":").concat(t.symbol)}},[a("div",{staticClass:"symbol-option"},[a("a-tag",{staticStyle:{"margin-right":"8px","margin-bottom":"0"},attrs:{color:e.getMarketColor(t.market)}},[e._v(" "+e._s(t.market)+" ")]),a("span",{staticClass:"symbol-name"},[e._v(e._s(t.symbol))]),t.name?a("span",{staticClass:"symbol-name-extra"},[e._v(e._s(t.name))]):e._e()],1)])}),a("a-select-option",{key:"__add_symbol_option__",staticClass:"add-symbol-option",attrs:{value:"__add_symbol_option__"}},[a("div",{staticStyle:{width:"100%","text-align":"center",padding:"4px 0",color:"#1890ff",cursor:"pointer"}},[a("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"plus"}}),a("span",[e._v(e._s(e.$t("trading-assistant.form.addSymbol")))])],1)])],2),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.isEditMode?e.$t("trading-assistant.form.symbolHintCrypto"):e.$t("trading-assistant.form.symbolsHint"))+" ")])],1):e._e(),a("div",{directives:[{name:"show",rawName:"v-show",value:e.isAdvancedMode||e.editingStrategy||e.showAdvancedSettings,expression:"isAdvancedMode || editingStrategy || showAdvancedSettings"}]},[a("a-row",{attrs:{gutter:16}},[a("a-col",{attrs:{xs:24,sm:24,md:12,lg:12}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.initialCapital")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["initial_capital",{rules:[{required:!0,message:e.$t("trading-assistant.validation.initialCapitalRequired")}],initialValue:1e3}],expression:"['initial_capital', { rules: [{ required: true, message: $t('trading-assistant.validation.initialCapitalRequired') }], initialValue: 1000 }]"}],staticStyle:{width:"100%"},attrs:{min:10,step:100,precision:2}})],1)],1),a("a-col",{attrs:{xs:24,sm:24,md:12,lg:12}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.marketType")}},[a("a-radio-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["market_type",{initialValue:"swap"}],expression:"['market_type', { initialValue: 'swap' }]"}],on:{change:e.handleMarketTypeChange}},[a("a-radio",{attrs:{value:"swap"}},[e._v(e._s(e.$t("trading-assistant.form.marketTypeFutures")))]),a("a-radio",{attrs:{value:"spot"}},[e._v(e._s(e.$t("trading-assistant.form.marketTypeSpot")))])],1),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.marketTypeHint"))+" ")])],1)],1)],1),a("a-row",{attrs:{gutter:16}},[a("a-col",{attrs:{xs:24,sm:24,md:12,lg:12}},[a("a-form-item",{attrs:{label:"".concat(e.$t("trading-assistant.form.leverage")," (x)")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["leverage",{initialValue:5,rules:[{required:!0,message:e.$t("trading-assistant.validation.leverageRequired")}]}],expression:"['leverage', { initialValue: 5, rules: [{ required: true, message: $t('trading-assistant.validation.leverageRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:"spot"===e.form.getFieldValue("market_type")?1:125,step:1,disabled:"spot"===e.form.getFieldValue("market_type")}}),a("div",{staticClass:"form-item-hint"},["spot"===e.form.getFieldValue("market_type")?a("span",[e._v(" "+e._s(e.$t("trading-assistant.form.spotLeverageFixed"))+" ")]):a("span",[e._v(" "+e._s(e.$t("trading-assistant.form.leverageHint"))+" ")])])],1)],1),a("a-col",{attrs:{xs:24,sm:24,md:12,lg:12}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.tradeDirection")}},[a("a-radio-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["trade_direction",{initialValue:"long"}],expression:"['trade_direction', { initialValue: 'long' }]"}],attrs:{disabled:"spot"===e.form.getFieldValue("market_type")}},[a("a-radio",{attrs:{value:"long"}},[e._v(e._s(e.$t("trading-assistant.form.tradeDirectionLong")))]),a("a-radio",{attrs:{value:"short",disabled:"spot"===e.form.getFieldValue("market_type")}},[e._v(" "+e._s(e.$t("trading-assistant.form.tradeDirectionShort"))+" ")]),a("a-radio",{attrs:{value:"both",disabled:"spot"===e.form.getFieldValue("market_type")}},[e._v(" "+e._s(e.$t("trading-assistant.form.tradeDirectionBoth"))+" ")])],1),"spot"===e.form.getFieldValue("market_type")?a("div",{staticClass:"form-item-hint",staticStyle:{color:"#ff9800"}},[e._v(" "+e._s(e.$t("trading-assistant.form.spotOnlyLongHint"))+" ")]):e._e()],1)],1)],1),a("a-row",{attrs:{gutter:16}},[a("a-col",{attrs:{xs:24,sm:24,md:12,lg:12}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.klinePeriod")}},[a("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["timeframe",{initialValue:"15m",rules:[{required:!0}]}],expression:"['timeframe', { initialValue: '15m', rules: [{ required: true }] }]"}],attrs:{placeholder:e.$t("trading-assistant.placeholders.selectKlinePeriod"),getPopupContainer:function(t){return t.parentNode}}},[a("a-select-option",{attrs:{value:"1m"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe1m")))]),a("a-select-option",{attrs:{value:"5m"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe5m")))]),a("a-select-option",{attrs:{value:"15m"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe15m")))]),a("a-select-option",{attrs:{value:"30m"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe30m")))]),a("a-select-option",{attrs:{value:"1H"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe1H")))]),a("a-select-option",{attrs:{value:"4H"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe4H")))]),a("a-select-option",{attrs:{value:"1D"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe1D")))])],1)],1)],1),a("a-col",{attrs:{xs:24,sm:24,md:12,lg:12}})],1)],1)],2)],1):e._e()]),a("div",{directives:[{name:"show",rawName:"v-show",value:1===e.currentStep||e.isSimpleMode&&0===e.currentStep&&e.showAdvancedSettings,expression:"currentStep === 1 || (isSimpleMode && currentStep === 0 && showAdvancedSettings)"}],staticClass:"step-content"},["indicator"===e.strategyType?a("div",[a("a-form",{attrs:{form:e.form,layout:"vertical"}},[a("a-collapse",{staticStyle:{background:"#fafafa"},attrs:{bordered:!1},model:{value:e.backtestCollapseKeys,callback:function(t){e.backtestCollapseKeys=t},expression:"backtestCollapseKeys"}},[a("a-collapse-panel",{key:"risk",attrs:{header:e.$t("dashboard.indicator.backtest.panel.risk")}},[a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.stopLossPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["stop_loss_pct",{initialValue:3}],expression:"['stop_loss_pct', { initialValue: 3 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.01,precision:4}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.takeProfitPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["take_profit_pct",{initialValue:6}],expression:"['take_profit_pct', { initialValue: 6 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trailingEnabled")}},[a("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailing_enabled",{valuePropName:"checked",initialValue:!1}],expression:"['trailing_enabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:e.onTrailingToggle}})],1)],1),a("a-col",{attrs:{span:12}})],1),e.trailingEnabledUi?[a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trailingStopPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailing_stop_pct",{initialValue:0}],expression:"['trailing_stop_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.01,precision:4}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trailingActivationPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailing_activation_pct",{initialValue:0}],expression:"['trailing_activation_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1)]:e._e()],2),a("a-collapse-panel",{key:"scale",attrs:{header:e.$t("dashboard.indicator.backtest.panel.scale")}},[a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendAddEnabled")}},[a("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_add_enabled",{valuePropName:"checked",initialValue:!1}],expression:"['trend_add_enabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:e.onTrendAddToggle}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.dcaAddEnabled")}},[a("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["dca_add_enabled",{valuePropName:"checked",initialValue:!1}],expression:"['dca_add_enabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:e.onDcaAddToggle}})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendAddStepPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_add_step_pct",{initialValue:0}],expression:"['trend_add_step_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4},on:{change:e.onScaleParamsChange}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.dcaAddStepPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dca_add_step_pct",{initialValue:0}],expression:"['dca_add_step_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4},on:{change:e.onScaleParamsChange}})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendAddSizePct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_add_size_pct",{initialValue:0}],expression:"['trend_add_size_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4},on:{change:e.onScaleParamsChange}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.dcaAddSizePct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dca_add_size_pct",{initialValue:0}],expression:"['dca_add_size_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4},on:{change:e.onScaleParamsChange}})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendAddMaxTimes")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_add_max_times",{initialValue:0}],expression:"['trend_add_max_times', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:50,step:1,precision:0},on:{change:e.onScaleParamsChange}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.dcaAddMaxTimes")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dca_add_max_times",{initialValue:0}],expression:"['dca_add_max_times', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:50,step:1,precision:0},on:{change:e.onScaleParamsChange}})],1)],1)],1)],1),a("a-collapse-panel",{key:"reduce",attrs:{header:e.$t("dashboard.indicator.backtest.panel.reduce")}},[a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendReduceEnabled")}},[a("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_reduce_enabled",{valuePropName:"checked",initialValue:!1}],expression:"['trend_reduce_enabled', { valuePropName: 'checked', initialValue: false }]"}]})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.adverseReduceEnabled")}},[a("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverse_reduce_enabled",{valuePropName:"checked",initialValue:!1}],expression:"['adverse_reduce_enabled', { valuePropName: 'checked', initialValue: false }]"}]})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendReduceStepPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_reduce_step_pct",{initialValue:0}],expression:"['trend_reduce_step_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.adverseReduceStepPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverse_reduce_step_pct",{initialValue:0}],expression:"['adverse_reduce_step_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendReduceSizePct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_reduce_size_pct",{initialValue:0}],expression:"['trend_reduce_size_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.adverseReduceSizePct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverse_reduce_size_pct",{initialValue:0}],expression:"['adverse_reduce_size_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4}})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendReduceMaxTimes")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_reduce_max_times",{initialValue:0}],expression:"['trend_reduce_max_times', { initialValue: 0 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:50,step:1,precision:0}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.adverseReduceMaxTimes")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverse_reduce_max_times",{initialValue:0}],expression:"['adverse_reduce_max_times', { initialValue: 0 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:50,step:1,precision:0}})],1)],1)],1)],1),a("a-collapse-panel",{key:"position",attrs:{header:e.$t("dashboard.indicator.backtest.panel.position")}},[a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.entryPct"),help:e.$t("dashboard.indicator.backtest.hint.entryPctMax",{maxPct:Number(e.entryPctMaxUi||0).toFixed(0)})}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["entry_pct",{initialValue:100}],expression:"['entry_pct', { initialValue: 100 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:e.entryPctMaxUi,step:.1,precision:4},on:{change:e.onEntryPctChange}})],1)],1),a("a-col",{attrs:{span:12}})],1)],1)],1),a("div",{staticClass:"ai-filter-box"},[a("div",{staticClass:"ai-filter-header"},[a("div",{staticClass:"ai-filter-title"},[a("a-icon",{attrs:{type:"robot"}}),a("span",[e._v(e._s(e.$t("trading-assistant.form.enableAiFilter")))])],1),a("a-switch",{attrs:{checked:e.aiFilterEnabledUi},on:{change:e.onAiFilterToggle}})],1),a("div",{staticClass:"ai-filter-hint"},[e._v(e._s(e.$t("trading-assistant.form.enableAiFilterHint")))])])],1)],1):e._e()]),a("div",{directives:[{name:"show",rawName:"v-show",value:2===e.currentStep,expression:"currentStep === 2"}],staticClass:"step-content"},[a("a-form",{attrs:{form:e.form,layout:"vertical",autocomplete:"off"}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.executionMode")}},[a("a-radio-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["execution_mode",{initialValue:"signal"}],expression:"['execution_mode', { initialValue: 'signal' }]"}],attrs:{disabled:!e.canUseLiveTrading},on:{change:e.onExecutionModeChange}},[a("a-radio",{attrs:{value:"signal"}},[e._v(e._s(e.$t("trading-assistant.form.executionModeSignal")))]),a("a-radio",{attrs:{value:"live",disabled:!e.canUseLiveTrading}},[e._v(e._s(e.$t("trading-assistant.form.executionModeLive")))])],1),e.canUseLiveTrading?e._e():a("div",{staticClass:"form-item-hint",staticStyle:{color:"#ff9800"}},[e._v(" "+e._s(e.$t("trading-assistant.form.liveTradingNotSupportedHint"))+" ")])],1),"live"===e.executionModeUi&&e.canUseLiveTrading?a("a-form-item",{staticClass:"live-disclaimer-item"},[a("a-alert",{staticStyle:{"margin-bottom":"8px"},attrs:{type:"warning",showIcon:"",message:e.$t("trading-assistant.liveDisclaimer.title"),description:e.$t("trading-assistant.liveDisclaimer.content")}}),a("a-checkbox",{directives:[{name:"decorator",rawName:"v-decorator",value:["live_disclaimer_ack",{valuePropName:"checked",initialValue:!1}],expression:"['live_disclaimer_ack', { valuePropName: 'checked', initialValue: false }]"}],on:{change:e.onLiveDisclaimerAckChange}},[e._v(" "+e._s(e.$t("trading-assistant.liveDisclaimer.agree"))+" ")])],1):e._e(),a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.notifyChannels")}},[a("a-checkbox-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["notify_channels",{initialValue:["browser"]}],expression:"['notify_channels', { initialValue: ['browser'] }]"}],on:{change:e.onNotifyChannelsChange}},[a("a-checkbox",{attrs:{value:"browser"}},[e._v(e._s(e.$t("trading-assistant.notify.browser")))]),a("a-checkbox",{attrs:{value:"email"}},[e._v(e._s(e.$t("trading-assistant.notify.email")))]),a("a-checkbox",{attrs:{value:"telegram"}},[e._v(e._s(e.$t("trading-assistant.notify.telegram")))]),a("a-checkbox",{attrs:{value:"discord"}},[e._v(e._s(e.$t("trading-assistant.notify.discord")))]),a("a-checkbox",{attrs:{value:"webhook"}},[e._v(e._s(e.$t("trading-assistant.notify.webhook")))]),a("a-checkbox",{attrs:{value:"phone"}},[e._v(e._s(e.$t("trading-assistant.notify.phone")))])],1),a("div",{staticClass:"form-item-hint"},[e._v(e._s(e.$t("trading-assistant.form.notifyChannelsHint")))])],1),e.unconfiguredChannels.length>0?a("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"warning",showIcon:""},scopedSlots:e._u([{key:"message",fn:function(){return[a("span",[e._v(" "+e._s(e.$t("trading-assistant.form.notificationConfigMissing",{channels:e.unconfiguredChannels.join(", ")}))+" "),a("router-link",{staticStyle:{"margin-left":"8px"},attrs:{to:"/profile"}},[a("a-icon",{attrs:{type:"setting"}}),e._v(" "+e._s(e.$t("trading-assistant.form.goToProfile"))+" ")],1)],1)]},proxy:!0}],null,!1,2930252607)}):e.notifyChannelsUi.length>0&&!e.notifyChannelsUi.includes("browser")||e.notifyChannelsUi.length>1?a("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"info",showIcon:""},scopedSlots:e._u([{key:"message",fn:function(){return[a("span",[e._v(" "+e._s(e.$t("trading-assistant.form.notificationFromProfile"))+" "),a("router-link",{staticStyle:{"margin-left":"8px"},attrs:{to:"/profile"}},[a("a-icon",{attrs:{type:"setting"}}),e._v(" "+e._s(e.$t("trading-assistant.form.goToProfile"))+" ")],1)],1)]},proxy:!0}])}):e._e(),"live"===e.executionModeUi&&e.canUseLiveTrading?a("a-divider"):e._e(),"live"===e.executionModeUi&&e.canUseLiveTrading&&!e.liveDisclaimerAckUi?a("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"warning",showIcon:"",message:e.$t("trading-assistant.liveDisclaimer.blockTitle"),description:e.$t("trading-assistant.liveDisclaimer.blockDesc")}}):e._e(),"live"===e.executionModeUi&&e.canUseLiveTrading&&e.liveDisclaimerAckUi?a("div",[a("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"info","show-icon":"",message:e.$t("trading-assistant.form.liveTradingConfigTitle"),description:e.$t("trading-assistant.form.liveTradingConfigHint")}}),a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.savedCredential")}},[a("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["credential_id",{rules:[{required:!0,message:e.$t("profile.exchange.noCredentialHint")}],getValueFromEvent:function(t){return t||void 0}}],expression:"['credential_id', {\n rules: [{ required: true, message: $t('profile.exchange.noCredentialHint') }],\n getValueFromEvent: (val) => val || undefined\n }]"}],attrs:{placeholder:e.$t("trading-assistant.placeholders.selectSavedCredential"),"allow-clear":"","show-search":"","option-filter-prop":"children",loading:e.loadingExchangeCredentials},on:{change:e.handleCredentialSelectChange}},e._l(e.filteredExchangeCredentials,function(t){return a("a-select-option",{key:t.id,attrs:{value:t.id}},[e._v(" "+e._s(e.formatCredentialLabel(t))+" ")])}),1),a("div",{staticClass:"form-item-hint",staticStyle:{"margin-top":"6px"}},[a("router-link",{attrs:{to:"/profile?tab=exchange"}},[a("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"setting"}}),e._v(e._s(e.$t("profile.exchange.goToManage"))+" ")],1)],1)],1)],1):e._e()],1)],1)])],1),a("template",{slot:"footer"},[a("a-button",{on:{click:e.handleCloseModal}},[e._v(e._s(e.$t("trading-assistant.form.cancel")))]),a("a-button",{directives:[{name:"show",rawName:"v-show",value:e.currentStep>0,expression:"currentStep > 0"}],on:{click:e.handlePrev}},[e._v(" "+e._s(e.$t("trading-assistant.form.prev"))+" ")]),a("a-button",{directives:[{name:"show",rawName:"v-show",value:e.currentStep<2,expression:"currentStep < 2"}],attrs:{type:"primary",loading:e.saving},on:{click:e.handleNext}},[e._v(" "+e._s(e.$t("trading-assistant.form.next"))+" ")]),a("a-button",{directives:[{name:"show",rawName:"v-show",value:2===e.currentStep,expression:"currentStep === 2"}],attrs:{type:"primary",loading:e.saving},on:{click:e.handleSubmit}},[e._v(" "+e._s(e.editingStrategy?e.$t("trading-assistant.form.confirmEdit"):e.$t("trading-assistant.form.confirmCreate"))+" ")])],1)],2),a("a-modal",{attrs:{title:e.$t("trading-assistant.form.addSymbolTitle"),visible:e.showAddSymbolModal,confirmLoading:e.addingSymbol,width:"600px",okText:e.$t("trading-assistant.form.confirmAdd"),cancelText:e.$t("trading-assistant.form.cancel"),maskClosable:!1,keyboard:!1},on:{ok:e.handleConfirmAddSymbol,cancel:e.handleCloseAddSymbolModal}},[a("div",{staticClass:"add-symbol-modal-content"},[a("a-tabs",{staticClass:"market-tabs",on:{change:e.handleAddSymbolMarketChange},model:{value:e.addSymbolMarket,callback:function(t){e.addSymbolMarket=t},expression:"addSymbolMarket"}},e._l(e.addSymbolMarketTypes,function(t){return a("a-tab-pane",{key:t.value,attrs:{tab:e.$t(t.i18nKey||"dashboard.analysis.market.".concat(t.value))}})}),1),a("div",{staticClass:"symbol-search-section"},[a("a-input-search",{attrs:{placeholder:e.$t("dashboard.analysis.modal.addStock.searchOrInputPlaceholder"),loading:e.searchingSymbol,size:"large","allow-clear":""},on:{search:e.handleSearchSymbol,change:e.handleSymbolSearchInputChange},model:{value:e.addSymbolKeyword,callback:function(t){e.addSymbolKeyword=t},expression:"addSymbolKeyword"}},[a("a-button",{attrs:{slot:"enterButton",type:"primary",icon:"search"},slot:"enterButton"},[e._v(" "+e._s(e.$t("dashboard.analysis.modal.addStock.search"))+" ")])],1)],1),e.symbolSearchResults.length>0?a("div",{staticClass:"search-results-section"},[a("div",{staticClass:"section-title"},[a("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"search"}}),e._v(" "+e._s(e.$t("dashboard.analysis.modal.addStock.searchResults"))+" ")],1),a("a-list",{staticClass:"symbol-list",attrs:{"data-source":e.symbolSearchResults,loading:e.searchingSymbol,size:"small"},scopedSlots:e._u([{key:"renderItem",fn:function(t){return a("a-list-item",{staticClass:"symbol-list-item",on:{click:function(a){return e.handleSelectAddSymbol(t)}}},[a("a-list-item-meta",[a("template",{slot:"title"},[a("div",{staticClass:"symbol-item-content"},[a("span",{staticClass:"symbol-code"},[e._v(e._s(t.symbol))]),a("span",{staticClass:"symbol-name"},[e._v(e._s(t.name))]),t.exchange?a("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"blue"}},[e._v(" "+e._s(t.exchange)+" ")]):e._e()],1)])],2)],1)}}],null,!1,2801225082)})],1):e._e(),a("div",{staticClass:"hot-symbols-section"},[a("div",{staticClass:"section-title"},[a("a-icon",{staticStyle:{color:"#ff4d4f","margin-right":"4px"},attrs:{type:"fire"}}),e._v(" "+e._s(e.$t("dashboard.analysis.modal.addStock.hotSymbols"))+" ")],1),a("a-spin",{attrs:{spinning:e.loadingHotSymbols}},[e.hotSymbols.length>0?a("a-list",{staticClass:"symbol-list",attrs:{"data-source":e.hotSymbols,size:"small"},scopedSlots:e._u([{key:"renderItem",fn:function(t){return a("a-list-item",{staticClass:"symbol-list-item",on:{click:function(a){return e.handleSelectAddSymbol(t)}}},[a("a-list-item-meta",[a("template",{slot:"title"},[a("div",{staticClass:"symbol-item-content"},[a("span",{staticClass:"symbol-code"},[e._v(e._s(t.symbol))]),a("span",{staticClass:"symbol-name"},[e._v(e._s(t.name))]),t.exchange?a("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"orange"}},[e._v(" "+e._s(t.exchange)+" ")]):e._e()],1)])],2)],1)}}],null,!1,3959834868)}):a("a-empty",{attrs:{description:e.$t("dashboard.analysis.modal.addStock.noHotSymbols"),image:!1}})],1)],1),e.selectedAddSymbol?a("div",{staticClass:"selected-symbol-section"},[a("div",{staticClass:"section-title"},[a("a-icon",{staticStyle:{color:"#52c41a","margin-right":"4px"},attrs:{type:"check-circle"}}),e._v(" "+e._s(e.$t("dashboard.analysis.modal.addStock.selectedSymbol"))+" ")],1),a("div",{staticClass:"selected-symbol-info"},[a("a-tag",{staticStyle:{"margin-right":"8px"},attrs:{color:e.getMarketColor(e.addSymbolMarket)}},[e._v(e._s(e.addSymbolMarket))]),a("span",{staticClass:"symbol-code"},[e._v(e._s(e.selectedAddSymbol.symbol))]),e.selectedAddSymbol.name?a("span",{staticClass:"symbol-name"},[e._v(e._s(e.selectedAddSymbol.name))]):e._e()],1)]):e._e()],1)])],1)},s=[],r=a(15863),n=a(44735),o=a(81127),l=a(56252),d=a(2403),c=a(57532),u=a(76338),m=(a(2008),a(50113),a(23418),a(62062),a(34782),a(26910),a(79432),a(26099),a(16034),a(31415),a(47764),a(42762),a(23500),a(62953),a(36911)),g=a(35038),p=a(42430),h=a(84841),_=a(55434),y=a(75769),f=function(){var t=this,e=t._self._c;return e("div",{staticClass:"trading-records"},[0!==t.records.length||t.loading?e("a-table",{attrs:{columns:t.columns,"data-source":t.records,loading:t.loading,pagination:{pageSize:10},size:"small",rowKey:"id",scroll:{x:800}},scopedSlots:t._u([{key:"type",fn:function(a){return[e("a-tag",{attrs:{color:t.getTradeTypeColor(a)}},[t._v(" "+t._s(t.getTradeTypeText(a))+" ")])]}},{key:"price",fn:function(e){return[t._v(" $"+t._s(parseFloat(e).toFixed(4))+" ")]}},{key:"amount",fn:function(e){return[t._v(" "+t._s(parseFloat(e).toFixed(4))+" ")]}},{key:"value",fn:function(e){return[t._v(" $"+t._s(parseFloat(e).toFixed(2))+" ")]}},{key:"profit",fn:function(a,i){return[e("span",{style:{color:a>0?"#52c41a":a<0?"#f5222d":"#666"}},[t._v(" "+t._s(t.formatProfit(a,i))+" ")])]}},{key:"commission",fn:function(e){return[t._v(" "+t._s(t.formatCommission(e))+" ")]}},{key:"time",fn:function(e,a){return[t._v(" "+t._s(t.formatTime(a.created_at||e))+" ")]}}])}):e("div",{staticClass:"empty-state"},[e("a-empty",{attrs:{description:t.$t("trading-assistant.table.noPositions")}})],1)],1)},v=[],b=(a(27495),{name:"TradingRecords",props:{strategyId:{type:Number,required:!0},loading:{type:Boolean,default:!1}},computed:{columns:function(){return[{title:this.$t("trading-assistant.table.time"),dataIndex:"created_at",key:"created_at",width:180,scopedSlots:{customRender:"time"}},{title:this.$t("dashboard.indicator.backtest.tradeType"),dataIndex:"type",key:"type",width:140,scopedSlots:{customRender:"type"}},{title:this.$t("trading-assistant.table.price"),dataIndex:"price",key:"price",width:120,scopedSlots:{customRender:"price"}},{title:this.$t("trading-assistant.table.amount"),dataIndex:"amount",key:"amount",width:120,scopedSlots:{customRender:"amount"}},{title:this.$t("trading-assistant.table.value"),dataIndex:"value",key:"value",width:120,scopedSlots:{customRender:"value"}},{title:this.$t("dashboard.indicator.backtest.profit"),dataIndex:"profit",key:"profit",width:120,scopedSlots:{customRender:"profit"}},{title:this.$t("trading-assistant.table.commission"),dataIndex:"commission",key:"commission",width:100,scopedSlots:{customRender:"commission"}}]}},data:function(){return{records:[]}},watch:{strategyId:{handler:function(t){t&&this.loadRecords()},immediate:!0}},methods:{loadRecords:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.strategyId){e.n=1;break}return e.a(2);case 1:return e.p=1,e.n=2,(0,m.tq)(t.strategyId);case 2:a=e.v,1===a.code?t.records=(a.data.trades||[]).map(function(t){return(0,u.A)((0,u.A)({},t),{},{time:t.created_at||t.time})}):t.$message.error(a.msg||t.$t("trading-assistant.messages.loadTradesFailed")),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.a(2)}},e,null,[[1,3]])}))()},formatTime:function(t){if(!t)return"--";try{var e;if("number"===typeof t){var a=t<1e12?1e3*t:t;e=new Date(a)}else{if("string"!==typeof t)return"--";if(/^\d+$/.test(t)){var i=parseInt(t,10),s=i<1e12?1e3*i:i;e=new Date(s)}else e=new Date(t)}if(isNaN(e.getTime()))return"--";var r=this.$i18n.locale||"zh-CN",n={"zh-CN":"zh-CN","zh-TW":"zh-TW","en-US":"en-US"};return e.toLocaleString(n[r]||"zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})}catch(o){return"--"}},getTradeTypeColor:function(t){var e={buy:"green",sell:"red",liquidation:"orange",open_long:"green",add_long:"cyan",close_long:"orange",close_long_stop:"red",close_long_profit:"lime",open_short:"red",add_short:"magenta",close_short:"blue",close_short_stop:"red",close_short_profit:"cyan"};return e[t]||"default"},getTradeTypeText:function(t){var e={buy:this.$t("dashboard.indicator.backtest.buy"),sell:this.$t("dashboard.indicator.backtest.sell"),liquidation:this.$t("dashboard.indicator.backtest.liquidation"),open_long:this.$t("dashboard.indicator.backtest.openLong"),add_long:this.$t("dashboard.indicator.backtest.addLong"),close_long:this.$t("dashboard.indicator.backtest.closeLong"),close_long_stop:this.$t("dashboard.indicator.backtest.closeLongStop"),close_long_profit:this.$t("dashboard.indicator.backtest.closeLongProfit"),open_short:this.$t("dashboard.indicator.backtest.openShort"),add_short:this.$t("dashboard.indicator.backtest.addShort"),close_short:this.$t("dashboard.indicator.backtest.closeShort"),close_short_stop:this.$t("dashboard.indicator.backtest.closeShortStop"),close_short_profit:this.$t("dashboard.indicator.backtest.closeShortProfit")};return e[t]||t},formatMoney:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"-";return"".concat(e,"$").concat(Math.abs(t).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}))},formatProfit:function(t,e){if(null===t||void 0===t)return"--";var a=parseFloat(t),i=["open_long","open_short","add_long","add_short"];return 0===a&&e&&i.includes(e.type)?"--":Math.abs(a)<1e-6?e&&i.includes(e.type)?"--":"$0.00":this.formatMoney(a)},formatCommission:function(t){if(null===t||void 0===t)return"--";var e=parseFloat(t);return isNaN(e)||Math.abs(e)<1e-6?"--":"$".concat(e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:6}))}}}),S=b,k=a(845),x=(0,k.A)(S,f,v,!1,null,"a5bdef7e",null),C=x.exports,w=function(){var t=this,e=t._self._c;return e("div",{staticClass:"position-records"},[0!==t.positions.length||t.loading?e("a-table",{attrs:{columns:t.columns,"data-source":t.positions,loading:t.loading,pagination:!1,size:"small",rowKey:"id",scroll:{x:800}},scopedSlots:t._u([{key:"symbol",fn:function(a,i){return[e("strong",[t._v(t._s(i.symbol||a))])]}},{key:"side",fn:function(a,i){return[e("a-tag",{attrs:{color:"long"===(i.side||a)?"green":"red"}},[t._v(" "+t._s("long"===(i.side||a)?t.$t("trading-assistant.table.long"):t.$t("trading-assistant.table.short"))+" ")])]}},{key:"entryPrice",fn:function(a,i){return[t.hasValidPrice(i.entry_price||a)?e("span",[t._v(" $"+t._s(parseFloat(i.entry_price||a).toFixed(4))+" ")]):e("span",[t._v("--")])]}},{key:"currentPrice",fn:function(e,a){return[t._v(" $"+t._s(parseFloat(a.current_price||e||0).toFixed(4))+" ")]}},{key:"size",fn:function(e,a){return[t._v(" "+t._s(parseFloat(a.size||e||0).toFixed(4))+" ")]}},{key:"unrealizedPnl",fn:function(a,i){return[e("span",{class:{profit:parseFloat(i.unrealized_pnl||a||0)>0,loss:parseFloat(i.unrealized_pnl||a||0)<0}},[t._v(" $"+t._s(parseFloat(i.unrealized_pnl||a||0).toFixed(2))+" ")])]}},{key:"pnlPercent",fn:function(a,i){return[e("span",{class:{profit:parseFloat(i.pnl_percent||a||0)>0,loss:parseFloat(i.pnl_percent||a||0)<0}},[t._v(" "+t._s(parseFloat(i.pnl_percent||a||0).toFixed(2))+"% ")])]}}])}):e("div",{staticClass:"empty-state"},[e("a-empty",{attrs:{description:t.$t("trading-assistant.table.noPositions")}})],1)],1)},$=[],A=(a(25428),a(38781),{name:"PositionRecords",props:{strategyId:{type:Number,required:!0},marketType:{type:String,default:"swap"},leverage:{type:[Number,String],default:1},loading:{type:Boolean,default:!1}},data:function(){return{positions:[]}},computed:{columns:function(){return[{title:this.$t("trading-assistant.table.symbol"),dataIndex:"symbol",key:"symbol",width:120,scopedSlots:{customRender:"symbol"}},{title:this.$t("trading-assistant.table.side"),dataIndex:"side",key:"side",width:80,scopedSlots:{customRender:"side"}},{title:this.$t("trading-assistant.table.size"),dataIndex:"size",key:"size",width:120,scopedSlots:{customRender:"size"}},{title:this.$t("trading-assistant.table.entryPrice"),dataIndex:"entry_price",key:"entry_price",width:120,scopedSlots:{customRender:"entryPrice"}},{title:this.$t("trading-assistant.table.currentPrice"),dataIndex:"current_price",key:"current_price",width:120,scopedSlots:{customRender:"currentPrice"}},{title:this.$t("trading-assistant.table.unrealizedPnl"),dataIndex:"unrealized_pnl",key:"unrealized_pnl",width:120,scopedSlots:{customRender:"unrealizedPnl"}},{title:this.$t("trading-assistant.table.pnlPercent"),dataIndex:"pnl_percent",key:"pnl_percent",width:100,scopedSlots:{customRender:"pnlPercent"}}]}},watch:{strategyId:{handler:function(t){t?(this.loadPositions(),this.startPolling()):this.stopPolling()},immediate:!0}},beforeDestroy:function(){this.stopPolling()},methods:{loadPositions:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a,i;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.strategyId){e.n=1;break}return e.a(2);case 1:return e.p=1,e.n=2,(0,m.oK)(t.strategyId);case 2:a=e.v,1===a.code?(i=a.data.positions||[],t.positions=i.map(function(e,a){var i=String(t.marketType||"swap").toLowerCase(),s=parseFloat(t.leverage);(!isFinite(s)||s<=0)&&(s=1),"spot"===i&&(s=1);var r=parseFloat(e.entry_price||e.entryPrice||0),n=parseFloat(e.size||"0")||0,o=parseFloat(e.unrealized_pnl||e.unrealizedPnl||"0")||0,l=parseFloat(e.pnl_percent||e.pnlPercent||"0")||0;r>0&&n>0?l=o/(r*n)*100*s:"spot"!==i&&(l*=s);var d={id:e.id||a,symbol:e.symbol||"",side:e.side||"long",size:n>0?n.toString():"0",entry_price:r>0?r.toString():"0",current_price:e.current_price||e.currentPrice||"0",unrealized_pnl:e.unrealized_pnl||e.unrealizedPnl||"0",pnl_percent:l,updated_at:e.updated_at||e.updatedAt||""};return d})):t.positions=[],e.n=4;break;case 3:e.p=3,e.v,t.positions=[];case 4:return e.a(2)}},e,null,[[1,3]])}))()},hasValidPrice:function(t){var e=parseFloat(t);return Number.isFinite(e)&&e>0},startPolling:function(){var t=this;this.stopPolling(),this.pollingTimer=setInterval(function(){t.loadPositions()},5e3)},stopPolling:function(){this.pollingTimer&&(clearInterval(this.pollingTimer),this.pollingTimer=null)}}}),P=A,M=(0,k.A)(P,w,$,!1,null,"2abcf4f1",null),F=M.exports,T=["BTC/USDT","ETH/USDT","BNB/USDT","SOL/USDT","ADA/USDT","XRP/USDT","DOGE/USDT","DOT/USDT","MATIC/USDT","AVAX/USDT","LINK/USDT","UNI/USDT","LTC/USDT","ATOM/USDT","ETC/USDT"],V=[{value:"binance",labelKey:"binance"},{value:"okx",labelKey:"okx"},{value:"bitget",labelKey:"bitget"},{value:"bybit",labelKey:"bybit"},{value:"coinbaseexchange",labelKey:"coinbaseexchange"},{value:"kraken",labelKey:"kraken"},{value:"kucoin",labelKey:"kucoin"},{value:"gate",labelKey:"gate"},{value:"bitfinex",labelKey:"bitfinex"},{value:"deepcoin",labelKey:"deepcoin"}],I=[{value:"ibkr",labelKey:"ibkr",name:"Interactive Brokers"}],N=[{value:"mt5",labelKey:"mt5",name:"MetaTrader 5"}],U={name:"TradingAssistant",mixins:[_.t],components:{TradingRecords:C,PositionRecords:F},computed:{isAdvancedMode:function(){return"advanced"===this.creationMode},isSimpleMode:function(){return"simple"===this.creationMode},displayCurrentStep:function(){return this.isSimpleMode&&!this.editingStrategy?0===this.currentStep?0:1:this.currentStep},isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},needsPassphrase:function(){return["okx","okex","coinbaseexchange","kucoin","bitget","deepcoin"].includes(this.currentExchangeId)},isIBKRMarket:function(){return"USStock"===this.selectedMarketCategory},isMT5Market:function(){return"Forex"===this.selectedMarketCategory},isBrokerMarket:function(){return this.isIBKRMarket||this.isMT5Market},filteredExchangeCredentials:function(){var t=this;return this.exchangeCredentials&&Array.isArray(this.exchangeCredentials)?this.exchangeCredentials.filter(function(e){return t.isCredentialCompatible(e)}):[]},formattedExchangeOptions:function(){var t=this;return V.map(function(e){var a="";try{if(e.labelKey){var i="trading-assistant.exchangeNames.".concat(e.labelKey),s=t.$t(i);s!==i&&(a=s)}}catch(r){}return a||(a=e.value.charAt(0).toUpperCase()+e.value.slice(1)),(0,u.A)((0,u.A)({},e),{},{displayName:a})})},totalPnl:function(){return null!==this.currentEquity&&this.selectedStrategy&&this.selectedStrategy.initial_capital?this.currentEquity-(this.selectedStrategy.initial_capital||0):null},totalPnlPercent:function(){return null!==this.totalPnl&&this.selectedStrategy&&this.selectedStrategy.initial_capital?0===this.selectedStrategy.initial_capital?0:this.totalPnl/this.selectedStrategy.initial_capital*100:null},getEquityColorClass:function(){return null===this.totalPnl?"":this.totalPnl>=0?"text-success":"text-danger"},getPnlColorClass:function(){return null===this.totalPnl?"":this.totalPnl>=0?"text-success":"text-danger"},isCryptoMarket:function(){var t=this.selectedMarketCategory||"Crypto";return"crypto"===String(t).toLowerCase()},canUseLiveTrading:function(){var t=this.selectedMarketCategory||"Crypto";return"crypto"===String(t).toLowerCase()||("USStock"===t||"Forex"===t)},isLiveTradingAvailable:function(){var t=this.selectedMarketCategory||"Crypto",e=this.currentExchangeId||"";return"crypto"===String(t).toLowerCase()?["binance","okx","bitget","bybit","coinbaseexchange","kraken","kucoin","gate","bitfinex"].includes(e):"USStock"===t?"ibkr"===this.currentBrokerId:"Forex"===t&&"mt5"===this.currentBrokerId},showDemoTradingSwitch:function(){return this.currentExchangeId&&"binance"===this.currentExchangeId.toLowerCase()},brokerOptions:function(){var t=this;return I.map(function(e){var a="";try{var i="trading-assistant.brokerNames.".concat(e.labelKey),s=t.$t(i);s!==i&&(a=s)}catch(r){}return a||(a=e.name||e.value.toUpperCase()),(0,u.A)((0,u.A)({},e),{},{displayName:a})})},forexBrokerOptions:function(){var t=this;return N.map(function(e){var a="";try{var i="trading-assistant.brokerNames.".concat(e.labelKey),s=t.$t(i);s!==i&&(a=s)}catch(r){}return a||(a=e.name||e.value.toUpperCase()),(0,u.A)((0,u.A)({},e),{},{displayName:a})})},cryptoExchangeOptions:function(){var t=this;return V.map(function(e){var a="";try{if(e.labelKey){var i="trading-assistant.exchangeNames.".concat(e.labelKey),s=t.$t(i);s!==i&&(a=s)}}catch(r){}return a||(a=e.value.charAt(0).toUpperCase()+e.value.slice(1)),(0,u.A)((0,u.A)({},e),{},{displayName:a})})},groupedStrategies:function(){return"symbol"===this.groupByMode?this.groupedBySymbol:this.groupedByStrategy},groupedByStrategy:function(){var t,e={},a=[],i=(0,c.A)(this.strategies);try{for(i.s();!(t=i.n()).done;){var s=t.value,r=s.strategy_group_id;r&&r.trim()?(e[r]||(e[r]={id:r,baseName:s.group_base_name||s.strategy_name.split("-")[0],strategies:[],runningCount:0,stoppedCount:0}),e[r].strategies.push(s),"running"===s.status?e[r].runningCount++:e[r].stoppedCount++):a.push(s)}}catch(o){i.e(o)}finally{i.f()}var n=Object.values(e).sort(function(t,e){var a=Math.max.apply(Math,(0,d.A)(t.strategies.map(function(t){return t.created_at||0}))),i=Math.max.apply(Math,(0,d.A)(e.strategies.map(function(t){return t.created_at||0})));return i-a});return{groups:n,ungrouped:a}},groupedBySymbol:function(){var t,e={},a=[],i=(0,c.A)(this.strategies);try{for(i.s();!(t=i.n()).done;){var s=t.value,r=s.trading_config||{},n=r.symbol;if(n&&n.trim()){e[n]||(e[n]={id:"symbol_".concat(n),baseName:n,strategies:[],runningCount:0,stoppedCount:0});var o=(0,u.A)((0,u.A)({},s),{},{displayInfo:{strategyName:s.strategy_name||s.group_base_name||"Unnamed",timeframe:r.timeframe||"-",indicatorName:s.indicator_name||s.indicator_config&&s.indicator_config.name||"-"}});e[n].strategies.push(o),"running"===s.status?e[n].runningCount++:e[n].stoppedCount++}else a.push(s)}}catch(d){i.e(d)}finally{i.f()}var l=Object.values(e).sort(function(t,e){return t.baseName.localeCompare(e.baseName)});return{groups:l,ungrouped:a}},unconfiguredChannels:function(){var t=[];return this.notifyChannelsUi.includes("telegram")&&(this.userNotificationSettings.telegram_bot_token||this.userNotificationSettings.telegram_chat_id||t.push("Telegram")),this.notifyChannelsUi.includes("email")&&(this.userNotificationSettings.email||t.push("Email")),this.notifyChannelsUi.includes("discord")&&(this.userNotificationSettings.discord_webhook||t.push("Discord")),this.notifyChannelsUi.includes("webhook")&&(this.userNotificationSettings.webhook_url||t.push("Webhook")),t}},data:function(){return{loading:!1,loadingRecords:!1,strategies:[],selectedStrategy:null,showFormModal:!1,creationMode:"simple",showAdvancedSettings:!1,strategyType:"indicator",selectedMarketCategory:"Crypto",currentStep:0,saving:!1,loadingIndicators:!1,availableIndicators:[],selectedIndicator:null,indicatorParams:[],indicatorParamValues:{},cryptoSymbols:T,loadingWatchlist:!1,watchlist:[],exchangeOptions:V,currentExchangeId:"",currentBrokerId:"ibkr",connectionTestResult:null,indicatorsLoaded:!1,editingStrategy:null,currentEquity:null,equityPollingTimer:null,backtestCollapseKeys:["risk"],trailingEnabledUi:!1,entryPctMaxUi:100,aiFilterEnabledUi:!1,isEditMode:!1,supportedIPs:[],executionModeUi:"signal",liveDisclaimerAckUi:!1,notifyChannelsUi:["browser"],userNotificationSettings:{default_channels:["browser"],telegram_bot_token:"",telegram_chat_id:"",email:"",phone:"",discord_webhook:"",webhook_url:"",webhook_token:""},loadingExchangeCredentials:!1,exchangeCredentials:[],saveCredentialUi:!1,suppressApiClearOnce:!1,selectedSymbols:[],crossSectionalSymbols:[],collapsedGroups:{},groupByMode:"strategy",showAddSymbolModal:!1,addSymbolMarket:"Crypto",addSymbolMarketTypes:[{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}],addSymbolKeyword:"",searchingSymbol:!1,symbolSearchResults:[],selectedAddSymbol:null,hasSearchedSymbol:!1,addingSymbol:!1,hotSymbols:[],loadingHotSymbols:!1,searchTimer:null}},beforeCreate:function(){this.form=this.$form.createForm(this)},mounted:function(){this.loadStrategies(),this.loadUserNotificationSettings()},beforeDestroy:function(){this.stopEquityPolling()},methods:{loadUserNotificationSettings:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,h.vF)();case 1:a=e.v,1===a.code&&a.data&&(t.userNotificationSettings={default_channels:a.data.default_channels||["browser"],telegram_bot_token:a.data.telegram_bot_token||"",telegram_chat_id:a.data.telegram_chat_id||"",email:a.data.email||"",phone:a.data.phone||"",discord_webhook:a.data.discord_webhook||"",webhook_url:a.data.webhook_url||"",webhook_token:a.data.webhook_token||""}),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadWatchlist:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loadingWatchlist=!0,e.p=1,e.n=2,(0,g.Qo)({userid:1});case 2:a=e.v,a&&1===a.code?t.watchlist=Array.isArray(a.data)?a.data:[]:t.watchlist=[],e.n=4;break;case 3:e.p=3,e.v,t.watchlist=[];case 4:return e.p=4,t.loadingWatchlist=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleCloseAddSymbolModal:function(){this.showAddSymbolModal=!1,this.addSymbolKeyword="",this.symbolSearchResults=[],this.selectedAddSymbol=null,this.hasSearchedSymbol=!1},handleAddSymbolMarketChange:function(t){this.addSymbolMarket=t,this.addSymbolKeyword="",this.symbolSearchResults=[],this.selectedAddSymbol=null,this.hasSearchedSymbol=!1,this.loadHotSymbols(t)},handleSymbolSearchInputChange:function(t){var e=this,a=t.target.value;if(this.addSymbolKeyword=a,this.searchTimer&&clearTimeout(this.searchTimer),!a||""===a.trim())return this.symbolSearchResults=[],this.hasSearchedSymbol=!1,void(this.selectedAddSymbol=null);this.searchTimer=setTimeout(function(){e.searchSymbolsInModal(a)},500)},handleSearchSymbol:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){return(0,o.A)().w(function(a){while(1)switch(a.n){case 0:if(t&&t.trim()){a.n=1;break}return a.a(2);case 1:if(e.addSymbolMarket){a.n=2;break}return e.$message.warning(e.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),a.a(2);case 2:if(!(e.symbolSearchResults.length>0)){a.n=3;break}return a.a(2);case 3:e.hasSearchedSymbol&&0===e.symbolSearchResults.length?e.handleDirectAdd():e.searchSymbolsInModal(t);case 4:return a.a(2)}},a)}))()},searchSymbolsInModal:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var i;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(t&&""!==t.trim()){a.n=1;break}return e.symbolSearchResults=[],e.hasSearchedSymbol=!1,a.a(2);case 1:if(e.addSymbolMarket){a.n=2;break}return a.a(2);case 2:return e.searchingSymbol=!0,e.hasSearchedSymbol=!0,a.p=3,a.n=4,(0,g._3)({market:e.addSymbolMarket,keyword:t.trim()});case 4:i=a.v,i&&1===i.code&&Array.isArray(i.data)?e.symbolSearchResults=i.data:e.symbolSearchResults=[],a.n=6;break;case 5:a.p=5,a.v,e.symbolSearchResults=[];case 6:return a.p=6,e.searchingSymbol=!1,a.f(6);case 7:return a.a(2)}},a,null,[[3,5,6,7]])}))()},handleDirectAdd:function(){this.addSymbolKeyword&&this.addSymbolKeyword.trim()?this.addSymbolMarket?this.selectedAddSymbol={market:this.addSymbolMarket,symbol:this.addSymbolKeyword.trim().toUpperCase(),name:""}:this.$message.warning(this.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")):this.$message.warning(this.$t("dashboard.analysis.modal.addStock.pleaseEnterSymbol"))},handleSelectAddSymbol:function(t){this.selectedAddSymbol={market:this.addSymbolMarket,symbol:t.symbol,name:t.name||""}},loadHotSymbols:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var i;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(t||(t=e.addSymbolMarket||"Crypto"),t){a.n=1;break}return a.a(2);case 1:return e.loadingHotSymbols=!0,a.p=2,a.n=3,(0,g.z6)({market:t,limit:10});case 3:i=a.v,i&&1===i.code&&i.data?e.hotSymbols=i.data:e.hotSymbols=[],a.n=5;break;case 4:a.p=4,a.v,e.hotSymbols=[];case 5:return a.p=5,e.loadingHotSymbols=!1,a.f(5);case 6:return a.a(2)}},a,null,[[2,4,5,6]])}))()},handleConfirmAddSymbol:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a,i,s,r,n,l,c;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(a="",i="",!t.selectedAddSymbol){e.n=1;break}a=t.selectedAddSymbol.market,i=t.selectedAddSymbol.symbol.toUpperCase(),e.n=4;break;case 1:if(!t.addSymbolKeyword||!t.addSymbolKeyword.trim()){e.n=3;break}if(t.addSymbolMarket){e.n=2;break}return t.$message.warning(t.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),e.a(2);case 2:a=t.addSymbolMarket,i=t.addSymbolKeyword.trim().toUpperCase(),e.n=4;break;case 3:return t.$message.warning(t.$t("dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol")),e.a(2);case 4:return t.addingSymbol=!0,e.p=5,e.n=6,(0,g.dp)({userid:1,market:a,symbol:i});case 6:if(s=e.v,!s||1!==s.code){e.n=8;break}return t.$message.success(t.$t("dashboard.analysis.message.addStockSuccess")),e.n=7,t.loadWatchlist();case 7:r="".concat(a,":").concat(i),t.isEditMode?(t.form.setFieldsValue({symbol:r}),t.handleWatchlistSymbolChange(r)):(t.selectedSymbols.includes(r)||(t.selectedSymbols=[].concat((0,d.A)(t.selectedSymbols),[r])),t.handleMultiSymbolChange(t.selectedSymbols)),t.handleCloseAddSymbolModal(),e.n=9;break;case 8:t.$message.error((null===s||void 0===s?void 0:s.msg)||t.$t("dashboard.analysis.message.addStockFailed"));case 9:e.n=11;break;case 10:e.p=10,c=e.v,l=(null===c||void 0===c||null===(n=c.response)||void 0===n||null===(n=n.data)||void 0===n?void 0:n.msg)||(null===c||void 0===c?void 0:c.message)||t.$t("dashboard.analysis.message.addStockFailed"),t.$message.error(l);case 11:return e.p=11,t.addingSymbol=!1,e.f(11);case 12:return e.a(2)}},e,null,[[5,10,11,12]])}))()},filterWatchlistOption:function(t,e){var a,i=(null===(a=e.componentOptions)||void 0===a||null===(a=a.propsData)||void 0===a?void 0:a.value)||"";return"__add_symbol_option__"===i||String(i).toLowerCase().includes(String(t||"").toLowerCase())},filterWatchlistOptionWithAdd:function(t,e){var a,i=(null===(a=e.componentOptions)||void 0===a||null===(a=a.propsData)||void 0===a?void 0:a.value)||"";return"__add_symbol_option__"===i||String(i).toLowerCase().includes(String(t||"").toLowerCase())},handleMultiSymbolChangeWithAdd:function(t){if(t&&t.includes("__add_symbol_option__"))return this.selectedSymbols=t.filter(function(t){return"__add_symbol_option__"!==t}),this.showAddSymbolModal=!0,void this.loadHotSymbols(this.addSymbolMarket);this.handleMultiSymbolChange(t)},handleStrategyTypeChange:function(t){var e=t.target.value;"single"===e&&(this.crossSectionalSymbols=[])},handleCrossSectionalSymbolChange:function(t){if(t&&t.includes("__add_symbol_option__"))return this.crossSectionalSymbols=t.filter(function(t){return"__add_symbol_option__"!==t}),this.showAddSymbolModal=!0,void this.loadHotSymbols(this.addSymbolMarket);if(this.crossSectionalSymbols=t||[],t&&t.length>0){var e=t[0];if("string"===typeof e&&e.includes(":")){var a=e.indexOf(":"),i=e.slice(0,a);this.selectedMarketCategory=i||"Crypto"}}},getMarketColor:function(t){var e={USStock:"green",Crypto:"purple",Forex:"gold",Futures:"cyan"};return e[t]||"default"},handleWatchlistSymbolChange:function(t){var e=this;if("__add_symbol_option__"===t)return this.$nextTick(function(){e.form.setFieldsValue({symbol:void 0})}),this.showAddSymbolModal=!0,void this.loadHotSymbols(this.addSymbolMarket);if(t&&"string"===typeof t&&t.includes(":")){var a=t.indexOf(":"),i=t.slice(0,a);if(this.selectedMarketCategory=i||"Crypto","Forex"===this.selectedMarketCategory){this.currentBrokerId="mt5";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({forex_broker_id:"mt5"})}catch(r){}}else if("USStock"===this.selectedMarketCategory){this.currentBrokerId="ibkr";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({broker_id:"ibkr"})}catch(r){}}var s=["Crypto","USStock","Forex"].includes(this.selectedMarketCategory);if(!s){this.executionModeUi="signal";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({execution_mode:"signal"})}catch(r){}}this.currentExchangeId="";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({exchange_id:void 0})}catch(r){}}},handleMultiSymbolChange:function(t){if(this.selectedSymbols=t||[],t&&t.length>0){var e=t[0];if("string"===typeof e&&e.includes(":")){var a=e.indexOf(":"),i=e.slice(0,a);this.selectedMarketCategory=i||"Crypto"}}if("Forex"===this.selectedMarketCategory){this.currentBrokerId="mt5";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({forex_broker_id:"mt5"})}catch(r){}}else if("USStock"===this.selectedMarketCategory){this.currentBrokerId="ibkr";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({broker_id:"ibkr"})}catch(r){}}var s=["Crypto","USStock","Forex"].includes(this.selectedMarketCategory);if(!s){this.executionModeUi="signal";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({execution_mode:"signal"})}catch(r){}}this.currentExchangeId="";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({exchange_id:void 0})}catch(r){}},loadExchangeCredentials:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loadingExchangeCredentials=!0,e.p=1,e.n=2,(0,p.IA)({user_id:1});case 2:a=e.v,a&&1===a.code?t.exchangeCredentials=a.data&&a.data.items||[]:(t.exchangeCredentials=[],t.$message.warning((null===a||void 0===a?void 0:a.msg)||t.$t("trading-assistant.messages.loadFailed"))),e.n=4;break;case 3:e.p=3,e.v,t.exchangeCredentials=[],t.$message.warning(t.$t("trading-assistant.exchange.testFailed"));case 4:return e.p=4,t.loadingExchangeCredentials=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},formatCredentialLabel:function(t){if(!t)return"";var e=(t.name||"").trim(),a=t.exchange_id||"",i=t.api_key_hint||"";return e?"".concat(a.toUpperCase()," - ").concat(e," (").concat(i,")"):"".concat(a.toUpperCase()," (").concat(i,")")},isCredentialCompatible:function(t){if(!t||!t.exchange_id)return!0;var e=(t.exchange_id||"").toLowerCase(),a=this.selectedMarketCategory||"Crypto";if("mt5"===e)return"Forex"===a;if("ibkr"===e)return"USStock"===a;var i=["binance","okx","bitget","bybit","coinbaseexchange","kraken","kucoin","gate","bitfinex","deepcoin"];return!i.includes(e)||"Crypto"===a},handleCredentialSelectChange:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var i,s,r;return(0,o.A)().w(function(a){while(1)switch(a.n){case 0:if(t){a.n=1;break}return e.currentExchangeId="",e.connectionTestResult=null,a.a(2);case 1:if(i=e.exchangeCredentials.find(function(e){return String(e.id)===String(t)}),!i){a.n=5;break}if(s=(i.exchange_id||"").toLowerCase(),"mt5"!==s||"Forex"===e.selectedMarketCategory){a.n=2;break}e.$message.error(e.$t("trading-assistant.validation.mt5OnlyForForex"));try{e.form&&e.form.setFieldsValue&&e.form.setFieldsValue({credential_id:void 0})}catch(n){}return e.currentExchangeId="",e.connectionTestResult=null,a.a(2);case 2:if("ibkr"!==s||"USStock"===e.selectedMarketCategory){a.n=3;break}e.$message.error(e.$t("trading-assistant.validation.ibkrOnlyForUSStock"));try{e.form&&e.form.setFieldsValue&&e.form.setFieldsValue({credential_id:void 0})}catch(n){}return e.currentExchangeId="",e.connectionTestResult=null,a.a(2);case 3:if(r=["binance","okx","bitget","bybit","coinbaseexchange","kraken","kucoin","gate","bitfinex"],!r.includes(s)||"Crypto"===e.selectedMarketCategory){a.n=4;break}e.$message.error(e.$t("trading-assistant.validation.cryptoExchangeOnlyForCrypto"));try{e.form&&e.form.setFieldsValue&&e.form.setFieldsValue({credential_id:void 0})}catch(n){}return e.currentExchangeId="",e.connectionTestResult=null,a.a(2);case 4:e.currentExchangeId=i.exchange_id||"";case 5:e.connectionTestResult=null;case 6:return a.a(2)}},a)}))()},onSaveCredentialChange:function(t){var e=!!(t&&t.target&&t.target.checked);this.saveCredentialUi=e;try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({save_credential:e})}catch(a){}},onExecutionModeChange:function(t){var e=t&&t.target?t.target.value:t;this.executionModeUi=e||"signal",this.liveDisclaimerAckUi=!1;try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({live_disclaimer_ack:!1})}catch(a){}if(!this.canUseLiveTrading&&"signal"!==this.executionModeUi){this.executionModeUi="signal";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({execution_mode:"signal"})}catch(a){}}},onLiveDisclaimerAckChange:function(t){var e=!!(t&&t.target&&t.target.checked);this.liveDisclaimerAckUi=e;try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({live_disclaimer_ack:e})}catch(a){}},onNotifyChannelsChange:function(t){this.notifyChannelsUi=Array.isArray(t)?t:[]},formatCurrency:function(t){return null===t||void 0===t?"-":"$"+t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})},formatPnl:function(t){if(null===t||void 0===t)return"-";var e=t>=0?"+":"";return e+"$"+Math.abs(t).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})},formatPnlPercent:function(t){if(null===t||void 0===t)return"-";var e=t>=0?"+":"";return e+Math.abs(t).toFixed(2)+"%"},loadStrategies:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a,i,s;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loading=!0,e.p=1,e.n=2,(0,m.EM)();case 2:a=e.v,1===a.code?(i=a.data.strategies||[],t.strategies=i,t.selectedStrategy&&(s=t.strategies.find(function(e){return e.id===t.selectedStrategy.id}),t.selectedStrategy=s||null)):t.$message.error(a.msg||t.$t("trading-assistant.messages.loadFailed")),e.n=4;break;case 3:e.p=3,e.v,t.$message.error(t.$t("trading-assistant.messages.loadFailed"));case 4:return e.p=4,t.loading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleCreateStrategy:function(){var t=this;this.isEditMode=!1,this.editingStrategy=null,this.strategyType="indicator",this.currentStep=0,this.currentExchangeId="",this.currentBrokerId="ibkr",this.selectedIndicator=null,this.connectionTestResult=null,this.executionModeUi="signal",this.notifyChannelsUi=["browser"],this.saveCredentialUi=!1,this.backtestCollapseKeys=["risk"],this.trailingEnabledUi=!1,this.entryPctMaxUi=100,this.aiFilterEnabledUi=!1,this.selectedMarketCategory="Crypto",this.selectedSymbols=[],this.showAdvancedSettings=!1,this.form.resetFields(),this.form.setFieldsValue({execution_mode:"signal",notify_channels:["browser"],save_credential:!1,live_disclaimer_ack:!1}),this.liveDisclaimerAckUi=!1,this.showFormModal=!0,this.$nextTick(function(){t.loadWatchlist(),t.loadIndicators(),t.loadExchangeCredentials()})},handleEditStrategy:function(t){var e=this;"running"!==t.status?(this.strategyType="indicator",this.isEditMode=!0,this.editingStrategy=t,this.currentStep=0,this.currentExchangeId="",this.selectedIndicator=null,this.connectionTestResult=null,this.form.resetFields(),this.backtestCollapseKeys=["risk"],this.trailingEnabledUi=!1,this.entryPctMaxUi=100,this.aiFilterEnabledUi=!1,this.showFormModal=!0,this.$nextTick((0,l.A)((0,o.A)().m(function a(){return(0,o.A)().w(function(a){while(1)switch(a.n){case 0:return e.loadWatchlist(),e.loadIndicators(),e.loadExchangeCredentials(),a.n=1,e.loadStrategyDataToForm(t);case 1:return a.a(2)}},a)})))):this.$message.warning(this.$t("trading-assistant.messages.runningWarning"))},loadStrategyDataToForm:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var i,s,r,l,d,c,u,m,g,p,h,_,y,f,v,b,S,k,x,C,w,$,A,P,M,F,T,V,I,N,U,E,z,D,R,K,q,L,B,O,H,W;return(0,o.A)().w(function(a){while(1)switch(a.n){case 0:if(e.indicatorsLoaded){a.n=1;break}return a.n=1,e.loadIndicators();case 1:return a.n=2,e.$nextTick();case 2:return e.selectedMarketCategory=t.market_category||"Crypto",c=t.execution_mode||"signal",e.executionModeUi=c,e.liveDisclaimerAckUi="live"===c,u=t.notification_config&&t.notification_config.channels||["browser"],e.notifyChannelsUi=Array.isArray(u)?u:["browser"],m=!1,g=!1,t.trading_config&&(f=t.trading_config||{},v=f.trailing&&"object"===(0,n.A)(f.trailing)?f.trailing:null,m=void 0!==f.trailing_enabled?!!f.trailing_enabled:!(!v||!v.enabled),b=f.enable_ai_filter,g=!0===b||"true"===b||1===b||"1"===b,S=f.scale&&"object"===(0,n.A)(f.scale)?f.scale:null,k=f.position&&"object"===(0,n.A)(f.position)?f.position:null,x=new Set(["risk"]),(f.trend_add_enabled||f.dca_add_enabled||S&&(null!==(p=S.trendAdd)&&void 0!==p&&p.enabled||null!==(h=S.dcaAdd)&&void 0!==h&&h.enabled))&&x.add("scale"),(f.trend_reduce_enabled||f.adverse_reduce_enabled||S&&(null!==(_=S.trendReduce)&&void 0!==_&&_.enabled||null!==(y=S.adverseReduce)&&void 0!==y&&y.enabled))&&x.add("reduce"),(void 0!==f.entry_pct||k&&void 0!==k.entryPct)&&x.add("position"),e.backtestCollapseKeys=Array.from(x)),e.trailingEnabledUi=m,e.aiFilterEnabledUi=g,a.n=3,e.$nextTick();case 3:return e.form.setFieldsValue({enable_ai_filter:g}),a.n=4,e.$nextTick();case 4:if(e.form.setFieldsValue({execution_mode:e.executionModeUi,live_disclaimer_ack:e.liveDisclaimerAckUi,notify_channels:e.notifyChannelsUi,notify_email:(null===(i=t.notification_config)||void 0===i||null===(i=i.targets)||void 0===i?void 0:i.email)||"",notify_phone:(null===(s=t.notification_config)||void 0===s||null===(s=s.targets)||void 0===s?void 0:s.phone)||"",notify_telegram:(null===(r=t.notification_config)||void 0===r||null===(r=r.targets)||void 0===r?void 0:r.telegram)||"",notify_discord:(null===(l=t.notification_config)||void 0===l||null===(l=l.targets)||void 0===l?void 0:l.discord)||"",notify_webhook:(null===(d=t.notification_config)||void 0===d||null===(d=d.targets)||void 0===d?void 0:d.webhook)||""}),!t.indicator_config||!t.indicator_config.indicator_id){a.n=7;break}if(C=t.indicator_config.indicator_id,w=e.availableIndicators.find(function(t){return String(t.id)===String(C)}),!w){a.n=6;break}return A=String(w.id),e.form.setFieldsValue({indicator_id:A}),a.n=5,e.handleIndicatorChange(A);case 5:P=null===($=t.trading_config)||void 0===$?void 0:$.indicator_params,P&&"object"===(0,n.A)(P)&&Object.keys(P).forEach(function(t){t in e.indicatorParamValues&&e.$set(e.indicatorParamValues,t,P[t])}),a.n=7;break;case 6:e.form.setFieldsValue({indicator_id:String(C)});case 7:if(!t.exchange_config){a.n=11;break}if(M=t.exchange_config.exchange_id||"",F="live"===e.executionModeUi,T=["Crypto","USStock","Forex"].includes(e.selectedMarketCategory),V="USStock"===e.selectedMarketCategory,I="Forex"===e.selectedMarketCategory,!F||!T){a.n=10;break}if(!V){a.n=8;break}e.currentBrokerId=M||"ibkr",e.form.setFieldsValue({broker_id:M||"ibkr",ibkr_host:t.exchange_config.ibkr_host||"127.0.0.1",ibkr_port:t.exchange_config.ibkr_port||7497,ibkr_client_id:t.exchange_config.ibkr_client_id||1,ibkr_account:t.exchange_config.ibkr_account||""}),a.n=10;break;case 8:if(!I){a.n=9;break}e.currentBrokerId=M||"mt5",e.form.setFieldsValue({forex_broker_id:M||"mt5",mt5_server:t.exchange_config.mt5_server||"",mt5_login:t.exchange_config.mt5_login||"",mt5_password:t.exchange_config.mt5_password||"",mt5_terminal_path:t.exchange_config.mt5_terminal_path||""}),a.n=10;break;case 9:if(e.currentExchangeId=M||t.exchange_config.exchange_id||"",N=t.exchange_config.credential_id,!N){a.n=10;break}return e.form.setFieldsValue({credential_id:N}),a.n=10,e.handleCredentialSelectChange(N);case 10:V||I?e.currentBrokerId=M||(I?"mt5":"ibkr"):e.currentExchangeId=M;case 11:if(t.trading_config){if(U=t.trading_config||{},E=U.trailing&&"object"===(0,n.A)(U.trailing)?U.trailing:null,z=U.scale&&"object"===(0,n.A)(U.scale)?U.scale:null,D=U.position&&"object"===(0,n.A)(U.position)?U.position:null,R=U.strategy_type||t.strategy_type||"single","cross_sectional"===R)if(e.form.setFieldsValue({cs_strategy_type:"cross_sectional",portfolio_size:U.portfolio_size||10,long_ratio:U.long_ratio||.5,rebalance_frequency:U.rebalance_frequency||"daily"}),U.symbol_list&&Array.isArray(U.symbol_list))e.crossSectionalSymbols=U.symbol_list;else if(t.symbol_list)try{K="string"===typeof t.symbol_list?JSON.parse(t.symbol_list):t.symbol_list,Array.isArray(K)&&(e.crossSectionalSymbols=K)}catch(o){e.crossSectionalSymbols=[]}else e.crossSectionalSymbols=[];else e.form.setFieldsValue({cs_strategy_type:"single"}),e.crossSectionalSymbols=[];q=z&&z.trendAdd?z.trendAdd:null,L=z&&z.dcaAdd?z.dcaAdd:null,B=z&&z.trendReduce?z.trendReduce:null,O=z&&z.adverseReduce?z.adverseReduce:null,H=U.symbol,W="string"===typeof H&&H.includes(":")?H:"".concat(e.selectedMarketCategory,":").concat(H),e.form.setFieldsValue({strategy_name:t.strategy_name,symbol:W,initial_capital:U.initial_capital,leverage:U.leverage,trade_direction:U.trade_direction||"long",timeframe:U.timeframe||"1H",market_type:"futures"===U.market_type?"swap":U.market_type||"swap",take_profit_pct:U.take_profit_pct||0,stop_loss_pct:U.stop_loss_pct||0,trailing_enabled:m,trailing_stop_pct:void 0!==U.trailing_stop_pct?U.trailing_stop_pct||0:E&&E.pct||0,trailing_activation_pct:void 0!==U.trailing_activation_pct?U.trailing_activation_pct||0:E&&E.activationPct||0,trend_add_enabled:void 0!==U.trend_add_enabled?!!U.trend_add_enabled:!(!q||!q.enabled),trend_add_step_pct:void 0!==U.trend_add_step_pct?U.trend_add_step_pct||0:q&&q.stepPct||0,trend_add_size_pct:void 0!==U.trend_add_size_pct?U.trend_add_size_pct||0:q&&q.sizePct||0,trend_add_max_times:void 0!==U.trend_add_max_times?U.trend_add_max_times||0:q&&q.maxTimes||0,dca_add_enabled:void 0!==U.dca_add_enabled?!!U.dca_add_enabled:!(!L||!L.enabled),dca_add_step_pct:void 0!==U.dca_add_step_pct?U.dca_add_step_pct||0:L&&L.stepPct||0,dca_add_size_pct:void 0!==U.dca_add_size_pct?U.dca_add_size_pct||0:L&&L.sizePct||0,dca_add_max_times:void 0!==U.dca_add_max_times?U.dca_add_max_times||0:L&&L.maxTimes||0,trend_reduce_enabled:void 0!==U.trend_reduce_enabled?!!U.trend_reduce_enabled:!(!B||!B.enabled),trend_reduce_step_pct:void 0!==U.trend_reduce_step_pct?U.trend_reduce_step_pct||0:B&&B.stepPct||0,trend_reduce_size_pct:void 0!==U.trend_reduce_size_pct?U.trend_reduce_size_pct||0:B&&B.sizePct||0,trend_reduce_max_times:void 0!==U.trend_reduce_max_times?U.trend_reduce_max_times||0:B&&B.maxTimes||0,adverse_reduce_enabled:void 0!==U.adverse_reduce_enabled?!!U.adverse_reduce_enabled:!(!O||!O.enabled),adverse_reduce_step_pct:void 0!==U.adverse_reduce_step_pct?U.adverse_reduce_step_pct||0:O&&O.stepPct||0,adverse_reduce_size_pct:void 0!==U.adverse_reduce_size_pct?U.adverse_reduce_size_pct||0:O&&O.sizePct||0,adverse_reduce_max_times:void 0!==U.adverse_reduce_max_times?U.adverse_reduce_max_times||0:O&&O.maxTimes||0,entry_pct:0===U.entry_pct||U.entry_pct?U.entry_pct:D&&D.entryPct?D.entryPct:100,enable_ai_filter:g}),e.$nextTick(function(){e.recalcEntryPctMaxUi(),e.normalizeEntryPct()})}case 12:return a.a(2)}},a)}))()},handleSelectStrategy:function(t){this.selectedStrategy=t,this.currentEquity=null,this.loadStrategyDetails(),this.startEquityPolling()},loadStrategyDetails:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a,i,s,n,l,d,u,g,p,h,_,y,f;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.selectedStrategy){e.n=1;break}return e.a(2,Promise.resolve());case 1:return e.p=1,e.n=2,Promise.all([(0,m.Yx)(t.selectedStrategy.id),(0,m.oK)(t.selectedStrategy.id)]);case 2:if(a=e.v,i=(0,r.A)(a,2),s=i[0],n=i[1],l=null,1===s.code&&s.data&&(Array.isArray(s.data)&&s.data.length>0?(d=s.data[s.data.length-1],l=d.equity):(g=(null===(u=t.selectedStrategy.trading_config)||void 0===u?void 0:u.initial_capital)||t.selectedStrategy.initial_capital,l=g||null)),p=0,1===n.code&&n.data){h=n.data.positions||n.data.items||[],_=(0,c.A)(h);try{for(_.s();!(y=_.n()).done;)f=y.value,p+=parseFloat(f.unrealized_pnl||f.unrealizedPnl||0)}catch(o){_.e(o)}finally{_.f()}}t.currentEquity=null!==l?l+p:null,e.n=4;break;case 3:e.p=3,e.v;case 4:return e.a(2)}},e,null,[[1,3]])}))()},startEquityPolling:function(){var t=this;this.stopEquityPolling(),this.selectedStrategy&&(this.loadStrategyDetails(),this.equityPollingTimer=setInterval(function(){t.loadStrategyDetails()},1e4))},stopEquityPolling:function(){this.equityPollingTimer&&(clearInterval(this.equityPollingTimer),this.equityPollingTimer=null)},handleCloseModal:function(){this.showFormModal=!1,this.editingStrategy=null,this.isEditMode=!1,this.strategyType="indicator",this.currentStep=0,this.currentExchangeId="",this.selectedIndicator=null,this.connectionTestResult=null,this.indicatorsLoaded=!1,this.availableIndicators=[],this.backtestCollapseKeys=["risk"],this.trailingEnabledUi=!1,this.entryPctMaxUi=100,this.aiFilterEnabledUi=!1,this.showAdvancedSettings=!1,this.executionModeUi="signal",this.liveDisclaimerAckUi=!1,this.form.resetFields()},handleRefresh:function(){this.loadStrategies(),this.showFormModal=!1},handleMenuClick:function(t,e){switch(t){case"start":this.handleStartStrategy(e.id);break;case"stop":this.handleStopStrategy(e.id);break;case"edit":this.handleEditStrategy(e);break;case"delete":this.handleDeleteStrategy(e);break}},toggleGroup:function(t){this.$set(this.collapsedGroups,t,!this.collapsedGroups[t])},handleGroupMenuClick:function(t,e){var a=this;return(0,l.A)((0,o.A)().m(function i(){var s,r;return(0,o.A)().w(function(i){while(1)switch(i.n){case 0:s=e.strategies.map(function(t){return t.id}),r=t,i.n="startAll"===r?1:"stopAll"===r?3:"deleteAll"===r?5:7;break;case 1:return i.n=2,a.handleBatchStartStrategies(s,e.baseName);case 2:return i.a(3,7);case 3:return i.n=4,a.handleBatchStopStrategies(s,e.baseName);case 4:return i.a(3,7);case 5:return i.n=6,a.handleBatchDeleteStrategies(s,e.baseName);case 6:return i.a(3,7);case 7:return i.a(2)}},i)}))()},handleBatchStartStrategies:function(t,e){var a=this;return(0,l.A)((0,o.A)().m(function e(){var i,s,r;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,m.UH)({strategy_ids:t});case 1:i=e.v,1===i.code?(r=(null===(s=i.data)||void 0===s||null===(s=s.success_ids)||void 0===s?void 0:s.length)||t.length,a.$message.success(a.$t("trading-assistant.messages.batchStartSuccess",{count:r})),a.loadStrategies()):a.$message.error(i.msg||a.$t("trading-assistant.messages.batchStartFailed")),e.n=3;break;case 2:e.p=2,e.v,a.$message.error(a.$t("trading-assistant.messages.batchStartFailed"));case 3:return e.a(2)}},e,null,[[0,2]])}))()},handleBatchStopStrategies:function(t,e){var a=this;return(0,l.A)((0,o.A)().m(function e(){var i,s,r;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,m.GF)({strategy_ids:t});case 1:i=e.v,1===i.code?(r=(null===(s=i.data)||void 0===s||null===(s=s.success_ids)||void 0===s?void 0:s.length)||t.length,a.$message.success(a.$t("trading-assistant.messages.batchStopSuccess",{count:r})),a.loadStrategies()):a.$message.error(i.msg||a.$t("trading-assistant.messages.batchStopFailed")),e.n=3;break;case 2:e.p=2,e.v,a.$message.error(a.$t("trading-assistant.messages.batchStopFailed"));case 3:return e.a(2)}},e,null,[[0,2]])}))()},handleBatchDeleteStrategies:function(t,e){var a=this;return(0,l.A)((0,o.A)().m(function i(){var s;return(0,o.A)().w(function(i){while(1)switch(i.n){case 0:s=a.$t("trading-assistant.messages.batchDeleteConfirm",{count:t.length,name:e}),a.$confirm({title:a.$t("trading-assistant.deleteAll"),content:s,okText:a.$t("trading-assistant.deleteAll"),okType:"danger",cancelText:a.$t("trading-assistant.form.cancel"),onOk:function(){var e=(0,l.A)((0,o.A)().m(function e(){var i,s,r;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,m.xQ)({strategy_ids:t});case 1:i=e.v,1===i.code?(r=(null===(s=i.data)||void 0===s||null===(s=s.success_ids)||void 0===s?void 0:s.length)||t.length,a.$message.success(a.$t("trading-assistant.messages.batchDeleteSuccess",{count:r})),a.selectedStrategy&&t.includes(a.selectedStrategy.id)&&(a.selectedStrategy=null,a.stopEquityPolling()),a.loadStrategies()):a.$message.error(i.msg||a.$t("trading-assistant.messages.batchDeleteFailed")),e.n=3;break;case 2:e.p=2,e.v,a.$message.error(a.$t("trading-assistant.messages.batchDeleteFailed"));case 3:return e.a(2)}},e,null,[[0,2]])}));function i(){return e.apply(this,arguments)}return i}()});case 1:return i.a(2)}},i)}))()},handleStartStrategy:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var i;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,m.mV)(t);case 1:i=a.v,1===i.code?(e.$message.success(e.$t("trading-assistant.messages.startSuccess")),e.loadStrategies(),e.selectedStrategy&&e.selectedStrategy.id===t&&(e.selectedStrategy.status="running")):e.$message.error(i.msg||e.$t("trading-assistant.messages.startFailed")),a.n=3;break;case 2:a.p=2,a.v,e.$message.error(e.$t("trading-assistant.messages.startFailed"));case 3:return a.a(2)}},a,null,[[0,2]])}))()},handleStopStrategy:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var i;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,m.Ke)(t);case 1:i=a.v,1===i.code?(e.$message.success(e.$t("trading-assistant.messages.stopSuccess")),e.loadStrategies(),e.selectedStrategy&&e.selectedStrategy.id===t&&(e.selectedStrategy.status="stopped")):e.$message.error(i.msg||e.$t("trading-assistant.messages.stopFailed")),a.n=3;break;case 2:a.p=2,a.v,e.$message.error(e.$t("trading-assistant.messages.stopFailed"));case 3:return a.a(2)}},a,null,[[0,2]])}))()},handleDeleteStrategy:function(t){var e=this,a=this.$t("trading-assistant.messages.deleteConfirmWithName",{name:t.strategy_name});this.$confirm({title:this.$t("trading-assistant.deleteStrategy"),content:a,okText:this.$t("trading-assistant.deleteStrategy"),okType:"danger",cancelText:this.$t("trading-assistant.form.cancel"),onOk:function(){var a=(0,l.A)((0,o.A)().m(function a(){var i;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,m.v_)(t.id);case 1:i=a.v,1===i.code?(e.$message.success(e.$t("trading-assistant.messages.deleteSuccess")),e.selectedStrategy&&e.selectedStrategy.id===t.id&&(e.selectedStrategy=null,e.stopEquityPolling()),e.loadStrategies()):e.$message.error(i.msg||e.$t("trading-assistant.messages.deleteFailed")),a.n=3;break;case 2:a.p=2,a.v,e.$message.error(e.$t("trading-assistant.messages.deleteFailed"));case 3:return a.a(2)}},a,null,[[0,2]])}));function i(){return a.apply(this,arguments)}return i}()})},getStatusColor:function(t){var e={running:"green",stopped:"default",error:"red"};return e[t]||"default"},getStatusText:function(t){return this.$t("trading-assistant.status.".concat(t))||t},getStrategyTypeText:function(t){return this.$t("trading-assistant.strategyType.".concat(t))||t},getTradeDirectionText:function(t){if(!t)return"";var e={long:this.$t("trading-assistant.form.tradeDirectionLong")||"做多",short:this.$t("trading-assistant.form.tradeDirectionShort")||"做空",both:this.$t("trading-assistant.form.tradeDirectionBoth")||"双向"};return e[t]||t},handleIndicatorSelectFocus:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){return(0,o.A)().w(function(e){while(1)switch(e.n){case 0:if(t.indicatorsLoaded||t.loadingIndicators){e.n=1;break}return e.n=1,t.loadIndicators();case 1:return e.a(2)}},e)}))()},loadIndicators:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a,i,s,r;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!t.loadingIndicators){e.n=1;break}return e.a(2,new Promise(function(e){var a=setInterval(function(){t.loadingIndicators||(clearInterval(a),e())},100)}));case 1:if(!t.indicatorsLoaded){e.n=2;break}return e.a(2,Promise.resolve());case 2:return a=t.$store.getters.userInfo||{},i=a.id||1,t.loadingIndicators=!0,e.p=3,e.n=4,(0,y.Ay)({url:"/api/indicator/getIndicators",method:"get",params:{userid:i}});case 4:s=e.v,1===s.code&&s.data?(r=s.data.map(function(t){return{id:t.id,name:t.name,description:t.description,type:t.indicator_type||t.indicatorType||"python",code:t.code,is_buy:t.is_buy,source:1===t.is_buy?"bought":"custom"}}),t.availableIndicators=r,t.indicatorsLoaded=!0):(t.availableIndicators=[],t.$message.warning(s.msg||t.$t("trading-assistant.messages.loadIndicatorsFailed"))),e.n=6;break;case 5:e.p=5,e.v,t.availableIndicators=[],t.$message.warning(t.$t("trading-assistant.messages.loadIndicatorsFailed"));case 6:return e.p=6,t.loadingIndicators=!1,e.f(6);case 7:return e.a(2)}},e,null,[[3,5,6,7]])}))()},handleIndicatorChange:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var i,s,r;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(i=String(t),e.selectedIndicator=e.availableIndicators.find(function(t){return String(t.id)===i}),e.indicatorParams=[],e.indicatorParamValues={},!t){a.n=4;break}return a.p=1,a.n=2,e.$http.get("/api/indicator/getIndicatorParams",{params:{indicator_id:t}});case 2:s=a.v,s&&1===s.code&&Array.isArray(s.data)&&(e.indicatorParams=s.data,r={},s.data.forEach(function(t){r[t.name]=t.default}),e.indicatorParamValues=r),a.n=4;break;case 3:a.p=3,a.v;case 4:return a.a(2)}},a,null,[[1,3]])}))()},handleMarketTypeChange:function(t){var e=t.target.value;"spot"===e&&this.form.setFieldsValue({trade_direction:"long",leverage:1})},recalcEntryPctMaxUi:function(){if(this.form){var t=!!this.form.getFieldValue("trend_add_enabled"),e=!!this.form.getFieldValue("dca_add_enabled"),a=Number(this.form.getFieldValue("trend_add_max_times")||0),i=Number(this.form.getFieldValue("dca_add_max_times")||0),s=Number(this.form.getFieldValue("trend_add_size_pct")||0),r=Number(this.form.getFieldValue("dca_add_size_pct")||0),n=(t?a*s:0)+(e?i*r:0),o=Math.max(0,Math.min(100,100-n));this.entryPctMaxUi=o}else this.entryPctMaxUi=100},normalizeEntryPct:function(){if(this.form){var t=Number(this.form.getFieldValue("entry_pct")||0),e=Number(this.entryPctMaxUi||100);t>e&&this.form.setFieldsValue({entry_pct:e})}},onTrendAddToggle:function(t){var e=this;this.form&&(t&&this.form.setFieldsValue({dca_add_enabled:!1}),this.$nextTick(function(){e.recalcEntryPctMaxUi(),e.normalizeEntryPct()}))},onDcaAddToggle:function(t){var e=this;this.form&&(t&&this.form.setFieldsValue({trend_add_enabled:!1}),this.$nextTick(function(){e.recalcEntryPctMaxUi(),e.normalizeEntryPct()}))},onScaleParamsChange:function(){var t=this;this.$nextTick(function(){t.recalcEntryPctMaxUi(),t.normalizeEntryPct()})},onEntryPctChange:function(){var t=this;this.$nextTick(function(){return t.normalizeEntryPct()})},onTrailingToggle:function(t){this.form&&(this.trailingEnabledUi=!!t,t||this.form.setFieldsValue({trailing_stop_pct:0,trailing_activation_pct:0}))},onAiFilterToggle:function(t){this.aiFilterEnabledUi=!!t;try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({enable_ai_filter:!!t})}catch(e){}},filterIndicatorOption:function(t,e){var a=e.componentOptions.children[0].children[0].text;return a.toLowerCase().indexOf(t.toLowerCase())>=0},filterSymbolOption:function(t,e){return e.componentOptions.children[0].text.toLowerCase().indexOf(t.toLowerCase())>=0},getIndicatorTypeColor:function(t){var e={trend:"blue",momentum:"green",volatility:"orange",volume:"purple",custom:"default"};return e[t]||"default"},getIndicatorTypeName:function(t){return this.$t("trading-assistant.indicatorType.".concat(t))||t},getExchangeName:function(t){if(t.labelKey){var e="trading-assistant.exchangeNames.".concat(t.labelKey),a=this.$t(e);return a===e?t.value.charAt(0).toUpperCase()+t.value.slice(1):a}return t.label||t.value},getExchangeDisplayName:function(t){if(!t)return"";var e=this.exchangeOptions.find(function(e){return e.value===t});return e?this.getExchangeName(e):t.charAt(0).toUpperCase()+t.slice(1)},getExchangeTagColor:function(t){var e={binance:"gold",okx:"blue",coinbaseexchange:"cyan",kraken:"purple",bitfinex:"geekblue",huobi:"orange",gate:"green",mexc:"lime",kucoin:"volcano",bybit:"red",bitget:"magenta",bitmex:"red",deribit:"blue",phemex:"cyan",bitmart:"geekblue",bitstamp:"purple",bittrex:"orange",poloniex:"green",gemini:"lime",cryptocom:"volcano",blockchaincom:"magenta",bitflyer:"red",upbit:"blue",bithumb:"cyan",coinone:"purple",zb:"geekblue",lbank:"orange",bibox:"green",bigone:"lime",bitrue:"volcano",coinex:"magenta",ftx:"red",ftxus:"blue",binanceus:"gold",binancecoinm:"gold",binanceusdm:"gold",ibkr:"green"};return e[t]||"default"},handleApiConfigChange:function(){this.connectionTestResult=null},getModalPopupContainer:function(){return window.document.body},handleBrokerSelectChange:function(t){this.currentBrokerId=t||"ibkr",this.connectionTestResult=null},handleForexBrokerSelectChange:function(t){this.currentBrokerId=t||"mt5",this.connectionTestResult=null},handleExchangeSelectChange:function(t){var e=this;this.currentExchangeId=t||"",this.connectionTestResult=null,this.suppressApiClearOnce?this.suppressApiClearOnce=!1:this.$nextTick(function(){var t={api_key:void 0,secret_key:void 0,passphrase:void 0,enable_demo_trading:!1};setTimeout(function(){e.form.setFieldsValue(t)},100)})},getPlaceholder:function(t){var e={okx:{api_key:"请输入API Key",secret_key:"请输入Secret Key",passphrase:"请输入Passphrase(创建API时设置)"},okex:{api_key:"请输入API Key",secret_key:"请输入Secret Key",passphrase:"请输入Passphrase(创建API时设置)"},binance:{api_key:"请输入API Key",secret_key:"请输入Secret Key"},coinbaseexchange:{api_key:"请输入API Key(或Key Name)",secret_key:"请输入API Secret(或Private Key)",passphrase:"请输入Passphrase(Legacy Pro API需要)"},kucoin:{api_key:"请输入API Key",secret_key:"请输入Secret Key",passphrase:"请输入Passphrase"},gate:{api_key:"请输入API Key",secret_key:"请输入Secret Key"},mexc:{api_key:"请输入Access Key",secret_key:"请输入Secret Key"},kraken:{api_key:"请输入API Key",secret_key:"请输入Secret Key"},bitfinex:{api_key:"请输入API Key",secret_key:"请输入Secret Key"},bybit:{api_key:"请输入API Key",secret_key:"请输入Secret Key"},bitget:{api_key:"请输入API Key",secret_key:"请输入Secret Key",passphrase:"请输入Passphrase(Legacy Pro API需要)"}},a=e[this.currentExchangeId]||{};if(a[t])return a[t];var i={api_key:this.$t("trading-assistant.placeholders.inputApiKey"),secret_key:this.$t("trading-assistant.placeholders.inputSecretKey"),passphrase:this.$t("trading-assistant.placeholders.inputPassphrase")};return i[t]||this.$t("trading-assistant.placeholders.inputApiKey")},handleNext:function(){var t=this;if(0===this.currentStep){var e=["indicator_id","strategy_name"];(this.isAdvancedMode||this.editingStrategy)&&e.push("initial_capital","market_type","leverage","trade_direction","timeframe"),this.isEditMode&&e.push("symbol"),this.form.validateFields(e,function(e,a){if(!e){if(!t.isEditMode){var i=t.form.getFieldValue("cs_strategy_type")||"single";if("cross_sectional"===i){if(!t.crossSectionalSymbols||0===t.crossSectionalSymbols.length)return void t.$message.warning(t.$t("trading-assistant.validation.symbolsRequired"))}else if(!t.selectedSymbols||0===t.selectedSymbols.length)return void t.$message.warning(t.$t("trading-assistant.validation.symbolsRequired"))}try{var s=a&&a.market_type||t.form.getFieldValue("market_type");"spot"===s&&t.form.setFieldsValue({leverage:1,trade_direction:"long"})}catch(r){}t.backtestCollapseKeys=["risk"];try{t.trailingEnabledUi=!!t.form.getFieldValue("trailing_enabled")}catch(r){t.trailingEnabledUi=!1}t.$nextTick(function(){t.recalcEntryPctMaxUi(),t.normalizeEntryPct()}),t.isSimpleMode&&!t.editingStrategy?t.currentStep=2:t.currentStep++}})}else if(1===this.currentStep){try{var a=this.form.getFieldValue("execution_mode")||"signal";this.executionModeUi=a;var i=this.form.getFieldValue("notify_channels")||["browser"];this.notifyChannelsUi=Array.isArray(i)?i:["browser"]}catch(s){}this.currentStep++}},handlePrev:function(){this.currentStep>0&&(this.isSimpleMode&&!this.editingStrategy&&2===this.currentStep?this.currentStep=0:this.currentStep--)},handleSubmit:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){return(0,o.A)().w(function(e){while(1)switch(e.n){case 0:t.form.validateFields(function(){var e=(0,l.A)((0,o.A)().m(function e(a,i){var s,r,n,l,d,c,u,g,p,h,_,y,f,v,b,S,k;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(a){e.n=14;break}if(e.p=1,t.saving=!0,s=t.canUseLiveTrading&&"live"===i.execution_mode,!s||i.live_disclaimer_ack){e.n=2;break}return t.$message.warning(t.$t("trading-assistant.liveDisclaimer.required")),t.saving=!1,e.a(2);case 2:if(!s){e.n=3;break}if(r=i.credential_id,r){e.n=3;break}return t.$message.warning(t.$t("trading-assistant.validation.credentialRequired")),t.saving=!1,e.a(2);case 3:if(n={channels:i.notify_channels||[],targets:{email:t.userNotificationSettings.email||"",phone:t.userNotificationSettings.phone||"",telegram:t.userNotificationSettings.telegram_chat_id||"",telegram_bot_token:t.userNotificationSettings.telegram_bot_token||"",discord:t.userNotificationSettings.discord_webhook||"",webhook:t.userNotificationSettings.webhook_url||"",webhook_token:t.userNotificationSettings.webhook_token||""}},n.channels&&0!==n.channels.length){e.n=4;break}return t.$message.warning(t.$t("trading-assistant.validation.notifyChannelRequired")),t.saving=!1,e.a(2);case 4:if(l=String(i.indicator_id),d=t.availableIndicators.find(function(t){return String(t.id)===l}),d){e.n=5;break}return t.$message.error(t.$t("trading-assistant.validation.indicatorRequired")),t.saving=!1,e.a(2);case 5:if(c=!!t.aiFilterEnabledUi,u="futures"===i.market_type?"swap":i.market_type||"swap",g=i.leverage||1,p=i.trade_direction||"long","spot"===u?(g=1,p="long",t.$message.info(t.$t("trading-assistant.messages.spotLimitations"))):(g<1&&(g=1),g>125&&(g=125)),h={strategy_name:i.strategy_name,market_category:t.selectedMarketCategory||"Crypto",execution_mode:i.execution_mode||"signal",notification_config:n,indicator_config:{indicator_id:d.id,indicator_name:d.name,indicator_code:d.code||""},exchange_config:s?t.isIBKRMarket?{exchange_id:i.broker_id||t.currentBrokerId||"ibkr",ibkr_host:i.ibkr_host||"127.0.0.1",ibkr_port:i.ibkr_port||7497,ibkr_client_id:i.ibkr_client_id||1,ibkr_account:i.ibkr_account||""}:t.isMT5Market?{exchange_id:i.forex_broker_id||t.currentBrokerId||"mt5",mt5_server:i.mt5_server||"",mt5_login:i.mt5_login||"",mt5_password:i.mt5_password||"",mt5_terminal_path:i.mt5_terminal_path||""}:{credential_id:i.credential_id,exchange_id:t.currentExchangeId||void 0}:void 0,trading_config:{initial_capital:i.initial_capital,leverage:g,trade_direction:p,timeframe:i.timeframe,market_type:u,margin_mode:"cross",signal_mode:"confirmed",take_profit_pct:i.take_profit_pct||0,stop_loss_pct:i.stop_loss_pct||0,trailing_enabled:!!i.trailing_enabled,trailing_stop_pct:i.trailing_stop_pct||0,trailing_activation_pct:i.trailing_activation_pct||0,trend_add_enabled:!!i.trend_add_enabled,trend_add_step_pct:i.trend_add_step_pct||0,trend_add_size_pct:i.trend_add_size_pct||0,trend_add_max_times:i.trend_add_max_times||0,dca_add_enabled:!!i.dca_add_enabled,dca_add_step_pct:i.dca_add_step_pct||0,dca_add_size_pct:i.dca_add_size_pct||0,dca_add_max_times:i.dca_add_max_times||0,trend_reduce_enabled:!!i.trend_reduce_enabled,trend_reduce_step_pct:i.trend_reduce_step_pct||0,trend_reduce_size_pct:i.trend_reduce_size_pct||0,trend_reduce_max_times:i.trend_reduce_max_times||0,adverse_reduce_enabled:!!i.adverse_reduce_enabled,adverse_reduce_step_pct:i.adverse_reduce_step_pct||0,adverse_reduce_size_pct:i.adverse_reduce_size_pct||0,adverse_reduce_max_times:i.adverse_reduce_max_times||0,entry_pct:0===i.entry_pct||i.entry_pct?i.entry_pct:100,commission:i.commission||0,slippage:i.slippage||0,enable_ai_filter:c,indicator_params:t.indicatorParamValues,strategy_type:i.cs_strategy_type||"single",symbol_list:"cross_sectional"===i.cs_strategy_type?t.crossSectionalSymbols:void 0,portfolio_size:"cross_sectional"===i.cs_strategy_type?i.portfolio_size||10:void 0,long_ratio:"cross_sectional"===i.cs_strategy_type?i.long_ratio||.5:void 0,rebalance_frequency:"cross_sectional"===i.cs_strategy_type?i.rebalance_frequency||"daily":void 0}},!t.editingStrategy){e.n=7;break}return y=i.symbol,"string"===typeof y&&y.includes(":")&&(f=y.indexOf(":"),h.market_category=y.slice(0,f)||h.market_category,y=y.slice(f+1)),h.trading_config.symbol=y,e.n=6,(0,m.P7)(t.editingStrategy.id,h);case 6:_=e.v,e.n=11;break;case 7:if(h.user_id=1,h.strategy_type="IndicatorStrategy","cross_sectional"!==i.cs_strategy_type){e.n=9;break}return h.strategy_type="IndicatorStrategy",h.trading_config.symbol=null,e.n=8,(0,m.WM)(h);case 8:_=e.v,e.n=11;break;case 9:return h.symbols=t.selectedSymbols,e.n=10,(0,m.Ox)(h);case 10:_=e.v;case 11:1===_.code?(t.isEditMode?t.$message.success(t.$t("trading-assistant.messages.updateSuccess")):(b=i.cs_strategy_type||"single",S="cross_sectional"===b?t.crossSectionalSymbols.length:t.selectedSymbols.length,k=(null===(v=_.data)||void 0===v?void 0:v.total_created)||S,t.$message.success(t.$t("trading-assistant.messages.batchCreateSuccess",{count:k}))),t.handleRefresh()):t.$message.error(_.msg||(t.isEditMode?t.$t("trading-assistant.messages.updateFailed"):t.$t("trading-assistant.messages.createFailed"))),e.n=13;break;case 12:e.p=12,e.v,t.$message.error(t.isEditMode?t.$t("trading-assistant.messages.updateFailed"):t.$t("trading-assistant.messages.createFailed"));case 13:return e.p=13,t.saving=!1,e.f(13);case 14:return e.a(2)}},e,null,[[1,12,13,14]])}));return function(t,a){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},getFormValues:function(){var t=this;return new Promise(function(e,a){t.form.validateFields(function(t,i){t?a(t):e(i)})})},getDropdownContainer:function(t){return document.body}}},E=U,z=(0,k.A)(E,i,s,!1,null,"13cac835",null),D=z.exports},42430:function(t,e,a){a.d(e,{IA:function(){return n},PR:function(){return o},kI:function(){return l}});var i=a(76338),s=a(75769),r={list:"/api/credentials/list",get:"/api/credentials/get",create:"/api/credentials/create",delete:"/api/credentials/delete"};function n(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,s.Ay)({url:r.list,method:"get",params:t})}function o(t){return(0,s.Ay)({url:r.create,method:"post",data:t})}function l(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(0,s.Ay)({url:r.delete,method:"delete",params:(0,i.A)({id:t},e)})}},35038:function(t,e,a){a.d(e,{Qo:function(){return r},_3:function(){return c},dp:function(){return n},iO:function(){return d},mk:function(){return o},ms:function(){return l},z6:function(){return u}});var i=a(75769),s={GetWatchlist:"/api/market/watchlist/get",AddWatchlist:"/api/market/watchlist/add",RemoveWatchlist:"/api/market/watchlist/remove",GetWatchlistPrices:"/api/market/watchlist/prices",MultiAnalysis:"/api/analysis/multiAnalysis",CreateAnalysisTask:"/api/analysis/createTask",GetAnalysisTaskStatus:"/api/analysis/getTaskStatus",GetAnalysisHistoryList:"/api/analysis/getHistoryList",DeleteAnalysisTask:"/api/analysis/deleteTask",ReflectAnalysis:"/api/analysis/reflect",ChatMessage:"/api/ai/chat/message",GetChatHistory:"/api/ai/chat/history",SaveChatHistory:"/api/ai/chat/history/save",GetConfig:"/api/market/config",GetMenuFooterConfig:"/api/market/menuFooterConfig",GetMarketTypes:"/api/market/types",SearchSymbols:"/api/market/symbols/search",GetHotSymbols:"/api/market/symbols/hot"};function r(t){return(0,i.Ay)({url:s.GetWatchlist,method:"get",params:t})}function n(t){return(0,i.Ay)({url:s.AddWatchlist,method:"post",data:t})}function o(t){return(0,i.Ay)({url:s.RemoveWatchlist,method:"post",data:t})}function l(t){return(0,i.Ay)({url:s.GetWatchlistPrices,method:"get",params:{watchlist:JSON.stringify(t.watchlist||[])}})}function d(){return(0,i.Ay)({url:s.GetMarketTypes,method:"get"})}function c(t){return(0,i.Ay)({url:s.SearchSymbols,method:"get",params:t})}function u(t){return(0,i.Ay)({url:s.GetHotSymbols,method:"get",params:t})}},84841:function(t,e,a){a.d(e,{DK:function(){return f},E$:function(){return c},Gl:function(){return g},O0:function(){return d},TK:function(){return n},aU:function(){return s},cw:function(){return l},d$:function(){return b},hG:function(){return o},kg:function(){return r},nY:function(){return y},r7:function(){return u},rx:function(){return h},v9:function(){return p},vF:function(){return m},vi:function(){return v},wq:function(){return _}});var i=a(75769);function s(t){return(0,i.Ay)({url:"/api/users/list",method:"get",params:t})}function r(t){return(0,i.Ay)({url:"/api/users/create",method:"post",data:t})}function n(t,e){return(0,i.Ay)({url:"/api/users/update",method:"put",params:{id:t},data:e})}function o(t){return(0,i.Ay)({url:"/api/users/delete",method:"delete",params:{id:t}})}function l(t){return(0,i.Ay)({url:"/api/users/reset-password",method:"post",data:t})}function d(){return(0,i.Ay)({url:"/api/users/roles",method:"get"})}function c(){return(0,i.Ay)({url:"/api/users/profile",method:"get"})}function u(t){return(0,i.Ay)({url:"/api/users/profile/update",method:"put",data:t})}function m(){return(0,i.Ay)({url:"/api/users/notification-settings",method:"get"})}function g(t){return(0,i.Ay)({url:"/api/users/notification-settings",method:"put",data:t})}function p(t){return(0,i.Ay)({url:"/api/users/my-credits-log",method:"get",params:t})}function h(t){return(0,i.Ay)({url:"/api/users/my-referrals",method:"get",params:t})}function _(t){return(0,i.Ay)({url:"/api/users/set-credits",method:"post",data:t})}function y(t){return(0,i.Ay)({url:"/api/users/set-vip",method:"post",data:t})}function f(t){return(0,i.Ay)({url:"/api/users/system-strategies",method:"get",params:t})}function v(t){return(0,i.Ay)({url:"/api/users/admin-orders",method:"get",params:t})}function b(t){return(0,i.Ay)({url:"/api/users/admin-ai-stats",method:"get",params:t})}}}]); \ No newline at end of file diff --git a/frontend/dist/js/70-legacy.54fcf579.js b/frontend/dist/js/70-legacy.54fcf579.js deleted file mode 100644 index edd2581..0000000 --- a/frontend/dist/js/70-legacy.54fcf579.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[70],{87070:function(t,a,e){e.r(a),e.d(a,{default:function(){return _}});e(28706),e(34782);var s=function(){var t=this,a=t._self._c;return a("div",{staticClass:"dashboard-pro",class:{"theme-dark":t.isDarkTheme}},[a("div",{staticClass:"kpi-grid"},[a("div",{staticClass:"kpi-card kpi-primary"},[a("div",{staticClass:"kpi-glow"}),a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"wallet"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.totalEquity")))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"currency"},[t._v("$")]),a("span",{staticClass:"amount"},[t._v(t._s(t.formatNumber(t.summary.total_equity)))])]),a("div",{staticClass:"kpi-sub"},[a("span",{class:t.summary.total_pnl>=0?"positive":"negative"},[t._v(" "+t._s(t.summary.total_pnl>=0?"+":"")+t._s(t.formatNumber(t.summary.total_pnl))+" ")]),a("span",{staticClass:"label"},[t._v(t._s(t.$t("dashboard.label.totalPnl")))])])])]),a("div",{staticClass:"kpi-card kpi-win-rate"},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"trophy"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.winRate")||"胜率"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount"},[t._v(t._s(t.formatNumber(t.performance.win_rate,1)))]),a("span",{staticClass:"unit"},[t._v("%")])]),a("div",{staticClass:"kpi-sub"},[a("span",{staticClass:"positive"},[t._v(t._s(t.performance.winning_trades))]),a("span",{staticClass:"label"},[t._v(t._s(t.$t("dashboard.label.win")))]),a("span",{staticClass:"divider"},[t._v("/")]),a("span",{staticClass:"negative"},[t._v(t._s(t.performance.losing_trades))]),a("span",{staticClass:"label"},[t._v(t._s(t.$t("dashboard.label.lose")))])])]),a("div",{staticClass:"kpi-ring"},[a("svg",{attrs:{viewBox:"0 0 36 36"}},[a("path",{staticClass:"ring-bg",attrs:{d:"M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831"}}),a("path",{staticClass:"ring-progress",attrs:{"stroke-dasharray":"".concat(t.performance.win_rate||0,", 100"),d:"M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831"}})])])]),a("div",{staticClass:"kpi-card kpi-profit-factor"},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"rise"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.profitFactor")||"盈亏比"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount"},[t._v(t._s(t.formatNumber(t.performance.profit_factor,2)))]),a("span",{staticClass:"unit"},[t._v(":1")])]),a("div",{staticClass:"kpi-sub"},[a("span",[t._v(t._s(t.$t("dashboard.label.avgProfit"))+" ")]),a("span",{staticClass:"positive"},[t._v("$"+t._s(t.formatNumber(t.performance.avg_win)))])])])]),a("div",{staticClass:"kpi-card kpi-drawdown"},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"fall"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.maxDrawdown")||"最大回撤"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount negative"},[t._v(t._s(t.formatNumber(t.performance.max_drawdown_pct,1)))]),a("span",{staticClass:"unit"},[t._v("%")])]),a("div",{staticClass:"kpi-sub"},[a("span",[t._v("$"+t._s(t.formatNumber(t.performance.max_drawdown)))])])])]),a("div",{staticClass:"kpi-card kpi-trades"},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"swap"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.totalTrades")||"总交易"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount"},[t._v(t._s(t.performance.total_trades))]),a("span",{staticClass:"unit"},[t._v(t._s(t.$t("dashboard.unit.trades")))])]),a("div",{staticClass:"kpi-sub"},[a("span",[t._v(t._s(t.$t("dashboard.label.avgDaily"))+" ")]),a("span",[t._v(t._s(t.avgTradesPerDay))]),a("span",{staticClass:"label"},[t._v(" "+t._s(t.$t("dashboard.unit.trades")))])])])]),a("div",{staticClass:"kpi-card kpi-strategies clickable",on:{click:function(a){return t.$router.push("/trading-assistant")}}},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"thunderbolt",theme:"filled"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.runningStrategies")||"运行中策略"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount"},[t._v(t._s(t.summary.indicator_strategy_count))]),a("span",{staticClass:"unit"},[t._v(t._s(t.$t("dashboard.unit.strategies")))])]),a("div",{staticClass:"kpi-sub"},[a("span",{staticClass:"highlight"},[t._v(t._s(t.summary.indicator_strategy_count))]),a("span",{staticClass:"label"},[t._v(" "+t._s(t.$t("dashboard.label.indicator")))])])]),a("div",{staticClass:"card-arrow"},[a("a-icon",{attrs:{type:"right"}})],1)])]),a("div",{staticClass:"chart-row"},[a("div",{staticClass:"chart-panel chart-main"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"calendar"}}),a("span",[t._v(t._s(t.$t("dashboard.profitCalendar")||"收益日曆"))])],1),a("div",{staticClass:"calendar-nav"},[a("a-button",{attrs:{type:"link",size:"small",disabled:t.currentCalendarIndex>=t.calendarMonths.length-1},on:{click:t.prevMonth}},[a("a-icon",{attrs:{type:"left"}})],1),a("span",{staticClass:"current-month"},[t._v(t._s(t.currentMonthLabel))]),a("a-button",{attrs:{type:"link",size:"small",disabled:t.currentCalendarIndex<=0},on:{click:t.nextMonth}},[a("a-icon",{attrs:{type:"right"}})],1)],1)]),a("div",{staticClass:"profit-calendar"},[t.currentCalendarMonth?[a("div",{staticClass:"month-summary"},[a("div",{staticClass:"summary-item"},[a("span",{staticClass:"summary-label"},[t._v(t._s(t.$t("dashboard.ranking.totalProfit")))]),a("span",{staticClass:"summary-value",class:t.currentCalendarMonth.total>=0?"positive":"negative"},[t._v(" "+t._s(t.currentCalendarMonth.total>=0?"+":"")+"$"+t._s(t.formatNumber(t.currentCalendarMonth.total))+" ")])]),a("div",{staticClass:"summary-item"},[a("span",{staticClass:"summary-label"},[t._v(t._s(t.$t("dashboard.label.win")))]),a("span",{staticClass:"summary-value positive"},[t._v(t._s(t.currentCalendarMonth.win_days))])]),a("div",{staticClass:"summary-item"},[a("span",{staticClass:"summary-label"},[t._v(t._s(t.$t("dashboard.label.lose")))]),a("span",{staticClass:"summary-value negative"},[t._v(t._s(t.currentCalendarMonth.lose_days))])])]),a("div",{staticClass:"calendar-weekdays"},t._l(t.weekdays,function(e){return a("div",{key:e,staticClass:"weekday"},[t._v(t._s(e))])}),0),a("div",{staticClass:"calendar-grid"},[t._l(t.calendarFirstDayOffset,function(t){return a("div",{key:"empty-"+t,staticClass:"calendar-cell empty"})}),t._l(t.currentCalendarMonth.days_in_month,function(e){return a("div",{key:e,staticClass:"calendar-cell",class:t.getDayClass(e)},[a("span",{staticClass:"day-number"},[t._v(t._s(e))]),null!==t.getDayProfit(e)?a("span",{staticClass:"day-profit",class:t.getDayProfit(e)>=0?"positive":"negative"},[t._v(" "+t._s(t.getDayProfit(e)>=0?"+":"")+t._s(t.formatCompactNumber(t.getDayProfit(e)))+" ")]):t._e()])})],2)]:a("div",{staticClass:"calendar-empty"},[a("a-icon",{attrs:{type:"inbox"}}),a("span",[t._v(t._s(t.$t("dashboard.noData")))])],1)],2)]),a("div",{staticClass:"chart-panel chart-side"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"pie-chart"}}),a("span",[t._v(t._s(t.$t("dashboard.strategyAllocation")||"策略分布"))])],1)]),a("div",{ref:"pieChart",staticClass:"chart-body"})])]),a("div",{staticClass:"chart-row"},[a("div",{staticClass:"chart-panel chart-half"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"area-chart"}}),a("span",[t._v(t._s(t.$t("dashboard.drawdownCurve")||"回撤曲线"))])],1)]),a("div",{ref:"drawdownChart",staticClass:"chart-body chart-sm"})]),a("div",{staticClass:"chart-panel chart-half"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"clock-circle"}}),a("span",[t._v(t._s(t.$t("dashboard.hourlyDistribution")||"交易时段"))])],1)]),a("div",{ref:"hourlyChart",staticClass:"chart-body chart-sm"})])]),a("div",{staticClass:"chart-panel"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"ordered-list"}}),a("span",[t._v(t._s(t.$t("dashboard.strategyRanking")||"策略排行榜"))])],1)]),a("div",{staticClass:"strategy-ranking"},[0===t.strategyStats.length?a("div",{staticClass:"empty-state"},[a("a-icon",{attrs:{type:"inbox"}}),a("span",[t._v(t._s(t.$t("dashboard.noStrategyData")))])],1):a("div",{staticClass:"ranking-grid"},t._l(t.strategyStats.slice(0,6),function(e,s){return a("div",{key:e.strategy_id,staticClass:"ranking-card",class:{"rank-top":s<3}},[a("div",{staticClass:"rank-badge",class:"rank-".concat(s+1)},[t._v(t._s(s+1))]),a("div",{staticClass:"rank-info"},[a("div",{staticClass:"rank-name"},[t._v(t._s(e.strategy_name))]),a("div",{staticClass:"rank-stats"},[a("span",{staticClass:"stat"},[a("label",[t._v(t._s(t.$t("dashboard.ranking.totalProfit")))]),a("span",{class:e.total_pnl>=0?"positive":"negative"},[t._v(" "+t._s(e.total_pnl>=0?"+":"")+"$"+t._s(t.formatNumber(e.total_pnl))+" ")])]),a("span",{staticClass:"stat"},[a("label",[t._v(t._s(t.$t("dashboard.winRate")))]),a("span",[t._v(t._s(t.formatNumber(e.win_rate,1))+"%")])]),a("span",{staticClass:"stat"},[a("label",[t._v(t._s(t.$t("dashboard.profitFactor")))]),a("span",[t._v(t._s(t.formatNumber(e.profit_factor,2)))])]),a("span",{staticClass:"stat"},[a("label",[t._v(t._s(t.$t("dashboard.ranking.trades")))]),a("span",[t._v(t._s(e.total_trades))])])])]),a("div",{staticClass:"rank-pnl-bar"},[a("div",{staticClass:"bar-fill",class:e.total_pnl>=0?"positive":"negative",style:{width:"".concat(Math.min(100,Math.abs(e.total_pnl)/t.maxStrategyPnl*100),"%")}})])])}),0)])]),a("div",{staticClass:"table-row"},[a("div",{staticClass:"table-panel"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"stock"}}),a("span",[t._v(t._s(t.$t("dashboard.currentPositions")))])],1),a("div",{staticClass:"panel-badge"},[t._v(t._s((t.summary.current_positions||[]).length))])]),a("a-table",{staticClass:"pro-table",attrs:{columns:t.positionColumns,"data-source":t.summary.current_positions,rowKey:"id",pagination:!1,size:"small",scroll:{x:"max-content"}},scopedSlots:t._u([{key:"symbol",fn:function(e,s){return[a("div",{staticClass:"symbol-cell"},[a("span",{staticClass:"symbol-name"},[t._v(t._s(e))]),a("span",{staticClass:"symbol-strategy"},[t._v(t._s(s.strategy_name))])])]}},{key:"side",fn:function(e){return[a("span",{staticClass:"side-tag",class:"long"===e?"long":"short"},[t._v(" "+t._s("long"===e?"LONG":"SHORT")+" ")])]}},{key:"unrealized_pnl",fn:function(e,s){return[a("div",{staticClass:"pnl-cell"},[a("span",{class:e>=0?"positive":"negative"},[t._v(" "+t._s(e>=0?"+":"")+"$"+t._s(t.formatNumber(e))+" ")]),a("span",{staticClass:"pnl-percent",class:s.pnl_percent>=0?"positive":"negative"},[t._v(" "+t._s(s.pnl_percent>=0?"+":"")+t._s(t.formatNumber(s.pnl_percent))+"% ")])])]}}])})],1),a("div",{staticClass:"table-panel"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"history"}}),a("span",[t._v(t._s(t.$t("dashboard.recentTrades")))])],1)]),a("a-table",{staticClass:"pro-table",attrs:{columns:t.columns,"data-source":t.summary.recent_trades,rowKey:"id",pagination:{pageSize:8,size:"small"},size:"small",scroll:{x:"max-content"}},scopedSlots:t._u([{key:"type",fn:function(e){return[a("span",{staticClass:"type-tag",class:t.getTypeClass(e)},[t._v(" "+t._s(t.getSignalTypeText(e))+" ")])]}},{key:"profit",fn:function(e,s){return[a("span",{class:"--"!==t.formatProfitValue(e,s)?e>=0?"positive":"negative":""},[t._v(" "+t._s(t.formatProfitValue(e,s))+" ")])]}},{key:"time",fn:function(e){return[a("span",{staticClass:"time-cell"},[t._v(t._s(t.formatTime(e)))])]}}])})],1)]),a("div",{staticClass:"chart-panel orders-panel"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"unordered-list"}}),a("span",[t._v(t._s(t.$t("dashboard.pendingOrders")))]),a("a-tooltip",{attrs:{title:t.soundEnabled?t.$t("dashboard.clickToMute"):t.$t("dashboard.clickToUnmute")}},[a("a-icon",{staticClass:"sound-toggle",class:{"sound-off":!t.soundEnabled},attrs:{type:t.soundEnabled?"sound":"audio-muted"},on:{click:t.toggleSound}})],1)],1),a("div",{staticClass:"panel-badge"},[t._v(t._s(t.ordersPagination.total))])]),a("a-table",{staticClass:"pro-table",attrs:{columns:t.orderColumns,"data-source":t.pendingOrders,rowKey:"id",pagination:{current:t.ordersPagination.current,pageSize:t.ordersPagination.pageSize,total:t.ordersPagination.total,showSizeChanger:!0,size:"small",showTotal:function(a){return t.$t("dashboard.totalOrders",{total:a})}},size:"small",loading:t.ordersLoading,scroll:{x:1200}},on:{change:t.handleOrdersTableChange},scopedSlots:t._u([{key:"strategy_name",fn:function(e,s){return[a("div",{staticClass:"symbol-cell"},[a("span",{staticClass:"symbol-name"},[t._v(t._s(e||"-"))]),a("span",{staticClass:"symbol-strategy"},[t._v("ID: "+t._s(s.strategy_id))])])]}},{key:"symbol",fn:function(e){return[a("span",{staticClass:"symbol-tag"},[t._v(t._s(e))])]}},{key:"signal_type",fn:function(e){return[a("span",{staticClass:"type-tag",class:t.getTypeClass(e)},[t._v(" "+t._s(t.getSignalTypeText(e))+" ")])]}},{key:"exchange",fn:function(e,s){return[s&&(s.exchange_display||s.exchange_id||e)?a("span",{staticClass:"exchange-tag",class:(s.exchange_display||s.exchange_id||e).toLowerCase()},[t._v(" "+t._s(String(s.exchange_display||s.exchange_id||e).toUpperCase())+" ")]):a("span",{staticClass:"text-muted"},[t._v("-")]),s&&s.market_type?a("div",{staticClass:"market-type"},[t._v(" "+t._s(String(s.market_type).toUpperCase())+" ")]):t._e()]}},{key:"notify",fn:function(e,s){return[a("div",{staticClass:"notify-icons"},[t._l(s&&s.notify_channels?s.notify_channels:[],function(e){return a("a-tooltip",{key:"".concat(s.id,"-").concat(e),attrs:{title:String(e)}},[a("a-icon",{staticClass:"notify-icon",attrs:{type:t.getNotifyIconType(e)}})],1)}),s&&s.notify_channels&&0!==s.notify_channels.length?t._e():a("span",{staticClass:"text-muted"},[t._v("-")])],2)]}},{key:"status",fn:function(e,s){return[a("span",{staticClass:"status-tag",class:e},[t._v(" "+t._s(t.getStatusText(e))+" ")]),"failed"===e&&s.error_message?a("div",{staticClass:"error-hint"},[a("a-tooltip",{attrs:{title:s.error_message}},[a("a-icon",{attrs:{type:"exclamation-circle"}}),a("span",[t._v(t._s(t.$t("dashboard.viewError")))])],1)],1):t._e()]}},{key:"amount",fn:function(e,s){return[a("div",[t._v(t._s(t.formatNumber(e,8)))]),s.filled_amount?a("div",{staticClass:"sub-text"},[t._v(" "+t._s(t.$t("dashboard.filled"))+": "+t._s(t.formatNumber(s.filled_amount,8))+" ")]):t._e()]}},{key:"price",fn:function(e,s){return[s.filled_price?a("div",[t._v(t._s(t.formatNumber(s.filled_price)))]):a("div",{staticClass:"text-muted"},[t._v("-")])]}},{key:"time_info",fn:function(e,s){return[a("div",{staticClass:"time-cell"},[t._v(t._s(t.formatTime(s.created_at)))]),s.executed_at?a("div",{staticClass:"sub-text"},[t._v(" "+t._s(t.formatTime(s.executed_at))+" ")]):t._e()]}}])})],1)])},r=[],n=e(76959),i=e(17654),o=e(52074),l=e(9133),d=e(57888),c=(e(2008),e(23418),e(74423),e(62062),e(26910),e(62010),e(36033),e(2892),e(9868),e(26099),e(27495),e(21699),e(47764),e(68156),e(42762),e(62953),e(15014)),u=e(76471),p={summary:"/api/dashboard/summary",pendingOrders:"/api/dashboard/pendingOrders"};function h(){return(0,u.Ay)({url:p.summary,method:"get"})}function f(t){return(0,u.Ay)({url:p.pendingOrders,method:"get",params:t})}var m=e(95353),g={name:"Dashboard",data:function(){return{summary:{ai_strategy_count:0,indicator_strategy_count:0,total_equity:0,total_pnl:0,total_realized_pnl:0,total_unrealized_pnl:0,performance:{},strategy_stats:[],daily_pnl_chart:[],strategy_pnl_chart:[],monthly_returns:[],hourly_distribution:[],calendar_months:[],recent_trades:[],current_positions:[]},currentCalendarIndex:0,pieChart:null,drawdownChart:null,hourlyChart:null,pendingOrders:[],ordersLoading:!1,ordersPagination:{current:1,pageSize:20,total:0},orderPollTimer:null,lastOrderId:0,orderPollIntervalMs:5e3,soundEnabled:!0,beepCtx:null}},computed:(0,d.A)((0,d.A)({},(0,m.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},performance:function(){return this.summary.performance||{}},strategyStats:function(){return this.summary.strategy_stats||[]},maxStrategyPnl:function(){var t=this.strategyStats;return t.length?Math.max.apply(Math,(0,l.A)(t.map(function(t){return Math.abs(t.total_pnl||0)})).concat([1])):1},avgTradesPerDay:function(){var t=this.summary.daily_pnl_chart||[],a=t.length||1,e=this.performance.total_trades||0;return(e/a).toFixed(1)},calendarMonths:function(){return this.summary.calendar_months||[]},currentCalendarMonth:function(){var t=this.calendarMonths;return t.length&&t[this.currentCalendarIndex]||null},currentMonthLabel:function(){var t=this.currentCalendarMonth;if(!t)return"-";var a=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];return"".concat(a[t.month-1]," ").concat(t.year)},weekdays:function(){return["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]},calendarFirstDayOffset:function(){var t=this.currentCalendarMonth;return t?t.first_weekday:0},orderStrategyFilters:function(){var t,a=Array.isArray(this.pendingOrders)?this.pendingOrders:[],e=new Map,s=(0,o.A)(a);try{for(s.s();!(t=s.n()).done;){var r=t.value,n=r&&r.strategy_id;if(void 0!==n&&null!==n&&!e.has(String(n))){var i=r&&r.strategy_name?String(r.strategy_name):"",l=i?"".concat(i," (ID: ").concat(n,")"):"ID: ".concat(n);e.set(String(n),{text:l,value:String(n)})}}}catch(d){s.e(d)}finally{s.f()}return Array.from(e.values()).sort(function(t,a){return String(t.text).localeCompare(String(a.text))})},columns:function(){var t=this;return[{title:this.$t("dashboard.table.time"),dataIndex:"created_at",scopedSlots:{customRender:"time"},width:150},{title:this.$t("dashboard.table.symbol"),dataIndex:"symbol",width:100},{title:this.$t("dashboard.table.type"),dataIndex:"type",scopedSlots:{customRender:"type"},width:90},{title:this.$t("dashboard.table.price"),dataIndex:"price",customRender:function(a){return t.formatNumber(a)},width:100},{title:this.$t("dashboard.table.profit"),dataIndex:"profit",scopedSlots:{customRender:"profit"},align:"right",width:100}]},positionColumns:function(){var t=this;return[{title:this.$t("dashboard.table.symbol"),dataIndex:"symbol",scopedSlots:{customRender:"symbol"}},{title:this.$t("dashboard.table.side"),dataIndex:"side",scopedSlots:{customRender:"side"}},{title:this.$t("dashboard.table.size"),dataIndex:"size",customRender:function(a){return t.formatNumber(a,4)}},{title:this.$t("dashboard.table.entryPrice"),dataIndex:"entry_price",customRender:function(a){return t.formatNumber(a)}},{title:this.$t("dashboard.table.pnl"),dataIndex:"unrealized_pnl",scopedSlots:{customRender:"unrealized_pnl"},align:"right"}]},orderColumns:function(){return[{title:this.$t("dashboard.orderTable.strategy"),dataIndex:"strategy_name",scopedSlots:{customRender:"strategy_name"},filters:this.orderStrategyFilters,filterMultiple:!0,onFilter:function(t,a){return String(a&&a.strategy_id)===String(t)},width:150},{title:this.$t("dashboard.orderTable.exchange"),dataIndex:"exchange_id",scopedSlots:{customRender:"exchange"},width:120},{title:this.$t("dashboard.orderTable.notify"),dataIndex:"notify_channels",scopedSlots:{customRender:"notify"},width:100},{title:this.$t("dashboard.orderTable.symbol"),dataIndex:"symbol",scopedSlots:{customRender:"symbol"},width:110},{title:this.$t("dashboard.orderTable.signalType"),dataIndex:"signal_type",scopedSlots:{customRender:"signal_type"},width:100},{title:this.$t("dashboard.orderTable.amount"),dataIndex:"amount",scopedSlots:{customRender:"amount"},width:130},{title:this.$t("dashboard.orderTable.price"),dataIndex:"filled_price",scopedSlots:{customRender:"price"},width:100},{title:this.$t("dashboard.orderTable.status"),dataIndex:"status",scopedSlots:{customRender:"status"},width:130},{title:this.$t("dashboard.orderTable.timeInfo"),dataIndex:"created_at",scopedSlots:{customRender:"time_info"},width:160}]}}),mounted:function(){this.fetchData(),this.fetchPendingOrders(),this.startOrderPolling(),window.addEventListener("resize",this.handleResize)},beforeDestroy:function(){this.stopOrderPolling(),window.removeEventListener("resize",this.handleResize),this.pieChart&&this.pieChart.dispose(),this.drawdownChart&&this.drawdownChart.dispose(),this.hourlyChart&&this.hourlyChart.dispose()},methods:{fetchData:function(){var t=this;return(0,i.A)((0,n.A)().m(function a(){var e;return(0,n.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,h();case 1:e=a.v,1===e.code&&(t.summary=(0,d.A)((0,d.A)({},t.summary),e.data),t.$nextTick(function(){t.initCharts()})),a.n=3;break;case 2:a.p=2,a.v;case 3:return a.a(2)}},a,null,[[0,2]])}))()},fetchPendingOrders:function(t,a){var e=this;return(0,i.A)((0,n.A)().m(function s(){var r,i,o,l;return(0,n.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return e.ordersLoading=!0,s.p=1,r=t||e.ordersPagination.current||1,i=a||e.ordersPagination.pageSize||20,s.n=2,f({page:r,pageSize:i});case 2:o=s.v,1===o.code&&(l=o.data||{},e.pendingOrders=l.list||[],e.ordersPagination.current=Number(l.page||r||1),e.ordersPagination.pageSize=Number(l.pageSize||i||20),e.ordersPagination.total=Number(l.total||0)),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.p=4,e.ordersLoading=!1,s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},playOrderBeep:function(){if(this.soundEnabled)try{var t=window.AudioContext||window.webkitAudioContext;if(!t)return;this.beepCtx||(this.beepCtx=new t);var a=this.beepCtx;"suspended"===a.state&&"function"===typeof a.resume&&a.resume().catch(function(){});var e=function(t,e){var s=a.createOscillator(),r=a.createGain();s.type="sine",s.frequency.value=e,r.gain.value=.08,s.connect(r),r.connect(a.destination),s.start(t),s.stop(t+.12)},s=a.currentTime;e(s,880),e(s+.18,1100)}catch(r){}},startOrderPolling:function(){var t=this;this.stopOrderPolling(),this.initLastOrderId(),this.orderPollTimer=setInterval(function(){t.pollNewOrders()},this.orderPollIntervalMs)},stopOrderPolling:function(){this.orderPollTimer&&(clearInterval(this.orderPollTimer),this.orderPollTimer=null)},initLastOrderId:function(){var t=this;return(0,i.A)((0,n.A)().m(function a(){var e;return(0,n.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,f({page:1,pageSize:1});case 1:e=a.v,1===e.code&&e.data&&e.data.list&&e.data.list.length>0&&(t.lastOrderId=e.data.list[0].id||0),a.n=3;break;case 2:a.p=2,a.v;case 3:return a.a(2)}},a,null,[[0,2]])}))()},pollNewOrders:function(){var t=this;return(0,i.A)((0,n.A)().m(function a(){var e,s,r,i,l,d,c,u;return(0,n.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,f({page:1,pageSize:10});case 1:if(e=a.v,1===e.code&&e.data&&e.data.list){a.n=2;break}return a.a(2);case 2:if(s=e.data.list||[],0!==s.length){a.n=3;break}return a.a(2);case 3:r=!1,i=t.lastOrderId,l=(0,o.A)(s);try{for(l.s();!(d=l.n()).done;)c=d.value,u=c.id||0,u>t.lastOrderId&&(r=!0,u>i&&(i=u))}catch(n){l.e(n)}finally{l.f()}r&&(t.lastOrderId=i,t.playOrderBeep(),t.fetchPendingOrders(),t.$notification.info({message:t.$t("dashboard.newOrderNotify"),description:t.$t("dashboard.newOrderDesc"),duration:4})),a.n=5;break;case 4:a.p=4,a.v;case 5:return a.a(2)}},a,null,[[0,4]])}))()},toggleSound:function(){this.soundEnabled=!this.soundEnabled,this.soundEnabled?this.$message.success(this.$t("dashboard.soundEnabled")):this.$message.info(this.$t("dashboard.soundDisabled"))},handleOrdersTableChange:function(t){var a=t&&t.current?t.current:1,e=t&&t.pageSize?t.pageSize:this.ordersPagination.pageSize||20;this.ordersPagination.current=a,this.ordersPagination.pageSize=e,this.fetchPendingOrders(a,e)},getTypeClass:function(t){if(!t)return"";var a=t.toLowerCase();return a.includes("open_long")||a.includes("add_long")?"long":a.includes("open_short")||a.includes("add_short")?"short":a.includes("close_long")?"close-long":a.includes("close_short")?"close-short":""},getSignalTypeColor:function(t){return t?(t=t.toLowerCase(),t.includes("open_long")||t.includes("add_long")?"green":t.includes("open_short")||t.includes("add_short")?"red":t.includes("close_long")?"orange":t.includes("close_short")?"purple":"blue"):"default"},getSignalTypeText:function(t){if(!t)return"-";var a={open_long:this.$t("dashboard.signalType.openLong"),open_short:this.$t("dashboard.signalType.openShort"),close_long:this.$t("dashboard.signalType.closeLong"),close_short:this.$t("dashboard.signalType.closeShort"),add_long:this.$t("dashboard.signalType.addLong"),add_short:this.$t("dashboard.signalType.addShort")};return a[t.toLowerCase()]||t.toUpperCase()},getStatusColor:function(t){var a={pending:"orange",processing:"blue",completed:"green",failed:"red",cancelled:"default"};return a[t]||"default"},getStatusText:function(t){if(!t)return"-";var a={pending:this.$t("dashboard.status.pending"),processing:this.$t("dashboard.status.processing"),completed:this.$t("dashboard.status.completed"),failed:this.$t("dashboard.status.failed"),cancelled:this.$t("dashboard.status.cancelled")};return a[t.toLowerCase()]||t.toUpperCase()},getNotifyIconType:function(t){var a=String(t||"").trim().toLowerCase(),e={browser:"bell",webhook:"link",discord:"comment",telegram:"message",tg:"message",tele:"message",email:"mail",phone:"phone"};return e[a]||"notification"},getExchangeTagColor:function(t){var a=String(t||"").trim().toLowerCase(),e={binance:"gold",okx:"purple",bitget:"cyan",signal:"geekblue"};return e[a]||"blue"},formatNumber:function(t){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return void 0===t||null===t?"0.00":Number(t).toLocaleString("en-US",{minimumFractionDigits:a,maximumFractionDigits:a})},formatProfitValue:function(t,a){if(null===t||void 0===t)return"--";var e=parseFloat(t),s=["open_long","open_short","add_long","add_short"];if(0===e&&a&&s.includes(a.type))return"--";if(Math.abs(e)<1e-6)return a&&s.includes(a.type)?"--":"$0.00";var r=e>=0?"+":"";return"".concat(r,"$").concat(this.formatNumber(e))},formatCompactNumber:function(t){if(void 0===t||null===t)return"0";var a=Math.abs(t);return a>=1e6?(t/1e6).toFixed(1)+"M":a>=1e3?(t/1e3).toFixed(1)+"k":a>=100?Math.round(t):t.toFixed(0)},prevMonth:function(){this.currentCalendarIndex0&&this.currentCalendarIndex--},getDayProfit:function(t){var a=this.currentCalendarMonth;if(!a||!a.days)return null;var e=String(t).padStart(2,"0");return void 0!==a.days[e]?a.days[e]:null},getDayClass:function(t){var a=this.getDayProfit(t);return null===a?"no-data":a>0?"profit":a<0?"loss":"zero"},formatTime:function(t){if(!t)return"-";try{var a;if("string"===typeof t&&t.includes("-")&&t.includes(":"))a=new Date(t);else{if(!("number"===typeof t||"string"===typeof t&&/^\d+$/.test(t)))return"-";var e="string"===typeof t?parseInt(t,10):t,s=e<1e12?1e3*e:e;a=new Date(s)}return isNaN(a.getTime())?"-":a.toLocaleString()}catch(r){return"-"}},initCharts:function(){this.initPieChart(),this.initDrawdownChart(),this.initHourlyChart()},initPieChart:function(){var t=this,a=this.$refs.pieChart;if(a){this.pieChart=c.Ts(a);var e=Array.isArray(this.summary.strategy_stats)?this.summary.strategy_stats:[],s=Array.isArray(this.summary.strategy_pnl_chart)?this.summary.strategy_pnl_chart:[],r=[];r=e.length>0?e.map(function(t){var a=t&&t.strategy_name?String(t.strategy_name):"-",e=Number(t&&t.total_pnl?t.total_pnl:0),s=Number(t&&t.total_trades?t.total_trades:0),r=0!==e?Math.abs(e):s;return{name:a,value:r,signedValue:e,trades:s}}).filter(function(t){return t.value>0}):s.map(function(t){var a=t&&t.name?String(t.name):"-",e=Number(t&&t.value?t.value:0);return{name:a,value:Math.abs(e),signedValue:e}}).filter(function(t){return t.value>0});var n=this.isDarkTheme,i=n?"#9ca3af":"#6b7280",o=[new c.fA.W4(0,0,1,1,[{offset:0,color:"#3b82f6"},{offset:1,color:"#1d4ed8"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#8b5cf6"},{offset:1,color:"#6d28d9"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#10b981"},{offset:1,color:"#059669"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#f59e0b"},{offset:1,color:"#d97706"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#ec4899"},{offset:1,color:"#be185d"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#06b6d4"},{offset:1,color:"#0891b2"}])],l={backgroundColor:"transparent",tooltip:{trigger:"item",backgroundColor:n?"rgba(17, 24, 39, 0.95)":"rgba(255, 255, 255, 0.95)",borderColor:n?"#374151":"#e5e7eb",textStyle:{color:n?"#f3f4f6":"#1f2937"},formatter:function(a){var e=a&&a.data&&"number"===typeof a.data.signedValue?a.data.signedValue:0,s=(e>=0?"+":"")+t.formatNumber(e,2),r=e>=0?"#10b981":"#ef4444";return'\n

\n
'.concat(a.name,'
\n
占比 ').concat(a.percent,'%
\n
PNL $').concat(s,"
\n
\n ")}},legend:{bottom:10,left:"center",itemWidth:12,itemHeight:12,itemGap:16,textStyle:{color:i,fontSize:11}},color:o,series:[{name:"策略分布",type:"pie",radius:["50%","75%"],center:["50%","45%"],avoidLabelOverlap:!1,itemStyle:{borderRadius:6,borderColor:n?"#1f2937":"#ffffff",borderWidth:3},label:{show:!1},emphasis:{label:{show:!0,fontSize:14,fontWeight:"bold",color:n?"#f3f4f6":"#1f2937"},scaleSize:8},labelLine:{show:!1},data:r.length>0?r:[{value:1,name:this.$t("dashboard.noData"),signedValue:0}]}]};this.pieChart.setOption(l)}},initDrawdownChart:function(){var t=this,a=this.$refs.drawdownChart;if(a){this.drawdownChart=c.Ts(a);var e,s=(this.summary.daily_pnl_chart||[]).map(function(t){return t.date}),r=(this.summary.daily_pnl_chart||[]).map(function(t){return Number(t.profit||0)}),n=[],i=0,l=(0,o.A)(r);try{for(l.s();!(e=l.n()).done;){var d=e.value;i+=Number(d||0),n.push(i)}}catch(y){l.e(y)}finally{l.f()}var u=-1/0,p=0,h=0,f=n.map(function(t,a){u=Math.max(u,t);var e=Number((t-u).toFixed(2));return e\n
').concat(s,'
\n
\n \n \n ').concat(t.$t("dashboard.drawdown")||"Drawdown",'\n \n -$').concat(n,'\n
\n
\n
\n
\n \n ')}},grid:{left:55,right:20,bottom:35,top:20,containLabel:!1},xAxis:{type:"category",data:s,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:g,fontSize:10,formatter:function(t){return t.slice(5)}}},yAxis:{type:"value",axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:g,fontSize:10,formatter:function(t){return Math.abs(t)>=1e3?"-$"+(Math.abs(t)/1e3).toFixed(1)+"k":0===t?"0":"-$"+Math.abs(t)}},splitLine:{lineStyle:{color:v,type:[4,4]}},max:0},series:[{name:this.$t("dashboard.drawdown")||"Drawdown",type:"line",data:f,smooth:.3,showSymbol:!1,lineStyle:{width:2.5,color:new c.fA.W4(0,0,1,0,[{offset:0,color:"#ef4444"},{offset:.5,color:"#f87171"},{offset:1,color:"#fca5a5"}]),shadowColor:"rgba(239, 68, 68, 0.4)",shadowBlur:8,shadowOffsetY:4},areaStyle:{color:new c.fA.W4(0,0,0,1,[{offset:0,color:m?"rgba(239, 68, 68, 0.4)":"rgba(239, 68, 68, 0.25)"},{offset:.5,color:m?"rgba(248, 113, 113, 0.15)":"rgba(248, 113, 113, 0.1)"},{offset:1,color:"transparent"}])},markPoint:p<0?{symbol:"pin",symbolSize:45,itemStyle:{color:new c.fA.W4(0,0,0,1,[{offset:0,color:"#f87171"},{offset:1,color:"#dc2626"}]),shadowColor:"rgba(239, 68, 68, 0.5)",shadowBlur:10},label:{show:!0,color:"#fff",fontSize:10,fontWeight:"bold",formatter:function(){return t.$t("dashboard.label.maxDrawdownPoint")||"MAX"}},data:[{name:this.$t("dashboard.maxDrawdown")||"Max Drawdown",coord:[h,p]}]}:void 0,markLine:{silent:!0,symbol:"none",lineStyle:{color:m?"#52525b":"#a1a1aa",type:"dashed",width:1},data:[{yAxis:0}],label:{show:!1}}}]};this.drawdownChart.setOption(b)}},initHourlyChart:function(){var t=this,a=this.$refs.hourlyChart;if(a){this.hourlyChart=c.Ts(a);var e=this.summary.hourly_distribution||[],s=e.map(function(t){return"".concat(String(t.hour).padStart(2,"0"),":00")}),r=e.map(function(t){return t.count||0}),n=e.map(function(t){return t.profit||0}),i=this.isDarkTheme,l=i?"#9ca3af":"#6b7280",d=i?"rgba(75, 85, 99, 0.3)":"rgba(229, 231, 235, 0.8)",u={backgroundColor:"transparent",tooltip:{trigger:"axis",backgroundColor:i?"rgba(17, 24, 39, 0.95)":"rgba(255, 255, 255, 0.95)",borderColor:i?"#374151":"#e5e7eb",textStyle:{color:i?"#f3f4f6":"#1f2937"},formatter:function(a){var e,s=Array.isArray(a)?a:[],r=s[0]&&s[0].axisValue?s[0].axisValue:"",n=0,d=0,c=t.$t("dashboard.tradeCount")||"Trade Count",u=t.$t("dashboard.profit")||"Profit",p=t.$t("dashboard.unit.trades")||"",h=(0,o.A)(s);try{for(h.s();!(e=h.n()).done;){var f=e.value;f.seriesName===c&&(n=f.data||0),f.seriesName===u&&(d=f.data||0)}}catch(v){h.e(v)}finally{h.f()}var m=d>=0?"#10b981":"#ef4444",g=(d>=0?"+":"")+t.formatNumber(d,2);return'\n
\n
'.concat(r,'
\n
').concat(c,' ').concat(n," ").concat(p,'
\n
').concat(u,' $').concat(g,"
\n
\n ")}},grid:{left:50,right:20,bottom:30,top:10,containLabel:!1},xAxis:{type:"category",data:s,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:l,fontSize:10,interval:3}},yAxis:{type:"value",axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:l,fontSize:10},splitLine:{lineStyle:{color:d,type:"dashed"}}},series:[{name:this.$t("dashboard.tradeCount")||"Trade Count",type:"bar",data:r,barMaxWidth:16,itemStyle:{borderRadius:[3,3,0,0],color:new c.fA.W4(0,0,0,1,[{offset:0,color:"#60a5fa"},{offset:1,color:"#3b82f6"}])}},{name:this.$t("dashboard.profit")||"Profit",type:"line",data:n,smooth:!0,showSymbol:!1,lineStyle:{width:2,color:"#a855f7"}}]};this.hourlyChart.setOption(u)}},handleResize:function(){this.pieChart&&this.pieChart.resize(),this.drawdownChart&&this.drawdownChart.resize(),this.hourlyChart&&this.hourlyChart.resize()}}},v=g,b=e(845),y=(0,b.A)(v,s,r,!1,null,"16dc1b35",null),_=y.exports}}]); \ No newline at end of file diff --git a/frontend/dist/js/734-legacy.1e8a348d.js b/frontend/dist/js/734-legacy.1e8a348d.js new file mode 100644 index 0000000..bad0ff4 --- /dev/null +++ b/frontend/dist/js/734-legacy.1e8a348d.js @@ -0,0 +1,18 @@ +(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[734],{11485:function(t,e,i){"use strict";i.r(e),i.d(e,{default:function(){return ua}});i(52675),i(89463),i(62010),i(9868);var n=function(){var t=this,e=t._self._c;return e("div",{staticClass:"chart-container",class:{"theme-dark":t.isDarkTheme}},[e("div",{staticClass:"chart-header"},[e("div",{staticClass:"header-top"},[e("div",{staticClass:"header-left"},[e("div",{staticClass:"search-section"},[e("a-select",{staticClass:"symbol-select",attrs:{"show-search":"",placeholder:t.$t("dashboard.indicator.selectSymbol"),dropdownClassName:"dark-dropdown","filter-option":t.filterSymbolOption,"not-found-content":null,open:t.symbolSearchOpen},on:{search:t.handleSymbolSearch,change:t.handleSymbolSelect,dropdownVisibleChange:t.handleDropdownVisibleChange},model:{value:t.searchSymbol,callback:function(e){t.searchSymbol=e},expression:"searchSymbol"}},[e("a-icon",{staticStyle:{color:"#999"},attrs:{slot:"suffixIcon",type:"search"},slot:"suffixIcon"}),t._l(t.symbolSuggestions,function(i){return e("a-select-option",{key:i.value,attrs:{value:i.value}},[e("div",{staticClass:"symbol-option"},[e("a-tag",{staticStyle:{"margin-right":"8px","margin-bottom":"0"},attrs:{color:t.getMarketColor(i.market)}},[t._v(" "+t._s(t.getMarketName(i.market))+" ")]),e("span",{staticClass:"symbol-name"},[t._v(t._s(i.symbol))]),i.name?e("span",{staticClass:"symbol-name-extra"},[t._v(t._s(i.name))]):t._e()],1)])}),e("a-select-option",{key:"add-stock-option",staticClass:"add-stock-option",attrs:{value:"__add_stock_option__"}},[e("div",{staticStyle:{width:"100%","text-align":"center",padding:"4px 0",color:"#1890ff",cursor:"pointer"}},[e("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"plus"}}),e("span",[t._v(t._s(t.$t("dashboard.analysis.watchlist.add")))])],1)])],2)],1),e("div",{staticClass:"timeframe-group"},t._l(["1m","5m","15m","30m","1H","4H","1D","1W"],function(i){return e("div",{key:i,staticClass:"timeframe-item",class:{active:t.timeframe===i},on:{click:function(e){return t.setTimeframe(i)}}},[t._v(" "+t._s(i)+" ")])}),0)]),t.currentSymbol?e("div",{staticClass:"current-symbol"},[e("div",{staticClass:"symbol-info"},[e("span",{staticClass:"symbol-label"},[t._v(t._s(t.currentSymbol))]),e("span",{staticClass:"market-tag"},[t._v(t._s(t.currentMarket))])]),e("div",{staticClass:"price-info",class:t.priceChangeClass},[e("span",{staticClass:"symbol-price"},[t._v(t._s(t.currentPrice))]),e("span",{staticClass:"symbol-change"},[t._v(" "+t._s(t.priceChange>0?"+":"")+t._s(t.priceChange.toFixed(2))+"% ")])]),t.isCryptoMarket?e("a-button",{staticClass:"qt-header-btn",attrs:{size:"small"},on:{click:t.openQuickTrade}},[e("a-icon",{attrs:{type:"thunderbolt",theme:"filled"}}),t._v(" "+t._s(t.$t("quickTrade.openPanel"))+" ")],1):t._e()],1):t._e()])]),e("div",{staticClass:"chart-content"},[e("div",{staticClass:"chart-main-row"},[t.currentSymbol?e("div",{staticClass:"mobile-symbol-price"},[e("div",{staticClass:"mobile-symbol-info"},[e("span",{staticClass:"mobile-market-tag"},[t._v(t._s(t.currentMarket))]),e("span",[t._v("-")]),e("span",{staticClass:"mobile-symbol-label"},[t._v(t._s(t.currentSymbol))])]),e("div",{staticClass:"mobile-price-info",class:t.priceChangeClass},[e("span",{staticClass:"mobile-symbol-price"},[t._v(t._s(t.currentPrice))]),e("span",{staticClass:"mobile-symbol-change"},[t._v(" "+t._s(t.priceChange>0?"+":"")+t._s(t.priceChange.toFixed(2))+"% ")])])]):t._e(),e("kline-chart",{ref:"klineChart",attrs:{symbol:t.currentSymbol,market:t.currentMarket,timeframe:t.timeframe,theme:t.chartTheme,activeIndicators:t.activeIndicators,realtimeEnabled:t.realtimeEnabled},on:{"price-change":t.handlePriceChange,retry:t.handleChartRetry,"indicator-toggle":t.handleIndicatorToggle}}),e("div",{staticClass:"chart-right"},[e("div",{staticClass:"indicators-panel"},[e("div",{staticClass:"panel-header"},[e("span",[t._v(t._s(t.$t("dashboard.indicator.panel.title")))]),e("div",{staticStyle:{display:"flex","align-items":"center","margin-left":"auto",gap:"8px"}},[t.isMobile?e("a-button",{staticClass:"mobile-header-create-btn",attrs:{type:"primary",size:"small",icon:"plus"},on:{click:t.handleCreateIndicator}},[t._v(" "+t._s(t.$t("dashboard.indicator.create"))+" ")]):t._e(),e("a-tooltip",{attrs:{title:t.realtimeEnabled?t.$t("dashboard.indicator.panel.realtimeOn"):t.$t("dashboard.indicator.panel.realtimeOff")}},[e("a-button",{staticClass:"realtime-toggle-btn",class:{active:t.realtimeEnabled},attrs:{type:"text"},on:{click:t.toggleRealtime}},[e("a-icon",{attrs:{type:t.realtimeEnabled?"sync":"pause-circle",spin:t.realtimeEnabled}})],1)],1)],1)]),e("div",{staticClass:"panel-body"},[t.isMobile?[e("div",{staticClass:"mobile-tab-content"},[e("div",{staticClass:"section-content custom-scrollbar"},[t._l(t.customIndicators,function(i){return e("div",{key:"custom-"+i.id,class:["indicator-card",{"indicator-active":t.isIndicatorActive("custom-"+i.id)}],on:{click:function(e){return t.toggleIndicator(i,"custom")}}},[e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-header"},[e("span",{staticClass:"card-name"},[t._v(t._s(i.name))]),e("div",{staticClass:"card-actions"},[e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.action.edit")}},[e("a-icon",{staticClass:"action-icon edit-icon",attrs:{type:"edit"},on:{click:function(e){return e.stopPropagation(),t.handleEditIndicator(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.action.delete")}},[e("a-icon",{staticClass:"action-icon delete-icon",attrs:{type:"delete"},on:{click:function(e){return e.stopPropagation(),t.handleDeleteIndicator(i)}}})],1),e("a-tooltip",{attrs:{title:t.isIndicatorActive("custom-"+i.id)?t.$t("dashboard.indicator.action.stop"):t.$t("dashboard.indicator.action.start")}},[e("a-icon",{class:["action-icon","toggle-icon",{active:t.isIndicatorActive("custom-"+i.id)}],attrs:{type:t.isIndicatorActive("custom-"+i.id)?"pause-circle":"play-circle"},on:{click:function(e){return e.stopPropagation(),t.toggleIndicator(i,"custom")}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.title")}},[e("a-icon",{staticClass:"action-icon backtest-icon",attrs:{type:"experiment"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktest(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.historyTitle")}},[e("a-icon",{staticClass:"action-icon backtest-history-icon",attrs:{type:"clock-circle"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktestHistory(i)}}})],1),e("a-tooltip",{attrs:{title:i.publish_to_community?t.$t("dashboard.indicator.action.unpublish"):t.$t("dashboard.indicator.action.publish")}},[e("a-icon",{class:["action-icon","publish-icon",{published:i.publish_to_community}],attrs:{type:i.publish_to_community?"cloud":"cloud-upload"},on:{click:function(e){return e.stopPropagation(),t.handlePublishIndicator(i)}}})],1)],1)]),e("span",{staticClass:"card-desc"},[t._v(t._s(i.description||""))])])])}),0===t.customIndicators.length?e("div",{staticClass:"empty-indicators"},[e("a-icon",{attrs:{type:"info-circle"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.empty")))])],1):t._e()],2)])]:[e("div",{staticClass:"indicator-section",class:{"section-empty":0===t.customIndicators.length}},[e("div",{staticClass:"section-label"},[e("div",{staticClass:"section-label-left",on:{click:t.toggleCustomSection}},[e("a-icon",{staticClass:"collapse-icon",attrs:{type:t.customSectionCollapsed?"right":"down"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.section.myCreated"))+" ("+t._s(t.customIndicators.length)+")")])],1),e("a-button",{staticClass:"create-indicator-btn",attrs:{type:"primary",size:"small",icon:"plus"},on:{click:function(e){return e.stopPropagation(),t.handleCreateIndicator.apply(null,arguments)}}},[t._v(" "+t._s(t.$t("dashboard.indicator.create"))+" ")])],1),e("div",{directives:[{name:"show",rawName:"v-show",value:!t.customSectionCollapsed,expression:"!customSectionCollapsed"}],staticClass:"section-content custom-scrollbar"},[t._l(t.customIndicators,function(i){return e("div",{key:"custom-"+i.id,class:["indicator-card",{"indicator-active":t.isIndicatorActive("custom-"+i.id)}],on:{click:function(e){return t.toggleIndicator(i,"custom")}}},[e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-header"},[e("span",{staticClass:"card-name"},[t._v(t._s(i.name))]),e("div",{staticClass:"card-actions"},[e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.action.edit")}},[e("a-icon",{staticClass:"action-icon edit-icon",attrs:{type:"edit"},on:{click:function(e){return e.stopPropagation(),t.handleEditIndicator(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.action.delete")}},[e("a-icon",{staticClass:"action-icon delete-icon",attrs:{type:"delete"},on:{click:function(e){return e.stopPropagation(),t.handleDeleteIndicator(i)}}})],1),e("a-tooltip",{attrs:{title:t.isIndicatorActive("custom-"+i.id)?t.$t("dashboard.indicator.action.stop"):t.$t("dashboard.indicator.action.start")}},[e("a-icon",{class:["action-icon","toggle-icon",{active:t.isIndicatorActive("custom-"+i.id)}],attrs:{type:t.isIndicatorActive("custom-"+i.id)?"pause-circle":"play-circle"},on:{click:function(e){return e.stopPropagation(),t.toggleIndicator(i,"custom")}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.title")}},[e("a-icon",{staticClass:"action-icon backtest-icon",attrs:{type:"experiment"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktest(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.historyTitle")}},[e("a-icon",{staticClass:"action-icon backtest-history-icon",attrs:{type:"clock-circle"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktestHistory(i)}}})],1),e("a-tooltip",{attrs:{title:i.publish_to_community?t.$t("dashboard.indicator.action.unpublish"):t.$t("dashboard.indicator.action.publish")}},[e("a-icon",{class:["action-icon","publish-icon",{published:i.publish_to_community}],attrs:{type:i.publish_to_community?"cloud":"cloud-upload"},on:{click:function(e){return e.stopPropagation(),t.handlePublishIndicator(i)}}})],1)],1)]),e("span",{staticClass:"card-desc"},[t._v(t._s(i.description||""))])])])}),0===t.customIndicators.length?e("div",{staticClass:"empty-indicators"},[e("a-icon",{attrs:{type:"info-circle"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.empty")))])],1):t._e()],2)]),e("div",{staticClass:"indicator-section",class:{"section-empty":0===t.purchasedIndicators.length}},[e("div",{staticClass:"section-label"},[e("div",{staticClass:"section-label-left",on:{click:function(e){t.purchasedSectionCollapsed=!t.purchasedSectionCollapsed}}},[e("a-icon",{staticClass:"collapse-icon",attrs:{type:t.purchasedSectionCollapsed?"right":"down"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.section.purchased"))+" ("+t._s(t.purchasedIndicators.length)+")")])],1),e("a-button",{staticClass:"buy-indicator-btn",attrs:{type:"link",size:"small",icon:"shop"},on:{click:function(e){return e.stopPropagation(),t.goToIndicatorMarket.apply(null,arguments)}}},[t._v(" "+t._s(t.$t("menu.dashboard.community"))+" ")])],1),e("div",{directives:[{name:"show",rawName:"v-show",value:!t.purchasedSectionCollapsed,expression:"!purchasedSectionCollapsed"}],staticClass:"section-content custom-scrollbar"},[t._l(t.purchasedIndicators,function(i){return e("div",{key:"purchased-"+i.id,class:["indicator-card","purchased-indicator",{"indicator-active":t.isIndicatorActive("purchased-"+i.id)}],on:{click:function(e){return t.toggleIndicator(i,"purchased")}}},[e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-header"},[e("span",{staticClass:"card-name"},[e("a-icon",{staticClass:"purchased-icon",attrs:{type:"shopping"}}),t._v(" "+t._s(i.name)+" ")],1),e("div",{staticClass:"card-actions"},[e("a-tooltip",{attrs:{title:t.isIndicatorActive("purchased-"+i.id)?t.$t("dashboard.indicator.action.stop"):t.$t("dashboard.indicator.action.start")}},[e("a-icon",{class:["action-icon","toggle-icon",{active:t.isIndicatorActive("purchased-"+i.id)}],attrs:{type:t.isIndicatorActive("purchased-"+i.id)?"pause-circle":"play-circle"},on:{click:function(e){return e.stopPropagation(),t.toggleIndicator(i,"purchased")}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.title")}},[e("a-icon",{staticClass:"action-icon backtest-icon",attrs:{type:"experiment"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktest(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.historyTitle")}},[e("a-icon",{staticClass:"action-icon backtest-history-icon",attrs:{type:"clock-circle"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktestHistory(i)}}})],1)],1)]),e("span",{staticClass:"card-desc"},[t._v(t._s(i.description||""))])])])}),0===t.purchasedIndicators.length?e("div",{staticClass:"empty-indicators"},[e("a-icon",{attrs:{type:"shopping"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.emptyPurchased")))])],1):t._e()],2)])]],2)])])],1),e("indicator-editor",{ref:"indicatorEditor",attrs:{visible:t.showIndicatorEditor,indicator:t.editingIndicator,userId:t.userId},on:{run:t.handleRunIndicator,save:t.handleSaveIndicator,cancel:function(e){t.showIndicatorEditor=!1,t.editingIndicator=null}}}),e("backtest-modal",{attrs:{visible:t.showBacktestModal,userId:t.userId,indicator:t.backtestIndicator,symbol:t.selectedSymbol,market:t.selectedMarket,timeframe:t.selectedTimeframe},on:{cancel:function(e){t.showBacktestModal=!1,t.backtestIndicator=null}}}),e("a-modal",{attrs:{visible:t.showParamsModal,title:t.$t("dashboard.indicator.paramsConfig.title"),confirmLoading:t.loadingParams,width:500,maskClosable:!1,keyboard:!1},on:{ok:t.confirmIndicatorParams,cancel:t.cancelIndicatorParams,afterClose:t.handleParamsModalAfterClose}},[t.pendingIndicator?e("div",{staticClass:"params-config-modal"},[e("div",{staticClass:"indicator-info"},[e("span",{staticClass:"indicator-name"},[t._v(t._s(t.pendingIndicator.name))])]),e("a-divider"),t.indicatorParams.length>0?e("div",{staticClass:"params-form"},t._l(t.indicatorParams,function(i){return e("div",{key:i.name,staticClass:"param-item"},[e("div",{staticClass:"param-header"},[e("label",{staticClass:"param-label"},[t._v(t._s(i.name))]),i.description?e("a-tooltip",{attrs:{title:i.description}},[e("a-icon",{staticStyle:{color:"#999","margin-left":"4px"},attrs:{type:"question-circle"}})],1):t._e()],1),"int"===i.type?e("a-input-number",{staticStyle:{width:"100%"},attrs:{precision:0},model:{value:t.indicatorParamValues[i.name],callback:function(e){t.$set(t.indicatorParamValues,i.name,e)},expression:"indicatorParamValues[param.name]"}}):"float"===i.type?e("a-input-number",{staticStyle:{width:"100%"},attrs:{precision:4},model:{value:t.indicatorParamValues[i.name],callback:function(e){t.$set(t.indicatorParamValues,i.name,e)},expression:"indicatorParamValues[param.name]"}}):"bool"===i.type?e("a-switch",{model:{value:t.indicatorParamValues[i.name],callback:function(e){t.$set(t.indicatorParamValues,i.name,e)},expression:"indicatorParamValues[param.name]"}}):e("a-input",{model:{value:t.indicatorParamValues[i.name],callback:function(e){t.$set(t.indicatorParamValues,i.name,e)},expression:"indicatorParamValues[param.name]"}})],1)}),0):e("a-empty",{attrs:{description:t.$t("dashboard.indicator.paramsConfig.noParams")}})],1):t._e()]),e("backtest-history-drawer",{attrs:{visible:t.showBacktestHistoryDrawer,userId:t.userId,indicatorId:t.backtestHistoryIndicator?t.backtestHistoryIndicator.id:null,symbol:t.selectedSymbol,market:t.selectedMarket,timeframe:t.selectedTimeframe,isMobile:t.isMobile},on:{cancel:function(e){t.showBacktestHistoryDrawer=!1,t.backtestHistoryIndicator=null},view:t.handleViewBacktestRun}}),e("backtest-run-viewer",{attrs:{visible:t.showBacktestRunViewer,run:t.selectedBacktestRun},on:{cancel:function(e){t.showBacktestRunViewer=!1,t.selectedBacktestRun=null}}}),e("a-modal",{attrs:{title:t.publishIndicator&&t.publishIndicator.publish_to_community?t.$t("dashboard.indicator.publish.editTitle"):t.$t("dashboard.indicator.publish.title"),visible:t.showPublishModal,confirmLoading:t.publishing,width:"500px",okText:t.publishIndicator&&t.publishIndicator.publish_to_community?t.$t("dashboard.indicator.publish.update"):t.$t("dashboard.indicator.publish.confirm"),cancelText:t.$t("common.cancel")},on:{ok:t.handleConfirmPublish,cancel:function(e){t.showPublishModal=!1,t.publishIndicator=null}}},[e("a-form-model",{ref:"publishForm",attrs:{model:t.publishForm,rules:t.publishRules,layout:"vertical"}},[e("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"info","show-icon":"",message:t.$t("dashboard.indicator.publish.hint")}}),e("a-form-model-item",{attrs:{label:t.$t("dashboard.indicator.publish.pricingType"),prop:"pricingType"}},[e("a-radio-group",{model:{value:t.publishPricingType,callback:function(e){t.publishPricingType=e},expression:"publishPricingType"}},[e("a-radio",{attrs:{value:"free"}},[t._v(t._s(t.$t("dashboard.indicator.publish.free")))]),e("a-radio",{attrs:{value:"paid"}},[t._v(t._s(t.$t("dashboard.indicator.publish.paid")))])],1)],1),"paid"===t.publishPricingType?e("a-form-model-item",{attrs:{label:t.$t("dashboard.indicator.publish.price"),prop:"price"}},[e("a-input-number",{staticStyle:{width:"200px"},attrs:{min:1,max:1e4,precision:0},model:{value:t.publishPrice,callback:function(e){t.publishPrice=e},expression:"publishPrice"}}),e("span",{staticStyle:{"margin-left":"8px"}},[t._v(t._s(t.$t("community.credits")))])],1):t._e(),"paid"===t.publishPricingType?e("a-form-model-item",{attrs:{label:t.$t("dashboard.indicator.publish.vipFree")}},[e("a-switch",{model:{value:t.publishVipFree,callback:function(e){t.publishVipFree=e},expression:"publishVipFree"}}),e("div",{staticStyle:{"margin-top":"6px",color:"rgba(0,0,0,0.45)","font-size":"12px"}},[t._v(" "+t._s(t.$t("dashboard.indicator.publish.vipFreeHint"))+" ")])],1):t._e(),e("a-form-model-item",{attrs:{label:t.$t("dashboard.indicator.publish.description"),prop:"description"}},[e("a-textarea",{attrs:{placeholder:t.$t("dashboard.indicator.publish.descriptionPlaceholder"),rows:4,maxLength:500},model:{value:t.publishDescription,callback:function(e){t.publishDescription=e},expression:"publishDescription"}})],1),t.publishIndicator&&t.publishIndicator.publish_to_community?e("div",{staticStyle:{"margin-top":"16px"}},[e("a-button",{attrs:{type:"danger",ghost:"",loading:t.unpublishing},on:{click:t.handleUnpublish}},[e("a-icon",{attrs:{type:"close-circle"}}),t._v(" "+t._s(t.$t("dashboard.indicator.publish.unpublish"))+" ")],1)],1):t._e()],1)],1),e("a-modal",{attrs:{title:t.$t("dashboard.analysis.modal.addStock.title"),visible:t.showAddStockModal,confirmLoading:t.addingStock,width:"600px",okText:t.$t("dashboard.analysis.modal.addStock.confirm"),cancelText:t.$t("dashboard.analysis.modal.addStock.cancel")},on:{ok:t.handleAddStock,cancel:t.handleCloseAddStockModal}},[e("div",{staticClass:"add-stock-modal-content"},[e("a-tabs",{staticClass:"market-tabs",on:{change:t.handleMarketTabChange},model:{value:t.selectedMarketTab,callback:function(e){t.selectedMarketTab=e},expression:"selectedMarketTab"}},t._l(t.marketTypes,function(i){return e("a-tab-pane",{key:i.value,attrs:{tab:t.$t(i.i18nKey||"dashboard.analysis.market.".concat(i.value))}})}),1),e("div",{staticClass:"symbol-search-section"},[e("a-input-search",{attrs:{placeholder:t.$t("dashboard.analysis.modal.addStock.searchOrInputPlaceholder"),loading:t.searchingSymbols,size:"large","allow-clear":""},on:{search:t.handleSearchOrInput,change:t.handleSymbolSearchInput},model:{value:t.symbolSearchKeyword,callback:function(e){t.symbolSearchKeyword=e},expression:"symbolSearchKeyword"}},[e("a-button",{attrs:{slot:"enterButton",type:"primary",icon:"search"},slot:"enterButton"},[t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.search"))+" ")])],1)],1),t.symbolSearchResults.length>0?e("div",{staticClass:"search-results-section"},[e("div",{staticClass:"section-title"},[e("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"search"}}),t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.searchResults"))+" ")],1),e("a-list",{staticClass:"symbol-list",attrs:{"data-source":t.symbolSearchResults,loading:t.searchingSymbols,size:"small"},scopedSlots:t._u([{key:"renderItem",fn:function(i){return e("a-list-item",{staticClass:"symbol-list-item",on:{click:function(e){return t.selectSymbol(i)}}},[e("a-list-item-meta",[e("template",{slot:"title"},[e("div",{staticClass:"symbol-item-content"},[e("span",{staticClass:"symbol-code"},[t._v(t._s(i.symbol))]),e("span",{staticClass:"symbol-name"},[t._v(t._s(i.name))]),i.exchange?e("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"blue"}},[t._v(" "+t._s(i.exchange)+" ")]):t._e()],1)])],2)],1)}}],null,!1,1074844145)})],1):t._e(),e("div",{staticClass:"hot-symbols-section"},[e("div",{staticClass:"section-title"},[e("a-icon",{staticStyle:{color:"#ff4d4f","margin-right":"4px"},attrs:{type:"fire"}}),t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.hotSymbols"))+" ")],1),e("a-spin",{attrs:{spinning:t.loadingHotSymbols}},[t.hotSymbols.length>0?e("a-list",{staticClass:"symbol-list",attrs:{"data-source":t.hotSymbols,size:"small"},scopedSlots:t._u([{key:"renderItem",fn:function(i){return e("a-list-item",{staticClass:"symbol-list-item",on:{click:function(e){return t.selectSymbol(i)}}},[e("a-list-item-meta",[e("template",{slot:"title"},[e("div",{staticClass:"symbol-item-content"},[e("span",{staticClass:"symbol-code"},[t._v(t._s(i.symbol))]),e("span",{staticClass:"symbol-name"},[t._v(t._s(i.name))]),i.exchange?e("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"orange"}},[t._v(" "+t._s(i.exchange)+" ")]):t._e()],1)])],2)],1)}}],null,!1,2177647935)}):e("a-empty",{attrs:{description:t.$t("dashboard.analysis.modal.addStock.noHotSymbols"),image:!1}})],1)],1),t.selectedSymbolForAdd?e("div",{staticClass:"selected-symbol-section"},[e("a-alert",{attrs:{message:t.$t("dashboard.analysis.modal.addStock.selectedSymbol"),type:"info","show-icon":"",closable:""},on:{close:function(e){t.selectedSymbolForAdd=null}}},[e("template",{slot:"description"},[e("div",{staticClass:"selected-symbol-info"},[e("a-tag",{staticStyle:{"margin-right":"8px"},attrs:{color:t.getMarketColor(t.selectedSymbolForAdd.market)}},[t._v(" "+t._s(t.$t("dashboard.analysis.market.".concat(t.selectedSymbolForAdd.market)))+" ")]),e("strong",[t._v(t._s(t.selectedSymbolForAdd.symbol))]),t.selectedSymbolForAdd.name?e("span",{staticStyle:{color:"#999","margin-left":"8px"}},[t._v(t._s(t.selectedSymbolForAdd.name))]):e("span",{staticStyle:{color:"#999","margin-left":"8px","font-style":"italic"}},[t._v(t._s(t.$t("dashboard.analysis.modal.addStock.nameWillBeFetched")))])],1)])],2)],1):t._e()],1)])],1),e("a-tooltip",{attrs:{title:t.$t("quickTrade.openPanel"),placement:"left"}},[!t.showQuickTrade&&t.currentSymbol&&t.isCryptoMarket?e("div",{staticClass:"qt-floating-btn",on:{click:t.openQuickTrade}},[e("a-icon",{attrs:{type:"thunderbolt",theme:"filled"}})],1):t._e()]),e("quick-trade-panel",{attrs:{visible:t.showQuickTrade,symbol:t.qtSymbol,"preset-side":t.qtSide,"preset-price":t.qtPrice,source:"indicator","market-type":"swap"},on:{close:function(e){t.showQuickTrade=!1},"order-success":t.onQuickTradeSuccess,"update:symbol":t.handleQuickTradeSymbolChange}})],1)},r=[],a=(i(62621),i(43898)),o=i(44735),s=i(15863),l=i(81127),c=i(56252),u=(i(6011),i(18787)),d=i(76338),h=(i(28706),i(2008),i(50113),i(48980),i(74423),i(48598),i(62062),i(54554),i(79432),i(26099),i(16034),i(38781),i(31415),i(21699),i(47764),i(42762),i(23500),i(62953),i(85471)),p=i(95353),f=i(75769),v=i(35038),g=i(505),m=function(){var t=this,e=t._self._c;return e("div",[e("a-modal",{staticClass:"indicator-editor-modal",style:t.isMobile?{top:0,paddingBottom:0}:{top:"2%"},attrs:{title:t.$t("dashboard.indicator.editor.title"),visible:t.visible,width:t.isMobile?"100%":"95vw",confirmLoading:t.saving,okText:t.$t("dashboard.indicator.editor.save"),cancelText:t.$t("dashboard.indicator.editor.cancel"),maskClosable:!1,centered:!1},on:{ok:t.handleSave,cancel:t.handleCancel,afterClose:t.handleAfterClose}},[e("div",{staticClass:"editor-content"},[e("a-row",{staticClass:"editor-layout",class:{"mobile-layout":t.isMobile},attrs:{gutter:16}},[e("a-col",{staticClass:"code-editor-column",attrs:{span:24,xs:24,sm:24,md:24}},[e("div",{staticClass:"code-section"},[e("div",{staticClass:"section-header"},[e("div",{staticClass:"header-left"},[e("span",{staticClass:"section-title"},[t._v(t._s(t.$t("dashboard.indicator.editor.code")))])]),e("div",{staticClass:"section-actions"},[e("a-button",{staticStyle:{padding:"0 8px",color:"#52c41a","font-weight":"bold"},attrs:{type:"link",size:"small",loading:t.verifying},on:{click:t.handleVerifyCode}},[e("a-icon",{attrs:{type:"check-circle"}}),t._v(" "+t._s(t.$t("dashboard.indicator.editor.verifyCode"))+" ")],1),e("a-button",{staticStyle:{padding:"0"},attrs:{type:"link",size:"small"},on:{click:t.goToDocs}},[e("a-icon",{attrs:{type:"book"}}),t._v(" "+t._s(t.$t("dashboard.indicator.editor.guide"))+" ")],1)],1)]),e("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"info","show-icon":"",message:t.$t("dashboard.indicator.boundary.message"),description:t.$t("dashboard.indicator.boundary.indicatorRule")}}),e("div",{staticClass:"code-mode-split"},[e("a-row",{staticClass:"code-mode-row",attrs:{gutter:16}},[e("a-col",{staticClass:"code-pane",attrs:{xs:24,sm:24,md:18}},[e("div",{ref:"codeEditorContainer",staticClass:"code-editor-container"})]),e("a-col",{staticClass:"ai-pane",attrs:{xs:24,sm:24,md:6}},[e("div",{staticClass:"ai-panel"},[e("div",{staticClass:"ai-panel-title"},[e("a-icon",{attrs:{type:"robot"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.editor.aiGenerate")))])],1),e("a-textarea",{attrs:{placeholder:t.$t("dashboard.indicator.editor.aiPromptPlaceholder"),rows:12,"auto-size":{minRows:12,maxRows:20}},model:{value:t.aiPrompt,callback:function(e){t.aiPrompt=e},expression:"aiPrompt"}}),e("a-button",{staticStyle:{"margin-top":"10px"},attrs:{type:"primary",block:"",loading:t.aiGenerating,size:"large"},on:{click:t.handleAIGenerate}},[t._v(" "+t._s(t.$t("dashboard.indicator.editor.aiGenerateBtn"))+" ")])],1)])],1)],1)],1)])],1)],1),e("div",{staticClass:"editor-footer",attrs:{slot:"footer"},slot:"footer"},[e("a-button",{on:{click:t.handleCancel}},[t._v(" "+t._s(t.$t("dashboard.indicator.editor.cancel"))+" ")]),e("a-button",{attrs:{type:"primary",loading:t.saving},on:{click:t.handleSave}},[t._v(" "+t._s(t.$t("dashboard.indicator.editor.save"))+" ")])],1)])],1)},y=[],b=i(57532),x=(i(2892),i(27495),i(99449),i(25440),i(11392),i(15237)),_=i.n(x),w=(i(74806),i(55218),i(97923),i(50436),i(74053)),C=i.n(w),S=i(75314),k={name:"IndicatorEditor",props:{visible:{type:Boolean,default:!1},indicator:{type:Object,default:null},userId:{type:Number,default:null}},data:function(){return{saving:!1,codeEditor:null,aiPrompt:"",aiGenerating:!1,verifying:!1,isMobile:!1}},computed:{},watch:{visible:function(t){var e=this;t?this.$nextTick(function(){setTimeout(function(){!e.codeEditor&&e.$refs.codeEditorContainer&&e.initCodeEditor(),e.initFormData()},200)}):this.codeEditor&&this.codeEditor.refresh()},indicator:{handler:function(t){var e=this;t&&this.visible&&this.$nextTick(function(){setTimeout(function(){e.initFormData()},100)})},deep:!0}},mounted:function(){var t=this;this.checkMobile(),window.addEventListener("resize",this.checkMobile),this.visible&&this.$nextTick(function(){setTimeout(function(){t.initCodeEditor()},100)})},beforeDestroy:function(){if(window.removeEventListener("resize",this.checkMobile),this.codeEditor)try{if("function"===typeof this.codeEditor.toTextArea)this.codeEditor.toTextArea();else if("function"===typeof this.codeEditor.getWrapperElement){var t=this.codeEditor.getWrapperElement();t&&t.parentNode&&t.parentNode.removeChild(t)}}catch(e){}finally{this.codeEditor=null}},methods:{getDefaultIndicatorCode:function(){return'#Demo Code:\n#my_indicator_name = "My Buy/Sell Indicator"\n#my_indicator_description = "Buy/Sell only; execution is normalized in backend."\n\n#df = df.copy()\n#sma = df["close"].rolling(14).mean()\n#buy = (df["close"] > sma) & (df["close"].shift(1) <= sma.shift(1))\n#sell = (df["close"] < sma) & (df["close"].shift(1) >= sma.shift(1))\n#df["buy"] = buy.fillna(False).astype(bool)\n#df["sell"] = sell.fillna(False).astype(bool)\n\n#buy_marks = [df["low"].iloc[i] * 0.995 if df["buy"].iloc[i] else None for i in range(len(df))]\n#sell_marks = [df["high"].iloc[i] * 1.005 if df["sell"].iloc[i] else None for i in range(len(df))]\n\n#output = {\n# "name": my_indicator_name,\n# "plots": [],\n# "signals": [\n# {"type": "buy", "text": "B", "data": buy_marks, "color": "#00E676"},\n# {"type": "sell", "text": "S", "data": sell_marks, "color": "#FF5252"}\n# ]\n#}\n'},checkMobile:function(){this.isMobile=window.innerWidth<=768},goToDocs:function(){window.open("https://github.com/brokermr810/QuantDinger/blob/main/docs/STRATEGY_DEV_GUIDE.md","_blank")},handleVerifyCode:function(){var t=this,e=this.codeEditor?this.codeEditor.getValue():"";e&&e.trim()?(this.verifying=!0,(0,f.Ay)({url:"/api/indicator/verifyCode",method:"post",data:{code:e}}).then(function(e){if(1===e.code){var i=e.data||{};t.$message.success("".concat(t.$t("dashboard.indicator.editor.verifyCodeSuccess")," (").concat(i.plots_count||0," plots, ").concat(i.signals_count||0," signals)"))}else{var n=e.data||{};t.$error({title:t.$t("dashboard.indicator.editor.verifyCodeFailed"),width:600,content:function(t){return t("div",[t("p",{style:{fontWeight:"bold",color:"#ff4d4f"}},e.msg),n.details?t("pre",{style:{background:"#f5f5f5",padding:"8px",overflow:"auto",maxHeight:"300px",marginTop:"8px",fontSize:"12px",fontFamily:"monospace"}},n.details):null])}})}}).catch(function(e){t.$message.error("Request Failed: "+(e.message||"Unknown Error"))}).finally(function(){t.verifying=!1})):this.$message.warning(this.$t("dashboard.indicator.editor.verifyCodeEmpty"))},cleanMarkdownCodeBlocks:function(t){if(!t||"string"!==typeof t)return t;var e=t.trim(),i=/```/.test(e);return i?(e=e.replace(/^```[\w]*\s*\n?/i,""),e.startsWith("```")&&(e=e.replace(/^```\s*\n?/g,"")),e.endsWith("```")&&(e=e.replace(/\n?```\s*$/g,"")),e=e.replace(/^\s*```[\w]*\s*$/gm,""),e=e.replace(/^\s*```\s*$/gm,""),e=e.replace(/\n{3,}/g,"\n\n"),e=e.trim(),e):e},initFormData:function(){var t=this;if(this.visible){var e=this.indicator&&this.indicator.code||"";e&&String(e).trim()||(e=this.getDefaultIndicatorCode()),this.$nextTick(function(){setTimeout(function(){t.aiPrompt="",t.codeEditor&&(t.codeEditor.setValue(e),t.codeEditor.refresh())},50)})}},initCodeEditor:function(){var t=this;if(this.$refs.codeEditorContainer){if(this.codeEditor){try{if("function"===typeof this.codeEditor.toTextArea)this.codeEditor.toTextArea();else if("function"===typeof this.codeEditor.getWrapperElement){var e=this.codeEditor.getWrapperElement();e&&e.parentNode&&e.parentNode.removeChild(e)}}catch(i){}this.codeEditor=null}try{this.$refs.codeEditorContainer.innerHTML="",this.codeEditor=_()(this.$refs.codeEditorContainer,{value:function(){var e=t.indicator&&t.indicator.code||"";return e&&String(e).trim()?e:t.getDefaultIndicatorCode()}(),mode:"python",theme:"eclipse",lineNumbers:!0,lineWrapping:!0,indentUnit:4,indentWithTabs:!1,smartIndent:!0,matchBrackets:!0,autoCloseBrackets:!0,styleActiveLine:!0,foldGutter:!1,gutters:["CodeMirror-linenumbers"],tabSize:4,viewportMargin:1/0}),this.codeEditor.on("change",function(t){t.getValue()}),this.$nextTick(function(){t.codeEditor&&t.codeEditor.refresh()})}catch(n){}}},handleSave:function(){var t=this.codeEditor?this.codeEditor.getValue():"",e=t||"";e.trim()?(this.saving=!0,this.$emit("save",{id:this.indicator?this.indicator.id:0,code:e,userid:this.userId})):this.$message.warning(this.$t("dashboard.indicator.editor.codeRequired"))},handleCancel:function(){this.codeEditor&&this.codeEditor.setValue(""),this.$emit("cancel")},handleAfterClose:function(){var t=this;this.codeEditor&&this.$nextTick(function(){t.codeEditor&&t.codeEditor.refresh()}),this.aiPrompt=""},handleAIGenerate:function(){var t=this;return(0,c.A)((0,l.A)().m(function e(){var i,n,r,a,o,s,c,u,d,h,p,f,v,g,m,y,x,_,w,k,A,T,M,I,E;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.aiPrompt&&t.aiPrompt.trim()){e.n=1;break}return t.$message.warning(t.$t("dashboard.indicator.editor.aiPromptRequired")),e.a(2);case 1:return t.aiGenerating=!0,i="",t.codeEditor&&(i=t.codeEditor.getValue()||""),t.codeEditor&&(t.codeEditor.setValue("# AI generating...\n"),t.codeEditor.refresh()),n="",e.p=2,r="/api/indicator/aiGenerate",a=C().get(S.Xh),o={prompt:t.aiPrompt.trim()},i.trim()&&(o.existingCode=i.trim()),e.n=3,fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:a?"Bearer ".concat(a):"","Access-Token":a||"",Token:a||""},body:JSON.stringify(o),credentials:"include"});case 3:if(s=e.v,s.ok){e.n=5;break}return e.n=4,s.text().catch(function(){return""});case 4:throw c=e.v,new Error(c||"HTTP error! status: ".concat(s.status));case 5:if(s.body&&"function"===typeof s.body.getReader){e.n=6;break}throw new Error("AI 服务未返回可读取的流(response.body 不存在)");case 6:u=s.body.getReader(),d=new TextDecoder,h="";case 7:return e.n=8,u.read();case 8:if(p=e.v,f=p.done,v=p.value,!f){e.n=9;break}return e.a(3,21);case 9:h+=d.decode(v,{stream:!0}),g=h.split("\n\n"),h=g.pop()||"",m=(0,b.A)(g),e.p=10,m.s();case 11:if((y=m.n()).done){e.n=17;break}if(x=y.value,x.trim()&&x.startsWith("data: ")){e.n=12;break}return e.a(3,16);case 12:if(_=x.substring(6),"[DONE]"!==_){e.n=13;break}return e.a(3,17);case 13:if(e.p=13,w=JSON.parse(_),!w.error){e.n=14;break}throw new Error(w.error);case 14:w.content&&(n+=w.content,k=t.cleanMarkdownCodeBlocks(n),t.codeEditor&&(t.codeEditor.setValue(k),A=t.codeEditor.lineCount(),t.codeEditor.setCursor({line:A-1,ch:0}),t.codeEditor.refresh())),e.n=16;break;case 15:e.p=15,e.v;case 16:e.n=11;break;case 17:e.n=19;break;case 18:e.p=18,I=e.v,m.e(I);case 19:return e.p=19,m.f(),e.f(19);case 20:e.n=7;break;case 21:t.codeEditor&&n?(T=t.cleanMarkdownCodeBlocks(n),t.codeEditor.setValue(T),t.codeEditor.refresh(),t.$message.success(t.$t("dashboard.indicator.editor.aiGenerateSuccess"))):n||t.$message.warning("未生成任何代码,请尝试更详细的提示词"),e.n=23;break;case 22:e.p=22,E=e.v,t.$message.error(E.message||t.$t("dashboard.indicator.editor.aiGenerateError")),n&&t.codeEditor&&(M=t.cleanMarkdownCodeBlocks(n),t.codeEditor.setValue(M));case 23:return e.p=23,t.aiGenerating=!1,e.f(23);case 24:return e.a(2)}},e,null,[[13,15],[10,18,19,20],[2,22,23,24]])}))()}}},A=k,T=i(845),M=(0,T.A)(A,m,y,!1,null,"4fea1865",null),I=M.exports,E=function(){var t=this,e=t._self._c;return e("div",{staticClass:"chart-left",class:{"theme-dark":"dark"===t.chartTheme}},[e("div",{staticClass:"chart-wrapper"},[e("div",{staticClass:"drawing-toolbar"},[t._l(t.drawingTools,function(i){return e("a-tooltip",{key:i.name,attrs:{title:i.title,placement:"right"}},[e("div",{staticClass:"drawing-tool-btn",class:{active:t.activeDrawingTool===i.name},on:{click:function(e){return t.selectDrawingTool(i.name)}}},[e("a-icon",{attrs:{type:i.icon}})],1)])}),e("a-divider",{attrs:{type:"vertical"}}),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.drawing.clearAll"),placement:"right"}},[e("div",{staticClass:"drawing-tool-btn",on:{click:t.clearAllDrawings}},[e("a-icon",{attrs:{type:"delete"}})],1)])],2),e("div",{staticClass:"chart-content-area"},[e("div",{staticClass:"indicator-toolbar"},t._l(t.indicatorButtons,function(i){return e("div",{key:i.id,staticClass:"indicator-btn",class:{active:t.isIndicatorActive(i.id)},attrs:{title:i.name},on:{click:function(e){return t.toggleIndicator(i)}}},[t._v(" "+t._s(i.shortName)+" ")])}),0),e("div",{staticClass:"kline-chart-container",attrs:{id:"kline-chart-container"}})]),t.loading?e("div",{staticClass:"chart-overlay"},[e("a-spin",{attrs:{size:"large"}},[e("a-icon",{staticStyle:{"font-size":"24px",color:"#13c2c2"},attrs:{slot:"indicator",type:"loading",spin:""},slot:"indicator"})],1)],1):t._e(),t.error?e("div",{staticClass:"chart-overlay"},[e("div",{staticClass:"error-box"},[e("a-icon",{staticStyle:{"font-size":"24px",color:"#ef5350","margin-bottom":"10px"},attrs:{type:"warning"}}),e("span",[t._v(t._s(t.error))]),e("a-button",{staticStyle:{"margin-top":"12px"},attrs:{type:"primary",size:"small",ghost:""},on:{click:t.handleRetry}},[t._v(" "+t._s(t.$t("dashboard.indicator.retry"))+" ")])],1)]):t._e(),t.pyodideLoadFailed?e("div",{staticClass:"chart-overlay pyodide-warning"},[e("div",{staticClass:"warning-box"},[e("a-icon",{staticStyle:{"font-size":"32px",color:"#faad14","margin-bottom":"12px"},attrs:{type:"warning"}}),e("div",{staticClass:"warning-title"},[t._v(t._s(t.$t("dashboard.indicator.warning.pyodideLoadFailed")))]),e("div",{staticClass:"warning-desc"},[t._v(t._s(t.$t("dashboard.indicator.warning.pyodideLoadFailedDesc")))])],1)]):t._e(),t.symbol||t.loading||t.error||t.pyodideLoadFailed?t._e():e("div",{staticClass:"chart-overlay initial-hint"},[e("div",{staticClass:"hint-box"},[e("a-icon",{staticStyle:{"font-size":"48px",color:"#1890ff","margin-bottom":"16px"},attrs:{type:"line-chart"}}),e("div",{staticClass:"hint-title"},[t._v(t._s(t.$t("dashboard.indicator.hint.selectSymbol")))]),e("div",{staticClass:"hint-desc"},[t._v(t._s(t.$t("dashboard.indicator.hint.selectSymbolDesc")))])],1)])])])},D=[];i(2259);function P(t){if(null!=t){var e=t["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],i=0;if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length))return{next:function(){return t&&i>=t.length&&(t=void 0),{value:t&&t[i++],done:!t}}}}throw new TypeError((0,o.A)(t)+" is not iterable")}var L=i(26297),R=i(2403),F=(i(34782),i(26910),i(71761),function(t,e){return F=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i])},F(t,e)});function B(t,e){if("function"!==typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function i(){this.constructor=t}F(t,e),t.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}var N,O,z,W,V,$,H,K,Y,X=function(){return X=Object.assign||function(t){for(var e,i=1,n=arguments.length;i0&&r[r.length-1])&&(6===s[0]||2===s[0])){a=0;continue}if(3===s[0]&&(!r||s[1]>r[0]&&s[1]=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function q(t,e){var i="function"===typeof Symbol&&t[Symbol.iterator];if(!i)return t;var n,r,a=i.call(t),o=[];try{while((void 0===e||e-- >0)&&!(n=a.next()).done)o.push(n.value)}catch(s){r={error:s}}finally{try{n&&!n.done&&(i=a["return"])&&i.call(a)}finally{if(r)throw r.error}}return o}function Z(t,e,i){if(i||2===arguments.length)for(var n,r=0,a=e.length;r1e9)return"".concat(+(e/1e9).toFixed(3),"B");if(e>1e6)return"".concat(+(e/1e6).toFixed(3),"M");if(e>1e3)return"".concat(+(e/1e3).toFixed(3),"K")}return"".concat(t)}function zt(t,e){var i="".concat(t);if(0===e.length)return i;if(i.includes(".")){var n=i.split(".");return"".concat(n[0].replace(/(\d)(?=(\d{3})+$)/g,function(t){return"".concat(t).concat(e)}),".").concat(n[1])}return i.replace(/(\d)(?=(\d{3})+$)/g,function(t){return"".concat(t).concat(e)})}function Wt(t,e){var i="".concat(t),n=new RegExp("\\.0{"+e+",}[1-9][0-9]*$");if(n.test(i)){var r=i.split("."),a=r[r.length-1],o=a.match(/0*/);if(Mt(o)){var s=o[0].length;return r[r.length-1]=a.replace(/0*/,"0{".concat(s,"}")),r.join(".")}}return i}function Vt(t){var e,i,n;return null!==(n=null===(i=null===(e=t.ownerDocument)||void 0===e?void 0:e.defaultView)||void 0===i?void 0:i.devicePixelRatio)&&void 0!==n?n:1}function $t(t,e,i){return"".concat(null!==e&&void 0!==e?e:"normal"," ").concat(null!==t&&void 0!==t?t:12,"px ").concat(null!==i&&void 0!==i?i:"Helvetica Neue")}function Ht(t,e,i,n){if(!Mt(Dt)){var r=document.createElement("canvas"),a=Vt(r);Dt=r.getContext("2d"),Dt.scale(a,a)}return Dt.font=$t(e,i,n),Math.round(Dt.measureText(t).width)}(function(t){t["OnDataReady"]="onDataReady",t["OnZoom"]="onZoom",t["OnScroll"]="onScroll",t["OnVisibleRangeChange"]="onVisibleRangeChange",t["OnTooltipIconClick"]="onTooltipIconClick",t["OnCrosshairChange"]="onCrosshairChange",t["OnCandleBarClick"]="onCandleBarClick",t["OnPaneDrag"]="onPaneDrag"})(Pt||(Pt={}));var Kt,Yt,Xt=function(){function t(){this._callbacks=[]}return t.prototype.subscribe=function(t){var e,i=null!==(e=this._callbacks.indexOf(t))&&void 0!==e?e:-1;i<0&&this._callbacks.push(t)},t.prototype.unsubscribe=function(t){var e;if(kt(t)){var i=null!==(e=this._callbacks.indexOf(t))&&void 0!==e?e:-1;i>-1&&this._callbacks.splice(i,1)}else this._callbacks=[]},t.prototype.execute=function(t){this._callbacks.forEach(function(e){e(t)})},t.prototype.isEmpty=function(){return 0===this._callbacks.length},t}();function Ut(t,e,i,n,r){var a,o=e.result,s=e.figures,l=e.styles,c=Ft(l,"circles",n.circles),u=c.length,d=Ft(l,"bars",n.bars),h=d.length,p=Ft(l,"lines",n.lines),f=p.length,v=0,g=0,m=0,y=0;s.forEach(function(s){var l;switch(s.type){case"circle":y=v;var b=c[v%u];a=X(X({},b),{color:b.noChangeColor}),v++;break;case"bar":y=g;var x=d[g%h];a=X(X({},x),{color:x.noChangeColor}),g++;break;case"line":y=m,a=p[m%f],m++;break}if(Mt(a)){var _={prev:{kLineData:t[i-1],indicatorData:o[i-1]},current:{kLineData:t[i],indicatorData:o[i]},next:{kLineData:t[i+1],indicatorData:o[i+1]}},w=null===(l=s.styles)||void 0===l?void 0:l.call(s,_,e,n);r(s,X(X({},a),w),y)}})}(function(t){t["Init"]="init",t["Forward"]="forward",t["Backward"]="backward"})(Kt||(Kt={})),function(t){t["Normal"]="normal",t["Price"]="price",t["Volume"]="volume"}(Yt||(Yt={}));var Gt,jt=function(){function t(t){this.result=[],this._precisionFlag=!1;var e=t.name,i=t.shortName,n=t.series,r=t.calcParams,a=t.figures,o=t.precision,s=t.shouldOhlc,l=t.shouldFormatBigNumber,c=t.visible,u=t.zLevel,d=t.minValue,h=t.maxValue,p=t.styles,f=t.extendData,v=t.regenerateFigures,g=t.createTooltipDataSource,m=t.draw;this.name=e,this.shortName=null!==i&&void 0!==i?i:e,this.series=null!==n&&void 0!==n?n:Yt.Normal,this.precision=null!==o&&void 0!==o?o:4,this.calcParams=null!==r&&void 0!==r?r:[],this.figures=null!==a&&void 0!==a?a:[],this.shouldOhlc=null!==s&&void 0!==s&&s,this.shouldFormatBigNumber=null!==l&&void 0!==l&&l,this.visible=null===c||void 0===c||c,this.zLevel=null!==u&&void 0!==u?u:0,this.minValue=null!==d&&void 0!==d?d:null,this.maxValue=null!==h&&void 0!==h?h:null,this.styles=Ct(null!==p&&void 0!==p?p:{}),this.extendData=f,this.regenerateFigures=null!==v&&void 0!==v?v:null,this.createTooltipDataSource=null!==g&&void 0!==g?g:null,this.draw=null!==m&&void 0!==m?m:null}return t.prototype.setShortName=function(t){return this.shortName!==t&&(this.shortName=t,!0)},t.prototype.setSeries=function(t){return this.series!==t&&(this.series=t,!0)},t.prototype.setPrecision=function(t,e){var i=null!==e&&void 0!==e&&e,n=Math.floor(t);return!(!(n!==this.precision&&t>=0)||i&&(!i||this._precisionFlag))&&(this.precision=n,i||(this._precisionFlag=!0),!0)},t.prototype.setCalcParams=function(t){var e,i;return this.calcParams=t,this.figures=null!==(i=null===(e=this.regenerateFigures)||void 0===e?void 0:e.call(this,t))&&void 0!==i?i:this.figures,!0},t.prototype.setShouldOhlc=function(t){return this.shouldOhlc!==t&&(this.shouldOhlc=t,!0)},t.prototype.setShouldFormatBigNumber=function(t){return this.shouldFormatBigNumber!==t&&(this.shouldFormatBigNumber=t,!0)},t.prototype.setVisible=function(t){return this.visible!==t&&(this.visible=t,!0)},t.prototype.setZLevel=function(t){return this.zLevel!==t&&(this.zLevel=t,!0)},t.prototype.setStyles=function(t){return wt(this.styles,t),!0},t.prototype.setExtendData=function(t){return this.extendData!==t&&(this.extendData=t,!0)},t.prototype.setFigures=function(t){return this.figures!==t&&(this.figures=t,!0)},t.prototype.setMinValue=function(t){return this.minValue!==t&&(this.minValue=t,!0)},t.prototype.setMaxValue=function(t){return this.maxValue!==t&&(this.maxValue=t,!0)},t.prototype.setRegenerateFigures=function(t){return this.regenerateFigures!==t&&(this.regenerateFigures=t,!0)},t.prototype.setCreateTooltipDataSource=function(t){return this.createTooltipDataSource!==t&&(this.createTooltipDataSource=t,!0)},t.prototype.setDraw=function(t){return this.draw!==t&&(this.draw=t,!0)},t.prototype.calcIndicator=function(t){return U(this,void 0,void 0,function(){var e;return G(this,function(i){switch(i.label){case 0:return i.trys.push([0,2,,3]),[4,this.calc(t,this)];case 1:return e=i.sent(),this.result=e,[2,!0];case 2:return i.sent(),[2,!1];case 3:return[2]}})})},t.extend=function(e){var i=function(t){function i(){return t.call(this,e)||this}return B(i,t),i.prototype.calc=function(t,i){return e.calc(t,i)},i}(t);return i},t}();function qt(){return["mouseClickEvent","mouseDoubleClickEvent","mouseRightClickEvent","tapEvent","doubleTapEvent","mouseDownEvent","touchStartEvent","mouseMoveEvent","touchMoveEvent"]}(function(t){t["Normal"]="normal",t["WeakMagnet"]="weak_magnet",t["StrongMagnet"]="strong_magnet"})(Gt||(Gt={}));var Zt,Jt=1,Qt=-1,te="overlay_",ee="overlay_figure_",ie=function(){function t(t){this.currentStep=Jt,this.points=[],this._prevPressedPoint=null,this._prevPressedPoints=[];var e=t.mode,i=t.modeSensitivity,n=t.extendData,r=t.styles,a=t.name,o=t.totalStep,s=t.lock,l=t.visible,c=t.zLevel,u=t.needDefaultPointFigure,d=t.needDefaultXAxisFigure,h=t.needDefaultYAxisFigure,p=t.createPointFigures,f=t.createXAxisFigures,v=t.createYAxisFigures,g=t.performEventPressedMove,m=t.performEventMoveForDrawing,y=t.onDrawStart,b=t.onDrawing,x=t.onDrawEnd,_=t.onClick,w=t.onDoubleClick,C=t.onRightClick,S=t.onPressedMoveStart,k=t.onPressedMoving,A=t.onPressedMoveEnd,T=t.onMouseEnter,M=t.onMouseLeave,I=t.onRemoved,E=t.onSelected,D=t.onDeselected;this.name=a,this.totalStep=!Tt(o)||o<2?1:o,this.lock=null!==s&&void 0!==s&&s,this.visible=null===l||void 0===l||l,this.zLevel=null!==c&&void 0!==c?c:0,this.needDefaultPointFigure=null!==u&&void 0!==u&&u,this.needDefaultXAxisFigure=null!==d&&void 0!==d&&d,this.needDefaultYAxisFigure=null!==h&&void 0!==h&&h,this.mode=null!==e&&void 0!==e?e:Gt.Normal,this.modeSensitivity=null!==i&&void 0!==i?i:8,this.extendData=n,this.styles=Ct(null!==r&&void 0!==r?r:{}),this.createPointFigures=null!==p&&void 0!==p?p:null,this.createXAxisFigures=null!==f&&void 0!==f?f:null,this.createYAxisFigures=null!==v&&void 0!==v?v:null,this.performEventPressedMove=null!==g&&void 0!==g?g:null,this.performEventMoveForDrawing=null!==m&&void 0!==m?m:null,this.onDrawStart=null!==y&&void 0!==y?y:null,this.onDrawing=null!==b&&void 0!==b?b:null,this.onDrawEnd=null!==x&&void 0!==x?x:null,this.onClick=null!==_&&void 0!==_?_:null,this.onDoubleClick=null!==w&&void 0!==w?w:null,this.onRightClick=null!==C&&void 0!==C?C:null,this.onPressedMoveStart=null!==S&&void 0!==S?S:null,this.onPressedMoving=null!==k&&void 0!==k?k:null,this.onPressedMoveEnd=null!==A&&void 0!==A?A:null,this.onMouseEnter=null!==T&&void 0!==T?T:null,this.onMouseLeave=null!==M&&void 0!==M?M:null,this.onRemoved=null!==I&&void 0!==I?I:null,this.onSelected=null!==E&&void 0!==E?E:null,this.onDeselected=null!==D&&void 0!==D?D:null}return t.prototype.setId=function(t){return!Et(this.id)&&(this.id=t,!0)},t.prototype.setGroupId=function(t){return!Et(this.groupId)&&(this.groupId=t,!0)},t.prototype.setPaneId=function(t){this.paneId=t},t.prototype.setExtendData=function(t){return t!==this.extendData&&(this.extendData=t,!0)},t.prototype.setStyles=function(t){return wt(this.styles,t),!0},t.prototype.setPoints=function(t){if(t.length>0){var e=void 0;if(this.points=Z([],q(t),!1),t.length>=this.totalStep-1?(this.currentStep=Qt,e=this.totalStep-1):(this.currentStep=t.length+1,e=t.length),null!==this.performEventMoveForDrawing)for(var i=0;is?n=a:r=a,o<=2)break}return n}function fe(t){var e=Math.floor(ye(t)),i=be(e),n=t/i,r=0;return r=n<1.5?1:n<2.5?2:n<3.5?3:n<4.5?4:n<5.5?5:n<6.5?6:8,t=r*i,e>=-20?+t.toFixed(e<0?-e:0):t}function ve(t,e){null==e&&(e=10),e=Math.min(Math.max(0,e),20);var i=(+t).toFixed(e);return+i}function ge(t){var e=t.toString(),i=e.indexOf("e");if(i>0){var n=+e.slice(i+1);return n<0?-n:0}var r=e.indexOf(".");return r<0?0:e.length-1-r}function me(t,e,i){var n=[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER];return t.forEach(function(t){var r,a;n[0]=Math.max(null!==(r=t[e])&&void 0!==r?r:t,n[0]),n[1]=Math.min(null!==(a=t[i])&&void 0!==a?a:t,n[1])}),n}function ye(t){return Math.log(t)/Math.log(10)}function be(t){return Math.pow(10,t)}function xe(){return{from:0,to:0,realFrom:0,realTo:0}}var _e={MIN:1,MAX:50},we=8,Ce=80,Se=.88,ke=10,Ae=function(){function t(t){this._dateTimeFormat=this._buildDateTimeFormat(),this._zoomEnabled=!0,this._scrollEnabled=!0,this._totalBarSpace=0,this._barSpace=we,this._offsetRightDistance=Ce,this._startLastBarRightSideDiffBarCount=0,this._scrollLimitRole=0,this._minVisibleBarCount={left:2,right:2},this._maxOffsetDistance={left:50,right:50},this._visibleRange=xe(),this._chartStore=t,this._gapBarSpace=this._calcGapBarSpace(),this._lastBarRightSideDiffBarCount=this._offsetRightDistance/this._barSpace}return t.prototype._calcGapBarSpace=function(){var t;return this._barSpace>3?t=Math.floor(this._barSpace*Se):(t=Math.floor(this._barSpace),t===this._barSpace&&t--),t%2===0&&t--,t=Math.max(1,t),t},t.prototype.adjustVisibleRange=function(){var t,e,i,n,r=this._chartStore.getDataList(),a=r.length,o=this._totalBarSpace/this._barSpace;1===this._scrollLimitRole?(i=(this._totalBarSpace-this._maxOffsetDistance.right)/this._barSpace,n=(this._totalBarSpace-this._maxOffsetDistance.left)/this._barSpace):(i=this._minVisibleBarCount.left,n=this._minVisibleBarCount.right),i=Math.max(0,i),n=Math.max(0,n);var s=o-Math.min(i,a);this._lastBarRightSideDiffBarCount>s&&(this._lastBarRightSideDiffBarCount=s);var l=-a+Math.min(n,a);this._lastBarRightSideDiffBarCounta&&(c=a);var d=Math.round(c-o)-1;d<0&&(d=0);var h=this._lastBarRightSideDiffBarCount>0?Math.round(a+this._lastBarRightSideDiffBarCount-o)-1:d;if(this._visibleRange={from:d,to:c,realFrom:h,realTo:u},this._chartStore.getActionStore().execute(Pt.OnVisibleRangeChange,this._visibleRange),this._chartStore.adjustVisibleDataList(),0===d){var p=r[0];this._chartStore.executeLoadMoreCallback(null!==(t=null===p||void 0===p?void 0:p.timestamp)&&void 0!==t?t:null),this._chartStore.executeLoadDataCallback({type:Kt.Forward,data:null!==p&&void 0!==p?p:null})}c===a&&this._chartStore.executeLoadDataCallback({type:Kt.Backward,data:null!==(e=r[a-1])&&void 0!==e?e:null})},t.prototype.getDateTimeFormat=function(){return this._dateTimeFormat},t.prototype._buildDateTimeFormat=function(t){var e={hour12:!1,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"};Et(t)&&(e.timeZone=t);var i=null;try{i=new Intl.DateTimeFormat("en",e)}catch(n){bt("","","Timezone is error!!!")}return i},t.prototype.setTimezone=function(t){var e=this._buildDateTimeFormat(t);null!==e&&(this._dateTimeFormat=e)},t.prototype.getTimezone=function(){return this._dateTimeFormat.resolvedOptions().timeZone},t.prototype.getBarSpace=function(){return{bar:this._barSpace,halfBar:this._barSpace/2,gapBar:this._gapBarSpace,halfGapBar:Math.floor(this._gapBarSpace/2)}},t.prototype.setBarSpace=function(t,e){t<_e.MIN||t>_e.MAX||this._barSpace===t||(this._barSpace=t,this._gapBarSpace=this._calcGapBarSpace(),null===e||void 0===e||e(),this.adjustVisibleRange(),this._chartStore.getTooltipStore().recalculateCrosshair(!0),this._chartStore.getChart().adjustPaneViewport(!1,!0,!0,!0))},t.prototype.setTotalBarSpace=function(t){return this._totalBarSpace!==t&&(this._totalBarSpace=t,this.adjustVisibleRange(),this._chartStore.getTooltipStore().recalculateCrosshair(!0)),this},t.prototype.setOffsetRightDistance=function(t,e){return this._offsetRightDistance=1===this._scrollLimitRole?Math.min(this._maxOffsetDistance.right,t):t,this._lastBarRightSideDiffBarCount=this._offsetRightDistance/this._barSpace,null!==e&&void 0!==e&&e&&(this.adjustVisibleRange(),this._chartStore.getTooltipStore().recalculateCrosshair(!0),this._chartStore.getChart().adjustPaneViewport(!1,!0,!0,!0)),this},t.prototype.resetOffsetRightDistance=function(){this.setOffsetRightDistance(this._offsetRightDistance)},t.prototype.getInitialOffsetRightDistance=function(){return this._offsetRightDistance},t.prototype.getOffsetRightDistance=function(){return Math.max(0,this._lastBarRightSideDiffBarCount*this._barSpace)},t.prototype.getLastBarRightSideDiffBarCount=function(){return this._lastBarRightSideDiffBarCount},t.prototype.setLastBarRightSideDiffBarCount=function(t){return this._lastBarRightSideDiffBarCount=t,this},t.prototype.setMaxOffsetLeftDistance=function(t){return this._scrollLimitRole=1,this._maxOffsetDistance.left=t,this},t.prototype.setMaxOffsetRightDistance=function(t){return this._scrollLimitRole=1,this._maxOffsetDistance.right=t,this},t.prototype.setLeftMinVisibleBarCount=function(t){return this._scrollLimitRole=0,this._minVisibleBarCount.left=t,this},t.prototype.setRightMinVisibleBarCount=function(t){return this._scrollLimitRole=0,this._minVisibleBarCount.right=t,this},t.prototype.getVisibleRange=function(){return this._visibleRange},t.prototype.startScroll=function(){this._startLastBarRightSideDiffBarCount=this._lastBarRightSideDiffBarCount},t.prototype.scroll=function(t){if(this._scrollEnabled){var e=t/this._barSpace,i=this._lastBarRightSideDiffBarCount*this._barSpace;this._lastBarRightSideDiffBarCount=this._startLastBarRightSideDiffBarCount-e,this.adjustVisibleRange(),this._chartStore.getTooltipStore().recalculateCrosshair(!0),this._chartStore.getChart().adjustPaneViewport(!1,!0,!0,!0);var n=Math.round(i-this._lastBarRightSideDiffBarCount*this._barSpace);0!==n&&this._chartStore.getActionStore().execute(Pt.OnScroll,{distance:n})}},t.prototype.getDataByDataIndex=function(t){var e;return null!==(e=this._chartStore.getDataList()[t])&&void 0!==e?e:null},t.prototype.coordinateToFloatIndex=function(t){var e=this._chartStore.getDataList().length,i=(this._totalBarSpace-t)/this._barSpace,n=e+this._lastBarRightSideDiffBarCount-i;return Math.round(1e6*n)/1e6},t.prototype.dataIndexToTimestamp=function(t){var e,i=this.getDataByDataIndex(t);return null!==(e=null===i||void 0===i?void 0:i.timestamp)&&void 0!==e?e:null},t.prototype.timestampToDataIndex=function(t){var e=this._chartStore.getDataList();return 0===e.length?0:pe(e,"timestamp",t)},t.prototype.dataIndexToCoordinate=function(t){var e=this._chartStore.getDataList().length,i=e+this._lastBarRightSideDiffBarCount-t;return Math.floor(this._totalBarSpace-(i-.5)*this._barSpace)},t.prototype.coordinateToDataIndex=function(t){return Math.ceil(this.coordinateToFloatIndex(t))-1},t.prototype.zoom=function(t,e){var i,n=this;if(this._zoomEnabled){var r=null!==e&&void 0!==e?e:null;if(!Tt(null===r||void 0===r?void 0:r.x)){var a=this._chartStore.getTooltipStore().getCrosshair();r={x:null!==(i=null===a||void 0===a?void 0:a.x)&&void 0!==i?i:this._totalBarSpace/2}}var o=r.x,s=this.coordinateToFloatIndex(o),l=this._barSpace,c=this._barSpace+t*(this._barSpace/ke);this.setBarSpace(c,function(){n._lastBarRightSideDiffBarCount+=s-n.coordinateToFloatIndex(o)});var u=this._barSpace/l;1!==u&&this._chartStore.getActionStore().execute(Pt.OnZoom,{scale:u})}},t.prototype.setZoomEnabled=function(t){return this._zoomEnabled=t,this},t.prototype.getZoomEnabled=function(){return this._zoomEnabled},t.prototype.setScrollEnabled=function(t){return this._scrollEnabled=t,this},t.prototype.getScrollEnabled=function(){return this._scrollEnabled},t.prototype.clear=function(){this._visibleRange=xe()},t}(),Te={name:"AVP",shortName:"AVP",series:Yt.Price,precision:2,figures:[{key:"avp",title:"AVP: ",type:"line"}],calc:function(t){var e=0,i=0;return t.map(function(t){var n,r,a={},o=null!==(n=null===t||void 0===t?void 0:t.turnover)&&void 0!==n?n:0,s=null!==(r=null===t||void 0===t?void 0:t.volume)&&void 0!==r?r:0;return e+=o,i+=s,0!==i&&(a.avp=e/i),a})}},Me={name:"AO",shortName:"AO",calcParams:[5,34],figures:[{key:"ao",title:"AO: ",type:"bar",baseValue:0,styles:function(t,e,i){var n,r,a,o,s,l=t.prev,c=t.current,u=null!==(r=null===(n=l.indicatorData)||void 0===n?void 0:n.ao)&&void 0!==r?r:Number.MIN_SAFE_INTEGER,d=null!==(o=null===(a=c.indicatorData)||void 0===a?void 0:a.ao)&&void 0!==o?o:Number.MIN_SAFE_INTEGER;s=d>u?Ft(e.styles,"bars[0].upColor",i.bars[0].upColor):Ft(e.styles,"bars[0].downColor",i.bars[0].downColor);var h=d>u?O.Stroke:O.Fill;return{color:s,style:h,borderColor:s}}}],calc:function(t,e){var i=e.calcParams,n=Math.max(i[0],i[1]),r=0,a=0,o=0,s=0;return t.map(function(e,l){var c={},u=(e.low+e.high)/2;if(r+=u,a+=u,l>=i[0]-1){o=r/i[0];var d=t[l-(i[0]-1)];r-=(d.low+d.high)/2}if(l>=i[1]-1){s=a/i[1];d=t[l-(i[1]-1)];a-=(d.low+d.high)/2}return l>=n-1&&(c.ao=o-s),c})}},Ie={name:"BIAS",shortName:"BIAS",calcParams:[6,12,24],figures:[{key:"bias1",title:"BIAS6: ",type:"line"},{key:"bias2",title:"BIAS12: ",type:"line"},{key:"bias3",title:"BIAS24: ",type:"line"}],regenerateFigures:function(t){return t.map(function(t,e){return{key:"bias".concat(e+1),title:"BIAS".concat(t,": "),type:"line"}})},calc:function(t,e){var i=e.calcParams,n=e.figures,r=[];return t.map(function(e,a){var o={},s=e.close;return i.forEach(function(e,l){var c;if(r[l]=(null!==(c=r[l])&&void 0!==c?c:0)+s,a>=e-1){var u=r[l]/i[l];o[n[l].key]=(s-u)/u*100,r[l]-=t[a-(e-1)].close}}),o})}};function Ee(t,e){var i=t.length,n=0;return t.forEach(function(t){var i=t.close-e;n+=i*i}),n=Math.abs(n),Math.sqrt(n/i)}var De={name:"BOLL",shortName:"BOLL",series:Yt.Price,calcParams:[20,2],precision:2,shouldOhlc:!0,figures:[{key:"up",title:"UP: ",type:"line"},{key:"mid",title:"MID: ",type:"line"},{key:"dn",title:"DN: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=i[0]-1,r=0;return t.map(function(e,a){var o=e.close,s={};if(r+=o,a>=n){s.mid=r/i[0];var l=Ee(t.slice(a-n,a+1),s.mid);s.up=s.mid+i[1]*l,s.dn=s.mid-i[1]*l,r-=t[a-n].close}return s})}},Pe={name:"BRAR",shortName:"BRAR",calcParams:[26],figures:[{key:"br",title:"BR: ",type:"line"},{key:"ar",title:"AR: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=0,o=0;return t.map(function(e,s){var l,c,u={},d=e.high,h=e.low,p=e.open,f=(null!==(l=t[s-1])&&void 0!==l?l:e).close;if(a+=d-p,o+=p-h,n+=d-f,r+=f-h,s>=i[0]-1){u.ar=0!==o?a/o*100:0,u.br=0!==r?n/r*100:0;var v=t[s-(i[0]-1)],g=v.high,m=v.low,y=v.open,b=(null!==(c=t[s-i[0]])&&void 0!==c?c:t[s-(i[0]-1)]).close;n-=g-b,r-=b-m,a-=g-y,o-=y-m}return u})}},Le={name:"BBI",shortName:"BBI",series:Yt.Price,precision:2,calcParams:[3,6,12,24],shouldOhlc:!0,figures:[{key:"bbi",title:"BBI: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=Math.max.apply(Math,Z([],q(i),!1)),r=[],a=[];return t.map(function(e,o){var s={},l=e.close;if(i.forEach(function(e,i){var n;r[i]=(null!==(n=r[i])&&void 0!==n?n:0)+l,o>=e-1&&(a[i]=r[i]/e,r[i]-=t[o-(e-1)].close)}),o>=n-1){var c=0;a.forEach(function(t){c+=t}),s.bbi=c/4}return s})}},Re={name:"CCI",shortName:"CCI",calcParams:[20],figures:[{key:"cci",title:"CCI: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=i[0]-1,r=0,a=[];return t.map(function(e,o){var s={},l=(e.high+e.low+e.close)/3;if(r+=l,a.push(l),o>=n){var c=r/i[0],u=a.slice(o-n,o+1),d=0;u.forEach(function(t){d+=Math.abs(t-c)});var h=d/i[0];s.cci=0!==h?(l-c)/h/.015:0;var p=(t[o-n].high+t[o-n].low+t[o-n].close)/3;r-=p}return s})}},Fe={name:"CR",shortName:"CR",calcParams:[26,10,20,40,60],figures:[{key:"cr",title:"CR: ",type:"line"},{key:"ma1",title:"MA1: ",type:"line"},{key:"ma2",title:"MA2: ",type:"line"},{key:"ma3",title:"MA3: ",type:"line"},{key:"ma4",title:"MA4: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=Math.ceil(i[1]/2.5+1),r=Math.ceil(i[2]/2.5+1),a=Math.ceil(i[3]/2.5+1),o=Math.ceil(i[4]/2.5+1),s=0,l=[],c=0,u=[],d=0,h=[],p=0,f=[],v=[];return t.forEach(function(e,g){var m,y,b,x,_,w={},C=null!==(m=t[g-1])&&void 0!==m?m:e,S=(C.high+C.close+C.low+C.open)/4,k=Math.max(0,e.high-S),A=Math.max(0,S-e.low);g>=i[0]-1&&(w.cr=0!==A?k/A*100:0,s+=w.cr,c+=w.cr,d+=w.cr,p+=w.cr,g>=i[0]+i[1]-2&&(l.push(s/i[1]),g>=i[0]+i[1]+n-3&&(w.ma1=l[l.length-1-n]),s-=null!==(y=v[g-(i[1]-1)].cr)&&void 0!==y?y:0),g>=i[0]+i[2]-2&&(u.push(c/i[2]),g>=i[0]+i[2]+r-3&&(w.ma2=u[u.length-1-r]),c-=null!==(b=v[g-(i[2]-1)].cr)&&void 0!==b?b:0),g>=i[0]+i[3]-2&&(h.push(d/i[3]),g>=i[0]+i[3]+a-3&&(w.ma3=h[h.length-1-a]),d-=null!==(x=v[g-(i[3]-1)].cr)&&void 0!==x?x:0),g>=i[0]+i[4]-2&&(f.push(p/i[4]),g>=i[0]+i[4]+o-3&&(w.ma4=f[f.length-1-o]),p-=null!==(_=v[g-(i[4]-1)].cr)&&void 0!==_?_:0)),v.push(w)}),v}},Be={name:"DMA",shortName:"DMA",calcParams:[10,50,10],figures:[{key:"dma",title:"DMA: ",type:"line"},{key:"ama",title:"AMA: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=Math.max(i[0],i[1]),r=0,a=0,o=0,s=[];return t.forEach(function(e,l){var c,u={},d=e.close;r+=d,a+=d;var h=0,p=0;if(l>=i[0]-1&&(h=r/i[0],r-=t[l-(i[0]-1)].close),l>=i[1]-1&&(p=a/i[1],a-=t[l-(i[1]-1)].close),l>=n-1){var f=h-p;u.dma=f,o+=f,l>=n+i[2]-2&&(u.ama=o/i[2],o-=null!==(c=s[l-(i[2]-1)].dma)&&void 0!==c?c:0)}s.push(u)}),s}},Ne={name:"DMI",shortName:"DMI",calcParams:[14,6],figures:[{key:"pdi",title:"PDI: ",type:"line"},{key:"mdi",title:"MDI: ",type:"line"},{key:"adx",title:"ADX: ",type:"line"},{key:"adxr",title:"ADXR: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=0,o=0,s=0,l=0,c=0,u=0,d=[];return t.forEach(function(e,h){var p,f,v={},g=null!==(p=t[h-1])&&void 0!==p?p:e,m=g.close,y=e.high,b=e.low,x=y-b,_=Math.abs(y-m),w=Math.abs(m-b),C=y-g.high,S=g.low-b,k=Math.max(Math.max(x,_),w),A=C>0&&C>S?C:0,T=S>0&&S>C?S:0;if(n+=k,r+=A,a+=T,h>=i[0]-1){h>i[0]-1?(o=o-o/i[0]+k,s=s-s/i[0]+A,l=l-l/i[0]+T):(o=n,s=r,l=a);var M=0,I=0;0!==o&&(M=100*s/o,I=100*l/o),v.pdi=M,v.mdi=I;var E=0;I+M!==0&&(E=Math.abs(I-M)/(I+M)*100),c+=E,h>=2*i[0]-2&&(u=h>2*i[0]-2?(u*(i[0]-1)+E)/i[0]:c/i[0],v.adx=u,h>=2*i[0]+i[1]-3&&(v.adxr=((null!==(f=d[h-(i[1]-1)].adx)&&void 0!==f?f:0)+u)/2))}d.push(v)}),d}},Oe={name:"EMV",shortName:"EMV",calcParams:[14,9],figures:[{key:"emv",title:"EMV: ",type:"line"},{key:"maEmv",title:"MAEMV: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=[];return t.map(function(e,a){var o,s={};if(a>0){var l=t[a-1],c=e.high,u=e.low,d=null!==(o=e.volume)&&void 0!==o?o:0,h=(c+u)/2-(l.high+l.low)/2;if(0===d||c-u===0)s.emv=0;else{var p=d/1e8/(c-u);s.emv=h/p}n+=s.emv,r.push(s.emv),a>=i[0]&&(s.maEmv=n/i[0],n-=r[a-i[0]])}return s})}},ze={name:"EMA",shortName:"EMA",series:Yt.Price,calcParams:[6,12,20],precision:2,shouldOhlc:!0,figures:[{key:"ema1",title:"EMA6: ",type:"line"},{key:"ema2",title:"EMA12: ",type:"line"},{key:"ema3",title:"EMA20: ",type:"line"}],regenerateFigures:function(t){return t.map(function(t,e){return{key:"ema".concat(e+1),title:"EMA".concat(t,": "),type:"line"}})},calc:function(t,e){var i=e.calcParams,n=e.figures,r=0,a=[];return t.map(function(t,e){var o={},s=t.close;return r+=s,i.forEach(function(t,i){e>=t-1&&(a[i]=e>t-1?(2*s+(t-1)*a[i])/(t+1):r/t,o[n[i].key]=a[i])}),o})}},We={name:"MTM",shortName:"MTM",calcParams:[12,6],figures:[{key:"mtm",title:"MTM: ",type:"line"},{key:"maMtm",title:"MAMTM: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=[];return t.forEach(function(e,a){var o,s={};if(a>=i[0]){var l=e.close,c=t[a-i[0]].close;s.mtm=l-c,n+=s.mtm,a>=i[0]+i[1]-1&&(s.maMtm=n/i[1],n-=null!==(o=r[a-(i[1]-1)].mtm)&&void 0!==o?o:0)}r.push(s)}),r}},Ve={name:"MA",shortName:"MA",series:Yt.Price,calcParams:[5,10,30,60],precision:2,shouldOhlc:!0,figures:[{key:"ma5",title:"MA5: ",type:"line"},{key:"ma10",title:"MA10: ",type:"line"},{key:"ma30",title:"MA30: ",type:"line"},{key:"ma60",title:"MA60: ",type:"line"}],regenerateFigures:function(t){return t.map(function(t,e){return{key:"ma".concat(e+1),title:"MA".concat(t,": "),type:"line"}})},calc:function(t,e){var i=e.calcParams,n=e.figures,r=[];return t.map(function(e,a){var o={},s=e.close;return i.forEach(function(e,i){var l;r[i]=(null!==(l=r[i])&&void 0!==l?l:0)+s,a>=e-1&&(o[n[i].key]=r[i]/e,r[i]-=t[a-(e-1)].close)}),o})}},$e={name:"MACD",shortName:"MACD",calcParams:[12,26,9],figures:[{key:"dif",title:"DIF: ",type:"line"},{key:"dea",title:"DEA: ",type:"line"},{key:"macd",title:"MACD: ",type:"bar",baseValue:0,styles:function(t,e,i){var n,r,a,o,s,l=t.prev,c=t.current,u=null!==(r=null===(n=l.indicatorData)||void 0===n?void 0:n.macd)&&void 0!==r?r:Number.MIN_SAFE_INTEGER,d=null!==(o=null===(a=c.indicatorData)||void 0===a?void 0:a.macd)&&void 0!==o?o:Number.MIN_SAFE_INTEGER;s=d>0?Ft(e.styles,"bars[0].upColor",i.bars[0].upColor):d<0?Ft(e.styles,"bars[0].downColor",i.bars[0].downColor):Ft(e.styles,"bars[0].noChangeColor",i.bars[0].noChangeColor);var h=u=r[0]-1&&(i=e>r[0]-1?(2*d+(r[0]-1)*i)/(r[0]+1):a/r[0]),e>=r[1]-1&&(n=e>r[1]-1?(2*d+(r[1]-1)*n)/(r[1]+1):a/r[1]),e>=c-1&&(o=i-n,u.dif=o,s+=o,e>=c+r[2]-2&&(l=e>c+r[2]-2?(2*o+l*(r[2]-1))/(r[2]+1):s/r[2],u.macd=2*(o-l),u.dea=l)),u})}},He={name:"OBV",shortName:"OBV",calcParams:[30],figures:[{key:"obv",title:"OBV: ",type:"line"},{key:"maObv",title:"MAOBV: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=[];return t.forEach(function(e,o){var s,l,c,u,d=null!==(s=t[o-1])&&void 0!==s?s:e;e.closed.close&&(r+=null!==(c=e.volume)&&void 0!==c?c:0);var h={obv:r};n+=r,o>=i[0]-1&&(h.maObv=n/i[0],n-=null!==(u=a[o-(i[0]-1)].obv)&&void 0!==u?u:0),a.push(h)}),a}},Ke={name:"PVT",shortName:"PVT",figures:[{key:"pvt",title:"PVT: ",type:"line"}],calc:function(t){var e=0;return t.map(function(i,n){var r,a,o={},s=i.close,l=null!==(r=i.volume)&&void 0!==r?r:1,c=(null!==(a=t[n-1])&&void 0!==a?a:i).close,u=0,d=c*l;return 0!==d&&(u=(s-c)/d),e+=u,o.pvt=e,o})}},Ye={name:"PSY",shortName:"PSY",calcParams:[12,6],figures:[{key:"psy",title:"PSY: ",type:"line"},{key:"maPsy",title:"MAPSY: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=[],o=[];return t.forEach(function(e,s){var l,c,u={},d=(null!==(l=t[s-1])&&void 0!==l?l:e).close,h=e.close-d>0?1:0;a.push(h),n+=h,s>=i[0]-1&&(u.psy=n/i[0]*100,r+=u.psy,s>=i[0]+i[1]-2&&(u.maPsy=r/i[1],r-=null!==(c=o[s-(i[1]-1)].psy)&&void 0!==c?c:0),n-=a[s-(i[0]-1)]),o.push(u)}),o}},Xe={name:"ROC",shortName:"ROC",calcParams:[12,6],figures:[{key:"roc",title:"ROC: ",type:"line"},{key:"maRoc",title:"MAROC: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=[],r=0;return t.forEach(function(e,a){var o,s,l={};if(a>=i[0]-1){var c=e.close,u=(null!==(o=t[a-i[0]])&&void 0!==o?o:t[a-(i[0]-1)]).close;l.roc=0!==u?(c-u)/u*100:0,r+=l.roc,a>=i[0]-1+i[1]-1&&(l.maRoc=r/i[1],r-=null!==(s=n[a-(i[1]-1)].roc)&&void 0!==s?s:0)}n.push(l)}),n}},Ue={name:"RSI",shortName:"RSI",calcParams:[6,12,24],figures:[{key:"rsi1",title:"RSI1: ",type:"line"},{key:"rsi2",title:"RSI2: ",type:"line"},{key:"rsi3",title:"RSI3: ",type:"line"}],regenerateFigures:function(t){return t.map(function(t,e){var i=e+1;return{key:"rsi".concat(i),title:"RSI".concat(i,": "),type:"line"}})},calc:function(t,e){var i=e.calcParams,n=e.figures,r=[],a=[];return t.map(function(e,o){var s,l={},c=(null!==(s=t[o-1])&&void 0!==s?s:e).close,u=e.close-c;return i.forEach(function(e,i){var s,c,d;if(u>0?r[i]=(null!==(s=r[i])&&void 0!==s?s:0)+u:a[i]=(null!==(c=a[i])&&void 0!==c?c:0)+Math.abs(u),o>=e-1){0!==a[i]?l[n[i].key]=100-100/(1+r[i]/a[i]):l[n[i].key]=0;var h=t[o-(e-1)],p=null!==(d=t[o-e])&&void 0!==d?d:h,f=h.close-p.close;f>0?r[i]-=f:a[i]-=Math.abs(f)}}),l})}},Ge={name:"SMA",shortName:"SMA",series:Yt.Price,calcParams:[12,2],precision:2,figures:[{key:"sma",title:"SMA: ",type:"line"}],shouldOhlc:!0,calc:function(t,e){var i=e.calcParams,n=0,r=0;return t.map(function(t,e){var a={},o=t.close;return n+=o,e>=i[0]-1&&(r=e>i[0]-1?(o*i[1]+r*(i[0]-i[1]+1))/(i[0]+1):n/i[0],a.sma=r),a})}},je={name:"KDJ",shortName:"KDJ",calcParams:[9,3,3],figures:[{key:"k",title:"K: ",type:"line"},{key:"d",title:"D: ",type:"line"},{key:"j",title:"J: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=[];return t.forEach(function(e,r){var a,o,s,l,c={},u=e.close;if(r>=i[0]-1){var d=me(t.slice(r-(i[0]-1),r+1),"high","low"),h=d[0],p=d[1],f=h-p,v=(u-p)/(0===f?1:f)*100;c.k=((i[1]-1)*(null!==(o=null===(a=n[r-1])||void 0===a?void 0:a.k)&&void 0!==o?o:50)+v)/i[1],c.d=((i[2]-1)*(null!==(l=null===(s=n[r-1])||void 0===s?void 0:s.d)&&void 0!==l?l:50)+c.k)/i[2],c.j=3*c.k-2*c.d}n.push(c)}),n}},qe={name:"SAR",shortName:"SAR",series:Yt.Price,calcParams:[2,2,20],precision:2,shouldOhlc:!0,figures:[{key:"sar",title:"SAR: ",type:"circle",styles:function(t,e,i){var n,r,a=t.current,o=null!==(r=null===(n=a.indicatorData)||void 0===n?void 0:n.sar)&&void 0!==r?r:Number.MIN_SAFE_INTEGER,s=a.kLineData,l=((null===s||void 0===s?void 0:s.high)+(null===s||void 0===s?void 0:s.low))/2,c=oe.low?(c=s,o=n,s=-100,l=!l):c>p&&(c=p)}else{(-100===s||s>h)&&(s=h,o=Math.min(o+r,a)),c=u+o*(s-u);var f=Math.max(t[Math.max(1,i)-1].high,d);c=a[0]-1&&(i=e>a[0]-1?(2*p+(a[0]-1)*i)/(a[0]+1):o/a[0],s+=i,e>=2*a[0]-2&&(n=e>2*a[0]-2?(2*i+(a[0]-1)*n)/(a[0]+1):s/a[0],l+=n,e>=3*a[0]-3))){var f=void 0,v=0;e>3*a[0]-3?(f=(2*n+(a[0]-1)*r)/(a[0]+1),v=(f-r)/r*100):f=l/a[0],r=f,h.trix=v,c+=v,e>=3*a[0]+a[1]-4&&(h.maTrix=c/a[1],c-=null!==(d=u[e-(a[1]-1)].trix)&&void 0!==d?d:0)}u.push(h)}),u}};function Je(){return{key:"volume",title:"VOLUME: ",type:"bar",baseValue:0,styles:function(t,e,i){var n=t.current.kLineData,r=Ft(e.styles,"bars[0].noChangeColor",i.bars[0].noChangeColor);return Mt(n)&&(n.close>n.open?r=Ft(e.styles,"bars[0].upColor",i.bars[0].upColor):n.close=e-1&&(l[n[i].key]=r[i]/e,r[i]-=null!==(c=t[a-(e-1)].volume)&&void 0!==c?c:0)}),l})}},ti={name:"VR",shortName:"VR",calcParams:[26,6],figures:[{key:"vr",title:"VR: ",type:"line"},{key:"maVr",title:"MAVR: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=0,o=0,s=[];return t.forEach(function(e,l){var c,u,d,h,p,f={},v=e.close,g=(null!==(c=t[l-1])&&void 0!==c?c:e).close,m=null!==(u=e.volume)&&void 0!==u?u:0;if(v>g?n+=m:v=i[0]-1){var y=a/2;f.vr=r+y===0?0:(n+y)/(r+y)*100,o+=f.vr,l>=i[0]+i[1]-2&&(f.maVr=o/i[1],o-=null!==(d=s[l-(i[1]-1)].vr)&&void 0!==d?d:0);var b=t[l-(i[0]-1)],x=null!==(h=t[l-i[0]])&&void 0!==h?h:b,_=b.close,w=null!==(p=b.volume)&&void 0!==p?p:0;_>x.close?n-=w:_=s){var l=me(t.slice(r-s,r+1),"high","low"),c=l[0],u=l[1],d=c-u;a[n[i].key]=0===d?0:(o-c)/d*100}}),a})}},ii={},ni=[Te,Me,Ie,De,Pe,Le,Re,Fe,Be,Ne,Oe,ze,We,Ve,$e,He,Ke,Ye,Xe,Ue,Ge,je,qe,Ze,Qe,ti,ei];function ri(t){ii[t.name]=jt.extend(t)}function ai(t){var e;return null!==(e=ii[t])&&void 0!==e?e:null}ni.forEach(function(t){ii[t.name]=jt.extend(t)});var oi=function(){function t(t){this._instances=new Map,this._chartStore=t}return t.prototype._overrideInstance=function(t,e){var i=e.shortName,n=e.series,r=e.calcParams,a=e.precision,o=e.figures,s=e.minValue,l=e.maxValue,c=e.shouldOhlc,u=e.shouldFormatBigNumber,d=e.visible,h=e.zLevel,p=e.styles,f=e.extendData,v=e.regenerateFigures,g=e.createTooltipDataSource,m=e.draw,y=e.calc,b=!1;Et(i)&&t.setShortName(i)&&(b=!0),Mt(n)&&t.setSeries(n)&&(b=!0);var x=!1;St(r)&&t.setCalcParams(r)&&(b=!0,x=!0),St(o)&&t.setFigures(o)&&(b=!0,x=!0),void 0!==s&&t.setMinValue(s)&&(b=!0),void 0!==l&&t.setMinValue(l)&&(b=!0),Tt(a)&&t.setPrecision(a)&&(b=!0),It(c)&&t.setShouldOhlc(c)&&(b=!0),It(u)&&t.setShouldFormatBigNumber(u)&&(b=!0),It(d)&&t.setVisible(d)&&(b=!0);var _=!1;return Tt(h)&&t.setZLevel(h)&&(b=!0,_=!0),Mt(p)&&t.setStyles(p)&&(b=!0),void 0!==f&&t.setExtendData(f)&&(b=!0,x=!0),void 0!==v&&t.setRegenerateFigures(v)&&(b=!0),void 0!==g&&t.setCreateTooltipDataSource(g)&&(b=!0),void 0!==m&&t.setDraw(m)&&(b=!0),kt(y)&&(t.calc=y,x=!0),[b,x,_]},t.prototype._sort=function(t){var e;Et(t)?null===(e=this._instances.get(t))||void 0===e||e.sort(function(t,e){return t.zLevel-e.zLevel}):this._instances.forEach(function(t){t.sort(function(t,e){return t.zLevel-e.zLevel})})},t.prototype.addInstance=function(t,e,i){return U(this,void 0,void 0,function(){var n,r,a,o,s;return G(this,function(l){switch(l.label){case 0:return n=t.name,r=this._instances.get(e),Mt(r)?(a=r.find(function(t){return t.name===n}),Mt(a)?[4,Promise.reject(new Error("Duplicate indicators."))]:[3,2]):[3,2];case 1:return[2,l.sent()];case 2:return Mt(r)||(r=[]),o=ai(n),s=new o,this.synchronizeSeriesPrecision(s),this._overrideInstance(s,t),i||(r=[]),r.push(s),this._instances.set(e,r),this._sort(e),[4,s.calcIndicator(this._chartStore.getDataList())];case 3:return[2,l.sent()]}})})},t.prototype.getInstances=function(t){var e;return null!==(e=this._instances.get(t))&&void 0!==e?e:[]},t.prototype.removeInstance=function(t,e){var i,n=!1,r=this._instances.get(t);if(Mt(r)){if(Et(e)){var a=r.findIndex(function(t){return t.name===e});a>-1&&(r.splice(a,1),n=!0)}else this._instances.set(t,[]),n=!0;0===(null===(i=this._instances.get(t))||void 0===i?void 0:i.length)&&this._instances.delete(t)}return n},t.prototype.hasInstances=function(t){return this._instances.has(t)},t.prototype.calcInstance=function(t,e){return U(this,void 0,void 0,function(){var i,n,r,a,o=this;return G(this,function(s){switch(s.label){case 0:return i=[],Et(t)?Et(e)?(n=this._instances.get(e),Mt(n)&&(r=n.find(function(e){return e.name===t}),Mt(r)&&i.push(r.calcIndicator(this._chartStore.getDataList())))):this._instances.forEach(function(e){var n=e.find(function(e){return e.name===t});Mt(n)&&i.push(n.calcIndicator(o._chartStore.getDataList()))}):this._instances.forEach(function(t){t.forEach(function(t){i.push(t.calcIndicator(o._chartStore.getDataList()))})}),[4,Promise.all(i)];case 1:return a=s.sent(),[2,a.includes(!0)]}})})},t.prototype.getInstanceByPaneId=function(t,e){var i,n,r=function(t){var e=new Map;return t.forEach(function(t){e.set(t.name,t)}),e};if(Et(t)){var a=null!==(i=this._instances.get(t))&&void 0!==i?i:[];return Et(e)?null!==(n=null===a||void 0===a?void 0:a.find(function(t){return t.name===e}))&&void 0!==n?n:null:r(a)}var o=new Map;return this._instances.forEach(function(t,e){o.set(e,r(t))}),o},t.prototype.synchronizeSeriesPrecision=function(t){var e=this._chartStore.getPrecision(),i=e.price,n=e.volume,r=function(t){switch(t.series){case Yt.Price:t.setPrecision(i,!0);break;case Yt.Volume:t.setPrecision(n,!0);break}};Mt(t)?r(t):this._instances.forEach(function(t){t.forEach(function(t){r(t)})})},t.prototype.override=function(t,e){return U(this,void 0,void 0,function(){var i,n,r,a,o,s,l,c=this;return G(this,function(u){switch(u.label){case 0:return i=t.name,n=new Map,null!==e?(r=this._instances.get(e),Mt(r)&&n.set(e,r)):n=this._instances,a=!1,o=[],s=!1,n.forEach(function(e){var n=e.find(function(t){return t.name===i});if(Mt(n)){var r=c._overrideInstance(n,t);r[2]&&(s=!0),r[1]?o.push(n.calcIndicator(c._chartStore.getDataList())):r[0]&&(a=!0)}}),s&&this._sort(),[4,Promise.all(o)];case 1:return l=u.sent(),[2,[a,l.includes(!0)]]}})})},t}(),si=function(){function t(t){this._crosshair={},this._activeIcon=null,this._chartStore=t}return t.prototype.setCrosshair=function(t,e){var i,n,r=null!==e&&void 0!==e?e:{},a=r.notInvalidate,o=r.notExecuteAction,s=this._chartStore.getDataList(),l=null!==t&&void 0!==t?t:{};Tt(l.x)?(i=this._chartStore.getTimeScaleStore().coordinateToDataIndex(l.x),n=i<0?0:i>s.length-1?s.length-1:i):(i=s.length-1,n=i);var c=s[n],u=this._chartStore.getTimeScaleStore().dataIndexToCoordinate(i),d={x:this._crosshair.x,y:this._crosshair.y,paneId:this._crosshair.paneId};this._crosshair=X(X({},l),{realX:u,kLineData:c,realDataIndex:i,dataIndex:n}),d.x===l.x&&d.y===l.y&&d.paneId===l.paneId||(null===c||null!==o&&void 0!==o&&o||this._chartStore.getChart().crosshairChange(this._crosshair),null!==a&&void 0!==a&&a||this._chartStore.getChart().updatePane(1))},t.prototype.recalculateCrosshair=function(t){this.setCrosshair(this._crosshair,{notInvalidate:t})},t.prototype.getCrosshair=function(){return this._crosshair},t.prototype.setActiveIcon=function(t){this._activeIcon=null!==t&&void 0!==t?t:null},t.prototype.getActiveIcon=function(){return this._activeIcon},t.prototype.clear=function(){this.setCrosshair({},{notInvalidate:!0}),this.setActiveIcon()},t}(),li={name:"fibonacciLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e,i=t.coordinates,n=t.bounding,r=t.overlay,a=t.precision,o=t.thousandsSeparator,s=t.decimalFoldThreshold,l=t.yAxis,c=r.points;if(i.length>0){var u=null===(e=null===l||void 0===l?void 0:l.isInCandle())||void 0===e||e?a.price:a.excludePriceVolumeMax,d=[],h=[],p=0,f=n.width;if(i.length>1&&Tt(c[0].value)&&Tt(c[1].value)){var v=[1,.786,.618,.5,.382,.236,0],g=i[0].y-i[1].y,m=c[0].value-c[1].value;v.forEach(function(t){var e,n=i[1].y+g*t,r=Wt(zt(((null!==(e=c[1].value)&&void 0!==e?e:0)+m*t).toFixed(u),o),s);d.push({coordinates:[{x:p,y:n},{x:f,y:n}]}),h.push({x:p,y:n,text:"".concat(r," (").concat((100*t).toFixed(1),"%)"),baseline:"bottom"})})}return[{type:"line",attrs:d},{type:"text",isCheckEvent:!1,attrs:h}]}return[]}},ci={name:"horizontalRayLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates,i=t.bounding,n={x:0,y:e[0].y};return Mt(e[1])&&e[0].x-1)for(var r=n;r>-1;r--)if(this._children[r].dispatchEvent(t,e,i))return!0;return this.onEvent(t,e,i)},t.prototype.addChild=function(t){return this._children.push(t),this},t.prototype.clear=function(){this._children=[]},t}(),pi=2,fi=function(t){function e(e){var i=t.call(this)||this;return i.attrs=e.attrs,i.styles=e.styles,i}return B(e,t),e.prototype.checkEventOn=function(t){return this.checkEventOnImp(t,this.attrs,this.styles)},e.prototype.setAttrs=function(t){return this.attrs=t,this},e.prototype.setStyles=function(t){return this.styles=t,this},e.prototype.draw=function(t){this.drawImp(t,this.attrs,this.styles)},e.extend=function(t){var i=function(e){function i(){return null!==e&&e.apply(this,arguments)||this}return B(i,e),i.prototype.checkEventOnImp=function(e,i,n){return t.checkEventOn(e,i,n)},i.prototype.drawImp=function(e,i,n){t.draw(e,i,n)},i}(e);return i},e}(hi);function vi(t,e){var i=[];i=i.concat(e);for(var n=0;n1)for(var a=1;a0&&i<1?i:0:i?.5:0;if(r>0&&n>2){for(var a=e[0].x,o=e[0].y,s=1;s1&&(2!==i.length||i[0].x!==i[1].x&&i[0].y!==i[1].y?(t.save(),c%2===1&&t.translate(.5,.5),t.beginPath(),t.moveTo(i[0].x,i[0].y),bi(t,i,s),t.stroke(),t.closePath(),t.restore()):(t.beginPath(),i[0].x===i[1].x?(t.moveTo(i[0].x+f,i[0].y),t.lineTo(i[1].x+f,i[1].y)):(t.moveTo(i[0].x,i[0].y+f),t.lineTo(i[1].x,i[1].y+f)),t.stroke(),t.closePath()))})}var _i={name:"line",checkEventOn:vi,draw:function(t,e,i){xi(t,e,i)}};function wi(t,e,i){var n=null!==i&&void 0!==i?i:0,r=[];if(t.length>1)if(t[0].x===t[1].x){var a=0,o=e.height;if(r.push({coordinates:[{x:t[0].x,y:a},{x:t[0].x,y:o}]}),t.length>2){r.push({coordinates:[{x:t[2].x,y:a},{x:t[2].x,y:o}]});for(var s=t[0].x-t[2].x,l=0;l2){var v=t[2].y-p*t[2].x;r.push({coordinates:[{x:u,y:u*p+v},{x:d,y:d*p+v}]});for(s=f-v,l=0;l1){var i=void 0;return i=t[0].x===t[1].x&&t[0].y!==t[1].y?t[0].yt[1].x?{x:0,y:mi(t[0],t[1],{x:0,y:t[0].y})}:{x:e.width,y:mi(t[0],t[1],{x:e.width,y:t[0].y})},{coordinates:[t[0],i]}}return[]}var Ti={name:"rayLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates,i=t.bounding;return[{type:"line",attrs:Ai(e,i)}]}},Mi={name:"segment",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates;return 2===e.length?[{type:"line",attrs:{coordinates:e}}]:[]}},Ii={name:"straightLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates,i=t.bounding;return 2===e.length?e[0].x===e[1].x?[{type:"line",attrs:{coordinates:[{x:e[0].x,y:0},{x:e[0].x,y:i.height}]}}]:[{type:"line",attrs:{coordinates:[{x:0,y:mi(e[0],e[1],{x:0,y:e[0].y})},{x:i.width,y:mi(e[0],e[1],{x:i.width,y:e[0].y})}]}}]:[]}},Ei={name:"verticalRayLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates,i=t.bounding;if(2===e.length){var n={x:e[0].x,y:0};return e[0].y0&&l.set(e[0],n)};try{for(var u=j(this._instances),d=u.next();!d.done;d=u.next()){var h=d.value;c(h)}}catch(f){e={error:f}}finally{try{d&&!d.done&&(i=u.return)&&i.call(u)}finally{if(e)throw e.error}}this._instances=l}else this._instances.forEach(function(t,e){a.push(e),t.forEach(function(t){var e;null===(e=t.onRemoved)||void 0===e||e.call(t,{overlay:t})})}),this._instances.clear();if(a.length>0){var p=this._chartStore.getChart();a.forEach(function(t){p.updatePane(1,t)}),p.updatePane(1,Vi.X_AXIS)}},t.prototype.setPressedInstanceInfo=function(t){this._pressedInstanceInfo=t},t.prototype.getPressedInstanceInfo=function(){return this._pressedInstanceInfo},t.prototype.updatePointPosition=function(t,e){if(t>0){var i=this._chartStore.getDataList();this._instances.forEach(function(n){n.forEach(function(n){var r=n.points;r.forEach(function(n){if(!Mt(n.timestamp)&&Mt(n.dataIndex)){e===Kt.Forward&&(n.dataIndex=n.dataIndex+t);var r=i[n.dataIndex];n.timestamp=null===r||void 0===r?void 0:r.timestamp}})})})}},t.prototype.setHoverInstanceInfo=function(t,e){var i,n,r=this._hoverInstanceInfo,a=r.instance,o=r.figureType,s=r.figureKey,l=r.figureIndex;if(((null===a||void 0===a?void 0:a.id)!==(null===(i=t.instance)||void 0===i?void 0:i.id)||o!==t.figureType||l!==t.figureIndex)&&(this._hoverInstanceInfo=t,(null===a||void 0===a?void 0:a.id)!==(null===(n=t.instance)||void 0===n?void 0:n.id))){var c=!1,u=!1;null!==a&&(u=!0,kt(a.onMouseLeave)&&(a.onMouseLeave(X({overlay:a,figureKey:s,figureIndex:l},e)),c=!0)),null!==t.instance&&(u=!0,kt(t.instance.onMouseEnter)&&(t.instance.onMouseEnter(X({overlay:t.instance,figureKey:t.figureKey,figureIndex:t.figureIndex},e)),c=!0)),u&&this._sort(),c||this._chartStore.getChart().updatePane(1)}},t.prototype.getHoverInstanceInfo=function(){return this._hoverInstanceInfo},t.prototype.setClickInstanceInfo=function(t,e){var i,n,r,a,o,s,l,c,u,d=this._clickInstanceInfo,h=d.paneId,p=d.instance,f=d.figureType,v=d.figureKey,g=d.figureIndex;if(null!==(n=null===(i=t.instance)||void 0===i?void 0:i.isDrawing())&&void 0!==n&&n||null===(a=null===(r=t.instance)||void 0===r?void 0:r.onClick)||void 0===a||a.call(r,X({overlay:t.instance,figureKey:t.figureKey,figureIndex:t.figureIndex},e)),((null===p||void 0===p?void 0:p.id)!==(null===(o=t.instance)||void 0===o?void 0:o.id)||f!==t.figureType||g!==t.figureIndex)&&(this._clickInstanceInfo=t,(null===p||void 0===p?void 0:p.id)!==(null===(s=t.instance)||void 0===s?void 0:s.id))){null===(l=null===p||void 0===p?void 0:p.onDeselected)||void 0===l||l.call(p,X({overlay:p,figureKey:v,figureIndex:g},e)),null===(u=null===(c=t.instance)||void 0===c?void 0:c.onSelected)||void 0===u||u.call(c,X({overlay:t.instance,figureKey:t.figureKey,figureIndex:t.figureIndex},e));var m=this._chartStore.getChart();m.updatePane(1,t.paneId),h!==t.paneId&&m.updatePane(1,h),m.updatePane(1,Vi.X_AXIS)}},t.prototype.getClickInstanceInfo=function(){return this._clickInstanceInfo},t.prototype.isEmpty=function(){return 0===this._instances.size&&null===this._progressInstanceInfo},t.prototype.isDrawing=function(){var t,e;return null!==this._progressInstanceInfo&&null!==(e=null===(t=this._progressInstanceInfo)||void 0===t?void 0:t.instance.isDrawing())&&void 0!==e&&e},t}(),Hi=function(){function t(){this._actions=new Map}return t.prototype.execute=function(t,e){var i;null===(i=this._actions.get(t))||void 0===i||i.execute(e)},t.prototype.subscribe=function(t,e){var i;this._actions.has(t)||this._actions.set(t,new Xt),null===(i=this._actions.get(t))||void 0===i||i.subscribe(e)},t.prototype.unsubscribe=function(t,e){var i=this._actions.get(t);Mt(i)&&(i.unsubscribe(e),i.isEmpty()&&this._actions.delete(t))},t.prototype.has=function(t){var e=this._actions.get(t);return Mt(e)&&!e.isEmpty()},t}(),Ki={grid:{horizontal:{color:"#EDEDED"},vertical:{color:"#EDEDED"}},candle:{priceMark:{high:{color:"#76808F"},low:{color:"#76808F"}},tooltip:{rect:{color:"#FEFEFE",borderColor:"#F2F3F5"},text:{color:"#76808F"}}},indicator:{tooltip:{text:{color:"#76808F"}}},xAxis:{axisLine:{color:"#DDDDDD"},tickText:{color:"#76808F"},tickLine:{color:"#DDDDDD"}},yAxis:{axisLine:{color:"#DDDDDD"},tickText:{color:"#76808F"},tickLine:{color:"#DDDDDD"}},separator:{color:"#DDDDDD"},crosshair:{horizontal:{line:{color:"#76808F"},text:{borderColor:"#686D76",backgroundColor:"#686D76"}},vertical:{line:{color:"#76808F"},text:{borderColor:"#686D76",backgroundColor:"#686D76"}}}},Yi={grid:{horizontal:{color:"#292929"},vertical:{color:"#292929"}},candle:{priceMark:{high:{color:"#929AA5"},low:{color:"#929AA5"}},tooltip:{rect:{color:"rgba(10, 10, 10, .6)",borderColor:"rgba(10, 10, 10, .6)"},text:{color:"#929AA5"}}},indicator:{tooltip:{text:{color:"#929AA5"}}},xAxis:{axisLine:{color:"#333333"},tickText:{color:"#929AA5"},tickLine:{color:"#333333"}},yAxis:{axisLine:{color:"#333333"},tickText:{color:"#929AA5"},tickLine:{color:"#333333"}},separator:{color:"#333333"},crosshair:{horizontal:{line:{color:"#929AA5"},text:{borderColor:"#373a40",backgroundColor:"#373a40"}},vertical:{line:{color:"#929AA5"},text:{borderColor:"#373a40",backgroundColor:"#373a40"}}}},Xi={light:Ki,dark:Yi};function Ui(t){var e;return null!==(e=Xi[t])&&void 0!==e?e:null}var Gi=function(){function t(t,e){this._styles=gt(),this._customApi=ne(),this._locale=re,this._precision={price:2,volume:0},this._thousandsSeparator=",",this._decimalFoldThreshold=3,this._dataList=[],this._loadMoreCallback=null,this._loadDataCallback=null,this._loading=!0,this._forwardMore=!0,this._backwardMore=!0,this._timeScaleStore=new Ae(this),this._indicatorStore=new oi(this),this._overlayStore=new $i(this),this._tooltipStore=new si(this),this._actionStore=new Hi,this._visibleDataList=[],this._chart=t,this.setOptions(e)}return t.prototype.adjustVisibleDataList=function(){this._visibleDataList=[];for(var t=this._timeScaleStore.getVisibleRange(),e=t.realFrom,i=t.realTo,n=e;n0&&(this._decimalFoldThreshold=u)}return this},t.prototype.getStyles=function(){return this._styles},t.prototype.getLocale=function(){return this._locale},t.prototype.getCustomApi=function(){return this._customApi},t.prototype.getThousandsSeparator=function(){return this._thousandsSeparator},t.prototype.getDecimalFoldThreshold=function(){return this._decimalFoldThreshold},t.prototype.getPrecision=function(){return this._precision},t.prototype.setPrecision=function(t){return this._precision=t,this._indicatorStore.synchronizeSeriesPrecision(),this},t.prototype.getDataList=function(){return this._dataList},t.prototype.getVisibleFirstData=function(){var t,e=this._timeScaleStore.getVisibleRange().from;return null!==(t=this._dataList[e])&&void 0!==t?t:null},t.prototype.getVisibleDataList=function(){return this._visibleDataList},t.prototype.addData=function(t,e,i){return U(this,void 0,void 0,function(){var n,r,a,o,s,l,c;return G(this,function(u){switch(u.label){case 0:if(n=!1,r=!1,a=0,St(t)){switch(a=t.length,e){case Kt.Init:this.clear(),this._dataList=t,this._forwardMore=null===i||void 0===i||i,this._timeScaleStore.resetOffsetRightDistance(),r=!0;break;case Kt.Backward:this._dataList=this._dataList.concat(t),this._backwardMore=null!==i&&void 0!==i&&i,r=a>0;break;case Kt.Forward:this._dataList=t.concat(this._dataList),this._forwardMore=null!==i&&void 0!==i&&i,r=a>0}this._loading=!1,n=!0}else o=this._dataList.length,s=t.timestamp,l=Ft(this._dataList[o-1],"timestamp",0),s>l?(this._dataList.push(t),c=this._timeScaleStore.getLastBarRightSideDiffBarCount(),c<0&&this._timeScaleStore.setLastBarRightSideDiffBarCount(--c),a=1,n=!0,r=!0):s===l&&(this._dataList[o-1]=t,n=!0,r=!0);if(!n)return[3,5];u.label=1;case 1:return u.trys.push([1,4,,5]),this._overlayStore.updatePointPosition(a,e),r?(this._timeScaleStore.adjustVisibleRange(),this._tooltipStore.recalculateCrosshair(!0),[4,this._indicatorStore.calcInstance()]):[3,3];case 2:u.sent(),this._chart.adjustPaneViewport(!1,!0,!0,!0),u.label=3;case 3:return this._actionStore.execute(Pt.OnDataReady),[3,5];case 4:return u.sent(),[3,5];case 5:return[2]}})})},t.prototype.setLoadMoreCallback=function(t){this._loadMoreCallback=t},t.prototype.executeLoadMoreCallback=function(t){this._forwardMore&&!this._loading&&Mt(this._loadMoreCallback)&&(this._loading=!0,this._loadMoreCallback(t))},t.prototype.setLoadDataCallback=function(t){this._loadDataCallback=t},t.prototype.executeLoadDataCallback=function(t){var e=this;if(!this._loading&&Mt(this._loadDataCallback)&&(this._forwardMore&&t.type===Kt.Forward||this._backwardMore&&t.type===Kt.Backward)){var i=function(i,n){e.addData(i,t.type,n).then(function(){}).catch(function(){})};this._loading=!0,this._loadDataCallback(X(X({},t),{callback:i}))}},t.prototype.clear=function(){this._forwardMore=!0,this._backwardMore=!0,this._loading=!0,this._dataList=[],this._visibleDataList=[],this._timeScaleStore.clear(),this._tooltipStore.clear()},t.prototype.getTimeScaleStore=function(){return this._timeScaleStore},t.prototype.getIndicatorStore=function(){return this._indicatorStore},t.prototype.getOverlayStore=function(){return this._overlayStore},t.prototype.getTooltipStore=function(){return this._tooltipStore},t.prototype.getActionStore=function(){return this._actionStore},t.prototype.getChart=function(){return this._chart},t}(),ji={MAIN:"main",X_AXIS:"xAxis",Y_AXIS:"yAxis",SEPARATOR:"separator"},qi=7;function Zi(){return U(this,void 0,void 0,function(){return G(this,function(t){switch(t.label){case 0:return[4,new Promise(function(t){var e=new ResizeObserver(function(i){t(i.every(function(t){return"devicePixelContentBoxSize"in t})),e.disconnect()});e.observe(document.body,{box:"device-pixel-content-box"})}).catch(function(){return!1})];case 1:return[2,t.sent()]}})})}var Ji=function(){function t(t,e){var i=this;this._supportedDevicePixelContentBox=!1,this._width=0,this._height=0,this._pixelWidth=0,this._pixelHeight=0,this._nextPixelWidth=0,this._nextPixelHeight=0,this._requestAnimationId=ae,this._mediaQueryListener=function(){var t=Vt(i._element);i._nextPixelWidth=Math.round(i._element.clientWidth*t),i._nextPixelHeight=Math.round(i._element.clientHeight*t),i._resetPixelRatio()},this._listener=e,this._element=he("canvas",t),this._ctx=this._element.getContext("2d",{willReadFrequently:!0}),Zi().then(function(t){i._supportedDevicePixelContentBox=t,t?(i._resizeObserver=new ResizeObserver(function(t){var e,n=t.find(function(t){return t.target===i._element}),r=null===(e=null===n||void 0===n?void 0:n.devicePixelContentBoxSize)||void 0===e?void 0:e[0];Mt(r)&&(i._nextPixelWidth=r.inlineSize,i._nextPixelHeight=r.blockSize,i._pixelWidth===i._nextPixelWidth&&i._pixelHeight===i._nextPixelHeight||i._resetPixelRatio())}),i._resizeObserver.observe(i._element,{box:"device-pixel-content-box"})):(i._mediaQueryList=window.matchMedia("(resolution: ".concat(Vt(i._element),"dppx)")),i._mediaQueryList.addListener(i._mediaQueryListener))}).catch(function(t){return!1})}return t.prototype._resetPixelRatio=function(){var t=this;this._executeListener(function(){var e=t._element.clientWidth,i=t._element.clientHeight,n=t._nextPixelWidth/e,r=t._nextPixelHeight/i;t._width=e,t._height=i,t._pixelWidth=t._nextPixelWidth,t._pixelHeight=t._nextPixelHeight,t._element.width=t._nextPixelWidth,t._element.height=t._nextPixelHeight,t._ctx.scale(n,r)})},t.prototype._executeListener=function(t){var e=this;this._requestAnimationId===ae&&(this._requestAnimationId=oe(function(){e._ctx.clearRect(0,0,e._width,e._height),null===t||void 0===t||t(),e._listener(),e._requestAnimationId=ae}))},t.prototype.update=function(t,e){if(this._width!==t||this._height!==e){if(this._element.style.width="".concat(t,"px"),this._element.style.height="".concat(e,"px"),!this._supportedDevicePixelContentBox){var i=Vt(this._element);this._nextPixelWidth=Math.round(t*i),this._nextPixelHeight=Math.round(e*i),this._resetPixelRatio()}}else this._executeListener()},t.prototype.getElement=function(){return this._element},t.prototype.getContext=function(){return this._ctx},t.prototype.destroy=function(){Mt(this._resizeObserver)&&this._resizeObserver.unobserve(this._element),Mt(this._mediaQueryList)&&this._mediaQueryList.removeListener(this._mediaQueryListener)},t}();function Qi(t){var e={width:0,height:0,left:0,right:0,top:0,bottom:0};return Mt(t)&&wt(e,t),e}var tn=function(t){function e(e,i){var n=t.call(this)||this;return n._bounding=Qi(),n._pane=i,n._rootContainer=e,n._container=n.createContainer(),e.appendChild(n._container),n}return B(e,t),e.prototype.setBounding=function(t){return wt(this._bounding,t),this},e.prototype.getContainer=function(){return this._container},e.prototype.getBounding=function(){return this._bounding},e.prototype.getPane=function(){return this._pane},e.prototype.update=function(t){this.updateImp(this._container,this._bounding,null!==t&&void 0!==t?t:3)},e.prototype.destroy=function(){this._rootContainer.removeChild(this._container)},e}(hi),en=function(t){function e(e,i){var n=t.call(this,e,i)||this;n._mainCanvas=new Ji({position:"absolute",top:"0",left:"0",zIndex:"2",boxSizing:"border-box"},function(){n.updateMain(n._mainCanvas.getContext())}),n._overlayCanvas=new Ji({position:"absolute",top:"0",left:"0",zIndex:"2",boxSizing:"border-box"},function(){n.updateOverlay(n._overlayCanvas.getContext())});var r=n.getContainer();return r.appendChild(n._mainCanvas.getElement()),r.appendChild(n._overlayCanvas.getElement()),n}return B(e,t),e.prototype.createContainer=function(){return he("div",{margin:"0",padding:"0",position:"absolute",top:"0",overflow:"hidden",boxSizing:"border-box",zIndex:"1"})},e.prototype.updateImp=function(t,e,i){var n=e.width,r=e.height,a=e.left;t.style.left="".concat(a,"px");var o=i,s=t.clientWidth,l=t.clientHeight;switch(n===s&&r===l||(t.style.width="".concat(n,"px"),t.style.height="".concat(r,"px"),o=3),o){case 0:this._mainCanvas.update(n,r);break;case 1:this._overlayCanvas.update(n,r);break;case 3:case 4:this._mainCanvas.update(n,r),this._overlayCanvas.update(n,r);break}},e.prototype.destroy=function(){this._mainCanvas.destroy(),this._overlayCanvas.destroy()},e.prototype.getImage=function(t){var e=this.getBounding(),i=e.width,n=e.height,r=he("canvas",{width:"".concat(i,"px"),height:"".concat(n,"px"),boxSizing:"border-box"}),a=r.getContext("2d"),o=Vt(r);return r.width=i*o,r.height=n*o,a.scale(o,o),a.drawImage(this._mainCanvas.getElement(),0,0,i,n),t&&a.drawImage(this._overlayCanvas.getElement(),0,0,i,n),r},e}(tn);function nn(t){return"transparent"===t||"none"===t||/^[rR][gG][Bb][Aa]\(([\s]*(2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?)[\s]*,){3}[\s]*0[\s]*\)$/.test(t)||/^[hH][Ss][Ll][Aa]\(([\s]*(360|3[0-5][0-9]|[012]?[0-9][0-9]?)[\s]*,)([\s]*((100|[0-9][0-9]?)%|0)[\s]*,){2}([\s]*0[\s]*)\)$/.test(t)}function rn(t,e){var i=[];i=i.concat(e);for(var n=0;ns*s))return!0}return!1}function an(t,e,i){var n=[];n=n.concat(e);var r=i.style,a=void 0===r?O.Fill:r,o=i.color,s=void 0===o?"currentColor":o,l=i.borderSize,c=void 0===l?1:l,u=i.borderColor,d=void 0===u?"currentColor":u,h=i.borderStyle,p=void 0===h?N.Solid:h,f=i.borderDashedValue,v=void 0===f?[2,2]:f,g=(a===O.Fill||i.style===O.StrokeFill)&&(!Et(s)||!nn(s));g&&(t.fillStyle=s,n.forEach(function(e){var i=e.x,n=e.y,r=e.r;t.beginPath(),t.arc(i,n,r,0,2*Math.PI),t.closePath(),t.fill()})),(a===O.Stroke||i.style===O.StrokeFill)&&c>0&&!nn(d)&&(t.strokeStyle=d,t.lineWidth=c,p===N.Dashed?t.setLineDash(v):t.setLineDash([]),n.forEach(function(e){var i=e.x,n=e.y,r=e.r;(!g||r>c)&&(t.beginPath(),t.arc(i,n,r,0,2*Math.PI),t.closePath(),t.stroke())}))}var on={name:"circle",checkEventOn:rn,draw:function(t,e,i){an(t,e,i)}};function sn(t,e){var i=[];i=i.concat(e);for(var n=0;nt.y!==a[s].y>t.y&&t.x<(a[s].x-a[o].x)*(t.y-a[o].y)/(a[s].y-a[o].y)+a[o].x&&(r=!r);if(r)return!0}return!1}function ln(t,e,i){var n=[];n=n.concat(e);var r=i.style,a=void 0===r?O.Fill:r,o=i.color,s=void 0===o?"currentColor":o,l=i.borderSize,c=void 0===l?1:l,u=i.borderColor,d=void 0===u?"currentColor":u,h=i.borderStyle,p=void 0===h?N.Solid:h,f=i.borderDashedValue,v=void 0===f?[2,2]:f;a!==O.Fill&&i.style!==O.StrokeFill||Et(s)&&nn(s)||(t.fillStyle=s,n.forEach(function(e){var i=e.coordinates;t.beginPath(),t.moveTo(i[0].x,i[0].y);for(var n=1;n0&&!nn(d)&&(t.strokeStyle=d,t.lineWidth=c,p===N.Dashed?t.setLineDash(v):t.setLineDash([]),n.forEach(function(e){var i=e.coordinates;t.beginPath(),t.moveTo(i[0].x,i[0].y);for(var n=1;n=a&&t.x<=a+o&&t.y>=s&&t.y<=s+l)return!0}return!1}function dn(t,e,i){var n,r=[];r=r.concat(e);var a=i.style,o=void 0===a?O.Fill:a,s=i.color,l=void 0===s?"transparent":s,c=i.borderSize,u=void 0===c?1:c,d=i.borderColor,h=void 0===d?"transparent":d,p=i.borderStyle,f=void 0===p?N.Solid:p,v=i.borderRadius,g=void 0===v?0:v,m=i.borderDashedValue,y=void 0===m?[2,2]:m,b=null!==(n=t.roundRect)&&void 0!==n?n:t.rect,x=(o===O.Fill||i.style===O.StrokeFill)&&(!Et(l)||!nn(l));if(x&&(t.fillStyle=l,r.forEach(function(e){var i=e.x,n=e.y,r=e.width,a=e.height;t.beginPath(),b.call(t,i,n,r,a,g),t.closePath(),t.fill()})),(o===O.Stroke||i.style===O.StrokeFill)&&u>0&&!nn(h)){t.strokeStyle=h,t.fillStyle=h,t.lineWidth=u,f===N.Dashed?t.setLineDash(y):t.setLineDash([]);var _=u%2===1?.5:0,w=Math.round(2*_);r.forEach(function(e){var i=e.x,n=e.y,r=e.width,a=e.height;r>2*u&&a>2*u?(t.beginPath(),b.call(t,i+_,n+_,r-w,a-w,g),t.closePath(),t.stroke()):x||t.fillRect(i,n,r,a)})}}var hn={name:"rect",checkEventOn:un,draw:function(t,e,i){dn(t,e,i)}};function pn(t,e){var i,n,r=e.size,a=void 0===r?12:r,o=e.paddingLeft,s=void 0===o?0:o,l=e.paddingTop,c=void 0===l?0:l,u=e.paddingRight,d=void 0===u?0:u,h=e.paddingBottom,p=void 0===h?0:h,f=e.weight,v=void 0===f?"normal":f,g=e.family,m=t.x,y=t.y,b=t.text,x=t.align,_=void 0===x?"left":x,w=t.baseline,C=void 0===w?"top":w,S=t.width,k=t.height,A=null!==S&&void 0!==S?S:s+Ht(b,a,v,g)+d,T=null!==k&&void 0!==k?k:c+a+p;switch(_){case"left":case"start":i=m;break;case"right":case"end":i=m-A;break;default:i=m-A/2;break}switch(C){case"top":case"hanging":n=y;break;case"bottom":case"ideographic":case"alphabetic":n=y-T;break;default:n=y-T/2;break}return{x:i,y:n,width:A,height:T}}function fn(t,e,i){var n=[];n=n.concat(e);for(var r=0;r=o&&t.x<=o+l&&t.y>=s&&t.y<=s+c)return!0}return!1}function vn(t,e,i){var n=[];n=n.concat(e);var r=i.color,a=void 0===r?"currentColor":r,o=i.size,s=void 0===o?12:o,l=i.family,c=i.weight,u=i.paddingLeft,d=void 0===u?0:u,h=i.paddingTop,p=void 0===h?0:h,f=i.paddingRight,v=void 0===f?0:f,g=n.map(function(t){return pn(t,i)});dn(t,g,X(X({},i),{color:i.backgroundColor})),t.textAlign="left",t.textBaseline="top",t.font=$t(s,c,l),t.fillStyle=a,n.forEach(function(e,i){var n=g[i];t.fillText(e.text,n.x+d,n.y+p,n.width-d-v)})}var gn={name:"text",checkEventOn:fn,draw:function(t,e,i){vn(t,e,i)}},mn=gn;function yn(t,e){var i=t.x-e.x,n=t.y-e.y;return Math.sqrt(i*i+n*n)}function bn(t,e){var i=[];i=i.concat(e);for(var n=0;n=Math.min(l,u)-pi&&t.y<=Math.max(c,d)+pi&&t.y>=Math.min(c,d)-pi)return!0}}return!1}function xn(t,e,i){var n=[];n=n.concat(e);var r=i.style,a=void 0===r?N.Solid:r,o=i.size,s=void 0===o?1:o,l=i.color,c=void 0===l?"currentColor":l,u=i.dashedValue,d=void 0===u?[2,2]:u;t.lineWidth=s,t.strokeStyle=c,a===N.Dashed?t.setLineDash(d):t.setLineDash([]),n.forEach(function(e){var i=e.x,n=e.y,r=e.r,a=e.startAngle,o=e.endAngle;t.beginPath(),t.arc(i,n,r,a,o),t.stroke(),t.closePath()})}var _n={name:"arc",checkEventOn:bn,draw:function(t,e,i){xn(t,e,i)}},wn={},Cn=[on,_i,cn,hn,gn,mn,_n];function Sn(t){var e;return null!==(e=wn[t])&&void 0!==e?e:null}Cn.forEach(function(t){wn[t.name]=fi.extend(t)});var kn=function(t){function e(e){var i=t.call(this)||this;return i._widget=e,i}return B(e,t),e.prototype.getWidget=function(){return this._widget},e.prototype.createFigure=function(t,e){var i=Sn(t.name);if(null!==i){var n=new i(t);if(Mt(e)){for(var r in e)e.hasOwnProperty(r)&&n.registerEvent(r,e[r]);this.addChild(n)}return n}return null},e.prototype.draw=function(t){this.clear(),this.drawImp(t)},e}(hi),An=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i,n=this.getWidget(),r=this.getWidget().getPane(),a=r.getChart(),o=n.getBounding(),s=a.getStyles().grid,l=s.show;if(l){t.save(),t.globalCompositeOperation="destination-over";var c=s.horizontal,u=c.show;if(u){var d=r.getAxisComponent(),h=d.getTicks().map(function(t){return{coordinates:[{x:0,y:t.coord},{x:o.width,y:t.coord}]}});null===(e=this.createFigure({name:"line",attrs:h,styles:c}))||void 0===e||e.draw(t)}var p=s.vertical,f=p.show;if(f){var v=a.getXAxisPane().getAxisComponent();h=v.getTicks().map(function(t){return{coordinates:[{x:t.coord,y:0},{x:t.coord,y:o.height}]}});null===(i=this.createFigure({name:"line",attrs:h,styles:p}))||void 0===i||i.draw(t)}t.restore()}},e}(kn),Tn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.eachChildren=function(t){var e=this.getWidget().getPane(),i=e.getChart().getChartStore(),n=i.getVisibleDataList(),r=i.getTimeScaleStore().getBarSpace();n.forEach(function(e,i){t(e,r,i)})},e}(kn),Mn=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._boundCandleBarClickEvent=function(t){return function(){return e.getWidget().getPane().getChart().getChartStore().getActionStore().execute(Pt.OnCandleBarClick,t),!1}},e}return B(e,t),e.prototype.drawImp=function(t){var e=this,i=this.getWidget().getPane(),n=i.getId()===Vi.CANDLE,r=i.getChart().getChartStore(),a=this.getCandleBarOptions(r);if(null!==a){var o=0,s=0;if(a.type===H.Ohlc){var l=r.getTimeScaleStore().getBarSpace().gapBar;o=Math.min(Math.max(Math.round(.2*l),1),8),o>2&&o%2===1&&o--,s=Math.floor(s/2)}var c=i.getAxisComponent();this.eachChildren(function(i,r){var l=i.data,u=i.x;if(Mt(l)){var d=l.open,h=l.high,p=l.low,f=l.close,v=a.type,g=a.styles,m=[];f>d?(m[0]=g.upColor,m[1]=g.upBorderColor,m[2]=g.upWickColor):fd?e._createStrokeBar(u,x,r,m):e._createSolidBar(u,x,r,m);break;case H.CandleDownStroke:_=d>f?e._createStrokeBar(u,x,r,m):e._createSolidBar(u,x,r,m);break;case H.Ohlc:_=[{name:"rect",attrs:[{x:u-s,y:x[0],width:o,height:x[3]-x[0]},{x:u-r.halfGapBar,y:y+o>x[3]?x[3]-o:y,width:r.halfGapBar,height:o},{x:u+s,y:b+o>x[3]?x[3]-o:b,width:r.halfGapBar-s,height:o}],styles:{color:m[0]}}];break}_.forEach(function(r){var a,o;n&&(o={mouseClickEvent:e._boundCandleBarClickEvent(i)}),null===(a=e.createFigure(r,o))||void 0===a||a.draw(t)})}})}},e.prototype.getCandleBarOptions=function(t){var e=t.getStyles().candle;return{type:e.type,styles:e.bar}},e.prototype._createSolidBar=function(t,e,i,n){return[{name:"rect",attrs:{x:t,y:e[0],width:1,height:e[3]-e[0]},styles:{color:n[2]}},{name:"rect",attrs:{x:t-i.halfGapBar,y:e[1],width:i.gapBar,height:Math.max(1,e[2]-e[1])},styles:{style:O.StrokeFill,color:n[0],borderColor:n[1]}}]},e.prototype._createStrokeBar=function(t,e,i,n){return[{name:"rect",attrs:[{x:t,y:e[0],width:1,height:e[1]-e[0]},{x:t,y:e[2],width:1,height:e[3]-e[2]}],styles:{color:n[2]}},{name:"rect",attrs:{x:t-i.halfGapBar,y:e[1],width:i.gapBar,height:Math.max(1,e[2]-e[1])},styles:{style:O.Stroke,borderColor:n[1]}}]},e}(Tn),In=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.getCandleBarOptions=function(t){var e,i,n=this.getWidget().getPane(),r=n.getAxisComponent();if(!r.isInCandle()){var a=t.getIndicatorStore().getInstances(n.getId());try{for(var o=j(a),s=o.next();!s.done;s=o.next()){var l=s.value;if(l.shouldOhlc&&l.visible){var c=l.styles,u=t.getStyles().indicator,d=Ft(c,"ohlc.upColor",u.ohlc.upColor),h=Ft(c,"ohlc.downColor",u.ohlc.downColor),p=Ft(c,"ohlc.noChangeColor",u.ohlc.noChangeColor);return{type:H.Ohlc,styles:{upColor:d,downColor:h,noChangeColor:p,upBorderColor:d,downBorderColor:h,noChangeBorderColor:p,upWickColor:d,downWickColor:h,noChangeWickColor:p}}}}}catch(f){e={error:f}}finally{try{s&&!s.done&&(i=o.return)&&i.call(o)}finally{if(e)throw e.error}}}return null},e.prototype.drawImp=function(e){var i=this;t.prototype.drawImp.call(this,e);var n=this.getWidget(),r=n.getPane(),a=r.getChart(),o=n.getBounding(),s=a.getXAxisPane().getAxisComponent(),l=r.getAxisComponent(),c=a.getChartStore(),u=c.getDataList(),d=c.getTimeScaleStore(),h=d.getVisibleRange(),p=c.getIndicatorStore().getInstances(r.getId()),f=c.getStyles().indicator;e.save(),p.forEach(function(t){var n;if(t.visible){t.zLevel<0?e.globalCompositeOperation="destination-over":e.globalCompositeOperation="source-over";var r=!1;if(null!==t.draw&&(e.save(),r=null!==(n=t.draw({ctx:e,kLineDataList:u,indicator:t,visibleRange:h,bounding:o,barSpace:d.getBarSpace(),defaultStyles:f,xAxis:s,yAxis:l}))&&void 0!==n&&n,e.restore()),!r){var a=t.result,c=[];i.eachChildren(function(n,r){var d,h,p,v=r.halfGapBar,g=n.dataIndex,m=n.x,y=s.convertToPixel(g-1),b=s.convertToPixel(g+1),x=null!==(d=a[g-1])&&void 0!==d?d:null,_=null!==(h=a[g])&&void 0!==h?h:null,w=null!==(p=a[g+1])&&void 0!==p?p:null,C={x:y},S={x:m},k={x:b};t.figures.forEach(function(t){var e=t.key,i=null===x||void 0===x?void 0:x[e];Tt(i)&&(C[e]=l.convertToPixel(i));var n=null===_||void 0===_?void 0:_[e];Tt(n)&&(S[e]=l.convertToPixel(n));var r=null===w||void 0===w?void 0:w[e];Tt(r)&&(k[e]=l.convertToPixel(r))}),Ut(u,t,g,f,function(t,n,a){var u,d,h;if(Mt(null===_||void 0===_?void 0:_[t.key])){var p=S[t.key],f=null===(u=t.attrs)||void 0===u?void 0:u.call(t,{data:{prev:x,current:_,next:w},coordinate:{prev:C,current:S,next:k},bounding:o,barSpace:r,xAxis:s,yAxis:l});if(!Mt(f))switch(t.type){case"circle":f={x:m,y:p,r:Math.max(1,v)};break;case"rect":case"bar":var g=null!==(d=t.baseValue)&&void 0!==d?d:l.getRange().from,y=l.convertToPixel(g),b=Math.abs(y-p);g!==(null===_||void 0===_?void 0:_[t.key])&&(b=Math.max(1,b));var A=void 0;A=p>y?y:p,f={x:m-v,y:A,width:Math.max(1,2*v),height:b};break;case"line":Mt(c[a])||(c[a]=[]),Tt(S[t.key])&&Tt(k[t.key])&&c[a].push({coordinates:[{x:S.x,y:S[t.key]},{x:k.x,y:k[t.key]}],styles:n});break}var T=t.type;Mt(f)&&"line"!==T&&(null===(h=i.createFigure({name:"bar"===T?"rect":T,attrs:f,styles:n}))||void 0===h||h.draw(e))}})}),c.forEach(function(t){if(t.length>1){for(var n=[{coordinates:[t[0].coordinates[0],t[0].coordinates[1]],styles:t[0].styles}],r=1;r0,S=_.length>0;if(C||S){var k=q(p.classifyTooltipIcons(w),3),A=k[0],T=k[1],M=k[2];if(g=p.drawStandardTooltipIcons(t,r,A,m,e,a.name,c,g,d),C){var I=b;x.length>0&&(I="".concat(I).concat(x)),g=p.drawStandardTooltipLegends(t,[{title:{text:"",color:v.color},value:{text:I,color:v.color}}],m,c,g,d,v)}g=p.drawStandardTooltipIcons(t,r,T,m,e,a.name,c,g,d),S&&(g=p.drawStandardTooltipLegends(t,_,m,c,g,d,f.text)),g=p.drawStandardTooltipIcons(t,r,M,m,e,a.name,c,g,d),u=m.y+g}})}return u},e.prototype.drawStandardTooltipIcons=function(t,e,i,n,r,a,o,s,l){var c=this;if(i.length>0){var u=0,d=0;i.forEach(function(e){var i=e.marginLeft,n=void 0===i?0:i,r=e.marginTop,a=void 0===r?0:r,o=e.marginRight,s=void 0===o?0:o,l=e.marginBottom,c=void 0===l?0:l,h=e.paddingLeft,p=void 0===h?0:h,f=e.paddingTop,v=void 0===f?0:f,g=e.paddingRight,m=void 0===g?0:g,y=e.paddingBottom,b=void 0===y?0:y,x=e.size,_=e.fontFamily,w=e.icon;t.font=$t(x,"normal",_),u+=n+p+t.measureText(w).width+m+s,d=Math.max(d,a+v+x+b+c)}),n.x+u>l?(n.x=o,n.y+=s,s=d):s=Math.max(s,d),i.forEach(function(i){var o,s=i.marginLeft,l=void 0===s?0:s,u=i.marginTop,d=void 0===u?0:u,h=i.marginRight,p=void 0===h?0:h,f=i.paddingLeft,v=void 0===f?0:f,g=i.paddingTop,m=void 0===g?0:g,y=i.paddingRight,b=void 0===y?0:y,x=i.paddingBottom,_=void 0===x?0:x,w=i.color,C=i.activeColor,S=i.size,k=i.fontFamily,A=i.icon,T=i.backgroundColor,M=i.activeBackgroundColor,I=(null===e||void 0===e?void 0:e.paneId)===r&&(null===e||void 0===e?void 0:e.indicatorName)===a&&(null===e||void 0===e?void 0:e.iconId)===i.id;null===(o=c.createFigure({name:"text",attrs:{text:A,x:n.x+l,y:n.y+d},styles:{paddingLeft:v,paddingTop:m,paddingRight:b,paddingBottom:_,color:I?C:w,size:S,family:k,backgroundColor:I?M:T}},{mouseClickEvent:c._boundIconClickEvent({paneId:r,indicatorName:a,iconId:i.id}),mouseMoveEvent:c._boundIconMouseMoveEvent({paneId:r,indicatorName:a,iconId:i.id})}))||void 0===o||o.draw(t),n.x+=l+v+t.measureText(A).width+b+p})}return s},e.prototype.drawStandardTooltipLegends=function(t,e,i,n,r,a,o){var s=this;if(e.length>0){var l=o.marginLeft,c=o.marginTop,u=o.marginRight,d=o.marginBottom,h=o.size,p=o.family,f=o.weight;t.font=$t(h,f,p),e.forEach(function(e){var o,v,g=e.title,m=e.value,y=t.measureText(g.text).width,b=t.measureText(m.text).width,x=y+b,_=c+h+d;i.x+l+x+u>a?(i.x=n,i.y+=r,r=_):r=Math.max(r,_),g.text.length>0&&(null===(o=s.createFigure({name:"text",attrs:{x:i.x+l,y:i.y+c,text:g.text},styles:{color:g.color,size:h,family:p,weight:f}}))||void 0===o||o.draw(t)),null===(v=s.createFigure({name:"text",attrs:{x:i.x+l+y,y:i.y+c,text:m.text},styles:{color:m.color,size:h,family:p,weight:f}}))||void 0===v||v.draw(t),i.x+=l+x+u})}return r},e.prototype.isDrawTooltip=function(t,e){var i=e.showRule;return i===z.Always||i===z.FollowCross&&Et(t.paneId)},e.prototype.getIndicatorTooltipData=function(t,e,i,n,r,a,o){var s,l,c=o.tooltip,u=c.showName?i.shortName:"",d="",h=i.calcParams;h.length>0&&c.showParams&&(d="(".concat(h.join(","),")"));var p={name:u,calcParamsText:d,values:[],icons:c.icons},f=e.dataIndex,v=null!==(s=i.result)&&void 0!==s?s:[],g=[];if(i.visible){var m=null!==(l=v[f])&&void 0!==l?l:{};Ut(t,i,f,o,function(t,e){var o;if(Et(t.title)){var s=e.color,l=null!==(o=m[t.key])&&void 0!==o?o:c.defaultValue;Tt(l)&&(l=Nt(l,i.precision),i.shouldFormatBigNumber&&(l=n.formatBigNumber(l)),l=Wt(zt(l,r),a)),g.push({title:{text:t.title,color:s},value:{text:l,color:s}})}}),p.values=g}if(null!==i.createTooltipDataSource){var y=this.getWidget(),b=y.getPane(),x=b.getChart().getChartStore(),_=i.createTooltipDataSource({kLineDataList:t,indicator:i,visibleRange:x.getTimeScaleStore().getVisibleRange(),bounding:y.getBounding(),crosshair:e,defaultStyles:o,xAxis:b.getChart().getXAxisPane().getAxisComponent(),yAxis:b.getAxisComponent()}),w=_.name,C=_.calcParamsText,S=_.values,k=_.icons;if(Et(w)&&c.showName&&(p.name=w),Et(C)&&c.showParams&&(p.calcParamsText=C),Mt(k)&&(p.icons=k),Mt(S)&&i.visible){var A=[],T=o.tooltip.text.color;S.forEach(function(t){var e,o={text:"",color:T};At(t.title)?o=t.title:o.text=t.title;var s={text:"",color:T};if(At(t.value)?s=t.value:s.text=null!==(e=t.value)&&void 0!==e?e:c.defaultValue,Tt(s.text)){var l=Nt(s.text,i.precision);i.shouldFormatBigNumber&&(l=n.formatBigNumber(l)),l=Wt(zt(l,r),a),s.text=l}A.push({title:o,value:s})}),p.values=A}}return p},e.prototype.classifyTooltipIcons=function(t){var e=[],i=[],n=[];return t.forEach(function(t){switch(t.position){case V.Left:e.push(t);break;case V.Middle:i.push(t);break;case V.Right:n.push(t);break}}),[e,i,n]},e}(kn),Pn=function(t){function e(e){var i=t.call(this,e)||this;return i._initEvent(),i}return B(e,t),e.prototype._initEvent=function(){var t=this,e=this.getWidget().getPane(),i=e.getId(),n=e.getChart().getChartStore().getOverlayStore();this.registerEvent("mouseMoveEvent",function(e){var r,a=n.getProgressInstanceInfo();if(null!==a){var o=a.instance,s=a.paneId;o.isStart()&&(n.updateProgressInstanceInfo(i),s=i);var l=o.points.length-1,c="".concat(ee,"point_").concat(l);return o.isDrawing()&&s===i&&(o.eventMoveForDrawing(t._coordinateToPoint(a.instance,e)),null===(r=o.onDrawing)||void 0===r||r.call(o,X({overlay:o,figureKey:c,figureIndex:l},e))),t._figureMouseMoveEvent(o,1,c,l,0)(e)}return n.setHoverInstanceInfo({paneId:i,instance:null,figureType:0,figureKey:"",figureIndex:-1,attrsIndex:-1},e),!1}).registerEvent("mouseClickEvent",function(e){var r,a,o=n.getProgressInstanceInfo();if(null!==o){var s=o.instance,l=o.paneId;s.isStart()&&(n.updateProgressInstanceInfo(i,!0),l=i);var c=s.points.length-1,u="".concat(ee,"point_").concat(c);return s.isDrawing()&&l===i&&(s.eventMoveForDrawing(t._coordinateToPoint(s,e)),null===(r=s.onDrawing)||void 0===r||r.call(s,X({overlay:s,figureKey:u,figureIndex:c},e)),s.nextStep(),s.isDrawing()||(n.progressInstanceComplete(),null===(a=s.onDrawEnd)||void 0===a||a.call(s,X({overlay:s,figureKey:u,figureIndex:c},e)))),t._figureMouseClickEvent(s,1,u,c,0)(e)}return n.setClickInstanceInfo({paneId:i,instance:null,figureType:0,figureKey:"",figureIndex:-1,attrsIndex:-1},e),!1}).registerEvent("mouseDoubleClickEvent",function(e){var r,a=n.getProgressInstanceInfo();if(null!==a){var o=a.instance,s=a.paneId;if(o.isDrawing()&&s===i&&(o.forceComplete(),!o.isDrawing())){n.progressInstanceComplete();var l=o.points.length-1,c="".concat(ee,"point_").concat(l);null===(r=o.onDrawEnd)||void 0===r||r.call(o,X({overlay:o,figureKey:c,figureIndex:l},e))}var u=o.points.length-1;return t._figureMouseClickEvent(o,1,"".concat(ee,"point_").concat(u),u,0)(e)}return!1}).registerEvent("mouseRightClickEvent",function(e){var i=n.getProgressInstanceInfo();if(null!==i){var r=i.instance;if(r.isDrawing()){var a=r.points.length-1;return t._figureMouseRightClickEvent(r,1,"".concat(ee,"point_").concat(a),a,0)(e)}}return!1}).registerEvent("mouseUpEvent",function(t){var e,r=n.getPressedInstanceInfo(),a=r.instance,o=r.figureIndex,s=r.figureKey;return null!==a&&(null===(e=a.onPressedMoveEnd)||void 0===e||e.call(a,X({overlay:a,figureKey:s,figureIndex:o},t))),n.setPressedInstanceInfo({paneId:i,instance:null,figureType:0,figureKey:"",figureIndex:-1,attrsIndex:-1}),!1}).registerEvent("pressedMouseMoveEvent",function(e){var i,r,a=n.getPressedInstanceInfo(),o=a.instance,s=a.figureType,l=a.figureIndex,c=a.figureKey;if(null!==o){if(!o.lock&&(null===(r=null===(i=o.onPressedMoving)||void 0===i?void 0:i.call(o,X({overlay:o,figureIndex:l,figureKey:c},e)))||void 0===r||!r)){var u=t._coordinateToPoint(o,e);1===s?o.eventPressedPointMove(u,l):o.eventPressedOtherMove(u,t.getWidget().getPane().getChart().getChartStore().getTimeScaleStore())}return!0}return!1})},e.prototype._createFigureEvents=function(t,e,i,n,r,a){var o;if(!t.isDrawing()){var s=[];if(Mt(a)&&(It(a)?a&&(s=qt()):s=a),0===s.length)return{mouseMoveEvent:this._figureMouseMoveEvent(t,e,i,n,r),mouseDownEvent:this._figureMouseDownEvent(t,e,i,n,r),mouseClickEvent:this._figureMouseClickEvent(t,e,i,n,r),mouseRightClickEvent:this._figureMouseRightClickEvent(t,e,i,n,r),mouseDoubleClickEvent:this._figureMouseDoubleClickEvent(t,e,i,n,r)};o={},s.includes("mouseMoveEvent")||s.includes("touchMoveEvent")||(o.mouseMoveEvent=this._figureMouseMoveEvent(t,e,i,n,r)),s.includes("mouseDownEvent")||s.includes("touchStartEvent")||(o.mouseDownEvent=this._figureMouseDownEvent(t,e,i,n,r)),s.includes("mouseClickEvent")||s.includes("tapEvent")||(o.mouseClickEvent=this._figureMouseClickEvent(t,e,i,n,r)),s.includes("mouseDoubleClickEvent")||s.includes("doubleTapEvent")||(o.mouseDoubleClickEvent=this._figureMouseDoubleClickEvent(t,e,i,n,r)),s.includes("mouseRightClickEvent")||(o.mouseRightClickEvent=this._figureMouseRightClickEvent(t,e,i,n,r))}return o},e.prototype._figureMouseMoveEvent=function(t,e,i,n,r){var a=this;return function(o){var s=a.getWidget().getPane(),l=s.getChart().getChartStore().getOverlayStore();return l.setHoverInstanceInfo({paneId:s.getId(),instance:t,figureType:e,figureKey:i,figureIndex:n,attrsIndex:r},o),!0}},e.prototype._figureMouseDownEvent=function(t,e,i,n,r){var a=this;return function(o){var s,l=a.getWidget().getPane(),c=l.getId(),u=l.getChart().getChartStore().getOverlayStore();return t.startPressedMove(a._coordinateToPoint(t,o)),null===(s=t.onPressedMoveStart)||void 0===s||s.call(t,X({overlay:t,figureIndex:n,figureKey:i},o)),u.setPressedInstanceInfo({paneId:c,instance:t,figureType:e,figureKey:i,figureIndex:n,attrsIndex:r}),!0}},e.prototype._figureMouseClickEvent=function(t,e,i,n,r){var a=this;return function(o){var s=a.getWidget().getPane(),l=s.getId(),c=s.getChart().getChartStore().getOverlayStore();return c.setClickInstanceInfo({paneId:l,instance:t,figureType:e,figureKey:i,figureIndex:n,attrsIndex:r},o),!0}},e.prototype._figureMouseDoubleClickEvent=function(t,e,i,n,r){return function(e){var r;return null===(r=t.onDoubleClick)||void 0===r||r.call(t,X(X({},e),{figureIndex:n,figureKey:i,overlay:t})),!0}},e.prototype._figureMouseRightClickEvent=function(t,e,i,n,r){var a=this;return function(e){var r,o;if(null===(o=null===(r=t.onRightClick)||void 0===r?void 0:r.call(t,X({overlay:t,figureIndex:n,figureKey:i},e)))||void 0===o||!o){var s=a.getWidget().getPane(),l=s.getChart().getChartStore().getOverlayStore();l.removeInstance(t)}return!0}},e.prototype._coordinateToPoint=function(t,e){var i,n={},r=this.getWidget().getPane(),a=r.getChart(),o=r.getId(),s=a.getChartStore().getTimeScaleStore();if(this.coordinateToPointTimestampDataIndexFlag()){var l=a.getXAxisPane().getAxisComponent(),c=l.convertFromPixel(e.x),u=null!==(i=s.dataIndexToTimestamp(c))&&void 0!==i?i:void 0;n.dataIndex=c,n.timestamp=u}if(this.coordinateToPointValueFlag()){var d=r.getAxisComponent(),h=d.convertFromPixel(e.y);if(t.mode!==Gt.Normal&&o===Vi.CANDLE&&Tt(n.dataIndex)){var p=s.getDataByDataIndex(n.dataIndex);if(null!==p){var f=t.modeSensitivity;if(h>p.high)if(t.mode===Gt.WeakMagnet){var v=d.convertToPixel(p.high),g=d.convertFromPixel(v-f);hg&&(h=p.low)}else h=p.low;else{var y=Math.max(p.open,p.close),b=Math.min(p.open,p.close);h=h>y?h-y0){var m=(new Array).concat(this.getFigures(e,g,i,n,r,s,l,a,c,u,d));this.drawFigures(t,e,m,c)}this.drawDefaultFigures(t,e,g,i,r,a,o,s,l,c,u,d,h,p)},e.prototype.drawFigures=function(t,e,i,n){var r=this;i.forEach(function(i,a){var o=i.type,s=i.styles,l=i.attrs,c=i.ignoreEvent,u=[].concat(l);u.forEach(function(l,u){var d,h,p,f=r._createFigureEvents(e,2,null!==(d=i.key)&&void 0!==d?d:"",a,u,c),v=X(X(X({},n[o]),null===(h=e.styles)||void 0===h?void 0:h[o]),s);null===(p=r.createFigure({name:o,attrs:l,styles:v},f))||void 0===p||p.draw(t)})})},e.prototype.getCompleteOverlays=function(t,e){return t.getInstances(e)},e.prototype.getProgressOverlay=function(t,e){return t.paneId===e?t.instance:null},e.prototype.getFigures=function(t,e,i,n,r,a,o,s,l,c,u){var d,h;return null!==(h=null===(d=t.createPointFigures)||void 0===d?void 0:d.call(t,{overlay:t,coordinates:e,bounding:i,barSpace:n,precision:r,thousandsSeparator:a,decimalFoldThreshold:o,dateTimeFormat:s,defaultStyles:l,xAxis:c,yAxis:u}))&&void 0!==h?h:[]},e.prototype.drawDefaultFigures=function(t,e,i,n,r,a,o,s,l,c,u,d,h,p){var f,v,g=this;if(e.needDefaultPointFigure&&((null===(f=h.instance)||void 0===f?void 0:f.id)===e.id&&0!==h.figureType||(null===(v=p.instance)||void 0===v?void 0:v.id)===e.id&&0!==p.figureType)){var m=e.styles,y=X(X({},c.point),null===m||void 0===m?void 0:m.point);i.forEach(function(i,n){var r,a,o,s=i.x,l=i.y,c=y.radius,u=y.color,d=y.borderColor,p=y.borderSize;(null===(r=h.instance)||void 0===r?void 0:r.id)===e.id&&1===h.figureType&&h.figureIndex===n&&(c=y.activeRadius,u=y.activeColor,d=y.activeBorderColor,p=y.activeBorderSize),null===(a=g.createFigure({name:"circle",attrs:{x:s,y:l,r:c+p},styles:{color:d}},g._createFigureEvents(e,1,"".concat(ee,"point_").concat(n),n,0)))||void 0===a||a.draw(t),null===(o=g.createFigure({name:"circle",attrs:{x:s,y:l,r:c},styles:{color:u}}))||void 0===o||o.draw(t)})}},e}(kn),Ln=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._gridView=new An(n),n._indicatorView=new In(n),n._crosshairLineView=new En(n),n._tooltipView=n.createTooltipView(),n._overlayView=new Pn(n),n.addChild(n._tooltipView),n.addChild(n._overlayView),n.getContainer().style.cursor="crosshair",n.registerEvent("mouseMoveEvent",function(){return i.getChart().getChartStore().getTooltipStore().setActiveIcon(),!1}),n}return B(e,t),e.prototype.getName=function(){return ji.MAIN},e.prototype.updateMain=function(t){this.updateMainContent(t),this._indicatorView.draw(t),this._gridView.draw(t)},e.prototype.createTooltipView=function(){return new Dn(this)},e.prototype.updateMainContent=function(t){},e.prototype.updateOverlay=function(t){this._overlayView.draw(t),this._crosshairLineView.draw(t),this._tooltipView.draw(t)},e}(en),Rn=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._ripplePoint=e.createFigure({name:"circle",attrs:{x:0,y:0,r:0},styles:{style:"fill"}}),e._animationFrameTime=0,e._animation=new le({iterationCount:1/0}).doFrame(function(t){e._animationFrameTime=t;var i=e.getWidget().getPane();i.getChart().updatePane(0,i.getId())}),e}return B(e,t),e.prototype.drawImp=function(t){var e,i,n,r=this.getWidget(),a=r.getPane(),o=a.getChart(),s=o.getDataList(),l=s.length-1,c=r.getBounding(),u=a.getAxisComponent(),d=o.getStyles().candle.area,h=[],p=Number.MAX_SAFE_INTEGER,f=Number.MIN_SAFE_INTEGER,v=null;if(this.eachChildren(function(t){var e=t.data,i=t.x,n=null===e||void 0===e?void 0:e[d.value];if(Tt(n)){var r=u.convertToPixel(n);f===Number.MIN_SAFE_INTEGER&&(f=i),h.push({x:i,y:r}),p=Math.min(p,r),t.dataIndex===l&&(v={x:i,y:r})}}),h.length>0){null===(e=this.createFigure({name:"line",attrs:{coordinates:h},styles:{color:d.lineColor,size:d.lineSize,smooth:d.smooth}}))||void 0===e||e.draw(t);var g=d.backgroundColor,m=void 0;if(St(g)){var y=t.createLinearGradient(0,c.height,0,p);try{g.forEach(function(t){var e=t.offset,i=t.color;y.addColorStop(e,i)})}catch(_){}m=y}else m=g;t.fillStyle=m,t.beginPath(),t.moveTo(f,c.height),t.lineTo(h[0].x,h[0].y),bi(t,h,d.smooth),t.lineTo(h[h.length-1].x,c.height),t.closePath(),t.fill()}var b=d.point;if(b.show&&Mt(v)){null===(i=this.createFigure({name:"circle",attrs:{x:v.x,y:v.y,r:b.radius},styles:{style:"fill",color:b.color}}))||void 0===i||i.draw(t);var x=b.rippleRadius;b.animation&&(x=b.radius+this._animationFrameTime/b.animationDuration*(b.rippleRadius-b.radius),this._animation.setDuration(b.animationDuration).start()),null===(n=this._ripplePoint)||void 0===n||n.setAttrs({x:v.x,y:v.y,r:x}).setStyles({style:"fill",color:b.rippleColor}).draw(t)}else this.stopAnimation()},e.prototype.stopAnimation=function(){this._animation.stop()},e}(Tn),Fn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e=this.getWidget(),i=e.getPane(),n=i.getChart().getChartStore(),r=n.getStyles().candle.priceMark,a=r.high,o=r.low;if(r.show&&(a.show||o.show)){var s=n.getThousandsSeparator(),l=n.getDecimalFoldThreshold(),c=n.getPrecision(),u=i.getAxisComponent(),d=Number.MIN_SAFE_INTEGER,h=0,p=Number.MAX_SAFE_INTEGER,f=0;this.eachChildren(function(t){var e=t.data,i=t.x;Mt(e)&&(de.low&&(p=e.low,f=i))});var v=u.convertToPixel(d),g=u.convertToPixel(p);a.show&&d!==Number.MIN_SAFE_INTEGER&&this._drawMark(t,Wt(zt(Nt(d,c.price),s),l),{x:h,y:v},vp/2?(l=d-5,c=l-r.textOffset,u="right"):(l=d+5,u="left",c=l+r.textOffset);var f=h+n[1];null===(o=this.createFigure({name:"line",attrs:{coordinates:[{x:d,y:h},{x:d,y:f},{x:l,y:f}]},styles:{color:r.color}}))||void 0===o||o.draw(t),null===(s=this.createFigure({name:"text",attrs:{x:c,y:f,text:e,align:u,baseline:"middle"},styles:{color:r.color,size:r.textSize,family:r.textFamily,weight:r.textWeight}}))||void 0===s||s.draw(t)},e}(Tn),Bn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i=this.getWidget(),n=i.getPane(),r=i.getBounding(),a=n.getChart().getChartStore(),o=a.getStyles().candle.priceMark,s=o.last,l=s.line;if(o.show&&s.show&&l.show){var c=n.getAxisComponent(),u=a.getDataList(),d=u[u.length-1];if(null!=d){var h=d.close,p=d.open,f=c.convertToNicePixel(h),v=void 0;v=h>p?s.upColor:h0&&(x=this.drawStandardTooltipLegends(t,C,_,d,x,p,b)),x=this.drawStandardTooltipIcons(t,r,T,_,i,"",d,x,p)}return _.y+x},e.prototype._drawRectTooltip=function(t,e,i,n,r,a,o,s,l,c,u,d,h,p,f,v){var g,m,y,b,x,_=this,w=v.candle,C=v.indicator,S=w.tooltip,k=C.tooltip;if(h||p){var A=null!==(g=a.dataIndex)&&void 0!==g?g:0,T=this._getCandleTooltipLegends({prev:null!==(m=e[A-1])&&void 0!==m?m:null,current:a.kLineData,next:null!==(y=e[A+1])&&void 0!==y?y:null},o,s,l,c,u,d,w),M=S.offsetLeft,I=S.offsetTop,E=S.offsetRight,D=S.offsetBottom,P=S.text,L=P.marginLeft,R=P.marginRight,F=P.marginTop,B=P.marginBottom,N=P.size,z=P.weight,W=P.family,V=S.rect,H=V.position,Y=V.paddingLeft,X=V.paddingRight,U=V.paddingTop,G=V.paddingBottom,j=V.offsetLeft,q=V.offsetRight,Z=V.offsetTop,J=V.offsetBottom,Q=V.borderSize,tt=V.borderRadius,et=V.borderColor,it=V.color,nt=0,rt=0,at=0;h&&(t.font=$t(N,z,W),T.forEach(function(e){var i=e.title,n=e.value,r="".concat(i.text).concat(n.text),a=t.measureText(r).width+L+R;nt=Math.max(nt,a)}),at+=(B+F+N)*T.length);var ot=k.text,st=ot.marginLeft,lt=ot.marginRight,ct=ot.marginTop,ut=ot.marginBottom,dt=ot.size,ht=ot.weight,pt=ot.family,ft=[];if(p&&(t.font=$t(dt,ht,pt),i.forEach(function(i){var n,r=null!==(n=_.getIndicatorTooltipData(e,a,i,c,u,d,C).values)&&void 0!==n?n:[];ft.push(r),r.forEach(function(e){var i=e.title,n=e.value,r="".concat(i.text).concat(n.text),a=t.measureText(r).width+st+lt;nt=Math.max(nt,a),at+=ct+ut+dt})})),rt+=nt,0!==rt&&0!==at){rt+=2*Q+Y+X,at+=2*Q+U+G;var vt=n.width/2,gt=H===$.Pointer&&a.paneId===Vi.CANDLE,mt=(null!==(b=a.realX)&&void 0!==b?b:0)>vt,yt=0;if(gt){var bt=a.realX;yt=mt?bt-q-rt:bt+j}else mt?(yt=j+M,v.yAxis.inside&&v.yAxis.position===K.Left&&(yt+=r.width)):(yt=n.width-q-rt-E,v.yAxis.inside&&v.yAxis.position===K.Right&&(yt-=r.width));var xt=f+Z;if(gt){var _t=a.y;xt=_t-at/2,xt+at>n.height-J-D&&(xt=n.height-J-at-D),xt1){var c="{".concat(l[1],"}");o.text=o.text.replace(c,null!==(e=x[c])&&void 0!==e?e:p.defaultValue),"{change}"===c&&(o.color=0===m?s.priceMark.last.noChangeColor:m>0?s.priceMark.last.upColor:s.priceMark.last.downColor)}return{title:a,value:o}})},e}(Dn),$n=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._candleBarView=new Mn(n),n._candleAreaView=new Rn(n),n._candleHighLowPriceView=new Fn(n),n._candleLastPriceLineView=new Bn(n),n.addChild(n._candleBarView),n}return B(e,t),e.prototype.updateMainContent=function(t){var e=this.getPane().getChart().getStyles().candle;e.type!==H.Area?(this._candleBarView.draw(t),this._candleHighLowPriceView.draw(t),this._candleAreaView.stopAnimation()):this._candleAreaView.draw(t),this._candleLastPriceLineView.draw(t)},e.prototype.createTooltipView=function(){return new Vn(this)},e}(Ln),Hn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i,n=this,r=this.getWidget(),a=r.getPane(),o=r.getBounding(),s=a.getAxisComponent(),l=this.getAxisStyles(a.getChart().getStyles());if(l.show){l.axisLine.show&&(null===(e=this.createFigure({name:"line",attrs:this.createAxisLine(o,l),styles:l.axisLine}))||void 0===e||e.draw(t));var c=s.getTicks();if(l.tickLine.show){var u=this.createTickLines(c,o,l);u.forEach(function(e){var i;null===(i=n.createFigure({name:"line",attrs:e,styles:l.tickLine}))||void 0===i||i.draw(t)})}if(l.tickText.show){var d=this.createTickTexts(c,o,l);null===(i=this.createFigure({name:"text",attrs:d,styles:l.tickText}))||void 0===i||i.draw(t)}}},e}(kn),Kn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.getAxisStyles=function(t){return t.yAxis},e.prototype.createAxisLine=function(t,e){var i,n=this.getWidget().getPane().getAxisComponent(),r=e.axisLine.size;return i=n.isFromZero()?0:t.width-r,{coordinates:[{x:i,y:0},{x:i,y:t.height}]}},e.prototype.createTickLines=function(t,e,i){var n=this.getWidget().getPane().getAxisComponent(),r=i.axisLine,a=i.tickLine,o=0,s=0;return n.isFromZero()?(o=0,r.show&&(o+=r.size),s=o+a.length):(o=e.width,r.show&&(o-=r.size),s=o-a.length),t.map(function(t){return{coordinates:[{x:o,y:t.coord},{x:s,y:t.coord}]}})},e.prototype.createTickTexts=function(t,e,i){var n=this.getWidget().getPane().getAxisComponent(),r=i.axisLine,a=i.tickLine,o=i.tickText,s=0;n.isFromZero()?(s=o.marginStart,r.show&&(s+=r.size),a.show&&(s+=a.length)):(s=e.width-o.marginEnd,r.show&&(s-=r.size),a.show&&(s-=a.length));var l=this.getWidget().getPane().getAxisComponent().isFromZero()?"left":"right";return t.map(function(t){return{x:s,y:t.coord,text:t.text,align:l,baseline:"middle"}})},e}(Hn),Yn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i=this.getWidget(),n=i.getPane(),r=i.getBounding(),a=n.getChart().getChartStore(),o=a.getStyles().candle.priceMark,s=o.last,l=s.text;if(o.show&&s.show&&l.show){var c=a.getPrecision(),u=n.getAxisComponent(),d=a.getDataList(),h=d[d.length-1];if(Mt(h)){var p=h.close,f=h.open,v=u.convertToNicePixel(p),g=void 0;g=p>f?s.upColor:p1&&p.unshift({type:"rect",attrs:{x:0,y:g,width:i.width,height:m-g},ignoreEvent:!0})}return p},e.prototype.getFigures=function(t,e,i,n,r,a,o,s,l,c,u){var d,h;return null!==(h=null===(d=t.createYAxisFigures)||void 0===d?void 0:d.call(t,{overlay:t,coordinates:e,bounding:i,barSpace:n,precision:r,thousandsSeparator:a,decimalFoldThreshold:o,dateTimeFormat:s,defaultStyles:l,xAxis:c,yAxis:u}))&&void 0!==h?h:[]},e}(Pn),Gn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i=this.getWidget(),n=i.getPane(),r=i.getBounding(),a=i.getPane().getChart().getChartStore(),o=a.getTooltipStore().getCrosshair(),s=a.getStyles().crosshair;if(Et(o.paneId)&&this.compare(o,n.getId())&&s.show){var l=this.getDirectionStyles(s),c=l.text;if(l.show&&c.show){var u=n.getAxisComponent(),d=this.getText(o,a,u);t.font=$t(c.size,c.weight,c.family),null===(e=this.createFigure({name:"text",attrs:this.getTextAttrs(d,t.measureText(d).width,o,r,u,c),styles:c}))||void 0===e||e.draw(t)}}},e.prototype.compare=function(t,e){return t.paneId===e},e.prototype.getDirectionStyles=function(t){return t.horizontal},e.prototype.getText=function(t,e,i){var n,r=i,a=i.convertFromPixel(t.y);if(r.getType()===Y.Percentage){var o=e.getVisibleFirstData();n="".concat(((a-o.close)/o.close*100).toFixed(2),"%")}else{var s=e.getIndicatorStore().getInstances(t.paneId),l=0,c=!1;r.isInCandle()?l=e.getPrecision().price:s.forEach(function(t){l=Math.max(t.precision,l),c||(c=t.shouldFormatBigNumber)}),n=Nt(a,l),c&&(n=e.getCustomApi().formatBigNumber(n))}return Wt(zt(n,e.getThousandsSeparator()),e.getDecimalFoldThreshold())},e.prototype.getTextAttrs=function(t,e,i,n,r,a){var o,s,l=r;return l.isFromZero()?(o=0,s="left"):(o=n.width,s="right"),{x:o,y:i.y,text:t,align:s,baseline:"middle"}},e}(kn),jn=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._yAxisView=new Kn(n),n._candleLastPriceLabelView=new Yn(n),n._indicatorLastValueView=new Xn(n),n._overlayYAxisView=new Un(n),n._crosshairHorizontalLabelView=new Gn(n),n.getContainer().style.cursor="ns-resize",n.addChild(n._overlayYAxisView),n}return B(e,t),e.prototype.getName=function(){return ji.Y_AXIS},e.prototype.updateMain=function(t){this._yAxisView.draw(t),this.getPane().getAxisComponent().isInCandle()&&this._candleLastPriceLabelView.draw(t),this._indicatorLastValueView.draw(t)},e.prototype.updateOverlay=function(t){this._overlayYAxisView.draw(t),this._crosshairHorizontalLabelView.draw(t)},e}(en),qn=function(){function t(t){this._range={from:0,to:0,range:0,realFrom:0,realTo:0,realRange:0},this._prevRange={from:0,to:0,range:0,realFrom:0,realTo:0,realRange:0},this._ticks=[],this._autoCalcTickFlag=!0,this._parent=t}return t.prototype.getParent=function(){return this._parent},t.prototype.buildTicks=function(t){if(this._autoCalcTickFlag&&(this._range=this.calcRange()),this._prevRange.from!==this._range.from||this._prevRange.to!==this._range.to||t){this._prevRange=this._range;var e=this.optimalTicks(this._calcTicks());return this._ticks=this.createTicks({range:this._range,bounding:this.getSelfBounding(),defaultTicks:e}),!0}return!1},t.prototype.getTicks=function(){return this._ticks},t.prototype.getScrollZoomEnabled=function(){var t;return null===(t=this.getParent().getOptions().axisOptions.scrollZoomEnabled)||void 0===t||t},t.prototype.setRange=function(t){this._autoCalcTickFlag=!1,this._range=t},t.prototype.getRange=function(){return this._range},t.prototype.setAutoCalcTickFlag=function(t){this._autoCalcTickFlag=t},t.prototype.getAutoCalcTickFlag=function(){return this._autoCalcTickFlag},t.prototype._calcTicks=function(){var t=this._range,e=t.realFrom,i=t.realTo,n=t.realRange,r=[];if(n>=0){var a=q(this._calcTickInterval(n),2),o=a[0],s=a[1],l=ve(Math.ceil(e/o)*o,s),c=ve(Math.floor(i/o)*o,s),u=0,d=l;if(0!==o)while(d<=c){var h=d.toFixed(s);r[u]={text:h,coord:0,value:h},++u,d+=o}}return r},t.prototype._calcTickInterval=function(t){var e=fe(t/8),i=ge(e);return[e,i]},t}(),Zn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.calcRange=function(){var t,e,i,n,r=this.getParent(),a=r.getChart(),o=a.getChartStore(),s=Number.MAX_SAFE_INTEGER,l=Number.MIN_SAFE_INTEGER,c=[],u=!1,d=Number.MAX_SAFE_INTEGER,h=Number.MIN_SAFE_INTEGER,p=Number.MAX_SAFE_INTEGER,f=o.getIndicatorStore().getInstances(r.getId());f.forEach(function(t){var e,i,n;u||(u=null!==(e=t.shouldOhlc)&&void 0!==e&&e),p=Math.min(p,t.precision),Tt(t.minValue)&&(d=Math.min(d,t.minValue)),Tt(t.maxValue)&&(h=Math.max(h,t.maxValue)),c.push({figures:null!==(i=t.figures)&&void 0!==i?i:[],result:null!==(n=t.result)&&void 0!==n?n:[]})});var v=4,g=this.isInCandle();if(g){var m=o.getPrecision().price;v=p!==Number.MAX_SAFE_INTEGER?Math.min(p,m):m}else p!==Number.MAX_SAFE_INTEGER&&(v=p);var y=o.getVisibleDataList(),b=a.getStyles().candle,x=b.type===H.Area,_=b.area.value,w=g&&!x||!g&&u;y.forEach(function(t){var e=t.dataIndex,i=t.data;if(Mt(i)&&(w&&(s=Math.min(s,i.low),l=Math.max(l,i.high)),g&&x)){var n=i[_];Tt(n)&&(s=Math.min(s,n),l=Math.max(l,n))}c.forEach(function(t){var i,n=t.figures,r=t.result,a=null!==(i=r[e])&&void 0!==i?i:{};n.forEach(function(t){var e=a[t.key];Tt(e)&&(s=Math.min(s,e),l=Math.max(l,e))})})}),s!==Number.MAX_SAFE_INTEGER&&l!==Number.MIN_SAFE_INTEGER?(s=Math.min(d,s),l=Math.max(h,l)):(s=0,l=10);var C,S=this.getType();switch(S){case Y.Percentage:var k=o.getVisibleFirstData();Mt(k)&&Tt(k.close)&&(s=(s-k.close)/k.close*100,l=(l-k.close)/k.close*100),C=Math.pow(10,-2);break;case Y.Log:s=ye(s),l=ye(l),C=.05*be(-v);break;default:C=be(-v)}if(s===l||Math.abs(s-l)=1&&(E/=M);var D=null!==(n=null===I||void 0===I?void 0:I.bottom)&&void 0!==n?n:.1;D>=1&&(D/=M);var P,L,R,F=Math.abs(l-s);return s-=F*D,l+=F*E,F=Math.abs(l-s),S===Y.Log?(P=be(s),L=be(l),R=Math.abs(L-P)):(P=s,L=l,R=F),{from:s,to:l,range:F,realFrom:P,realTo:L,realRange:R}},e.prototype._innerConvertToPixel=function(t){var e,i,n=null!==(i=null===(e=this.getParent().getYAxisWidget())||void 0===e?void 0:e.getBounding().height)&&void 0!==i?i:0,r=this.getRange(),a=r.from,o=r.range,s=(t-a)/o;return this.isReverse()?Math.round(s*n):Math.round((1-s)*n)},e.prototype.isInCandle=function(){return this.getParent().getId()===Vi.CANDLE},e.prototype.getType=function(){return this.isInCandle()?this.getParent().getChart().getStyles().yAxis.type:Y.Normal},e.prototype.getPosition=function(){return this.getParent().getChart().getStyles().yAxis.position},e.prototype.isReverse=function(){return!!this.isInCandle()&&this.getParent().getChart().getStyles().yAxis.reverse},e.prototype.isFromZero=function(){var t=this.getParent().getChart().getStyles().yAxis,e=t.inside;return t.position===K.Left&&e||t.position===K.Right&&!e},e.prototype.optimalTicks=function(t){var e,i,n=this,r=this.getParent(),a=null!==(i=null===(e=r.getYAxisWidget())||void 0===e?void 0:e.getBounding().height)&&void 0!==i?i:0,o=r.getChart().getChartStore(),s=o.getCustomApi(),l=[],c=this.getType(),u=o.getIndicatorStore().getInstances(r.getId()),d=o.getThousandsSeparator(),h=o.getDecimalFoldThreshold(),p=0,f=!1;this.isInCandle()?p=o.getPrecision().price:u.forEach(function(t){p=Math.max(p,t.precision),f||(f=t.shouldFormatBigNumber)});var v,g=o.getStyles().xAxis.tickText.size;return t.forEach(function(t){var e,i=t.value,r=n._innerConvertToPixel(+i);switch(c){case Y.Percentage:e="".concat(Nt(i,2),"%");break;case Y.Log:r=n._innerConvertToPixel(ye(+i)),e=Nt(i,p);break;default:e=Nt(i,p),f&&(e=s.formatBigNumber(i));break}e=Wt(zt(e,d),h);var o=Tt(v);r>g&&r2*g||!o)&&(l.push({text:e,coord:r,value:i}),v=r)}),l},e.prototype.getAutoSize=function(){var t=this.getParent(),e=t.getChart(),i=e.getStyles(),n=i.yAxis,r=n.size;if("auto"!==r)return r;var a=e.getChartStore(),o=a.getCustomApi(),s=0;if(n.show&&(n.axisLine.show&&(s+=n.axisLine.size),n.tickLine.show&&(s+=n.tickLine.length),n.tickText.show)){var l=0;this.getTicks().forEach(function(t){l=Math.max(l,Ht(t.text,n.tickText.size,n.tickText.weight,n.tickText.family))}),s+=n.tickText.marginStart+n.tickText.marginEnd+l}var c=i.crosshair,u=0;if(c.show&&c.horizontal.show&&c.horizontal.text.show){var d=a.getIndicatorStore().getInstances(t.getId()),h=0,p=!1;d.forEach(function(t){h=Math.max(t.precision,h),p||(p=t.shouldFormatBigNumber)});var f=2;if(this.getType()!==Y.Percentage)if(this.isInCandle()){var v=a.getPrecision().price,g=i.indicator.lastValueMark;f=g.show&&g.text.show?Math.max(h,v):v}else f=h;var m=Nt(this.getRange().to,f);p&&(m=o.formatBigNumber(m)),m=Wt(m,a.getDecimalFoldThreshold()),u+=c.horizontal.text.paddingLeft+c.horizontal.text.paddingRight+2*c.horizontal.text.borderSize+Ht(m,c.horizontal.text.size,c.horizontal.text.weight,c.horizontal.text.family)}return Math.max(s,u)},e.prototype.getSelfBounding=function(){return this.getParent().getYAxisWidget().getBounding()},e.prototype.convertFromPixel=function(t){var e,i,n=null!==(i=null===(e=this.getParent().getYAxisWidget())||void 0===e?void 0:e.getBounding().height)&&void 0!==i?i:0,r=this.getRange(),a=r.from,o=r.range,s=this.isReverse()?t/n:1-t/n,l=s*o+a;switch(this.getType()){case Y.Percentage:var c=this.getParent().getChart().getChartStore().getVisibleFirstData();return Mt(c)&&Tt(c.close)?c.close*l/100+c.close:0;case Y.Log:return be(l);default:return l}},e.prototype.convertToRealValue=function(t){var e=t;return this.getType()===Y.Log&&(e=be(t)),e},e.prototype.convertToPixel=function(t){var e=t;switch(this.getType()){case Y.Percentage:var i=this.getParent().getChart().getChartStore().getVisibleFirstData();Mt(i)&&Tt(i.close)&&(e=(t-i.close)/i.close*100);break;case Y.Log:e=ye(t);break;default:e=t}return this._innerConvertToPixel(e)},e.prototype.convertToNicePixel=function(t){var e,i,n=null!==(i=null===(e=this.getParent().getYAxisWidget())||void 0===e?void 0:e.getBounding().height)&&void 0!==i?i:0,r=this.convertToPixel(t);return Math.round(Math.max(.05*n,Math.min(r,.98*n)))},e.extend=function(t){var i=function(e){function i(){return null!==e&&e.apply(this,arguments)||this}return B(i,e),i.prototype.createTicks=function(e){return t.createTicks(e)},i}(e);return i},e}(qn),Jn={name:"default",createTicks:function(t){var e=t.defaultTicks;return e}},Qn={default:Zn.extend(Jn)};function tr(t){var e;return null!==(e=Qn[t])&&void 0!==e?e:Qn.default}var er=function(){function t(t,e,i,n){this._bounding=Qi(),this._chart=i,this._id=n,this._init(t,e)}return t.prototype._init=function(t,e){this._rootContainer=t,this._container=he("div",{width:"100%",margin:"0",padding:"0",position:"relative",overflow:"hidden",boxSizing:"border-box"}),null!==e?t.insertBefore(this._container,e):t.appendChild(this._container)},t.prototype.getContainer=function(){return this._container},t.prototype.getId=function(){return this._id},t.prototype.getChart=function(){return this._chart},t.prototype.getBounding=function(){return this._bounding},t.prototype.update=function(t){this._bounding.height!==this._container.clientHeight&&(this._container.style.height="".concat(this._bounding.height,"px")),this.updateImp(null!==t&&void 0!==t?t:3,this._container,this._bounding)},t.prototype.destroy=function(){this._rootContainer.removeChild(this._container)},t}(),ir=function(t){function e(e,i,n,r,a){var o=t.call(this,e,i,n,r)||this;o._yAxisWidget=null,o._options={minHeight:zi,dragEnabled:!0,gap:{top:.2,bottom:.1},axisOptions:{name:"default",scrollZoomEnabled:!0}};var s=o.getContainer();return o._mainWidget=o.createMainWidget(s),o._yAxisWidget=o.createYAxisWidget(s),o.setOptions(a),o}return B(e,t),e.prototype.setOptions=function(t){var e,i,n,r,a,o=null===(e=t.axisOptions)||void 0===e?void 0:e.name;return(this._options.axisOptions.name!==o&&Et(o)||!Mt(this._axis))&&(this._axis=this.createAxisComponent(null!==o&&void 0!==o?o:"default")),wt(this._options,t),this.getId()===Vi.X_AXIS?(r=this.getMainWidget().getContainer(),a="ew-resize"):(r=this.getYAxisWidget().getContainer(),a="ns-resize"),null===(n=null===(i=t.axisOptions)||void 0===i?void 0:i.scrollZoomEnabled)||void 0===n||n?r.style.cursor=a:r.style.cursor="default",this},e.prototype.getOptions=function(){return this._options},e.prototype.getAxisComponent=function(){return this._axis},e.prototype.setBounding=function(t,e,i){var n,r;wt(this.getBounding(),t);var a={};return Mt(t.height)&&(a.height=t.height),Mt(t.top)&&(a.top=t.top),this._mainWidget.setBounding(a),null===(n=this._yAxisWidget)||void 0===n||n.setBounding(a),Mt(e)&&this._mainWidget.setBounding(e),Mt(i)&&(null===(r=this._yAxisWidget)||void 0===r||r.setBounding(i)),this},e.prototype.getMainWidget=function(){return this._mainWidget},e.prototype.getYAxisWidget=function(){return this._yAxisWidget},e.prototype.updateImp=function(t){var e;this._mainWidget.update(t),null===(e=this._yAxisWidget)||void 0===e||e.update(t)},e.prototype.destroy=function(){var e;t.prototype.destroy.call(this),this._mainWidget.destroy(),null===(e=this._yAxisWidget)||void 0===e||e.destroy()},e.prototype.getImage=function(t){var e=this.getBounding(),i=e.width,n=e.height,r=he("canvas",{width:"".concat(i,"px"),height:"".concat(n,"px"),boxSizing:"border-box"}),a=r.getContext("2d"),o=Vt(r);r.width=i*o,r.height=n*o,a.scale(o,o);var s=this._mainWidget.getBounding();if(a.drawImage(this._mainWidget.getImage(t),s.left,0,s.width,s.height),null!==this._yAxisWidget){var l=this._yAxisWidget.getBounding();a.drawImage(this._yAxisWidget.getImage(t),l.left,0,l.width,l.height)}return r},e.prototype.createYAxisWidget=function(t){return null},e}(er),nr=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.createAxisComponent=function(t){var e=tr(null!==t&&void 0!==t?t:"default");return new e(this)},e.prototype.createMainWidget=function(t){return new Ln(t,this)},e.prototype.createYAxisWidget=function(t){return new jn(t,this)},e}(ir),rr=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.createMainWidget=function(t){return new $n(t,this)},e}(nr),ar=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.getAxisStyles=function(t){return t.xAxis},e.prototype.createAxisLine=function(t){return{coordinates:[{x:0,y:0},{x:t.width,y:0}]}},e.prototype.createTickLines=function(t,e,i){var n=i.tickLine,r=i.axisLine.size;return t.map(function(t){return{coordinates:[{x:t.coord,y:0},{x:t.coord,y:r+n.length}]}})},e.prototype.createTickTexts=function(t,e,i){var n=i.tickText,r=i.axisLine.size,a=i.tickLine.length;return t.map(function(t){return{x:t.coord,y:r+a+n.marginStart,text:t.text,align:"center",baseline:"top"}})},e}(Hn),or=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.coordinateToPointTimestampDataIndexFlag=function(){return!0},e.prototype.coordinateToPointValueFlag=function(){return!1},e.prototype.getCompleteOverlays=function(t){return t.getInstances()},e.prototype.getProgressOverlay=function(t){return t.instance},e.prototype.getDefaultFigures=function(t,e,i,n,r,a,o,s,l,c,u){var d,h=[];if(t.needDefaultXAxisFigure&&t.id===(null===(d=u.instance)||void 0===d?void 0:d.id)){var p=Number.MAX_SAFE_INTEGER,f=Number.MIN_SAFE_INTEGER;e.forEach(function(e,i){p=Math.min(p,e.x),f=Math.max(f,e.x);var n=t.points[i];if(Tt(n.timestamp)){var o=a.formatDate(r,n.timestamp,"YYYY-MM-DD HH:mm",Zt.Crosshair);h.push({type:"text",attrs:{x:e.x,y:0,text:o,align:"center"},ignoreEvent:!0})}}),e.length>1&&h.unshift({type:"rect",attrs:{x:p,y:0,width:f-p,height:i.height},ignoreEvent:!0})}return h},e.prototype.getFigures=function(t,e,i,n,r,a,o,s,l,c,u){var d,h;return null!==(h=null===(d=t.createXAxisFigures)||void 0===d?void 0:d.call(t,{overlay:t,coordinates:e,bounding:i,barSpace:n,precision:r,thousandsSeparator:a,decimalFoldThreshold:o,dateTimeFormat:s,defaultStyles:l,xAxis:c,yAxis:u}))&&void 0!==h?h:[]},e}(Un),sr=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.compare=function(t){return Mt(t.kLineData)&&t.dataIndex===t.realDataIndex},e.prototype.getDirectionStyles=function(t){return t.vertical},e.prototype.getText=function(t,e){var i,n=null===(i=t.kLineData)||void 0===i?void 0:i.timestamp;return e.getCustomApi().formatDate(e.getTimeScaleStore().getDateTimeFormat(),n,"YYYY-MM-DD HH:mm",Zt.Crosshair)},e.prototype.getTextAttrs=function(t,e,i,n,r,a){var o,s=i.realX,l="center";return s-e/2-a.paddingLeft<0?(o=0,l="left"):s+e/2+a.paddingRight>n.width?(o=n.width,l="right"):o=s,{x:o,y:0,text:t,align:l,baseline:"top"}},e}(Gn),lr=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._xAxisView=new ar(n),n._overlayXAxisView=new or(n),n._crosshairVerticalLabelView=new sr(n),n.getContainer().style.cursor="ew-resize",n.addChild(n._overlayXAxisView),n}return B(e,t),e.prototype.getName=function(){return ji.X_AXIS},e.prototype.updateMain=function(t){this._xAxisView.draw(t)},e.prototype.updateOverlay=function(t){this._overlayXAxisView.draw(t),this._crosshairVerticalLabelView.draw(t)},e}(en),cr=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.calcRange=function(){var t=this.getParent().getChart().getChartStore(),e=t.getTimeScaleStore().getVisibleRange(),i=e.from,n=e.to,r=i,a=n-1,o=n-i;return{from:r,to:a,range:o,realFrom:r,realTo:a,realRange:o}},e.prototype.optimalTicks=function(t){var e,i,n=this.getParent().getChart(),r=n.getChartStore(),a=r.getCustomApi().formatDate,o=[],s=t.length,l=r.getDataList();if(s>0){var c=r.getTimeScaleStore().getDateTimeFormat(),u=n.getStyles().xAxis.tickText,d=Ht("00-00 00:00",u.size,u.weight,u.family),h=parseInt(t[0].value,10),p=this.convertToPixel(h),f=1;if(s>1){var v=parseInt(t[1].value,10),g=this.convertToPixel(v),m=Math.abs(g-p);me&&(t.apply(this,arguments),i=n)}}var vr=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._dragFlag=!1,n._dragStartY=0,n._topPaneHeight=0,n._bottomPaneHeight=0,n._pressedMouseMoveEvent=fr(n._pressedTouchMouseMoveEvent,20),n.registerEvent("touchStartEvent",n._mouseDownEvent.bind(n)).registerEvent("touchMoveEvent",n._pressedMouseMoveEvent.bind(n)).registerEvent("touchEndEvent",n._mouseUpEvent.bind(n)).registerEvent("mouseDownEvent",n._mouseDownEvent.bind(n)).registerEvent("mouseUpEvent",n._mouseUpEvent.bind(n)).registerEvent("pressedMouseMoveEvent",n._pressedMouseMoveEvent.bind(n)).registerEvent("mouseEnterEvent",n._mouseEnterEvent.bind(n)).registerEvent("mouseLeaveEvent",n._mouseLeaveEvent.bind(n)),n}return B(e,t),e.prototype.getName=function(){return ji.SEPARATOR},e.prototype.checkEventOn=function(){return!0},e.prototype._mouseDownEvent=function(t){this._dragFlag=!0,this._dragStartY=t.pageY;var e=this.getPane();return this._topPaneHeight=e.getTopPane().getBounding().height,this._bottomPaneHeight=e.getBottomPane().getBounding().height,!0},e.prototype._mouseUpEvent=function(){return this._dragFlag=!1,this._mouseLeaveEvent()},e.prototype._pressedTouchMouseMoveEvent=function(t){var e=t.pageY-this._dragStartY,i=this.getPane(),n=i.getTopPane(),r=i.getBottomPane(),a=e<0;if(null!==n&&(null===r||void 0===r?void 0:r.getOptions().dragEnabled)){var o=void 0,s=void 0,l=void 0,c=void 0;a?(o=n,s=r,l=this._topPaneHeight,c=this._bottomPaneHeight):(o=r,s=n,l=this._bottomPaneHeight,c=this._topPaneHeight);var u=o.getOptions().minHeight;if(l>u){var d=Math.max(l-Math.abs(e),u),h=l-d;o.setBounding({height:d}),s.setBounding({height:c+h});var p=i.getChart();p.getChartStore().getActionStore().execute(Pt.OnPaneDrag,{paneId:i.getId()}),p.adjustPaneViewport(!0,!0,!0,!0,!0)}}return!0},e.prototype._mouseEnterEvent=function(){var t,e=this.getPane(),i=e.getBottomPane();if(null!==(t=null===i||void 0===i?void 0:i.getOptions().dragEnabled)&&void 0!==t&&t){var n=e.getChart(),r=n.getStyles().separator;return this.getContainer().style.background=r.activeBackgroundColor,!0}return!1},e.prototype._mouseLeaveEvent=function(){return!this._dragFlag&&(this.getContainer().style.background="",!0)},e.prototype.createContainer=function(){return he("div",{width:"100%",height:"".concat(qi,"px"),margin:"0",padding:"0",position:"absolute",top:"-3px",zIndex:"20",boxSizing:"border-box",cursor:"ns-resize"})},e.prototype.updateImp=function(t,e,i){if(4===i||2===i){var n=this.getPane().getChart().getStyles().separator;t.style.top="".concat(-Math.floor((qi-n.size)/2),"px"),t.style.height="".concat(qi,"px")}},e}(tn),gr=function(t){function e(e,i,n,r,a,o){var s=t.call(this,e,i,n,r)||this;return s.getContainer().style.overflow="",s._topPane=a,s._bottomPane=o,s._separatorWidget=new vr(s.getContainer(),s),s}return B(e,t),e.prototype.setBounding=function(t){return wt(this.getBounding(),t),this},e.prototype.getTopPane=function(){return this._topPane},e.prototype.setTopPane=function(t){return this._topPane=t,this},e.prototype.getBottomPane=function(){return this._bottomPane},e.prototype.setBottomPane=function(t){return this._bottomPane=t,this},e.prototype.getWidget=function(){return this._separatorWidget},e.prototype.getImage=function(t){var e=this.getBounding(),i=e.width,n=e.height,r=this.getChart().getStyles().separator,a=he("canvas",{width:"".concat(i,"px"),height:"".concat(n,"px"),boxSizing:"border-box"}),o=a.getContext("2d"),s=Vt(a);return a.width=i*s,a.height=n*s,o.scale(s,s),o.fillStyle=r.color,o.fillRect(0,0,i,n),a},e.prototype.updateImp=function(t,e,i){if(4===t||2===t){var n=this.getChart().getStyles().separator;e.style.backgroundColor=n.color,e.style.height="".concat(i.height,"px"),e.style.marginLeft="".concat(i.left,"px"),e.style.width="".concat(i.width,"px"),this._separatorWidget.update(t)}},e}(er);function mr(){var t;return"undefined"!==typeof window&&(null!==(t=window.navigator.userAgent.toLowerCase().indexOf("firefox"))&&void 0!==t?t:-1)>-1}function yr(){return"undefined"!==typeof window&&/iPhone|iPad|iPod/.test(window.navigator.platform)}var br,xr=10,_r=function(){function t(t,e,i){var n=this;this._clickCount=0,this._clickTimeoutId=null,this._clickCoordinate={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY},this._tapCount=0,this._tapTimeoutId=null,this._tapCoordinate={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY},this._longTapTimeoutId=null,this._longTapActive=!1,this._mouseMoveStartCoordinate=null,this._touchMoveStartCoordinate=null,this._touchMoveExceededManhattanDistance=!1,this._cancelClick=!1,this._cancelTap=!1,this._unsubscribeOutsideMouseEvents=null,this._unsubscribeOutsideTouchEvents=null,this._unsubscribeMobileSafariEvents=null,this._unsubscribeMousemove=null,this._unsubscribeMouseWheel=null,this._unsubscribeContextMenu=null,this._unsubscribeRootMouseEvents=null,this._unsubscribeRootTouchEvents=null,this._startPinchMiddleCoordinate=null,this._startPinchDistance=0,this._pinchPrevented=!1,this._preventTouchDragProcess=!1,this._mousePressed=!1,this._lastTouchEventTimeStamp=0,this._activeTouchId=null,this._acceptMouseLeave=!yr(),this._onFirefoxOutsideMouseUp=function(t){n._mouseUpHandler(t)},this._onMobileSafariDoubleClick=function(t){if(n._firesTouchEvents(t)){if(++n._tapCount,null!==n._tapTimeoutId&&n._tapCount>1){var e=n._mouseTouchMoveWithDownInfo(n._getCoordinate(t),n._tapCoordinate).manhattanDistance;e<30&&!n._cancelTap&&n._processEvent(n._makeCompatEvent(t),n._handler.doubleTapEvent),n._resetTapTimeout()}}else if(++n._clickCount,null!==n._clickTimeoutId&&n._clickCount>1){e=n._mouseTouchMoveWithDownInfo(n._getCoordinate(t),n._clickCoordinate).manhattanDistance;e<5&&!n._cancelClick&&n._processEvent(n._makeCompatEvent(t),n._handler.mouseDoubleClickEvent),n._resetClickTimeout()}},this._target=t,this._handler=e,this._options=i,this._init()}return t.prototype.destroy=function(){null!==this._unsubscribeOutsideMouseEvents&&(this._unsubscribeOutsideMouseEvents(),this._unsubscribeOutsideMouseEvents=null),null!==this._unsubscribeOutsideTouchEvents&&(this._unsubscribeOutsideTouchEvents(),this._unsubscribeOutsideTouchEvents=null),null!==this._unsubscribeMousemove&&(this._unsubscribeMousemove(),this._unsubscribeMousemove=null),null!==this._unsubscribeMouseWheel&&(this._unsubscribeMouseWheel(),this._unsubscribeMouseWheel=null),null!==this._unsubscribeContextMenu&&(this._unsubscribeContextMenu(),this._unsubscribeContextMenu=null),null!==this._unsubscribeRootMouseEvents&&(this._unsubscribeRootMouseEvents(),this._unsubscribeRootMouseEvents=null),null!==this._unsubscribeRootTouchEvents&&(this._unsubscribeRootTouchEvents(),this._unsubscribeRootTouchEvents=null),null!==this._unsubscribeMobileSafariEvents&&(this._unsubscribeMobileSafariEvents(),this._unsubscribeMobileSafariEvents=null),this._clearLongTapTimeout(),this._resetClickTimeout()},t.prototype._mouseEnterHandler=function(t){var e,i,n,r=this;null===(e=this._unsubscribeMousemove)||void 0===e||e.call(this),null===(i=this._unsubscribeMouseWheel)||void 0===i||i.call(this),null===(n=this._unsubscribeContextMenu)||void 0===n||n.call(this);var a=this._mouseMoveHandler.bind(this);this._unsubscribeMousemove=function(){r._target.removeEventListener("mousemove",a)},this._target.addEventListener("mousemove",a);var o=this._mouseWheelHandler.bind(this);this._unsubscribeMouseWheel=function(){r._target.removeEventListener("wheel",o)},this._target.addEventListener("wheel",o,{passive:!1});var s=this._contextMenuHandler.bind(this);this._unsubscribeContextMenu=function(){r._target.removeEventListener("contextmenu",s)},this._target.addEventListener("contextmenu",s,{passive:!1}),this._firesTouchEvents(t)||(this._processEvent(this._makeCompatEvent(t),this._handler.mouseEnterEvent),this._acceptMouseLeave=!0)},t.prototype._resetClickTimeout=function(){null!==this._clickTimeoutId&&clearTimeout(this._clickTimeoutId),this._clickCount=0,this._clickTimeoutId=null,this._clickCoordinate={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY}},t.prototype._resetTapTimeout=function(){null!==this._tapTimeoutId&&clearTimeout(this._tapTimeoutId),this._tapCount=0,this._tapTimeoutId=null,this._tapCoordinate={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY}},t.prototype._mouseMoveHandler=function(t){this._mousePressed||null!==this._touchMoveStartCoordinate||this._firesTouchEvents(t)||(this._processEvent(this._makeCompatEvent(t),this._handler.mouseMoveEvent),this._acceptMouseLeave=!0)},t.prototype._mouseWheelHandler=function(t){if(Math.abs(t.deltaX)>Math.abs(t.deltaY)){if(!Mt(this._handler.mouseWheelHortEvent))return;if(this._preventDefault(t),0===Math.abs(t.deltaX))return;this._handler.mouseWheelHortEvent(this._makeCompatEvent(t),-t.deltaX)}else{if(!Mt(this._handler.mouseWheelVertEvent))return;var e=-t.deltaY/100;if(0===e)return;switch(this._preventDefault(t),t.deltaMode){case t.DOM_DELTA_PAGE:e*=120;break;case t.DOM_DELTA_LINE:e*=32;break}if(0!==e){var i=Math.sign(e)*Math.min(1,Math.abs(e));this._handler.mouseWheelVertEvent(this._makeCompatEvent(t),i)}}},t.prototype._contextMenuHandler=function(t){this._preventDefault(t)},t.prototype._touchMoveHandler=function(t){var e=this._touchWithId(t.changedTouches,this._activeTouchId);if(null!==e&&(this._lastTouchEventTimeStamp=this._eventTimeStamp(t),null===this._startPinchMiddleCoordinate&&!this._preventTouchDragProcess)){this._pinchPrevented=!0;var i=this._mouseTouchMoveWithDownInfo(this._getCoordinate(e),this._touchMoveStartCoordinate),n=i.xOffset,r=i.yOffset,a=i.manhattanDistance;if(this._touchMoveExceededManhattanDistance||!(a<5)){if(!this._touchMoveExceededManhattanDistance){var o=.5*n,s=r>=o&&!this._options.treatVertDragAsPageScroll(),l=o>r&&!this._options.treatHorzDragAsPageScroll();s||l||(this._preventTouchDragProcess=!0),this._touchMoveExceededManhattanDistance=!0,this._cancelTap=!0,this._clearLongTapTimeout(),this._resetTapTimeout()}this._preventTouchDragProcess||this._processEvent(this._makeCompatEvent(t,e),this._handler.touchMoveEvent)}}},t.prototype._mouseMoveWithDownHandler=function(t){if(0===t.button){var e=this._mouseTouchMoveWithDownInfo(this._getCoordinate(t),this._mouseMoveStartCoordinate),i=e.manhattanDistance;i>=5&&(this._cancelClick=!0,this._resetClickTimeout()),this._cancelClick&&this._processEvent(this._makeCompatEvent(t),this._handler.pressedMouseMoveEvent)}},t.prototype._mouseTouchMoveWithDownInfo=function(t,e){var i=Math.abs(e.x-t.x),n=Math.abs(e.y-t.y),r=i+n;return{xOffset:i,yOffset:n,manhattanDistance:r}},t.prototype._touchEndHandler=function(t){var e=this._touchWithId(t.changedTouches,this._activeTouchId);if(null===e&&0===t.touches.length&&(e=t.changedTouches[0]),null!==e){this._activeTouchId=null,this._lastTouchEventTimeStamp=this._eventTimeStamp(t),this._clearLongTapTimeout(),this._touchMoveStartCoordinate=null,null!==this._unsubscribeRootTouchEvents&&(this._unsubscribeRootTouchEvents(),this._unsubscribeRootTouchEvents=null);var i=this._makeCompatEvent(t,e);if(this._processEvent(i,this._handler.touchEndEvent),++this._tapCount,null!==this._tapTimeoutId&&this._tapCount>1){var n=this._mouseTouchMoveWithDownInfo(this._getCoordinate(e),this._tapCoordinate).manhattanDistance;n<30&&!this._cancelTap&&this._processEvent(i,this._handler.doubleTapEvent),this._resetTapTimeout()}else this._cancelTap||(this._processEvent(i,this._handler.tapEvent),Mt(this._handler.tapEvent)&&this._preventDefault(t));0===this._tapCount&&this._preventDefault(t),0===t.touches.length&&this._longTapActive&&(this._longTapActive=!1,this._preventDefault(t))}},t.prototype._mouseUpHandler=function(t){if(0===t.button){var e=this._makeCompatEvent(t);if(this._mouseMoveStartCoordinate=null,this._mousePressed=!1,null!==this._unsubscribeRootMouseEvents&&(this._unsubscribeRootMouseEvents(),this._unsubscribeRootMouseEvents=null),mr()){var i=this._target.ownerDocument.documentElement;i.removeEventListener("mouseleave",this._onFirefoxOutsideMouseUp)}if(!this._firesTouchEvents(t))if(this._processEvent(e,this._handler.mouseUpEvent),++this._clickCount,null!==this._clickTimeoutId&&this._clickCount>1){var n=this._mouseTouchMoveWithDownInfo(this._getCoordinate(t),this._clickCoordinate).manhattanDistance;n<5&&!this._cancelClick&&this._processEvent(e,this._handler.mouseDoubleClickEvent),this._resetClickTimeout()}else this._cancelClick||this._processEvent(e,this._handler.mouseClickEvent)}},t.prototype._clearLongTapTimeout=function(){null!==this._longTapTimeoutId&&(clearTimeout(this._longTapTimeoutId),this._longTapTimeoutId=null)},t.prototype._touchStartHandler=function(t){if(null===this._activeTouchId){var e=t.changedTouches[0];this._activeTouchId=e.identifier,this._lastTouchEventTimeStamp=this._eventTimeStamp(t);var i=this._target.ownerDocument.documentElement;this._cancelTap=!1,this._touchMoveExceededManhattanDistance=!1,this._preventTouchDragProcess=!1,this._touchMoveStartCoordinate=this._getCoordinate(e),null!==this._unsubscribeRootTouchEvents&&(this._unsubscribeRootTouchEvents(),this._unsubscribeRootTouchEvents=null);var n=this._touchMoveHandler.bind(this),r=this._touchEndHandler.bind(this);this._unsubscribeRootTouchEvents=function(){i.removeEventListener("touchmove",n),i.removeEventListener("touchend",r)},i.addEventListener("touchmove",n,{passive:!1}),i.addEventListener("touchend",r,{passive:!1}),this._clearLongTapTimeout(),this._longTapTimeoutId=setTimeout(this._longTapHandler.bind(this,t),500),this._processEvent(this._makeCompatEvent(t,e),this._handler.touchStartEvent),null===this._tapTimeoutId&&(this._tapCount=0,this._tapTimeoutId=setTimeout(this._resetTapTimeout.bind(this),500),this._tapCoordinate=this._getCoordinate(e))}},t.prototype._mouseDownHandler=function(t){if(2===t.button)return this._preventDefault(t),void this._processEvent(this._makeCompatEvent(t),this._handler.mouseRightClickEvent);if(0===t.button){var e=this._target.ownerDocument.documentElement;mr()&&e.addEventListener("mouseleave",this._onFirefoxOutsideMouseUp),this._cancelClick=!1,this._mouseMoveStartCoordinate=this._getCoordinate(t),null!==this._unsubscribeRootMouseEvents&&(this._unsubscribeRootMouseEvents(),this._unsubscribeRootMouseEvents=null);var i=this._mouseMoveWithDownHandler.bind(this),n=this._mouseUpHandler.bind(this);this._unsubscribeRootMouseEvents=function(){e.removeEventListener("mousemove",i),e.removeEventListener("mouseup",n)},e.addEventListener("mousemove",i),e.addEventListener("mouseup",n),this._mousePressed=!0,this._firesTouchEvents(t)||(this._processEvent(this._makeCompatEvent(t),this._handler.mouseDownEvent),null===this._clickTimeoutId&&(this._clickCount=0,this._clickTimeoutId=setTimeout(this._resetClickTimeout.bind(this),500),this._clickCoordinate=this._getCoordinate(t)))}},t.prototype._init=function(){var t=this;this._target.addEventListener("mouseenter",this._mouseEnterHandler.bind(this)),this._target.addEventListener("touchcancel",this._clearLongTapTimeout.bind(this));var e=this._target.ownerDocument,i=function(e){null!=t._handler.mouseDownOutsideEvent&&(e.composed&&t._target.contains(e.composedPath()[0])||null!==e.target&&t._target.contains(e.target)||t._handler.mouseDownOutsideEvent({x:0,y:0,pageX:0,pageY:0}))};this._unsubscribeOutsideTouchEvents=function(){e.removeEventListener("touchstart",i)},this._unsubscribeOutsideMouseEvents=function(){e.removeEventListener("mousedown",i)},e.addEventListener("mousedown",i),e.addEventListener("touchstart",i,{passive:!0}),yr()&&(this._unsubscribeMobileSafariEvents=function(){t._target.removeEventListener("dblclick",t._onMobileSafariDoubleClick)},this._target.addEventListener("dblclick",this._onMobileSafariDoubleClick)),this._target.addEventListener("mouseleave",this._mouseLeaveHandler.bind(this)),this._target.addEventListener("touchstart",this._touchStartHandler.bind(this),{passive:!0}),this._target.addEventListener("mousedown",function(t){if(1===t.button)return t.preventDefault(),!1}),this._target.addEventListener("mousedown",this._mouseDownHandler.bind(this)),this._initPinch(),this._target.addEventListener("touchmove",function(){},{passive:!1})},t.prototype._initPinch=function(){var t=this;(Mt(this._handler.pinchStartEvent)||Mt(this._handler.pinchEvent)||Mt(this._handler.pinchEndEvent))&&(this._target.addEventListener("touchstart",function(e){t._checkPinchState(e.touches)},{passive:!0}),this._target.addEventListener("touchmove",function(e){if(2===e.touches.length&&null!==t._startPinchMiddleCoordinate&&Mt(t._handler.pinchEvent)){var i=t._getTouchDistance(e.touches[0],e.touches[1]),n=i/t._startPinchDistance;t._handler.pinchEvent(X(X({},t._startPinchMiddleCoordinate),{pageX:0,pageY:0}),n),t._preventDefault(e)}},{passive:!1}),this._target.addEventListener("touchend",function(e){t._checkPinchState(e.touches)}))},t.prototype._checkPinchState=function(t){1===t.length&&(this._pinchPrevented=!1),2!==t.length||this._pinchPrevented||this._longTapActive?this._stopPinch():this._startPinch(t)},t.prototype._startPinch=function(t){var e,i=null!==(e=this._target.getBoundingClientRect())&&void 0!==e?e:{left:0,top:0};this._startPinchMiddleCoordinate={x:(t[0].clientX-i.left+(t[1].clientX-i.left))/2,y:(t[0].clientY-i.top+(t[1].clientY-i.top))/2},this._startPinchDistance=this._getTouchDistance(t[0],t[1]),Mt(this._handler.pinchStartEvent)&&this._handler.pinchStartEvent({x:0,y:0,pageX:0,pageY:0}),this._clearLongTapTimeout()},t.prototype._stopPinch=function(){null!==this._startPinchMiddleCoordinate&&(this._startPinchMiddleCoordinate=null,Mt(this._handler.pinchEndEvent)&&this._handler.pinchEndEvent({x:0,y:0,pageX:0,pageY:0}))},t.prototype._mouseLeaveHandler=function(t){var e,i,n;null===(e=this._unsubscribeMousemove)||void 0===e||e.call(this),null===(i=this._unsubscribeMouseWheel)||void 0===i||i.call(this),null===(n=this._unsubscribeContextMenu)||void 0===n||n.call(this),this._firesTouchEvents(t)||this._acceptMouseLeave&&(this._processEvent(this._makeCompatEvent(t),this._handler.mouseLeaveEvent),this._acceptMouseLeave=!yr())},t.prototype._longTapHandler=function(t){var e=this._touchWithId(t.touches,this._activeTouchId);null!==e&&(this._processEvent(this._makeCompatEvent(t,e),this._handler.longTapEvent),this._cancelTap=!0,this._longTapActive=!0)},t.prototype._firesTouchEvents=function(t){var e;return Mt(null===(e=t.sourceCapabilities)||void 0===e?void 0:e.firesTouchEvents)?t.sourceCapabilities.firesTouchEvents:this._eventTimeStamp(t)this._startScrollCoordinate.y-s.y){var d=s.x-this._startScrollCoordinate.x;c.getTimeScaleStore().scroll(d)}return!0;case ji.X_AXIS:case ji.Y_AXIS:var h=o.dispatchEvent("pressedMouseMoveEvent",s);return h&&(null===(n=s.preventDefault)||void 0===n||n.call(s),this._chart.updatePane(1)),h}}return!1},t.prototype.touchEndEvent=function(t){var e=this,i=this._findWidgetByEvent(t).widget;if(null!==i){var n=this._makeWidgetEvent(t,i),r=i.getName();switch(r){case ji.MAIN:if(i.dispatchEvent("mouseUpEvent",n),null!==this._startScrollCoordinate){var a=(new Date).getTime()-this._flingStartTime,o=n.x-this._startScrollCoordinate.x,s=o/(a>0?a:1)*20;if(a<200&&Math.abs(s)>0){var l=this._chart.getChartStore().getTimeScaleStore(),c=function(){e._flingScrollRequestId=oe(function(){l.startScroll(),l.scroll(s),s*=.975,Math.abs(s)<1?null!==e._flingScrollRequestId&&(se(e._flingScrollRequestId),e._flingScrollRequestId=null):c()})};c()}}return!0;case ji.X_AXIS:case ji.Y_AXIS:var u=i.dispatchEvent("mouseUpEvent",n);u&&this._chart.updatePane(1)}}return!1},t.prototype.tapEvent=function(t){var e=this._findWidgetByEvent(t),i=e.pane,n=e.widget,r=!1;if(null!==n){var a=this._makeWidgetEvent(t,n),o=n.dispatchEvent("mouseClickEvent",a);if(n.getName()===ji.MAIN){var s=this._makeWidgetEvent(t,n),l=this._chart.getChartStore(),c=l.getTooltipStore();o?(this._touchCancelCrosshair=!0,this._touchCoordinate=null,c.setCrosshair(void 0,{notInvalidate:!0}),r=!0):(this._touchCancelCrosshair||this._touchZoomed||(this._touchCoordinate={x:s.x,y:s.y},c.setCrosshair({x:s.x,y:s.y,paneId:null===i||void 0===i?void 0:i.getId()},{notInvalidate:!0}),r=!0),this._touchCancelCrosshair=!1)}(r||o)&&this._chart.updatePane(1)}return r},t.prototype.doubleTapEvent=function(t){return this.mouseDoubleClickEvent(t)},t.prototype.longTapEvent=function(t){var e=this._findWidgetByEvent(t),i=e.pane,n=e.widget;if(null!==n&&n.getName()===ji.MAIN){var r=this._makeWidgetEvent(t,n);return this._touchCoordinate={x:r.x,y:r.y},this._chart.getChartStore().getTooltipStore().setCrosshair({x:r.x,y:r.y,paneId:null===i||void 0===i?void 0:i.getId()}),!0}return!1},t.prototype._findWidgetByEvent=function(t){var e,i,n,r,a=t.x,o=t.y,s=this._chart.getAllSeparatorPanes(),l=this._chart.getChartStore().getStyles().separator.size;try{for(var c=j(s),u=c.next();!u.done;u=c.next()){var d=q(u.value,2),h=d[1],p=h.getBounding(),f=p.top-Math.round((qi-l)/2);if(a>=p.left&&a<=p.left+p.width&&o>=f&&o<=f+qi)return{pane:h,widget:h.getWidget()}}}catch(k){e={error:k}}finally{try{u&&!u.done&&(i=c.return)&&i.call(c)}finally{if(e)throw e.error}}var v=this._chart.getAllDrawPanes(),g=null;try{for(var m=j(v),y=m.next();!y.done;y=m.next()){var b=y.value;p=b.getBounding();if(a>=p.left&&a<=p.left+p.width&&o>=p.top&&o<=p.top+p.height){g=b;break}}}catch(A){n={error:A}}finally{try{y&&!y.done&&(r=m.return)&&r.call(m)}finally{if(n)throw n.error}}var x=null;if(null!==g){if(null===x){var _=g.getMainWidget(),w=_.getBounding();a>=w.left&&a<=w.left+w.width&&o>=w.top&&o<=w.top+w.height&&(x=_)}if(null===x){var C=g.getYAxisWidget();if(null!==C){var S=C.getBounding();a>=S.left&&a<=S.left+S.width&&o>=S.top&&o<=S.top+S.height&&(x=C)}}}return{pane:g,widget:x}},t.prototype._makeWidgetEvent=function(t,e){var i,n,r,a=null!==(i=null===e||void 0===e?void 0:e.getBounding())&&void 0!==i?i:null;return X(X({},t),{x:t.x-(null!==(n=null===a||void 0===a?void 0:a.left)&&void 0!==n?n:0),y:t.y-(null!==(r=null===a||void 0===a?void 0:a.top)&&void 0!==r?r:0)})},t.prototype.destroy=function(){this._container.removeEventListener("keydown",this._boundKeyBoardDownEvent),this._event.destroy()},t}();(function(t){t["Root"]="root",t["Main"]="main",t["YAxis"]="yAxis"})(br||(br={}));var Cr=function(){function t(t,e){this._drawPanes=[],this._separatorPanes=new Map,this._initContainer(t),this._chartEvent=new wr(this._chartContainer,this),this._chartStore=new Gi(this,e),this._initPanes(e),this.adjustPaneViewport(!0,!0,!0)}return t.prototype._initContainer=function(t){this._container=t,this._chartContainer=he("div",{position:"relative",width:"100%",outline:"none",borderStyle:"none",cursor:"crosshair",boxSizing:"border-box",userSelect:"none",webkitUserSelect:"none",msUserSelect:"none",MozUserSelect:"none",webkitTapHighlightColor:"transparent"}),this._chartContainer.tabIndex=1,t.appendChild(this._chartContainer)},t.prototype._initPanes=function(t){var e,i=this,n=null!==(e=null===t||void 0===t?void 0:t.layout)&&void 0!==e?e:[{type:"candle"}],r=!1,a=!1,o=function(t){if(!a){var e=i._createPane(pr,Vi.X_AXIS,null!==t&&void 0!==t?t:{});i._xAxisPane=e,a=!0}};n.forEach(function(t){var e,n,a;switch(t.type){case"candle":if(!r){var s=null!==(e=t.options)&&void 0!==e?e:{};wt(s,{id:Vi.CANDLE}),i._candlePane=i._createPane(rr,Vi.CANDLE,s);var l=null!==(n=t.content)&&void 0!==n?n:[];l.forEach(function(t){i.createIndicator(t,!0,s)}),r=!0}break;case"indicator":var c;l=null!==(a=t.content)&&void 0!==a?a:[];if(l.length>0)l.forEach(function(e){Mt(c)?i.createIndicator(e,!0,{id:c}):c=i.createIndicator(e,!0,t.options)});break;case"xAxis":o(t.options);break}}),o({position:"bottom"})},t.prototype._createPane=function(t,e,i){var n,r=null,a=null,o=null===i||void 0===i?void 0:i.position;switch(o){case"top":var s=this._drawPanes[0];Mt(s)&&(a=new t(this._chartContainer,s.getContainer(),this,e,null!==i&&void 0!==i?i:{}),r=0);break;case"bottom":break;default:for(var l=this._drawPanes.length-1;l>-1;l--){var c=this._drawPanes[l],u=this._drawPanes[l-1];if("bottom"===(null===c||void 0===c?void 0:c.getOptions().position)&&"bottom"!==(null===u||void 0===u?void 0:u.getOptions().position)){a=new t(this._chartContainer,c.getContainer(),this,e,null!==i&&void 0!==i?i:{}),r=l;break}}}if(Mt(a)||(a=new t(this._chartContainer,null,this,e,null!==i&&void 0!==i?i:{})),Tt(r)?(this._drawPanes.splice(r,0,a),n=r):(this._drawPanes.push(a),n=this._drawPanes.length-1),a.getId()!==Vi.X_AXIS){var d=this._drawPanes[n+1];if(Mt(d)&&d.getId()===Vi.X_AXIS&&(d=this._drawPanes[n+2]),Mt(d)){var h=this._separatorPanes.get(d);Mt(h)?h.setTopPane(a):(h=new gr(this._chartContainer,d.getContainer(),this,"",a,d),this._separatorPanes.set(d,h))}var p=this._drawPanes[n-1];if(Mt(p)&&p.getId()===Vi.X_AXIS&&(p=this._drawPanes[n-2]),Mt(p)){h=new gr(this._chartContainer,a.getContainer(),this,"",p,a);this._separatorPanes.set(a,h)}}return a},t.prototype._measurePaneHeight=function(){var t,e=this,i=Math.floor(this._container.clientHeight),n=this._chartStore.getStyles().separator.size,r=this._xAxisPane.getAxisComponent().getAutoSize(),a=i-r-this._separatorPanes.size*n;a<0&&(a=0);var o=0;this._drawPanes.forEach(function(t){if(t.getId()!==Vi.CANDLE&&t.getId()!==Vi.X_AXIS){var e=t.getBounding().height,i=t.getOptions().minHeight;ea?(o=a,e=Math.max(a-o,0)):o+=e,t.setBounding({height:e})}});var s=a-o;null===(t=this._candlePane)||void 0===t||t.setBounding({height:s}),this._xAxisPane.setBounding({height:r});var l=0;this._drawPanes.forEach(function(t){var i=e._separatorPanes.get(t);Mt(i)&&(i.setBounding({height:n,top:l}),l+=n),t.setBounding({top:l}),l+=t.getBounding().height})},t.prototype._measurePaneWidth=function(){var t=this,e=Math.floor(this._container.clientWidth),i=this._chartStore.getStyles(),n=i.yAxis,r=n.position===K.Left,a=!n.inside,o=0,s=0,l=0,c=0;this._drawPanes.forEach(function(t){t.getId()!==Vi.X_AXIS&&(s=Math.max(s,t.getAxisComponent().getAutoSize()))}),s>e&&(s=e),a?(o=e-s,r?(l=0,c=s):(l=e-s,c=0)):(o=e,c=0,l=r?0:e-s),this._chartStore.getTimeScaleStore().setTotalBarSpace(o);var u,d={width:e},h={width:o,left:c},p={width:s,left:l},f=i.separator.fill;u=a&&!f?h:d,this._drawPanes.forEach(function(e){var i;null===(i=t._separatorPanes.get(e))||void 0===i||i.setBounding(u),e.setBounding(d,h,p)})},t.prototype._setPaneOptions=function(t,e){var i,n;if(Et(t.id)){var r=this.getDrawPaneById(t.id),a=!1;if(null!==r){var o=e;if(t.id!==Vi.CANDLE&&Tt(t.height)&&t.height>0){var s=Math.max(null!==(i=t.minHeight)&&void 0!==i?i:r.getOptions().minHeight,0),l=Math.max(s,t.height);r.setBounding({height:l}),o=!0,a=!0}(Et(null===(n=t.axisOptions)||void 0===n?void 0:n.name)||Mt(t.gap))&&(o=!0),r.setOptions(t),o&&this.adjustPaneViewport(a,!0,!0,!0,!0)}}},t.prototype.getDrawPaneById=function(t){if(t===Vi.CANDLE)return this._candlePane;if(t===Vi.X_AXIS)return this._xAxisPane;var e=this._drawPanes.find(function(e){return e.getId()===t});return null!==e&&void 0!==e?e:null},t.prototype.getContainer=function(){return this._container},t.prototype.getChartStore=function(){return this._chartStore},t.prototype.getXAxisPane=function(){return this._xAxisPane},t.prototype.getAllDrawPanes=function(){return this._drawPanes},t.prototype.getAllSeparatorPanes=function(){return this._separatorPanes},t.prototype.adjustPaneViewport=function(t,e,i,n,r){t&&this._measurePaneHeight();var a=e,o=null!==n&&void 0!==n&&n,s=null!==r&&void 0!==r&&r;(o||s)&&this._drawPanes.forEach(function(t){var e=t.getAxisComponent().buildTicks(s);a||(a=e)}),a&&this._measurePaneWidth(),null!==i&&void 0!==i&&i&&(this._xAxisPane.getAxisComponent().buildTicks(!0),this.updatePane(4))},t.prototype.updatePane=function(t,e){if(Mt(e)){var i=this.getDrawPaneById(e);null===i||void 0===i||i.update(t)}else this._separatorPanes.forEach(function(e){e.update(t)}),this._drawPanes.forEach(function(e){e.update(t)})},t.prototype.crosshairChange=function(t){var e=this,i=this._chartStore.getActionStore();if(i.has(Pt.OnCrosshairChange)){var n={};this._drawPanes.forEach(function(i){var r=i.getId(),a={},o=e._chartStore.getIndicatorStore().getInstances(r);o.forEach(function(e){var i,n=e.result;a[e.name]=n[null!==(i=t.dataIndex)&&void 0!==i?i:n.length-1]}),n[r]=a}),Et(t.paneId)&&i.execute(Pt.OnCrosshairChange,X(X({},t),{indicatorData:n}))}},t.prototype.getDom=function(t,e){var i,n;if(!Et(t))return this._chartContainer;var r=this.getDrawPaneById(t);if(null!==r){var a=null!==e&&void 0!==e?e:br.Root;switch(a){case br.Root:return r.getContainer();case br.Main:return r.getMainWidget().getContainer();case br.YAxis:return null!==(n=null===(i=r.getYAxisWidget())||void 0===i?void 0:i.getContainer())&&void 0!==n?n:null}}return null},t.prototype.getSize=function(t,e){var i,n;if(!Mt(t))return{width:Math.floor(this._chartContainer.clientWidth),height:Math.floor(this._chartContainer.clientHeight),left:0,top:0,right:0,bottom:0};var r=this.getDrawPaneById(t);if(null!==r){var a=null!==e&&void 0!==e?e:br.Root;switch(a){case br.Root:return r.getBounding();case br.Main:return r.getMainWidget().getBounding();case br.YAxis:return null!==(n=null===(i=r.getYAxisWidget())||void 0===i?void 0:i.getBounding())&&void 0!==n?n:null}}return null},t.prototype.setStyles=function(t){var e,i,n;this._chartStore.setOptions({styles:t}),n=Et(t)?Ui(t):t,Mt(null===(e=null===n||void 0===n?void 0:n.yAxis)||void 0===e?void 0:e.type)&&(null===(i=this._candlePane)||void 0===i||i.getAxisComponent().setAutoCalcTickFlag(!0)),this.adjustPaneViewport(!0,!0,!0,!0,!0)},t.prototype.getStyles=function(){return this._chartStore.getStyles()},t.prototype.setLocale=function(t){this._chartStore.setOptions({locale:t}),this.adjustPaneViewport(!0,!0,!0,!0,!0)},t.prototype.getLocale=function(){return this._chartStore.getLocale()},t.prototype.setCustomApi=function(t){this._chartStore.setOptions({customApi:t}),this.adjustPaneViewport(!0,!0,!0,!0,!0)},t.prototype.setPriceVolumePrecision=function(t,e){this._chartStore.setPrecision({price:t,volume:e})},t.prototype.getPriceVolumePrecision=function(){return this._chartStore.getPrecision()},t.prototype.setTimezone=function(t){this._chartStore.setOptions({timezone:t}),this._xAxisPane.getAxisComponent().buildTicks(!0),this._xAxisPane.update(3)},t.prototype.getTimezone=function(){return this._chartStore.getTimeScaleStore().getTimezone()},t.prototype.setOffsetRightDistance=function(t){this._chartStore.getTimeScaleStore().setOffsetRightDistance(t,!0)},t.prototype.getOffsetRightDistance=function(){return this._chartStore.getTimeScaleStore().getOffsetRightDistance()},t.prototype.setMaxOffsetLeftDistance=function(t){t<0?bt("setMaxOffsetLeftDistance","distance","distance must greater than zero!!!"):this._chartStore.getTimeScaleStore().setMaxOffsetLeftDistance(t)},t.prototype.setMaxOffsetRightDistance=function(t){t<0?bt("setMaxOffsetRightDistance","distance","distance must greater than zero!!!"):this._chartStore.getTimeScaleStore().setMaxOffsetRightDistance(t)},t.prototype.setLeftMinVisibleBarCount=function(t){t<0?bt("setLeftMinVisibleBarCount","barCount","barCount must greater than zero!!!"):this._chartStore.getTimeScaleStore().setLeftMinVisibleBarCount(Math.ceil(t))},t.prototype.setRightMinVisibleBarCount=function(t){t<0?bt("setRightMinVisibleBarCount","barCount","barCount must greater than zero!!!"):this._chartStore.getTimeScaleStore().setRightMinVisibleBarCount(Math.ceil(t))},t.prototype.setBarSpace=function(t){this._chartStore.getTimeScaleStore().setBarSpace(t)},t.prototype.getBarSpace=function(){return this._chartStore.getTimeScaleStore().getBarSpace().bar},t.prototype.getVisibleRange=function(){return this._chartStore.getTimeScaleStore().getVisibleRange()},t.prototype.clearData=function(){this._chartStore.clear()},t.prototype.getDataList=function(){return this._chartStore.getDataList()},t.prototype.applyNewData=function(t,e,i){Mt(i)&&bt("applyNewData","","param `callback` has been deprecated since version 9.8.0, use `subscribeAction('onDataReady')` instead."),this._chartStore.addData(t,Kt.Init,e).then(function(){}).catch(function(){}).finally(function(){null===i||void 0===i||i()})},t.prototype.applyMoreData=function(t,e,i){bt("","","Api `applyMoreData` has been deprecated since version 9.8.0."),this._chartStore.addData(t,Kt.Forward,null===e||void 0===e||e).then(function(){}).catch(function(){}).finally(function(){null===i||void 0===i||i()})},t.prototype.updateData=function(t,e){Mt(e)&&bt("updateData","","param `callback` has been deprecated since version 9.8.0, use `subscribeAction('onDataReady')` instead."),this._chartStore.addData(t).then(function(){}).catch(function(){}).finally(function(){null===e||void 0===e||e()})},t.prototype.loadMore=function(t){bt("","","Api `loadMore` has been deprecated since version 9.8.0, use `setLoadDataCallback` instead."),this._chartStore.setLoadMoreCallback(t)},t.prototype.setLoadDataCallback=function(t){this._chartStore.setLoadDataCallback(t)},t.prototype.createIndicator=function(t,e,i,n){var r,a=this,o=Et(t)?{name:t}:t;if(null===ai(o.name))return bt("createIndicator","value","indicator not supported, you may need to use registerIndicator to add one!!!"),null;var s=null===i||void 0===i?void 0:i.id,l=this.getDrawPaneById(null!==s&&void 0!==s?s:"");if(null!==l)this._chartStore.getIndicatorStore().addInstance(o,null!==s&&void 0!==s?s:"",null!==e&&void 0!==e&&e).then(function(t){var e;a._setPaneOptions(null!==i&&void 0!==i?i:{},null!==(e=l.getAxisComponent().buildTicks(!0))&&void 0!==e&&e)}).catch(function(t){});else{null!==s&&void 0!==s||(s=de(Vi.INDICATOR));var c=this._createPane(nr,s,null!==i&&void 0!==i?i:{}),u=null!==(r=null===i||void 0===i?void 0:i.height)&&void 0!==r?r:Wi;c.setBounding({height:u}),this._chartStore.getIndicatorStore().addInstance(o,s,null!==e&&void 0!==e&&e).finally(function(){a.adjustPaneViewport(!0,!0,!0,!0,!0),null===n||void 0===n||n()})}return null!==s&&void 0!==s?s:null},t.prototype.overrideIndicator=function(t,e,i){var n=this;this._chartStore.getIndicatorStore().override(t,null!==e&&void 0!==e?e:null).then(function(t){var e=q(t,2),r=e[0],a=e[1];(r||a)&&(n.adjustPaneViewport(!1,a,!0,a),null===i||void 0===i||i())}).catch(function(){})},t.prototype.getIndicatorByPaneId=function(t,e){return this._chartStore.getIndicatorStore().getInstanceByPaneId(t,e)},t.prototype.removeIndicator=function(t,e){var i,n,r,a=this._chartStore.getIndicatorStore(),o=a.removeInstance(t,e);if(o){var s=!1;if(t!==Vi.CANDLE&&!a.hasInstances(t)){var l=this.getDrawPaneById(t),c=this._drawPanes.findIndex(function(e){return e.getId()===t});if(null!==l){s=!0;var u=this._separatorPanes.get(l);if(Mt(u)){var d=null===u||void 0===u?void 0:u.getTopPane();try{for(var h=j(this._separatorPanes),p=h.next();!p.done;p=h.next()){var f=p.value;if(f[1].getTopPane().getId()===l.getId()){f[1].setTopPane(d);break}}}catch(g){i={error:g}}finally{try{p&&!p.done&&(n=h.return)&&n.call(h)}finally{if(i)throw i.error}}u.destroy(),this._separatorPanes.delete(l)}this._drawPanes.splice(c,1),l.destroy();var v=this._drawPanes[0];Mt(v)&&v.getId()===Vi.X_AXIS&&(v=this._drawPanes[1]),null===(r=this._separatorPanes.get(v))||void 0===r||r.destroy(),this._separatorPanes.delete(v)}}this.adjustPaneViewport(s,!0,!0,!0,!0)}},t.prototype.createOverlay=function(t,e){var i=[];if(Et(t))i=[{name:t}];else if(St(t))i=t.map(function(t){return Et(t)?{name:t}:t});else{var n=t;i=[n]}var r=!0;Mt(e)&&null!==this.getDrawPaneById(e)||(e=Vi.CANDLE,r=!1);var a=this._chartStore.getOverlayStore().addInstances(i,e,r);return St(t)?a:a[0]},t.prototype.getOverlayById=function(t){return this._chartStore.getOverlayStore().getInstanceById(t)},t.prototype.overrideOverlay=function(t){this._chartStore.getOverlayStore().override(t)},t.prototype.removeOverlay=function(t){var e;Mt(t)&&(e=Et(t)?{id:t}:t),this._chartStore.getOverlayStore().removeInstance(e)},t.prototype.setPaneOptions=function(t){this._setPaneOptions(t,!1)},t.prototype.setZoomEnabled=function(t){this._chartStore.getTimeScaleStore().setZoomEnabled(t)},t.prototype.isZoomEnabled=function(){return this._chartStore.getTimeScaleStore().getZoomEnabled()},t.prototype.setScrollEnabled=function(t){this._chartStore.getTimeScaleStore().setScrollEnabled(t)},t.prototype.isScrollEnabled=function(){return this._chartStore.getTimeScaleStore().getScrollEnabled()},t.prototype.scrollByDistance=function(t,e){var i=Tt(e)&&e>0?e:0,n=this._chartStore.getTimeScaleStore();if(n.startScroll(),i>0){var r=new le({duration:i});r.doFrame(function(e){var r=t*(e/i);n.scroll(r)}),r.start()}else n.scroll(t)},t.prototype.scrollToRealTime=function(t){var e=this._chartStore.getTimeScaleStore(),i=e.getBarSpace().bar,n=e.getLastBarRightSideDiffBarCount()-e.getInitialOffsetRightDistance()/i,r=n*i;this.scrollByDistance(r,t)},t.prototype.scrollToDataIndex=function(t,e){var i=this._chartStore.getTimeScaleStore(),n=(i.getLastBarRightSideDiffBarCount()+(this.getDataList().length-1-t))*i.getBarSpace().bar;this.scrollByDistance(n,e)},t.prototype.scrollToTimestamp=function(t,e){var i=pe(this.getDataList(),"timestamp",t);this.scrollToDataIndex(i,e)},t.prototype.zoomAtCoordinate=function(t,e,i){var n=Tt(i)&&i>0?i:0,r=this._chartStore.getTimeScaleStore(),a=r.getBarSpace().bar,o=a*t,s=o-a;if(n>0){var l=0,c=new le({duration:n});c.doFrame(function(t){var i=s*(t/n),a=(i-l)/r.getBarSpace().bar*ke;r.zoom(a,e),l=i}),c.start()}else r.zoom(s/a*ke,e)},t.prototype.zoomAtDataIndex=function(t,e,i){var n=this._chartStore.getTimeScaleStore().dataIndexToCoordinate(e);this.zoomAtCoordinate(t,{x:n,y:0},i)},t.prototype.zoomAtTimestamp=function(t,e,i){var n=pe(this.getDataList(),"timestamp",e);this.zoomAtDataIndex(t,n,i)},t.prototype.convertToPixel=function(t,e){var i,n=e.paneId,r=void 0===n?Vi.CANDLE:n,a=e.absolute,o=void 0!==a&&a,s=[];if(r!==Vi.X_AXIS){var l=this.getDrawPaneById(r);if(null!==l){var c=this._chartStore.getTimeScaleStore(),u=l.getBounding(),d=(new Array).concat(t),h=this._xAxisPane.getAxisComponent(),p=l.getAxisComponent();s=d.map(function(t){var e={},i=t.dataIndex;if(Tt(t.timestamp)&&(i=c.timestampToDataIndex(t.timestamp)),Tt(i)&&(e.x=null===h||void 0===h?void 0:h.convertToPixel(i)),Tt(t.value)){var n=null===p||void 0===p?void 0:p.convertToPixel(t.value);e.y=o?u.top+n:n}return e})}}return St(t)?s:null!==(i=s[0])&&void 0!==i?i:{}},t.prototype.convertFromPixel=function(t,e){var i,n=e.paneId,r=void 0===n?Vi.CANDLE:n,a=e.absolute,o=void 0!==a&&a,s=[];if(r!==Vi.X_AXIS){var l=this.getDrawPaneById(r);if(null!==l){var c=this._chartStore.getTimeScaleStore(),u=l.getBounding(),d=(new Array).concat(t),h=this._xAxisPane.getAxisComponent(),p=l.getAxisComponent();s=d.map(function(t){var e,i,n={};if(Tt(t.x)){var r=null!==(e=null===h||void 0===h?void 0:h.convertFromPixel(t.x))&&void 0!==e?e:-1;n.dataIndex=r,n.timestamp=null!==(i=c.dataIndexToTimestamp(r))&&void 0!==i?i:void 0}if(Tt(t.y)){var a=o?t.y-u.top:t.y;n.value=p.convertFromPixel(a)}return n})}}return St(t)?s:null!==(i=s[0])&&void 0!==i?i:{}},t.prototype.executeAction=function(t,e){var i;switch(t){case Pt.OnCrosshairChange:var n=X({},e);n.paneId=null!==(i=n.paneId)&&void 0!==i?i:Vi.CANDLE,this._chartStore.getTooltipStore().setCrosshair(n,{notExecuteAction:!0});break}},t.prototype.subscribeAction=function(t,e){this._chartStore.getActionStore().subscribe(t,e)},t.prototype.unsubscribeAction=function(t,e){this._chartStore.getActionStore().unsubscribe(t,e)},t.prototype.getConvertPictureUrl=function(t,e,i){var n=this,r=this._chartContainer.clientWidth,a=this._chartContainer.clientHeight,o=he("canvas",{width:"".concat(r,"px"),height:"".concat(a,"px"),boxSizing:"border-box"}),s=o.getContext("2d"),l=Vt(o);o.width=r*l,o.height=a*l,s.scale(l,l),s.fillStyle=null!==i&&void 0!==i?i:"#FFFFFF",s.fillRect(0,0,r,a);var c=null!==t&&void 0!==t&&t;return this._drawPanes.forEach(function(t){var e=n._separatorPanes.get(t);if(Mt(e)){var i=e.getBounding();s.drawImage(e.getImage(c),i.left,i.top,i.width,i.height)}var a=t.getBounding();s.drawImage(t.getImage(c),0,a.top,r,a.height)}),o.toDataURL("image/".concat(null!==e&&void 0!==e?e:"jpeg"))},t.prototype.resize=function(){this.adjustPaneViewport(!0,!0,!0,!0,!0)},t.prototype.destroy=function(){this._chartEvent.destroy(),this._drawPanes.forEach(function(t){t.destroy()}),this._drawPanes=[],this._separatorPanes.forEach(function(t){t.destroy()}),this._separatorPanes.clear(),this._container.removeChild(this._chartContainer)},t}(),Sr=new Map,kr=1;function Ar(t,e){var i;if(_t(),i=Et(t)?document.getElementById(t):t,null===i)return xt("","","The chart cannot be initialized correctly. Please check the parameters. The chart container cannot be null and child elements need to be added!!!"),null;var n=Sr.get(i.id);if(Mt(n))return bt("","","The chart has been initialized on the dom!!!"),n;var r="k_line_chart_".concat(kr++);return n=new Cr(i,e),n.id=r,i.setAttribute("k-line-chart-id",r),Sr.set(r,n),n}var Tr=i(21396),Mr=i.n(Tr);function Ir(t,e,i,n){if(!t||!e||!i||!n)return t;try{var r=Mr().enc.Base64.parse(t),a=Mr().lib.WordArray.create(r.words.slice(0,4)),o=Mr().lib.WordArray.create(r.words.slice(4)),s=Mr().enc.Base64.parse(n),l=Mr().AES.decrypt({ciphertext:o},s,{iv:a,mode:Mr().mode.CBC,padding:Mr().pad.Pkcs7}),c=l.toString(Mr().enc.Utf8);return c||t}catch(u){return t}}function Er(t,e){return Dr.apply(this,arguments)}function Dr(){return Dr=(0,c.A)((0,l.A)().m(function t(e,i){var n,r;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e&&i){t.n=1;break}throw new Error("用户ID和指标ID不能为空");case 1:return t.p=1,t.n=2,(0,f.Ay)({url:"/api/indicator/getDecryptKey",method:"post",data:{userid:e,indicatorId:i}});case 2:if(n=t.v,1!==n.code||!n.data||!n.data.key){t.n=3;break}return t.a(2,n.data.key);case 3:throw new Error(n.msg||"获取解密密钥失败");case 4:t.n=6;break;case 5:throw t.p=5,r=t.v,new Error("无法获取解密密钥,请检查网络连接或联系管理员: "+(r.message||"未知错误"));case 6:return t.a(2)}},t,null,[[1,5]])})),Dr.apply(this,arguments)}function Pr(t,e,i){return Lr.apply(this,arguments)}function Lr(){return Lr=(0,c.A)((0,l.A)().m(function t(e,i,n){var r;return(0,l.A)().w(function(t){while(1)switch(t.n){case 0:return t.n=1,Er(i,n);case 1:return r=t.v,t.a(2,Ir(e,i,n,r))}},t)})),Lr.apply(this,arguments)}function Rr(t,e){if(1===e||!0===e)return!0;if(t&&t.length>100)try{var i=atob(t);if(i.length>50)return!0}catch(n){}return!1}var Fr={name:"KlineChart",props:{symbol:{type:String,default:""},market:{type:String,default:""},timeframe:{type:String,default:"1H"},theme:{type:String,default:"light"},activeIndicators:{type:Array,default:function(){return[]}},realtimeEnabled:{type:Boolean,default:!1},userId:{type:Number,default:null}},emits:["retry","price-change","load","indicator-toggle"],setup:function(t,e){var i=e.emit,n=(0,h.IJ)([]),r=(0,h.KR)(!1),a=(0,h.KR)(null),s=(0,h.KR)(!1),u=(0,h.KR)(!0),p=null,v=(0,h.KR)(!1),g=(0,h.IJ)(null),m=(0,h.KR)(t.theme||"light"),y=(0,h.KR)(null),x=(0,h.KR)(5e3),_=(0,h.KR)(!1),w=(0,h.KR)(1e4),C=(0,h.KR)(0),S=function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(g.value){var e=Date.now(),i=Number(w.value||1e4);(t||!C.value||e-C.value>=i)&&(C.value=e,_t())}},k=(0,h.KR)([]),A=(0,h.KR)([]),T=(0,h.KR)([]),M=(0,h.KR)(null),I=(0,h.nI)(),E=I.proxy,D=(0,h.EW)(function(){return[{name:"line",title:E.$t("dashboard.indicator.drawing.line"),icon:"line"},{name:"horizontalLine",title:E.$t("dashboard.indicator.drawing.horizontalLine"),icon:"minus"},{name:"verticalLine",title:E.$t("dashboard.indicator.drawing.verticalLine"),icon:"column-width"},{name:"ray",title:E.$t("dashboard.indicator.drawing.ray"),icon:"arrow-right"},{name:"straightLine",title:E.$t("dashboard.indicator.drawing.straightLine"),icon:"menu"},{name:"parallelStraightLine",title:E.$t("dashboard.indicator.drawing.parallelLine"),icon:"menu"},{name:"priceLine",title:E.$t("dashboard.indicator.drawing.priceLine"),icon:"dollar"},{name:"priceChannelLine",title:E.$t("dashboard.indicator.drawing.priceChannel"),icon:"border"},{name:"fibonacciLine",title:E.$t("dashboard.indicator.drawing.fibonacciLine"),icon:"rise"},{name:"measure",title:E.$t("dashboard.indicator.drawing.measure"),icon:"drag"}]}),F=(0,h.KR)([{id:"sma",name:"SMA (简单移动平均)",shortName:"SMA",type:"line",defaultParams:{length:20}},{id:"ema",name:"EMA (指数移动平均)",shortName:"EMA",type:"line",defaultParams:{length:20}},{id:"rsi",name:"RSI (相对强弱)",shortName:"RSI",type:"line",defaultParams:{length:14}},{id:"macd",name:"MACD",shortName:"MACD",type:"macd",defaultParams:{fast:12,slow:26,signal:9}},{id:"bb",name:"布林带 (Bollinger Bands)",shortName:"BB",type:"band",defaultParams:{length:20,mult:2}},{id:"atr",name:"ATR (平均真实波幅)",shortName:"ATR",type:"line",defaultParams:{period:14}},{id:"cci",name:"CCI (商品通道指数)",shortName:"CCI",type:"line",defaultParams:{length:20}},{id:"williams",name:"Williams %R (威廉指标)",shortName:"W%R",type:"line",defaultParams:{length:14}},{id:"mfi",name:"MFI (资金流量指标)",shortName:"MFI",type:"line",defaultParams:{length:14}},{id:"adx",name:"ADX (平均趋向指数)",shortName:"ADX",type:"adx",defaultParams:{length:14}},{id:"obv",name:"OBV (能量潮)",shortName:"OBV",type:"line",defaultParams:{}},{id:"adosc",name:"ADOSC (积累/派发振荡器)",shortName:"ADOSC",type:"line",defaultParams:{fast:3,slow:10}},{id:"ad",name:"AD (积累/派发线)",shortName:"AD",type:"line",defaultParams:{}},{id:"kdj",name:"KDJ (随机指标)",shortName:"KDJ",type:"line",defaultParams:{period:9,k:3,d:3}}]),B=function(e){return t.activeIndicators.some(function(t){return t.id===e})},N=function(t){if(g.value){var e={line:"segment",horizontalLine:"horizontalStraightLine",verticalLine:"verticalStraightLine",ray:"rayLine",straightLine:"straightLine",parallelStraightLine:"parallelStraightLine",priceLine:"priceLine",priceChannelLine:"priceChannelLine",fibonacciLine:"fibonacciLine",measure:"priceRangeMeasure"},i=e[t]||t;if(M.value!==t){M.value=t;try{var n=["priceRangeMeasure"];if(n.includes(i)){if("function"!==typeof g.value.overrideOverlay)return void(M.value=null);g.value.overrideOverlay({name:i,lock:!1})}else{var r={name:i,lock:!1,extendData:{isDrawing:!0}},a=g.value.createOverlay(r);a?T.value.push(a):M.value=null}}catch(o){M.value=null}}else{M.value=null;try{"function"===typeof g.value.overrideOverlay&&g.value.overrideOverlay(null)}catch(s){}}}},O=function(){if(g.value)try{T.value.forEach(function(t){try{"function"===typeof g.value.removeOverlay?g.value.removeOverlay(t):"function"===typeof g.value.removeOverlayById&&g.value.removeOverlayById(t)}catch(e){}}),T.value=[],M.value=null,"function"===typeof g.value.overrideOverlay&&g.value.overrideOverlay(null)}catch(t){}},z=function(t){var e=B(t.id);if(e)i("indicator-toggle",{action:"remove",indicator:{id:t.id}});else{var n=(0,d.A)((0,d.A)({},t),{},{params:(0,d.A)({},t.defaultParams),calculate:null});i("indicator-toggle",{action:"add",indicator:n})}},W=(0,h.KR)(null),V=(0,h.KR)(!1),$=(0,h.KR)(!1),H=(0,h.KR)(!1),K=(0,h.EW)(function(){return"dark"===m.value?{backgroundColor:"#131722",textColor:"#d1d4dc",textColorSecondary:"#787b86",borderColor:"#2a2e39",gridLineColor:"#1f2943",gridLineColorDashed:"#363c4e",tooltipBg:"rgba(25, 27, 32, 0.95)",tooltipBorder:"#333",tooltipText:"#ccc",tooltipTextSecondary:"#888",axisLabelColor:"#787b86",splitAreaColor:["rgba(250,250,250,0.05)","rgba(200,200,200,0.02)"],dataZoomBorder:"#2a2e39",dataZoomFiller:"rgba(41, 98, 255, 0.15)",dataZoomHandle:"#13c2c2",dataZoomText:"transparent",dataZoomBg:"#1f2943"}:{backgroundColor:"#fff",textColor:"#333",textColorSecondary:"#666",borderColor:"#e8e8e8",gridLineColor:"#e8e8e8",gridLineColorDashed:"#e8e8e8",tooltipBg:"rgba(255, 255, 255, 0.95)",tooltipBorder:"#e8e8e8",tooltipText:"#333",tooltipTextSecondary:"#666",axisLabelColor:"#666",splitAreaColor:["rgba(250,250,250,0.05)","rgba(200,200,200,0.02)"],dataZoomBorder:"#e8e8e8",dataZoomFiller:"rgba(24, 144, 255, 0.15)",dataZoomHandle:"#1890ff",dataZoomText:"#999",dataZoomBg:"#f0f2f5"}}),Y=function(t){return"dark"===m.value?["#13c2c2","#e040fb","#ffeb3b","#00e676","#ff6d00","#9c27b0"][t%6]:["#13c2c2","#9c27b0","#f57c00","#1976d2","#c2185b","#7b1fa2"][t%6]},X=function(){return new Promise(function(t,e){if(window.pyodide)return W.value=window.pyodide,$.value=!0,void t(window.pyodide);V.value=!0;var i="0.25.0",n=function(t){return t&&t.endsWith("/")?t:t?t+"/":t},r="/assets/pyodide/v".concat(i,"/full/"),a="https://cdn.jsdelivr.net/pyodide/v".concat(i,"/full/"),o=n({NODE_ENV:"production",VUE_APP_API_BASE_URL:"/api",VUE_APP_PREVIEW:"false",BASE_URL:"/"}.VUE_APP_PYODIDE_LOCAL_BASE||r),s=n({NODE_ENV:"production",VUE_APP_API_BASE_URL:"/api",VUE_APP_PREVIEW:"false",BASE_URL:"/"}.VUE_APP_PYODIDE_CDN_BASE||a),u=({NODE_ENV:"production",VUE_APP_API_BASE_URL:"/api",VUE_APP_PREVIEW:"false",BASE_URL:"/"}.VUE_APP_PYODIDE_PREFER_CDN||"").toString().toLowerCase(),d=!u||("true"===u||"1"===u||"yes"===u),h=function(t){return new Promise(function(e,i){var n=document.querySelector('script[data-pyodide-src="'.concat(t,'"]'));if(n)return"function"===typeof window.loadPyodide?e():(n.addEventListener("load",function(){return e()},{once:!0}),void n.addEventListener("error",function(){return i(new Error("Pyodide 脚本加载失败"))},{once:!0}));var r=document.createElement("script");r.dataset.pyodideSrc=t,r.src=t,r.onload=function(){return e()},r.onerror=function(){return i(new Error("Pyodide 脚本加载失败"))},document.head.appendChild(r)})},p=function(){var e=(0,c.A)((0,l.A)().m(function e(i){return(0,l.A)().w(function(e){while(1)switch(e.n){case 0:if("function"===typeof window.loadPyodide){e.n=1;break}throw new Error("loadPyodide 函数未找到");case 1:return e.n=2,window.loadPyodide({indexURL:i});case 2:return window.pyodide=e.v,e.n=3,window.pyodide.loadPackage(["pandas","numpy"]);case 3:W.value=window.pyodide,$.value=!0,V.value=!1,t(window.pyodide);case 4:return e.a(2)}},e)}));return function(t){return e.apply(this,arguments)}}();(0,c.A)((0,l.A)().m(function t(){var e,i,n;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e=function(){var t=(0,c.A)((0,l.A)().m(function t(e){return(0,l.A)().w(function(t){while(1)switch(t.n){case 0:return t.n=1,h(e+"pyodide.js");case 1:return t.n=2,p(e);case 2:return t.a(2)}},t)}));return function(e){return t.apply(this,arguments)}}(),t.p=1,!d){t.n=3;break}return t.n=2,e(s);case 2:t.n=4;break;case 3:return t.n=4,e(o);case 4:t.n=9;break;case 5:return t.p=5,i=t.v,t.p=6,t.n=7,e(d?o:s);case 7:t.n=9;break;case 8:throw t.p=8,n=t.v,n||i;case 9:return t.a(2)}},t,null,[[6,8],[1,5]])}))().catch(function(t){V.value=!1,H.value=!0,e(t)})})},U=function(t){if(!t||"string"!==typeof t)return null;try{var e={},i=t.match(/(\w+)\s*=\s*(\d+\.?\d*)/g);return i&&i.forEach(function(t){var i=t.split("=");if(2===i.length){var n=i[0].trim(),r=parseFloat(i[1].trim());isNaN(r)||(e[n]=r)}}),{params:e,plots:[],success:!0}}catch(n){return{params:{},plots:[],success:!1}}},G=function(){var e=(0,c.A)((0,l.A)().m(function e(i,n){var r,a,s,c,u,d,h,p,f,v,g,m,y,b,x,_,w,C,S=arguments;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(r=S.length>2&&void 0!==S[2]?S[2]:{},a=S.length>3&&void 0!==S[3]?S[3]:{},$.value&&W.value){e.n=5;break}if(!V.value){e.n=4;break}s=0;case 1:if(!(V.value&&s<30)){e.n=4;break}return e.n=2,new Promise(function(t){return setTimeout(t,500)});case 2:if(s++,!$.value||!W.value){e.n=3;break}return e.a(3,4);case 3:e.n=1;break;case 4:if($.value&&W.value){e.n=5;break}throw V.value?(V.value=!1,H.value=!0):H.value=!0,new Error("Python 引擎未就绪,请等待加载完成");case 5:if(e.p=5,c=i,u=a.is_encrypted||a.isEncrypted||0,!u&&!Rr(i,u)){e.n=11;break}if(d=a.user_id||a.userId||t.userId||r.userId,h=a.originalId||a.id||r.indicatorId,!d||!h){e.n=10;break}return e.p=6,e.n=7,Pr(c,d,h);case 7:c=e.v,e.n=9;break;case 8:throw e.p=8,_=e.v,new Error("代码解密失败,无法执行指标: "+(_.message||"未知错误"));case 9:e.n=11;break;case 10:throw new Error("缺少必要的解密参数(用户ID或指标ID),无法执行加密指标");case 11:return p=n.map(function(t){var e=t.timestamp||t.time;return e<1e10&&(e*=1e3),{time:Math.floor(e/1e3),open:parseFloat(t.open)||0,high:parseFloat(t.high)||0,low:parseFloat(t.low)||0,close:parseFloat(t.close)||0,volume:parseFloat(t.volume)||0}}),f=JSON.stringify(p),v=JSON.stringify(r||{}),g=f.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\n/g,"\\n").replace(/\r/g,"\\r"),m=v.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\n/g,"\\n").replace(/\r/g,"\\r"),y="\nimport json\nimport pandas as pd\nimport numpy as np\n\n# 递归清理 NaN 值的函数\ndef clean_nan(obj):\n if isinstance(obj, dict):\n return {k: clean_nan(v) for k, v in obj.items()}\n elif isinstance(obj, list):\n return [clean_nan(item) for item in obj]\n elif isinstance(obj, (pd.Series, np.ndarray)):\n return [None if (isinstance(x, float) and (np.isnan(x) or np.isinf(x))) else x for x in obj]\n elif isinstance(obj, (float, np.floating)):\n if np.isnan(obj) or np.isinf(obj):\n return None\n return float(obj)\n elif pd.isna(obj):\n return None\n else:\n return obj\n\n# 接收 JSON 数据\nraw_data = json.loads('".concat(g,"')\nparams = json.loads('").concat(m,"')\n\n# 将前端参数注入为指标代码可直接使用的变量(对齐回测/实盘执行环境)\n# 兼容多种命名(snake_case / camelCase)\ndef _get_param(key, default=None):\n if key in params:\n return params.get(key, default)\n # camelCase fallback\n camel = ''.join([key.split('_')[0]] + [p.capitalize() for p in key.split('_')[1:]])\n return params.get(camel, default)\n\ntry:\n leverage = float(_get_param('leverage', 1) or 1)\nexcept Exception:\n leverage = 1\n\ntrade_direction = _get_param('trade_direction', _get_param('tradeDirection', 'both')) or 'both'\n\ntry:\n initial_position = int(_get_param('initial_position', 0) or 0)\nexcept Exception:\n initial_position = 0\n\ntry:\n initial_avg_entry_price = float(_get_param('initial_avg_entry_price', 0.0) or 0.0)\nexcept Exception:\n initial_avg_entry_price = 0.0\n\ntry:\n initial_position_count = int(_get_param('initial_position_count', 0) or 0)\nexcept Exception:\n initial_position_count = 0\n\ntry:\n initial_last_add_price = float(_get_param('initial_last_add_price', 0.0) or 0.0)\nexcept Exception:\n initial_last_add_price = 0.0\n\ntry:\n initial_highest_price = float(_get_param('initial_highest_price', 0.0) or 0.0)\nexcept Exception:\n initial_highest_price = 0.0\n\n# 转换为 DataFrame\ndf = pd.DataFrame(raw_data)\n\n# 转换数据类型\ndf['open'] = df['open'].astype(float)\ndf['high'] = df['high'].astype(float)\ndf['low'] = df['low'].astype(float)\ndf['close'] = df['close'].astype(float)\ndf['volume'] = df['volume'].astype(float)\n\n# 用户代码(已解密)\n").concat(c,"\n\n# 构造输出(如果用户没有定义 output,则尝试从 result_json 获取)\nif 'output' not in locals():\n if 'result_json' in locals():\n output = json.loads(result_json)\n else:\n output = {\"plots\": []}\nelse:\n # 确保 output 是字典格式\n if isinstance(output, str):\n output = json.loads(output)\n\n# 清理 output 中的所有 NaN 值\noutput = clean_nan(output)\n\n# 返回 JSON 字符串\njson.dumps(output)\n"),e.n=12,W.value.runPythonAsync(y);case 12:if(b=e.v,b&&"string"===typeof b){e.n=13;break}throw new Error("Python 代码执行后未返回有效的 JSON 字符串,返回类型: ".concat((0,o.A)(b)));case 13:e.p=13,x=JSON.parse(b),e.n=15;break;case 14:throw e.p=14,w=e.v,new Error("JSON 解析失败: ".concat(w.message,"。可能是数据中包含 NaN 或其他无效值。"));case 15:if(x){e.n=16;break}return e.a(2,{plots:[],signals:[],calculatedVars:{}});case 16:return x.plots&&Array.isArray(x.plots)||(x.plots=[]),x.plots=x.plots.map(function(t){return t.data&&Array.isArray(t.data)&&(t.data=t.data.map(function(t){return null===t||void 0===t||"number"===typeof t&&isNaN(t)?null:t})),t}),x.signals&&Array.isArray(x.signals)&&(x.signals=x.signals.map(function(t){return t.data&&Array.isArray(t.data)&&(t.data=t.data.map(function(t){return null===t||void 0===t||"number"===typeof t&&isNaN(t)?null:t})),t})),x.calculatedVars||(x.calculatedVars={}),e.a(2,x);case 17:throw e.p=17,C=e.v,new Error("Python 执行失败: ".concat(C.message));case 18:return e.a(2)}},e,null,[[13,14],[6,8],[5,17]])}));return function(t,i){return e.apply(this,arguments)}}();function j(t,e){for(var i=[],n=0;nn-e+1){var c=(t[o-1].high+t[o-1].low+t[o-1].close)/3;s>c?r+=l:sp&&h>0?o.push(h):o.push(0),p>h&&p>0?s.push(p):s.push(0)}for(var f=[],v=[],g=[],m=0;m=e-1){var w=f[m],C=v[m],S=g[m];if(0===w?(i.push(0),n.push(0)):(i.push(C/w*100),n.push(S/w*100)),m>=e-1){var k=i[m]+n[m],A=0===k?0:Math.abs(i[m]-n[m])/k*100;if(m===e-1)r.push(A);else if(m===e){var T=Math.abs(i[m-1]-n[m-1])/(i[m-1]+n[m-1])*100;r.push((T+A)/2)}else r.push((r[m-1]*(e-1)+A)/e)}}}return{adx:r,plusDI:i,minusDI:n}}function nt(t){for(var e=[],i=0,n=0;nt[n-1].close?i+=t[n].volume:t[n].close255?12:7)},0),m=g+2*h,y=f+2*p,b=(null===(i=a.extendData)||void 0===i?void 0:i.side)||(null===(n=a.extendData)||void 0===n?void 0:n.type)||"buy",x="buy"===b,_=x?u:u-y,w=d,C=w,S=x?_:_+y;return[{type:"line",attrs:{coordinates:[{x:c,y:C},{x:c,y:S}]},styles:{style:"stroke",color:l,dashedValue:[2,2]},ignoreEvent:!0},{type:"circle",attrs:{x:c,y:w,r:4},styles:{style:"fill",color:l},ignoreEvent:!0},{type:"rect",attrs:{x:c-m/2,y:_,width:m,height:y,r:4},styles:{style:"fill",color:l,borderSize:0},ignoreEvent:!0},{type:"text",attrs:{x:c,y:_+y/2,text:v,align:"center",baseline:"middle"},styles:{color:"#ffffff",size:f,weight:"bold",backgroundColor:l,borderRadius:5},ignoreEvent:!0}]}}),Ni({name:"priceRangeMeasure",totalStep:2,lock:!1,needDefaultPointFigure:!1,needDefaultXAxisFigure:!1,needDefaultYAxisFigure:!1,createPointFigures:function(t){var e=t.coordinates,i=t.overlay,n=t.ctx;if(!e[0]||!e[1])return[];var r=i.points[0],a=i.points[1];if(!r||!a)return[];var o=r.value,s=a.value,l=s-o,c=l/o*100,u=r.timestamp,d=a.timestamp,h=Math.abs(d-u),p="",f=Math.floor(h/864e5),v=Math.floor(h%864e5/36e5),g=Math.floor(h%36e5/6e4),m=Math.floor(h%6e4/1e3);p=f>0?"".concat(f,"天").concat(v>0?v+"小时":""):v>0?"".concat(v,"小时").concat(g>0?g+"分钟":""):g>0?"".concat(g,"分钟"):"".concat(m,"秒");var y=0;try{if(n&&n.chart){var b=n.chart.getData();if(b&&Array.isArray(b)&&b.length>0){var x=b.findIndex(function(t){return Math.abs(t.timestamp-u)<1e3}),_=b.findIndex(function(t){return Math.abs(t.timestamp-d)<1e3});x>=0&&_>=0&&(y=Math.abs(_-x))}}}catch(z){}var w=c>=0?"+".concat(c.toFixed(2),"%"):"".concat(c.toFixed(2),"%"),C=l>=0?"+".concat(l.toFixed(2)):"".concat(l.toFixed(2)),S="".concat(w," ").concat(C);y>0?(S+=" (".concat(y,"根"),p&&(S+=" / ".concat(p)),S+=")"):p&&(S+=" (".concat(p,")"));var k=l>=0,A=k?"#0ecb81":"#f6465d",T=k?"#0ecb81":"#f6465d",M=k?"rgba(14, 203, 129, 0.1)":"rgba(246, 70, 93, 0.1)",I=e[0].x,E=e[0].y,D=e[1].x,P=e[1].y,L=(I+D)/2,R=(E+P)/2,F=-20,B=12,N=7*S.length+16,O=B+8;return[{type:"line",attrs:{coordinates:[{x:I,y:E},{x:D,y:P}]},styles:{style:"stroke",color:A,size:2,dashedValue:[4,4]},ignoreEvent:!1},{type:"circle",attrs:{x:I,y:E,r:4},styles:{style:"fill",color:A},ignoreEvent:!1},{type:"circle",attrs:{x:D,y:P,r:4},styles:{style:"fill",color:A},ignoreEvent:!1},{type:"rect",attrs:{x:L-N/2,y:R+F-O/2,width:N,height:O,r:4},styles:{style:"fill",color:M,borderSize:1,borderColor:A},ignoreEvent:!1},{type:"text",attrs:{x:L,y:R+F,text:S,align:"center",baseline:"middle"},styles:{color:T,size:B,weight:"bold"},ignoreEvent:!1}]}});var st=function(t){return t.map(function(t){var e=t.time||t.timestamp;return"string"===typeof e&&(e=parseInt(e)),e<1e10&&(e*=1e3),{timestamp:e,open:parseFloat(t.open),high:parseFloat(t.high),low:parseFloat(t.low),close:parseFloat(t.close),volume:parseFloat(t.volume||0)}}).filter(function(t){return t.timestamp&&!isNaN(t.open)&&!isNaN(t.high)&&!isNaN(t.low)&&!isNaN(t.close)}).sort(function(t,e){return t.timestamp-e.timestamp})},lt=function(t){if(t.length>0){var e=t[t.length-1];if(t.length>1){var n=t[t.length-2],r=e.close.toFixed(2),a=(e.close-n.close)/n.close*100;i("price-change",{price:r,change:a})}else{var o=e.close.toFixed(2);i("price-change",{price:o,change:0})}}},ct=function(t){return t.map(function(t){return{time:Math.floor(t.timestamp/1e3),open:t.open,high:t.high,low:t.low,close:t.close,volume:t.volume}})},ut=function(t,e,i){var n=new Date(1e3*t),r=new Date(1e3*e);switch(i){case"1m":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours()&&n.getMinutes()===r.getMinutes();case"5m":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours()&&Math.floor(n.getMinutes()/5)===Math.floor(r.getMinutes()/5);case"15m":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours()&&Math.floor(n.getMinutes()/15)===Math.floor(r.getMinutes()/15);case"30m":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours()&&Math.floor(n.getMinutes()/30)===Math.floor(r.getMinutes()/30);case"1H":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours();case"4H":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&Math.floor(n.getHours()/4)===Math.floor(r.getHours()/4);case"1D":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate();case"1W":var a=Math.floor((n.getTime()-new Date(n.getFullYear(),0,1).getTime())/6048e5),o=Math.floor((r.getTime()-new Date(r.getFullYear(),0,1).getTime())/6048e5);return n.getFullYear()===r.getFullYear()&&a===o;default:return t===e}},dt=function(){var e=(0,c.A)((0,l.A)().m(function e(){var i,o,s,c,d,p,v,m=arguments;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(i=m.length>0&&void 0!==m[0]&&m[0],t.symbol){e.n=1;break}return e.a(2);case 1:if(!r.value||i){e.n=2;break}return e.a(2);case 2:return r.value=!0,a.value=null,e.p=3,o=[],e.p=4,e.n=5,(0,f.Ay)({url:"/api/indicator/kline",method:"get",params:{market:t.market,symbol:t.symbol,timeframe:t.timeframe,limit:500}});case 5:if(s=e.v,1!==s.code||!s.data||!Array.isArray(s.data)){e.n=6;break}o=st(s.data),e.n=7;break;case 6:throw c=s.msg||"获取K线数据失败","tiingo_subscription"===s.hint&&(c=E.$t("dashboard.indicator.error.tiingoSubscription")||"Forex 1-minute data requires Tiingo paid subscription"),new Error(c);case 7:e.n=9;break;case 8:throw e.p=8,p=e.v,p;case 9:if(o&&0!==o.length){e.n=10;break}throw new Error("未获取到K线数据");case 10:n.value=o,u.value=!0,d=ct(o),lt(d),(0,h.dY)(function(){if(g.value){var e=n.value.filter(function(t){return t.timestamp&&!isNaN(t.open)&&!isNaN(t.high)&&!isNaN(t.low)&&!isNaN(t.close)});if(e.length>0&&g.value){try{g.value.applyNewData(e)}catch(i){g.value.applyNewData(e)}setTimeout(function(){g.value&&_t()},100)}}else mt();t.realtimeEnabled&&(gt(),vt())}),e.n=12;break;case 11:if(e.p=11,v=e.v,a.value=E.$t("dashboard.indicator.error.loadDataFailed")+": "+(v.message||E.$t("dashboard.indicator.error.loadDataFailedDesc")),n.value=[],g.value)try{g.value.applyNewData([])}catch(l){}case 12:return e.p=12,r.value=!1,e.f(12);case 13:return e.a(2)}},e,null,[[4,8],[3,11,12,13]])}));return function(){return e.apply(this,arguments)}}(),ht=function(){var e=(0,c.A)((0,l.A)().m(function e(i){return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.symbol&&n.value&&0!==n.value.length){e.n=1;break}return e.a(2);case 1:if(!s.value&&!p){e.n=6;break}if(!p){e.n=5;break}return e.p=2,e.n=3,p;case 3:e.n=5;break;case 4:e.p=4,e.v;case 5:return e.a(2);case 6:if(u.value){e.n=7;break}return g.value&&"function"===typeof g.value.noMoreData&&g.value.noMoreData(),e.a(2);case 7:return s.value=!0,p=(0,c.A)((0,l.A)().m(function e(){var r,a,o,c,d,v;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.n=1,(0,h.dY)();case 1:return e.p=1,r=Math.floor(i/1e3),e.n=2,(0,f.Ay)({url:"/api/indicator/kline",method:"get",params:{market:t.market,symbol:t.symbol,timeframe:t.timeframe,limit:500,before_time:r}});case 2:if(a=e.v,1!==a.code||!a.data||!Array.isArray(a.data)){e.n=5;break}if(o=st(a.data),0!==o.length){e.n=3;break}return u.value=!1,g.value&&"function"===typeof g.value.noMoreData&&g.value.noMoreData(),e.a(2);case 3:if(c=o.filter(function(t){return t.timestamp0&&(r=st(i.data),a=(0,R.A)(n.value),r.length>0&&(o=Math.floor(r[r.length-1].timestamp/1e3),s=Math.floor(a[a.length-1].timestamp/1e3),ut(o,s,t.timeframe)?(c=a[a.length-1],u=r[r.length-1],a[a.length-1]={timestamp:c.timestamp,open:c.open,high:Math.max(c.high,u.high),low:Math.min(c.low,u.low),close:u.close,volume:u.volume},n.value=a,d=ct(n.value),lt(d),g.value&&"function"===typeof g.value.updateData?(h=n.value.length-1,g.value.updateData(a[h]),S(!1)):g.value&&(g.value.applyNewData(n.value),S(!1))):o>s&&(p=r.filter(function(e){var i=Math.floor(e.timestamp/1e3);return!a.some(function(e){var n=Math.floor(e.timestamp/1e3);return ut(i,n,t.timeframe)})}),p.length>0&&(n.value=[].concat((0,R.A)(a),(0,R.A)(p)),n.value.length>500&&(n.value=n.value.slice(-500)),v=ct(n.value),lt(v),g.value&&"function"===typeof g.value.applyMoreData?(g.value.applyMoreData(p),S(!0)):g.value&&(g.value.applyNewData(n.value),S(!0)))))),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.a(2)}},e,null,[[1,3]])}));return function(){return e.apply(this,arguments)}}(),vt=function(){y.value&&clearInterval(y.value);var e={"1m":5e3,"5m":1e4,"15m":15e3,"30m":3e4,"1H":6e4,"4H":3e5,"1D":6e5,"1W":18e5},i=e[t.timeframe]||1e4;x.value=Math.min(i,1e3),t.realtimeEnabled&&t.symbol&&n.value.length>0&&(y.value=setInterval(function(){!r.value&&t.symbol&&n.value&&n.value.length>0&&ft()},x.value))},gt=function(){y.value&&(clearInterval(y.value),y.value=null)},mt=function(){var t=document.getElementById("kline-chart-container");if(t)if(0!==t.clientWidth&&0!==t.clientHeight){if(g.value){try{g.value.destroy()}catch(y){}g.value=null}try{var e=document.getElementById("kline-chart-container");if(!e)throw new Error("容器元素不存在");try{g.value=Ar(e,{drawingBarVisible:!0,overlay:{visible:!0}})}catch(y){g.value=Ar(e)}if(g.value&&"function"===typeof g.value.setDrawingBarVisible?g.value.setDrawingBarVisible(!0):g.value&&"function"===typeof g.value.setDrawingBar?g.value.setDrawingBar(!0):g.value&&"function"===typeof g.value.enableDrawing&&g.value.enableDrawing(!0),!g.value)throw new Error("图表初始化失败:无法创建图表实例");if(g.value&&("function"===typeof g.value.setDrawingBarVisible&&g.value.setDrawingBarVisible(!0),"function"===typeof g.value.setDrawingBar&&g.value.setDrawingBar(!0),"function"===typeof g.value.enableDrawing&&g.value.enableDrawing(!0)),bt(),g.value&&"function"===typeof g.value.subscribeAction){if(g.value.subscribeAction("onOverlayCreated",function(t){if(M.value&&t&&t.id){var e={line:"segment",horizontalLine:"horizontalStraightLine",verticalLine:"verticalStraightLine",ray:"rayLine",straightLine:"straightLine",parallelStraightLine:"parallelStraightLine",priceLine:"priceLine",priceChannelLine:"priceChannelLine",fibonacciLine:"fibonacciLine",measure:"priceRangeMeasure"},i=e[M.value];if(!t.name||t.name===i||"priceRangeMeasure"===i){T.value.push(t.id),M.value=null;try{"function"===typeof g.value.overrideOverlay&&g.value.overrideOverlay(null)}catch(y){}}}}),"function"===typeof g.value.subscribeAction)try{g.value.subscribeAction("onOverlayComplete",function(t){M.value&&t&&t.id&&(T.value.push(t.id),M.value=null)})}catch(y){}g.value.subscribeAction("onOverlayRemoved",function(t){var e=T.value.indexOf(t);e>-1&&T.value.splice(e,1)})}if(g.value&&"function"===typeof g.value.subscribeAction){var i=null,r=!1;g.value.subscribeAction("onVisibleRangeChange",function(){var t=(0,c.A)((0,l.A)().m(function t(e){var a,o,c,d,h,f;return(0,l.A)().w(function(t){while(1)switch(t.n){case 0:if(!e||"number"!==typeof e.from){t.n=5;break}if(r){t.n=1;break}return i=e.from,r=!0,setTimeout(function(){v.value=!0},1e3),t.a(2);case 1:if(v.value){t.n=2;break}return i=e.from,t.a(2);case 2:if(!(s.value&&e.from<=0)){t.n=3;break}try{g.value&&"function"===typeof g.value.setVisibleRange&&(a=n.value.length,a>0&&(o=g.value.getVisibleRange(),o&&(c=Math.ceil((o.to-o.from)*a/100),d=.1,h=Math.min(100,d+c/a*100),g.value.setVisibleRange(d,h))))}catch(y){}return t.a(2);case 3:if(!(e.from<=5&&!s.value&&!p&&u.value&&v.value)){t.n=4;break}if(!(null!==i&&i>e.from)){t.n=4;break}if(!(n.value.length>0)){t.n=4;break}return f=n.value[0].timestamp,t.n=4,ht(f);case 4:i=e.from;case 5:return t.a(2)}},t)}));return function(e){return t.apply(this,arguments)}}())}if(n.value&&n.value.length>0){var o=n.value.filter(function(t){return t.timestamp&&!isNaN(t.open)&&!isNaN(t.high)&&!isNaN(t.low)&&!isNaN(t.close)});if(o.length>0){try{g.value.applyNewData(o)}catch(y){try{g.value.applyNewData(o)}catch(b){}}try{g.value.createIndicator("VOL",!1,{height:100,dragEnabled:!0})}catch(y){}(0,h.dY)(function(){_t()})}}window.addEventListener("resize",yt)}catch(a){a.value=E.$t("dashboard.indicator.error.chartInitFailed")+": "+(a.message||"未知错误")}}else{var d=0,f=10,m=function(){var t=document.getElementById("kline-chart-container");t&&t.clientWidth>0&&t.clientHeight>0?mt():d0&&t.clientHeight>0&&mt()}},bt=function(){if(g.value){var t=K.value,e="dark"===m.value;g.value.setStyles({grid:{show:!0,horizontal:{show:!0,color:t.gridLineColor,style:"dashed",size:1},vertical:{show:!1}},candle:{priceMark:{show:!0,high:{show:!0,color:t.axisLabelColor},low:{show:!0,color:t.axisLabelColor}},tooltip:{showRule:"always",showType:"standard",labels:[E.$t("dashboard.indicator.tooltip.time"),E.$t("dashboard.indicator.tooltip.open"),E.$t("dashboard.indicator.tooltip.high"),E.$t("dashboard.indicator.tooltip.low"),E.$t("dashboard.indicator.tooltip.close"),E.$t("dashboard.indicator.tooltip.volume")],values:function(t){var e=new Date(t.timestamp);return["".concat(e.getFullYear(),"-").concat(e.getMonth()+1,"-").concat(e.getDate()," ").concat(e.getHours(),":").concat(e.getMinutes()),t.open.toFixed(2),t.high.toFixed(2),t.low.toFixed(2),t.close.toFixed(2),t.volume.toFixed(0)]}},bar:{upColor:e?"#0ecb81":"#13c2c2",downColor:e?"#f6465d":"#fa541c",noChangeColor:t.borderColor}},indicator:{tooltip:{showRule:"always",showType:"standard"}},xAxis:{show:!0,axisLine:{show:!0,color:t.borderColor}},yAxis:{show:!0,axisLine:{show:!1}},crosshair:{show:!0,horizontal:{show:!0,line:{show:!0,style:"dashed",color:t.gridLineColor,size:1}},vertical:{show:!0,line:{show:!0,style:"dashed",color:t.gridLineColor,size:1}}},watermark:{show:!1}})}},xt=function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:2,a=arguments.length>5&&void 0!==arguments[5]&&arguments[5];try{var o={name:t,shortName:t,calc:e,figures:i,calcParams:n,precision:r,series:a?"price":"normal"};return ri(o),!0}catch(s){return!(!s.message||!s.message.includes("already registered"))}},_t=function(){var e=(0,c.A)((0,l.A)().m(function e(){var i,r,a,o;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!_.value){e.n=1;break}return e.a(2);case 1:if(g.value&&0!==n.value.length){e.n=2;break}return e.a(2);case 2:_.value=!0,e.p=3;try{A.value.length>0&&g.value&&(A.value.forEach(function(t){try{"function"===typeof g.value.removeOverlay?g.value.removeOverlay(t):"function"===typeof g.value.removeOverlayById&&g.value.removeOverlayById(t)}catch(e){}}),A.value=[])}catch(s){}try{k.value.length>0&&(k.value.forEach(function(t){var e="string"===typeof t?t:t.name,i="string"===typeof t?void 0:t.paneId;i?g.value.removeIndicator(i,e):(g.value.removeIndicator("candle_pane",e),g.value.removeIndicator(e))}),k.value=[])}catch(s){}i=ct(n.value),r=(0,l.A)().m(function e(){var n,r,a,s,c,u,d,h,p,f,v,m,y,x,_,w,C,S,T,M,I,E,D,P,F,B,N,O,z,W,$,K,X,U,st,lt,ct,ut,dt,ht,pt,ft,vt,gt,mt,yt,bt,_t,wt,Ct,St,kt,At,Tt,Mt,It,Et,Dt,Pt,Lt,Rt,Ft,Bt,Nt,Ot,zt,Wt,Vt,$t,Ht,Kt,Yt,Xt,Ut,Gt,jt,qt,Zt,Jt,Qt,te,ee,ie,ne,re,ae,oe,se,le,ce,ue,de,he,pe,fe,ve,ge,me,ye,be,xe,_e,we,Ce,Se,ke,Ae,Te,Me,Ie,Ee,De,Pe,Le,Re,Fe,Be,Ne,Oe,ze,We,Ve,$e,He,Ke,Ye,Xe,Ue,Ge,je,qe,Ze,Je,Qe,ti,ei,ii,ni,ri,ai,oi,si,li,ci,ui,di,hi,pi,fi,vi,gi,mi,yi,bi;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(n=t.activeIndicators[o],e.p=1,"python"!==n.type){e.n=31;break}if(n.code){e.n=2;break}return e.a(2,0);case 2:if(e.p=2,!n.calculate||"function"!==typeof n.calculate){e.n=15;break}return e.n=3,n.calculate(i,n.params||{});case 3:if(r=e.v,a=[],r&&r.plots&&Array.isArray(r.plots)&&(a=(0,R.A)(r.plots)),!(r&&r.signals&&Array.isArray(r.signals))){e.n=14;break}s=(0,b.A)(r.signals),e.p=4,s.s();case 5:if((c=s.n()).done){e.n=11;break}if(u=c.value,!(u.data&&Array.isArray(u.data)&&u.data.length>0)){e.n=10;break}for(d=[],h=0;h0&&g.value){E=(0,b.A)(f);try{for(E.s();!(D=E.n()).done;){P=D.value;try{F=P.timestamp,F<1e10&&(F*=1e3),B=P.text,"function"===typeof g.value.createOverlay&&(N=g.value.createOverlay({name:"signalTag",points:[{timestamp:F,value:P.price},{timestamp:F,value:P.anchorPrice}],extendData:{text:B,color:P.color,side:P.side,action:P.action,price:P.price},lock:!0},"candle_pane"),N&&A.value.push(N))}catch(l){}}}catch(xi){E.e(xi)}finally{E.f()}}case 10:e.n=5;break;case 11:e.n=13;break;case 12:e.p=12,mi=e.v,s.e(mi);case 13:return e.p=13,s.f(),e.f(13);case 14:if(a.length>0&&(O=a.filter(function(t){return t.data&&Array.isArray(t.data)&&t.data.length>0}),O.length>0)){for(z=[],W={},$=0;$0)){e.n=23;break}for(_t=[],wt=0;wt0&&g.value){Bt=(0,b.A)(St);try{for(Bt.s();!(Nt=Bt.n()).done;){Ot=Nt.value;try{zt=Ot.timestamp,zt<1e10&&(zt*=1e3),Wt=Ot.text,"function"===typeof g.value.createOverlay&&(Vt=g.value.createOverlay({name:"signalTag",points:[{timestamp:zt,value:Ot.price},{timestamp:zt,value:Ot.anchorPrice}],extendData:{text:Wt,color:Ot.color,side:Ot.side,action:Ot.action,price:Ot.price},lock:!0},"candle_pane"),Vt&&A.value.push(Vt))}catch(l){}}}catch(xi){Bt.e(xi)}finally{Bt.f()}}case 23:e.n=18;break;case 24:e.n=26;break;case 25:e.p=25,yi=e.v,mt.e(yi);case 26:return e.p=26,mt.f(),e.f(26);case 27:if(gt.length>0&&($t=gt.filter(function(t){return t.data&&Array.isArray(t.data)&&t.data.length>0}),$t.length>0)){for(Ht=[],Kt={},Yt=0;Yt<$t.length;Yt++)Xt=$t[Yt],Ut=Xt.name||"PLOT_".concat(Yt),Gt=Ut.toLowerCase().replace(/\s+/g,"_").replace(/[^a-z0-9_]/g,"_"),jt=Xt.color||Y(Yt),qt=Xt.type||"line",Ht.push({key:Gt,title:Xt.name||Ut,type:qt,color:jt}),Kt[Gt]=Xt.data;Zt=$t.every(function(t){return!1!==t.overlay}),Jt="".concat(n.id,"_combined"),vt&&vt.name&&(Jt=vt.name);try{Qt=xt(Jt,function(t){for(var e=[],i=0;i0&&(0,h.dY)(function(){g.value&&_t()})},{deep:!0}),(0,h.wB)(function(){return t.realtimeEnabled},function(t){t?vt():gt()}),(0,h.sV)((0,c.A)((0,l.A)().m(function e(){return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.n=1,(0,h.dY)();case 1:return!t.theme||"dark"!==t.theme&&"light"!==t.theme||(m.value=t.theme),e.p=2,e.n=3,X();case 3:e.n=5;break;case 4:e.p=4,e.v,H.value=!0;case 5:(0,h.dY)(function(){setTimeout(function(){!g.value&&t.symbol&&mt()},300)});case 6:return e.a(2)}},e,null,[[2,4]])}))),(0,h.xo)(function(){gt(),g.value&&(g.value.destroy(),g.value=null),window.removeEventListener("resize",yt)}),{klineData:n,loading:r,error:a,loadingHistory:s,chartRef:g,chartTheme:m,themeConfig:K,getIndicatorColor:Y,handleRetry:wt,loadingPython:V,pythonReady:$,pyodideLoadFailed:H,formatKlineData:st,updatePricePanel:lt,isSameTimeframe:ut,loadKlineData:dt,loadMoreHistoryData:pt,updateKlineRealtime:ft,startRealtime:vt,stopRealtime:gt,initChart:mt,handleResize:yt,updateChartTheme:bt,updateIndicators:_t,executePythonStrategy:G,parsePythonStrategy:U,indicatorButtons:F,isIndicatorActive:B,toggleIndicator:z,drawingTools:D,activeDrawingTool:M,selectDrawingTool:N,clearAllDrawings:O}}},Br=Fr,Nr=(0,T.A)(Br,E,D,!1,null,"5f0b12e1",null),Or=Nr.exports,zr=function(){var t=this,e=t._self._c;return e("a-modal",{staticClass:"backtest-modal",attrs:{title:t.$t("dashboard.indicator.backtest.title"),visible:t.visible,width:1100,maskClosable:!1},on:{cancel:t.handleCancel}},[e("div",{staticClass:"backtest-content"},[e("a-steps",{staticStyle:{"margin-bottom":"16px"},attrs:{current:t.currentStep,size:"small"}},[e("a-step",{attrs:{title:t.$t("dashboard.indicator.backtest.steps.strategy.title"),description:t.$t("dashboard.indicator.backtest.steps.strategy.desc")}}),e("a-step",{attrs:{title:t.$t("dashboard.indicator.backtest.steps.trading.title"),description:t.$t("dashboard.indicator.backtest.steps.trading.desc")}}),e("a-step",{attrs:{title:t.$t("dashboard.indicator.backtest.steps.results.title"),description:t.$t("dashboard.indicator.backtest.steps.results.desc")}})],1),e("div",{directives:[{name:"show",rawName:"v-show",value:2!==t.currentStep,expression:"currentStep !== 2"}],staticClass:"config-section"},[e("a-form",{attrs:{form:t.form,"label-col":t.labelCol,"wrapper-col":t.wrapperCol}},[e("div",{directives:[{name:"show",rawName:"v-show",value:0===t.currentStep,expression:"currentStep === 0"}]},[e("a-collapse",{staticStyle:{background:"#fafafa"},attrs:{bordered:!1},model:{value:t.step1CollapseKeys,callback:function(e){t.step1CollapseKeys=e},expression:"step1CollapseKeys"}},[e("a-collapse-panel",{key:"risk",attrs:{header:t.$t("dashboard.indicator.backtest.panel.risk")}},[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.stopLossPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["stopLossPct",{initialValue:0}],expression:"['stopLossPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.01,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.takeProfitPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["takeProfitPct",{initialValue:0}],expression:"['takeProfitPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trailingEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailingEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['trailingEnabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:t.onTrailingToggle}})],1)],1),e("a-col",{attrs:{span:12}})],1),t.trailingEnabledUi?[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trailingStopPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailingStopPct",{initialValue:0}],expression:"['trailingStopPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.01,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trailingActivationPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailingActivationPct",{initialValue:0}],expression:"['trailingActivationPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1)]:t._e()],2),e("a-collapse-panel",{key:"scale",attrs:{header:t.$t("dashboard.indicator.backtest.panel.scale")}},[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendAddEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendAddEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['trendAddEnabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:t.onTrendAddToggle}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.dcaAddEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["dcaAddEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['dcaAddEnabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:t.onDcaAddToggle}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendAddStepPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendAddStepPct",{initialValue:0}],expression:"['trendAddStepPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4},on:{change:t.onScaleParamsChange}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.dcaAddStepPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dcaAddStepPct",{initialValue:0}],expression:"['dcaAddStepPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4},on:{change:t.onScaleParamsChange}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendAddSizePct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendAddSizePct",{initialValue:0}],expression:"['trendAddSizePct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4},on:{change:t.onScaleParamsChange}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.dcaAddSizePct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dcaAddSizePct",{initialValue:0}],expression:"['dcaAddSizePct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4},on:{change:t.onScaleParamsChange}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendAddMaxTimes")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendAddMaxTimes",{initialValue:0}],expression:"['trendAddMaxTimes', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:50,step:1,precision:0},on:{change:t.onScaleParamsChange}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.dcaAddMaxTimes")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dcaAddMaxTimes",{initialValue:0}],expression:"['dcaAddMaxTimes', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:50,step:1,precision:0},on:{change:t.onScaleParamsChange}})],1)],1)],1)],1),e("a-collapse-panel",{key:"reduce",attrs:{header:t.$t("dashboard.indicator.backtest.panel.reduce")}},[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendReduceEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendReduceEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['trendReduceEnabled', { valuePropName: 'checked', initialValue: false }]"}]})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.adverseReduceEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverseReduceEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['adverseReduceEnabled', { valuePropName: 'checked', initialValue: false }]"}]})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendReduceStepPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendReduceStepPct",{initialValue:0}],expression:"['trendReduceStepPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.adverseReduceStepPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverseReduceStepPct",{initialValue:0}],expression:"['adverseReduceStepPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendReduceSizePct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendReduceSizePct",{initialValue:0}],expression:"['trendReduceSizePct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.adverseReduceSizePct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverseReduceSizePct",{initialValue:0}],expression:"['adverseReduceSizePct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendReduceMaxTimes")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendReduceMaxTimes",{initialValue:0}],expression:"['trendReduceMaxTimes', { initialValue: 0 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:50,step:1,precision:0}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.adverseReduceMaxTimes")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverseReduceMaxTimes",{initialValue:0}],expression:"['adverseReduceMaxTimes', { initialValue: 0 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:50,step:1,precision:0}})],1)],1)],1)],1),e("a-collapse-panel",{key:"position",attrs:{header:t.$t("dashboard.indicator.backtest.panel.position")}},[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.entryPct"),help:t.$t("dashboard.indicator.backtest.hint.entryPctMax",{maxPct:Number(t.entryPctMaxUi||0).toFixed(0)})}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["entryPct",{initialValue:100}],expression:"['entryPct', { initialValue: 100 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:t.entryPctMaxUi,step:.1,precision:4},on:{change:t.onEntryPctChange}})],1)],1),e("a-col",{attrs:{span:12}})],1)],1)],1)],1),e("div",{directives:[{name:"show",rawName:"v-show",value:1===t.currentStep,expression:"currentStep === 1"}]},[e("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:t.combinedAlertType,"show-icon":""}},[e("template",{slot:"message"},[e("div",{staticStyle:{display:"flex","align-items":"center","flex-wrap":"wrap",gap:"8px"}},[e("span",[e("strong",[t._v("Symbol:")]),t._v(" "+t._s(t.symbol||"-")+" "),e("span",{staticStyle:{color:"#999",margin:"0 6px"}},[t._v("|")]),e("strong",[t._v("Market:")]),t._v(" "+t._s(t.market||"-")+" "),e("span",{staticStyle:{color:"#999",margin:"0 6px"}},[t._v("|")]),e("strong",[t._v("Timeframe:")]),t._v(" "+t._s(t.selectedTimeframe||t.timeframe||"-")+" ")]),t.precisionInfo&&t.precisionInfo.enabled?e("span",{staticStyle:{"margin-left":"12px","border-left":"1px solid #d9d9d9","padding-left":"12px"}},[e("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"high"===t.precisionInfo.precision?"thunderbolt":"clock-circle"}}),t._v(" "+t._s(t.$t("dashboard.indicator.backtest.precisionMode"))+": "),e("a-tag",{staticStyle:{"margin-left":"4px"},attrs:{color:"high"===t.precisionInfo.precision?"green":"blue",size:"small"}},[t._v(" "+t._s(t.precisionInfo.timeframe)+" ")]),e("span",{staticStyle:{color:"#666","margin-left":"6px"}},[t._v(" ("+t._s(t.$t("dashboard.indicator.backtest.estimatedCandles",{count:t.precisionInfo.estimated_candles?t.precisionInfo.estimated_candles.toLocaleString():"-"}))+") ")])],1):t.precisionInfo&&!t.precisionInfo.enabled&&t.market&&"crypto"===t.market.toLowerCase()?e("span",{staticStyle:{"margin-left":"12px","border-left":"1px solid #d9d9d9","padding-left":"12px",color:"#faad14"}},[e("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"warning"}}),t._v(" "+t._s(t.$t("dashboard.indicator.backtest.standardModeWarning"))+" ")],1):t._e()])]),e("template",{slot:"description"},[t.precisionInfo&&t.precisionInfo.enabled?e("span",{staticStyle:{"font-size":"12px",color:"#888"}},[t._v(" "+t._s("high"===t.precisionInfo.precision?t.$t("dashboard.indicator.backtest.highPrecisionDesc"):t.$t("dashboard.indicator.backtest.mediumPrecisionDesc"))+" ")]):t.precisionInfo&&!t.precisionInfo.enabled&&t.market&&"crypto"===t.market.toLowerCase()?e("span",{staticStyle:{"font-size":"12px",color:"#888"}},[t._v(" "+t._s(t.precisionInfo.message||t.$t("dashboard.indicator.backtest.standardModeDesc"))+" ")]):t._e()])],2),e("div",{staticClass:"date-quick-select",staticStyle:{"margin-bottom":"12px"}},[e("span",{staticStyle:{"margin-right":"8px",color:"#666","font-size":"13px"}},[t._v(t._s(t.$t("dashboard.indicator.backtest.quickSelect")||"快速选择")+":")]),e("a-button-group",{attrs:{size:"small"}},t._l(t.datePresets,function(i){return e("a-button",{key:i.key,attrs:{type:t.selectedDatePreset===i.key?"primary":"default"},on:{click:function(e){return t.applyDatePreset(i)}}},[t._v(t._s(i.label))])}),1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.startDate")}},[e("a-date-picker",{directives:[{name:"decorator",rawName:"v-decorator",value:["startDate",{rules:[{required:!0,message:t.$t("dashboard.indicator.backtest.startDateRequired")}],initialValue:t.defaultStartDate}],expression:"['startDate', { rules: [{ required: true, message: $t('dashboard.indicator.backtest.startDateRequired') }], initialValue: defaultStartDate }]"}],staticStyle:{width:"100%"},attrs:{"disabled-date":t.disabledStartDate,placeholder:t.$t("dashboard.indicator.backtest.selectStartDate")},on:{change:t.onDateChange}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.endDate")}},[e("a-date-picker",{directives:[{name:"decorator",rawName:"v-decorator",value:["endDate",{rules:[{required:!0,message:t.$t("dashboard.indicator.backtest.endDateRequired")}],initialValue:t.defaultEndDate}],expression:"['endDate', { rules: [{ required: true, message: $t('dashboard.indicator.backtest.endDateRequired') }], initialValue: defaultEndDate }]"}],staticStyle:{width:"100%"},attrs:{"disabled-date":t.disabledEndDate,placeholder:t.$t("dashboard.indicator.backtest.selectEndDate")},on:{change:t.onDateChange}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.initialCapital")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["initialCapital",{rules:[{required:!0,message:t.$t("dashboard.indicator.backtest.initialCapitalRequired")}],initialValue:1e4}],expression:"['initialCapital', { rules: [{ required: true, message: $t('dashboard.indicator.backtest.initialCapitalRequired') }], initialValue: 10000 }]"}],staticStyle:{width:"100%"},attrs:{min:1e3,step:1e4,precision:2,formatter:function(t){return"$ ".concat(t).replace(/\B(?=(\d{3})+(?!\d))/g,",")},parser:function(t){return t.replace(/\$\s?|(,*)/g,"")}}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.commission")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["commission",{initialValue:.02}],expression:"['commission', { initialValue: 0.02 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:10,step:.01,precision:4}}),e("div",{staticClass:"field-hint"},[t._v(t._s(t.$t("dashboard.indicator.backtest.commissionHint")))])],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.slippage")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["slippage",{initialValue:0}],expression:"['slippage', { initialValue: 0 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:10,step:.01,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.leverage")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["leverage",{initialValue:1}],expression:"['leverage', { initialValue: 1 }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:125,step:1,precision:0,formatter:function(t){return"".concat(t,"x")},parser:function(t){return t.replace("x","")}}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.tradeDirection")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["tradeDirection",{initialValue:"long"}],expression:"['tradeDirection', { initialValue: 'long' }]"}],staticStyle:{width:"100%"}},[e("a-select-option",{attrs:{value:"long"}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.longOnly"))+" ")]),e("a-select-option",{attrs:{value:"short"}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.shortOnly"))+" ")]),e("a-select-option",{attrs:{value:"both"}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.both"))+" ")])],1)],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.timeframe")}},[e("a-select",{staticStyle:{width:"100%"},on:{change:t.onTimeframeChange},model:{value:t.selectedTimeframe,callback:function(e){t.selectedTimeframe=e},expression:"selectedTimeframe"}},[e("a-select-option",{attrs:{value:"1m"}},[t._v("1m")]),e("a-select-option",{attrs:{value:"5m"}},[t._v("5m")]),e("a-select-option",{attrs:{value:"15m"}},[t._v("15m")]),e("a-select-option",{attrs:{value:"30m"}},[t._v("30m")]),e("a-select-option",{attrs:{value:"1H"}},[t._v("1H")]),e("a-select-option",{attrs:{value:"4H"}},[t._v("4H")]),e("a-select-option",{attrs:{value:"1D"}},[t._v("1D")]),e("a-select-option",{attrs:{value:"1W"}},[t._v("1W")])],1)],1)],1)],1)],1)])],1),e("div",{directives:[{name:"show",rawName:"v-show",value:2===t.currentStep&&t.hasResult,expression:"currentStep === 2 && hasResult"}],staticClass:"result-section"},[t.backtestRunId?e("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"success","show-icon":"",message:t.$t("dashboard.indicator.backtest.savedRunId",{id:t.backtestRunId})}}):t._e(),e("div",{staticClass:"metrics-cards"},[e("div",{staticClass:"metric-card",class:{positive:t.result.totalReturn>0,negative:t.result.totalReturn<0}},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.totalReturn")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.result.totalReturn)))]),e("div",{staticClass:"metric-amount"},[t._v(t._s(t.formatMoney(t.result.totalProfit)))])]),e("div",{staticClass:"metric-card",class:{positive:t.result.annualReturn>0,negative:t.result.annualReturn<0}},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.annualReturn")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.result.annualReturn)))])]),e("div",{staticClass:"metric-card negative"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.maxDrawdown")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.result.maxDrawdown)))])]),e("div",{staticClass:"metric-card"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.sharpeRatio")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.result.sharpeRatio.toFixed(2)))])]),e("div",{staticClass:"metric-card"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.winRate")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.result.winRate)))])]),e("div",{staticClass:"metric-card",class:{positive:t.result.profitFactor>=1.5,negative:t.result.profitFactor<1}},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.profitFactor")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.result.profitFactor.toFixed(2)))])]),e("div",{staticClass:"metric-card"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.totalTrades")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.result.totalTrades))])]),e("div",{staticClass:"metric-card negative"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.totalCommission")))]),e("div",{staticClass:"metric-value"},[t._v("-$"+t._s(t.result.totalCommission?t.result.totalCommission.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"))])])]),e("div",{staticClass:"chart-section"},[e("div",{staticClass:"chart-title"},[t._v(t._s(t.$t("dashboard.indicator.backtest.equityCurve")))]),e("div",{ref:"equityChartRef",staticClass:"equity-chart"})]),e("div",{staticClass:"trades-section"},[e("div",{staticClass:"chart-title"},[t._v(t._s(t.$t("dashboard.indicator.backtest.tradeHistory")))]),e("a-table",{attrs:{columns:t.tradeColumns,"data-source":t.result.trades,pagination:{pageSize:5,size:"small"},size:"small",scroll:{x:600}},scopedSlots:t._u([{key:"type",fn:function(i){return[e("a-tag",{attrs:{color:t.getTradeTypeColor(i)}},[t._v(" "+t._s(t.getTradeTypeText(i))+" ")])]}},{key:"balance",fn:function(i){return[e("span",{staticStyle:{color:"#1890ff","font-weight":"500"}},[t._v(" $"+t._s(i?i.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"--")+" ")])]}},{key:"profit",fn:function(i){return[e("span",{style:{color:i>0?"#52c41a":i<0?"#f5222d":"#666"}},[t._v(" "+t._s(t.formatMoney(i))+" ")])]}}])})],1)],1),t.loading?e("div",{staticClass:"loading-overlay"},[e("div",{staticClass:"loading-content"},[e("div",{staticClass:"loading-animation"},[e("div",{staticClass:"chart-bars"},[e("div",{staticClass:"bar bar1"}),e("div",{staticClass:"bar bar2"}),e("div",{staticClass:"bar bar3"}),e("div",{staticClass:"bar bar4"}),e("div",{staticClass:"bar bar5"})])]),e("div",{staticClass:"loading-text"},[t._v(t._s(t.$t("dashboard.indicator.backtest.running")))]),e("div",{staticClass:"loading-subtext"},[t._v(t._s(t.loadingTip))])])]):t._e()],1),e("template",{slot:"footer"},[e("div",{staticStyle:{display:"flex","justify-content":"space-between","align-items":"center",width:"100%"}},[e("div",[t.currentStep>0?e("a-button",{attrs:{disabled:t.loading},on:{click:t.handlePrev}},[t._v(t._s(t.$t("dashboard.indicator.backtest.prev")))]):t._e()],1),e("div",[e("a-button",{attrs:{disabled:t.loading},on:{click:t.handleCancel}},[t._v(t._s(t.$t("dashboard.indicator.backtest.close")))]),t.currentStep<1?e("a-button",{staticStyle:{"margin-left":"8px"},attrs:{type:"primary",disabled:t.loading},on:{click:t.handleNext}},[t._v(t._s(t.$t("dashboard.indicator.backtest.next")))]):1===t.currentStep?e("a-button",{staticStyle:{"margin-left":"8px"},attrs:{type:"primary",loading:t.loading},on:{click:t.handleRunBacktest}},[t._v(t._s(t.$t("dashboard.indicator.backtest.run")))]):e("a-button",{staticStyle:{"margin-left":"8px"},attrs:{type:"primary",disabled:t.loading},on:{click:t.handleRerun}},[t._v(t._s(t.$t("dashboard.indicator.backtest.rerun")))])],1)])])],2)},Wr=[],Vr=i(95093),$r=i.n(Vr),Hr=i(15014),Kr={name:"BacktestModal",props:{visible:{type:Boolean,default:!1},userId:{type:[Number,String],default:1},indicator:{type:Object,default:null},symbol:{type:String,default:""},market:{type:String,default:""},timeframe:{type:String,default:"1D"}},data:function(){return{form:this.$form.createForm(this),loading:!1,loadingTip:"",loadingTimer:null,currentStep:0,hasResult:!1,backtestRunId:null,step1CollapseKeys:["risk"],trailingEnabledUi:!1,entryPctMaxUi:100,precisionInfo:null,selectedDatePreset:null,selectedTimeframe:"1D",result:{totalReturn:0,annualReturn:0,maxDrawdown:0,sharpeRatio:0,winRate:0,profitFactor:0,totalTrades:0,totalProfit:0,totalCommission:0,trades:[],equityCurve:[]},equityChart:null,tradeColumns:[]}},computed:{maxBacktestRange:function(){var t=this.selectedTimeframe||this.timeframe||"1D";return"1m"===t?{days:30,label:"1个月"}:"5m"===t?{days:180,label:"6个月"}:["15m","30m"].includes(t)?{days:365,label:"1年"}:{days:1095,label:"3年"}},recommendedRange:function(){return{days:30,label:"30天",key:"30d"}},combinedAlertType:function(){return this.precisionInfo&&this.precisionInfo.enabled?"high"===this.precisionInfo.precision?"success":"info":this.precisionInfo&&!this.precisionInfo.enabled&&this.market&&"crypto"===this.market.toLowerCase()?"warning":"info"},datePresets:function(){var t=[],e=this.selectedTimeframe||this.timeframe||"1D";return"1m"===e?(t.push({key:"7d",days:7,label:"7D"}),t.push({key:"14d",days:14,label:"14D"}),t.push({key:"30d",days:30,label:"30D"})):"5m"===e?(t.push({key:"14d",days:14,label:"14D"}),t.push({key:"30d",days:30,label:"30D"}),t.push({key:"90d",days:90,label:"3M"}),t.push({key:"180d",days:180,label:"6M"})):(["15m","30m"].includes(e),t.push({key:"30d",days:30,label:"30D"}),t.push({key:"90d",days:90,label:"3M"}),t.push({key:"180d",days:180,label:"6M"}),t.push({key:"365d",days:365,label:"1Y"})),t},defaultStartDate:function(){return $r()().subtract(this.recommendedRange.days,"days")},defaultEndDate:function(){return $r()()},earliestDate:function(){return $r()().subtract(this.maxBacktestRange.days,"days")},labelCol:function(){return 0===this.currentStep?{span:9}:{span:6}},wrapperCol:function(){return 0===this.currentStep?{span:15}:{span:18}}},watch:{visible:function(t){var e=this;t?(this.currentStep=0,this.hasResult=!1,this.backtestRunId=null,this.step1CollapseKeys=["risk"],this.trailingEnabledUi=!1,this.entryPctMaxUi=100,this.precisionInfo=null,this.selectedDatePreset=null,this.selectedTimeframe=this.timeframe||"1D",this.result={totalReturn:0,annualReturn:0,maxDrawdown:0,sharpeRatio:0,winRate:0,profitFactor:0,totalTrades:0,totalProfit:0,totalCommission:0,trades:[],equityCurve:[]},this.$nextTick(function(){e.form&&(e.form.resetFields(),e.trailingEnabledUi=!!e.form.getFieldValue("trailingEnabled"),e.recalcEntryPctMaxUi(),e.selectedDatePreset="30d",e.fetchPrecisionInfo())})):this.equityChart&&(this.equityChart.dispose(),this.equityChart=null)}},created:function(){this.tradeColumns=[{title:this.$t("dashboard.indicator.backtest.tradeTime"),dataIndex:"time",key:"time",width:160},{title:this.$t("dashboard.indicator.backtest.tradeType"),dataIndex:"type",key:"type",width:120,scopedSlots:{customRender:"type"}},{title:this.$t("dashboard.indicator.backtest.price"),dataIndex:"price",key:"price",width:110},{title:this.$t("dashboard.indicator.backtest.amount"),dataIndex:"amount",key:"amount",width:100,customRender:function(t){return t?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:4}):"--"}},{title:this.$t("dashboard.indicator.backtest.profit"),dataIndex:"profit",key:"profit",width:110,scopedSlots:{customRender:"profit"}},{title:this.$t("dashboard.indicator.backtest.balance"),dataIndex:"balance",key:"balance",width:130,scopedSlots:{customRender:"balance"}}]},methods:{recalcEntryPctMaxUi:function(){if(this.form){var t=!!this.form.getFieldValue("trendAddEnabled"),e=!!this.form.getFieldValue("dcaAddEnabled"),i=Number(this.form.getFieldValue("trendAddMaxTimes")||0),n=Number(this.form.getFieldValue("dcaAddMaxTimes")||0),r=Number(this.form.getFieldValue("trendAddSizePct")||0),a=Number(this.form.getFieldValue("dcaAddSizePct")||0),o=(t?i*r:0)+(e?n*a:0),s=Math.max(0,Math.min(100,100-o));this.entryPctMaxUi=s}else this.entryPctMaxUi=100},normalizeEntryPct:function(){if(this.form){var t=Number(this.form.getFieldValue("entryPct")||0),e=Number(this.entryPctMaxUi||100);t>e&&this.form.setFieldsValue({entryPct:e})}},onTrendAddToggle:function(t){var e=this;this.form&&(t&&this.form.setFieldsValue({dcaAddEnabled:!1}),this.$nextTick(function(){e.recalcEntryPctMaxUi(),e.normalizeEntryPct()}))},onDcaAddToggle:function(t){var e=this;this.form&&(t&&this.form.setFieldsValue({trendAddEnabled:!1}),this.$nextTick(function(){e.recalcEntryPctMaxUi(),e.normalizeEntryPct()}))},onScaleParamsChange:function(){var t=this;this.$nextTick(function(){t.recalcEntryPctMaxUi(),t.normalizeEntryPct()})},onEntryPctChange:function(){var t=this;this.$nextTick(function(){return t.normalizeEntryPct()})},onTrailingToggle:function(t){this.form&&(this.trailingEnabledUi=!!t,t||this.form.setFieldsValue({trailingStopPct:0,trailingActivationPct:0}))},getTradeTypeColor:function(t){var e={buy:"green",sell:"red",liquidation:"orange",open_long:"green",add_long:"cyan",close_long:"orange",close_long_stop:"red",close_long_profit:"lime",close_long_trailing:"gold",reduce_long:"volcano",open_short:"red",add_short:"magenta",close_short:"blue",close_short_stop:"red",close_short_profit:"cyan",close_short_trailing:"gold",reduce_short:"volcano"};return e[t]||"default"},getTradeTypeText:function(t){var e={buy:this.$t("dashboard.indicator.backtest.buy"),sell:this.$t("dashboard.indicator.backtest.sell"),liquidation:this.$t("dashboard.indicator.backtest.liquidation"),open_long:this.$t("dashboard.indicator.backtest.openLong"),add_long:this.$t("dashboard.indicator.backtest.addLong"),close_long:this.$t("dashboard.indicator.backtest.closeLong"),close_long_stop:this.$t("dashboard.indicator.backtest.closeLongStop"),close_long_profit:this.$t("dashboard.indicator.backtest.closeLongProfit"),close_long_trailing:this.$t("dashboard.indicator.backtest.closeLongTrailing"),reduce_long:this.$t("dashboard.indicator.backtest.reduceLong"),open_short:this.$t("dashboard.indicator.backtest.openShort"),add_short:this.$t("dashboard.indicator.backtest.addShort"),close_short:this.$t("dashboard.indicator.backtest.closeShort"),close_short_stop:this.$t("dashboard.indicator.backtest.closeShortStop"),close_short_profit:this.$t("dashboard.indicator.backtest.closeShortProfit"),close_short_trailing:this.$t("dashboard.indicator.backtest.closeShortTrailing"),reduce_short:this.$t("dashboard.indicator.backtest.reduceShort")};return e[t]||t},disabledStartDate:function(t){return!!t&&(t>$r()().endOf("day")||t$r()().endOf("day"))return!0;if(tn.endOf("day"))return!0}return!1},applyDatePreset:function(t){this.selectedDatePreset=t.key;var e=$r()(),i=$r()().subtract(t.days,"days");this.form.setFieldsValue({startDate:i,endDate:e}),this.fetchPrecisionInfo(i,e)},fetchPrecisionInfo:function(t,e){var i=this;return(0,c.A)((0,l.A)().m(function n(){var r;return(0,l.A)().w(function(n){while(1)switch(n.p=n.n){case 0:if(t&&e||(t=i.form?i.form.getFieldValue("startDate"):null,e=i.form?i.form.getFieldValue("endDate"):null),t||(t=i.defaultStartDate),e||(e=i.defaultEndDate),i.market&&"crypto"===i.market.toLowerCase()){n.n=1;break}return i.precisionInfo={enabled:!1,reason:"only_crypto",message:i.$t("dashboard.indicator.backtest.onlyCryptoSupported")},n.a(2);case 1:return n.p=1,n.n=2,(0,f.Ay)({url:"/api/indicator/backtest/precision-info",method:"get",params:{market:i.market,startDate:t.format("YYYY-MM-DD"),endDate:e.format("YYYY-MM-DD")},timeout:3e4});case 2:r=n.v,1===r.code&&r.data&&(i.precisionInfo=r.data),n.n=4;break;case 3:n.p=3,n.v,i.precisionInfo=null;case 4:return n.a(2)}},n,null,[[1,3]])}))()},onTimeframeChange:function(){this.selectedDatePreset="30d";var t=$r()(),e=$r()().subtract(30,"days");this.form.setFieldsValue({startDate:e,endDate:t}),this.fetchPrecisionInfo(e,t)},onDateChange:function(){var t=this;this.selectedDatePreset=null,this.$nextTick(function(){t.fetchPrecisionInfo()})},validateDateRange:function(t,e){if(!t||!e)return!0;var i=e.diff(t,"days"),n=this.maxBacktestRange.days||365;return!(i>n)||(this.$message.error(this.$t("dashboard.indicator.backtest.dateRangeExceededDays",{timeframe:this.selectedTimeframe||this.timeframe,maxRange:this.maxBacktestRange.label,maxDays:n})),!1)},formatPercent:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"";return"".concat(e).concat(t.toFixed(2),"%")},formatMoney:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"-";return"".concat(e,"$").concat(Math.abs(t).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}))},handleCancel:function(){this.$emit("cancel")},handlePrev:function(){this.loading||this.currentStep>0&&(this.currentStep-=1)},handleNext:function(){this.loading||(0!==this.currentStep?1===this.currentStep&&this.handleRunBacktest():this.currentStep=1)},handleRerun:function(){this.loading||(this.currentStep=1,this.hasResult=!1,this.backtestRunId=null)},startLoadingAnimation:function(){var t=this,e=[this.$t("dashboard.indicator.backtest.loadingTip1")||"正在获取历史K线数据...",this.$t("dashboard.indicator.backtest.loadingTip2")||"正在执行策略信号计算...",this.$t("dashboard.indicator.backtest.loadingTip3")||"正在模拟交易执行...",this.$t("dashboard.indicator.backtest.loadingTip4")||"正在计算回测指标...",this.$t("dashboard.indicator.backtest.loadingTip5")||"即将完成,请稍候..."],i=0;this.loadingTip=e[0],this.loadingTimer=setInterval(function(){i=(i+1)%e.length,t.loadingTip=e[i]},2e3)},stopLoadingAnimation:function(){this.loadingTimer&&(clearInterval(this.loadingTimer),this.loadingTimer=null),this.loadingTip=""},handleRunBacktest:function(){var t=this;return(0,c.A)((0,l.A)().m(function e(){var i;return(0,l.A)().w(function(e){while(1)switch(e.n){case 0:i=["startDate","endDate","initialCapital","commission","leverage","tradeDirection","slippage"],t.form.validateFields(i,function(){var e=(0,c.A)((0,l.A)().m(function e(i,n){var r,a,o,s,c,u,h,p,v;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!i){e.n=1;break}return e.a(2);case 1:if(r=(0,d.A)((0,d.A)({},t.form.getFieldsValue()||{}),n||{}),a=Date.now(),t.indicator&&t.indicator.id){e.n=2;break}return t.$message.error(t.$t("dashboard.indicator.backtest.noIndicatorCode")),e.a(2);case 2:if(t.symbol){e.n=3;break}return t.$message.error(t.$t("dashboard.indicator.backtest.noSymbol")),e.a(2);case 3:if(t.validateDateRange(n.startDate,n.endDate)){e.n=4;break}return e.a(2);case 4:return t.loading=!0,t.hasResult=!1,t.startLoadingAnimation(),e.p=5,o=function(t){return Number(t||0)/100},s={risk:{stopLossPct:o(r.stopLossPct),takeProfitPct:o(r.takeProfitPct),trailing:{enabled:!!r.trailingEnabled,pct:o(r.trailingStopPct),activationPct:o(r.trailingActivationPct)}},position:{entryPct:o(r.entryPct||0)},scale:{trendAdd:{enabled:!!r.trendAddEnabled,stepPct:o(r.trendAddStepPct),sizePct:o(r.trendAddSizePct),maxTimes:r.trendAddMaxTimes||0},dcaAdd:{enabled:!!r.dcaAddEnabled,stepPct:o(r.dcaAddStepPct),sizePct:o(r.dcaAddSizePct),maxTimes:r.dcaAddMaxTimes||0},trendReduce:{enabled:!!r.trendReduceEnabled,stepPct:o(r.trendReduceStepPct),sizePct:o(r.trendReduceSizePct),maxTimes:r.trendReduceMaxTimes||0},adverseReduce:{enabled:!!r.adverseReduceEnabled,stepPct:o(r.adverseReduceStepPct),sizePct:o(r.adverseReduceSizePct),maxTimes:r.adverseReduceMaxTimes||0}}},c={userid:t.userId||1,indicatorId:t.indicator.id,symbol:t.symbol,market:t.market,timeframe:t.selectedTimeframe||t.timeframe,startDate:n.startDate.format("YYYY-MM-DD"),endDate:n.endDate.format("YYYY-MM-DD"),initialCapital:n.initialCapital,commission:o(n.commission||0),slippage:o(n.slippage||0),leverage:n.leverage||1,tradeDirection:n.tradeDirection||"long",strategyConfig:s,enableMtf:t.market&&"crypto"===t.market.toLowerCase()},e.n=6,(0,f.Ay)({url:"/api/indicator/backtest",method:"post",data:c,timeout:6e5});case 6:u=e.v,((Date.now()-a)/1e3).toFixed(1),1===u.code&&u.data?(u.data.runId&&(t.backtestRunId=u.data.runId),t.result=u.data.result||u.data,t.hasResult=!0,t.currentStep=2,t.$nextTick(function(){t.renderEquityChart()}),t.$message.success(t.$t("dashboard.indicator.backtest.success"))):t.$message.error(u.msg||t.$t("dashboard.indicator.backtest.failed")),e.n=8;break;case 7:e.p=7,v=e.v,h=t.$t("dashboard.indicator.backtest.failed"),"ECONNABORTED"===v.code||v.message&&v.message.includes("timeout")?h="回测超时,请减少回测时间范围或使用更大的时间周期":v.response?h=(null===(p=v.response.data)||void 0===p?void 0:p.msg)||v.response.statusText||h:v.message&&(h=v.message),t.$message.error(h);case 8:return e.p=8,t.stopLoadingAnimation(),t.loading=!1,e.f(8);case 9:return e.a(2)}},e,null,[[5,7,8,9]])}));return function(t,i){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},renderEquityChart:function(){var t=this;if(this.$refs.equityChartRef){this.equityChart&&this.equityChart.dispose(),this.equityChart=Hr.Ts(this.$refs.equityChartRef);var e=this.result.equityCurve||[],i=e.map(function(t){return t.time||t.date}),n=e.map(function(t){return void 0!==t.value?t.value:t.equity}),r=n[0]||1e5,a=n[n.length-1]||r,o=a>=r,s=o?"#52c41a":"#f5222d",l=o?[{offset:0,color:"rgba(82, 196, 26, 0.35)"},{offset:1,color:"rgba(82, 196, 26, 0.02)"}]:[{offset:0,color:"rgba(245, 34, 45, 0.35)"},{offset:1,color:"rgba(245, 34, 45, 0.02)"}],c={tooltip:{trigger:"axis",backgroundColor:"rgba(255, 255, 255, 0.96)",borderColor:"#e8e8e8",borderWidth:1,textStyle:{color:"#333"},formatter:function(t){var e='
'.concat(t[0].axisValue,"
");return t.forEach(function(t){if(void 0!==t.value&&null!==t.value){var i=t.value.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2});e+='
\n '.concat(t.marker," ").concat(t.seriesName,'\n $').concat(i,"\n
")}}),e}},legend:{show:!1},grid:{left:"3%",right:"4%",bottom:"12%",top:"8%",containLabel:!0},xAxis:{type:"category",data:i,boundaryGap:!1,axisLine:{lineStyle:{color:"#e8e8e8"}},axisTick:{show:!1},axisLabel:{color:"#8c8c8c",fontSize:11,rotate:0,interval:Math.floor(i.length/6)}},yAxis:{type:"value",splitLine:{lineStyle:{color:"#f5f5f5",type:"dashed"}},axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:"#8c8c8c",fontSize:11,formatter:function(t){return t>=1e6?(t/1e6).toFixed(1)+"M":t>=1e3?(t/1e3).toFixed(0)+"K":t}}},series:[{name:this.$t("dashboard.indicator.backtest.strategy"),type:"line",data:n,smooth:.4,symbol:"none",sampling:"lttb",lineStyle:{width:2.5,color:s,cap:"round",join:"round"},areaStyle:{color:new Hr.fA.W4(0,0,0,1,l)},emphasis:{lineStyle:{width:3}}}],animation:!0,animationDuration:800,animationEasing:"cubicOut"};this.equityChart.setOption(c),window.addEventListener("resize",function(){t.equityChart&&t.equityChart.resize()})}}},beforeDestroy:function(){this.equityChart&&(this.equityChart.dispose(),this.equityChart=null)}},Yr=Kr,Xr=(0,T.A)(Yr,zr,Wr,!1,null,"473e449c",null),Ur=Xr.exports,Gr=function(){var t=this,e=t._self._c;return e("a-drawer",{attrs:{title:t.$t("dashboard.indicator.backtest.historyTitle"),visible:t.visible,width:t.isMobile?"100%":980,maskClosable:!0},on:{close:function(e){return t.$emit("cancel")}}},[e("div",{staticStyle:{display:"flex",gap:"12px","margin-bottom":"12px","align-items":"center","flex-wrap":"wrap"}},[e("a-switch",{model:{value:t.useCurrentFilters,callback:function(e){t.useCurrentFilters=e},expression:"useCurrentFilters"}}),e("span",{staticStyle:{color:"#8c8c8c"}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.historyUseCurrent"))+" ")]),e("a-button",{attrs:{type:"primary",loading:t.loading},on:{click:t.loadRuns}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.historyRefresh"))+" ")]),e("a-button",{attrs:{type:"primary",disabled:0===t.selectedRowKeys.length,loading:t.analyzing},on:{click:t.handleAIAnalyze}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.historyAIAnalyze"))+" ")])],1),t.useCurrentFilters?t._e():e("div",{staticStyle:{display:"flex",gap:"12px","margin-bottom":"12px","align-items":"center","flex-wrap":"wrap"}},[e("a-input",{staticStyle:{width:"220px"},attrs:{placeholder:t.$t("dashboard.indicator.backtest.historyFilterSymbol")},model:{value:t.filterSymbol,callback:function(e){t.filterSymbol=e},expression:"filterSymbol"}}),e("a-select",{staticStyle:{width:"140px"},attrs:{placeholder:t.$t("dashboard.indicator.backtest.historyFilterTimeframe"),allowClear:""},model:{value:t.filterTimeframe,callback:function(e){t.filterTimeframe=e},expression:"filterTimeframe"}},t._l(t.timeframes,function(i){return e("a-select-option",{key:i,attrs:{value:i}},[t._v(t._s(i))])}),1),e("a-button",{attrs:{loading:t.loading},on:{click:t.loadRuns}},[t._v(t._s(t.$t("dashboard.indicator.backtest.historyApply")))]),e("span",{staticStyle:{color:"#8c8c8c"}},[t._v(t._s(t.filterLabel))])],1),e("a-table",{attrs:{columns:t.columns,"data-source":t.runs,loading:t.loading,size:"small",pagination:{pageSize:10,size:"small"},rowKey:"id",scroll:{x:900},rowSelection:{selectedRowKeys:t.selectedRowKeys,onChange:t.onRowSelectionChange}},scopedSlots:t._u([{key:"range",fn:function(i,n){return[e("span",[t._v(t._s(n.start_date||"")+" ~ "+t._s(n.end_date||""))])]}},{key:"status",fn:function(i){return[e("a-tag",{attrs:{color:"success"===i?"green":"failed"===i?"red":"blue"}},[t._v(" "+t._s("success"===i?t.$t("dashboard.indicator.backtest.historyStatusSuccess"):"failed"===i?t.$t("dashboard.indicator.backtest.historyStatusFailed"):i)+" ")])]}},{key:"actions",fn:function(i,n){return[e("a-button",{attrs:{type:"link",size:"small",loading:t.detailLoadingId===n.id},on:{click:function(e){return t.viewRun(n)}}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.historyView"))+" ")])]}}])}),t.loading||0!==t.runs.length?t._e():e("a-empty",{attrs:{description:t.$t("dashboard.indicator.backtest.historyNoData")}}),e("a-modal",{attrs:{title:t.$t("dashboard.indicator.backtest.historyAIAnalyzeTitle"),visible:t.showAIResult,footer:null,width:t.isMobile?"100%":900},on:{cancel:function(e){t.showAIResult=!1}}},[t.analyzing?e("div",{staticStyle:{padding:"12px 0"}},[e("a-spin")],1):e("div",{staticStyle:{"white-space":"pre-wrap","font-family":"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace"}},[t._v(" "+t._s(t.aiResult||t.$t("dashboard.indicator.backtest.historyNoAIResult"))+" ")])])],1)},jr=[],qr={name:"BacktestHistoryDrawer",props:{visible:{type:Boolean,default:!1},userId:{type:[Number,String],default:1},indicatorId:{type:[Number,String],default:null},symbol:{type:String,default:""},market:{type:String,default:""},timeframe:{type:String,default:""},isMobile:{type:Boolean,default:!1}},data:function(){return{loading:!1,detailLoadingId:null,analyzing:!1,showAIResult:!1,aiResult:"",useCurrentFilters:!0,filterSymbol:"",filterTimeframe:"",timeframes:["1m","5m","15m","30m","1H","4H","1D","1W"],runs:[],columns:[],selectedRowKeys:[]}},computed:{filterLabel:function(){var t=[];this.indicatorId&&t.push("indicatorId=".concat(this.indicatorId));var e=this.useCurrentFilters?this.market:this.market||"",i=this.useCurrentFilters?this.symbol:this.filterSymbol||"",n=this.useCurrentFilters?this.timeframe:this.filterTimeframe||"";return e&&t.push("market=".concat(e)),i&&t.push("symbol=".concat(i)),n&&t.push("timeframe=".concat(n)),t.length?t.join(" | "):""}},watch:{visible:function(t){t&&(this.initColumns(),this.useCurrentFilters=!0,this.filterSymbol=this.symbol||"",this.filterTimeframe=this.timeframe||"",this.selectedRowKeys=[],this.aiResult="",this.showAIResult=!1,this.loadRuns())}},methods:{onRowSelectionChange:function(t){this.selectedRowKeys=t||[]},initColumns:function(){this.columns.length||(this.columns=[{title:this.$t("dashboard.indicator.backtest.historyRunId"),dataIndex:"id",key:"id",width:90},{title:this.$t("dashboard.indicator.backtest.historyCreatedAt"),dataIndex:"created_at",key:"created_at",width:140},{title:this.$t("dashboard.indicator.backtest.tradeDirection"),dataIndex:"trade_direction",key:"trade_direction",width:90},{title:this.$t("dashboard.indicator.backtest.leverage"),dataIndex:"leverage",key:"leverage",width:90},{title:this.$t("dashboard.indicator.backtest.historyRange"),key:"range",width:220,scopedSlots:{customRender:"range"}},{title:this.$t("dashboard.indicator.backtest.historyStatus"),dataIndex:"status",key:"status",width:90,scopedSlots:{customRender:"status"}},{title:this.$t("dashboard.indicator.backtest.historyActions"),key:"actions",width:90,scopedSlots:{customRender:"actions"}}])},loadRuns:function(){var t=this;return(0,c.A)((0,l.A)().m(function e(){var i,n,r,a;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.userId){e.n=1;break}return e.a(2);case 1:return t.loading=!0,e.p=2,i=t.useCurrentFilters?t.symbol:t.filterSymbol||"",n=t.useCurrentFilters?t.timeframe:t.filterTimeframe||"",r=t.market||"",e.n=3,(0,f.Ay)({url:"/api/indicator/backtest/history",method:"get",params:{userid:t.userId,limit:100,offset:0,indicatorId:t.indicatorId,symbol:i,market:r,timeframe:n}});case 3:a=e.v,a&&1===a.code&&Array.isArray(a.data)?t.runs=a.data:t.runs=[];case 4:return e.p=4,t.loading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[2,,4,5]])}))()},viewRun:function(t){var e=this;return(0,c.A)((0,l.A)().m(function i(){var n;return(0,l.A)().w(function(i){while(1)switch(i.p=i.n){case 0:if(t&&t.id){i.n=1;break}return i.a(2);case 1:return e.detailLoadingId=t.id,i.p=2,i.n=3,(0,f.Ay)({url:"/api/indicator/backtest/get",method:"get",params:{userid:e.userId,runId:t.id}});case 3:n=i.v,n&&1===n.code&&n.data&&e.$emit("view",n.data);case 4:return i.p=4,e.detailLoadingId=null,i.f(4);case 5:return i.a(2)}},i,null,[[2,,4,5]])}))()},handleAIAnalyze:function(){var t=this;return(0,c.A)((0,l.A)().m(function e(){var i,n;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.userId&&t.selectedRowKeys.length){e.n=1;break}return e.a(2);case 1:return t.analyzing=!0,t.showAIResult=!0,t.aiResult="",e.p=2,i=t.$i18n&&t.$i18n.locale?t.$i18n.locale:"zh-CN",e.n=3,(0,f.Ay)({url:"/api/indicator/backtest/aiAnalyze",method:"post",data:{userid:t.userId,runIds:t.selectedRowKeys,lang:i}});case 3:n=e.v,n&&1===n.code&&n.data&&n.data.analysis?t.aiResult=n.data.analysis:t.aiResult=n.msg||t.$t("dashboard.indicator.backtest.historyNoAIResult");case 4:return e.p=4,t.analyzing=!1,e.f(4);case 5:return e.a(2)}},e,null,[[2,,4,5]])}))()}}},Zr=qr,Jr=(0,T.A)(Zr,Gr,jr,!1,null,null,null),Qr=Jr.exports,ta=function(){var t,e,i,n=this,r=n._self._c;return r("a-modal",{staticClass:"backtest-run-viewer",attrs:{title:n.modalTitle,visible:n.visible,width:1100,maskClosable:!1},on:{cancel:function(t){return n.$emit("cancel")}}},[n.run&&n.run.result?r("div",[n.run.id?r("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"info","show-icon":"",message:n.$t("dashboard.indicator.backtest.savedRunId",{id:n.run.id})}}):n._e(),r("div",{staticClass:"metrics-cards"},[r("div",{staticClass:"metric-card",class:{positive:n.result.totalReturn>0,negative:n.result.totalReturn<0}},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.totalReturn")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(n.formatPercent(n.result.totalReturn)))]),r("div",{staticClass:"metric-amount"},[n._v(n._s(n.formatMoney(n.result.totalProfit)))])]),r("div",{staticClass:"metric-card",class:{positive:n.result.annualReturn>0,negative:n.result.annualReturn<0}},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.annualReturn")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(n.formatPercent(n.result.annualReturn)))])]),r("div",{staticClass:"metric-card negative"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.maxDrawdown")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(n.formatPercent(n.result.maxDrawdown)))])]),r("div",{staticClass:"metric-card"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.sharpeRatio")))]),r("div",{staticClass:"metric-value"},[n._v(n._s((null!==(t=n.result.sharpeRatio)&&void 0!==t?t:0).toFixed(2)))])]),r("div",{staticClass:"metric-card"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.winRate")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(n.formatPercent(n.result.winRate)))])]),r("div",{staticClass:"metric-card",class:{positive:n.result.profitFactor>=1.5,negative:n.result.profitFactor<1}},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.profitFactor")))]),r("div",{staticClass:"metric-value"},[n._v(n._s((null!==(e=n.result.profitFactor)&&void 0!==e?e:0).toFixed(2)))])]),r("div",{staticClass:"metric-card"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.totalTrades")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(null!==(i=n.result.totalTrades)&&void 0!==i?i:0))])]),r("div",{staticClass:"metric-card negative"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.totalCommission")))]),r("div",{staticClass:"metric-value"},[n._v("-$"+n._s(n.result.totalCommission?n.result.totalCommission.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"))])])]),r("div",{staticClass:"chart-section"},[r("div",{staticClass:"chart-title"},[n._v(n._s(n.$t("dashboard.indicator.backtest.equityCurve")))]),r("div",{ref:"equityChartRef",staticClass:"equity-chart"})]),r("div",{staticClass:"trades-section"},[r("div",{staticClass:"chart-title"},[n._v(n._s(n.$t("dashboard.indicator.backtest.tradeHistory")))]),r("a-table",{attrs:{columns:n.tradeColumns,"data-source":n.result.trades||[],pagination:{pageSize:10,size:"small"},size:"small",scroll:{x:800},rowKey:n.rowKey},scopedSlots:n._u([{key:"type",fn:function(t){return[r("a-tag",{attrs:{color:n.getTradeTypeColor(t)}},[n._v(" "+n._s(n.getTradeTypeText(t))+" ")])]}},{key:"balance",fn:function(t){return[r("span",{staticStyle:{color:"#1890ff","font-weight":"500"}},[n._v(" $"+n._s(t?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"--")+" ")])]}},{key:"profit",fn:function(t){return[r("span",{style:{color:t>0?"#52c41a":t<0?"#f5222d":"#666"}},[n._v(" "+n._s(n.formatMoney(t))+" ")])]}}])})],1)],1):r("div",{staticStyle:{padding:"12px 0"}},[r("a-empty",{attrs:{description:n.$t("dashboard.indicator.backtest.historyNoData")}})],1),r("template",{slot:"footer"},[r("a-button",{on:{click:function(t){return n.$emit("cancel")}}},[n._v(n._s(n.$t("dashboard.indicator.backtest.close")))])],1)],2)},ea=[],ia={name:"BacktestRunViewer",props:{visible:{type:Boolean,default:!1},run:{type:Object,default:null}},data:function(){return{equityChart:null,tradeColumns:[]}},computed:{result:function(){return this.run&&this.run.result?this.run.result:{}},modalTitle:function(){var t=this.run&&this.run.id?"#".concat(this.run.id):"";return"".concat(this.$t("dashboard.indicator.backtest.historyTitle")," ").concat(t).trim()}},watch:{visible:function(t){var e=this;t?this.$nextTick(function(){e.initColumns(),e.renderEquityChart()}):this.equityChart&&(this.equityChart.dispose(),this.equityChart=null)}},methods:{rowKey:function(t,e){return e},initColumns:function(){this.tradeColumns.length||(this.tradeColumns=[{title:this.$t("dashboard.indicator.backtest.tradeTime"),dataIndex:"time",key:"time",width:160},{title:this.$t("dashboard.indicator.backtest.tradeType"),dataIndex:"type",key:"type",width:150,scopedSlots:{customRender:"type"}},{title:this.$t("dashboard.indicator.backtest.price"),dataIndex:"price",key:"price",width:110},{title:this.$t("dashboard.indicator.backtest.amount"),dataIndex:"amount",key:"amount",width:100},{title:this.$t("dashboard.indicator.backtest.profit"),dataIndex:"profit",key:"profit",width:110,scopedSlots:{customRender:"profit"}},{title:this.$t("dashboard.indicator.backtest.balance"),dataIndex:"balance",key:"balance",width:120,scopedSlots:{customRender:"balance"}}])},getTradeTypeColor:function(t){var e={buy:"green",sell:"red",liquidation:"orange",open_long:"green",add_long:"cyan",close_long:"orange",close_long_stop:"red",close_long_profit:"lime",close_long_trailing:"gold",reduce_long:"volcano",open_short:"red",add_short:"magenta",close_short:"blue",close_short_stop:"red",close_short_profit:"cyan",close_short_trailing:"gold",reduce_short:"volcano"};return e[t]||"default"},getTradeTypeText:function(t){var e={open_long:this.$t("dashboard.indicator.backtest.openLong"),add_long:this.$t("dashboard.indicator.backtest.addLong"),close_long:this.$t("dashboard.indicator.backtest.closeLong"),close_long_stop:this.$t("dashboard.indicator.backtest.closeLongStop"),close_long_profit:this.$t("dashboard.indicator.backtest.closeLongProfit"),close_long_trailing:this.$t("dashboard.indicator.backtest.closeLongTrailing"),reduce_long:this.$t("dashboard.indicator.backtest.reduceLong"),open_short:this.$t("dashboard.indicator.backtest.openShort"),add_short:this.$t("dashboard.indicator.backtest.addShort"),close_short:this.$t("dashboard.indicator.backtest.closeShort"),close_short_stop:this.$t("dashboard.indicator.backtest.closeShortStop"),close_short_profit:this.$t("dashboard.indicator.backtest.closeShortProfit"),close_short_trailing:this.$t("dashboard.indicator.backtest.closeShortTrailing"),reduce_short:this.$t("dashboard.indicator.backtest.reduceShort"),liquidation:this.$t("dashboard.indicator.backtest.liquidation")};return e[t]||t},formatPercent:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"";return"".concat(e).concat(Number(t).toFixed(2),"%")},formatMoney:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"-";return"".concat(e,"$").concat(Math.abs(t).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}))},renderEquityChart:function(){var t=this;if(this.$refs.equityChartRef){this.equityChart&&this.equityChart.dispose(),this.equityChart=Hr.Ts(this.$refs.equityChartRef);var e=this.result.equityCurve||[],i=e.map(function(t){return t.time||t.date}),n=e.map(function(t){return void 0!==t.value?t.value:t.equity}),r=n[0]||1e5,a=n[n.length-1]||r,o=a>=r,s=o?"#52c41a":"#f5222d",l=o?[{offset:0,color:"rgba(82, 196, 26, 0.35)"},{offset:1,color:"rgba(82, 196, 26, 0.02)"}]:[{offset:0,color:"rgba(245, 34, 45, 0.35)"},{offset:1,color:"rgba(245, 34, 45, 0.02)"}],c={tooltip:{trigger:"axis"},grid:{left:"3%",right:"4%",bottom:"12%",top:"8%",containLabel:!0},xAxis:{type:"category",data:i,boundaryGap:!1},yAxis:{type:"value"},series:[{name:this.$t("dashboard.indicator.backtest.strategy"),type:"line",data:n,smooth:.4,symbol:"none",sampling:"lttb",lineStyle:{width:2.5,color:s},areaStyle:{color:new Hr.fA.W4(0,0,0,1,l)}}]};this.equityChart.setOption(c),window.addEventListener("resize",function(){return t.equityChart&&t.equityChart.resize()})}}}},na=ia,ra=(0,T.A)(na,ta,ea,!1,null,"a484239a",null),aa=ra.exports,oa=i(83973),sa={name:"DashboardIndicator",components:{IndicatorEditor:I,KlineChart:Or,BacktestModal:Ur,BacktestHistoryDrawer:Qr,BacktestRunViewer:aa,QuickTradePanel:oa.A},computed:(0,d.A)((0,d.A)({},(0,p.aH)({navTheme:function(t){return t.app.theme}})),{},{chartTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme?"dark":"light"},isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme}}),setup:function(){var t=(0,h.nI)(),e=t||{},i=e.proxy,n=(0,h.KR)(1),r=(0,h.KR)(!1),p=(0,h.KR)(void 0),m=(0,h.KR)([]),y=(0,h.KR)([]),b=(0,h.KR)(!1),x=(0,h.KR)(""),_=(0,h.KR)(!1),w=(0,h.KR)(!1),C=(0,h.KR)(!1),S=(0,h.KR)(""),k=(0,h.KR)(""),A=(0,h.KR)([]),T=(0,h.KR)(!1),M=(0,h.KR)([]),I=(0,h.KR)(!1),E=(0,h.KR)(null),D=(0,h.KR)(null),P=(0,h.KR)([]),L=(0,h.KR)(!1),R=(0,h.KR)(!1),F=(0,h.KR)(""),B=(0,h.KR)(""),N=(0,h.KR)(0),O=(0,h.EW)(function(){return"crypto"===(K.value||"").toLowerCase()}),z=function(){O.value?(F.value=H.value||"",N.value=parseFloat(Y.value)||0,B.value="",R.value=!0):u.A.warning(i.$t("quickTrade.cryptoOnly"))},W=function(){u.A.success(i.$t("quickTrade.orderSuccess"))},V=function(t){t&&O.value&&(F.value=t)},$=function(){i&&i.$router&&i.$router.push("/indicator-community")},H=(0,h.KR)(""),K=(0,h.KR)(""),Y=(0,h.KR)("--"),X=(0,h.KR)(0),U=(0,h.EW)(function(){return X.value>0?"color-up":X.value<0?"color-down":""}),G=(0,h.KR)("1D"),j=(0,h.KR)([]),q=(0,h.KR)(!1),Z=[{id:"sma5",name:"SMA5 (5日均线)",shortName:"SMA5",type:"line",defaultParams:{length:5}},{id:"sma10",name:"SMA10 (10日均线)",shortName:"SMA10",type:"line",defaultParams:{length:10}},{id:"sma20",name:"SMA20 (20日均线)",shortName:"SMA20",type:"line",defaultParams:{length:20}},{id:"sma30",name:"SMA30 (30日均线)",shortName:"SMA30",type:"line",defaultParams:{length:30}}],J=[{id:"ema5",name:"EMA5 (5日指数均线)",shortName:"EMA5",type:"line",defaultParams:{length:5}},{id:"ema10",name:"EMA10 (10日指数均线)",shortName:"EMA10",type:"line",defaultParams:{length:10}},{id:"ema20",name:"EMA20 (20日指数均线)",shortName:"EMA20",type:"line",defaultParams:{length:20}},{id:"ema30",name:"EMA30 (30日指数均线)",shortName:"EMA30",type:"line",defaultParams:{length:30}}],Q=(0,h.KR)([]),tt=(0,h.KR)([]),et=(0,h.KR)(!1),it=(0,h.KR)(!1),nt=(0,h.KR)(null),rt=(0,h.KR)(""),at=(0,h.KR)([]),ot=(0,h.KR)({}),st=(0,h.KR)(!1),lt=(0,h.KR)({}),ct=(0,h.KR)(!1),ut=(0,h.KR)(!1),dt=(0,h.KR)(!1),ht=(0,h.KR)(null),pt=(0,h.KR)(!1),ft=(0,h.KR)(null),vt=(0,h.KR)(!1),gt=(0,h.KR)(null),mt=(0,h.KR)(!1),yt=(0,h.KR)(null),bt=(0,h.KR)(!1),xt=(0,h.KR)(null),_t=(0,h.KR)(!1),wt=(0,h.KR)(!1),Ct=(0,h.KR)("free"),St=(0,h.KR)(10),kt=(0,h.KR)(""),At=(0,h.KR)(!1),Tt={price:[{required:!0,message:"请输入价格",trigger:"blur",type:"number"}]},Mt=(0,h.KR)(!1),It=function(t){var e=t.price,i=t.change;Y.value=e,X.value=i},Et=function(){},Dt=(0,h.KR)([]),Pt=(0,h.KR)([]),Lt=function(t){G.value=t},Rt=function(t){return t?Object.values(t).join(", "):""},Ft=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,i,a,o,s,c;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(r.value=!0,t.p=1,a=(0,h.nI)(),o=null===a||void 0===a||null===(e=a.proxy)||void 0===e?void 0:e.$store,s=(null===o||void 0===o||null===(i=o.getters)||void 0===i?void 0:i.userInfo)||{},!s||!s.email){t.n=2;break}return n.value=s.id,r.value=!1,Bt(),re(),t.a(2);case 2:return t.n=3,(0,g.ug)();case 3:c=t.v,c&&1===c.code&&c.data&&(n.value=c.data.id,o&&o.commit("SET_INFO",c.data),Bt(),re()),t.n=5;break;case 4:t.p=4,t.v;case 5:return t.p=5,r.value=!1,t.f(5);case 6:return t.a(2)}},t,null,[[1,4,5,6]])}));return function(){return t.apply(this,arguments)}}(),Bt=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,r;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value){t.n=1;break}return t.a(2);case 1:return b.value=!0,t.p=2,t.n=3,(0,v.Qo)({userid:n.value});case 3:e=t.v,e&&1===e.code&&e.data&&(y.value=e.data.map(function(t){return(0,d.A)((0,d.A)({},t),{},{label:t.symbol+(t.name?" (".concat(t.name,")"):""),value:"".concat(t.market,":").concat(t.symbol)})}),Nt(),y.value.length>0&&!H.value&&(r=y.value[0],K.value=r.market,H.value=r.symbol,p.value=r.value)),t.n=5;break;case 4:t.p=4,t.v,u.A.error(i.$t("dashboard.indicator.error.loadWatchlistFailed"));case 5:return t.p=5,b.value=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(){return t.apply(this,arguments)}}(),Nt=function(){x.value?m.value=y.value.filter(function(t){return t.symbol.toLowerCase().includes(x.value.toLowerCase())||t.name&&t.name.toLowerCase().includes(x.value.toLowerCase())}):m.value=y.value},Ot=function(t){x.value=t,0===y.value.length&&t&&(_.value=!0),Nt()},zt=function(t){_.value=t,t||(x.value="")},Wt=function(t){if("__empty_watchlist_hint__"!==t){if("__add_stock_option__"===t)return w.value=!0,void setTimeout(function(){p.value=void 0},0);var e=y.value.find(function(e){return e.value===t});if(e||(e=m.value.find(function(e){return e.value===t})),!e&&t.includes(":")){var i=t.split(":"),n=(0,s.A)(i,2),r=n[0],a=n[1];e={market:r,symbol:a,value:t}}e&&(K.value=e.market,H.value=e.symbol,p.value=e.value)}},Vt=function(t,e){var i,n=(null===(i=e.componentOptions)||void 0===i||null===(i=i.propsData)||void 0===i?void 0:i.value)||"";return"__empty_watchlist_hint__"===n||"__add_stock_option__"===n||n.toLowerCase().includes(t.toLowerCase())},$t=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return t.p=0,t.n=1,(0,v.iO)();case 1:e=t.v,e&&1===e.code&&e.data&&Array.isArray(e.data)?P.value=e.data.map(function(t){return{value:t.value,i18nKey:t.i18nKey||"dashboard.analysis.market.".concat(t.value)}}):e&&1===e.code&&e.data&&"object"===(0,o.A)(e.data)?P.value=Object.keys(e.data).map(function(t){return{value:t,i18nKey:"dashboard.analysis.market.".concat(t)}}):P.value=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}],P.value.length>0&&!S.value&&(S.value=P.value[0].value),t.n=3;break;case 2:t.p=2,t.v,P.value=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}];case 3:return t.a(2)}},t,null,[[0,2]])}));return function(){return t.apply(this,arguments)}}(),Ht=function(){w.value=!1,E.value=null,k.value="",A.value=[],L.value=!1,S.value=P.value.length>0?P.value[0].value:""},Kt=function(t){S.value=t,k.value="",A.value=[],E.value=null,L.value=!1,qt(t)},Yt=function(t){var e=t.target.value;if(k.value=e,D.value&&clearTimeout(D.value),!e||""===e.trim())return A.value=[],L.value=!1,void(E.value=null);D.value=setTimeout(function(){Ut(e)},500)},Xt=function(t){t&&t.trim()&&(S.value?A.value.length>0||(L.value&&0===A.value.length?Gt():Ut(t)):u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")))},Ut=function(){var t=(0,c.A)((0,l.A)().m(function t(e){var n;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e&&""!==e.trim()){t.n=1;break}return A.value=[],L.value=!1,t.a(2);case 1:if(S.value){t.n=2;break}return u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),t.a(2);case 2:return T.value=!0,L.value=!0,t.p=3,t.n=4,(0,v._3)({market:S.value,keyword:e.trim(),limit:20});case 4:n=t.v,n&&1===n.code&&n.data&&n.data.length>0?A.value=n.data:(A.value=[],E.value={market:S.value,symbol:e.trim().toUpperCase(),name:""}),t.n=6;break;case 5:t.p=5,t.v,A.value=[],E.value={market:S.value,symbol:e.trim().toUpperCase(),name:""};case 6:return t.p=6,T.value=!1,t.f(6);case 7:return t.a(2)}},t,null,[[3,5,6,7]])}));return function(e){return t.apply(this,arguments)}}(),Gt=function(){k.value&&k.value.trim()?S.value?E.value={market:S.value,symbol:k.value.trim().toUpperCase(),name:""}:u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")):u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseEnterSymbol"))},jt=function(t){E.value={market:t.market,symbol:t.symbol,name:t.name||t.symbol}},qt=function(){var t=(0,c.A)((0,l.A)().m(function t(e){var i;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e||(e=S.value||(P.value.length>0?P.value[0].value:"")),e){t.n=1;break}return t.a(2);case 1:return I.value=!0,t.p=2,t.n=3,(0,v.z6)({market:e,limit:10});case 3:i=t.v,i&&1===i.code&&i.data?M.value=i.data:M.value=[],t.n=5;break;case 4:t.p=4,t.v,M.value=[];case 5:return t.p=5,I.value=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(e){return t.apply(this,arguments)}}(),Zt=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,r,a,o,s,c;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e="",r="",!E.value){t.n=1;break}e=E.value.market,r=E.value.symbol.toUpperCase(),t.n=4;break;case 1:if(!k.value||!k.value.trim()){t.n=3;break}if(S.value){t.n=2;break}return u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),t.a(2);case 2:e=S.value,r=k.value.trim().toUpperCase(),t.n=4;break;case 3:return u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol")),t.a(2);case 4:return C.value=!0,t.p=5,t.n=6,(0,v.dp)({userid:n.value,market:e,symbol:r});case 6:if(a=t.v,!a||1!==a.code){t.n=8;break}return u.A.success(i.$t("dashboard.analysis.message.addStockSuccess")),Ht(),t.n=7,Bt();case 7:t.n=9;break;case 8:u.A.error((null===a||void 0===a?void 0:a.msg)||i.$t("dashboard.analysis.message.addStockFailed"));case 9:t.n=11;break;case 10:t.p=10,c=t.v,s=(null===c||void 0===c||null===(o=c.response)||void 0===o||null===(o=o.data)||void 0===o?void 0:o.msg)||(null===c||void 0===c?void 0:c.message)||i.$t("dashboard.analysis.message.addStockFailed"),u.A.error(s);case 11:return t.p=11,C.value=!1,t.f(11);case 12:return t.a(2)}},t,null,[[5,10,11,12]])}));return function(){return t.apply(this,arguments)}}(),Jt=function(t){if(!ie(t.id)){var e=t.params||t.defaultParams||{};j.value.push((0,d.A)((0,d.A)({},t),{},{id:t.id,params:(0,d.A)({},e)}))}},Qt=function(t){j.value=j.value.filter(function(e){return e.id!==t})},te=function(t){var e=t.action,i=t.indicator;if("add"===e){var n=(0,d.A)((0,d.A)({},i),{},{calculate:ee(i.id)});Jt(n)}else"remove"===e&&Qt(i.id)},ee=function(t){return null},ie=function(t){return"sma"===t?Z.some(function(t){return j.value.some(function(e){return e.id===t.id})}):"ema"===t?J.some(function(t){return j.value.some(function(e){return e.id===t.id})}):j.value.some(function(e){return e.id===t})},ne=function(){var t=new Set;return Z.forEach(function(e){return t.add(e.id)}),J.forEach(function(e){return t.add(e.id)}),j.value.filter(function(e){return!t.has(e.id)})},re=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,i,r;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value){t.n=1;break}return t.a(2);case 1:return et.value=!0,t.p=2,t.n=3,(0,f.Ay)({url:"/api/indicator/getIndicators",method:"get",params:{userid:n.value}});case 3:e=t.v,1===e.code&&e.data&&(i=e.data.filter(function(t){return!t.is_buy||0===t.is_buy||"0"===t.is_buy}),r=e.data.filter(function(t){return 1===t.is_buy||"1"===t.is_buy}),Q.value=i.map(function(t){return(0,d.A)((0,d.A)({},t),{},{type:"python",source:"custom"})}),tt.value=r.map(function(t){return(0,d.A)((0,d.A)({},t),{},{type:"python",source:"purchased"})})),t.n=5;break;case 4:t.p=4,t.v;case 5:return t.p=5,et.value=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(){return t.apply(this,arguments)}}(),ae=(0,h.KR)(null),oe=function(){var t=(0,c.A)((0,l.A)().m(function t(e,n){var r,a,o,s,c,h,p,f,v;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(r="".concat(n,"-").concat(e.id),!ie(r)){t.n=1;break}return Qt(r),t.a(2);case 1:if(t.p=1,a=e.code||"",ae.value){t.n=2;break}return u.A.error(i.$t("dashboard.indicator.error.chartNotReady")),t.a(2);case 2:if("function"===typeof ae.value.parsePythonStrategy){t.n=3;break}return u.A.error(i.$t("dashboard.indicator.error.chartMethodNotReady")),t.a(2);case 3:if("function"===typeof ae.value.executePythonStrategy){t.n=4;break}return u.A.error(i.$t("dashboard.indicator.error.chartExecuteNotReady")),t.a(2);case 4:if(o=ae.value.parsePythonStrategy(a),o){t.n=5;break}return u.A.error(i.$t("dashboard.indicator.error.parseFailed")),t.a(2);case 5:s=e.userParams||{},c=a,h=(0,d.A)({},s),p={id:r,name:e.name,type:"python",code:c,description:e.description,parsed:o,userParams:h,originalId:e.id,user_id:e.user_id||e.userId,is_encrypted:e.is_encrypted||e.isEncrypted||0,calculate:function(t,i){return ae.value.executePythonStrategy(c,t,(0,d.A)((0,d.A)({},i),h),{id:e.id,user_id:e.user_id||e.userId,is_encrypted:e.is_encrypted||e.isEncrypted||0})}},f=(0,d.A)((0,d.A)({},o.params),s),j.value.push((0,d.A)((0,d.A)({},p),{},{params:f})),t.n=7;break;case 6:t.p=6,v=t.v,u.A.error(i.$t("dashboard.indicator.error.addIndicatorFailed")+": "+(v.message||"未知错误"));case 7:return t.a(2)}},t,null,[[1,6]])}));return function(e,i){return t.apply(this,arguments)}}(),se=function(){var t=(0,c.A)((0,l.A)().m(function t(e,n){var r,a,o,s,c;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(r="".concat(n,"-").concat(e.id),!ie(r)){t.n=1;break}Qt(r),t.n=5;break;case 1:return t.p=1,st.value=!0,t.n=2,i.$http.get("/api/indicator/getIndicatorParams",{params:{indicator_id:e.id}});case 2:a=t.v,a&&1===a.code&&Array.isArray(a.data)&&a.data.length>0?(at.value=a.data,o="".concat(n,"-").concat(e.id),s=lt.value[o],c={},a.data.forEach(function(t){var e=s&&void 0!==s[t.name]?s[t.name]:t.default;e="int"===t.type?parseInt(e)||0:"float"===t.type?parseFloat(e)||0:"bool"===t.type?!0===e||"true"===e||1===e||"1"===e:e||"",c[t.name]=e}),ot.value=c,nt.value=e,rt.value=n,it.value=!0):oe(e,n),t.n=4;break;case 3:t.p=3,t.v,oe(e,n);case 4:return t.p=4,st.value=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}));return function(e,i){return t.apply(this,arguments)}}(),le=function(){if(nt.value){var t="".concat(rt.value,"-").concat(nt.value.id);lt.value[t]=(0,d.A)({},ot.value);var e=(0,d.A)((0,d.A)({},nt.value),{},{userParams:(0,d.A)({},ot.value)});oe(e,rt.value)}it.value=!1,nt.value=null,rt.value=""},ce=function(){ue(),it.value=!1,setTimeout(function(){nt.value=null,rt.value=""},100)},ue=function(){if(nt.value&&rt.value){var t="".concat(rt.value,"-").concat(nt.value.id);lt.value[t]=JSON.parse(JSON.stringify(ot.value))}},de=function(){ue()},he=function(t){var e=t.code,n=t.name;if(e&&e.trim())try{if(!ae.value)return void u.A.error(i.$t("dashboard.indicator.error.chartNotReady"));if("function"!==typeof ae.value.parsePythonStrategy)return void u.A.error(i.$t("dashboard.indicator.error.chartMethodNotReady"));if("function"!==typeof ae.value.executePythonStrategy)return void u.A.error(i.$t("dashboard.indicator.error.chartExecuteNotReady"));var r=ae.value.parsePythonStrategy(e);if(!r)return void u.A.error(i.$t("dashboard.indicator.error.parseFailedCheck"));var a={id:"temp-editor-indicator",name:n||"临时指标",type:"python",code:e,description:"",parsed:r,calculate:function(t,i){var n=e;return ae.value.executePythonStrategy(n,t,i)}},o=j.value.findIndex(function(t){return"temp-editor-indicator"===t.id});o>=0&&j.value.splice(o,1),j.value.push((0,d.A)((0,d.A)({},a),{},{params:(0,d.A)({},r.params)})),u.A.success(i.$t("dashboard.indicator.success.runIndicator"))}catch(s){u.A.error(i.$t("dashboard.indicator.error.runIndicatorFailed")+": "+(s.message||"未知错误"))}else u.A.warning(i.$t("dashboard.indicator.warning.enterCode"))},pe=function(){ht.value=null,dt.value=!0},fe=function(t){ht.value=t,dt.value=!0},ve=function(){ct.value=!ct.value},ge=function(t){a.A.confirm({title:i.$t("dashboard.indicator.delete.confirmTitle"),content:i.$t("dashboard.indicator.delete.confirmContent",{name:t.name}),okText:i.$t("dashboard.indicator.delete.confirmOk"),okType:"danger",cancelText:i.$t("dashboard.indicator.delete.confirmCancel"),onOk:function(){var e=(0,c.A)((0,l.A)().m(function e(){var r,a,o;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,f.Ay)({url:"/api/indicator/deleteIndicator",method:"post",data:{id:t.id,userid:n.value}});case 1:if(r=e.v,1!==r.code){e.n=3;break}return u.A.success(i.$t("dashboard.indicator.delete.success")),a="custom-"+t.id,ie(a)&&Qt(a),e.n=2,re();case 2:e.n=4;break;case 3:u.A.error(r.msg||i.$t("dashboard.indicator.delete.failed"));case 4:e.n=6;break;case 5:e.p=5,o=e.v,u.A.error(i.$t("dashboard.indicator.delete.failed")+": "+(o.message||"未知错误"));case 6:return e.a(2)}},e,null,[[0,5]])}));function r(){return e.apply(this,arguments)}return r}()})},me=function(t){ft.value=(0,d.A)({},t),pt.value=!0},ye=function(t){gt.value=(0,d.A)({},t),vt.value=!0},be=function(t){yt.value=t,mt.value=!0},xe=function(t){xt.value=(0,d.A)({},t),Ct.value=t.pricing_type||"free",St.value=t.price||10,kt.value=t.description||"",At.value=!!t.vip_free,bt.value=!0},_e=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,r;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value){t.n=1;break}return u.A.error(i.$t("dashboard.indicator.error.pleaseLogin")),t.a(2);case 1:return _t.value=!0,t.p=2,t.n=3,(0,f.Ay)({url:"/api/indicator/saveIndicator",method:"post",data:{userid:n.value,id:xt.value.id,code:xt.value.code,name:xt.value.name,description:kt.value,publishToCommunity:!0,pricingType:Ct.value,price:"paid"===Ct.value?St.value:0,vipFree:"paid"===Ct.value&&At.value}});case 3:if(e=t.v,1!==e.code){t.n=5;break}return u.A.success(i.$t("dashboard.indicator.publish.success")),bt.value=!1,xt.value=null,t.n=4,re();case 4:t.n=6;break;case 5:u.A.error(e.msg||i.$t("dashboard.indicator.publish.failed"));case 6:t.n=8;break;case 7:t.p=7,r=t.v,u.A.error(i.$t("dashboard.indicator.publish.failed")+": "+(r.message||""));case 8:return t.p=8,_t.value=!1,t.f(8);case 9:return t.a(2)}},t,null,[[2,7,8,9]])}));return function(){return t.apply(this,arguments)}}(),we=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value&&xt.value){t.n=1;break}return t.a(2);case 1:return wt.value=!0,t.p=2,t.n=3,(0,f.Ay)({url:"/api/indicator/saveIndicator",method:"post",data:{userid:n.value,id:xt.value.id,code:xt.value.code,name:xt.value.name,description:xt.value.description,publishToCommunity:!1,pricingType:"free",price:0,vipFree:!1}});case 3:if(e=t.v,1!==e.code){t.n=5;break}return u.A.success(i.$t("dashboard.indicator.publish.unpublishSuccess")),bt.value=!1,xt.value=null,t.n=4,re();case 4:t.n=6;break;case 5:u.A.error(e.msg||i.$t("dashboard.indicator.publish.unpublishFailed"));case 6:t.n=8;break;case 7:t.p=7,t.v,u.A.error(i.$t("dashboard.indicator.publish.unpublishFailed"));case 8:return t.p=8,wt.value=!1,t.f(8);case 9:return t.a(2)}},t,null,[[2,7,8,9]])}));return function(){return t.apply(this,arguments)}}(),Ce=function(){var t=(0,c.A)((0,l.A)().m(function t(e){var r,a,o;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value){t.n=1;break}return u.A.error(i.$t("dashboard.indicator.error.pleaseLogin")),t.a(2);case 1:return r=i.$refs.indicatorEditor,r&&(r.saving=!0),t.p=2,t.n=3,(0,f.Ay)({url:"/api/indicator/saveIndicator",method:"post",data:{userid:n.value,id:e.id||0,code:e.code}});case 3:if(a=t.v,1!==a.code){t.n=5;break}return u.A.success(i.$t("dashboard.indicator.save.success")),dt.value=!1,ht.value=null,t.n=4,re();case 4:t.n=6;break;case 5:u.A.error(a.msg||i.$t("dashboard.indicator.save.failed"));case 6:t.n=8;break;case 7:t.p=7,o=t.v,u.A.error(i.$t("dashboard.indicator.save.failed")+": "+(o.message||"未知错误"));case 8:return t.p=8,r&&(r.saving=!1),t.f(8);case 9:return t.a(2)}},t,null,[[2,7,8,9]])}));return function(e){return t.apply(this,arguments)}}(),Se=function(t){var e=t.end_time;if(1===e||"1"===e)return i.$t("dashboard.indicator.status.normalPermanent");if(!e||0===e)return i.$t("dashboard.indicator.status.normal");var n=Math.floor(Date.now()/1e3);return e0&&!S.value&&(S.value=P.value[0].value),S.value&&qt(S.value)):(E.value=null,k.value="",A.value=[],L.value=!1,D.value&&(clearTimeout(D.value),D.value=null))}),(0,h.wB)(function(){return ot.value},function(t){if(it.value&&nt.value&&rt.value){var e="".concat(rt.value,"-").concat(nt.value.id);lt.value[e]=JSON.parse(JSON.stringify(t))}},{deep:!0,immediate:!1}),(0,h.wB)(it,function(t){t||ue()}),{userId:n,klineChart:ae,searchSymbol:p,symbolSuggestions:m,watchlist:y,symbolSearchValue:x,symbolSearchOpen:_,currentSymbol:H,currentMarket:K,currentPrice:Y,priceChange:X,priceChangeClass:U,timeframe:G,loadingWatchlist:b,activeIndicators:j,trendIndicators:Dt,oscillatorIndicators:Pt,customIndicators:Q,purchasedIndicators:tt,loadingIndicators:et,realtimeEnabled:Mt,toggleRealtime:Ee,handleSymbolSearch:Ot,handleSymbolSelect:Wt,handleDropdownVisibleChange:zt,filterSymbolOption:Vt,getMarketName:Me,getMarketColor:Ie,setTimeframe:Lt,addIndicator:Jt,removeIndicator:Qt,isIndicatorActive:ie,loadIndicators:re,addPythonIndicator:oe,toggleIndicator:se,getIndicatorStatus:Se,getIndicatorStatusIcon:ke,getIndicatorStatusClass:Ae,getExpiryTimeText:Te,formatParams:Rt,loadWatchlist:Bt,getCustomActiveIndicators:ne,showIndicatorEditor:dt,editingIndicator:ht,handleCreateIndicator:pe,handleRunIndicator:he,handleSaveIndicator:Ce,handleEditIndicator:fe,handleDeleteIndicator:ge,toggleCustomSection:ve,customSectionCollapsed:ct,purchasedSectionCollapsed:ut,handlePriceChange:It,handleChartRetry:Et,handleIndicatorToggle:te,showParamsModal:it,pendingIndicator:nt,indicatorParams:at,indicatorParamValues:ot,loadingParams:st,confirmIndicatorParams:le,cancelIndicatorParams:ce,handleParamsModalAfterClose:de,showBacktestModal:pt,backtestIndicator:ft,handleOpenBacktest:me,showBacktestHistoryDrawer:vt,backtestHistoryIndicator:gt,handleOpenBacktestHistory:ye,showBacktestRunViewer:mt,selectedBacktestRun:yt,handleViewBacktestRun:be,showPublishModal:bt,publishIndicator:xt,publishing:_t,unpublishing:wt,publishPricingType:Ct,publishPrice:St,publishDescription:kt,publishVipFree:At,publishRules:Tt,handlePublishIndicator:xe,handleConfirmPublish:_e,handleUnpublish:we,selectedSymbol:H,selectedMarket:K,selectedTimeframe:G,isMobile:q,showAddStockModal:w,addingStock:C,selectedMarketTab:S,symbolSearchKeyword:k,symbolSearchResults:A,searchingSymbols:T,hotSymbols:M,loadingHotSymbols:I,selectedSymbolForAdd:E,marketTypes:P,hasSearched:L,handleCloseAddStockModal:Ht,handleMarketTabChange:Kt,handleSymbolSearchInput:Yt,handleSearchOrInput:Xt,searchSymbolsInModal:Ut,selectSymbol:jt,loadHotSymbols:qt,handleAddStock:Zt,handleDirectAdd:Gt,loadMarketTypes:$t,showQuickTrade:R,qtSymbol:F,qtSide:B,qtPrice:N,isCryptoMarket:O,openQuickTrade:z,onQuickTradeSuccess:W,handleQuickTradeSymbolChange:V,goToIndicatorMarket:$}}},la=sa,ca=(0,T.A)(la,n,r,!1,null,"b17e86c2",null),ua=ca.exports},55218:function(t,e,i){(function(t){t(i(15237))})(function(t){var e={pairs:"()[]{}''\"\"",closeBefore:")]}'\":;>",triples:"",explode:"[]{}"},i=t.Pos;function n(t,i){return"pairs"==i&&"string"==typeof t?t:"object"==typeof t&&null!=t[i]?t[i]:e[i]}t.defineOption("autoCloseBrackets",!1,function(e,i,o){o&&o!=t.Init&&(e.removeKeyMap(r),e.state.closeBrackets=null),i&&(a(n(i,"pairs")),e.state.closeBrackets=i,e.addKeyMap(r))});var r={Backspace:l,Enter:c};function a(t){for(var e=0;e=0;l--){var u=o[l].head;e.replaceRange("",i(u.line,u.ch-1),i(u.line,u.ch+1),"+delete")}}function c(e){var i=s(e),r=i&&n(i,"explode");if(!r||e.getOption("disableInput"))return t.Pass;for(var a=e.listSelections(),o=0;o0?{line:o.head.line,ch:o.head.ch+e}:{line:o.head.line-1};i.push({anchor:s,head:s})}t.setSelections(i,r)}function d(e){var n=t.cmpPos(e.anchor,e.head)>0;return{anchor:new i(e.anchor.line,e.anchor.ch+(n?-1:1)),head:new i(e.head.line,e.head.ch+(n?1:-1))}}function h(e,r){var a=s(e);if(!a||e.getOption("disableInput"))return t.Pass;var o=n(a,"pairs"),l=o.indexOf(r);if(-1==l)return t.Pass;for(var c,h=n(a,"closeBefore"),p=n(a,"triples"),v=o.charAt(l+1)==r,g=e.listSelections(),m=l%2==0,y=0;y1&&p.indexOf(r)>=0&&e.getRange(i(_.line,_.ch-2),_)==r+r){if(_.ch>2&&/\bstring/.test(e.getTokenTypeAt(i(_.line,_.ch-2))))return t.Pass;b="addFour"}else if(v){var C=0==_.ch?" ":e.getRange(i(_.line,_.ch-1),_);if(t.isWordChar(w)||C==r||t.isWordChar(C))return t.Pass;b="both"}else{if(!m||!(0===w.length||/\s/.test(w)||h.indexOf(w)>-1))return t.Pass;b="both"}else b=v&&f(e,_)?"both":p.indexOf(r)>=0&&e.getRange(_,i(_.line,_.ch+3))==r+r+r?"skipThree":"skip";if(c){if(c!=b)return t.Pass}else c=b}var S=l%2?o.charAt(l-1):r,k=l%2?r:o.charAt(l+1);e.operation(function(){if("skip"==c)u(e,1);else if("skipThree"==c)u(e,3);else if("surround"==c){for(var t=e.getSelections(),i=0;i",")":"(<","[":"]>","]":"[<","{":"}>","}":"{<","<":">>",">":"<<"};function r(t){return t&&t.bracketRegex||/[(){}[\]]/}function a(t,e,a){var s=t.getLineHandle(e.line),l=e.ch-1,c=a&&a.afterCursor;null==c&&(c=/(^| )cm-fat-cursor($| )/.test(t.getWrapperElement().className));var u=r(a),d=!c&&l>=0&&u.test(s.text.charAt(l))&&n[s.text.charAt(l)]||u.test(s.text.charAt(l+1))&&n[s.text.charAt(++l)];if(!d)return null;var h=">"==d.charAt(1)?1:-1;if(a&&a.strict&&h>0!=(l==e.ch))return null;var p=t.getTokenTypeAt(i(e.line,l+1)),f=o(t,i(e.line,l+(h>0?1:0)),h,p,a);return null==f?null:{from:i(e.line,l),to:f&&f.pos,match:f&&f.ch==d.charAt(0),forward:h>0}}function o(t,e,a,o,s){for(var l=s&&s.maxScanLineLength||1e4,c=s&&s.maxScanLines||1e3,u=[],d=r(s),h=a>0?Math.min(e.line+c,t.lastLine()+1):Math.max(t.firstLine()-1,e.line-c),p=e.line;p!=h;p+=a){var f=t.getLine(p);if(f){var v=a>0?0:f.length-1,g=a>0?f.length:-1;if(!(f.length>l))for(p==e.line&&(v=e.ch-(a<0?1:0));v!=g;v+=a){var m=f.charAt(v);if(d.test(m)&&(void 0===o||(t.getTokenTypeAt(i(p,v+1))||"")==(o||""))){var y=n[m];if(y&&">"==y.charAt(1)==a>0)u.push(m);else{if(!u.length)return{pos:i(p,v),ch:m};u.pop()}}}}}return p-a!=(a>0?t.lastLine():t.firstLine())&&null}function s(t,n,r){for(var o=t.state.matchBrackets.maxHighlightLineLength||1e3,s=r&&r.highlightNonMatching,l=[],c=t.listSelections(),u=0;u2),m=/Android/.test(t),y=g||m||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(t),b=g||/Mac/.test(e),x=/\bCrOS\b/.test(t),_=/win/i.test(e),w=h&&t.match(/Version\/(\d*\.\d*)/);w&&(w=Number(w[1])),w&&w>=15&&(h=!1,l=!0);var C=b&&(c||h&&(null==w||w<12.11)),S=i||o&&s>=9;function k(t){return new RegExp("(^|\\s)"+t+"(?:$|\\s)\\s*")}var A,T=function(t,e){var i=t.className,n=k(e).exec(i);if(n){var r=i.slice(n.index+n[0].length);t.className=i.slice(0,n.index)+(r?n[1]+r:"")}};function M(t){for(var e=t.childNodes.length;e>0;--e)t.removeChild(t.firstChild);return t}function I(t,e){return M(t).appendChild(e)}function E(t,e,i,n){var r=document.createElement(t);if(i&&(r.className=i),n&&(r.style.cssText=n),"string"==typeof e)r.appendChild(document.createTextNode(e));else if(e)for(var a=0;a=e)return o+(e-a);o+=s-a,o+=i-o%i,a=s+1}}g?B=function(t){t.selectionStart=0,t.selectionEnd=t.value.length}:o&&(B=function(t){try{t.select()}catch(e){}});var K=function(){this.id=null,this.f=null,this.time=0,this.handler=V(this.onTimeout,this)};function Y(t,e){for(var i=0;i=e)return n+Math.min(o,e-r);if(r+=a-n,r+=i-r%i,n=a+1,r>=e)return n}}var J=[""];function Q(t){while(J.length<=t)J.push(tt(J)+" ");return J[t]}function tt(t){return t[t.length-1]}function et(t,e){for(var i=[],n=0;n"€"&&(t.toUpperCase()!=t.toLowerCase()||at.test(t))}function st(t,e){return e?!!(e.source.indexOf("\\w")>-1&&ot(t))||e.test(t):ot(t)}function lt(t){for(var e in t)if(t.hasOwnProperty(e)&&t[e])return!1;return!0}var ct=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function ut(t){return t.charCodeAt(0)>=768&&ct.test(t)}function dt(t,e,i){while((i<0?e>0:ei?-1:1;;){if(e==i)return e;var r=(e+i)/2,a=n<0?Math.ceil(r):Math.floor(r);if(a==e)return t(a)?e:i;t(a)?i=a:e=a+n}}function pt(t,e,i,n){if(!t)return n(e,i,"ltr",0);for(var r=!1,a=0;ae||e==i&&o.to==e)&&(n(Math.max(o.from,e),Math.min(o.to,i),1==o.level?"rtl":"ltr",a),r=!0)}r||n(e,i,"ltr")}var ft=null;function vt(t,e,i){var n;ft=null;for(var r=0;re)return r;a.to==e&&(a.from!=a.to&&"before"==i?n=r:ft=r),a.from==e&&(a.from!=a.to&&"before"!=i?n=r:ft=r)}return null!=n?n:ft}var gt=function(){var t="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",e="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";function i(i){return i<=247?t.charAt(i):1424<=i&&i<=1524?"R":1536<=i&&i<=1785?e.charAt(i-1536):1774<=i&&i<=2220?"r":8192<=i&&i<=8203?"w":8204==i?"b":"L"}var n=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,r=/[stwN]/,a=/[LRr]/,o=/[Lb1n]/,s=/[1n]/;function l(t,e,i){this.level=t,this.from=e,this.to=i}return function(t,e){var c="ltr"==e?"L":"R";if(0==t.length||"ltr"==e&&!n.test(t))return!1;for(var u=t.length,d=[],h=0;h-1&&(n[e]=r.slice(0,a).concat(r.slice(a+1)))}}}function wt(t,e){var i=xt(t,e);if(i.length)for(var n=Array.prototype.slice.call(arguments,2),r=0;r0}function At(t){t.prototype.on=function(t,e){bt(this,t,e)},t.prototype.off=function(t,e){_t(this,t,e)}}function Tt(t){t.preventDefault?t.preventDefault():t.returnValue=!1}function Mt(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0}function It(t){return null!=t.defaultPrevented?t.defaultPrevented:0==t.returnValue}function Et(t){Tt(t),Mt(t)}function Dt(t){return t.target||t.srcElement}function Pt(t){var e=t.which;return null==e&&(1&t.button?e=1:2&t.button?e=3:4&t.button&&(e=2)),b&&t.ctrlKey&&1==e&&(e=3),e}var Lt,Rt,Ft=function(){if(o&&s<9)return!1;var t=E("div");return"draggable"in t||"dragDrop"in t}();function Bt(t){if(null==Lt){var e=E("span","​");I(t,E("span",[e,document.createTextNode("x")])),0!=t.firstChild.offsetHeight&&(Lt=e.offsetWidth<=1&&e.offsetHeight>2&&!(o&&s<8))}var i=Lt?E("span","​"):E("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return i.setAttribute("cm-text",""),i}function Nt(t){if(null!=Rt)return Rt;var e=I(t,document.createTextNode("AخA")),i=A(e,0,1).getBoundingClientRect(),n=A(e,1,2).getBoundingClientRect();return M(t),!(!i||i.left==i.right)&&(Rt=n.right-i.right<3)}var Ot=3!="\n\nb".split(/\n/).length?function(t){var e=0,i=[],n=t.length;while(e<=n){var r=t.indexOf("\n",e);-1==r&&(r=t.length);var a=t.slice(e,"\r"==t.charAt(r-1)?r-1:r),o=a.indexOf("\r");-1!=o?(i.push(a.slice(0,o)),e+=o+1):(i.push(a),e=r+1)}return i}:function(t){return t.split(/\r\n?|\n/)},zt=window.getSelection?function(t){try{return t.selectionStart!=t.selectionEnd}catch(e){return!1}}:function(t){var e;try{e=t.ownerDocument.selection.createRange()}catch(i){}return!(!e||e.parentElement()!=t)&&0!=e.compareEndPoints("StartToEnd",e)},Wt=function(){var t=E("div");return"oncopy"in t||(t.setAttribute("oncopy","return;"),"function"==typeof t.oncopy)}(),Vt=null;function $t(t){if(null!=Vt)return Vt;var e=I(t,E("span","x")),i=e.getBoundingClientRect(),n=A(e,0,1).getBoundingClientRect();return Vt=Math.abs(i.left-n.left)>1}var Ht={},Kt={};function Yt(t,e){arguments.length>2&&(e.dependencies=Array.prototype.slice.call(arguments,2)),Ht[t]=e}function Xt(t,e){Kt[t]=e}function Ut(t){if("string"==typeof t&&Kt.hasOwnProperty(t))t=Kt[t];else if(t&&"string"==typeof t.name&&Kt.hasOwnProperty(t.name)){var e=Kt[t.name];"string"==typeof e&&(e={name:e}),t=rt(e,t),t.name=e.name}else{if("string"==typeof t&&/^[\w\-]+\/[\w\-]+\+xml$/.test(t))return Ut("application/xml");if("string"==typeof t&&/^[\w\-]+\/[\w\-]+\+json$/.test(t))return Ut("application/json")}return"string"==typeof t?{name:t}:t||{name:"null"}}function Gt(t,e){e=Ut(e);var i=Ht[e.name];if(!i)return Gt(t,"text/plain");var n=i(t,e);if(jt.hasOwnProperty(e.name)){var r=jt[e.name];for(var a in r)r.hasOwnProperty(a)&&(n.hasOwnProperty(a)&&(n["_"+a]=n[a]),n[a]=r[a])}if(n.name=e.name,e.helperType&&(n.helperType=e.helperType),e.modeProps)for(var o in e.modeProps)n[o]=e.modeProps[o];return n}var jt={};function qt(t,e){var i=jt.hasOwnProperty(t)?jt[t]:jt[t]={};$(e,i)}function Zt(t,e){if(!0===e)return e;if(t.copyState)return t.copyState(e);var i={};for(var n in e){var r=e[n];r instanceof Array&&(r=r.concat([])),i[n]=r}return i}function Jt(t,e){var i;while(t.innerMode){if(i=t.innerMode(e),!i||i.mode==t)break;e=i.state,t=i.mode}return i||{mode:t,state:e}}function Qt(t,e,i){return!t.startState||t.startState(e,i)}var te=function(t,e,i){this.pos=this.start=0,this.string=t,this.tabSize=e||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=i};function ee(t,e){if(e-=t.first,e<0||e>=t.size)throw new Error("There is no line "+(e+t.first)+" in the document.");var i=t;while(!i.lines)for(var n=0;;++n){var r=i.children[n],a=r.chunkSize();if(e=t.first&&ei?ce(i,ee(t,i).text.length):me(e,ee(t,e.line).text.length)}function me(t,e){var i=t.ch;return null==i||i>e?ce(t.line,e):i<0?ce(t.line,0):t}function ye(t,e){for(var i=[],n=0;n=this.string.length},te.prototype.sol=function(){return this.pos==this.lineStart},te.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},te.prototype.next=function(){if(this.pose},te.prototype.eatSpace=function(){var t=this.pos;while(/[\s\u00a0]/.test(this.string.charAt(this.pos)))++this.pos;return this.pos>t},te.prototype.skipToEnd=function(){this.pos=this.string.length},te.prototype.skipTo=function(t){var e=this.string.indexOf(t,this.pos);if(e>-1)return this.pos=e,!0},te.prototype.backUp=function(t){this.pos-=t},te.prototype.column=function(){return this.lastColumnPos0?null:(n&&!1!==e&&(this.pos+=n[0].length),n)}var r=function(t){return i?t.toLowerCase():t},a=this.string.substr(this.pos,t.length);if(r(a)==r(t))return!1!==e&&(this.pos+=t.length),!0},te.prototype.current=function(){return this.string.slice(this.start,this.pos)},te.prototype.hideFirstChars=function(t,e){this.lineStart+=t;try{return e()}finally{this.lineStart-=t}},te.prototype.lookAhead=function(t){var e=this.lineOracle;return e&&e.lookAhead(t)},te.prototype.baseToken=function(){var t=this.lineOracle;return t&&t.baseToken(this.pos)};var be=function(t,e){this.state=t,this.lookAhead=e},xe=function(t,e,i,n){this.state=e,this.doc=t,this.line=i,this.maxLookAhead=n||0,this.baseTokens=null,this.baseTokenPos=1};function _e(t,e,i,n){var r=[t.state.modeGen],a={};Ee(t,e.text,t.doc.mode,i,function(t,e){return r.push(t,e)},a,n);for(var o=i.state,s=function(n){i.baseTokens=r;var s=t.state.overlays[n],l=1,c=0;i.state=!0,Ee(t,e.text,s.mode,i,function(t,e){var i=l;while(ct&&r.splice(l,1,t,r[l+1],n),l+=2,c=Math.min(t,n)}if(e)if(s.opaque)r.splice(i,l-i,t,"overlay "+e),l=i+2;else for(;it.options.maxHighlightLength&&Zt(t.doc.mode,n.state),a=_e(t,e,n);r&&(n.state=r),e.stateAfter=n.save(!r),e.styles=a.styles,a.classes?e.styleClasses=a.classes:e.styleClasses&&(e.styleClasses=null),i===t.doc.highlightFrontier&&(t.doc.modeFrontier=Math.max(t.doc.modeFrontier,++t.doc.highlightFrontier))}return e.styles}function Ce(t,e,i){var n=t.doc,r=t.display;if(!n.mode.startState)return new xe(n,!0,e);var a=De(t,e,i),o=a>n.first&&ee(n,a-1).stateAfter,s=o?xe.fromSaved(n,o,a):new xe(n,Qt(n.mode),a);return n.iter(a,e,function(i){Se(t,i.text,s);var n=s.line;i.stateAfter=n==e-1||n%5==0||n>=r.viewFrom&&ne.start)return a}throw new Error("Mode "+t.name+" failed to advance stream.")}xe.prototype.lookAhead=function(t){var e=this.doc.getLine(this.line+t);return null!=e&&t>this.maxLookAhead&&(this.maxLookAhead=t),e},xe.prototype.baseToken=function(t){if(!this.baseTokens)return null;while(this.baseTokens[this.baseTokenPos]<=t)this.baseTokenPos+=2;var e=this.baseTokens[this.baseTokenPos+1];return{type:e&&e.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-t}},xe.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},xe.fromSaved=function(t,e,i){return e instanceof be?new xe(t,Zt(t.mode,e.state),i,e.lookAhead):new xe(t,Zt(t.mode,e),i)},xe.prototype.save=function(t){var e=!1!==t?Zt(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new be(e,this.maxLookAhead):e};var Te=function(t,e,i){this.start=t.start,this.end=t.pos,this.string=t.current(),this.type=e||null,this.state=i};function Me(t,e,i,n){var r,a=t.doc,o=a.mode;e=ge(a,e);var s,l=ee(a,e.line),c=Ce(t,e.line,i),u=new te(l.text,t.options.tabSize,c);n&&(s=[]);while((n||u.post.options.maxHighlightLength?(s=!1,o&&Se(t,e,n,d.pos),d.pos=e.length,l=null):l=Ie(Ae(i,d,n.state,h),a),h){var p=h[0].name;p&&(l="m-"+(l?p+" "+l:p))}if(!s||u!=l){while(co;--s){if(s<=a.first)return a.first;var l=ee(a,s-1),c=l.stateAfter;if(c&&(!i||s+(c instanceof be?c.lookAhead:0)<=a.modeFrontier))return s;var u=H(l.text,null,t.options.tabSize);(null==r||n>u)&&(r=s-1,n=u)}return r}function Pe(t,e){if(t.modeFrontier=Math.min(t.modeFrontier,e),!(t.highlightFrontieri;n--){var r=ee(t,n).stateAfter;if(r&&(!(r instanceof be)||n+r.lookAhead=e:a.to>e);(n||(n=[])).push(new Ne(o,a.from,l?null:a.to))}}return n}function $e(t,e,i){var n;if(t)for(var r=0;r=e:a.to>e);if(s||a.from==e&&"bookmark"==o.type&&(!i||a.marker.insertLeft)){var l=null==a.from||(o.inclusiveLeft?a.from<=e:a.from0&&s)for(var x=0;x0)){var u=[l,1],d=ue(c.from,s.from),h=ue(c.to,s.to);(d<0||!o.inclusiveLeft&&!d)&&u.push({from:c.from,to:s.from}),(h>0||!o.inclusiveRight&&!h)&&u.push({from:s.to,to:c.to}),r.splice.apply(r,u),l+=u.length-3}}return r}function Xe(t){var e=t.markedSpans;if(e){for(var i=0;ie)&&(!i||qe(i,a.marker)<0)&&(i=a.marker)}return i}function ei(t,e,i,n,r){var a=ee(t,e),o=Re&&a.markedSpans;if(o)for(var s=0;s=0&&d<=0||u<=0&&d>=0)&&(u<=0&&(l.marker.inclusiveRight&&r.inclusiveLeft?ue(c.to,i)>=0:ue(c.to,i)>0)||u>=0&&(l.marker.inclusiveRight&&r.inclusiveLeft?ue(c.from,n)<=0:ue(c.from,n)<0)))return!0}}}function ii(t){var e;while(e=Je(t))t=e.find(-1,!0).line;return t}function ni(t){var e;while(e=Qe(t))t=e.find(1,!0).line;return t}function ri(t){var e,i;while(e=Qe(t))t=e.find(1,!0).line,(i||(i=[])).push(t);return i}function ai(t,e){var i=ee(t,e),n=ii(i);return i==n?e:ae(n)}function oi(t,e){if(e>t.lastLine())return e;var i,n=ee(t,e);if(!si(t,n))return e;while(i=Qe(n))n=i.find(1,!0).line;return ae(n)+1}function si(t,e){var i=Re&&e.markedSpans;if(i)for(var n=void 0,r=0;re.maxLineLength&&(e.maxLineLength=i,e.maxLine=t)})}var hi=function(t,e,i){this.text=t,Ue(this,e),this.height=i?i(this):1};function pi(t,e,i,n){t.text=e,t.stateAfter&&(t.stateAfter=null),t.styles&&(t.styles=null),null!=t.order&&(t.order=null),Xe(t),Ue(t,i);var r=n?n(t):1;r!=t.height&&re(t,r)}function fi(t){t.parent=null,Xe(t)}hi.prototype.lineNo=function(){return ae(this)},At(hi);var vi={},gi={};function mi(t,e){if(!t||/^\s*$/.test(t))return null;var i=e.addModeClass?gi:vi;return i[t]||(i[t]=t.replace(/\S+/g,"cm-$&"))}function yi(t,e){var i=D("span",null,null,l?"padding-right: .1px":null),n={pre:D("pre",[i],"CodeMirror-line"),content:i,col:0,pos:0,cm:t,trailingSpace:!1,splitSpaces:t.getOption("lineWrapping")};e.measure={};for(var r=0;r<=(e.rest?e.rest.length:0);r++){var a=r?e.rest[r-1]:e.line,o=void 0;n.pos=0,n.addToken=xi,Nt(t.display.measure)&&(o=mt(a,t.doc.direction))&&(n.addToken=wi(n.addToken,o)),n.map=[];var s=e!=t.display.externalMeasured&&ae(a);Si(a,n,we(t,a,s)),a.styleClasses&&(a.styleClasses.bgClass&&(n.bgClass=F(a.styleClasses.bgClass,n.bgClass||"")),a.styleClasses.textClass&&(n.textClass=F(a.styleClasses.textClass,n.textClass||""))),0==n.map.length&&n.map.push(0,0,n.content.appendChild(Bt(t.display.measure))),0==r?(e.measure.map=n.map,e.measure.cache={}):((e.measure.maps||(e.measure.maps=[])).push(n.map),(e.measure.caches||(e.measure.caches=[])).push({}))}if(l){var c=n.content.lastChild;(/\bcm-tab\b/.test(c.className)||c.querySelector&&c.querySelector(".cm-tab"))&&(n.content.className="cm-tab-wrap-hack")}return wt(t,"renderLine",t,e.line,n.pre),n.pre.className&&(n.textClass=F(n.pre.className,n.textClass||"")),n}function bi(t){var e=E("span","•","cm-invalidchar");return e.title="\\u"+t.charCodeAt(0).toString(16),e.setAttribute("aria-label",e.title),e}function xi(t,e,i,n,r,a,l){if(e){var c,u=t.splitSpaces?_i(e,t.trailingSpace):e,d=t.cm.state.specialChars,h=!1;if(d.test(e)){c=document.createDocumentFragment();var p=0;while(1){d.lastIndex=p;var f=d.exec(e),v=f?f.index-p:e.length-p;if(v){var g=document.createTextNode(u.slice(p,p+v));o&&s<9?c.appendChild(E("span",[g])):c.appendChild(g),t.map.push(t.pos,t.pos+v,g),t.col+=v,t.pos+=v}if(!f)break;p+=v+1;var m=void 0;if("\t"==f[0]){var y=t.cm.options.tabSize,b=y-t.col%y;m=c.appendChild(E("span",Q(b),"cm-tab")),m.setAttribute("role","presentation"),m.setAttribute("cm-text","\t"),t.col+=b}else"\r"==f[0]||"\n"==f[0]?(m=c.appendChild(E("span","\r"==f[0]?"␍":"␤","cm-invalidchar")),m.setAttribute("cm-text",f[0]),t.col+=1):(m=t.cm.options.specialCharPlaceholder(f[0]),m.setAttribute("cm-text",f[0]),o&&s<9?c.appendChild(E("span",[m])):c.appendChild(m),t.col+=1);t.map.push(t.pos,t.pos+1,m),t.pos++}}else t.col+=e.length,c=document.createTextNode(u),t.map.push(t.pos,t.pos+e.length,c),o&&s<9&&(h=!0),t.pos+=e.length;if(t.trailingSpace=32==u.charCodeAt(e.length-1),i||n||r||h||a||l){var x=i||"";n&&(x+=n),r&&(x+=r);var _=E("span",[c],x,a);if(l)for(var w in l)l.hasOwnProperty(w)&&"style"!=w&&"class"!=w&&_.setAttribute(w,l[w]);return t.content.appendChild(_)}t.content.appendChild(c)}}function _i(t,e){if(t.length>1&&!/ /.test(t))return t;for(var i=e,n="",r=0;rc&&d.from<=c)break;if(d.to>=u)return t(i,n,r,a,o,s,l);t(i,n.slice(0,d.to-c),r,a,null,s,l),a=null,n=n.slice(d.to-c),c=d.to}}}function Ci(t,e,i,n){var r=!n&&i.widgetNode;r&&t.map.push(t.pos,t.pos+e,r),!n&&t.cm.display.input.needsContentAttribute&&(r||(r=t.content.appendChild(document.createElement("span"))),r.setAttribute("cm-marker",i.id)),r&&(t.cm.display.input.setUneditable(r),t.content.appendChild(r)),t.pos+=e,t.trailingSpace=!1}function Si(t,e,i){var n=t.markedSpans,r=t.text,a=0;if(n)for(var o,s,l,c,u,d,h,p=r.length,f=0,v=1,g="",m=0;;){if(m==f){l=c=u=s="",h=null,d=null,m=1/0;for(var y=[],b=void 0,x=0;xf||w.collapsed&&_.to==f&&_.from==f)){if(null!=_.to&&_.to!=f&&m>_.to&&(m=_.to,c=""),w.className&&(l+=" "+w.className),w.css&&(s=(s?s+";":"")+w.css),w.startStyle&&_.from==f&&(u+=" "+w.startStyle),w.endStyle&&_.to==m&&(b||(b=[])).push(w.endStyle,_.to),w.title&&((h||(h={})).title=w.title),w.attributes)for(var C in w.attributes)(h||(h={}))[C]=w.attributes[C];w.collapsed&&(!d||qe(d.marker,w)<0)&&(d=_)}else _.from>f&&m>_.from&&(m=_.from)}if(b)for(var S=0;S=p)break;var A=Math.min(p,m);while(1){if(g){var T=f+g.length;if(!d){var M=T>A?g.slice(0,A-f):g;e.addToken(e,M,o?o+l:l,u,f+M.length==m?c:"",s,h)}if(T>=A){g=g.slice(A-f),f=A;break}f=T,u=""}g=r.slice(a,a=i[v++]),o=mi(i[v++],e.cm.options)}}else for(var I=1;I2&&a.push((l.bottom+c.top)/2-i.top)}}a.push(i.bottom-i.top)}}function en(t,e,i){if(t.line==e)return{map:t.measure.map,cache:t.measure.cache};if(t.rest){for(var n=0;ni)return{map:t.measure.maps[r],cache:t.measure.caches[r],before:!0}}}function nn(t,e){e=ii(e);var i=ae(e),n=t.display.externalMeasured=new ki(t.doc,e,i);n.lineN=i;var r=n.built=yi(t,n);return n.text=r.pre,I(t.display.lineMeasure,r.pre),n}function rn(t,e,i,n){return sn(t,on(t,e),i,n)}function an(t,e){if(e>=t.display.viewFrom&&e=i.lineN&&ee)&&(a=l-s,r=a-1,e>=l&&(o="right")),null!=r){if(n=t[c+2],s==l&&i==(n.insertLeft?"left":"right")&&(o=i),"left"==i&&0==r)while(c&&t[c-2]==t[c-3]&&t[c-1].insertLeft)n=t[2+(c-=3)],o="left";if("right"==i&&r==l-s)while(c=0;r--)if((i=t[r]).left!=i.right)break;return i}function hn(t,e,i,n){var r,a=un(e.map,i,n),l=a.node,c=a.start,u=a.end,d=a.collapse;if(3==l.nodeType){for(var h=0;h<4;h++){while(c&&ut(e.line.text.charAt(a.coverStart+c)))--c;while(a.coverStart+u0&&(d=n="right"),r=t.options.lineWrapping&&(p=l.getClientRects()).length>1?p["right"==n?p.length-1:0]:l.getBoundingClientRect()}if(o&&s<9&&!c&&(!r||!r.left&&!r.right)){var f=l.parentNode.getClientRects()[0];r=f?{left:f.left,right:f.left+Rn(t.display),top:f.top,bottom:f.bottom}:cn}for(var v=r.top-e.rect.top,g=r.bottom-e.rect.top,m=(v+g)/2,y=e.view.measure.heights,b=0;b=n.text.length?(l=n.text.length,c="before"):l<=0&&(l=0,c="after"),!s)return o("before"==c?l-1:l,"before"==c);function u(t,e,i){var n=s[e],r=1==n.level;return o(i?t-1:t,r!=i)}var d=vt(s,l,c),h=ft,p=u(l,d,"before"==c);return null!=h&&(p.other=u(l,h,"before"!=c)),p}function Sn(t,e){var i=0;e=ge(t.doc,e),t.options.lineWrapping||(i=Rn(t.display)*e.ch);var n=ee(t.doc,e.line),r=ci(n)+Gi(t.display);return{left:i,right:i,top:r,bottom:r+n.height}}function kn(t,e,i,n,r){var a=ce(t,e,i);return a.xRel=r,n&&(a.outside=n),a}function An(t,e,i){var n=t.doc;if(i+=t.display.viewOffset,i<0)return kn(n.first,0,null,-1,-1);var r=oe(n,i),a=n.first+n.size-1;if(r>a)return kn(n.first+n.size-1,ee(n,a).text.length,null,1,1);e<0&&(e=0);for(var o=ee(n,r);;){var s=En(t,o,r,e,i),l=ti(o,s.ch+(s.xRel>0||s.outside>0?1:0));if(!l)return s;var c=l.find(1);if(c.line==r)return c;o=ee(n,r=c.line)}}function Tn(t,e,i,n){n-=bn(e);var r=e.text.length,a=ht(function(e){return sn(t,i,e-1).bottom<=n},r,0);return r=ht(function(e){return sn(t,i,e).top>n},a,r),{begin:a,end:r}}function Mn(t,e,i,n){i||(i=on(t,e));var r=xn(t,e,sn(t,i,n),"line").top;return Tn(t,e,i,r)}function In(t,e,i,n){return!(t.bottom<=i)&&(t.top>i||(n?t.left:t.right)>e)}function En(t,e,i,n,r){r-=ci(e);var a=on(t,e),o=bn(e),s=0,l=e.text.length,c=!0,u=mt(e,t.doc.direction);if(u){var d=(t.options.lineWrapping?Pn:Dn)(t,e,i,a,u,n,r);c=1!=d.level,s=c?d.from:d.to-1,l=c?d.to:d.from-1}var h,p,f=null,v=null,g=ht(function(e){var i=sn(t,a,e);return i.top+=o,i.bottom+=o,!!In(i,n,r,!1)&&(i.top<=r&&i.left<=n&&(f=e,v=i),!0)},s,l),m=!1;if(v){var y=n-v.left=x.bottom?1:0}return g=dt(e.text,g,1),kn(i,g,p,m,n-h)}function Dn(t,e,i,n,r,a,o){var s=ht(function(s){var l=r[s],c=1!=l.level;return In(Cn(t,ce(i,c?l.to:l.from,c?"before":"after"),"line",e,n),a,o,!0)},0,r.length-1),l=r[s];if(s>0){var c=1!=l.level,u=Cn(t,ce(i,c?l.from:l.to,c?"after":"before"),"line",e,n);In(u,a,o,!0)&&u.top>o&&(l=r[s-1])}return l}function Pn(t,e,i,n,r,a,o){var s=Tn(t,e,n,o),l=s.begin,c=s.end;/\s/.test(e.text.charAt(c-1))&&c--;for(var u=null,d=null,h=0;h=c||p.to<=l)){var f=1!=p.level,v=sn(t,n,f?Math.min(c,p.to)-1:Math.max(l,p.from)).right,g=vg)&&(u=p,d=g)}}return u||(u=r[r.length-1]),u.fromc&&(u={from:u.from,to:c,level:u.level}),u}function Ln(t){if(null!=t.cachedTextHeight)return t.cachedTextHeight;if(null==ln){ln=E("pre",null,"CodeMirror-line-like");for(var e=0;e<49;++e)ln.appendChild(document.createTextNode("x")),ln.appendChild(E("br"));ln.appendChild(document.createTextNode("x"))}I(t.measure,ln);var i=ln.offsetHeight/50;return i>3&&(t.cachedTextHeight=i),M(t.measure),i||1}function Rn(t){if(null!=t.cachedCharWidth)return t.cachedCharWidth;var e=E("span","xxxxxxxxxx"),i=E("pre",[e],"CodeMirror-line-like");I(t.measure,i);var n=e.getBoundingClientRect(),r=(n.right-n.left)/10;return r>2&&(t.cachedCharWidth=r),r||10}function Fn(t){for(var e=t.display,i={},n={},r=e.gutters.clientLeft,a=e.gutters.firstChild,o=0;a;a=a.nextSibling,++o){var s=t.display.gutterSpecs[o].className;i[s]=a.offsetLeft+a.clientLeft+r,n[s]=a.clientWidth}return{fixedPos:Bn(e),gutterTotalWidth:e.gutters.offsetWidth,gutterLeft:i,gutterWidth:n,wrapperWidth:e.wrapper.clientWidth}}function Bn(t){return t.scroller.getBoundingClientRect().left-t.sizer.getBoundingClientRect().left}function Nn(t){var e=Ln(t.display),i=t.options.lineWrapping,n=i&&Math.max(5,t.display.scroller.clientWidth/Rn(t.display)-3);return function(r){if(si(t.doc,r))return 0;var a=0;if(r.widgets)for(var o=0;o0&&(l=ee(t.doc,c.line).text).length==c.ch){var u=H(l,l.length,t.options.tabSize)-l.length;c=ce(c.line,Math.max(0,Math.round((a-qi(t.display).left)/Rn(t.display))-u))}return c}function Wn(t,e){if(e>=t.display.viewTo)return null;if(e-=t.display.viewFrom,e<0)return null;for(var i=t.display.view,n=0;ne)&&(r.updateLineNumbers=e),t.curOp.viewChanged=!0,e>=r.viewTo)Re&&ai(t.doc,e)r.viewFrom?Hn(t):(r.viewFrom+=n,r.viewTo+=n);else if(e<=r.viewFrom&&i>=r.viewTo)Hn(t);else if(e<=r.viewFrom){var a=Kn(t,i,i+n,1);a?(r.view=r.view.slice(a.index),r.viewFrom=a.lineN,r.viewTo+=n):Hn(t)}else if(i>=r.viewTo){var o=Kn(t,e,e,-1);o?(r.view=r.view.slice(0,o.index),r.viewTo=o.lineN):Hn(t)}else{var s=Kn(t,e,e,-1),l=Kn(t,i,i+n,1);s&&l?(r.view=r.view.slice(0,s.index).concat(Ai(t,s.lineN,l.lineN)).concat(r.view.slice(l.index)),r.viewTo+=n):Hn(t)}var c=r.externalMeasured;c&&(i=r.lineN&&e=n.viewTo)){var a=n.view[Wn(t,e)];if(null!=a.node){var o=a.changes||(a.changes=[]);-1==Y(o,i)&&o.push(i)}}}function Hn(t){t.display.viewFrom=t.display.viewTo=t.doc.first,t.display.view=[],t.display.viewOffset=0}function Kn(t,e,i,n){var r,a=Wn(t,e),o=t.display.view;if(!Re||i==t.doc.first+t.doc.size)return{index:a,lineN:i};for(var s=t.display.viewFrom,l=0;l0){if(a==o.length-1)return null;r=s+o[a].size-e,a++}else r=s-e;e+=r,i+=r}while(ai(t.doc,i)!=i){if(a==(n<0?0:o.length-1))return null;i+=n*o[a-(n<0?1:0)].size,a+=n}return{index:a,lineN:i}}function Yn(t,e,i){var n=t.display,r=n.view;0==r.length||e>=n.viewTo||i<=n.viewFrom?(n.view=Ai(t,e,i),n.viewFrom=e):(n.viewFrom>e?n.view=Ai(t,e,n.viewFrom).concat(n.view):n.viewFromi&&(n.view=n.view.slice(0,Wn(t,i)))),n.viewTo=i}function Xn(t){for(var e=t.display.view,i=0,n=0;n=t.display.viewTo||l.to().line0?o:t.defaultCharWidth())+"px"}if(n.other){var s=i.appendChild(E("div"," ","CodeMirror-cursor CodeMirror-secondarycursor"));s.style.display="",s.style.left=n.other.left+"px",s.style.top=n.other.top+"px",s.style.height=.85*(n.other.bottom-n.other.top)+"px"}}function qn(t,e){return t.top-e.top||t.left-e.left}function Zn(t,e,i){var n=t.display,r=t.doc,a=document.createDocumentFragment(),o=qi(t.display),s=o.left,l=Math.max(n.sizerWidth,Ji(t)-n.sizer.offsetLeft)-o.right,c="ltr"==r.direction;function u(t,e,i,n){e<0&&(e=0),e=Math.round(e),n=Math.round(n),a.appendChild(E("div",null,"CodeMirror-selected","position: absolute; left: "+t+"px;\n top: "+e+"px; width: "+(null==i?l-t:i)+"px;\n height: "+(n-e)+"px"))}function d(e,i,n){var a,o,d=ee(r,e),h=d.text.length;function p(i,n){return wn(t,ce(e,i),"div",d,n)}function f(e,i,n){var r=Mn(t,d,null,e),a="ltr"==i==("after"==n)?"left":"right",o="after"==n?r.begin:r.end-(/\s/.test(d.text.charAt(r.end-1))?2:1);return p(o,a)[a]}var v=mt(d,r.direction);return pt(v,i||0,null==n?h:n,function(t,e,r,d){var g="ltr"==r,m=p(t,g?"left":"right"),y=p(e-1,g?"right":"left"),b=null==i&&0==t,x=null==n&&e==h,_=0==d,w=!v||d==v.length-1;if(y.top-m.top<=3){var C=(c?b:x)&&_,S=(c?x:b)&&w,k=C?s:(g?m:y).left,A=S?l:(g?y:m).right;u(k,m.top,A-k,m.bottom)}else{var T,M,I,E;g?(T=c&&b&&_?s:m.left,M=c?l:f(t,r,"before"),I=c?s:f(e,r,"after"),E=c&&x&&w?l:y.right):(T=c?f(t,r,"before"):s,M=!c&&b&&_?l:m.right,I=!c&&x&&w?s:y.left,E=c?f(e,r,"after"):l),u(T,m.top,M-T,m.bottom),m.bottom0?e.blinker=setInterval(function(){t.hasFocus()||ir(t),e.cursorDiv.style.visibility=(i=!i)?"":"hidden"},t.options.cursorBlinkRate):t.options.cursorBlinkRate<0&&(e.cursorDiv.style.visibility="hidden")}}function Qn(t){t.hasFocus()||(t.display.input.focus(),t.state.focused||er(t))}function tr(t){t.state.delayingBlurEvent=!0,setTimeout(function(){t.state.delayingBlurEvent&&(t.state.delayingBlurEvent=!1,t.state.focused&&ir(t))},100)}function er(t,e){t.state.delayingBlurEvent&&!t.state.draggingText&&(t.state.delayingBlurEvent=!1),"nocursor"!=t.options.readOnly&&(t.state.focused||(wt(t,"focus",t,e),t.state.focused=!0,R(t.display.wrapper,"CodeMirror-focused"),t.curOp||t.display.selForContextMenu==t.doc.sel||(t.display.input.reset(),l&&setTimeout(function(){return t.display.input.reset(!0)},20)),t.display.input.receivedFocus()),Jn(t))}function ir(t,e){t.state.delayingBlurEvent||(t.state.focused&&(wt(t,"blur",t,e),t.state.focused=!1,T(t.display.wrapper,"CodeMirror-focused")),clearInterval(t.display.blinker),setTimeout(function(){t.state.focused||(t.display.shift=!1)},150))}function nr(t){for(var e=t.display,i=e.lineDiv.offsetTop,n=Math.max(0,e.scroller.getBoundingClientRect().top),r=e.lineDiv.getBoundingClientRect().top,a=0,l=0;l.005||v<-.005)&&(rt.display.sizerWidth){var m=Math.ceil(h/Rn(t.display));m>t.display.maxLineLength&&(t.display.maxLineLength=m,t.display.maxLine=c.line,t.display.maxLineChanged=!0)}}}Math.abs(a)>2&&(e.scroller.scrollTop+=a)}function rr(t){if(t.widgets)for(var e=0;e=o&&(a=oe(e,ci(ee(e,l))-t.wrapper.clientHeight),o=l)}return{from:a,to:Math.max(o,a+1)}}function or(t,e){if(!Ct(t,"scrollCursorIntoView")){var i=t.display,n=i.sizer.getBoundingClientRect(),r=null,a=i.wrapper.ownerDocument;if(e.top+n.top<0?r=!0:e.bottom+n.top>(a.defaultView.innerHeight||a.documentElement.clientHeight)&&(r=!1),null!=r&&!v){var o=E("div","​",null,"position: absolute;\n top: "+(e.top-i.viewOffset-Gi(t.display))+"px;\n height: "+(e.bottom-e.top+Zi(t)+i.barHeight)+"px;\n left: "+e.left+"px; width: "+Math.max(2,e.right-e.left)+"px;");t.display.lineSpace.appendChild(o),o.scrollIntoView(r),t.display.lineSpace.removeChild(o)}}}function sr(t,e,i,n){var r;null==n&&(n=0),t.options.lineWrapping||e!=i||(i="before"==e.sticky?ce(e.line,e.ch+1,"before"):e,e=e.ch?ce(e.line,"before"==e.sticky?e.ch-1:e.ch,"after"):e);for(var a=0;a<5;a++){var o=!1,s=Cn(t,e),l=i&&i!=e?Cn(t,i):s;r={left:Math.min(s.left,l.left),top:Math.min(s.top,l.top)-n,right:Math.max(s.left,l.left),bottom:Math.max(s.bottom,l.bottom)+n};var c=cr(t,r),u=t.doc.scrollTop,d=t.doc.scrollLeft;if(null!=c.scrollTop&&(gr(t,c.scrollTop),Math.abs(t.doc.scrollTop-u)>1&&(o=!0)),null!=c.scrollLeft&&(yr(t,c.scrollLeft),Math.abs(t.doc.scrollLeft-d)>1&&(o=!0)),!o)break}return r}function lr(t,e){var i=cr(t,e);null!=i.scrollTop&&gr(t,i.scrollTop),null!=i.scrollLeft&&yr(t,i.scrollLeft)}function cr(t,e){var i=t.display,n=Ln(t.display);e.top<0&&(e.top=0);var r=t.curOp&&null!=t.curOp.scrollTop?t.curOp.scrollTop:i.scroller.scrollTop,a=Qi(t),o={};e.bottom-e.top>a&&(e.bottom=e.top+a);var s=t.doc.height+ji(i),l=e.tops-n;if(e.topr+a){var u=Math.min(e.top,(c?s:e.bottom)-a);u!=r&&(o.scrollTop=u)}var d=t.options.fixedGutter?0:i.gutters.offsetWidth,h=t.curOp&&null!=t.curOp.scrollLeft?t.curOp.scrollLeft:i.scroller.scrollLeft-d,p=Ji(t)-i.gutters.offsetWidth,f=e.right-e.left>p;return f&&(e.right=e.left+p),e.left<10?o.scrollLeft=0:e.leftp+h-3&&(o.scrollLeft=e.right+(f?0:10)-p),o}function ur(t,e){null!=e&&(fr(t),t.curOp.scrollTop=(null==t.curOp.scrollTop?t.doc.scrollTop:t.curOp.scrollTop)+e)}function dr(t){fr(t);var e=t.getCursor();t.curOp.scrollToPos={from:e,to:e,margin:t.options.cursorScrollMargin}}function hr(t,e,i){null==e&&null==i||fr(t),null!=e&&(t.curOp.scrollLeft=e),null!=i&&(t.curOp.scrollTop=i)}function pr(t,e){fr(t),t.curOp.scrollToPos=e}function fr(t){var e=t.curOp.scrollToPos;if(e){t.curOp.scrollToPos=null;var i=Sn(t,e.from),n=Sn(t,e.to);vr(t,i,n,e.margin)}}function vr(t,e,i,n){var r=cr(t,{left:Math.min(e.left,i.left),top:Math.min(e.top,i.top)-n,right:Math.max(e.right,i.right),bottom:Math.max(e.bottom,i.bottom)+n});hr(t,r.scrollLeft,r.scrollTop)}function gr(t,e){Math.abs(t.doc.scrollTop-e)<2||(i||Ur(t,{top:e}),mr(t,e,!0),i&&Ur(t),zr(t,100))}function mr(t,e,i){e=Math.max(0,Math.min(t.display.scroller.scrollHeight-t.display.scroller.clientHeight,e)),(t.display.scroller.scrollTop!=e||i)&&(t.doc.scrollTop=e,t.display.scrollbars.setScrollTop(e),t.display.scroller.scrollTop!=e&&(t.display.scroller.scrollTop=e))}function yr(t,e,i,n){e=Math.max(0,Math.min(e,t.display.scroller.scrollWidth-t.display.scroller.clientWidth)),(i?e==t.doc.scrollLeft:Math.abs(t.doc.scrollLeft-e)<2)&&!n||(t.doc.scrollLeft=e,Zr(t),t.display.scroller.scrollLeft!=e&&(t.display.scroller.scrollLeft=e),t.display.scrollbars.setScrollLeft(e))}function br(t){var e=t.display,i=e.gutters.offsetWidth,n=Math.round(t.doc.height+ji(t.display));return{clientHeight:e.scroller.clientHeight,viewHeight:e.wrapper.clientHeight,scrollWidth:e.scroller.scrollWidth,clientWidth:e.scroller.clientWidth,viewWidth:e.wrapper.clientWidth,barLeft:t.options.fixedGutter?i:0,docHeight:n,scrollHeight:n+Zi(t)+e.barHeight,nativeBarWidth:e.nativeBarWidth,gutterWidth:i}}var xr=function(t,e,i){this.cm=i;var n=this.vert=E("div",[E("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),r=this.horiz=E("div",[E("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");n.tabIndex=r.tabIndex=-1,t(n),t(r),bt(n,"scroll",function(){n.clientHeight&&e(n.scrollTop,"vertical")}),bt(r,"scroll",function(){r.clientWidth&&e(r.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,o&&s<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};xr.prototype.update=function(t){var e=t.scrollWidth>t.clientWidth+1,i=t.scrollHeight>t.clientHeight+1,n=t.nativeBarWidth;if(i){this.vert.style.display="block",this.vert.style.bottom=e?n+"px":"0";var r=t.viewHeight-(e?n:0);this.vert.firstChild.style.height=Math.max(0,t.scrollHeight-t.clientHeight+r)+"px"}else this.vert.scrollTop=0,this.vert.style.display="",this.vert.firstChild.style.height="0";if(e){this.horiz.style.display="block",this.horiz.style.right=i?n+"px":"0",this.horiz.style.left=t.barLeft+"px";var a=t.viewWidth-t.barLeft-(i?n:0);this.horiz.firstChild.style.width=Math.max(0,t.scrollWidth-t.clientWidth+a)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&t.clientHeight>0&&(0==n&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:i?n:0,bottom:e?n:0}},xr.prototype.setScrollLeft=function(t){this.horiz.scrollLeft!=t&&(this.horiz.scrollLeft=t),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},xr.prototype.setScrollTop=function(t){this.vert.scrollTop!=t&&(this.vert.scrollTop=t),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},xr.prototype.zeroWidthHack=function(){var t=b&&!f?"12px":"18px";this.horiz.style.height=this.vert.style.width=t,this.horiz.style.visibility=this.vert.style.visibility="hidden",this.disableHoriz=new K,this.disableVert=new K},xr.prototype.enableZeroWidthBar=function(t,e,i){function n(){var r=t.getBoundingClientRect(),a="vert"==i?document.elementFromPoint(r.right-1,(r.top+r.bottom)/2):document.elementFromPoint((r.right+r.left)/2,r.bottom-1);a!=t?t.style.visibility="hidden":e.set(1e3,n)}t.style.visibility="",e.set(1e3,n)},xr.prototype.clear=function(){var t=this.horiz.parentNode;t.removeChild(this.horiz),t.removeChild(this.vert)};var _r=function(){};function wr(t,e){e||(e=br(t));var i=t.display.barWidth,n=t.display.barHeight;Cr(t,e);for(var r=0;r<4&&i!=t.display.barWidth||n!=t.display.barHeight;r++)i!=t.display.barWidth&&t.options.lineWrapping&&nr(t),Cr(t,br(t)),i=t.display.barWidth,n=t.display.barHeight}function Cr(t,e){var i=t.display,n=i.scrollbars.update(e);i.sizer.style.paddingRight=(i.barWidth=n.right)+"px",i.sizer.style.paddingBottom=(i.barHeight=n.bottom)+"px",i.heightForcer.style.borderBottom=n.bottom+"px solid transparent",n.right&&n.bottom?(i.scrollbarFiller.style.display="block",i.scrollbarFiller.style.height=n.bottom+"px",i.scrollbarFiller.style.width=n.right+"px"):i.scrollbarFiller.style.display="",n.bottom&&t.options.coverGutterNextToScrollbar&&t.options.fixedGutter?(i.gutterFiller.style.display="block",i.gutterFiller.style.height=n.bottom+"px",i.gutterFiller.style.width=e.gutterWidth+"px"):i.gutterFiller.style.display=""}_r.prototype.update=function(){return{bottom:0,right:0}},_r.prototype.setScrollLeft=function(){},_r.prototype.setScrollTop=function(){},_r.prototype.clear=function(){};var Sr={native:xr,null:_r};function kr(t){t.display.scrollbars&&(t.display.scrollbars.clear(),t.display.scrollbars.addClass&&T(t.display.wrapper,t.display.scrollbars.addClass)),t.display.scrollbars=new Sr[t.options.scrollbarStyle](function(e){t.display.wrapper.insertBefore(e,t.display.scrollbarFiller),bt(e,"mousedown",function(){t.state.focused&&setTimeout(function(){return t.display.input.focus()},0)}),e.setAttribute("cm-not-content","true")},function(e,i){"horizontal"==i?yr(t,e):gr(t,e)},t),t.display.scrollbars.addClass&&R(t.display.wrapper,t.display.scrollbars.addClass)}var Ar=0;function Tr(t){t.curOp={cm:t,viewChanged:!1,startHeight:t.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Ar,markArrays:null},Mi(t.curOp)}function Mr(t){var e=t.curOp;e&&Ei(e,function(t){for(var e=0;e=i.viewTo)||i.maxLineChanged&&e.options.lineWrapping,t.update=t.mustUpdate&&new Vr(e,t.mustUpdate&&{top:t.scrollTop,ensure:t.scrollToPos},t.forceUpdate)}function Dr(t){t.updatedDisplay=t.mustUpdate&&Yr(t.cm,t.update)}function Pr(t){var e=t.cm,i=e.display;t.updatedDisplay&&nr(e),t.barMeasure=br(e),i.maxLineChanged&&!e.options.lineWrapping&&(t.adjustWidthTo=rn(e,i.maxLine,i.maxLine.text.length).left+3,e.display.sizerWidth=t.adjustWidthTo,t.barMeasure.scrollWidth=Math.max(i.scroller.clientWidth,i.sizer.offsetLeft+t.adjustWidthTo+Zi(e)+e.display.barWidth),t.maxScrollLeft=Math.max(0,i.sizer.offsetLeft+t.adjustWidthTo-Ji(e))),(t.updatedDisplay||t.selectionChanged)&&(t.preparedSelection=i.input.prepareSelection())}function Lr(t){var e=t.cm;null!=t.adjustWidthTo&&(e.display.sizer.style.minWidth=t.adjustWidthTo+"px",t.maxScrollLeft=t.display.viewTo)){var i=+new Date+t.options.workTime,n=Ce(t,e.highlightFrontier),r=[];e.iter(n.line,Math.min(e.first+e.size,t.display.viewTo+500),function(a){if(n.line>=t.display.viewFrom){var o=a.styles,s=a.text.length>t.options.maxHighlightLength?Zt(e.mode,n.state):null,l=_e(t,a,n,!0);s&&(n.state=s),a.styles=l.styles;var c=a.styleClasses,u=l.classes;u?a.styleClasses=u:c&&(a.styleClasses=null);for(var d=!o||o.length!=a.styles.length||c!=u&&(!c||!u||c.bgClass!=u.bgClass||c.textClass!=u.textClass),h=0;!d&&hi)return zr(t,t.options.workDelay),!0}),e.highlightFrontier=n.line,e.modeFrontier=Math.max(e.modeFrontier,n.line),r.length&&Fr(t,function(){for(var e=0;e=i.viewFrom&&e.visible.to<=i.viewTo&&(null==i.updateLineNumbers||i.updateLineNumbers>=i.viewTo)&&i.renderedView==i.view&&0==Xn(t))return!1;Jr(t)&&(Hn(t),e.dims=Fn(t));var r=n.first+n.size,a=Math.max(e.visible.from-t.options.viewportMargin,n.first),o=Math.min(r,e.visible.to+t.options.viewportMargin);i.viewFromo&&i.viewTo-o<20&&(o=Math.min(r,i.viewTo)),Re&&(a=ai(t.doc,a),o=oi(t.doc,o));var s=a!=i.viewFrom||o!=i.viewTo||i.lastWrapHeight!=e.wrapperHeight||i.lastWrapWidth!=e.wrapperWidth;Yn(t,a,o),i.viewOffset=ci(ee(t.doc,i.viewFrom)),t.display.mover.style.top=i.viewOffset+"px";var l=Xn(t);if(!s&&0==l&&!e.force&&i.renderedView==i.view&&(null==i.updateLineNumbers||i.updateLineNumbers>=i.viewTo))return!1;var c=Hr(t);return l>4&&(i.lineDiv.style.display="none"),Gr(t,i.updateLineNumbers,e.dims),l>4&&(i.lineDiv.style.display=""),i.renderedView=i.view,Kr(c),M(i.cursorDiv),M(i.selectionDiv),i.gutters.style.height=i.sizer.style.minHeight=0,s&&(i.lastWrapHeight=e.wrapperHeight,i.lastWrapWidth=e.wrapperWidth,zr(t,400)),i.updateLineNumbers=null,!0}function Xr(t,e){for(var i=e.viewport,n=!0;;n=!1){if(n&&t.options.lineWrapping&&e.oldDisplayWidth!=Ji(t))n&&(e.visible=ar(t.display,t.doc,i));else if(i&&null!=i.top&&(i={top:Math.min(t.doc.height+ji(t.display)-Qi(t),i.top)}),e.visible=ar(t.display,t.doc,i),e.visible.from>=t.display.viewFrom&&e.visible.to<=t.display.viewTo)break;if(!Yr(t,e))break;nr(t);var r=br(t);Un(t),wr(t,r),qr(t,r),e.force=!1}e.signal(t,"update",t),t.display.viewFrom==t.display.reportedViewFrom&&t.display.viewTo==t.display.reportedViewTo||(e.signal(t,"viewportChange",t,t.display.viewFrom,t.display.viewTo),t.display.reportedViewFrom=t.display.viewFrom,t.display.reportedViewTo=t.display.viewTo)}function Ur(t,e){var i=new Vr(t,e);if(Yr(t,i)){nr(t),Xr(t,i);var n=br(t);Un(t),wr(t,n),qr(t,n),i.finish()}}function Gr(t,e,i){var n=t.display,r=t.options.lineNumbers,a=n.lineDiv,o=a.firstChild;function s(e){var i=e.nextSibling;return l&&b&&t.display.currentWheelTarget==e?e.style.display="none":e.parentNode.removeChild(e),i}for(var c=n.view,u=n.viewFrom,d=0;d-1&&(p=!1),Ri(t,h,u,i)),p&&(M(h.lineNumber),h.lineNumber.appendChild(document.createTextNode(le(t.options,u)))),o=h.node.nextSibling}else{var f=$i(t,h,u,i);a.insertBefore(f,o)}u+=h.size}while(o)o=s(o)}function jr(t){var e=t.gutters.offsetWidth;t.sizer.style.marginLeft=e+"px",Pi(t,"gutterChanged",t)}function qr(t,e){t.display.sizer.style.minHeight=e.docHeight+"px",t.display.heightForcer.style.top=e.docHeight+"px",t.display.gutters.style.height=e.docHeight+t.display.barHeight+Zi(t)+"px"}function Zr(t){var e=t.display,i=e.view;if(e.alignWidgets||e.gutters.firstChild&&t.options.fixedGutter){for(var n=Bn(e)-e.scroller.scrollLeft+t.doc.scrollLeft,r=e.gutters.offsetWidth,a=n+"px",o=0;oc.clientWidth,f=c.scrollHeight>c.clientHeight;if(r&&p||a&&f){if(a&&b&&l)t:for(var v=e.target,g=s.view;v!=c;v=v.parentNode)for(var m=0;m=0&&ue(t,n.to())<=0)return i}return-1};var ca=function(t,e){this.anchor=t,this.head=e};function ua(t,e,i){var n=t&&t.options.selectionsMayTouch,r=e[i];e.sort(function(t,e){return ue(t.from(),e.from())}),i=Y(e,r);for(var a=1;a0:l>=0){var c=fe(s.from(),o.from()),u=pe(s.to(),o.to()),d=s.empty()?o.from()==o.head:s.from()==s.head;a<=i&&--i,e.splice(--a,2,new ca(d?u:c,d?c:u))}}return new la(e,i)}function da(t,e){return new la([new ca(t,e||t)],0)}function ha(t){return t.text?ce(t.from.line+t.text.length-1,tt(t.text).length+(1==t.text.length?t.from.ch:0)):t.to}function pa(t,e){if(ue(t,e.from)<0)return t;if(ue(t,e.to)<=0)return ha(e);var i=t.line+e.text.length-(e.to.line-e.from.line)-1,n=t.ch;return t.line==e.to.line&&(n+=ha(e).ch-e.to.ch),ce(i,n)}function fa(t,e){for(var i=[],n=0;n1&&t.remove(s.line+1,f-1),t.insert(s.line+1,m)}Pi(t,"change",t,e)}function _a(t,e,i){function n(t,r,a){if(t.linked)for(var o=0;o1&&!t.done[t.done.length-2].ranges?(t.done.pop(),tt(t.done)):void 0}function Ia(t,e,i,n){var r=t.history;r.undone.length=0;var a,o,s=+new Date;if((r.lastOp==n||r.lastOrigin==e.origin&&e.origin&&("+"==e.origin.charAt(0)&&r.lastModTime>s-(t.cm?t.cm.options.historyEventDelay:500)||"*"==e.origin.charAt(0)))&&(a=Ma(r,r.lastOp==n)))o=tt(a.changes),0==ue(e.from,e.to)&&0==ue(e.from,o.to)?o.to=ha(e):a.changes.push(Aa(t,e));else{var l=tt(r.done);l&&l.ranges||Pa(t.sel,r.done),a={changes:[Aa(t,e)],generation:r.generation},r.done.push(a);while(r.done.length>r.undoDepth)r.done.shift(),r.done[0].ranges||r.done.shift()}r.done.push(i),r.generation=++r.maxGeneration,r.lastModTime=r.lastSelTime=s,r.lastOp=r.lastSelOp=n,r.lastOrigin=r.lastSelOrigin=e.origin,o||wt(t,"historyAdded")}function Ea(t,e,i,n){var r=e.charAt(0);return"*"==r||"+"==r&&i.ranges.length==n.ranges.length&&i.somethingSelected()==n.somethingSelected()&&new Date-t.history.lastSelTime<=(t.cm?t.cm.options.historyEventDelay:500)}function Da(t,e,i,n){var r=t.history,a=n&&n.origin;i==r.lastSelOp||a&&r.lastSelOrigin==a&&(r.lastModTime==r.lastSelTime&&r.lastOrigin==a||Ea(t,a,tt(r.done),e))?r.done[r.done.length-1]=e:Pa(e,r.done),r.lastSelTime=+new Date,r.lastSelOrigin=a,r.lastSelOp=i,n&&!1!==n.clearRedo&&Ta(r.undone)}function Pa(t,e){var i=tt(e);i&&i.ranges&&i.equals(t)||e.push(t)}function La(t,e,i,n){var r=e["spans_"+t.id],a=0;t.iter(Math.max(t.first,i),Math.min(t.first+t.size,n),function(i){i.markedSpans&&((r||(r=e["spans_"+t.id]={}))[a]=i.markedSpans),++a})}function Ra(t){if(!t)return null;for(var e,i=0;i-1&&(tt(s)[d]=c[d],delete c[d])}}}return n}function Oa(t,e,i,n){if(n){var r=t.anchor;if(i){var a=ue(e,r)<0;a!=ue(i,r)<0?(r=e,e=i):a!=ue(e,i)<0&&(e=i)}return new ca(r,e)}return new ca(i||e,e)}function za(t,e,i,n,r){null==r&&(r=t.cm&&(t.cm.display.shift||t.extend)),Ya(t,new la([Oa(t.sel.primary(),e,i,r)],0),n)}function Wa(t,e,i){for(var n=[],r=t.cm&&(t.cm.display.shift||t.extend),a=0;a=e.ch:s.to>e.ch))){if(r&&(wt(l,"beforeCursorEnter"),l.explicitlyCleared)){if(a.markedSpans){--o;continue}break}if(!l.atomic)continue;if(i){var d=l.find(n<0?1:-1),h=void 0;if((n<0?u:c)&&(d=Ja(t,d,-n,d&&d.line==e.line?a:null)),d&&d.line==e.line&&(h=ue(d,i))&&(n<0?h<0:h>0))return qa(t,d,e,n,r)}var p=l.find(n<0?-1:1);return(n<0?c:u)&&(p=Ja(t,p,n,p.line==e.line?a:null)),p?qa(t,p,e,n,r):null}}return e}function Za(t,e,i,n,r){var a=n||1,o=qa(t,e,i,a,r)||!r&&qa(t,e,i,a,!0)||qa(t,e,i,-a,r)||!r&&qa(t,e,i,-a,!0);return o||(t.cantEdit=!0,ce(t.first,0))}function Ja(t,e,i,n){return i<0&&0==e.ch?e.line>t.first?ge(t,ce(e.line-1)):null:i>0&&e.ch==(n||ee(t,e.line)).text.length?e.line=0;--r)io(t,{from:n[r].from,to:n[r].to,text:r?[""]:e.text,origin:e.origin});else io(t,e)}}function io(t,e){if(1!=e.text.length||""!=e.text[0]||0!=ue(e.from,e.to)){var i=fa(t,e);Ia(t,e,i,t.cm?t.cm.curOp.id:NaN),ao(t,e,i,He(t,e));var n=[];_a(t,function(t,i){i||-1!=Y(n,t.history)||(uo(t.history,e),n.push(t.history)),ao(t,e,null,He(t,e))})}}function no(t,e,i){var n=t.cm&&t.cm.state.suppressEdits;if(!n||i){for(var r,a=t.history,o=t.sel,s="undo"==e?a.done:a.undone,l="undo"==e?a.undone:a.done,c=0;c=0;--p){var f=h(p);if(f)return f.v}}}}function ro(t,e){if(0!=e&&(t.first+=e,t.sel=new la(et(t.sel.ranges,function(t){return new ca(ce(t.anchor.line+e,t.anchor.ch),ce(t.head.line+e,t.head.ch))}),t.sel.primIndex),t.cm)){Vn(t.cm,t.first,t.first-e,e);for(var i=t.cm.display,n=i.viewFrom;nt.lastLine())){if(e.from.linea&&(e={from:e.from,to:ce(a,ee(t,a).text.length),text:[e.text[0]],origin:e.origin}),e.removed=ie(t,e.from,e.to),i||(i=fa(t,e)),t.cm?oo(t.cm,e,n):xa(t,e,n),Xa(t,i,G),t.cantEdit&&Za(t,ce(t.firstLine(),0))&&(t.cantEdit=!1)}}function oo(t,e,i){var n=t.doc,r=t.display,a=e.from,o=e.to,s=!1,l=a.line;t.options.lineWrapping||(l=ae(ii(ee(n,a.line))),n.iter(l,o.line+1,function(t){if(t==r.maxLine)return s=!0,!0})),n.sel.contains(e.from,e.to)>-1&&St(t),xa(n,e,i,Nn(t)),t.options.lineWrapping||(n.iter(l,a.line+e.text.length,function(t){var e=ui(t);e>r.maxLineLength&&(r.maxLine=t,r.maxLineLength=e,r.maxLineChanged=!0,s=!1)}),s&&(t.curOp.updateMaxLine=!0)),Pe(n,a.line),zr(t,400);var c=e.text.length-(o.line-a.line)-1;e.full?Vn(t):a.line!=o.line||1!=e.text.length||ba(t.doc,e)?Vn(t,a.line,o.line+1,c):$n(t,a.line,"text");var u=kt(t,"changes"),d=kt(t,"change");if(d||u){var h={from:a,to:o,text:e.text,removed:e.removed,origin:e.origin};d&&Pi(t,"change",t,h),u&&(t.curOp.changeObjs||(t.curOp.changeObjs=[])).push(h)}t.display.selForContextMenu=null}function so(t,e,i,n,r){var a;n||(n=i),ue(n,i)<0&&(a=[n,i],i=a[0],n=a[1]),"string"==typeof e&&(e=t.splitLines(e)),eo(t,{from:i,to:n,text:e,origin:r})}function lo(t,e,i,n){i1||!(this.children[0]instanceof po))){var s=[];this.collapse(s),this.children=[new po(s)],this.children[0].parent=this}},collapse:function(t){for(var e=0;e50){for(var o=r.lines.length%25+25,s=o;s10);t.parent.maybeSpill()}},iterN:function(t,e,i){for(var n=0;n0||0==o&&!1!==a.clearWhenEmpty)return a;if(a.replacedWith&&(a.collapsed=!0,a.widgetNode=D("span",[a.replacedWith],"CodeMirror-widget"),n.handleMouseEvents||a.widgetNode.setAttribute("cm-ignore-events","true"),n.insertLeft&&(a.widgetNode.insertLeft=!0)),a.collapsed){if(ei(t,e.line,e,i,a)||e.line!=i.line&&ei(t,i.line,e,i,a))throw new Error("Inserting collapsed marker partially overlapping an existing one");Be()}a.addToHistory&&Ia(t,{from:e,to:i,origin:"markText"},t.sel,NaN);var s,l=e.line,c=t.cm;if(t.iter(l,i.line+1,function(n){c&&a.collapsed&&!c.options.lineWrapping&&ii(n)==c.display.maxLine&&(s=!0),a.collapsed&&l!=e.line&&re(n,0),We(n,new Ne(a,l==e.line?e.ch:null,l==i.line?i.ch:null),t.cm&&t.cm.curOp),++l}),a.collapsed&&t.iter(e.line,i.line+1,function(e){si(t,e)&&re(e,0)}),a.clearOnEnter&&bt(a,"beforeCursorEnter",function(){return a.clear()}),a.readOnly&&(Fe(),(t.history.done.length||t.history.undone.length)&&t.clearHistory()),a.collapsed&&(a.id=++yo,a.atomic=!0),c){if(s&&(c.curOp.updateMaxLine=!0),a.collapsed)Vn(c,e.line,i.line+1);else if(a.className||a.startStyle||a.endStyle||a.css||a.attributes||a.title)for(var u=e.line;u<=i.line;u++)$n(c,u,"text");a.atomic&&Ga(c.doc),Pi(c,"markerAdded",c,a)}return a}bo.prototype.clear=function(){if(!this.explicitlyCleared){var t=this.doc.cm,e=t&&!t.curOp;if(e&&Tr(t),kt(this,"clear")){var i=this.find();i&&Pi(this,"clear",i.from,i.to)}for(var n=null,r=null,a=0;at.display.maxLineLength&&(t.display.maxLine=c,t.display.maxLineLength=u,t.display.maxLineChanged=!0)}null!=n&&t&&this.collapsed&&Vn(t,n,r+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,t&&Ga(t.doc)),t&&Pi(t,"markerCleared",t,this,n,r),e&&Mr(t),this.parent&&this.parent.clear()}},bo.prototype.find=function(t,e){var i,n;null==t&&"bookmark"==this.type&&(t=1);for(var r=0;r=0;l--)eo(this,n[l]);s?Ka(this,s):this.cm&&dr(this.cm)}),undo:Or(function(){no(this,"undo")}),redo:Or(function(){no(this,"redo")}),undoSelection:Or(function(){no(this,"undo",!0)}),redoSelection:Or(function(){no(this,"redo",!0)}),setExtending:function(t){this.extend=t},getExtending:function(){return this.extend},historySize:function(){for(var t=this.history,e=0,i=0,n=0;n=t.ch)&&e.push(r.marker.parent||r.marker)}return e},findMarks:function(t,e,i){t=ge(this,t),e=ge(this,e);var n=[],r=t.line;return this.iter(t.line,e.line+1,function(a){var o=a.markedSpans;if(o)for(var s=0;s=l.to||null==l.from&&r!=t.line||null!=l.from&&r==e.line&&l.from>=e.ch||i&&!i(l.marker)||n.push(l.marker.parent||l.marker)}++r}),n},getAllMarks:function(){var t=[];return this.iter(function(e){var i=e.markedSpans;if(i)for(var n=0;nt)return e=t,!0;t-=a,++i}),ge(this,ce(i,e))},indexFromPos:function(t){t=ge(this,t);var e=t.ch;if(t.linee&&(e=t.from),null!=t.to&&t.to-1)return e.state.draggingText(t),void setTimeout(function(){return e.display.input.focus()},20);try{var d=t.dataTransfer.getData("Text");if(d){var h;if(e.state.draggingText&&!e.state.draggingText.copy&&(h=e.listSelections()),Xa(e.doc,da(i,i)),h)for(var p=0;p=0;e--)so(t.doc,"",n[e].from,n[e].to,"+delete");dr(t)})}function Zo(t,e,i){var n=dt(t.text,e+i,i);return n<0||n>t.text.length?null:n}function Jo(t,e,i){var n=Zo(t,e.ch,i);return null==n?null:new ce(e.line,n,i<0?"after":"before")}function Qo(t,e,i,n,r){if(t){"rtl"==e.doc.direction&&(r=-r);var a=mt(i,e.doc.direction);if(a){var o,s=r<0?tt(a):a[0],l=r<0==(1==s.level),c=l?"after":"before";if(s.level>0||"rtl"==e.doc.direction){var u=on(e,i);o=r<0?i.text.length-1:0;var d=sn(e,u,o).top;o=ht(function(t){return sn(e,u,t).top==d},r<0==(1==s.level)?s.from:s.to-1,o),"before"==c&&(o=Zo(i,o,1))}else o=r<0?s.to:s.from;return new ce(n,o,c)}}return new ce(n,r<0?i.text.length:0,r<0?"before":"after")}function ts(t,e,i,n){var r=mt(e,t.doc.direction);if(!r)return Jo(e,i,n);i.ch>=e.text.length?(i.ch=e.text.length,i.sticky="before"):i.ch<=0&&(i.ch=0,i.sticky="after");var a=vt(r,i.ch,i.sticky),o=r[a];if("ltr"==t.doc.direction&&o.level%2==0&&(n>0?o.to>i.ch:o.from=o.from&&h>=u.begin)){var p=d?"before":"after";return new ce(i.line,h,p)}}var f=function(t,e,n){for(var a=function(t,e){return e?new ce(i.line,l(t,1),"before"):new ce(i.line,t,"after")};t>=0&&t0==(1!=o.level),c=s?n.begin:l(n.end,-1);if(o.from<=c&&c0?u.end:l(u.begin,-1);return null==g||n>0&&g==e.text.length||(v=f(n>0?0:r.length-1,n,c(g)),!v)?null:v}$o.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},$o.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},$o.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},$o.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},$o["default"]=b?$o.macDefault:$o.pcDefault;var es={selectAll:Qa,singleSelection:function(t){return t.setSelection(t.getCursor("anchor"),t.getCursor("head"),G)},killLine:function(t){return qo(t,function(e){if(e.empty()){var i=ee(t.doc,e.head.line).text.length;return e.head.ch==i&&e.head.line0)r=new ce(r.line,r.ch+1),t.replaceRange(a.charAt(r.ch-1)+a.charAt(r.ch-2),ce(r.line,r.ch-2),r,"+transpose");else if(r.line>t.doc.first){var o=ee(t.doc,r.line-1).text;o&&(r=new ce(r.line,1),t.replaceRange(a.charAt(0)+t.doc.lineSeparator()+o.charAt(o.length-1),ce(r.line-1,o.length-1),r,"+transpose"))}i.push(new ca(r,r))}t.setSelections(i)})},newlineAndIndent:function(t){return Fr(t,function(){for(var e=t.listSelections(),i=e.length-1;i>=0;i--)t.replaceRange(t.doc.lineSeparator(),e[i].anchor,e[i].head,"+input");e=t.listSelections();for(var n=0;n-1&&(ue((r=s.ranges[r]).from(),e)<0||e.xRel>0)&&(ue(r.to(),e)>0||e.xRel<0)?As(t,n,e,a):Ms(t,n,e,a)}function As(t,e,i,n){var r=t.display,a=!1,c=Br(t,function(e){l&&(r.scroller.draggable=!1),t.state.draggingText=!1,t.state.delayingBlurEvent&&(t.hasFocus()?t.state.delayingBlurEvent=!1:tr(t)),_t(r.wrapper.ownerDocument,"mouseup",c),_t(r.wrapper.ownerDocument,"mousemove",u),_t(r.scroller,"dragstart",d),_t(r.scroller,"drop",c),a||(Tt(e),n.addNew||za(t.doc,i,null,null,n.extend),l&&!p||o&&9==s?setTimeout(function(){r.wrapper.ownerDocument.body.focus({preventScroll:!0}),r.input.focus()},20):r.input.focus())}),u=function(t){a=a||Math.abs(e.clientX-t.clientX)+Math.abs(e.clientY-t.clientY)>=10},d=function(){return a=!0};l&&(r.scroller.draggable=!0),t.state.draggingText=c,c.copy=!n.moveOnDrag,bt(r.wrapper.ownerDocument,"mouseup",c),bt(r.wrapper.ownerDocument,"mousemove",u),bt(r.scroller,"dragstart",d),bt(r.scroller,"drop",c),t.state.delayingBlurEvent=!0,setTimeout(function(){return r.input.focus()},20),r.scroller.dragDrop&&r.scroller.dragDrop()}function Ts(t,e,i){if("char"==i)return new ca(e,e);if("word"==i)return t.findWordAt(e);if("line"==i)return new ca(ce(e.line,0),ge(t.doc,ce(e.line+1,0)));var n=i(t,e);return new ca(n.from,n.to)}function Ms(t,e,i,n){o&&tr(t);var r=t.display,a=t.doc;Tt(e);var s,l,c=a.sel,u=c.ranges;if(n.addNew&&!n.extend?(l=a.sel.contains(i),s=l>-1?u[l]:new ca(i,i)):(s=a.sel.primary(),l=a.sel.primIndex),"rectangle"==n.unit)n.addNew||(s=new ca(i,i)),i=zn(t,e,!0,!0),l=-1;else{var d=Ts(t,i,n.unit);s=n.extend?Oa(s,d.anchor,d.head,n.extend):d}n.addNew?-1==l?(l=u.length,Ya(a,ua(t,u.concat([s]),l),{scroll:!1,origin:"*mouse"})):u.length>1&&u[l].empty()&&"char"==n.unit&&!n.extend?(Ya(a,ua(t,u.slice(0,l).concat(u.slice(l+1)),0),{scroll:!1,origin:"*mouse"}),c=a.sel):Va(a,l,s,j):(l=0,Ya(a,new la([s],0),j),c=a.sel);var h=i;function p(e){if(0!=ue(h,e))if(h=e,"rectangle"==n.unit){for(var r=[],o=t.options.tabSize,u=H(ee(a,i.line).text,i.ch,o),d=H(ee(a,e.line).text,e.ch,o),p=Math.min(u,d),f=Math.max(u,d),v=Math.min(i.line,e.line),g=Math.min(t.lastLine(),Math.max(i.line,e.line));v<=g;v++){var m=ee(a,v).text,y=Z(m,p,o);p==f?r.push(new ca(ce(v,y),ce(v,y))):m.length>y&&r.push(new ca(ce(v,y),ce(v,Z(m,f,o))))}r.length||r.push(new ca(i,i)),Ya(a,ua(t,c.ranges.slice(0,l).concat(r),l),{origin:"*mouse",scroll:!1}),t.scrollIntoView(e)}else{var b,x=s,_=Ts(t,e,n.unit),w=x.anchor;ue(_.anchor,w)>0?(b=_.head,w=fe(x.from(),_.anchor)):(b=_.anchor,w=pe(x.to(),_.head));var C=c.ranges.slice(0);C[l]=Is(t,new ca(ge(a,w),b)),Ya(a,ua(t,C,l),j)}}var f=r.wrapper.getBoundingClientRect(),v=0;function g(e){var i=++v,o=zn(t,e,!0,"rectangle"==n.unit);if(o)if(0!=ue(o,h)){t.curOp.focus=L(O(t)),p(o);var s=ar(r,a);(o.line>=s.to||o.linef.bottom?20:0;l&&setTimeout(Br(t,function(){v==i&&(r.scroller.scrollTop+=l,g(e))}),50)}}function m(e){t.state.selectingText=!1,v=1/0,e&&(Tt(e),r.input.focus()),_t(r.wrapper.ownerDocument,"mousemove",y),_t(r.wrapper.ownerDocument,"mouseup",b),a.history.lastSelOrigin=null}var y=Br(t,function(t){0!==t.buttons&&Pt(t)?g(t):m(t)}),b=Br(t,m);t.state.selectingText=b,bt(r.wrapper.ownerDocument,"mousemove",y),bt(r.wrapper.ownerDocument,"mouseup",b)}function Is(t,e){var i=e.anchor,n=e.head,r=ee(t.doc,i.line);if(0==ue(i,n)&&i.sticky==n.sticky)return e;var a=mt(r);if(!a)return e;var o=vt(a,i.ch,i.sticky),s=a[o];if(s.from!=i.ch&&s.to!=i.ch)return e;var l,c=o+(s.from==i.ch==(1!=s.level)?0:1);if(0==c||c==a.length)return e;if(n.line!=i.line)l=(n.line-i.line)*("ltr"==t.doc.direction?1:-1)>0;else{var u=vt(a,n.ch,n.sticky),d=u-o||(n.ch-i.ch)*(1==s.level?-1:1);l=u==c-1||u==c?d<0:d>0}var h=a[c+(l?-1:0)],p=l==(1==h.level),f=p?h.from:h.to,v=p?"after":"before";return i.ch==f&&i.sticky==v?e:new ca(new ce(i.line,f,v),n)}function Es(t,e,i,n){var r,a;if(e.touches)r=e.touches[0].clientX,a=e.touches[0].clientY;else try{r=e.clientX,a=e.clientY}catch(h){return!1}if(r>=Math.floor(t.display.gutters.getBoundingClientRect().right))return!1;n&&Tt(e);var o=t.display,s=o.lineDiv.getBoundingClientRect();if(a>s.bottom||!kt(t,i))return It(e);a-=s.top-o.viewOffset;for(var l=0;l=r){var u=oe(t.doc,a),d=t.display.gutterSpecs[l];return wt(t,i,t,u,d.className,e),It(e)}}}function Ds(t,e){return Es(t,e,"gutterClick",!0)}function Ps(t,e){Ui(t.display,e)||Ls(t,e)||Ct(t,e,"contextmenu")||S||t.display.input.onContextMenu(e)}function Ls(t,e){return!!kt(t,"gutterContextMenu")&&Es(t,e,"gutterContextMenu",!1)}function Rs(t){t.display.wrapper.className=t.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+t.options.theme.replace(/(^|\s)\s*/g," cm-s-"),gn(t)}xs.prototype.compare=function(t,e,i){return this.time+bs>t&&0==ue(e,this.pos)&&i==this.button};var Fs={toString:function(){return"CodeMirror.Init"}},Bs={},Ns={};function Os(t){var e=t.optionHandlers;function i(i,n,r,a){t.defaults[i]=n,r&&(e[i]=a?function(t,e,i){i!=Fs&&r(t,e,i)}:r)}t.defineOption=i,t.Init=Fs,i("value","",function(t,e){return t.setValue(e)},!0),i("mode",null,function(t,e){t.doc.modeOption=e,ma(t)},!0),i("indentUnit",2,ma,!0),i("indentWithTabs",!1),i("smartIndent",!0),i("tabSize",4,function(t){ya(t),gn(t),Vn(t)},!0),i("lineSeparator",null,function(t,e){if(t.doc.lineSep=e,e){var i=[],n=t.doc.first;t.doc.iter(function(t){for(var r=0;;){var a=t.text.indexOf(e,r);if(-1==a)break;r=a+e.length,i.push(ce(n,a))}n++});for(var r=i.length-1;r>=0;r--)so(t.doc,e,i[r],ce(i[r].line,i[r].ch+e.length))}}),i("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\u202d\u202e\u2066\u2067\u2069\ufeff\ufff9-\ufffc]/g,function(t,e,i){t.state.specialChars=new RegExp(e.source+(e.test("\t")?"":"|\t"),"g"),i!=Fs&&t.refresh()}),i("specialCharPlaceholder",bi,function(t){return t.refresh()},!0),i("electricChars",!0),i("inputStyle",y?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),i("spellcheck",!1,function(t,e){return t.getInputField().spellcheck=e},!0),i("autocorrect",!1,function(t,e){return t.getInputField().autocorrect=e},!0),i("autocapitalize",!1,function(t,e){return t.getInputField().autocapitalize=e},!0),i("rtlMoveVisually",!_),i("wholeLineUpdateBefore",!0),i("theme","default",function(t){Rs(t),ea(t)},!0),i("keyMap","default",function(t,e,i){var n=jo(e),r=i!=Fs&&jo(i);r&&r.detach&&r.detach(t,n),n.attach&&n.attach(t,r||null)}),i("extraKeys",null),i("configureMouse",null),i("lineWrapping",!1,Ws,!0),i("gutters",[],function(t,e){t.display.gutterSpecs=Qr(e,t.options.lineNumbers),ea(t)},!0),i("fixedGutter",!0,function(t,e){t.display.gutters.style.left=e?Bn(t.display)+"px":"0",t.refresh()},!0),i("coverGutterNextToScrollbar",!1,function(t){return wr(t)},!0),i("scrollbarStyle","native",function(t){kr(t),wr(t),t.display.scrollbars.setScrollTop(t.doc.scrollTop),t.display.scrollbars.setScrollLeft(t.doc.scrollLeft)},!0),i("lineNumbers",!1,function(t,e){t.display.gutterSpecs=Qr(t.options.gutters,e),ea(t)},!0),i("firstLineNumber",1,ea,!0),i("lineNumberFormatter",function(t){return t},ea,!0),i("showCursorWhenSelecting",!1,Un,!0),i("resetSelectionOnContextMenu",!0),i("lineWiseCopyCut",!0),i("pasteLinesPerSelection",!0),i("selectionsMayTouch",!1),i("readOnly",!1,function(t,e){"nocursor"==e&&(ir(t),t.display.input.blur()),t.display.input.readOnlyChanged(e)}),i("screenReaderLabel",null,function(t,e){e=""===e?null:e,t.display.input.screenReaderLabelChanged(e)}),i("disableInput",!1,function(t,e){e||t.display.input.reset()},!0),i("dragDrop",!0,zs),i("allowDropFileTypes",null),i("cursorBlinkRate",530),i("cursorScrollMargin",0),i("cursorHeight",1,Un,!0),i("singleCursorHeightPerLine",!0,Un,!0),i("workTime",100),i("workDelay",100),i("flattenSpans",!0,ya,!0),i("addModeClass",!1,ya,!0),i("pollInterval",100),i("undoDepth",200,function(t,e){return t.doc.history.undoDepth=e}),i("historyEventDelay",1250),i("viewportMargin",10,function(t){return t.refresh()},!0),i("maxHighlightLength",1e4,ya,!0),i("moveInputWithCursor",!0,function(t,e){e||t.display.input.resetPosition()}),i("tabindex",null,function(t,e){return t.display.input.getField().tabIndex=e||""}),i("autofocus",null),i("direction","ltr",function(t,e){return t.doc.setDirection(e)},!0),i("phrases",null)}function zs(t,e,i){var n=i&&i!=Fs;if(!e!=!n){var r=t.display.dragFunctions,a=e?bt:_t;a(t.display.scroller,"dragstart",r.start),a(t.display.scroller,"dragenter",r.enter),a(t.display.scroller,"dragover",r.over),a(t.display.scroller,"dragleave",r.leave),a(t.display.scroller,"drop",r.drop)}}function Ws(t){t.options.lineWrapping?(R(t.display.wrapper,"CodeMirror-wrap"),t.display.sizer.style.minWidth="",t.display.sizerWidth=null):(T(t.display.wrapper,"CodeMirror-wrap"),di(t)),On(t),Vn(t),gn(t),setTimeout(function(){return wr(t)},100)}function Vs(t,e){var i=this;if(!(this instanceof Vs))return new Vs(t,e);this.options=e=e?$(e):{},$(Bs,e,!1);var n=e.value;"string"==typeof n?n=new To(n,e.mode,null,e.lineSeparator,e.direction):e.mode&&(n.modeOption=e.mode),this.doc=n;var r=new Vs.inputStyles[e.inputStyle](this),a=this.display=new ia(t,n,r,e);for(var c in a.wrapper.CodeMirror=this,Rs(this),e.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),kr(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new K,keySeq:null,specialChars:null},e.autofocus&&!y&&a.input.focus(),o&&s<11&&setTimeout(function(){return i.display.input.reset(!0)},20),$s(this),Fo(),Tr(this),this.curOp.forceUpdate=!0,wa(this,n),e.autofocus&&!y||this.hasFocus()?setTimeout(function(){i.hasFocus()&&!i.state.focused&&er(i)},20):ir(this),Ns)Ns.hasOwnProperty(c)&&Ns[c](this,e[c],Fs);Jr(this),e.finishInit&&e.finishInit(this);for(var u=0;u400}bt(e.scroller,"touchstart",function(r){if(!Ct(t,r)&&!a(r)&&!Ds(t,r)){e.input.ensurePolled(),clearTimeout(i);var o=+new Date;e.activeTouch={start:o,moved:!1,prev:o-n.end<=300?n:null},1==r.touches.length&&(e.activeTouch.left=r.touches[0].pageX,e.activeTouch.top=r.touches[0].pageY)}}),bt(e.scroller,"touchmove",function(){e.activeTouch&&(e.activeTouch.moved=!0)}),bt(e.scroller,"touchend",function(i){var n=e.activeTouch;if(n&&!Ui(e,i)&&null!=n.left&&!n.moved&&new Date-n.start<300){var a,o=t.coordsChar(e.activeTouch,"page");a=!n.prev||l(n,n.prev)?new ca(o,o):!n.prev.prev||l(n,n.prev.prev)?t.findWordAt(o):new ca(ce(o.line,0),ge(t.doc,ce(o.line+1,0))),t.setSelection(a.anchor,a.head),t.focus(),Tt(i)}r()}),bt(e.scroller,"touchcancel",r),bt(e.scroller,"scroll",function(){e.scroller.clientHeight&&(gr(t,e.scroller.scrollTop),yr(t,e.scroller.scrollLeft,!0),wt(t,"scroll",t))}),bt(e.scroller,"mousewheel",function(e){return sa(t,e)}),bt(e.scroller,"DOMMouseScroll",function(e){return sa(t,e)}),bt(e.wrapper,"scroll",function(){return e.wrapper.scrollTop=e.wrapper.scrollLeft=0}),e.dragFunctions={enter:function(e){Ct(t,e)||Et(e)},over:function(e){Ct(t,e)||(Do(t,e),Et(e))},start:function(e){return Eo(t,e)},drop:Br(t,Io),leave:function(e){Ct(t,e)||Po(t)}};var c=e.input.getField();bt(c,"keyup",function(e){return vs.call(t,e)}),bt(c,"keydown",Br(t,ps)),bt(c,"keypress",Br(t,gs)),bt(c,"focus",function(e){return er(t,e)}),bt(c,"blur",function(e){return ir(t,e)})}Vs.defaults=Bs,Vs.optionHandlers=Ns;var Hs=[];function Ks(t,e,i,n){var r,a=t.doc;null==i&&(i="add"),"smart"==i&&(a.mode.indent?r=Ce(t,e).state:i="prev");var o=t.options.tabSize,s=ee(a,e),l=H(s.text,null,o);s.stateAfter&&(s.stateAfter=null);var c,u=s.text.match(/^\s*/)[0];if(n||/\S/.test(s.text)){if("smart"==i&&(c=a.mode.indent(r,s.text.slice(u.length),s.text),c==U||c>150)){if(!n)return;i="prev"}}else c=0,i="not";"prev"==i?c=e>a.first?H(ee(a,e-1).text,null,o):0:"add"==i?c=l+t.options.indentUnit:"subtract"==i?c=l-t.options.indentUnit:"number"==typeof i&&(c=l+i),c=Math.max(0,c);var d="",h=0;if(t.options.indentWithTabs)for(var p=Math.floor(c/o);p;--p)h+=o,d+="\t";if(ho,l=Ot(e),c=null;if(s&&n.ranges.length>1)if(Ys&&Ys.text.join("\n")==e){if(n.ranges.length%Ys.text.length==0){c=[];for(var u=0;u=0;h--){var p=n.ranges[h],f=p.from(),v=p.to();p.empty()&&(i&&i>0?f=ce(f.line,f.ch-i):t.state.overwrite&&!s?v=ce(v.line,Math.min(ee(a,v.line).text.length,v.ch+tt(l).length)):s&&Ys&&Ys.lineWise&&Ys.text.join("\n")==l.join("\n")&&(f=v=ce(f.line,0)));var g={from:f,to:v,text:c?c[h%c.length]:l,origin:r||(s?"paste":t.state.cutIncoming>o?"cut":"+input")};eo(t.doc,g),Pi(t,"inputRead",t,g)}e&&!s&&js(t,e),dr(t),t.curOp.updateInput<2&&(t.curOp.updateInput=d),t.curOp.typing=!0,t.state.pasteIncoming=t.state.cutIncoming=-1}function Gs(t,e){var i=t.clipboardData&&t.clipboardData.getData("Text");if(i)return t.preventDefault(),e.isReadOnly()||e.options.disableInput||!e.hasFocus()||Fr(e,function(){return Us(e,i,0,null,"paste")}),!0}function js(t,e){if(t.options.electricChars&&t.options.smartIndent)for(var i=t.doc.sel,n=i.ranges.length-1;n>=0;n--){var r=i.ranges[n];if(!(r.head.ch>100||n&&i.ranges[n-1].head.line==r.head.line)){var a=t.getModeAt(r.head),o=!1;if(a.electricChars){for(var s=0;s-1){o=Ks(t,r.head.line,"smart");break}}else a.electricInput&&a.electricInput.test(ee(t.doc,r.head.line).text.slice(0,r.head.ch))&&(o=Ks(t,r.head.line,"smart"));o&&Pi(t,"electricInput",t,r.head.line)}}}function qs(t){for(var e=[],i=[],n=0;ni&&(Ks(this,r.head.line,t,!0),i=r.head.line,n==this.doc.sel.primIndex&&dr(this));else{var a=r.from(),o=r.to(),s=Math.max(i,a.line);i=Math.min(this.lastLine(),o.line-(o.ch?0:1))+1;for(var l=s;l0&&Va(this.doc,n,new ca(a,c[n].to()),G)}}}),getTokenAt:function(t,e){return Me(this,t,e)},getLineTokens:function(t,e){return Me(this,ce(t),e,!0)},getTokenTypeAt:function(t){t=ge(this.doc,t);var e,i=we(this,ee(this.doc,t.line)),n=0,r=(i.length-1)/2,a=t.ch;if(0==a)e=i[2];else for(;;){var o=n+r>>1;if((o?i[2*o-1]:0)>=a)r=o;else{if(!(i[2*o+1]a&&(t=a,r=!0),n=ee(this.doc,t)}else n=t;return xn(this,n,{top:0,left:0},e||"page",i||r).top+(r?this.doc.height-ci(n):0)},defaultTextHeight:function(){return Ln(this.display)},defaultCharWidth:function(){return Rn(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(t,e,i,n,r){var a=this.display;t=Cn(this,ge(this.doc,t));var o=t.bottom,s=t.left;if(e.style.position="absolute",e.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(e),a.sizer.appendChild(e),"over"==n)o=t.top;else if("above"==n||"near"==n){var l=Math.max(a.wrapper.clientHeight,this.doc.height),c=Math.max(a.sizer.clientWidth,a.lineSpace.clientWidth);("above"==n||t.bottom+e.offsetHeight>l)&&t.top>e.offsetHeight?o=t.top-e.offsetHeight:t.bottom+e.offsetHeight<=l&&(o=t.bottom),s+e.offsetWidth>c&&(s=c-e.offsetWidth)}e.style.top=o+"px",e.style.left=e.style.right="","right"==r?(s=a.sizer.clientWidth-e.offsetWidth,e.style.right="0px"):("left"==r?s=0:"middle"==r&&(s=(a.sizer.clientWidth-e.offsetWidth)/2),e.style.left=s+"px"),i&&lr(this,{left:s,top:o,right:s+e.offsetWidth,bottom:o+e.offsetHeight})},triggerOnKeyDown:Nr(ps),triggerOnKeyPress:Nr(gs),triggerOnKeyUp:vs,triggerOnMouseDown:Nr(ws),execCommand:function(t){if(es.hasOwnProperty(t))return es[t].call(null,this)},triggerElectric:Nr(function(t){js(this,t)}),findPosH:function(t,e,i,n){var r=1;e<0&&(r=-1,e=-e);for(var a=ge(this.doc,t),o=0;o0&&s(i.charAt(n-1)))--n;while(r.5||this.options.lineWrapping)&&On(this),wt(this,"refresh",this)}),swapDoc:Nr(function(t){var e=this.doc;return e.cm=null,this.state.selectingText&&this.state.selectingText(),wa(this,t),gn(this),this.display.input.reset(),hr(this,t.scrollLeft,t.scrollTop),this.curOp.forceScroll=!0,Pi(this,"swapDoc",this,e),e}),phrase:function(t){var e=this.options.phrases;return e&&Object.prototype.hasOwnProperty.call(e,t)?e[t]:t},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},At(t),t.registerHelper=function(e,n,r){i.hasOwnProperty(e)||(i[e]=t[e]={_global:[]}),i[e][n]=r},t.registerGlobalHelper=function(e,n,r,a){t.registerHelper(e,n,a),i[e]._global.push({pred:r,val:a})}}function tl(t,e,i,n,r){var a=e,o=i,s=ee(t,e.line),l=r&&"rtl"==t.direction?-i:i;function c(){var i=e.line+l;return!(i=t.first+t.size)&&(e=new ce(i,e.ch,e.sticky),s=ee(t,i))}function u(a){var o;if("codepoint"==n){var u=s.text.charCodeAt(e.ch+(i>0?0:-1));if(isNaN(u))o=null;else{var d=i>0?u>=55296&&u<56320:u>=56320&&u<57343;o=new ce(e.line,Math.max(0,Math.min(s.text.length,e.ch+i*(d?2:1))),-i)}}else o=r?ts(t.cm,s,e,i):Jo(s,e,i);if(null==o){if(a||!c())return!1;e=Qo(r,t.cm,s,e.line,l)}else e=o;return!0}if("char"==n||"codepoint"==n)u();else if("column"==n)u(!0);else if("word"==n||"group"==n)for(var d=null,h="group"==n,p=t.cm&&t.cm.getHelper(e,"wordChars"),f=!0;;f=!1){if(i<0&&!u(!f))break;var v=s.text.charAt(e.ch)||"\n",g=st(v,p)?"w":h&&"\n"==v?"n":!h||/\s/.test(v)?null:"p";if(!h||f||g||(g="s"),d&&d!=g){i<0&&(i=1,u(),e.sticky="after");break}if(g&&(d=g),i>0&&!u(!f))break}var m=Za(t,e,a,o,!0);return de(a,m)&&(m.hitSide=!0),m}function el(t,e,i,n){var r,a,o=t.doc,s=e.left;if("page"==n){var l=Math.min(t.display.wrapper.clientHeight,W(t).innerHeight||o(t).documentElement.clientHeight),c=Math.max(l-.5*Ln(t.display),3);r=(i>0?e.bottom:e.top)+i*c}else"line"==n&&(r=i>0?e.bottom+3:e.top-3);for(;;){if(a=An(t,s,r),!a.outside)break;if(i<0?r<=0:r>=o.height){a.hitSide=!0;break}r+=5*i}return a}var il=function(t){this.cm=t,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new K,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function nl(t,e){var i=an(t,e.line);if(!i||i.hidden)return null;var n=ee(t.doc,e.line),r=en(i,n,e.line),a=mt(n,t.doc.direction),o="left";if(a){var s=vt(a,e.ch);o=s%2?"right":"left"}var l=un(r.map,e.ch,o);return l.offset="right"==l.collapse?l.end:l.start,l}function rl(t){for(var e=t;e;e=e.parentNode)if(/CodeMirror-gutter-wrapper/.test(e.className))return!0;return!1}function al(t,e){return e&&(t.bad=!0),t}function ol(t,e,i,n,r){var a="",o=!1,s=t.doc.lineSeparator(),l=!1;function c(t){return function(e){return e.id==t}}function u(){o&&(a+=s,l&&(a+=s),o=l=!1)}function d(t){t&&(u(),a+=t)}function h(e){if(1==e.nodeType){var i=e.getAttribute("cm-text");if(i)return void d(i);var a,p=e.getAttribute("cm-marker");if(p){var f=t.findMarks(ce(n,0),ce(r+1,0),c(+p));return void(f.length&&(a=f[0].find(0))&&d(ie(t.doc,a.from,a.to).join(s)))}if("false"==e.getAttribute("contenteditable"))return;var v=/^(pre|div|p|li|table|br)$/i.test(e.nodeName);if(!/^br$/i.test(e.nodeName)&&0==e.textContent.length)return;v&&u();for(var g=0;g=e.display.viewTo||a.line=e.display.viewFrom&&nl(e,r)||{node:l[0].measure.map[2],offset:0},u=a.linen.firstLine()&&(o=ce(o.line-1,ee(n.doc,o.line-1).length)),s.ch==ee(n.doc,s.line).text.length&&s.liner.viewTo-1)return!1;o.line==r.viewFrom||0==(t=Wn(n,o.line))?(e=ae(r.view[0].line),i=r.view[0].node):(e=ae(r.view[t].line),i=r.view[t-1].node.nextSibling);var l,c,u=Wn(n,s.line);if(u==r.view.length-1?(l=r.viewTo-1,c=r.lineDiv.lastChild):(l=ae(r.view[u+1].line)-1,c=r.view[u+1].node.previousSibling),!i)return!1;var d=n.doc.splitLines(ol(n,i,c,e,l)),h=ie(n.doc,ce(e,0),ce(l,ee(n.doc,l).text.length));while(d.length>1&&h.length>1)if(tt(d)==tt(h))d.pop(),h.pop(),l--;else{if(d[0]!=h[0])break;d.shift(),h.shift(),e++}var p=0,f=0,v=d[0],g=h[0],m=Math.min(v.length,g.length);while(po.ch&&y.charCodeAt(y.length-f-1)==b.charCodeAt(b.length-f-1))p--,f++;d[d.length-1]=y.slice(0,y.length-f).replace(/^\u200b+/,""),d[0]=d[0].slice(p).replace(/\u200b+$/,"");var _=ce(e,p),w=ce(l,h.length?tt(h).length-f:0);return d.length>1||d[0]||ue(_,w)?(so(n.doc,d,_,w,"+input"),!0):void 0},il.prototype.ensurePolled=function(){this.forceCompositionEnd()},il.prototype.reset=function(){this.forceCompositionEnd()},il.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},il.prototype.readFromDOMSoon=function(){var t=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(t.readDOMTimeout=null,t.composing){if(!t.composing.done)return;t.composing=null}t.updateFromDOM()},80))},il.prototype.updateFromDOM=function(){var t=this;!this.cm.isReadOnly()&&this.pollContent()||Fr(this.cm,function(){return Vn(t.cm)})},il.prototype.setUneditable=function(t){t.contentEditable="false"},il.prototype.onKeyPress=function(t){0==t.charCode||this.composing||(t.preventDefault(),this.cm.isReadOnly()||Br(this.cm,Us)(this.cm,String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),0))},il.prototype.readOnlyChanged=function(t){this.div.contentEditable=String("nocursor"!=t)},il.prototype.onContextMenu=function(){},il.prototype.resetPosition=function(){},il.prototype.needsContentAttribute=!0;var cl=function(t){this.cm=t,this.prevInput="",this.pollingFast=!1,this.polling=new K,this.hasSelection=!1,this.composing=null,this.resetting=!1};function ul(t,e){if(e=e?$(e):{},e.value=t.value,!e.tabindex&&t.tabIndex&&(e.tabindex=t.tabIndex),!e.placeholder&&t.placeholder&&(e.placeholder=t.placeholder),null==e.autofocus){var i=L(z(t));e.autofocus=i==t||null!=t.getAttribute("autofocus")&&i==document.body}function n(){t.value=s.getValue()}var r;if(t.form&&(bt(t.form,"submit",n),!e.leaveSubmitMethodAlone)){var a=t.form;r=a.submit;try{var o=a.submit=function(){n(),a.submit=r,a.submit(),a.submit=o}}catch(l){}}e.finishInit=function(i){i.save=n,i.getTextArea=function(){return t},i.toTextArea=function(){i.toTextArea=isNaN,n(),t.parentNode.removeChild(i.getWrapperElement()),t.style.display="",t.form&&(_t(t.form,"submit",n),e.leaveSubmitMethodAlone||"function"!=typeof t.form.submit||(t.form.submit=r))}},t.style.display="none";var s=Vs(function(e){return t.parentNode.insertBefore(e,t.nextSibling)},e);return s}function dl(t){t.off=_t,t.on=bt,t.wheelEventPixels=oa,t.Doc=To,t.splitLines=Ot,t.countColumn=H,t.findColumn=Z,t.isWordChar=ot,t.Pass=U,t.signal=wt,t.Line=hi,t.changeEnd=ha,t.scrollbarModel=Sr,t.Pos=ce,t.cmpPos=ue,t.modes=Ht,t.mimeModes=Kt,t.resolveMode=Ut,t.getMode=Gt,t.modeExtensions=jt,t.extendMode=qt,t.copyState=Zt,t.startState=Qt,t.innerMode=Jt,t.commands=es,t.keyMap=$o,t.keyName=Go,t.isModifierKey=Xo,t.lookupKey=Yo,t.normalizeKeyMap=Ko,t.StringStream=te,t.SharedTextMarker=_o,t.TextMarker=bo,t.LineWidget=vo,t.e_preventDefault=Tt,t.e_stopPropagation=Mt,t.e_stop=Et,t.addClass=R,t.contains=P,t.rmClass=T,t.keyNames=Oo}cl.prototype.init=function(t){var e=this,i=this,n=this.cm;this.createField(t);var r=this.textarea;function a(t){if(!Ct(n,t)){if(n.somethingSelected())Xs({lineWise:!1,text:n.getSelections()});else{if(!n.options.lineWiseCopyCut)return;var e=qs(n);Xs({lineWise:!0,text:e.text}),"cut"==t.type?n.setSelections(e.ranges,null,G):(i.prevInput="",r.value=e.text.join("\n"),B(r))}"cut"==t.type&&(n.state.cutIncoming=+new Date)}}t.wrapper.insertBefore(this.wrapper,t.wrapper.firstChild),g&&(r.style.width="0px"),bt(r,"input",function(){o&&s>=9&&e.hasSelection&&(e.hasSelection=null),i.poll()}),bt(r,"paste",function(t){Ct(n,t)||Gs(t,n)||(n.state.pasteIncoming=+new Date,i.fastPoll())}),bt(r,"cut",a),bt(r,"copy",a),bt(t.scroller,"paste",function(e){if(!Ui(t,e)&&!Ct(n,e)){if(!r.dispatchEvent)return n.state.pasteIncoming=+new Date,void i.focus();var a=new Event("paste");a.clipboardData=e.clipboardData,r.dispatchEvent(a)}}),bt(t.lineSpace,"selectstart",function(e){Ui(t,e)||Tt(e)}),bt(r,"compositionstart",function(){var t=n.getCursor("from");i.composing&&i.composing.range.clear(),i.composing={start:t,range:n.markText(t,n.getCursor("to"),{className:"CodeMirror-composing"})}}),bt(r,"compositionend",function(){i.composing&&(i.poll(),i.composing.range.clear(),i.composing=null)})},cl.prototype.createField=function(t){this.wrapper=Js(),this.textarea=this.wrapper.firstChild;var e=this.cm.options;Zs(this.textarea,e.spellcheck,e.autocorrect,e.autocapitalize)},cl.prototype.screenReaderLabelChanged=function(t){t?this.textarea.setAttribute("aria-label",t):this.textarea.removeAttribute("aria-label")},cl.prototype.prepareSelection=function(){var t=this.cm,e=t.display,i=t.doc,n=Gn(t);if(t.options.moveInputWithCursor){var r=Cn(t,i.sel.primary().head,"div"),a=e.wrapper.getBoundingClientRect(),o=e.lineDiv.getBoundingClientRect();n.teTop=Math.max(0,Math.min(e.wrapper.clientHeight-10,r.top+o.top-a.top)),n.teLeft=Math.max(0,Math.min(e.wrapper.clientWidth-10,r.left+o.left-a.left))}return n},cl.prototype.showSelection=function(t){var e=this.cm,i=e.display;I(i.cursorDiv,t.cursors),I(i.selectionDiv,t.selection),null!=t.teTop&&(this.wrapper.style.top=t.teTop+"px",this.wrapper.style.left=t.teLeft+"px")},cl.prototype.reset=function(t){if(!(this.contextMenuPending||this.composing&&t)){var e=this.cm;if(this.resetting=!0,e.somethingSelected()){this.prevInput="";var i=e.getSelection();this.textarea.value=i,e.state.focused&&B(this.textarea),o&&s>=9&&(this.hasSelection=i)}else t||(this.prevInput=this.textarea.value="",o&&s>=9&&(this.hasSelection=null));this.resetting=!1}},cl.prototype.getField=function(){return this.textarea},cl.prototype.supportsTouch=function(){return!1},cl.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!y||L(z(this.textarea))!=this.textarea))try{this.textarea.focus()}catch(t){}},cl.prototype.blur=function(){this.textarea.blur()},cl.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},cl.prototype.receivedFocus=function(){this.slowPoll()},cl.prototype.slowPoll=function(){var t=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){t.poll(),t.cm.state.focused&&t.slowPoll()})},cl.prototype.fastPoll=function(){var t=!1,e=this;function i(){var n=e.poll();n||t?(e.pollingFast=!1,e.slowPoll()):(t=!0,e.polling.set(60,i))}e.pollingFast=!0,e.polling.set(20,i)},cl.prototype.poll=function(){var t=this,e=this.cm,i=this.textarea,n=this.prevInput;if(this.contextMenuPending||this.resetting||!e.state.focused||zt(i)&&!n&&!this.composing||e.isReadOnly()||e.options.disableInput||e.state.keySeq)return!1;var r=i.value;if(r==n&&!e.somethingSelected())return!1;if(o&&s>=9&&this.hasSelection===r||b&&/[\uf700-\uf7ff]/.test(r))return e.display.input.reset(),!1;if(e.doc.sel==e.display.selForContextMenu){var a=r.charCodeAt(0);if(8203!=a||n||(n="​"),8666==a)return this.reset(),this.cm.execCommand("undo")}var l=0,c=Math.min(n.length,r.length);while(l1e3||r.indexOf("\n")>-1?i.value=t.prevInput="":t.prevInput=r,t.composing&&(t.composing.range.clear(),t.composing.range=e.markText(t.composing.start,e.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},cl.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},cl.prototype.onKeyPress=function(){o&&s>=9&&(this.hasSelection=null),this.fastPoll()},cl.prototype.onContextMenu=function(t){var e=this,i=e.cm,n=i.display,r=e.textarea;e.contextMenuPending&&e.contextMenuPending();var a=zn(i,t),c=n.scroller.scrollTop;if(a&&!h){var u=i.options.resetSelectionOnContextMenu;u&&-1==i.doc.sel.contains(a)&&Br(i,Ya)(i.doc,da(a),G);var d,p=r.style.cssText,f=e.wrapper.style.cssText,v=e.wrapper.offsetParent.getBoundingClientRect();if(e.wrapper.style.cssText="position: static",r.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(t.clientY-v.top-5)+"px; left: "+(t.clientX-v.left-5)+"px;\n z-index: 1000; background: "+(o?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",l&&(d=r.ownerDocument.defaultView.scrollY),n.input.focus(),l&&r.ownerDocument.defaultView.scrollTo(null,d),n.input.reset(),i.somethingSelected()||(r.value=e.prevInput=" "),e.contextMenuPending=y,n.selForContextMenu=i.doc.sel,clearTimeout(n.detectingSelectAll),o&&s>=9&&m(),S){Et(t);var g=function(){_t(window,"mouseup",g),setTimeout(y,20)};bt(window,"mouseup",g)}else setTimeout(y,50)}function m(){if(null!=r.selectionStart){var t=i.somethingSelected(),a="​"+(t?r.value:"");r.value="⇚",r.value=a,e.prevInput=t?"":"​",r.selectionStart=1,r.selectionEnd=a.length,n.selForContextMenu=i.doc.sel}}function y(){if(e.contextMenuPending==y&&(e.contextMenuPending=!1,e.wrapper.style.cssText=f,r.style.cssText=p,o&&s<9&&n.scrollbars.setScrollTop(n.scroller.scrollTop=c),null!=r.selectionStart)){(!o||o&&s<9)&&m();var t=0,a=function(){n.selForContextMenu==i.doc.sel&&0==r.selectionStart&&r.selectionEnd>0&&"​"==e.prevInput?Br(i,Qa)(i):t++<10?n.detectingSelectAll=setTimeout(a,500):(n.selForContextMenu=null,n.input.reset())};n.detectingSelectAll=setTimeout(a,200)}}},cl.prototype.readOnlyChanged=function(t){t||this.reset(),this.textarea.disabled="nocursor"==t,this.textarea.readOnly=!!t},cl.prototype.setUneditable=function(){},cl.prototype.needsContentAttribute=!1,Os(Vs),Qs(Vs);var hl="iter insert remove copy getEditor constructor".split(" ");for(var pl in To.prototype)To.prototype.hasOwnProperty(pl)&&Y(hl,pl)<0&&(Vs.prototype[pl]=function(t){return function(){return t.apply(this.doc,arguments)}}(To.prototype[pl]));return At(To),Vs.inputStyles={textarea:cl,contenteditable:il},Vs.defineMode=function(t){Vs.defaults.mode||"null"==t||(Vs.defaults.mode=t),Yt.apply(this,arguments)},Vs.defineMIME=Xt,Vs.defineMode("null",function(){return{token:function(t){return t.skipToEnd()}}}),Vs.defineMIME("text/plain","null"),Vs.defineExtension=function(t,e){Vs.prototype[t]=e},Vs.defineDocExtension=function(t,e){To.prototype[t]=e},Vs.fromTextArea=ul,dl(Vs),Vs.version="5.65.21",Vs})},74806:function(t,e,i){(function(t){t(i(15237))})(function(t){"use strict";function e(t){return new RegExp("^(("+t.join(")|(")+"))\\b")}var i=e(["and","or","not","is"]),n=["as","assert","break","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","lambda","pass","raise","return","try","while","with","yield","in","False","True"],r=["abs","all","any","bin","bool","bytearray","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip","__import__","NotImplemented","Ellipsis","__debug__"];function a(t){return t.scopes[t.scopes.length-1]}t.registerHelper("hintWords","python",n.concat(r).concat(["exec","print"])),t.defineMode("python",function(o,s){for(var l="error",c=s.delimiters||s.singleDelimiters||/^[\(\)\[\]\{\}@,:`=;\.\\]/,u=[s.singleOperators,s.doubleOperators,s.doubleDelimiters,s.tripleDelimiters,s.operators||/^([-+*/%\/&|^]=?|[<>=]+|\/\/=?|\*\*=?|!=|[~!@]|\.\.\.)/],d=0;dn?S(e):r0&&A(t,e)&&(o+=" "+l),o}return _(t,e)}function _(t,e,n){if(t.eatSpace())return null;if(!n&&t.match(/^#.*/))return"comment";if(t.match(/^[0-9\.]/,!1)){var r=!1;if(t.match(/^[\d_]*\.\d+(e[\+\-]?\d+)?/i)&&(r=!0),t.match(/^[\d_]+\.\d*/)&&(r=!0),t.match(/^\.\d+/)&&(r=!0),r)return t.eat(/J/i),"number";var a=!1;if(t.match(/^0x[0-9a-f_]+/i)&&(a=!0),t.match(/^0b[01_]+/i)&&(a=!0),t.match(/^0o[0-7_]+/i)&&(a=!0),t.match(/^[1-9][\d_]*(e[\+\-]?[\d_]+)?/)&&(t.eat(/J/i),a=!0),t.match(/^0(?![\dx])/i)&&(a=!0),a)return t.eat(/L/i),"number"}if(t.match(m)){var o=-1!==t.current().toLowerCase().indexOf("f");return o?(e.tokenize=w(t.current(),e.tokenize),e.tokenize(t,e)):(e.tokenize=C(t.current(),e.tokenize),e.tokenize(t,e))}for(var s=0;s=0)t=t.substr(1);var i=1==t.length,n="string";function r(t){return function(e,i){var n=_(e,i,!0);return"punctuation"==n&&("{"==e.current()?i.tokenize=r(t+1):"}"==e.current()&&(i.tokenize=t>1?r(t-1):a)),n}}function a(a,o){while(!a.eol())if(a.eatWhile(/[^'"\{\}\\]/),a.eat("\\")){if(a.next(),i&&a.eol())return n}else{if(a.match(t))return o.tokenize=e,n;if(a.match("{{"))return n;if(a.match("{",!1))return o.tokenize=r(0),a.current()?n:o.tokenize(a,o);if(a.match("}}"))return n;if(a.match("}"))return l;a.eat(/['"]/)}if(i){if(s.singleLineStringErrors)return l;o.tokenize=e}return n}return a.isString=!0,a}function C(t,e){while("rubf".indexOf(t.charAt(0).toLowerCase())>=0)t=t.substr(1);var i=1==t.length,n="string";function r(r,a){while(!r.eol())if(r.eatWhile(/[^'"\\]/),r.eat("\\")){if(r.next(),i&&r.eol())return n}else{if(r.match(t))return a.tokenize=e,n;r.eat(/['"]/)}if(i){if(s.singleLineStringErrors)return l;a.tokenize=e}return n}return r.isString=!0,r}function S(t){while("py"!=a(t).type)t.scopes.pop();t.scopes.push({offset:a(t).offset+o.indentUnit,type:"py",align:null})}function k(t,e,i){var n=t.match(/^[\s\[\{\(]*(?:#|$)/,!1)?null:t.column()+1;e.scopes.push({offset:e.indent+h,type:i,align:n})}function A(t,e){var i=t.indentation();while(e.scopes.length>1&&a(e).offset>i){if("py"!=a(e).type)return!0;e.scopes.pop()}return a(e).offset!=i}function T(t,e){t.sol()&&(e.beginningOfLine=!0,e.dedent=!1);var i=e.tokenize(t,e),n=t.current();if(e.beginningOfLine&&"@"==n)return t.match(g,!1)?"meta":v?"operator":l;if(/\S/.test(n)&&(e.beginningOfLine=!1),"variable"!=i&&"builtin"!=i||"meta"!=e.lastToken||(i="meta"),"pass"!=n&&"return"!=n||(e.dedent=!0),"lambda"==n&&(e.lambda=!0),":"==n&&!e.lambda&&"py"==a(e).type&&t.match(/^\s*(?:#|$)/,!1)&&S(e),1==n.length&&!/string|comment/.test(i)){var r="[({".indexOf(n);if(-1!=r&&k(t,e,"])}".slice(r,r+1)),r="])}".indexOf(n),-1!=r){if(a(e).type!=n)return l;e.indent=e.scopes.pop().offset-h}}return e.dedent&&t.eol()&&"py"==a(e).type&&e.scopes.length>1&&e.scopes.pop(),i}var M={startState:function(t){return{tokenize:x,scopes:[{offset:t||0,type:"py",align:null}],indent:t||0,lastToken:null,lambda:!1,dedent:0}},token:function(t,e){var i=e.errorToken;i&&(e.errorToken=!1);var n=T(t,e);return n&&"comment"!=n&&(e.lastToken="keyword"==n||"punctuation"==n?t.current():n),"punctuation"==n&&(n=null),t.eol()&&e.lambda&&(e.lambda=!1),i?n+" "+l:n},indent:function(e,i){if(e.tokenize!=x)return e.tokenize.isString?t.Pass:0;var n=a(e),r=n.type==i.charAt(0)||"py"==n.type&&!e.dedent&&/^(else:|elif |except |finally:)/.test(i);return null!=n.align?n.align-(r?1:0):n.offset-(r?h:0)},electricInput:/^\s*([\}\]\)]|else:|elif |except |finally:)$/,closeBrackets:{triples:"'\""},lineComment:"#",fold:"indent"};return M}),t.defineMIME("text/x-python","python");var o=function(t){return t.split(" ")};t.defineMIME("text/x-cython",{name:"python",extra_keywords:o("by cdef cimport cpdef ctypedef enum except extern gil include nogil property public readonly struct union DEF IF ELIF ELSE")})})},40955:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.BlockCipher,r=e.algo,a=[],o=[],s=[],l=[],c=[],u=[],d=[],h=[],p=[],f=[];(function(){for(var t=[],e=0;e<256;e++)t[e]=e<128?e<<1:e<<1^283;var i=0,n=0;for(e=0;e<256;e++){var r=n^n<<1^n<<2^n<<3^n<<4;r=r>>>8^255&r^99,a[i]=r,o[r]=i;var v=t[i],g=t[v],m=t[g],y=257*t[r]^16843008*r;s[i]=y<<24|y>>>8,l[i]=y<<16|y>>>16,c[i]=y<<8|y>>>24,u[i]=y;y=16843009*m^65537*g^257*v^16843008*i;d[r]=y<<24|y>>>8,h[r]=y<<16|y>>>16,p[r]=y<<8|y>>>24,f[r]=y,i?(i=v^t[t[t[m^v]]],n^=t[t[n]]):i=n=1}})();var v=[0,1,2,4,8,16,32,64,128,27,54],g=r.AES=n.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var t=this._keyPriorReset=this._key,e=t.words,i=t.sigBytes/4,n=this._nRounds=i+6,r=4*(n+1),o=this._keySchedule=[],s=0;s6&&s%i==4&&(u=a[u>>>24]<<24|a[u>>>16&255]<<16|a[u>>>8&255]<<8|a[255&u]):(u=u<<8|u>>>24,u=a[u>>>24]<<24|a[u>>>16&255]<<16|a[u>>>8&255]<<8|a[255&u],u^=v[s/i|0]<<24),o[s]=o[s-i]^u);for(var l=this._invKeySchedule=[],c=0;c>>24]]^h[a[u>>>16&255]]^p[a[u>>>8&255]]^f[a[255&u]]}}},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._keySchedule,s,l,c,u,a)},decryptBlock:function(t,e){var i=t[e+1];t[e+1]=t[e+3],t[e+3]=i,this._doCryptBlock(t,e,this._invKeySchedule,d,h,p,f,o);i=t[e+1];t[e+1]=t[e+3],t[e+3]=i},_doCryptBlock:function(t,e,i,n,r,a,o,s){for(var l=this._nRounds,c=t[e]^i[0],u=t[e+1]^i[1],d=t[e+2]^i[2],h=t[e+3]^i[3],p=4,f=1;f>>24]^r[u>>>16&255]^a[d>>>8&255]^o[255&h]^i[p++],g=n[u>>>24]^r[d>>>16&255]^a[h>>>8&255]^o[255&c]^i[p++],m=n[d>>>24]^r[h>>>16&255]^a[c>>>8&255]^o[255&u]^i[p++],y=n[h>>>24]^r[c>>>16&255]^a[u>>>8&255]^o[255&d]^i[p++];c=v,u=g,d=m,h=y}v=(s[c>>>24]<<24|s[u>>>16&255]<<16|s[d>>>8&255]<<8|s[255&h])^i[p++],g=(s[u>>>24]<<24|s[d>>>16&255]<<16|s[h>>>8&255]<<8|s[255&c])^i[p++],m=(s[d>>>24]<<24|s[h>>>16&255]<<16|s[c>>>8&255]<<8|s[255&u])^i[p++],y=(s[h>>>24]<<24|s[c>>>16&255]<<16|s[u>>>8&255]<<8|s[255&d])^i[p++];t[e]=v,t[e+1]=g,t[e+2]=m,t[e+3]=y},keySize:8});e.AES=n._createHelper(g)}(),t.AES})},43128:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.BlockCipher,r=e.algo;const a=16,o=[608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,3041331479,2450970073,2306472731],s=[[3509652390,2564797868,805139163,3491422135,3101798381,1780907670,3128725573,4046225305,614570311,3012652279,134345442,2240740374,1667834072,1901547113,2757295779,4103290238,227898511,1921955416,1904987480,2182433518,2069144605,3260701109,2620446009,720527379,3318853667,677414384,3393288472,3101374703,2390351024,1614419982,1822297739,2954791486,3608508353,3174124327,2024746970,1432378464,3864339955,2857741204,1464375394,1676153920,1439316330,715854006,3033291828,289532110,2706671279,2087905683,3018724369,1668267050,732546397,1947742710,3462151702,2609353502,2950085171,1814351708,2050118529,680887927,999245976,1800124847,3300911131,1713906067,1641548236,4213287313,1216130144,1575780402,4018429277,3917837745,3693486850,3949271944,596196993,3549867205,258830323,2213823033,772490370,2760122372,1774776394,2652871518,566650946,4142492826,1728879713,2882767088,1783734482,3629395816,2517608232,2874225571,1861159788,326777828,3124490320,2130389656,2716951837,967770486,1724537150,2185432712,2364442137,1164943284,2105845187,998989502,3765401048,2244026483,1075463327,1455516326,1322494562,910128902,469688178,1117454909,936433444,3490320968,3675253459,1240580251,122909385,2157517691,634681816,4142456567,3825094682,3061402683,2540495037,79693498,3249098678,1084186820,1583128258,426386531,1761308591,1047286709,322548459,995290223,1845252383,2603652396,3431023940,2942221577,3202600964,3727903485,1712269319,422464435,3234572375,1170764815,3523960633,3117677531,1434042557,442511882,3600875718,1076654713,1738483198,4213154764,2393238008,3677496056,1014306527,4251020053,793779912,2902807211,842905082,4246964064,1395751752,1040244610,2656851899,3396308128,445077038,3742853595,3577915638,679411651,2892444358,2354009459,1767581616,3150600392,3791627101,3102740896,284835224,4246832056,1258075500,768725851,2589189241,3069724005,3532540348,1274779536,3789419226,2764799539,1660621633,3471099624,4011903706,913787905,3497959166,737222580,2514213453,2928710040,3937242737,1804850592,3499020752,2949064160,2386320175,2390070455,2415321851,4061277028,2290661394,2416832540,1336762016,1754252060,3520065937,3014181293,791618072,3188594551,3933548030,2332172193,3852520463,3043980520,413987798,3465142937,3030929376,4245938359,2093235073,3534596313,375366246,2157278981,2479649556,555357303,3870105701,2008414854,3344188149,4221384143,3956125452,2067696032,3594591187,2921233993,2428461,544322398,577241275,1471733935,610547355,4027169054,1432588573,1507829418,2025931657,3646575487,545086370,48609733,2200306550,1653985193,298326376,1316178497,3007786442,2064951626,458293330,2589141269,3591329599,3164325604,727753846,2179363840,146436021,1461446943,4069977195,705550613,3059967265,3887724982,4281599278,3313849956,1404054877,2845806497,146425753,1854211946],[1266315497,3048417604,3681880366,3289982499,290971e4,1235738493,2632868024,2414719590,3970600049,1771706367,1449415276,3266420449,422970021,1963543593,2690192192,3826793022,1062508698,1531092325,1804592342,2583117782,2714934279,4024971509,1294809318,4028980673,1289560198,2221992742,1669523910,35572830,157838143,1052438473,1016535060,1802137761,1753167236,1386275462,3080475397,2857371447,1040679964,2145300060,2390574316,1461121720,2956646967,4031777805,4028374788,33600511,2920084762,1018524850,629373528,3691585981,3515945977,2091462646,2486323059,586499841,988145025,935516892,3367335476,2599673255,2839830854,265290510,3972581182,2759138881,3795373465,1005194799,847297441,406762289,1314163512,1332590856,1866599683,4127851711,750260880,613907577,1450815602,3165620655,3734664991,3650291728,3012275730,3704569646,1427272223,778793252,1343938022,2676280711,2052605720,1946737175,3164576444,3914038668,3967478842,3682934266,1661551462,3294938066,4011595847,840292616,3712170807,616741398,312560963,711312465,1351876610,322626781,1910503582,271666773,2175563734,1594956187,70604529,3617834859,1007753275,1495573769,4069517037,2549218298,2663038764,504708206,2263041392,3941167025,2249088522,1514023603,1998579484,1312622330,694541497,2582060303,2151582166,1382467621,776784248,2618340202,3323268794,2497899128,2784771155,503983604,4076293799,907881277,423175695,432175456,1378068232,4145222326,3954048622,3938656102,3820766613,2793130115,2977904593,26017576,3274890735,3194772133,1700274565,1756076034,4006520079,3677328699,720338349,1533947780,354530856,688349552,3973924725,1637815568,332179504,3949051286,53804574,2852348879,3044236432,1282449977,3583942155,3416972820,4006381244,1617046695,2628476075,3002303598,1686838959,431878346,2686675385,1700445008,1080580658,1009431731,832498133,3223435511,2605976345,2271191193,2516031870,1648197032,4164389018,2548247927,300782431,375919233,238389289,3353747414,2531188641,2019080857,1475708069,455242339,2609103871,448939670,3451063019,1395535956,2413381860,1841049896,1491858159,885456874,4264095073,4001119347,1565136089,3898914787,1108368660,540939232,1173283510,2745871338,3681308437,4207628240,3343053890,4016749493,1699691293,1103962373,3625875870,2256883143,3830138730,1031889488,3479347698,1535977030,4236805024,3251091107,2132092099,1774941330,1199868427,1452454533,157007616,2904115357,342012276,595725824,1480756522,206960106,497939518,591360097,863170706,2375253569,3596610801,1814182875,2094937945,3421402208,1082520231,3463918190,2785509508,435703966,3908032597,1641649973,2842273706,3305899714,1510255612,2148256476,2655287854,3276092548,4258621189,236887753,3681803219,274041037,1734335097,3815195456,3317970021,1899903192,1026095262,4050517792,356393447,2410691914,3873677099,3682840055],[3913112168,2491498743,4132185628,2489919796,1091903735,1979897079,3170134830,3567386728,3557303409,857797738,1136121015,1342202287,507115054,2535736646,337727348,3213592640,1301675037,2528481711,1895095763,1721773893,3216771564,62756741,2142006736,835421444,2531993523,1442658625,3659876326,2882144922,676362277,1392781812,170690266,3921047035,1759253602,3611846912,1745797284,664899054,1329594018,3901205900,3045908486,2062866102,2865634940,3543621612,3464012697,1080764994,553557557,3656615353,3996768171,991055499,499776247,1265440854,648242737,3940784050,980351604,3713745714,1749149687,3396870395,4211799374,3640570775,1161844396,3125318951,1431517754,545492359,4268468663,3499529547,1437099964,2702547544,3433638243,2581715763,2787789398,1060185593,1593081372,2418618748,4260947970,69676912,2159744348,86519011,2512459080,3838209314,1220612927,3339683548,133810670,1090789135,1078426020,1569222167,845107691,3583754449,4072456591,1091646820,628848692,1613405280,3757631651,526609435,236106946,48312990,2942717905,3402727701,1797494240,859738849,992217954,4005476642,2243076622,3870952857,3732016268,765654824,3490871365,2511836413,1685915746,3888969200,1414112111,2273134842,3281911079,4080962846,172450625,2569994100,980381355,4109958455,2819808352,2716589560,2568741196,3681446669,3329971472,1835478071,660984891,3704678404,4045999559,3422617507,3040415634,1762651403,1719377915,3470491036,2693910283,3642056355,3138596744,1364962596,2073328063,1983633131,926494387,3423689081,2150032023,4096667949,1749200295,3328846651,309677260,2016342300,1779581495,3079819751,111262694,1274766160,443224088,298511866,1025883608,3806446537,1145181785,168956806,3641502830,3584813610,1689216846,3666258015,3200248200,1692713982,2646376535,4042768518,1618508792,1610833997,3523052358,4130873264,2001055236,3610705100,2202168115,4028541809,2961195399,1006657119,2006996926,3186142756,1430667929,3210227297,1314452623,4074634658,4101304120,2273951170,1399257539,3367210612,3027628629,1190975929,2062231137,2333990788,2221543033,2438960610,1181637006,548689776,2362791313,3372408396,3104550113,3145860560,296247880,1970579870,3078560182,3769228297,1714227617,3291629107,3898220290,166772364,1251581989,493813264,448347421,195405023,2709975567,677966185,3703036547,1463355134,2715995803,1338867538,1343315457,2802222074,2684532164,233230375,2599980071,2000651841,3277868038,1638401717,4028070440,3237316320,6314154,819756386,300326615,590932579,1405279636,3267499572,3150704214,2428286686,3959192993,3461946742,1862657033,1266418056,963775037,2089974820,2263052895,1917689273,448879540,3550394620,3981727096,150775221,3627908307,1303187396,508620638,2975983352,2726630617,1817252668,1876281319,1457606340,908771278,3720792119,3617206836,2455994898,1729034894,1080033504],[976866871,3556439503,2881648439,1522871579,1555064734,1336096578,3548522304,2579274686,3574697629,3205460757,3593280638,3338716283,3079412587,564236357,2993598910,1781952180,1464380207,3163844217,3332601554,1699332808,1393555694,1183702653,3581086237,1288719814,691649499,2847557200,2895455976,3193889540,2717570544,1781354906,1676643554,2592534050,3230253752,1126444790,2770207658,2633158820,2210423226,2615765581,2414155088,3127139286,673620729,2805611233,1269405062,4015350505,3341807571,4149409754,1057255273,2012875353,2162469141,2276492801,2601117357,993977747,3918593370,2654263191,753973209,36408145,2530585658,25011837,3520020182,2088578344,530523599,2918365339,1524020338,1518925132,3760827505,3759777254,1202760957,3985898139,3906192525,674977740,4174734889,2031300136,2019492241,3983892565,4153806404,3822280332,352677332,2297720250,60907813,90501309,3286998549,1016092578,2535922412,2839152426,457141659,509813237,4120667899,652014361,1966332200,2975202805,55981186,2327461051,676427537,3255491064,2882294119,3433927263,1307055953,942726286,933058658,2468411793,3933900994,4215176142,1361170020,2001714738,2830558078,3274259782,1222529897,1679025792,2729314320,3714953764,1770335741,151462246,3013232138,1682292957,1483529935,471910574,1539241949,458788160,3436315007,1807016891,3718408830,978976581,1043663428,3165965781,1927990952,4200891579,2372276910,3208408903,3533431907,1412390302,2931980059,4132332400,1947078029,3881505623,4168226417,2941484381,1077988104,1320477388,886195818,18198404,3786409e3,2509781533,112762804,3463356488,1866414978,891333506,18488651,661792760,1628790961,3885187036,3141171499,876946877,2693282273,1372485963,791857591,2686433993,3759982718,3167212022,3472953795,2716379847,445679433,3561995674,3504004811,3574258232,54117162,3331405415,2381918588,3769707343,4154350007,1140177722,4074052095,668550556,3214352940,367459370,261225585,2610173221,4209349473,3468074219,3265815641,314222801,3066103646,3808782860,282218597,3406013506,3773591054,379116347,1285071038,846784868,2669647154,3771962079,3550491691,2305946142,453669953,1268987020,3317592352,3279303384,3744833421,2610507566,3859509063,266596637,3847019092,517658769,3462560207,3443424879,370717030,4247526661,2224018117,4143653529,4112773975,2788324899,2477274417,1456262402,2901442914,1517677493,1846949527,2295493580,3734397586,2176403920,1280348187,1908823572,3871786941,846861322,1172426758,3287448474,3383383037,1655181056,3139813346,901632758,1897031941,2986607138,3066810236,3447102507,1393639104,373351379,950779232,625454576,3124240540,4148612726,2007998917,544563296,2244738638,2330496472,2058025392,1291430526,424198748,50039436,29584100,3605783033,2429876329,2791104160,1057563949,3255363231,3075367218,3463963227,1469046755,985887462]];var l={pbox:[],sbox:[]};function c(t,e){let i=e>>24&255,n=e>>16&255,r=e>>8&255,a=255&e,o=t.sbox[0][i]+t.sbox[1][n];return o^=t.sbox[2][r],o+=t.sbox[3][a],o}function u(t,e,i){let n,r=e,o=i;for(let s=0;s1;--s)r^=t.pbox[s],o=c(t,r)^o,n=r,r=o,o=n;return n=r,r=o,o=n,o^=t.pbox[1],r^=t.pbox[0],{left:r,right:o}}function h(t,e,i){for(let a=0;a<4;a++){t.sbox[a]=[];for(let e=0;e<256;e++)t.sbox[a][e]=s[a][e]}let n=0;for(let s=0;s=i&&(n=0);let r=0,l=0,c=0;for(let o=0;o>>2];t.sigBytes-=e}},m=(n.BlockCipher=d.extend({cfg:d.cfg.extend({mode:f,padding:g}),reset:function(){var t;d.reset.call(this);var e=this.cfg,i=e.iv,n=e.mode;this._xformMode==this._ENC_XFORM_MODE?t=n.createEncryptor:(t=n.createDecryptor,this._minBufferSize=1),this._mode&&this._mode.__creator==t?this._mode.init(this,i&&i.words):(this._mode=t.call(n,this,i&&i.words),this._mode.__creator=t)},_doProcessBlock:function(t,e){this._mode.processBlock(t,e)},_doFinalize:function(){var t,e=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(e.pad(this._data,this.blockSize),t=this._process(!0)):(t=this._process(!0),e.unpad(t)),t},blockSize:4}),n.CipherParams=r.extend({init:function(t){this.mixIn(t)},toString:function(t){return(t||this.formatter).stringify(this)}})),y=i.format={},b=y.OpenSSL={stringify:function(t){var e,i=t.ciphertext,n=t.salt;return e=n?a.create([1398893684,1701076831]).concat(n).concat(i):i,e.toString(l)},parse:function(t){var e,i=l.parse(t),n=i.words;return 1398893684==n[0]&&1701076831==n[1]&&(e=a.create(n.slice(2,4)),n.splice(0,4),i.sigBytes-=16),m.create({ciphertext:i,salt:e})}},x=n.SerializableCipher=r.extend({cfg:r.extend({format:b}),encrypt:function(t,e,i,n){n=this.cfg.extend(n);var r=t.createEncryptor(i,n),a=r.finalize(e),o=r.cfg;return m.create({ciphertext:a,key:i,iv:o.iv,algorithm:t,mode:o.mode,padding:o.padding,blockSize:t.blockSize,formatter:n.format})},decrypt:function(t,e,i,n){n=this.cfg.extend(n),e=this._parse(e,n.format);var r=t.createDecryptor(i,n).finalize(e.ciphertext);return r},_parse:function(t,e){return"string"==typeof t?e.parse(t,this):t}}),_=i.kdf={},w=_.OpenSSL={execute:function(t,e,i,n,r){if(n||(n=a.random(8)),r)o=u.create({keySize:e+i,hasher:r}).compute(t,n);else var o=u.create({keySize:e+i}).compute(t,n);var s=a.create(o.words.slice(e),4*i);return o.sigBytes=4*e,m.create({key:o,iv:s,salt:n})}},C=n.PasswordBasedCipher=x.extend({cfg:x.cfg.extend({kdf:w}),encrypt:function(t,e,i,n){n=this.cfg.extend(n);var r=n.kdf.execute(i,t.keySize,t.ivSize,n.salt,n.hasher);n.iv=r.iv;var a=x.encrypt.call(this,t,e,r.key,n);return a.mixIn(r),a},decrypt:function(t,e,i,n){n=this.cfg.extend(n),e=this._parse(e,n.format);var r=n.kdf.execute(i,t.keySize,t.ivSize,e.salt,n.hasher);n.iv=r.iv;var a=x.decrypt.call(this,t,e,r.key,n);return a}})}()})},19021:function(t,e,i){(function(e,i){t.exports=i()})(0,function(){var t=t||function(t,e){var n;if("undefined"!==typeof window&&window.crypto&&(n=window.crypto),"undefined"!==typeof self&&self.crypto&&(n=self.crypto),"undefined"!==typeof globalThis&&globalThis.crypto&&(n=globalThis.crypto),!n&&"undefined"!==typeof window&&window.msCrypto&&(n=window.msCrypto),!n&&"undefined"!==typeof i.g&&i.g.crypto&&(n=i.g.crypto),!n)try{n=i(50477)}catch(g){}var r=function(){if(n){if("function"===typeof n.getRandomValues)try{return n.getRandomValues(new Uint32Array(1))[0]}catch(g){}if("function"===typeof n.randomBytes)try{return n.randomBytes(4).readInt32LE()}catch(g){}}throw new Error("Native crypto module could not be used to get secure random number.")},a=Object.create||function(){function t(){}return function(e){var i;return t.prototype=e,i=new t,t.prototype=null,i}}(),o={},s=o.lib={},l=s.Base=function(){return{extend:function(t){var e=a(this);return t&&e.mixIn(t),e.hasOwnProperty("init")&&this.init!==e.init||(e.init=function(){e.$super.init.apply(this,arguments)}),e.init.prototype=e,e.$super=this,e},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),c=s.WordArray=l.extend({init:function(t,i){t=this.words=t||[],this.sigBytes=i!=e?i:4*t.length},toString:function(t){return(t||d).stringify(this)},concat:function(t){var e=this.words,i=t.words,n=this.sigBytes,r=t.sigBytes;if(this.clamp(),n%4)for(var a=0;a>>2]>>>24-a%4*8&255;e[n+a>>>2]|=o<<24-(n+a)%4*8}else for(var s=0;s>>2]=i[s>>>2];return this.sigBytes+=r,this},clamp:function(){var e=this.words,i=this.sigBytes;e[i>>>2]&=4294967295<<32-i%4*8,e.length=t.ceil(i/4)},clone:function(){var t=l.clone.call(this);return t.words=this.words.slice(0),t},random:function(t){for(var e=[],i=0;i>>2]>>>24-r%4*8&255;n.push((a>>>4).toString(16)),n.push((15&a).toString(16))}return n.join("")},parse:function(t){for(var e=t.length,i=[],n=0;n>>3]|=parseInt(t.substr(n,2),16)<<24-n%8*4;return new c.init(i,e/2)}},h=u.Latin1={stringify:function(t){for(var e=t.words,i=t.sigBytes,n=[],r=0;r>>2]>>>24-r%4*8&255;n.push(String.fromCharCode(a))}return n.join("")},parse:function(t){for(var e=t.length,i=[],n=0;n>>2]|=(255&t.charCodeAt(n))<<24-n%4*8;return new c.init(i,e)}},p=u.Utf8={stringify:function(t){try{return decodeURIComponent(escape(h.stringify(t)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(t){return h.parse(unescape(encodeURIComponent(t)))}},f=s.BufferedBlockAlgorithm=l.extend({reset:function(){this._data=new c.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=p.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(e){var i,n=this._data,r=n.words,a=n.sigBytes,o=this.blockSize,s=4*o,l=a/s;l=e?t.ceil(l):t.max((0|l)-this._minBufferSize,0);var u=l*o,d=t.min(4*u,a);if(u){for(var h=0;h>>2]>>>24-a%4*8&255,s=e[a+1>>>2]>>>24-(a+1)%4*8&255,l=e[a+2>>>2]>>>24-(a+2)%4*8&255,c=o<<16|s<<8|l,u=0;u<4&&a+.75*u>>6*(3-u)&63));var d=n.charAt(64);if(d)while(r.length%4)r.push(d);return r.join("")},parse:function(t){var e=t.length,i=this._map,n=this._reverseMap;if(!n){n=this._reverseMap=[];for(var r=0;r>>6-o%4*2,c=s|l;r[a>>>2]|=c<<24-a%4*8,a++}return n.create(r,a)}}(),t.enc.Base64})},64725:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=e.enc;r.Base64url={stringify:function(t,e){void 0===e&&(e=!0);var i=t.words,n=t.sigBytes,r=e?this._safe_map:this._map;t.clamp();for(var a=[],o=0;o>>2]>>>24-o%4*8&255,l=i[o+1>>>2]>>>24-(o+1)%4*8&255,c=i[o+2>>>2]>>>24-(o+2)%4*8&255,u=s<<16|l<<8|c,d=0;d<4&&o+.75*d>>6*(3-d)&63));var h=r.charAt(64);if(h)while(a.length%4)a.push(h);return a.join("")},parse:function(t,e){void 0===e&&(e=!0);var i=t.length,n=e?this._safe_map:this._map,r=this._reverseMap;if(!r){r=this._reverseMap=[];for(var o=0;o>>6-o%4*2,c=s|l;r[a>>>2]|=c<<24-a%4*8,a++}return n.create(r,a)}}(),t.enc.Base64url})},45503:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=e.enc;r.Utf16=r.Utf16BE={stringify:function(t){for(var e=t.words,i=t.sigBytes,n=[],r=0;r>>2]>>>16-r%4*8&65535;n.push(String.fromCharCode(a))}return n.join("")},parse:function(t){for(var e=t.length,i=[],r=0;r>>1]|=t.charCodeAt(r)<<16-r%2*16;return n.create(i,2*e)}};function a(t){return t<<8&4278255360|t>>>8&16711935}r.Utf16LE={stringify:function(t){for(var e=t.words,i=t.sigBytes,n=[],r=0;r>>2]>>>16-r%4*8&65535);n.push(String.fromCharCode(o))}return n.join("")},parse:function(t){for(var e=t.length,i=[],r=0;r>>1]|=a(t.charCodeAt(r)<<16-r%2*16);return n.create(i,2*e)}}}(),t.enc.Utf16})},39506:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(45471),i(51025))})(0,function(t){return function(){var e=t,i=e.lib,n=i.Base,r=i.WordArray,a=e.algo,o=a.MD5,s=a.EvpKDF=n.extend({cfg:n.extend({keySize:4,hasher:o,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){var i,n=this.cfg,a=n.hasher.create(),o=r.create(),s=o.words,l=n.keySize,c=n.iterations;while(s.lengthn&&(e=t.finalize(e)),e.clamp();for(var r=this._oKey=e.clone(),o=this._iKey=e.clone(),s=r.words,l=o.words,c=0;c>>2]|=t[n]<<24-n%4*8;r.call(this,i,e)}else r.apply(this,arguments)};a.prototype=n}}(),t.lib.WordArray})},84636:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(e){var i=t,n=i.lib,r=n.WordArray,a=n.Hasher,o=i.algo,s=[];(function(){for(var t=0;t<64;t++)s[t]=4294967296*e.abs(e.sin(t+1))|0})();var l=o.MD5=a.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(t,e){for(var i=0;i<16;i++){var n=e+i,r=t[n];t[n]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8)}var a=this._hash.words,o=t[e+0],l=t[e+1],p=t[e+2],f=t[e+3],v=t[e+4],g=t[e+5],m=t[e+6],y=t[e+7],b=t[e+8],x=t[e+9],_=t[e+10],w=t[e+11],C=t[e+12],S=t[e+13],k=t[e+14],A=t[e+15],T=a[0],M=a[1],I=a[2],E=a[3];T=c(T,M,I,E,o,7,s[0]),E=c(E,T,M,I,l,12,s[1]),I=c(I,E,T,M,p,17,s[2]),M=c(M,I,E,T,f,22,s[3]),T=c(T,M,I,E,v,7,s[4]),E=c(E,T,M,I,g,12,s[5]),I=c(I,E,T,M,m,17,s[6]),M=c(M,I,E,T,y,22,s[7]),T=c(T,M,I,E,b,7,s[8]),E=c(E,T,M,I,x,12,s[9]),I=c(I,E,T,M,_,17,s[10]),M=c(M,I,E,T,w,22,s[11]),T=c(T,M,I,E,C,7,s[12]),E=c(E,T,M,I,S,12,s[13]),I=c(I,E,T,M,k,17,s[14]),M=c(M,I,E,T,A,22,s[15]),T=u(T,M,I,E,l,5,s[16]),E=u(E,T,M,I,m,9,s[17]),I=u(I,E,T,M,w,14,s[18]),M=u(M,I,E,T,o,20,s[19]),T=u(T,M,I,E,g,5,s[20]),E=u(E,T,M,I,_,9,s[21]),I=u(I,E,T,M,A,14,s[22]),M=u(M,I,E,T,v,20,s[23]),T=u(T,M,I,E,x,5,s[24]),E=u(E,T,M,I,k,9,s[25]),I=u(I,E,T,M,f,14,s[26]),M=u(M,I,E,T,b,20,s[27]),T=u(T,M,I,E,S,5,s[28]),E=u(E,T,M,I,p,9,s[29]),I=u(I,E,T,M,y,14,s[30]),M=u(M,I,E,T,C,20,s[31]),T=d(T,M,I,E,g,4,s[32]),E=d(E,T,M,I,b,11,s[33]),I=d(I,E,T,M,w,16,s[34]),M=d(M,I,E,T,k,23,s[35]),T=d(T,M,I,E,l,4,s[36]),E=d(E,T,M,I,v,11,s[37]),I=d(I,E,T,M,y,16,s[38]),M=d(M,I,E,T,_,23,s[39]),T=d(T,M,I,E,S,4,s[40]),E=d(E,T,M,I,o,11,s[41]),I=d(I,E,T,M,f,16,s[42]),M=d(M,I,E,T,m,23,s[43]),T=d(T,M,I,E,x,4,s[44]),E=d(E,T,M,I,C,11,s[45]),I=d(I,E,T,M,A,16,s[46]),M=d(M,I,E,T,p,23,s[47]),T=h(T,M,I,E,o,6,s[48]),E=h(E,T,M,I,y,10,s[49]),I=h(I,E,T,M,k,15,s[50]),M=h(M,I,E,T,g,21,s[51]),T=h(T,M,I,E,C,6,s[52]),E=h(E,T,M,I,f,10,s[53]),I=h(I,E,T,M,_,15,s[54]),M=h(M,I,E,T,l,21,s[55]),T=h(T,M,I,E,b,6,s[56]),E=h(E,T,M,I,A,10,s[57]),I=h(I,E,T,M,m,15,s[58]),M=h(M,I,E,T,S,21,s[59]),T=h(T,M,I,E,v,6,s[60]),E=h(E,T,M,I,w,10,s[61]),I=h(I,E,T,M,p,15,s[62]),M=h(M,I,E,T,x,21,s[63]),a[0]=a[0]+T|0,a[1]=a[1]+M|0,a[2]=a[2]+I|0,a[3]=a[3]+E|0},_doFinalize:function(){var t=this._data,i=t.words,n=8*this._nDataBytes,r=8*t.sigBytes;i[r>>>5]|=128<<24-r%32;var a=e.floor(n/4294967296),o=n;i[15+(r+64>>>9<<4)]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),i[14+(r+64>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),t.sigBytes=4*(i.length+1),this._process();for(var s=this._hash,l=s.words,c=0;c<4;c++){var u=l[c];l[c]=16711935&(u<<8|u>>>24)|4278255360&(u<<24|u>>>8)}return s},clone:function(){var t=a.clone.call(this);return t._hash=this._hash.clone(),t}});function c(t,e,i,n,r,a,o){var s=t+(e&i|~e&n)+r+o;return(s<>>32-a)+e}function u(t,e,i,n,r,a,o){var s=t+(e&n|i&~n)+r+o;return(s<>>32-a)+e}function d(t,e,i,n,r,a,o){var s=t+(e^i^n)+r+o;return(s<>>32-a)+e}function h(t,e,i,n,r,a,o){var s=t+(i^(e|~n))+r+o;return(s<>>32-a)+e}i.MD5=a._createHelper(l),i.HmacMD5=a._createHmacHelper(l)}(Math),t.MD5})},82169:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.mode.CFB=function(){var e=t.lib.BlockCipherMode.extend();function i(t,e,i,n){var r,a=this._iv;a?(r=a.slice(0),this._iv=void 0):r=this._prevBlock,n.encryptBlock(r,0);for(var o=0;o>24&255)){var e=t>>16&255,i=t>>8&255,n=255&t;255===e?(e=0,255===i?(i=0,255===n?n=0:++n):++i):++e,t=0,t+=e<<16,t+=i<<8,t+=n}else t+=1<<24;return t}function n(t){return 0===(t[0]=i(t[0]))&&(t[1]=i(t[1])),t}var r=e.Encryptor=e.extend({processBlock:function(t,e){var i=this._cipher,r=i.blockSize,a=this._iv,o=this._counter;a&&(o=this._counter=a.slice(0),this._iv=void 0),n(o);var s=o.slice(0);i.encryptBlock(s,0);for(var l=0;l>>2]|=r<<24-a%4*8,t.sigBytes+=r},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},t.pad.Ansix923})},54905:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.pad.Iso10126={pad:function(e,i){var n=4*i,r=n-e.sigBytes%n;e.concat(t.lib.WordArray.random(r-1)).concat(t.lib.WordArray.create([r<<24],1))},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},t.pad.Iso10126})},10482:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.pad.Iso97971={pad:function(e,i){e.concat(t.lib.WordArray.create([2147483648],1)),t.pad.ZeroPadding.pad(e,i)},unpad:function(e){t.pad.ZeroPadding.unpad(e),e.sigBytes--}},t.pad.Iso97971})},58124:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.pad.NoPadding={pad:function(){},unpad:function(){}},t.pad.NoPadding})},52155:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.pad.ZeroPadding={pad:function(t,e){var i=4*e;t.clamp(),t.sigBytes+=i-(t.sigBytes%i||i)},unpad:function(t){var e=t.words,i=t.sigBytes-1;for(i=t.sigBytes-1;i>=0;i--)if(e[i>>>2]>>>24-i%4*8&255){t.sigBytes=i+1;break}}},t.pad.ZeroPadding})},70019:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(63009),i(51025))})(0,function(t){return function(){var e=t,i=e.lib,n=i.Base,r=i.WordArray,a=e.algo,o=a.SHA256,s=a.HMAC,l=a.PBKDF2=n.extend({cfg:n.extend({keySize:4,hasher:o,iterations:25e4}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){var i=this.cfg,n=s.create(i.hasher,t),a=r.create(),o=r.create([1]),l=a.words,c=o.words,u=i.keySize,d=i.iterations;while(l.length>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],n=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];this._b=0;for(var r=0;r<4;r++)c.call(this);for(r=0;r<8;r++)n[r]^=i[r+4&7];if(e){var a=e.words,o=a[0],s=a[1],l=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),u=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),d=l>>>16|4294901760&u,h=u<<16|65535&l;n[0]^=l,n[1]^=d,n[2]^=u,n[3]^=h,n[4]^=l,n[5]^=d,n[6]^=u,n[7]^=h;for(r=0;r<4;r++)c.call(this)}},_doProcessBlock:function(t,e){var i=this._X;c.call(this),a[0]=i[0]^i[5]>>>16^i[3]<<16,a[1]=i[2]^i[7]>>>16^i[5]<<16,a[2]=i[4]^i[1]>>>16^i[7]<<16,a[3]=i[6]^i[3]>>>16^i[1]<<16;for(var n=0;n<4;n++)a[n]=16711935&(a[n]<<8|a[n]>>>24)|4278255360&(a[n]<<24|a[n]>>>8),t[e+n]^=a[n]},blockSize:4,ivSize:2});function c(){for(var t=this._X,e=this._C,i=0;i<8;i++)o[i]=e[i];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(i=0;i<8;i++){var n=t[i]+e[i],r=65535&n,a=n>>>16,l=((r*r>>>17)+r*a>>>15)+a*a,c=((4294901760&n)*n|0)+((65535&n)*n|0);s[i]=l^c}t[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,t[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,t[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,t[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,t[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,t[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,t[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,t[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}e.RabbitLegacy=n._createHelper(l)}(),t.RabbitLegacy})},96298:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.StreamCipher,r=e.algo,a=[],o=[],s=[],l=r.Rabbit=n.extend({_doReset:function(){for(var t=this._key.words,e=this.cfg.iv,i=0;i<4;i++)t[i]=16711935&(t[i]<<8|t[i]>>>24)|4278255360&(t[i]<<24|t[i]>>>8);var n=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],r=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];this._b=0;for(i=0;i<4;i++)c.call(this);for(i=0;i<8;i++)r[i]^=n[i+4&7];if(e){var a=e.words,o=a[0],s=a[1],l=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),u=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),d=l>>>16|4294901760&u,h=u<<16|65535&l;r[0]^=l,r[1]^=d,r[2]^=u,r[3]^=h,r[4]^=l,r[5]^=d,r[6]^=u,r[7]^=h;for(i=0;i<4;i++)c.call(this)}},_doProcessBlock:function(t,e){var i=this._X;c.call(this),a[0]=i[0]^i[5]>>>16^i[3]<<16,a[1]=i[2]^i[7]>>>16^i[5]<<16,a[2]=i[4]^i[1]>>>16^i[7]<<16,a[3]=i[6]^i[3]>>>16^i[1]<<16;for(var n=0;n<4;n++)a[n]=16711935&(a[n]<<8|a[n]>>>24)|4278255360&(a[n]<<24|a[n]>>>8),t[e+n]^=a[n]},blockSize:4,ivSize:2});function c(){for(var t=this._X,e=this._C,i=0;i<8;i++)o[i]=e[i];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(i=0;i<8;i++){var n=t[i]+e[i],r=65535&n,a=n>>>16,l=((r*r>>>17)+r*a>>>15)+a*a,c=((4294901760&n)*n|0)+((65535&n)*n|0);s[i]=l^c}t[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,t[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,t[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,t[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,t[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,t[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,t[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,t[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}e.Rabbit=n._createHelper(l)}(),t.Rabbit})},77193:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.StreamCipher,r=e.algo,a=r.RC4=n.extend({_doReset:function(){for(var t=this._key,e=t.words,i=t.sigBytes,n=this._S=[],r=0;r<256;r++)n[r]=r;r=0;for(var a=0;r<256;r++){var o=r%i,s=e[o>>>2]>>>24-o%4*8&255;a=(a+n[r]+s)%256;var l=n[r];n[r]=n[a],n[a]=l}this._i=this._j=0},_doProcessBlock:function(t,e){t[e]^=o.call(this)},keySize:8,ivSize:0});function o(){for(var t=this._S,e=this._i,i=this._j,n=0,r=0;r<4;r++){e=(e+1)%256,i=(i+t[e])%256;var a=t[e];t[e]=t[i],t[i]=a,n|=t[(t[e]+t[i])%256]<<24-8*r}return this._i=e,this._j=i,n}e.RC4=n._createHelper(a);var s=r.RC4Drop=a.extend({cfg:a.cfg.extend({drop:192}),_doReset:function(){a._doReset.call(this);for(var t=this.cfg.drop;t>0;t--)o.call(this)}});e.RC4Drop=n._createHelper(s)}(),t.RC4})},78056:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){ +/** @preserve + (c) 2012 by Cédric Mesnil. All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +return function(){var e=t,i=e.lib,n=i.WordArray,r=i.Hasher,a=e.algo,o=n.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),s=n.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),l=n.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),c=n.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),u=n.create([0,1518500249,1859775393,2400959708,2840853838]),d=n.create([1352829926,1548603684,1836072691,2053994217,0]),h=a.RIPEMD160=r.extend({_doReset:function(){this._hash=n.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var i=0;i<16;i++){var n=e+i,r=t[n];t[n]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8)}var a,h,b,x,_,w,C,S,k,A,T,M=this._hash.words,I=u.words,E=d.words,D=o.words,P=s.words,L=l.words,R=c.words;w=a=M[0],C=h=M[1],S=b=M[2],k=x=M[3],A=_=M[4];for(i=0;i<80;i+=1)T=a+t[e+D[i]]|0,T+=i<16?p(h,b,x)+I[0]:i<32?f(h,b,x)+I[1]:i<48?v(h,b,x)+I[2]:i<64?g(h,b,x)+I[3]:m(h,b,x)+I[4],T|=0,T=y(T,L[i]),T=T+_|0,a=_,_=x,x=y(b,10),b=h,h=T,T=w+t[e+P[i]]|0,T+=i<16?m(C,S,k)+E[0]:i<32?g(C,S,k)+E[1]:i<48?v(C,S,k)+E[2]:i<64?f(C,S,k)+E[3]:p(C,S,k)+E[4],T|=0,T=y(T,R[i]),T=T+A|0,w=A,A=k,k=y(S,10),S=C,C=T;T=M[1]+b+k|0,M[1]=M[2]+x+A|0,M[2]=M[3]+_+w|0,M[3]=M[4]+a+C|0,M[4]=M[0]+h+S|0,M[0]=T},_doFinalize:function(){var t=this._data,e=t.words,i=8*this._nDataBytes,n=8*t.sigBytes;e[n>>>5]|=128<<24-n%32,e[14+(n+64>>>9<<4)]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),t.sigBytes=4*(e.length+1),this._process();for(var r=this._hash,a=r.words,o=0;o<5;o++){var s=a[o];a[o]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8)}return r},clone:function(){var t=r.clone.call(this);return t._hash=this._hash.clone(),t}});function p(t,e,i){return t^e^i}function f(t,e,i){return t&e|~t&i}function v(t,e,i){return(t|~e)^i}function g(t,e,i){return t&i|e&~i}function m(t,e,i){return t^(e|~i)}function y(t,e){return t<>>32-e}e.RIPEMD160=r._createHelper(h),e.HmacRIPEMD160=r._createHmacHelper(h)}(Math),t.RIPEMD160})},45471:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=i.Hasher,a=e.algo,o=[],s=a.SHA1=r.extend({_doReset:function(){this._hash=new n.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var i=this._hash.words,n=i[0],r=i[1],a=i[2],s=i[3],l=i[4],c=0;c<80;c++){if(c<16)o[c]=0|t[e+c];else{var u=o[c-3]^o[c-8]^o[c-14]^o[c-16];o[c]=u<<1|u>>>31}var d=(n<<5|n>>>27)+l+o[c];d+=c<20?1518500249+(r&a|~r&s):c<40?1859775393+(r^a^s):c<60?(r&a|r&s|a&s)-1894007588:(r^a^s)-899497514,l=s,s=a,a=r<<30|r>>>2,r=n,n=d}i[0]=i[0]+n|0,i[1]=i[1]+r|0,i[2]=i[2]+a|0,i[3]=i[3]+s|0,i[4]=i[4]+l|0},_doFinalize:function(){var t=this._data,e=t.words,i=8*this._nDataBytes,n=8*t.sigBytes;return e[n>>>5]|=128<<24-n%32,e[14+(n+64>>>9<<4)]=Math.floor(i/4294967296),e[15+(n+64>>>9<<4)]=i,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=r.clone.call(this);return t._hash=this._hash.clone(),t}});e.SHA1=r._createHelper(s),e.HmacSHA1=r._createHmacHelper(s)}(),t.SHA1})},36308:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(63009))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=e.algo,a=r.SHA256,o=r.SHA224=a.extend({_doReset:function(){this._hash=new n.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var t=a._doFinalize.call(this);return t.sigBytes-=4,t}});e.SHA224=a._createHelper(o),e.HmacSHA224=a._createHmacHelper(o)}(),t.SHA224})},63009:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(e){var i=t,n=i.lib,r=n.WordArray,a=n.Hasher,o=i.algo,s=[],l=[];(function(){function t(t){for(var i=e.sqrt(t),n=2;n<=i;n++)if(!(t%n))return!1;return!0}function i(t){return 4294967296*(t-(0|t))|0}var n=2,r=0;while(r<64)t(n)&&(r<8&&(s[r]=i(e.pow(n,.5))),l[r]=i(e.pow(n,1/3)),r++),n++})();var c=[],u=o.SHA256=a.extend({_doReset:function(){this._hash=new r.init(s.slice(0))},_doProcessBlock:function(t,e){for(var i=this._hash.words,n=i[0],r=i[1],a=i[2],o=i[3],s=i[4],u=i[5],d=i[6],h=i[7],p=0;p<64;p++){if(p<16)c[p]=0|t[e+p];else{var f=c[p-15],v=(f<<25|f>>>7)^(f<<14|f>>>18)^f>>>3,g=c[p-2],m=(g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10;c[p]=v+c[p-7]+m+c[p-16]}var y=s&u^~s&d,b=n&r^n&a^r&a,x=(n<<30|n>>>2)^(n<<19|n>>>13)^(n<<10|n>>>22),_=(s<<26|s>>>6)^(s<<21|s>>>11)^(s<<7|s>>>25),w=h+_+y+l[p]+c[p],C=x+b;h=d,d=u,u=s,s=o+w|0,o=a,a=r,r=n,n=w+C|0}i[0]=i[0]+n|0,i[1]=i[1]+r|0,i[2]=i[2]+a|0,i[3]=i[3]+o|0,i[4]=i[4]+s|0,i[5]=i[5]+u|0,i[6]=i[6]+d|0,i[7]=i[7]+h|0},_doFinalize:function(){var t=this._data,i=t.words,n=8*this._nDataBytes,r=8*t.sigBytes;return i[r>>>5]|=128<<24-r%32,i[14+(r+64>>>9<<4)]=e.floor(n/4294967296),i[15+(r+64>>>9<<4)]=n,t.sigBytes=4*i.length,this._process(),this._hash},clone:function(){var t=a.clone.call(this);return t._hash=this._hash.clone(),t}});i.SHA256=a._createHelper(u),i.HmacSHA256=a._createHmacHelper(u)}(Math),t.SHA256})},45953:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(43240))})(0,function(t){return function(e){var i=t,n=i.lib,r=n.WordArray,a=n.Hasher,o=i.x64,s=o.Word,l=i.algo,c=[],u=[],d=[];(function(){for(var t=1,e=0,i=0;i<24;i++){c[t+5*e]=(i+1)*(i+2)/2%64;var n=e%5,r=(2*t+3*e)%5;t=n,e=r}for(t=0;t<5;t++)for(e=0;e<5;e++)u[t+5*e]=e+(2*t+3*e)%5*5;for(var a=1,o=0;o<24;o++){for(var l=0,h=0,p=0;p<7;p++){if(1&a){var f=(1<>>24)|4278255360&(a<<24|a>>>8),o=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8);var s=i[r];s.high^=o,s.low^=a}for(var l=0;l<24;l++){for(var p=0;p<5;p++){for(var f=0,v=0,g=0;g<5;g++){s=i[p+5*g];f^=s.high,v^=s.low}var m=h[p];m.high=f,m.low=v}for(p=0;p<5;p++){var y=h[(p+4)%5],b=h[(p+1)%5],x=b.high,_=b.low;for(f=y.high^(x<<1|_>>>31),v=y.low^(_<<1|x>>>31),g=0;g<5;g++){s=i[p+5*g];s.high^=f,s.low^=v}}for(var w=1;w<25;w++){s=i[w];var C=s.high,S=s.low,k=c[w];k<32?(f=C<>>32-k,v=S<>>32-k):(f=S<>>64-k,v=C<>>64-k);var A=h[u[w]];A.high=f,A.low=v}var T=h[0],M=i[0];T.high=M.high,T.low=M.low;for(p=0;p<5;p++)for(g=0;g<5;g++){w=p+5*g,s=i[w];var I=h[w],E=h[(p+1)%5+5*g],D=h[(p+2)%5+5*g];s.high=I.high^~E.high&D.high,s.low=I.low^~E.low&D.low}s=i[0];var P=d[l];s.high^=P.high,s.low^=P.low}},_doFinalize:function(){var t=this._data,i=t.words,n=(this._nDataBytes,8*t.sigBytes),a=32*this.blockSize;i[n>>>5]|=1<<24-n%32,i[(e.ceil((n+1)/a)*a>>>5)-1]|=128,t.sigBytes=4*i.length,this._process();for(var o=this._state,s=this.cfg.outputLength/8,l=s/8,c=[],u=0;u>>24)|4278255360&(h<<24|h>>>8),p=16711935&(p<<8|p>>>24)|4278255360&(p<<24|p>>>8),c.push(p),c.push(h)}return new r.init(c,s)},clone:function(){for(var t=a.clone.call(this),e=t._state=this._state.slice(0),i=0;i<25;i++)e[i]=e[i].clone();return t}});i.SHA3=a._createHelper(p),i.HmacSHA3=a._createHmacHelper(p)}(Math),t.SHA3})},89557:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(43240),i(81380))})(0,function(t){return function(){var e=t,i=e.x64,n=i.Word,r=i.WordArray,a=e.algo,o=a.SHA512,s=a.SHA384=o.extend({_doReset:function(){this._hash=new r.init([new n.init(3418070365,3238371032),new n.init(1654270250,914150663),new n.init(2438529370,812702999),new n.init(355462360,4144912697),new n.init(1731405415,4290775857),new n.init(2394180231,1750603025),new n.init(3675008525,1694076839),new n.init(1203062813,3204075428)])},_doFinalize:function(){var t=o._doFinalize.call(this);return t.sigBytes-=16,t}});e.SHA384=o._createHelper(s),e.HmacSHA384=o._createHmacHelper(s)}(),t.SHA384})},81380:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(43240))})(0,function(t){return function(){var e=t,i=e.lib,n=i.Hasher,r=e.x64,a=r.Word,o=r.WordArray,s=e.algo;function l(){return a.create.apply(a,arguments)}var c=[l(1116352408,3609767458),l(1899447441,602891725),l(3049323471,3964484399),l(3921009573,2173295548),l(961987163,4081628472),l(1508970993,3053834265),l(2453635748,2937671579),l(2870763221,3664609560),l(3624381080,2734883394),l(310598401,1164996542),l(607225278,1323610764),l(1426881987,3590304994),l(1925078388,4068182383),l(2162078206,991336113),l(2614888103,633803317),l(3248222580,3479774868),l(3835390401,2666613458),l(4022224774,944711139),l(264347078,2341262773),l(604807628,2007800933),l(770255983,1495990901),l(1249150122,1856431235),l(1555081692,3175218132),l(1996064986,2198950837),l(2554220882,3999719339),l(2821834349,766784016),l(2952996808,2566594879),l(3210313671,3203337956),l(3336571891,1034457026),l(3584528711,2466948901),l(113926993,3758326383),l(338241895,168717936),l(666307205,1188179964),l(773529912,1546045734),l(1294757372,1522805485),l(1396182291,2643833823),l(1695183700,2343527390),l(1986661051,1014477480),l(2177026350,1206759142),l(2456956037,344077627),l(2730485921,1290863460),l(2820302411,3158454273),l(3259730800,3505952657),l(3345764771,106217008),l(3516065817,3606008344),l(3600352804,1432725776),l(4094571909,1467031594),l(275423344,851169720),l(430227734,3100823752),l(506948616,1363258195),l(659060556,3750685593),l(883997877,3785050280),l(958139571,3318307427),l(1322822218,3812723403),l(1537002063,2003034995),l(1747873779,3602036899),l(1955562222,1575990012),l(2024104815,1125592928),l(2227730452,2716904306),l(2361852424,442776044),l(2428436474,593698344),l(2756734187,3733110249),l(3204031479,2999351573),l(3329325298,3815920427),l(3391569614,3928383900),l(3515267271,566280711),l(3940187606,3454069534),l(4118630271,4000239992),l(116418474,1914138554),l(174292421,2731055270),l(289380356,3203993006),l(460393269,320620315),l(685471733,587496836),l(852142971,1086792851),l(1017036298,365543100),l(1126000580,2618297676),l(1288033470,3409855158),l(1501505948,4234509866),l(1607167915,987167468),l(1816402316,1246189591)],u=[];(function(){for(var t=0;t<80;t++)u[t]=l()})();var d=s.SHA512=n.extend({_doReset:function(){this._hash=new o.init([new a.init(1779033703,4089235720),new a.init(3144134277,2227873595),new a.init(1013904242,4271175723),new a.init(2773480762,1595750129),new a.init(1359893119,2917565137),new a.init(2600822924,725511199),new a.init(528734635,4215389547),new a.init(1541459225,327033209)])},_doProcessBlock:function(t,e){for(var i=this._hash.words,n=i[0],r=i[1],a=i[2],o=i[3],s=i[4],l=i[5],d=i[6],h=i[7],p=n.high,f=n.low,v=r.high,g=r.low,m=a.high,y=a.low,b=o.high,x=o.low,_=s.high,w=s.low,C=l.high,S=l.low,k=d.high,A=d.low,T=h.high,M=h.low,I=p,E=f,D=v,P=g,L=m,R=y,F=b,B=x,N=_,O=w,z=C,W=S,V=k,$=A,H=T,K=M,Y=0;Y<80;Y++){var X,U,G=u[Y];if(Y<16)U=G.high=0|t[e+2*Y],X=G.low=0|t[e+2*Y+1];else{var j=u[Y-15],q=j.high,Z=j.low,J=(q>>>1|Z<<31)^(q>>>8|Z<<24)^q>>>7,Q=(Z>>>1|q<<31)^(Z>>>8|q<<24)^(Z>>>7|q<<25),tt=u[Y-2],et=tt.high,it=tt.low,nt=(et>>>19|it<<13)^(et<<3|it>>>29)^et>>>6,rt=(it>>>19|et<<13)^(it<<3|et>>>29)^(it>>>6|et<<26),at=u[Y-7],ot=at.high,st=at.low,lt=u[Y-16],ct=lt.high,ut=lt.low;X=Q+st,U=J+ot+(X>>>0>>0?1:0),X+=rt,U=U+nt+(X>>>0>>0?1:0),X+=ut,U=U+ct+(X>>>0>>0?1:0),G.high=U,G.low=X}var dt=N&z^~N&V,ht=O&W^~O&$,pt=I&D^I&L^D&L,ft=E&P^E&R^P&R,vt=(I>>>28|E<<4)^(I<<30|E>>>2)^(I<<25|E>>>7),gt=(E>>>28|I<<4)^(E<<30|I>>>2)^(E<<25|I>>>7),mt=(N>>>14|O<<18)^(N>>>18|O<<14)^(N<<23|O>>>9),yt=(O>>>14|N<<18)^(O>>>18|N<<14)^(O<<23|N>>>9),bt=c[Y],xt=bt.high,_t=bt.low,wt=K+yt,Ct=H+mt+(wt>>>0>>0?1:0),St=(wt=wt+ht,Ct=Ct+dt+(wt>>>0>>0?1:0),wt=wt+_t,Ct=Ct+xt+(wt>>>0<_t>>>0?1:0),wt=wt+X,Ct=Ct+U+(wt>>>0>>0?1:0),gt+ft),kt=vt+pt+(St>>>0>>0?1:0);H=V,K=$,V=z,$=W,z=N,W=O,O=B+wt|0,N=F+Ct+(O>>>0>>0?1:0)|0,F=L,B=R,L=D,R=P,D=I,P=E,E=wt+St|0,I=Ct+kt+(E>>>0>>0?1:0)|0}f=n.low=f+E,n.high=p+I+(f>>>0>>0?1:0),g=r.low=g+P,r.high=v+D+(g>>>0

>>0?1:0),y=a.low=y+R,a.high=m+L+(y>>>0>>0?1:0),x=o.low=x+B,o.high=b+F+(x>>>0>>0?1:0),w=s.low=w+O,s.high=_+N+(w>>>0>>0?1:0),S=l.low=S+W,l.high=C+z+(S>>>0>>0?1:0),A=d.low=A+$,d.high=k+V+(A>>>0<$>>>0?1:0),M=h.low=M+K,h.high=T+H+(M>>>0>>0?1:0)},_doFinalize:function(){var t=this._data,e=t.words,i=8*this._nDataBytes,n=8*t.sigBytes;e[n>>>5]|=128<<24-n%32,e[30+(n+128>>>10<<5)]=Math.floor(i/4294967296),e[31+(n+128>>>10<<5)]=i,t.sigBytes=4*e.length,this._process();var r=this._hash.toX32();return r},clone:function(){var t=n.clone.call(this);return t._hash=this._hash.clone(),t},blockSize:32});e.SHA512=n._createHelper(d),e.HmacSHA512=n._createHmacHelper(d)}(),t.SHA512})},7628:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=i.BlockCipher,a=e.algo,o=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],s=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],l=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],c=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],u=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],d=a.DES=r.extend({_doReset:function(){for(var t=this._key,e=t.words,i=[],n=0;n<56;n++){var r=o[n]-1;i[n]=e[r>>>5]>>>31-r%32&1}for(var a=this._subKeys=[],c=0;c<16;c++){var u=a[c]=[],d=l[c];for(n=0;n<24;n++)u[n/6|0]|=i[(s[n]-1+d)%28]<<31-n%6,u[4+(n/6|0)]|=i[28+(s[n+24]-1+d)%28]<<31-n%6;u[0]=u[0]<<1|u[0]>>>31;for(n=1;n<7;n++)u[n]=u[n]>>>4*(n-1)+3;u[7]=u[7]<<5|u[7]>>>27}var h=this._invSubKeys=[];for(n=0;n<16;n++)h[n]=a[15-n]},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._subKeys)},decryptBlock:function(t,e){this._doCryptBlock(t,e,this._invSubKeys)},_doCryptBlock:function(t,e,i){this._lBlock=t[e],this._rBlock=t[e+1],h.call(this,4,252645135),h.call(this,16,65535),p.call(this,2,858993459),p.call(this,8,16711935),h.call(this,1,1431655765);for(var n=0;n<16;n++){for(var r=i[n],a=this._lBlock,o=this._rBlock,s=0,l=0;l<8;l++)s|=c[l][((o^r[l])&u[l])>>>0];this._lBlock=o,this._rBlock=a^s}var d=this._lBlock;this._lBlock=this._rBlock,this._rBlock=d,h.call(this,1,1431655765),p.call(this,8,16711935),p.call(this,2,858993459),h.call(this,16,65535),h.call(this,4,252645135),t[e]=this._lBlock,t[e+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});function h(t,e){var i=(this._lBlock>>>t^this._rBlock)&e;this._rBlock^=i,this._lBlock^=i<>>t^this._lBlock)&e;this._lBlock^=i,this._rBlock^=i<192.");var i=e.slice(0,2),r=e.length<4?e.slice(0,2):e.slice(2,4),a=e.length<6?e.slice(0,2):e.slice(4,6);this._des1=d.createEncryptor(n.create(i)),this._des2=d.createEncryptor(n.create(r)),this._des3=d.createEncryptor(n.create(a))},encryptBlock:function(t,e){this._des1.encryptBlock(t,e),this._des2.decryptBlock(t,e),this._des3.encryptBlock(t,e)},decryptBlock:function(t,e){this._des3.decryptBlock(t,e),this._des2.encryptBlock(t,e),this._des1.decryptBlock(t,e)},keySize:6,ivSize:2,blockSize:2});e.TripleDES=r._createHelper(f)}(),t.TripleDES})},43240:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(e){var i=t,n=i.lib,r=n.Base,a=n.WordArray,o=i.x64={};o.Word=r.extend({init:function(t,e){this.high=t,this.low=e}}),o.WordArray=r.extend({init:function(t,i){t=this.words=t||[],this.sigBytes=i!=e?i:8*t.length},toX32:function(){for(var t=this.words,e=t.length,i=[],n=0;n0?a("div",{staticClass:"opp-section"},[a("div",{staticClass:"opp-header"},[a("span",{staticClass:"opp-title"},[a("a-icon",{attrs:{type:"radar-chart"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.opportunities.title")))],1),a("span",{staticClass:"opp-header-right"},[a("span",{staticClass:"opp-update-hint"},[a("a-icon",{attrs:{type:"clock-circle"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.opportunities.updateHint"))+" ")],1),a("a-button",{attrs:{type:"link",size:"small",icon:"reload",loading:t.oppLoading},on:{click:function(a){return t.loadOpportunities(!0)}}},[t._v(" "+t._s(t.$t("common.refresh")||"刷新")+" ")])],1)]),a("div",{staticClass:"opp-carousel-wrapper",on:{mouseenter:function(a){t.oppHover=!0},mouseleave:function(a){t.oppHover=!1}}},[a("div",{staticClass:"opp-track",class:{paused:t.oppHover},style:t.oppTrackStyle},t._l(t.carouselItems,function(e,s){return a("div",{key:"opp-"+s,staticClass:"opp-card",class:[e.impact,"market-"+(e.market||"").toLowerCase(),{"is-prediction-market":"PredictionMarket"===e.market}],on:{click:function(a){return t.analyzeOpportunity(e)}}},[a("div",{staticClass:"opp-top"},[a("span",{staticClass:"opp-symbol",class:{"prediction-title":"PredictionMarket"===e.market}},[t._v(" "+t._s("PredictionMarket"===e.market&&e.name||e.symbol)+" ")]),a("a-tag",{staticClass:"opp-market-tag",attrs:{color:t.getMarketTagColor(e.market),size:"small"}},[t._v(" "+t._s(t.getMarketLabel(e.market))+" ")])],1),"PredictionMarket"!==e.market?a("div",{staticClass:"opp-price"},[t._v("$"+t._s(t.formatOppPrice(e.price)))]):a("div",{staticClass:"opp-price"},[t._v(t._s((e.price||0).toFixed(1))+"%")]),"PredictionMarket"!==e.market?a("div",{staticClass:"opp-change",class:e.change_24h>=0?"up":"down"},[t._v(" "+t._s(e.change_24h>=0?"+":"")+t._s((e.change_24h||0).toFixed(1))+"% ")]):e.ai_analysis?a("div",{staticClass:"opp-change"},[a("a-tag",{attrs:{color:t.getRecommendationColor(e.ai_analysis.recommendation),size:"small"}},[t._v(" "+t._s(t.getRecommendationLabel(e.ai_analysis.recommendation))+" ")]),a("span",{staticStyle:{"margin-left":"8px","font-size":"12px",color:"rgba(0,0,0,0.65)"}},[t._v(" 机会评分: "+t._s(e.ai_analysis.opportunity_score.toFixed(0))+" ")])],1):t._e(),"PredictionMarket"!==e.market?a("div",{staticClass:"opp-signal"},[a("a-tag",{attrs:{color:t.getSignalColor(e.signal),size:"small"}},[t._v(t._s(t.getSignalLabel(e.signal)))])],1):t._e(),a("div",{staticClass:"opp-reason"},[t._v(t._s(t.getReasonText(e)))]),a("div",{staticClass:"opp-actions"},["PredictionMarket"!==e.market?a("span",{staticClass:"opp-action",on:{click:function(a){return a.stopPropagation(),t.analyzeOpportunity(e)}}},[a("a-icon",{attrs:{type:"thunderbolt"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.opportunities.analyze"))+" ")],1):a("span",{staticClass:"opp-action",on:{click:function(a){return a.stopPropagation(),t.analyzeOpportunity(e)}}},[a("a-icon",{attrs:{type:"link"}}),t._v(" "+t._s(t.$t("polymarket.action.viewDetail"))+" ")],1),"Crypto"===e.market?a("span",{staticClass:"opp-trade-btn",on:{click:function(a){return a.stopPropagation(),t.openQuickTradeFromOpp(e)}}},[a("a-icon",{attrs:{type:"transaction"}}),t._v(" "+t._s(t.$t("quickTrade.tradeNow"))+" ")],1):t._e()])])}),0)])]):t._e(),a("a-tooltip",{attrs:{title:t.$t("quickTrade.openPanel"),placement:"left"}},[!t.showQuickTrade&&t.currentAnalysisSymbol?a("div",{staticClass:"qt-floating-btn",on:{click:t.openQuickTradeFromCurrent}},[a("a-icon",{attrs:{type:"thunderbolt",theme:"filled"}})],1):t._e()]),a("quick-trade-panel",{attrs:{visible:t.showQuickTrade,symbol:t.qtSymbol,"preset-side":t.qtSide,"preset-price":t.qtPrice,source:t.qtSource,"market-type":"swap"},on:{close:function(a){t.showQuickTrade=!1},"order-success":t.onQuickTradeSuccess,"update:symbol":t.handleQuickTradeSymbolChange}}),a("a-card",{staticClass:"workspace-card",attrs:{bordered:!1}},[a("a-tabs",{staticClass:"workspace-tabs",attrs:{size:"large"},model:{value:t.activeTab,callback:function(a){t.activeTab=a},expression:"activeTab"}},[a("a-tab-pane",{key:"quick"},[a("span",{attrs:{slot:"tab"},slot:"tab"},[a("a-icon",{attrs:{type:"thunderbolt"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.tabs.quick"))+" ")],1),a("div",{staticClass:"tab-body"},["quick"===t.activeTab?a("AnalysisView",{attrs:{embedded:!0,"preset-symbol":t.presetSymbol,"auto-analyze-signal":t.autoAnalyzeSignal},on:{"symbol-change":t.onAnalysisSymbolChange}}):t._e()],1)]),a("a-tab-pane",{key:"monitor"},[a("span",{attrs:{slot:"tab"},slot:"tab"},[a("a-icon",{attrs:{type:"eye"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.tabs.monitor"))+" ")],1),a("div",{staticClass:"tab-body"},["monitor"===t.activeTab?a("PortfolioView",{attrs:{embedded:!0}}):t._e()],1)]),a("a-tab-pane",{key:"polymarket"},[a("span",{attrs:{slot:"tab"},slot:"tab"},[a("a-icon",{attrs:{type:"radar-chart"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.tabs.polymarket"))+" ")],1),a("div",{staticClass:"tab-body"},[a("div",{staticClass:"polymarket-tab-content"},[a("div",{staticClass:"polymarket-placeholder"},[a("div",{staticClass:"placeholder-icon"},[a("a-icon",{attrs:{type:"radar-chart"}})],1),a("h3",[t._v(t._s(t.$t("polymarket.analysis.title")))]),a("p",[t._v(t._s(t.$t("polymarket.analysis.description")))]),a("a-button",{staticStyle:{"margin-top":"16px"},attrs:{type:"primary",size:"large",icon:"thunderbolt"},on:{click:function(a){t.showPolymarketModal=!0}}},[t._v(" "+t._s(t.$t("polymarket.analysis.startAnalysis"))+" ")])],1)])])])],1)],1),a("PolymarketAnalysisModal",{attrs:{visible:t.showPolymarketModal},on:{close:function(a){t.showPolymarketModal=!1}}})],1)},i=[],n=e(76959),o=e(17654),r=e(9133),l=e(57888),c=(e(28706),e(74423),e(34782),e(27495),e(21699),e(25440),e(95353)),p=e(90268),u=e(4103),y=e(62618),d=e(89523),m=(e(42762),function(){var t=this,a=t._self._c;return a("a-modal",{attrs:{visible:t.visible,title:t.$t("polymarket.analysis.title"),width:900,footer:null,maskClosable:!1},on:{cancel:t.handleClose}},[a("div",{staticClass:"polymarket-analysis-modal"},[a("a-tabs",{attrs:{"default-active-key":"analyze"},on:{change:t.handleTabChange}},[a("a-tab-pane",{key:"analyze",attrs:{tab:t.$t("polymarket.analysis.tabAnalyze")}},[t.analysisResult?t._e():a("div",{staticClass:"input-section"},[a("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{message:t.$t("polymarket.analysis.inputHint"),type:"info","show-icon":""}}),a("a-textarea",{attrs:{placeholder:t.$t("polymarket.analysis.inputPlaceholder"),rows:3,disabled:t.analyzing},on:{pressEnter:t.handleAnalyze},model:{value:t.inputText,callback:function(a){t.inputText=a},expression:"inputText"}}),a("div",{staticClass:"input-actions"},[a("a-button",{staticStyle:{width:"100%","margin-top":"12px"},attrs:{type:"primary",size:"large",icon:"thunderbolt",loading:t.analyzing,disabled:!t.inputText.trim()},on:{click:t.handleAnalyze}},[t._v(" "+t._s(t.$t("polymarket.analysis.analyzeButton"))+" ")])],1)],1),t.analysisResult?a("div",{staticClass:"result-section"},[a("div",{staticClass:"market-info"},[a("h3",[t._v(t._s(t.analysisResult.market.question))]),a("div",{staticClass:"market-meta"},[a("a-tag",{attrs:{color:t.getStatusColor(t.analysisResult.market.status)}},[t._v(" "+t._s(t.analysisResult.market.status)+" ")]),a("span",{staticClass:"meta-item"},[a("a-icon",{attrs:{type:"percentage"}}),t._v(" "+t._s(t.analysisResult.market.current_probability)+"% ")],1),t.analysisResult.market.volume_24h?a("span",{staticClass:"meta-item"},[a("a-icon",{attrs:{type:"dollar"}}),t._v(" "+t._s(t.formatVolume(t.analysisResult.market.volume_24h))+" ")],1):t._e(),t.analysisResult.market.polymarket_url?a("a-button",{attrs:{type:"link",size:"small",icon:"link",href:t.analysisResult.market.polymarket_url,target:"_blank"}},[t._v(" "+t._s(t.$t("polymarket.analysis.viewOnPolymarket"))+" ")]):t._e()],1)]),a("div",{staticClass:"analysis-result"},[a("a-divider",[t._v(t._s(t.$t("polymarket.analysis.aiAnalysis")))]),a("div",{staticClass:"probability-comparison"},[a("div",{staticClass:"prob-item"},[a("div",{staticClass:"prob-label"},[t._v(t._s(t.$t("polymarket.analysis.marketProbability")))]),a("div",{staticClass:"prob-value"},[t._v(t._s(t.analysisResult.analysis.market_probability)+"%")])]),a("div",{staticClass:"prob-item"},[a("div",{staticClass:"prob-label"},[t._v(t._s(t.$t("polymarket.analysis.aiPredictedProbability")))]),a("div",{staticClass:"prob-value ai-prob"},[t._v(t._s(t.analysisResult.analysis.ai_predicted_probability)+"%")])]),a("div",{staticClass:"prob-item"},[a("div",{staticClass:"prob-label"},[t._v(t._s(t.$t("polymarket.analysis.divergence")))]),a("div",{staticClass:"prob-value",class:t.getDivergenceClass(t.analysisResult.analysis.divergence)},[t._v(" "+t._s(t.analysisResult.analysis.divergence>=0?"+":"")+t._s(t.analysisResult.analysis.divergence.toFixed(2))+"% ")])])]),a("div",{staticClass:"recommendation-section"},[a("a-row",{attrs:{gutter:16}},[a("a-col",{attrs:{span:8}},[a("div",{staticClass:"rec-card"},[a("div",{staticClass:"rec-label"},[t._v(t._s(t.$t("polymarket.analysis.recommendation")))]),a("a-tag",{staticStyle:{"font-size":"16px",padding:"4px 12px"},attrs:{color:t.getRecommendationColor(t.analysisResult.analysis.recommendation)}},[t._v(" "+t._s(t.getRecommendationLabel(t.analysisResult.analysis.recommendation))+" ")])],1)]),a("a-col",{attrs:{span:8}},[a("div",{staticClass:"rec-card"},[a("div",{staticClass:"rec-label"},[t._v(t._s(t.$t("polymarket.analysis.confidenceScore")))]),a("div",{staticClass:"rec-value"},[t._v(t._s(t.analysisResult.analysis.confidence_score.toFixed(0)))])])]),a("a-col",{attrs:{span:8}},[a("div",{staticClass:"rec-card"},[a("div",{staticClass:"rec-label"},[t._v(t._s(t.$t("polymarket.analysis.opportunityScore")))]),a("div",{staticClass:"rec-value"},[t._v(t._s(t.analysisResult.analysis.opportunity_score.toFixed(0)))])])])],1)],1),t.analysisResult.analysis.reasoning?a("div",{staticClass:"reasoning-section"},[a("h4",[t._v(t._s(t.$t("polymarket.analysis.reasoning")))]),a("p",{staticClass:"reasoning-text"},[t._v(t._s(t.analysisResult.analysis.reasoning))])]):t._e(),t.analysisResult.analysis.key_factors&&t.analysisResult.analysis.key_factors.length>0?a("div",{staticClass:"key-factors-section"},[a("h4",[t._v(t._s(t.$t("polymarket.analysis.keyFactors")))]),t._l(t.analysisResult.analysis.key_factors,function(e,s){return a("a-tag",{key:s,staticStyle:{margin:"4px"},attrs:{color:"blue"}},[t._v(" "+t._s(e)+" ")])})],2):t._e(),t.analysisResult.credits_charged>0?a("div",{staticClass:"billing-info"},[a("a-alert",{staticStyle:{"margin-top":"16px"},attrs:{message:t.$t("polymarket.analysis.creditsCharged",{credits:t.analysisResult.credits_charged}),type:"success","show-icon":""}}),void 0!==t.analysisResult.remaining_credits?a("div",{staticStyle:{"margin-top":"8px","text-align":"right",color:"rgba(0,0,0,0.65)"}},[t._v(" "+t._s(t.$t("polymarket.analysis.remainingCredits",{credits:t.analysisResult.remaining_credits.toFixed(0)}))+" ")]):t._e()],1):t._e()],1),a("div",{staticClass:"result-actions"},[a("a-button",{staticStyle:{"margin-right":"8px"},on:{click:t.handleNewAnalysis}},[t._v(" "+t._s(t.$t("polymarket.analysis.newAnalysis"))+" ")]),a("a-button",{attrs:{type:"primary"},on:{click:t.handleClose}},[t._v(" "+t._s(t.$t("common.close"))+" ")])],1)]):t._e(),t.analyzing?a("div",{staticClass:"loading-section"},[a("a-spin",{attrs:{size:"large"}}),a("p",{staticStyle:{"margin-top":"16px",color:"rgba(0,0,0,0.65)"}},[t._v(" "+t._s(t.$t("polymarket.analysis.analyzing"))+" ")])],1):t._e()]),a("a-tab-pane",{key:"history",attrs:{tab:t.$t("polymarket.analysis.tabHistory")}},[a("div",{staticClass:"history-section"},[a("a-spin",{attrs:{spinning:t.historyLoading}},[a("a-table",{attrs:{columns:t.historyColumns,"data-source":t.historyList,pagination:t.historyPagination,"row-key":function(t){return t.id},size:"small"},on:{change:t.handleHistoryTableChange},scopedSlots:t._u([{key:"market_title",fn:function(e,s){return[a("a-button",{staticStyle:{padding:"0"},attrs:{type:"link"},on:{click:function(a){return t.viewHistoryItem(s)}}},[t._v(" "+t._s(e)+" ")])]}},{key:"recommendation",fn:function(e){return[a("a-tag",{attrs:{color:t.getRecommendationColor(e)}},[t._v(" "+t._s(t.getRecommendationLabel(e))+" ")])]}},{key:"created_at",fn:function(a){return[t._v(" "+t._s(t.formatDateTime(a))+" ")]}}])})],1)],1)])],1)],1)])}),h=[],k=(e(26099),e(76471)),v="/api/polymarket";function g(t){return(0,k.Ay)({url:"".concat(v,"/analyze"),method:"post",data:t,timeout:12e4})}function _(t){return(0,k.Ay)({url:"".concat(v,"/history"),method:"get",params:t})}var b={name:"PolymarketAnalysisModal",props:{visible:{type:Boolean,default:!1}},data:function(){var t=this;return{inputText:"",analyzing:!1,analysisResult:null,activeTab:"analyze",historyLoading:!1,historyList:[],historyPagination:{current:1,pageSize:20,total:0,showSizeChanger:!0,showTotal:function(a){return t.$t("polymarket.analysis.historyTotal",{total:a})}},historyColumns:[]}},methods:{handleAnalyze:function(){var t=this;this.inputText.trim()?(this.analyzing=!0,this.analysisResult=null,g({input:this.inputText.trim(),language:this.$i18n.locale||"zh-CN"}).then(function(a){1===a.code?(t.analysisResult=a.data,t.$message.success(t.$t("polymarket.analysis.success"))):"Insufficient credits"===a.msg?(t.$message.error(t.$t("polymarket.analysis.insufficientCredits")),t.$router.push("/billing")):t.$message.error(a.msg||t.$t("polymarket.analysis.failed"))}).catch(function(a){a.response&&a.response.data&&"Insufficient credits"===a.response.data.msg?(t.$message.error(t.$t("polymarket.analysis.insufficientCredits")),t.$router.push("/billing")):t.$message.error(t.$t("polymarket.analysis.failed"))}).finally(function(){t.analyzing=!1})):this.$message.warning(this.$t("polymarket.analysis.inputRequired"))},handleNewAnalysis:function(){this.inputText="",this.analysisResult=null},handleClose:function(){var t=this;this.$emit("close"),setTimeout(function(){t.inputText="",t.analysisResult=null,t.analyzing=!1},300)},getStatusColor:function(t){var a={active:"green",closed:"default",resolved:"blue"};return a[t]||"default"},getRecommendationColor:function(t){var a={YES:"green",NO:"red",HOLD:"orange"};return a[t]||"default"},getRecommendationLabel:function(t){var a={YES:this.$t("polymarket.analysis.recommendationYes"),NO:this.$t("polymarket.analysis.recommendationNo"),HOLD:this.$t("polymarket.analysis.recommendationHold")};return a[t]||t},getDivergenceClass:function(t){return t>5?"divergence-positive":t<-5?"divergence-negative":"divergence-neutral"},formatVolume:function(t){return t>=1e6?"$".concat((t/1e6).toFixed(2),"M"):t>=1e3?"$".concat((t/1e3).toFixed(2),"K"):"$".concat(t.toFixed(2))},handleTabChange:function(t){this.activeTab=t,"history"===t&&0===this.historyList.length&&this.loadHistory()},loadHistory:function(){var t=this;return(0,o.A)((0,n.A)().m(function a(){var e;return(0,n.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return t.historyLoading=!0,a.p=1,a.n=2,_({page:t.historyPagination.current,page_size:t.historyPagination.pageSize});case 2:e=a.v,1===e.code&&e.data&&(t.historyList=e.data.items||[],t.historyPagination.total=e.data.total||0),a.n=4;break;case 3:a.p=3,a.v,t.$message.error(t.$t("polymarket.analysis.loadHistoryFailed"));case 4:return a.p=4,t.historyLoading=!1,a.f(4);case 5:return a.a(2)}},a,null,[[1,3,4,5]])}))()},handleHistoryTableChange:function(t){this.historyPagination.current=t.current,this.historyPagination.pageSize=t.pageSize,this.loadHistory()},viewHistoryItem:function(t){this.activeTab="analyze",this.analysisResult={market:{question:t.market_title,market_id:t.market_id,polymarket_url:t.market_url,current_probability:t.market_probability,status:"active"},analysis:{ai_predicted_probability:t.ai_predicted_probability,market_probability:t.market_probability,recommendation:t.recommendation,opportunity_score:t.opportunity_score,confidence_score:t.confidence_score}}},formatDateTime:function(t){if(!t)return"";var a=new Date(t);return a.toLocaleString("zh-CN"===this.$i18n.locale?"zh-CN":"en-US")}},mounted:function(){this.historyColumns=[{title:this.$t("polymarket.analysis.historyMarket"),dataIndex:"market_title",key:"market_title",scopedSlots:{customRender:"market_title"}},{title:this.$t("polymarket.analysis.historyRecommendation"),dataIndex:"recommendation",key:"recommendation",width:120,scopedSlots:{customRender:"recommendation"}},{title:this.$t("polymarket.analysis.historyOpportunityScore"),dataIndex:"opportunity_score",key:"opportunity_score",width:120,align:"right"},{title:this.$t("polymarket.analysis.historyCreatedAt"),dataIndex:"created_at",key:"created_at",width:180,scopedSlots:{customRender:"created_at"}}]}},f=b,C=e(845),S=(0,C.A)(f,m,h,!1,null,"41dfa054",null),$=S.exports,A={name:"AIAssetAnalysis",components:{AnalysisView:p["default"],PortfolioView:u["default"],QuickTradePanel:d.A,PolymarketAnalysisModal:$},data:function(){return{activeTab:"quick",opportunities:[],oppLoading:!1,oppHover:!1,presetSymbol:"",autoAnalyzeSignal:0,showQuickTrade:!1,qtSymbol:"",qtSide:"",qtPrice:0,qtSource:"ai_radar",currentAnalysisSymbol:"",currentAnalysisMarket:"",showPolymarketModal:!1}},computed:(0,l.A)((0,l.A)({},(0,c.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},carouselItems:function(){return 0===this.opportunities.length?[]:[].concat((0,r.A)(this.opportunities),(0,r.A)(this.opportunities))},oppTrackStyle:function(){var t=3*this.opportunities.length;return{animationDuration:t+"s"}}}),created:function(){this.loadOpportunities()},methods:{loadOpportunities:function(){var t=arguments,a=this;return(0,o.A)((0,n.A)().m(function e(){var s,i,o;return(0,n.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return s=t.length>0&&void 0!==t[0]&&t[0],a.oppLoading=!0,e.p=1,i=s?{force:!0}:{},e.n=2,(0,y.r9)(i);case 2:o=e.v,o&&1===o.code&&Array.isArray(o.data)&&(a.opportunities=o.data.slice(0,20)),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.p=4,a.oppLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},getSignalColor:function(t){var a={overbought:"volcano",oversold:"green",bullish_momentum:"cyan",bearish_momentum:"red"};return a[t]||"default"},getSignalLabel:function(t){var a="aiAssetAnalysis.opportunities.signal.".concat(t),e=this.$t(a);return e!==a?e:t},getMarketTagColor:function(t){var a={Crypto:"purple",USStock:"green",Forex:"gold",PredictionMarket:"cyan"};return a[t]||"default"},getMarketLabel:function(t){var a="aiAssetAnalysis.opportunities.market.".concat(t),e=this.$t(a);return e!==a?e:t},getReasonText:function(t){var a=(t.market||"Crypto").toLowerCase(),e=t.signal||"",s="aiAssetAnalysis.opportunities.reason.".concat(a,".").concat(e),i=this.$t(s);if(i===s)return t.reason||"";var n=Math.abs(t.change_24h||0).toFixed(1),o=Math.abs(t.change_7d||0).toFixed(1);return i.replace("{change}",n).replace("{change7d}",o)},formatOppPrice:function(t){return t?t>=1e4?(t/1e3).toFixed(1)+"K":t>=1?t.toFixed(2):t.toFixed(4):"--"},analyzeOpportunity:function(t){var a=this;if("PredictionMarket"===t.market)return this.activeTab="polymarket",void(this.showPolymarketModal=!0);this.activeTab="quick";var e=t.market||"Crypto";this.presetSymbol="".concat(e,":").concat(t.symbol),this.$nextTick(function(){a.autoAnalyzeSignal++})},getRecommendationColor:function(t){var a={YES:"green",NO:"red",HOLD:"default"};return a[t]||"default"},getRecommendationLabel:function(t){return this.$t("polymarket.recommendation.".concat(t))||t},onAnalysisSymbolChange:function(t){if(!t)return this.currentAnalysisSymbol="",void(this.currentAnalysisMarket="");var a=t.split(":"),e=a.length>1?a[0]:"Crypto",s=a.length>1?a[1]:a[0];this.currentAnalysisMarket=e,this.currentAnalysisSymbol="Crypto"===e?s:""},openQuickTradeFromCurrent:function(){this.currentAnalysisSymbol&&(this.qtSymbol=this.currentAnalysisSymbol,this.qtSide="",this.qtPrice=0,this.qtSource="ai_analysis",this.showQuickTrade=!0)},openQuickTradeFromOpp:function(t){if("Crypto"===t.market){this.qtSymbol=t.symbol||"";var a=(t.signal||"").toLowerCase();a.includes("oversold")||a.includes("bullish")?this.qtSide="buy":a.includes("overbought")||a.includes("bearish")?this.qtSide="sell":this.qtSide="",this.qtPrice=t.price||0,this.qtSource="ai_radar",this.showQuickTrade=!0}},onQuickTradeSuccess:function(){this.$message.success(this.$t("quickTrade.orderSuccess"))},handleQuickTradeSymbolChange:function(t){t&&(this.qtSymbol=t)}}},T=A,w=(0,C.A)(T,s,i,!1,null,"20b827f5",null),x=w.exports}}]); \ No newline at end of file diff --git a/frontend/dist/js/811-legacy.47af9a60.js b/frontend/dist/js/811-legacy.47af9a60.js new file mode 100644 index 0000000..5162ac5 --- /dev/null +++ b/frontend/dist/js/811-legacy.47af9a60.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[811],{6811:function(t,e,a){a.r(e),a.d(e,{default:function(){return v}});var s=function(){var t=this,e=t._self._c;return e("div",{staticClass:"user-manage-page",class:{"theme-dark":t.isDarkTheme}},[e("div",{staticClass:"page-header"},[e("h2",{staticClass:"page-title"},[e("a-icon",{attrs:{type:"team"}}),e("span",[t._v(t._s(t.$t("userManage.title")||"User Management"))])],1),e("p",{staticClass:"page-desc"},[t._v(t._s(t.$t("userManage.description")||"Manage system users, roles and permissions"))])]),e("a-tabs",{staticClass:"manage-tabs",on:{change:t.handleTabChange},model:{value:t.activeTab,callback:function(e){t.activeTab=e},expression:"activeTab"}},[e("a-tab-pane",{key:"users",attrs:{tab:t.$t("userManage.tabUsers")||"User Management"}},[e("div",{staticClass:"toolbar"},[e("div",{staticClass:"toolbar-left"},[e("a-button",{attrs:{type:"primary"},on:{click:t.showCreateModal}},[e("a-icon",{attrs:{type:"user-add"}}),t._v(" "+t._s(t.$t("userManage.createUser")||"Create User")+" ")],1),e("a-button",{on:{click:t.loadUsers}},[e("a-icon",{attrs:{type:"reload"}}),t._v(" "+t._s(t.$t("common.refresh")||"Refresh")+" ")],1)],1),e("div",{staticClass:"toolbar-right"},[e("a-input-search",{staticStyle:{width:"280px"},attrs:{placeholder:t.$t("userManage.searchPlaceholder")||"Search by username/email",allowClear:""},on:{search:t.handleSearch,pressEnter:t.handleSearch},model:{value:t.searchKeyword,callback:function(e){t.searchKeyword=e},expression:"searchKeyword"}})],1)]),e("a-card",{staticClass:"user-table-card",attrs:{bordered:!1}},[e("a-table",{attrs:{columns:t.columns,dataSource:t.users,loading:t.loading,pagination:t.pagination,rowKey:function(t){return t.id}},on:{change:t.handleTableChange},scopedSlots:t._u([{key:"status",fn:function(a){return[e("a-tag",{attrs:{color:"active"===a?"green":"red"}},[t._v(" "+t._s("active"===a?t.$t("userManage.active")||"Active":t.$t("userManage.disabled")||"Disabled")+" ")])]}},{key:"role",fn:function(a){return[e("a-tag",{attrs:{color:t.getRoleColor(a)}},[t._v(" "+t._s(t.getRoleLabel(a))+" ")])]}},{key:"last_login_at",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v(t._s(t.$t("userManage.neverLogin")||"Never"))])]}},{key:"credits",fn:function(a){return[e("span",{staticClass:"credits-value"},[t._v(t._s(t.formatCredits(a)))])]}},{key:"vip_expires_at",fn:function(a){return[a&&t.isVipActive(a)?[e("a-tag",{attrs:{color:"gold"}},[e("a-icon",{attrs:{type:"crown"}}),t._v(" "+t._s(t.formatDate(a))+" ")],1)]:e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"action",fn:function(a,s){return[e("a-space",[e("a-tooltip",{attrs:{title:t.$t("common.edit")||"Edit"}},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.showEditModal(s)}}},[e("a-icon",{attrs:{type:"edit"}})],1)],1),e("a-tooltip",{attrs:{title:t.$t("userManage.adjustCredits")||"Adjust Credits"}},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.showCreditsModal(s)}}},[e("a-icon",{staticStyle:{color:"#722ed1"},attrs:{type:"wallet"}})],1)],1),e("a-tooltip",{attrs:{title:t.$t("userManage.setVip")||"Set VIP"}},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.showVipModal(s)}}},[e("a-icon",{staticStyle:{color:"#faad14"},attrs:{type:"crown"}})],1)],1),e("a-tooltip",{attrs:{title:t.$t("userManage.resetPassword")||"Reset Password"}},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.showResetPasswordModal(s)}}},[e("a-icon",{attrs:{type:"key"}})],1)],1),e("a-tooltip",{attrs:{title:t.$t("common.delete")||"Delete"}},[e("a-popconfirm",{attrs:{title:t.$t("userManage.confirmDelete")||"Are you sure to delete this user?"},on:{confirm:function(e){return t.handleDelete(s.id)}}},[e("a-button",{attrs:{type:"link",size:"small",disabled:s.id===t.currentUserId}},[e("a-icon",{staticStyle:{color:"#ff4d4f"},attrs:{type:"delete"}})],1)],1)],1)],1)]}}])})],1)],1),e("a-tab-pane",{key:"strategies",attrs:{tab:t.$t("systemOverview.tabTitle")||"System Overview"}},[t.strategySummary?e("div",{staticClass:"summary-cards"},[e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #667eea, #764ba2)"}},[e("a-icon",{attrs:{type:"fund"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.strategySummary.total_strategies||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("systemOverview.totalStrategies")||"Total Strategies"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #11998e, #38ef7d)"}},[e("a-icon",{attrs:{type:"play-circle"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.strategySummary.running_strategies||0))]),e("div",{staticClass:"summary-sub"},[t._v(" "+t._s(t.$t("systemOverview.live")||"实盘")+": "+t._s(t.strategySummary.running_live_strategies||0)+" / "+t._s(t.$t("systemOverview.signal")||"仅通知")+": "+t._s(t.strategySummary.running_signal_strategies||0)+" ")]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("systemOverview.runningStrategies")||"Running"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #f093fb, #f5576c)"}},[e("a-icon",{attrs:{type:"dollar"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.formatNumber(t.strategySummary.total_capital)))]),e("div",{staticClass:"summary-sub"},[t._v(" "+t._s(t.$t("systemOverview.live")||"实盘")+": "+t._s(t.formatNumber(t.strategySummary.live_capital))+" / "+t._s(t.$t("systemOverview.signal")||"仅通知")+": "+t._s(t.formatNumber(t.strategySummary.signal_capital))+" ")]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("systemOverview.totalCapital")||"Total Capital"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",style:{background:(t.strategySummary.total_pnl||0)>=0?"linear-gradient(135deg, #11998e, #38ef7d)":"linear-gradient(135deg, #ff416c, #ff4b2b)"}},[e("a-icon",{attrs:{type:"rise"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value",class:(t.strategySummary.total_pnl||0)>=0?"text-profit":"text-loss"},[t._v(" "+t._s(t.formatPnl(t.strategySummary.total_pnl))+" "),e("span",{staticClass:"roi-badge"},[t._v(t._s(t.strategySummary.total_roi||0)+"%")])]),e("div",{staticClass:"summary-sub"},[t._v(" "+t._s(t.$t("systemOverview.live")||"实盘")+": "+t._s(t.formatPnl(t.strategySummary.live_pnl))+" / "+t._s(t.$t("systemOverview.signal")||"仅通知")+": "+t._s(t.formatPnl(t.strategySummary.signal_pnl))+" ")]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("systemOverview.totalPnl")||"Total PnL"))])])])]):t._e(),e("div",{staticClass:"toolbar"},[e("div",{staticClass:"toolbar-left"},[e("a-button",{on:{click:t.loadSystemStrategies}},[e("a-icon",{attrs:{type:"reload"}}),t._v(" "+t._s(t.$t("common.refresh")||"Refresh")+" ")],1),e("a-select",{staticStyle:{width:"140px"},on:{change:t.handleStrategyFilterChange},model:{value:t.strategyStatusFilter,callback:function(e){t.strategyStatusFilter=e},expression:"strategyStatusFilter"}},[e("a-select-option",{attrs:{value:"all"}},[t._v(t._s(t.$t("systemOverview.filterAll")||"All Status"))]),e("a-select-option",{attrs:{value:"running"}},[t._v(t._s(t.$t("systemOverview.filterRunning")||"Running"))]),e("a-select-option",{attrs:{value:"stopped"}},[t._v(t._s(t.$t("systemOverview.filterStopped")||"Stopped"))])],1)],1),e("div",{staticClass:"toolbar-right"},[e("a-input-search",{staticStyle:{width:"280px"},attrs:{placeholder:t.$t("systemOverview.searchPlaceholder")||"Search strategy/symbol/user",allowClear:""},on:{search:t.handleStrategySearch,pressEnter:t.handleStrategySearch},model:{value:t.strategySearchKeyword,callback:function(e){t.strategySearchKeyword=e},expression:"strategySearchKeyword"}})],1)]),e("a-card",{staticClass:"user-table-card",attrs:{bordered:!1}},[e("a-table",{attrs:{columns:t.strategyColumns,dataSource:t.systemStrategies,loading:t.strategyLoading,pagination:t.strategyPagination,rowKey:function(t){return t.id},scroll:{x:1600}},on:{change:t.handleStrategyTableChange},scopedSlots:t._u([{key:"strategyStatus",fn:function(a){return[e("span",{staticClass:"status-cell"},[e("span",{staticClass:"status-dot",class:"running"===a?"dot-running":"dot-stopped"}),e("span",{class:"running"===a?"status-running":"status-stopped"},[t._v(" "+t._s("running"===a?t.$t("systemOverview.running")||"Running":t.$t("systemOverview.stopped")||"Stopped")+" ")])])]}},{key:"userInfo",fn:function(a,s){return[e("a-tooltip",{attrs:{title:s.nickname||s.username||"-"}},[e("span",{staticClass:"user-cell"},[e("a-avatar",{style:{backgroundColor:t.getUserColor(s.user_id),fontSize:"11px",marginRight:"6px"},attrs:{size:"small"}},[t._v(" "+t._s((s.nickname||s.username||"?").charAt(0).toUpperCase())+" ")]),e("span",{staticClass:"user-name"},[t._v(t._s(t.truncate(s.nickname||s.username||"-",8)))])],1)])]}},{key:"symbolInfo",fn:function(a,s){return[e("div",[e("span",{staticClass:"symbol-text"},[t._v(t._s(s.symbol||"-"))]),"cross_sectional"===s.cs_strategy_type?e("a-tag",{staticStyle:{"margin-left":"4px"},attrs:{color:"purple",size:"small"}},[t._v("CS")]):t._e()],1),"cross_sectional"===s.cs_strategy_type&&s.symbol_list&&s.symbol_list.length?e("div",{staticClass:"symbol-count text-muted"},[t._v(" "+t._s(s.symbol_list.length)+" "+t._s(t.$t("systemOverview.symbols")||"symbols")+" ")]):t._e()]}},{key:"capitalInfo",fn:function(a){return[e("span",[t._v(t._s(t.formatNumber(a)))])]}},{key:"pnlInfo",fn:function(a,s){return[e("div",{class:s.total_pnl>=0?"text-profit":"text-loss"},[e("span",{staticClass:"pnl-value"},[t._v(t._s(t.formatPnl(s.total_pnl)))]),e("span",{staticClass:"roi-text"},[t._v("("+t._s(s.roi>=0?"+":"")+t._s(s.roi)+"%)")])]),e("div",{staticClass:"pnl-detail text-muted"},[e("span",[t._v(t._s(t.$t("systemOverview.realized")||"Real")+": "+t._s(t.formatPnl(s.total_realized_pnl)))]),e("span",{staticStyle:{"margin-left":"8px"}},[t._v(t._s(t.$t("systemOverview.unrealized")||"Unreal")+": "+t._s(t.formatPnl(s.total_unrealized_pnl)))])])]}},{key:"positionInfo",fn:function(t,a){return[e("a-badge",{attrs:{count:a.position_count,numberStyle:{backgroundColor:a.position_count>0?"#52c41a":"#d9d9d9"}}})]}},{key:"tradeInfo",fn:function(a){return[e("span",[t._v(t._s(a||0))])]}},{key:"indicatorInfo",fn:function(a){return[a?e("a-tooltip",{attrs:{title:a}},[e("span",{staticClass:"indicator-name"},[t._v(t._s(t.truncate(a,16)))])]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"exchangeInfo",fn:function(a){return[a?e("span",{staticClass:"exchange-name"},[t._v(t._s(a))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"timeframeInfo",fn:function(a){return[a?e("a-tag",{attrs:{size:"small"}},[t._v(t._s(a))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"leverageInfo",fn:function(a){return[a>1?e("span",{staticStyle:{color:"#fa8c16","font-weight":"600"}},[t._v(t._s(a)+"x")]):e("span",[t._v(t._s(a||1)+"x")])]}},{key:"createdAtInfo",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}}])})],1)],1),e("a-tab-pane",{key:"orders",attrs:{tab:t.$t("adminOrders.tabTitle")||"Order List"}},[t.orderSummary?e("div",{staticClass:"summary-cards"},[e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #667eea, #764ba2)"}},[e("a-icon",{attrs:{type:"file-text"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.orderSummary.total_orders||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminOrders.totalOrders")||"Total Orders"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #11998e, #38ef7d)"}},[e("a-icon",{attrs:{type:"check-circle"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.orderSummary.paid_orders||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminOrders.paidOrders")||"Paid"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #f093fb, #f5576c)"}},[e("a-icon",{attrs:{type:"clock-circle"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.orderSummary.pending_orders||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminOrders.pendingOrders")||"Pending"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #fa709a, #fee140)"}},[e("a-icon",{attrs:{type:"dollar"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.formatNumber(t.orderSummary.total_revenue))+" "),e("span",{staticStyle:{"font-size":"13px",color:"#999"}},[t._v("USDT")])]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminOrders.totalRevenue")||"Total Revenue"))])])])]):t._e(),e("div",{staticClass:"toolbar"},[e("div",{staticClass:"toolbar-left"},[e("a-button",{on:{click:t.loadOrders}},[e("a-icon",{attrs:{type:"reload"}}),t._v(" "+t._s(t.$t("common.refresh")||"Refresh")+" ")],1),e("a-select",{staticStyle:{width:"140px"},on:{change:t.handleOrderFilterChange},model:{value:t.orderStatusFilter,callback:function(e){t.orderStatusFilter=e},expression:"orderStatusFilter"}},[e("a-select-option",{attrs:{value:"all"}},[t._v(t._s(t.$t("adminOrders.filterAll")||"All Status"))]),e("a-select-option",{attrs:{value:"pending"}},[t._v(t._s(t.$t("adminOrders.filterPending")||"Pending"))]),e("a-select-option",{attrs:{value:"paid"}},[t._v(t._s(t.$t("adminOrders.filterPaid")||"Paid"))]),e("a-select-option",{attrs:{value:"confirmed"}},[t._v(t._s(t.$t("adminOrders.filterConfirmed")||"Confirmed"))]),e("a-select-option",{attrs:{value:"expired"}},[t._v(t._s(t.$t("adminOrders.filterExpired")||"Expired"))])],1)],1),e("div",{staticClass:"toolbar-right"},[e("a-input-search",{staticStyle:{width:"280px"},attrs:{placeholder:t.$t("adminOrders.searchPlaceholder")||"Search by username/email",allowClear:""},on:{search:t.handleOrderSearch,pressEnter:t.handleOrderSearch},model:{value:t.orderSearchKeyword,callback:function(e){t.orderSearchKeyword=e},expression:"orderSearchKeyword"}})],1)]),e("a-card",{staticClass:"user-table-card",attrs:{bordered:!1}},[e("a-table",{attrs:{columns:t.orderColumns,dataSource:t.orders,loading:t.orderLoading,pagination:t.orderPagination,rowKey:function(t){return t.order_type+"-"+t.id},scroll:{x:1400}},on:{change:t.handleOrderTableChange},scopedSlots:t._u([{key:"orderUserInfo",fn:function(a,s){return[e("a-tooltip",{attrs:{title:(s.nickname||s.username||"-")+" ("+(s.user_email||"")+")"}},[e("span",{staticClass:"user-cell"},[e("a-avatar",{style:{backgroundColor:t.getUserColor(s.user_id),fontSize:"11px",marginRight:"6px"},attrs:{size:"small"}},[t._v(" "+t._s((s.nickname||s.username||"?").charAt(0).toUpperCase())+" ")]),e("span",{staticClass:"user-name"},[t._v(t._s(t.truncate(s.nickname||s.username||"-",10)))])],1)])]}},{key:"orderTypeInfo",fn:function(a){return[e("a-tag",{attrs:{color:"usdt"===a?"green":"blue"}},[t._v(" "+t._s("usdt"===a?"USDT":"Mock")+" ")])]}},{key:"planInfo",fn:function(a){return[e("a-tag",{attrs:{color:"lifetime"===a?"gold":"yearly"===a?"purple":"cyan"}},[t._v(" "+t._s("lifetime"===a?t.$t("adminOrders.lifetime")||"Lifetime":"yearly"===a?t.$t("adminOrders.yearly")||"Yearly":t.$t("adminOrders.monthly")||"Monthly")+" ")])]}},{key:"amountInfo",fn:function(a,s){return[e("span",{staticStyle:{"font-weight":"600"}},[t._v(t._s(a))]),e("span",{staticClass:"text-muted",staticStyle:{"margin-left":"4px"}},[t._v(t._s(s.currency))])]}},{key:"orderStatusInfo",fn:function(a){return[e("a-tag",{attrs:{color:t.getOrderStatusColor(a)}},[t._v(t._s(t.getOrderStatusLabel(a)))])]}},{key:"chainInfo",fn:function(a){return[a?e("span",[t._v(t._s(a))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"addressInfo",fn:function(a){return[a?e("a-tooltip",{attrs:{title:a}},[e("span",{staticClass:"address-text"},[t._v(t._s(t.truncate(a,12)))])]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"txHashInfo",fn:function(a){return[a?e("a-tooltip",{attrs:{title:a}},[e("span",{staticClass:"hash-text"},[t._v(t._s(t.truncate(a,14)))])]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"orderCreatedAt",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}}])})],1)],1),e("a-tab-pane",{key:"aiStats",attrs:{tab:t.$t("adminAiStats.tabTitle")||"AI Analysis"}},[t.aiStatsSummary?e("div",{staticClass:"summary-cards"},[e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #667eea, #764ba2)"}},[e("a-icon",{attrs:{type:"thunderbolt"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.aiStatsSummary.total_analyses||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminAiStats.totalAnalyses")||"Total Analyses"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #11998e, #38ef7d)"}},[e("a-icon",{attrs:{type:"team"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.aiStatsSummary.unique_users||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminAiStats.activeUsers")||"Active Users"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #f093fb, #f5576c)"}},[e("a-icon",{attrs:{type:"stock"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.aiStatsSummary.unique_symbols||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminAiStats.uniqueSymbols")||"Symbols Analyzed"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #fa709a, #fee140)"}},[e("a-icon",{attrs:{type:"like"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(" "+t._s(t.aiStatsSummary.correct_count||0)+" "),e("span",{staticStyle:{"font-size":"13px",color:"#999"}},[t._v("/ "+t._s(t.aiStatsSummary.total_memory||0))])]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminAiStats.accuracy")||"Correct / Verified"))])])])]):t._e(),e("div",{staticClass:"toolbar"},[e("div",{staticClass:"toolbar-left"},[e("a-button",{on:{click:t.loadAiStats}},[e("a-icon",{attrs:{type:"reload"}}),t._v(" "+t._s(t.$t("common.refresh")||"Refresh")+" ")],1)],1),e("div",{staticClass:"toolbar-right"},[e("a-input-search",{staticStyle:{width:"280px"},attrs:{placeholder:t.$t("adminAiStats.searchPlaceholder")||"Search by username",allowClear:""},on:{search:t.handleAiStatsSearch,pressEnter:t.handleAiStatsSearch},model:{value:t.aiStatsSearchKeyword,callback:function(e){t.aiStatsSearchKeyword=e},expression:"aiStatsSearchKeyword"}})],1)]),e("a-card",{staticClass:"user-table-card",staticStyle:{"margin-bottom":"20px"},attrs:{bordered:!1}},[e("h4",{staticStyle:{"margin-bottom":"12px",color:"#1e3a5f","font-weight":"600"}},[e("a-icon",{staticStyle:{"margin-right":"8px"},attrs:{type:"bar-chart"}}),t._v(" "+t._s(t.$t("adminAiStats.userStatsTitle")||"Per-User Statistics")+" ")],1),e("a-table",{attrs:{columns:t.aiUserColumns,dataSource:t.aiUserStats,loading:t.aiStatsLoading,pagination:t.aiStatsPagination,rowKey:function(t){return t.user_id}},on:{change:t.handleAiStatsTableChange},scopedSlots:t._u([{key:"aiUserInfo",fn:function(a,s){return[e("a-tooltip",{attrs:{title:(s.nickname||s.username||"-")+" ("+(s.email||"")+")"}},[e("span",{staticClass:"user-cell"},[e("a-avatar",{style:{backgroundColor:t.getUserColor(s.user_id),fontSize:"11px",marginRight:"6px"},attrs:{size:"small"}},[t._v(" "+t._s((s.nickname||s.username||"?").charAt(0).toUpperCase())+" ")]),e("span",{staticClass:"user-name"},[t._v(t._s(t.truncate(s.nickname||s.username||"-",10)))])],1)])]}},{key:"analysisCountInfo",fn:function(a){return[e("span",{staticStyle:{"font-weight":"600",color:"#1890ff"}},[t._v(t._s(a||0))])]}},{key:"accuracyInfo",fn:function(a,s){return[e("span",{staticClass:"text-profit"},[t._v(t._s(s.correct||0))]),e("span",{staticClass:"text-muted"},[t._v(" / ")]),e("span",{staticClass:"text-loss"},[t._v(t._s(s.incorrect||0))])]}},{key:"feedbackInfo",fn:function(a,s){return[e("a-tooltip",{attrs:{title:(t.$t("adminAiStats.helpful")||"Helpful")+" / "+(t.$t("adminAiStats.notHelpful")||"Not Helpful")}},[e("span",{staticStyle:{color:"#52c41a"}},[e("a-icon",{attrs:{type:"like"}}),t._v(" "+t._s(s.helpful||0))],1),e("span",{staticClass:"text-muted"},[t._v(" / ")]),e("span",{staticStyle:{color:"#ff4d4f"}},[e("a-icon",{attrs:{type:"dislike"}}),t._v(" "+t._s(s.not_helpful||0))],1)])]}},{key:"lastAnalysisAt",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}}])})],1),e("a-card",{staticClass:"user-table-card",attrs:{bordered:!1}},[e("h4",{staticStyle:{"margin-bottom":"12px",color:"#1e3a5f","font-weight":"600"}},[e("a-icon",{staticStyle:{"margin-right":"8px"},attrs:{type:"history"}}),t._v(" "+t._s(t.$t("adminAiStats.recentTitle")||"Recent Analysis Records")+" ")],1),e("a-table",{attrs:{columns:t.aiRecentColumns,dataSource:t.aiRecentRecords,loading:t.aiStatsLoading,pagination:!1,rowKey:function(t){return t.id},size:"small"},scopedSlots:t._u([{key:"recentUserInfo",fn:function(a,s){return[e("span",{staticClass:"user-cell"},[e("a-avatar",{style:{backgroundColor:t.getUserColor(s.user_id),fontSize:"11px",marginRight:"6px"},attrs:{size:"small"}},[t._v(" "+t._s((s.nickname||s.username||"?").charAt(0).toUpperCase())+" ")]),e("span",{staticClass:"user-name"},[t._v(t._s(t.truncate(s.nickname||s.username||"-",8)))])],1)]}},{key:"recentStatusInfo",fn:function(a){return[e("a-tag",{attrs:{color:"completed"===a?"green":"failed"===a?"red":"blue"}},[t._v(" "+t._s(a)+" ")])]}},{key:"recentCreatedAt",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}}])})],1)],1)],1),e("a-modal",{attrs:{title:t.isEdit?t.$t("userManage.editUser")||"Edit User":t.$t("userManage.createUser")||"Create User",confirmLoading:t.modalLoading},on:{ok:t.handleModalOk,cancel:t.handleModalCancel},model:{value:t.modalVisible,callback:function(e){t.modalVisible=e},expression:"modalVisible"}},[e("a-form",{attrs:{form:t.form,layout:"vertical"}},[e("a-form-item",{attrs:{label:t.$t("userManage.username")||"Username"}},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["username",{rules:[{required:!t.isEdit,message:t.$t("userManage.usernameRequired")||"Please enter username"}]}],expression:"['username', {\n rules: [{ required: !isEdit, message: $t('userManage.usernameRequired') || 'Please enter username' }]\n }]"}],attrs:{disabled:t.isEdit,placeholder:t.$t("userManage.usernamePlaceholder")||"Enter username"}},[e("a-icon",{attrs:{slot:"prefix",type:"user"},slot:"prefix"})],1)],1),t.isEdit?t._e():e("a-form-item",{attrs:{label:t.$t("userManage.password")||"Password"}},[e("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["password",{rules:[{required:!0,message:t.$t("userManage.passwordRequired")||"Please enter password"},{min:6,message:t.$t("userManage.passwordMin")||"Password must be at least 6 characters"}]}],expression:"['password', {\n rules: [\n { required: true, message: $t('userManage.passwordRequired') || 'Please enter password' },\n { min: 6, message: $t('userManage.passwordMin') || 'Password must be at least 6 characters' }\n ]\n }]"}],attrs:{placeholder:t.$t("userManage.passwordPlaceholder")||"Enter password (min 6 characters)"}},[e("a-icon",{attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),e("a-form-item",{attrs:{label:t.$t("userManage.nickname")||"Nickname"}},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["nickname"],expression:"['nickname']"}],attrs:{placeholder:t.$t("userManage.nicknamePlaceholder")||"Enter nickname"}},[e("a-icon",{attrs:{slot:"prefix",type:"smile"},slot:"prefix"})],1)],1),e("a-form-item",{attrs:{label:t.$t("userManage.email")||"Email"}},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["email",{rules:[{type:"email",message:t.$t("userManage.emailInvalid")||"Invalid email format"}]}],expression:"['email', {\n rules: [{ type: 'email', message: $t('userManage.emailInvalid') || 'Invalid email format' }]\n }]"}],attrs:{placeholder:t.$t("userManage.emailPlaceholder")||"Enter email"}},[e("a-icon",{attrs:{slot:"prefix",type:"mail"},slot:"prefix"})],1)],1),e("a-form-item",{attrs:{label:t.$t("userManage.role")||"Role"}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["role",{initialValue:"user"}],expression:"['role', { initialValue: 'user' }]"}],attrs:{placeholder:t.$t("userManage.rolePlaceholder")||"Select role"}},t._l(t.roles,function(a){return e("a-select-option",{key:a.id,attrs:{value:a.id}},[t._v(" "+t._s(t.getRoleLabel(a.id))+" ")])}),1)],1),t.isEdit?e("a-form-item",{attrs:{label:t.$t("userManage.status")||"Status"}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["status",{initialValue:"active"}],expression:"['status', { initialValue: 'active' }]"}],attrs:{placeholder:t.$t("userManage.statusPlaceholder")||"Select status"}},[e("a-select-option",{attrs:{value:"active"}},[t._v(t._s(t.$t("userManage.active")||"Active"))]),e("a-select-option",{attrs:{value:"disabled"}},[t._v(t._s(t.$t("userManage.disabled")||"Disabled"))])],1)],1):t._e()],1)],1),e("a-modal",{attrs:{title:t.$t("userManage.resetPassword")||"Reset Password",confirmLoading:t.resetPasswordLoading},on:{ok:t.handleResetPassword},model:{value:t.resetPasswordVisible,callback:function(e){t.resetPasswordVisible=e},expression:"resetPasswordVisible"}},[e("a-form",{attrs:{form:t.resetPasswordForm,layout:"vertical"}},[e("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{message:t.$t("userManage.resetPasswordWarning")||"This will reset the user's password",type:"warning",showIcon:""}}),e("a-form-item",{attrs:{label:t.$t("userManage.newPassword")||"New Password"}},[e("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["new_password",{rules:[{required:!0,message:t.$t("userManage.passwordRequired")||"Please enter new password"},{min:6,message:t.$t("userManage.passwordMin")||"Password must be at least 6 characters"}]}],expression:"['new_password', {\n rules: [\n { required: true, message: $t('userManage.passwordRequired') || 'Please enter new password' },\n { min: 6, message: $t('userManage.passwordMin') || 'Password must be at least 6 characters' }\n ]\n }]"}],attrs:{placeholder:t.$t("userManage.newPasswordPlaceholder")||"Enter new password"}},[e("a-icon",{attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1)],1)],1),e("a-modal",{attrs:{title:(t.$t("userManage.adjustCredits")||"Adjust Credits")+(t.creditsEditingUser?" - ".concat(t.creditsEditingUser.username):""),confirmLoading:t.creditsLoading},on:{ok:t.handleSetCredits},model:{value:t.creditsModalVisible,callback:function(e){t.creditsModalVisible=e},expression:"creditsModalVisible"}},[e("a-form",{attrs:{layout:"vertical"}},[t.creditsEditingUser?e("div",{staticClass:"current-credits-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("userManage.currentCredits")||"Current Credits")+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatCredits(t.creditsEditingUser.credits)))])]):t._e(),e("a-form-item",{attrs:{label:t.$t("userManage.newCredits")||"New Credits"}},[e("a-input-number",{staticStyle:{width:"100%"},attrs:{min:0,precision:2,placeholder:t.$t("userManage.enterCredits")||"Enter new credits amount"},model:{value:t.newCredits,callback:function(e){t.newCredits=e},expression:"newCredits"}})],1),e("a-form-item",{attrs:{label:t.$t("userManage.remark")||"Remark"}},[e("a-input",{attrs:{placeholder:t.$t("userManage.remarkPlaceholder")||"Optional remark"},model:{value:t.creditsRemark,callback:function(e){t.creditsRemark=e},expression:"creditsRemark"}})],1)],1)],1),e("a-modal",{attrs:{title:(t.$t("userManage.setVip")||"Set VIP")+(t.vipEditingUser?" - ".concat(t.vipEditingUser.username):""),confirmLoading:t.vipLoading},on:{ok:t.handleSetVip},model:{value:t.vipModalVisible,callback:function(e){t.vipModalVisible=e},expression:"vipModalVisible"}},[e("a-form",{attrs:{layout:"vertical"}},[t.vipEditingUser&&t.vipEditingUser.vip_expires_at?e("div",{staticClass:"current-vip-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("userManage.currentVip")||"Current VIP")+":")]),e("span",{staticClass:"value",class:t.isVipActive(t.vipEditingUser.vip_expires_at)?"active":"expired"},[t._v(" "+t._s(t.isVipActive(t.vipEditingUser.vip_expires_at)?(t.$t("userManage.vipActive")||"Active")+" (".concat(t.formatDate(t.vipEditingUser.vip_expires_at),")"):t.$t("userManage.vipExpired")||"Expired")+" ")])]):t._e(),e("a-form-item",{attrs:{label:t.$t("userManage.vipDays")||"VIP Days"}},[e("a-select",{staticStyle:{width:"100%"},model:{value:t.vipDays,callback:function(e){t.vipDays=e},expression:"vipDays"}},[e("a-select-option",{attrs:{value:0}},[t._v(t._s(t.$t("userManage.cancelVip")||"Cancel VIP"))]),e("a-select-option",{attrs:{value:7}},[t._v("7 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:30}},[t._v("30 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:90}},[t._v("90 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:180}},[t._v("180 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:365}},[t._v("365 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:-1}},[t._v(t._s(t.$t("userManage.customDate")||"Custom Date"))])],1)],1),-1===t.vipDays?e("a-form-item",{attrs:{label:t.$t("userManage.vipExpiresAt")||"VIP Expires At"}},[e("a-date-picker",{staticStyle:{width:"100%"},attrs:{showTime:"",format:"YYYY-MM-DD HH:mm:ss"},model:{value:t.vipCustomDate,callback:function(e){t.vipCustomDate=e},expression:"vipCustomDate"}})],1):t._e(),e("a-form-item",{attrs:{label:t.$t("userManage.remark")||"Remark"}},[e("a-input",{attrs:{placeholder:t.$t("userManage.remarkPlaceholder")||"Optional remark"},model:{value:t.vipRemark,callback:function(e){t.vipRemark=e},expression:"vipRemark"}})],1)],1)],1)],1)},r=[],i=a(81127),n=a(56252),o=a(76338),l=(a(2892),a(84841)),d=a(55434),c=a(95353),u={name:"UserManage",mixins:[d.t],data:function(){return{activeTab:"users",loading:!1,users:[],roles:[],searchKeyword:"",pagination:{current:1,pageSize:10,total:0},modalVisible:!1,modalLoading:!1,isEdit:!1,editingUser:null,resetPasswordVisible:!1,resetPasswordLoading:!1,resetPasswordUserId:null,creditsModalVisible:!1,creditsLoading:!1,creditsEditingUser:null,newCredits:0,creditsRemark:"",vipModalVisible:!1,vipLoading:!1,vipEditingUser:null,vipDays:30,vipCustomDate:null,vipRemark:"",strategyLoading:!1,systemStrategies:[],strategySummary:null,strategyStatusFilter:"all",strategySearchKeyword:"",strategyPagination:{current:1,pageSize:20,total:0},strategiesLoaded:!1,orderLoading:!1,orders:[],orderSummary:null,orderStatusFilter:"all",orderSearchKeyword:"",orderPagination:{current:1,pageSize:20,total:0},ordersLoaded:!1,aiStatsLoading:!1,aiUserStats:[],aiRecentRecords:[],aiStatsSummary:null,aiStatsSearchKeyword:"",aiStatsPagination:{current:1,pageSize:20,total:0},aiStatsLoaded:!1}},computed:(0,o.A)((0,o.A)({},(0,c.L8)(["userInfo"])),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},currentUserId:function(){var t;return null===(t=this.userInfo)||void 0===t?void 0:t.id},columns:function(){return[{title:"ID",dataIndex:"id",width:60},{title:this.$t("userManage.username")||"Username",dataIndex:"username",width:120},{title:this.$t("userManage.nickname")||"Nickname",dataIndex:"nickname",width:100},{title:this.$t("userManage.email")||"Email",dataIndex:"email",width:180},{title:this.$t("userManage.role")||"Role",dataIndex:"role",width:90,scopedSlots:{customRender:"role"}},{title:this.$t("userManage.credits")||"Credits",dataIndex:"credits",width:100,scopedSlots:{customRender:"credits"}},{title:"VIP",dataIndex:"vip_expires_at",width:120,scopedSlots:{customRender:"vip_expires_at"}},{title:this.$t("userManage.status")||"Status",dataIndex:"status",width:90,scopedSlots:{customRender:"status"}},{title:this.$t("userManage.lastLogin")||"Last Login",dataIndex:"last_login_at",width:150,scopedSlots:{customRender:"last_login_at"}},{title:this.$t("common.actions")||"Actions",dataIndex:"action",width:180,scopedSlots:{customRender:"action"}}]},strategyColumns:function(){return[{title:"ID",dataIndex:"id",width:60,fixed:"left"},{title:this.$t("systemOverview.colUser")||"User",dataIndex:"username",width:110,fixed:"left",scopedSlots:{customRender:"userInfo"}},{title:this.$t("systemOverview.colStrategy")||"Strategy",dataIndex:"strategy_name",width:160,ellipsis:!0},{title:this.$t("systemOverview.colStatus")||"Status",dataIndex:"status",width:100,scopedSlots:{customRender:"strategyStatus"}},{title:this.$t("systemOverview.colSymbol")||"Symbol",dataIndex:"symbol",width:140,scopedSlots:{customRender:"symbolInfo"}},{title:this.$t("systemOverview.colCapital")||"Capital",dataIndex:"initial_capital",width:110,scopedSlots:{customRender:"capitalInfo"}},{title:this.$t("systemOverview.colPnl")||"PnL / ROI",dataIndex:"total_pnl",width:200,scopedSlots:{customRender:"pnlInfo"}},{title:this.$t("systemOverview.colPositions")||"Pos",dataIndex:"position_count",width:70,align:"center",scopedSlots:{customRender:"positionInfo"}},{title:this.$t("systemOverview.colTrades")||"Trades",dataIndex:"trade_count",width:80,align:"center",scopedSlots:{customRender:"tradeInfo"}},{title:this.$t("systemOverview.colIndicator")||"Indicator",dataIndex:"indicator_name",width:130,scopedSlots:{customRender:"indicatorInfo"}},{title:this.$t("systemOverview.colExchange")||"Exchange",dataIndex:"exchange_name",width:100,scopedSlots:{customRender:"exchangeInfo"}},{title:this.$t("systemOverview.colTimeframe")||"TF",dataIndex:"timeframe",width:70,align:"center",scopedSlots:{customRender:"timeframeInfo"}},{title:this.$t("systemOverview.colLeverage")||"Lev",dataIndex:"leverage",width:70,align:"center",scopedSlots:{customRender:"leverageInfo"}},{title:this.$t("systemOverview.colCreatedAt")||"Created",dataIndex:"created_at",width:150,scopedSlots:{customRender:"createdAtInfo"}}]},orderColumns:function(){return[{title:this.$t("adminOrders.colUser")||"User",dataIndex:"username",width:120,scopedSlots:{customRender:"orderUserInfo"}},{title:this.$t("adminOrders.colType")||"Type",dataIndex:"order_type",width:80,scopedSlots:{customRender:"orderTypeInfo"}},{title:this.$t("adminOrders.colPlan")||"Plan",dataIndex:"plan",width:100,scopedSlots:{customRender:"planInfo"}},{title:this.$t("adminOrders.colAmount")||"Amount",dataIndex:"amount",width:120,scopedSlots:{customRender:"amountInfo"}},{title:this.$t("adminOrders.colStatus")||"Status",dataIndex:"status",width:100,scopedSlots:{customRender:"orderStatusInfo"}},{title:this.$t("adminOrders.colChain")||"Chain",dataIndex:"chain",width:80,scopedSlots:{customRender:"chainInfo"}},{title:this.$t("adminOrders.colAddress")||"Address",dataIndex:"address",width:140,scopedSlots:{customRender:"addressInfo"}},{title:this.$t("adminOrders.colTxHash")||"Tx Hash",dataIndex:"tx_hash",width:160,scopedSlots:{customRender:"txHashInfo"}},{title:this.$t("adminOrders.colCreatedAt")||"Created",dataIndex:"created_at",width:150,scopedSlots:{customRender:"orderCreatedAt"}}]},aiUserColumns:function(){return[{title:this.$t("adminAiStats.colUser")||"User",dataIndex:"username",width:140,scopedSlots:{customRender:"aiUserInfo"}},{title:this.$t("adminAiStats.colAnalysisCount")||"Analyses",dataIndex:"analysis_count",width:100,align:"center",scopedSlots:{customRender:"analysisCountInfo"},sorter:function(t,e){return t.analysis_count-e.analysis_count},defaultSortOrder:"descend"},{title:this.$t("adminAiStats.colSymbols")||"Symbols",dataIndex:"symbol_count",width:90,align:"center"},{title:this.$t("adminAiStats.colMarkets")||"Markets",dataIndex:"market_count",width:90,align:"center"},{title:this.$t("adminAiStats.colAccuracy")||"Correct / Wrong",dataIndex:"correct",width:130,align:"center",scopedSlots:{customRender:"accuracyInfo"}},{title:this.$t("adminAiStats.colFeedback")||"Feedback",dataIndex:"helpful",width:130,align:"center",scopedSlots:{customRender:"feedbackInfo"}},{title:this.$t("adminAiStats.colLastAnalysis")||"Last Analysis",dataIndex:"last_analysis_at",width:160,scopedSlots:{customRender:"lastAnalysisAt"}}]},aiRecentColumns:function(){return[{title:"ID",dataIndex:"id",width:60},{title:this.$t("adminAiStats.colUser")||"User",dataIndex:"username",width:120,scopedSlots:{customRender:"recentUserInfo"}},{title:this.$t("adminAiStats.colMarket")||"Market",dataIndex:"market",width:80},{title:this.$t("adminAiStats.colSymbol")||"Symbol",dataIndex:"symbol",width:120},{title:this.$t("adminAiStats.colModel")||"Model",dataIndex:"model",width:140,ellipsis:!0},{title:this.$t("adminAiStats.colStatus")||"Status",dataIndex:"status",width:100,scopedSlots:{customRender:"recentStatusInfo"}},{title:this.$t("adminAiStats.colCreatedAt")||"Time",dataIndex:"created_at",width:160,scopedSlots:{customRender:"recentCreatedAt"}}]}}),beforeCreate:function(){this.form=this.$form.createForm(this),this.resetPasswordForm=this.$form.createForm(this,{name:"resetPassword"})},mounted:function(){this.loadUsers(),this.loadRoles()},methods:{handleTabChange:function(t){"strategies"!==t||this.strategiesLoaded||this.loadSystemStrategies(),"orders"!==t||this.ordersLoaded||this.loadOrders(),"aiStats"!==t||this.aiStatsLoaded||this.loadAiStats()},loadSystemStrategies:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.strategyLoading=!0,e.p=1,e.n=2,(0,l.DK)({page:t.strategyPagination.current,page_size:t.strategyPagination.pageSize,status:"all"===t.strategyStatusFilter?"":t.strategyStatusFilter,search:t.strategySearchKeyword||""});case 2:a=e.v,1===a.code?(t.systemStrategies=a.data.items||[],t.strategyPagination.total=a.data.total||0,t.strategySummary=a.data.summary||{},t.strategiesLoaded=!0):t.$message.error(a.msg||"Failed to load strategies"),e.n=4;break;case 3:e.p=3,e.v,t.$message.error("Failed to load system strategies");case 4:return e.p=4,t.strategyLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleStrategySearch:function(){this.strategyPagination.current=1,this.loadSystemStrategies()},handleStrategyFilterChange:function(){this.strategyPagination.current=1,this.loadSystemStrategies()},handleStrategyTableChange:function(t){this.strategyPagination.current=t.current,this.strategyPagination.pageSize=t.pageSize,this.loadSystemStrategies()},getUserColor:function(t){var e=["#1890ff","#722ed1","#13c2c2","#fa8c16","#eb2f96","#52c41a","#2f54eb","#faad14"];return e[(t||0)%e.length]},formatNumber:function(t){return t||0===t?Number(t).toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:2}):"0"},formatPnl:function(t){if(!t&&0!==t)return"0";var e=Number(t),a=e>=0?"+":"";return a+e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:4})},truncate:function(t,e){return t?t.length>e?t.substring(0,e)+"...":t:""},loadUsers:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loading=!0,e.p=1,e.n=2,(0,l.aU)({page:t.pagination.current,page_size:t.pagination.pageSize,search:t.searchKeyword||""});case 2:a=e.v,1===a.code?(t.users=a.data.items||[],t.pagination.total=a.data.total||0):t.$message.error(a.msg||"Failed to load users"),e.n=4;break;case 3:e.p=3,e.v,t.$message.error("Failed to load users");case 4:return e.p=4,t.loading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleSearch:function(){this.pagination.current=1,this.loadUsers()},loadRoles:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,l.O0)();case 1:a=e.v,1===a.code&&(t.roles=a.data.roles||[]),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},handleTableChange:function(t){this.pagination.current=t.current,this.pagination.pageSize=t.pageSize,this.loadUsers()},showCreateModal:function(){var t=this;this.isEdit=!1,this.editingUser=null,this.modalVisible=!0,this.$nextTick(function(){t.form.resetFields()})},showEditModal:function(t){var e=this;this.isEdit=!0,this.editingUser=t,this.modalVisible=!0,this.$nextTick(function(){e.form.setFieldsValue({username:t.username,nickname:t.nickname,email:t.email,role:t.role,status:t.status})})},handleModalCancel:function(){this.modalVisible=!1,this.form.resetFields()},handleModalOk:function(){var t=this;this.form.validateFields(function(){var e=(0,n.A)((0,i.A)().m(function e(a,s){var r;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!a){e.n=1;break}return e.a(2);case 1:if(t.modalLoading=!0,e.p=2,!t.isEdit){e.n=4;break}return e.n=3,(0,l.TK)(t.editingUser.id,{nickname:s.nickname,email:s.email,role:s.role,status:s.status});case 3:r=e.v,e.n=6;break;case 4:return e.n=5,(0,l.kg)(s);case 5:r=e.v;case 6:1===r.code?(t.$message.success(r.msg||"Success"),t.modalVisible=!1,t.form.resetFields(),t.loadUsers()):t.$message.error(r.msg||"Operation failed"),e.n=8;break;case 7:e.p=7,e.v,t.$message.error("Operation failed");case 8:return e.p=8,t.modalLoading=!1,e.f(8);case 9:return e.a(2)}},e,null,[[2,7,8,9]])}));return function(t,a){return e.apply(this,arguments)}}())},handleDelete:function(t){var e=this;return(0,n.A)((0,i.A)().m(function a(){var s;return(0,i.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,l.hG)(t);case 1:s=a.v,1===s.code?(e.$message.success(s.msg||"User deleted"),e.loadUsers()):e.$message.error(s.msg||"Delete failed"),a.n=3;break;case 2:a.p=2,a.v,e.$message.error("Delete failed");case 3:return a.a(2)}},a,null,[[0,2]])}))()},showResetPasswordModal:function(t){var e=this;this.resetPasswordUserId=t.id,this.resetPasswordVisible=!0,this.$nextTick(function(){e.resetPasswordForm.resetFields()})},handleResetPassword:function(){var t=this;this.resetPasswordForm.validateFields(function(){var e=(0,n.A)((0,i.A)().m(function e(a,s){var r;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!a){e.n=1;break}return e.a(2);case 1:return t.resetPasswordLoading=!0,e.p=2,e.n=3,(0,l.cw)({user_id:t.resetPasswordUserId,new_password:s.new_password});case 3:r=e.v,1===r.code?(t.$message.success(r.msg||"Password reset successfully"),t.resetPasswordVisible=!1,t.resetPasswordForm.resetFields()):t.$message.error(r.msg||"Reset failed"),e.n=5;break;case 4:e.p=4,e.v,t.$message.error("Reset failed");case 5:return e.p=5,t.resetPasswordLoading=!1,e.f(5);case 6:return e.a(2)}},e,null,[[2,4,5,6]])}));return function(t,a){return e.apply(this,arguments)}}())},getRoleColor:function(t){var e={admin:"red",manager:"orange",user:"blue",viewer:"default"};return e[t]||"default"},getRoleLabel:function(t){var e={admin:this.$t("userManage.roleAdmin")||"Admin",manager:this.$t("userManage.roleManager")||"Manager",user:this.$t("userManage.roleUser")||"User",viewer:this.$t("userManage.roleViewer")||"Viewer"};return e[t]||t},formatTime:function(t){if(!t)return"";var e=new Date("number"===typeof t?1e3*t:t);return e.toLocaleString()},formatCredits:function(t){return t||0===t?Number(t).toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:2}):"0"},formatDate:function(t){if(!t)return"";var e=new Date(t);return e.toLocaleDateString()},isVipActive:function(t){return!!t&&new Date(t)>new Date},showCreditsModal:function(t){this.creditsEditingUser=t,this.newCredits=parseFloat(t.credits)||0,this.creditsRemark="",this.creditsModalVisible=!0},handleSetCredits:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!(t.newCredits<0)){e.n=1;break}return t.$message.error(t.$t("userManage.creditsNonNegative")||"Credits cannot be negative"),e.a(2);case 1:return t.creditsLoading=!0,e.p=2,e.n=3,(0,l.wq)({user_id:t.creditsEditingUser.id,credits:t.newCredits,remark:t.creditsRemark});case 3:a=e.v,1===a.code?(t.$message.success(a.msg||"Credits updated successfully"),t.creditsModalVisible=!1,t.loadUsers()):t.$message.error(a.msg||"Update failed"),e.n=5;break;case 4:e.p=4,e.v,t.$message.error("Update failed");case 5:return e.p=5,t.creditsLoading=!1,e.f(5);case 6:return e.a(2)}},e,null,[[2,4,5,6]])}))()},showVipModal:function(t){this.vipEditingUser=t,this.vipDays=30,this.vipCustomDate=null,this.vipRemark="",this.vipModalVisible=!0},handleSetVip:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a,s;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(a={user_id:t.vipEditingUser.id,remark:t.vipRemark},-1!==t.vipDays){e.n=2;break}if(t.vipCustomDate){e.n=1;break}return t.$message.error(t.$t("userManage.selectDate")||"Please select a date"),e.a(2);case 1:a.vip_expires_at=t.vipCustomDate.toISOString(),e.n=3;break;case 2:a.vip_days=t.vipDays;case 3:return t.vipLoading=!0,e.p=4,e.n=5,(0,l.nY)(a);case 5:s=e.v,1===s.code?(t.$message.success(s.msg||"VIP status updated successfully"),t.vipModalVisible=!1,t.loadUsers()):t.$message.error(s.msg||"Update failed"),e.n=7;break;case 6:e.p=6,e.v,t.$message.error("Update failed");case 7:return e.p=7,t.vipLoading=!1,e.f(7);case 8:return e.a(2)}},e,null,[[4,6,7,8]])}))()},loadOrders:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.orderLoading=!0,e.p=1,e.n=2,(0,l.vi)({page:t.orderPagination.current,page_size:t.orderPagination.pageSize,status:"all"===t.orderStatusFilter?"":t.orderStatusFilter,search:t.orderSearchKeyword||""});case 2:a=e.v,1===a.code?(t.orders=a.data.items||[],t.orderPagination.total=a.data.total||0,t.orderSummary=a.data.summary||{},t.ordersLoaded=!0):t.$message.error(a.msg||"Failed to load orders"),e.n=4;break;case 3:e.p=3,e.v,t.$message.error("Failed to load orders");case 4:return e.p=4,t.orderLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleOrderSearch:function(){this.orderPagination.current=1,this.loadOrders()},handleOrderFilterChange:function(){this.orderPagination.current=1,this.loadOrders()},handleOrderTableChange:function(t){this.orderPagination.current=t.current,this.orderPagination.pageSize=t.pageSize,this.loadOrders()},getOrderStatusColor:function(t){var e={paid:"green",confirmed:"green",pending:"orange",expired:"grey",cancelled:"default",failed:"red"};return e[t]||"default"},getOrderStatusLabel:function(t){var e={paid:this.$t("adminOrders.statusPaid")||"Paid",confirmed:this.$t("adminOrders.statusConfirmed")||"Confirmed",pending:this.$t("adminOrders.statusPending")||"Pending",expired:this.$t("adminOrders.statusExpired")||"Expired",cancelled:this.$t("adminOrders.statusCancelled")||"Cancelled",failed:this.$t("adminOrders.statusFailed")||"Failed"};return e[t]||t},loadAiStats:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.aiStatsLoading=!0,e.p=1,e.n=2,(0,l.d$)({page:t.aiStatsPagination.current,page_size:t.aiStatsPagination.pageSize,search:t.aiStatsSearchKeyword||""});case 2:a=e.v,1===a.code?(t.aiUserStats=a.data.user_stats||[],t.aiRecentRecords=a.data.recent||[],t.aiStatsPagination.total=a.data.user_total||0,t.aiStatsSummary=a.data.summary||{},t.aiStatsLoaded=!0):t.$message.error(a.msg||"Failed to load AI stats"),e.n=4;break;case 3:e.p=3,e.v,t.$message.error("Failed to load AI stats");case 4:return e.p=4,t.aiStatsLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleAiStatsSearch:function(){this.aiStatsPagination.current=1,this.loadAiStats()},handleAiStatsTableChange:function(t){this.aiStatsPagination.current=t.current,this.aiStatsPagination.pageSize=t.pageSize,this.loadAiStats()}}},m=u,p=a(845),g=(0,p.A)(m,s,r,!1,null,"49c4f239",null),v=g.exports},84841:function(t,e,a){a.d(e,{DK:function(){return h},E$:function(){return c},Gl:function(){return p},O0:function(){return d},TK:function(){return n},aU:function(){return r},cw:function(){return l},d$:function(){return S},hG:function(){return o},kg:function(){return i},nY:function(){return y},r7:function(){return u},rx:function(){return v},v9:function(){return g},vF:function(){return m},vi:function(){return _},wq:function(){return f}});var s=a(75769);function r(t){return(0,s.Ay)({url:"/api/users/list",method:"get",params:t})}function i(t){return(0,s.Ay)({url:"/api/users/create",method:"post",data:t})}function n(t,e){return(0,s.Ay)({url:"/api/users/update",method:"put",params:{id:t},data:e})}function o(t){return(0,s.Ay)({url:"/api/users/delete",method:"delete",params:{id:t}})}function l(t){return(0,s.Ay)({url:"/api/users/reset-password",method:"post",data:t})}function d(){return(0,s.Ay)({url:"/api/users/roles",method:"get"})}function c(){return(0,s.Ay)({url:"/api/users/profile",method:"get"})}function u(t){return(0,s.Ay)({url:"/api/users/profile/update",method:"put",data:t})}function m(){return(0,s.Ay)({url:"/api/users/notification-settings",method:"get"})}function p(t){return(0,s.Ay)({url:"/api/users/notification-settings",method:"put",data:t})}function g(t){return(0,s.Ay)({url:"/api/users/my-credits-log",method:"get",params:t})}function v(t){return(0,s.Ay)({url:"/api/users/my-referrals",method:"get",params:t})}function f(t){return(0,s.Ay)({url:"/api/users/set-credits",method:"post",data:t})}function y(t){return(0,s.Ay)({url:"/api/users/set-vip",method:"post",data:t})}function h(t){return(0,s.Ay)({url:"/api/users/system-strategies",method:"get",params:t})}function _(t){return(0,s.Ay)({url:"/api/users/admin-orders",method:"get",params:t})}function S(t){return(0,s.Ay)({url:"/api/users/admin-ai-stats",method:"get",params:t})}}}]); \ No newline at end of file diff --git a/frontend/dist/js/811.bdce7b14.js b/frontend/dist/js/811.bdce7b14.js new file mode 100644 index 0000000..aa3f3e4 --- /dev/null +++ b/frontend/dist/js/811.bdce7b14.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[811],{6811:function(t,e,a){a.r(e),a.d(e,{default:function(){return v}});var s=function(){var t=this,e=t._self._c;return e("div",{staticClass:"user-manage-page",class:{"theme-dark":t.isDarkTheme}},[e("div",{staticClass:"page-header"},[e("h2",{staticClass:"page-title"},[e("a-icon",{attrs:{type:"team"}}),e("span",[t._v(t._s(t.$t("userManage.title")||"User Management"))])],1),e("p",{staticClass:"page-desc"},[t._v(t._s(t.$t("userManage.description")||"Manage system users, roles and permissions"))])]),e("a-tabs",{staticClass:"manage-tabs",on:{change:t.handleTabChange},model:{value:t.activeTab,callback:function(e){t.activeTab=e},expression:"activeTab"}},[e("a-tab-pane",{key:"users",attrs:{tab:t.$t("userManage.tabUsers")||"User Management"}},[e("div",{staticClass:"toolbar"},[e("div",{staticClass:"toolbar-left"},[e("a-button",{attrs:{type:"primary"},on:{click:t.showCreateModal}},[e("a-icon",{attrs:{type:"user-add"}}),t._v(" "+t._s(t.$t("userManage.createUser")||"Create User")+" ")],1),e("a-button",{on:{click:t.loadUsers}},[e("a-icon",{attrs:{type:"reload"}}),t._v(" "+t._s(t.$t("common.refresh")||"Refresh")+" ")],1)],1),e("div",{staticClass:"toolbar-right"},[e("a-input-search",{staticStyle:{width:"280px"},attrs:{placeholder:t.$t("userManage.searchPlaceholder")||"Search by username/email",allowClear:""},on:{search:t.handleSearch,pressEnter:t.handleSearch},model:{value:t.searchKeyword,callback:function(e){t.searchKeyword=e},expression:"searchKeyword"}})],1)]),e("a-card",{staticClass:"user-table-card",attrs:{bordered:!1}},[e("a-table",{attrs:{columns:t.columns,dataSource:t.users,loading:t.loading,pagination:t.pagination,rowKey:function(t){return t.id}},on:{change:t.handleTableChange},scopedSlots:t._u([{key:"status",fn:function(a){return[e("a-tag",{attrs:{color:"active"===a?"green":"red"}},[t._v(" "+t._s("active"===a?t.$t("userManage.active")||"Active":t.$t("userManage.disabled")||"Disabled")+" ")])]}},{key:"role",fn:function(a){return[e("a-tag",{attrs:{color:t.getRoleColor(a)}},[t._v(" "+t._s(t.getRoleLabel(a))+" ")])]}},{key:"last_login_at",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v(t._s(t.$t("userManage.neverLogin")||"Never"))])]}},{key:"credits",fn:function(a){return[e("span",{staticClass:"credits-value"},[t._v(t._s(t.formatCredits(a)))])]}},{key:"vip_expires_at",fn:function(a){return[a&&t.isVipActive(a)?[e("a-tag",{attrs:{color:"gold"}},[e("a-icon",{attrs:{type:"crown"}}),t._v(" "+t._s(t.formatDate(a))+" ")],1)]:e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"action",fn:function(a,s){return[e("a-space",[e("a-tooltip",{attrs:{title:t.$t("common.edit")||"Edit"}},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.showEditModal(s)}}},[e("a-icon",{attrs:{type:"edit"}})],1)],1),e("a-tooltip",{attrs:{title:t.$t("userManage.adjustCredits")||"Adjust Credits"}},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.showCreditsModal(s)}}},[e("a-icon",{staticStyle:{color:"#722ed1"},attrs:{type:"wallet"}})],1)],1),e("a-tooltip",{attrs:{title:t.$t("userManage.setVip")||"Set VIP"}},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.showVipModal(s)}}},[e("a-icon",{staticStyle:{color:"#faad14"},attrs:{type:"crown"}})],1)],1),e("a-tooltip",{attrs:{title:t.$t("userManage.resetPassword")||"Reset Password"}},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.showResetPasswordModal(s)}}},[e("a-icon",{attrs:{type:"key"}})],1)],1),e("a-tooltip",{attrs:{title:t.$t("common.delete")||"Delete"}},[e("a-popconfirm",{attrs:{title:t.$t("userManage.confirmDelete")||"Are you sure to delete this user?"},on:{confirm:function(e){return t.handleDelete(s.id)}}},[e("a-button",{attrs:{type:"link",size:"small",disabled:s.id===t.currentUserId}},[e("a-icon",{staticStyle:{color:"#ff4d4f"},attrs:{type:"delete"}})],1)],1)],1)],1)]}}])})],1)],1),e("a-tab-pane",{key:"strategies",attrs:{tab:t.$t("systemOverview.tabTitle")||"System Overview"}},[t.strategySummary?e("div",{staticClass:"summary-cards"},[e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #667eea, #764ba2)"}},[e("a-icon",{attrs:{type:"fund"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.strategySummary.total_strategies||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("systemOverview.totalStrategies")||"Total Strategies"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #11998e, #38ef7d)"}},[e("a-icon",{attrs:{type:"play-circle"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.strategySummary.running_strategies||0))]),e("div",{staticClass:"summary-sub"},[t._v(" "+t._s(t.$t("systemOverview.live")||"实盘")+": "+t._s(t.strategySummary.running_live_strategies||0)+" / "+t._s(t.$t("systemOverview.signal")||"仅通知")+": "+t._s(t.strategySummary.running_signal_strategies||0)+" ")]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("systemOverview.runningStrategies")||"Running"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #f093fb, #f5576c)"}},[e("a-icon",{attrs:{type:"dollar"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.formatNumber(t.strategySummary.total_capital)))]),e("div",{staticClass:"summary-sub"},[t._v(" "+t._s(t.$t("systemOverview.live")||"实盘")+": "+t._s(t.formatNumber(t.strategySummary.live_capital))+" / "+t._s(t.$t("systemOverview.signal")||"仅通知")+": "+t._s(t.formatNumber(t.strategySummary.signal_capital))+" ")]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("systemOverview.totalCapital")||"Total Capital"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",style:{background:(t.strategySummary.total_pnl||0)>=0?"linear-gradient(135deg, #11998e, #38ef7d)":"linear-gradient(135deg, #ff416c, #ff4b2b)"}},[e("a-icon",{attrs:{type:"rise"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value",class:(t.strategySummary.total_pnl||0)>=0?"text-profit":"text-loss"},[t._v(" "+t._s(t.formatPnl(t.strategySummary.total_pnl))+" "),e("span",{staticClass:"roi-badge"},[t._v(t._s(t.strategySummary.total_roi||0)+"%")])]),e("div",{staticClass:"summary-sub"},[t._v(" "+t._s(t.$t("systemOverview.live")||"实盘")+": "+t._s(t.formatPnl(t.strategySummary.live_pnl))+" / "+t._s(t.$t("systemOverview.signal")||"仅通知")+": "+t._s(t.formatPnl(t.strategySummary.signal_pnl))+" ")]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("systemOverview.totalPnl")||"Total PnL"))])])])]):t._e(),e("div",{staticClass:"toolbar"},[e("div",{staticClass:"toolbar-left"},[e("a-button",{on:{click:t.loadSystemStrategies}},[e("a-icon",{attrs:{type:"reload"}}),t._v(" "+t._s(t.$t("common.refresh")||"Refresh")+" ")],1),e("a-select",{staticStyle:{width:"140px"},on:{change:t.handleStrategyFilterChange},model:{value:t.strategyStatusFilter,callback:function(e){t.strategyStatusFilter=e},expression:"strategyStatusFilter"}},[e("a-select-option",{attrs:{value:"all"}},[t._v(t._s(t.$t("systemOverview.filterAll")||"All Status"))]),e("a-select-option",{attrs:{value:"running"}},[t._v(t._s(t.$t("systemOverview.filterRunning")||"Running"))]),e("a-select-option",{attrs:{value:"stopped"}},[t._v(t._s(t.$t("systemOverview.filterStopped")||"Stopped"))])],1)],1),e("div",{staticClass:"toolbar-right"},[e("a-input-search",{staticStyle:{width:"280px"},attrs:{placeholder:t.$t("systemOverview.searchPlaceholder")||"Search strategy/symbol/user",allowClear:""},on:{search:t.handleStrategySearch,pressEnter:t.handleStrategySearch},model:{value:t.strategySearchKeyword,callback:function(e){t.strategySearchKeyword=e},expression:"strategySearchKeyword"}})],1)]),e("a-card",{staticClass:"user-table-card",attrs:{bordered:!1}},[e("a-table",{attrs:{columns:t.strategyColumns,dataSource:t.systemStrategies,loading:t.strategyLoading,pagination:t.strategyPagination,rowKey:function(t){return t.id},scroll:{x:1600}},on:{change:t.handleStrategyTableChange},scopedSlots:t._u([{key:"strategyStatus",fn:function(a){return[e("span",{staticClass:"status-cell"},[e("span",{staticClass:"status-dot",class:"running"===a?"dot-running":"dot-stopped"}),e("span",{class:"running"===a?"status-running":"status-stopped"},[t._v(" "+t._s("running"===a?t.$t("systemOverview.running")||"Running":t.$t("systemOverview.stopped")||"Stopped")+" ")])])]}},{key:"userInfo",fn:function(a,s){return[e("a-tooltip",{attrs:{title:s.nickname||s.username||"-"}},[e("span",{staticClass:"user-cell"},[e("a-avatar",{style:{backgroundColor:t.getUserColor(s.user_id),fontSize:"11px",marginRight:"6px"},attrs:{size:"small"}},[t._v(" "+t._s((s.nickname||s.username||"?").charAt(0).toUpperCase())+" ")]),e("span",{staticClass:"user-name"},[t._v(t._s(t.truncate(s.nickname||s.username||"-",8)))])],1)])]}},{key:"symbolInfo",fn:function(a,s){return[e("div",[e("span",{staticClass:"symbol-text"},[t._v(t._s(s.symbol||"-"))]),"cross_sectional"===s.cs_strategy_type?e("a-tag",{staticStyle:{"margin-left":"4px"},attrs:{color:"purple",size:"small"}},[t._v("CS")]):t._e()],1),"cross_sectional"===s.cs_strategy_type&&s.symbol_list&&s.symbol_list.length?e("div",{staticClass:"symbol-count text-muted"},[t._v(" "+t._s(s.symbol_list.length)+" "+t._s(t.$t("systemOverview.symbols")||"symbols")+" ")]):t._e()]}},{key:"capitalInfo",fn:function(a){return[e("span",[t._v(t._s(t.formatNumber(a)))])]}},{key:"pnlInfo",fn:function(a,s){return[e("div",{class:s.total_pnl>=0?"text-profit":"text-loss"},[e("span",{staticClass:"pnl-value"},[t._v(t._s(t.formatPnl(s.total_pnl)))]),e("span",{staticClass:"roi-text"},[t._v("("+t._s(s.roi>=0?"+":"")+t._s(s.roi)+"%)")])]),e("div",{staticClass:"pnl-detail text-muted"},[e("span",[t._v(t._s(t.$t("systemOverview.realized")||"Real")+": "+t._s(t.formatPnl(s.total_realized_pnl)))]),e("span",{staticStyle:{"margin-left":"8px"}},[t._v(t._s(t.$t("systemOverview.unrealized")||"Unreal")+": "+t._s(t.formatPnl(s.total_unrealized_pnl)))])])]}},{key:"positionInfo",fn:function(t,a){return[e("a-badge",{attrs:{count:a.position_count,numberStyle:{backgroundColor:a.position_count>0?"#52c41a":"#d9d9d9"}}})]}},{key:"tradeInfo",fn:function(a){return[e("span",[t._v(t._s(a||0))])]}},{key:"indicatorInfo",fn:function(a){return[a?e("a-tooltip",{attrs:{title:a}},[e("span",{staticClass:"indicator-name"},[t._v(t._s(t.truncate(a,16)))])]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"exchangeInfo",fn:function(a){return[a?e("span",{staticClass:"exchange-name"},[t._v(t._s(a))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"timeframeInfo",fn:function(a){return[a?e("a-tag",{attrs:{size:"small"}},[t._v(t._s(a))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"leverageInfo",fn:function(a){return[a>1?e("span",{staticStyle:{color:"#fa8c16","font-weight":"600"}},[t._v(t._s(a)+"x")]):e("span",[t._v(t._s(a||1)+"x")])]}},{key:"createdAtInfo",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}}])})],1)],1),e("a-tab-pane",{key:"orders",attrs:{tab:t.$t("adminOrders.tabTitle")||"Order List"}},[t.orderSummary?e("div",{staticClass:"summary-cards"},[e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #667eea, #764ba2)"}},[e("a-icon",{attrs:{type:"file-text"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.orderSummary.total_orders||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminOrders.totalOrders")||"Total Orders"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #11998e, #38ef7d)"}},[e("a-icon",{attrs:{type:"check-circle"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.orderSummary.paid_orders||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminOrders.paidOrders")||"Paid"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #f093fb, #f5576c)"}},[e("a-icon",{attrs:{type:"clock-circle"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.orderSummary.pending_orders||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminOrders.pendingOrders")||"Pending"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #fa709a, #fee140)"}},[e("a-icon",{attrs:{type:"dollar"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.formatNumber(t.orderSummary.total_revenue))+" "),e("span",{staticStyle:{"font-size":"13px",color:"#999"}},[t._v("USDT")])]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminOrders.totalRevenue")||"Total Revenue"))])])])]):t._e(),e("div",{staticClass:"toolbar"},[e("div",{staticClass:"toolbar-left"},[e("a-button",{on:{click:t.loadOrders}},[e("a-icon",{attrs:{type:"reload"}}),t._v(" "+t._s(t.$t("common.refresh")||"Refresh")+" ")],1),e("a-select",{staticStyle:{width:"140px"},on:{change:t.handleOrderFilterChange},model:{value:t.orderStatusFilter,callback:function(e){t.orderStatusFilter=e},expression:"orderStatusFilter"}},[e("a-select-option",{attrs:{value:"all"}},[t._v(t._s(t.$t("adminOrders.filterAll")||"All Status"))]),e("a-select-option",{attrs:{value:"pending"}},[t._v(t._s(t.$t("adminOrders.filterPending")||"Pending"))]),e("a-select-option",{attrs:{value:"paid"}},[t._v(t._s(t.$t("adminOrders.filterPaid")||"Paid"))]),e("a-select-option",{attrs:{value:"confirmed"}},[t._v(t._s(t.$t("adminOrders.filterConfirmed")||"Confirmed"))]),e("a-select-option",{attrs:{value:"expired"}},[t._v(t._s(t.$t("adminOrders.filterExpired")||"Expired"))])],1)],1),e("div",{staticClass:"toolbar-right"},[e("a-input-search",{staticStyle:{width:"280px"},attrs:{placeholder:t.$t("adminOrders.searchPlaceholder")||"Search by username/email",allowClear:""},on:{search:t.handleOrderSearch,pressEnter:t.handleOrderSearch},model:{value:t.orderSearchKeyword,callback:function(e){t.orderSearchKeyword=e},expression:"orderSearchKeyword"}})],1)]),e("a-card",{staticClass:"user-table-card",attrs:{bordered:!1}},[e("a-table",{attrs:{columns:t.orderColumns,dataSource:t.orders,loading:t.orderLoading,pagination:t.orderPagination,rowKey:function(t){return t.order_type+"-"+t.id},scroll:{x:1400}},on:{change:t.handleOrderTableChange},scopedSlots:t._u([{key:"orderUserInfo",fn:function(a,s){return[e("a-tooltip",{attrs:{title:(s.nickname||s.username||"-")+" ("+(s.user_email||"")+")"}},[e("span",{staticClass:"user-cell"},[e("a-avatar",{style:{backgroundColor:t.getUserColor(s.user_id),fontSize:"11px",marginRight:"6px"},attrs:{size:"small"}},[t._v(" "+t._s((s.nickname||s.username||"?").charAt(0).toUpperCase())+" ")]),e("span",{staticClass:"user-name"},[t._v(t._s(t.truncate(s.nickname||s.username||"-",10)))])],1)])]}},{key:"orderTypeInfo",fn:function(a){return[e("a-tag",{attrs:{color:"usdt"===a?"green":"blue"}},[t._v(" "+t._s("usdt"===a?"USDT":"Mock")+" ")])]}},{key:"planInfo",fn:function(a){return[e("a-tag",{attrs:{color:"lifetime"===a?"gold":"yearly"===a?"purple":"cyan"}},[t._v(" "+t._s("lifetime"===a?t.$t("adminOrders.lifetime")||"Lifetime":"yearly"===a?t.$t("adminOrders.yearly")||"Yearly":t.$t("adminOrders.monthly")||"Monthly")+" ")])]}},{key:"amountInfo",fn:function(a,s){return[e("span",{staticStyle:{"font-weight":"600"}},[t._v(t._s(a))]),e("span",{staticClass:"text-muted",staticStyle:{"margin-left":"4px"}},[t._v(t._s(s.currency))])]}},{key:"orderStatusInfo",fn:function(a){return[e("a-tag",{attrs:{color:t.getOrderStatusColor(a)}},[t._v(t._s(t.getOrderStatusLabel(a)))])]}},{key:"chainInfo",fn:function(a){return[a?e("span",[t._v(t._s(a))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"addressInfo",fn:function(a){return[a?e("a-tooltip",{attrs:{title:a}},[e("span",{staticClass:"address-text"},[t._v(t._s(t.truncate(a,12)))])]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"txHashInfo",fn:function(a){return[a?e("a-tooltip",{attrs:{title:a}},[e("span",{staticClass:"hash-text"},[t._v(t._s(t.truncate(a,14)))])]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"orderCreatedAt",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}}])})],1)],1),e("a-tab-pane",{key:"aiStats",attrs:{tab:t.$t("adminAiStats.tabTitle")||"AI Analysis"}},[t.aiStatsSummary?e("div",{staticClass:"summary-cards"},[e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #667eea, #764ba2)"}},[e("a-icon",{attrs:{type:"thunderbolt"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.aiStatsSummary.total_analyses||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminAiStats.totalAnalyses")||"Total Analyses"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #11998e, #38ef7d)"}},[e("a-icon",{attrs:{type:"team"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.aiStatsSummary.unique_users||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminAiStats.activeUsers")||"Active Users"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #f093fb, #f5576c)"}},[e("a-icon",{attrs:{type:"stock"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.aiStatsSummary.unique_symbols||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminAiStats.uniqueSymbols")||"Symbols Analyzed"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #fa709a, #fee140)"}},[e("a-icon",{attrs:{type:"like"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(" "+t._s(t.aiStatsSummary.correct_count||0)+" "),e("span",{staticStyle:{"font-size":"13px",color:"#999"}},[t._v("/ "+t._s(t.aiStatsSummary.total_memory||0))])]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminAiStats.accuracy")||"Correct / Verified"))])])])]):t._e(),e("div",{staticClass:"toolbar"},[e("div",{staticClass:"toolbar-left"},[e("a-button",{on:{click:t.loadAiStats}},[e("a-icon",{attrs:{type:"reload"}}),t._v(" "+t._s(t.$t("common.refresh")||"Refresh")+" ")],1)],1),e("div",{staticClass:"toolbar-right"},[e("a-input-search",{staticStyle:{width:"280px"},attrs:{placeholder:t.$t("adminAiStats.searchPlaceholder")||"Search by username",allowClear:""},on:{search:t.handleAiStatsSearch,pressEnter:t.handleAiStatsSearch},model:{value:t.aiStatsSearchKeyword,callback:function(e){t.aiStatsSearchKeyword=e},expression:"aiStatsSearchKeyword"}})],1)]),e("a-card",{staticClass:"user-table-card",staticStyle:{"margin-bottom":"20px"},attrs:{bordered:!1}},[e("h4",{staticStyle:{"margin-bottom":"12px",color:"#1e3a5f","font-weight":"600"}},[e("a-icon",{staticStyle:{"margin-right":"8px"},attrs:{type:"bar-chart"}}),t._v(" "+t._s(t.$t("adminAiStats.userStatsTitle")||"Per-User Statistics")+" ")],1),e("a-table",{attrs:{columns:t.aiUserColumns,dataSource:t.aiUserStats,loading:t.aiStatsLoading,pagination:t.aiStatsPagination,rowKey:function(t){return t.user_id}},on:{change:t.handleAiStatsTableChange},scopedSlots:t._u([{key:"aiUserInfo",fn:function(a,s){return[e("a-tooltip",{attrs:{title:(s.nickname||s.username||"-")+" ("+(s.email||"")+")"}},[e("span",{staticClass:"user-cell"},[e("a-avatar",{style:{backgroundColor:t.getUserColor(s.user_id),fontSize:"11px",marginRight:"6px"},attrs:{size:"small"}},[t._v(" "+t._s((s.nickname||s.username||"?").charAt(0).toUpperCase())+" ")]),e("span",{staticClass:"user-name"},[t._v(t._s(t.truncate(s.nickname||s.username||"-",10)))])],1)])]}},{key:"analysisCountInfo",fn:function(a){return[e("span",{staticStyle:{"font-weight":"600",color:"#1890ff"}},[t._v(t._s(a||0))])]}},{key:"accuracyInfo",fn:function(a,s){return[e("span",{staticClass:"text-profit"},[t._v(t._s(s.correct||0))]),e("span",{staticClass:"text-muted"},[t._v(" / ")]),e("span",{staticClass:"text-loss"},[t._v(t._s(s.incorrect||0))])]}},{key:"feedbackInfo",fn:function(a,s){return[e("a-tooltip",{attrs:{title:(t.$t("adminAiStats.helpful")||"Helpful")+" / "+(t.$t("adminAiStats.notHelpful")||"Not Helpful")}},[e("span",{staticStyle:{color:"#52c41a"}},[e("a-icon",{attrs:{type:"like"}}),t._v(" "+t._s(s.helpful||0))],1),e("span",{staticClass:"text-muted"},[t._v(" / ")]),e("span",{staticStyle:{color:"#ff4d4f"}},[e("a-icon",{attrs:{type:"dislike"}}),t._v(" "+t._s(s.not_helpful||0))],1)])]}},{key:"lastAnalysisAt",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}}])})],1),e("a-card",{staticClass:"user-table-card",attrs:{bordered:!1}},[e("h4",{staticStyle:{"margin-bottom":"12px",color:"#1e3a5f","font-weight":"600"}},[e("a-icon",{staticStyle:{"margin-right":"8px"},attrs:{type:"history"}}),t._v(" "+t._s(t.$t("adminAiStats.recentTitle")||"Recent Analysis Records")+" ")],1),e("a-table",{attrs:{columns:t.aiRecentColumns,dataSource:t.aiRecentRecords,loading:t.aiStatsLoading,pagination:!1,rowKey:function(t){return t.id},size:"small"},scopedSlots:t._u([{key:"recentUserInfo",fn:function(a,s){return[e("span",{staticClass:"user-cell"},[e("a-avatar",{style:{backgroundColor:t.getUserColor(s.user_id),fontSize:"11px",marginRight:"6px"},attrs:{size:"small"}},[t._v(" "+t._s((s.nickname||s.username||"?").charAt(0).toUpperCase())+" ")]),e("span",{staticClass:"user-name"},[t._v(t._s(t.truncate(s.nickname||s.username||"-",8)))])],1)]}},{key:"recentStatusInfo",fn:function(a){return[e("a-tag",{attrs:{color:"completed"===a?"green":"failed"===a?"red":"blue"}},[t._v(" "+t._s(a)+" ")])]}},{key:"recentCreatedAt",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}}])})],1)],1)],1),e("a-modal",{attrs:{title:t.isEdit?t.$t("userManage.editUser")||"Edit User":t.$t("userManage.createUser")||"Create User",confirmLoading:t.modalLoading},on:{ok:t.handleModalOk,cancel:t.handleModalCancel},model:{value:t.modalVisible,callback:function(e){t.modalVisible=e},expression:"modalVisible"}},[e("a-form",{attrs:{form:t.form,layout:"vertical"}},[e("a-form-item",{attrs:{label:t.$t("userManage.username")||"Username"}},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["username",{rules:[{required:!t.isEdit,message:t.$t("userManage.usernameRequired")||"Please enter username"}]}],expression:"['username', {\n rules: [{ required: !isEdit, message: $t('userManage.usernameRequired') || 'Please enter username' }]\n }]"}],attrs:{disabled:t.isEdit,placeholder:t.$t("userManage.usernamePlaceholder")||"Enter username"}},[e("a-icon",{attrs:{slot:"prefix",type:"user"},slot:"prefix"})],1)],1),t.isEdit?t._e():e("a-form-item",{attrs:{label:t.$t("userManage.password")||"Password"}},[e("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["password",{rules:[{required:!0,message:t.$t("userManage.passwordRequired")||"Please enter password"},{min:6,message:t.$t("userManage.passwordMin")||"Password must be at least 6 characters"}]}],expression:"['password', {\n rules: [\n { required: true, message: $t('userManage.passwordRequired') || 'Please enter password' },\n { min: 6, message: $t('userManage.passwordMin') || 'Password must be at least 6 characters' }\n ]\n }]"}],attrs:{placeholder:t.$t("userManage.passwordPlaceholder")||"Enter password (min 6 characters)"}},[e("a-icon",{attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),e("a-form-item",{attrs:{label:t.$t("userManage.nickname")||"Nickname"}},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["nickname"],expression:"['nickname']"}],attrs:{placeholder:t.$t("userManage.nicknamePlaceholder")||"Enter nickname"}},[e("a-icon",{attrs:{slot:"prefix",type:"smile"},slot:"prefix"})],1)],1),e("a-form-item",{attrs:{label:t.$t("userManage.email")||"Email"}},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["email",{rules:[{type:"email",message:t.$t("userManage.emailInvalid")||"Invalid email format"}]}],expression:"['email', {\n rules: [{ type: 'email', message: $t('userManage.emailInvalid') || 'Invalid email format' }]\n }]"}],attrs:{placeholder:t.$t("userManage.emailPlaceholder")||"Enter email"}},[e("a-icon",{attrs:{slot:"prefix",type:"mail"},slot:"prefix"})],1)],1),e("a-form-item",{attrs:{label:t.$t("userManage.role")||"Role"}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["role",{initialValue:"user"}],expression:"['role', { initialValue: 'user' }]"}],attrs:{placeholder:t.$t("userManage.rolePlaceholder")||"Select role"}},t._l(t.roles,function(a){return e("a-select-option",{key:a.id,attrs:{value:a.id}},[t._v(" "+t._s(t.getRoleLabel(a.id))+" ")])}),1)],1),t.isEdit?e("a-form-item",{attrs:{label:t.$t("userManage.status")||"Status"}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["status",{initialValue:"active"}],expression:"['status', { initialValue: 'active' }]"}],attrs:{placeholder:t.$t("userManage.statusPlaceholder")||"Select status"}},[e("a-select-option",{attrs:{value:"active"}},[t._v(t._s(t.$t("userManage.active")||"Active"))]),e("a-select-option",{attrs:{value:"disabled"}},[t._v(t._s(t.$t("userManage.disabled")||"Disabled"))])],1)],1):t._e()],1)],1),e("a-modal",{attrs:{title:t.$t("userManage.resetPassword")||"Reset Password",confirmLoading:t.resetPasswordLoading},on:{ok:t.handleResetPassword},model:{value:t.resetPasswordVisible,callback:function(e){t.resetPasswordVisible=e},expression:"resetPasswordVisible"}},[e("a-form",{attrs:{form:t.resetPasswordForm,layout:"vertical"}},[e("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{message:t.$t("userManage.resetPasswordWarning")||"This will reset the user's password",type:"warning",showIcon:""}}),e("a-form-item",{attrs:{label:t.$t("userManage.newPassword")||"New Password"}},[e("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["new_password",{rules:[{required:!0,message:t.$t("userManage.passwordRequired")||"Please enter new password"},{min:6,message:t.$t("userManage.passwordMin")||"Password must be at least 6 characters"}]}],expression:"['new_password', {\n rules: [\n { required: true, message: $t('userManage.passwordRequired') || 'Please enter new password' },\n { min: 6, message: $t('userManage.passwordMin') || 'Password must be at least 6 characters' }\n ]\n }]"}],attrs:{placeholder:t.$t("userManage.newPasswordPlaceholder")||"Enter new password"}},[e("a-icon",{attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1)],1)],1),e("a-modal",{attrs:{title:(t.$t("userManage.adjustCredits")||"Adjust Credits")+(t.creditsEditingUser?" - ".concat(t.creditsEditingUser.username):""),confirmLoading:t.creditsLoading},on:{ok:t.handleSetCredits},model:{value:t.creditsModalVisible,callback:function(e){t.creditsModalVisible=e},expression:"creditsModalVisible"}},[e("a-form",{attrs:{layout:"vertical"}},[t.creditsEditingUser?e("div",{staticClass:"current-credits-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("userManage.currentCredits")||"Current Credits")+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatCredits(t.creditsEditingUser.credits)))])]):t._e(),e("a-form-item",{attrs:{label:t.$t("userManage.newCredits")||"New Credits"}},[e("a-input-number",{staticStyle:{width:"100%"},attrs:{min:0,precision:2,placeholder:t.$t("userManage.enterCredits")||"Enter new credits amount"},model:{value:t.newCredits,callback:function(e){t.newCredits=e},expression:"newCredits"}})],1),e("a-form-item",{attrs:{label:t.$t("userManage.remark")||"Remark"}},[e("a-input",{attrs:{placeholder:t.$t("userManage.remarkPlaceholder")||"Optional remark"},model:{value:t.creditsRemark,callback:function(e){t.creditsRemark=e},expression:"creditsRemark"}})],1)],1)],1),e("a-modal",{attrs:{title:(t.$t("userManage.setVip")||"Set VIP")+(t.vipEditingUser?" - ".concat(t.vipEditingUser.username):""),confirmLoading:t.vipLoading},on:{ok:t.handleSetVip},model:{value:t.vipModalVisible,callback:function(e){t.vipModalVisible=e},expression:"vipModalVisible"}},[e("a-form",{attrs:{layout:"vertical"}},[t.vipEditingUser&&t.vipEditingUser.vip_expires_at?e("div",{staticClass:"current-vip-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("userManage.currentVip")||"Current VIP")+":")]),e("span",{staticClass:"value",class:t.isVipActive(t.vipEditingUser.vip_expires_at)?"active":"expired"},[t._v(" "+t._s(t.isVipActive(t.vipEditingUser.vip_expires_at)?(t.$t("userManage.vipActive")||"Active")+" (".concat(t.formatDate(t.vipEditingUser.vip_expires_at),")"):t.$t("userManage.vipExpired")||"Expired")+" ")])]):t._e(),e("a-form-item",{attrs:{label:t.$t("userManage.vipDays")||"VIP Days"}},[e("a-select",{staticStyle:{width:"100%"},model:{value:t.vipDays,callback:function(e){t.vipDays=e},expression:"vipDays"}},[e("a-select-option",{attrs:{value:0}},[t._v(t._s(t.$t("userManage.cancelVip")||"Cancel VIP"))]),e("a-select-option",{attrs:{value:7}},[t._v("7 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:30}},[t._v("30 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:90}},[t._v("90 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:180}},[t._v("180 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:365}},[t._v("365 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:-1}},[t._v(t._s(t.$t("userManage.customDate")||"Custom Date"))])],1)],1),-1===t.vipDays?e("a-form-item",{attrs:{label:t.$t("userManage.vipExpiresAt")||"VIP Expires At"}},[e("a-date-picker",{staticStyle:{width:"100%"},attrs:{showTime:"",format:"YYYY-MM-DD HH:mm:ss"},model:{value:t.vipCustomDate,callback:function(e){t.vipCustomDate=e},expression:"vipCustomDate"}})],1):t._e(),e("a-form-item",{attrs:{label:t.$t("userManage.remark")||"Remark"}},[e("a-input",{attrs:{placeholder:t.$t("userManage.remarkPlaceholder")||"Optional remark"},model:{value:t.vipRemark,callback:function(e){t.vipRemark=e},expression:"vipRemark"}})],1)],1)],1)],1)},r=[],i=a(81127),n=a(56252),o=a(76338),l=a(84841),d=a(55434),c=a(95353),u={name:"UserManage",mixins:[d.t],data:function(){return{activeTab:"users",loading:!1,users:[],roles:[],searchKeyword:"",pagination:{current:1,pageSize:10,total:0},modalVisible:!1,modalLoading:!1,isEdit:!1,editingUser:null,resetPasswordVisible:!1,resetPasswordLoading:!1,resetPasswordUserId:null,creditsModalVisible:!1,creditsLoading:!1,creditsEditingUser:null,newCredits:0,creditsRemark:"",vipModalVisible:!1,vipLoading:!1,vipEditingUser:null,vipDays:30,vipCustomDate:null,vipRemark:"",strategyLoading:!1,systemStrategies:[],strategySummary:null,strategyStatusFilter:"all",strategySearchKeyword:"",strategyPagination:{current:1,pageSize:20,total:0},strategiesLoaded:!1,orderLoading:!1,orders:[],orderSummary:null,orderStatusFilter:"all",orderSearchKeyword:"",orderPagination:{current:1,pageSize:20,total:0},ordersLoaded:!1,aiStatsLoading:!1,aiUserStats:[],aiRecentRecords:[],aiStatsSummary:null,aiStatsSearchKeyword:"",aiStatsPagination:{current:1,pageSize:20,total:0},aiStatsLoaded:!1}},computed:(0,o.A)((0,o.A)({},(0,c.L8)(["userInfo"])),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},currentUserId:function(){var t;return null===(t=this.userInfo)||void 0===t?void 0:t.id},columns:function(){return[{title:"ID",dataIndex:"id",width:60},{title:this.$t("userManage.username")||"Username",dataIndex:"username",width:120},{title:this.$t("userManage.nickname")||"Nickname",dataIndex:"nickname",width:100},{title:this.$t("userManage.email")||"Email",dataIndex:"email",width:180},{title:this.$t("userManage.role")||"Role",dataIndex:"role",width:90,scopedSlots:{customRender:"role"}},{title:this.$t("userManage.credits")||"Credits",dataIndex:"credits",width:100,scopedSlots:{customRender:"credits"}},{title:"VIP",dataIndex:"vip_expires_at",width:120,scopedSlots:{customRender:"vip_expires_at"}},{title:this.$t("userManage.status")||"Status",dataIndex:"status",width:90,scopedSlots:{customRender:"status"}},{title:this.$t("userManage.lastLogin")||"Last Login",dataIndex:"last_login_at",width:150,scopedSlots:{customRender:"last_login_at"}},{title:this.$t("common.actions")||"Actions",dataIndex:"action",width:180,scopedSlots:{customRender:"action"}}]},strategyColumns:function(){return[{title:"ID",dataIndex:"id",width:60,fixed:"left"},{title:this.$t("systemOverview.colUser")||"User",dataIndex:"username",width:110,fixed:"left",scopedSlots:{customRender:"userInfo"}},{title:this.$t("systemOverview.colStrategy")||"Strategy",dataIndex:"strategy_name",width:160,ellipsis:!0},{title:this.$t("systemOverview.colStatus")||"Status",dataIndex:"status",width:100,scopedSlots:{customRender:"strategyStatus"}},{title:this.$t("systemOverview.colSymbol")||"Symbol",dataIndex:"symbol",width:140,scopedSlots:{customRender:"symbolInfo"}},{title:this.$t("systemOverview.colCapital")||"Capital",dataIndex:"initial_capital",width:110,scopedSlots:{customRender:"capitalInfo"}},{title:this.$t("systemOverview.colPnl")||"PnL / ROI",dataIndex:"total_pnl",width:200,scopedSlots:{customRender:"pnlInfo"}},{title:this.$t("systemOverview.colPositions")||"Pos",dataIndex:"position_count",width:70,align:"center",scopedSlots:{customRender:"positionInfo"}},{title:this.$t("systemOverview.colTrades")||"Trades",dataIndex:"trade_count",width:80,align:"center",scopedSlots:{customRender:"tradeInfo"}},{title:this.$t("systemOverview.colIndicator")||"Indicator",dataIndex:"indicator_name",width:130,scopedSlots:{customRender:"indicatorInfo"}},{title:this.$t("systemOverview.colExchange")||"Exchange",dataIndex:"exchange_name",width:100,scopedSlots:{customRender:"exchangeInfo"}},{title:this.$t("systemOverview.colTimeframe")||"TF",dataIndex:"timeframe",width:70,align:"center",scopedSlots:{customRender:"timeframeInfo"}},{title:this.$t("systemOverview.colLeverage")||"Lev",dataIndex:"leverage",width:70,align:"center",scopedSlots:{customRender:"leverageInfo"}},{title:this.$t("systemOverview.colCreatedAt")||"Created",dataIndex:"created_at",width:150,scopedSlots:{customRender:"createdAtInfo"}}]},orderColumns:function(){return[{title:this.$t("adminOrders.colUser")||"User",dataIndex:"username",width:120,scopedSlots:{customRender:"orderUserInfo"}},{title:this.$t("adminOrders.colType")||"Type",dataIndex:"order_type",width:80,scopedSlots:{customRender:"orderTypeInfo"}},{title:this.$t("adminOrders.colPlan")||"Plan",dataIndex:"plan",width:100,scopedSlots:{customRender:"planInfo"}},{title:this.$t("adminOrders.colAmount")||"Amount",dataIndex:"amount",width:120,scopedSlots:{customRender:"amountInfo"}},{title:this.$t("adminOrders.colStatus")||"Status",dataIndex:"status",width:100,scopedSlots:{customRender:"orderStatusInfo"}},{title:this.$t("adminOrders.colChain")||"Chain",dataIndex:"chain",width:80,scopedSlots:{customRender:"chainInfo"}},{title:this.$t("adminOrders.colAddress")||"Address",dataIndex:"address",width:140,scopedSlots:{customRender:"addressInfo"}},{title:this.$t("adminOrders.colTxHash")||"Tx Hash",dataIndex:"tx_hash",width:160,scopedSlots:{customRender:"txHashInfo"}},{title:this.$t("adminOrders.colCreatedAt")||"Created",dataIndex:"created_at",width:150,scopedSlots:{customRender:"orderCreatedAt"}}]},aiUserColumns:function(){return[{title:this.$t("adminAiStats.colUser")||"User",dataIndex:"username",width:140,scopedSlots:{customRender:"aiUserInfo"}},{title:this.$t("adminAiStats.colAnalysisCount")||"Analyses",dataIndex:"analysis_count",width:100,align:"center",scopedSlots:{customRender:"analysisCountInfo"},sorter:function(t,e){return t.analysis_count-e.analysis_count},defaultSortOrder:"descend"},{title:this.$t("adminAiStats.colSymbols")||"Symbols",dataIndex:"symbol_count",width:90,align:"center"},{title:this.$t("adminAiStats.colMarkets")||"Markets",dataIndex:"market_count",width:90,align:"center"},{title:this.$t("adminAiStats.colAccuracy")||"Correct / Wrong",dataIndex:"correct",width:130,align:"center",scopedSlots:{customRender:"accuracyInfo"}},{title:this.$t("adminAiStats.colFeedback")||"Feedback",dataIndex:"helpful",width:130,align:"center",scopedSlots:{customRender:"feedbackInfo"}},{title:this.$t("adminAiStats.colLastAnalysis")||"Last Analysis",dataIndex:"last_analysis_at",width:160,scopedSlots:{customRender:"lastAnalysisAt"}}]},aiRecentColumns:function(){return[{title:"ID",dataIndex:"id",width:60},{title:this.$t("adminAiStats.colUser")||"User",dataIndex:"username",width:120,scopedSlots:{customRender:"recentUserInfo"}},{title:this.$t("adminAiStats.colMarket")||"Market",dataIndex:"market",width:80},{title:this.$t("adminAiStats.colSymbol")||"Symbol",dataIndex:"symbol",width:120},{title:this.$t("adminAiStats.colModel")||"Model",dataIndex:"model",width:140,ellipsis:!0},{title:this.$t("adminAiStats.colStatus")||"Status",dataIndex:"status",width:100,scopedSlots:{customRender:"recentStatusInfo"}},{title:this.$t("adminAiStats.colCreatedAt")||"Time",dataIndex:"created_at",width:160,scopedSlots:{customRender:"recentCreatedAt"}}]}}),beforeCreate:function(){this.form=this.$form.createForm(this),this.resetPasswordForm=this.$form.createForm(this,{name:"resetPassword"})},mounted:function(){this.loadUsers(),this.loadRoles()},methods:{handleTabChange:function(t){"strategies"!==t||this.strategiesLoaded||this.loadSystemStrategies(),"orders"!==t||this.ordersLoaded||this.loadOrders(),"aiStats"!==t||this.aiStatsLoaded||this.loadAiStats()},loadSystemStrategies:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.strategyLoading=!0,e.p=1,e.n=2,(0,l.DK)({page:t.strategyPagination.current,page_size:t.strategyPagination.pageSize,status:"all"===t.strategyStatusFilter?"":t.strategyStatusFilter,search:t.strategySearchKeyword||""});case 2:a=e.v,1===a.code?(t.systemStrategies=a.data.items||[],t.strategyPagination.total=a.data.total||0,t.strategySummary=a.data.summary||{},t.strategiesLoaded=!0):t.$message.error(a.msg||"Failed to load strategies"),e.n=4;break;case 3:e.p=3,e.v,t.$message.error("Failed to load system strategies");case 4:return e.p=4,t.strategyLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleStrategySearch:function(){this.strategyPagination.current=1,this.loadSystemStrategies()},handleStrategyFilterChange:function(){this.strategyPagination.current=1,this.loadSystemStrategies()},handleStrategyTableChange:function(t){this.strategyPagination.current=t.current,this.strategyPagination.pageSize=t.pageSize,this.loadSystemStrategies()},getUserColor:function(t){var e=["#1890ff","#722ed1","#13c2c2","#fa8c16","#eb2f96","#52c41a","#2f54eb","#faad14"];return e[(t||0)%e.length]},formatNumber:function(t){return t||0===t?Number(t).toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:2}):"0"},formatPnl:function(t){if(!t&&0!==t)return"0";var e=Number(t),a=e>=0?"+":"";return a+e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:4})},truncate:function(t,e){return t?t.length>e?t.substring(0,e)+"...":t:""},loadUsers:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loading=!0,e.p=1,e.n=2,(0,l.aU)({page:t.pagination.current,page_size:t.pagination.pageSize,search:t.searchKeyword||""});case 2:a=e.v,1===a.code?(t.users=a.data.items||[],t.pagination.total=a.data.total||0):t.$message.error(a.msg||"Failed to load users"),e.n=4;break;case 3:e.p=3,e.v,t.$message.error("Failed to load users");case 4:return e.p=4,t.loading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleSearch:function(){this.pagination.current=1,this.loadUsers()},loadRoles:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,l.O0)();case 1:a=e.v,1===a.code&&(t.roles=a.data.roles||[]),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},handleTableChange:function(t){this.pagination.current=t.current,this.pagination.pageSize=t.pageSize,this.loadUsers()},showCreateModal:function(){var t=this;this.isEdit=!1,this.editingUser=null,this.modalVisible=!0,this.$nextTick(function(){t.form.resetFields()})},showEditModal:function(t){var e=this;this.isEdit=!0,this.editingUser=t,this.modalVisible=!0,this.$nextTick(function(){e.form.setFieldsValue({username:t.username,nickname:t.nickname,email:t.email,role:t.role,status:t.status})})},handleModalCancel:function(){this.modalVisible=!1,this.form.resetFields()},handleModalOk:function(){var t=this;this.form.validateFields(function(){var e=(0,n.A)((0,i.A)().m(function e(a,s){var r;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!a){e.n=1;break}return e.a(2);case 1:if(t.modalLoading=!0,e.p=2,!t.isEdit){e.n=4;break}return e.n=3,(0,l.TK)(t.editingUser.id,{nickname:s.nickname,email:s.email,role:s.role,status:s.status});case 3:r=e.v,e.n=6;break;case 4:return e.n=5,(0,l.kg)(s);case 5:r=e.v;case 6:1===r.code?(t.$message.success(r.msg||"Success"),t.modalVisible=!1,t.form.resetFields(),t.loadUsers()):t.$message.error(r.msg||"Operation failed"),e.n=8;break;case 7:e.p=7,e.v,t.$message.error("Operation failed");case 8:return e.p=8,t.modalLoading=!1,e.f(8);case 9:return e.a(2)}},e,null,[[2,7,8,9]])}));return function(t,a){return e.apply(this,arguments)}}())},handleDelete:function(t){var e=this;return(0,n.A)((0,i.A)().m(function a(){var s;return(0,i.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,l.hG)(t);case 1:s=a.v,1===s.code?(e.$message.success(s.msg||"User deleted"),e.loadUsers()):e.$message.error(s.msg||"Delete failed"),a.n=3;break;case 2:a.p=2,a.v,e.$message.error("Delete failed");case 3:return a.a(2)}},a,null,[[0,2]])}))()},showResetPasswordModal:function(t){var e=this;this.resetPasswordUserId=t.id,this.resetPasswordVisible=!0,this.$nextTick(function(){e.resetPasswordForm.resetFields()})},handleResetPassword:function(){var t=this;this.resetPasswordForm.validateFields(function(){var e=(0,n.A)((0,i.A)().m(function e(a,s){var r;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!a){e.n=1;break}return e.a(2);case 1:return t.resetPasswordLoading=!0,e.p=2,e.n=3,(0,l.cw)({user_id:t.resetPasswordUserId,new_password:s.new_password});case 3:r=e.v,1===r.code?(t.$message.success(r.msg||"Password reset successfully"),t.resetPasswordVisible=!1,t.resetPasswordForm.resetFields()):t.$message.error(r.msg||"Reset failed"),e.n=5;break;case 4:e.p=4,e.v,t.$message.error("Reset failed");case 5:return e.p=5,t.resetPasswordLoading=!1,e.f(5);case 6:return e.a(2)}},e,null,[[2,4,5,6]])}));return function(t,a){return e.apply(this,arguments)}}())},getRoleColor:function(t){var e={admin:"red",manager:"orange",user:"blue",viewer:"default"};return e[t]||"default"},getRoleLabel:function(t){var e={admin:this.$t("userManage.roleAdmin")||"Admin",manager:this.$t("userManage.roleManager")||"Manager",user:this.$t("userManage.roleUser")||"User",viewer:this.$t("userManage.roleViewer")||"Viewer"};return e[t]||t},formatTime:function(t){if(!t)return"";var e=new Date("number"===typeof t?1e3*t:t);return e.toLocaleString()},formatCredits:function(t){return t||0===t?Number(t).toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:2}):"0"},formatDate:function(t){if(!t)return"";var e=new Date(t);return e.toLocaleDateString()},isVipActive:function(t){return!!t&&new Date(t)>new Date},showCreditsModal:function(t){this.creditsEditingUser=t,this.newCredits=parseFloat(t.credits)||0,this.creditsRemark="",this.creditsModalVisible=!0},handleSetCredits:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!(t.newCredits<0)){e.n=1;break}return t.$message.error(t.$t("userManage.creditsNonNegative")||"Credits cannot be negative"),e.a(2);case 1:return t.creditsLoading=!0,e.p=2,e.n=3,(0,l.wq)({user_id:t.creditsEditingUser.id,credits:t.newCredits,remark:t.creditsRemark});case 3:a=e.v,1===a.code?(t.$message.success(a.msg||"Credits updated successfully"),t.creditsModalVisible=!1,t.loadUsers()):t.$message.error(a.msg||"Update failed"),e.n=5;break;case 4:e.p=4,e.v,t.$message.error("Update failed");case 5:return e.p=5,t.creditsLoading=!1,e.f(5);case 6:return e.a(2)}},e,null,[[2,4,5,6]])}))()},showVipModal:function(t){this.vipEditingUser=t,this.vipDays=30,this.vipCustomDate=null,this.vipRemark="",this.vipModalVisible=!0},handleSetVip:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a,s;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(a={user_id:t.vipEditingUser.id,remark:t.vipRemark},-1!==t.vipDays){e.n=2;break}if(t.vipCustomDate){e.n=1;break}return t.$message.error(t.$t("userManage.selectDate")||"Please select a date"),e.a(2);case 1:a.vip_expires_at=t.vipCustomDate.toISOString(),e.n=3;break;case 2:a.vip_days=t.vipDays;case 3:return t.vipLoading=!0,e.p=4,e.n=5,(0,l.nY)(a);case 5:s=e.v,1===s.code?(t.$message.success(s.msg||"VIP status updated successfully"),t.vipModalVisible=!1,t.loadUsers()):t.$message.error(s.msg||"Update failed"),e.n=7;break;case 6:e.p=6,e.v,t.$message.error("Update failed");case 7:return e.p=7,t.vipLoading=!1,e.f(7);case 8:return e.a(2)}},e,null,[[4,6,7,8]])}))()},loadOrders:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.orderLoading=!0,e.p=1,e.n=2,(0,l.vi)({page:t.orderPagination.current,page_size:t.orderPagination.pageSize,status:"all"===t.orderStatusFilter?"":t.orderStatusFilter,search:t.orderSearchKeyword||""});case 2:a=e.v,1===a.code?(t.orders=a.data.items||[],t.orderPagination.total=a.data.total||0,t.orderSummary=a.data.summary||{},t.ordersLoaded=!0):t.$message.error(a.msg||"Failed to load orders"),e.n=4;break;case 3:e.p=3,e.v,t.$message.error("Failed to load orders");case 4:return e.p=4,t.orderLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleOrderSearch:function(){this.orderPagination.current=1,this.loadOrders()},handleOrderFilterChange:function(){this.orderPagination.current=1,this.loadOrders()},handleOrderTableChange:function(t){this.orderPagination.current=t.current,this.orderPagination.pageSize=t.pageSize,this.loadOrders()},getOrderStatusColor:function(t){var e={paid:"green",confirmed:"green",pending:"orange",expired:"grey",cancelled:"default",failed:"red"};return e[t]||"default"},getOrderStatusLabel:function(t){var e={paid:this.$t("adminOrders.statusPaid")||"Paid",confirmed:this.$t("adminOrders.statusConfirmed")||"Confirmed",pending:this.$t("adminOrders.statusPending")||"Pending",expired:this.$t("adminOrders.statusExpired")||"Expired",cancelled:this.$t("adminOrders.statusCancelled")||"Cancelled",failed:this.$t("adminOrders.statusFailed")||"Failed"};return e[t]||t},loadAiStats:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.aiStatsLoading=!0,e.p=1,e.n=2,(0,l.d$)({page:t.aiStatsPagination.current,page_size:t.aiStatsPagination.pageSize,search:t.aiStatsSearchKeyword||""});case 2:a=e.v,1===a.code?(t.aiUserStats=a.data.user_stats||[],t.aiRecentRecords=a.data.recent||[],t.aiStatsPagination.total=a.data.user_total||0,t.aiStatsSummary=a.data.summary||{},t.aiStatsLoaded=!0):t.$message.error(a.msg||"Failed to load AI stats"),e.n=4;break;case 3:e.p=3,e.v,t.$message.error("Failed to load AI stats");case 4:return e.p=4,t.aiStatsLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleAiStatsSearch:function(){this.aiStatsPagination.current=1,this.loadAiStats()},handleAiStatsTableChange:function(t){this.aiStatsPagination.current=t.current,this.aiStatsPagination.pageSize=t.pageSize,this.loadAiStats()}}},m=u,p=a(845),g=(0,p.A)(m,s,r,!1,null,"49c4f239",null),v=g.exports},84841:function(t,e,a){a.d(e,{DK:function(){return h},E$:function(){return c},Gl:function(){return p},O0:function(){return d},TK:function(){return n},aU:function(){return r},cw:function(){return l},d$:function(){return S},hG:function(){return o},kg:function(){return i},nY:function(){return y},r7:function(){return u},rx:function(){return v},v9:function(){return g},vF:function(){return m},vi:function(){return _},wq:function(){return f}});var s=a(75769);function r(t){return(0,s.Ay)({url:"/api/users/list",method:"get",params:t})}function i(t){return(0,s.Ay)({url:"/api/users/create",method:"post",data:t})}function n(t,e){return(0,s.Ay)({url:"/api/users/update",method:"put",params:{id:t},data:e})}function o(t){return(0,s.Ay)({url:"/api/users/delete",method:"delete",params:{id:t}})}function l(t){return(0,s.Ay)({url:"/api/users/reset-password",method:"post",data:t})}function d(){return(0,s.Ay)({url:"/api/users/roles",method:"get"})}function c(){return(0,s.Ay)({url:"/api/users/profile",method:"get"})}function u(t){return(0,s.Ay)({url:"/api/users/profile/update",method:"put",data:t})}function m(){return(0,s.Ay)({url:"/api/users/notification-settings",method:"get"})}function p(t){return(0,s.Ay)({url:"/api/users/notification-settings",method:"put",data:t})}function g(t){return(0,s.Ay)({url:"/api/users/my-credits-log",method:"get",params:t})}function v(t){return(0,s.Ay)({url:"/api/users/my-referrals",method:"get",params:t})}function f(t){return(0,s.Ay)({url:"/api/users/set-credits",method:"post",data:t})}function y(t){return(0,s.Ay)({url:"/api/users/set-vip",method:"post",data:t})}function h(t){return(0,s.Ay)({url:"/api/users/system-strategies",method:"get",params:t})}function _(t){return(0,s.Ay)({url:"/api/users/admin-orders",method:"get",params:t})}function S(t){return(0,s.Ay)({url:"/api/users/admin-ai-stats",method:"get",params:t})}}}]); \ No newline at end of file diff --git a/frontend/dist/js/824-legacy.0e8f022b.js b/frontend/dist/js/824-legacy.0e8f022b.js new file mode 100644 index 0000000..3da35af --- /dev/null +++ b/frontend/dist/js/824-legacy.0e8f022b.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[824],{95824:function(t,n,r){r.r(n),r.d(n,{changePassword:function(){return p},getGitHubOAuthUrl:function(){return g},getGoogleOAuthUrl:function(){return l},getSecurityConfig:function(){return o},getUserInfo:function(){return c},login:function(){return i},loginWithCode:function(){return s},logout:function(){return a},register:function(){return f},resetPassword:function(){return d},sendVerificationCode:function(){return h}});r(34782),r(27495),r(99449),r(25440),r(11392),r(42762);var u=r(75769);function e(t){var n="/api".trim(),r=t.startsWith("/")?t:"/".concat(t);if(!n)return r;var u=n.replace(/\/+$/,"");return u.endsWith("/api")&&r.startsWith("/api/")?u+r.slice(4):u+r}function o(){return(0,u.Ay)({url:"/api/auth/security-config",method:"get"})}function i(t){return(0,u.Ay)({url:"/api/auth/login",method:"post",data:t})}function a(){return(0,u.Ay)({url:"/api/auth/logout",method:"post"})}function c(){return(0,u.Ay)({url:"/api/auth/info",method:"get"})}function h(t){return(0,u.Ay)({url:"/api/auth/send-code",method:"post",data:t})}function s(t){return(0,u.Ay)({url:"/api/auth/login-code",method:"post",data:t})}function f(t){return(0,u.Ay)({url:"/api/auth/register",method:"post",data:t})}function d(t){return(0,u.Ay)({url:"/api/auth/reset-password",method:"post",data:t})}function p(t){return(0,u.Ay)({url:"/api/auth/change-password",method:"post",data:t})}function l(){return e("/api/auth/oauth/google")}function g(){return e("/api/auth/oauth/github")}}}]); \ No newline at end of file diff --git a/frontend/dist/js/824.2a045326.js b/frontend/dist/js/824.2a045326.js new file mode 100644 index 0000000..521f10a --- /dev/null +++ b/frontend/dist/js/824.2a045326.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[824],{95824:function(t,n,r){r.r(n),r.d(n,{changePassword:function(){return p},getGitHubOAuthUrl:function(){return g},getGoogleOAuthUrl:function(){return l},getSecurityConfig:function(){return o},getUserInfo:function(){return c},login:function(){return i},loginWithCode:function(){return s},logout:function(){return a},register:function(){return f},resetPassword:function(){return d},sendVerificationCode:function(){return h}});var u=r(75769);function e(t){var n="/api".trim(),r=t.startsWith("/")?t:"/".concat(t);if(!n)return r;var u=n.replace(/\/+$/,"");return u.endsWith("/api")&&r.startsWith("/api/")?u+r.slice(4):u+r}function o(){return(0,u.Ay)({url:"/api/auth/security-config",method:"get"})}function i(t){return(0,u.Ay)({url:"/api/auth/login",method:"post",data:t})}function a(){return(0,u.Ay)({url:"/api/auth/logout",method:"post"})}function c(){return(0,u.Ay)({url:"/api/auth/info",method:"get"})}function h(t){return(0,u.Ay)({url:"/api/auth/send-code",method:"post",data:t})}function s(t){return(0,u.Ay)({url:"/api/auth/login-code",method:"post",data:t})}function f(t){return(0,u.Ay)({url:"/api/auth/register",method:"post",data:t})}function d(t){return(0,u.Ay)({url:"/api/auth/reset-password",method:"post",data:t})}function p(t){return(0,u.Ay)({url:"/api/auth/change-password",method:"post",data:t})}function l(){return e("/api/auth/oauth/google")}function g(){return e("/api/auth/oauth/github")}}}]); \ No newline at end of file diff --git a/frontend/dist/js/261.b64fed88.js b/frontend/dist/js/829.17bfab9d.js similarity index 61% rename from frontend/dist/js/261.b64fed88.js rename to frontend/dist/js/829.17bfab9d.js index 4f61009..d8b0cb3 100644 --- a/frontend/dist/js/261.b64fed88.js +++ b/frontend/dist/js/829.17bfab9d.js @@ -1 +1 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[261],{26261:function(e,t,a){a.r(t),a.d(t,{default:function(){return v}});var r=function(){var e=this,t=e._self._c;return t("div",{staticClass:"profile-page",class:{"theme-dark":e.isDarkTheme}},[t("div",{staticClass:"page-header"},[t("h2",{staticClass:"page-title"},[t("a-icon",{attrs:{type:"user"}}),t("span",[e._v(e._s(e.$t("profile.title")||"My Profile"))])],1),t("p",{staticClass:"page-desc"},[e._v(e._s(e.$t("profile.description")||"Manage your account settings and preferences"))])]),t("a-row",{staticClass:"profile-cards-row",attrs:{gutter:24}},[t("a-col",{staticClass:"profile-card-col",attrs:{xs:24,md:8}},[t("a-card",{staticClass:"profile-card",attrs:{bordered:!1}},[t("div",{staticClass:"avatar-section"},[t("a-avatar",{attrs:{size:100,src:e.profile.avatar||"/avatar2.jpg"}}),t("h3",{staticClass:"username"},[e._v(e._s(e.profile.nickname||e.profile.username))]),t("p",{staticClass:"user-role"},[t("a-tag",{attrs:{color:e.getRoleColor(e.profile.role)}},[e._v(" "+e._s(e.getRoleLabel(e.profile.role))+" ")]),e.isVip?t("a-tag",{attrs:{color:"gold"}},[t("a-icon",{attrs:{type:"crown"}}),e._v(" VIP ")],1):e._e()],1)],1),t("a-divider"),t("div",{staticClass:"profile-info"},[t("div",{staticClass:"info-item"},[t("a-icon",{attrs:{type:"user"}}),t("span",{staticClass:"label"},[e._v(e._s(e.$t("profile.username")||"Username")+":")]),t("span",{staticClass:"value"},[e._v(e._s(e.profile.username))])],1),t("div",{staticClass:"info-item"},[t("a-icon",{attrs:{type:"mail"}}),t("span",{staticClass:"label"},[e._v(e._s(e.$t("profile.email")||"Email")+":")]),t("span",{staticClass:"value"},[e._v(e._s(e.profile.email||"-"))])],1),t("div",{staticClass:"info-item"},[t("a-icon",{attrs:{type:"calendar"}}),t("span",{staticClass:"label"},[e._v(e._s(e.$t("profile.lastLogin")||"Last Login")+":")]),t("span",{staticClass:"value"},[e._v(e._s(e.formatTime(e.profile.last_login_at)||"-"))])],1)])],1)],1),t("a-col",{staticClass:"right-cards-col",attrs:{xs:24,md:16}},[t("a-row",{staticClass:"right-cards-row",attrs:{gutter:16}},[t("a-col",{attrs:{xs:24,md:12}},[t("a-card",{staticClass:"credits-card",attrs:{bordered:!1}},[t("div",{staticClass:"credits-header"},[t("h3",{staticClass:"credits-title"},[t("a-icon",{attrs:{type:"wallet"}}),e._v(" "+e._s(e.$t("profile.credits.title")||"我的积分")+" ")],1)]),t("div",{staticClass:"credits-body"},[t("div",{staticClass:"credits-amount"},[t("span",{staticClass:"amount-value"},[e._v(e._s(e.formatCredits(e.billing.credits)))]),t("span",{staticClass:"amount-label"},[e._v(e._s(e.$t("profile.credits.unit")||"积分"))])]),e.billing.vip_expires_at?t("div",{staticClass:"vip-status"},[t("a-icon",{style:{color:e.isVip?"#faad14":"#999"},attrs:{type:"crown"}}),e.isVip?t("span",{staticClass:"vip-active"},[e._v(" "+e._s(e.$t("profile.credits.vipExpires")||"VIP有效期至")+": "+e._s(e.formatDate(e.billing.vip_expires_at))+" ")]):t("span",{staticClass:"vip-expired"},[e._v(" "+e._s(e.$t("profile.credits.vipExpired")||"VIP已过期")+" ")])],1):e.billing.is_vip?e._e():t("div",{staticClass:"vip-status"},[t("span",{staticClass:"no-vip"},[e._v(e._s(e.$t("profile.credits.noVip")||"非VIP用户"))])])]),t("a-divider"),t("div",{staticClass:"credits-actions"},[t("a-button",{attrs:{type:"primary",icon:"shopping"},on:{click:e.handleRecharge}},[e._v(" "+e._s(e.$t("profile.credits.recharge")||"开通/充值")+" ")])],1),e.billing.billing_enabled?t("div",{staticClass:"credits-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.credits.hint")||"使用AI分析/回测/监控等功能会消耗积分;VIP仅可免费使用VIP免费指标。"))])],1):e._e()],1)],1),t("a-col",{attrs:{xs:24,md:12}},[t("a-card",{staticClass:"referral-card",attrs:{bordered:!1}},[t("div",{staticClass:"referral-header"},[t("h3",{staticClass:"referral-title"},[t("a-icon",{attrs:{type:"team"}}),e._v(" "+e._s(e.$t("profile.referral.title")||"邀请好友")+" ")],1)]),t("div",{staticClass:"referral-body"},[t("div",{staticClass:"referral-stats"},[t("div",{staticClass:"stat-item"},[t("span",{staticClass:"stat-value"},[e._v(e._s(e.referralData.total||0))]),t("span",{staticClass:"stat-label"},[e._v(e._s(e.$t("profile.referral.totalInvited")||"已邀请"))])]),e.referralData.referral_bonus>0?t("div",{staticClass:"stat-item"},[t("span",{staticClass:"stat-value"},[e._v("+"+e._s(e.referralData.referral_bonus))]),t("span",{staticClass:"stat-label"},[e._v(e._s(e.$t("profile.referral.bonusPerInvite")||"每邀请获得"))])]):e._e()]),t("a-divider",{staticStyle:{margin:"12px 0"}}),t("div",{staticClass:"referral-link-section"},[t("div",{staticClass:"link-label"},[e._v(e._s(e.$t("profile.referral.yourLink")||"您的邀请链接"))]),t("div",{staticClass:"link-box"},[t("a-input",{attrs:{value:e.referralLink,readonly:"",size:"small"}},[t("a-tooltip",{attrs:{slot:"suffix",title:e.$t("profile.referral.copyLink")||"复制链接"},slot:"suffix"},[t("a-icon",{staticStyle:{cursor:"pointer"},attrs:{type:"copy"},on:{click:e.copyReferralLink}})],1)],1)],1)]),e.referralData.register_bonus>0?t("div",{staticClass:"referral-hint"},[t("a-icon",{attrs:{type:"gift"}}),t("span",[e._v(e._s(e.$t("profile.referral.newUserBonus")||"新用户注册获得")+" "+e._s(e.referralData.register_bonus)+" "+e._s(e.$t("profile.credits.unit")||"积分"))])],1):e._e()],1)])],1)],1)],1)],1),t("a-row",{staticStyle:{"margin-top":"24px"},attrs:{gutter:24}},[t("a-col",{attrs:{xs:24}},[t("a-card",{staticClass:"edit-card",attrs:{bordered:!1}},[t("a-tabs",{model:{value:e.activeTab,callback:function(t){e.activeTab=t},expression:"activeTab"}},[t("a-tab-pane",{key:"basic",attrs:{tab:e.$t("profile.basicInfo")||"Basic Info"}},[t("a-form",{staticClass:"profile-form",attrs:{form:e.profileForm,layout:"vertical"}},[t("a-form-item",{attrs:{label:e.$t("profile.nickname")||"Nickname"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["nickname",{initialValue:e.profile.nickname}],expression:"['nickname', { initialValue: profile.nickname }]"}],attrs:{placeholder:e.$t("profile.nicknamePlaceholder")||"Enter your nickname"}},[t("a-icon",{attrs:{slot:"prefix",type:"smile"},slot:"prefix"})],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.email")||"Email"}},[t("a-input",{attrs:{value:e.profile.email||"-",disabled:""}},[t("a-icon",{attrs:{slot:"prefix",type:"mail"},slot:"prefix"}),t("a-tooltip",{attrs:{slot:"suffix",title:e.$t("profile.emailCannotChange")||"Email cannot be changed after registration"},slot:"suffix"},[t("a-icon",{staticStyle:{color:"rgba(0,0,0,.45)"},attrs:{type:"info-circle"}})],1)],1)],1),t("a-form-item",[t("a-button",{attrs:{type:"primary",loading:e.saving},on:{click:e.handleSaveProfile}},[t("a-icon",{attrs:{type:"save"}}),e._v(" "+e._s(e.$t("common.save")||"Save")+" ")],1)],1)],1)],1),t("a-tab-pane",{key:"password",attrs:{tab:e.$t("profile.changePassword")||"Change Password"}},[t("a-form",{staticClass:"password-form",attrs:{form:e.passwordForm,layout:"vertical"}},[t("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{message:e.$t("profile.passwordHintNew")||"For security, email verification is required to change password. Password must be at least 8 characters with uppercase, lowercase, and number.",type:"info",showIcon:""}}),t("a-form-item",{attrs:{label:e.$t("profile.verificationCode")||"Verification Code"}},[t("a-row",{attrs:{gutter:12}},[t("a-col",{attrs:{span:16}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["code",{rules:[{required:!0,message:e.$t("profile.codeRequired")||"Please enter verification code"}]}],expression:"['code', {\n rules: [{ required: true, message: $t('profile.codeRequired') || 'Please enter verification code' }]\n }]"}],attrs:{placeholder:e.$t("profile.codePlaceholder")||"Enter verification code"}},[t("a-icon",{attrs:{slot:"prefix",type:"safety-certificate"},slot:"prefix"})],1)],1),t("a-col",{attrs:{span:8}},[t("a-button",{attrs:{block:"",loading:e.sendingPwdCode,disabled:e.sendingPwdCode||e.pwdCodeCountdown>0||!e.profile.email},on:{click:e.handleSendPwdCode}},[e._v(" "+e._s(e.pwdCodeCountdown>0?"".concat(e.pwdCodeCountdown,"s"):e.$t("profile.sendCode")||"Send Code")+" ")])],1)],1),e.profile.email?t("div",{staticClass:"email-hint"},[e._v(" "+e._s(e.$t("profile.codeWillSendTo")||"Code will be sent to")+": "+e._s(e.profile.email)+" ")]):t("div",{staticClass:"email-hint email-warning"},[e._v(" "+e._s(e.$t("profile.noEmailWarning")||"Please set your email first in Basic Info tab")+" ")])],1),t("a-form-item",{attrs:{label:e.$t("profile.newPassword")||"New Password"}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["new_password",{rules:[{required:!0,message:e.$t("profile.newPasswordRequired")||"Please enter new password"},{validator:e.validateNewPassword}]}],expression:"['new_password', {\n rules: [\n { required: true, message: $t('profile.newPasswordRequired') || 'Please enter new password' },\n { validator: validateNewPassword }\n ]\n }]"}],attrs:{placeholder:e.$t("profile.newPasswordPlaceholder")||"Enter new password"}},[t("a-icon",{attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.confirmPassword")||"Confirm Password"}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["confirm_password",{rules:[{required:!0,message:e.$t("profile.confirmPasswordRequired")||"Please confirm password"},{validator:e.validateConfirmPassword}]}],expression:"['confirm_password', {\n rules: [\n { required: true, message: $t('profile.confirmPasswordRequired') || 'Please confirm password' },\n { validator: validateConfirmPassword }\n ]\n }]"}],attrs:{placeholder:e.$t("profile.confirmPasswordPlaceholder")||"Confirm new password"}},[t("a-icon",{attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),t("a-form-item",[t("a-button",{attrs:{type:"primary",loading:e.changingPassword,disabled:!e.profile.email},on:{click:e.handleChangePassword}},[t("a-icon",{attrs:{type:"key"}}),e._v(" "+e._s(e.$t("profile.changePassword")||"Change Password")+" ")],1)],1)],1)],1),t("a-tab-pane",{key:"credits",attrs:{tab:e.$t("profile.creditsLog")||"消费记录"}},[t("a-table",{attrs:{columns:e.creditsLogColumns,dataSource:e.creditsLog,loading:e.creditsLogLoading,pagination:e.creditsLogPagination,rowKey:function(e){return e.id},size:"small"},on:{change:e.handleCreditsLogChange},scopedSlots:e._u([{key:"action",fn:function(a){return[t("a-tag",{attrs:{color:e.getActionColor(a)}},[e._v(" "+e._s(e.getActionLabel(a))+" ")])]}},{key:"amount",fn:function(a){return[t("span",{class:a>=0?"amount-positive":"amount-negative"},[e._v(" "+e._s(a>=0?"+":"")+e._s(a)+" ")])]}},{key:"created_at",fn:function(t){return[e._v(" "+e._s(e.formatTime(t))+" ")]}}])})],1),t("a-tab-pane",{key:"notifications",attrs:{tab:e.$t("profile.notifications.title")||"通知设置"}},[t("div",{staticClass:"notification-settings-form"},[t("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{message:e.$t("profile.notifications.hint")||"配置您的默认通知方式,在创建资产监控和预警时将自动使用这些设置",type:"info",showIcon:""}}),t("a-form",{staticStyle:{"max-width":"600px"},attrs:{form:e.notificationForm,layout:"vertical"}},[t("a-form-item",{attrs:{label:e.$t("profile.notifications.defaultChannels")||"默认通知渠道"}},[t("a-checkbox-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["default_channels",{initialValue:e.notificationSettings.default_channels||["browser"]}],expression:"['default_channels', { initialValue: notificationSettings.default_channels || ['browser'] }]"}]},[t("a-row",{attrs:{gutter:16}},[t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"browser"}},[t("a-icon",{attrs:{type:"bell"}}),e._v(" "+e._s(e.$t("profile.notifications.browser")||"站内通知")+" ")],1)],1),t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"telegram"}},[t("a-icon",{attrs:{type:"send"}}),e._v(" Telegram ")],1)],1),t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"email"}},[t("a-icon",{attrs:{type:"mail"}}),e._v(" "+e._s(e.$t("profile.notifications.email")||"邮件")+" ")],1)],1)],1),t("a-row",{staticStyle:{"margin-top":"8px"},attrs:{gutter:16}},[t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"phone"}},[t("a-icon",{attrs:{type:"phone"}}),e._v(" "+e._s(e.$t("profile.notifications.phone")||"短信")+" ")],1)],1),t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"discord"}},[t("a-icon",{attrs:{type:"message"}}),e._v(" Discord ")],1)],1),t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"webhook"}},[t("a-icon",{attrs:{type:"api"}}),e._v(" Webhook ")],1)],1)],1)],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.telegramBotToken")||"Telegram Bot Token"}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["telegram_bot_token",{initialValue:e.notificationSettings.telegram_bot_token}],expression:"['telegram_bot_token', { initialValue: notificationSettings.telegram_bot_token }]"}],attrs:{placeholder:e.$t("profile.notifications.telegramBotTokenPlaceholder")||"请输入您的 Telegram Bot Token"}},[t("a-icon",{attrs:{slot:"prefix",type:"robot"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(" "+e._s(e.$t("profile.notifications.telegramBotTokenHint")||"通过 @BotFather 创建机器人获取 Token")+" "),t("a",{attrs:{href:"https://t.me/BotFather",target:"_blank",rel:"noopener noreferrer"}},[e._v("@BotFather")])])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.telegramChatId")||"Telegram Chat ID"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["telegram_chat_id",{initialValue:e.notificationSettings.telegram_chat_id}],expression:"['telegram_chat_id', { initialValue: notificationSettings.telegram_chat_id }]"}],attrs:{placeholder:e.$t("profile.notifications.telegramPlaceholder")||"请输入您的 Telegram Chat ID(如 123456789)"}},[t("a-icon",{attrs:{slot:"prefix",type:"message"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.telegramHint")||"发送 /start 给 @userinfobot 可获取您的 Chat ID"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.notifyEmail")||"通知邮箱"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["email",{initialValue:e.notificationSettings.email||e.profile.email}],expression:"['email', { initialValue: notificationSettings.email || profile.email }]"}],attrs:{placeholder:e.$t("profile.notifications.emailPlaceholder")||"接收通知的邮箱地址"}},[t("a-icon",{attrs:{slot:"prefix",type:"mail"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.emailHint")||"默认使用账户邮箱,可设置其他邮箱接收通知"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.phone")||"手机号(短信通知)"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["phone",{initialValue:e.notificationSettings.phone}],expression:"['phone', { initialValue: notificationSettings.phone }]"}],attrs:{placeholder:e.$t("profile.notifications.phonePlaceholder")||"请输入手机号(如 +8613800138000)"}},[t("a-icon",{attrs:{slot:"prefix",type:"phone"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.phoneHint")||"需要管理员配置 Twilio 服务后才能使用短信通知"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.discordWebhook")||"Discord Webhook"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["discord_webhook",{initialValue:e.notificationSettings.discord_webhook}],expression:"['discord_webhook', { initialValue: notificationSettings.discord_webhook }]"}],attrs:{placeholder:e.$t("profile.notifications.discordPlaceholder")||"https://discord.com/api/webhooks/..."}},[t("a-icon",{attrs:{slot:"prefix",type:"message"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.discordHint")||"在 Discord 服务器设置中创建 Webhook"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.webhookUrl")||"Webhook URL"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["webhook_url",{initialValue:e.notificationSettings.webhook_url}],expression:"['webhook_url', { initialValue: notificationSettings.webhook_url }]"}],attrs:{placeholder:e.$t("profile.notifications.webhookPlaceholder")||"https://your-server.com/webhook"}},[t("a-icon",{attrs:{slot:"prefix",type:"api"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.webhookHint")||"自定义 Webhook 地址,将以 POST JSON 方式推送通知"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.webhookToken")||"Webhook Token(可选)"}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["webhook_token",{initialValue:e.notificationSettings.webhook_token}],expression:"['webhook_token', { initialValue: notificationSettings.webhook_token }]"}],attrs:{placeholder:e.$t("profile.notifications.webhookTokenPlaceholder")||"用于验证请求的 Bearer Token"}},[t("a-icon",{attrs:{slot:"prefix",type:"key"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.webhookTokenHint")||"将作为 Authorization: Bearer Token 发送到 Webhook"))])],1)],1),t("a-form-item",[t("a-button",{attrs:{type:"primary",loading:e.savingNotifications},on:{click:e.handleSaveNotifications}},[t("a-icon",{attrs:{type:"save"}}),e._v(" "+e._s(e.$t("common.save")||"保存")+" ")],1),t("a-button",{staticStyle:{"margin-left":"12px"},attrs:{loading:e.testingNotification},on:{click:e.handleTestNotification}},[t("a-icon",{attrs:{type:"experiment"}}),e._v(" "+e._s(e.$t("profile.notifications.testBtn")||"发送测试通知")+" ")],1)],1)],1)],1)]),t("a-tab-pane",{key:"exchange",attrs:{tab:e.$t("profile.exchange.title")||"交易所配置"}},[t("div",{staticClass:"exchange-config-section"},[t("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{message:e.$t("profile.exchange.hint"),type:"info",showIcon:""}}),t("div",{staticStyle:{"margin-bottom":"16px","text-align":"right"}},[t("a-button",{attrs:{type:"primary",icon:"plus"},on:{click:function(t){e.showAddExchangeModal=!0}}},[e._v(" "+e._s(e.$t("profile.exchange.addAccount"))+" ")])],1),t("a-table",{attrs:{columns:e.exchangeColumns,dataSource:e.exchangeCredentials,loading:e.exchangeLoading,rowKey:function(e){return e.id},size:"small"},scopedSlots:e._u([{key:"exchange_id",fn:function(a){return[t("span",{staticStyle:{"text-transform":"capitalize","font-weight":"500"}},[e._v(e._s(e.getExchangeDisplayName(a)))])]}},{key:"api_key_hint",fn:function(a,r){return[t("span",{staticClass:"credential-hint"},[e._v(e._s(a||r.name||"-"))])]}},{key:"created_at",fn:function(t){return[e._v(" "+e._s(e.formatTime(t))+" ")]}},{key:"action",fn:function(a,r){return[t("a-popconfirm",{attrs:{title:e.$t("profile.exchange.deleteConfirm"),okText:e.$t("common.confirm"),cancelText:e.$t("common.cancel")},on:{confirm:function(t){return e.handleDeleteCredential(r.id)}}},[t("a-button",{attrs:{type:"danger",size:"small",ghost:"",icon:"delete"}},[e._v(" "+e._s(e.$t("common.delete"))+" ")])],1)]}}])}),e.exchangeLoading||0!==e.exchangeCredentials.length?e._e():t("a-empty",{staticStyle:{"margin-top":"20px"}},[t("span",{attrs:{slot:"description"},slot:"description"},[e._v(e._s(e.$t("profile.exchange.noAccounts")))])])],1)]),t("a-tab-pane",{key:"referrals",attrs:{tab:e.$t("profile.referral.listTab")||"邀请列表"}},[t("a-table",{attrs:{columns:e.referralColumns,dataSource:e.referralData.list||[],loading:e.referralLoading,pagination:e.referralPagination,rowKey:function(e){return e.id},size:"small"},on:{change:e.handleReferralChange},scopedSlots:e._u([{key:"user",fn:function(a,r){return[t("div",{staticClass:"referral-user-cell"},[t("a-avatar",{attrs:{size:32,src:r.avatar||"/avatar2.jpg"}}),t("div",{staticClass:"user-info"},[t("span",{staticClass:"nickname"},[e._v(e._s(r.nickname||r.username))]),t("span",{staticClass:"username"},[e._v("@"+e._s(r.username))])])],1)]}},{key:"created_at",fn:function(t){return[e._v(" "+e._s(e.formatTime(t))+" ")]}}])}),e.referralLoading||e.referralData.list&&0!==e.referralData.list.length?e._e():t("a-empty",[t("span",{attrs:{slot:"description"},slot:"description"},[e._v(e._s(e.$t("profile.referral.noReferrals")||"暂无邀请记录"))]),t("a-button",{attrs:{type:"primary"},on:{click:e.copyReferralLink}},[e._v(" "+e._s(e.$t("profile.referral.shareNow")||"立即分享邀请")+" ")])],1)],1)],1)],1)],1)],1),t("a-modal",{attrs:{title:e.$t("profile.exchange.addTitle"),visible:e.showAddExchangeModal,confirmLoading:e.savingExchange,okText:e.$t("common.save"),cancelText:e.$t("common.cancel"),maskClosable:!1,width:"520px"},on:{ok:e.handleSaveExchange,cancel:function(t){e.showAddExchangeModal=!1}}},[t("a-form",{attrs:{form:e.exchangeForm,layout:"vertical"}},[t("a-form-item",{attrs:{label:e.$t("profile.exchange.selectExchange")}},[t("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["exchange_id",{rules:[{required:!0,message:e.$t("profile.exchange.selectExchange")}]}],expression:"['exchange_id', { rules: [{ required: true, message: $t('profile.exchange.selectExchange') }] }]"}],attrs:{placeholder:e.$t("profile.exchange.selectExchange")},on:{change:e.handleExchangeTypeChange}},[t("a-select-opt-group",{attrs:{label:e.$t("profile.exchange.typeCrypto")}},e._l(e.cryptoExchangeList,function(a){return t("a-select-option",{key:a.id,attrs:{value:a.id}},[e._v(" "+e._s(a.name)+" ")])}),1),t("a-select-opt-group",{attrs:{label:e.$t("profile.exchange.typeIBKR")}},[t("a-select-option",{attrs:{value:"ibkr"}},[e._v("Interactive Brokers (IBKR)")])],1),t("a-select-opt-group",{attrs:{label:e.$t("profile.exchange.typeMT5")}},[t("a-select-option",{attrs:{value:"mt5"}},[e._v("MetaTrader 5")])],1)],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.accountName")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["name"],expression:"['name']"}],attrs:{placeholder:e.$t("profile.exchange.accountNamePlaceholder")}})],1),"crypto"===e.addExchangeType?[t("a-form-item",{attrs:{label:e.$t("profile.exchange.apiKey")}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["api_key",{rules:[{required:!0,message:"API Key is required"}]}],expression:"['api_key', { rules: [{ required: true, message: 'API Key is required' }] }]"}],attrs:{placeholder:"API Key",autocomplete:"new-password"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.secretKey")}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["secret_key",{rules:[{required:!0,message:"Secret Key is required"}]}],expression:"['secret_key', { rules: [{ required: true, message: 'Secret Key is required' }] }]"}],attrs:{placeholder:"Secret Key",autocomplete:"new-password"}})],1),e.addExchangeNeedsPassphrase?t("a-form-item",{attrs:{label:e.$t("profile.exchange.passphrase")}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["passphrase"],expression:"['passphrase']"}],attrs:{placeholder:"Passphrase",autocomplete:"new-password"}})],1):e._e(),e.addExchangeShowDemo?t("a-form-item",[t("a-checkbox",{directives:[{name:"decorator",rawName:"v-decorator",value:["enable_demo_trading",{valuePropName:"checked",initialValue:!1}],expression:"['enable_demo_trading', { valuePropName: 'checked', initialValue: false }]"}]},[e._v(" "+e._s(e.$t("profile.exchange.demoTrading"))+" ")])],1):e._e()]:e._e(),"ibkr"===e.addExchangeType?[t("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"warning",showIcon:"",message:e.$t("profile.exchange.localDeploymentRequired"),description:e.$t("profile.exchange.localDeploymentHint")}}),t("a-form-item",{attrs:{label:e.$t("profile.exchange.ibkrHost")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["ibkr_host",{initialValue:"127.0.0.1"}],expression:"['ibkr_host', { initialValue: '127.0.0.1' }]"}],attrs:{placeholder:"127.0.0.1"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.ibkrPort")}},[t("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["ibkr_port",{initialValue:7497}],expression:"['ibkr_port', { initialValue: 7497 }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:65535}}),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.exchange.ibkrPortHint")))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.ibkrClientId")}},[t("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["ibkr_client_id",{initialValue:1}],expression:"['ibkr_client_id', { initialValue: 1 }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:999}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.ibkrAccount")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["ibkr_account"],expression:"['ibkr_account']"}],attrs:{placeholder:"DU123456"}})],1)]:e._e(),"mt5"===e.addExchangeType?[t("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"warning",showIcon:"",message:e.$t("profile.exchange.localDeploymentRequired"),description:e.$t("profile.exchange.localDeploymentHint")}}),t("a-form-item",{attrs:{label:e.$t("profile.exchange.mt5Server")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["mt5_server",{rules:[{required:!0,message:"Server is required"}]}],expression:"['mt5_server', { rules: [{ required: true, message: 'Server is required' }] }]"}],attrs:{placeholder:"MetaQuotes-Demo"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.mt5Login")}},[t("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["mt5_login",{rules:[{required:!0,message:"Login is required"}]}],expression:"['mt5_login', { rules: [{ required: true, message: 'Login is required' }] }]"}],staticStyle:{width:"100%"},attrs:{min:1,placeholder:"12345678"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.mt5Password")}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["mt5_password",{rules:[{required:!0,message:"Password is required"}]}],expression:"['mt5_password', { rules: [{ required: true, message: 'Password is required' }] }]"}],attrs:{placeholder:"Password",autocomplete:"new-password"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.mt5TerminalPath")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["mt5_terminal_path"],expression:"['mt5_terminal_path']"}],attrs:{placeholder:"C:\\Program Files\\MetaTrader 5\\terminal64.exe"}}),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.exchange.mt5TerminalPathHint")))])],1)],1)]:e._e(),e.addExchangeType?t("a-form-item",[t("a-button",{attrs:{block:"",loading:e.testingExchange},on:{click:e.handleTestExchangeConnection}},[t("a-icon",{attrs:{type:"api"}}),e._v(" "+e._s(e.$t("profile.exchange.testConnection"))+" ")],1),e.exchangeTestResult?t("div",{staticClass:"test-result-msg",class:e.exchangeTestResult.success?"success":"error"},[t("a-icon",{attrs:{type:e.exchangeTestResult.success?"check-circle":"close-circle"}}),e._v(" "+e._s(e.exchangeTestResult.message)+" ")],1):e._e()],1):e._e()],2)],1)],1)},i=[],n=a(57888),o=a(76959),s=a(17654),l=(a(74423),a(27617)),c=a(39523),d=a(72694),u=a(73047),p=a(21170),f={name:"Profile",mixins:[p.t],data:function(){return{loading:!1,saving:!1,changingPassword:!1,sendingPwdCode:!1,pwdCodeCountdown:0,pwdCodeTimer:null,activeTab:"basic",profile:{id:null,username:"",nickname:"",email:"",avatar:"",role:"user",last_login_at:null},creditsLog:[],creditsLogLoading:!1,creditsLogPagination:{current:1,pageSize:10,total:0},referralData:{list:[],total:0,referral_code:"",referral_bonus:0,register_bonus:0},referralLoading:!1,referralPagination:{current:1,pageSize:10,total:0},billing:{credits:0,is_vip:!1,vip_expires_at:null,billing_enabled:!1,vip_bypass:!0,feature_costs:{},recharge_telegram_url:""},rechargeTelegramUrl:"https://t.me/your_support_bot",notificationSettings:{default_channels:["browser"],telegram_bot_token:"",telegram_chat_id:"",email:"",phone:"",discord_webhook:"",webhook_url:"",webhook_token:""},savingNotifications:!1,testingNotification:!1,exchangeCredentials:[],exchangeLoading:!1,showAddExchangeModal:!1,savingExchange:!1,testingExchange:!1,exchangeTestResult:null,addExchangeType:"",selectedExchangeId:"",cryptoExchangeList:[{id:"binance",name:"Binance"},{id:"okx",name:"OKX"},{id:"bitget",name:"Bitget"},{id:"bybit",name:"Bybit"},{id:"coinbaseexchange",name:"Coinbase"},{id:"kraken",name:"Kraken"},{id:"kucoin",name:"KuCoin"},{id:"gate",name:"Gate.io"},{id:"bitfinex",name:"Bitfinex"}]}},computed:{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},isVip:function(){if(!this.billing.vip_expires_at)return!1;var e=new Date(this.billing.vip_expires_at);return e>new Date},creditsLogColumns:function(){return[{title:this.$t("profile.creditsLog.time")||"时间",dataIndex:"created_at",width:160,scopedSlots:{customRender:"created_at"}},{title:this.$t("profile.creditsLog.action")||"类型",dataIndex:"action",width:100,scopedSlots:{customRender:"action"}},{title:this.$t("profile.creditsLog.amount")||"变动",dataIndex:"amount",width:100,scopedSlots:{customRender:"amount"}},{title:this.$t("profile.creditsLog.balance")||"余额",dataIndex:"balance_after",width:100},{title:this.$t("profile.creditsLog.remark")||"备注",dataIndex:"remark",ellipsis:!0}]},referralColumns:function(){return[{title:this.$t("profile.referral.user")||"用户",dataIndex:"username",scopedSlots:{customRender:"user"}},{title:this.$t("profile.referral.registerTime")||"注册时间",dataIndex:"created_at",width:180,scopedSlots:{customRender:"created_at"}}]},referralLink:function(){var e=window.location.origin+window.location.pathname,t=this.referralData.referral_code||this.profile.id;return"".concat(e,"#/user/login?ref=").concat(t)},exchangeColumns:function(){return[{title:this.$t("profile.exchange.colExchange")||"Exchange",dataIndex:"exchange_id",width:140,scopedSlots:{customRender:"exchange_id"}},{title:this.$t("profile.exchange.colName")||"Name",dataIndex:"name",width:140,customRender:function(e){return e||"-"}},{title:this.$t("profile.exchange.colHint")||"Connection Info",dataIndex:"api_key_hint",scopedSlots:{customRender:"api_key_hint"}},{title:this.$t("profile.exchange.colCreatedAt")||"Created At",dataIndex:"created_at",width:180,scopedSlots:{customRender:"created_at"}},{title:this.$t("profile.exchange.colActions")||"Actions",width:120,scopedSlots:{customRender:"action"}}]},addExchangeNeedsPassphrase:function(){var e=["okx","bitget","kucoin"];return e.includes(this.selectedExchangeId)},addExchangeShowDemo:function(){return"binance"===this.selectedExchangeId}},watch:{activeTab:function(e){"credits"===e&&0===this.creditsLog.length&&this.loadCreditsLog(),"referrals"!==e||this.referralData.list&&0!==this.referralData.list.length||this.loadReferrals(),"notifications"!==e||this.notificationSettings.telegram_chat_id||this.notificationSettings.discord_webhook||this.loadNotificationSettings(),"exchange"===e&&0===this.exchangeCredentials.length&&this.loadExchangeCredentials()}},beforeCreate:function(){this.profileForm=this.$form.createForm(this,{name:"profile"}),this.passwordForm=this.$form.createForm(this,{name:"password"}),this.notificationForm=this.$form.createForm(this,{name:"notification"}),this.exchangeForm=this.$form.createForm(this,{name:"exchange"})},mounted:function(){this.loadProfile(),this.loadReferrals()},beforeDestroy:function(){this.pwdCodeTimer&&clearInterval(this.pwdCodeTimer)},methods:{loadProfile:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.loading=!0,t.p=1,t.n=2,(0,l.E$)();case 2:a=t.v,1===a.code?(e.profile=a.data,a.data.billing&&(e.billing=a.data.billing,e.billing.recharge_telegram_url&&(e.rechargeTelegramUrl=e.billing.recharge_telegram_url)),a.data.notification_settings&&(e.notificationSettings={default_channels:a.data.notification_settings.default_channels||["browser"],telegram_bot_token:a.data.notification_settings.telegram_bot_token||"",telegram_chat_id:a.data.notification_settings.telegram_chat_id||"",email:a.data.notification_settings.email||a.data.email||"",phone:a.data.notification_settings.phone||"",discord_webhook:a.data.notification_settings.discord_webhook||"",webhook_url:a.data.notification_settings.webhook_url||"",webhook_token:a.data.notification_settings.webhook_token||""}),e.$nextTick(function(){e.profileForm.setFieldsValue({nickname:e.profile.nickname,email:e.profile.email})})):e.$message.error(a.msg||"Failed to load profile"),t.n=4;break;case 3:t.p=3,t.v,e.$message.error("Failed to load profile");case 4:return t.p=4,e.loading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},loadRechargeUrl:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if("admin"!==e.profile.role){t.n=4;break}return t.p=1,t.n=2,(0,c.YT)();case 2:a=t.v,1===a.code&&a.data&&a.data.billing&&(e.rechargeTelegramUrl=a.data.billing.RECHARGE_TELEGRAM_URL||e.rechargeTelegramUrl),t.n=4;break;case 3:t.p=3,t.v;case 4:return t.a(2)}},t,null,[[1,3]])}))()},handleRecharge:function(){this.$router.push("/billing")},formatCredits:function(e){return e||0===e?Number(e).toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:2}):"0"},formatDate:function(e){if(!e)return"";var t=new Date(e);return t.toLocaleDateString()},handleSaveProfile:function(){var e=this;this.profileForm.validateFields(function(){var t=(0,s.A)((0,o.A)().m(function t(a,r){var i;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(!a){t.n=1;break}return t.a(2);case 1:return e.saving=!0,t.p=2,t.n=3,(0,l.r7)(r);case 3:i=t.v,1===i.code?(e.$message.success(i.msg||"Profile updated successfully"),e.loadProfile()):e.$message.error(i.msg||"Update failed"),t.n=5;break;case 4:t.p=4,t.v,e.$message.error("Update failed");case 5:return t.p=5,e.saving=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(e,a){return t.apply(this,arguments)}}())},validateConfirmPassword:function(e,t,a){var r=this.passwordForm.getFieldValue("new_password");t&&t!==r?a(this.$t("profile.passwordMismatch")||"Passwords do not match"):a()},handleSendPwdCode:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var r,i,n,s,l;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e.profile.email){t.n=1;break}return e.$message.error(e.$t("profile.noEmailWarning")||"Please set your email first"),t.a(2);case 1:return e.sendingPwdCode=!0,t.p=2,t.n=3,a.e(24).then(a.bind(a,20024));case 3:return r=t.v,i=r.sendVerificationCode,t.n=4,i({email:e.profile.email,type:"change_password"});case 4:n=t.v,1===n.code?(e.$message.success(e.$t("profile.codeSent")||"Verification code sent"),e.startPwdCodeCountdown()):e.$message.error(n.msg||"Failed to send code"),t.n=6;break;case 5:t.p=5,l=t.v,e.$message.error((null===(s=l.response)||void 0===s||null===(s=s.data)||void 0===s?void 0:s.msg)||"Failed to send code");case 6:return t.p=6,e.sendingPwdCode=!1,t.f(6);case 7:return t.a(2)}},t,null,[[2,5,6,7]])}))()},startPwdCodeCountdown:function(){var e=this;this.pwdCodeCountdown=60,this.pwdCodeTimer=setInterval(function(){e.pwdCodeCountdown--,e.pwdCodeCountdown<=0&&(clearInterval(e.pwdCodeTimer),e.pwdCodeTimer=null)},1e3)},validateNewPassword:function(e,t,a){t?t.length<8?a(new Error(this.$t("user.register.pwdMinLength")||"At least 8 characters")):/[A-Z]/.test(t)?/[a-z]/.test(t)?/[0-9]/.test(t)?a():a(new Error(this.$t("user.register.pwdNumber")||"At least one number")):a(new Error(this.$t("user.register.pwdLowercase")||"At least one lowercase letter")):a(new Error(this.$t("user.register.pwdUppercase")||"At least one uppercase letter")):a()},handleChangePassword:function(){var e=this;this.passwordForm.validateFields(function(){var t=(0,s.A)((0,o.A)().m(function t(r,i){var n,s,l,c,d;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(!r){t.n=1;break}return t.a(2);case 1:return e.changingPassword=!0,t.p=2,t.n=3,a.e(24).then(a.bind(a,20024));case 3:return n=t.v,s=n.changePassword,t.n=4,s({code:i.code,new_password:i.new_password});case 4:l=t.v,1===l.code?(e.$message.success(l.msg||"Password changed successfully"),e.passwordForm.resetFields()):e.$message.error(l.msg||"Change password failed"),t.n=6;break;case 5:t.p=5,d=t.v,e.$message.error((null===(c=d.response)||void 0===c||null===(c=c.data)||void 0===c?void 0:c.msg)||"Change password failed");case 6:return t.p=6,e.changingPassword=!1,t.f(6);case 7:return t.a(2)}},t,null,[[2,5,6,7]])}));return function(e,a){return t.apply(this,arguments)}}())},getRoleColor:function(e){var t={admin:"red",manager:"orange",user:"blue",viewer:"default"};return t[e]||"default"},getRoleLabel:function(e){var t={admin:this.$t("userManage.roleAdmin")||"Admin",manager:this.$t("userManage.roleManager")||"Manager",user:this.$t("userManage.roleUser")||"User",viewer:this.$t("userManage.roleViewer")||"Viewer"};return t[e]||e},formatTime:function(e){if(!e)return"";var t=new Date("number"===typeof e?1e3*e:e);return t.toLocaleString()},loadCreditsLog:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.creditsLogLoading=!0,t.p=1,t.n=2,(0,l.v9)({page:e.creditsLogPagination.current,page_size:e.creditsLogPagination.pageSize});case 2:a=t.v,1===a.code&&(e.creditsLog=a.data.items||[],e.creditsLogPagination.total=a.data.total||0),t.n=4;break;case 3:t.p=3,t.v,e.$message.error("Failed to load credits log");case 4:return t.p=4,e.creditsLogLoading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},handleCreditsLogChange:function(e){this.creditsLogPagination.current=e.current,this.loadCreditsLog()},loadReferrals:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.referralLoading=!0,t.p=1,t.n=2,(0,l.rx)({page:e.referralPagination.current,page_size:e.referralPagination.pageSize});case 2:a=t.v,1===a.code&&(e.referralData={list:a.data.list||[],total:a.data.total||0,referral_code:a.data.referral_code||"",referral_bonus:a.data.referral_bonus||0,register_bonus:a.data.register_bonus||0},e.referralPagination.total=a.data.total||0),t.n=4;break;case 3:t.p=3,t.v,e.$message.error("Failed to load referral data");case 4:return t.p=4,e.referralLoading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},handleReferralChange:function(e){this.referralPagination.current=e.current,this.loadReferrals()},copyReferralLink:function(){var e=this,t=this.referralLink;navigator.clipboard?navigator.clipboard.writeText(t).then(function(){e.$message.success(e.$t("profile.referral.linkCopied")||"邀请链接已复制")}).catch(function(){e.fallbackCopy(t)}):this.fallbackCopy(t)},fallbackCopy:function(e){var t=document.createElement("textarea");t.value=e,document.body.appendChild(t),t.select();try{document.execCommand("copy"),this.$message.success(this.$t("profile.referral.linkCopied")||"邀请链接已复制")}catch(a){this.$message.error("Copy failed")}document.body.removeChild(t)},getActionColor:function(e){var t={consume:"red",recharge:"green",admin_adjust:"blue",refund:"orange",vip_grant:"gold",vip_revoke:"default",register_bonus:"cyan",referral_bonus:"purple",indicator_purchase:"volcano",indicator_sale:"lime"};return t[e]||"default"},getActionLabel:function(e){var t={consume:this.$t("profile.creditsLog.actionConsume")||"消费",recharge:this.$t("profile.creditsLog.actionRecharge")||"充值",admin_adjust:this.$t("profile.creditsLog.actionAdjust")||"调整",refund:this.$t("profile.creditsLog.actionRefund")||"退款",vip_grant:this.$t("profile.creditsLog.actionVipGrant")||"VIP授予",vip_revoke:this.$t("profile.creditsLog.actionVipRevoke")||"VIP取消",register_bonus:this.$t("profile.creditsLog.actionRegisterBonus")||"注册奖励",referral_bonus:this.$t("profile.creditsLog.actionReferralBonus")||"邀请奖励",indicator_purchase:this.$t("profile.creditsLog.actionIndicatorPurchase")||"购买指标",indicator_sale:this.$t("profile.creditsLog.actionIndicatorSale")||"出售指标"};return t[e]||e},loadExchangeCredentials:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.exchangeLoading=!0,t.p=1,t.n=2,(0,d.IA)();case 2:a=t.v,1===a.code&&a.data&&(e.exchangeCredentials=a.data.items||[]),t.n=4;break;case 3:t.p=3,t.v,e.$message.error("Failed to load exchange accounts");case 4:return t.p=4,e.exchangeLoading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},handleExchangeTypeChange:function(e){this.selectedExchangeId=e,this.exchangeTestResult=null;var t=this.cryptoExchangeList.map(function(e){return e.id});t.includes(e)?this.addExchangeType="crypto":this.addExchangeType="ibkr"===e?"ibkr":"mt5"===e?"mt5":""},getExchangeDisplayName:function(e){var t={binance:"Binance",okx:"OKX",bitget:"Bitget",bybit:"Bybit",coinbaseexchange:"Coinbase",kraken:"Kraken",kucoin:"KuCoin",gate:"Gate.io",bitfinex:"Bitfinex",ibkr:"IBKR",mt5:"MetaTrader 5"};return t[e]||e},handleSaveExchange:function(){var e=this;this.exchangeForm.validateFields(function(){var t=(0,s.A)((0,o.A)().m(function t(a,r){var i,s,l;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(!a){t.n=1;break}return t.a(2);case 1:return e.savingExchange=!0,t.p=2,i=(0,n.A)({},r),t.n=3,(0,d.PR)(i);case 3:s=t.v,1===s.code?(e.$message.success(e.$t("profile.exchange.saveSuccess")),e.showAddExchangeModal=!1,e.exchangeForm.resetFields(),e.addExchangeType="",e.selectedExchangeId="",e.exchangeTestResult=null,e.loadExchangeCredentials()):e.$message.error(s.msg||e.$t("profile.exchange.saveFailed")),t.n=5;break;case 4:t.p=4,l=t.v,e.$message.error(l.message||e.$t("profile.exchange.saveFailed"));case 5:return t.p=5,e.savingExchange=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(e,a){return t.apply(this,arguments)}}())},handleDeleteCredential:function(e){var t=this;return(0,s.A)((0,o.A)().m(function a(){var r;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,d.kI)(e);case 1:r=a.v,1===r.code?(t.$message.success(t.$t("profile.exchange.deleteSuccess")),t.loadExchangeCredentials()):t.$message.error(r.msg||"Delete failed"),a.n=3;break;case 2:a.p=2,a.v,t.$message.error("Delete failed");case 3:return a.a(2)}},a,null,[[0,2]])}))()},handleTestExchangeConnection:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a,r,i,s,l;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(a=e.exchangeForm.getFieldsValue(),r=a.exchange_id,r){t.n=1;break}return t.a(2);case 1:return e.testingExchange=!0,e.exchangeTestResult=null,t.p=2,i=(0,n.A)({},a),t.n=3,(0,u.kv)(i);case 3:s=t.v,1===s.code?e.exchangeTestResult={success:!0,message:e.$t("profile.exchange.testSuccess")}:e.exchangeTestResult={success:!1,message:"".concat(e.$t("profile.exchange.testFailed"),": ").concat(s.msg||"Unknown error")},t.n=5;break;case 4:t.p=4,l=t.v,e.exchangeTestResult={success:!1,message:"".concat(e.$t("profile.exchange.testFailed"),": ").concat(l.message||"Network error")};case 5:return t.p=5,e.testingExchange=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}))()},loadNotificationSettings:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return t.p=0,t.n=1,(0,l.vF)();case 1:a=t.v,1===a.code&&a.data&&(e.notificationSettings={default_channels:a.data.default_channels||["browser"],telegram_bot_token:a.data.telegram_bot_token||"",telegram_chat_id:a.data.telegram_chat_id||"",email:a.data.email||e.profile.email||"",phone:a.data.phone||"",discord_webhook:a.data.discord_webhook||"",webhook_url:a.data.webhook_url||"",webhook_token:a.data.webhook_token||""},e.$nextTick(function(){e.notificationForm.setFieldsValue({default_channels:e.notificationSettings.default_channels,telegram_bot_token:e.notificationSettings.telegram_bot_token,telegram_chat_id:e.notificationSettings.telegram_chat_id,email:e.notificationSettings.email,phone:e.notificationSettings.phone,discord_webhook:e.notificationSettings.discord_webhook,webhook_url:e.notificationSettings.webhook_url,webhook_token:e.notificationSettings.webhook_token})})),t.n=3;break;case 2:t.p=2,t.v;case 3:return t.a(2)}},t,null,[[0,2]])}))()},handleSaveNotifications:function(){var e=this;this.notificationForm.validateFields(function(){var t=(0,s.A)((0,o.A)().m(function t(a,r){var i;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(!a){t.n=1;break}return t.a(2);case 1:return e.savingNotifications=!0,t.p=2,t.n=3,(0,l.Gl)({default_channels:r.default_channels||["browser"],telegram_bot_token:r.telegram_bot_token||"",telegram_chat_id:r.telegram_chat_id||"",email:r.email||"",phone:r.phone||"",discord_webhook:r.discord_webhook||"",webhook_url:r.webhook_url||"",webhook_token:r.webhook_token||""});case 3:i=t.v,1===i.code?(e.$message.success(e.$t("profile.notifications.saveSuccess")||"通知设置保存成功"),e.notificationSettings=i.data||e.notificationSettings):e.$message.error(i.msg||"保存失败"),t.n=5;break;case 4:t.p=4,t.v,e.$message.error("保存失败");case 5:return t.p=5,e.savingNotifications=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(e,a){return t.apply(this,arguments)}}())},handleTestNotification:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a,r,i;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(a=e.notificationForm.getFieldsValue(),r=a.default_channels||[],0!==r.length){t.n=1;break}return e.$message.warning(e.$t("profile.notifications.selectChannel")||"请至少选择一个通知渠道"),t.a(2);case 1:if(!r.includes("telegram")){t.n=3;break}if(a.telegram_bot_token){t.n=2;break}return e.$message.warning(e.$t("profile.notifications.fillTelegramToken")||"请填写 Telegram Bot Token"),t.a(2);case 2:if(a.telegram_chat_id){t.n=3;break}return e.$message.warning(e.$t("profile.notifications.fillTelegram")||"请填写 Telegram Chat ID"),t.a(2);case 3:if(!r.includes("email")||a.email){t.n=4;break}return e.$message.warning(e.$t("profile.notifications.fillEmail")||"请填写通知邮箱"),t.a(2);case 4:return e.testingNotification=!0,t.p=5,t.n=6,(0,l.Gl)({default_channels:r,telegram_bot_token:a.telegram_bot_token||"",telegram_chat_id:a.telegram_chat_id||"",email:a.email||"",phone:a.phone||"",discord_webhook:a.discord_webhook||"",webhook_url:a.webhook_url||"",webhook_token:a.webhook_token||""});case 6:if(i=t.v,1===i.code){t.n=7;break}return e.$message.error(i.msg||"保存设置失败"),t.a(2);case 7:e.$message.info(e.$t("profile.notifications.testSent")||"测试通知已发送,请检查您的通知渠道"),t.n=9;break;case 8:t.p=8,t.v,e.$message.error("发送测试通知失败");case 9:return t.p=9,e.testingNotification=!1,t.f(9);case 10:return t.a(2)}},t,null,[[5,8,9,10]])}))()}}},m=f,g=a(845),h=(0,g.A)(m,r,i,!1,null,"2b760d50",null),v=h.exports},72694:function(e,t,a){a.d(t,{IA:function(){return o},PR:function(){return s},kI:function(){return l}});var r=a(57888),i=a(76471),n={list:"/api/credentials/list",get:"/api/credentials/get",create:"/api/credentials/create",delete:"/api/credentials/delete"};function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,i.Ay)({url:n.list,method:"get",params:e})}function s(e){return(0,i.Ay)({url:n.create,method:"post",data:e})}function l(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(0,i.Ay)({url:n.delete,method:"delete",params:(0,r.A)({id:e},t)})}},39523:function(e,t,a){a.d(t,{DZ:function(){return o},YT:function(){return n},_d:function(){return s},lo:function(){return i}});var r=a(76471);function i(){return(0,r.Ay)({url:"/api/settings/schema",method:"get"})}function n(){return(0,r.Ay)({url:"/api/settings/values",method:"get"})}function o(e){return(0,r.Ay)({url:"/api/settings/save",method:"post",data:e})}function s(){return(0,r.Ay)({url:"/api/settings/openrouter-balance",method:"get"})}},27617:function(e,t,a){a.d(t,{DK:function(){return _},E$:function(){return d},Gl:function(){return f},O0:function(){return c},TK:function(){return o},aU:function(){return i},cw:function(){return l},d$:function(){return b},hG:function(){return s},kg:function(){return n},nY:function(){return v},r7:function(){return u},rx:function(){return g},v9:function(){return m},vF:function(){return p},vi:function(){return w},wq:function(){return h}});var r=a(76471);function i(e){return(0,r.Ay)({url:"/api/users/list",method:"get",params:e})}function n(e){return(0,r.Ay)({url:"/api/users/create",method:"post",data:e})}function o(e,t){return(0,r.Ay)({url:"/api/users/update",method:"put",params:{id:e},data:t})}function s(e){return(0,r.Ay)({url:"/api/users/delete",method:"delete",params:{id:e}})}function l(e){return(0,r.Ay)({url:"/api/users/reset-password",method:"post",data:e})}function c(){return(0,r.Ay)({url:"/api/users/roles",method:"get"})}function d(){return(0,r.Ay)({url:"/api/users/profile",method:"get"})}function u(e){return(0,r.Ay)({url:"/api/users/profile/update",method:"put",data:e})}function p(){return(0,r.Ay)({url:"/api/users/notification-settings",method:"get"})}function f(e){return(0,r.Ay)({url:"/api/users/notification-settings",method:"put",data:e})}function m(e){return(0,r.Ay)({url:"/api/users/my-credits-log",method:"get",params:e})}function g(e){return(0,r.Ay)({url:"/api/users/my-referrals",method:"get",params:e})}function h(e){return(0,r.Ay)({url:"/api/users/set-credits",method:"post",data:e})}function v(e){return(0,r.Ay)({url:"/api/users/set-vip",method:"post",data:e})}function _(e){return(0,r.Ay)({url:"/api/users/system-strategies",method:"get",params:e})}function w(e){return(0,r.Ay)({url:"/api/users/admin-orders",method:"get",params:e})}function b(e){return(0,r.Ay)({url:"/api/users/admin-ai-stats",method:"get",params:e})}}}]); \ No newline at end of file +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[829],{99829:function(e,t,a){a.r(t),a.d(t,{default:function(){return v}});var r=function(){var e=this,t=e._self._c;return t("div",{staticClass:"profile-page",class:{"theme-dark":e.isDarkTheme}},[t("div",{staticClass:"page-header"},[t("h2",{staticClass:"page-title"},[t("a-icon",{attrs:{type:"user"}}),t("span",[e._v(e._s(e.$t("profile.title")||"My Profile"))])],1),t("p",{staticClass:"page-desc"},[e._v(e._s(e.$t("profile.description")||"Manage your account settings and preferences"))])]),t("a-row",{staticClass:"profile-cards-row",attrs:{gutter:24}},[t("a-col",{staticClass:"profile-card-col",attrs:{xs:24,md:8}},[t("a-card",{staticClass:"profile-card",attrs:{bordered:!1}},[t("div",{staticClass:"avatar-section"},[t("a-avatar",{attrs:{size:100,src:e.profile.avatar||"/avatar2.jpg"}}),t("h3",{staticClass:"username"},[e._v(e._s(e.profile.nickname||e.profile.username))]),t("p",{staticClass:"user-role"},[t("a-tag",{attrs:{color:e.getRoleColor(e.profile.role)}},[e._v(" "+e._s(e.getRoleLabel(e.profile.role))+" ")]),e.isVip?t("a-tag",{attrs:{color:"gold"}},[t("a-icon",{attrs:{type:"crown"}}),e._v(" VIP ")],1):e._e()],1)],1),t("a-divider"),t("div",{staticClass:"profile-info"},[t("div",{staticClass:"info-item"},[t("a-icon",{attrs:{type:"user"}}),t("span",{staticClass:"label"},[e._v(e._s(e.$t("profile.username")||"Username")+":")]),t("span",{staticClass:"value"},[e._v(e._s(e.profile.username))])],1),t("div",{staticClass:"info-item"},[t("a-icon",{attrs:{type:"mail"}}),t("span",{staticClass:"label"},[e._v(e._s(e.$t("profile.email")||"Email")+":")]),t("span",{staticClass:"value"},[e._v(e._s(e.profile.email||"-"))])],1),t("div",{staticClass:"info-item"},[t("a-icon",{attrs:{type:"calendar"}}),t("span",{staticClass:"label"},[e._v(e._s(e.$t("profile.lastLogin")||"Last Login")+":")]),t("span",{staticClass:"value"},[e._v(e._s(e.formatTime(e.profile.last_login_at)||"-"))])],1)])],1)],1),t("a-col",{staticClass:"right-cards-col",attrs:{xs:24,md:16}},[t("a-row",{staticClass:"right-cards-row",attrs:{gutter:16}},[t("a-col",{attrs:{xs:24,md:12}},[t("a-card",{staticClass:"credits-card",attrs:{bordered:!1}},[t("div",{staticClass:"credits-header"},[t("h3",{staticClass:"credits-title"},[t("a-icon",{attrs:{type:"wallet"}}),e._v(" "+e._s(e.$t("profile.credits.title")||"我的积分")+" ")],1)]),t("div",{staticClass:"credits-body"},[t("div",{staticClass:"credits-amount"},[t("span",{staticClass:"amount-value"},[e._v(e._s(e.formatCredits(e.billing.credits)))]),t("span",{staticClass:"amount-label"},[e._v(e._s(e.$t("profile.credits.unit")||"积分"))])]),e.billing.vip_expires_at?t("div",{staticClass:"vip-status"},[t("a-icon",{style:{color:e.isVip?"#faad14":"#999"},attrs:{type:"crown"}}),e.isVip?t("span",{staticClass:"vip-active"},[e._v(" "+e._s(e.$t("profile.credits.vipExpires")||"VIP有效期至")+": "+e._s(e.formatDate(e.billing.vip_expires_at))+" ")]):t("span",{staticClass:"vip-expired"},[e._v(" "+e._s(e.$t("profile.credits.vipExpired")||"VIP已过期")+" ")])],1):e.billing.is_vip?e._e():t("div",{staticClass:"vip-status"},[t("span",{staticClass:"no-vip"},[e._v(e._s(e.$t("profile.credits.noVip")||"非VIP用户"))])])]),t("a-divider"),t("div",{staticClass:"credits-actions"},[t("a-button",{attrs:{type:"primary",icon:"shopping"},on:{click:e.handleRecharge}},[e._v(" "+e._s(e.$t("profile.credits.recharge")||"开通/充值")+" ")])],1),e.billing.billing_enabled?t("div",{staticClass:"credits-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.credits.hint")||"使用AI分析/回测/监控等功能会消耗积分;VIP仅可免费使用VIP免费指标。"))])],1):e._e()],1)],1),t("a-col",{attrs:{xs:24,md:12}},[t("a-card",{staticClass:"referral-card",attrs:{bordered:!1}},[t("div",{staticClass:"referral-header"},[t("h3",{staticClass:"referral-title"},[t("a-icon",{attrs:{type:"team"}}),e._v(" "+e._s(e.$t("profile.referral.title")||"邀请好友")+" ")],1)]),t("div",{staticClass:"referral-body"},[t("div",{staticClass:"referral-stats"},[t("div",{staticClass:"stat-item"},[t("span",{staticClass:"stat-value"},[e._v(e._s(e.referralData.total||0))]),t("span",{staticClass:"stat-label"},[e._v(e._s(e.$t("profile.referral.totalInvited")||"已邀请"))])]),e.referralData.referral_bonus>0?t("div",{staticClass:"stat-item"},[t("span",{staticClass:"stat-value"},[e._v("+"+e._s(e.referralData.referral_bonus))]),t("span",{staticClass:"stat-label"},[e._v(e._s(e.$t("profile.referral.bonusPerInvite")||"每邀请获得"))])]):e._e()]),t("a-divider",{staticStyle:{margin:"12px 0"}}),t("div",{staticClass:"referral-link-section"},[t("div",{staticClass:"link-label"},[e._v(e._s(e.$t("profile.referral.yourLink")||"您的邀请链接"))]),t("div",{staticClass:"link-box"},[t("a-input",{attrs:{value:e.referralLink,readonly:"",size:"small"}},[t("a-tooltip",{attrs:{slot:"suffix",title:e.$t("profile.referral.copyLink")||"复制链接"},slot:"suffix"},[t("a-icon",{staticStyle:{cursor:"pointer"},attrs:{type:"copy"},on:{click:e.copyReferralLink}})],1)],1)],1)]),e.referralData.register_bonus>0?t("div",{staticClass:"referral-hint"},[t("a-icon",{attrs:{type:"gift"}}),t("span",[e._v(e._s(e.$t("profile.referral.newUserBonus")||"新用户注册获得")+" "+e._s(e.referralData.register_bonus)+" "+e._s(e.$t("profile.credits.unit")||"积分"))])],1):e._e()],1)])],1)],1)],1)],1),t("a-row",{staticStyle:{"margin-top":"24px"},attrs:{gutter:24}},[t("a-col",{attrs:{xs:24}},[t("a-card",{staticClass:"edit-card",attrs:{bordered:!1}},[t("a-tabs",{model:{value:e.activeTab,callback:function(t){e.activeTab=t},expression:"activeTab"}},[t("a-tab-pane",{key:"basic",attrs:{tab:e.$t("profile.basicInfo")||"Basic Info"}},[t("a-form",{staticClass:"profile-form",attrs:{form:e.profileForm,layout:"vertical"}},[t("a-form-item",{attrs:{label:e.$t("profile.nickname")||"Nickname"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["nickname",{initialValue:e.profile.nickname}],expression:"['nickname', { initialValue: profile.nickname }]"}],attrs:{placeholder:e.$t("profile.nicknamePlaceholder")||"Enter your nickname"}},[t("a-icon",{attrs:{slot:"prefix",type:"smile"},slot:"prefix"})],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.email")||"Email"}},[t("a-input",{attrs:{value:e.profile.email||"-",disabled:""}},[t("a-icon",{attrs:{slot:"prefix",type:"mail"},slot:"prefix"}),t("a-tooltip",{attrs:{slot:"suffix",title:e.$t("profile.emailCannotChange")||"Email cannot be changed after registration"},slot:"suffix"},[t("a-icon",{staticStyle:{color:"rgba(0,0,0,.45)"},attrs:{type:"info-circle"}})],1)],1)],1),t("a-form-item",[t("a-button",{attrs:{type:"primary",loading:e.saving},on:{click:e.handleSaveProfile}},[t("a-icon",{attrs:{type:"save"}}),e._v(" "+e._s(e.$t("common.save")||"Save")+" ")],1)],1)],1)],1),t("a-tab-pane",{key:"password",attrs:{tab:e.$t("profile.changePassword")||"Change Password"}},[t("a-form",{staticClass:"password-form",attrs:{form:e.passwordForm,layout:"vertical"}},[t("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{message:e.$t("profile.passwordHintNew")||"For security, email verification is required to change password. Password must be at least 8 characters with uppercase, lowercase, and number.",type:"info",showIcon:""}}),t("a-form-item",{attrs:{label:e.$t("profile.verificationCode")||"Verification Code"}},[t("a-row",{attrs:{gutter:12}},[t("a-col",{attrs:{span:16}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["code",{rules:[{required:!0,message:e.$t("profile.codeRequired")||"Please enter verification code"}]}],expression:"['code', {\n rules: [{ required: true, message: $t('profile.codeRequired') || 'Please enter verification code' }]\n }]"}],attrs:{placeholder:e.$t("profile.codePlaceholder")||"Enter verification code"}},[t("a-icon",{attrs:{slot:"prefix",type:"safety-certificate"},slot:"prefix"})],1)],1),t("a-col",{attrs:{span:8}},[t("a-button",{attrs:{block:"",loading:e.sendingPwdCode,disabled:e.sendingPwdCode||e.pwdCodeCountdown>0||!e.profile.email},on:{click:e.handleSendPwdCode}},[e._v(" "+e._s(e.pwdCodeCountdown>0?"".concat(e.pwdCodeCountdown,"s"):e.$t("profile.sendCode")||"Send Code")+" ")])],1)],1),e.profile.email?t("div",{staticClass:"email-hint"},[e._v(" "+e._s(e.$t("profile.codeWillSendTo")||"Code will be sent to")+": "+e._s(e.profile.email)+" ")]):t("div",{staticClass:"email-hint email-warning"},[e._v(" "+e._s(e.$t("profile.noEmailWarning")||"Please set your email first in Basic Info tab")+" ")])],1),t("a-form-item",{attrs:{label:e.$t("profile.newPassword")||"New Password"}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["new_password",{rules:[{required:!0,message:e.$t("profile.newPasswordRequired")||"Please enter new password"},{validator:e.validateNewPassword}]}],expression:"['new_password', {\n rules: [\n { required: true, message: $t('profile.newPasswordRequired') || 'Please enter new password' },\n { validator: validateNewPassword }\n ]\n }]"}],attrs:{placeholder:e.$t("profile.newPasswordPlaceholder")||"Enter new password"}},[t("a-icon",{attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.confirmPassword")||"Confirm Password"}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["confirm_password",{rules:[{required:!0,message:e.$t("profile.confirmPasswordRequired")||"Please confirm password"},{validator:e.validateConfirmPassword}]}],expression:"['confirm_password', {\n rules: [\n { required: true, message: $t('profile.confirmPasswordRequired') || 'Please confirm password' },\n { validator: validateConfirmPassword }\n ]\n }]"}],attrs:{placeholder:e.$t("profile.confirmPasswordPlaceholder")||"Confirm new password"}},[t("a-icon",{attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),t("a-form-item",[t("a-button",{attrs:{type:"primary",loading:e.changingPassword,disabled:!e.profile.email},on:{click:e.handleChangePassword}},[t("a-icon",{attrs:{type:"key"}}),e._v(" "+e._s(e.$t("profile.changePassword")||"Change Password")+" ")],1)],1)],1)],1),t("a-tab-pane",{key:"credits",attrs:{tab:e.$t("profile.creditsLog")||"消费记录"}},[t("a-table",{attrs:{columns:e.creditsLogColumns,dataSource:e.creditsLog,loading:e.creditsLogLoading,pagination:e.creditsLogPagination,rowKey:function(e){return e.id},size:"small"},on:{change:e.handleCreditsLogChange},scopedSlots:e._u([{key:"action",fn:function(a){return[t("a-tag",{attrs:{color:e.getActionColor(a)}},[e._v(" "+e._s(e.getActionLabel(a))+" ")])]}},{key:"amount",fn:function(a){return[t("span",{class:a>=0?"amount-positive":"amount-negative"},[e._v(" "+e._s(a>=0?"+":"")+e._s(a)+" ")])]}},{key:"created_at",fn:function(t){return[e._v(" "+e._s(e.formatTime(t))+" ")]}}])})],1),t("a-tab-pane",{key:"notifications",attrs:{tab:e.$t("profile.notifications.title")||"通知设置"}},[t("div",{staticClass:"notification-settings-form"},[t("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{message:e.$t("profile.notifications.hint")||"配置您的默认通知方式,在创建资产监控和预警时将自动使用这些设置",type:"info",showIcon:""}}),t("a-form",{staticStyle:{"max-width":"600px"},attrs:{form:e.notificationForm,layout:"vertical"}},[t("a-form-item",{attrs:{label:e.$t("profile.notifications.defaultChannels")||"默认通知渠道"}},[t("a-checkbox-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["default_channels",{initialValue:e.notificationSettings.default_channels||["browser"]}],expression:"['default_channels', { initialValue: notificationSettings.default_channels || ['browser'] }]"}]},[t("a-row",{attrs:{gutter:16}},[t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"browser"}},[t("a-icon",{attrs:{type:"bell"}}),e._v(" "+e._s(e.$t("profile.notifications.browser")||"站内通知")+" ")],1)],1),t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"telegram"}},[t("a-icon",{attrs:{type:"send"}}),e._v(" Telegram ")],1)],1),t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"email"}},[t("a-icon",{attrs:{type:"mail"}}),e._v(" "+e._s(e.$t("profile.notifications.email")||"邮件")+" ")],1)],1)],1),t("a-row",{staticStyle:{"margin-top":"8px"},attrs:{gutter:16}},[t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"phone"}},[t("a-icon",{attrs:{type:"phone"}}),e._v(" "+e._s(e.$t("profile.notifications.phone")||"短信")+" ")],1)],1),t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"discord"}},[t("a-icon",{attrs:{type:"message"}}),e._v(" Discord ")],1)],1),t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"webhook"}},[t("a-icon",{attrs:{type:"api"}}),e._v(" Webhook ")],1)],1)],1)],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.telegramBotToken")||"Telegram Bot Token"}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["telegram_bot_token",{initialValue:e.notificationSettings.telegram_bot_token}],expression:"['telegram_bot_token', { initialValue: notificationSettings.telegram_bot_token }]"}],attrs:{placeholder:e.$t("profile.notifications.telegramBotTokenPlaceholder")||"请输入您的 Telegram Bot Token"}},[t("a-icon",{attrs:{slot:"prefix",type:"robot"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(" "+e._s(e.$t("profile.notifications.telegramBotTokenHint")||"通过 @BotFather 创建机器人获取 Token")+" "),t("a",{attrs:{href:"https://t.me/BotFather",target:"_blank",rel:"noopener noreferrer"}},[e._v("@BotFather")])])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.telegramChatId")||"Telegram Chat ID"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["telegram_chat_id",{initialValue:e.notificationSettings.telegram_chat_id}],expression:"['telegram_chat_id', { initialValue: notificationSettings.telegram_chat_id }]"}],attrs:{placeholder:e.$t("profile.notifications.telegramPlaceholder")||"请输入您的 Telegram Chat ID(如 123456789)"}},[t("a-icon",{attrs:{slot:"prefix",type:"message"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.telegramHint")||"发送 /start 给 @userinfobot 可获取您的 Chat ID"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.notifyEmail")||"通知邮箱"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["email",{initialValue:e.notificationSettings.email||e.profile.email}],expression:"['email', { initialValue: notificationSettings.email || profile.email }]"}],attrs:{placeholder:e.$t("profile.notifications.emailPlaceholder")||"接收通知的邮箱地址"}},[t("a-icon",{attrs:{slot:"prefix",type:"mail"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.emailHint")||"默认使用账户邮箱,可设置其他邮箱接收通知"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.phone")||"手机号(短信通知)"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["phone",{initialValue:e.notificationSettings.phone}],expression:"['phone', { initialValue: notificationSettings.phone }]"}],attrs:{placeholder:e.$t("profile.notifications.phonePlaceholder")||"请输入手机号(如 +8613800138000)"}},[t("a-icon",{attrs:{slot:"prefix",type:"phone"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.phoneHint")||"需要管理员配置 Twilio 服务后才能使用短信通知"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.discordWebhook")||"Discord Webhook"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["discord_webhook",{initialValue:e.notificationSettings.discord_webhook}],expression:"['discord_webhook', { initialValue: notificationSettings.discord_webhook }]"}],attrs:{placeholder:e.$t("profile.notifications.discordPlaceholder")||"https://discord.com/api/webhooks/..."}},[t("a-icon",{attrs:{slot:"prefix",type:"message"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.discordHint")||"在 Discord 服务器设置中创建 Webhook"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.webhookUrl")||"Webhook URL"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["webhook_url",{initialValue:e.notificationSettings.webhook_url}],expression:"['webhook_url', { initialValue: notificationSettings.webhook_url }]"}],attrs:{placeholder:e.$t("profile.notifications.webhookPlaceholder")||"https://your-server.com/webhook"}},[t("a-icon",{attrs:{slot:"prefix",type:"api"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.webhookHint")||"自定义 Webhook 地址,将以 POST JSON 方式推送通知"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.webhookToken")||"Webhook Token(可选)"}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["webhook_token",{initialValue:e.notificationSettings.webhook_token}],expression:"['webhook_token', { initialValue: notificationSettings.webhook_token }]"}],attrs:{placeholder:e.$t("profile.notifications.webhookTokenPlaceholder")||"用于验证请求的 Bearer Token"}},[t("a-icon",{attrs:{slot:"prefix",type:"key"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.webhookTokenHint")||"将作为 Authorization: Bearer Token 发送到 Webhook"))])],1)],1),t("a-form-item",[t("a-button",{attrs:{type:"primary",loading:e.savingNotifications},on:{click:e.handleSaveNotifications}},[t("a-icon",{attrs:{type:"save"}}),e._v(" "+e._s(e.$t("common.save")||"保存")+" ")],1),t("a-button",{staticStyle:{"margin-left":"12px"},attrs:{loading:e.testingNotification},on:{click:e.handleTestNotification}},[t("a-icon",{attrs:{type:"experiment"}}),e._v(" "+e._s(e.$t("profile.notifications.testBtn")||"发送测试通知")+" ")],1)],1)],1)],1)]),t("a-tab-pane",{key:"exchange",attrs:{tab:e.$t("profile.exchange.title")||"交易所配置"}},[t("div",{staticClass:"exchange-config-section"},[t("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{message:e.$t("profile.exchange.hint"),type:"info",showIcon:""}}),t("div",{staticStyle:{"margin-bottom":"16px","text-align":"right"}},[t("a-button",{attrs:{type:"primary",icon:"plus"},on:{click:function(t){e.showAddExchangeModal=!0}}},[e._v(" "+e._s(e.$t("profile.exchange.addAccount"))+" ")])],1),t("a-table",{attrs:{columns:e.exchangeColumns,dataSource:e.exchangeCredentials,loading:e.exchangeLoading,rowKey:function(e){return e.id},size:"small"},scopedSlots:e._u([{key:"exchange_id",fn:function(a){return[t("span",{staticStyle:{"text-transform":"capitalize","font-weight":"500"}},[e._v(e._s(e.getExchangeDisplayName(a)))])]}},{key:"api_key_hint",fn:function(a,r){return[t("span",{staticClass:"credential-hint"},[e._v(e._s(a||r.name||"-"))])]}},{key:"created_at",fn:function(t){return[e._v(" "+e._s(e.formatTime(t))+" ")]}},{key:"action",fn:function(a,r){return[t("a-popconfirm",{attrs:{title:e.$t("profile.exchange.deleteConfirm"),okText:e.$t("common.confirm"),cancelText:e.$t("common.cancel")},on:{confirm:function(t){return e.handleDeleteCredential(r.id)}}},[t("a-button",{attrs:{type:"danger",size:"small",ghost:"",icon:"delete"}},[e._v(" "+e._s(e.$t("common.delete"))+" ")])],1)]}}])}),e.exchangeLoading||0!==e.exchangeCredentials.length?e._e():t("a-empty",{staticStyle:{"margin-top":"20px"}},[t("span",{attrs:{slot:"description"},slot:"description"},[e._v(e._s(e.$t("profile.exchange.noAccounts")))])])],1)]),t("a-tab-pane",{key:"referrals",attrs:{tab:e.$t("profile.referral.listTab")||"邀请列表"}},[t("a-table",{attrs:{columns:e.referralColumns,dataSource:e.referralData.list||[],loading:e.referralLoading,pagination:e.referralPagination,rowKey:function(e){return e.id},size:"small"},on:{change:e.handleReferralChange},scopedSlots:e._u([{key:"user",fn:function(a,r){return[t("div",{staticClass:"referral-user-cell"},[t("a-avatar",{attrs:{size:32,src:r.avatar||"/avatar2.jpg"}}),t("div",{staticClass:"user-info"},[t("span",{staticClass:"nickname"},[e._v(e._s(r.nickname||r.username))]),t("span",{staticClass:"username"},[e._v("@"+e._s(r.username))])])],1)]}},{key:"created_at",fn:function(t){return[e._v(" "+e._s(e.formatTime(t))+" ")]}}])}),e.referralLoading||e.referralData.list&&0!==e.referralData.list.length?e._e():t("a-empty",[t("span",{attrs:{slot:"description"},slot:"description"},[e._v(e._s(e.$t("profile.referral.noReferrals")||"暂无邀请记录"))]),t("a-button",{attrs:{type:"primary"},on:{click:e.copyReferralLink}},[e._v(" "+e._s(e.$t("profile.referral.shareNow")||"立即分享邀请")+" ")])],1)],1)],1)],1)],1)],1),t("a-modal",{attrs:{title:e.$t("profile.exchange.addTitle"),visible:e.showAddExchangeModal,confirmLoading:e.savingExchange,okText:e.$t("common.save"),cancelText:e.$t("common.cancel"),maskClosable:!1,width:"520px"},on:{ok:e.handleSaveExchange,cancel:function(t){e.showAddExchangeModal=!1}}},[t("a-form",{attrs:{form:e.exchangeForm,layout:"vertical"}},[t("a-form-item",{attrs:{label:e.$t("profile.exchange.selectExchange")}},[t("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["exchange_id",{rules:[{required:!0,message:e.$t("profile.exchange.selectExchange")}]}],expression:"['exchange_id', { rules: [{ required: true, message: $t('profile.exchange.selectExchange') }] }]"}],attrs:{placeholder:e.$t("profile.exchange.selectExchange")},on:{change:e.handleExchangeTypeChange}},[t("a-select-opt-group",{attrs:{label:e.$t("profile.exchange.typeCrypto")}},e._l(e.cryptoExchangeList,function(a){return t("a-select-option",{key:a.id,attrs:{value:a.id}},[e._v(" "+e._s(a.name)+" ")])}),1),t("a-select-opt-group",{attrs:{label:e.$t("profile.exchange.typeIBKR")}},[t("a-select-option",{attrs:{value:"ibkr"}},[e._v("Interactive Brokers (IBKR)")])],1),t("a-select-opt-group",{attrs:{label:e.$t("profile.exchange.typeMT5")}},[t("a-select-option",{attrs:{value:"mt5"}},[e._v("MetaTrader 5")])],1)],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.accountName")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["name"],expression:"['name']"}],attrs:{placeholder:e.$t("profile.exchange.accountNamePlaceholder")}})],1),"crypto"===e.addExchangeType?[t("a-form-item",{attrs:{label:e.$t("profile.exchange.apiKey")}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["api_key",{rules:[{required:!0,message:"API Key is required"}]}],expression:"['api_key', { rules: [{ required: true, message: 'API Key is required' }] }]"}],attrs:{placeholder:"API Key",autocomplete:"new-password"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.secretKey")}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["secret_key",{rules:[{required:!0,message:"Secret Key is required"}]}],expression:"['secret_key', { rules: [{ required: true, message: 'Secret Key is required' }] }]"}],attrs:{placeholder:"Secret Key",autocomplete:"new-password"}})],1),e.addExchangeNeedsPassphrase?t("a-form-item",{attrs:{label:e.$t("profile.exchange.passphrase")}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["passphrase"],expression:"['passphrase']"}],attrs:{placeholder:"Passphrase",autocomplete:"new-password"}})],1):e._e(),e.addExchangeShowDemo?t("a-form-item",[t("a-checkbox",{directives:[{name:"decorator",rawName:"v-decorator",value:["enable_demo_trading",{valuePropName:"checked",initialValue:!1}],expression:"['enable_demo_trading', { valuePropName: 'checked', initialValue: false }]"}]},[e._v(" "+e._s(e.$t("profile.exchange.demoTrading"))+" ")])],1):e._e()]:e._e(),"ibkr"===e.addExchangeType?[t("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"warning",showIcon:"",message:e.$t("profile.exchange.localDeploymentRequired"),description:e.$t("profile.exchange.localDeploymentHint")}}),t("a-form-item",{attrs:{label:e.$t("profile.exchange.ibkrHost")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["ibkr_host",{initialValue:"127.0.0.1"}],expression:"['ibkr_host', { initialValue: '127.0.0.1' }]"}],attrs:{placeholder:"127.0.0.1"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.ibkrPort")}},[t("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["ibkr_port",{initialValue:7497}],expression:"['ibkr_port', { initialValue: 7497 }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:65535}}),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.exchange.ibkrPortHint")))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.ibkrClientId")}},[t("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["ibkr_client_id",{initialValue:1}],expression:"['ibkr_client_id', { initialValue: 1 }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:999}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.ibkrAccount")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["ibkr_account"],expression:"['ibkr_account']"}],attrs:{placeholder:"DU123456"}})],1)]:e._e(),"mt5"===e.addExchangeType?[t("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"warning",showIcon:"",message:e.$t("profile.exchange.localDeploymentRequired"),description:e.$t("profile.exchange.localDeploymentHint")}}),t("a-form-item",{attrs:{label:e.$t("profile.exchange.mt5Server")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["mt5_server",{rules:[{required:!0,message:"Server is required"}]}],expression:"['mt5_server', { rules: [{ required: true, message: 'Server is required' }] }]"}],attrs:{placeholder:"MetaQuotes-Demo"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.mt5Login")}},[t("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["mt5_login",{rules:[{required:!0,message:"Login is required"}]}],expression:"['mt5_login', { rules: [{ required: true, message: 'Login is required' }] }]"}],staticStyle:{width:"100%"},attrs:{min:1,placeholder:"12345678"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.mt5Password")}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["mt5_password",{rules:[{required:!0,message:"Password is required"}]}],expression:"['mt5_password', { rules: [{ required: true, message: 'Password is required' }] }]"}],attrs:{placeholder:"Password",autocomplete:"new-password"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.mt5TerminalPath")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["mt5_terminal_path"],expression:"['mt5_terminal_path']"}],attrs:{placeholder:"C:\\Program Files\\MetaTrader 5\\terminal64.exe"}}),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.exchange.mt5TerminalPathHint")))])],1)],1)]:e._e(),e.addExchangeType?t("a-form-item",[t("a-button",{attrs:{block:"",loading:e.testingExchange},on:{click:e.handleTestExchangeConnection}},[t("a-icon",{attrs:{type:"api"}}),e._v(" "+e._s(e.$t("profile.exchange.testConnection"))+" ")],1),e.exchangeTestResult?t("div",{staticClass:"test-result-msg",class:e.exchangeTestResult.success?"success":"error"},[t("a-icon",{attrs:{type:e.exchangeTestResult.success?"check-circle":"close-circle"}}),e._v(" "+e._s(e.exchangeTestResult.message)+" ")],1):e._e()],1):e._e()],2)],1)],1)},i=[],n=a(76338),o=a(81127),s=a(56252),l=(a(74423),a(84841)),c=a(53003),d=a(42430),u=a(36911),p=a(55434),f={name:"Profile",mixins:[p.t],data:function(){return{loading:!1,saving:!1,changingPassword:!1,sendingPwdCode:!1,pwdCodeCountdown:0,pwdCodeTimer:null,activeTab:"basic",profile:{id:null,username:"",nickname:"",email:"",avatar:"",role:"user",last_login_at:null},creditsLog:[],creditsLogLoading:!1,creditsLogPagination:{current:1,pageSize:10,total:0},referralData:{list:[],total:0,referral_code:"",referral_bonus:0,register_bonus:0},referralLoading:!1,referralPagination:{current:1,pageSize:10,total:0},billing:{credits:0,is_vip:!1,vip_expires_at:null,billing_enabled:!1,feature_costs:{}},rechargeTelegramUrl:"https://t.me/your_support_bot",notificationSettings:{default_channels:["browser"],telegram_bot_token:"",telegram_chat_id:"",email:"",phone:"",discord_webhook:"",webhook_url:"",webhook_token:""},savingNotifications:!1,testingNotification:!1,exchangeCredentials:[],exchangeLoading:!1,showAddExchangeModal:!1,savingExchange:!1,testingExchange:!1,exchangeTestResult:null,addExchangeType:"",selectedExchangeId:"",cryptoExchangeList:[{id:"binance",name:"Binance"},{id:"okx",name:"OKX"},{id:"bitget",name:"Bitget"},{id:"bybit",name:"Bybit"},{id:"coinbaseexchange",name:"Coinbase"},{id:"kraken",name:"Kraken"},{id:"kucoin",name:"KuCoin"},{id:"gate",name:"Gate.io"},{id:"bitfinex",name:"Bitfinex"}]}},computed:{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},isVip:function(){if(!this.billing.vip_expires_at)return!1;var e=new Date(this.billing.vip_expires_at);return e>new Date},creditsLogColumns:function(){return[{title:this.$t("profile.creditsLog.time")||"时间",dataIndex:"created_at",width:160,scopedSlots:{customRender:"created_at"}},{title:this.$t("profile.creditsLog.action")||"类型",dataIndex:"action",width:100,scopedSlots:{customRender:"action"}},{title:this.$t("profile.creditsLog.amount")||"变动",dataIndex:"amount",width:100,scopedSlots:{customRender:"amount"}},{title:this.$t("profile.creditsLog.balance")||"余额",dataIndex:"balance_after",width:100},{title:this.$t("profile.creditsLog.remark")||"备注",dataIndex:"remark",ellipsis:!0}]},referralColumns:function(){return[{title:this.$t("profile.referral.user")||"用户",dataIndex:"username",scopedSlots:{customRender:"user"}},{title:this.$t("profile.referral.registerTime")||"注册时间",dataIndex:"created_at",width:180,scopedSlots:{customRender:"created_at"}}]},referralLink:function(){var e=window.location.origin+window.location.pathname,t=this.referralData.referral_code||this.profile.id;return"".concat(e,"#/user/login?ref=").concat(t)},exchangeColumns:function(){return[{title:this.$t("profile.exchange.colExchange")||"Exchange",dataIndex:"exchange_id",width:140,scopedSlots:{customRender:"exchange_id"}},{title:this.$t("profile.exchange.colName")||"Name",dataIndex:"name",width:140,customRender:function(e){return e||"-"}},{title:this.$t("profile.exchange.colHint")||"Connection Info",dataIndex:"api_key_hint",scopedSlots:{customRender:"api_key_hint"}},{title:this.$t("profile.exchange.colCreatedAt")||"Created At",dataIndex:"created_at",width:180,scopedSlots:{customRender:"created_at"}},{title:this.$t("profile.exchange.colActions")||"Actions",width:120,scopedSlots:{customRender:"action"}}]},addExchangeNeedsPassphrase:function(){var e=["okx","bitget","kucoin"];return e.includes(this.selectedExchangeId)},addExchangeShowDemo:function(){return"binance"===this.selectedExchangeId}},watch:{activeTab:function(e){"credits"===e&&0===this.creditsLog.length&&this.loadCreditsLog(),"referrals"!==e||this.referralData.list&&0!==this.referralData.list.length||this.loadReferrals(),"notifications"!==e||this.notificationSettings.telegram_chat_id||this.notificationSettings.discord_webhook||this.loadNotificationSettings(),"exchange"===e&&0===this.exchangeCredentials.length&&this.loadExchangeCredentials()}},beforeCreate:function(){this.profileForm=this.$form.createForm(this,{name:"profile"}),this.passwordForm=this.$form.createForm(this,{name:"password"}),this.notificationForm=this.$form.createForm(this,{name:"notification"}),this.exchangeForm=this.$form.createForm(this,{name:"exchange"})},mounted:function(){this.loadProfile(),this.loadReferrals()},beforeDestroy:function(){this.pwdCodeTimer&&clearInterval(this.pwdCodeTimer)},methods:{loadProfile:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.loading=!0,t.p=1,t.n=2,(0,l.E$)();case 2:a=t.v,1===a.code?(e.profile=a.data,a.data.billing&&(e.billing=a.data.billing),a.data.notification_settings&&(e.notificationSettings={default_channels:a.data.notification_settings.default_channels||["browser"],telegram_bot_token:a.data.notification_settings.telegram_bot_token||"",telegram_chat_id:a.data.notification_settings.telegram_chat_id||"",email:a.data.notification_settings.email||a.data.email||"",phone:a.data.notification_settings.phone||"",discord_webhook:a.data.notification_settings.discord_webhook||"",webhook_url:a.data.notification_settings.webhook_url||"",webhook_token:a.data.notification_settings.webhook_token||""}),e.$nextTick(function(){e.profileForm.setFieldsValue({nickname:e.profile.nickname,email:e.profile.email})})):e.$message.error(a.msg||"Failed to load profile"),t.n=4;break;case 3:t.p=3,t.v,e.$message.error("Failed to load profile");case 4:return t.p=4,e.loading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},loadRechargeUrl:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if("admin"!==e.profile.role){t.n=4;break}return t.p=1,t.n=2,(0,c.YT)();case 2:a=t.v,1===a.code&&a.data&&a.data.billing&&(e.rechargeTelegramUrl=a.data.billing.RECHARGE_TELEGRAM_URL||e.rechargeTelegramUrl),t.n=4;break;case 3:t.p=3,t.v;case 4:return t.a(2)}},t,null,[[1,3]])}))()},handleRecharge:function(){this.$router.push("/billing")},formatCredits:function(e){return e||0===e?Number(e).toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:2}):"0"},formatDate:function(e){if(!e)return"";var t=new Date(e);return t.toLocaleDateString()},handleSaveProfile:function(){var e=this;this.profileForm.validateFields(function(){var t=(0,s.A)((0,o.A)().m(function t(a,r){var i;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(!a){t.n=1;break}return t.a(2);case 1:return e.saving=!0,t.p=2,t.n=3,(0,l.r7)(r);case 3:i=t.v,1===i.code?(e.$message.success(i.msg||"Profile updated successfully"),e.loadProfile()):e.$message.error(i.msg||"Update failed"),t.n=5;break;case 4:t.p=4,t.v,e.$message.error("Update failed");case 5:return t.p=5,e.saving=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(e,a){return t.apply(this,arguments)}}())},validateConfirmPassword:function(e,t,a){var r=this.passwordForm.getFieldValue("new_password");t&&t!==r?a(this.$t("profile.passwordMismatch")||"Passwords do not match"):a()},handleSendPwdCode:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var r,i,n,s,l;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e.profile.email){t.n=1;break}return e.$message.error(e.$t("profile.noEmailWarning")||"Please set your email first"),t.a(2);case 1:return e.sendingPwdCode=!0,t.p=2,t.n=3,a.e(824).then(a.bind(a,95824));case 3:return r=t.v,i=r.sendVerificationCode,t.n=4,i({email:e.profile.email,type:"change_password"});case 4:n=t.v,1===n.code?(e.$message.success(e.$t("profile.codeSent")||"Verification code sent"),e.startPwdCodeCountdown()):e.$message.error(n.msg||"Failed to send code"),t.n=6;break;case 5:t.p=5,l=t.v,e.$message.error((null===(s=l.response)||void 0===s||null===(s=s.data)||void 0===s?void 0:s.msg)||"Failed to send code");case 6:return t.p=6,e.sendingPwdCode=!1,t.f(6);case 7:return t.a(2)}},t,null,[[2,5,6,7]])}))()},startPwdCodeCountdown:function(){var e=this;this.pwdCodeCountdown=60,this.pwdCodeTimer=setInterval(function(){e.pwdCodeCountdown--,e.pwdCodeCountdown<=0&&(clearInterval(e.pwdCodeTimer),e.pwdCodeTimer=null)},1e3)},validateNewPassword:function(e,t,a){t?t.length<8?a(new Error(this.$t("user.register.pwdMinLength")||"At least 8 characters")):/[A-Z]/.test(t)?/[a-z]/.test(t)?/[0-9]/.test(t)?a():a(new Error(this.$t("user.register.pwdNumber")||"At least one number")):a(new Error(this.$t("user.register.pwdLowercase")||"At least one lowercase letter")):a(new Error(this.$t("user.register.pwdUppercase")||"At least one uppercase letter")):a()},handleChangePassword:function(){var e=this;this.passwordForm.validateFields(function(){var t=(0,s.A)((0,o.A)().m(function t(r,i){var n,s,l,c,d;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(!r){t.n=1;break}return t.a(2);case 1:return e.changingPassword=!0,t.p=2,t.n=3,a.e(824).then(a.bind(a,95824));case 3:return n=t.v,s=n.changePassword,t.n=4,s({code:i.code,new_password:i.new_password});case 4:l=t.v,1===l.code?(e.$message.success(l.msg||"Password changed successfully"),e.passwordForm.resetFields()):e.$message.error(l.msg||"Change password failed"),t.n=6;break;case 5:t.p=5,d=t.v,e.$message.error((null===(c=d.response)||void 0===c||null===(c=c.data)||void 0===c?void 0:c.msg)||"Change password failed");case 6:return t.p=6,e.changingPassword=!1,t.f(6);case 7:return t.a(2)}},t,null,[[2,5,6,7]])}));return function(e,a){return t.apply(this,arguments)}}())},getRoleColor:function(e){var t={admin:"red",manager:"orange",user:"blue",viewer:"default"};return t[e]||"default"},getRoleLabel:function(e){var t={admin:this.$t("userManage.roleAdmin")||"Admin",manager:this.$t("userManage.roleManager")||"Manager",user:this.$t("userManage.roleUser")||"User",viewer:this.$t("userManage.roleViewer")||"Viewer"};return t[e]||e},formatTime:function(e){if(!e)return"";var t=new Date("number"===typeof e?1e3*e:e);return t.toLocaleString()},loadCreditsLog:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.creditsLogLoading=!0,t.p=1,t.n=2,(0,l.v9)({page:e.creditsLogPagination.current,page_size:e.creditsLogPagination.pageSize});case 2:a=t.v,1===a.code&&(e.creditsLog=a.data.items||[],e.creditsLogPagination.total=a.data.total||0),t.n=4;break;case 3:t.p=3,t.v,e.$message.error("Failed to load credits log");case 4:return t.p=4,e.creditsLogLoading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},handleCreditsLogChange:function(e){this.creditsLogPagination.current=e.current,this.loadCreditsLog()},loadReferrals:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.referralLoading=!0,t.p=1,t.n=2,(0,l.rx)({page:e.referralPagination.current,page_size:e.referralPagination.pageSize});case 2:a=t.v,1===a.code&&(e.referralData={list:a.data.list||[],total:a.data.total||0,referral_code:a.data.referral_code||"",referral_bonus:a.data.referral_bonus||0,register_bonus:a.data.register_bonus||0},e.referralPagination.total=a.data.total||0),t.n=4;break;case 3:t.p=3,t.v,e.$message.error("Failed to load referral data");case 4:return t.p=4,e.referralLoading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},handleReferralChange:function(e){this.referralPagination.current=e.current,this.loadReferrals()},copyReferralLink:function(){var e=this,t=this.referralLink;navigator.clipboard?navigator.clipboard.writeText(t).then(function(){e.$message.success(e.$t("profile.referral.linkCopied")||"邀请链接已复制")}).catch(function(){e.fallbackCopy(t)}):this.fallbackCopy(t)},fallbackCopy:function(e){var t=document.createElement("textarea");t.value=e,document.body.appendChild(t),t.select();try{document.execCommand("copy"),this.$message.success(this.$t("profile.referral.linkCopied")||"邀请链接已复制")}catch(a){this.$message.error("Copy failed")}document.body.removeChild(t)},getActionColor:function(e){var t={consume:"red",recharge:"green",admin_adjust:"blue",refund:"orange",vip_grant:"gold",vip_revoke:"default",register_bonus:"cyan",referral_bonus:"purple",indicator_purchase:"volcano",indicator_sale:"lime"};return t[e]||"default"},getActionLabel:function(e){var t={consume:this.$t("profile.creditsLog.actionConsume")||"消费",recharge:this.$t("profile.creditsLog.actionRecharge")||"充值",admin_adjust:this.$t("profile.creditsLog.actionAdjust")||"调整",refund:this.$t("profile.creditsLog.actionRefund")||"退款",vip_grant:this.$t("profile.creditsLog.actionVipGrant")||"VIP授予",vip_revoke:this.$t("profile.creditsLog.actionVipRevoke")||"VIP取消",register_bonus:this.$t("profile.creditsLog.actionRegisterBonus")||"注册奖励",referral_bonus:this.$t("profile.creditsLog.actionReferralBonus")||"邀请奖励",indicator_purchase:this.$t("profile.creditsLog.actionIndicatorPurchase")||"购买指标",indicator_sale:this.$t("profile.creditsLog.actionIndicatorSale")||"出售指标"};return t[e]||e},loadExchangeCredentials:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.exchangeLoading=!0,t.p=1,t.n=2,(0,d.IA)();case 2:a=t.v,1===a.code&&a.data&&(e.exchangeCredentials=a.data.items||[]),t.n=4;break;case 3:t.p=3,t.v,e.$message.error("Failed to load exchange accounts");case 4:return t.p=4,e.exchangeLoading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},handleExchangeTypeChange:function(e){this.selectedExchangeId=e,this.exchangeTestResult=null;var t=this.cryptoExchangeList.map(function(e){return e.id});t.includes(e)?this.addExchangeType="crypto":this.addExchangeType="ibkr"===e?"ibkr":"mt5"===e?"mt5":""},getExchangeDisplayName:function(e){var t={binance:"Binance",okx:"OKX",bitget:"Bitget",bybit:"Bybit",coinbaseexchange:"Coinbase",kraken:"Kraken",kucoin:"KuCoin",gate:"Gate.io",bitfinex:"Bitfinex",ibkr:"IBKR",mt5:"MetaTrader 5"};return t[e]||e},handleSaveExchange:function(){var e=this;this.exchangeForm.validateFields(function(){var t=(0,s.A)((0,o.A)().m(function t(a,r){var i,s,l;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(!a){t.n=1;break}return t.a(2);case 1:return e.savingExchange=!0,t.p=2,i=(0,n.A)({},r),t.n=3,(0,d.PR)(i);case 3:s=t.v,1===s.code?(e.$message.success(e.$t("profile.exchange.saveSuccess")),e.showAddExchangeModal=!1,e.exchangeForm.resetFields(),e.addExchangeType="",e.selectedExchangeId="",e.exchangeTestResult=null,e.loadExchangeCredentials()):e.$message.error(s.msg||e.$t("profile.exchange.saveFailed")),t.n=5;break;case 4:t.p=4,l=t.v,e.$message.error(l.message||e.$t("profile.exchange.saveFailed"));case 5:return t.p=5,e.savingExchange=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(e,a){return t.apply(this,arguments)}}())},handleDeleteCredential:function(e){var t=this;return(0,s.A)((0,o.A)().m(function a(){var r;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,d.kI)(e);case 1:r=a.v,1===r.code?(t.$message.success(t.$t("profile.exchange.deleteSuccess")),t.loadExchangeCredentials()):t.$message.error(r.msg||"Delete failed"),a.n=3;break;case 2:a.p=2,a.v,t.$message.error("Delete failed");case 3:return a.a(2)}},a,null,[[0,2]])}))()},handleTestExchangeConnection:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a,r,i,s,l;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(a=e.exchangeForm.getFieldsValue(),r=a.exchange_id,r){t.n=1;break}return t.a(2);case 1:return e.testingExchange=!0,e.exchangeTestResult=null,t.p=2,i=(0,n.A)({},a),t.n=3,(0,u.kv)(i);case 3:s=t.v,1===s.code?e.exchangeTestResult={success:!0,message:e.$t("profile.exchange.testSuccess")}:e.exchangeTestResult={success:!1,message:"".concat(e.$t("profile.exchange.testFailed"),": ").concat(s.msg||"Unknown error")},t.n=5;break;case 4:t.p=4,l=t.v,e.exchangeTestResult={success:!1,message:"".concat(e.$t("profile.exchange.testFailed"),": ").concat(l.message||"Network error")};case 5:return t.p=5,e.testingExchange=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}))()},loadNotificationSettings:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return t.p=0,t.n=1,(0,l.vF)();case 1:a=t.v,1===a.code&&a.data&&(e.notificationSettings={default_channels:a.data.default_channels||["browser"],telegram_bot_token:a.data.telegram_bot_token||"",telegram_chat_id:a.data.telegram_chat_id||"",email:a.data.email||e.profile.email||"",phone:a.data.phone||"",discord_webhook:a.data.discord_webhook||"",webhook_url:a.data.webhook_url||"",webhook_token:a.data.webhook_token||""},e.$nextTick(function(){e.notificationForm.setFieldsValue({default_channels:e.notificationSettings.default_channels,telegram_bot_token:e.notificationSettings.telegram_bot_token,telegram_chat_id:e.notificationSettings.telegram_chat_id,email:e.notificationSettings.email,phone:e.notificationSettings.phone,discord_webhook:e.notificationSettings.discord_webhook,webhook_url:e.notificationSettings.webhook_url,webhook_token:e.notificationSettings.webhook_token})})),t.n=3;break;case 2:t.p=2,t.v;case 3:return t.a(2)}},t,null,[[0,2]])}))()},handleSaveNotifications:function(){var e=this;this.notificationForm.validateFields(function(){var t=(0,s.A)((0,o.A)().m(function t(a,r){var i;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(!a){t.n=1;break}return t.a(2);case 1:return e.savingNotifications=!0,t.p=2,t.n=3,(0,l.Gl)({default_channels:r.default_channels||["browser"],telegram_bot_token:r.telegram_bot_token||"",telegram_chat_id:r.telegram_chat_id||"",email:r.email||"",phone:r.phone||"",discord_webhook:r.discord_webhook||"",webhook_url:r.webhook_url||"",webhook_token:r.webhook_token||""});case 3:i=t.v,1===i.code?(e.$message.success(e.$t("profile.notifications.saveSuccess")||"通知设置保存成功"),e.notificationSettings=i.data||e.notificationSettings):e.$message.error(i.msg||"保存失败"),t.n=5;break;case 4:t.p=4,t.v,e.$message.error("保存失败");case 5:return t.p=5,e.savingNotifications=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(e,a){return t.apply(this,arguments)}}())},handleTestNotification:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a,r,i;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(a=e.notificationForm.getFieldsValue(),r=a.default_channels||[],0!==r.length){t.n=1;break}return e.$message.warning(e.$t("profile.notifications.selectChannel")||"请至少选择一个通知渠道"),t.a(2);case 1:if(!r.includes("telegram")){t.n=3;break}if(a.telegram_bot_token){t.n=2;break}return e.$message.warning(e.$t("profile.notifications.fillTelegramToken")||"请填写 Telegram Bot Token"),t.a(2);case 2:if(a.telegram_chat_id){t.n=3;break}return e.$message.warning(e.$t("profile.notifications.fillTelegram")||"请填写 Telegram Chat ID"),t.a(2);case 3:if(!r.includes("email")||a.email){t.n=4;break}return e.$message.warning(e.$t("profile.notifications.fillEmail")||"请填写通知邮箱"),t.a(2);case 4:return e.testingNotification=!0,t.p=5,t.n=6,(0,l.Gl)({default_channels:r,telegram_bot_token:a.telegram_bot_token||"",telegram_chat_id:a.telegram_chat_id||"",email:a.email||"",phone:a.phone||"",discord_webhook:a.discord_webhook||"",webhook_url:a.webhook_url||"",webhook_token:a.webhook_token||""});case 6:if(i=t.v,1===i.code){t.n=7;break}return e.$message.error(i.msg||"保存设置失败"),t.a(2);case 7:e.$message.info(e.$t("profile.notifications.testSent")||"测试通知已发送,请检查您的通知渠道"),t.n=9;break;case 8:t.p=8,t.v,e.$message.error("发送测试通知失败");case 9:return t.p=9,e.testingNotification=!1,t.f(9);case 10:return t.a(2)}},t,null,[[5,8,9,10]])}))()}}},m=f,h=a(845),g=(0,h.A)(m,r,i,!1,null,"86a53e9c",null),v=g.exports},42430:function(e,t,a){a.d(t,{IA:function(){return o},PR:function(){return s},kI:function(){return l}});var r=a(76338),i=a(75769),n={list:"/api/credentials/list",get:"/api/credentials/get",create:"/api/credentials/create",delete:"/api/credentials/delete"};function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,i.Ay)({url:n.list,method:"get",params:e})}function s(e){return(0,i.Ay)({url:n.create,method:"post",data:e})}function l(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(0,i.Ay)({url:n.delete,method:"delete",params:(0,r.A)({id:e},t)})}},53003:function(e,t,a){a.d(t,{DZ:function(){return o},YT:function(){return n},_d:function(){return s},lo:function(){return i}});var r=a(75769);function i(){return(0,r.Ay)({url:"/api/settings/schema",method:"get"})}function n(){return(0,r.Ay)({url:"/api/settings/values",method:"get"})}function o(e){return(0,r.Ay)({url:"/api/settings/save",method:"post",data:e})}function s(){return(0,r.Ay)({url:"/api/settings/openrouter-balance",method:"get"})}},84841:function(e,t,a){a.d(t,{DK:function(){return _},E$:function(){return d},Gl:function(){return f},O0:function(){return c},TK:function(){return o},aU:function(){return i},cw:function(){return l},d$:function(){return b},hG:function(){return s},kg:function(){return n},nY:function(){return v},r7:function(){return u},rx:function(){return h},v9:function(){return m},vF:function(){return p},vi:function(){return w},wq:function(){return g}});var r=a(75769);function i(e){return(0,r.Ay)({url:"/api/users/list",method:"get",params:e})}function n(e){return(0,r.Ay)({url:"/api/users/create",method:"post",data:e})}function o(e,t){return(0,r.Ay)({url:"/api/users/update",method:"put",params:{id:e},data:t})}function s(e){return(0,r.Ay)({url:"/api/users/delete",method:"delete",params:{id:e}})}function l(e){return(0,r.Ay)({url:"/api/users/reset-password",method:"post",data:e})}function c(){return(0,r.Ay)({url:"/api/users/roles",method:"get"})}function d(){return(0,r.Ay)({url:"/api/users/profile",method:"get"})}function u(e){return(0,r.Ay)({url:"/api/users/profile/update",method:"put",data:e})}function p(){return(0,r.Ay)({url:"/api/users/notification-settings",method:"get"})}function f(e){return(0,r.Ay)({url:"/api/users/notification-settings",method:"put",data:e})}function m(e){return(0,r.Ay)({url:"/api/users/my-credits-log",method:"get",params:e})}function h(e){return(0,r.Ay)({url:"/api/users/my-referrals",method:"get",params:e})}function g(e){return(0,r.Ay)({url:"/api/users/set-credits",method:"post",data:e})}function v(e){return(0,r.Ay)({url:"/api/users/set-vip",method:"post",data:e})}function _(e){return(0,r.Ay)({url:"/api/users/system-strategies",method:"get",params:e})}function w(e){return(0,r.Ay)({url:"/api/users/admin-orders",method:"get",params:e})}function b(e){return(0,r.Ay)({url:"/api/users/admin-ai-stats",method:"get",params:e})}}}]); \ No newline at end of file diff --git a/frontend/dist/js/896.852a8b00.js b/frontend/dist/js/896.852a8b00.js new file mode 100644 index 0000000..97c00ad --- /dev/null +++ b/frontend/dist/js/896.852a8b00.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[896],{59896:function(t,s,a){a.r(s),a.d(s,{default:function(){return M}});var e=function(){var t=this,s=t._self._c;return s("div",{staticClass:"ai-analysis-container",class:{"theme-dark":t.isDarkTheme,embedded:t.embedded},style:{"--primary-color":t.primaryColor}},[s("div",{staticClass:"main-content-full"},[s("div",{staticClass:"top-index-bar"},[t.loadingSentiment?[t._m(0),t._m(1),t._m(2)]:[s("div",{staticClass:"indicator-box fear-greed",class:t.getFearGreedClass(t.marketData.fearGreed)},[s("span",{staticClass:"ind-label"},[t._v(t._s(t.$t("globalMarket.fearGreedShort")))]),s("span",{staticClass:"ind-value"},[t._v(t._s(t.marketData.fearGreed||"--"))])]),s("div",{staticClass:"indicator-box vix",class:t.getVixLevel(t.marketData.vix)},[s("span",{staticClass:"ind-label"},[t._v("VIX")]),s("span",{staticClass:"ind-value"},[t._v(t._s(t.marketData.vix||"--"))])]),s("div",{staticClass:"indicator-box dxy"},[s("span",{staticClass:"ind-label"},[t._v("DXY")]),s("span",{staticClass:"ind-value"},[t._v(t._s(t.marketData.dxy||"--"))])])],s("div",{staticClass:"indices-marquee"},[t.loadingIndices?[s("div",{staticClass:"indices-loading"},[s("a-icon",{attrs:{type:"loading"}}),t._v(" "+t._s(t.$t("common.loading")||"加载中...")+" ")],1)]:t.marketData.indices.length>0?[s("div",{staticClass:"marquee-track"},[t._l(t.marketData.indices,function(a){return s("div",{key:"a-"+a.symbol,staticClass:"index-item"},[s("span",{staticClass:"idx-flag"},[t._v(t._s(a.flag))]),s("span",{staticClass:"idx-symbol"},[t._v(t._s(a.symbol))]),s("span",{staticClass:"idx-price"},[t._v(t._s(t.formatPrice(a.price)))]),s("span",{staticClass:"idx-change",class:a.change>=0?"up":"down"},[s("a-icon",{attrs:{type:a.change>=0?"caret-up":"caret-down"}}),t._v(" "+t._s(Math.abs(a.change).toFixed(2))+"% ")],1)])}),t._l(t.marketData.indices,function(a){return s("div",{key:"b-"+a.symbol,staticClass:"index-item"},[s("span",{staticClass:"idx-flag"},[t._v(t._s(a.flag))]),s("span",{staticClass:"idx-symbol"},[t._v(t._s(a.symbol))]),s("span",{staticClass:"idx-price"},[t._v(t._s(t.formatPrice(a.price)))]),s("span",{staticClass:"idx-change",class:a.change>=0?"up":"down"},[s("a-icon",{attrs:{type:a.change>=0?"caret-up":"caret-down"}}),t._v(" "+t._s(Math.abs(a.change).toFixed(2))+"% ")],1)])})],2)]:[s("div",{staticClass:"indices-empty"},[t._v("--")])]],2),s("a-button",{staticClass:"refresh-btn",attrs:{type:"link",size:"small",loading:t.loadingMarket},on:{click:t.loadMarketData}},[s("a-icon",{attrs:{type:"sync",spin:t.loadingMarket}})],1)],2),s("div",{staticClass:"main-body"},[s("div",{staticClass:"left-panel"},[s("div",{staticClass:"heatmap-box"},[s("div",{staticClass:"box-header"},[s("a-radio-group",{attrs:{size:"small","button-style":"solid"},model:{value:t.heatmapType,callback:function(s){t.heatmapType=s},expression:"heatmapType"}},[s("a-radio-button",{attrs:{value:"crypto"}},[t._v(t._s(t.$t("globalMarket.cryptoHeatmap")))]),s("a-radio-button",{attrs:{value:"commodities"}},[t._v(t._s(t.$t("globalMarket.commoditiesHeatmap")))]),s("a-radio-button",{attrs:{value:"sectors"}},[t._v(t._s(t.$t("globalMarket.sectorHeatmap")))]),s("a-radio-button",{attrs:{value:"forex"}},[t._v(t._s(t.$t("globalMarket.forexHeatmap")))])],1)],1),s("div",{staticClass:"heatmap-grid"},[t.loadingHeatmap?t._l(12,function(t){return s("div",{key:"skel-"+t,staticClass:"heat-cell skeleton-cell"},[s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text"})])}):t.currentHeatmap.length>0?t._l(t.currentHeatmap.slice(0,12),function(a,e){return s("div",{key:e,staticClass:"heat-cell",style:t.getHeatmapStyle(a.value)},[s("span",{staticClass:"heat-name"},[t._v(t._s(t.getHeatmapName(a)))]),a.price?s("span",{staticClass:"heat-price"},[t._v(t._s(t.formatHeatmapPrice(a.price)))]):t._e(),s("span",{staticClass:"heat-val"},[t._v(t._s(a.value>=0?"+":"")+t._s(t.formatNum(a.value))+"%")])])}):[s("div",{staticClass:"heatmap-empty"},[t._v(t._s(t.$t("common.noData")||"暂无数据"))])]],2)]),s("div",{staticClass:"calendar-box"},[s("div",{staticClass:"box-header"},[s("span",{staticClass:"box-title"},[s("a-icon",{attrs:{type:"calendar"}}),t._v(" "+t._s(t.$t("globalMarket.calendar")))],1)]),s("div",{staticClass:"calendar-list"},[t.loadingCalendar?t._l(5,function(t){return s("div",{key:"cal-skel-"+t,staticClass:"cal-item skeleton-item"},[s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text"})])}):t.marketData.calendar.length>0?t._l(t.marketData.calendar.slice(0,10),function(a){return s("div",{key:a.id,staticClass:"cal-item",class:a.importance},[s("span",{staticClass:"cal-date"},[t._v(t._s(t.formatCalendarDate(a.date)))]),s("span",{staticClass:"cal-time"},[t._v(t._s(a.time||"--:--"))]),s("span",{staticClass:"cal-flag"},[t._v(t._s(t.getCountryFlag(a.country)))]),s("span",{staticClass:"cal-name"},[t._v(t._s(t.isZhLocale?a.name:a.name_en))]),s("span",{staticClass:"cal-impact",class:t.getImpactClass(a)},["bullish"===t.getImpactClass(a)?s("a-icon",{attrs:{type:"arrow-up"}}):"bearish"===t.getImpactClass(a)?s("a-icon",{attrs:{type:"arrow-down"}}):s("a-icon",{attrs:{type:"minus"}}),t._v(" "+t._s(a.actual||a.forecast||"--")+" ")],1)])}):[s("div",{staticClass:"cal-empty"},[t._v(t._s(t.$t("globalMarket.noEvents")))])]],2)])]),s("div",{staticClass:"right-panel"},[s("div",{staticClass:"analysis-toolbar"},[s("a-select",{staticClass:"symbol-selector",attrs:{placeholder:t.$t("dashboard.analysis.empty.selectSymbol"),size:"large","show-search":"","allow-clear":"","filter-option":t.filterSymbolOption},on:{change:t.handleSymbolChange},model:{value:t.selectedSymbol,callback:function(s){t.selectedSymbol=s},expression:"selectedSymbol"}},[t._l(t.watchlist||[],function(a){return s("a-select-option",{key:"".concat(a.market,"-").concat(a.symbol),attrs:{value:"".concat(a.market,":").concat(a.symbol)}},[s("span",{staticClass:"symbol-option"},[s("a-tag",{attrs:{color:t.getMarketColor(a.market),size:"small"}},[t._v(t._s(t.getMarketName(a.market)))]),s("strong",{staticStyle:{"margin-left":"6px"}},[t._v(t._s(a.symbol))]),a.name?s("span",{staticClass:"symbol-name"},[t._v(t._s(a.name))]):t._e()],1)])}),s("a-select-option",{key:"add-stock-option",staticClass:"add-stock-option",attrs:{value:"__add_stock_option__"}},[s("div",{staticStyle:{"text-align":"center",padding:"4px 0",color:"#1890ff"}},[s("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"plus"}}),t._v(t._s(t.$t("dashboard.analysis.watchlist.add"))+" ")],1)])],2),s("a-button",{staticClass:"analyze-button",attrs:{type:"primary",size:"large",icon:"thunderbolt",loading:t.analyzing,disabled:!t.selectedSymbol||t.analyzing},on:{click:t.startFastAnalysis}},[t._v(" "+t._s(t.$t("fastAnalysis.startAnalysis"))+" ")]),s("a-button",{staticClass:"history-button",attrs:{size:"large",icon:"history"},on:{click:function(s){t.showHistoryModal=!0,t.loadHistoryList()}}},[t._v(" "+t._s(t.$t("fastAnalysis.history"))+" ")])],1),s("div",{staticClass:"analysis-main"},[t.analysisResult||t.analyzing||t.analysisError?t._e():s("div",{staticClass:"analysis-placeholder"},[s("div",{staticClass:"placeholder-content"},[s("div",{staticClass:"placeholder-icon"},[s("a-icon",{attrs:{type:"robot"}})],1),s("h3",[t._v(t._s(t.$t("fastAnalysis.selectTip")))]),s("p",[t._v(t._s(t.$t("fastAnalysis.selectHint")))])])]),t.analysisResult||t.analyzing||t.analysisError?s("FastAnalysisReport",{attrs:{result:t.analysisResult,loading:t.analyzing,error:t.analysisError,"error-tone":t.analysisErrorTone},on:{retry:t.startFastAnalysis}}):t._e()],1)]),s("div",{staticClass:"watchlist-panel"},[s("div",{staticClass:"panel-header"},[s("span",{staticClass:"panel-title"},[s("a-icon",{attrs:{type:"star",theme:"filled"}}),t._v(" "+t._s(t.$t("dashboard.analysis.watchlist.title")))],1),s("a-button",{attrs:{type:"link",size:"small"},on:{click:function(s){t.showAddStockModal=!0}}},[s("a-icon",{attrs:{type:"plus"}})],1)],1),s("div",{staticClass:"watchlist-list"},[t._l(t.watchlist||[],function(a){var e,i,r;return s("div",{key:"".concat(a.market,"-").concat(a.symbol),staticClass:"watchlist-item",class:{active:t.selectedSymbol==="".concat(a.market,":").concat(a.symbol)},on:{click:function(s){return t.selectWatchlistItem(a)}}},[s("div",{staticClass:"item-main"},[s("span",{staticClass:"item-symbol"},[t._v(t._s(a.symbol))]),s("span",{staticClass:"item-name"},[t._v(t._s(a.name||t.getMarketName(a.market)))])]),t.watchlistPrices["".concat(a.market,":").concat(a.symbol)]?s("div",{staticClass:"item-price"},[s("span",{staticClass:"price-value"},[t._v(t._s(t.formatPrice(t.watchlistPrices["".concat(a.market,":").concat(a.symbol)].price)))]),s("span",{staticClass:"price-change",class:((null===(e=t.watchlistPrices["".concat(a.market,":").concat(a.symbol)])||void 0===e?void 0:e.change)||0)>=0?"up":"down"},[t._v(" "+t._s(((null===(i=t.watchlistPrices["".concat(a.market,":").concat(a.symbol)])||void 0===i?void 0:i.change)||0)>=0?"+":"")+t._s(t.formatNum(null===(r=t.watchlistPrices["".concat(a.market,":").concat(a.symbol)])||void 0===r?void 0:r.change))+"% ")])]):t._e(),s("a-icon",{staticClass:"item-remove",attrs:{type:"close"},on:{click:function(s){return s.stopPropagation(),t.removeFromWatchlist(a)}}})],1)}),t.watchlist&&0!==t.watchlist.length?t._e():s("div",{staticClass:"watchlist-empty"},[s("a-icon",{attrs:{type:"inbox"}}),s("p",[t._v(t._s(t.$t("dashboard.analysis.empty.noWatchlist")))]),s("a-button",{attrs:{type:"primary",size:"small"},on:{click:function(s){t.showAddStockModal=!0}}},[s("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("dashboard.analysis.watchlist.add"))+" ")],1)],1)],2)])])]),s("a-modal",{attrs:{title:t.$t("dashboard.analysis.modal.addStock.title"),visible:t.showAddStockModal,confirmLoading:t.addingStock,width:"600px",okText:t.$t("dashboard.analysis.modal.addStock.confirm"),cancelText:t.$t("dashboard.analysis.modal.addStock.cancel")},on:{ok:t.handleAddStock,cancel:t.handleCloseAddStockModal}},[s("div",{staticClass:"add-stock-modal-content"},[s("a-tabs",{staticClass:"market-tabs",on:{change:t.handleMarketTabChange},model:{value:t.selectedMarketTab,callback:function(s){t.selectedMarketTab=s},expression:"selectedMarketTab"}},t._l(t.marketTypes,function(a){return s("a-tab-pane",{key:a.value,attrs:{tab:t.$t(a.i18nKey||"dashboard.analysis.market.".concat(a.value))}})}),1),s("div",{staticClass:"symbol-search-section"},[s("a-input-search",{attrs:{placeholder:t.$t("dashboard.analysis.modal.addStock.searchOrInputPlaceholder"),loading:t.searchingSymbols,size:"large","allow-clear":""},on:{search:t.handleSearchOrInput,change:t.handleSymbolSearchInput},model:{value:t.symbolSearchKeyword,callback:function(s){t.symbolSearchKeyword=s},expression:"symbolSearchKeyword"}},[s("a-button",{attrs:{slot:"enterButton",type:"primary",icon:"search"},slot:"enterButton"},[t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.search"))+" ")])],1)],1),t.symbolSearchResults.length>0?s("div",{staticClass:"search-results-section"},[s("div",{staticClass:"section-title"},[s("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"search"}}),t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.searchResults"))+" ")],1),s("a-list",{staticClass:"symbol-list",attrs:{"data-source":t.symbolSearchResults,loading:t.searchingSymbols,size:"small"},scopedSlots:t._u([{key:"renderItem",fn:function(a){return s("a-list-item",{staticClass:"symbol-list-item",on:{click:function(s){return t.selectSymbol(a)}}},[s("a-list-item-meta",[s("template",{slot:"title"},[s("div",{staticClass:"symbol-item-content"},[s("span",{staticClass:"symbol-code"},[t._v(t._s(a.symbol))]),s("span",{staticClass:"symbol-name"},[t._v(t._s(a.name))]),a.exchange?s("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"blue"}},[t._v(" "+t._s(a.exchange)+" ")]):t._e()],1)])],2)],1)}}],null,!1,1074844145)})],1):t._e(),s("div",{staticClass:"hot-symbols-section"},[s("div",{staticClass:"section-title"},[s("a-icon",{staticStyle:{color:"#ff4d4f","margin-right":"4px"},attrs:{type:"fire"}}),t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.hotSymbols"))+" ")],1),s("a-spin",{attrs:{spinning:t.loadingHotSymbols}},[t.hotSymbols.length>0?s("a-list",{staticClass:"symbol-list",attrs:{"data-source":t.hotSymbols,size:"small"},scopedSlots:t._u([{key:"renderItem",fn:function(a){return s("a-list-item",{staticClass:"symbol-list-item",on:{click:function(s){return t.selectSymbol(a)}}},[s("a-list-item-meta",[s("template",{slot:"title"},[s("div",{staticClass:"symbol-item-content"},[s("span",{staticClass:"symbol-code"},[t._v(t._s(a.symbol))]),s("span",{staticClass:"symbol-name"},[t._v(t._s(a.name))]),a.exchange?s("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"orange"}},[t._v(" "+t._s(a.exchange)+" ")]):t._e()],1)])],2)],1)}}],null,!1,2177647935)}):s("a-empty",{attrs:{description:t.$t("dashboard.analysis.modal.addStock.noHotSymbols"),image:!1}})],1)],1),t.selectedSymbolForAdd?s("div",{staticClass:"selected-symbol-section"},[s("a-alert",{attrs:{message:t.$t("dashboard.analysis.modal.addStock.selectedSymbol"),type:"info","show-icon":"",closable:""},on:{close:function(s){t.selectedSymbolForAdd=null}}},[s("template",{slot:"description"},[s("div",{staticClass:"selected-symbol-info"},[s("a-tag",{staticStyle:{"margin-right":"8px"},attrs:{color:t.getMarketColor(t.selectedSymbolForAdd.market)}},[t._v(" "+t._s(t.$t("dashboard.analysis.market.".concat(t.selectedSymbolForAdd.market)))+" ")]),s("strong",[t._v(t._s(t.selectedSymbolForAdd.symbol))]),t.selectedSymbolForAdd.name?s("span",{staticStyle:{color:"#999","margin-left":"8px"}},[t._v(t._s(t.selectedSymbolForAdd.name))]):t._e()],1)])],2)],1):t._e()],1)]),s("a-modal",{attrs:{title:t.$t("dashboard.analysis.modal.history.title"),visible:t.showHistoryModal,footer:null,width:"800px",bodyStyle:{maxHeight:"60vh",overflowY:"auto"}},on:{cancel:function(s){t.showHistoryModal=!1}}},[s("a-spin",{attrs:{spinning:t.historyLoading}},[s("a-list",{attrs:{"data-source":t.historyList,pagination:{current:t.historyPage,pageSize:t.historyPageSize,total:t.historyTotal,onChange:function(s){t.historyPage=s,t.loadHistoryList()},showSizeChanger:!0,pageSizeOptions:["10","20","50"],onShowSizeChange:function(s,a){t.historyPageSize=a,t.historyPage=1,t.loadHistoryList()}}},scopedSlots:t._u([{key:"renderItem",fn:function(a){return s("a-list-item",{},[s("a-list-item-meta",[s("template",{slot:"title"},[s("div",{staticStyle:{display:"flex","align-items":"center","justify-content":"space-between"}},[s("div",[s("a-tag",{staticStyle:{"margin-right":"8px"},attrs:{color:t.getMarketColor(a.market)}},[t._v(" "+t._s(t.getMarketName(a.market))+" ")]),s("strong",[t._v(t._s(a.symbol))]),s("a-tag",{staticStyle:{"margin-left":"12px"},attrs:{color:"BUY"===a.decision?"green":"SELL"===a.decision?"red":"blue"}},[t._v(" "+t._s(a.decision)+" ")]),s("span",{staticStyle:{color:"#999","margin-left":"8px","font-size":"12px"}},[t._v(" "+t._s(t.$t("fastAnalysis.confidence"))+": "+t._s(a.confidence)+"% ")])],1),s("div",[s("a-button",{attrs:{type:"link",size:"small",icon:"eye"},on:{click:function(s){return t.viewHistoryResult(a)}}},[t._v(" "+t._s(t.$t("dashboard.analysis.modal.history.viewResult"))+" ")]),s("a-popconfirm",{attrs:{title:t.$t("dashboard.analysis.modal.history.deleteConfirm"),"ok-text":t.$t("common.confirm"),"cancel-text":t.$t("common.cancel")},on:{confirm:function(s){return t.deleteHistoryItem(a)}}},[s("a-button",{staticStyle:{color:"#ff4d4f"},attrs:{type:"link",size:"small",icon:"delete"}},[t._v(" "+t._s(t.$t("dashboard.analysis.modal.history.delete"))+" ")])],1)],1)])]),s("template",{slot:"description"},[s("div",{staticStyle:{color:"#666","font-size":"12px"}},[a.price?s("span",[t._v("$"+t._s(t.formatNumber(a.price)))]):t._e(),a.summary?s("span",{staticStyle:{"margin-left":"8px"}},[t._v(t._s(a.summary.substring(0,80))+t._s(a.summary.length>80?"...":""))]):t._e()]),a.created_at?s("div",{staticStyle:{color:"#999","font-size":"12px","margin-top":"4px"}},[t._v(" "+t._s(t.formatIsoTime(a.created_at))+" ")]):t._e()])],2)],1)}}])}),t.historyLoading||0!==t.historyList.length?t._e():s("a-empty",{attrs:{description:t.$t("dashboard.analysis.empty.noHistory")}})],1)],1)],1)},i=[function(){var t=this,s=t._self._c;return s("div",{staticClass:"indicator-box skeleton-box"},[s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text"})])},function(){var t=this,s=t._self._c;return s("div",{staticClass:"indicator-box skeleton-box"},[s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text"})])},function(){var t=this,s=t._self._c;return s("div",{staticClass:"indicator-box skeleton-box"},[s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text"})])}],r=a(44735),n=a(15863),l=a(81127),o=a(56252),c=a(76338),d=(a(74423),a(95353)),u=a(505),m=a(35038),h=a(75769),y="/api/fast-analysis";function p(t){return(0,h.Ay)({url:"".concat(y,"/analyze"),method:"post",data:t,timeout:3e5})}function v(t){return(0,h.Ay)({url:"".concat(y,"/history/all"),method:"get",params:t})}function f(t){return(0,h.Ay)({url:"".concat(y,"/history/").concat(t),method:"delete"})}function g(t){return(0,h.Ay)({url:"".concat(y,"/feedback"),method:"post",data:t})}var b=a(44146),_=function(){var t,s,a,e,i,r,n,l,o,c,d,u,m,h,y,p,v,f,g,b,_,k,C,S,A,w=this,$=w._self._c;return $("div",{staticClass:"fast-analysis-report",class:{"theme-dark":w.isDarkTheme}},[w.loading?$("div",{staticClass:"loading-container"},[$("div",{staticClass:"loading-content-pro"},[$("div",{staticClass:"loading-header"},[$("a-icon",{staticClass:"loading-icon-pro",attrs:{type:"thunderbolt"}}),$("span",{staticClass:"loading-title"},[w._v(w._s(w.$t("fastAnalysis.analyzing")))])],1),$("div",{staticClass:"progress-wrapper"},[$("a-progress",{attrs:{percent:w.progressPercent,showInfo:!1,strokeColor:"#1890ff",strokeWidth:8}}),$("span",{staticClass:"progress-text"},[w._v(w._s(w.formatProgress(w.progressPercent))+"%")])],1),$("div",{staticClass:"current-step"},[$("a-icon",{attrs:{type:"loading",spin:""}}),$("span",[w._v(w._s(w.currentStepText))])],1),$("div",{staticClass:"steps-list"},[$("div",{staticClass:"step-item",class:{done:w.step>1,active:1===w.step}},[$("span",{staticClass:"step-dot"}),$("span",{staticClass:"step-text"},[w._v(w._s(w.$t("fastAnalysis.step1")||"获取实时数据"))]),w.step>1?$("a-icon",{staticClass:"step-check",attrs:{type:"check"}}):w._e()],1),$("div",{staticClass:"step-item",class:{done:w.step>2,active:2===w.step}},[$("span",{staticClass:"step-dot"}),$("span",{staticClass:"step-text"},[w._v(w._s(w.$t("fastAnalysis.step2")||"计算技术指标"))]),w.step>2?$("a-icon",{staticClass:"step-check",attrs:{type:"check"}}):w._e()],1),$("div",{staticClass:"step-item",class:{done:w.step>3,active:3===w.step}},[$("span",{staticClass:"step-dot"}),$("span",{staticClass:"step-text"},[w._v(w._s(w.$t("fastAnalysis.step3")||"AI深度分析"))]),w.step>3?$("a-icon",{staticClass:"step-check",attrs:{type:"check"}}):w._e()],1),$("div",{staticClass:"step-item",class:{done:w.step>4,active:4===w.step}},[$("span",{staticClass:"step-dot"}),$("span",{staticClass:"step-text"},[w._v(w._s(w.$t("fastAnalysis.step4")||"生成报告"))]),w.step>4?$("a-icon",{staticClass:"step-check",attrs:{type:"check"}}):w._e()],1)]),$("div",{staticClass:"loading-footer"},[$("span",{staticClass:"elapsed-time"},[w._v(w._s(w.elapsedTimeText))])])])]):w.error?$("div",{staticClass:"error-container"},[$("a-result",{attrs:{status:"warning"===w.errorTone?"warning":"error",title:w.errorTitle,"sub-title":w.error},scopedSlots:w._u([{key:"extra",fn:function(){return[$("a-button",{attrs:{type:"primary"},on:{click:function(t){return w.$emit("retry")}}},[w._v(" "+w._s(w.$t("fastAnalysis.retry"))+" ")])]},proxy:!0}])})],1):w.result?$("div",{staticClass:"result-container"},[$("div",{staticClass:"decision-card",class:w.decisionClass},[$("div",{staticClass:"decision-main"},[$("div",{staticClass:"decision-badge"},[$("a-icon",{attrs:{type:w.decisionIcon}}),$("span",{staticClass:"decision-text"},[w._v(w._s(w.result.decision))])],1),$("div",{staticClass:"confidence-ring"},[$("a-progress",{attrs:{type:"circle",percent:w.result.confidence,width:80,strokeColor:w.confidenceColor},scopedSlots:w._u([{key:"format",fn:function(t){return[$("span",{staticClass:"confidence-value"},[w._v(w._s(t)+"%")])]}}])}),$("div",{staticClass:"confidence-label"},[w._v(w._s(w.$t("fastAnalysis.confidence")))])],1)]),$("div",{staticClass:"decision-summary"},[w._v(" "+w._s(w.result.summary)+" ")]),w.consensusBlock?$("div",{staticClass:"consensus-strip"},[$("div",{staticClass:"consensus-strip-title"},[$("a-icon",{attrs:{type:"cluster"}}),w._v(" "+w._s(w.$t("fastAnalysis.consensusTitle"))+" ")],1),$("div",{staticClass:"consensus-strip-metrics"},[$("span",{staticClass:"cm-item"},[$("em",[w._v(w._s(w.$t("fastAnalysis.consensusDecision")))]),w._v(" "+w._s(w.consensusBlock.consensus_decision)+" ")]),$("span",{staticClass:"cm-item"},[$("em",[w._v(w._s(w.$t("fastAnalysis.consensusScore")))]),w._v(" "+w._s(w.formatConsensusNum(w.consensusBlock.consensus_score))+" ")]),null!=w.consensusBlock.agreement_ratio?$("span",{staticClass:"cm-item"},[$("em",[w._v(w._s(w.$t("fastAnalysis.consensusAgreement")))]),w._v(" "+w._s(w.formatAgreementPct(w.consensusBlock.agreement_ratio))+" ")]):w._e()])]):w._e()]),$("div",{staticClass:"price-info-row"},[$("div",{staticClass:"price-card current"},[$("div",{staticClass:"price-label"},[w._v(w._s(w.$t("fastAnalysis.currentPrice")))]),$("div",{staticClass:"price-value"},[w._v("$"+w._s(w.formatPrice(null===(t=w.result.market_data)||void 0===t?void 0:t.current_price)))]),$("div",{staticClass:"price-change",class:(null===(s=w.result.market_data)||void 0===s?void 0:s.change_24h)>=0?"positive":"negative"},[w._v(" "+w._s((null===(a=w.result.market_data)||void 0===a?void 0:a.change_24h)>=0?"+":"")+w._s(w.formatNumber(null===(e=w.result.market_data)||void 0===e?void 0:e.change_24h,2))+"% ")])]),$("div",{staticClass:"price-card entry"},[$("div",{staticClass:"price-label"},[w._v(w._s(w.$t("fastAnalysis.entryPrice")))]),$("div",{staticClass:"price-value"},[w._v("$"+w._s(w.formatPrice(null===(i=w.result.trading_plan)||void 0===i?void 0:i.entry_price)))])]),$("div",{staticClass:"price-card stop"},[$("div",{staticClass:"price-label"},[w._v(w._s(w.$t("fastAnalysis.stopLoss")))]),$("div",{staticClass:"price-value negative"},[w._v("$"+w._s(w.formatPrice(null===(r=w.result.trading_plan)||void 0===r?void 0:r.stop_loss)))]),$("div",{staticClass:"price-hint"},[$("a-tooltip",{attrs:{title:w.$t("fastAnalysis.stopLossHint")}},[$("a-icon",{attrs:{type:"info-circle"}}),w._v(" "+w._s(w.$t("fastAnalysis.atrBased"))+" ")],1)],1)]),$("div",{staticClass:"price-card target"},[$("div",{staticClass:"price-label"},[w._v(w._s(w.$t("fastAnalysis.takeProfit")))]),$("div",{staticClass:"price-value positive"},[w._v("$"+w._s(w.formatPrice(null===(n=w.result.trading_plan)||void 0===n?void 0:n.take_profit)))]),$("div",{staticClass:"price-hint"},[$("a-tooltip",{attrs:{title:w.$t("fastAnalysis.takeProfitHint")}},[$("a-icon",{attrs:{type:"info-circle"}}),w._v(" "+w._s(w.$t("fastAnalysis.atrBased"))+" ")],1)],1)])]),$("div",{staticClass:"scores-row"},[$("div",{staticClass:"score-item"},[$("div",{staticClass:"score-header"},[$("a-icon",{attrs:{type:"line-chart"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.technical")))])],1),$("a-progress",{attrs:{percent:(null===(l=w.result.scores)||void 0===l?void 0:l.technical)||50,strokeColor:w.getScoreColor(null===(o=w.result.scores)||void 0===o?void 0:o.technical),showInfo:!1}}),$("div",{staticClass:"score-value"},[w._v(w._s((null===(c=w.result.scores)||void 0===c?void 0:c.technical)||50))])],1),$("div",{staticClass:"score-item"},[$("div",{staticClass:"score-header"},[$("a-icon",{attrs:{type:"bank"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.fundamental")))])],1),$("a-progress",{attrs:{percent:(null===(d=w.result.scores)||void 0===d?void 0:d.fundamental)||50,strokeColor:w.getScoreColor(null===(u=w.result.scores)||void 0===u?void 0:u.fundamental),showInfo:!1}}),$("div",{staticClass:"score-value"},[w._v(w._s((null===(m=w.result.scores)||void 0===m?void 0:m.fundamental)||50))])],1),$("div",{staticClass:"score-item"},[$("div",{staticClass:"score-header"},[$("a-icon",{attrs:{type:"heart"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.sentiment")))])],1),$("a-progress",{attrs:{percent:(null===(h=w.result.scores)||void 0===h?void 0:h.sentiment)||50,strokeColor:w.getScoreColor(null===(y=w.result.scores)||void 0===y?void 0:y.sentiment),showInfo:!1}}),$("div",{staticClass:"score-value"},[w._v(w._s((null===(p=w.result.scores)||void 0===p?void 0:p.sentiment)||50))])],1),$("div",{staticClass:"score-item overall"},[$("div",{staticClass:"score-header"},[$("a-icon",{attrs:{type:"dashboard"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.overall")))])],1),$("a-progress",{attrs:{percent:(null===(v=w.result.scores)||void 0===v?void 0:v.overall)||50,strokeColor:w.getScoreColor(null===(f=w.result.scores)||void 0===f?void 0:f.overall),showInfo:!1}}),$("div",{staticClass:"score-value"},[w._v(w._s((null===(g=w.result.scores)||void 0===g?void 0:g.overall)||50))])],1)]),w.result.detailed_analysis?$("div",{staticClass:"detailed-analysis"},[w.result.detailed_analysis.technical?$("div",{staticClass:"analysis-card technical"},[$("div",{staticClass:"analysis-card-header"},[$("a-icon",{attrs:{type:"line-chart"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.technicalAnalysis")))]),$("a-tag",{attrs:{color:w.getScoreTagColor(null===(b=w.result.scores)||void 0===b?void 0:b.technical)}},[w._v(" "+w._s((null===(_=w.result.scores)||void 0===_?void 0:_.technical)||50)+"分 ")])],1),$("div",{staticClass:"analysis-card-content"},[w._v(" "+w._s(w.result.detailed_analysis.technical)+" ")])]):w._e(),w.result.detailed_analysis.fundamental?$("div",{staticClass:"analysis-card fundamental"},[$("div",{staticClass:"analysis-card-header"},[$("a-icon",{attrs:{type:"bank"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.fundamentalAnalysis")))]),$("a-tag",{attrs:{color:w.getScoreTagColor(null===(k=w.result.scores)||void 0===k?void 0:k.fundamental)}},[w._v(" "+w._s((null===(C=w.result.scores)||void 0===C?void 0:C.fundamental)||50)+"分 ")])],1),$("div",{staticClass:"analysis-card-content"},[w._v(" "+w._s(w.result.detailed_analysis.fundamental)+" ")])]):w._e(),w.result.detailed_analysis.sentiment?$("div",{staticClass:"analysis-card sentiment"},[$("div",{staticClass:"analysis-card-header"},[$("a-icon",{attrs:{type:"heart"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.sentimentAnalysis")))]),$("a-tag",{attrs:{color:w.getScoreTagColor(null===(S=w.result.scores)||void 0===S?void 0:S.sentiment)}},[w._v(" "+w._s((null===(A=w.result.scores)||void 0===A?void 0:A.sentiment)||50)+"分 ")])],1),$("div",{staticClass:"analysis-card-content"},[w._v(" "+w._s(w.result.detailed_analysis.sentiment)+" ")])]):w._e()]):w._e(),$("div",{staticClass:"analysis-details"},[$("div",{staticClass:"detail-section reasons"},[$("div",{staticClass:"section-title"},[$("a-icon",{attrs:{type:"bulb",theme:"twoTone",twoToneColor:"#52c41a"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.keyReasons")))])],1),$("ul",{staticClass:"detail-list"},w._l(w.result.reasons,function(t,s){return $("li",{key:"r-"+s},[w._v(" "+w._s(t)+" ")])}),0)]),$("div",{staticClass:"detail-section risks"},[$("div",{staticClass:"section-title"},[$("a-icon",{attrs:{type:"warning",theme:"twoTone",twoToneColor:"#faad14"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.risks")))])],1),$("ul",{staticClass:"detail-list"},w._l(w.result.risks,function(t,s){return $("li",{key:"k-"+s},[w._v(" "+w._s(t)+" ")])}),0)])]),w.result.indicators&&Object.keys(w.result.indicators).length>0?$("div",{staticClass:"indicators-section"},[$("div",{staticClass:"section-title"},[$("a-icon",{attrs:{type:"stock"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.indicators")))])],1),$("div",{staticClass:"indicators-grid"},[w.result.indicators.rsi?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v("RSI (14)")]),$("div",{staticClass:"indicator-value",class:w.getRsiClass(w.result.indicators.rsi.value)},[w._v(" "+w._s(w.formatNumber(w.result.indicators.rsi.value,1))+" ")]),$("div",{staticClass:"indicator-signal"},[w._v(w._s(w.translateSignal(w.result.indicators.rsi.signal)))])]):w._e(),w.result.indicators.macd?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v("MACD")]),$("div",{staticClass:"indicator-value",class:"bullish"===w.result.indicators.macd.signal?"bullish":"bearish"===w.result.indicators.macd.signal?"bearish":""},[w._v(" "+w._s(w.translateTrend(w.result.indicators.macd.trend))+" ")]),$("div",{staticClass:"indicator-signal"},[w._v(w._s(w.translateSignal(w.result.indicators.macd.signal)))])]):w._e(),w.result.indicators.moving_averages?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v(w._s(w.$t("fastAnalysis.maTrend")))]),$("div",{staticClass:"indicator-value",class:w.getMaTrendClass(w.result.indicators.moving_averages.trend)},[w._v(" "+w._s(w.translateTrend(w.result.indicators.moving_averages.trend))+" ")])]):w._e(),w.result.indicators.levels?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v(w._s(w.$t("fastAnalysis.support")))]),$("div",{staticClass:"indicator-value"},[w._v("$"+w._s(w.formatPrice(w.result.indicators.levels.support)))])]):w._e(),w.result.indicators.levels?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v(w._s(w.$t("fastAnalysis.resistance")))]),$("div",{staticClass:"indicator-value"},[w._v("$"+w._s(w.formatPrice(w.result.indicators.levels.resistance)))])]):w._e(),w.result.indicators.volatility?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v(w._s(w.$t("fastAnalysis.volatility")))]),$("div",{staticClass:"indicator-value",class:w.getVolatilityClass(w.result.indicators.volatility.level)},[w._v(" "+w._s(w.translateVolatility(w.result.indicators.volatility.level))+" ("+w._s(w.result.indicators.volatility.pct)+"%) ")])]):w._e()])]):w._e(),$("div",{staticClass:"feedback-section"},[$("div",{staticClass:"feedback-question"},[w._v(w._s(w.$t("fastAnalysis.wasHelpful")))]),$("div",{staticClass:"feedback-buttons"},[$("a-button",{attrs:{type:"helpful"===w.userFeedback?"primary":"default",size:"small",loading:"helpful"===w.feedbackLoading},on:{click:function(t){return w.submitFeedback("helpful")}}},[$("a-icon",{attrs:{type:"like"}}),w._v(" "+w._s(w.$t("fastAnalysis.helpful"))+" ")],1),$("a-button",{attrs:{type:"not_helpful"===w.userFeedback?"danger":"default",size:"small",loading:"not_helpful"===w.feedbackLoading},on:{click:function(t){return w.submitFeedback("not_helpful")}}},[$("a-icon",{attrs:{type:"dislike"}}),w._v(" "+w._s(w.$t("fastAnalysis.notHelpful"))+" ")],1)],1),$("div",{staticClass:"analysis-meta"},[$("span",[w._v(w._s(w.$t("fastAnalysis.analysisTime"))+": "+w._s(w.result.analysis_time_ms)+"ms")]),w.result.memory_id?$("span",[w._v("ID: #"+w._s(w.result.memory_id))]):w._e()])])]):$("div",{staticClass:"empty-container"},[$("div",{staticClass:"empty-content"},[$("a-icon",{staticClass:"empty-icon",attrs:{type:"radar-chart"}}),$("div",{staticClass:"empty-title"},[w._v(w._s(w.$t("fastAnalysis.selectSymbol")))]),$("div",{staticClass:"empty-hint"},[w._v(w._s(w.$t("fastAnalysis.selectHint")))])],1)])])},k=[],C={name:"FastAnalysisReport",props:{result:{type:Object,default:null},loading:{type:Boolean,default:!1},error:{type:String,default:null},errorTone:{type:String,default:"error",validator:function(t){return["error","warning","info"].includes(t)}}},data:function(){return{userFeedback:null,feedbackLoading:null,progress:0,elapsedSeconds:0,mainTimer:null}},computed:(0,c.A)((0,c.A)({},(0,d.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},progressPercent:function(){return Math.round(10*this.progress)/10},step:function(){return this.progress<25?1:this.progress<50?2:this.progress<75?3:4},currentStepText:function(){var t={1:this.$t("fastAnalysis.step1")||"获取实时数据",2:this.$t("fastAnalysis.step2")||"计算技术指标",3:this.$t("fastAnalysis.step3")||"AI深度分析",4:this.$t("fastAnalysis.step4")||"生成报告"};return t[this.step]||this.$t("fastAnalysis.preparing")||"准备中..."},elapsedTimeText:function(){if(this.elapsedSeconds<60)return"".concat(this.elapsedSeconds,"s");var t=Math.floor(this.elapsedSeconds/60),s=this.elapsedSeconds%60;return"".concat(t,"m ").concat(s,"s")},decisionClass:function(){if(!this.result)return"";var t=this.result.decision;return"BUY"===t?"decision-buy":"SELL"===t?"decision-sell":"decision-hold"},decisionIcon:function(){if(!this.result)return"question";var t=this.result.decision;return"BUY"===t?"arrow-up":"SELL"===t?"arrow-down":"pause"},confidenceColor:function(){var t,s=(null===(t=this.result)||void 0===t?void 0:t.confidence)||50;return s>=70?"#52c41a":s>=50?"#1890ff":"#faad14"},consensusBlock:function(){var t,s=null===(t=this.result)||void 0===t?void 0:t.consensus;return s&&"object"===(0,r.A)(s)?null==s.consensus_decision&&null==s.consensus_score?null:s:null},insufficientCreditsError:function(){if(!this.error)return!1;var t=String(this.error);return t.includes("积分不足")||t.toLowerCase().includes("insufficient credits")},errorTitle:function(){return"warning"===this.errorTone?this.$t("fastAnalysis.analysisInProgressTitle"):this.insufficientCreditsError?this.$t("fastAnalysis.insufficientCredits"):this.$t("fastAnalysis.error")}}),watch:{result:function(){this.userFeedback=null},loading:{handler:function(t){t?this.startProgressTimer():this.stopProgressTimer()},immediate:!0}},mounted:function(){this.loading&&this.startProgressTimer()},beforeDestroy:function(){this.stopProgressTimer()},methods:{formatPrice:function(t){if(void 0===t||null===t)return"--";var s=parseFloat(t);return isNaN(s)?"--":s<1?s.toFixed(6):s<100?s.toFixed(4):s<1e4?s.toFixed(2):s.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})},formatNumber:function(t){var s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;if(void 0===t||null===t)return"--";var a=parseFloat(t);return isNaN(a)?"--":a.toFixed(s)},formatConsensusNum:function(t){if(void 0===t||null===t||""===t)return"--";var s=Number(t);return Number.isNaN(s)?"--":s.toFixed(1)},formatAgreementPct:function(t){var s=Number(t);return Number.isNaN(s)?"--":"".concat(Math.round(100*s),"%")},formatProgress:function(t){var s=parseFloat(t)||0;return s%1===0?s.toFixed(0):s.toFixed(1)},getScoreColor:function(t){return t>=70?"#52c41a":t>=50?"#1890ff":t>=30?"#faad14":"#ff4d4f"},getScoreTagColor:function(t){return t>=70?"green":t>=50?"blue":t>=30?"orange":"red"},getRsiClass:function(t){return t<30?"oversold":t>70?"overbought":""},getMaTrendClass:function(t){return t?t.includes("uptrend")||t.includes("strong_uptrend")?"bullish":t.includes("downtrend")||t.includes("strong_downtrend")?"bearish":"":""},getVolatilityClass:function(t){return"high"===t?"high-volatility":"low"===t?"low-volatility":""},translateSignal:function(t){if(!t)return"--";var s="fastAnalysis.signal.".concat(t),a=this.$t(s);return a===s?t:a},translateTrend:function(t){if(!t)return"--";var s="fastAnalysis.trend.".concat(t),a=this.$t(s);return a===s?t:a},translateVolatility:function(t){if(!t)return"--";var s="fastAnalysis.volatilityLevel.".concat(t),a=this.$t(s);return a===s?t:a},submitFeedback:function(t){var s=this;return(0,o.A)((0,l.A)().m(function a(){var e;return(0,l.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(null!==(e=s.result)&&void 0!==e&&e.memory_id){a.n=1;break}return s.$message.warning(s.$t("fastAnalysis.feedbackUnavailable")||"反馈功能暂不可用,请刷新后重试"),a.a(2);case 1:return s.feedbackLoading=t,a.p=2,a.n=3,g({memory_id:s.result.memory_id,feedback:t});case 3:s.userFeedback=t,s.$message.success(s.$t("fastAnalysis.feedbackThanks")),a.n=5;break;case 4:a.p=4,a.v,s.$message.error(s.$t("fastAnalysis.feedbackFailed"));case 5:return a.p=5,s.feedbackLoading=null,a.f(5);case 6:return a.a(2)}},a,null,[[2,4,5,6]])}))()},startProgressTimer:function(){var t=this;this.stopProgressTimer(),this.progress=0,this.elapsedSeconds=0;var s=Date.now();this.mainTimer=window.setInterval(function(){t.elapsedSeconds=Math.floor((Date.now()-s)/1e3),t.progress<75?t.progress=Math.min(t.progress+1,75):t.progress<90?t.progress=Math.min(t.progress+.5,90):t.progress<95&&(t.progress=Math.min(t.progress+.2,95))},100)},stopProgressTimer:function(){this.mainTimer&&(window.clearInterval(this.mainTimer),this.mainTimer=null),this.progress=0,this.elapsedSeconds=0}}},S=C,A=a(845),w=(0,A.A)(S,_,k,!1,null,"693144f6",null),$=w.exports,T={name:"Analysis",props:{embedded:{type:Boolean,default:!1},presetSymbol:{type:String,default:""},autoAnalyzeSignal:{type:Number,default:0}},components:{FastAnalysisReport:$},data:function(){return{loadingMarket:!1,heatmapType:"crypto",marketData:{fearGreed:null,vix:null,dxy:null,indices:[],heatmap:{crypto:[],commodities:[],sectors:[],forex:[]},calendar:[]},loadingSentiment:!1,loadingIndices:!1,loadingHeatmap:!1,loadingCalendar:!1,watchlistPriceTimer:null,watchlistPrices:{},localUserInfo:{},loadingUserInfo:!1,userId:1,watchlist:[],loadingWatchlist:!1,showAddStockModal:!1,addingStock:!1,selectedSymbol:void 0,analyzing:!1,analysisResult:null,analysisError:null,analysisErrorTone:"error",showHistoryModal:!1,historyList:[],historyLoading:!1,historyPage:1,historyPageSize:20,historyTotal:0,marketTypes:[],selectedMarketTab:"",symbolSearchKeyword:"",symbolSearchResults:[],searchingSymbols:!1,hotSymbols:[],loadingHotSymbols:!1,selectedSymbolForAdd:null,searchTimer:null,hasSearched:!1}},computed:(0,c.A)((0,c.A)((0,c.A)({},(0,d.L8)(["userInfo"])),(0,d.aH)({navTheme:function(t){return t.app.theme},primaryColor:function(t){return t.app.color||"#1890ff"}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},isZhLocale:function(){return"zh-CN"===this.$i18n.locale},currentHeatmap:function(){return this.marketData.heatmap[this.heatmapType]||[]},storeUserInfo:function(){return this.userInfo||{}},mergedUserInfo:function(){return this.localUserInfo&&this.localUserInfo.email?this.localUserInfo:this.storeUserInfo}}),created:function(){this.loadUserInfo(),this.loadMarketTypes(),this.loadWatchlist(),this.loadMarketData()},mounted:function(){this.startWatchlistPriceRefresh()},beforeDestroy:function(){this.watchlistPriceTimer&&clearInterval(this.watchlistPriceTimer)},methods:{filterSymbolOption:function(t,s){var a,e=(null===(a=s.componentOptions)||void 0===a||null===(a=a.propsData)||void 0===a?void 0:a.value)||"";return"__add_stock_option__"===e||e.toLowerCase().includes(t.toLowerCase())},handleSymbolChange:function(t){var s=this;if("__add_stock_option__"===t)return this.showAddStockModal=!0,void this.$nextTick(function(){s.selectedSymbol=void 0});this.selectedSymbol=t,this.analysisResult=null,this.analysisError=null,this.analysisErrorTone="error",this.$emit("symbol-change",t)},selectWatchlistItem:function(t){this.selectedSymbol="".concat(t.market,":").concat(t.symbol),this.analysisResult=null,this.analysisError=null,this.analysisErrorTone="error",this.$emit("symbol-change",this.selectedSymbol)},loadMarketData:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){return(0,l.A)().w(function(s){while(1)switch(s.n){case 0:t.loadingMarket=!0,t.loadSentimentData(),t.loadIndicesData(),t.loadHeatmapData(),t.loadCalendarData();case 1:return s.a(2)}},s)}))()},loadSentimentData:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a,e,i,r;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.loadingSentiment=!0,s.p=1,s.n=2,(0,b.EF)();case 2:a=s.v,1===(null===a||void 0===a?void 0:a.code)&&null!==a&&void 0!==a&&a.data&&(t.marketData.fearGreed=(null===(e=a.data.fear_greed)||void 0===e?void 0:e.value)||null,t.marketData.vix=(null===(i=a.data.vix)||void 0===i?void 0:i.value)||null,t.marketData.dxy=(null===(r=a.data.dxy)||void 0===r?void 0:r.value)||null),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.p=4,t.loadingSentiment=!1,t.checkAllLoaded(),s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},loadIndicesData:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.loadingIndices=!0,s.p=1,s.n=2,(0,b.yI)();case 2:a=s.v,1===(null===a||void 0===a?void 0:a.code)&&null!==a&&void 0!==a&&a.data&&(t.marketData.indices=a.data.indices||[]),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.p=4,t.loadingIndices=!1,t.checkAllLoaded(),s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},loadHeatmapData:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.loadingHeatmap=!0,s.p=1,s.n=2,(0,b.f$)();case 2:a=s.v,1===(null===a||void 0===a?void 0:a.code)&&null!==a&&void 0!==a&&a.data&&(t.marketData.heatmap={crypto:a.data.crypto||[],commodities:a.data.commodities||[],sectors:a.data.sectors||[],forex:a.data.forex||[]}),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.p=4,t.loadingHeatmap=!1,t.checkAllLoaded(),s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},loadCalendarData:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.loadingCalendar=!0,s.p=1,s.n=2,(0,b.kF)();case 2:a=s.v,1===(null===a||void 0===a?void 0:a.code)&&(t.marketData.calendar=a.data||[]),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.p=4,t.loadingCalendar=!1,t.checkAllLoaded(),s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},checkAllLoaded:function(){this.loadingSentiment||this.loadingIndices||this.loadingHeatmap||this.loadingCalendar||(this.loadingMarket=!1)},getFearGreedClass:function(t){return t?t<=25?"extreme-fear":t<=45?"fear":t<=55?"neutral":t<=75?"greed":"extreme-greed":""},getVixLevel:function(t){return t?t<15?"low":t<25?"medium":"high":""},formatNum:function(t){var s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return void 0===t||null===t||isNaN(t)?"--":Number(t).toFixed(s)},getHeatmapStyle:function(t){var s=parseFloat(t)||0,a=Math.min(Math.abs(s)/5,1);return s>=0?{background:"rgba(34, 197, 94, ".concat(.15+.6*a,")"),color:s>2?"#fff":"#166534"}:{background:"rgba(239, 68, 68, ".concat(.15+.6*a,")"),color:s<-2?"#fff":"#991b1b"}},getCountryFlag:function(t){var s={US:"🇺🇸",CN:"🇨🇳",EU:"🇪🇺",JP:"🇯🇵",UK:"🇬🇧",DE:"🇩🇪",AU:"🇦🇺",CA:"🇨🇦"};return s[t]||"🌍"},formatCalendarDate:function(t){if(!t)return"";try{var s=new Date(t),a=new Date,e=new Date(a);if(e.setDate(e.getDate()+1),s.toDateString()===a.toDateString())return this.isZhLocale?"今天":"Today";if(s.toDateString()===e.toDateString())return this.isZhLocale?"明天":"Tmrw";var i=s.getMonth()+1,r=s.getDate();return"".concat(i,"/").concat(r)}catch(n){return t}},formatPrice:function(t){return t?t>=1e4?(t/1e3).toFixed(1)+"K":t>=1e3?t.toFixed(0):t.toFixed(2):"--"},formatHeatmapPrice:function(t){return t?t>=1e4?"$"+(t/1e3).toFixed(1)+"K":t>=1e3?"$"+t.toFixed(0):t>=1?"$"+t.toFixed(2):"$"+t.toFixed(4):""},getHeatmapName:function(t){return"sectors"===this.heatmapType||"commodities"===this.heatmapType||"forex"===this.heatmapType?this.isZhLocale?t.name_cn||t.name:t.name_en||t.name:t.name},getImpactClass:function(t){return t.actual_impact||t.expected_impact||"neutral"},getMarketColor:function(t){var s={USStock:"green",Crypto:"purple",Forex:"gold",Futures:"cyan"};return s[t]||"default"},getCurrencySymbol:function(t){return"$"},formatCreditNum:function(t){if(void 0===t||null===t||""===t)return"--";var s=Number(t);return Number.isNaN(s)?String(t):Number.isInteger(s)?String(s):s.toFixed(2)},refreshUserInfoFromServer:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return s.p=0,s.n=1,(0,u.ug)();case 1:a=s.v,a&&1===a.code&&a.data&&(t.localUserInfo=a.data,t.userId=a.data.id,t.$store.commit("SET_INFO",a.data)),s.n=3;break;case 2:s.p=2,s.v;case 3:return s.a(2)}},s,null,[[0,2]])}))()},startFastAnalysis:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a,e,i,r,o,d,u,m,h,y,v,f,g,b,_;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(!t.analyzing){s.n=1;break}return s.a(2);case 1:if(t.selectedSymbol){s.n=2;break}return t.$message.warning(t.$t("dashboard.analysis.message.selectSymbol")),s.a(2);case 2:return t.analyzing=!0,t.analysisError=null,t.analysisErrorTone="error",a=t.selectedSymbol.split(":"),e=(0,n.A)(a,2),i=e[0],r=e[1],o=t.$store.getters.lang||"zh-CN",s.p=3,s.n=4,p({market:i,symbol:r,language:o,timeframe:"1D"});case 4:if(d=s.v,!d||1!==d.code||!d.data){s.n=6;break}return u=(0,c.A)({},d.data),delete u.credits_charged,delete u.remaining_credits,t.analysisResult=u,m=d.data.remaining_credits,void 0!==m&&null!==m?t.$message.success(t.$t("fastAnalysis.analysisCompleteWithCredits",{remaining:t.formatCreditNum(m)})):t.$message.success(t.$t("dashboard.analysis.message.analysisComplete")),s.n=5,t.refreshUserInfoFromServer();case 5:s.n=7;break;case 6:throw new Error((null===d||void 0===d?void 0:d.msg)||"分析失败");case 7:s.n=9;break;case 8:s.p=8,_=s.v,v=null===_||void 0===_||null===(h=_.response)||void 0===h?void 0:h.status,f=(null===_||void 0===_||null===(y=_.response)||void 0===y?void 0:y.data)||{},g=f.msg,b=f.data,429===v&&b&&b.in_progress?(t.analysisErrorTone="warning",t.analysisError=t.$t("fastAnalysis.analysisInProgress"),t.$message.warning(t.analysisError)):400===v&&"Insufficient credits"===g?(t.analysisError=t.$t("fastAnalysis.insufficientCreditsDetail",{required:t.formatCreditNum(null===b||void 0===b?void 0:b.required),current:t.formatCreditNum(null===b||void 0===b?void 0:b.current),shortage:t.formatCreditNum(null===b||void 0===b?void 0:b.shortage)}),t.$message.error(t.analysisError)):(t.analysisError=g||(null===_||void 0===_?void 0:_.message)||t.$t("dashboard.analysis.message.analysisFailed"),t.$message.error(t.analysisError));case 9:return s.p=9,t.analyzing=!1,s.f(9);case 10:return s.a(2)}},s,null,[[3,8,9,10]])}))()},loadHistoryList:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.historyLoading=!0,s.p=1,s.n=2,v({page:t.historyPage,pagesize:t.historyPageSize});case 2:a=s.v,a&&1===a.code&&a.data&&(t.historyList=a.data.list||[],t.historyTotal=a.data.total||0),s.n=4;break;case 3:s.p=3,s.v,t.$message.error(t.$t("dashboard.analysis.message.loadHistoryFailed")||"加载历史记录失败");case 4:return s.p=4,t.historyLoading=!1,s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},viewHistoryResult:function(t){var s=this;return(0,o.A)((0,l.A)().m(function a(){return(0,l.A)().w(function(a){while(1)switch(a.n){case 0:if(!t.full_result){a.n=1;break}return s.analysisResult=t.full_result,s.selectedSymbol="".concat(t.market,":").concat(t.symbol),s.showHistoryModal=!1,a.a(2);case 1:s.analysisResult={decision:t.decision,confidence:t.confidence,summary:t.summary,market_data:{current_price:t.price,change_24h:0},trading_plan:{entry_price:t.price,stop_loss:.95*t.price,take_profit:1.05*t.price},scores:t.scores||{},reasons:t.reasons||[],risks:[],indicators:t.indicators||{},memory_id:t.id,analysis_time_ms:0},s.selectedSymbol="".concat(t.market,":").concat(t.symbol),s.showHistoryModal=!1;case 2:return a.a(2)}},a)}))()},deleteHistoryItem:function(t){var s=this;return(0,o.A)((0,l.A)().m(function a(){var e;return(0,l.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,f(t.id);case 1:e=a.v,e&&1===e.code?(s.$message.success(s.$t("dashboard.analysis.message.deleteSuccess")),s.loadHistoryList()):s.$message.error((null===e||void 0===e?void 0:e.msg)||s.$t("dashboard.analysis.message.deleteFailed")),a.n=3;break;case 2:a.p=2,a.v,s.$message.error(s.$t("dashboard.analysis.message.deleteFailed"));case 3:return a.a(2)}},a,null,[[0,2]])}))()},formatTime:function(t){if(!t)return"-";var s=new Date(1e3*t);return s.toLocaleString("zh-CN")},formatIsoTime:function(t){if(!t)return"-";var s=new Date(t);return s.toLocaleString("zh-CN")},getStatusColor:function(t){var s={pending:"orange",processing:"blue",completed:"green",failed:"red"};return s[t]||"default"},getStatusText:function(t){var s={pending:"dashboard.analysis.status.pending",processing:"dashboard.analysis.status.processing",completed:"dashboard.analysis.status.completed",failed:"dashboard.analysis.status.failed"},a=s[t];return a?this.$t(a):t},loadUserInfo:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(t.loadingUserInfo=!0,s.p=1,!t.storeUserInfo||!t.storeUserInfo.email){s.n=2;break}return t.localUserInfo=t.storeUserInfo,t.userId=t.storeUserInfo.id,t.loadingUserInfo=!1,t.loadWatchlist(),s.a(2);case 2:return s.n=3,(0,u.ug)();case 3:a=s.v,a&&1===a.code&&a.data&&(t.localUserInfo=a.data,t.userId=a.data.id,t.$store.commit("SET_INFO",a.data),t.loadWatchlist()),s.n=5;break;case 4:s.p=4,s.v;case 5:return s.p=5,t.loadingUserInfo=!1,s.f(5);case 6:return s.a(2)}},s,null,[[1,4,5,6]])}))()},loadWatchlist:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(t.userId){s.n=1;break}return s.a(2);case 1:return t.loadingWatchlist=!0,s.p=2,s.n=3,(0,m.Qo)({userid:t.userId});case 3:if(a=s.v,!a||1!==a.code||!a.data){s.n=4;break}return t.watchlist=a.data.map(function(t){return(0,c.A)((0,c.A)({},t),{},{price:0,change:0,changePercent:0})}),s.n=4,t.loadWatchlistPrices();case 4:s.n=6;break;case 5:s.p=5,s.v;case 6:return s.p=6,t.loadingWatchlist=!1,s.f(6);case 7:return s.a(2)}},s,null,[[2,5,6,7]])}))()},loadWatchlistPrices:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a,e,i,r;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(t.watchlist&&0!==t.watchlist.length){s.n=1;break}return s.a(2);case 1:return s.p=1,a=t.watchlist.map(function(t){return{market:t.market,symbol:t.symbol}}),s.n=2,(0,m.ms)({watchlist:a});case 2:e=s.v,e&&1===e.code&&e.data&&(i={},r={},e.data.forEach(function(t){i["".concat(t.market,"-").concat(t.symbol)]=t,r["".concat(t.market,":").concat(t.symbol)]={price:t.price||0,change:t.changePercent||0}}),t.watchlistPrices=r,t.watchlist=t.watchlist.map(function(t){var s="".concat(t.market,"-").concat(t.symbol),a=i[s];return a?(0,c.A)((0,c.A)({},t),{},{price:a.price||0,change:a.change||0,changePercent:a.changePercent||0}):t})),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.a(2)}},s,null,[[1,3]])}))()},startWatchlistPriceRefresh:function(){var t=this;this.watchlistPriceTimer=setInterval(function(){t.watchlist&&t.watchlist.length>0&&t.loadWatchlistPrices()},3e4),this.watchlist&&this.watchlist.length>0&&this.loadWatchlistPrices()},handleAddStock:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a,e,i,r,n,o,c;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(a="",e="",i="",!t.selectedSymbolForAdd){s.n=1;break}a=t.selectedSymbolForAdd.market,e=t.selectedSymbolForAdd.symbol.toUpperCase(),i=t.selectedSymbolForAdd.name||"",s.n=4;break;case 1:if(!t.symbolSearchKeyword||!t.symbolSearchKeyword.trim()){s.n=3;break}if(t.selectedMarketTab){s.n=2;break}return t.$message.warning(t.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),s.a(2);case 2:a=t.selectedMarketTab,e=t.symbolSearchKeyword.trim().toUpperCase(),i="",s.n=4;break;case 3:return t.$message.warning(t.$t("dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol")),s.a(2);case 4:return t.addingStock=!0,s.p=5,s.n=6,(0,m.dp)({userid:t.userId,market:a,symbol:e,name:i});case 6:if(r=s.v,!r||1!==r.code){s.n=8;break}return t.$message.success(t.$t("dashboard.analysis.message.addStockSuccess")),t.handleCloseAddStockModal(),s.n=7,t.loadWatchlist();case 7:s.n=9;break;case 8:t.$message.error((null===r||void 0===r?void 0:r.msg)||t.$t("dashboard.analysis.message.addStockFailed"));case 9:s.n=11;break;case 10:s.p=10,c=s.v,o=(null===c||void 0===c||null===(n=c.response)||void 0===n||null===(n=n.data)||void 0===n?void 0:n.msg)||(null===c||void 0===c?void 0:c.message)||t.$t("dashboard.analysis.message.addStockFailed"),t.$message.error(o);case 11:return s.p=11,t.addingStock=!1,s.f(11);case 12:return s.a(2)}},s,null,[[5,10,11,12]])}))()},handleCloseAddStockModal:function(){this.showAddStockModal=!1,this.selectedSymbolForAdd=null,this.symbolSearchKeyword="",this.symbolSearchResults=[],this.hasSearched=!1,this.selectedMarketTab=this.marketTypes.length>0?this.marketTypes[0].value:""},handleMarketTabChange:function(t){this.selectedMarketTab=t,this.symbolSearchKeyword="",this.symbolSearchResults=[],this.selectedSymbolForAdd=null,this.hasSearched=!1,this.loadHotSymbols(t)},handleSymbolSearchInput:function(t){var s=this,a=t.target.value;if(this.symbolSearchKeyword=a,this.searchTimer&&clearTimeout(this.searchTimer),!a||""===a.trim())return this.symbolSearchResults=[],this.hasSearched=!1,void(this.selectedSymbolForAdd=null);this.searchTimer=setTimeout(function(){s.searchSymbolsInModal(a)},500)},handleSearchOrInput:function(t){t&&t.trim()&&(this.selectedMarketTab?this.symbolSearchResults.length>0||(this.hasSearched&&0===this.symbolSearchResults.length?this.handleDirectAdd():this.searchSymbolsInModal(t)):this.$message.warning(this.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")))},searchSymbolsInModal:function(t){var s=this;return(0,o.A)((0,l.A)().m(function a(){var e;return(0,l.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(t&&""!==t.trim()){a.n=1;break}return s.symbolSearchResults=[],s.hasSearched=!1,a.a(2);case 1:if(s.selectedMarketTab){a.n=2;break}return s.$message.warning(s.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),a.a(2);case 2:return s.searchingSymbols=!0,s.hasSearched=!0,a.p=3,a.n=4,(0,m._3)({market:s.selectedMarketTab,keyword:t.trim(),limit:20});case 4:e=a.v,e&&1===e.code&&e.data&&e.data.length>0?s.symbolSearchResults=e.data:(s.symbolSearchResults=[],s.selectedSymbolForAdd={market:s.selectedMarketTab,symbol:t.trim().toUpperCase(),name:""}),a.n=6;break;case 5:a.p=5,a.v,s.symbolSearchResults=[],s.selectedSymbolForAdd={market:s.selectedMarketTab,symbol:t.trim().toUpperCase(),name:""};case 6:return a.p=6,s.searchingSymbols=!1,a.f(6);case 7:return a.a(2)}},a,null,[[3,5,6,7]])}))()},handleDirectAdd:function(){this.symbolSearchKeyword&&this.symbolSearchKeyword.trim()?this.selectedMarketTab?this.selectedSymbolForAdd={market:this.selectedMarketTab,symbol:this.symbolSearchKeyword.trim().toUpperCase(),name:""}:this.$message.warning(this.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")):this.$message.warning(this.$t("dashboard.analysis.modal.addStock.pleaseEnterSymbol"))},selectSymbol:function(t){this.selectedSymbolForAdd={market:t.market,symbol:t.symbol,name:t.name||t.symbol}},loadHotSymbols:function(t){var s=this;return(0,o.A)((0,l.A)().m(function a(){var e;return(0,l.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(t||(t=s.selectedMarketTab||(s.marketTypes.length>0?s.marketTypes[0].value:"")),t){a.n=1;break}return a.a(2);case 1:return s.loadingHotSymbols=!0,a.p=2,a.n=3,(0,m.z6)({market:t,limit:10});case 3:e=a.v,e&&1===e.code&&e.data?s.hotSymbols=e.data:s.hotSymbols=[],a.n=5;break;case 4:a.p=4,a.v,s.hotSymbols=[];case 5:return a.p=5,s.loadingHotSymbols=!1,a.f(5);case 6:return a.a(2)}},a,null,[[2,4,5,6]])}))()},removeFromWatchlist:function(t){var s=arguments,a=this;return(0,o.A)((0,l.A)().m(function e(){var i,n,o;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(a.userId){e.n=1;break}return e.a(2);case 1:return i="object"===(0,r.A)(t)?t.symbol:t,n="object"===(0,r.A)(t)?t.market:s[1],e.p=2,e.n=3,(0,m.mk)({userid:a.userId,symbol:i,market:n});case 3:if(o=e.v,!o||1!==o.code){e.n=5;break}return a.$message.success(a.$t("dashboard.analysis.message.removeStockSuccess")),e.n=4,a.loadWatchlist();case 4:e.n=6;break;case 5:a.$message.error((null===o||void 0===o?void 0:o.msg)||a.$t("dashboard.analysis.message.removeStockFailed"));case 6:e.n=8;break;case 7:e.p=7,e.v,a.$message.error(a.$t("dashboard.analysis.message.removeStockFailed"));case 8:return e.a(2)}},e,null,[[2,7]])}))()},getMarketName:function(t){return this.$t("dashboard.analysis.market.".concat(t))||t},formatNumber:function(t){return"string"===typeof t?t:t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})},loadMarketTypes:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return s.p=0,s.n=1,(0,m.iO)();case 1:a=s.v,a&&1===a.code&&a.data&&Array.isArray(a.data)?t.marketTypes=a.data.map(function(t){return{value:t.value,i18nKey:t.i18nKey||"dashboard.analysis.market.".concat(t.value)}}):t.marketTypes=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}],s.n=3;break;case 2:s.p=2,s.v,t.marketTypes=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}];case 3:t.marketTypes.length>0&&!t.selectedMarketTab&&(t.selectedMarketTab=t.marketTypes[0].value);case 4:return s.a(2)}},s,null,[[0,2]])}))()}},watch:{presetSymbol:function(t){t&&t!==this.selectedSymbol&&(this.selectedSymbol=t,this.analysisResult=null,this.analysisError=null,this.analysisErrorTone="error")},autoAnalyzeSignal:function(t){var s=this;t&&(this.presetSymbol&&this.presetSymbol!==this.selectedSymbol&&(this.selectedSymbol=this.presetSymbol),this.$nextTick(function(){s.startFastAnalysis()}))},showAddStockModal:function(t){t?(this.marketTypes.length>0&&!this.selectedMarketTab&&(this.selectedMarketTab=this.marketTypes[0].value),this.selectedMarketTab&&this.loadHotSymbols(this.selectedMarketTab)):(this.selectedSymbolForAdd=null,this.symbolSearchKeyword="",this.symbolSearchResults=[],this.hasSearched=!1,this.searchTimer&&(clearTimeout(this.searchTimer),this.searchTimer=null))}}},x=T,F=(0,A.A)(x,e,i,!1,null,"41eda137",null),M=F.exports},44146:function(t,s,a){a.d(s,{EF:function(){return o},f$:function(){return n},kF:function(){return l},r9:function(){return c},yI:function(){return r}});var e=a(75769),i="/api/global-market";function r(){return(0,e.Ay)({url:"".concat(i,"/overview"),method:"get"})}function n(){return(0,e.Ay)({url:"".concat(i,"/heatmap"),method:"get"})}function l(){return(0,e.Ay)({url:"".concat(i,"/calendar"),method:"get"})}function o(){return(0,e.Ay)({url:"".concat(i,"/sentiment"),method:"get"})}function c(t){return(0,e.Ay)({url:"".concat(i,"/opportunities"),method:"get",params:t})}},35038:function(t,s,a){a.d(s,{Qo:function(){return r},_3:function(){return d},dp:function(){return n},iO:function(){return c},mk:function(){return l},ms:function(){return o},z6:function(){return u}});var e=a(75769),i={GetWatchlist:"/api/market/watchlist/get",AddWatchlist:"/api/market/watchlist/add",RemoveWatchlist:"/api/market/watchlist/remove",GetWatchlistPrices:"/api/market/watchlist/prices",MultiAnalysis:"/api/analysis/multiAnalysis",CreateAnalysisTask:"/api/analysis/createTask",GetAnalysisTaskStatus:"/api/analysis/getTaskStatus",GetAnalysisHistoryList:"/api/analysis/getHistoryList",DeleteAnalysisTask:"/api/analysis/deleteTask",ReflectAnalysis:"/api/analysis/reflect",ChatMessage:"/api/ai/chat/message",GetChatHistory:"/api/ai/chat/history",SaveChatHistory:"/api/ai/chat/history/save",GetConfig:"/api/market/config",GetMenuFooterConfig:"/api/market/menuFooterConfig",GetMarketTypes:"/api/market/types",SearchSymbols:"/api/market/symbols/search",GetHotSymbols:"/api/market/symbols/hot"};function r(t){return(0,e.Ay)({url:i.GetWatchlist,method:"get",params:t})}function n(t){return(0,e.Ay)({url:i.AddWatchlist,method:"post",data:t})}function l(t){return(0,e.Ay)({url:i.RemoveWatchlist,method:"post",data:t})}function o(t){return(0,e.Ay)({url:i.GetWatchlistPrices,method:"get",params:{watchlist:JSON.stringify(t.watchlist||[])}})}function c(){return(0,e.Ay)({url:i.GetMarketTypes,method:"get"})}function d(t){return(0,e.Ay)({url:i.SearchSymbols,method:"get",params:t})}function u(t){return(0,e.Ay)({url:i.GetHotSymbols,method:"get",params:t})}}}]); \ No newline at end of file diff --git a/frontend/dist/js/916.c888fcbc.js b/frontend/dist/js/916.c888fcbc.js new file mode 100644 index 0000000..5e3d6ef --- /dev/null +++ b/frontend/dist/js/916.c888fcbc.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[916],{7916:function(t,e,a){a.r(e),a.d(e,{default:function(){return D}});a(74423);var i=function(){var t,e=this,a=e._self._c;return a("div",{staticClass:"trading-assistant",class:{"theme-dark":e.isDarkTheme}},[a("a-row",{staticClass:"strategy-layout",attrs:{gutter:24}},[a("a-col",{staticClass:"strategy-list-col",attrs:{xs:24,sm:24,md:10,lg:8,xl:8}},[a("a-card",{staticClass:"strategy-list-card",attrs:{bordered:!1}},[a("div",{staticClass:"card-title",attrs:{slot:"title"},slot:"title"},[a("span",[e._v(e._s(e.$t("trading-assistant.strategyList")))]),a("a-button",{attrs:{type:"primary",size:"small"},on:{click:e.handleCreateStrategy}},[a("a-icon",{attrs:{type:"plus"}}),e._v(" "+e._s(e.$t("trading-assistant.createStrategy"))+" ")],1)],1),a("div",{staticClass:"group-mode-switch"},[a("span",{staticClass:"group-mode-label"},[e._v(e._s(e.$t("trading-assistant.groupBy"))+":")]),a("a-radio-group",{attrs:{size:"small","button-style":"solid"},model:{value:e.groupByMode,callback:function(t){e.groupByMode=t},expression:"groupByMode"}},[a("a-radio-button",{attrs:{value:"strategy"}},[a("a-icon",{attrs:{type:"folder"}}),e._v(" "+e._s(e.$t("trading-assistant.groupByStrategy"))+" ")],1),a("a-radio-button",{attrs:{value:"symbol"}},[a("a-icon",{attrs:{type:"stock"}}),e._v(" "+e._s(e.$t("trading-assistant.groupBySymbol"))+" ")],1)],1)],1),a("a-spin",{attrs:{spinning:e.loading}},[e.loading||0!==e.strategies.length?a("div",{staticClass:"strategy-grouped-list"},[e._l(e.groupedStrategies.groups,function(t){return a("div",{key:t.id,staticClass:"strategy-group"},[a("div",{staticClass:"strategy-group-header",on:{click:function(a){return e.toggleGroup(t.id)}}},[a("div",{staticClass:"group-header-left"},[a("a-icon",{staticClass:"collapse-icon",attrs:{type:e.collapsedGroups[t.id]?"right":"down"}}),a("a-icon",{staticClass:"group-icon",attrs:{type:"symbol"===e.groupByMode?"stock":"folder"}}),a("span",{staticClass:"group-name"},[e._v(e._s(t.baseName))]),a("a-tag",{attrs:{size:"small",color:"blue"}},[e._v(e._s(t.strategies.length)+" "+e._s("symbol"===e.groupByMode?e.$t("trading-assistant.strategyCount"):e.$t("trading-assistant.symbolCount")))])],1),a("div",{staticClass:"group-header-right",on:{click:function(t){t.stopPropagation()}}},[t.runningCount>0?a("span",{staticClass:"group-status running"},[e._v(" "+e._s(t.runningCount)+" "+e._s(e.$t("trading-assistant.status.running"))+" ")]):e._e(),t.stoppedCount>0?a("span",{staticClass:"group-status stopped"},[e._v(" "+e._s(t.stoppedCount)+" "+e._s(e.$t("trading-assistant.status.stopped"))+" ")]):e._e(),a("a-dropdown",{attrs:{getPopupContainer:e.getDropdownContainer,trigger:["click"]}},[a("a-menu",{attrs:{slot:"overlay"},on:{click:function(a){var i=a.key;return e.handleGroupMenuClick(i,t)}},slot:"overlay"},[a("a-menu-item",{key:"startAll"},[a("a-icon",{attrs:{type:"play-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.startAll"))+" ")],1),a("a-menu-item",{key:"stopAll"},[a("a-icon",{attrs:{type:"pause-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.stopAll"))+" ")],1),a("a-menu-divider"),a("a-menu-item",{key:"deleteAll",staticClass:"danger-item"},[a("a-icon",{attrs:{type:"delete"}}),e._v(" "+e._s(e.$t("trading-assistant.deleteAll"))+" ")],1)],1),a("a-button",{attrs:{type:"link",icon:"more",size:"small"}})],1)],1)]),a("div",{directives:[{name:"show",rawName:"v-show",value:!e.collapsedGroups[t.id],expression:"!collapsedGroups[group.id]"}],staticClass:"strategy-group-content"},e._l(t.strategies,function(t){return a("div",{key:t.id,class:["strategy-list-item",{active:e.selectedStrategy&&e.selectedStrategy.id===t.id}],on:{click:function(a){return e.handleSelectStrategy(t)}}},[a("div",{staticClass:"strategy-item-content"},[a("div",{staticClass:"strategy-item-header"},[a("div",{staticClass:"strategy-name-wrapper"},["strategy"===e.groupByMode?[t.trading_config&&t.trading_config.symbol?a("span",{staticClass:"info-item"},[a("a-icon",{attrs:{type:"dollar"}}),e._v(" "+e._s(t.trading_config.symbol)+" ")],1):e._e()]:[a("span",{staticClass:"info-item strategy-name-text"},[a("a-icon",{attrs:{type:"thunderbolt"}}),e._v(" "+e._s(t.displayInfo?t.displayInfo.strategyName:t.strategy_name)+" ")],1),t.displayInfo&&t.displayInfo.timeframe?a("a-tag",{attrs:{size:"small",color:"cyan"}},[a("a-icon",{staticStyle:{"margin-right":"2px"},attrs:{type:"clock-circle"}}),e._v(" "+e._s(t.displayInfo.timeframe)+" ")],1):e._e(),t.displayInfo&&t.displayInfo.indicatorName&&"-"!==t.displayInfo.indicatorName?a("a-tag",{attrs:{size:"small",color:"purple"}},[a("a-icon",{staticStyle:{"margin-right":"2px"},attrs:{type:"line-chart"}}),e._v(" "+e._s(t.displayInfo.indicatorName)+" ")],1):e._e()],a("span",{staticClass:"status-label",class:[t.status?"status-".concat(t.status):"",{"status-stopped":"stopped"===t.status}]},[e._v(" "+e._s(e.getStatusText(t.status))+" ")])],2)])]),a("div",{staticClass:"strategy-item-actions",on:{click:function(t){t.stopPropagation()}}},[a("a-dropdown",{attrs:{getPopupContainer:e.getDropdownContainer,trigger:["click"]}},[a("a-menu",{attrs:{slot:"overlay"},on:{click:function(a){var i=a.key;return e.handleMenuClick(i,t)}},slot:"overlay"},["stopped"===t.status?a("a-menu-item",{key:"start"},[a("a-icon",{attrs:{type:"play-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.startStrategy"))+" ")],1):e._e(),"running"===t.status?a("a-menu-item",{key:"stop"},[a("a-icon",{attrs:{type:"pause-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.stopStrategy"))+" ")],1):e._e(),a("a-menu-divider"),a("a-menu-item",{key:"edit"},[a("a-icon",{attrs:{type:"edit"}}),e._v(" "+e._s(e.$t("trading-assistant.editStrategy"))+" ")],1),a("a-menu-divider"),a("a-menu-item",{key:"delete",staticClass:"danger-item"},[a("a-icon",{attrs:{type:"delete"}}),e._v(" "+e._s(e.$t("trading-assistant.deleteStrategy"))+" ")],1)],1),a("a-button",{attrs:{type:"link",icon:"more",size:"small"}})],1)],1)])}),0)])}),e._l(e.groupedStrategies.ungrouped,function(t){return a("div",{key:t.id,class:["strategy-list-item",{active:e.selectedStrategy&&e.selectedStrategy.id===t.id}],on:{click:function(a){return e.handleSelectStrategy(t)}}},[a("div",{staticClass:"strategy-item-content"},[a("div",{staticClass:"strategy-item-header"},[a("div",{staticClass:"strategy-name-wrapper"},[t.exchange_config&&t.exchange_config.exchange_id?a("a-tag",{staticClass:"exchange-tag",attrs:{color:e.getExchangeTagColor(t.exchange_config.exchange_id),size:"small"}},[a("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"bank"}}),e._v(" "+e._s(e.getExchangeDisplayName(t.exchange_config.exchange_id))+" ")],1):e._e(),a("span",{staticClass:"strategy-name"},[e._v(e._s(t.strategy_name))]),"PromptBasedStrategy"===t.strategy_type?a("a-tag",{staticClass:"strategy-type-tag",attrs:{color:"purple",size:"small"}},[a("a-icon",{staticStyle:{"margin-right":"2px"},attrs:{type:"robot"}}),e._v(" AI ")],1):e._e()],1)]),a("div",{staticClass:"strategy-item-info"},[t.trading_config&&t.trading_config.symbol?a("span",{staticClass:"info-item"},[a("a-icon",{attrs:{type:"dollar"}}),e._v(" "+e._s(t.trading_config.symbol)+" ")],1):e._e(),a("span",{staticClass:"status-label",class:[t.status?"status-".concat(t.status):"",{"status-stopped":"stopped"===t.status}]},[e._v(" "+e._s(e.getStatusText(t.status))+" ")])])]),a("div",{staticClass:"strategy-item-actions",on:{click:function(t){t.stopPropagation()}}},[a("a-dropdown",{attrs:{getPopupContainer:e.getDropdownContainer,trigger:["click"]}},[a("a-menu",{attrs:{slot:"overlay"},on:{click:function(a){var i=a.key;return e.handleMenuClick(i,t)}},slot:"overlay"},["stopped"===t.status?a("a-menu-item",{key:"start"},[a("a-icon",{attrs:{type:"play-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.startStrategy"))+" ")],1):e._e(),"running"===t.status?a("a-menu-item",{key:"stop"},[a("a-icon",{attrs:{type:"pause-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.stopStrategy"))+" ")],1):e._e(),a("a-menu-divider"),a("a-menu-item",{key:"edit"},[a("a-icon",{attrs:{type:"edit"}}),e._v(" "+e._s(e.$t("trading-assistant.editStrategy"))+" ")],1),a("a-menu-divider"),a("a-menu-item",{key:"delete",staticClass:"danger-item"},[a("a-icon",{attrs:{type:"delete"}}),e._v(" "+e._s(e.$t("trading-assistant.deleteStrategy"))+" ")],1)],1),a("a-button",{attrs:{type:"link",icon:"more",size:"small"}})],1)],1)])})],2):a("a-empty",{attrs:{description:e.$t("trading-assistant.noStrategy")}})],1)],1)],1),a("a-col",{staticClass:"strategy-detail-col",attrs:{xs:24,sm:24,md:14,lg:16,xl:16}},[e.selectedStrategy?a("div",{staticClass:"strategy-detail-panel"},[a("a-card",{staticClass:"strategy-header-card",attrs:{bordered:!1}},[a("div",{staticClass:"strategy-header"},[a("div",{staticClass:"header-left"},[a("div",{staticClass:"strategy-title-row"},[a("h3",{staticClass:"strategy-title"},[e._v(e._s(e.selectedStrategy.strategy_name))]),a("div",{staticClass:"status-badge",class:["status-".concat(e.selectedStrategy.status)]},[a("span",{staticClass:"status-dot"}),e._v(" "+e._s(e.getStatusText(e.selectedStrategy.status))+" ")])]),a("div",{staticClass:"key-stats-grid"},[e.selectedStrategy.initial_capital||e.selectedStrategy.trading_config&&e.selectedStrategy.trading_config.initial_capital?a("div",{staticClass:"stat-card"},[a("div",{staticClass:"stat-icon investment"},[a("a-icon",{attrs:{type:"wallet"}})],1),a("div",{staticClass:"stat-content"},[a("div",{staticClass:"stat-label"},[e._v(e._s(e.$t("trading-assistant.detail.totalInvestment")))]),a("div",{staticClass:"stat-value"},[e._v("$"+e._s(parseFloat(e.selectedStrategy.initial_capital||(null===(t=e.selectedStrategy.trading_config)||void 0===t?void 0:t.initial_capital)||0).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})))])])]):e._e(),null!==e.currentEquity?a("div",{staticClass:"stat-card"},[a("div",{staticClass:"stat-icon equity"},[a("a-icon",{attrs:{type:"fund"}})],1),a("div",{staticClass:"stat-content"},[a("div",{staticClass:"stat-label"},[e._v(e._s(e.$t("trading-assistant.detail.currentEquity")))]),a("div",{staticClass:"stat-value",class:e.getEquityColorClass},[e._v(e._s(e.formatCurrency(e.currentEquity)))])])]):e._e(),null!==e.totalPnl?a("div",{staticClass:"stat-card pnl-card",class:{profit:e.totalPnl>0,loss:e.totalPnl<0}},[a("div",{staticClass:"stat-icon pnl"},[a("a-icon",{attrs:{type:e.totalPnl>=0?"rise":"fall"}})],1),a("div",{staticClass:"stat-content"},[a("div",{staticClass:"stat-label"},[e._v(e._s(e.$t("trading-assistant.detail.totalPnl")))]),a("div",{staticClass:"stat-value",class:e.getPnlColorClass},[e._v(" "+e._s(e.formatPnl(e.totalPnl))+" "),a("span",{staticClass:"pnl-percent"},[e._v("("+e._s(e.formatPnlPercent(e.totalPnlPercent))+")")])])])]):e._e()]),a("div",{staticClass:"strategy-tags"},[e.selectedStrategy.trading_config?a("div",{staticClass:"tag-item"},[a("a-icon",{attrs:{type:"stock"}}),a("span",[e._v(e._s(e.selectedStrategy.trading_config.symbol))])],1):e._e(),e.selectedStrategy.indicator_config&&e.selectedStrategy.indicator_config.indicator_name?a("div",{staticClass:"tag-item"},[a("a-icon",{attrs:{type:"line-chart"}}),a("span",[e._v(e._s(e.selectedStrategy.indicator_config.indicator_name))])],1):e._e(),e.selectedStrategy.trading_config?a("div",{staticClass:"tag-item"},[a("a-icon",{attrs:{type:"thunderbolt"}}),a("span",[e._v(e._s(e.selectedStrategy.trading_config.leverage||1)+"x")])],1):e._e(),e.selectedStrategy.trading_config&&e.selectedStrategy.trading_config.trade_direction?a("div",{staticClass:"tag-item"},[a("a-icon",{attrs:{type:"swap"}}),a("span",[e._v(e._s(e.getTradeDirectionText(e.selectedStrategy.trading_config.trade_direction)))])],1):e._e(),e.selectedStrategy.trading_config&&e.selectedStrategy.trading_config.timeframe?a("div",{staticClass:"tag-item"},[a("a-icon",{attrs:{type:"clock-circle"}}),a("span",[e._v(e._s(e.selectedStrategy.trading_config.timeframe))])],1):e._e()])]),a("div",{staticClass:"header-right"},["stopped"===e.selectedStrategy.status?a("a-button",{staticClass:"action-btn start-btn",attrs:{type:"primary",size:"large"},on:{click:function(t){return e.handleStartStrategy(e.selectedStrategy.id)}}},[a("a-icon",{attrs:{type:"play-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.startStrategy"))+" ")],1):e._e(),"running"===e.selectedStrategy.status?a("a-button",{staticClass:"action-btn stop-btn",attrs:{type:"danger",size:"large"},on:{click:function(t){return e.handleStopStrategy(e.selectedStrategy.id)}}},[a("a-icon",{attrs:{type:"pause-circle"}}),e._v(" "+e._s(e.$t("trading-assistant.stopStrategy"))+" ")],1):e._e()],1)])]),a("a-card",{staticClass:"strategy-content-card",attrs:{bordered:!1}},[a("a-tabs",{attrs:{defaultActiveKey:"positions"}},[a("a-tab-pane",{key:"positions",attrs:{tab:e.$t("trading-assistant.tabs.positions")}},[a("position-records",{attrs:{"strategy-id":e.selectedStrategy.id,"market-type":e.selectedStrategy.trading_config&&e.selectedStrategy.trading_config.market_type||"swap",leverage:e.selectedStrategy.trading_config&&e.selectedStrategy.trading_config.leverage||1,loading:e.loadingRecords}})],1),a("a-tab-pane",{key:"trades",attrs:{tab:e.$t("trading-assistant.tabs.tradingRecords")}},[a("trading-records",{attrs:{"strategy-id":e.selectedStrategy.id,loading:e.loadingRecords}})],1)],1)],1)],1):a("div",{staticClass:"empty-detail"},[a("a-empty",{attrs:{description:e.$t("trading-assistant.selectStrategy")}})],1)])],1),a("a-modal",{attrs:{visible:e.showFormModal,title:e.editingStrategy?e.$t("trading-assistant.editStrategy"):e.$t("trading-assistant.createStrategy"),width:e.isMobile?"95%":1100,confirmLoading:e.saving,maskClosable:!1,wrapClassName:e.isMobile?"mobile-modal":"",bodyStyle:{maxHeight:"70vh",overflowY:"auto"}},on:{ok:e.handleSubmit,cancel:e.handleCloseModal}},[a("a-spin",{attrs:{spinning:e.loadingIndicators}},[e.editingStrategy?e._e():a("div",{staticClass:"creation-mode-toggle"},[a("a-radio-group",{attrs:{size:"small","button-style":"solid"},model:{value:e.creationMode,callback:function(t){e.creationMode=t},expression:"creationMode"}},[a("a-radio-button",{attrs:{value:"simple"}},[a("a-icon",{attrs:{type:"rocket"}}),e._v(" "+e._s(e.$t("trading-assistant.form.simpleMode"))+" ")],1),a("a-radio-button",{attrs:{value:"advanced"}},[a("a-icon",{attrs:{type:"setting"}}),e._v(" "+e._s(e.$t("trading-assistant.form.advancedMode"))+" ")],1)],1),a("span",{staticClass:"mode-hint"},[e._v(e._s(e.isSimpleMode?e.$t("trading-assistant.form.simpleModeHint"):e.$t("trading-assistant.form.advancedModeHint")))])],1),a("a-steps",{staticClass:"steps-container",attrs:{current:e.displayCurrentStep}},[a("a-step",{attrs:{title:e.isSimpleMode&&!e.editingStrategy?e.$t("trading-assistant.form.simpleStep1"):e.$t("trading-assistant.form.step1")}}),e.isAdvancedMode||e.editingStrategy?a("a-step",{attrs:{title:e.$t("trading-assistant.form.step2Params")}}):e._e(),a("a-step",{attrs:{title:e.isSimpleMode&&!e.editingStrategy?e.$t("trading-assistant.form.simpleStep2"):e.$t("trading-assistant.form.step3Signal")}})],1),a("div",{staticClass:"form-container"},[a("div",{directives:[{name:"show",rawName:"v-show",value:0===e.currentStep,expression:"currentStep === 0"}],staticClass:"step-content"},["indicator"===e.strategyType?a("div",[a("a-form",{attrs:{form:e.form,layout:"vertical"}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.indicator")}},[a("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["indicator_id",{rules:[{required:!0,message:e.$t("trading-assistant.validation.indicatorRequired")}]}],expression:"['indicator_id', { rules: [{ required: true, message: $t('trading-assistant.validation.indicatorRequired') }] }]"}],attrs:{placeholder:e.$t("trading-assistant.placeholders.selectIndicator"),"show-search":"","filter-option":e.filterIndicatorOption,loading:e.loadingIndicators,getPopupContainer:function(t){return t.parentNode}},on:{focus:e.handleIndicatorSelectFocus,change:e.handleIndicatorChange}},e._l(e.availableIndicators,function(t){return a("a-select-option",{key:String(t.id),attrs:{value:String(t.id)}},[a("div",{staticClass:"indicator-option"},[a("span",{staticClass:"indicator-name"},[e._v(e._s(t.name))]),t.type?a("a-tag",{attrs:{size:"small",color:e.getIndicatorTypeColor(t.type)}},[e._v(" "+e._s(e.getIndicatorTypeName(t.type))+" ")]):e._e()],1)])}),1),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.indicatorHint"))+" ")])],1),e.selectedIndicator?a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.indicatorDescription")}},[a("div",{staticClass:"indicator-description"},[e._v(" "+e._s(e.selectedIndicator.description||e.$t("trading-assistant.form.noDescription"))+" ")])]):e._e(),e.indicatorParams.length>0?a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.indicatorParams")}},[a("div",{staticClass:"indicator-params-form"},[a("a-row",{attrs:{gutter:16}},e._l(e.indicatorParams,function(t){return a("a-col",{key:t.name,attrs:{xs:24,sm:12,md:8}},[a("div",{staticClass:"param-item"},[a("label",{staticClass:"param-label"},[e._v(" "+e._s(t.name)+" "),t.description?a("a-tooltip",{attrs:{title:t.description}},[a("a-icon",{staticStyle:{"margin-left":"4px",color:"#999"},attrs:{type:"question-circle"}})],1):e._e()],1),"int"===t.type?a("a-input-number",{staticStyle:{width:"100%"},attrs:{precision:0,size:"small"},model:{value:e.indicatorParamValues[t.name],callback:function(a){e.$set(e.indicatorParamValues,t.name,a)},expression:"indicatorParamValues[param.name]"}}):"float"===t.type?a("a-input-number",{staticStyle:{width:"100%"},attrs:{precision:4,size:"small"},model:{value:e.indicatorParamValues[t.name],callback:function(a){e.$set(e.indicatorParamValues,t.name,a)},expression:"indicatorParamValues[param.name]"}}):"bool"===t.type?a("a-switch",{attrs:{size:"small"},model:{value:e.indicatorParamValues[t.name],callback:function(a){e.$set(e.indicatorParamValues,t.name,a)},expression:"indicatorParamValues[param.name]"}}):a("a-input",{attrs:{size:"small"},model:{value:e.indicatorParamValues[t.name],callback:function(a){e.$set(e.indicatorParamValues,t.name,a)},expression:"indicatorParamValues[param.name]"}})],1)])}),1),a("div",{staticClass:"form-item-hint",staticStyle:{"margin-top":"8px"}},[e._v(" "+e._s(e.$t("trading-assistant.form.indicatorParamsHint"))+" ")])],1)]):e._e(),a("a-divider"),a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.strategyName")}},[a("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["strategy_name",{rules:[{required:!0,message:e.$t("trading-assistant.validation.strategyNameRequired")}]}],expression:"['strategy_name', { rules: [{ required: true, message: $t('trading-assistant.validation.strategyNameRequired') }] }]"}],attrs:{placeholder:e.$t("trading-assistant.placeholders.inputStrategyName")}})],1),e.isSimpleMode&&!e.editingStrategy?a("div",{staticClass:"simple-defaults-summary"},[a("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"info","show-icon":""},scopedSlots:e._u([{key:"message",fn:function(){return[a("span",[e._v(e._s(e.$t("trading-assistant.form.simpleDefaultsHint")))])]},proxy:!0},{key:"description",fn:function(){return[a("span",[e._v(" "+e._s(e.$t("trading-assistant.form.klinePeriod"))+": "),a("b",[e._v("15m")]),e._v(" · "+e._s(e.$t("trading-assistant.form.leverage"))+": "),a("b",[e._v("5x")]),e._v(" · "+e._s(e.$t("trading-assistant.form.marketType"))+": "),a("b",[e._v(e._s(e.$t("trading-assistant.form.marketTypeFutures")))]),e._v(" · "+e._s(e.$t("dashboard.indicator.backtest.field.stopLossPct"))+": "),a("b",[e._v("3%")]),e._v(" · "+e._s(e.$t("dashboard.indicator.backtest.field.takeProfitPct"))+": "),a("b",[e._v("6%")])])]},proxy:!0}],null,!1,39555864)}),a("a-button",{staticStyle:{padding:"0","margin-bottom":"12px"},attrs:{type:"link",size:"small"},on:{click:function(t){e.showAdvancedSettings=!e.showAdvancedSettings}}},[a("a-icon",{attrs:{type:e.showAdvancedSettings?"up":"down"}}),e._v(" "+e._s(e.showAdvancedSettings?e.$t("trading-assistant.form.hideAdvancedSettings"):e.$t("trading-assistant.form.showAdvancedSettings"))+" ")],1)],1):e._e(),a("div",{directives:[{name:"show",rawName:"v-show",value:e.isAdvancedMode||e.editingStrategy||e.showAdvancedSettings,expression:"isAdvancedMode || editingStrategy || showAdvancedSettings"}]},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.strategyType")}},[a("a-radio-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["cs_strategy_type",{initialValue:"single"}],expression:"['cs_strategy_type', { initialValue: 'single' }]"}],on:{change:e.handleStrategyTypeChange}},[a("a-radio",{attrs:{value:"single"}},[e._v(e._s(e.$t("trading-assistant.form.strategyTypeSingle")))]),a("a-radio",{attrs:{value:"cross_sectional"}},[e._v(e._s(e.$t("trading-assistant.form.strategyTypeCrossSectional")))])],1),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.strategyTypeHint"))+" ")])],1)],1),"cross_sectional"===e.form.getFieldValue("cs_strategy_type")?[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.symbolList")}},[a("a-select",{attrs:{mode:"multiple",placeholder:e.$t("trading-assistant.placeholders.selectSymbols"),"show-search":"","filter-option":e.filterWatchlistOptionWithAdd,loading:e.loadingWatchlist,getPopupContainer:function(t){return t.parentNode},maxTagCount:5},on:{change:e.handleCrossSectionalSymbolChange},model:{value:e.crossSectionalSymbols,callback:function(t){e.crossSectionalSymbols=t},expression:"crossSectionalSymbols"}},[e._l(e.watchlist,function(t){return a("a-select-option",{key:"".concat(t.market,":").concat(t.symbol),attrs:{value:"".concat(t.market,":").concat(t.symbol)}},[a("div",{staticClass:"symbol-option"},[a("a-tag",{staticStyle:{"margin-right":"8px","margin-bottom":"0"},attrs:{color:e.getMarketColor(t.market)}},[e._v(" "+e._s(t.market)+" ")]),a("span",{staticClass:"symbol-name"},[e._v(e._s(t.symbol))]),t.name?a("span",{staticClass:"symbol-name-extra"},[e._v(e._s(t.name))]):e._e()],1)])}),a("a-select-option",{key:"__add_symbol_option__",staticClass:"add-symbol-option",attrs:{value:"__add_symbol_option__"}},[a("div",{staticStyle:{width:"100%","text-align":"center",padding:"4px 0",color:"#1890ff",cursor:"pointer"}},[a("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"plus"}}),a("span",[e._v(e._s(e.$t("trading-assistant.form.addSymbol")))])],1)])],2),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.symbolListHint"))+" ")])],1),a("a-row",{attrs:{gutter:16}},[a("a-col",{attrs:{xs:24,sm:12}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.portfolioSize")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["portfolio_size",{initialValue:10,rules:[{required:!0,message:e.$t("trading-assistant.validation.portfolioSizeRequired")}]}],expression:"['portfolio_size', { initialValue: 10, rules: [{ required: true, message: $t('trading-assistant.validation.portfolioSizeRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:100,step:1}}),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.portfolioSizeHint"))+" ")])],1)],1),a("a-col",{attrs:{xs:24,sm:12}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.longRatio")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["long_ratio",{initialValue:.5,rules:[{required:!0,message:e.$t("trading-assistant.validation.longRatioRequired")}]}],expression:"['long_ratio', { initialValue: 0.5, rules: [{ required: true, message: $t('trading-assistant.validation.longRatioRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:1,step:.1,precision:2}}),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.longRatioHint"))+" ")])],1)],1)],1),a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.rebalanceFrequency")}},[a("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["rebalance_frequency",{initialValue:"daily"}],expression:"['rebalance_frequency', { initialValue: 'daily' }]"}],staticStyle:{width:"100%"}},[a("a-select-option",{attrs:{value:"daily"}},[e._v(e._s(e.$t("trading-assistant.form.rebalanceDaily")))]),a("a-select-option",{attrs:{value:"weekly"}},[e._v(e._s(e.$t("trading-assistant.form.rebalanceWeekly")))]),a("a-select-option",{attrs:{value:"monthly"}},[e._v(e._s(e.$t("trading-assistant.form.rebalanceMonthly")))])],1),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.rebalanceFrequencyHint"))+" ")])],1)]:e._e(),"cross_sectional"!==e.form.getFieldValue("cs_strategy_type")?a("a-form-item",{attrs:{label:e.isEditMode?e.$t("trading-assistant.form.symbol"):e.$t("trading-assistant.form.symbols")}},[e.isEditMode?a("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["symbol",{rules:[{required:!0,message:e.$t("trading-assistant.validation.symbolRequired")}]}],expression:"['symbol', { rules: [{ required: true, message: $t('trading-assistant.validation.symbolRequired') }] }]"}],attrs:{placeholder:e.$t("trading-assistant.placeholders.selectSymbol"),"show-search":"","filter-option":e.filterWatchlistOption,loading:e.loadingWatchlist,getPopupContainer:function(t){return t.parentNode}},on:{change:e.handleWatchlistSymbolChange}},[e._l(e.watchlist,function(t){return a("a-select-option",{key:"".concat(t.market,":").concat(t.symbol),attrs:{value:"".concat(t.market,":").concat(t.symbol)}},[a("div",{staticClass:"symbol-option"},[a("a-tag",{staticStyle:{"margin-right":"8px","margin-bottom":"0"},attrs:{color:e.getMarketColor(t.market)}},[e._v(" "+e._s(t.market)+" ")]),a("span",{staticClass:"symbol-name"},[e._v(e._s(t.symbol))]),t.name?a("span",{staticClass:"symbol-name-extra"},[e._v(e._s(t.name))]):e._e()],1)])}),a("a-select-option",{key:"__add_symbol_option__",staticClass:"add-symbol-option",attrs:{value:"__add_symbol_option__"}},[a("div",{staticStyle:{width:"100%","text-align":"center",padding:"4px 0",color:"#1890ff",cursor:"pointer"}},[a("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"plus"}}),a("span",[e._v(e._s(e.$t("trading-assistant.form.addSymbol")))])],1)])],2):a("a-select",{attrs:{mode:"multiple",placeholder:e.$t("trading-assistant.placeholders.selectSymbols"),"show-search":"","filter-option":e.filterWatchlistOptionWithAdd,loading:e.loadingWatchlist,getPopupContainer:function(t){return t.parentNode},maxTagCount:3},on:{change:e.handleMultiSymbolChangeWithAdd},model:{value:e.selectedSymbols,callback:function(t){e.selectedSymbols=t},expression:"selectedSymbols"}},[e._l(e.watchlist,function(t){return a("a-select-option",{key:"".concat(t.market,":").concat(t.symbol),attrs:{value:"".concat(t.market,":").concat(t.symbol)}},[a("div",{staticClass:"symbol-option"},[a("a-tag",{staticStyle:{"margin-right":"8px","margin-bottom":"0"},attrs:{color:e.getMarketColor(t.market)}},[e._v(" "+e._s(t.market)+" ")]),a("span",{staticClass:"symbol-name"},[e._v(e._s(t.symbol))]),t.name?a("span",{staticClass:"symbol-name-extra"},[e._v(e._s(t.name))]):e._e()],1)])}),a("a-select-option",{key:"__add_symbol_option__",staticClass:"add-symbol-option",attrs:{value:"__add_symbol_option__"}},[a("div",{staticStyle:{width:"100%","text-align":"center",padding:"4px 0",color:"#1890ff",cursor:"pointer"}},[a("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"plus"}}),a("span",[e._v(e._s(e.$t("trading-assistant.form.addSymbol")))])],1)])],2),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.isEditMode?e.$t("trading-assistant.form.symbolHintCrypto"):e.$t("trading-assistant.form.symbolsHint"))+" ")])],1):e._e(),a("div",{directives:[{name:"show",rawName:"v-show",value:e.isAdvancedMode||e.editingStrategy||e.showAdvancedSettings,expression:"isAdvancedMode || editingStrategy || showAdvancedSettings"}]},[a("a-row",{attrs:{gutter:16}},[a("a-col",{attrs:{xs:24,sm:24,md:12,lg:12}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.initialCapital")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["initial_capital",{rules:[{required:!0,message:e.$t("trading-assistant.validation.initialCapitalRequired")}],initialValue:1e3}],expression:"['initial_capital', { rules: [{ required: true, message: $t('trading-assistant.validation.initialCapitalRequired') }], initialValue: 1000 }]"}],staticStyle:{width:"100%"},attrs:{min:10,step:100,precision:2}})],1)],1),a("a-col",{attrs:{xs:24,sm:24,md:12,lg:12}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.marketType")}},[a("a-radio-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["market_type",{initialValue:"swap"}],expression:"['market_type', { initialValue: 'swap' }]"}],on:{change:e.handleMarketTypeChange}},[a("a-radio",{attrs:{value:"swap"}},[e._v(e._s(e.$t("trading-assistant.form.marketTypeFutures")))]),a("a-radio",{attrs:{value:"spot"}},[e._v(e._s(e.$t("trading-assistant.form.marketTypeSpot")))])],1),a("div",{staticClass:"form-item-hint"},[e._v(" "+e._s(e.$t("trading-assistant.form.marketTypeHint"))+" ")])],1)],1)],1),a("a-row",{attrs:{gutter:16}},[a("a-col",{attrs:{xs:24,sm:24,md:12,lg:12}},[a("a-form-item",{attrs:{label:"".concat(e.$t("trading-assistant.form.leverage")," (x)")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["leverage",{initialValue:5,rules:[{required:!0,message:e.$t("trading-assistant.validation.leverageRequired")}]}],expression:"['leverage', { initialValue: 5, rules: [{ required: true, message: $t('trading-assistant.validation.leverageRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:"spot"===e.form.getFieldValue("market_type")?1:125,step:1,disabled:"spot"===e.form.getFieldValue("market_type")}}),a("div",{staticClass:"form-item-hint"},["spot"===e.form.getFieldValue("market_type")?a("span",[e._v(" "+e._s(e.$t("trading-assistant.form.spotLeverageFixed"))+" ")]):a("span",[e._v(" "+e._s(e.$t("trading-assistant.form.leverageHint"))+" ")])])],1)],1),a("a-col",{attrs:{xs:24,sm:24,md:12,lg:12}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.tradeDirection")}},[a("a-radio-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["trade_direction",{initialValue:"long"}],expression:"['trade_direction', { initialValue: 'long' }]"}],attrs:{disabled:"spot"===e.form.getFieldValue("market_type")}},[a("a-radio",{attrs:{value:"long"}},[e._v(e._s(e.$t("trading-assistant.form.tradeDirectionLong")))]),a("a-radio",{attrs:{value:"short",disabled:"spot"===e.form.getFieldValue("market_type")}},[e._v(" "+e._s(e.$t("trading-assistant.form.tradeDirectionShort"))+" ")]),a("a-radio",{attrs:{value:"both",disabled:"spot"===e.form.getFieldValue("market_type")}},[e._v(" "+e._s(e.$t("trading-assistant.form.tradeDirectionBoth"))+" ")])],1),"spot"===e.form.getFieldValue("market_type")?a("div",{staticClass:"form-item-hint",staticStyle:{color:"#ff9800"}},[e._v(" "+e._s(e.$t("trading-assistant.form.spotOnlyLongHint"))+" ")]):e._e()],1)],1)],1),a("a-row",{attrs:{gutter:16}},[a("a-col",{attrs:{xs:24,sm:24,md:12,lg:12}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.klinePeriod")}},[a("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["timeframe",{initialValue:"15m",rules:[{required:!0}]}],expression:"['timeframe', { initialValue: '15m', rules: [{ required: true }] }]"}],attrs:{placeholder:e.$t("trading-assistant.placeholders.selectKlinePeriod"),getPopupContainer:function(t){return t.parentNode}}},[a("a-select-option",{attrs:{value:"1m"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe1m")))]),a("a-select-option",{attrs:{value:"5m"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe5m")))]),a("a-select-option",{attrs:{value:"15m"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe15m")))]),a("a-select-option",{attrs:{value:"30m"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe30m")))]),a("a-select-option",{attrs:{value:"1H"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe1H")))]),a("a-select-option",{attrs:{value:"4H"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe4H")))]),a("a-select-option",{attrs:{value:"1D"}},[e._v(e._s(e.$t("trading-assistant.form.timeframe1D")))])],1)],1)],1),a("a-col",{attrs:{xs:24,sm:24,md:12,lg:12}})],1)],1)],2)],1):e._e()]),a("div",{directives:[{name:"show",rawName:"v-show",value:1===e.currentStep||e.isSimpleMode&&0===e.currentStep&&e.showAdvancedSettings,expression:"currentStep === 1 || (isSimpleMode && currentStep === 0 && showAdvancedSettings)"}],staticClass:"step-content"},["indicator"===e.strategyType?a("div",[a("a-form",{attrs:{form:e.form,layout:"vertical"}},[a("a-collapse",{staticStyle:{background:"#fafafa"},attrs:{bordered:!1},model:{value:e.backtestCollapseKeys,callback:function(t){e.backtestCollapseKeys=t},expression:"backtestCollapseKeys"}},[a("a-collapse-panel",{key:"risk",attrs:{header:e.$t("dashboard.indicator.backtest.panel.risk")}},[a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.stopLossPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["stop_loss_pct",{initialValue:3}],expression:"['stop_loss_pct', { initialValue: 3 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.01,precision:4}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.takeProfitPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["take_profit_pct",{initialValue:6}],expression:"['take_profit_pct', { initialValue: 6 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trailingEnabled")}},[a("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailing_enabled",{valuePropName:"checked",initialValue:!1}],expression:"['trailing_enabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:e.onTrailingToggle}})],1)],1),a("a-col",{attrs:{span:12}})],1),e.trailingEnabledUi?[a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trailingStopPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailing_stop_pct",{initialValue:0}],expression:"['trailing_stop_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.01,precision:4}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trailingActivationPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailing_activation_pct",{initialValue:0}],expression:"['trailing_activation_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1)]:e._e()],2),a("a-collapse-panel",{key:"scale",attrs:{header:e.$t("dashboard.indicator.backtest.panel.scale")}},[a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendAddEnabled")}},[a("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_add_enabled",{valuePropName:"checked",initialValue:!1}],expression:"['trend_add_enabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:e.onTrendAddToggle}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.dcaAddEnabled")}},[a("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["dca_add_enabled",{valuePropName:"checked",initialValue:!1}],expression:"['dca_add_enabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:e.onDcaAddToggle}})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendAddStepPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_add_step_pct",{initialValue:0}],expression:"['trend_add_step_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4},on:{change:e.onScaleParamsChange}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.dcaAddStepPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dca_add_step_pct",{initialValue:0}],expression:"['dca_add_step_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4},on:{change:e.onScaleParamsChange}})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendAddSizePct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_add_size_pct",{initialValue:0}],expression:"['trend_add_size_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4},on:{change:e.onScaleParamsChange}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.dcaAddSizePct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dca_add_size_pct",{initialValue:0}],expression:"['dca_add_size_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4},on:{change:e.onScaleParamsChange}})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendAddMaxTimes")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_add_max_times",{initialValue:0}],expression:"['trend_add_max_times', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:50,step:1,precision:0},on:{change:e.onScaleParamsChange}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.dcaAddMaxTimes")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dca_add_max_times",{initialValue:0}],expression:"['dca_add_max_times', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:50,step:1,precision:0},on:{change:e.onScaleParamsChange}})],1)],1)],1)],1),a("a-collapse-panel",{key:"reduce",attrs:{header:e.$t("dashboard.indicator.backtest.panel.reduce")}},[a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendReduceEnabled")}},[a("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_reduce_enabled",{valuePropName:"checked",initialValue:!1}],expression:"['trend_reduce_enabled', { valuePropName: 'checked', initialValue: false }]"}]})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.adverseReduceEnabled")}},[a("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverse_reduce_enabled",{valuePropName:"checked",initialValue:!1}],expression:"['adverse_reduce_enabled', { valuePropName: 'checked', initialValue: false }]"}]})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendReduceStepPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_reduce_step_pct",{initialValue:0}],expression:"['trend_reduce_step_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.adverseReduceStepPct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverse_reduce_step_pct",{initialValue:0}],expression:"['adverse_reduce_step_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendReduceSizePct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_reduce_size_pct",{initialValue:0}],expression:"['trend_reduce_size_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.adverseReduceSizePct")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverse_reduce_size_pct",{initialValue:0}],expression:"['adverse_reduce_size_pct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4}})],1)],1)],1),a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.trendReduceMaxTimes")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trend_reduce_max_times",{initialValue:0}],expression:"['trend_reduce_max_times', { initialValue: 0 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:50,step:1,precision:0}})],1)],1),a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.adverseReduceMaxTimes")}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverse_reduce_max_times",{initialValue:0}],expression:"['adverse_reduce_max_times', { initialValue: 0 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:50,step:1,precision:0}})],1)],1)],1)],1),a("a-collapse-panel",{key:"position",attrs:{header:e.$t("dashboard.indicator.backtest.panel.position")}},[a("a-row",{attrs:{gutter:24}},[a("a-col",{attrs:{span:12}},[a("a-form-item",{attrs:{label:e.$t("dashboard.indicator.backtest.field.entryPct"),help:e.$t("dashboard.indicator.backtest.hint.entryPctMax",{maxPct:Number(e.entryPctMaxUi||0).toFixed(0)})}},[a("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["entry_pct",{initialValue:100}],expression:"['entry_pct', { initialValue: 100 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:e.entryPctMaxUi,step:.1,precision:4},on:{change:e.onEntryPctChange}})],1)],1),a("a-col",{attrs:{span:12}})],1)],1)],1),a("div",{staticClass:"ai-filter-box"},[a("div",{staticClass:"ai-filter-header"},[a("div",{staticClass:"ai-filter-title"},[a("a-icon",{attrs:{type:"robot"}}),a("span",[e._v(e._s(e.$t("trading-assistant.form.enableAiFilter")))])],1),a("a-switch",{attrs:{checked:e.aiFilterEnabledUi},on:{change:e.onAiFilterToggle}})],1),a("div",{staticClass:"ai-filter-hint"},[e._v(e._s(e.$t("trading-assistant.form.enableAiFilterHint")))])])],1)],1):e._e()]),a("div",{directives:[{name:"show",rawName:"v-show",value:2===e.currentStep,expression:"currentStep === 2"}],staticClass:"step-content"},[a("a-form",{attrs:{form:e.form,layout:"vertical",autocomplete:"off"}},[a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.executionMode")}},[a("a-radio-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["execution_mode",{initialValue:"signal"}],expression:"['execution_mode', { initialValue: 'signal' }]"}],attrs:{disabled:!e.canUseLiveTrading},on:{change:e.onExecutionModeChange}},[a("a-radio",{attrs:{value:"signal"}},[e._v(e._s(e.$t("trading-assistant.form.executionModeSignal")))]),a("a-radio",{attrs:{value:"live",disabled:!e.canUseLiveTrading}},[e._v(e._s(e.$t("trading-assistant.form.executionModeLive")))])],1),e.canUseLiveTrading?e._e():a("div",{staticClass:"form-item-hint",staticStyle:{color:"#ff9800"}},[e._v(" "+e._s(e.$t("trading-assistant.form.liveTradingNotSupportedHint"))+" ")])],1),"live"===e.executionModeUi&&e.canUseLiveTrading?a("a-form-item",{staticClass:"live-disclaimer-item"},[a("a-alert",{staticStyle:{"margin-bottom":"8px"},attrs:{type:"warning",showIcon:"",message:e.$t("trading-assistant.liveDisclaimer.title"),description:e.$t("trading-assistant.liveDisclaimer.content")}}),a("a-checkbox",{directives:[{name:"decorator",rawName:"v-decorator",value:["live_disclaimer_ack",{valuePropName:"checked",initialValue:!1}],expression:"['live_disclaimer_ack', { valuePropName: 'checked', initialValue: false }]"}],on:{change:e.onLiveDisclaimerAckChange}},[e._v(" "+e._s(e.$t("trading-assistant.liveDisclaimer.agree"))+" ")])],1):e._e(),a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.notifyChannels")}},[a("a-checkbox-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["notify_channels",{initialValue:["browser"]}],expression:"['notify_channels', { initialValue: ['browser'] }]"}],on:{change:e.onNotifyChannelsChange}},[a("a-checkbox",{attrs:{value:"browser"}},[e._v(e._s(e.$t("trading-assistant.notify.browser")))]),a("a-checkbox",{attrs:{value:"email"}},[e._v(e._s(e.$t("trading-assistant.notify.email")))]),a("a-checkbox",{attrs:{value:"telegram"}},[e._v(e._s(e.$t("trading-assistant.notify.telegram")))]),a("a-checkbox",{attrs:{value:"discord"}},[e._v(e._s(e.$t("trading-assistant.notify.discord")))]),a("a-checkbox",{attrs:{value:"webhook"}},[e._v(e._s(e.$t("trading-assistant.notify.webhook")))]),a("a-checkbox",{attrs:{value:"phone"}},[e._v(e._s(e.$t("trading-assistant.notify.phone")))])],1),a("div",{staticClass:"form-item-hint"},[e._v(e._s(e.$t("trading-assistant.form.notifyChannelsHint")))])],1),e.unconfiguredChannels.length>0?a("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"warning",showIcon:""},scopedSlots:e._u([{key:"message",fn:function(){return[a("span",[e._v(" "+e._s(e.$t("trading-assistant.form.notificationConfigMissing",{channels:e.unconfiguredChannels.join(", ")}))+" "),a("router-link",{staticStyle:{"margin-left":"8px"},attrs:{to:"/profile"}},[a("a-icon",{attrs:{type:"setting"}}),e._v(" "+e._s(e.$t("trading-assistant.form.goToProfile"))+" ")],1)],1)]},proxy:!0}],null,!1,2930252607)}):e.notifyChannelsUi.length>0&&!e.notifyChannelsUi.includes("browser")||e.notifyChannelsUi.length>1?a("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"info",showIcon:""},scopedSlots:e._u([{key:"message",fn:function(){return[a("span",[e._v(" "+e._s(e.$t("trading-assistant.form.notificationFromProfile"))+" "),a("router-link",{staticStyle:{"margin-left":"8px"},attrs:{to:"/profile"}},[a("a-icon",{attrs:{type:"setting"}}),e._v(" "+e._s(e.$t("trading-assistant.form.goToProfile"))+" ")],1)],1)]},proxy:!0}])}):e._e(),"live"===e.executionModeUi&&e.canUseLiveTrading?a("a-divider"):e._e(),"live"===e.executionModeUi&&e.canUseLiveTrading&&!e.liveDisclaimerAckUi?a("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"warning",showIcon:"",message:e.$t("trading-assistant.liveDisclaimer.blockTitle"),description:e.$t("trading-assistant.liveDisclaimer.blockDesc")}}):e._e(),"live"===e.executionModeUi&&e.canUseLiveTrading&&e.liveDisclaimerAckUi?a("div",[a("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"info","show-icon":"",message:e.$t("trading-assistant.form.liveTradingConfigTitle"),description:e.$t("trading-assistant.form.liveTradingConfigHint")}}),a("a-form-item",{attrs:{label:e.$t("trading-assistant.form.savedCredential")}},[a("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["credential_id",{rules:[{required:!0,message:e.$t("profile.exchange.noCredentialHint")}],getValueFromEvent:function(t){return t||void 0}}],expression:"['credential_id', {\n rules: [{ required: true, message: $t('profile.exchange.noCredentialHint') }],\n getValueFromEvent: (val) => val || undefined\n }]"}],attrs:{placeholder:e.$t("trading-assistant.placeholders.selectSavedCredential"),"allow-clear":"","show-search":"","option-filter-prop":"children",loading:e.loadingExchangeCredentials},on:{change:e.handleCredentialSelectChange}},e._l(e.filteredExchangeCredentials,function(t){return a("a-select-option",{key:t.id,attrs:{value:t.id}},[e._v(" "+e._s(e.formatCredentialLabel(t))+" ")])}),1),a("div",{staticClass:"form-item-hint",staticStyle:{"margin-top":"6px"}},[a("router-link",{attrs:{to:"/profile?tab=exchange"}},[a("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"setting"}}),e._v(e._s(e.$t("profile.exchange.goToManage"))+" ")],1)],1)],1)],1):e._e()],1)],1)])],1),a("template",{slot:"footer"},[a("a-button",{on:{click:e.handleCloseModal}},[e._v(e._s(e.$t("trading-assistant.form.cancel")))]),a("a-button",{directives:[{name:"show",rawName:"v-show",value:e.currentStep>0,expression:"currentStep > 0"}],on:{click:e.handlePrev}},[e._v(" "+e._s(e.$t("trading-assistant.form.prev"))+" ")]),a("a-button",{directives:[{name:"show",rawName:"v-show",value:e.currentStep<2,expression:"currentStep < 2"}],attrs:{type:"primary",loading:e.saving},on:{click:e.handleNext}},[e._v(" "+e._s(e.$t("trading-assistant.form.next"))+" ")]),a("a-button",{directives:[{name:"show",rawName:"v-show",value:2===e.currentStep,expression:"currentStep === 2"}],attrs:{type:"primary",loading:e.saving},on:{click:e.handleSubmit}},[e._v(" "+e._s(e.editingStrategy?e.$t("trading-assistant.form.confirmEdit"):e.$t("trading-assistant.form.confirmCreate"))+" ")])],1)],2),a("a-modal",{attrs:{title:e.$t("trading-assistant.form.addSymbolTitle"),visible:e.showAddSymbolModal,confirmLoading:e.addingSymbol,width:"600px",okText:e.$t("trading-assistant.form.confirmAdd"),cancelText:e.$t("trading-assistant.form.cancel"),maskClosable:!1,keyboard:!1},on:{ok:e.handleConfirmAddSymbol,cancel:e.handleCloseAddSymbolModal}},[a("div",{staticClass:"add-symbol-modal-content"},[a("a-tabs",{staticClass:"market-tabs",on:{change:e.handleAddSymbolMarketChange},model:{value:e.addSymbolMarket,callback:function(t){e.addSymbolMarket=t},expression:"addSymbolMarket"}},e._l(e.addSymbolMarketTypes,function(t){return a("a-tab-pane",{key:t.value,attrs:{tab:e.$t(t.i18nKey||"dashboard.analysis.market.".concat(t.value))}})}),1),a("div",{staticClass:"symbol-search-section"},[a("a-input-search",{attrs:{placeholder:e.$t("dashboard.analysis.modal.addStock.searchOrInputPlaceholder"),loading:e.searchingSymbol,size:"large","allow-clear":""},on:{search:e.handleSearchSymbol,change:e.handleSymbolSearchInputChange},model:{value:e.addSymbolKeyword,callback:function(t){e.addSymbolKeyword=t},expression:"addSymbolKeyword"}},[a("a-button",{attrs:{slot:"enterButton",type:"primary",icon:"search"},slot:"enterButton"},[e._v(" "+e._s(e.$t("dashboard.analysis.modal.addStock.search"))+" ")])],1)],1),e.symbolSearchResults.length>0?a("div",{staticClass:"search-results-section"},[a("div",{staticClass:"section-title"},[a("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"search"}}),e._v(" "+e._s(e.$t("dashboard.analysis.modal.addStock.searchResults"))+" ")],1),a("a-list",{staticClass:"symbol-list",attrs:{"data-source":e.symbolSearchResults,loading:e.searchingSymbol,size:"small"},scopedSlots:e._u([{key:"renderItem",fn:function(t){return a("a-list-item",{staticClass:"symbol-list-item",on:{click:function(a){return e.handleSelectAddSymbol(t)}}},[a("a-list-item-meta",[a("template",{slot:"title"},[a("div",{staticClass:"symbol-item-content"},[a("span",{staticClass:"symbol-code"},[e._v(e._s(t.symbol))]),a("span",{staticClass:"symbol-name"},[e._v(e._s(t.name))]),t.exchange?a("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"blue"}},[e._v(" "+e._s(t.exchange)+" ")]):e._e()],1)])],2)],1)}}],null,!1,2801225082)})],1):e._e(),a("div",{staticClass:"hot-symbols-section"},[a("div",{staticClass:"section-title"},[a("a-icon",{staticStyle:{color:"#ff4d4f","margin-right":"4px"},attrs:{type:"fire"}}),e._v(" "+e._s(e.$t("dashboard.analysis.modal.addStock.hotSymbols"))+" ")],1),a("a-spin",{attrs:{spinning:e.loadingHotSymbols}},[e.hotSymbols.length>0?a("a-list",{staticClass:"symbol-list",attrs:{"data-source":e.hotSymbols,size:"small"},scopedSlots:e._u([{key:"renderItem",fn:function(t){return a("a-list-item",{staticClass:"symbol-list-item",on:{click:function(a){return e.handleSelectAddSymbol(t)}}},[a("a-list-item-meta",[a("template",{slot:"title"},[a("div",{staticClass:"symbol-item-content"},[a("span",{staticClass:"symbol-code"},[e._v(e._s(t.symbol))]),a("span",{staticClass:"symbol-name"},[e._v(e._s(t.name))]),t.exchange?a("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"orange"}},[e._v(" "+e._s(t.exchange)+" ")]):e._e()],1)])],2)],1)}}],null,!1,3959834868)}):a("a-empty",{attrs:{description:e.$t("dashboard.analysis.modal.addStock.noHotSymbols"),image:!1}})],1)],1),e.selectedAddSymbol?a("div",{staticClass:"selected-symbol-section"},[a("div",{staticClass:"section-title"},[a("a-icon",{staticStyle:{color:"#52c41a","margin-right":"4px"},attrs:{type:"check-circle"}}),e._v(" "+e._s(e.$t("dashboard.analysis.modal.addStock.selectedSymbol"))+" ")],1),a("div",{staticClass:"selected-symbol-info"},[a("a-tag",{staticStyle:{"margin-right":"8px"},attrs:{color:e.getMarketColor(e.addSymbolMarket)}},[e._v(e._s(e.addSymbolMarket))]),a("span",{staticClass:"symbol-code"},[e._v(e._s(e.selectedAddSymbol.symbol))]),e.selectedAddSymbol.name?a("span",{staticClass:"symbol-name"},[e._v(e._s(e.selectedAddSymbol.name))]):e._e()],1)]):e._e()],1)])],1)},s=[],r=a(15863),n=a(44735),o=a(81127),l=a(56252),d=a(2403),c=a(57532),u=a(76338),m=a(36911),g=a(35038),p=a(42430),h=a(84841),_=a(55434),y=a(75769),f=function(){var t=this,e=t._self._c;return e("div",{staticClass:"trading-records"},[0!==t.records.length||t.loading?e("a-table",{attrs:{columns:t.columns,"data-source":t.records,loading:t.loading,pagination:{pageSize:10},size:"small",rowKey:"id",scroll:{x:800}},scopedSlots:t._u([{key:"type",fn:function(a){return[e("a-tag",{attrs:{color:t.getTradeTypeColor(a)}},[t._v(" "+t._s(t.getTradeTypeText(a))+" ")])]}},{key:"price",fn:function(e){return[t._v(" $"+t._s(parseFloat(e).toFixed(4))+" ")]}},{key:"amount",fn:function(e){return[t._v(" "+t._s(parseFloat(e).toFixed(4))+" ")]}},{key:"value",fn:function(e){return[t._v(" $"+t._s(parseFloat(e).toFixed(2))+" ")]}},{key:"profit",fn:function(a,i){return[e("span",{style:{color:a>0?"#52c41a":a<0?"#f5222d":"#666"}},[t._v(" "+t._s(t.formatProfit(a,i))+" ")])]}},{key:"commission",fn:function(e){return[t._v(" "+t._s(t.formatCommission(e))+" ")]}},{key:"time",fn:function(e,a){return[t._v(" "+t._s(t.formatTime(a.created_at||e))+" ")]}}])}):e("div",{staticClass:"empty-state"},[e("a-empty",{attrs:{description:t.$t("trading-assistant.table.noPositions")}})],1)],1)},v=[],b={name:"TradingRecords",props:{strategyId:{type:Number,required:!0},loading:{type:Boolean,default:!1}},computed:{columns:function(){return[{title:this.$t("trading-assistant.table.time"),dataIndex:"created_at",key:"created_at",width:180,scopedSlots:{customRender:"time"}},{title:this.$t("dashboard.indicator.backtest.tradeType"),dataIndex:"type",key:"type",width:140,scopedSlots:{customRender:"type"}},{title:this.$t("trading-assistant.table.price"),dataIndex:"price",key:"price",width:120,scopedSlots:{customRender:"price"}},{title:this.$t("trading-assistant.table.amount"),dataIndex:"amount",key:"amount",width:120,scopedSlots:{customRender:"amount"}},{title:this.$t("trading-assistant.table.value"),dataIndex:"value",key:"value",width:120,scopedSlots:{customRender:"value"}},{title:this.$t("dashboard.indicator.backtest.profit"),dataIndex:"profit",key:"profit",width:120,scopedSlots:{customRender:"profit"}},{title:this.$t("trading-assistant.table.commission"),dataIndex:"commission",key:"commission",width:100,scopedSlots:{customRender:"commission"}}]}},data:function(){return{records:[]}},watch:{strategyId:{handler:function(t){t&&this.loadRecords()},immediate:!0}},methods:{loadRecords:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.strategyId){e.n=1;break}return e.a(2);case 1:return e.p=1,e.n=2,(0,m.tq)(t.strategyId);case 2:a=e.v,1===a.code?t.records=(a.data.trades||[]).map(function(t){return(0,u.A)((0,u.A)({},t),{},{time:t.created_at||t.time})}):t.$message.error(a.msg||t.$t("trading-assistant.messages.loadTradesFailed")),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.a(2)}},e,null,[[1,3]])}))()},formatTime:function(t){if(!t)return"--";try{var e;if("number"===typeof t){var a=t<1e12?1e3*t:t;e=new Date(a)}else{if("string"!==typeof t)return"--";if(/^\d+$/.test(t)){var i=parseInt(t,10),s=i<1e12?1e3*i:i;e=new Date(s)}else e=new Date(t)}if(isNaN(e.getTime()))return"--";var r=this.$i18n.locale||"zh-CN",n={"zh-CN":"zh-CN","zh-TW":"zh-TW","en-US":"en-US"};return e.toLocaleString(n[r]||"zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})}catch(o){return"--"}},getTradeTypeColor:function(t){var e={buy:"green",sell:"red",liquidation:"orange",open_long:"green",add_long:"cyan",close_long:"orange",close_long_stop:"red",close_long_profit:"lime",open_short:"red",add_short:"magenta",close_short:"blue",close_short_stop:"red",close_short_profit:"cyan"};return e[t]||"default"},getTradeTypeText:function(t){var e={buy:this.$t("dashboard.indicator.backtest.buy"),sell:this.$t("dashboard.indicator.backtest.sell"),liquidation:this.$t("dashboard.indicator.backtest.liquidation"),open_long:this.$t("dashboard.indicator.backtest.openLong"),add_long:this.$t("dashboard.indicator.backtest.addLong"),close_long:this.$t("dashboard.indicator.backtest.closeLong"),close_long_stop:this.$t("dashboard.indicator.backtest.closeLongStop"),close_long_profit:this.$t("dashboard.indicator.backtest.closeLongProfit"),open_short:this.$t("dashboard.indicator.backtest.openShort"),add_short:this.$t("dashboard.indicator.backtest.addShort"),close_short:this.$t("dashboard.indicator.backtest.closeShort"),close_short_stop:this.$t("dashboard.indicator.backtest.closeShortStop"),close_short_profit:this.$t("dashboard.indicator.backtest.closeShortProfit")};return e[t]||t},formatMoney:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"-";return"".concat(e,"$").concat(Math.abs(t).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}))},formatProfit:function(t,e){if(null===t||void 0===t)return"--";var a=parseFloat(t),i=["open_long","open_short","add_long","add_short"];return 0===a&&e&&i.includes(e.type)?"--":Math.abs(a)<1e-6?e&&i.includes(e.type)?"--":"$0.00":this.formatMoney(a)},formatCommission:function(t){if(null===t||void 0===t)return"--";var e=parseFloat(t);return isNaN(e)||Math.abs(e)<1e-6?"--":"$".concat(e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:6}))}}},S=b,k=a(845),x=(0,k.A)(S,f,v,!1,null,"a5bdef7e",null),C=x.exports,w=function(){var t=this,e=t._self._c;return e("div",{staticClass:"position-records"},[0!==t.positions.length||t.loading?e("a-table",{attrs:{columns:t.columns,"data-source":t.positions,loading:t.loading,pagination:!1,size:"small",rowKey:"id",scroll:{x:800}},scopedSlots:t._u([{key:"symbol",fn:function(a,i){return[e("strong",[t._v(t._s(i.symbol||a))])]}},{key:"side",fn:function(a,i){return[e("a-tag",{attrs:{color:"long"===(i.side||a)?"green":"red"}},[t._v(" "+t._s("long"===(i.side||a)?t.$t("trading-assistant.table.long"):t.$t("trading-assistant.table.short"))+" ")])]}},{key:"entryPrice",fn:function(a,i){return[t.hasValidPrice(i.entry_price||a)?e("span",[t._v(" $"+t._s(parseFloat(i.entry_price||a).toFixed(4))+" ")]):e("span",[t._v("--")])]}},{key:"currentPrice",fn:function(e,a){return[t._v(" $"+t._s(parseFloat(a.current_price||e||0).toFixed(4))+" ")]}},{key:"size",fn:function(e,a){return[t._v(" "+t._s(parseFloat(a.size||e||0).toFixed(4))+" ")]}},{key:"unrealizedPnl",fn:function(a,i){return[e("span",{class:{profit:parseFloat(i.unrealized_pnl||a||0)>0,loss:parseFloat(i.unrealized_pnl||a||0)<0}},[t._v(" $"+t._s(parseFloat(i.unrealized_pnl||a||0).toFixed(2))+" ")])]}},{key:"pnlPercent",fn:function(a,i){return[e("span",{class:{profit:parseFloat(i.pnl_percent||a||0)>0,loss:parseFloat(i.pnl_percent||a||0)<0}},[t._v(" "+t._s(parseFloat(i.pnl_percent||a||0).toFixed(2))+"% ")])]}}])}):e("div",{staticClass:"empty-state"},[e("a-empty",{attrs:{description:t.$t("trading-assistant.table.noPositions")}})],1)],1)},$=[],A={name:"PositionRecords",props:{strategyId:{type:Number,required:!0},marketType:{type:String,default:"swap"},leverage:{type:[Number,String],default:1},loading:{type:Boolean,default:!1}},data:function(){return{positions:[]}},computed:{columns:function(){return[{title:this.$t("trading-assistant.table.symbol"),dataIndex:"symbol",key:"symbol",width:120,scopedSlots:{customRender:"symbol"}},{title:this.$t("trading-assistant.table.side"),dataIndex:"side",key:"side",width:80,scopedSlots:{customRender:"side"}},{title:this.$t("trading-assistant.table.size"),dataIndex:"size",key:"size",width:120,scopedSlots:{customRender:"size"}},{title:this.$t("trading-assistant.table.entryPrice"),dataIndex:"entry_price",key:"entry_price",width:120,scopedSlots:{customRender:"entryPrice"}},{title:this.$t("trading-assistant.table.currentPrice"),dataIndex:"current_price",key:"current_price",width:120,scopedSlots:{customRender:"currentPrice"}},{title:this.$t("trading-assistant.table.unrealizedPnl"),dataIndex:"unrealized_pnl",key:"unrealized_pnl",width:120,scopedSlots:{customRender:"unrealizedPnl"}},{title:this.$t("trading-assistant.table.pnlPercent"),dataIndex:"pnl_percent",key:"pnl_percent",width:100,scopedSlots:{customRender:"pnlPercent"}}]}},watch:{strategyId:{handler:function(t){t?(this.loadPositions(),this.startPolling()):this.stopPolling()},immediate:!0}},beforeDestroy:function(){this.stopPolling()},methods:{loadPositions:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a,i;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.strategyId){e.n=1;break}return e.a(2);case 1:return e.p=1,e.n=2,(0,m.oK)(t.strategyId);case 2:a=e.v,1===a.code?(i=a.data.positions||[],t.positions=i.map(function(e,a){var i=String(t.marketType||"swap").toLowerCase(),s=parseFloat(t.leverage);(!isFinite(s)||s<=0)&&(s=1),"spot"===i&&(s=1);var r=parseFloat(e.entry_price||e.entryPrice||0),n=parseFloat(e.size||"0")||0,o=parseFloat(e.unrealized_pnl||e.unrealizedPnl||"0")||0,l=parseFloat(e.pnl_percent||e.pnlPercent||"0")||0;r>0&&n>0?l=o/(r*n)*100*s:"spot"!==i&&(l*=s);var d={id:e.id||a,symbol:e.symbol||"",side:e.side||"long",size:n>0?n.toString():"0",entry_price:r>0?r.toString():"0",current_price:e.current_price||e.currentPrice||"0",unrealized_pnl:e.unrealized_pnl||e.unrealizedPnl||"0",pnl_percent:l,updated_at:e.updated_at||e.updatedAt||""};return d})):t.positions=[],e.n=4;break;case 3:e.p=3,e.v,t.positions=[];case 4:return e.a(2)}},e,null,[[1,3]])}))()},hasValidPrice:function(t){var e=parseFloat(t);return Number.isFinite(e)&&e>0},startPolling:function(){var t=this;this.stopPolling(),this.pollingTimer=setInterval(function(){t.loadPositions()},5e3)},stopPolling:function(){this.pollingTimer&&(clearInterval(this.pollingTimer),this.pollingTimer=null)}}},P=A,M=(0,k.A)(P,w,$,!1,null,"2abcf4f1",null),F=M.exports,T=["BTC/USDT","ETH/USDT","BNB/USDT","SOL/USDT","ADA/USDT","XRP/USDT","DOGE/USDT","DOT/USDT","MATIC/USDT","AVAX/USDT","LINK/USDT","UNI/USDT","LTC/USDT","ATOM/USDT","ETC/USDT"],V=[{value:"binance",labelKey:"binance"},{value:"okx",labelKey:"okx"},{value:"bitget",labelKey:"bitget"},{value:"bybit",labelKey:"bybit"},{value:"coinbaseexchange",labelKey:"coinbaseexchange"},{value:"kraken",labelKey:"kraken"},{value:"kucoin",labelKey:"kucoin"},{value:"gate",labelKey:"gate"},{value:"bitfinex",labelKey:"bitfinex"},{value:"deepcoin",labelKey:"deepcoin"}],I=[{value:"ibkr",labelKey:"ibkr",name:"Interactive Brokers"}],N=[{value:"mt5",labelKey:"mt5",name:"MetaTrader 5"}],U={name:"TradingAssistant",mixins:[_.t],components:{TradingRecords:C,PositionRecords:F},computed:{isAdvancedMode:function(){return"advanced"===this.creationMode},isSimpleMode:function(){return"simple"===this.creationMode},displayCurrentStep:function(){return this.isSimpleMode&&!this.editingStrategy?0===this.currentStep?0:1:this.currentStep},isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},needsPassphrase:function(){return["okx","okex","coinbaseexchange","kucoin","bitget","deepcoin"].includes(this.currentExchangeId)},isIBKRMarket:function(){return"USStock"===this.selectedMarketCategory},isMT5Market:function(){return"Forex"===this.selectedMarketCategory},isBrokerMarket:function(){return this.isIBKRMarket||this.isMT5Market},filteredExchangeCredentials:function(){var t=this;return this.exchangeCredentials&&Array.isArray(this.exchangeCredentials)?this.exchangeCredentials.filter(function(e){return t.isCredentialCompatible(e)}):[]},formattedExchangeOptions:function(){var t=this;return V.map(function(e){var a="";try{if(e.labelKey){var i="trading-assistant.exchangeNames.".concat(e.labelKey),s=t.$t(i);s!==i&&(a=s)}}catch(r){}return a||(a=e.value.charAt(0).toUpperCase()+e.value.slice(1)),(0,u.A)((0,u.A)({},e),{},{displayName:a})})},totalPnl:function(){return null!==this.currentEquity&&this.selectedStrategy&&this.selectedStrategy.initial_capital?this.currentEquity-(this.selectedStrategy.initial_capital||0):null},totalPnlPercent:function(){return null!==this.totalPnl&&this.selectedStrategy&&this.selectedStrategy.initial_capital?0===this.selectedStrategy.initial_capital?0:this.totalPnl/this.selectedStrategy.initial_capital*100:null},getEquityColorClass:function(){return null===this.totalPnl?"":this.totalPnl>=0?"text-success":"text-danger"},getPnlColorClass:function(){return null===this.totalPnl?"":this.totalPnl>=0?"text-success":"text-danger"},isCryptoMarket:function(){var t=this.selectedMarketCategory||"Crypto";return"crypto"===String(t).toLowerCase()},canUseLiveTrading:function(){var t=this.selectedMarketCategory||"Crypto";return"crypto"===String(t).toLowerCase()||("USStock"===t||"Forex"===t)},isLiveTradingAvailable:function(){var t=this.selectedMarketCategory||"Crypto",e=this.currentExchangeId||"";return"crypto"===String(t).toLowerCase()?["binance","okx","bitget","bybit","coinbaseexchange","kraken","kucoin","gate","bitfinex"].includes(e):"USStock"===t?"ibkr"===this.currentBrokerId:"Forex"===t&&"mt5"===this.currentBrokerId},showDemoTradingSwitch:function(){return this.currentExchangeId&&"binance"===this.currentExchangeId.toLowerCase()},brokerOptions:function(){var t=this;return I.map(function(e){var a="";try{var i="trading-assistant.brokerNames.".concat(e.labelKey),s=t.$t(i);s!==i&&(a=s)}catch(r){}return a||(a=e.name||e.value.toUpperCase()),(0,u.A)((0,u.A)({},e),{},{displayName:a})})},forexBrokerOptions:function(){var t=this;return N.map(function(e){var a="";try{var i="trading-assistant.brokerNames.".concat(e.labelKey),s=t.$t(i);s!==i&&(a=s)}catch(r){}return a||(a=e.name||e.value.toUpperCase()),(0,u.A)((0,u.A)({},e),{},{displayName:a})})},cryptoExchangeOptions:function(){var t=this;return V.map(function(e){var a="";try{if(e.labelKey){var i="trading-assistant.exchangeNames.".concat(e.labelKey),s=t.$t(i);s!==i&&(a=s)}}catch(r){}return a||(a=e.value.charAt(0).toUpperCase()+e.value.slice(1)),(0,u.A)((0,u.A)({},e),{},{displayName:a})})},groupedStrategies:function(){return"symbol"===this.groupByMode?this.groupedBySymbol:this.groupedByStrategy},groupedByStrategy:function(){var t,e={},a=[],i=(0,c.A)(this.strategies);try{for(i.s();!(t=i.n()).done;){var s=t.value,r=s.strategy_group_id;r&&r.trim()?(e[r]||(e[r]={id:r,baseName:s.group_base_name||s.strategy_name.split("-")[0],strategies:[],runningCount:0,stoppedCount:0}),e[r].strategies.push(s),"running"===s.status?e[r].runningCount++:e[r].stoppedCount++):a.push(s)}}catch(o){i.e(o)}finally{i.f()}var n=Object.values(e).sort(function(t,e){var a=Math.max.apply(Math,(0,d.A)(t.strategies.map(function(t){return t.created_at||0}))),i=Math.max.apply(Math,(0,d.A)(e.strategies.map(function(t){return t.created_at||0})));return i-a});return{groups:n,ungrouped:a}},groupedBySymbol:function(){var t,e={},a=[],i=(0,c.A)(this.strategies);try{for(i.s();!(t=i.n()).done;){var s=t.value,r=s.trading_config||{},n=r.symbol;if(n&&n.trim()){e[n]||(e[n]={id:"symbol_".concat(n),baseName:n,strategies:[],runningCount:0,stoppedCount:0});var o=(0,u.A)((0,u.A)({},s),{},{displayInfo:{strategyName:s.strategy_name||s.group_base_name||"Unnamed",timeframe:r.timeframe||"-",indicatorName:s.indicator_name||s.indicator_config&&s.indicator_config.name||"-"}});e[n].strategies.push(o),"running"===s.status?e[n].runningCount++:e[n].stoppedCount++}else a.push(s)}}catch(d){i.e(d)}finally{i.f()}var l=Object.values(e).sort(function(t,e){return t.baseName.localeCompare(e.baseName)});return{groups:l,ungrouped:a}},unconfiguredChannels:function(){var t=[];return this.notifyChannelsUi.includes("telegram")&&(this.userNotificationSettings.telegram_bot_token||this.userNotificationSettings.telegram_chat_id||t.push("Telegram")),this.notifyChannelsUi.includes("email")&&(this.userNotificationSettings.email||t.push("Email")),this.notifyChannelsUi.includes("discord")&&(this.userNotificationSettings.discord_webhook||t.push("Discord")),this.notifyChannelsUi.includes("webhook")&&(this.userNotificationSettings.webhook_url||t.push("Webhook")),t}},data:function(){return{loading:!1,loadingRecords:!1,strategies:[],selectedStrategy:null,showFormModal:!1,creationMode:"simple",showAdvancedSettings:!1,strategyType:"indicator",selectedMarketCategory:"Crypto",currentStep:0,saving:!1,loadingIndicators:!1,availableIndicators:[],selectedIndicator:null,indicatorParams:[],indicatorParamValues:{},cryptoSymbols:T,loadingWatchlist:!1,watchlist:[],exchangeOptions:V,currentExchangeId:"",currentBrokerId:"ibkr",connectionTestResult:null,indicatorsLoaded:!1,editingStrategy:null,currentEquity:null,equityPollingTimer:null,backtestCollapseKeys:["risk"],trailingEnabledUi:!1,entryPctMaxUi:100,aiFilterEnabledUi:!1,isEditMode:!1,supportedIPs:[],executionModeUi:"signal",liveDisclaimerAckUi:!1,notifyChannelsUi:["browser"],userNotificationSettings:{default_channels:["browser"],telegram_bot_token:"",telegram_chat_id:"",email:"",phone:"",discord_webhook:"",webhook_url:"",webhook_token:""},loadingExchangeCredentials:!1,exchangeCredentials:[],saveCredentialUi:!1,suppressApiClearOnce:!1,selectedSymbols:[],crossSectionalSymbols:[],collapsedGroups:{},groupByMode:"strategy",showAddSymbolModal:!1,addSymbolMarket:"Crypto",addSymbolMarketTypes:[{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}],addSymbolKeyword:"",searchingSymbol:!1,symbolSearchResults:[],selectedAddSymbol:null,hasSearchedSymbol:!1,addingSymbol:!1,hotSymbols:[],loadingHotSymbols:!1,searchTimer:null}},beforeCreate:function(){this.form=this.$form.createForm(this)},mounted:function(){this.loadStrategies(),this.loadUserNotificationSettings()},beforeDestroy:function(){this.stopEquityPolling()},methods:{loadUserNotificationSettings:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,h.vF)();case 1:a=e.v,1===a.code&&a.data&&(t.userNotificationSettings={default_channels:a.data.default_channels||["browser"],telegram_bot_token:a.data.telegram_bot_token||"",telegram_chat_id:a.data.telegram_chat_id||"",email:a.data.email||"",phone:a.data.phone||"",discord_webhook:a.data.discord_webhook||"",webhook_url:a.data.webhook_url||"",webhook_token:a.data.webhook_token||""}),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadWatchlist:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loadingWatchlist=!0,e.p=1,e.n=2,(0,g.Qo)({userid:1});case 2:a=e.v,a&&1===a.code?t.watchlist=Array.isArray(a.data)?a.data:[]:t.watchlist=[],e.n=4;break;case 3:e.p=3,e.v,t.watchlist=[];case 4:return e.p=4,t.loadingWatchlist=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleCloseAddSymbolModal:function(){this.showAddSymbolModal=!1,this.addSymbolKeyword="",this.symbolSearchResults=[],this.selectedAddSymbol=null,this.hasSearchedSymbol=!1},handleAddSymbolMarketChange:function(t){this.addSymbolMarket=t,this.addSymbolKeyword="",this.symbolSearchResults=[],this.selectedAddSymbol=null,this.hasSearchedSymbol=!1,this.loadHotSymbols(t)},handleSymbolSearchInputChange:function(t){var e=this,a=t.target.value;if(this.addSymbolKeyword=a,this.searchTimer&&clearTimeout(this.searchTimer),!a||""===a.trim())return this.symbolSearchResults=[],this.hasSearchedSymbol=!1,void(this.selectedAddSymbol=null);this.searchTimer=setTimeout(function(){e.searchSymbolsInModal(a)},500)},handleSearchSymbol:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){return(0,o.A)().w(function(a){while(1)switch(a.n){case 0:if(t&&t.trim()){a.n=1;break}return a.a(2);case 1:if(e.addSymbolMarket){a.n=2;break}return e.$message.warning(e.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),a.a(2);case 2:if(!(e.symbolSearchResults.length>0)){a.n=3;break}return a.a(2);case 3:e.hasSearchedSymbol&&0===e.symbolSearchResults.length?e.handleDirectAdd():e.searchSymbolsInModal(t);case 4:return a.a(2)}},a)}))()},searchSymbolsInModal:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var i;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(t&&""!==t.trim()){a.n=1;break}return e.symbolSearchResults=[],e.hasSearchedSymbol=!1,a.a(2);case 1:if(e.addSymbolMarket){a.n=2;break}return a.a(2);case 2:return e.searchingSymbol=!0,e.hasSearchedSymbol=!0,a.p=3,a.n=4,(0,g._3)({market:e.addSymbolMarket,keyword:t.trim()});case 4:i=a.v,i&&1===i.code&&Array.isArray(i.data)?e.symbolSearchResults=i.data:e.symbolSearchResults=[],a.n=6;break;case 5:a.p=5,a.v,e.symbolSearchResults=[];case 6:return a.p=6,e.searchingSymbol=!1,a.f(6);case 7:return a.a(2)}},a,null,[[3,5,6,7]])}))()},handleDirectAdd:function(){this.addSymbolKeyword&&this.addSymbolKeyword.trim()?this.addSymbolMarket?this.selectedAddSymbol={market:this.addSymbolMarket,symbol:this.addSymbolKeyword.trim().toUpperCase(),name:""}:this.$message.warning(this.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")):this.$message.warning(this.$t("dashboard.analysis.modal.addStock.pleaseEnterSymbol"))},handleSelectAddSymbol:function(t){this.selectedAddSymbol={market:this.addSymbolMarket,symbol:t.symbol,name:t.name||""}},loadHotSymbols:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var i;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(t||(t=e.addSymbolMarket||"Crypto"),t){a.n=1;break}return a.a(2);case 1:return e.loadingHotSymbols=!0,a.p=2,a.n=3,(0,g.z6)({market:t,limit:10});case 3:i=a.v,i&&1===i.code&&i.data?e.hotSymbols=i.data:e.hotSymbols=[],a.n=5;break;case 4:a.p=4,a.v,e.hotSymbols=[];case 5:return a.p=5,e.loadingHotSymbols=!1,a.f(5);case 6:return a.a(2)}},a,null,[[2,4,5,6]])}))()},handleConfirmAddSymbol:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a,i,s,r,n,l,c;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(a="",i="",!t.selectedAddSymbol){e.n=1;break}a=t.selectedAddSymbol.market,i=t.selectedAddSymbol.symbol.toUpperCase(),e.n=4;break;case 1:if(!t.addSymbolKeyword||!t.addSymbolKeyword.trim()){e.n=3;break}if(t.addSymbolMarket){e.n=2;break}return t.$message.warning(t.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),e.a(2);case 2:a=t.addSymbolMarket,i=t.addSymbolKeyword.trim().toUpperCase(),e.n=4;break;case 3:return t.$message.warning(t.$t("dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol")),e.a(2);case 4:return t.addingSymbol=!0,e.p=5,e.n=6,(0,g.dp)({userid:1,market:a,symbol:i});case 6:if(s=e.v,!s||1!==s.code){e.n=8;break}return t.$message.success(t.$t("dashboard.analysis.message.addStockSuccess")),e.n=7,t.loadWatchlist();case 7:r="".concat(a,":").concat(i),t.isEditMode?(t.form.setFieldsValue({symbol:r}),t.handleWatchlistSymbolChange(r)):(t.selectedSymbols.includes(r)||(t.selectedSymbols=[].concat((0,d.A)(t.selectedSymbols),[r])),t.handleMultiSymbolChange(t.selectedSymbols)),t.handleCloseAddSymbolModal(),e.n=9;break;case 8:t.$message.error((null===s||void 0===s?void 0:s.msg)||t.$t("dashboard.analysis.message.addStockFailed"));case 9:e.n=11;break;case 10:e.p=10,c=e.v,l=(null===c||void 0===c||null===(n=c.response)||void 0===n||null===(n=n.data)||void 0===n?void 0:n.msg)||(null===c||void 0===c?void 0:c.message)||t.$t("dashboard.analysis.message.addStockFailed"),t.$message.error(l);case 11:return e.p=11,t.addingSymbol=!1,e.f(11);case 12:return e.a(2)}},e,null,[[5,10,11,12]])}))()},filterWatchlistOption:function(t,e){var a,i=(null===(a=e.componentOptions)||void 0===a||null===(a=a.propsData)||void 0===a?void 0:a.value)||"";return"__add_symbol_option__"===i||String(i).toLowerCase().includes(String(t||"").toLowerCase())},filterWatchlistOptionWithAdd:function(t,e){var a,i=(null===(a=e.componentOptions)||void 0===a||null===(a=a.propsData)||void 0===a?void 0:a.value)||"";return"__add_symbol_option__"===i||String(i).toLowerCase().includes(String(t||"").toLowerCase())},handleMultiSymbolChangeWithAdd:function(t){if(t&&t.includes("__add_symbol_option__"))return this.selectedSymbols=t.filter(function(t){return"__add_symbol_option__"!==t}),this.showAddSymbolModal=!0,void this.loadHotSymbols(this.addSymbolMarket);this.handleMultiSymbolChange(t)},handleStrategyTypeChange:function(t){var e=t.target.value;"single"===e&&(this.crossSectionalSymbols=[])},handleCrossSectionalSymbolChange:function(t){if(t&&t.includes("__add_symbol_option__"))return this.crossSectionalSymbols=t.filter(function(t){return"__add_symbol_option__"!==t}),this.showAddSymbolModal=!0,void this.loadHotSymbols(this.addSymbolMarket);if(this.crossSectionalSymbols=t||[],t&&t.length>0){var e=t[0];if("string"===typeof e&&e.includes(":")){var a=e.indexOf(":"),i=e.slice(0,a);this.selectedMarketCategory=i||"Crypto"}}},getMarketColor:function(t){var e={USStock:"green",Crypto:"purple",Forex:"gold",Futures:"cyan"};return e[t]||"default"},handleWatchlistSymbolChange:function(t){var e=this;if("__add_symbol_option__"===t)return this.$nextTick(function(){e.form.setFieldsValue({symbol:void 0})}),this.showAddSymbolModal=!0,void this.loadHotSymbols(this.addSymbolMarket);if(t&&"string"===typeof t&&t.includes(":")){var a=t.indexOf(":"),i=t.slice(0,a);if(this.selectedMarketCategory=i||"Crypto","Forex"===this.selectedMarketCategory){this.currentBrokerId="mt5";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({forex_broker_id:"mt5"})}catch(r){}}else if("USStock"===this.selectedMarketCategory){this.currentBrokerId="ibkr";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({broker_id:"ibkr"})}catch(r){}}var s=["Crypto","USStock","Forex"].includes(this.selectedMarketCategory);if(!s){this.executionModeUi="signal";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({execution_mode:"signal"})}catch(r){}}this.currentExchangeId="";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({exchange_id:void 0})}catch(r){}}},handleMultiSymbolChange:function(t){if(this.selectedSymbols=t||[],t&&t.length>0){var e=t[0];if("string"===typeof e&&e.includes(":")){var a=e.indexOf(":"),i=e.slice(0,a);this.selectedMarketCategory=i||"Crypto"}}if("Forex"===this.selectedMarketCategory){this.currentBrokerId="mt5";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({forex_broker_id:"mt5"})}catch(r){}}else if("USStock"===this.selectedMarketCategory){this.currentBrokerId="ibkr";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({broker_id:"ibkr"})}catch(r){}}var s=["Crypto","USStock","Forex"].includes(this.selectedMarketCategory);if(!s){this.executionModeUi="signal";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({execution_mode:"signal"})}catch(r){}}this.currentExchangeId="";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({exchange_id:void 0})}catch(r){}},loadExchangeCredentials:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loadingExchangeCredentials=!0,e.p=1,e.n=2,(0,p.IA)({user_id:1});case 2:a=e.v,a&&1===a.code?t.exchangeCredentials=a.data&&a.data.items||[]:(t.exchangeCredentials=[],t.$message.warning((null===a||void 0===a?void 0:a.msg)||t.$t("trading-assistant.messages.loadFailed"))),e.n=4;break;case 3:e.p=3,e.v,t.exchangeCredentials=[],t.$message.warning(t.$t("trading-assistant.exchange.testFailed"));case 4:return e.p=4,t.loadingExchangeCredentials=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},formatCredentialLabel:function(t){if(!t)return"";var e=(t.name||"").trim(),a=t.exchange_id||"",i=t.api_key_hint||"";return e?"".concat(a.toUpperCase()," - ").concat(e," (").concat(i,")"):"".concat(a.toUpperCase()," (").concat(i,")")},isCredentialCompatible:function(t){if(!t||!t.exchange_id)return!0;var e=(t.exchange_id||"").toLowerCase(),a=this.selectedMarketCategory||"Crypto";if("mt5"===e)return"Forex"===a;if("ibkr"===e)return"USStock"===a;var i=["binance","okx","bitget","bybit","coinbaseexchange","kraken","kucoin","gate","bitfinex","deepcoin"];return!i.includes(e)||"Crypto"===a},handleCredentialSelectChange:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var i,s,r;return(0,o.A)().w(function(a){while(1)switch(a.n){case 0:if(t){a.n=1;break}return e.currentExchangeId="",e.connectionTestResult=null,a.a(2);case 1:if(i=e.exchangeCredentials.find(function(e){return String(e.id)===String(t)}),!i){a.n=5;break}if(s=(i.exchange_id||"").toLowerCase(),"mt5"!==s||"Forex"===e.selectedMarketCategory){a.n=2;break}e.$message.error(e.$t("trading-assistant.validation.mt5OnlyForForex"));try{e.form&&e.form.setFieldsValue&&e.form.setFieldsValue({credential_id:void 0})}catch(n){}return e.currentExchangeId="",e.connectionTestResult=null,a.a(2);case 2:if("ibkr"!==s||"USStock"===e.selectedMarketCategory){a.n=3;break}e.$message.error(e.$t("trading-assistant.validation.ibkrOnlyForUSStock"));try{e.form&&e.form.setFieldsValue&&e.form.setFieldsValue({credential_id:void 0})}catch(n){}return e.currentExchangeId="",e.connectionTestResult=null,a.a(2);case 3:if(r=["binance","okx","bitget","bybit","coinbaseexchange","kraken","kucoin","gate","bitfinex"],!r.includes(s)||"Crypto"===e.selectedMarketCategory){a.n=4;break}e.$message.error(e.$t("trading-assistant.validation.cryptoExchangeOnlyForCrypto"));try{e.form&&e.form.setFieldsValue&&e.form.setFieldsValue({credential_id:void 0})}catch(n){}return e.currentExchangeId="",e.connectionTestResult=null,a.a(2);case 4:e.currentExchangeId=i.exchange_id||"";case 5:e.connectionTestResult=null;case 6:return a.a(2)}},a)}))()},onSaveCredentialChange:function(t){var e=!!(t&&t.target&&t.target.checked);this.saveCredentialUi=e;try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({save_credential:e})}catch(a){}},onExecutionModeChange:function(t){var e=t&&t.target?t.target.value:t;this.executionModeUi=e||"signal",this.liveDisclaimerAckUi=!1;try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({live_disclaimer_ack:!1})}catch(a){}if(!this.canUseLiveTrading&&"signal"!==this.executionModeUi){this.executionModeUi="signal";try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({execution_mode:"signal"})}catch(a){}}},onLiveDisclaimerAckChange:function(t){var e=!!(t&&t.target&&t.target.checked);this.liveDisclaimerAckUi=e;try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({live_disclaimer_ack:e})}catch(a){}},onNotifyChannelsChange:function(t){this.notifyChannelsUi=Array.isArray(t)?t:[]},formatCurrency:function(t){return null===t||void 0===t?"-":"$"+t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})},formatPnl:function(t){if(null===t||void 0===t)return"-";var e=t>=0?"+":"";return e+"$"+Math.abs(t).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})},formatPnlPercent:function(t){if(null===t||void 0===t)return"-";var e=t>=0?"+":"";return e+Math.abs(t).toFixed(2)+"%"},loadStrategies:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a,i,s;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loading=!0,e.p=1,e.n=2,(0,m.EM)();case 2:a=e.v,1===a.code?(i=a.data.strategies||[],t.strategies=i,t.selectedStrategy&&(s=t.strategies.find(function(e){return e.id===t.selectedStrategy.id}),t.selectedStrategy=s||null)):t.$message.error(a.msg||t.$t("trading-assistant.messages.loadFailed")),e.n=4;break;case 3:e.p=3,e.v,t.$message.error(t.$t("trading-assistant.messages.loadFailed"));case 4:return e.p=4,t.loading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleCreateStrategy:function(){var t=this;this.isEditMode=!1,this.editingStrategy=null,this.strategyType="indicator",this.currentStep=0,this.currentExchangeId="",this.currentBrokerId="ibkr",this.selectedIndicator=null,this.connectionTestResult=null,this.executionModeUi="signal",this.notifyChannelsUi=["browser"],this.saveCredentialUi=!1,this.backtestCollapseKeys=["risk"],this.trailingEnabledUi=!1,this.entryPctMaxUi=100,this.aiFilterEnabledUi=!1,this.selectedMarketCategory="Crypto",this.selectedSymbols=[],this.showAdvancedSettings=!1,this.form.resetFields(),this.form.setFieldsValue({execution_mode:"signal",notify_channels:["browser"],save_credential:!1,live_disclaimer_ack:!1}),this.liveDisclaimerAckUi=!1,this.showFormModal=!0,this.$nextTick(function(){t.loadWatchlist(),t.loadIndicators(),t.loadExchangeCredentials()})},handleEditStrategy:function(t){var e=this;"running"!==t.status?(this.strategyType="indicator",this.isEditMode=!0,this.editingStrategy=t,this.currentStep=0,this.currentExchangeId="",this.selectedIndicator=null,this.connectionTestResult=null,this.form.resetFields(),this.backtestCollapseKeys=["risk"],this.trailingEnabledUi=!1,this.entryPctMaxUi=100,this.aiFilterEnabledUi=!1,this.showFormModal=!0,this.$nextTick((0,l.A)((0,o.A)().m(function a(){return(0,o.A)().w(function(a){while(1)switch(a.n){case 0:return e.loadWatchlist(),e.loadIndicators(),e.loadExchangeCredentials(),a.n=1,e.loadStrategyDataToForm(t);case 1:return a.a(2)}},a)})))):this.$message.warning(this.$t("trading-assistant.messages.runningWarning"))},loadStrategyDataToForm:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var i,s,r,l,d,c,u,m,g,p,h,_,y,f,v,b,S,k,x,C,w,$,A,P,M,F,T,V,I,N,U,E,z,D,R,K,q,L,B,O,H,W;return(0,o.A)().w(function(a){while(1)switch(a.n){case 0:if(e.indicatorsLoaded){a.n=1;break}return a.n=1,e.loadIndicators();case 1:return a.n=2,e.$nextTick();case 2:return e.selectedMarketCategory=t.market_category||"Crypto",c=t.execution_mode||"signal",e.executionModeUi=c,e.liveDisclaimerAckUi="live"===c,u=t.notification_config&&t.notification_config.channels||["browser"],e.notifyChannelsUi=Array.isArray(u)?u:["browser"],m=!1,g=!1,t.trading_config&&(f=t.trading_config||{},v=f.trailing&&"object"===(0,n.A)(f.trailing)?f.trailing:null,m=void 0!==f.trailing_enabled?!!f.trailing_enabled:!(!v||!v.enabled),b=f.enable_ai_filter,g=!0===b||"true"===b||1===b||"1"===b,S=f.scale&&"object"===(0,n.A)(f.scale)?f.scale:null,k=f.position&&"object"===(0,n.A)(f.position)?f.position:null,x=new Set(["risk"]),(f.trend_add_enabled||f.dca_add_enabled||S&&(null!==(p=S.trendAdd)&&void 0!==p&&p.enabled||null!==(h=S.dcaAdd)&&void 0!==h&&h.enabled))&&x.add("scale"),(f.trend_reduce_enabled||f.adverse_reduce_enabled||S&&(null!==(_=S.trendReduce)&&void 0!==_&&_.enabled||null!==(y=S.adverseReduce)&&void 0!==y&&y.enabled))&&x.add("reduce"),(void 0!==f.entry_pct||k&&void 0!==k.entryPct)&&x.add("position"),e.backtestCollapseKeys=Array.from(x)),e.trailingEnabledUi=m,e.aiFilterEnabledUi=g,a.n=3,e.$nextTick();case 3:return e.form.setFieldsValue({enable_ai_filter:g}),a.n=4,e.$nextTick();case 4:if(e.form.setFieldsValue({execution_mode:e.executionModeUi,live_disclaimer_ack:e.liveDisclaimerAckUi,notify_channels:e.notifyChannelsUi,notify_email:(null===(i=t.notification_config)||void 0===i||null===(i=i.targets)||void 0===i?void 0:i.email)||"",notify_phone:(null===(s=t.notification_config)||void 0===s||null===(s=s.targets)||void 0===s?void 0:s.phone)||"",notify_telegram:(null===(r=t.notification_config)||void 0===r||null===(r=r.targets)||void 0===r?void 0:r.telegram)||"",notify_discord:(null===(l=t.notification_config)||void 0===l||null===(l=l.targets)||void 0===l?void 0:l.discord)||"",notify_webhook:(null===(d=t.notification_config)||void 0===d||null===(d=d.targets)||void 0===d?void 0:d.webhook)||""}),!t.indicator_config||!t.indicator_config.indicator_id){a.n=7;break}if(C=t.indicator_config.indicator_id,w=e.availableIndicators.find(function(t){return String(t.id)===String(C)}),!w){a.n=6;break}return A=String(w.id),e.form.setFieldsValue({indicator_id:A}),a.n=5,e.handleIndicatorChange(A);case 5:P=null===($=t.trading_config)||void 0===$?void 0:$.indicator_params,P&&"object"===(0,n.A)(P)&&Object.keys(P).forEach(function(t){t in e.indicatorParamValues&&e.$set(e.indicatorParamValues,t,P[t])}),a.n=7;break;case 6:e.form.setFieldsValue({indicator_id:String(C)});case 7:if(!t.exchange_config){a.n=11;break}if(M=t.exchange_config.exchange_id||"",F="live"===e.executionModeUi,T=["Crypto","USStock","Forex"].includes(e.selectedMarketCategory),V="USStock"===e.selectedMarketCategory,I="Forex"===e.selectedMarketCategory,!F||!T){a.n=10;break}if(!V){a.n=8;break}e.currentBrokerId=M||"ibkr",e.form.setFieldsValue({broker_id:M||"ibkr",ibkr_host:t.exchange_config.ibkr_host||"127.0.0.1",ibkr_port:t.exchange_config.ibkr_port||7497,ibkr_client_id:t.exchange_config.ibkr_client_id||1,ibkr_account:t.exchange_config.ibkr_account||""}),a.n=10;break;case 8:if(!I){a.n=9;break}e.currentBrokerId=M||"mt5",e.form.setFieldsValue({forex_broker_id:M||"mt5",mt5_server:t.exchange_config.mt5_server||"",mt5_login:t.exchange_config.mt5_login||"",mt5_password:t.exchange_config.mt5_password||"",mt5_terminal_path:t.exchange_config.mt5_terminal_path||""}),a.n=10;break;case 9:if(e.currentExchangeId=M||t.exchange_config.exchange_id||"",N=t.exchange_config.credential_id,!N){a.n=10;break}return e.form.setFieldsValue({credential_id:N}),a.n=10,e.handleCredentialSelectChange(N);case 10:V||I?e.currentBrokerId=M||(I?"mt5":"ibkr"):e.currentExchangeId=M;case 11:if(t.trading_config){if(U=t.trading_config||{},E=U.trailing&&"object"===(0,n.A)(U.trailing)?U.trailing:null,z=U.scale&&"object"===(0,n.A)(U.scale)?U.scale:null,D=U.position&&"object"===(0,n.A)(U.position)?U.position:null,R=U.strategy_type||t.strategy_type||"single","cross_sectional"===R)if(e.form.setFieldsValue({cs_strategy_type:"cross_sectional",portfolio_size:U.portfolio_size||10,long_ratio:U.long_ratio||.5,rebalance_frequency:U.rebalance_frequency||"daily"}),U.symbol_list&&Array.isArray(U.symbol_list))e.crossSectionalSymbols=U.symbol_list;else if(t.symbol_list)try{K="string"===typeof t.symbol_list?JSON.parse(t.symbol_list):t.symbol_list,Array.isArray(K)&&(e.crossSectionalSymbols=K)}catch(o){e.crossSectionalSymbols=[]}else e.crossSectionalSymbols=[];else e.form.setFieldsValue({cs_strategy_type:"single"}),e.crossSectionalSymbols=[];q=z&&z.trendAdd?z.trendAdd:null,L=z&&z.dcaAdd?z.dcaAdd:null,B=z&&z.trendReduce?z.trendReduce:null,O=z&&z.adverseReduce?z.adverseReduce:null,H=U.symbol,W="string"===typeof H&&H.includes(":")?H:"".concat(e.selectedMarketCategory,":").concat(H),e.form.setFieldsValue({strategy_name:t.strategy_name,symbol:W,initial_capital:U.initial_capital,leverage:U.leverage,trade_direction:U.trade_direction||"long",timeframe:U.timeframe||"1H",market_type:"futures"===U.market_type?"swap":U.market_type||"swap",take_profit_pct:U.take_profit_pct||0,stop_loss_pct:U.stop_loss_pct||0,trailing_enabled:m,trailing_stop_pct:void 0!==U.trailing_stop_pct?U.trailing_stop_pct||0:E&&E.pct||0,trailing_activation_pct:void 0!==U.trailing_activation_pct?U.trailing_activation_pct||0:E&&E.activationPct||0,trend_add_enabled:void 0!==U.trend_add_enabled?!!U.trend_add_enabled:!(!q||!q.enabled),trend_add_step_pct:void 0!==U.trend_add_step_pct?U.trend_add_step_pct||0:q&&q.stepPct||0,trend_add_size_pct:void 0!==U.trend_add_size_pct?U.trend_add_size_pct||0:q&&q.sizePct||0,trend_add_max_times:void 0!==U.trend_add_max_times?U.trend_add_max_times||0:q&&q.maxTimes||0,dca_add_enabled:void 0!==U.dca_add_enabled?!!U.dca_add_enabled:!(!L||!L.enabled),dca_add_step_pct:void 0!==U.dca_add_step_pct?U.dca_add_step_pct||0:L&&L.stepPct||0,dca_add_size_pct:void 0!==U.dca_add_size_pct?U.dca_add_size_pct||0:L&&L.sizePct||0,dca_add_max_times:void 0!==U.dca_add_max_times?U.dca_add_max_times||0:L&&L.maxTimes||0,trend_reduce_enabled:void 0!==U.trend_reduce_enabled?!!U.trend_reduce_enabled:!(!B||!B.enabled),trend_reduce_step_pct:void 0!==U.trend_reduce_step_pct?U.trend_reduce_step_pct||0:B&&B.stepPct||0,trend_reduce_size_pct:void 0!==U.trend_reduce_size_pct?U.trend_reduce_size_pct||0:B&&B.sizePct||0,trend_reduce_max_times:void 0!==U.trend_reduce_max_times?U.trend_reduce_max_times||0:B&&B.maxTimes||0,adverse_reduce_enabled:void 0!==U.adverse_reduce_enabled?!!U.adverse_reduce_enabled:!(!O||!O.enabled),adverse_reduce_step_pct:void 0!==U.adverse_reduce_step_pct?U.adverse_reduce_step_pct||0:O&&O.stepPct||0,adverse_reduce_size_pct:void 0!==U.adverse_reduce_size_pct?U.adverse_reduce_size_pct||0:O&&O.sizePct||0,adverse_reduce_max_times:void 0!==U.adverse_reduce_max_times?U.adverse_reduce_max_times||0:O&&O.maxTimes||0,entry_pct:0===U.entry_pct||U.entry_pct?U.entry_pct:D&&D.entryPct?D.entryPct:100,enable_ai_filter:g}),e.$nextTick(function(){e.recalcEntryPctMaxUi(),e.normalizeEntryPct()})}case 12:return a.a(2)}},a)}))()},handleSelectStrategy:function(t){this.selectedStrategy=t,this.currentEquity=null,this.loadStrategyDetails(),this.startEquityPolling()},loadStrategyDetails:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a,i,s,n,l,d,u,g,p,h,_,y,f;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.selectedStrategy){e.n=1;break}return e.a(2,Promise.resolve());case 1:return e.p=1,e.n=2,Promise.all([(0,m.Yx)(t.selectedStrategy.id),(0,m.oK)(t.selectedStrategy.id)]);case 2:if(a=e.v,i=(0,r.A)(a,2),s=i[0],n=i[1],l=null,1===s.code&&s.data&&(Array.isArray(s.data)&&s.data.length>0?(d=s.data[s.data.length-1],l=d.equity):(g=(null===(u=t.selectedStrategy.trading_config)||void 0===u?void 0:u.initial_capital)||t.selectedStrategy.initial_capital,l=g||null)),p=0,1===n.code&&n.data){h=n.data.positions||n.data.items||[],_=(0,c.A)(h);try{for(_.s();!(y=_.n()).done;)f=y.value,p+=parseFloat(f.unrealized_pnl||f.unrealizedPnl||0)}catch(o){_.e(o)}finally{_.f()}}t.currentEquity=null!==l?l+p:null,e.n=4;break;case 3:e.p=3,e.v;case 4:return e.a(2)}},e,null,[[1,3]])}))()},startEquityPolling:function(){var t=this;this.stopEquityPolling(),this.selectedStrategy&&(this.loadStrategyDetails(),this.equityPollingTimer=setInterval(function(){t.loadStrategyDetails()},1e4))},stopEquityPolling:function(){this.equityPollingTimer&&(clearInterval(this.equityPollingTimer),this.equityPollingTimer=null)},handleCloseModal:function(){this.showFormModal=!1,this.editingStrategy=null,this.isEditMode=!1,this.strategyType="indicator",this.currentStep=0,this.currentExchangeId="",this.selectedIndicator=null,this.connectionTestResult=null,this.indicatorsLoaded=!1,this.availableIndicators=[],this.backtestCollapseKeys=["risk"],this.trailingEnabledUi=!1,this.entryPctMaxUi=100,this.aiFilterEnabledUi=!1,this.showAdvancedSettings=!1,this.executionModeUi="signal",this.liveDisclaimerAckUi=!1,this.form.resetFields()},handleRefresh:function(){this.loadStrategies(),this.showFormModal=!1},handleMenuClick:function(t,e){switch(t){case"start":this.handleStartStrategy(e.id);break;case"stop":this.handleStopStrategy(e.id);break;case"edit":this.handleEditStrategy(e);break;case"delete":this.handleDeleteStrategy(e);break}},toggleGroup:function(t){this.$set(this.collapsedGroups,t,!this.collapsedGroups[t])},handleGroupMenuClick:function(t,e){var a=this;return(0,l.A)((0,o.A)().m(function i(){var s,r;return(0,o.A)().w(function(i){while(1)switch(i.n){case 0:s=e.strategies.map(function(t){return t.id}),r=t,i.n="startAll"===r?1:"stopAll"===r?3:"deleteAll"===r?5:7;break;case 1:return i.n=2,a.handleBatchStartStrategies(s,e.baseName);case 2:return i.a(3,7);case 3:return i.n=4,a.handleBatchStopStrategies(s,e.baseName);case 4:return i.a(3,7);case 5:return i.n=6,a.handleBatchDeleteStrategies(s,e.baseName);case 6:return i.a(3,7);case 7:return i.a(2)}},i)}))()},handleBatchStartStrategies:function(t,e){var a=this;return(0,l.A)((0,o.A)().m(function e(){var i,s,r;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,m.UH)({strategy_ids:t});case 1:i=e.v,1===i.code?(r=(null===(s=i.data)||void 0===s||null===(s=s.success_ids)||void 0===s?void 0:s.length)||t.length,a.$message.success(a.$t("trading-assistant.messages.batchStartSuccess",{count:r})),a.loadStrategies()):a.$message.error(i.msg||a.$t("trading-assistant.messages.batchStartFailed")),e.n=3;break;case 2:e.p=2,e.v,a.$message.error(a.$t("trading-assistant.messages.batchStartFailed"));case 3:return e.a(2)}},e,null,[[0,2]])}))()},handleBatchStopStrategies:function(t,e){var a=this;return(0,l.A)((0,o.A)().m(function e(){var i,s,r;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,m.GF)({strategy_ids:t});case 1:i=e.v,1===i.code?(r=(null===(s=i.data)||void 0===s||null===(s=s.success_ids)||void 0===s?void 0:s.length)||t.length,a.$message.success(a.$t("trading-assistant.messages.batchStopSuccess",{count:r})),a.loadStrategies()):a.$message.error(i.msg||a.$t("trading-assistant.messages.batchStopFailed")),e.n=3;break;case 2:e.p=2,e.v,a.$message.error(a.$t("trading-assistant.messages.batchStopFailed"));case 3:return e.a(2)}},e,null,[[0,2]])}))()},handleBatchDeleteStrategies:function(t,e){var a=this;return(0,l.A)((0,o.A)().m(function i(){var s;return(0,o.A)().w(function(i){while(1)switch(i.n){case 0:s=a.$t("trading-assistant.messages.batchDeleteConfirm",{count:t.length,name:e}),a.$confirm({title:a.$t("trading-assistant.deleteAll"),content:s,okText:a.$t("trading-assistant.deleteAll"),okType:"danger",cancelText:a.$t("trading-assistant.form.cancel"),onOk:function(){var e=(0,l.A)((0,o.A)().m(function e(){var i,s,r;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,m.xQ)({strategy_ids:t});case 1:i=e.v,1===i.code?(r=(null===(s=i.data)||void 0===s||null===(s=s.success_ids)||void 0===s?void 0:s.length)||t.length,a.$message.success(a.$t("trading-assistant.messages.batchDeleteSuccess",{count:r})),a.selectedStrategy&&t.includes(a.selectedStrategy.id)&&(a.selectedStrategy=null,a.stopEquityPolling()),a.loadStrategies()):a.$message.error(i.msg||a.$t("trading-assistant.messages.batchDeleteFailed")),e.n=3;break;case 2:e.p=2,e.v,a.$message.error(a.$t("trading-assistant.messages.batchDeleteFailed"));case 3:return e.a(2)}},e,null,[[0,2]])}));function i(){return e.apply(this,arguments)}return i}()});case 1:return i.a(2)}},i)}))()},handleStartStrategy:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var i;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,m.mV)(t);case 1:i=a.v,1===i.code?(e.$message.success(e.$t("trading-assistant.messages.startSuccess")),e.loadStrategies(),e.selectedStrategy&&e.selectedStrategy.id===t&&(e.selectedStrategy.status="running")):e.$message.error(i.msg||e.$t("trading-assistant.messages.startFailed")),a.n=3;break;case 2:a.p=2,a.v,e.$message.error(e.$t("trading-assistant.messages.startFailed"));case 3:return a.a(2)}},a,null,[[0,2]])}))()},handleStopStrategy:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var i;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,m.Ke)(t);case 1:i=a.v,1===i.code?(e.$message.success(e.$t("trading-assistant.messages.stopSuccess")),e.loadStrategies(),e.selectedStrategy&&e.selectedStrategy.id===t&&(e.selectedStrategy.status="stopped")):e.$message.error(i.msg||e.$t("trading-assistant.messages.stopFailed")),a.n=3;break;case 2:a.p=2,a.v,e.$message.error(e.$t("trading-assistant.messages.stopFailed"));case 3:return a.a(2)}},a,null,[[0,2]])}))()},handleDeleteStrategy:function(t){var e=this,a=this.$t("trading-assistant.messages.deleteConfirmWithName",{name:t.strategy_name});this.$confirm({title:this.$t("trading-assistant.deleteStrategy"),content:a,okText:this.$t("trading-assistant.deleteStrategy"),okType:"danger",cancelText:this.$t("trading-assistant.form.cancel"),onOk:function(){var a=(0,l.A)((0,o.A)().m(function a(){var i;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,m.v_)(t.id);case 1:i=a.v,1===i.code?(e.$message.success(e.$t("trading-assistant.messages.deleteSuccess")),e.selectedStrategy&&e.selectedStrategy.id===t.id&&(e.selectedStrategy=null,e.stopEquityPolling()),e.loadStrategies()):e.$message.error(i.msg||e.$t("trading-assistant.messages.deleteFailed")),a.n=3;break;case 2:a.p=2,a.v,e.$message.error(e.$t("trading-assistant.messages.deleteFailed"));case 3:return a.a(2)}},a,null,[[0,2]])}));function i(){return a.apply(this,arguments)}return i}()})},getStatusColor:function(t){var e={running:"green",stopped:"default",error:"red"};return e[t]||"default"},getStatusText:function(t){return this.$t("trading-assistant.status.".concat(t))||t},getStrategyTypeText:function(t){return this.$t("trading-assistant.strategyType.".concat(t))||t},getTradeDirectionText:function(t){if(!t)return"";var e={long:this.$t("trading-assistant.form.tradeDirectionLong")||"做多",short:this.$t("trading-assistant.form.tradeDirectionShort")||"做空",both:this.$t("trading-assistant.form.tradeDirectionBoth")||"双向"};return e[t]||t},handleIndicatorSelectFocus:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){return(0,o.A)().w(function(e){while(1)switch(e.n){case 0:if(t.indicatorsLoaded||t.loadingIndicators){e.n=1;break}return e.n=1,t.loadIndicators();case 1:return e.a(2)}},e)}))()},loadIndicators:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){var a,i,s,r;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!t.loadingIndicators){e.n=1;break}return e.a(2,new Promise(function(e){var a=setInterval(function(){t.loadingIndicators||(clearInterval(a),e())},100)}));case 1:if(!t.indicatorsLoaded){e.n=2;break}return e.a(2,Promise.resolve());case 2:return a=t.$store.getters.userInfo||{},i=a.id||1,t.loadingIndicators=!0,e.p=3,e.n=4,(0,y.Ay)({url:"/api/indicator/getIndicators",method:"get",params:{userid:i}});case 4:s=e.v,1===s.code&&s.data?(r=s.data.map(function(t){return{id:t.id,name:t.name,description:t.description,type:t.indicator_type||t.indicatorType||"python",code:t.code,is_buy:t.is_buy,source:1===t.is_buy?"bought":"custom"}}),t.availableIndicators=r,t.indicatorsLoaded=!0):(t.availableIndicators=[],t.$message.warning(s.msg||t.$t("trading-assistant.messages.loadIndicatorsFailed"))),e.n=6;break;case 5:e.p=5,e.v,t.availableIndicators=[],t.$message.warning(t.$t("trading-assistant.messages.loadIndicatorsFailed"));case 6:return e.p=6,t.loadingIndicators=!1,e.f(6);case 7:return e.a(2)}},e,null,[[3,5,6,7]])}))()},handleIndicatorChange:function(t){var e=this;return(0,l.A)((0,o.A)().m(function a(){var i,s,r;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(i=String(t),e.selectedIndicator=e.availableIndicators.find(function(t){return String(t.id)===i}),e.indicatorParams=[],e.indicatorParamValues={},!t){a.n=4;break}return a.p=1,a.n=2,e.$http.get("/api/indicator/getIndicatorParams",{params:{indicator_id:t}});case 2:s=a.v,s&&1===s.code&&Array.isArray(s.data)&&(e.indicatorParams=s.data,r={},s.data.forEach(function(t){r[t.name]=t.default}),e.indicatorParamValues=r),a.n=4;break;case 3:a.p=3,a.v;case 4:return a.a(2)}},a,null,[[1,3]])}))()},handleMarketTypeChange:function(t){var e=t.target.value;"spot"===e&&this.form.setFieldsValue({trade_direction:"long",leverage:1})},recalcEntryPctMaxUi:function(){if(this.form){var t=!!this.form.getFieldValue("trend_add_enabled"),e=!!this.form.getFieldValue("dca_add_enabled"),a=Number(this.form.getFieldValue("trend_add_max_times")||0),i=Number(this.form.getFieldValue("dca_add_max_times")||0),s=Number(this.form.getFieldValue("trend_add_size_pct")||0),r=Number(this.form.getFieldValue("dca_add_size_pct")||0),n=(t?a*s:0)+(e?i*r:0),o=Math.max(0,Math.min(100,100-n));this.entryPctMaxUi=o}else this.entryPctMaxUi=100},normalizeEntryPct:function(){if(this.form){var t=Number(this.form.getFieldValue("entry_pct")||0),e=Number(this.entryPctMaxUi||100);t>e&&this.form.setFieldsValue({entry_pct:e})}},onTrendAddToggle:function(t){var e=this;this.form&&(t&&this.form.setFieldsValue({dca_add_enabled:!1}),this.$nextTick(function(){e.recalcEntryPctMaxUi(),e.normalizeEntryPct()}))},onDcaAddToggle:function(t){var e=this;this.form&&(t&&this.form.setFieldsValue({trend_add_enabled:!1}),this.$nextTick(function(){e.recalcEntryPctMaxUi(),e.normalizeEntryPct()}))},onScaleParamsChange:function(){var t=this;this.$nextTick(function(){t.recalcEntryPctMaxUi(),t.normalizeEntryPct()})},onEntryPctChange:function(){var t=this;this.$nextTick(function(){return t.normalizeEntryPct()})},onTrailingToggle:function(t){this.form&&(this.trailingEnabledUi=!!t,t||this.form.setFieldsValue({trailing_stop_pct:0,trailing_activation_pct:0}))},onAiFilterToggle:function(t){this.aiFilterEnabledUi=!!t;try{this.form&&this.form.setFieldsValue&&this.form.setFieldsValue({enable_ai_filter:!!t})}catch(e){}},filterIndicatorOption:function(t,e){var a=e.componentOptions.children[0].children[0].text;return a.toLowerCase().indexOf(t.toLowerCase())>=0},filterSymbolOption:function(t,e){return e.componentOptions.children[0].text.toLowerCase().indexOf(t.toLowerCase())>=0},getIndicatorTypeColor:function(t){var e={trend:"blue",momentum:"green",volatility:"orange",volume:"purple",custom:"default"};return e[t]||"default"},getIndicatorTypeName:function(t){return this.$t("trading-assistant.indicatorType.".concat(t))||t},getExchangeName:function(t){if(t.labelKey){var e="trading-assistant.exchangeNames.".concat(t.labelKey),a=this.$t(e);return a===e?t.value.charAt(0).toUpperCase()+t.value.slice(1):a}return t.label||t.value},getExchangeDisplayName:function(t){if(!t)return"";var e=this.exchangeOptions.find(function(e){return e.value===t});return e?this.getExchangeName(e):t.charAt(0).toUpperCase()+t.slice(1)},getExchangeTagColor:function(t){var e={binance:"gold",okx:"blue",coinbaseexchange:"cyan",kraken:"purple",bitfinex:"geekblue",huobi:"orange",gate:"green",mexc:"lime",kucoin:"volcano",bybit:"red",bitget:"magenta",bitmex:"red",deribit:"blue",phemex:"cyan",bitmart:"geekblue",bitstamp:"purple",bittrex:"orange",poloniex:"green",gemini:"lime",cryptocom:"volcano",blockchaincom:"magenta",bitflyer:"red",upbit:"blue",bithumb:"cyan",coinone:"purple",zb:"geekblue",lbank:"orange",bibox:"green",bigone:"lime",bitrue:"volcano",coinex:"magenta",ftx:"red",ftxus:"blue",binanceus:"gold",binancecoinm:"gold",binanceusdm:"gold",ibkr:"green"};return e[t]||"default"},handleApiConfigChange:function(){this.connectionTestResult=null},getModalPopupContainer:function(){return window.document.body},handleBrokerSelectChange:function(t){this.currentBrokerId=t||"ibkr",this.connectionTestResult=null},handleForexBrokerSelectChange:function(t){this.currentBrokerId=t||"mt5",this.connectionTestResult=null},handleExchangeSelectChange:function(t){var e=this;this.currentExchangeId=t||"",this.connectionTestResult=null,this.suppressApiClearOnce?this.suppressApiClearOnce=!1:this.$nextTick(function(){var t={api_key:void 0,secret_key:void 0,passphrase:void 0,enable_demo_trading:!1};setTimeout(function(){e.form.setFieldsValue(t)},100)})},getPlaceholder:function(t){var e={okx:{api_key:"请输入API Key",secret_key:"请输入Secret Key",passphrase:"请输入Passphrase(创建API时设置)"},okex:{api_key:"请输入API Key",secret_key:"请输入Secret Key",passphrase:"请输入Passphrase(创建API时设置)"},binance:{api_key:"请输入API Key",secret_key:"请输入Secret Key"},coinbaseexchange:{api_key:"请输入API Key(或Key Name)",secret_key:"请输入API Secret(或Private Key)",passphrase:"请输入Passphrase(Legacy Pro API需要)"},kucoin:{api_key:"请输入API Key",secret_key:"请输入Secret Key",passphrase:"请输入Passphrase"},gate:{api_key:"请输入API Key",secret_key:"请输入Secret Key"},mexc:{api_key:"请输入Access Key",secret_key:"请输入Secret Key"},kraken:{api_key:"请输入API Key",secret_key:"请输入Secret Key"},bitfinex:{api_key:"请输入API Key",secret_key:"请输入Secret Key"},bybit:{api_key:"请输入API Key",secret_key:"请输入Secret Key"},bitget:{api_key:"请输入API Key",secret_key:"请输入Secret Key",passphrase:"请输入Passphrase(Legacy Pro API需要)"}},a=e[this.currentExchangeId]||{};if(a[t])return a[t];var i={api_key:this.$t("trading-assistant.placeholders.inputApiKey"),secret_key:this.$t("trading-assistant.placeholders.inputSecretKey"),passphrase:this.$t("trading-assistant.placeholders.inputPassphrase")};return i[t]||this.$t("trading-assistant.placeholders.inputApiKey")},handleNext:function(){var t=this;if(0===this.currentStep){var e=["indicator_id","strategy_name"];(this.isAdvancedMode||this.editingStrategy)&&e.push("initial_capital","market_type","leverage","trade_direction","timeframe"),this.isEditMode&&e.push("symbol"),this.form.validateFields(e,function(e,a){if(!e){if(!t.isEditMode){var i=t.form.getFieldValue("cs_strategy_type")||"single";if("cross_sectional"===i){if(!t.crossSectionalSymbols||0===t.crossSectionalSymbols.length)return void t.$message.warning(t.$t("trading-assistant.validation.symbolsRequired"))}else if(!t.selectedSymbols||0===t.selectedSymbols.length)return void t.$message.warning(t.$t("trading-assistant.validation.symbolsRequired"))}try{var s=a&&a.market_type||t.form.getFieldValue("market_type");"spot"===s&&t.form.setFieldsValue({leverage:1,trade_direction:"long"})}catch(r){}t.backtestCollapseKeys=["risk"];try{t.trailingEnabledUi=!!t.form.getFieldValue("trailing_enabled")}catch(r){t.trailingEnabledUi=!1}t.$nextTick(function(){t.recalcEntryPctMaxUi(),t.normalizeEntryPct()}),t.isSimpleMode&&!t.editingStrategy?t.currentStep=2:t.currentStep++}})}else if(1===this.currentStep){try{var a=this.form.getFieldValue("execution_mode")||"signal";this.executionModeUi=a;var i=this.form.getFieldValue("notify_channels")||["browser"];this.notifyChannelsUi=Array.isArray(i)?i:["browser"]}catch(s){}this.currentStep++}},handlePrev:function(){this.currentStep>0&&(this.isSimpleMode&&!this.editingStrategy&&2===this.currentStep?this.currentStep=0:this.currentStep--)},handleSubmit:function(){var t=this;return(0,l.A)((0,o.A)().m(function e(){return(0,o.A)().w(function(e){while(1)switch(e.n){case 0:t.form.validateFields(function(){var e=(0,l.A)((0,o.A)().m(function e(a,i){var s,r,n,l,d,c,u,g,p,h,_,y,f,v,b,S,k;return(0,o.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(a){e.n=14;break}if(e.p=1,t.saving=!0,s=t.canUseLiveTrading&&"live"===i.execution_mode,!s||i.live_disclaimer_ack){e.n=2;break}return t.$message.warning(t.$t("trading-assistant.liveDisclaimer.required")),t.saving=!1,e.a(2);case 2:if(!s){e.n=3;break}if(r=i.credential_id,r){e.n=3;break}return t.$message.warning(t.$t("trading-assistant.validation.credentialRequired")),t.saving=!1,e.a(2);case 3:if(n={channels:i.notify_channels||[],targets:{email:t.userNotificationSettings.email||"",phone:t.userNotificationSettings.phone||"",telegram:t.userNotificationSettings.telegram_chat_id||"",telegram_bot_token:t.userNotificationSettings.telegram_bot_token||"",discord:t.userNotificationSettings.discord_webhook||"",webhook:t.userNotificationSettings.webhook_url||"",webhook_token:t.userNotificationSettings.webhook_token||""}},n.channels&&0!==n.channels.length){e.n=4;break}return t.$message.warning(t.$t("trading-assistant.validation.notifyChannelRequired")),t.saving=!1,e.a(2);case 4:if(l=String(i.indicator_id),d=t.availableIndicators.find(function(t){return String(t.id)===l}),d){e.n=5;break}return t.$message.error(t.$t("trading-assistant.validation.indicatorRequired")),t.saving=!1,e.a(2);case 5:if(c=!!t.aiFilterEnabledUi,u="futures"===i.market_type?"swap":i.market_type||"swap",g=i.leverage||1,p=i.trade_direction||"long","spot"===u?(g=1,p="long",t.$message.info(t.$t("trading-assistant.messages.spotLimitations"))):(g<1&&(g=1),g>125&&(g=125)),h={strategy_name:i.strategy_name,market_category:t.selectedMarketCategory||"Crypto",execution_mode:i.execution_mode||"signal",notification_config:n,indicator_config:{indicator_id:d.id,indicator_name:d.name,indicator_code:d.code||""},exchange_config:s?t.isIBKRMarket?{exchange_id:i.broker_id||t.currentBrokerId||"ibkr",ibkr_host:i.ibkr_host||"127.0.0.1",ibkr_port:i.ibkr_port||7497,ibkr_client_id:i.ibkr_client_id||1,ibkr_account:i.ibkr_account||""}:t.isMT5Market?{exchange_id:i.forex_broker_id||t.currentBrokerId||"mt5",mt5_server:i.mt5_server||"",mt5_login:i.mt5_login||"",mt5_password:i.mt5_password||"",mt5_terminal_path:i.mt5_terminal_path||""}:{credential_id:i.credential_id,exchange_id:t.currentExchangeId||void 0}:void 0,trading_config:{initial_capital:i.initial_capital,leverage:g,trade_direction:p,timeframe:i.timeframe,market_type:u,margin_mode:"cross",signal_mode:"confirmed",take_profit_pct:i.take_profit_pct||0,stop_loss_pct:i.stop_loss_pct||0,trailing_enabled:!!i.trailing_enabled,trailing_stop_pct:i.trailing_stop_pct||0,trailing_activation_pct:i.trailing_activation_pct||0,trend_add_enabled:!!i.trend_add_enabled,trend_add_step_pct:i.trend_add_step_pct||0,trend_add_size_pct:i.trend_add_size_pct||0,trend_add_max_times:i.trend_add_max_times||0,dca_add_enabled:!!i.dca_add_enabled,dca_add_step_pct:i.dca_add_step_pct||0,dca_add_size_pct:i.dca_add_size_pct||0,dca_add_max_times:i.dca_add_max_times||0,trend_reduce_enabled:!!i.trend_reduce_enabled,trend_reduce_step_pct:i.trend_reduce_step_pct||0,trend_reduce_size_pct:i.trend_reduce_size_pct||0,trend_reduce_max_times:i.trend_reduce_max_times||0,adverse_reduce_enabled:!!i.adverse_reduce_enabled,adverse_reduce_step_pct:i.adverse_reduce_step_pct||0,adverse_reduce_size_pct:i.adverse_reduce_size_pct||0,adverse_reduce_max_times:i.adverse_reduce_max_times||0,entry_pct:0===i.entry_pct||i.entry_pct?i.entry_pct:100,commission:i.commission||0,slippage:i.slippage||0,enable_ai_filter:c,indicator_params:t.indicatorParamValues,strategy_type:i.cs_strategy_type||"single",symbol_list:"cross_sectional"===i.cs_strategy_type?t.crossSectionalSymbols:void 0,portfolio_size:"cross_sectional"===i.cs_strategy_type?i.portfolio_size||10:void 0,long_ratio:"cross_sectional"===i.cs_strategy_type?i.long_ratio||.5:void 0,rebalance_frequency:"cross_sectional"===i.cs_strategy_type?i.rebalance_frequency||"daily":void 0}},!t.editingStrategy){e.n=7;break}return y=i.symbol,"string"===typeof y&&y.includes(":")&&(f=y.indexOf(":"),h.market_category=y.slice(0,f)||h.market_category,y=y.slice(f+1)),h.trading_config.symbol=y,e.n=6,(0,m.P7)(t.editingStrategy.id,h);case 6:_=e.v,e.n=11;break;case 7:if(h.user_id=1,h.strategy_type="IndicatorStrategy","cross_sectional"!==i.cs_strategy_type){e.n=9;break}return h.strategy_type="IndicatorStrategy",h.trading_config.symbol=null,e.n=8,(0,m.WM)(h);case 8:_=e.v,e.n=11;break;case 9:return h.symbols=t.selectedSymbols,e.n=10,(0,m.Ox)(h);case 10:_=e.v;case 11:1===_.code?(t.isEditMode?t.$message.success(t.$t("trading-assistant.messages.updateSuccess")):(b=i.cs_strategy_type||"single",S="cross_sectional"===b?t.crossSectionalSymbols.length:t.selectedSymbols.length,k=(null===(v=_.data)||void 0===v?void 0:v.total_created)||S,t.$message.success(t.$t("trading-assistant.messages.batchCreateSuccess",{count:k}))),t.handleRefresh()):t.$message.error(_.msg||(t.isEditMode?t.$t("trading-assistant.messages.updateFailed"):t.$t("trading-assistant.messages.createFailed"))),e.n=13;break;case 12:e.p=12,e.v,t.$message.error(t.isEditMode?t.$t("trading-assistant.messages.updateFailed"):t.$t("trading-assistant.messages.createFailed"));case 13:return e.p=13,t.saving=!1,e.f(13);case 14:return e.a(2)}},e,null,[[1,12,13,14]])}));return function(t,a){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},getFormValues:function(){var t=this;return new Promise(function(e,a){t.form.validateFields(function(t,i){t?a(t):e(i)})})},getDropdownContainer:function(t){return document.body}}},E=U,z=(0,k.A)(E,i,s,!1,null,"13cac835",null),D=z.exports},42430:function(t,e,a){a.d(e,{IA:function(){return n},PR:function(){return o},kI:function(){return l}});var i=a(76338),s=a(75769),r={list:"/api/credentials/list",get:"/api/credentials/get",create:"/api/credentials/create",delete:"/api/credentials/delete"};function n(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,s.Ay)({url:r.list,method:"get",params:t})}function o(t){return(0,s.Ay)({url:r.create,method:"post",data:t})}function l(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(0,s.Ay)({url:r.delete,method:"delete",params:(0,i.A)({id:t},e)})}},35038:function(t,e,a){a.d(e,{Qo:function(){return r},_3:function(){return c},dp:function(){return n},iO:function(){return d},mk:function(){return o},ms:function(){return l},z6:function(){return u}});var i=a(75769),s={GetWatchlist:"/api/market/watchlist/get",AddWatchlist:"/api/market/watchlist/add",RemoveWatchlist:"/api/market/watchlist/remove",GetWatchlistPrices:"/api/market/watchlist/prices",MultiAnalysis:"/api/analysis/multiAnalysis",CreateAnalysisTask:"/api/analysis/createTask",GetAnalysisTaskStatus:"/api/analysis/getTaskStatus",GetAnalysisHistoryList:"/api/analysis/getHistoryList",DeleteAnalysisTask:"/api/analysis/deleteTask",ReflectAnalysis:"/api/analysis/reflect",ChatMessage:"/api/ai/chat/message",GetChatHistory:"/api/ai/chat/history",SaveChatHistory:"/api/ai/chat/history/save",GetConfig:"/api/market/config",GetMenuFooterConfig:"/api/market/menuFooterConfig",GetMarketTypes:"/api/market/types",SearchSymbols:"/api/market/symbols/search",GetHotSymbols:"/api/market/symbols/hot"};function r(t){return(0,i.Ay)({url:s.GetWatchlist,method:"get",params:t})}function n(t){return(0,i.Ay)({url:s.AddWatchlist,method:"post",data:t})}function o(t){return(0,i.Ay)({url:s.RemoveWatchlist,method:"post",data:t})}function l(t){return(0,i.Ay)({url:s.GetWatchlistPrices,method:"get",params:{watchlist:JSON.stringify(t.watchlist||[])}})}function d(){return(0,i.Ay)({url:s.GetMarketTypes,method:"get"})}function c(t){return(0,i.Ay)({url:s.SearchSymbols,method:"get",params:t})}function u(t){return(0,i.Ay)({url:s.GetHotSymbols,method:"get",params:t})}},84841:function(t,e,a){a.d(e,{DK:function(){return f},E$:function(){return c},Gl:function(){return g},O0:function(){return d},TK:function(){return n},aU:function(){return s},cw:function(){return l},d$:function(){return b},hG:function(){return o},kg:function(){return r},nY:function(){return y},r7:function(){return u},rx:function(){return h},v9:function(){return p},vF:function(){return m},vi:function(){return v},wq:function(){return _}});var i=a(75769);function s(t){return(0,i.Ay)({url:"/api/users/list",method:"get",params:t})}function r(t){return(0,i.Ay)({url:"/api/users/create",method:"post",data:t})}function n(t,e){return(0,i.Ay)({url:"/api/users/update",method:"put",params:{id:t},data:e})}function o(t){return(0,i.Ay)({url:"/api/users/delete",method:"delete",params:{id:t}})}function l(t){return(0,i.Ay)({url:"/api/users/reset-password",method:"post",data:t})}function d(){return(0,i.Ay)({url:"/api/users/roles",method:"get"})}function c(){return(0,i.Ay)({url:"/api/users/profile",method:"get"})}function u(t){return(0,i.Ay)({url:"/api/users/profile/update",method:"put",data:t})}function m(){return(0,i.Ay)({url:"/api/users/notification-settings",method:"get"})}function g(t){return(0,i.Ay)({url:"/api/users/notification-settings",method:"put",data:t})}function p(t){return(0,i.Ay)({url:"/api/users/my-credits-log",method:"get",params:t})}function h(t){return(0,i.Ay)({url:"/api/users/my-referrals",method:"get",params:t})}function _(t){return(0,i.Ay)({url:"/api/users/set-credits",method:"post",data:t})}function y(t){return(0,i.Ay)({url:"/api/users/set-vip",method:"post",data:t})}function f(t){return(0,i.Ay)({url:"/api/users/system-strategies",method:"get",params:t})}function v(t){return(0,i.Ay)({url:"/api/users/admin-orders",method:"get",params:t})}function b(t){return(0,i.Ay)({url:"/api/users/admin-ai-stats",method:"get",params:t})}}}]); \ No newline at end of file diff --git a/frontend/dist/js/958-legacy.623e6376.js b/frontend/dist/js/958-legacy.623e6376.js new file mode 100644 index 0000000..0bbe8d0 --- /dev/null +++ b/frontend/dist/js/958-legacy.623e6376.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[958],{6717:function(t,a,e){e.r(a),e.d(a,{default:function(){return x}});e(62010),e(9868);var s=function(){var t=this,a=t._self._c;return a("div",{staticClass:"ai-asset-analysis-page",class:{"theme-dark":t.isDarkTheme}},[t.opportunities.length>0?a("div",{staticClass:"opp-section"},[a("div",{staticClass:"opp-header"},[a("span",{staticClass:"opp-title"},[a("a-icon",{attrs:{type:"radar-chart"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.opportunities.title")))],1),a("span",{staticClass:"opp-header-right"},[a("span",{staticClass:"opp-update-hint"},[a("a-icon",{attrs:{type:"clock-circle"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.opportunities.updateHint"))+" ")],1),a("a-button",{attrs:{type:"link",size:"small",icon:"reload",loading:t.oppLoading},on:{click:function(a){return t.loadOpportunities(!0)}}},[t._v(" "+t._s(t.$t("common.refresh")||"刷新")+" ")])],1)]),a("div",{staticClass:"opp-carousel-wrapper",on:{mouseenter:function(a){t.oppHover=!0},mouseleave:function(a){t.oppHover=!1}}},[a("div",{staticClass:"opp-track",class:{paused:t.oppHover},style:t.oppTrackStyle},t._l(t.carouselItems,function(e,s){return a("div",{key:"opp-"+s,staticClass:"opp-card",class:[e.impact,"market-"+(e.market||"").toLowerCase(),{"is-prediction-market":"PredictionMarket"===e.market}],on:{click:function(a){return t.analyzeOpportunity(e)}}},[a("div",{staticClass:"opp-top"},[a("span",{staticClass:"opp-symbol",class:{"prediction-title":"PredictionMarket"===e.market}},[t._v(" "+t._s("PredictionMarket"===e.market&&e.name||e.symbol)+" ")]),a("a-tag",{staticClass:"opp-market-tag",attrs:{color:t.getMarketTagColor(e.market),size:"small"}},[t._v(" "+t._s(t.getMarketLabel(e.market))+" ")])],1),"PredictionMarket"!==e.market?a("div",{staticClass:"opp-price"},[t._v("$"+t._s(t.formatOppPrice(e.price)))]):a("div",{staticClass:"opp-price"},[t._v(t._s((e.price||0).toFixed(1))+"%")]),"PredictionMarket"!==e.market?a("div",{staticClass:"opp-change",class:e.change_24h>=0?"up":"down"},[t._v(" "+t._s(e.change_24h>=0?"+":"")+t._s((e.change_24h||0).toFixed(1))+"% ")]):e.ai_analysis?a("div",{staticClass:"opp-change"},[a("a-tag",{attrs:{color:t.getRecommendationColor(e.ai_analysis.recommendation),size:"small"}},[t._v(" "+t._s(t.getRecommendationLabel(e.ai_analysis.recommendation))+" ")]),a("span",{staticStyle:{"margin-left":"8px","font-size":"12px",color:"rgba(0,0,0,0.65)"}},[t._v(" 机会评分: "+t._s(e.ai_analysis.opportunity_score.toFixed(0))+" ")])],1):t._e(),"PredictionMarket"!==e.market?a("div",{staticClass:"opp-signal"},[a("a-tag",{attrs:{color:t.getSignalColor(e.signal),size:"small"}},[t._v(t._s(t.getSignalLabel(e.signal)))])],1):t._e(),a("div",{staticClass:"opp-reason"},[t._v(t._s(t.getReasonText(e)))]),a("div",{staticClass:"opp-actions"},["PredictionMarket"!==e.market?a("span",{staticClass:"opp-action",on:{click:function(a){return a.stopPropagation(),t.analyzeOpportunity(e)}}},[a("a-icon",{attrs:{type:"thunderbolt"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.opportunities.analyze"))+" ")],1):a("span",{staticClass:"opp-action",on:{click:function(a){return a.stopPropagation(),t.analyzeOpportunity(e)}}},[a("a-icon",{attrs:{type:"link"}}),t._v(" "+t._s(t.$t("polymarket.action.viewDetail"))+" ")],1),"Crypto"===e.market?a("span",{staticClass:"opp-trade-btn",on:{click:function(a){return a.stopPropagation(),t.openQuickTradeFromOpp(e)}}},[a("a-icon",{attrs:{type:"transaction"}}),t._v(" "+t._s(t.$t("quickTrade.tradeNow"))+" ")],1):t._e()])])}),0)])]):t._e(),a("a-tooltip",{attrs:{title:t.$t("quickTrade.openPanel"),placement:"left"}},[!t.showQuickTrade&&t.currentAnalysisSymbol?a("div",{staticClass:"qt-floating-btn",on:{click:t.openQuickTradeFromCurrent}},[a("a-icon",{attrs:{type:"thunderbolt",theme:"filled"}})],1):t._e()]),a("quick-trade-panel",{attrs:{visible:t.showQuickTrade,symbol:t.qtSymbol,"preset-side":t.qtSide,"preset-price":t.qtPrice,source:t.qtSource,"market-type":"swap"},on:{close:function(a){t.showQuickTrade=!1},"order-success":t.onQuickTradeSuccess,"update:symbol":t.handleQuickTradeSymbolChange}}),a("a-card",{staticClass:"workspace-card",attrs:{bordered:!1}},[a("a-tabs",{staticClass:"workspace-tabs",attrs:{size:"large"},model:{value:t.activeTab,callback:function(a){t.activeTab=a},expression:"activeTab"}},[a("a-tab-pane",{key:"quick"},[a("span",{attrs:{slot:"tab"},slot:"tab"},[a("a-icon",{attrs:{type:"thunderbolt"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.tabs.quick"))+" ")],1),a("div",{staticClass:"tab-body"},["quick"===t.activeTab?a("AnalysisView",{attrs:{embedded:!0,"preset-symbol":t.presetSymbol,"auto-analyze-signal":t.autoAnalyzeSignal},on:{"symbol-change":t.onAnalysisSymbolChange}}):t._e()],1)]),a("a-tab-pane",{key:"monitor"},[a("span",{attrs:{slot:"tab"},slot:"tab"},[a("a-icon",{attrs:{type:"eye"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.tabs.monitor"))+" ")],1),a("div",{staticClass:"tab-body"},["monitor"===t.activeTab?a("PortfolioView",{attrs:{embedded:!0}}):t._e()],1)]),a("a-tab-pane",{key:"polymarket"},[a("span",{attrs:{slot:"tab"},slot:"tab"},[a("a-icon",{attrs:{type:"radar-chart"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.tabs.polymarket"))+" ")],1),a("div",{staticClass:"tab-body"},[a("div",{staticClass:"polymarket-tab-content"},[a("div",{staticClass:"polymarket-placeholder"},[a("div",{staticClass:"placeholder-icon"},[a("a-icon",{attrs:{type:"radar-chart"}})],1),a("h3",[t._v(t._s(t.$t("polymarket.analysis.title")))]),a("p",[t._v(t._s(t.$t("polymarket.analysis.description")))]),a("a-button",{staticStyle:{"margin-top":"16px"},attrs:{type:"primary",size:"large",icon:"thunderbolt"},on:{click:function(a){t.showPolymarketModal=!0}}},[t._v(" "+t._s(t.$t("polymarket.analysis.startAnalysis"))+" ")])],1)])])])],1)],1),a("PolymarketAnalysisModal",{attrs:{visible:t.showPolymarketModal},on:{close:function(a){t.showPolymarketModal=!1}}})],1)},i=[],n=e(81127),o=e(56252),r=e(2403),l=e(76338),c=(e(28706),e(74423),e(34782),e(27495),e(21699),e(25440),e(95353)),p=e(87125),u=e(16185),y=e(44146),d=e(83973),m=(e(42762),function(){var t=this,a=t._self._c;return a("a-modal",{attrs:{visible:t.visible,title:t.$t("polymarket.analysis.title"),width:900,footer:null,maskClosable:!1},on:{cancel:t.handleClose}},[a("div",{staticClass:"polymarket-analysis-modal"},[a("a-tabs",{attrs:{"default-active-key":"analyze"},on:{change:t.handleTabChange}},[a("a-tab-pane",{key:"analyze",attrs:{tab:t.$t("polymarket.analysis.tabAnalyze")}},[t.analysisResult?t._e():a("div",{staticClass:"input-section"},[a("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{message:t.$t("polymarket.analysis.inputHint"),type:"info","show-icon":""}}),a("a-textarea",{attrs:{placeholder:t.$t("polymarket.analysis.inputPlaceholder"),rows:3,disabled:t.analyzing},on:{pressEnter:t.handleAnalyze},model:{value:t.inputText,callback:function(a){t.inputText=a},expression:"inputText"}}),a("div",{staticClass:"input-actions"},[a("a-button",{staticStyle:{width:"100%","margin-top":"12px"},attrs:{type:"primary",size:"large",icon:"thunderbolt",loading:t.analyzing,disabled:!t.inputText.trim()},on:{click:t.handleAnalyze}},[t._v(" "+t._s(t.$t("polymarket.analysis.analyzeButton"))+" ")])],1)],1),t.analysisResult?a("div",{staticClass:"result-section"},[a("div",{staticClass:"market-info"},[a("h3",[t._v(t._s(t.analysisResult.market.question))]),a("div",{staticClass:"market-meta"},[a("a-tag",{attrs:{color:t.getStatusColor(t.analysisResult.market.status)}},[t._v(" "+t._s(t.analysisResult.market.status)+" ")]),a("span",{staticClass:"meta-item"},[a("a-icon",{attrs:{type:"percentage"}}),t._v(" "+t._s(t.analysisResult.market.current_probability)+"% ")],1),t.analysisResult.market.volume_24h?a("span",{staticClass:"meta-item"},[a("a-icon",{attrs:{type:"dollar"}}),t._v(" "+t._s(t.formatVolume(t.analysisResult.market.volume_24h))+" ")],1):t._e(),t.analysisResult.market.polymarket_url?a("a-button",{attrs:{type:"link",size:"small",icon:"link",href:t.analysisResult.market.polymarket_url,target:"_blank"}},[t._v(" "+t._s(t.$t("polymarket.analysis.viewOnPolymarket"))+" ")]):t._e()],1)]),a("div",{staticClass:"analysis-result"},[a("a-divider",[t._v(t._s(t.$t("polymarket.analysis.aiAnalysis")))]),a("div",{staticClass:"probability-comparison"},[a("div",{staticClass:"prob-item"},[a("div",{staticClass:"prob-label"},[t._v(t._s(t.$t("polymarket.analysis.marketProbability")))]),a("div",{staticClass:"prob-value"},[t._v(t._s(t.analysisResult.analysis.market_probability)+"%")])]),a("div",{staticClass:"prob-item"},[a("div",{staticClass:"prob-label"},[t._v(t._s(t.$t("polymarket.analysis.aiPredictedProbability")))]),a("div",{staticClass:"prob-value ai-prob"},[t._v(t._s(t.analysisResult.analysis.ai_predicted_probability)+"%")])]),a("div",{staticClass:"prob-item"},[a("div",{staticClass:"prob-label"},[t._v(t._s(t.$t("polymarket.analysis.divergence")))]),a("div",{staticClass:"prob-value",class:t.getDivergenceClass(t.analysisResult.analysis.divergence)},[t._v(" "+t._s(t.analysisResult.analysis.divergence>=0?"+":"")+t._s(t.analysisResult.analysis.divergence.toFixed(2))+"% ")])])]),a("div",{staticClass:"recommendation-section"},[a("a-row",{attrs:{gutter:16}},[a("a-col",{attrs:{span:8}},[a("div",{staticClass:"rec-card"},[a("div",{staticClass:"rec-label"},[t._v(t._s(t.$t("polymarket.analysis.recommendation")))]),a("a-tag",{staticStyle:{"font-size":"16px",padding:"4px 12px"},attrs:{color:t.getRecommendationColor(t.analysisResult.analysis.recommendation)}},[t._v(" "+t._s(t.getRecommendationLabel(t.analysisResult.analysis.recommendation))+" ")])],1)]),a("a-col",{attrs:{span:8}},[a("div",{staticClass:"rec-card"},[a("div",{staticClass:"rec-label"},[t._v(t._s(t.$t("polymarket.analysis.confidenceScore")))]),a("div",{staticClass:"rec-value"},[t._v(t._s(t.analysisResult.analysis.confidence_score.toFixed(0)))])])]),a("a-col",{attrs:{span:8}},[a("div",{staticClass:"rec-card"},[a("div",{staticClass:"rec-label"},[t._v(t._s(t.$t("polymarket.analysis.opportunityScore")))]),a("div",{staticClass:"rec-value"},[t._v(t._s(t.analysisResult.analysis.opportunity_score.toFixed(0)))])])])],1)],1),t.analysisResult.analysis.reasoning?a("div",{staticClass:"reasoning-section"},[a("h4",[t._v(t._s(t.$t("polymarket.analysis.reasoning")))]),a("p",{staticClass:"reasoning-text"},[t._v(t._s(t.analysisResult.analysis.reasoning))])]):t._e(),t.analysisResult.analysis.key_factors&&t.analysisResult.analysis.key_factors.length>0?a("div",{staticClass:"key-factors-section"},[a("h4",[t._v(t._s(t.$t("polymarket.analysis.keyFactors")))]),t._l(t.analysisResult.analysis.key_factors,function(e,s){return a("a-tag",{key:s,staticStyle:{margin:"4px"},attrs:{color:"blue"}},[t._v(" "+t._s(e)+" ")])})],2):t._e(),t.analysisResult.credits_charged>0?a("div",{staticClass:"billing-info"},[a("a-alert",{staticStyle:{"margin-top":"16px"},attrs:{message:t.$t("polymarket.analysis.creditsCharged",{credits:t.analysisResult.credits_charged}),type:"success","show-icon":""}}),void 0!==t.analysisResult.remaining_credits?a("div",{staticStyle:{"margin-top":"8px","text-align":"right",color:"rgba(0,0,0,0.65)"}},[t._v(" "+t._s(t.$t("polymarket.analysis.remainingCredits",{credits:t.analysisResult.remaining_credits.toFixed(0)}))+" ")]):t._e()],1):t._e()],1),a("div",{staticClass:"result-actions"},[a("a-button",{staticStyle:{"margin-right":"8px"},on:{click:t.handleNewAnalysis}},[t._v(" "+t._s(t.$t("polymarket.analysis.newAnalysis"))+" ")]),a("a-button",{attrs:{type:"primary"},on:{click:t.handleClose}},[t._v(" "+t._s(t.$t("common.close"))+" ")])],1)]):t._e(),t.analyzing?a("div",{staticClass:"loading-section"},[a("a-spin",{attrs:{size:"large"}}),a("p",{staticStyle:{"margin-top":"16px",color:"rgba(0,0,0,0.65)"}},[t._v(" "+t._s(t.$t("polymarket.analysis.analyzing"))+" ")])],1):t._e()]),a("a-tab-pane",{key:"history",attrs:{tab:t.$t("polymarket.analysis.tabHistory")}},[a("div",{staticClass:"history-section"},[a("a-spin",{attrs:{spinning:t.historyLoading}},[a("a-table",{attrs:{columns:t.historyColumns,"data-source":t.historyList,pagination:t.historyPagination,"row-key":function(t){return t.id},size:"small"},on:{change:t.handleHistoryTableChange},scopedSlots:t._u([{key:"market_title",fn:function(e,s){return[a("a-button",{staticStyle:{padding:"0"},attrs:{type:"link"},on:{click:function(a){return t.viewHistoryItem(s)}}},[t._v(" "+t._s(e)+" ")])]}},{key:"recommendation",fn:function(e){return[a("a-tag",{attrs:{color:t.getRecommendationColor(e)}},[t._v(" "+t._s(t.getRecommendationLabel(e))+" ")])]}},{key:"created_at",fn:function(a){return[t._v(" "+t._s(t.formatDateTime(a))+" ")]}}])})],1)],1)])],1)],1)])}),h=[],k=(e(26099),e(75769)),v="/api/polymarket";function g(t){return(0,k.Ay)({url:"".concat(v,"/analyze"),method:"post",data:t,timeout:12e4})}function _(t){return(0,k.Ay)({url:"".concat(v,"/history"),method:"get",params:t})}var b={name:"PolymarketAnalysisModal",props:{visible:{type:Boolean,default:!1}},data:function(){var t=this;return{inputText:"",analyzing:!1,analysisResult:null,activeTab:"analyze",historyLoading:!1,historyList:[],historyPagination:{current:1,pageSize:20,total:0,showSizeChanger:!0,showTotal:function(a){return t.$t("polymarket.analysis.historyTotal",{total:a})}},historyColumns:[]}},methods:{handleAnalyze:function(){var t=this;this.inputText.trim()?(this.analyzing=!0,this.analysisResult=null,g({input:this.inputText.trim(),language:this.$i18n.locale||"zh-CN"}).then(function(a){1===a.code?(t.analysisResult=a.data,t.$message.success(t.$t("polymarket.analysis.success"))):"Insufficient credits"===a.msg?(t.$message.error(t.$t("polymarket.analysis.insufficientCredits")),t.$router.push("/billing")):t.$message.error(a.msg||t.$t("polymarket.analysis.failed"))}).catch(function(a){a.response&&a.response.data&&"Insufficient credits"===a.response.data.msg?(t.$message.error(t.$t("polymarket.analysis.insufficientCredits")),t.$router.push("/billing")):t.$message.error(t.$t("polymarket.analysis.failed"))}).finally(function(){t.analyzing=!1})):this.$message.warning(this.$t("polymarket.analysis.inputRequired"))},handleNewAnalysis:function(){this.inputText="",this.analysisResult=null},handleClose:function(){var t=this;this.$emit("close"),setTimeout(function(){t.inputText="",t.analysisResult=null,t.analyzing=!1},300)},getStatusColor:function(t){var a={active:"green",closed:"default",resolved:"blue"};return a[t]||"default"},getRecommendationColor:function(t){var a={YES:"green",NO:"red",HOLD:"orange"};return a[t]||"default"},getRecommendationLabel:function(t){var a={YES:this.$t("polymarket.analysis.recommendationYes"),NO:this.$t("polymarket.analysis.recommendationNo"),HOLD:this.$t("polymarket.analysis.recommendationHold")};return a[t]||t},getDivergenceClass:function(t){return t>5?"divergence-positive":t<-5?"divergence-negative":"divergence-neutral"},formatVolume:function(t){return t>=1e6?"$".concat((t/1e6).toFixed(2),"M"):t>=1e3?"$".concat((t/1e3).toFixed(2),"K"):"$".concat(t.toFixed(2))},handleTabChange:function(t){this.activeTab=t,"history"===t&&0===this.historyList.length&&this.loadHistory()},loadHistory:function(){var t=this;return(0,o.A)((0,n.A)().m(function a(){var e;return(0,n.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return t.historyLoading=!0,a.p=1,a.n=2,_({page:t.historyPagination.current,page_size:t.historyPagination.pageSize});case 2:e=a.v,1===e.code&&e.data&&(t.historyList=e.data.items||[],t.historyPagination.total=e.data.total||0),a.n=4;break;case 3:a.p=3,a.v,t.$message.error(t.$t("polymarket.analysis.loadHistoryFailed"));case 4:return a.p=4,t.historyLoading=!1,a.f(4);case 5:return a.a(2)}},a,null,[[1,3,4,5]])}))()},handleHistoryTableChange:function(t){this.historyPagination.current=t.current,this.historyPagination.pageSize=t.pageSize,this.loadHistory()},viewHistoryItem:function(t){this.activeTab="analyze",this.analysisResult={market:{question:t.market_title,market_id:t.market_id,polymarket_url:t.market_url,current_probability:t.market_probability,status:"active"},analysis:{ai_predicted_probability:t.ai_predicted_probability,market_probability:t.market_probability,recommendation:t.recommendation,opportunity_score:t.opportunity_score,confidence_score:t.confidence_score}}},formatDateTime:function(t){if(!t)return"";var a=new Date(t);return a.toLocaleString("zh-CN"===this.$i18n.locale?"zh-CN":"en-US")}},mounted:function(){this.historyColumns=[{title:this.$t("polymarket.analysis.historyMarket"),dataIndex:"market_title",key:"market_title",scopedSlots:{customRender:"market_title"}},{title:this.$t("polymarket.analysis.historyRecommendation"),dataIndex:"recommendation",key:"recommendation",width:120,scopedSlots:{customRender:"recommendation"}},{title:this.$t("polymarket.analysis.historyOpportunityScore"),dataIndex:"opportunity_score",key:"opportunity_score",width:120,align:"right"},{title:this.$t("polymarket.analysis.historyCreatedAt"),dataIndex:"created_at",key:"created_at",width:180,scopedSlots:{customRender:"created_at"}}]}},f=b,C=e(845),S=(0,C.A)(f,m,h,!1,null,"41dfa054",null),$=S.exports,A={name:"AIAssetAnalysis",components:{AnalysisView:p["default"],PortfolioView:u["default"],QuickTradePanel:d.A,PolymarketAnalysisModal:$},data:function(){return{activeTab:"quick",opportunities:[],oppLoading:!1,oppHover:!1,presetSymbol:"",autoAnalyzeSignal:0,showQuickTrade:!1,qtSymbol:"",qtSide:"",qtPrice:0,qtSource:"ai_radar",currentAnalysisSymbol:"",currentAnalysisMarket:"",showPolymarketModal:!1}},computed:(0,l.A)((0,l.A)({},(0,c.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},carouselItems:function(){return 0===this.opportunities.length?[]:[].concat((0,r.A)(this.opportunities),(0,r.A)(this.opportunities))},oppTrackStyle:function(){var t=3*this.opportunities.length;return{animationDuration:t+"s"}}}),created:function(){this.loadOpportunities()},methods:{loadOpportunities:function(){var t=arguments,a=this;return(0,o.A)((0,n.A)().m(function e(){var s,i,o;return(0,n.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return s=t.length>0&&void 0!==t[0]&&t[0],a.oppLoading=!0,e.p=1,i=s?{force:!0}:{},e.n=2,(0,y.r9)(i);case 2:o=e.v,o&&1===o.code&&Array.isArray(o.data)&&(a.opportunities=o.data.slice(0,20)),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.p=4,a.oppLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},getSignalColor:function(t){var a={overbought:"volcano",oversold:"green",bullish_momentum:"cyan",bearish_momentum:"red"};return a[t]||"default"},getSignalLabel:function(t){var a="aiAssetAnalysis.opportunities.signal.".concat(t),e=this.$t(a);return e!==a?e:t},getMarketTagColor:function(t){var a={Crypto:"purple",USStock:"green",Forex:"gold",PredictionMarket:"cyan"};return a[t]||"default"},getMarketLabel:function(t){var a="aiAssetAnalysis.opportunities.market.".concat(t),e=this.$t(a);return e!==a?e:t},getReasonText:function(t){var a=(t.market||"Crypto").toLowerCase(),e=t.signal||"",s="aiAssetAnalysis.opportunities.reason.".concat(a,".").concat(e),i=this.$t(s);if(i===s)return t.reason||"";var n=Math.abs(t.change_24h||0).toFixed(1),o=Math.abs(t.change_7d||0).toFixed(1);return i.replace("{change}",n).replace("{change7d}",o)},formatOppPrice:function(t){return t?t>=1e4?(t/1e3).toFixed(1)+"K":t>=1?t.toFixed(2):t.toFixed(4):"--"},analyzeOpportunity:function(t){var a=this;if("PredictionMarket"===t.market)return this.activeTab="polymarket",void(this.showPolymarketModal=!0);this.activeTab="quick";var e=t.market||"Crypto";this.presetSymbol="".concat(e,":").concat(t.symbol),this.$nextTick(function(){a.autoAnalyzeSignal++})},getRecommendationColor:function(t){var a={YES:"green",NO:"red",HOLD:"default"};return a[t]||"default"},getRecommendationLabel:function(t){return this.$t("polymarket.recommendation.".concat(t))||t},onAnalysisSymbolChange:function(t){if(!t)return this.currentAnalysisSymbol="",void(this.currentAnalysisMarket="");var a=t.split(":"),e=a.length>1?a[0]:"Crypto",s=a.length>1?a[1]:a[0];this.currentAnalysisMarket=e,this.currentAnalysisSymbol="Crypto"===e?s:""},openQuickTradeFromCurrent:function(){this.currentAnalysisSymbol&&(this.qtSymbol=this.currentAnalysisSymbol,this.qtSide="",this.qtPrice=0,this.qtSource="ai_analysis",this.showQuickTrade=!0)},openQuickTradeFromOpp:function(t){if("Crypto"===t.market){this.qtSymbol=t.symbol||"";var a=(t.signal||"").toLowerCase();a.includes("oversold")||a.includes("bullish")?this.qtSide="buy":a.includes("overbought")||a.includes("bearish")?this.qtSide="sell":this.qtSide="",this.qtPrice=t.price||0,this.qtSource="ai_radar",this.showQuickTrade=!0}},onQuickTradeSuccess:function(){this.$message.success(this.$t("quickTrade.orderSuccess"))},handleQuickTradeSymbolChange:function(t){t&&(this.qtSymbol=t)}}},T=A,w=(0,C.A)(T,s,i,!1,null,"20b827f5",null),x=w.exports}}]); \ No newline at end of file diff --git a/frontend/dist/js/973-legacy.bf52892c.js b/frontend/dist/js/973-legacy.bf52892c.js new file mode 100644 index 0000000..6bf6dbd --- /dev/null +++ b/frontend/dist/js/973-legacy.bf52892c.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[973],{83973:function(e,t,a){a.d(t,{A:function(){return P}});a(62010),a(27495),a(25440);var i=function(){var e=this,t=e._self._c;return t("a-drawer",{staticClass:"quick-trade-drawer",class:{"theme-dark":e.isDark},attrs:{title:null,width:380,visible:e.visible,closable:!1,bodyStyle:{padding:0},maskStyle:{background:"rgba(0,0,0,0.45)"}},on:{close:e.handleClose}},[t("div",{staticClass:"qt-header"},[t("div",{staticClass:"qt-header-left"},[t("a-icon",{staticClass:"qt-icon",attrs:{type:"thunderbolt",theme:"filled"}}),t("span",{staticClass:"qt-header-title"},[e._v(e._s(e.$t("quickTrade.title")))])],1),t("a-icon",{staticClass:"qt-close",attrs:{type:"close"},on:{click:e.handleClose}})],1),t("div",{staticClass:"qt-symbol-bar"},[t("div",{staticClass:"qt-symbol-selector"},[t("a-select",{staticStyle:{width:"100%"},attrs:{"show-search":"",placeholder:e.$t("quickTrade.selectSymbol"),"filter-option":!1,"not-found-content":e.symbolSearching?null:void 0,loading:e.symbolSearching},on:{search:e.handleSymbolSearch,change:e.handleSymbolChange,focus:e.handleSymbolFocus},model:{value:e.currentSymbol,callback:function(t){e.currentSymbol=t},expression:"currentSymbol"}},[t("a-icon",{staticStyle:{color:"#999"},attrs:{slot:"suffixIcon",type:"search"},slot:"suffixIcon"}),e._l(e.symbolSuggestions,function(a){return t("a-select-option",{key:a.value,attrs:{value:a.value}},[t("div",{staticClass:"qt-symbol-option"},[t("span",{staticClass:"qt-symbol-option-name"},[e._v(e._s(a.symbol))]),a.name?t("span",{staticClass:"qt-symbol-option-desc"},[e._v(e._s(a.name))]):e._e()])])})],2)],1),t("div",{staticClass:"qt-price-display",class:e.priceChangeClass},[t("span",{staticClass:"qt-current-price"},[e._v("$"+e._s(e.formatPrice(e.currentPrice)))])])]),t("div",{staticClass:"qt-section"},[t("div",{staticClass:"qt-label"},[e._v(e._s(e.$t("quickTrade.exchange"))+" "),t("span",{staticClass:"qt-crypto-hint"},[e._v(e._s(e.$t("quickTrade.cryptoOnly")))])]),t("a-select",{staticStyle:{width:"100%"},attrs:{placeholder:e.$t("quickTrade.selectExchange"),loading:e.credLoading,notFoundContent:e.$t("quickTrade.noExchange")},on:{change:e.onCredentialChange},model:{value:e.selectedCredentialId,callback:function(t){e.selectedCredentialId=t},expression:"selectedCredentialId"}},e._l(e.credentials,function(a){return t("a-select-option",{key:a.id,attrs:{value:a.id}},[t("span",{staticStyle:{"text-transform":"capitalize"}},[e._v(e._s(a.exchange_id||a.name))]),a.market_type?t("a-tag",{staticStyle:{"margin-left":"6px"},attrs:{size:"small"}},[e._v(e._s(a.market_type))]):e._e()],1)}),1),e.balance.available>0?t("div",{staticClass:"qt-balance"},[t("span",{staticClass:"qt-balance-label"},[e._v(e._s(e.$t("quickTrade.available"))+":")]),t("span",{staticClass:"qt-balance-value"},[e._v("$"+e._s(e.formatPrice(e.balance.available)))])]):e._e()],1),t("div",{staticClass:"qt-section"},[t("div",{staticClass:"qt-direction-toggle"},[t("div",{staticClass:"qt-dir-btn qt-dir-long",class:{active:"buy"===e.side},on:{click:function(t){e.side="buy"}}},[t("a-icon",{attrs:{type:"arrow-up"}}),e._v(" "+e._s(e.$t("quickTrade.long"))+" ")],1),t("div",{staticClass:"qt-dir-btn qt-dir-short",class:{active:"sell"===e.side},on:{click:function(t){e.side="sell"}}},[t("a-icon",{attrs:{type:"arrow-down"}}),e._v(" "+e._s(e.$t("quickTrade.short"))+" ")],1)])]),t("div",{staticClass:"qt-section"},[t("a-radio-group",{staticStyle:{width:"100%"},attrs:{"button-style":"solid",size:"small"},model:{value:e.orderType,callback:function(t){e.orderType=t},expression:"orderType"}},[t("a-radio-button",{staticStyle:{width:"50%","text-align":"center"},attrs:{value:"market"}},[e._v(" "+e._s(e.$t("quickTrade.market"))+" ")]),t("a-radio-button",{staticStyle:{width:"50%","text-align":"center"},attrs:{value:"limit"}},[e._v(" "+e._s(e.$t("quickTrade.limit"))+" ")])],1)],1),"limit"===e.orderType?t("div",{staticClass:"qt-section"},[t("div",{staticClass:"qt-label"},[e._v(e._s(e.$t("quickTrade.limitPrice")))]),t("a-input-number",{staticStyle:{width:"100%"},attrs:{min:0,step:e.priceStep,precision:e.pricePrecision,placeholder:e.$t("quickTrade.enterPrice")},model:{value:e.limitPrice,callback:function(t){e.limitPrice=t},expression:"limitPrice"}})],1):e._e(),t("div",{staticClass:"qt-section"},[t("div",{staticClass:"qt-label"},[e._v(e._s(e.$t("quickTrade.amount"))+" (USDT)")]),t("a-input-number",{staticStyle:{width:"100%"},attrs:{min:1,step:10,precision:2,placeholder:e.$t("quickTrade.enterAmount")},model:{value:e.amount,callback:function(t){e.amount=t},expression:"amount"}}),t("div",{staticClass:"qt-quick-amounts"},e._l(e.quickAmountPcts,function(a){return t("a-button",{key:a,attrs:{size:"small",disabled:e.balance.available<=0},on:{click:function(t){return e.setAmountByPercent(a)}}},[e._v(" "+e._s(a)+"% ")])}),1)],1),"spot"!==e.marketType?t("div",{staticClass:"qt-section"},[t("div",{staticClass:"qt-label"},[e._v(e._s(e.$t("quickTrade.leverage")))]),t("div",{staticClass:"qt-leverage-row"},[t("a-slider",{staticStyle:{flex:"1","margin-right":"12px"},attrs:{min:1,max:125,marks:e.leverageMarks,tipFormatter:function(e){return e+"x"}},model:{value:e.leverage,callback:function(t){e.leverage=t},expression:"leverage"}}),t("a-input-number",{staticStyle:{width:"80px"},attrs:{min:1,max:125,formatter:function(e){return"".concat(e,"x")},parser:function(e){return e.replace("x","")}},model:{value:e.leverage,callback:function(t){e.leverage=t},expression:"leverage"}})],1)]):e._e(),t("a-collapse",{staticStyle:{background:"transparent",margin:"0 16px"},attrs:{bordered:!1}},[t("a-collapse-panel",{key:"tpsl",style:e.collapseStyle,attrs:{header:e.$t("quickTrade.tpsl")}},[t("div",{staticClass:"qt-tpsl-row"},[t("div",{staticClass:"qt-tpsl-item"},[t("span",{staticClass:"qt-label",staticStyle:{color:"#52c41a"}},[e._v(e._s(e.$t("quickTrade.tp")))]),t("a-input-number",{staticStyle:{width:"100%"},attrs:{min:0,step:e.priceStep,precision:e.pricePrecision,placeholder:e.$t("quickTrade.tpPlaceholder")},model:{value:e.tpPrice,callback:function(t){e.tpPrice=t},expression:"tpPrice"}})],1),t("div",{staticClass:"qt-tpsl-item"},[t("span",{staticClass:"qt-label",staticStyle:{color:"#f5222d"}},[e._v(e._s(e.$t("quickTrade.sl")))]),t("a-input-number",{staticStyle:{width:"100%"},attrs:{min:0,step:e.priceStep,precision:e.pricePrecision,placeholder:e.$t("quickTrade.slPlaceholder")},model:{value:e.slPrice,callback:function(t){e.slPrice=t},expression:"slPrice"}})],1)])])],1),t("div",{staticClass:"qt-submit-section"},[t("a-button",{staticClass:"qt-submit-btn",class:["buy"===e.side?"qt-btn-long":"qt-btn-short"],attrs:{type:"buy"===e.side?"primary":"danger",size:"large",block:"",loading:e.submitting,disabled:!e.canSubmit},on:{click:e.handleSubmit}},[t("a-icon",{attrs:{type:"buy"===e.side?"arrow-up":"arrow-down"}}),e._v(" "+e._s("buy"===e.side?e.$t("quickTrade.buyLong"):e.$t("quickTrade.sellShort"))+" "+e._s(e.symbol)+" ")],1)],1),t("div",{staticClass:"qt-position-section"},[t("div",{staticClass:"qt-section-header"},[t("a-icon",{attrs:{type:"wallet"}}),e._v(" "+e._s(e.$t("quickTrade.currentPosition"))+" ")],1),e.currentPosition?t("div",{staticClass:"qt-position-card",class:e.currentPosition.side},[t("div",{staticClass:"qt-pos-row"},[t("span",[e._v(e._s(e.$t("quickTrade.side")))]),t("a-tag",{attrs:{color:"long"===e.currentPosition.side?"#52c41a":"#f5222d",size:"small"}},[e._v(" "+e._s("long"===e.currentPosition.side?e.$t("quickTrade.long"):e.$t("quickTrade.short"))+" ")])],1),t("div",{staticClass:"qt-pos-row"},[t("span",[e._v(e._s(e.$t("quickTrade.posSize")))]),t("span",[e._v(e._s(e.currentPosition.size))])]),t("div",{staticClass:"qt-pos-row"},[t("span",[e._v(e._s(e.$t("quickTrade.entryPrice")))]),t("span",[e._v("$"+e._s(e.formatPrice(e.currentPosition.entry_price)))])]),e.currentPosition.mark_price?t("div",{staticClass:"qt-pos-row"},[t("span",[e._v(e._s(e.$t("quickTrade.markPrice")))]),t("span",[e._v("$"+e._s(e.formatPrice(e.currentPosition.mark_price)))])]):e._e(),e.currentPosition.leverage&&e.currentPosition.leverage>1?t("div",{staticClass:"qt-pos-row"},[t("span",[e._v(e._s(e.$t("quickTrade.leverage")))]),t("span",[e._v(e._s(e.currentPosition.leverage)+"x")])]):e._e(),t("div",{staticClass:"qt-pos-row"},[t("span",[e._v(e._s(e.$t("quickTrade.unrealizedPnl")))]),t("span",{class:e.currentPosition.unrealized_pnl>=0?"qt-green":"qt-red"},[e._v(" $"+e._s(e.formatPrice(e.currentPosition.unrealized_pnl))+" ")])]),t("a-button",{staticStyle:{"margin-top":"8px"},attrs:{type:"danger",size:"small",block:"",ghost:"",loading:e.closingPosition},on:{click:e.handleClosePosition}},[e._v(" "+e._s(e.$t("quickTrade.closePosition"))+" ")])],1):t("div",{staticClass:"qt-position-empty"},[t("a-empty",{staticStyle:{padding:"20px 0"},attrs:{description:e.$t("quickTrade.noPosition"),image:!1}},[t("template",{slot:"description"},[t("span",{staticStyle:{color:"#999","font-size":"12px"}},[e._v(e._s(e.$t("quickTrade.noPositionHint")))])])],2)],1)]),e.recentTrades.length>0?t("div",{staticClass:"qt-history-section"},[t("a-collapse",{attrs:{bordered:!1,activeKey:e.historyCollapsed?[]:["history"]},on:{change:e.handleHistoryCollapse}},[t("a-collapse-panel",{key:"history",style:e.collapseStyle,attrs:{showArrow:!1}},[t("template",{slot:"header"},[t("div",{staticClass:"qt-section-header",staticStyle:{margin:"0",padding:"0"}},[t("a-icon",{attrs:{type:"history"}}),e._v(" "+e._s(e.$t("quickTrade.recentTrades"))+" "),t("span",{staticClass:"qt-history-count"},[e._v("("+e._s(e.recentTrades.length)+")")])],1)]),t("div",{staticClass:"qt-trade-list"},e._l(e.recentTrades,function(a){return t("div",{key:a.id,staticClass:"qt-trade-item"},[t("div",{staticClass:"qt-trade-main"},[t("a-tag",{attrs:{color:"buy"===a.side?"#52c41a":"#f5222d",size:"small"}},[e._v(" "+e._s("buy"===a.side?"LONG":"SHORT")+" ")]),t("span",{staticClass:"qt-trade-symbol"},[e._v(e._s(a.symbol))]),t("span",{staticClass:"qt-trade-amount"},[e._v("$"+e._s(e.formatPrice(a.amount)))])],1),t("div",{staticClass:"qt-trade-meta"},[t("a-tag",{attrs:{color:"filled"===a.status?"#52c41a":"failed"===a.status?"#f5222d":"#faad14",size:"small"}},[e._v(" "+e._s(a.status)+" ")]),t("span",{staticClass:"qt-trade-time"},[e._v(e._s(e.formatTime(a.created_at)))])],1)])}),0)],2)],1)],1):e._e()],1)},r=[],s=a(81127),n=a(56252),c=a(76338),l=(a(28706),a(2008),a(74423),a(62062),a(2892),a(26099),a(21699),a(68156),a(42762),a(95353)),o=a(42430),u=a(75769);function d(e){return(0,u.Ay)({url:"/api/quick-trade/place-order",method:"post",data:e})}function m(e){return(0,u.Ay)({url:"/api/quick-trade/balance",method:"get",params:e})}function p(e){return(0,u.Ay)({url:"/api/quick-trade/position",method:"get",params:e})}function h(e){return(0,u.Ay)({url:"/api/quick-trade/history",method:"get",params:e})}function v(e){return(0,u.Ay)({url:"/api/quick-trade/close-position",method:"post",data:e})}var b=a(35038),y=a(505),f={name:"QuickTradePanel",props:{visible:{type:Boolean,default:!1},symbol:{type:String,default:""},presetSide:{type:String,default:""},presetPrice:{type:Number,default:0},source:{type:String,default:"manual"},marketType:{type:String,default:"swap"}},data:function(){return{credentials:[],selectedCredentialId:void 0,credLoading:!1,balance:{available:0,total:0},side:"buy",orderType:"market",limitPrice:0,amount:100,leverage:5,tpPrice:null,slPrice:null,submitting:!1,closingPosition:!1,currentPrice:0,currentPosition:null,recentTrades:[],historyCollapsed:!1,currentSymbol:"",symbolSuggestions:[],symbolSearching:!1,symbolSearchTimer:null,userId:null,quickAmountPcts:[10,25,50,75,100],leverageMarks:{1:"1x",5:"5x",10:"10x",25:"25x",50:"50x",100:"100x",125:"125x"},pollTimer:null}},computed:(0,c.A)((0,c.A)({},(0,l.aH)({navTheme:function(e){return e.app.theme}})),{},{isDark:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},priceStep:function(){return this.currentPrice>1e4?1:this.currentPrice>100?.1:this.currentPrice>1?.01:1e-4},pricePrecision:function(){return this.currentPrice>1e4?0:this.currentPrice>100?1:this.currentPrice>1?2:4},canSubmit:function(){return this.selectedCredentialId&&this.currentSymbol&&this.amount>0&&!this.submitting},priceChangeClass:function(){return""},collapseStyle:function(){return{background:"transparent",borderRadius:"4px",border:0,overflow:"hidden"}}}),watch:{visible:function(e){e?this.init():this.stopPolling()},symbol:function(e){e&&(this.currentSymbol=e)},currentSymbol:function(e){e&&(this.loadPrice(),this.selectedCredentialId&&this.loadPosition(),this.$emit("update:symbol",e))},selectedCredentialId:function(e){e&&this.currentSymbol&&this.loadPosition()},presetSide:function(e){e&&(this.side=e)},presetPrice:function(e){e>0&&(this.currentPrice=e,this.limitPrice=e)}},methods:{init:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){return(0,s.A)().w(function(t){while(1)switch(t.n){case 0:return e.currentSymbol=e.symbol||"",e.presetSide&&(e.side=e.presetSide),e.presetPrice>0&&(e.currentPrice=e.presetPrice,e.limitPrice=e.presetPrice),t.n=1,e.loadCredentials();case 1:return t.n=2,e.loadUserInfo();case 2:return t.n=3,e.loadWatchlistSymbols();case 3:if(!e.currentSymbol){t.n=4;break}return t.n=4,e.loadPrice();case 4:if(!e.selectedCredentialId||!e.currentSymbol){t.n=5;break}return t.n=5,e.loadPosition();case 5:e.loadHistory(),e.startPolling();case 6:return t.a(2)}},t)}))()},loadUserInfo:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){var a,i,r,n;return(0,s.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(t.p=0,i=e.$store,r=(null===i||void 0===i||null===(a=i.getters)||void 0===a?void 0:a.userInfo)||{},!r||!r.id){t.n=1;break}return e.userId=r.id,t.a(2);case 1:return t.n=2,(0,y.ug)();case 2:n=t.v,n&&1===n.code&&n.data&&(e.userId=n.data.id,i&&i.commit("SET_INFO",n.data)),t.n=4;break;case 3:t.p=3,t.v;case 4:return t.a(2)}},t,null,[[0,3]])}))()},loadWatchlistSymbols:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){var a,i;return(0,s.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e.userId){t.n=2;break}return t.n=1,e.loadUserInfo();case 1:if(e.userId){t.n=2;break}return t.a(2);case 2:return t.p=2,t.n=3,(0,b.Qo)({userid:e.userId});case 3:a=t.v,a&&1===a.code&&a.data&&(i=(a.data||[]).filter(function(e){return"crypto"===(e.market||"").toLowerCase()}).map(function(e){return{value:e.symbol||"",symbol:e.symbol||"",name:e.name||""}}).filter(function(e){return e.value}),e.symbolSuggestions=i),t.n=5;break;case 4:t.p=4,t.v;case 5:return t.a(2)}},t,null,[[2,4]])}))()},handleSymbolSearch:function(e){var t=this;this.symbolSearchTimer&&clearTimeout(this.symbolSearchTimer),e&&""!==e.trim()?this.symbolSearchTimer=setTimeout((0,n.A)((0,s.A)().m(function a(){var i;return(0,s.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return t.symbolSearching=!0,a.p=1,a.n=2,(0,b._3)({market:"Crypto",keyword:e.trim(),limit:20});case 2:i=a.v,i&&1===i.code&&i.data?t.symbolSuggestions=(i.data.items||i.data||[]).map(function(e){return{value:e.symbol||"",symbol:e.symbol||"",name:e.name||""}}).filter(function(e){return e.value}):t.symbolSuggestions=[],a.n=4;break;case 3:a.p=3,a.v,t.symbolSuggestions=[];case 4:return a.p=4,t.symbolSearching=!1,a.f(4);case 5:return a.a(2)}},a,null,[[1,3,4,5]])})),300):this.loadWatchlistSymbols()},handleSymbolChange:function(e){e&&e!==this.currentSymbol&&(this.currentSymbol=e,this.loadPrice(),this.selectedCredentialId&&this.loadPosition(),this.$emit("update:symbol",e))},loadPrice:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){var a,i;return(0,s.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e.currentSymbol){t.n=1;break}return e.currentPrice=0,t.a(2);case 1:return t.p=1,t.n=2,(0,u.Ay)({url:"/api/market/price",method:"get",params:{market:"Crypto",symbol:e.currentSymbol}});case 2:a=t.v,a&&1===a.code&&a.data&&(i=parseFloat(a.data.price||0),i>0&&(e.currentPrice=i,0!==e.limitPrice&&e.limitPrice!==e.presetPrice||(e.limitPrice=i))),t.n=4;break;case 3:t.p=3,t.v;case 4:return t.a(2)}},t,null,[[1,3]])}))()},handleSymbolFocus:function(){0===this.symbolSuggestions.length&&this.loadWatchlistSymbols()},loadCredentials:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){var a,i,r;return(0,s.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.credLoading=!0,t.p=1,t.n=2,(0,o.IA)();case 2:a=t.v,1===a.code&&a.data&&(i=a.data.items||a.data||[],r=["ibkr","mt5"],e.credentials=i.filter(function(e){var t=(e.exchange_id||e.name||"").toLowerCase();return!r.includes(t)}),!e.selectedCredentialId&&e.credentials.length>0&&(e.selectedCredentialId=e.credentials[0].id,e.onCredentialChange(e.selectedCredentialId))),t.n=4;break;case 3:t.p=3,t.v;case 4:return t.p=4,e.credLoading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},onCredentialChange:function(e){var t=this;return(0,n.A)((0,s.A)().m(function a(){return(0,s.A)().w(function(a){while(1)switch(a.n){case 0:return t.selectedCredentialId=e,a.n=1,t.loadBalance();case 1:return a.n=2,t.loadPosition();case 2:return a.a(2)}},a)}))()},loadBalance:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){var a;return(0,s.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e.selectedCredentialId){t.n=1;break}return t.a(2);case 1:return t.p=1,t.n=2,m({credential_id:e.selectedCredentialId,market_type:e.marketType});case 2:a=t.v,1===a.code&&a.data&&(e.balance=a.data),t.n=4;break;case 3:t.p=3,t.v;case 4:return t.a(2)}},t,null,[[1,3]])}))()},loadPosition:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){var a;return(0,s.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e.selectedCredentialId&&e.currentSymbol){t.n=1;break}return t.a(2);case 1:return t.p=1,t.n=2,p({credential_id:e.selectedCredentialId,symbol:e.currentSymbol,market_type:e.marketType});case 2:if(a=t.v,!(1===a.code&&a.data&&a.data.positions&&a.data.positions.length>0)){t.n=3;break}return e.currentPosition=a.data.positions[0],t.a(2,!0);case 3:return e.currentPosition=null,t.a(2,!1);case 4:t.n=6;break;case 5:return t.p=5,t.v,e.currentPosition=null,t.a(2,!1);case 6:return t.a(2)}},t,null,[[1,5]])}))()},loadPositionWithRetry:function(){var e=arguments,t=this;return(0,n.A)((0,s.A)().m(function a(){var i,r,n,c;return(0,s.A)().w(function(a){while(1)switch(a.n){case 0:return i=e.length>0&&void 0!==e[0]?e[0]:3,r=e.length>1&&void 0!==e[1]?e[1]:2e3,a.n=1,t.loadPosition();case 1:if(n=a.v,!n){a.n=2;break}return a.a(2);case 2:c=0;case 3:if(!(c0&&(this.amount=Math.floor(this.balance.available*e/100*100)/100)},handleSubmit:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){var a,i,r;return(0,s.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e.canSubmit){t.n=1;break}return t.a(2);case 1:return e.submitting=!0,t.p=2,a={credential_id:e.selectedCredentialId,symbol:e.currentSymbol,side:e.side,order_type:e.orderType,amount:e.amount,price:"limit"===e.orderType?e.limitPrice:0,leverage:"spot"!==e.marketType?e.leverage:1,market_type:e.marketType,tp_price:e.tpPrice||0,sl_price:e.slPrice||0,source:e.source},t.n=3,d(a);case 3:if(i=t.v,1!==i.code){t.n=7;break}return e.$emit("order-success",i.data),t.n=4,e.loadBalance();case 4:return t.n=5,e.loadHistory();case 5:return t.n=6,e.loadPositionWithRetry();case 6:t.n=8;break;case 7:e.$message.error(i.msg||e.$t("quickTrade.orderFailed"));case 8:t.n=10;break;case 9:t.p=9,r=t.v,e.$message.error(r.message||e.$t("quickTrade.orderFailed"));case 10:return t.p=10,e.submitting=!1,t.f(10);case 11:return t.a(2)}},t,null,[[2,9,10,11]])}))()},handleClosePosition:function(){var e=this;return(0,n.A)((0,s.A)().m(function t(){var a,i,r;return(0,s.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e.currentPosition&&e.selectedCredentialId){t.n=1;break}return t.a(2);case 1:return e.closingPosition=!0,t.p=2,a={credential_id:e.selectedCredentialId,symbol:e.currentSymbol,market_type:e.marketType,size:0,source:"manual"},t.n=3,v(a);case 3:if(i=t.v,1!==i.code){t.n=6;break}return e.$message.success(e.$t("quickTrade.positionClosed")),t.n=4,e.loadBalance();case 4:return t.n=5,e.loadHistory();case 5:e.currentPosition=null,setTimeout((0,n.A)((0,s.A)().m(function t(){return(0,s.A)().w(function(t){while(1)switch(t.n){case 0:return t.n=1,e.loadPosition();case 1:return t.a(2)}},t)})),2e3),t.n=7;break;case 6:e.$message.error(i.msg||e.$t("quickTrade.orderFailed"));case 7:t.n=9;break;case 8:t.p=8,r=t.v,e.$message.error(r.message||e.$t("quickTrade.orderFailed"));case 9:return t.p=9,e.closingPosition=!1,t.f(9);case 10:return t.a(2)}},t,null,[[2,8,9,10]])}))()},startPolling:function(){var e=this;this.stopPolling(),this.pollTimer=setInterval(function(){e.currentSymbol&&e.loadPrice(),e.selectedCredentialId&&e.currentSymbol&&(e.loadBalance(),e.loadPosition())},1e4)},stopPolling:function(){this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=null)},handleClose:function(){this.$emit("close"),this.$emit("update:visible",!1)},handleHistoryCollapse:function(e){this.historyCollapsed=!e.includes("history")},formatPrice:function(e){var t=parseFloat(e||0);return Math.abs(t)>=1e4?t.toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:0}):Math.abs(t)>=100?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):Math.abs(t)>=1?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:4}):t.toLocaleString("en-US",{minimumFractionDigits:4,maximumFractionDigits:6})},formatTime:function(e){if(!e)return"";var t=new Date(e),a=function(e){return String(e).padStart(2,"0")};return"".concat(a(t.getMonth()+1),"-").concat(a(t.getDate())," ").concat(a(t.getHours()),":").concat(a(t.getMinutes()))}},beforeDestroy:function(){this.stopPolling()}},g=f,k=a(845),_=(0,k.A)(g,i,r,!1,null,"0d547552",null),P=_.exports},42430:function(e,t,a){a.d(t,{IA:function(){return n},PR:function(){return c},kI:function(){return l}});var i=a(76338),r=a(75769),s={list:"/api/credentials/list",get:"/api/credentials/get",create:"/api/credentials/create",delete:"/api/credentials/delete"};function n(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,r.Ay)({url:s.list,method:"get",params:e})}function c(e){return(0,r.Ay)({url:s.create,method:"post",data:e})}function l(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(0,r.Ay)({url:s.delete,method:"delete",params:(0,i.A)({id:e},t)})}}}]); \ No newline at end of file diff --git a/frontend/dist/js/978-legacy.9dbb6f43.js b/frontend/dist/js/978-legacy.9dbb6f43.js new file mode 100644 index 0000000..0b0602f --- /dev/null +++ b/frontend/dist/js/978-legacy.9dbb6f43.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[978],{5978:function(t,e,a){a.r(e),a.d(e,{default:function(){return F}});a(52675),a(89463),a(28706),a(62010);var i=function(){var t=this,e=t._self._c;return e("div",{staticClass:"indicator-community-container",class:{"theme-dark":t.isDarkTheme}},[t.isAdmin?e("a-tabs",{staticClass:"admin-tabs",on:{change:t.handleTabChange},model:{value:t.activeTab,callback:function(e){t.activeTab=e},expression:"activeTab"}},[e("a-tab-pane",{key:"market",attrs:{tab:t.$t("community.title")}}),e("a-tab-pane",{key:"review"},[e("template",{slot:"tab"},[e("a-badge",{attrs:{count:t.reviewStats.pending,offset:[10,0]}},[t._v(" "+t._s(t.$t("community.admin.reviewTab"))+" ")])],1)],2)],1):t._e(),e("div",{directives:[{name:"show",rawName:"v-show",value:"market"===t.activeTab,expression:"activeTab === 'market'"}],staticClass:"market-header"},[e("div",{staticClass:"header-left"},[e("h2",{staticClass:"page-title"},[e("a-icon",{attrs:{type:"shop"}}),t._v(" "+t._s(t.$t("community.title"))+" ")],1)]),e("div",{staticClass:"header-right"},[e("a-input-search",{staticStyle:{width:"240px"},attrs:{placeholder:t.$t("community.searchPlaceholder"),"allow-clear":""},on:{search:t.handleSearch,pressEnter:t.handleSearch},model:{value:t.filters.keyword,callback:function(e){t.$set(t.filters,"keyword",e)},expression:"filters.keyword"}}),e("a-radio-group",{attrs:{"button-style":"solid"},on:{change:t.handleFilterChange},model:{value:t.filters.pricingType,callback:function(e){t.$set(t.filters,"pricingType",e)},expression:"filters.pricingType"}},[e("a-radio-button",{attrs:{value:""}},[t._v(t._s(t.$t("community.all")))]),e("a-radio-button",{attrs:{value:"free"}},[t._v(t._s(t.$t("community.freeOnly")))]),e("a-radio-button",{attrs:{value:"paid"}},[t._v(t._s(t.$t("community.paidOnly")))])],1),e("a-select",{staticStyle:{width:"140px"},on:{change:t.handleFilterChange},model:{value:t.filters.sortBy,callback:function(e){t.$set(t.filters,"sortBy",e)},expression:"filters.sortBy"}},[e("a-select-option",{attrs:{value:"newest"}},[t._v(t._s(t.$t("community.sortNewest")))]),e("a-select-option",{attrs:{value:"hot"}},[t._v(t._s(t.$t("community.sortHot")))]),e("a-select-option",{attrs:{value:"rating"}},[t._v(t._s(t.$t("community.sortRating")))]),e("a-select-option",{attrs:{value:"price_asc"}},[t._v(t._s(t.$t("community.sortPriceLow")))]),e("a-select-option",{attrs:{value:"price_desc"}},[t._v(t._s(t.$t("community.sortPriceHigh")))])],1),e("a-button",{attrs:{type:"link"},on:{click:function(e){t.showMyPurchases=!0}}},[e("a-icon",{attrs:{type:"shopping"}}),t._v(" "+t._s(t.$t("community.myPurchases"))+" ")],1)],1)]),"market"===t.activeTab?[e("a-spin",{attrs:{spinning:t.loading}},[0!==t.indicators.length||t.loading?e("div",{staticClass:"indicator-grid"},t._l(t.indicators,function(a){return e("indicator-card",{key:a.id,attrs:{indicator:a},on:{click:function(e){return t.openDetail(a)}}})}),1):e("div",{staticClass:"empty-state"},[e("a-empty",{attrs:{description:t.$t("community.noIndicators")}},[e("a-button",{attrs:{type:"primary"},on:{click:t.goToCreate}},[t._v(" "+t._s(t.$t("community.createFirst"))+" ")])],1)],1)]),t.pagination.total>0?e("div",{staticClass:"pagination-wrapper"},[e("a-pagination",{attrs:{current:t.pagination.current,total:t.pagination.total,"page-size":t.pagination.pageSize,"show-total":function(e){return"".concat(t.$t("community.total")," ").concat(e," ").concat(t.$t("community.items"))},"show-quick-jumper":""},on:{change:t.handlePageChange}})],1):t._e()]:t._e(),"review"===t.activeTab&&t.isAdmin?[e("div",{staticClass:"review-panel"},[e("div",{staticClass:"review-header"},[e("a-radio-group",{attrs:{"button-style":"solid"},on:{change:t.loadPendingIndicators},model:{value:t.reviewFilter,callback:function(e){t.reviewFilter=e},expression:"reviewFilter"}},[e("a-radio-button",{attrs:{value:"pending"}},[e("a-badge",{attrs:{count:t.reviewStats.pending,offset:[8,-2],"number-style":{backgroundColor:"#faad14"}}},[t._v(" "+t._s(t.$t("community.admin.pending"))+" ")])],1),e("a-radio-button",{attrs:{value:"approved"}},[t._v(" "+t._s(t.$t("community.admin.approved"))+" ("+t._s(t.reviewStats.approved)+") ")]),e("a-radio-button",{attrs:{value:"rejected"}},[t._v(" "+t._s(t.$t("community.admin.rejected"))+" ("+t._s(t.reviewStats.rejected)+") ")])],1)],1),e("a-spin",{attrs:{spinning:t.reviewLoading}},[0!==t.pendingIndicators.length||t.reviewLoading?e("div",{staticClass:"review-list"},t._l(t.pendingIndicators,function(a){return e("div",{key:a.id,staticClass:"review-item"},[e("div",{staticClass:"review-item-header"},[e("div",{staticClass:"item-info"},[e("span",{staticClass:"item-name"},[t._v(t._s(a.name))]),"free"===a.pricing_type?e("a-tag",{attrs:{color:"green"}},[t._v(t._s(t.$t("community.free")))]):e("a-tag",{attrs:{color:"orange"}},[t._v(t._s(a.price)+" "+t._s(t.$t("community.credits")))]),e("a-tag",{attrs:{color:t.getStatusColor(a.review_status)}},[t._v(t._s(t.getStatusText(a.review_status)))])],1),e("div",{staticClass:"item-author"},[e("a-avatar",{attrs:{src:a.author.avatar,size:"small"}}),e("span",[t._v(t._s(a.author.nickname||a.author.username))]),e("span",{staticClass:"item-time"},[t._v(t._s(t.formatDate(a.created_at)))])],1)]),e("div",{staticClass:"review-item-body"},[e("div",{staticClass:"item-desc"},[t._v(t._s(a.description||t.$t("community.admin.noDescription")))]),a.code?e("div",{staticClass:"item-code"},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.toggleCode(a.id)}}},[e("a-icon",{attrs:{type:t.expandedCodes[a.id]?"up":"down"}}),t._v(" "+t._s(t.$t("community.admin.viewCode"))+" ")],1),t.expandedCodes[a.id]?e("pre",{staticClass:"code-preview"},[t._v(t._s(a.code))]):t._e()],1):t._e(),a.review_note?e("div",{staticClass:"review-note"},[e("a-icon",{attrs:{type:"info-circle"}}),t._v(" "+t._s(t.$t("community.admin.note"))+": "+t._s(a.review_note)+" ")],1):t._e()]),e("div",{staticClass:"review-item-actions"},["pending"===a.review_status?[e("a-button",{attrs:{type:"primary",size:"small"},on:{click:function(e){return t.handleReview(a,"approve")}}},[e("a-icon",{attrs:{type:"check"}}),t._v(" "+t._s(t.$t("community.admin.approve"))+" ")],1),e("a-button",{attrs:{type:"danger",size:"small"},on:{click:function(e){return t.handleReview(a,"reject")}}},[e("a-icon",{attrs:{type:"close"}}),t._v(" "+t._s(t.$t("community.admin.reject"))+" ")],1)]:"approved"===a.review_status?[e("a-button",{attrs:{size:"small"},on:{click:function(e){return t.handleUnpublish(a)}}},[e("a-icon",{attrs:{type:"stop"}}),t._v(" "+t._s(t.$t("community.admin.unpublish"))+" ")],1)]:t._e(),e("a-popconfirm",{attrs:{title:t.$t("community.admin.deleteConfirm")},on:{confirm:function(e){return t.handleDelete(a)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}}),t._v(" "+t._s(t.$t("community.admin.delete"))+" ")],1)],1)],2)])}),0):e("div",{staticClass:"empty-state"},[e("a-empty",{attrs:{description:t.$t("community.admin.noItems")}})],1)]),t.reviewPagination.total>0?e("div",{staticClass:"pagination-wrapper"},[e("a-pagination",{attrs:{current:t.reviewPagination.current,total:t.reviewPagination.total,"page-size":t.reviewPagination.pageSize,"show-total":function(e){return"".concat(t.$t("community.total")," ").concat(e," ").concat(t.$t("community.items"))}},on:{change:t.handleReviewPageChange}})],1):t._e()],1)]:t._e(),e("a-modal",{attrs:{title:"approve"===t.reviewAction?t.$t("community.admin.approveTitle"):t.$t("community.admin.rejectTitle"),"ok-text":"approve"===t.reviewAction?t.$t("community.admin.approve"):t.$t("community.admin.reject"),"ok-button-props":{props:{type:"approve"===t.reviewAction?"primary":"danger"}}},on:{ok:t.submitReview},model:{value:t.showReviewModal,callback:function(e){t.showReviewModal=e},expression:"showReviewModal"}},[e("a-form",{attrs:{layout:"vertical"}},[e("a-form-item",{attrs:{label:t.$t("community.admin.noteLabel")}},[e("a-textarea",{attrs:{placeholder:t.$t("community.admin.notePlaceholder"),rows:3},model:{value:t.reviewNote,callback:function(e){t.reviewNote=e},expression:"reviewNote"}})],1)],1)],1),e("indicator-detail",{attrs:{visible:t.detailVisible,"indicator-id":t.selectedIndicatorId,"current-user-id":t.currentUserId},on:{close:function(e){t.detailVisible=!1},purchased:t.handlePurchased}}),e("a-modal",{attrs:{title:t.$t("community.myPurchases"),footer:null,width:"600px"},model:{value:t.showMyPurchases,callback:function(e){t.showMyPurchases=e},expression:"showMyPurchases"}},[e("a-spin",{attrs:{spinning:t.purchasesLoading}},[0===t.myPurchases.length?e("div",{staticClass:"empty-purchases"},[e("a-empty",{attrs:{description:t.$t("community.noPurchases")}})],1):e("a-list",{attrs:{"data-source":t.myPurchases,"item-layout":"horizontal"},scopedSlots:t._u([{key:"renderItem",fn:function(a){return e("a-list-item",{scopedSlots:t._u([{key:"actions",fn:function(){return[e("a-button",{attrs:{type:"link",size:"small"},on:{click:t.goToUse}},[t._v(" "+t._s(t.$t("community.useNow"))+" ")])]},proxy:!0}])},[e("a-list-item-meta",{scopedSlots:t._u([{key:"title",fn:function(){return[e("a",{on:{click:function(e){return t.openDetailById(a.indicator.id)}}},[t._v(t._s(a.indicator.name))])]},proxy:!0},{key:"description",fn:function(){return[e("div",[t._v(t._s(t.$t("community.purchasedFrom"))+": "+t._s(a.seller.nickname))]),e("div",[t._v(t._s(t.$t("community.purchaseTime"))+": "+t._s(t.formatDate(a.purchase_time)))])]},proxy:!0}],null,!0)})],1)}}])})],1)],1)],2)},n=[],s=a(81127),r=a(56252),o=a(76338),c=(a(2892),a(95353)),d=function(){var t=this,e=t._self._c;return e("a-card",{staticClass:"indicator-card",attrs:{hoverable:"","body-style":{padding:"12px"}},on:{click:function(e){return t.$emit("click",t.indicator)}}},[e("div",{staticClass:"card-cover",style:t.coverStyle},[t.indicator.preview_image&&!t.imageError?e("img",{attrs:{src:t.indicator.preview_image,alt:t.indicator.name},on:{error:t.handleImageError}}):e("div",{staticClass:"default-cover",style:{background:t.coverGradient}},[e("span",{staticClass:"cover-title"},[t._v(t._s(t.indicatorInitials))]),e("span",{staticClass:"cover-subtitle"},[t._v(t._s(t.indicator.name))])]),e("div",{staticClass:"price-tag",class:t.isPaid?"paid":"free"},[t._v(" "+t._s(t.isPaid?"".concat(t.indicator.price," ").concat(t.$t("community.credits")):t.$t("community.free"))+" ")]),t.indicator.vip_free?e("div",{staticClass:"vip-free-tag"},[t._v(" "+t._s(t.$t("community.vipFree"))+" ")]):t._e(),t.indicator.is_own?e("div",{staticClass:"own-tag"},[t._v(" "+t._s(t.$t("community.myIndicator"))+" ")]):t.indicator.is_purchased?e("div",{staticClass:"purchased-tag"},[e("a-icon",{attrs:{type:"check-circle"}}),t._v(" "+t._s(t.$t("community.purchased"))+" ")],1):t._e()]),e("div",{staticClass:"card-content"},[e("h3",{staticClass:"card-title",attrs:{title:t.indicator.name}},[t._v(t._s(t.indicator.name))]),e("p",{staticClass:"card-desc"},[t._v(t._s(t.indicator.description||t.$t("community.noDescription")))]),e("div",{staticClass:"card-author"},[e("a-avatar",{attrs:{src:t.indicator.author.avatar,size:24}}),e("span",{staticClass:"author-name"},[t._v(t._s(t.indicator.author.nickname||t.indicator.author.username))])],1),e("div",{staticClass:"card-stats"},[e("span",{staticClass:"stat-item"},[e("a-icon",{attrs:{type:"download"}}),t._v(" "+t._s(t.indicator.purchase_count||0)+" ")],1),e("span",{staticClass:"stat-item"},[e("a-icon",{style:{color:"#faad14"},attrs:{type:"star",theme:"filled"}}),t._v(" "+t._s(t.formatRating(t.indicator.avg_rating))+" ")],1),e("span",{staticClass:"stat-item"},[e("a-icon",{attrs:{type:"eye"}}),t._v(" "+t._s(t.indicator.view_count||0)+" ")],1)])])])},m=[],l=(a(34782),a(9868),a(27495),a(90744),["linear-gradient(135deg, #667eea 0%, #764ba2 100%)","linear-gradient(135deg, #f093fb 0%, #f5576c 100%)","linear-gradient(135deg, #4facfe 0%, #00f2fe 100%)","linear-gradient(135deg, #43e97b 0%, #38f9d7 100%)","linear-gradient(135deg, #fa709a 0%, #fee140 100%)","linear-gradient(135deg, #a8edea 0%, #fed6e3 100%)","linear-gradient(135deg, #d299c2 0%, #fef9d7 100%)","linear-gradient(135deg, #89f7fe 0%, #66a6ff 100%)","linear-gradient(135deg, #fddb92 0%, #d1fdff 100%)","linear-gradient(135deg, #9890e3 0%, #b1f4cf 100%)","linear-gradient(135deg, #ebc0fd 0%, #d9ded8 100%)","linear-gradient(135deg, #f6d365 0%, #fda085 100%)"]),u={name:"IndicatorCard",props:{indicator:{type:Object,required:!0}},data:function(){return{imageError:!1}},computed:{isPaid:function(){return"free"!==this.indicator.pricing_type&&this.indicator.price>0},coverGradient:function(){var t=(this.indicator.id||0)%l.length;return l[t]},indicatorInitials:function(){var t=this.indicator.name||"I";if(/[\u4e00-\u9fa5]/.test(t))return t.slice(0,2);var e=t.split(/\s+/);return e.length>=2?(e[0][0]+e[1][0]).toUpperCase():t.slice(0,2).toUpperCase()},coverStyle:function(){return{background:!this.indicator.preview_image||this.imageError?this.coverGradient:"#f5f5f5"}}},methods:{formatRating:function(t){var e=parseFloat(t)||0;return e>0?e.toFixed(1):"-"},handleImageError:function(){this.imageError=!0}}},p=u,v=a(845),h=(0,v.A)(p,d,m,!1,null,"b59176ee",null),g=h.exports,f=function(){var t=this,e=t._self._c;return e("a-modal",{staticClass:"indicator-detail-modal",attrs:{visible:t.visible,title:null,footer:null,width:720,"body-style":{padding:0}},on:{cancel:function(e){return t.$emit("close")}}},[e("a-spin",{attrs:{spinning:t.loading}},[t.detail?e("div",{staticClass:"detail-container"},[e("div",{staticClass:"detail-header",style:t.headerStyle},[t.detail.preview_image?e("div",{staticClass:"header-cover"},[e("img",{attrs:{src:t.detail.preview_image,alt:t.detail.name},on:{error:function(e){t.imageError=!0}}})]):e("div",{staticClass:"header-cover default-cover"},[e("span",{staticClass:"cover-initials"},[t._v(t._s(t.indicatorInitials))])]),e("div",{staticClass:"header-info"},[e("h2",{staticClass:"indicator-name"},[t._v(t._s(t.detail.name))]),e("div",{staticClass:"indicator-meta"},[e("div",{staticClass:"author-info"},[e("a-avatar",{attrs:{src:t.detail.author.avatar,size:32}}),e("span",{staticClass:"author-name"},[t._v(t._s(t.detail.author.nickname||t.detail.author.username))])],1),e("div",{staticClass:"publish-time"},[t._v(" "+t._s(t.$t("community.publishedAt"))+": "+t._s(t.formatDate(t.detail.created_at))+" ")])]),e("div",{staticClass:"indicator-stats"},[e("a-statistic",{attrs:{title:t.$t("community.downloads"),value:t.detail.purchase_count||0},scopedSlots:t._u([{key:"prefix",fn:function(){return[e("a-icon",{attrs:{type:"download"}})]},proxy:!0}],null,!1,3253357727)}),e("a-statistic",{attrs:{title:t.$t("community.rating")},scopedSlots:t._u([{key:"formatter",fn:function(){return[e("a-rate",{style:{fontSize:"14px"},attrs:{value:t.detail.avg_rating,disabled:"","allow-half":""}}),e("span",{staticClass:"rating-text"},[t._v("("+t._s(t.detail.rating_count||0)+")")])]},proxy:!0}],null,!1,1010155712)}),e("a-statistic",{attrs:{title:t.$t("community.views"),value:t.detail.view_count||0},scopedSlots:t._u([{key:"prefix",fn:function(){return[e("a-icon",{attrs:{type:"eye"}})]},proxy:!0}],null,!1,3492011442)})],1)])]),e("div",{staticClass:"detail-body"},[e("div",{staticClass:"section"},[e("h3",[t._v(t._s(t.$t("community.description")))]),e("p",{staticClass:"description"},[t._v(t._s(t.detail.description||t.$t("community.noDescription")))])]),t.performance?e("div",{staticClass:"section"},[e("h3",[t._v(t._s(t.$t("community.performance")))]),e("div",{staticClass:"performance-grid"},[e("div",{staticClass:"perf-item"},[e("div",{staticClass:"perf-label"},[t._v(t._s(t.$t("community.strategyCount")))]),e("div",{staticClass:"perf-value"},[t._v(t._s(t.performance.strategy_count))])]),e("div",{staticClass:"perf-item"},[e("div",{staticClass:"perf-label"},[t._v(t._s(t.$t("community.tradeCount")))]),e("div",{staticClass:"perf-value"},[t._v(t._s(t.performance.trade_count))])]),e("div",{staticClass:"perf-item"},[e("div",{staticClass:"perf-label"},[t._v(t._s(t.$t("community.winRate")))]),e("div",{staticClass:"perf-value",class:t.performance.win_rate>=50?"positive":"negative"},[t._v(" "+t._s(t.performance.win_rate)+"% ")])]),e("div",{staticClass:"perf-item"},[e("div",{staticClass:"perf-label"},[t._v(t._s(t.$t("community.totalProfit")))]),e("div",{staticClass:"perf-value",class:t.performance.total_profit>=0?"positive":"negative"},[t._v(" "+t._s(t.performance.total_profit>=0?"+":"")+t._s(t.performance.total_profit)+" ")])])])]):t._e(),e("div",{staticClass:"section"},[e("h3",[t._v(t._s(t.$t("community.reviews"))+" ("+t._s(t.comments.total||0)+")")]),e("comment-list",{attrs:{comments:t.comments.items,loading:t.commentsLoading,"can-comment":t.detail.is_purchased&&!t.detail.is_own&&!t.myComment,"current-user-id":t.currentUserId,"my-comment":t.myComment,total:t.comments.total},on:{"add-comment":t.handleAddComment,"update-comment":t.handleUpdateComment,"load-more":t.loadMoreComments}})],1)]),e("div",{staticClass:"detail-footer"},[e("div",{staticClass:"price-info"},[t.detail.vip_free?e("a-tag",{staticStyle:{"margin-right":"8px"},attrs:{color:"gold"}},[t._v(" "+t._s(t.$t("community.vipFree"))+" ")]):t._e(),"free"===t.detail.pricing_type||t.detail.price<=0?e("span",{staticClass:"free-badge"},[t._v(" "+t._s(t.$t("community.free"))+" ")]):e("span",{staticClass:"price-badge"},[t._v(" "+t._s(t.detail.price)+" "+t._s(t.$t("community.credits"))+" ")])],1),e("div",{staticClass:"action-buttons"},[t.detail.is_own?e("a-button",{attrs:{disabled:""}},[t._v(" "+t._s(t.$t("community.myIndicator"))+" ")]):t.detail.is_purchased?e("a-button",{attrs:{type:"primary"},on:{click:t.goToUse}},[e("a-icon",{attrs:{type:"code"}}),t._v(" "+t._s(t.$t("community.useNow"))+" ")],1):e("a-button",{attrs:{type:"primary",loading:t.purchasing},on:{click:t.handlePurchase}},[e("a-icon",{attrs:{type:"shopping-cart"}}),t._v(" "+t._s("free"===t.detail.pricing_type||t.detail.price<=0?t.$t("community.getFree"):t.$t("community.buyNow"))+" ")],1)],1)])]):t._e()])],1)},y=[],_=a(2403),w=function(){var t=this,e=t._self._c;return e("div",{staticClass:"comment-list"},[t.canComment||t.isEditing?e("div",{staticClass:"comment-form"},[t.isEditing?e("div",{staticClass:"form-header"},[e("span",{staticClass:"edit-label"},[t._v(t._s(t.$t("community.editComment")))]),e("a-button",{attrs:{type:"link",size:"small"},on:{click:t.cancelEdit}},[t._v(t._s(t.$t("community.cancelEdit")))])],1):t._e(),e("div",{staticClass:"rating-input"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("community.yourRating"))+":")]),e("a-rate",{model:{value:t.formData.rating,callback:function(e){t.$set(t.formData,"rating",e)},expression:"formData.rating"}})],1),e("a-textarea",{attrs:{placeholder:t.$t("community.commentPlaceholder"),rows:3,"max-length":500},model:{value:t.formData.content,callback:function(e){t.$set(t.formData,"content",e)},expression:"formData.content"}}),e("div",{staticClass:"form-actions"},[e("span",{staticClass:"char-count"},[t._v(t._s(t.formData.content.length)+"/500")]),e("a-button",{attrs:{type:"primary",size:"small",loading:t.submitting},on:{click:t.submitComment}},[t._v(" "+t._s(t.isEditing?t.$t("community.updateComment"):t.$t("community.submitComment"))+" ")])],1)],1):!t.myComment||t.canComment||t.isEditing?t._e():e("div",{staticClass:"my-comment-hint"},[e("a-icon",{attrs:{type:"check-circle",theme:"twoTone","two-tone-color":"#52c41a"}}),e("span",[t._v(t._s(t.$t("community.alreadyCommented")))]),e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.startEdit(t.myComment)}}},[t._v(" "+t._s(t.$t("community.editMyComment"))+" ")])],1),e("a-spin",{attrs:{spinning:t.loading}},[0===t.comments.length?e("div",{staticClass:"empty-comments"},[e("a-empty",{attrs:{description:t.$t("community.noComments")}})],1):e("div",{staticClass:"comments"},t._l(t.comments,function(a){return e("div",{key:a.id,staticClass:"comment-item",class:{"is-mine":a.user&&a.user.id===t.currentUserId}},[e("div",{staticClass:"comment-header"},[e("a-avatar",{attrs:{src:a.user&&a.user.avatar,size:36}}),e("div",{staticClass:"comment-meta"},[e("div",{staticClass:"user-name"},[t._v(" "+t._s(a.user&&a.user.nickname)+" "),a.user&&a.user.id===t.currentUserId?e("a-tag",{attrs:{size:"small",color:"blue"}},[t._v(t._s(t.$t("community.me")))]):t._e()],1),e("div",{staticClass:"comment-info"},[e("a-rate",{style:{fontSize:"12px"},attrs:{value:a.rating,disabled:""}}),e("span",{staticClass:"comment-time"},[t._v(t._s(t.formatTime(a.created_at)))]),a.updated_at&&a.updated_at!==a.created_at?e("span",{staticClass:"edited-tag"},[t._v(" ("+t._s(t.$t("community.edited"))+") ")]):t._e()],1)]),a.user&&a.user.id===t.currentUserId?e("div",{staticClass:"comment-actions"},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.startEdit(a)}}},[e("a-icon",{attrs:{type:"edit"}})],1)],1):t._e()],1),e("div",{staticClass:"comment-content"},[t._v(t._s(a.content))])])}),0)]),t.hasMore?e("div",{staticClass:"load-more"},[e("a-button",{attrs:{type:"link"},on:{click:function(e){return t.$emit("load-more")}}},[t._v(" "+t._s(t.$t("community.loadMore"))+" ")])],1):t._e()],1)},C=[],$=(a(42762),{name:"CommentList",props:{comments:{type:Array,default:function(){return[]}},total:{type:Number,default:0},loading:{type:Boolean,default:!1},canComment:{type:Boolean,default:!1},currentUserId:{type:[Number,String],default:null},myComment:{type:Object,default:null}},data:function(){return{submitting:!1,isEditing:!1,editingCommentId:null,formData:{rating:5,content:""}}},computed:{hasMore:function(){return this.comments.length=2?(e[0][0]+e[1][0]).toUpperCase():t.slice(0,2).toUpperCase()}},watch:{visible:function(t){t&&this.indicatorId?(this.loadDetail(),this.loadPerformance(),this.loadComments(1),this.loadMyComment()):this.resetData()}},methods:{resetData:function(){this.detail=null,this.performance=null,this.comments={items:[],total:0,page:1},this.myComment=null},loadDetail:function(){var t=this;return(0,r.A)((0,s.A)().m(function e(){var a;return(0,s.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loading=!0,e.p=1,e.n=2,(0,I.Ay)({url:"/api/community/indicators/".concat(t.indicatorId),method:"get"});case 2:a=e.v,1===a.code?t.detail=a.data:t.$message.error(a.msg||t.$t("community.loadFailed")),e.n=4;break;case 3:e.p=3,e.v,t.$message.error(t.$t("community.loadFailed"));case 4:return e.p=4,t.loading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},loadPerformance:function(){var t=this;return(0,r.A)((0,s.A)().m(function e(){var a;return(0,s.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,I.Ay)({url:"/api/community/indicators/".concat(t.indicatorId,"/performance"),method:"get"});case 1:a=e.v,1===a.code&&(t.performance=a.data),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadComments:function(){var t=arguments,e=this;return(0,r.A)((0,s.A)().m(function a(){var i,n;return(0,s.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return i=t.length>0&&void 0!==t[0]?t[0]:1,e.commentsLoading=!0,a.p=1,a.n=2,(0,I.Ay)({url:"/api/community/indicators/".concat(e.indicatorId,"/comments"),method:"get",params:{page:i,page_size:10}});case 2:n=a.v,1===n.code&&(e.comments.items=1===i?n.data.items:[].concat((0,_.A)(e.comments.items),(0,_.A)(n.data.items)),e.comments.total=n.data.total,e.comments.page=i),a.n=4;break;case 3:a.p=3,a.v;case 4:return a.p=4,e.commentsLoading=!1,a.f(4);case 5:return a.a(2)}},a,null,[[1,3,4,5]])}))()},loadMoreComments:function(){this.comments.items.lengthi&&(t.pagination.current=i)):t.$message.error(a.msg||t.$t("community.loadFailed")),e.n=4;break;case 3:e.p=3,e.v,t.$message.error(t.$t("community.loadFailed"));case 4:return e.p=4,t.loading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},loadMyPurchases:function(){var t=this;return(0,r.A)((0,s.A)().m(function e(){var a;return(0,s.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.purchasesLoading=!0,e.p=1,e.n=2,(0,I.Ay)({url:"/api/community/my-purchases",method:"get",params:{page:1,page_size:50}});case 2:a=e.v,1===a.code&&(t.myPurchases=a.data.items||[]),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.p=4,t.purchasesLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleSearch:function(){this.pagination.current=1,this.loadIndicators()},handleFilterChange:function(){this.pagination.current=1,this.loadIndicators()},handlePageChange:function(t){this.pagination.current=Number(t||1),this.loadIndicators()},openDetail:function(t){this.selectedIndicatorId=t.id,this.detailVisible=!0},openDetailById:function(t){this.showMyPurchases=!1,this.selectedIndicatorId=t,this.detailVisible=!0},handlePurchased:function(){this.loadIndicators()},goToCreate:function(){this.$router.push("/indicator-analysis")},goToUse:function(){this.showMyPurchases=!1,this.$router.push("/indicator-analysis")},formatDate:function(t){return t?new Date(t).toLocaleString():"-"},handleTabChange:function(t){"review"===t&&(this.loadPendingIndicators(),this.loadReviewStats())},loadReviewStats:function(){var t=this;return(0,r.A)((0,s.A)().m(function e(){var a;return(0,s.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,I.Ay)({url:"/api/community/admin/review-stats",method:"get"});case 1:a=e.v,1===a.code&&(t.reviewStats=a.data||{pending:0,approved:0,rejected:0}),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadPendingIndicators:function(){var t=this;return(0,r.A)((0,s.A)().m(function e(){var a;return(0,s.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.reviewLoading=!0,e.p=1,e.n=2,(0,I.Ay)({url:"/api/community/admin/pending-indicators",method:"get",params:{page:t.reviewPagination.current,page_size:t.reviewPagination.pageSize,review_status:t.reviewFilter}});case 2:a=e.v,1===a.code&&(t.pendingIndicators=a.data.items||[],t.reviewPagination.total=Number(a.data.total||0)),e.n=4;break;case 3:e.p=3,e.v,t.$message.error(t.$t("community.admin.loadFailed"));case 4:return e.p=4,t.reviewLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleReviewPageChange:function(t){this.reviewPagination.current=Number(t||1),this.loadPendingIndicators()},toggleCode:function(t){this.$set(this.expandedCodes,t,!this.expandedCodes[t])},getStatusColor:function(t){var e={pending:"orange",approved:"green",rejected:"red"};return e[t]||"default"},getStatusText:function(t){var e={pending:this.$t("community.admin.pending"),approved:this.$t("community.admin.approved"),rejected:this.$t("community.admin.rejected")};return e[t]||t},handleReview:function(t,e){this.reviewingIndicator=t,this.reviewAction=e,this.reviewNote="",this.showReviewModal=!0},submitReview:function(){var t=this;return(0,r.A)((0,s.A)().m(function e(){var a;return(0,s.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.reviewingIndicator){e.n=1;break}return e.a(2);case 1:return e.p=1,e.n=2,(0,I.Ay)({url:"/api/community/admin/indicators/".concat(t.reviewingIndicator.id,"/review"),method:"post",data:{action:t.reviewAction,note:t.reviewNote}});case 2:a=e.v,1===a.code?(t.$message.success(t.$t("community.admin.reviewSuccess")),t.showReviewModal=!1,t.loadPendingIndicators(),t.loadReviewStats()):t.$message.error(a.msg||t.$t("community.admin.reviewFailed")),e.n=4;break;case 3:e.p=3,e.v,t.$message.error(t.$t("community.admin.reviewFailed"));case 4:return e.a(2)}},e,null,[[1,3]])}))()},handleUnpublish:function(t){var e=this;return(0,r.A)((0,s.A)().m(function a(){return(0,s.A)().w(function(a){while(1)switch(a.n){case 0:e.$confirm({title:e.$t("community.admin.unpublishConfirm"),content:e.$t("community.admin.unpublishHint"),okText:e.$t("community.admin.confirm"),cancelText:e.$t("community.admin.cancel"),onOk:function(){var a=(0,r.A)((0,s.A)().m(function a(){var i;return(0,s.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,I.Ay)({url:"/api/community/admin/indicators/".concat(t.id,"/unpublish"),method:"post",data:{note:""}});case 1:i=a.v,1===i.code?(e.$message.success(e.$t("community.admin.unpublishSuccess")),e.loadPendingIndicators(),e.loadReviewStats()):e.$message.error(i.msg||e.$t("community.admin.unpublishFailed")),a.n=3;break;case 2:a.p=2,a.v,e.$message.error(e.$t("community.admin.unpublishFailed"));case 3:return a.a(2)}},a,null,[[0,2]])}));function i(){return a.apply(this,arguments)}return i}()});case 1:return a.a(2)}},a)}))()},handleDelete:function(t){var e=this;return(0,r.A)((0,s.A)().m(function a(){var i;return(0,s.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,I.Ay)({url:"/api/community/admin/indicators/".concat(t.id),method:"delete"});case 1:i=a.v,1===i.code?(e.$message.success(e.$t("community.admin.deleteSuccess")),e.loadPendingIndicators(),e.loadReviewStats()):e.$message.error(i.msg||e.$t("community.admin.deleteFailed")),a.n=3;break;case 2:a.p=2,a.v,e.$message.error(e.$t("community.admin.deleteFailed"));case 3:return a.a(2)}},a,null,[[0,2]])}))()}}},z=T,M=(0,v.A)(z,i,n,!1,null,"f59e48f0",null),F=M.exports}}]); \ No newline at end of file diff --git a/frontend/dist/js/app-legacy.73c5f6b0.js b/frontend/dist/js/app-legacy.73c5f6b0.js new file mode 100644 index 0000000..e44b317 --- /dev/null +++ b/frontend/dist/js/app-legacy.73c5f6b0.js @@ -0,0 +1 @@ +(function(){var e={35358:function(e,t,a){var i={"./af":25177,"./af.js":25177,"./ar":61509,"./ar-dz":41488,"./ar-dz.js":41488,"./ar-kw":58676,"./ar-kw.js":58676,"./ar-ly":42353,"./ar-ly.js":42353,"./ar-ma":24496,"./ar-ma.js":24496,"./ar-ps":6947,"./ar-ps.js":6947,"./ar-sa":82682,"./ar-sa.js":82682,"./ar-tn":89756,"./ar-tn.js":89756,"./ar.js":61509,"./az":95533,"./az.js":95533,"./be":28959,"./be.js":28959,"./bg":47777,"./bg.js":47777,"./bm":54903,"./bm.js":54903,"./bn":61290,"./bn-bd":17357,"./bn-bd.js":17357,"./bn.js":61290,"./bo":31545,"./bo.js":31545,"./br":11470,"./br.js":11470,"./bs":44429,"./bs.js":44429,"./ca":7306,"./ca.js":7306,"./cs":56464,"./cs.js":56464,"./cv":73635,"./cv.js":73635,"./cy":64226,"./cy.js":64226,"./da":93601,"./da.js":93601,"./de":77853,"./de-at":26111,"./de-at.js":26111,"./de-ch":54697,"./de-ch.js":54697,"./de.js":77853,"./dv":60708,"./dv.js":60708,"./el":54691,"./el.js":54691,"./en-au":53872,"./en-au.js":53872,"./en-ca":28298,"./en-ca.js":28298,"./en-gb":56195,"./en-gb.js":56195,"./en-ie":66584,"./en-ie.js":66584,"./en-il":65543,"./en-il.js":65543,"./en-in":9033,"./en-in.js":9033,"./en-nz":79402,"./en-nz.js":79402,"./en-sg":43004,"./en-sg.js":43004,"./eo":32934,"./eo.js":32934,"./es":97650,"./es-do":20838,"./es-do.js":20838,"./es-mx":17730,"./es-mx.js":17730,"./es-us":56575,"./es-us.js":56575,"./es.js":97650,"./et":3035,"./et.js":3035,"./eu":3508,"./eu.js":3508,"./fa":119,"./fa.js":119,"./fi":90527,"./fi.js":90527,"./fil":95995,"./fil.js":95995,"./fo":52477,"./fo.js":52477,"./fr":85498,"./fr-ca":26435,"./fr-ca.js":26435,"./fr-ch":37892,"./fr-ch.js":37892,"./fr.js":85498,"./fy":37071,"./fy.js":37071,"./ga":41734,"./ga.js":41734,"./gd":70217,"./gd.js":70217,"./gl":77329,"./gl.js":77329,"./gom-deva":32124,"./gom-deva.js":32124,"./gom-latn":93383,"./gom-latn.js":93383,"./gu":95050,"./gu.js":95050,"./he":11713,"./he.js":11713,"./hi":43861,"./hi.js":43861,"./hr":26308,"./hr.js":26308,"./hu":90609,"./hu.js":90609,"./hy-am":17160,"./hy-am.js":17160,"./id":74063,"./id.js":74063,"./is":89374,"./is.js":89374,"./it":88383,"./it-ch":21827,"./it-ch.js":21827,"./it.js":88383,"./ja":23827,"./ja.js":23827,"./jv":89722,"./jv.js":89722,"./ka":41794,"./ka.js":41794,"./kk":27088,"./kk.js":27088,"./km":96870,"./km.js":96870,"./kn":84451,"./kn.js":84451,"./ko":63164,"./ko.js":63164,"./ku":98174,"./ku-kmr":6181,"./ku-kmr.js":6181,"./ku.js":98174,"./ky":78474,"./ky.js":78474,"./lb":79680,"./lb.js":79680,"./lo":15867,"./lo.js":15867,"./lt":45766,"./lt.js":45766,"./lv":69532,"./lv.js":69532,"./me":58076,"./me.js":58076,"./mi":41848,"./mi.js":41848,"./mk":30306,"./mk.js":30306,"./ml":73739,"./ml.js":73739,"./mn":99053,"./mn.js":99053,"./mr":86169,"./mr.js":86169,"./ms":73386,"./ms-my":92297,"./ms-my.js":92297,"./ms.js":73386,"./mt":77075,"./mt.js":77075,"./my":72264,"./my.js":72264,"./nb":22274,"./nb.js":22274,"./ne":8235,"./ne.js":8235,"./nl":92572,"./nl-be":43784,"./nl-be.js":43784,"./nl.js":92572,"./nn":54566,"./nn.js":54566,"./oc-lnc":69330,"./oc-lnc.js":69330,"./pa-in":29849,"./pa-in.js":29849,"./pl":94418,"./pl.js":94418,"./pt":79834,"./pt-br":48303,"./pt-br.js":48303,"./pt.js":79834,"./ro":24457,"./ro.js":24457,"./ru":82271,"./ru.js":82271,"./sd":1221,"./sd.js":1221,"./se":33478,"./se.js":33478,"./si":17538,"./si.js":17538,"./sk":5784,"./sk.js":5784,"./sl":46637,"./sl.js":46637,"./sq":86794,"./sq.js":86794,"./sr":45719,"./sr-cyrl":3322,"./sr-cyrl.js":3322,"./sr.js":45719,"./ss":56e3,"./ss.js":56e3,"./sv":41011,"./sv.js":41011,"./sw":40748,"./sw.js":40748,"./ta":11025,"./ta.js":11025,"./te":11885,"./te.js":11885,"./tet":28861,"./tet.js":28861,"./tg":86571,"./tg.js":86571,"./th":55802,"./th.js":55802,"./tk":59527,"./tk.js":59527,"./tl-ph":29231,"./tl-ph.js":29231,"./tlh":31052,"./tlh.js":31052,"./tr":85096,"./tr.js":85096,"./tzl":79846,"./tzl.js":79846,"./tzm":81765,"./tzm-latn":97711,"./tzm-latn.js":97711,"./tzm.js":81765,"./ug-cn":48414,"./ug-cn.js":48414,"./uk":16618,"./uk.js":16618,"./ur":57777,"./ur.js":57777,"./uz":57609,"./uz-latn":72475,"./uz-latn.js":72475,"./uz.js":57609,"./vi":21135,"./vi.js":21135,"./x-pseudo":64051,"./x-pseudo.js":64051,"./yo":82218,"./yo.js":82218,"./zh-cn":52648,"./zh-cn.js":52648,"./zh-hk":1632,"./zh-hk.js":1632,"./zh-mo":31541,"./zh-mo.js":31541,"./zh-tw":50304,"./zh-tw.js":50304};function s(e){var t=o(e);return a(t)}function o(e){if(!a.o(i,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return i[e]}s.keys=function(){return Object.keys(i)},s.resolve=o,e.exports=s,s.id=35358},505:function(e,t,a){"use strict";a.d(t,{iD:function(){return o},ri:function(){return l},ug:function(){return r}});var i=a(75769),s={Login:"/api/auth/login",Logout:"/api/auth/logout",UserInfo:"/api/auth/info",UserMenu:"/user/nav"};function o(e){return(0,i.Ay)({url:s.Login,method:"post",data:e})}function n(){return(0,i.Ay)({url:s.UserInfo,method:"get",headers:{"Content-Type":"application/json;charset=UTF-8"}})}function r(){return n()}function l(){return(0,i.Ay)({url:s.Logout,method:"post",headers:{"Content-Type":"application/json;charset=UTF-8"}})}},36911:function(e,t,a){"use strict";a.d(t,{EM:function(){return o},GF:function(){return g},KP:function(){return v},Ke:function(){return d},Ox:function(){return r},P7:function(){return l},UH:function(){return m},WM:function(){return n},Yx:function(){return b},kv:function(){return h},mV:function(){return c},oK:function(){return y},tq:function(){return f},ul:function(){return A},v_:function(){return u},xQ:function(){return p}});var i=a(75769),s={strategies:"/api/strategies",strategyDetail:"/api/strategies/detail",createStrategy:"/api/strategies/create",batchCreateStrategies:"/api/strategies/batch-create",updateStrategy:"/api/strategies/update",stopStrategy:"/api/strategies/stop",startStrategy:"/api/strategies/start",deleteStrategy:"/api/strategies/delete",batchStartStrategies:"/api/strategies/batch-start",batchStopStrategies:"/api/strategies/batch-stop",batchDeleteStrategies:"/api/strategies/batch-delete",testConnection:"/api/strategies/test-connection",trades:"/api/strategies/trades",positions:"/api/strategies/positions",equityCurve:"/api/strategies/equityCurve",notifications:"/api/strategies/notifications",unreadNotificationCount:"/api/strategies/notifications/unread-count"};function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,i.Ay)({url:s.strategies,method:"get",params:e})}function n(e){return(0,i.Ay)({url:s.createStrategy,method:"post",data:e})}function r(e){return(0,i.Ay)({url:s.batchCreateStrategies,method:"post",data:e})}function l(e,t){return(0,i.Ay)({url:s.updateStrategy,method:"put",params:{id:e},data:t})}function d(e){return(0,i.Ay)({url:s.stopStrategy,method:"post",params:{id:e}})}function c(e){return(0,i.Ay)({url:s.startStrategy,method:"post",params:{id:e}})}function u(e){return(0,i.Ay)({url:s.deleteStrategy,method:"delete",params:{id:e}})}function m(e){return(0,i.Ay)({url:s.batchStartStrategies,method:"post",data:e})}function g(e){return(0,i.Ay)({url:s.batchStopStrategies,method:"post",data:e})}function p(e){return(0,i.Ay)({url:s.batchDeleteStrategies,method:"delete",data:e})}function h(e){return(0,i.Ay)({url:s.testConnection,method:"post",data:{exchange_config:e}})}function f(e){return(0,i.Ay)({url:s.trades,method:"get",params:{id:e}})}function y(e){return(0,i.Ay)({url:s.positions,method:"get",params:{id:e}})}function b(e){return(0,i.Ay)({url:s.equityCurve,method:"get",params:{id:e}})}function v(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,i.Ay)({url:s.notifications,method:"get",params:e})}function A(){return(0,i.Ay)({url:s.unreadNotificationCount,method:"get"})}},45958:function(e,t,a){"use strict";var i=a(76338),s=a(1512),o=a(3508),n=a.n(o),r={antLocale:s.A,momentName:"eu",momentLocale:n()},l={"common.confirm":"Confirm","common.cancel":"Cancel","common.save":"Save","common.delete":"Delete","common.edit":"Edit","common.add":"Add","common.close":"Close","common.done":"Done","common.ok":"OK","common.loading":"Loading...","common.noData":"No data",submit:"Submit",save:"Save","submit.ok":"Submit successfully","save.ok":"Saved successfully","menu.welcome":"Welcome","menu.home":"Home","menu.dashboard":"Dashboard","menu.dashboard.analysis":"AI Analysis","menu.dashboard.aiAssetAnalysis":"AI Asset Analysis","menu.dashboard.aiQuant":"AI Quant","menu.dashboard.indicator":"Indicator Analysis","menu.dashboard.community":"Indicator Market","menu.dashboard.tradingAssistant":"Trading Assistant","menu.dashboard.portfolio":"Portfolio","menu.dashboard.globalMarket":"Global Market","menu.dashboard.polymarket":"Prediction Markets","menu.settings":"Settings","menu.dashboard.aiTradingAssistant":"AI Trading Assistant","menu.dashboard.signalRobot":"Signal Robot","menu.dashboard.monitor":"Monitor","menu.dashboard.workplace":"Workplace","aiAssetAnalysis.title":"AI Asset Analysis","aiAssetAnalysis.subtitle":"Unify portfolio monitoring, instant analysis, and scheduled tasks into one smooth workflow.","aiAssetAnalysis.actions.quickAnalysis":"Start Analysis Now","aiAssetAnalysis.actions.monitorTasks":"Manage Monitor Tasks","aiAssetAnalysis.actions.openStandalone":"Open Standalone Page","aiAssetAnalysis.quickBar.title":"Quick Analyze","aiAssetAnalysis.quickBar.placeholder":"Select a symbol from asset pool","aiAssetAnalysis.quickBar.useInQuick":"Use in Instant Analysis","aiAssetAnalysis.quickBar.runNow":"Analyze Now","aiAssetAnalysis.history.title":"Recent Analysis","aiAssetAnalysis.history.empty":"No analysis history yet","aiAssetAnalysis.actions.enterQuick":"Go to Instant Analysis","aiAssetAnalysis.actions.enterMonitor":"Go to Asset Pool & Tasks","aiAssetAnalysis.flow.poolTitle":"Build Asset Pool","aiAssetAnalysis.flow.poolDesc":"Add positions and watch targets first to build one unified analysis pool.","aiAssetAnalysis.flow.poolAction":"Manage Asset Pool","aiAssetAnalysis.flow.quickTitle":"Instant Analysis","aiAssetAnalysis.flow.quickDesc":"Run AI analysis for any symbol in one click and get suggestions quickly.","aiAssetAnalysis.flow.quickAction":"Run Analysis","aiAssetAnalysis.flow.autoTitle":"Scheduled Monitoring","aiAssetAnalysis.flow.autoDesc":"Set recurring AI analysis tasks and deliver reports through notification channels.","aiAssetAnalysis.flow.autoAction":"Configure Tasks","aiAssetAnalysis.tabs.quick":"Instant Analysis","aiAssetAnalysis.tabs.monitor":"Asset Pool & Scheduled Tasks","aiAssetAnalysis.tabLead.quick":"Best for ad-hoc decisions: select a symbol and analyze immediately.","aiAssetAnalysis.tabLead.monitor":"Best for continuous tracking: maintain positions and set monitor ranges/frequency.","aiAssetAnalysis.stats.totalAnalyses":"Total Analyses","aiAssetAnalysis.stats.accuracy":"Accuracy","aiAssetAnalysis.stats.avgReturn":"Avg Return","aiAssetAnalysis.stats.satisfaction":"Satisfaction","aiAssetAnalysis.stats.decisions":"Decision Dist.","aiAssetAnalysis.opportunities.title":"AI Opportunity Radar","aiAssetAnalysis.opportunities.empty":"No opportunities found","aiAssetAnalysis.opportunities.analyze":"Analyze","aiAssetAnalysis.opportunities.updateHint":"Updates hourly","aiAssetAnalysis.opportunities.signal.overbought":"Overbought","aiAssetAnalysis.opportunities.signal.oversold":"Oversold","aiAssetAnalysis.opportunities.signal.bullish_momentum":"Bullish","aiAssetAnalysis.opportunities.signal.bearish_momentum":"Bearish","aiAssetAnalysis.opportunities.market.Crypto":"🪙 Crypto","aiAssetAnalysis.opportunities.market.USStock":"📈 US Stock","aiAssetAnalysis.opportunities.market.Forex":"💱 Forex","aiAssetAnalysis.opportunities.market.PredictionMarket":"🎯 Prediction Market","aiAssetAnalysis.opportunities.reason.crypto.overbought":"24h +{change}%, 7d +{change7d}%, overbought risk","aiAssetAnalysis.opportunities.reason.crypto.bullish_momentum":"24h +{change}%, strong bullish momentum","aiAssetAnalysis.opportunities.reason.crypto.oversold":"24h -{change}%, possible oversold bounce","aiAssetAnalysis.opportunities.reason.crypto.bearish_momentum":"24h -{change}%, clear bearish trend","aiAssetAnalysis.opportunities.reason.usstock.overbought":"Day +{change}%, large gain, watch for pullback","aiAssetAnalysis.opportunities.reason.usstock.bullish_momentum":"Day +{change}%, strong bullish momentum","aiAssetAnalysis.opportunities.reason.usstock.oversold":"Day -{change}%, possible oversold bounce","aiAssetAnalysis.opportunities.reason.usstock.bearish_momentum":"Day -{change}%, clear bearish trend","aiAssetAnalysis.opportunities.reason.forex.overbought":"Day +{change}%, volatile, watch for reversal","aiAssetAnalysis.opportunities.reason.forex.bullish_momentum":"Day +{change}%, bullish momentum","aiAssetAnalysis.opportunities.reason.forex.oversold":"Day -{change}%, volatile, possible bounce","aiAssetAnalysis.opportunities.reason.forex.bearish_momentum":"Day -{change}%, clear bearish trend","aiAssetAnalysis.checkup.title":"Portfolio Checkup","aiAssetAnalysis.checkup.btn":"Checkup","aiAssetAnalysis.checkup.desc":"Run AI analysis on all positions in your portfolio to quickly understand the current status and get recommendations for each asset.","aiAssetAnalysis.checkup.start":"Start Checkup","aiAssetAnalysis.checkup.progress":"Analyzing {current}/{total}...","aiAssetAnalysis.checkup.noPositions":"No positions in your portfolio. Please add assets first.","aiAssetAnalysis.checkup.complete":"Checkup Complete","aiAssetAnalysis.checkup.failed":"Failed","aiAssetAnalysis.checkup.rerun":"Run Again","aiAssetAnalysis.search.hint":"Search","aiAssetAnalysis.search.placeholder":"Search any symbol... (Ctrl+K)","aiAssetAnalysis.search.noResults":"No results found. Try a different keyword.","menu.form":"Form","menu.form.basic-form":"Basic Form","menu.form.step-form":"Step Form","menu.form.step-form.info":"Step Form(write transfer information)","menu.form.step-form.confirm":"Step Form(confirm transfer information)","menu.form.step-form.result":"Step Form(finished)","menu.form.advanced-form":"Advanced Form","menu.list":"List","menu.list.table-list":"Search Table","menu.list.basic-list":"Basic List","menu.list.card-list":"Card List","menu.list.search-list":"Search List","menu.list.search-list.articles":"Search List(articles)","menu.list.search-list.projects":"Search List(projects)","menu.list.search-list.applications":"Search List(applications)","menu.profile":"Profile","menu.profile.basic":"Basic Profile","menu.profile.advanced":"Advanced Profile","menu.result":"Result","menu.result.success":"Success","menu.result.fail":"Fail","menu.exception":"Exception","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"Trigger","menu.account":"Account","menu.account.center":"Account Center","menu.account.settings":"Account Settings","menu.account.trigger":"Trigger Error","menu.account.logout":"Logout","menu.wallet":"My Wallet","menu.docs":"Documentation","menu.docs.detail":"Doc Detail","menu.header.refreshPage":"Refresh Page","menu.invite.friends":"Invite Friends","app.setting.pagestyle":"Page Style Setting","app.setting.pagestyle.light":"Light Menu Style","app.setting.pagestyle.dark":"Dark Menu Style","app.setting.pagestyle.realdark":"RealDark style","app.setting.themecolor":"Theme Color","app.setting.navigationmode":"Navigation Mode","app.setting.sidemenu.nav":"Sidebar Navigation","app.setting.topmenu.nav":"Top Navigation","app.setting.content-width":"Content Width","app.setting.content-width.tooltip":"This setting is only effective for [Top Navigation]","app.setting.content-width.fixed":"Fixed","app.setting.content-width.fluid":"Fluid","app.setting.fixedheader":"Fixed Header","app.setting.fixedheader.tooltip":"Configurable when Header is fixed","app.setting.autoHideHeader":"Hide Header on Scroll","app.setting.fixedsidebar":"Fixed Sidebar Menu","app.setting.sidemenu":"Side Menu Layout","app.setting.topmenu":"Top Menu Layout","app.setting.othersettings":"Other Settings","app.setting.weakmode":"Weak Mode","app.setting.multitab":"Multi-Tab Mode","app.setting.copy":"Copy Setting","app.setting.loading":"Loading theme","app.setting.copyinfo":"copy success,please replace defaultSettings in src/config/defaultSettings.js","app.setting.copy.success":"Copy Success","app.setting.copy.fail":"Copy Failed","app.setting.theme.switching":"Switching theme...","app.setting.production.hint":"Setting panel shows in development environment only, please manually modify","app.setting.themecolor.daybreak":"Daybreak Blue (Default)","app.setting.themecolor.dust":"Dust Red","app.setting.themecolor.volcano":"Volcano","app.setting.themecolor.sunset":"Sunset Orange","app.setting.themecolor.cyan":"Cyan","app.setting.themecolor.green":"Polar Green","app.setting.themecolor.geekblue":"Geek Blue","app.setting.themecolor.purple":"Golden Purple","app.setting.tooltip":"Page Settings","notice.title":"Notifications","notice.empty":"No notifications","notice.markAllRead":"Mark all as read","notice.clear":"Clear all","notice.close":"Close","notice.justNow":"Just now","notice.minutesAgo":"minutes ago","notice.hoursAgo":"hours ago","notice.daysAgo":"days ago","notice.detailInfo":"Details","notice.aiDecision":"AI Decision","notice.confidence":"Confidence","notice.reasoning":"Reasoning","notice.symbol":"Symbol","notice.currentPrice":"Current Price","notice.triggerPrice":"Trigger Price","notice.action":"Action","notice.quantity":"Quantity","notice.viewPortfolio":"View Portfolio","notice.type.aiMonitor":"AI Monitor","notice.type.priceAlert":"Price Alert","notice.type.signal":"Trade Signal","notice.type.buy":"Buy Signal","notice.type.sell":"Sell Signal","notice.type.hold":"Hold Suggestion","notice.type.trade":"Trade Execution","notice.type.notification":"Notification","user.login.userName":"userName","user.login.password":"password","user.login.username.placeholder":"Account: admin","user.login.password.placeholder":"password: admin or ant.design","user.login.message-invalid-credentials":"Login failed, please check your email and verification code","user.login.message-invalid-verification-code":"Invalid verification code","user.login.tab-login-credentials":"Credentials","user.login.tab-login-email":"Email","user.login.tab-login-mobile":"Mobile number","user.login.captcha.placeholder":"Please enter captcha","user.login.mobile.placeholder":"Mobile number","user.login.mobile.verification-code.placeholder":"Verification code","user.login.email.placeholder":"Please enter your email address","user.login.email.verification-code.placeholder":"Please enter verification code","user.login.email.sending":"Sending verification code...","user.login.email.send-success-title":"Notice","user.login.email.send-success":"Verification code sent successfully, please check your email","user.login.sms.send-success":"Verification code sent successfully, please check your SMS","user.login.remember-me":"Remember me","user.login.forgot-password":"Forgot your password?","user.login.sign-in-with":"Sign in with","user.login.signup":"Sign up","user.login.login":"Login","user.register.register":"Register","user.register.email.placeholder":"Email","user.register.password.placeholder":"Password ","user.register.password.popover-message":"Please enter at least 6 characters. Please do not use passwords that are easy to guess. ","user.register.confirm-password.placeholder":"Confirm password","user.register.get-verification-code":"Get code","user.register.sign-in":"Already have an account?","user.register-result.msg":"Account:registered at {email}","user.register-result.activation-email":"The activation email has been sent to your email address and is valid for 24 hours. Please log in to the email in time and click on the link in the email to activate the account.","user.register-result.back-home":"Back to home","user.register-result.view-mailbox":"View mailbox","user.email.required":"Please enter your email!","user.email.wrong-format":"The email address is in the wrong format!","user.userName.required":"Please enter account name or email address","user.password.required":"Please enter your password!","user.password.twice.msg":"The passwords entered twice do not match!","user.password.strength.msg":"The password is not strong enough","user.password.strength.strong":"Strength: strong","user.password.strength.medium":"Strength: medium","user.password.strength.low":"Strength: low","user.password.strength.short":"Strength: too short","user.confirm-password.required":"Please confirm your password!","user.phone-number.required":"Please enter your phone number!","user.phone-number.wrong-format":"Please enter a valid phone number","user.verification-code.required":"Please enter the verification code!","user.captcha.required":"Please enter captcha!","user.login.infos":"QuantDinger is an AI multi-agent stock analysis tool that does not have securities investment consulting qualifications. All analysis results, scores, and reference opinions on the platform are automatically generated by AI based on historical data, and are only for learning, research, and technical exchanges, and do not constitute any investment advice or decision-making basis. Stock investment involves market risk, liquidity risk, policy risk and other risks, which may lead to losses of principal. Users should make independent decisions based on their risk tolerance capacity, and bear the consequences of any investment behavior and its results using this tool. Market risk, investment needs to be cautious.","user.login.tab-login-web3":"Web3 Login","user.login.web3.tip":"Sign in with your wallet via signature","user.login.web3.connect":"Connect wallet and login","user.login.web3.no-wallet":"No wallet detected","user.login.web3.no-address":"Wallet address not found","user.login.web3.nonce-failed":"Failed to get nonce","user.login.web3.verify-failed":"Signature verification failed","user.login.web3.success":"Login success","user.login.web3.failed":"Wallet login failed","nav.no_wallet":"No wallet detected","nav.copy":"Copy","nav.copy_success":"Copied","user.login.oauth.google":"Sign in with Google","user.login.oauth.github":"Sign in with GitHub","user.login.oauth.loading":"Redirecting to authorization page...","user.login.oauth.failed":"OAuth login failed","user.login.oauth.get-url-failed":"Failed to get authorization URL","user.login.subtitle":"driven quantitative insights for global markets","user.login.legal.title":"Legal Disclaimer","user.login.legal.view":"View Legal Disclaimer","user.login.legal.collapse":"Hide Legal Disclaimer","user.login.legal.agree":"I have read and agree to the Legal Disclaimer","user.login.legal.required":"Please read and check the Legal Disclaimer first","user.login.legal.content":"QuantDinger is an AI multi-agent stock analysis tool and does not provide investment advice. All analysis results, scores, and references are generated by AI based on historical data and are for learning, research, and technical exchange only. They do not constitute investment advice or a basis for decision-making. Stock investments involve market, liquidity, and policy risks, which may lead to loss of principal. Users should make independent decisions based on their risk tolerance and bear the consequences of any investment behavior and results using this tool.","user.login.privacy.title":"Privacy Policy","user.login.privacy.view":"View Privacy Policy","user.login.privacy.collapse":"Hide Privacy Policy","user.login.privacy.content":"We value your privacy and data protection. (1) Scope of collection: We only collect information necessary to provide the service (e.g., email, mobile number, country code, Web3 wallet address) and limited logs/device data. (2) Purpose of use: Account login and security verification, feature provisioning, troubleshooting, and compliance requirements. (3) Storage & security: Data is encrypted and access-controlled to prevent unauthorized access, disclosure, or loss. (4) Sharing & third parties: We do not share personal data with third parties except as required by law or to deliver the service; where third-party services are involved (e.g., wallets, SMS providers), processing is limited to the minimum scope required. (5) Cookies/local storage: Used for session and login state (e.g., tokens, PHPSESSID). You may clear or restrict them in your browser. (6) Your rights: You may exercise rights of access, correction, deletion, and consent withdrawal as permitted by law. (7) Changes & notices: We will provide prominent notice for updates. Continued use indicates that you have read and agreed to the updated terms. If you do not agree, please stop using the service and contact us.","user.login.username":"Username","user.login.usernameRequired":"Please enter username","user.login.passwordRequired":"Please enter password","user.login.tab":"Login","user.login.submit":"Login","user.login.register":"Create Account","user.login.forgotPassword":"Forgot Password?","user.login.orLoginWith":"Or login with","user.login.methodPassword":"Password","user.login.methodCode":"Email Code","user.login.email":"Email","user.login.emailRequired":"Please enter email","user.login.emailInvalid":"Invalid email format","user.login.verificationCode":"Verification Code","user.login.codeRequired":"Please enter verification code","user.login.sendCode":"Send","user.login.codeSent":"Verification code sent","user.login.codeLoginHint":"New users will be auto-registered","user.login.welcomeNew":"Welcome!","user.login.accountCreated":"Your account has been created","user.oauth.processing":"Processing login...","user.oauth.error.missing_params":"Missing required parameters","user.oauth.error.invalid_state":"Invalid state parameter","user.oauth.error.user_creation_failed":"Failed to create user","user.oauth.error.server_error":"Server error","user.register.tab":"Register","user.register.title":"Create Account","user.register.email":"Email","user.register.emailRequired":"Please enter email","user.register.emailInvalid":"Invalid email format","user.register.verificationCode":"Verification Code","user.register.codeRequired":"Please enter verification code","user.register.sendCode":"Send Code","user.register.codeSent":"Verification code sent","user.register.username":"Username","user.register.usernameRequired":"Please enter username","user.register.usernameLength":"Username must be 3-30 characters","user.register.usernamePattern":"Start with letter, letters/numbers/underscore only","user.register.password":"Password","user.register.passwordRequired":"Please enter password","user.register.confirmPassword":"Confirm Password","user.register.confirmPasswordRequired":"Please confirm password","user.register.passwordMismatch":"Passwords do not match","user.register.submit":"Create Account","user.register.haveAccount":"Already have an account?","user.register.login":"Login","user.register.success":"Registration successful","user.register.pleaseLogin":"Please login with your new account","user.register.pwdMinLength":"At least 8 characters","user.register.pwdUppercase":"At least one uppercase letter","user.register.pwdLowercase":"At least one lowercase letter","user.register.pwdNumber":"At least one number","user.resetPassword.title":"Reset Password","user.resetPassword.email":"Email","user.resetPassword.emailRequired":"Please enter email","user.resetPassword.emailInvalid":"Invalid email format","user.resetPassword.verificationCode":"Verification Code","user.resetPassword.codeRequired":"Please enter verification code","user.resetPassword.sendCode":"Send Code","user.resetPassword.codeSent":"Verification code sent","user.resetPassword.next":"Next","user.resetPassword.backToLogin":"Back to Login","user.resetPassword.resettingFor":"Resetting password for","user.resetPassword.newPassword":"New Password","user.resetPassword.passwordRequired":"Please enter new password","user.resetPassword.confirmPassword":"Confirm New Password","user.resetPassword.confirmPasswordRequired":"Please confirm password","user.resetPassword.submit":"Reset Password","user.resetPassword.back":"Back","user.resetPassword.successTitle":"Password Reset Successful","user.resetPassword.successSubtitle":"You can now login with your new password","user.resetPassword.goToLogin":"Go to Login","user.security.retry":"Retry","profile.passwordHintNew":"For security, email verification is required to change password. Password must be at least 8 characters with uppercase, lowercase, and number.","profile.verificationCode":"Verification Code","profile.codeRequired":"Please enter verification code","profile.codePlaceholder":"Enter verification code","profile.sendCode":"Send Code","profile.codeSent":"Verification code sent","profile.codeWillSendTo":"Code will be sent to","profile.noEmailWarning":"Please set your email first in Basic Info tab","account.basicInfo":"Basic Information","account.id":"User ID","account.username":"Username","account.nickname":"Nickname","account.email":"Email","account.mobile":"Mobile","account.web3address":"Wallet Address","account.pid":"Referrer ID","account.level":"Level","account.money":"Balance","account.qdtBalance":"QDT Balance","account.score":"Score","account.createtime":"Registration Time","account.inviteLink":"Invite Link","account.recharge":"Recharge","account.rechargeTip":"Please scan the QR code below with WeChat or Alipay to recharge","account.qrCodePlaceholder":"QR Code Placeholder (Mock)","account.rechargeAmount":"Recharge Amount","account.enterAmount":"Please enter recharge amount","account.rechargeHint":"Minimum recharge amount: 1 QDT","account.confirmRecharge":"Confirm Recharge","account.enterValidAmount":"Please enter a valid recharge amount","account.rechargeSuccess":"Recharge successful! Recharged {amount} QDT","account.settings.menuMap.basic":"Basic Settings","account.settings.menuMap.security":"Security Settings","account.settings.menuMap.notification":"New Message Notification","account.settings.menuMap.moneyLog":"Transaction History","account.moneyLog.empty":"No transaction history","account.moneyLog.total":"Total {total} records","account.moneyLog.type.purchase":"Purchase Indicator","account.moneyLog.type.recharge":"Recharge","account.moneyLog.type.refund":"Refund","account.moneyLog.type.reward":"Reward","account.moneyLog.type.income":"Indicator Income","account.moneyLog.type.commission":"Platform Fee","wallet.balance":"QDT Balance","wallet.recharge":"Recharge","wallet.withdraw":"Withdraw","wallet.filter":"Filter","wallet.reset":"Reset","wallet.totalRecharge":"Total Recharge","wallet.totalWithdraw":"Total Withdraw","wallet.totalIncome":"Total Income","wallet.records":"Trading Records & Transaction History","wallet.tradingRecords":"Trading Records","wallet.moneyLog":"Transaction History","wallet.rechargeTip":"Please scan the QR code below with WeChat or Alipay to recharge","wallet.qrCodePlaceholder":"QR Code Placeholder (Simulated)","wallet.rechargeAmount":"Recharge Amount","wallet.enterAmount":"Please enter recharge amount","wallet.rechargeHint":"Minimum recharge amount: 1 QDT","wallet.confirmRecharge":"Confirm Recharge","wallet.enterValidAmount":"Please enter a valid recharge amount","wallet.rechargeSuccess":"Recharge successful! Recharged {amount} QDT","wallet.rechargeFailed":"Recharge failed","wallet.withdrawTip":"Please enter withdrawal amount and address","wallet.withdrawAmount":"Withdrawal Amount","wallet.enterWithdrawAmount":"Please enter withdrawal amount","wallet.withdrawHint":"Minimum withdrawal amount: 1 QDT","wallet.withdrawAddress":"Withdrawal Address (Optional)","wallet.enterWithdrawAddress":"Please enter withdrawal address","wallet.confirmWithdraw":"Confirm Withdrawal","wallet.enterValidWithdrawAmount":"Please enter a valid withdrawal amount","wallet.insufficientBalance":"Insufficient balance","wallet.withdrawSuccess":"Withdrawal successful! Withdrew {amount} QDT","wallet.withdrawFailed":"Withdrawal failed","wallet.noTradingRecords":"No trading records","wallet.noMoneyLog":"No transaction history","wallet.loadTradingRecordsFailed":"Failed to load trading records","wallet.loadMoneyLogFailed":"Failed to load transaction history","wallet.moneyLogTotal":"Total {total} records","wallet.moneyLogTypeTitle":"Type","wallet.moneyLogType.all":"All types","wallet.table.time":"Time","wallet.table.type":"Type","wallet.table.price":"Price","wallet.table.amount":"Amount","wallet.table.money":"Amount","wallet.table.balance":"Balance","wallet.table.memo":"Memo","wallet.table.value":"Value","wallet.table.profit":"P/L","wallet.table.commission":"Commission","wallet.table.total":"Total {total} records","wallet.tradeType.buy":"Buy","wallet.tradeType.sell":"Sell","wallet.tradeType.liquidation":"Liquidation","wallet.tradeType.openLong":"Open Long","wallet.tradeType.addLong":"Add Long","wallet.tradeType.closeLong":"Close Long","wallet.tradeType.closeLongStop":"Stop Loss Close Long","wallet.tradeType.closeLongProfit":"Take Profit Close Long","wallet.tradeType.openShort":"Open Short","wallet.tradeType.addShort":"Add Short","wallet.tradeType.closeShort":"Close Short","wallet.tradeType.closeShortStop":"Stop Loss Close Short","wallet.tradeType.closeShortProfit":"Take Profit Close Short","wallet.moneyLogType.purchase":"Purchase Indicator","wallet.moneyLogType.recharge":"Recharge","wallet.moneyLogType.withdraw":"Withdraw","wallet.moneyLogType.refund":"Refund","wallet.moneyLogType.reward":"Reward","wallet.moneyLogType.income":"Income","wallet.moneyLogType.commission":"Commission","wallet.web3Address.required":"Please fill in Web3 wallet address first","wallet.web3Address.requiredDescription":"You need to bind your Web3 wallet address before recharging to receive deposits","wallet.web3Address.placeholder":"Please enter your Web3 wallet address (starts with 0x)","wallet.web3Address.save":"Save Wallet Address","wallet.web3Address.saveSuccess":"Wallet address saved successfully","wallet.web3Address.saveFailed":"Failed to save wallet address","wallet.web3Address.invalidFormat":"Please enter a valid Web3 wallet address (Ethereum format: 42 characters starting with 0x, or TRC20 format: 34 characters starting with T)","wallet.selectCoin":"Select Coin","wallet.selectChain":"Select Chain","wallet.chain.eth":"ETH(ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"BSC","wallet.targetQdtAmount":"Target QDT Amount (Optional)","wallet.targetQdtAmount.placeholder":"Enter the QDT amount you want to exchange, current QDT price: {price} USDT","wallet.targetQdtAmount.requiredUsdt":"Required USDT: {amount}","wallet.rechargeAddress":"Recharge Address","wallet.copyAddress":"Copy","wallet.copySuccess":"Copied successfully!","wallet.copyFailed":"Copy failed, please copy manually","wallet.rechargeAddressHint":"Please ensure you use {chain} chain to recharge {coin} to this address","wallet.qdtPrice.loading":"Loading...","wallet.rechargeTip.new":"Please select coin and chain, then scan the QR code below to recharge","wallet.exchangeRate":"1 QDT ≈ {rate} USDT","wallet.withdrawableAmount":"Withdrawable Amount","wallet.totalBalance":"Total Balance","wallet.insufficientWithdrawable":"Insufficient withdrawable amount, current withdrawable: {amount} QDT","wallet.withdrawAddressRequired":"Please enter withdrawal address","wallet.withdrawAddressHint":"Please ensure the address is correct, withdrawal cannot be revoked","wallet.withdrawSubmitSuccess":"Withdrawal application submitted successfully, please wait for review","menu.footer.contactUs":"Contact Us","menu.footer.getSupport":"Get Support","menu.footer.socialAccounts":"Social Accounts","menu.footer.userAgreement":"User Agreement","menu.footer.privacyPolicy":"Privacy Policy","menu.footer.support":"Support","menu.footer.featureRequest":"Feature request","menu.footer.email":"Email","menu.footer.liveChat":"24/7 live chat","dashboard.analysis.title":"Multi-Dimensional Analysis","dashboard.analysis.subtitle":"AI-Powered Comprehensive Financial Analysis Platform","dashboard.analysis.selectSymbol":"Select or enter symbol code","dashboard.analysis.selectModel":"Select Model","dashboard.analysis.startAnalysis":"Start Analysis","dashboard.analysis.history":"History","dashboard.analysis.tab.overview":"Overview","dashboard.analysis.tab.fundamental":"Fundamental","dashboard.analysis.tab.technical":"Technical","dashboard.analysis.tab.news":"News","dashboard.analysis.tab.sentiment":"Sentiment","dashboard.analysis.tab.risk":"Risk","dashboard.analysis.tab.debate":"Debate","dashboard.analysis.tab.decision":"Final Decision","dashboard.analysis.empty.selectSymbol":"Select Symbol to Start Analysis","dashboard.analysis.empty.selectSymbolDesc":"Select from watchlist or enter symbol code to get multi-dimensional AI analysis report","dashboard.analysis.empty.startAnalysis":'Click "Start Analysis" button to perform multi-dimensional analysis',"dashboard.analysis.empty.startAnalysisDesc":"We will provide comprehensive analysis from multiple dimensions including fundamental, technical, news, sentiment and risk","dashboard.analysis.empty.noData":"No {type} analysis data available, please perform comprehensive analysis first","dashboard.analysis.empty.noWatchlist":"No watchlist items","dashboard.analysis.empty.noHistory":"No history records","dashboard.analysis.empty.watchlistHint":"No watchlist, please","dashboard.analysis.empty.noDebateData":"No debate data available","dashboard.analysis.empty.noDecisionData":"No decision data available","dashboard.analysis.empty.selectAgent":"Please select an Agent to view analysis results","dashboard.analysis.loading.analyzing":"Analyzing, please wait...","dashboard.analysis.loading.fundamental":"Analyzing fundamental data...","dashboard.analysis.loading.technical":"Analyzing technical indicators...","dashboard.analysis.loading.news":"Analyzing news data...","dashboard.analysis.loading.sentiment":"Analyzing market sentiment...","dashboard.analysis.loading.risk":"Assessing risks...","dashboard.analysis.loading.debate":"Debating...","dashboard.analysis.loading.decision":"Generating final decision...","dashboard.analysis.score.overall":"Overall Score","dashboard.analysis.score.recommendation":"Recommendation","dashboard.analysis.score.confidence":"Confidence","dashboard.analysis.dimension.fundamental":"Fundamental","dashboard.analysis.dimension.technical":"Technical","dashboard.analysis.dimension.news":"News","dashboard.analysis.dimension.sentiment":"Sentiment","dashboard.analysis.dimension.risk":"Risk","dashboard.analysis.card.dimensionScores":"Dimension Scores","dashboard.analysis.card.overviewReport":"Overview Report","dashboard.analysis.card.financialMetrics":"Financial Metrics","dashboard.analysis.card.fundamentalReport":"Fundamental Analysis Report","dashboard.analysis.card.technicalIndicators":"Technical Indicators","dashboard.analysis.card.technicalReport":"Technical Analysis Report","dashboard.analysis.card.newsList":"Related News","dashboard.analysis.card.newsReport":"News Analysis Report","dashboard.analysis.card.sentimentIndicators":"Sentiment Indicators","dashboard.analysis.card.sentimentReport":"Sentiment Analysis Report","dashboard.analysis.card.riskMetrics":"Risk Metrics","dashboard.analysis.card.riskReport":"Risk Assessment Report","dashboard.analysis.card.bullView":"Bullish View (Bull)","dashboard.analysis.card.bearView":"Bearish View (Bear)","dashboard.analysis.card.researchConclusion":"Researcher Conclusion","dashboard.analysis.card.traderPlan":"Trader Plan","dashboard.analysis.card.riskDebate":"Risk Committee Debate","dashboard.analysis.card.finalDecision":"Final Decision","dashboard.analysis.card.tradePlanDetail":"Trading Plan Details","dashboard.analysis.tradingPlan.entry_price":"Entry Price","dashboard.analysis.tradingPlan.position_size":"Position Size","dashboard.analysis.tradingPlan.stop_loss":"Stop Loss","dashboard.analysis.tradingPlan.take_profit":"Take Profit","dashboard.analysis.label.confidence":"Confidence","dashboard.analysis.label.keyPoints":"Key Points","dashboard.analysis.label.riskWarning":"Risk Warning","dashboard.analysis.risk.risky":"Aggressive View (Risky)","dashboard.analysis.risk.neutral":"Neutral View (Neutral)","dashboard.analysis.risk.safe":"Conservative View (Safe)","dashboard.analysis.risk.conclusion":"Conclusion","dashboard.analysis.feature.fundamental":"Fundamental Analysis","dashboard.analysis.feature.technical":"Technical Analysis","dashboard.analysis.feature.news":"News Analysis","dashboard.analysis.feature.sentiment":"Sentiment Analysis","dashboard.analysis.feature.risk":"Risk Assessment","dashboard.analysis.watchlist.title":"My Watchlist","dashboard.analysis.watchlist.add":"Add","dashboard.analysis.watchlist.addStock":"Add Stock","dashboard.analysis.modal.addStock.title":"Add to Watchlist","dashboard.analysis.modal.addStock.confirm":"Confirm","dashboard.analysis.modal.addStock.cancel":"Cancel","dashboard.analysis.modal.addStock.market":"Market Type","dashboard.analysis.modal.addStock.marketPlaceholder":"Please select market","dashboard.analysis.modal.addStock.marketRequired":"Please select market type","dashboard.analysis.modal.addStock.symbol":"Symbol","dashboard.analysis.modal.addStock.symbolPlaceholder":"e.g.: AAPL, TSLA, GOOGL, 000001, BTC","dashboard.analysis.modal.addStock.symbolRequired":"Please enter symbol code","dashboard.analysis.modal.addStock.searchPlaceholder":"Search symbol code or name","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"Search or enter symbol code (e.g.: AAPL, BTC/USDT, EUR/USD)","dashboard.analysis.modal.addStock.searchOrInputHint":"Search in database or enter code directly (name will be fetched automatically)","dashboard.analysis.modal.addStock.search":"Search","dashboard.analysis.modal.addStock.searchResults":"Search Results","dashboard.analysis.modal.addStock.hotSymbols":"Hot Symbols","dashboard.analysis.modal.addStock.noHotSymbols":"No hot symbols available","dashboard.analysis.modal.addStock.selectedSymbol":"Selected Symbol","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"Please select a symbol first","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"Please select a symbol or enter symbol code","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"Please enter symbol code","dashboard.analysis.modal.addStock.pleaseSelectMarket":"Please select market type first","dashboard.analysis.modal.addStock.searchFailed":"Search failed, please try again later","dashboard.analysis.modal.addStock.noSearchResults":"No matching symbols found","dashboard.analysis.modal.addStock.willAutoFetchName":"Name will be fetched automatically","dashboard.analysis.modal.addStock.addDirectly":"Add Directly","dashboard.analysis.modal.addStock.nameWillBeFetched":"Name will be fetched automatically when adding","dashboard.analysis.market.USStock":"US Stock","dashboard.analysis.market.Crypto":"Cryptocurrency","dashboard.analysis.market.Forex":"Forex","dashboard.analysis.market.Futures":"Futures","dashboard.analysis.modal.history.title":"Analysis History","dashboard.analysis.modal.history.viewResult":"View Result","dashboard.analysis.modal.history.completeTime":"Complete Time","dashboard.analysis.modal.history.error":"Error","dashboard.analysis.status.pending":"Pending","dashboard.analysis.status.processing":"Processing","dashboard.analysis.status.completed":"Completed","dashboard.analysis.status.failed":"Failed","dashboard.analysis.message.selectSymbol":"Please select a symbol first","dashboard.analysis.message.taskCreated":"Analysis task created, executing in background...","dashboard.analysis.message.analysisComplete":"Analysis Complete","dashboard.analysis.message.analysisCompleteCache":"Analysis Complete (Using Cache)","dashboard.analysis.message.analysisFailed":"Analysis failed, please try again later","dashboard.analysis.message.addStockSuccess":"Added successfully","dashboard.analysis.message.addStockFailed":"Failed to add","dashboard.analysis.message.removeStockSuccess":"Removed successfully","dashboard.analysis.message.removeStockFailed":"Failed to remove","dashboard.analysis.message.resumingAnalysis":"Resuming analysis task...","dashboard.analysis.message.deleteSuccess":"Deleted successfully","dashboard.analysis.message.deleteFailed":"Failed to delete","dashboard.analysis.modal.history.delete":"Delete","dashboard.analysis.modal.history.deleteConfirm":"Are you sure you want to delete this analysis record?","dashboard.analysis.test":"Gongzhuan No.{no} shop","dashboard.analysis.introduce":"Introduce","dashboard.analysis.total-sales":"Total Sales","dashboard.analysis.day-sales":"Daily Sales","dashboard.analysis.visits":"Visits","dashboard.analysis.visits-trend":"Visits Trend","dashboard.analysis.visits-ranking":"Visits Ranking","dashboard.analysis.day-visits":"Daily Visits","dashboard.analysis.week":"WoW Change","dashboard.analysis.day":"DoD Change","dashboard.analysis.payments":"Payments","dashboard.analysis.conversion-rate":"Conversion Rate","dashboard.analysis.operational-effect":"Operational Effect","dashboard.analysis.sales-trend":"Stores Sales Trend","dashboard.analysis.sales-ranking":"Sales Ranking","dashboard.analysis.all-year":"All Year","dashboard.analysis.all-month":"All Month","dashboard.analysis.all-week":"All Week","dashboard.analysis.all-day":"All day","dashboard.analysis.search-users":"Search Users","dashboard.analysis.per-capita-search":"Per Capita Search","dashboard.analysis.online-top-search":"Online Top Search","dashboard.analysis.the-proportion-of-sales":"The Proportion Of Sales","dashboard.analysis.dropdown-option-one":"Operation one","dashboard.analysis.dropdown-option-two":"Operation two","dashboard.analysis.channel.all":"ALL","dashboard.analysis.channel.online":"Online","dashboard.analysis.channel.stores":"Stores","dashboard.analysis.sales":"Sales","dashboard.analysis.traffic":"Traffic","dashboard.analysis.table.rank":"Rank","dashboard.analysis.table.search-keyword":"Keyword","dashboard.analysis.table.users":"Users","dashboard.analysis.table.weekly-range":"Weekly Range","dashboard.indicator.selectSymbol":"Select or enter symbol code","dashboard.indicator.emptyWatchlistHint":"No watchlist, please add first","dashboard.indicator.hint.selectSymbol":"Please select a symbol to start analysis","dashboard.indicator.hint.selectSymbolDesc":"Select or enter stock code in the search box above to view K-line chart and technical indicators","dashboard.indicator.retry":"Retry","dashboard.indicator.panel.title":"Technical Indicators","dashboard.indicator.panel.realtimeOn":"Turn off real-time update","dashboard.indicator.panel.realtimeOff":"Turn on real-time update","dashboard.indicator.panel.themeLight":"Switch to dark theme","dashboard.indicator.panel.themeDark":"Switch to light theme","dashboard.indicator.section.enabled":"Enabled","dashboard.indicator.section.added":"My Added Indicators","dashboard.indicator.section.custom":"My Created Indicators","dashboard.indicator.section.bought":"Purchased Indicators","dashboard.indicator.section.myCreated":"My Created Indicators","dashboard.indicator.section.purchased":"Purchased Indicators","dashboard.indicator.empty":"No indicators, please add or create indicators first","dashboard.indicator.emptyPurchased":"No purchased indicators, check out the market","dashboard.indicator.buy":"Buy Indicators","dashboard.indicator.action.start":"Start","dashboard.indicator.action.stop":"Stop","dashboard.indicator.action.edit":"Edit","dashboard.indicator.action.delete":"Delete","dashboard.indicator.action.backtest":"Backtest","dashboard.indicator.action.publish":"Publish to Community","dashboard.indicator.action.unpublish":"Published (Click to Manage)","dashboard.indicator.status.normal":"Active","dashboard.indicator.status.normalPermanent":"Active (Permanent)","dashboard.indicator.status.expired":"Expired","dashboard.indicator.expiry.permanent":"Permanent","dashboard.indicator.expiry.noExpiry":"No expiration","dashboard.indicator.expiry.expired":"Expired: {date}","dashboard.indicator.expiry.expiresOn":"Expires: {date}","dashboard.indicator.delete.confirmTitle":"Confirm Deletion","dashboard.indicator.delete.confirmContent":'Are you sure you want to delete indicator "{name}"? This action cannot be undone.',"dashboard.indicator.delete.confirmOk":"Delete","dashboard.indicator.delete.confirmCancel":"Cancel","dashboard.indicator.delete.success":"Deleted successfully","dashboard.indicator.delete.failed":"Failed to delete","dashboard.indicator.save.success":"Saved successfully","dashboard.indicator.save.failed":"Failed to save","dashboard.indicator.publish.title":"Publish to Community","dashboard.indicator.publish.editTitle":"Manage Publication","dashboard.indicator.publish.hint":'After publishing, other users can view and purchase your indicator in the "Indicator Community"',"dashboard.indicator.publish.pricingType":"Pricing Type","dashboard.indicator.publish.free":"Free","dashboard.indicator.publish.paid":"Paid","dashboard.indicator.publish.price":"Price","dashboard.indicator.publish.description":"Description","dashboard.indicator.publish.descriptionPlaceholder":"Enter a detailed description to help others understand your indicator...","dashboard.indicator.publish.confirm":"Publish","dashboard.indicator.publish.update":"Update","dashboard.indicator.publish.unpublish":"Unpublish","dashboard.indicator.publish.success":"Published successfully","dashboard.indicator.publish.failed":"Failed to publish","dashboard.indicator.publish.unpublishSuccess":"Unpublished successfully","dashboard.indicator.publish.unpublishFailed":"Failed to unpublish","dashboard.indicator.error.loadWatchlistFailed":"Failed to load watchlist","dashboard.indicator.error.chartNotReady":"Chart component not initialized, please select a symbol and wait for the chart to load","dashboard.indicator.error.chartMethodNotReady":"Chart component method not ready, please try again later","dashboard.indicator.error.chartExecuteNotReady":"Chart component execute method not ready, please try again later","dashboard.indicator.error.parseFailed":"Failed to parse Python code","dashboard.indicator.error.parseFailedCheck":"Failed to parse Python code, please check the code format","dashboard.indicator.error.addIndicatorFailed":"Failed to add indicator","dashboard.indicator.error.runIndicatorFailed":"Failed to run indicator","dashboard.indicator.error.pleaseLogin":"Please login first","dashboard.indicator.error.loadDataFailed":"Failed to load data","dashboard.indicator.error.loadDataFailedDesc":"Please check network connection","dashboard.indicator.error.tiingoSubscription":"Forex 1-minute data requires Tiingo paid subscription. Please use other timeframes or upgrade your subscription.","dashboard.indicator.error.pythonEngineFailed":"Python engine failed to load, indicator functionality may be unavailable","dashboard.indicator.error.chartInitFailed":"Chart initialization failed","dashboard.indicator.warning.enterCode":"Please enter indicator code first","dashboard.indicator.warning.chartNotInitialized":"Chart not initialized, cannot use drawing tools","dashboard.indicator.warning.pyodideLoadFailed":"Python Engine Load Failed","dashboard.indicator.warning.pyodideLoadFailedDesc":"Your current region or network environment cannot use this feature","dashboard.indicator.success.runIndicator":"Indicator ran successfully","dashboard.indicator.success.clearDrawings":"All drawings cleared","dashboard.indicator.sma":"SMA (Moving Average Group)","dashboard.indicator.ema":"EMA (Exponential Moving Average Group)","dashboard.indicator.rsi":"RSI (Relative Strength Index)","dashboard.indicator.macd":"MACD","dashboard.indicator.bb":"Bollinger Bands","dashboard.indicator.atr":"ATR (Average True Range)","dashboard.indicator.cci":"CCI (Commodity Channel Index)","dashboard.indicator.williams":"Williams %R","dashboard.indicator.mfi":"MFI (Money Flow Index)","dashboard.indicator.adx":"ADX (Average Directional Index)","dashboard.indicator.obv":"OBV (On Balance Volume)","dashboard.indicator.adosc":"ADOSC (Accumulation/Distribution Oscillator)","dashboard.indicator.ad":"AD (Accumulation/Distribution Line)","dashboard.indicator.kdj":"KDJ (Stochastic Indicator)","dashboard.indicator.signal.buy":"BUY","dashboard.indicator.signal.sell":"SELL","dashboard.indicator.signal.supertrendBuy":"SuperTrend Buy","dashboard.indicator.signal.supertrendSell":"SuperTrend Sell","dashboard.indicator.chart.kline":"K-Line","dashboard.indicator.chart.volume":"Volume","dashboard.indicator.chart.uptrend":"Up Trend","dashboard.indicator.chart.downtrend":"Down Trend","dashboard.indicator.tooltip.time":"Time","dashboard.indicator.tooltip.open":"O","dashboard.indicator.tooltip.close":"C","dashboard.indicator.tooltip.high":"H","dashboard.indicator.tooltip.low":"L","dashboard.indicator.tooltip.volume":"Volume","dashboard.indicator.drawing.line":"Line","dashboard.indicator.drawing.horizontalLine":"Horizontal Line","dashboard.indicator.drawing.verticalLine":"Vertical Line","dashboard.indicator.drawing.ray":"Ray","dashboard.indicator.drawing.straightLine":"Straight Line","dashboard.indicator.drawing.parallelLine":"Parallel Line","dashboard.indicator.drawing.priceLine":"Price Line","dashboard.indicator.drawing.priceChannel":"Price Channel","dashboard.indicator.drawing.fibonacciLine":"Fibonacci Line","dashboard.indicator.drawing.measure":"Measure","dashboard.indicator.drawing.clearAll":"Clear All Drawings","dashboard.indicator.market.USStock":"US Stock","dashboard.indicator.market.Crypto":"Cryptocurrency","dashboard.indicator.market.Forex":"Forex","dashboard.indicator.market.Futures":"Futures","dashboard.indicator.create":"Create Indicator","dashboard.indicator.editor.title":"Create/Edit Indicator","dashboard.indicator.editor.name":"Indicator Name","dashboard.indicator.editor.nameRequired":"Please enter indicator name","dashboard.indicator.editor.namePlaceholder":"Enter indicator name","dashboard.indicator.editor.description":"Description","dashboard.indicator.editor.descriptionPlaceholder":"Enter description (optional)","dashboard.indicator.editor.code":"Python Code","dashboard.indicator.editor.codeRequired":"Please enter indicator code","dashboard.indicator.editor.codePlaceholder":"Enter Python code","dashboard.indicator.editor.run":"Run","dashboard.indicator.editor.runHint":"Click Run button to preview indicator on K-line chart","dashboard.indicator.editor.guide":"Development Guide","dashboard.indicator.editor.guideTitle":"Python Indicator Development Guide","dashboard.indicator.editor.save":"Save","dashboard.indicator.editor.cancel":"Cancel","dashboard.indicator.editor.unnamed":"Unnamed Indicator","dashboard.indicator.editor.publishToCommunity":"Publish to Community","dashboard.indicator.editor.publishToCommunityHint":"After publishing, other users can view and use your indicator in the community","dashboard.indicator.editor.indicatorType":"Indicator Type","dashboard.indicator.editor.indicatorTypeRequired":"Please select indicator type","dashboard.indicator.editor.indicatorTypePlaceholder":"Please select indicator type","dashboard.indicator.editor.previewImage":"Preview Image","dashboard.indicator.editor.uploadImage":"Upload Image","dashboard.indicator.editor.previewImageHint":"Recommended size: 800x400, max 2MB","dashboard.indicator.editor.pricing":"Pricing (QDT)","dashboard.indicator.editor.pricingType.free":"Free","dashboard.indicator.editor.pricingType.permanent":"Permanent","dashboard.indicator.editor.pricingType.monthly":"Monthly","dashboard.indicator.editor.price":"Price","dashboard.indicator.editor.priceRequired":"Please enter price","dashboard.indicator.editor.pricePlaceholder":"Please enter price","dashboard.indicator.editor.pricingHint":"Free indicators (price 0) will still receive platform rewards based on usage and ratings (QDT)","dashboard.indicator.editor.aiGenerate":"AI Generate","dashboard.indicator.editor.aiPromptPlaceholder":"Describe your signal logic (buy/sell only) and plots. Position sizing, risk, scaling, fees/slippage are configured in backtest.","dashboard.indicator.boundary.message":"Note: The indicator script only computes plots + buy/sell signals. Position sizing, risk, scaling, fees/slippage belong to execution config.","dashboard.indicator.boundary.indicatorRule":"Keep the script to buy/sell only (and set df['buy']/df['sell']). Do NOT implement position management, TP/SL, scaling in the script.","dashboard.indicator.boundary.backtestRule":"Rule: If a bar has a main signal (buy/sell → open/close/reverse), scaling in/out is skipped on the same bar.","dashboard.indicator.editor.aiGenerateBtn":"AI Generate Code","dashboard.indicator.editor.aiPromptRequired":"Please enter your idea","dashboard.indicator.editor.aiGenerateSuccess":"Code generated successfully","dashboard.indicator.editor.aiGenerateError":"Code generation failed, please try again later","dashboard.indicator.editor.verifyCode":"Verify Code","dashboard.indicator.editor.verifyCodeSuccess":"Verification Passed","dashboard.indicator.editor.verifyCodeFailed":"Verification Failed","dashboard.indicator.editor.verifyCodeEmpty":"Code cannot be empty","dashboard.indicator.guide.title":"Python Indicator & Strategy Development Guide","dashboard.indicator.guide.intro":"This platform supports writing custom technical indicators and trading signals using Python. The system includes built-in pandas and numpy data analysis libraries. You can use standard DataFrame operations to process K-line data and draw charts or mark buy/sell signals.","dashboard.indicator.guide.section1.title":"1. Runtime Environment & Predefined Variables","dashboard.indicator.guide.section1.env":"Your code runs in a browser-based Python environment (Pyodide).","dashboard.indicator.guide.section1.libs":"Pre-installed Libraries","dashboard.indicator.guide.section1.libsDesc":"The following libraries are imported by default, no need to import again:","dashboard.indicator.guide.section1.libsList":"pandas (pd), numpy (np), math, json","dashboard.indicator.guide.section1.data":"Input Data: df","dashboard.indicator.guide.section1.dataDesc":"The system automatically converts current K-line data into a Pandas DataFrame object, variable name is df.","dashboard.indicator.guide.section1.dataColumns":"df contains the following columns (all float type):","dashboard.indicator.guide.section1.dataColumnsList":"time (timestamp, seconds), open, high, low, close, volume","dashboard.indicator.guide.section1.dataNote":"Data index is arranged from old to new (0 is the earliest data, last row is the latest data).","dashboard.indicator.guide.section1.dataIndex":"Important: df index is timestamp (DatetimeIndex), please preserve the index, avoid using .values which loses the index.","dashboard.indicator.guide.section2.title":"2. Parameter Definition","dashboard.indicator.guide.section2.desc":"You can define variables as parameters at the beginning of your code. The system will try to parse statements like variable = value as adjustable parameters.","dashboard.indicator.guide.section2.example":"Parameter Example","dashboard.indicator.guide.section2.exampleCode":"span = 20 or multiplier = 2.0","dashboard.indicator.guide.section3.title":"3. Backtest Signal Setup (Important!)","dashboard.indicator.guide.section3.desc":"If you want your indicator to support backtesting, you must set the following two columns in your code:","dashboard.indicator.guide.section3.backtestRequired":"Required for Backtesting:","dashboard.indicator.guide.section3.backtestBuySignal":"df['buy_signal'] - Boolean Series, True indicates buy signal","dashboard.indicator.guide.section3.backtestSellSignal":"df['sell_signal'] - Boolean Series, True indicates sell signal","dashboard.indicator.guide.section3.backtestExample":"Example:","dashboard.indicator.guide.section3.backtestExampleCode":"df['buy_signal'] = condition_buy
df['sell_signal'] = condition_sell","dashboard.indicator.guide.section3.backtestNote":"Note: Even if you only set output.signals for chart display, you must set these two columns to enable backtesting.","dashboard.indicator.guide.section4.title":"4. Output Requirements: output","dashboard.indicator.guide.section4.desc":"At the end of code execution, you must define a dictionary named output to tell the chart how to display results.","dashboard.indicator.guide.section4.fields":"The output dictionary contains the following fields:","dashboard.indicator.guide.section4.plots":"plots - For drawing lines (e.g., moving averages, RSI)","dashboard.indicator.guide.section4.signals":"signals - For marking buy/sell signals (e.g., arrows, labels)","dashboard.indicator.guide.section4.name":"name - Indicator name (optional)","dashboard.indicator.guide.section4.calculatedVars":"calculatedVars - Calculated variables (optional, for displaying additional information)","dashboard.indicator.guide.section5.title":"5. Plot Configuration (Plots)","dashboard.indicator.guide.section5.desc":"Each object in the plots list represents a line.","dashboard.indicator.guide.section5.table.field":"Field","dashboard.indicator.guide.section5.table.type":"Type","dashboard.indicator.guide.section5.table.required":"Required","dashboard.indicator.guide.section5.table.requiredYes":"Yes","dashboard.indicator.guide.section5.table.requiredNo":"No","dashboard.indicator.guide.section5.table.desc":"Description","dashboard.indicator.guide.section5.table.name":"The name of the indicator line, displayed in the legend","dashboard.indicator.guide.section5.table.data":"Data list, length must match the number of rows in df. Recommended to use series.tolist()","dashboard.indicator.guide.section5.table.color":"Line color (Hex format, e.g. '#ff0000'). If not filled, the system will automatically assign","dashboard.indicator.guide.section5.table.typeDesc":"Chart type, default is 'line'","dashboard.indicator.guide.section5.table.overlay":"Important. True means display on main chart (with K-line), False means display on sub-chart (independent area)","dashboard.indicator.guide.section5.example":"Example: Draw Simple Moving Average (SMA)","dashboard.indicator.guide.section5.exampleCalc":"Calculate SMA","dashboard.indicator.guide.section5.exampleOutput":"Construct Output","dashboard.indicator.guide.section5.exampleOverlay":"Display on main chart","dashboard.indicator.guide.section6.title":"6. Signal Markers (Signals)","dashboard.indicator.guide.section6.desc":"signals are used to mark buy/sell points on specific K-lines through icons or text. Note: This is only for chart display. The backtest system uses df['buy_signal'] and df['sell_signal'].","dashboard.indicator.guide.section6.table.type":"Signal type: 'buy' (buy, marked below K-line) or 'sell' (sell, marked above K-line)","dashboard.indicator.guide.section6.table.data":"Signal data list. Fill price value at signal positions, fill None (or np.nan) at non-signal positions","dashboard.indicator.guide.section6.table.text":'Text displayed on the label (e.g. "B", "S", "Buy", "Sell")',"dashboard.indicator.guide.section6.table.color":"Marker color","dashboard.indicator.guide.section6.hint":"The system automatically handles positioning.","dashboard.indicator.guide.section6.buy":"Markers will be automatically positioned below the Low of the current K-line","dashboard.indicator.guide.section6.sell":"Markers will be automatically positioned above the High of the current K-line","dashboard.indicator.guide.section6.example":"Example: Draw Buy/Sell Signals","dashboard.indicator.guide.section6.exampleInit":"Initialize signal list, fill all with None","dashboard.indicator.guide.section6.exampleLogic":"Simple logic: mark buy when close price is greater than open price","dashboard.indicator.guide.section6.exampleNote":"In actual logic, please use loops or vectorized operations","dashboard.indicator.guide.section6.examplePrice":"Record price","dashboard.indicator.guide.section6.exampleText":"Buy","dashboard.indicator.guide.section7.title":"7. Complete Code Examples","dashboard.indicator.guide.section7.exampleA":"Example A: Dual EMA Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleACode":'# 1. Calculate indicators
df[\'ema_fast\'] = df[\'close\'].ewm(span=5, adjust=False).mean()
df[\'ema_slow\'] = df[\'close\'].ewm(span=13, adjust=False).mean()

# 2. Calculate crossover signals
cross_up = (df[\'ema_fast\'] > df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) <= df[\'ema_slow\'].shift(1))
cross_down = (df[\'ema_fast\'] < df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) >= df[\'ema_slow\'].shift(1))

# 3. 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = cross_up
df[\'close_long\'] = cross_down
df[\'open_short\'] = cross_down
df[\'close_short\'] = cross_up

# 4. Generate signal data for chart display
buy_signals = [df[\'low\'].iloc[i] * 0.995 if cross_up.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if cross_down.iloc[i] else None for i in range(len(df))]

# 5. Build output
output = {
"name": "Dual EMA Strategy",
"plots": [
{"name": "EMA 5", "data": df[\'ema_fast\'].tolist(), "color": "#FF6B6B", "overlay": True},
{"name": "EMA 13", "data": df[\'ema_slow\'].tolist(), "color": "#4ECDC4", "overlay": True}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section7.exampleB":"Example B: Bollinger Bands - Chart Display Only","dashboard.indicator.guide.section7.exampleBCode":'# Calculate Bollinger Bands (chart display only, no backtesting)
length = 20
mult = 2.0
df[\'sma\'] = df[\'close\'].rolling(length).mean()
df[\'std\'] = df[\'close\'].rolling(length).std()
df[\'upper\'] = df[\'sma\'] + mult * df[\'std\']
df[\'lower\'] = df[\'sma\'] - mult * df[\'std\']

output = {
"name": "Bollinger Bands",
"plots": [
{"name": "Upper", "data": df[\'upper\'].tolist(), "color": "#FF5252", "overlay": True},
{"name": "Middle", "data": df[\'sma\'].tolist(), "color": "#2196F3", "overlay": True},
{"name": "Lower", "data": df[\'lower\'].tolist(), "color": "#00E676", "overlay": True}
]
}',"dashboard.indicator.guide.section7.exampleC":"Example C: RSI Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleCCode":'# Calculate RSI
delta = df[\'close\'].diff()
up = delta.clip(lower=0)
down = -1 * delta.clip(upper=0)
ema_up = up.ewm(com=13, adjust=False).mean()
ema_down = down.ewm(com=13, adjust=False).mean()
rs = ema_up / ema_down
df[\'rsi\'] = 100 - (100 / (1 + rs))

# Generate trading signals
buy_condition = df[\'rsi\'] < 30 # Oversold buy
sell_condition = df[\'rsi\'] > 70 # Overbought sell

# 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = buy_condition
df[\'close_long\'] = sell_condition
df[\'open_short\'] = sell_condition
df[\'close_short\'] = buy_condition

# Generate chart signals
buy_signals = [df[\'low\'].iloc[i] * 0.995 if buy_condition.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if sell_condition.iloc[i] else None for i in range(len(df))]

output = {
"name": "RSI Strategy",
"plots": [
{"name": "RSI", "data": df[\'rsi\'].tolist(), "color": "#9C27B0", "overlay": False},
{"name": "Overbought", "data": [70] * len(df), "color": "#FF5252", "style": "dashed", "overlay": False},
{"name": "Oversold", "data": [30] * len(df), "color": "#00E676", "style": "dashed", "overlay": False}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section6.param":"Parameters","dashboard.indicator.guide.section6.calc":"Calculate","dashboard.indicator.guide.section6.output":"Output","dashboard.indicator.guide.section6.generate":"Generate signal data (initialize with None)","dashboard.indicator.guide.section6.subchart":"Display on sub-chart","dashboard.indicator.guide.section8.title":"8. Frequently Asked Questions (FAQ)","dashboard.indicator.guide.section8.q1":"Q: Why can't my indicator be backtested?","dashboard.indicator.guide.section8.a1":"A: The backtest system requires NEW signal columns: df['open_long'], df['close_long'], df['open_short'], df['close_short'] (boolean). Even if you set output.signals for chart display, you must set these columns to enable backtesting.","dashboard.indicator.guide.section8.q2":"Q: Data length mismatch?","dashboard.indicator.guide.section8.a2":"A: The data list in plots and signals must have exactly the same length as the K-line data. If you use df['xxx'].tolist(), there is usually no problem.","dashboard.indicator.guide.section8.q3":"Q: How to handle NaN (empty values)?","dashboard.indicator.guide.section8.a3":"A: Pandas calculations (such as rolling mean) will produce NaN at the beginning. The system will automatically convert NaN to null for chart rendering. You don't need to manually clean it, but if you need specific logic, you can use df.fillna(0) or other methods.","dashboard.indicator.guide.section8.q4":"Q: Index mismatch causing all signals to be NaN?","dashboard.indicator.guide.section8.a4":"A: Please ensure you preserve the original df index (timestamp). Avoid using .values to create new Series. Use columns directly like df['close'] for operations.","dashboard.indicator.guide.section8.q5":"Q: Can I use third-party network libraries?","dashboard.indicator.guide.section8.a5":"A: No. The runtime environment is a browser sandbox and cannot use libraries like requests to request external APIs, nor can it install additional pip packages. Limited to built-in libraries such as pandas, numpy, math, json.","dashboard.indicator.guide.section8.q6":"Q: How to debug code?","dashboard.indicator.guide.section8.a6":"A: If the chart does not display indicators, it is usually because the Python code has an error. Please check for syntax errors or array index out of bounds. It is recommended to debug the algorithm logic in a local Python environment first, then copy it in.","dashboard.indicator.guide.section8.q7":"Q: Backtest shows 0 signals?","dashboard.indicator.guide.section8.a7":"A: Please check the data type of df['open_long']/df['close_long']/df['open_short']/df['close_short']. They should be boolean (True/False), not numeric. Use condition.fillna(False).astype(bool) to ensure correct type.","dashboard.indicator.paramsConfig.title":"Indicator Parameters","dashboard.indicator.paramsConfig.noParams":"No configurable parameters for this indicator","dashboard.indicator.paramsConfig.hint":"Configure parameters and click OK to run the indicator","dashboard.indicator.backtest.title":"Indicator Backtest","dashboard.indicator.backtest.config":"Backtest Parameters","dashboard.indicator.backtest.startDate":"Start Date","dashboard.indicator.backtest.endDate":"End Date","dashboard.indicator.backtest.selectStartDate":"Select start date","dashboard.indicator.backtest.selectEndDate":"Select end date","dashboard.indicator.backtest.startDateRequired":"Please select start date","dashboard.indicator.backtest.endDateRequired":"Please select end date","dashboard.indicator.backtest.initialCapital":"Initial Capital","dashboard.indicator.backtest.initialCapitalRequired":"Please enter initial capital","dashboard.indicator.backtest.commission":"Commission Rate (%)","dashboard.indicator.backtest.commissionHint":"Charged on notional value (incl. leverage) per trade; both entry & exit are deducted from balance.","dashboard.indicator.backtest.leverage":"Leverage","dashboard.indicator.backtest.timeframe":"Timeframe","dashboard.indicator.backtest.tradeDirection":"Trade Direction","dashboard.indicator.backtest.longOnly":"Long Only","dashboard.indicator.backtest.shortOnly":"Short Only","dashboard.indicator.backtest.both":"Both","dashboard.indicator.backtest.run":"Run Backtest","dashboard.indicator.backtest.rerun":"Run Again","dashboard.indicator.backtest.close":"Close","dashboard.indicator.backtest.running":"Running indicator backtest...","dashboard.indicator.backtest.loadingTip1":"Fetching historical K-line data...","dashboard.indicator.backtest.loadingTip2":"Executing strategy signal calculation...","dashboard.indicator.backtest.loadingTip3":"Simulating trade execution...","dashboard.indicator.backtest.loadingTip4":"Calculating backtest metrics...","dashboard.indicator.backtest.loadingTip5":"Almost done, please wait...","dashboard.indicator.backtest.results":"Backtest Results","dashboard.indicator.backtest.totalReturn":"Total Return","dashboard.indicator.backtest.annualReturn":"Annual Return","dashboard.indicator.backtest.maxDrawdown":"Max Drawdown","dashboard.indicator.backtest.sharpeRatio":"Sharpe Ratio","dashboard.indicator.backtest.winRate":"Win Rate","dashboard.indicator.backtest.profitFactor":"Profit Factor","dashboard.indicator.backtest.totalTrades":"Total Trades","dashboard.indicator.totalReturn":"Total Return","dashboard.indicator.annualReturn":"Annual Return","dashboard.indicator.maxDrawdown":"Max Drawdown","dashboard.indicator.sharpeRatio":"Sharpe Ratio","dashboard.indicator.winRate":"Win Rate","dashboard.indicator.profitFactor":"Profit Factor","dashboard.indicator.totalTrades":"Total Trades","dashboard.indicator.backtest.totalCommission":"Total Commission","dashboard.indicator.backtest.equityCurve":"Equity Curve","dashboard.indicator.backtest.strategy":"Indicator","dashboard.indicator.backtest.benchmark":"Benchmark","dashboard.indicator.backtest.tradeHistory":"Trade History","dashboard.indicator.backtest.tradeTime":"Time","dashboard.indicator.backtest.tradeType":"Type","dashboard.indicator.backtest.buy":"Buy","dashboard.indicator.backtest.sell":"Sell","dashboard.indicator.backtest.liquidation":"Liquidation","dashboard.indicator.backtest.openLong":"Open Long","dashboard.indicator.backtest.closeLong":"Close Long","dashboard.indicator.backtest.closeLongStop":"Close Long (Stop Loss)","dashboard.indicator.backtest.closeLongProfit":"Close Long (Take Profit)","dashboard.indicator.backtest.addLong":"Add Long","dashboard.indicator.backtest.openShort":"Open Short","dashboard.indicator.backtest.closeShort":"Close Short","dashboard.indicator.backtest.closeShortStop":"Close Short (Stop Loss)","dashboard.indicator.backtest.closeShortProfit":"Close Short (Take Profit)","dashboard.indicator.backtest.addShort":"Add Short","dashboard.indicator.backtest.closeLongTrailing":"Close Long (Trailing)","dashboard.indicator.backtest.reduceLong":"Reduce Long","dashboard.indicator.backtest.closeShortTrailing":"Close Short (Trailing)","dashboard.indicator.backtest.reduceShort":"Reduce Short","dashboard.indicator.backtest.price":"Price","dashboard.indicator.backtest.amount":"Amount","dashboard.indicator.backtest.balance":"Balance","dashboard.indicator.backtest.profit":"P&L","dashboard.indicator.backtest.success":"Backtest completed","dashboard.indicator.backtest.failed":"Backtest failed, please try again later","dashboard.indicator.backtest.quickSelect":"Quick Select","dashboard.indicator.backtest.precisionMode":"Backtest Precision Mode","dashboard.indicator.backtest.estimatedCandles":"Est. {count} candles to process","dashboard.indicator.backtest.highPrecisionDesc":"Using 1-minute candles for high-precision backtest, stop-loss/take-profit triggers are more accurate","dashboard.indicator.backtest.mediumPrecisionDesc":"Range exceeds 30 days, using 5-minute candles to balance precision and performance","dashboard.indicator.backtest.standardModeWarning":"Using Standard Backtest Mode","dashboard.indicator.backtest.standardModeDesc":"Current config does not support high-precision backtest, using strategy timeframe","dashboard.indicator.backtest.onlyCryptoSupported":"High-precision backtest only supports cryptocurrency market","dashboard.indicator.backtest.noIndicatorCode":"This indicator has no backtestable code","dashboard.indicator.backtest.noSymbol":"Please select a trading symbol first","dashboard.indicator.backtest.dateRangeExceeded":"Backtest date range exceeded: {timeframe} timeframe allows max {maxRange}","dashboard.indicator.backtest.dateRangeExceededDays":"Backtest range exceeds limit: {timeframe} max {maxRange} ({maxDays} days)","dashboard.indicator.backtest.metaLine":"Symbol: {symbol} | Market: {market} | Timeframe: {timeframe}","dashboard.indicator.backtest.savedRunId":"Backtest saved. Run ID: {id}","dashboard.indicator.backtest.historyTitle":"Backtest History","dashboard.indicator.backtest.historyRefresh":"Refresh","dashboard.indicator.backtest.historyView":"View","dashboard.indicator.backtest.historyNoData":"No backtest history","dashboard.indicator.backtest.historyUseCurrent":"Only current symbol/timeframe","dashboard.indicator.backtest.historyFilterSymbol":"Symbol","dashboard.indicator.backtest.historyFilterTimeframe":"Timeframe","dashboard.indicator.backtest.historyApply":"Apply filters","dashboard.indicator.backtest.historyAIAnalyze":"AI Analyze","dashboard.indicator.backtest.historyAIAnalyzeTitle":"AI Suggestions","dashboard.indicator.backtest.historyNoAIResult":"No AI analysis result","dashboard.indicator.backtest.historyRunId":"Run ID","dashboard.indicator.backtest.historyCreatedAt":"Time","dashboard.indicator.backtest.historyRange":"Range","dashboard.indicator.backtest.historyStatus":"Status","dashboard.indicator.backtest.historyStatusSuccess":"Success","dashboard.indicator.backtest.historyStatusFailed":"Failed","dashboard.indicator.backtest.historyActions":"Actions","dashboard.indicator.backtest.prev":"Previous","dashboard.indicator.backtest.next":"Next","dashboard.indicator.backtest.steps.strategy.title":"Execution Config","dashboard.indicator.backtest.steps.strategy.desc":"Position, risk, scaling","dashboard.indicator.backtest.steps.trading.title":"Backtest Setup","dashboard.indicator.backtest.steps.trading.desc":"Time, capital, fees, leverage, slippage","dashboard.indicator.backtest.steps.results.title":"Results","dashboard.indicator.backtest.steps.results.desc":"Summary & trades","dashboard.indicator.backtest.panel.risk":"Execution: Risk (SL / trailing)","dashboard.indicator.backtest.panel.scale":"Execution: Scale-in (Trend / DCA)","dashboard.indicator.backtest.panel.reduce":"Execution: Scale-out (Trend / Adverse)","dashboard.indicator.backtest.panel.position":"Execution: Entry sizing","dashboard.indicator.backtest.field.stopLossPct":"Stop Loss (%)","dashboard.indicator.backtest.field.takeProfitPct":"Take Profit (%)","dashboard.indicator.backtest.field.trailingEnabled":"Trailing stop / take profit","dashboard.indicator.backtest.field.trailingStopPct":"Trailing drawdown (%)","dashboard.indicator.backtest.field.trailingActivationPct":"Trailing activation (%)","dashboard.indicator.backtest.field.slippage":"Slippage (%)","dashboard.indicator.backtest.field.trendAddEnabled":"Trend-following scale-in","dashboard.indicator.backtest.field.dcaAddEnabled":"Mean-reversion DCA","dashboard.indicator.backtest.field.trendAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.dcaAddStepPct":"DCA trigger (%)","dashboard.indicator.backtest.field.trendAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.dcaAddSizePct":"DCA size (% of capital)","dashboard.indicator.backtest.field.trendAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.dcaAddMaxTimes":"Max DCA times","dashboard.indicator.backtest.field.trendReduceEnabled":"Trend reduce","dashboard.indicator.backtest.field.adverseReduceEnabled":"Adverse reduce","dashboard.indicator.backtest.field.trendReduceStepPct":"Trend trigger (%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"Adverse trigger (%)","dashboard.indicator.backtest.field.trendReduceSizePct":"Reduce size (% of position)","dashboard.indicator.backtest.field.adverseReduceSizePct":"Adverse reduce size (% of position)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"Max trend reduce times","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"Max adverse reduce times","dashboard.indicator.backtest.field.entryPct":"Entry size (% of capital)","dashboard.indicator.backtest.field.minOrderPct":"Min order size (% of capital) (optional)","dashboard.indicator.backtest.hint.entryPctMax":"Max entry: {maxPct}% (reserve budget for future scale-ins)","dashboard.docs.title":"Documentation","dashboard.docs.search.placeholder":"Search documents...","dashboard.docs.category.all":"All","dashboard.docs.category.guide":"Guides","dashboard.docs.category.api":"API Reference","dashboard.docs.category.tutorial":"Tutorials","dashboard.docs.category.faq":"FAQ","dashboard.docs.featured.title":"Featured Documents","dashboard.docs.featured.tag":"Featured","dashboard.docs.list.views":"views","dashboard.docs.list.author":"Author","dashboard.docs.list.empty":"No documents","dashboard.docs.list.backToAll":"Back to All Documents","dashboard.docs.list.total":"Total {count} documents","dashboard.docs.detail.back":"Back to List","dashboard.docs.detail.updatedAt":"Updated at","dashboard.docs.detail.related":"Related Documents","dashboard.docs.detail.notFound":"Document Not Found","dashboard.docs.detail.error":"Document does not exist or has been deleted","dashboard.docs.search.result":"Search Results","dashboard.docs.search.keyword":"Keyword","dashboard.totalEquity":"Total Equity","dashboard.totalPnL":"Total P&L","dashboard.aiStrategies":"AI Strategies","dashboard.indicatorStrategies":"Indicator Strategies","dashboard.running":"Running","dashboard.enabled":"Enabled","dashboard.pnlHistory":"P&L History","dashboard.strategyPerformance":"Strategy Performance","dashboard.strategyRanking":"Strategy Ranking","dashboard.winRate":"Win Rate","dashboard.profitFactor":"Profit Factor","dashboard.maxDrawdown":"Max Drawdown","dashboard.totalTrades":"Total Trades","dashboard.runningStrategies":"Running Strategies","dashboard.equityCurve":"Equity Curve","dashboard.strategyAllocation":"Strategy Allocation","dashboard.drawdownCurve":"Drawdown Curve","dashboard.drawdown":"Drawdown","dashboard.hourlyDistribution":"Hourly Distribution","dashboard.dailyPnl":"Daily P&L","dashboard.cumulativePnl":"Cumulative P&L","dashboard.tradeCount":"Trade Count","dashboard.profit":"Profit","dashboard.noData":"No Data","dashboard.noStrategyData":"No strategy data","dashboard.ranking.totalProfit":"Total Profit","dashboard.ranking.roi":"ROI","dashboard.ranking.trades":"Trades","dashboard.unit.trades":"","dashboard.unit.strategies":"","dashboard.label.avgDaily":"Avg Daily","dashboard.label.avgProfit":"Avg Profit","dashboard.label.win":"W","dashboard.label.lose":"L","dashboard.label.trade":"Trades","dashboard.label.indicator":"Indicator","dashboard.label.totalPnl":"Total P&L","dashboard.label.maxDrawdownPoint":"Max DD","dashboard.profitCalendar":"Profit Calendar","dashboard.recentTrades":"Recent Trades","dashboard.currentPositions":"Current Positions","dashboard.table.time":"Time","dashboard.table.strategy":"Strategy","dashboard.table.symbol":"Symbol","dashboard.table.type":"Type","dashboard.table.side":"Side","dashboard.table.size":"Size","dashboard.table.entryPrice":"Entry Price","dashboard.table.price":"Price","dashboard.table.amount":"Amount","dashboard.table.profit":"Profit","dashboard.pendingOrders":"Order Execution Records","dashboard.totalOrders":"Total {total} orders","dashboard.viewError":"View Error","dashboard.filled":"Filled","dashboard.orderTable.time":"Created Time","dashboard.orderTable.strategy":"Strategy","dashboard.orderTable.symbol":"Symbol","dashboard.orderTable.signalType":"Signal Type","dashboard.orderTable.amount":"Amount","dashboard.orderTable.price":"Filled Price","dashboard.orderTable.status":"Status","dashboard.orderTable.timeInfo":"Time","dashboard.orderTable.executedAt":"Executed Time","dashboard.orderTable.exchange":"Exchange","dashboard.orderTable.notify":"Notify","dashboard.orderTable.actions":"Actions","dashboard.orderTable.delete":"Delete","dashboard.orderTable.deleteConfirm":"Delete this record?","dashboard.orderTable.deleteSuccess":"Deleted","dashboard.orderTable.deleteFailed":"Delete failed","dashboard.newOrderNotify":"New Order Alert","dashboard.newOrderDesc":"New order execution record","dashboard.soundEnabled":"Sound notification enabled","dashboard.soundDisabled":"Sound notification disabled","dashboard.clickToMute":"Click to mute","dashboard.clickToUnmute":"Click to unmute","dashboard.signalType.openLong":"Open Long","dashboard.signalType.openShort":"Open Short","dashboard.signalType.closeLong":"Close Long","dashboard.signalType.closeShort":"Close Short","dashboard.signalType.addLong":"Add Long","dashboard.signalType.addShort":"Add Short","dashboard.status.pending":"Pending","dashboard.status.processing":"Processing","dashboard.status.completed":"Completed","dashboard.status.failed":"Failed","dashboard.status.cancelled":"Cancelled","dashboard.table.pnl":"Unrealized P&L","form.basic-form.basic.title":"Basic form","form.basic-form.basic.description":"Form pages are used to collect or verify information to users, and basic forms are common in scenarios where there are fewer data items.","form.basic-form.title.label":"Title","form.basic-form.title.placeholder":"Give the target a name","form.basic-form.title.required":"Please enter a title","form.basic-form.date.label":"Start and end date","form.basic-form.placeholder.start":"Start date","form.basic-form.placeholder.end":"End date","form.basic-form.date.required":"Please select the start and end date","form.basic-form.goal.label":"Goal description","form.basic-form.goal.placeholder":"Please enter your work goals","form.basic-form.goal.required":"Please enter a description of the goal","form.basic-form.standard.label":"Metrics","form.basic-form.standard.placeholder":"Please enter a metric","form.basic-form.standard.required":"Please enter a metric","form.basic-form.client.label":"Client","form.basic-form.label.tooltip":"Target service object","form.basic-form.client.placeholder":"Please describe your customer service, internal customers directly @ Name / job number","form.basic-form.client.required":"Please describe the customers you serve","form.basic-form.invites.label":"Inviting critics","form.basic-form.invites.placeholder":"Please direct @ Name / job number, you can invite up to 5 people","form.basic-form.weight.label":"Weight","form.basic-form.weight.placeholder":"Please enter weight","form.basic-form.public.label":"Target disclosure","form.basic-form.label.help":"Customers and invitees are shared by default","form.basic-form.radio.public":"Public","form.basic-form.radio.partially-public":"Partially public","form.basic-form.radio.private":"Private","form.basic-form.publicUsers.placeholder":"Open to","form.basic-form.option.A":"Colleague A","form.basic-form.option.B":"Colleague B","form.basic-form.option.C":"Colleague C","form.basic-form.email.required":"Please enter your email!","form.basic-form.email.wrong-format":"The email address is in the wrong format!","form.basic-form.userName.required":"Please enter your userName!","form.basic-form.password.required":"Please enter your password!","form.basic-form.password.twice":"The passwords entered twice do not match!","form.basic-form.strength.msg":"Please enter at least 6 characters and don't use passwords that are easy to guess.","form.basic-form.strength.strong":"Strength: strong","form.basic-form.strength.medium":"Strength: medium","form.basic-form.strength.short":"Strength: too short","form.basic-form.confirm-password.required":"Please confirm your password!","form.basic-form.phone-number.required":"Please enter your phone number!","form.basic-form.phone-number.wrong-format":"Malformed phone number!","form.basic-form.verification-code.required":"Please enter the verification code!","form.basic-form.form.get-captcha":"Get Captcha","form.basic-form.captcha.second":"sec","form.basic-form.form.optional":" (optional) ","form.basic-form.form.submit":"Submit","form.basic-form.form.save":"Save","form.basic-form.email.placeholder":"Email","form.basic-form.password.placeholder":"Password","form.basic-form.confirm-password.placeholder":"Confirm password","form.basic-form.phone-number.placeholder":"Phone number","form.basic-form.verification-code.placeholder":"Verification code","result.success.title":"Submission Success","result.success.description":"The submission results page is used to feed back the results of a series of operational tasks. If it is a simple operation, use the Message global prompt feedback. This text area can show a simple supplementary explanation. If there is a similar requirement for displaying “documents”, the following gray area can present more complicated content.","result.success.operate-title":"Project Name","result.success.operate-id":"Project ID","result.success.principal":"Principal","result.success.operate-time":"Effective time","result.success.step1-title":"Create project","result.success.step1-operator":"Qu Lili","result.success.step2-title":"Departmental preliminary review","result.success.step2-operator":"Zhou Maomao","result.success.step2-extra":"Urge","result.success.step3-title":"Financial review","result.success.step4-title":"Finish","result.success.btn-return":"Back List","result.success.btn-project":"View Project","result.success.btn-print":"Print","result.fail.error.title":"Submission Failed","result.fail.error.description":"Please check and modify the following information before resubmitting.","result.fail.error.hint-title":"The content you submitted has the following error:","result.fail.error.hint-text1":"Your account has been frozen","result.fail.error.hint-btn1":"Thaw immediately","result.fail.error.hint-text2":"Your account is not yet eligible to apply","result.fail.error.hint-btn2":"Upgrade immediately","result.fail.error.btn-text":"Return to modify","account.settings.menuMap.custom":"Custom Settings","account.settings.menuMap.binding":"Account Binding","account.settings.basic.avatar":"Avatar","account.settings.basic.change-avatar":"Change avatar","account.settings.basic.email":"Email","account.settings.basic.email-message":"Please input your email!","account.settings.basic.nickname":"Nickname","account.settings.basic.nickname-message":"Please input your Nickname!","account.settings.basic.profile":"Personal profile","account.settings.basic.profile-message":"Please input your personal profile!","account.settings.basic.profile-placeholder":"Brief introduction to yourself","account.settings.basic.country":"Country/Region","account.settings.basic.country-message":"Please input your country!","account.settings.basic.geographic":"Province or city","account.settings.basic.geographic-message":"Please input your geographic info!","account.settings.basic.address":"Street Address","account.settings.basic.address-message":"Please input your address!","account.settings.basic.phone":"Phone Number","account.settings.basic.phone-message":"Please input your phone!","account.settings.basic.update":"Update Information","account.settings.basic.update.success":"Update basic information successfully","account.settings.security.strong":"Strong","account.settings.security.medium":"Medium","account.settings.security.weak":"Weak","account.settings.security.password":"Account Password","account.settings.security.password-description":"Current password strength:","account.settings.security.phone":"Security Phone","account.settings.security.phone-description":"Bound phone:","account.settings.security.question":"Security Question","account.settings.security.question-description":"The security question is not set, and the security policy can effectively protect the account security","account.settings.security.email":"Bound Email","account.settings.security.email-description":"Bound Email:","account.settings.security.mfa":"MFA Device","account.settings.security.mfa-description":"Unbound MFA device, after binding, can be confirmed twice","account.settings.security.modify":"Modify","account.settings.security.set":"Set","account.settings.security.bind":"Bind","account.settings.binding.taobao":"Binding Taobao","account.settings.binding.taobao-description":"Currently unbound Taobao account","account.settings.binding.alipay":"Binding Alipay","account.settings.binding.alipay-description":"Currently unbound Alipay account","account.settings.binding.dingding":"Binding DingTalk","account.settings.binding.dingding-description":"Currently unbound DingTalk account","account.settings.binding.bind":"Bind","account.settings.notification.password":"Account Password","account.settings.notification.password-description":"Messages from other users will be notified in the form of a station letter","account.settings.notification.messages":"System Messages","account.settings.notification.messages-description":"System messages will be notified in the form of a station letter","account.settings.notification.todo":"To-do Notification","account.settings.notification.todo-description":"The to-do list will be notified in the form of a letter from the station","account.settings.settings.open":"Open","account.settings.settings.close":"Close","trading-assistant.title":"Trading Assistant","trading-assistant.strategyList":"Strategy List","trading-assistant.createStrategy":"Create Strategy","trading-assistant.noStrategy":"No strategies","trading-assistant.selectStrategy":"Please select a strategy from the left to view details","trading-assistant.startStrategy":"Start Strategy","trading-assistant.stopStrategy":"Stop Strategy","trading-assistant.editStrategy":"Edit Strategy","trading-assistant.deleteStrategy":"Delete Strategy","trading-assistant.startAll":"Start All","trading-assistant.stopAll":"Stop All","trading-assistant.deleteAll":"Delete All","trading-assistant.symbolCount":"symbols","trading-assistant.strategyCount":"strategies","trading-assistant.groupBy":"Group By","trading-assistant.groupByStrategy":"Strategy","trading-assistant.groupBySymbol":"Symbol","trading-assistant.timeframe":"Timeframe","trading-assistant.indicator":"Indicator","trading-assistant.status.running":"Running","trading-assistant.status.stopped":"Stopped","trading-assistant.status.error":"Error","trading-assistant.strategyType.IndicatorStrategy":"Indicator Strategy","trading-assistant.strategyType.PromptBasedStrategy":"Prompt Strategy","trading-assistant.strategyType.GridStrategy":"Grid Strategy","trading-assistant.tabs.tradingRecords":"Trading Records","trading-assistant.tabs.positions":"Positions","trading-assistant.tabs.equityCurve":"Equity Curve","trading-assistant.form.step1":"Select Indicator","trading-assistant.form.step2":"Exchange Configuration","trading-assistant.form.step3":"Strategy Parameters","trading-assistant.form.step2Params":"Parameters","trading-assistant.form.step3Signal":"Signal Delivery","trading-assistant.form.simpleMode":"Simple","trading-assistant.form.advancedMode":"Advanced","trading-assistant.form.simpleModeHint":"Quick setup with recommended defaults","trading-assistant.form.advancedModeHint":"Customize all parameters for pros","trading-assistant.form.simpleStep1":"Select Indicator & Pair","trading-assistant.form.simpleStep2":"Launch Mode","trading-assistant.form.simpleDefaultsHint":"Defaults (expand to customize)","trading-assistant.form.showAdvancedSettings":"Show Advanced Settings","trading-assistant.form.hideAdvancedSettings":"Hide Advanced Settings","trading-assistant.form.marketCategory":"Market Category","trading-assistant.form.marketCategoryHint":"Select a market first. Only Crypto can enable live trading; other markets are signal-only.","trading-assistant.market.USStock":"US Stock","trading-assistant.market.Crypto":"Crypto","trading-assistant.market.Forex":"Forex","trading-assistant.form.indicator":"Select Indicator","trading-assistant.form.indicatorHint":"You can only select indicators you have purchased or created","trading-assistant.form.qdtCostHints":"Using strategies will consume QDT, please ensure your account has sufficient QDT balance","trading-assistant.form.indicatorDescription":"Indicator Description","trading-assistant.form.noDescription":"No description","trading-assistant.form.indicatorParams":"Indicator Parameters","trading-assistant.form.indicatorParamsHint":"These parameters will be passed to the indicator code. Different strategies can use different parameter values.","trading-assistant.form.exchange":"Select Exchange","trading-assistant.form.apiKey":"API Key","trading-assistant.form.secretKey":"Secret Key","trading-assistant.form.passphrase":"Passphrase","trading-assistant.form.testConnection":"Test Connection","trading-assistant.form.strategyName":"Strategy Name","trading-assistant.form.symbol":"Trading Pair","trading-assistant.form.symbols":"Trading Pairs (Multi-select)","trading-assistant.form.symbolHint":"Symbol format depends on the selected market","trading-assistant.form.symbolsHint":"Select multiple pairs to create strategies for each","trading-assistant.form.strategyType":"Strategy Type","trading-assistant.form.strategyTypeSingle":"Single Symbol Strategy","trading-assistant.form.strategyTypeCrossSectional":"Cross-Sectional Strategy","trading-assistant.form.strategyTypeHint":"Single Symbol: Trade a single symbol; Cross-Sectional: Manage a portfolio of multiple symbols","trading-assistant.form.symbolList":"Symbol List","trading-assistant.form.symbolListHint":"Select multiple symbols, strategy will rank and rebalance based on indicator scores","trading-assistant.form.portfolioSize":"Portfolio Size","trading-assistant.form.portfolioSizeHint":"Number of symbols to hold simultaneously","trading-assistant.form.longRatio":"Long Ratio","trading-assistant.form.longRatioHint":"Proportion of long positions (0-1), e.g. 0.5 means 50% long, 50% short","trading-assistant.form.rebalanceFrequency":"Rebalance Frequency","trading-assistant.form.rebalanceDaily":"Daily","trading-assistant.form.rebalanceWeekly":"Weekly","trading-assistant.form.rebalanceMonthly":"Monthly","trading-assistant.form.rebalanceFrequencyHint":"Frequency of portfolio rebalancing","trading-assistant.form.addSymbol":"Add Symbol","trading-assistant.form.addSymbolTitle":"Add Symbol to Watchlist","trading-assistant.form.searchSymbolPlaceholder":"Search by code, e.g. BTC, AAPL","trading-assistant.form.noSymbolFound":"No matching symbol found","trading-assistant.form.canDirectAdd":"You can directly add the code","trading-assistant.form.searchSymbolHint":"Enter code to search symbols","trading-assistant.form.confirmAdd":"Confirm Add","trading-assistant.form.addSymbolSuccess":"Symbol added successfully","trading-assistant.form.addSymbolFailed":"Failed to add, please try again","trading-assistant.form.pleaseSelectSymbol":"Please select or enter a symbol","trading-assistant.form.symbolHintCrypto":"Crypto: use trading pairs like BTC/USDT","trading-assistant.form.symbolHintGeneral":"Enter the symbol for the selected market (e.g. 600519, AAPL, EURUSD).","trading-assistant.form.initialCapital":"Initial Capital","trading-assistant.form.marketType":"Market Type","trading-assistant.form.marketTypeFutures":"Futures","trading-assistant.form.marketTypeSpot":"Spot","trading-assistant.form.marketTypeHint":"Futures support bidirectional trading and leverage, spot only supports long positions with fixed 1x leverage","trading-assistant.form.leverage":"Leverage","trading-assistant.form.leverageHint":"Futures: 1-125x, Spot: Fixed 1x","trading-assistant.form.spotLeverageFixed":"Spot trading leverage is fixed at 1x","trading-assistant.form.spotOnlyLongHint":"Spot trading only supports long positions","trading-assistant.form.tradeDirection":"Trade Direction","trading-assistant.form.tradeDirectionLong":"Long Only","trading-assistant.form.tradeDirectionShort":"Short Only","trading-assistant.form.tradeDirectionBoth":"Both","trading-assistant.form.timeframe":"Timeframe","trading-assistant.form.klinePeriod":"K-Line Period","trading-assistant.form.timeframe1m":"1 Minute","trading-assistant.form.timeframe5m":"5 Minutes","trading-assistant.form.timeframe15m":"15 Minutes","trading-assistant.form.timeframe30m":"30 Minutes","trading-assistant.form.timeframe1H":"1 Hour","trading-assistant.form.timeframe4H":"4 Hours","trading-assistant.form.timeframe1D":"1 Day","trading-assistant.form.selectStrategyType":"Select Strategy Type","trading-assistant.form.indicatorStrategy":"Indicator Strategy","trading-assistant.form.indicatorStrategyDesc":"Automated trading strategy based on technical indicators","trading-assistant.form.aiStrategy":"AI Strategy","trading-assistant.form.aiStrategyDesc":"Automated trading strategy based on AI intelligent decision-making","trading-assistant.form.enableAiFilter":"Enable AI Intelligent Decision Filter","trading-assistant.form.enableAiFilterHint":"When enabled, indicator signals will be filtered by AI to improve trading quality","trading-assistant.form.aiFilterPrompt":"Custom Prompt","trading-assistant.form.aiFilterPromptHint":"Provide custom instructions for AI filtering, leave blank to use system default","trading-assistant.validation.strategyTypeRequired":"Please select a strategy type","trading-assistant.validation.marketCategoryRequired":"Please select a market category","trading-assistant.form.advancedSettings":"Advanced Settings","trading-assistant.form.orderMode":"Order Mode","trading-assistant.form.orderModeMaker":"Maker (Limit)","trading-assistant.form.orderModeTaker":"Taker (Market)","trading-assistant.form.orderModeHint":"Maker mode uses limit orders with lower fees; Taker mode executes immediately with higher fees","trading-assistant.form.makerWaitSec":"Maker Wait Time (seconds)","trading-assistant.form.makerWaitSecHint":"Time to wait for order fill before canceling and retrying","trading-assistant.form.makerRetries":"Maker Retries","trading-assistant.form.makerRetriesHint":"Maximum number of retries when maker order is not filled","trading-assistant.form.fallbackToMarket":"Fallback to Market on failure","trading-assistant.form.fallbackToMarketHint":"If limit order (open/close) is not filled, downgrade to market order to ensure execution","trading-assistant.form.marginMode":"Margin Mode","trading-assistant.form.marginModeCross":"Cross Margin","trading-assistant.form.marginModeIsolated":"Isolated Margin","trading-assistant.form.stopLossPct":"Stop Loss (%)","trading-assistant.form.stopLossPctHint":"Set stop loss percentage, 0 means disabled","trading-assistant.form.takeProfitPct":"Take Profit (%)","trading-assistant.form.takeProfitPctHint":"Set take profit percentage, 0 means disabled","trading-assistant.form.commission":"Commission (%)","trading-assistant.form.commissionHint":"Trading fee percentage (optional)","trading-assistant.form.slippage":"Slippage (%)","trading-assistant.form.slippageHint":"Estimated slippage percentage (optional)","trading-assistant.form.executionMode":"Execution","trading-assistant.form.executionModeSignal":"Signal only (push notifications)","trading-assistant.form.executionModeLive":"Live trading","trading-assistant.form.liveTradingCryptoOnlyHint":"Live trading is available for Crypto only. Other markets can only push signals.","trading-assistant.form.liveTradingNotSupportedHint":"Live trading is not available for this market","trading-assistant.form.broker":"Broker","trading-assistant.form.localDeploymentRequired":"⚠️ Local Deployment Required","trading-assistant.form.localDeploymentHint":"IBKR and MT5 are external trading interfaces that require local deployment of QuantDinger. Cloud SaaS mode is not supported. Please ensure you have installed and configured the trading software (TWS/IB Gateway or MT5 terminal) on your local machine.","trading-assistant.form.ibkrConnectionTitle":"Interactive Brokers Connection","trading-assistant.form.ibkrConnectionHint":"Make sure TWS or IB Gateway is running with API enabled","trading-assistant.validation.brokerRequired":"Please select a broker","trading-assistant.placeholders.selectBroker":"Select broker","trading-assistant.brokerNames":{ibkr:"Interactive Brokers (IBKR)",mt5:"MetaTrader 5 (MT5)",mt4:"MetaTrader 4 (MT4)",futu:"Futu Securities",tiger:"Tiger Brokers",td:"TD Ameritrade",schwab:"Charles Schwab"},"trading-assistant.form.ibkrHost":"Host","trading-assistant.form.ibkrPort":"Port","trading-assistant.form.ibkrPortHint":"TWS Live:7497, TWS Paper:7496, Gateway Live:4001, Gateway Paper:4002","trading-assistant.form.ibkrClientId":"Client ID","trading-assistant.form.ibkrAccount":"Account","trading-assistant.form.ibkrAccountHint":"Leave empty to auto-select first account. Specify for multi-account users.","trading-assistant.placeholders.ibkrAccount":"Optional, e.g. U1234567","trading-assistant.exchange.ibkrConnectionSuccess":"IBKR connected successfully","trading-assistant.exchange.ibkrConnectionFailed":"IBKR connection failed. Please check if TWS/Gateway is running.","trading-assistant.exchange.checkLocalDeployment":"Please ensure you are running locally. Cloud SaaS does not support external trading interfaces.","trading-assistant.form.forexBroker":"Forex Broker","trading-assistant.form.mt5ConnectionTitle":"MetaTrader 5 Connection","trading-assistant.form.mt5ConnectionHint":"Make sure MT5 terminal is running and logged in (Windows only)","trading-assistant.form.mt5Server":"Server","trading-assistant.form.mt5ServerHint":"Broker server name (e.g., ICMarkets-Demo)","trading-assistant.form.mt5Login":"Account Number","trading-assistant.form.mt5Password":"Password","trading-assistant.form.mt5TerminalPath":"MT5 Terminal Path (Optional)","trading-assistant.form.mt5TerminalPathHint":"If MT5 terminal is not installed in the default location, specify the full path to terminal64.exe (e.g., C:\\Program Files\\MetaTrader 5\\terminal64.exe)","trading-assistant.placeholders.mt5Server":"e.g., ICMarkets-Demo","trading-assistant.placeholders.mt5Login":"e.g., 12345678","trading-assistant.placeholders.mt5Password":"Your MT5 password","trading-assistant.placeholders.mt5TerminalPath":"e.g., C:\\Program Files\\MetaTrader 5\\terminal64.exe","trading-assistant.validation.mt5ServerRequired":"Please enter MT5 server","trading-assistant.validation.mt5LoginRequired":"Please enter MT5 account number","trading-assistant.validation.mt5PasswordRequired":"Please enter MT5 password","trading-assistant.validation.portfolioSizeRequired":"Please enter portfolio size","trading-assistant.validation.longRatioRequired":"Please enter long ratio","trading-assistant.exchange.mt5ConnectionSuccess":"MT5 connected successfully","trading-assistant.exchange.mt5ConnectionFailed":"MT5 connection failed. Please check if terminal is running.","trading-assistant.form.notifyChannels":"Notification Channels","trading-assistant.form.notifyChannelsHint":"Choose how you want to receive buy/sell and risk-management signals.","trading-assistant.notify.browser":"Browser","trading-assistant.notify.email":"Email","trading-assistant.notify.phone":"Phone","trading-assistant.notify.telegram":"Telegram","trading-assistant.notify.discord":"Discord","trading-assistant.notify.webhook":"Webhook","trading-assistant.form.notifyEmail":"Email","trading-assistant.form.notifyPhone":"Phone number","trading-assistant.form.notifyTelegram":"Telegram (chat id / username)","trading-assistant.form.notifyDiscord":"Discord (webhook url)","trading-assistant.form.notifyWebhook":"Webhook URL","trading-assistant.form.liveTradingConfigTitle":"Exchange Credentials","trading-assistant.form.liveTradingConfigHint":"Provide your exchange API credentials. You can test the connection before saving.","trading-assistant.form.savedCredential":"Saved credential","trading-assistant.form.savedCredentialHint":"Select a saved credential to auto-fill API keys (optional).","trading-assistant.form.saveCredential":"Save this credential for future use","trading-assistant.form.credentialName":"Credential name (optional)","trading-assistant.form.signalMode":"Signal Mode","trading-assistant.form.signalModeConfirmed":"Confirmed","trading-assistant.form.signalModeAggressive":"Aggressive","trading-assistant.form.signalModeHint":"Confirmed: only check completed candles; Aggressive: also check forming candles","trading-assistant.form.cancel":"Cancel","trading-assistant.form.prev":"Previous","trading-assistant.form.next":"Next","trading-assistant.form.confirmCreate":"Confirm Create","trading-assistant.form.confirmEdit":"Confirm Edit","trading-assistant.messages.createSuccess":"Strategy created successfully","trading-assistant.messages.createFailed":"Failed to create strategy","trading-assistant.messages.updateSuccess":"Strategy updated successfully","trading-assistant.messages.updateFailed":"Failed to update strategy","trading-assistant.messages.deleteSuccess":"Strategy deleted successfully","trading-assistant.messages.deleteFailed":"Failed to delete strategy","trading-assistant.messages.startSuccess":"Strategy started successfully","trading-assistant.messages.startFailed":"Failed to start strategy","trading-assistant.messages.stopSuccess":"Strategy stopped successfully","trading-assistant.messages.stopFailed":"Failed to stop strategy","trading-assistant.messages.loadFailed":"Failed to load strategy list","trading-assistant.messages.runningWarning":"Strategy is running, please stop it before editing","trading-assistant.messages.deleteConfirmWithName":'Are you sure you want to delete strategy "{name}"? This action cannot be undone.',"trading-assistant.messages.deleteConfirm":"Are you sure you want to delete this strategy? This action cannot be undone.","trading-assistant.messages.loadTradesFailed":"Failed to load trading records","trading-assistant.messages.loadPositionsFailed":"Failed to load position records","trading-assistant.messages.loadEquityFailed":"Failed to load equity curve","trading-assistant.messages.loadIndicatorsFailed":"Failed to load indicator list, please try again later","trading-assistant.messages.spotLimitations":"Spot trading has been automatically set to long only with 1x leverage","trading-assistant.messages.autoFillApiConfig":"Auto-filled API configuration for this exchange from history","trading-assistant.messages.batchCreateSuccess":"Successfully created {count} strategies","trading-assistant.messages.batchStartSuccess":"Successfully started {count} strategies","trading-assistant.messages.batchStartFailed":"Failed to start strategies","trading-assistant.messages.batchStopSuccess":"Successfully stopped {count} strategies","trading-assistant.messages.batchStopFailed":"Failed to stop strategies","trading-assistant.messages.batchDeleteSuccess":"Successfully deleted {count} strategies","trading-assistant.messages.batchDeleteFailed":"Failed to delete strategies","trading-assistant.messages.batchDeleteConfirm":'Are you sure you want to delete {count} strategies in group "{name}"? This action cannot be undone.',"trading-assistant.placeholders.selectIndicator":"Please select an indicator","trading-assistant.placeholders.selectExchange":"Please select an exchange","trading-assistant.placeholders.selectMarketCategory":"Please select market category","trading-assistant.placeholders.inputApiKey":"Please enter API Key","trading-assistant.placeholders.inputSecretKey":"Please enter Secret Key","trading-assistant.placeholders.inputPassphrase":"Please enter Passphrase","trading-assistant.placeholders.inputStrategyName":"Please enter strategy name","trading-assistant.placeholders.selectSymbol":"Please select trading pair","trading-assistant.placeholders.selectSymbols":"Please select trading pairs (multi-select)","trading-assistant.placeholders.inputSymbol":"Please enter symbol","trading-assistant.placeholders.selectTimeframe":"Please select timeframe","trading-assistant.placeholders.selectKlinePeriod":"Please select K-line period","trading-assistant.placeholders.inputAiFilterPrompt":"Please enter custom prompt (optional)","trading-assistant.placeholders.inputEmail":"Please enter email","trading-assistant.placeholders.inputPhone":"Please enter phone number","trading-assistant.placeholders.inputTelegram":"Please enter Telegram chat id / username","trading-assistant.placeholders.inputDiscord":"Please enter Discord webhook url","trading-assistant.placeholders.inputWebhook":"Please enter webhook url","trading-assistant.placeholders.selectSavedCredential":"Select saved credential","trading-assistant.placeholders.inputCredentialName":"For example: Binance main key","trading-assistant.validation.indicatorRequired":"Please select an indicator","trading-assistant.validation.exchangeRequired":"Please select an exchange","trading-assistant.validation.apiKeyRequired":"Please enter API Key","trading-assistant.validation.secretKeyRequired":"Please enter Secret Key","trading-assistant.validation.passphraseRequired":"Please enter Passphrase","trading-assistant.validation.exchangeConfigIncomplete":"Please fill in complete exchange configuration information","trading-assistant.validation.testConnectionRequired":'Please click "Test Connection" button and ensure the connection is successful',"trading-assistant.validation.testConnectionFailed":"Connection test failed, please check the configuration and test again","trading-assistant.validation.credentialRequired":"Please add and test exchange credentials in Personal Center first","trading-assistant.validation.strategyNameRequired":"Please enter strategy name","trading-assistant.validation.symbolRequired":"Please select trading pair","trading-assistant.validation.symbolsRequired":"Please select at least one trading pair","trading-assistant.validation.initialCapitalRequired":"Please enter initial capital","trading-assistant.validation.leverageRequired":"Please enter leverage","trading-assistant.validation.emailInvalid":"Invalid email address","trading-assistant.validation.notifyChannelRequired":"Please select at least one notification channel","trading-assistant.table.time":"Time","trading-assistant.table.type":"Type","trading-assistant.table.price":"Price","trading-assistant.table.amount":"Amount","trading-assistant.table.value":"Value","trading-assistant.table.commission":"Commission","trading-assistant.table.symbol":"Trading Pair","trading-assistant.table.side":"Side","trading-assistant.table.size":"Position Size","trading-assistant.table.entryPrice":"Entry Price","trading-assistant.table.currentPrice":"Current Price","trading-assistant.table.unrealizedPnl":"Unrealized P&L","trading-assistant.table.pnlPercent":"P&L %","trading-assistant.table.buy":"Buy","trading-assistant.table.sell":"Sell","trading-assistant.table.long":"Long","trading-assistant.table.short":"Short","trading-assistant.table.noPositions":"No positions","trading-assistant.detail.title":"Strategy Details","trading-assistant.detail.strategyName":"Strategy Name","trading-assistant.detail.strategyType":"Strategy Type","trading-assistant.detail.status":"Status","trading-assistant.detail.tradingMode":"Trading Mode","trading-assistant.detail.exchange":"Exchange","trading-assistant.detail.initialCapital":"Initial Capital","trading-assistant.detail.totalInvestment":"Total Investment","trading-assistant.detail.currentEquity":"Current Equity","trading-assistant.detail.totalPnl":"Total P&L","trading-assistant.detail.indicatorName":"Indicator Name","trading-assistant.detail.maxLeverage":"Max Leverage","trading-assistant.detail.decideInterval":"Decision Interval","trading-assistant.detail.symbols":"Trading Symbols","trading-assistant.detail.createdAt":"Created At","trading-assistant.detail.updatedAt":"Updated At","trading-assistant.detail.llmConfig":"AI Model Configuration","trading-assistant.detail.exchangeConfig":"Exchange Configuration","trading-assistant.detail.provider":"Provider","trading-assistant.detail.modelId":"Model ID","trading-assistant.detail.close":"Close","trading-assistant.detail.loadFailed":"Failed to load strategy details","trading-assistant.equity.noData":"No equity data","trading-assistant.equity.equity":"Equity","trading-assistant.exchange.tradingMode":"Trading Mode","trading-assistant.exchange.virtual":"Virtual Trading","trading-assistant.exchange.live":"Live Trading","trading-assistant.exchange.selectExchange":"Select Exchange","trading-assistant.exchange.walletAddress":"Wallet Address","trading-assistant.exchange.walletAddressPlaceholder":"Please enter wallet address (starts with 0x)","trading-assistant.exchange.privateKey":"Private Key","trading-assistant.exchange.privateKeyPlaceholder":"Please enter private key (64 characters)","trading-assistant.exchange.testConnection":"Test Connection","trading-assistant.exchange.connectionSuccess":"Connection successful","trading-assistant.exchange.connectionFailed":"Connection failed","trading-assistant.exchange.testFailed":"Connection test failed","trading-assistant.exchange.fillComplete":"Please fill in complete exchange configuration information","trading-assistant.exchange.ipWhitelistTip":"Please add the following IPs to the whitelist in your exchange API settings:","trading-assistant.strategyTypeOptions.ai":"AI-Driven Strategy","trading-assistant.strategyTypeOptions.indicator":"Indicator Strategy","trading-assistant.strategyTypeOptions.aiDeveloping":"AI-Driven Strategy feature is under development, stay tuned","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"AI-Driven Strategy feature is under development","trading-assistant.indicatorType.trend":"Trend","trading-assistant.indicatorType.momentum":"Momentum","trading-assistant.indicatorType.volatility":"Volatility","trading-assistant.indicatorType.volume":"Volume","trading-assistant.indicatorType.custom":"Custom","trading-assistant.exchangeNames":{okx:"OKX",binance:"Binance",hyperliquid:"Hyperliquid",blockchaincom:"Blockchain.com",coinbaseexchange:"Coinbase",gate:"Gate.io",mexc:"MEXC",kraken:"Kraken",bitfinex:"Bitfinex",bybit:"Bybit",kucoin:"KuCoin",huobi:"Huobi",bitget:"Bitget",bitmex:"BitMEX",deribit:"Deribit",phemex:"Phemex",bitmart:"BitMart",bitstamp:"Bitstamp",bittrex:"Bittrex",poloniex:"Poloniex",gemini:"Gemini",cryptocom:"Crypto.com",bitflyer:"bitFlyer",upbit:"Upbit",bithumb:"Bithumb",coinone:"Coinone",zb:"ZB",lbank:"LBank",bibox:"Bibox",bigone:"BigONE",bitrue:"Bitrue",coinex:"CoinEx",digifinex:"DigiFinex",ftx:"FTX",ftxus:"FTX US",binanceus:"Binance US",binancecoinm:"Binance COIN-M",binanceusdm:"Binance USDⓈ-M",ibkr:"Interactive Brokers (IBKR)",deepcoin:"Deepcoin"},"ai-trading-assistant.title":"AI Trading Assistant","ai-trading-assistant.strategyList":"Strategy List","ai-trading-assistant.createStrategy":"Create Strategy","ai-trading-assistant.noStrategy":"No strategies","ai-trading-assistant.selectStrategy":"Please select a strategy from the left to view details","ai-trading-assistant.startStrategy":"Start Strategy","ai-trading-assistant.stopStrategy":"Stop Strategy","ai-trading-assistant.editStrategy":"Edit Strategy","ai-trading-assistant.deleteStrategy":"Delete Strategy","ai-trading-assistant.status.running":"Running","ai-trading-assistant.status.stopped":"Stopped","ai-trading-assistant.status.error":"Error","ai-trading-assistant.tabs.tradingRecords":"Trading Records","ai-trading-assistant.tabs.positions":"Positions","ai-trading-assistant.tabs.aiDecisions":"AI Decisions","ai-trading-assistant.tabs.equityCurve":"Equity Curve","ai-trading-assistant.form.createTitle":"Create AI Trading Strategy","ai-trading-assistant.form.editTitle":"Edit AI Trading Strategy","ai-trading-assistant.form.strategyName":"Strategy Name","ai-trading-assistant.form.modelId":"AI Model","ai-trading-assistant.form.modelIdHint":"Using system OpenRouter service, no API Key configuration needed","ai-trading-assistant.form.decideInterval":"Decision Interval","ai-trading-assistant.form.decideInterval5m":"5 Minutes","ai-trading-assistant.form.decideInterval10m":"10 Minutes","ai-trading-assistant.form.decideInterval30m":"30 Minutes","ai-trading-assistant.form.decideInterval1h":"1 Hour","ai-trading-assistant.form.decideInterval4h":"4 Hours","ai-trading-assistant.form.decideInterval1d":"1 Day","ai-trading-assistant.form.decideInterval1w":"1 Week","ai-trading-assistant.form.decideIntervalHint":"Time interval for AI decision making","ai-trading-assistant.form.runPeriod":"Run Period","ai-trading-assistant.form.runPeriodHint":"Start and end time for strategy execution","ai-trading-assistant.form.startDate":"Start Date","ai-trading-assistant.form.endDate":"End Date","ai-trading-assistant.form.qdtCostTitle":"QDT Cost Notice","ai-trading-assistant.form.qdtCostHint":"Each AI decision will cost {cost} QDT. Please ensure your account has sufficient QDT balance. During strategy execution, each decision will be charged in real-time.","ai-trading-assistant.form.apiKey":"API Key","ai-trading-assistant.form.exchange":"Select Exchange","ai-trading-assistant.form.secretKey":"Secret Key","ai-trading-assistant.form.passphrase":"Passphrase","ai-trading-assistant.form.testConnection":"Test Connection","ai-trading-assistant.form.symbol":"Trading Pair","ai-trading-assistant.form.symbolHint":"Select the trading pair to trade","ai-trading-assistant.form.initialCapital":"Initial Capital (Margin)","ai-trading-assistant.form.leverage":"Leverage","ai-trading-assistant.form.timeframe":"Timeframe","ai-trading-assistant.form.timeframe1m":"1 Minute","ai-trading-assistant.form.timeframe5m":"5 Minutes","ai-trading-assistant.form.timeframe15m":"15 Minutes","ai-trading-assistant.form.timeframe30m":"30 Minutes","ai-trading-assistant.form.timeframe1H":"1 Hour","ai-trading-assistant.form.timeframe4H":"4 Hours","ai-trading-assistant.form.timeframe1D":"1 Day","ai-trading-assistant.form.marketType":"Market Type","ai-trading-assistant.form.marketTypeFutures":"Futures","ai-trading-assistant.form.marketTypeSpot":"Spot","ai-trading-assistant.form.totalPnl":"Total PnL","ai-trading-assistant.form.customPrompt":"Custom Prompt","ai-trading-assistant.form.customPromptHint":"Optional, used to customize AI trading strategy and decision logic","ai-trading-assistant.form.cancel":"Cancel","ai-trading-assistant.form.prev":"Previous","ai-trading-assistant.form.next":"Next","ai-trading-assistant.form.confirmCreate":"Confirm Create","ai-trading-assistant.form.confirmEdit":"Confirm Edit","ai-trading-assistant.messages.createSuccess":"Strategy created successfully","ai-trading-assistant.messages.createFailed":"Failed to create strategy","ai-trading-assistant.messages.updateSuccess":"Strategy updated successfully","ai-trading-assistant.messages.updateFailed":"Failed to update strategy","ai-trading-assistant.messages.deleteSuccess":"Strategy deleted successfully","ai-trading-assistant.messages.deleteFailed":"Failed to delete strategy","ai-trading-assistant.messages.startSuccess":"Strategy started successfully","ai-trading-assistant.messages.startFailed":"Failed to start strategy","ai-trading-assistant.messages.stopSuccess":"Strategy stopped successfully","ai-trading-assistant.messages.stopFailed":"Failed to stop strategy","ai-trading-assistant.messages.loadFailed":"Failed to load strategy list","ai-trading-assistant.messages.loadDecisionsFailed":"Failed to load AI decision records","ai-trading-assistant.messages.deleteConfirm":"Are you sure you want to delete this strategy? This action cannot be undone.","ai-trading-assistant.placeholders.inputStrategyName":"Please enter strategy name","ai-trading-assistant.placeholders.selectModelId":"Please select AI model","ai-trading-assistant.placeholders.selectDecideInterval":"Please select decision interval","ai-trading-assistant.placeholders.startTime":"Start Time","ai-trading-assistant.placeholders.endTime":"End Time","ai-trading-assistant.placeholders.inputApiKey":"Please enter API Key","ai-trading-assistant.placeholders.selectExchange":"Please select an exchange","ai-trading-assistant.placeholders.inputSecretKey":"Please enter Secret Key","ai-trading-assistant.placeholders.inputPassphrase":"Please enter Passphrase","ai-trading-assistant.placeholders.selectSymbol":"Please select trading pair, e.g.: BTC/USDT","ai-trading-assistant.placeholders.selectTimeframe":"Please select timeframe","ai-trading-assistant.placeholders.inputCustomPrompt":"Please enter custom prompt (optional)","ai-trading-assistant.validation.strategyNameRequired":"Please enter strategy name","ai-trading-assistant.validation.modelIdRequired":"Please select AI model","ai-trading-assistant.validation.runPeriodRequired":"Please select run period","ai-trading-assistant.validation.apiKeyRequired":"Please enter API Key","ai-trading-assistant.validation.exchangeRequired":"Please select an exchange","ai-trading-assistant.validation.secretKeyRequired":"Please enter Secret Key","ai-trading-assistant.validation.symbolRequired":"Please select trading pair","ai-trading-assistant.validation.initialCapitalRequired":"Please enter initial capital","ai-trading-assistant.table.time":"Time","ai-trading-assistant.table.type":"Type","ai-trading-assistant.table.price":"Price","ai-trading-assistant.table.amount":"Amount","ai-trading-assistant.table.value":"Value","ai-trading-assistant.table.symbol":"Trading Pair","ai-trading-assistant.table.side":"Side","ai-trading-assistant.table.size":"Position Size","ai-trading-assistant.table.entryPrice":"Entry Price","ai-trading-assistant.table.currentPrice":"Current Price","ai-trading-assistant.table.unrealizedPnl":"Unrealized P&L","ai-trading-assistant.table.profit":"Profit","ai-trading-assistant.table.openLong":"Open Long","ai-trading-assistant.table.closeLong":"Close Long","ai-trading-assistant.table.openShort":"Open Short","ai-trading-assistant.table.closeShort":"Close Short","ai-trading-assistant.table.addLong":"Add Long","ai-trading-assistant.table.addShort":"Add Short","ai-trading-assistant.table.closeShortProfit":"Close Short (TP)","ai-trading-assistant.table.closeShortStop":"Close Short (SL)","ai-trading-assistant.table.closeLongProfit":"Close Long (TP)","ai-trading-assistant.table.closeLongStop":"Close Long (SL)","ai-trading-assistant.table.buy":"Buy","ai-trading-assistant.table.sell":"Sell","ai-trading-assistant.table.long":"Long","ai-trading-assistant.table.short":"Short","ai-trading-assistant.table.hold":"Hold","ai-trading-assistant.table.reasoning":"Analysis Reasoning","ai-trading-assistant.table.decisions":"Decisions","ai-trading-assistant.table.riskAssessment":"Risk","ai-trading-assistant.table.confidence":"Confidence","ai-trading-assistant.table.totalRecords":"Total {total} records","ai-trading-assistant.table.noPositions":"No positions","ai-trading-assistant.detail.title":"Strategy Details","ai-trading-assistant.equity.noData":"No equity data","ai-trading-assistant.equity.equity":"Equity","ai-trading-assistant.exchange.testFailed":"Connection test failed","ai-trading-assistant.exchange.connectionSuccess":"Connection successful","ai-trading-assistant.exchange.connectionFailed":"Connection failed","ai-trading-assistant.form.advancedSettings":"Advanced Settings","ai-trading-assistant.form.orderMode":"Order Mode","ai-trading-assistant.form.orderModeMaker":"Maker (Limit)","ai-trading-assistant.form.orderModeTaker":"Taker (Market)","ai-trading-assistant.form.orderModeHint":"Maker mode uses limit orders with lower fees; Taker mode executes immediately with higher fees","ai-trading-assistant.form.makerWaitSec":"Maker Wait Time (seconds)","ai-trading-assistant.form.makerWaitSecHint":"Time to wait for order fill before canceling and retrying","ai-trading-assistant.form.makerRetries":"Maker Retries","ai-trading-assistant.form.makerRetriesHint":"Maximum number of retries when maker order is not filled","ai-trading-assistant.form.fallbackToMarket":"Fallback to Market on failure","ai-trading-assistant.form.fallbackToMarketHint":"If limit order (open/close) is not filled, downgrade to market order to ensure execution","ai-trading-assistant.form.marginMode":"Margin Mode","ai-trading-assistant.form.marginModeCross":"Cross Margin","ai-trading-assistant.form.marginModeIsolated":"Isolated Margin","ai-analysis.title":"Quantum Trading Engine","ai-analysis.system.online":"ONLINE","ai-analysis.system.agents":"AGENTS","ai-analysis.system.active":"ACTIVE","ai-analysis.system.stage":"STAGE","ai-analysis.panel.roster":"AGENTS ROSTER","ai-analysis.panel.thinking":"Thinking...","ai-analysis.panel.done":"Done","ai-analysis.panel.standby":"Standby","ai-analysis.input.title":"QUANTUM TRADING ENGINE","ai-analysis.input.placeholder":"SELECT TARGET ASSET (e.g. BTC/USDT)","ai-analysis.input.watchlist":"Watchlist","ai-analysis.input.start":"START ANALYSIS","ai-analysis.input.recent":"RECENT MISSIONS:","ai-analysis.vis.stage":"STAGE","ai-analysis.vis.processing":"PROCESSING","ai-analysis.result.complete":"ANALYSIS COMPLETE","ai-analysis.result.signal":"FINAL SIGNAL","ai-analysis.result.confidence":"CONFIDENCE:","ai-analysis.result.new":"NEW ANALYSIS","ai-analysis.result.full":"VIEW FULL DOSSIER","ai-analysis.logs.title":"SYSTEM LOGS","ai-analysis.modal.title":"CLASSIFIED REPORT","ai-analysis.modal.fundamental":"FUNDAMENTAL ANALYSIS","ai-analysis.modal.technical":"TECHNICAL ANALYSIS","ai-analysis.modal.sentiment":"SENTIMENT ANALYSIS","ai-analysis.modal.risk":"RISK ASSESSMENT","ai-analysis.stage.idle":"IDLE","ai-analysis.stage.1":"PHASE 1: MULTI-DIMENSIONAL ANALYSIS","ai-analysis.stage.2":"PHASE 2: BULL/BEAR DEBATE","ai-analysis.stage.3":"PHASE 3: STRATEGIC PLANNING","ai-analysis.stage.4":"PHASE 4: RISK COMMITTEE REVIEW","ai-analysis.stage.complete":"COMPLETE","ai-analysis.agent.investment_director":"Investment Director","ai-analysis.agent.role.investment_director":"Comprehensive Analysis & Final Conclusion","ai-analysis.agent.market":"Market Analyst","ai-analysis.agent.role.market":"Technical & Market Data","ai-analysis.agent.fundamental":"Fundamental Analyst","ai-analysis.agent.role.fundamental":"Financials & Valuation","ai-analysis.agent.technical":"Technical Analyst","ai-analysis.agent.role.technical":"Technical Indicators & Charts","ai-analysis.agent.news":"News Analyst","ai-analysis.agent.role.news":"Global News Filter","ai-analysis.agent.sentiment":"Sentiment Analyst","ai-analysis.agent.role.sentiment":"Social & Emotional","ai-analysis.agent.risk":"Risk Analyst","ai-analysis.agent.role.risk":"Basic Risk Check","ai-analysis.agent.bull":"Bull Researcher","ai-analysis.agent.role.bull":"Growth Catalyst Hunter","ai-analysis.agent.bear":"Bear Researcher","ai-analysis.agent.role.bear":"Risk & Flaw Hunter","ai-analysis.agent.manager":"Research Manager","ai-analysis.agent.role.manager":"Debate Moderator","ai-analysis.agent.trader":"Trader Agent","ai-analysis.agent.role.trader":"Execution Strategist","ai-analysis.agent.risky":"Risky Analyst","ai-analysis.agent.role.risky":"Aggressive Strategy","ai-analysis.agent.neutral":"Neutral Analyst","ai-analysis.agent.role.neutral":"Balanced Strategy","ai-analysis.agent.safe":"Safe Analyst","ai-analysis.agent.role.safe":"Conservative Strategy","ai-analysis.agent.cro":"Risk Manager (CRO)","ai-analysis.agent.role.cro":"Final Decision Authority","ai-analysis.script.market":"Fetching OHLCV data from major exchanges...","ai-analysis.script.fundamental":"Retrieving quarterly financial reports...","ai-analysis.script.technical":"Analyzing technical indicators and chart patterns...","ai-analysis.script.news":"Scanning global financial news feeds...","ai-analysis.script.sentiment":"Analyzing social media trends...","ai-analysis.script.risk":"Calculating historical volatility...","invite.inviteLink":"Invite Link","invite.copy":"Copy Link","invite.copySuccess":"Copied successfully!","invite.copyFailed":"Copy failed, please copy manually","invite.noInviteLink":"Invite link not generated","invite.totalInvites":"Total Invites","invite.totalReward":"Total Reward","invite.rules":"Invite Rules","invite.rule1":"You will receive a reward for each friend you successfully invite to register","invite.rule2":"When your invited friend completes their first transaction, you will receive an additional reward","invite.rule3":"Invite rewards will be directly credited to your account","invite.inviteList":"Invite List","invite.tasks":"Task Center","invite.inviteeName":"Invitee","invite.inviteTime":"Invite Time","invite.status":"Status","invite.reward":"Reward","invite.active":"Active","invite.inactive":"Inactive","invite.completed":"Completed","invite.claimed":"Claimed","invite.pending":"Pending","invite.goToTask":"Go to Task","invite.claimReward":"Claim Reward","invite.verify":"Verify","invite.verifySuccess":"Verification successful! Task completed","invite.verifyNotCompleted":"Task not completed yet, please complete the task first","invite.verifyFailed":"Verification failed, please try again later","invite.claimSuccess":"Successfully claimed {reward} QDT!","invite.claimFailed":"Claim failed, please try again later","invite.totalRecords":"Total {total} records","invite.task.twitter.title":"Share Tweet on X (Twitter)","invite.task.twitter.desc":"Share our official tweet to your X (Twitter) account","invite.task.youtube.title":"Follow our YouTube Channel","invite.task.youtube.desc":"Subscribe and follow our official YouTube channel","invite.task.telegram.title":"Join Telegram Group","invite.task.telegram.desc":"Join our official Telegram community group","invite.task.discord.title":"Join Discord Server","invite.task.discord.desc":"Join our Discord community server",message:"-","layouts.usermenu.dialog.title":"Message","layouts.usermenu.dialog.content":"Are you sure you would like to logout?","layouts.userLayout.title":"Clarity from Uncertainty","signal-robot.title":"Signal Robot Console","signal-robot.createBot":"Create New Bot","signal-robot.search.nameOrSymbol":"Name/Symbol","signal-robot.search.placeholder":"Search bot name or symbol","signal-robot.search.status":"Status","signal-robot.search.statusAll":"All","signal-robot.search.statusRunning":"Running","signal-robot.search.statusPaused":"Paused","signal-robot.search.query":"Query","signal-robot.search.reset":"Reset","signal-robot.table.botName":"Bot Name","signal-robot.table.symbolTimeframe":"Symbol/Timeframe","signal-robot.table.triggerStrategy":"Trigger Strategy","signal-robot.table.notificationChannels":"Notification Channels","signal-robot.table.status":"Status","signal-robot.table.action":"Action","signal-robot.table.triggerConditions":"{count} trigger conditions","signal-robot.table.monitoring":"Monitoring","signal-robot.table.paused":"Paused","signal-robot.table.edit":"Edit","signal-robot.table.pause":"Pause","signal-robot.table.start":"Start","signal-robot.table.delete":"Delete","signal-robot.table.deleteConfirm":"Are you sure you want to delete this bot?","signal-robot.table.deleteSuccess":"Deleted successfully","signal-robot.table.startSuccess":"Bot started","signal-robot.table.pauseSuccess":"Bot paused","signal-robot.channel.telegram":"Telegram","signal-robot.channel.discord":"Discord","signal-robot.channel.email":"Email","signal-robot.channel.webhook":"Webhook","signal-robot.channel.browser":"Browser Push","signal-robot.modal.createTitle":"Create New Signal Robot","signal-robot.modal.editTitle":"Edit Signal Robot","signal-robot.modal.step.basic":"Basic Settings","signal-robot.modal.step.entry":"Entry Strategy","signal-robot.modal.step.position":"Position Management","signal-robot.modal.step.risk":"Risk Control","signal-robot.modal.step.notify":"Notification Config","signal-robot.modal.prev":"Previous","signal-robot.modal.next":"Next","signal-robot.modal.preview":"Preview Backtest","signal-robot.modal.complete":"Complete & Run","signal-robot.modal.saveSuccess":"Saved successfully","signal-robot.modal.previewDeveloping":"Preview feature is under development...","signal-robot.modal.basicInfoRequired":"Please complete basic information","signal-robot.basic.alert":"Set basic information for the bot","signal-robot.basic.title":"Basic Information","signal-robot.basic.botName":"Bot Name","signal-robot.basic.botNamePlaceholder":"e.g.: BTC SuperTrend Strategy","signal-robot.basic.symbol":"Trading Pair","signal-robot.basic.symbolPlaceholder":"Select from watchlist","signal-robot.basic.noWatchlist":"No watchlist items, please add in market page first","signal-robot.basic.timeframe":"K-Line Period","signal-robot.basic.timeframe15m":"15 Minutes","signal-robot.basic.timeframe30m":"30 Minutes","signal-robot.basic.timeframe1h":"1 Hour","signal-robot.basic.timeframe4h":"4 Hours","signal-robot.basic.timeframe1d":"1 Day","signal-robot.basic.autoNameSuggestion":"{symbol} Signal Robot","signal-robot.entry.alert":"Trigger entry signal when all conditions below are met","signal-robot.entry.condition":"Condition {index}","signal-robot.entry.indicator":"Indicator","signal-robot.entry.indicatorSupertrend":"SuperTrend","signal-robot.entry.indicatorEma":"EMA (Exponential Moving Average)","signal-robot.entry.indicatorRsi":"RSI (Relative Strength Index)","signal-robot.entry.indicatorMacd":"MACD","signal-robot.entry.indicatorBollinger":"Bollinger Bands","signal-robot.entry.atrPeriod":"ATR Period","signal-robot.entry.multiplier":"Multiplier","signal-robot.entry.triggerSignal":"Trigger Signal","signal-robot.entry.signalTrendBullish":"Trend Bullish","signal-robot.entry.signalTrendBearish":"Trend Bearish","signal-robot.entry.signalIsUptrend":"Is Uptrend","signal-robot.entry.signalIsDowntrend":"Is Downtrend","signal-robot.entry.period":"Period","signal-robot.entry.compareCondition":"Compare Condition","signal-robot.entry.priceAbove":"Price > EMA (Price Above)","signal-robot.entry.priceBelow":"Price < EMA (Price Below)","signal-robot.entry.crossUp":"Price Crosses Above EMA (Golden Cross)","signal-robot.entry.crossDown":"Price Crosses Below EMA (Death Cross)","signal-robot.entry.compare":"Compare","signal-robot.entry.greaterThan":"Greater Than","signal-robot.entry.lessThan":"Less Than","signal-robot.entry.crossUpShort":"Cross Up","signal-robot.entry.crossDownShort":"Cross Down","signal-robot.entry.threshold":"Threshold","signal-robot.entry.selectIndicator":"Please select an indicator to configure parameters","signal-robot.entry.addCondition":"Add Condition","signal-robot.position.alert":"Configure initial position size, leverage and pyramiding rules","signal-robot.position.basicTitle":"Basic Position Management","signal-robot.position.initialSize":"Initial Size (Capital %)","signal-robot.position.initialSizeHint":"Recommended 5% - 20%","signal-robot.position.leverage":"Leverage","signal-robot.position.leverageHint":"Please ensure your exchange account supports this leverage","signal-robot.position.maxPyramiding":"Max Pyramiding Times","signal-robot.position.maxPyramidingHint":"0 means no pyramiding","signal-robot.position.pyramidingTitle":"Pyramiding Rules","signal-robot.position.pyramidingEnabled":"Enabled","signal-robot.position.pyramidingDisabled":"Disabled","signal-robot.position.pyramidingCondition":"Pyramiding Trigger Condition","signal-robot.position.priceRisePct":"Price Rises (Long) / Falls (Short)","signal-robot.position.profitPct":"Profit Reaches","signal-robot.position.triggerThreshold":"Trigger Threshold (%)","signal-robot.position.triggerThresholdHint":"e.g. 3%: add position once every 3% rise","signal-robot.position.addSize":"Single Add Size (Capital %)","signal-robot.position.pyramidingDisabledHint":"Pyramiding disabled, only initial position will be executed","signal-robot.risk.alert":"Configure take profit, stop loss and exit rules","signal-robot.risk.stopLossTitle":"Stop Loss","signal-robot.risk.stopLossEnabled":"Enabled","signal-robot.risk.stopLossDisabled":"Disabled","signal-robot.risk.stopLossType":"Stop Loss Type","signal-robot.risk.stopLossFixedPct":"Fixed Percentage","signal-robot.risk.stopLossAtrMultiplier":"ATR Multiplier","signal-robot.risk.stopLossValue":"Value","signal-robot.risk.stopLossFixedHint":"e.g. 2%: stop loss when loss reaches 2%","signal-robot.risk.stopLossAtrHint":"e.g. 2.0: stop loss when price touches ATR*2.0","signal-robot.risk.stopLossDisabledHint":"Stop loss disabled (high risk)","signal-robot.risk.trailingStopTitle":"Trailing Stop","signal-robot.risk.activationProfit":"Activation Profit (%)","signal-robot.risk.activationProfitHint":"Start trailing when profit reaches this level","signal-robot.risk.callbackPct":"Callback (%)","signal-robot.risk.callbackPctHint":"Trigger take profit when price falls from peak by this percentage","signal-robot.risk.trailingStopDisabledHint":"Trailing stop disabled","signal-robot.risk.otherExitTitle":"Other Exit Rules","signal-robot.risk.signalExit":"Allow Signal Exit","signal-robot.risk.signalExitHint":"Close position immediately when reverse signal appears (e.g. close long when short signal appears)","signal-robot.notify.alert":"Configure notification methods when signal is triggered","signal-robot.notify.channelTitle":"Notification Channels","signal-robot.notify.discordWebhook":"Discord Webhook","signal-robot.notify.genericWebhook":"Generic Webhook","signal-robot.notify.webhookUrl":"Webhook URL","signal-robot.notify.webhookUrlPlaceholder":"https://example.com/webhook","signal-robot.notify.discordUrl":"Discord URL","signal-robot.notify.discordUrlPlaceholder":"https://discord.com/api/webhooks/...","signal-robot.operator.greaterThan":"Greater Than","signal-robot.operator.lessThan":"Less Than","signal-robot.operator.equal":"Equal","signal-robot.operator.goldenCross":"Golden Cross","signal-robot.operator.deathCross":"Death Cross","signal-robot.operator.increaseBy":"Increase By","signal-robot.operator.decreaseBy":"Decrease By","signal-robot.indicator.price":"Price","signal-robot.indicator.rsi":"RSI","signal-robot.indicator.kdjK":"KDJ(K)","signal-robot.indicator.kdjJ":"KDJ(J)","signal-robot.indicator.macd":"MACD","signal-robot.indicator.macdHist":"MACD Histogram","signal-robot.indicator.bollingerUp":"Bollinger Upper","signal-robot.indicator.bollingerLow":"Bollinger Lower","signal-robot.indicator.volume":"Volume","signal-robot.indicator.changePct1h":"1H Change %","signal-robot.indicator.changePct24h":"24H Change %","signal-robot.indicator.signalLine":"Signal Line","settings.title":"System Settings","settings.description":"Configure application settings, API keys, and system preferences","settings.save":"Save Settings","settings.reset":"Reset","settings.saveSuccess":"Settings saved successfully","settings.saveFailed":"Failed to save settings","settings.loadFailed":"Failed to load settings","settings.openrouterBalance":"OpenRouter Account Balance","settings.queryBalance":"Query Balance","settings.balanceUsage":"Used","settings.balanceRemaining":"Remaining","settings.balanceLimit":"Total Limit","settings.balanceQuerySuccess":"Balance query successful","settings.balanceQueryFailed":"Failed to query balance","settings.balanceNotQueried":'Click "Query Balance" to get account info',"settings.default":"Default","settings.pleaseSelect":"Please select","settings.inputApiKey":"Enter key","settings.getApi":"Get API","settings.link.getApi":"Get API","settings.link.getApiKey":"Get API Key","settings.link.getToken":"Get Token","settings.link.createBot":"Create Bot","settings.link.viewModels":"View Models","settings.link.freeRegister":"Free Register","settings.link.supportedExchanges":"Supported Exchanges","settings.link.applyApi":"Apply API","settings.link.createSearchEngine":"Create Search Engine","settings.link.getTurnstileKey":"Get Turnstile Key","settings.link.getGoogleCredentials":"Get Google Credentials","settings.link.getGithubCredentials":"Get GitHub Credentials","settings.restartRequired":"Settings saved. Some changes require Python service restart to take effect.","settings.copyRestartCmd":"Copy restart command","settings.copySuccess":"Copied","settings.copyFailed":"Copy failed","settings.group.server":"Server Configuration","settings.group.auth":"Security & Authentication","settings.group.ai":"AI / LLM Configuration","settings.group.trading":"Live Trading","settings.group.strategy":"Strategy Execution","settings.group.data_source":"Data Sources","settings.group.notification":"Notifications","settings.group.email":"Email (SMTP)","settings.group.sms":"SMS (Twilio)","settings.group.agent":"AI Agent","settings.group.network":"Network & Proxy","settings.group.search":"Web Search","settings.group.security":"Registration & Security","settings.group.app":"Application","settings.field.SECRET_KEY":"Secret Key","settings.field.ADMIN_USER":"Admin Username","settings.field.ADMIN_PASSWORD":"Admin Password","settings.field.ADMIN_EMAIL":"Admin Email","settings.field.ENABLE_REGISTRATION":"Enable Registration","settings.field.TURNSTILE_SITE_KEY":"Turnstile Site Key","settings.field.TURNSTILE_SECRET_KEY":"Turnstile Secret Key","settings.field.FRONTEND_URL":"Frontend URL","settings.field.GOOGLE_CLIENT_ID":"Google Client ID","settings.field.GOOGLE_CLIENT_SECRET":"Google Client Secret","settings.field.GOOGLE_REDIRECT_URI":"Google Redirect URI","settings.field.GITHUB_CLIENT_ID":"GitHub Client ID","settings.field.GITHUB_CLIENT_SECRET":"GitHub Client Secret","settings.field.GITHUB_REDIRECT_URI":"GitHub Redirect URI","settings.field.SECURITY_IP_MAX_ATTEMPTS":"IP Max Failed Attempts","settings.field.SECURITY_IP_WINDOW_MINUTES":"IP Window (minutes)","settings.field.SECURITY_IP_BLOCK_MINUTES":"IP Block Duration (minutes)","settings.field.SECURITY_ACCOUNT_MAX_ATTEMPTS":"Account Max Failed Attempts","settings.field.SECURITY_ACCOUNT_WINDOW_MINUTES":"Account Window (minutes)","settings.field.SECURITY_ACCOUNT_BLOCK_MINUTES":"Account Block Duration (minutes)","settings.field.VERIFICATION_CODE_EXPIRE_MINUTES":"Verification Code Expiry (minutes)","settings.field.VERIFICATION_CODE_RATE_LIMIT":"Code Rate Limit (seconds)","settings.field.VERIFICATION_CODE_IP_HOURLY_LIMIT":"Code Hourly Limit per IP","settings.field.VERIFICATION_CODE_MAX_ATTEMPTS":"Code Max Attempts","settings.field.VERIFICATION_CODE_LOCK_MINUTES":"Code Lock Minutes","settings.field.PYTHON_API_HOST":"Listen Address","settings.field.PYTHON_API_PORT":"Port","settings.field.PYTHON_API_DEBUG":"Debug Mode","settings.field.ENABLE_PENDING_ORDER_WORKER":"Enable Order Worker","settings.field.PENDING_ORDER_STALE_SEC":"Order Stale Timeout (sec)","settings.field.ORDER_MODE":"Order Mode","settings.field.MAKER_WAIT_SEC":"Limit Order Wait Time (sec)","settings.field.MAKER_OFFSET_BPS":"Limit Order Price Offset (bps)","settings.field.SIGNAL_WEBHOOK_URL":"Webhook URL","settings.field.SIGNAL_WEBHOOK_TOKEN":"Webhook Token","settings.field.SIGNAL_NOTIFY_TIMEOUT_SEC":"Notify Timeout (sec)","settings.field.TELEGRAM_BOT_TOKEN":"Telegram Bot Token","settings.field.SMTP_HOST":"SMTP Host","settings.field.SMTP_PORT":"SMTP Port","settings.field.SMTP_USER":"SMTP Username","settings.field.SMTP_PASSWORD":"SMTP Password","settings.field.SMTP_FROM":"From Address","settings.field.SMTP_USE_TLS":"Use TLS","settings.field.SMTP_USE_SSL":"Use SSL","settings.field.TWILIO_ACCOUNT_SID":"Account SID","settings.field.TWILIO_AUTH_TOKEN":"Auth Token","settings.field.TWILIO_FROM_NUMBER":"From Number","settings.field.DISABLE_RESTORE_RUNNING_STRATEGIES":"Disable Auto Restore","settings.field.STRATEGY_TICK_INTERVAL_SEC":"Tick Interval (sec)","settings.field.PRICE_CACHE_TTL_SEC":"Price Cache TTL (sec)","settings.field.PROXY_URL":"Full Proxy URL","settings.field.RATE_LIMIT":"Rate Limit (per min)","settings.field.ENABLE_CACHE":"Enable Cache","settings.field.ENABLE_REQUEST_LOG":"Enable Request Log","settings.field.ENABLE_AGENT_MEMORY":"Enable Agent Memory","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"Enable Vector Retrieval (Local)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"Embedding Dimension","settings.field.AGENT_MEMORY_TOP_K":"Top-K Retrieval Count","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"Candidate Window Size","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"Time Decay Half-life (days)","settings.field.AGENT_MEMORY_W_SIM":"Similarity Weight","settings.field.AGENT_MEMORY_W_RECENCY":"Recency Weight","settings.field.AGENT_MEMORY_W_RETURNS":"Returns Weight","settings.field.ENABLE_REFLECTION_WORKER":"Enable Auto Verification","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"Verification Interval (sec)","settings.field.OPENROUTER_API_KEY":"OpenRouter API Key","settings.field.OPENROUTER_API_URL":"OpenRouter API URL","settings.field.OPENROUTER_MODEL":"Default Model","settings.field.OPENROUTER_TEMPERATURE":"Temperature","settings.field.OPENROUTER_MAX_TOKENS":"Max Tokens","settings.field.OPENROUTER_TIMEOUT":"Timeout (sec)","settings.field.OPENROUTER_CONNECT_TIMEOUT":"Connect Timeout (sec)","settings.field.MARKET_TYPES_JSON":"Market Types JSON","settings.field.TRADING_SUPPORTED_SYMBOLS_JSON":"Supported Symbols JSON","settings.field.DATA_SOURCE_TIMEOUT":"Timeout (sec)","settings.field.DATA_SOURCE_RETRY":"Retry Count","settings.field.DATA_SOURCE_RETRY_BACKOFF":"Retry Backoff (sec)","settings.field.FINNHUB_API_KEY":"Finnhub API Key","settings.field.FINNHUB_TIMEOUT":"Finnhub Timeout (sec)","settings.field.FINNHUB_RATE_LIMIT":"Finnhub Rate Limit","settings.field.CCXT_DEFAULT_EXCHANGE":"CCXT Default Exchange","settings.field.CCXT_TIMEOUT":"CCXT Timeout (ms)","settings.field.CCXT_PROXY":"CCXT Proxy","settings.field.YFINANCE_TIMEOUT":"YFinance Timeout (sec)","settings.field.TIINGO_API_KEY":"Tiingo API Key","settings.field.TIINGO_TIMEOUT":"Tiingo Timeout (sec)","settings.field.SEARCH_PROVIDER":"Search Provider","settings.field.SEARCH_MAX_RESULTS":"Max Results","settings.field.TAVILY_API_KEYS":"Tavily API Keys","settings.field.SERPAPI_KEYS":"SerpAPI Keys","settings.field.SEARCH_GOOGLE_API_KEY":"Google API Key","settings.field.SEARCH_GOOGLE_CX":"Google CX","settings.field.SEARCH_BING_API_KEY":"Bing API Key","settings.field.INTERNAL_API_KEY":"Internal API Key","settings.desc.SEARCH_PROVIDER":"Web search provider for AI research","settings.desc.TAVILY_API_KEYS":"Tavily Search API keys, comma-separated for rotation. Free 1000 requests/month","settings.desc.SERPAPI_KEYS":"SerpAPI keys for Google/Bing search, comma-separated for rotation","settings.desc.ORDER_MODE":"maker: Limit order first (lower fees), market: Market order (instant fill)","settings.desc.MAKER_WAIT_SEC":"Wait time for limit order fill before switching to market order","settings.desc.MAKER_OFFSET_BPS":"Price offset in basis points. Buy: price*(1-offset), Sell: price*(1+offset)","settings.desc.TIINGO_API_KEY":"Tiingo API key for Forex/Metals data (free tier does not support 1-minute data)","settings.desc.TIINGO_TIMEOUT":"Tiingo API request timeout","portfolio.summary.totalValue":"Total Value","portfolio.summary.totalCost":"Total Cost","portfolio.summary.totalPnl":"Total P&L","portfolio.summary.positionCount":"Positions","portfolio.summary.profitLossRatio":"Profit/Loss","portfolio.summary.today":"Today","portfolio.summary.todayPnl":"Today P&L","portfolio.summary.bestPerformer":"Best Performer","portfolio.summary.worstPerformer":"Worst Performer","portfolio.summary.priceSync":"Price Sync","portfolio.summary.syncInterval":"Refresh","portfolio.summary.justNow":"Just now","portfolio.summary.ago":" ago","portfolio.positions.title":"My Positions","portfolio.positions.add":"Add Position","portfolio.positions.addFirst":"Add Your First Position","portfolio.positions.empty":"No positions yet","portfolio.positions.deleteConfirm":"Are you sure to delete this position?","portfolio.positions.currentPrice":"Current","portfolio.positions.entryPrice":"Entry","portfolio.positions.quantity":"Quantity","portfolio.positions.side":"Side","portfolio.positions.long":"Long","portfolio.positions.short":"Short","portfolio.positions.marketValue":"Value","portfolio.positions.pnl":"P&L","portfolio.positions.items":"positions","portfolio.monitors.title":"AI Monitors","portfolio.monitors.add":"Add Monitor","portfolio.monitors.addFirst":"Add AI Monitor","portfolio.monitors.empty":"No monitors yet","portfolio.monitors.deleteConfirm":"Are you sure to delete this monitor?","portfolio.monitors.interval":"Interval","portfolio.monitors.lastRun":"Last Run","portfolio.monitors.nextRun":"Next Run","portfolio.monitors.channels":"Channels","portfolio.monitors.runNow":"Run Now","portfolio.monitors.analysisResult":"AI Analysis Result","portfolio.monitors.runningTitle":"AI Analysis Started","portfolio.monitors.runningDesc":"Analysis is running in background. Results will be pushed via notification. Analyzing multiple positions may take a few minutes.","portfolio.monitors.timeoutTitle":"Request Timeout","portfolio.monitors.timeoutDesc":"Analysis may still be running in background. Please check notifications for results later. If no notification is received, please try again.","portfolio.modal.addPosition":"Add Position","portfolio.modal.editPosition":"Edit Position","portfolio.modal.addMonitor":"Add Monitor","portfolio.modal.editMonitor":"Edit Monitor","portfolio.form.market":"Market","portfolio.form.marketRequired":"Please select a market","portfolio.form.selectMarket":"Select Market","portfolio.form.symbol":"Symbol","portfolio.form.symbolRequired":"Please enter symbol","portfolio.form.searchSymbol":"Search or enter symbol","portfolio.form.useAsSymbol":"Use","portfolio.form.asSymbolCode":"as symbol code","portfolio.form.symbolHint":"Search symbols or enter any code directly","portfolio.form.side":"Side","portfolio.form.quantity":"Quantity","portfolio.form.quantityRequired":"Please enter quantity","portfolio.form.enterQuantity":"Enter quantity","portfolio.form.entryPrice":"Entry Price","portfolio.form.entryPriceRequired":"Please enter entry price","portfolio.form.enterEntryPrice":"Enter entry price","portfolio.form.notes":"Notes","portfolio.form.enterNotes":"Optional: Add notes","portfolio.form.monitorName":"Monitor Name","portfolio.form.monitorNameRequired":"Please enter monitor name","portfolio.form.enterMonitorName":"e.g. Daily Portfolio Analysis","portfolio.form.interval":"Interval","portfolio.form.minutes":"minutes","portfolio.form.hour":"hour","portfolio.form.hours":"hours","portfolio.form.notifyChannels":"Notify Channels","portfolio.form.browser":"Browser","portfolio.form.email":"Email","portfolio.form.telegramChatId":"Telegram Chat ID","portfolio.form.enterTelegramChatId":"Enter Telegram Chat ID","portfolio.form.telegramRequired":"Please enter Telegram Chat ID","portfolio.form.emailAddress":"Email Address","portfolio.form.enterEmail":"Enter email address","portfolio.form.emailRequired":"Please enter email address","portfolio.form.emailInvalid":"Please enter a valid email address","portfolio.form.customPrompt":"Custom Prompt","portfolio.form.customPromptPlaceholder":'Optional: Add focus areas, e.g. "Focus on tech stock risks"',"portfolio.form.monitorScope":"Monitor Scope","portfolio.form.allPositions":"All Positions","portfolio.form.selectedPositions":"Selected Positions","portfolio.form.selectPositions":"Select Positions","portfolio.form.selectAll":"Select All","portfolio.form.deselectAll":"Deselect All","portfolio.form.selectedCount":"{count} of {total} selected","portfolio.form.pleaseSelectPositions":"Please select at least one position to monitor","portfolio.form.notificationFromProfile":"Notifications will be sent to addresses configured in your profile","portfolio.form.goToProfile":"Go to settings","portfolio.message.loadFailed":"Failed to load data","portfolio.message.saveSuccess":"Saved successfully","portfolio.message.saveFailed":"Failed to save","portfolio.message.deleteSuccess":"Deleted successfully","portfolio.message.deleteFailed":"Failed to delete","portfolio.message.updateFailed":"Failed to update","portfolio.message.monitorEnabled":"Monitor enabled","portfolio.message.monitorDisabled":"Monitor paused","portfolio.message.monitorRunSuccess":"Analysis completed","portfolio.message.monitorRunFailed":"Analysis failed","portfolio.message.monitorRunning":"AI analysis started, please wait for notification","portfolio.groups.all":"All Positions","portfolio.groups.ungrouped":"Ungrouped","portfolio.form.group":"Group","portfolio.form.enterGroup":"Enter or select group","portfolio.alerts.title":"Price/PnL Alerts","portfolio.alerts.addAlert":"Add Alert","portfolio.alerts.editAlert":"Edit Alert","portfolio.alerts.alertType":"Alert Type","portfolio.alerts.priceAbove":"Price Above","portfolio.alerts.priceBelow":"Price Below","portfolio.alerts.pnlAbove":"Profit Above (%)","portfolio.alerts.pnlBelow":"Loss Below (%)","portfolio.alerts.threshold":"Threshold","portfolio.alerts.thresholdRequired":"Please enter threshold","portfolio.alerts.enterPrice":"Enter price","portfolio.alerts.enterPercent":"Enter percentage","portfolio.alerts.currentPrice":"Current Price","portfolio.alerts.currentPriceHint":"Current price","portfolio.alerts.repeatInterval":"Repeat Alert","portfolio.alerts.noRepeat":"No repeat (trigger once)","portfolio.alerts.every5min":"Every 5 minutes","portfolio.alerts.every15min":"Every 15 minutes","portfolio.alerts.every30min":"Every 30 minutes","portfolio.alerts.every1hour":"Every 1 hour","portfolio.alerts.every4hours":"Every 4 hours","portfolio.alerts.onceDaily":"Once daily","portfolio.alerts.enabled":"Enable Alert","portfolio.alerts.enabledDesc":"Auto-monitor and trigger notifications","portfolio.alerts.delete":"Delete","portfolio.alerts.deleteConfirm":"Are you sure you want to delete this alert?","portfolio.modal.addAlert":"Add Alert","portfolio.modal.editAlert":"Edit Alert","menu.userManage":"User Management","menu.myProfile":"My Profile","common.actions":"Actions","common.refresh":"Refresh","userManage.title":"User Management","userManage.searchPlaceholder":"Search by username/email/nickname","userManage.description":"Manage system users, roles and permissions","userManage.createUser":"Create User","userManage.editUser":"Edit User","userManage.username":"Username","userManage.password":"Password","userManage.nickname":"Nickname","userManage.email":"Email","userManage.role":"Role","userManage.status":"Status","userManage.lastLogin":"Last Login","userManage.active":"Active","userManage.disabled":"Disabled","userManage.neverLogin":"Never","userManage.usernameRequired":"Please enter username","userManage.usernamePlaceholder":"Enter username","userManage.passwordRequired":"Please enter password","userManage.passwordPlaceholder":"Enter password (min 6 chars)","userManage.passwordMin":"Password must be at least 6 characters","userManage.nicknamePlaceholder":"Enter nickname","userManage.emailPlaceholder":"Enter email","userManage.emailInvalid":"Invalid email format","userManage.rolePlaceholder":"Select role","userManage.statusPlaceholder":"Select status","userManage.resetPassword":"Reset Password","userManage.resetPasswordWarning":"This will reset the user's password","userManage.newPassword":"New Password","userManage.newPasswordPlaceholder":"Enter new password","userManage.confirmDelete":"Are you sure to delete this user?","userManage.roleAdmin":"Admin","userManage.roleManager":"Manager","userManage.roleUser":"User","userManage.roleViewer":"Viewer","profile.title":"My Profile","profile.description":"Manage your account settings and preferences","profile.basicInfo":"Basic Info","profile.changePassword":"Change Password","profile.username":"Username","profile.nickname":"Nickname","profile.email":"Email","profile.lastLogin":"Last Login","profile.nicknamePlaceholder":"Enter your nickname","profile.emailPlaceholder":"Enter your email","profile.emailInvalid":"Invalid email format","profile.emailCannotChange":"Email cannot be changed after registration","profile.passwordHint":"Password must be at least 6 characters","profile.oldPassword":"Current Password","profile.newPassword":"New Password","profile.confirmPassword":"Confirm Password","profile.oldPasswordRequired":"Please enter current password","profile.oldPasswordPlaceholder":"Enter current password","profile.newPasswordRequired":"Please enter new password","profile.newPasswordPlaceholder":"Enter new password","profile.confirmPasswordRequired":"Please confirm password","profile.confirmPasswordPlaceholder":"Confirm new password","profile.passwordMin":"Password must be at least 6 characters","profile.passwordMismatch":"Passwords do not match","profile.credits.title":"My Credits","profile.credits.unit":"Credits","profile.credits.recharge":"Top Up","profile.credits.vipExpires":"VIP expires on","profile.credits.vipExpired":"VIP expired","profile.credits.noVip":"Not a VIP","profile.credits.hint":"AI analysis/backtest/monitoring will consume credits; VIP only makes VIP-free indicators free to use.","profile.creditsLog":"Credits History","profile.creditsLog.time":"Time","profile.creditsLog.action":"Type","profile.creditsLog.amount":"Change","profile.creditsLog.balance":"Balance","profile.creditsLog.remark":"Remark","profile.creditsLog.actionConsume":"Consume","profile.creditsLog.actionRecharge":"Recharge","profile.creditsLog.actionAdjust":"Adjust","profile.creditsLog.actionRefund":"Refund","profile.creditsLog.actionVipGrant":"VIP Grant","profile.creditsLog.actionVipRevoke":"VIP Revoke","profile.creditsLog.actionRegisterBonus":"Register Bonus","profile.creditsLog.actionReferralBonus":"Referral Bonus","profile.creditsLog.actionIndicatorPurchase":"Indicator Purchase","profile.creditsLog.actionIndicatorSale":"Indicator Sale","profile.referral.title":"Invite Friends","profile.referral.listTab":"Referrals","profile.referral.totalInvited":"Invited","profile.referral.bonusPerInvite":"Per Invite","profile.referral.yourLink":"Your Referral Link","profile.referral.copyLink":"Copy Link","profile.referral.linkCopied":"Referral link copied","profile.referral.newUserBonus":"New users get","profile.referral.user":"User","profile.referral.registerTime":"Registered","profile.referral.noReferrals":"No referrals yet","profile.referral.shareNow":"Share Now","profile.notifications.title":"Notification Settings","profile.notifications.hint":"Configure your default notification methods, which will be used automatically when creating asset monitors and alerts","profile.notifications.defaultChannels":"Default Notification Channels","profile.notifications.browser":"In-App Notification","profile.notifications.email":"Email","profile.notifications.phone":"SMS","profile.notifications.telegramBotToken":"Telegram Bot Token","profile.notifications.telegramBotTokenPlaceholder":"Enter your Telegram Bot Token","profile.notifications.telegramBotTokenHint":"Get Token by creating a bot via @BotFather","profile.notifications.telegramChatId":"Telegram Chat ID","profile.notifications.telegramPlaceholder":"Enter your Telegram Chat ID (e.g. 123456789)","profile.notifications.telegramHint":"Send /start to @userinfobot to get your Chat ID","profile.notifications.notifyEmail":"Notification Email","profile.notifications.emailPlaceholder":"Email address to receive notifications","profile.notifications.emailHint":"Uses your account email by default, or set a different one","profile.notifications.phonePlaceholder":"Enter phone number (e.g. +1234567890)","profile.notifications.phoneHint":"Requires admin to configure Twilio service","profile.notifications.discordWebhook":"Discord Webhook","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"Create Webhook in Discord server settings","profile.notifications.webhookUrl":"Webhook URL","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"Custom Webhook URL, notifications sent via POST JSON","profile.notifications.webhookToken":"Webhook Token (Optional)","profile.notifications.webhookTokenPlaceholder":"Bearer Token for request authentication","profile.notifications.webhookTokenHint":"Sent as Authorization: Bearer Token to Webhook","profile.notifications.testBtn":"Send Test Notification","profile.notifications.saveSuccess":"Notification settings saved successfully","profile.notifications.selectChannel":"Please select at least one notification channel","profile.notifications.fillTelegramToken":"Please fill in Telegram Bot Token","profile.notifications.fillTelegram":"Please fill in Telegram Chat ID","profile.notifications.fillEmail":"Please fill in notification email","profile.notifications.testSent":"Test notification sent, please check your notification channels","userManage.credits":"Credits","userManage.adjustCredits":"Adjust Credits","userManage.setVip":"Set VIP","userManage.currentCredits":"Current Credits","userManage.newCredits":"New Credits","userManage.enterCredits":"Enter new credits amount","userManage.creditsNonNegative":"Credits cannot be negative","userManage.currentVip":"Current VIP Status","userManage.vipActive":"Active","userManage.vipExpired":"Expired","userManage.vipDays":"VIP Days","userManage.vipExpiresAt":"VIP Expires At","userManage.cancelVip":"Cancel VIP","userManage.days":"days","userManage.customDate":"Custom Date","userManage.selectDate":"Please select a date","userManage.remark":"Remark","userManage.remarkPlaceholder":"Optional remark","userManage.tabUsers":"User Management","systemOverview.tabTitle":"System Overview","systemOverview.totalStrategies":"Total Strategies","systemOverview.runningStrategies":"Running","systemOverview.totalCapital":"Total Capital","systemOverview.totalPnl":"Total PnL","systemOverview.filterAll":"All Status","systemOverview.filterRunning":"Running","systemOverview.filterStopped":"Stopped","systemOverview.searchPlaceholder":"Search strategy/symbol/user","systemOverview.running":"Running","systemOverview.stopped":"Stopped","systemOverview.colUser":"User","systemOverview.colStrategy":"Strategy","systemOverview.colStatus":"Status","systemOverview.colSymbol":"Symbol","systemOverview.colCapital":"Capital","systemOverview.colPnl":"PnL / ROI","systemOverview.colPositions":"Pos","systemOverview.colTrades":"Trades","systemOverview.colIndicator":"Indicator","systemOverview.colExchange":"Exchange","systemOverview.colTimeframe":"TF","systemOverview.colLeverage":"Lev","systemOverview.colCreatedAt":"Created","systemOverview.realized":"Real","systemOverview.unrealized":"Unreal","systemOverview.symbols":"symbols","systemOverview.live":"Live","systemOverview.signal":"Signal Only","settings.group.billing":"Billing & Credits","settings.field.BILLING_ENABLED":"Enable Billing","settings.field.BILLING_COST_AI_ANALYSIS":"AI Analysis Cost","settings.field.BILLING_COST_STRATEGY_RUN":"Strategy Run Cost","settings.field.BILLING_COST_BACKTEST":"Backtest Cost","settings.field.BILLING_COST_PORTFOLIO_MONITOR":"Portfolio Monitor Cost","settings.field.CREDITS_REGISTER_BONUS":"Register Bonus","settings.field.CREDITS_REFERRAL_BONUS":"Referral Bonus","settings.field.RECHARGE_TELEGRAM_URL":"Recharge Telegram URL","settings.field.MEMBERSHIP_MONTHLY_PRICE_USD":"Monthly Membership Price (USD)","settings.field.MEMBERSHIP_MONTHLY_CREDITS":"Monthly Membership Bonus Credits","settings.field.MEMBERSHIP_YEARLY_PRICE_USD":"Yearly Membership Price (USD)","settings.field.MEMBERSHIP_YEARLY_CREDITS":"Yearly Membership Bonus Credits","settings.field.MEMBERSHIP_LIFETIME_PRICE_USD":"Lifetime Membership Price (USD)","settings.field.MEMBERSHIP_LIFETIME_MONTHLY_CREDITS":"Lifetime Monthly Credits","settings.field.USDT_PAY_ENABLED":"Enable USDT Pay","settings.field.USDT_PAY_CHAIN":"USDT Chain","settings.field.USDT_TRC20_XPUB":"TRC20 XPUB (Watch-only)","settings.field.USDT_TRC20_CONTRACT":"USDT TRC20 Contract","settings.field.TRONGRID_BASE_URL":"TronGrid Base URL","settings.field.TRONGRID_API_KEY":"TronGrid API Key","settings.field.USDT_PAY_CONFIRM_SECONDS":"Confirm Delay (sec)","settings.field.USDT_PAY_EXPIRE_MINUTES":"Order Expire (min)","settings.desc.BILLING_ENABLED":"Enable billing system. Users need credits to use certain features when enabled","settings.desc.BILLING_COST_AI_ANALYSIS":"Credits consumed per AI analysis request","settings.desc.BILLING_COST_STRATEGY_RUN":"Credits consumed when starting a strategy","settings.desc.BILLING_COST_BACKTEST":"Credits consumed per backtest run","settings.desc.BILLING_COST_PORTFOLIO_MONITOR":"Credits consumed per portfolio AI monitoring run","settings.desc.CREDITS_REGISTER_BONUS":"Credits awarded to new users on registration","settings.desc.CREDITS_REFERRAL_BONUS":"Credits awarded to referrer when someone signs up with their referral code","settings.desc.VERIFICATION_CODE_MAX_ATTEMPTS":"Maximum attempts to verify a code before lockout","settings.desc.VERIFICATION_CODE_LOCK_MINUTES":"Lockout duration after exceeding max attempts","settings.desc.RECHARGE_TELEGRAM_URL":"Telegram customer service URL for recharge inquiries","settings.desc.MEMBERSHIP_MONTHLY_PRICE_USD":"Monthly membership price in USD (mock payment in current version).","settings.desc.MEMBERSHIP_MONTHLY_CREDITS":"Credits granted immediately after purchasing monthly membership.","settings.desc.MEMBERSHIP_YEARLY_PRICE_USD":"Yearly membership price in USD (mock payment in current version).","settings.desc.MEMBERSHIP_YEARLY_CREDITS":"Credits granted immediately after purchasing yearly membership.","settings.desc.MEMBERSHIP_LIFETIME_PRICE_USD":"Lifetime membership price in USD (mock payment in current version).","settings.desc.MEMBERSHIP_LIFETIME_MONTHLY_CREDITS":"Credits granted every 30 days for lifetime members (first grant happens immediately on purchase).","settings.desc.USDT_PAY_ENABLED":"Enable USDT scan-to-pay flow (per-order unique address + auto reconciliation).","settings.desc.USDT_PAY_CHAIN":"Currently only TRC20 is supported.","settings.desc.USDT_TRC20_XPUB":"Watch-only xpub used to derive per-order deposit addresses. Do NOT paste private key/seed.","settings.desc.USDT_TRC20_CONTRACT":"USDT contract address on TRON (default prefilled).","settings.desc.TRONGRID_BASE_URL":"TronGrid API base URL (default is fine).","settings.desc.TRONGRID_API_KEY":"Optional. For higher TronGrid rate limits and stability.","settings.desc.USDT_PAY_CONFIRM_SECONDS":"After a payment is detected, wait N seconds before marking it confirmed.","settings.desc.USDT_PAY_EXPIRE_MINUTES":"Order expiration time; users need to regenerate an order after it expires.","globalMarket.title":"Global Market Dashboard","globalMarket.fearGreedShort":"F&G","globalMarket.calendar":"Calendar","globalMarket.lastUpdate":"Last Update","globalMarket.refresh":"Refresh","globalMarket.name":"Name","globalMarket.price":"Price","globalMarket.change":"Change","globalMarket.trend":"Trend","globalMarket.pair":"Pair","globalMarket.unit":"Unit","globalMarket.refreshSuccess":"Data refreshed successfully","globalMarket.refreshError":"Failed to refresh data","globalMarket.fetchError":"Failed to fetch data","globalMarket.loading":"Loading...","globalMarket.fearGreedIndex":"Fear & Greed Index","globalMarket.fearGreedTip":"Fear & Greed Index measures market sentiment, 0 = Extreme Fear, 100 = Extreme Greed","globalMarket.volatilityIndex":"Volatility Index","globalMarket.dollarIndex":"Dollar Index","globalMarket.majorIndices":"Major Indices","globalMarket.vixTitle":"VIX Volatility Index","globalMarket.vixTip":"VIX measures expected market volatility, higher values indicate more market fear","globalMarket.extremeFear":"Extreme Fear","globalMarket.fear":"Fear","globalMarket.neutral":"Neutral","globalMarket.greed":"Greed","globalMarket.extremeGreed":"Extreme Greed","globalMarket.marketOverview":"Market Overview","globalMarket.indices":"Indices","globalMarket.forex":"Forex","globalMarket.crypto":"Crypto","globalMarket.commodities":"Commodities","globalMarket.heatmap":"Market Heatmap","globalMarket.cryptoHeatmap":"Crypto","globalMarket.commoditiesHeatmap":"Commodities","globalMarket.sectorHeatmap":"Sectors","globalMarket.forexHeatmap":"Forex","globalMarket.opportunities":"Trading Opportunities","globalMarket.noOpportunities":"No significant opportunities detected","globalMarket.financialNews":"Financial News","globalMarket.noNews":"No news available","globalMarket.economicCalendar":"Economic Calendar","globalMarket.noEvents":"No events scheduled","globalMarket.actual":"Actual","globalMarket.forecast":"Forecast","globalMarket.previous":"Previous","globalMarket.signal.bullish":"Bullish Momentum","globalMarket.signal.bearish":"Bearish Momentum","globalMarket.signal.overbought":"Overbought Warning","globalMarket.signal.oversold":"Oversold Opportunity","globalMarket.worldMap":"Global Markets Map","globalMarket.rising":"Rising","globalMarket.falling":"Falling","globalMarket.bullish":"Bullish","globalMarket.bearish":"Bearish","globalMarket.expectedImpact":"Expected Impact","globalMarket.aboveForecast":"Above Forecast","globalMarket.belowForecast":"Below Forecast","globalMarket.upcomingEvents":"Upcoming Events","globalMarket.releasedEvents":"Released Data","trading-assistant.form.notificationFromProfile":"Notifications will be sent to the address configured in your profile.","trading-assistant.form.notificationConfigMissing":"You have not configured parameters for selected channels ({channels}). Please go to your profile to configure them.","trading-assistant.form.goToProfile":"Go to Profile","community.title":"Indicator Market","community.searchPlaceholder":"Search indicators...","community.all":"All","community.freeOnly":"Free","community.paidOnly":"Paid","community.sortNewest":"Newest","community.sortHot":"Popular","community.sortRating":"Top Rated","community.sortPriceLow":"Price: Low to High","community.sortPriceHigh":"Price: High to Low","community.myPurchases":"My Purchases","community.noIndicators":"No indicators yet","community.createFirst":"Create Your First Indicator","community.total":"Total","community.items":"items","community.free":"Free","community.credits":"Credits","community.myIndicator":"My Indicator","community.purchased":"Purchased","community.noDescription":"No description","community.loadFailed":"Failed to load","community.publishedAt":"Published","community.downloads":"Downloads","community.rating":"Rating","community.views":"Views","community.description":"Description","community.performance":"Live Performance","community.strategyCount":"Strategies","community.tradeCount":"Trades","community.winRate":"Win Rate","community.totalProfit":"Total Profit","community.reviews":"Reviews","community.useNow":"Use Now","community.getFree":"Get Free","community.buyNow":"Buy Now","community.purchaseSuccess":"Purchase successful! Indicator added to your list","community.purchaseFailed":"Purchase failed","community.indicator_not_found":"Indicator not found or unavailable","community.cannot_buy_own":"Cannot buy your own indicator","community.already_purchased":"You have already purchased this indicator","community.insufficient_credits":"Insufficient credits","community.commentSuccess":"Comment submitted","community.commentFailed":"Failed to submit comment","community.commentUpdateSuccess":"Comment updated successfully","community.commentUpdateFailed":"Failed to update comment","community.editComment":"Edit Comment","community.cancelEdit":"Cancel","community.updateComment":"Update Comment","community.alreadyCommented":"You have already reviewed this indicator","community.editMyComment":"Edit Review","community.me":"Me","community.edited":"edited","community.not_purchased":"Please purchase/get the indicator first to leave a review","community.cannot_comment_own":"Cannot review your own indicator","community.already_commented":"You have already reviewed this indicator","community.noComments":"No reviews yet","community.yourRating":"Your Rating","community.commentPlaceholder":"Share your experience...","community.submitComment":"Submit Review","community.pleaseRate":"Please select a rating","community.loadMore":"Load More","community.justNow":"Just now","community.minutesAgo":"minutes ago","community.hoursAgo":"hours ago","community.daysAgo":"days ago","community.noPurchases":"No purchases yet","community.purchasedFrom":"Seller","community.purchaseTime":"Purchase Time","community.admin.reviewTab":"Review","community.admin.pending":"Pending","community.admin.approved":"Approved","community.admin.rejected":"Rejected","community.admin.noItems":"No items","community.admin.noDescription":"No description","community.admin.viewCode":"View Code","community.admin.note":"Note","community.admin.approve":"Approve","community.admin.reject":"Reject","community.admin.unpublish":"Unpublish","community.admin.delete":"Delete","community.admin.deleteConfirm":"Are you sure to delete this indicator? This cannot be undone.","community.admin.unpublishConfirm":"Are you sure to unpublish this indicator?","community.admin.unpublishHint":"This indicator will be hidden from the market","community.admin.confirm":"Confirm","community.admin.cancel":"Cancel","community.admin.approveTitle":"Approve Indicator","community.admin.rejectTitle":"Reject Indicator","community.admin.noteLabel":"Note (optional)","community.admin.notePlaceholder":"Enter review note...","community.admin.loadFailed":"Failed to load","community.admin.reviewSuccess":"Review submitted","community.admin.reviewFailed":"Review failed","community.admin.unpublishSuccess":"Unpublished successfully","community.admin.unpublishFailed":"Failed to unpublish","community.admin.deleteSuccess":"Deleted successfully","community.admin.deleteFailed":"Failed to delete","fastAnalysis.aiAnalysis":"AI Analysis","fastAnalysis.analyzing":"AI is analyzing...","fastAnalysis.pleaseWait":"Please wait, fetching real-time data and generating professional report","fastAnalysis.error":"Analysis Failed","fastAnalysis.retry":"Retry","fastAnalysis.selectSymbol":"Select a symbol to start","fastAnalysis.selectHint":"Choose from your watchlist or add a new symbol","fastAnalysis.confidence":"Confidence","fastAnalysis.currentPrice":"Current Price","fastAnalysis.entryPrice":"Entry Price","fastAnalysis.stopLoss":"Stop Loss","fastAnalysis.takeProfit":"Take Profit","fastAnalysis.stopLossHint":"Based on 2x ATR & support","fastAnalysis.takeProfitHint":"Based on 3x ATR & resistance","fastAnalysis.atrBased":"ATR-based","fastAnalysis.riskReward":"Risk/Reward","fastAnalysis.technical":"Technical","fastAnalysis.fundamental":"Fundamental","fastAnalysis.sentiment":"Sentiment","fastAnalysis.overall":"Overall","fastAnalysis.keyReasons":"Key Reasons","fastAnalysis.risks":"Risks","fastAnalysis.indicators":"Technical Indicators","fastAnalysis.maTrend":"MA Trend","fastAnalysis.support":"Support","fastAnalysis.resistance":"Resistance","fastAnalysis.volatility":"Volatility","fastAnalysis.wasHelpful":"Was this analysis helpful?","fastAnalysis.helpful":"Helpful","fastAnalysis.notHelpful":"Not Helpful","fastAnalysis.feedbackThanks":"Thanks for your feedback!","fastAnalysis.feedbackFailed":"Failed to submit feedback","fastAnalysis.feedbackUnavailable":"Feedback unavailable, please re-analyze","fastAnalysis.analysisTime":"Analysis time","fastAnalysis.startAnalysis":"Analyze","fastAnalysis.history":"History","fastAnalysis.systemTitle":"QUANTDINGER AI","fastAnalysis.systemOnline":"Online","fastAnalysis.version":"Fast","fastAnalysis.preparing":"Preparing...","fastAnalysis.step1":"Fetching real-time data","fastAnalysis.step2":"Calculating indicators","fastAnalysis.step3":"AI deep analysis","fastAnalysis.step4":"Generating report","fastAnalysis.technicalAnalysis":"Technical Analysis","fastAnalysis.fundamentalAnalysis":"Fundamental Analysis","fastAnalysis.sentimentAnalysis":"Market Sentiment","fastAnalysis.signal.bullish":"Bullish","fastAnalysis.signal.bearish":"Bearish","fastAnalysis.signal.neutral":"Neutral","fastAnalysis.signal.overbought":"Overbought","fastAnalysis.signal.oversold":"Oversold","fastAnalysis.signal.strong_bullish":"Strong Bullish","fastAnalysis.signal.strong_bearish":"Strong Bearish","fastAnalysis.trend.uptrend":"Uptrend","fastAnalysis.trend.downtrend":"Downtrend","fastAnalysis.trend.sideways":"Sideways","fastAnalysis.trend.consolidating":"Consolidating","fastAnalysis.trend.golden_cross":"Golden Cross","fastAnalysis.trend.death_cross":"Death Cross","fastAnalysis.trend.strong_uptrend":"Strong Uptrend","fastAnalysis.trend.strong_downtrend":"Strong Downtrend","fastAnalysis.volatilityLevel.high":"High","fastAnalysis.volatilityLevel.medium":"Medium","fastAnalysis.volatilityLevel.low":"Low","fastAnalysis.volatilityLevel.unknown":"Unknown","fastAnalysis.marketOverview":"Market Overview","fastAnalysis.selectTip":"Select a symbol from your watchlist to start AI analysis","fastAnalysis.analysisInProgress":"An analysis is already running for this symbol. Please wait and try again.","fastAnalysis.analysisInProgressTitle":"Analysis in progress","fastAnalysis.insufficientCredits":"Insufficient credits","fastAnalysis.insufficientCreditsDetail":"Insufficient credits: need {required}, you have {current}, short by {shortage}.","fastAnalysis.analysisCompleteWithCredits":"Analysis complete. Remaining credits: {remaining}","fastAnalysis.consensusTitle":"Multi-timeframe consensus","fastAnalysis.consensusDecision":"Consensus","fastAnalysis.consensusScore":"Composite score","fastAnalysis.consensusAgreement":"Timeframe agreement","aiQuant.title":"AI Quant","aiQuant.strategyList":"Strategies","aiQuant.create":"Create","aiQuant.edit":"Edit","aiQuant.delete":"Delete","aiQuant.start":"Start","aiQuant.stop":"Stop","aiQuant.analyze":"Analyze Now","aiQuant.noStrategy":"No strategies yet, click to create","aiQuant.selectStrategy":"Select a strategy from the left","aiQuant.createFirst":"Create Your First Strategy","aiQuant.createStrategy":"Create Strategy","aiQuant.editStrategy":"Edit Strategy","aiQuant.confirmDelete":"Are you sure you want to delete this strategy?","aiQuant.latestAnalysis":"Latest Analysis","aiQuant.analysisHistory":"Analysis History","aiQuant.decision":"Decision","aiQuant.confidence":"Confidence","aiQuant.currentPrice":"Current Price","aiQuant.entryPrice":"Entry Price","aiQuant.stopLoss":"Stop Loss","aiQuant.takeProfit":"Take Profit","aiQuant.reason":"Reason","aiQuant.analyzedAt":"Analyzed At","aiQuant.tradeSettings":"Trade Settings","aiQuant.minutes":"min","aiQuant.hour":"hour","aiQuant.hours":"hours","aiQuant.stats.totalStrategies":"Total Strategies","aiQuant.stats.runningStrategies":"Running","aiQuant.stats.totalAnalyses":"Analyses","aiQuant.stats.totalPnl":"Total PnL","aiQuant.status.running":"Running","aiQuant.status.stopped":"Stopped","aiQuant.status.paused":"Paused","aiQuant.executionMode.signal":"Signal Only","aiQuant.executionMode.live":"Live Trading","aiQuant.marketType.spot":"Spot","aiQuant.marketType.futures":"Futures","aiQuant.field.strategyName":"Strategy Name","aiQuant.field.market":"Market","aiQuant.field.symbol":"Symbol","aiQuant.field.marketType":"Market Type","aiQuant.field.aiModel":"AI Model","aiQuant.field.interval":"Analysis Interval","aiQuant.field.aiPrompt":"AI Prompt","aiQuant.field.executionMode":"Execution Mode","aiQuant.field.positionSize":"Position Size","aiQuant.field.stopLoss":"Stop Loss %","aiQuant.field.takeProfit":"Take Profit %","aiQuant.field.totalAnalyses":"Total Analyses","aiQuant.field.totalTrades":"Total Trades","aiQuant.field.totalPnl":"Total PnL","aiQuant.placeholder.strategyName":"Enter strategy name","aiQuant.placeholder.market":"Select market","aiQuant.placeholder.symbol":"e.g., BTC/USDT","aiQuant.placeholder.aiModel":"Use system default","aiQuant.placeholder.aiPrompt":"Enter your trading strategy prompt, e.g., Buy when RSI is below 30...","aiQuant.validation.strategyName":"Please enter strategy name","aiQuant.validation.market":"Please select market","aiQuant.validation.symbol":"Please enter symbol","aiQuant.table.decision":"Decision","aiQuant.table.confidence":"Confidence","aiQuant.table.entryPrice":"Entry","aiQuant.table.stopLoss":"Stop Loss","aiQuant.table.takeProfit":"Take Profit","aiQuant.table.time":"Time","aiQuant.msg.createSuccess":"Strategy created successfully","aiQuant.msg.updateSuccess":"Strategy updated successfully","aiQuant.msg.deleteSuccess":"Strategy deleted successfully","aiQuant.msg.startSuccess":"Strategy started","aiQuant.msg.stopSuccess":"Strategy stopped","aiQuant.msg.analyzeSuccess":"Analysis completed","aiQuant.field.initialCapital":"Initial Capital","aiQuant.field.leverage":"Leverage","aiQuant.field.tradeDirection":"Trade Direction","aiQuant.field.trailingStop":"Trailing Stop","aiQuant.field.trailingStopPct":"Trailing Stop %","aiQuant.direction.long":"Long Only","aiQuant.direction.short":"Short Only","aiQuant.direction.both":"Both","aiQuant.riskControl":"Risk Control","aiQuant.aiSettings":"AI Settings","aiQuant.systemDefault":"System Default","aiQuant.placeholder.selectSymbol":"Select from watchlist","aiQuant.hint.symbolFromWatchlist":"Select from your watchlist, market type is auto-detected","aiQuant.hint.spotLeverageFixed":"Spot market leverage is fixed at 1x","aiQuant.hint.stopLossEnforced":"Enforced stop loss, AI cannot modify","aiQuant.hint.takeProfitEnforced":"Enforced take profit, AI cannot modify","aiQuant.hint.aiPromptOnly":"AI only determines direction based on prompt, will not modify your risk settings","aiQuant.aiLimitWarning":"AI Permission Restricted","aiQuant.aiLimitDescription":"AI can ONLY determine trade direction (BUY/SELL/HOLD). Leverage, position size, stop loss/take profit are fully controlled by you and CANNOT be modified by AI.","aiQuant.userStopLoss":"Your Stop Loss","aiQuant.userTakeProfit":"Your Take Profit","aiQuant.userLeverage":"Your Leverage","aiQuant.validation.initialCapital":"Please enter initial capital","aiQuant.table.currentPrice":"Current Price","aiQuant.field.promptTemplate":"Strategy Template","aiQuant.placeholder.selectTemplate":"Select a preset template","aiQuant.template.default":"📊 Comprehensive Analysis (Recommended)","aiQuant.template.trend":"📈 Trend Following","aiQuant.template.swing":"🔄 Swing Trading","aiQuant.template.news":"📰 News Driven","aiQuant.template.custom":"✏️ Custom","aiQuant.hint.dataProvided":"System auto-provides: real-time price, indicators (RSI/MACD/MA), recent news, macro data. AI analyzes these with your prompt to determine direction.","aiQuant.hint.liveWarning":"Live mode will trade with REAL money! Make sure you have configured exchange API and understand the risks!","trading-assistant.liveDisclaimer.title":"Live Trading Disclaimer","trading-assistant.liveDisclaimer.content":"Live trading involves significant risk and may result in partial or total loss of funds. The platform does not guarantee returns or profits. You are responsible for your own decisions and outcomes.","trading-assistant.liveDisclaimer.agree":"I have read and understood the disclaimer and still want to enable live trading","trading-assistant.liveDisclaimer.required":"Please accept the disclaimer before enabling live trading","trading-assistant.liveDisclaimer.blockTitle":"Please accept the disclaimer first","trading-assistant.liveDisclaimer.blockDesc":"You must accept the disclaimer to configure live trading connection and order settings.","menu.billing":"Membership","billing.title":"Membership / Credits","billing.desc":"Choose a plan to activate VIP and receive bonus credits.","billing.snapshot.credits":"Current Credits","billing.snapshot.vip":"VIP Status","billing.snapshot.notVip":"Not VIP","billing.snapshot.expires":"Expires","billing.vipRule.title":"VIP Benefit","billing.vipRule.desc":"VIP has only one special permission: VIP-free indicators can be used without credits deduction. Other paid features/indicators still consume credits.","billing.plan.monthly":"Monthly","billing.plan.yearly":"Yearly","billing.plan.lifetime":"Lifetime","billing.perMonth":"month","billing.perYear":"year","billing.once":"one-time","billing.credits":"Credits","billing.lifetimeMonthly":"Monthly bonus","billing.buyNow":"Buy Now","billing.purchaseSuccess":"Purchase successful","billing.purchaseFailed":"Purchase failed","billing.usdt.title":"USDT Scan to Pay","billing.usdt.hintTitle":"Scan with your wallet and send USDT","billing.usdt.hintDesc":"Make sure the network and amount are correct (TRC20 only for now). Membership will be activated automatically after payment is confirmed.","billing.usdt.chain":"Chain","billing.usdt.amount":"Amount","billing.usdt.address":"Deposit Address","billing.usdt.copyAddress":"Copy Address","billing.usdt.copyAmount":"Copy Amount","billing.usdt.refresh":"Refresh","billing.usdt.expires":"Expires","billing.usdt.paidSuccess":"Payment confirmed. Membership activated.","billing.usdt.status.pending":"Waiting for payment","billing.usdt.status.paid":"Payment detected","billing.usdt.status.confirmed":"Confirmed","billing.usdt.status.expired":"Expired","billing.usdt.status.cancelled":"Cancelled","billing.usdt.status.failed":"Failed","billing.usdt.expiredHint":"Order expired. If you already paid, please contact support with your TxHash and payment screenshot.","billing.usdt.confirmedHint":"Payment confirmed, membership activated! Thank you for your purchase.","community.vipFree":"VIP Free","dashboard.indicator.publish.vipFree":"VIP Free","dashboard.indicator.publish.vipFreeHint":"When enabled: VIP users can use this indicator for free (non-VIP still need to purchase).","quickTrade.title":"Quick Trade","quickTrade.selectSymbol":"Select Trading Pair","quickTrade.exchange":"Exchange","quickTrade.selectExchange":"Select exchange account","quickTrade.cryptoOnly":"Crypto only","quickTrade.noExchange":"No crypto exchange accounts yet. Add one in Profile → Exchange Config.","quickTrade.available":"Available","quickTrade.long":"Long","quickTrade.short":"Short","quickTrade.market":"Market","quickTrade.limit":"Limit","quickTrade.limitPrice":"Limit Price","quickTrade.enterPrice":"Enter price","quickTrade.amount":"Amount","quickTrade.enterAmount":"Enter amount","quickTrade.leverage":"Leverage","quickTrade.tpsl":"TP/SL Price (Optional)","quickTrade.tp":"Take Profit Price","quickTrade.sl":"Stop Loss Price","quickTrade.tpPlaceholder":"Enter TP price","quickTrade.slPlaceholder":"Enter SL price","quickTrade.optional":"Optional","quickTrade.buyLong":"Buy / Long","quickTrade.sellShort":"Sell / Short","quickTrade.currentPosition":"Current Position","quickTrade.side":"Side","quickTrade.posSize":"Size","quickTrade.entryPrice":"Entry Price","quickTrade.markPrice":"Mark Price","quickTrade.unrealizedPnl":"Unrealized PnL","quickTrade.closePosition":"Close Position","quickTrade.noPosition":"No Position","quickTrade.noPositionHint":"No position for current trading pair","quickTrade.recentTrades":"Recent Trades","quickTrade.orderSuccess":"Order placed successfully!","quickTrade.orderFailed":"Order failed","quickTrade.positionClosed":"Position closed!","quickTrade.openPanel":"Quick Trade","quickTrade.tradeNow":"Trade Now","profile.exchange.title":"Exchange Config","profile.exchange.hint":"Manage your exchange API keys and broker connections. They can be used in Trading Assistant and Quick Trade.","profile.exchange.addAccount":"Add Exchange Account","profile.exchange.noAccounts":"No exchange accounts yet. Click the button above to add one.","profile.exchange.colExchange":"Exchange","profile.exchange.colName":"Name","profile.exchange.colHint":"Connection Info","profile.exchange.colCreatedAt":"Created At","profile.exchange.colActions":"Actions","profile.exchange.deleteConfirm":"Are you sure you want to delete this exchange account? This cannot be undone.","profile.exchange.deleteSuccess":"Exchange account deleted","profile.exchange.addTitle":"Add Exchange Account","profile.exchange.selectExchange":"Select Exchange","profile.exchange.accountName":"Account Name (Optional)","profile.exchange.accountNamePlaceholder":"e.g. Main Account, Test Account","profile.exchange.apiKey":"API Key","profile.exchange.secretKey":"Secret Key","profile.exchange.passphrase":"Passphrase","profile.exchange.demoTrading":"Demo Trading","profile.exchange.ibkrHost":"TWS/Gateway Host","profile.exchange.ibkrPort":"TWS/Gateway Port","profile.exchange.ibkrPortHint":"TWS Paper:7497 | TWS Live:7496 | Gateway Paper:4002 | Gateway Live:4001","profile.exchange.ibkrClientId":"Client ID","profile.exchange.ibkrAccount":"Account (Optional)","profile.exchange.mt5Server":"Server","profile.exchange.mt5Login":"Login","profile.exchange.mt5Password":"Password","profile.exchange.mt5TerminalPath":"Terminal Path (Optional)","profile.exchange.mt5TerminalPathHint":"Path to MT5 terminal, e.g. C:\\Program Files\\MetaTrader 5\\terminal64.exe","profile.exchange.testConnection":"Test Connection","profile.exchange.testSuccess":"Connection successful!","profile.exchange.testFailed":"Connection failed","profile.exchange.saveSuccess":"Exchange account added successfully","profile.exchange.saveFailed":"Failed to add account","profile.exchange.typeCrypto":"Crypto Exchange","profile.exchange.typeIBKR":"US Stocks (IBKR)","profile.exchange.typeMT5":"Forex (MetaTrader 5)","profile.exchange.localDeploymentRequired":"Local deployment required","profile.exchange.localDeploymentHint":"This broker requires local deployment of QuantDinger to use.","profile.exchange.goToManage":"Go to Profile → Exchange Config to manage","profile.exchange.noCredentialHint":"Please add an exchange account in Profile first","adminOrders.tabTitle":"Order List","adminOrders.totalOrders":"Total Orders","adminOrders.paidOrders":"Paid","adminOrders.pendingOrders":"Pending","adminOrders.totalRevenue":"Total Revenue","adminOrders.filterAll":"All Status","adminOrders.filterPending":"Pending","adminOrders.filterPaid":"Paid","adminOrders.filterConfirmed":"Confirmed","adminOrders.filterExpired":"Expired","adminOrders.searchPlaceholder":"Search by username/email","adminOrders.colUser":"User","adminOrders.colType":"Type","adminOrders.colPlan":"Plan","adminOrders.colAmount":"Amount","adminOrders.colStatus":"Status","adminOrders.colChain":"Chain","adminOrders.colAddress":"Address","adminOrders.colTxHash":"Tx Hash","adminOrders.colCreatedAt":"Created","adminOrders.lifetime":"Lifetime","adminOrders.yearly":"Yearly","adminOrders.monthly":"Monthly","adminOrders.statusPaid":"Paid","adminOrders.statusConfirmed":"Confirmed","adminOrders.statusPending":"Pending","adminOrders.statusExpired":"Expired","adminOrders.statusCancelled":"Cancelled","adminOrders.statusFailed":"Failed","adminAiStats.tabTitle":"AI Analysis","adminAiStats.totalAnalyses":"Total Analyses","adminAiStats.activeUsers":"Active Users","adminAiStats.uniqueSymbols":"Symbols Analyzed","adminAiStats.accuracy":"Correct / Verified","adminAiStats.userStatsTitle":"Per-User Statistics","adminAiStats.recentTitle":"Recent Analysis Records","adminAiStats.searchPlaceholder":"Search by username","adminAiStats.colUser":"User","adminAiStats.colAnalysisCount":"Analyses","adminAiStats.colSymbols":"Symbols","adminAiStats.colMarkets":"Markets","adminAiStats.colAccuracy":"Correct / Wrong","adminAiStats.colFeedback":"Feedback","adminAiStats.colLastAnalysis":"Last Analysis","adminAiStats.colMarket":"Market","adminAiStats.colSymbol":"Symbol","adminAiStats.colModel":"Model","adminAiStats.colStatus":"Status","adminAiStats.colCreatedAt":"Time","adminAiStats.helpful":"Helpful","adminAiStats.notHelpful":"Not Helpful","polymarket.title":"Prediction Markets","polymarket.subtitle":"AI analysis and trading opportunity recommendations based on Polymarket prediction market data","polymarket.filter.category":"Select Category","polymarket.filter.sortBy":"Sort By","polymarket.sort.volume":"24h Volume","polymarket.sort.aiScore":"AI Opportunity Score","polymarket.sort.highProbability":"High Probability","polymarket.sort.highReturn":"High Return Ratio","polymarket.search.placeholder":"Search prediction markets...","polymarket.category.all":"All","polymarket.category.crypto":"Cryptocurrency","polymarket.category.politics":"Politics","polymarket.category.economics":"Economics","polymarket.category.sports":"Sports","polymarket.category.tech":"Tech","polymarket.category.finance":"Finance","polymarket.category.geopolitics":"Geopolitics","polymarket.category.culture":"Culture","polymarket.category.climate":"Climate","polymarket.category.entertainment":"Entertainment","polymarket.market.currentProbability":"Current Probability","polymarket.ai.predicted":"AI Predicted Probability","polymarket.ai.marketProbability":"Market Probability","polymarket.ai.recommendation":"AI Recommendation","polymarket.ai.confidence":"Confidence","polymarket.ai.opportunityScore":"Opportunity Score","polymarket.ai.reasoning":"Analysis Reasoning","polymarket.ai.keyFactors":"Key Factors","polymarket.recommendation.YES":"YES (Bullish)","polymarket.recommendation.NO":"NO (Bearish)","polymarket.recommendation.HOLD":"HOLD (Neutral)","polymarket.status.active":"Active","polymarket.status.closed":"Closed","polymarket.status.resolved":"Resolved","polymarket.action.viewDetail":"View Details","polymarket.action.viewOnPolymarket":"View on Polymarket","polymarket.detail.title":"Prediction Market Details","polymarket.detail.currentProbability":"Current Probability","polymarket.detail.volume24h":"24h Volume","polymarket.detail.liquidity":"Liquidity","polymarket.detail.aiAnalysis":"AI Analysis Results","polymarket.detail.assetOpportunities":"Related Asset Trading Opportunities","polymarket.opportunity.confidence":"Confidence","polymarket.opportunity.analyze":"Analyze Asset","polymarket.signal.BUY":"BUY","polymarket.signal.SELL":"SELL","polymarket.signal.HOLD":"HOLD","polymarket.error.loadFailed":"Failed to load markets","polymarket.error.searchFailed":"Search failed","polymarket.error.notFound":"Market not found","polymarket.error.loadDetailFailed":"Failed to load details","polymarket.viewOnPolymarket":"View on Polymarket","polymarket.filter.explanation.title":"Filter Explanation","polymarket.filter.explanation.volume":"Sorted by 24h trading volume, showing the most active prediction markets.","polymarket.filter.explanation.aiScore":"Sorted by AI opportunity score, considering AI-market divergence, confidence, and other factors. High-value opportunities are prioritized.","polymarket.filter.explanation.highProbability":"Sorted by AI predicted probability, prioritizing events with high AI probability (AI prediction > market probability + 10%).","polymarket.filter.explanation.highReturn":"Sorted by high return ratio, prioritizing opportunities with large AI-market divergence and high confidence (divergence × confidence). Suitable for finding undervalued predictions.","polymarket.deepAnalysis.prompt":"Currently showing rule-based simple analysis. Click the button below for AI deep analysis to get more accurate predictions and recommendations.","polymarket.deepAnalysis.button":"Deep Analysis","polymarket.deepAnalysis.success":"Deep analysis completed! Credits charged: {credits}, Remaining: {remaining}","polymarket.deepAnalysis.successFree":"Deep analysis completed!","polymarket.deepAnalysis.failed":"Deep analysis failed, please try again later","polymarket.deepAnalysis.insufficientCredits":"Insufficient credits! Required: {required}, Current: {current}, Shortage: {shortage}","polymarket.error.invalidMarketId":"Invalid market ID","polymarket.analysis.title":"Polymarket Prediction Market Analysis","polymarket.analysis.description":"Enter a Polymarket link or market title, and AI will analyze trading opportunities for you","polymarket.analysis.startAnalysis":"Start Analysis","polymarket.analysis.inputHint":"Please enter a Polymarket market link or market title","polymarket.analysis.inputPlaceholder":'e.g., https://polymarket.com/event/xxx or "Bitcoin price above $100k in 2025?"',"polymarket.analysis.inputRequired":"Please enter a Polymarket link or market title","polymarket.analysis.analyzeButton":"Start Analysis","polymarket.analysis.analyzing":"Analyzing, please wait...","polymarket.analysis.success":"Analysis completed!","polymarket.analysis.failed":"Analysis failed, please try again later","polymarket.analysis.insufficientCredits":"Insufficient credits, please recharge first","polymarket.analysis.viewOnPolymarket":"View on Polymarket","polymarket.analysis.aiAnalysis":"AI Analysis Results","polymarket.analysis.marketProbability":"Market Probability","polymarket.analysis.aiPredictedProbability":"AI Predicted Probability","polymarket.analysis.divergence":"Divergence","polymarket.analysis.recommendation":"Recommendation","polymarket.analysis.recommendationYes":"YES (Bullish)","polymarket.analysis.recommendationNo":"NO (Bearish)","polymarket.analysis.recommendationHold":"HOLD (Neutral)","polymarket.analysis.confidenceScore":"Confidence Score","polymarket.analysis.opportunityScore":"Opportunity Score","polymarket.analysis.reasoning":"Analysis Reasoning","polymarket.analysis.keyFactors":"Key Factors","polymarket.analysis.creditsCharged":"Credits charged for this analysis: {credits}","polymarket.analysis.remainingCredits":"Remaining credits: {credits}","polymarket.analysis.newAnalysis":"New Analysis","polymarket.analysis.tabAnalyze":"Analyze","polymarket.analysis.tabHistory":"History","polymarket.analysis.historyMarket":"Market","polymarket.analysis.historyRecommendation":"Recommendation","polymarket.analysis.historyOpportunityScore":"Opportunity Score","polymarket.analysis.historyCreatedAt":"Analysis Time","polymarket.analysis.historyTotal":"Total {total} records","polymarket.analysis.loadHistoryFailed":"Failed to load history","aiAssetAnalysis.tabs.polymarket":"Prediction Markets"};t["default"]=(0,i.A)((0,i.A)({},r),l)},32647:function(e,t,a){"use strict";a(23792),a(3362),a(69085),a(9391),a(74423),a(21699),a(52675),a(89463),a(66412),a(60193),a(92168),a(2259),a(86964),a(83237),a(61833),a(67947),a(31073),a(45700),a(78125),a(20326),a(28706),a(26835),a(33771),a(2008),a(50113),a(48980),a(46449),a(78350),a(23418),a(48598),a(62062),a(31051),a(34782),a(26910),a(87478),a(54554),a(93514),a(30237),a(54743),a(46761),a(11745),a(89572),a(48957),a(62010),a(4731),a(36033),a(93153),a(82326),a(36389),a(64444),a(8085),a(77762),a(65070),a(60605),a(39469),a(72152),a(75376),a(56624),a(11367),a(5914),a(78553),a(98690),a(60479),a(70761),a(2892),a(45374),a(25428),a(32637),a(40150),a(59149),a(64601),a(44435),a(87220),a(25843),a(9868),a(17427),a(87607),a(5506),a(52811),a(53921),a(83851),a(81278),a(1480),a(40875),a(29908),a(94052),a(94003),a(221),a(79432),a(9220),a(7904),a(93967),a(93941),a(10287),a(26099),a(16034),a(39796),a(60825),a(87411),a(21211),a(40888),a(9065),a(86565),a(32812),a(84634),a(71137),a(30985),a(34268),a(34873),a(84864),a(27495),a(69479),a(38781),a(31415),a(23860),a(99449),a(27337),a(47764),a(71761),a(35701),a(68156),a(85906),a(42781),a(25440),a(5746),a(90744),a(11392),a(42762),a(39202),a(43359),a(89907),a(11898),a(35490),a(5745),a(94298),a(60268),a(69546),a(20781),a(50778),a(89195),a(46276),a(48718),a(16308),a(34594),a(29833),a(46594),a(72107),a(95477),a(21489),a(22134),a(3690),a(61740),a(81630),a(72170),a(75044),a(69539),a(31694),a(89955),a(33206),a(48345),a(44496),a(66651),a(12887),a(19369),a(66812),a(8995),a(52568),a(31575),a(36072),a(88747),a(28845),a(29423),a(57301),a(373),a(86614),a(41405),a(33684),a(73772),a(30958),a(23500),a(62953),a(59848),a(122),a(3296),a(27208),a(48408),a(7452);var i=a(85471),s=function(){var e=this,t=e._self._c;return t("a-config-provider",{attrs:{locale:e.locale,direction:e.direction}},[t("div",{attrs:{id:"app"}},[t("router-view")],1)])},o=[],n={navTheme:"light",primaryColor:"#13C2C2",layout:"sidemenu",contentWidth:"Fluid",fixedHeader:!0,fixSiderbar:!0,colorWeak:!1,menu:{locale:!0},title:"QuantDinger",pwa:!1,iconfontUrl:"",production:!0},r=function(e){document.title=e;var t=navigator.userAgent,a=/\bMicroMessenger\/([\d\.]+)/;if(a.test(t)&&/ip(hone|od|ad)/i.test(t)){var i=document.createElement("iframe");i.src="/favicon.ico",i.style.display="none",i.onload=function(){setTimeout(function(){i.remove()},9)},document.body.appendChild(i)}},l=n.title,d=a(76338),c=a(64765),u=a(74053),m=a.n(u),g=a(95093),p=a.n(g),h=a(45958);i.Ay.use(c.A);var f="en-US",y={"en-US":(0,d.A)({},h["default"])},b=new c.A({silentTranslationWarn:!0,locale:f,fallbackLocale:f,messages:y}),v=[f];function A(e){b.locale=e;var t=document.documentElement,a=/^ar/i.test(e);return t&&(t.setAttribute("lang",e),t.setAttribute("dir",a?"rtl":"ltr")),document.body&&(document.body.setAttribute("dir",a?"rtl":"ltr"),document.body.classList.toggle("rtl",a)),e}function k(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:f;return new Promise(function(t){return m().set("lang",e),b.locale!==e?v.includes(e)?t(A(e)):a(2162)("./".concat(e)).then(function(t){var a=t.default;return b.setLocaleMessage(e,a),v.push(e),p().updateLocale(a.momentName,a.momentLocale),A(e)}):t(e)})}function S(e){return b.t("".concat(e))}var w,T,P=b,C={data:function(){return{}},computed:{locale:function(){var e=this.$route.meta.title;return e&&r("".concat(S(e)," - ").concat(l)),this.$i18n.getLocaleMessage(this.$store.getters.lang).antLocale},direction:function(){var e=this.$store.getters.lang;return e&&/^ar/i.test(e)?"rtl":"ltr"},theme:function(){return this.$store.state.app.theme}},watch:{theme:{handler:function(e){"dark"===e||"realdark"===e?(document.body.classList.add("dark"),document.body.classList.remove("light")):(document.body.classList.remove("dark"),document.body.classList.add("light"))},immediate:!0}}},E=C,R=a(845),I=(0,R.A)(E,s,o,!1,null,null,null),M=I.exports,_=a(40173),L=function(){var e=this,t=e._self._c;return t("div",{class:["user-layout-wrapper",e.isMobile&&"mobile"],attrs:{id:"userLayout"}},[t("div",{staticClass:"container"},[e._m(0),t("div",{staticClass:"user-layout-lang"},[t("select-lang",{staticClass:"select-lang-trigger"})],1),t("div",{staticClass:"user-layout-content"},[e._m(1),t("div",{staticClass:"main-content"},[t("router-view")],1),t("div",{staticClass:"footer"},[t("div",{staticClass:"copyright"},[e._v(" Copyright © 2025-2026 Quantdinger.com "),t("div",{staticStyle:{width:"70%","text-align":"center","margin-left":"15%","margin-top":"10px"}},[t("a",{staticStyle:{color:"#1890ff",cursor:"pointer"},on:{click:e.toggleRisk}},[e._v(" "+e._s(e.showRisk?e.$t("user.login.privacy.collapse"):e.$t("user.login.privacy.view"))+" ")]),e.showRisk?t("div",{staticStyle:{"margin-top":"10px","font-size":"12px",color:"rgba(0,0,0,0.65)","line-height":"1.6","text-align":"left"}},[t("div",{staticStyle:{"font-weight":"600","margin-bottom":"6px"}},[e._v(e._s(e.$t("user.login.privacy.title")))]),e._v(" "+e._s(e.$t("user.login.privacy.content"))+" ")]):e._e()])])])])])])},x=[function(){var e=this,t=e._self._c;return t("div",{staticClass:"fx-layer",attrs:{"aria-hidden":"true"}},[t("div",{staticClass:"fx-gradient"}),t("div",{staticClass:"fx-grid"})])},function(){var e=this,t=e._self._c;return t("div",{staticClass:"top"},[t("div",{staticClass:"header"},[t("a",{attrs:{href:"/"}},[t("img",{staticClass:"logo",attrs:{src:a(33153),alt:"logo"}})])])])}],D=a(95353),N={computed:(0,d.A)({},(0,D.aH)({isMobile:function(e){return e.app.isMobile}}))},F=(a(63713),a(77197)),O=(a(78269),a(40255)),B=(a(1747),a(36457)),H={computed:(0,d.A)({},(0,D.aH)({currentLang:function(e){return e.app.lang}})),methods:{setLang:function(e){this.$store.dispatch("setLang",e)}}},U=H,q=["en-US","ja-JP","ko-KR","vi-VN","th-TH","ar-SA","fr-FR","de-DE","zh-TW","zh-CN"],j={"zh-CN":"简体中文","zh-TW":"繁體中文","en-US":"English","ja-JP":"日本語","ko-KR":"한국어","vi-VN":"Tiếng Việt","th-TH":"ไทย","ar-SA":"العربية","fr-FR":"Français","de-DE":"Deutsch"},W={"zh-CN":"🇨🇳","zh-TW":"sg","en-US":"🇺🇸","ja-JP":"🇯🇵","ko-KR":"🇰🇷","vi-VN":"🇻🇳","th-TH":"🇹🇭","ar-SA":"🇸🇦","fr-FR":"🇫🇷","de-DE":"🇩🇪"},$={props:{prefixCls:{type:String,default:"ant-pro-drop-down"}},name:"SelectLang",mixins:[U],render:function(){var e=this,t=arguments[0],a=this.prefixCls,i=function(t){var a=t.key;e.setLang(a)},s=t(B.Ay,{class:["menu","ant-pro-header-menu"],attrs:{selectedKeys:[this.currentLang]},on:{click:i}},[q.map(function(e){return t(B.Ay.Item,{key:e},[t("span",{attrs:{role:"img","aria-label":j[e]}},[W[e]])," ",j[e]])})]);return t(F.Ay,{attrs:{overlay:s,placement:"bottomRight"}},[t("span",{class:a},[t(O.A,{attrs:{type:"global",title:S("navBar.lang")}})])])}},G=$,Q={name:"UserLayout",components:{SelectLang:G},mixins:[N],data:function(){return{showRisk:!1}},methods:{toggleRisk:function(){this.showRisk=!this.showRisk}},mounted:function(){document.body.classList.add("userLayout")},beforeDestroy:function(){document.body.classList.remove("userLayout")}},V=Q,K=(0,R.A)(V,L,x,!1,null,"7ae30672",null),z=K.exports,Y=function(){var e=this,t=e._self._c;return t("div",[t("router-view")],1)},X=[],J={name:"BlankLayout"},Z=J,ee=(0,R.A)(Z,Y,X,!1,null,"7f25f9eb",null),te=(ee.exports,function(){var e=this,t=e._self._c;return t("div",{class:["basic-layout-wrapper",e.settings.theme]},[t("pro-layout",e._b({attrs:{menus:e.menus,collapsed:e.collapsed,mediaQuery:e.query,isMobile:e.isMobile,handleMediaQuery:e.handleMediaQuery,handleCollapse:e.handleCollapse,i18nRender:e.i18nRender},scopedSlots:e._u([{key:"menuHeaderRender",fn:function(){return[t("div",[t("img",{attrs:{src:a(2304)}}),t("h1",[e._v(e._s(e.title))])])]},proxy:!0},{key:"headerContentRender",fn:function(){return[t("div",[t("a-tooltip",{attrs:{title:e.$t("menu.header.refreshPage")}},[t("a-icon",{staticStyle:{"font-size":"18px",cursor:"pointer"},attrs:{type:"reload"},on:{click:e.handleRefresh}})],1)],1)]},proxy:!0},{key:"rightContentRender",fn:function(){return[t("right-content",{attrs:{"top-menu":"topmenu"===e.settings.layout,"is-mobile":e.isMobile,theme:e.settings.theme}})]},proxy:!0},{key:"footerRender",fn:function(){return[t("div",{staticStyle:{display:"none"}})]},proxy:!0}])},"pro-layout",e.settings,!1),[t("a-modal",{attrs:{visible:e.showLegalModal,footer:null,title:e.$t("menu.footer.userAgreement"),width:800},on:{cancel:function(t){e.showLegalModal=!1}}},[t("div",{staticStyle:{"max-height":"60vh",overflow:"auto","white-space":"pre-wrap","line-height":"1.8",padding:"16px"}},[e._v(" "+e._s(e.menuFooterConfig.legal.user_agreement||e.$t("user.login.legal.content"))+" ")]),t("div",{staticStyle:{"margin-top":"12px","text-align":"right"}},[t("a-button",{attrs:{type:"primary"},on:{click:function(t){e.showLegalModal=!1}}},[e._v("OK")])],1)]),t("a-modal",{attrs:{visible:e.showPrivacyModal,footer:null,title:e.$t("menu.footer.privacyPolicy"),width:800},on:{cancel:function(t){e.showPrivacyModal=!1}}},[t("div",{staticStyle:{"max-height":"60vh",overflow:"auto","white-space":"pre-wrap","line-height":"1.8",padding:"16px"}},[e._v(" "+e._s(e.menuFooterConfig.legal.privacy_policy||e.$t("user.login.privacy.content"))+" ")]),t("div",{staticStyle:{"margin-top":"12px","text-align":"right"}},[t("a-button",{attrs:{type:"primary"},on:{click:function(t){e.showPrivacyModal=!1}}},[e._v("OK")])],1)]),t("setting-drawer",{ref:"settingDrawer",attrs:{settings:e.settings},on:{change:e.handleSettingChange}},[t("div",{staticStyle:{margin:"12px 0"}},[e._v(" This is SettingDrawer custom footer content. ")])]),t("router-view",{key:e.refreshKey})],1),t("div",{staticClass:"custom-menu-footer",class:{collapsed:e.collapsed,"drawer-open":e.isMobile&&e.isDrawerOpen,"drawer-animating":e.isMobile&&e.isDrawerAnimating}},[e.collapsed?e._e():t("div",{staticClass:"menu-footer-content"},[t("div",{staticClass:"footer-section"},[t("div",{staticClass:"section-title"},[e._v(e._s(e.$t("menu.footer.contactUs")))]),t("div",{staticClass:"section-links"},[t("a",{attrs:{href:e.menuFooterConfig.contact.support_url,target:"_blank"}},[e._v(e._s(e.$t("menu.footer.support")))]),t("span",{staticClass:"separator"},[e._v("|")]),t("a",{attrs:{href:e.menuFooterConfig.contact.feature_request_url,target:"_blank"}},[e._v(e._s(e.$t("menu.footer.featureRequest")))])])]),t("div",{staticClass:"footer-section"},[t("div",{staticClass:"section-title"},[e._v(e._s(e.$t("menu.footer.getSupport")))]),t("div",{staticClass:"section-links"},[t("a",{attrs:{href:"mailto:"+e.menuFooterConfig.contact.email}},[e._v(e._s(e.$t("menu.footer.email")))]),t("span",{staticClass:"separator"},[e._v("|")]),t("a",{attrs:{href:e.menuFooterConfig.contact.live_chat_url,target:"_blank"}},[e._v(e._s(e.$t("menu.footer.liveChat")))])])]),e.menuFooterConfig.social_accounts&&e.menuFooterConfig.social_accounts.length>0?t("div",{staticClass:"footer-section"},[t("div",{staticClass:"section-title"},[e._v(e._s(e.$t("menu.footer.socialAccounts")))]),t("div",{staticClass:"social-icons"},e._l(e.menuFooterConfig.social_accounts,function(e,a){return t("a",{key:a,staticClass:"social-icon",attrs:{href:e.url,target:"_blank",rel:"noopener noreferrer",title:e.name}},[t("Icon",{staticClass:"social-icon-svg",attrs:{icon:"simple-icons:".concat(e.icon)}})],1)}),0)]):e._e(),t("div",{staticClass:"footer-section"},[t("div",{staticClass:"section-links"},[t("a",{on:{click:function(t){e.showLegalModal=!0}}},[e._v(e._s(e.$t("menu.footer.userAgreement")))]),t("span",{staticClass:"separator"},[e._v("&")]),t("a",{on:{click:function(t){e.showPrivacyModal=!0}}},[e._v(e._s(e.$t("menu.footer.privacyPolicy")))])])]),t("div",{staticClass:"footer-section copyright"},[e._v(" "+e._s(e.menuFooterConfig.copyright)+" ")]),t("div",{staticClass:"footer-section version"},[e._v(" V2.2.3 ")])])])],1)}),ae=[],ie=a(18787),se=a(69511),oe=a.n(se),ne=a(58391),re=a.n(ne),le={getAntdSerials:function(e){var t=new Array(9).fill().map(function(t,a){return oe().varyColor.lighten(e,a/10)}),a=re()(e),i=oe().varyColor.toNum3(e.replace("#","")).join(",");return t.concat(a).concat(i)},changeColor:function(e){if(!oe()||!oe().changer||"function"!==typeof oe().changer.changeColor)return Promise.resolve();var t={newColors:this.getAntdSerials(e),changeUrl:function(e){return"/".concat(e)}};try{return oe().changer.changeColor(t,Promise)}catch(a){return Promise.resolve()}}},de=function(){return[{key:P.t("app.setting.themecolor.dust"),color:"#F5222D"},{key:P.t("app.setting.themecolor.volcano"),color:"#FA541C"},{key:P.t("app.setting.themecolor.sunset"),color:"#FAAD14"},{key:P.t("app.setting.themecolor.cyan"),color:"#13C2C2"},{key:P.t("app.setting.themecolor.green"),color:"#52C41A"},{key:P.t("app.setting.themecolor.daybreak"),color:"#1890FF"},{key:P.t("app.setting.themecolor.geekblue"),color:"#2F54EB"},{key:P.t("app.setting.themecolor.purple"),color:"#722ED1"}]},ce=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=t?null:ie.A.loading(P.t("app.setting.theme.switching"),0);le.changeColor(e).finally(function(){a&&setTimeout(function(){a()},10)})},ue=function(e){var t=document.body.querySelector("#app");e?t.classList.add("colorWeak"):t.classList.remove("colorWeak")},me=a(75314),ge=function(){var e=this,t=e._self._c;return t("div",{class:e.wrpCls},[t("avatar-dropdown",{class:e.prefixCls,attrs:{menu:!0,"current-user":e.currentUser}}),t("notice-icon",{class:e.prefixCls}),t("select-lang",{class:e.prefixCls}),t("a-tooltip",{attrs:{title:e.$t("app.setting.tooltip")}},[t("span",{class:e.prefixCls,on:{click:e.handleSettingClick}},[t("a-icon",{staticStyle:{"font-size":"16px"},attrs:{type:"setting"}})],1)])],1)},pe=[],he=a(26297),fe=function(){var e=this,t=e._self._c;return e.currentUser&&e.currentUser.name?t("a-dropdown",{attrs:{placement:"bottomRight"},scopedSlots:e._u([{key:"overlay",fn:function(){return[t("a-menu",{staticClass:"ant-pro-drop-down menu",attrs:{"selected-keys":[]}},[t("a-menu-item",{key:"profile",on:{click:e.handleProfile}},[t("a-icon",{attrs:{type:"user"}}),e._v(" "+e._s(e.$t("menu.profile")||"My Profile")+" ")],1),t("a-menu-divider"),t("a-menu-item",{key:"logout",on:{click:e.handleLogout}},[t("a-icon",{attrs:{type:"logout"}}),e._v(" "+e._s(e.$t("menu.account.logout"))+" ")],1)],1)]},proxy:!0}],null,!1,2847446919)},[t("span",{staticClass:"ant-pro-account-avatar"},[t("a-avatar",{staticClass:"antd-pro-global-header-index-avatar",attrs:{size:"small",src:e.currentUser.avatar}}),t("span",[e._v(e._s(e.currentUser.name))])],1)]):t("span",[t("a-spin",{style:{marginLeft:8,marginRight:8},attrs:{size:"small"}})],1)},ye=[],be=(a(62621),a(43898)),ve={name:"AvatarDropdown",props:{currentUser:{type:Object,default:function(){return null}},menu:{type:Boolean,default:!0}},methods:{handleProfile:function(){this.$router.push({name:"Profile"})},handleLogout:function(e){var t=this;be.A.confirm({title:this.$t("layouts.usermenu.dialog.title"),content:this.$t("layouts.usermenu.dialog.content"),onOk:function(){return t.$store.dispatch("Logout").then(function(){t.$router.push({name:"login"})})},onCancel:function(){}})}}},Ae=ve,ke=(0,R.A)(Ae,fe,ye,!1,null,null,null),Se=ke.exports,we=function(){var e=this,t=e._self._c;return t("div",{staticClass:"notice-icon-wrapper"},[t("a-popover",{attrs:{trigger:"click",placement:"bottomRight",overlayClassName:"header-notice-wrapper",getPopupContainer:function(){return e.$refs.noticeRef.parentElement},autoAdjustOverflow:!0,arrowPointAtCenter:!0,overlayStyle:{width:"380px",top:"50px"}},model:{value:e.visible,callback:function(t){e.visible=t},expression:"visible"}},[t("template",{slot:"content"},[t("div",{staticClass:"notice-header"},[t("span",{staticClass:"notice-title"},[e._v(e._s(e.$t("notice.title")))]),e.notifications.length>0?t("a",{staticClass:"notice-action",on:{click:e.markAllRead}},[e._v(" "+e._s(e.$t("notice.markAllRead"))+" ")]):e._e()]),t("a-spin",{attrs:{spinning:e.loading}},[e.notifications.length>0?t("div",{staticClass:"notice-list"},e._l(e.notifications,function(a){return t("div",{key:a.id,staticClass:"notice-item",class:{unread:!a.is_read},on:{click:function(t){return e.handleNoticeClick(a)}}},[t("div",{staticClass:"notice-item-icon"},[t("a-icon",{style:{color:e.getNoticeColor(a.signal_type)},attrs:{type:e.getNoticeIcon(a.signal_type)}})],1),t("div",{staticClass:"notice-item-content"},[t("div",{staticClass:"notice-item-title"},[e._v(e._s(a.title))]),t("div",{staticClass:"notice-item-desc"},[e._v(e._s(e.truncateMessage(a.message)))]),t("div",{staticClass:"notice-item-time"},[e._v(e._s(e.formatTime(a.created_at)))])])])}),0):t("div",{staticClass:"notice-empty"},[t("a-empty",{attrs:{description:e.$t("notice.empty")}})],1)]),e.notifications.length>0?t("div",{staticClass:"notice-footer"},[t("a",{on:{click:e.clearNotifications}},[e._v(e._s(e.$t("notice.clear")))])]):e._e()],1),t("span",{ref:"noticeRef",staticClass:"header-notice",on:{click:e.fetchNotice}},[t("a-badge",{attrs:{count:e.unreadCount,overflowCount:99}},[t("a-icon",{staticStyle:{"font-size":"16px",padding:"4px"},attrs:{type:"bell"}})],1)],1)],2),t("a-modal",{attrs:{title:e.detailNotice?e.detailNotice.title:"",footer:null,width:e.isHtmlReport?900:600,wrapClassName:e.isHtmlReport?"notice-detail-modal html-report-modal":"notice-detail-modal",centered:""},model:{value:e.detailVisible,callback:function(t){e.detailVisible=t},expression:"detailVisible"}},[e.detailNotice?t("div",{staticClass:"notice-detail"},[t("div",{staticClass:"notice-detail-meta"},[t("div",{staticClass:"notice-detail-type"},[t("a-icon",{style:{color:e.getNoticeColor(e.detailNotice.signal_type)},attrs:{type:e.getNoticeIcon(e.detailNotice.signal_type)}}),t("span",{staticClass:"type-label"},[e._v(e._s(e.getNoticeTypeLabel(e.detailNotice.signal_type)))])],1),t("div",{staticClass:"notice-detail-time"},[t("a-icon",{attrs:{type:"clock-circle"}}),t("span",[e._v(e._s(e.formatFullTime(e.detailNotice.created_at)))])],1)]),t("a-divider"),t("div",{staticClass:"notice-detail-content",class:{"html-report":e.isHtmlReport}},[t("div",{staticClass:"message-body",domProps:{innerHTML:e._s(e.formatMessageHtml(e.detailNotice.message))}})]),!e.isHtmlReport&&e.detailNotice.payload&&Object.keys(e.detailNotice.payload).length>0?[t("a-divider"),t("div",{staticClass:"notice-detail-extra"},[t("div",{staticClass:"extra-title"},[e._v(e._s(e.$t("notice.detailInfo")))]),"ai_monitor"===e.detailNotice.signal_type?[e.detailNotice.payload.final_decision?t("div",{staticClass:"extra-item decision"},[t("span",{staticClass:"label"},[e._v(e._s(e.$t("notice.aiDecision"))+":")]),t("a-tag",{attrs:{color:e.getDecisionColor(e.detailNotice.payload.final_decision)}},[e._v(" "+e._s(e.detailNotice.payload.final_decision)+" ")]),e.detailNotice.payload.confidence?t("span",{staticClass:"confidence"},[e._v(" ("+e._s(e.$t("notice.confidence"))+": "+e._s(e.detailNotice.payload.confidence)+"%) ")]):e._e()],1):e._e(),e.detailNotice.payload.reasoning?t("div",{staticClass:"extra-item"},[t("span",{staticClass:"label"},[e._v(e._s(e.$t("notice.reasoning"))+":")]),t("span",{staticClass:"value"},[e._v(e._s(e.detailNotice.payload.reasoning))])]):e._e()]:e._e(),"price_alert"===e.detailNotice.signal_type?[e.detailNotice.payload.symbol?t("div",{staticClass:"extra-item"},[t("span",{staticClass:"label"},[e._v(e._s(e.$t("notice.symbol"))+":")]),t("span",{staticClass:"value"},[e._v(e._s(e.detailNotice.payload.symbol))])]):e._e(),e.detailNotice.payload.price?t("div",{staticClass:"extra-item"},[t("span",{staticClass:"label"},[e._v(e._s(e.$t("notice.currentPrice"))+":")]),t("span",{staticClass:"value"},[e._v("$"+e._s(e.detailNotice.payload.price))])]):e._e(),e.detailNotice.payload.trigger_price?t("div",{staticClass:"extra-item"},[t("span",{staticClass:"label"},[e._v(e._s(e.$t("notice.triggerPrice"))+":")]),t("span",{staticClass:"value"},[e._v("$"+e._s(e.detailNotice.payload.trigger_price))])]):e._e()]:e._e(),"signal"===e.detailNotice.signal_type||"trade"===e.detailNotice.signal_type?[e.detailNotice.payload.symbol?t("div",{staticClass:"extra-item"},[t("span",{staticClass:"label"},[e._v(e._s(e.$t("notice.symbol"))+":")]),t("span",{staticClass:"value"},[e._v(e._s(e.detailNotice.payload.symbol))])]):e._e(),e.detailNotice.payload.action?t("div",{staticClass:"extra-item"},[t("span",{staticClass:"label"},[e._v(e._s(e.$t("notice.action"))+":")]),t("a-tag",{attrs:{color:"BUY"===e.detailNotice.payload.action?"green":"red"}},[e._v(" "+e._s(e.detailNotice.payload.action)+" ")])],1):e._e(),e.detailNotice.payload.quantity?t("div",{staticClass:"extra-item"},[t("span",{staticClass:"label"},[e._v(e._s(e.$t("notice.quantity"))+":")]),t("span",{staticClass:"value"},[e._v(e._s(e.detailNotice.payload.quantity))])]):e._e()]:e._e()],2)]:e._e(),t("div",{staticClass:"notice-detail-actions"},[e.detailNotice.payload&&e.detailNotice.payload.monitor_id?t("a-button",{attrs:{type:"primary"},on:{click:e.goToPortfolio}},[t("a-icon",{attrs:{type:"fund"}}),e._v(" "+e._s(e.$t("notice.viewPortfolio"))+" ")],1):e._e(),t("a-button",{on:{click:function(t){e.detailVisible=!1}}},[e._v(" "+e._s(e.$t("notice.close"))+" ")])],1)],2):e._e()])],1)},Te=[],Pe=a(2403),Ce=a(81127),Ee=a(56252),Re=a(36911),Ie=a(75769),Me={name:"HeaderNotice",data:function(){return{loading:!1,visible:!1,detailVisible:!1,detailNotice:null,notifications:[],unreadTotal:0,lastFetchId:0,pollingTimer:null}},computed:{unreadCount:function(){return Number(this.unreadTotal||0)},isHtmlReport:function(){return!(!this.detailNotice||!this.detailNotice.message)&&(this.detailNotice.message.includes('

')||this.detailNotice.message.includes("\n '+t+'\n \n \n
\n \n '+n+'\n \n
\n \n \n '},initIframeSrc:function(){this.domain&&(this.getIframeNode().src="javascript:void((function(){\n var d = document;\n d.open();\n d.domain='"+this.domain+"';\n d.write('');\n d.close();\n })())")},initIframe:function(){var e=this.getIframeNode(),t=e.contentWindow,n=void 0;this.domain=this.domain||"",this.initIframeSrc();try{n=t.document}catch(r){this.domain=document.domain,this.initIframeSrc(),t=e.contentWindow,n=t.document}n.open("text/html","replace"),n.write(this.getIframeHTML(this.domain)),n.close(),this.getFormInputNode().onchange=this.onChange},endUpload:function(){this.uploading&&(this.file={},this.uploading=!1,this.setState({uploading:!1}),this.initIframe())},startUpload:function(){this.uploading||(this.uploading=!0,this.setState({uploading:!0}))},updateIframeWH:function(){var e=this.$el,t=this.getIframeNode();t.style.height=e.offsetHeight+"px",t.style.width=e.offsetWidth+"px"},abort:function(e){if(e){var t=e;e&&e.uid&&(t=e.uid),t===this.file.uid&&this.endUpload()}else this.endUpload()},post:function(e){var t=this,n=this.getFormNode(),r=this.getFormDataNode(),i=this.$props.data;"function"===typeof i&&(i=i(e));var o=document.createDocumentFragment();for(var a in i)if(i.hasOwnProperty(a)){var s=document.createElement("input");s.setAttribute("name",a),s.value=i[a],o.appendChild(s)}r.appendChild(o),new Promise(function(n){var r=t.action;if("function"===typeof r)return n(r(e));n(r)}).then(function(i){n.setAttribute("action",i),n.submit(),r.innerHTML="",t.$emit("start",e)})}},mounted:function(){var e=this;this.$nextTick(function(){e.updateIframeWH(),e.initIframe()})},updated:function(){var e=this;this.$nextTick(function(){e.updateIframeWH()})},render:function(){var e,t=arguments[0],n=this.$props,r=n.componentTag,i=n.disabled,s=n.prefixCls,l=(0,a.A)({},V,{display:this.uploading||i?"none":""}),u=c()((e={},(0,o.A)(e,s,!0),(0,o.A)(e,s+"-disabled",i),e));return t(r,{attrs:{className:u},style:{position:"relative",zIndex:0}},[t("iframe",{ref:"iframeRef",on:{load:this.onLoad},style:l}),this.$slots["default"]])}},E=P;function j(){}var F={componentTag:m.A.string,prefixCls:m.A.string,action:m.A.oneOfType([m.A.string,m.A.func]),name:m.A.string,multipart:m.A.bool,directory:m.A.bool,data:m.A.oneOfType([m.A.object,m.A.func]),headers:m.A.object,accept:m.A.string,multiple:m.A.bool,disabled:m.A.bool,beforeUpload:m.A.func,customRequest:m.A.func,method:m.A.string,withCredentials:m.A.bool,supportServerRender:m.A.bool,openFileDialogOnClick:m.A.bool,transformFile:m.A.func},I={name:"Upload",mixins:[g.A],inheritAttrs:!1,props:(0,v.CB)(F,{componentTag:"span",prefixCls:"rc-upload",data:{},headers:{},name:"file",multipart:!1,supportServerRender:!1,multiple:!1,beforeUpload:j,withCredentials:!1,openFileDialogOnClick:!0}),data:function(){return{Component:null}},mounted:function(){var e=this;this.$nextTick(function(){e.supportServerRender&&e.setState({Component:e.getComponent()},function(){e.$emit("ready")})})},methods:{getComponent:function(){return"undefined"!==typeof File?D:E},abort:function(e){this.$refs.uploaderRef.abort(e)}},render:function(){var e=arguments[0],t={props:(0,a.A)({},this.$props),on:(0,v.WM)(this),ref:"uploaderRef",attrs:this.$attrs};if(this.supportServerRender){var n=this.Component;return n?e(n,t,[this.$slots["default"]]):null}var r=this.getComponent();return e(r,t,[this.$slots["default"]])}},$=I,R=$,N=n(38377),W=n(77749),B=n(25592),K=n(97479);m.A.oneOf(["error","success","done","uploading","removed"]);function U(e){var t=e.uid,n=e.name;return!(!t&&0!==t)&&(!!["string","number"].includes("undefined"===typeof t?"undefined":(0,K.A)(t))&&(""!==n&&"string"===typeof n))}m.A.custom(U),m.A.arrayOf(m.A.custom(U)),m.A.object;var q=m.A.shape({showRemoveIcon:m.A.bool,showPreviewIcon:m.A.bool}).loose,G=m.A.shape({uploading:m.A.string,removeFile:m.A.string,downloadFile:m.A.string,uploadError:m.A.string,previewFile:m.A.string}).loose,J={type:m.A.oneOf(["drag","select"]),name:m.A.string,defaultFileList:m.A.arrayOf(m.A.custom(U)),fileList:m.A.arrayOf(m.A.custom(U)),action:m.A.oneOfType([m.A.string,m.A.func]),directory:m.A.bool,data:m.A.oneOfType([m.A.object,m.A.func]),method:m.A.oneOf(["POST","PUT","post","put"]),headers:m.A.object,showUploadList:m.A.oneOfType([m.A.bool,q]),multiple:m.A.bool,accept:m.A.string,beforeUpload:m.A.func,listType:m.A.oneOf(["text","picture","picture-card"]),remove:m.A.func,supportServerRender:m.A.bool,disabled:m.A.bool,prefixCls:m.A.string,customRequest:m.A.func,withCredentials:m.A.bool,openFileDialogOnClick:m.A.bool,locale:G,height:m.A.number,id:m.A.string,previewFile:m.A.func,transformFile:m.A.func},X=(m.A.arrayOf(m.A.custom(U)),m.A.string,{listType:m.A.oneOf(["text","picture","picture-card"]),items:m.A.arrayOf(m.A.custom(U)),progressAttr:m.A.object,prefixCls:m.A.string,showRemoveIcon:m.A.bool,showDownloadIcon:m.A.bool,showPreviewIcon:m.A.bool,locale:G,previewFile:m.A.func}),Z={name:"AUploadDragger",props:J,render:function(){var e=arguments[0],t=(0,v.Oq)(this),n={props:(0,a.A)({},t,{type:"drag"}),on:(0,v.WM)(this),style:{height:this.height}};return e(pe,n,[this.$slots["default"]])}},Q=n(80178);function ee(){return!0}function te(e){return(0,a.A)({},e,{lastModified:e.lastModified,lastModifiedDate:e.lastModifiedDate,name:e.name,size:e.size,type:e.type,uid:e.uid,percent:0,originFileObj:e})}function ne(){var e=.1,t=.01,n=.98;return function(r){var i=r;return i>=n||(i+=e,e-=t,e<.001&&(e=.001)),i}}function re(e,t){var n=void 0!==e.uid?"uid":"name";return t.filter(function(t){return t[n]===e[n]})[0]}function ie(e,t){var n=void 0!==e.uid?"uid":"name",r=t.filter(function(t){return t[n]!==e[n]});return r.length===t.length?null:r}var oe=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=e.split("/"),n=t[t.length-1],r=n.split(/#|\?/)[0];return(/\.[^./\\]*$/.exec(r)||[""])[0]},ae=function(e){return!!e&&0===e.indexOf("image/")},se=function(e){if(ae(e.type))return!0;var t=e.thumbUrl||e.url,n=oe(t);return!(!/^data:image\//.test(t)&&!/(webp|svg|png|gif|jpg|jpeg|jfif|bmp|dpg|ico)$/i.test(n))||!/^data:/.test(t)&&!n},ce=200;function le(e){return new Promise(function(t){if(ae(e.type)){var n=document.createElement("canvas");n.width=ce,n.height=ce,n.style.cssText="position: fixed; left: 0; top: 0; width: "+ce+"px; height: "+ce+"px; z-index: 9999; display: none;",document.body.appendChild(n);var r=n.getContext("2d"),i=new Image;i.onload=function(){var e=i.width,o=i.height,a=ce,s=ce,c=0,l=0;e=this.$refs.subMenuTitle.offsetWidth||(e.style.minWidth=this.$refs.subMenuTitle.offsetWidth+"px")}},renderChildren:function(e){var t=this.$createElement,n=this.$props,r=(0,y.WM)(this),a=r.select,c=r.deselect,l=r.openChange,u={props:{mode:"horizontal"===n.mode?"vertical":n.mode,visible:n.isOpen,level:n.level+1,inlineIndent:n.inlineIndent,focusable:!1,selectedKeys:n.selectedKeys,eventKey:n.eventKey+"-menu-",openKeys:n.openKeys,openTransitionName:n.openTransitionName,openAnimation:n.openAnimation,subMenuOpenDelay:n.subMenuOpenDelay,parentMenu:this,subMenuCloseDelay:n.subMenuCloseDelay,forceSubMenuRender:n.forceSubMenuRender,triggerSubMenuAction:n.triggerSubMenuAction,builtinPlacements:n.builtinPlacements,defaultActiveFirst:n.store.getState().defaultActiveFirst[(0,b.V8)(n.eventKey)],multiple:n.multiple,prefixCls:n.rootPrefixCls,manualRef:this.saveMenuInstance,itemIcon:(0,y.nu)(this,"itemIcon"),expandIcon:(0,y.nu)(this,"expandIcon"),children:e},on:{click:this.onSubMenuClick,select:a,deselect:c,openChange:l},id:this.internalMenuId},d=u.props,h=this.haveRendered;if(this.haveRendered=!0,this.haveOpened=this.haveOpened||d.visible||d.forceSubMenuRender,!this.haveOpened)return t("div");var p=h||!d.visible||"inline"===!d.mode;u["class"]=" "+d.prefixCls+"-sub";var m={appear:p,css:!1},v={props:m,on:{}};return d.openTransitionName?v=(0,M.A)(d.openTransitionName,{appear:p}):"object"===(0,o.A)(d.openAnimation)?(m=(0,s.A)({},m,d.openAnimation.props||{}),p||(m.appear=!1)):"string"===typeof d.openAnimation&&(v=(0,M.A)(d.openAnimation,{appear:p})),"object"===(0,o.A)(d.openAnimation)&&d.openAnimation.on&&(v.on=d.openAnimation.on),t("transition",v,[t(f.Ay,i()([{directives:[{name:"show",value:n.isOpen}]},u]))])}},render:function(){var e,t,n=arguments[0],r=this.$props,o=this.rootPrefixCls,l=this.parentMenu,d=r.isOpen,h=this.getPrefixCls(),f="inline"===r.mode,p=(e={},(0,a.A)(e,h,!0),(0,a.A)(e,h+"-"+r.mode,!0),(0,a.A)(e,this.getOpenClassName(),d),(0,a.A)(e,this.getActiveClassName(),r.active||d&&!f),(0,a.A)(e,this.getDisabledClassName(),r.disabled),(0,a.A)(e,this.getSelectedClassName(),this.isChildrenSelected()),e);this.internalMenuId||(r.eventKey?this.internalMenuId=r.eventKey+"$Menu":this.internalMenuId="$__$"+ ++A+"$Menu");var m={},g={},_={};r.disabled||(m={mouseleave:this.onMouseLeave,mouseenter:this.onMouseEnter},g={click:this.onTitleClick},_={mouseenter:this.onTitleMouseEnter,mouseleave:this.onTitleMouseLeave});var b={};f&&(b.paddingLeft=r.inlineIndent*r.level+"px");var M={};d&&(M={"aria-owns":this.internalMenuId});var x={attrs:(0,s.A)({"aria-expanded":d},M,{"aria-haspopup":"true",title:"string"===typeof r.title?r.title:void 0}),on:(0,s.A)({},_,g),style:b,class:h+"-title",ref:"subMenuTitle"},k=null;"horizontal"!==r.mode&&(k=(0,y.nu)(this,"expandIcon",r));var L=n("div",x,[(0,y.nu)(this,"title"),k||n("i",{class:h+"-arrow"})]),C=this.renderChildren((0,y.Gk)(this.$slots["default"])),S=this.parentMenu.isRootMenu?this.parentMenu.getPopupContainer:function(e){return e.parentNode},z=w[r.mode],T=r.popupOffset?{offset:r.popupOffset}:{},O="inline"===r.mode?"":r.popupClassName,H={on:(0,s.A)({},(0,c.A)((0,y.WM)(this),["click"]),m),class:p};return n("li",i()([H,{attrs:{role:"menuitem"}}]),[f&&L,f&&C,!f&&n(u.A,{attrs:(t={prefixCls:h,popupClassName:h+"-popup "+o+"-"+l.theme+" "+(O||""),getPopupContainer:S,builtinPlacements:v},(0,a.A)(t,"builtinPlacements",(0,s.A)({},v,r.builtinPlacements)),(0,a.A)(t,"popupPlacement",z),(0,a.A)(t,"popupVisible",d),(0,a.A)(t,"popupAlign",T),(0,a.A)(t,"action",r.disabled?[]:[r.triggerSubMenuAction]),(0,a.A)(t,"mouseEnterDelay",r.subMenuOpenDelay),(0,a.A)(t,"mouseLeaveDelay",r.subMenuCloseDelay),(0,a.A)(t,"forceRender",r.forceSubMenuRender),t),on:{popupVisibleChange:this.onPopupVisibleChange}},[n("template",{slot:"popup"},[C]),L])])}},L=(0,h.A)(function(e,t){var n=e.openKeys,r=e.activeKey,i=e.selectedKeys,o=t.eventKey,a=t.subMenuKey;return{isOpen:n.indexOf(o)>-1,active:r[a]===o,selectedKeys:i}})(k);L.isSubMenu=!0;var C=L},4275:function(e,t,n){"use strict";n.d(t,{Ay:function(){return T},GO:function(){return S}});var r=n(5748),i=n(44508),o=n(85505),a=n(90034),s=n(4718),c=n(14221),l=n(52315),u=n(11207),d=n(46942),h=n.n(d),f=n(78556),p=n(32779),m=n(43591),v=n(70198),g=n(51927),y=n(15848),_=!("undefined"===typeof window||!window.document||!window.document.createElement),b="menuitem-overflowed",M=.5;_&&n(22708);var A={name:"DOMWrap",mixins:[l.A],data:function(){return this.resizeObserver=null,this.mutationObserver=null,this.originalTotalWidth=0,this.overflowedItems=[],this.menuItemSizes=[],{lastVisibleIndex:void 0}},mounted:function(){var e=this;this.$nextTick(function(){if(e.setChildrenWidthAndResize(),1===e.level&&"horizontal"===e.mode){var t=e.$el;if(!t)return;e.resizeObserver=new m.A(function(t){t.forEach(e.setChildrenWidthAndResize)}),[].slice.call(t.children).concat(t).forEach(function(t){e.resizeObserver.observe(t)}),"undefined"!==typeof MutationObserver&&(e.mutationObserver=new MutationObserver(function(){e.resizeObserver.disconnect(),[].slice.call(t.children).concat(t).forEach(function(t){e.resizeObserver.observe(t)}),e.setChildrenWidthAndResize()}),e.mutationObserver.observe(t,{attributes:!1,childList:!0,subTree:!1}))}})},beforeDestroy:function(){this.resizeObserver&&this.resizeObserver.disconnect(),this.mutationObserver&&this.mutationObserver.disconnect()},methods:{getMenuItemNodes:function(){var e=this.$props.prefixCls,t=this.$el;return t?[].slice.call(t.children).filter(function(t){return t.className.split(" ").indexOf(e+"-overflowed-submenu")<0}):[]},getOverflowedSubMenuItem:function(e,t,n){var i=this.$createElement,a=this.$props,s=a.overflowedIndicator,c=a.level,l=a.mode,u=a.prefixCls,d=a.theme;if(1!==c||"horizontal"!==l)return null;var h=this.$slots["default"][0],p=(0,y.Ts)(h),m=(p.title,(0,r.A)(p,["title"])),g=(0,y.kQ)(h),_={},b=e+"-overflowed-indicator",M=e+"-overflowed-indicator";0===t.length&&!0!==n?_={display:"none"}:n&&(_={visibility:"hidden",position:"absolute"},b+="-placeholder",M+="-placeholder");var A=d?u+"-"+d:"",w={},x={};f.$J.props.forEach(function(e){void 0!==m[e]&&(w[e]=m[e])}),f.$J.on.forEach(function(e){void 0!==g[e]&&(x[e]=g[e])});var k={props:(0,o.A)({title:s,popupClassName:A},w,{eventKey:M,disabled:!1}),class:u+"-overflowed-submenu",key:b,style:_,on:x};return i(v.A,k,[t])},setChildrenWidthAndResize:function(){if("horizontal"===this.mode){var e=this.$el;if(e){var t=e.children;if(t&&0!==t.length){var n=e.children[t.length-1];(0,f.eC)(n,"display","inline-block");var r=this.getMenuItemNodes(),i=r.filter(function(e){return e.className.split(" ").indexOf(b)>=0});i.forEach(function(e){(0,f.eC)(e,"display","inline-block")}),this.menuItemSizes=r.map(function(e){return(0,f.RG)(e)}),i.forEach(function(e){(0,f.eC)(e,"display","none")}),this.overflowedIndicatorWidth=(0,f.RG)(e.children[e.children.length-1]),this.originalTotalWidth=this.menuItemSizes.reduce(function(e,t){return e+t},0),this.handleResize(),(0,f.eC)(n,"display","none")}}}},handleResize:function(){var e=this;if("horizontal"===this.mode){var t=this.$el;if(t){var n=(0,f.RG)(t);this.overflowedItems=[];var r=0,i=void 0;this.originalTotalWidth>n+M&&(i=-1,this.menuItemSizes.forEach(function(t){r+=t,r+e.overflowedIndicatorWidth<=n&&(i+=1)})),this.setState({lastVisibleIndex:i})}}},renderChildren:function(e){var t=this,n=this.$data.lastVisibleIndex,r=(0,y.t0)(this);return(e||[]).reduce(function(i,o,a){var s=o,c=(0,y.Ts)(o).eventKey;if("horizontal"===t.mode){var l=t.getOverflowedSubMenuItem(c,[]);void 0!==n&&-1!==r[t.prefixCls+"-root"]&&(a>n&&(s=(0,g.Ob)(o,{style:{display:"none"},props:{eventKey:c+"-hidden"},class:b})),a===n+1&&(t.overflowedItems=e.slice(n+1).map(function(e){return(0,g.Ob)(e,{key:(0,y.Ts)(e).eventKey,props:{mode:"vertical-left"}})}),l=t.getOverflowedSubMenuItem(c,t.overflowedItems)));var u=[].concat((0,p.A)(i),[l,s]);return a===e.length-1&&u.push(t.getOverflowedSubMenuItem(c,[],!0)),u}return[].concat((0,p.A)(i),[s])},[])}},render:function(){var e=arguments[0],t=this.$props.tag,n={on:(0,y.WM)(this)};return e(t,n,[this.renderChildren(this.$slots["default"])])}};A.props={mode:s.A.oneOf(["horizontal","vertical","vertical-left","vertical-right","inline"]),prefixCls:s.A.string,level:s.A.number,theme:s.A.string,overflowedIndicator:s.A.node,visible:s.A.bool,hiddenClassName:s.A.string,tag:s.A.string.def("div")};var w=A;function x(e){return!e.length||e.every(function(e){return!!e.disabled})}function k(e,t,n){var r=e.getState();e.setState({activeKey:(0,o.A)({},r.activeKey,(0,i.A)({},t,n))})}function L(e){return e.eventKey||"0-menu-"}function C(e,t){if(t){var n=this.instanceArrayKeyIndexMap[e];this.instanceArray[n]=t}}function S(e,t){var n=t,r=e.eventKey,i=e.defaultActiveFirst,o=e.children;if(void 0!==n&&null!==n){var a=void 0;if((0,f.ns)(o,function(e,t){var i=e.componentOptions.propsData||{};e&&!i.disabled&&n===(0,f.dL)(e,r,t)&&(a=!0)}),a)return n}return n=null,i?((0,f.ns)(o,function(e,t){var i=e.componentOptions.propsData||{},o=null===n||void 0===n;o&&e&&!i.disabled&&(n=(0,f.dL)(e,r,t))}),n):n}var z={name:"SubPopupMenu",props:(0,y.CB)({prefixCls:s.A.string,openTransitionName:s.A.string,openAnimation:s.A.oneOfType([s.A.string,s.A.object]),openKeys:s.A.arrayOf(s.A.oneOfType([s.A.string,s.A.number])),visible:s.A.bool,parentMenu:s.A.object,eventKey:s.A.string,store:s.A.object,forceSubMenuRender:s.A.bool,focusable:s.A.bool,multiple:s.A.bool,defaultActiveFirst:s.A.bool,activeKey:s.A.oneOfType([s.A.string,s.A.number]),selectedKeys:s.A.arrayOf(s.A.oneOfType([s.A.string,s.A.number])),defaultSelectedKeys:s.A.arrayOf(s.A.oneOfType([s.A.string,s.A.number])),defaultOpenKeys:s.A.arrayOf(s.A.oneOfType([s.A.string,s.A.number])),level:s.A.number,mode:s.A.oneOf(["horizontal","vertical","vertical-left","vertical-right","inline"]),triggerSubMenuAction:s.A.oneOf(["click","hover"]),inlineIndent:s.A.oneOfType([s.A.number,s.A.string]),manualRef:s.A.func,itemIcon:s.A.any,expandIcon:s.A.any,overflowedIndicator:s.A.any,children:s.A.any.def([]),__propsSymbol__:s.A.any},{prefixCls:"rc-menu",mode:"vertical",level:1,inlineIndent:24,visible:!0,focusable:!0,manualRef:f.lQ}),mixins:[l.A],created:function(){var e=(0,y.Oq)(this);this.prevProps=(0,o.A)({},e),e.store.setState({activeKey:(0,o.A)({},e.store.getState().activeKey,(0,i.A)({},e.eventKey,S(e,e.activeKey)))}),this.instanceArray=[]},mounted:function(){this.manualRef&&this.manualRef(this)},updated:function(){var e=(0,y.Oq)(this),t=this.prevProps,n="activeKey"in e?e.activeKey:e.store.getState().activeKey[L(e)],r=S(e,n);if(r!==n)k(e.store,L(e),r);else if("activeKey"in t){var i=S(t,t.activeKey);r!==i&&k(e.store,L(e),r)}this.prevProps=(0,o.A)({},e)},methods:{onKeyDown:function(e,t){var n=e.keyCode,r=void 0;if(this.getFlatInstanceArray().forEach(function(t){t&&t.active&&t.onKeyDown&&(r=t.onKeyDown(e))}),r)return 1;var i=null;return n!==u.A.UP&&n!==u.A.DOWN||(i=this.step(n===u.A.UP?-1:1)),i?(e.preventDefault(),k(this.$props.store,L(this.$props),i.eventKey),"function"===typeof t&&t(i),1):void 0},onItemHover:function(e){var t=e.key,n=e.hover;k(this.$props.store,L(this.$props),n?t:null)},onDeselect:function(e){this.__emit("deselect",e)},onSelect:function(e){this.__emit("select",e)},onClick:function(e){this.__emit("click",e)},onOpenChange:function(e){this.__emit("openChange",e)},onDestroy:function(e){this.__emit("destroy",e)},getFlatInstanceArray:function(){return this.instanceArray},getOpenTransitionName:function(){return this.$props.openTransitionName},step:function(e){var t=this.getFlatInstanceArray(),n=this.$props.store.getState().activeKey[L(this.$props)],r=t.length;if(!r)return null;e<0&&(t=t.concat().reverse());var i=-1;if(t.every(function(e,t){return!e||e.eventKey!==n||(i=t,!1)}),this.defaultActiveFirst||-1===i||!x(t.slice(i,r-1))){var o=(i+1)%r,a=o;do{var s=t[a];if(s&&!s.disabled)return s;a=(a+1)%r}while(a!==o);return null}},getIcon:function(e,t){if(e.$createElement){var n=e[t];return void 0!==n?n:e.$slots[t]||e.$scopedSlots[t]}var r=(0,y.Ts)(e)[t];if(void 0!==r)return r;var i=[],o=e.componentOptions||{};return(o.children||[]).forEach(function(e){e.data&&e.data.slot===t&&("template"===e.tag?i.push(e.children):i.push(e))}),i.length?i:void 0},renderCommonMenuItem:function(e,t,n){var r=this;if(void 0===e.tag)return e;var i=this.$props.store.getState(),a=this.$props,s=(0,f.dL)(e,a.eventKey,t),c=e.componentOptions.propsData||{},l=s===i.activeKey[L(this.$props)];c.disabled||(this.instanceArrayKeyIndexMap[s]=Object.keys(this.instanceArrayKeyIndexMap).length);var u=(0,y.kQ)(e),d={props:(0,o.A)({mode:c.mode||a.mode,level:a.level,inlineIndent:a.inlineIndent,renderMenuItem:this.renderMenuItem,rootPrefixCls:a.prefixCls,index:t,parentMenu:a.parentMenu,manualRef:c.disabled?f.lQ:C.bind(this,s),eventKey:s,active:!c.disabled&&l,multiple:a.multiple,openTransitionName:this.getOpenTransitionName(),openAnimation:a.openAnimation,subMenuOpenDelay:a.subMenuOpenDelay,subMenuCloseDelay:a.subMenuCloseDelay,forceSubMenuRender:a.forceSubMenuRender,builtinPlacements:a.builtinPlacements,itemIcon:this.getIcon(e,"itemIcon")||this.getIcon(this,"itemIcon"),expandIcon:this.getIcon(e,"expandIcon")||this.getIcon(this,"expandIcon")},n),on:{click:function(e){(u.click||f.lQ)(e),r.onClick(e)},itemHover:this.onItemHover,openChange:this.onOpenChange,deselect:this.onDeselect,select:this.onSelect}};return("inline"===a.mode||(0,f.Xb)())&&(d.props.triggerSubMenuAction="click"),(0,g.Ob)(e,d)},renderMenuItem:function(e,t,n){if(!e)return null;var r=this.$props.store.getState(),i={openKeys:r.openKeys,selectedKeys:r.selectedKeys,triggerSubMenuAction:this.triggerSubMenuAction,isRootMenu:!1,subMenuKey:n};return this.renderCommonMenuItem(e,t,i)}},render:function(){var e=this,t=arguments[0],n=(0,r.A)(this.$props,[]),i=n.eventKey,o=n.prefixCls,s=n.visible,c=n.level,l=n.mode,u=n.theme;this.instanceArray=[],this.instanceArrayKeyIndexMap={};var d=h()(n.prefixCls,n.prefixCls+"-"+n.mode),f={props:{tag:"ul",visible:s,prefixCls:o,level:c,mode:l,theme:u,overflowedIndicator:(0,y.nu)(this,"overflowedIndicator")},attrs:{role:n.role||"menu"},class:d,on:(0,a.A)((0,y.WM)(this),["click"])};return n.focusable&&(f.attrs.tabIndex="0",f.on.keydown=this.onKeyDown),t(w,f,[n.children.map(function(t,n){return e.renderMenuItem(t,n,i||"0-menu-")})])}},T=(0,c.A)()(z)},55384:function(e,t,n){"use strict";var r=n(4718);t.A={prefixCls:r.A.string.def("rc-menu"),focusable:r.A.bool.def(!0),multiple:r.A.bool,defaultActiveFirst:r.A.bool,visible:r.A.bool.def(!0),activeKey:r.A.oneOfType([r.A.string,r.A.number]),selectedKeys:r.A.arrayOf(r.A.oneOfType([r.A.string,r.A.number])),defaultSelectedKeys:r.A.arrayOf(r.A.oneOfType([r.A.string,r.A.number])).def([]),defaultOpenKeys:r.A.arrayOf(r.A.oneOfType([r.A.string,r.A.number])).def([]),openKeys:r.A.arrayOf(r.A.oneOfType([r.A.string,r.A.number])),openAnimation:r.A.oneOfType([r.A.string,r.A.object]),mode:r.A.oneOf(["horizontal","vertical","vertical-left","vertical-right","inline"]).def("vertical"),triggerSubMenuAction:r.A.string.def("hover"),subMenuOpenDelay:r.A.number.def(.1),subMenuCloseDelay:r.A.number.def(.1),level:r.A.number.def(1),inlineIndent:r.A.number.def(24),theme:r.A.oneOf(["light","dark"]).def("light"),getPopupContainer:r.A.func,openTransitionName:r.A.string,forceSubMenuRender:r.A.bool,selectable:r.A.bool,isRootMenu:r.A.bool.def(!0),builtinPlacements:r.A.object.def(function(){return{}}),itemIcon:r.A.any,expandIcon:r.A.any,overflowedIndicator:r.A.any}},74072:function(e,t,n){"use strict";n.d(t,{Ay:function(){return p}});var r=n(85505),i=n(4718);function o(e){var t=e,n=[];function i(e){t=(0,r.A)({},t,e);for(var i=0;i=n&&(e.updateKey=a[0].updateKey||a[0].key,a.shift()),a.push(e)),{notices:a}})},remove:function(e){this.setState(function(t){return{notices:t.notices.filter(function(t){return t.key!==e})}})}},render:function(e){var t=this,n=this.prefixCls,r=this.notices,o=this.remove,a=this.getTransitionName,c=(0,u.A)(a()),d=r.map(function(i,a){var c=Boolean(a===r.length-1&&i.updateKey),u=i.updateKey?i.updateKey:i.key,d=i.content,f=i.duration,m=i.closable,v=i.onClose,g=i.style,y=i["class"],_=(0,l.A)(o.bind(t,i.key),v),b={props:{prefixCls:n,duration:f,closable:m,update:c,closeIcon:(0,s.nu)(t,"closeIcon")},on:{close:_,click:i.onClick||p},style:g,class:y,key:u};return e(h,b,["function"===typeof d?d(e):d])}),f=(0,i.A)({},n,1),m=(0,s.gd)(this);return e("div",{class:f,style:m||{top:"65px",left:"50%"}},[e("transition-group",c,[d])])},newInstance:function(e,t){var n=e||{},i=n.getContainer,a=n.style,s=n["class"],c=(0,r.A)(n,["getContainer","style","class"]),l=document.createElement("div");if(i){var u=i();u.appendChild(l)}else document.body.appendChild(l);var d=f.A.Vue||o.Ay;new d({el:l,mounted:function(){var e=this;this.$nextTick(function(){t({notice:function(t){e.$refs.notification.add(t)},removeNotice:function(t){e.$refs.notification.remove(t)},component:e,destroy:function(){e.$destroy(),e.$el.parentNode.removeChild(e.$el)}})})},render:function(){var e=arguments[0],t={props:c,ref:"notification",style:a,class:s};return e(y,t)}})}},_=y,b=_},15709:function(e,t){"use strict";t.A={items_per_page:"/ page",jump_to:"Go to",jump_to_confirm:"confirm",page:"",prev_page:"Previous Page",next_page:"Next Page",prev_5:"Previous 5 Pages",next_5:"Next 5 Pages",prev_3:"Previous 3 Pages",next_3:"Next 3 Pages"}},48931:function(e,t){"use strict";t.A={items_per_page:"条/页",jump_to:"跳至",jump_to_confirm:"确定",page:"页",prev_page:"上一页",next_page:"下一页",prev_5:"向前 5 页",next_5:"向后 5 页",prev_3:"向前 3 页",next_3:"向后 3 页"}},68052:function(e,t,n){"use strict";var r=n(4718);t.A={props:{value:r.A.oneOfType([r.A.string,r.A.number]),label:r.A.oneOfType([r.A.string,r.A.number])},isSelectOptGroup:!0}},28781:function(e,t,n){"use strict";var r=n(4718);t.A={props:{value:r.A.oneOfType([r.A.string,r.A.number]),label:r.A.oneOfType([r.A.string,r.A.number]),disabled:r.A.bool,title:r.A.oneOfType([r.A.string,r.A.number])},isSelectOption:!0}},7772:function(e,t,n){"use strict";n.d(t,{A:function(){return S}});var r=n(95093),i=n.n(r),o=n(4718),a=n(52315),s=n(75189),c=n.n(s),l={mixins:[a.A],props:{format:o.A.string,prefixCls:o.A.string,disabledDate:o.A.func,placeholder:o.A.string,clearText:o.A.string,value:o.A.object,inputReadOnly:o.A.bool.def(!1),hourOptions:o.A.array,minuteOptions:o.A.array,secondOptions:o.A.array,disabledHours:o.A.func,disabledMinutes:o.A.func,disabledSeconds:o.A.func,allowEmpty:o.A.bool,defaultOpenValue:o.A.object,currentSelectPanel:o.A.string,focusOnOpen:o.A.bool,clearIcon:o.A.any},data:function(){var e=this.value,t=this.format;return{str:e&&e.format(t)||"",invalid:!1}},mounted:function(){var e=this;if(this.focusOnOpen){var t=window.requestAnimationFrame||window.setTimeout;t(function(){e.$refs.input.focus(),e.$refs.input.select()})}},watch:{value:function(e){var t=this;this.$nextTick(function(){t.setState({str:e&&e.format(t.format)||"",invalid:!1})})}},methods:{onInputChange:function(e){var t=e.target,n=t.value,r=t.composing,o=this.str,a=void 0===o?"":o;if(!e.isComposing&&!r&&a!==n){this.setState({str:n});var s=this.format,c=this.hourOptions,l=this.minuteOptions,u=this.secondOptions,d=this.disabledHours,h=this.disabledMinutes,f=this.disabledSeconds,p=this.value;if(n){var m=this.getProtoValue().clone(),v=i()(n,s,!0);if(!v.isValid())return void this.setState({invalid:!0});if(m.hour(v.hour()).minute(v.minute()).second(v.second()),c.indexOf(m.hour())<0||l.indexOf(m.minute())<0||u.indexOf(m.second())<0)return void this.setState({invalid:!0});var g=d(),y=h(m.hour()),_=f(m.hour(),m.minute());if(g&&g.indexOf(m.hour())>=0||y&&y.indexOf(m.minute())>=0||_&&_.indexOf(m.second())>=0)return void this.setState({invalid:!0});if(p){if(p.hour()!==m.hour()||p.minute()!==m.minute()||p.second()!==m.second()){var b=p.clone();b.hour(m.hour()),b.minute(m.minute()),b.second(m.second()),this.__emit("change",b)}}else p!==m&&this.__emit("change",m)}else this.__emit("change",null);this.setState({invalid:!1})}},onKeyDown:function(e){27===e.keyCode&&this.__emit("esc"),this.__emit("keydown",e)},getProtoValue:function(){return this.value||this.defaultOpenValue},getInput:function(){var e=this.$createElement,t=this.prefixCls,n=this.placeholder,r=this.inputReadOnly,i=this.invalid,o=this.str,a=i?t+"-input-invalid":"";return e("input",c()([{class:t+"-input "+a,ref:"input",on:{keydown:this.onKeyDown,input:this.onInputChange},domProps:{value:o},attrs:{placeholder:n,readOnly:!!r}},{directives:[{name:"ant-input"}]}]))}},render:function(){var e=arguments[0],t=this.prefixCls;return e("div",{class:t+"-input-wrap"},[this.getInput()])}},u=l,d=n(44508),h=n(46942),f=n.n(h),p=n(93146),m=n.n(p);function v(){}var g=function e(t,n,r){if(r<=0)m()(function(){t.scrollTop=n});else{var i=n-t.scrollTop,o=i/r*10;m()(function(){t.scrollTop+=o,t.scrollTop!==n&&e(t,n,r-10)})}},y={mixins:[a.A],props:{prefixCls:o.A.string,options:o.A.array,selectedIndex:o.A.number,type:o.A.string},data:function(){return{active:!1}},mounted:function(){var e=this;this.$nextTick(function(){e.scrollToSelected(0)})},watch:{selectedIndex:function(){var e=this;this.$nextTick(function(){e.scrollToSelected(120)})}},methods:{onSelect:function(e){var t=this.type;this.__emit("select",t,e)},onEsc:function(e){this.__emit("esc",e)},getOptions:function(){var e=this,t=this.$createElement,n=this.options,r=this.selectedIndex,i=this.prefixCls;return n.map(function(n,o){var a,s=f()((a={},(0,d.A)(a,i+"-select-option-selected",r===o),(0,d.A)(a,i+"-select-option-disabled",n.disabled),a)),c=n.disabled?v:function(){e.onSelect(n.value)},l=function(t){13===t.keyCode?c():27===t.keyCode&&e.onEsc()};return t("li",{attrs:{role:"button",disabled:n.disabled,tabIndex:"0"},on:{click:c,keydown:l},class:s,key:o},[n.value])})},handleMouseEnter:function(e){this.setState({active:!0}),this.__emit("mouseenter",e)},handleMouseLeave:function(){this.setState({active:!1})},scrollToSelected:function(e){var t=this.$el,n=this.$refs.list;if(n){var r=this.selectedIndex;r<0&&(r=0);var i=n.children[r],o=i.offsetTop;g(t,o,e)}}},render:function(){var e,t=arguments[0],n=this.prefixCls,r=this.options,i=this.active;if(0===r.length)return null;var o=(e={},(0,d.A)(e,n+"-select",1),(0,d.A)(e,n+"-select-active",i),e);return t("div",{class:o,on:{mouseenter:this.handleMouseEnter,mouseleave:this.handleMouseLeave}},[t("ul",{ref:"list"},[this.getOptions()])])}},_=y,b=function(e,t){var n=""+e;e<10&&(n="0"+e);var r=!1;return t&&t.indexOf(e)>=0&&(r=!0),{value:n,disabled:r}},M={mixins:[a.A],name:"Combobox",props:{format:o.A.string,defaultOpenValue:o.A.object,prefixCls:o.A.string,value:o.A.object,showHour:o.A.bool,showMinute:o.A.bool,showSecond:o.A.bool,hourOptions:o.A.array,minuteOptions:o.A.array,secondOptions:o.A.array,disabledHours:o.A.func,disabledMinutes:o.A.func,disabledSeconds:o.A.func,use12Hours:o.A.bool,isAM:o.A.bool},methods:{onItemChange:function(e,t){var n=this.defaultOpenValue,r=this.use12Hours,i=this.value,o=this.isAM,a=(i||n).clone();if("hour"===e)r?o?a.hour(+t%12):a.hour(+t%12+12):a.hour(+t);else if("minute"===e)a.minute(+t);else if("ampm"===e){var s=t.toUpperCase();r&&("PM"===s&&a.hour()<12&&a.hour(a.hour()%12+12),"AM"===s&&a.hour()>=12&&a.hour(a.hour()-12)),this.__emit("amPmChange",s)}else a.second(+t);this.__emit("change",a)},onEnterSelectPanel:function(e){this.__emit("currentSelectPanelChange",e)},onEsc:function(e){this.__emit("esc",e)},getHourSelect:function(e){var t=this,n=this.$createElement,r=this.prefixCls,i=this.hourOptions,o=this.disabledHours,a=this.showHour,s=this.use12Hours;if(!a)return null;var c=o(),l=void 0,u=void 0;return s?(l=[12].concat(i.filter(function(e){return e<12&&e>0})),u=e%12||12):(l=i,u=e),n(_,{attrs:{prefixCls:r,options:l.map(function(e){return b(e,c)}),selectedIndex:l.indexOf(u),type:"hour"},on:{select:this.onItemChange,mouseenter:function(){return t.onEnterSelectPanel("hour")},esc:this.onEsc}})},getMinuteSelect:function(e){var t=this,n=this.$createElement,r=this.prefixCls,i=this.minuteOptions,o=this.disabledMinutes,a=this.defaultOpenValue,s=this.showMinute,c=this.value;if(!s)return null;var l=c||a,u=o(l.hour());return n(_,{attrs:{prefixCls:r,options:i.map(function(e){return b(e,u)}),selectedIndex:i.indexOf(e),type:"minute"},on:{select:this.onItemChange,mouseenter:function(){return t.onEnterSelectPanel("minute")},esc:this.onEsc}})},getSecondSelect:function(e){var t=this,n=this.$createElement,r=this.prefixCls,i=this.secondOptions,o=this.disabledSeconds,a=this.showSecond,s=this.defaultOpenValue,c=this.value;if(!a)return null;var l=c||s,u=o(l.hour(),l.minute());return n(_,{attrs:{prefixCls:r,options:i.map(function(e){return b(e,u)}),selectedIndex:i.indexOf(e),type:"second"},on:{select:this.onItemChange,mouseenter:function(){return t.onEnterSelectPanel("second")},esc:this.onEsc}})},getAMPMSelect:function(){var e=this,t=this.$createElement,n=this.prefixCls,r=this.use12Hours,i=this.format,o=this.isAM;if(!r)return null;var a=["am","pm"].map(function(e){return i.match(/\sA/)?e.toUpperCase():e}).map(function(e){return{value:e}}),s=o?0:1;return t(_,{attrs:{prefixCls:n,options:a,selectedIndex:s,type:"ampm"},on:{select:this.onItemChange,mouseenter:function(){return e.onEnterSelectPanel("ampm")},esc:this.onEsc}})}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.defaultOpenValue,r=this.value,i=r||n;return e("div",{class:t+"-combobox"},[this.getHourSelect(i.hour()),this.getMinuteSelect(i.minute()),this.getSecondSelect(i.second()),this.getAMPMSelect(i.hour())])}},A=M,w=n(15848);function x(){}function k(e,t,n){for(var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,i=[],o=0;o=0&&e.hour()<12}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.placeholder,r=this.disabledMinutes,i=this.addon,o=this.disabledSeconds,a=this.hideDisabledOptions,s=this.showHour,c=this.showMinute,l=this.showSecond,d=this.format,h=this.defaultOpenValue,f=this.clearText,p=this.use12Hours,m=this.focusOnOpen,v=this.hourStep,g=this.minuteStep,y=this.secondStep,_=this.inputReadOnly,b=this.sValue,M=this.currentSelectPanel,C=(0,w.nu)(this,"clearIcon"),S=(0,w.WM)(this),z=S.esc,T=void 0===z?x:z,O=S.keydown,H=void 0===O?x:O,D=this.disabledHours2(),Y=r(b?b.hour():null),V=o(b?b.hour():null,b?b.minute():null),P=k(24,D,a,v),E=k(60,Y,a,g),j=k(60,V,a,y),F=L(h,P,E,j);return e("div",{class:t+"-inner"},[e(u,{attrs:{clearText:f,prefixCls:t,defaultOpenValue:F,value:b,currentSelectPanel:M,format:d,placeholder:n,hourOptions:P,minuteOptions:E,secondOptions:j,disabledHours:this.disabledHours2,disabledMinutes:r,disabledSeconds:o,focusOnOpen:m,inputReadOnly:_,clearIcon:C},on:{esc:T,change:this.onChange,keydown:H}}),e(A,{attrs:{prefixCls:t,value:b,defaultOpenValue:F,format:d,showHour:s,showMinute:c,showSecond:l,hourOptions:P,minuteOptions:E,secondOptions:j,disabledHours:this.disabledHours2,disabledMinutes:r,disabledSeconds:o,use12Hours:p,isAM:this.isAM()},on:{change:this.onChange,amPmChange:this.onAmPmChange,currentSelectPanelChange:this.onCurrentSelectPanelChange,esc:this.onEsc}}),i(this)])}},S=C},47006:function(e,t,n){"use strict";n.d(t,{A:function(){return lt}});var r,i=n(85505),o=n(85471),a=n(24415),s=n(4718),c=n(17948),l=n(15848),u=n(982),d=n(82160),h=n(36873),f=n(97479);function p(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function m(e){for(var t=1;t=0&&n.left>=0&&n.bottom>n.top&&n.right>n.left?n:null}function _e(e,t,n,r){var i=fe.clone(e),o={width:t.width,height:t.height};return r.adjustX&&i.left=n.left&&i.left+o.width>n.right&&(o.width-=i.left+o.width-n.right),r.adjustX&&i.left+o.width>n.right&&(i.left=Math.max(n.right-o.width,n.left)),r.adjustY&&i.top=n.top&&i.top+o.height>n.bottom&&(o.height-=i.top+o.height-n.bottom),r.adjustY&&i.top+o.height>n.bottom&&(i.top=Math.max(n.bottom-o.height,n.top)),fe.mix(i,o)}function be(e){var t,n,r;if(fe.isWindow(e)||9===e.nodeType){var i=fe.getWindow(e);t={left:fe.getWindowScrollLeft(i),top:fe.getWindowScrollTop(i)},n=fe.viewportWidth(i),r=fe.viewportHeight(i)}else t=fe.offset(e),n=fe.outerWidth(e),r=fe.outerHeight(e);return t.width=n,t.height=r,t}function Me(e,t){var n=t.charAt(0),r=t.charAt(1),i=e.width,o=e.height,a=e.left,s=e.top;return"c"===n?s+=o/2:"b"===n&&(s+=o),"c"===r?a+=i/2:"r"===r&&(a+=i),{left:a,top:s}}function Ae(e,t,n,r,i){var o=Me(t,n[1]),a=Me(e,n[0]),s=[a.left-o.left,a.top-o.top];return{left:Math.round(e.left-s[0]+r[0]-i[0]),top:Math.round(e.top-s[1]+r[1]-i[1])}}function we(e,t,n){return e.leftn.right}function xe(e,t,n){return e.topn.bottom}function ke(e,t,n){return e.left>n.right||e.left+t.widthn.bottom||e.top+t.height=n.right||r.top>=n.bottom}function De(e,t,n){var r=n.target||t,i=be(r),o=!He(r,n.overflow&&n.overflow.alwaysByViewport);return Oe(e,i,n,o)}function Ye(e,t,n){var r,i,o=fe.getDocument(e),a=o.defaultView||o.parentWindow,s=fe.getWindowScrollLeft(a),c=fe.getWindowScrollTop(a),l=fe.viewportWidth(a),u=fe.viewportHeight(a);r="pageX"in t?t.pageX:s+t.clientX,i="pageY"in t?t.pageY:c+t.clientY;var d={left:r,top:i,width:0,height:0},h=r>=0&&r<=s+l&&i>=0&&i<=c+u,f=[n.points[0],"cc"];return Oe(e,d,m(m({},n),{},{points:f}),h)}De.__getOffsetParent=me,De.__getVisibleRectForElement=ye;function Ve(e,t){var n=void 0;function r(){n&&(clearTimeout(n),n=null)}function i(){r(),n=setTimeout(e,t)}return i.clear=r,i}function Pe(e,t){return e===t||!(!e||!t)&&("pageX"in t&&"pageY"in t?e.pageX===t.pageX&&e.pageY===t.pageY:"clientX"in t&&"clientY"in t&&(e.clientX===t.clientX&&e.clientY===t.clientY))}function Ee(e){return e&&"object"===("undefined"===typeof e?"undefined":(0,f.A)(e))&&e.window===e}function je(e,t){var n=Math.floor(e),r=Math.floor(t);return Math.abs(n-r)<=1}function Fe(e,t){e!==document.activeElement&&(0,c.A)(t,e)&&e.focus()}var Ie=n(51927),$e=n(88055),Re=n.n($e);function Ne(e){return"function"===typeof e&&e?e():null}function We(e){return"object"===("undefined"===typeof e?"undefined":(0,f.A)(e))&&e?e:null}var Be={props:{childrenProps:s.A.object,align:s.A.object.isRequired,target:s.A.oneOfType([s.A.func,s.A.object]).def(function(){return window}),monitorBufferTime:s.A.number.def(50),monitorWindowResize:s.A.bool.def(!1),disabled:s.A.bool.def(!1)},data:function(){return this.aligned=!1,{}},mounted:function(){var e=this;this.$nextTick(function(){e.prevProps=(0,i.A)({},e.$props);var t=e.$props;!e.aligned&&e.forceAlign(),!t.disabled&&t.monitorWindowResize&&e.startMonitorWindowResize()})},updated:function(){var e=this;this.$nextTick(function(){var t=e.prevProps,n=e.$props,r=!1;if(!n.disabled){var o=e.$el,a=o?o.getBoundingClientRect():null;if(t.disabled)r=!0;else{var s=Ne(t.target),c=Ne(n.target),l=We(t.target),u=We(n.target);Ee(s)&&Ee(c)?r=!1:(s!==c||s&&!c&&u||l&&u&&c||u&&!Pe(l,u))&&(r=!0);var d=e.sourceRect||{};r||!o||je(d.width,a.width)&&je(d.height,a.height)||(r=!0)}e.sourceRect=a}r&&e.forceAlign(),n.monitorWindowResize&&!n.disabled?e.startMonitorWindowResize():e.stopMonitorWindowResize(),e.prevProps=(0,i.A)({},e.$props,{align:Re()(e.$props.align)})})},beforeDestroy:function(){this.stopMonitorWindowResize()},methods:{startMonitorWindowResize:function(){this.resizeHandler||(this.bufferMonitor=Ve(this.forceAlign,this.$props.monitorBufferTime),this.resizeHandler=(0,d.A)(window,"resize",this.bufferMonitor))},stopMonitorWindowResize:function(){this.resizeHandler&&(this.bufferMonitor.clear(),this.resizeHandler.remove(),this.resizeHandler=null)},forceAlign:function(){var e=this.$props,t=e.disabled,n=e.target,r=e.align;if(!t&&n){var i=this.$el,o=(0,l.WM)(this),a=void 0,s=Ne(n),c=We(n),u=document.activeElement;s?a=De(i,s,r):c&&(a=Ye(i,c,r)),Fe(u,i),this.aligned=!0,o.align&&o.align(i,a)}}},render:function(){var e=this.$props.childrenProps,t=(0,l.$c)(this)[0];return t&&e?(0,Ie.Ob)(t,{props:e}):t}},Ke=Be,Ue=n(75189),qe=n.n(Ue),Ge={props:{visible:s.A.bool,hiddenClassName:s.A.string},render:function(){var e=arguments[0],t=this.$props,n=t.hiddenClassName,r=(t.visible,null);if(n||!this.$slots["default"]||this.$slots["default"].length>1){var i="";r=e("div",{class:i},[this.$slots["default"]])}else r=this.$slots["default"][0];return r}},Je={props:{hiddenClassName:s.A.string.def(""),prefixCls:s.A.string,visible:s.A.bool},render:function(){var e=arguments[0],t=this.$props,n=t.prefixCls,r=t.visible,i=t.hiddenClassName,o={on:(0,l.WM)(this)};return e("div",qe()([o,{class:r?"":i}]),[e(Ge,{class:n+"-content",attrs:{visible:r}},[this.$slots["default"]])])}},Xe=n(75998),Ze=n(52315),Qe={name:"VCTriggerPopup",mixins:[Ze.A],props:{visible:s.A.bool,getClassNameFromAlign:s.A.func,getRootDomNode:s.A.func,align:s.A.any,destroyPopupOnHide:s.A.bool,prefixCls:s.A.string,getContainer:s.A.func,transitionName:s.A.string,animation:s.A.any,maskAnimation:s.A.string,maskTransitionName:s.A.string,mask:s.A.bool,zIndex:s.A.number,popupClassName:s.A.any,popupStyle:s.A.object.def(function(){return{}}),stretch:s.A.string,point:s.A.shape({pageX:s.A.number,pageY:s.A.number})},data:function(){return this.domEl=null,{stretchChecked:!1,targetWidth:void 0,targetHeight:void 0}},mounted:function(){var e=this;this.$nextTick(function(){e.rootNode=e.getPopupDomNode(),e.setStretchSize()})},updated:function(){var e=this;this.$nextTick(function(){e.setStretchSize()})},beforeDestroy:function(){this.$el.parentNode?this.$el.parentNode.removeChild(this.$el):this.$el.remove&&this.$el.remove()},methods:{onAlign:function(e,t){var n=this.$props,r=n.getClassNameFromAlign(t);this.currentAlignClassName!==r&&(this.currentAlignClassName=r,e.className=this.getClassName(r));var i=(0,l.WM)(this);i.align&&i.align(e,t)},setStretchSize:function(){var e=this.$props,t=e.stretch,n=e.getRootDomNode,r=e.visible,i=this.$data,o=i.stretchChecked,a=i.targetHeight,s=i.targetWidth;if(t&&r){var c=n();if(c){var l=c.offsetHeight,u=c.offsetWidth;a===l&&s===u&&o||this.setState({stretchChecked:!0,targetHeight:l,targetWidth:u})}}else o&&this.setState({stretchChecked:!1})},getPopupDomNode:function(){return this.$refs.popupInstance?this.$refs.popupInstance.$el:null},getTargetElement:function(){return this.$props.getRootDomNode()},getAlignTarget:function(){var e=this.$props.point;return e||this.getTargetElement},getMaskTransitionName:function(){var e=this.$props,t=e.maskTransitionName,n=e.maskAnimation;return!t&&n&&(t=e.prefixCls+"-"+n),t},getTransitionName:function(){var e=this.$props,t=e.transitionName,n=e.animation;return t||("string"===typeof n?t=""+n:n&&n.props&&n.props.name&&(t=n.props.name)),t},getClassName:function(e){return this.$props.prefixCls+" "+this.$props.popupClassName+" "+e},getPopupElement:function(){var e=this,t=this.$createElement,n=this.$props,r=this.$slots,o=this.getTransitionName,a=this.$data,s=a.stretchChecked,c=a.targetHeight,u=a.targetWidth,d=n.align,h=n.visible,p=n.prefixCls,m=n.animation,v=n.popupStyle,g=n.getClassNameFromAlign,y=n.destroyPopupOnHide,_=n.stretch,b=this.getClassName(this.currentAlignClassName||g(d));h||(this.currentAlignClassName=null);var M={};_&&(-1!==_.indexOf("height")?M.height="number"===typeof c?c+"px":c:-1!==_.indexOf("minHeight")&&(M.minHeight="number"===typeof c?c+"px":c),-1!==_.indexOf("width")?M.width="number"===typeof u?u+"px":u:-1!==_.indexOf("minWidth")&&(M.minWidth="number"===typeof u?u+"px":u),s||setTimeout(function(){e.$refs.alignInstance&&e.$refs.alignInstance.forceAlign()},0));var A={props:{prefixCls:p,visible:h},class:b,on:(0,l.WM)(this),ref:"popupInstance",style:(0,i.A)({},M,v,this.getZIndexStyle())},w={props:{appear:!0,css:!1}},x=o(),k=!!x,L={beforeEnter:function(){},enter:function(t,n){e.$nextTick(function(){e.$refs.alignInstance?e.$refs.alignInstance.$nextTick(function(){e.domEl=t,(0,Xe.A)(t,x+"-enter",n)}):n()})},beforeLeave:function(){e.domEl=null},leave:function(e,t){(0,Xe.A)(e,x+"-leave",t)}};if("object"===("undefined"===typeof m?"undefined":(0,f.A)(m))){k=!0;var C=m.on,S=void 0===C?{}:C,z=m.props,T=void 0===z?{}:z;w.props=(0,i.A)({},w.props,T),w.on=(0,i.A)({},L,S)}else w.on=L;return k||(w={}),t("transition",w,y?[h?t(Ke,{attrs:{target:this.getAlignTarget(),monitorWindowResize:!0,align:d},key:"popup",ref:"alignInstance",on:{align:this.onAlign}},[t(Je,A,[r["default"]])]):null]:[t(Ke,{directives:[{name:"show",value:h}],attrs:{target:this.getAlignTarget(),monitorWindowResize:!0,disabled:!h,align:d},key:"popup",ref:"alignInstance",on:{align:this.onAlign}},[t(Je,A,[r["default"]])])])},getZIndexStyle:function(){var e={},t=this.$props;return void 0!==t.zIndex&&(e.zIndex=t.zIndex),e},getMaskElement:function(){var e=this.$createElement,t=this.$props,n=null;if(t.mask){var r=this.getMaskTransitionName();n=e(Ge,{directives:[{name:"show",value:t.visible}],style:this.getZIndexStyle(),key:"mask",class:t.prefixCls+"-mask",attrs:{visible:t.visible}}),r&&(n=e("transition",{attrs:{appear:!0,name:r}},[n]))}return n}},render:function(){var e=arguments[0],t=this.getMaskElement,n=this.getPopupElement;return e("div",[t(),n()])}};function et(e,t,n){return n?e[0]===t[0]:e[0]===t[0]&&e[1]===t[1]}function tt(e,t,n){var r=e[t]||{};return(0,i.A)({},r,n)}function nt(e,t,n,r){var i=n.points;for(var o in e)if(e.hasOwnProperty(o)&&et(e[o].points,i,r))return t+"-placement-"+o;return""}function rt(){}var it={props:{autoMount:s.A.bool.def(!0),autoDestroy:s.A.bool.def(!0),visible:s.A.bool,forceRender:s.A.bool.def(!1),parent:s.A.any,getComponent:s.A.func.isRequired,getContainer:s.A.func.isRequired,children:s.A.func.isRequired},mounted:function(){this.autoMount&&this.renderComponent()},updated:function(){this.autoMount&&this.renderComponent()},beforeDestroy:function(){this.autoDestroy&&this.removeContainer()},methods:{removeContainer:function(){this.container&&(this._component&&this._component.$destroy(),this.container.parentNode.removeChild(this.container),this.container=null,this._component=null)},renderComponent:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],n=this.visible,r=this.forceRender,i=this.getContainer,o=this.parent,a=this;if(n||o._component||o.$refs._component||r){var s=this.componentEl;this.container||(this.container=i(),s=document.createElement("div"),this.componentEl=s,this.container.appendChild(s));var c={component:a.getComponent(e)};this._component?this._component.setComponent(c):this._component=new this.$root.constructor({el:s,parent:a,data:{_com:c},mounted:function(){this.$nextTick(function(){t&&t.call(a)})},updated:function(){this.$nextTick(function(){t&&t.call(a)})},methods:{setComponent:function(e){this.$data._com=e}},render:function(){return this.$data._com.component}})}}},render:function(){return this.children({renderComponent:this.renderComponent,removeContainer:this.removeContainer})}};function ot(){return""}function at(){return window.document}o.Ay.use(a.A,{name:"ant-ref"});var st=["click","mousedown","touchstart","mouseenter","mouseleave","focus","blur","contextmenu"],ct={name:"Trigger",mixins:[Ze.A],props:{action:s.A.oneOfType([s.A.string,s.A.arrayOf(s.A.string)]).def([]),showAction:s.A.any.def([]),hideAction:s.A.any.def([]),getPopupClassNameFromAlign:s.A.any.def(ot),afterPopupVisibleChange:s.A.func.def(rt),popup:s.A.any,popupStyle:s.A.object.def(function(){return{}}),prefixCls:s.A.string.def("rc-trigger-popup"),popupClassName:s.A.string.def(""),popupPlacement:s.A.string,builtinPlacements:s.A.object,popupTransitionName:s.A.oneOfType([s.A.string,s.A.object]),popupAnimation:s.A.any,mouseEnterDelay:s.A.number.def(0),mouseLeaveDelay:s.A.number.def(.1),zIndex:s.A.number,focusDelay:s.A.number.def(0),blurDelay:s.A.number.def(.15),getPopupContainer:s.A.func,getDocument:s.A.func.def(at),forceRender:s.A.bool,destroyPopupOnHide:s.A.bool.def(!1),mask:s.A.bool.def(!1),maskClosable:s.A.bool.def(!0),popupAlign:s.A.object.def(function(){return{}}),popupVisible:s.A.bool,defaultPopupVisible:s.A.bool.def(!1),maskTransitionName:s.A.oneOfType([s.A.string,s.A.object]),maskAnimation:s.A.string,stretch:s.A.string,alignPoint:s.A.bool},provide:function(){return{vcTriggerContext:this}},inject:{vcTriggerContext:{default:function(){return{}}},savePopupRef:{default:function(){return rt}},dialogContext:{default:function(){return null}}},data:function(){var e=this,t=this.$props,n=void 0;return n=(0,l.cK)(this,"popupVisible")?!!t.popupVisible:!!t.defaultPopupVisible,st.forEach(function(t){e["fire"+t]=function(n){e.fireEvents(t,n)}}),{prevPopupVisible:n,sPopupVisible:n,point:null}},watch:{popupVisible:function(e){void 0!==e&&(this.prevPopupVisible=this.sPopupVisible,this.sPopupVisible=e)}},deactivated:function(){this.setPopupVisible(!1)},mounted:function(){var e=this;this.$nextTick(function(){e.renderComponent(null),e.updatedCal()})},updated:function(){var e=this,t=function(){e.sPopupVisible!==e.prevPopupVisible&&e.afterPopupVisibleChange(e.sPopupVisible),e.prevPopupVisible=e.sPopupVisible};this.renderComponent(null,t),this.$nextTick(function(){e.updatedCal()})},beforeDestroy:function(){this.clearDelayTimer(),this.clearOutsideHandler(),clearTimeout(this.mouseDownTimeout)},methods:{updatedCal:function(){var e=this.$props,t=this.$data;if(t.sPopupVisible){var n=void 0;this.clickOutsideHandler||!this.isClickToHide()&&!this.isContextmenuToShow()||(n=e.getDocument(),this.clickOutsideHandler=(0,d.A)(n,"mousedown",this.onDocumentClick)),this.touchOutsideHandler||(n=n||e.getDocument(),this.touchOutsideHandler=(0,d.A)(n,"touchstart",this.onDocumentClick)),!this.contextmenuOutsideHandler1&&this.isContextmenuToShow()&&(n=n||e.getDocument(),this.contextmenuOutsideHandler1=(0,d.A)(n,"scroll",this.onContextmenuClose)),!this.contextmenuOutsideHandler2&&this.isContextmenuToShow()&&(this.contextmenuOutsideHandler2=(0,d.A)(window,"blur",this.onContextmenuClose))}else this.clearOutsideHandler()},onMouseenter:function(e){var t=this.$props.mouseEnterDelay;this.fireEvents("mouseenter",e),this.delaySetPopupVisible(!0,t,t?null:e)},onMouseMove:function(e){this.fireEvents("mousemove",e),this.setPoint(e)},onMouseleave:function(e){this.fireEvents("mouseleave",e),this.delaySetPopupVisible(!1,this.$props.mouseLeaveDelay)},onPopupMouseenter:function(){this.clearDelayTimer()},onPopupMouseleave:function(e){e&&e.relatedTarget&&!e.relatedTarget.setTimeout&&this._component&&this._component.getPopupDomNode&&(0,c.A)(this._component.getPopupDomNode(),e.relatedTarget)||this.delaySetPopupVisible(!1,this.$props.mouseLeaveDelay)},onFocus:function(e){this.fireEvents("focus",e),this.clearDelayTimer(),this.isFocusToShow()&&(this.focusTime=Date.now(),this.delaySetPopupVisible(!0,this.$props.focusDelay))},onMousedown:function(e){this.fireEvents("mousedown",e),this.preClickTime=Date.now()},onTouchstart:function(e){this.fireEvents("touchstart",e),this.preTouchTime=Date.now()},onBlur:function(e){(0,c.A)(e.target,e.relatedTarget||document.activeElement)||(this.fireEvents("blur",e),this.clearDelayTimer(),this.isBlurToHide()&&this.delaySetPopupVisible(!1,this.$props.blurDelay))},onContextmenu:function(e){e.preventDefault(),this.fireEvents("contextmenu",e),this.setPopupVisible(!0,e)},onContextmenuClose:function(){this.isContextmenuToShow()&&this.close()},onClick:function(e){if(this.fireEvents("click",e),this.focusTime){var t=void 0;if(this.preClickTime&&this.preTouchTime?t=Math.min(this.preClickTime,this.preTouchTime):this.preClickTime?t=this.preClickTime:this.preTouchTime&&(t=this.preTouchTime),Math.abs(t-this.focusTime)<20)return;this.focusTime=0}this.preClickTime=0,this.preTouchTime=0,this.isClickToShow()&&(this.isClickToHide()||this.isBlurToHide())&&e&&e.preventDefault&&e.preventDefault(),e&&e.domEvent&&e.domEvent.preventDefault();var n=!this.$data.sPopupVisible;(this.isClickToHide()&&!n||n&&this.isClickToShow())&&this.setPopupVisible(!this.$data.sPopupVisible,e)},onPopupMouseDown:function(){var e=this,t=this.vcTriggerContext,n=void 0===t?{}:t;this.hasPopupMouseDown=!0,clearTimeout(this.mouseDownTimeout),this.mouseDownTimeout=setTimeout(function(){e.hasPopupMouseDown=!1},0),n.onPopupMouseDown&&n.onPopupMouseDown.apply(n,arguments)},onDocumentClick:function(e){if(!this.$props.mask||this.$props.maskClosable){var t=e.target,n=this.$el;(0,c.A)(n,t)||this.hasPopupMouseDown||this.close()}},getPopupDomNode:function(){return this._component&&this._component.getPopupDomNode?this._component.getPopupDomNode():null},getRootDomNode:function(){return this.$el},handleGetPopupClassFromAlign:function(e){var t=[],n=this.$props,r=n.popupPlacement,i=n.builtinPlacements,o=n.prefixCls,a=n.alignPoint,s=n.getPopupClassNameFromAlign;return r&&i&&t.push(nt(i,o,e,a)),s&&t.push(s(e)),t.join(" ")},getPopupAlign:function(){var e=this.$props,t=e.popupPlacement,n=e.popupAlign,r=e.builtinPlacements;return t&&r?tt(r,t,n):n},savePopup:function(e){this._component=e,this.savePopupRef(e)},getComponent:function(){var e=this.$createElement,t=this,n={};this.isMouseEnterToShow()&&(n.mouseenter=t.onPopupMouseenter),this.isMouseLeaveToHide()&&(n.mouseleave=t.onPopupMouseleave),n.mousedown=this.onPopupMouseDown,n.touchstart=this.onPopupMouseDown;var r=t.handleGetPopupClassFromAlign,o=t.getRootDomNode,a=t.getContainer,s=t.$props,c=s.prefixCls,u=s.destroyPopupOnHide,d=s.popupClassName,h=s.action,f=s.popupAnimation,p=s.popupTransitionName,m=s.popupStyle,v=s.mask,g=s.maskAnimation,y=s.maskTransitionName,_=s.zIndex,b=s.stretch,M=s.alignPoint,A=this.$data,w=A.sPopupVisible,x=A.point,k=this.getPopupAlign(),L={props:{prefixCls:c,destroyPopupOnHide:u,visible:w,point:M&&x,action:h,align:k,animation:f,getClassNameFromAlign:r,stretch:b,getRootDomNode:o,mask:v,zIndex:_,transitionName:p,maskAnimation:g,maskTransitionName:y,getContainer:a,popupClassName:d,popupStyle:m},on:(0,i.A)({align:(0,l.WM)(this).popupAlign||rt},n),directives:[{name:"ant-ref",value:this.savePopup}]};return e(Qe,L,[(0,l.nu)(t,"popup")])},getContainer:function(){var e=this.$props,t=this.dialogContext,n=document.createElement("div");n.style.position="absolute",n.style.top="0",n.style.left="0",n.style.width="100%";var r=e.getPopupContainer?e.getPopupContainer(this.$el,t):e.getDocument().body;return r.appendChild(n),this.popupContainer=n,n},setPopupVisible:function(e,t){var n=this.alignPoint,r=this.sPopupVisible;if(this.clearDelayTimer(),r!==e){(0,l.cK)(this,"popupVisible")||this.setState({sPopupVisible:e,prevPopupVisible:r});var i=(0,l.WM)(this);i.popupVisibleChange&&i.popupVisibleChange(e)}n&&t&&this.setPoint(t)},setPoint:function(e){var t=this.$props.alignPoint;t&&e&&this.setState({point:{pageX:e.pageX,pageY:e.pageY}})},delaySetPopupVisible:function(e,t,n){var r=this,i=1e3*t;if(this.clearDelayTimer(),i){var o=n?{pageX:n.pageX,pageY:n.pageY}:null;this.delayTimer=(0,u.z)(function(){r.setPopupVisible(e,o),r.clearDelayTimer()},i)}else this.setPopupVisible(e,n)},clearDelayTimer:function(){this.delayTimer&&((0,u.q)(this.delayTimer),this.delayTimer=null)},clearOutsideHandler:function(){this.clickOutsideHandler&&(this.clickOutsideHandler.remove(),this.clickOutsideHandler=null),this.contextmenuOutsideHandler1&&(this.contextmenuOutsideHandler1.remove(),this.contextmenuOutsideHandler1=null),this.contextmenuOutsideHandler2&&(this.contextmenuOutsideHandler2.remove(),this.contextmenuOutsideHandler2=null),this.touchOutsideHandler&&(this.touchOutsideHandler.remove(),this.touchOutsideHandler=null)},createTwoChains:function(e){var t=function(){},n=(0,l.WM)(this);return this.childOriginEvents[e]&&n[e]?this["fire"+e]:(t=this.childOriginEvents[e]||n[e]||t,t)},isClickToShow:function(){var e=this.$props,t=e.action,n=e.showAction;return-1!==t.indexOf("click")||-1!==n.indexOf("click")},isContextmenuToShow:function(){var e=this.$props,t=e.action,n=e.showAction;return-1!==t.indexOf("contextmenu")||-1!==n.indexOf("contextmenu")},isClickToHide:function(){var e=this.$props,t=e.action,n=e.hideAction;return-1!==t.indexOf("click")||-1!==n.indexOf("click")},isMouseEnterToShow:function(){var e=this.$props,t=e.action,n=e.showAction;return-1!==t.indexOf("hover")||-1!==n.indexOf("mouseenter")},isMouseLeaveToHide:function(){var e=this.$props,t=e.action,n=e.hideAction;return-1!==t.indexOf("hover")||-1!==n.indexOf("mouseleave")},isFocusToShow:function(){var e=this.$props,t=e.action,n=e.showAction;return-1!==t.indexOf("focus")||-1!==n.indexOf("focus")},isBlurToHide:function(){var e=this.$props,t=e.action,n=e.hideAction;return-1!==t.indexOf("focus")||-1!==n.indexOf("blur")},forcePopupAlign:function(){this.$data.sPopupVisible&&this._component&&this._component.$refs.alignInstance&&this._component.$refs.alignInstance.forceAlign()},fireEvents:function(e,t){this.childOriginEvents[e]&&this.childOriginEvents[e](t),this.__emit(e,t)},close:function(){this.setPopupVisible(!1)}},render:function(){var e=this,t=arguments[0],n=this.sPopupVisible,r=(0,l.Gk)(this.$slots["default"]),i=this.$props,o=i.forceRender,a=i.alignPoint;r.length>1&&(0,h.A)(!1,"Trigger $slots.default.length > 1, just support only one default",!0);var s=r[0];this.childOriginEvents=(0,l.i5)(s);var u={props:{},nativeOn:{},key:"trigger"};return this.isContextmenuToShow()?u.nativeOn.contextmenu=this.onContextmenu:u.nativeOn.contextmenu=this.createTwoChains("contextmenu"),this.isClickToHide()||this.isClickToShow()?(u.nativeOn.click=this.onClick,u.nativeOn.mousedown=this.onMousedown,u.nativeOn.touchstart=this.onTouchstart):(u.nativeOn.click=this.createTwoChains("click"),u.nativeOn.mousedown=this.createTwoChains("mousedown"),u.nativeOn.touchstart=this.createTwoChains("onTouchstart")),this.isMouseEnterToShow()?(u.nativeOn.mouseenter=this.onMouseenter,a&&(u.nativeOn.mousemove=this.onMouseMove)):u.nativeOn.mouseenter=this.createTwoChains("mouseenter"),this.isMouseLeaveToHide()?u.nativeOn.mouseleave=this.onMouseleave:u.nativeOn.mouseleave=this.createTwoChains("mouseleave"),this.isFocusToShow()||this.isBlurToHide()?(u.nativeOn.focus=this.onFocus,u.nativeOn.blur=this.onBlur):(u.nativeOn.focus=this.createTwoChains("focus"),u.nativeOn.blur=function(t){!t||t.relatedTarget&&(0,c.A)(t.target,t.relatedTarget)||e.createTwoChains("blur")(t)}),this.trigger=(0,Ie.Ob)(s,u),t(it,{attrs:{parent:this,visible:n,autoMount:!1,forceRender:o,getComponent:this.getComponent,getContainer:this.getContainer,children:function(t){var n=t.renderComponent;return e.renderComponent=n,e.trigger}}})}},lt=ct},82160:function(e,t,n){"use strict";n.d(t,{A:function(){return o}});var r=n(32223),i=n.n(r);function o(e,t,n,r){return i()(e,t,n,r)}},17948:function(e,t,n){"use strict";function r(e,t){var n=t;while(n){if(n===e)return!0;n=n.parentNode}return!1}n.d(t,{A:function(){return r}})},32173:function(e,t){"use strict";function n(){return n=Object.assign||function(e){for(var t=1;t=o)return e;switch(e){case"%s":return String(t[r++]);case"%d":return Number(t[r++]);case"%j":try{return JSON.stringify(t[r++])}catch(n){return"[Circular]"}default:return e}});return a}return i}function p(e){return"string"===e||"url"===e||"hex"===e||"email"===e||"date"===e||"pattern"===e}function m(e,t){return void 0===e||null===e||(!("array"!==t||!Array.isArray(e)||e.length)||!(!p(t)||"string"!==typeof e||e))}function v(e,t,n){var r=[],i=0,o=e.length;function a(e){r.push.apply(r,e),i++,i===o&&n(r)}e.forEach(function(e){t(e,a)})}function g(e,t,n){var r=0,i=e.length;function o(a){if(a&&a.length)n(a);else{var s=r;r+=1,s()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,url:new RegExp("^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$","i"),hex:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/i},L={integer:function(e){return L.number(e)&&parseInt(e,10)===e},float:function(e){return L.number(e)&&!L.integer(e)},array:function(e){return Array.isArray(e)},regexp:function(e){if(e instanceof RegExp)return!0;try{return!!new RegExp(e)}catch(t){return!1}},date:function(e){return"function"===typeof e.getTime&&"function"===typeof e.getMonth&&"function"===typeof e.getYear&&!isNaN(e.getTime())},number:function(e){return!isNaN(e)&&"number"===typeof e},object:function(e){return"object"===typeof e&&!L.array(e)},method:function(e){return"function"===typeof e},email:function(e){return"string"===typeof e&&!!e.match(k.email)&&e.length<255},url:function(e){return"string"===typeof e&&!!e.match(k.url)},hex:function(e){return"string"===typeof e&&!!e.match(k.hex)}};function C(e,t,n,r,i){if(e.required&&void 0===t)w(e,t,n,r,i);else{var o=["integer","float","array","regexp","object","method","email","number","date","url","hex"],a=e.type;o.indexOf(a)>-1?L[a](t)||r.push(f(i.messages.types[a],e.fullField,e.type)):a&&typeof t!==e.type&&r.push(f(i.messages.types[a],e.fullField,e.type))}}function S(e,t,n,r,i){var o="number"===typeof e.len,a="number"===typeof e.min,s="number"===typeof e.max,c=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,l=t,u=null,d="number"===typeof t,h="string"===typeof t,p=Array.isArray(t);if(d?u="number":h?u="string":p&&(u="array"),!u)return!1;p&&(l=t.length),h&&(l=t.replace(c,"_").length),o?l!==e.len&&r.push(f(i.messages[u].len,e.fullField,e.len)):a&&!s&&le.max?r.push(f(i.messages[u].max,e.fullField,e.max)):a&&s&&(le.max)&&r.push(f(i.messages[u].range,e.fullField,e.min,e.max))}var z="enum";function T(e,t,n,r,i){e[z]=Array.isArray(e[z])?e[z]:[],-1===e[z].indexOf(t)&&r.push(f(i.messages[z],e.fullField,e[z].join(", ")))}function O(e,t,n,r,i){if(e.pattern)if(e.pattern instanceof RegExp)e.pattern.lastIndex=0,e.pattern.test(t)||r.push(f(i.messages.pattern.mismatch,e.fullField,t,e.pattern));else if("string"===typeof e.pattern){var o=new RegExp(e.pattern);o.test(t)||r.push(f(i.messages.pattern.mismatch,e.fullField,t,e.pattern))}}var H={required:w,whitespace:x,type:C,range:S,enum:T,pattern:O};function D(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t,"string")&&!e.required)return n();H.required(e,t,r,o,i,"string"),m(t,"string")||(H.type(e,t,r,o,i),H.range(e,t,r,o,i),H.pattern(e,t,r,o,i),!0===e.whitespace&&H.whitespace(e,t,r,o,i))}n(o)}function Y(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();H.required(e,t,r,o,i),void 0!==t&&H.type(e,t,r,o,i)}n(o)}function V(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(""===t&&(t=void 0),m(t)&&!e.required)return n();H.required(e,t,r,o,i),void 0!==t&&(H.type(e,t,r,o,i),H.range(e,t,r,o,i))}n(o)}function P(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();H.required(e,t,r,o,i),void 0!==t&&H.type(e,t,r,o,i)}n(o)}function E(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();H.required(e,t,r,o,i),m(t)||H.type(e,t,r,o,i)}n(o)}function j(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();H.required(e,t,r,o,i),void 0!==t&&(H.type(e,t,r,o,i),H.range(e,t,r,o,i))}n(o)}function F(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();H.required(e,t,r,o,i),void 0!==t&&(H.type(e,t,r,o,i),H.range(e,t,r,o,i))}n(o)}function I(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if((void 0===t||null===t)&&!e.required)return n();H.required(e,t,r,o,i,"array"),void 0!==t&&null!==t&&(H.type(e,t,r,o,i),H.range(e,t,r,o,i))}n(o)}function $(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();H.required(e,t,r,o,i),void 0!==t&&H.type(e,t,r,o,i)}n(o)}var R="enum";function N(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();H.required(e,t,r,o,i),void 0!==t&&H[R](e,t,r,o,i)}n(o)}function W(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t,"string")&&!e.required)return n();H.required(e,t,r,o,i),m(t,"string")||H.pattern(e,t,r,o,i)}n(o)}function B(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t,"date")&&!e.required)return n();var s;if(H.required(e,t,r,o,i),!m(t,"date"))s=t instanceof Date?t:new Date(t),H.type(e,s,r,o,i),s&&H.range(e,s.getTime(),r,o,i)}n(o)}function K(e,t,n,r,i){var o=[],a=Array.isArray(t)?"array":typeof t;H.required(e,t,r,o,i,a),n(o)}function U(e,t,n,r,i){var o=e.type,a=[],s=e.required||!e.required&&r.hasOwnProperty(e.field);if(s){if(m(t,o)&&!e.required)return n();H.required(e,t,r,a,i,o),m(t,o)||H.type(e,t,r,a,i)}n(a)}function q(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();H.required(e,t,r,o,i)}n(o)}var G={string:D,method:Y,number:V,boolean:P,regexp:E,integer:j,float:F,array:I,object:$,enum:N,pattern:W,date:B,url:U,hex:U,email:U,required:K,any:q};function J(){return{default:"Validation error on field %s",required:"%s is required",enum:"%s must be one of %s",whitespace:"%s cannot be empty",date:{format:"%s date %s is invalid for format %s",parse:"%s date could not be parsed, %s is invalid ",invalid:"%s date %s is invalid"},types:{string:"%s is not a %s",method:"%s is not a %s (function)",array:"%s is not an %s",object:"%s is not an %s",number:"%s is not a %s",date:"%s is not a %s",boolean:"%s is not a %s",integer:"%s is not an %s",float:"%s is not a %s",regexp:"%s is not a valid %s",email:"%s is not a valid %s",url:"%s is not a valid %s",hex:"%s is not a valid %s"},string:{len:"%s must be exactly %s characters",min:"%s must be at least %s characters",max:"%s cannot be longer than %s characters",range:"%s must be between %s and %s characters"},number:{len:"%s must equal %s",min:"%s cannot be less than %s",max:"%s cannot be greater than %s",range:"%s must be between %s and %s"},array:{len:"%s must be exactly %s in length",min:"%s cannot be less than %s in length",max:"%s cannot be greater than %s in length",range:"%s must be between %s and %s in length"},pattern:{mismatch:"%s value %s does not match pattern %s"},clone:function(){var e=JSON.parse(JSON.stringify(this));return e.clone=this.clone,e}}}var X=J();function Z(e){this.rules=null,this._messages=X,this.define(e)}Z.prototype={messages:function(e){return e&&(this._messages=A(J(),e)),this._messages},define:function(e){if(!e)throw new Error("Cannot configure a schema with no rules");if("object"!==typeof e||Array.isArray(e))throw new Error("Rules must be an object");var t,n;for(t in this.rules={},e)e.hasOwnProperty(t)&&(n=e[t],this.rules[t]=Array.isArray(n)?n:[n])},validate:function(e,t,r){var i=this;void 0===t&&(t={}),void 0===r&&(r=function(){});var o,a,s=e,c=t,l=r;if("function"===typeof c&&(l=c,c={}),!this.rules||0===Object.keys(this.rules).length)return l&&l(),Promise.resolve();function u(e){var t,n=[],r={};function i(e){var t;Array.isArray(e)?n=(t=n).concat.apply(t,e):n.push(e)}for(t=0;t=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};r.forEach(["delete","get","head"],function(e){d.headers[e]={}}),r.forEach(["post","put","patch"],function(e){d.headers[e]=r.merge(s)}),e.exports=d},94896:function(e){"use strict";e.exports={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1}},49641:function(e){e.exports={version:"0.26.1"}},69012:function(e){"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r=0)return;a[t]="set-cookie"===t?(a[t]?a[t]:[]).concat([n]):a[t]?a[t]+", "+n:n}}),a):a}},17980:function(e){"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}},34841:function(e,t,n){"use strict";var r=n(49641).version,i={};["object","boolean","number","function","string","symbol"].forEach(function(e,t){i[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}});var o={};function a(e,t,n){if("object"!==typeof e)throw new TypeError("options must be an object");var r=Object.keys(e),i=r.length;while(i-- >0){var o=r[i],a=t[o];if(a){var s=e[o],c=void 0===s||a(s,o,e);if(!0!==c)throw new TypeError("option "+o+" must be "+c)}else if(!0!==n)throw Error("Unknown option "+o)}}i.transitional=function(e,t,n){function i(e,t){return"[Axios v"+r+"] Transitional option '"+e+"'"+t+(n?". "+n:"")}return function(n,r,a){if(!1===e)throw new Error(i(r," has been removed"+(t?" in "+t:"")));return t&&!o[r]&&(o[r]=!0,console.warn(i(r," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,r,a)}},e.exports={assertOptions:a,validators:i}},9516:function(e,t,n){"use strict";var r=n(69012),i=Object.prototype.toString;function o(e){return Array.isArray(e)}function a(e){return"undefined"===typeof e}function s(e){return null!==e&&!a(e)&&null!==e.constructor&&!a(e.constructor)&&"function"===typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}function c(e){return"[object ArrayBuffer]"===i.call(e)}function l(e){return"[object FormData]"===i.call(e)}function u(e){var t;return t="undefined"!==typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&c(e.buffer),t}function d(e){return"string"===typeof e}function h(e){return"number"===typeof e}function f(e){return null!==e&&"object"===typeof e}function p(e){if("[object Object]"!==i.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function m(e){return"[object Date]"===i.call(e)}function v(e){return"[object File]"===i.call(e)}function g(e){return"[object Blob]"===i.call(e)}function y(e){return"[object Function]"===i.call(e)}function _(e){return f(e)&&y(e.pipe)}function b(e){return"[object URLSearchParams]"===i.call(e)}function M(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}function A(){return("undefined"===typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!==typeof window&&"undefined"!==typeof document)}function w(e,t){if(null!==e&&"undefined"!==typeof e)if("object"!==typeof e&&(e=[e]),o(e))for(var n=0,r=e.length;n=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}},52040:function(e,t,n){"use strict";var r=n(3053),i=s(r),o=n(4123),a=s(o);function s(e){return e&&e.__esModule?e:{default:e}}t.A=function(){function e(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var s,c=(0,a.default)(e);!(r=(s=c.next()).done);r=!0)if(n.push(s.value),t&&n.length===t)break}catch(l){i=!0,o=l}finally{try{!r&&c["return"]&&c["return"]()}finally{if(i)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if((0,i.default)(Object(t)))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()},32779:function(e,t,n){"use strict";var r=n(9780),i=o(r);function o(e){return e&&e.__esModule?e:{default:e}}t.A=function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tu)if(s=c[u++],s!=s)return!0}else for(;l>u;u++)if((e||u in c)&&c[u]===n)return e||u||0;return!e&&-1}}},13383:function(e,t,n){var r=n(64194),i=n(15413)("toStringTag"),o="Arguments"==r(function(){return arguments}()),a=function(e,t){try{return e[t]}catch(n){}};e.exports=function(e){var t,n,s;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=a(t=Object(e),i))?n:o?r(t):"Object"==(s=r(t))&&"function"==typeof t.callee?"Arguments":s}},64194:function(e){var t={}.toString;e.exports=function(e){return t.call(e).slice(8,-1)}},6791:function(e){var t=e.exports={version:"2.6.12"};"number"==typeof __e&&(__e=t)},64284:function(e,t,n){"use strict";var r=n(21672),i=n(15495);e.exports=function(e,t,n){t in e?r.f(e,t,i(0,n)):e[t]=n}},33971:function(e,t,n){var r=n(73934);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,i){return e.call(t,n,r,i)}}return function(){return e.apply(t,arguments)}}},54947:function(e){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},75872:function(e,t,n){e.exports=!n(82451)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},50559:function(e,t,n){var r=n(90326),i=n(56903).document,o=r(i)&&r(i.createElement);e.exports=function(e){return o?i.createElement(e):{}}},22499:function(e){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},76358:function(e,t,n){var r=n(64796),i=n(14259),o=n(98936);e.exports=function(e){var t=r(e),n=i.f;if(n){var a,s=n(e),c=o.f,l=0;while(s.length>l)c.call(e,a=s[l++])&&t.push(a)}return t}},19786:function(e,t,n){var r=n(56903),i=n(6791),o=n(33971),a=n(14632),s=n(43066),c="prototype",l=function(e,t,n){var u,d,h,f=e&l.F,p=e&l.G,m=e&l.S,v=e&l.P,g=e&l.B,y=e&l.W,_=p?i:i[t]||(i[t]={}),b=_[c],M=p?r:m?r[t]:(r[t]||{})[c];for(u in p&&(n=t),n)d=!f&&M&&void 0!==M[u],d&&s(_,u)||(h=d?M[u]:n[u],_[u]=p&&"function"!=typeof M[u]?n[u]:g&&d?o(h,r):y&&M[u]==h?function(e){var t=function(t,n,r){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n)}return new e(t,n,r)}return e.apply(this,arguments)};return t[c]=e[c],t}(h):v&&"function"==typeof h?o(Function.call,h):h,v&&((_.virtual||(_.virtual={}))[u]=h,e&l.R&&b&&!b[u]&&a(b,u,h)))};l.F=1,l.G=2,l.S=4,l.P=8,l.B=16,l.W=32,l.U=64,l.R=128,e.exports=l},82451:function(e){e.exports=function(e){try{return!!e()}catch(t){return!0}}},56903:function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)},43066:function(e){var t={}.hasOwnProperty;e.exports=function(e,n){return t.call(e,n)}},14632:function(e,t,n){var r=n(21672),i=n(15495);e.exports=n(75872)?function(e,t,n){return r.f(e,t,i(1,n))}:function(e,t,n){return e[t]=n,e}},7745:function(e,t,n){var r=n(56903).document;e.exports=r&&r.documentElement},14913:function(e,t,n){e.exports=!n(75872)&&!n(82451)(function(){return 7!=Object.defineProperty(n(50559)("div"),"a",{get:function(){return 7}}).a})},63278:function(e,t,n){var r=n(64194);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},6471:function(e,t,n){var r=n(52833),i=n(15413)("iterator"),o=Array.prototype;e.exports=function(e){return void 0!==e&&(r.Array===e||o[i]===e)}},1084:function(e,t,n){var r=n(64194);e.exports=Array.isArray||function(e){return"Array"==r(e)}},90326:function(e){e.exports=function(e){return"object"===typeof e?null!==e:"function"===typeof e}},275:function(e,t,n){var r=n(90531);e.exports=function(e,t,n,i){try{return i?t(r(n)[0],n[1]):t(n)}catch(a){var o=e["return"];throw void 0!==o&&r(o.call(e)),a}}},81199:function(e,t,n){"use strict";var r=n(67780),i=n(15495),o=n(1123),a={};n(14632)(a,n(15413)("iterator"),function(){return this}),e.exports=function(e,t,n){e.prototype=r(a,{next:i(1,n)}),o(e,t+" Iterator")}},52500:function(e,t,n){"use strict";var r=n(98849),i=n(19786),o=n(83070),a=n(14632),s=n(52833),c=n(81199),l=n(1123),u=n(66870),d=n(15413)("iterator"),h=!([].keys&&"next"in[].keys()),f="@@iterator",p="keys",m="values",v=function(){return this};e.exports=function(e,t,n,g,y,_,b){c(n,t,g);var M,A,w,x=function(e){if(!h&&e in S)return S[e];switch(e){case p:return function(){return new n(this,e)};case m:return function(){return new n(this,e)}}return function(){return new n(this,e)}},k=t+" Iterator",L=y==m,C=!1,S=e.prototype,z=S[d]||S[f]||y&&S[y],T=z||x(y),O=y?L?x("entries"):T:void 0,H="Array"==t&&S.entries||z;if(H&&(w=u(H.call(new e)),w!==Object.prototype&&w.next&&(l(w,k,!0),r||"function"==typeof w[d]||a(w,d,v))),L&&z&&z.name!==m&&(C=!0,T=function(){return z.call(this)}),r&&!b||!h&&!C&&S[d]||a(S,d,T),s[t]=T,s[k]=v,y)if(M={values:L?T:x(m),keys:_?T:x(p),entries:O},b)for(A in M)A in S||o(S,A,M[A]);else i(i.P+i.F*(h||C),t,M);return M}},26928:function(e,t,n){var r=n(15413)("iterator"),i=!1;try{var o=[7][r]();o["return"]=function(){i=!0},Array.from(o,function(){throw 2})}catch(a){}e.exports=function(e,t){if(!t&&!i)return!1;var n=!1;try{var o=[7],s=o[r]();s.next=function(){return{done:n=!0}},o[r]=function(){return s},e(o)}catch(a){}return n}},35945:function(e){e.exports=function(e,t){return{value:t,done:!!e}}},52833:function(e){e.exports={}},98849:function(e){e.exports=!0},83281:function(e,t,n){var r=n(93108)("meta"),i=n(90326),o=n(43066),a=n(21672).f,s=0,c=Object.isExtensible||function(){return!0},l=!n(82451)(function(){return c(Object.preventExtensions({}))}),u=function(e){a(e,r,{value:{i:"O"+ ++s,w:{}}})},d=function(e,t){if(!i(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!o(e,r)){if(!c(e))return"F";if(!t)return"E";u(e)}return e[r].i},h=function(e,t){if(!o(e,r)){if(!c(e))return!0;if(!t)return!1;u(e)}return e[r].w},f=function(e){return l&&p.NEED&&c(e)&&!o(e,r)&&u(e),e},p=e.exports={KEY:r,NEED:!1,fastKey:d,getWeak:h,onFreeze:f}},99369:function(e,t,n){"use strict";var r=n(75872),i=n(64796),o=n(14259),a=n(98936),s=n(64873),c=n(63278),l=Object.assign;e.exports=!l||n(82451)(function(){var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach(function(e){t[e]=e}),7!=l({},e)[n]||Object.keys(l({},t)).join("")!=r})?function(e,t){var n=s(e),l=arguments.length,u=1,d=o.f,h=a.f;while(l>u){var f,p=c(arguments[u++]),m=d?i(p).concat(d(p)):i(p),v=m.length,g=0;while(v>g)f=m[g++],r&&!h.call(p,f)||(n[f]=p[f])}return n}:l},67780:function(e,t,n){var r=n(90531),i=n(6935),o=n(22499),a=n(36211)("IE_PROTO"),s=function(){},c="prototype",l=function(){var e,t=n(50559)("iframe"),r=o.length,i="<",a=">";t.style.display="none",n(7745).appendChild(t),t.src="javascript:",e=t.contentWindow.document,e.open(),e.write(i+"script"+a+"document.F=Object"+i+"/script"+a),e.close(),l=e.F;while(r--)delete l[c][o[r]];return l()};e.exports=Object.create||function(e,t){var n;return null!==e?(s[c]=r(e),n=new s,s[c]=null,n[a]=e):n=l(),void 0===t?n:i(n,t)}},21672:function(e,t,n){var r=n(90531),i=n(14913),o=n(78381),a=Object.defineProperty;t.f=n(75872)?Object.defineProperty:function(e,t,n){if(r(e),t=o(t,!0),r(n),i)try{return a(e,t,n)}catch(s){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},6935:function(e,t,n){var r=n(21672),i=n(90531),o=n(64796);e.exports=n(75872)?Object.defineProperties:function(e,t){i(e);var n,a=o(t),s=a.length,c=0;while(s>c)r.f(e,n=a[c++],t[n]);return e}},22682:function(e,t,n){var r=n(98936),i=n(15495),o=n(69204),a=n(78381),s=n(43066),c=n(14913),l=Object.getOwnPropertyDescriptor;t.f=n(75872)?l:function(e,t){if(e=o(e),t=a(t,!0),c)try{return l(e,t)}catch(n){}if(s(e,t))return i(!r.f.call(e,t),e[t])}},37106:function(e,t,n){var r=n(69204),i=n(79032).f,o={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(e){try{return i(e)}catch(t){return a.slice()}};e.exports.f=function(e){return a&&"[object Window]"==o.call(e)?s(e):i(r(e))}},79032:function(e,t,n){var r=n(59480),i=n(22499).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return r(e,i)}},14259:function(e,t){t.f=Object.getOwnPropertySymbols},66870:function(e,t,n){var r=n(43066),i=n(64873),o=n(36211)("IE_PROTO"),a=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=i(e),r(e,o)?e[o]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?a:null}},59480:function(e,t,n){var r=n(43066),i=n(69204),o=n(73901)(!1),a=n(36211)("IE_PROTO");e.exports=function(e,t){var n,s=i(e),c=0,l=[];for(n in s)n!=a&&r(s,n)&&l.push(n);while(t.length>c)r(s,n=t[c++])&&(~o(l,n)||l.push(n));return l}},64796:function(e,t,n){var r=n(59480),i=n(22499);e.exports=Object.keys||function(e){return r(e,i)}},98936:function(e,t){t.f={}.propertyIsEnumerable},15495:function(e){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},83070:function(e,t,n){e.exports=n(14632)},1123:function(e,t,n){var r=n(21672).f,i=n(43066),o=n(15413)("toStringTag");e.exports=function(e,t,n){e&&!i(e=n?e:e.prototype,o)&&r(e,o,{configurable:!0,value:t})}},36211:function(e,t,n){var r=n(7421)("keys"),i=n(93108);e.exports=function(e){return r[e]||(r[e]=i(e))}},7421:function(e,t,n){var r=n(6791),i=n(56903),o="__core-js_shared__",a=i[o]||(i[o]={});(e.exports=function(e,t){return a[e]||(a[e]=void 0!==t?t:{})})("versions",[]).push({version:r.version,mode:n(98849)?"pure":"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})},29491:function(e,t,n){var r=n(43570),i=n(54947);e.exports=function(e){return function(t,n){var o,a,s=String(i(t)),c=r(n),l=s.length;return c<0||c>=l?e?"":void 0:(o=s.charCodeAt(c),o<55296||o>56319||c+1===l||(a=s.charCodeAt(c+1))<56320||a>57343?e?s.charAt(c):o:e?s.slice(c,c+2):a-56320+(o-55296<<10)+65536)}}},8830:function(e,t,n){var r=n(43570),i=Math.max,o=Math.min;e.exports=function(e,t){return e=r(e),e<0?i(e+t,0):o(e,t)}},43570:function(e){var t=Math.ceil,n=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?n:t)(e)}},69204:function(e,t,n){var r=n(63278),i=n(54947);e.exports=function(e){return r(i(e))}},9250:function(e,t,n){var r=n(43570),i=Math.min;e.exports=function(e){return e>0?i(r(e),9007199254740991):0}},64873:function(e,t,n){var r=n(54947);e.exports=function(e){return Object(r(e))}},78381:function(e,t,n){var r=n(90326);e.exports=function(e,t){if(!r(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!r(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")}},93108:function(e){var t=0,n=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++t+n).toString(36))}},62613:function(e,t,n){var r=n(56903),i=n(6791),o=n(98849),a=n(1275),s=n(21672).f;e.exports=function(e){var t=i.Symbol||(i.Symbol=o?{}:r.Symbol||{});"_"==e.charAt(0)||e in t||s(t,e,{value:a.f(e)})}},1275:function(e,t,n){t.f=n(15413)},15413:function(e,t,n){var r=n(7421)("wks"),i=n(93108),o=n(56903).Symbol,a="function"==typeof o,s=e.exports=function(e){return r[e]||(r[e]=a&&o[e]||(a?o:i)("Symbol."+e))};s.store=r},18573:function(e,t,n){var r=n(13383),i=n(15413)("iterator"),o=n(52833);e.exports=n(6791).getIteratorMethod=function(e){if(void 0!=e)return e[i]||e["@@iterator"]||o[r(e)]}},23779:function(e,t,n){var r=n(90531),i=n(18573);e.exports=n(6791).getIterator=function(e){var t=i(e);if("function"!=typeof t)throw TypeError(e+" is not iterable!");return r(t.call(e))}},4693:function(e,t,n){var r=n(13383),i=n(15413)("iterator"),o=n(52833);e.exports=n(6791).isIterable=function(e){var t=Object(e);return void 0!==t[i]||"@@iterator"in t||o.hasOwnProperty(r(t))}},32160:function(e,t,n){"use strict";var r=n(33971),i=n(19786),o=n(64873),a=n(275),s=n(6471),c=n(9250),l=n(64284),u=n(18573);i(i.S+i.F*!n(26928)(function(e){Array.from(e)}),"Array",{from:function(e){var t,n,i,d,h=o(e),f="function"==typeof this?this:Array,p=arguments.length,m=p>1?arguments[1]:void 0,v=void 0!==m,g=0,y=u(h);if(v&&(m=r(m,p>2?arguments[2]:void 0,2)),void 0==y||f==Array&&s(y))for(t=c(h.length),n=new f(t);t>g;g++)l(n,g,v?m(h[g],g):h[g]);else for(d=y.call(h),n=new f;!(i=d.next()).done;g++)l(n,g,v?a(d,m,[i.value,g],!0):i.value);return n.length=g,n}})},45270:function(e,t,n){"use strict";var r=n(64233),i=n(35945),o=n(52833),a=n(69204);e.exports=n(52500)(Array,"Array",function(e,t){this._t=a(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,i(1)):i(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])},"values"),o.Arguments=o.Array,r("keys"),r("values"),r("entries")},79115:function(e,t,n){var r=n(19786);r(r.S+r.F,"Object",{assign:n(99369)})},82919:function(e,t,n){var r=n(19786);r(r.S+r.F*!n(75872),"Object",{defineProperty:n(21672).f})},44345:function(){},78750:function(e,t,n){"use strict";var r=n(29491)(!0);n(52500)(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=r(t,n),this._i+=e.length,{value:e,done:!1})})},28957:function(e,t,n){"use strict";var r=n(56903),i=n(43066),o=n(75872),a=n(19786),s=n(83070),c=n(83281).KEY,l=n(82451),u=n(7421),d=n(1123),h=n(93108),f=n(15413),p=n(1275),m=n(62613),v=n(76358),g=n(1084),y=n(90531),_=n(90326),b=n(64873),M=n(69204),A=n(78381),w=n(15495),x=n(67780),k=n(37106),L=n(22682),C=n(14259),S=n(21672),z=n(64796),T=L.f,O=S.f,H=k.f,D=r.Symbol,Y=r.JSON,V=Y&&Y.stringify,P="prototype",E=f("_hidden"),j=f("toPrimitive"),F={}.propertyIsEnumerable,I=u("symbol-registry"),$=u("symbols"),R=u("op-symbols"),N=Object[P],W="function"==typeof D&&!!C.f,B=r.QObject,K=!B||!B[P]||!B[P].findChild,U=o&&l(function(){return 7!=x(O({},"a",{get:function(){return O(this,"a",{value:7}).a}})).a})?function(e,t,n){var r=T(N,t);r&&delete N[t],O(e,t,n),r&&e!==N&&O(N,t,r)}:O,q=function(e){var t=$[e]=x(D[P]);return t._k=e,t},G=W&&"symbol"==typeof D.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof D},J=function(e,t,n){return e===N&&J(R,t,n),y(e),t=A(t,!0),y(n),i($,t)?(n.enumerable?(i(e,E)&&e[E][t]&&(e[E][t]=!1),n=x(n,{enumerable:w(0,!1)})):(i(e,E)||O(e,E,w(1,{})),e[E][t]=!0),U(e,t,n)):O(e,t,n)},X=function(e,t){y(e);var n,r=v(t=M(t)),i=0,o=r.length;while(o>i)J(e,n=r[i++],t[n]);return e},Z=function(e,t){return void 0===t?x(e):X(x(e),t)},Q=function(e){var t=F.call(this,e=A(e,!0));return!(this===N&&i($,e)&&!i(R,e))&&(!(t||!i(this,e)||!i($,e)||i(this,E)&&this[E][e])||t)},ee=function(e,t){if(e=M(e),t=A(t,!0),e!==N||!i($,t)||i(R,t)){var n=T(e,t);return!n||!i($,t)||i(e,E)&&e[E][t]||(n.enumerable=!0),n}},te=function(e){var t,n=H(M(e)),r=[],o=0;while(n.length>o)i($,t=n[o++])||t==E||t==c||r.push(t);return r},ne=function(e){var t,n=e===N,r=H(n?R:M(e)),o=[],a=0;while(r.length>a)!i($,t=r[a++])||n&&!i(N,t)||o.push($[t]);return o};W||(D=function(){if(this instanceof D)throw TypeError("Symbol is not a constructor!");var e=h(arguments.length>0?arguments[0]:void 0),t=function(n){this===N&&t.call(R,n),i(this,E)&&i(this[E],e)&&(this[E][e]=!1),U(this,e,w(1,n))};return o&&K&&U(N,e,{configurable:!0,set:t}),q(e)},s(D[P],"toString",function(){return this._k}),L.f=ee,S.f=J,n(79032).f=k.f=te,n(98936).f=Q,C.f=ne,o&&!n(98849)&&s(N,"propertyIsEnumerable",Q,!0),p.f=function(e){return q(f(e))}),a(a.G+a.W+a.F*!W,{Symbol:D});for(var re="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),ie=0;re.length>ie;)f(re[ie++]);for(var oe=z(f.store),ae=0;oe.length>ae;)m(oe[ae++]);a(a.S+a.F*!W,"Symbol",{for:function(e){return i(I,e+="")?I[e]:I[e]=D(e)},keyFor:function(e){if(!G(e))throw TypeError(e+" is not a symbol!");for(var t in I)if(I[t]===e)return t},useSetter:function(){K=!0},useSimple:function(){K=!1}}),a(a.S+a.F*!W,"Object",{create:Z,defineProperty:J,defineProperties:X,getOwnPropertyDescriptor:ee,getOwnPropertyNames:te,getOwnPropertySymbols:ne});var se=l(function(){C.f(1)});a(a.S+a.F*se,"Object",{getOwnPropertySymbols:function(e){return C.f(b(e))}}),Y&&a(a.S+a.F*(!W||l(function(){var e=D();return"[null]"!=V([e])||"{}"!=V({a:e})||"{}"!=V(Object(e))})),"JSON",{stringify:function(e){var t,n,r=[e],i=1;while(arguments.length>i)r.push(arguments[i++]);if(n=t=r[1],(_(t)||void 0!==e)&&!G(e))return g(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!G(t))return t}),r[1]=t,V.apply(Y,r)}}),D[P][j]||n(14632)(D[P],j,D[P].valueOf),d(D,"Symbol"),d(Math,"Math",!0),d(r.JSON,"JSON",!0)},32469:function(e,t,n){n(62613)("asyncIterator")},75529:function(e,t,n){n(62613)("observable")},96653:function(e,t,n){n(45270);for(var r=n(56903),i=n(14632),o=n(52833),a=n(15413)("toStringTag"),s="CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList".split(","),c=0;c0?!0===o?E.scrollTop(t,p.top+m.top):!1===o?E.scrollTop(t,p.top+v.top):m.top<0?E.scrollTop(t,p.top+m.top):E.scrollTop(t,p.top+v.top):i||(o=void 0===o||!!o,o?E.scrollTop(t,p.top+m.top):E.scrollTop(t,p.top+v.top)),r&&(m.left<0||v.left>0?!0===a?E.scrollLeft(t,p.left+m.left):!1===a?E.scrollLeft(t,p.left+v.left):m.left<0?E.scrollLeft(t,p.left+m.left):E.scrollLeft(t,p.left+v.left):i||(a=void 0===a||!!a,a?E.scrollLeft(t,p.left+m.left):E.scrollLeft(t,p.left+v.left)))}t.A=j},71040:function(e,t,n){var r=n(88404),i=n(22524).each;function o(e,t){this.query=e,this.isUnconditional=t,this.handlers=[],this.mql=window.matchMedia(e);var n=this;this.listener=function(e){n.mql=e.currentTarget||e,n.assess()},this.mql.addListener(this.listener)}o.prototype={constuctor:o,addHandler:function(e){var t=new r(e);this.handlers.push(t),this.matches()&&t.on()},removeHandler:function(e){var t=this.handlers;i(t,function(n,r){if(n.equals(e))return n.destroy(),!t.splice(r,1)})},matches:function(){return this.mql.matches||this.isUnconditional},clear:function(){i(this.handlers,function(e){e.destroy()}),this.mql.removeListener(this.listener),this.handlers.length=0},assess:function(){var e=this.matches()?"on":"off";i(this.handlers,function(t){t[e]()})}},e.exports=o},51098:function(e,t,n){var r=n(71040),i=n(22524),o=i.each,a=i.isFunction,s=i.isArray;function c(){if(!window.matchMedia)throw new Error("matchMedia not present, legacy browsers require a polyfill");this.queries={},this.browserIsIncapable=!window.matchMedia("only all").matches}c.prototype={constructor:c,register:function(e,t,n){var i=this.queries,c=n&&this.browserIsIncapable;return i[e]||(i[e]=new r(e,c)),a(t)&&(t={match:t}),s(t)||(t=[t]),o(t,function(t){a(t)&&(t={match:t}),i[e].addHandler(t)}),this},unregister:function(e,t){var n=this.queries[e];return n&&(t?n.removeHandler(t):(n.clear(),delete this.queries[e])),this}},e.exports=c},88404:function(e){function t(e){this.options=e,!e.deferSetup&&this.setup()}t.prototype={constructor:t,setup:function(){this.options.setup&&this.options.setup(),this.initialised=!0},on:function(){!this.initialised&&this.setup(),this.options.match&&this.options.match()},off:function(){this.options.unmatch&&this.options.unmatch()},destroy:function(){this.options.destroy?this.options.destroy():this.off()},equals:function(e){return this.options===e||this.options.match===e}},e.exports=t},22524:function(e){function t(e,t){var n,r=0,i=e.length;for(r;r1&&-1!==r.indexOf("Macintosh")&&-1!==r.indexOf("Safari")&&(i=!0),i}},55580:function(e,t,n){var r=n(56110),i=n(9325),o=r(i,"DataView");e.exports=o},21549:function(e,t,n){var r=n(22032),i=n(63862),o=n(66721),a=n(12749),s=n(35749);function c(e){var t=-1,n=null==e?0:e.length;this.clear();while(++t-1}e.exports=i},29905:function(e){function t(e,t,n){var r=-1,i=null==e?0:e.length;while(++r0&&n(u)?t>1?o(u,t-1,n,a,s):r(s,u):a||(s[s.length]=u)}return s}e.exports=o},86649:function(e,t,n){var r=n(83221),i=r();e.exports=i},30641:function(e,t,n){var r=n(86649),i=n(95950);function o(e,t){return e&&r(e,t,i)}e.exports=o},47422:function(e,t,n){var r=n(31769),i=n(77797);function o(e,t){t=r(t,e);var n=0,o=t.length;while(null!=e&&nt)return i;do{r%2&&(i+=e),r=n(r/2),r&&(e+=e)}while(r);return i}e.exports=r},69302:function(e,t,n){var r=n(83488),i=n(56757),o=n(32865);function a(e,t){return o(i(e,t,r),e+"")}e.exports=a},73170:function(e,t,n){var r=n(16547),i=n(31769),o=n(30361),a=n(23805),s=n(77797);function c(e,t,n,c){if(!a(e))return e;t=i(t,e);var l=-1,u=t.length,d=u-1,h=e;while(null!=h&&++li?0:i+t),n=n>i?i:n,n<0&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0;var o=Array(i);while(++r=l){var v=t?null:s(e);if(v)return c(v);f=!1,d=a,m=new r}else m=t?[]:p;e:while(++u=i?e:r(e,t,n)}e.exports=i},49653:function(e,t,n){var r=n(37828);function i(e){var t=new e.constructor(e.byteLength);return new r(t).set(new r(e)),t}e.exports=i},93290:function(e,t,n){e=n.nmd(e);var r=n(9325),i=t&&!t.nodeType&&t,o=i&&e&&!e.nodeType&&e,a=o&&o.exports===i,s=a?r.Buffer:void 0,c=s?s.allocUnsafe:void 0;function l(e,t){if(t)return e.slice();var n=e.length,r=c?c(n):new e.constructor(n);return e.copy(r),r}e.exports=l},76169:function(e,t,n){var r=n(49653);function i(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}e.exports=i},73201:function(e){var t=/\w*$/;function n(e){var n=new e.constructor(e.source,t.exec(e));return n.lastIndex=e.lastIndex,n}e.exports=n},93736:function(e,t,n){var r=n(51873),i=r?r.prototype:void 0,o=i?i.valueOf:void 0;function a(e){return o?Object(o.call(e)):{}}e.exports=a},71961:function(e,t,n){var r=n(49653);function i(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}e.exports=i},23007:function(e){function t(e,t){var n=-1,r=e.length;t||(t=Array(r));while(++n1?n[o-1]:void 0,s=o>2?n[2]:void 0;a=e.length>3&&"function"==typeof a?(o--,a):void 0,s&&i(n[0],n[1],s)&&(a=o<3?void 0:a,o=1),t=Object(t);while(++r-1?s[c?t[l]:l]:void 0}}e.exports=a},57216:function(e,t,n){var r=n(84051),i=n(77556),o=n(28754),a=n(49698),s=n(81993),c=n(63912),l=Math.ceil;function u(e,t){t=void 0===t?" ":i(t);var n=t.length;if(n<2)return n?r(t,e):t;var u=r(t,l(e/s(t)));return a(t)?o(c(u),0,e).join(""):u.slice(0,e)}e.exports=u},44517:function(e,t,n){var r=n(76545),i=n(63950),o=n(84247),a=1/0,s=r&&1/o(new r([,-0]))[1]==a?function(e){return new r(e)}:i;e.exports=s},53138:function(e,t,n){var r=n(11331);function i(e){return r(e)?void 0:e}e.exports=i},93243:function(e,t,n){var r=n(56110),i=function(){try{var e=r(Object,"defineProperty");return e({},"",{}),e}catch(t){}}();e.exports=i},25911:function(e,t,n){var r=n(38859),i=n(91867),o=n(19219),a=1,s=2;function c(e,t,n,c,l,u){var d=n&a,h=e.length,f=t.length;if(h!=f&&!(d&&f>h))return!1;var p=u.get(e),m=u.get(t);if(p&&m)return p==t&&m==e;var v=-1,g=!0,y=n&s?new r:void 0;u.set(e,t),u.set(t,e);while(++v-1&&e%1==0&&e-1}e.exports=i},31175:function(e,t,n){var r=n(26025);function i(e,t){var n=this.__data__,i=r(n,e);return i<0?(++this.size,n.push([e,t])):n[i][1]=t,this}e.exports=i},63040:function(e,t,n){var r=n(21549),i=n(80079),o=n(68223);function a(){this.size=0,this.__data__={hash:new r,map:new(o||i),string:new r}}e.exports=a},17670:function(e,t,n){var r=n(12651);function i(e){var t=r(this,e)["delete"](e);return this.size-=t?1:0,t}e.exports=i},90289:function(e,t,n){var r=n(12651);function i(e){return r(this,e).get(e)}e.exports=i},4509:function(e,t,n){var r=n(12651);function i(e){return r(this,e).has(e)}e.exports=i},72949:function(e,t,n){var r=n(12651);function i(e,t){var n=r(this,e),i=n.size;return n.set(e,t),this.size+=n.size==i?0:1,this}e.exports=i},20317:function(e){function t(e){var t=-1,n=Array(e.size);return e.forEach(function(e,r){n[++t]=[r,e]}),n}e.exports=t},67197:function(e){function t(e,t){return function(n){return null!=n&&(n[e]===t&&(void 0!==t||e in Object(n)))}}e.exports=t},62224:function(e,t,n){var r=n(50104),i=500;function o(e){var t=r(e,function(e){return n.size===i&&n.clear(),e}),n=t.cache;return t}e.exports=o},81042:function(e,t,n){var r=n(56110),i=r(Object,"create");e.exports=i},3650:function(e,t,n){var r=n(74335),i=r(Object.keys,Object);e.exports=i},90181:function(e){function t(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}e.exports=t},86009:function(e,t,n){e=n.nmd(e);var r=n(34840),i=t&&!t.nodeType&&t,o=i&&e&&!e.nodeType&&e,a=o&&o.exports===i,s=a&&r.process,c=function(){try{var e=o&&o.require&&o.require("util").types;return e||s&&s.binding&&s.binding("util")}catch(t){}}();e.exports=c},59350:function(e){var t=Object.prototype,n=t.toString;function r(e){return n.call(e)}e.exports=r},74335:function(e){function t(e,t){return function(n){return e(t(n))}}e.exports=t},56757:function(e,t,n){var r=n(91033),i=Math.max;function o(e,t,n){return t=i(void 0===t?e.length-1:t,0),function(){var o=arguments,a=-1,s=i(o.length-t,0),c=Array(s);while(++a0){if(++i>=t)return arguments[0]}else i=0;return e.apply(void 0,arguments)}}e.exports=i},51420:function(e,t,n){var r=n(80079);function i(){this.__data__=new r,this.size=0}e.exports=i},90938:function(e){function t(e){var t=this.__data__,n=t["delete"](e);return this.size=t.size,n}e.exports=t},63605:function(e){function t(e){return this.__data__.get(e)}e.exports=t},29817:function(e){function t(e){return this.__data__.has(e)}e.exports=t},80945:function(e,t,n){var r=n(80079),i=n(68223),o=n(53661),a=200;function s(e,t){var n=this.__data__;if(n instanceof r){var s=n.__data__;if(!i||s.length=t||n<0||g&&r>=d}function w(){var e=i();if(A(e))return x(e);f=setTimeout(w,M(e))}function x(e){return f=void 0,y&&l?_(e):(l=u=void 0,h)}function k(){void 0!==f&&clearTimeout(f),m=0,l=p=u=f=void 0}function L(){return void 0===f?h:x(i())}function C(){var e=i(),n=A(e);if(l=arguments,u=this,p=e,n){if(void 0===f)return b(p);if(g)return clearTimeout(f),f=setTimeout(w,t),_(p)}return void 0===f&&(f=setTimeout(w,t)),h}return t=o(t)||0,r(n)&&(v=!!n.leading,g="maxWait"in n,d=g?s(o(n.maxWait)||0,t):d,y="trailing"in n?!!n.trailing:y),C.cancel=k,C.flush=L,C}e.exports=l},75288:function(e){function t(e,t){return e===t||e!==e&&t!==t}e.exports=t},7309:function(e,t,n){var r=n(62006),i=n(24713),o=r(i);e.exports=o},24713:function(e,t,n){var r=n(2523),i=n(15389),o=n(61489),a=Math.max;function s(e,t,n){var s=null==e?0:e.length;if(!s)return-1;var c=null==n?0:o(n);return c<0&&(c=a(s+c,0)),r(e,i(t,3),c)}e.exports=s},35970:function(e,t,n){var r=n(83120);function i(e){var t=null==e?0:e.length;return t?r(e,1):[]}e.exports=i},58156:function(e,t,n){var r=n(47422);function i(e,t,n){var i=null==e?void 0:r(e,t);return void 0===i?n:i}e.exports=i},61448:function(e,t,n){var r=n(20426),i=n(49326);function o(e,t){return null!=e&&i(e,t,r)}e.exports=o},80631:function(e,t,n){var r=n(28077),i=n(49326);function o(e,t){return null!=e&&i(e,t,r)}e.exports=o},83488:function(e){function t(e){return e}e.exports=t},72428:function(e,t,n){var r=n(27534),i=n(40346),o=Object.prototype,a=o.hasOwnProperty,s=o.propertyIsEnumerable,c=r(function(){return arguments}())?r:function(e){return i(e)&&a.call(e,"callee")&&!s.call(e,"callee")};e.exports=c},56449:function(e){var t=Array.isArray;e.exports=t},64894:function(e,t,n){var r=n(1882),i=n(30294);function o(e){return null!=e&&i(e.length)&&!r(e)}e.exports=o},83693:function(e,t,n){var r=n(64894),i=n(40346);function o(e){return i(e)&&r(e)}e.exports=o},3656:function(e,t,n){e=n.nmd(e);var r=n(9325),i=n(89935),o=t&&!t.nodeType&&t,a=o&&e&&!e.nodeType&&e,s=a&&a.exports===o,c=s?r.Buffer:void 0,l=c?c.isBuffer:void 0,u=l||i;e.exports=u},1882:function(e,t,n){var r=n(72552),i=n(23805),o="[object AsyncFunction]",a="[object Function]",s="[object GeneratorFunction]",c="[object Proxy]";function l(e){if(!i(e))return!1;var t=r(e);return t==a||t==s||t==o||t==c}e.exports=l},30294:function(e){var t=9007199254740991;function n(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=t}e.exports=n},87730:function(e,t,n){var r=n(29172),i=n(27301),o=n(86009),a=o&&o.isMap,s=a?i(a):r;e.exports=s},69843:function(e){function t(e){return null==e}e.exports=t},23805:function(e){function t(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}e.exports=t},40346:function(e){function t(e){return null!=e&&"object"==typeof e}e.exports=t},11331:function(e,t,n){var r=n(72552),i=n(28879),o=n(40346),a="[object Object]",s=Function.prototype,c=Object.prototype,l=s.toString,u=c.hasOwnProperty,d=l.call(Object);function h(e){if(!o(e)||r(e)!=a)return!1;var t=i(e);if(null===t)return!0;var n=u.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&l.call(n)==d}e.exports=h},69607:function(e,t,n){var r=n(81437),i=n(27301),o=n(86009),a=o&&o.isRegExp,s=a?i(a):r;e.exports=s},38440:function(e,t,n){var r=n(16038),i=n(27301),o=n(86009),a=o&&o.isSet,s=a?i(a):r;e.exports=s},44394:function(e,t,n){var r=n(72552),i=n(40346),o="[object Symbol]";function a(e){return"symbol"==typeof e||i(e)&&r(e)==o}e.exports=a},37167:function(e,t,n){var r=n(4901),i=n(27301),o=n(86009),a=o&&o.isTypedArray,s=a?i(a):r;e.exports=s},95950:function(e,t,n){var r=n(70695),i=n(88984),o=n(64894);function a(e){return o(e)?r(e):i(e)}e.exports=a},37241:function(e,t,n){var r=n(70695),i=n(72903),o=n(64894);function a(e){return o(e)?r(e,!0):i(e)}e.exports=a},68090:function(e){function t(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}e.exports=t},50104:function(e,t,n){var r=n(53661),i="Expected a function";function o(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError(i);var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var a=e.apply(this,r);return n.cache=o.set(i,a)||o,a};return n.cache=new(o.Cache||r),n}o.Cache=r,e.exports=o},55364:function(e,t,n){var r=n(85250),i=n(20999),o=i(function(e,t,n){r(e,t,n)});e.exports=o},63950:function(e){function t(){}e.exports=t},10124:function(e,t,n){var r=n(9325),i=function(){return r.Date.now()};e.exports=i},90179:function(e,t,n){var r=n(34932),i=n(9999),o=n(19931),a=n(31769),s=n(21791),c=n(53138),l=n(38816),u=n(83349),d=1,h=2,f=4,p=l(function(e,t){var n={};if(null==e)return n;var l=!1;t=r(t,function(t){return t=a(t,e),l||(l=t.length>1),t}),s(e,u(e),n),l&&(n=i(n,d|h|f,c));var p=t.length;while(p--)o(n,t[p]);return n});e.exports=p},97948:function(e,t,n){var r=n(57216),i=n(81993),o=n(61489),a=n(13222);function s(e,t,n){e=a(e),t=o(t);var s=t?i(e):0;return t&&s=3&&t?(e.pop(),this.sSelectedKeys=[e[e.length-1].path]):this.sSelectedKeys=[e.pop().path]}var n=[];"inline"===this.mode&&e.forEach(function(e){e.path&&n.push(e.path)}),this.openOnceKey||this.sOpenKeys.forEach(function(e){n.push(e)}),this.collapsed?this.cachedOpenKeys=n:this.sOpenKeys=n}},computed:{rootSubmenuKeys:function(e){var t=e.menus.map(function(e){return e.path})||[];return t}},created:function(){var e=this;this.$watch("$route",function(){e.updateMenu()}),this.$watch("collapsed",function(t){t?(e.cachedOpenKeys=e.sOpenKeys.concat(),e.sOpenKeys=[]):e.sOpenKeys=e.cachedOpenKeys}),void 0!==this.selectedKeys&&(this.sSelectedKeys=this.selectedKeys),void 0!==this.openKeys&&(this.sOpenKeys=this.openKeys)},mounted:function(){this.updateMenu()}},A=M,w=A,x=(n(25537),n(41446));function k(e,t){if("createEvent"in document){var n=document.createEvent("HTMLEvents");n.initEvent(t,!1,!0),e.dispatchEvent(n)}}var L=n(51382),C=function(e,t){var n=e.slots&&e.slots();return n[t]||e.props[t]},S=function(e){return"function"===typeof e},z=function(e){return"Fluid"!==e};var T=a.A.Sider,O={i18nRender:o.A.oneOfType([o.A.func,o.A.bool]).def(!1),mode:o.A.string.def("inline"),theme:o.A.string.def("dark"),contentWidth:o.A.oneOf(["Fluid","Fixed"]).def("Fluid"),collapsible:o.A.bool,collapsed:o.A.bool,collapsedWidth:o.A.oneOfType([o.A.string,o.A.number]).def(80),openKeys:o.A.array.def(void 0),selectedKeys:o.A.array.def(void 0),openOnceKey:o.A.bool.def(!0),handleCollapse:o.A.func,menus:o.A.array,siderWidth:o.A.oneOfType([o.A.string,o.A.number]).def(256),isMobile:o.A.bool,layout:o.A.string.def("inline"),fixSiderbar:o.A.bool,logo:o.A.any,title:o.A.string.def(""),menuHeaderRender:o.A.oneOfType([o.A.func,o.A.array,o.A.object,o.A.bool]),menuRender:o.A.oneOfType([o.A.func,o.A.array,o.A.object,o.A.bool]),openChange:o.A.func,select:o.A.func,menuClick:o.A.func},H=function(e,t){return"string"===typeof t?e("img",{attrs:{src:t,alt:"logo"}}):"function"===typeof t?t():e(t)},D=function(e,t){var n=t.logo,r=void 0===n?"https://gw.alipayobjects.com/zos/antfincdn/PmY%24TNNDBI/logo.svg":n,i=t.title,o=t.menuHeaderRender;if(!1===o)return null;var a=H(e,r),s=e("h1",[i]);return o?S(o)&&o(e,a,t.collapsed?null:s,t)||o:e("span",[a,s])},Y=function(e){return e>=32&&e<=80?e:80},V={name:"SiderMenu",model:{prop:"collapsed",event:"collapse"},props:O,render:function(e){var t=this.collapsible,n=this.collapsed,r=this.collapsedWidth,i=this.selectedKeys,o=this.openKeys,a=this.openChange,s=void 0===a?function(){return null}:a,c=this.select,l=void 0===c?function(){return null}:c,u=this.menuClick,d=void 0===u?function(){return null}:u,h=this.openOnceKey,f=this.siderWidth,p=this.fixSiderbar,m=this.mode,v=this.theme,g=this.menus,y=this.logo,_=this.title,b=this.onMenuHeaderClick,M=void 0===b?function(){return null}:b,A=this.i18nRender,x=this.menuHeaderRender,k=this.menuRender,L=["ant-pro-sider-menu-sider"];p&&L.push("fix-sider-bar"),"light"===v&&L.push("light");var C=D(e,{logo:y,title:_,menuHeaderRender:x,collapsed:n}),z=function(e,t){return e?"".concat(t?Math.abs((t-32)/2):0,"px"):32};return e(T,{class:L,attrs:{breakpoint:"lg",trigger:null,width:f,theme:v,collapsible:t,collapsed:n,collapsedWidth:Y(r)}},[C&&e("div",{class:"ant-pro-sider-menu-logo",on:{click:M},style:{paddingLeft:z(n,Y(r))},attrs:{id:"logo"}},[e("router-link",{attrs:{to:{path:"/"}}},[C])]),k&&(S(k)&&k(e,this.$props)||k)||e(w,{attrs:{collapsed:n,collapsedWidth:Y(r),openKeys:o,selectedKeys:i,openOnceKey:h,menus:g,mode:m,theme:v,i18nRender:A},on:{openChange:s,select:l,click:d}})])}},P=V;function E(e){for(var t=1;t=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function J(e,t){if(null==e)return{};var n,r,i={},o=Object.keys(e);for(r=0;r=0||(i[n]=e[n]);return i}function X(e){for(var t=1;t0&&e(K.Ay,i()([{class:"".concat(Q,"-tabs"),attrs:{activeKey:o,tabBarExtraContent:s},on:{change:function(e){a&&a(e)}}},c]),[r.map(function(t){return e(K.Ay.TabPane,i()([t,{attrs:{tab:n(t.tab)},key:t.key}]))})])},ae=function(e,t,n){return t||n?e("div",{class:"".concat(Q,"-detail")},[e("div",{class:"".concat(Q,"-main")},[e("div",{class:"".concat(Q,"-row")},[t&&e("div",{class:"".concat(Q,"-content")},[t]),n&&e("div",{class:"".concat(Q,"-extraContent")},[n])])])]):null},se=function(e,t,n,r){var o=t.title,a=t.tags,s=t.content,c=t.pageHeaderRender,l=t.extra,u=t.extraContent,d=t.breadcrumb,h=t.back,f=G(t,q);if(c)return c(X({},t));var p=o;o||!1===o||(p=n.title);var m=(0,$.cy)(p)?p:p&&r(p),v={breadcrumb:d,extra:l,tags:a,title:m,footer:oe(e,f,r)};return h||(v.backIcon=!1),e(B.A,i()([{props:v},{on:{back:h||ie}}]),[ae(e,s,u)])},ce={name:"PageHeaderWrapper",props:te,inject:["locale","contentWidth","breadcrumbRender"],render:function(e){var t=this,n=this.$route,r=this.$listeners,i=this.$slots["default"],o=(0,U.nu)(this,"title"),a=(0,U.nu)(this,"tags"),s=(0,U.nu)(this,"content"),c=(0,U.nu)(this,"extra"),l=(0,U.nu)(this,"extraContent"),u=re(this.$props.route||n),d=this.$props.i18nRender||this.locale||ne,h=this.$props.contentWidth||this.contentWidth||!1,f=this.$props.back||r.back,p=f&&function(){f&&f()}||void 0,m=this.$props.tabChange,v=function(e){t.$emit("tabChange",e),m&&m(e)},g={},y=this.$props.breadcrumb;if(!0===y){var _=n.matched.concat().map(function(e){return{path:e.path,breadcrumbName:d(e.meta.title)}}),b=function(e){var t=e.route,n=e.params,r=e.routes,i=(e.paths,e.h);return r.indexOf(t)===r.length-1&&i("span",[t.breadcrumbName])||i("router-link",{attrs:{to:{path:t.path||"/",params:n}}},[t.breadcrumbName])},M=this.breadcrumbRender||b;g={props:{routes:_,itemRender:M}}}else g=y||null;var A=X({},this.$props,{title:o,tags:a,content:s,extra:c,extraContent:l,breadcrumb:g,tabChange:v,back:p});return e("div",{class:"ant-pro-page-header-wrap"},[e("div",{class:"".concat(Q,"-page-header-warp")},[e(W,[se(e,A,u,d)])]),i?e(W,{attrs:{contentWidth:h}},[e("div",{class:"".concat(Q,"-children-content")},[i])]):null])},install:function(e){e.component(ce.name,ce),e.component("page-container",ce)}},le=ce,ue=(o.A.array,o.A.any,{name:"VueFragment",functional:!0,render:function(e,t){return t.children.length>1?e("div",{},t.children):t.children}}),de=n(38221),he=n.n(de),fe={collapsed:o.A.bool,handleCollapse:o.A.func,isMobile:o.A.bool.def(!1),fixedHeader:o.A.bool.def(!1),logo:o.A.any,menuRender:o.A.any,collapsedButtonRender:o.A.any,headerContentRender:o.A.any,rightContentRender:o.A.any},pe=function(e,t){return e(l.A,{attrs:{type:t?"menu-unfold":"menu-fold"}})},me={name:"GlobalHeader",props:fe,render:function(e){var t=this,n=this.$props,r=n.isMobile,i=n.logo,o=n.rightContentRender,a=n.headerContentRender,s=function(){var e=t.$props,n=e.collapsed,r=e.handleCollapse;r&&r(!n),t.triggerResizeEvent()},c=function(){var n=t.$props,r=n.collapsed,i=n.collapsedButtonRender,o=void 0===i?pe:i,a=n.menuRender;return!1!==o&&!1!==a?e("span",{class:"ant-pro-global-header-trigger",on:{click:s}},[S(o)&&o(e,r)||o]):null},l="ant-pro-global-header";return e("div",{class:l},[r&&e("a",{class:"".concat(l,"-logo"),key:"logo",attrs:{href:"/"}},[H(e,i)]),c(),a&&e("div",{class:"".concat(l,"-content")},[S(a)&&a(e,this.$props)||a]),S(o)&&o(e,this.$props)||o])},methods:{triggerResizeEvent:he()(function(){L.M&&k(window,"resize")})},beforeDestroy:function(){this.triggerResizeEvent.cancel&&this.triggerResizeEvent.cancel()}},ve=me;function ge(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0,r=arguments.length>3?arguments[3]:void 0;return e?t?n||80:r:0},Ee=function(e,t){return!1===t.headerRender?null:e(we,{props:t})},je=function(e){return e},Fe={name:"BasicLayout",functional:!0,props:Ye,render:function(e,t){var n=t.props,r=t.children,o=t.listeners,c=n.layout,l=n.isMobile,u=n.collapsed,d=n.collapsedWidth,h=n.mediaQuery,f=n.handleMediaQuery,p=n.handleCollapse,m=n.siderWidth,v=n.fixSiderbar,g=n.i18nRender,y=void 0===g?je:g,_=C(t,"footerRender"),b=C(t,"rightContentRender"),M=C(t,"collapsedButtonRender"),A=C(t,"menuHeaderRender"),w=C(t,"breadcrumbRender"),x=C(t,"headerContentRender"),k=C(t,"menuRender"),L="topmenu"===c,z=!L,T=v&&!L&&!l,O=He({},n,{hasSiderMenu:z,footerRender:_,menuHeaderRender:A,rightContentRender:b,collapsedButtonRender:M,breadcrumbRender:w,headerContentRender:x,menuRender:k},o);return e(Oe,{attrs:{i18nRender:y,contentWidth:n.contentWidth,breadcrumbRender:w}},[e(s.ContainerQuery,{attrs:{query:Ve},on:{change:f}},[e(a.A,{class:He({"ant-pro-basicLayout":!0,"ant-pro-topmenu":L},h)},[e(I,i()([{props:O},{attrs:{collapsed:u},on:{collapse:p}}])),e(a.A,{class:[c],style:{paddingLeft:z?"".concat(Pe(!!T,u,d,m),"px"):void 0,minHeight:"100vh"}},[Ee(e,He({},O,{mode:"horizontal"})),e(Se,{class:"ant-pro-basicLayout-content",attrs:{contentWidth:n.contentWidth}},[r]),!1!==_&&e(a.A.Footer,[S(_)&&_(e)||_])||null])])])])},install:function(e){e.component(le.name,le),e.component("PageContainer",le),e.component("ProLayout",Fe)}},Ie=Fe;n(90034),n(28373),n(97345),n(66882),n(47132),n(53966),n(91997),n(27902),n(49084),n(19120),n(64274),n(1406),n(6011),n(18787),n(42543),n(90500),o.A.string,o.A.array,o.A.oneOfType([o.A.func,o.A.bool]).def(!1);o.A.string,o.A.bool,o.A.array,o.A.string,o.A.string,o.A.oneOfType([o.A.func,o.A.bool]).def(!1),n(22050),n(25824);o.A.oneOf(["Fluid","Fixed"]).def("Fluid"),o.A.bool,o.A.bool,o.A.oneOf(["sidemenu","topmenu"]),o.A.oneOfType([o.A.func,o.A.bool]).def(!1),n(69511),n(58391),n(81776);o.A.string.def("");var $e={theme:o.A.oneOf(["dark","light","realDark"]),primaryColor:o.A.string,layout:o.A.oneOf(["sidemenu","topmenu"]),colorWeak:o.A.bool,contentWidth:o.A.oneOf(["Fluid","Fixed"]).def("Fluid"),fixedHeader:o.A.bool,fixSiderbar:o.A.bool,hideHintAlert:o.A.bool.def(!1),hideCopyButton:o.A.bool.def(!1)};o.A.func,o.A.objectOf($e),o.A.oneOfType([o.A.func,o.A.bool]).def(!1)},58391:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(6535)),o=2,a=16,s=5,c=5,l=15,u=5,d=4;function h(e,t,n){var r;return r=Math.round(e.h)>=60&&Math.round(e.h)<=240?n?Math.round(e.h)-o*t:Math.round(e.h)+o*t:n?Math.round(e.h)+o*t:Math.round(e.h)-o*t,r<0?r+=360:r>=360&&(r-=360),r}function f(e,t,n){return 0===e.h&&0===e.s?e.s:(r=n?Math.round(100*e.s)-a*t:t===d?Math.round(100*e.s)+a:Math.round(100*e.s)+s*t,r>100&&(r=100),n&&t===u&&r>10&&(r=10),r<6&&(r=6),r);var r}function p(e,t,n){return n?Math.round(100*e.v)+c*t:Math.round(100*e.v)-l*t}function m(e){for(var t=[],n=i.default(e),r=u;r>0;r-=1){var o=n.toHsv(),a=i.default({h:h(o,r,!0),s:f(o,r,!0),v:p(o,r,!0)}).toHexString();t.push(a)}t.push(n.toHexString());for(r=1;r<=d;r+=1){o=n.toHsv(),a=i.default({h:h(o,r),s:f(o,r),v:p(o,r)}).toHexString();t.push(a)}return t}t["default"]=m},33446:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(58391));t.generate=i.default;var o={red:"#F5222D",volcano:"#FA541C",orange:"#FA8C16",gold:"#FAAD14",yellow:"#FADB14",lime:"#A0D911",green:"#52C41A",cyan:"#13C2C2",blue:"#1890FF",geekblue:"#2F54EB",purple:"#722ED1",magenta:"#EB2F96",grey:"#666666"};t.presetPrimaryColors=o;var a={};t.presetPalettes=a,Object.keys(o).forEach(function(e){a[e]=i.default(o[e]),a[e].primary=a[e][5]});var s=a.red;t.red=s;var c=a.volcano;t.volcano=c;var l=a.gold;t.gold=l;var u=a.orange;t.orange=u;var d=a.yellow;t.yellow=d;var h=a.lime;t.lime=h;var f=a.green;t.green=f;var p=a.cyan;t.cyan=p;var m=a.blue;t.blue=m;var v=a.geekblue;t.geekblue=v;var g=a.purple;t.purple=g;var y=a.magenta;t.magenta=y;var _=a.grey;t.grey=_},6678:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n="0 0 1024 1024",r="64 64 896 896",i="fill",o="outline",a="twotone";function s(e){for(var t=[],n=1;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],n="function"===typeof e?e(this.$data,this.$props):e;if(this.getDerivedStateFromProps){var r=this.getDerivedStateFromProps((0,o.Oq)(this),(0,i.A)({},this.$data,n));if(null===r)return;n=(0,i.A)({},n,r||{})}(0,i.A)(this.$data,n),this.$forceUpdate(),this.$nextTick(function(){t&&t()})},__emit:function(){var e=[].slice.call(arguments,0),t=e[0],n=this.$listeners[t];if(e.length&&n)if(Array.isArray(n))for(var i=0,o=n.length;i=n.F1&&t<=n.F12)return!1;switch(t){case n.ALT:case n.CAPS_LOCK:case n.CONTEXT_MENU:case n.CTRL:case n.DOWN:case n.END:case n.ESC:case n.HOME:case n.INSERT:case n.LEFT:case n.MAC_FF_META:case n.META:case n.NUMLOCK:case n.NUM_CENTER:case n.PAGE_DOWN:case n.PAGE_UP:case n.PAUSE:case n.PRINT_SCREEN:case n.RIGHT:case n.SHIFT:case n.UP:case n.WIN_KEY:case n.WIN_KEY_RIGHT:return!1;default:return!0}},isCharacterKey:function(e){if(e>=n.ZERO&&e<=n.NINE)return!0;if(e>=n.NUM_ZERO&&e<=n.NUM_MULTIPLY)return!0;if(e>=n.A&&e<=n.Z)return!0;if(-1!==window.navigation.userAgent.indexOf("WebKit")&&0===e)return!0;switch(e){case n.SPACE:case n.QUESTION_MARK:case n.NUM_PLUS:case n.NUM_MINUS:case n.NUM_PERIOD:case n.NUM_DIVISION:case n.SEMICOLON:case n.DASH:case n.EQUALS:case n.COMMA:case n.PERIOD:case n.SLASH:case n.APOSTROPHE:case n.SINGLE_QUOTE:case n.OPEN_SQUARE_BRACKET:case n.BACKSLASH:case n.CLOSE_SQUARE_BRACKET:return!0;default:return!1}}};t.A=n},48159:function(e,t,n){"use strict";var r=n(4718),i=n(51927);t.A={name:"Portal",props:{getContainer:r.A.func.isRequired,children:r.A.any.isRequired,didUpdate:r.A.func},mounted:function(){this.createContainer()},updated:function(){var e=this,t=this.$props.didUpdate;t&&this.$nextTick(function(){t(e.$props)})},beforeDestroy:function(){this.removeContainer()},methods:{createContainer:function(){this._container=this.$props.getContainer(),this.$forceUpdate()},removeContainer:function(){this._container&&this._container.parentNode&&this._container.parentNode.removeChild(this._container)}},render:function(){return this._container?(0,i.Ob)(this.$props.children,{directives:[{name:"ant-portal",value:this._container}]}):null}}},81593:function(e,t,n){"use strict";n.d(t,{Qg:function(){return d}});var r="undefined"!==typeof window,i=r&&window.navigator.userAgent.toLowerCase(),o=i&&i.indexOf("msie 9.0")>0;function a(e,t){for(var n=Object.create(null),r=e.split(","),i=0;i0);a&&a.indexOf("android"),a&&/iphone|ipad|ipod|ios/.test(a),a&&/chrome\/\d+/.test(a),a&&/phantomjs/.test(a),a&&a.match(/firefox\/(\d+)/)},93986:function(e,t,n){"use strict";n.d(t,{A:function(){return i}});var r=void 0;function i(e){if(e||void 0===r){var t=document.createElement("div");t.style.width="100%",t.style.height="200px";var n=document.createElement("div"),i=n.style;i.position="absolute",i.top=0,i.left=0,i.pointerEvents="none",i.visibility="hidden",i.width="200px",i.height="150px",i.overflow="hidden",n.appendChild(t),document.body.appendChild(n);var o=t.offsetWidth;n.style.overflow="scroll";var a=t.offsetWidth;o===a&&(a=n.clientWidth),document.body.removeChild(n),r=o-a}return r}},80178:function(e,t,n){"use strict";var r=n(75998),i=function(){},o=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.beforeEnter,o=t.enter,a=t.afterEnter,s=t.leave,c=t.afterLeave,l=t.appear,u=void 0===l||l,d=t.tag,h=t.nativeOn,f={props:{appear:u,css:!1},on:{beforeEnter:n||i,enter:o||function(t,n){(0,r.A)(t,e+"-enter",n)},afterEnter:a||i,leave:s||function(t,n){(0,r.A)(t,e+"-leave",n)},afterLeave:c||i},nativeOn:h};return d&&(f.tag=d),f};t.A=o},67287:function(e,t,n){"use strict";function r(e){return e["default"]||e}n.d(t,{A:function(){return r}})},2410:function(e,t){"use strict";var n=function(e){return!isNaN(parseFloat(e))&&isFinite(e)};t.A=n},6566:function(e,t,n){"use strict";n.d(t,{P1:function(){return l},W2:function(){return c},n1:function(){return d},nP:function(){return u},pK:function(){return f},pY:function(){return h}});var r=n(67287),i=n(95093),o=n(36873),a=n(69843),s=n.n(a),c={validator:function(e){return"string"===typeof e||s()(e)||i.isMoment(e)}},l={validator:function(e){return!!Array.isArray(e)&&(0===e.length||-1===e.findIndex(function(e){return"string"!==typeof e})||-1===e.findIndex(function(e){return!s()(e)&&!i.isMoment(e)}))}},u={validator:function(e){return Array.isArray(e)?0===e.length||-1===e.findIndex(function(e){return"string"!==typeof e})||-1===e.findIndex(function(e){return!s()(e)&&!i.isMoment(e)}):"string"===typeof e||s()(e)||i.isMoment(e)}};function d(e,t,n,a){var s=Array.isArray(t)?t:[t];s.forEach(function(t){t&&(a&&(0,o.A)((0,r.A)(i)(t,a).isValid(),e,"When set `valueFormat`, `"+n+"` should provides invalidate string time. "),!a&&(0,o.A)((0,r.A)(i).isMoment(t)&&t.isValid(),e,"`"+n+"` provides invalidate moment time. If you want to set empty value, use `null` instead."))})}var h=function(e,t){return Array.isArray(e)?e.map(function(e){return"string"===typeof e&&e?(0,r.A)(i)(e,t):e||null}):"string"===typeof e&&e?(0,r.A)(i)(e,t):e||null},f=function(e,t){return Array.isArray(e)?e.map(function(e){return(0,r.A)(i).isMoment(e)?e.format(t):e}):(0,r.A)(i).isMoment(e)?e.format(t):e}},40703:function(e,t,n){"use strict";var r=n(75998),i=n(93146),o=n.n(i),a=n(85471);function s(e,t,n){var i=void 0,a=void 0,s=void 0;return(0,r.A)(e,"ant-motion-collapse-legacy",{start:function(){s&&o().cancel(s),t?(i=e.offsetHeight,0===i?s=o()(function(){i=e.offsetHeight,e.style.height="0px",e.style.opacity="0"}):(e.style.height="0px",e.style.opacity="0")):(e.style.height=e.offsetHeight+"px",e.style.opacity="1")},active:function(){a&&o().cancel(a),a=o()(function(){e.style.height=(t?i:0)+"px",e.style.opacity=t?"1":"0"})},end:function(){s&&o().cancel(s),a&&o().cancel(a),e.style.height="",e.style.opacity="",n&&n()}})}var c={enter:function(e,t){a.Ay.nextTick(function(){s(e,!0,t)})},leave:function(e,t){return s(e,!1,t)}};t.A=c},1406:function(e,t,n){"use strict";function r(e){return e.directive("ant-portal",{inserted:function(e,t){var n=t.value,r="function"===typeof n?n(e):n;r!==e.parentNode&&r.appendChild(e)},componentUpdated:function(e,t){var n=t.value,r="function"===typeof n?n(e):n;r!==e.parentNode&&r.appendChild(e)}})}n.d(t,{o:function(){return r}}),t.A={install:function(e){r(e)}}},15848:function(e,t,n){"use strict";n.d(t,{$c:function(){return y},CB:function(){return V},Gk:function(){return Y},IV:function(){return x},K6:function(){return D},Oq:function(){return M},PT:function(){return h},Sk:function(){return g},Ts:function(){return w},WM:function(){return z},Z0:function(){return k},cK:function(){return p},gd:function(){return O},i5:function(){return S},i7:function(){return L},kQ:function(){return C},nu:function(){return A},rz:function(){return _},sG:function(){return H},t0:function(){return T},ul:function(){return f},v6:function(){return P},xr:function(){return b},zO:function(){return E}});var r=n(97479),i=n(52040),o=n(85505),a=n(11331),s=n.n(a),c=n(46942),l=n.n(c);function u(e){var t=e&&e.toString().match(/^\s*function (\w+)/);return t?t[1]:""}var d=/-(\w)/g,h=function(e){return e.replace(d,function(e,t){return t?t.toUpperCase():""})},f=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments[1],n={},r=/;(?![^(]*\))/g,i=/:(.+)/;return e.split(r).forEach(function(e){if(e){var r=e.split(i);if(r.length>1){var o=t?h(r[0].trim()):r[0].trim();n[o]=r[1].trim()}}}),n},p=function(e,t){var n=e.$options||{},r=n.propsData||{};return t in r},m=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={};return Object.keys(e).forEach(function(r){(r in t||void 0!==e[r])&&(n[r]=e[r])}),n},v=function(e){return e.data&&e.data.scopedSlots||{}},g=function(e){var t=e.componentOptions||{};e.$vnode&&(t=e.$vnode.componentOptions||{});var n=e.children||t.children||[],r={};return n.forEach(function(e){if(!H(e)){var t=e.data&&e.data.slot||"default";r[t]=r[t]||[],r[t].push(e)}}),(0,o.A)({},r,v(e))},y=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"default",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e.$scopedSlots&&e.$scopedSlots[t]&&e.$scopedSlots[t](n)||e.$slots[t]||[]},_=function(e){var t=e.componentOptions||{};return e.$vnode&&(t=e.$vnode.componentOptions||{}),e.children||t.children||[]},b=function(e){if(e.fnOptions)return e.fnOptions;var t=e.componentOptions;return e.$vnode&&(t=e.$vnode.componentOptions),t&&t.Ctor.options||{}},M=function(e){if(e.componentOptions){var t=e.componentOptions,n=t.propsData,r=void 0===n?{}:n,a=t.Ctor,s=void 0===a?{}:a,c=(s.options||{}).props||{},l={},d=!0,h=!1,f=void 0;try{for(var p,v=Object.entries(c)[Symbol.iterator]();!(d=(p=v.next()).done);d=!0){var g=p.value,y=(0,i.A)(g,2),_=y[0],b=y[1],M=b["default"];void 0!==M&&(l[_]="function"===typeof M&&"Function"!==u(b.type)?M.call(e):M)}}catch(L){h=!0,f=L}finally{try{!d&&v["return"]&&v["return"]()}finally{if(h)throw f}}return(0,o.A)({},l,r)}var A=e.$options,w=void 0===A?{}:A,x=e.$props,k=void 0===x?{}:x;return m(k,w.propsData)},A=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e,r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];if(e.$createElement){var i=e.$createElement,o=e[t];return void 0!==o?"function"===typeof o&&r?o(i,n):o:e.$scopedSlots[t]&&r&&e.$scopedSlots[t](n)||e.$scopedSlots[t]||e.$slots[t]||void 0}var a=e.context.$createElement,s=w(e)[t];if(void 0!==s)return"function"===typeof s&&r?s(a,n):s;var c=v(e)[t];if(void 0!==c)return"function"===typeof c&&r?c(a,n):c;var l=[],u=e.componentOptions||{};return(u.children||[]).forEach(function(e){e.data&&e.data.slot===t&&(e.data.attrs&&delete e.data.attrs.slot,"template"===e.tag?l.push(e.children):l.push(e))}),l.length?l:void 0},w=function(e){var t=e.componentOptions;return e.$vnode&&(t=e.$vnode.componentOptions),t&&t.propsData||{}},x=function(e,t){return w(e)[t]},k=function(e){var t=e.data;return e.$vnode&&(t=e.$vnode.data),t&&t.attrs||{}},L=function(e){var t=e.key;return e.$vnode&&(t=e.$vnode.key),t};function C(e){var t={};return e.componentOptions&&e.componentOptions.listeners?t=e.componentOptions.listeners:e.data&&e.data.on&&(t=e.data.on),(0,o.A)({},t)}function S(e){var t={};return e.data&&e.data.on&&(t=e.data.on),(0,o.A)({},t)}function z(e){return(e.$vnode?e.$vnode.componentOptions.listeners:e.$listeners)||{}}function T(e){var t={};e.data?t=e.data:e.$vnode&&e.$vnode.data&&(t=e.$vnode.data);var n=t["class"]||{},r=t.staticClass,i={};return r&&r.split(" ").forEach(function(e){i[e.trim()]=!0}),"string"===typeof n?n.split(" ").forEach(function(e){i[e.trim()]=!0}):Array.isArray(n)?l()(n).split(" ").forEach(function(e){i[e.trim()]=!0}):i=(0,o.A)({},i,n),i}function O(e,t){var n={};e.data?n=e.data:e.$vnode&&e.$vnode.data&&(n=e.$vnode.data);var r=n.style||n.staticStyle;if("string"===typeof r)r=f(r,t);else if(t&&r){var i={};return Object.keys(r).forEach(function(e){return i[h(e)]=r[e]}),i}return r}function H(e){return!(e.tag||e.text&&""!==e.text.trim())}function D(e){return!e.tag}function Y(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return e.filter(function(e){return!H(e)})}var V=function(e,t){return Object.keys(t).forEach(function(n){if(!e[n])throw new Error("not have "+n+" prop");e[n].def&&(e[n]=e[n].def(t[n]))}),e};function P(){var e=[].slice.call(arguments,0),t={};return e.forEach(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=!0,r=!1,a=void 0;try{for(var c,l=Object.entries(e)[Symbol.iterator]();!(n=(c=l.next()).done);n=!0){var u=c.value,d=(0,i.A)(u,2),h=d[0],f=d[1];t[h]=t[h]||{},s()(f)?(0,o.A)(t[h],f):t[h]=f}}catch(p){r=!0,a=p}finally{try{!n&&l["return"]&&l["return"]()}finally{if(r)throw a}}}),t}function E(e){return e&&"object"===("undefined"===typeof e?"undefined":(0,r.A)(e))&&"componentOptions"in e&&"context"in e&&void 0!==e.tag}t.Ay=p},8350:function(e,t,n){"use strict";n.d(t,{A:function(){return l}});var r=n(75189),i=n.n(r),o=n(85505),a=n(4718),s=n(15848);function c(e){return e.name||"Component"}function l(e){var t=e.props||{},n=e.methods||{},r={};Object.keys(t).forEach(function(e){r[e]=(0,o.A)({},t[e],{required:!1})}),e.props.__propsSymbol__=a.A.any,e.props.children=a.A.array.def([]);var l={props:r,model:e.model,name:"Proxy_"+c(e),methods:{getProxyWrappedInstance:function(){return this.$refs.wrappedInstance}},render:function(){var t=arguments[0],n=this.$slots,r=void 0===n?{}:n,a=this.$scopedSlots,c=(0,s.Oq)(this),l={props:(0,o.A)({},c,{__propsSymbol__:Symbol(),componentWillReceiveProps:(0,o.A)({},c),children:r["default"]||c.children||[]}),on:(0,s.WM)(this)};Object.keys(a).length&&(l.scopedSlots=a);var u=Object.keys(r);return t(e,i()([l,{ref:"wrappedInstance"}]),[u.length?u.map(function(e){return t("template",{slot:e},[r[e]])}):null])}};return Object.keys(n).map(function(e){l.methods[e]=function(){var t;return(t=this.getProxyWrappedInstance())[e].apply(t,arguments)}}),l}},70556:function(e,t,n){"use strict";n.d(t,{A:function(){return s}});var r=n(93146),i=n.n(r),o=0,a={};function s(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=o++,r=t;function s(){r-=1,r<=0?(e(),delete a[n]):a[n]=i()(s)}return a[n]=i()(s),n}s.cancel=function(e){void 0!==e&&(i().cancel(a[e]),delete a[e])},s.ids=a},982:function(e,t,n){"use strict";n.d(t,{q:function(){return c},z:function(){return l}});var r=["moz","ms","webkit"];function i(){var e=0;return function(t){var n=(new Date).getTime(),r=Math.max(0,16-(n-e)),i=window.setTimeout(function(){t(n+r)},r);return e=n+r,i}}function o(){if("undefined"===typeof window)return function(){};if(window.requestAnimationFrame)return window.requestAnimationFrame.bind(window);var e=r.filter(function(e){return e+"RequestAnimationFrame"in window})[0];return e?window[e+"RequestAnimationFrame"]:i()}function a(e){if("undefined"===typeof window)return null;if(window.cancelAnimationFrame)return window.cancelAnimationFrame(e);var t=r.filter(function(e){return e+"CancelAnimationFrame"in window||e+"CancelRequestAnimationFrame"in window})[0];return t?(window[t+"CancelAnimationFrame"]||window[t+"CancelRequestAnimationFrame"]).call(this,e):clearTimeout(e)}var s=o(),c=function(e){return a(e.id)},l=function(e,t){var n=Date.now();function r(){Date.now()-n>=t?e.call():i.id=s(r)}var i={id:s(r)};return i}},73363:function(e,t,n){"use strict";n.d(t,{ye:function(){return s}});var r=n(44508),i=n(85505),o=void 0;if("undefined"!==typeof window){var a=function(e){return{media:e,matches:!1,addListener:function(){},removeListener:function(){}}};window.matchMedia||(window.matchMedia=a),o=n(22386)}var s=["xxl","xl","lg","md","sm","xs"],c={xs:"(max-width: 575px)",sm:"(min-width: 576px)",md:"(min-width: 768px)",lg:"(min-width: 992px)",xl:"(min-width: 1200px)",xxl:"(min-width: 1600px)"},l=[],u=-1,d={},h={dispatch:function(e){return d=e,!(l.length<1)&&(l.forEach(function(e){e.func(d)}),!0)},subscribe:function(e){0===l.length&&this.register();var t=(++u).toString();return l.push({token:t,func:e}),e(d),t},unsubscribe:function(e){l=l.filter(function(t){return t.token!==e}),0===l.length&&this.unregister()},unregister:function(){Object.keys(c).map(function(e){return o.unregister(c[e])})},register:function(){var e=this;Object.keys(c).map(function(t){return o.register(c[t],{match:function(){var n=(0,i.A)({},d,(0,r.A)({},t,!0));e.dispatch(n)},unmatch:function(){var n=(0,i.A)({},d,(0,r.A)({},t,!1));e.dispatch(n)},destroy:function(){}})})}};t.Ay=h},14221:function(e,t,n){"use strict";n.d(t,{A:function(){return p}});var r=n(75189),i=n.n(r),o=n(85505),a=n(2833),s=n.n(a),c=n(90034),l=n(15848),u=n(4718),d=n(8350);function h(e){return e.name||"Component"}var f=function(){return{}};function p(e){var t=!!e,n=e||f;return function(r){var a=(0,c.A)(r.props||{},["store"]),f={__propsSymbol__:u.A.any};Object.keys(a).forEach(function(e){f[e]=(0,o.A)({},a[e],{required:!1})});var p={name:"Connect_"+h(r),props:f,inject:{storeContext:{default:function(){return{}}}},data:function(){return this.store=this.storeContext.store,this.preProps=(0,c.A)((0,l.Oq)(this),["__propsSymbol__"]),{subscribed:n(this.store.getState(),this.$props)}},watch:{__propsSymbol__:function(){e&&2===e.length&&(this.subscribed=n(this.store.getState(),this.$props))}},mounted:function(){this.trySubscribe()},beforeDestroy:function(){this.tryUnsubscribe()},methods:{handleChange:function(){if(this.unsubscribe){var e=(0,c.A)((0,l.Oq)(this),["__propsSymbol__"]),t=n(this.store.getState(),e);s()(this.preProps,e)&&s()(this.subscribed,t)||(this.subscribed=t)}},trySubscribe:function(){t&&(this.unsubscribe=this.store.subscribe(this.handleChange),this.handleChange())},tryUnsubscribe:function(){this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=null)},getWrappedInstance:function(){return this.$refs.wrappedInstance}},render:function(){var e=arguments[0],t=this.$slots,n=void 0===t?{}:t,a=this.$scopedSlots,s=this.subscribed,u=this.store,d=(0,l.Oq)(this);this.preProps=(0,o.A)({},(0,c.A)(d,["__propsSymbol__"]));var h={props:(0,o.A)({},d,s,{store:u}),on:(0,l.WM)(this),scopedSlots:a};return e(r,i()([h,{ref:"wrappedInstance"}]),[Object.keys(n).map(function(t){return e("template",{slot:t},[n[t]])})])}};return(0,d.A)(p)}}},6596:function(e,t,n){"use strict";var r=n(75189),i=n.n(r),o=n(85505),a=n(11207),s=n(4718),c={border:0,background:"transparent",padding:0,lineHeight:"inherit",display:"inline-block"},l={props:{noStyle:s.A.bool},methods:{onKeyDown:function(e){var t=e.keyCode;t===a.A.ENTER&&e.preventDefault()},onKeyUp:function(e){var t=e.keyCode;t===a.A.ENTER&&this.$emit("click",e)},setRef:function(e){this.div=e},focus:function(){this.div&&this.div.focus()},blur:function(){this.div&&this.div.blur()}},render:function(){var e=arguments[0],t=this.$props.noStyle;return e("div",i()([{attrs:{role:"button",tabIndex:0}},{directives:[{name:"ant-ref",value:this.setRef}],on:(0,o.A)({},this.$listeners,{keydown:this.onKeyDown,keyup:this.onKeyUp})},{style:(0,o.A)({},t?null:c)}]),[this.$slots["default"]])}};t.A=l},51927:function(e,t,n){"use strict";n.d(t,{Ob:function(){return u},pM:function(){return l}});var r=n(32779),i=n(85505),o=n(15848),a=n(46942),s=n.n(a);function c(e,t){var n=e.componentOptions,r=e.data,o={};n&&n.listeners&&(o=(0,i.A)({},n.listeners));var a={};r&&r.on&&(a=(0,i.A)({},r.on));var s=new e.constructor(e.tag,r?(0,i.A)({},r,{on:a}):r,e.children,e.text,e.elm,e.context,n?(0,i.A)({},n,{listeners:o}):n,e.asyncFactory);return s.ns=e.ns,s.isStatic=e.isStatic,s.key=e.key,s.isComment=e.isComment,s.fnContext=e.fnContext,s.fnOptions=e.fnOptions,s.fnScopeId=e.fnScopeId,s.isCloned=!0,t&&(e.children&&(s.children=l(e.children,!0)),n&&n.children&&(n.children=l(n.children,!0))),s}function l(e,t){for(var n=e.length,r=new Array(n),i=0;i1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],a=e;if(Array.isArray(e)&&(a=(0,o.Gk)(e)[0]),!a)return null;var l=c(a,n),u=t.props,d=void 0===u?{}:u,h=t.key,f=t.on,p=void 0===f?{}:f,m=t.nativeOn,v=void 0===m?{}:m,g=t.children,y=t.directives,_=void 0===y?[]:y,b=l.data||{},M={},A={},w=t.attrs,x=void 0===w?{}:w,k=t.ref,L=t.domProps,C=void 0===L?{}:L,S=t.style,z=void 0===S?{}:S,T=t["class"],O=void 0===T?{}:T,H=t.scopedSlots,D=void 0===H?{}:H;return A="string"===typeof b.style?(0,o.ul)(b.style):(0,i.A)({},b.style,A),A="string"===typeof z?(0,i.A)({},A,(0,o.ul)(A)):(0,i.A)({},A,z),"string"===typeof b["class"]&&""!==b["class"].trim()?b["class"].split(" ").forEach(function(e){M[e.trim()]=!0}):Array.isArray(b["class"])?s()(b["class"]).split(" ").forEach(function(e){M[e.trim()]=!0}):M=(0,i.A)({},b["class"],M),"string"===typeof O&&""!==O.trim()?O.split(" ").forEach(function(e){M[e.trim()]=!0}):M=(0,i.A)({},M,O),l.data=(0,i.A)({},b,{style:A,attrs:(0,i.A)({},b.attrs,x),class:M,domProps:(0,i.A)({},b.domProps,C),scopedSlots:(0,i.A)({},b.scopedSlots,D),directives:[].concat((0,r.A)(b.directives||[]),(0,r.A)(_))}),l.componentOptions?(l.componentOptions.propsData=l.componentOptions.propsData||{},l.componentOptions.listeners=l.componentOptions.listeners||{},l.componentOptions.propsData=(0,i.A)({},l.componentOptions.propsData,d),l.componentOptions.listeners=(0,i.A)({},l.componentOptions.listeners,p),g&&(l.componentOptions.children=g)):(g&&(l.children=g),l.data.on=(0,i.A)({},l.data.on||{},p)),l.data.on=(0,i.A)({},l.data.on||{},v),void 0!==h&&(l.key=h,l.data.key=h),"string"===typeof k&&(l.data.ref=k),l}},4718:function(e,t,n){"use strict";var r=n(97479),i=n(11331),o=n.n(i),a=n(20511),s={get any(){return(0,a.Ax)("any",{type:null})},get func(){return(0,a.Ax)("function",{type:Function}).def(l.func)},get bool(){return(0,a.Ax)("boolean",{type:Boolean}).def(l.bool)},get string(){return(0,a.Ax)("string",{type:String}).def(l.string)},get number(){return(0,a.Ax)("number",{type:Number}).def(l.number)},get array(){return(0,a.Ax)("array",{type:Array}).def(l.array)},get object(){return(0,a.Ax)("object",{type:Object}).def(l.object)},get integer(){return(0,a.Ax)("integer",{type:Number,validator:function(e){return(0,a.Fq)(e)}}).def(l.integer)},get symbol(){return(0,a.Ax)("symbol",{type:null,validator:function(e){return"symbol"===("undefined"===typeof e?"undefined":(0,r.A)(e))}})},custom:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"custom validation failed";if("function"!==typeof e)throw new TypeError("[VueTypes error]: You must provide a function as argument");return(0,a.Ax)(e.name||"<>",{validator:function(){var n=e.apply(void 0,arguments);return n||(0,a.R8)(this._vueTypes_name+" - "+t),n}})},oneOf:function(e){if(!(0,a.cy)(e))throw new TypeError("[VueTypes error]: You must provide an array as argument");var t='oneOf - value should be one of "'+e.join('", "')+'"',n=e.reduce(function(e,t){return null!==t&&void 0!==t&&-1===e.indexOf(t.constructor)&&e.push(t.constructor),e},[]);return(0,a.Ax)("oneOf",{type:n.length>0?n:null,validator:function(n){var r=-1!==e.indexOf(n);return r||(0,a.R8)(t),r}})},instanceOf:function(e){return(0,a.Ax)("instanceOf",{type:e})},oneOfType:function(e){if(!(0,a.cy)(e))throw new TypeError("[VueTypes error]: You must provide an array as argument");var t=!1,n=e.reduce(function(e,n){if(o()(n)){if("oneOf"===n._vueTypes_name)return e.concat(n.type||[]);if(n.type&&!(0,a.Tn)(n.validator)){if((0,a.cy)(n.type))return e.concat(n.type);e.push(n.type)}else(0,a.Tn)(n.validator)&&(t=!0);return e}return e.push(n),e},[]);if(!t)return(0,a.Ax)("oneOfType",{type:n}).def(void 0);var r=e.map(function(e){return e&&(0,a.cy)(e.type)?e.type.map(a.Pw):(0,a.Pw)(e)}).reduce(function(e,t){return e.concat((0,a.cy)(t)?t:[t])},[]).join('", "');return this.custom(function(t){var n=e.some(function(e){return"oneOf"===e._vueTypes_name?!e.type||(0,a.v2)(e.type,t,!0):(0,a.v2)(e,t,!0)});return n||(0,a.R8)('oneOfType - value type should be one of "'+r+'"'),n}).def(void 0)},arrayOf:function(e){return(0,a.Ax)("arrayOf",{type:Array,validator:function(t){var n=t.every(function(t){return(0,a.v2)(e,t)});return n||(0,a.R8)('arrayOf - value must be an array of "'+(0,a.Pw)(e)+'"'),n}})},objectOf:function(e){return(0,a.Ax)("objectOf",{type:Object,validator:function(t){var n=Object.keys(t).every(function(n){return(0,a.v2)(e,t[n])});return n||(0,a.R8)('objectOf - value must be an object of "'+(0,a.Pw)(e)+'"'),n}})},shape:function(e){var t=Object.keys(e),n=t.filter(function(t){return e[t]&&!0===e[t].required}),r=(0,a.Ax)("shape",{type:Object,validator:function(r){var i=this;if(!o()(r))return!1;var s=Object.keys(r);return n.length>0&&n.some(function(e){return-1===s.indexOf(e)})?((0,a.R8)('shape - at least one of required properties "'+n.join('", "')+'" is not present'),!1):s.every(function(n){if(-1===t.indexOf(n))return!0===i._vueTypes_isLoose||((0,a.R8)('shape - object is missing "'+n+'" property'),!1);var o=e[n];return(0,a.v2)(o,r[n])})}});return Object.defineProperty(r,"_vueTypes_isLoose",{enumerable:!1,writable:!0,value:!1}),Object.defineProperty(r,"loose",{get:function(){return this._vueTypes_isLoose=!0,this},enumerable:!1}),r}},c=function(){return{func:void 0,bool:void 0,string:void 0,number:void 0,array:void 0,object:void 0,integer:void 0}},l=c();Object.defineProperty(s,"sensibleDefaults",{enumerable:!1,set:function(e){!1===e?l={}:!0===e?l=c():o()(e)&&(l=e)},get:function(){return l}}),t.A=s},20511:function(e,t,n){"use strict";n.d(t,{Ax:function(){return g},Fq:function(){return h},Pw:function(){return l},R8:function(){return _},Tn:function(){return p},cy:function(){return f},v2:function(){return y}});var r=n(11331),i=n.n(r),o=Object.prototype,a=o.toString,s=o.hasOwnProperty,c=/^\s*function (\w+)/,l=function(e){var t=null!==e&&void 0!==e?e.type?e.type:e:null,n=t&&t.toString().match(c);return n&&n[1]},u=function(e){if(null===e||void 0===e)return null;var t=e.constructor.toString().match(c);return t&&t[1]},d=function(){},h=Number.isInteger||function(e){return"number"===typeof e&&isFinite(e)&&Math.floor(e)===e},f=Array.isArray||function(e){return"[object Array]"===a.call(e)},p=function(e){return"[object Function]"===a.call(e)},m=function(e){Object.defineProperty(e,"def",{value:function(e){return void 0===e&&void 0===this["default"]?(this["default"]=void 0,this):p(e)||y(this,e)?(this["default"]=f(e)||i()(e)?function(){return e}:e,this):(_(this._vueTypes_name+' - invalid default value: "'+e+'"',e),this)},enumerable:!1,writable:!1})},v=function(e){Object.defineProperty(e,"isRequired",{get:function(){return this.required=!0,this},enumerable:!1})},g=function(e,t){return Object.defineProperty(t,"_vueTypes_name",{enumerable:!1,writable:!1,value:e}),v(t),m(t),p(t.validator)&&(t.validator=t.validator.bind(t)),t},y=function e(t,n){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=t,a=!0,c=void 0;i()(t)||(o={type:t});var d=o._vueTypes_name?o._vueTypes_name+" - ":"";return s.call(o,"type")&&null!==o.type&&(f(o.type)?(a=o.type.some(function(t){return e(t,n,!0)}),c=o.type.map(function(e){return l(e)}).join(" or ")):(c=l(o),a="Array"===c?f(n):"Object"===c?i()(n):"String"===c||"Number"===c||"Boolean"===c||"Function"===c?u(n)===c:n instanceof o.type)),a?s.call(o,"validator")&&p(o.validator)?(a=o.validator(n),a||!1!==r||_(d+"custom validation failed"),a):a:(!1===r&&_(d+'value "'+n+'" should be of type "'+c+'"'),!1)},_=d},36873:function(e,t,n){"use strict";n.d(t,{A:function(){return c}});var r={};function i(e,t){0}function o(e,t,n){t||r[n]||(e(!1,n),r[n]=!0)}function a(e,t){o(i,e,t)}var s=a,c=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";s(e,"[antdv: "+t+"] "+n)}},98416:function(e,t,n){"use strict";var r=n(91158),i=n(70556),o=n(25592),a=void 0;function s(e){return!e||null===e.offsetParent}function c(e){var t=(e||"").match(/rgba?\((\d*), (\d*), (\d*)(, [\.\d]*)?\)/);return!(t&&t[1]&&t[2]&&t[3])||!(t[1]===t[2]&&t[2]===t[3])}t.A={name:"Wave",props:["insertExtraNode"],mounted:function(){var e=this;this.$nextTick(function(){var t=e.$el;1===t.nodeType&&(e.instance=e.bindAnimationEvent(t))})},inject:{configProvider:{default:function(){return o.f}}},beforeDestroy:function(){this.instance&&this.instance.cancel(),this.clickWaveTimeoutId&&clearTimeout(this.clickWaveTimeoutId),this.destroy=!0},methods:{onClick:function(e,t){if(!(!e||s(e)||e.className.indexOf("-leave")>=0)){var n=this.$props.insertExtraNode;this.extraNode=document.createElement("div");var i=this.extraNode;i.className="ant-click-animating-node";var o=this.getAttributeName();e.removeAttribute(o),e.setAttribute(o,"true"),a=a||document.createElement("style"),t&&"#ffffff"!==t&&"rgb(255, 255, 255)"!==t&&c(t)&&!/rgba\(\d*, \d*, \d*, 0\)/.test(t)&&"transparent"!==t&&(this.csp&&this.csp.nonce&&(a.nonce=this.csp.nonce),i.style.borderColor=t,a.innerHTML="\n [ant-click-animating-without-extra-node='true']::after, .ant-click-animating-node {\n --antd-wave-shadow-color: "+t+";\n }",document.body.contains(a)||document.body.appendChild(a)),n&&e.appendChild(i),r.A.addStartEventListener(e,this.onTransitionStart),r.A.addEndEventListener(e,this.onTransitionEnd)}},onTransitionStart:function(e){if(!this.destroy){var t=this.$el;e&&e.target===t&&(this.animationStart||this.resetEffect(t))}},onTransitionEnd:function(e){e&&"fadeEffect"===e.animationName&&this.resetEffect(e.target)},getAttributeName:function(){var e=this.$props.insertExtraNode;return e?"ant-click-animating":"ant-click-animating-without-extra-node"},bindAnimationEvent:function(e){var t=this;if(e&&e.getAttribute&&!e.getAttribute("disabled")&&!(e.className.indexOf("disabled")>=0)){var n=function(n){if("INPUT"!==n.target.tagName&&!s(n.target)){t.resetEffect(e);var r=getComputedStyle(e).getPropertyValue("border-top-color")||getComputedStyle(e).getPropertyValue("border-color")||getComputedStyle(e).getPropertyValue("background-color");t.clickWaveTimeoutId=window.setTimeout(function(){return t.onClick(e,r)},0),i.A.cancel(t.animationStartId),t.animationStart=!0,t.animationStartId=(0,i.A)(function(){t.animationStart=!1},10)}};return e.addEventListener("click",n,!0),{cancel:function(){e.removeEventListener("click",n,!0)}}}},resetEffect:function(e){if(e&&e!==this.extraNode&&e instanceof Element){var t=this.$props.insertExtraNode,n=this.getAttributeName();e.setAttribute(n,"false"),a&&(a.innerHTML=""),t&&this.extraNode&&e.contains(this.extraNode)&&e.removeChild(this.extraNode),r.A.removeStartEventListener(e,this.onTransitionStart),r.A.removeEndEventListener(e,this.onTransitionEnd)}}},render:function(){return this.configProvider.csp&&(this.csp=this.configProvider.csp),this.$slots["default"]&&this.$slots["default"][0]}}},64274:function(e,t,n){"use strict";var r=n(44508),i=n(40255),o=n(46942),a=n.n(o),s=n(52315),c=n(4718),l=n(80178),u=n(15848),d=n(51927),h=n(25592),f=n(44807);function p(){}var m={type:c.A.oneOf(["success","info","warning","error"]),closable:c.A.bool,closeText:c.A.any,message:c.A.any,description:c.A.any,afterClose:c.A.func.def(p),showIcon:c.A.bool,iconType:c.A.string,prefixCls:c.A.string,banner:c.A.bool,icon:c.A.any},v={name:"AAlert",props:m,mixins:[s.A],inject:{configProvider:{default:function(){return h.f}}},data:function(){return{closing:!1,closed:!1}},methods:{handleClose:function(e){e.preventDefault();var t=this.$el;t.style.height=t.offsetHeight+"px",t.style.height=t.offsetHeight+"px",this.setState({closing:!0}),this.$emit("close",e)},animationEnd:function(){this.setState({closing:!1,closed:!0}),this.afterClose()}},render:function(){var e,t=arguments[0],n=this.prefixCls,o=this.banner,s=this.closing,c=this.closed,h=this.configProvider.getPrefixCls,f=h("alert",n),p=this.closable,m=this.type,v=this.showIcon,g=this.iconType,y=(0,u.nu)(this,"closeText"),_=(0,u.nu)(this,"description"),b=(0,u.nu)(this,"message"),M=(0,u.nu)(this,"icon");v=!(!o||void 0!==v)||v,m=o&&void 0===m?"warning":m||"info";var A="filled";if(!g){switch(m){case"success":g="check-circle";break;case"info":g="info-circle";break;case"error":g="close-circle";break;case"warning":g="exclamation-circle";break;default:g="default"}_&&(A="outlined")}y&&(p=!0);var w=a()(f,(e={},(0,r.A)(e,f+"-"+m,!0),(0,r.A)(e,f+"-closing",s),(0,r.A)(e,f+"-with-description",!!_),(0,r.A)(e,f+"-no-icon",!v),(0,r.A)(e,f+"-banner",!!o),(0,r.A)(e,f+"-closable",p),e)),x=p?t("button",{attrs:{type:"button",tabIndex:0},on:{click:this.handleClose},class:f+"-close-icon"},[y?t("span",{class:f+"-close-text"},[y]):t(i.A,{attrs:{type:"close"}})]):null,k=M&&((0,u.zO)(M)?(0,d.Ob)(M,{class:f+"-icon"}):t("span",{class:f+"-icon"},[M]))||t(i.A,{class:f+"-icon",attrs:{type:g,theme:A}}),L=(0,l.A)(f+"-slide-up",{appear:!1,afterLeave:this.animationEnd});return c?null:t("transition",L,[t("div",{directives:[{name:"show",value:!s}],class:w,attrs:{"data-show":!s}},[v?k:null,t("span",{class:f+"-message"},[b]),t("span",{class:f+"-description"},[_]),x])])},install:function(e){e.use(f.A),e.component(v.name,v)}};t.A=v},19120:function(e,t,n){"use strict";n(29229)},63956:function(e,t,n){"use strict";n.d(t,{A:function(){return b}});var r=n(97479),i=n(44508),o=n(85505),a=n(28781),s=n(68052),c=n(25824),l=n(57155),u=n(52040),d=n(4718),h=n(51927),f=n(15848);function p(){for(var e=arguments.length,t=Array(e),n=0;ni?o>=a?10+e:20+e:o<=a?10+e:e},onAnimated:function(){this.$emit("animated")},renderNumberList:function(e,t){for(var n=this.$createElement,r=[],i=0;i<30;i++)r.push(n("p",{key:i.toString(),class:u()(t,{current:e===i})},[i%10]));return r},renderCurrentNumber:function(e,t,n){var r=this.$createElement;if("number"===typeof t){var i=this.getPositionByNum(t,n),o=this.animateStarted||void 0===v(this.lastCount)[n],a={transition:o?"none":void 0,msTransform:"translateY("+100*-i+"%)",WebkitTransform:"translateY("+100*-i+"%)",transform:"translateY("+100*-i+"%)"};return r("span",{class:e+"-only",style:a,key:n},[this.renderNumberList(i,e+"-only-unit")])}return r("span",{key:"symbol",class:e+"-symbol"},[t])},renderNumberElement:function(e){var t=this,n=this.sCount;return n&&Number(n)%1===0?v(n).map(function(n,r){return t.renderCurrentNumber(e,n,r)}).reverse():n}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.title,r=this.component,i=void 0===r?"sup":r,o=this.displayComponent,a=this.className,c=this.configProvider.getPrefixCls,l=c("scroll-number",t);if(o)return(0,p.Ob)(o,{class:l+"-custom-component"});var d=(0,h.gd)(this,!0),m=(0,f.A)(this.$props,["count","component","prefixCls","displayComponent"]),v={props:(0,s.A)({},m),attrs:{title:n},style:d,class:u()(l,a)};return d&&d.borderColor&&(v.style.boxShadow="0 0 0 1px "+d.borderColor+" inset"),e(i,v,[this.renderNumberElement(l)])}},_=function(){for(var e=arguments.length,t=Array(e),n=0;ne?e+"+":t;return n},getDispayCount:function(){var e=this.isDot();return e?"":this.getNumberedDispayCount()},getScrollNumberTitle:function(){var e=this.$props.title,t=this.badgeCount;return e||("string"===typeof t||"number"===typeof t?t:void 0)},getStyleWithOffset:function(){var e=this.$props,t=e.offset,n=e.numberStyle;return t?(0,s.A)({right:-parseInt(t[0],10)+"px",marginTop:(0,A.A)(t[1])?t[1]+"px":t[1]},n):(0,s.A)({},n)},getBadgeClassName:function(e){var t,n=(0,h.Gk)(this.$slots["default"]),r=this.hasStatus();return u()(e,(t={},(0,a.A)(t,e+"-status",r),(0,a.A)(t,e+"-dot-status",r&&this.dot&&!this.isZero()),(0,a.A)(t,e+"-not-a-wrapper",!n.length),t))},hasStatus:function(){var e=this.$props,t=e.status,n=e.color;return!!t||!!n},isZero:function(){var e=this.getNumberedDispayCount();return"0"===e||0===e},isDot:function(){var e=this.$props.dot,t=this.isZero();return e&&!t||this.hasStatus()},isHidden:function(){var e=this.$props.showZero,t=this.getDispayCount(),n=this.isZero(),r=this.isDot(),i=null===t||void 0===t||""===t;return(i||n&&!e)&&!r},renderStatusText:function(e){var t=this.$createElement,n=this.$props.text,r=this.isHidden();return r||!n?null:t("span",{class:e+"-status-text"},[n])},renderDispayComponent:function(){var e=this.badgeCount,t=e;if(t&&"object"===("undefined"===typeof t?"undefined":(0,o.A)(t)))return(0,p.Ob)(t,{style:this.getStyleWithOffset()})},renderBadgeNumber:function(e,t){var n,r=this.$createElement,i=this.$props,o=i.status,s=i.color,c=this.badgeCount,l=this.getDispayCount(),u=this.isDot(),d=this.isHidden(),h=(n={},(0,a.A)(n,e+"-dot",u),(0,a.A)(n,e+"-count",!u),(0,a.A)(n,e+"-multiple-words",!u&&c&&c.toString&&c.toString().length>1),(0,a.A)(n,e+"-status-"+o,!!o),(0,a.A)(n,e+"-status-"+s,x(s)),n),f=this.getStyleWithOffset();return s&&!x(s)&&(f=f||{},f.background=s),d?null:r(y,{attrs:{prefixCls:t,"data-show":!d,className:h,count:l,displayComponent:this.renderDispayComponent(),title:this.getScrollNumberTitle()},directives:[{name:"show",value:!d}],style:f,key:"scrollNumber"})}},render:function(){var e,t=arguments[0],n=this.prefixCls,r=this.scrollNumberPrefixCls,o=this.status,s=this.text,c=this.color,l=this.$slots,d=this.configProvider.getPrefixCls,f=d("badge",n),p=d("scroll-number",r),m=(0,h.Gk)(l["default"]),v=(0,h.nu)(this,"count");Array.isArray(v)&&(v=v[0]),this.badgeCount=v;var g=this.renderBadgeNumber(f,p),y=this.renderStatusText(f),_=u()((e={},(0,a.A)(e,f+"-status-dot",this.hasStatus()),(0,a.A)(e,f+"-status-"+o,!!o),(0,a.A)(e,f+"-status-"+c,x(c)),e)),b={};if(c&&!x(c)&&(b.background=c),!m.length&&this.hasStatus()){var A=this.getStyleWithOffset(),w=A&&A.color;return t("span",i()([{on:(0,h.WM)(this)},{class:this.getBadgeClassName(f),style:A}]),[t("span",{class:_,style:b}),t("span",{style:{color:w},class:f+"-status-text"},[s])])}var k=(0,M.A)(m.length?f+"-zoom":"");return t("span",i()([{on:(0,h.WM)(this)},{class:this.getBadgeClassName(f)}]),[m,t("transition",k,[g]),y])}},L=n(44807);k.install=function(e){e.use(L.A),e.component(k.name,k)};var C=k},19807:function(e,t,n){"use strict";n(29229)},44807:function(e,t,n){"use strict";n.d(t,{A:function(){return u}});var r=n(24415),i=n(81593),o=n(35745),a=n(1406),s={install:function(e){e.use(r.A,{name:"ant-ref"}),(0,i.Qg)(e),(0,o.b)(e),(0,a.o)(e)}},c={},l=function(e){c.Vue=e,e.use(s)};c.install=l;var u=c},65847:function(e,t,n){"use strict";n.d(t,{A:function(){return _}});var r=n(32779),i=n(4718),o=n(51927),a=n(15848),s=n(36873),c=n(25592),l=n(57981),u=n(40255),d={name:"ABreadcrumbItem",__ANT_BREADCRUMB_ITEM:!0,props:{prefixCls:i.A.string,href:i.A.string,separator:i.A.any.def("/"),overlay:i.A.any},inject:{configProvider:{default:function(){return c.f}}},methods:{renderBreadcrumbNode:function(e,t){var n=this.$createElement,r=(0,a.nu)(this,"overlay");return r?n(l.A,{attrs:{overlay:r,placement:"bottomCenter"}},[n("span",{class:t+"-overlay-link"},[e,n(u.A,{attrs:{type:"down"}})])]):e}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.$slots,r=this.configProvider.getPrefixCls,i=r("breadcrumb",t),o=(0,a.nu)(this,"separator"),s=n["default"],c=void 0;return c=(0,a.cK)(this,"href")?e("a",{class:i+"-link"},[s]):e("span",{class:i+"-link"},[s]),c=this.renderBreadcrumbNode(c,i),s?e("span",[c,o&&""!==o&&e("span",{class:i+"-separator"},[o])]):null}},h=n(36457),f=i.A.shape({path:i.A.string,breadcrumbName:i.A.string,children:i.A.array}).loose,p={prefixCls:i.A.string,routes:i.A.arrayOf(f),params:i.A.any,separator:i.A.any,itemRender:i.A.func};function m(e,t){if(!e.breadcrumbName)return null;var n=Object.keys(t).join("|"),r=e.breadcrumbName.replace(new RegExp(":("+n+")","g"),function(e,n){return t[n]||e});return r}var v={name:"ABreadcrumb",props:p,inject:{configProvider:{default:function(){return c.f}}},methods:{defaultItemRender:function(e){var t=e.route,n=e.params,r=e.routes,i=e.paths,o=this.$createElement,a=r.indexOf(t)===r.length-1,s=m(t,n);return a?o("span",[s]):o("a",{attrs:{href:"#/"+i.join("/")}},[s])},getPath:function(e,t){return e=(e||"").replace(/^\//,""),Object.keys(t).forEach(function(n){e=e.replace(":"+n,t[n])}),e},addChildPath:function(e,t,n){var i=[].concat((0,r.A)(e)),o=this.getPath(t,n);return o&&i.push(o),i},genForRoutes:function(e){var t=this,n=e.routes,r=void 0===n?[]:n,i=e.params,o=void 0===i?{}:i,a=e.separator,s=e.itemRender,c=void 0===s?this.defaultItemRender:s,l=this.$createElement,u=[];return r.map(function(e){var n=t.getPath(e.path,o);n&&u.push(n);var i=null;return e.children&&e.children.length&&(i=l(h.Ay,[e.children.map(function(e){return l(h.Ay.Item,{key:e.path||e.breadcrumbName},[c({route:e,params:o,routes:r,paths:t.addChildPath(u,e.path,o),h:t.$createElement})])})])),l(d,{attrs:{overlay:i,separator:a},key:n||e.breadcrumbName},[c({route:e,params:o,routes:r,paths:u,h:t.$createElement})])})}},render:function(){var e=arguments[0],t=void 0,n=this.prefixCls,r=this.routes,i=this.params,c=void 0===i?{}:i,l=this.$slots,u=this.$scopedSlots,d=this.configProvider.getPrefixCls,h=d("breadcrumb",n),f=(0,a.Gk)(l["default"]),p=(0,a.nu)(this,"separator"),m=this.itemRender||u.itemRender||this.defaultItemRender;return r&&r.length>0?t=this.genForRoutes({routes:r,params:c,separator:p,itemRender:m}):f.length&&(t=f.map(function(e,t){return(0,s.A)((0,a.xr)(e).__ANT_BREADCRUMB_ITEM||(0,a.xr)(e).__ANT_BREADCRUMB_SEPARATOR,"Breadcrumb","Only accepts Breadcrumb.Item and Breadcrumb.Separator as it's children"),(0,o.Ob)(e,{props:{separator:p},key:t})})),e("div",{class:h},[t])}},g={name:"ABreadcrumbSeparator",__ANT_BREADCRUMB_SEPARATOR:!0,props:{prefixCls:i.A.string},inject:{configProvider:{default:function(){return c.f}}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.$slots,r=this.configProvider.getPrefixCls,i=r("breadcrumb",t),o=n["default"];return e("span",{class:i+"-separator"},[o||"/"])}},y=n(44807);v.Item=d,v.Separator=g,v.install=function(e){e.use(y.A),e.component(v.name,v),e.component(d.name,d),e.component(g.name,g)};var _=v},70093:function(e,t,n){"use strict";n(29229),n(1747),n(63713)},49872:function(e,t,n){"use strict";n.d(t,{E:function(){return s}});var r=n(44508),i=n(15848),o=n(4718),a=n(25592),s={prefixCls:o.A.string,size:{validator:function(e){return["small","large","default"].includes(e)}}};t.A={name:"AButtonGroup",props:s,inject:{configProvider:{default:function(){return a.f}}},data:function(){return{sizeMap:{large:"lg",small:"sm"}}},render:function(){var e,t=arguments[0],n=this.prefixCls,o=this.size,a=this.$slots,s=this.configProvider.getPrefixCls,c=s("btn-group",n),l="";switch(o){case"large":l="lg";break;case"small":l="sm";break;default:break}var u=(e={},(0,r.A)(e,""+c,!0),(0,r.A)(e,c+"-"+l,l),e);return t("div",{class:u},[(0,i.Gk)(a["default"])])}}},26997:function(e,t,n){"use strict";var r=n(4718);t.A=function(){return{prefixCls:r.A.string,type:r.A.string,htmlType:r.A.oneOf(["button","submit","reset"]).def("button"),icon:r.A.any,shape:r.A.oneOf(["circle","circle-outline","round"]),size:r.A.oneOf(["small","large","default"]).def("default"),loading:r.A.oneOfType([r.A.bool,r.A.object]),disabled:r.A.bool,ghost:r.A.bool,block:r.A.bool}}},49084:function(e,t,n){"use strict";n.d(t,{A:function(){return y}});var r=n(75189),i=n.n(r),o=n(85505),a=n(44508),s=n(98416),c=n(40255),l=n(26997),u=n(15848),d=n(25592),h=/^[\u4e00-\u9fa5]{2}$/,f=h.test.bind(h),p=(0,l.A)(),m={name:"AButton",inheritAttrs:!1,__ANT_BUTTON:!0,props:p,inject:{configProvider:{default:function(){return d.f}}},data:function(){return{sizeMap:{large:"lg",small:"sm"},sLoading:!!this.loading,hasTwoCNChar:!1}},computed:{classes:function(){var e,t=this.prefixCls,n=this.type,r=this.shape,i=this.size,o=this.hasTwoCNChar,s=this.sLoading,c=this.ghost,l=this.block,d=this.icon,h=this.$slots,f=this.configProvider.getPrefixCls,p=f("btn",t),m=!1!==this.configProvider.autoInsertSpaceInButton,v="";switch(i){case"large":v="lg";break;case"small":v="sm";break;default:break}var g=s?"loading":d,y=(0,u.Gk)(h["default"]);return e={},(0,a.A)(e,""+p,!0),(0,a.A)(e,p+"-"+n,n),(0,a.A)(e,p+"-"+r,r),(0,a.A)(e,p+"-"+v,v),(0,a.A)(e,p+"-icon-only",0===y.length&&g),(0,a.A)(e,p+"-loading",s),(0,a.A)(e,p+"-background-ghost",c||"ghost"===n),(0,a.A)(e,p+"-two-chinese-chars",o&&m),(0,a.A)(e,p+"-block",l),e}},watch:{loading:function(e,t){var n=this;t&&"boolean"!==typeof t&&clearTimeout(this.delayTimeout),e&&"boolean"!==typeof e&&e.delay?this.delayTimeout=setTimeout(function(){n.sLoading=!!e},e.delay):this.sLoading=!!e}},mounted:function(){this.fixTwoCNChar()},updated:function(){this.fixTwoCNChar()},beforeDestroy:function(){this.delayTimeout&&clearTimeout(this.delayTimeout)},methods:{fixTwoCNChar:function(){var e=this.$refs.buttonNode;if(e){var t=e.textContent;this.isNeedInserted()&&f(t)?this.hasTwoCNChar||(this.hasTwoCNChar=!0):this.hasTwoCNChar&&(this.hasTwoCNChar=!1)}},handleClick:function(e){var t=this.$data.sLoading;t||this.$emit("click",e)},insertSpace:function(e,t){var n=this.$createElement,r=t?" ":"";if("string"===typeof e.text){var i=e.text.trim();return f(i)&&(i=i.split("").join(r)),n("span",[i])}return e},isNeedInserted:function(){var e=this.$slots,t=this.type,n=(0,u.nu)(this,"icon");return e["default"]&&1===e["default"].length&&!n&&"link"!==t}},render:function(){var e=this,t=arguments[0],n=this.type,r=this.htmlType,a=this.classes,l=this.disabled,d=this.handleClick,h=this.sLoading,f=this.$slots,p=this.$attrs,m=(0,u.nu)(this,"icon"),v={attrs:(0,o.A)({},p,{disabled:l}),class:a,on:(0,o.A)({},(0,u.WM)(this),{click:d})},g=h?"loading":m,y=g?t(c.A,{attrs:{type:g}}):null,_=(0,u.Gk)(f["default"]),b=!1!==this.configProvider.autoInsertSpaceInButton,M=_.map(function(t){return e.insertSpace(t,e.isNeedInserted()&&b)});if(void 0!==p.href)return t("a",i()([v,{ref:"buttonNode"}]),[y,M]);var A=t("button",i()([v,{ref:"buttonNode",attrs:{type:r||"button"}}]),[y,M]);return"link"===n?A:t(s.A,[A])}},v=n(49872),g=n(44807);m.Group=v.A,m.install=function(e){e.use(g.A),e.component(m.name,m),e.component(v.A.name,v.A)};var y=m},27902:function(e,t,n){"use strict";n(29229)},73856:function(e,t,n){"use strict";n.d(t,{A:function(){return b}});var r=n(75189),i=n.n(r),o=n(85505),a=n(44508),s=n(90034),c=n(14248),l=n(812),u=n(29966),d=n(4718),h=n(15848),f=n(52315),p=n(25592),m=c.Ay.TabPane,v={name:"ACard",mixins:[f.A],props:{prefixCls:d.A.string,title:d.A.any,extra:d.A.any,bordered:d.A.bool.def(!0),bodyStyle:d.A.object,headStyle:d.A.object,loading:d.A.bool.def(!1),hoverable:d.A.bool.def(!1),type:d.A.string,size:d.A.oneOf(["default","small"]),actions:d.A.any,tabList:d.A.array,tabProps:d.A.object,tabBarExtraContent:d.A.any,activeTabKey:d.A.string,defaultActiveTabKey:d.A.string},inject:{configProvider:{default:function(){return p.f}}},data:function(){return{widerPadding:!1}},methods:{getAction:function(e){var t=this.$createElement,n=e.map(function(n,r){return t("li",{style:{width:100/e.length+"%"},key:"action-"+r},[t("span",[n])])});return n},onTabChange:function(e){this.$emit("tabChange",e)},isContainGrid:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=void 0;return e.forEach(function(e){e&&(0,h.xr)(e).__ANT_CARD_GRID&&(t=!0)}),t}},render:function(){var e,t,n=arguments[0],r=this.$props,d=r.prefixCls,f=r.headStyle,p=void 0===f?{}:f,v=r.bodyStyle,g=void 0===v?{}:v,y=r.loading,_=r.bordered,b=void 0===_||_,M=r.size,A=void 0===M?"default":M,w=r.type,x=r.tabList,k=r.tabProps,L=void 0===k?{}:k,C=r.hoverable,S=r.activeTabKey,z=r.defaultActiveTabKey,T=this.configProvider.getPrefixCls,O=T("card",d),H=this.$slots,D=this.$scopedSlots,Y=(0,h.nu)(this,"tabBarExtraContent"),V=(e={},(0,a.A)(e,""+O,!0),(0,a.A)(e,O+"-loading",y),(0,a.A)(e,O+"-bordered",b),(0,a.A)(e,O+"-hoverable",!!C),(0,a.A)(e,O+"-contain-grid",this.isContainGrid(H["default"])),(0,a.A)(e,O+"-contain-tabs",x&&x.length),(0,a.A)(e,O+"-"+A,"default"!==A),(0,a.A)(e,O+"-type-"+w,!!w),e),P=0===g.padding||"0px"===g.padding?{padding:24}:void 0,E=n("div",{class:O+"-loading-content",style:P},[n(l.A,{attrs:{gutter:8}},[n(u.A,{attrs:{span:22}},[n("div",{class:O+"-loading-block"})])]),n(l.A,{attrs:{gutter:8}},[n(u.A,{attrs:{span:8}},[n("div",{class:O+"-loading-block"})]),n(u.A,{attrs:{span:15}},[n("div",{class:O+"-loading-block"})])]),n(l.A,{attrs:{gutter:8}},[n(u.A,{attrs:{span:6}},[n("div",{class:O+"-loading-block"})]),n(u.A,{attrs:{span:18}},[n("div",{class:O+"-loading-block"})])]),n(l.A,{attrs:{gutter:8}},[n(u.A,{attrs:{span:13}},[n("div",{class:O+"-loading-block"})]),n(u.A,{attrs:{span:9}},[n("div",{class:O+"-loading-block"})])]),n(l.A,{attrs:{gutter:8}},[n(u.A,{attrs:{span:4}},[n("div",{class:O+"-loading-block"})]),n(u.A,{attrs:{span:3}},[n("div",{class:O+"-loading-block"})]),n(u.A,{attrs:{span:16}},[n("div",{class:O+"-loading-block"})])])]),j=void 0!==S,F={props:(0,o.A)({size:"large"},L,(t={},(0,a.A)(t,j?"activeKey":"defaultActiveKey",j?S:z),(0,a.A)(t,"tabBarExtraContent",Y),t)),on:{change:this.onTabChange},class:O+"-head-tabs"},I=void 0,$=x&&x.length?n(c.Ay,F,[x.map(function(e){var t=e.tab,r=e.scopedSlots,i=void 0===r?{}:r,o=i.tab,a=void 0!==t?t:D[o]?D[o](e):null;return n(m,{attrs:{tab:a,disabled:e.disabled},key:e.key})})]):null,R=(0,h.nu)(this,"title"),N=(0,h.nu)(this,"extra");(R||N||$)&&(I=n("div",{class:O+"-head",style:p},[n("div",{class:O+"-head-wrapper"},[R&&n("div",{class:O+"-head-title"},[R]),N&&n("div",{class:O+"-extra"},[N])]),$]));var W=H["default"],B=(0,h.nu)(this,"cover"),K=B?n("div",{class:O+"-cover"},[B]):null,U=n("div",{class:O+"-body",style:g},[y?E:W]),q=(0,h.Gk)(this.$slots.actions),G=q&&q.length?n("ul",{class:O+"-actions"},[this.getAction(q)]):null;return n("div",i()([{class:V,ref:"cardContainerRef"},{on:(0,s.A)((0,h.WM)(this),["tabChange","tab-change"])}]),[I,K,W?U:null,G])}},g={name:"ACardMeta",props:{prefixCls:d.A.string,title:d.A.any,description:d.A.any},inject:{configProvider:{default:function(){return p.f}}},render:function(){var e=arguments[0],t=this.$props.prefixCls,n=this.configProvider.getPrefixCls,r=n("card",t),o=(0,a.A)({},r+"-meta",!0),s=(0,h.nu)(this,"avatar"),c=(0,h.nu)(this,"title"),l=(0,h.nu)(this,"description"),u=s?e("div",{class:r+"-meta-avatar"},[s]):null,d=c?e("div",{class:r+"-meta-title"},[c]):null,f=l?e("div",{class:r+"-meta-description"},[l]):null,p=d||f?e("div",{class:r+"-meta-detail"},[d,f]):null;return e("div",i()([{on:(0,h.WM)(this)},{class:o}]),[u,p])}},y={name:"ACardGrid",__ANT_CARD_GRID:!0,props:{prefixCls:d.A.string,hoverable:d.A.bool},inject:{configProvider:{default:function(){return p.f}}},render:function(){var e,t=arguments[0],n=this.$props,r=n.prefixCls,o=n.hoverable,s=void 0===o||o,c=this.configProvider.getPrefixCls,l=c("card",r),u=(e={},(0,a.A)(e,l+"-grid",!0),(0,a.A)(e,l+"-grid-hoverable",s),e);return t("div",i()([{on:(0,h.WM)(this)},{class:u}]),[this.$slots["default"]])}},_=n(44807);v.Meta=g,v.Grid=y,v.install=function(e){e.use(_.A),e.component(v.name,v),e.component(g.name,g),e.component(y.name,y)};var b=v},85288:function(e,t,n){"use strict";n(29229),n(14686),n(12854),n(35184)},75842:function(e,t,n){"use strict";n.d(t,{A:function(){return M}});var r=n(75189),i=n.n(r),o=n(44508),a=n(85505),s=n(5748),c=n(4718),l=n(46942),u=n.n(l),d=n(68145),h=n(15848),f=n(25592),p=n(36873);function m(){}var v={name:"ACheckbox",inheritAttrs:!1,__ANT_CHECKBOX:!0,model:{prop:"checked"},props:{prefixCls:c.A.string,defaultChecked:c.A.bool,checked:c.A.bool,disabled:c.A.bool,isGroup:c.A.bool,value:c.A.any,name:c.A.string,id:c.A.string,indeterminate:c.A.bool,type:c.A.string.def("checkbox"),autoFocus:c.A.bool},inject:{configProvider:{default:function(){return f.f}},checkboxGroupContext:{default:function(){}}},watch:{value:function(e,t){var n=this;this.$nextTick(function(){var r=n.checkboxGroupContext,i=void 0===r?{}:r;i.registerValue&&i.cancelValue&&(i.cancelValue(t),i.registerValue(e))})}},mounted:function(){var e=this.value,t=this.checkboxGroupContext,n=void 0===t?{}:t;n.registerValue&&n.registerValue(e),(0,p.A)((0,h.Ay)(this,"checked")||this.checkboxGroupContext||!(0,h.Ay)(this,"value"),"Checkbox","`value` is not validate prop, do you mean `checked`?")},beforeDestroy:function(){var e=this.value,t=this.checkboxGroupContext,n=void 0===t?{}:t;n.cancelValue&&n.cancelValue(e)},methods:{handleChange:function(e){var t=e.target.checked;this.$emit("input",t),this.$emit("change",e)},focus:function(){this.$refs.vcCheckbox.focus()},blur:function(){this.$refs.vcCheckbox.blur()}},render:function(){var e,t=this,n=arguments[0],r=this.checkboxGroupContext,c=this.$slots,l=(0,h.Oq)(this),f=c["default"],p=(0,h.WM)(this),v=p.mouseenter,g=void 0===v?m:v,y=p.mouseleave,_=void 0===y?m:y,b=(p.input,(0,s.A)(p,["mouseenter","mouseleave","input"])),M=l.prefixCls,A=l.indeterminate,w=(0,s.A)(l,["prefixCls","indeterminate"]),x=this.configProvider.getPrefixCls,k=x("checkbox",M),L={props:(0,a.A)({},w,{prefixCls:k}),on:b,attrs:(0,h.Z0)(this)};r?(L.on.change=function(){for(var e=arguments.length,n=Array(e),i=0;i0&&(c=this.getOptions().map(function(r){return e(v,{attrs:{prefixCls:s,disabled:"disabled"in r?r.disabled:t.disabled,indeterminate:r.indeterminate,value:r.value,checked:-1!==n.sValue.indexOf(r.value)},key:r.value.toString(),on:{change:r.onChange||y},class:l+"-item"},[r.label])})),e("div",{class:l},[c])}},b=n(44807);v.Group=_,v.install=function(e){e.use(b.A),e.component(v.name,v),e.component(_.name,_)};var M=v},46925:function(e,t,n){"use strict";n(29229)},29966:function(e,t,n){"use strict";var r=n(43594),i=n(44807);r.Ay.install=function(e){e.use(i.A),e.component(r.Ay.name,r.Ay)},t.A=r.Ay},35184:function(e,t,n){"use strict";n(29229),n(67434)},34149:function(e,t,n){"use strict";n.d(t,{A:function(){return C}});var r=n(85505),i=n(44508),o=n(40703),a=n(15848),s=n(51927),c=n(4718),l=function(){return{prefixCls:c.A.string,activeKey:c.A.oneOfType([c.A.string,c.A.number,c.A.arrayOf(c.A.oneOfType([c.A.string,c.A.number]))]),defaultActiveKey:c.A.oneOfType([c.A.string,c.A.number,c.A.arrayOf(c.A.oneOfType([c.A.string,c.A.number]))]),accordion:c.A.bool,destroyInactivePanel:c.A.bool,bordered:c.A.bool,expandIcon:c.A.func,openAnimation:c.A.object,expandIconPosition:c.A.oneOf(["left","right"])}},u=function(){return{openAnimation:c.A.object,prefixCls:c.A.string,header:c.A.oneOfType([c.A.string,c.A.number,c.A.node]),headerClass:c.A.string,showArrow:c.A.bool,isActive:c.A.bool,destroyInactivePanel:c.A.bool,disabled:c.A.bool,accordion:c.A.bool,forceRender:c.A.bool,expandIcon:c.A.func,extra:c.A.any,panelKey:c.A.any}},d={name:"PanelContent",props:{prefixCls:c.A.string,isActive:c.A.bool,destroyInactivePanel:c.A.bool,forceRender:c.A.bool,role:c.A.any},data:function(){return{_isActive:void 0}},render:function(){var e,t=arguments[0];if(this._isActive=this.forceRender||this._isActive||this.isActive,!this._isActive)return null;var n=this.$props,r=n.prefixCls,o=n.isActive,a=n.destroyInactivePanel,s=n.forceRender,c=n.role,l=this.$slots,u=(e={},(0,i.A)(e,r+"-content",!0),(0,i.A)(e,r+"-content-active",o),e),d=s||o||!a?t("div",{class:r+"-content-box"},[l["default"]]):null;return t("div",{class:u,attrs:{role:c}},[d])}},h={name:"Panel",props:(0,a.CB)(u(),{showArrow:!0,isActive:!1,destroyInactivePanel:!1,headerClass:"",forceRender:!1}),methods:{handleItemClick:function(){this.$emit("itemClick",this.panelKey)},handleKeyPress:function(e){"Enter"!==e.key&&13!==e.keyCode&&13!==e.which||this.handleItemClick()}},render:function(){var e,t,n=arguments[0],o=this.$props,s=o.prefixCls,c=o.headerClass,l=o.isActive,u=o.showArrow,h=o.destroyInactivePanel,f=o.disabled,p=o.openAnimation,m=o.accordion,v=o.forceRender,g=o.expandIcon,y=o.extra,_=this.$slots,b={props:(0,r.A)({appear:!0,css:!1}),on:(0,r.A)({},p)},M=(e={},(0,i.A)(e,s+"-header",!0),(0,i.A)(e,c,c),e),A=(0,a.nu)(this,"header"),w=(t={},(0,i.A)(t,s+"-item",!0),(0,i.A)(t,s+"-item-active",l),(0,i.A)(t,s+"-item-disabled",f),t),x=n("i",{class:"arrow"});return u&&"function"===typeof g&&(x=g(this.$props)),n("div",{class:w,attrs:{role:"tablist"}},[n("div",{class:M,on:{click:this.handleItemClick.bind(this),keypress:this.handleKeyPress},attrs:{role:m?"tab":"button",tabIndex:f?-1:0,"aria-expanded":l}},[u&&x,A,y&&n("div",{class:s+"-extra"},[y])]),n("transition",b,[n(d,{directives:[{name:"show",value:l}],attrs:{prefixCls:s,isActive:l,destroyInactivePanel:h,forceRender:v,role:m?"tabpanel":null}},[_["default"]])])])}},f=n(32779),p=n(52315),m=n(75998);function v(e,t,n,r){var i=void 0;return(0,m.A)(e,n,{start:function(){t?(i=e.offsetHeight,e.style.height=0):e.style.height=e.offsetHeight+"px"},active:function(){e.style.height=(t?i:0)+"px"},end:function(){e.style.height="",r()}})}function g(e){return{enter:function(t,n){return v(t,!0,e+"-anim",n)},leave:function(t,n){return v(t,!1,e+"-anim",n)}}}var y=g;function _(e){var t=e;return Array.isArray(t)||(t=t?[t]:[]),t.map(function(e){return String(e)})}var b={name:"Collapse",mixins:[p.A],model:{prop:"activeKey",event:"change"},props:(0,a.CB)(l(),{prefixCls:"rc-collapse",accordion:!1,destroyInactivePanel:!1}),data:function(){var e=this.$props,t=e.activeKey,n=e.defaultActiveKey,r=e.openAnimation,i=e.prefixCls,o=n;(0,a.cK)(this,"activeKey")&&(o=t);var s=r||y(i);return{currentOpenAnimations:s,stateActiveKey:_(o)}},watch:{activeKey:function(e){this.setState({stateActiveKey:_(e)})},openAnimation:function(e){this.setState({currentOpenAnimations:e})}},methods:{onClickItem:function(e){var t=this.stateActiveKey;if(this.accordion)t=t[0]===e?[]:[e];else{t=[].concat((0,f.A)(t));var n=t.indexOf(e),r=n>-1;r?t.splice(n,1):t.push(e)}this.setActiveKey(t)},getNewChild:function(e,t){if(!(0,a.sG)(e)){var n=this.stateActiveKey,r=this.$props,i=r.prefixCls,o=r.accordion,c=r.destroyInactivePanel,l=r.expandIcon,u=e.key||String(t),d=(0,a.Ts)(e),h=d.header,f=d.headerClass,p=d.disabled,m=!1;m=o?n[0]===u:n.indexOf(u)>-1;var v={};p||""===p||(v={itemClick:this.onClickItem});var g={key:u,props:{panelKey:u,header:h,headerClass:f,isActive:m,prefixCls:i,destroyInactivePanel:c,openAnimation:this.currentOpenAnimations,accordion:o,expandIcon:l},on:v};return(0,s.Ob)(e,g)}},getItems:function(){var e=this,t=[];return this.$slots["default"]&&this.$slots["default"].forEach(function(n,r){t.push(e.getNewChild(n,r))}),t},setActiveKey:function(e){this.setState({stateActiveKey:e}),this.$emit("change",this.accordion?e[0]:e)}},render:function(){var e=arguments[0],t=this.$props,n=t.prefixCls,r=t.accordion,o=(0,i.A)({},n,!0);return e("div",{class:o,attrs:{role:r?"tablist":null}},[this.getItems()])}};b.Panel=h;var M=b,A=n(40255),w=n(25592),x={name:"ACollapse",model:{prop:"activeKey",event:"change"},props:(0,a.CB)(l(),{bordered:!0,openAnimation:o.A,expandIconPosition:"left"}),inject:{configProvider:{default:function(){return w.f}}},methods:{renderExpandIcon:function(e,t){var n=this.$createElement,r=(0,a.nu)(this,"expandIcon",e),i=r||n(A.A,{attrs:{type:"right",rotate:e.isActive?90:void 0}});return(0,a.zO)(Array.isArray(r)?i[0]:i)?(0,s.Ob)(i,{class:t+"-arrow"}):i}},render:function(){var e,t=this,n=arguments[0],o=this.prefixCls,s=this.bordered,c=this.expandIconPosition,l=this.configProvider.getPrefixCls,u=l("collapse",o),d=(e={},(0,i.A)(e,u+"-borderless",!s),(0,i.A)(e,u+"-icon-position-"+c,!0),e),h={props:(0,r.A)({},(0,a.Oq)(this),{prefixCls:u,expandIcon:function(e){return t.renderExpandIcon(e,u)}}),class:d,on:(0,a.WM)(this)};return n(M,h,[this.$slots["default"]])}},k={name:"ACollapsePanel",props:(0,r.A)({},u()),inject:{configProvider:{default:function(){return w.f}}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.showArrow,o=void 0===n||n,s=this.configProvider.getPrefixCls,c=s("collapse",t),l=(0,i.A)({},c+"-no-arrow",!o),u={props:(0,r.A)({},(0,a.Oq)(this),{prefixCls:c,extra:(0,a.nu)(this,"extra")}),class:l,on:(0,a.WM)(this)},d=(0,a.nu)(this,"header");return e(M.Panel,u,[this.$slots["default"],d?e("template",{slot:"header"},[d]):null])}},L=n(44807);x.Panel=k,x.install=function(e){e.use(L.A),e.component(x.name,x),e.component(k.name,k)};var C=x},82931:function(e,t,n){"use strict";n(29229)},25592:function(e,t,n){"use strict";n.d(t,{f:function(){return i}});var r=n(20761),i={getPrefixCls:function(e,t){return t||"ant-"+e},renderEmpty:r.A}},39161:function(e,t,n){"use strict";n.d(t,{A:function(){return b}});var r=n(85505),i=n(85471),o=n(4718),a=n(15848),s=n(20761),c=n(44807),l=n(95093),u=n(67287),d=n(96995),h=n(36873),f="internalMark";function p(e){e&&e.locale?(0,u.A)(l).locale(e.locale):(0,u.A)(l).locale("en")}var m={name:"ALocaleProvider",props:{locale:o.A.object.def(function(){return{}}),_ANT_MARK__:o.A.string},data:function(){return(0,h.A)(this._ANT_MARK__===f,"LocaleProvider","`LocaleProvider` is deprecated. Please use `locale` with `ConfigProvider` instead"),{antLocale:(0,r.A)({},this.locale,{exist:!0})}},provide:function(){return{localeData:this.$data}},watch:{locale:function(e){this.antLocale=(0,r.A)({},this.locale,{exist:!0}),p(e),(0,d.L)(e&&e.Modal)}},created:function(){var e=this.locale;p(e),(0,d.L)(e&&e.Modal)},beforeDestroy:function(){(0,d.L)()},render:function(){return this.$slots["default"]?this.$slots["default"][0]:null},install:function(e){e.use(c.A),e.component(m.name,m)}},v=m,g=n(38377);function y(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t={};return e.forEach(function(e){t[e]=function(t){this._proxyVm._data[e]=t}}),t}var _={name:"AConfigProvider",props:{getPopupContainer:o.A.func,prefixCls:o.A.string,renderEmpty:o.A.func,csp:o.A.object,autoInsertSpaceInButton:o.A.bool,locale:o.A.object,pageHeader:o.A.object,transformCellText:o.A.func},provide:function(){var e=this;return this._proxyVm=new i.Ay({data:function(){return(0,r.A)({},e.$props,{getPrefixCls:e.getPrefixCls,renderEmpty:e.renderEmptyComponent})}}),{configProvider:this._proxyVm._data}},watch:(0,r.A)({},y(["prefixCls","csp","autoInsertSpaceInButton","locale","pageHeader","transformCellText"])),methods:{renderEmptyComponent:function(e,t){var n=(0,a.nu)(this,"renderEmpty",{},!1)||s.A;return n(e,t)},getPrefixCls:function(e,t){var n=this.$props.prefixCls,r=void 0===n?"ant":n;return t||(e?r+"-"+e:r)},renderProvider:function(e){var t=this.$createElement;return t(v,{attrs:{locale:this.locale||e,_ANT_MARK__:f}},[this.$slots["default"]?(0,a.Gk)(this.$slots["default"])[0]:null])}},render:function(){var e=this,t=arguments[0];return t(g.A,{scopedSlots:{default:function(t,n,r){return e.renderProvider(r)}}})},install:function(e){e.use(c.A),e.component(_.name,_)}},b=_},20761:function(e,t,n){"use strict";var r=n(4718),i=n(2970),o=n(25592),a={functional:!0,inject:{configProvider:{default:function(){return o.f}}},props:{componentName:r.A.string},render:function(e,t){var n=arguments[0],r=t.props,o=t.injections;function a(e){var t=o.configProvider.getPrefixCls,r=t("empty");switch(e){case"Table":case"List":return n(i.Ay,{attrs:{image:i.Ay.PRESENTED_IMAGE_SIMPLE}});case"Select":case"TreeSelect":case"Cascader":case"Transfer":case"Mentions":return n(i.Ay,{attrs:{image:i.Ay.PRESENTED_IMAGE_SIMPLE},class:r+"-small"});default:return n(i.Ay)}}return a(r.componentName)}};function s(e,t){return e(a,{attrs:{componentName:t}})}t.A=s},10682:function(){},60031:function(e,t,n){"use strict";n.d(t,{A:function(){return en}});var r=n(85505),i=n(85471),o=n(24415),a=n(4718),s=n(52315),c=n(15848),l=n(51927),u=n(11207),d=n(95093),h=n.n(d),f={DATE_ROW_COUNT:6,DATE_COL_COUNT:7},p={functional:!0,render:function(e,t){for(var n=arguments[0],r=t.props,i=r.value,o=i.localeData(),a=r.prefixCls,s=[],c=[],l=o.firstDayOfWeek(),u=void 0,d=h()(),p=0;pt.year()?1:e.year()===t.year()&&e.month()>t.month()}function D(e){return"rc-calendar-"+e.year()+"-"+e.month()+"-"+e.date()}var Y={props:{contentRender:a.A.func,dateRender:a.A.func,disabledDate:a.A.func,prefixCls:a.A.string,selectedValue:a.A.oneOfType([a.A.any,a.A.arrayOf(a.A.any)]),value:a.A.object,hoverValue:a.A.any.def([]),showWeekNumber:a.A.bool},render:function(){var e=arguments[0],t=(0,c.Oq)(this),n=t.contentRender,r=t.prefixCls,i=t.selectedValue,o=t.value,a=t.showWeekNumber,s=t.dateRender,l=t.disabledDate,u=t.hoverValue,d=(0,c.WM)(this),h=d.select,p=void 0===h?z:h,v=d.dayHover,y=void 0===v?z:v,M=void 0,A=void 0,w=void 0,x=[],k=_(o),L=r+"-cell",C=r+"-week-number-cell",S=r+"-date",Y=r+"-today",V=r+"-selected-day",P=r+"-selected-date",E=r+"-selected-start-date",j=r+"-selected-end-date",F=r+"-in-range-cell",I=r+"-last-month-cell",$=r+"-next-month-btn-day",R=r+"-disabled-cell",N=r+"-disabled-cell-first-of-row",W=r+"-disabled-cell-last-of-row",B=r+"-last-day-of-month",K=o.clone();K.date(1);var U=K.day(),q=(U+7-o.localeData().firstDayOfWeek())%7,G=K.clone();G.add(0-q,"days");var J=0;for(M=0;M0&&(ie=x[J-1]);var oe=L,ae=!1,se=!1;T(w,k)&&(oe+=" "+Y,Q=!0);var ce=O(w,o),le=H(w,o);if(i&&Array.isArray(i)){var ue=u.length?u:i;if(!ce&&!le){var de=ue[0],he=ue[1];de&&T(w,de)&&(se=!0,te=!0,oe+=" "+E),(de||he)&&(T(w,he)?(se=!0,te=!0,oe+=" "+j):(null!==de&&void 0!==de||!w.isBefore(he,"day"))&&(null!==he&&void 0!==he||!w.isAfter(de,"day"))?w.isAfter(de,"day")&&w.isBefore(he,"day")&&(oe+=" "+F):oe+=" "+F)}}else T(w,o)&&(se=!0,te=!0);T(w,i)&&(oe+=" "+P),ce&&(oe+=" "+I),le&&(oe+=" "+$),w.clone().endOf("month").date()===w.date()&&(oe+=" "+B),l&&l(w,o)&&(ae=!0,ie&&l(ie,o)||(oe+=" "+N),re&&l(re,o)||(oe+=" "+W)),se&&(oe+=" "+V),ae&&(oe+=" "+R);var fe=void 0;if(s)fe=s(w,o);else{var pe=n?n(w,o):w.date();fe=e("div",{key:D(w),class:S,attrs:{"aria-selected":se,"aria-disabled":ae}},[pe])}ne.push(e("td",{key:J,on:{click:ae?z:p.bind(null,w),mouseenter:ae?z:y.bind(null,w)},attrs:{role:"gridcell",title:b(w)},class:oe},[fe])),J++}X.push(e("tr",{key:M,attrs:{role:"row"},class:g()((Z={},(0,m.A)(Z,r+"-current-week",Q),(0,m.A)(Z,r+"-active-week",te),Z))},[ee,ne]))}return e("tbody",{class:r+"-tbody"},[X])}},V=Y,P={functional:!0,render:function(e,t){var n=arguments[0],r=t.props,i=t.listeners,o=void 0===i?{}:i,a=r.prefixCls,s={props:r,on:o};return n("table",{class:a+"-table",attrs:{cellSpacing:"0",role:"grid"}},[n(p,s),n(V,s)])}},E=4,j=3;function F(){}var I={name:"MonthTable",mixins:[s.A],props:{cellRender:a.A.func,prefixCls:a.A.string,value:a.A.object,locale:a.A.any,contentRender:a.A.any,disabledDate:a.A.func},data:function(){return{sValue:this.value}},watch:{value:function(e){this.setState({sValue:e})}},methods:{setAndSelectValue:function(e){this.setState({sValue:e}),this.__emit("select",e)},chooseMonth:function(e){var t=this.sValue.clone();t.month(e),this.setAndSelectValue(t)},months:function(){for(var e=this.sValue,t=e.clone(),n=[],r=0,i=0;id),i),c=q;return c=r.yeard?e.nextDecade:J.bind(e,r.year),t("td",{attrs:{role:"gridcell",title:r.title},key:r.content,on:{click:o?q:c},class:s},[t("a",{class:h+"-year"},[r.content])])});return t("tr",{key:i,attrs:{role:"row"}},[o])}),v=i&&i("year");return t("div",{class:h},[t("div",[t("div",{class:h+"-header"},[t("a",{class:h+"-prev-decade-btn",attrs:{role:"button",title:r.previousDecade},on:{click:this.previousDecade}}),t("a",{class:h+"-decade-select",attrs:{role:"button",title:r.decadeSelect},on:{click:a}},[t("span",{class:h+"-decade-select-content"},[u,"-",d]),t("span",{class:h+"-decade-select-arrow"},["x"])]),t("a",{class:h+"-next-decade-btn",attrs:{role:"button",title:r.nextDecade},on:{click:this.nextDecade}})]),t("div",{class:h+"-body"},[t("table",{class:h+"-table",attrs:{cellSpacing:"0",role:"grid"}},[t("tbody",{class:h+"-tbody"},[p])])]),v&&t("div",{class:h+"-footer"},[v])])])}},Z=4,Q=3;function ee(){}function te(e){var t=this.sValue.clone();t.add(e,"years"),this.setState({sValue:t})}function ne(e,t){var n=this.sValue.clone();n.year(e),n.month(this.sValue.month()),this.__emit("select",n),t.preventDefault()}var re={mixins:[s.A],props:{locale:a.A.object,value:a.A.object,defaultValue:a.A.object,rootPrefixCls:a.A.string,renderFooter:a.A.func},data:function(){return this.nextCentury=te.bind(this,100),this.previousCentury=te.bind(this,-100),{sValue:this.value||this.defaultValue}},watch:{value:function(e){this.sValue=e}},render:function(){for(var e=this,t=arguments[0],n=this.sValue,r=this.$props,i=r.locale,o=r.renderFooter,a=n.year(),s=100*parseInt(a/100,10),c=s-10,l=s+99,u=[],d=0,h=this.rootPrefixCls+"-decade-panel",f=0;fl,d=(r={},(0,m.A)(r,h+"-cell",1),(0,m.A)(r,h+"-selected-cell",i<=a&&a<=o),(0,m.A)(r,h+"-last-century-cell",c),(0,m.A)(r,h+"-next-century-cell",u),r),f=i+"-"+o,p=ee;return p=c?e.previousCentury:u?e.nextCentury:ne.bind(e,i),t("td",{key:i,on:{click:p},attrs:{role:"gridcell"},class:d},[t("a",{class:h+"-decade"},[f])])});return t("tr",{key:r,attrs:{role:"row"}},[i])});return t("div",{class:h},[t("div",{class:h+"-header"},[t("a",{class:h+"-prev-century-btn",attrs:{role:"button",title:i.previousCentury},on:{click:this.previousCentury}}),t("div",{class:h+"-century"},[s,"-",l]),t("a",{class:h+"-next-century-btn",attrs:{role:"button",title:i.nextCentury},on:{click:this.nextCentury}})]),t("div",{class:h+"-body"},[t("table",{class:h+"-table",attrs:{cellSpacing:"0",role:"grid"}},[t("tbody",{class:h+"-tbody"},[_])])]),y&&t("div",{class:h+"-footer"},[y])])}};function ie(){}function oe(e){var t=this.value.clone();t.add(e,"months"),this.__emit("valueChange",t)}function ae(e){var t=this.value.clone();t.add(e,"years"),this.__emit("valueChange",t)}function se(e,t){return e?t:null}var ce={name:"CalendarHeader",mixins:[s.A],props:{prefixCls:a.A.string,value:a.A.object,showTimePicker:a.A.bool,locale:a.A.object,enablePrev:a.A.any.def(1),enableNext:a.A.any.def(1),disabledMonth:a.A.func,mode:a.A.any,monthCellRender:a.A.func,monthCellContentRender:a.A.func,renderFooter:a.A.func},data:function(){return this.nextMonth=oe.bind(this,1),this.previousMonth=oe.bind(this,-1),this.nextYear=ae.bind(this,1),this.previousYear=ae.bind(this,-1),{yearPanelReferer:null}},methods:{onMonthSelect:function(e){this.__emit("panelChange",e,"date"),(0,c.WM)(this).monthSelect?this.__emit("monthSelect",e):this.__emit("valueChange",e)},onYearSelect:function(e){var t=this.yearPanelReferer;this.setState({yearPanelReferer:null}),this.__emit("panelChange",e,t),this.__emit("valueChange",e)},onDecadeSelect:function(e){this.__emit("panelChange",e,"year"),this.__emit("valueChange",e)},changeYear:function(e){e>0?this.nextYear():this.previousYear()},monthYearElement:function(e){var t=this,n=this.$createElement,r=this.$props,i=r.prefixCls,o=r.locale,a=r.value,s=a.localeData(),c=o.monthBeforeYear,l=i+"-"+(c?"my-select":"ym-select"),u=e?" "+i+"-time-status":"",d=n("a",{class:i+"-year-select"+u,attrs:{role:"button",title:e?null:o.yearSelect},on:{click:e?ie:function(){return t.showYearPanel("date")}}},[a.format(o.yearFormat)]),h=n("a",{class:i+"-month-select"+u,attrs:{role:"button",title:e?null:o.monthSelect},on:{click:e?ie:this.showMonthPanel}},[o.monthFormat?a.format(o.monthFormat):s.monthsShort(a)]),f=void 0;e&&(f=n("a",{class:i+"-day-select"+u,attrs:{role:"button"}},[a.format(o.dayFormat)]));var p=[];return p=c?[h,f,d]:[d,h,f],n("span",{class:l},[p])},showMonthPanel:function(){this.__emit("panelChange",null,"month")},showYearPanel:function(e){this.setState({yearPanelReferer:e}),this.__emit("panelChange",null,"year")},showDecadePanel:function(){this.__emit("panelChange",null,"decade")}},render:function(){var e=this,t=arguments[0],n=(0,c.Oq)(this),r=n.prefixCls,i=n.locale,o=n.mode,a=n.value,s=n.showTimePicker,l=n.enableNext,u=n.enablePrev,d=n.disabledMonth,h=n.renderFooter,f=null;return"month"===o&&(f=t(B,{attrs:{locale:i,value:a,rootPrefixCls:r,disabledDate:d,cellRender:n.monthCellRender,contentRender:n.monthCellContentRender,renderFooter:h,changeYear:this.changeYear},on:{select:this.onMonthSelect,yearPanelShow:function(){return e.showYearPanel("month")}}})),"year"===o&&(f=t(X,{attrs:{locale:i,value:a,rootPrefixCls:r,renderFooter:h,disabledDate:d},on:{select:this.onYearSelect,decadePanelShow:this.showDecadePanel}})),"decade"===o&&(f=t(re,{attrs:{locale:i,value:a,rootPrefixCls:r,renderFooter:h},on:{select:this.onDecadeSelect}})),t("div",{class:r+"-header"},[t("div",{style:{position:"relative"}},[se(u&&!s,t("a",{class:r+"-prev-year-btn",attrs:{role:"button",title:i.previousYear},on:{click:this.previousYear}})),se(u&&!s,t("a",{class:r+"-prev-month-btn",attrs:{role:"button",title:i.previousMonth},on:{click:this.previousMonth}})),this.monthYearElement(s),se(l&&!s,t("a",{class:r+"-next-month-btn",on:{click:this.nextMonth},attrs:{title:i.nextMonth}})),se(l&&!s,t("a",{class:r+"-next-year-btn",on:{click:this.nextYear},attrs:{title:i.nextYear}}))]),f])}},le=ce,ue=n(75189),de=n.n(ue);function he(){}var fe={functional:!0,render:function(e,t){var n=arguments[0],r=t.props,i=t.listeners,o=void 0===i?{}:i,a=r.prefixCls,s=r.locale,c=r.value,l=r.timePicker,u=r.disabled,d=r.disabledDate,h=r.text,f=o.today,p=void 0===f?he:f,m=(!h&&l?s.now:h)||s.today,v=d&&!C(_(c),d),g=v||u,y=g?a+"-today-btn-disabled":"";return n("a",{class:a+"-today-btn "+y,attrs:{role:"button",title:M(c)},on:{click:g?he:p}},[m])}};function pe(){}var me={functional:!0,render:function(e,t){var n=arguments[0],r=t.props,i=t.listeners,o=void 0===i?{}:i,a=r.prefixCls,s=r.locale,c=r.okDisabled,l=o.ok,u=void 0===l?pe:l,d=a+"-ok-btn";return c&&(d+=" "+a+"-ok-btn-disabled"),n("a",{class:d,attrs:{role:"button"},on:{click:c?pe:u}},[s.ok])}};function ve(){}var ge={functional:!0,render:function(e,t){var n,r=t.props,i=t.listeners,o=void 0===i?{}:i,a=r.prefixCls,s=r.locale,c=r.showTimePicker,l=r.timePickerDisabled,u=o.closeTimePicker,d=void 0===u?ve:u,h=o.openTimePicker,f=void 0===h?ve:h,p=(n={},(0,m.A)(n,a+"-time-picker-btn",!0),(0,m.A)(n,a+"-time-picker-btn-disabled",l),n),v=ve;return l||(v=c?d:f),e("a",{class:p,attrs:{role:"button"},on:{click:v}},[c?s.dateSelect:s.timeSelect])}},ye={mixins:[s.A],props:{prefixCls:a.A.string,showDateInput:a.A.bool,disabledTime:a.A.any,timePicker:a.A.any,selectedValue:a.A.any,showOk:a.A.bool,value:a.A.object,renderFooter:a.A.func,defaultValue:a.A.object,locale:a.A.object,showToday:a.A.bool,disabledDate:a.A.func,showTimePicker:a.A.bool,okDisabled:a.A.bool,mode:a.A.string},methods:{onSelect:function(e){this.__emit("select",e)},getRootDOMNode:function(){return this.$el}},render:function(){var e=arguments[0],t=(0,c.Oq)(this),n=t.value,i=t.prefixCls,o=t.showOk,a=t.timePicker,s=t.renderFooter,l=t.showToday,u=t.mode,d=null,h=s&&s(u);if(l||a||h){var f,p={props:(0,r.A)({},t,{value:n}),on:(0,c.WM)(this)},v=null;l&&(v=e(fe,de()([{key:"todayButton"},p]))),delete p.props.value;var g=null;(!0===o||!1!==o&&a)&&(g=e(me,de()([{key:"okButton"},p])));var y=null;a&&(y=e(ge,de()([{key:"timePickerButton"},p])));var _=void 0;(v||y||g||h)&&(_=e("span",{class:i+"-footer-btn"},[h,v,y,g]));var b=(f={},(0,m.A)(f,i+"-footer",!0),(0,m.A)(f,i+"-footer-show-ok",!!g),f);d=e("div",{class:b},[_])}return d}},_e=ye;function be(){}function Me(e){var t=void 0;return t=e?_(e):h()(),t}function Ae(e){return Array.isArray(e)?0===e.length||-1!==e.findIndex(function(e){return void 0===e||h().isMoment(e)}):void 0===e||h().isMoment(e)}var we=a.A.custom(Ae),xe={mixins:[s.A],name:"CalendarMixinWrapper",props:{value:we,defaultValue:we},data:function(){var e=this.$props,t=e.value||e.defaultValue||Me();return{sValue:t,sSelectedValue:e.selectedValue||e.defaultSelectedValue}},watch:{value:function(e){var t=e||this.defaultValue||Me(this.sValue);this.setState({sValue:t})},selectedValue:function(e){this.setState({sSelectedValue:e})}},methods:{onSelect:function(e,t){e&&this.setValue(e),this.setSelectedValue(e,t)},renderRoot:function(e){var t,n=this.$createElement,r=this.$props,i=r.prefixCls,o=(t={},(0,m.A)(t,i,1),(0,m.A)(t,i+"-hidden",!r.visible),(0,m.A)(t,e["class"],!!e["class"]),t);return n("div",{ref:"rootInstance",class:o,attrs:{tabIndex:"0"},on:{keydown:this.onKeyDown||be,blur:this.onBlur||be}},[e.children])},setSelectedValue:function(e,t){(0,c.cK)(this,"selectedValue")||this.setState({sSelectedValue:e}),this.__emit("select",e,t)},setValue:function(e){var t=this.sValue;(0,c.cK)(this,"value")||this.setState({sValue:e}),(t&&e&&!t.isSame(e)||!t&&e||t&&!e)&&this.__emit("change",e)},isAllowedDate:function(e){var t=this.disabledDate,n=this.disabledTime;return C(e,t,n)}}},ke=xe,Le={methods:{getFormat:function(){var e=this.format,t=this.locale,n=this.timePicker;return e||(e=n?t.dateTimeFormat:t.dateFormat),e},focus:function(){this.focusElement?this.focusElement.focus():this.$refs.rootInstance&&this.$refs.rootInstance.focus()},saveFocusElement:function(e){this.focusElement=e}}},Ce=void 0,Se=void 0,ze=void 0,Te={mixins:[s.A],props:{prefixCls:a.A.string,timePicker:a.A.object,value:a.A.object,disabledTime:a.A.any,format:a.A.oneOfType([a.A.string,a.A.arrayOf(a.A.string),a.A.func]),locale:a.A.object,disabledDate:a.A.func,placeholder:a.A.string,selectedValue:a.A.object,clearIcon:a.A.any,inputMode:a.A.string,inputReadOnly:a.A.bool},data:function(){var e=this.selectedValue;return{str:S(e,this.format),invalid:!1,hasFocus:!1}},watch:{selectedValue:function(){this.setState()},format:function(){this.setState()}},updated:function(){var e=this;this.$nextTick(function(){!ze||!e.$data.hasFocus||e.invalid||0===Ce&&0===Se||ze.setSelectionRange(Ce,Se)})},getInstance:function(){return ze},methods:{getDerivedStateFromProps:function(e,t){var n={};ze&&(Ce=ze.selectionStart,Se=ze.selectionEnd);var r=e.selectedValue;return t.hasFocus||(n={str:S(r,this.format),invalid:!1}),n},onClear:function(){this.setState({str:""}),this.__emit("clear",null)},onInputChange:function(e){var t=e.target,n=t.value,r=t.composing,i=this.str,o=void 0===i?"":i;if(!e.isComposing&&!r&&o!==n){var a=this.$props,s=a.disabledDate,c=a.format,l=a.selectedValue;if(!n)return this.__emit("change",null),void this.setState({invalid:!1,str:n});var u=h()(n,c,!0);if(u.isValid()){var d=this.value.clone();d.year(u.year()).month(u.month()).date(u.date()).hour(u.hour()).minute(u.minute()).second(u.second()),!d||s&&s(d)?this.setState({invalid:!0,str:n}):(l!==d||l&&d&&!l.isSame(d))&&(this.setState({invalid:!1,str:n}),this.__emit("change",d))}else this.setState({invalid:!0,str:n})}},onFocus:function(){this.setState({hasFocus:!0})},onBlur:function(){this.setState(function(e,t){return{hasFocus:!1,str:S(t.value,t.format)}})},onKeyDown:function(e){var t=e.keyCode,n=this.$props,r=n.value,i=n.disabledDate;if(t===u.A.ENTER){var o=!i||!i(r);o&&this.__emit("select",r.clone()),e.preventDefault()}},getRootDOMNode:function(){return this.$el},focus:function(){ze&&ze.focus()},saveDateInput:function(e){ze=e}},render:function(){var e=arguments[0],t=this.invalid,n=this.str,r=this.locale,i=this.prefixCls,o=this.placeholder,a=this.disabled,s=this.showClear,l=this.inputMode,u=this.inputReadOnly,d=(0,c.nu)(this,"clearIcon"),h=t?i+"-input-invalid":"";return e("div",{class:i+"-input-wrap"},[e("div",{class:i+"-date-input-wrap"},[e("input",de()([{directives:[{name:"ant-ref",value:this.saveDateInput},{name:"ant-input"}]},{class:i+"-input "+h,domProps:{value:n},attrs:{disabled:a,placeholder:o,inputMode:l,readOnly:u},on:{input:this.onInputChange,keydown:this.onKeyDown,focus:this.onFocus,blur:this.onBlur}}]))]),s?e("a",{attrs:{role:"button",title:r.clear},on:{click:this.onClear}},[d||e("span",{class:i+"-clear-btn"})]):null])}},Oe=Te,He=n(99876);function De(e){return e.clone().startOf("month")}function Ye(e){return e.clone().endOf("month")}function Ve(e,t,n){return e.clone().add(t,n)}function Pe(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n=arguments[2];return e.some(function(e){return e.isSame(t,n)})}var Ee=function(e){return!(!h().isMoment(e)||!e.isValid())&&e},je={name:"Calendar",props:{locale:a.A.object.def(He.A),format:a.A.oneOfType([a.A.string,a.A.arrayOf(a.A.string),a.A.func]),visible:a.A.bool.def(!0),prefixCls:a.A.string.def("rc-calendar"),defaultValue:a.A.object,value:a.A.object,selectedValue:a.A.object,defaultSelectedValue:a.A.object,mode:a.A.oneOf(["time","date","month","year","decade"]),showDateInput:a.A.bool.def(!0),showWeekNumber:a.A.bool,showToday:a.A.bool.def(!0),showOk:a.A.bool,timePicker:a.A.any,dateInputPlaceholder:a.A.any,disabledDate:a.A.func,disabledTime:a.A.any,dateRender:a.A.func,renderFooter:a.A.func.def(function(){return null}),renderSidebar:a.A.func.def(function(){return null}),clearIcon:a.A.any,focusablePanel:a.A.bool.def(!0),inputMode:a.A.string,inputReadOnly:a.A.bool},mixins:[s.A,Le,ke],data:function(){var e=this.$props;return{sMode:this.mode||"date",sValue:Ee(e.value)||Ee(e.defaultValue)||h()(),sSelectedValue:e.selectedValue||e.defaultSelectedValue}},watch:{mode:function(e){this.setState({sMode:e})},value:function(e){this.setState({sValue:Ee(e)||Ee(this.defaultValue)||Me(this.sValue)})},selectedValue:function(e){this.setState({sSelectedValue:e})}},mounted:function(){var e=this;this.$nextTick(function(){e.saveFocusElement(Oe.getInstance())})},methods:{onPanelChange:function(e,t){var n=this.sValue;(0,c.cK)(this,"mode")||this.setState({sMode:t}),this.__emit("panelChange",e||n,t)},onKeyDown:function(e){if("input"!==e.target.nodeName.toLowerCase()){var t=e.keyCode,n=e.ctrlKey||e.metaKey,r=this.disabledDate,i=this.sValue;switch(t){case u.A.DOWN:return this.goTime(1,"weeks"),e.preventDefault(),1;case u.A.UP:return this.goTime(-1,"weeks"),e.preventDefault(),1;case u.A.LEFT:return n?this.goTime(-1,"years"):this.goTime(-1,"days"),e.preventDefault(),1;case u.A.RIGHT:return n?this.goTime(1,"years"):this.goTime(1,"days"),e.preventDefault(),1;case u.A.HOME:return this.setValue(De(i)),e.preventDefault(),1;case u.A.END:return this.setValue(Ye(i)),e.preventDefault(),1;case u.A.PAGE_DOWN:return this.goTime(1,"month"),e.preventDefault(),1;case u.A.PAGE_UP:return this.goTime(-1,"month"),e.preventDefault(),1;case u.A.ENTER:return r&&r(i)||this.onSelect(i,{source:"keyboard"}),e.preventDefault(),1;default:return this.__emit("keydown",e),1}}},onClear:function(){this.onSelect(null),this.__emit("clear")},onOk:function(){var e=this.sSelectedValue;this.isAllowedDate(e)&&this.__emit("ok",e)},onDateInputChange:function(e){this.onSelect(e,{source:"dateInput"})},onDateInputSelect:function(e){this.onSelect(e,{source:"dateInputSelect"})},onDateTableSelect:function(e){var t=this.timePicker,n=this.sSelectedValue;if(!n&&t){var r=(0,c.Oq)(t),i=r.defaultValue;i&&w(i,e)}this.onSelect(e)},onToday:function(){var e=this.sValue,t=_(e);this.onSelect(t,{source:"todayButton"})},onBlur:function(e){var t=this;setTimeout(function(){var n=Oe.getInstance(),r=t.rootInstance;!r||r.contains(document.activeElement)||n&&n.contains(document.activeElement)||t.$emit("blur",e)},0)},getRootDOMNode:function(){return this.$el},openTimePicker:function(){this.onPanelChange(null,"time")},closeTimePicker:function(){this.onPanelChange(null,"date")},goTime:function(e,t){this.setValue(Ve(this.sValue,e,t))}},render:function(){var e=arguments[0],t=this.locale,n=this.prefixCls,i=this.disabledDate,o=this.dateInputPlaceholder,a=this.timePicker,s=this.disabledTime,u=this.showDateInput,d=this.sValue,h=this.sSelectedValue,f=this.sMode,p=this.renderFooter,m=this.inputMode,v=this.inputReadOnly,g=this.monthCellRender,y=this.monthCellContentRender,_=this.$props,b=(0,c.nu)(this,"clearIcon"),M="time"===f,A=M&&s&&a?x(h,s):null,w=null;if(a&&M){var k=(0,c.Oq)(a),L={props:(0,r.A)({showHour:!0,showSecond:!0,showMinute:!0},k,A,{value:h,disabledTime:s}),on:{change:this.onDateInputChange}};void 0!==k.defaultValue&&(L.props.defaultOpenValue=k.defaultValue),w=(0,l.Ob)(a,L)}var C=u?e(Oe,{attrs:{format:this.getFormat(),value:d,locale:t,placeholder:o,showClear:!0,disabledTime:s,disabledDate:i,prefixCls:n,selectedValue:h,clearIcon:b,inputMode:m,inputReadOnly:v},key:"date-input",on:{clear:this.onClear,change:this.onDateInputChange,select:this.onDateInputSelect}}):null,S=[];return _.renderSidebar&&S.push(_.renderSidebar()),S.push(e("div",{class:n+"-panel",key:"panel"},[C,e("div",{attrs:{tabIndex:_.focusablePanel?0:void 0},class:n+"-date-panel"},[e(le,{attrs:{locale:t,mode:f,value:d,disabledMonth:i,renderFooter:p,showTimePicker:M,prefixCls:n,monthCellRender:g,monthCellContentRender:y},on:{valueChange:this.setValue,panelChange:this.onPanelChange}}),a&&M?e("div",{class:n+"-time-picker"},[e("div",{class:n+"-time-picker-panel"},[w])]):null,e("div",{class:n+"-body"},[e(P,{attrs:{locale:t,value:d,selectedValue:h,prefixCls:n,dateRender:_.dateRender,disabledDate:i,showWeekNumber:_.showWeekNumber},on:{select:this.onDateTableSelect}})]),e(_e,{attrs:{showOk:_.showOk,mode:f,renderFooter:_.renderFooter,locale:t,prefixCls:n,showToday:_.showToday,disabledTime:s,showTimePicker:M,showDateInput:_.showDateInput,timePicker:a,selectedValue:h,timePickerDisabled:!h,value:d,disabledDate:i,okDisabled:!1!==_.showOk&&(!h||!this.isAllowedDate(h))},on:{ok:this.onOk,select:this.onSelect,today:this.onToday,openTimePicker:this.openTimePicker,closeTimePicker:this.closeTimePicker}})])])),this.renderRoot({children:S,class:_.showWeekNumber?n+"-week-number":""})}},Fe=je,Ie=Fe;i.Ay.use(o.A,{name:"ant-ref"});var $e=Ie,Re={name:"MonthCalendar",props:{locale:a.A.object.def(He.A),format:a.A.string,visible:a.A.bool.def(!0),prefixCls:a.A.string.def("rc-calendar"),monthCellRender:a.A.func,value:a.A.object,defaultValue:a.A.object,selectedValue:a.A.object,defaultSelectedValue:a.A.object,disabledDate:a.A.func,monthCellContentRender:a.A.func,renderFooter:a.A.func.def(function(){return null}),renderSidebar:a.A.func.def(function(){return null})},mixins:[s.A,Le,ke],data:function(){var e=this.$props;return{mode:"month",sValue:e.value||e.defaultValue||h()(),sSelectedValue:e.selectedValue||e.defaultSelectedValue}},methods:{onKeyDown:function(e){var t=e.keyCode,n=e.ctrlKey||e.metaKey,r=this.sValue,i=this.disabledDate,o=r;switch(t){case u.A.DOWN:o=r.clone(),o.add(3,"months");break;case u.A.UP:o=r.clone(),o.add(-3,"months");break;case u.A.LEFT:o=r.clone(),n?o.add(-1,"years"):o.add(-1,"months");break;case u.A.RIGHT:o=r.clone(),n?o.add(1,"years"):o.add(1,"months");break;case u.A.ENTER:return i&&i(r)||this.onSelect(r),e.preventDefault(),1;default:return}if(o!==r)return this.setValue(o),e.preventDefault(),1},handlePanelChange:function(e,t){"date"!==t&&this.setState({mode:t})}},render:function(){var e=arguments[0],t=this.mode,n=this.sValue,r=this.$props,i=this.$scopedSlots,o=r.prefixCls,a=r.locale,s=r.disabledDate,c=this.monthCellRender||i.monthCellRender,l=this.monthCellContentRender||i.monthCellContentRender,u=this.renderFooter||i.renderFooter,d=e("div",{class:o+"-month-calendar-content"},[e("div",{class:o+"-month-header-wrap"},[e(le,{attrs:{prefixCls:o,mode:t,value:n,locale:a,disabledMonth:s,monthCellRender:c,monthCellContentRender:l},on:{monthSelect:this.onSelect,valueChange:this.setValue,panelChange:this.handlePanelChange}})]),e(_e,{attrs:{prefixCls:o,renderFooter:u}})]);return this.renderRoot({class:r.prefixCls+"-month-calendar",children:d})}},Ne=Re,We=n(90179),Be=n.n(We),Ke=n(51129),Ue={adjustX:1,adjustY:1},qe=[0,0],Ge={bottomLeft:{points:["tl","tl"],overflow:Ue,offset:[0,-3],targetOffset:qe},bottomRight:{points:["tr","tr"],overflow:Ue,offset:[0,-3],targetOffset:qe},topRight:{points:["br","br"],overflow:Ue,offset:[0,3],targetOffset:qe},topLeft:{points:["bl","bl"],overflow:Ue,offset:[0,3],targetOffset:qe}},Je=Ge,Xe=n(47006),Ze=n(69843),Qe=n.n(Ze),et={validator:function(e){return Array.isArray(e)?0===e.length||-1===e.findIndex(function(e){return!Qe()(e)&&!h().isMoment(e)}):Qe()(e)||h().isMoment(e)}},tt={name:"Picker",props:{animation:a.A.oneOfType([a.A.func,a.A.string]),disabled:a.A.bool,transitionName:a.A.string,format:a.A.oneOfType([a.A.string,a.A.array,a.A.func]),children:a.A.func,getCalendarContainer:a.A.func,calendar:a.A.any,open:a.A.bool,defaultOpen:a.A.bool.def(!1),prefixCls:a.A.string.def("rc-calendar-picker"),placement:a.A.any.def("bottomLeft"),value:et,defaultValue:et,align:a.A.object.def(function(){return{}}),dropdownClassName:a.A.string,dateRender:a.A.func},mixins:[s.A],data:function(){var e=this.$props,t=void 0;t=(0,c.cK)(this,"open")?e.open:e.defaultOpen;var n=e.value||e.defaultValue;return{sOpen:t,sValue:n}},watch:{value:function(e){this.setState({sValue:e})},open:function(e){this.setState({sOpen:e})}},mounted:function(){this.preSOpen=this.sOpen},updated:function(){!this.preSOpen&&this.sOpen&&(this.focusTimeout=setTimeout(this.focusCalendar,0)),this.preSOpen=this.sOpen},beforeDestroy:function(){clearTimeout(this.focusTimeout)},methods:{onCalendarKeyDown:function(e){e.keyCode===u.A.ESC&&(e.stopPropagation(),this.closeCalendar(this.focus))},onCalendarSelect:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.$props;(0,c.cK)(this,"value")||this.setState({sValue:e});var r=(0,c.Oq)(n.calendar);("keyboard"===t.source||"dateInputSelect"===t.source||!r.timePicker&&"dateInput"!==t.source||"todayButton"===t.source)&&this.closeCalendar(this.focus),this.__emit("change",e)},onKeyDown:function(e){this.sOpen||e.keyCode!==u.A.DOWN&&e.keyCode!==u.A.ENTER||(this.openCalendar(),e.preventDefault())},onCalendarOk:function(){this.closeCalendar(this.focus)},onCalendarClear:function(){this.closeCalendar(this.focus)},onCalendarBlur:function(){this.setOpen(!1)},onVisibleChange:function(e){this.setOpen(e)},getCalendarElement:function(){var e=this.$props,t=(0,c.Oq)(e.calendar),n=(0,c.kQ)(e.calendar),r=this.sValue,i=r,o={ref:"calendarInstance",props:{defaultValue:i||t.defaultValue,selectedValue:r},on:{keydown:this.onCalendarKeyDown,ok:(0,Ke.A)(n.ok,this.onCalendarOk),select:(0,Ke.A)(n.select,this.onCalendarSelect),clear:(0,Ke.A)(n.clear,this.onCalendarClear),blur:(0,Ke.A)(n.blur,this.onCalendarBlur)}};return(0,l.Ob)(e.calendar,o)},setOpen:function(e,t){this.sOpen!==e&&((0,c.cK)(this,"open")||this.setState({sOpen:e},t),this.__emit("openChange",e))},openCalendar:function(e){this.setOpen(!0,e)},closeCalendar:function(e){this.setOpen(!1,e)},focus:function(){this.sOpen||this.$el.focus()},focusCalendar:function(){this.sOpen&&this.calendarInstance&&this.calendarInstance.componentInstance&&this.calendarInstance.componentInstance.focus()}},render:function(){var e=arguments[0],t=(0,c.Oq)(this),n=(0,c.gd)(this),r=t.prefixCls,i=t.placement,o=t.getCalendarContainer,a=t.align,s=t.animation,u=t.disabled,d=t.dropdownClassName,h=t.transitionName,f=this.sValue,p=this.sOpen,m=this.$scopedSlots["default"],v={value:f,open:p};return!this.sOpen&&this.calendarInstance||(this.calendarInstance=this.getCalendarElement()),e(Xe.A,{attrs:{popupAlign:a,builtinPlacements:Je,popupPlacement:i,action:u&&!p?[]:["click"],destroyPopupOnHide:!0,getPopupContainer:o,popupStyle:n,popupAnimation:s,popupTransitionName:h,popupVisible:p,prefixCls:r,popupClassName:d},on:{popupVisibleChange:this.onVisibleChange}},[e("template",{slot:"popup"},[this.calendarInstance]),(0,l.Ob)(m(v,t),{on:{keydown:this.onKeyDown}})])}},nt=tt,rt=n(40255),it=n(25592),ot=n(67287);function at(e,t){if(!e)return"";if(Array.isArray(t)&&(t=t[0]),"function"===typeof t){var n=t(e);if("string"===typeof n)return n;throw new Error("The function of format does not return a string")}return e.format(t)}function st(){}function ct(e,t){return{props:(0,c.CB)(t,{allowClear:!0,showToday:!0}),mixins:[s.A],model:{prop:"value",event:"change"},inject:{configProvider:{default:function(){return it.f}}},data:function(){var e=this.value||this.defaultValue;if(e&&!(0,ot.A)(d).isMoment(e))throw new Error("The value/defaultValue of DatePicker or MonthPicker must be a moment object");return{sValue:e,showDate:e,_open:!!this.open}},watch:{open:function(e){var t=(0,c.Oq)(this),n={};n._open=e,"value"in t&&!e&&t.value!==this.showDate&&(n.showDate=t.value),this.setState(n)},value:function(e){var t={};t.sValue=e,e!==this.sValue&&(t.showDate=e),this.setState(t)},_open:function(e,t){var n=this;this.$nextTick(function(){(0,c.cK)(n,"open")||!t||e||n.focus()})}},methods:{clearSelection:function(e){e.preventDefault(),e.stopPropagation(),this.handleChange(null)},handleChange:function(e){(0,c.cK)(this,"value")||this.setState({sValue:e,showDate:e}),this.$emit("change",e,at(e,this.format))},handleCalendarChange:function(e){this.setState({showDate:e})},handleOpenChange:function(e){var t=(0,c.Oq)(this);"open"in t||this.setState({_open:e}),this.$emit("openChange",e)},focus:function(){this.$refs.input.focus()},blur:function(){this.$refs.input.blur()},renderFooter:function(){var e=this.$createElement,t=this.$scopedSlots,n=this.$slots,r=this._prefixCls,i=this.renderExtraFooter||t.renderExtraFooter||n.renderExtraFooter;return i?e("div",{class:r+"-footer-extra"},["function"===typeof i?i.apply(void 0,arguments):i]):null},onMouseEnter:function(e){this.$emit("mouseenter",e)},onMouseLeave:function(e){this.$emit("mouseleave",e)}},render:function(){var t,n=this,i=arguments[0],o=this.$scopedSlots,a=this.$data,s=a.sValue,u=a.showDate,h=a._open,f=(0,c.nu)(this,"suffixIcon");f=Array.isArray(f)?f[0]:f;var p=(0,c.WM)(this),v=p.panelChange,y=void 0===v?st:v,_=p.focus,b=void 0===_?st:_,M=p.blur,A=void 0===M?st:M,w=p.ok,x=void 0===w?st:w,k=(0,c.Oq)(this),L=k.prefixCls,C=k.locale,S=k.localeCode,z=k.inputReadOnly,T=this.configProvider.getPrefixCls,O=T("calendar",L);this._prefixCls=O;var H=k.dateRender||o.dateRender,D=k.monthCellContentRender||o.monthCellContentRender,Y="placeholder"in k?k.placeholder:C.lang.placeholder,V=k.showTime?k.disabledTime:null,P=g()((t={},(0,m.A)(t,O+"-time",k.showTime),(0,m.A)(t,O+"-month",Ne===e),t));s&&S&&s.locale(S);var E={props:{},on:{}},j={props:{},on:{}},F={};k.showTime?(j.on.select=this.handleChange,F.minWidth="195px"):E.on.change=this.handleChange,"mode"in k&&(j.props.mode=k.mode);var I=(0,c.v6)(j,{props:{disabledDate:k.disabledDate,disabledTime:V,locale:C.lang,timePicker:k.timePicker,defaultValue:k.defaultPickerValue||(0,ot.A)(d)(),dateInputPlaceholder:Y,prefixCls:O,dateRender:H,format:k.format,showToday:k.showToday,monthCellContentRender:D,renderFooter:this.renderFooter,value:u,inputReadOnly:z},on:{ok:x,panelChange:y,change:this.handleCalendarChange},class:P,scopedSlots:o}),$=i(e,I),R=!k.disabled&&k.allowClear&&s?i(rt.A,{attrs:{type:"close-circle",theme:"filled"},class:O+"-picker-clear",on:{click:this.clearSelection}}):null,N=f&&((0,c.zO)(f)?(0,l.Ob)(f,{class:O+"-picker-icon"}):i("span",{class:O+"-picker-icon"},[f]))||i(rt.A,{attrs:{type:"calendar"},class:O+"-picker-icon"}),W=function(e){var t=e.value;return i("div",[i("input",{ref:"input",attrs:{disabled:k.disabled,readOnly:!0,placeholder:Y,tabIndex:k.tabIndex,name:n.name},on:{focus:b,blur:A},domProps:{value:at(t,n.format)},class:k.pickerInputClass}),R,N])},B={props:(0,r.A)({},k,E.props,{calendar:$,value:s,prefixCls:O+"-picker-container"}),on:(0,r.A)({},Be()(p,"change"),E.on,{open:h,onOpenChange:this.handleOpenChange}),style:k.popupStyle,scopedSlots:(0,r.A)({default:W},o)};return i("span",{class:k.pickerClass,style:F,on:{mouseenter:this.onMouseEnter,mouseleave:this.onMouseLeave}},[i(nt,B)])}}}var lt=n(7772),ut=n(38377),dt=n(83766),ht=n(69656),ft=n(6566),pt={date:"YYYY-MM-DD",dateTime:"YYYY-MM-DD HH:mm:ss",week:"gggg-wo",month:"YYYY-MM"},mt={date:"dateFormat",dateTime:"dateTimeFormat",week:"weekFormat",month:"monthFormat"};function vt(e){var t=e.showHour,n=e.showMinute,r=e.showSecond,i=e.use12Hours,o=0;return t&&(o+=1),n&&(o+=1),r&&(o+=1),i&&(o+=1),o}function gt(e,t,n){return{name:e.name,props:(0,c.CB)(t,{transitionName:"slide-up",popupStyle:{},locale:{}}),model:{prop:"value",event:"change"},inject:{configProvider:{default:function(){return it.f}}},provide:function(){return{savePopupRef:this.savePopupRef}},mounted:function(){var e=this,t=this.autoFocus,n=this.disabled,r=this.value,i=this.defaultValue,o=this.valueFormat;(0,ft.n1)("DatePicker",i,"defaultValue",o),(0,ft.n1)("DatePicker",r,"value",o),t&&!n&&this.$nextTick(function(){e.focus()})},watch:{value:function(e){(0,ft.n1)("DatePicker",e,"value",this.valueFormat)}},methods:{getDefaultLocale:function(){var e=(0,r.A)({},ht.A,this.locale);return e.lang=(0,r.A)({},e.lang,(this.locale||{}).lang),e},savePopupRef:function(e){this.popupRef=e},handleOpenChange:function(e){this.$emit("openChange",e)},handleFocus:function(e){this.$emit("focus",e)},handleBlur:function(e){this.$emit("blur",e)},handleMouseEnter:function(e){this.$emit("mouseenter",e)},handleMouseLeave:function(e){this.$emit("mouseleave",e)},handleChange:function(e,t){this.$emit("change",this.valueFormat?(0,ft.pK)(e,this.valueFormat):e,t)},handleOk:function(e){this.$emit("ok",this.valueFormat?(0,ft.pK)(e,this.valueFormat):e)},handleCalendarChange:function(e,t){this.$emit("calendarChange",this.valueFormat?(0,ft.pK)(e,this.valueFormat):e,t)},focus:function(){this.$refs.picker.focus()},blur:function(){this.$refs.picker.blur()},transformValue:function(e){"value"in e&&(e.value=(0,ft.pY)(e.value,this.valueFormat)),"defaultValue"in e&&(e.defaultValue=(0,ft.pY)(e.defaultValue,this.valueFormat)),"defaultPickerValue"in e&&(e.defaultPickerValue=(0,ft.pY)(e.defaultPickerValue,this.valueFormat))},renderPicker:function(t,i){var o,a=this,s=this.$createElement,l=(0,c.Oq)(this);this.transformValue(l);var u=l.prefixCls,d=l.inputPrefixCls,h=l.getCalendarContainer,f=l.size,p=l.showTime,v=l.disabled,y=l.format,_=p?n+"Time":n,b=y||t[mt[_]]||pt[_],M=this.configProvider,A=M.getPrefixCls,w=M.getPopupContainer,x=h||w,k=A("calendar",u),L=A("input",d),C=g()(k+"-picker",(0,m.A)({},k+"-picker-"+f,!!f)),S=g()(k+"-picker-input",L,(o={},(0,m.A)(o,L+"-lg","large"===f),(0,m.A)(o,L+"-sm","small"===f),(0,m.A)(o,L+"-disabled",v),o)),z=p&&p.format||"HH:mm:ss",T=(0,r.A)({},(0,dt.PH)(z),{format:z,use12Hours:p&&p.use12Hours}),O=vt(T),H=k+"-time-picker-column-"+O,D={props:(0,r.A)({},T,p,{prefixCls:k+"-time-picker",placeholder:t.timePickerLocale.placeholder,transitionName:"slide-up"}),class:H,on:{esc:function(){}}},Y=p?s(lt.A,D):null,V={props:(0,r.A)({},l,{getCalendarContainer:x,format:b,pickerClass:C,pickerInputClass:S,locale:t,localeCode:i,timePicker:Y}),on:(0,r.A)({},(0,c.WM)(this),{openChange:this.handleOpenChange,focus:this.handleFocus,blur:this.handleBlur,mouseenter:this.handleMouseEnter,mouseleave:this.handleMouseLeave,change:this.handleChange,ok:this.handleOk,calendarChange:this.handleCalendarChange}),ref:"picker",scopedSlots:this.$scopedSlots||{}};return s(e,V,[this.$slots&&Object.keys(this.$slots).map(function(e){return s("template",{slot:e,key:e},[a.$slots[e]])})])}},render:function(){var e=arguments[0];return e(ut.A,{attrs:{componentName:"DatePicker",defaultLocale:this.getDefaultLocale},scopedSlots:{default:this.renderPicker}})}}}var yt=n(52040),_t=n(32779);function bt(){}var Mt={mixins:[s.A],props:{prefixCls:a.A.string,value:a.A.any,hoverValue:a.A.any,selectedValue:a.A.any,direction:a.A.any,locale:a.A.any,showDateInput:a.A.bool,showTimePicker:a.A.bool,showWeekNumber:a.A.bool,format:a.A.any,placeholder:a.A.any,disabledDate:a.A.any,timePicker:a.A.any,disabledTime:a.A.any,disabledMonth:a.A.any,mode:a.A.any,timePickerDisabledTime:a.A.object,enableNext:a.A.any,enablePrev:a.A.any,clearIcon:a.A.any,dateRender:a.A.func,inputMode:a.A.string,inputReadOnly:a.A.bool},render:function(){var e=arguments[0],t=this.$props,n=t.prefixCls,i=t.value,o=t.hoverValue,a=t.selectedValue,s=t.mode,u=t.direction,d=t.locale,h=t.format,f=t.placeholder,p=t.disabledDate,m=t.timePicker,v=t.disabledTime,g=t.timePickerDisabledTime,y=t.showTimePicker,_=t.enablePrev,b=t.enableNext,M=t.disabledMonth,A=t.showDateInput,w=t.dateRender,k=t.showWeekNumber,L=t.showClear,C=t.inputMode,S=t.inputReadOnly,z=(0,c.nu)(this,"clearIcon"),T=(0,c.WM)(this),O=T.inputChange,H=void 0===O?bt:O,D=T.inputSelect,Y=void 0===D?bt:D,V=T.valueChange,E=void 0===V?bt:V,j=T.panelChange,F=void 0===j?bt:j,I=T.select,$=void 0===I?bt:I,R=T.dayHover,N=void 0===R?bt:R,W=y&&m,B=W&&v?x(a,v):null,K=n+"-range",U={locale:d,value:i,prefixCls:n,showTimePicker:y},q="left"===u?0:1,G=null;if(W){var J=(0,c.Oq)(m);G=(0,l.Ob)(m,{props:(0,r.A)({showHour:!0,showMinute:!0,showSecond:!0},J,B,g,{defaultOpenValue:i,value:a[q]}),on:{change:H}})}var X=A&&e(Oe,{attrs:{format:h,locale:d,prefixCls:n,timePicker:m,disabledDate:p,placeholder:f,disabledTime:v,value:i,showClear:L||!1,selectedValue:a[q],clearIcon:z,inputMode:C,inputReadOnly:S},on:{change:H,select:Y}}),Z={props:(0,r.A)({},U,{mode:s,enableNext:b,enablePrev:_,disabledMonth:M}),on:{valueChange:E,panelChange:F}},Q={props:(0,r.A)({},U,{hoverValue:o,selectedValue:a,dateRender:w,disabledDate:p,showWeekNumber:k}),on:{select:$,dayHover:N}};return e("div",{class:K+"-part "+K+"-"+u},[X,e("div",{style:{outline:"none"}},[e(le,Z),y?e("div",{class:n+"-time-picker"},[e("div",{class:n+"-time-picker-panel"},[G])]):null,e("div",{class:n+"-body"},[e(P,Q)])])])}},At=Mt;function wt(){}function xt(e){return Array.isArray(e)&&(0===e.length||e.every(function(e){return!e}))}function kt(e,t){if(e===t)return!0;if(null===e||"undefined"===typeof e||null===t||"undefined"===typeof t)return!1;if(e.length!==t.length)return!1;for(var n=0;n0&&(i[1-o]=this.sShowTimePicker?i[o]:void 0),this.__emit("inputSelect",i),this.fireSelectValueChange(i,null,n||{source:"dateInput"})}}var Tt={props:{locale:a.A.object.def(He.A),visible:a.A.bool.def(!0),prefixCls:a.A.string.def("rc-calendar"),dateInputPlaceholder:a.A.any,seperator:a.A.string.def("~"),defaultValue:a.A.any,value:a.A.any,hoverValue:a.A.any,mode:a.A.arrayOf(a.A.oneOf(["time","date","month","year","decade"])),showDateInput:a.A.bool.def(!0),timePicker:a.A.any,showOk:a.A.bool,showToday:a.A.bool.def(!0),defaultSelectedValue:a.A.array.def([]),selectedValue:a.A.array,showClear:a.A.bool,showWeekNumber:a.A.bool,format:a.A.oneOfType([a.A.string,a.A.arrayOf(a.A.string),a.A.func]),type:a.A.any.def("both"),disabledDate:a.A.func,disabledTime:a.A.func.def(wt),renderFooter:a.A.func.def(function(){return null}),renderSidebar:a.A.func.def(function(){return null}),dateRender:a.A.func,clearIcon:a.A.any,inputReadOnly:a.A.bool},mixins:[s.A,Le],data:function(){var e=this.$props,t=e.selectedValue||e.defaultSelectedValue,n=Ct(e,1);return{sSelectedValue:t,prevSelectedValue:t,firstSelectedValue:null,sHoverValue:e.hoverValue||[],sValue:n,sShowTimePicker:!1,sMode:e.mode||["date","date"],sPanelTriggerSource:""}},watch:{value:function(){var e={};e.sValue=Ct(this.$props,0),this.setState(e)},hoverValue:function(e){kt(this.sHoverValue,e)||this.setState({sHoverValue:e})},selectedValue:function(e){var t={};t.sSelectedValue=e,t.prevSelectedValue=e,this.setState(t)},mode:function(e){kt(this.sMode,e)||this.setState({sMode:e})}},methods:{onDatePanelEnter:function(){this.hasSelectedValue()&&this.fireHoverValueChange(this.sSelectedValue.concat())},onDatePanelLeave:function(){this.hasSelectedValue()&&this.fireHoverValueChange([])},onSelect:function(e){var t=this.type,n=this.sSelectedValue,r=this.prevSelectedValue,i=this.firstSelectedValue,o=void 0;if("both"===t)i?this.compare(i,e)<0?(w(r[1],e),o=[i,e]):(w(r[0],e),w(r[1],i),o=[e,i]):(w(r[0],e),o=[e]);else if("start"===t){w(r[0],e);var a=n[1];o=a&&this.compare(a,e)>0?[e,a]:[e]}else{var s=n[0];s&&this.compare(s,e)<=0?(w(r[1],e),o=[s,e]):(w(r[0],e),o=[e])}this.fireSelectValueChange(o)},onKeyDown:function(e){var t=this;if("input"!==e.target.nodeName.toLowerCase()){var n=e.keyCode,r=e.ctrlKey||e.metaKey,i=this.$data,o=i.sSelectedValue,a=i.sHoverValue,s=i.firstSelectedValue,c=i.sValue,l=this.$props.disabledDate,d=function(n){var r=void 0,i=void 0,l=void 0;if(s?1===a.length?(r=a[0].clone(),i=n(r),l=t.onDayHover(i)):(r=a[0].isSame(s,"day")?a[1]:a[0],i=n(r),l=t.onDayHover(i)):(r=a[0]||o[0]||c[0]||h()(),i=n(r),l=[i],t.fireHoverValueChange(l)),l.length>=2){var u=l.some(function(e){return!Pe(c,e,"month")});if(u){var d=l.slice().sort(function(e,t){return e.valueOf()-t.valueOf()});d[0].isSame(d[1],"month")&&(d[1]=d[0].clone().add(1,"month")),t.fireValueChange(d)}}else if(1===l.length){var f=c.findIndex(function(e){return e.isSame(r,"month")});if(-1===f&&(f=0),c.every(function(e){return!e.isSame(i,"month")})){var p=c.slice();p[f]=i.clone(),t.fireValueChange(p)}}return e.preventDefault(),i};switch(n){case u.A.DOWN:return void d(function(e){return Ve(e,1,"weeks")});case u.A.UP:return void d(function(e){return Ve(e,-1,"weeks")});case u.A.LEFT:return void d(r?function(e){return Ve(e,-1,"years")}:function(e){return Ve(e,-1,"days")});case u.A.RIGHT:return void d(r?function(e){return Ve(e,1,"years")}:function(e){return Ve(e,1,"days")});case u.A.HOME:return void d(function(e){return De(e)});case u.A.END:return void d(function(e){return Ye(e)});case u.A.PAGE_DOWN:return void d(function(e){return Ve(e,1,"month")});case u.A.PAGE_UP:return void d(function(e){return Ve(e,-1,"month")});case u.A.ENTER:var f=void 0;return f=0===a.length?d(function(e){return e}):1===a.length?a[0]:a[0].isSame(s,"day")?a[1]:a[0],!f||l&&l(f)||this.onSelect(f),void e.preventDefault();default:this.__emit("keydown",e)}}},onDayHover:function(e){var t=[],n=this.sSelectedValue,r=this.firstSelectedValue,i=this.type;if("start"===i&&n[1])t=this.compare(e,n[1])<0?[e,n[1]]:[e];else if("end"===i&&n[0])t=this.compare(e,n[0])>0?[n[0],e]:[];else{if(!r)return this.sHoverValue.length&&this.setState({sHoverValue:[]}),t;t=this.compare(e,r)<0?[e,r]:[r,e]}return this.fireHoverValueChange(t),t},onToday:function(){var e=_(this.sValue[0]),t=e.clone().add(1,"months");this.setState({sValue:[e,t]})},onOpenTimePicker:function(){this.setState({sShowTimePicker:!0})},onCloseTimePicker:function(){this.setState({sShowTimePicker:!1})},onOk:function(){var e=this.sSelectedValue;this.isAllowedDateAndTime(e)&&this.__emit("ok",e)},onStartInputChange:function(){for(var e=arguments.length,t=Array(e),n=0;n-1},hasSelectedValue:function(){var e=this.sSelectedValue;return!!e[1]&&!!e[0]},compare:function(e,t){return this.timePicker?e.diff(t):e.diff(t,"days")},fireSelectValueChange:function(e,t,n){var r=this.timePicker,i=this.prevSelectedValue;if(r){var o=(0,c.Oq)(r);if(o.defaultValue){var a=o.defaultValue;!i[0]&&e[0]&&w(a[0],e[0]),!i[1]&&e[1]&&w(a[1],e[1])}}if(!this.sSelectedValue[0]||!this.sSelectedValue[1]){var s=e[0]||h()(),l=e[1]||s.clone().add(1,"months");this.setState({sSelectedValue:e,sValue:e&&2===e.length?Lt([s,l]):this.sValue})}e[0]&&!e[1]&&(this.setState({firstSelectedValue:e[0]}),this.fireHoverValueChange(e.concat())),this.__emit("change",e),(t||e[0]&&e[1])&&(this.setState({prevSelectedValue:e,firstSelectedValue:null}),this.fireHoverValueChange([]),this.__emit("select",e,n)),(0,c.cK)(this,"selectedValue")||this.setState({sSelectedValue:e})},fireValueChange:function(e){(0,c.cK)(this,"value")||this.setState({sValue:e}),this.__emit("valueChange",e)},fireHoverValueChange:function(e){(0,c.cK)(this,"hoverValue")||this.setState({sHoverValue:e}),this.__emit("hoverChange",e)},clear:function(){this.fireSelectValueChange([],!0),this.__emit("clear")},disabledStartTime:function(e){return this.disabledTime(e,"start")},disabledEndTime:function(e){return this.disabledTime(e,"end")},disabledStartMonth:function(e){var t=this.sValue;return e.isAfter(t[1],"month")},disabledEndMonth:function(e){var t=this.sValue;return e.isBefore(t[0],"month")}},render:function(){var e,t,n=arguments[0],r=(0,c.Oq)(this),i=r.prefixCls,o=r.dateInputPlaceholder,a=r.timePicker,s=r.showOk,l=r.locale,u=r.showClear,d=r.showToday,h=r.type,f=r.seperator,p=(0,c.nu)(this,"clearIcon"),v=this.sHoverValue,g=this.sSelectedValue,y=this.sMode,b=this.sShowTimePicker,M=this.sValue,A=(e={},(0,m.A)(e,i,1),(0,m.A)(e,i+"-hidden",!r.visible),(0,m.A)(e,i+"-range",1),(0,m.A)(e,i+"-show-time-picker",b),(0,m.A)(e,i+"-week-number",r.showWeekNumber),e),w={props:r,on:(0,c.WM)(this)},x={props:{selectedValue:g},on:{select:this.onSelect,dayHover:"start"===h&&g[1]||"end"===h&&g[0]||v.length?this.onDayHover:wt}},k=void 0,L=void 0;if(o)if(Array.isArray(o)){var C=(0,yt.A)(o,2);k=C[0],L=C[1]}else k=L=o;var S=!0===s||!1!==s&&!!a,z=(t={},(0,m.A)(t,i+"-footer",!0),(0,m.A)(t,i+"-range-bottom",!0),(0,m.A)(t,i+"-footer-show-ok",S),t),T=this.getStartValue(),O=this.getEndValue(),H=_(T),D=H.month(),Y=H.year(),V=T.year()===Y&&T.month()===D||O.year()===Y&&O.month()===D,P=T.clone().add(1,"months"),E=P.year()===O.year()&&P.month()===O.month(),j=(0,c.v6)(w,x,{props:{hoverValue:v,direction:"left",disabledTime:this.disabledStartTime,disabledMonth:this.disabledStartMonth,format:this.getFormat(),value:T,mode:y[0],placeholder:k,showDateInput:this.showDateInput,timePicker:a,showTimePicker:b||"time"===y[0],enablePrev:!0,enableNext:!E||this.isMonthYearPanelShow(y[1]),clearIcon:p},on:{inputChange:this.onStartInputChange,inputSelect:this.onStartInputSelect,valueChange:this.onStartValueChange,panelChange:this.onStartPanelChange}}),F=(0,c.v6)(w,x,{props:{hoverValue:v,direction:"right",format:this.getFormat(),timePickerDisabledTime:this.getEndDisableTime(),placeholder:L,value:O,mode:y[1],showDateInput:this.showDateInput,timePicker:a,showTimePicker:b||"time"===y[1],disabledTime:this.disabledEndTime,disabledMonth:this.disabledEndMonth,enablePrev:!E||this.isMonthYearPanelShow(y[0]),enableNext:!0,clearIcon:p},on:{inputChange:this.onEndInputChange,inputSelect:this.onEndInputSelect,valueChange:this.onEndValueChange,panelChange:this.onEndPanelChange}}),I=null;if(d){var $=(0,c.v6)(w,{props:{disabled:V,value:M[0],text:l.backToToday},on:{today:this.onToday}});I=n(fe,de()([{key:"todayButton"},$]))}var R=null;if(r.timePicker){var N=(0,c.v6)(w,{props:{showTimePicker:b||"time"===y[0]&&"time"===y[1],timePickerDisabled:!this.hasSelectedValue()||v.length},on:{openTimePicker:this.onOpenTimePicker,closeTimePicker:this.onCloseTimePicker}});R=n(ge,de()([{key:"timePickerButton"},N]))}var W=null;if(S){var B=(0,c.v6)(w,{props:{okDisabled:!this.isAllowedDateAndTime(g)||!this.hasSelectedValue()||v.length},on:{ok:this.onOk}});W=n(me,de()([{key:"okButtonNode"},B]))}var K=this.renderFooter(y);return n("div",{ref:"rootInstance",class:A,attrs:{tabIndex:"0"},on:{keydown:this.onKeyDown}},[r.renderSidebar(),n("div",{class:i+"-panel"},[u&&g[0]&&g[1]?n("a",{attrs:{role:"button",title:l.clear},on:{click:this.clear}},[p||n("span",{class:i+"-clear-btn"})]):null,n("div",{class:i+"-date-panel",on:{mouseleave:"both"!==h?this.onDatePanelLeave:wt,mouseenter:"both"!==h?this.onDatePanelEnter:wt}},[n(At,j),n("span",{class:i+"-range-middle"},[f]),n(At,F)]),n("div",{class:z},[d||r.timePicker||S||K?n("div",{class:i+"-footer-btn"},[K,I,R,W]):null])])])}},Ot=Tt,Ht=n(2833),Dt=n.n(Ht),Yt=n(87298),Vt=function(){return{name:a.A.string,transitionName:a.A.string,prefixCls:a.A.string,inputPrefixCls:a.A.string,format:a.A.oneOfType([a.A.string,a.A.array,a.A.func]),disabled:a.A.bool,allowClear:a.A.bool,suffixIcon:a.A.any,popupStyle:a.A.object,dropdownClassName:a.A.string,locale:a.A.any,localeCode:a.A.string,size:a.A.oneOf(["large","small","default"]),getCalendarContainer:a.A.func,open:a.A.bool,disabledDate:a.A.func,showToday:a.A.bool,dateRender:a.A.any,pickerClass:a.A.string,pickerInputClass:a.A.string,timePicker:a.A.any,autoFocus:a.A.bool,tagPrefixCls:a.A.string,tabIndex:a.A.oneOfType([a.A.string,a.A.number]),align:a.A.object.def(function(){return{}}),inputReadOnly:a.A.bool,valueFormat:a.A.string}},Pt=function(){return{value:ft.W2,defaultValue:ft.W2,defaultPickerValue:ft.W2,renderExtraFooter:a.A.any,placeholder:a.A.string}},Et=function(){return(0,r.A)({},Vt(),Pt(),{showTime:a.A.oneOfType([a.A.object,a.A.bool]),open:a.A.bool,disabledTime:a.A.func,mode:a.A.oneOf(["time","date","month","year","decade"])})},jt=function(){return(0,r.A)({},Vt(),Pt(),{placeholder:a.A.string,monthCellContentRender:a.A.func})},Ft=function(){return(0,r.A)({},Vt(),{tagPrefixCls:a.A.string,value:ft.P1,defaultValue:ft.P1,defaultPickerValue:ft.P1,timePicker:a.A.any,showTime:a.A.oneOfType([a.A.object,a.A.bool]),ranges:a.A.object,placeholder:a.A.arrayOf(String),mode:a.A.oneOfType([a.A.string,a.A.arrayOf(String)]),separator:a.A.any,disabledTime:a.A.func,showToday:a.A.bool,renderExtraFooter:a.A.any})},It=function(){return(0,r.A)({},Vt(),Pt(),{placeholder:a.A.string})},$t={functional:!0,render:function(e,t){var n=t.props,r=n.suffixIcon,i=n.prefixCls;return(r&&(0,c.zO)(r)?(0,l.Ob)(r,{class:i+"-picker-icon"}):e("span",{class:i+"-picker-icon"},[r]))||e(rt.A,{attrs:{type:"calendar"},class:i+"-picker-icon"})}};function Rt(){}function Nt(e,t){var n=(0,yt.A)(e,2),r=n[0],i=n[1];if(r||i){if(t&&"month"===t[0])return[r,i];var o=i&&i.isSame(r,"month")?i.clone().add(1,"month"):i;return[r,o]}}function Wt(e){if(e)return Array.isArray(e)?e:[e,e.clone().add(1,"month")]}function Bt(e){return!!Array.isArray(e)&&(0===e.length||e.every(function(e){return!e}))}function Kt(e,t){if(t&&e&&0!==e.length){var n=(0,yt.A)(e,2),r=n[0],i=n[1];r&&r.locale(t),i&&i.locale(t)}}var Ut={name:"ARangePicker",mixins:[s.A],model:{prop:"value",event:"change"},props:(0,c.CB)(Ft(),{allowClear:!0,showToday:!1,separator:"~"}),inject:{configProvider:{default:function(){return it.f}}},data:function(){var e=this.value||this.defaultValue||[],t=(0,yt.A)(e,2),n=t[0],r=t[1];if(n&&!(0,ot.A)(d).isMoment(n)||r&&!(0,ot.A)(d).isMoment(r))throw new Error("The value/defaultValue of RangePicker must be a moment object array after `antd@2.0`, see: https://u.ant.design/date-picker-value");var i=!e||Bt(e)?this.defaultPickerValue:e;return{sValue:e,sShowDate:Wt(i||(0,ot.A)(d)()),sOpen:this.open,sHoverValue:[]}},watch:{value:function(e){var t=e||[],n={sValue:t};Dt()(e,this.sValue)||(n=(0,r.A)({},n,{sShowDate:Nt(t,this.mode)||this.sShowDate})),this.setState(n)},open:function(e){var t={sOpen:e};this.setState(t)},sOpen:function(e,t){var n=this;this.$nextTick(function(){(0,c.cK)(n,"open")||!t||e||n.focus()})}},methods:{setValue:function(e,t){this.handleChange(e),!t&&this.showTime||(0,c.cK)(this,"open")||this.setState({sOpen:!1})},clearSelection:function(e){e.preventDefault(),e.stopPropagation(),this.setState({sValue:[]}),this.handleChange([])},clearHoverValue:function(){this.setState({sHoverValue:[]})},handleChange:function(e){(0,c.cK)(this,"value")||this.setState(function(t){var n=t.sShowDate;return{sValue:e,sShowDate:Nt(e)||n}}),e[0]&&e[1]&&e[0].diff(e[1])>0&&(e[1]=void 0);var t=(0,yt.A)(e,2),n=t[0],r=t[1];this.$emit("change",e,[at(n,this.format),at(r,this.format)])},handleOpenChange:function(e){(0,c.cK)(this,"open")||this.setState({sOpen:e}),!1===e&&this.clearHoverValue(),this.$emit("openChange",e)},handleShowDateChange:function(e){this.setState({sShowDate:e})},handleHoverChange:function(e){this.setState({sHoverValue:e})},handleRangeMouseLeave:function(){this.sOpen&&this.clearHoverValue()},handleCalendarInputSelect:function(e){var t=(0,yt.A)(e,1),n=t[0];n&&this.setState(function(t){var n=t.sShowDate;return{sValue:e,sShowDate:Nt(e)||n}})},handleRangeClick:function(e){"function"===typeof e&&(e=e()),this.setValue(e,!0),this.$emit("ok",e),this.$emit("openChange",!1)},onMouseEnter:function(e){this.$emit("mouseenter",e)},onMouseLeave:function(e){this.$emit("mouseleave",e)},focus:function(){this.$refs.picker.focus()},blur:function(){this.$refs.picker.blur()},renderFooter:function(){var e=this,t=this.$createElement,n=this.ranges,r=this.$scopedSlots,i=this.$slots,o=this._prefixCls,a=this._tagPrefixCls,s=this.renderExtraFooter||r.renderExtraFooter||i.renderExtraFooter;if(!n&&!s)return null;var c=s?t("div",{class:o+"-footer-extra",key:"extra"},["function"===typeof s?s():s]):null,l=n&&Object.keys(n).map(function(r){var i=n[r],o="function"===typeof i?i.call(e):i;return t(Yt.A,{key:r,attrs:{prefixCls:a,color:"blue"},on:{click:function(){return e.handleRangeClick(i)},mouseenter:function(){return e.setState({sHoverValue:o})},mouseleave:e.handleRangeMouseLeave}},[r])}),u=l&&l.length>0?t("div",{class:o+"-footer-extra "+o+"-range-quick-selector",key:"range"},[l]):null;return[u,c]}},render:function(){var e,t=this,n=arguments[0],i=(0,c.Oq)(this),o=(0,c.nu)(this,"suffixIcon");o=Array.isArray(o)?o[0]:o;var a=this.sValue,s=this.sShowDate,l=this.sHoverValue,u=this.sOpen,d=this.$scopedSlots,h=(0,c.WM)(this),f=h.calendarChange,p=void 0===f?Rt:f,v=h.ok,y=void 0===v?Rt:v,_=h.focus,b=void 0===_?Rt:_,M=h.blur,A=void 0===M?Rt:M,w=h.panelChange,x=void 0===w?Rt:w,k=i.prefixCls,L=i.tagPrefixCls,C=i.popupStyle,S=i.disabledDate,z=i.disabledTime,T=i.showTime,O=i.showToday,H=i.ranges,D=i.locale,Y=i.localeCode,V=i.format,P=i.separator,E=i.inputReadOnly,j=this.configProvider.getPrefixCls,F=j("calendar",k),I=j("tag",L);this._prefixCls=F,this._tagPrefixCls=I;var $=i.dateRender||d.dateRender;Kt(a,Y),Kt(s,Y);var R=g()((e={},(0,m.A)(e,F+"-time",T),(0,m.A)(e,F+"-range-with-ranges",H),e)),N={on:{change:this.handleChange}},W={on:{ok:this.handleChange},props:{}};i.timePicker?N.on.change=function(e){return t.handleChange(e)}:W={on:{},props:{}},"mode"in i&&(W.props.mode=i.mode);var B=Array.isArray(i.placeholder)?i.placeholder[0]:D.lang.rangePlaceholder[0],K=Array.isArray(i.placeholder)?i.placeholder[1]:D.lang.rangePlaceholder[1],U=(0,c.v6)(W,{props:{separator:P,format:V,prefixCls:F,renderFooter:this.renderFooter,timePicker:i.timePicker,disabledDate:S,disabledTime:z,dateInputPlaceholder:[B,K],locale:D.lang,dateRender:$,value:s,hoverValue:l,showToday:O,inputReadOnly:E},on:{change:p,ok:y,valueChange:this.handleShowDateChange,hoverChange:this.handleHoverChange,panelChange:x,inputSelect:this.handleCalendarInputSelect},class:R,scopedSlots:d}),q=n(Ot,U),G={};i.showTime&&(G.width="350px");var J=(0,yt.A)(a,2),X=J[0],Z=J[1],Q=!i.disabled&&i.allowClear&&a&&(X||Z)?n(rt.A,{attrs:{type:"close-circle",theme:"filled"},class:F+"-picker-clear",on:{click:this.clearSelection}}):null,ee=n($t,{attrs:{suffixIcon:o,prefixCls:F}}),te=function(e){var t=e.value,r=(0,yt.A)(t,2),o=r[0],a=r[1];return n("span",{class:i.pickerInputClass},[n("input",{attrs:{disabled:i.disabled,readOnly:!0,placeholder:B,tabIndex:-1},domProps:{value:at(o,i.format)},class:F+"-range-picker-input"}),n("span",{class:F+"-range-picker-separator"},[" ",P," "]),n("input",{attrs:{disabled:i.disabled,readOnly:!0,placeholder:K,tabIndex:-1},domProps:{value:at(a,i.format)},class:F+"-range-picker-input"}),Q,ee])},ne=(0,c.v6)({props:i,on:h},N,{props:{calendar:q,value:a,open:u,prefixCls:F+"-picker-container"},on:{openChange:this.handleOpenChange},style:C,scopedSlots:(0,r.A)({default:te},d)});return n("span",{ref:"picker",class:i.pickerClass,style:G,attrs:{tabIndex:i.disabled?-1:0},on:{focus:b,blur:A,mouseenter:this.onMouseEnter,mouseleave:this.onMouseLeave}},[n(nt,ne)])}};function qt(e,t){return e&&e.format(t)||""}function Gt(){}var Jt={name:"AWeekPicker",mixins:[s.A],model:{prop:"value",event:"change"},props:(0,c.CB)(It(),{format:"gggg-wo",allowClear:!0}),inject:{configProvider:{default:function(){return it.f}}},data:function(){var e=this.value||this.defaultValue;if(e&&!(0,ot.A)(d).isMoment(e))throw new Error("The value/defaultValue of WeekPicker or MonthPicker must be a moment object");return{_value:e,_open:this.open}},watch:{value:function(e){var t={_value:e};this.setState(t),this.prevState=(0,r.A)({},this.$data,t)},open:function(e){var t={_open:e};this.setState(t),this.prevState=(0,r.A)({},this.$data,t)},_open:function(e,t){var n=this;this.$nextTick(function(){(0,c.cK)(n,"open")||!t||e||n.focus()})}},mounted:function(){this.prevState=(0,r.A)({},this.$data)},updated:function(){var e=this;this.$nextTick(function(){(0,c.cK)(e,"open")||!e.prevState._open||e._open||e.focus()})},methods:{weekDateRender:function(e){var t=this.$createElement,n=this.$data._value,r=this._prefixCls,i=this.$scopedSlots,o=this.dateRender||i.dateRender,a=o?o(e):e.date();return n&&e.year()===n.year()&&e.week()===n.week()?t("div",{class:r+"-selected-day"},[t("div",{class:r+"-date"},[a])]):t("div",{class:r+"-date"},[a])},handleChange:function(e){(0,c.cK)(this,"value")||this.setState({_value:e}),this.$emit("change",e,qt(e,this.format))},handleOpenChange:function(e){(0,c.cK)(this,"open")||this.setState({_open:e}),this.$emit("openChange",e)},clearSelection:function(e){e.preventDefault(),e.stopPropagation(),this.handleChange(null)},focus:function(){this.$refs.input.focus()},blur:function(){this.$refs.input.blur()},renderFooter:function(){var e=this.$createElement,t=this._prefixCls,n=this.$scopedSlots,r=this.renderExtraFooter||n.renderExtraFooter;return r?e("div",{class:t+"-footer-extra"},[r.apply(void 0,arguments)]):null}},render:function(){var e=arguments[0],t=(0,c.Oq)(this),n=(0,c.nu)(this,"suffixIcon");n=Array.isArray(n)?n[0]:n;var i=this.prefixCls,o=this.disabled,a=this.pickerClass,s=this.popupStyle,l=this.pickerInputClass,u=this.format,d=this.allowClear,h=this.locale,f=this.localeCode,p=this.disabledDate,m=this.defaultPickerValue,v=this.$data,g=this.$scopedSlots,y=(0,c.WM)(this),_=this.configProvider.getPrefixCls,b=_("calendar",i);this._prefixCls=b;var M=v._value,A=v._open,w=y.focus,x=void 0===w?Gt:w,k=y.blur,L=void 0===k?Gt:k;M&&f&&M.locale(f);var C=(0,c.cK)(this,"placeholder")?this.placeholder:h.lang.placeholder,S=this.dateRender||g.dateRender||this.weekDateRender,z=e($e,{attrs:{showWeekNumber:!0,dateRender:S,prefixCls:b,format:u,locale:h.lang,showDateInput:!1,showToday:!1,disabledDate:p,renderFooter:this.renderFooter,defaultValue:m}}),T=!o&&d&&v._value?e(rt.A,{attrs:{type:"close-circle",theme:"filled"},class:b+"-picker-clear",on:{click:this.clearSelection}}):null,O=e($t,{attrs:{suffixIcon:n,prefixCls:b}}),H=function(t){var n=t.value;return e("span",{style:{display:"inline-block",width:"100%"}},[e("input",{ref:"input",attrs:{disabled:o,readOnly:!0,placeholder:C},domProps:{value:n&&n.format(u)||""},class:l,on:{focus:x,blur:L}}),T,O])},D={props:(0,r.A)({},t,{calendar:z,prefixCls:b+"-picker-container",value:M,open:A}),on:(0,r.A)({},y,{change:this.handleChange,openChange:this.handleOpenChange}),style:s,scopedSlots:(0,r.A)({default:H},g)};return e("span",{class:a},[e(nt,D)])}},Xt=n(44807),Zt=gt((0,r.A)({},ct($e,Et()),{name:"ADatePicker"}),Et(),"date"),Qt=gt((0,r.A)({},ct(Ne,jt()),{name:"AMonthPicker"}),jt(),"month");(0,r.A)(Zt,{RangePicker:gt(Ut,Ft(),"date"),MonthPicker:Qt,WeekPicker:gt(Jt,It(),"week")}),Zt.install=function(e){e.use(Xt.A),e.component(Zt.name,Zt),e.component(Zt.RangePicker.name,Zt.RangePicker),e.component(Zt.MonthPicker.name,Zt.MonthPicker),e.component(Zt.WeekPicker.name,Zt.WeekPicker)};var en=Zt},69656:function(e,t,n){"use strict";var r=n(85505),i=n(99876),o=n(68265),a={lang:(0,r.A)({placeholder:"Select date",rangePlaceholder:["Start date","End date"]},i.A),timePickerLocale:(0,r.A)({},o.A)};t.A=a},32581:function(e,t,n){"use strict";n(29229),n(71094),n(26904),n(5554)},9426:function(e,t,n){"use strict";n.d(t,{Ay:function(){return w}});var r=n(44508),i=n(97479),o=n(36873),a=n(73363),s=n(25592),c=n(4718),l=n(15848),u={child:c.A.any,bordered:c.A.bool,colon:c.A.bool,type:c.A.oneOf(["label","content"]),layout:c.A.oneOf(["horizontal","vertical"])},d={functional:!0,props:u,render:function(e,t){var n,i=t.props,o=i.child,a=i.bordered,s=i.colon,c=i.type,u=i.layout,d=(0,l.Oq)(o),h=d.prefixCls,f=d.span,p=void 0===f?1:f,m=t.data.key,v=(0,l.nu)(o,"label"),g=(0,l.Sk)(o),y={attrs:{},class:[h+"-item-label",(n={},(0,r.A)(n,h+"-item-colon",s),(0,r.A)(n,h+"-item-no-label",!v),n)],key:m+"-label"};return"vertical"===u&&(y.attrs.colSpan=2*p-1),a?"label"===c?e("th",y,[v]):e("td",{class:h+"-item-content",key:m+"-content",attrs:{colSpan:2*p-1}},[g["default"]]):e("td",{attrs:{colSpan:p},class:h+"-item"},"vertical"===u?"content"===c?[e("span",{class:h+"-item-content",key:m+"-content"},[g["default"]])]:[e("span",{class:[h+"-item-label",(0,r.A)({},h+"-item-colon",s)],key:m+"-label"},[v])]:[e("span",y,[v]),e("span",{class:h+"-item-content",key:m+"-content"},[g["default"]])])}},h=d,f=n(52315),p=n(44807),m=n(51927),v={prefixCls:c.A.string,label:c.A.any,span:c.A.number};function g(e){var t=e;return void 0===e?t=[]:Array.isArray(e)||(t=[e]),t}var y={name:"ADescriptionsItem",props:(0,l.CB)(v,{span:1})},_={prefixCls:c.A.string,bordered:c.A.bool,size:c.A.oneOf(["default","middle","small"]).def("default"),title:c.A.any,column:c.A.oneOfType([c.A.number,c.A.object]),layout:c.A.oneOf(["horizontal","vertical"]),colon:c.A.bool},b=function(e,t){var n=[],r=null,i=void 0,a=g(e);return a.forEach(function(e,s){var c=(0,l.Oq)(e),u=e;r||(i=t,r=[],n.push(r));var d=s===a.length-1,h=!0;d&&(h=!c.span||c.span===i,u=(0,m.Ob)(u,{props:{span:i}}));var f=c.span,p=void 0===f?1:f;r.push(u),i-=p,i<=0&&(r=null,(0,o.A)(0===i&&h,"Descriptions","Sum of column `span` in a line exceeds `column` of Descriptions."))}),n},M={xxl:3,xl:3,lg:3,md:3,sm:2,xs:1},A={name:"ADescriptions",Item:y,mixins:[f.A],inject:{configProvider:{default:function(){return s.f}}},props:(0,l.CB)(_,{column:M}),data:function(){return{screens:{},token:void 0}},methods:{getColumn:function(){var e=this.$props.column;if("object"===("undefined"===typeof e?"undefined":(0,i.A)(e)))for(var t=0;t0?"-"+c:c,h=(e={},(0,r.A)(e,u,!0),(0,r.A)(e,u+"-"+i,!0),(0,r.A)(e,u+"-with-text"+d,o["default"]),(0,r.A)(e,u+"-dashed",!!a),e);return t("div",{class:h,attrs:{role:"separator"}},[o["default"]&&t("span",{class:u+"-inner-text"},[o["default"]])])},install:function(e){e.use(a.A),e.component(s.name,s)}};t.A=s},28373:function(e,t,n){"use strict";n(29229)},41446:function(e,t,n){"use strict";n.d(t,{A:function(){return $}});var r=n(44508),i=n(5748),o=n(85505),a=n(46942),s=n.n(a),c=n(90034),l=n(75189),u=n.n(l),d=n(97479),h=n(85471),f=n(24415),p=n(52315),m=n(15848),v=n(51927),g=n(93986),y=n(4718),_={width:y.A.any,height:y.A.any,defaultOpen:y.A.bool,firstEnter:y.A.bool,open:y.A.bool,prefixCls:y.A.string,placement:y.A.string,level:y.A.oneOfType([y.A.string,y.A.array]),levelMove:y.A.oneOfType([y.A.number,y.A.func,y.A.array]),ease:y.A.string,duration:y.A.string,handler:y.A.any,showMask:y.A.bool,maskStyle:y.A.object,className:y.A.string,wrapStyle:y.A.object,maskClosable:y.A.bool,afterVisibleChange:y.A.func,keyboard:y.A.bool},b=(0,o.A)({},_,{wrapperClassName:y.A.string,forceRender:y.A.bool,getContainer:y.A.oneOfType([y.A.string,y.A.func,y.A.object,y.A.bool])}),M=((0,o.A)({},_,{getContainer:y.A.func,getOpenCount:y.A.func,switchScrollingEffect:y.A.func}),n(11207));function A(e){return Array.isArray(e)?e:[e]}var w={transition:"transitionend",WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend"},x=Object.keys(w).filter(function(e){if("undefined"===typeof document)return!1;var t=document.getElementsByTagName("html")[0];return e in(t?t.style:{})})[0],k=w[x];function L(e,t,n,r){e.addEventListener?e.addEventListener(t,n,r):e.attachEvent&&e.attachEvent("on"+t,n)}function C(e,t,n,r){e.removeEventListener?e.removeEventListener(t,n,r):e.attachEvent&&e.detachEvent("on"+t,n)}function S(e,t){var n=void 0;return n="function"===typeof e?e(t):e,Array.isArray(n)?2===n.length?n:[n[0],n[1]]:[n]}var z=function(e){return!isNaN(parseFloat(e))&&isFinite(e)},T=("undefined"!==typeof window&&window.document&&window.document.createElement,n(48159));function O(){}var H={},D=!("undefined"!==typeof window&&window.document&&window.document.createElement);h.Ay.use(f.A,{name:"ant-ref"});var Y={mixins:[p.A],props:(0,m.CB)(b,{prefixCls:"drawer",placement:"left",getContainer:"body",level:"all",duration:".3s",ease:"cubic-bezier(0.78, 0.14, 0.15, 0.86)",firstEnter:!1,showMask:!0,handler:!0,maskStyle:{},wrapperClassName:"",className:""}),data:function(){this.levelDom=[],this.contentDom=null,this.maskDom=null,this.handlerdom=null,this.mousePos=null,this.sFirstEnter=this.firstEnter,this.timeout=null,this.children=null,this.drawerId=Number((Date.now()+Math.random()).toString().replace(".",Math.round(9*Math.random()))).toString(16);var e=void 0!==this.open?this.open:!!this.defaultOpen;return H[this.drawerId]=e,this.orignalOpen=this.open,this.preProps=(0,o.A)({},this.$props),{sOpen:e}},mounted:function(){var e=this;this.$nextTick(function(){if(!D){var t=!1;window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){return t=!0,null}})),e.passive=!!t&&{passive:!1}}var n=e.getOpen();(e.handler||n||e.sFirstEnter)&&(e.getDefault(e.$props),n&&(e.isOpenChange=!0,e.$nextTick(function(){e.domFocus()})),e.$forceUpdate())})},watch:{open:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(e){var t=this;void 0!==e&&e!==this.preProps.open&&(this.isOpenChange=!0,this.container||this.getDefault(this.$props),this.setState({sOpen:open})),this.preProps.open=e,e&&this.$nextTick(function(){t.domFocus()})}),placement:function(e){e!==this.preProps.placement&&(this.contentDom=null),this.preProps.placement=e},level:function(e){this.preProps.level!==e&&this.getParentAndLevelDom(this.$props),this.preProps.level=e}},updated:function(){var e=this;this.$nextTick(function(){!e.sFirstEnter&&e.container&&(e.$forceUpdate(),e.sFirstEnter=!0)})},beforeDestroy:function(){delete H[this.drawerId],delete this.isOpenChange,this.container&&(this.sOpen&&this.setLevelDomTransform(!1,!0),document.body.style.overflow=""),this.sFirstEnter=!1,clearTimeout(this.timeout)},methods:{domFocus:function(){this.dom&&this.dom.focus()},onKeyDown:function(e){e.keyCode===M.A.ESC&&(e.stopPropagation(),this.$emit("close",e))},onMaskTouchEnd:function(e){this.$emit("close",e),this.onTouchEnd(e,!0)},onIconTouchEnd:function(e){this.$emit("handleClick",e),this.onTouchEnd(e)},onTouchEnd:function(e,t){if(void 0===this.open){var n=t||this.sOpen;this.isOpenChange=!0,this.setState({sOpen:!n})}},onWrapperTransitionEnd:function(e){if(e.target===this.contentWrapper&&e.propertyName.match(/transform$/)){var t=this.getOpen();this.dom.style.transition="",!t&&this.getCurrentDrawerSome()&&(document.body.style.overflowX="",this.maskDom&&(this.maskDom.style.left="",this.maskDom.style.width="")),this.afterVisibleChange&&this.afterVisibleChange(!!t)}},getDefault:function(e){this.getParentAndLevelDom(e),(e.getContainer||e.parent)&&(this.container=this.defaultGetContainer())},getCurrentDrawerSome:function(){return!Object.keys(H).some(function(e){return H[e]})},getSelfContainer:function(){return this.container},getParentAndLevelDom:function(e){var t=this;if(!D){var n=e.level,r=e.getContainer;if(this.levelDom=[],r){if("string"===typeof r){var i=document.querySelectorAll(r)[0];this.parent=i}"function"===typeof r&&(this.parent=r()),"object"===("undefined"===typeof r?"undefined":(0,d.A)(r))&&r instanceof window.HTMLElement&&(this.parent=r)}if(!r&&this.container&&(this.parent=this.container.parentNode),"all"===n){var o=Array.prototype.slice.call(this.parent.children);o.forEach(function(e){"SCRIPT"!==e.nodeName&&"STYLE"!==e.nodeName&&"LINK"!==e.nodeName&&e!==t.container&&t.levelDom.push(e)})}else n&&A(n).forEach(function(e){document.querySelectorAll(e).forEach(function(e){t.levelDom.push(e)})})}},setLevelDomTransform:function(e,t,n,r){var i=this,o=this.$props,a=o.placement,s=o.levelMove,c=o.duration,l=o.ease,u=o.getContainer;if(!D&&(this.levelDom.forEach(function(o){if(i.isOpenChange||t){o.style.transition="transform "+c+" "+l,L(o,k,i.trnasitionEnd);var u=e?r:0;if(s){var d=S(s,{target:o,open:e});u=e?d[0]:d[1]||0}var h="number"===typeof u?u+"px":u,f="left"===a||"top"===a?h:"-"+h;o.style.transform=u?n+"("+f+")":"",o.style.msTransform=u?n+"("+f+")":""}}),"body"===u)){var d=["touchstart"],h=[document.body,this.maskDom,this.handlerdom,this.contentDom],f=document.body.scrollHeight>(window.innerHeight||document.documentElement.clientHeight)&&window.innerWidth>document.body.offsetWidth?(0,g.A)(1):0,p="width "+c+" "+l,v="transform "+c+" "+l;if(e&&"hidden"!==document.body.style.overflow){if(document.body.style.overflow="hidden",f){switch(document.body.style.position="relative",document.body.style.width="calc(100% - "+f+"px)",this.dom.style.transition="none",a){case"right":this.dom.style.transform="translateX(-"+f+"px)",this.dom.style.msTransform="translateX(-"+f+"px)";break;case"top":case"bottom":this.dom.style.width="calc(100% - "+f+"px)",this.dom.style.transform="translateZ(0)";break;default:break}clearTimeout(this.timeout),this.timeout=setTimeout(function(){i.dom.style.transition=v+","+p,i.dom.style.width="",i.dom.style.transform="",i.dom.style.msTransform=""})}h.forEach(function(e,t){e&&L(e,d[t]||"touchmove",t?i.removeMoveHandler:i.removeStartHandler,i.passive)})}else if(this.getCurrentDrawerSome()){if(document.body.style.overflow="",(this.isOpenChange||t)&&f){document.body.style.position="",document.body.style.width="",x&&(document.body.style.overflowX="hidden"),this.dom.style.transition="none";var y=void 0;switch(a){case"right":this.dom.style.transform="translateX("+f+"px)",this.dom.style.msTransform="translateX("+f+"px)",this.dom.style.width="100%",p="width 0s "+l+" "+c,this.maskDom&&(this.maskDom.style.left="-"+f+"px",this.maskDom.style.width="calc(100% + "+f+"px)");break;case"top":case"bottom":this.dom.style.width="calc(100% + "+f+"px)",this.dom.style.height="100%",this.dom.style.transform="translateZ(0)",y="height 0s "+l+" "+c;break;default:break}clearTimeout(this.timeout),this.timeout=setTimeout(function(){i.dom.style.transition=v+","+(y?y+",":"")+p,i.dom.style.transform="",i.dom.style.msTransform="",i.dom.style.width="",i.dom.style.height=""})}h.forEach(function(e,t){e&&C(e,d[t]||"touchmove",t?i.removeMoveHandler:i.removeStartHandler,i.passive)})}}var _=(0,m.WM)(this),b=_.change;b&&this.isOpenChange&&this.sFirstEnter&&(b(e),this.isOpenChange=!1)},getChildToRender:function(e){var t,n=this,i=this.$createElement,o=this.$props,a=o.className,c=o.prefixCls,l=o.placement,d=o.handler,h=o.showMask,f=o.maskStyle,p=o.width,g=o.height,y=o.wrapStyle,_=o.keyboard,b=o.maskClosable,M=this.$slots["default"],A=s()(c,(t={},(0,r.A)(t,c+"-"+l,!0),(0,r.A)(t,c+"-open",e),(0,r.A)(t,a,!!a),(0,r.A)(t,"no-mask",!h),t)),w=this.isOpenChange,x="left"===l||"right"===l,k="translate"+(x?"X":"Y"),L="left"===l||"top"===l?"-100%":"100%",C=e?"":k+"("+L+")";if(void 0===w||w){var S=this.contentDom?this.contentDom.getBoundingClientRect()[x?"width":"height"]:0,T=(x?p:g)||S;this.setLevelDomTransform(e,!1,k,T)}var H=void 0;if(!1!==d){var D=i("div",{class:"drawer-handle"},[i("i",{class:"drawer-handle-icon"})]),Y=this.handler,V=Y&&Y[0]||D,P=(0,m.kQ)(V),E=P.click;H=(0,v.Ob)(V,{on:{click:function(e){E&&E(),n.onIconTouchEnd(e)}},directives:[{name:"ant-ref",value:function(e){n.handlerdom=e}}]})}var j={class:A,directives:[{name:"ant-ref",value:function(e){n.dom=e}}],on:{transitionend:this.onWrapperTransitionEnd,keydown:e&&_?this.onKeyDown:O},style:y},F=[{name:"ant-ref",value:function(e){n.maskDom=e}}],I=[{name:"ant-ref",value:function(e){n.contentWrapper=e}}],$=[{name:"ant-ref",value:function(e){n.contentDom=e}}];return i("div",u()([j,{attrs:{tabIndex:-1}}]),[h&&i("div",u()([{key:e,class:c+"-mask",on:{click:b?this.onMaskTouchEnd:O},style:f},{directives:F}])),i("div",u()([{class:c+"-content-wrapper",style:{transform:C,msTransform:C,width:z(p)?p+"px":p,height:z(g)?g+"px":g}},{directives:I}]),[i("div",u()([{class:c+"-content"},{directives:$},{on:{touchstart:e?this.removeStartHandler:O,touchmove:e?this.removeMoveHandler:O}}]),[M]),H])])},getOpen:function(){return void 0!==this.open?this.open:this.sOpen},getTouchParentScroll:function(e,t,n,r){if(!t||t===document)return!1;if(t===e.parentNode)return!0;var i=Math.max(Math.abs(n),Math.abs(r))===Math.abs(r),o=Math.max(Math.abs(n),Math.abs(r))===Math.abs(n),a=t.scrollHeight-t.clientHeight,s=t.scrollWidth-t.clientWidth,c=t.scrollTop,l=t.scrollLeft;t.scrollTo&&t.scrollTo(t.scrollLeft+1,t.scrollTop+1);var u=t.scrollTop,d=t.scrollLeft;return t.scrollTo&&t.scrollTo(t.scrollLeft-1,t.scrollTop-1),!((!i||a&&u-c&&(!a||!(t.scrollTop>=a&&r<0||t.scrollTop<=0&&r>0)))&&(!o||s&&d-l&&(!s||!(t.scrollLeft>=s&&n<0||t.scrollLeft<=0&&n>0))))&&this.getTouchParentScroll(e,t.parentNode,n,r)},removeStartHandler:function(e){e.touches.length>1||(this.startPos={x:e.touches[0].clientX,y:e.touches[0].clientY})},removeMoveHandler:function(e){if(!(e.changedTouches.length>1)){var t=e.currentTarget,n=e.changedTouches[0].clientX-this.startPos.x,r=e.changedTouches[0].clientY-this.startPos.y;(t===this.maskDom||t===this.handlerdom||t===this.contentDom&&this.getTouchParentScroll(t,e.target,n,r))&&e.preventDefault()}},trnasitionEnd:function(e){C(e.target,k,this.trnasitionEnd),e.target.style.transition=""},defaultGetContainer:function(){if(D)return null;var e=document.createElement("div");return this.parent.appendChild(e),this.wrapperClassName&&(e.className=this.wrapperClassName),e}},render:function(){var e=this,t=arguments[0],n=this.$props,r=n.getContainer,i=n.wrapperClassName,o=n.handler,a=n.forceRender,s=this.getOpen(),c=null;H[this.drawerId]=s?this.container:s;var l=this.getChildToRender(!!this.sFirstEnter&&s);if(!r){var d=[{name:"ant-ref",value:function(t){e.container=t}}];return t("div",u()([{class:i},{directives:d}]),[l])}if(!this.container||!s&&!this.sFirstEnter)return null;var h=!!o||a;return(h||s||this.dom)&&(c=t(T.A,{attrs:{getContainer:this.getSelfContainer,children:l}})),c}},V=Y,P=V,E=n(40255),j=n(25592),F=n(44807),I={name:"ADrawer",props:{closable:y.A.bool.def(!0),destroyOnClose:y.A.bool,getContainer:y.A.any,maskClosable:y.A.bool.def(!0),mask:y.A.bool.def(!0),maskStyle:y.A.object,wrapStyle:y.A.object,bodyStyle:y.A.object,headerStyle:y.A.object,drawerStyle:y.A.object,title:y.A.any,visible:y.A.bool,width:y.A.oneOfType([y.A.string,y.A.number]).def(256),height:y.A.oneOfType([y.A.string,y.A.number]).def(256),zIndex:y.A.number,prefixCls:y.A.string,placement:y.A.oneOf(["top","right","bottom","left"]).def("right"),level:y.A.any.def(null),wrapClassName:y.A.string,handle:y.A.any,afterVisibleChange:y.A.func,keyboard:y.A.bool.def(!0)},mixins:[p.A],data:function(){return this.destroyClose=!1,this.preVisible=this.$props.visible,{_push:!1}},inject:{parentDrawer:{default:function(){return null}},configProvider:{default:function(){return j.f}}},provide:function(){return{parentDrawer:this}},mounted:function(){var e=this.visible;e&&this.parentDrawer&&this.parentDrawer.push()},updated:function(){var e=this;this.$nextTick(function(){e.preVisible!==e.visible&&e.parentDrawer&&(e.visible?e.parentDrawer.push():e.parentDrawer.pull()),e.preVisible=e.visible})},beforeDestroy:function(){this.parentDrawer&&this.parentDrawer.pull()},methods:{domFocus:function(){this.$refs.vcDrawer&&this.$refs.vcDrawer.domFocus()},close:function(e){this.$emit("close",e)},push:function(){this.setState({_push:!0})},pull:function(){var e=this;this.setState({_push:!1},function(){e.domFocus()})},onDestroyTransitionEnd:function(){var e=this.getDestroyOnClose();e&&(this.visible||(this.destroyClose=!0,this.$forceUpdate()))},getDestroyOnClose:function(){return this.destroyOnClose&&!this.visible},getPushTransform:function(e){return"left"===e||"right"===e?"translateX("+("left"===e?180:-180)+"px)":"top"===e||"bottom"===e?"translateY("+("top"===e?180:-180)+"px)":void 0},getRcDrawerStyle:function(){var e=this.$props,t=e.zIndex,n=e.placement,r=e.wrapStyle,i=this.$data._push;return(0,o.A)({zIndex:t,transform:i?this.getPushTransform(n):void 0},r)},renderHeader:function(e){var t=this.$createElement,n=this.$props,r=n.closable,i=n.headerStyle,o=(0,m.nu)(this,"title");if(!o&&!r)return null;var a=o?e+"-header":e+"-header-no-title";return t("div",{class:a,style:i},[o&&t("div",{class:e+"-title"},[o]),r?this.renderCloseIcon(e):null])},renderCloseIcon:function(e){var t=this.$createElement,n=this.closable;return n&&t("button",{key:"closer",on:{click:this.close},attrs:{"aria-label":"Close"},class:e+"-close"},[t(E.A,{attrs:{type:"close"}})])},renderBody:function(e){var t=this.$createElement;if(this.destroyClose&&!this.visible)return null;this.destroyClose=!1;var n=this.$props,r=n.bodyStyle,i=n.drawerStyle,a={},s=this.getDestroyOnClose();return s&&(a.opacity=0,a.transition="opacity .3s"),t("div",{class:e+"-wrapper-body",style:(0,o.A)({},a,i),on:{transitionend:this.onDestroyTransitionEnd}},[this.renderHeader(e),t("div",{key:"body",class:e+"-body",style:r},[this.$slots["default"]])])}},render:function(){var e,t=arguments[0],n=(0,m.Oq)(this),a=n.prefixCls,l=n.width,u=n.height,d=n.visible,h=n.placement,f=n.wrapClassName,p=n.mask,v=(0,i.A)(n,["prefixCls","width","height","visible","placement","wrapClassName","mask"]),g=p?"":"no-mask",y={};"left"===h||"right"===h?y.width="number"===typeof l?l+"px":l:y.height="number"===typeof u?u+"px":u;var _=(0,m.nu)(this,"handle")||!1,b=this.configProvider.getPrefixCls,M=b("drawer",a),A={ref:"vcDrawer",props:(0,o.A)({},(0,c.A)(v,["closable","destroyOnClose","drawerStyle","headerStyle","bodyStyle","title","push","visible","getPopupContainer","rootPrefixCls","getPrefixCls","renderEmpty","csp","pageHeader","autoInsertSpaceInButton"]),{handler:_},y,{prefixCls:M,open:d,showMask:p,placement:h,className:s()((e={},(0,r.A)(e,f,!!f),(0,r.A)(e,g,!!g),e)),wrapStyle:this.getRcDrawerStyle()}),on:(0,o.A)({},(0,m.WM)(this))};return t(P,A,[this.renderBody(M)])},install:function(e){e.use(F.A),e.component(I.name,I)}},$=I},25537:function(e,t,n){"use strict";n(29229)},13185:function(e,t,n){"use strict";var r=n(5748),i=n(85505),o=n(49084),a=n(26997),s=n(49872),c=n(57981),l=n(4718),u=n(15848),d=n(81156),h=n(25592),f=n(40255),p=(0,a.A)(),m=(0,d.A)(),v=o.A.Group,g=(0,i.A)({},s.E,m,{type:l.A.oneOf(["primary","ghost","dashed","danger","default"]).def("default"),size:l.A.oneOf(["small","large","default"]).def("default"),htmlType:p.htmlType,href:l.A.string,disabled:l.A.bool,prefixCls:l.A.string,placement:m.placement.def("bottomRight"),icon:l.A.any,title:l.A.string});t.A={name:"ADropdownButton",model:{prop:"visible",event:"visibleChange"},props:g,provide:function(){return{savePopupRef:this.savePopupRef}},inject:{configProvider:{default:function(){return h.f}}},methods:{savePopupRef:function(e){this.popupRef=e},onClick:function(e){this.$emit("click",e)},onVisibleChange:function(e){this.$emit("visibleChange",e)}},render:function(){var e=arguments[0],t=this.$props,n=t.type,a=t.disabled,s=t.htmlType,l=t.prefixCls,d=t.trigger,h=t.align,p=t.visible,m=t.placement,g=t.getPopupContainer,y=t.href,_=t.title,b=(0,r.A)(t,["type","disabled","htmlType","prefixCls","trigger","align","visible","placement","getPopupContainer","href","title"]),M=(0,u.nu)(this,"icon")||e(f.A,{attrs:{type:"ellipsis"}}),A=this.configProvider.getPopupContainer,w=this.configProvider.getPrefixCls,x=w("dropdown-button",l),k={props:{align:h,disabled:a,trigger:a?[]:d,placement:m,getPopupContainer:g||A},on:{visibleChange:this.onVisibleChange}};(0,u.cK)(this,"visible")&&(k.props.visible=p);var L={props:(0,i.A)({},b),class:x};return e(v,L,[e(o.A,{attrs:{type:n,disabled:a,htmlType:s,href:y,title:_},on:{click:this.onClick}},[this.$slots["default"]]),e(c.A,k,[e("template",{slot:"overlay"},[(0,u.nu)(this,"overlay")]),e(o.A,{attrs:{type:n}},[M])])])}}},57981:function(e,t,n){"use strict";n.d(t,{A:function(){return A}});var r=n(85505),i=n(5748),o=n(4718),a=n(47006),s={adjustX:1,adjustY:1},c=[0,0],l={topLeft:{points:["bl","tl"],overflow:s,offset:[0,-4],targetOffset:c},topCenter:{points:["bc","tc"],overflow:s,offset:[0,-4],targetOffset:c},topRight:{points:["br","tr"],overflow:s,offset:[0,-4],targetOffset:c},bottomLeft:{points:["tl","bl"],overflow:s,offset:[0,4],targetOffset:c},bottomCenter:{points:["tc","bc"],overflow:s,offset:[0,4],targetOffset:c},bottomRight:{points:["tr","br"],overflow:s,offset:[0,4],targetOffset:c}},u=l,d=n(15848),h=n(52315),f=n(51927),p={mixins:[h.A],props:{minOverlayWidthMatchTrigger:o.A.bool,prefixCls:o.A.string.def("rc-dropdown"),transitionName:o.A.string,overlayClassName:o.A.string.def(""),openClassName:o.A.string,animation:o.A.any,align:o.A.object,overlayStyle:o.A.object.def(function(){return{}}),placement:o.A.string.def("bottomLeft"),overlay:o.A.any,trigger:o.A.array.def(["hover"]),alignPoint:o.A.bool,showAction:o.A.array.def([]),hideAction:o.A.array.def([]),getPopupContainer:o.A.func,visible:o.A.bool,defaultVisible:o.A.bool.def(!1),mouseEnterDelay:o.A.number.def(.15),mouseLeaveDelay:o.A.number.def(.1)},data:function(){var e=this.defaultVisible;return(0,d.cK)(this,"visible")&&(e=this.visible),{sVisible:e}},watch:{visible:function(e){void 0!==e&&this.setState({sVisible:e})}},methods:{onClick:function(e){(0,d.cK)(this,"visible")||this.setState({sVisible:!1}),this.$emit("overlayClick",e),this.childOriginEvents.click&&this.childOriginEvents.click(e)},onVisibleChange:function(e){(0,d.cK)(this,"visible")||this.setState({sVisible:e}),this.__emit("visibleChange",e)},getMinOverlayWidthMatchTrigger:function(){var e=(0,d.Oq)(this),t=e.minOverlayWidthMatchTrigger,n=e.alignPoint;return"minOverlayWidthMatchTrigger"in e?t:!n},getOverlayElement:function(){var e=this.overlay||this.$slots.overlay||this.$scopedSlots.overlay,t=void 0;return t="function"===typeof e?e():e,t},getMenuElement:function(){var e=this,t=this.onClick,n=this.prefixCls,r=this.$slots;this.childOriginEvents=(0,d.kQ)(r.overlay[0]);var i=this.getOverlayElement(),o={props:{prefixCls:n+"-menu",getPopupContainer:function(){return e.getPopupDomNode()}},on:{click:t}};return"string"===typeof i.type&&delete o.props.prefixCls,(0,f.Ob)(r.overlay[0],o)},getMenuElementOrLambda:function(){var e=this.overlay||this.$slots.overlay||this.$scopedSlots.overlay;return"function"===typeof e?this.getMenuElement:this.getMenuElement()},getPopupDomNode:function(){return this.$refs.trigger.getPopupDomNode()},getOpenClassName:function(){var e=this.$props,t=e.openClassName,n=e.prefixCls;return void 0!==t?t:n+"-open"},afterVisibleChange:function(e){if(e&&this.getMinOverlayWidthMatchTrigger()){var t=this.getPopupDomNode(),n=this.$el;n&&t&&n.offsetWidth>t.offsetWidth&&(t.style.minWidth=n.offsetWidth+"px",this.$refs.trigger&&this.$refs.trigger._component&&this.$refs.trigger._component.$refs&&this.$refs.trigger._component.$refs.alignInstance&&this.$refs.trigger._component.$refs.alignInstance.forceAlign())}},renderChildren:function(){var e=this.$slots["default"]&&this.$slots["default"][0],t=this.sVisible;return t&&e?(0,f.Ob)(e,{class:this.getOpenClassName()}):e}},render:function(){var e=arguments[0],t=this.$props,n=t.prefixCls,o=t.transitionName,s=t.animation,c=t.align,l=t.placement,d=t.getPopupContainer,h=t.showAction,f=t.hideAction,p=t.overlayClassName,m=t.overlayStyle,v=t.trigger,g=(0,i.A)(t,["prefixCls","transitionName","animation","align","placement","getPopupContainer","showAction","hideAction","overlayClassName","overlayStyle","trigger"]),y=f;y||-1===v.indexOf("contextmenu")||(y=["click"]);var _={props:(0,r.A)({},g,{prefixCls:n,popupClassName:p,popupStyle:m,builtinPlacements:u,action:v,showAction:h,hideAction:y||[],popupPlacement:l,popupAlign:c,popupTransitionName:o,popupAnimation:s,popupVisible:this.sVisible,afterPopupVisibleChange:this.afterVisibleChange,getPopupContainer:d}),on:{popupVisibleChange:this.onVisibleChange},ref:"trigger"};return e(a.A,_,[this.renderChildren(),e("template",{slot:"popup"},[this.$slots.overlay&&this.getMenuElement()])])}},m=p,v=n(13185),g=n(81156),y=n(25592),_=n(40255),b=(0,g.A)(),M={name:"ADropdown",props:(0,r.A)({},b,{prefixCls:o.A.string,mouseEnterDelay:o.A.number.def(.15),mouseLeaveDelay:o.A.number.def(.1),placement:b.placement.def("bottomLeft")}),model:{prop:"visible",event:"visibleChange"},provide:function(){return{savePopupRef:this.savePopupRef}},inject:{configProvider:{default:function(){return y.f}}},methods:{savePopupRef:function(e){this.popupRef=e},getTransitionName:function(){var e=this.$props,t=e.placement,n=void 0===t?"":t,r=e.transitionName;return void 0!==r?r:n.indexOf("top")>=0?"slide-down":"slide-up"},renderOverlay:function(e){var t=this.$createElement,n=(0,d.nu)(this,"overlay"),r=Array.isArray(n)?n[0]:n,i=r&&(0,d.Ts)(r),o=i||{},a=o.selectable,s=void 0!==a&&a,c=o.focusable,l=void 0===c||c,u=t("span",{class:e+"-menu-submenu-arrow"},[t(_.A,{attrs:{type:"right"},class:e+"-menu-submenu-arrow-icon"})]),h=r&&r.componentOptions?(0,f.Ob)(r,{props:{mode:"vertical",selectable:s,focusable:l,expandIcon:u}}):n;return h}},render:function(){var e=arguments[0],t=this.$slots,n=(0,d.Oq)(this),i=n.prefixCls,o=n.trigger,a=n.disabled,s=n.getPopupContainer,c=this.configProvider.getPopupContainer,l=this.configProvider.getPrefixCls,u=l("dropdown",i),h=(0,f.Ob)(t["default"],{class:u+"-trigger",props:{disabled:a}}),p=a?[]:o,v=void 0;p&&-1!==p.indexOf("contextmenu")&&(v=!0);var g={props:(0,r.A)({alignPoint:v},n,{prefixCls:u,getPopupContainer:s||c,transitionName:this.getTransitionName(),trigger:p}),on:(0,d.WM)(this)};return e(m,g,[h,e("template",{slot:"overlay"},[this.renderOverlay(u)])])}};M.Button=v.A;var A=M},81156:function(e,t,n){"use strict";var r=n(4718);t.A=function(){return{trigger:r.A.array.def(["hover"]),overlay:r.A.any,visible:r.A.bool,disabled:r.A.bool,align:r.A.object,getPopupContainer:r.A.func,prefixCls:r.A.string,transitionName:r.A.string,placement:r.A.oneOf(["topLeft","topCenter","topRight","bottomLeft","bottomCenter","bottomRight"]),overlayClassName:r.A.string,overlayStyle:r.A.object,forceRender:r.A.bool,mouseEnterDelay:r.A.number,mouseLeaveDelay:r.A.number,openClassName:r.A.string,minOverlayWidthMatchTrigger:r.A.bool}}},77197:function(e,t,n){"use strict";var r=n(57981),i=n(13185),o=n(44807);r.A.Button=i.A,r.A.install=function(e){e.use(o.A),e.component(r.A.name,r.A),e.component(i.A.name,i.A)},t.Ay=r.A},63713:function(e,t,n){"use strict";n(29229),n(27902)},2970:function(e,t,n){"use strict";n.d(t,{Ay:function(){return g}});var r=n(75189),i=n.n(r),o=n(97479),a=n(44508),s=n(85505),c=n(4718),l=n(25592),u=n(15848),d=n(38377),h={functional:!0,PRESENTED_IMAGE_DEFAULT:!0,render:function(){var e=arguments[0];return e("svg",{attrs:{width:"184",height:"152",viewBox:"0 0 184 152",xmlns:"http://www.w3.org/2000/svg"}},[e("g",{attrs:{fill:"none",fillRule:"evenodd"}},[e("g",{attrs:{transform:"translate(24 31.67)"}},[e("ellipse",{attrs:{fillOpacity:".8",fill:"#F5F5F7",cx:"67.797",cy:"106.89",rx:"67.797",ry:"12.668"}}),e("path",{attrs:{d:"M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z",fill:"#AEB8C2"}}),e("path",{attrs:{d:"M101.537 86.214L80.63 61.102c-1.001-1.207-2.507-1.867-4.048-1.867H31.724c-1.54 0-3.047.66-4.048 1.867L6.769 86.214v13.792h94.768V86.214z",fill:"url(#linearGradient-1)",transform:"translate(13.56)"}}),e("path",{attrs:{d:"M33.83 0h67.933a4 4 0 0 1 4 4v93.344a4 4 0 0 1-4 4H33.83a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z",fill:"#F5F5F7"}}),e("path",{attrs:{d:"M42.678 9.953h50.237a2 2 0 0 1 2 2V36.91a2 2 0 0 1-2 2H42.678a2 2 0 0 1-2-2V11.953a2 2 0 0 1 2-2zM42.94 49.767h49.713a2.262 2.262 0 1 1 0 4.524H42.94a2.262 2.262 0 0 1 0-4.524zM42.94 61.53h49.713a2.262 2.262 0 1 1 0 4.525H42.94a2.262 2.262 0 0 1 0-4.525zM121.813 105.032c-.775 3.071-3.497 5.36-6.735 5.36H20.515c-3.238 0-5.96-2.29-6.734-5.36a7.309 7.309 0 0 1-.222-1.79V69.675h26.318c2.907 0 5.25 2.448 5.25 5.42v.04c0 2.971 2.37 5.37 5.277 5.37h34.785c2.907 0 5.277-2.421 5.277-5.393V75.1c0-2.972 2.343-5.426 5.25-5.426h26.318v33.569c0 .617-.077 1.216-.221 1.789z",fill:"#DCE0E6"}})]),e("path",{attrs:{d:"M149.121 33.292l-6.83 2.65a1 1 0 0 1-1.317-1.23l1.937-6.207c-2.589-2.944-4.109-6.534-4.109-10.408C138.802 8.102 148.92 0 161.402 0 173.881 0 184 8.102 184 18.097c0 9.995-10.118 18.097-22.599 18.097-4.528 0-8.744-1.066-12.28-2.902z",fill:"#DCE0E6"}}),e("g",{attrs:{transform:"translate(149.65 15.383)",fill:"#FFF"}},[e("ellipse",{attrs:{cx:"20.654",cy:"3.167",rx:"2.849",ry:"2.815"}}),e("path",{attrs:{d:"M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z"}})])])])}},f={functional:!0,PRESENTED_IMAGE_SIMPLE:!0,render:function(){var e=arguments[0];return e("svg",{attrs:{width:"64",height:"41",viewBox:"0 0 64 41",xmlns:"http://www.w3.org/2000/svg"}},[e("g",{attrs:{transform:"translate(0 1)",fill:"none",fillRule:"evenodd"}},[e("ellipse",{attrs:{fill:"#F5F5F5",cx:"32",cy:"33",rx:"32",ry:"7"}}),e("g",{attrs:{fillRule:"nonzero",stroke:"#D9D9D9"}},[e("path",{attrs:{d:"M55 12.76L44.854 1.258C44.367.474 43.656 0 42.907 0H21.093c-.749 0-1.46.474-1.947 1.257L9 12.761V22h46v-9.24z"}}),e("path",{attrs:{d:"M41.613 15.931c0-1.605.994-2.93 2.227-2.931H55v18.137C55 33.26 53.68 35 52.05 35h-40.1C10.32 35 9 33.259 9 31.137V13h11.16c1.233 0 2.227 1.323 2.227 2.928v.022c0 1.605 1.005 2.901 2.237 2.901h14.752c1.232 0 2.237-1.308 2.237-2.913v-.007z",fill:"#FAFAFA"}})])])])}},p=n(44807),m=function(){return{prefixCls:c.A.string,image:c.A.any,description:c.A.any,imageStyle:c.A.object}},v={name:"AEmpty",props:(0,s.A)({},m()),inject:{configProvider:{default:function(){return l.f}}},methods:{renderEmpty:function(e){var t=this.$createElement,n=this.$props,r=n.prefixCls,s=n.imageStyle,c=this.configProvider.getPrefixCls,l=c("empty",r),d=(0,u.nu)(this,"image")||t(h),f=(0,u.nu)(this,"description"),p="undefined"!==typeof f?f:e.description,m="string"===typeof p?p:"empty",v=(0,a.A)({},l,!0),g=null;if("string"===typeof d)g=t("img",{attrs:{alt:m,src:d}});else if("object"===("undefined"===typeof d?"undefined":(0,o.A)(d))&&d.PRESENTED_IMAGE_SIMPLE){var y=d;g=t(y),v[l+"-normal"]=!0}else g=d;return t("div",i()([{class:v},{on:(0,u.WM)(this)}]),[t("div",{class:l+"-image",style:s},[g]),p&&t("p",{class:l+"-description"},[p]),this.$slots["default"]&&t("div",{class:l+"-footer"},[this.$slots["default"]])])}},render:function(){var e=arguments[0];return e(d.A,{attrs:{componentName:"Empty"},scopedSlots:{default:this.renderEmpty}})}};v.PRESENTED_IMAGE_DEFAULT=h,v.PRESENTED_IMAGE_SIMPLE=f,v.install=function(e){e.use(p.A),e.component(v.name,v)};var g=v},93693:function(e,t,n){"use strict";n(29229)},70742:function(e,t,n){"use strict";n.d(t,{Ay:function(){return O}});var r=n(85471),i=n(44508),o=n(85505),a=n(4718),s=n(46942),c=n.n(s),l=n(43594),u=n(69607),d=n.n(u),h=n(36873),f=n(32173),p=n(88055),m=n.n(p),v=n(15848),g=n(52315),y=n(25592),_=n(75837),b=n(51927);function M(){}function A(e,t,n){var r=e;t=t.replace(/\[(\w+)\]/g,".$1"),t=t.replace(/^\./,"");for(var i=t.split("."),o=0,a=i.length;o1&&void 0!==arguments[1]?arguments[1]:M;this.validateDisabled=!1;var r=this.getFilteredRule(e);if(!r||0===r.length)return n(),!0;this.validateState="validating";var i={};r&&r.length>0&&r.forEach(function(e){delete e.trigger}),i[this.prop]=r;var o=new f.A(i);this.FormContext&&this.FormContext.validateMessages&&o.messages(this.FormContext.validateMessages);var a={};a[this.prop]=this.fieldValue,o.validate(a,{firstFields:!0},function(e,r){t.validateState=e?"error":"success",t.validateMessage=e?e[0].message:"",n(t.validateMessage,r),t.FormContext&&t.FormContext.$emit&&t.FormContext.$emit("validate",t.prop,!e,t.validateMessage||null)})},getRules:function(){var e=this.FormContext.rules,t=this.rules,n=void 0!==this.required?{required:!!this.required,trigger:"change"}:[],r=A(e,this.prop||"");return e=e?r.o[this.prop||""]||r.v:[],[].concat(t||e||[]).concat(n)},getFilteredRule:function(e){var t=this.getRules();return t.filter(function(t){return!t.trigger||""===e||(Array.isArray(t.trigger)?t.trigger.indexOf(e)>-1:t.trigger===e)}).map(function(e){return(0,o.A)({},e)})},onFieldBlur:function(){this.validate("blur")},onFieldChange:function(){this.validateDisabled?this.validateDisabled=!1:this.validate("change")},clearValidate:function(){this.validateState="",this.validateMessage="",this.validateDisabled=!1},resetField:function(){var e=this;this.validateState="",this.validateMessage="";var t=this.FormContext.model||{},n=this.fieldValue,r=this.prop;-1!==r.indexOf(":")&&(r=r.replace(/:/,"."));var i=A(t,r,!0);this.validateDisabled=!0,Array.isArray(n)?i.o[i.k]=[].concat(this.initialValue):i.o[i.k]=this.initialValue,this.$nextTick(function(){e.validateDisabled=!1})}},render:function(){var e=this,t=arguments[0],n=this.$slots,r=this.$scopedSlots,i=(0,v.Oq)(this),a=(0,v.nu)(this,"label"),s=(0,v.nu)(this,"extra"),c=(0,v.nu)(this,"help"),l={props:(0,o.A)({},i,{label:a,extra:s,validateStatus:this.validateState,help:this.validateMessage||c,required:this.isRequired||i.required})},u=(0,v.Gk)(r["default"]?r["default"]():n["default"]),d=u[0];if(this.prop&&this.autoLink&&(0,v.zO)(d)){var h=(0,v.kQ)(d),f=h.blur,p=h.change;d=(0,b.Ob)(d,{on:{blur:function(){f&&f.apply(void 0,arguments),e.onFieldBlur()},change:function(){if(Array.isArray(p))for(var t=0,n=p.length;t0&&void 0!==arguments[0]?arguments[0]:[],t=e.length?"string"===typeof e?this.fields.filter(function(t){return e===t.prop}):this.fields.filter(function(t){return e.indexOf(t.prop)>-1}):this.fields;t.forEach(function(e){e.clearValidate()})},validate:function(e){var t=this;if(this.model){var n=void 0;"function"!==typeof e&&window.Promise&&(n=new window.Promise(function(t,n){e=function(e){e?t(e):n(e)}}));var r=!0,i=0;0===this.fields.length&&e&&e(!0);var a={};return this.fields.forEach(function(n){n.validate("",function(n,s){n&&(r=!1),a=(0,o.A)({},a,s),"function"===typeof e&&++i===t.fields.length&&e(r,a)})}),n||void 0}(0,h.A)(!1,"FormModel","model is required for resetFields to work.")},validateField:function(e,t){e=[].concat(e);var n=this.fields.filter(function(t){return-1!==e.indexOf(t.prop)});n.length?n.forEach(function(e){e.validate("",t)}):(0,h.A)(!1,"FormModel","please pass correct props!")}},render:function(){var e,t=arguments[0],n=this.prefixCls,r=this.hideRequiredMark,o=this.layout,a=this.onSubmit,s=this.$slots,l=this.configProvider.getPrefixCls,u=l("form",n),d=c()(u,(e={},(0,i.A)(e,u+"-horizontal","horizontal"===o),(0,i.A)(e,u+"-vertical","vertical"===o),(0,i.A)(e,u+"-inline","inline"===o),(0,i.A)(e,u+"-hide-required-mark",r),e));return t("form",{on:{submit:a},class:d},[s["default"]])}}),C=L,S=n(24415),z=n(35745),T=n(44807);r.Ay.use(S.A,{name:"ant-ref"}),r.Ay.use(z.A),C.install=function(e){e.use(T.A),e.component(C.name,C),e.component(C.Item.name,C.Item)};var O=C},98688:function(e,t,n){"use strict";n(29229),n(67434)},75837:function(e,t,n){"use strict";var r=n(97479),i=n(44508),o=n(5748),a=n(75189),s=n.n(a),c=n(32779),l=n(4718),u=n(46942),d=n.n(u),h=n(7309),f=n.n(h),p=n(9712),m=n(43594),v=n(36873),g=n(20355),y=n(15848),_=n(80178),b=n(52315),M=n(51927),A=n(40255),w=n(25592);function x(){}function k(e){return e.reduce(function(e,t){return[].concat((0,c.A)(e),[" ",t])},[]).slice(1)}var L={id:l.A.string,htmlFor:l.A.string,prefixCls:l.A.string,label:l.A.any,labelCol:l.A.shape(m.fZ).loose,wrapperCol:l.A.shape(m.fZ).loose,help:l.A.any,extra:l.A.any,validateStatus:l.A.oneOf(["","success","warning","error","validating"]),hasFeedback:l.A.bool,required:l.A.bool,colon:l.A.bool,fieldDecoratorId:l.A.string,fieldDecoratorOptions:l.A.object,selfUpdate:l.A.bool,labelAlign:l.A.oneOf(["left","right"])};function C(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n=!1,r=0,i=e.length;r0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n=[],r=0;r0)break;var i=e[r];if((i.tag||""!==i.text.trim())&&!(0,y.xr)(i).__ANT_FORM_ITEM){var o=(0,y.rz)(i),a=i.data&&i.data.attrs||{};g.H in a?n.push(i):o&&(n=n.concat(this.getControls(o,t)))}}return n},getOnlyControl:function(){var e=this.getControls(this.slotDefault,!1)[0];return void 0!==e?e:null},getChildAttr:function(e){var t=this.getOnlyControl(),n={};if(t)return t.data?n=t.data:t.$vnode&&t.$vnode.data&&(n=t.$vnode.data),n[e]||n.attrs[e]},getId:function(){return this.getChildAttr("id")},getMeta:function(){return this.getChildAttr(g.H)},getField:function(){return this.getChildAttr(g.W)},getValidateStatus:function(){var e=this.getOnlyControl();if(!e)return"";var t=this.getField();if(t.validating)return"validating";if(t.errors)return"error";var n="value"in t?t.value:this.getMeta().initialValue;return void 0!==n&&null!==n&&""!==n?"success":""},onLabelClick:function(){var e=this.id||this.getId();if(e){var t=this.$el,n=t.querySelector('[id="'+e+'"]');n&&n.focus&&n.focus()}},onHelpAnimEnd:function(e,t){this.helpShow=t,t||this.$forceUpdate()},isRequired:function(){var e=this.required;if(void 0!==e)return e;if(this.getOnlyControl()){var t=this.getMeta()||{},n=t.validate||[];return n.filter(function(e){return!!e.rules}).some(function(e){return e.rules.some(function(e){return e.required})})}return!1},renderHelp:function(e){var t=this,n=this.$createElement,r=this.getHelpMessage(),i=r?n("div",{class:e+"-explain",key:"help"},[r]):null;i&&(this.helpShow=!!i);var o=(0,_.A)("show-help",{afterEnter:function(){return t.onHelpAnimEnd("help",!0)},afterLeave:function(){return t.onHelpAnimEnd("help",!1)}});return n("transition",s()([o,{key:"help"}]),[i])},renderExtra:function(e){var t=this.$createElement,n=(0,y.nu)(this,"extra");return n?t("div",{class:e+"-extra"},[n]):null},renderValidateWrapper:function(e,t,n,r){var i=this.$createElement,o=this.$props,a=this.getOnlyControl,s=void 0===o.validateStatus&&a?this.getValidateStatus():o.validateStatus,c=e+"-item-control";s&&(c=d()(e+"-item-control",{"has-feedback":s&&o.hasFeedback,"has-success":"success"===s,"has-warning":"warning"===s,"has-error":"error"===s,"is-validating":"validating"===s}));var l="";switch(s){case"success":l="check-circle";break;case"warning":l="exclamation-circle";break;case"error":l="close-circle";break;case"validating":l="loading";break;default:l="";break}var u=o.hasFeedback&&l?i("span",{class:e+"-item-children-icon"},[i(A.A,{attrs:{type:l,theme:"loading"===l?"outlined":"filled"}})]):null;return i("div",{class:c},[i("span",{class:e+"-item-children"},[t,u]),n,r])},renderWrapper:function(e,t){var n=this.$createElement,r=this.isFormItemChildren?{}:this.FormContext,i=r.wrapperCol,a=this.wrapperCol,s=a||i||{},c=s.style,l=s.id,u=s.on,h=(0,o.A)(s,["style","id","on"]),f=d()(e+"-item-control-wrapper",s["class"]),p={props:h,class:f,key:"wrapper",style:c,id:l,on:u};return n(m.Ay,p,[t])},renderLabel:function(e){var t,n=this.$createElement,r=this.FormContext,a=r.vertical,s=r.labelAlign,c=r.labelCol,l=r.colon,u=this.labelAlign,h=this.labelCol,f=this.colon,p=this.id,v=this.htmlFor,g=(0,y.nu)(this,"label"),_=this.isRequired(),b=h||c||{},M=u||s,A=e+"-item-label",w=d()(A,"left"===M&&A+"-left",b["class"]),x=(b["class"],b.style),k=b.id,L=b.on,C=(0,o.A)(b,["class","style","id","on"]),S=g,z=!0===f||!1!==l&&!1!==f,T=z&&!a;T&&"string"===typeof g&&""!==g.trim()&&(S=g.replace(/[::]\s*$/,""));var O=d()((t={},(0,i.A)(t,e+"-item-required",_),(0,i.A)(t,e+"-item-no-colon",!z),t)),H={props:C,class:w,key:"label",style:x,id:k,on:L};return g?n(m.Ay,H,[n("label",{attrs:{for:v||p||this.getId(),title:"string"===typeof g?g:""},class:O,on:{click:this.onLabelClick}},[S])]):null},renderChildren:function(e){return[this.renderLabel(e),this.renderWrapper(e,this.renderValidateWrapper(e,this.slotDefault,this.renderHelp(e),this.renderExtra(e)))]},renderFormItem:function(){var e,t=this.$createElement,n=this.$props.prefixCls,r=this.configProvider.getPrefixCls,o=r("form",n),a=this.renderChildren(o),s=(e={},(0,i.A)(e,o+"-item",!0),(0,i.A)(e,o+"-item-with-help",this.helpShow),e);return t(p.A,{class:d()(s),key:"row"},[a])},decoratorOption:function(e){if(e.data&&e.data.directives){var t=f()(e.data.directives,["name","decorator"]);return(0,v.A)(!t||t&&Array.isArray(t.value),"Form",'Invalid directive: type check failed for directive "decorator". Expected Array, got '+(0,r.A)(t?t.value:t)+". At "+e.tag+"."),t?t.value:null}return null},decoratorChildren:function(e){for(var t=this.FormContext,n=t.form.getFieldDecorator,r=0,i=e.length;r1),"Form","`autoFormCreate` just `decorator` then first children. but you can use JSX to support multiple children"),this.slotDefault=a}else o.form?(a=(0,M.pM)(a),this.slotDefault=this.decoratorChildren(a)):this.slotDefault=a;return this.renderFormItem()}}},20355:function(e,t,n){"use strict";n.d(t,{H:function(){return r},W:function(){return i}});var r="data-__meta",i="data-__field"},15001:function(e,t,n){"use strict";n.d(t,{Ay:function(){return Me}});var r=n(85471),i=n(44508),o=n(85505),a=n(4718),s=n(46942),c=n.n(s),l=n(43594),u=n(69607),d=n.n(u),h=n(36873),f=n(48204),p=n(61448),m=n.n(p),v=n(97479),g=n(5748),y=n(32779),_=n(32173),b=n(9771),M=n.n(b),A=n(58156),w=n.n(A),x=n(63560),k=n.n(x),L=n(75288),C=n.n(L),S=n(90179),z=n.n(S),T=n(9506),O=n(97588),H=function e(t){(0,T.A)(this,e),(0,o.A)(this,t)};function D(e){return e instanceof H}function Y(e){return D(e)?e:new H(e)}function V(e){return e.name||"WrappedComponent"}function P(e,t){return e.name="Form_"+V(t),e.WrappedComponent=t,e.props=(0,o.A)({},e.props,t.props),e}function E(e){return e}function j(e){return Array.prototype.concat.apply([],e)}function F(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments[1],n=arguments[2],r=arguments[3],i=arguments[4];if(n(e,t))i(e,t);else if(void 0===t||null===t);else if(Array.isArray(t))t.forEach(function(t,o){return F(e+"["+o+"]",t,n,r,i)});else{if("object"!==("undefined"===typeof t?"undefined":(0,v.A)(t)))return void M()(!1,r);Object.keys(t).forEach(function(o){var a=t[o];F(e+(e?".":"")+o,a,n,r,i)})}}function I(e,t,n){var r={};return F(void 0,e,t,n,function(e,t){r[e]=t}),r}function $(e,t,n){var r=e.map(function(e){var t=(0,o.A)({},e,{trigger:e.trigger||[]});return"string"===typeof t.trigger&&(t.trigger=[t.trigger]),t});return t&&r.push({trigger:n?[].concat(n):[],rules:t}),r}function R(e){return e.filter(function(e){return!!e.rules&&e.rules.length}).map(function(e){return e.trigger}).reduce(function(e,t){return e.concat(t)},[])}function N(e){if(!e||!e.target)return e;var t=e.target;return"checkbox"===t.type?t.checked:t.value}function W(e){return e?e.map(function(e){return e&&e.message?e.message:e}):e}function B(e,t,n){var r=e,i=t,o=n;return void 0===n&&("function"===typeof r?(o=r,i={},r=void 0):Array.isArray(r)?"function"===typeof i?(o=i,i={}):i=i||{}:(o=i,i=r||{},r=void 0)),{names:r,options:i,callback:o}}function K(e){return 0===Object.keys(e).length}function U(e){return!!e&&e.some(function(e){return e.rules&&e.rules.length})}function q(e,t){return 0===e.lastIndexOf(t,0)}function G(e,t){return 0===t.indexOf(e)&&-1!==[".","["].indexOf(t[e.length])}function J(e){return I(e,function(e,t){return D(t)},"You must wrap field data with `createFormField`.")}var X=function(){function e(t){(0,T.A)(this,e),Z.call(this),this.fields=J(t),this.fieldsMeta={}}return(0,O.A)(e,[{key:"updateFields",value:function(e){this.fields=J(e)}},{key:"flattenRegisteredFields",value:function(e){var t=this.getAllFieldsName();return I(e,function(e){return t.indexOf(e)>=0},'You cannot set a form field before rendering a field associated with the value. You can use `getFieldDecorator(id, options)` instead `v-decorator="[id, options]"` to register it before render.')}},{key:"setFields",value:function(e){var t=this,n=this.fieldsMeta,r=(0,o.A)({},this.fields,e),i={};Object.keys(n).forEach(function(e){i[e]=t.getValueFromFields(e,r)}),Object.keys(i).forEach(function(e){var n=i[e],a=t.getFieldMeta(e);if(a&&a.normalize){var s=a.normalize(n,t.getValueFromFields(e,t.fields),i);s!==n&&(r[e]=(0,o.A)({},r[e],{value:s}))}}),this.fields=r}},{key:"resetFields",value:function(e){var t=this.fields,n=e?this.getValidFieldsFullName(e):this.getAllFieldsName();return n.reduce(function(e,n){var r=t[n];return r&&"value"in r&&(e[n]={}),e},{})}},{key:"setFieldMeta",value:function(e,t){this.fieldsMeta[e]=t}},{key:"setFieldsAsDirty",value:function(){var e=this;Object.keys(this.fields).forEach(function(t){var n=e.fields[t],r=e.fieldsMeta[t];n&&r&&U(r.validate)&&(e.fields[t]=(0,o.A)({},n,{dirty:!0}))})}},{key:"getFieldMeta",value:function(e){return this.fieldsMeta[e]=this.fieldsMeta[e]||{},this.fieldsMeta[e]}},{key:"getValueFromFields",value:function(e,t){var n=t[e];if(n&&"value"in n)return n.value;var r=this.getFieldMeta(e);return r&&r.initialValue}},{key:"getValidFieldsName",value:function(){var e=this,t=this.fieldsMeta;return t?Object.keys(t).filter(function(t){return!e.getFieldMeta(t).hidden}):[]}},{key:"getAllFieldsName",value:function(){var e=this.fieldsMeta;return e?Object.keys(e):[]}},{key:"getValidFieldsFullName",value:function(e){var t=Array.isArray(e)?e:[e];return this.getValidFieldsName().filter(function(e){return t.some(function(t){return e===t||q(e,t)&&[".","["].indexOf(e[t.length])>=0})})}},{key:"getFieldValuePropValue",value:function(e){var t=e.name,n=e.getValueProps,r=e.valuePropName,o=this.getField(t),a="value"in o?o.value:e.initialValue;return n?n(a):(0,i.A)({},r,a)}},{key:"getField",value:function(e){return(0,o.A)({},this.fields[e],{name:e})}},{key:"getNotCollectedFields",value:function(){var e=this,t=this.getValidFieldsName();return t.filter(function(t){return!e.fields[t]}).map(function(t){return{name:t,dirty:!1,value:e.getFieldMeta(t).initialValue}}).reduce(function(e,t){return k()(e,t.name,Y(t))},{})}},{key:"getNestedAllFields",value:function(){var e=this;return Object.keys(this.fields).reduce(function(t,n){return k()(t,n,Y(e.fields[n]))},this.getNotCollectedFields())}},{key:"getFieldMember",value:function(e,t){return this.getField(e)[t]}},{key:"getNestedFields",value:function(e,t){var n=e||this.getValidFieldsName();return n.reduce(function(e,n){return k()(e,n,t(n))},{})}},{key:"getNestedField",value:function(e,t){var n=this.getValidFieldsFullName(e);if(0===n.length||1===n.length&&n[0]===e)return t(e);var r="["===n[0][e.length],i=r?e.length:e.length+1;return n.reduce(function(e,n){return k()(e,n.slice(i),t(n))},r?[]:{})}},{key:"isValidNestedFieldName",value:function(e){var t=this.getAllFieldsName();return t.every(function(t){return!G(t,e)&&!G(e,t)})}},{key:"clearField",value:function(e){delete this.fields[e],delete this.fieldsMeta[e]}}]),e}(),Z=function(){var e=this;this.setFieldsInitialValue=function(t){var n=e.flattenRegisteredFields(t),r=e.fieldsMeta;Object.keys(n).forEach(function(t){r[t]&&e.setFieldMeta(t,(0,o.A)({},e.getFieldMeta(t),{initialValue:n[t]}))})},this.getAllValues=function(){var t=e.fieldsMeta,n=e.fields;return Object.keys(t).reduce(function(t,r){return k()(t,r,e.getValueFromFields(r,n))},{})},this.getFieldsValue=function(t){return e.getNestedFields(t,e.getFieldValue)},this.getFieldValue=function(t){var n=e.fields;return e.getNestedField(t,function(t){return e.getValueFromFields(t,n)})},this.getFieldsError=function(t){return e.getNestedFields(t,e.getFieldError)},this.getFieldError=function(t){return e.getNestedField(t,function(t){return W(e.getFieldMember(t,"errors"))})},this.isFieldValidating=function(t){return e.getFieldMember(t,"validating")},this.isFieldsValidating=function(t){var n=t||e.getValidFieldsName();return n.some(function(t){return e.isFieldValidating(t)})},this.isFieldTouched=function(t){return e.getFieldMember(t,"touched")},this.isFieldsTouched=function(t){var n=t||e.getValidFieldsName();return n.some(function(t){return e.isFieldTouched(t)})}};function Q(e){return new X(e)}var ee=n(51927),te=n(52315),ne=n(15848),re="change";function ie(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=e.validateMessages,r=e.onFieldsChange,s=e.onValuesChange,c=e.mapProps,l=void 0===c?E:c,u=e.mapPropsToFields,d=e.fieldNameProp,h=e.fieldMetaProp,f=e.fieldDataProp,p=e.formPropName,m=void 0===p?"form":p,b=e.name,M=e.props,A=void 0===M?{}:M,x=e.templateContext;return function(e){var c={};Array.isArray(A)?A.forEach(function(e){c[e]=a.A.any}):c=A;var p={mixins:[te.A].concat((0,y.A)(t)),props:(0,o.A)({},c,{wrappedComponentRef:a.A.func.def(function(){})}),data:function(){var e=this,t=u&&u(this.$props);return this.fieldsStore=Q(t||{}),this.templateContext=x,this.instances={},this.cachedBind={},this.clearedFieldMetaCache={},this.formItems={},this.renderFields={},this.domFields={},["getFieldsValue","getFieldValue","setFieldsInitialValue","getFieldsError","getFieldError","isFieldValidating","isFieldsValidating","isFieldsTouched","isFieldTouched"].forEach(function(t){e[t]=function(){var n;return(n=e.fieldsStore)[t].apply(n,arguments)}}),{submitting:!1}},watch:x?{}:{$props:{handler:function(e){u&&this.fieldsStore.updateFields(u(e))},deep:!0}},mounted:function(){this.cleanUpUselessFields()},updated:function(){this.cleanUpUselessFields()},methods:{updateFields:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.fieldsStore.updateFields(u(e)),x&&x.$forceUpdate()},onCollectCommon:function(e,t,n){var r=this.fieldsStore.getFieldMeta(e);if(r[t])r[t].apply(r,(0,y.A)(n));else if(r.originalProps&&r.originalProps[t]){var a;(a=r.originalProps)[t].apply(a,(0,y.A)(n))}var c=r.getValueFromEvent?r.getValueFromEvent.apply(r,(0,y.A)(n)):N.apply(void 0,(0,y.A)(n));if(s&&c!==this.fieldsStore.getFieldValue(e)){var l=this.fieldsStore.getAllValues(),u={};l[e]=c,Object.keys(l).forEach(function(e){return k()(u,e,l[e])}),s((0,o.A)((0,i.A)({},m,this.getForm()),this.$props),k()({},e,c),u)}var d=this.fieldsStore.getField(e);return{name:e,field:(0,o.A)({},d,{value:c,touched:!0}),fieldMeta:r}},onCollect:function(e,t){for(var n=arguments.length,r=Array(n>2?n-2:0),a=2;a2?n-2:0),i=2;i1&&void 0!==arguments[1]?arguments[1]:{};if(!e)throw new Error("Must call `getFieldProps` with valid name string!");delete this.clearedFieldMetaCache[e];var r=(0,o.A)({name:e,trigger:re,valuePropName:"value",validate:[]},n),i=r.rules,a=r.trigger,s=r.validateTrigger,c=void 0===s?a:s,l=r.validate,u=this.fieldsStore.getFieldMeta(e);"initialValue"in r&&(u.initialValue=r.initialValue);var p=(0,o.A)({},this.fieldsStore.getFieldValuePropValue(r)),m={},v={};d&&(p[d]=b?b+"_"+e:e);var g=$(l,i,c),y=R(g);y.forEach(function(n){m[n]||(m[n]=t.getCacheBind(e,n,t.onCollectValidate))}),a&&-1===y.indexOf(a)&&(m[a]=this.getCacheBind(e,a,this.onCollect));var _=(0,o.A)({},u,r,{validate:g});return this.fieldsStore.setFieldMeta(e,_),h&&(v[h]=_),f&&(v[f]=this.fieldsStore.getField(e)),this.renderFields[e]=!0,{props:z()(p,["id"]),domProps:{value:p.value},attrs:(0,o.A)({},v,{id:p.id}),directives:[{name:"ant-ref",value:this.getCacheBind(e,e+"__ref",this.saveRef)}],on:m}},getFieldInstance:function(e){return this.instances[e]},getRules:function(e,t){var n=e.validate.filter(function(e){return!t||e.trigger.indexOf(t)>=0}).map(function(e){return e.rules});return j(n)},setFields:function(e,t){var n=this,i=this.fieldsStore.flattenRegisteredFields(e);this.fieldsStore.setFields(i);var o=Object.keys(i).reduce(function(e,t){return k()(e,t,n.fieldsStore.getField(t))},{});if(r){var a=Object.keys(i).reduce(function(e,t){return k()(e,t,n.fieldsStore.getField(t))},{});r(this,a,this.fieldsStore.getNestedAllFields())}var s=x||this,c=!1;Object.keys(o).forEach(function(e){var t=n.formItems[e];t="function"===typeof t?t():t,t&&t.itemSelfUpdate?t.$forceUpdate():c=!0}),c&&s.$forceUpdate(),this.$nextTick(function(){t&&t()})},setFieldsValue:function(e,t){var n=this.fieldsStore.fieldsMeta,r=this.fieldsStore.flattenRegisteredFields(e),a=Object.keys(r).reduce(function(e,t){var i=n[t];if(i){var o=r[t];e[t]={value:o}}return e},{});if(this.setFields(a,t),s){var c=this.fieldsStore.getAllValues();s((0,o.A)((0,i.A)({},m,this.getForm()),this.$props),e,c)}},saveRef:function(e,t,n){if(!n){var r=this.fieldsStore.getFieldMeta(e);return r.preserve||(this.clearedFieldMetaCache[e]={field:this.fieldsStore.getField(e),meta:r},this.clearField(e)),void delete this.domFields[e]}this.domFields[e]=!0,this.recoverClearedField(e),this.instances[e]=n},cleanUpUselessFields:function(){var e=this,t=this.fieldsStore.getAllFieldsName(),n=t.filter(function(t){var n=e.fieldsStore.getFieldMeta(t);return!e.renderFields[t]&&!e.domFields[t]&&!n.preserve});n.length&&n.forEach(this.clearField),this.renderFields={}},clearField:function(e){this.fieldsStore.clearField(e),delete this.instances[e],delete this.cachedBind[e]},resetFields:function(e){var t=this,n=this.fieldsStore.resetFields(e);if(Object.keys(n).length>0&&this.setFields(n),e){var r=Array.isArray(e)?e:[e];r.forEach(function(e){return delete t.clearedFieldMetaCache[e]})}else this.clearedFieldMetaCache={}},recoverClearedField:function(e){this.clearedFieldMetaCache[e]&&(this.fieldsStore.setFields((0,i.A)({},e,this.clearedFieldMetaCache[e].field)),this.fieldsStore.setFieldMeta(e,this.clearedFieldMetaCache[e].meta),delete this.clearedFieldMetaCache[e])},validateFieldsInternal:function(e,t,r){var i=this,a=t.fieldNames,s=t.action,c=t.options,l=void 0===c?{}:c,u={},d={},h={},f={};if(e.forEach(function(e){var t=e.name;if(!0===l.force||!1!==e.dirty){var n=i.fieldsStore.getFieldMeta(t),r=(0,o.A)({},e);r.errors=void 0,r.validating=!0,r.dirty=!0,u[t]=i.getRules(n,s),d[t]=r.value,h[t]=r}else e.errors&&k()(f,t,{errors:e.errors})}),this.setFields(h),Object.keys(d).forEach(function(e){d[e]=i.fieldsStore.getFieldValue(e)}),r&&K(h))r(K(f)?null:f,this.fieldsStore.getFieldsValue(a));else{var p=new _.A(u);n&&p.messages(n),p.validate(d,l,function(e){var t=(0,o.A)({},f);e&&e.length&&e.forEach(function(e){var n=e.field,r=n;Object.keys(u).some(function(e){var t=u[e]||[];if(e===n)return r=e,!0;if(t.every(function(e){var t=e.type;return"array"!==t})&&0!==n.indexOf(e))return!1;var i=n.slice(e.length+1);return!!/^\d+$/.test(i)&&(r=e,!0)});var i=w()(t,r);("object"!==("undefined"===typeof i?"undefined":(0,v.A)(i))||Array.isArray(i))&&k()(t,r,{errors:[]});var o=w()(t,r.concat(".errors"));o.push(e)});var n=[],s={};Object.keys(u).forEach(function(e){var r=w()(t,e),o=i.fieldsStore.getField(e);C()(o.value,d[e])?(o.errors=r&&r.errors,o.value=d[e],o.validating=!1,o.dirty=!1,s[e]=o):n.push({name:e})}),i.setFields(s),r&&(n.length&&n.forEach(function(e){var n=e.name,r=[{message:n+" need to revalidate",field:n}];k()(t,n,{expired:!0,errors:r})}),r(K(t)?null:t,i.fieldsStore.getFieldsValue(a)))})}},validateFields:function(e,t,n){var r=this,i=new Promise(function(i,o){var a=B(e,t,n),s=a.names,c=a.options,l=B(e,t,n),u=l.callback;if(!u||"function"===typeof u){var d=u;u=function(e,t){d?d(e,t):e?o({errors:e,values:t}):i(t)}}var h=s?r.fieldsStore.getValidFieldsFullName(s):r.fieldsStore.getValidFieldsName(),f=h.filter(function(e){var t=r.fieldsStore.getFieldMeta(e);return U(t.validate)}).map(function(e){var t=r.fieldsStore.getField(e);return t.value=r.fieldsStore.getFieldValue(e),t});f.length?("firstFields"in c||(c.firstFields=h.filter(function(e){var t=r.fieldsStore.getFieldMeta(e);return!!t.validateFirst})),r.validateFieldsInternal(f,{fieldNames:h,options:c},u)):u(null,r.fieldsStore.getFieldsValue(h))});return i["catch"](function(e){return console.error,e}),i},isSubmitting:function(){return this.submitting},submit:function(e){var t=this;var n=function(){t.setState({submitting:!1})};this.setState({submitting:!0}),e(n)}},render:function(){var t=arguments[0],n=this.$slots,r=this.$scopedSlots,a=(0,i.A)({},m,this.getForm()),s=(0,ne.Oq)(this),c=s.wrappedComponentRef,u=(0,g.A)(s,["wrappedComponentRef"]),d={props:l.call(this,(0,o.A)({},a,u)),on:(0,ne.WM)(this),ref:"WrappedComponent",directives:[{name:"ant-ref",value:c}]};Object.keys(r).length&&(d.scopedSlots=r);var h=Object.keys(n);return e?t(e,d,[h.length?h.map(function(e){return t("template",{slot:e},[n[e]])}):null]):null}};if(!e)return p;if(Array.isArray(e.props)){var M={};e.props.forEach(function(e){M[e]=a.A.any}),M[m]=Object,e.props=M}else e.props=e.props||{},m in e.props||(e.props[m]=Object);return P(p,e)}}var oe=ie,ae={methods:{getForm:function(){return{getFieldsValue:this.fieldsStore.getFieldsValue,getFieldValue:this.fieldsStore.getFieldValue,getFieldInstance:this.getFieldInstance,setFieldsValue:this.setFieldsValue,setFields:this.setFields,setFieldsInitialValue:this.fieldsStore.setFieldsInitialValue,getFieldDecorator:this.getFieldDecorator,getFieldProps:this.getFieldProps,getFieldsError:this.fieldsStore.getFieldsError,getFieldError:this.fieldsStore.getFieldError,isFieldValidating:this.fieldsStore.isFieldValidating,isFieldsValidating:this.fieldsStore.isFieldsValidating,isFieldsTouched:this.fieldsStore.isFieldsTouched,isFieldTouched:this.fieldsStore.isFieldTouched,isSubmitting:this.isSubmitting,submit:this.submit,validateFields:this.validateFields,resetFields:this.resetFields}}}};function se(e,t){var n=window.getComputedStyle,r=n?n(e):e.currentStyle;if(r)return r[t.replace(/-(\w)/gi,function(e,t){return t.toUpperCase()})]}function ce(e){var t=e,n=void 0;while("body"!==(n=t.nodeName.toLowerCase())){var r=se(t,"overflowY");if(t!==e&&("auto"===r||"scroll"===r)&&t.scrollHeight>t.clientHeight)return t;t=t.parentNode}return"body"===n?t.ownerDocument:t}var le={methods:{getForm:function(){return(0,o.A)({},ae.methods.getForm.call(this),{validateFieldsAndScroll:this.validateFieldsAndScroll})},validateFieldsAndScroll:function(e,t,n){var r=this,i=B(e,t,n),a=i.names,s=i.callback,c=i.options,l=function(e,t){if(e){var n=r.fieldsStore.getValidFieldsName(),i=void 0,a=void 0;if(n.forEach(function(t){if(m()(e,t)){var n=r.getFieldInstance(t);if(n){var o=n.$el||n.elm,s=o.getBoundingClientRect().top;"hidden"!==o.type&&(void 0===a||a>s)&&(a=s,i=o)}}}),i){var l=c.container||ce(i);(0,f.A)(i,l,(0,o.A)({onlyScrollIfNeeded:!0},c.scroll))}}"function"===typeof s&&s(e,t)};return this.validateFields(a,c,l)}}};function ue(e){return oe((0,o.A)({},e),[le])}var de=ue,he=n(75837),fe=n(20355),pe=n(25592),me=n(44807),ve=(a.A.func,a.A.func,a.A.func,a.A.any,a.A.bool,a.A.string,a.A.func,a.A.func,a.A.func,a.A.func,a.A.func,a.A.func,a.A.func,a.A.func,a.A.func,a.A.func,a.A.func,a.A.func,a.A.func,{layout:a.A.oneOf(["horizontal","inline","vertical"]),labelCol:a.A.shape(l.fZ).loose,wrapperCol:a.A.shape(l.fZ).loose,colon:a.A.bool,labelAlign:a.A.oneOf(["left","right"]),form:a.A.object,prefixCls:a.A.string,hideRequiredMark:a.A.bool,autoFormCreate:a.A.func,options:a.A.object,selfUpdate:a.A.bool}),ge=(a.A.oneOfType([a.A.string,a.A.func]),a.A.string,a.A.boolean,a.A.boolean,a.A.number,a.A.number,a.A.number,a.A.oneOfType([String,a.A.arrayOf(String)]),a.A.custom(d()),a.A.func,a.A.func,{name:"AForm",props:(0,ne.CB)(ve,{layout:"horizontal",hideRequiredMark:!1,colon:!0}),Item:he.A,createFormField:Y,create:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return de((0,o.A)({fieldNameProp:"id"},e,{fieldMetaProp:fe.H,fieldDataProp:fe.W}))},createForm:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=me.A.Vue||r.Ay;return new n(ge.create((0,o.A)({},t,{templateContext:e}))())},created:function(){this.formItemContexts=new Map},provide:function(){var e=this;return{FormContext:this,collectFormItemContext:this.form&&this.form.templateContext?function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"add",r=e.formItemContexts,i=r.get(t)||0;"delete"===n?i<=1?r["delete"](t):r.set(t,i-1):t!==e.form.templateContext&&r.set(t,i+1)}:function(){}}},inject:{configProvider:{default:function(){return pe.f}}},watch:{form:function(){this.$forceUpdate()}},computed:{vertical:function(){return"vertical"===this.layout}},beforeUpdate:function(){this.formItemContexts.forEach(function(e,t){t.$forceUpdate&&t.$forceUpdate()})},updated:function(){this.form&&this.form.cleanUpUselessFields&&this.form.cleanUpUselessFields()},methods:{onSubmit:function(e){(0,ne.WM)(this).submit?this.$emit("submit",e):e.preventDefault()}},render:function(){var e,t=this,n=arguments[0],r=this.prefixCls,a=this.hideRequiredMark,s=this.layout,l=this.onSubmit,u=this.$slots,d=this.autoFormCreate,f=this.options,p=void 0===f?{}:f,m=this.configProvider.getPrefixCls,v=m("form",r),g=c()(v,(e={},(0,i.A)(e,v+"-horizontal","horizontal"===s),(0,i.A)(e,v+"-vertical","vertical"===s),(0,i.A)(e,v+"-inline","inline"===s),(0,i.A)(e,v+"-hide-required-mark",a),e));if(d){(0,h.A)(!1,"Form","`autoFormCreate` is deprecated. please use `form` instead.");var y=this.DomForm||de((0,o.A)({fieldNameProp:"id"},p,{fieldMetaProp:fe.H,fieldDataProp:fe.W,templateContext:this.$vnode.context}))({provide:function(){return{decoratorFormProps:this.$props}},data:function(){return{children:u["default"],formClassName:g,submit:l}},created:function(){d(this.form)},render:function(){var e=arguments[0],t=this.children,n=this.formClassName,r=this.submit;return e("form",{on:{submit:r},class:n},[t])}});return this.domForm&&(this.domForm.children=u["default"],this.domForm.submit=l,this.domForm.formClassName=g),this.DomForm=y,n(y,{attrs:{wrappedComponentRef:function(e){t.domForm=e}}})}return n("form",{on:{submit:l},class:g},[u["default"]])}}),ye=ge,_e=n(24415),be=n(35745);r.Ay.use(_e.A,{name:"ant-ref"}),r.Ay.use(be.A),r.Ay.prototype.$form=ye,ye.install=function(e){e.use(me.A),e.component(ye.name,ye),e.component(ye.Item.name,ye.Item),e.prototype.$form=ye};var Me=ye},16560:function(e,t,n){"use strict";n(29229),n(67434)},43594:function(e,t,n){"use strict";n.d(t,{fZ:function(){return h}});var r=n(44508),i=n(85505),o=n(97479),a=n(4718),s=n(25592),c=n(15848),l=a.A.oneOfType([a.A.string,a.A.number]),u=a.A.shape({span:l,order:l,offset:l,push:l,pull:l}).loose,d=a.A.oneOfType([a.A.string,a.A.number,u]),h={span:l,order:l,offset:l,push:l,pull:l,xs:d,sm:d,md:d,lg:d,xl:d,xxl:d,prefixCls:a.A.string,flex:l};t.Ay={name:"ACol",props:h,inject:{configProvider:{default:function(){return s.f}},rowContext:{default:function(){return null}}},methods:{parseFlex:function(e){return"number"===typeof e?e+" "+e+" auto":/^\d+(\.\d+)?(px|em|rem|%)$/.test(e)?"0 0 "+e:e}},render:function(){var e,t=this,n=arguments[0],a=this.span,s=this.order,l=this.offset,u=this.push,d=this.pull,h=this.flex,f=this.prefixCls,p=this.$slots,m=this.rowContext,v=this.configProvider.getPrefixCls,g=v("col",f),y={};["xs","sm","md","lg","xl","xxl"].forEach(function(e){var n,a={},s=t[e];"number"===typeof s?a.span=s:"object"===("undefined"===typeof s?"undefined":(0,o.A)(s))&&(a=s||{}),y=(0,i.A)({},y,(n={},(0,r.A)(n,g+"-"+e+"-"+a.span,void 0!==a.span),(0,r.A)(n,g+"-"+e+"-order-"+a.order,a.order||0===a.order),(0,r.A)(n,g+"-"+e+"-offset-"+a.offset,a.offset||0===a.offset),(0,r.A)(n,g+"-"+e+"-push-"+a.push,a.push||0===a.push),(0,r.A)(n,g+"-"+e+"-pull-"+a.pull,a.pull||0===a.pull),n))});var _=(0,i.A)((e={},(0,r.A)(e,""+g,!0),(0,r.A)(e,g+"-"+a,void 0!==a),(0,r.A)(e,g+"-order-"+s,s),(0,r.A)(e,g+"-offset-"+l,l),(0,r.A)(e,g+"-push-"+u,u),(0,r.A)(e,g+"-pull-"+d,d),e),y),b={on:(0,c.WM)(this),class:_,style:{}};if(m){var M=m.getGutter();M&&(b.style=(0,i.A)({},M[0]>0?{paddingLeft:M[0]/2+"px",paddingRight:M[0]/2+"px"}:{},M[1]>0?{paddingTop:M[1]/2+"px",paddingBottom:M[1]/2+"px"}:{}))}return h&&(b.style.flex=this.parseFlex(h)),n("div",b,[p["default"]])}}},9712:function(e,t,n){"use strict";var r=n(44508),i=n(97479),o=n(85505),a=n(4718),s=n(52315),c=n(25592),l=n(73363),u={gutter:a.A.oneOfType([a.A.object,a.A.number,a.A.array]),type:a.A.oneOf(["flex"]),align:a.A.oneOf(["top","middle","bottom","stretch"]),justify:a.A.oneOf(["start","end","center","space-around","space-between"]),prefixCls:a.A.string},d=["xxl","xl","lg","md","sm","xs"];t.A={name:"ARow",mixins:[s.A],props:(0,o.A)({},u,{gutter:a.A.oneOfType([a.A.object,a.A.number,a.A.array]).def(0)}),provide:function(){return{rowContext:this}},inject:{configProvider:{default:function(){return c.f}}},data:function(){return{screens:{}}},mounted:function(){var e=this;this.$nextTick(function(){e.token=l.Ay.subscribe(function(t){var n=e.gutter;("object"===("undefined"===typeof n?"undefined":(0,i.A)(n))||Array.isArray(n)&&("object"===(0,i.A)(n[0])||"object"===(0,i.A)(n[1])))&&(e.screens=t)})})},beforeDestroy:function(){l.Ay.unsubscribe(this.token)},methods:{getGutter:function(){var e=[0,0],t=this.gutter,n=this.screens,r=Array.isArray(t)?t:[t,0];return r.forEach(function(t,r){if("object"===("undefined"===typeof t?"undefined":(0,i.A)(t)))for(var o=0;o0?{marginLeft:d[0]/-2+"px",marginRight:d[0]/-2+"px"}:{},d[1]>0?{marginTop:d[1]/-2+"px",marginBottom:d[1]/-2+"px"}:{});return t("div",{class:h,style:f},[c["default"]])}}},67434:function(e,t,n){"use strict";n(29229)},40255:function(e,t,n){"use strict";n.d(t,{A:function(){return U}});var r=n(75189),i=n.n(r),o=n(85505),a=n(44508),s=n(32779),c=n(46942),l=n.n(c),u=n(6678),d=n(9506),h=n(97588),f=n(33446);function p(e){process||console.error("[@ant-design/icons-vue]: "+e+".")}function m(e){return"object"===typeof e&&"string"===typeof e.name&&"string"===typeof e.theme&&("object"===typeof e.icon||"function"===typeof e.icon)}function v(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object.keys(e).reduce(function(t,n){var r=e[n];switch(n){case"class":t.className=r,delete t["class"];break;default:t[n]=r}return t},{})}var g=function(){function e(){(0,d.A)(this,e),this.collection={}}return(0,h.A)(e,[{key:"clear",value:function(){this.collection={}}},{key:"delete",value:function(e){return delete this.collection[e]}},{key:"get",value:function(e){return this.collection[e]}},{key:"has",value:function(e){return Boolean(this.collection[e])}},{key:"set",value:function(e,t){return this.collection[e]=t,this}},{key:"size",get:function(){return Object.keys(this.collection).length}}]),e}();function y(e,t,n,r){return e(t.tag,r?(0,o.A)({key:n},r,{attrs:(0,o.A)({},v(t.attrs),r.attrs)}):{key:n,attrs:(0,o.A)({},v(t.attrs))},(t.children||[]).map(function(r,i){return y(e,r,n+"-"+t.tag+"-"+i)}))}function _(e){return(0,f.generate)(e)[0]}function b(e,t){switch(t){case"fill":return e+"-fill";case"outline":return e+"-o";case"twotone":return e+"-twotone";default:throw new TypeError("Unknown theme type: "+t+", name: "+e)}}var M={primaryColor:"#333",secondaryColor:"#E6E6E6"},A={name:"AntdIcon",props:["type","primaryColor","secondaryColor"],displayName:"IconVue",definitions:new g,data:function(){return{twoToneColorPalette:M}},add:function(){for(var e=arguments.length,t=Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:M;if(e){var n=A.definitions.get(e);return n&&"function"===typeof n.icon&&(n=(0,o.A)({},n,{icon:n.icon(t.primaryColor,t.secondaryColor)})),n}},setTwoToneColors:function(e){var t=e.primaryColor,n=e.secondaryColor;M.primaryColor=t,M.secondaryColor=n||_(t)},getTwoToneColors:function(){return(0,o.A)({},M)},render:function(e){var t=this.$props,n=t.type,r=t.primaryColor,i=t.secondaryColor,a=void 0,s=M;if(r&&(s={primaryColor:r,secondaryColor:i||_(r)}),m(n))a=n;else if("string"===typeof n&&(a=A.get(n,s),!a))return null;return a?(a&&"function"===typeof a.icon&&(a=(0,o.A)({},a,{icon:a.icon(s.primaryColor,s.secondaryColor)})),y(e,a.icon,"svg-"+a.name,{attrs:{"data-icon":a.name,width:"1em",height:"1em",fill:"currentColor","aria-hidden":"true"},on:this.$listeners})):(p("type should be string or icon definiton, but got "+n),null)},install:function(e){e.component(A.name,A)}},w=A,x=w,k=n(4718),L=n(5748),C=n(15848),S=new Set;function z(e){var t=e.scriptUrl,n=e.extraCommonProps,r=void 0===n?{}:n;if("undefined"!==typeof document&&"undefined"!==typeof window&&"function"===typeof document.createElement&&"string"===typeof t&&t.length&&!S.has(t)){var i=document.createElement("script");i.setAttribute("src",t),i.setAttribute("data-namespace",t),S.add(t),document.body.appendChild(i)}var o={functional:!0,name:"AIconfont",props:U.props,render:function(e,t){var n=t.props,i=t.slots,o=t.listeners,a=t.data,s=n.type,c=(0,L.A)(n,["type"]),l=i(),u=l["default"],d=null;s&&(d=e("use",{attrs:{"xlink:href":"#"+s}})),u&&(d=u);var h=(0,C.v6)(r,a,{props:c,on:o});return e(U,h,[d])}};return o}var T=n(36873),O={width:"1em",height:"1em",fill:"currentColor","aria-hidden":"true",focusable:"false"},H=/-fill$/,D=/-o$/,Y=/-twotone$/;function V(e){var t=null;return H.test(e)?t="filled":D.test(e)?t="outlined":Y.test(e)&&(t="twoTone"),t}function P(e){return e.replace(H,"").replace(D,"").replace(Y,"")}function E(e,t){var n=e;return"filled"===t?n+="-fill":"outlined"===t?n+="-o":"twoTone"===t?n+="-twotone":(0,T.A)(!1,"Icon","This icon '"+e+"' has unknown theme '"+t+"'"),n}function j(e){var t=e;switch(e){case"cross":t="close";break;case"interation":t="interaction";break;case"canlendar":t="calendar";break;case"colum-height":t="column-height";break;default:}return(0,T.A)(t===e,"Icon","Icon '"+e+"' was a typo and is now deprecated, please use '"+t+"' instead."),t}var F=n(38377);function I(e){return x.setTwoToneColors({primaryColor:e})}function $(){var e=x.getTwoToneColors();return e.primaryColor}var R=n(44807);x.add.apply(x,(0,s.A)(Object.keys(u).filter(function(e){return"default"!==e}).map(function(e){return u[e]}))),I("#1890ff");var N="outlined",W=void 0;function B(e,t,n){var r,s=n.$props,c=n.$slots,u=(0,C.WM)(n),d=s.type,h=s.component,f=s.viewBox,p=s.spin,m=s.theme,v=s.twoToneColor,g=s.rotate,y=s.tabIndex,_=(0,C.Gk)(c["default"]);_=0===_.length?void 0:_,(0,T.A)(Boolean(d||h||_),"Icon","Icon should have `type` prop or `component` prop or `children`.");var b=l()((r={},(0,a.A)(r,"anticon",!0),(0,a.A)(r,"anticon-"+d,!!d),r)),M=l()((0,a.A)({},"anticon-spin",!!p||"loading"===d)),A=g?{msTransform:"rotate("+g+"deg)",transform:"rotate("+g+"deg)"}:void 0,w={attrs:(0,o.A)({},O,{viewBox:f}),class:M,style:A};f||delete w.attrs.viewBox;var k=function(){if(h)return e(h,w,[_]);if(_){(0,T.A)(Boolean(f)||1===_.length&&"use"===_[0].tag,"Icon","Make sure that you provide correct `viewBox` prop (default `0 0 1024 1024`) to the icon.");var t={attrs:(0,o.A)({},O),class:M,style:A};return e("svg",i()([t,{attrs:{viewBox:f}}]),[_])}if("string"===typeof d){var n=d;if(m){var r=V(d);(0,T.A)(!r||m===r,"Icon","The icon name '"+d+"' already specify a theme '"+r+"', the 'theme' prop '"+m+"' will be ignored.")}return n=E(P(j(n)),W||m||N),e(x,{attrs:{focusable:"false",type:n,primaryColor:v},class:M,style:A})}},L=y;void 0===L&&"click"in u&&(L=-1);var S={attrs:{"aria-label":d&&t.icon+": "+d,tabIndex:L},on:u,class:b,staticClass:""};return e("i",S,[k()])}var K={name:"AIcon",props:{tabIndex:k.A.number,type:k.A.string,component:k.A.any,viewBox:k.A.any,spin:k.A.bool.def(!1),rotate:k.A.number,theme:k.A.oneOf(["filled","outlined","twoTone"]),twoToneColor:k.A.string,role:k.A.string},render:function(e){var t=this;return e(F.A,{attrs:{componentName:"Icon"},scopedSlots:{default:function(n){return B(e,n,t)}}})}};K.createFromIconfontCN=z,K.getTwoToneColor=$,K.setTwoToneColor=I,K.install=function(e){e.use(R.A),e.component(K.name,K)};var U=K},78269:function(e,t,n){"use strict";n(29229)},66066:function(e,t,n){"use strict";n.d(t,{A:function(){return V}});var r=n(44508),i=n(85505),o=n(5748),a=n(4718),s=n(15848),c=n(46942),l=n.n(c),u=n(40255),d=n(32779),h=n(52315),f=n(11207),p=n(51927),m=n(36873),v={disabled:a.A.bool,activeClassName:a.A.string,activeStyle:a.A.any},g={name:"TouchFeedback",mixins:[h.A],props:(0,s.CB)(v,{disabled:!1}),data:function(){return{active:!1}},mounted:function(){var e=this;this.$nextTick(function(){e.disabled&&e.active&&e.setState({active:!1})})},methods:{triggerEvent:function(e,t,n){this.$emit(e,n),t!==this.active&&this.setState({active:t})},onTouchStart:function(e){this.triggerEvent("touchstart",!0,e)},onTouchMove:function(e){this.triggerEvent("touchmove",!1,e)},onTouchEnd:function(e){this.triggerEvent("touchend",!1,e)},onTouchCancel:function(e){this.triggerEvent("touchcancel",!1,e)},onMouseDown:function(e){this.triggerEvent("mousedown",!0,e)},onMouseUp:function(e){this.triggerEvent("mouseup",!1,e)},onMouseLeave:function(e){this.triggerEvent("mouseleave",!1,e)}},render:function(){var e=this.$props,t=e.disabled,n=e.activeClassName,r=void 0===n?"":n,o=e.activeStyle,a=void 0===o?{}:o,s=this.$slots["default"];if(1!==s.length)return(0,m.A)(!1,"m-feedback组件只能包含一个子元素"),null;var c={on:t?{}:{touchstart:this.onTouchStart,touchmove:this.onTouchMove,touchend:this.onTouchEnd,touchcancel:this.onTouchCancel,mousedown:this.onMouseDown,mouseup:this.onMouseUp,mouseleave:this.onMouseLeave}};return!t&&this.active&&(c=(0,i.A)({},c,{style:a,class:r})),(0,p.Ob)(s,c)}},y=g,_={name:"InputHandler",props:{prefixCls:a.A.string,disabled:a.A.bool},render:function(){var e=arguments[0],t=this.$props,n=t.prefixCls,r=t.disabled,i={props:{disabled:r,activeClassName:n+"-handler-active"},on:(0,s.WM)(this)};return e(y,i,[e("span",[this.$slots["default"]])])}},b=_;function M(){}function A(e){e.preventDefault()}function w(e){return e.replace(/[^\w\.-]+/g,"")}var x=200,k=600,L=Number.MAX_SAFE_INTEGER||Math.pow(2,53)-1,C=function(e){return void 0!==e&&null!==e},S=function(e,t){return t===e||"number"===typeof t&&"number"===typeof e&&isNaN(t)&&isNaN(e)},z={value:a.A.oneOfType([a.A.number,a.A.string]),defaultValue:a.A.oneOfType([a.A.number,a.A.string]),focusOnUpDown:a.A.bool,autoFocus:a.A.bool,prefixCls:a.A.string,tabIndex:a.A.oneOfType([a.A.string,a.A.number]),placeholder:a.A.string,disabled:a.A.bool,readonly:a.A.bool,max:a.A.number,min:a.A.number,step:a.A.oneOfType([a.A.number,a.A.string]),upHandler:a.A.any,downHandler:a.A.any,useTouch:a.A.bool,formatter:a.A.func,parser:a.A.func,precision:a.A.number,required:a.A.bool,pattern:a.A.string,decimalSeparator:a.A.string,autoComplete:a.A.string,title:a.A.string,name:a.A.string,type:a.A.string,id:a.A.string},T={name:"VCInputNumber",mixins:[h.A],model:{prop:"value",event:"change"},props:(0,s.CB)(z,{focusOnUpDown:!0,useTouch:!1,prefixCls:"rc-input-number",min:-L,step:1,parser:w,required:!1,autoComplete:"off"}),data:function(){var e=(0,s.Oq)(this);this.prevProps=(0,i.A)({},e);var t=void 0;t="value"in e?this.value:this.defaultValue;var n=this.getValidValue(this.toNumber(t));return{inputValue:this.toPrecisionAsStep(n),sValue:n,focused:this.autoFocus}},mounted:function(){var e=this;this.$nextTick(function(){e.autoFocus&&!e.disabled&&e.focus(),e.updatedFunc()})},updated:function(){var e=this,t=this.$props,n=t.value,r=t.max,o=t.min,a=this.$data.focused,c=this.prevProps,l=(0,s.Oq)(this);if(c){if(!S(c.value,n)||!S(c.max,r)||!S(c.min,o)){var u=a?n:this.getValidValue(n),d=void 0;d=this.pressingUpOrDown?u:this.inputting?this.rawInput:this.toPrecisionAsStep(u),this.setState({sValue:u,inputValue:d})}var h="value"in l?n:this.sValue;"max"in l&&c.max!==r&&"number"===typeof h&&h>r&&this.$emit("change",r),"min"in l&&c.min!==o&&"number"===typeof h&&h1?r-1:0),o=1;o1?t-1:0),r=1;r1&&void 0!==arguments[1]?arguments[1]:this.min,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.max,r=parseFloat(e,10);return isNaN(r)?e:(rn&&(r=n),r)},setValue:function(e,t){var n=this.$props.precision,r=this.isNotCompleteNumber(parseFloat(e,10))?null:parseFloat(e,10),i=this.$data,o=i.sValue,a=void 0===o?null:o,c=i.inputValue,l=void 0===c?null:c,u="number"===typeof r?r.toFixed(n):""+r,d=r!==a||u!==""+l;return(0,s.cK)(this,"value")?this.setState({inputValue:this.toPrecisionAsStep(this.sValue)},t):this.setState({sValue:r,inputValue:this.toPrecisionAsStep(e)},t),d&&this.$emit("change",r),r},getPrecision:function(e){if(C(this.precision))return this.precision;var t=e.toString();if(t.indexOf("e-")>=0)return parseInt(t.slice(t.indexOf("e-")+2),10);var n=0;return t.indexOf(".")>=0&&(n=t.length-t.indexOf(".")-1),n},getMaxPrecision:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;if(C(this.precision))return this.precision;var n=this.step,r=this.getPrecision(t),i=this.getPrecision(n),o=this.getPrecision(e);return e?Math.max(o,r+i):r+i},getPrecisionFactor:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=this.getMaxPrecision(e,t);return Math.pow(10,n)},getInputDisplayValue:function(e){var t=e||this.$data,n=t.focused,r=t.inputValue,i=t.sValue,o=void 0;o=n?r:this.toPrecisionAsStep(i),void 0!==o&&null!==o||(o="");var a=this.formatWrapper(o);return C(this.$props.decimalSeparator)&&(a=a.toString().replace(".",this.$props.decimalSeparator)),a},recordCursorPosition:function(){try{var e=this.$refs.inputRef;this.cursorStart=e.selectionStart,this.cursorEnd=e.selectionEnd,this.currentValue=e.value,this.cursorBefore=e.value.substring(0,this.cursorStart),this.cursorAfter=e.value.substring(this.cursorEnd)}catch(t){}},fixCaret:function(e,t){if(void 0!==e&&void 0!==t&&this.$refs.inputRef&&this.$refs.inputRef.value)try{var n=this.$refs.inputRef,r=n.selectionStart,i=n.selectionEnd;e===r&&t===i||n.setSelectionRange(e,t)}catch(o){}},restoreByAfter:function(e){if(void 0===e)return!1;var t=this.$refs.inputRef.value,n=t.lastIndexOf(e);if(-1===n)return!1;var r=this.cursorBefore.length;return this.lastKeyCode===f.A.DELETE&&this.cursorBefore.charAt(r-1)===e[0]?(this.fixCaret(r,r),!0):n+e.length===t.length&&(this.fixCaret(n,n),!0)},partRestoreByAfter:function(e){var t=this;return void 0!==e&&Array.prototype.some.call(e,function(n,r){var i=e.substring(r);return t.restoreByAfter(i)})},focus:function(){this.$refs.inputRef.focus(),this.recordCursorPosition()},blur:function(){this.$refs.inputRef.blur()},formatWrapper:function(e){return this.formatter?this.formatter(e):e},toPrecisionAsStep:function(e){if(this.isNotCompleteNumber(e)||""===e)return e;var t=Math.abs(this.getMaxPrecision(e));return isNaN(t)?e.toString():Number(e).toFixed(t)},isNotCompleteNumber:function(e){return isNaN(e)||""===e||null===e||e&&e.toString().indexOf(".")===e.toString().length-1},toNumber:function(e){var t=this.$props,n=t.precision,r=t.autoFocus,i=this.focused,o=void 0===i?r:i,a=e&&e.length>16&&o;return this.isNotCompleteNumber(e)||a?e:C(n)?Math.round(e*Math.pow(10,n))/Math.pow(10,n):Number(e)},upStep:function(e,t){var n=this.step,r=this.getPrecisionFactor(e,t),i=Math.abs(this.getMaxPrecision(e,t)),o=((r*e+r*n*t)/r).toFixed(i);return this.toNumber(o)},downStep:function(e,t){var n=this.step,r=this.getPrecisionFactor(e,t),i=Math.abs(this.getMaxPrecision(e,t)),o=((r*e-r*n*t)/r).toFixed(i);return this.toNumber(o)},stepFn:function(e,t){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,i=arguments[3];if(this.stop(),t&&t.preventDefault(),!this.disabled){var o=this.max,a=this.min,s=this.getCurrentValidValue(this.inputValue)||0;if(!this.isNotCompleteNumber(s)){var c=this[e+"Step"](s,r),l=c>o||co?c=o:c=this.max&&(p=i+"-handler-up-disabled"),g<=this.min&&(m=i+"-handler-down-disabled")}var y=!this.readonly&&!this.disabled,_=this.getInputDisplayValue(),w=void 0,x=void 0;c?(w={touchstart:y&&!p?this.up:M,touchend:this.stop},x={touchstart:y&&!m?this.down:M,touchend:this.stop}):(w={mousedown:y&&!p?this.up:M,mouseup:this.stop,mouseleave:this.stop},x={mousedown:y&&!m?this.down:M,mouseup:this.stop,mouseleave:this.stop});var k=!!p||o||a,L=!!m||o||a,C=(0,s.WM)(this),S=C.mouseenter,z=void 0===S?M:S,T=C.mouseleave,O=void 0===T?M:T,H=C.mouseover,D=void 0===H?M:H,Y=C.mouseout,V=void 0===Y?M:Y,P={on:{mouseenter:z,mouseleave:O,mouseover:D,mouseout:V},class:f,attrs:{title:this.$props.title}},E={props:{disabled:k,prefixCls:i},attrs:{unselectable:"unselectable",role:"button","aria-label":"Increase Value","aria-disabled":!!k},class:i+"-handler "+i+"-handler-up "+p,on:w,ref:"up"},j={props:{disabled:L,prefixCls:i},attrs:{unselectable:"unselectable",role:"button","aria-label":"Decrease Value","aria-disabled":!!L},class:i+"-handler "+i+"-handler-down "+m,on:x,ref:"down"};return t("div",P,[t("div",{class:i+"-handler-wrap"},[t(b,E,[d||t("span",{attrs:{unselectable:"unselectable"},class:i+"-handler-up-inner",on:{click:A}})]),t(b,j,[h||t("span",{attrs:{unselectable:"unselectable"},class:i+"-handler-down-inner",on:{click:A}})])]),t("div",{class:i+"-input-wrap"},[t("input",{attrs:{role:"spinbutton","aria-valuemin":this.min,"aria-valuemax":this.max,"aria-valuenow":v,required:this.required,type:this.type,placeholder:this.placeholder,tabIndex:this.tabIndex,autoComplete:u,readonly:this.readonly,disabled:this.disabled,max:this.max,min:this.min,step:this.step,name:this.name,title:this.title,id:this.id,pattern:this.pattern},on:{click:this.handleInputClick,focus:this.onFocus,blur:this.onBlur,keydown:y?this.onKeyDown:M,keyup:y?this.onKeyUp:M,input:this.onTrigger,compositionstart:this.onCompositionstart,compositionend:this.onCompositionend},class:i+"-input",ref:"inputRef",domProps:{value:_}})])])}},O=n(25592),H=n(44807),D={prefixCls:a.A.string,min:a.A.number,max:a.A.number,value:a.A.oneOfType([a.A.number,a.A.string]),step:a.A.oneOfType([a.A.number,a.A.string]),defaultValue:a.A.oneOfType([a.A.number,a.A.string]),tabIndex:a.A.number,disabled:a.A.bool,size:a.A.oneOf(["large","small","default"]),formatter:a.A.func,parser:a.A.func,decimalSeparator:a.A.string,placeholder:a.A.string,name:a.A.string,id:a.A.string,precision:a.A.number,autoFocus:a.A.bool},Y={name:"AInputNumber",model:{prop:"value",event:"change"},props:(0,s.CB)(D,{step:1}),inject:{configProvider:{default:function(){return O.f}}},methods:{focus:function(){this.$refs.inputNumberRef.focus()},blur:function(){this.$refs.inputNumberRef.blur()}},render:function(){var e,t=arguments[0],n=(0,i.A)({},(0,s.Oq)(this),this.$attrs),a=n.prefixCls,c=n.size,d=(0,o.A)(n,["prefixCls","size"]),h=this.configProvider.getPrefixCls,f=h("input-number",a),p=l()((e={},(0,r.A)(e,f+"-lg","large"===c),(0,r.A)(e,f+"-sm","small"===c),e)),m=t(u.A,{attrs:{type:"up"},class:f+"-handler-up-inner"}),v=t(u.A,{attrs:{type:"down"},class:f+"-handler-down-inner"}),g={props:(0,i.A)({prefixCls:f,upHandler:m,downHandler:v},d),class:p,ref:"inputNumberRef",on:(0,s.WM)(this)};return t(T,g)},install:function(e){e.use(H.A),e.component(Y.name,Y)}},V=Y},83492:function(e,t,n){"use strict";n(29229)},57155:function(e,t,n){"use strict";n.d(t,{A:function(){return te}});var r=n(85471),i=n(75189),o=n.n(i),a=n(85505),s=n(44508),c=n(46942),l=n.n(c),u=n(40255),d=n(4718),h=n(51927),f=n(15848);function p(e){return!!((0,f.nu)(e,"prefix")||(0,f.nu)(e,"suffix")||e.$props.allowClear)}var m=["text","input"],v={props:{prefixCls:d.A.string,inputType:d.A.oneOf(m),value:d.A.any,defaultValue:d.A.any,allowClear:d.A.bool,element:d.A.any,handleReset:d.A.func,disabled:d.A.bool,size:d.A.oneOf(["small","large","default"]),suffix:d.A.any,prefix:d.A.any,addonBefore:d.A.any,addonAfter:d.A.any,className:d.A.string,readOnly:d.A.bool},methods:{renderClearIcon:function(e){var t=this.$createElement,n=this.$props,r=n.allowClear,i=n.value,o=n.disabled,a=n.readOnly,s=n.inputType,c=n.handleReset;if(!r||o||a||void 0===i||null===i||""===i)return null;var l=s===m[0]?e+"-textarea-clear-icon":e+"-clear-icon";return t(u.A,{attrs:{type:"close-circle",theme:"filled",role:"button"},on:{click:c},class:l})},renderSuffix:function(e){var t=this.$createElement,n=this.$props,r=n.suffix,i=n.allowClear;return r||i?t("span",{class:e+"-suffix"},[this.renderClearIcon(e),r]):null},renderLabeledIcon:function(e,t){var n,r=this.$createElement,i=this.$props,o=this.renderSuffix(e);if(!p(this))return(0,h.Ob)(t,{props:{value:i.value}});var a=i.prefix?r("span",{class:e+"-prefix"},[i.prefix]):null,c=l()(i.className,e+"-affix-wrapper",(n={},(0,s.A)(n,e+"-affix-wrapper-sm","small"===i.size),(0,s.A)(n,e+"-affix-wrapper-lg","large"===i.size),(0,s.A)(n,e+"-affix-wrapper-input-with-clear-btn",i.suffix&&i.allowClear&&this.$props.value),n));return r("span",{class:c,style:i.style},[a,(0,h.Ob)(t,{style:null,props:{value:i.value},class:W(e,i.size,i.disabled)}),o])},renderInputWithLabel:function(e,t){var n,r=this.$createElement,i=this.$props,o=i.addonBefore,a=i.addonAfter,c=i.style,u=i.size,d=i.className;if(!o&&!a)return t;var f=e+"-group",p=f+"-addon",m=o?r("span",{class:p},[o]):null,v=a?r("span",{class:p},[a]):null,g=l()(e+"-wrapper",(0,s.A)({},f,o||a)),y=l()(d,e+"-group-wrapper",(n={},(0,s.A)(n,e+"-group-wrapper-sm","small"===u),(0,s.A)(n,e+"-group-wrapper-lg","large"===u),n));return r("span",{class:y,style:c},[r("span",{class:g},[m,(0,h.Ob)(t,{style:null}),v])])},renderTextAreaWithClearIcon:function(e,t){var n=this.$createElement,r=this.$props,i=r.value,o=r.allowClear,a=r.className,s=r.style;if(!o)return(0,h.Ob)(t,{props:{value:i}});var c=l()(a,e+"-affix-wrapper",e+"-affix-wrapper-textarea-with-clear-btn");return n("span",{class:c,style:s},[(0,h.Ob)(t,{style:null,props:{value:i}}),this.renderClearIcon(e)])},renderClearableLabeledInput:function(){var e=this.$props,t=e.prefixCls,n=e.inputType,r=e.element;return n===m[0]?this.renderTextAreaWithClearIcon(t,r):this.renderInputWithLabel(t,this.renderLabeledIcon(t,r))}},render:function(){return this.renderClearableLabeledInput()}},g=v,y=n(43591),_={name:"ResizeObserver",props:{disabled:Boolean},data:function(){return this.currentElement=null,this.resizeObserver=null,{width:0,height:0}},mounted:function(){this.onComponentUpdated()},updated:function(){this.onComponentUpdated()},beforeDestroy:function(){this.destroyObserver()},methods:{onComponentUpdated:function(){var e=this.$props.disabled;if(e)this.destroyObserver();else{var t=this.$el,n=t!==this.currentElement;n&&(this.destroyObserver(),this.currentElement=t),!this.resizeObserver&&t&&(this.resizeObserver=new y.A(this.onResize),this.resizeObserver.observe(t))}},onResize:function(e){var t=e[0].target,n=t.getBoundingClientRect(),r=n.width,i=n.height,o=Math.floor(r),a=Math.floor(i);if(this.width!==o||this.height!==a){var s={width:o,height:a};this.width=o,this.height=a,this.$emit("resize",s)}},destroyObserver:function(){this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=null)}},render:function(){return this.$slots["default"][0]}},b=_,M=n(90034),A="\n min-height:0 !important;\n max-height:none !important;\n height:0 !important;\n visibility:hidden !important;\n overflow:hidden !important;\n position:absolute !important;\n z-index:-1000 !important;\n top:0 !important;\n right:0 !important\n",w=["letter-spacing","line-height","padding-top","padding-bottom","font-family","font-weight","font-size","font-variant","text-rendering","text-transform","width","text-indent","padding-left","padding-right","border-width","box-sizing"],x={},k=void 0;function L(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=e.getAttribute("id")||e.getAttribute("data-reactid")||e.getAttribute("name");if(t&&x[n])return x[n];var r=window.getComputedStyle(e),i=r.getPropertyValue("box-sizing")||r.getPropertyValue("-moz-box-sizing")||r.getPropertyValue("-webkit-box-sizing"),o=parseFloat(r.getPropertyValue("padding-bottom"))+parseFloat(r.getPropertyValue("padding-top")),a=parseFloat(r.getPropertyValue("border-bottom-width"))+parseFloat(r.getPropertyValue("border-top-width")),s=w.map(function(e){return e+":"+r.getPropertyValue(e)}).join(";"),c={sizingStyle:s,paddingSize:o,borderSize:a,boxSizing:i};return t&&n&&(x[n]=c),c}function C(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;k||(k=document.createElement("textarea"),document.body.appendChild(k)),e.getAttribute("wrap")?k.setAttribute("wrap",e.getAttribute("wrap")):k.removeAttribute("wrap");var i=L(e,t),o=i.paddingSize,a=i.borderSize,s=i.boxSizing,c=i.sizingStyle;k.setAttribute("style",c+";"+A),k.value=e.value||e.placeholder||"";var l=Number.MIN_SAFE_INTEGER,u=Number.MAX_SAFE_INTEGER,d=k.scrollHeight,h=void 0;if("border-box"===s?d+=a:"content-box"===s&&(d-=o),null!==n||null!==r){k.value=" ";var f=k.scrollHeight-o;null!==n&&(l=f*n,"border-box"===s&&(l=l+o+a),d=Math.max(l,d)),null!==r&&(u=f*r,"border-box"===s&&(u=u+o+a),h=d>u?"":"hidden",d=Math.min(u,d))}return{height:d+"px",minHeight:l+"px",maxHeight:u+"px",overflowY:h}}var S=n(70556),z=n(36873),T=n(52315),O={prefixCls:d.A.string,inputPrefixCls:d.A.string,defaultValue:d.A.oneOfType([d.A.string,d.A.number]),value:d.A.oneOfType([d.A.string,d.A.number]),placeholder:[String,Number],type:{default:"text",type:String},name:String,size:d.A.oneOf(["small","large","default"]),disabled:d.A.bool,readOnly:d.A.bool,addonBefore:d.A.any,addonAfter:d.A.any,prefix:d.A.any,suffix:d.A.any,autoFocus:Boolean,allowClear:Boolean,lazy:{default:!0,type:Boolean},maxLength:d.A.number,loading:d.A.bool,className:d.A.string},H=0,D=1,Y=2,V=(0,a.A)({},O,{autosize:d.A.oneOfType([Object,Boolean]),autoSize:d.A.oneOfType([Object,Boolean])}),P={name:"ResizableTextArea",props:V,data:function(){return{textareaStyles:{},resizeStatus:H}},mixins:[T.A],mounted:function(){var e=this;this.$nextTick(function(){e.resizeTextarea()})},beforeDestroy:function(){S.A.cancel(this.nextFrameActionId),S.A.cancel(this.resizeFrameId)},watch:{value:function(){var e=this;this.$nextTick(function(){e.resizeTextarea()})}},methods:{handleResize:function(e){var t=this.$data.resizeStatus,n=this.$props.autoSize;t===H&&(this.$emit("resize",e),n&&this.resizeOnNextFrame())},resizeOnNextFrame:function(){S.A.cancel(this.nextFrameActionId),this.nextFrameActionId=(0,S.A)(this.resizeTextarea)},resizeTextarea:function(){var e=this,t=this.$props.autoSize||this.$props.autosize;if(t&&this.$refs.textArea){var n=t.minRows,r=t.maxRows,i=C(this.$refs.textArea,!1,n,r);this.setState({textareaStyles:i,resizeStatus:D},function(){S.A.cancel(e.resizeFrameId),e.resizeFrameId=(0,S.A)(function(){e.setState({resizeStatus:Y},function(){e.resizeFrameId=(0,S.A)(function(){e.setState({resizeStatus:H}),e.fixFirefoxAutoScroll()})})})})}},fixFirefoxAutoScroll:function(){try{if(document.activeElement===this.$refs.textArea){var e=this.$refs.textArea.selectionStart,t=this.$refs.textArea.selectionEnd;this.$refs.textArea.setSelectionRange(e,t)}}catch(n){}},renderTextArea:function(){var e=this.$createElement,t=(0,f.Oq)(this),n=t.prefixCls,r=t.autoSize,i=t.autosize,c=t.disabled,u=this.$data,d=u.textareaStyles,h=u.resizeStatus;(0,z.A)(void 0===i,"Input.TextArea","autosize is deprecated, please use autoSize instead.");var p=(0,M.A)(t,["prefixCls","autoSize","autosize","defaultValue","allowClear","type","lazy","value"]),m=l()(n,(0,s.A)({},n+"-disabled",c)),v={};"value"in t&&(v.value=t.value||"");var g=(0,a.A)({},d,h===D?{overflowX:"hidden",overflowY:"hidden"}:null),y={attrs:p,domProps:v,style:g,class:m,on:(0,M.A)((0,f.WM)(this),"pressEnter"),directives:[{name:"ant-input"}]};return e(b,{on:{resize:this.handleResize},attrs:{disabled:!(r||i)}},[e("textarea",o()([y,{ref:"textArea"}]))])}},render:function(){return this.renderTextArea()}},E=P,j=n(25592),F=(0,a.A)({},O,{autosize:d.A.oneOfType([Object,Boolean]),autoSize:d.A.oneOfType([Object,Boolean])}),I={name:"ATextarea",inheritAttrs:!1,model:{prop:"value",event:"change.value"},props:(0,a.A)({},F),inject:{configProvider:{default:function(){return j.f}}},data:function(){var e="undefined"===typeof this.value?this.defaultValue:this.value;return{stateValue:"undefined"===typeof e?"":e}},computed:{},watch:{value:function(e){this.stateValue=e}},mounted:function(){var e=this;this.$nextTick(function(){e.autoFocus&&e.focus()})},methods:{setValue:function(e,t){(0,f.Ay)(this,"value")||(this.stateValue=e,this.$nextTick(function(){t&&t()}))},handleKeyDown:function(e){13===e.keyCode&&this.$emit("pressEnter",e),this.$emit("keydown",e)},onChange:function(e){this.$emit("change.value",e.target.value),this.$emit("change",e),this.$emit("input",e)},handleChange:function(e){var t=this,n=e.target,r=n.value,i=n.composing;(e.isComposing||i)&&this.lazy||this.stateValue===r||(this.setValue(e.target.value,function(){t.$refs.resizableTextArea.resizeTextarea()}),N(this.$refs.resizableTextArea.$refs.textArea,e,this.onChange))},focus:function(){this.$refs.resizableTextArea.$refs.textArea.focus()},blur:function(){this.$refs.resizableTextArea.$refs.textArea.blur()},handleReset:function(e){var t=this;this.setValue("",function(){t.$refs.resizableTextArea.renderTextArea(),t.focus()}),N(this.$refs.resizableTextArea.$refs.textArea,e,this.onChange)},renderTextArea:function(e){var t=this.$createElement,n=(0,f.Oq)(this),r={props:(0,a.A)({},n,{prefixCls:e}),on:(0,a.A)({},(0,f.WM)(this),{input:this.handleChange,keydown:this.handleKeyDown}),attrs:this.$attrs};return t(E,o()([r,{ref:"resizableTextArea"}]))}},render:function(){var e=arguments[0],t=this.stateValue,n=this.prefixCls,r=this.configProvider.getPrefixCls,i=r("input",n),o={props:(0,a.A)({},(0,f.Oq)(this),{prefixCls:i,inputType:"text",value:R(t),element:this.renderTextArea(i),handleReset:this.handleReset}),on:(0,f.WM)(this)};return e(g,o)}};function $(){}function R(e){return"undefined"===typeof e||null===e?"":e}function N(e,t,n){if(n){var r=t;if("click"===t.type){Object.defineProperty(r,"target",{writable:!0}),Object.defineProperty(r,"currentTarget",{writable:!0}),r.target=e,r.currentTarget=e;var i=e.value;return e.value="",n(r),void(e.value=i)}n(r)}}function W(e,t,n){var r;return l()(e,(r={},(0,s.A)(r,e+"-sm","small"===t),(0,s.A)(r,e+"-lg","large"===t),(0,s.A)(r,e+"-disabled",n),r))}var B={name:"AInput",inheritAttrs:!1,model:{prop:"value",event:"change.value"},props:(0,a.A)({},O),inject:{configProvider:{default:function(){return j.f}}},data:function(){var e=this.$props,t="undefined"===typeof e.value?e.defaultValue:e.value;return{stateValue:"undefined"===typeof t?"":t}},watch:{value:function(e){this.stateValue=e}},mounted:function(){var e=this;this.$nextTick(function(){e.autoFocus&&e.focus(),e.clearPasswordValueAttribute()})},beforeDestroy:function(){this.removePasswordTimeout&&clearTimeout(this.removePasswordTimeout)},methods:{onBlur:function(e){this.$forceUpdate();var t=(0,f.WM)(this),n=t.blur;n&&n(e)},focus:function(){this.$refs.input.focus()},blur:function(){this.$refs.input.blur()},select:function(){this.$refs.input.select()},setValue:function(e,t){this.stateValue!==e&&((0,f.cK)(this,"value")||(this.stateValue=e,this.$nextTick(function(){t&&t()})))},onChange:function(e){this.$emit("change.value",e.target.value),this.$emit("change",e),this.$emit("input",e)},handleReset:function(e){var t=this;this.setValue("",function(){t.focus()}),N(this.$refs.input,e,this.onChange)},renderInput:function(e){var t=this.$createElement,n=(0,M.A)(this.$props,["prefixCls","addonBefore","addonAfter","prefix","suffix","allowClear","value","defaultValue","lazy","size","inputType","className"]),r=this.stateValue,i=this.handleKeyDown,o=this.handleChange,s=this.size,c=this.disabled,l={directives:[{name:"ant-input"}],domProps:{value:R(r)},attrs:(0,a.A)({},n,this.$attrs),on:(0,a.A)({},(0,f.WM)(this),{keydown:i,input:o,change:$,blur:this.onBlur}),class:W(e,s,c),ref:"input",key:"ant-input"};return t("input",l)},clearPasswordValueAttribute:function(){var e=this;this.removePasswordTimeout=setTimeout(function(){e.$refs.input&&e.$refs.input.getAttribute&&"password"===e.$refs.input.getAttribute("type")&&e.$refs.input.hasAttribute("value")&&e.$refs.input.removeAttribute("value")})},handleChange:function(e){var t=e.target,n=t.value,r=t.composing;(e.isComposing||r)&&this.lazy||this.stateValue===n||(this.setValue(n,this.clearPasswordValueAttribute),N(this.$refs.input,e,this.onChange))},handleKeyDown:function(e){13===e.keyCode&&this.$emit("pressEnter",e),this.$emit("keydown",e)}},render:function(){var e=arguments[0];if("textarea"===this.$props.type){var t={props:this.$props,attrs:this.$attrs,on:(0,a.A)({},(0,f.WM)(this),{input:this.handleChange,keydown:this.handleKeyDown,change:$,blur:this.onBlur})};return e(I,o()([t,{ref:"input"}]))}var n=this.$props.prefixCls,r=this.$data.stateValue,i=this.configProvider.getPrefixCls,s=i("input",n),c=(0,f.nu)(this,"addonAfter"),l=(0,f.nu)(this,"addonBefore"),u=(0,f.nu)(this,"suffix"),d=(0,f.nu)(this,"prefix"),h={props:(0,a.A)({},(0,f.Oq)(this),{prefixCls:s,inputType:"input",value:R(r),element:this.renderInput(s),handleReset:this.handleReset,addonAfter:c,addonBefore:l,suffix:u,prefix:d}),on:(0,f.WM)(this)};return e(g,h)}},K={name:"AInputGroup",props:{prefixCls:d.A.string,size:{validator:function(e){return["small","large","default"].includes(e)}},compact:Boolean},inject:{configProvider:{default:function(){return j.f}}},computed:{classes:function(){var e,t=this.prefixCls,n=this.size,r=this.compact,i=void 0!==r&&r,o=this.configProvider.getPrefixCls,a=o("input-group",t);return e={},(0,s.A)(e,""+a,!0),(0,s.A)(e,a+"-lg","large"===n),(0,s.A)(e,a+"-sm","small"===n),(0,s.A)(e,a+"-compact",i),e}},methods:{},render:function(){var e=arguments[0];return e("span",o()([{class:this.classes},{on:(0,f.WM)(this)}]),[(0,f.Gk)(this.$slots["default"])])}},U=n(5748),q=n(5574),G=n(49084),J={name:"AInputSearch",inheritAttrs:!1,model:{prop:"value",event:"change.value"},props:(0,a.A)({},O,{enterButton:d.A.any}),inject:{configProvider:{default:function(){return j.f}}},methods:{onChange:function(e){e&&e.target&&"click"===e.type&&this.$emit("search",e.target.value,e),this.$emit("change",e)},onSearch:function(e){this.loading||this.disabled||(this.$emit("search",this.$refs.input.stateValue,e),(0,q.isMobile)({tablet:!0})||this.$refs.input.focus())},focus:function(){this.$refs.input.focus()},blur:function(){this.$refs.input.blur()},renderLoading:function(e){var t=this.$createElement,n=this.$props.size,r=(0,f.nu)(this,"enterButton");return r=r||""===r,r?t(G.A,{class:e+"-button",attrs:{type:"primary",size:n},key:"enterButton"},[t(u.A,{attrs:{type:"loading"}})]):t(u.A,{class:e+"-icon",attrs:{type:"loading"},key:"loadingIcon"})},renderSuffix:function(e){var t=this.$createElement,n=this.loading,r=(0,f.nu)(this,"suffix"),i=(0,f.nu)(this,"enterButton");if(i=i||""===i,n&&!i)return[r,this.renderLoading(e)];if(i)return r;var o=t(u.A,{class:e+"-icon",attrs:{type:"search"},key:"searchIcon",on:{click:this.onSearch}});return r?[r,o]:o},renderAddonAfter:function(e){var t=this.$createElement,n=this.size,r=this.disabled,i=this.loading,o=e+"-button",a=(0,f.nu)(this,"enterButton");a=a||""===a;var s=(0,f.nu)(this,"addonAfter");if(i&&a)return[this.renderLoading(e),s];if(!a)return s;var c=Array.isArray(a)?a[0]:a,l=void 0,d=c.componentOptions&&c.componentOptions.Ctor.extendOptions.__ANT_BUTTON;return l="button"===c.tag||d?(0,h.Ob)(c,{key:"enterButton",class:d?o:"",props:d?{size:n}:{},on:{click:this.onSearch}}):t(G.A,{class:o,attrs:{type:"primary",size:n,disabled:r},key:"enterButton",on:{click:this.onSearch}},[!0===a||""===a?t(u.A,{attrs:{type:"search"}}):a]),s?[l,s]:l}},render:function(){var e=arguments[0],t=(0,f.Oq)(this),n=t.prefixCls,r=t.inputPrefixCls,i=t.size,o=(t.loading,(0,U.A)(t,["prefixCls","inputPrefixCls","size","loading"])),c=this.configProvider.getPrefixCls,u=c("input-search",n),d=c("input",r),h=(0,f.nu)(this,"enterButton"),p=(0,f.nu)(this,"addonBefore");h=h||""===h;var m,v=void 0;h?v=l()(u,(m={},(0,s.A)(m,u+"-enter-button",!!h),(0,s.A)(m,u+"-"+i,!!i),m)):v=u;var g=(0,a.A)({},(0,f.WM)(this));delete g.search;var y={props:(0,a.A)({},o,{prefixCls:d,size:i,suffix:this.renderSuffix(u),prefix:(0,f.nu)(this,"prefix"),addonAfter:this.renderAddonAfter(u),addonBefore:p,className:v}),attrs:this.$attrs,ref:"input",on:(0,a.A)({pressEnter:this.onSearch},g,{change:this.onChange})};return e(B,y)}},X={click:"click",hover:"mouseover"},Z={name:"AInputPassword",mixins:[T.A],inheritAttrs:!1,model:{prop:"value",event:"change.value"},props:(0,a.A)({},O,{prefixCls:d.A.string,inputPrefixCls:d.A.string,action:d.A.string.def("click"),visibilityToggle:d.A.bool.def(!0)}),inject:{configProvider:{default:function(){return j.f}}},data:function(){return{visible:!1}},methods:{focus:function(){this.$refs.input.focus()},blur:function(){this.$refs.input.blur()},onVisibleChange:function(){this.disabled||this.setState({visible:!this.visible})},getIcon:function(e){var t,n=this.$createElement,r=this.$props.action,i=X[r]||"",o={props:{type:this.visible?"eye":"eye-invisible"},on:(t={},(0,s.A)(t,i,this.onVisibleChange),(0,s.A)(t,"mousedown",function(e){e.preventDefault()}),(0,s.A)(t,"mouseup",function(e){e.preventDefault()}),t),class:e+"-icon",key:"passwordIcon"};return n(u.A,o)}},render:function(){var e=arguments[0],t=(0,f.Oq)(this),n=t.prefixCls,r=t.inputPrefixCls,i=t.size,o=(t.suffix,t.visibilityToggle),c=(0,U.A)(t,["prefixCls","inputPrefixCls","size","suffix","visibilityToggle"]),u=this.configProvider.getPrefixCls,d=u("input",r),h=u("input-password",n),p=o&&this.getIcon(h),m=l()(h,(0,s.A)({},h+"-"+i,!!i)),v={props:(0,a.A)({},c,{prefixCls:d,size:i,suffix:p,prefix:(0,f.nu)(this,"prefix"),addonAfter:(0,f.nu)(this,"addonAfter"),addonBefore:(0,f.nu)(this,"addonBefore")}),attrs:(0,a.A)({},this.$attrs,{type:this.visible?"text":"password"}),class:m,ref:"input",on:(0,f.WM)(this)};return e(B,v)}},Q=n(81593),ee=n(44807);r.Ay.use(Q.Ay),B.Group=K,B.Search=J,B.TextArea=I,B.Password=Z,B.install=function(e){e.use(ee.A),e.component(B.name,B),e.component(B.Group.name,B.Group),e.component(B.Search.name,B.Search),e.component(B.TextArea.name,B.TextArea),e.component(B.Password.name,B.Password)};var te=B},71094:function(e,t,n){"use strict";n(29229),n(27902)},37896:function(e,t,n){"use strict";n.d(t,{A:function(){return z}});var r=n(44508),i=n(32779),o=n(85505),a=n(4718),s=n(46942),c=n.n(s),l=n(15848),u=n(25592),d={prefixCls:a.A.string,hasSider:a.A.boolean,tagName:a.A.string};function h(e){var t=e.suffixCls,n=e.tagName,r=e.name;return function(e){return{name:r,props:e.props,inject:{configProvider:{default:function(){return u.f}}},render:function(){var r=arguments[0],i=this.$props.prefixCls,a=this.configProvider.getPrefixCls,s=a(t,i),c={props:(0,o.A)({prefixCls:s},(0,l.Oq)(this),{tagName:n}),on:(0,l.WM)(this)};return r(e,c,[this.$slots["default"]])}}}}var f={props:d,render:function(){var e=arguments[0],t=this.prefixCls,n=this.tagName,r=this.$slots,i={class:t,on:(0,l.WM)(this)};return e(n,i,[r["default"]])}},p={props:d,data:function(){return{siders:[]}},provide:function(){var e=this;return{siderHook:{addSider:function(t){e.siders=[].concat((0,i.A)(e.siders),[t])},removeSider:function(t){e.siders=e.siders.filter(function(e){return e!==t})}}}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.$slots,i=this.hasSider,o=this.tagName,a=c()(t,(0,r.A)({},t+"-has-sider","boolean"===typeof i?i:this.siders.length>0)),s={class:a,on:l.WM};return e(o,s,[n["default"]])}},m=h({suffixCls:"layout",tagName:"section",name:"ALayout"})(p),v=h({suffixCls:"layout-header",tagName:"header",name:"ALayoutHeader"})(f),g=h({suffixCls:"layout-footer",tagName:"footer",name:"ALayoutFooter"})(f),y=h({suffixCls:"layout-content",tagName:"main",name:"ALayoutContent"})(f);m.Header=v,m.Footer=g,m.Content=y;var _=m,b=n(52315),M=n(2410),A=n(40255);if("undefined"!==typeof window){var w=function(e){return{media:e,matches:!1,addListener:function(){},removeListener:function(){}}};window.matchMedia=window.matchMedia||w}var x={xs:"479.98px",sm:"575.98px",md:"767.98px",lg:"991.98px",xl:"1199.98px",xxl:"1599.98px"},k={prefixCls:a.A.string,collapsible:a.A.bool,collapsed:a.A.bool,defaultCollapsed:a.A.bool,reverseArrow:a.A.bool,zeroWidthTriggerStyle:a.A.object,trigger:a.A.any,width:a.A.oneOfType([a.A.number,a.A.string]),collapsedWidth:a.A.oneOfType([a.A.number,a.A.string]),breakpoint:a.A.oneOf(["xs","sm","md","lg","xl","xxl"]),theme:a.A.oneOf(["light","dark"]).def("dark")},L=function(){var e=0;return function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return e+=1,""+t+e}}(),C={name:"ALayoutSider",__ANT_LAYOUT_SIDER:!0,mixins:[b.A],model:{prop:"collapsed",event:"collapse"},props:(0,l.CB)(k,{collapsible:!1,defaultCollapsed:!1,reverseArrow:!1,width:200,collapsedWidth:80}),data:function(){this.uniqueId=L("ant-sider-");var e=void 0;"undefined"!==typeof window&&(e=window.matchMedia);var t=(0,l.Oq)(this);e&&t.breakpoint&&t.breakpoint in x&&(this.mql=e("(max-width: "+x[t.breakpoint]+")"));var n=void 0;return n="collapsed"in t?t.collapsed:t.defaultCollapsed,{sCollapsed:n,below:!1,belowShow:!1}},provide:function(){return{layoutSiderContext:this}},inject:{siderHook:{default:function(){return{}}},configProvider:{default:function(){return u.f}}},watch:{collapsed:function(e){this.setState({sCollapsed:e})}},mounted:function(){var e=this;this.$nextTick(function(){e.mql&&(e.mql.addListener(e.responsiveHandler),e.responsiveHandler(e.mql)),e.siderHook.addSider&&e.siderHook.addSider(e.uniqueId)})},beforeDestroy:function(){this.mql&&this.mql.removeListener(this.responsiveHandler),this.siderHook.removeSider&&this.siderHook.removeSider(this.uniqueId)},methods:{responsiveHandler:function(e){this.setState({below:e.matches}),this.$emit("breakpoint",e.matches),this.sCollapsed!==e.matches&&this.setCollapsed(e.matches,"responsive")},setCollapsed:function(e,t){(0,l.cK)(this,"collapsed")||this.setState({sCollapsed:e}),this.$emit("collapse",e,t)},toggle:function(){var e=!this.sCollapsed;this.setCollapsed(e,"clickTrigger")},belowShowChange:function(){this.setState({belowShow:!this.belowShow})}},render:function(){var e,t=arguments[0],n=(0,l.Oq)(this),i=n.prefixCls,o=n.theme,a=n.collapsible,s=n.reverseArrow,u=n.width,d=n.collapsedWidth,h=n.zeroWidthTriggerStyle,f=this.configProvider.getPrefixCls,p=f("layout-sider",i),m=(0,l.nu)(this,"trigger"),v=this.sCollapsed?d:u,g=(0,M.A)(v)?v+"px":String(v),y=0===parseFloat(String(d||0))?t("span",{on:{click:this.toggle},class:p+"-zero-width-trigger "+p+"-zero-width-trigger-"+(s?"right":"left"),style:h},[t(A.A,{attrs:{type:"bars"}})]):null,_={expanded:t(A.A,s?{attrs:{type:"right"}}:{attrs:{type:"left"}}),collapsed:t(A.A,s?{attrs:{type:"left"}}:{attrs:{type:"right"}})},b=this.sCollapsed?"collapsed":"expanded",w=_[b],x=null!==m?y||t("div",{class:p+"-trigger",on:{click:this.toggle},style:{width:g}},[m||w]):null,k={flex:"0 0 "+g,maxWidth:g,minWidth:g,width:g},L=c()(p,p+"-"+o,(e={},(0,r.A)(e,p+"-collapsed",!!this.sCollapsed),(0,r.A)(e,p+"-has-trigger",a&&null!==m&&!y),(0,r.A)(e,p+"-below",!!this.below),(0,r.A)(e,p+"-zero-width",0===parseFloat(g)),e)),C={on:(0,l.WM)(this),class:L,style:k};return t("aside",C,[t("div",{class:p+"-children"},[this.$slots["default"]]),a||this.below&&y?x:null])}},S=n(44807);_.Sider=C,_.install=function(e){e.use(S.A),e.component(_.name,_),e.component(_.Header.name,_.Header),e.component(_.Footer.name,_.Footer),e.component(_.Sider.name,_.Sider),e.component(_.Content.name,_.Content)};var z=_},58568:function(e,t,n){"use strict";n(29229)},47132:function(e,t,n){"use strict";n.d(t,{Dd:function(){return S},Ay:function(){return H}});var r=n(75189),i=n.n(r),o=n(32779),a=n(5748),s=n(85505),c=n(44508),l=n(97479),u=n(4718),d=n(46942),h=n.n(d),f=n(90034),p=n(25592),m=n(82840),v=n(38223),g=n(64168),y=n(9712),_=n(15848),b=n(43594),M=n(51927),A={prefixCls:u.A.string,extra:u.A.any,actions:u.A.arrayOf(u.A.any),grid:S},w=(u.A.any,u.A.any,u.A.string,u.A.any,{functional:!0,name:"AListItemMeta",__ANT_LIST_ITEM_META:!0,inject:{configProvider:{default:function(){return p.f}}},render:function(e,t){var n=t.props,r=t.slots,o=t.listeners,a=t.injections,s=r(),c=a.configProvider.getPrefixCls,l=n.prefixCls,u=c("list",l),d=n.avatar||s.avatar,h=n.title||s.title,f=n.description||s.description,p=e("div",{class:u+"-item-meta-content"},[h&&e("h4",{class:u+"-item-meta-title"},[h]),f&&e("div",{class:u+"-item-meta-description"},[f])]);return e("div",i()([{on:o},{class:u+"-item-meta"}]),[d&&e("div",{class:u+"-item-meta-avatar"},[d]),(h||f)&&p])}});function x(e,t){return e[t]&&Math.floor(24/e[t])}var k={name:"AListItem",Meta:w,props:A,inject:{listContext:{default:function(){return{}}},configProvider:{default:function(){return p.f}}},methods:{isItemContainsTextNodeAndNotSingular:function(){var e=this.$slots,t=void 0,n=e["default"]||[];return n.forEach(function(e){(0,_.K6)(e)&&!(0,_.sG)(e)&&(t=!0)}),t&&n.length>1},isFlexMode:function(){var e=(0,_.nu)(this,"extra"),t=this.listContext.itemLayout;return"vertical"===t?!!e:!this.isItemContainsTextNodeAndNotSingular()}},render:function(){var e=arguments[0],t=this.listContext,n=t.grid,r=t.itemLayout,o=this.prefixCls,a=this.$slots,s=(0,_.WM)(this),l=this.configProvider.getPrefixCls,u=l("list",o),d=(0,_.nu)(this,"extra"),f=(0,_.nu)(this,"actions"),p=f&&f.length>0&&e("ul",{class:u+"-item-action",key:"actions"},[f.map(function(t,n){return e("li",{key:u+"-item-action-"+n},[t,n!==f.length-1&&e("em",{class:u+"-item-action-split"})])})]),m=n?"div":"li",v=e(m,i()([{on:s},{class:h()(u+"-item",(0,c.A)({},u+"-item-no-flex",!this.isFlexMode()))}]),["vertical"===r&&d?[e("div",{class:u+"-item-main",key:"content"},[a["default"],p]),e("div",{class:u+"-item-extra",key:"extra"},[d])]:[a["default"],p,(0,M.Ob)(d,{key:"extra"})]]),g=n?e(b.Ay,{attrs:{span:x(n,"column"),xs:x(n,"xs"),sm:x(n,"sm"),md:x(n,"md"),lg:x(n,"lg"),xl:x(n,"xl"),xxl:x(n,"xxl")}},[v]):v;return g}},L=n(44807),C=["",1,2,3,4,6,8,12,24],S={gutter:u.A.number,column:u.A.oneOf(C),xs:u.A.oneOf(C),sm:u.A.oneOf(C),md:u.A.oneOf(C),lg:u.A.oneOf(C),xl:u.A.oneOf(C),xxl:u.A.oneOf(C)},z=["small","default","large"],T=function(){return{bordered:u.A.bool,dataSource:u.A.array,extra:u.A.any,grid:u.A.shape(S).loose,itemLayout:u.A.string,loading:u.A.oneOfType([u.A.bool,u.A.object]),loadMore:u.A.any,pagination:u.A.oneOfType([u.A.shape((0,v.BH)()).loose,u.A.bool]),prefixCls:u.A.string,rowKey:u.A.any,renderItem:u.A.any,size:u.A.oneOf(z),split:u.A.bool,header:u.A.any,footer:u.A.any,locale:u.A.object}},O={Item:k,name:"AList",props:(0,_.CB)(T(),{dataSource:[],bordered:!1,split:!0,loading:!1,pagination:!1}),provide:function(){return{listContext:this}},inject:{configProvider:{default:function(){return p.f}}},data:function(){var e=this;this.keys=[],this.defaultPaginationProps={current:1,pageSize:10,onChange:function(t,n){var r=e.pagination;e.paginationCurrent=t,r&&r.onChange&&r.onChange(t,n)},total:0},this.onPaginationChange=this.triggerPaginationEvent("onChange"),this.onPaginationShowSizeChange=this.triggerPaginationEvent("onShowSizeChange");var t=this.$props.pagination,n=t&&"object"===("undefined"===typeof t?"undefined":(0,l.A)(t))?t:{};return{paginationCurrent:n.defaultCurrent||1,paginationSize:n.defaultPageSize||10}},methods:{triggerPaginationEvent:function(e){var t=this;return function(n,r){var i=t.$props.pagination;t.paginationCurrent=n,t.paginationSize=r,i&&i[e]&&i[e](n,r)}},renderItem2:function(e,t){var n=this.$scopedSlots,r=this.rowKey,i=this.renderItem||n.renderItem;if(!i)return null;var o=void 0;return o="function"===typeof r?r(e):"string"===typeof r?e[r]:e.key,o||(o="list-item-"+t),this.keys[t]=o,i(e,t)},isSomethingAfterLastItem:function(){var e=this.pagination,t=(0,_.nu)(this,"loadMore"),n=(0,_.nu)(this,"footer");return!!(t||e||n)},renderEmpty:function(e,t){var n=this.$createElement,r=this.locale;return n("div",{class:e+"-empty-text"},[r&&r.emptyText||t(n,"List")])}},render:function(){var e,t=this,n=arguments[0],r=this.prefixCls,l=this.bordered,u=this.split,d=this.itemLayout,p=this.pagination,v=this.grid,b=this.dataSource,A=void 0===b?[]:b,w=this.size,x=this.loading,k=this.$slots,L=this.paginationCurrent,C=this.paginationSize,S=this.configProvider.getPrefixCls,z=S("list",r),T=(0,_.nu)(this,"loadMore"),O=(0,_.nu)(this,"footer"),H=(0,_.nu)(this,"header"),D=(0,_.Gk)(k["default"]||[]),Y=x;"boolean"===typeof Y&&(Y={spinning:Y});var V=Y&&Y.spinning,P="";switch(w){case"large":P="lg";break;case"small":P="sm";break;default:break}var E=h()(z,(e={},(0,c.A)(e,z+"-vertical","vertical"===d),(0,c.A)(e,z+"-"+P,P),(0,c.A)(e,z+"-split",u),(0,c.A)(e,z+"-bordered",l),(0,c.A)(e,z+"-loading",V),(0,c.A)(e,z+"-grid",v),(0,c.A)(e,z+"-something-after-last-item",this.isSomethingAfterLastItem()),e)),j=(0,s.A)({},this.defaultPaginationProps,{total:A.length,current:L,pageSize:C},p||{}),F=Math.ceil(j.total/j.pageSize);j.current>F&&(j.current=F);var I=j["class"],$=j.style,R=(0,a.A)(j,["class","style"]),N=p?n("div",{class:z+"-pagination"},[n(g.Ay,{props:(0,f.A)(R,["onChange"]),class:I,style:$,on:{change:this.onPaginationChange,showSizeChange:this.onPaginationShowSizeChange}})]):null,W=[].concat((0,o.A)(A));p&&A.length>(j.current-1)*j.pageSize&&(W=[].concat((0,o.A)(A)).splice((j.current-1)*j.pageSize,j.pageSize));var B=void 0;if(B=V&&n("div",{style:{minHeight:53}}),W.length>0){var K=W.map(function(e,n){return t.renderItem2(e,n)}),U=K.map(function(e,n){return(0,M.Ob)(e,{key:t.keys[n]})});B=v?n(y.A,{attrs:{gutter:v.gutter}},[U]):n("ul",{class:z+"-items"},[U])}else if(!D.length&&!V){var q=this.configProvider.renderEmpty;B=this.renderEmpty(z,q)}var G=j.position||"bottom";return n("div",i()([{class:E},{on:(0,_.WM)(this)}]),[("top"===G||"both"===G)&&N,H&&n("div",{class:z+"-header"},[H]),n(m.A,{props:Y},[B,D]),O&&n("div",{class:z+"-footer"},[O]),T||("bottom"===G||"both"===G)&&N])},install:function(e){e.use(L.A),e.component(O.name,O),e.component(O.Item.name,O.Item),e.component(O.Item.Meta.name,O.Item.Meta)}},H=O},66882:function(e,t,n){"use strict";n(29229),n(93693),n(45562),n(25482),n(67434)},38377:function(e,t,n){"use strict";var r=n(85505),i=n(4718),o=n(77749);t.A={name:"LocaleReceiver",props:{componentName:i.A.string.def("global"),defaultLocale:i.A.oneOfType([i.A.object,i.A.func]),children:i.A.func},inject:{localeData:{default:function(){return{}}}},methods:{getLocale:function(){var e=this.componentName,t=this.defaultLocale,n=t||o.A[e||"global"],i=this.localeData.antLocale,a=e&&i?i[e]:{};return(0,r.A)({},"function"===typeof n?n():n,a||{})},getLocaleCode:function(){var e=this.localeData.antLocale,t=e&&e.locale;return e&&e.exist&&!t?o.A.locale:t}},render:function(){var e=this.$scopedSlots,t=this.children||e["default"],n=this.localeData.antLocale;return t(this.getLocale(),this.getLocaleCode(),n)}}},77749:function(e,t,n){"use strict";var r=n(81966);t.A=r.A},1512:function(e,t,n){"use strict";n.d(t,{A:function(){return o}});var r=n(81966),i=r.A,o=i},81966:function(e,t,n){"use strict";n.d(t,{A:function(){return s}});var r=n(15709),i=n(69656),o=n(68265),a=i.A,s={locale:"en",Pagination:r.A,DatePicker:i.A,TimePicker:o.A,Calendar:a,global:{placeholder:"Please select"},Table:{filterTitle:"Filter menu",filterConfirm:"OK",filterReset:"Reset",selectAll:"Select current page",selectInvert:"Invert current page",sortTitle:"Sort",expand:"Expand row",collapse:"Collapse row"},Modal:{okText:"OK",cancelText:"Cancel",justOkText:"OK"},Popconfirm:{okText:"OK",cancelText:"Cancel"},Transfer:{titles:["",""],searchPlaceholder:"Search here",itemUnit:"item",itemsUnit:"items"},Upload:{uploading:"Uploading...",removeFile:"Remove file",uploadError:"Upload error",previewFile:"Preview file",downloadFile:"Download file"},Empty:{description:"No Data"},Icon:{icon:"icon"},Text:{edit:"Edit",copy:"Copy",copied:"Copied",expand:"Expand"},PageHeader:{back:"Back"}}},36457:function(e,t,n){"use strict";n.d(t,{Ay:function(){return T}});var r=n(75189),i=n.n(r),o=n(44508),a=n(85505),s=n(90034),c={name:"MenuDivider",props:{disabled:{type:Boolean,default:!0},rootPrefixCls:String},render:function(){var e=arguments[0],t=this.$props.rootPrefixCls;return e("li",{class:t+"-item-divider"})}},l=n(13382),u=n(74072),d=n(70198),h=n(15848),f=n(46942),p=n.n(f),m={name:"ASubMenu",isSubMenu:!0,props:(0,a.A)({},d.A.props),inject:{menuPropsContext:{default:function(){return{}}}},methods:{onKeyDown:function(e){this.$refs.subMenu.onKeyDown(e)}},render:function(){var e=arguments[0],t=this.$slots,n=this.$scopedSlots,r=this.$props,i=r.rootPrefixCls,o=r.popupClassName,s=this.menuPropsContext.theme,c={props:(0,a.A)({},this.$props,{popupClassName:p()(i+"-"+s,o)}),ref:"subMenu",on:(0,h.WM)(this),scopedSlots:n},l=Object.keys(t);return e(d.A,c,[l.length?l.map(function(n){return e("template",{slot:n},[t[n]])}):null])}},v=n(4718),g=n(40703),y=n(36873),_=n(5285),b=n(90500);function M(){}var A={name:"MenuItem",inheritAttrs:!1,props:_.V,inject:{getInlineCollapsed:{default:function(){return M}},layoutSiderContext:{default:function(){return{}}}},isMenuItem:!0,methods:{onKeyDown:function(e){this.$refs.menuItem.onKeyDown(e)}},render:function(){var e=arguments[0],t=(0,h.Oq)(this),n=t.level,r=t.title,o=t.rootPrefixCls,s=this.getInlineCollapsed,c=this.$slots,l=this.$attrs,u=s(),d=r;"undefined"===typeof r?d=1===n?c["default"]:"":!1===r&&(d="");var f={title:d},p=this.layoutSiderContext.sCollapsed;p||u||(f.title=null,f.visible=!1);var m={props:(0,a.A)({},t,{title:r}),attrs:l,on:(0,h.WM)(this)},v={props:(0,a.A)({},f,{placement:"right",overlayClassName:o+"-inline-collapsed-tooltip"})};return e(b.A,v,[e(_.A,i()([m,{ref:"menuItem"}]),[c["default"]])])}},w=n(52315),x=n(55384),k=n(25592),L=n(44807),C=v.A.oneOf(["vertical","vertical-left","vertical-right","horizontal","inline"]),S=(0,a.A)({},x.A,{theme:v.A.oneOf(["light","dark"]).def("light"),mode:C.def("vertical"),selectable:v.A.bool,selectedKeys:v.A.arrayOf(v.A.oneOfType([v.A.string,v.A.number])),defaultSelectedKeys:v.A.array,openKeys:v.A.array,defaultOpenKeys:v.A.array,openAnimation:v.A.oneOfType([v.A.string,v.A.object]),openTransitionName:v.A.string,prefixCls:v.A.string,multiple:v.A.bool,inlineIndent:v.A.number.def(24),inlineCollapsed:v.A.bool,isRootMenu:v.A.bool.def(!0),focusable:v.A.bool.def(!1)}),z={name:"AMenu",props:S,Divider:(0,a.A)({},c,{name:"AMenuDivider"}),Item:(0,a.A)({},A,{name:"AMenuItem"}),SubMenu:(0,a.A)({},m,{name:"ASubMenu"}),ItemGroup:(0,a.A)({},l.A,{name:"AMenuItemGroup"}),provide:function(){return{getInlineCollapsed:this.getInlineCollapsed,menuPropsContext:this.$props}},mixins:[w.A],inject:{layoutSiderContext:{default:function(){return{}}},configProvider:{default:function(){return k.f}}},model:{prop:"selectedKeys",event:"selectChange"},updated:function(){this.propsUpdating=!1},watch:{mode:function(e,t){"inline"===t&&"inline"!==e&&(this.switchingModeFromInline=!0)},openKeys:function(e){this.setState({sOpenKeys:e})},inlineCollapsed:function(e){this.collapsedChange(e)},"layoutSiderContext.sCollapsed":function(e){this.collapsedChange(e)}},data:function(){var e=(0,h.Oq)(this);(0,y.A)(!("inlineCollapsed"in e&&"inline"!==e.mode),"Menu","`inlineCollapsed` should only be used when Menu's `mode` is inline."),this.switchingModeFromInline=!1,this.leaveAnimationExecutedWhenInlineCollapsed=!1,this.inlineOpenKeys=[];var t=void 0;return"openKeys"in e?t=e.openKeys:"defaultOpenKeys"in e&&(t=e.defaultOpenKeys),{sOpenKeys:t}},methods:{collapsedChange:function(e){this.propsUpdating||(this.propsUpdating=!0,(0,h.cK)(this,"openKeys")?e&&(this.switchingModeFromInline=!0):e?(this.switchingModeFromInline=!0,this.inlineOpenKeys=this.sOpenKeys,this.setState({sOpenKeys:[]})):(this.setState({sOpenKeys:this.inlineOpenKeys}),this.inlineOpenKeys=[]))},restoreModeVerticalFromInline:function(){this.switchingModeFromInline&&(this.switchingModeFromInline=!1,this.$forceUpdate())},handleMouseEnter:function(e){this.restoreModeVerticalFromInline(),this.$emit("mouseenter",e)},handleTransitionEnd:function(e){var t="width"===e.propertyName&&e.target===e.currentTarget,n=e.target.className,r="[object SVGAnimatedString]"===Object.prototype.toString.call(n)?n.animVal:n,i="font-size"===e.propertyName&&r.indexOf("anticon")>=0;(t||i)&&this.restoreModeVerticalFromInline()},handleClick:function(e){this.handleOpenChange([]),this.$emit("click",e)},handleSelect:function(e){this.$emit("select",e),this.$emit("selectChange",e.selectedKeys)},handleDeselect:function(e){this.$emit("deselect",e),this.$emit("selectChange",e.selectedKeys)},handleOpenChange:function(e){this.setOpenKeys(e),this.$emit("openChange",e),this.$emit("update:openKeys",e)},setOpenKeys:function(e){(0,h.cK)(this,"openKeys")||this.setState({sOpenKeys:e})},getRealMenuMode:function(){var e=this.getInlineCollapsed();if(this.switchingModeFromInline&&e)return"inline";var t=this.$props.mode;return e?"vertical":t},getInlineCollapsed:function(){var e=this.$props.inlineCollapsed;return void 0!==this.layoutSiderContext.sCollapsed?this.layoutSiderContext.sCollapsed:e},getMenuOpenAnimation:function(e){var t=this.$props,n=t.openAnimation,r=t.openTransitionName,i=n||r;return void 0===n&&void 0===r&&("horizontal"===e?i="slide-up":"inline"===e?i={on:g.A}:this.switchingModeFromInline?(i="",this.switchingModeFromInline=!1):i="zoom-big"),i}},render:function(){var e,t=this,n=arguments[0],r=this.layoutSiderContext,c=this.$slots,l=r.collapsedWidth,d=this.configProvider.getPopupContainer,f=(0,h.Oq)(this),p=f.prefixCls,m=f.theme,v=f.getPopupContainer,g=this.configProvider.getPrefixCls,y=g("menu",p),_=this.getRealMenuMode(),b=this.getMenuOpenAnimation(_),M=(e={},(0,o.A)(e,y+"-"+m,!0),(0,o.A)(e,y+"-inline-collapsed",this.getInlineCollapsed()),e),A={props:(0,a.A)({},(0,s.A)(f,["inlineCollapsed"]),{getPopupContainer:v||d,openKeys:this.sOpenKeys,mode:_,prefixCls:y}),on:(0,a.A)({},(0,h.WM)(this),{select:this.handleSelect,deselect:this.handleDeselect,openChange:this.handleOpenChange,mouseenter:this.handleMouseEnter}),nativeOn:{transitionend:this.handleTransitionEnd}};(0,h.cK)(this,"selectedKeys")||delete A.props.selectedKeys,"inline"!==_?(A.on.click=this.handleClick,A.props.openTransitionName=b):(A.on.click=function(e){t.$emit("click",e)},A.props.openAnimation=b);var w=this.getInlineCollapsed()&&(0===l||"0"===l||"0px"===l);return w&&(A.props.openKeys=[]),n(u.Ay,i()([A,{class:M}]),[c["default"]])},install:function(e){e.use(L.A),e.component(z.name,z),e.component(z.Item.name,z.Item),e.component(z.SubMenu.name,z.SubMenu),e.component(z.Divider.name,z.Divider),e.component(z.ItemGroup.name,z.ItemGroup)}},T=z},1747:function(e,t,n){"use strict";n(29229),n(42543)},18787:function(e,t,n){"use strict";var r=n(85505),i=n(94915),o=n(40255),a=3,s=void 0,c=void 0,l=1,u="ant-message",d="move-up",h=function(){return document.body},f=void 0;function p(e){c?e(c):i.A.newInstance({prefixCls:u,transitionName:d,style:{top:s},getContainer:h,maxCount:f},function(t){c?e(c):(c=t,e(t))})}function m(e){var t=void 0!==e.duration?e.duration:a,n={info:"info-circle",success:"check-circle",error:"close-circle",warning:"exclamation-circle",loading:"loading"}[e.type],r=e.key||l++,i=new Promise(function(i){var a=function(){return"function"===typeof e.onClose&&e.onClose(),i(!0)};p(function(i){i.notice({key:r,duration:t,style:{},content:function(t){var r=t(o.A,{attrs:{type:n,theme:"loading"===n?"outlined":"filled"}}),i=n?r:"";return t("div",{class:u+"-custom-content"+(e.type?" "+u+"-"+e.type:"")},[e.icon?"function"===typeof e.icon?e.icon(t):e.icon:i,t("span",["function"===typeof e.content?e.content(t):e.content])])},onClose:a})})}),s=function(){c&&c.removeNotice(r)};return s.then=function(e,t){return i.then(e,t)},s.promise=i,s}function v(e){return"[object Object]"===Object.prototype.toString.call(e)&&!!e.content}var g={open:m,config:function(e){void 0!==e.top&&(s=e.top,c=null),void 0!==e.duration&&(a=e.duration),void 0!==e.prefixCls&&(u=e.prefixCls),void 0!==e.getContainer&&(h=e.getContainer),void 0!==e.transitionName&&(d=e.transitionName,c=null),void 0!==e.maxCount&&(f=e.maxCount,c=null)},destroy:function(){c&&(c.destroy(),c=null)}};["success","info","warning","error","loading"].forEach(function(e){g[e]=function(t,n,i){return v(t)?g.open((0,r.A)({},t,{type:e})):("function"===typeof n&&(i=n,n=void 0),g.open({content:t,duration:n,type:e,onClose:i}))}}),g.warn=g.warning,t.A=g},6011:function(e,t,n){"use strict";n(29229)},43898:function(e,t,n){"use strict";n.d(t,{A:function(){return ve}});var r=n(85505),i=n(44508),o=n(46942),a=n.n(o),s=n(75189),c=n.n(s),l=n(15848),u=n(11207),d=n(17948),h=n(4718),f={visible:h.A.bool,hiddenClassName:h.A.string,forceRender:h.A.bool},p={props:f,render:function(){var e=arguments[0];return e("div",{on:(0,l.WM)(this)},[this.$slots["default"]])}},m=n(52315),v=n(80178),g=n(93986),y=function(e){var t=document.body.scrollHeight>(window.innerHeight||document.documentElement.clientHeight)&&window.innerWidth>document.body.offsetWidth;if(t){if(e)return document.body.style.position="",void(document.body.style.width="");var n=(0,g.A)();n&&(document.body.style.position="relative",document.body.style.width="calc(100% - "+n+"px)")}};function _(){return{keyboard:h.A.bool,mask:h.A.bool,afterClose:h.A.func,closable:h.A.bool,maskClosable:h.A.bool,visible:h.A.bool,destroyOnClose:h.A.bool,mousePosition:h.A.shape({x:h.A.number,y:h.A.number}).loose,title:h.A.any,footer:h.A.any,transitionName:h.A.string,maskTransitionName:h.A.string,animation:h.A.any,maskAnimation:h.A.any,wrapStyle:h.A.object,bodyStyle:h.A.object,maskStyle:h.A.object,prefixCls:h.A.string,wrapClassName:h.A.string,width:h.A.oneOfType([h.A.string,h.A.number]),height:h.A.oneOfType([h.A.string,h.A.number]),zIndex:h.A.number,bodyProps:h.A.any,maskProps:h.A.any,wrapProps:h.A.any,getContainer:h.A.any,dialogStyle:h.A.object.def(function(){return{}}),dialogClass:h.A.string.def(""),closeIcon:h.A.any,forceRender:h.A.bool,getOpenCount:h.A.func,focusTriggerAfterClose:h.A.bool}}var b=_,M=b(),A=0;function w(){}function x(e,t){var n=e["page"+(t?"Y":"X")+"Offset"],r="scroll"+(t?"Top":"Left");if("number"!==typeof n){var i=e.document;n=i.documentElement[r],"number"!==typeof n&&(n=i.body[r])}return n}function k(e,t){var n=e.style;["Webkit","Moz","Ms","ms"].forEach(function(e){n[e+"TransformOrigin"]=t}),n["transformOrigin"]=t}function L(e){var t=e.getBoundingClientRect(),n={left:t.left,top:t.top},r=e.ownerDocument,i=r.defaultView||r.parentWindow;return n.left+=x(i),n.top+=x(i,!0),n}var C={},S={mixins:[m.A],props:(0,l.CB)(M,{mask:!0,visible:!1,keyboard:!0,closable:!0,maskClosable:!0,destroyOnClose:!1,prefixCls:"rc-dialog",getOpenCount:function(){return null},focusTriggerAfterClose:!0}),data:function(){return{destroyPopup:!1}},provide:function(){return{dialogContext:this}},watch:{visible:function(e){var t=this;e&&(this.destroyPopup=!1),this.$nextTick(function(){t.updatedCallback(!e)})}},beforeMount:function(){this.inTransition=!1,this.titleId="rcDialogTitle"+A++},mounted:function(){var e=this;this.$nextTick(function(){e.updatedCallback(!1),(e.forceRender||!1===e.getContainer&&!e.visible)&&e.$refs.wrap&&(e.$refs.wrap.style.display="none")})},beforeDestroy:function(){var e=this.visible,t=this.getOpenCount;!e&&!this.inTransition||t()||this.switchScrollingEffect(),clearTimeout(this.timeoutId)},methods:{getDialogWrap:function(){return this.$refs.wrap},updatedCallback:function(e){var t=this.mousePosition,n=this.mask,r=this.focusTriggerAfterClose;if(this.visible){if(!e){this.openTime=Date.now(),this.switchScrollingEffect(),this.tryFocus();var i=this.$refs.dialog.$el;if(t){var o=L(i);k(i,t.x-o.left+"px "+(t.y-o.top)+"px")}else k(i,"")}}else if(e&&(this.inTransition=!0,n&&this.lastOutSideFocusNode&&r)){try{this.lastOutSideFocusNode.focus()}catch(a){this.lastOutSideFocusNode=null}this.lastOutSideFocusNode=null}},tryFocus:function(){(0,d.A)(this.$refs.wrap,document.activeElement)||(this.lastOutSideFocusNode=document.activeElement,this.$refs.sentinelStart.focus())},onAnimateLeave:function(){var e=this.afterClose,t=this.destroyOnClose;this.$refs.wrap&&(this.$refs.wrap.style.display="none"),t&&(this.destroyPopup=!0),this.inTransition=!1,this.switchScrollingEffect(),e&&e()},onDialogMouseDown:function(){this.dialogMouseDown=!0},onMaskMouseUp:function(){var e=this;this.dialogMouseDown&&(this.timeoutId=setTimeout(function(){e.dialogMouseDown=!1},0))},onMaskClick:function(e){Date.now()-this.openTime<300||e.target!==e.currentTarget||this.dialogMouseDown||this.close(e)},onKeydown:function(e){var t=this.$props;if(t.keyboard&&e.keyCode===u.A.ESC)return e.stopPropagation(),void this.close(e);if(t.visible&&e.keyCode===u.A.TAB){var n=document.activeElement,r=this.$refs.sentinelStart;e.shiftKey?n===r&&this.$refs.sentinelEnd.focus():n===this.$refs.sentinelEnd&&r.focus()}},getDialogElement:function(){var e=this.$createElement,t=this.closable,n=this.prefixCls,o=this.width,a=this.height,s=this.title,u=this.footer,d=this.bodyStyle,h=this.visible,f=this.bodyProps,m=this.forceRender,g=this.dialogStyle,y=this.dialogClass,_=(0,r.A)({},g);void 0!==o&&(_.width="number"===typeof o?o+"px":o),void 0!==a&&(_.height="number"===typeof a?a+"px":a);var b=void 0;u&&(b=e("div",{key:"footer",class:n+"-footer",ref:"footer"},[u]));var M=void 0;s&&(M=e("div",{key:"header",class:n+"-header",ref:"header"},[e("div",{class:n+"-title",attrs:{id:this.titleId}},[s])]));var A=void 0;if(t){var x=(0,l.nu)(this,"closeIcon");A=e("button",{attrs:{type:"button","aria-label":"Close"},key:"close",on:{click:this.close||w},class:n+"-close"},[x||e("span",{class:n+"-close-x"})])}var k=_,L={width:0,height:0,overflow:"hidden"},C=(0,i.A)({},n,!0),S=this.getTransitionName(),z=e(p,{directives:[{name:"show",value:h}],key:"dialog-element",attrs:{role:"document",forceRender:m},ref:"dialog",style:k,class:[C,y],on:{mousedown:this.onDialogMouseDown}},[e("div",{attrs:{tabIndex:0,"aria-hidden":"true"},ref:"sentinelStart",style:L}),e("div",{class:n+"-content"},[A,M,e("div",c()([{key:"body",class:n+"-body",style:d,ref:"body"},f]),[this.$slots["default"]]),b]),e("div",{attrs:{tabIndex:0,"aria-hidden":"true"},ref:"sentinelEnd",style:L})]),T=(0,v.A)(S,{afterLeave:this.onAnimateLeave});return e("transition",c()([{key:"dialog"},T]),[h||!this.destroyPopup?z:null])},getZIndexStyle:function(){var e={},t=this.$props;return void 0!==t.zIndex&&(e.zIndex=t.zIndex),e},getWrapStyle:function(){return(0,r.A)({},this.getZIndexStyle(),this.wrapStyle)},getMaskStyle:function(){return(0,r.A)({},this.getZIndexStyle(),this.maskStyle)},getMaskElement:function(){var e=this.$createElement,t=this.$props,n=void 0;if(t.mask){var r=this.getMaskTransitionName();if(n=e(p,c()([{directives:[{name:"show",value:t.visible}],style:this.getMaskStyle(),key:"mask",class:t.prefixCls+"-mask"},t.maskProps])),r){var i=(0,v.A)(r);n=e("transition",c()([{key:"mask"},i]),[n])}}return n},getMaskTransitionName:function(){var e=this.$props,t=e.maskTransitionName,n=e.maskAnimation;return!t&&n&&(t=e.prefixCls+"-"+n),t},getTransitionName:function(){var e=this.$props,t=e.transitionName,n=e.animation;return!t&&n&&(t=e.prefixCls+"-"+n),t},switchScrollingEffect:function(){var e=this.getOpenCount,t=e();if(1===t){if(C.hasOwnProperty("overflowX"))return;C={overflowX:document.body.style.overflowX,overflowY:document.body.style.overflowY,overflow:document.body.style.overflow},y(),document.body.style.overflow="hidden"}else t||(void 0!==C.overflow&&(document.body.style.overflow=C.overflow),void 0!==C.overflowX&&(document.body.style.overflowX=C.overflowX),void 0!==C.overflowY&&(document.body.style.overflowY=C.overflowY),C={},y(!0))},close:function(e){this.__emit("close",e)}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.maskClosable,r=this.visible,i=this.wrapClassName,o=this.title,a=this.wrapProps,s=this.getWrapStyle();return r&&(s.display=null),e("div",{class:t+"-root"},[this.getMaskElement(),e("div",c()([{attrs:{tabIndex:-1,role:"dialog","aria-labelledby":o?this.titleId:null},on:{keydown:this.onKeydown,click:n?this.onMaskClick:w,mouseup:n?this.onMaskMouseUp:w},class:t+"-wrap "+(i||""),ref:"wrap",style:s},a]),[this.getDialogElement()])])}},z=n(97479);function T(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.element,r=void 0===n?document.body:n,i={},o=Object.keys(e);return o.forEach(function(e){i[e]=r.style[e]}),o.forEach(function(t){r.style[t]=e[t]}),i}var O=T,H=n(48159),D=0,Y=!("undefined"!==typeof window&&window.document&&window.document.createElement),V={},P={name:"PortalWrapper",props:{wrapperClassName:h.A.string,forceRender:h.A.bool,getContainer:h.A.any,children:h.A.func,visible:h.A.bool},data:function(){var e=this.$props.visible;return D=e?D+1:D,{}},updated:function(){this.setWrapperClassName()},watch:{visible:function(e){D=e?D+1:D-1},getContainer:function(e,t){var n="function"===typeof e&&"function"===typeof t;(n?e.toString()!==t.toString():e!==t)&&this.removeCurrentContainer(!1)}},beforeDestroy:function(){var e=this.$props.visible;D=e&&D?D-1:D,this.removeCurrentContainer(e)},methods:{getParent:function(){var e=this.$props.getContainer;if(e){if("string"===typeof e)return document.querySelectorAll(e)[0];if("function"===typeof e)return e();if("object"===("undefined"===typeof e?"undefined":(0,z.A)(e))&&e instanceof window.HTMLElement)return e}return document.body},getDomContainer:function(){if(Y)return null;if(!this.container){this.container=document.createElement("div");var e=this.getParent();e&&e.appendChild(this.container)}return this.setWrapperClassName(),this.container},setWrapperClassName:function(){var e=this.$props.wrapperClassName;this.container&&e&&e!==this.container.className&&(this.container.className=e)},savePortal:function(e){this._component=e},removeCurrentContainer:function(){this.container=null,this._component=null},switchScrollingEffect:function(){1!==D||Object.keys(V).length?D||(O(V),V={},y(!0)):(y(),V=O({overflow:"hidden",overflowX:"hidden",overflowY:"hidden"}))}},render:function(){var e=arguments[0],t=this.$props,n=t.children,r=t.forceRender,i=t.visible,o=null,a={getOpenCount:function(){return D},getContainer:this.getDomContainer,switchScrollingEffect:this.switchScrollingEffect};return(r||i||this._component)&&(o=e(H.A,c()([{attrs:{getContainer:this.getDomContainer,children:n(a)}},{directives:[{name:"ant-ref",value:this.savePortal}]}]))),o}},E=b(),j={inheritAttrs:!1,props:(0,r.A)({},E,{visible:E.visible.def(!1)}),render:function(){var e=this,t=arguments[0],n=this.$props,i=n.visible,o=n.getContainer,a=n.forceRender,s={props:this.$props,attrs:this.$attrs,ref:"_component",key:"dialog",on:(0,l.WM)(this)};return!1===o?t(S,c()([s,{attrs:{getOpenCount:function(){return 2}}}]),[this.$slots["default"]]):t(P,{attrs:{visible:i,forceRender:a,getContainer:o,children:function(n){return s.props=(0,r.A)({},s.props,n),t(S,s,[e.$slots["default"]])}}})}},F=j,I=F,$=n(82160),R=n(96995),N=n(40255),W=n(49084),B=n(26997),K=n(38377),U=n(25592),q=(0,B.A)().type,G=null,J=function(e){G={x:e.pageX,y:e.pageY},setTimeout(function(){return G=null},100)};function X(){}"undefined"!==typeof window&&window.document&&window.document.documentElement&&(0,$.A)(document.documentElement,"click",J,!0);var Z=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t={prefixCls:h.A.string,visible:h.A.bool,confirmLoading:h.A.bool,title:h.A.any,closable:h.A.bool,closeIcon:h.A.any,afterClose:h.A.func.def(X),centered:h.A.bool,width:h.A.oneOfType([h.A.string,h.A.number]),footer:h.A.any,okText:h.A.any,okType:q,cancelText:h.A.any,icon:h.A.any,maskClosable:h.A.bool,forceRender:h.A.bool,okButtonProps:h.A.object,cancelButtonProps:h.A.object,destroyOnClose:h.A.bool,wrapClassName:h.A.string,maskTransitionName:h.A.string,transitionName:h.A.string,getContainer:h.A.func,zIndex:h.A.number,bodyStyle:h.A.object,maskStyle:h.A.object,mask:h.A.bool,keyboard:h.A.bool,wrapProps:h.A.object,focusTriggerAfterClose:h.A.bool,dialogStyle:h.A.object.def(function(){return{}})};return(0,l.CB)(t,e)},Q=[],ee={name:"AModal",inheritAttrs:!1,model:{prop:"visible",event:"change"},props:Z({width:520,transitionName:"zoom",maskTransitionName:"fade",confirmLoading:!1,visible:!1,okType:"primary"}),data:function(){return{sVisible:!!this.visible}},watch:{visible:function(e){this.sVisible=e}},inject:{configProvider:{default:function(){return U.f}}},methods:{handleCancel:function(e){this.$emit("cancel",e),this.$emit("change",!1)},handleOk:function(e){this.$emit("ok",e)},renderFooter:function(e){var t=this.$createElement,n=this.okType,r=this.confirmLoading,i=(0,l.v6)({on:{click:this.handleCancel}},this.cancelButtonProps||{}),o=(0,l.v6)({on:{click:this.handleOk},props:{type:n,loading:r}},this.okButtonProps||{});return t("div",[t(W.A,i,[(0,l.nu)(this,"cancelText")||e.cancelText]),t(W.A,o,[(0,l.nu)(this,"okText")||e.okText])])}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.sVisible,o=this.wrapClassName,s=this.centered,c=this.getContainer,u=this.$slots,d=this.$scopedSlots,h=this.$attrs,f=d["default"]?d["default"]():u["default"],p=this.configProvider,m=p.getPrefixCls,v=p.getPopupContainer,g=m("modal",t),y=e(K.A,{attrs:{componentName:"Modal",defaultLocale:(0,R.l)()},scopedSlots:{default:this.renderFooter}}),_=(0,l.nu)(this,"closeIcon"),b=e("span",{class:g+"-close-x"},[_||e(N.A,{class:g+"-close-icon",attrs:{type:"close"}})]),M=(0,l.nu)(this,"footer"),A=(0,l.nu)(this,"title"),w={props:(0,r.A)({},this.$props,{getContainer:void 0===c?v:c,prefixCls:g,wrapClassName:a()((0,i.A)({},g+"-centered",!!s),o),title:A,footer:void 0===M?y:M,visible:n,mousePosition:G,closeIcon:b}),on:(0,r.A)({},(0,l.WM)(this),{close:this.handleCancel}),class:(0,l.t0)(this),style:(0,l.gd)(this),attrs:h};return e(I,w,[f])}},te=n(85471),ne=(0,B.A)().type,re={type:ne,actionFn:h.A.func,closeModal:h.A.func,autoFocus:h.A.bool,buttonProps:h.A.object},ie={mixins:[m.A],props:re,data:function(){return{loading:!1}},mounted:function(){var e=this;this.autoFocus&&(this.timeoutId=setTimeout(function(){return e.$el.focus()}))},beforeDestroy:function(){clearTimeout(this.timeoutId)},methods:{onClick:function(){var e=this,t=this.actionFn,n=this.closeModal;if(t){var r=void 0;t.length?r=t(n):(r=t(),r||n()),r&&r.then&&(this.setState({loading:!0}),r.then(function(){n.apply(void 0,arguments)},function(t){console.error(t),e.setState({loading:!1})}))}else n()}},render:function(){var e=arguments[0],t=this.type,n=this.$slots,r=this.loading,i=this.buttonProps;return e(W.A,c()([{attrs:{type:t,loading:r},on:{click:this.onClick}},i]),[n["default"]])}},oe=n(36873),ae={functional:!0,render:function(e,t){var n=t.props,r=n.onCancel,o=n.onOk,s=n.close,c=n.zIndex,l=n.afterClose,u=n.visible,d=n.keyboard,h=n.centered,f=n.getContainer,p=n.maskStyle,m=n.okButtonProps,v=n.cancelButtonProps,g=n.iconType,y=void 0===g?"question-circle":g,_=n.closable,b=void 0!==_&&_;(0,oe.A)(!("iconType"in n),"Modal","The property 'iconType' is deprecated. Use the property 'icon' instead.");var M=n.icon?n.icon:y,A=n.okType||"primary",w=n.prefixCls||"ant-modal",x=w+"-confirm",k=!("okCancel"in n)||n.okCancel,L=n.width||416,C=n.style||{},S=void 0===n.mask||n.mask,z=void 0!==n.maskClosable&&n.maskClosable,T=(0,R.l)(),O=n.okText||(k?T.okText:T.justOkText),H=n.cancelText||T.cancelText,D=null!==n.autoFocusButton&&(n.autoFocusButton||"ok"),Y=n.transitionName||"zoom",V=n.maskTransitionName||"fade",P=a()(x,x+"-"+n.type,w+"-"+n.type,n["class"]),E=k&&e(ie,{attrs:{actionFn:r,closeModal:s,autoFocus:"cancel"===D,buttonProps:v}},[H]),j="string"===typeof M?e(N.A,{attrs:{type:M}}):M(e);return e(ee,{attrs:{prefixCls:w,wrapClassName:a()((0,i.A)({},x+"-centered",!!h)),visible:u,closable:b,title:"",transitionName:Y,footer:"",maskTransitionName:V,mask:S,maskClosable:z,maskStyle:p,width:L,zIndex:c,afterClose:l,keyboard:d,centered:h,getContainer:f},class:P,on:{cancel:function(e){return s({triggerCancel:!0},e)}},style:C},[e("div",{class:x+"-body-wrapper"},[e("div",{class:x+"-body"},[j,void 0===n.title?null:e("span",{class:x+"-title"},["function"===typeof n.title?n.title(e):n.title]),e("div",{class:x+"-content"},["function"===typeof n.content?n.content(e):n.content])]),e("div",{class:x+"-btns"},[E,e(ie,{attrs:{type:A,actionFn:o,closeModal:s,autoFocus:"ok"===D,buttonProps:m}},[O])])])])}},se=n(44807),ce=n(90034);function le(e){var t=document.createElement("div"),n=document.createElement("div");t.appendChild(n),document.body.appendChild(t);var i=(0,r.A)({},(0,ce.A)(e,["parentContext"]),{close:s,visible:!0}),o=null,a={props:{}};function s(){l.apply(void 0,arguments)}function c(e){i=(0,r.A)({},i,e),a.props=i}function l(){o&&t.parentNode&&(o.$destroy(),o=null,t.parentNode.removeChild(t));for(var n=arguments.length,r=Array(n),i=0;i1&&void 0!==arguments[1]?arguments[1]:c,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:l,r=void 0;switch(e){case"topLeft":r={left:0,top:t,bottom:"auto"};break;case"topRight":r={right:0,top:t,bottom:"auto"};break;case"bottomLeft":r={left:0,top:"auto",bottom:n};break;default:r={right:0,top:"auto",bottom:n};break}return r}function m(e,t){var n=e.prefixCls,r=e.placement,s=void 0===r?u:r,c=e.getContainer,l=void 0===c?d:c,f=e.top,m=e.bottom,v=e.closeIcon,g=void 0===v?h:v,y=n+"-"+s;a[y]?t(a[y]):i.A.newInstance({prefixCls:n,class:n+"-"+s,style:p(s,f,m),getContainer:l,closeIcon:function(e){var t="function"===typeof g?g(e):g,r=e("span",{class:n+"-close-x"},[t||e(o.A,{class:n+"-close-icon",attrs:{type:"close"}})]);return r}},function(e){a[y]=e,t(e)})}var v={success:"check-circle-o",info:"info-circle-o",error:"close-circle-o",warning:"exclamation-circle-o"};function g(e){var t=e.icon,n=e.type,r=e.description,i=e.message,a=e.btn,c=e.prefixCls||"ant-notification",l=c+"-notice",u=void 0===e.duration?s:e.duration,d=null;if(t)d=function(e){return e("span",{class:l+"-icon"},["function"===typeof t?t(e):t])};else if(n){var h=v[n];d=function(e){return e(o.A,{class:l+"-icon "+l+"-icon-"+n,attrs:{type:h}})}}var f=e.placement,p=e.top,g=e.bottom,y=e.getContainer,_=e.closeIcon;m({prefixCls:c,placement:f,top:p,bottom:g,getContainer:y,closeIcon:_},function(t){t.notice({content:function(e){return e("div",{class:d?l+"-with-icon":""},[d&&d(e),e("div",{class:l+"-message"},[!r&&d?e("span",{class:l+"-message-single-line-auto-margin"}):null,"function"===typeof i?i(e):i]),e("div",{class:l+"-description"},["function"===typeof r?r(e):r]),a?e("span",{class:l+"-btn"},["function"===typeof a?a(e):a]):null])},duration:u,closable:!0,onClose:e.onClose,onClick:e.onClick,key:e.key,style:e.style||{},class:e["class"]})})}var y={open:g,close:function(e){Object.keys(a).forEach(function(t){return a[t].removeNotice(e)})},config:f,destroy:function(){Object.keys(a).forEach(function(e){a[e].destroy(),delete a[e]})}};["success","info","warning","error"].forEach(function(e){y[e]=function(t){return y.open((0,r.A)({},t,{type:e}))}}),y.warn=y.warning,t.A=y},41603:function(e,t,n){"use strict";n(29229)},90895:function(e,t,n){"use strict";n.d(t,{J:function(){return f}});var r=n(44508),i=n(4718),o=n(15848),a=n(25592),s=n(40255),c=n(65847),l=n(64719),u=n(6596),d=n(38377),h=n(44807),f={backIcon:i.A.any,prefixCls:i.A.string,title:i.A.any,subTitle:i.A.any,breadcrumb:i.A.object,tags:i.A.any,footer:i.A.any,extra:i.A.any,avatar:i.A.object,ghost:i.A.bool},p=function(e,t,n,r){var i=e.$createElement;return n&&r?i(d.A,{attrs:{componentName:"PageHeader"}},[function(r){var o=r.back;return i("div",{class:t+"-back"},[i(u.A,{on:{click:function(t){e.$emit("back",t)}},class:t+"-back-button",attrs:{"aria-label":o}},[n])])}]):null},m=function(e,t){return e(c.A,t)},v=function(e,t,n){var r=n.avatar,i=(0,o.nu)(n,"title"),a=(0,o.nu)(n,"subTitle"),c=(0,o.nu)(n,"tags"),u=(0,o.nu)(n,"extra"),d=void 0!==(0,o.nu)(n,"backIcon")?(0,o.nu)(n,"backIcon"):e(s.A,{attrs:{type:"arrow-left"}}),h=n.$listeners.back,f=t+"-heading";if(i||a||c||u){var m=p(n,t,d,h);return e("div",{class:f},[m,r&&e(l.A,r),i&&e("span",{class:f+"-title"},[i]),a&&e("span",{class:f+"-sub-title"},[a]),c&&e("span",{class:f+"-tags"},[c]),u&&e("span",{class:f+"-extra"},[u])])}return null},g=function(e,t,n){return n?e("div",{class:t+"-footer"},[n]):null},y=function(e,t,n){return e("div",{class:t+"-content"},[n])},_={name:"APageHeader",props:f,inject:{configProvider:{default:function(){return a.f}}},render:function(e){var t=this.configProvider,n=t.getPrefixCls,i=t.pageHeader,a=(0,o.Oq)(this),s=a.prefixCls,c=a.breadcrumb,l=(0,o.nu)(this,"footer"),u=this.$slots["default"],d=!0;"ghost"in a?d=a.ghost:i&&"ghost"in i&&(d=i.ghost);var h=n("page-header",s),f=c&&c.props&&c.props.routes?m(e,c):null,p=[h,(0,r.A)({"has-breadcrumb":f,"has-footer":l},h+"-ghost",d)];return e("div",{class:p},[f,v(e,h,this),u&&y(e,h,u),g(e,h,l)])},install:function(e){e.use(h.A),e.component(_.name,_)}};t.A=_},70503:function(e,t,n){"use strict";n(70093),n(76181)},38223:function(e,t,n){"use strict";n.d(t,{BH:function(){return T},bv:function(){return z},Ay:function(){return O}});var r=n(5748),i=n(85505),o=n(4718),a=n(25824),s=n(15848),c={props:(0,i.A)({},a.PZ),Option:a.Ay.Option,render:function(){var e=arguments[0],t=(0,s.Oq)(this),n={props:(0,i.A)({},t,{size:"small"}),on:(0,s.WM)(this)};return e(a.Ay,n,[(0,s.Gk)(this.$slots["default"])])}},l=n(38377),u=n(44508),d=n(75189),h=n.n(d),f=n(32779),p=n(52315),m=n(46942),v=n.n(m),g={name:"Pager",props:{rootPrefixCls:o.A.string,page:o.A.number,active:o.A.bool,last:o.A.bool,locale:o.A.object,showTitle:o.A.bool,itemRender:{type:Function,default:function(){}}},methods:{handleClick:function(){this.$emit("click",this.page)},handleKeyPress:function(e){this.$emit("keypress",e,this.handleClick,this.page)}},render:function(){var e,t=arguments[0],n=this.$props,r=n.rootPrefixCls+"-item",i=v()(r,r+"-"+n.page,(e={},(0,u.A)(e,r+"-active",n.active),(0,u.A)(e,r+"-disabled",!n.page),e));return t("li",{class:i,on:{click:this.handleClick,keypress:this.handleKeyPress},attrs:{title:this.showTitle?this.page:null,tabIndex:"0"}},[this.itemRender(this.page,"page",t("a",[this.page]))])}},y={ZERO:48,NINE:57,NUMPAD_ZERO:96,NUMPAD_NINE:105,BACKSPACE:8,DELETE:46,ENTER:13,ARROW_UP:38,ARROW_DOWN:40},_={mixins:[p.A],props:{disabled:o.A.bool,changeSize:o.A.func,quickGo:o.A.func,selectComponentClass:o.A.any,current:o.A.number,pageSizeOptions:o.A.array.def(["10","20","30","40"]),pageSize:o.A.number,buildOptionText:o.A.func,locale:o.A.object,rootPrefixCls:o.A.string,selectPrefixCls:o.A.string,goButton:o.A.any},data:function(){return{goInputText:""}},methods:{getValidValue:function(){var e=this.goInputText,t=this.current;return!e||isNaN(e)?t:Number(e)},defaultBuildOptionText:function(e){return e.value+" "+this.locale.items_per_page},handleChange:function(e){var t=e.target,n=t.value,r=t.composing;e.isComposing||r||this.goInputText===n||this.setState({goInputText:n})},handleBlur:function(e){var t=this.$props,n=t.goButton,r=t.quickGo,i=t.rootPrefixCls;n||e.relatedTarget&&(e.relatedTarget.className.indexOf(i+"-prev")>=0||e.relatedTarget.className.indexOf(i+"-next")>=0)||r(this.getValidValue())},go:function(e){var t=this.goInputText;""!==t&&(e.keyCode!==y.ENTER&&"click"!==e.type||(this.quickGo(this.getValidValue()),this.setState({goInputText:""})))}},render:function(){var e=this,t=arguments[0],n=this.rootPrefixCls,r=this.locale,i=this.changeSize,o=this.quickGo,a=this.goButton,s=this.selectComponentClass,c=this.defaultBuildOptionText,l=this.selectPrefixCls,u=this.pageSize,d=this.pageSizeOptions,f=this.goInputText,p=this.disabled,m=n+"-options",v=null,g=null,y=null;if(!i&&!o)return null;if(i&&s){var _=this.buildOptionText||c,b=d.map(function(e,n){return t(s.Option,{key:n,attrs:{value:e}},[_({value:e})])});v=t(s,{attrs:{disabled:p,prefixCls:l,showSearch:!1,optionLabelProp:"children",dropdownMatchSelectWidth:!1,value:(u||d[0]).toString(),getPopupContainer:function(e){return e.parentNode}},class:m+"-size-changer",on:{change:function(t){return e.changeSize(Number(t))}}},[b])}return o&&(a&&(y="boolean"===typeof a?t("button",{attrs:{type:"button",disabled:p},on:{click:this.go,keyup:this.go}},[r.jump_to_confirm]):t("span",{on:{click:this.go,keyup:this.go}},[a])),g=t("div",{class:m+"-quick-jumper"},[r.jump_to,t("input",h()([{attrs:{disabled:p,type:"text"},domProps:{value:f},on:{input:this.handleChange,keyup:this.go,blur:this.handleBlur}},{directives:[{name:"ant-input"}]}])),r.page,y])),t("li",{class:""+m},[v,g])}},b=n(48931);function M(){}function A(e){return"number"===typeof e&&isFinite(e)&&Math.floor(e)===e}function w(e,t,n){return n}function x(e,t,n){var r=e;return"undefined"===typeof r&&(r=t.statePageSize),Math.floor((n.total-1)/r)+1}var k={name:"Pagination",mixins:[p.A],model:{prop:"current",event:"change.current"},props:{disabled:o.A.bool,prefixCls:o.A.string.def("rc-pagination"),selectPrefixCls:o.A.string.def("rc-select"),current:o.A.number,defaultCurrent:o.A.number.def(1),total:o.A.number.def(0),pageSize:o.A.number,defaultPageSize:o.A.number.def(10),hideOnSinglePage:o.A.bool.def(!1),showSizeChanger:o.A.bool.def(!1),showLessItems:o.A.bool.def(!1),selectComponentClass:o.A.any,showPrevNextJumpers:o.A.bool.def(!0),showQuickJumper:o.A.oneOfType([o.A.bool,o.A.object]).def(!1),showTitle:o.A.bool.def(!0),pageSizeOptions:o.A.arrayOf(o.A.string),buildOptionText:o.A.func,showTotal:o.A.func,simple:o.A.bool,locale:o.A.object.def(b.A),itemRender:o.A.func.def(w),prevIcon:o.A.any,nextIcon:o.A.any,jumpPrevIcon:o.A.any,jumpNextIcon:o.A.any},data:function(){var e=(0,s.Oq)(this),t=this.onChange!==M,n="current"in e;n&&!t&&console.warn("Warning: You provided a `current` prop to a Pagination component without an `onChange` handler. This will render a read-only component.");var r=this.defaultCurrent;"current"in e&&(r=this.current);var i=this.defaultPageSize;return"pageSize"in e&&(i=this.pageSize),r=Math.min(r,x(i,void 0,e)),{stateCurrent:r,stateCurrentInputValue:r,statePageSize:i}},watch:{current:function(e){this.setState({stateCurrent:e,stateCurrentInputValue:e})},pageSize:function(e){var t={},n=this.stateCurrent,r=x(e,this.$data,this.$props);n=n>r?r:n,(0,s.cK)(this,"current")||(t.stateCurrent=n,t.stateCurrentInputValue=n),t.statePageSize=e,this.setState(t)},stateCurrent:function(e,t){var n=this;this.$nextTick(function(){if(n.$refs.paginationNode){var e=n.$refs.paginationNode.querySelector("."+n.prefixCls+"-item-"+t);e&&document.activeElement===e&&e.blur()}})},total:function(){var e={},t=x(this.pageSize,this.$data,this.$props);if((0,s.cK)(this,"current")){var n=Math.min(this.current,t);e.stateCurrent=n,e.stateCurrentInputValue=n}else{var r=this.stateCurrent;r=0===r&&t>0?1:Math.min(this.stateCurrent,t),e.stateCurrent=r}this.setState(e)}},methods:{getJumpPrevPage:function(){return Math.max(1,this.stateCurrent-(this.showLessItems?3:5))},getJumpNextPage:function(){return Math.min(x(void 0,this.$data,this.$props),this.stateCurrent+(this.showLessItems?3:5))},getItemIcon:function(e){var t=this.$createElement,n=this.$props.prefixCls,r=(0,s.nu)(this,e,this.$props)||t("a",{class:n+"-item-link"});return r},getValidValue:function(e){var t=e.target.value,n=x(void 0,this.$data,this.$props),r=this.$data.stateCurrentInputValue,i=void 0;return i=""===t?t:isNaN(Number(t))?r:t>=n?n:Number(t),i},isValid:function(e){return A(e)&&e!==this.stateCurrent},shouldDisplayQuickJumper:function(){var e=this.$props,t=e.showQuickJumper,n=e.pageSize,r=e.total;return!(r<=n)&&t},handleKeyDown:function(e){e.keyCode!==y.ARROW_UP&&e.keyCode!==y.ARROW_DOWN||e.preventDefault()},handleKeyUp:function(e){if(!e.isComposing&&!e.target.composing){var t=this.getValidValue(e),n=this.stateCurrentInputValue;t!==n&&this.setState({stateCurrentInputValue:t}),e.keyCode===y.ENTER?this.handleChange(t):e.keyCode===y.ARROW_UP?this.handleChange(t-1):e.keyCode===y.ARROW_DOWN&&this.handleChange(t+1)}},changePageSize:function(e){var t=this.stateCurrent,n=t,r=x(e,this.$data,this.$props);t=t>r?r:t,0===r&&(t=this.stateCurrent),"number"===typeof e&&((0,s.cK)(this,"pageSize")||this.setState({statePageSize:e}),(0,s.cK)(this,"current")||this.setState({stateCurrent:t,stateCurrentInputValue:t})),this.$emit("update:pageSize",e),this.$emit("showSizeChange",t,e),t!==n&&this.$emit("change.current",t,e)},handleChange:function(e){var t=this.$props.disabled,n=e;if(this.isValid(n)&&!t){var r=x(void 0,this.$data,this.$props);return n>r?n=r:n<1&&(n=1),(0,s.cK)(this,"current")||this.setState({stateCurrent:n,stateCurrentInputValue:n}),this.$emit("change.current",n,this.statePageSize),this.$emit("change",n,this.statePageSize),n}return this.stateCurrent},prev:function(){this.hasPrev()&&this.handleChange(this.stateCurrent-1)},next:function(){this.hasNext()&&this.handleChange(this.stateCurrent+1)},jumpPrev:function(){this.handleChange(this.getJumpPrevPage())},jumpNext:function(){this.handleChange(this.getJumpNextPage())},hasPrev:function(){return this.stateCurrent>1},hasNext:function(){return this.stateCurrent2?n-2:0),i=2;i0?b-1:0,w=b+1=2*y&&3!==b&&(c[0]=t(g,{attrs:{locale:a,rootPrefixCls:r,page:Y,active:!1,showTitle:this.showTitle,itemRender:this.itemRender},on:{click:this.handleChange,keypress:this.runIfEnter},key:Y,class:r+"-item-after-jump-prev"}),c.unshift(l)),s-b>=2*y&&b!==s-2&&(c[c.length-1]=t(g,{attrs:{locale:a,rootPrefixCls:r,page:V,active:!1,showTitle:this.showTitle,itemRender:this.itemRender},on:{click:this.handleChange,keypress:this.runIfEnter},key:V,class:r+"-item-before-jump-next"}),c.push(d)),1!==Y&&c.unshift(f),V!==s&&c.push(p)}var j=null;this.showTotal&&(j=t("li",{class:r+"-total-text"},[this.showTotal(this.total,[0===this.total?0:(b-1)*M+1,b*M>this.total?this.total:b*M])]));var F=!this.hasPrev()||!s,I=!this.hasNext()||!s,$=this.buildOptionText||this.$scopedSlots.buildOptionText;return t("ul",{class:(e={},(0,u.A)(e,""+r,!0),(0,u.A)(e,r+"-disabled",i),e),attrs:{unselectable:"unselectable"},ref:"paginationNode"},[j,t("li",{attrs:{title:this.showTitle?a.prev_page:null,tabIndex:F?null:0,"aria-disabled":F},on:{click:this.prev,keypress:this.runIfEnterPrev},class:(F?r+"-disabled":"")+" "+r+"-prev"},[this.itemRender(A,"prev",this.getItemIcon("prevIcon"))]),c,t("li",{attrs:{title:this.showTitle?a.next_page:null,tabIndex:I?null:0,"aria-disabled":I},on:{click:this.next,keypress:this.runIfEnterNext},class:(I?r+"-disabled":"")+" "+r+"-next"},[this.itemRender(w,"next",this.getItemIcon("nextIcon"))]),t(_,{attrs:{disabled:i,locale:a,rootPrefixCls:r,selectComponentClass:this.selectComponentClass,selectPrefixCls:this.selectPrefixCls,changeSize:this.showSizeChanger?this.changePageSize:null,current:b,pageSize:M,pageSizeOptions:this.pageSizeOptions,buildOptionText:$||null,quickGo:this.shouldDisplayQuickJumper()?this.handleChange:null,goButton:v}})])}},L=n(15709),C=n(40255),S=n(25592),z=function(){return{total:o.A.number,defaultCurrent:o.A.number,disabled:o.A.bool,current:o.A.number,defaultPageSize:o.A.number,pageSize:o.A.number,hideOnSinglePage:o.A.bool,showSizeChanger:o.A.bool,pageSizeOptions:o.A.arrayOf(o.A.oneOfType([o.A.number,o.A.string])),buildOptionText:o.A.func,showSizeChange:o.A.func,showQuickJumper:o.A.oneOfType([o.A.bool,o.A.object]),showTotal:o.A.any,size:o.A.string,simple:o.A.bool,locale:o.A.object,prefixCls:o.A.string,selectPrefixCls:o.A.string,itemRender:o.A.any,role:o.A.string,showLessItems:o.A.bool}},T=function(){return(0,i.A)({},z(),{position:o.A.oneOf(["top","bottom","both"])})},O={name:"APagination",model:{prop:"current",event:"change.current"},props:(0,i.A)({},z()),inject:{configProvider:{default:function(){return S.f}}},methods:{getIconsProps:function(e){var t=this.$createElement,n=t("a",{class:e+"-item-link"},[t(C.A,{attrs:{type:"left"}})]),r=t("a",{class:e+"-item-link"},[t(C.A,{attrs:{type:"right"}})]),i=t("a",{class:e+"-item-link"},[t("div",{class:e+"-item-container"},[t(C.A,{class:e+"-item-link-icon",attrs:{type:"double-left"}}),t("span",{class:e+"-item-ellipsis"},["•••"])])]),o=t("a",{class:e+"-item-link"},[t("div",{class:e+"-item-container"},[t(C.A,{class:e+"-item-link-icon",attrs:{type:"double-right"}}),t("span",{class:e+"-item-ellipsis"},["•••"])])]);return{prevIcon:n,nextIcon:r,jumpPrevIcon:i,jumpNextIcon:o}},renderPagination:function(e){var t=this.$createElement,n=(0,s.Oq)(this),o=n.prefixCls,l=n.selectPrefixCls,u=n.buildOptionText,d=n.size,h=n.locale,f=(0,r.A)(n,["prefixCls","selectPrefixCls","buildOptionText","size","locale"]),p=this.configProvider.getPrefixCls,m=p("pagination",o),v=p("select",l),g="small"===d,y={props:(0,i.A)({prefixCls:m,selectPrefixCls:v},f,this.getIconsProps(m),{selectComponentClass:g?c:a.Ay,locale:(0,i.A)({},e,h),buildOptionText:u||this.$scopedSlots.buildOptionText}),class:{mini:g},on:(0,s.WM)(this)};return t(k,y)}},render:function(){var e=arguments[0];return e(l.A,{attrs:{componentName:"Pagination",defaultLocale:L.A},scopedSlots:{default:this.renderPagination}})}}},64168:function(e,t,n){"use strict";var r=n(38223),i=n(44807);r.Ay.install=function(e){e.use(i.A),e.component(r.Ay.name,r.Ay)},t.Ay=r.Ay},25482:function(e,t,n){"use strict";n(29229),n(22050)},50257:function(e,t,n){"use strict";var r=n(85505),i=n(90034),o=n(90500),a=n(36278),s=n(4718),c=n(15848),l=n(52315),u=n(26997),d=n(40255),h=n(49084),f=n(38377),p=n(77749),m=n(25592),v=n(44807),g=(0,a.A)(),y=(0,u.A)(),_={name:"APopconfirm",props:(0,r.A)({},g,{prefixCls:s.A.string,transitionName:s.A.string.def("zoom-big"),content:s.A.any,title:s.A.any,trigger:g.trigger.def("click"),okType:y.type.def("primary"),disabled:s.A.bool.def(!1),okText:s.A.any,cancelText:s.A.any,icon:s.A.any,okButtonProps:s.A.object,cancelButtonProps:s.A.object}),mixins:[l.A],model:{prop:"visible",event:"visibleChange"},watch:{visible:function(e){this.sVisible=e}},inject:{configProvider:{default:function(){return m.f}}},data:function(){var e=(0,c.Oq)(this),t={sVisible:!1};return"visible"in e&&(t.sVisible=e.visible),"defaultVisible"in e&&(t.sVisible=e.defaultVisible),t},methods:{onConfirm:function(e){this.setVisible(!1,e),this.$emit("confirm",e)},onCancel:function(e){this.setVisible(!1,e),this.$emit("cancel",e)},onVisibleChange:function(e){var t=this.$props.disabled;t||this.setVisible(e)},setVisible:function(e,t){(0,c.cK)(this,"visible")||this.setState({sVisible:e}),this.$emit("visibleChange",e,t)},getPopupDomNode:function(){return this.$refs.tooltip.getPopupDomNode()},renderOverlay:function(e,t){var n=this.$createElement,r=this.okType,i=this.okButtonProps,o=this.cancelButtonProps,a=(0,c.nu)(this,"icon")||n(d.A,{attrs:{type:"exclamation-circle",theme:"filled"}}),s=(0,c.v6)({props:{size:"small"},on:{click:this.onCancel}},o),l=(0,c.v6)({props:{type:r,size:"small"},on:{click:this.onConfirm}},i);return n("div",{class:e+"-inner-content"},[n("div",{class:e+"-message"},[a,n("div",{class:e+"-message-title"},[(0,c.nu)(this,"title")])]),n("div",{class:e+"-buttons"},[n(h.A,s,[(0,c.nu)(this,"cancelText")||t.cancelText]),n(h.A,l,[(0,c.nu)(this,"okText")||t.okText])])])}},render:function(){var e=this,t=arguments[0],n=(0,c.Oq)(this),a=n.prefixCls,s=this.configProvider.getPrefixCls,l=s("popover",a),u=(0,i.A)(n,["title","content","cancelText","okText"]),d={props:(0,r.A)({},u,{prefixCls:l,visible:this.sVisible}),ref:"tooltip",on:{visibleChange:this.onVisibleChange}},h=t(f.A,{attrs:{componentName:"Popconfirm",defaultLocale:p.A.Popconfirm},scopedSlots:{default:function(t){return e.renderOverlay(l,t)}}});return t(o.A,d,[t("template",{slot:"title"},[h]),this.$slots["default"]])},install:function(e){e.use(v.A),e.component(_.name,_)}};t.A=_},94891:function(e,t,n){"use strict";n(29229),n(14825),n(27902)},94261:function(e,t,n){"use strict";var r=n(85505),i=n(90500),o=n(36278),a=n(4718),s=n(15848),c=n(25592),l=n(44807),u=(0,o.A)(),d={name:"APopover",props:(0,r.A)({},u,{prefixCls:a.A.string,transitionName:a.A.string.def("zoom-big"),content:a.A.any,title:a.A.any}),model:{prop:"visible",event:"visibleChange"},inject:{configProvider:{default:function(){return c.f}}},methods:{getPopupDomNode:function(){return this.$refs.tooltip.getPopupDomNode()}},render:function(){var e=arguments[0],t=this.title,n=this.prefixCls,o=this.$slots,a=this.configProvider.getPrefixCls,c=a("popover",n),l=(0,s.Oq)(this);delete l.title,delete l.content;var u={props:(0,r.A)({},l,{prefixCls:c}),ref:"tooltip",on:(0,s.WM)(this)};return e(i.A,u,[e("template",{slot:"title"},[e("div",[(t||o.title)&&e("div",{class:c+"-title"},[(0,s.nu)(this,"title")]),e("div",{class:c+"-inner-content"},[(0,s.nu)(this,"content")])])]),this.$slots["default"]])},install:function(e){e.use(l.A),e.component(d.name,d)}};t.A=d},14825:function(e,t,n){"use strict";n(29229)},93167:function(e,t,n){"use strict";n.d(t,{A:function(){return K}});var r=n(44508),i=n(85505),o=n(46942),a=n.n(o),s=n(4718),c=n(15848),l=n(25592),u=n(40255),d=n(5748),h=n(52040);function f(e){return!e||e<0?0:e>100?100:e}var p=function(e){var t=[],n=!0,r=!1,i=void 0;try{for(var o,a=Object.entries(e)[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var s=o.value,c=(0,h.A)(s,2),l=c[0],u=c[1],d=parseFloat(l.replace(/%/g,""));if(isNaN(d))return{};t.push({key:d,value:u})}}catch(f){r=!0,i=f}finally{try{!n&&a["return"]&&a["return"]()}finally{if(r)throw i}}return t=t.sort(function(e,t){return e.key-t.key}),t.map(function(e){var t=e.key,n=e.value;return n+" "+t+"%"}).join(", ")},m=function(e){var t=e.from,n=void 0===t?"#1890ff":t,r=e.to,i=void 0===r?"#1890ff":r,o=e.direction,a=void 0===o?"to right":o,s=(0,d.A)(e,["from","to","direction"]);if(0!==Object.keys(s).length){var c=p(s);return{backgroundImage:"linear-gradient("+a+", "+c+")"}}return{backgroundImage:"linear-gradient("+a+", "+n+", "+i+")"}},v={functional:!0,render:function(e,t){var n=t.props,r=t.children,o=n.prefixCls,a=n.percent,s=n.successPercent,c=n.strokeWidth,l=n.size,u=n.strokeColor,d=n.strokeLinecap,h=void 0;h=u&&"string"!==typeof u?m(u):{background:u};var p=(0,i.A)({width:f(a)+"%",height:(c||("small"===l?6:8))+"px",background:u,borderRadius:"square"===d?0:"100px"},h),v={width:f(s)+"%",height:(c||("small"===l?6:8))+"px",borderRadius:"square"===d?0:""},g=void 0!==s?e("div",{class:o+"-success-bg",style:v}):null;return e("div",[e("div",{class:o+"-outer"},[e("div",{class:o+"-inner"},[e("div",{class:o+"-bg",style:p}),g])]),r])}},g=v,y=n(75189),_=n.n(y),b=n(85471),M=n(24415);function A(e){return{mixins:[e],updated:function(){var e=this,t=Date.now(),n=!1;Object.keys(this.paths).forEach(function(r){var i=e.paths[r];if(i){n=!0;var o=i.style;o.transitionDuration=".3s, .3s, .3s, .06s",e.prevTimeStamp&&t-e.prevTimeStamp<100&&(o.transitionDuration="0s, 0s")}}),n&&(this.prevTimeStamp=Date.now())}}}var w=A,x={percent:0,prefixCls:"rc-progress",strokeColor:"#2db7f5",strokeLinecap:"round",strokeWidth:1,trailColor:"#D9D9D9",trailWidth:1},k=s.A.oneOfType([s.A.number,s.A.string]),L={percent:s.A.oneOfType([k,s.A.arrayOf(k)]),prefixCls:s.A.string,strokeColor:s.A.oneOfType([s.A.string,s.A.arrayOf(s.A.oneOfType([s.A.string,s.A.object])),s.A.object]),strokeLinecap:s.A.oneOf(["butt","round","square"]),strokeWidth:k,trailColor:s.A.string,trailWidth:k},C=(0,i.A)({},L,{gapPosition:s.A.oneOf(["top","bottom","left","right"]),gapDegree:s.A.oneOfType([s.A.number,s.A.string,s.A.bool])}),S=(0,i.A)({},x,{gapPosition:"top"});b.Ay.use(M.A,{name:"ant-ref"});var z=0;function T(e){return+e.replace("%","")}function O(e){return Array.isArray(e)?e:[e]}function H(e,t,n,r){var i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,o=arguments[5],a=50-r/2,s=0,c=-a,l=0,u=-2*a;switch(o){case"left":s=-a,c=0,l=2*a,u=0;break;case"right":s=a,c=0,l=-2*a,u=0;break;case"bottom":c=a,u=2*a;break;default:}var d="M 50,50 m "+s+","+c+"\n a "+a+","+a+" 0 1 1 "+l+","+-u+"\n a "+a+","+a+" 0 1 1 "+-l+","+u,h=2*Math.PI*a,f={stroke:n,strokeDasharray:t/100*(h-i)+"px "+h+"px",strokeDashoffset:"-"+(i/2+e/100*(h-i))+"px",transition:"stroke-dashoffset .3s ease 0s, stroke-dasharray .3s ease 0s, stroke .3s, stroke-width .06s ease .3s, opacity .3s ease 0s"};return{pathString:d,pathStyle:f}}var D={props:(0,c.CB)(C,S),created:function(){this.paths={},this.gradientId=z,z+=1},methods:{getStokeList:function(){var e=this,t=this.$createElement,n=this.$props,r=n.prefixCls,i=n.percent,o=n.strokeColor,a=n.strokeWidth,s=n.strokeLinecap,c=n.gapDegree,l=n.gapPosition,u=O(i),d=O(o),h=0;return u.map(function(n,i){var o=d[i]||d[d.length-1],u="[object Object]"===Object.prototype.toString.call(o)?"url(#"+r+"-gradient-"+e.gradientId+")":"",f=H(h,n,o,a,c,l),p=f.pathString,m=f.pathStyle;h+=n;var v={key:i,attrs:{d:p,stroke:u,"stroke-linecap":s,"stroke-width":a,opacity:0===n?0:1,"fill-opacity":"0"},class:r+"-circle-path",style:m,directives:[{name:"ant-ref",value:function(t){e.paths[i]=t}}]};return t("path",v)})}},render:function(){var e=arguments[0],t=this.$props,n=t.prefixCls,r=t.strokeWidth,i=t.trailWidth,o=t.gapDegree,a=t.gapPosition,s=t.trailColor,c=t.strokeLinecap,l=t.strokeColor,u=(0,d.A)(t,["prefixCls","strokeWidth","trailWidth","gapDegree","gapPosition","trailColor","strokeLinecap","strokeColor"]),h=H(0,100,s,r,o,a),f=h.pathString,p=h.pathStyle;delete u.percent;var m=O(l),v=m.find(function(e){return"[object Object]"===Object.prototype.toString.call(e)}),g={attrs:{d:f,stroke:s,"stroke-linecap":c,"stroke-width":i||r,"fill-opacity":"0"},class:n+"-circle-trail",style:p};return e("svg",_()([{class:n+"-circle",attrs:{viewBox:"0 0 100 100"}},u]),[v&&e("defs",[e("linearGradient",{attrs:{id:n+"-gradient-"+this.gradientId,x1:"100%",y1:"0%",x2:"0%",y2:"0%"}},[Object.keys(v).sort(function(e,t){return T(e)-T(t)}).map(function(t,n){return e("stop",{key:n,attrs:{offset:t,"stop-color":v[t]}})})])]),e("path",g),this.getStokeList().reverse()])}},Y=w(D),V={normal:"#108ee9",exception:"#ff5500",success:"#87d068"};function P(e){var t=e.percent,n=e.successPercent,r=f(t);if(!n)return r;var i=f(n);return[n,f(r-i)]}function E(e){var t=e.progressStatus,n=e.successPercent,r=e.strokeColor,i=r||V[t];return n?[V.success,i]:i}var j={functional:!0,render:function(e,t){var n,i=t.props,o=t.children,a=i.prefixCls,s=i.width,c=i.strokeWidth,l=i.trailColor,u=i.strokeLinecap,d=i.gapPosition,h=i.gapDegree,f=i.type,p=s||120,m={width:"number"===typeof p?p+"px":p,height:"number"===typeof p?p+"px":p,fontSize:.15*p+6},v=c||6,g=d||"dashboard"===f&&"bottom"||"top",y=h||"dashboard"===f&&75,_=E(i),b="[object Object]"===Object.prototype.toString.call(_),M=(n={},(0,r.A)(n,a+"-inner",!0),(0,r.A)(n,a+"-circle-gradient",b),n);return e("div",{class:M,style:m},[e(Y,{attrs:{percent:P(i),strokeWidth:v,trailWidth:v,strokeColor:_,strokeLinecap:u,trailColor:l,prefixCls:a,gapDegree:y,gapPosition:g}}),o])}},F=j,I=["normal","exception","active","success"],$=s.A.oneOf(["line","circle","dashboard"]),R=s.A.oneOf(["default","small"]),N={prefixCls:s.A.string,type:$,percent:s.A.number,successPercent:s.A.number,format:s.A.func,status:s.A.oneOf(I),showInfo:s.A.bool,strokeWidth:s.A.number,strokeLinecap:s.A.oneOf(["butt","round","square"]),strokeColor:s.A.oneOfType([s.A.string,s.A.object]),trailColor:s.A.string,width:s.A.number,gapDegree:s.A.number,gapPosition:s.A.oneOf(["top","bottom","left","right"]),size:R},W={name:"AProgress",props:(0,c.CB)(N,{type:"line",percent:0,showInfo:!0,trailColor:"#f3f3f3",size:"default",gapDegree:0,strokeLinecap:"round"}),inject:{configProvider:{default:function(){return l.f}}},methods:{getPercentNumber:function(){var e=this.$props,t=e.successPercent,n=e.percent,r=void 0===n?0:n;return parseInt(void 0!==t?t.toString():r.toString(),10)},getProgressStatus:function(){var e=this.$props.status;return I.indexOf(e)<0&&this.getPercentNumber()>=100?"success":e||"normal"},renderProcessInfo:function(e,t){var n=this.$createElement,r=this.$props,i=r.showInfo,o=r.format,a=r.type,s=r.percent,c=r.successPercent;if(!i)return null;var l=void 0,d=o||this.$scopedSlots.format||function(e){return e+"%"},h="circle"===a||"dashboard"===a?"":"-circle";return o||this.$scopedSlots.format||"exception"!==t&&"success"!==t?l=d(f(s),f(c)):"exception"===t?l=n(u.A,{attrs:{type:"close"+h,theme:"line"===a?"filled":"outlined"}}):"success"===t&&(l=n(u.A,{attrs:{type:"check"+h,theme:"line"===a?"filled":"outlined"}})),n("span",{class:e+"-text",attrs:{title:"string"===typeof l?l:void 0}},[l])}},render:function(){var e,t=arguments[0],n=(0,c.Oq)(this),o=n.prefixCls,s=n.size,l=n.type,u=n.showInfo,d=this.configProvider.getPrefixCls,h=d("progress",o),f=this.getProgressStatus(),p=this.renderProcessInfo(h,f),m=void 0;if("line"===l){var v={props:(0,i.A)({},n,{prefixCls:h})};m=t(g,v,[p])}else if("circle"===l||"dashboard"===l){var y={props:(0,i.A)({},n,{prefixCls:h,progressStatus:f})};m=t(F,y,[p])}var _=a()(h,(e={},(0,r.A)(e,h+"-"+("dashboard"===l?"circle":l),!0),(0,r.A)(e,h+"-status-"+f,!0),(0,r.A)(e,h+"-show-info",u),(0,r.A)(e,h+"-"+s,s),e)),b={on:(0,c.WM)(this),class:_};return t("div",b,[m])}},B=n(44807);W.install=function(e){e.use(B.A),e.component(W.name,W)};var K=W},4863:function(e,t,n){"use strict";n(29229)},63301:function(e,t,n){"use strict";n.d(t,{Ay:function(){return b}});var r=n(75189),i=n.n(r),o=n(44508),a=n(85505),s=n(5748),c=n(4718),l=n(68145),u=n(46942),d=n.n(u),h=n(15848),f=n(25592);function p(){}var m={name:"ARadio",model:{prop:"checked"},props:{prefixCls:c.A.string,defaultChecked:Boolean,checked:{type:Boolean,default:void 0},disabled:Boolean,isGroup:Boolean,value:c.A.any,name:String,id:String,autoFocus:Boolean,type:c.A.string.def("radio")},inject:{radioGroupContext:{default:void 0},configProvider:{default:function(){return f.f}}},methods:{focus:function(){this.$refs.vcCheckbox.focus()},blur:function(){this.$refs.vcCheckbox.blur()},handleChange:function(e){var t=e.target.checked;this.$emit("input",t),this.$emit("change",e)},onChange:function(e){this.$emit("change",e),this.radioGroupContext&&this.radioGroupContext.onRadioChange&&this.radioGroupContext.onRadioChange(e)}},render:function(){var e,t=arguments[0],n=this.$slots,r=this.radioGroupContext,c=(0,h.Oq)(this),u=n["default"],f=(0,h.WM)(this),m=f.mouseenter,v=void 0===m?p:m,g=f.mouseleave,y=void 0===g?p:g,_=(0,s.A)(f,["mouseenter","mouseleave"]),b=c.prefixCls,M=(0,s.A)(c,["prefixCls"]),A=this.configProvider.getPrefixCls,w=A("radio",b),x={props:(0,a.A)({},M,{prefixCls:w}),on:_,attrs:(0,h.Z0)(this)};r?(x.props.name=r.name,x.on.change=this.onChange,x.props.checked=c.value===r.stateValue,x.props.disabled=c.disabled||r.disabled):x.on.change=this.handleChange;var k=d()((e={},(0,o.A)(e,w+"-wrapper",!0),(0,o.A)(e,w+"-wrapper-checked",x.props.checked),(0,o.A)(e,w+"-wrapper-disabled",x.props.disabled),e));return t("label",{class:k,on:{mouseenter:v,mouseleave:y}},[t(l.A,i()([x,{ref:"vcCheckbox"}])),void 0!==u?t("span",[u]):null])}};function v(){}var g={name:"ARadioGroup",model:{prop:"value"},props:{prefixCls:c.A.string,defaultValue:c.A.any,value:c.A.any,size:{default:"default",validator:function(e){return["large","default","small"].includes(e)}},options:{default:function(){return[]},type:Array},disabled:Boolean,name:String,buttonStyle:c.A.string.def("outline")},data:function(){var e=this.value,t=this.defaultValue;return this.updatingValue=!1,{stateValue:void 0===e?t:e}},provide:function(){return{radioGroupContext:this}},inject:{configProvider:{default:function(){return f.f}}},computed:{radioOptions:function(){var e=this.disabled;return this.options.map(function(t){return"string"===typeof t?{label:t,value:t}:(0,a.A)({},t,{disabled:void 0===t.disabled?e:t.disabled})})},classes:function(){var e,t=this.prefixCls,n=this.size;return e={},(0,o.A)(e,""+t,!0),(0,o.A)(e,t+"-"+n,n),e}},watch:{value:function(e){this.updatingValue=!1,this.stateValue=e}},methods:{onRadioChange:function(e){var t=this,n=this.stateValue,r=e.target.value;(0,h.cK)(this,"value")||(this.stateValue=r),this.updatingValue||r===n||(this.updatingValue=!0,this.$emit("input",r),this.$emit("change",e)),this.$nextTick(function(){t.updatingValue=!1})}},render:function(){var e=this,t=arguments[0],n=(0,h.WM)(this),r=n.mouseenter,i=void 0===r?v:r,a=n.mouseleave,s=void 0===a?v:a,c=(0,h.Oq)(this),l=c.prefixCls,u=c.options,f=c.buttonStyle,p=this.configProvider.getPrefixCls,g=p("radio",l),y=g+"-group",_=d()(y,y+"-"+f,(0,o.A)({},y+"-"+c.size,c.size)),b=(0,h.Gk)(this.$slots["default"]);return u&&u.length>0&&(b=u.map(function(n){return"string"===typeof n?t(m,{key:n,attrs:{prefixCls:g,disabled:c.disabled,value:n,checked:e.stateValue===n}},[n]):t(m,{key:"radio-group-value-options-"+n.value,attrs:{prefixCls:g,disabled:n.disabled||c.disabled,value:n.value,checked:e.stateValue===n.value}},[n.label])})),t("div",{class:_,on:{mouseenter:i,mouseleave:s}},[b])}},y={name:"ARadioButton",props:(0,a.A)({},m.props),inject:{radioGroupContext:{default:void 0},configProvider:{default:function(){return f.f}}},render:function(){var e=arguments[0],t=(0,h.Oq)(this),n=t.prefixCls,r=(0,s.A)(t,["prefixCls"]),i=this.configProvider.getPrefixCls,o=i("radio-button",n),c={props:(0,a.A)({},r,{prefixCls:o}),on:(0,h.WM)(this)};return this.radioGroupContext&&(c.on.change=this.radioGroupContext.onRadioChange,c.props.checked=this.$props.value===this.radioGroupContext.stateValue,c.props.disabled=this.$props.disabled||this.radioGroupContext.disabled),e(m,c,[this.$slots["default"]])}},_=n(44807);m.Group=g,m.Button=y,m.install=function(e){e.use(_.A),e.component(m.name,m),e.component(m.Group.name,m.Group),e.component(m.Button.name,m.Button)};var b=m},29775:function(e,t,n){"use strict";n(29229)},30692:function(e,t,n){"use strict";n.d(t,{A:function(){return S}});var r=n(85505),i=n(5748),o=n(90034),a=n(4718),s=n(15848),c=n(25592),l=n(46942),u=n.n(l),d=n(11207),h=n(52315);function f(e,t){var n=t?e.pageYOffset:e.pageXOffset,r=t?"scrollTop":"scrollLeft";if("number"!==typeof n){var i=e.document;n=i.documentElement[r],"number"!==typeof n&&(n=i.body[r])}return n}function p(e){var t=void 0,n=void 0,r=e.ownerDocument,i=r.body,o=r&&r.documentElement,a=e.getBoundingClientRect();return t=a.left,n=a.top,t-=o.clientLeft||i.clientLeft||0,n-=o.clientTop||i.clientTop||0,{left:t,top:n}}function m(e){var t=p(e),n=e.ownerDocument,r=n.defaultView||n.parentWindow;return t.left+=f(r),t.left}function v(){}var g={name:"Star",mixins:[h.A],props:{value:a.A.number,index:a.A.number,prefixCls:a.A.string,allowHalf:a.A.bool,disabled:a.A.bool,character:a.A.any,characterRender:a.A.func,focused:a.A.bool,count:a.A.number},methods:{onHover:function(e){var t=this.index;this.$emit("hover",e,t)},onClick:function(e){var t=this.index;this.$emit("click",e,t)},onKeyDown:function(e){var t=this.$props.index;13===e.keyCode&&this.__emit("click",e,t)},getClassName:function(){var e=this.prefixCls,t=this.index,n=this.value,r=this.allowHalf,i=this.focused,o=t+1,a=e;return 0===n&&0===t&&i?a+=" "+e+"-focused":r&&n+.5===o?(a+=" "+e+"-half "+e+"-active",i&&(a+=" "+e+"-focused")):(a+=o<=n?" "+e+"-full":" "+e+"-zero",o===n&&i&&(a+=" "+e+"-focused")),a}},render:function(){var e=arguments[0],t=this.onHover,n=this.onClick,r=this.onKeyDown,i=this.disabled,o=this.prefixCls,a=this.characterRender,c=this.index,l=this.count,u=this.value,d=(0,s.nu)(this,"character"),h=e("li",{class:this.getClassName()},[e("div",{on:{click:i?v:n,keydown:i?v:r,mousemove:i?v:t},attrs:{role:"radio","aria-checked":u>c?"true":"false","aria-posinset":c+1,"aria-setsize":l,tabIndex:0}},[e("div",{class:o+"-first"},[d]),e("div",{class:o+"-second"},[d])])]);return a&&(h=a(h,this.$props)),h}},y={disabled:a.A.bool,value:a.A.number,defaultValue:a.A.number,count:a.A.number,allowHalf:a.A.bool,allowClear:a.A.bool,prefixCls:a.A.string,character:a.A.any,characterRender:a.A.func,tabIndex:a.A.number,autoFocus:a.A.bool};function _(){}var b={name:"Rate",mixins:[h.A],model:{prop:"value",event:"change"},props:(0,s.CB)(y,{defaultValue:0,count:5,allowHalf:!1,allowClear:!0,prefixCls:"rc-rate",tabIndex:0,character:"★"}),data:function(){var e=this.value;return(0,s.cK)(this,"value")||(e=this.defaultValue),{sValue:e,focused:!1,cleanedValue:null,hoverValue:void 0}},watch:{value:function(e){this.setState({sValue:e})}},mounted:function(){var e=this;this.$nextTick(function(){e.autoFocus&&!e.disabled&&e.focus()})},methods:{onHover:function(e,t){var n=this.getStarValue(t,e.pageX),r=this.cleanedValue;n!==r&&this.setState({hoverValue:n,cleanedValue:null}),this.$emit("hoverChange",n)},onMouseLeave:function(){this.setState({hoverValue:void 0,cleanedValue:null}),this.$emit("hoverChange",void 0)},onClick:function(e,t){var n=this.allowClear,r=this.sValue,i=this.getStarValue(t,e.pageX),o=!1;n&&(o=i===r),this.onMouseLeave(!0),this.changeValue(o?0:i),this.setState({cleanedValue:o?i:null})},onFocus:function(){this.setState({focused:!0}),this.$emit("focus")},onBlur:function(){this.setState({focused:!1}),this.$emit("blur")},onKeyDown:function(e){var t=e.keyCode,n=this.count,r=this.allowHalf,i=this.sValue;t===d.A.RIGHT&&i0&&(i-=r?.5:1,this.changeValue(i),e.preventDefault()),this.$emit("keydown",e)},getStarDOM:function(e){return this.$refs["stars"+e].$el},getStarValue:function(e,t){var n=e+1;if(this.allowHalf){var r=this.getStarDOM(e),i=m(r),o=r.clientWidth;t-i0)return!0;return!1}function Q(e,t){var n=new RegExp("["+t.join()+"]");return e.split(n).filter(function(e){return e})}function ee(e,t){var n=(0,w.Ts)(t);if(n.disabled)return!1;var r=E(t,this.optionFilterProp);return r=r.length&&r[0].text?r[0].text:String(r),r.toLowerCase().indexOf(e.toLowerCase())>-1}function te(e,t){if(!R(t)&&!j(t)&&"string"!==typeof e)throw new Error("Invalid `value` of type `"+("undefined"===typeof e?"undefined":(0,Y.A)(e))+"` supplied to Option, expected `string` when `tags/combobox` is `true`.")}function ne(e,t){return function(n){e[t]=n}}function re(){var e=(new Date).getTime(),t="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){var n=(e+16*Math.random())%16|0;return e=Math.floor(e/16),("x"===t?n:7&n|8).toString(16)});return t}var ie={name:"DropdownMenu",mixins:[L.A],props:{ariaId:u.A.string,defaultActiveFirstOption:u.A.bool,value:u.A.any,dropdownMenuStyle:u.A.object,multiple:u.A.bool,prefixCls:u.A.string,menuItems:u.A.any,inputValue:u.A.string,visible:u.A.bool,backfillValue:u.A.any,firstActiveValue:u.A.string,menuItemSelectedIcon:u.A.any},watch:{visible:function(e){var t=this;e?this.$nextTick(function(){t.scrollActiveItemToView()}):this.lastVisible=e}},created:function(){this.rafInstance=null,this.lastInputValue=this.$props.inputValue,this.lastVisible=!1},mounted:function(){var e=this;this.$nextTick(function(){e.scrollActiveItemToView()}),this.lastVisible=this.$props.visible},updated:function(){var e=this.$props;this.lastVisible=e.visible,this.lastInputValue=e.inputValue,this.prevVisible=this.visible},beforeDestroy:function(){this.rafInstance&&T().cancel(this.rafInstance)},methods:{scrollActiveItemToView:function(){var e=this,t=this.firstActiveItem&&this.firstActiveItem.$el,n=this.$props,r=n.value,i=n.visible,o=n.firstActiveValue;if(t&&i){var a={onlyScrollIfNeeded:!0};r&&0!==r.length||!o||(a.alignWithTop=!0),this.rafInstance=T()(function(){(0,D.A)(t,e.$refs.menuRef.$el,a)})}},renderMenu:function(){var e=this,t=this.$createElement,n=this.$props,r=n.menuItems,i=n.defaultActiveFirstOption,o=n.value,a=n.prefixCls,c=n.multiple,l=n.inputValue,u=n.firstActiveValue,d=n.dropdownMenuStyle,h=n.backfillValue,f=n.visible,p=(0,w.nu)(this,"menuItemSelectedIcon"),m=(0,w.WM)(this),v=m.menuDeselect,g=m.menuSelect,y=m.popupScroll;if(r&&r.length){var _=q(r,o),b={props:{multiple:c,itemIcon:c?p:null,selectedKeys:_,prefixCls:a+"-menu"},on:{},style:d,ref:"menuRef",attrs:{role:"listbox"}};y&&(b.on.scroll=y),c?(b.on.deselect=v,b.on.select=g):b.on.click=g;var M={},A=i,x=r;if(_.length||u){n.visible&&!this.lastVisible?M.activeKey=_[0]||u:f||(_[0]&&(A=!1),M.activeKey=void 0);var L=!1,C=function(t){return!L&&-1!==_.indexOf(t.key)||!L&&!_.length&&-1!==u.indexOf(t.key)?(L=!0,(0,k.Ob)(t,{directives:[{name:"ant-ref",value:function(t){e.firstActiveItem=t}}]})):t};x=r.map(function(e){if((0,w.xr)(e).isMenuItemGroup){var t=e.componentOptions.children.map(C);return(0,k.Ob)(e,{children:t})}return C(e)})}else this.firstActiveItem=null;var S=o&&o[o.length-1];return l===this.lastInputValue||S&&S===h||(M.activeKey=""),b.props=(0,s.A)({},M,b.props,{defaultActiveFirst:A}),t(H.Ay,b,[x])}return null}},render:function(){var e=arguments[0],t=this.renderMenu(),n=(0,w.WM)(this),r=n.popupFocus,i=n.popupScroll;return t?e("div",{style:{overflow:"auto",transform:"translateZ(0)"},attrs:{id:this.$props.ariaId,tabIndex:"-1"},on:{focus:r,mousedown:B,scroll:i},ref:"menuContainer"},[t]):null}},oe={bottomLeft:{points:["tl","bl"],offset:[0,4],overflow:{adjustX:0,adjustY:1}},topLeft:{points:["bl","tl"],offset:[0,-4],overflow:{adjustX:0,adjustY:1}}},ae={name:"SelectTrigger",mixins:[L.A],props:{dropdownMatchSelectWidth:u.A.bool,defaultActiveFirstOption:u.A.bool,dropdownAlign:u.A.object,visible:u.A.bool,disabled:u.A.bool,showSearch:u.A.bool,dropdownClassName:u.A.string,dropdownStyle:u.A.object,dropdownMenuStyle:u.A.object,multiple:u.A.bool,inputValue:u.A.string,filterOption:u.A.any,empty:u.A.bool,options:u.A.any,prefixCls:u.A.string,popupClassName:u.A.string,value:u.A.array,showAction:u.A.arrayOf(u.A.string),combobox:u.A.bool,animation:u.A.string,transitionName:u.A.string,getPopupContainer:u.A.func,backfillValue:u.A.any,menuItemSelectedIcon:u.A.any,dropdownRender:u.A.func,ariaId:u.A.string},data:function(){return{dropdownWidth:0}},created:function(){this.rafInstance=null,this.saveDropdownMenuRef=ne(this,"dropdownMenuRef"),this.saveTriggerRef=ne(this,"triggerRef")},mounted:function(){var e=this;this.$nextTick(function(){e.setDropdownWidth()})},updated:function(){var e=this;this.$nextTick(function(){e.setDropdownWidth()})},beforeDestroy:function(){this.cancelRafInstance()},methods:{setDropdownWidth:function(){var e=this;this.cancelRafInstance(),this.rafInstance=T()(function(){var t=e.$el.offsetWidth;t!==e.dropdownWidth&&e.setState({dropdownWidth:t})})},cancelRafInstance:function(){this.rafInstance&&T().cancel(this.rafInstance)},getInnerMenu:function(){return this.dropdownMenuRef&&this.dropdownMenuRef.$refs.menuRef},getPopupDOMNode:function(){return this.triggerRef.getPopupDomNode()},getDropdownElement:function(e){var t=this.$createElement,n=this.value,r=this.firstActiveValue,i=this.defaultActiveFirstOption,o=this.dropdownMenuStyle,a=this.getDropdownPrefixCls,c=this.backfillValue,l=this.menuItemSelectedIcon,u=(0,w.WM)(this),d=u.menuSelect,h=u.menuDeselect,f=u.popupScroll,p=this.$props,m=p.dropdownRender,v=p.ariaId,g={props:(0,s.A)({},e.props,{ariaId:v,prefixCls:a(),value:n,firstActiveValue:r,defaultActiveFirstOption:i,dropdownMenuStyle:o,backfillValue:c,menuItemSelectedIcon:l}),on:(0,s.A)({},e.on,{menuSelect:d,menuDeselect:h,popupScroll:f}),directives:[{name:"ant-ref",value:this.saveDropdownMenuRef}]},y=t(ie,g);return m?m(y,p):null},getDropdownTransitionName:function(){var e=this.$props,t=e.transitionName;return!t&&e.animation&&(t=this.getDropdownPrefixCls()+"-"+e.animation),t},getDropdownPrefixCls:function(){return this.prefixCls+"-dropdown"}},render:function(){var e,t=arguments[0],n=this.$props,r=this.$slots,i=n.multiple,a=n.visible,c=n.inputValue,l=n.dropdownAlign,u=n.disabled,d=n.showSearch,h=n.dropdownClassName,f=n.dropdownStyle,p=n.dropdownMatchSelectWidth,v=n.options,g=n.getPopupContainer,y=n.showAction,_=n.empty,b=(0,w.WM)(this),M=b.mouseenter,A=b.mouseleave,x=b.popupFocus,k=b.dropdownVisibleChange,L=this.getDropdownPrefixCls(),C=(e={},(0,o.A)(e,h,!!h),(0,o.A)(e,L+"--"+(i?"multiple":"single"),1),(0,o.A)(e,L+"--empty",_),e),S=this.getDropdownElement({props:{menuItems:v,multiple:i,inputValue:c,visible:a},on:{popupFocus:x}}),z=void 0;z=u?[]:R(n)&&!d?["click"]:["blur"];var T=(0,s.A)({},f),H=p?"width":"minWidth";this.dropdownWidth&&(T[H]=this.dropdownWidth+"px");var D={props:(0,s.A)({},n,{showAction:u?[]:y,hideAction:z,ref:"triggerRef",popupPlacement:"bottomLeft",builtinPlacements:oe,prefixCls:L,popupTransitionName:this.getDropdownTransitionName(),popupAlign:l,popupVisible:a,getPopupContainer:g,popupClassName:m()(C),popupStyle:T}),on:{popupVisibleChange:k},directives:[{name:"ant-ref",value:this.saveTriggerRef}]};return M&&(D.on.mouseenter=M),A&&(D.on.mouseleave=A),t(O.A,D,[r["default"],t("template",{slot:"popup"},[S])])}},se={defaultActiveFirstOption:u.A.bool,multiple:u.A.bool,filterOption:u.A.any,showSearch:u.A.bool,disabled:u.A.bool,allowClear:u.A.bool,showArrow:u.A.bool,tags:u.A.bool,prefixCls:u.A.string,transitionName:u.A.string,optionLabelProp:u.A.string,optionFilterProp:u.A.string,animation:u.A.string,choiceTransitionName:u.A.string,open:u.A.bool,defaultOpen:u.A.bool,placeholder:u.A.any,labelInValue:u.A.bool,loading:u.A.bool,value:u.A.any,defaultValue:u.A.any,dropdownStyle:u.A.object,dropdownClassName:u.A.string,maxTagTextLength:u.A.number,maxTagCount:u.A.number,maxTagPlaceholder:u.A.any,tokenSeparators:u.A.arrayOf(u.A.string),getInputElement:u.A.func,showAction:u.A.arrayOf(u.A.string),autoFocus:u.A.bool,getPopupContainer:u.A.func,clearIcon:u.A.any,inputIcon:u.A.any,removeIcon:u.A.any,menuItemSelectedIcon:u.A.any,dropdownRender:u.A.func,mode:u.A.oneOf(["multiple","tags"]),backfill:u.A.bool,dropdownAlign:u.A.any,dropdownMatchSelectWidth:u.A.bool,dropdownMenuStyle:u.A.object,notFoundContent:u.A.oneOfType([String,Number]),tabIndex:u.A.oneOfType([String,Number])},ce=n(17948),le=n(51382);A.Ay.use(S.A,{name:"ant-ref"});var ue="RC_SELECT_EMPTY_VALUE_KEY",de=function(){return null};function he(e){return!e||null===e.offsetParent}function fe(){for(var e=arguments.length,t=Array(e),n=0;n0&&void 0!==arguments[0]?arguments[0]:[],n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return t.forEach(function(t){t.data&&void 0===t.data.slot&&((0,w.xr)(t).isSelectOptGroup?e.getOptionsFromChildren(t.componentOptions.children,n):n.push(t))}),n},getInputValueForCombobox:function(e,t,n){var r=[];if("value"in e&&!n&&(r=N(e.value)),"defaultValue"in e&&n&&(r=N(e.defaultValue)),!r.length)return"";r=r[0];var i=r;return e.labelInValue?i=r.label:t[W(r)]&&(i=t[W(r)].label),void 0===i&&(i=""),i},getLabelFromOption:function(e,t){return E(t,e.optionLabelProp)},getOptionsInfoFromProps:function(e,t){var n=this,r=this.getOptionsFromChildren(this.$props.children),i={};if(r.forEach(function(t){var r=P(t);i[W(r)]={option:t,value:r,label:n.getLabelFromOption(e,t),title:(0,w.IV)(t,"title"),disabled:(0,w.IV)(t,"disabled")}}),t){var o=t._optionsInfo,a=t._value;a&&a.forEach(function(e){var t=W(e);i[t]||void 0===o[t]||(i[t]=o[t])})}return i},getValueFromProps:function(e,t){var n=[];return"value"in e&&!t&&(n=N(e.value)),"defaultValue"in e&&t&&(n=N(e.defaultValue)),e.labelInValue&&(n=n.map(function(e){return e.key})),n},onInputChange:function(e){var t=e.target,n=t.value,r=t.composing,i=this.$data._inputValue,o=void 0===i?"":i;if(e.isComposing||r||o===n)this.setState({_mirrorInputValue:n});else{var a=this.$props.tokenSeparators;if(I(this.$props)&&a.length&&Z(n,a)){var s=this.getValueByInput(n);return void 0!==s&&this.fireChange(s),this.setOpenState(!1,{needFocus:!0}),void this.setInputValue("",!1)}this.setInputValue(n),this.setState({_open:!0}),F(this.$props)&&this.fireChange([n])}},onDropdownVisibleChange:function(e){e&&!this._focused&&(this.clearBlurTime(),this.timeoutFocus(),this._focused=!0,this.updateFocusClassName()),this.setOpenState(e)},onKeyDown:function(e){var t=this.$data._open,n=this.$props.disabled;if(!n){var r=e.keyCode;t&&!this.getInputDOMNode()?this.onInputKeydown(e):r===f.A.ENTER||r===f.A.DOWN?(r!==f.A.ENTER||I(this.$props)?t||this.setOpenState(!0):this.maybeFocus(!0),e.preventDefault()):r===f.A.SPACE&&(t||(this.setOpenState(!0),e.preventDefault()))}},onInputKeydown:function(e){var t=this,n=this.$props,r=n.disabled,i=n.combobox,o=n.defaultActiveFirstOption;if(!r){var a=this.$data,s=this.getRealOpenState(a),c=e.keyCode;if(!I(this.$props)||e.target.value||c!==f.A.BACKSPACE){if(c===f.A.DOWN){if(!a._open)return this.openIfHasChildren(),e.preventDefault(),void e.stopPropagation()}else if(c===f.A.ENTER&&a._open)!s&&i||e.preventDefault(),s&&i&&!1===o&&(this.comboboxTimer=setTimeout(function(){t.setOpenState(!1)}));else if(c===f.A.ESC)return void(a._open&&(this.setOpenState(!1),e.preventDefault(),e.stopPropagation()));if(s&&this.selectTriggerRef){var l=this.selectTriggerRef.getInnerMenu();l&&l.onKeyDown(e,this.handleBackfill)&&(e.preventDefault(),e.stopPropagation())}}else{e.preventDefault();var u=a._value;u.length&&this.removeSelected(u[u.length-1])}}},onMenuSelect:function(e){var t=e.item;if(t){var n=this.$data._value,r=this.$props,i=P(t),o=n[n.length-1],a=!1;if(I(r)?-1!==K(n,i)?a=!0:n=n.concat([i]):F(r)||void 0===o||o!==i||i===this.$data._backfillValue?(n=[i],this.setOpenState(!1,{needFocus:!0,fireSearch:!1})):(this.setOpenState(!1,{needFocus:!0,fireSearch:!1}),a=!0),a||this.fireChange(n),!a){this.fireSelect(i);var s=F(r)?E(t,r.optionLabelProp):"";r.autoClearSearchValue&&this.setInputValue(s,!1)}}},onMenuDeselect:function(e){var t=e.item,n=e.domEvent;if("keydown"!==n.type||n.keyCode!==f.A.ENTER)"click"===n.type&&this.removeSelected(P(t)),this.autoClearSearchValue&&this.setInputValue("");else{var r=t.$el;he(r)||this.removeSelected(P(t))}},onArrowClick:function(e){e.stopPropagation(),e.preventDefault(),this.clearBlurTime(),this.disabled||this.setOpenState(!this.$data._open,{needFocus:!this.$data._open})},onPlaceholderClick:function(){this.getInputDOMNode()&&this.getInputDOMNode()&&this.getInputDOMNode().focus()},onPopupFocus:function(){this.maybeFocus(!0,!0)},onClearSelection:function(e){var t=this.$props,n=this.$data;if(!t.disabled){var r=n._inputValue,i=n._value;e.stopPropagation(),(r||i.length)&&(i.length&&this.fireChange([]),this.setOpenState(!1,{needFocus:!0}),r&&this.setInputValue(""))}},onChoiceAnimationLeave:function(){this.forcePopupAlign()},getOptionInfoBySingleValue:function(e,t){var n=this.$createElement,r=void 0;if(t=t||this.$data._optionsInfo,t[W(e)]&&(r=t[W(e)]),r)return r;var i=e;if(this.$props.labelInValue){var o=U(this.$props.value,e),a=U(this.$props.defaultValue,e);void 0!==o?i=o:void 0!==a&&(i=a)}var s={option:n(d.A,{attrs:{value:e},key:e},[e]),value:e,label:i};return s},getOptionBySingleValue:function(e){var t=this.getOptionInfoBySingleValue(e),n=t.option;return n},getOptionsBySingleValue:function(e){var t=this;return e.map(function(e){return t.getOptionBySingleValue(e)})},getValueByLabel:function(e){var t=this;if(void 0===e)return null;var n=null;return Object.keys(this.$data._optionsInfo).forEach(function(r){var i=t.$data._optionsInfo[r],o=i.disabled;if(!o){var a=N(i.label);a&&a.join("")===e&&(n=i.value)}}),n},getVLBySingleValue:function(e){return this.$props.labelInValue?{key:e,label:this.getLabelBySingleValue(e)}:e},getVLForOnChange:function(e){var t=this,n=e;return void 0!==n?(n=this.labelInValue?n.map(function(e){return{key:e,label:t.getLabelBySingleValue(e)}}):n.map(function(e){return e}),I(this.$props)?n:n[0]):n},getLabelBySingleValue:function(e,t){var n=this.getOptionInfoBySingleValue(e,t),r=n.label;return r},getDropdownContainer:function(){return this.dropdownContainer||(this.dropdownContainer=document.createElement("div"),document.body.appendChild(this.dropdownContainer)),this.dropdownContainer},getPlaceholderElement:function(){var e=this.$createElement,t=this.$props,n=this.$data,r=!1;n._mirrorInputValue&&(r=!0);var i=n._value;i.length&&(r=!0),!n._mirrorInputValue&&F(t)&&1===i.length&&n._value&&!n._value[0]&&(r=!1);var o=t.placeholder;if(o){var a={on:{mousedown:B,click:this.onPlaceholderClick},attrs:J,style:(0,s.A)({display:r?"none":"block"},G),class:t.prefixCls+"-selection__placeholder"};return e("div",a,[o])}return null},inputClick:function(e){this.$data._open?(this.clearBlurTime(),e.stopPropagation()):this._focused=!1},inputBlur:function(e){var t=this,n=e.relatedTarget||document.activeElement;if((le.lT||le.UP)&&(e.relatedTarget===this.$refs.arrow||n&&this.selectTriggerRef&&this.selectTriggerRef.getInnerMenu()&&this.selectTriggerRef.getInnerMenu().$el===n||(0,ce.A)(e.target,n)))return e.target.focus(),void e.preventDefault();this.clearBlurTime(),this.disabled?e.preventDefault():this.blurTimer=setTimeout(function(){t._focused=!1,t.updateFocusClassName();var e=t.$props,n=t.$data._value,r=t.$data._inputValue;if(R(e)&&e.showSearch&&r&&e.defaultActiveFirstOption){var i=t._options||[];if(i.length){var o=X(i);o&&(n=[P(o)],t.fireChange(n))}}else if(I(e)&&r){t._mouseDown?t.setInputValue(""):(t.$data._inputValue="",t.getInputDOMNode&&t.getInputDOMNode()&&(t.getInputDOMNode().value=""));var a=t.getValueByInput(r);void 0!==a&&(n=a,t.fireChange(n))}if(I(e)&&t._mouseDown)return t.maybeFocus(!0,!0),void(t._mouseDown=!1);t.setOpenState(!1),t.$emit("blur",t.getVLForOnChange(n))},200)},inputFocus:function(e){if(this.$props.disabled)e.preventDefault();else{this.clearBlurTime();var t=this.getInputDOMNode();t&&e.target===this.rootRef||($(this.$props)||e.target!==t)&&(this._focused||(this._focused=!0,this.updateFocusClassName(),I(this.$props)&&this._mouseDown||this.timeoutFocus()))}},_getInputElement:function(){var e=this.$createElement,t=this.$props,n=this.$data,r=n._inputValue,a=n._mirrorInputValue,c=(0,w.Z0)(this),l=e("input",{attrs:{id:c.id,autoComplete:"off"}}),u=t.getInputElement?t.getInputElement():l,d=m()((0,w.t0)(u),(0,o.A)({},t.prefixCls+"-search__field",!0)),h=(0,w.kQ)(u);return u.data=u.data||{},e("div",{class:t.prefixCls+"-search__field__wrap",on:{click:this.inputClick}},[(0,k.Ob)(u,{props:{disabled:t.disabled,value:r},attrs:(0,s.A)({},u.data.attrs||{},{disabled:t.disabled,value:r}),domProps:{value:r},class:d,directives:[{name:"ant-ref",value:this.saveInputRef},{name:"ant-input"}],on:{input:this.onInputChange,keydown:fe(this.onInputKeydown,h.keydown,(0,w.WM)(this).inputKeydown),focus:fe(this.inputFocus,h.focus),blur:fe(this.inputBlur,h.blur)}}),e("span",i()([{directives:[{name:"ant-ref",value:this.saveInputMirrorRef}]},{class:t.prefixCls+"-search__field__mirror"}]),[a," "])])},getInputDOMNode:function(){return this.topCtrlRef?this.topCtrlRef.querySelector("input,textarea,div[contentEditable]"):this.inputRef},getInputMirrorDOMNode:function(){return this.inputMirrorRef},getPopupDOMNode:function(){if(this.selectTriggerRef)return this.selectTriggerRef.getPopupDOMNode()},getPopupMenuComponent:function(){if(this.selectTriggerRef)return this.selectTriggerRef.getInnerMenu()},setOpenState:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=this.$props,i=this.$data,o=n.needFocus,a=n.fireSearch;if(i._open!==e){this.__emit("dropdownVisibleChange",e);var s={_open:e,_backfillValue:""};!e&&R(r)&&r.showSearch&&this.setInputValue("",a),e||this.maybeFocus(e,!!o),this.setState(s,function(){e&&t.maybeFocus(e,!!o)})}else this.maybeFocus(e,!!o)},setInputValue:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];e!==this.$data._inputValue&&(this.setState({_inputValue:e},this.forcePopupAlign),t&&this.$emit("search",e))},getValueByInput:function(e){var t=this,n=this.$props,r=n.multiple,i=n.tokenSeparators,o=this.$data._value,a=!1;return Q(e,i).forEach(function(e){var n=[e];if(r){var i=t.getValueByLabel(e);i&&-1===K(o,i)&&(o=o.concat(i),a=!0,t.fireSelect(i))}else-1===K(o,e)&&(o=o.concat(n),a=!0,t.fireSelect(e))}),a?o:void 0},getRealOpenState:function(e){var t=this.$props.open;if("boolean"===typeof t)return t;var n=(e||this.$data)._open,r=this._options||[];return!$(this.$props)&&this.$props.showSearch||n&&!r.length&&(n=!1),n},focus:function(){R(this.$props)&&this.selectionRef?this.selectionRef.focus():this.getInputDOMNode()&&this.getInputDOMNode().focus()},blur:function(){R(this.$props)&&this.selectionRef?this.selectionRef.blur():this.getInputDOMNode()&&this.getInputDOMNode().blur()},markMouseDown:function(){this._mouseDown=!0},markMouseLeave:function(){this._mouseDown=!1},handleBackfill:function(e){if(this.backfill&&(R(this.$props)||F(this.$props))){var t=P(e);F(this.$props)&&this.setInputValue(t,!1),this.setState({_value:[t],_backfillValue:t})}},_filterOption:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:ee,r=this.$data,i=r._value,o=r._backfillValue,a=i[i.length-1];if(!e||a&&a===o)return!0;var s=this.$props.filterOption;return(0,w.cK)(this,"filterOption")?!0===s&&(s=n.bind(this)):s=n.bind(this),!s||("function"===typeof s?s.call(this,e,t):!(0,w.IV)(t,"disabled"))},timeoutFocus:function(){var e=this;this.focusTimer&&this.clearFocusTime(),this.focusTimer=window.setTimeout(function(){e.$emit("focus")},10)},clearFocusTime:function(){this.focusTimer&&(clearTimeout(this.focusTimer),this.focusTimer=null)},clearBlurTime:function(){this.blurTimer&&(clearTimeout(this.blurTimer),this.blurTimer=null)},clearComboboxTime:function(){this.comboboxTimer&&(clearTimeout(this.comboboxTimer),this.comboboxTimer=null)},updateFocusClassName:function(){var e=this.rootRef,t=this.prefixCls;this._focused?g()(e).add(t+"-focused"):g()(e).remove(t+"-focused")},maybeFocus:function(e,t){if(t||e){var n=this.getInputDOMNode(),r=document,i=r.activeElement;n&&(e||$(this.$props))?i!==n&&(n.focus(),this._focused=!0):i!==this.selectionRef&&this.selectionRef&&(this.selectionRef.focus(),this._focused=!0)}},removeSelected:function(e,t){var n=this.$props;if(!n.disabled&&!this.isChildDisabled(e)){t&&t.stopPropagation&&t.stopPropagation();var r=this.$data._value,i=r.filter(function(t){return t!==e}),o=I(n);if(o){var a=e;n.labelInValue&&(a={key:e,label:this.getLabelBySingleValue(e)}),this.$emit("deselect",a,this.getOptionBySingleValue(e))}this.fireChange(i)}},openIfHasChildren:function(){var e=this.$props;(e.children&&e.children.length||R(e))&&this.setOpenState(!0)},fireSelect:function(e){this.$emit("select",this.getVLBySingleValue(e),this.getOptionBySingleValue(e))},fireChange:function(e){(0,w.cK)(this,"value")||this.setState({_value:e},this.forcePopupAlign);var t=this.getVLForOnChange(e),n=this.getOptionsBySingleValue(e);this._valueOptions=n,this.$emit("change",t,I(this.$props)?n:n[0])},isChildDisabled:function(e){return(this.$props.children||[]).some(function(t){var n=P(t);return n===e&&(0,w.IV)(t,"disabled")})},forcePopupAlign:function(){this.$data._open&&this.selectTriggerRef&&this.selectTriggerRef.triggerRef&&this.selectTriggerRef.triggerRef.forcePopupAlign()},renderFilterOptions:function(){var e=this.$createElement,t=this.$data._inputValue,n=this.$props,r=n.children,o=n.tags,a=n.notFoundContent,c=[],l=[],u=!1,d=this.renderFilterOptionsFromChildren(r,l,c);if(o){var h=this.$data._value;if(h=h.filter(function(e){return-1===l.indexOf(e)&&(!t||String(e).indexOf(String(t))>-1)}),h.sort(function(e,t){return e.length-t.length}),h.forEach(function(t){var n=t,r=(0,s.A)({},J,{role:"option"}),o=e(y.A,i()([{style:G},{attrs:r},{attrs:{value:n},key:n}]),[n]);d.push(o),c.push(o)}),t&&c.every(function(e){return P(e)!==t})){var f={attrs:J,key:t,props:{value:t,role:"option"},style:G};d.unshift(e(y.A,f,[t]))}}if(!d.length&&a){u=!0;var p={attrs:J,key:"NOT_FOUND",props:{value:"NOT_FOUND",disabled:!0,role:"option"},style:G};d=[e(y.A,p,[a])]}return{empty:u,options:d}},renderFilterOptionsFromChildren:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=this,n=arguments[1],r=arguments[2],o=this.$createElement,a=[],c=this.$props,l=this.$data._inputValue,u=c.tags;return e.forEach(function(e){if(e.data&&void 0===e.data.slot)if((0,w.xr)(e).isSelectOptGroup){var c=(0,w.nu)(e,"label"),d=e.key;d||"string"!==typeof c?!c&&d&&(c=d):d=c;var h=(0,w.Sk)(e)["default"];if(h="function"===typeof h?h():h,l&&t._filterOption(l,e)){var f=h.map(function(e){var t=P(e)||e.key;return o(y.A,i()([{key:t,attrs:{value:t}},e.data]),[e.componentOptions.children])});a.push(o(_.A,{key:d,attrs:{title:c},class:(0,w.t0)(e)},[f]))}else{var p=t.renderFilterOptionsFromChildren(h,n,r);p.length&&a.push(o(_.A,i()([{key:d,attrs:{title:c}},e.data]),[p]))}}else{M()((0,w.xr)(e).isSelectOption,"the children of `Select` should be `Select.Option` or `Select.OptGroup`, instead of `"+((0,w.xr)(e).name||(0,w.xr)(e))+"`.");var m=P(e);if(te(m,t.$props),t._filterOption(l,e)){var v={attrs:(0,s.A)({},J,(0,w.Z0)(e)),key:m,props:(0,s.A)({value:m},(0,w.Ts)(e),{role:"option"}),style:G,on:(0,w.kQ)(e),class:(0,w.t0)(e)},g=o(y.A,v,[e.componentOptions.children]);a.push(g),r.push(g)}u&&n.push(m)}}),a},renderTopControlNode:function(){var e=this,t=this.$createElement,n=this.$props,r=this.$data,o=r._value,a=r._inputValue,c=r._open,l=n.choiceTransitionName,u=n.prefixCls,d=n.maxTagTextLength,h=n.maxTagCount,f=n.maxTagPlaceholder,p=n.showSearch,m=(0,w.nu)(this,"removeIcon"),v=u+"-selection__rendered",g=null;if(R(n)){var y=null;if(o.length){var _=!1,b=1;p&&c?(_=!a,_&&(b=.4)):_=!0;var M=o[0],A=this.getOptionInfoBySingleValue(M),k=A.label,L=A.title;y=t("div",{key:"value",class:u+"-selection-selected-value",attrs:{title:V(L||k)},style:{display:_?"block":"none",opacity:b}},[k])}g=p?[y,t("div",{class:u+"-search "+u+"-search--inline",key:"input",style:{display:c?"block":"none"}},[this._getInputElement()])]:[y]}else{var C=[],S=o,z=void 0;if(void 0!==h&&o.length>h){S=S.slice(0,h);var T=this.getVLForOnChange(o.slice(h,o.length)),O="+ "+(o.length-h)+" ...";f&&(O="function"===typeof f?f(T):f);var H=(0,s.A)({},J,{role:"presentation",title:V(O)});z=t("li",i()([{style:G},{attrs:H},{on:{mousedown:B},class:u+"-selection__choice "+u+"-selection__choice__disabled",key:"maxTagPlaceholder"}]),[t("div",{class:u+"-selection__choice__content"},[O])])}if(I(n)&&(C=S.map(function(n){var r=e.getOptionInfoBySingleValue(n),o=r.label,a=r.title||o;d&&"string"===typeof o&&o.length>d&&(o=o.slice(0,d)+"...");var c=e.isChildDisabled(n),l=c?u+"-selection__choice "+u+"-selection__choice__disabled":u+"-selection__choice",h=(0,s.A)({},J,{role:"presentation",title:V(a)});return t("li",i()([{style:G},{attrs:h},{on:{mousedown:B},class:l,key:n||ue}]),[t("div",{class:u+"-selection__choice__content"},[o]),c?null:t("span",{on:{click:function(t){e.removeSelected(n,t)}},class:u+"-selection__choice__remove"},[m||t("i",{class:u+"-selection__choice__remove-icon"},["×"])])])})),z&&C.push(z),C.push(t("li",{class:u+"-search "+u+"-search--inline",key:"__input"},[this._getInputElement()])),I(n)&&l){var D=(0,x.A)(l,{tag:"ul",afterLeave:this.onChoiceAnimationLeave});g=t("transition-group",D,[C])}else g=t("ul",[C])}return t("div",i()([{class:v},{directives:[{name:"ant-ref",value:this.saveTopCtrlRef}]},{on:{click:this.topCtrlContainerClick}}]),[this.getPlaceholderElement(),g])},renderArrow:function(e){var t=this.$createElement,n=this.$props,r=n.showArrow,o=void 0===r?!e:r,a=n.loading,s=n.prefixCls,c=(0,w.nu)(this,"inputIcon");if(!o&&!a)return null;var l=t("i",a?{class:s+"-arrow-loading"}:{class:s+"-arrow-icon"});return t("span",i()([{key:"arrow",class:s+"-arrow",style:G},{attrs:J},{on:{click:this.onArrowClick},ref:"arrow"}]),[c||l])},topCtrlContainerClick:function(e){this.$data._open&&!R(this.$props)&&e.stopPropagation()},renderClear:function(){var e=this.$createElement,t=this.$props,n=t.prefixCls,r=t.allowClear,o=this.$data,a=o._value,s=o._inputValue,c=(0,w.nu)(this,"clearIcon"),l=e("span",i()([{key:"clear",class:n+"-selection__clear",on:{mousedown:B},style:G},{attrs:J},{on:{click:this.onClearSelection}}]),[c||e("i",{class:n+"-selection__clear-icon"},["×"])]);return r?F(this.$props)?s?l:null:s||a.length?l:null:null},selectionRefClick:function(){if(!this.disabled){var e=this.getInputDOMNode();this._focused&&this.$data._open?(this.setOpenState(!1,!1),e&&e.blur()):(this.clearBlurTime(),this.setOpenState(!0,!0),e&&e.focus())}},selectionRefFocus:function(e){this._focused||this.disabled||$(this.$props)?e.preventDefault():(this._focused=!0,this.updateFocusClassName(),this.$emit("focus"))},selectionRefBlur:function(e){$(this.$props)?e.preventDefault():this.inputBlur(e)}},render:function(){var e,t=arguments[0],n=this.$props,r=I(n),a=n.showArrow,s=void 0===a||a,c=this.$data,l=n.disabled,u=n.prefixCls,d=n.loading,h=this.renderTopControlNode(),f=this.$data,p=f._open,v=f._inputValue,g=f._value;if(p){var y=this.renderFilterOptions();this._empty=y.empty,this._options=y.options}var _=this.getRealOpenState(),b=this._empty,M=this._options||[],A=(0,w.WM)(this),x=A.mouseenter,k=void 0===x?de:x,L=A.mouseleave,C=void 0===L?de:L,S=A.popupScroll,z=void 0===S?de:S,T={props:{},attrs:{role:"combobox","aria-autocomplete":"list","aria-haspopup":"true","aria-expanded":_,"aria-controls":this.$data._ariaId},on:{},class:u+"-selection "+u+"-selection--"+(r?"multiple":"single"),key:"selection"},O={attrs:{tabIndex:-1}};$(n)||(O.attrs.tabIndex=n.disabled?-1:n.tabIndex);var H=(e={},(0,o.A)(e,u,!0),(0,o.A)(e,u+"-open",p),(0,o.A)(e,u+"-focused",p||!!this._focused),(0,o.A)(e,u+"-combobox",F(n)),(0,o.A)(e,u+"-disabled",l),(0,o.A)(e,u+"-enabled",!l),(0,o.A)(e,u+"-allow-clear",!!n.allowClear),(0,o.A)(e,u+"-no-arrow",!s),(0,o.A)(e,u+"-loading",!!d),e);return t(ae,i()([{attrs:{dropdownAlign:n.dropdownAlign,dropdownClassName:n.dropdownClassName,dropdownMatchSelectWidth:n.dropdownMatchSelectWidth,defaultActiveFirstOption:n.defaultActiveFirstOption,dropdownMenuStyle:n.dropdownMenuStyle,transitionName:n.transitionName,animation:n.animation,prefixCls:n.prefixCls,dropdownStyle:n.dropdownStyle,combobox:n.combobox,showSearch:n.showSearch,options:M,empty:b,multiple:r,disabled:l,visible:_,inputValue:v,value:g,backfillValue:c._backfillValue,firstActiveValue:n.firstActiveValue,getPopupContainer:n.getPopupContainer,showAction:n.showAction,menuItemSelectedIcon:(0,w.nu)(this,"menuItemSelectedIcon")},on:{dropdownVisibleChange:this.onDropdownVisibleChange,menuSelect:this.onMenuSelect,menuDeselect:this.onMenuDeselect,popupScroll:z,popupFocus:this.onPopupFocus,mouseenter:k,mouseleave:C}},{directives:[{name:"ant-ref",value:this.saveSelectTriggerRef}]},{attrs:{dropdownRender:n.dropdownRender,ariaId:this.$data._ariaId}}]),[t("div",i()([{directives:[{name:"ant-ref",value:fe(this.saveRootRef,this.saveSelectionRef)}]},{style:(0,w.gd)(this),class:m()(H),on:{mousedown:this.markMouseDown,mouseup:this.markMouseLeave,mouseout:this.markMouseLeave}},O,{on:{blur:this.selectionRefBlur,focus:this.selectionRefFocus,click:this.selectionRefClick,keydown:$(n)?de:this.onKeyDown}}]),[t("div",T,[h,this.renderClear(),this.renderArrow(!!r)])])])}},me=((0,C.A)(pe),n(25592)),ve=n(40255),ge=n(44807),ye=function(){return{prefixCls:u.A.string,size:u.A.oneOf(["small","large","default"]),showAction:u.A.oneOfType([u.A.string,u.A.arrayOf(String)]),notFoundContent:u.A.any,transitionName:u.A.string,choiceTransitionName:u.A.string,showSearch:u.A.bool,allowClear:u.A.bool,disabled:u.A.bool,tabIndex:u.A.number,placeholder:u.A.any,defaultActiveFirstOption:u.A.bool,dropdownClassName:u.A.string,dropdownStyle:u.A.any,dropdownMenuStyle:u.A.any,dropdownMatchSelectWidth:u.A.bool,filterOption:u.A.oneOfType([u.A.bool,u.A.func]),autoFocus:u.A.bool,backfill:u.A.bool,showArrow:u.A.bool,getPopupContainer:u.A.func,open:u.A.bool,defaultOpen:u.A.bool,autoClearSearchValue:u.A.bool,dropdownRender:u.A.func,loading:u.A.bool}},_e=u.A.shape({key:u.A.oneOfType([u.A.string,u.A.number])}).loose,be=u.A.oneOfType([u.A.string,u.A.number,u.A.arrayOf(u.A.oneOfType([_e,u.A.string,u.A.number])),_e]),Me=(0,s.A)({},ye(),{value:be,defaultValue:be,mode:u.A.string,optionLabelProp:u.A.string,firstActiveValue:u.A.oneOfType([String,u.A.arrayOf(String)]),maxTagCount:u.A.number,maxTagPlaceholder:u.A.any,maxTagTextLength:u.A.number,dropdownMatchSelectWidth:u.A.bool,optionFilterProp:u.A.string,labelInValue:u.A.boolean,getPopupContainer:u.A.func,tokenSeparators:u.A.arrayOf(u.A.string),getInputElement:u.A.func,options:u.A.array,suffixIcon:u.A.any,removeIcon:u.A.any,clearIcon:u.A.any,menuItemSelectedIcon:u.A.any}),Ae={prefixCls:u.A.string,size:u.A.oneOf(["default","large","small"]),notFoundContent:u.A.any,showSearch:u.A.bool,optionLabelProp:u.A.string,transitionName:u.A.string,choiceTransitionName:u.A.string},we="SECRET_COMBOBOX_MODE_DO_NOT_USE",xe={SECRET_COMBOBOX_MODE_DO_NOT_USE:we,Option:(0,s.A)({},d.A,{name:"ASelectOption"}),OptGroup:(0,s.A)({},h.A,{name:"ASelectOptGroup"}),name:"ASelect",props:(0,s.A)({},Me,{showSearch:u.A.bool.def(!1),transitionName:u.A.string.def("slide-up"),choiceTransitionName:u.A.string.def("zoom")}),propTypes:Ae,model:{prop:"value",event:"change"},provide:function(){return{savePopupRef:this.savePopupRef}},inject:{configProvider:{default:function(){return me.f}}},created:function(){(0,c.A)("combobox"!==this.$props.mode,"Select","The combobox mode of Select is deprecated,it will be removed in next major version,please use AutoComplete instead")},methods:{getNotFoundContent:function(e){var t=this.$createElement,n=(0,w.nu)(this,"notFoundContent");return void 0!==n?n:this.isCombobox()?null:e(t,"Select")},savePopupRef:function(e){this.popupRef=e},focus:function(){this.$refs.vcSelect.focus()},blur:function(){this.$refs.vcSelect.blur()},isCombobox:function(){var e=this.mode;return"combobox"===e||e===we},renderSuffixIcon:function(e){var t=this.$createElement,n=this.$props.loading,r=(0,w.nu)(this,"suffixIcon");return r=Array.isArray(r)?r[0]:r,r?(0,w.zO)(r)?(0,k.Ob)(r,{class:e+"-arrow-icon"}):r:t(ve.A,n?{attrs:{type:"loading"}}:{attrs:{type:"down"},class:e+"-arrow-icon"})}},render:function(){var e,t=arguments[0],n=(0,w.Oq)(this),r=n.prefixCls,c=n.size,u=n.mode,h=n.options,f=n.getPopupContainer,p=n.showArrow,m=(0,a.A)(n,["prefixCls","size","mode","options","getPopupContainer","showArrow"]),v=this.configProvider.getPrefixCls,g=this.configProvider.renderEmpty,y=v("select",r),_=this.configProvider.getPopupContainer,b=(0,w.nu)(this,"removeIcon");b=Array.isArray(b)?b[0]:b;var M=(0,w.nu)(this,"clearIcon");M=Array.isArray(M)?M[0]:M;var A=(0,w.nu)(this,"menuItemSelectedIcon");A=Array.isArray(A)?A[0]:A;var x=(0,l.A)(m,["inputIcon","removeIcon","clearIcon","suffixIcon","menuItemSelectedIcon"]),L=(e={},(0,o.A)(e,y+"-lg","large"===c),(0,o.A)(e,y+"-sm","small"===c),(0,o.A)(e,y+"-show-arrow",p),e),C=this.$props.optionLabelProp;this.isCombobox()&&(C=C||"value");var S={multiple:"multiple"===u,tags:"tags"===u,combobox:this.isCombobox()},z=b&&((0,w.zO)(b)?(0,k.Ob)(b,{class:y+"-remove-icon"}):b)||t(ve.A,{attrs:{type:"close"},class:y+"-remove-icon"}),T=M&&((0,w.zO)(M)?(0,k.Ob)(M,{class:y+"-clear-icon"}):M)||t(ve.A,{attrs:{type:"close-circle",theme:"filled"},class:y+"-clear-icon"}),O=A&&((0,w.zO)(A)?(0,k.Ob)(A,{class:y+"-selected-icon"}):A)||t(ve.A,{attrs:{type:"check"},class:y+"-selected-icon"}),H={props:(0,s.A)({inputIcon:this.renderSuffixIcon(y),removeIcon:z,clearIcon:T,menuItemSelectedIcon:O,showArrow:p},x,S,{prefixCls:y,optionLabelProp:C||"children",notFoundContent:this.getNotFoundContent(g),maxTagPlaceholder:(0,w.nu)(this,"maxTagPlaceholder"),placeholder:(0,w.nu)(this,"placeholder"),children:h?h.map(function(e){var n=e.key,r=e.label,o=void 0===r?e.title:r,s=e.on,c=e["class"],l=e.style,u=(0,a.A)(e,["key","label","on","class","style"]);return t(d.A,i()([{key:n},{props:u,on:s,class:c,style:l}]),[o])}):(0,w.Gk)(this.$slots["default"]),__propsSymbol__:Symbol(),dropdownRender:(0,w.nu)(this,"dropdownRender",{},!1),getPopupContainer:f||_}),on:(0,w.WM)(this),class:L,ref:"vcSelect"};return t(pe,H)},install:function(e){e.use(ge.A),e.component(xe.name,xe),e.component(xe.Option.name,xe.Option),e.component(xe.OptGroup.name,xe.OptGroup)}},ke=xe},22050:function(e,t,n){"use strict";n(29229),n(93693)},68263:function(e,t,n){"use strict";n.d(t,{A:function(){return H}});var r=n(44508),i=n(85505),o=n(97479),a=n(46942),s=n.n(a),c=n(4718),l=n(15848),u=n(25592),d={prefixCls:c.A.string,size:c.A.oneOfType([c.A.oneOf(["large","small","default"]),c.A.number]),shape:c.A.oneOf(["circle","square"])},h=c.A.shape(d).loose,f={props:(0,l.CB)(d,{size:"large"}),render:function(){var e,t,n=arguments[0],i=this.$props,o=i.prefixCls,a=i.size,c=i.shape,l=s()((e={},(0,r.A)(e,o+"-lg","large"===a),(0,r.A)(e,o+"-sm","small"===a),e)),u=s()((t={},(0,r.A)(t,o+"-circle","circle"===c),(0,r.A)(t,o+"-square","square"===c),t)),d="number"===typeof a?{width:a+"px",height:a+"px",lineHeight:a+"px"}:{};return n("span",{class:s()(o,l,u),style:d})}},p=f,m={prefixCls:c.A.string,width:c.A.oneOfType([c.A.number,c.A.string])},v=c.A.shape(m),g={props:m,render:function(){var e=arguments[0],t=this.$props,n=t.prefixCls,r=t.width,i="number"===typeof r?r+"px":r;return e("h3",{class:n,style:{width:i}})}},y=g,_=n(32779),b=c.A.oneOfType([c.A.number,c.A.string]),M={prefixCls:c.A.string,width:c.A.oneOfType([b,c.A.arrayOf(b)]),rows:c.A.number},A=c.A.shape(M),w={props:M,methods:{getWidth:function(e){var t=this.width,n=this.rows,r=void 0===n?2:n;return Array.isArray(t)?t[e]:r-1===e?t:void 0}},render:function(){var e=this,t=arguments[0],n=this.$props,r=n.prefixCls,i=n.rows,o=[].concat((0,_.A)(Array(i))).map(function(n,r){var i=e.getWidth(r);return t("li",{key:r,style:{width:"number"===typeof i?i+"px":i}})});return t("ul",{class:r},[o])}},x=w,k=n(44807),L={active:c.A.bool,loading:c.A.bool,prefixCls:c.A.string,children:c.A.any,avatar:c.A.oneOfType([c.A.string,h,c.A.bool]),title:c.A.oneOfType([c.A.bool,c.A.string,v]),paragraph:c.A.oneOfType([c.A.bool,c.A.string,A])};function C(e){return e&&"object"===("undefined"===typeof e?"undefined":(0,o.A)(e))?e:{}}function S(e,t){return e&&!t?{shape:"square"}:{shape:"circle"}}function z(e,t){return!e&&t?{width:"38%"}:e&&t?{width:"50%"}:{}}function T(e,t){var n={};return e&&t||(n.width="61%"),n.rows=!e&&t?3:2,n}var O={name:"ASkeleton",props:(0,l.CB)(L,{avatar:!1,title:!0,paragraph:!0}),inject:{configProvider:{default:function(){return u.f}}},render:function(){var e=arguments[0],t=this.$props,n=t.prefixCls,o=t.loading,a=t.avatar,c=t.title,u=t.paragraph,d=t.active,h=this.configProvider.getPrefixCls,f=h("skeleton",n);if(o||!(0,l.cK)(this,"loading")){var m,v=!!a||""===a,g=!!c,_=!!u,b=void 0;if(v){var M={props:(0,i.A)({prefixCls:f+"-avatar"},S(g,_),C(a))};b=e("div",{class:f+"-header"},[e(p,M)])}var A=void 0;if(g||_){var w=void 0;if(g){var k={props:(0,i.A)({prefixCls:f+"-title"},z(v,_),C(c))};w=e(y,k)}var L=void 0;if(_){var O={props:(0,i.A)({prefixCls:f+"-paragraph"},T(v,g),C(u))};L=e(x,O)}A=e("div",{class:f+"-content"},[w,L])}var H=s()(f,(m={},(0,r.A)(m,f+"-with-avatar",v),(0,r.A)(m,f+"-active",d),m));return e("div",{class:H},[b,A])}var D=this.$slots["default"];return D&&1===D.length?D[0]:e("span",[D])},install:function(e){e.use(k.A),e.component(O.name,O)}},H=O},15731:function(e,t,n){"use strict";n(29229)},8442:function(e,t,n){"use strict";var r=n(75189),i=n.n(r),o=n(44508),a=n(4718),s=n(15848),c=n(25592),l=a.A.oneOfType([a.A.number,a.A.oneOf(["small","middle","large"])]),u={small:8,middle:16,large:24},d={prefixCls:a.A.string,size:l,direction:a.A.oneOf(["horizontal","vertical"]),align:a.A.oneOf(["start","end","center","baseline"])},h={functional:!0,name:"ASpace",props:(0,s.CB)(d,{size:"small",direction:"horizontal"}),inject:{configProvider:{default:function(){return c.f}}},render:function(e,t){var n,r=t.prefixCls,a=t.injections.configProvider,c=t.children,l=t.props,d=l.align,h=l.size,f=l.direction,p=a.getPrefixCls,m=p("space",r),v=(0,s.Gk)(c),g=v.length;if(0===g)return null;var y=void 0===d&&"horizontal"===f?"center":d,_=[(n={},(0,o.A)(n,m,!0),(0,o.A)(n,m+"-"+f,!0),(0,o.A)(n,m+"-align-"+y,y),n)];t.data["class"]&&_.push(t.data["class"]);var b=m+"-item",M="marginRight";return e("div",i()([t.data,{class:_}]),[v.map(function(t,n){return e("div",{class:b,key:b+"-"+n,style:n===g-1?{}:(0,o.A)({},"vertical"===f?"marginBottom":M,"string"===typeof h?u[h]+"px":h+"px")},[t])})])},install:function(e){e.component(h.name,h)}};t.Ay=h},33272:function(e,t,n){"use strict";n(29229)},64258:function(e,t,n){"use strict";n.d(t,{Lt:function(){return y},N0:function(){return m}});var r=n(75189),i=n.n(r),o=n(44508),a=n(5748),s=n(38221),c=n.n(s),l=n(4718),u=n(52315),d=n(15848),h=n(51927),f=n(25592),p=l.A.oneOf(["small","default","large"]),m=function(){return{prefixCls:l.A.string,spinning:l.A.bool,size:p,wrapperClassName:l.A.string,tip:l.A.string,delay:l.A.number,indicator:l.A.any}},v=void 0;function g(e,t){return!!e&&!!t&&!isNaN(Number(t))}function y(e){v="function"===typeof e.indicator?e.indicator:function(t){return t(e.indicator)}}t.Ay={name:"ASpin",mixins:[u.A],props:(0,d.CB)(m(),{size:"default",spinning:!0,wrapperClassName:""}),inject:{configProvider:{default:function(){return f.f}}},data:function(){var e=this.spinning,t=this.delay,n=g(e,t);return this.originalUpdateSpinning=this.updateSpinning,this.debouncifyUpdateSpinning(this.$props),{sSpinning:e&&!n}},mounted:function(){this.updateSpinning()},updated:function(){var e=this;this.$nextTick(function(){e.debouncifyUpdateSpinning(),e.updateSpinning()})},beforeDestroy:function(){this.cancelExistingSpin()},methods:{debouncifyUpdateSpinning:function(e){var t=e||this.$props,n=t.delay;n&&(this.cancelExistingSpin(),this.updateSpinning=c()(this.originalUpdateSpinning,n))},updateSpinning:function(){var e=this.spinning,t=this.sSpinning;t!==e&&this.setState({sSpinning:e})},cancelExistingSpin:function(){var e=this.updateSpinning;e&&e.cancel&&e.cancel()},getChildren:function(){return this.$slots&&this.$slots["default"]?(0,d.Gk)(this.$slots["default"]):null},renderIndicator:function(e,t){var n=t+"-dot",r=(0,d.nu)(this,"indicator");return null===r?null:(Array.isArray(r)&&(r=(0,d.Gk)(r),r=1===r.length?r[0]:r),(0,d.zO)(r)?(0,h.Ob)(r,{class:n}):v&&(0,d.zO)(v(e))?(0,h.Ob)(v(e),{class:n}):e("span",{class:n+" "+t+"-dot-spin"},[e("i",{class:t+"-dot-item"}),e("i",{class:t+"-dot-item"}),e("i",{class:t+"-dot-item"}),e("i",{class:t+"-dot-item"})]))}},render:function(e){var t,n=this.$props,r=n.size,s=n.prefixCls,c=n.tip,l=n.wrapperClassName,u=(0,a.A)(n,["size","prefixCls","tip","wrapperClassName"]),h=this.configProvider.getPrefixCls,f=h("spin",s),p=this.sSpinning,m=(t={},(0,o.A)(t,f,!0),(0,o.A)(t,f+"-sm","small"===r),(0,o.A)(t,f+"-lg","large"===r),(0,o.A)(t,f+"-spinning",p),(0,o.A)(t,f+"-show-text",!!c),t),v=e("div",i()([u,{class:m}]),[this.renderIndicator(e,f),c?e("div",{class:f+"-text"},[c]):null]),g=this.getChildren();if(g){var y,_=(y={},(0,o.A)(y,f+"-container",!0),(0,o.A)(y,f+"-blur",p),y);return e("div",i()([{on:(0,d.WM)(this)},{class:[f+"-nested-loading",l]}]),[p&&e("div",{key:"loading"},[v]),e("div",{class:_,key:"container"},[g])])}return v}}},82840:function(e,t,n){"use strict";var r=n(64258),i=n(44807);r.Ay.setDefaultIndicator=r.Lt,r.Ay.install=function(e){e.use(i.A),e.component(r.Ay.name,r.Ay)},t.A=r.Ay},45562:function(e,t,n){"use strict";n(29229)},60304:function(e,t,n){"use strict";n.d(t,{A:function(){return L}});var r=n(85505),i=n(4718),o=n(15848),a=n(25592),s=n(97948),c=n.n(s),l={name:"AStatisticNumber",functional:!0,render:function(e,t){var n=t.props,r=n.value,i=n.formatter,o=n.precision,a=n.decimalSeparator,s=n.groupSeparator,l=void 0===s?"":s,u=n.prefixCls,d=void 0;if("function"===typeof i)d=i({value:r,h:e});else{var h=String(r),f=h.match(/^(-?)(\d*)(\.(\d+))?$/);if(f){var p=f[1],m=f[2]||"0",v=f[4]||"";m=m.replace(/\B(?=(\d{3})+(?!\d))/g,l),"number"===typeof o&&(v=c()(v,o,"0").slice(0,o)),v&&(v=""+a+v),d=[e("span",{key:"int",class:u+"-content-value-int"},[p,m]),v&&e("span",{key:"decimal",class:u+"-content-value-decimal"},[v])]}else d=h}return e("span",{class:u+"-content-value"},[d])}},u={prefixCls:i.A.string,decimalSeparator:i.A.string,groupSeparator:i.A.string,format:i.A.string,value:i.A.oneOfType([i.A.string,i.A.number,i.A.object]),valueStyle:i.A.any,valueRender:i.A.any,formatter:i.A.any,precision:i.A.number,prefix:i.A.any,suffix:i.A.any,title:i.A.any},d={name:"AStatistic",props:(0,o.CB)(u,{decimalSeparator:".",groupSeparator:","}),inject:{configProvider:{default:function(){return a.f}}},render:function(){var e=arguments[0],t=this.$props,n=t.prefixCls,i=t.value,a=void 0===i?0:i,s=t.valueStyle,c=t.valueRender,u=this.configProvider.getPrefixCls,d=u("statistic",n),h=(0,o.nu)(this,"title"),f=(0,o.nu)(this,"prefix"),p=(0,o.nu)(this,"suffix"),m=(0,o.nu)(this,"formatter",{},!1),v=e(l,{props:(0,r.A)({},this.$props,{prefixCls:d,value:a,formatter:m})});return c&&(v=c(v)),e("div",{class:d},[h&&e("div",{class:d+"-title"},[h]),e("div",{style:s,class:d+"-content"},[f&&e("span",{class:d+"-content-prefix"},[f]),v,p&&e("span",{class:d+"-content-suffix"},[p])])])}},h=n(75189),f=n.n(h),p=n(95093),m=n(67287),v=n(52040),g=n(52037),y=n.n(g),_=[["Y",31536e6],["M",2592e6],["D",864e5],["H",36e5],["m",6e4],["s",1e3],["S",1]];function b(e,t){var n=e,r=/\[[^\]]*\]/g,i=(t.match(r)||[]).map(function(e){return e.slice(1,-1)}),o=t.replace(r,"[]"),a=_.reduce(function(e,t){var r=(0,v.A)(t,2),i=r[0],o=r[1];if(-1!==e.indexOf(i)){var a=Math.floor(n/o);return n-=a*o,e.replace(new RegExp(i+"+","g"),function(e){var t=e.length;return y()(a.toString(),t,"0")})}return e},o),s=0;return a.replace(r,function(){var e=i[s];return s+=1,e})}function M(e,t){var n=t.format,r=void 0===n?"":n,i=(0,m.A)(p)(e).valueOf(),o=(0,m.A)(p)().valueOf(),a=Math.max(i-o,0);return b(a,r)}var A=1e3/30;function w(e){return(0,m.A)(p)(e).valueOf()}var x={name:"AStatisticCountdown",props:(0,o.CB)(u,{format:"HH:mm:ss"}),created:function(){this.countdownId=void 0},mounted:function(){this.syncTimer()},updated:function(){this.syncTimer()},beforeDestroy:function(){this.stopTimer()},methods:{syncTimer:function(){var e=this.$props.value,t=w(e);t>=Date.now()?this.startTimer():this.stopTimer()},startTimer:function(){var e=this;this.countdownId||(this.countdownId=window.setInterval(function(){e.$refs.statistic.$forceUpdate(),e.syncTimer()},A))},stopTimer:function(){var e=this.$props.value;if(this.countdownId){clearInterval(this.countdownId),this.countdownId=void 0;var t=w(e);t0&&(this.calcTimeout&&clearTimeout(this.calcTimeout),this.calcTimeout=setTimeout(function(){var r=(n.lastChild.offsetWidth||0)+1;t===r||Math.abs(t-r)<=3||e.setState({lastStepOffsetWidth:r})}))}}},render:function(){var e,t=this,n=arguments[0],i=this.prefixCls,s=this.direction,c=this.type,l=this.labelPlacement,u=this.iconPrefix,h=this.status,f=this.size,p=this.current,m=this.$scopedSlots,v=this.initial,g=this.icons,y="navigation"===c,_=this.progressDot;void 0===_&&(_=m.progressDot);var b=this.lastStepOffsetWidth,M=this.flexSupported,A=(0,o.Gk)(this.$slots["default"]),w=A.length-1,x=_?"vertical":l,k=(e={},(0,a.A)(e,i,!0),(0,a.A)(e,i+"-"+s,!0),(0,a.A)(e,i+"-"+f,f),(0,a.A)(e,i+"-label-"+x,"horizontal"===s),(0,a.A)(e,i+"-dot",!!_),(0,a.A)(e,i+"-navigation",y),(0,a.A)(e,i+"-flex-not-supported",!M),e),L=(0,o.WM)(this),C={class:k,ref:"vcStepsRef",on:L};return n("div",C,[A.map(function(e,n){var a=(0,o.Ts)(e),c=v+n,l={props:(0,r.A)({stepNumber:""+(c+1),stepIndex:c,prefixCls:i,iconPrefix:u,progressDot:t.progressDot,icons:g},a),on:(0,o.kQ)(e),scopedSlots:m};return L.change&&(l.on.stepClick=t.onStepClick),M||"vertical"===s||(y?(l.props.itemWidth=100/(w+1)+"%",l.props.adjustMarginRight=0):n!==w&&(l.props.itemWidth=100/w+"%",l.props.adjustMarginRight=-Math.round(b/w+1)+"px")),"error"===h&&n===p-1&&(l["class"]=i+"-next-error"),a.status||(l.props.status=c===p?h:c0&&void 0!==arguments[0]?arguments[0]:{},t={prefixCls:i.A.string,iconPrefix:i.A.string,current:i.A.number,initial:i.A.number,labelPlacement:i.A.oneOf(["horizontal","vertical"]).def("horizontal"),status:i.A.oneOf(["wait","process","finish","error"]),size:i.A.oneOf(["default","small"]),direction:i.A.oneOf(["horizontal","vertical"]),progressDot:i.A.oneOfType([i.A.bool,i.A.func]),type:i.A.oneOf(["default","navigation"])};return(0,o.CB)(t,e)},x={name:"ASteps",props:w({current:0}),inject:{configProvider:{default:function(){return M.f}}},model:{prop:"current",event:"change"},Step:(0,r.A)({},_.Step,{name:"AStep"}),render:function(){var e=arguments[0],t=(0,o.Oq)(this),n=t.prefixCls,i=t.iconPrefix,a=this.configProvider.getPrefixCls,s=a("steps",n),c=a("",i),l={finish:e(b.A,{attrs:{type:"check"},class:s+"-finish-icon"}),error:e(b.A,{attrs:{type:"close"},class:s+"-error-icon"})},u={props:(0,r.A)({icons:l,iconPrefix:c,prefixCls:s},t),on:(0,o.WM)(this),scopedSlots:this.$scopedSlots};return e(_,u,[this.$slots["default"]])},install:function(e){e.use(A.A),e.component(x.name,x),e.component(x.Step.name,x.Step)}},k=x},36463:function(e,t,n){"use strict";n(29229)},91997:function(e,t,n){"use strict";n.d(t,{A:function(){return y}});var r=n(85505),i=n(44508),o=n(5748),a=n(4718),s=n(15848),c={prefixCls:a.A.string,disabled:a.A.bool.def(!1),checkedChildren:a.A.any,unCheckedChildren:a.A.any,tabIndex:a.A.oneOfType([a.A.string,a.A.number]),checked:a.A.bool.def(!1),defaultChecked:a.A.bool.def(!1),autoFocus:a.A.bool.def(!1),loadingIcon:a.A.any},l=n(52315),u={name:"VcSwitch",mixins:[l.A],model:{prop:"checked",event:"change"},props:(0,r.A)({},c,{prefixCls:c.prefixCls.def("rc-switch")}),data:function(){var e=!1;return e=(0,s.cK)(this,"checked")?!!this.checked:!!this.defaultChecked,{stateChecked:e}},watch:{checked:function(e){this.stateChecked=e}},mounted:function(){var e=this;this.$nextTick(function(){var t=e.autoFocus,n=e.disabled;t&&!n&&e.focus()})},methods:{setChecked:function(e,t){this.disabled||((0,s.cK)(this,"checked")||(this.stateChecked=e),this.$emit("change",e,t))},handleClick:function(e){var t=!this.stateChecked;this.setChecked(t,e),this.$emit("click",t,e)},handleKeyDown:function(e){37===e.keyCode?this.setChecked(!1,e):39===e.keyCode&&this.setChecked(!0,e)},handleMouseUp:function(e){this.$refs.refSwitchNode&&this.$refs.refSwitchNode.blur(),this.$emit("mouseup",e)},focus:function(){this.$refs.refSwitchNode.focus()},blur:function(){this.$refs.refSwitchNode.blur()}},render:function(){var e,t=arguments[0],n=(0,s.Oq)(this),a=n.prefixCls,c=n.disabled,l=n.loadingIcon,u=n.tabIndex,d=(0,o.A)(n,["prefixCls","disabled","loadingIcon","tabIndex"]),h=this.stateChecked,f=(e={},(0,i.A)(e,a,!0),(0,i.A)(e,a+"-checked",h),(0,i.A)(e,a+"-disabled",c),e),p={props:(0,r.A)({},d),on:(0,r.A)({},(0,s.WM)(this),{keydown:this.handleKeyDown,click:this.handleClick,mouseup:this.handleMouseUp}),attrs:{type:"button",role:"switch","aria-checked":h,disabled:c,tabIndex:u},class:f,ref:"refSwitchNode"};return t("button",p,[l,t("span",{class:a+"-inner"},[h?(0,s.nu)(this,"checkedChildren"):(0,s.nu)(this,"unCheckedChildren")])])}},d=u,h=n(98416),f=n(40255),p=n(25592),m=n(44807),v=n(36873),g={name:"ASwitch",__ANT_SWITCH:!0,model:{prop:"checked",event:"change"},props:{prefixCls:a.A.string,size:a.A.oneOf(["small","default","large"]),disabled:a.A.bool,checkedChildren:a.A.any,unCheckedChildren:a.A.any,tabIndex:a.A.oneOfType([a.A.string,a.A.number]),checked:a.A.bool,defaultChecked:a.A.bool,autoFocus:a.A.bool,loading:a.A.bool},inject:{configProvider:{default:function(){return p.f}}},methods:{focus:function(){this.$refs.refSwitchNode.focus()},blur:function(){this.$refs.refSwitchNode.blur()}},created:function(){(0,v.A)((0,s.Ay)(this,"checked")||!(0,s.Ay)(this,"value"),"Switch","`value` is not validate prop, do you mean `checked`?")},render:function(){var e,t=arguments[0],n=(0,s.Oq)(this),a=n.prefixCls,c=n.size,l=n.loading,u=n.disabled,p=(0,o.A)(n,["prefixCls","size","loading","disabled"]),m=this.configProvider.getPrefixCls,v=m("switch",a),g=(e={},(0,i.A)(e,v+"-small","small"===c),(0,i.A)(e,v+"-loading",l),e),y=l?t(f.A,{attrs:{type:"loading"},class:v+"-loading-icon"}):null,_={props:(0,r.A)({},p,{prefixCls:v,loadingIcon:y,checkedChildren:(0,s.nu)(this,"checkedChildren"),unCheckedChildren:(0,s.nu)(this,"unCheckedChildren"),disabled:u||l}),on:(0,s.WM)(this),class:g,ref:"refSwitchNode"};return t(h.A,{attrs:{insertExtraNode:!0}},[t(d,_)])},install:function(e){e.use(m.A),e.component(g.name,g)}},y=g},53966:function(e,t,n){"use strict";n(29229)},76806:function(e,t,n){"use strict";n.d(t,{A:function(){return At}});var r=n(85505),i=n(5748),o=n(44508),a=n(32779),s=n(97479),c=void 0,l=void 0,u={position:"absolute",top:"-9999px",width:"50px",height:"50px"},d="RC_TABLE_INTERNAL_COL_DEFINE";function h(e){var t=e.direction,n=void 0===t?"vertical":t,r=e.prefixCls;if("undefined"===typeof document||"undefined"===typeof window)return 0;var i="vertical"===n;if(i&&c)return c;if(!i&&l)return l;var o=document.createElement("div");Object.keys(u).forEach(function(e){o.style[e]=u[e]}),o.className=r+"-hide-scrollbar scroll-div-append-to-body",i?o.style.overflowY="scroll":o.style.overflowX="scroll",document.body.appendChild(o);var a=0;return i?(a=o.offsetWidth-o.clientWidth,c=a):(a=o.offsetHeight-o.clientHeight,l=a),document.body.removeChild(o),a}function f(e,t,n){var r=void 0;function i(){for(var i=arguments.length,o=Array(i),a=0;a1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];o[n]=o[n]||[];var a=[],s=function(e){var t=o.length-n;e&&!e.children&&t>1&&(!e.rowSpan||e.rowSpan0?(u.children=e(u.children,n+1,u,o),i.colSpan+=u.colSpan):i.colSpan+=1;for(var d=0;d0})}var E={name:"TableHeader",props:{fixed:k.A.string,columns:k.A.array.isRequired,expander:k.A.object.isRequired},inject:{table:{default:function(){return{}}}},render:function(){var e=arguments[0],t=this.table,n=t.sComponents,r=t.prefixCls,i=t.showHeader,o=t.customHeaderRow,a=this.expander,s=this.columns,c=this.fixed;if(!i)return null;var l=P({columns:s});a.renderExpandIndentCell(l,c);var u=n.header.wrapper;return e(u,{class:r+"-thead"},[l.map(function(t,i){return e(V,{attrs:{prefixCls:r,index:i,fixed:c,columns:s,rows:l,row:t,components:n,customHeaderRow:o},key:i})})])}},j=n(58156),F=n.n(j);function I(e){return e&&!(0,D.zO)(e)&&"[object Object]"===Object.prototype.toString.call(e)}var $={name:"TableCell",props:{record:k.A.object,prefixCls:k.A.string,index:k.A.number,indent:k.A.number,indentSize:k.A.number,column:k.A.object,expandIcon:k.A.any,component:k.A.any},inject:{table:{default:function(){return{}}}},methods:{handleClick:function(e){var t=this.record,n=this.column.onCellClick;n&&n(t,e)}},render:function(){var e,t=arguments[0],n=this.record,i=this.indentSize,a=this.prefixCls,s=this.indent,c=this.index,l=this.expandIcon,u=this.column,d=this.component,h=u.dataIndex,f=u.customRender,p=u.className,m=void 0===p?"":p,g=this.table.transformCellText,y=void 0;y="number"===typeof h||h&&0!==h.length?F()(n,h):n;var _={props:{},attrs:{},on:{click:this.handleClick}},b=void 0,M=void 0;f&&(y=f(y,n,c,u),I(y)&&(_.attrs=y.attrs||{},_.props=y.props||{},_["class"]=y["class"],_.style=y.style,b=_.attrs.colSpan,M=_.attrs.rowSpan,y=y.children)),u.customCell&&(_=(0,D.v6)(_,u.customCell(n,c))),I(y)&&(y=null),g&&(y=g({text:y,column:u,record:n,index:c}));var A=l?t("span",{style:{paddingLeft:i*s+"px"},class:a+"-indent indent-level-"+s}):null;if(0===M||0===b)return null;u.align&&(_.style=(0,r.A)({textAlign:u.align},_.style));var w=x()(m,u["class"],(e={},(0,o.A)(e,a+"-cell-ellipsis",!!u.ellipsis),(0,o.A)(e,a+"-cell-break-word",!!u.width),e));return u.ellipsis&&"string"===typeof y&&(_.attrs.title=y),t(d,v()([{class:w},_]),[A,l,y])}},R=n(52315);function N(){}var W={name:"TableRow",mixins:[R.A],inject:{store:{from:"table-store",default:function(){return{}}}},props:(0,D.CB)({customRow:k.A.func,record:k.A.object,prefixCls:k.A.string,columns:k.A.array,index:k.A.number,rowKey:k.A.oneOfType([k.A.string,k.A.number]).isRequired,className:k.A.string,indent:k.A.number,indentSize:k.A.number,hasExpandIcon:k.A.func,fixed:k.A.oneOfType([k.A.string,k.A.bool]),renderExpandIcon:k.A.func,renderExpandIconCell:k.A.func,components:k.A.any,expandedRow:k.A.bool,isAnyColumnsFixed:k.A.bool,ancestorKeys:k.A.array.isRequired,expandIconColumnIndex:k.A.number,expandRowByClick:k.A.bool},{hasExpandIcon:function(){},renderExpandIcon:function(){},renderExpandIconCell:function(){}}),computed:{visible:function(){var e=this.store.expandedRowKeys,t=this.$props.ancestorKeys;return!(0!==t.length&&!t.every(function(t){return e.includes(t)}))},height:function(){var e=this.store,t=e.expandedRowsHeight,n=e.fixedColumnsBodyRowsHeight,r=this.$props,i=r.fixed,o=r.rowKey;return i?t[o]?t[o]:n[o]?n[o]:null:null},hovered:function(){var e=this.store.currentHoverKey,t=this.$props.rowKey;return e===t}},data:function(){return{shouldRender:this.visible}},mounted:function(){var e=this;this.shouldRender&&this.$nextTick(function(){e.saveRowRef()})},watch:{visible:{handler:function(e){e&&(this.shouldRender=!0)},immediate:!0}},updated:function(){var e=this;this.shouldRender&&!this.rowRef&&this.$nextTick(function(){e.saveRowRef()})},methods:{onRowClick:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:N,n=this.record,r=this.index;this.__emit("rowClick",n,r,e),t(e)},onRowDoubleClick:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:N,n=this.record,r=this.index;this.__emit("rowDoubleClick",n,r,e),t(e)},onContextMenu:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:N,n=this.record,r=this.index;this.__emit("rowContextmenu",n,r,e),t(e)},onMouseEnter:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:N,n=this.record,r=this.index,i=this.rowKey;this.__emit("hover",!0,i),this.__emit("rowMouseenter",n,r,e),t(e)},onMouseLeave:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:N,n=this.record,r=this.index,i=this.rowKey;this.__emit("hover",!1,i),this.__emit("rowMouseleave",n,r,e),t(e)},setExpandedRowHeight:function(){var e=this.store,t=this.rowKey,n=e.expandedRowsHeight,i=this.rowRef.getBoundingClientRect().height;n=(0,r.A)({},n,(0,o.A)({},t,i)),e.expandedRowsHeight=n},setRowHeight:function(){var e=this.store,t=this.rowKey,n=e.fixedColumnsBodyRowsHeight,i=this.rowRef.getBoundingClientRect().height;e.fixedColumnsBodyRowsHeight=(0,r.A)({},n,(0,o.A)({},t,i))},getStyle:function(){var e=this.height,t=this.visible,n=(0,D.gd)(this);return e&&(n=(0,r.A)({},n,{height:e})),t||n.display||(n=(0,r.A)({},n,{display:"none"})),n},saveRowRef:function(){this.rowRef=this.$el;var e=this.isAnyColumnsFixed,t=this.fixed,n=this.expandedRow,r=this.ancestorKeys;e&&(!t&&n&&this.setExpandedRowHeight(),!t&&r.length>=0&&this.setRowHeight())}},render:function(){var e=this,t=arguments[0];if(!this.shouldRender)return null;var n=this.prefixCls,o=this.columns,a=this.record,s=this.rowKey,c=this.index,l=this.customRow,u=void 0===l?N:l,d=this.indent,h=this.indentSize,f=this.hovered,p=this.height,m=this.visible,v=this.components,g=this.hasExpandIcon,y=this.renderExpandIcon,_=this.renderExpandIconCell,b=v.body.row,M=v.body.cell,A="";f&&(A+=" "+n+"-hover");var w=[];_(w);for(var k=0;k2&&void 0!==arguments[2]?arguments[2]:[],o=this.$createElement,a=this.table,s=a.columnManager,c=a.sComponents,l=a.prefixCls,u=a.childrenColumnName,d=a.rowClassName,h=a.customRow,f=void 0===h?G:h,p=(0,D.WM)(this.table),m=p.rowClick,v=void 0===m?G:m,g=p.rowDoubleclick,y=void 0===g?G:g,_=p.rowContextmenu,b=void 0===_?G:_,M=p.rowMouseenter,A=void 0===M?G:M,w=p.rowMouseleave,x=void 0===w?G:w,k=this.getRowKey,L=this.fixed,C=this.expander,S=this.isAnyColumnsFixed,z=[],T=function(a){var h=e[a],p=k(h,a),m="string"===typeof d?d:d(h,a,t),g={};s.isAnyColumnsFixed()&&(g.hover=n.handleRowHover);var _=void 0;_="left"===L?s.leftLeafColumns():"right"===L?s.rightLeafColumns():n.getColumns(s.leafColumns());var M=l+"-row",w={props:(0,r.A)({},C.props,{fixed:L,index:a,prefixCls:M,record:h,rowKey:p,needIndentSpaced:C.needIndentSpaced}),key:p,on:{rowClick:v,expandedChange:C.handleExpandChange},scopedSlots:{default:function(e){var n=(0,D.v6)({props:{fixed:L,indent:t,record:h,index:a,prefixCls:M,childrenColumnName:u,columns:_,rowKey:p,ancestorKeys:i,components:c,isAnyColumnsFixed:S,customRow:f},on:(0,r.A)({rowDoubleclick:y,rowContextmenu:b,rowMouseenter:A,rowMouseleave:x},g),class:m,ref:"row_"+a+"_"+t},e);return o(B,n)}}},T=o(q,w);z.push(T),C.renderRows(n.renderRows,z,h,a,t,L,p,i)},O=0;O0&&(m.width=g+"px")}var y=d?n.table:"table",_=n.body.wrapper,b=void 0;return d&&(b=e(_,{class:r+"-tbody"},[this.renderRows(o,0)]),a&&(b=a(b))),e(y,{class:l,style:m,key:"table"},[e(H,{attrs:{columns:p,fixed:h}}),u&&e(E,{attrs:{expander:c,columns:p,fixed:h}}),b])}},X=J,Z={name:"HeadTable",props:{fixed:k.A.oneOfType([k.A.string,k.A.bool]),columns:k.A.array.isRequired,tableClassName:k.A.string.isRequired,handleBodyScrollLeft:k.A.func.isRequired,expander:k.A.object.isRequired},inject:{table:{default:function(){return{}}}},render:function(){var e=arguments[0],t=this.columns,n=this.fixed,r=this.tableClassName,i=this.handleBodyScrollLeft,a=this.expander,s=this.table,c=s.prefixCls,l=s.scroll,u=s.showHeader,d=s.saveRef,f=s.useFixedHeader,p={},m=h({direction:"vertical"});if(l.y){f=!0;var g=h({direction:"horizontal",prefixCls:c});g>0&&!n&&(p.marginBottom="-"+g+"px",p.paddingBottom="0px",p.minWidth=m+"px",p.overflowX="scroll",p.overflowY=0===m?"hidden":"scroll")}return f&&u?e("div",v()([{key:"headTable"},{directives:[{name:"ant-ref",value:n?function(){}:d("headTable")}]},{class:x()(c+"-header",(0,o.A)({},c+"-hide-scrollbar",m>0)),style:p,on:{scroll:i}}]),[e(X,{attrs:{tableClassName:r,hasHead:!0,hasBody:!1,fixed:n,columns:t,expander:a}})]):null}},Q={name:"BodyTable",props:{fixed:k.A.oneOfType([k.A.string,k.A.bool]),columns:k.A.array.isRequired,tableClassName:k.A.string.isRequired,handleBodyScroll:k.A.func.isRequired,handleWheel:k.A.func.isRequired,getRowKey:k.A.func.isRequired,expander:k.A.object.isRequired,isAnyColumnsFixed:k.A.bool},inject:{table:{default:function(){return{}}}},render:function(){var e=arguments[0],t=this.table,n=t.prefixCls,i=t.scroll,o=this.columns,a=this.fixed,s=this.tableClassName,c=this.getRowKey,l=this.handleBodyScroll,u=this.handleWheel,d=this.expander,f=this.isAnyColumnsFixed,p=this.table,m=p.useFixedHeader,g=p.saveRef,y=(0,r.A)({},this.table.bodyStyle),_={};if((i.x||a)&&(y.overflowX=y.overflowX||"scroll",y.WebkitTransform="translate3d (0, 0, 0)"),i.y){var b=y.maxHeight||i.y;b="number"===typeof b?b+"px":b,a?(_.maxHeight=b,_.overflowY=y.overflowY||"scroll"):y.maxHeight=b,y.overflowY=y.overflowY||"scroll",m=!0;var M=h({direction:"vertical"});M>0&&a&&(y.marginBottom="-"+M+"px",y.paddingBottom="0px")}var A=e(X,{attrs:{tableClassName:s,hasHead:!m,hasBody:!0,fixed:a,columns:o,expander:d,getRowKey:c,isAnyColumnsFixed:f}});if(a&&o.length){var w=void 0;return"left"===o[0].fixed||!0===o[0].fixed?w="fixedColumnsBodyLeft":"right"===o[0].fixed&&(w="fixedColumnsBodyRight"),delete y.overflowX,delete y.overflowY,e("div",{key:"bodyTable",class:n+"-body-outer",style:(0,r.A)({},y)},[e("div",v()([{class:n+"-body-inner",style:_},{directives:[{name:"ant-ref",value:g(w)}]},{on:{wheel:u,scroll:l}}]),[A])])}var x=i&&(i.x||i.y);return e("div",v()([{attrs:{tabIndex:x?-1:void 0},key:"bodyTable",class:n+"-body",style:y},{directives:[{name:"ant-ref",value:g("bodyTable")}]},{on:{wheel:u,scroll:l}}]),[A])}},ee=function(){return{expandIconAsCell:k.A.bool,expandRowByClick:k.A.bool,expandedRowKeys:k.A.array,expandedRowClassName:k.A.func,defaultExpandAllRows:k.A.bool,defaultExpandedRowKeys:k.A.array,expandIconColumnIndex:k.A.number,expandedRowRender:k.A.func,expandIcon:k.A.func,childrenColumnName:k.A.string,indentSize:k.A.number,columnManager:k.A.object.isRequired,prefixCls:k.A.string.isRequired,data:k.A.array,getRowKey:k.A.func}},te={name:"ExpandableTable",mixins:[R.A],props:(0,D.CB)(ee(),{expandIconAsCell:!1,expandedRowClassName:function(){return""},expandIconColumnIndex:0,defaultExpandAllRows:!1,defaultExpandedRowKeys:[],childrenColumnName:"children",indentSize:15}),inject:{store:{from:"table-store",default:function(){return{}}}},data:function(){var e=this.data,t=this.childrenColumnName,n=this.defaultExpandAllRows,r=this.expandedRowKeys,i=this.defaultExpandedRowKeys,o=this.getRowKey,s=[],c=[].concat((0,a.A)(e));if(n)for(var l=0;l4&&void 0!==arguments[4]&&arguments[4];n&&(n.preventDefault(),n.stopPropagation());var o=this.store.expandedRowKeys;if(e)o=[].concat((0,a.A)(o),[r]);else{var s=o.indexOf(r);-1!==s&&(o=p(o,r))}this.expandedRowKeys||(this.store.expandedRowKeys=o),this.latestExpandedRows&&y()(this.latestExpandedRows,o)||(this.latestExpandedRows=o,this.__emit("expandedRowsChange",o),this.__emit("update:expandedRowKeys",o)),i||this.__emit("expand",e,t)},renderExpandIndentCell:function(e,t){var n=this.prefixCls,i=this.expandIconAsCell;if(i&&"right"!==t&&e.length){var o={key:"rc-table-expand-icon-cell",className:n+"-expand-icon-th",title:"",rowSpan:e.length};e[0].unshift((0,r.A)({},o,{column:o}))}},renderExpandedRow:function(e,t,n,r,i,o,a){var s=this,c=this.$createElement,l=this.prefixCls,u=this.expandIconAsCell,d=this.indentSize,h=i[i.length-1],f=h+"-extra-row",p={body:{row:"tr",cell:"td"}},m=void 0;m="left"===a?this.columnManager.leftLeafColumns().length:"right"===a?this.columnManager.rightLeafColumns().length:this.columnManager.leafColumns().length;var v=[{key:"extra-row",customRender:function(){var r=s.store.expandedRowKeys,i=r.includes(h);return{attrs:{colSpan:m},children:"right"!==a?n(e,t,o,i):" "}}}];return u&&"right"!==a&&v.unshift({key:"expand-icon-placeholder",customRender:function(){return null}}),c(B,{key:f,attrs:{columns:v,rowKey:f,ancestorKeys:i,prefixCls:l+"-expanded-row",indentSize:d,indent:o,fixed:a,components:p,expandedRow:!0,hasExpandIcon:function(){}},class:r})},renderRows:function(e,t,n,r,i,o,s,c){var l=this.expandedRowClassName,u=this.expandedRowRender,d=this.childrenColumnName,h=n[d],f=[].concat((0,a.A)(c),[s]),p=i+1;u&&t.push(this.renderExpandedRow(n,r,u,l(n,r,i),f,p,o)),h&&t.push.apply(t,(0,a.A)(e(h,p,f)))}},render:function(){var e=this.data,t=this.childrenColumnName,n=this.$scopedSlots,r=(0,D.Oq)(this),i=e.some(function(e){return e[t]});return n["default"]&&n["default"]({props:r,on:(0,D.WM)(this),needIndentSpaced:i,renderRows:this.renderRows,handleExpandChange:this.handleExpandChange,renderExpandIndentCell:this.renderExpandIndentCell})}},ne=te,re=n(85471),ie={name:"Table",mixins:[R.A],provide:function(){return{"table-store":this.store,table:this}},props:(0,D.CB)({data:k.A.array,useFixedHeader:k.A.bool,columns:k.A.array,prefixCls:k.A.string,bodyStyle:k.A.object,rowKey:k.A.oneOfType([k.A.string,k.A.func]),rowClassName:k.A.oneOfType([k.A.string,k.A.func]),customRow:k.A.func,customHeaderRow:k.A.func,showHeader:k.A.bool,title:k.A.func,id:k.A.string,footer:k.A.func,emptyText:k.A.any,scroll:k.A.object,rowRef:k.A.func,getBodyWrapper:k.A.func,components:k.A.shape({table:k.A.any,header:k.A.shape({wrapper:k.A.any,row:k.A.any,cell:k.A.any}),body:k.A.shape({wrapper:k.A.any,row:k.A.any,cell:k.A.any})}),expandIconAsCell:k.A.bool,expandedRowKeys:k.A.array,expandedRowClassName:k.A.func,defaultExpandAllRows:k.A.bool,defaultExpandedRowKeys:k.A.array,expandIconColumnIndex:k.A.number,expandedRowRender:k.A.func,childrenColumnName:k.A.string,indentSize:k.A.number,expandRowByClick:k.A.bool,expandIcon:k.A.func,tableLayout:k.A.string,transformCellText:k.A.func},{data:[],useFixedHeader:!1,rowKey:"key",rowClassName:function(){return""},prefixCls:"rc-table",bodyStyle:{},showHeader:!0,scroll:{},rowRef:function(){return null},emptyText:function(){return"No Data"},customHeaderRow:function(){}}),data:function(){return this.preData=[].concat((0,a.A)(this.data)),this.store=(this.$root.constructor.observable||re.Ay.observable)({currentHoverKey:null,fixedColumnsHeadRowsHeight:[],fixedColumnsBodyRowsHeight:{},expandedRowsHeight:{},expandedRowKeys:[]}),{columnManager:new O(this.columns),sComponents:b()({table:"table",header:{wrapper:"thead",row:"tr",cell:"th"},body:{wrapper:"tbody",row:"tr",cell:"td"}},this.components)}},watch:{components:function(){this._components=b()({table:"table",header:{wrapper:"thead",row:"tr",cell:"th"},body:{wrapper:"tbody",row:"tr",cell:"td"}},this.components)},columns:function(e){e&&this.columnManager.reset(e)},data:function(e){var t=this;0===e.length&&this.hasScrollX()&&this.$nextTick(function(){t.resetScrollX()})}},created:function(){var e=this;["rowClick","rowDoubleclick","rowContextmenu","rowMouseenter","rowMouseleave"].forEach(function(t){(0,L.A)(void 0===(0,D.WM)(e)[t],t+" is deprecated, please use customRow instead.")}),(0,L.A)(void 0===this.getBodyWrapper,"getBodyWrapper is deprecated, please use custom components instead."),this.setScrollPosition("left"),this.debouncedWindowResize=f(this.handleWindowResize,150)},mounted:function(){var e=this;this.$nextTick(function(){e.columnManager.isAnyColumnsFixed()&&(e.handleWindowResize(),e.resizeEvent=(0,C.A)(window,"resize",e.debouncedWindowResize)),e.ref_headTable&&(e.ref_headTable.scrollLeft=0),e.ref_bodyTable&&(e.ref_bodyTable.scrollLeft=0)})},updated:function(){var e=this;this.$nextTick(function(){e.columnManager.isAnyColumnsFixed()&&(e.handleWindowResize(),e.resizeEvent||(e.resizeEvent=(0,C.A)(window,"resize",e.debouncedWindowResize)))})},beforeDestroy:function(){this.resizeEvent&&this.resizeEvent.remove(),this.debouncedWindowResize&&this.debouncedWindowResize.cancel()},methods:{getRowKey:function(e,t){var n=this.rowKey,r="function"===typeof n?n(e,t):e[n];return(0,L.A)(void 0!==r,"Each record in table should have a unique `key` prop,or set `rowKey` to an unique primary key."),void 0===r?t:r},setScrollPosition:function(e){if(this.scrollPosition=e,this.tableNode){var t=this.prefixCls;"both"===e?A()(this.tableNode).remove(new RegExp("^"+t+"-scroll-position-.+$")).add(t+"-scroll-position-left").add(t+"-scroll-position-right"):A()(this.tableNode).remove(new RegExp("^"+t+"-scroll-position-.+$")).add(t+"-scroll-position-"+e)}},setScrollPositionClassName:function(){var e=this.ref_bodyTable,t=0===e.scrollLeft,n=e.scrollLeft+1>=e.children[0].getBoundingClientRect().width-e.getBoundingClientRect().width;t&&n?this.setScrollPosition("both"):t?this.setScrollPosition("left"):n?this.setScrollPosition("right"):"middle"!==this.scrollPosition&&this.setScrollPosition("middle")},isTableLayoutFixed:function(){var e=this.$props,t=e.tableLayout,n=e.columns,r=void 0===n?[]:n,i=e.useFixedHeader,o=e.scroll,a=void 0===o?{}:o;return"undefined"!==typeof t?"fixed"===t:!!r.some(function(e){var t=e.ellipsis;return!!t})||(!(!i&&!a.y)||!(!a.x||!0===a.x||"max-content"===a.x))},handleWindowResize:function(){this.syncFixedTableRowHeight(),this.setScrollPositionClassName()},syncFixedTableRowHeight:function(){var e=this.tableNode.getBoundingClientRect();if(!(void 0!==e.height&&e.height<=0)){var t=this.prefixCls,n=this.ref_headTable?this.ref_headTable.querySelectorAll("thead"):this.ref_bodyTable.querySelectorAll("thead"),r=this.ref_bodyTable.querySelectorAll("."+t+"-row")||[],i=[].map.call(n,function(e){return e.getBoundingClientRect().height?e.getBoundingClientRect().height-.5:"auto"}),o=this.store,a=[].reduce.call(r,function(e,t){var n=t.getAttribute("data-row-key"),r=t.getBoundingClientRect().height||o.fixedColumnsBodyRowsHeight[n]||"auto";return e[n]=r,e},{});y()(o.fixedColumnsHeadRowsHeight,i)&&y()(o.fixedColumnsBodyRowsHeight,a)||(this.store.fixedColumnsHeadRowsHeight=i,this.store.fixedColumnsBodyRowsHeight=a)}},resetScrollX:function(){this.ref_headTable&&(this.ref_headTable.scrollLeft=0),this.ref_bodyTable&&(this.ref_bodyTable.scrollLeft=0)},hasScrollX:function(){var e=this.scroll,t=void 0===e?{}:e;return"x"in t},handleBodyScrollLeft:function(e){if(e.currentTarget===e.target){var t=e.target,n=this.scroll,r=void 0===n?{}:n,i=this.ref_headTable,o=this.ref_bodyTable;t.scrollLeft!==this.lastScrollLeft&&r.x&&(t===o&&i?i.scrollLeft=t.scrollLeft:t===i&&o&&(o.scrollLeft=t.scrollLeft),this.setScrollPositionClassName()),this.lastScrollLeft=t.scrollLeft}},handleBodyScrollTop:function(e){var t=e.target;if(e.currentTarget===t){var n=this.scroll,r=void 0===n?{}:n,i=this.ref_headTable,o=this.ref_bodyTable,a=this.ref_fixedColumnsBodyLeft,s=this.ref_fixedColumnsBodyRight;if(t.scrollTop!==this.lastScrollTop&&r.y&&t!==i){var c=t.scrollTop;a&&t!==a&&(a.scrollTop=c),s&&t!==s&&(s.scrollTop=c),o&&t!==o&&(o.scrollTop=c)}this.lastScrollTop=t.scrollTop}},handleBodyScroll:function(e){this.handleBodyScrollLeft(e),this.handleBodyScrollTop(e)},handleWheel:function(e){var t=this.$props.scroll,n=void 0===t?{}:t;if(window.navigator.userAgent.match(/Trident\/7\./)&&n.y){e.preventDefault();var r=e.deltaY,i=e.target,o=this.ref_bodyTable,a=this.ref_fixedColumnsBodyLeft,s=this.ref_fixedColumnsBodyRight,c=0;c=this.lastScrollTop?this.lastScrollTop+r:r,a&&i!==a&&(a.scrollTop=c),s&&i!==s&&(s.scrollTop=c),o&&i!==o&&(o.scrollTop=c)}},saveRef:function(e){var t=this;return function(n){t["ref_"+e]=n}},saveTableNodeRef:function(e){this.tableNode=e},renderMainTable:function(){var e=this.$createElement,t=this.scroll,n=this.prefixCls,r=this.columnManager.isAnyColumnsFixed(),i=r||t.x||t.y,o=[this.renderTable({columns:this.columnManager.groupedColumns(),isAnyColumnsFixed:r}),this.renderEmptyText(),this.renderFooter()];return i?e("div",{class:n+"-scroll"},[o]):o},renderLeftFixedTable:function(){var e=this.$createElement,t=this.prefixCls;return e("div",{class:t+"-fixed-left"},[this.renderTable({columns:this.columnManager.leftColumns(),fixed:"left"})])},renderRightFixedTable:function(){var e=this.$createElement,t=this.prefixCls;return e("div",{class:t+"-fixed-right"},[this.renderTable({columns:this.columnManager.rightColumns(),fixed:"right"})])},renderTable:function(e){var t=this.$createElement,n=e.columns,r=e.fixed,i=e.isAnyColumnsFixed,o=this.prefixCls,a=this.scroll,s=void 0===a?{}:a,c=s.x||r?o+"-fixed":"",l=t(Z,{key:"head",attrs:{columns:n,fixed:r,tableClassName:c,handleBodyScrollLeft:this.handleBodyScrollLeft,expander:this.expander}}),u=t(Q,{key:"body",attrs:{columns:n,fixed:r,tableClassName:c,getRowKey:this.getRowKey,handleWheel:this.handleWheel,handleBodyScroll:this.handleBodyScroll,expander:this.expander,isAnyColumnsFixed:i}});return[l,u]},renderTitle:function(){var e=this.$createElement,t=this.title,n=this.prefixCls,r=this.data;return t?e("div",{class:n+"-title",key:"title"},[t(r)]):null},renderFooter:function(){var e=this.$createElement,t=this.footer,n=this.prefixCls,r=this.data;return t?e("div",{class:n+"-footer",key:"footer"},[t(r)]):null},renderEmptyText:function(){var e=this.$createElement,t=this.emptyText,n=this.prefixCls,r=this.data;if(r.length)return null;var i=n+"-placeholder";return e("div",{class:i,key:"emptyText"},["function"===typeof t?t():t])}},render:function(){var e,t=this,n=arguments[0],i=(0,D.Oq)(this),a=this.columnManager,s=this.getRowKey,c=i.prefixCls,l=x()(i.prefixCls,(e={},(0,o.A)(e,c+"-fixed-header",i.useFixedHeader||i.scroll&&i.scroll.y),(0,o.A)(e,c+"-scroll-position-left "+c+"-scroll-position-right","both"===this.scrollPosition),(0,o.A)(e,c+"-scroll-position-"+this.scrollPosition,"both"!==this.scrollPosition),(0,o.A)(e,c+"-layout-fixed",this.isTableLayoutFixed()),e)),u=a.isAnyColumnsLeftFixed(),d=a.isAnyColumnsRightFixed(),h={props:(0,r.A)({},i,{columnManager:a,getRowKey:s}),on:(0,D.WM)(this),scopedSlots:{default:function(e){return t.expander=e,n("div",v()([{directives:[{name:"ant-ref",value:t.saveTableNodeRef}]},{class:l}]),[t.renderTitle(),n("div",{class:c+"-content"},[t.renderMainTable(),u&&t.renderLeftFixedTable(),d&&t.renderRightFixedTable()])])}}};return n(ne,h)}},oe={name:"Column",props:{rowSpan:k.A.number,colSpan:k.A.number,title:k.A.any,dataIndex:k.A.string,width:k.A.oneOfType([k.A.number,k.A.string]),ellipsis:k.A.bool,fixed:k.A.oneOf([!0,"left","right"]),align:k.A.oneOf(["left","center","right"]),customRender:k.A.func,className:k.A.string,customCell:k.A.func,customHeaderCell:k.A.func}},ae={name:"ColumnGroup",props:{title:k.A.any},isTableColumnGroup:!0},se={name:"Table",Column:oe,ColumnGroup:ae,props:ie.props,methods:{getTableNode:function(){return this.$refs.table.tableNode},getBodyTable:function(){return this.$refs.table.ref_bodyTable},normalize:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=[];return t.forEach(function(t){if(t.tag){var i=(0,D.i7)(t),o=(0,D.gd)(t),a=(0,D.t0)(t),s=(0,D.Oq)(t),c=(0,D.kQ)(t),l={};Object.keys(c).forEach(function(e){var t="on-"+e;l[(0,D.PT)(t)]=c[e]});var u=(0,D.Sk)(t),d=u["default"],h=u.title,f=(0,r.A)({title:h},s,{style:o,class:a},l);if(i&&(f.key=i),(0,D.xr)(t).isTableColumnGroup)f.children=e.normalize("function"===typeof d?d():d);else{var p=t.data&&t.data.scopedSlots&&t.data.scopedSlots["default"];f.customRender=f.customRender||p}n.push(f)}}),n}},render:function(){var e=arguments[0],t=this.$slots,n=this.normalize,i=(0,D.Oq)(this),o=i.columns||n(t["default"]),a={props:(0,r.A)({},i,{columns:o}),on:(0,D.WM)(this),ref:"table"};return e(ie,a)}},ce=se,le=n(70198),ue=n(5285),de=n(74072),he=n(50545),fe=n.n(he),pe=n(77197),me=n(40255),ve=n(75842),ge=n(63301),ye={name:"FilterDropdownMenuWrapper",methods:{handelClick:function(e){e.stopPropagation()}},render:function(){var e=arguments[0],t=this.$slots,n=this.handelClick;return e("div",{on:{click:n}},[t["default"]])}},_e=n(38223),be=n(64258),Me=(0,_e.bv)(),Ae=(0,be.N0)(),we=k.A.shape({text:k.A.string,value:k.A.string,children:k.A.array}).loose,xe={title:k.A.any,dataIndex:k.A.string,customRender:k.A.func,customCell:k.A.func,customHeaderCell:k.A.func,align:k.A.oneOf(["left","right","center"]),ellipsis:k.A.bool,filters:k.A.arrayOf(we),filterMultiple:k.A.bool,filterDropdown:k.A.any,filterDropdownVisible:k.A.bool,sorter:k.A.oneOfType([k.A.boolean,k.A.func]),defaultSortOrder:k.A.oneOf(["ascend","descend"]),colSpan:k.A.number,width:k.A.oneOfType([k.A.string,k.A.number]),className:k.A.string,fixed:k.A.oneOfType([k.A.bool,k.A.oneOf(["left","right"])]),filterIcon:k.A.any,filteredValue:k.A.array,filtered:k.A.bool,defaultFilteredValue:k.A.array,sortOrder:k.A.oneOfType([k.A.bool,k.A.oneOf(["ascend","descend"])]),sortDirections:k.A.array},ke=k.A.shape({filterTitle:k.A.string,filterConfirm:k.A.any,filterReset:k.A.any,emptyText:k.A.any,selectAll:k.A.any,selectInvert:k.A.any,sortTitle:k.A.string,expand:k.A.string,collapse:k.A.string}).loose,Le=k.A.oneOf(["checkbox","radio"]),Ce={type:Le,selectedRowKeys:k.A.array,getCheckboxProps:k.A.func,selections:k.A.oneOfType([k.A.array,k.A.bool]),hideDefaultSelections:k.A.bool,fixed:k.A.bool,columnWidth:k.A.oneOfType([k.A.string,k.A.number]),selectWay:k.A.oneOf(["onSelect","onSelectMultiple","onSelectAll","onSelectInvert"]),columnTitle:k.A.any},Se={prefixCls:k.A.string,dropdownPrefixCls:k.A.string,rowSelection:k.A.oneOfType([k.A.shape(Ce).loose,null]),pagination:k.A.oneOfType([k.A.shape((0,r.A)({},Me,{position:k.A.oneOf(["top","bottom","both"])})).loose,k.A.bool]),size:k.A.oneOf(["default","middle","small","large"]),dataSource:k.A.array,components:k.A.object,columns:k.A.array,rowKey:k.A.oneOfType([k.A.string,k.A.func]),rowClassName:k.A.func,expandedRowRender:k.A.any,defaultExpandAllRows:k.A.bool,defaultExpandedRowKeys:k.A.array,expandedRowKeys:k.A.array,expandIconAsCell:k.A.bool,expandIconColumnIndex:k.A.number,expandRowByClick:k.A.bool,loading:k.A.oneOfType([k.A.shape(Ae).loose,k.A.bool]),locale:ke,indentSize:k.A.number,customRow:k.A.func,customHeaderRow:k.A.func,useFixedHeader:k.A.bool,bordered:k.A.bool,showHeader:k.A.bool,footer:k.A.func,title:k.A.func,scroll:k.A.object,childrenColumnName:k.A.oneOfType([k.A.array,k.A.string]),bodyStyle:k.A.any,sortDirections:k.A.array,tableLayout:k.A.string,getPopupContainer:k.A.func,expandIcon:k.A.func,transformCellText:k.A.func},ze={store:k.A.any,locale:k.A.any,disabled:k.A.bool,getCheckboxPropsByItem:k.A.func,getRecordKey:k.A.func,data:k.A.array,prefixCls:k.A.string,hideDefaultSelections:k.A.bool,selections:k.A.oneOfType([k.A.array,k.A.bool]),getPopupContainer:k.A.func},Te={store:k.A.any,type:Le,defaultSelection:k.A.arrayOf([k.A.string,k.A.number]),rowIndex:k.A.oneOfType([k.A.string,k.A.number]),name:k.A.string,disabled:k.A.bool,id:k.A.string},Oe={_propsSymbol:k.A.any,locale:ke,selectedKeys:k.A.arrayOf([k.A.string,k.A.number]),column:k.A.object,confirmFilter:k.A.func,prefixCls:k.A.string,dropdownPrefixCls:k.A.string,getPopupContainer:k.A.func,handleFilter:k.A.func},He=n(51927);function De(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"children",n=[],i=function e(i){i.forEach(function(i){if(i[t]){var o=(0,r.A)({},i);delete o[t],n.push(o),i[t].length>0&&e(i[t])}else n.push(i)})};return i(e),n}function Ye(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"children";return e.map(function(e,i){var o={};return e[n]&&(o[n]=Ye(e[n],t,n)),(0,r.A)({},t(e,i),o)})}function Ve(e,t){return e.reduce(function(e,n){if(t(n)&&e.push(n),n.children){var r=Ve(n.children,t);e.push.apply(e,(0,a.A)(r))}return e},[])}function Pe(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(e||[]).forEach(function(e){var n=e.value,r=e.children;t[n.toString()]=n,Pe(r,t)}),t}function Ee(e){e.stopPropagation()}var je={name:"FilterMenu",mixins:[R.A],props:(0,D.CB)(Oe,{handleFilter:function(){},column:{}}),data:function(){var e="filterDropdownVisible"in this.column&&this.column.filterDropdownVisible;return this.preProps=(0,r.A)({},(0,D.Oq)(this)),{sSelectedKeys:this.selectedKeys,sKeyPathOfSelectedItem:{},sVisible:e,sValueKeys:Pe(this.column.filters)}},watch:{_propsSymbol:function(){var e=(0,D.Oq)(this),t=e.column,n={};"selectedKeys"in e&&!y()(this.preProps.selectedKeys,e.selectedKeys)&&(n.sSelectedKeys=e.selectedKeys),y()((this.preProps.column||{}).filters,(e.column||{}).filters)||(n.sValueKeys=Pe(e.column.filters)),"filterDropdownVisible"in t&&(n.sVisible=t.filterDropdownVisible),Object.keys(n).length>0&&this.setState(n),this.preProps=(0,r.A)({},e)}},mounted:function(){var e=this,t=this.column;this.$nextTick(function(){e.setNeverShown(t)})},updated:function(){var e=this,t=this.column;this.$nextTick(function(){e.setNeverShown(t)})},methods:{getDropdownVisible:function(){return!this.neverShown&&this.sVisible},setNeverShown:function(e){var t=this.$el,n=!!fe()(t,".ant-table-scroll");n&&(this.neverShown=!!e.fixed)},setSelectedKeys:function(e){var t=e.selectedKeys;this.setState({sSelectedKeys:t})},setVisible:function(e){var t=this.column;"filterDropdownVisible"in t||this.setState({sVisible:e}),t.onFilterDropdownVisibleChange&&t.onFilterDropdownVisibleChange(e)},handleClearFilters:function(){this.setState({sSelectedKeys:[]},this.handleConfirm)},handleConfirm:function(){var e=this;this.setVisible(!1),this.confirmFilter2(),this.$forceUpdate(),this.$nextTick(function(){e.confirmFilter})},onVisibleChange:function(e){this.setVisible(e);var t=this.$props.column;e||t.filterDropdown instanceof Function||this.confirmFilter2()},handleMenuItemClick:function(e){var t=this.$data.sSelectedKeys;if(e.keyPath&&!(e.keyPath.length<=1)){var n=this.$data.sKeyPathOfSelectedItem;t&&t.indexOf(e.key)>=0?delete n[e.key]:n[e.key]=e.keyPath,this.setState({sKeyPathOfSelectedItem:n})}},hasSubMenu:function(){var e=this.column.filters,t=void 0===e?[]:e;return t.some(function(e){return!!(e.children&&e.children.length>0)})},confirmFilter2:function(){var e=this.$props,t=e.column,n=e.selectedKeys,r=e.confirmFilter,i=this.$data,o=i.sSelectedKeys,a=i.sValueKeys,s=t.filterDropdown;y()(o,n)||r(t,s?o:o.map(function(e){return a[e]}).filter(function(e){return void 0!==e}))},renderMenus:function(e){var t=this,n=this.$createElement,r=this.$props,i=r.dropdownPrefixCls,a=r.prefixCls;return e.map(function(e){if(e.children&&e.children.length>0){var r=t.sKeyPathOfSelectedItem,s=Object.keys(r).some(function(t){return r[t].indexOf(e.value)>=0}),c=x()(a+"-dropdown-submenu",(0,o.A)({},i+"-submenu-contain-selected",s));return n(le.A,{attrs:{title:e.text,popupClassName:c},key:e.value},[t.renderMenus(e.children)])}return t.renderMenuItem(e)})},renderFilterIcon:function(){var e,t=this.$createElement,n=this.column,r=this.locale,i=this.prefixCls,a=this.selectedKeys,s=a&&a.length>0,c=n.filterIcon;"function"===typeof c&&(c=c(s,n));var l=x()((e={},(0,o.A)(e,i+"-selected","filtered"in n?n.filtered:s),(0,o.A)(e,i+"-open",this.getDropdownVisible()),e));return c?1===c.length&&(0,D.zO)(c[0])?(0,He.Ob)(c[0],{on:{click:Ee},class:x()(i+"-icon",l)}):t("span",{class:x()(i+"-icon",l)},[c]):t(me.A,{attrs:{title:r.filterTitle,type:"filter",theme:"filled"},class:l,on:{click:Ee}})},renderMenuItem:function(e){var t=this.$createElement,n=this.column,r=this.$data.sSelectedKeys,i=!("filterMultiple"in n)||n.filterMultiple,o=t(i?ve.A:ge.Ay,{attrs:{checked:r&&r.indexOf(e.value)>=0}});return t(ue.A,{key:e.value},[o,t("span",[e.text])])}},render:function(){var e=this,t=arguments[0],n=this.$data.sSelectedKeys,r=this.column,i=this.locale,a=this.prefixCls,s=this.dropdownPrefixCls,c=this.getPopupContainer,l=!("filterMultiple"in r)||r.filterMultiple,u=x()((0,o.A)({},s+"-menu-without-submenu",!this.hasSubMenu())),d=r.filterDropdown;d instanceof Function&&(d=d({prefixCls:s+"-custom",setSelectedKeys:function(t){return e.setSelectedKeys({selectedKeys:t})},selectedKeys:n,confirm:this.handleConfirm,clearFilters:this.handleClearFilters,filters:r.filters,visible:this.getDropdownVisible(),column:r}));var h=t(ye,{class:a+"-dropdown"},d?[d]:[t(de.Ay,{attrs:{multiple:l,prefixCls:s+"-menu",selectedKeys:n&&n.map(function(e){return e}),getPopupContainer:c},on:{click:this.handleMenuItemClick,select:this.setSelectedKeys,deselect:this.setSelectedKeys},class:u},[this.renderMenus(r.filters)]),t("div",{class:a+"-dropdown-btns"},[t("a",{class:a+"-dropdown-link confirm",on:{click:this.handleConfirm}},[i.filterConfirm]),t("a",{class:a+"-dropdown-link clear",on:{click:this.handleClearFilters}},[i.filterReset])])]);return t(pe.Ay,{attrs:{trigger:["click"],placement:"bottomRight",visible:this.getDropdownVisible(),getPopupContainer:c,forceRender:!0},on:{visibleChange:this.onVisibleChange}},[t("template",{slot:"overlay"},[h]),this.renderFilterIcon()])}},Fe={name:"SelectionBox",mixins:[R.A],props:Te,computed:{checked:function(){var e=this.$props,t=e.store,n=e.defaultSelection,r=e.rowIndex,i=!1;return i=t.selectionDirty?t.selectedRowKeys.indexOf(r)>=0:t.selectedRowKeys.indexOf(r)>=0||n.indexOf(r)>=0,i}},render:function(){var e=arguments[0],t=(0,D.Oq)(this),n=t.type,o=t.rowIndex,a=(0,i.A)(t,["type","rowIndex"]),s=this.checked,c={props:(0,r.A)({checked:s},a),on:(0,D.WM)(this)};return"radio"===n?(c.props.value=o,e(ge.Ay,c)):e(ve.A,c)}},Ie=n(36457);function $e(e){var t=e.store,n=e.getCheckboxPropsByItem,r=e.getRecordKey,i=e.data,o=e.type,a=e.byDefaultChecked;return a?i[o](function(e,t){return n(e,t).defaultChecked}):i[o](function(e,n){return t.selectedRowKeys.indexOf(r(e,n))>=0})}function Re(e){var t=e.store,n=e.data;if(!n.length)return!1;var i=$e((0,r.A)({},e,{data:n,type:"some",byDefaultChecked:!1}))&&!$e((0,r.A)({},e,{data:n,type:"every",byDefaultChecked:!1})),o=$e((0,r.A)({},e,{data:n,type:"some",byDefaultChecked:!0}))&&!$e((0,r.A)({},e,{data:n,type:"every",byDefaultChecked:!0}));return t.selectionDirty?i:i||o}function Ne(e){var t=e.store,n=e.data;return!!n.length&&(t.selectionDirty?$e((0,r.A)({},e,{data:n,type:"every",byDefaultChecked:!1})):$e((0,r.A)({},e,{data:n,type:"every",byDefaultChecked:!1}))||$e((0,r.A)({},e,{data:n,type:"every",byDefaultChecked:!0})))}var We={name:"SelectionCheckboxAll",mixins:[R.A],props:ze,data:function(){var e=this.$props;return this.defaultSelections=e.hideDefaultSelections?[]:[{key:"all",text:e.locale.selectAll},{key:"invert",text:e.locale.selectInvert}],{checked:Ne(e),indeterminate:Re(e)}},watch:{$props:{handler:function(){this.setCheckState(this.$props)},deep:!0,immediate:!0}},methods:{checkSelection:function(e,t,n,r){var i=e||this.$props,o=i.store,a=i.getCheckboxPropsByItem,s=i.getRecordKey;return("every"===n||"some"===n)&&(r?t[n](function(e,t){return a(e,t).props.defaultChecked}):t[n](function(e,t){return o.selectedRowKeys.indexOf(s(e,t))>=0}))},setCheckState:function(e){var t=Ne(e),n=Re(e);this.setState(function(e){var r={};return n!==e.indeterminate&&(r.indeterminate=n),t!==e.checked&&(r.checked=t),r})},handleSelectAllChange:function(e){var t=e.target.checked;this.$emit("select",t?"all":"removeAll",0,null)},renderMenus:function(e){var t=this,n=this.$createElement;return e.map(function(e,r){return n(Ie.Ay.Item,{key:e.key||r},[n("div",{on:{click:function(){t.$emit("select",e.key,r,e.onSelect)}}},[e.text])])})}},render:function(){var e=arguments[0],t=this.disabled,n=this.prefixCls,r=this.selections,i=this.getPopupContainer,a=this.checked,s=this.indeterminate,c=n+"-selection",l=null;if(r){var u=Array.isArray(r)?this.defaultSelections.concat(r):this.defaultSelections,d=e(Ie.Ay,{class:c+"-menu",attrs:{selectedKeys:[]}},[this.renderMenus(u)]);l=u.length>0?e(pe.Ay,{attrs:{getPopupContainer:i}},[e("template",{slot:"overlay"},[d]),e("div",{class:c+"-down"},[e(me.A,{attrs:{type:"down"}})])]):null}return e("div",{class:c},[e(ve.A,{class:x()((0,o.A)({},c+"-select-all-custom",l)),attrs:{checked:a,indeterminate:s,disabled:t},on:{change:this.handleSelectAllChange}}),l])}},Be={name:"ATableColumn",props:xe},Ke={name:"ATableColumnGroup",props:{fixed:k.A.oneOfType([k.A.bool,k.A.oneOf(["left","right"])]),title:k.A.any},__ANT_TABLE_COLUMN_GROUP:!0},Ue={store:k.A.any,rowKey:k.A.oneOfType([k.A.string,k.A.number]),prefixCls:k.A.string};function qe(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"tr",t={name:"BodyRow",props:Ue,computed:{selected:function(){return this.$props.store.selectedRowKeys.indexOf(this.$props.rowKey)>=0}},render:function(){var t=arguments[0],n=(0,o.A)({},this.prefixCls+"-row-selected",this.selected);return t(e,v()([{class:n},{on:(0,D.WM)(this)}]),[this.$slots["default"]])}};return t}var Ge=n(25592),Je=n(64168),Xe=n(82840),Ze=n(38377),Qe=n(77749),et=n(93146),tt=n.n(et);function nt(e,t){if("undefined"===typeof window)return 0;var n=t?"pageYOffset":"pageXOffset",r=t?"scrollTop":"scrollLeft",i=e===window,o=i?e[n]:e[r];return i&&"number"!==typeof o&&(o=window.document.documentElement[r]),o}function rt(e,t,n,r){var i=n-t;return e/=r/2,e<1?i/2*e*e*e+t:i/2*((e-=2)*e*e+2)+t}function it(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.getContainer,r=void 0===n?function(){return window}:n,i=t.callback,o=t.duration,a=void 0===o?450:o,s=r(),c=nt(s,!0),l=Date.now(),u=function t(){var n=Date.now(),r=n-l,o=rt(r>a?a:r,c,e,a);s===window?window.scrollTo(window.pageXOffset,o):s.scrollTop=o,r0&&void 0!==arguments[0]?arguments[0]:{},t=e&&e.body&&e.body.row;return(0,r.A)({},e,{body:(0,r.A)({},e.body,{row:qe(t)})})};function pt(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e===t||["table","header","body"].every(function(n){return y()(e[n],t[n])})}function mt(e,t){return Ve(t||(e||{}).columns||[],function(e){return"undefined"!==typeof e.filteredValue})}function vt(e,t){var n={};return mt(e,t).forEach(function(e){var t=lt(e);n[t]=e.filteredValue}),n}function gt(e,t){return Object.keys(t).length!==Object.keys(e.filters).length||Object.keys(t).some(function(n){return t[n]!==e.filters[n]})}var yt={name:"Table",Column:Be,ColumnGroup:Ke,mixins:[R.A],inject:{configProvider:{default:function(){return Ge.f}}},provide:function(){return{store:this.store}},props:(0,D.CB)(Se,{dataSource:[],useFixedHeader:!1,size:"default",loading:!1,bordered:!1,indentSize:20,locale:{},rowKey:"key",showHeader:!0,sortDirections:["ascend","descend"],childrenColumnName:"children"}),data:function(){var e=(0,D.Oq)(this);return(0,L.A)(!e.expandedRowRender||!("scroll"in e)||!e.scroll.x,"`expandedRowRender` and `scroll` are not compatible. Please use one of them at one time."),this.CheckboxPropsCache={},this.store=(this.$root.constructor.observable||re.Ay.observable)({selectedRowKeys:ct(this.$props).selectedRowKeys||[],selectionDirty:!1}),(0,r.A)({},this.getDefaultSortOrder(e.columns||[]),{sFilters:this.getDefaultFilters(e.columns),sPagination:this.getDefaultPagination(this.$props),pivot:void 0,sComponents:ft(this.components),filterDataCnt:0})},watch:{pagination:{handler:function(e){this.setState(function(t){var n=(0,r.A)({},dt,t.sPagination,e);return n.current=n.current||1,n.pageSize=n.pageSize||10,{sPagination:!1!==e?n:ht}})},deep:!0},rowSelection:{handler:function(e,t){if(e&&"selectedRowKeys"in e){this.store.selectedRowKeys=e.selectedRowKeys||[];var n=this.rowSelection;n&&e.getCheckboxProps!==n.getCheckboxProps&&(this.CheckboxPropsCache={})}else t&&!e&&(this.store.selectedRowKeys=[])},deep:!0},dataSource:function(){this.store.selectionDirty=!1,this.CheckboxPropsCache={}},columns:function(e){var t=mt({columns:e},e);if(t.length>0){var n=vt({columns:e},e),i=(0,r.A)({},this.sFilters);Object.keys(n).forEach(function(e){i[e]=n[e]}),gt({filters:this.sFilters},i)&&this.setState({sFilters:i})}this.$forceUpdate()},components:{handler:function(e,t){if(!pt(e,t)){var n=ft(e);this.setState({sComponents:n})}},deep:!0}},updated:function(){var e=this.columns,t=this.sSortColumn,n=this.sSortOrder;if(this.getSortOrderColumns(e).length>0){var r=this.getSortStateFromColumns(e);ut(r.sSortColumn,t)&&r.sSortOrder===n||this.setState(r)}},methods:{getCheckboxPropsByItem:function(e,t){var n=ct(this.$props);if(!n.getCheckboxProps)return{props:{}};var r=this.getRecordKey(e,t);return this.CheckboxPropsCache[r]||(this.CheckboxPropsCache[r]=n.getCheckboxProps(e)),this.CheckboxPropsCache[r].props=this.CheckboxPropsCache[r].props||{},this.CheckboxPropsCache[r]},getDefaultSelection:function(){var e=this,t=ct(this.$props);return t.getCheckboxProps?this.getFlatData().filter(function(t,n){return e.getCheckboxPropsByItem(t,n).props.defaultChecked}).map(function(t,n){return e.getRecordKey(t,n)}):[]},getDefaultPagination:function(e){var t="object"===(0,s.A)(e.pagination)?e.pagination:{},n=void 0;"current"in t?n=t.current:"defaultCurrent"in t&&(n=t.defaultCurrent);var i=void 0;return"pageSize"in t?i=t.pageSize:"defaultPageSize"in t&&(i=t.defaultPageSize),this.hasPagination(e)?(0,r.A)({},dt,t,{current:n||1,pageSize:i||10}):{}},getSortOrderColumns:function(e){return Ve(e||this.columns||[],function(e){return"sortOrder"in e})},getDefaultFilters:function(e){var t=vt({columns:this.columns},e),n=Ve(e||[],function(e){return"undefined"!==typeof e.defaultFilteredValue}),i=n.reduce(function(e,t){var n=lt(t);return e[n]=t.defaultFilteredValue,e},{});return(0,r.A)({},i,t)},getDefaultSortOrder:function(e){var t=this.getSortStateFromColumns(e),n=Ve(e||[],function(e){return null!=e.defaultSortOrder})[0];return n&&!t.sortColumn?{sSortColumn:n,sSortOrder:n.defaultSortOrder}:t},getSortStateFromColumns:function(e){var t=this.getSortOrderColumns(e).filter(function(e){return e.sortOrder})[0];return t?{sSortColumn:t,sSortOrder:t.sortOrder}:{sSortColumn:null,sSortOrder:null}},getMaxCurrent:function(e){var t=this.sPagination,n=t.current,r=t.pageSize;return(n-1)*r>=e?Math.floor((e-1)/r)+1:n},getRecordKey:function(e,t){var n=this.rowKey,r="function"===typeof n?n(e,t):e[n];return(0,L.A)(void 0!==r,"Table","Each record in dataSource of table should have a unique `key` prop, or set `rowKey` of Table to an unique primary key, "),void 0===r?t:r},getSorterFn:function(e){var t=e||this.$data,n=t.sSortOrder,r=t.sSortColumn;if(n&&r&&"function"===typeof r.sorter)return function(e,t){var i=r.sorter(e,t,n);return 0!==i?"descend"===n?-i:i:0}},getCurrentPageData:function(){var e=this.getLocalData();this.filterDataCnt=e.length;var t=void 0,n=void 0,r=this.sPagination;return this.hasPagination()?(n=r.pageSize,t=this.getMaxCurrent(r.total||e.length)):(n=Number.MAX_VALUE,t=1),(e.length>n||n===Number.MAX_VALUE)&&(e=e.slice((t-1)*n,t*n)),e},getFlatData:function(){var e=this.$props.childrenColumnName;return De(this.getLocalData(null,!1),e)},getFlatCurrentPageData:function(){var e=this.$props.childrenColumnName;return De(this.getCurrentPageData(),e)},getLocalData:function(e){var t=this,n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],r=e||this.$data,i=r.sFilters,o=this.$props.dataSource,s=o||[];s=s.slice(0);var c=this.getSorterFn(r);return c&&(s=this.recursiveSort([].concat((0,a.A)(s)),c)),n&&i&&Object.keys(i).forEach(function(e){var n=t.findColumn(e);if(n){var r=i[e]||[];if(0!==r.length){var o=n.onFilter;s=o?s.filter(function(e){return r.some(function(t){return o(t,e)})}):s}}}),s},onRow:function(e,t,n){var r=this.customRow,i=r?r(t,n):{};return(0,D.v6)(i,{props:{prefixCls:e,store:this.store,rowKey:this.getRecordKey(t,n)}})},setSelectedRowKeys:function(e,t){var n=this,r=t.selectWay,i=t.record,o=t.checked,a=t.changeRowKeys,s=t.nativeEvent,c=ct(this.$props);c&&!("selectedRowKeys"in c)&&(this.store.selectedRowKeys=e);var l=this.getFlatData();if(c.onChange||c[r]){var u=l.filter(function(t,r){return e.indexOf(n.getRecordKey(t,r))>=0});if(c.onChange&&c.onChange(e,u),"onSelect"===r&&c.onSelect)c.onSelect(i,o,u,s);else if("onSelectMultiple"===r&&c.onSelectMultiple){var d=l.filter(function(e,t){return a.indexOf(n.getRecordKey(e,t))>=0});c.onSelectMultiple(o,u,d)}else if("onSelectAll"===r&&c.onSelectAll){var h=l.filter(function(e,t){return a.indexOf(n.getRecordKey(e,t))>=0});c.onSelectAll(o,u,h)}else"onSelectInvert"===r&&c.onSelectInvert&&c.onSelectInvert(e)}},generatePopupContainerFunc:function(e){var t=this.$props.scroll,n=this.$refs.vcTable;return e||(t&&n?function(){return n.getTableNode()}:void 0)},scrollToFirstRow:function(){var e=this,t=this.$props.scroll;t&&!1!==t.scrollToFirstRowOnChange&&it(0,{getContainer:function(){return e.$refs.vcTable.getBodyTable()}})},isSameColumn:function(e,t){return!!(e&&t&&e.key&&e.key===t.key)||(e===t||y()(e,t,function(e,t){if("function"===typeof e&&"function"===typeof t)return e===t||e.toString()===t.toString()}))},handleFilter:function(e,t){var n=this,i=this.$props,c=(0,r.A)({},this.sPagination),l=(0,r.A)({},this.sFilters,(0,o.A)({},lt(e),t)),u=[];Ye(this.columns,function(e){e.children||u.push(lt(e))}),Object.keys(l).forEach(function(e){u.indexOf(e)<0&&delete l[e]}),i.pagination&&(c.current=1,c.onChange(c.current));var d={sPagination:c,sFilters:{}},h=(0,r.A)({},l);mt({columns:i.columns}).forEach(function(e){var t=lt(e);t&&delete h[t]}),Object.keys(h).length>0&&(d.sFilters=h),"object"===(0,s.A)(i.pagination)&&"current"in i.pagination&&(d.sPagination=(0,r.A)({},c,{current:this.sPagination.current})),this.setState(d,function(){n.scrollToFirstRow(),n.store.selectionDirty=!1,n.$emit.apply(n,["change"].concat((0,a.A)(n.prepareParamsArguments((0,r.A)({},n.$data,{sSelectionDirty:!1,sFilters:l,sPagination:c})))))})},handleSelect:function(e,t,n){var r=this,i=n.target.checked,o=n.nativeEvent,a=this.store.selectionDirty?[]:this.getDefaultSelection(),s=this.store.selectedRowKeys.concat(a),c=this.getRecordKey(e,t),l=this.$data.pivot,u=this.getFlatCurrentPageData(),d=t;if(this.$props.expandedRowRender&&(d=u.findIndex(function(e){return r.getRecordKey(e,t)===c})),o.shiftKey&&void 0!==l&&d!==l){var h=[],f=Math.sign(l-d),p=Math.abs(l-d),m=0,v=function(){var e=d+m*f;m+=1;var t=u[e],n=r.getRecordKey(t,e),o=r.getCheckboxPropsByItem(t,e);o.disabled||(s.includes(n)?i||(s=s.filter(function(e){return n!==e}),h.push(n)):i&&(s.push(n),h.push(n)))};while(m<=p)v();this.setState({pivot:d}),this.store.selectionDirty=!0,this.setSelectedRowKeys(s,{selectWay:"onSelectMultiple",record:e,checked:i,changeRowKeys:h,nativeEvent:o})}else i?s.push(this.getRecordKey(e,d)):s=s.filter(function(e){return c!==e}),this.setState({pivot:d}),this.store.selectionDirty=!0,this.setSelectedRowKeys(s,{selectWay:"onSelect",record:e,checked:i,changeRowKeys:void 0,nativeEvent:o})},handleRadioSelect:function(e,t,n){var r=n.target.checked,i=n.nativeEvent,o=this.getRecordKey(e,t),a=[o];this.store.selectionDirty=!0,this.setSelectedRowKeys(a,{selectWay:"onSelect",record:e,checked:r,changeRowKeys:void 0,nativeEvent:i})},handleSelectRow:function(e,t,n){var r=this,i=this.getFlatCurrentPageData(),o=this.store.selectionDirty?[]:this.getDefaultSelection(),a=this.store.selectedRowKeys.concat(o),s=i.filter(function(e,t){return!r.getCheckboxPropsByItem(e,t).props.disabled}).map(function(e,t){return r.getRecordKey(e,t)}),c=[],l="onSelectAll",u=void 0;switch(e){case"all":s.forEach(function(e){a.indexOf(e)<0&&(a.push(e),c.push(e))}),l="onSelectAll",u=!0;break;case"removeAll":s.forEach(function(e){a.indexOf(e)>=0&&(a.splice(a.indexOf(e),1),c.push(e))}),l="onSelectAll",u=!1;break;case"invert":s.forEach(function(e){a.indexOf(e)<0?a.push(e):a.splice(a.indexOf(e),1),c.push(e),l="onSelectInvert"});break;default:break}this.store.selectionDirty=!0;var d=this.rowSelection,h=2;if(d&&d.hideDefaultSelections&&(h=0),t>=h&&"function"===typeof n)return n(s);this.setSelectedRowKeys(a,{selectWay:l,checked:u,changeRowKeys:c})},handlePageChange:function(e){var t=this.$props,n=(0,r.A)({},this.sPagination);n.current=e||(n.current||1);for(var i=arguments.length,o=Array(i>1?i-1:0),c=1;c0&&(s===t||"both"===s)?n(Je.Ay,h):null},renderSelectionBox:function(e){var t=this,n=this.$createElement;return function(r,i,o){var a=t.getRecordKey(i,o),s=t.getCheckboxPropsByItem(i,o),c=function(n){"radio"===e?t.handleRadioSelect(i,o,n):t.handleSelect(i,o,n)},l=(0,D.v6)({props:{type:e,store:t.store,rowIndex:a,defaultSelection:t.getDefaultSelection()},on:{change:c}},s);return n("span",{on:{click:st}},[n(Fe,l)])}},renderRowSelection:function(e){var t=this,n=e.prefixCls,r=e.locale,i=e.getPopupContainer,a=this.$createElement,s=this.rowSelection,c=this.columns.concat();if(s){var l=this.getFlatCurrentPageData().filter(function(e,n){return!s.getCheckboxProps||!t.getCheckboxPropsByItem(e,n).props.disabled}),u=x()(n+"-selection-column",(0,o.A)({},n+"-selection-column-custom",s.selections)),h=(0,o.A)({key:"selection-column",customRender:this.renderSelectionBox(s.type),className:u,fixed:s.fixed,width:s.columnWidth,title:s.columnTitle},d,{class:n+"-selection-col"});if("radio"!==s.type){var f=l.every(function(e,n){return t.getCheckboxPropsByItem(e,n).props.disabled});h.title=h.title||a(We,{attrs:{store:this.store,locale:r,data:l,getCheckboxPropsByItem:this.getCheckboxPropsByItem,getRecordKey:this.getRecordKey,disabled:f,prefixCls:n,selections:s.selections,hideDefaultSelections:s.hideDefaultSelections,getPopupContainer:this.generatePopupContainerFunc(i)},on:{select:this.handleSelectRow}})}"fixed"in s?h.fixed=s.fixed:c.some(function(e){return"left"===e.fixed||!0===e.fixed})&&(h.fixed="left"),c[0]&&"selection-column"===c[0].key?c[0]=h:c.unshift(h)}return c},renderColumnsDropdown:function(e){var t=this,n=e.prefixCls,i=e.dropdownPrefixCls,a=e.columns,s=e.locale,c=e.getPopupContainer,l=this.$createElement,u=this.sSortOrder,d=this.sFilters;return Ye(a,function(e,a){var h,f=lt(e,a),p=void 0,m=void 0,v=e.customHeaderCell,g=t.isSortColumn(e);if(e.filters&&e.filters.length>0||e.filterDropdown){var y=f in d?d[f]:[];p=l(je,{attrs:{_propsSymbol:Symbol(),locale:s,column:e,selectedKeys:y,confirmFilter:t.handleFilter,prefixCls:n+"-filter",dropdownPrefixCls:i||"ant-dropdown",getPopupContainer:t.generatePopupContainerFunc(c)},key:"filter-dropdown"})}if(e.sorter){var _=e.sortDirections||t.sortDirections,b=g&&"ascend"===u,M=g&&"descend"===u,A=-1!==_.indexOf("ascend")&&l(me.A,{class:n+"-column-sorter-up "+(b?"on":"off"),attrs:{type:"caret-up",theme:"filled"},key:"caret-up"}),w=-1!==_.indexOf("descend")&&l(me.A,{class:n+"-column-sorter-down "+(M?"on":"off"),attrs:{type:"caret-down",theme:"filled"},key:"caret-down"});m=l("div",{attrs:{title:s.sortTitle},class:x()(n+"-column-sorter-inner",A&&w&&n+"-column-sorter-inner-full"),key:"sorter"},[A,w]),v=function(n){var i={};e.customHeaderCell&&(i=(0,r.A)({},e.customHeaderCell(n))),i.on=i.on||{};var o=i.on.click;return i.on.click=function(){t.toggleSortOrder(e),o&&o.apply(void 0,arguments)},i}}return(0,r.A)({},e,{className:x()(e.className,(h={},(0,o.A)(h,n+"-column-has-actions",m||p),(0,o.A)(h,n+"-column-has-filters",p),(0,o.A)(h,n+"-column-has-sorters",m),(0,o.A)(h,n+"-column-sort",g&&u),h)),title:[l("span",{key:"title",class:n+"-header-column"},[l("div",{class:m?n+"-column-sorters":void 0},[l("span",{class:n+"-column-title"},[t.renderColumnTitle(e.title)]),l("span",{class:n+"-column-sorter"},[m])])]),p],customHeaderCell:v})})},renderColumnTitle:function(e){var t=this.$data,n=t.sFilters,r=t.sSortOrder,i=t.sSortColumn;return e instanceof Function?e({filters:n,sortOrder:r,sortColumn:i}):e},renderTable:function(e){var t,n=this,a=e.prefixCls,s=e.renderEmpty,c=e.dropdownPrefixCls,l=e.contextLocale,u=e.getPopupContainer,d=e.transformCellText,h=this.$createElement,f=(0,D.Oq)(this),p=f.showHeader,m=f.locale,v=f.getPopupContainer,g=f.expandIcon,y=(0,i.A)(f,["showHeader","locale","getPopupContainer","expandIcon"]),_=this.getCurrentPageData(),b=this.expandedRowRender&&!1!==this.expandIconAsCell,M=v||u,A=(0,r.A)({},l,m);m&&m.emptyText||(A.emptyText=s(h,"Table"));var w=x()((t={},(0,o.A)(t,a+"-"+this.size,!0),(0,o.A)(t,a+"-bordered",this.bordered),(0,o.A)(t,a+"-empty",!_.length),(0,o.A)(t,a+"-without-column-header",!p),t)),k=this.renderRowSelection({prefixCls:a,locale:A,getPopupContainer:M}),L=this.renderColumnsDropdown({columns:k,prefixCls:a,dropdownPrefixCls:c,locale:A,getPopupContainer:M}).map(function(e,t){var n=(0,r.A)({},e);return n.key=lt(n,t),n}),C=L[0]&&"selection-column"===L[0].key?1:0;"expandIconColumnIndex"in y&&(C=y.expandIconColumnIndex);var S={key:"table",props:(0,r.A)({expandIcon:g||this.renderExpandIcon(a)},y,{customRow:function(e,t){return n.onRow(a,e,t)},components:this.sComponents,prefixCls:a,data:_,columns:L,showHeader:p,expandIconColumnIndex:C,expandIconAsCell:b,emptyText:A.emptyText,transformCellText:d}),on:(0,D.WM)(this),class:w,ref:"vcTable"};return h(ce,S)}},render:function(){var e=this,t=arguments[0],n=this.prefixCls,i=this.dropdownPrefixCls,o=this.transformCellText,a=this.getCurrentPageData(),s=this.configProvider,c=s.getPopupContainer,l=s.transformCellText,u=this.getPopupContainer||c,d=o||l,h=this.loading;h="boolean"===typeof h?{props:{spinning:h}}:{props:(0,r.A)({},h)};var f=this.configProvider.getPrefixCls,p=this.configProvider.renderEmpty,m=f("table",n),v=f("dropdown",i),g=t(Ze.A,{attrs:{componentName:"Table",defaultLocale:Qe.A.Table,children:function(t){return e.renderTable({prefixCls:m,renderEmpty:p,dropdownPrefixCls:v,contextLocale:t,getPopupContainer:u,transformCellText:d})}}}),y=this.hasPagination()&&a&&0!==a.length?m+"-with-pagination":m+"-without-pagination",_=(0,r.A)({},h,{class:h.props&&h.props.spinning?y+" "+m+"-spin-holder":""});return t("div",{class:x()(m+"-wrapper")},[t(Xe.A,_,[this.renderPagination(m,"top"),g,this.renderPagination(m,"bottom")])])}},_t=n(24415),bt=n(44807);re.Ay.use(_t.A,{name:"ant-ref"});var Mt={name:"ATable",Column:yt.Column,ColumnGroup:yt.ColumnGroup,props:yt.props,methods:{normalize:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=[];return t.forEach(function(t){if(t.tag){var o=(0,D.i7)(t),a=(0,D.gd)(t),s=(0,D.t0)(t),c=(0,D.Oq)(t),l=(0,D.kQ)(t),u={};Object.keys(l).forEach(function(e){var t=void 0;t=e.startsWith("update:")?"on-"+e.substr(7)+"-change":"on-"+e,u[(0,D.PT)(t)]=l[e]});var d=(0,D.Sk)(t),h=d["default"],f=(0,i.A)(d,["default"]),p=(0,r.A)({},f,c,{style:a,class:s},u);if(o&&(p.key=o),(0,D.xr)(t).__ANT_TABLE_COLUMN_GROUP)p.children=e.normalize("function"===typeof h?h():h);else{var m=t.data&&t.data.scopedSlots&&t.data.scopedSlots["default"];p.customRender=p.customRender||m}n.push(p)}}),n},updateColumns:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=[],o=this.$slots,a=this.$scopedSlots;return t.forEach(function(t){var s=t.slots,c=void 0===s?{}:s,l=t.scopedSlots,u=void 0===l?{}:l,d=(0,i.A)(t,["slots","scopedSlots"]),h=(0,r.A)({},d);Object.keys(c).forEach(function(e){var t=c[e];void 0===h[e]&&o[t]&&(h[e]=1===o[t].length?o[t][0]:o[t])}),Object.keys(u).forEach(function(e){var t=u[e];void 0===h[e]&&a[t]&&(h[e]=a[t])}),t.children&&(h.children=e.updateColumns(h.children)),n.push(h)}),n}},render:function(){var e=arguments[0],t=this.$slots,n=this.normalize,i=this.$scopedSlots,o=(0,D.Oq)(this),a=o.columns?this.updateColumns(o.columns):n(t["default"]),s=o.title,c=o.footer,l=i.title,u=i.footer,d=i.expandedRowRender,h=void 0===d?o.expandedRowRender:d,f=i.expandIcon;s=s||l,c=c||u;var p={props:(0,r.A)({},o,{columns:a,title:s,footer:c,expandedRowRender:h,expandIcon:this.$props.expandIcon||f}),on:(0,D.WM)(this)};return e(yt,p)},install:function(e){e.use(bt.A),e.component(Mt.name,Mt),e.component(Mt.Column.name,Mt.Column),e.component(Mt.ColumnGroup.name,Mt.ColumnGroup)}},At=Mt},28822:function(e,t,n){"use strict";n(29229),n(93693),n(29775),n(46925),n(63713),n(45562),n(25482)},14248:function(e,t,n){"use strict";n.d(t,{Ay:function(){return de}});var r=n(85505),i=n(24415),o=n(85471),a=n(75189),s=n.n(a),c=n(44508),l=n(97479),u=n(40255),d=n(4718),h=n(15848),f=n(11207),p={width:0,height:0,overflow:"hidden",position:"absolute"},m={name:"Sentinel",props:{setRef:d.A.func,prevElement:d.A.any,nextElement:d.A.any},methods:{onKeyDown:function(e){var t=e.target,n=e.which,r=e.shiftKey,i=this.$props,o=i.nextElement,a=i.prevElement;n===f.A.TAB&&document.activeElement===t&&(!r&&o&&o.focus(),r&&a&&a.focus())}},render:function(){var e=arguments[0],t=this.$props.setRef;return e("div",s()([{attrs:{tabIndex:0}},{directives:[{name:"ant-ref",value:t}]},{style:p,on:{keydown:this.onKeyDown},attrs:{role:"presentation"}}]),[this.$slots["default"]])}},v={name:"TabPane",props:{active:d.A.bool,destroyInactiveTabPane:d.A.bool,forceRender:d.A.bool,placeholder:d.A.any,rootPrefixCls:d.A.string,tab:d.A.any,closable:d.A.bool,disabled:d.A.bool},inject:{sentinelContext:{default:function(){return{}}}},render:function(){var e,t=arguments[0],n=this.$props,r=n.destroyInactiveTabPane,i=n.active,o=n.forceRender,a=n.rootPrefixCls,s=this.$slots["default"],l=(0,h.nu)(this,"placeholder");this._isActived=this._isActived||i;var u=a+"-tabpane",d=(e={},(0,c.A)(e,u,1),(0,c.A)(e,u+"-inactive",!i),(0,c.A)(e,u+"-active",i),e),f=r?i:this._isActived,p=f||o,v=this.sentinelContext,g=v.sentinelStart,y=v.sentinelEnd,_=v.setPanelSentinelStart,b=v.setPanelSentinelEnd,M=void 0,A=void 0;return i&&p&&(M=t(m,{attrs:{setRef:_,prevElement:g}}),A=t(m,{attrs:{setRef:b,nextElement:y}})),t("div",{class:d,attrs:{role:"tabpanel","aria-hidden":i?"false":"true"}},[M,p?s:l,A])}},g=n(90034),y=n(52315),_=n(93146),b=n.n(_),M={LEFT:37,UP:38,RIGHT:39,DOWN:40},A=n(51927),w=function(e){return void 0!==e&&null!==e&&""!==e},x=w;function k(e){var t=void 0,n=e.children;return n.forEach(function(e){!e||x(t)||e.disabled||(t=e.key)}),t}function L(e,t){var n=e.children,r=n.map(function(e){return e&&e.key});return r.indexOf(t)>=0}var C={name:"Tabs",mixins:[y.A],model:{prop:"activeKey",event:"change"},props:{destroyInactiveTabPane:d.A.bool,renderTabBar:d.A.func.isRequired,renderTabContent:d.A.func.isRequired,navWrapper:d.A.func.def(function(e){return e}),children:d.A.any.def([]),prefixCls:d.A.string.def("ant-tabs"),tabBarPosition:d.A.string.def("top"),activeKey:d.A.oneOfType([d.A.string,d.A.number]),defaultActiveKey:d.A.oneOfType([d.A.string,d.A.number]),__propsSymbol__:d.A.any,direction:d.A.string.def("ltr"),tabBarGutter:d.A.number},data:function(){var e=(0,h.Oq)(this),t=void 0;return t="activeKey"in e?e.activeKey:"defaultActiveKey"in e?e.defaultActiveKey:k(e),{_activeKey:t}},provide:function(){return{sentinelContext:this}},watch:{__propsSymbol__:function(){var e=(0,h.Oq)(this);"activeKey"in e?this.setState({_activeKey:e.activeKey}):L(e,this.$data._activeKey)||this.setState({_activeKey:k(e)})}},beforeDestroy:function(){this.destroy=!0,b().cancel(this.sentinelId)},methods:{onTabClick:function(e,t){this.tabBar.componentOptions&&this.tabBar.componentOptions.listeners&&this.tabBar.componentOptions.listeners.tabClick&&this.tabBar.componentOptions.listeners.tabClick(e,t),this.setActiveKey(e)},onNavKeyDown:function(e){var t=e.keyCode;if(t===M.RIGHT||t===M.DOWN){e.preventDefault();var n=this.getNextActiveKey(!0);this.onTabClick(n)}else if(t===M.LEFT||t===M.UP){e.preventDefault();var r=this.getNextActiveKey(!1);this.onTabClick(r)}},onScroll:function(e){var t=e.target,n=e.currentTarget;t===n&&t.scrollLeft>0&&(t.scrollLeft=0)},setSentinelStart:function(e){this.sentinelStart=e},setSentinelEnd:function(e){this.sentinelEnd=e},setPanelSentinelStart:function(e){e!==this.panelSentinelStart&&this.updateSentinelContext(),this.panelSentinelStart=e},setPanelSentinelEnd:function(e){e!==this.panelSentinelEnd&&this.updateSentinelContext(),this.panelSentinelEnd=e},setActiveKey:function(e){if(this.$data._activeKey!==e){var t=(0,h.Oq)(this);"activeKey"in t||this.setState({_activeKey:e}),this.__emit("change",e)}},getNextActiveKey:function(e){var t=this.$data._activeKey,n=[];this.$props.children.forEach(function(t){var r=(0,h.IV)(t,"disabled");t&&!r&&""!==r&&(e?n.push(t):n.unshift(t))});var r=n.length,i=r&&n[0].key;return n.forEach(function(e,o){e.key===t&&(i=o===r-1?n[0].key:n[o+1].key)}),i},updateSentinelContext:function(){var e=this;this.destroy||(b().cancel(this.sentinelId),this.sentinelId=b()(function(){e.destroy||e.$forceUpdate()}))}},render:function(){var e,t=arguments[0],n=this.$props,i=n.prefixCls,o=n.navWrapper,a=n.tabBarPosition,s=n.renderTabContent,l=n.renderTabBar,u=n.destroyInactiveTabPane,d=n.direction,f=n.tabBarGutter,p=(e={},(0,c.A)(e,i,1),(0,c.A)(e,i+"-"+a,1),(0,c.A)(e,i+"-rtl","rtl"===d),e);this.tabBar=l();var v=(0,A.Ob)(this.tabBar,{props:{prefixCls:i,navWrapper:o,tabBarPosition:a,panels:n.children,activeKey:this.$data._activeKey,direction:d,tabBarGutter:f},on:{keydown:this.onNavKeyDown,tabClick:this.onTabClick},key:"tabBar"}),y=(0,A.Ob)(s(),{props:{prefixCls:i,tabBarPosition:a,activeKey:this.$data._activeKey,destroyInactiveTabPane:u,direction:d},on:{change:this.setActiveKey},children:n.children,key:"tabContent"}),_=t(m,{key:"sentinelStart",attrs:{setRef:this.setSentinelStart,nextElement:this.panelSentinelStart}}),b=t(m,{key:"sentinelEnd",attrs:{setRef:this.setSentinelEnd,prevElement:this.panelSentinelEnd}}),M=[];"bottom"===a?M.push(_,y,b,v):M.push(v,_,y,b);var w=(0,r.A)({},(0,g.A)((0,h.WM)(this),["change"]),{scroll:this.onScroll});return t("div",{on:w,class:p},[M])}};o.Ay.use(i.A,{name:"ant-ref"});var S=C;function z(e){var t=[];return e.forEach(function(e){e.data&&t.push(e)}),t}function T(e,t){for(var n=z(e),r=0;r2&&void 0!==arguments[2]?arguments[2]:"ltr",r=Y(t)?"translateY":"translateX";return Y(t)||"rtl"!==n?r+"("+100*-e+"%) translateZ(0)":r+"("+100*e+"%) translateZ(0)"}function P(e,t){var n=Y(t)?"marginTop":"marginLeft";return(0,c.A)({},n,100*-e+"%")}function E(e,t){return+window.getComputedStyle(e).getPropertyValue(t).replace("px","")}function j(e,t){return+e.getPropertyValue(t).replace("px","")}function F(e,t,n,r,i){var o=E(i,"padding-"+e);if(!r||!r.parentNode)return o;var a=r.parentNode.childNodes;return Array.prototype.some.call(a,function(i){var a=window.getComputedStyle(i);return i!==r?(o+=j(a,"margin-"+e),o+=i[t],o+=j(a,"margin-"+n),"content-box"===a.boxSizing&&(o+=j(a,"border-"+e+"-width")+j(a,"border-"+n+"-width")),!1):(o+=j(a,"margin-"+e),!0)}),o}function I(e,t){return F("left","offsetWidth","right",e,t)}function $(e,t){return F("top","offsetHeight","bottom",e,t)}var R={name:"TabContent",props:{animated:{type:Boolean,default:!0},animatedWithMargin:{type:Boolean,default:!0},prefixCls:{default:"ant-tabs",type:String},activeKey:d.A.oneOfType([d.A.string,d.A.number]),tabBarPosition:String,direction:d.A.string,destroyInactiveTabPane:d.A.bool},computed:{classes:function(){var e,t=this.animated,n=this.prefixCls;return e={},(0,c.A)(e,n+"-content",!0),(0,c.A)(e,t?n+"-content-animated":n+"-content-no-animated",!0),e}},methods:{getTabPanes:function(){var e=this.$props,t=e.activeKey,n=this.$slots["default"]||[],r=[];return n.forEach(function(n){if(n){var i=n.key,o=t===i;r.push((0,A.Ob)(n,{props:{active:o,destroyInactiveTabPane:e.destroyInactiveTabPane,rootPrefixCls:e.prefixCls}}))}}),r}},render:function(){var e=arguments[0],t=this.activeKey,n=this.tabBarPosition,r=this.animated,i=this.animatedWithMargin,o=this.direction,a=this.classes,s={};if(r&&this.$slots["default"]){var c=T(this.$slots["default"],t);if(-1!==c){var l=i?P(c,n):D(V(c,n,o));s=l}else s={display:"none"}}return e("div",{class:a,style:s},[this.getTabPanes()])}},N=function(e){if("undefined"!==typeof window&&window.document&&window.document.documentElement){var t=Array.isArray(e)?e:[e],n=window.document.documentElement;return t.some(function(e){return e in n.style})}return!1},W=N(["flex","webkitFlex","Flex","msFlex"]),B=n(25592);function K(e,t){var n=e.$props,r=n.styles,i=void 0===r?{}:r,o=n.panels,a=n.activeKey,s=n.direction,c=e.getRef("root"),l=e.getRef("nav")||c,u=e.getRef("inkBar"),d=e.getRef("activeTab"),h=u.style,f=e.$props.tabBarPosition,p=T(o,a);if(t&&(h.display="none"),d){var m=d,v=H(h);if(O(h,""),h.width="",h.height="",h.left="",h.top="",h.bottom="",h.right="","top"===f||"bottom"===f){var g=I(m,l),y=m.offsetWidth;y===c.offsetWidth?y=0:i.inkBar&&void 0!==i.inkBar.width&&(y=parseFloat(i.inkBar.width,10),y&&(g+=(m.offsetWidth-y)/2)),"rtl"===s&&(g=E(m,"margin-left")-g),v?O(h,"translate3d("+g+"px,0,0)"):h.left=g+"px",h.width=y+"px"}else{var _=$(m,l,!0),b=m.offsetHeight;i.inkBar&&void 0!==i.inkBar.height&&(b=parseFloat(i.inkBar.height,10),b&&(_+=(m.offsetHeight-b)/2)),v?(O(h,"translate3d(0,"+_+"px,0)"),h.top="0"):h.top=_+"px",h.height=b+"px"}}h.display=-1!==p?"block":"none"}var U={name:"InkTabBarNode",mixins:[y.A],props:{inkBarAnimated:{type:Boolean,default:!0},direction:d.A.string,prefixCls:String,styles:Object,tabBarPosition:String,saveRef:d.A.func.def(function(){}),getRef:d.A.func.def(function(){}),panels:d.A.array,activeKey:d.A.oneOfType([d.A.string,d.A.number])},updated:function(){this.$nextTick(function(){K(this)})},mounted:function(){this.$nextTick(function(){K(this,!0)})},render:function(){var e,t=arguments[0],n=this.prefixCls,r=this.styles,i=void 0===r?{}:r,o=this.inkBarAnimated,a=n+"-ink-bar",l=(e={},(0,c.A)(e,a,!0),(0,c.A)(e,o?a+"-animated":a+"-no-animated",!0),e);return t("div",s()([{style:i.inkBar,class:l,key:"inkBar"},{directives:[{name:"ant-ref",value:this.saveRef("inkBar")}]}]))}},q=n(9771),G=n.n(q);function J(){}var X={name:"TabBarTabsNode",mixins:[y.A],props:{activeKey:d.A.oneOfType([d.A.string,d.A.number]),panels:d.A.any.def([]),prefixCls:d.A.string.def(""),tabBarGutter:d.A.any.def(null),onTabClick:d.A.func,saveRef:d.A.func.def(J),getRef:d.A.func.def(J),renderTabBarNode:d.A.func,tabBarPosition:d.A.string,direction:d.A.string},render:function(){var e=this,t=arguments[0],n=this.$props,r=n.panels,i=n.activeKey,o=n.prefixCls,a=n.tabBarGutter,l=n.saveRef,u=n.tabBarPosition,d=n.direction,f=[],p=this.renderTabBarNode||this.$scopedSlots.renderTabBarNode;return r.forEach(function(n,m){if(n){var v=(0,h.Oq)(n),g=n.key,y=i===g?o+"-tab-active":"";y+=" "+o+"-tab";var _={on:{}},b=v.disabled||""===v.disabled;b?y+=" "+o+"-tab-disabled":_.on.click=function(){e.__emit("tabClick",g)};var M=[];i===g&&M.push({name:"ant-ref",value:l("activeTab")});var A=(0,h.nu)(n,"tab"),w=a&&m===r.length-1?0:a;w="number"===typeof w?w+"px":w;var x="rtl"===d?"marginLeft":"marginRight",k=(0,c.A)({},Y(u)?"marginBottom":x,w);G()(void 0!==A,"There must be `tab` property or slot on children of Tabs.");var L=t("div",s()([{attrs:{role:"tab","aria-disabled":b?"true":"false","aria-selected":i===g?"true":"false"}},_,{class:y,key:g,style:k},{directives:M}]),[A]);p&&(L=p(L)),f.push(L)}}),t("div",{directives:[{name:"ant-ref",value:this.saveRef("navTabsContainer")}]},[f])}};function Z(){}var Q={name:"TabBarRootNode",mixins:[y.A],props:{saveRef:d.A.func.def(Z),getRef:d.A.func.def(Z),prefixCls:d.A.string.def(""),tabBarPosition:d.A.string.def("top"),extraContent:d.A.any},methods:{onKeyDown:function(e){this.__emit("keydown",e)}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.onKeyDown,i=this.tabBarPosition,o=this.extraContent,a=(0,c.A)({},t+"-bar",!0),l="top"===i||"bottom"===i,u=l?{float:"right"}:{},d=this.$slots["default"],h=d;return o&&(h=[(0,A.Ob)(o,{key:"extra",style:(0,r.A)({},u)}),(0,A.Ob)(d,{key:"content"})],h=l?h:h.reverse()),e("div",s()([{attrs:{role:"tablist",tabIndex:"0"},class:a,on:{keydown:n}},{directives:[{name:"ant-ref",value:this.saveRef("root")}]}]),[h])}},ee=n(38221),te=n.n(ee),ne=n(43591);function re(){}var ie={name:"ScrollableTabBarNode",mixins:[y.A],props:{activeKey:d.A.any,getRef:d.A.func.def(function(){}),saveRef:d.A.func.def(function(){}),tabBarPosition:d.A.oneOf(["left","right","top","bottom"]).def("left"),prefixCls:d.A.string.def(""),scrollAnimated:d.A.bool.def(!0),navWrapper:d.A.func.def(function(e){return e}),prevIcon:d.A.any,nextIcon:d.A.any,direction:d.A.string},data:function(){return this.offset=0,this.prevProps=(0,r.A)({},this.$props),{next:!1,prev:!1}},watch:{tabBarPosition:function(){var e=this;this.tabBarPositionChange=!0,this.$nextTick(function(){e.setOffset(0)})}},mounted:function(){var e=this;this.$nextTick(function(){e.updatedCal(),e.debouncedResize=te()(function(){e.setNextPrev(),e.scrollToActiveTab()},200),e.resizeObserver=new ne.A(e.debouncedResize),e.resizeObserver.observe(e.$props.getRef("container"))})},updated:function(){var e=this;this.$nextTick(function(){e.updatedCal(e.prevProps),e.prevProps=(0,r.A)({},e.$props)})},beforeDestroy:function(){this.resizeObserver&&this.resizeObserver.disconnect(),this.debouncedResize&&this.debouncedResize.cancel&&this.debouncedResize.cancel()},methods:{updatedCal:function(e){var t=this,n=this.$props;e&&e.tabBarPosition!==n.tabBarPosition?this.setOffset(0):this.isNextPrevShown(this.$data)!==this.isNextPrevShown(this.setNextPrev())?(this.$forceUpdate(),this.$nextTick(function(){t.scrollToActiveTab()})):e&&n.activeKey===e.activeKey||this.scrollToActiveTab()},setNextPrev:function(){var e=this.$props.getRef("nav"),t=this.$props.getRef("navTabsContainer"),n=this.getScrollWH(t||e),r=this.getOffsetWH(this.$props.getRef("container"))+1,i=this.getOffsetWH(this.$props.getRef("navWrap")),o=this.offset,a=r-n,s=this.next,c=this.prev;if(a>=0)s=!1,this.setOffset(0,!1),o=0;else if(a1&&void 0!==arguments[1])||arguments[1],n=Math.min(0,e);if(this.offset!==n){this.offset=n;var r={},i=this.$props.tabBarPosition,o=this.$props.getRef("nav").style,a=H(o);"left"===i||"right"===i?r=a?{value:"translate3d(0,"+n+"px,0)"}:{name:"top",value:n+"px"}:a?("rtl"===this.$props.direction&&(n=-n),r={value:"translate3d("+n+"px,0,0)"}):r={name:"left",value:n+"px"},a?O(o,r.value):o[r.name]=r.value,t&&this.setNextPrev()}},setPrev:function(e){this.prev!==e&&(this.prev=e)},setNext:function(e){this.next!==e&&(this.next=e)},isNextPrevShown:function(e){return e?e.next||e.prev:this.next||this.prev},prevTransitionEnd:function(e){if("opacity"===e.propertyName){var t=this.$props.getRef("container");this.scrollToActiveTab({target:t,currentTarget:t})}},scrollToActiveTab:function(e){var t=this.$props.getRef("activeTab"),n=this.$props.getRef("navWrap");if((!e||e.target===e.currentTarget)&&t){var r=this.isNextPrevShown()&&this.lastNextPrevShown;if(this.lastNextPrevShown=this.isNextPrevShown(),r){var i=this.getScrollWH(t),o=this.getOffsetWH(n),a=this.offset,s=this.getOffsetLT(n),c=this.getOffsetLT(t);s>c?(a+=s-c,this.setOffset(a)):s+o=0),e),L={props:(0,r.A)({},this.$props,this.$attrs,{inkBarAnimated:y,extraContent:d,prevIcon:w,nextIcon:x}),style:i,on:(0,h.WM)(this),class:k},C=void 0;return s?(C=s(L,ae),(0,A.Ob)(C,L)):t(ae,L)}},ce=se,le={TabPane:v,name:"ATabs",model:{prop:"activeKey",event:"change"},props:{prefixCls:d.A.string,activeKey:d.A.oneOfType([d.A.string,d.A.number]),defaultActiveKey:d.A.oneOfType([d.A.string,d.A.number]),hideAdd:d.A.bool.def(!1),tabBarStyle:d.A.object,tabBarExtraContent:d.A.any,destroyInactiveTabPane:d.A.bool.def(!1),type:d.A.oneOf(["line","card","editable-card"]),tabPosition:d.A.oneOf(["top","right","bottom","left"]).def("top"),size:d.A.oneOf(["default","small","large"]),animated:d.A.oneOfType([d.A.bool,d.A.object]),tabBarGutter:d.A.number,renderTabBar:d.A.func},inject:{configProvider:{default:function(){return B.f}}},mounted:function(){var e=" no-flex",t=this.$el;t&&!W&&-1===t.className.indexOf(e)&&(t.className+=e)},methods:{removeTab:function(e,t){t.stopPropagation(),x(e)&&this.$emit("edit",e,"remove")},handleChange:function(e){this.$emit("change",e)},createNewTab:function(e){this.$emit("edit",e,"add")},onTabClick:function(e){this.$emit("tabClick",e)},onPrevClick:function(e){this.$emit("prevClick",e)},onNextClick:function(e){this.$emit("nextClick",e)}},render:function(){var e,t,n=this,i=arguments[0],o=(0,h.Oq)(this),a=o.prefixCls,d=o.size,f=o.type,p=void 0===f?"line":f,m=o.tabPosition,v=o.animated,g=void 0===v||v,y=o.hideAdd,_=o.renderTabBar,b=this.configProvider.getPrefixCls,M=b("tabs",a),w=(0,h.Gk)(this.$slots["default"]),x=(0,h.nu)(this,"tabBarExtraContent"),k="object"===("undefined"===typeof g?"undefined":(0,l.A)(g))?g.tabPane:g;"line"!==p&&(k="animated"in o&&k);var L=(e={},(0,c.A)(e,M+"-vertical","left"===m||"right"===m),(0,c.A)(e,M+"-"+d,!!d),(0,c.A)(e,M+"-card",p.indexOf("card")>=0),(0,c.A)(e,M+"-"+p,!0),(0,c.A)(e,M+"-no-animation",!k),e),C=[];"editable-card"===p&&(C=[],w.forEach(function(e,t){var r=(0,h.Oq)(e),o=r.closable;o="undefined"===typeof o||o;var a=o?i(u.A,{attrs:{type:"close"},class:M+"-close-x",on:{click:function(t){return n.removeTab(e.key,t)}}}):null;C.push((0,A.Ob)(e,{props:{tab:i("div",{class:o?void 0:M+"-tab-unclosable"},[(0,h.nu)(e,"tab"),a])},key:e.key||t}))}),y||(x=i("span",[i(u.A,{attrs:{type:"plus"},class:M+"-new-tab",on:{click:this.createNewTab}}),x]))),x=x?i("div",{class:M+"-extra-content"},[x]):null;var z=_||this.$scopedSlots.renderTabBar,T=(0,h.WM)(this),O={props:(0,r.A)({},this.$props,{prefixCls:M,tabBarExtraContent:x,renderTabBar:z}),on:T},H=(t={},(0,c.A)(t,M+"-"+m+"-content",!0),(0,c.A)(t,M+"-card-content",p.indexOf("card")>=0),t),D={props:(0,r.A)({},(0,h.Oq)(this),{prefixCls:M,tabBarPosition:m,renderTabBar:function(){return i(ce,s()([{key:"tabBar"},O]))},renderTabContent:function(){return i(R,{class:H,attrs:{animated:k,animatedWithMargin:!0}})},children:C.length>0?C:w,__propsSymbol__:Symbol()}),on:(0,r.A)({},T,{change:this.handleChange}),class:L};return i(S,D)}},ue=n(44807);le.TabPane=(0,r.A)({},v,{name:"ATabPane",__ANT_TAB_PANE:!0}),le.TabContent=(0,r.A)({},R,{name:"ATabContent"}),o.Ay.use(i.A,{name:"ant-ref"}),le.install=function(e){e.use(ue.A),e.component(le.name,le),e.component(le.TabPane.name,le.TabPane),e.component(le.TabContent.name,le.TabContent)};var de=le},14686:function(e,t,n){"use strict";n(29229)},87298:function(e,t,n){"use strict";n.d(t,{A:function(){return b}});var r=n(75189),i=n.n(r),o=n(44508),a=n(4718),s=n(40255),c=n(80178),l=n(90034),u=n(98416),d=n(15848),h=n(52315),f=n(25592),p=n(36873),m=["pink","red","yellow","orange","cyan","green","blue","purple","geekblue","magenta","volcano","gold","lime"],v=new RegExp("^("+m.join("|")+")(-inverse)?$"),g={name:"ATag",mixins:[h.A],model:{prop:"visible",event:"close.visible"},props:{prefixCls:a.A.string,color:a.A.string,closable:a.A.bool.def(!1),visible:a.A.bool,afterClose:a.A.func},inject:{configProvider:{default:function(){return f.f}}},data:function(){var e=!0,t=(0,d.Oq)(this);return"visible"in t&&(e=this.visible),(0,p.A)(!("afterClose"in t),"Tag","'afterClose' will be deprecated, please use 'close' event, we will remove this in the next version."),{_visible:e}},watch:{visible:function(e){this.setState({_visible:e})}},methods:{setVisible:function(e,t){this.$emit("close",t),this.$emit("close.visible",!1);var n=this.afterClose;n&&n(),t.defaultPrevented||(0,d.cK)(this,"visible")||this.setState({_visible:e})},handleIconClick:function(e){e.stopPropagation(),this.setVisible(!1,e)},isPresetColor:function(){var e=this.$props.color;return!!e&&v.test(e)},getTagStyle:function(){var e=this.$props.color,t=this.isPresetColor();return{backgroundColor:e&&!t?e:void 0}},getTagClassName:function(e){var t,n=this.$props.color,r=this.isPresetColor();return t={},(0,o.A)(t,e,!0),(0,o.A)(t,e+"-"+n,r),(0,o.A)(t,e+"-has-color",n&&!r),t},renderCloseIcon:function(){var e=this.$createElement,t=this.$props.closable;return t?e(s.A,{attrs:{type:"close"},on:{click:this.handleIconClick}}):null}},render:function(){var e=arguments[0],t=this.$props.prefixCls,n=this.configProvider.getPrefixCls,r=n("tag",t),o=this.$data._visible,a=e("span",i()([{directives:[{name:"show",value:o}]},{on:(0,l.A)((0,d.WM)(this),["close"])},{class:this.getTagClassName(r),style:this.getTagStyle()}]),[this.$slots["default"],this.renderCloseIcon()]),s=(0,c.A)(r+"-zoom",{appear:!1});return e(u.A,[e("transition",s,[a])])}},y={name:"ACheckableTag",model:{prop:"checked"},props:{prefixCls:a.A.string,checked:Boolean},inject:{configProvider:{default:function(){return f.f}}},computed:{classes:function(){var e,t=this.checked,n=this.prefixCls,r=this.configProvider.getPrefixCls,i=r("tag",n);return e={},(0,o.A)(e,""+i,!0),(0,o.A)(e,i+"-checkable",!0),(0,o.A)(e,i+"-checkable-checked",t),e}},methods:{handleClick:function(){var e=this.checked;this.$emit("input",!e),this.$emit("change",!e)}},render:function(){var e=arguments[0],t=this.classes,n=this.handleClick,r=this.$slots;return e("div",{class:t,on:{click:n}},[r["default"]])}},_=n(44807);g.CheckableTag=y,g.install=function(e){e.use(_.A),e.component(g.name,g),e.component(g.CheckableTag.name,g.CheckableTag)};var b=g},5554:function(e,t,n){"use strict";n(29229)},83766:function(e,t,n){"use strict";n.d(t,{Ay:function(){return H},PH:function(){return z}});var r=n(44508),i=n(85505),o=n(90034),a=n(95093),s=n.n(a),c=n(46942),l=n.n(c),u=n(4718),d=n(52315),h=n(15848),f=n(51927),p=n(47006),m=n(7772),v={adjustX:1,adjustY:1},g=[0,0],y={bottomLeft:{points:["tl","tl"],overflow:v,offset:[0,-3],targetOffset:g},bottomRight:{points:["tr","tr"],overflow:v,offset:[0,-3],targetOffset:g},topRight:{points:["br","br"],overflow:v,offset:[0,3],targetOffset:g},topLeft:{points:["bl","bl"],overflow:v,offset:[0,3],targetOffset:g}},_=y;function b(){}var M={name:"VcTimePicker",mixins:[d.A],props:(0,h.CB)({prefixCls:u.A.string,clearText:u.A.string,value:u.A.any,defaultOpenValue:{type:Object,default:function(){return s()()}},inputReadOnly:u.A.bool,disabled:u.A.bool,allowEmpty:u.A.bool,defaultValue:u.A.any,open:u.A.bool,defaultOpen:u.A.bool,align:u.A.object,placement:u.A.any,transitionName:u.A.string,getPopupContainer:u.A.func,placeholder:u.A.string,format:u.A.string,showHour:u.A.bool,showMinute:u.A.bool,showSecond:u.A.bool,popupClassName:u.A.string,popupStyle:u.A.object,disabledHours:u.A.func,disabledMinutes:u.A.func,disabledSeconds:u.A.func,hideDisabledOptions:u.A.bool,name:u.A.string,autoComplete:u.A.string,use12Hours:u.A.bool,hourStep:u.A.number,minuteStep:u.A.number,secondStep:u.A.number,focusOnOpen:u.A.bool,autoFocus:u.A.bool,id:u.A.string,inputIcon:u.A.any,clearIcon:u.A.any,addon:u.A.func},{clearText:"clear",prefixCls:"rc-time-picker",defaultOpen:!1,inputReadOnly:!1,popupClassName:"",popupStyle:{},align:{},allowEmpty:!0,showHour:!0,showMinute:!0,showSecond:!0,disabledHours:b,disabledMinutes:b,disabledSeconds:b,hideDisabledOptions:!1,placement:"bottomLeft",use12Hours:!1,focusOnOpen:!1}),data:function(){var e=this.defaultOpen,t=this.defaultValue,n=this.open,r=void 0===n?e:n,i=this.value,o=void 0===i?t:i;return{sOpen:r,sValue:o}},watch:{value:function(e){this.setState({sValue:e})},open:function(e){void 0!==e&&this.setState({sOpen:e})}},mounted:function(){var e=this;this.$nextTick(function(){e.autoFocus&&e.focus()})},methods:{onPanelChange:function(e){this.setValue(e)},onAmPmChange:function(e){this.__emit("amPmChange",e)},onClear:function(e){e.stopPropagation(),this.setValue(null),this.setOpen(!1)},onVisibleChange:function(e){this.setOpen(e)},onEsc:function(){this.setOpen(!1),this.focus()},onKeyDown:function(e){40===e.keyCode&&this.setOpen(!0)},onKeyDown2:function(e){this.__emit("keydown",e)},setValue:function(e){(0,h.cK)(this,"value")||this.setState({sValue:e}),this.__emit("change",e)},getFormat:function(){var e=this.format,t=this.showHour,n=this.showMinute,r=this.showSecond,i=this.use12Hours;if(e)return e;if(i){var o=[t?"h":"",n?"mm":"",r?"ss":""].filter(function(e){return!!e}).join(":");return o.concat(" a")}return[t?"HH":"",n?"mm":"",r?"ss":""].filter(function(e){return!!e}).join(":")},getPanelElement:function(){var e=this.$createElement,t=this.prefixCls,n=this.placeholder,r=this.disabledHours,i=this.addon,o=this.disabledMinutes,a=this.disabledSeconds,s=this.hideDisabledOptions,c=this.inputReadOnly,l=this.showHour,u=this.showMinute,d=this.showSecond,f=this.defaultOpenValue,p=this.clearText,v=this.use12Hours,g=this.focusOnOpen,y=this.onKeyDown2,_=this.hourStep,b=this.minuteStep,M=this.secondStep,A=this.sValue,w=(0,h.nu)(this,"clearIcon");return e(m.A,{attrs:{clearText:p,prefixCls:t+"-panel",value:A,inputReadOnly:c,defaultOpenValue:f,showHour:l,showMinute:u,showSecond:d,format:this.getFormat(),placeholder:n,disabledHours:r,disabledMinutes:o,disabledSeconds:a,hideDisabledOptions:s,use12Hours:v,hourStep:_,minuteStep:b,secondStep:M,focusOnOpen:g,clearIcon:w,addon:i},ref:"panel",on:{change:this.onPanelChange,amPmChange:this.onAmPmChange,esc:this.onEsc,keydown:y}})},getPopupClassName:function(){var e=this.showHour,t=this.showMinute,n=this.showSecond,i=this.use12Hours,o=this.prefixCls,a=this.popupClassName,s=0;return e&&(s+=1),t&&(s+=1),n&&(s+=1),i&&(s+=1),l()(a,(0,r.A)({},o+"-panel-narrow",(!e||!t||!n)&&!i),o+"-panel-column-"+s)},setOpen:function(e){this.sOpen!==e&&((0,h.cK)(this,"open")||this.setState({sOpen:e}),e?this.__emit("open",{open:e}):this.__emit("close",{open:e}))},focus:function(){this.$refs.picker.focus()},blur:function(){this.$refs.picker.blur()},onFocus:function(e){this.__emit("focus",e)},onBlur:function(e){this.__emit("blur",e)},renderClearButton:function(){var e=this,t=this.$createElement,n=this.sValue,r=this.$props,i=r.prefixCls,o=r.allowEmpty,a=r.clearText,s=r.disabled;if(!o||!n||s)return null;var c=(0,h.nu)(this,"clearIcon");if((0,h.zO)(c)){var l=(0,h.kQ)(c)||{},u=l.click;return(0,f.Ob)(c,{on:{click:function(){u&&u.apply(void 0,arguments),e.onClear.apply(e,arguments)}}})}return t("a",{attrs:{role:"button",title:a,tabIndex:0},class:i+"-clear",on:{click:this.onClear}},[c||t("i",{class:i+"-clear-icon"})])}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.placeholder,r=this.placement,i=this.align,o=this.id,a=this.disabled,s=this.transitionName,c=this.getPopupContainer,l=this.name,u=this.autoComplete,d=this.autoFocus,f=this.sOpen,m=this.sValue,v=this.onFocus,g=this.onBlur,y=this.popupStyle,b=this.getPopupClassName(),M=(0,h.nu)(this,"inputIcon");return e(p.A,{attrs:{prefixCls:t+"-panel",popupClassName:b,popupStyle:y,popupAlign:i,builtinPlacements:_,popupPlacement:r,action:a?[]:["click"],destroyPopupOnHide:!0,getPopupContainer:c,popupTransitionName:s,popupVisible:f},on:{popupVisibleChange:this.onVisibleChange}},[e("template",{slot:"popup"},[this.getPanelElement()]),e("span",{class:""+t},[e("input",{class:t+"-input",ref:"picker",attrs:{type:"text",placeholder:n,name:l,disabled:a,autoComplete:u,autoFocus:d,readOnly:!0,id:o},on:{keydown:this.onKeyDown,focus:v,blur:g},domProps:{value:m&&m.format(this.getFormat())||""}}),M||e("span",{class:t+"-icon"}),this.renderClearButton()])])}},A=n(38377),w=n(36873),x=n(40255),k=n(68265),L=n(25592),C=n(44807),S=n(6566);function z(e){return{showHour:e.indexOf("H")>-1||e.indexOf("h")>-1||e.indexOf("k")>-1,showMinute:e.indexOf("m")>-1,showSecond:e.indexOf("s")>-1}}var T=function(){return{size:u.A.oneOf(["large","default","small"]),value:S.nP,defaultValue:S.nP,open:u.A.bool,format:u.A.string,disabled:u.A.bool,placeholder:u.A.string,prefixCls:u.A.string,hideDisabledOptions:u.A.bool,disabledHours:u.A.func,disabledMinutes:u.A.func,disabledSeconds:u.A.func,getPopupContainer:u.A.func,use12Hours:u.A.bool,focusOnOpen:u.A.bool,hourStep:u.A.number,minuteStep:u.A.number,secondStep:u.A.number,allowEmpty:u.A.bool,allowClear:u.A.bool,inputReadOnly:u.A.bool,clearText:u.A.string,defaultOpenValue:u.A.object,popupClassName:u.A.string,popupStyle:u.A.object,suffixIcon:u.A.any,align:u.A.object,placement:u.A.any,transitionName:u.A.string,autoFocus:u.A.bool,addon:u.A.any,clearIcon:u.A.any,locale:u.A.object,valueFormat:u.A.string}},O={name:"ATimePicker",mixins:[d.A],props:(0,h.CB)(T(),{align:{offset:[0,-2]},disabled:!1,disabledHours:void 0,disabledMinutes:void 0,disabledSeconds:void 0,hideDisabledOptions:!1,placement:"bottomLeft",transitionName:"slide-up",focusOnOpen:!0,allowClear:!0}),model:{prop:"value",event:"change"},provide:function(){return{savePopupRef:this.savePopupRef}},inject:{configProvider:{default:function(){return L.f}}},data:function(){var e=this.value,t=this.defaultValue,n=this.valueFormat;return(0,S.n1)("TimePicker",t,"defaultValue",n),(0,S.n1)("TimePicker",e,"value",n),(0,w.A)(!(0,h.cK)(this,"allowEmpty"),"TimePicker","`allowEmpty` is deprecated. Please use `allowClear` instead."),{sValue:(0,S.pY)(e||t,n)}},watch:{value:function(e){(0,S.n1)("TimePicker",e,"value",this.valueFormat),this.setState({sValue:(0,S.pY)(e,this.valueFormat)})}},methods:{getDefaultFormat:function(){var e=this.format,t=this.use12Hours;return e||(t?"h:mm:ss a":"HH:mm:ss")},getAllowClear:function(){var e=this.$props,t=e.allowClear,n=e.allowEmpty;return(0,h.cK)(this,"allowClear")?t:n},getDefaultLocale:function(){var e=(0,i.A)({},k.A,this.$props.locale);return e},savePopupRef:function(e){this.popupRef=e},handleChange:function(e){(0,h.cK)(this,"value")||this.setState({sValue:e});var t=this.format,n=void 0===t?"HH:mm:ss":t;this.$emit("change",this.valueFormat?(0,S.pK)(e,this.valueFormat):e,e&&e.format(n)||"")},handleOpenClose:function(e){var t=e.open;this.$emit("openChange",t),this.$emit("update:open",t)},focus:function(){this.$refs.timePicker.focus()},blur:function(){this.$refs.timePicker.blur()},renderInputIcon:function(e){var t=this.$createElement,n=(0,h.nu)(this,"suffixIcon");n=Array.isArray(n)?n[0]:n;var r=n&&(0,h.zO)(n)&&(0,f.Ob)(n,{class:e+"-clock-icon"})||t(x.A,{attrs:{type:"clock-circle"},class:e+"-clock-icon"});return t("span",{class:e+"-icon"},[r])},renderClearIcon:function(e){var t=this.$createElement,n=(0,h.nu)(this,"clearIcon"),r=e+"-clear";return n&&(0,h.zO)(n)?(0,f.Ob)(n,{class:r}):t(x.A,{attrs:{type:"close-circle",theme:"filled"},class:r})},renderTimePicker:function(e){var t=this.$createElement,n=(0,h.Oq)(this);n=(0,o.A)(n,["defaultValue","suffixIcon","allowEmpty","allowClear"]);var a=n,s=a.prefixCls,c=a.getPopupContainer,l=a.placeholder,u=a.size,d=this.configProvider.getPrefixCls,f=d("time-picker",s),p=this.getDefaultFormat(),m=(0,r.A)({},f+"-"+u,!!u),v=(0,h.nu)(this,"addon",{},!1),g=function(e){return v?t("div",{class:f+"-panel-addon"},["function"===typeof v?v(e):v]):null},y=this.renderInputIcon(f),_=this.renderClearIcon(f),b=this.configProvider.getPopupContainer,A={props:(0,i.A)({},z(p),n,{allowEmpty:this.getAllowClear(),prefixCls:f,getPopupContainer:c||b,format:p,value:this.sValue,placeholder:void 0===l?e.placeholder:l,addon:g,inputIcon:y,clearIcon:_}),class:m,ref:"timePicker",on:(0,i.A)({},(0,h.WM)(this),{change:this.handleChange,open:this.handleOpenClose,close:this.handleOpenClose})};return t(M,A)}},render:function(){var e=arguments[0];return e(A.A,{attrs:{componentName:"TimePicker",defaultLocale:this.getDefaultLocale()},scopedSlots:{default:this.renderTimePicker}})},install:function(e){e.use(C.A),e.component(O.name,O)}},H=O},68265:function(e,t){"use strict";var n={placeholder:"Select time"};t.A=n},26904:function(e,t,n){"use strict";n(29229)},36278:function(e,t,n){"use strict";var r=n(4718),i=r.A.oneOf(["hover","focus","click","contextmenu"]);t.A=function(){return{trigger:r.A.oneOfType([i,r.A.arrayOf(i)]).def("hover"),visible:r.A.bool,defaultVisible:r.A.bool,placement:r.A.oneOf(["top","left","right","bottom","topLeft","topRight","bottomLeft","bottomRight","leftTop","leftBottom","rightTop","rightBottom"]).def("top"),transitionName:r.A.string.def("zoom-big-fast"),overlayStyle:r.A.object.def(function(){return{}}),overlayClassName:r.A.string,prefixCls:r.A.string,mouseEnterDelay:r.A.number.def(.1),mouseLeaveDelay:r.A.number.def(.1),getPopupContainer:r.A.func,arrowPointAtCenter:r.A.bool.def(!1),autoAdjustOverflow:r.A.oneOfType([r.A.bool,r.A.object]).def(!0),destroyTooltipOnHide:r.A.bool.def(!1),align:r.A.object.def(function(){return{}}),builtinPlacements:r.A.object}}},90500:function(e,t,n){"use strict";n.d(t,{A:function(){return S}});var r=n(44508),i=n(85505),o=n(51927),a=n(5748),s=n(4718),c=n(47006),l={adjustX:1,adjustY:1},u=[0,0],d={left:{points:["cr","cl"],overflow:l,offset:[-4,0],targetOffset:u},right:{points:["cl","cr"],overflow:l,offset:[4,0],targetOffset:u},top:{points:["bc","tc"],overflow:l,offset:[0,-4],targetOffset:u},bottom:{points:["tc","bc"],overflow:l,offset:[0,4],targetOffset:u},topLeft:{points:["bl","tl"],overflow:l,offset:[0,-4],targetOffset:u},leftTop:{points:["tr","tl"],overflow:l,offset:[-4,0],targetOffset:u},topRight:{points:["br","tr"],overflow:l,offset:[0,-4],targetOffset:u},rightTop:{points:["tl","tr"],overflow:l,offset:[4,0],targetOffset:u},bottomRight:{points:["tr","br"],overflow:l,offset:[0,4],targetOffset:u},rightBottom:{points:["bl","br"],overflow:l,offset:[4,0],targetOffset:u},bottomLeft:{points:["tl","bl"],overflow:l,offset:[0,4],targetOffset:u},leftBottom:{points:["br","bl"],overflow:l,offset:[-4,0],targetOffset:u}},h={props:{prefixCls:s.A.string,overlay:s.A.any,trigger:s.A.any},updated:function(){var e=this.trigger;e&&e.forcePopupAlign()},render:function(){var e=arguments[0],t=this.overlay,n=this.prefixCls;return e("div",{class:n+"-inner",attrs:{role:"tooltip"}},["function"===typeof t?t():t])}},f=n(15848);function p(){}var m={props:{trigger:s.A.any.def(["hover"]),defaultVisible:s.A.bool,visible:s.A.bool,placement:s.A.string.def("right"),transitionName:s.A.oneOfType([s.A.string,s.A.object]),animation:s.A.any,afterVisibleChange:s.A.func.def(function(){}),overlay:s.A.any,overlayStyle:s.A.object,overlayClassName:s.A.string,prefixCls:s.A.string.def("rc-tooltip"),mouseEnterDelay:s.A.number.def(0),mouseLeaveDelay:s.A.number.def(.1),getTooltipContainer:s.A.func,destroyTooltipOnHide:s.A.bool.def(!1),align:s.A.object.def(function(){return{}}),arrowContent:s.A.any.def(null),tipId:s.A.string,builtinPlacements:s.A.object},methods:{getPopupElement:function(){var e=this.$createElement,t=this.$props,n=t.prefixCls,r=t.tipId;return[e("div",{class:n+"-arrow",key:"arrow"},[(0,f.nu)(this,"arrowContent")]),e(h,{key:"content",attrs:{trigger:this.$refs.trigger,prefixCls:n,id:r,overlay:(0,f.nu)(this,"overlay")}})]},getPopupDomNode:function(){return this.$refs.trigger.getPopupDomNode()}},render:function(e){var t=(0,f.Oq)(this),n=t.overlayClassName,r=t.trigger,o=t.mouseEnterDelay,s=t.mouseLeaveDelay,l=t.overlayStyle,u=t.prefixCls,h=t.afterVisibleChange,m=t.transitionName,v=t.animation,g=t.placement,y=t.align,_=t.destroyTooltipOnHide,b=t.defaultVisible,M=t.getTooltipContainer,A=(0,a.A)(t,["overlayClassName","trigger","mouseEnterDelay","mouseLeaveDelay","overlayStyle","prefixCls","afterVisibleChange","transitionName","animation","placement","align","destroyTooltipOnHide","defaultVisible","getTooltipContainer"]),w=(0,i.A)({},A);(0,f.cK)(this,"visible")&&(w.popupVisible=this.$props.visible);var x=(0,f.WM)(this),k={props:(0,i.A)({popupClassName:n,prefixCls:u,action:r,builtinPlacements:d,popupPlacement:g,popupAlign:y,getPopupContainer:M,afterPopupVisibleChange:h,popupTransitionName:m,popupAnimation:v,defaultPopupVisible:b,destroyPopupOnHide:_,mouseLeaveDelay:s,popupStyle:l,mouseEnterDelay:o},w),on:(0,i.A)({},x,{popupVisibleChange:x.visibleChange||p,popupAlign:x.popupAlign||p}),ref:"trigger"};return e(c.A,k,[e("template",{slot:"popup"},[this.getPopupElement(e)]),this.$slots["default"]])}},v=m,g={adjustX:1,adjustY:1},y={adjustX:0,adjustY:0},_=[0,0];function b(e){return"boolean"===typeof e?e?g:y:(0,i.A)({},y,e)}function M(e){var t=e.arrowWidth,n=void 0===t?5:t,r=e.horizontalArrowShift,o=void 0===r?16:r,a=e.verticalArrowShift,s=void 0===a?12:a,c=e.autoAdjustOverflow,l=void 0===c||c,u={left:{points:["cr","cl"],offset:[-4,0]},right:{points:["cl","cr"],offset:[4,0]},top:{points:["bc","tc"],offset:[0,-4]},bottom:{points:["tc","bc"],offset:[0,4]},topLeft:{points:["bl","tc"],offset:[-(o+n),-4]},leftTop:{points:["tr","cl"],offset:[-4,-(s+n)]},topRight:{points:["br","tc"],offset:[o+n,-4]},rightTop:{points:["tl","cr"],offset:[4,-(s+n)]},bottomRight:{points:["tr","bc"],offset:[o+n,4]},rightBottom:{points:["bl","cr"],offset:[4,s+n]},bottomLeft:{points:["tl","bc"],offset:[-(o+n),4]},leftBottom:{points:["br","cl"],offset:[-4,s+n]}};return Object.keys(u).forEach(function(t){u[t]=e.arrowPointAtCenter?(0,i.A)({},u[t],{overflow:b(l),targetOffset:_}):(0,i.A)({},d[t],{overflow:b(l)}),u[t].ignoreShake=!0}),u}var A=n(25592),w=n(36278),x=function(e,t){var n={},r=(0,i.A)({},e);return t.forEach(function(t){e&&t in e&&(n[t]=e[t],delete r[t])}),{picked:n,omitted:r}},k=(0,w.A)(),L={name:"ATooltip",model:{prop:"visible",event:"visibleChange"},props:(0,i.A)({},k,{title:s.A.any}),inject:{configProvider:{default:function(){return A.f}}},data:function(){return{sVisible:!!this.$props.visible||!!this.$props.defaultVisible}},watch:{visible:function(e){this.sVisible=e}},methods:{onVisibleChange:function(e){(0,f.cK)(this,"visible")||(this.sVisible=!this.isNoTitle()&&e),this.isNoTitle()||this.$emit("visibleChange",e)},getPopupDomNode:function(){return this.$refs.tooltip.getPopupDomNode()},getPlacements:function(){var e=this.$props,t=e.builtinPlacements,n=e.arrowPointAtCenter,r=e.autoAdjustOverflow;return t||M({arrowPointAtCenter:n,verticalArrowShift:8,autoAdjustOverflow:r})},getDisabledCompatibleChildren:function(e){var t=this.$createElement,n=e.componentOptions&&e.componentOptions.Ctor.options||{};if((!0===n.__ANT_BUTTON||!0===n.__ANT_SWITCH||!0===n.__ANT_CHECKBOX)&&(e.componentOptions.propsData.disabled||""===e.componentOptions.propsData.disabled)||"button"===e.tag&&e.data&&e.data.attrs&&void 0!==e.data.attrs.disabled){var r=x((0,f.gd)(e),["position","left","right","top","bottom","float","display","zIndex"]),a=r.picked,s=r.omitted,c=(0,i.A)({display:"inline-block"},a,{cursor:"not-allowed",width:e.componentOptions.propsData.block?"100%":null}),l=(0,i.A)({},s,{pointerEvents:"none"}),u=(0,f.t0)(e),d=(0,o.Ob)(e,{style:l,class:null});return t("span",{style:c,class:u},[d])}return e},isNoTitle:function(){var e=(0,f.nu)(this,"title");return!e&&0!==e},getOverlay:function(){var e=(0,f.nu)(this,"title");return 0===e?e:e||""},onPopupAlign:function(e,t){var n=this.getPlacements(),r=Object.keys(n).filter(function(e){return n[e].points[0]===t.points[0]&&n[e].points[1]===t.points[1]})[0];if(r){var i=e.getBoundingClientRect(),o={top:"50%",left:"50%"};r.indexOf("top")>=0||r.indexOf("Bottom")>=0?o.top=i.height-t.offset[1]+"px":(r.indexOf("Top")>=0||r.indexOf("bottom")>=0)&&(o.top=-t.offset[1]+"px"),r.indexOf("left")>=0||r.indexOf("Right")>=0?o.left=i.width-t.offset[0]+"px":(r.indexOf("right")>=0||r.indexOf("Left")>=0)&&(o.left=-t.offset[0]+"px"),e.style.transformOrigin=o.left+" "+o.top}}},render:function(){var e=arguments[0],t=this.$props,n=this.$data,a=this.$slots,s=t.prefixCls,c=t.openClassName,l=t.getPopupContainer,u=this.configProvider.getPopupContainer,d=this.configProvider.getPrefixCls,h=d("tooltip",s),p=(a["default"]||[]).filter(function(e){return e.tag||""!==e.text.trim()});p=1===p.length?p[0]:p;var m=n.sVisible;if(!(0,f.cK)(this,"visible")&&this.isNoTitle()&&(m=!1),!p)return null;var g=this.getDisabledCompatibleChildren((0,f.zO)(p)?p:e("span",[p])),y=(0,r.A)({},c||h+"-open",!0),_={props:(0,i.A)({},t,{prefixCls:h,getTooltipContainer:l||u,builtinPlacements:this.getPlacements(),overlay:this.getOverlay(),visible:m}),ref:"tooltip",on:(0,i.A)({},(0,f.WM)(this),{visibleChange:this.onVisibleChange,popupAlign:this.onPopupAlign})};return e(v,_,[m?(0,o.Ob)(g,{class:y}):g])}},C=n(44807);L.install=function(e){e.use(C.A),e.component(L.name,L)};var S=L},42543:function(e,t,n){"use strict";n(29229)},27448:function(e,t,n){"use strict";n.d(t,{Ay:function(){return ve}});var r=n(75189),i=n.n(r),o=n(44508),a=n(85505),s=n(46942),c=n.n(s),l=n(50014),u=n.n(l),d=n(24713),h=n.n(d),f=n(44383),p=n.n(f),m=n(4718),v=n(15848),g=n(52315),y=n(6498),_=n.n(y);function b(e,t){var n="cannot "+e.method+" "+e.action+" "+t.status+"'",r=new Error(n);return r.status=t.status,r.method=e.method,r.url=e.action,r}function M(e){var t=e.responseText||e.response;if(!t)return t;try{return JSON.parse(t)}catch(n){return t}}function A(e){var t=new window.XMLHttpRequest;e.onProgress&&t.upload&&(t.upload.onprogress=function(t){t.total>0&&(t.percent=t.loaded/t.total*100),e.onProgress(t)});var n=new window.FormData;e.data&&Object.keys(e.data).forEach(function(t){var r=e.data[t];Array.isArray(r)?r.forEach(function(e){n.append(t+"[]",e)}):n.append(t,e.data[t])}),n.append(e.filename,e.file),t.onerror=function(t){e.onError(t)},t.onload=function(){if(t.status<200||t.status>=300)return e.onError(b(e,t),M(t));e.onSuccess(M(t),t)},t.open(e.method,e.action,!0),e.withCredentials&&"withCredentials"in t&&(t.withCredentials=!0);var r=e.headers||{};for(var i in null!==r["X-Requested-With"]&&t.setRequestHeader("X-Requested-With","XMLHttpRequest"),r)r.hasOwnProperty(i)&&null!==r[i]&&t.setRequestHeader(i,r[i]);return t.send(n),{abort:function(){t.abort()}}}var w=+new Date,x=0;function k(){return"vc-upload-"+w+"-"+ ++x}function L(e,t){return-1!==e.indexOf(t,e.length-t.length)}var C=function(e,t){if(e&&t){var n=Array.isArray(t)?t:t.split(","),r=e.name||"",i=e.type||"",o=i.replace(/\/.*$/,"");return n.some(function(e){var t=e.trim();return"."===t.charAt(0)?L(r.toLowerCase(),t.toLowerCase()):/\/\*$/.test(t)?o===t.replace(/\/.*$/,""):i===t})}return!0};function S(e,t){var n=e.createReader(),r=[];function i(){n.readEntries(function(e){var n=Array.prototype.slice.apply(e);r=r.concat(n);var o=!n.length;o?t(r):i()})}i()}var z=function(e,t,n){var r=function e(r,i){i=i||"",r.isFile?r.file(function(e){n(e)&&(r.fullPath&&!e.webkitRelativePath&&(Object.defineProperties(e,{webkitRelativePath:{writable:!0}}),e.webkitRelativePath=r.fullPath.replace(/^\//,""),Object.defineProperties(e,{webkitRelativePath:{writable:!1}})),t([e]))}):r.isDirectory&&S(r,function(t){t.forEach(function(t){e(t,""+i+r.name+"/")})})},i=!0,o=!1,a=void 0;try{for(var s,c=e[Symbol.iterator]();!(i=(s=c.next()).done);i=!0){var l=s.value;r(l.webkitGetAsEntry())}}catch(u){o=!0,a=u}finally{try{!i&&c["return"]&&c["return"]()}finally{if(o)throw a}}},T=z,O={componentTag:m.A.string,prefixCls:m.A.string,name:m.A.string,multiple:m.A.bool,directory:m.A.bool,disabled:m.A.bool,accept:m.A.string,data:m.A.oneOfType([m.A.object,m.A.func]),action:m.A.oneOfType([m.A.string,m.A.func]),headers:m.A.object,beforeUpload:m.A.func,customRequest:m.A.func,withCredentials:m.A.bool,openFileDialogOnClick:m.A.bool,transformFile:m.A.func,method:m.A.string},H={inheritAttrs:!1,name:"ajaxUploader",mixins:[g.A],props:O,data:function(){return this.reqs={},{uid:k()}},mounted:function(){this._isMounted=!0},beforeDestroy:function(){this._isMounted=!1,this.abort()},methods:{onChange:function(e){var t=e.target.files;this.uploadFiles(t),this.reset()},onClick:function(){var e=this.$refs.fileInputRef;e&&e.click()},onKeyDown:function(e){"Enter"===e.key&&this.onClick()},onFileDrop:function(e){var t=this,n=this.$props.multiple;if(e.preventDefault(),"dragover"!==e.type)if(this.directory)T(e.dataTransfer.items,this.uploadFiles,function(e){return C(e,t.accept)});else{var r=_()(Array.prototype.slice.call(e.dataTransfer.files),function(e){return C(e,t.accept)}),i=r[0],o=r[1];!1===n&&(i=i.slice(0,1)),this.uploadFiles(i),o.length&&this.$emit("reject",o)}},uploadFiles:function(e){var t=this,n=Array.prototype.slice.call(e);n.map(function(e){return e.uid=k(),e}).forEach(function(e){t.upload(e,n)})},upload:function(e,t){var n=this;if(!this.beforeUpload)return setTimeout(function(){return n.post(e)},0);var r=this.beforeUpload(e,t);r&&r.then?r.then(function(t){var r=Object.prototype.toString.call(t);return"[object File]"===r||"[object Blob]"===r?n.post(t):n.post(e)})["catch"](function(e){console&&console.log(e)}):!1!==r&&setTimeout(function(){return n.post(e)},0)},post:function(e){var t=this;if(this._isMounted){var n=this.$props,r=n.data,i=n.transformFile,o=void 0===i?function(e){return e}:i;new Promise(function(n){var r=t.action;if("function"===typeof r)return n(r(e));n(r)}).then(function(i){var a=e.uid,s=t.customRequest||A,c=Promise.resolve(o(e))["catch"](function(e){console.error(e)});c.then(function(o){"function"===typeof r&&(r=r(e));var c={action:i,filename:t.name,data:r,file:o,headers:t.headers,withCredentials:t.withCredentials,method:n.method||"post",onProgress:function(n){t.$emit("progress",n,e)},onSuccess:function(n,r){delete t.reqs[a],t.$emit("success",n,e,r)},onError:function(n,r){delete t.reqs[a],t.$emit("error",n,r,e)}};t.reqs[a]=s(c),t.$emit("start",e)})})}},reset:function(){this.setState({uid:k()})},abort:function(e){var t=this.reqs;if(e){var n=e;e&&e.uid&&(n=e.uid),t[n]&&t[n].abort&&t[n].abort(),delete t[n]}else Object.keys(t).forEach(function(e){t[e]&&t[e].abort&&t[e].abort(),delete t[e]})}},render:function(){var e,t=arguments[0],n=this.$props,r=this.$attrs,i=n.componentTag,s=n.prefixCls,l=n.disabled,u=n.multiple,d=n.accept,h=n.directory,f=n.openFileDialogOnClick,p=c()((e={},(0,o.A)(e,s,!0),(0,o.A)(e,s+"-disabled",l),e)),m=l?{}:{click:f?this.onClick:function(){},keydown:f?this.onKeyDown:function(){},drop:this.onFileDrop,dragover:this.onFileDrop},g={on:(0,a.A)({},(0,v.WM)(this),m),attrs:{role:"button",tabIndex:l?null:"0"},class:p};return t(i,g,[t("input",{attrs:{id:r.id,type:"file",accept:d,directory:h?"directory":null,webkitdirectory:h?"webkitdirectory":null,multiple:u},ref:"fileInputRef",on:{click:function(e){return e.stopPropagation()},change:this.onChange},key:this.uid,style:{display:"none"}}),this.$slots["default"]])}},D=H,Y=n(36873),V={position:"absolute",top:0,opacity:0,filter:"alpha(opacity=0)",left:0,zIndex:9999},P={mixins:[g.A],props:{componentTag:m.A.string,disabled:m.A.bool,prefixCls:m.A.string,accept:m.A.string,multiple:m.A.bool,data:m.A.oneOfType([m.A.object,m.A.func]),action:m.A.oneOfType([m.A.string,m.A.func]),name:m.A.string},data:function(){return this.file={},{uploading:!1}},methods:{onLoad:function(){if(this.uploading){var e=this.file,t=void 0;try{var n=this.getIframeDocument(),r=n.getElementsByTagName("script")[0];r&&r.parentNode===n.body&&n.body.removeChild(r),t=n.body.innerHTML,this.$emit("success",t,e)}catch(i){(0,Y.A)(!1,"cross domain error for Upload. Maybe server should return document.domain script. see Note from https://github.com/react-component/upload"),t="cross-domain",this.$emit("error",i,null,e)}this.endUpload()}},onChange:function(){var e=this,t=this.getFormInputNode(),n=this.file={uid:k(),name:t.value&&t.value.substring(t.value.lastIndexOf("\\")+1,t.value.length)};this.startUpload();var r=this.$props;if(!r.beforeUpload)return this.post(n);var i=r.beforeUpload(n);i&&i.then?i.then(function(){e.post(n)},function(){e.endUpload()}):!1!==i?this.post(n):this.endUpload()},getIframeNode:function(){return this.$refs.iframeRef},getIframeDocument:function(){return this.getIframeNode().contentDocument},getFormNode:function(){return this.getIframeDocument().getElementById("form")},getFormInputNode:function(){return this.getIframeDocument().getElementById("input")},getFormDataNode:function(){return this.getIframeDocument().getElementById("data")},getFileForMultiple:function(e){return this.multiple?[e]:e},getIframeHTML:function(e){var t="",n="";if(e){var r="script";t="<"+r+'>document.domain="'+e+'";",n=''}return'\n \n \n \n \n \n '+t+'\n \n \n
\n \n '+n+'\n \n
\n \n \n '},initIframeSrc:function(){this.domain&&(this.getIframeNode().src="javascript:void((function(){\n var d = document;\n d.open();\n d.domain='"+this.domain+"';\n d.write('');\n d.close();\n })())")},initIframe:function(){var e=this.getIframeNode(),t=e.contentWindow,n=void 0;this.domain=this.domain||"",this.initIframeSrc();try{n=t.document}catch(r){this.domain=document.domain,this.initIframeSrc(),t=e.contentWindow,n=t.document}n.open("text/html","replace"),n.write(this.getIframeHTML(this.domain)),n.close(),this.getFormInputNode().onchange=this.onChange},endUpload:function(){this.uploading&&(this.file={},this.uploading=!1,this.setState({uploading:!1}),this.initIframe())},startUpload:function(){this.uploading||(this.uploading=!0,this.setState({uploading:!0}))},updateIframeWH:function(){var e=this.$el,t=this.getIframeNode();t.style.height=e.offsetHeight+"px",t.style.width=e.offsetWidth+"px"},abort:function(e){if(e){var t=e;e&&e.uid&&(t=e.uid),t===this.file.uid&&this.endUpload()}else this.endUpload()},post:function(e){var t=this,n=this.getFormNode(),r=this.getFormDataNode(),i=this.$props.data;"function"===typeof i&&(i=i(e));var o=document.createDocumentFragment();for(var a in i)if(i.hasOwnProperty(a)){var s=document.createElement("input");s.setAttribute("name",a),s.value=i[a],o.appendChild(s)}r.appendChild(o),new Promise(function(n){var r=t.action;if("function"===typeof r)return n(r(e));n(r)}).then(function(i){n.setAttribute("action",i),n.submit(),r.innerHTML="",t.$emit("start",e)})}},mounted:function(){var e=this;this.$nextTick(function(){e.updateIframeWH(),e.initIframe()})},updated:function(){var e=this;this.$nextTick(function(){e.updateIframeWH()})},render:function(){var e,t=arguments[0],n=this.$props,r=n.componentTag,i=n.disabled,s=n.prefixCls,l=(0,a.A)({},V,{display:this.uploading||i?"none":""}),u=c()((e={},(0,o.A)(e,s,!0),(0,o.A)(e,s+"-disabled",i),e));return t(r,{attrs:{className:u},style:{position:"relative",zIndex:0}},[t("iframe",{ref:"iframeRef",on:{load:this.onLoad},style:l}),this.$slots["default"]])}},E=P;function j(){}var F={componentTag:m.A.string,prefixCls:m.A.string,action:m.A.oneOfType([m.A.string,m.A.func]),name:m.A.string,multipart:m.A.bool,directory:m.A.bool,data:m.A.oneOfType([m.A.object,m.A.func]),headers:m.A.object,accept:m.A.string,multiple:m.A.bool,disabled:m.A.bool,beforeUpload:m.A.func,customRequest:m.A.func,method:m.A.string,withCredentials:m.A.bool,supportServerRender:m.A.bool,openFileDialogOnClick:m.A.bool,transformFile:m.A.func},I={name:"Upload",mixins:[g.A],inheritAttrs:!1,props:(0,v.CB)(F,{componentTag:"span",prefixCls:"rc-upload",data:{},headers:{},name:"file",multipart:!1,supportServerRender:!1,multiple:!1,beforeUpload:j,withCredentials:!1,openFileDialogOnClick:!0}),data:function(){return{Component:null}},mounted:function(){var e=this;this.$nextTick(function(){e.supportServerRender&&e.setState({Component:e.getComponent()},function(){e.$emit("ready")})})},methods:{getComponent:function(){return"undefined"!==typeof File?D:E},abort:function(e){this.$refs.uploaderRef.abort(e)}},render:function(){var e=arguments[0],t={props:(0,a.A)({},this.$props),on:(0,v.WM)(this),ref:"uploaderRef",attrs:this.$attrs};if(this.supportServerRender){var n=this.Component;return n?e(n,t,[this.$slots["default"]]):null}var r=this.getComponent();return e(r,t,[this.$slots["default"]])}},$=I,R=$,N=n(38377),W=n(77749),B=n(25592),K=n(97479);m.A.oneOf(["error","success","done","uploading","removed"]);function U(e){var t=e.uid,n=e.name;return!(!t&&0!==t)&&(!!["string","number"].includes("undefined"===typeof t?"undefined":(0,K.A)(t))&&(""!==n&&"string"===typeof n))}m.A.custom(U),m.A.arrayOf(m.A.custom(U)),m.A.object;var q=m.A.shape({showRemoveIcon:m.A.bool,showPreviewIcon:m.A.bool}).loose,G=m.A.shape({uploading:m.A.string,removeFile:m.A.string,downloadFile:m.A.string,uploadError:m.A.string,previewFile:m.A.string}).loose,J={type:m.A.oneOf(["drag","select"]),name:m.A.string,defaultFileList:m.A.arrayOf(m.A.custom(U)),fileList:m.A.arrayOf(m.A.custom(U)),action:m.A.oneOfType([m.A.string,m.A.func]),directory:m.A.bool,data:m.A.oneOfType([m.A.object,m.A.func]),method:m.A.oneOf(["POST","PUT","post","put"]),headers:m.A.object,showUploadList:m.A.oneOfType([m.A.bool,q]),multiple:m.A.bool,accept:m.A.string,beforeUpload:m.A.func,listType:m.A.oneOf(["text","picture","picture-card"]),remove:m.A.func,supportServerRender:m.A.bool,disabled:m.A.bool,prefixCls:m.A.string,customRequest:m.A.func,withCredentials:m.A.bool,openFileDialogOnClick:m.A.bool,locale:G,height:m.A.number,id:m.A.string,previewFile:m.A.func,transformFile:m.A.func},X=(m.A.arrayOf(m.A.custom(U)),m.A.string,{listType:m.A.oneOf(["text","picture","picture-card"]),items:m.A.arrayOf(m.A.custom(U)),progressAttr:m.A.object,prefixCls:m.A.string,showRemoveIcon:m.A.bool,showDownloadIcon:m.A.bool,showPreviewIcon:m.A.bool,locale:G,previewFile:m.A.func}),Z={name:"AUploadDragger",props:J,render:function(){var e=arguments[0],t=(0,v.Oq)(this),n={props:(0,a.A)({},t,{type:"drag"}),on:(0,v.WM)(this),style:{height:this.height}};return e(pe,n,[this.$slots["default"]])}},Q=n(80178);function ee(){return!0}function te(e){return(0,a.A)({},e,{lastModified:e.lastModified,lastModifiedDate:e.lastModifiedDate,name:e.name,size:e.size,type:e.type,uid:e.uid,percent:0,originFileObj:e})}function ne(){var e=.1,t=.01,n=.98;return function(r){var i=r;return i>=n||(i+=e,e-=t,e<.001&&(e=.001)),i}}function re(e,t){var n=void 0!==e.uid?"uid":"name";return t.filter(function(t){return t[n]===e[n]})[0]}function ie(e,t){var n=void 0!==e.uid?"uid":"name",r=t.filter(function(t){return t[n]!==e[n]});return r.length===t.length?null:r}var oe=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=e.split("/"),n=t[t.length-1],r=n.split(/#|\?/)[0];return(/\.[^./\\]*$/.exec(r)||[""])[0]},ae=function(e){return!!e&&0===e.indexOf("image/")},se=function(e){if(ae(e.type))return!0;var t=e.thumbUrl||e.url,n=oe(t);return!(!/^data:image\//.test(t)&&!/(webp|svg|png|gif|jpg|jpeg|jfif|bmp|dpg|ico)$/i.test(n))||!/^data:/.test(t)&&!n},ce=200;function le(e){return new Promise(function(t){if(ae(e.type)){var n=document.createElement("canvas");n.width=ce,n.height=ce,n.style.cssText="position: fixed; left: 0; top: 0; width: "+ce+"px; height: "+ce+"px; z-index: 9999; display: none;",document.body.appendChild(n);var r=n.getContext("2d"),i=new Image;i.onload=function(){var e=i.width,o=i.height,a=ce,s=ce,c=0,l=0;e=this.$refs.subMenuTitle.offsetWidth||(e.style.minWidth=this.$refs.subMenuTitle.offsetWidth+"px")}},renderChildren:function(e){var t=this.$createElement,n=this.$props,r=(0,y.WM)(this),a=r.select,c=r.deselect,l=r.openChange,u={props:{mode:"horizontal"===n.mode?"vertical":n.mode,visible:n.isOpen,level:n.level+1,inlineIndent:n.inlineIndent,focusable:!1,selectedKeys:n.selectedKeys,eventKey:n.eventKey+"-menu-",openKeys:n.openKeys,openTransitionName:n.openTransitionName,openAnimation:n.openAnimation,subMenuOpenDelay:n.subMenuOpenDelay,parentMenu:this,subMenuCloseDelay:n.subMenuCloseDelay,forceSubMenuRender:n.forceSubMenuRender,triggerSubMenuAction:n.triggerSubMenuAction,builtinPlacements:n.builtinPlacements,defaultActiveFirst:n.store.getState().defaultActiveFirst[(0,b.V8)(n.eventKey)],multiple:n.multiple,prefixCls:n.rootPrefixCls,manualRef:this.saveMenuInstance,itemIcon:(0,y.nu)(this,"itemIcon"),expandIcon:(0,y.nu)(this,"expandIcon"),children:e},on:{click:this.onSubMenuClick,select:a,deselect:c,openChange:l},id:this.internalMenuId},d=u.props,h=this.haveRendered;if(this.haveRendered=!0,this.haveOpened=this.haveOpened||d.visible||d.forceSubMenuRender,!this.haveOpened)return t("div");var p=h||!d.visible||"inline"===!d.mode;u["class"]=" "+d.prefixCls+"-sub";var m={appear:p,css:!1},v={props:m,on:{}};return d.openTransitionName?v=(0,M.A)(d.openTransitionName,{appear:p}):"object"===(0,o.A)(d.openAnimation)?(m=(0,s.A)({},m,d.openAnimation.props||{}),p||(m.appear=!1)):"string"===typeof d.openAnimation&&(v=(0,M.A)(d.openAnimation,{appear:p})),"object"===(0,o.A)(d.openAnimation)&&d.openAnimation.on&&(v.on=d.openAnimation.on),t("transition",v,[t(f.Ay,i()([{directives:[{name:"show",value:n.isOpen}]},u]))])}},render:function(){var e,t,n=arguments[0],r=this.$props,o=this.rootPrefixCls,l=this.parentMenu,d=r.isOpen,h=this.getPrefixCls(),f="inline"===r.mode,p=(e={},(0,a.A)(e,h,!0),(0,a.A)(e,h+"-"+r.mode,!0),(0,a.A)(e,this.getOpenClassName(),d),(0,a.A)(e,this.getActiveClassName(),r.active||d&&!f),(0,a.A)(e,this.getDisabledClassName(),r.disabled),(0,a.A)(e,this.getSelectedClassName(),this.isChildrenSelected()),e);this.internalMenuId||(r.eventKey?this.internalMenuId=r.eventKey+"$Menu":this.internalMenuId="$__$"+ ++A+"$Menu");var m={},g={},_={};r.disabled||(m={mouseleave:this.onMouseLeave,mouseenter:this.onMouseEnter},g={click:this.onTitleClick},_={mouseenter:this.onTitleMouseEnter,mouseleave:this.onTitleMouseLeave});var b={};f&&(b.paddingLeft=r.inlineIndent*r.level+"px");var M={};d&&(M={"aria-owns":this.internalMenuId});var x={attrs:(0,s.A)({"aria-expanded":d},M,{"aria-haspopup":"true",title:"string"===typeof r.title?r.title:void 0}),on:(0,s.A)({},_,g),style:b,class:h+"-title",ref:"subMenuTitle"},k=null;"horizontal"!==r.mode&&(k=(0,y.nu)(this,"expandIcon",r));var L=n("div",x,[(0,y.nu)(this,"title"),k||n("i",{class:h+"-arrow"})]),C=this.renderChildren((0,y.Gk)(this.$slots["default"])),S=this.parentMenu.isRootMenu?this.parentMenu.getPopupContainer:function(e){return e.parentNode},z=w[r.mode],T=r.popupOffset?{offset:r.popupOffset}:{},O="inline"===r.mode?"":r.popupClassName,H={on:(0,s.A)({},(0,c.A)((0,y.WM)(this),["click"]),m),class:p};return n("li",i()([H,{attrs:{role:"menuitem"}}]),[f&&L,f&&C,!f&&n(u.A,{attrs:(t={prefixCls:h,popupClassName:h+"-popup "+o+"-"+l.theme+" "+(O||""),getPopupContainer:S,builtinPlacements:v},(0,a.A)(t,"builtinPlacements",(0,s.A)({},v,r.builtinPlacements)),(0,a.A)(t,"popupPlacement",z),(0,a.A)(t,"popupVisible",d),(0,a.A)(t,"popupAlign",T),(0,a.A)(t,"action",r.disabled?[]:[r.triggerSubMenuAction]),(0,a.A)(t,"mouseEnterDelay",r.subMenuOpenDelay),(0,a.A)(t,"mouseLeaveDelay",r.subMenuCloseDelay),(0,a.A)(t,"forceRender",r.forceSubMenuRender),t),on:{popupVisibleChange:this.onPopupVisibleChange}},[n("template",{slot:"popup"},[C]),L])])}},L=(0,h.A)(function(e,t){var n=e.openKeys,r=e.activeKey,i=e.selectedKeys,o=t.eventKey,a=t.subMenuKey;return{isOpen:n.indexOf(o)>-1,active:r[a]===o,selectedKeys:i}})(k);L.isSubMenu=!0;var C=L},4275:function(e,t,n){"use strict";n.d(t,{Ay:function(){return T},GO:function(){return S}});var r=n(5748),i=n(44508),o=n(85505),a=n(90034),s=n(4718),c=n(14221),l=n(52315),u=n(11207),d=n(46942),h=n.n(d),f=n(78556),p=n(32779),m=n(43591),v=n(70198),g=n(51927),y=n(15848),_=!("undefined"===typeof window||!window.document||!window.document.createElement),b="menuitem-overflowed",M=.5;_&&n(22708);var A={name:"DOMWrap",mixins:[l.A],data:function(){return this.resizeObserver=null,this.mutationObserver=null,this.originalTotalWidth=0,this.overflowedItems=[],this.menuItemSizes=[],{lastVisibleIndex:void 0}},mounted:function(){var e=this;this.$nextTick(function(){if(e.setChildrenWidthAndResize(),1===e.level&&"horizontal"===e.mode){var t=e.$el;if(!t)return;e.resizeObserver=new m.A(function(t){t.forEach(e.setChildrenWidthAndResize)}),[].slice.call(t.children).concat(t).forEach(function(t){e.resizeObserver.observe(t)}),"undefined"!==typeof MutationObserver&&(e.mutationObserver=new MutationObserver(function(){e.resizeObserver.disconnect(),[].slice.call(t.children).concat(t).forEach(function(t){e.resizeObserver.observe(t)}),e.setChildrenWidthAndResize()}),e.mutationObserver.observe(t,{attributes:!1,childList:!0,subTree:!1}))}})},beforeDestroy:function(){this.resizeObserver&&this.resizeObserver.disconnect(),this.mutationObserver&&this.mutationObserver.disconnect()},methods:{getMenuItemNodes:function(){var e=this.$props.prefixCls,t=this.$el;return t?[].slice.call(t.children).filter(function(t){return t.className.split(" ").indexOf(e+"-overflowed-submenu")<0}):[]},getOverflowedSubMenuItem:function(e,t,n){var i=this.$createElement,a=this.$props,s=a.overflowedIndicator,c=a.level,l=a.mode,u=a.prefixCls,d=a.theme;if(1!==c||"horizontal"!==l)return null;var h=this.$slots["default"][0],p=(0,y.Ts)(h),m=(p.title,(0,r.A)(p,["title"])),g=(0,y.kQ)(h),_={},b=e+"-overflowed-indicator",M=e+"-overflowed-indicator";0===t.length&&!0!==n?_={display:"none"}:n&&(_={visibility:"hidden",position:"absolute"},b+="-placeholder",M+="-placeholder");var A=d?u+"-"+d:"",w={},x={};f.$J.props.forEach(function(e){void 0!==m[e]&&(w[e]=m[e])}),f.$J.on.forEach(function(e){void 0!==g[e]&&(x[e]=g[e])});var k={props:(0,o.A)({title:s,popupClassName:A},w,{eventKey:M,disabled:!1}),class:u+"-overflowed-submenu",key:b,style:_,on:x};return i(v.A,k,[t])},setChildrenWidthAndResize:function(){if("horizontal"===this.mode){var e=this.$el;if(e){var t=e.children;if(t&&0!==t.length){var n=e.children[t.length-1];(0,f.eC)(n,"display","inline-block");var r=this.getMenuItemNodes(),i=r.filter(function(e){return e.className.split(" ").indexOf(b)>=0});i.forEach(function(e){(0,f.eC)(e,"display","inline-block")}),this.menuItemSizes=r.map(function(e){return(0,f.RG)(e)}),i.forEach(function(e){(0,f.eC)(e,"display","none")}),this.overflowedIndicatorWidth=(0,f.RG)(e.children[e.children.length-1]),this.originalTotalWidth=this.menuItemSizes.reduce(function(e,t){return e+t},0),this.handleResize(),(0,f.eC)(n,"display","none")}}}},handleResize:function(){var e=this;if("horizontal"===this.mode){var t=this.$el;if(t){var n=(0,f.RG)(t);this.overflowedItems=[];var r=0,i=void 0;this.originalTotalWidth>n+M&&(i=-1,this.menuItemSizes.forEach(function(t){r+=t,r+e.overflowedIndicatorWidth<=n&&(i+=1)})),this.setState({lastVisibleIndex:i})}}},renderChildren:function(e){var t=this,n=this.$data.lastVisibleIndex,r=(0,y.t0)(this);return(e||[]).reduce(function(i,o,a){var s=o,c=(0,y.Ts)(o).eventKey;if("horizontal"===t.mode){var l=t.getOverflowedSubMenuItem(c,[]);void 0!==n&&-1!==r[t.prefixCls+"-root"]&&(a>n&&(s=(0,g.Ob)(o,{style:{display:"none"},props:{eventKey:c+"-hidden"},class:b})),a===n+1&&(t.overflowedItems=e.slice(n+1).map(function(e){return(0,g.Ob)(e,{key:(0,y.Ts)(e).eventKey,props:{mode:"vertical-left"}})}),l=t.getOverflowedSubMenuItem(c,t.overflowedItems)));var u=[].concat((0,p.A)(i),[l,s]);return a===e.length-1&&u.push(t.getOverflowedSubMenuItem(c,[],!0)),u}return[].concat((0,p.A)(i),[s])},[])}},render:function(){var e=arguments[0],t=this.$props.tag,n={on:(0,y.WM)(this)};return e(t,n,[this.renderChildren(this.$slots["default"])])}};A.props={mode:s.A.oneOf(["horizontal","vertical","vertical-left","vertical-right","inline"]),prefixCls:s.A.string,level:s.A.number,theme:s.A.string,overflowedIndicator:s.A.node,visible:s.A.bool,hiddenClassName:s.A.string,tag:s.A.string.def("div")};var w=A;function x(e){return!e.length||e.every(function(e){return!!e.disabled})}function k(e,t,n){var r=e.getState();e.setState({activeKey:(0,o.A)({},r.activeKey,(0,i.A)({},t,n))})}function L(e){return e.eventKey||"0-menu-"}function C(e,t){if(t){var n=this.instanceArrayKeyIndexMap[e];this.instanceArray[n]=t}}function S(e,t){var n=t,r=e.eventKey,i=e.defaultActiveFirst,o=e.children;if(void 0!==n&&null!==n){var a=void 0;if((0,f.ns)(o,function(e,t){var i=e.componentOptions.propsData||{};e&&!i.disabled&&n===(0,f.dL)(e,r,t)&&(a=!0)}),a)return n}return n=null,i?((0,f.ns)(o,function(e,t){var i=e.componentOptions.propsData||{},o=null===n||void 0===n;o&&e&&!i.disabled&&(n=(0,f.dL)(e,r,t))}),n):n}var z={name:"SubPopupMenu",props:(0,y.CB)({prefixCls:s.A.string,openTransitionName:s.A.string,openAnimation:s.A.oneOfType([s.A.string,s.A.object]),openKeys:s.A.arrayOf(s.A.oneOfType([s.A.string,s.A.number])),visible:s.A.bool,parentMenu:s.A.object,eventKey:s.A.string,store:s.A.object,forceSubMenuRender:s.A.bool,focusable:s.A.bool,multiple:s.A.bool,defaultActiveFirst:s.A.bool,activeKey:s.A.oneOfType([s.A.string,s.A.number]),selectedKeys:s.A.arrayOf(s.A.oneOfType([s.A.string,s.A.number])),defaultSelectedKeys:s.A.arrayOf(s.A.oneOfType([s.A.string,s.A.number])),defaultOpenKeys:s.A.arrayOf(s.A.oneOfType([s.A.string,s.A.number])),level:s.A.number,mode:s.A.oneOf(["horizontal","vertical","vertical-left","vertical-right","inline"]),triggerSubMenuAction:s.A.oneOf(["click","hover"]),inlineIndent:s.A.oneOfType([s.A.number,s.A.string]),manualRef:s.A.func,itemIcon:s.A.any,expandIcon:s.A.any,overflowedIndicator:s.A.any,children:s.A.any.def([]),__propsSymbol__:s.A.any},{prefixCls:"rc-menu",mode:"vertical",level:1,inlineIndent:24,visible:!0,focusable:!0,manualRef:f.lQ}),mixins:[l.A],created:function(){var e=(0,y.Oq)(this);this.prevProps=(0,o.A)({},e),e.store.setState({activeKey:(0,o.A)({},e.store.getState().activeKey,(0,i.A)({},e.eventKey,S(e,e.activeKey)))}),this.instanceArray=[]},mounted:function(){this.manualRef&&this.manualRef(this)},updated:function(){var e=(0,y.Oq)(this),t=this.prevProps,n="activeKey"in e?e.activeKey:e.store.getState().activeKey[L(e)],r=S(e,n);if(r!==n)k(e.store,L(e),r);else if("activeKey"in t){var i=S(t,t.activeKey);r!==i&&k(e.store,L(e),r)}this.prevProps=(0,o.A)({},e)},methods:{onKeyDown:function(e,t){var n=e.keyCode,r=void 0;if(this.getFlatInstanceArray().forEach(function(t){t&&t.active&&t.onKeyDown&&(r=t.onKeyDown(e))}),r)return 1;var i=null;return n!==u.A.UP&&n!==u.A.DOWN||(i=this.step(n===u.A.UP?-1:1)),i?(e.preventDefault(),k(this.$props.store,L(this.$props),i.eventKey),"function"===typeof t&&t(i),1):void 0},onItemHover:function(e){var t=e.key,n=e.hover;k(this.$props.store,L(this.$props),n?t:null)},onDeselect:function(e){this.__emit("deselect",e)},onSelect:function(e){this.__emit("select",e)},onClick:function(e){this.__emit("click",e)},onOpenChange:function(e){this.__emit("openChange",e)},onDestroy:function(e){this.__emit("destroy",e)},getFlatInstanceArray:function(){return this.instanceArray},getOpenTransitionName:function(){return this.$props.openTransitionName},step:function(e){var t=this.getFlatInstanceArray(),n=this.$props.store.getState().activeKey[L(this.$props)],r=t.length;if(!r)return null;e<0&&(t=t.concat().reverse());var i=-1;if(t.every(function(e,t){return!e||e.eventKey!==n||(i=t,!1)}),this.defaultActiveFirst||-1===i||!x(t.slice(i,r-1))){var o=(i+1)%r,a=o;do{var s=t[a];if(s&&!s.disabled)return s;a=(a+1)%r}while(a!==o);return null}},getIcon:function(e,t){if(e.$createElement){var n=e[t];return void 0!==n?n:e.$slots[t]||e.$scopedSlots[t]}var r=(0,y.Ts)(e)[t];if(void 0!==r)return r;var i=[],o=e.componentOptions||{};return(o.children||[]).forEach(function(e){e.data&&e.data.slot===t&&("template"===e.tag?i.push(e.children):i.push(e))}),i.length?i:void 0},renderCommonMenuItem:function(e,t,n){var r=this;if(void 0===e.tag)return e;var i=this.$props.store.getState(),a=this.$props,s=(0,f.dL)(e,a.eventKey,t),c=e.componentOptions.propsData||{},l=s===i.activeKey[L(this.$props)];c.disabled||(this.instanceArrayKeyIndexMap[s]=Object.keys(this.instanceArrayKeyIndexMap).length);var u=(0,y.kQ)(e),d={props:(0,o.A)({mode:c.mode||a.mode,level:a.level,inlineIndent:a.inlineIndent,renderMenuItem:this.renderMenuItem,rootPrefixCls:a.prefixCls,index:t,parentMenu:a.parentMenu,manualRef:c.disabled?f.lQ:C.bind(this,s),eventKey:s,active:!c.disabled&&l,multiple:a.multiple,openTransitionName:this.getOpenTransitionName(),openAnimation:a.openAnimation,subMenuOpenDelay:a.subMenuOpenDelay,subMenuCloseDelay:a.subMenuCloseDelay,forceSubMenuRender:a.forceSubMenuRender,builtinPlacements:a.builtinPlacements,itemIcon:this.getIcon(e,"itemIcon")||this.getIcon(this,"itemIcon"),expandIcon:this.getIcon(e,"expandIcon")||this.getIcon(this,"expandIcon")},n),on:{click:function(e){(u.click||f.lQ)(e),r.onClick(e)},itemHover:this.onItemHover,openChange:this.onOpenChange,deselect:this.onDeselect,select:this.onSelect}};return("inline"===a.mode||(0,f.Xb)())&&(d.props.triggerSubMenuAction="click"),(0,g.Ob)(e,d)},renderMenuItem:function(e,t,n){if(!e)return null;var r=this.$props.store.getState(),i={openKeys:r.openKeys,selectedKeys:r.selectedKeys,triggerSubMenuAction:this.triggerSubMenuAction,isRootMenu:!1,subMenuKey:n};return this.renderCommonMenuItem(e,t,i)}},render:function(){var e=this,t=arguments[0],n=(0,r.A)(this.$props,[]),i=n.eventKey,o=n.prefixCls,s=n.visible,c=n.level,l=n.mode,u=n.theme;this.instanceArray=[],this.instanceArrayKeyIndexMap={};var d=h()(n.prefixCls,n.prefixCls+"-"+n.mode),f={props:{tag:"ul",visible:s,prefixCls:o,level:c,mode:l,theme:u,overflowedIndicator:(0,y.nu)(this,"overflowedIndicator")},attrs:{role:n.role||"menu"},class:d,on:(0,a.A)((0,y.WM)(this),["click"])};return n.focusable&&(f.attrs.tabIndex="0",f.on.keydown=this.onKeyDown),t(w,f,[n.children.map(function(t,n){return e.renderMenuItem(t,n,i||"0-menu-")})])}},T=(0,c.A)()(z)},55384:function(e,t,n){"use strict";var r=n(4718);t.A={prefixCls:r.A.string.def("rc-menu"),focusable:r.A.bool.def(!0),multiple:r.A.bool,defaultActiveFirst:r.A.bool,visible:r.A.bool.def(!0),activeKey:r.A.oneOfType([r.A.string,r.A.number]),selectedKeys:r.A.arrayOf(r.A.oneOfType([r.A.string,r.A.number])),defaultSelectedKeys:r.A.arrayOf(r.A.oneOfType([r.A.string,r.A.number])).def([]),defaultOpenKeys:r.A.arrayOf(r.A.oneOfType([r.A.string,r.A.number])).def([]),openKeys:r.A.arrayOf(r.A.oneOfType([r.A.string,r.A.number])),openAnimation:r.A.oneOfType([r.A.string,r.A.object]),mode:r.A.oneOf(["horizontal","vertical","vertical-left","vertical-right","inline"]).def("vertical"),triggerSubMenuAction:r.A.string.def("hover"),subMenuOpenDelay:r.A.number.def(.1),subMenuCloseDelay:r.A.number.def(.1),level:r.A.number.def(1),inlineIndent:r.A.number.def(24),theme:r.A.oneOf(["light","dark"]).def("light"),getPopupContainer:r.A.func,openTransitionName:r.A.string,forceSubMenuRender:r.A.bool,selectable:r.A.bool,isRootMenu:r.A.bool.def(!0),builtinPlacements:r.A.object.def(function(){return{}}),itemIcon:r.A.any,expandIcon:r.A.any,overflowedIndicator:r.A.any}},74072:function(e,t,n){"use strict";n.d(t,{Ay:function(){return p}});var r=n(85505),i=n(4718);function o(e){var t=e,n=[];function i(e){t=(0,r.A)({},t,e);for(var i=0;i=n&&(e.updateKey=a[0].updateKey||a[0].key,a.shift()),a.push(e)),{notices:a}})},remove:function(e){this.setState(function(t){return{notices:t.notices.filter(function(t){return t.key!==e})}})}},render:function(e){var t=this,n=this.prefixCls,r=this.notices,o=this.remove,a=this.getTransitionName,c=(0,u.A)(a()),d=r.map(function(i,a){var c=Boolean(a===r.length-1&&i.updateKey),u=i.updateKey?i.updateKey:i.key,d=i.content,f=i.duration,m=i.closable,v=i.onClose,g=i.style,y=i["class"],_=(0,l.A)(o.bind(t,i.key),v),b={props:{prefixCls:n,duration:f,closable:m,update:c,closeIcon:(0,s.nu)(t,"closeIcon")},on:{close:_,click:i.onClick||p},style:g,class:y,key:u};return e(h,b,["function"===typeof d?d(e):d])}),f=(0,i.A)({},n,1),m=(0,s.gd)(this);return e("div",{class:f,style:m||{top:"65px",left:"50%"}},[e("transition-group",c,[d])])},newInstance:function(e,t){var n=e||{},i=n.getContainer,a=n.style,s=n["class"],c=(0,r.A)(n,["getContainer","style","class"]),l=document.createElement("div");if(i){var u=i();u.appendChild(l)}else document.body.appendChild(l);var d=f.A.Vue||o.Ay;new d({el:l,mounted:function(){var e=this;this.$nextTick(function(){t({notice:function(t){e.$refs.notification.add(t)},removeNotice:function(t){e.$refs.notification.remove(t)},component:e,destroy:function(){e.$destroy(),e.$el.parentNode.removeChild(e.$el)}})})},render:function(){var e=arguments[0],t={props:c,ref:"notification",style:a,class:s};return e(y,t)}})}},_=y,b=_},15709:function(e,t){"use strict";t.A={items_per_page:"/ page",jump_to:"Go to",jump_to_confirm:"confirm",page:"",prev_page:"Previous Page",next_page:"Next Page",prev_5:"Previous 5 Pages",next_5:"Next 5 Pages",prev_3:"Previous 3 Pages",next_3:"Next 3 Pages"}},48931:function(e,t){"use strict";t.A={items_per_page:"条/页",jump_to:"跳至",jump_to_confirm:"确定",page:"页",prev_page:"上一页",next_page:"下一页",prev_5:"向前 5 页",next_5:"向后 5 页",prev_3:"向前 3 页",next_3:"向后 3 页"}},68052:function(e,t,n){"use strict";var r=n(4718);t.A={props:{value:r.A.oneOfType([r.A.string,r.A.number]),label:r.A.oneOfType([r.A.string,r.A.number])},isSelectOptGroup:!0}},28781:function(e,t,n){"use strict";var r=n(4718);t.A={props:{value:r.A.oneOfType([r.A.string,r.A.number]),label:r.A.oneOfType([r.A.string,r.A.number]),disabled:r.A.bool,title:r.A.oneOfType([r.A.string,r.A.number])},isSelectOption:!0}},7772:function(e,t,n){"use strict";n.d(t,{A:function(){return S}});var r=n(95093),i=n.n(r),o=n(4718),a=n(52315),s=n(75189),c=n.n(s),l={mixins:[a.A],props:{format:o.A.string,prefixCls:o.A.string,disabledDate:o.A.func,placeholder:o.A.string,clearText:o.A.string,value:o.A.object,inputReadOnly:o.A.bool.def(!1),hourOptions:o.A.array,minuteOptions:o.A.array,secondOptions:o.A.array,disabledHours:o.A.func,disabledMinutes:o.A.func,disabledSeconds:o.A.func,allowEmpty:o.A.bool,defaultOpenValue:o.A.object,currentSelectPanel:o.A.string,focusOnOpen:o.A.bool,clearIcon:o.A.any},data:function(){var e=this.value,t=this.format;return{str:e&&e.format(t)||"",invalid:!1}},mounted:function(){var e=this;if(this.focusOnOpen){var t=window.requestAnimationFrame||window.setTimeout;t(function(){e.$refs.input.focus(),e.$refs.input.select()})}},watch:{value:function(e){var t=this;this.$nextTick(function(){t.setState({str:e&&e.format(t.format)||"",invalid:!1})})}},methods:{onInputChange:function(e){var t=e.target,n=t.value,r=t.composing,o=this.str,a=void 0===o?"":o;if(!e.isComposing&&!r&&a!==n){this.setState({str:n});var s=this.format,c=this.hourOptions,l=this.minuteOptions,u=this.secondOptions,d=this.disabledHours,h=this.disabledMinutes,f=this.disabledSeconds,p=this.value;if(n){var m=this.getProtoValue().clone(),v=i()(n,s,!0);if(!v.isValid())return void this.setState({invalid:!0});if(m.hour(v.hour()).minute(v.minute()).second(v.second()),c.indexOf(m.hour())<0||l.indexOf(m.minute())<0||u.indexOf(m.second())<0)return void this.setState({invalid:!0});var g=d(),y=h(m.hour()),_=f(m.hour(),m.minute());if(g&&g.indexOf(m.hour())>=0||y&&y.indexOf(m.minute())>=0||_&&_.indexOf(m.second())>=0)return void this.setState({invalid:!0});if(p){if(p.hour()!==m.hour()||p.minute()!==m.minute()||p.second()!==m.second()){var b=p.clone();b.hour(m.hour()),b.minute(m.minute()),b.second(m.second()),this.__emit("change",b)}}else p!==m&&this.__emit("change",m)}else this.__emit("change",null);this.setState({invalid:!1})}},onKeyDown:function(e){27===e.keyCode&&this.__emit("esc"),this.__emit("keydown",e)},getProtoValue:function(){return this.value||this.defaultOpenValue},getInput:function(){var e=this.$createElement,t=this.prefixCls,n=this.placeholder,r=this.inputReadOnly,i=this.invalid,o=this.str,a=i?t+"-input-invalid":"";return e("input",c()([{class:t+"-input "+a,ref:"input",on:{keydown:this.onKeyDown,input:this.onInputChange},domProps:{value:o},attrs:{placeholder:n,readOnly:!!r}},{directives:[{name:"ant-input"}]}]))}},render:function(){var e=arguments[0],t=this.prefixCls;return e("div",{class:t+"-input-wrap"},[this.getInput()])}},u=l,d=n(44508),h=n(46942),f=n.n(h),p=n(93146),m=n.n(p);function v(){}var g=function e(t,n,r){if(r<=0)m()(function(){t.scrollTop=n});else{var i=n-t.scrollTop,o=i/r*10;m()(function(){t.scrollTop+=o,t.scrollTop!==n&&e(t,n,r-10)})}},y={mixins:[a.A],props:{prefixCls:o.A.string,options:o.A.array,selectedIndex:o.A.number,type:o.A.string},data:function(){return{active:!1}},mounted:function(){var e=this;this.$nextTick(function(){e.scrollToSelected(0)})},watch:{selectedIndex:function(){var e=this;this.$nextTick(function(){e.scrollToSelected(120)})}},methods:{onSelect:function(e){var t=this.type;this.__emit("select",t,e)},onEsc:function(e){this.__emit("esc",e)},getOptions:function(){var e=this,t=this.$createElement,n=this.options,r=this.selectedIndex,i=this.prefixCls;return n.map(function(n,o){var a,s=f()((a={},(0,d.A)(a,i+"-select-option-selected",r===o),(0,d.A)(a,i+"-select-option-disabled",n.disabled),a)),c=n.disabled?v:function(){e.onSelect(n.value)},l=function(t){13===t.keyCode?c():27===t.keyCode&&e.onEsc()};return t("li",{attrs:{role:"button",disabled:n.disabled,tabIndex:"0"},on:{click:c,keydown:l},class:s,key:o},[n.value])})},handleMouseEnter:function(e){this.setState({active:!0}),this.__emit("mouseenter",e)},handleMouseLeave:function(){this.setState({active:!1})},scrollToSelected:function(e){var t=this.$el,n=this.$refs.list;if(n){var r=this.selectedIndex;r<0&&(r=0);var i=n.children[r],o=i.offsetTop;g(t,o,e)}}},render:function(){var e,t=arguments[0],n=this.prefixCls,r=this.options,i=this.active;if(0===r.length)return null;var o=(e={},(0,d.A)(e,n+"-select",1),(0,d.A)(e,n+"-select-active",i),e);return t("div",{class:o,on:{mouseenter:this.handleMouseEnter,mouseleave:this.handleMouseLeave}},[t("ul",{ref:"list"},[this.getOptions()])])}},_=y,b=function(e,t){var n=""+e;e<10&&(n="0"+e);var r=!1;return t&&t.indexOf(e)>=0&&(r=!0),{value:n,disabled:r}},M={mixins:[a.A],name:"Combobox",props:{format:o.A.string,defaultOpenValue:o.A.object,prefixCls:o.A.string,value:o.A.object,showHour:o.A.bool,showMinute:o.A.bool,showSecond:o.A.bool,hourOptions:o.A.array,minuteOptions:o.A.array,secondOptions:o.A.array,disabledHours:o.A.func,disabledMinutes:o.A.func,disabledSeconds:o.A.func,use12Hours:o.A.bool,isAM:o.A.bool},methods:{onItemChange:function(e,t){var n=this.defaultOpenValue,r=this.use12Hours,i=this.value,o=this.isAM,a=(i||n).clone();if("hour"===e)r?o?a.hour(+t%12):a.hour(+t%12+12):a.hour(+t);else if("minute"===e)a.minute(+t);else if("ampm"===e){var s=t.toUpperCase();r&&("PM"===s&&a.hour()<12&&a.hour(a.hour()%12+12),"AM"===s&&a.hour()>=12&&a.hour(a.hour()-12)),this.__emit("amPmChange",s)}else a.second(+t);this.__emit("change",a)},onEnterSelectPanel:function(e){this.__emit("currentSelectPanelChange",e)},onEsc:function(e){this.__emit("esc",e)},getHourSelect:function(e){var t=this,n=this.$createElement,r=this.prefixCls,i=this.hourOptions,o=this.disabledHours,a=this.showHour,s=this.use12Hours;if(!a)return null;var c=o(),l=void 0,u=void 0;return s?(l=[12].concat(i.filter(function(e){return e<12&&e>0})),u=e%12||12):(l=i,u=e),n(_,{attrs:{prefixCls:r,options:l.map(function(e){return b(e,c)}),selectedIndex:l.indexOf(u),type:"hour"},on:{select:this.onItemChange,mouseenter:function(){return t.onEnterSelectPanel("hour")},esc:this.onEsc}})},getMinuteSelect:function(e){var t=this,n=this.$createElement,r=this.prefixCls,i=this.minuteOptions,o=this.disabledMinutes,a=this.defaultOpenValue,s=this.showMinute,c=this.value;if(!s)return null;var l=c||a,u=o(l.hour());return n(_,{attrs:{prefixCls:r,options:i.map(function(e){return b(e,u)}),selectedIndex:i.indexOf(e),type:"minute"},on:{select:this.onItemChange,mouseenter:function(){return t.onEnterSelectPanel("minute")},esc:this.onEsc}})},getSecondSelect:function(e){var t=this,n=this.$createElement,r=this.prefixCls,i=this.secondOptions,o=this.disabledSeconds,a=this.showSecond,s=this.defaultOpenValue,c=this.value;if(!a)return null;var l=c||s,u=o(l.hour(),l.minute());return n(_,{attrs:{prefixCls:r,options:i.map(function(e){return b(e,u)}),selectedIndex:i.indexOf(e),type:"second"},on:{select:this.onItemChange,mouseenter:function(){return t.onEnterSelectPanel("second")},esc:this.onEsc}})},getAMPMSelect:function(){var e=this,t=this.$createElement,n=this.prefixCls,r=this.use12Hours,i=this.format,o=this.isAM;if(!r)return null;var a=["am","pm"].map(function(e){return i.match(/\sA/)?e.toUpperCase():e}).map(function(e){return{value:e}}),s=o?0:1;return t(_,{attrs:{prefixCls:n,options:a,selectedIndex:s,type:"ampm"},on:{select:this.onItemChange,mouseenter:function(){return e.onEnterSelectPanel("ampm")},esc:this.onEsc}})}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.defaultOpenValue,r=this.value,i=r||n;return e("div",{class:t+"-combobox"},[this.getHourSelect(i.hour()),this.getMinuteSelect(i.minute()),this.getSecondSelect(i.second()),this.getAMPMSelect(i.hour())])}},A=M,w=n(15848);function x(){}function k(e,t,n){for(var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,i=[],o=0;o=0&&e.hour()<12}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.placeholder,r=this.disabledMinutes,i=this.addon,o=this.disabledSeconds,a=this.hideDisabledOptions,s=this.showHour,c=this.showMinute,l=this.showSecond,d=this.format,h=this.defaultOpenValue,f=this.clearText,p=this.use12Hours,m=this.focusOnOpen,v=this.hourStep,g=this.minuteStep,y=this.secondStep,_=this.inputReadOnly,b=this.sValue,M=this.currentSelectPanel,C=(0,w.nu)(this,"clearIcon"),S=(0,w.WM)(this),z=S.esc,T=void 0===z?x:z,O=S.keydown,H=void 0===O?x:O,D=this.disabledHours2(),Y=r(b?b.hour():null),V=o(b?b.hour():null,b?b.minute():null),P=k(24,D,a,v),E=k(60,Y,a,g),j=k(60,V,a,y),F=L(h,P,E,j);return e("div",{class:t+"-inner"},[e(u,{attrs:{clearText:f,prefixCls:t,defaultOpenValue:F,value:b,currentSelectPanel:M,format:d,placeholder:n,hourOptions:P,minuteOptions:E,secondOptions:j,disabledHours:this.disabledHours2,disabledMinutes:r,disabledSeconds:o,focusOnOpen:m,inputReadOnly:_,clearIcon:C},on:{esc:T,change:this.onChange,keydown:H}}),e(A,{attrs:{prefixCls:t,value:b,defaultOpenValue:F,format:d,showHour:s,showMinute:c,showSecond:l,hourOptions:P,minuteOptions:E,secondOptions:j,disabledHours:this.disabledHours2,disabledMinutes:r,disabledSeconds:o,use12Hours:p,isAM:this.isAM()},on:{change:this.onChange,amPmChange:this.onAmPmChange,currentSelectPanelChange:this.onCurrentSelectPanelChange,esc:this.onEsc}}),i(this)])}},S=C},47006:function(e,t,n){"use strict";n.d(t,{A:function(){return lt}});var r,i=n(85505),o=n(85471),a=n(24415),s=n(4718),c=n(17948),l=n(15848),u=n(982),d=n(82160),h=n(36873),f=n(97479);function p(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function m(e){for(var t=1;t=0&&n.left>=0&&n.bottom>n.top&&n.right>n.left?n:null}function _e(e,t,n,r){var i=fe.clone(e),o={width:t.width,height:t.height};return r.adjustX&&i.left=n.left&&i.left+o.width>n.right&&(o.width-=i.left+o.width-n.right),r.adjustX&&i.left+o.width>n.right&&(i.left=Math.max(n.right-o.width,n.left)),r.adjustY&&i.top=n.top&&i.top+o.height>n.bottom&&(o.height-=i.top+o.height-n.bottom),r.adjustY&&i.top+o.height>n.bottom&&(i.top=Math.max(n.bottom-o.height,n.top)),fe.mix(i,o)}function be(e){var t,n,r;if(fe.isWindow(e)||9===e.nodeType){var i=fe.getWindow(e);t={left:fe.getWindowScrollLeft(i),top:fe.getWindowScrollTop(i)},n=fe.viewportWidth(i),r=fe.viewportHeight(i)}else t=fe.offset(e),n=fe.outerWidth(e),r=fe.outerHeight(e);return t.width=n,t.height=r,t}function Me(e,t){var n=t.charAt(0),r=t.charAt(1),i=e.width,o=e.height,a=e.left,s=e.top;return"c"===n?s+=o/2:"b"===n&&(s+=o),"c"===r?a+=i/2:"r"===r&&(a+=i),{left:a,top:s}}function Ae(e,t,n,r,i){var o=Me(t,n[1]),a=Me(e,n[0]),s=[a.left-o.left,a.top-o.top];return{left:Math.round(e.left-s[0]+r[0]-i[0]),top:Math.round(e.top-s[1]+r[1]-i[1])}}function we(e,t,n){return e.leftn.right}function xe(e,t,n){return e.topn.bottom}function ke(e,t,n){return e.left>n.right||e.left+t.widthn.bottom||e.top+t.height=n.right||r.top>=n.bottom}function De(e,t,n){var r=n.target||t,i=be(r),o=!He(r,n.overflow&&n.overflow.alwaysByViewport);return Oe(e,i,n,o)}function Ye(e,t,n){var r,i,o=fe.getDocument(e),a=o.defaultView||o.parentWindow,s=fe.getWindowScrollLeft(a),c=fe.getWindowScrollTop(a),l=fe.viewportWidth(a),u=fe.viewportHeight(a);r="pageX"in t?t.pageX:s+t.clientX,i="pageY"in t?t.pageY:c+t.clientY;var d={left:r,top:i,width:0,height:0},h=r>=0&&r<=s+l&&i>=0&&i<=c+u,f=[n.points[0],"cc"];return Oe(e,d,m(m({},n),{},{points:f}),h)}De.__getOffsetParent=me,De.__getVisibleRectForElement=ye;function Ve(e,t){var n=void 0;function r(){n&&(clearTimeout(n),n=null)}function i(){r(),n=setTimeout(e,t)}return i.clear=r,i}function Pe(e,t){return e===t||!(!e||!t)&&("pageX"in t&&"pageY"in t?e.pageX===t.pageX&&e.pageY===t.pageY:"clientX"in t&&"clientY"in t&&(e.clientX===t.clientX&&e.clientY===t.clientY))}function Ee(e){return e&&"object"===("undefined"===typeof e?"undefined":(0,f.A)(e))&&e.window===e}function je(e,t){var n=Math.floor(e),r=Math.floor(t);return Math.abs(n-r)<=1}function Fe(e,t){e!==document.activeElement&&(0,c.A)(t,e)&&e.focus()}var Ie=n(51927),$e=n(88055),Re=n.n($e);function Ne(e){return"function"===typeof e&&e?e():null}function We(e){return"object"===("undefined"===typeof e?"undefined":(0,f.A)(e))&&e?e:null}var Be={props:{childrenProps:s.A.object,align:s.A.object.isRequired,target:s.A.oneOfType([s.A.func,s.A.object]).def(function(){return window}),monitorBufferTime:s.A.number.def(50),monitorWindowResize:s.A.bool.def(!1),disabled:s.A.bool.def(!1)},data:function(){return this.aligned=!1,{}},mounted:function(){var e=this;this.$nextTick(function(){e.prevProps=(0,i.A)({},e.$props);var t=e.$props;!e.aligned&&e.forceAlign(),!t.disabled&&t.monitorWindowResize&&e.startMonitorWindowResize()})},updated:function(){var e=this;this.$nextTick(function(){var t=e.prevProps,n=e.$props,r=!1;if(!n.disabled){var o=e.$el,a=o?o.getBoundingClientRect():null;if(t.disabled)r=!0;else{var s=Ne(t.target),c=Ne(n.target),l=We(t.target),u=We(n.target);Ee(s)&&Ee(c)?r=!1:(s!==c||s&&!c&&u||l&&u&&c||u&&!Pe(l,u))&&(r=!0);var d=e.sourceRect||{};r||!o||je(d.width,a.width)&&je(d.height,a.height)||(r=!0)}e.sourceRect=a}r&&e.forceAlign(),n.monitorWindowResize&&!n.disabled?e.startMonitorWindowResize():e.stopMonitorWindowResize(),e.prevProps=(0,i.A)({},e.$props,{align:Re()(e.$props.align)})})},beforeDestroy:function(){this.stopMonitorWindowResize()},methods:{startMonitorWindowResize:function(){this.resizeHandler||(this.bufferMonitor=Ve(this.forceAlign,this.$props.monitorBufferTime),this.resizeHandler=(0,d.A)(window,"resize",this.bufferMonitor))},stopMonitorWindowResize:function(){this.resizeHandler&&(this.bufferMonitor.clear(),this.resizeHandler.remove(),this.resizeHandler=null)},forceAlign:function(){var e=this.$props,t=e.disabled,n=e.target,r=e.align;if(!t&&n){var i=this.$el,o=(0,l.WM)(this),a=void 0,s=Ne(n),c=We(n),u=document.activeElement;s?a=De(i,s,r):c&&(a=Ye(i,c,r)),Fe(u,i),this.aligned=!0,o.align&&o.align(i,a)}}},render:function(){var e=this.$props.childrenProps,t=(0,l.$c)(this)[0];return t&&e?(0,Ie.Ob)(t,{props:e}):t}},Ke=Be,Ue=n(75189),qe=n.n(Ue),Ge={props:{visible:s.A.bool,hiddenClassName:s.A.string},render:function(){var e=arguments[0],t=this.$props,n=t.hiddenClassName,r=(t.visible,null);if(n||!this.$slots["default"]||this.$slots["default"].length>1){var i="";r=e("div",{class:i},[this.$slots["default"]])}else r=this.$slots["default"][0];return r}},Je={props:{hiddenClassName:s.A.string.def(""),prefixCls:s.A.string,visible:s.A.bool},render:function(){var e=arguments[0],t=this.$props,n=t.prefixCls,r=t.visible,i=t.hiddenClassName,o={on:(0,l.WM)(this)};return e("div",qe()([o,{class:r?"":i}]),[e(Ge,{class:n+"-content",attrs:{visible:r}},[this.$slots["default"]])])}},Xe=n(75998),Ze=n(52315),Qe={name:"VCTriggerPopup",mixins:[Ze.A],props:{visible:s.A.bool,getClassNameFromAlign:s.A.func,getRootDomNode:s.A.func,align:s.A.any,destroyPopupOnHide:s.A.bool,prefixCls:s.A.string,getContainer:s.A.func,transitionName:s.A.string,animation:s.A.any,maskAnimation:s.A.string,maskTransitionName:s.A.string,mask:s.A.bool,zIndex:s.A.number,popupClassName:s.A.any,popupStyle:s.A.object.def(function(){return{}}),stretch:s.A.string,point:s.A.shape({pageX:s.A.number,pageY:s.A.number})},data:function(){return this.domEl=null,{stretchChecked:!1,targetWidth:void 0,targetHeight:void 0}},mounted:function(){var e=this;this.$nextTick(function(){e.rootNode=e.getPopupDomNode(),e.setStretchSize()})},updated:function(){var e=this;this.$nextTick(function(){e.setStretchSize()})},beforeDestroy:function(){this.$el.parentNode?this.$el.parentNode.removeChild(this.$el):this.$el.remove&&this.$el.remove()},methods:{onAlign:function(e,t){var n=this.$props,r=n.getClassNameFromAlign(t);this.currentAlignClassName!==r&&(this.currentAlignClassName=r,e.className=this.getClassName(r));var i=(0,l.WM)(this);i.align&&i.align(e,t)},setStretchSize:function(){var e=this.$props,t=e.stretch,n=e.getRootDomNode,r=e.visible,i=this.$data,o=i.stretchChecked,a=i.targetHeight,s=i.targetWidth;if(t&&r){var c=n();if(c){var l=c.offsetHeight,u=c.offsetWidth;a===l&&s===u&&o||this.setState({stretchChecked:!0,targetHeight:l,targetWidth:u})}}else o&&this.setState({stretchChecked:!1})},getPopupDomNode:function(){return this.$refs.popupInstance?this.$refs.popupInstance.$el:null},getTargetElement:function(){return this.$props.getRootDomNode()},getAlignTarget:function(){var e=this.$props.point;return e||this.getTargetElement},getMaskTransitionName:function(){var e=this.$props,t=e.maskTransitionName,n=e.maskAnimation;return!t&&n&&(t=e.prefixCls+"-"+n),t},getTransitionName:function(){var e=this.$props,t=e.transitionName,n=e.animation;return t||("string"===typeof n?t=""+n:n&&n.props&&n.props.name&&(t=n.props.name)),t},getClassName:function(e){return this.$props.prefixCls+" "+this.$props.popupClassName+" "+e},getPopupElement:function(){var e=this,t=this.$createElement,n=this.$props,r=this.$slots,o=this.getTransitionName,a=this.$data,s=a.stretchChecked,c=a.targetHeight,u=a.targetWidth,d=n.align,h=n.visible,p=n.prefixCls,m=n.animation,v=n.popupStyle,g=n.getClassNameFromAlign,y=n.destroyPopupOnHide,_=n.stretch,b=this.getClassName(this.currentAlignClassName||g(d));h||(this.currentAlignClassName=null);var M={};_&&(-1!==_.indexOf("height")?M.height="number"===typeof c?c+"px":c:-1!==_.indexOf("minHeight")&&(M.minHeight="number"===typeof c?c+"px":c),-1!==_.indexOf("width")?M.width="number"===typeof u?u+"px":u:-1!==_.indexOf("minWidth")&&(M.minWidth="number"===typeof u?u+"px":u),s||setTimeout(function(){e.$refs.alignInstance&&e.$refs.alignInstance.forceAlign()},0));var A={props:{prefixCls:p,visible:h},class:b,on:(0,l.WM)(this),ref:"popupInstance",style:(0,i.A)({},M,v,this.getZIndexStyle())},w={props:{appear:!0,css:!1}},x=o(),k=!!x,L={beforeEnter:function(){},enter:function(t,n){e.$nextTick(function(){e.$refs.alignInstance?e.$refs.alignInstance.$nextTick(function(){e.domEl=t,(0,Xe.A)(t,x+"-enter",n)}):n()})},beforeLeave:function(){e.domEl=null},leave:function(e,t){(0,Xe.A)(e,x+"-leave",t)}};if("object"===("undefined"===typeof m?"undefined":(0,f.A)(m))){k=!0;var C=m.on,S=void 0===C?{}:C,z=m.props,T=void 0===z?{}:z;w.props=(0,i.A)({},w.props,T),w.on=(0,i.A)({},L,S)}else w.on=L;return k||(w={}),t("transition",w,y?[h?t(Ke,{attrs:{target:this.getAlignTarget(),monitorWindowResize:!0,align:d},key:"popup",ref:"alignInstance",on:{align:this.onAlign}},[t(Je,A,[r["default"]])]):null]:[t(Ke,{directives:[{name:"show",value:h}],attrs:{target:this.getAlignTarget(),monitorWindowResize:!0,disabled:!h,align:d},key:"popup",ref:"alignInstance",on:{align:this.onAlign}},[t(Je,A,[r["default"]])])])},getZIndexStyle:function(){var e={},t=this.$props;return void 0!==t.zIndex&&(e.zIndex=t.zIndex),e},getMaskElement:function(){var e=this.$createElement,t=this.$props,n=null;if(t.mask){var r=this.getMaskTransitionName();n=e(Ge,{directives:[{name:"show",value:t.visible}],style:this.getZIndexStyle(),key:"mask",class:t.prefixCls+"-mask",attrs:{visible:t.visible}}),r&&(n=e("transition",{attrs:{appear:!0,name:r}},[n]))}return n}},render:function(){var e=arguments[0],t=this.getMaskElement,n=this.getPopupElement;return e("div",[t(),n()])}};function et(e,t,n){return n?e[0]===t[0]:e[0]===t[0]&&e[1]===t[1]}function tt(e,t,n){var r=e[t]||{};return(0,i.A)({},r,n)}function nt(e,t,n,r){var i=n.points;for(var o in e)if(e.hasOwnProperty(o)&&et(e[o].points,i,r))return t+"-placement-"+o;return""}function rt(){}var it={props:{autoMount:s.A.bool.def(!0),autoDestroy:s.A.bool.def(!0),visible:s.A.bool,forceRender:s.A.bool.def(!1),parent:s.A.any,getComponent:s.A.func.isRequired,getContainer:s.A.func.isRequired,children:s.A.func.isRequired},mounted:function(){this.autoMount&&this.renderComponent()},updated:function(){this.autoMount&&this.renderComponent()},beforeDestroy:function(){this.autoDestroy&&this.removeContainer()},methods:{removeContainer:function(){this.container&&(this._component&&this._component.$destroy(),this.container.parentNode.removeChild(this.container),this.container=null,this._component=null)},renderComponent:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],n=this.visible,r=this.forceRender,i=this.getContainer,o=this.parent,a=this;if(n||o._component||o.$refs._component||r){var s=this.componentEl;this.container||(this.container=i(),s=document.createElement("div"),this.componentEl=s,this.container.appendChild(s));var c={component:a.getComponent(e)};this._component?this._component.setComponent(c):this._component=new this.$root.constructor({el:s,parent:a,data:{_com:c},mounted:function(){this.$nextTick(function(){t&&t.call(a)})},updated:function(){this.$nextTick(function(){t&&t.call(a)})},methods:{setComponent:function(e){this.$data._com=e}},render:function(){return this.$data._com.component}})}}},render:function(){return this.children({renderComponent:this.renderComponent,removeContainer:this.removeContainer})}};function ot(){return""}function at(){return window.document}o.Ay.use(a.A,{name:"ant-ref"});var st=["click","mousedown","touchstart","mouseenter","mouseleave","focus","blur","contextmenu"],ct={name:"Trigger",mixins:[Ze.A],props:{action:s.A.oneOfType([s.A.string,s.A.arrayOf(s.A.string)]).def([]),showAction:s.A.any.def([]),hideAction:s.A.any.def([]),getPopupClassNameFromAlign:s.A.any.def(ot),afterPopupVisibleChange:s.A.func.def(rt),popup:s.A.any,popupStyle:s.A.object.def(function(){return{}}),prefixCls:s.A.string.def("rc-trigger-popup"),popupClassName:s.A.string.def(""),popupPlacement:s.A.string,builtinPlacements:s.A.object,popupTransitionName:s.A.oneOfType([s.A.string,s.A.object]),popupAnimation:s.A.any,mouseEnterDelay:s.A.number.def(0),mouseLeaveDelay:s.A.number.def(.1),zIndex:s.A.number,focusDelay:s.A.number.def(0),blurDelay:s.A.number.def(.15),getPopupContainer:s.A.func,getDocument:s.A.func.def(at),forceRender:s.A.bool,destroyPopupOnHide:s.A.bool.def(!1),mask:s.A.bool.def(!1),maskClosable:s.A.bool.def(!0),popupAlign:s.A.object.def(function(){return{}}),popupVisible:s.A.bool,defaultPopupVisible:s.A.bool.def(!1),maskTransitionName:s.A.oneOfType([s.A.string,s.A.object]),maskAnimation:s.A.string,stretch:s.A.string,alignPoint:s.A.bool},provide:function(){return{vcTriggerContext:this}},inject:{vcTriggerContext:{default:function(){return{}}},savePopupRef:{default:function(){return rt}},dialogContext:{default:function(){return null}}},data:function(){var e=this,t=this.$props,n=void 0;return n=(0,l.cK)(this,"popupVisible")?!!t.popupVisible:!!t.defaultPopupVisible,st.forEach(function(t){e["fire"+t]=function(n){e.fireEvents(t,n)}}),{prevPopupVisible:n,sPopupVisible:n,point:null}},watch:{popupVisible:function(e){void 0!==e&&(this.prevPopupVisible=this.sPopupVisible,this.sPopupVisible=e)}},deactivated:function(){this.setPopupVisible(!1)},mounted:function(){var e=this;this.$nextTick(function(){e.renderComponent(null),e.updatedCal()})},updated:function(){var e=this,t=function(){e.sPopupVisible!==e.prevPopupVisible&&e.afterPopupVisibleChange(e.sPopupVisible),e.prevPopupVisible=e.sPopupVisible};this.renderComponent(null,t),this.$nextTick(function(){e.updatedCal()})},beforeDestroy:function(){this.clearDelayTimer(),this.clearOutsideHandler(),clearTimeout(this.mouseDownTimeout)},methods:{updatedCal:function(){var e=this.$props,t=this.$data;if(t.sPopupVisible){var n=void 0;this.clickOutsideHandler||!this.isClickToHide()&&!this.isContextmenuToShow()||(n=e.getDocument(),this.clickOutsideHandler=(0,d.A)(n,"mousedown",this.onDocumentClick)),this.touchOutsideHandler||(n=n||e.getDocument(),this.touchOutsideHandler=(0,d.A)(n,"touchstart",this.onDocumentClick)),!this.contextmenuOutsideHandler1&&this.isContextmenuToShow()&&(n=n||e.getDocument(),this.contextmenuOutsideHandler1=(0,d.A)(n,"scroll",this.onContextmenuClose)),!this.contextmenuOutsideHandler2&&this.isContextmenuToShow()&&(this.contextmenuOutsideHandler2=(0,d.A)(window,"blur",this.onContextmenuClose))}else this.clearOutsideHandler()},onMouseenter:function(e){var t=this.$props.mouseEnterDelay;this.fireEvents("mouseenter",e),this.delaySetPopupVisible(!0,t,t?null:e)},onMouseMove:function(e){this.fireEvents("mousemove",e),this.setPoint(e)},onMouseleave:function(e){this.fireEvents("mouseleave",e),this.delaySetPopupVisible(!1,this.$props.mouseLeaveDelay)},onPopupMouseenter:function(){this.clearDelayTimer()},onPopupMouseleave:function(e){e&&e.relatedTarget&&!e.relatedTarget.setTimeout&&this._component&&this._component.getPopupDomNode&&(0,c.A)(this._component.getPopupDomNode(),e.relatedTarget)||this.delaySetPopupVisible(!1,this.$props.mouseLeaveDelay)},onFocus:function(e){this.fireEvents("focus",e),this.clearDelayTimer(),this.isFocusToShow()&&(this.focusTime=Date.now(),this.delaySetPopupVisible(!0,this.$props.focusDelay))},onMousedown:function(e){this.fireEvents("mousedown",e),this.preClickTime=Date.now()},onTouchstart:function(e){this.fireEvents("touchstart",e),this.preTouchTime=Date.now()},onBlur:function(e){(0,c.A)(e.target,e.relatedTarget||document.activeElement)||(this.fireEvents("blur",e),this.clearDelayTimer(),this.isBlurToHide()&&this.delaySetPopupVisible(!1,this.$props.blurDelay))},onContextmenu:function(e){e.preventDefault(),this.fireEvents("contextmenu",e),this.setPopupVisible(!0,e)},onContextmenuClose:function(){this.isContextmenuToShow()&&this.close()},onClick:function(e){if(this.fireEvents("click",e),this.focusTime){var t=void 0;if(this.preClickTime&&this.preTouchTime?t=Math.min(this.preClickTime,this.preTouchTime):this.preClickTime?t=this.preClickTime:this.preTouchTime&&(t=this.preTouchTime),Math.abs(t-this.focusTime)<20)return;this.focusTime=0}this.preClickTime=0,this.preTouchTime=0,this.isClickToShow()&&(this.isClickToHide()||this.isBlurToHide())&&e&&e.preventDefault&&e.preventDefault(),e&&e.domEvent&&e.domEvent.preventDefault();var n=!this.$data.sPopupVisible;(this.isClickToHide()&&!n||n&&this.isClickToShow())&&this.setPopupVisible(!this.$data.sPopupVisible,e)},onPopupMouseDown:function(){var e=this,t=this.vcTriggerContext,n=void 0===t?{}:t;this.hasPopupMouseDown=!0,clearTimeout(this.mouseDownTimeout),this.mouseDownTimeout=setTimeout(function(){e.hasPopupMouseDown=!1},0),n.onPopupMouseDown&&n.onPopupMouseDown.apply(n,arguments)},onDocumentClick:function(e){if(!this.$props.mask||this.$props.maskClosable){var t=e.target,n=this.$el;(0,c.A)(n,t)||this.hasPopupMouseDown||this.close()}},getPopupDomNode:function(){return this._component&&this._component.getPopupDomNode?this._component.getPopupDomNode():null},getRootDomNode:function(){return this.$el},handleGetPopupClassFromAlign:function(e){var t=[],n=this.$props,r=n.popupPlacement,i=n.builtinPlacements,o=n.prefixCls,a=n.alignPoint,s=n.getPopupClassNameFromAlign;return r&&i&&t.push(nt(i,o,e,a)),s&&t.push(s(e)),t.join(" ")},getPopupAlign:function(){var e=this.$props,t=e.popupPlacement,n=e.popupAlign,r=e.builtinPlacements;return t&&r?tt(r,t,n):n},savePopup:function(e){this._component=e,this.savePopupRef(e)},getComponent:function(){var e=this.$createElement,t=this,n={};this.isMouseEnterToShow()&&(n.mouseenter=t.onPopupMouseenter),this.isMouseLeaveToHide()&&(n.mouseleave=t.onPopupMouseleave),n.mousedown=this.onPopupMouseDown,n.touchstart=this.onPopupMouseDown;var r=t.handleGetPopupClassFromAlign,o=t.getRootDomNode,a=t.getContainer,s=t.$props,c=s.prefixCls,u=s.destroyPopupOnHide,d=s.popupClassName,h=s.action,f=s.popupAnimation,p=s.popupTransitionName,m=s.popupStyle,v=s.mask,g=s.maskAnimation,y=s.maskTransitionName,_=s.zIndex,b=s.stretch,M=s.alignPoint,A=this.$data,w=A.sPopupVisible,x=A.point,k=this.getPopupAlign(),L={props:{prefixCls:c,destroyPopupOnHide:u,visible:w,point:M&&x,action:h,align:k,animation:f,getClassNameFromAlign:r,stretch:b,getRootDomNode:o,mask:v,zIndex:_,transitionName:p,maskAnimation:g,maskTransitionName:y,getContainer:a,popupClassName:d,popupStyle:m},on:(0,i.A)({align:(0,l.WM)(this).popupAlign||rt},n),directives:[{name:"ant-ref",value:this.savePopup}]};return e(Qe,L,[(0,l.nu)(t,"popup")])},getContainer:function(){var e=this.$props,t=this.dialogContext,n=document.createElement("div");n.style.position="absolute",n.style.top="0",n.style.left="0",n.style.width="100%";var r=e.getPopupContainer?e.getPopupContainer(this.$el,t):e.getDocument().body;return r.appendChild(n),this.popupContainer=n,n},setPopupVisible:function(e,t){var n=this.alignPoint,r=this.sPopupVisible;if(this.clearDelayTimer(),r!==e){(0,l.cK)(this,"popupVisible")||this.setState({sPopupVisible:e,prevPopupVisible:r});var i=(0,l.WM)(this);i.popupVisibleChange&&i.popupVisibleChange(e)}n&&t&&this.setPoint(t)},setPoint:function(e){var t=this.$props.alignPoint;t&&e&&this.setState({point:{pageX:e.pageX,pageY:e.pageY}})},delaySetPopupVisible:function(e,t,n){var r=this,i=1e3*t;if(this.clearDelayTimer(),i){var o=n?{pageX:n.pageX,pageY:n.pageY}:null;this.delayTimer=(0,u.z)(function(){r.setPopupVisible(e,o),r.clearDelayTimer()},i)}else this.setPopupVisible(e,n)},clearDelayTimer:function(){this.delayTimer&&((0,u.q)(this.delayTimer),this.delayTimer=null)},clearOutsideHandler:function(){this.clickOutsideHandler&&(this.clickOutsideHandler.remove(),this.clickOutsideHandler=null),this.contextmenuOutsideHandler1&&(this.contextmenuOutsideHandler1.remove(),this.contextmenuOutsideHandler1=null),this.contextmenuOutsideHandler2&&(this.contextmenuOutsideHandler2.remove(),this.contextmenuOutsideHandler2=null),this.touchOutsideHandler&&(this.touchOutsideHandler.remove(),this.touchOutsideHandler=null)},createTwoChains:function(e){var t=function(){},n=(0,l.WM)(this);return this.childOriginEvents[e]&&n[e]?this["fire"+e]:(t=this.childOriginEvents[e]||n[e]||t,t)},isClickToShow:function(){var e=this.$props,t=e.action,n=e.showAction;return-1!==t.indexOf("click")||-1!==n.indexOf("click")},isContextmenuToShow:function(){var e=this.$props,t=e.action,n=e.showAction;return-1!==t.indexOf("contextmenu")||-1!==n.indexOf("contextmenu")},isClickToHide:function(){var e=this.$props,t=e.action,n=e.hideAction;return-1!==t.indexOf("click")||-1!==n.indexOf("click")},isMouseEnterToShow:function(){var e=this.$props,t=e.action,n=e.showAction;return-1!==t.indexOf("hover")||-1!==n.indexOf("mouseenter")},isMouseLeaveToHide:function(){var e=this.$props,t=e.action,n=e.hideAction;return-1!==t.indexOf("hover")||-1!==n.indexOf("mouseleave")},isFocusToShow:function(){var e=this.$props,t=e.action,n=e.showAction;return-1!==t.indexOf("focus")||-1!==n.indexOf("focus")},isBlurToHide:function(){var e=this.$props,t=e.action,n=e.hideAction;return-1!==t.indexOf("focus")||-1!==n.indexOf("blur")},forcePopupAlign:function(){this.$data.sPopupVisible&&this._component&&this._component.$refs.alignInstance&&this._component.$refs.alignInstance.forceAlign()},fireEvents:function(e,t){this.childOriginEvents[e]&&this.childOriginEvents[e](t),this.__emit(e,t)},close:function(){this.setPopupVisible(!1)}},render:function(){var e=this,t=arguments[0],n=this.sPopupVisible,r=(0,l.Gk)(this.$slots["default"]),i=this.$props,o=i.forceRender,a=i.alignPoint;r.length>1&&(0,h.A)(!1,"Trigger $slots.default.length > 1, just support only one default",!0);var s=r[0];this.childOriginEvents=(0,l.i5)(s);var u={props:{},nativeOn:{},key:"trigger"};return this.isContextmenuToShow()?u.nativeOn.contextmenu=this.onContextmenu:u.nativeOn.contextmenu=this.createTwoChains("contextmenu"),this.isClickToHide()||this.isClickToShow()?(u.nativeOn.click=this.onClick,u.nativeOn.mousedown=this.onMousedown,u.nativeOn.touchstart=this.onTouchstart):(u.nativeOn.click=this.createTwoChains("click"),u.nativeOn.mousedown=this.createTwoChains("mousedown"),u.nativeOn.touchstart=this.createTwoChains("onTouchstart")),this.isMouseEnterToShow()?(u.nativeOn.mouseenter=this.onMouseenter,a&&(u.nativeOn.mousemove=this.onMouseMove)):u.nativeOn.mouseenter=this.createTwoChains("mouseenter"),this.isMouseLeaveToHide()?u.nativeOn.mouseleave=this.onMouseleave:u.nativeOn.mouseleave=this.createTwoChains("mouseleave"),this.isFocusToShow()||this.isBlurToHide()?(u.nativeOn.focus=this.onFocus,u.nativeOn.blur=this.onBlur):(u.nativeOn.focus=this.createTwoChains("focus"),u.nativeOn.blur=function(t){!t||t.relatedTarget&&(0,c.A)(t.target,t.relatedTarget)||e.createTwoChains("blur")(t)}),this.trigger=(0,Ie.Ob)(s,u),t(it,{attrs:{parent:this,visible:n,autoMount:!1,forceRender:o,getComponent:this.getComponent,getContainer:this.getContainer,children:function(t){var n=t.renderComponent;return e.renderComponent=n,e.trigger}}})}},lt=ct},82160:function(e,t,n){"use strict";n.d(t,{A:function(){return o}});var r=n(32223),i=n.n(r);function o(e,t,n,r){return i()(e,t,n,r)}},17948:function(e,t,n){"use strict";function r(e,t){var n=t;while(n){if(n===e)return!0;n=n.parentNode}return!1}n.d(t,{A:function(){return r}})},32173:function(e,t){"use strict";function n(){return n=Object.assign||function(e){for(var t=1;t=o)return e;switch(e){case"%s":return String(t[r++]);case"%d":return Number(t[r++]);case"%j":try{return JSON.stringify(t[r++])}catch(n){return"[Circular]"}default:return e}});return a}return i}function p(e){return"string"===e||"url"===e||"hex"===e||"email"===e||"date"===e||"pattern"===e}function m(e,t){return void 0===e||null===e||(!("array"!==t||!Array.isArray(e)||e.length)||!(!p(t)||"string"!==typeof e||e))}function v(e,t,n){var r=[],i=0,o=e.length;function a(e){r.push.apply(r,e),i++,i===o&&n(r)}e.forEach(function(e){t(e,a)})}function g(e,t,n){var r=0,i=e.length;function o(a){if(a&&a.length)n(a);else{var s=r;r+=1,s()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,url:new RegExp("^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$","i"),hex:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/i},L={integer:function(e){return L.number(e)&&parseInt(e,10)===e},float:function(e){return L.number(e)&&!L.integer(e)},array:function(e){return Array.isArray(e)},regexp:function(e){if(e instanceof RegExp)return!0;try{return!!new RegExp(e)}catch(t){return!1}},date:function(e){return"function"===typeof e.getTime&&"function"===typeof e.getMonth&&"function"===typeof e.getYear&&!isNaN(e.getTime())},number:function(e){return!isNaN(e)&&"number"===typeof e},object:function(e){return"object"===typeof e&&!L.array(e)},method:function(e){return"function"===typeof e},email:function(e){return"string"===typeof e&&!!e.match(k.email)&&e.length<255},url:function(e){return"string"===typeof e&&!!e.match(k.url)},hex:function(e){return"string"===typeof e&&!!e.match(k.hex)}};function C(e,t,n,r,i){if(e.required&&void 0===t)w(e,t,n,r,i);else{var o=["integer","float","array","regexp","object","method","email","number","date","url","hex"],a=e.type;o.indexOf(a)>-1?L[a](t)||r.push(f(i.messages.types[a],e.fullField,e.type)):a&&typeof t!==e.type&&r.push(f(i.messages.types[a],e.fullField,e.type))}}function S(e,t,n,r,i){var o="number"===typeof e.len,a="number"===typeof e.min,s="number"===typeof e.max,c=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,l=t,u=null,d="number"===typeof t,h="string"===typeof t,p=Array.isArray(t);if(d?u="number":h?u="string":p&&(u="array"),!u)return!1;p&&(l=t.length),h&&(l=t.replace(c,"_").length),o?l!==e.len&&r.push(f(i.messages[u].len,e.fullField,e.len)):a&&!s&&le.max?r.push(f(i.messages[u].max,e.fullField,e.max)):a&&s&&(le.max)&&r.push(f(i.messages[u].range,e.fullField,e.min,e.max))}var z="enum";function T(e,t,n,r,i){e[z]=Array.isArray(e[z])?e[z]:[],-1===e[z].indexOf(t)&&r.push(f(i.messages[z],e.fullField,e[z].join(", ")))}function O(e,t,n,r,i){if(e.pattern)if(e.pattern instanceof RegExp)e.pattern.lastIndex=0,e.pattern.test(t)||r.push(f(i.messages.pattern.mismatch,e.fullField,t,e.pattern));else if("string"===typeof e.pattern){var o=new RegExp(e.pattern);o.test(t)||r.push(f(i.messages.pattern.mismatch,e.fullField,t,e.pattern))}}var H={required:w,whitespace:x,type:C,range:S,enum:T,pattern:O};function D(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t,"string")&&!e.required)return n();H.required(e,t,r,o,i,"string"),m(t,"string")||(H.type(e,t,r,o,i),H.range(e,t,r,o,i),H.pattern(e,t,r,o,i),!0===e.whitespace&&H.whitespace(e,t,r,o,i))}n(o)}function Y(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();H.required(e,t,r,o,i),void 0!==t&&H.type(e,t,r,o,i)}n(o)}function V(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(""===t&&(t=void 0),m(t)&&!e.required)return n();H.required(e,t,r,o,i),void 0!==t&&(H.type(e,t,r,o,i),H.range(e,t,r,o,i))}n(o)}function P(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();H.required(e,t,r,o,i),void 0!==t&&H.type(e,t,r,o,i)}n(o)}function E(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();H.required(e,t,r,o,i),m(t)||H.type(e,t,r,o,i)}n(o)}function j(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();H.required(e,t,r,o,i),void 0!==t&&(H.type(e,t,r,o,i),H.range(e,t,r,o,i))}n(o)}function F(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();H.required(e,t,r,o,i),void 0!==t&&(H.type(e,t,r,o,i),H.range(e,t,r,o,i))}n(o)}function I(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if((void 0===t||null===t)&&!e.required)return n();H.required(e,t,r,o,i,"array"),void 0!==t&&null!==t&&(H.type(e,t,r,o,i),H.range(e,t,r,o,i))}n(o)}function $(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();H.required(e,t,r,o,i),void 0!==t&&H.type(e,t,r,o,i)}n(o)}var R="enum";function N(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();H.required(e,t,r,o,i),void 0!==t&&H[R](e,t,r,o,i)}n(o)}function W(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t,"string")&&!e.required)return n();H.required(e,t,r,o,i),m(t,"string")||H.pattern(e,t,r,o,i)}n(o)}function B(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t,"date")&&!e.required)return n();var s;if(H.required(e,t,r,o,i),!m(t,"date"))s=t instanceof Date?t:new Date(t),H.type(e,s,r,o,i),s&&H.range(e,s.getTime(),r,o,i)}n(o)}function K(e,t,n,r,i){var o=[],a=Array.isArray(t)?"array":typeof t;H.required(e,t,r,o,i,a),n(o)}function U(e,t,n,r,i){var o=e.type,a=[],s=e.required||!e.required&&r.hasOwnProperty(e.field);if(s){if(m(t,o)&&!e.required)return n();H.required(e,t,r,a,i,o),m(t,o)||H.type(e,t,r,a,i)}n(a)}function q(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();H.required(e,t,r,o,i)}n(o)}var G={string:D,method:Y,number:V,boolean:P,regexp:E,integer:j,float:F,array:I,object:$,enum:N,pattern:W,date:B,url:U,hex:U,email:U,required:K,any:q};function J(){return{default:"Validation error on field %s",required:"%s is required",enum:"%s must be one of %s",whitespace:"%s cannot be empty",date:{format:"%s date %s is invalid for format %s",parse:"%s date could not be parsed, %s is invalid ",invalid:"%s date %s is invalid"},types:{string:"%s is not a %s",method:"%s is not a %s (function)",array:"%s is not an %s",object:"%s is not an %s",number:"%s is not a %s",date:"%s is not a %s",boolean:"%s is not a %s",integer:"%s is not an %s",float:"%s is not a %s",regexp:"%s is not a valid %s",email:"%s is not a valid %s",url:"%s is not a valid %s",hex:"%s is not a valid %s"},string:{len:"%s must be exactly %s characters",min:"%s must be at least %s characters",max:"%s cannot be longer than %s characters",range:"%s must be between %s and %s characters"},number:{len:"%s must equal %s",min:"%s cannot be less than %s",max:"%s cannot be greater than %s",range:"%s must be between %s and %s"},array:{len:"%s must be exactly %s in length",min:"%s cannot be less than %s in length",max:"%s cannot be greater than %s in length",range:"%s must be between %s and %s in length"},pattern:{mismatch:"%s value %s does not match pattern %s"},clone:function(){var e=JSON.parse(JSON.stringify(this));return e.clone=this.clone,e}}}var X=J();function Z(e){this.rules=null,this._messages=X,this.define(e)}Z.prototype={messages:function(e){return e&&(this._messages=A(J(),e)),this._messages},define:function(e){if(!e)throw new Error("Cannot configure a schema with no rules");if("object"!==typeof e||Array.isArray(e))throw new Error("Rules must be an object");var t,n;for(t in this.rules={},e)e.hasOwnProperty(t)&&(n=e[t],this.rules[t]=Array.isArray(n)?n:[n])},validate:function(e,t,r){var i=this;void 0===t&&(t={}),void 0===r&&(r=function(){});var o,a,s=e,c=t,l=r;if("function"===typeof c&&(l=c,c={}),!this.rules||0===Object.keys(this.rules).length)return l&&l(),Promise.resolve();function u(e){var t,n=[],r={};function i(e){var t;Array.isArray(e)?n=(t=n).concat.apply(t,e):n.push(e)}for(t=0;t=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};r.forEach(["delete","get","head"],function(e){d.headers[e]={}}),r.forEach(["post","put","patch"],function(e){d.headers[e]=r.merge(s)}),e.exports=d},94896:function(e){"use strict";e.exports={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1}},49641:function(e){e.exports={version:"0.26.1"}},69012:function(e){"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r=0)return;a[t]="set-cookie"===t?(a[t]?a[t]:[]).concat([n]):a[t]?a[t]+", "+n:n}}),a):a}},17980:function(e){"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}},34841:function(e,t,n){"use strict";var r=n(49641).version,i={};["object","boolean","number","function","string","symbol"].forEach(function(e,t){i[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}});var o={};function a(e,t,n){if("object"!==typeof e)throw new TypeError("options must be an object");var r=Object.keys(e),i=r.length;while(i-- >0){var o=r[i],a=t[o];if(a){var s=e[o],c=void 0===s||a(s,o,e);if(!0!==c)throw new TypeError("option "+o+" must be "+c)}else if(!0!==n)throw Error("Unknown option "+o)}}i.transitional=function(e,t,n){function i(e,t){return"[Axios v"+r+"] Transitional option '"+e+"'"+t+(n?". "+n:"")}return function(n,r,a){if(!1===e)throw new Error(i(r," has been removed"+(t?" in "+t:"")));return t&&!o[r]&&(o[r]=!0,console.warn(i(r," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,r,a)}},e.exports={assertOptions:a,validators:i}},9516:function(e,t,n){"use strict";var r=n(69012),i=Object.prototype.toString;function o(e){return Array.isArray(e)}function a(e){return"undefined"===typeof e}function s(e){return null!==e&&!a(e)&&null!==e.constructor&&!a(e.constructor)&&"function"===typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}function c(e){return"[object ArrayBuffer]"===i.call(e)}function l(e){return"[object FormData]"===i.call(e)}function u(e){var t;return t="undefined"!==typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&c(e.buffer),t}function d(e){return"string"===typeof e}function h(e){return"number"===typeof e}function f(e){return null!==e&&"object"===typeof e}function p(e){if("[object Object]"!==i.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function m(e){return"[object Date]"===i.call(e)}function v(e){return"[object File]"===i.call(e)}function g(e){return"[object Blob]"===i.call(e)}function y(e){return"[object Function]"===i.call(e)}function _(e){return f(e)&&y(e.pipe)}function b(e){return"[object URLSearchParams]"===i.call(e)}function M(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}function A(){return("undefined"===typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!==typeof window&&"undefined"!==typeof document)}function w(e,t){if(null!==e&&"undefined"!==typeof e)if("object"!==typeof e&&(e=[e]),o(e))for(var n=0,r=e.length;n=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}},52040:function(e,t,n){"use strict";var r=n(3053),i=s(r),o=n(4123),a=s(o);function s(e){return e&&e.__esModule?e:{default:e}}t.A=function(){function e(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var s,c=(0,a.default)(e);!(r=(s=c.next()).done);r=!0)if(n.push(s.value),t&&n.length===t)break}catch(l){i=!0,o=l}finally{try{!r&&c["return"]&&c["return"]()}finally{if(i)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if((0,i.default)(Object(t)))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()},32779:function(e,t,n){"use strict";var r=n(9780),i=o(r);function o(e){return e&&e.__esModule?e:{default:e}}t.A=function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tu)if(s=c[u++],s!=s)return!0}else for(;l>u;u++)if((e||u in c)&&c[u]===n)return e||u||0;return!e&&-1}}},13383:function(e,t,n){var r=n(64194),i=n(15413)("toStringTag"),o="Arguments"==r(function(){return arguments}()),a=function(e,t){try{return e[t]}catch(n){}};e.exports=function(e){var t,n,s;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=a(t=Object(e),i))?n:o?r(t):"Object"==(s=r(t))&&"function"==typeof t.callee?"Arguments":s}},64194:function(e){var t={}.toString;e.exports=function(e){return t.call(e).slice(8,-1)}},6791:function(e){var t=e.exports={version:"2.6.12"};"number"==typeof __e&&(__e=t)},64284:function(e,t,n){"use strict";var r=n(21672),i=n(15495);e.exports=function(e,t,n){t in e?r.f(e,t,i(0,n)):e[t]=n}},33971:function(e,t,n){var r=n(73934);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,i){return e.call(t,n,r,i)}}return function(){return e.apply(t,arguments)}}},54947:function(e){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},75872:function(e,t,n){e.exports=!n(82451)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},50559:function(e,t,n){var r=n(90326),i=n(56903).document,o=r(i)&&r(i.createElement);e.exports=function(e){return o?i.createElement(e):{}}},22499:function(e){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},76358:function(e,t,n){var r=n(64796),i=n(14259),o=n(98936);e.exports=function(e){var t=r(e),n=i.f;if(n){var a,s=n(e),c=o.f,l=0;while(s.length>l)c.call(e,a=s[l++])&&t.push(a)}return t}},19786:function(e,t,n){var r=n(56903),i=n(6791),o=n(33971),a=n(14632),s=n(43066),c="prototype",l=function(e,t,n){var u,d,h,f=e&l.F,p=e&l.G,m=e&l.S,v=e&l.P,g=e&l.B,y=e&l.W,_=p?i:i[t]||(i[t]={}),b=_[c],M=p?r:m?r[t]:(r[t]||{})[c];for(u in p&&(n=t),n)d=!f&&M&&void 0!==M[u],d&&s(_,u)||(h=d?M[u]:n[u],_[u]=p&&"function"!=typeof M[u]?n[u]:g&&d?o(h,r):y&&M[u]==h?function(e){var t=function(t,n,r){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n)}return new e(t,n,r)}return e.apply(this,arguments)};return t[c]=e[c],t}(h):v&&"function"==typeof h?o(Function.call,h):h,v&&((_.virtual||(_.virtual={}))[u]=h,e&l.R&&b&&!b[u]&&a(b,u,h)))};l.F=1,l.G=2,l.S=4,l.P=8,l.B=16,l.W=32,l.U=64,l.R=128,e.exports=l},82451:function(e){e.exports=function(e){try{return!!e()}catch(t){return!0}}},56903:function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)},43066:function(e){var t={}.hasOwnProperty;e.exports=function(e,n){return t.call(e,n)}},14632:function(e,t,n){var r=n(21672),i=n(15495);e.exports=n(75872)?function(e,t,n){return r.f(e,t,i(1,n))}:function(e,t,n){return e[t]=n,e}},7745:function(e,t,n){var r=n(56903).document;e.exports=r&&r.documentElement},14913:function(e,t,n){e.exports=!n(75872)&&!n(82451)(function(){return 7!=Object.defineProperty(n(50559)("div"),"a",{get:function(){return 7}}).a})},63278:function(e,t,n){var r=n(64194);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},6471:function(e,t,n){var r=n(52833),i=n(15413)("iterator"),o=Array.prototype;e.exports=function(e){return void 0!==e&&(r.Array===e||o[i]===e)}},1084:function(e,t,n){var r=n(64194);e.exports=Array.isArray||function(e){return"Array"==r(e)}},90326:function(e){e.exports=function(e){return"object"===typeof e?null!==e:"function"===typeof e}},275:function(e,t,n){var r=n(90531);e.exports=function(e,t,n,i){try{return i?t(r(n)[0],n[1]):t(n)}catch(a){var o=e["return"];throw void 0!==o&&r(o.call(e)),a}}},81199:function(e,t,n){"use strict";var r=n(67780),i=n(15495),o=n(1123),a={};n(14632)(a,n(15413)("iterator"),function(){return this}),e.exports=function(e,t,n){e.prototype=r(a,{next:i(1,n)}),o(e,t+" Iterator")}},52500:function(e,t,n){"use strict";var r=n(98849),i=n(19786),o=n(83070),a=n(14632),s=n(52833),c=n(81199),l=n(1123),u=n(66870),d=n(15413)("iterator"),h=!([].keys&&"next"in[].keys()),f="@@iterator",p="keys",m="values",v=function(){return this};e.exports=function(e,t,n,g,y,_,b){c(n,t,g);var M,A,w,x=function(e){if(!h&&e in S)return S[e];switch(e){case p:return function(){return new n(this,e)};case m:return function(){return new n(this,e)}}return function(){return new n(this,e)}},k=t+" Iterator",L=y==m,C=!1,S=e.prototype,z=S[d]||S[f]||y&&S[y],T=z||x(y),O=y?L?x("entries"):T:void 0,H="Array"==t&&S.entries||z;if(H&&(w=u(H.call(new e)),w!==Object.prototype&&w.next&&(l(w,k,!0),r||"function"==typeof w[d]||a(w,d,v))),L&&z&&z.name!==m&&(C=!0,T=function(){return z.call(this)}),r&&!b||!h&&!C&&S[d]||a(S,d,T),s[t]=T,s[k]=v,y)if(M={values:L?T:x(m),keys:_?T:x(p),entries:O},b)for(A in M)A in S||o(S,A,M[A]);else i(i.P+i.F*(h||C),t,M);return M}},26928:function(e,t,n){var r=n(15413)("iterator"),i=!1;try{var o=[7][r]();o["return"]=function(){i=!0},Array.from(o,function(){throw 2})}catch(a){}e.exports=function(e,t){if(!t&&!i)return!1;var n=!1;try{var o=[7],s=o[r]();s.next=function(){return{done:n=!0}},o[r]=function(){return s},e(o)}catch(a){}return n}},35945:function(e){e.exports=function(e,t){return{value:t,done:!!e}}},52833:function(e){e.exports={}},98849:function(e){e.exports=!0},83281:function(e,t,n){var r=n(93108)("meta"),i=n(90326),o=n(43066),a=n(21672).f,s=0,c=Object.isExtensible||function(){return!0},l=!n(82451)(function(){return c(Object.preventExtensions({}))}),u=function(e){a(e,r,{value:{i:"O"+ ++s,w:{}}})},d=function(e,t){if(!i(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!o(e,r)){if(!c(e))return"F";if(!t)return"E";u(e)}return e[r].i},h=function(e,t){if(!o(e,r)){if(!c(e))return!0;if(!t)return!1;u(e)}return e[r].w},f=function(e){return l&&p.NEED&&c(e)&&!o(e,r)&&u(e),e},p=e.exports={KEY:r,NEED:!1,fastKey:d,getWeak:h,onFreeze:f}},99369:function(e,t,n){"use strict";var r=n(75872),i=n(64796),o=n(14259),a=n(98936),s=n(64873),c=n(63278),l=Object.assign;e.exports=!l||n(82451)(function(){var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach(function(e){t[e]=e}),7!=l({},e)[n]||Object.keys(l({},t)).join("")!=r})?function(e,t){var n=s(e),l=arguments.length,u=1,d=o.f,h=a.f;while(l>u){var f,p=c(arguments[u++]),m=d?i(p).concat(d(p)):i(p),v=m.length,g=0;while(v>g)f=m[g++],r&&!h.call(p,f)||(n[f]=p[f])}return n}:l},67780:function(e,t,n){var r=n(90531),i=n(6935),o=n(22499),a=n(36211)("IE_PROTO"),s=function(){},c="prototype",l=function(){var e,t=n(50559)("iframe"),r=o.length,i="<",a=">";t.style.display="none",n(7745).appendChild(t),t.src="javascript:",e=t.contentWindow.document,e.open(),e.write(i+"script"+a+"document.F=Object"+i+"/script"+a),e.close(),l=e.F;while(r--)delete l[c][o[r]];return l()};e.exports=Object.create||function(e,t){var n;return null!==e?(s[c]=r(e),n=new s,s[c]=null,n[a]=e):n=l(),void 0===t?n:i(n,t)}},21672:function(e,t,n){var r=n(90531),i=n(14913),o=n(78381),a=Object.defineProperty;t.f=n(75872)?Object.defineProperty:function(e,t,n){if(r(e),t=o(t,!0),r(n),i)try{return a(e,t,n)}catch(s){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},6935:function(e,t,n){var r=n(21672),i=n(90531),o=n(64796);e.exports=n(75872)?Object.defineProperties:function(e,t){i(e);var n,a=o(t),s=a.length,c=0;while(s>c)r.f(e,n=a[c++],t[n]);return e}},22682:function(e,t,n){var r=n(98936),i=n(15495),o=n(69204),a=n(78381),s=n(43066),c=n(14913),l=Object.getOwnPropertyDescriptor;t.f=n(75872)?l:function(e,t){if(e=o(e),t=a(t,!0),c)try{return l(e,t)}catch(n){}if(s(e,t))return i(!r.f.call(e,t),e[t])}},37106:function(e,t,n){var r=n(69204),i=n(79032).f,o={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(e){try{return i(e)}catch(t){return a.slice()}};e.exports.f=function(e){return a&&"[object Window]"==o.call(e)?s(e):i(r(e))}},79032:function(e,t,n){var r=n(59480),i=n(22499).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return r(e,i)}},14259:function(e,t){t.f=Object.getOwnPropertySymbols},66870:function(e,t,n){var r=n(43066),i=n(64873),o=n(36211)("IE_PROTO"),a=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=i(e),r(e,o)?e[o]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?a:null}},59480:function(e,t,n){var r=n(43066),i=n(69204),o=n(73901)(!1),a=n(36211)("IE_PROTO");e.exports=function(e,t){var n,s=i(e),c=0,l=[];for(n in s)n!=a&&r(s,n)&&l.push(n);while(t.length>c)r(s,n=t[c++])&&(~o(l,n)||l.push(n));return l}},64796:function(e,t,n){var r=n(59480),i=n(22499);e.exports=Object.keys||function(e){return r(e,i)}},98936:function(e,t){t.f={}.propertyIsEnumerable},15495:function(e){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},83070:function(e,t,n){e.exports=n(14632)},1123:function(e,t,n){var r=n(21672).f,i=n(43066),o=n(15413)("toStringTag");e.exports=function(e,t,n){e&&!i(e=n?e:e.prototype,o)&&r(e,o,{configurable:!0,value:t})}},36211:function(e,t,n){var r=n(7421)("keys"),i=n(93108);e.exports=function(e){return r[e]||(r[e]=i(e))}},7421:function(e,t,n){var r=n(6791),i=n(56903),o="__core-js_shared__",a=i[o]||(i[o]={});(e.exports=function(e,t){return a[e]||(a[e]=void 0!==t?t:{})})("versions",[]).push({version:r.version,mode:n(98849)?"pure":"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})},29491:function(e,t,n){var r=n(43570),i=n(54947);e.exports=function(e){return function(t,n){var o,a,s=String(i(t)),c=r(n),l=s.length;return c<0||c>=l?e?"":void 0:(o=s.charCodeAt(c),o<55296||o>56319||c+1===l||(a=s.charCodeAt(c+1))<56320||a>57343?e?s.charAt(c):o:e?s.slice(c,c+2):a-56320+(o-55296<<10)+65536)}}},8830:function(e,t,n){var r=n(43570),i=Math.max,o=Math.min;e.exports=function(e,t){return e=r(e),e<0?i(e+t,0):o(e,t)}},43570:function(e){var t=Math.ceil,n=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?n:t)(e)}},69204:function(e,t,n){var r=n(63278),i=n(54947);e.exports=function(e){return r(i(e))}},9250:function(e,t,n){var r=n(43570),i=Math.min;e.exports=function(e){return e>0?i(r(e),9007199254740991):0}},64873:function(e,t,n){var r=n(54947);e.exports=function(e){return Object(r(e))}},78381:function(e,t,n){var r=n(90326);e.exports=function(e,t){if(!r(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!r(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")}},93108:function(e){var t=0,n=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++t+n).toString(36))}},62613:function(e,t,n){var r=n(56903),i=n(6791),o=n(98849),a=n(1275),s=n(21672).f;e.exports=function(e){var t=i.Symbol||(i.Symbol=o?{}:r.Symbol||{});"_"==e.charAt(0)||e in t||s(t,e,{value:a.f(e)})}},1275:function(e,t,n){t.f=n(15413)},15413:function(e,t,n){var r=n(7421)("wks"),i=n(93108),o=n(56903).Symbol,a="function"==typeof o,s=e.exports=function(e){return r[e]||(r[e]=a&&o[e]||(a?o:i)("Symbol."+e))};s.store=r},18573:function(e,t,n){var r=n(13383),i=n(15413)("iterator"),o=n(52833);e.exports=n(6791).getIteratorMethod=function(e){if(void 0!=e)return e[i]||e["@@iterator"]||o[r(e)]}},23779:function(e,t,n){var r=n(90531),i=n(18573);e.exports=n(6791).getIterator=function(e){var t=i(e);if("function"!=typeof t)throw TypeError(e+" is not iterable!");return r(t.call(e))}},4693:function(e,t,n){var r=n(13383),i=n(15413)("iterator"),o=n(52833);e.exports=n(6791).isIterable=function(e){var t=Object(e);return void 0!==t[i]||"@@iterator"in t||o.hasOwnProperty(r(t))}},32160:function(e,t,n){"use strict";var r=n(33971),i=n(19786),o=n(64873),a=n(275),s=n(6471),c=n(9250),l=n(64284),u=n(18573);i(i.S+i.F*!n(26928)(function(e){Array.from(e)}),"Array",{from:function(e){var t,n,i,d,h=o(e),f="function"==typeof this?this:Array,p=arguments.length,m=p>1?arguments[1]:void 0,v=void 0!==m,g=0,y=u(h);if(v&&(m=r(m,p>2?arguments[2]:void 0,2)),void 0==y||f==Array&&s(y))for(t=c(h.length),n=new f(t);t>g;g++)l(n,g,v?m(h[g],g):h[g]);else for(d=y.call(h),n=new f;!(i=d.next()).done;g++)l(n,g,v?a(d,m,[i.value,g],!0):i.value);return n.length=g,n}})},45270:function(e,t,n){"use strict";var r=n(64233),i=n(35945),o=n(52833),a=n(69204);e.exports=n(52500)(Array,"Array",function(e,t){this._t=a(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,i(1)):i(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])},"values"),o.Arguments=o.Array,r("keys"),r("values"),r("entries")},79115:function(e,t,n){var r=n(19786);r(r.S+r.F,"Object",{assign:n(99369)})},82919:function(e,t,n){var r=n(19786);r(r.S+r.F*!n(75872),"Object",{defineProperty:n(21672).f})},44345:function(){},78750:function(e,t,n){"use strict";var r=n(29491)(!0);n(52500)(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=r(t,n),this._i+=e.length,{value:e,done:!1})})},28957:function(e,t,n){"use strict";var r=n(56903),i=n(43066),o=n(75872),a=n(19786),s=n(83070),c=n(83281).KEY,l=n(82451),u=n(7421),d=n(1123),h=n(93108),f=n(15413),p=n(1275),m=n(62613),v=n(76358),g=n(1084),y=n(90531),_=n(90326),b=n(64873),M=n(69204),A=n(78381),w=n(15495),x=n(67780),k=n(37106),L=n(22682),C=n(14259),S=n(21672),z=n(64796),T=L.f,O=S.f,H=k.f,D=r.Symbol,Y=r.JSON,V=Y&&Y.stringify,P="prototype",E=f("_hidden"),j=f("toPrimitive"),F={}.propertyIsEnumerable,I=u("symbol-registry"),$=u("symbols"),R=u("op-symbols"),N=Object[P],W="function"==typeof D&&!!C.f,B=r.QObject,K=!B||!B[P]||!B[P].findChild,U=o&&l(function(){return 7!=x(O({},"a",{get:function(){return O(this,"a",{value:7}).a}})).a})?function(e,t,n){var r=T(N,t);r&&delete N[t],O(e,t,n),r&&e!==N&&O(N,t,r)}:O,q=function(e){var t=$[e]=x(D[P]);return t._k=e,t},G=W&&"symbol"==typeof D.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof D},J=function(e,t,n){return e===N&&J(R,t,n),y(e),t=A(t,!0),y(n),i($,t)?(n.enumerable?(i(e,E)&&e[E][t]&&(e[E][t]=!1),n=x(n,{enumerable:w(0,!1)})):(i(e,E)||O(e,E,w(1,{})),e[E][t]=!0),U(e,t,n)):O(e,t,n)},X=function(e,t){y(e);var n,r=v(t=M(t)),i=0,o=r.length;while(o>i)J(e,n=r[i++],t[n]);return e},Z=function(e,t){return void 0===t?x(e):X(x(e),t)},Q=function(e){var t=F.call(this,e=A(e,!0));return!(this===N&&i($,e)&&!i(R,e))&&(!(t||!i(this,e)||!i($,e)||i(this,E)&&this[E][e])||t)},ee=function(e,t){if(e=M(e),t=A(t,!0),e!==N||!i($,t)||i(R,t)){var n=T(e,t);return!n||!i($,t)||i(e,E)&&e[E][t]||(n.enumerable=!0),n}},te=function(e){var t,n=H(M(e)),r=[],o=0;while(n.length>o)i($,t=n[o++])||t==E||t==c||r.push(t);return r},ne=function(e){var t,n=e===N,r=H(n?R:M(e)),o=[],a=0;while(r.length>a)!i($,t=r[a++])||n&&!i(N,t)||o.push($[t]);return o};W||(D=function(){if(this instanceof D)throw TypeError("Symbol is not a constructor!");var e=h(arguments.length>0?arguments[0]:void 0),t=function(n){this===N&&t.call(R,n),i(this,E)&&i(this[E],e)&&(this[E][e]=!1),U(this,e,w(1,n))};return o&&K&&U(N,e,{configurable:!0,set:t}),q(e)},s(D[P],"toString",function(){return this._k}),L.f=ee,S.f=J,n(79032).f=k.f=te,n(98936).f=Q,C.f=ne,o&&!n(98849)&&s(N,"propertyIsEnumerable",Q,!0),p.f=function(e){return q(f(e))}),a(a.G+a.W+a.F*!W,{Symbol:D});for(var re="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),ie=0;re.length>ie;)f(re[ie++]);for(var oe=z(f.store),ae=0;oe.length>ae;)m(oe[ae++]);a(a.S+a.F*!W,"Symbol",{for:function(e){return i(I,e+="")?I[e]:I[e]=D(e)},keyFor:function(e){if(!G(e))throw TypeError(e+" is not a symbol!");for(var t in I)if(I[t]===e)return t},useSetter:function(){K=!0},useSimple:function(){K=!1}}),a(a.S+a.F*!W,"Object",{create:Z,defineProperty:J,defineProperties:X,getOwnPropertyDescriptor:ee,getOwnPropertyNames:te,getOwnPropertySymbols:ne});var se=l(function(){C.f(1)});a(a.S+a.F*se,"Object",{getOwnPropertySymbols:function(e){return C.f(b(e))}}),Y&&a(a.S+a.F*(!W||l(function(){var e=D();return"[null]"!=V([e])||"{}"!=V({a:e})||"{}"!=V(Object(e))})),"JSON",{stringify:function(e){var t,n,r=[e],i=1;while(arguments.length>i)r.push(arguments[i++]);if(n=t=r[1],(_(t)||void 0!==e)&&!G(e))return g(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!G(t))return t}),r[1]=t,V.apply(Y,r)}}),D[P][j]||n(14632)(D[P],j,D[P].valueOf),d(D,"Symbol"),d(Math,"Math",!0),d(r.JSON,"JSON",!0)},32469:function(e,t,n){n(62613)("asyncIterator")},75529:function(e,t,n){n(62613)("observable")},96653:function(e,t,n){n(45270);for(var r=n(56903),i=n(14632),o=n(52833),a=n(15413)("toStringTag"),s="CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList".split(","),c=0;c0?!0===o?E.scrollTop(t,p.top+m.top):!1===o?E.scrollTop(t,p.top+v.top):m.top<0?E.scrollTop(t,p.top+m.top):E.scrollTop(t,p.top+v.top):i||(o=void 0===o||!!o,o?E.scrollTop(t,p.top+m.top):E.scrollTop(t,p.top+v.top)),r&&(m.left<0||v.left>0?!0===a?E.scrollLeft(t,p.left+m.left):!1===a?E.scrollLeft(t,p.left+v.left):m.left<0?E.scrollLeft(t,p.left+m.left):E.scrollLeft(t,p.left+v.left):i||(a=void 0===a||!!a,a?E.scrollLeft(t,p.left+m.left):E.scrollLeft(t,p.left+v.left)))}t.A=j},71040:function(e,t,n){var r=n(88404),i=n(22524).each;function o(e,t){this.query=e,this.isUnconditional=t,this.handlers=[],this.mql=window.matchMedia(e);var n=this;this.listener=function(e){n.mql=e.currentTarget||e,n.assess()},this.mql.addListener(this.listener)}o.prototype={constuctor:o,addHandler:function(e){var t=new r(e);this.handlers.push(t),this.matches()&&t.on()},removeHandler:function(e){var t=this.handlers;i(t,function(n,r){if(n.equals(e))return n.destroy(),!t.splice(r,1)})},matches:function(){return this.mql.matches||this.isUnconditional},clear:function(){i(this.handlers,function(e){e.destroy()}),this.mql.removeListener(this.listener),this.handlers.length=0},assess:function(){var e=this.matches()?"on":"off";i(this.handlers,function(t){t[e]()})}},e.exports=o},51098:function(e,t,n){var r=n(71040),i=n(22524),o=i.each,a=i.isFunction,s=i.isArray;function c(){if(!window.matchMedia)throw new Error("matchMedia not present, legacy browsers require a polyfill");this.queries={},this.browserIsIncapable=!window.matchMedia("only all").matches}c.prototype={constructor:c,register:function(e,t,n){var i=this.queries,c=n&&this.browserIsIncapable;return i[e]||(i[e]=new r(e,c)),a(t)&&(t={match:t}),s(t)||(t=[t]),o(t,function(t){a(t)&&(t={match:t}),i[e].addHandler(t)}),this},unregister:function(e,t){var n=this.queries[e];return n&&(t?n.removeHandler(t):(n.clear(),delete this.queries[e])),this}},e.exports=c},88404:function(e){function t(e){this.options=e,!e.deferSetup&&this.setup()}t.prototype={constructor:t,setup:function(){this.options.setup&&this.options.setup(),this.initialised=!0},on:function(){!this.initialised&&this.setup(),this.options.match&&this.options.match()},off:function(){this.options.unmatch&&this.options.unmatch()},destroy:function(){this.options.destroy?this.options.destroy():this.off()},equals:function(e){return this.options===e||this.options.match===e}},e.exports=t},22524:function(e){function t(e,t){var n,r=0,i=e.length;for(r;r1&&-1!==r.indexOf("Macintosh")&&-1!==r.indexOf("Safari")&&(i=!0),i}},55580:function(e,t,n){var r=n(56110),i=n(9325),o=r(i,"DataView");e.exports=o},21549:function(e,t,n){var r=n(22032),i=n(63862),o=n(66721),a=n(12749),s=n(35749);function c(e){var t=-1,n=null==e?0:e.length;this.clear();while(++t-1}e.exports=i},29905:function(e){function t(e,t,n){var r=-1,i=null==e?0:e.length;while(++r0&&n(u)?t>1?o(u,t-1,n,a,s):r(s,u):a||(s[s.length]=u)}return s}e.exports=o},86649:function(e,t,n){var r=n(83221),i=r();e.exports=i},30641:function(e,t,n){var r=n(86649),i=n(95950);function o(e,t){return e&&r(e,t,i)}e.exports=o},47422:function(e,t,n){var r=n(31769),i=n(77797);function o(e,t){t=r(t,e);var n=0,o=t.length;while(null!=e&&nt)return i;do{r%2&&(i+=e),r=n(r/2),r&&(e+=e)}while(r);return i}e.exports=r},69302:function(e,t,n){var r=n(83488),i=n(56757),o=n(32865);function a(e,t){return o(i(e,t,r),e+"")}e.exports=a},73170:function(e,t,n){var r=n(16547),i=n(31769),o=n(30361),a=n(23805),s=n(77797);function c(e,t,n,c){if(!a(e))return e;t=i(t,e);var l=-1,u=t.length,d=u-1,h=e;while(null!=h&&++li?0:i+t),n=n>i?i:n,n<0&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0;var o=Array(i);while(++r=l){var v=t?null:s(e);if(v)return c(v);f=!1,d=a,m=new r}else m=t?[]:p;e:while(++u=i?e:r(e,t,n)}e.exports=i},49653:function(e,t,n){var r=n(37828);function i(e){var t=new e.constructor(e.byteLength);return new r(t).set(new r(e)),t}e.exports=i},93290:function(e,t,n){e=n.nmd(e);var r=n(9325),i=t&&!t.nodeType&&t,o=i&&e&&!e.nodeType&&e,a=o&&o.exports===i,s=a?r.Buffer:void 0,c=s?s.allocUnsafe:void 0;function l(e,t){if(t)return e.slice();var n=e.length,r=c?c(n):new e.constructor(n);return e.copy(r),r}e.exports=l},76169:function(e,t,n){var r=n(49653);function i(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}e.exports=i},73201:function(e){var t=/\w*$/;function n(e){var n=new e.constructor(e.source,t.exec(e));return n.lastIndex=e.lastIndex,n}e.exports=n},93736:function(e,t,n){var r=n(51873),i=r?r.prototype:void 0,o=i?i.valueOf:void 0;function a(e){return o?Object(o.call(e)):{}}e.exports=a},71961:function(e,t,n){var r=n(49653);function i(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}e.exports=i},23007:function(e){function t(e,t){var n=-1,r=e.length;t||(t=Array(r));while(++n1?n[o-1]:void 0,s=o>2?n[2]:void 0;a=e.length>3&&"function"==typeof a?(o--,a):void 0,s&&i(n[0],n[1],s)&&(a=o<3?void 0:a,o=1),t=Object(t);while(++r-1?s[c?t[l]:l]:void 0}}e.exports=a},57216:function(e,t,n){var r=n(84051),i=n(77556),o=n(28754),a=n(49698),s=n(81993),c=n(63912),l=Math.ceil;function u(e,t){t=void 0===t?" ":i(t);var n=t.length;if(n<2)return n?r(t,e):t;var u=r(t,l(e/s(t)));return a(t)?o(c(u),0,e).join(""):u.slice(0,e)}e.exports=u},44517:function(e,t,n){var r=n(76545),i=n(63950),o=n(84247),a=1/0,s=r&&1/o(new r([,-0]))[1]==a?function(e){return new r(e)}:i;e.exports=s},53138:function(e,t,n){var r=n(11331);function i(e){return r(e)?void 0:e}e.exports=i},93243:function(e,t,n){var r=n(56110),i=function(){try{var e=r(Object,"defineProperty");return e({},"",{}),e}catch(t){}}();e.exports=i},25911:function(e,t,n){var r=n(38859),i=n(91867),o=n(19219),a=1,s=2;function c(e,t,n,c,l,u){var d=n&a,h=e.length,f=t.length;if(h!=f&&!(d&&f>h))return!1;var p=u.get(e),m=u.get(t);if(p&&m)return p==t&&m==e;var v=-1,g=!0,y=n&s?new r:void 0;u.set(e,t),u.set(t,e);while(++v-1&&e%1==0&&e-1}e.exports=i},31175:function(e,t,n){var r=n(26025);function i(e,t){var n=this.__data__,i=r(n,e);return i<0?(++this.size,n.push([e,t])):n[i][1]=t,this}e.exports=i},63040:function(e,t,n){var r=n(21549),i=n(80079),o=n(68223);function a(){this.size=0,this.__data__={hash:new r,map:new(o||i),string:new r}}e.exports=a},17670:function(e,t,n){var r=n(12651);function i(e){var t=r(this,e)["delete"](e);return this.size-=t?1:0,t}e.exports=i},90289:function(e,t,n){var r=n(12651);function i(e){return r(this,e).get(e)}e.exports=i},4509:function(e,t,n){var r=n(12651);function i(e){return r(this,e).has(e)}e.exports=i},72949:function(e,t,n){var r=n(12651);function i(e,t){var n=r(this,e),i=n.size;return n.set(e,t),this.size+=n.size==i?0:1,this}e.exports=i},20317:function(e){function t(e){var t=-1,n=Array(e.size);return e.forEach(function(e,r){n[++t]=[r,e]}),n}e.exports=t},67197:function(e){function t(e,t){return function(n){return null!=n&&(n[e]===t&&(void 0!==t||e in Object(n)))}}e.exports=t},62224:function(e,t,n){var r=n(50104),i=500;function o(e){var t=r(e,function(e){return n.size===i&&n.clear(),e}),n=t.cache;return t}e.exports=o},81042:function(e,t,n){var r=n(56110),i=r(Object,"create");e.exports=i},3650:function(e,t,n){var r=n(74335),i=r(Object.keys,Object);e.exports=i},90181:function(e){function t(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}e.exports=t},86009:function(e,t,n){e=n.nmd(e);var r=n(34840),i=t&&!t.nodeType&&t,o=i&&e&&!e.nodeType&&e,a=o&&o.exports===i,s=a&&r.process,c=function(){try{var e=o&&o.require&&o.require("util").types;return e||s&&s.binding&&s.binding("util")}catch(t){}}();e.exports=c},59350:function(e){var t=Object.prototype,n=t.toString;function r(e){return n.call(e)}e.exports=r},74335:function(e){function t(e,t){return function(n){return e(t(n))}}e.exports=t},56757:function(e,t,n){var r=n(91033),i=Math.max;function o(e,t,n){return t=i(void 0===t?e.length-1:t,0),function(){var o=arguments,a=-1,s=i(o.length-t,0),c=Array(s);while(++a0){if(++i>=t)return arguments[0]}else i=0;return e.apply(void 0,arguments)}}e.exports=i},51420:function(e,t,n){var r=n(80079);function i(){this.__data__=new r,this.size=0}e.exports=i},90938:function(e){function t(e){var t=this.__data__,n=t["delete"](e);return this.size=t.size,n}e.exports=t},63605:function(e){function t(e){return this.__data__.get(e)}e.exports=t},29817:function(e){function t(e){return this.__data__.has(e)}e.exports=t},80945:function(e,t,n){var r=n(80079),i=n(68223),o=n(53661),a=200;function s(e,t){var n=this.__data__;if(n instanceof r){var s=n.__data__;if(!i||s.length=t||n<0||g&&r>=d}function w(){var e=i();if(A(e))return x(e);f=setTimeout(w,M(e))}function x(e){return f=void 0,y&&l?_(e):(l=u=void 0,h)}function k(){void 0!==f&&clearTimeout(f),m=0,l=p=u=f=void 0}function L(){return void 0===f?h:x(i())}function C(){var e=i(),n=A(e);if(l=arguments,u=this,p=e,n){if(void 0===f)return b(p);if(g)return clearTimeout(f),f=setTimeout(w,t),_(p)}return void 0===f&&(f=setTimeout(w,t)),h}return t=o(t)||0,r(n)&&(v=!!n.leading,g="maxWait"in n,d=g?s(o(n.maxWait)||0,t):d,y="trailing"in n?!!n.trailing:y),C.cancel=k,C.flush=L,C}e.exports=l},75288:function(e){function t(e,t){return e===t||e!==e&&t!==t}e.exports=t},7309:function(e,t,n){var r=n(62006),i=n(24713),o=r(i);e.exports=o},24713:function(e,t,n){var r=n(2523),i=n(15389),o=n(61489),a=Math.max;function s(e,t,n){var s=null==e?0:e.length;if(!s)return-1;var c=null==n?0:o(n);return c<0&&(c=a(s+c,0)),r(e,i(t,3),c)}e.exports=s},35970:function(e,t,n){var r=n(83120);function i(e){var t=null==e?0:e.length;return t?r(e,1):[]}e.exports=i},58156:function(e,t,n){var r=n(47422);function i(e,t,n){var i=null==e?void 0:r(e,t);return void 0===i?n:i}e.exports=i},61448:function(e,t,n){var r=n(20426),i=n(49326);function o(e,t){return null!=e&&i(e,t,r)}e.exports=o},80631:function(e,t,n){var r=n(28077),i=n(49326);function o(e,t){return null!=e&&i(e,t,r)}e.exports=o},83488:function(e){function t(e){return e}e.exports=t},72428:function(e,t,n){var r=n(27534),i=n(40346),o=Object.prototype,a=o.hasOwnProperty,s=o.propertyIsEnumerable,c=r(function(){return arguments}())?r:function(e){return i(e)&&a.call(e,"callee")&&!s.call(e,"callee")};e.exports=c},56449:function(e){var t=Array.isArray;e.exports=t},64894:function(e,t,n){var r=n(1882),i=n(30294);function o(e){return null!=e&&i(e.length)&&!r(e)}e.exports=o},83693:function(e,t,n){var r=n(64894),i=n(40346);function o(e){return i(e)&&r(e)}e.exports=o},3656:function(e,t,n){e=n.nmd(e);var r=n(9325),i=n(89935),o=t&&!t.nodeType&&t,a=o&&e&&!e.nodeType&&e,s=a&&a.exports===o,c=s?r.Buffer:void 0,l=c?c.isBuffer:void 0,u=l||i;e.exports=u},1882:function(e,t,n){var r=n(72552),i=n(23805),o="[object AsyncFunction]",a="[object Function]",s="[object GeneratorFunction]",c="[object Proxy]";function l(e){if(!i(e))return!1;var t=r(e);return t==a||t==s||t==o||t==c}e.exports=l},30294:function(e){var t=9007199254740991;function n(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=t}e.exports=n},87730:function(e,t,n){var r=n(29172),i=n(27301),o=n(86009),a=o&&o.isMap,s=a?i(a):r;e.exports=s},69843:function(e){function t(e){return null==e}e.exports=t},23805:function(e){function t(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}e.exports=t},40346:function(e){function t(e){return null!=e&&"object"==typeof e}e.exports=t},11331:function(e,t,n){var r=n(72552),i=n(28879),o=n(40346),a="[object Object]",s=Function.prototype,c=Object.prototype,l=s.toString,u=c.hasOwnProperty,d=l.call(Object);function h(e){if(!o(e)||r(e)!=a)return!1;var t=i(e);if(null===t)return!0;var n=u.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&l.call(n)==d}e.exports=h},69607:function(e,t,n){var r=n(81437),i=n(27301),o=n(86009),a=o&&o.isRegExp,s=a?i(a):r;e.exports=s},38440:function(e,t,n){var r=n(16038),i=n(27301),o=n(86009),a=o&&o.isSet,s=a?i(a):r;e.exports=s},44394:function(e,t,n){var r=n(72552),i=n(40346),o="[object Symbol]";function a(e){return"symbol"==typeof e||i(e)&&r(e)==o}e.exports=a},37167:function(e,t,n){var r=n(4901),i=n(27301),o=n(86009),a=o&&o.isTypedArray,s=a?i(a):r;e.exports=s},95950:function(e,t,n){var r=n(70695),i=n(88984),o=n(64894);function a(e){return o(e)?r(e):i(e)}e.exports=a},37241:function(e,t,n){var r=n(70695),i=n(72903),o=n(64894);function a(e){return o(e)?r(e,!0):i(e)}e.exports=a},68090:function(e){function t(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}e.exports=t},50104:function(e,t,n){var r=n(53661),i="Expected a function";function o(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError(i);var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var a=e.apply(this,r);return n.cache=o.set(i,a)||o,a};return n.cache=new(o.Cache||r),n}o.Cache=r,e.exports=o},55364:function(e,t,n){var r=n(85250),i=n(20999),o=i(function(e,t,n){r(e,t,n)});e.exports=o},63950:function(e){function t(){}e.exports=t},10124:function(e,t,n){var r=n(9325),i=function(){return r.Date.now()};e.exports=i},90179:function(e,t,n){var r=n(34932),i=n(9999),o=n(19931),a=n(31769),s=n(21791),c=n(53138),l=n(38816),u=n(83349),d=1,h=2,f=4,p=l(function(e,t){var n={};if(null==e)return n;var l=!1;t=r(t,function(t){return t=a(t,e),l||(l=t.length>1),t}),s(e,u(e),n),l&&(n=i(n,d|h|f,c));var p=t.length;while(p--)o(n,t[p]);return n});e.exports=p},97948:function(e,t,n){var r=n(57216),i=n(81993),o=n(61489),a=n(13222);function s(e,t,n){e=a(e),t=o(t);var s=t?i(e):0;return t&&s=20?"ste":"de")},week:{dow:1,doy:4}});return t})},41488:function(e,t,n){(function(e,t){t(n(95093))})(0,function(e){"use strict"; //! moment.js locale configuration @@ -298,12 +298,12 @@ var r=Object.freeze({}),i=Array.isArray;function o(e){return void 0===e||null=== * (c) 2021 Evan You * @license MIT */ -function r(e){var t=Number(e.version.split(".")[0]);if(t>=2)e.mixin({beforeCreate:r});else{var n=e.prototype._init;e.prototype._init=function(e){void 0===e&&(e={}),e.init=e.init?[r].concat(e.init):r,n.call(this,e)}}function r(){var e=this.$options;e.store?this.$store="function"===typeof e.store?e.store():e.store:e.parent&&e.parent.$store&&(this.$store=e.parent.$store)}}n.d(t,{L8:function(){return V},aH:function(){return D},i0:function(){return P}});var i="undefined"!==typeof window?window:"undefined"!==typeof n.g?n.g:{},o=i.__VUE_DEVTOOLS_GLOBAL_HOOK__;function a(e){o&&(e._devtoolHook=o,o.emit("vuex:init",e),o.on("vuex:travel-to-state",function(t){e.replaceState(t)}),e.subscribe(function(e,t){o.emit("vuex:mutation",e,t)},{prepend:!0}),e.subscribeAction(function(e,t){o.emit("vuex:action",e,t)},{prepend:!0}))}function s(e,t){return e.filter(t)[0]}function c(e,t){if(void 0===t&&(t=[]),null===e||"object"!==typeof e)return e;var n=s(t,function(t){return t.original===e});if(n)return n.copy;var r=Array.isArray(e)?[]:{};return t.push({original:e,copy:r}),Object.keys(e).forEach(function(n){r[n]=c(e[n],t)}),r}function l(e,t){Object.keys(e).forEach(function(n){return t(e[n],n)})}function u(e){return null!==e&&"object"===typeof e}function d(e){return e&&"function"===typeof e.then}function h(e,t){return function(){return e(t)}}var f=function(e,t){this.runtime=t,this._children=Object.create(null),this._rawModule=e;var n=e.state;this.state=("function"===typeof n?n():n)||{}},p={namespaced:{configurable:!0}};p.namespaced.get=function(){return!!this._rawModule.namespaced},f.prototype.addChild=function(e,t){this._children[e]=t},f.prototype.removeChild=function(e){delete this._children[e]},f.prototype.getChild=function(e){return this._children[e]},f.prototype.hasChild=function(e){return e in this._children},f.prototype.update=function(e){this._rawModule.namespaced=e.namespaced,e.actions&&(this._rawModule.actions=e.actions),e.mutations&&(this._rawModule.mutations=e.mutations),e.getters&&(this._rawModule.getters=e.getters)},f.prototype.forEachChild=function(e){l(this._children,e)},f.prototype.forEachGetter=function(e){this._rawModule.getters&&l(this._rawModule.getters,e)},f.prototype.forEachAction=function(e){this._rawModule.actions&&l(this._rawModule.actions,e)},f.prototype.forEachMutation=function(e){this._rawModule.mutations&&l(this._rawModule.mutations,e)},Object.defineProperties(f.prototype,p);var m=function(e){this.register([],e,!1)};function v(e,t,n){if(t.update(n),n.modules)for(var r in n.modules){if(!t.getChild(r))return void 0;v(e.concat(r),t.getChild(r),n.modules[r])}}m.prototype.get=function(e){return e.reduce(function(e,t){return e.getChild(t)},this.root)},m.prototype.getNamespace=function(e){var t=this.root;return e.reduce(function(e,n){return t=t.getChild(n),e+(t.namespaced?n+"/":"")},"")},m.prototype.update=function(e){v([],this.root,e)},m.prototype.register=function(e,t,n){var r=this;void 0===n&&(n=!0);var i=new f(t,n);if(0===e.length)this.root=i;else{var o=this.get(e.slice(0,-1));o.addChild(e[e.length-1],i)}t.modules&&l(t.modules,function(t,i){r.register(e.concat(i),t,n)})},m.prototype.unregister=function(e){var t=this.get(e.slice(0,-1)),n=e[e.length-1],r=t.getChild(n);r&&r.runtime&&t.removeChild(n)},m.prototype.isRegistered=function(e){var t=this.get(e.slice(0,-1)),n=e[e.length-1];return!!t&&t.hasChild(n)};var g;var y=function(e){var t=this;void 0===e&&(e={}),!g&&"undefined"!==typeof window&&window.Vue&&H(window.Vue);var n=e.plugins;void 0===n&&(n=[]);var r=e.strict;void 0===r&&(r=!1),this._committing=!1,this._actions=Object.create(null),this._actionSubscribers=[],this._mutations=Object.create(null),this._wrappedGetters=Object.create(null),this._modules=new m(e),this._modulesNamespaceMap=Object.create(null),this._subscribers=[],this._watcherVM=new g,this._makeLocalGettersCache=Object.create(null);var i=this,o=this,s=o.dispatch,c=o.commit;this.dispatch=function(e,t){return s.call(i,e,t)},this.commit=function(e,t,n){return c.call(i,e,t,n)},this.strict=r;var l=this._modules.root.state;w(this,l,[],this._modules.root),A(this,l),n.forEach(function(e){return e(t)});var u=void 0!==e.devtools?e.devtools:g.config.devtools;u&&a(this)},_={state:{configurable:!0}};function b(e,t,n){return t.indexOf(e)<0&&(n&&n.prepend?t.unshift(e):t.push(e)),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}function M(e,t){e._actions=Object.create(null),e._mutations=Object.create(null),e._wrappedGetters=Object.create(null),e._modulesNamespaceMap=Object.create(null);var n=e.state;w(e,n,[],e._modules.root,!0),A(e,n,t)}function A(e,t,n){var r=e._vm;e.getters={},e._makeLocalGettersCache=Object.create(null);var i=e._wrappedGetters,o={};l(i,function(t,n){o[n]=h(t,e),Object.defineProperty(e.getters,n,{get:function(){return e._vm[n]},enumerable:!0})});var a=g.config.silent;g.config.silent=!0,e._vm=new g({data:{$$state:t},computed:o}),g.config.silent=a,e.strict&&z(e),r&&(n&&e._withCommit(function(){r._data.$$state=null}),g.nextTick(function(){return r.$destroy()}))}function w(e,t,n,r,i){var o=!n.length,a=e._modules.getNamespace(n);if(r.namespaced&&(e._modulesNamespaceMap[a],e._modulesNamespaceMap[a]=r),!o&&!i){var s=T(t,n.slice(0,-1)),c=n[n.length-1];e._withCommit(function(){g.set(s,c,r.state)})}var l=r.context=x(e,a,n);r.forEachMutation(function(t,n){var r=a+n;L(e,r,t,l)}),r.forEachAction(function(t,n){var r=t.root?n:a+n,i=t.handler||t;C(e,r,i,l)}),r.forEachGetter(function(t,n){var r=a+n;S(e,r,t,l)}),r.forEachChild(function(r,o){w(e,t,n.concat(o),r,i)})}function x(e,t,n){var r=""===t,i={dispatch:r?e.dispatch:function(n,r,i){var o=O(n,r,i),a=o.payload,s=o.options,c=o.type;return s&&s.root||(c=t+c),e.dispatch(c,a)},commit:r?e.commit:function(n,r,i){var o=O(n,r,i),a=o.payload,s=o.options,c=o.type;s&&s.root||(c=t+c),e.commit(c,a,s)}};return Object.defineProperties(i,{getters:{get:r?function(){return e.getters}:function(){return k(e,t)}},state:{get:function(){return T(e.state,n)}}}),i}function k(e,t){if(!e._makeLocalGettersCache[t]){var n={},r=t.length;Object.keys(e.getters).forEach(function(i){if(i.slice(0,r)===t){var o=i.slice(r);Object.defineProperty(n,o,{get:function(){return e.getters[i]},enumerable:!0})}}),e._makeLocalGettersCache[t]=n}return e._makeLocalGettersCache[t]}function L(e,t,n,r){var i=e._mutations[t]||(e._mutations[t]=[]);i.push(function(t){n.call(e,r.state,t)})}function C(e,t,n,r){var i=e._actions[t]||(e._actions[t]=[]);i.push(function(t){var i=n.call(e,{dispatch:r.dispatch,commit:r.commit,getters:r.getters,state:r.state,rootGetters:e.getters,rootState:e.state},t);return d(i)||(i=Promise.resolve(i)),e._devtoolHook?i.catch(function(t){throw e._devtoolHook.emit("vuex:error",t),t}):i})}function S(e,t,n,r){e._wrappedGetters[t]||(e._wrappedGetters[t]=function(e){return n(r.state,r.getters,e.state,e.getters)})}function z(e){e._vm.$watch(function(){return this._data.$$state},function(){0},{deep:!0,sync:!0})}function T(e,t){return t.reduce(function(e,t){return e[t]},e)}function O(e,t,n){return u(e)&&e.type&&(n=t,t=e,e=e.type),{type:e,payload:t,options:n}}function H(e){g&&e===g||(g=e,r(g))}_.state.get=function(){return this._vm._data.$$state},_.state.set=function(e){0},y.prototype.commit=function(e,t,n){var r=this,i=O(e,t,n),o=i.type,a=i.payload,s=(i.options,{type:o,payload:a}),c=this._mutations[o];c&&(this._withCommit(function(){c.forEach(function(e){e(a)})}),this._subscribers.slice().forEach(function(e){return e(s,r.state)}))},y.prototype.dispatch=function(e,t){var n=this,r=O(e,t),i=r.type,o=r.payload,a={type:i,payload:o},s=this._actions[i];if(s){try{this._actionSubscribers.slice().filter(function(e){return e.before}).forEach(function(e){return e.before(a,n.state)})}catch(l){0}var c=s.length>1?Promise.all(s.map(function(e){return e(o)})):s[0](o);return new Promise(function(e,t){c.then(function(t){try{n._actionSubscribers.filter(function(e){return e.after}).forEach(function(e){return e.after(a,n.state)})}catch(l){0}e(t)},function(e){try{n._actionSubscribers.filter(function(e){return e.error}).forEach(function(t){return t.error(a,n.state,e)})}catch(l){0}t(e)})})}},y.prototype.subscribe=function(e,t){return b(e,this._subscribers,t)},y.prototype.subscribeAction=function(e,t){var n="function"===typeof e?{before:e}:e;return b(n,this._actionSubscribers,t)},y.prototype.watch=function(e,t,n){var r=this;return this._watcherVM.$watch(function(){return e(r.state,r.getters)},t,n)},y.prototype.replaceState=function(e){var t=this;this._withCommit(function(){t._vm._data.$$state=e})},y.prototype.registerModule=function(e,t,n){void 0===n&&(n={}),"string"===typeof e&&(e=[e]),this._modules.register(e,t),w(this,this.state,e,this._modules.get(e),n.preserveState),A(this,this.state)},y.prototype.unregisterModule=function(e){var t=this;"string"===typeof e&&(e=[e]),this._modules.unregister(e),this._withCommit(function(){var n=T(t.state,e.slice(0,-1));g.delete(n,e[e.length-1])}),M(this)},y.prototype.hasModule=function(e){return"string"===typeof e&&(e=[e]),this._modules.isRegistered(e)},y.prototype.hotUpdate=function(e){this._modules.update(e),M(this,!0)},y.prototype._withCommit=function(e){var t=this._committing;this._committing=!0,e(),this._committing=t},Object.defineProperties(y.prototype,_);var D=I(function(e,t){var n={};return j(t).forEach(function(t){var r=t.key,i=t.val;n[r]=function(){var t=this.$store.state,n=this.$store.getters;if(e){var r=$(this.$store,"mapState",e);if(!r)return;t=r.context.state,n=r.context.getters}return"function"===typeof i?i.call(this,t,n):t[i]},n[r].vuex=!0}),n}),Y=I(function(e,t){var n={};return j(t).forEach(function(t){var r=t.key,i=t.val;n[r]=function(){var t=[],n=arguments.length;while(n--)t[n]=arguments[n];var r=this.$store.commit;if(e){var o=$(this.$store,"mapMutations",e);if(!o)return;r=o.context.commit}return"function"===typeof i?i.apply(this,[r].concat(t)):r.apply(this.$store,[i].concat(t))}}),n}),V=I(function(e,t){var n={};return j(t).forEach(function(t){var r=t.key,i=t.val;i=e+i,n[r]=function(){if(!e||$(this.$store,"mapGetters",e))return this.$store.getters[i]},n[r].vuex=!0}),n}),P=I(function(e,t){var n={};return j(t).forEach(function(t){var r=t.key,i=t.val;n[r]=function(){var t=[],n=arguments.length;while(n--)t[n]=arguments[n];var r=this.$store.dispatch;if(e){var o=$(this.$store,"mapActions",e);if(!o)return;r=o.context.dispatch}return"function"===typeof i?i.apply(this,[r].concat(t)):r.apply(this.$store,[i].concat(t))}}),n}),E=function(e){return{mapState:D.bind(null,e),mapGetters:V.bind(null,e),mapMutations:Y.bind(null,e),mapActions:P.bind(null,e)}};function j(e){return F(e)?Array.isArray(e)?e.map(function(e){return{key:e,val:e}}):Object.keys(e).map(function(t){return{key:t,val:e[t]}}):[]}function F(e){return Array.isArray(e)||u(e)}function I(e){return function(t,n){return"string"!==typeof t?(n=t,t=""):"/"!==t.charAt(t.length-1)&&(t+="/"),e(t,n)}}function $(e,t,n){var r=e._modulesNamespaceMap[n];return r}function R(e){void 0===e&&(e={});var t=e.collapsed;void 0===t&&(t=!0);var n=e.filter;void 0===n&&(n=function(e,t,n){return!0});var r=e.transformer;void 0===r&&(r=function(e){return e});var i=e.mutationTransformer;void 0===i&&(i=function(e){return e});var o=e.actionFilter;void 0===o&&(o=function(e,t){return!0});var a=e.actionTransformer;void 0===a&&(a=function(e){return e});var s=e.logMutations;void 0===s&&(s=!0);var l=e.logActions;void 0===l&&(l=!0);var u=e.logger;return void 0===u&&(u=console),function(e){var d=c(e.state);"undefined"!==typeof u&&(s&&e.subscribe(function(e,o){var a=c(o);if(n(e,d,a)){var s=B(),l=i(e),h="mutation "+e.type+s;N(u,h,t),u.log("%c prev state","color: #9E9E9E; font-weight: bold",r(d)),u.log("%c mutation","color: #03A9F4; font-weight: bold",l),u.log("%c next state","color: #4CAF50; font-weight: bold",r(a)),W(u)}d=a}),l&&e.subscribeAction(function(e,n){if(o(e,n)){var r=B(),i=a(e),s="action "+e.type+r;N(u,s,t),u.log("%c action","color: #03A9F4; font-weight: bold",i),W(u)}}))}}function N(e,t,n){var r=n?e.groupCollapsed:e.group;try{r.call(e,t)}catch(i){e.log(t)}}function W(e){try{e.groupEnd()}catch(t){e.log("—— log end ——")}}function B(){var e=new Date;return" @ "+U(e.getHours(),2)+":"+U(e.getMinutes(),2)+":"+U(e.getSeconds(),2)+"."+U(e.getMilliseconds(),3)}function K(e,t){return new Array(t+1).join(e)}function U(e,t){return K("0",t-e.toString().length)+e}var q={Store:y,install:H,version:"3.6.2",mapState:D,mapMutations:Y,mapGetters:V,mapActions:P,createNamespacedHelpers:E,createLogger:R};t.Ay=q},9771:function(e){"use strict";var t=!1,n=function(){};if(t){var r=function(e,t){var n=arguments.length;t=new Array(n>1?n-1:0);for(var r=1;r2?i-2:0);for(var o=2;o1e-5){d=l<=.5?c/(a+s):c/(2-a-s);var h=(a-r)/c,f=(a-i)/c,p=(a-o)/c;u=r==a?p-f:i==a?2+h-p:4+f-h,u*=60,u<0&&(u+=360)}return[u,d,l]}e.exports={lighten:n,darken:r,mix:i,toNum3:a,rgb:o,rgbaToRgb:o,pad2:t,rgbToHsl:l,rrggbbToHsl:c}},48104:function(e,t,n){var r=n(31488);e.exports=function(e,t){"#"===e[0]&&(e=e.slice(1));for(var n=["#"+e,r.toNum3(e).join(",")],i=1;i<=9;i++)n.push(r.lighten(e,Number((i/10).toFixed(2)))),n.push(r.darken(e,Number((i/10).toFixed(2))));return n.push(r.lighten(e,.85)),n.push(r.lighten(e,.925)),n.push(r.lighten(e,.95)),n.push(r.lighten(e,.975)),n.push(r.rrggbbToHsl(e)),[].push.apply(n,t),n}},46942:function(e,t){var n,r; +function r(e){var t=Number(e.version.split(".")[0]);if(t>=2)e.mixin({beforeCreate:r});else{var n=e.prototype._init;e.prototype._init=function(e){void 0===e&&(e={}),e.init=e.init?[r].concat(e.init):r,n.call(this,e)}}function r(){var e=this.$options;e.store?this.$store="function"===typeof e.store?e.store():e.store:e.parent&&e.parent.$store&&(this.$store=e.parent.$store)}}n.d(t,{L8:function(){return V},aH:function(){return D},i0:function(){return P}});var i="undefined"!==typeof window?window:"undefined"!==typeof n.g?n.g:{},o=i.__VUE_DEVTOOLS_GLOBAL_HOOK__;function a(e){o&&(e._devtoolHook=o,o.emit("vuex:init",e),o.on("vuex:travel-to-state",function(t){e.replaceState(t)}),e.subscribe(function(e,t){o.emit("vuex:mutation",e,t)},{prepend:!0}),e.subscribeAction(function(e,t){o.emit("vuex:action",e,t)},{prepend:!0}))}function s(e,t){return e.filter(t)[0]}function c(e,t){if(void 0===t&&(t=[]),null===e||"object"!==typeof e)return e;var n=s(t,function(t){return t.original===e});if(n)return n.copy;var r=Array.isArray(e)?[]:{};return t.push({original:e,copy:r}),Object.keys(e).forEach(function(n){r[n]=c(e[n],t)}),r}function l(e,t){Object.keys(e).forEach(function(n){return t(e[n],n)})}function u(e){return null!==e&&"object"===typeof e}function d(e){return e&&"function"===typeof e.then}function h(e,t){return function(){return e(t)}}var f=function(e,t){this.runtime=t,this._children=Object.create(null),this._rawModule=e;var n=e.state;this.state=("function"===typeof n?n():n)||{}},p={namespaced:{configurable:!0}};p.namespaced.get=function(){return!!this._rawModule.namespaced},f.prototype.addChild=function(e,t){this._children[e]=t},f.prototype.removeChild=function(e){delete this._children[e]},f.prototype.getChild=function(e){return this._children[e]},f.prototype.hasChild=function(e){return e in this._children},f.prototype.update=function(e){this._rawModule.namespaced=e.namespaced,e.actions&&(this._rawModule.actions=e.actions),e.mutations&&(this._rawModule.mutations=e.mutations),e.getters&&(this._rawModule.getters=e.getters)},f.prototype.forEachChild=function(e){l(this._children,e)},f.prototype.forEachGetter=function(e){this._rawModule.getters&&l(this._rawModule.getters,e)},f.prototype.forEachAction=function(e){this._rawModule.actions&&l(this._rawModule.actions,e)},f.prototype.forEachMutation=function(e){this._rawModule.mutations&&l(this._rawModule.mutations,e)},Object.defineProperties(f.prototype,p);var m=function(e){this.register([],e,!1)};function v(e,t,n){if(t.update(n),n.modules)for(var r in n.modules){if(!t.getChild(r))return void 0;v(e.concat(r),t.getChild(r),n.modules[r])}}m.prototype.get=function(e){return e.reduce(function(e,t){return e.getChild(t)},this.root)},m.prototype.getNamespace=function(e){var t=this.root;return e.reduce(function(e,n){return t=t.getChild(n),e+(t.namespaced?n+"/":"")},"")},m.prototype.update=function(e){v([],this.root,e)},m.prototype.register=function(e,t,n){var r=this;void 0===n&&(n=!0);var i=new f(t,n);if(0===e.length)this.root=i;else{var o=this.get(e.slice(0,-1));o.addChild(e[e.length-1],i)}t.modules&&l(t.modules,function(t,i){r.register(e.concat(i),t,n)})},m.prototype.unregister=function(e){var t=this.get(e.slice(0,-1)),n=e[e.length-1],r=t.getChild(n);r&&r.runtime&&t.removeChild(n)},m.prototype.isRegistered=function(e){var t=this.get(e.slice(0,-1)),n=e[e.length-1];return!!t&&t.hasChild(n)};var g;var y=function(e){var t=this;void 0===e&&(e={}),!g&&"undefined"!==typeof window&&window.Vue&&H(window.Vue);var n=e.plugins;void 0===n&&(n=[]);var r=e.strict;void 0===r&&(r=!1),this._committing=!1,this._actions=Object.create(null),this._actionSubscribers=[],this._mutations=Object.create(null),this._wrappedGetters=Object.create(null),this._modules=new m(e),this._modulesNamespaceMap=Object.create(null),this._subscribers=[],this._watcherVM=new g,this._makeLocalGettersCache=Object.create(null);var i=this,o=this,s=o.dispatch,c=o.commit;this.dispatch=function(e,t){return s.call(i,e,t)},this.commit=function(e,t,n){return c.call(i,e,t,n)},this.strict=r;var l=this._modules.root.state;w(this,l,[],this._modules.root),A(this,l),n.forEach(function(e){return e(t)});var u=void 0!==e.devtools?e.devtools:g.config.devtools;u&&a(this)},_={state:{configurable:!0}};function b(e,t,n){return t.indexOf(e)<0&&(n&&n.prepend?t.unshift(e):t.push(e)),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}function M(e,t){e._actions=Object.create(null),e._mutations=Object.create(null),e._wrappedGetters=Object.create(null),e._modulesNamespaceMap=Object.create(null);var n=e.state;w(e,n,[],e._modules.root,!0),A(e,n,t)}function A(e,t,n){var r=e._vm;e.getters={},e._makeLocalGettersCache=Object.create(null);var i=e._wrappedGetters,o={};l(i,function(t,n){o[n]=h(t,e),Object.defineProperty(e.getters,n,{get:function(){return e._vm[n]},enumerable:!0})});var a=g.config.silent;g.config.silent=!0,e._vm=new g({data:{$$state:t},computed:o}),g.config.silent=a,e.strict&&z(e),r&&(n&&e._withCommit(function(){r._data.$$state=null}),g.nextTick(function(){return r.$destroy()}))}function w(e,t,n,r,i){var o=!n.length,a=e._modules.getNamespace(n);if(r.namespaced&&(e._modulesNamespaceMap[a],e._modulesNamespaceMap[a]=r),!o&&!i){var s=T(t,n.slice(0,-1)),c=n[n.length-1];e._withCommit(function(){g.set(s,c,r.state)})}var l=r.context=x(e,a,n);r.forEachMutation(function(t,n){var r=a+n;L(e,r,t,l)}),r.forEachAction(function(t,n){var r=t.root?n:a+n,i=t.handler||t;C(e,r,i,l)}),r.forEachGetter(function(t,n){var r=a+n;S(e,r,t,l)}),r.forEachChild(function(r,o){w(e,t,n.concat(o),r,i)})}function x(e,t,n){var r=""===t,i={dispatch:r?e.dispatch:function(n,r,i){var o=O(n,r,i),a=o.payload,s=o.options,c=o.type;return s&&s.root||(c=t+c),e.dispatch(c,a)},commit:r?e.commit:function(n,r,i){var o=O(n,r,i),a=o.payload,s=o.options,c=o.type;s&&s.root||(c=t+c),e.commit(c,a,s)}};return Object.defineProperties(i,{getters:{get:r?function(){return e.getters}:function(){return k(e,t)}},state:{get:function(){return T(e.state,n)}}}),i}function k(e,t){if(!e._makeLocalGettersCache[t]){var n={},r=t.length;Object.keys(e.getters).forEach(function(i){if(i.slice(0,r)===t){var o=i.slice(r);Object.defineProperty(n,o,{get:function(){return e.getters[i]},enumerable:!0})}}),e._makeLocalGettersCache[t]=n}return e._makeLocalGettersCache[t]}function L(e,t,n,r){var i=e._mutations[t]||(e._mutations[t]=[]);i.push(function(t){n.call(e,r.state,t)})}function C(e,t,n,r){var i=e._actions[t]||(e._actions[t]=[]);i.push(function(t){var i=n.call(e,{dispatch:r.dispatch,commit:r.commit,getters:r.getters,state:r.state,rootGetters:e.getters,rootState:e.state},t);return d(i)||(i=Promise.resolve(i)),e._devtoolHook?i.catch(function(t){throw e._devtoolHook.emit("vuex:error",t),t}):i})}function S(e,t,n,r){e._wrappedGetters[t]||(e._wrappedGetters[t]=function(e){return n(r.state,r.getters,e.state,e.getters)})}function z(e){e._vm.$watch(function(){return this._data.$$state},function(){0},{deep:!0,sync:!0})}function T(e,t){return t.reduce(function(e,t){return e[t]},e)}function O(e,t,n){return u(e)&&e.type&&(n=t,t=e,e=e.type),{type:e,payload:t,options:n}}function H(e){g&&e===g||(g=e,r(g))}_.state.get=function(){return this._vm._data.$$state},_.state.set=function(e){0},y.prototype.commit=function(e,t,n){var r=this,i=O(e,t,n),o=i.type,a=i.payload,s=(i.options,{type:o,payload:a}),c=this._mutations[o];c&&(this._withCommit(function(){c.forEach(function(e){e(a)})}),this._subscribers.slice().forEach(function(e){return e(s,r.state)}))},y.prototype.dispatch=function(e,t){var n=this,r=O(e,t),i=r.type,o=r.payload,a={type:i,payload:o},s=this._actions[i];if(s){try{this._actionSubscribers.slice().filter(function(e){return e.before}).forEach(function(e){return e.before(a,n.state)})}catch(l){0}var c=s.length>1?Promise.all(s.map(function(e){return e(o)})):s[0](o);return new Promise(function(e,t){c.then(function(t){try{n._actionSubscribers.filter(function(e){return e.after}).forEach(function(e){return e.after(a,n.state)})}catch(l){0}e(t)},function(e){try{n._actionSubscribers.filter(function(e){return e.error}).forEach(function(t){return t.error(a,n.state,e)})}catch(l){0}t(e)})})}},y.prototype.subscribe=function(e,t){return b(e,this._subscribers,t)},y.prototype.subscribeAction=function(e,t){var n="function"===typeof e?{before:e}:e;return b(n,this._actionSubscribers,t)},y.prototype.watch=function(e,t,n){var r=this;return this._watcherVM.$watch(function(){return e(r.state,r.getters)},t,n)},y.prototype.replaceState=function(e){var t=this;this._withCommit(function(){t._vm._data.$$state=e})},y.prototype.registerModule=function(e,t,n){void 0===n&&(n={}),"string"===typeof e&&(e=[e]),this._modules.register(e,t),w(this,this.state,e,this._modules.get(e),n.preserveState),A(this,this.state)},y.prototype.unregisterModule=function(e){var t=this;"string"===typeof e&&(e=[e]),this._modules.unregister(e),this._withCommit(function(){var n=T(t.state,e.slice(0,-1));g.delete(n,e[e.length-1])}),M(this)},y.prototype.hasModule=function(e){return"string"===typeof e&&(e=[e]),this._modules.isRegistered(e)},y.prototype.hotUpdate=function(e){this._modules.update(e),M(this,!0)},y.prototype._withCommit=function(e){var t=this._committing;this._committing=!0,e(),this._committing=t},Object.defineProperties(y.prototype,_);var D=I(function(e,t){var n={};return j(t).forEach(function(t){var r=t.key,i=t.val;n[r]=function(){var t=this.$store.state,n=this.$store.getters;if(e){var r=$(this.$store,"mapState",e);if(!r)return;t=r.context.state,n=r.context.getters}return"function"===typeof i?i.call(this,t,n):t[i]},n[r].vuex=!0}),n}),Y=I(function(e,t){var n={};return j(t).forEach(function(t){var r=t.key,i=t.val;n[r]=function(){var t=[],n=arguments.length;while(n--)t[n]=arguments[n];var r=this.$store.commit;if(e){var o=$(this.$store,"mapMutations",e);if(!o)return;r=o.context.commit}return"function"===typeof i?i.apply(this,[r].concat(t)):r.apply(this.$store,[i].concat(t))}}),n}),V=I(function(e,t){var n={};return j(t).forEach(function(t){var r=t.key,i=t.val;i=e+i,n[r]=function(){if(!e||$(this.$store,"mapGetters",e))return this.$store.getters[i]},n[r].vuex=!0}),n}),P=I(function(e,t){var n={};return j(t).forEach(function(t){var r=t.key,i=t.val;n[r]=function(){var t=[],n=arguments.length;while(n--)t[n]=arguments[n];var r=this.$store.dispatch;if(e){var o=$(this.$store,"mapActions",e);if(!o)return;r=o.context.dispatch}return"function"===typeof i?i.apply(this,[r].concat(t)):r.apply(this.$store,[i].concat(t))}}),n}),E=function(e){return{mapState:D.bind(null,e),mapGetters:V.bind(null,e),mapMutations:Y.bind(null,e),mapActions:P.bind(null,e)}};function j(e){return F(e)?Array.isArray(e)?e.map(function(e){return{key:e,val:e}}):Object.keys(e).map(function(t){return{key:t,val:e[t]}}):[]}function F(e){return Array.isArray(e)||u(e)}function I(e){return function(t,n){return"string"!==typeof t?(n=t,t=""):"/"!==t.charAt(t.length-1)&&(t+="/"),e(t,n)}}function $(e,t,n){var r=e._modulesNamespaceMap[n];return r}function R(e){void 0===e&&(e={});var t=e.collapsed;void 0===t&&(t=!0);var n=e.filter;void 0===n&&(n=function(e,t,n){return!0});var r=e.transformer;void 0===r&&(r=function(e){return e});var i=e.mutationTransformer;void 0===i&&(i=function(e){return e});var o=e.actionFilter;void 0===o&&(o=function(e,t){return!0});var a=e.actionTransformer;void 0===a&&(a=function(e){return e});var s=e.logMutations;void 0===s&&(s=!0);var l=e.logActions;void 0===l&&(l=!0);var u=e.logger;return void 0===u&&(u=console),function(e){var d=c(e.state);"undefined"!==typeof u&&(s&&e.subscribe(function(e,o){var a=c(o);if(n(e,d,a)){var s=B(),l=i(e),h="mutation "+e.type+s;N(u,h,t),u.log("%c prev state","color: #9E9E9E; font-weight: bold",r(d)),u.log("%c mutation","color: #03A9F4; font-weight: bold",l),u.log("%c next state","color: #4CAF50; font-weight: bold",r(a)),W(u)}d=a}),l&&e.subscribeAction(function(e,n){if(o(e,n)){var r=B(),i=a(e),s="action "+e.type+r;N(u,s,t),u.log("%c action","color: #03A9F4; font-weight: bold",i),W(u)}}))}}function N(e,t,n){var r=n?e.groupCollapsed:e.group;try{r.call(e,t)}catch(i){e.log(t)}}function W(e){try{e.groupEnd()}catch(t){e.log("—— log end ——")}}function B(){var e=new Date;return" @ "+U(e.getHours(),2)+":"+U(e.getMinutes(),2)+":"+U(e.getSeconds(),2)+"."+U(e.getMilliseconds(),3)}function K(e,t){return new Array(t+1).join(e)}function U(e,t){return K("0",t-e.toString().length)+e}var q={Store:y,install:H,version:"3.6.2",mapState:D,mapMutations:Y,mapGetters:V,mapActions:P,createNamespacedHelpers:E,createLogger:R};t.Ay=q},9771:function(e){"use strict";var t=!1,n=function(){};if(t){var r=function(e,t){var n=arguments.length;t=new Array(n>1?n-1:0);for(var r=1;r2?i-2:0);for(var o=2;o1e-5){d=l<=.5?c/(a+s):c/(2-a-s);var h=(a-r)/c,f=(a-i)/c,p=(a-o)/c;u=r==a?p-f:i==a?2+h-p:4+f-h,u*=60,u<0&&(u+=360)}return[u,d,l]}e.exports={lighten:n,darken:r,mix:i,toNum3:a,rgb:o,rgbaToRgb:o,pad2:t,rgbToHsl:l,rrggbbToHsl:c}},48104:function(e,t,n){var r=n(31488);e.exports=function(e,t){"#"===e[0]&&(e=e.slice(1));for(var n=["#"+e,r.toNum3(e).join(",")],i=1;i<=9;i++)n.push(r.lighten(e,Number((i/10).toFixed(2)))),n.push(r.darken(e,Number((i/10).toFixed(2))));return n.push(r.lighten(e,.85)),n.push(r.lighten(e,.925)),n.push(r.lighten(e,.95)),n.push(r.lighten(e,.975)),n.push(r.rrggbbToHsl(e)),[].push.apply(n,t),n}},46942:function(e,t){var n,r; /*! Copyright (c) 2018 Jed Watson. Licensed under the MIT License (MIT), see http://jedwatson.github.io/classnames -*/(function(){"use strict";var i={}.hasOwnProperty;function o(){for(var e="",t=0;t>8&255]},G=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},J=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},X=function(e){return B(m(e),23,4)},Z=function(e){return B(e,52,8)},Q=function(e,t,n){l(e[z],t,{configurable:!0,get:function(){return n(this)[t]}})},ee=function(e,t,n,r){var i=D(e),o=p(n),a=!!r;if(o+t>i.byteLength)throw new R(O);var s=i.bytes,c=o+i.byteOffset,l=b(s,c,c+t);return a?l:W(l)},te=function(e,t,n,r,i,o){var a=D(e),s=p(n),c=r(+i),l=!!o;if(s+t>a.byteLength)throw new R(O);for(var u=a.bytes,d=s+a.byteOffset,h=0;h>24)},setUint8:function(e,t){ie(this,e,t<<24>>24)}},{unsafe:!0})}else P=function(e){h(this,E);var t=p(e);Y(this,{type:C,bytes:N($(t),0),byteLength:t}),o||(this.byteLength=t,this.detached=!1)},E=P[z],j=function(e,t,n){h(this,F),h(e,E);var r=H(e),i=r.byteLength,a=f(t);if(a<0||a>i)throw new R("Wrong offset");if(n=void 0===n?i-a:p(n),a+n>i)throw new R(T);Y(this,{type:S,buffer:e,byteLength:n,byteOffset:a,bytes:r.bytes}),o||(this.buffer=e,this.byteLength=n,this.byteOffset=a)},F=j[z],o&&(Q(P,"byteLength",H),Q(j,"buffer",D),Q(j,"byteLength",D),Q(j,"byteOffset",D)),u(F,{getInt8:function(e){return ee(this,1,e)[0]<<24>>24},getUint8:function(e){return ee(this,1,e)[0]},getInt16:function(e){var t=ee(this,2,e,arguments.length>1&&arguments[1]);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=ee(this,2,e,arguments.length>1&&arguments[1]);return t[1]<<8|t[0]},getInt32:function(e){return J(ee(this,4,e,arguments.length>1&&arguments[1]))},getUint32:function(e){return J(ee(this,4,e,arguments.length>1&&arguments[1]))>>>0},getFloat32:function(e){return K(ee(this,4,e,arguments.length>1&&arguments[1]),23)},getFloat64:function(e){return K(ee(this,8,e,arguments.length>1&&arguments[1]),52)},setInt8:function(e,t){te(this,1,e,U,t)},setUint8:function(e,t){te(this,1,e,U,t)},setInt16:function(e,t){te(this,2,e,q,t,arguments.length>2&&arguments[2])},setUint16:function(e,t){te(this,2,e,q,t,arguments.length>2&&arguments[2])},setInt32:function(e,t){te(this,4,e,G,t,arguments.length>2&&arguments[2])},setUint32:function(e,t){te(this,4,e,G,t,arguments.length>2&&arguments[2])},setFloat32:function(e,t){te(this,4,e,X,t,arguments.length>2&&arguments[2])},setFloat64:function(e,t){te(this,8,e,Z,t,arguments.length>2&&arguments[2])}});w(P,C),w(j,S),e.exports={ArrayBuffer:P,DataView:j}},57029:function(e,t,n){"use strict";var r=n(48981),i=n(35610),o=n(26198),a=n(84606),s=Math.min;e.exports=[].copyWithin||function(e,t){var n=r(this),c=o(n),l=i(e,c),u=i(t,c),d=arguments.length>2?arguments[2]:void 0,h=s((void 0===d?c:i(d,c))-u,c-l),f=1;u0)u in n?n[l]=n[u]:a(n,l),l+=f,u+=f;return n}},84373:function(e,t,n){"use strict";var r=n(48981),i=n(35610),o=n(26198);e.exports=function(e){var t=r(this),n=o(t),a=arguments.length,s=i(a>1?arguments[1]:void 0,n),c=a>2?arguments[2]:void 0,l=void 0===c?n:i(c,n);while(l>s)t[s++]=e;return t}},90235:function(e,t,n){"use strict";var r=n(59213).forEach,i=n(34598),o=i("forEach");e.exports=o?[].forEach:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}},35370:function(e,t,n){"use strict";var r=n(26198);e.exports=function(e,t,n){var i=0,o=arguments.length>2?n:r(t),a=new e(o);while(o>i)a[i]=t[i++];return a}},97916:function(e,t,n){"use strict";var r=n(76080),i=n(69565),o=n(48981),a=n(96319),s=n(44209),c=n(33517),l=n(26198),u=n(97040),d=n(34527),h=n(70081),f=n(50851),p=n(9539),m=Array;e.exports=function(e){var t=c(this),n=arguments.length,v=n>1?arguments[1]:void 0,g=void 0!==v;g&&(v=r(v,n>2?arguments[2]:void 0));var y,_,b,M,A,w,x=o(e),k=f(x),L=0;if(!k||this===m&&s(k))for(y=l(x),_=t?new this(y):m(y);y>L;L++)w=g?v(x[L],L):x[L],u(_,L,w);else for(_=t?new this:[],M=h(x,k),A=M.next;!(b=i(A,M)).done;L++){w=g?a(M,v,[b.value,L],!0):b.value;try{u(_,L,w)}catch(C){p(M,"throw",C)}}return d(_,L),_}},19617:function(e,t,n){"use strict";var r=n(25397),i=n(35610),o=n(26198),a=function(e){return function(t,n,a){var s=r(t),c=o(s);if(0===c)return!e&&-1;var l,u=i(a,c);if(e&&n!==n){while(c>u)if(l=s[u++],l!==l)return!0}else for(;c>u;u++)if((e||u in s)&&s[u]===n)return e||u||0;return!e&&-1}};e.exports={includes:a(!0),indexOf:a(!1)}},59213:function(e,t,n){"use strict";var r=n(76080),i=n(47055),o=n(48981),a=n(26198),s=n(1469),c=n(97040),l=function(e){var t=1===e,n=2===e,l=3===e,u=4===e,d=6===e,h=7===e,f=5===e||d;return function(p,m,v){for(var g,y,_=o(p),b=i(_),M=a(b),A=r(m,v),w=0,x=0,k=t?s(p,M):n||h?s(p,0):void 0;M>w;w++)if((f||w in b)&&(g=b[w],y=A(g,w,_),e))if(t)c(k,w,y);else if(y)switch(e){case 3:return!0;case 5:return g;case 6:return w;case 2:c(k,x++,g)}else switch(e){case 4:return!1;case 7:c(k,x++,g)}return d?-1:l||u?u:k}};e.exports={forEach:l(0),map:l(1),filter:l(2),some:l(3),every:l(4),find:l(5),findIndex:l(6),filterReject:l(7)}},8379:function(e,t,n){"use strict";var r=n(18745),i=n(25397),o=n(91291),a=n(26198),s=n(34598),c=Math.min,l=[].lastIndexOf,u=!!l&&1/[1].lastIndexOf(1,-0)<0,d=s("lastIndexOf"),h=u||!d;e.exports=h?function(e){if(u)return r(l,this,arguments)||0;var t=i(this),n=a(t);if(0===n)return-1;var s=n-1;for(arguments.length>1&&(s=c(s,o(arguments[1]))),s<0&&(s=n+s);s>=0;s--)if(s in t&&t[s]===e)return s||0;return-1}:l},70597:function(e,t,n){"use strict";var r=n(79039),i=n(78227),o=n(39519),a=i("species");e.exports=function(e){return o>=51||!r(function(){var t=[],n=t.constructor={};return n[a]=function(){return{foo:1}},1!==t[e](Boolean).foo})}},34598:function(e,t,n){"use strict";var r=n(79039);e.exports=function(e,t){var n=[][e];return!!n&&r(function(){n.call(null,t||function(){return 1},1)})}},80926:function(e,t,n){"use strict";var r=n(79306),i=n(48981),o=n(47055),a=n(26198),s=TypeError,c="Reduce of empty array with no initial value",l=function(e){return function(t,n,l,u){var d=i(t),h=o(d),f=a(d);if(r(n),0===f&&l<2)throw new s(c);var p=e?f-1:0,m=e?-1:1;if(l<2)while(1){if(p in h){u=h[p],p+=m;break}if(p+=m,e?p<0:f<=p)throw new s(c)}for(;e?p>=0:f>p;p+=m)p in h&&(u=n(u,h[p],p,d));return u}};e.exports={left:l(!1),right:l(!0)}},34527:function(e,t,n){"use strict";var r=n(43724),i=n(34376),o=TypeError,a=Object.getOwnPropertyDescriptor,s=r&&!function(){if(void 0!==this)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(e){return e instanceof TypeError}}();e.exports=s?function(e,t){if(i(e)&&!a(e,"length").writable)throw new o("Cannot set read only .length");return e.length=t}:function(e,t){return e.length=t}},67680:function(e,t,n){"use strict";var r=n(79504);e.exports=r([].slice)},74488:function(e,t,n){"use strict";var r=n(67680),i=Math.floor,o=function(e,t){var n=e.length;if(n<8){var a,s,c=1;while(c0)e[s]=e[--s];s!==c++&&(e[s]=a)}}else{var l=i(n/2),u=o(r(e,0,l),t),d=o(r(e,l),t),h=u.length,f=d.length,p=0,m=0;while(p1?arguments[1]:void 0);while(t=t?t.next:n.first){r(t.value,t.key,this);while(t&&t.removed)t=t.previous}},has:function(e){return!!_(this,e)}}),o(h,n?{get:function(e){var t=_(this,e);return t&&t.value},set:function(e,t){return y(this,0===e?0:e,t)}}:{add:function(e){return y(this,e=0===e?0:e,e)}}),f&&i(h,"size",{configurable:!0,get:function(){return m(this).size}}),d},setStrong:function(e,t,n){var r=t+" Iterator",i=g(t),o=g(r);u(e,t,function(e,t){v(this,{type:r,target:e,state:i(e),kind:t,last:null})},function(){var e=o(this),t=e.kind,n=e.last;while(n&&n.removed)n=n.previous;return e.target&&(e.last=n=n?n.next:e.state.first)?d("keys"===t?n.key:"values"===t?n.value:[n.key,n.value],!1):(e.target=null,d(void 0,!0))},n?"entries":"values",!n,!0),h(t)}}},91625:function(e,t,n){"use strict";var r=n(79504),i=n(56279),o=n(3451).getWeakData,a=n(90679),s=n(28551),c=n(64117),l=n(20034),u=n(72652),d=n(59213),h=n(39297),f=n(91181),p=f.set,m=f.getterFor,v=d.find,g=d.findIndex,y=r([].splice),_=0,b=function(e){return e.frozen||(e.frozen=new M)},M=function(){this.entries=[]},A=function(e,t){return v(e.entries,function(e){return e[0]===t})};M.prototype={get:function(e){var t=A(this,e);if(t)return t[1]},has:function(e){return!!A(this,e)},set:function(e,t){var n=A(this,e);n?n[1]=t:this.entries.push([e,t])},delete:function(e){var t=g(this.entries,function(t){return t[0]===e});return~t&&y(this.entries,t,1),!!~t}},e.exports={getConstructor:function(e,t,n,r){var d=e(function(e,i){a(e,f),p(e,{type:t,id:_++,frozen:null}),c(i)||u(i,e[r],{that:e,AS_ENTRIES:n})}),f=d.prototype,v=m(t),g=function(e,t,n){var r=v(e),i=o(s(t),!0);return!0===i?b(r).set(t,n):i[r.id]=n,e};return i(f,{delete:function(e){var t=v(this);if(!l(e))return!1;var n=o(e);return!0===n?b(t)["delete"](e):n&&h(n,t.id)&&delete n[t.id]},has:function(e){var t=v(this);if(!l(e))return!1;var n=o(e);return!0===n?b(t).has(e):n&&h(n,t.id)}}),i(f,n?{get:function(e){var t=v(this);if(l(e)){var n=o(e);if(!0===n)return b(t).get(e);if(n)return n[t.id]}},set:function(e,t){return g(this,e,t)}}:{add:function(e){return g(this,e,!0)}}),d}}},16468:function(e,t,n){"use strict";var r=n(46518),i=n(22195),o=n(79504),a=n(92796),s=n(36840),c=n(3451),l=n(72652),u=n(90679),d=n(94901),h=n(64117),f=n(20034),p=n(79039),m=n(84428),v=n(10687),g=n(23167);e.exports=function(e,t,n){var y=-1!==e.indexOf("Map"),_=-1!==e.indexOf("Weak"),b=y?"set":"add",M=i[e],A=M&&M.prototype,w=M,x={},k=function(e){var t=o(A[e]);s(A,e,"add"===e?function(e){return t(this,0===e?0:e),this}:"delete"===e?function(e){return!(_&&!f(e))&&t(this,0===e?0:e)}:"get"===e?function(e){return _&&!f(e)?void 0:t(this,0===e?0:e)}:"has"===e?function(e){return!(_&&!f(e))&&t(this,0===e?0:e)}:function(e,n){return t(this,0===e?0:e,n),this})},L=a(e,!d(M)||!(_||A.forEach&&!p(function(){(new M).entries().next()})));if(L)w=n.getConstructor(t,e,y,b),c.enable();else if(a(e,!0)){var C=new w,S=C[b](_?{}:-0,1)!==C,z=p(function(){C.has(1)}),T=m(function(e){new M(e)}),O=!_&&p(function(){var e=new M,t=5;while(t--)e[b](t,t);return!e.has(-0)});T||(w=t(function(e,t){u(e,A);var n=g(new M,e,w);return h(t)||l(t,n[b],{that:n,AS_ENTRIES:y}),n}),w.prototype=A,A.constructor=w),(z||O)&&(k("delete"),k("has"),y&&k("get")),(O||S)&&k(b),_&&A.clear&&delete A.clear}return x[e]=w,r({global:!0,constructor:!0,forced:w!==M},x),v(w,e),_||n.setStrong(w,e,y),w}},77740:function(e,t,n){"use strict";var r=n(39297),i=n(35031),o=n(77347),a=n(24913);e.exports=function(e,t,n){for(var s=i(t),c=a.f,l=o.f,u=0;u"+c+""}},62529:function(e){"use strict";e.exports=function(e,t){return{value:e,done:t}}},66699:function(e,t,n){"use strict";var r=n(43724),i=n(24913),o=n(6980);e.exports=r?function(e,t,n){return i.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},6980:function(e){"use strict";e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},97040:function(e,t,n){"use strict";var r=n(43724),i=n(24913),o=n(6980);e.exports=function(e,t,n){r?i.f(e,t,o(0,n)):e[t]=n}},53640:function(e,t,n){"use strict";var r=n(28551),i=n(84270),o=TypeError;e.exports=function(e){if(r(this),"string"===e||"default"===e)e="string";else if("number"!==e)throw new o("Incorrect hint");return i(this,e)}},62106:function(e,t,n){"use strict";var r=n(50283),i=n(24913);e.exports=function(e,t,n){return n.get&&r(n.get,t,{getter:!0}),n.set&&r(n.set,t,{setter:!0}),i.f(e,t,n)}},36840:function(e,t,n){"use strict";var r=n(94901),i=n(24913),o=n(50283),a=n(39433);e.exports=function(e,t,n,s){s||(s={});var c=s.enumerable,l=void 0!==s.name?s.name:t;if(r(n)&&o(n,l,s),s.global)c?e[t]=n:a(t,n);else{try{s.unsafe?e[t]&&(c=!0):delete e[t]}catch(u){}c?e[t]=n:i.f(e,t,{value:n,enumerable:!1,configurable:!s.nonConfigurable,writable:!s.nonWritable})}return e}},56279:function(e,t,n){"use strict";var r=n(36840);e.exports=function(e,t,n){for(var i in t)r(e,i,t[i],n);return e}},39433:function(e,t,n){"use strict";var r=n(22195),i=Object.defineProperty;e.exports=function(e,t){try{i(r,e,{value:t,configurable:!0,writable:!0})}catch(n){r[e]=t}return t}},84606:function(e,t,n){"use strict";var r=n(16823),i=TypeError;e.exports=function(e,t){if(!delete e[t])throw new i("Cannot delete property "+r(t)+" of "+r(e))}},43724:function(e,t,n){"use strict";var r=n(79039);e.exports=!r(function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]})},4055:function(e,t,n){"use strict";var r=n(22195),i=n(20034),o=r.document,a=i(o)&&i(o.createElement);e.exports=function(e){return a?o.createElement(e):{}}},96837:function(e){"use strict";var t=TypeError,n=9007199254740991;e.exports=function(e){if(e>n)throw new t("Maximum allowed index exceeded");return e}},67400:function(e){"use strict";e.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},79296:function(e,t,n){"use strict";var r=n(4055),i=r("span").classList,o=i&&i.constructor&&i.constructor.prototype;e.exports=o===Object.prototype?void 0:o},88727:function(e){"use strict";e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},13709:function(e,t,n){"use strict";var r=n(82839),i=r.match(/firefox\/(\d+)/i);e.exports=!!i&&+i[1]},13763:function(e,t,n){"use strict";var r=n(82839);e.exports=/MSIE|Trident/.test(r)},44265:function(e,t,n){"use strict";var r=n(82839);e.exports=/ipad|iphone|ipod/i.test(r)&&"undefined"!=typeof Pebble},89544:function(e,t,n){"use strict";var r=n(82839);e.exports=/ipad|iphone|ipod/i.test(r)&&/applewebkit/i.test(r)},16193:function(e,t,n){"use strict";var r=n(84215);e.exports="NODE"===r},7860:function(e,t,n){"use strict";var r=n(82839);e.exports=/web0s(?!.*chrome)/i.test(r)},82839:function(e,t,n){"use strict";var r=n(22195),i=r.navigator,o=i&&i.userAgent;e.exports=o?String(o):""},39519:function(e,t,n){"use strict";var r,i,o=n(22195),a=n(82839),s=o.process,c=o.Deno,l=s&&s.versions||c&&c.version,u=l&&l.v8;u&&(r=u.split("."),i=r[0]>0&&r[0]<4?1:+(r[0]+r[1])),!i&&a&&(r=a.match(/Edge\/(\d+)/),(!r||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/),r&&(i=+r[1]))),e.exports=i},3607:function(e,t,n){"use strict";var r=n(82839),i=r.match(/AppleWebKit\/(\d+)\./);e.exports=!!i&&+i[1]},84215:function(e,t,n){"use strict";var r=n(22195),i=n(82839),o=n(44576),a=function(e){return i.slice(0,e.length)===e};e.exports=function(){return a("Bun/")?"BUN":a("Cloudflare-Workers")?"CLOUDFLARE":a("Deno/")?"DENO":a("Node.js/")?"NODE":r.Bun&&"string"==typeof Bun.version?"BUN":r.Deno&&"object"==typeof Deno.version?"DENO":"process"===o(r.process)?"NODE":r.window&&r.document?"BROWSER":"REST"}()},46518:function(e,t,n){"use strict";var r=n(22195),i=n(77347).f,o=n(66699),a=n(36840),s=n(39433),c=n(77740),l=n(92796);e.exports=function(e,t){var n,u,d,h,f,p,m=e.target,v=e.global,g=e.stat;if(u=v?r:g?r[m]||s(m,{}):r[m]&&r[m].prototype,u)for(d in t){if(f=t[d],e.dontCallGetSet?(p=i(u,d),h=p&&p.value):h=u[d],n=l(v?d:m+(g?".":"#")+d,e.forced),!n&&void 0!==h){if(typeof f==typeof h)continue;c(f,h)}(e.sham||h&&h.sham)&&o(f,"sham",!0),a(u,d,f,e)}}},79039:function(e){"use strict";e.exports=function(e){try{return!!e()}catch(t){return!0}}},89228:function(e,t,n){"use strict";n(27495);var r=n(69565),i=n(36840),o=n(57323),a=n(79039),s=n(78227),c=n(66699),l=s("species"),u=RegExp.prototype;e.exports=function(e,t,n,d){var h=s(e),f=!a(function(){var t={};return t[h]=function(){return 7},7!==""[e](t)}),p=f&&!a(function(){var t=!1,n=/a/;if("split"===e){var r={};r[l]=function(){return n},n={constructor:r,flags:""},n[h]=/./[h]}return n.exec=function(){return t=!0,null},n[h](""),!t});if(!f||!p||n){var m=/./[h],v=t(h,""[e],function(e,t,n,i,a){var s=t.exec;return s===o||s===u.exec?f&&!a?{done:!0,value:r(m,t,n,i)}:{done:!0,value:r(e,n,t,i)}:{done:!1}});i(String.prototype,e,v[0]),i(u,h,v[1])}d&&c(u[h],"sham",!0)}},70259:function(e,t,n){"use strict";var r=n(34376),i=n(26198),o=n(96837),a=n(76080),s=n(97040),c=function(e,t,n,l,u,d,h,f){var p,m,v=u,g=0,y=!!h&&a(h,f);while(g0&&r(p)?(m=i(p),v=c(e,t,p,m,v,d-1)-1):(o(v+1),s(e,v,p)),v++),g++;return v};e.exports=c},92744:function(e,t,n){"use strict";var r=n(79039);e.exports=!r(function(){return Object.isExtensible(Object.preventExtensions({}))})},18745:function(e,t,n){"use strict";var r=n(40616),i=Function.prototype,o=i.apply,a=i.call;e.exports="object"==typeof Reflect&&Reflect.apply||(r?a.bind(o):function(){return a.apply(o,arguments)})},76080:function(e,t,n){"use strict";var r=n(27476),i=n(79306),o=n(40616),a=r(r.bind);e.exports=function(e,t){return i(e),void 0===t?e:o?a(e,t):function(){return e.apply(t,arguments)}}},40616:function(e,t,n){"use strict";var r=n(79039);e.exports=!r(function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")})},30566:function(e,t,n){"use strict";var r=n(79504),i=n(79306),o=n(20034),a=n(39297),s=n(67680),c=n(40616),l=Function,u=r([].concat),d=r([].join),h={},f=function(e,t,n){if(!a(h,t)){for(var r=[],i=0;i]*>)/g,u=/\$([$&'`]|\d{1,2})/g;e.exports=function(e,t,n,r,d,h){var f=n+e.length,p=r.length,m=u;return void 0!==d&&(d=i(d),m=l),s(h,m,function(i,s){var l;switch(a(s,0)){case"$":return"$";case"&":return e;case"`":return c(t,0,n);case"'":return c(t,f);case"<":l=d[c(s,1,-1)];break;default:var u=+s;if(0===u)return i;if(u>p){var h=o(u/10);return 0===h?i:h<=p?void 0===r[h-1]?a(s,1):r[h-1]+a(s,1):i}l=r[u-1]}return void 0===l?"":l})}},22195:function(e,t,n){"use strict";var r=function(e){return e&&e.Math===Math&&e};e.exports=r("object"==typeof globalThis&&globalThis)||r("object"==typeof window&&window)||r("object"==typeof self&&self)||r("object"==typeof n.g&&n.g)||r("object"==typeof this&&this)||function(){return this}()||Function("return this")()},39297:function(e,t,n){"use strict";var r=n(79504),i=n(48981),o=r({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return o(i(e),t)}},30421:function(e){"use strict";e.exports={}},90757:function(e){"use strict";e.exports=function(e,t){try{1===arguments.length?console.error(e):console.error(e,t)}catch(n){}}},20397:function(e,t,n){"use strict";var r=n(97751);e.exports=r("document","documentElement")},35917:function(e,t,n){"use strict";var r=n(43724),i=n(79039),o=n(4055);e.exports=!r&&!i(function(){return 7!==Object.defineProperty(o("div"),"a",{get:function(){return 7}}).a})},88490:function(e){"use strict";var t=Array,n=Math.abs,r=Math.pow,i=Math.floor,o=Math.log,a=Math.LN2,s=function(e,s,c){var l,u,d,h=t(c),f=8*c-s-1,p=(1<>1,v=23===s?r(2,-24)-r(2,-77):0,g=e<0||0===e&&1/e<0?1:0,y=0;e=n(e),e!==e||e===1/0?(u=e!==e?1:0,l=p):(l=i(o(e)/a),d=r(2,-l),e*d<1&&(l--,d*=2),e+=l+m>=1?v/d:v*r(2,1-m),e*d>=2&&(l++,d/=2),l+m>=p?(u=0,l=p):l+m>=1?(u=(e*d-1)*r(2,s),l+=m):(u=e*r(2,m-1)*r(2,s),l=0));while(s>=8)h[y++]=255&u,u/=256,s-=8;l=l<0)h[y++]=255&l,l/=256,f-=8;return h[y-1]|=128*g,h},c=function(e,t){var n,i=e.length,o=8*i-t-1,a=(1<>1,c=o-7,l=i-1,u=e[l--],d=127&u;u>>=7;while(c>0)d=256*d+e[l--],c-=8;n=d&(1<<-c)-1,d>>=-c,c+=t;while(c>0)n=256*n+e[l--],c-=8;if(0===d)d=1-s;else{if(d===a)return n?NaN:u?-1/0:1/0;n+=r(2,t),d-=s}return(u?-1:1)*n*r(2,d-t)};e.exports={pack:s,unpack:c}},47055:function(e,t,n){"use strict";var r=n(79504),i=n(79039),o=n(44576),a=Object,s=r("".split);e.exports=i(function(){return!a("z").propertyIsEnumerable(0)})?function(e){return"String"===o(e)?s(e,""):a(e)}:a},23167:function(e,t,n){"use strict";var r=n(94901),i=n(20034),o=n(52967);e.exports=function(e,t,n){var a,s;return o&&r(a=t.constructor)&&a!==n&&i(s=a.prototype)&&s!==n.prototype&&o(e,s),e}},33706:function(e,t,n){"use strict";var r=n(79504),i=n(94901),o=n(77629),a=r(Function.toString);i(o.inspectSource)||(o.inspectSource=function(e){return a(e)}),e.exports=o.inspectSource},3451:function(e,t,n){"use strict";var r=n(46518),i=n(79504),o=n(30421),a=n(20034),s=n(39297),c=n(24913).f,l=n(38480),u=n(10298),d=n(34124),h=n(33392),f=n(92744),p=!1,m=h("meta"),v=0,g=function(e){c(e,m,{value:{objectID:"O"+v++,weakData:{}}})},y=function(e,t){if(!a(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!s(e,m)){if(!d(e))return"F";if(!t)return"E";g(e)}return e[m].objectID},_=function(e,t){if(!s(e,m)){if(!d(e))return!0;if(!t)return!1;g(e)}return e[m].weakData},b=function(e){return f&&p&&d(e)&&!s(e,m)&&g(e),e},M=function(){A.enable=function(){},p=!0;var e=l.f,t=i([].splice),n={};n[m]=1,e(n).length&&(l.f=function(n){for(var r=e(n),i=0,o=r.length;iy;y++)if(b=T(e[y]),b&&l(m,b))return b;return new p(!1)}v=u(e,g)}M=k?e.next:v.next;while(!(A=i(M,v)).done){var O=A.value;try{b=T(O)}catch(H){if(!v)throw H;h(v,"throw",H)}if("object"==typeof b&&b&&l(m,b))return b}return new p(!1)}},9539:function(e,t,n){"use strict";var r=n(69565),i=n(28551),o=n(55966);e.exports=function(e,t,n){var a,s;i(e);try{if(a=o(e,"return"),!a){if("throw"===t)throw n;return n}a=r(a,e)}catch(c){s=!0,a=c}if("throw"===t)throw n;if(s)throw a;return i(a),n}},33994:function(e,t,n){"use strict";var r=n(57657).IteratorPrototype,i=n(2360),o=n(6980),a=n(10687),s=n(26269),c=function(){return this};e.exports=function(e,t,n,l){var u=t+" Iterator";return e.prototype=i(r,{next:o(+!l,n)}),a(e,u,!1,!0),s[u]=c,e}},51088:function(e,t,n){"use strict";var r=n(46518),i=n(69565),o=n(96395),a=n(10350),s=n(94901),c=n(33994),l=n(42787),u=n(52967),d=n(10687),h=n(66699),f=n(36840),p=n(78227),m=n(26269),v=n(57657),g=a.PROPER,y=a.CONFIGURABLE,_=v.IteratorPrototype,b=v.BUGGY_SAFARI_ITERATORS,M=p("iterator"),A="keys",w="values",x="entries",k=function(){return this};e.exports=function(e,t,n,a,p,v,L){c(n,t,a);var C,S,z,T=function(e){if(e===p&&V)return V;if(!b&&e&&e in D)return D[e];switch(e){case A:return function(){return new n(this,e)};case w:return function(){return new n(this,e)};case x:return function(){return new n(this,e)}}return function(){return new n(this)}},O=t+" Iterator",H=!1,D=e.prototype,Y=D[M]||D["@@iterator"]||p&&D[p],V=!b&&Y||T(p),P="Array"===t&&D.entries||Y;if(P&&(C=l(P.call(new e)),C!==Object.prototype&&C.next&&(o||l(C)===_||(u?u(C,_):s(C[M])||f(C,M,k)),d(C,O,!0,!0),o&&(m[O]=k))),g&&p===w&&Y&&Y.name!==w&&(!o&&y?h(D,"name",w):(H=!0,V=function(){return i(Y,this)})),p)if(S={values:T(w),keys:v?V:T(A),entries:T(x)},L)for(z in S)(b||H||!(z in D))&&f(D,z,S[z]);else r({target:t,proto:!0,forced:b||H},S);return o&&!L||D[M]===V||f(D,M,V,{name:p}),m[t]=V,S}},57657:function(e,t,n){"use strict";var r,i,o,a=n(79039),s=n(94901),c=n(20034),l=n(2360),u=n(42787),d=n(36840),h=n(78227),f=n(96395),p=h("iterator"),m=!1;[].keys&&(o=[].keys(),"next"in o?(i=u(u(o)),i!==Object.prototype&&(r=i)):m=!0);var v=!c(r)||a(function(){var e={};return r[p].call(e)!==e});v?r={}:f&&(r=l(r)),s(r[p])||d(r,p,function(){return this}),e.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:m}},26269:function(e){"use strict";e.exports={}},26198:function(e,t,n){"use strict";var r=n(18014);e.exports=function(e){return r(e.length)}},50283:function(e,t,n){"use strict";var r=n(79504),i=n(79039),o=n(94901),a=n(39297),s=n(43724),c=n(10350).CONFIGURABLE,l=n(33706),u=n(91181),d=u.enforce,h=u.get,f=String,p=Object.defineProperty,m=r("".slice),v=r("".replace),g=r([].join),y=s&&!i(function(){return 8!==p(function(){},"length",{value:8}).length}),_=String(String).split("String"),b=e.exports=function(e,t,n){"Symbol("===m(f(t),0,7)&&(t="["+v(f(t),/^Symbol\(([^)]*)\).*$/,"$1")+"]"),n&&n.getter&&(t="get "+t),n&&n.setter&&(t="set "+t),(!a(e,"name")||c&&e.name!==t)&&(s?p(e,"name",{value:t,configurable:!0}):e.name=t),y&&n&&a(n,"arity")&&e.length!==n.arity&&p(e,"length",{value:n.arity});try{n&&a(n,"constructor")&&n.constructor?s&&p(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(i){}var r=d(e);return a(r,"source")||(r.source=g(_,"string"==typeof t?t:"")),e};Function.prototype.toString=b(function(){return o(this)&&h(this).source||l(this)},"toString")},53250:function(e){"use strict";var t=Math.expm1,n=Math.exp;e.exports=!t||t(10)>22025.465794806718||t(10)<22025.465794806718||-2e-17!==t(-2e-17)?function(e){var t=+e;return 0===t?t:t>-1e-6&&t<1e-6?t+t*t/2:n(t)-1}:t},33164:function(e,t,n){"use strict";var r=n(77782),i=n(53602),o=Math.abs,a=2220446049250313e-31;e.exports=function(e,t,n,s){var c=+e,l=o(c),u=r(c);if(ln||h!==h?u*(1/0):u*h}},15617:function(e,t,n){"use strict";var r=n(33164),i=1.1920928955078125e-7,o=34028234663852886e22,a=11754943508222875e-54;e.exports=Math.fround||function(e){return r(e,i,o,a)}},49340:function(e){"use strict";var t=Math.log,n=Math.LOG10E;e.exports=Math.log10||function(e){return t(e)*n}},7740:function(e){"use strict";var t=Math.log;e.exports=Math.log1p||function(e){var n=+e;return n>-1e-8&&n<1e-8?n-n*n/2:t(1+n)}},67787:function(e){"use strict";var t=Math.log,n=Math.LN2;e.exports=Math.log2||function(e){return t(e)/n}},53602:function(e){"use strict";var t=2220446049250313e-31,n=1/t;e.exports=function(e){return e+n-n}},77782:function(e){"use strict";e.exports=Math.sign||function(e){var t=+e;return 0===t||t!==t?t:t<0?-1:1}},80741:function(e){"use strict";var t=Math.ceil,n=Math.floor;e.exports=Math.trunc||function(e){var r=+e;return(r>0?n:t)(r)}},91955:function(e,t,n){"use strict";var r,i,o,a,s,c=n(22195),l=n(93389),u=n(76080),d=n(59225).set,h=n(18265),f=n(89544),p=n(44265),m=n(7860),v=n(16193),g=c.MutationObserver||c.WebKitMutationObserver,y=c.document,_=c.process,b=c.Promise,M=l("queueMicrotask");if(!M){var A=new h,w=function(){var e,t;v&&(e=_.domain)&&e.exit();while(t=A.get())try{t()}catch(n){throw A.head&&r(),n}e&&e.enter()};f||v||m||!g||!y?!p&&b&&b.resolve?(a=b.resolve(void 0),a.constructor=b,s=u(a.then,a),r=function(){s(w)}):v?r=function(){_.nextTick(w)}:(d=u(d,c),r=function(){d(w)}):(i=!0,o=y.createTextNode(""),new g(w).observe(o,{characterData:!0}),r=function(){o.data=i=!i}),M=function(e){A.head||r(),A.add(e)}}e.exports=M},27819:function(e,t,n){"use strict";var r=n(79039);e.exports=!r(function(){var e="9007199254740993",t=JSON.rawJSON(e);return!JSON.isRawJSON(t)||JSON.stringify(t)!==e})},36043:function(e,t,n){"use strict";var r=n(79306),i=TypeError,o=function(e){var t,n;this.promise=new e(function(e,r){if(void 0!==t||void 0!==n)throw new i("Bad Promise constructor");t=e,n=r}),this.resolve=r(t),this.reject=r(n)};e.exports.f=function(e){return new o(e)}},60511:function(e,t,n){"use strict";var r=n(60788),i=TypeError;e.exports=function(e){if(r(e))throw new i("The method doesn't accept regular expressions");return e}},50360:function(e,t,n){"use strict";var r=n(22195),i=r.isFinite;e.exports=Number.isFinite||function(e){return"number"==typeof e&&i(e)}},33904:function(e,t,n){"use strict";var r=n(22195),i=n(79039),o=n(79504),a=n(655),s=n(43802).trim,c=n(47452),l=o("".charAt),u=r.parseFloat,d=r.Symbol,h=d&&d.iterator,f=1/u(c+"-0")!==-1/0||h&&!i(function(){u(Object(h))});e.exports=f?function(e){var t=s(a(e)),n=u(t);return 0===n&&"-"===l(t,0)?-0:n}:u},52703:function(e,t,n){"use strict";var r=n(22195),i=n(79039),o=n(79504),a=n(655),s=n(43802).trim,c=n(47452),l=r.parseInt,u=r.Symbol,d=u&&u.iterator,h=/^[+-]?0x/i,f=o(h.exec),p=8!==l(c+"08")||22!==l(c+"0x16")||d&&!i(function(){l(Object(d))});e.exports=p?function(e,t){var n=s(a(e));return l(n,t>>>0||(f(h,n)?16:10))}:l},44213:function(e,t,n){"use strict";var r=n(43724),i=n(79504),o=n(69565),a=n(79039),s=n(71072),c=n(33717),l=n(48773),u=n(48981),d=n(47055),h=Object.assign,f=Object.defineProperty,p=i([].concat);e.exports=!h||a(function(){if(r&&1!==h({b:1},h(f({},"a",{enumerable:!0,get:function(){f(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},n=Symbol("assign detection"),i="abcdefghijklmnopqrst";return e[n]=7,i.split("").forEach(function(e){t[e]=e}),7!==h({},e)[n]||s(h({},t)).join("")!==i})?function(e,t){var n=u(e),i=arguments.length,a=1,h=c.f,f=l.f;while(i>a){var m,v=d(arguments[a++]),g=h?p(s(v),h(v)):s(v),y=g.length,_=0;while(y>_)m=g[_++],r&&!o(f,v,m)||(n[m]=v[m])}return n}:h},2360:function(e,t,n){"use strict";var r,i=n(28551),o=n(96801),a=n(88727),s=n(30421),c=n(20397),l=n(4055),u=n(66119),d=">",h="<",f="prototype",p="script",m=u("IE_PROTO"),v=function(){},g=function(e){return h+p+d+e+h+"/"+p+d},y=function(e){e.write(g("")),e.close();var t=e.parentWindow.Object;return e=null,t},_=function(){var e,t=l("iframe"),n="java"+p+":";return t.style.display="none",c.appendChild(t),t.src=String(n),e=t.contentWindow.document,e.open(),e.write(g("document.F=Object")),e.close(),e.F},b=function(){try{r=new ActiveXObject("htmlfile")}catch(t){}b="undefined"!=typeof document?document.domain&&r?y(r):_():y(r);var e=a.length;while(e--)delete b[f][a[e]];return b()};s[m]=!0,e.exports=Object.create||function(e,t){var n;return null!==e?(v[f]=i(e),n=new v,v[f]=null,n[m]=e):n=b(),void 0===t?n:o.f(n,t)}},96801:function(e,t,n){"use strict";var r=n(43724),i=n(48686),o=n(24913),a=n(28551),s=n(25397),c=n(71072);t.f=r&&!i?Object.defineProperties:function(e,t){a(e);var n,r=s(t),i=c(t),l=i.length,u=0;while(l>u)o.f(e,n=i[u++],r[n]);return e}},24913:function(e,t,n){"use strict";var r=n(43724),i=n(35917),o=n(48686),a=n(28551),s=n(56969),c=TypeError,l=Object.defineProperty,u=Object.getOwnPropertyDescriptor,d="enumerable",h="configurable",f="writable";t.f=r?o?function(e,t,n){if(a(e),t=s(t),a(n),"function"===typeof e&&"prototype"===t&&"value"in n&&f in n&&!n[f]){var r=u(e,t);r&&r[f]&&(e[t]=n.value,n={configurable:h in n?n[h]:r[h],enumerable:d in n?n[d]:r[d],writable:!1})}return l(e,t,n)}:l:function(e,t,n){if(a(e),t=s(t),a(n),i)try{return l(e,t,n)}catch(r){}if("get"in n||"set"in n)throw new c("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},77347:function(e,t,n){"use strict";var r=n(43724),i=n(69565),o=n(48773),a=n(6980),s=n(25397),c=n(56969),l=n(39297),u=n(35917),d=Object.getOwnPropertyDescriptor;t.f=r?d:function(e,t){if(e=s(e),t=c(t),u)try{return d(e,t)}catch(n){}if(l(e,t))return a(!i(o.f,e,t),e[t])}},10298:function(e,t,n){"use strict";var r=n(44576),i=n(25397),o=n(38480).f,a=n(67680),s="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],c=function(e){try{return o(e)}catch(t){return a(s)}};e.exports.f=function(e){return s&&"Window"===r(e)?c(e):o(i(e))}},38480:function(e,t,n){"use strict";var r=n(61828),i=n(88727),o=i.concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return r(e,o)}},33717:function(e,t){"use strict";t.f=Object.getOwnPropertySymbols},42787:function(e,t,n){"use strict";var r=n(39297),i=n(94901),o=n(48981),a=n(66119),s=n(12211),c=a("IE_PROTO"),l=Object,u=l.prototype;e.exports=s?l.getPrototypeOf:function(e){var t=o(e);if(r(t,c))return t[c];var n=t.constructor;return i(n)&&t instanceof n?n.prototype:t instanceof l?u:null}},34124:function(e,t,n){"use strict";var r=n(79039),i=n(20034),o=n(44576),a=n(15652),s=Object.isExtensible,c=r(function(){s(1)});e.exports=c||a?function(e){return!!i(e)&&((!a||"ArrayBuffer"!==o(e))&&(!s||s(e)))}:s},1625:function(e,t,n){"use strict";var r=n(79504);e.exports=r({}.isPrototypeOf)},61828:function(e,t,n){"use strict";var r=n(79504),i=n(39297),o=n(25397),a=n(19617).indexOf,s=n(30421),c=r([].push);e.exports=function(e,t){var n,r=o(e),l=0,u=[];for(n in r)!i(s,n)&&i(r,n)&&c(u,n);while(t.length>l)i(r,n=t[l++])&&(~a(u,n)||c(u,n));return u}},71072:function(e,t,n){"use strict";var r=n(61828),i=n(88727);e.exports=Object.keys||function(e){return r(e,i)}},48773:function(e,t){"use strict";var n={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,i=r&&!n.call({1:2},1);t.f=i?function(e){var t=r(this,e);return!!t&&t.enumerable}:n},42551:function(e,t,n){"use strict";var r=n(96395),i=n(22195),o=n(79039),a=n(3607);e.exports=r||!o(function(){if(!(a&&a<535)){var e=Math.random();__defineSetter__.call(null,e,function(){}),delete i[e]}})},52967:function(e,t,n){"use strict";var r=n(46706),i=n(20034),o=n(67750),a=n(73506);e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,n={};try{e=r(Object.prototype,"__proto__","set"),e(n,[]),t=n instanceof Array}catch(s){}return function(n,r){return o(n),a(r),i(n)?(t?e(n,r):n.__proto__=r,n):n}}():void 0)},32357:function(e,t,n){"use strict";var r=n(43724),i=n(79039),o=n(79504),a=n(42787),s=n(71072),c=n(25397),l=n(48773).f,u=o(l),d=o([].push),h=r&&i(function(){var e=Object.create(null);return e[2]=2,!u(e,2)}),f=function(e){return function(t){var n,i=c(t),o=s(i),l=h&&null===a(i),f=o.length,p=0,m=[];while(f>p)n=o[p++],r&&!(l?n in i:u(i,n))||d(m,e?[n,i[n]]:i[n]);return m}};e.exports={entries:f(!0),values:f(!1)}},53179:function(e,t,n){"use strict";var r=n(92140),i=n(36955);e.exports=r?{}.toString:function(){return"[object "+i(this)+"]"}},84270:function(e,t,n){"use strict";var r=n(69565),i=n(94901),o=n(20034),a=TypeError;e.exports=function(e,t){var n,s;if("string"===t&&i(n=e.toString)&&!o(s=r(n,e)))return s;if(i(n=e.valueOf)&&!o(s=r(n,e)))return s;if("string"!==t&&i(n=e.toString)&&!o(s=r(n,e)))return s;throw new a("Can't convert object to primitive value")}},35031:function(e,t,n){"use strict";var r=n(97751),i=n(79504),o=n(38480),a=n(33717),s=n(28551),c=i([].concat);e.exports=r("Reflect","ownKeys")||function(e){var t=o.f(s(e)),n=a.f;return n?c(t,n(e)):t}},616:function(e,t,n){"use strict";var r=n(79504),i=n(39297),o=SyntaxError,a=parseInt,s=String.fromCharCode,c=r("".charAt),l=r("".slice),u=r(/./.exec),d={'\\"':'"',"\\\\":"\\","\\/":"/","\\b":"\b","\\f":"\f","\\n":"\n","\\r":"\r","\\t":"\t"},h=/^[\da-f]{4}$/i,f=/^[\u0000-\u001F]$/;e.exports=function(e,t){var n=!0,r="";while(t0&&v(l,s.lastIndex-1);s.lastIndex>0&&(!s.multiline||s.multiline&&"\n"!==z&&"\r"!==z&&"\u2028"!==z&&"\u2029"!==z)&&(L="(?: (?:"+L+"))",S=" "+S,C++),n=new RegExp("^(?:"+L+")",k)}A&&(n=new RegExp("^"+L+"$(?!\\s)",k)),b&&(i=s.lastIndex);var T=r(p,w?n:s,S);return w?T?(T.input=l,T[0]=_(T[0],C),T.index=s.lastIndex,s.lastIndex+=T[0].length):s.lastIndex=0:b&&T&&(s.lastIndex=s.global?T.index+T[0].length:i),A&&T&&T.length>1&&r(f,T[0],n,function(){for(var e=1;eb)","g");return"b"!==e.exec("b").groups.a||"bc"!=="b".replace(e,"$c")})},67750:function(e,t,n){"use strict";var r=n(64117),i=TypeError;e.exports=function(e){if(r(e))throw new i("Can't call method on "+e);return e}},93389:function(e,t,n){"use strict";var r=n(22195),i=n(43724),o=Object.getOwnPropertyDescriptor;e.exports=function(e){if(!i)return r[e];var t=o(r,e);return t&&t.value}},3470:function(e){"use strict";e.exports=Object.is||function(e,t){return e===t?0!==e||1/e===1/t:e!==e&&t!==t}},79472:function(e,t,n){"use strict";var r=n(22195),i=n(18745),o=n(94901),a=n(84215),s=n(82839),c=n(67680),l=n(22812),u=r.Function,d=/MSIE .\./.test(s)||"BUN"===a&&function(){var e=r.Bun.version.split(".");return e.length<3||"0"===e[0]&&(e[1]<3||"3"===e[1]&&"0"===e[2])}();e.exports=function(e,t){var n=t?2:1;return d?function(r,a){var s=l(arguments.length,1)>n,d=o(r)?r:u(r),h=s?c(arguments,n):[],f=s?function(){i(d,this,h)}:d;return t?e(f,a):e(f)}:e}},87633:function(e,t,n){"use strict";var r=n(97751),i=n(62106),o=n(78227),a=n(43724),s=o("species");e.exports=function(e){var t=r(e);a&&t&&!t[s]&&i(t,s,{configurable:!0,get:function(){return this}})}},10687:function(e,t,n){"use strict";var r=n(24913).f,i=n(39297),o=n(78227),a=o("toStringTag");e.exports=function(e,t,n){e&&!n&&(e=e.prototype),e&&!i(e,a)&&r(e,a,{configurable:!0,value:t})}},66119:function(e,t,n){"use strict";var r=n(25745),i=n(33392),o=r("keys");e.exports=function(e){return o[e]||(o[e]=i(e))}},77629:function(e,t,n){"use strict";var r=n(96395),i=n(22195),o=n(39433),a="__core-js_shared__",s=e.exports=i[a]||o(a,{});(s.versions||(s.versions=[])).push({version:"3.49.0",mode:r?"pure":"global",copyright:"© 2013–2025 Denis Pushkarev (zloirock.ru), 2025–2026 CoreJS Company (core-js.io). All rights reserved.",license:"https://github.com/zloirock/core-js/blob/v3.49.0/LICENSE",source:"https://github.com/zloirock/core-js"})},25745:function(e,t,n){"use strict";var r=n(77629);e.exports=function(e,t){return r[e]||(r[e]=t||{})}},2293:function(e,t,n){"use strict";var r=n(28551),i=n(35548),o=n(64117),a=n(78227),s=a("species");e.exports=function(e,t){var n,a=r(e).constructor;return void 0===a||o(n=r(a)[s])?t:i(n)}},23061:function(e,t,n){"use strict";var r=n(79039);e.exports=function(e){return r(function(){var t=""[e]('"');return t!==t.toLowerCase()||t.split('"').length>3})}},68183:function(e,t,n){"use strict";var r=n(79504),i=n(91291),o=n(655),a=n(67750),s=r("".charAt),c=r("".charCodeAt),l=r("".slice),u=function(e){return function(t,n){var r,u,d=o(a(t)),h=i(n),f=d.length;return h<0||h>=f?e?"":void 0:(r=c(d,h),r<55296||r>56319||h+1===f||(u=c(d,h+1))<56320||u>57343?e?s(d,h):r:e?l(d,h,h+2):u-56320+(r-55296<<10)+65536)}};e.exports={codeAt:u(!1),charAt:u(!0)}},83063:function(e,t,n){"use strict";var r=n(82839);e.exports=/Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\w+)? Safari\//.test(r)},60533:function(e,t,n){"use strict";var r=n(79504),i=n(18014),o=n(655),a=n(72333),s=n(67750),c=r(a),l=r("".slice),u=Math.ceil,d=function(e){return function(t,n,r){var a=o(s(t)),d=i(n),h=a.length;if(d<=h)return a;var f,p,m=void 0===r?" ":o(r);return""===m?a:(f=d-h,p=c(m,u(f/m.length)),p.length>f&&(p=l(p,0,f)),e?a+p:p+a)}};e.exports={start:d(!1),end:d(!0)}},3717:function(e,t,n){"use strict";var r=n(79504),i=2147483647,o=36,a=1,s=26,c=38,l=700,u=72,d=128,h="-",f=/[^\0-\u007E]/,p=/[.\u3002\uFF0E\uFF61]/g,m="Overflow: input needs wider integers to process",v=o-a,g=RangeError,y=r(p.exec),_=Math.floor,b=String.fromCharCode,M=r("".charCodeAt),A=r([].join),w=r([].push),x=r("".replace),k=r("".split),L=r("".toLowerCase),C=function(e){var t=[],n=0,r=e.length;while(n=55296&&i<=56319&&n>1,e+=_(e/t);while(e>v*s>>1)e=_(e/v),r+=o;return _(r+(v+1)*e/(e+c))},T=function(e){var t=[];e=C(e);var n,r,c=e.length,l=d,f=0,p=u;for(n=0;n=l&&r_((i-f)/x))throw new g(m);for(f+=(M-l)*x,l=M,n=0;ni)throw new g(m);if(r===l){var k=f,L=o;while(1){var T=L<=p?a:L>=p+s?s:L-p;if(k0;(c=s(c/2))&&(t+=t))c%2&&(n+=t);return n}},18866:function(e,t,n){"use strict";var r=n(43802).end,i=n(60706);e.exports=i("trimEnd")?function(){return r(this)}:"".trimEnd},60706:function(e,t,n){"use strict";var r=n(10350).PROPER,i=n(79039),o=n(47452),a="​…᠎";e.exports=function(e){return i(function(){return!!o[e]()||a[e]()!==a||r&&o[e].name!==e})}},53487:function(e,t,n){"use strict";var r=n(43802).start,i=n(60706);e.exports=i("trimStart")?function(){return r(this)}:"".trimStart},43802:function(e,t,n){"use strict";var r=n(79504),i=n(67750),o=n(655),a=n(47452),s=r("".replace),c=RegExp("^["+a+"]+"),l=RegExp("(^|[^"+a+"])["+a+"]+$"),u=function(e){return function(t){var n=o(i(t));return 1&e&&(n=s(n,c,"")),2&e&&(n=s(n,l,"$1")),n}};e.exports={start:u(1),end:u(2),trim:u(3)}},4495:function(e,t,n){"use strict";var r=n(39519),i=n(79039),o=n(22195),a=o.String;e.exports=!!Object.getOwnPropertySymbols&&!i(function(){var e=Symbol("symbol detection");return!a(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&r&&r<41})},58242:function(e,t,n){"use strict";var r=n(69565),i=n(97751),o=n(78227),a=n(36840);e.exports=function(){var e=i("Symbol"),t=e&&e.prototype,n=t&&t.valueOf,s=o("toPrimitive");t&&!t[s]&&a(t,s,function(e){return r(n,this)},{arity:1})}},91296:function(e,t,n){"use strict";var r=n(4495);e.exports=r&&!!Symbol["for"]&&!!Symbol.keyFor},59225:function(e,t,n){"use strict";var r,i,o,a,s=n(22195),c=n(18745),l=n(76080),u=n(94901),d=n(39297),h=n(79039),f=n(20397),p=n(67680),m=n(4055),v=n(22812),g=n(89544),y=n(16193),_=s.setImmediate,b=s.clearImmediate,M=s.process,A=s.Dispatch,w=s.Function,x=s.MessageChannel,k=s.String,L=0,C={},S="onreadystatechange";h(function(){r=s.location});var z=function(e){if(d(C,e)){var t=C[e];delete C[e],t()}},T=function(e){return function(){z(e)}},O=function(e){z(e.data)},H=function(e){s.postMessage(k(e),r.protocol+"//"+r.host)};_&&b||(_=function(e){v(arguments.length,1);var t=u(e)?e:w(e),n=p(arguments,1);return C[++L]=function(){c(t,void 0,n)},i(L),L},b=function(e){delete C[e]},y?i=function(e){M.nextTick(T(e))}:A&&A.now?i=function(e){A.now(T(e))}:x&&!g?(o=new x,a=o.port2,o.port1.onmessage=O,i=l(a.postMessage,a)):s.addEventListener&&u(s.postMessage)&&!s.importScripts&&r&&"file:"!==r.protocol&&!h(H)?(i=H,s.addEventListener("message",O,!1)):i=S in m("script")?function(e){f.appendChild(m("script"))[S]=function(){f.removeChild(this),z(e)}}:function(e){setTimeout(T(e),0)}),e.exports={set:_,clear:b}},31240:function(e,t,n){"use strict";var r=n(79504);e.exports=r(1.1.valueOf)},35610:function(e,t,n){"use strict";var r=n(91291),i=Math.max,o=Math.min;e.exports=function(e,t){var n=r(e);return n<0?i(n+t,0):o(n,t)}},75854:function(e,t,n){"use strict";var r=n(72777),i=TypeError;e.exports=function(e){var t=r(e,"number");if("number"==typeof t)throw new i("Can't convert number to bigint");return BigInt(t)}},57696:function(e,t,n){"use strict";var r=n(91291),i=n(18014),o=RangeError;e.exports=function(e){if(void 0===e)return 0;var t=r(e),n=i(t);if(t!==n)throw new o("Wrong length or index");return n}},25397:function(e,t,n){"use strict";var r=n(47055),i=n(67750);e.exports=function(e){return r(i(e))}},91291:function(e,t,n){"use strict";var r=n(80741);e.exports=function(e){var t=+e;return t!==t||0===t?0:r(t)}},18014:function(e,t,n){"use strict";var r=n(91291),i=Math.min;e.exports=function(e){var t=r(e);return t>0?i(t,9007199254740991):0}},48981:function(e,t,n){"use strict";var r=n(67750),i=Object;e.exports=function(e){return i(r(e))}},58229:function(e,t,n){"use strict";var r=n(99590),i=RangeError;e.exports=function(e,t){var n=r(e);if(n%t)throw new i("Wrong offset");return n}},99590:function(e,t,n){"use strict";var r=n(91291),i=RangeError;e.exports=function(e){var t=r(e);if(t<0)throw new i("The argument can't be less than 0");return t}},72777:function(e,t,n){"use strict";var r=n(69565),i=n(20034),o=n(10757),a=n(55966),s=n(84270),c=n(78227),l=TypeError,u=c("toPrimitive");e.exports=function(e,t){if(!i(e)||o(e))return e;var n,c=a(e,u);if(c){if(void 0===t&&(t="default"),n=r(c,e,t),!i(n)||o(n))return n;throw new l("Can't convert object to primitive value")}return void 0===t&&(t="number"),s(e,t)}},56969:function(e,t,n){"use strict";var r=n(72777),i=n(10757);e.exports=function(e){var t=r(e,"string");return i(t)?t:t+""}},92140:function(e,t,n){"use strict";var r=n(78227),i=r("toStringTag"),o={};o[i]="z",e.exports="[object z]"===String(o)},655:function(e,t,n){"use strict";var r=n(36955),i=String;e.exports=function(e){if("Symbol"===r(e))throw new TypeError("Cannot convert a Symbol value to a string");return i(e)}},58319:function(e){"use strict";var t=Math.floor;e.exports=function(e){var n=+e;if(n!==n||n<=0)return 0;if(n>=255)return 255;var r=t(n);return r+.5=0},ee=function(e,t){return t=g(t),Q(e,t)?d(2,e[t]):F(e,t)},te=function(e,t,n){return t=g(t),!(Q(e,t)&&b(n)&&y(n,"value"))||y(n,"get")||y(n,"set")||n.configurable||y(n,"writable")&&!n.writable||y(n,"enumerable")&&!n.enumerable?j(e,t,n):(e[t]=n.value,e)};a?(W||(O.f=ee,T.f=te,X(U,"buffer"),X(U,"byteOffset"),X(U,"byteLength"),X(U,"length")),r({target:"Object",stat:!0,forced:!W},{getOwnPropertyDescriptor:ee,defineProperty:te}),e.exports=function(e,t,n){var a=e.match(/\d+/)[0]/8,c=e+(n?"Clamped":"")+"Array",l="get"+e,d="set"+e,f=i[c],g=f,y=g&&g.prototype,_={},M=function(e,t){var n=V(e);return n.view[l](t*a+n.byteOffset,!0)},w=function(e,t,r){var i=V(e);i.view[d](t*a+i.byteOffset,n?v(r):r,!0)},z=function(e,t){j(e,t,{get:function(){return M(this,t)},set:function(e){return w(this,t,e)},enumerable:!0})};W?s&&(g=t(function(e,t,n,r){return u(e,y),Y(function(){return b(t)?Z(t)?void 0!==r?new f(t,m(n,a),r):void 0!==n?new f(t,m(n,a)):new f(t):q(t)?H(g,t):o(L,g,t):new f(p(t))}(),e,g)}),x&&x(g,K),C(k(f),function(e){e in g||h(g,e,f[e])}),g.prototype=y):(g=t(function(e,t,n,r){u(e,y);var i,s,c,l=0,d=0;if(b(t)){if(!Z(t))return q(t)?H(g,t):o(L,g,t);i=t,d=m(n,a);var h=t.byteLength;if(void 0===r){if(h%a)throw new I(J);if(s=h-d,s<0)throw new I(J)}else if(s=p(r)*a,s+d>h)throw new I(J);c=s/a}else c=p(t),s=c*a,i=new $(s);P(e,{buffer:i,byteOffset:d,byteLength:s,length:c,view:new N(i)});while(l1?arguments[1]:void 0,v=void 0!==m;v&&o(m);var g,y,_,b,M,A,w,x,k=s(e),L=u(k);if(L&&!d(L)){w=l(k,L),x=w.next,k=[];while(!(A=i(x,w)).done)k.push(A.value)}for(v&&n>2&&(m=r(m,arguments[2])),y=c(k),_=new(f(t))(y),b=h(_),g=0;y>g;g++)M=v?m(k[g],g):k[g],_[g]=b?p(M):+M;return _}},33392:function(e,t,n){"use strict";var r=n(79504),i=0,o=Math.random(),a=r(1.1.toString);e.exports=function(e){return"Symbol("+(void 0===e?"":e)+")_"+a(++i+o,36)}},67416:function(e,t,n){"use strict";var r=n(79039),i=n(78227),o=n(43724),a=n(96395),s=i("iterator");e.exports=!r(function(){var e=new URL("b?a=1&b=2&c=3","https://a"),t=e.searchParams,n=new URLSearchParams("a=1&a=2&b=3"),r="";return e.pathname="c%20d",t.forEach(function(e,n){t["delete"]("b"),r+=n+e}),n["delete"]("a",2),n["delete"]("b",void 0),a&&(!e.toJSON||!n.has("a",1)||n.has("a",2)||!n.has("a",void 0)||n.has("b"))||!t.size&&(a||!o)||!t.sort||"https://a/c%20d?a=1&c=3"!==e.href||"3"!==t.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!t[s]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("https://тест").host||"#%D0%B1"!==new URL("https://a#б").hash||"a1c3"!==r||"x"!==new URL("https://x",void 0).host})},7040:function(e,t,n){"use strict";var r=n(4495);e.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},48686:function(e,t,n){"use strict";var r=n(43724),i=n(79039);e.exports=r&&i(function(){return 42!==Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype})},22812:function(e){"use strict";var t=TypeError;e.exports=function(e,n){if(e=51||!i(function(){var e=[];return e[v]=!1,e.concat()[0]!==e}),y=function(e){if(!a(e))return!1;var t=e[v];return void 0!==t?!!t:o(e)},_=!g||!f("concat");r({target:"Array",proto:!0,arity:1,forced:_},{concat:function(e){var t,n,r,i,o,a=s(this),f=h(a,0),p=0;for(t=-1,r=arguments.length;t1?arguments[1]:void 0)}})},48980:function(e,t,n){"use strict";var r=n(46518),i=n(59213).findIndex,o=n(6469),a="findIndex",s=!0;a in[]&&Array(1)[a](function(){s=!1}),r({target:"Array",proto:!0,forced:s},{findIndex:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}}),o(a)},50113:function(e,t,n){"use strict";var r=n(46518),i=n(59213).find,o=n(6469),a="find",s=!0;a in[]&&Array(1)[a](function(){s=!1}),r({target:"Array",proto:!0,forced:s},{find:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}}),o(a)},78350:function(e,t,n){"use strict";var r=n(46518),i=n(70259),o=n(79306),a=n(48981),s=n(26198),c=n(1469);r({target:"Array",proto:!0},{flatMap:function(e){var t,n=a(this),r=s(n);return o(e),t=c(n,0),i(t,n,n,r,0,1,e,arguments.length>1?arguments[1]:void 0),t}})},46449:function(e,t,n){"use strict";var r=n(46518),i=n(70259),o=n(48981),a=n(26198),s=n(91291),c=n(1469);r({target:"Array",proto:!0},{flat:function(){var e=arguments.length?arguments[0]:void 0,t=o(this),n=a(t),r=void 0===e?1:s(e),l=c(t,0);return i(l,t,t,n,0,r),l}})},23418:function(e,t,n){"use strict";var r=n(46518),i=n(97916),o=n(84428),a=!o(function(e){Array.from(e)});r({target:"Array",stat:!0,forced:a},{from:i})},74423:function(e,t,n){"use strict";var r=n(46518),i=n(19617).includes,o=n(79039),a=n(6469),s=o(function(){return!Array(1).includes()}),c=o(function(){return[,1].includes(void 0,1)});r({target:"Array",proto:!0,forced:s||c},{includes:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}}),a("includes")},23792:function(e,t,n){"use strict";var r=n(25397),i=n(6469),o=n(26269),a=n(91181),s=n(24913).f,c=n(51088),l=n(62529),u=n(96395),d=n(43724),h="Array Iterator",f=a.set,p=a.getterFor(h);e.exports=c(Array,"Array",function(e,t){f(this,{type:h,target:r(e),index:0,kind:t})},function(){var e=p(this),t=e.target,n=e.index++;if(!t||n>=t.length)return e.target=null,l(void 0,!0);switch(e.kind){case"keys":return l(n,!1);case"values":return l(t[n],!1)}return l([n,t[n]],!1)},"values");var m=o.Arguments=o.Array;if(i("keys"),i("values"),i("entries"),!u&&d&&"values"!==m.name)try{s(m,"name",{value:"values"})}catch(v){}},48598:function(e,t,n){"use strict";var r=n(46518),i=n(79504),o=n(47055),a=n(25397),s=n(34598),c=i([].join),l=o!==Object,u=l||!s("join",",");r({target:"Array",proto:!0,forced:u},{join:function(e){return c(a(this),void 0===e?",":e)}})},62062:function(e,t,n){"use strict";var r=n(46518),i=n(59213).map,o=n(70597),a=o("map");r({target:"Array",proto:!0,forced:!a},{map:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}})},31051:function(e,t,n){"use strict";var r=n(46518),i=n(79039),o=n(33517),a=n(97040),s=n(34527),c=Array,l=i(function(){function e(){}return!(c.of.call(e)instanceof e)});r({target:"Array",stat:!0,forced:l},{of:function(){var e=0,t=arguments.length,n=new(o(this)?this:c)(t);while(t>e)a(n,e,arguments[e++]);return s(n,t),n}})},34782:function(e,t,n){"use strict";var r=n(46518),i=n(34376),o=n(33517),a=n(20034),s=n(35610),c=n(26198),l=n(25397),u=n(97040),d=n(34527),h=n(78227),f=n(70597),p=n(67680),m=f("slice"),v=h("species"),g=Array,y=Math.max;r({target:"Array",proto:!0,forced:!m},{slice:function(e,t){var n,r,h,f=l(this),m=c(f),_=s(e,m),b=s(void 0===t?m:t,m);if(i(f)&&(n=f.constructor,o(n)&&(n===g||i(n.prototype))?n=void 0:a(n)&&(n=n[v],null===n&&(n=void 0)),n===g||void 0===n))return p(f,_,b);for(r=new(void 0===n?g:n)(y(b-_,0)),h=0;_3)){if(p)return!0;if(v)return v<603;var e,t,n,r,i="";for(e=65;e<76;e++){switch(t=String.fromCharCode(e),e){case 66:case 69:case 70:case 72:n=3;break;case 68:case 71:n=4;break;default:n=2}for(r=0;r<47;r++)g.push({k:t+r,v:n})}for(g.sort(function(e,t){return t.v-e.v}),r=0;ri?1:-1}};r({target:"Array",proto:!0,forced:x},{sort:function(e){void 0!==e&&o(e);var t=a(this);if(w)return void 0===e?y(t):y(t,e);var n,r,i=[],l=s(t);for(r=0;rb-r+n;p--)h(_,p-1)}else if(n>r)for(p=b-r;p>M;p--)g=p+r-1,y=p+n-1,g in _?_[y]=_[g]:h(_,y);for(p=0;p94906265.62425156?a(t)+c:i(t-1+s(t-1)*s(t+1))}})},82326:function(e,t,n){"use strict";var r=n(46518),i=Math.asinh,o=Math.log,a=Math.sqrt,s=Math.LN2,c=94906265.62425156;function l(e){var t=+e;return isFinite(t)&&0!==t?t<0?-l(-t):t>c?o(t)+s:o(t+a(t*t+1)):t}var u=!(i&&1/i(0)>0);r({target:"Math",stat:!0,forced:u},{asinh:l})},36389:function(e,t,n){"use strict";var r=n(46518),i=n(7740),o=Math.atanh,a=!(o&&1/o(-0)<0);r({target:"Math",stat:!0,forced:a},{atanh:function(e){var t=+e;return 0===t?t:i(2*t/(1-t))/2}})},64444:function(e,t,n){"use strict";var r=n(46518),i=n(77782),o=Math.abs,a=Math.pow;r({target:"Math",stat:!0},{cbrt:function(e){var t=+e;return i(t)*a(o(t),1/3)}})},8085:function(e,t,n){"use strict";var r=n(46518),i=Math.floor,o=Math.log,a=Math.LOG2E;r({target:"Math",stat:!0},{clz32:function(e){var t=e>>>0;return t?31-i(o(t+.5)*a):32}})},77762:function(e,t,n){"use strict";var r=n(46518),i=n(53250),o=Math.cosh,a=Math.abs,s=Math.E,c=!o||o(710)===1/0;r({target:"Math",stat:!0,forced:c},{cosh:function(e){var t=i(a(e)-1)+1;return(t+1/(t*s*s))*(s/2)}})},65070:function(e,t,n){"use strict";var r=n(46518),i=n(53250);r({target:"Math",stat:!0,forced:i!==Math.expm1},{expm1:i})},60605:function(e,t,n){"use strict";var r=n(46518),i=n(15617);r({target:"Math",stat:!0},{fround:i})},39469:function(e,t,n){"use strict";var r=n(46518),i=Math.hypot,o=Math.abs,a=Math.sqrt,s=!!i&&i(1/0,NaN)!==1/0;r({target:"Math",stat:!0,arity:2,forced:s},{hypot:function(e,t){var n,r,i=0,s=0,c=arguments.length,l=0;while(s0?(r=n/l,i+=r*r):i+=n;return l===1/0?1/0:l*a(i)}})},72152:function(e,t,n){"use strict";var r=n(46518),i=n(79039),o=Math.imul,a=i(function(){return-5!==o(4294967295,5)||2!==o.length});r({target:"Math",stat:!0,forced:a},{imul:function(e,t){var n=65535,r=+e,i=+t,o=n&r,a=n&i;return 0|o*a+((n&r>>>16)*a+o*(n&i>>>16)<<16>>>0)}})},75376:function(e,t,n){"use strict";var r=n(46518),i=n(49340);r({target:"Math",stat:!0},{log10:i})},56624:function(e,t,n){"use strict";var r=n(46518),i=n(7740);r({target:"Math",stat:!0},{log1p:i})},11367:function(e,t,n){"use strict";var r=n(46518),i=n(67787);r({target:"Math",stat:!0},{log2:i})},5914:function(e,t,n){"use strict";var r=n(46518),i=n(77782);r({target:"Math",stat:!0},{sign:i})},78553:function(e,t,n){"use strict";var r=n(46518),i=n(79039),o=n(53250),a=Math.abs,s=Math.exp,c=Math.E,l=i(function(){return-2e-17!==Math.sinh(-2e-17)});r({target:"Math",stat:!0,forced:l},{sinh:function(e){var t=+e;return a(t)<1?(o(t)-o(-t))/2:(s(t-1)-s(-t-1))*(c/2)}})},98690:function(e,t,n){"use strict";var r=n(46518),i=n(53250),o=Math.exp;r({target:"Math",stat:!0},{tanh:function(e){var t=+e,n=i(t),r=i(-t);return n===1/0?1:r===1/0?-1:(n-r)/(o(t)+o(-t))}})},60479:function(e,t,n){"use strict";var r=n(10687);r(Math,"Math",!0)},70761:function(e,t,n){"use strict";var r=n(46518),i=n(80741);r({target:"Math",stat:!0},{trunc:i})},2892:function(e,t,n){"use strict";var r=n(46518),i=n(96395),o=n(43724),a=n(22195),s=n(19167),c=n(79504),l=n(92796),u=n(39297),d=n(23167),h=n(1625),f=n(10757),p=n(72777),m=n(79039),v=n(38480).f,g=n(77347).f,y=n(24913).f,_=n(31240),b=n(43802).trim,M="Number",A=a[M],w=s[M],x=A.prototype,k=a.TypeError,L=c("".slice),C=c("".charCodeAt),S=function(e){var t=p(e,"number");return"bigint"==typeof t?t:z(t)},z=function(e){var t,n,r,i,o,a,s,c,l=p(e,"number");if(f(l))throw new k("Cannot convert a Symbol value to a number");if("string"==typeof l&&l.length>2)if(l=b(l),t=C(l,0),43===t||45===t){if(n=C(l,2),88===n||120===n)return NaN}else if(48===t){switch(C(l,1)){case 66:case 98:r=2,i=49;break;case 79:case 111:r=8,i=55;break;default:return+l}for(o=L(l,2),a=o.length,s=0;si)return NaN;return parseInt(o,r)}return+l},T=l(M,!A(" 0o1")||!A("0b1")||A("+0x1")),O=function(e){return h(x,e)&&m(function(){_(e)})},H=function(e){var t=arguments.length<1?0:A(S(e));return O(this)?d(Object(t),this,H):t};H.prototype=x,T&&!i&&(x.constructor=H),r({global:!0,constructor:!0,wrap:!0,forced:T},{Number:H});var D=function(e,t){for(var n,r=o?v(t):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,fromString,range".split(","),i=0;r.length>i;i++)u(t,n=r[i])&&!u(e,n)&&y(e,n,g(t,n))};i&&w&&D(s[M],w),(T||i)&&D(s[M],A)},45374:function(e,t,n){"use strict";var r=n(46518);r({target:"Number",stat:!0,nonConfigurable:!0,nonWritable:!0},{EPSILON:Math.pow(2,-52)})},25428:function(e,t,n){"use strict";var r=n(46518),i=n(50360);r({target:"Number",stat:!0},{isFinite:i})},32637:function(e,t,n){"use strict";var r=n(46518),i=n(2087);r({target:"Number",stat:!0},{isInteger:i})},40150:function(e,t,n){"use strict";var r=n(46518);r({target:"Number",stat:!0},{isNaN:function(e){return e!==e}})},59149:function(e,t,n){"use strict";var r=n(46518),i=n(2087),o=Math.abs;r({target:"Number",stat:!0},{isSafeInteger:function(e){return i(e)&&o(e)<=9007199254740991}})},64601:function(e,t,n){"use strict";var r=n(46518);r({target:"Number",stat:!0,nonConfigurable:!0,nonWritable:!0},{MAX_SAFE_INTEGER:9007199254740991})},44435:function(e,t,n){"use strict";var r=n(46518);r({target:"Number",stat:!0,nonConfigurable:!0,nonWritable:!0},{MIN_SAFE_INTEGER:-9007199254740991})},87220:function(e,t,n){"use strict";var r=n(46518),i=n(33904);r({target:"Number",stat:!0,forced:Number.parseFloat!==i},{parseFloat:i})},25843:function(e,t,n){"use strict";var r=n(46518),i=n(52703);r({target:"Number",stat:!0,forced:Number.parseInt!==i},{parseInt:i})},9868:function(e,t,n){"use strict";var r=n(46518),i=n(79504),o=n(91291),a=n(31240),s=n(72333),c=n(79039),l=RangeError,u=String,d=Math.floor,h=i(s),f=i("".slice),p=i(1.1.toFixed),m=function(e,t,n){return 0===t?n:t%2===1?m(e,t-1,n*e):m(e*e,t/2,n)},v=function(e){var t=0,n=e;while(n>=4096)t+=12,n/=4096;while(n>=2)t+=1,n/=2;return t},g=function(e,t,n){var r=-1,i=n;while(++r<6)i+=t*e[r],e[r]=i%1e7,i=d(i/1e7)},y=function(e,t){var n=6,r=0;while(--n>=0)r+=e[n],e[n]=d(r/t),r=r%t*1e7},_=function(e){var t=6,n="";while(--t>=0)if(""!==n||0===t||0!==e[t]){var r=u(e[t]);n=""===n?r:n+h("0",7-r.length)+r}return n},b=c(function(){return"0.000"!==p(8e-5,3)||"1"!==p(.9,0)||"1.25"!==p(1.255,2)||"1000000000000000128"!==p(0xde0b6b3a7640080,0)})||!c(function(){p({})});r({target:"Number",proto:!0,forced:b},{toFixed:function(e){var t,n,r,i,s=a(this),c=o(e),d=[0,0,0,0,0,0],p="",b="0";if(c<0||c>20)throw new l("Incorrect fraction digits");if(s!==s)return"NaN";if(s<=-1e21||s>=1e21)return u(s);if(s<0&&(p="-",s=-s),s>1e-21)if(t=v(s*m(2,69,1))-69,n=t<0?s*m(2,-t,1):s/m(2,t,1),n*=4503599627370496,t=52-t,t>0){g(d,0,n),r=c;while(r>=7)g(d,1e7,0),r-=7;g(d,m(10,r,1),0),r=t-1;while(r>=23)y(d,1<<23),r-=23;y(d,1<0?(i=b.length,b=p+(i<=c?"0."+h("0",c-i)+b:f(b,0,i-c)+"."+f(b,i-c))):b=p+b,b}})},69085:function(e,t,n){"use strict";var r=n(46518),i=n(44213);r({target:"Object",stat:!0,arity:2,forced:Object.assign!==i},{assign:i})},17427:function(e,t,n){"use strict";var r=n(46518),i=n(43724),o=n(42551),a=n(79306),s=n(48981),c=n(24913);i&&r({target:"Object",proto:!0,forced:o},{__defineGetter__:function(e,t){c.f(s(this),e,{get:a(t),enumerable:!0,configurable:!0})}})},87607:function(e,t,n){"use strict";var r=n(46518),i=n(43724),o=n(42551),a=n(79306),s=n(48981),c=n(24913);i&&r({target:"Object",proto:!0,forced:o},{__defineSetter__:function(e,t){c.f(s(this),e,{set:a(t),enumerable:!0,configurable:!0})}})},5506:function(e,t,n){"use strict";var r=n(46518),i=n(32357).entries;r({target:"Object",stat:!0},{entries:function(e){return i(e)}})},52811:function(e,t,n){"use strict";var r=n(46518),i=n(92744),o=n(79039),a=n(20034),s=n(3451).onFreeze,c=Object.freeze,l=o(function(){c(1)});r({target:"Object",stat:!0,forced:l,sham:!i},{freeze:function(e){return c&&a(e)?c(s(e)):e}})},53921:function(e,t,n){"use strict";var r=n(46518),i=n(72652),o=n(97040);r({target:"Object",stat:!0},{fromEntries:function(e){var t={};return i(e,function(e,n){o(t,e,n)},{AS_ENTRIES:!0}),t}})},83851:function(e,t,n){"use strict";var r=n(46518),i=n(79039),o=n(25397),a=n(77347).f,s=n(43724),c=!s||i(function(){a(1)});r({target:"Object",stat:!0,forced:c,sham:!s},{getOwnPropertyDescriptor:function(e,t){return a(o(e),t)}})},81278:function(e,t,n){"use strict";var r=n(46518),i=n(43724),o=n(35031),a=n(25397),s=n(77347),c=n(97040);r({target:"Object",stat:!0,sham:!i},{getOwnPropertyDescriptors:function(e){var t,n,r=a(e),i=s.f,l=o(r),u={},d=0;while(l.length>d)n=i(r,t=l[d++]),void 0!==n&&c(u,t,n);return u}})},1480:function(e,t,n){"use strict";var r=n(46518),i=n(79039),o=n(10298).f,a=i(function(){return!Object.getOwnPropertyNames(1)});r({target:"Object",stat:!0,forced:a},{getOwnPropertyNames:o})},49773:function(e,t,n){"use strict";var r=n(46518),i=n(4495),o=n(79039),a=n(33717),s=n(48981),c=!i||o(function(){a.f(1)});r({target:"Object",stat:!0,forced:c},{getOwnPropertySymbols:function(e){var t=a.f;return t?t(s(e)):[]}})},40875:function(e,t,n){"use strict";var r=n(46518),i=n(79039),o=n(48981),a=n(42787),s=n(12211),c=i(function(){a(1)});r({target:"Object",stat:!0,forced:c,sham:!s},{getPrototypeOf:function(e){return a(o(e))}})},94052:function(e,t,n){"use strict";var r=n(46518),i=n(34124);r({target:"Object",stat:!0,forced:Object.isExtensible!==i},{isExtensible:i})},94003:function(e,t,n){"use strict";var r=n(46518),i=n(79039),o=n(20034),a=n(44576),s=n(15652),c=Object.isFrozen,l=s||i(function(){c(1)});r({target:"Object",stat:!0,forced:l},{isFrozen:function(e){return!o(e)||(!(!s||"ArrayBuffer"!==a(e))||!!c&&c(e))}})},221:function(e,t,n){"use strict";var r=n(46518),i=n(79039),o=n(20034),a=n(44576),s=n(15652),c=Object.isSealed,l=s||i(function(){c(1)});r({target:"Object",stat:!0,forced:l},{isSealed:function(e){return!o(e)||(!(!s||"ArrayBuffer"!==a(e))||!!c&&c(e))}})},29908:function(e,t,n){"use strict";var r=n(46518),i=n(3470);r({target:"Object",stat:!0},{is:i})},79432:function(e,t,n){"use strict";var r=n(46518),i=n(48981),o=n(71072),a=n(79039),s=a(function(){o(1)});r({target:"Object",stat:!0,forced:s},{keys:function(e){return o(i(e))}})},9220:function(e,t,n){"use strict";var r=n(46518),i=n(43724),o=n(42551),a=n(48981),s=n(56969),c=n(42787),l=n(77347).f;i&&r({target:"Object",proto:!0,forced:o},{__lookupGetter__:function(e){var t,n=a(this),r=s(e);do{if(t=l(n,r))return t.get}while(n=c(n))}})},7904:function(e,t,n){"use strict";var r=n(46518),i=n(43724),o=n(42551),a=n(48981),s=n(56969),c=n(42787),l=n(77347).f;i&&r({target:"Object",proto:!0,forced:o},{__lookupSetter__:function(e){var t,n=a(this),r=s(e);do{if(t=l(n,r))return t.set}while(n=c(n))}})},93967:function(e,t,n){"use strict";var r=n(46518),i=n(20034),o=n(3451).onFreeze,a=n(92744),s=n(79039),c=Object.preventExtensions,l=s(function(){c(1)});r({target:"Object",stat:!0,forced:l,sham:!a},{preventExtensions:function(e){return c&&i(e)?c(o(e)):e}})},93941:function(e,t,n){"use strict";var r=n(46518),i=n(20034),o=n(3451).onFreeze,a=n(92744),s=n(79039),c=Object.seal,l=s(function(){c(1)});r({target:"Object",stat:!0,forced:l,sham:!a},{seal:function(e){return c&&i(e)?c(o(e)):e}})},10287:function(e,t,n){"use strict";var r=n(46518),i=n(52967);r({target:"Object",stat:!0},{setPrototypeOf:i})},26099:function(e,t,n){"use strict";var r=n(92140),i=n(36840),o=n(53179);r||i(Object.prototype,"toString",o,{unsafe:!0})},16034:function(e,t,n){"use strict";var r=n(46518),i=n(32357).values;r({target:"Object",stat:!0},{values:function(e){return i(e)}})},16499:function(e,t,n){"use strict";var r=n(46518),i=n(69565),o=n(79306),a=n(36043),s=n(1103),c=n(72652),l=n(90537);r({target:"Promise",stat:!0,forced:l},{all:function(e){var t=this,n=a.f(t),r=n.resolve,l=n.reject,u=s(function(){var n=o(t.resolve),a=[],s=0,u=1;c(e,function(e){var o=s++,c=!1;u++,i(n,t,e).then(function(e){c||(c=!0,a[o]=e,--u||r(a))},l)}),--u||r(a)});return u.error&&l(u.value),n.promise}})},82003:function(e,t,n){"use strict";var r=n(46518),i=n(96395),o=n(10916).CONSTRUCTOR,a=n(80550),s=n(97751),c=n(94901),l=n(36840),u=a&&a.prototype;if(r({target:"Promise",proto:!0,forced:o,real:!0},{catch:function(e){return this.then(void 0,e)}}),!i&&c(a)){var d=s("Promise").prototype["catch"];u["catch"]!==d&&l(u,"catch",d,{unsafe:!0})}},10436:function(e,t,n){"use strict";var r,i,o,a,s=n(46518),c=n(96395),l=n(16193),u=n(22195),d=n(19167),h=n(69565),f=n(36840),p=n(52967),m=n(10687),v=n(87633),g=n(79306),y=n(94901),_=n(20034),b=n(90679),M=n(2293),A=n(59225).set,w=n(91955),x=n(90757),k=n(1103),L=n(18265),C=n(91181),S=n(80550),z=n(10916),T=n(36043),O="Promise",H=z.CONSTRUCTOR,D=z.REJECTION_EVENT,Y=z.SUBCLASSING,V=C.getterFor(O),P=C.set,E=S&&S.prototype,j=S,F=E,I=u.TypeError,$=u.document,R=u.process,N=T.f,W=N,B=!!($&&$.createEvent&&u.dispatchEvent),K="unhandledrejection",U="rejectionhandled",q=0,G=1,J=2,X=1,Z=2,Q=function(e){var t;return!(!_(e)||!y(t=e.then))&&t},ee=function(e,t){var n,r,i,o=t.value,a=t.state===G,s=a?e.ok:e.fail,c=e.resolve,l=e.reject,u=e.domain;try{s?(a||(t.rejection===Z&&oe(t),t.rejection=X),!0===s?n=o:(u&&u.enter(),n=s(o),u&&(u.exit(),i=!0)),n===e.promise?l(new I("Promise-chain cycle")):(r=Q(n))?h(r,n,c,l):c(n)):l(o)}catch(d){u&&!i&&u.exit(),l(d)}},te=function(e,t){e.notified||(e.notified=!0,w(function(){var n,r=e.reactions;while(n=r.get())ee(n,e);e.notified=!1,t&&!e.rejection&&re(e)}))},ne=function(e,t,n){var r,i;B?(r=$.createEvent("Event"),r.promise=t,r.reason=n,r.initEvent(e,!1,!0),u.dispatchEvent(r)):r={promise:t,reason:n},!D&&(i=u["on"+e])?i(r):e===K&&x("Unhandled promise rejection",n)},re=function(e){h(A,u,function(){var t,n=e.facade,r=e.value,i=ie(e);if(i&&(t=k(function(){l?R.emit("unhandledRejection",r,n):ne(K,n,r)}),e.rejection=l||ie(e)?Z:X,t.error))throw t.value})},ie=function(e){return e.rejection!==X&&!e.parent},oe=function(e){h(A,u,function(){var t=e.facade;l?R.emit("rejectionHandled",t):ne(U,t,e.value)})},ae=function(e,t,n){return function(r){e(t,r,n)}},se=function(e,t,n){e.done||(e.done=!0,n&&(e=n),e.value=t,e.state=J,te(e,!0))},ce=function(e,t,n){if(!e.done){e.done=!0,n&&(e=n);try{if(e.facade===t)throw new I("Promise can't be resolved itself");var r=Q(t);r?w(function(){var n={done:!1};try{h(r,t,ae(ce,n,e),ae(se,n,e))}catch(i){se(n,i,e)}}):(e.value=t,e.state=G,te(e,!1))}catch(i){se({done:!1},i,e)}}};if(H&&(j=function(e){b(this,F),g(e),h(r,this);var t=V(this);try{e(ae(ce,t),ae(se,t))}catch(n){se(t,n)}},F=j.prototype,r=function(e){P(this,{type:O,done:!1,notified:!1,parent:!1,reactions:new L,rejection:!1,state:q,value:null})},r.prototype=f(F,"then",function(e,t){var n=V(this),r=N(M(this,j));return n.parent=!0,r.ok=!y(e)||e,r.fail=y(t)&&t,r.domain=l?R.domain:void 0,n.state===q?n.reactions.add(r):w(function(){ee(r,n)}),r.promise}),i=function(){var e=new r,t=V(e);this.promise=e,this.resolve=ae(ce,t),this.reject=ae(se,t)},T.f=N=function(e){return e===j||e===o?new i(e):W(e)},!c&&y(S)&&E!==Object.prototype)){a=E.then,Y||f(E,"then",function(e,t){var n=this;return new j(function(e,t){h(a,n,e,t)}).then(e,t)},{unsafe:!0});try{delete E.constructor}catch(le){}p&&p(E,F)}s({global:!0,constructor:!0,wrap:!0,forced:H},{Promise:j}),o=d.Promise,m(j,O,!1,!0),v(O)},9391:function(e,t,n){"use strict";var r=n(46518),i=n(96395),o=n(80550),a=n(79039),s=n(97751),c=n(94901),l=n(2293),u=n(93438),d=n(36840),h=o&&o.prototype,f=!!o&&a(function(){h["finally"].call({then:function(){}},function(){})});if(r({target:"Promise",proto:!0,real:!0,forced:f},{finally:function(e){var t=l(this,s("Promise")),n=c(e);return this.then(n?function(n){return u(t,e()).then(function(){return n})}:e,n?function(n){return u(t,e()).then(function(){throw n})}:e)}}),!i&&c(o)){var p=s("Promise").prototype["finally"];h["finally"]!==p&&d(h,"finally",p,{unsafe:!0})}},3362:function(e,t,n){"use strict";n(10436),n(16499),n(82003),n(7743),n(51481),n(40280)},7743:function(e,t,n){"use strict";var r=n(46518),i=n(69565),o=n(79306),a=n(36043),s=n(1103),c=n(72652),l=n(90537);r({target:"Promise",stat:!0,forced:l},{race:function(e){var t=this,n=a.f(t),r=n.reject,l=s(function(){var a=o(t.resolve);c(e,function(e){i(a,t,e).then(n.resolve,r)})});return l.error&&r(l.value),n.promise}})},51481:function(e,t,n){"use strict";var r=n(46518),i=n(36043),o=n(10916).CONSTRUCTOR;r({target:"Promise",stat:!0,forced:o},{reject:function(e){var t=i.f(this),n=t.reject;return n(e),t.promise}})},40280:function(e,t,n){"use strict";var r=n(46518),i=n(97751),o=n(96395),a=n(80550),s=n(10916).CONSTRUCTOR,c=n(93438),l=i("Promise"),u=o&&!s;r({target:"Promise",stat:!0,forced:o||s},{resolve:function(e){return c(u&&this===l?a:this,e)}})},39796:function(e,t,n){"use strict";var r=n(46518),i=n(18745),o=n(79306),a=n(28551),s=n(79039),c=!s(function(){Reflect.apply(function(){})});r({target:"Reflect",stat:!0,forced:c},{apply:function(e,t,n){return i(o(e),t,a(n))}})},60825:function(e,t,n){"use strict";var r=n(46518),i=n(97751),o=n(18745),a=n(30566),s=n(35548),c=n(28551),l=n(20034),u=n(2360),d=n(79039),h=i("Reflect","construct"),f=Object.prototype,p=[].push,m=d(function(){function e(){}return!(h(function(){},[],e)instanceof e)}),v=!d(function(){h(function(){})}),g=m||v;r({target:"Reflect",stat:!0,forced:g,sham:g},{construct:function(e,t){s(e);var n=arguments.length<3?e:s(arguments[2]);if(c(t),v&&!m)return h(e,t,n);if(e===n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var r=[null];return o(p,r,t),new(o(a,e,r))}var i=n.prototype,d=u(l(i)?i:f),g=o(e,d,t);return l(g)?g:d}})},87411:function(e,t,n){"use strict";var r=n(46518),i=n(43724),o=n(28551),a=n(56969),s=n(24913),c=n(94901),l=n(79039),u=TypeError,d=l(function(){Reflect.defineProperty(s.f({},1,{value:1}),1,{value:2})});r({target:"Reflect",stat:!0,forced:d,sham:!i},{defineProperty:function(e,t,n){o(e);var r,i,l=a(t);if(o(n),("get"in n||"set"in n)&&("get"in n&&!c(r=n.get)&&void 0!==r||"set"in n&&!c(i=n.set)&&void 0!==i||"value"in n||"writable"in n))throw new u("Invalid property descriptor");try{return s.f(e,l,n),!0}catch(d){return!1}}})},21211:function(e,t,n){"use strict";var r=n(46518),i=n(28551),o=n(77347).f,a=n(56969);r({target:"Reflect",stat:!0},{deleteProperty:function(e,t){i(e);var n=a(t),r=o(e,n);return!(r&&!r.configurable)&&delete e[n]}})},9065:function(e,t,n){"use strict";var r=n(46518),i=n(43724),o=n(28551),a=n(77347);r({target:"Reflect",stat:!0,sham:!i},{getOwnPropertyDescriptor:function(e,t){return a.f(o(e),t)}})},86565:function(e,t,n){"use strict";var r=n(46518),i=n(28551),o=n(42787),a=n(12211);r({target:"Reflect",stat:!0,sham:!a},{getPrototypeOf:function(e){return o(i(e))}})},40888:function(e,t,n){"use strict";var r=n(46518),i=n(69565),o=n(20034),a=n(28551),s=n(16575),c=n(77347),l=n(42787),u=n(56969),d=function(e,t,n){if(a(e)===n)return e[t];var r=c.f(e,t);if(r)return s(r)?r.value:void 0===r.get?void 0:i(r.get,n);var u=l(e);return o(u)?d(u,t,n):void 0};r({target:"Reflect",stat:!0},{get:function(e,t){return d(a(e),u(t),arguments.length<3?e:arguments[2])}})},32812:function(e,t,n){"use strict";var r=n(46518);r({target:"Reflect",stat:!0},{has:function(e,t){return t in e}})},84634:function(e,t,n){"use strict";var r=n(46518),i=n(28551),o=n(34124);r({target:"Reflect",stat:!0},{isExtensible:function(e){return i(e),o(e)}})},71137:function(e,t,n){"use strict";var r=n(46518),i=n(35031);r({target:"Reflect",stat:!0},{ownKeys:i})},30985:function(e,t,n){"use strict";var r=n(46518),i=n(97751),o=n(28551),a=n(92744);r({target:"Reflect",stat:!0,sham:!a},{preventExtensions:function(e){o(e);try{var t=i("Object","preventExtensions");return t&&t(e),!0}catch(n){return!1}}})},34873:function(e,t,n){"use strict";var r=n(46518),i=n(28551),o=n(73506),a=n(52967);a&&r({target:"Reflect",stat:!0},{setPrototypeOf:function(e,t){i(e),o(t);try{return a(e,t),!0}catch(n){return!1}}})},34268:function(e,t,n){"use strict";var r=n(46518),i=n(69565),o=n(28551),a=n(20034),s=n(16575),c=n(79039),l=n(24913),u=n(77347),d=n(42787),h=n(6980),f=n(56969),p=function(e,t,n,r){var c,f,m,v=u.f(o(e),t);if(!v){if(a(f=d(e)))return p(f,t,n,r);v=h(0)}if(s(v)){if(!1===v.writable||!a(r))return!1;if(c=u.f(r,t)){if(!s(c)||!1===c.writable)return!1;l.f(r,t,{value:n})}else try{l.f(r,t,h(0,n))}catch(g){return!1}}else{if(m=v.set,void 0===m)return!1;i(m,r,n)}return!0},m=c(function(){var e=function(){},t=l.f(new e,"a",{configurable:!0});return!1!==Reflect.set(e.prototype,"a",1,t)});r({target:"Reflect",stat:!0,forced:m},{set:function(e,t,n){return p(o(e),f(t),n,arguments.length<4?e:arguments[3])}})},84864:function(e,t,n){"use strict";var r=n(43724),i=n(22195),o=n(79504),a=n(92796),s=n(23167),c=n(66699),l=n(2360),u=n(38480).f,d=n(1625),h=n(60788),f=n(655),p=n(61034),m=n(58429),v=n(11056),g=n(36840),y=n(79039),_=n(39297),b=n(91181).enforce,M=n(87633),A=n(78227),w=n(83635),x=n(18814),k=A("match"),L=i.RegExp,C=L.prototype,S=i.SyntaxError,z=o(C.exec),T=o("".charAt),O=o("".replace),H=o("".indexOf),D=o("".slice),Y=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,V=/a/g,P=/a/g,E=new L(V)!==V,j=m.MISSED_STICKY,F=m.UNSUPPORTED_Y,I=r&&(!E||j||w||x||y(function(){return P[k]=!1,L(V)!==V||L(P)===P||"/a/i"!==String(L(V,"i"))})),$=function(e){for(var t,n=e.length,r=0,i="",o=!1;r"===t&&c:if(""===d||_(a,d))throw new S("Invalid capture group name");a[d]=!0,o[o.length]=[d,u],c=!1,d="";continue}c?d+=t:i+=t}for(var h=0;h",p="\\"+o[h][1];while(H(i,f)>-1)i=O(i,f,p)}return[i,o]};if(a("RegExp",I)){for(var N=function(e,t){var n,r,i,o,a,l,u=d(C,this),m=h(e),v=void 0===t,g=[],y=e;if(!u&&m&&v&&e.constructor===N)return e;if((m||d(C,e))&&(e=e.source,v&&(t=p(y))),e=void 0===e?"":f(e),t=void 0===t?"":f(t),y=e,w&&"dotAll"in V&&(r=!!t&&H(t,"s")>-1,r&&(t=O(t,/s/g,""))),n=t,j&&"sticky"in V&&(i=!!t&&H(t,"y")>-1,i&&F&&(t=O(t,/y/g,""))),x&&(o=R(e),e=o[0],g=o[1]),a=s(L(e,t),u?this:C,N),(r||i||g.length)&&(l=b(a),r&&(l.dotAll=!0,l.raw=N($(e),n)),i&&(l.sticky=!0),g.length&&(l.groups=g)),e!==y)try{c(a,"source",""===y?"(?:)":y)}catch(_){}return a},W=u(L),B=0;W.length>B;)v(N,L,W[B++]);C.constructor=N,N.prototype=C,g(i,"RegExp",N,{constructor:!0})}M("RegExp")},27495:function(e,t,n){"use strict";var r=n(46518),i=n(57323);r({target:"RegExp",proto:!0,forced:/./.exec!==i},{exec:i})},69479:function(e,t,n){"use strict";var r=n(43724),i=n(62106),o=n(65213),a=n(67979);r&&!o.correct&&(i(RegExp.prototype,"flags",{configurable:!0,get:a}),o.correct=!0)},38781:function(e,t,n){"use strict";var r=n(10350).PROPER,i=n(36840),o=n(28551),a=n(655),s=n(79039),c=n(61034),l="toString",u=RegExp.prototype,d=u[l],h=s(function(){return"/a/b"!==d.call({source:"a",flags:"b"})}),f=r&&d.name!==l;(h||f)&&i(u,l,function(){var e=o(this),t=a(e.source),n=a(c(e));return"/"+t+"/"+n},{unsafe:!0})},92405:function(e,t,n){"use strict";var r=n(16468),i=n(86938);r("Set",function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}},i)},31415:function(e,t,n){"use strict";n(92405)},89907:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("anchor")},{anchor:function(e){return i(this,"a","name",e)}})},11898:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("big")},{big:function(){return i(this,"big","","")}})},35490:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("blink")},{blink:function(){return i(this,"blink","","")}})},5745:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("bold")},{bold:function(){return i(this,"b","","")}})},23860:function(e,t,n){"use strict";var r=n(46518),i=n(68183).codeAt;r({target:"String",proto:!0},{codePointAt:function(e){return i(this,e)}})},99449:function(e,t,n){"use strict";var r=n(46518),i=n(27476),o=n(77347).f,a=n(18014),s=n(655),c=n(60511),l=n(67750),u=n(41436),d=n(96395),h=i("".slice),f=Math.min,p=u("endsWith"),m=!d&&!p&&!!function(){var e=o(String.prototype,"endsWith");return e&&!e.writable}();r({target:"String",proto:!0,forced:!m&&!p},{endsWith:function(e){var t=s(l(this));c(e);var n=s(e),r=arguments.length>1?arguments[1]:void 0,i=t.length,o=void 0===r?i:f(a(r),i);return h(t,o-n.length,o)===n}})},94298:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("fixed")},{fixed:function(){return i(this,"tt","","")}})},60268:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("fontcolor")},{fontcolor:function(e){return i(this,"font","color",e)}})},69546:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("fontsize")},{fontsize:function(e){return i(this,"font","size",e)}})},27337:function(e,t,n){"use strict";var r=n(46518),i=n(79504),o=n(35610),a=RangeError,s=String.fromCharCode,c=String.fromCodePoint,l=i([].join),u=!!c&&1!==c.length;r({target:"String",stat:!0,arity:1,forced:u},{fromCodePoint:function(e){var t,n=[],r=arguments.length,i=0;while(r>i){if(t=+arguments[i],o(t,1114111)!==t)throw new a(t+" is not a valid code point");n[i++]=t<65536?s(t):s(55296+((t-=65536)>>10),t%1024+56320)}return l(n,"")}})},21699:function(e,t,n){"use strict";var r=n(46518),i=n(79504),o=n(60511),a=n(67750),s=n(655),c=n(41436),l=i("".indexOf);r({target:"String",proto:!0,forced:!c("includes")},{includes:function(e){return!!~l(s(a(this)),s(o(e)),arguments.length>1?arguments[1]:void 0)}})},20781:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("italics")},{italics:function(){return i(this,"i","","")}})},47764:function(e,t,n){"use strict";var r=n(68183).charAt,i=n(655),o=n(91181),a=n(51088),s=n(62529),c="String Iterator",l=o.set,u=o.getterFor(c);a(String,"String",function(e){l(this,{type:c,string:i(e),index:0})},function(){var e,t=u(this),n=t.string,i=t.index;return i>=n.length?s(void 0,!0):(e=r(n,i),t.index+=e.length,s(e,!1))})},50778:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("link")},{link:function(e){return i(this,"a","href",e)}})},71761:function(e,t,n){"use strict";var r=n(69565),i=n(79504),o=n(89228),a=n(28551),s=n(20034),c=n(18014),l=n(655),u=n(67750),d=n(55966),h=n(57829),f=n(61034),p=n(56682),m=i("".indexOf);o("match",function(e,t,n){return[function(t){var n=u(this),i=s(t)?d(t,e):void 0;return i?r(i,t,n):new RegExp(t)[e](l(n))},function(e){var r=a(this),i=l(e),o=n(t,r,i);if(o.done)return o.value;var s=l(f(r));if(!~m(s,"g"))return p(r,i);var u=!!~m(s,"u")||!!~m(s,"v");r.lastIndex=0;var d,v=[],g=0;while(null!==(d=p(r,i))){var y=l(d[0]);v[g]=y,""===y&&(r.lastIndex=h(i,c(r.lastIndex),u)),g++}return 0===g?null:v}]})},35701:function(e,t,n){"use strict";var r=n(46518),i=n(60533).end,o=n(83063);r({target:"String",proto:!0,forced:o},{padEnd:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}})},68156:function(e,t,n){"use strict";var r=n(46518),i=n(60533).start,o=n(83063);r({target:"String",proto:!0,forced:o},{padStart:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}})},85906:function(e,t,n){"use strict";var r=n(46518),i=n(79504),o=n(25397),a=n(48981),s=n(655),c=n(26198),l=i([].push),u=i([].join);r({target:"String",stat:!0},{raw:function(e){var t=o(a(e).raw),n=c(t);if(!n)return"";var r=arguments.length,i=[],d=0;while(1){if(l(i,s(t[d++])),d===n)return u(i,"");d")});a("replace",function(e,t,n){var o=T?"$":"$0";return[function(e,n){var r=p(this),o=u(e)?v(e,M):void 0;return o?i(o,e,r,n):i(t,f(r),e,n)},function(e,i){var a=c(this),s=f(e),u=l(i);u||(i=f(i));var p=f(y(a));if("string"==typeof i&&!~L(i,o)&&!~L(i,"$<")&&!~L(p,"y")){var v=n(t,a,s,i);if(v.done)return v.value}var b,M=!!~L(p,"g");M&&(b=!!~L(p,"u")||!!~L(p,"v"),a.lastIndex=0);var z,T=[];while(1){if(z=_(a,s),null===z)break;if(k(T,z),!M)break;var O=f(z[0]);""===O&&(a.lastIndex=m(s,h(a.lastIndex),b))}for(var H="",D=0,Y=0;Y=D&&(H+=C(s,D,E)+V,D=E+P.length)}return H+C(s,D)}]},!O||!z||T)},5746:function(e,t,n){"use strict";var r=n(69565),i=n(89228),o=n(28551),a=n(20034),s=n(67750),c=n(3470),l=n(655),u=n(55966),d=n(56682);i("search",function(e,t,n){return[function(t){var n=s(this),i=a(t)?u(t,e):void 0;return i?r(i,t,n):new RegExp(t)[e](l(n))},function(e){var r=o(this),i=l(e),a=n(t,r,i);if(a.done)return a.value;var s=r.lastIndex;c(s,0)||(r.lastIndex=0);var u=d(r,i);return c(r.lastIndex,s)||(r.lastIndex=s),null===u?-1:u.index}]})},89195:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("small")},{small:function(){return i(this,"small","","")}})},90744:function(e,t,n){"use strict";var r=n(69565),i=n(79504),o=n(89228),a=n(28551),s=n(20034),c=n(67750),l=n(2293),u=n(57829),d=n(18014),h=n(655),f=n(55966),p=n(61034),m=n(56682),v=n(58429),g=n(79039),y=v.UNSUPPORTED_Y,_=4294967295,b=Math.min,M=i([].push),A=i("".slice),w=i("".indexOf),x=!g(function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var n="ab".split(e);return 2!==n.length||"a"!==n[0]||"b"!==n[1]}),k="c"==="abbc".split(/(b)*/)[1]||4!=="test".split(/(?:)/,-1).length||2!=="ab".split(/(?:ab)*/).length||4!==".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length;o("split",function(e,t,n){var i="0".split(void 0,0).length?function(e,n){return void 0===e&&0===n?[]:r(t,this,e,n)}:t;return[function(t,n){var o=c(this),a=s(t)?f(t,e):void 0;return a?r(a,t,o,n):r(i,h(o),t,n)},function(e,r){var o=a(this),s=h(e);if(!k){var c=n(i,o,s,r,i!==t);if(c.done)return c.value}var f=l(o,RegExp),v=h(p(o)),g=!!~w(v,"u")||!!~w(v,"v");y?~w(v,"g")||(v+="g"):~w(v,"y")||(v+="y");var x=new f(y?"^(?:"+o.source+")":o,v),L=void 0===r?_:r>>>0;if(0===L)return[];if(0===s.length)return null===m(x,s)?[s]:[];var C=0,S=0,z=[];while(S1?arguments[1]:void 0,t.length));return h(t,r,r+n.length)===n}})},46276:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("strike")},{strike:function(){return i(this,"strike","","")}})},48718:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("sub")},{sub:function(){return i(this,"sub","","")}})},16308:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("sup")},{sup:function(){return i(this,"sup","","")}})},39202:function(e,t,n){"use strict";n(33313);var r=n(46518),i=n(18866);r({target:"String",proto:!0,name:"trimEnd",forced:"".trimEnd!==i},{trimEnd:i})},58934:function(e,t,n){"use strict";var r=n(46518),i=n(53487);r({target:"String",proto:!0,name:"trimStart",forced:"".trimLeft!==i},{trimLeft:i})},33313:function(e,t,n){"use strict";var r=n(46518),i=n(18866);r({target:"String",proto:!0,name:"trimEnd",forced:"".trimRight!==i},{trimRight:i})},43359:function(e,t,n){"use strict";n(58934);var r=n(46518),i=n(53487);r({target:"String",proto:!0,name:"trimStart",forced:"".trimStart!==i},{trimStart:i})},42762:function(e,t,n){"use strict";var r=n(46518),i=n(43802).trim,o=n(60706);r({target:"String",proto:!0,forced:o("trim")},{trim:function(){return i(this)}})},66412:function(e,t,n){"use strict";var r=n(70511);r("asyncIterator")},6761:function(e,t,n){"use strict";var r=n(46518),i=n(22195),o=n(69565),a=n(79504),s=n(96395),c=n(43724),l=n(4495),u=n(79039),d=n(39297),h=n(1625),f=n(28551),p=n(25397),m=n(56969),v=n(655),g=n(6980),y=n(2360),_=n(71072),b=n(38480),M=n(10298),A=n(33717),w=n(77347),x=n(24913),k=n(96801),L=n(48773),C=n(36840),S=n(62106),z=n(25745),T=n(66119),O=n(30421),H=n(33392),D=n(78227),Y=n(1951),V=n(70511),P=n(58242),E=n(10687),j=n(91181),F=n(59213).forEach,I=T("hidden"),$="Symbol",R="prototype",N=j.set,W=j.getterFor($),B=Object[R],K=i.Symbol,U=K&&K[R],q=i.RangeError,G=i.TypeError,J=i.QObject,X=w.f,Z=x.f,Q=M.f,ee=L.f,te=a([].push),ne=z("symbols"),re=z("op-symbols"),ie=z("wks"),oe=!J||!J[R]||!J[R].findChild,ae=function(e,t,n){var r=X(B,t);return r&&delete B[t],Z(e,t,n),r&&e!==B&&Z(B,t,r),e},se=c&&u(function(){return 7!==y(Z({},"a",{get:function(){return Z(this,"a",{value:7}).a}})).a})?ae:Z,ce=function(e,t){var n=ne[e]=y(U);return N(n,{type:$,tag:e,description:t}),c||(n.description=t),n},le=function(e,t,n){e===B&&le(re,t,n),f(e);var r=m(t);return f(n),d(ne,r)?(("enumerable"in n?!n.enumerable:!d(e,r)||d(e,I)&&e[I][r])?(d(e,I)||Z(e,I,g(1,y(null))),e[I][r]=!0):(d(e,I)&&e[I][r]&&(e[I][r]=!1),n=y(n,{enumerable:g(0,!1)})),se(e,r,n)):Z(e,r,n)},ue=function(e,t){f(e);var n=p(t),r=_(n).concat(me(n));return F(r,function(t){c&&!o(he,n,t)||le(e,t,n[t])}),e},de=function(e,t){return void 0===t?y(e):ue(y(e),t)},he=function(e){var t=m(e),n=o(ee,this,t);return!(this===B&&d(ne,t)&&!d(re,t))&&(!(n||!d(this,t)||!d(ne,t)||d(this,I)&&this[I][t])||n)},fe=function(e,t){var n=p(e),r=m(t);if(n!==B||!d(ne,r)||d(re,r)){var i=X(n,r);return!i||!d(ne,r)||d(n,I)&&n[I][r]||(i.enumerable=!0),i}},pe=function(e){var t=Q(p(e)),n=[];return F(t,function(e){d(ne,e)||d(O,e)||te(n,e)}),n},me=function(e){var t=e===B,n=Q(t?re:p(e)),r=[];return F(n,function(e){!d(ne,e)||t&&!d(B,e)||te(r,ne[e])}),r};l||(K=function(){if(h(U,this))throw new G("Symbol is not a constructor");var e=arguments.length&&void 0!==arguments[0]?v(arguments[0]):void 0,t=H(e),n=function(e){var r=void 0===this?i:this;r===B&&o(n,re,e),d(r,I)&&d(r[I],t)&&(r[I][t]=!1);var a=g(1,e);try{se(r,t,a)}catch(s){if(!(s instanceof q))throw s;ae(r,t,a)}};return c&&oe&&se(B,t,{configurable:!0,set:n}),ce(t,e)},U=K[R],C(U,"toString",function(){return W(this).tag}),C(K,"withoutSetter",function(e){return ce(H(e),e)}),L.f=he,x.f=le,k.f=ue,w.f=fe,b.f=M.f=pe,A.f=me,Y.f=function(e){return ce(D(e),e)},c&&(S(U,"description",{configurable:!0,get:function(){return W(this).description}}),s||C(B,"propertyIsEnumerable",he,{unsafe:!0}))),r({global:!0,constructor:!0,wrap:!0,forced:!l,sham:!l},{Symbol:K}),F(_(ie),function(e){V(e)}),r({target:$,stat:!0,forced:!l},{useSetter:function(){oe=!0},useSimple:function(){oe=!1}}),r({target:"Object",stat:!0,forced:!l,sham:!c},{create:de,defineProperty:le,defineProperties:ue,getOwnPropertyDescriptor:fe}),r({target:"Object",stat:!0,forced:!l},{getOwnPropertyNames:pe}),P(),E(K,$),O[I]=!0},89463:function(e,t,n){"use strict";var r=n(46518),i=n(43724),o=n(22195),a=n(69565),s=n(79504),c=n(39297),l=n(94901),u=n(1625),d=n(655),h=n(62106),f=n(77740),p=o.Symbol,m=p&&p.prototype;if(i&&l(p)&&(!("description"in m)||void 0!==p().description)){var v={},g=function(){var e=arguments.length<1||void 0===arguments[0]?void 0:d(arguments[0]),t=u(m,this)?new p(e):void 0===e?p():p(e);return""===e&&(v[t]=!0),t};f(g,p);var y=g["for"];g["for"]={for:function(e){var t=d(e),n=a(y,this,t);return""===t&&(v[n]=!0),n}}["for"],g.prototype=m,m.constructor=g;var _="Symbol(description detection)"===String(p("description detection")),b=s(m.valueOf),M=s(m.toString),A=/^Symbol\((.*)\)[^)]+$/,w=s("".replace),x=s("".slice);h(m,"description",{configurable:!0,get:function(){var e=b(this);if(c(v,e))return"";var t=M(e),n=_?x(t,7,-1):w(t,A,"$1");return""===n?void 0:n}}),r({global:!0,constructor:!0,forced:!0},{Symbol:g})}},81510:function(e,t,n){"use strict";var r=n(46518),i=n(97751),o=n(39297),a=n(655),s=n(25745),c=n(91296),l=s("string-to-symbol-registry"),u=s("symbol-to-string-registry");r({target:"Symbol",stat:!0,forced:!c},{for:function(e){var t=a(e);if(o(l,t))return l[t];var n=i("Symbol")(t);return l[t]=n,u[n]=t,n}})},60193:function(e,t,n){"use strict";var r=n(70511);r("hasInstance")},92168:function(e,t,n){"use strict";var r=n(70511);r("isConcatSpreadable")},2259:function(e,t,n){"use strict";var r=n(70511);r("iterator")},52675:function(e,t,n){"use strict";n(6761),n(81510),n(97812),n(33110),n(49773)},97812:function(e,t,n){"use strict";var r=n(46518),i=n(39297),o=n(10757),a=n(16823),s=n(25745),c=n(91296),l=s("symbol-to-string-registry");r({target:"Symbol",stat:!0,forced:!c},{keyFor:function(e){if(!o(e))throw new TypeError(a(e)+" is not a symbol");if(i(l,e))return l[e]}})},86964:function(e,t,n){"use strict";var r=n(70511);r("match")},83237:function(e,t,n){"use strict";var r=n(70511);r("replace")},61833:function(e,t,n){"use strict";var r=n(70511);r("search")},67947:function(e,t,n){"use strict";var r=n(70511);r("species")},31073:function(e,t,n){"use strict";var r=n(70511);r("split")},45700:function(e,t,n){"use strict";var r=n(70511),i=n(58242);r("toPrimitive"),i()},78125:function(e,t,n){"use strict";var r=n(97751),i=n(70511),o=n(10687);i("toStringTag"),o(r("Symbol"),"Symbol")},20326:function(e,t,n){"use strict";var r=n(70511);r("unscopables")},81630:function(e,t,n){"use strict";var r=n(79504),i=n(94644),o=n(57029),a=r(o),s=i.aTypedArray,c=i.exportTypedArrayMethod;c("copyWithin",function(e,t){return a(s(this),e,t,arguments.length>2?arguments[2]:void 0)})},72170:function(e,t,n){"use strict";var r=n(94644),i=n(59213).every,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("every",function(e){return i(o(this),e,arguments.length>1?arguments[1]:void 0)})},75044:function(e,t,n){"use strict";var r=n(94644),i=n(84373),o=n(75854),a=n(36955),s=n(69565),c=n(79504),l=n(79039),u=r.aTypedArray,d=r.exportTypedArrayMethod,h=c("".slice),f=l(function(){var e=0;return new Int8Array(2).fill({valueOf:function(){return e++}}),1!==e});d("fill",function(e){var t=arguments.length;u(this);var n="Big"===h(a(this),0,3)?o(e):+e;return s(i,this,n,t>1?arguments[1]:void 0,t>2?arguments[2]:void 0)},f)},69539:function(e,t,n){"use strict";var r=n(94644),i=n(59213).filter,o=n(29948),a=r.aTypedArray,s=r.exportTypedArrayMethod;s("filter",function(e){var t=i(a(this),e,arguments.length>1?arguments[1]:void 0);return o(this,t)})},89955:function(e,t,n){"use strict";var r=n(94644),i=n(59213).findIndex,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("findIndex",function(e){return i(o(this),e,arguments.length>1?arguments[1]:void 0)})},31694:function(e,t,n){"use strict";var r=n(94644),i=n(59213).find,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("find",function(e){return i(o(this),e,arguments.length>1?arguments[1]:void 0)})},34594:function(e,t,n){"use strict";var r=n(15823);r("Float32",function(e){return function(t,n,r){return e(this,t,n,r)}})},29833:function(e,t,n){"use strict";var r=n(15823);r("Float64",function(e){return function(t,n,r){return e(this,t,n,r)}})},33206:function(e,t,n){"use strict";var r=n(94644),i=n(59213).forEach,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("forEach",function(e){i(o(this),e,arguments.length>1?arguments[1]:void 0)})},48345:function(e,t,n){"use strict";var r=n(72805),i=n(94644).exportTypedArrayStaticMethod,o=n(43251);i("from",o,r)},44496:function(e,t,n){"use strict";var r=n(94644),i=n(19617).includes,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("includes",function(e){return i(o(this),e,arguments.length>1?arguments[1]:void 0)})},66651:function(e,t,n){"use strict";var r=n(94644),i=n(19617).indexOf,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("indexOf",function(e){return i(o(this),e,arguments.length>1?arguments[1]:void 0)})},72107:function(e,t,n){"use strict";var r=n(15823);r("Int16",function(e){return function(t,n,r){return e(this,t,n,r)}})},95477:function(e,t,n){"use strict";var r=n(15823);r("Int32",function(e){return function(t,n,r){return e(this,t,n,r)}})},46594:function(e,t,n){"use strict";var r=n(15823);r("Int8",function(e){return function(t,n,r){return e(this,t,n,r)}})},12887:function(e,t,n){"use strict";var r=n(22195),i=n(79039),o=n(79504),a=n(94644),s=n(23792),c=n(78227),l=c("iterator"),u=r.Uint8Array,d=o(s.values),h=o(s.keys),f=o(s.entries),p=a.aTypedArray,m=a.exportTypedArrayMethod,v=u&&u.prototype,g=!i(function(){v[l].call([1])}),y=!!v&&v.values&&v[l]===v.values&&"values"===v.values.name,_=function(){return d(p(this))};m("entries",function(){return f(p(this))},g),m("keys",function(){return h(p(this))},g),m("values",_,g||!y,{name:"values"}),m(l,_,g||!y,{name:"values"})},19369:function(e,t,n){"use strict";var r=n(94644),i=n(79504),o=r.aTypedArray,a=r.exportTypedArrayMethod,s=i([].join);a("join",function(e){return s(o(this),e)})},66812:function(e,t,n){"use strict";var r=n(94644),i=n(18745),o=n(8379),a=r.aTypedArray,s=r.exportTypedArrayMethod;s("lastIndexOf",function(e){var t=arguments.length;return i(o,a(this),t>1?[e,arguments[1]]:[e])})},8995:function(e,t,n){"use strict";var r=n(94644),i=n(59213).map,o=n(29948),a=r.aTypedArray,s=r.exportTypedArrayMethod;s("map",function(e){var t=i(a(this),e,arguments.length>1?arguments[1]:void 0);return o(this,t)})},52568:function(e,t,n){"use strict";var r=n(94644),i=n(72805),o=r.aTypedArrayConstructor,a=r.exportTypedArrayStaticMethod;a("of",function(){var e=0,t=arguments.length,n=new(o(this))(t);while(t>e)n[e]=arguments[e++];return n},i)},36072:function(e,t,n){"use strict";var r=n(94644),i=n(80926).right,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("reduceRight",function(e){var t=arguments.length;return i(o(this),e,t,t>1?arguments[1]:void 0)})},31575:function(e,t,n){"use strict";var r=n(94644),i=n(80926).left,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("reduce",function(e){var t=arguments.length;return i(o(this),e,t,t>1?arguments[1]:void 0)})},88747:function(e,t,n){"use strict";var r=n(94644),i=r.aTypedArray,o=r.exportTypedArrayMethod,a=Math.floor;o("reverse",function(){var e,t=this,n=i(t).length,r=a(n/2),o=0;while(o1?arguments[1]:void 0,1),n=c(e);if(v)return i(f,this,n,t);var r=this.length,o=a(n),l=0;if(o+t>r)throw new u("Wrong length");while(li)l[i]=n[i++];return l},l)},57301:function(e,t,n){"use strict";var r=n(94644),i=n(59213).some,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("some",function(e){return i(o(this),e,arguments.length>1?arguments[1]:void 0)})},373:function(e,t,n){"use strict";var r=n(22195),i=n(27476),o=n(79039),a=n(79306),s=n(74488),c=n(94644),l=n(13709),u=n(13763),d=n(39519),h=n(3607),f=c.aTypedArray,p=c.exportTypedArrayMethod,m=r.Uint16Array,v=m&&i(m.prototype.sort),g=!!v&&!(o(function(){v(new m(2),null)})&&o(function(){v(new m(2),{})})),y=!!v&&!o(function(){if(d)return d<74;if(l)return l<67;if(u)return!0;if(h)return h<602;var e,t,n=new m(516),r=Array(516);for(e=0;e<516;e++)t=e%4,n[e]=515-e,r[e]=e-2*t+3;for(v(n,function(e,t){return(e/4|0)-(t/4|0)}),e=0;e<516;e++)if(n[e]!==r[e])return!0}),_=function(e){return function(t,n){return void 0!==e?+e(t,n)||0:n!==n?t!==t?0:-1:t!==t?1:0===t&&0===n?1/t>0?1/n>0?0:1:1/n>0?-1:0:t>n?1:t0&&0!==(e&n);n>>=1)t++;return t},le=function(e){var t=null,n=e.length;switch(n){case 1:t=e[0];break;case 2:t=(31&e[0])<<6|63&e[1];break;case 3:t=(15&e[0])<<12|(63&e[1])<<6|63&e[2];break;case 4:t=(7&e[0])<<18|(63&e[1])<<12|(63&e[2])<<6|63&e[3];break}return null===t||t>1114111||t>=55296&&t<=57343||t<(n>3?65536:n>2?2048:n>1?128:0)?null:t},ue=function(e){e=Z(e,ie," ");var t=e.length,n="",r=0;while(rt){n+="%",r++;continue}var o=se(e,r+1);if(o!==o){n+=i,r++;continue}r+=2;var a=ce(o);if(0===a)i=K(o);else{if(1===a||a>4){n+=oe,r++;continue}var s=[o],c=1;while(ct||"%"!==G(e,r))break;var l=se(e,r+1);if(l!==l||l>191||l<128)break;if(1===c){if(224===o&&l<160)break;if(237===o&&l>159)break;if(240===o&&l<144)break;if(244===o&&l>143)break}X(s,l),r+=2,c++}if(s.length!==a){n+=oe;continue}var u=le(s);if(null===u){for(var d=0;d=t.length)return e.target=null,z(void 0,!0);var r=t[n];switch(e.kind){case"keys":return z(r.key,!1);case"values":return z(r.value,!1)}return z([r.key,r.value],!1)},!0),ve=function(e){this.entries=[],this.url=null,void 0!==e&&(w(e)?this.parseObject(e):this.parseQuery("string"==typeof e?"?"===G(e,0)?ne(e,1):e:x(e)))};ve.prototype={type:Y,bindURL:function(e){this.url=e,this.update()},parseObject:function(e){var t,n,r,i,o,a,c,l=this.entries,u=S(e);if(u){t=C(e,u),n=t.next;while(!(r=s(n,t)).done){if(i=C(A(r.value)),o=i.next,(a=s(o,i)).done||(c=s(o,i)).done||!s(o,i).done)throw new W("Expected sequence with length 2");X(l,{key:x(a.value),value:x(c.value)})}}else for(var d in e)_(e,d)&&X(l,{key:d,value:x(e[d])})},parseQuery:function(e){if(e){var t,n,r=this.entries,i=te(e,"&"),o=0;while(o0?arguments[0]:void 0,t=P(this,new ve(e));l||(this.size=t.entries.length)},ye=ge.prototype;if(f(ye,{append:function(e,t){var n=E(this);T(arguments.length,2),X(n.entries,{key:x(e),value:x(t)}),l||this.size++,n.updateURL()},delete:function(e){var t=E(this),n=T(arguments.length,1),r=t.entries,i=x(e),o=n<2?void 0:arguments[1],a=void 0===o?o:x(o),s=0;while(st.key?1:-1}),e.updateURL()},forEach:function(e){var t,n=E(this).entries,r=b(e,arguments.length>1?arguments[1]:void 0),i=0;while(i1?Me(arguments[1]):{})}}),y(I)){var Ae=function(e){return g(this,R),new I(e,arguments.length>1?Me(arguments[1]):{})};R.constructor=Ae,Ae.prototype=R,r({global:!0,constructor:!0,dontCallGetSet:!0,forced:!0},{Request:Ae})}}e.exports={URLSearchParams:ge,getState:E}},48408:function(e,t,n){"use strict";n(98406)},45806:function(e,t,n){"use strict";n(47764);var r,i=n(46518),o=n(43724),a=n(67416),s=n(22195),c=n(76080),l=n(79504),u=n(36840),d=n(62106),h=n(90679),f=n(39297),p=n(44213),m=n(97916),v=n(67680),g=n(68183).codeAt,y=n(3717),_=n(655),b=n(10687),M=n(22812),A=n(98406),w=n(91181),x=w.set,k=w.getterFor("URL"),L=A.URLSearchParams,C=A.getState,S=s.URL,z=s.TypeError,T=s.encodeURIComponent,O=s.parseInt,H=Math.floor,D=Math.pow,Y=l("".charAt),V=l(/./.exec),P=l([].join),E=l(1.1.toString),j=l([].pop),F=l([].push),I=l("".replace),$=l([].shift),R=l("".split),N=l("".slice),W=l("".toLowerCase),B=l([].unshift),K="Invalid authority",U="Invalid scheme",q="Invalid host",G="Invalid port",J=/[a-z]/i,X=/[\d+\-.a-z]/i,Z=/\d/,Q=/^0x/i,ee=/^[0-7]+$/,te=/^\d+$/,ne=/^[\da-f]+$/i,re=/[\0\t\n\r #%/:<>?@[\\\]^|]/,ie=/[\0\t\n\r #/:<>?@[\\\]^|]/,oe=/^[\u0000-\u0020]+/,ae=/(^|[^\u0000-\u0020])[\u0000-\u0020]+$/,se=/[\t\n\r]/g,ce=function(e){var t,n,r=R(e,".");if(""===r[r.length-1]){if(1===r.length)return!1;r.length--}return t=r[r.length-1],!!V(te,t)||!!V(Q,t)&&(n=N(t,2),""===n||!!V(ne,n))},le=function(e){var t,n,r,i,o,a,s,c=R(e,".");if(c.length&&""===c[c.length-1]&&c.length--,t=c.length,t>4)return null;for(n=[],r=0;r1&&"0"===Y(i,0)&&(o=V(Q,i)?16:8,i=N(i,8===o?1:2)),""===i)a=0;else{if(!V(10===o?te:8===o?ee:ne,i))return null;a=O(i,o)}F(n,a)}for(r=0;r=D(256,5-t))return null}else if(a>255)return null;for(s=j(n),r=0;r6)return;r=0;while(h()){if(i=null,r>0){if(!("."===h()&&r<4))return;d++}if(!V(Z,h()))return;while(V(Z,h())){if(o=O(h(),10),null===i)i=o;else{if(0===i)return;i=10*i+o}if(i>255)return;d++}c[l]=256*c[l]+i,r++,2!==r&&4!==r||l++}if(4!==r)return;break}if(":"===h()){if(d++,!h())return}else if(h())return;c[l++]=t}else{if(null!==u)return;d++,l++,u=l}}if(null!==u){a=l-u,l=7;while(0!==l&&a>0)s=c[l],c[l--]=c[u+a-1],c[u+--a]=s}else if(8!==l)return;return c},de=function(e){for(var t=null,n=1,r=null,i=0,o=0;o<8;o++)0!==e[o]?(i>n&&(t=r,n=i),r=null,i=0):(null===r&&(r=o),++i);return i>n?r:t},he=function(e){var t,n,r,i;if("number"==typeof e){for(t=[],n=0;n<4;n++)B(t,e%256),e=H(e/256);return P(t,".")}if("object"==typeof e){for(t="",r=de(e),n=0;n<8;n++)i&&0===e[n]||(i&&(i=!1),r===n?(t+=n?":":"::",i=!0):(t+=E(e[n],16),n<7&&(t+=":")));return"["+t+"]"}return e},fe={},pe=p({},fe,{" ":1,'"':1,"#":1,"<":1,">":1}),me=p({},pe,{"'":1}),ve=p({},fe,{" ":1,'"':1,"<":1,">":1,"`":1}),ge=p({},ve,{"#":1,"?":1,"{":1,"}":1,"^":1}),ye=p({},ge,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),_e=function(e,t){var n=g(e,0);return n>=32&&n<127&&!f(t,e)?e:"'"===e&&f(t,e)?"%27":T(e)},be={ftp:21,file:null,http:80,https:443,ws:80,wss:443},Me=function(e,t){var n;return 2===e.length&&V(J,Y(e,0))&&(":"===(n=Y(e,1))||!t&&"|"===n)},Ae=function(e){var t;return e.length>1&&Me(N(e,0,2))&&(2===e.length||"/"===(t=Y(e,2))||"\\"===t||"?"===t||"#"===t)},we=function(e){return"."===e||"%2e"===W(e)},xe=function(e){return e=W(e),".."===e||"%2e."===e||".%2e"===e||"%2e%2e"===e},ke={},Le={},Ce={},Se={},ze={},Te={},Oe={},He={},De={},Ye={},Ve={},Pe={},Ee={},je={},Fe={},Ie={},$e={},Re={},Ne={},We={},Be={},Ke=function(e,t,n){var r,i,o,a=_(e);if(t){if(i=this.parse(a),i)throw new z(i);this.searchParams=null}else{if(void 0!==n&&(r=new Ke(n,!0)),i=this.parse(a,null,r),i)throw new z(i);o=C(new L),o.bindURL(this),this.searchParams=o}};Ke.prototype={type:"URL",parse:function(e,t,n){var i,o,a,s,c=this,l=t||ke,u=0,d="",h=!1,p=!1,g=!1;e=_(e),t||(c.scheme="",c.username="",c.password="",c.host=null,c.port=null,c.path=[],c.query=null,c.fragment=null,c.cannotBeABaseURL=!1,e=I(e,oe,""),e=I(e,ae,"$1")),e=I(e,se,""),i=m(e);while(u<=i.length){switch(o=i[u],l){case ke:if(!o||!V(J,o)){if(t)return U;l=Ce;continue}d+=W(o),l=Le;break;case Le:if(o&&V(X,o))d+=W(o);else{if(":"!==o){if(t)return U;d="",l=Ce,u=0;continue}if(t&&(c.isSpecial()!==f(be,d)||"file"===d&&(c.includesCredentials()||null!==c.port)||"file"===c.scheme&&""===c.host))return;if(c.scheme=d,t)return void(c.isSpecial()&&be[c.scheme]===c.port&&(c.port=null));d="","file"===c.scheme?l=je:c.isSpecial()&&n&&n.scheme===c.scheme?l=Se:c.isSpecial()?l=He:"/"===i[u+1]?(l=ze,u++):(c.cannotBeABaseURL=!0,F(c.path,""),l=Ne)}break;case Ce:if(!n||n.cannotBeABaseURL&&"#"!==o)return U;if(n.cannotBeABaseURL&&"#"===o){c.scheme=n.scheme,c.path=v(n.path),c.query=n.query,c.fragment="",c.cannotBeABaseURL=!0,l=Be;break}l="file"===n.scheme?je:Te;continue;case Se:if("/"!==o||"/"!==i[u+1]){l=Te;continue}l=De,u++;break;case ze:if("/"===o){l=Ye;break}l=Re;continue;case Te:if(c.scheme=n.scheme,o===r)c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,c.path=v(n.path),c.query=n.query;else if("/"===o||"\\"===o&&c.isSpecial())l=Oe;else if("?"===o)c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,c.path=v(n.path),c.query="",l=We;else{if("#"!==o){c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,c.path=v(n.path),c.path.length&&c.path.length--,l=Re;continue}c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,c.path=v(n.path),c.query=n.query,c.fragment="",l=Be}break;case Oe:if(!c.isSpecial()||"/"!==o&&"\\"!==o){if("/"!==o){c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,l=Re;continue}l=Ye}else l=De;break;case He:if(l=De,"/"!==o||"/"!==i[u+1])continue;u++;break;case De:if("/"!==o&&"\\"!==o){l=Ye;continue}break;case Ye:if("@"===o){h&&(d="%40"+d),h=!0,a=m(d);for(var y=0;y65535)return G;c.port=c.isSpecial()&&A===be[c.scheme]?null:A,d=""}if(t)return;l=$e;continue}return G}d+=o;break;case je:if(c.scheme="file",c.host="","/"===o||"\\"===o)l=Fe;else{if(!n||"file"!==n.scheme){l=Re;continue}switch(o){case r:c.host=n.host,c.path=v(n.path),c.query=n.query;break;case"?":c.host=n.host,c.path=v(n.path),c.query="",l=We;break;case"#":c.host=n.host,c.path=v(n.path),c.query=n.query,c.fragment="",l=Be;break;default:c.host=n.host,Ae(P(v(i,u),""))||(c.path=v(n.path),c.shortenPath()),l=Re;continue}}break;case Fe:if("/"===o||"\\"===o){l=Ie;break}n&&"file"===n.scheme&&(c.host=n.host,!Ae(P(v(i,u),""))&&Me(n.path[0],!0)&&F(c.path,n.path[0])),l=Re;continue;case Ie:if(o===r||"/"===o||"\\"===o||"?"===o||"#"===o){if(!t&&Me(d))l=Re;else if(""===d){if(c.host="",t)return;l=$e}else{if(s=c.parseHost(d),s)return s;if("localhost"===c.host&&(c.host=""),t)return;d="",l=$e}continue}d+=o;break;case $e:if(c.isSpecial()){if(l=Re,"/"!==o&&"\\"!==o)continue}else if(t||"?"!==o)if(t||"#"!==o){if(o!==r&&(l=Re,"/"!==o))continue}else c.fragment="",l=Be;else c.query="",l=We;break;case Re:if(o===r||"/"===o||"\\"===o&&c.isSpecial()||!t&&("?"===o||"#"===o)){if(xe(d)?(c.shortenPath(),"/"===o||"\\"===o&&c.isSpecial()||F(c.path,"")):we(d)?"/"===o||"\\"===o&&c.isSpecial()||F(c.path,""):("file"===c.scheme&&!c.path.length&&Me(d)&&(null!==c.host&&""!==c.host&&(c.host=""),d=Y(d,0)+":"),F(c.path,d)),d="","file"===c.scheme&&(o===r||"?"===o||"#"===o))while(c.path.length>1&&""===c.path[0])$(c.path);"?"===o?(c.query="",l=We):"#"===o&&(c.fragment="",l=Be)}else d+=_e(o,ge);break;case Ne:"?"===o?(c.query="",l=We):"#"===o?(c.fragment="",l=Be):o!==r&&(c.path[0]+=_e(o,fe));break;case We:t||"#"!==o?o!==r&&(c.query+=_e(o,c.isSpecial()?me:pe)):(c.fragment="",l=Be);break;case Be:o!==r&&(c.fragment+=_e(o,ve));break}u++}},parseHost:function(e){var t,n,r;if("["===Y(e,0)){if("]"!==Y(e,e.length-1))return q;if(t=ue(N(e,1,-1)),!t)return q;this.host=t}else if(this.isSpecial()){if(e=y(e),V(re,e))return q;if(ce(e)){if(t=le(e),null===t)return q;this.host=t}else this.host=e}else{if(V(ie,e))return q;for(t="",n=m(e),r=0;r1&&""===a[0]&&(l+="/."),l+=e.cannotBeABaseURL?a[0]:a.length?"/"+P(a,"/"):"",null!==s&&(l+="?"+s),null!==c&&(l+="#"+c),l},setHref:function(e){var t=this.parse(e);if(t)throw new z(t);this.searchParams.update()},getOrigin:function(){var e=this.scheme,t=this.port;if("blob"===e)try{return new Ue(this.path[0]).origin}catch(n){return"null"}return"file"!==e&&this.isSpecial()?e+"://"+he(this.host)+(null!==t?":"+t:""):"null"},getProtocol:function(){return this.scheme+":"},setProtocol:function(e){this.parse(_(e)+":",ke)},getUsername:function(){return this.username},setUsername:function(e){var t=m(_(e));if(!this.cannotHaveUsernamePasswordPort()){this.username="";for(var n=0;n1?arguments[1]:void 0,r=x(t,new Ke(e,!1,n));o||(t.href=r.serialize(),t.origin=r.getOrigin(),t.protocol=r.getProtocol(),t.username=r.getUsername(),t.password=r.getPassword(),t.host=r.getHost(),t.hostname=r.getHostname(),t.port=r.getPort(),t.pathname=r.getPathname(),t.search=r.getSearch(),t.searchParams=r.getSearchParams(),t.hash=r.getHash())},qe=Ue.prototype,Ge=function(e,t){return{get:function(){return k(this)[e]()},set:t&&function(e){return k(this)[t](e)},configurable:!0,enumerable:!0}};if(o&&(d(qe,"href",Ge("serialize","setHref")),d(qe,"origin",Ge("getOrigin")),d(qe,"protocol",Ge("getProtocol","setProtocol")),d(qe,"username",Ge("getUsername","setUsername")),d(qe,"password",Ge("getPassword","setPassword")),d(qe,"host",Ge("getHost","setHost")),d(qe,"hostname",Ge("getHostname","setHostname")),d(qe,"port",Ge("getPort","setPort")),d(qe,"pathname",Ge("getPathname","setPathname")),d(qe,"search",Ge("getSearch","setSearch")),d(qe,"searchParams",Ge("getSearchParams")),d(qe,"hash",Ge("getHash","setHash"))),u(qe,"toJSON",function(){return k(this).serialize()},{enumerable:!0}),u(qe,"toString",function(){return k(this).serialize()},{enumerable:!0}),S){var Je=S.createObjectURL,Xe=S.revokeObjectURL;Je&&u(Ue,"createObjectURL",c(Je,S)),Xe&&u(Ue,"revokeObjectURL",c(Xe,S))}b(Ue,"URL"),i({global:!0,constructor:!0,forced:!a,sham:!o},{URL:Ue})},3296:function(e,t,n){"use strict";n(45806)},27208:function(e,t,n){"use strict";var r=n(46518),i=n(69565);r({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return i(URL.prototype.toString,this)}})},6535:function(e){(function(t,n){e.exports=n()})(0,function(){"use strict";function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(t)}var t=/^\s+/,n=/\s+$/;function r(e,t){if(e=e||"",t=t||{},e instanceof r)return e;if(!(this instanceof r))return new r(e,t);var n=i(e);this._originalInput=e,this._r=n.r,this._g=n.g,this._b=n.b,this._a=n.a,this._roundA=Math.round(100*this._a)/100,this._format=t.format||n.format,this._gradientType=t.gradientType,this._r<1&&(this._r=Math.round(this._r)),this._g<1&&(this._g=Math.round(this._g)),this._b<1&&(this._b=Math.round(this._b)),this._ok=n.ok}function i(t){var n={r:0,g:0,b:0},r=1,i=null,a=null,c=null,u=!1,d=!1;return"string"==typeof t&&(t=I(t)),"object"==e(t)&&(F(t.r)&&F(t.g)&&F(t.b)?(n=o(t.r,t.g,t.b),u=!0,d="%"===String(t.r).substr(-1)?"prgb":"rgb"):F(t.h)&&F(t.s)&&F(t.v)?(i=V(t.s),a=V(t.v),n=l(t.h,i,a),u=!0,d="hsv"):F(t.h)&&F(t.s)&&F(t.l)&&(i=V(t.s),c=V(t.l),n=s(t.h,i,c),u=!0,d="hsl"),t.hasOwnProperty("a")&&(r=t.a)),r=S(r),{ok:u,format:t.format||d,r:Math.min(255,Math.max(n.r,0)),g:Math.min(255,Math.max(n.g,0)),b:Math.min(255,Math.max(n.b,0)),a:r}}function o(e,t,n){return{r:255*z(e,255),g:255*z(t,255),b:255*z(n,255)}}function a(e,t,n){e=z(e,255),t=z(t,255),n=z(n,255);var r,i,o=Math.max(e,t,n),a=Math.min(e,t,n),s=(o+a)/2;if(o==a)r=i=0;else{var c=o-a;switch(i=s>.5?c/(2-o-a):c/(o+a),o){case e:r=(t-n)/c+(t1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}if(e=z(e,360),t=z(t,100),n=z(n,100),0===t)r=i=o=n;else{var s=n<.5?n*(1+t):n+t-n*t,c=2*n-s;r=a(c,s,e+1/3),i=a(c,s,e),o=a(c,s,e-1/3)}return{r:255*r,g:255*i,b:255*o}}function c(e,t,n){e=z(e,255),t=z(t,255),n=z(n,255);var r,i,o=Math.max(e,t,n),a=Math.min(e,t,n),s=o,c=o-a;if(i=0===o?0:c/o,o==a)r=0;else{switch(o){case e:r=(t-n)/c+(t>1)+720)%360;--t;)i.h=(i.h+o)%360,a.push(r(i));return a}function x(e,t){t=t||6;var n=r(e).toHsv(),i=n.h,o=n.s,a=n.v,s=[],c=1/t;while(t--)s.push(r({h:i,s:o,v:a})),a=(a+c)%1;return s}r.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var e=this.toRgb();return(299*e.r+587*e.g+114*e.b)/1e3},getLuminance:function(){var e,t,n,r,i,o,a=this.toRgb();return e=a.r/255,t=a.g/255,n=a.b/255,r=e<=.03928?e/12.92:Math.pow((e+.055)/1.055,2.4),i=t<=.03928?t/12.92:Math.pow((t+.055)/1.055,2.4),o=n<=.03928?n/12.92:Math.pow((n+.055)/1.055,2.4),.2126*r+.7152*i+.0722*o},setAlpha:function(e){return this._a=S(e),this._roundA=Math.round(100*this._a)/100,this},toHsv:function(){var e=c(this._r,this._g,this._b);return{h:360*e.h,s:e.s,v:e.v,a:this._a}},toHsvString:function(){var e=c(this._r,this._g,this._b),t=Math.round(360*e.h),n=Math.round(100*e.s),r=Math.round(100*e.v);return 1==this._a?"hsv("+t+", "+n+"%, "+r+"%)":"hsva("+t+", "+n+"%, "+r+"%, "+this._roundA+")"},toHsl:function(){var e=a(this._r,this._g,this._b);return{h:360*e.h,s:e.s,l:e.l,a:this._a}},toHslString:function(){var e=a(this._r,this._g,this._b),t=Math.round(360*e.h),n=Math.round(100*e.s),r=Math.round(100*e.l);return 1==this._a?"hsl("+t+", "+n+"%, "+r+"%)":"hsla("+t+", "+n+"%, "+r+"%, "+this._roundA+")"},toHex:function(e){return u(this._r,this._g,this._b,e)},toHexString:function(e){return"#"+this.toHex(e)},toHex8:function(e){return d(this._r,this._g,this._b,this._a,e)},toHex8String:function(e){return"#"+this.toHex8(e)},toRgb:function(){return{r:Math.round(this._r),g:Math.round(this._g),b:Math.round(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+")":"rgba("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:Math.round(100*z(this._r,255))+"%",g:Math.round(100*z(this._g,255))+"%",b:Math.round(100*z(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+Math.round(100*z(this._r,255))+"%, "+Math.round(100*z(this._g,255))+"%, "+Math.round(100*z(this._b,255))+"%)":"rgba("+Math.round(100*z(this._r,255))+"%, "+Math.round(100*z(this._g,255))+"%, "+Math.round(100*z(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1)&&(L[u(this._r,this._g,this._b,!0)]||!1)},toFilter:function(e){var t="#"+h(this._r,this._g,this._b,this._a),n=t,i=this._gradientType?"GradientType = 1, ":"";if(e){var o=r(e);n="#"+h(o._r,o._g,o._b,o._a)}return"progid:DXImageTransform.Microsoft.gradient("+i+"startColorstr="+t+",endColorstr="+n+")"},toString:function(e){var t=!!e;e=e||this._format;var n=!1,r=this._a<1&&this._a>=0,i=!t&&r&&("hex"===e||"hex6"===e||"hex3"===e||"hex4"===e||"hex8"===e||"name"===e);return i?"name"===e&&0===this._a?this.toName():this.toRgbString():("rgb"===e&&(n=this.toRgbString()),"prgb"===e&&(n=this.toPercentageRgbString()),"hex"!==e&&"hex6"!==e||(n=this.toHexString()),"hex3"===e&&(n=this.toHexString(!0)),"hex4"===e&&(n=this.toHex8String(!0)),"hex8"===e&&(n=this.toHex8String()),"name"===e&&(n=this.toName()),"hsl"===e&&(n=this.toHslString()),"hsv"===e&&(n=this.toHsvString()),n||this.toHexString())},clone:function(){return r(this.toString())},_applyModification:function(e,t){var n=e.apply(null,[this].concat([].slice.call(t)));return this._r=n._r,this._g=n._g,this._b=n._b,this.setAlpha(n._a),this},lighten:function(){return this._applyModification(v,arguments)},brighten:function(){return this._applyModification(g,arguments)},darken:function(){return this._applyModification(y,arguments)},desaturate:function(){return this._applyModification(f,arguments)},saturate:function(){return this._applyModification(p,arguments)},greyscale:function(){return this._applyModification(m,arguments)},spin:function(){return this._applyModification(_,arguments)},_applyCombination:function(e,t){return e.apply(null,[this].concat([].slice.call(t)))},analogous:function(){return this._applyCombination(w,arguments)},complement:function(){return this._applyCombination(b,arguments)},monochromatic:function(){return this._applyCombination(x,arguments)},splitcomplement:function(){return this._applyCombination(A,arguments)},triad:function(){return this._applyCombination(M,[3])},tetrad:function(){return this._applyCombination(M,[4])}},r.fromRatio=function(t,n){if("object"==e(t)){var i={};for(var o in t)t.hasOwnProperty(o)&&(i[o]="a"===o?t[o]:V(t[o]));t=i}return r(t,n)},r.equals=function(e,t){return!(!e||!t)&&r(e).toRgbString()==r(t).toRgbString()},r.random=function(){return r.fromRatio({r:Math.random(),g:Math.random(),b:Math.random()})},r.mix=function(e,t,n){n=0===n?0:n||50;var i=r(e).toRgb(),o=r(t).toRgb(),a=n/100,s={r:(o.r-i.r)*a+i.r,g:(o.g-i.g)*a+i.g,b:(o.b-i.b)*a+i.b,a:(o.a-i.a)*a+i.a};return r(s)},r.readability=function(e,t){var n=r(e),i=r(t);return(Math.max(n.getLuminance(),i.getLuminance())+.05)/(Math.min(n.getLuminance(),i.getLuminance())+.05)},r.isReadable=function(e,t,n){var i,o,a=r.readability(e,t);switch(o=!1,i=$(n),i.level+i.size){case"AAsmall":case"AAAlarge":o=a>=4.5;break;case"AAlarge":o=a>=3;break;case"AAAsmall":o=a>=7;break}return o},r.mostReadable=function(e,t,n){var i,o,a,s,c=null,l=0;n=n||{},o=n.includeFallbackColors,a=n.level,s=n.size;for(var u=0;ul&&(l=i,c=r(t[u]));return r.isReadable(e,c,{level:a,size:s})||!o?c:(n.includeFallbackColors=!1,r.mostReadable(e,["#fff","#000"],n))};var k=r.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},L=r.hexNames=C(k);function C(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[e[n]]=n);return t}function S(e){return e=parseFloat(e),(isNaN(e)||e<0||e>1)&&(e=1),e}function z(e,t){H(e)&&(e="100%");var n=D(e);return e=Math.min(t,Math.max(0,parseFloat(e))),n&&(e=parseInt(e*t,10)/100),Math.abs(e-t)<1e-6?1:e%t/parseFloat(t)}function T(e){return Math.min(1,Math.max(0,e))}function O(e){return parseInt(e,16)}function H(e){return"string"==typeof e&&-1!=e.indexOf(".")&&1===parseFloat(e)}function D(e){return"string"===typeof e&&-1!=e.indexOf("%")}function Y(e){return 1==e.length?"0"+e:""+e}function V(e){return e<=1&&(e=100*e+"%"),e}function P(e){return Math.round(255*parseFloat(e)).toString(16)}function E(e){return O(e)/255}var j=function(){var e="[-\\+]?\\d+%?",t="[-\\+]?\\d*\\.\\d+%?",n="(?:"+t+")|(?:"+e+")",r="[\\s|\\(]+("+n+")[,|\\s]+("+n+")[,|\\s]+("+n+")\\s*\\)?",i="[\\s|\\(]+("+n+")[,|\\s]+("+n+")[,|\\s]+("+n+")[,|\\s]+("+n+")\\s*\\)?";return{CSS_UNIT:new RegExp(n),rgb:new RegExp("rgb"+r),rgba:new RegExp("rgba"+i),hsl:new RegExp("hsl"+r),hsla:new RegExp("hsla"+i),hsv:new RegExp("hsv"+r),hsva:new RegExp("hsva"+i),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();function F(e){return!!j.CSS_UNIT.exec(e)}function I(e){e=e.replace(t,"").replace(n,"").toLowerCase();var r,i=!1;if(k[e])e=k[e],i=!0;else if("transparent"==e)return{r:0,g:0,b:0,a:0,format:"name"};return(r=j.rgb.exec(e))?{r:r[1],g:r[2],b:r[3]}:(r=j.rgba.exec(e))?{r:r[1],g:r[2],b:r[3],a:r[4]}:(r=j.hsl.exec(e))?{h:r[1],s:r[2],l:r[3]}:(r=j.hsla.exec(e))?{h:r[1],s:r[2],l:r[3],a:r[4]}:(r=j.hsv.exec(e))?{h:r[1],s:r[2],v:r[3]}:(r=j.hsva.exec(e))?{h:r[1],s:r[2],v:r[3],a:r[4]}:(r=j.hex8.exec(e))?{r:O(r[1]),g:O(r[2]),b:O(r[3]),a:E(r[4]),format:i?"name":"hex8"}:(r=j.hex6.exec(e))?{r:O(r[1]),g:O(r[2]),b:O(r[3]),format:i?"name":"hex"}:(r=j.hex4.exec(e))?{r:O(r[1]+""+r[1]),g:O(r[2]+""+r[2]),b:O(r[3]+""+r[3]),a:E(r[4]+""+r[4]),format:i?"name":"hex8"}:!!(r=j.hex3.exec(e))&&{r:O(r[1]+""+r[1]),g:O(r[2]+""+r[2]),b:O(r[3]+""+r[3]),format:i?"name":"hex"}}function $(e){var t,n;return e=e||{level:"AA",size:"small"},t=(e.level||"AA").toUpperCase(),n=(e.size||"small").toLowerCase(),"AA"!==t&&"AAA"!==t&&(t="AA"),"small"!==n&&"large"!==n&&(n="small"),{level:t,size:n}}return r})},93511:function(e,t,n){"use strict";n.d(t,{In:function(){return Je}});var r=n(85471);const i=/^[a-z0-9]+(-[a-z0-9]+)*$/,o=(e,t,n,r="")=>{const i=e.split(":");if("@"===e.slice(0,1)){if(i.length<2||i.length>3)return null;r=i.shift().slice(1)}if(i.length>3||!i.length)return null;if(i.length>1){const e=i.pop(),n=i.pop(),o={provider:i.length>0?i[0]:r,prefix:n,name:e};return t&&!a(o)?null:o}const o=i[0],s=o.split("-");if(s.length>1){const e={provider:r,prefix:s.shift(),name:s.join("-")};return t&&!a(e)?null:e}if(n&&""===r){const e={provider:r,prefix:"",name:o};return t&&!a(e,n)?null:e}return null},a=(e,t)=>!!e&&!(""!==e.provider&&!e.provider.match(i)||!(t&&""===e.prefix||e.prefix.match(i))||!e.name.match(i)),s=Object.freeze({left:0,top:0,width:16,height:16}),c=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),l=Object.freeze({...s,...c}),u=Object.freeze({...l,body:"",hidden:!1});function d(e,t){const n={};!e.hFlip!==!t.hFlip&&(n.hFlip=!0),!e.vFlip!==!t.vFlip&&(n.vFlip=!0);const r=((e.rotate||0)+(t.rotate||0))%4;return r&&(n.rotate=r),n}function h(e,t){const n=d(e,t);for(const r in u)r in c?r in e&&!(r in n)&&(n[r]=c[r]):r in t?n[r]=t[r]:r in e&&(n[r]=e[r]);return n}function f(e,t){const n=e.icons,r=e.aliases||Object.create(null),i=Object.create(null);function o(e){if(n[e])return i[e]=[];if(!(e in i)){i[e]=null;const t=r[e]&&r[e].parent,n=t&&o(t);n&&(i[e]=[t].concat(n))}return i[e]}return(t||Object.keys(n).concat(Object.keys(r))).forEach(o),i}function p(e,t,n){const r=e.icons,i=e.aliases||Object.create(null);let o={};function a(e){o=h(r[e]||i[e],o)}return a(t),n.forEach(a),h(e,o)}function m(e,t){const n=[];if("object"!==typeof e||"object"!==typeof e.icons)return n;e.not_found instanceof Array&&e.not_found.forEach(e=>{t(e,null),n.push(e)});const r=f(e);for(const i in r){const o=r[i];o&&(t(i,p(e,i,o)),n.push(i))}return n}const v={provider:"",aliases:{},not_found:{},...s};function g(e,t){for(const n in t)if(n in e&&typeof e[n]!==typeof t[n])return!1;return!0}function y(e){if("object"!==typeof e||null===e)return null;const t=e;if("string"!==typeof t.prefix||!e.icons||"object"!==typeof e.icons)return null;if(!g(e,v))return null;const n=t.icons;for(const o in n){const e=n[o];if(!o.match(i)||"string"!==typeof e.body||!g(e,u))return null}const r=t.aliases||Object.create(null);for(const o in r){const e=r[o],t=e.parent;if(!o.match(i)||"string"!==typeof t||!n[t]&&!r[t]||!g(e,u))return null}return t}const _=Object.create(null);function b(e,t){return{provider:e,prefix:t,icons:Object.create(null),missing:new Set}}function M(e,t){const n=_[e]||(_[e]=Object.create(null));return n[t]||(n[t]=b(e,t))}function A(e,t){return y(t)?m(t,(t,n)=>{n?e.icons[t]=n:e.missing.add(t)}):[]}function w(e,t,n){try{if("string"===typeof n.body)return e.icons[t]={...n},!0}catch(r){}return!1}let x=!1;function k(e){return"boolean"===typeof e&&(x=e),x}function L(e){const t="string"===typeof e?o(e,!0,x):e;if(t){const e=M(t.provider,t.prefix),n=t.name;return e.icons[n]||(e.missing.has(n)?null:void 0)}}function C(e,t){const n=o(e,!0,x);if(!n)return!1;const r=M(n.provider,n.prefix);return w(r,n.name,t)}function S(e,t){if("object"!==typeof e)return!1;if("string"!==typeof t&&(t=e.provider||""),x&&!t&&!e.prefix){let t=!1;return y(e)&&(e.prefix="",m(e,(e,n)=>{n&&C(e,n)&&(t=!0)})),t}const n=e.prefix;if(!a({provider:t,prefix:n,name:"a"}))return!1;const r=M(t,n);return!!A(r,e)}const z=Object.freeze({width:null,height:null}),T=Object.freeze({...z,...c}),O=/(-?[0-9.]*[0-9]+[0-9.]*)/g,H=/^-?[0-9.]*[0-9]+[0-9.]*$/g;function D(e,t,n){if(1===t)return e;if(n=n||100,"number"===typeof e)return Math.ceil(e*t*n)/n;if("string"!==typeof e)return e;const r=e.split(O);if(null===r||!r.length)return e;const i=[];let o=r.shift(),a=H.test(o);while(1){if(a){const e=parseFloat(o);isNaN(e)?i.push(o):i.push(Math.ceil(e*t*n)/n)}else i.push(o);if(o=r.shift(),void 0===o)return i.join("");a=!a}}const Y=e=>"unset"===e||"undefined"===e||"none"===e;function V(e,t){const n={...l,...e},r={...T,...t},i={left:n.left,top:n.top,width:n.width,height:n.height};let o=n.body;[n,r].forEach(e=>{const t=[],n=e.hFlip,r=e.vFlip;let a,s=e.rotate;switch(n?r?s+=2:(t.push("translate("+(i.width+i.left).toString()+" "+(0-i.top).toString()+")"),t.push("scale(-1 1)"),i.top=i.left=0):r&&(t.push("translate("+(0-i.left).toString()+" "+(i.height+i.top).toString()+")"),t.push("scale(1 -1)"),i.top=i.left=0),s<0&&(s-=4*Math.floor(s/4)),s%=4,s){case 1:a=i.height/2+i.top,t.unshift("rotate(90 "+a.toString()+" "+a.toString()+")");break;case 2:t.unshift("rotate(180 "+(i.width/2+i.left).toString()+" "+(i.height/2+i.top).toString()+")");break;case 3:a=i.width/2+i.left,t.unshift("rotate(-90 "+a.toString()+" "+a.toString()+")");break}s%2===1&&(i.left!==i.top&&(a=i.left,i.left=i.top,i.top=a),i.width!==i.height&&(a=i.width,i.width=i.height,i.height=a)),t.length&&(o=''+o+"")});const a=r.width,s=r.height,c=i.width,u=i.height;let d,h;null===a?(h=null===s?"1em":"auto"===s?u:s,d=D(h,c/u)):(d="auto"===a?c:a,h=null===s?D(d,u/c):"auto"===s?u:s);const f={},p=(e,t)=>{Y(t)||(f[e]=t.toString())};return p("width",d),p("height",h),f.viewBox=i.left.toString()+" "+i.top.toString()+" "+c.toString()+" "+u.toString(),{attributes:f,body:o}}const P=/\sid="(\S+)"/g,E="IconifyId"+Date.now().toString(16)+(16777216*Math.random()|0).toString(16);let j=0;function F(e,t=E){const n=[];let r;while(r=P.exec(e))n.push(r[1]);if(!n.length)return e;const i="suffix"+(16777216*Math.random()|Date.now()).toString(16);return n.forEach(n=>{const r="function"===typeof t?t(n):t+(j++).toString(),o=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");e=e.replace(new RegExp('([#;"])('+o+')([")]|\\.[a-z])',"g"),"$1"+r+i+"$3")}),e=e.replace(new RegExp(i,"g"),""),e}const I=Object.create(null);function $(e,t){I[e]=t}function R(e){return I[e]||I[""]}function N(e){let t;if("string"===typeof e.resources)t=[e.resources];else if(t=e.resources,!(t instanceof Array)||!t.length)return null;const n={resources:t,path:e.path||"/",maxURL:e.maxURL||500,rotate:e.rotate||750,timeout:e.timeout||5e3,random:!0===e.random,index:e.index||0,dataAfterTimeout:!1!==e.dataAfterTimeout};return n}const W=Object.create(null),B=["https://api.simplesvg.com","https://api.unisvg.com"],K=[];while(B.length>0)1===B.length||Math.random()>.5?K.push(B.shift()):K.push(B.pop());function U(e,t){const n=N(t);return null!==n&&(W[e]=n,!0)}function q(e){return W[e]}W[""]=N({resources:["https://api.iconify.design"].concat(K)});const G=()=>{let e;try{if(e=fetch,"function"===typeof e)return e}catch(t){}};let J=G();function X(e,t){const n=q(e);if(!n)return 0;let r;if(n.maxURL){let e=0;n.resources.forEach(t=>{const n=t;e=Math.max(e,n.length)});const i=t+".json?icons=";r=n.maxURL-e-n.path.length-i.length}else r=0;return r}function Z(e){return 404===e}const Q=(e,t,n)=>{const r=[],i=X(e,t),o="icons";let a={type:o,provider:e,prefix:t,icons:[]},s=0;return n.forEach((n,c)=>{s+=n.length+1,s>=i&&c>0&&(r.push(a),a={type:o,provider:e,prefix:t,icons:[]},s=n.length),a.icons.push(n)}),r.push(a),r};function ee(e){if("string"===typeof e){const t=q(e);if(t)return t.path}return"/"}const te=(e,t,n)=>{if(!J)return void n("abort",424);let r=ee(t.provider);switch(t.type){case"icons":{const e=t.prefix,n=t.icons,i=n.join(","),o=new URLSearchParams({icons:i});r+=e+".json?"+o.toString();break}case"custom":{const e=t.uri;r+="/"===e.slice(0,1)?e.slice(1):e;break}default:return void n("abort",400)}let i=503;J(e+r).then(e=>{const t=e.status;if(200===t)return i=501,e.json();setTimeout(()=>{n(Z(t)?"abort":"next",t)})}).then(e=>{"object"===typeof e&&null!==e?setTimeout(()=>{n("success",e)}):setTimeout(()=>{404===e?n("abort",e):n("next",i)})}).catch(()=>{n("next",i)})},ne={prepare:Q,send:te};function re(e){const t={loaded:[],missing:[],pending:[]},n=Object.create(null);e.sort((e,t)=>e.provider!==t.provider?e.provider.localeCompare(t.provider):e.prefix!==t.prefix?e.prefix.localeCompare(t.prefix):e.name.localeCompare(t.name));let r={provider:"",prefix:"",name:""};return e.forEach(e=>{if(r.name===e.name&&r.prefix===e.prefix&&r.provider===e.provider)return;r=e;const i=e.provider,o=e.prefix,a=e.name,s=n[i]||(n[i]=Object.create(null)),c=s[o]||(s[o]=M(i,o));let l;l=a in c.icons?t.loaded:""===o||c.missing.has(a)?t.missing:t.pending;const u={provider:i,prefix:o,name:a};l.push(u)}),t}function ie(e,t){e.forEach(e=>{const n=e.loaderCallbacks;n&&(e.loaderCallbacks=n.filter(e=>e.id!==t))})}function oe(e){e.pendingCallbacksFlag||(e.pendingCallbacksFlag=!0,setTimeout(()=>{e.pendingCallbacksFlag=!1;const t=e.loaderCallbacks?e.loaderCallbacks.slice(0):[];if(!t.length)return;let n=!1;const r=e.provider,i=e.prefix;t.forEach(t=>{const o=t.icons,a=o.pending.length;o.pending=o.pending.filter(t=>{if(t.prefix!==i)return!0;const a=t.name;if(e.icons[a])o.loaded.push({provider:r,prefix:i,name:a});else{if(!e.missing.has(a))return n=!0,!0;o.missing.push({provider:r,prefix:i,name:a})}return!1}),o.pending.length!==a&&(n||ie([e],t.id),t.callback(o.loaded.slice(0),o.missing.slice(0),o.pending.slice(0),t.abort))})}))}let ae=0;function se(e,t,n){const r=ae++,i=ie.bind(null,n,r);if(!t.pending.length)return i;const o={id:r,icons:t,callback:e,abort:i};return n.forEach(e=>{(e.loaderCallbacks||(e.loaderCallbacks=[])).push(o)}),i}function ce(e,t=!0,n=!1){const r=[];return e.forEach(e=>{const i="string"===typeof e?o(e,t,n):e;i&&r.push(i)}),r}var le={resources:[],index:0,timeout:2e3,rotate:750,random:!1,dataAfterTimeout:!1};function ue(e,t,n,r){const i=e.resources.length,o=e.random?Math.floor(Math.random()*i):e.index;let a;if(e.random){let t=e.resources.slice(0);a=[];while(t.length>1){const e=Math.floor(Math.random()*t.length);a.push(t[e]),t=t.slice(0,e).concat(t.slice(e+1))}a=a.concat(t)}else a=e.resources.slice(o).concat(e.resources.slice(0,o));const s=Date.now();let c,l="pending",u=0,d=null,h=[],f=[];function p(){d&&(clearTimeout(d),d=null)}function m(){"pending"===l&&(l="aborted"),p(),h.forEach(e=>{"pending"===e.status&&(e.status="aborted")}),h=[]}function v(e,t){t&&(f=[]),"function"===typeof e&&f.push(e)}function g(){return{startTime:s,payload:t,status:l,queriesSent:u,queriesPending:h.length,subscribe:v,abort:m}}function y(){l="failed",f.forEach(e=>{e(void 0,c)})}function _(){h.forEach(e=>{"pending"===e.status&&(e.status="aborted")}),h=[]}function b(t,n,r){const i="success"!==n;switch(h=h.filter(e=>e!==t),l){case"pending":break;case"failed":if(i||!e.dataAfterTimeout)return;break;default:return}if("abort"===n)return c=r,void y();if(i)return c=r,void(h.length||(a.length?M():y()));if(p(),_(),!e.random){const n=e.resources.indexOf(t.resource);-1!==n&&n!==e.index&&(e.index=n)}l="completed",f.forEach(e=>{e(r)})}function M(){if("pending"!==l)return;p();const r=a.shift();if(void 0===r)return h.length?void(d=setTimeout(()=>{p(),"pending"===l&&(_(),y())},e.timeout)):void y();const i={status:"pending",resource:r,callback:(e,t)=>{b(i,e,t)}};h.push(i),u++,d=setTimeout(M,e.rotate),n(r,t,i.callback)}return"function"===typeof r&&f.push(r),setTimeout(M),g}function de(e){const t={...le,...e};let n=[];function r(){n=n.filter(e=>"pending"===e().status)}function i(e,i,o){const a=ue(t,e,i,(e,t)=>{r(),o&&o(e,t)});return n.push(a),a}function o(e){return n.find(t=>e(t))||null}const a={query:i,find:o,setIndex:e=>{t.index=e},getIndex:()=>t.index,cleanup:r};return a}function he(){}const fe=Object.create(null);function pe(e){if(!fe[e]){const t=q(e);if(!t)return;const n=de(t),r={config:t,redundancy:n};fe[e]=r}return fe[e]}function me(e,t,n){let r,i;if("string"===typeof e){const t=R(e);if(!t)return n(void 0,424),he;i=t.send;const o=pe(e);o&&(r=o.redundancy)}else{const t=N(e);if(t){r=de(t);const n=e.resources?e.resources[0]:"",o=R(n);o&&(i=o.send)}}return r&&i?r.query(t,i,n)().abort:(n(void 0,424),he)}const ve="iconify2",ge="iconify",ye=ge+"-count",_e=ge+"-version",be=36e5,Me=168;function Ae(e,t){try{return e.getItem(t)}catch(n){}}function we(e,t,n){try{return e.setItem(t,n),!0}catch(r){}}function xe(e,t){try{e.removeItem(t)}catch(n){}}function ke(e,t){return we(e,ye,t.toString())}function Le(e){return parseInt(Ae(e,ye))||0}const Ce={local:!0,session:!0},Se={local:new Set,session:new Set};let ze=!1;function Te(e){ze=e}let Oe="undefined"===typeof window?{}:window;function He(e){const t=e+"Storage";try{if(Oe&&Oe[t]&&"number"===typeof Oe[t].length)return Oe[t]}catch(n){}Ce[e]=!1}function De(e,t){const n=He(e);if(!n)return;const r=Ae(n,_e);if(r!==ve){if(r){const e=Le(n);for(let t=0;t{const r=ge+e.toString(),o=Ae(n,r);if("string"===typeof o){try{const n=JSON.parse(o);if("object"===typeof n&&"number"===typeof n.cached&&n.cached>i&&"string"===typeof n.provider&&"object"===typeof n.data&&"string"===typeof n.data.prefix&&t(n,e))return!0}catch(a){}xe(n,r)}};let a=Le(n);for(let s=a-1;s>=0;s--)o(s)||(s===a-1?(a--,ke(n,a)):Se[e].add(s))}function Ye(){if(!ze){Te(!0);for(const e in Ce)De(e,e=>{const t=e.data,n=e.provider,r=t.prefix,i=M(n,r);if(!A(i,t).length)return!1;const o=t.lastModified||-1;return i.lastModifiedCached=i.lastModifiedCached?Math.min(i.lastModifiedCached,o):o,!0})}}function Ve(e,t){const n=e.lastModifiedCached;if(n&&n>=t)return n===t;if(e.lastModifiedCached=t,n)for(const r in Ce)De(r,n=>{const r=n.data;return n.provider!==e.provider||r.prefix!==e.prefix||r.lastModified===t});return!0}function Pe(e,t){function n(n){let r;if(!Ce[n]||!(r=He(n)))return;const i=Se[n];let o;if(i.size)i.delete(o=Array.from(i).shift());else if(o=Le(r),!ke(r,o+1))return;const a={cached:Math.floor(Date.now()/be),provider:e.provider,data:t};return we(r,ge+o.toString(),JSON.stringify(a))}ze||Ye(),t.lastModified&&!Ve(e,t.lastModified)||Object.keys(t.icons).length&&(t.not_found&&(t=Object.assign({},t),delete t.not_found),n("local")||n("session"))}function Ee(){}function je(e){e.iconsLoaderFlag||(e.iconsLoaderFlag=!0,setTimeout(()=>{e.iconsLoaderFlag=!1,oe(e)}))}function Fe(e,t){e.iconsToLoad?e.iconsToLoad=e.iconsToLoad.concat(t).sort():e.iconsToLoad=t,e.iconsQueueFlag||(e.iconsQueueFlag=!0,setTimeout(()=>{e.iconsQueueFlag=!1;const{provider:t,prefix:n}=e,r=e.iconsToLoad;let i;if(delete e.iconsToLoad,!r||!(i=R(t)))return;const o=i.prepare(t,n,r);o.forEach(n=>{me(t,n,t=>{if("object"!==typeof t)n.icons.forEach(t=>{e.missing.add(t)});else try{const n=A(e,t);if(!n.length)return;const r=e.pendingIcons;r&&n.forEach(e=>{r.delete(e)}),Pe(e,t)}catch(r){console.error(r)}je(e)})})}))}const Ie=(e,t)=>{const n=ce(e,!0,k()),r=re(n);if(!r.pending.length){let e=!0;return t&&setTimeout(()=>{e&&t(r.loaded,r.missing,r.pending,Ee)}),()=>{e=!1}}const i=Object.create(null),o=[];let a,s;return r.pending.forEach(e=>{const{provider:t,prefix:n}=e;if(n===s&&t===a)return;a=t,s=n,o.push(M(t,n));const r=i[t]||(i[t]=Object.create(null));r[n]||(r[n]=[])}),r.pending.forEach(e=>{const{provider:t,prefix:n,name:r}=e,o=M(t,n),a=o.pendingIcons||(o.pendingIcons=new Set);a.has(r)||(a.add(r),i[t][n].push(r))}),o.forEach(e=>{const{provider:t,prefix:n}=e;i[t][n].length&&Fe(e,i[t][n])}),t?se(t,r,o):Ee};function $e(e,t){const n={...e};for(const r in t){const e=t[r],i=typeof e;r in z?(null===e||e&&("string"===i||"number"===i))&&(n[r]=e):i===typeof n[r]&&(n[r]="rotate"===r?e%4:e)}return n}const Re=/[\s,]+/;function Ne(e,t){t.split(Re).forEach(t=>{const n=t.trim();switch(n){case"horizontal":e.hFlip=!0;break;case"vertical":e.vFlip=!0;break}})}function We(e,t=0){const n=e.replace(/^-?[0-9.]*/,"");function r(e){while(e<0)e+=4;return e%4}if(""===n){const t=parseInt(e);return isNaN(t)?0:r(t)}if(n!==e){let t=0;switch(n){case"%":t=25;break;case"deg":t=90}if(t){let i=parseFloat(e.slice(0,e.length-n.length));return isNaN(i)?0:(i/=t,i%1===0?r(i):0)}}return t}const Be={...T,inline:!1},Ke={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink","aria-hidden":!0,role:"img"},Ue={};["horizontal","vertical"].forEach(e=>{const t=e.slice(0,1)+"Flip";Ue[e+"-flip"]=t,Ue[e.slice(0,1)+"-flip"]=t,Ue[e+"Flip"]=t});const qe=(e,t,n,r)=>{const i=$e(Be,t),o={...Ke},a={};for(let d in t){const e=t[d];if(void 0!==e)switch(d){case"icon":case"style":case"onLoad":break;case"inline":case"hFlip":case"vFlip":i[d]=!0===e||"true"===e||1===e;break;case"flip":"string"===typeof e&&Ne(i,e);break;case"color":a.color=e;break;case"rotate":"string"===typeof e?i[d]=We(e):"number"===typeof e&&(i[d]=e);break;case"ariaHidden":case"aria-hidden":!0!==e&&"true"!==e&&delete o["aria-hidden"];break;default:const t=Ue[d];t?!0!==e&&"true"!==e&&1!==e||(i[t]=!0):void 0===Be[d]&&(o[d]=e)}}const s=V(r,i);for(let d in s.attributes)o[d]=s.attributes[d];i.inline&&(a.verticalAlign="-0.125em");let c=0,l=t.id;"string"===typeof l&&(l=l.replace(/-/g,"_"));const u={attrs:o,domProps:{innerHTML:F(s.body,l?()=>l+"ID"+c++:"iconifyVue")}};return Object.keys(a).length>0&&(u.style=a),n&&(["on","ref"].forEach(e=>{void 0!==n[e]&&(u[e]=n[e])}),["staticClass","class"].forEach(e=>{void 0!==n[e]&&(u.class=n[e])})),e("svg",u)};if(k(!0),$("",ne),"undefined"!==typeof document&&"undefined"!==typeof window){Ye();const e=window;if(void 0!==e.IconifyPreload){const t=e.IconifyPreload,n="Invalid IconifyPreload syntax.";"object"===typeof t&&null!==t&&(t instanceof Array?t:[t]).forEach(e=>{try{("object"!==typeof e||null===e||e instanceof Array||"object"!==typeof e.icons||"string"!==typeof e.prefix||!S(e))&&console.error(n)}catch(t){console.error(n)}})}if(void 0!==e.IconifyProviders){const t=e.IconifyProviders;if("object"===typeof t&&null!==t)for(let e in t){const n="IconifyProviders["+e+"] is invalid.";try{const r=t[e];if("object"!==typeof r||!r||void 0===r.resources)continue;U(e,r)||console.error(n)}catch(Xe){console.error(n)}}}}const Ge={body:""},Je=r.Ay.extend({inheritAttrs:!1,data(){return{iconMounted:!1}},beforeMount(){this._name="",this._loadingIcon=null,this.iconMounted=!0},beforeDestroy(){this.abortLoading()},methods:{abortLoading(){this._loadingIcon&&(this._loadingIcon.abort(),this._loadingIcon=null)},getIcon(e,t){if("object"===typeof e&&null!==e&&"string"===typeof e.body)return this._name="",this.abortLoading(),{data:e};let n;if("string"!==typeof e||null===(n=o(e,!1,!0)))return this.abortLoading(),null;const r=L(n);if(!r)return this._loadingIcon&&this._loadingIcon.name===e||(this.abortLoading(),this._name="",null!==r&&(this._loadingIcon={name:e,abort:Ie([n],()=>{this.$forceUpdate()})})),null;this.abortLoading(),this._name!==e&&(this._name=e,t&&t(e));const i=["iconify"];return""!==n.prefix&&i.push("iconify--"+n.prefix),""!==n.provider&&i.push("iconify--"+n.provider),{data:r,classes:i}}},render(e){const t=Object.assign({},this.$attrs);let n=this.$data;const r=this.iconMounted?this.getIcon(t.icon,t.onLoad):null;return r?(r.classes&&(n={...n,class:("string"===typeof n["class"]?n["class"]+" ":"")+r.classes.join(" ")}),qe(e,t,n,r.data)):qe(e,t,n,Ge)}})},55696:function(e,t,n){"use strict";function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n=e.length?{done:!0}:{done:!1,value:e[i++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,s=!0,c=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){c=!0,a=e},f:function(){try{s||null==n["return"]||n["return"]()}finally{if(c)throw a}}}}},42822:function(e,t,n){"use strict";n.d(t,{A:function(){return a}});var r=n(68285);n(45700),n(89572),n(2892);function i(e,t){if("object"!=(0,r.A)(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t||"default");if("object"!=(0,r.A)(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}function o(e){var t=i(e,"string");return"symbol"==(0,r.A)(t)?t:t+""}function a(e,t,n){return(t=o(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},57888:function(e,t,n){"use strict";n.d(t,{A:function(){return o}});n(52675),n(2008),n(83851),n(81278),n(79432),n(26099),n(23500);var r=n(42822);function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function o(e){for(var t=1;t>8&255]},G=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},J=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},X=function(e){return B(m(e),23,4)},Z=function(e){return B(e,52,8)},Q=function(e,t,n){l(e[z],t,{configurable:!0,get:function(){return n(this)[t]}})},ee=function(e,t,n,r){var i=D(e),o=p(n),a=!!r;if(o+t>i.byteLength)throw new R(O);var s=i.bytes,c=o+i.byteOffset,l=b(s,c,c+t);return a?l:W(l)},te=function(e,t,n,r,i,o){var a=D(e),s=p(n),c=r(+i),l=!!o;if(s+t>a.byteLength)throw new R(O);for(var u=a.bytes,d=s+a.byteOffset,h=0;h>24)},setUint8:function(e,t){ie(this,e,t<<24>>24)}},{unsafe:!0})}else P=function(e){h(this,E);var t=p(e);Y(this,{type:C,bytes:N($(t),0),byteLength:t}),o||(this.byteLength=t,this.detached=!1)},E=P[z],j=function(e,t,n){h(this,F),h(e,E);var r=H(e),i=r.byteLength,a=f(t);if(a<0||a>i)throw new R("Wrong offset");if(n=void 0===n?i-a:p(n),a+n>i)throw new R(T);Y(this,{type:S,buffer:e,byteLength:n,byteOffset:a,bytes:r.bytes}),o||(this.buffer=e,this.byteLength=n,this.byteOffset=a)},F=j[z],o&&(Q(P,"byteLength",H),Q(j,"buffer",D),Q(j,"byteLength",D),Q(j,"byteOffset",D)),u(F,{getInt8:function(e){return ee(this,1,e)[0]<<24>>24},getUint8:function(e){return ee(this,1,e)[0]},getInt16:function(e){var t=ee(this,2,e,arguments.length>1&&arguments[1]);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=ee(this,2,e,arguments.length>1&&arguments[1]);return t[1]<<8|t[0]},getInt32:function(e){return J(ee(this,4,e,arguments.length>1&&arguments[1]))},getUint32:function(e){return J(ee(this,4,e,arguments.length>1&&arguments[1]))>>>0},getFloat32:function(e){return K(ee(this,4,e,arguments.length>1&&arguments[1]),23)},getFloat64:function(e){return K(ee(this,8,e,arguments.length>1&&arguments[1]),52)},setInt8:function(e,t){te(this,1,e,U,t)},setUint8:function(e,t){te(this,1,e,U,t)},setInt16:function(e,t){te(this,2,e,q,t,arguments.length>2&&arguments[2])},setUint16:function(e,t){te(this,2,e,q,t,arguments.length>2&&arguments[2])},setInt32:function(e,t){te(this,4,e,G,t,arguments.length>2&&arguments[2])},setUint32:function(e,t){te(this,4,e,G,t,arguments.length>2&&arguments[2])},setFloat32:function(e,t){te(this,4,e,X,t,arguments.length>2&&arguments[2])},setFloat64:function(e,t){te(this,8,e,Z,t,arguments.length>2&&arguments[2])}});w(P,C),w(j,S),e.exports={ArrayBuffer:P,DataView:j}},57029:function(e,t,n){"use strict";var r=n(48981),i=n(35610),o=n(26198),a=n(84606),s=Math.min;e.exports=[].copyWithin||function(e,t){var n=r(this),c=o(n),l=i(e,c),u=i(t,c),d=arguments.length>2?arguments[2]:void 0,h=s((void 0===d?c:i(d,c))-u,c-l),f=1;u0)u in n?n[l]=n[u]:a(n,l),l+=f,u+=f;return n}},84373:function(e,t,n){"use strict";var r=n(48981),i=n(35610),o=n(26198);e.exports=function(e){var t=r(this),n=o(t),a=arguments.length,s=i(a>1?arguments[1]:void 0,n),c=a>2?arguments[2]:void 0,l=void 0===c?n:i(c,n);while(l>s)t[s++]=e;return t}},90235:function(e,t,n){"use strict";var r=n(59213).forEach,i=n(34598),o=i("forEach");e.exports=o?[].forEach:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}},35370:function(e,t,n){"use strict";var r=n(26198);e.exports=function(e,t,n){var i=0,o=arguments.length>2?n:r(t),a=new e(o);while(o>i)a[i]=t[i++];return a}},97916:function(e,t,n){"use strict";var r=n(76080),i=n(69565),o=n(48981),a=n(96319),s=n(44209),c=n(33517),l=n(26198),u=n(97040),d=n(34527),h=n(70081),f=n(50851),p=n(9539),m=Array;e.exports=function(e){var t=c(this),n=arguments.length,v=n>1?arguments[1]:void 0,g=void 0!==v;g&&(v=r(v,n>2?arguments[2]:void 0));var y,_,b,M,A,w,x=o(e),k=f(x),L=0;if(!k||this===m&&s(k))for(y=l(x),_=t?new this(y):m(y);y>L;L++)w=g?v(x[L],L):x[L],u(_,L,w);else for(_=t?new this:[],M=h(x,k),A=M.next;!(b=i(A,M)).done;L++){w=g?a(M,v,[b.value,L],!0):b.value;try{u(_,L,w)}catch(C){p(M,"throw",C)}}return d(_,L),_}},19617:function(e,t,n){"use strict";var r=n(25397),i=n(35610),o=n(26198),a=function(e){return function(t,n,a){var s=r(t),c=o(s);if(0===c)return!e&&-1;var l,u=i(a,c);if(e&&n!==n){while(c>u)if(l=s[u++],l!==l)return!0}else for(;c>u;u++)if((e||u in s)&&s[u]===n)return e||u||0;return!e&&-1}};e.exports={includes:a(!0),indexOf:a(!1)}},59213:function(e,t,n){"use strict";var r=n(76080),i=n(47055),o=n(48981),a=n(26198),s=n(1469),c=n(97040),l=function(e){var t=1===e,n=2===e,l=3===e,u=4===e,d=6===e,h=7===e,f=5===e||d;return function(p,m,v){for(var g,y,_=o(p),b=i(_),M=a(b),A=r(m,v),w=0,x=0,k=t?s(p,M):n||h?s(p,0):void 0;M>w;w++)if((f||w in b)&&(g=b[w],y=A(g,w,_),e))if(t)c(k,w,y);else if(y)switch(e){case 3:return!0;case 5:return g;case 6:return w;case 2:c(k,x++,g)}else switch(e){case 4:return!1;case 7:c(k,x++,g)}return d?-1:l||u?u:k}};e.exports={forEach:l(0),map:l(1),filter:l(2),some:l(3),every:l(4),find:l(5),findIndex:l(6),filterReject:l(7)}},8379:function(e,t,n){"use strict";var r=n(18745),i=n(25397),o=n(91291),a=n(26198),s=n(34598),c=Math.min,l=[].lastIndexOf,u=!!l&&1/[1].lastIndexOf(1,-0)<0,d=s("lastIndexOf"),h=u||!d;e.exports=h?function(e){if(u)return r(l,this,arguments)||0;var t=i(this),n=a(t);if(0===n)return-1;var s=n-1;for(arguments.length>1&&(s=c(s,o(arguments[1]))),s<0&&(s=n+s);s>=0;s--)if(s in t&&t[s]===e)return s||0;return-1}:l},70597:function(e,t,n){"use strict";var r=n(79039),i=n(78227),o=n(39519),a=i("species");e.exports=function(e){return o>=51||!r(function(){var t=[],n=t.constructor={};return n[a]=function(){return{foo:1}},1!==t[e](Boolean).foo})}},34598:function(e,t,n){"use strict";var r=n(79039);e.exports=function(e,t){var n=[][e];return!!n&&r(function(){n.call(null,t||function(){return 1},1)})}},80926:function(e,t,n){"use strict";var r=n(79306),i=n(48981),o=n(47055),a=n(26198),s=TypeError,c="Reduce of empty array with no initial value",l=function(e){return function(t,n,l,u){var d=i(t),h=o(d),f=a(d);if(r(n),0===f&&l<2)throw new s(c);var p=e?f-1:0,m=e?-1:1;if(l<2)while(1){if(p in h){u=h[p],p+=m;break}if(p+=m,e?p<0:f<=p)throw new s(c)}for(;e?p>=0:f>p;p+=m)p in h&&(u=n(u,h[p],p,d));return u}};e.exports={left:l(!1),right:l(!0)}},34527:function(e,t,n){"use strict";var r=n(43724),i=n(34376),o=TypeError,a=Object.getOwnPropertyDescriptor,s=r&&!function(){if(void 0!==this)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(e){return e instanceof TypeError}}();e.exports=s?function(e,t){if(i(e)&&!a(e,"length").writable)throw new o("Cannot set read only .length");return e.length=t}:function(e,t){return e.length=t}},67680:function(e,t,n){"use strict";var r=n(79504);e.exports=r([].slice)},74488:function(e,t,n){"use strict";var r=n(67680),i=Math.floor,o=function(e,t){var n=e.length;if(n<8){var a,s,c=1;while(c0)e[s]=e[--s];s!==c++&&(e[s]=a)}}else{var l=i(n/2),u=o(r(e,0,l),t),d=o(r(e,l),t),h=u.length,f=d.length,p=0,m=0;while(p1?arguments[1]:void 0);while(t=t?t.next:n.first){r(t.value,t.key,this);while(t&&t.removed)t=t.previous}},has:function(e){return!!_(this,e)}}),o(h,n?{get:function(e){var t=_(this,e);return t&&t.value},set:function(e,t){return y(this,0===e?0:e,t)}}:{add:function(e){return y(this,e=0===e?0:e,e)}}),f&&i(h,"size",{configurable:!0,get:function(){return m(this).size}}),d},setStrong:function(e,t,n){var r=t+" Iterator",i=g(t),o=g(r);u(e,t,function(e,t){v(this,{type:r,target:e,state:i(e),kind:t,last:null})},function(){var e=o(this),t=e.kind,n=e.last;while(n&&n.removed)n=n.previous;return e.target&&(e.last=n=n?n.next:e.state.first)?d("keys"===t?n.key:"values"===t?n.value:[n.key,n.value],!1):(e.target=null,d(void 0,!0))},n?"entries":"values",!n,!0),h(t)}}},91625:function(e,t,n){"use strict";var r=n(79504),i=n(56279),o=n(3451).getWeakData,a=n(90679),s=n(28551),c=n(64117),l=n(20034),u=n(72652),d=n(59213),h=n(39297),f=n(91181),p=f.set,m=f.getterFor,v=d.find,g=d.findIndex,y=r([].splice),_=0,b=function(e){return e.frozen||(e.frozen=new M)},M=function(){this.entries=[]},A=function(e,t){return v(e.entries,function(e){return e[0]===t})};M.prototype={get:function(e){var t=A(this,e);if(t)return t[1]},has:function(e){return!!A(this,e)},set:function(e,t){var n=A(this,e);n?n[1]=t:this.entries.push([e,t])},delete:function(e){var t=g(this.entries,function(t){return t[0]===e});return~t&&y(this.entries,t,1),!!~t}},e.exports={getConstructor:function(e,t,n,r){var d=e(function(e,i){a(e,f),p(e,{type:t,id:_++,frozen:null}),c(i)||u(i,e[r],{that:e,AS_ENTRIES:n})}),f=d.prototype,v=m(t),g=function(e,t,n){var r=v(e),i=o(s(t),!0);return!0===i?b(r).set(t,n):i[r.id]=n,e};return i(f,{delete:function(e){var t=v(this);if(!l(e))return!1;var n=o(e);return!0===n?b(t)["delete"](e):n&&h(n,t.id)&&delete n[t.id]},has:function(e){var t=v(this);if(!l(e))return!1;var n=o(e);return!0===n?b(t).has(e):n&&h(n,t.id)}}),i(f,n?{get:function(e){var t=v(this);if(l(e)){var n=o(e);if(!0===n)return b(t).get(e);if(n)return n[t.id]}},set:function(e,t){return g(this,e,t)}}:{add:function(e){return g(this,e,!0)}}),d}}},16468:function(e,t,n){"use strict";var r=n(46518),i=n(22195),o=n(79504),a=n(92796),s=n(36840),c=n(3451),l=n(72652),u=n(90679),d=n(94901),h=n(64117),f=n(20034),p=n(79039),m=n(84428),v=n(10687),g=n(23167);e.exports=function(e,t,n){var y=-1!==e.indexOf("Map"),_=-1!==e.indexOf("Weak"),b=y?"set":"add",M=i[e],A=M&&M.prototype,w=M,x={},k=function(e){var t=o(A[e]);s(A,e,"add"===e?function(e){return t(this,0===e?0:e),this}:"delete"===e?function(e){return!(_&&!f(e))&&t(this,0===e?0:e)}:"get"===e?function(e){return _&&!f(e)?void 0:t(this,0===e?0:e)}:"has"===e?function(e){return!(_&&!f(e))&&t(this,0===e?0:e)}:function(e,n){return t(this,0===e?0:e,n),this})},L=a(e,!d(M)||!(_||A.forEach&&!p(function(){(new M).entries().next()})));if(L)w=n.getConstructor(t,e,y,b),c.enable();else if(a(e,!0)){var C=new w,S=C[b](_?{}:-0,1)!==C,z=p(function(){C.has(1)}),T=m(function(e){new M(e)}),O=!_&&p(function(){var e=new M,t=5;while(t--)e[b](t,t);return!e.has(-0)});T||(w=t(function(e,t){u(e,A);var n=g(new M,e,w);return h(t)||l(t,n[b],{that:n,AS_ENTRIES:y}),n}),w.prototype=A,A.constructor=w),(z||O)&&(k("delete"),k("has"),y&&k("get")),(O||S)&&k(b),_&&A.clear&&delete A.clear}return x[e]=w,r({global:!0,constructor:!0,forced:w!==M},x),v(w,e),_||n.setStrong(w,e,y),w}},77740:function(e,t,n){"use strict";var r=n(39297),i=n(35031),o=n(77347),a=n(24913);e.exports=function(e,t,n){for(var s=i(t),c=a.f,l=o.f,u=0;u"+c+""}},62529:function(e){"use strict";e.exports=function(e,t){return{value:e,done:t}}},66699:function(e,t,n){"use strict";var r=n(43724),i=n(24913),o=n(6980);e.exports=r?function(e,t,n){return i.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},6980:function(e){"use strict";e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},97040:function(e,t,n){"use strict";var r=n(43724),i=n(24913),o=n(6980);e.exports=function(e,t,n){r?i.f(e,t,o(0,n)):e[t]=n}},53640:function(e,t,n){"use strict";var r=n(28551),i=n(84270),o=TypeError;e.exports=function(e){if(r(this),"string"===e||"default"===e)e="string";else if("number"!==e)throw new o("Incorrect hint");return i(this,e)}},62106:function(e,t,n){"use strict";var r=n(50283),i=n(24913);e.exports=function(e,t,n){return n.get&&r(n.get,t,{getter:!0}),n.set&&r(n.set,t,{setter:!0}),i.f(e,t,n)}},36840:function(e,t,n){"use strict";var r=n(94901),i=n(24913),o=n(50283),a=n(39433);e.exports=function(e,t,n,s){s||(s={});var c=s.enumerable,l=void 0!==s.name?s.name:t;if(r(n)&&o(n,l,s),s.global)c?e[t]=n:a(t,n);else{try{s.unsafe?e[t]&&(c=!0):delete e[t]}catch(u){}c?e[t]=n:i.f(e,t,{value:n,enumerable:!1,configurable:!s.nonConfigurable,writable:!s.nonWritable})}return e}},56279:function(e,t,n){"use strict";var r=n(36840);e.exports=function(e,t,n){for(var i in t)r(e,i,t[i],n);return e}},39433:function(e,t,n){"use strict";var r=n(22195),i=Object.defineProperty;e.exports=function(e,t){try{i(r,e,{value:t,configurable:!0,writable:!0})}catch(n){r[e]=t}return t}},84606:function(e,t,n){"use strict";var r=n(16823),i=TypeError;e.exports=function(e,t){if(!delete e[t])throw new i("Cannot delete property "+r(t)+" of "+r(e))}},43724:function(e,t,n){"use strict";var r=n(79039);e.exports=!r(function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]})},4055:function(e,t,n){"use strict";var r=n(22195),i=n(20034),o=r.document,a=i(o)&&i(o.createElement);e.exports=function(e){return a?o.createElement(e):{}}},96837:function(e){"use strict";var t=TypeError,n=9007199254740991;e.exports=function(e){if(e>n)throw new t("Maximum allowed index exceeded");return e}},67400:function(e){"use strict";e.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},79296:function(e,t,n){"use strict";var r=n(4055),i=r("span").classList,o=i&&i.constructor&&i.constructor.prototype;e.exports=o===Object.prototype?void 0:o},88727:function(e){"use strict";e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},13709:function(e,t,n){"use strict";var r=n(82839),i=r.match(/firefox\/(\d+)/i);e.exports=!!i&&+i[1]},13763:function(e,t,n){"use strict";var r=n(82839);e.exports=/MSIE|Trident/.test(r)},44265:function(e,t,n){"use strict";var r=n(82839);e.exports=/ipad|iphone|ipod/i.test(r)&&"undefined"!=typeof Pebble},89544:function(e,t,n){"use strict";var r=n(82839);e.exports=/ipad|iphone|ipod/i.test(r)&&/applewebkit/i.test(r)},16193:function(e,t,n){"use strict";var r=n(84215);e.exports="NODE"===r},7860:function(e,t,n){"use strict";var r=n(82839);e.exports=/web0s(?!.*chrome)/i.test(r)},82839:function(e,t,n){"use strict";var r=n(22195),i=r.navigator,o=i&&i.userAgent;e.exports=o?String(o):""},39519:function(e,t,n){"use strict";var r,i,o=n(22195),a=n(82839),s=o.process,c=o.Deno,l=s&&s.versions||c&&c.version,u=l&&l.v8;u&&(r=u.split("."),i=r[0]>0&&r[0]<4?1:+(r[0]+r[1])),!i&&a&&(r=a.match(/Edge\/(\d+)/),(!r||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/),r&&(i=+r[1]))),e.exports=i},3607:function(e,t,n){"use strict";var r=n(82839),i=r.match(/AppleWebKit\/(\d+)\./);e.exports=!!i&&+i[1]},84215:function(e,t,n){"use strict";var r=n(22195),i=n(82839),o=n(44576),a=function(e){return i.slice(0,e.length)===e};e.exports=function(){return a("Bun/")?"BUN":a("Cloudflare-Workers")?"CLOUDFLARE":a("Deno/")?"DENO":a("Node.js/")?"NODE":r.Bun&&"string"==typeof Bun.version?"BUN":r.Deno&&"object"==typeof Deno.version?"DENO":"process"===o(r.process)?"NODE":r.window&&r.document?"BROWSER":"REST"}()},46518:function(e,t,n){"use strict";var r=n(22195),i=n(77347).f,o=n(66699),a=n(36840),s=n(39433),c=n(77740),l=n(92796);e.exports=function(e,t){var n,u,d,h,f,p,m=e.target,v=e.global,g=e.stat;if(u=v?r:g?r[m]||s(m,{}):r[m]&&r[m].prototype,u)for(d in t){if(f=t[d],e.dontCallGetSet?(p=i(u,d),h=p&&p.value):h=u[d],n=l(v?d:m+(g?".":"#")+d,e.forced),!n&&void 0!==h){if(typeof f==typeof h)continue;c(f,h)}(e.sham||h&&h.sham)&&o(f,"sham",!0),a(u,d,f,e)}}},79039:function(e){"use strict";e.exports=function(e){try{return!!e()}catch(t){return!0}}},89228:function(e,t,n){"use strict";n(27495);var r=n(69565),i=n(36840),o=n(57323),a=n(79039),s=n(78227),c=n(66699),l=s("species"),u=RegExp.prototype;e.exports=function(e,t,n,d){var h=s(e),f=!a(function(){var t={};return t[h]=function(){return 7},7!==""[e](t)}),p=f&&!a(function(){var t=!1,n=/a/;if("split"===e){var r={};r[l]=function(){return n},n={constructor:r,flags:""},n[h]=/./[h]}return n.exec=function(){return t=!0,null},n[h](""),!t});if(!f||!p||n){var m=/./[h],v=t(h,""[e],function(e,t,n,i,a){var s=t.exec;return s===o||s===u.exec?f&&!a?{done:!0,value:r(m,t,n,i)}:{done:!0,value:r(e,n,t,i)}:{done:!1}});i(String.prototype,e,v[0]),i(u,h,v[1])}d&&c(u[h],"sham",!0)}},70259:function(e,t,n){"use strict";var r=n(34376),i=n(26198),o=n(96837),a=n(76080),s=n(97040),c=function(e,t,n,l,u,d,h,f){var p,m,v=u,g=0,y=!!h&&a(h,f);while(g0&&r(p)?(m=i(p),v=c(e,t,p,m,v,d-1)-1):(o(v+1),s(e,v,p)),v++),g++;return v};e.exports=c},92744:function(e,t,n){"use strict";var r=n(79039);e.exports=!r(function(){return Object.isExtensible(Object.preventExtensions({}))})},18745:function(e,t,n){"use strict";var r=n(40616),i=Function.prototype,o=i.apply,a=i.call;e.exports="object"==typeof Reflect&&Reflect.apply||(r?a.bind(o):function(){return a.apply(o,arguments)})},76080:function(e,t,n){"use strict";var r=n(27476),i=n(79306),o=n(40616),a=r(r.bind);e.exports=function(e,t){return i(e),void 0===t?e:o?a(e,t):function(){return e.apply(t,arguments)}}},40616:function(e,t,n){"use strict";var r=n(79039);e.exports=!r(function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")})},30566:function(e,t,n){"use strict";var r=n(79504),i=n(79306),o=n(20034),a=n(39297),s=n(67680),c=n(40616),l=Function,u=r([].concat),d=r([].join),h={},f=function(e,t,n){if(!a(h,t)){for(var r=[],i=0;i]*>)/g,u=/\$([$&'`]|\d{1,2})/g;e.exports=function(e,t,n,r,d,h){var f=n+e.length,p=r.length,m=u;return void 0!==d&&(d=i(d),m=l),s(h,m,function(i,s){var l;switch(a(s,0)){case"$":return"$";case"&":return e;case"`":return c(t,0,n);case"'":return c(t,f);case"<":l=d[c(s,1,-1)];break;default:var u=+s;if(0===u)return i;if(u>p){var h=o(u/10);return 0===h?i:h<=p?void 0===r[h-1]?a(s,1):r[h-1]+a(s,1):i}l=r[u-1]}return void 0===l?"":l})}},22195:function(e,t,n){"use strict";var r=function(e){return e&&e.Math===Math&&e};e.exports=r("object"==typeof globalThis&&globalThis)||r("object"==typeof window&&window)||r("object"==typeof self&&self)||r("object"==typeof n.g&&n.g)||r("object"==typeof this&&this)||function(){return this}()||Function("return this")()},39297:function(e,t,n){"use strict";var r=n(79504),i=n(48981),o=r({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return o(i(e),t)}},30421:function(e){"use strict";e.exports={}},90757:function(e){"use strict";e.exports=function(e,t){try{1===arguments.length?console.error(e):console.error(e,t)}catch(n){}}},20397:function(e,t,n){"use strict";var r=n(97751);e.exports=r("document","documentElement")},35917:function(e,t,n){"use strict";var r=n(43724),i=n(79039),o=n(4055);e.exports=!r&&!i(function(){return 7!==Object.defineProperty(o("div"),"a",{get:function(){return 7}}).a})},88490:function(e){"use strict";var t=Array,n=Math.abs,r=Math.pow,i=Math.floor,o=Math.log,a=Math.LN2,s=function(e,s,c){var l,u,d,h=t(c),f=8*c-s-1,p=(1<>1,v=23===s?r(2,-24)-r(2,-77):0,g=e<0||0===e&&1/e<0?1:0,y=0;e=n(e),e!==e||e===1/0?(u=e!==e?1:0,l=p):(l=i(o(e)/a),d=r(2,-l),e*d<1&&(l--,d*=2),e+=l+m>=1?v/d:v*r(2,1-m),e*d>=2&&(l++,d/=2),l+m>=p?(u=0,l=p):l+m>=1?(u=(e*d-1)*r(2,s),l+=m):(u=e*r(2,m-1)*r(2,s),l=0));while(s>=8)h[y++]=255&u,u/=256,s-=8;l=l<0)h[y++]=255&l,l/=256,f-=8;return h[y-1]|=128*g,h},c=function(e,t){var n,i=e.length,o=8*i-t-1,a=(1<>1,c=o-7,l=i-1,u=e[l--],d=127&u;u>>=7;while(c>0)d=256*d+e[l--],c-=8;n=d&(1<<-c)-1,d>>=-c,c+=t;while(c>0)n=256*n+e[l--],c-=8;if(0===d)d=1-s;else{if(d===a)return n?NaN:u?-1/0:1/0;n+=r(2,t),d-=s}return(u?-1:1)*n*r(2,d-t)};e.exports={pack:s,unpack:c}},47055:function(e,t,n){"use strict";var r=n(79504),i=n(79039),o=n(44576),a=Object,s=r("".split);e.exports=i(function(){return!a("z").propertyIsEnumerable(0)})?function(e){return"String"===o(e)?s(e,""):a(e)}:a},23167:function(e,t,n){"use strict";var r=n(94901),i=n(20034),o=n(52967);e.exports=function(e,t,n){var a,s;return o&&r(a=t.constructor)&&a!==n&&i(s=a.prototype)&&s!==n.prototype&&o(e,s),e}},33706:function(e,t,n){"use strict";var r=n(79504),i=n(94901),o=n(77629),a=r(Function.toString);i(o.inspectSource)||(o.inspectSource=function(e){return a(e)}),e.exports=o.inspectSource},3451:function(e,t,n){"use strict";var r=n(46518),i=n(79504),o=n(30421),a=n(20034),s=n(39297),c=n(24913).f,l=n(38480),u=n(10298),d=n(34124),h=n(33392),f=n(92744),p=!1,m=h("meta"),v=0,g=function(e){c(e,m,{value:{objectID:"O"+v++,weakData:{}}})},y=function(e,t){if(!a(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!s(e,m)){if(!d(e))return"F";if(!t)return"E";g(e)}return e[m].objectID},_=function(e,t){if(!s(e,m)){if(!d(e))return!0;if(!t)return!1;g(e)}return e[m].weakData},b=function(e){return f&&p&&d(e)&&!s(e,m)&&g(e),e},M=function(){A.enable=function(){},p=!0;var e=l.f,t=i([].splice),n={};n[m]=1,e(n).length&&(l.f=function(n){for(var r=e(n),i=0,o=r.length;iy;y++)if(b=T(e[y]),b&&l(m,b))return b;return new p(!1)}v=u(e,g)}M=k?e.next:v.next;while(!(A=i(M,v)).done){var O=A.value;try{b=T(O)}catch(H){if(!v)throw H;h(v,"throw",H)}if("object"==typeof b&&b&&l(m,b))return b}return new p(!1)}},9539:function(e,t,n){"use strict";var r=n(69565),i=n(28551),o=n(55966);e.exports=function(e,t,n){var a,s;i(e);try{if(a=o(e,"return"),!a){if("throw"===t)throw n;return n}a=r(a,e)}catch(c){s=!0,a=c}if("throw"===t)throw n;if(s)throw a;return i(a),n}},33994:function(e,t,n){"use strict";var r=n(57657).IteratorPrototype,i=n(2360),o=n(6980),a=n(10687),s=n(26269),c=function(){return this};e.exports=function(e,t,n,l){var u=t+" Iterator";return e.prototype=i(r,{next:o(+!l,n)}),a(e,u,!1,!0),s[u]=c,e}},51088:function(e,t,n){"use strict";var r=n(46518),i=n(69565),o=n(96395),a=n(10350),s=n(94901),c=n(33994),l=n(42787),u=n(52967),d=n(10687),h=n(66699),f=n(36840),p=n(78227),m=n(26269),v=n(57657),g=a.PROPER,y=a.CONFIGURABLE,_=v.IteratorPrototype,b=v.BUGGY_SAFARI_ITERATORS,M=p("iterator"),A="keys",w="values",x="entries",k=function(){return this};e.exports=function(e,t,n,a,p,v,L){c(n,t,a);var C,S,z,T=function(e){if(e===p&&V)return V;if(!b&&e&&e in D)return D[e];switch(e){case A:return function(){return new n(this,e)};case w:return function(){return new n(this,e)};case x:return function(){return new n(this,e)}}return function(){return new n(this)}},O=t+" Iterator",H=!1,D=e.prototype,Y=D[M]||D["@@iterator"]||p&&D[p],V=!b&&Y||T(p),P="Array"===t&&D.entries||Y;if(P&&(C=l(P.call(new e)),C!==Object.prototype&&C.next&&(o||l(C)===_||(u?u(C,_):s(C[M])||f(C,M,k)),d(C,O,!0,!0),o&&(m[O]=k))),g&&p===w&&Y&&Y.name!==w&&(!o&&y?h(D,"name",w):(H=!0,V=function(){return i(Y,this)})),p)if(S={values:T(w),keys:v?V:T(A),entries:T(x)},L)for(z in S)(b||H||!(z in D))&&f(D,z,S[z]);else r({target:t,proto:!0,forced:b||H},S);return o&&!L||D[M]===V||f(D,M,V,{name:p}),m[t]=V,S}},57657:function(e,t,n){"use strict";var r,i,o,a=n(79039),s=n(94901),c=n(20034),l=n(2360),u=n(42787),d=n(36840),h=n(78227),f=n(96395),p=h("iterator"),m=!1;[].keys&&(o=[].keys(),"next"in o?(i=u(u(o)),i!==Object.prototype&&(r=i)):m=!0);var v=!c(r)||a(function(){var e={};return r[p].call(e)!==e});v?r={}:f&&(r=l(r)),s(r[p])||d(r,p,function(){return this}),e.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:m}},26269:function(e){"use strict";e.exports={}},26198:function(e,t,n){"use strict";var r=n(18014);e.exports=function(e){return r(e.length)}},50283:function(e,t,n){"use strict";var r=n(79504),i=n(79039),o=n(94901),a=n(39297),s=n(43724),c=n(10350).CONFIGURABLE,l=n(33706),u=n(91181),d=u.enforce,h=u.get,f=String,p=Object.defineProperty,m=r("".slice),v=r("".replace),g=r([].join),y=s&&!i(function(){return 8!==p(function(){},"length",{value:8}).length}),_=String(String).split("String"),b=e.exports=function(e,t,n){"Symbol("===m(f(t),0,7)&&(t="["+v(f(t),/^Symbol\(([^)]*)\).*$/,"$1")+"]"),n&&n.getter&&(t="get "+t),n&&n.setter&&(t="set "+t),(!a(e,"name")||c&&e.name!==t)&&(s?p(e,"name",{value:t,configurable:!0}):e.name=t),y&&n&&a(n,"arity")&&e.length!==n.arity&&p(e,"length",{value:n.arity});try{n&&a(n,"constructor")&&n.constructor?s&&p(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(i){}var r=d(e);return a(r,"source")||(r.source=g(_,"string"==typeof t?t:"")),e};Function.prototype.toString=b(function(){return o(this)&&h(this).source||l(this)},"toString")},53250:function(e){"use strict";var t=Math.expm1,n=Math.exp;e.exports=!t||t(10)>22025.465794806718||t(10)<22025.465794806718||-2e-17!==t(-2e-17)?function(e){var t=+e;return 0===t?t:t>-1e-6&&t<1e-6?t+t*t/2:n(t)-1}:t},33164:function(e,t,n){"use strict";var r=n(77782),i=n(53602),o=Math.abs,a=2220446049250313e-31;e.exports=function(e,t,n,s){var c=+e,l=o(c),u=r(c);if(ln||h!==h?u*(1/0):u*h}},15617:function(e,t,n){"use strict";var r=n(33164),i=1.1920928955078125e-7,o=34028234663852886e22,a=11754943508222875e-54;e.exports=Math.fround||function(e){return r(e,i,o,a)}},49340:function(e){"use strict";var t=Math.log,n=Math.LOG10E;e.exports=Math.log10||function(e){return t(e)*n}},7740:function(e){"use strict";var t=Math.log;e.exports=Math.log1p||function(e){var n=+e;return n>-1e-8&&n<1e-8?n-n*n/2:t(1+n)}},67787:function(e){"use strict";var t=Math.log,n=Math.LN2;e.exports=Math.log2||function(e){return t(e)/n}},53602:function(e){"use strict";var t=2220446049250313e-31,n=1/t;e.exports=function(e){return e+n-n}},77782:function(e){"use strict";e.exports=Math.sign||function(e){var t=+e;return 0===t||t!==t?t:t<0?-1:1}},80741:function(e){"use strict";var t=Math.ceil,n=Math.floor;e.exports=Math.trunc||function(e){var r=+e;return(r>0?n:t)(r)}},91955:function(e,t,n){"use strict";var r,i,o,a,s,c=n(22195),l=n(93389),u=n(76080),d=n(59225).set,h=n(18265),f=n(89544),p=n(44265),m=n(7860),v=n(16193),g=c.MutationObserver||c.WebKitMutationObserver,y=c.document,_=c.process,b=c.Promise,M=l("queueMicrotask");if(!M){var A=new h,w=function(){var e,t;v&&(e=_.domain)&&e.exit();while(t=A.get())try{t()}catch(n){throw A.head&&r(),n}e&&e.enter()};f||v||m||!g||!y?!p&&b&&b.resolve?(a=b.resolve(void 0),a.constructor=b,s=u(a.then,a),r=function(){s(w)}):v?r=function(){_.nextTick(w)}:(d=u(d,c),r=function(){d(w)}):(i=!0,o=y.createTextNode(""),new g(w).observe(o,{characterData:!0}),r=function(){o.data=i=!i}),M=function(e){A.head||r(),A.add(e)}}e.exports=M},27819:function(e,t,n){"use strict";var r=n(79039);e.exports=!r(function(){var e="9007199254740993",t=JSON.rawJSON(e);return!JSON.isRawJSON(t)||JSON.stringify(t)!==e})},36043:function(e,t,n){"use strict";var r=n(79306),i=TypeError,o=function(e){var t,n;this.promise=new e(function(e,r){if(void 0!==t||void 0!==n)throw new i("Bad Promise constructor");t=e,n=r}),this.resolve=r(t),this.reject=r(n)};e.exports.f=function(e){return new o(e)}},60511:function(e,t,n){"use strict";var r=n(60788),i=TypeError;e.exports=function(e){if(r(e))throw new i("The method doesn't accept regular expressions");return e}},50360:function(e,t,n){"use strict";var r=n(22195),i=r.isFinite;e.exports=Number.isFinite||function(e){return"number"==typeof e&&i(e)}},33904:function(e,t,n){"use strict";var r=n(22195),i=n(79039),o=n(79504),a=n(655),s=n(43802).trim,c=n(47452),l=o("".charAt),u=r.parseFloat,d=r.Symbol,h=d&&d.iterator,f=1/u(c+"-0")!==-1/0||h&&!i(function(){u(Object(h))});e.exports=f?function(e){var t=s(a(e)),n=u(t);return 0===n&&"-"===l(t,0)?-0:n}:u},52703:function(e,t,n){"use strict";var r=n(22195),i=n(79039),o=n(79504),a=n(655),s=n(43802).trim,c=n(47452),l=r.parseInt,u=r.Symbol,d=u&&u.iterator,h=/^[+-]?0x/i,f=o(h.exec),p=8!==l(c+"08")||22!==l(c+"0x16")||d&&!i(function(){l(Object(d))});e.exports=p?function(e,t){var n=s(a(e));return l(n,t>>>0||(f(h,n)?16:10))}:l},44213:function(e,t,n){"use strict";var r=n(43724),i=n(79504),o=n(69565),a=n(79039),s=n(71072),c=n(33717),l=n(48773),u=n(48981),d=n(47055),h=Object.assign,f=Object.defineProperty,p=i([].concat);e.exports=!h||a(function(){if(r&&1!==h({b:1},h(f({},"a",{enumerable:!0,get:function(){f(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},n=Symbol("assign detection"),i="abcdefghijklmnopqrst";return e[n]=7,i.split("").forEach(function(e){t[e]=e}),7!==h({},e)[n]||s(h({},t)).join("")!==i})?function(e,t){var n=u(e),i=arguments.length,a=1,h=c.f,f=l.f;while(i>a){var m,v=d(arguments[a++]),g=h?p(s(v),h(v)):s(v),y=g.length,_=0;while(y>_)m=g[_++],r&&!o(f,v,m)||(n[m]=v[m])}return n}:h},2360:function(e,t,n){"use strict";var r,i=n(28551),o=n(96801),a=n(88727),s=n(30421),c=n(20397),l=n(4055),u=n(66119),d=">",h="<",f="prototype",p="script",m=u("IE_PROTO"),v=function(){},g=function(e){return h+p+d+e+h+"/"+p+d},y=function(e){e.write(g("")),e.close();var t=e.parentWindow.Object;return e=null,t},_=function(){var e,t=l("iframe"),n="java"+p+":";return t.style.display="none",c.appendChild(t),t.src=String(n),e=t.contentWindow.document,e.open(),e.write(g("document.F=Object")),e.close(),e.F},b=function(){try{r=new ActiveXObject("htmlfile")}catch(t){}b="undefined"!=typeof document?document.domain&&r?y(r):_():y(r);var e=a.length;while(e--)delete b[f][a[e]];return b()};s[m]=!0,e.exports=Object.create||function(e,t){var n;return null!==e?(v[f]=i(e),n=new v,v[f]=null,n[m]=e):n=b(),void 0===t?n:o.f(n,t)}},96801:function(e,t,n){"use strict";var r=n(43724),i=n(48686),o=n(24913),a=n(28551),s=n(25397),c=n(71072);t.f=r&&!i?Object.defineProperties:function(e,t){a(e);var n,r=s(t),i=c(t),l=i.length,u=0;while(l>u)o.f(e,n=i[u++],r[n]);return e}},24913:function(e,t,n){"use strict";var r=n(43724),i=n(35917),o=n(48686),a=n(28551),s=n(56969),c=TypeError,l=Object.defineProperty,u=Object.getOwnPropertyDescriptor,d="enumerable",h="configurable",f="writable";t.f=r?o?function(e,t,n){if(a(e),t=s(t),a(n),"function"===typeof e&&"prototype"===t&&"value"in n&&f in n&&!n[f]){var r=u(e,t);r&&r[f]&&(e[t]=n.value,n={configurable:h in n?n[h]:r[h],enumerable:d in n?n[d]:r[d],writable:!1})}return l(e,t,n)}:l:function(e,t,n){if(a(e),t=s(t),a(n),i)try{return l(e,t,n)}catch(r){}if("get"in n||"set"in n)throw new c("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},77347:function(e,t,n){"use strict";var r=n(43724),i=n(69565),o=n(48773),a=n(6980),s=n(25397),c=n(56969),l=n(39297),u=n(35917),d=Object.getOwnPropertyDescriptor;t.f=r?d:function(e,t){if(e=s(e),t=c(t),u)try{return d(e,t)}catch(n){}if(l(e,t))return a(!i(o.f,e,t),e[t])}},10298:function(e,t,n){"use strict";var r=n(44576),i=n(25397),o=n(38480).f,a=n(67680),s="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],c=function(e){try{return o(e)}catch(t){return a(s)}};e.exports.f=function(e){return s&&"Window"===r(e)?c(e):o(i(e))}},38480:function(e,t,n){"use strict";var r=n(61828),i=n(88727),o=i.concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return r(e,o)}},33717:function(e,t){"use strict";t.f=Object.getOwnPropertySymbols},42787:function(e,t,n){"use strict";var r=n(39297),i=n(94901),o=n(48981),a=n(66119),s=n(12211),c=a("IE_PROTO"),l=Object,u=l.prototype;e.exports=s?l.getPrototypeOf:function(e){var t=o(e);if(r(t,c))return t[c];var n=t.constructor;return i(n)&&t instanceof n?n.prototype:t instanceof l?u:null}},34124:function(e,t,n){"use strict";var r=n(79039),i=n(20034),o=n(44576),a=n(15652),s=Object.isExtensible,c=r(function(){s(1)});e.exports=c||a?function(e){return!!i(e)&&((!a||"ArrayBuffer"!==o(e))&&(!s||s(e)))}:s},1625:function(e,t,n){"use strict";var r=n(79504);e.exports=r({}.isPrototypeOf)},61828:function(e,t,n){"use strict";var r=n(79504),i=n(39297),o=n(25397),a=n(19617).indexOf,s=n(30421),c=r([].push);e.exports=function(e,t){var n,r=o(e),l=0,u=[];for(n in r)!i(s,n)&&i(r,n)&&c(u,n);while(t.length>l)i(r,n=t[l++])&&(~a(u,n)||c(u,n));return u}},71072:function(e,t,n){"use strict";var r=n(61828),i=n(88727);e.exports=Object.keys||function(e){return r(e,i)}},48773:function(e,t){"use strict";var n={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,i=r&&!n.call({1:2},1);t.f=i?function(e){var t=r(this,e);return!!t&&t.enumerable}:n},42551:function(e,t,n){"use strict";var r=n(96395),i=n(22195),o=n(79039),a=n(3607);e.exports=r||!o(function(){if(!(a&&a<535)){var e=Math.random();__defineSetter__.call(null,e,function(){}),delete i[e]}})},52967:function(e,t,n){"use strict";var r=n(46706),i=n(20034),o=n(67750),a=n(73506);e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,n={};try{e=r(Object.prototype,"__proto__","set"),e(n,[]),t=n instanceof Array}catch(s){}return function(n,r){return o(n),a(r),i(n)?(t?e(n,r):n.__proto__=r,n):n}}():void 0)},32357:function(e,t,n){"use strict";var r=n(43724),i=n(79039),o=n(79504),a=n(42787),s=n(71072),c=n(25397),l=n(48773).f,u=o(l),d=o([].push),h=r&&i(function(){var e=Object.create(null);return e[2]=2,!u(e,2)}),f=function(e){return function(t){var n,i=c(t),o=s(i),l=h&&null===a(i),f=o.length,p=0,m=[];while(f>p)n=o[p++],r&&!(l?n in i:u(i,n))||d(m,e?[n,i[n]]:i[n]);return m}};e.exports={entries:f(!0),values:f(!1)}},53179:function(e,t,n){"use strict";var r=n(92140),i=n(36955);e.exports=r?{}.toString:function(){return"[object "+i(this)+"]"}},84270:function(e,t,n){"use strict";var r=n(69565),i=n(94901),o=n(20034),a=TypeError;e.exports=function(e,t){var n,s;if("string"===t&&i(n=e.toString)&&!o(s=r(n,e)))return s;if(i(n=e.valueOf)&&!o(s=r(n,e)))return s;if("string"!==t&&i(n=e.toString)&&!o(s=r(n,e)))return s;throw new a("Can't convert object to primitive value")}},35031:function(e,t,n){"use strict";var r=n(97751),i=n(79504),o=n(38480),a=n(33717),s=n(28551),c=i([].concat);e.exports=r("Reflect","ownKeys")||function(e){var t=o.f(s(e)),n=a.f;return n?c(t,n(e)):t}},616:function(e,t,n){"use strict";var r=n(79504),i=n(39297),o=SyntaxError,a=parseInt,s=String.fromCharCode,c=r("".charAt),l=r("".slice),u=r(/./.exec),d={'\\"':'"',"\\\\":"\\","\\/":"/","\\b":"\b","\\f":"\f","\\n":"\n","\\r":"\r","\\t":"\t"},h=/^[\da-f]{4}$/i,f=/^[\u0000-\u001F]$/;e.exports=function(e,t){var n=!0,r="";while(t0&&v(l,s.lastIndex-1);s.lastIndex>0&&(!s.multiline||s.multiline&&"\n"!==z&&"\r"!==z&&"\u2028"!==z&&"\u2029"!==z)&&(L="(?: (?:"+L+"))",S=" "+S,C++),n=new RegExp("^(?:"+L+")",k)}A&&(n=new RegExp("^"+L+"$(?!\\s)",k)),b&&(i=s.lastIndex);var T=r(p,w?n:s,S);return w?T?(T.input=l,T[0]=_(T[0],C),T.index=s.lastIndex,s.lastIndex+=T[0].length):s.lastIndex=0:b&&T&&(s.lastIndex=s.global?T.index+T[0].length:i),A&&T&&T.length>1&&r(f,T[0],n,function(){for(var e=1;eb)","g");return"b"!==e.exec("b").groups.a||"bc"!=="b".replace(e,"$c")})},67750:function(e,t,n){"use strict";var r=n(64117),i=TypeError;e.exports=function(e){if(r(e))throw new i("Can't call method on "+e);return e}},93389:function(e,t,n){"use strict";var r=n(22195),i=n(43724),o=Object.getOwnPropertyDescriptor;e.exports=function(e){if(!i)return r[e];var t=o(r,e);return t&&t.value}},3470:function(e){"use strict";e.exports=Object.is||function(e,t){return e===t?0!==e||1/e===1/t:e!==e&&t!==t}},79472:function(e,t,n){"use strict";var r=n(22195),i=n(18745),o=n(94901),a=n(84215),s=n(82839),c=n(67680),l=n(22812),u=r.Function,d=/MSIE .\./.test(s)||"BUN"===a&&function(){var e=r.Bun.version.split(".");return e.length<3||"0"===e[0]&&(e[1]<3||"3"===e[1]&&"0"===e[2])}();e.exports=function(e,t){var n=t?2:1;return d?function(r,a){var s=l(arguments.length,1)>n,d=o(r)?r:u(r),h=s?c(arguments,n):[],f=s?function(){i(d,this,h)}:d;return t?e(f,a):e(f)}:e}},87633:function(e,t,n){"use strict";var r=n(97751),i=n(62106),o=n(78227),a=n(43724),s=o("species");e.exports=function(e){var t=r(e);a&&t&&!t[s]&&i(t,s,{configurable:!0,get:function(){return this}})}},10687:function(e,t,n){"use strict";var r=n(24913).f,i=n(39297),o=n(78227),a=o("toStringTag");e.exports=function(e,t,n){e&&!n&&(e=e.prototype),e&&!i(e,a)&&r(e,a,{configurable:!0,value:t})}},66119:function(e,t,n){"use strict";var r=n(25745),i=n(33392),o=r("keys");e.exports=function(e){return o[e]||(o[e]=i(e))}},77629:function(e,t,n){"use strict";var r=n(96395),i=n(22195),o=n(39433),a="__core-js_shared__",s=e.exports=i[a]||o(a,{});(s.versions||(s.versions=[])).push({version:"3.49.0",mode:r?"pure":"global",copyright:"© 2013–2025 Denis Pushkarev (zloirock.ru), 2025–2026 CoreJS Company (core-js.io). All rights reserved.",license:"https://github.com/zloirock/core-js/blob/v3.49.0/LICENSE",source:"https://github.com/zloirock/core-js"})},25745:function(e,t,n){"use strict";var r=n(77629);e.exports=function(e,t){return r[e]||(r[e]=t||{})}},2293:function(e,t,n){"use strict";var r=n(28551),i=n(35548),o=n(64117),a=n(78227),s=a("species");e.exports=function(e,t){var n,a=r(e).constructor;return void 0===a||o(n=r(a)[s])?t:i(n)}},23061:function(e,t,n){"use strict";var r=n(79039);e.exports=function(e){return r(function(){var t=""[e]('"');return t!==t.toLowerCase()||t.split('"').length>3})}},68183:function(e,t,n){"use strict";var r=n(79504),i=n(91291),o=n(655),a=n(67750),s=r("".charAt),c=r("".charCodeAt),l=r("".slice),u=function(e){return function(t,n){var r,u,d=o(a(t)),h=i(n),f=d.length;return h<0||h>=f?e?"":void 0:(r=c(d,h),r<55296||r>56319||h+1===f||(u=c(d,h+1))<56320||u>57343?e?s(d,h):r:e?l(d,h,h+2):u-56320+(r-55296<<10)+65536)}};e.exports={codeAt:u(!1),charAt:u(!0)}},83063:function(e,t,n){"use strict";var r=n(82839);e.exports=/Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\w+)? Safari\//.test(r)},60533:function(e,t,n){"use strict";var r=n(79504),i=n(18014),o=n(655),a=n(72333),s=n(67750),c=r(a),l=r("".slice),u=Math.ceil,d=function(e){return function(t,n,r){var a=o(s(t)),d=i(n),h=a.length;if(d<=h)return a;var f,p,m=void 0===r?" ":o(r);return""===m?a:(f=d-h,p=c(m,u(f/m.length)),p.length>f&&(p=l(p,0,f)),e?a+p:p+a)}};e.exports={start:d(!1),end:d(!0)}},3717:function(e,t,n){"use strict";var r=n(79504),i=2147483647,o=36,a=1,s=26,c=38,l=700,u=72,d=128,h="-",f=/[^\0-\u007E]/,p=/[.\u3002\uFF0E\uFF61]/g,m="Overflow: input needs wider integers to process",v=o-a,g=RangeError,y=r(p.exec),_=Math.floor,b=String.fromCharCode,M=r("".charCodeAt),A=r([].join),w=r([].push),x=r("".replace),k=r("".split),L=r("".toLowerCase),C=function(e){var t=[],n=0,r=e.length;while(n=55296&&i<=56319&&n>1,e+=_(e/t);while(e>v*s>>1)e=_(e/v),r+=o;return _(r+(v+1)*e/(e+c))},T=function(e){var t=[];e=C(e);var n,r,c=e.length,l=d,f=0,p=u;for(n=0;n=l&&r_((i-f)/x))throw new g(m);for(f+=(M-l)*x,l=M,n=0;ni)throw new g(m);if(r===l){var k=f,L=o;while(1){var T=L<=p?a:L>=p+s?s:L-p;if(k0;(c=s(c/2))&&(t+=t))c%2&&(n+=t);return n}},18866:function(e,t,n){"use strict";var r=n(43802).end,i=n(60706);e.exports=i("trimEnd")?function(){return r(this)}:"".trimEnd},60706:function(e,t,n){"use strict";var r=n(10350).PROPER,i=n(79039),o=n(47452),a="​…᠎";e.exports=function(e){return i(function(){return!!o[e]()||a[e]()!==a||r&&o[e].name!==e})}},53487:function(e,t,n){"use strict";var r=n(43802).start,i=n(60706);e.exports=i("trimStart")?function(){return r(this)}:"".trimStart},43802:function(e,t,n){"use strict";var r=n(79504),i=n(67750),o=n(655),a=n(47452),s=r("".replace),c=RegExp("^["+a+"]+"),l=RegExp("(^|[^"+a+"])["+a+"]+$"),u=function(e){return function(t){var n=o(i(t));return 1&e&&(n=s(n,c,"")),2&e&&(n=s(n,l,"$1")),n}};e.exports={start:u(1),end:u(2),trim:u(3)}},4495:function(e,t,n){"use strict";var r=n(39519),i=n(79039),o=n(22195),a=o.String;e.exports=!!Object.getOwnPropertySymbols&&!i(function(){var e=Symbol("symbol detection");return!a(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&r&&r<41})},58242:function(e,t,n){"use strict";var r=n(69565),i=n(97751),o=n(78227),a=n(36840);e.exports=function(){var e=i("Symbol"),t=e&&e.prototype,n=t&&t.valueOf,s=o("toPrimitive");t&&!t[s]&&a(t,s,function(e){return r(n,this)},{arity:1})}},91296:function(e,t,n){"use strict";var r=n(4495);e.exports=r&&!!Symbol["for"]&&!!Symbol.keyFor},59225:function(e,t,n){"use strict";var r,i,o,a,s=n(22195),c=n(18745),l=n(76080),u=n(94901),d=n(39297),h=n(79039),f=n(20397),p=n(67680),m=n(4055),v=n(22812),g=n(89544),y=n(16193),_=s.setImmediate,b=s.clearImmediate,M=s.process,A=s.Dispatch,w=s.Function,x=s.MessageChannel,k=s.String,L=0,C={},S="onreadystatechange";h(function(){r=s.location});var z=function(e){if(d(C,e)){var t=C[e];delete C[e],t()}},T=function(e){return function(){z(e)}},O=function(e){z(e.data)},H=function(e){s.postMessage(k(e),r.protocol+"//"+r.host)};_&&b||(_=function(e){v(arguments.length,1);var t=u(e)?e:w(e),n=p(arguments,1);return C[++L]=function(){c(t,void 0,n)},i(L),L},b=function(e){delete C[e]},y?i=function(e){M.nextTick(T(e))}:A&&A.now?i=function(e){A.now(T(e))}:x&&!g?(o=new x,a=o.port2,o.port1.onmessage=O,i=l(a.postMessage,a)):s.addEventListener&&u(s.postMessage)&&!s.importScripts&&r&&"file:"!==r.protocol&&!h(H)?(i=H,s.addEventListener("message",O,!1)):i=S in m("script")?function(e){f.appendChild(m("script"))[S]=function(){f.removeChild(this),z(e)}}:function(e){setTimeout(T(e),0)}),e.exports={set:_,clear:b}},31240:function(e,t,n){"use strict";var r=n(79504);e.exports=r(1.1.valueOf)},35610:function(e,t,n){"use strict";var r=n(91291),i=Math.max,o=Math.min;e.exports=function(e,t){var n=r(e);return n<0?i(n+t,0):o(n,t)}},75854:function(e,t,n){"use strict";var r=n(72777),i=TypeError;e.exports=function(e){var t=r(e,"number");if("number"==typeof t)throw new i("Can't convert number to bigint");return BigInt(t)}},57696:function(e,t,n){"use strict";var r=n(91291),i=n(18014),o=RangeError;e.exports=function(e){if(void 0===e)return 0;var t=r(e),n=i(t);if(t!==n)throw new o("Wrong length or index");return n}},25397:function(e,t,n){"use strict";var r=n(47055),i=n(67750);e.exports=function(e){return r(i(e))}},91291:function(e,t,n){"use strict";var r=n(80741);e.exports=function(e){var t=+e;return t!==t||0===t?0:r(t)}},18014:function(e,t,n){"use strict";var r=n(91291),i=Math.min;e.exports=function(e){var t=r(e);return t>0?i(t,9007199254740991):0}},48981:function(e,t,n){"use strict";var r=n(67750),i=Object;e.exports=function(e){return i(r(e))}},58229:function(e,t,n){"use strict";var r=n(99590),i=RangeError;e.exports=function(e,t){var n=r(e);if(n%t)throw new i("Wrong offset");return n}},99590:function(e,t,n){"use strict";var r=n(91291),i=RangeError;e.exports=function(e){var t=r(e);if(t<0)throw new i("The argument can't be less than 0");return t}},72777:function(e,t,n){"use strict";var r=n(69565),i=n(20034),o=n(10757),a=n(55966),s=n(84270),c=n(78227),l=TypeError,u=c("toPrimitive");e.exports=function(e,t){if(!i(e)||o(e))return e;var n,c=a(e,u);if(c){if(void 0===t&&(t="default"),n=r(c,e,t),!i(n)||o(n))return n;throw new l("Can't convert object to primitive value")}return void 0===t&&(t="number"),s(e,t)}},56969:function(e,t,n){"use strict";var r=n(72777),i=n(10757);e.exports=function(e){var t=r(e,"string");return i(t)?t:t+""}},92140:function(e,t,n){"use strict";var r=n(78227),i=r("toStringTag"),o={};o[i]="z",e.exports="[object z]"===String(o)},655:function(e,t,n){"use strict";var r=n(36955),i=String;e.exports=function(e){if("Symbol"===r(e))throw new TypeError("Cannot convert a Symbol value to a string");return i(e)}},58319:function(e){"use strict";var t=Math.floor;e.exports=function(e){var n=+e;if(n!==n||n<=0)return 0;if(n>=255)return 255;var r=t(n);return r+.5=0},ee=function(e,t){return t=g(t),Q(e,t)?d(2,e[t]):F(e,t)},te=function(e,t,n){return t=g(t),!(Q(e,t)&&b(n)&&y(n,"value"))||y(n,"get")||y(n,"set")||n.configurable||y(n,"writable")&&!n.writable||y(n,"enumerable")&&!n.enumerable?j(e,t,n):(e[t]=n.value,e)};a?(W||(O.f=ee,T.f=te,X(U,"buffer"),X(U,"byteOffset"),X(U,"byteLength"),X(U,"length")),r({target:"Object",stat:!0,forced:!W},{getOwnPropertyDescriptor:ee,defineProperty:te}),e.exports=function(e,t,n){var a=e.match(/\d+/)[0]/8,c=e+(n?"Clamped":"")+"Array",l="get"+e,d="set"+e,f=i[c],g=f,y=g&&g.prototype,_={},M=function(e,t){var n=V(e);return n.view[l](t*a+n.byteOffset,!0)},w=function(e,t,r){var i=V(e);i.view[d](t*a+i.byteOffset,n?v(r):r,!0)},z=function(e,t){j(e,t,{get:function(){return M(this,t)},set:function(e){return w(this,t,e)},enumerable:!0})};W?s&&(g=t(function(e,t,n,r){return u(e,y),Y(function(){return b(t)?Z(t)?void 0!==r?new f(t,m(n,a),r):void 0!==n?new f(t,m(n,a)):new f(t):q(t)?H(g,t):o(L,g,t):new f(p(t))}(),e,g)}),x&&x(g,K),C(k(f),function(e){e in g||h(g,e,f[e])}),g.prototype=y):(g=t(function(e,t,n,r){u(e,y);var i,s,c,l=0,d=0;if(b(t)){if(!Z(t))return q(t)?H(g,t):o(L,g,t);i=t,d=m(n,a);var h=t.byteLength;if(void 0===r){if(h%a)throw new I(J);if(s=h-d,s<0)throw new I(J)}else if(s=p(r)*a,s+d>h)throw new I(J);c=s/a}else c=p(t),s=c*a,i=new $(s);P(e,{buffer:i,byteOffset:d,byteLength:s,length:c,view:new N(i)});while(l1?arguments[1]:void 0,v=void 0!==m;v&&o(m);var g,y,_,b,M,A,w,x,k=s(e),L=u(k);if(L&&!d(L)){w=l(k,L),x=w.next,k=[];while(!(A=i(x,w)).done)k.push(A.value)}for(v&&n>2&&(m=r(m,arguments[2])),y=c(k),_=new(f(t))(y),b=h(_),g=0;y>g;g++)M=v?m(k[g],g):k[g],_[g]=b?p(M):+M;return _}},33392:function(e,t,n){"use strict";var r=n(79504),i=0,o=Math.random(),a=r(1.1.toString);e.exports=function(e){return"Symbol("+(void 0===e?"":e)+")_"+a(++i+o,36)}},67416:function(e,t,n){"use strict";var r=n(79039),i=n(78227),o=n(43724),a=n(96395),s=i("iterator");e.exports=!r(function(){var e=new URL("b?a=1&b=2&c=3","https://a"),t=e.searchParams,n=new URLSearchParams("a=1&a=2&b=3"),r="";return e.pathname="c%20d",t.forEach(function(e,n){t["delete"]("b"),r+=n+e}),n["delete"]("a",2),n["delete"]("b",void 0),a&&(!e.toJSON||!n.has("a",1)||n.has("a",2)||!n.has("a",void 0)||n.has("b"))||!t.size&&(a||!o)||!t.sort||"https://a/c%20d?a=1&c=3"!==e.href||"3"!==t.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!t[s]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("https://тест").host||"#%D0%B1"!==new URL("https://a#б").hash||"a1c3"!==r||"x"!==new URL("https://x",void 0).host})},7040:function(e,t,n){"use strict";var r=n(4495);e.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},48686:function(e,t,n){"use strict";var r=n(43724),i=n(79039);e.exports=r&&i(function(){return 42!==Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype})},22812:function(e){"use strict";var t=TypeError;e.exports=function(e,n){if(e=51||!i(function(){var e=[];return e[v]=!1,e.concat()[0]!==e}),y=function(e){if(!a(e))return!1;var t=e[v];return void 0!==t?!!t:o(e)},_=!g||!f("concat");r({target:"Array",proto:!0,arity:1,forced:_},{concat:function(e){var t,n,r,i,o,a=s(this),f=h(a,0),p=0;for(t=-1,r=arguments.length;t1?arguments[1]:void 0)}})},48980:function(e,t,n){"use strict";var r=n(46518),i=n(59213).findIndex,o=n(6469),a="findIndex",s=!0;a in[]&&Array(1)[a](function(){s=!1}),r({target:"Array",proto:!0,forced:s},{findIndex:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}}),o(a)},50113:function(e,t,n){"use strict";var r=n(46518),i=n(59213).find,o=n(6469),a="find",s=!0;a in[]&&Array(1)[a](function(){s=!1}),r({target:"Array",proto:!0,forced:s},{find:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}}),o(a)},78350:function(e,t,n){"use strict";var r=n(46518),i=n(70259),o=n(79306),a=n(48981),s=n(26198),c=n(1469);r({target:"Array",proto:!0},{flatMap:function(e){var t,n=a(this),r=s(n);return o(e),t=c(n,0),i(t,n,n,r,0,1,e,arguments.length>1?arguments[1]:void 0),t}})},46449:function(e,t,n){"use strict";var r=n(46518),i=n(70259),o=n(48981),a=n(26198),s=n(91291),c=n(1469);r({target:"Array",proto:!0},{flat:function(){var e=arguments.length?arguments[0]:void 0,t=o(this),n=a(t),r=void 0===e?1:s(e),l=c(t,0);return i(l,t,t,n,0,r),l}})},23418:function(e,t,n){"use strict";var r=n(46518),i=n(97916),o=n(84428),a=!o(function(e){Array.from(e)});r({target:"Array",stat:!0,forced:a},{from:i})},74423:function(e,t,n){"use strict";var r=n(46518),i=n(19617).includes,o=n(79039),a=n(6469),s=o(function(){return!Array(1).includes()}),c=o(function(){return[,1].includes(void 0,1)});r({target:"Array",proto:!0,forced:s||c},{includes:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}}),a("includes")},23792:function(e,t,n){"use strict";var r=n(25397),i=n(6469),o=n(26269),a=n(91181),s=n(24913).f,c=n(51088),l=n(62529),u=n(96395),d=n(43724),h="Array Iterator",f=a.set,p=a.getterFor(h);e.exports=c(Array,"Array",function(e,t){f(this,{type:h,target:r(e),index:0,kind:t})},function(){var e=p(this),t=e.target,n=e.index++;if(!t||n>=t.length)return e.target=null,l(void 0,!0);switch(e.kind){case"keys":return l(n,!1);case"values":return l(t[n],!1)}return l([n,t[n]],!1)},"values");var m=o.Arguments=o.Array;if(i("keys"),i("values"),i("entries"),!u&&d&&"values"!==m.name)try{s(m,"name",{value:"values"})}catch(v){}},48598:function(e,t,n){"use strict";var r=n(46518),i=n(79504),o=n(47055),a=n(25397),s=n(34598),c=i([].join),l=o!==Object,u=l||!s("join",",");r({target:"Array",proto:!0,forced:u},{join:function(e){return c(a(this),void 0===e?",":e)}})},62062:function(e,t,n){"use strict";var r=n(46518),i=n(59213).map,o=n(70597),a=o("map");r({target:"Array",proto:!0,forced:!a},{map:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}})},31051:function(e,t,n){"use strict";var r=n(46518),i=n(79039),o=n(33517),a=n(97040),s=n(34527),c=Array,l=i(function(){function e(){}return!(c.of.call(e)instanceof e)});r({target:"Array",stat:!0,forced:l},{of:function(){var e=0,t=arguments.length,n=new(o(this)?this:c)(t);while(t>e)a(n,e,arguments[e++]);return s(n,t),n}})},34782:function(e,t,n){"use strict";var r=n(46518),i=n(34376),o=n(33517),a=n(20034),s=n(35610),c=n(26198),l=n(25397),u=n(97040),d=n(34527),h=n(78227),f=n(70597),p=n(67680),m=f("slice"),v=h("species"),g=Array,y=Math.max;r({target:"Array",proto:!0,forced:!m},{slice:function(e,t){var n,r,h,f=l(this),m=c(f),_=s(e,m),b=s(void 0===t?m:t,m);if(i(f)&&(n=f.constructor,o(n)&&(n===g||i(n.prototype))?n=void 0:a(n)&&(n=n[v],null===n&&(n=void 0)),n===g||void 0===n))return p(f,_,b);for(r=new(void 0===n?g:n)(y(b-_,0)),h=0;_3)){if(p)return!0;if(v)return v<603;var e,t,n,r,i="";for(e=65;e<76;e++){switch(t=String.fromCharCode(e),e){case 66:case 69:case 70:case 72:n=3;break;case 68:case 71:n=4;break;default:n=2}for(r=0;r<47;r++)g.push({k:t+r,v:n})}for(g.sort(function(e,t){return t.v-e.v}),r=0;ri?1:-1}};r({target:"Array",proto:!0,forced:x},{sort:function(e){void 0!==e&&o(e);var t=a(this);if(w)return void 0===e?y(t):y(t,e);var n,r,i=[],l=s(t);for(r=0;rb-r+n;p--)h(_,p-1)}else if(n>r)for(p=b-r;p>M;p--)g=p+r-1,y=p+n-1,g in _?_[y]=_[g]:h(_,y);for(p=0;p94906265.62425156?a(t)+c:i(t-1+s(t-1)*s(t+1))}})},82326:function(e,t,n){"use strict";var r=n(46518),i=Math.asinh,o=Math.log,a=Math.sqrt,s=Math.LN2,c=94906265.62425156;function l(e){var t=+e;return isFinite(t)&&0!==t?t<0?-l(-t):t>c?o(t)+s:o(t+a(t*t+1)):t}var u=!(i&&1/i(0)>0);r({target:"Math",stat:!0,forced:u},{asinh:l})},36389:function(e,t,n){"use strict";var r=n(46518),i=n(7740),o=Math.atanh,a=!(o&&1/o(-0)<0);r({target:"Math",stat:!0,forced:a},{atanh:function(e){var t=+e;return 0===t?t:i(2*t/(1-t))/2}})},64444:function(e,t,n){"use strict";var r=n(46518),i=n(77782),o=Math.abs,a=Math.pow;r({target:"Math",stat:!0},{cbrt:function(e){var t=+e;return i(t)*a(o(t),1/3)}})},8085:function(e,t,n){"use strict";var r=n(46518),i=Math.floor,o=Math.log,a=Math.LOG2E;r({target:"Math",stat:!0},{clz32:function(e){var t=e>>>0;return t?31-i(o(t+.5)*a):32}})},77762:function(e,t,n){"use strict";var r=n(46518),i=n(53250),o=Math.cosh,a=Math.abs,s=Math.E,c=!o||o(710)===1/0;r({target:"Math",stat:!0,forced:c},{cosh:function(e){var t=i(a(e)-1)+1;return(t+1/(t*s*s))*(s/2)}})},65070:function(e,t,n){"use strict";var r=n(46518),i=n(53250);r({target:"Math",stat:!0,forced:i!==Math.expm1},{expm1:i})},60605:function(e,t,n){"use strict";var r=n(46518),i=n(15617);r({target:"Math",stat:!0},{fround:i})},39469:function(e,t,n){"use strict";var r=n(46518),i=Math.hypot,o=Math.abs,a=Math.sqrt,s=!!i&&i(1/0,NaN)!==1/0;r({target:"Math",stat:!0,arity:2,forced:s},{hypot:function(e,t){var n,r,i=0,s=0,c=arguments.length,l=0;while(s0?(r=n/l,i+=r*r):i+=n;return l===1/0?1/0:l*a(i)}})},72152:function(e,t,n){"use strict";var r=n(46518),i=n(79039),o=Math.imul,a=i(function(){return-5!==o(4294967295,5)||2!==o.length});r({target:"Math",stat:!0,forced:a},{imul:function(e,t){var n=65535,r=+e,i=+t,o=n&r,a=n&i;return 0|o*a+((n&r>>>16)*a+o*(n&i>>>16)<<16>>>0)}})},75376:function(e,t,n){"use strict";var r=n(46518),i=n(49340);r({target:"Math",stat:!0},{log10:i})},56624:function(e,t,n){"use strict";var r=n(46518),i=n(7740);r({target:"Math",stat:!0},{log1p:i})},11367:function(e,t,n){"use strict";var r=n(46518),i=n(67787);r({target:"Math",stat:!0},{log2:i})},5914:function(e,t,n){"use strict";var r=n(46518),i=n(77782);r({target:"Math",stat:!0},{sign:i})},78553:function(e,t,n){"use strict";var r=n(46518),i=n(79039),o=n(53250),a=Math.abs,s=Math.exp,c=Math.E,l=i(function(){return-2e-17!==Math.sinh(-2e-17)});r({target:"Math",stat:!0,forced:l},{sinh:function(e){var t=+e;return a(t)<1?(o(t)-o(-t))/2:(s(t-1)-s(-t-1))*(c/2)}})},98690:function(e,t,n){"use strict";var r=n(46518),i=n(53250),o=Math.exp;r({target:"Math",stat:!0},{tanh:function(e){var t=+e,n=i(t),r=i(-t);return n===1/0?1:r===1/0?-1:(n-r)/(o(t)+o(-t))}})},60479:function(e,t,n){"use strict";var r=n(10687);r(Math,"Math",!0)},70761:function(e,t,n){"use strict";var r=n(46518),i=n(80741);r({target:"Math",stat:!0},{trunc:i})},2892:function(e,t,n){"use strict";var r=n(46518),i=n(96395),o=n(43724),a=n(22195),s=n(19167),c=n(79504),l=n(92796),u=n(39297),d=n(23167),h=n(1625),f=n(10757),p=n(72777),m=n(79039),v=n(38480).f,g=n(77347).f,y=n(24913).f,_=n(31240),b=n(43802).trim,M="Number",A=a[M],w=s[M],x=A.prototype,k=a.TypeError,L=c("".slice),C=c("".charCodeAt),S=function(e){var t=p(e,"number");return"bigint"==typeof t?t:z(t)},z=function(e){var t,n,r,i,o,a,s,c,l=p(e,"number");if(f(l))throw new k("Cannot convert a Symbol value to a number");if("string"==typeof l&&l.length>2)if(l=b(l),t=C(l,0),43===t||45===t){if(n=C(l,2),88===n||120===n)return NaN}else if(48===t){switch(C(l,1)){case 66:case 98:r=2,i=49;break;case 79:case 111:r=8,i=55;break;default:return+l}for(o=L(l,2),a=o.length,s=0;si)return NaN;return parseInt(o,r)}return+l},T=l(M,!A(" 0o1")||!A("0b1")||A("+0x1")),O=function(e){return h(x,e)&&m(function(){_(e)})},H=function(e){var t=arguments.length<1?0:A(S(e));return O(this)?d(Object(t),this,H):t};H.prototype=x,T&&!i&&(x.constructor=H),r({global:!0,constructor:!0,wrap:!0,forced:T},{Number:H});var D=function(e,t){for(var n,r=o?v(t):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,fromString,range".split(","),i=0;r.length>i;i++)u(t,n=r[i])&&!u(e,n)&&y(e,n,g(t,n))};i&&w&&D(s[M],w),(T||i)&&D(s[M],A)},45374:function(e,t,n){"use strict";var r=n(46518);r({target:"Number",stat:!0,nonConfigurable:!0,nonWritable:!0},{EPSILON:Math.pow(2,-52)})},25428:function(e,t,n){"use strict";var r=n(46518),i=n(50360);r({target:"Number",stat:!0},{isFinite:i})},32637:function(e,t,n){"use strict";var r=n(46518),i=n(2087);r({target:"Number",stat:!0},{isInteger:i})},40150:function(e,t,n){"use strict";var r=n(46518);r({target:"Number",stat:!0},{isNaN:function(e){return e!==e}})},59149:function(e,t,n){"use strict";var r=n(46518),i=n(2087),o=Math.abs;r({target:"Number",stat:!0},{isSafeInteger:function(e){return i(e)&&o(e)<=9007199254740991}})},64601:function(e,t,n){"use strict";var r=n(46518);r({target:"Number",stat:!0,nonConfigurable:!0,nonWritable:!0},{MAX_SAFE_INTEGER:9007199254740991})},44435:function(e,t,n){"use strict";var r=n(46518);r({target:"Number",stat:!0,nonConfigurable:!0,nonWritable:!0},{MIN_SAFE_INTEGER:-9007199254740991})},87220:function(e,t,n){"use strict";var r=n(46518),i=n(33904);r({target:"Number",stat:!0,forced:Number.parseFloat!==i},{parseFloat:i})},25843:function(e,t,n){"use strict";var r=n(46518),i=n(52703);r({target:"Number",stat:!0,forced:Number.parseInt!==i},{parseInt:i})},9868:function(e,t,n){"use strict";var r=n(46518),i=n(79504),o=n(91291),a=n(31240),s=n(72333),c=n(79039),l=RangeError,u=String,d=Math.floor,h=i(s),f=i("".slice),p=i(1.1.toFixed),m=function(e,t,n){return 0===t?n:t%2===1?m(e,t-1,n*e):m(e*e,t/2,n)},v=function(e){var t=0,n=e;while(n>=4096)t+=12,n/=4096;while(n>=2)t+=1,n/=2;return t},g=function(e,t,n){var r=-1,i=n;while(++r<6)i+=t*e[r],e[r]=i%1e7,i=d(i/1e7)},y=function(e,t){var n=6,r=0;while(--n>=0)r+=e[n],e[n]=d(r/t),r=r%t*1e7},_=function(e){var t=6,n="";while(--t>=0)if(""!==n||0===t||0!==e[t]){var r=u(e[t]);n=""===n?r:n+h("0",7-r.length)+r}return n},b=c(function(){return"0.000"!==p(8e-5,3)||"1"!==p(.9,0)||"1.25"!==p(1.255,2)||"1000000000000000128"!==p(0xde0b6b3a7640080,0)})||!c(function(){p({})});r({target:"Number",proto:!0,forced:b},{toFixed:function(e){var t,n,r,i,s=a(this),c=o(e),d=[0,0,0,0,0,0],p="",b="0";if(c<0||c>20)throw new l("Incorrect fraction digits");if(s!==s)return"NaN";if(s<=-1e21||s>=1e21)return u(s);if(s<0&&(p="-",s=-s),s>1e-21)if(t=v(s*m(2,69,1))-69,n=t<0?s*m(2,-t,1):s/m(2,t,1),n*=4503599627370496,t=52-t,t>0){g(d,0,n),r=c;while(r>=7)g(d,1e7,0),r-=7;g(d,m(10,r,1),0),r=t-1;while(r>=23)y(d,1<<23),r-=23;y(d,1<0?(i=b.length,b=p+(i<=c?"0."+h("0",c-i)+b:f(b,0,i-c)+"."+f(b,i-c))):b=p+b,b}})},69085:function(e,t,n){"use strict";var r=n(46518),i=n(44213);r({target:"Object",stat:!0,arity:2,forced:Object.assign!==i},{assign:i})},17427:function(e,t,n){"use strict";var r=n(46518),i=n(43724),o=n(42551),a=n(79306),s=n(48981),c=n(24913);i&&r({target:"Object",proto:!0,forced:o},{__defineGetter__:function(e,t){c.f(s(this),e,{get:a(t),enumerable:!0,configurable:!0})}})},87607:function(e,t,n){"use strict";var r=n(46518),i=n(43724),o=n(42551),a=n(79306),s=n(48981),c=n(24913);i&&r({target:"Object",proto:!0,forced:o},{__defineSetter__:function(e,t){c.f(s(this),e,{set:a(t),enumerable:!0,configurable:!0})}})},5506:function(e,t,n){"use strict";var r=n(46518),i=n(32357).entries;r({target:"Object",stat:!0},{entries:function(e){return i(e)}})},52811:function(e,t,n){"use strict";var r=n(46518),i=n(92744),o=n(79039),a=n(20034),s=n(3451).onFreeze,c=Object.freeze,l=o(function(){c(1)});r({target:"Object",stat:!0,forced:l,sham:!i},{freeze:function(e){return c&&a(e)?c(s(e)):e}})},53921:function(e,t,n){"use strict";var r=n(46518),i=n(72652),o=n(97040);r({target:"Object",stat:!0},{fromEntries:function(e){var t={};return i(e,function(e,n){o(t,e,n)},{AS_ENTRIES:!0}),t}})},83851:function(e,t,n){"use strict";var r=n(46518),i=n(79039),o=n(25397),a=n(77347).f,s=n(43724),c=!s||i(function(){a(1)});r({target:"Object",stat:!0,forced:c,sham:!s},{getOwnPropertyDescriptor:function(e,t){return a(o(e),t)}})},81278:function(e,t,n){"use strict";var r=n(46518),i=n(43724),o=n(35031),a=n(25397),s=n(77347),c=n(97040);r({target:"Object",stat:!0,sham:!i},{getOwnPropertyDescriptors:function(e){var t,n,r=a(e),i=s.f,l=o(r),u={},d=0;while(l.length>d)n=i(r,t=l[d++]),void 0!==n&&c(u,t,n);return u}})},1480:function(e,t,n){"use strict";var r=n(46518),i=n(79039),o=n(10298).f,a=i(function(){return!Object.getOwnPropertyNames(1)});r({target:"Object",stat:!0,forced:a},{getOwnPropertyNames:o})},49773:function(e,t,n){"use strict";var r=n(46518),i=n(4495),o=n(79039),a=n(33717),s=n(48981),c=!i||o(function(){a.f(1)});r({target:"Object",stat:!0,forced:c},{getOwnPropertySymbols:function(e){var t=a.f;return t?t(s(e)):[]}})},40875:function(e,t,n){"use strict";var r=n(46518),i=n(79039),o=n(48981),a=n(42787),s=n(12211),c=i(function(){a(1)});r({target:"Object",stat:!0,forced:c,sham:!s},{getPrototypeOf:function(e){return a(o(e))}})},94052:function(e,t,n){"use strict";var r=n(46518),i=n(34124);r({target:"Object",stat:!0,forced:Object.isExtensible!==i},{isExtensible:i})},94003:function(e,t,n){"use strict";var r=n(46518),i=n(79039),o=n(20034),a=n(44576),s=n(15652),c=Object.isFrozen,l=s||i(function(){c(1)});r({target:"Object",stat:!0,forced:l},{isFrozen:function(e){return!o(e)||(!(!s||"ArrayBuffer"!==a(e))||!!c&&c(e))}})},221:function(e,t,n){"use strict";var r=n(46518),i=n(79039),o=n(20034),a=n(44576),s=n(15652),c=Object.isSealed,l=s||i(function(){c(1)});r({target:"Object",stat:!0,forced:l},{isSealed:function(e){return!o(e)||(!(!s||"ArrayBuffer"!==a(e))||!!c&&c(e))}})},29908:function(e,t,n){"use strict";var r=n(46518),i=n(3470);r({target:"Object",stat:!0},{is:i})},79432:function(e,t,n){"use strict";var r=n(46518),i=n(48981),o=n(71072),a=n(79039),s=a(function(){o(1)});r({target:"Object",stat:!0,forced:s},{keys:function(e){return o(i(e))}})},9220:function(e,t,n){"use strict";var r=n(46518),i=n(43724),o=n(42551),a=n(48981),s=n(56969),c=n(42787),l=n(77347).f;i&&r({target:"Object",proto:!0,forced:o},{__lookupGetter__:function(e){var t,n=a(this),r=s(e);do{if(t=l(n,r))return t.get}while(n=c(n))}})},7904:function(e,t,n){"use strict";var r=n(46518),i=n(43724),o=n(42551),a=n(48981),s=n(56969),c=n(42787),l=n(77347).f;i&&r({target:"Object",proto:!0,forced:o},{__lookupSetter__:function(e){var t,n=a(this),r=s(e);do{if(t=l(n,r))return t.set}while(n=c(n))}})},93967:function(e,t,n){"use strict";var r=n(46518),i=n(20034),o=n(3451).onFreeze,a=n(92744),s=n(79039),c=Object.preventExtensions,l=s(function(){c(1)});r({target:"Object",stat:!0,forced:l,sham:!a},{preventExtensions:function(e){return c&&i(e)?c(o(e)):e}})},93941:function(e,t,n){"use strict";var r=n(46518),i=n(20034),o=n(3451).onFreeze,a=n(92744),s=n(79039),c=Object.seal,l=s(function(){c(1)});r({target:"Object",stat:!0,forced:l,sham:!a},{seal:function(e){return c&&i(e)?c(o(e)):e}})},10287:function(e,t,n){"use strict";var r=n(46518),i=n(52967);r({target:"Object",stat:!0},{setPrototypeOf:i})},26099:function(e,t,n){"use strict";var r=n(92140),i=n(36840),o=n(53179);r||i(Object.prototype,"toString",o,{unsafe:!0})},16034:function(e,t,n){"use strict";var r=n(46518),i=n(32357).values;r({target:"Object",stat:!0},{values:function(e){return i(e)}})},16499:function(e,t,n){"use strict";var r=n(46518),i=n(69565),o=n(79306),a=n(36043),s=n(1103),c=n(72652),l=n(90537);r({target:"Promise",stat:!0,forced:l},{all:function(e){var t=this,n=a.f(t),r=n.resolve,l=n.reject,u=s(function(){var n=o(t.resolve),a=[],s=0,u=1;c(e,function(e){var o=s++,c=!1;u++,i(n,t,e).then(function(e){c||(c=!0,a[o]=e,--u||r(a))},l)}),--u||r(a)});return u.error&&l(u.value),n.promise}})},82003:function(e,t,n){"use strict";var r=n(46518),i=n(96395),o=n(10916).CONSTRUCTOR,a=n(80550),s=n(97751),c=n(94901),l=n(36840),u=a&&a.prototype;if(r({target:"Promise",proto:!0,forced:o,real:!0},{catch:function(e){return this.then(void 0,e)}}),!i&&c(a)){var d=s("Promise").prototype["catch"];u["catch"]!==d&&l(u,"catch",d,{unsafe:!0})}},10436:function(e,t,n){"use strict";var r,i,o,a,s=n(46518),c=n(96395),l=n(16193),u=n(22195),d=n(19167),h=n(69565),f=n(36840),p=n(52967),m=n(10687),v=n(87633),g=n(79306),y=n(94901),_=n(20034),b=n(90679),M=n(2293),A=n(59225).set,w=n(91955),x=n(90757),k=n(1103),L=n(18265),C=n(91181),S=n(80550),z=n(10916),T=n(36043),O="Promise",H=z.CONSTRUCTOR,D=z.REJECTION_EVENT,Y=z.SUBCLASSING,V=C.getterFor(O),P=C.set,E=S&&S.prototype,j=S,F=E,I=u.TypeError,$=u.document,R=u.process,N=T.f,W=N,B=!!($&&$.createEvent&&u.dispatchEvent),K="unhandledrejection",U="rejectionhandled",q=0,G=1,J=2,X=1,Z=2,Q=function(e){var t;return!(!_(e)||!y(t=e.then))&&t},ee=function(e,t){var n,r,i,o=t.value,a=t.state===G,s=a?e.ok:e.fail,c=e.resolve,l=e.reject,u=e.domain;try{s?(a||(t.rejection===Z&&oe(t),t.rejection=X),!0===s?n=o:(u&&u.enter(),n=s(o),u&&(u.exit(),i=!0)),n===e.promise?l(new I("Promise-chain cycle")):(r=Q(n))?h(r,n,c,l):c(n)):l(o)}catch(d){u&&!i&&u.exit(),l(d)}},te=function(e,t){e.notified||(e.notified=!0,w(function(){var n,r=e.reactions;while(n=r.get())ee(n,e);e.notified=!1,t&&!e.rejection&&re(e)}))},ne=function(e,t,n){var r,i;B?(r=$.createEvent("Event"),r.promise=t,r.reason=n,r.initEvent(e,!1,!0),u.dispatchEvent(r)):r={promise:t,reason:n},!D&&(i=u["on"+e])?i(r):e===K&&x("Unhandled promise rejection",n)},re=function(e){h(A,u,function(){var t,n=e.facade,r=e.value,i=ie(e);if(i&&(t=k(function(){l?R.emit("unhandledRejection",r,n):ne(K,n,r)}),e.rejection=l||ie(e)?Z:X,t.error))throw t.value})},ie=function(e){return e.rejection!==X&&!e.parent},oe=function(e){h(A,u,function(){var t=e.facade;l?R.emit("rejectionHandled",t):ne(U,t,e.value)})},ae=function(e,t,n){return function(r){e(t,r,n)}},se=function(e,t,n){e.done||(e.done=!0,n&&(e=n),e.value=t,e.state=J,te(e,!0))},ce=function(e,t,n){if(!e.done){e.done=!0,n&&(e=n);try{if(e.facade===t)throw new I("Promise can't be resolved itself");var r=Q(t);r?w(function(){var n={done:!1};try{h(r,t,ae(ce,n,e),ae(se,n,e))}catch(i){se(n,i,e)}}):(e.value=t,e.state=G,te(e,!1))}catch(i){se({done:!1},i,e)}}};if(H&&(j=function(e){b(this,F),g(e),h(r,this);var t=V(this);try{e(ae(ce,t),ae(se,t))}catch(n){se(t,n)}},F=j.prototype,r=function(e){P(this,{type:O,done:!1,notified:!1,parent:!1,reactions:new L,rejection:!1,state:q,value:null})},r.prototype=f(F,"then",function(e,t){var n=V(this),r=N(M(this,j));return n.parent=!0,r.ok=!y(e)||e,r.fail=y(t)&&t,r.domain=l?R.domain:void 0,n.state===q?n.reactions.add(r):w(function(){ee(r,n)}),r.promise}),i=function(){var e=new r,t=V(e);this.promise=e,this.resolve=ae(ce,t),this.reject=ae(se,t)},T.f=N=function(e){return e===j||e===o?new i(e):W(e)},!c&&y(S)&&E!==Object.prototype)){a=E.then,Y||f(E,"then",function(e,t){var n=this;return new j(function(e,t){h(a,n,e,t)}).then(e,t)},{unsafe:!0});try{delete E.constructor}catch(le){}p&&p(E,F)}s({global:!0,constructor:!0,wrap:!0,forced:H},{Promise:j}),o=d.Promise,m(j,O,!1,!0),v(O)},9391:function(e,t,n){"use strict";var r=n(46518),i=n(96395),o=n(80550),a=n(79039),s=n(97751),c=n(94901),l=n(2293),u=n(93438),d=n(36840),h=o&&o.prototype,f=!!o&&a(function(){h["finally"].call({then:function(){}},function(){})});if(r({target:"Promise",proto:!0,real:!0,forced:f},{finally:function(e){var t=l(this,s("Promise")),n=c(e);return this.then(n?function(n){return u(t,e()).then(function(){return n})}:e,n?function(n){return u(t,e()).then(function(){throw n})}:e)}}),!i&&c(o)){var p=s("Promise").prototype["finally"];h["finally"]!==p&&d(h,"finally",p,{unsafe:!0})}},3362:function(e,t,n){"use strict";n(10436),n(16499),n(82003),n(7743),n(51481),n(40280)},7743:function(e,t,n){"use strict";var r=n(46518),i=n(69565),o=n(79306),a=n(36043),s=n(1103),c=n(72652),l=n(90537);r({target:"Promise",stat:!0,forced:l},{race:function(e){var t=this,n=a.f(t),r=n.reject,l=s(function(){var a=o(t.resolve);c(e,function(e){i(a,t,e).then(n.resolve,r)})});return l.error&&r(l.value),n.promise}})},51481:function(e,t,n){"use strict";var r=n(46518),i=n(36043),o=n(10916).CONSTRUCTOR;r({target:"Promise",stat:!0,forced:o},{reject:function(e){var t=i.f(this),n=t.reject;return n(e),t.promise}})},40280:function(e,t,n){"use strict";var r=n(46518),i=n(97751),o=n(96395),a=n(80550),s=n(10916).CONSTRUCTOR,c=n(93438),l=i("Promise"),u=o&&!s;r({target:"Promise",stat:!0,forced:o||s},{resolve:function(e){return c(u&&this===l?a:this,e)}})},39796:function(e,t,n){"use strict";var r=n(46518),i=n(18745),o=n(79306),a=n(28551),s=n(79039),c=!s(function(){Reflect.apply(function(){})});r({target:"Reflect",stat:!0,forced:c},{apply:function(e,t,n){return i(o(e),t,a(n))}})},60825:function(e,t,n){"use strict";var r=n(46518),i=n(97751),o=n(18745),a=n(30566),s=n(35548),c=n(28551),l=n(20034),u=n(2360),d=n(79039),h=i("Reflect","construct"),f=Object.prototype,p=[].push,m=d(function(){function e(){}return!(h(function(){},[],e)instanceof e)}),v=!d(function(){h(function(){})}),g=m||v;r({target:"Reflect",stat:!0,forced:g,sham:g},{construct:function(e,t){s(e);var n=arguments.length<3?e:s(arguments[2]);if(c(t),v&&!m)return h(e,t,n);if(e===n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var r=[null];return o(p,r,t),new(o(a,e,r))}var i=n.prototype,d=u(l(i)?i:f),g=o(e,d,t);return l(g)?g:d}})},87411:function(e,t,n){"use strict";var r=n(46518),i=n(43724),o=n(28551),a=n(56969),s=n(24913),c=n(94901),l=n(79039),u=TypeError,d=l(function(){Reflect.defineProperty(s.f({},1,{value:1}),1,{value:2})});r({target:"Reflect",stat:!0,forced:d,sham:!i},{defineProperty:function(e,t,n){o(e);var r,i,l=a(t);if(o(n),("get"in n||"set"in n)&&("get"in n&&!c(r=n.get)&&void 0!==r||"set"in n&&!c(i=n.set)&&void 0!==i||"value"in n||"writable"in n))throw new u("Invalid property descriptor");try{return s.f(e,l,n),!0}catch(d){return!1}}})},21211:function(e,t,n){"use strict";var r=n(46518),i=n(28551),o=n(77347).f,a=n(56969);r({target:"Reflect",stat:!0},{deleteProperty:function(e,t){i(e);var n=a(t),r=o(e,n);return!(r&&!r.configurable)&&delete e[n]}})},9065:function(e,t,n){"use strict";var r=n(46518),i=n(43724),o=n(28551),a=n(77347);r({target:"Reflect",stat:!0,sham:!i},{getOwnPropertyDescriptor:function(e,t){return a.f(o(e),t)}})},86565:function(e,t,n){"use strict";var r=n(46518),i=n(28551),o=n(42787),a=n(12211);r({target:"Reflect",stat:!0,sham:!a},{getPrototypeOf:function(e){return o(i(e))}})},40888:function(e,t,n){"use strict";var r=n(46518),i=n(69565),o=n(20034),a=n(28551),s=n(16575),c=n(77347),l=n(42787),u=n(56969),d=function(e,t,n){if(a(e)===n)return e[t];var r=c.f(e,t);if(r)return s(r)?r.value:void 0===r.get?void 0:i(r.get,n);var u=l(e);return o(u)?d(u,t,n):void 0};r({target:"Reflect",stat:!0},{get:function(e,t){return d(a(e),u(t),arguments.length<3?e:arguments[2])}})},32812:function(e,t,n){"use strict";var r=n(46518);r({target:"Reflect",stat:!0},{has:function(e,t){return t in e}})},84634:function(e,t,n){"use strict";var r=n(46518),i=n(28551),o=n(34124);r({target:"Reflect",stat:!0},{isExtensible:function(e){return i(e),o(e)}})},71137:function(e,t,n){"use strict";var r=n(46518),i=n(35031);r({target:"Reflect",stat:!0},{ownKeys:i})},30985:function(e,t,n){"use strict";var r=n(46518),i=n(97751),o=n(28551),a=n(92744);r({target:"Reflect",stat:!0,sham:!a},{preventExtensions:function(e){o(e);try{var t=i("Object","preventExtensions");return t&&t(e),!0}catch(n){return!1}}})},34873:function(e,t,n){"use strict";var r=n(46518),i=n(28551),o=n(73506),a=n(52967);a&&r({target:"Reflect",stat:!0},{setPrototypeOf:function(e,t){i(e),o(t);try{return a(e,t),!0}catch(n){return!1}}})},34268:function(e,t,n){"use strict";var r=n(46518),i=n(69565),o=n(28551),a=n(20034),s=n(16575),c=n(79039),l=n(24913),u=n(77347),d=n(42787),h=n(6980),f=n(56969),p=function(e,t,n,r){var c,f,m,v=u.f(o(e),t);if(!v){if(a(f=d(e)))return p(f,t,n,r);v=h(0)}if(s(v)){if(!1===v.writable||!a(r))return!1;if(c=u.f(r,t)){if(!s(c)||!1===c.writable)return!1;l.f(r,t,{value:n})}else try{l.f(r,t,h(0,n))}catch(g){return!1}}else{if(m=v.set,void 0===m)return!1;i(m,r,n)}return!0},m=c(function(){var e=function(){},t=l.f(new e,"a",{configurable:!0});return!1!==Reflect.set(e.prototype,"a",1,t)});r({target:"Reflect",stat:!0,forced:m},{set:function(e,t,n){return p(o(e),f(t),n,arguments.length<4?e:arguments[3])}})},84864:function(e,t,n){"use strict";var r=n(43724),i=n(22195),o=n(79504),a=n(92796),s=n(23167),c=n(66699),l=n(2360),u=n(38480).f,d=n(1625),h=n(60788),f=n(655),p=n(61034),m=n(58429),v=n(11056),g=n(36840),y=n(79039),_=n(39297),b=n(91181).enforce,M=n(87633),A=n(78227),w=n(83635),x=n(18814),k=A("match"),L=i.RegExp,C=L.prototype,S=i.SyntaxError,z=o(C.exec),T=o("".charAt),O=o("".replace),H=o("".indexOf),D=o("".slice),Y=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,V=/a/g,P=/a/g,E=new L(V)!==V,j=m.MISSED_STICKY,F=m.UNSUPPORTED_Y,I=r&&(!E||j||w||x||y(function(){return P[k]=!1,L(V)!==V||L(P)===P||"/a/i"!==String(L(V,"i"))})),$=function(e){for(var t,n=e.length,r=0,i="",o=!1;r"===t&&c:if(""===d||_(a,d))throw new S("Invalid capture group name");a[d]=!0,o[o.length]=[d,u],c=!1,d="";continue}c?d+=t:i+=t}for(var h=0;h",p="\\"+o[h][1];while(H(i,f)>-1)i=O(i,f,p)}return[i,o]};if(a("RegExp",I)){for(var N=function(e,t){var n,r,i,o,a,l,u=d(C,this),m=h(e),v=void 0===t,g=[],y=e;if(!u&&m&&v&&e.constructor===N)return e;if((m||d(C,e))&&(e=e.source,v&&(t=p(y))),e=void 0===e?"":f(e),t=void 0===t?"":f(t),y=e,w&&"dotAll"in V&&(r=!!t&&H(t,"s")>-1,r&&(t=O(t,/s/g,""))),n=t,j&&"sticky"in V&&(i=!!t&&H(t,"y")>-1,i&&F&&(t=O(t,/y/g,""))),x&&(o=R(e),e=o[0],g=o[1]),a=s(L(e,t),u?this:C,N),(r||i||g.length)&&(l=b(a),r&&(l.dotAll=!0,l.raw=N($(e),n)),i&&(l.sticky=!0),g.length&&(l.groups=g)),e!==y)try{c(a,"source",""===y?"(?:)":y)}catch(_){}return a},W=u(L),B=0;W.length>B;)v(N,L,W[B++]);C.constructor=N,N.prototype=C,g(i,"RegExp",N,{constructor:!0})}M("RegExp")},27495:function(e,t,n){"use strict";var r=n(46518),i=n(57323);r({target:"RegExp",proto:!0,forced:/./.exec!==i},{exec:i})},69479:function(e,t,n){"use strict";var r=n(43724),i=n(62106),o=n(65213),a=n(67979);r&&!o.correct&&(i(RegExp.prototype,"flags",{configurable:!0,get:a}),o.correct=!0)},38781:function(e,t,n){"use strict";var r=n(10350).PROPER,i=n(36840),o=n(28551),a=n(655),s=n(79039),c=n(61034),l="toString",u=RegExp.prototype,d=u[l],h=s(function(){return"/a/b"!==d.call({source:"a",flags:"b"})}),f=r&&d.name!==l;(h||f)&&i(u,l,function(){var e=o(this),t=a(e.source),n=a(c(e));return"/"+t+"/"+n},{unsafe:!0})},92405:function(e,t,n){"use strict";var r=n(16468),i=n(86938);r("Set",function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}},i)},31415:function(e,t,n){"use strict";n(92405)},89907:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("anchor")},{anchor:function(e){return i(this,"a","name",e)}})},11898:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("big")},{big:function(){return i(this,"big","","")}})},35490:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("blink")},{blink:function(){return i(this,"blink","","")}})},5745:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("bold")},{bold:function(){return i(this,"b","","")}})},23860:function(e,t,n){"use strict";var r=n(46518),i=n(68183).codeAt;r({target:"String",proto:!0},{codePointAt:function(e){return i(this,e)}})},99449:function(e,t,n){"use strict";var r=n(46518),i=n(27476),o=n(77347).f,a=n(18014),s=n(655),c=n(60511),l=n(67750),u=n(41436),d=n(96395),h=i("".slice),f=Math.min,p=u("endsWith"),m=!d&&!p&&!!function(){var e=o(String.prototype,"endsWith");return e&&!e.writable}();r({target:"String",proto:!0,forced:!m&&!p},{endsWith:function(e){var t=s(l(this));c(e);var n=s(e),r=arguments.length>1?arguments[1]:void 0,i=t.length,o=void 0===r?i:f(a(r),i);return h(t,o-n.length,o)===n}})},94298:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("fixed")},{fixed:function(){return i(this,"tt","","")}})},60268:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("fontcolor")},{fontcolor:function(e){return i(this,"font","color",e)}})},69546:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("fontsize")},{fontsize:function(e){return i(this,"font","size",e)}})},27337:function(e,t,n){"use strict";var r=n(46518),i=n(79504),o=n(35610),a=RangeError,s=String.fromCharCode,c=String.fromCodePoint,l=i([].join),u=!!c&&1!==c.length;r({target:"String",stat:!0,arity:1,forced:u},{fromCodePoint:function(e){var t,n=[],r=arguments.length,i=0;while(r>i){if(t=+arguments[i],o(t,1114111)!==t)throw new a(t+" is not a valid code point");n[i++]=t<65536?s(t):s(55296+((t-=65536)>>10),t%1024+56320)}return l(n,"")}})},21699:function(e,t,n){"use strict";var r=n(46518),i=n(79504),o=n(60511),a=n(67750),s=n(655),c=n(41436),l=i("".indexOf);r({target:"String",proto:!0,forced:!c("includes")},{includes:function(e){return!!~l(s(a(this)),s(o(e)),arguments.length>1?arguments[1]:void 0)}})},20781:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("italics")},{italics:function(){return i(this,"i","","")}})},47764:function(e,t,n){"use strict";var r=n(68183).charAt,i=n(655),o=n(91181),a=n(51088),s=n(62529),c="String Iterator",l=o.set,u=o.getterFor(c);a(String,"String",function(e){l(this,{type:c,string:i(e),index:0})},function(){var e,t=u(this),n=t.string,i=t.index;return i>=n.length?s(void 0,!0):(e=r(n,i),t.index+=e.length,s(e,!1))})},50778:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("link")},{link:function(e){return i(this,"a","href",e)}})},71761:function(e,t,n){"use strict";var r=n(69565),i=n(79504),o=n(89228),a=n(28551),s=n(20034),c=n(18014),l=n(655),u=n(67750),d=n(55966),h=n(57829),f=n(61034),p=n(56682),m=i("".indexOf);o("match",function(e,t,n){return[function(t){var n=u(this),i=s(t)?d(t,e):void 0;return i?r(i,t,n):new RegExp(t)[e](l(n))},function(e){var r=a(this),i=l(e),o=n(t,r,i);if(o.done)return o.value;var s=l(f(r));if(!~m(s,"g"))return p(r,i);var u=!!~m(s,"u")||!!~m(s,"v");r.lastIndex=0;var d,v=[],g=0;while(null!==(d=p(r,i))){var y=l(d[0]);v[g]=y,""===y&&(r.lastIndex=h(i,c(r.lastIndex),u)),g++}return 0===g?null:v}]})},35701:function(e,t,n){"use strict";var r=n(46518),i=n(60533).end,o=n(83063);r({target:"String",proto:!0,forced:o},{padEnd:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}})},68156:function(e,t,n){"use strict";var r=n(46518),i=n(60533).start,o=n(83063);r({target:"String",proto:!0,forced:o},{padStart:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}})},85906:function(e,t,n){"use strict";var r=n(46518),i=n(79504),o=n(25397),a=n(48981),s=n(655),c=n(26198),l=i([].push),u=i([].join);r({target:"String",stat:!0},{raw:function(e){var t=o(a(e).raw),n=c(t);if(!n)return"";var r=arguments.length,i=[],d=0;while(1){if(l(i,s(t[d++])),d===n)return u(i,"");d")});a("replace",function(e,t,n){var o=T?"$":"$0";return[function(e,n){var r=p(this),o=u(e)?v(e,M):void 0;return o?i(o,e,r,n):i(t,f(r),e,n)},function(e,i){var a=c(this),s=f(e),u=l(i);u||(i=f(i));var p=f(y(a));if("string"==typeof i&&!~L(i,o)&&!~L(i,"$<")&&!~L(p,"y")){var v=n(t,a,s,i);if(v.done)return v.value}var b,M=!!~L(p,"g");M&&(b=!!~L(p,"u")||!!~L(p,"v"),a.lastIndex=0);var z,T=[];while(1){if(z=_(a,s),null===z)break;if(k(T,z),!M)break;var O=f(z[0]);""===O&&(a.lastIndex=m(s,h(a.lastIndex),b))}for(var H="",D=0,Y=0;Y=D&&(H+=C(s,D,E)+V,D=E+P.length)}return H+C(s,D)}]},!O||!z||T)},5746:function(e,t,n){"use strict";var r=n(69565),i=n(89228),o=n(28551),a=n(20034),s=n(67750),c=n(3470),l=n(655),u=n(55966),d=n(56682);i("search",function(e,t,n){return[function(t){var n=s(this),i=a(t)?u(t,e):void 0;return i?r(i,t,n):new RegExp(t)[e](l(n))},function(e){var r=o(this),i=l(e),a=n(t,r,i);if(a.done)return a.value;var s=r.lastIndex;c(s,0)||(r.lastIndex=0);var u=d(r,i);return c(r.lastIndex,s)||(r.lastIndex=s),null===u?-1:u.index}]})},89195:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("small")},{small:function(){return i(this,"small","","")}})},90744:function(e,t,n){"use strict";var r=n(69565),i=n(79504),o=n(89228),a=n(28551),s=n(20034),c=n(67750),l=n(2293),u=n(57829),d=n(18014),h=n(655),f=n(55966),p=n(61034),m=n(56682),v=n(58429),g=n(79039),y=v.UNSUPPORTED_Y,_=4294967295,b=Math.min,M=i([].push),A=i("".slice),w=i("".indexOf),x=!g(function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var n="ab".split(e);return 2!==n.length||"a"!==n[0]||"b"!==n[1]}),k="c"==="abbc".split(/(b)*/)[1]||4!=="test".split(/(?:)/,-1).length||2!=="ab".split(/(?:ab)*/).length||4!==".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length;o("split",function(e,t,n){var i="0".split(void 0,0).length?function(e,n){return void 0===e&&0===n?[]:r(t,this,e,n)}:t;return[function(t,n){var o=c(this),a=s(t)?f(t,e):void 0;return a?r(a,t,o,n):r(i,h(o),t,n)},function(e,r){var o=a(this),s=h(e);if(!k){var c=n(i,o,s,r,i!==t);if(c.done)return c.value}var f=l(o,RegExp),v=h(p(o)),g=!!~w(v,"u")||!!~w(v,"v");y?~w(v,"g")||(v+="g"):~w(v,"y")||(v+="y");var x=new f(y?"^(?:"+o.source+")":o,v),L=void 0===r?_:r>>>0;if(0===L)return[];if(0===s.length)return null===m(x,s)?[s]:[];var C=0,S=0,z=[];while(S1?arguments[1]:void 0,t.length));return h(t,r,r+n.length)===n}})},46276:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("strike")},{strike:function(){return i(this,"strike","","")}})},48718:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("sub")},{sub:function(){return i(this,"sub","","")}})},16308:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("sup")},{sup:function(){return i(this,"sup","","")}})},39202:function(e,t,n){"use strict";n(33313);var r=n(46518),i=n(18866);r({target:"String",proto:!0,name:"trimEnd",forced:"".trimEnd!==i},{trimEnd:i})},58934:function(e,t,n){"use strict";var r=n(46518),i=n(53487);r({target:"String",proto:!0,name:"trimStart",forced:"".trimLeft!==i},{trimLeft:i})},33313:function(e,t,n){"use strict";var r=n(46518),i=n(18866);r({target:"String",proto:!0,name:"trimEnd",forced:"".trimRight!==i},{trimRight:i})},43359:function(e,t,n){"use strict";n(58934);var r=n(46518),i=n(53487);r({target:"String",proto:!0,name:"trimStart",forced:"".trimStart!==i},{trimStart:i})},42762:function(e,t,n){"use strict";var r=n(46518),i=n(43802).trim,o=n(60706);r({target:"String",proto:!0,forced:o("trim")},{trim:function(){return i(this)}})},66412:function(e,t,n){"use strict";var r=n(70511);r("asyncIterator")},6761:function(e,t,n){"use strict";var r=n(46518),i=n(22195),o=n(69565),a=n(79504),s=n(96395),c=n(43724),l=n(4495),u=n(79039),d=n(39297),h=n(1625),f=n(28551),p=n(25397),m=n(56969),v=n(655),g=n(6980),y=n(2360),_=n(71072),b=n(38480),M=n(10298),A=n(33717),w=n(77347),x=n(24913),k=n(96801),L=n(48773),C=n(36840),S=n(62106),z=n(25745),T=n(66119),O=n(30421),H=n(33392),D=n(78227),Y=n(1951),V=n(70511),P=n(58242),E=n(10687),j=n(91181),F=n(59213).forEach,I=T("hidden"),$="Symbol",R="prototype",N=j.set,W=j.getterFor($),B=Object[R],K=i.Symbol,U=K&&K[R],q=i.RangeError,G=i.TypeError,J=i.QObject,X=w.f,Z=x.f,Q=M.f,ee=L.f,te=a([].push),ne=z("symbols"),re=z("op-symbols"),ie=z("wks"),oe=!J||!J[R]||!J[R].findChild,ae=function(e,t,n){var r=X(B,t);return r&&delete B[t],Z(e,t,n),r&&e!==B&&Z(B,t,r),e},se=c&&u(function(){return 7!==y(Z({},"a",{get:function(){return Z(this,"a",{value:7}).a}})).a})?ae:Z,ce=function(e,t){var n=ne[e]=y(U);return N(n,{type:$,tag:e,description:t}),c||(n.description=t),n},le=function(e,t,n){e===B&&le(re,t,n),f(e);var r=m(t);return f(n),d(ne,r)?(("enumerable"in n?!n.enumerable:!d(e,r)||d(e,I)&&e[I][r])?(d(e,I)||Z(e,I,g(1,y(null))),e[I][r]=!0):(d(e,I)&&e[I][r]&&(e[I][r]=!1),n=y(n,{enumerable:g(0,!1)})),se(e,r,n)):Z(e,r,n)},ue=function(e,t){f(e);var n=p(t),r=_(n).concat(me(n));return F(r,function(t){c&&!o(he,n,t)||le(e,t,n[t])}),e},de=function(e,t){return void 0===t?y(e):ue(y(e),t)},he=function(e){var t=m(e),n=o(ee,this,t);return!(this===B&&d(ne,t)&&!d(re,t))&&(!(n||!d(this,t)||!d(ne,t)||d(this,I)&&this[I][t])||n)},fe=function(e,t){var n=p(e),r=m(t);if(n!==B||!d(ne,r)||d(re,r)){var i=X(n,r);return!i||!d(ne,r)||d(n,I)&&n[I][r]||(i.enumerable=!0),i}},pe=function(e){var t=Q(p(e)),n=[];return F(t,function(e){d(ne,e)||d(O,e)||te(n,e)}),n},me=function(e){var t=e===B,n=Q(t?re:p(e)),r=[];return F(n,function(e){!d(ne,e)||t&&!d(B,e)||te(r,ne[e])}),r};l||(K=function(){if(h(U,this))throw new G("Symbol is not a constructor");var e=arguments.length&&void 0!==arguments[0]?v(arguments[0]):void 0,t=H(e),n=function(e){var r=void 0===this?i:this;r===B&&o(n,re,e),d(r,I)&&d(r[I],t)&&(r[I][t]=!1);var a=g(1,e);try{se(r,t,a)}catch(s){if(!(s instanceof q))throw s;ae(r,t,a)}};return c&&oe&&se(B,t,{configurable:!0,set:n}),ce(t,e)},U=K[R],C(U,"toString",function(){return W(this).tag}),C(K,"withoutSetter",function(e){return ce(H(e),e)}),L.f=he,x.f=le,k.f=ue,w.f=fe,b.f=M.f=pe,A.f=me,Y.f=function(e){return ce(D(e),e)},c&&(S(U,"description",{configurable:!0,get:function(){return W(this).description}}),s||C(B,"propertyIsEnumerable",he,{unsafe:!0}))),r({global:!0,constructor:!0,wrap:!0,forced:!l,sham:!l},{Symbol:K}),F(_(ie),function(e){V(e)}),r({target:$,stat:!0,forced:!l},{useSetter:function(){oe=!0},useSimple:function(){oe=!1}}),r({target:"Object",stat:!0,forced:!l,sham:!c},{create:de,defineProperty:le,defineProperties:ue,getOwnPropertyDescriptor:fe}),r({target:"Object",stat:!0,forced:!l},{getOwnPropertyNames:pe}),P(),E(K,$),O[I]=!0},89463:function(e,t,n){"use strict";var r=n(46518),i=n(43724),o=n(22195),a=n(69565),s=n(79504),c=n(39297),l=n(94901),u=n(1625),d=n(655),h=n(62106),f=n(77740),p=o.Symbol,m=p&&p.prototype;if(i&&l(p)&&(!("description"in m)||void 0!==p().description)){var v={},g=function(){var e=arguments.length<1||void 0===arguments[0]?void 0:d(arguments[0]),t=u(m,this)?new p(e):void 0===e?p():p(e);return""===e&&(v[t]=!0),t};f(g,p);var y=g["for"];g["for"]={for:function(e){var t=d(e),n=a(y,this,t);return""===t&&(v[n]=!0),n}}["for"],g.prototype=m,m.constructor=g;var _="Symbol(description detection)"===String(p("description detection")),b=s(m.valueOf),M=s(m.toString),A=/^Symbol\((.*)\)[^)]+$/,w=s("".replace),x=s("".slice);h(m,"description",{configurable:!0,get:function(){var e=b(this);if(c(v,e))return"";var t=M(e),n=_?x(t,7,-1):w(t,A,"$1");return""===n?void 0:n}}),r({global:!0,constructor:!0,forced:!0},{Symbol:g})}},81510:function(e,t,n){"use strict";var r=n(46518),i=n(97751),o=n(39297),a=n(655),s=n(25745),c=n(91296),l=s("string-to-symbol-registry"),u=s("symbol-to-string-registry");r({target:"Symbol",stat:!0,forced:!c},{for:function(e){var t=a(e);if(o(l,t))return l[t];var n=i("Symbol")(t);return l[t]=n,u[n]=t,n}})},60193:function(e,t,n){"use strict";var r=n(70511);r("hasInstance")},92168:function(e,t,n){"use strict";var r=n(70511);r("isConcatSpreadable")},2259:function(e,t,n){"use strict";var r=n(70511);r("iterator")},52675:function(e,t,n){"use strict";n(6761),n(81510),n(97812),n(33110),n(49773)},97812:function(e,t,n){"use strict";var r=n(46518),i=n(39297),o=n(10757),a=n(16823),s=n(25745),c=n(91296),l=s("symbol-to-string-registry");r({target:"Symbol",stat:!0,forced:!c},{keyFor:function(e){if(!o(e))throw new TypeError(a(e)+" is not a symbol");if(i(l,e))return l[e]}})},86964:function(e,t,n){"use strict";var r=n(70511);r("match")},83237:function(e,t,n){"use strict";var r=n(70511);r("replace")},61833:function(e,t,n){"use strict";var r=n(70511);r("search")},67947:function(e,t,n){"use strict";var r=n(70511);r("species")},31073:function(e,t,n){"use strict";var r=n(70511);r("split")},45700:function(e,t,n){"use strict";var r=n(70511),i=n(58242);r("toPrimitive"),i()},78125:function(e,t,n){"use strict";var r=n(97751),i=n(70511),o=n(10687);i("toStringTag"),o(r("Symbol"),"Symbol")},20326:function(e,t,n){"use strict";var r=n(70511);r("unscopables")},81630:function(e,t,n){"use strict";var r=n(79504),i=n(94644),o=n(57029),a=r(o),s=i.aTypedArray,c=i.exportTypedArrayMethod;c("copyWithin",function(e,t){return a(s(this),e,t,arguments.length>2?arguments[2]:void 0)})},72170:function(e,t,n){"use strict";var r=n(94644),i=n(59213).every,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("every",function(e){return i(o(this),e,arguments.length>1?arguments[1]:void 0)})},75044:function(e,t,n){"use strict";var r=n(94644),i=n(84373),o=n(75854),a=n(36955),s=n(69565),c=n(79504),l=n(79039),u=r.aTypedArray,d=r.exportTypedArrayMethod,h=c("".slice),f=l(function(){var e=0;return new Int8Array(2).fill({valueOf:function(){return e++}}),1!==e});d("fill",function(e){var t=arguments.length;u(this);var n="Big"===h(a(this),0,3)?o(e):+e;return s(i,this,n,t>1?arguments[1]:void 0,t>2?arguments[2]:void 0)},f)},69539:function(e,t,n){"use strict";var r=n(94644),i=n(59213).filter,o=n(29948),a=r.aTypedArray,s=r.exportTypedArrayMethod;s("filter",function(e){var t=i(a(this),e,arguments.length>1?arguments[1]:void 0);return o(this,t)})},89955:function(e,t,n){"use strict";var r=n(94644),i=n(59213).findIndex,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("findIndex",function(e){return i(o(this),e,arguments.length>1?arguments[1]:void 0)})},31694:function(e,t,n){"use strict";var r=n(94644),i=n(59213).find,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("find",function(e){return i(o(this),e,arguments.length>1?arguments[1]:void 0)})},34594:function(e,t,n){"use strict";var r=n(15823);r("Float32",function(e){return function(t,n,r){return e(this,t,n,r)}})},29833:function(e,t,n){"use strict";var r=n(15823);r("Float64",function(e){return function(t,n,r){return e(this,t,n,r)}})},33206:function(e,t,n){"use strict";var r=n(94644),i=n(59213).forEach,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("forEach",function(e){i(o(this),e,arguments.length>1?arguments[1]:void 0)})},48345:function(e,t,n){"use strict";var r=n(72805),i=n(94644).exportTypedArrayStaticMethod,o=n(43251);i("from",o,r)},44496:function(e,t,n){"use strict";var r=n(94644),i=n(19617).includes,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("includes",function(e){return i(o(this),e,arguments.length>1?arguments[1]:void 0)})},66651:function(e,t,n){"use strict";var r=n(94644),i=n(19617).indexOf,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("indexOf",function(e){return i(o(this),e,arguments.length>1?arguments[1]:void 0)})},72107:function(e,t,n){"use strict";var r=n(15823);r("Int16",function(e){return function(t,n,r){return e(this,t,n,r)}})},95477:function(e,t,n){"use strict";var r=n(15823);r("Int32",function(e){return function(t,n,r){return e(this,t,n,r)}})},46594:function(e,t,n){"use strict";var r=n(15823);r("Int8",function(e){return function(t,n,r){return e(this,t,n,r)}})},12887:function(e,t,n){"use strict";var r=n(22195),i=n(79039),o=n(79504),a=n(94644),s=n(23792),c=n(78227),l=c("iterator"),u=r.Uint8Array,d=o(s.values),h=o(s.keys),f=o(s.entries),p=a.aTypedArray,m=a.exportTypedArrayMethod,v=u&&u.prototype,g=!i(function(){v[l].call([1])}),y=!!v&&v.values&&v[l]===v.values&&"values"===v.values.name,_=function(){return d(p(this))};m("entries",function(){return f(p(this))},g),m("keys",function(){return h(p(this))},g),m("values",_,g||!y,{name:"values"}),m(l,_,g||!y,{name:"values"})},19369:function(e,t,n){"use strict";var r=n(94644),i=n(79504),o=r.aTypedArray,a=r.exportTypedArrayMethod,s=i([].join);a("join",function(e){return s(o(this),e)})},66812:function(e,t,n){"use strict";var r=n(94644),i=n(18745),o=n(8379),a=r.aTypedArray,s=r.exportTypedArrayMethod;s("lastIndexOf",function(e){var t=arguments.length;return i(o,a(this),t>1?[e,arguments[1]]:[e])})},8995:function(e,t,n){"use strict";var r=n(94644),i=n(59213).map,o=n(29948),a=r.aTypedArray,s=r.exportTypedArrayMethod;s("map",function(e){var t=i(a(this),e,arguments.length>1?arguments[1]:void 0);return o(this,t)})},52568:function(e,t,n){"use strict";var r=n(94644),i=n(72805),o=r.aTypedArrayConstructor,a=r.exportTypedArrayStaticMethod;a("of",function(){var e=0,t=arguments.length,n=new(o(this))(t);while(t>e)n[e]=arguments[e++];return n},i)},36072:function(e,t,n){"use strict";var r=n(94644),i=n(80926).right,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("reduceRight",function(e){var t=arguments.length;return i(o(this),e,t,t>1?arguments[1]:void 0)})},31575:function(e,t,n){"use strict";var r=n(94644),i=n(80926).left,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("reduce",function(e){var t=arguments.length;return i(o(this),e,t,t>1?arguments[1]:void 0)})},88747:function(e,t,n){"use strict";var r=n(94644),i=r.aTypedArray,o=r.exportTypedArrayMethod,a=Math.floor;o("reverse",function(){var e,t=this,n=i(t).length,r=a(n/2),o=0;while(o1?arguments[1]:void 0,1),n=c(e);if(v)return i(f,this,n,t);var r=this.length,o=a(n),l=0;if(o+t>r)throw new u("Wrong length");while(li)l[i]=n[i++];return l},l)},57301:function(e,t,n){"use strict";var r=n(94644),i=n(59213).some,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("some",function(e){return i(o(this),e,arguments.length>1?arguments[1]:void 0)})},373:function(e,t,n){"use strict";var r=n(22195),i=n(27476),o=n(79039),a=n(79306),s=n(74488),c=n(94644),l=n(13709),u=n(13763),d=n(39519),h=n(3607),f=c.aTypedArray,p=c.exportTypedArrayMethod,m=r.Uint16Array,v=m&&i(m.prototype.sort),g=!!v&&!(o(function(){v(new m(2),null)})&&o(function(){v(new m(2),{})})),y=!!v&&!o(function(){if(d)return d<74;if(l)return l<67;if(u)return!0;if(h)return h<602;var e,t,n=new m(516),r=Array(516);for(e=0;e<516;e++)t=e%4,n[e]=515-e,r[e]=e-2*t+3;for(v(n,function(e,t){return(e/4|0)-(t/4|0)}),e=0;e<516;e++)if(n[e]!==r[e])return!0}),_=function(e){return function(t,n){return void 0!==e?+e(t,n)||0:n!==n?t!==t?0:-1:t!==t?1:0===t&&0===n?1/t>0?1/n>0?0:1:1/n>0?-1:0:t>n?1:t0&&0!==(e&n);n>>=1)t++;return t},le=function(e){var t=null,n=e.length;switch(n){case 1:t=e[0];break;case 2:t=(31&e[0])<<6|63&e[1];break;case 3:t=(15&e[0])<<12|(63&e[1])<<6|63&e[2];break;case 4:t=(7&e[0])<<18|(63&e[1])<<12|(63&e[2])<<6|63&e[3];break}return null===t||t>1114111||t>=55296&&t<=57343||t<(n>3?65536:n>2?2048:n>1?128:0)?null:t},ue=function(e){e=Z(e,ie," ");var t=e.length,n="",r=0;while(rt){n+="%",r++;continue}var o=se(e,r+1);if(o!==o){n+=i,r++;continue}r+=2;var a=ce(o);if(0===a)i=K(o);else{if(1===a||a>4){n+=oe,r++;continue}var s=[o],c=1;while(ct||"%"!==G(e,r))break;var l=se(e,r+1);if(l!==l||l>191||l<128)break;if(1===c){if(224===o&&l<160)break;if(237===o&&l>159)break;if(240===o&&l<144)break;if(244===o&&l>143)break}X(s,l),r+=2,c++}if(s.length!==a){n+=oe;continue}var u=le(s);if(null===u){for(var d=0;d=t.length)return e.target=null,z(void 0,!0);var r=t[n];switch(e.kind){case"keys":return z(r.key,!1);case"values":return z(r.value,!1)}return z([r.key,r.value],!1)},!0),ve=function(e){this.entries=[],this.url=null,void 0!==e&&(w(e)?this.parseObject(e):this.parseQuery("string"==typeof e?"?"===G(e,0)?ne(e,1):e:x(e)))};ve.prototype={type:Y,bindURL:function(e){this.url=e,this.update()},parseObject:function(e){var t,n,r,i,o,a,c,l=this.entries,u=S(e);if(u){t=C(e,u),n=t.next;while(!(r=s(n,t)).done){if(i=C(A(r.value)),o=i.next,(a=s(o,i)).done||(c=s(o,i)).done||!s(o,i).done)throw new W("Expected sequence with length 2");X(l,{key:x(a.value),value:x(c.value)})}}else for(var d in e)_(e,d)&&X(l,{key:d,value:x(e[d])})},parseQuery:function(e){if(e){var t,n,r=this.entries,i=te(e,"&"),o=0;while(o0?arguments[0]:void 0,t=P(this,new ve(e));l||(this.size=t.entries.length)},ye=ge.prototype;if(f(ye,{append:function(e,t){var n=E(this);T(arguments.length,2),X(n.entries,{key:x(e),value:x(t)}),l||this.size++,n.updateURL()},delete:function(e){var t=E(this),n=T(arguments.length,1),r=t.entries,i=x(e),o=n<2?void 0:arguments[1],a=void 0===o?o:x(o),s=0;while(st.key?1:-1}),e.updateURL()},forEach:function(e){var t,n=E(this).entries,r=b(e,arguments.length>1?arguments[1]:void 0),i=0;while(i1?Me(arguments[1]):{})}}),y(I)){var Ae=function(e){return g(this,R),new I(e,arguments.length>1?Me(arguments[1]):{})};R.constructor=Ae,Ae.prototype=R,r({global:!0,constructor:!0,dontCallGetSet:!0,forced:!0},{Request:Ae})}}e.exports={URLSearchParams:ge,getState:E}},48408:function(e,t,n){"use strict";n(98406)},45806:function(e,t,n){"use strict";n(47764);var r,i=n(46518),o=n(43724),a=n(67416),s=n(22195),c=n(76080),l=n(79504),u=n(36840),d=n(62106),h=n(90679),f=n(39297),p=n(44213),m=n(97916),v=n(67680),g=n(68183).codeAt,y=n(3717),_=n(655),b=n(10687),M=n(22812),A=n(98406),w=n(91181),x=w.set,k=w.getterFor("URL"),L=A.URLSearchParams,C=A.getState,S=s.URL,z=s.TypeError,T=s.encodeURIComponent,O=s.parseInt,H=Math.floor,D=Math.pow,Y=l("".charAt),V=l(/./.exec),P=l([].join),E=l(1.1.toString),j=l([].pop),F=l([].push),I=l("".replace),$=l([].shift),R=l("".split),N=l("".slice),W=l("".toLowerCase),B=l([].unshift),K="Invalid authority",U="Invalid scheme",q="Invalid host",G="Invalid port",J=/[a-z]/i,X=/[\d+\-.a-z]/i,Z=/\d/,Q=/^0x/i,ee=/^[0-7]+$/,te=/^\d+$/,ne=/^[\da-f]+$/i,re=/[\0\t\n\r #%/:<>?@[\\\]^|]/,ie=/[\0\t\n\r #/:<>?@[\\\]^|]/,oe=/^[\u0000-\u0020]+/,ae=/(^|[^\u0000-\u0020])[\u0000-\u0020]+$/,se=/[\t\n\r]/g,ce=function(e){var t,n,r=R(e,".");if(""===r[r.length-1]){if(1===r.length)return!1;r.length--}return t=r[r.length-1],!!V(te,t)||!!V(Q,t)&&(n=N(t,2),""===n||!!V(ne,n))},le=function(e){var t,n,r,i,o,a,s,c=R(e,".");if(c.length&&""===c[c.length-1]&&c.length--,t=c.length,t>4)return null;for(n=[],r=0;r1&&"0"===Y(i,0)&&(o=V(Q,i)?16:8,i=N(i,8===o?1:2)),""===i)a=0;else{if(!V(10===o?te:8===o?ee:ne,i))return null;a=O(i,o)}F(n,a)}for(r=0;r=D(256,5-t))return null}else if(a>255)return null;for(s=j(n),r=0;r6)return;r=0;while(h()){if(i=null,r>0){if(!("."===h()&&r<4))return;d++}if(!V(Z,h()))return;while(V(Z,h())){if(o=O(h(),10),null===i)i=o;else{if(0===i)return;i=10*i+o}if(i>255)return;d++}c[l]=256*c[l]+i,r++,2!==r&&4!==r||l++}if(4!==r)return;break}if(":"===h()){if(d++,!h())return}else if(h())return;c[l++]=t}else{if(null!==u)return;d++,l++,u=l}}if(null!==u){a=l-u,l=7;while(0!==l&&a>0)s=c[l],c[l--]=c[u+a-1],c[u+--a]=s}else if(8!==l)return;return c},de=function(e){for(var t=null,n=1,r=null,i=0,o=0;o<8;o++)0!==e[o]?(i>n&&(t=r,n=i),r=null,i=0):(null===r&&(r=o),++i);return i>n?r:t},he=function(e){var t,n,r,i;if("number"==typeof e){for(t=[],n=0;n<4;n++)B(t,e%256),e=H(e/256);return P(t,".")}if("object"==typeof e){for(t="",r=de(e),n=0;n<8;n++)i&&0===e[n]||(i&&(i=!1),r===n?(t+=n?":":"::",i=!0):(t+=E(e[n],16),n<7&&(t+=":")));return"["+t+"]"}return e},fe={},pe=p({},fe,{" ":1,'"':1,"#":1,"<":1,">":1}),me=p({},pe,{"'":1}),ve=p({},fe,{" ":1,'"':1,"<":1,">":1,"`":1}),ge=p({},ve,{"#":1,"?":1,"{":1,"}":1,"^":1}),ye=p({},ge,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),_e=function(e,t){var n=g(e,0);return n>=32&&n<127&&!f(t,e)?e:"'"===e&&f(t,e)?"%27":T(e)},be={ftp:21,file:null,http:80,https:443,ws:80,wss:443},Me=function(e,t){var n;return 2===e.length&&V(J,Y(e,0))&&(":"===(n=Y(e,1))||!t&&"|"===n)},Ae=function(e){var t;return e.length>1&&Me(N(e,0,2))&&(2===e.length||"/"===(t=Y(e,2))||"\\"===t||"?"===t||"#"===t)},we=function(e){return"."===e||"%2e"===W(e)},xe=function(e){return e=W(e),".."===e||"%2e."===e||".%2e"===e||"%2e%2e"===e},ke={},Le={},Ce={},Se={},ze={},Te={},Oe={},He={},De={},Ye={},Ve={},Pe={},Ee={},je={},Fe={},Ie={},$e={},Re={},Ne={},We={},Be={},Ke=function(e,t,n){var r,i,o,a=_(e);if(t){if(i=this.parse(a),i)throw new z(i);this.searchParams=null}else{if(void 0!==n&&(r=new Ke(n,!0)),i=this.parse(a,null,r),i)throw new z(i);o=C(new L),o.bindURL(this),this.searchParams=o}};Ke.prototype={type:"URL",parse:function(e,t,n){var i,o,a,s,c=this,l=t||ke,u=0,d="",h=!1,p=!1,g=!1;e=_(e),t||(c.scheme="",c.username="",c.password="",c.host=null,c.port=null,c.path=[],c.query=null,c.fragment=null,c.cannotBeABaseURL=!1,e=I(e,oe,""),e=I(e,ae,"$1")),e=I(e,se,""),i=m(e);while(u<=i.length){switch(o=i[u],l){case ke:if(!o||!V(J,o)){if(t)return U;l=Ce;continue}d+=W(o),l=Le;break;case Le:if(o&&V(X,o))d+=W(o);else{if(":"!==o){if(t)return U;d="",l=Ce,u=0;continue}if(t&&(c.isSpecial()!==f(be,d)||"file"===d&&(c.includesCredentials()||null!==c.port)||"file"===c.scheme&&""===c.host))return;if(c.scheme=d,t)return void(c.isSpecial()&&be[c.scheme]===c.port&&(c.port=null));d="","file"===c.scheme?l=je:c.isSpecial()&&n&&n.scheme===c.scheme?l=Se:c.isSpecial()?l=He:"/"===i[u+1]?(l=ze,u++):(c.cannotBeABaseURL=!0,F(c.path,""),l=Ne)}break;case Ce:if(!n||n.cannotBeABaseURL&&"#"!==o)return U;if(n.cannotBeABaseURL&&"#"===o){c.scheme=n.scheme,c.path=v(n.path),c.query=n.query,c.fragment="",c.cannotBeABaseURL=!0,l=Be;break}l="file"===n.scheme?je:Te;continue;case Se:if("/"!==o||"/"!==i[u+1]){l=Te;continue}l=De,u++;break;case ze:if("/"===o){l=Ye;break}l=Re;continue;case Te:if(c.scheme=n.scheme,o===r)c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,c.path=v(n.path),c.query=n.query;else if("/"===o||"\\"===o&&c.isSpecial())l=Oe;else if("?"===o)c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,c.path=v(n.path),c.query="",l=We;else{if("#"!==o){c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,c.path=v(n.path),c.path.length&&c.path.length--,l=Re;continue}c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,c.path=v(n.path),c.query=n.query,c.fragment="",l=Be}break;case Oe:if(!c.isSpecial()||"/"!==o&&"\\"!==o){if("/"!==o){c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,l=Re;continue}l=Ye}else l=De;break;case He:if(l=De,"/"!==o||"/"!==i[u+1])continue;u++;break;case De:if("/"!==o&&"\\"!==o){l=Ye;continue}break;case Ye:if("@"===o){h&&(d="%40"+d),h=!0,a=m(d);for(var y=0;y65535)return G;c.port=c.isSpecial()&&A===be[c.scheme]?null:A,d=""}if(t)return;l=$e;continue}return G}d+=o;break;case je:if(c.scheme="file",c.host="","/"===o||"\\"===o)l=Fe;else{if(!n||"file"!==n.scheme){l=Re;continue}switch(o){case r:c.host=n.host,c.path=v(n.path),c.query=n.query;break;case"?":c.host=n.host,c.path=v(n.path),c.query="",l=We;break;case"#":c.host=n.host,c.path=v(n.path),c.query=n.query,c.fragment="",l=Be;break;default:c.host=n.host,Ae(P(v(i,u),""))||(c.path=v(n.path),c.shortenPath()),l=Re;continue}}break;case Fe:if("/"===o||"\\"===o){l=Ie;break}n&&"file"===n.scheme&&(c.host=n.host,!Ae(P(v(i,u),""))&&Me(n.path[0],!0)&&F(c.path,n.path[0])),l=Re;continue;case Ie:if(o===r||"/"===o||"\\"===o||"?"===o||"#"===o){if(!t&&Me(d))l=Re;else if(""===d){if(c.host="",t)return;l=$e}else{if(s=c.parseHost(d),s)return s;if("localhost"===c.host&&(c.host=""),t)return;d="",l=$e}continue}d+=o;break;case $e:if(c.isSpecial()){if(l=Re,"/"!==o&&"\\"!==o)continue}else if(t||"?"!==o)if(t||"#"!==o){if(o!==r&&(l=Re,"/"!==o))continue}else c.fragment="",l=Be;else c.query="",l=We;break;case Re:if(o===r||"/"===o||"\\"===o&&c.isSpecial()||!t&&("?"===o||"#"===o)){if(xe(d)?(c.shortenPath(),"/"===o||"\\"===o&&c.isSpecial()||F(c.path,"")):we(d)?"/"===o||"\\"===o&&c.isSpecial()||F(c.path,""):("file"===c.scheme&&!c.path.length&&Me(d)&&(null!==c.host&&""!==c.host&&(c.host=""),d=Y(d,0)+":"),F(c.path,d)),d="","file"===c.scheme&&(o===r||"?"===o||"#"===o))while(c.path.length>1&&""===c.path[0])$(c.path);"?"===o?(c.query="",l=We):"#"===o&&(c.fragment="",l=Be)}else d+=_e(o,ge);break;case Ne:"?"===o?(c.query="",l=We):"#"===o?(c.fragment="",l=Be):o!==r&&(c.path[0]+=_e(o,fe));break;case We:t||"#"!==o?o!==r&&(c.query+=_e(o,c.isSpecial()?me:pe)):(c.fragment="",l=Be);break;case Be:o!==r&&(c.fragment+=_e(o,ve));break}u++}},parseHost:function(e){var t,n,r;if("["===Y(e,0)){if("]"!==Y(e,e.length-1))return q;if(t=ue(N(e,1,-1)),!t)return q;this.host=t}else if(this.isSpecial()){if(e=y(e),V(re,e))return q;if(ce(e)){if(t=le(e),null===t)return q;this.host=t}else this.host=e}else{if(V(ie,e))return q;for(t="",n=m(e),r=0;r1&&""===a[0]&&(l+="/."),l+=e.cannotBeABaseURL?a[0]:a.length?"/"+P(a,"/"):"",null!==s&&(l+="?"+s),null!==c&&(l+="#"+c),l},setHref:function(e){var t=this.parse(e);if(t)throw new z(t);this.searchParams.update()},getOrigin:function(){var e=this.scheme,t=this.port;if("blob"===e)try{return new Ue(this.path[0]).origin}catch(n){return"null"}return"file"!==e&&this.isSpecial()?e+"://"+he(this.host)+(null!==t?":"+t:""):"null"},getProtocol:function(){return this.scheme+":"},setProtocol:function(e){this.parse(_(e)+":",ke)},getUsername:function(){return this.username},setUsername:function(e){var t=m(_(e));if(!this.cannotHaveUsernamePasswordPort()){this.username="";for(var n=0;n1?arguments[1]:void 0,r=x(t,new Ke(e,!1,n));o||(t.href=r.serialize(),t.origin=r.getOrigin(),t.protocol=r.getProtocol(),t.username=r.getUsername(),t.password=r.getPassword(),t.host=r.getHost(),t.hostname=r.getHostname(),t.port=r.getPort(),t.pathname=r.getPathname(),t.search=r.getSearch(),t.searchParams=r.getSearchParams(),t.hash=r.getHash())},qe=Ue.prototype,Ge=function(e,t){return{get:function(){return k(this)[e]()},set:t&&function(e){return k(this)[t](e)},configurable:!0,enumerable:!0}};if(o&&(d(qe,"href",Ge("serialize","setHref")),d(qe,"origin",Ge("getOrigin")),d(qe,"protocol",Ge("getProtocol","setProtocol")),d(qe,"username",Ge("getUsername","setUsername")),d(qe,"password",Ge("getPassword","setPassword")),d(qe,"host",Ge("getHost","setHost")),d(qe,"hostname",Ge("getHostname","setHostname")),d(qe,"port",Ge("getPort","setPort")),d(qe,"pathname",Ge("getPathname","setPathname")),d(qe,"search",Ge("getSearch","setSearch")),d(qe,"searchParams",Ge("getSearchParams")),d(qe,"hash",Ge("getHash","setHash"))),u(qe,"toJSON",function(){return k(this).serialize()},{enumerable:!0}),u(qe,"toString",function(){return k(this).serialize()},{enumerable:!0}),S){var Je=S.createObjectURL,Xe=S.revokeObjectURL;Je&&u(Ue,"createObjectURL",c(Je,S)),Xe&&u(Ue,"revokeObjectURL",c(Xe,S))}b(Ue,"URL"),i({global:!0,constructor:!0,forced:!a,sham:!o},{URL:Ue})},3296:function(e,t,n){"use strict";n(45806)},27208:function(e,t,n){"use strict";var r=n(46518),i=n(69565);r({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return i(URL.prototype.toString,this)}})},6535:function(e){(function(t,n){e.exports=n()})(0,function(){"use strict";function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(t)}var t=/^\s+/,n=/\s+$/;function r(e,t){if(e=e||"",t=t||{},e instanceof r)return e;if(!(this instanceof r))return new r(e,t);var n=i(e);this._originalInput=e,this._r=n.r,this._g=n.g,this._b=n.b,this._a=n.a,this._roundA=Math.round(100*this._a)/100,this._format=t.format||n.format,this._gradientType=t.gradientType,this._r<1&&(this._r=Math.round(this._r)),this._g<1&&(this._g=Math.round(this._g)),this._b<1&&(this._b=Math.round(this._b)),this._ok=n.ok}function i(t){var n={r:0,g:0,b:0},r=1,i=null,a=null,c=null,u=!1,d=!1;return"string"==typeof t&&(t=I(t)),"object"==e(t)&&(F(t.r)&&F(t.g)&&F(t.b)?(n=o(t.r,t.g,t.b),u=!0,d="%"===String(t.r).substr(-1)?"prgb":"rgb"):F(t.h)&&F(t.s)&&F(t.v)?(i=V(t.s),a=V(t.v),n=l(t.h,i,a),u=!0,d="hsv"):F(t.h)&&F(t.s)&&F(t.l)&&(i=V(t.s),c=V(t.l),n=s(t.h,i,c),u=!0,d="hsl"),t.hasOwnProperty("a")&&(r=t.a)),r=S(r),{ok:u,format:t.format||d,r:Math.min(255,Math.max(n.r,0)),g:Math.min(255,Math.max(n.g,0)),b:Math.min(255,Math.max(n.b,0)),a:r}}function o(e,t,n){return{r:255*z(e,255),g:255*z(t,255),b:255*z(n,255)}}function a(e,t,n){e=z(e,255),t=z(t,255),n=z(n,255);var r,i,o=Math.max(e,t,n),a=Math.min(e,t,n),s=(o+a)/2;if(o==a)r=i=0;else{var c=o-a;switch(i=s>.5?c/(2-o-a):c/(o+a),o){case e:r=(t-n)/c+(t1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}if(e=z(e,360),t=z(t,100),n=z(n,100),0===t)r=i=o=n;else{var s=n<.5?n*(1+t):n+t-n*t,c=2*n-s;r=a(c,s,e+1/3),i=a(c,s,e),o=a(c,s,e-1/3)}return{r:255*r,g:255*i,b:255*o}}function c(e,t,n){e=z(e,255),t=z(t,255),n=z(n,255);var r,i,o=Math.max(e,t,n),a=Math.min(e,t,n),s=o,c=o-a;if(i=0===o?0:c/o,o==a)r=0;else{switch(o){case e:r=(t-n)/c+(t>1)+720)%360;--t;)i.h=(i.h+o)%360,a.push(r(i));return a}function x(e,t){t=t||6;var n=r(e).toHsv(),i=n.h,o=n.s,a=n.v,s=[],c=1/t;while(t--)s.push(r({h:i,s:o,v:a})),a=(a+c)%1;return s}r.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var e=this.toRgb();return(299*e.r+587*e.g+114*e.b)/1e3},getLuminance:function(){var e,t,n,r,i,o,a=this.toRgb();return e=a.r/255,t=a.g/255,n=a.b/255,r=e<=.03928?e/12.92:Math.pow((e+.055)/1.055,2.4),i=t<=.03928?t/12.92:Math.pow((t+.055)/1.055,2.4),o=n<=.03928?n/12.92:Math.pow((n+.055)/1.055,2.4),.2126*r+.7152*i+.0722*o},setAlpha:function(e){return this._a=S(e),this._roundA=Math.round(100*this._a)/100,this},toHsv:function(){var e=c(this._r,this._g,this._b);return{h:360*e.h,s:e.s,v:e.v,a:this._a}},toHsvString:function(){var e=c(this._r,this._g,this._b),t=Math.round(360*e.h),n=Math.round(100*e.s),r=Math.round(100*e.v);return 1==this._a?"hsv("+t+", "+n+"%, "+r+"%)":"hsva("+t+", "+n+"%, "+r+"%, "+this._roundA+")"},toHsl:function(){var e=a(this._r,this._g,this._b);return{h:360*e.h,s:e.s,l:e.l,a:this._a}},toHslString:function(){var e=a(this._r,this._g,this._b),t=Math.round(360*e.h),n=Math.round(100*e.s),r=Math.round(100*e.l);return 1==this._a?"hsl("+t+", "+n+"%, "+r+"%)":"hsla("+t+", "+n+"%, "+r+"%, "+this._roundA+")"},toHex:function(e){return u(this._r,this._g,this._b,e)},toHexString:function(e){return"#"+this.toHex(e)},toHex8:function(e){return d(this._r,this._g,this._b,this._a,e)},toHex8String:function(e){return"#"+this.toHex8(e)},toRgb:function(){return{r:Math.round(this._r),g:Math.round(this._g),b:Math.round(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+")":"rgba("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:Math.round(100*z(this._r,255))+"%",g:Math.round(100*z(this._g,255))+"%",b:Math.round(100*z(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+Math.round(100*z(this._r,255))+"%, "+Math.round(100*z(this._g,255))+"%, "+Math.round(100*z(this._b,255))+"%)":"rgba("+Math.round(100*z(this._r,255))+"%, "+Math.round(100*z(this._g,255))+"%, "+Math.round(100*z(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1)&&(L[u(this._r,this._g,this._b,!0)]||!1)},toFilter:function(e){var t="#"+h(this._r,this._g,this._b,this._a),n=t,i=this._gradientType?"GradientType = 1, ":"";if(e){var o=r(e);n="#"+h(o._r,o._g,o._b,o._a)}return"progid:DXImageTransform.Microsoft.gradient("+i+"startColorstr="+t+",endColorstr="+n+")"},toString:function(e){var t=!!e;e=e||this._format;var n=!1,r=this._a<1&&this._a>=0,i=!t&&r&&("hex"===e||"hex6"===e||"hex3"===e||"hex4"===e||"hex8"===e||"name"===e);return i?"name"===e&&0===this._a?this.toName():this.toRgbString():("rgb"===e&&(n=this.toRgbString()),"prgb"===e&&(n=this.toPercentageRgbString()),"hex"!==e&&"hex6"!==e||(n=this.toHexString()),"hex3"===e&&(n=this.toHexString(!0)),"hex4"===e&&(n=this.toHex8String(!0)),"hex8"===e&&(n=this.toHex8String()),"name"===e&&(n=this.toName()),"hsl"===e&&(n=this.toHslString()),"hsv"===e&&(n=this.toHsvString()),n||this.toHexString())},clone:function(){return r(this.toString())},_applyModification:function(e,t){var n=e.apply(null,[this].concat([].slice.call(t)));return this._r=n._r,this._g=n._g,this._b=n._b,this.setAlpha(n._a),this},lighten:function(){return this._applyModification(v,arguments)},brighten:function(){return this._applyModification(g,arguments)},darken:function(){return this._applyModification(y,arguments)},desaturate:function(){return this._applyModification(f,arguments)},saturate:function(){return this._applyModification(p,arguments)},greyscale:function(){return this._applyModification(m,arguments)},spin:function(){return this._applyModification(_,arguments)},_applyCombination:function(e,t){return e.apply(null,[this].concat([].slice.call(t)))},analogous:function(){return this._applyCombination(w,arguments)},complement:function(){return this._applyCombination(b,arguments)},monochromatic:function(){return this._applyCombination(x,arguments)},splitcomplement:function(){return this._applyCombination(A,arguments)},triad:function(){return this._applyCombination(M,[3])},tetrad:function(){return this._applyCombination(M,[4])}},r.fromRatio=function(t,n){if("object"==e(t)){var i={};for(var o in t)t.hasOwnProperty(o)&&(i[o]="a"===o?t[o]:V(t[o]));t=i}return r(t,n)},r.equals=function(e,t){return!(!e||!t)&&r(e).toRgbString()==r(t).toRgbString()},r.random=function(){return r.fromRatio({r:Math.random(),g:Math.random(),b:Math.random()})},r.mix=function(e,t,n){n=0===n?0:n||50;var i=r(e).toRgb(),o=r(t).toRgb(),a=n/100,s={r:(o.r-i.r)*a+i.r,g:(o.g-i.g)*a+i.g,b:(o.b-i.b)*a+i.b,a:(o.a-i.a)*a+i.a};return r(s)},r.readability=function(e,t){var n=r(e),i=r(t);return(Math.max(n.getLuminance(),i.getLuminance())+.05)/(Math.min(n.getLuminance(),i.getLuminance())+.05)},r.isReadable=function(e,t,n){var i,o,a=r.readability(e,t);switch(o=!1,i=$(n),i.level+i.size){case"AAsmall":case"AAAlarge":o=a>=4.5;break;case"AAlarge":o=a>=3;break;case"AAAsmall":o=a>=7;break}return o},r.mostReadable=function(e,t,n){var i,o,a,s,c=null,l=0;n=n||{},o=n.includeFallbackColors,a=n.level,s=n.size;for(var u=0;ul&&(l=i,c=r(t[u]));return r.isReadable(e,c,{level:a,size:s})||!o?c:(n.includeFallbackColors=!1,r.mostReadable(e,["#fff","#000"],n))};var k=r.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},L=r.hexNames=C(k);function C(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[e[n]]=n);return t}function S(e){return e=parseFloat(e),(isNaN(e)||e<0||e>1)&&(e=1),e}function z(e,t){H(e)&&(e="100%");var n=D(e);return e=Math.min(t,Math.max(0,parseFloat(e))),n&&(e=parseInt(e*t,10)/100),Math.abs(e-t)<1e-6?1:e%t/parseFloat(t)}function T(e){return Math.min(1,Math.max(0,e))}function O(e){return parseInt(e,16)}function H(e){return"string"==typeof e&&-1!=e.indexOf(".")&&1===parseFloat(e)}function D(e){return"string"===typeof e&&-1!=e.indexOf("%")}function Y(e){return 1==e.length?"0"+e:""+e}function V(e){return e<=1&&(e=100*e+"%"),e}function P(e){return Math.round(255*parseFloat(e)).toString(16)}function E(e){return O(e)/255}var j=function(){var e="[-\\+]?\\d+%?",t="[-\\+]?\\d*\\.\\d+%?",n="(?:"+t+")|(?:"+e+")",r="[\\s|\\(]+("+n+")[,|\\s]+("+n+")[,|\\s]+("+n+")\\s*\\)?",i="[\\s|\\(]+("+n+")[,|\\s]+("+n+")[,|\\s]+("+n+")[,|\\s]+("+n+")\\s*\\)?";return{CSS_UNIT:new RegExp(n),rgb:new RegExp("rgb"+r),rgba:new RegExp("rgba"+i),hsl:new RegExp("hsl"+r),hsla:new RegExp("hsla"+i),hsv:new RegExp("hsv"+r),hsva:new RegExp("hsva"+i),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();function F(e){return!!j.CSS_UNIT.exec(e)}function I(e){e=e.replace(t,"").replace(n,"").toLowerCase();var r,i=!1;if(k[e])e=k[e],i=!0;else if("transparent"==e)return{r:0,g:0,b:0,a:0,format:"name"};return(r=j.rgb.exec(e))?{r:r[1],g:r[2],b:r[3]}:(r=j.rgba.exec(e))?{r:r[1],g:r[2],b:r[3],a:r[4]}:(r=j.hsl.exec(e))?{h:r[1],s:r[2],l:r[3]}:(r=j.hsla.exec(e))?{h:r[1],s:r[2],l:r[3],a:r[4]}:(r=j.hsv.exec(e))?{h:r[1],s:r[2],v:r[3]}:(r=j.hsva.exec(e))?{h:r[1],s:r[2],v:r[3],a:r[4]}:(r=j.hex8.exec(e))?{r:O(r[1]),g:O(r[2]),b:O(r[3]),a:E(r[4]),format:i?"name":"hex8"}:(r=j.hex6.exec(e))?{r:O(r[1]),g:O(r[2]),b:O(r[3]),format:i?"name":"hex"}:(r=j.hex4.exec(e))?{r:O(r[1]+""+r[1]),g:O(r[2]+""+r[2]),b:O(r[3]+""+r[3]),a:E(r[4]+""+r[4]),format:i?"name":"hex8"}:!!(r=j.hex3.exec(e))&&{r:O(r[1]+""+r[1]),g:O(r[2]+""+r[2]),b:O(r[3]+""+r[3]),format:i?"name":"hex"}}function $(e){var t,n;return e=e||{level:"AA",size:"small"},t=(e.level||"AA").toUpperCase(),n=(e.size||"small").toLowerCase(),"AA"!==t&&"AAA"!==t&&(t="AA"),"small"!==n&&"large"!==n&&(n="small"),{level:t,size:n}}return r})},93511:function(e,t,n){"use strict";n.d(t,{In:function(){return Je}});var r=n(85471);const i=/^[a-z0-9]+(-[a-z0-9]+)*$/,o=(e,t,n,r="")=>{const i=e.split(":");if("@"===e.slice(0,1)){if(i.length<2||i.length>3)return null;r=i.shift().slice(1)}if(i.length>3||!i.length)return null;if(i.length>1){const e=i.pop(),n=i.pop(),o={provider:i.length>0?i[0]:r,prefix:n,name:e};return t&&!a(o)?null:o}const o=i[0],s=o.split("-");if(s.length>1){const e={provider:r,prefix:s.shift(),name:s.join("-")};return t&&!a(e)?null:e}if(n&&""===r){const e={provider:r,prefix:"",name:o};return t&&!a(e,n)?null:e}return null},a=(e,t)=>!!e&&!(""!==e.provider&&!e.provider.match(i)||!(t&&""===e.prefix||e.prefix.match(i))||!e.name.match(i)),s=Object.freeze({left:0,top:0,width:16,height:16}),c=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),l=Object.freeze({...s,...c}),u=Object.freeze({...l,body:"",hidden:!1});function d(e,t){const n={};!e.hFlip!==!t.hFlip&&(n.hFlip=!0),!e.vFlip!==!t.vFlip&&(n.vFlip=!0);const r=((e.rotate||0)+(t.rotate||0))%4;return r&&(n.rotate=r),n}function h(e,t){const n=d(e,t);for(const r in u)r in c?r in e&&!(r in n)&&(n[r]=c[r]):r in t?n[r]=t[r]:r in e&&(n[r]=e[r]);return n}function f(e,t){const n=e.icons,r=e.aliases||Object.create(null),i=Object.create(null);function o(e){if(n[e])return i[e]=[];if(!(e in i)){i[e]=null;const t=r[e]&&r[e].parent,n=t&&o(t);n&&(i[e]=[t].concat(n))}return i[e]}return(t||Object.keys(n).concat(Object.keys(r))).forEach(o),i}function p(e,t,n){const r=e.icons,i=e.aliases||Object.create(null);let o={};function a(e){o=h(r[e]||i[e],o)}return a(t),n.forEach(a),h(e,o)}function m(e,t){const n=[];if("object"!==typeof e||"object"!==typeof e.icons)return n;e.not_found instanceof Array&&e.not_found.forEach(e=>{t(e,null),n.push(e)});const r=f(e);for(const i in r){const o=r[i];o&&(t(i,p(e,i,o)),n.push(i))}return n}const v={provider:"",aliases:{},not_found:{},...s};function g(e,t){for(const n in t)if(n in e&&typeof e[n]!==typeof t[n])return!1;return!0}function y(e){if("object"!==typeof e||null===e)return null;const t=e;if("string"!==typeof t.prefix||!e.icons||"object"!==typeof e.icons)return null;if(!g(e,v))return null;const n=t.icons;for(const o in n){const e=n[o];if(!o.match(i)||"string"!==typeof e.body||!g(e,u))return null}const r=t.aliases||Object.create(null);for(const o in r){const e=r[o],t=e.parent;if(!o.match(i)||"string"!==typeof t||!n[t]&&!r[t]||!g(e,u))return null}return t}const _=Object.create(null);function b(e,t){return{provider:e,prefix:t,icons:Object.create(null),missing:new Set}}function M(e,t){const n=_[e]||(_[e]=Object.create(null));return n[t]||(n[t]=b(e,t))}function A(e,t){return y(t)?m(t,(t,n)=>{n?e.icons[t]=n:e.missing.add(t)}):[]}function w(e,t,n){try{if("string"===typeof n.body)return e.icons[t]={...n},!0}catch(r){}return!1}let x=!1;function k(e){return"boolean"===typeof e&&(x=e),x}function L(e){const t="string"===typeof e?o(e,!0,x):e;if(t){const e=M(t.provider,t.prefix),n=t.name;return e.icons[n]||(e.missing.has(n)?null:void 0)}}function C(e,t){const n=o(e,!0,x);if(!n)return!1;const r=M(n.provider,n.prefix);return w(r,n.name,t)}function S(e,t){if("object"!==typeof e)return!1;if("string"!==typeof t&&(t=e.provider||""),x&&!t&&!e.prefix){let t=!1;return y(e)&&(e.prefix="",m(e,(e,n)=>{n&&C(e,n)&&(t=!0)})),t}const n=e.prefix;if(!a({provider:t,prefix:n,name:"a"}))return!1;const r=M(t,n);return!!A(r,e)}const z=Object.freeze({width:null,height:null}),T=Object.freeze({...z,...c}),O=/(-?[0-9.]*[0-9]+[0-9.]*)/g,H=/^-?[0-9.]*[0-9]+[0-9.]*$/g;function D(e,t,n){if(1===t)return e;if(n=n||100,"number"===typeof e)return Math.ceil(e*t*n)/n;if("string"!==typeof e)return e;const r=e.split(O);if(null===r||!r.length)return e;const i=[];let o=r.shift(),a=H.test(o);while(1){if(a){const e=parseFloat(o);isNaN(e)?i.push(o):i.push(Math.ceil(e*t*n)/n)}else i.push(o);if(o=r.shift(),void 0===o)return i.join("");a=!a}}const Y=e=>"unset"===e||"undefined"===e||"none"===e;function V(e,t){const n={...l,...e},r={...T,...t},i={left:n.left,top:n.top,width:n.width,height:n.height};let o=n.body;[n,r].forEach(e=>{const t=[],n=e.hFlip,r=e.vFlip;let a,s=e.rotate;switch(n?r?s+=2:(t.push("translate("+(i.width+i.left).toString()+" "+(0-i.top).toString()+")"),t.push("scale(-1 1)"),i.top=i.left=0):r&&(t.push("translate("+(0-i.left).toString()+" "+(i.height+i.top).toString()+")"),t.push("scale(1 -1)"),i.top=i.left=0),s<0&&(s-=4*Math.floor(s/4)),s%=4,s){case 1:a=i.height/2+i.top,t.unshift("rotate(90 "+a.toString()+" "+a.toString()+")");break;case 2:t.unshift("rotate(180 "+(i.width/2+i.left).toString()+" "+(i.height/2+i.top).toString()+")");break;case 3:a=i.width/2+i.left,t.unshift("rotate(-90 "+a.toString()+" "+a.toString()+")");break}s%2===1&&(i.left!==i.top&&(a=i.left,i.left=i.top,i.top=a),i.width!==i.height&&(a=i.width,i.width=i.height,i.height=a)),t.length&&(o=''+o+"")});const a=r.width,s=r.height,c=i.width,u=i.height;let d,h;null===a?(h=null===s?"1em":"auto"===s?u:s,d=D(h,c/u)):(d="auto"===a?c:a,h=null===s?D(d,u/c):"auto"===s?u:s);const f={},p=(e,t)=>{Y(t)||(f[e]=t.toString())};return p("width",d),p("height",h),f.viewBox=i.left.toString()+" "+i.top.toString()+" "+c.toString()+" "+u.toString(),{attributes:f,body:o}}const P=/\sid="(\S+)"/g,E="IconifyId"+Date.now().toString(16)+(16777216*Math.random()|0).toString(16);let j=0;function F(e,t=E){const n=[];let r;while(r=P.exec(e))n.push(r[1]);if(!n.length)return e;const i="suffix"+(16777216*Math.random()|Date.now()).toString(16);return n.forEach(n=>{const r="function"===typeof t?t(n):t+(j++).toString(),o=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");e=e.replace(new RegExp('([#;"])('+o+')([")]|\\.[a-z])',"g"),"$1"+r+i+"$3")}),e=e.replace(new RegExp(i,"g"),""),e}const I=Object.create(null);function $(e,t){I[e]=t}function R(e){return I[e]||I[""]}function N(e){let t;if("string"===typeof e.resources)t=[e.resources];else if(t=e.resources,!(t instanceof Array)||!t.length)return null;const n={resources:t,path:e.path||"/",maxURL:e.maxURL||500,rotate:e.rotate||750,timeout:e.timeout||5e3,random:!0===e.random,index:e.index||0,dataAfterTimeout:!1!==e.dataAfterTimeout};return n}const W=Object.create(null),B=["https://api.simplesvg.com","https://api.unisvg.com"],K=[];while(B.length>0)1===B.length||Math.random()>.5?K.push(B.shift()):K.push(B.pop());function U(e,t){const n=N(t);return null!==n&&(W[e]=n,!0)}function q(e){return W[e]}W[""]=N({resources:["https://api.iconify.design"].concat(K)});const G=()=>{let e;try{if(e=fetch,"function"===typeof e)return e}catch(t){}};let J=G();function X(e,t){const n=q(e);if(!n)return 0;let r;if(n.maxURL){let e=0;n.resources.forEach(t=>{const n=t;e=Math.max(e,n.length)});const i=t+".json?icons=";r=n.maxURL-e-n.path.length-i.length}else r=0;return r}function Z(e){return 404===e}const Q=(e,t,n)=>{const r=[],i=X(e,t),o="icons";let a={type:o,provider:e,prefix:t,icons:[]},s=0;return n.forEach((n,c)=>{s+=n.length+1,s>=i&&c>0&&(r.push(a),a={type:o,provider:e,prefix:t,icons:[]},s=n.length),a.icons.push(n)}),r.push(a),r};function ee(e){if("string"===typeof e){const t=q(e);if(t)return t.path}return"/"}const te=(e,t,n)=>{if(!J)return void n("abort",424);let r=ee(t.provider);switch(t.type){case"icons":{const e=t.prefix,n=t.icons,i=n.join(","),o=new URLSearchParams({icons:i});r+=e+".json?"+o.toString();break}case"custom":{const e=t.uri;r+="/"===e.slice(0,1)?e.slice(1):e;break}default:return void n("abort",400)}let i=503;J(e+r).then(e=>{const t=e.status;if(200===t)return i=501,e.json();setTimeout(()=>{n(Z(t)?"abort":"next",t)})}).then(e=>{"object"===typeof e&&null!==e?setTimeout(()=>{n("success",e)}):setTimeout(()=>{404===e?n("abort",e):n("next",i)})}).catch(()=>{n("next",i)})},ne={prepare:Q,send:te};function re(e){const t={loaded:[],missing:[],pending:[]},n=Object.create(null);e.sort((e,t)=>e.provider!==t.provider?e.provider.localeCompare(t.provider):e.prefix!==t.prefix?e.prefix.localeCompare(t.prefix):e.name.localeCompare(t.name));let r={provider:"",prefix:"",name:""};return e.forEach(e=>{if(r.name===e.name&&r.prefix===e.prefix&&r.provider===e.provider)return;r=e;const i=e.provider,o=e.prefix,a=e.name,s=n[i]||(n[i]=Object.create(null)),c=s[o]||(s[o]=M(i,o));let l;l=a in c.icons?t.loaded:""===o||c.missing.has(a)?t.missing:t.pending;const u={provider:i,prefix:o,name:a};l.push(u)}),t}function ie(e,t){e.forEach(e=>{const n=e.loaderCallbacks;n&&(e.loaderCallbacks=n.filter(e=>e.id!==t))})}function oe(e){e.pendingCallbacksFlag||(e.pendingCallbacksFlag=!0,setTimeout(()=>{e.pendingCallbacksFlag=!1;const t=e.loaderCallbacks?e.loaderCallbacks.slice(0):[];if(!t.length)return;let n=!1;const r=e.provider,i=e.prefix;t.forEach(t=>{const o=t.icons,a=o.pending.length;o.pending=o.pending.filter(t=>{if(t.prefix!==i)return!0;const a=t.name;if(e.icons[a])o.loaded.push({provider:r,prefix:i,name:a});else{if(!e.missing.has(a))return n=!0,!0;o.missing.push({provider:r,prefix:i,name:a})}return!1}),o.pending.length!==a&&(n||ie([e],t.id),t.callback(o.loaded.slice(0),o.missing.slice(0),o.pending.slice(0),t.abort))})}))}let ae=0;function se(e,t,n){const r=ae++,i=ie.bind(null,n,r);if(!t.pending.length)return i;const o={id:r,icons:t,callback:e,abort:i};return n.forEach(e=>{(e.loaderCallbacks||(e.loaderCallbacks=[])).push(o)}),i}function ce(e,t=!0,n=!1){const r=[];return e.forEach(e=>{const i="string"===typeof e?o(e,t,n):e;i&&r.push(i)}),r}var le={resources:[],index:0,timeout:2e3,rotate:750,random:!1,dataAfterTimeout:!1};function ue(e,t,n,r){const i=e.resources.length,o=e.random?Math.floor(Math.random()*i):e.index;let a;if(e.random){let t=e.resources.slice(0);a=[];while(t.length>1){const e=Math.floor(Math.random()*t.length);a.push(t[e]),t=t.slice(0,e).concat(t.slice(e+1))}a=a.concat(t)}else a=e.resources.slice(o).concat(e.resources.slice(0,o));const s=Date.now();let c,l="pending",u=0,d=null,h=[],f=[];function p(){d&&(clearTimeout(d),d=null)}function m(){"pending"===l&&(l="aborted"),p(),h.forEach(e=>{"pending"===e.status&&(e.status="aborted")}),h=[]}function v(e,t){t&&(f=[]),"function"===typeof e&&f.push(e)}function g(){return{startTime:s,payload:t,status:l,queriesSent:u,queriesPending:h.length,subscribe:v,abort:m}}function y(){l="failed",f.forEach(e=>{e(void 0,c)})}function _(){h.forEach(e=>{"pending"===e.status&&(e.status="aborted")}),h=[]}function b(t,n,r){const i="success"!==n;switch(h=h.filter(e=>e!==t),l){case"pending":break;case"failed":if(i||!e.dataAfterTimeout)return;break;default:return}if("abort"===n)return c=r,void y();if(i)return c=r,void(h.length||(a.length?M():y()));if(p(),_(),!e.random){const n=e.resources.indexOf(t.resource);-1!==n&&n!==e.index&&(e.index=n)}l="completed",f.forEach(e=>{e(r)})}function M(){if("pending"!==l)return;p();const r=a.shift();if(void 0===r)return h.length?void(d=setTimeout(()=>{p(),"pending"===l&&(_(),y())},e.timeout)):void y();const i={status:"pending",resource:r,callback:(e,t)=>{b(i,e,t)}};h.push(i),u++,d=setTimeout(M,e.rotate),n(r,t,i.callback)}return"function"===typeof r&&f.push(r),setTimeout(M),g}function de(e){const t={...le,...e};let n=[];function r(){n=n.filter(e=>"pending"===e().status)}function i(e,i,o){const a=ue(t,e,i,(e,t)=>{r(),o&&o(e,t)});return n.push(a),a}function o(e){return n.find(t=>e(t))||null}const a={query:i,find:o,setIndex:e=>{t.index=e},getIndex:()=>t.index,cleanup:r};return a}function he(){}const fe=Object.create(null);function pe(e){if(!fe[e]){const t=q(e);if(!t)return;const n=de(t),r={config:t,redundancy:n};fe[e]=r}return fe[e]}function me(e,t,n){let r,i;if("string"===typeof e){const t=R(e);if(!t)return n(void 0,424),he;i=t.send;const o=pe(e);o&&(r=o.redundancy)}else{const t=N(e);if(t){r=de(t);const n=e.resources?e.resources[0]:"",o=R(n);o&&(i=o.send)}}return r&&i?r.query(t,i,n)().abort:(n(void 0,424),he)}const ve="iconify2",ge="iconify",ye=ge+"-count",_e=ge+"-version",be=36e5,Me=168;function Ae(e,t){try{return e.getItem(t)}catch(n){}}function we(e,t,n){try{return e.setItem(t,n),!0}catch(r){}}function xe(e,t){try{e.removeItem(t)}catch(n){}}function ke(e,t){return we(e,ye,t.toString())}function Le(e){return parseInt(Ae(e,ye))||0}const Ce={local:!0,session:!0},Se={local:new Set,session:new Set};let ze=!1;function Te(e){ze=e}let Oe="undefined"===typeof window?{}:window;function He(e){const t=e+"Storage";try{if(Oe&&Oe[t]&&"number"===typeof Oe[t].length)return Oe[t]}catch(n){}Ce[e]=!1}function De(e,t){const n=He(e);if(!n)return;const r=Ae(n,_e);if(r!==ve){if(r){const e=Le(n);for(let t=0;t{const r=ge+e.toString(),o=Ae(n,r);if("string"===typeof o){try{const n=JSON.parse(o);if("object"===typeof n&&"number"===typeof n.cached&&n.cached>i&&"string"===typeof n.provider&&"object"===typeof n.data&&"string"===typeof n.data.prefix&&t(n,e))return!0}catch(a){}xe(n,r)}};let a=Le(n);for(let s=a-1;s>=0;s--)o(s)||(s===a-1?(a--,ke(n,a)):Se[e].add(s))}function Ye(){if(!ze){Te(!0);for(const e in Ce)De(e,e=>{const t=e.data,n=e.provider,r=t.prefix,i=M(n,r);if(!A(i,t).length)return!1;const o=t.lastModified||-1;return i.lastModifiedCached=i.lastModifiedCached?Math.min(i.lastModifiedCached,o):o,!0})}}function Ve(e,t){const n=e.lastModifiedCached;if(n&&n>=t)return n===t;if(e.lastModifiedCached=t,n)for(const r in Ce)De(r,n=>{const r=n.data;return n.provider!==e.provider||r.prefix!==e.prefix||r.lastModified===t});return!0}function Pe(e,t){function n(n){let r;if(!Ce[n]||!(r=He(n)))return;const i=Se[n];let o;if(i.size)i.delete(o=Array.from(i).shift());else if(o=Le(r),!ke(r,o+1))return;const a={cached:Math.floor(Date.now()/be),provider:e.provider,data:t};return we(r,ge+o.toString(),JSON.stringify(a))}ze||Ye(),t.lastModified&&!Ve(e,t.lastModified)||Object.keys(t.icons).length&&(t.not_found&&(t=Object.assign({},t),delete t.not_found),n("local")||n("session"))}function Ee(){}function je(e){e.iconsLoaderFlag||(e.iconsLoaderFlag=!0,setTimeout(()=>{e.iconsLoaderFlag=!1,oe(e)}))}function Fe(e,t){e.iconsToLoad?e.iconsToLoad=e.iconsToLoad.concat(t).sort():e.iconsToLoad=t,e.iconsQueueFlag||(e.iconsQueueFlag=!0,setTimeout(()=>{e.iconsQueueFlag=!1;const{provider:t,prefix:n}=e,r=e.iconsToLoad;let i;if(delete e.iconsToLoad,!r||!(i=R(t)))return;const o=i.prepare(t,n,r);o.forEach(n=>{me(t,n,t=>{if("object"!==typeof t)n.icons.forEach(t=>{e.missing.add(t)});else try{const n=A(e,t);if(!n.length)return;const r=e.pendingIcons;r&&n.forEach(e=>{r.delete(e)}),Pe(e,t)}catch(r){console.error(r)}je(e)})})}))}const Ie=(e,t)=>{const n=ce(e,!0,k()),r=re(n);if(!r.pending.length){let e=!0;return t&&setTimeout(()=>{e&&t(r.loaded,r.missing,r.pending,Ee)}),()=>{e=!1}}const i=Object.create(null),o=[];let a,s;return r.pending.forEach(e=>{const{provider:t,prefix:n}=e;if(n===s&&t===a)return;a=t,s=n,o.push(M(t,n));const r=i[t]||(i[t]=Object.create(null));r[n]||(r[n]=[])}),r.pending.forEach(e=>{const{provider:t,prefix:n,name:r}=e,o=M(t,n),a=o.pendingIcons||(o.pendingIcons=new Set);a.has(r)||(a.add(r),i[t][n].push(r))}),o.forEach(e=>{const{provider:t,prefix:n}=e;i[t][n].length&&Fe(e,i[t][n])}),t?se(t,r,o):Ee};function $e(e,t){const n={...e};for(const r in t){const e=t[r],i=typeof e;r in z?(null===e||e&&("string"===i||"number"===i))&&(n[r]=e):i===typeof n[r]&&(n[r]="rotate"===r?e%4:e)}return n}const Re=/[\s,]+/;function Ne(e,t){t.split(Re).forEach(t=>{const n=t.trim();switch(n){case"horizontal":e.hFlip=!0;break;case"vertical":e.vFlip=!0;break}})}function We(e,t=0){const n=e.replace(/^-?[0-9.]*/,"");function r(e){while(e<0)e+=4;return e%4}if(""===n){const t=parseInt(e);return isNaN(t)?0:r(t)}if(n!==e){let t=0;switch(n){case"%":t=25;break;case"deg":t=90}if(t){let i=parseFloat(e.slice(0,e.length-n.length));return isNaN(i)?0:(i/=t,i%1===0?r(i):0)}}return t}const Be={...T,inline:!1},Ke={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink","aria-hidden":!0,role:"img"},Ue={};["horizontal","vertical"].forEach(e=>{const t=e.slice(0,1)+"Flip";Ue[e+"-flip"]=t,Ue[e.slice(0,1)+"-flip"]=t,Ue[e+"Flip"]=t});const qe=(e,t,n,r)=>{const i=$e(Be,t),o={...Ke},a={};for(let d in t){const e=t[d];if(void 0!==e)switch(d){case"icon":case"style":case"onLoad":break;case"inline":case"hFlip":case"vFlip":i[d]=!0===e||"true"===e||1===e;break;case"flip":"string"===typeof e&&Ne(i,e);break;case"color":a.color=e;break;case"rotate":"string"===typeof e?i[d]=We(e):"number"===typeof e&&(i[d]=e);break;case"ariaHidden":case"aria-hidden":!0!==e&&"true"!==e&&delete o["aria-hidden"];break;default:const t=Ue[d];t?!0!==e&&"true"!==e&&1!==e||(i[t]=!0):void 0===Be[d]&&(o[d]=e)}}const s=V(r,i);for(let d in s.attributes)o[d]=s.attributes[d];i.inline&&(a.verticalAlign="-0.125em");let c=0,l=t.id;"string"===typeof l&&(l=l.replace(/-/g,"_"));const u={attrs:o,domProps:{innerHTML:F(s.body,l?()=>l+"ID"+c++:"iconifyVue")}};return Object.keys(a).length>0&&(u.style=a),n&&(["on","ref"].forEach(e=>{void 0!==n[e]&&(u[e]=n[e])}),["staticClass","class"].forEach(e=>{void 0!==n[e]&&(u.class=n[e])})),e("svg",u)};if(k(!0),$("",ne),"undefined"!==typeof document&&"undefined"!==typeof window){Ye();const e=window;if(void 0!==e.IconifyPreload){const t=e.IconifyPreload,n="Invalid IconifyPreload syntax.";"object"===typeof t&&null!==t&&(t instanceof Array?t:[t]).forEach(e=>{try{("object"!==typeof e||null===e||e instanceof Array||"object"!==typeof e.icons||"string"!==typeof e.prefix||!S(e))&&console.error(n)}catch(t){console.error(n)}})}if(void 0!==e.IconifyProviders){const t=e.IconifyProviders;if("object"===typeof t&&null!==t)for(let e in t){const n="IconifyProviders["+e+"] is invalid.";try{const r=t[e];if("object"!==typeof r||!r||void 0===r.resources)continue;U(e,r)||console.error(n)}catch(Xe){console.error(n)}}}}const Ge={body:""},Je=r.Ay.extend({inheritAttrs:!1,data(){return{iconMounted:!1}},beforeMount(){this._name="",this._loadingIcon=null,this.iconMounted=!0},beforeDestroy(){this.abortLoading()},methods:{abortLoading(){this._loadingIcon&&(this._loadingIcon.abort(),this._loadingIcon=null)},getIcon(e,t){if("object"===typeof e&&null!==e&&"string"===typeof e.body)return this._name="",this.abortLoading(),{data:e};let n;if("string"!==typeof e||null===(n=o(e,!1,!0)))return this.abortLoading(),null;const r=L(n);if(!r)return this._loadingIcon&&this._loadingIcon.name===e||(this.abortLoading(),this._name="",null!==r&&(this._loadingIcon={name:e,abort:Ie([n],()=>{this.$forceUpdate()})})),null;this.abortLoading(),this._name!==e&&(this._name=e,t&&t(e));const i=["iconify"];return""!==n.prefix&&i.push("iconify--"+n.prefix),""!==n.provider&&i.push("iconify--"+n.provider),{data:r,classes:i}}},render(e){const t=Object.assign({},this.$attrs);let n=this.$data;const r=this.iconMounted?this.getIcon(t.icon,t.onLoad):null;return r?(r.classes&&(n={...n,class:("string"===typeof n["class"]?n["class"]+" ":"")+r.classes.join(" ")}),qe(e,t,n,r.data)):qe(e,t,n,Ge)}})},33754:function(e,t,n){"use strict";function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n=e.length?{done:!0}:{done:!1,value:e[i++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,s=!0,c=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){c=!0,a=e},f:function(){try{s||null==n["return"]||n["return"]()}finally{if(c)throw a}}}}},26297:function(e,t,n){"use strict";n.d(t,{A:function(){return a}});var r=n(44735);n(45700),n(89572),n(2892);function i(e,t){if("object"!=(0,r.A)(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t||"default");if("object"!=(0,r.A)(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}function o(e){var t=i(e,"string");return"symbol"==(0,r.A)(t)?t:t+""}function a(e,t,n){return(t=o(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},76338:function(e,t,n){"use strict";n.d(t,{A:function(){return o}});n(52675),n(2008),n(83851),n(81278),n(79432),n(26099),n(23500);var r=n(26297);function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function o(e){for(var t=1;t3?(i=p===r)&&(s=o[(a=o[4])?5:(a=3,3)],o[4]=o[5]=e):o[0]<=f&&((i=n<2&&fr||r>p)&&(o[4]=n,o[5]=r,h.n=p,a=0))}if(i||n>1)return c;throw d=!0,r}return function(i,u,p){if(l>1)throw TypeError("Generator is already running");for(d&&1===u&&f(u,p),a=u,s=p;(t=a<2?e:s)||!d;){o||(a?a<3?(a>1&&(h.n=-1),f(a,s)):h.n=s:h.v=s);try{if(l=2,o){if(a||(i="next"),t=o[i]){if(!(t=t.call(o,s)))throw TypeError("iterator result is not an object");if(!t.done)return t;s=t.value,a<2&&(a=0)}else 1===a&&(t=o["return"])&&t.call(o),a<2&&(s=TypeError("The iterator does not provide a '"+i+"' method"),a=1);o=e}else if((t=(d=h.n<0)?s:n.call(r,h))!==c)break}catch(t){o=e,a=1,s=t}finally{l=1}}return{value:t,done:d}}}(n,o,a),!0),u}var c={};function l(){}function u(){}function d(){}t=Object.getPrototypeOf;var h=[][o]?t(t([][o]())):(r(t={},o,function(){return this}),t),f=d.prototype=l.prototype=Object.create(h);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,r(e,a,"GeneratorFunction")),e.prototype=Object.create(f),e}return u.prototype=d,r(f,"constructor",d),r(d,"constructor",u),u.displayName="GeneratorFunction",r(d,a,"GeneratorFunction"),r(f),r(f,a,"Generator"),r(f,o,function(){return this}),r(f,"toString",function(){return"[object Generator]"}),(i=function(){return{w:s,m:p}})()}},21092:function(e,t,n){"use strict";function r(e){if(Array.isArray(e))return e}n.d(t,{A:function(){return s}});n(52675),n(89463),n(2259),n(26099),n(47764),n(62953);function i(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,o,a,s=[],c=!0,l=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&null!=n["return"]&&(a=n["return"](),Object(a)!==a))return}finally{if(l)throw i}}return s}}var o=n(72237);function a(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function s(e,t){return r(e)||i(e,t)||(0,o.A)(e,t)||a()}},9133:function(e,t,n){"use strict";n.d(t,{A:function(){return c}});var r=n(55696);function i(e){if(Array.isArray(e))return(0,r.A)(e)}n(52675),n(89463),n(2259),n(23418),n(26099),n(47764),n(62953);function o(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}var a=n(72237);function s(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function c(e){return i(e)||o(e)||(0,a.A)(e)||s()}},68285:function(e,t,n){"use strict";n.d(t,{A:function(){return r}});n(52675),n(89463),n(2259),n(26099),n(47764),n(62953);function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}},72237:function(e,t,n){"use strict";n.d(t,{A:function(){return i}});n(23418),n(34782),n(62010),n(26099),n(27495),n(38781),n(47764);var r=n(55696);function i(e,t){if(e){if("string"==typeof e)return(0,r.A)(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?(0,r.A)(e,t):void 0}}}}]); -(typeof window=='undefined'?global:window).tc_cfg_9993201602052953={"url":"css/theme-colors-de962665.css","colors":["#1890ff","#2f9bff","#46a6ff","#5db1ff","#74bcff","#8cc8ff","#a3d3ff","#badeff","#d1e9ff","#e6f7ff","#bae7ff","#91d5ff","#69c0ff","#40a9ff","#1890ff","#096dd9","#0050b3","#003a8c","#002766","24,144,255"]}; +var e,t,n="function"==typeof Symbol?Symbol:{},o=n.iterator||"@@iterator",a=n.toStringTag||"@@toStringTag";function s(n,i,o,a){var s=i&&i.prototype instanceof l?i:l,u=Object.create(s.prototype);return r(u,"_invoke",function(n,r,i){var o,a,s,l=0,u=i||[],d=!1,h={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(t,n){return o=t,a=0,s=e,h.n=n,c}};function f(n,r){for(a=n,s=r,t=0;!d&&l&&!i&&t3?(i=p===r)&&(s=o[(a=o[4])?5:(a=3,3)],o[4]=o[5]=e):o[0]<=f&&((i=n<2&&fr||r>p)&&(o[4]=n,o[5]=r,h.n=p,a=0))}if(i||n>1)return c;throw d=!0,r}return function(i,u,p){if(l>1)throw TypeError("Generator is already running");for(d&&1===u&&f(u,p),a=u,s=p;(t=a<2?e:s)||!d;){o||(a?a<3?(a>1&&(h.n=-1),f(a,s)):h.n=s:h.v=s);try{if(l=2,o){if(a||(i="next"),t=o[i]){if(!(t=t.call(o,s)))throw TypeError("iterator result is not an object");if(!t.done)return t;s=t.value,a<2&&(a=0)}else 1===a&&(t=o["return"])&&t.call(o),a<2&&(s=TypeError("The iterator does not provide a '"+i+"' method"),a=1);o=e}else if((t=(d=h.n<0)?s:n.call(r,h))!==c)break}catch(t){o=e,a=1,s=t}finally{l=1}}return{value:t,done:d}}}(n,o,a),!0),u}var c={};function l(){}function u(){}function d(){}t=Object.getPrototypeOf;var h=[][o]?t(t([][o]())):(r(t={},o,function(){return this}),t),f=d.prototype=l.prototype=Object.create(h);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,r(e,a,"GeneratorFunction")),e.prototype=Object.create(f),e}return u.prototype=d,r(f,"constructor",d),r(d,"constructor",u),u.displayName="GeneratorFunction",r(d,a,"GeneratorFunction"),r(f),r(f,a,"Generator"),r(f,o,function(){return this}),r(f,"toString",function(){return"[object Generator]"}),(i=function(){return{w:s,m:p}})()}},15863:function(e,t,n){"use strict";function r(e){if(Array.isArray(e))return e}n.d(t,{A:function(){return s}});n(52675),n(89463),n(2259),n(26099),n(47764),n(62953);function i(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,o,a,s=[],c=!0,l=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&null!=n["return"]&&(a=n["return"](),Object(a)!==a))return}finally{if(l)throw i}}return s}}var o=n(30291);function a(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function s(e,t){return r(e)||i(e,t)||(0,o.A)(e,t)||a()}},2403:function(e,t,n){"use strict";n.d(t,{A:function(){return c}});var r=n(33754);function i(e){if(Array.isArray(e))return(0,r.A)(e)}n(52675),n(89463),n(2259),n(23418),n(26099),n(47764),n(62953);function o(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}var a=n(30291);function s(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function c(e){return i(e)||o(e)||(0,a.A)(e)||s()}},44735:function(e,t,n){"use strict";n.d(t,{A:function(){return r}});n(52675),n(89463),n(2259),n(26099),n(47764),n(62953);function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}},30291:function(e,t,n){"use strict";n.d(t,{A:function(){return i}});n(23418),n(34782),n(62010),n(26099),n(27495),n(38781),n(47764);var r=n(33754);function i(e,t){if(e){if("string"==typeof e)return(0,r.A)(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?(0,r.A)(e,t):void 0}}}}]); +(typeof window=='undefined'?global:window).tc_cfg_39834609299207524={"url":"css/theme-colors-32dabe8f.css","colors":["#1890ff","#2f9bff","#46a6ff","#5db1ff","#74bcff","#8cc8ff","#a3d3ff","#badeff","#d1e9ff","#e6f7ff","#bae7ff","#91d5ff","#69c0ff","#40a9ff","#1890ff","#096dd9","#0050b3","#003a8c","#002766","24,144,255"]}; diff --git a/frontend/dist/js/chunk-vendors.e3ae0d1f.js b/frontend/dist/js/chunk-vendors.47fd2294.js similarity index 99% rename from frontend/dist/js/chunk-vendors.e3ae0d1f.js rename to frontend/dist/js/chunk-vendors.47fd2294.js index bbe4d23..1a59d82 100644 --- a/frontend/dist/js/chunk-vendors.e3ae0d1f.js +++ b/frontend/dist/js/chunk-vendors.47fd2294.js @@ -1,4 +1,4 @@ -(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[504],{20931:function(e,t,n){"use strict";n.d(t,{sm:function(){return le},Ay:function(){return Ie}});var r=n(75189),i=n.n(r),o=n(4718),a=(n(58568),n(37896)),s=n(7589),c=(n(1747),n(36457)),l=(n(78269),n(40255));function u(){return u=Object.assign||function(e){for(var t=1;t=3&&t?(e.pop(),this.sSelectedKeys=[e[e.length-1].path]):this.sSelectedKeys=[e.pop().path]}var n=[];"inline"===this.mode&&e.forEach(function(e){e.path&&n.push(e.path)}),this.openOnceKey||this.sOpenKeys.forEach(function(e){n.push(e)}),this.collapsed?this.cachedOpenKeys=n:this.sOpenKeys=n}},computed:{rootSubmenuKeys:function(e){var t=e.menus.map(function(e){return e.path})||[];return t}},created:function(){var e=this;this.$watch("$route",function(){e.updateMenu()}),this.$watch("collapsed",function(t){t?(e.cachedOpenKeys=e.sOpenKeys.concat(),e.sOpenKeys=[]):e.sOpenKeys=e.cachedOpenKeys}),void 0!==this.selectedKeys&&(this.sSelectedKeys=this.selectedKeys),void 0!==this.openKeys&&(this.sOpenKeys=this.openKeys)},mounted:function(){this.updateMenu()}},A=M,w=A,x=(n(25537),n(41446));function k(e,t){if("createEvent"in document){var n=document.createEvent("HTMLEvents");n.initEvent(t,!1,!0),e.dispatchEvent(n)}}var L=n(51382),C=function(e,t){var n=e.slots&&e.slots();return n[t]||e.props[t]},S=function(e){return"function"===typeof e},z=function(e){return"Fluid"!==e};var T=a.A.Sider,O={i18nRender:o.A.oneOfType([o.A.func,o.A.bool]).def(!1),mode:o.A.string.def("inline"),theme:o.A.string.def("dark"),contentWidth:o.A.oneOf(["Fluid","Fixed"]).def("Fluid"),collapsible:o.A.bool,collapsed:o.A.bool,collapsedWidth:o.A.oneOfType([o.A.string,o.A.number]).def(80),openKeys:o.A.array.def(void 0),selectedKeys:o.A.array.def(void 0),openOnceKey:o.A.bool.def(!0),handleCollapse:o.A.func,menus:o.A.array,siderWidth:o.A.oneOfType([o.A.string,o.A.number]).def(256),isMobile:o.A.bool,layout:o.A.string.def("inline"),fixSiderbar:o.A.bool,logo:o.A.any,title:o.A.string.def(""),menuHeaderRender:o.A.oneOfType([o.A.func,o.A.array,o.A.object,o.A.bool]),menuRender:o.A.oneOfType([o.A.func,o.A.array,o.A.object,o.A.bool]),openChange:o.A.func,select:o.A.func,menuClick:o.A.func},H=function(e,t){return"string"===typeof t?e("img",{attrs:{src:t,alt:"logo"}}):"function"===typeof t?t():e(t)},D=function(e,t){var n=t.logo,r=void 0===n?"https://gw.alipayobjects.com/zos/antfincdn/PmY%24TNNDBI/logo.svg":n,i=t.title,o=t.menuHeaderRender;if(!1===o)return null;var a=H(e,r),s=e("h1",[i]);return o?S(o)&&o(e,a,t.collapsed?null:s,t)||o:e("span",[a,s])},Y=function(e){return e>=32&&e<=80?e:80},V={name:"SiderMenu",model:{prop:"collapsed",event:"collapse"},props:O,render:function(e){var t=this.collapsible,n=this.collapsed,r=this.collapsedWidth,i=this.selectedKeys,o=this.openKeys,a=this.openChange,s=void 0===a?function(){return null}:a,c=this.select,l=void 0===c?function(){return null}:c,u=this.menuClick,d=void 0===u?function(){return null}:u,h=this.openOnceKey,f=this.siderWidth,p=this.fixSiderbar,m=this.mode,v=this.theme,g=this.menus,y=this.logo,_=this.title,b=this.onMenuHeaderClick,M=void 0===b?function(){return null}:b,A=this.i18nRender,x=this.menuHeaderRender,k=this.menuRender,L=["ant-pro-sider-menu-sider"];p&&L.push("fix-sider-bar"),"light"===v&&L.push("light");var C=D(e,{logo:y,title:_,menuHeaderRender:x,collapsed:n}),z=function(e,t){return e?"".concat(t?Math.abs((t-32)/2):0,"px"):32};return e(T,{class:L,attrs:{breakpoint:"lg",trigger:null,width:f,theme:v,collapsible:t,collapsed:n,collapsedWidth:Y(r)}},[C&&e("div",{class:"ant-pro-sider-menu-logo",on:{click:M},style:{paddingLeft:z(n,Y(r))},attrs:{id:"logo"}},[e("router-link",{attrs:{to:{path:"/"}}},[C])]),k&&(S(k)&&k(e,this.$props)||k)||e(w,{attrs:{collapsed:n,collapsedWidth:Y(r),openKeys:o,selectedKeys:i,openOnceKey:h,menus:g,mode:m,theme:v,i18nRender:A},on:{openChange:s,select:l,click:d}})])}},P=V;function E(e){for(var t=1;t=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function J(e,t){if(null==e)return{};var n,r,i={},o=Object.keys(e);for(r=0;r=0||(i[n]=e[n]);return i}function X(e){for(var t=1;t0&&e(K.Ay,i()([{class:"".concat(Q,"-tabs"),attrs:{activeKey:o,tabBarExtraContent:s},on:{change:function(e){a&&a(e)}}},c]),[r.map(function(t){return e(K.Ay.TabPane,i()([t,{attrs:{tab:n(t.tab)},key:t.key}]))})])},ae=function(e,t,n){return t||n?e("div",{class:"".concat(Q,"-detail")},[e("div",{class:"".concat(Q,"-main")},[e("div",{class:"".concat(Q,"-row")},[t&&e("div",{class:"".concat(Q,"-content")},[t]),n&&e("div",{class:"".concat(Q,"-extraContent")},[n])])])]):null},se=function(e,t,n,r){var o=t.title,a=t.tags,s=t.content,c=t.pageHeaderRender,l=t.extra,u=t.extraContent,d=t.breadcrumb,h=t.back,f=G(t,q);if(c)return c(X({},t));var p=o;o||!1===o||(p=n.title);var m=(0,$.cy)(p)?p:p&&r(p),v={breadcrumb:d,extra:l,tags:a,title:m,footer:oe(e,f,r)};return h||(v.backIcon=!1),e(B.A,i()([{props:v},{on:{back:h||ie}}]),[ae(e,s,u)])},ce={name:"PageHeaderWrapper",props:te,inject:["locale","contentWidth","breadcrumbRender"],render:function(e){var t=this,n=this.$route,r=this.$listeners,i=this.$slots["default"],o=(0,U.nu)(this,"title"),a=(0,U.nu)(this,"tags"),s=(0,U.nu)(this,"content"),c=(0,U.nu)(this,"extra"),l=(0,U.nu)(this,"extraContent"),u=re(this.$props.route||n),d=this.$props.i18nRender||this.locale||ne,h=this.$props.contentWidth||this.contentWidth||!1,f=this.$props.back||r.back,p=f&&function(){f&&f()}||void 0,m=this.$props.tabChange,v=function(e){t.$emit("tabChange",e),m&&m(e)},g={},y=this.$props.breadcrumb;if(!0===y){var _=n.matched.concat().map(function(e){return{path:e.path,breadcrumbName:d(e.meta.title)}}),b=function(e){var t=e.route,n=e.params,r=e.routes,i=(e.paths,e.h);return r.indexOf(t)===r.length-1&&i("span",[t.breadcrumbName])||i("router-link",{attrs:{to:{path:t.path||"/",params:n}}},[t.breadcrumbName])},M=this.breadcrumbRender||b;g={props:{routes:_,itemRender:M}}}else g=y||null;var A=X({},this.$props,{title:o,tags:a,content:s,extra:c,extraContent:l,breadcrumb:g,tabChange:v,back:p});return e("div",{class:"ant-pro-page-header-wrap"},[e("div",{class:"".concat(Q,"-page-header-warp")},[e(W,[se(e,A,u,d)])]),i?e(W,{attrs:{contentWidth:h}},[e("div",{class:"".concat(Q,"-children-content")},[i])]):null])},install:function(e){e.component(ce.name,ce),e.component("page-container",ce)}},le=ce,ue=(o.A.array,o.A.any,{name:"VueFragment",functional:!0,render:function(e,t){return t.children.length>1?e("div",{},t.children):t.children}}),de=n(38221),he=n.n(de),fe={collapsed:o.A.bool,handleCollapse:o.A.func,isMobile:o.A.bool.def(!1),fixedHeader:o.A.bool.def(!1),logo:o.A.any,menuRender:o.A.any,collapsedButtonRender:o.A.any,headerContentRender:o.A.any,rightContentRender:o.A.any},pe=function(e,t){return e(l.A,{attrs:{type:t?"menu-unfold":"menu-fold"}})},me={name:"GlobalHeader",props:fe,render:function(e){var t=this,n=this.$props,r=n.isMobile,i=n.logo,o=n.rightContentRender,a=n.headerContentRender,s=function(){var e=t.$props,n=e.collapsed,r=e.handleCollapse;r&&r(!n),t.triggerResizeEvent()},c=function(){var n=t.$props,r=n.collapsed,i=n.collapsedButtonRender,o=void 0===i?pe:i,a=n.menuRender;return!1!==o&&!1!==a?e("span",{class:"ant-pro-global-header-trigger",on:{click:s}},[S(o)&&o(e,r)||o]):null},l="ant-pro-global-header";return e("div",{class:l},[r&&e("a",{class:"".concat(l,"-logo"),key:"logo",attrs:{href:"/"}},[H(e,i)]),c(),a&&e("div",{class:"".concat(l,"-content")},[S(a)&&a(e,this.$props)||a]),S(o)&&o(e,this.$props)||o])},methods:{triggerResizeEvent:he()(function(){L.M&&k(window,"resize")})},beforeDestroy:function(){this.triggerResizeEvent.cancel&&this.triggerResizeEvent.cancel()}},ve=me;function ge(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0,r=arguments.length>3?arguments[3]:void 0;return e?t?n||80:r:0},Ee=function(e,t){return!1===t.headerRender?null:e(we,{props:t})},je=function(e){return e},Fe={name:"BasicLayout",functional:!0,props:Ye,render:function(e,t){var n=t.props,r=t.children,o=t.listeners,c=n.layout,l=n.isMobile,u=n.collapsed,d=n.collapsedWidth,h=n.mediaQuery,f=n.handleMediaQuery,p=n.handleCollapse,m=n.siderWidth,v=n.fixSiderbar,g=n.i18nRender,y=void 0===g?je:g,_=C(t,"footerRender"),b=C(t,"rightContentRender"),M=C(t,"collapsedButtonRender"),A=C(t,"menuHeaderRender"),w=C(t,"breadcrumbRender"),x=C(t,"headerContentRender"),k=C(t,"menuRender"),L="topmenu"===c,z=!L,T=v&&!L&&!l,O=He({},n,{hasSiderMenu:z,footerRender:_,menuHeaderRender:A,rightContentRender:b,collapsedButtonRender:M,breadcrumbRender:w,headerContentRender:x,menuRender:k},o);return e(Oe,{attrs:{i18nRender:y,contentWidth:n.contentWidth,breadcrumbRender:w}},[e(s.ContainerQuery,{attrs:{query:Ve},on:{change:f}},[e(a.A,{class:He({"ant-pro-basicLayout":!0,"ant-pro-topmenu":L},h)},[e(I,i()([{props:O},{attrs:{collapsed:u},on:{collapse:p}}])),e(a.A,{class:[c],style:{paddingLeft:z?"".concat(Pe(!!T,u,d,m),"px"):void 0,minHeight:"100vh"}},[Ee(e,He({},O,{mode:"horizontal"})),e(Se,{class:"ant-pro-basicLayout-content",attrs:{contentWidth:n.contentWidth}},[r]),!1!==_&&e(a.A.Footer,[S(_)&&_(e)||_])||null])])])])},install:function(e){e.component(le.name,le),e.component("PageContainer",le),e.component("ProLayout",Fe)}},Ie=Fe;n(90034),n(28373),n(97345),n(66882),n(47132),n(53966),n(91997),n(27902),n(49084),n(19120),n(64274),n(1406),n(6011),n(18787),n(42543),n(90500),o.A.string,o.A.array,o.A.oneOfType([o.A.func,o.A.bool]).def(!1);o.A.string,o.A.bool,o.A.array,o.A.string,o.A.string,o.A.oneOfType([o.A.func,o.A.bool]).def(!1),n(22050),n(25824);o.A.oneOf(["Fluid","Fixed"]).def("Fluid"),o.A.bool,o.A.bool,o.A.oneOf(["sidemenu","topmenu"]),o.A.oneOfType([o.A.func,o.A.bool]).def(!1),n(69511),n(58391),n(81776);o.A.string.def("");var $e={theme:o.A.oneOf(["dark","light","realDark"]),primaryColor:o.A.string,layout:o.A.oneOf(["sidemenu","topmenu"]),colorWeak:o.A.bool,contentWidth:o.A.oneOf(["Fluid","Fixed"]).def("Fluid"),fixedHeader:o.A.bool,fixSiderbar:o.A.bool,hideHintAlert:o.A.bool.def(!1),hideCopyButton:o.A.bool.def(!1)};o.A.func,o.A.objectOf($e),o.A.oneOfType([o.A.func,o.A.bool]).def(!1)},58391:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(6535)),o=2,a=16,s=5,c=5,l=15,u=5,d=4;function h(e,t,n){var r;return r=Math.round(e.h)>=60&&Math.round(e.h)<=240?n?Math.round(e.h)-o*t:Math.round(e.h)+o*t:n?Math.round(e.h)+o*t:Math.round(e.h)-o*t,r<0?r+=360:r>=360&&(r-=360),r}function f(e,t,n){return 0===e.h&&0===e.s?e.s:(r=n?Math.round(100*e.s)-a*t:t===d?Math.round(100*e.s)+a:Math.round(100*e.s)+s*t,r>100&&(r=100),n&&t===u&&r>10&&(r=10),r<6&&(r=6),r);var r}function p(e,t,n){return n?Math.round(100*e.v)+c*t:Math.round(100*e.v)-l*t}function m(e){for(var t=[],n=i.default(e),r=u;r>0;r-=1){var o=n.toHsv(),a=i.default({h:h(o,r,!0),s:f(o,r,!0),v:p(o,r,!0)}).toHexString();t.push(a)}t.push(n.toHexString());for(r=1;r<=d;r+=1){o=n.toHsv(),a=i.default({h:h(o,r),s:f(o,r),v:p(o,r)}).toHexString();t.push(a)}return t}t["default"]=m},33446:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(58391));t.generate=i.default;var o={red:"#F5222D",volcano:"#FA541C",orange:"#FA8C16",gold:"#FAAD14",yellow:"#FADB14",lime:"#A0D911",green:"#52C41A",cyan:"#13C2C2",blue:"#1890FF",geekblue:"#2F54EB",purple:"#722ED1",magenta:"#EB2F96",grey:"#666666"};t.presetPrimaryColors=o;var a={};t.presetPalettes=a,Object.keys(o).forEach(function(e){a[e]=i.default(o[e]),a[e].primary=a[e][5]});var s=a.red;t.red=s;var c=a.volcano;t.volcano=c;var l=a.gold;t.gold=l;var u=a.orange;t.orange=u;var d=a.yellow;t.yellow=d;var h=a.lime;t.lime=h;var f=a.green;t.green=f;var p=a.cyan;t.cyan=p;var m=a.blue;t.blue=m;var v=a.geekblue;t.geekblue=v;var g=a.purple;t.purple=g;var y=a.magenta;t.magenta=y;var _=a.grey;t.grey=_},6678:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n="0 0 1024 1024",r="64 64 896 896",i="fill",o="outline",a="twotone";function s(e){for(var t=[],n=1;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],n="function"===typeof e?e(this.$data,this.$props):e;if(this.getDerivedStateFromProps){var r=this.getDerivedStateFromProps((0,o.Oq)(this),(0,i.A)({},this.$data,n));if(null===r)return;n=(0,i.A)({},n,r||{})}(0,i.A)(this.$data,n),this.$forceUpdate(),this.$nextTick(function(){t&&t()})},__emit:function(){var e=[].slice.call(arguments,0),t=e[0],n=this.$listeners[t];if(e.length&&n)if(Array.isArray(n))for(var i=0,o=n.length;i=n.F1&&t<=n.F12)return!1;switch(t){case n.ALT:case n.CAPS_LOCK:case n.CONTEXT_MENU:case n.CTRL:case n.DOWN:case n.END:case n.ESC:case n.HOME:case n.INSERT:case n.LEFT:case n.MAC_FF_META:case n.META:case n.NUMLOCK:case n.NUM_CENTER:case n.PAGE_DOWN:case n.PAGE_UP:case n.PAUSE:case n.PRINT_SCREEN:case n.RIGHT:case n.SHIFT:case n.UP:case n.WIN_KEY:case n.WIN_KEY_RIGHT:return!1;default:return!0}},isCharacterKey:function(e){if(e>=n.ZERO&&e<=n.NINE)return!0;if(e>=n.NUM_ZERO&&e<=n.NUM_MULTIPLY)return!0;if(e>=n.A&&e<=n.Z)return!0;if(-1!==window.navigation.userAgent.indexOf("WebKit")&&0===e)return!0;switch(e){case n.SPACE:case n.QUESTION_MARK:case n.NUM_PLUS:case n.NUM_MINUS:case n.NUM_PERIOD:case n.NUM_DIVISION:case n.SEMICOLON:case n.DASH:case n.EQUALS:case n.COMMA:case n.PERIOD:case n.SLASH:case n.APOSTROPHE:case n.SINGLE_QUOTE:case n.OPEN_SQUARE_BRACKET:case n.BACKSLASH:case n.CLOSE_SQUARE_BRACKET:return!0;default:return!1}}};t.A=n},48159:function(e,t,n){"use strict";var r=n(4718),i=n(51927);t.A={name:"Portal",props:{getContainer:r.A.func.isRequired,children:r.A.any.isRequired,didUpdate:r.A.func},mounted:function(){this.createContainer()},updated:function(){var e=this,t=this.$props.didUpdate;t&&this.$nextTick(function(){t(e.$props)})},beforeDestroy:function(){this.removeContainer()},methods:{createContainer:function(){this._container=this.$props.getContainer(),this.$forceUpdate()},removeContainer:function(){this._container&&this._container.parentNode&&this._container.parentNode.removeChild(this._container)}},render:function(){return this._container?(0,i.Ob)(this.$props.children,{directives:[{name:"ant-portal",value:this._container}]}):null}}},81593:function(e,t,n){"use strict";n.d(t,{Qg:function(){return d}});var r="undefined"!==typeof window,i=r&&window.navigator.userAgent.toLowerCase(),o=i&&i.indexOf("msie 9.0")>0;function a(e,t){for(var n=Object.create(null),r=e.split(","),i=0;i0);a&&a.indexOf("android"),a&&/iphone|ipad|ipod|ios/.test(a),a&&/chrome\/\d+/.test(a),a&&/phantomjs/.test(a),a&&a.match(/firefox\/(\d+)/)},93986:function(e,t,n){"use strict";n.d(t,{A:function(){return i}});var r=void 0;function i(e){if(e||void 0===r){var t=document.createElement("div");t.style.width="100%",t.style.height="200px";var n=document.createElement("div"),i=n.style;i.position="absolute",i.top=0,i.left=0,i.pointerEvents="none",i.visibility="hidden",i.width="200px",i.height="150px",i.overflow="hidden",n.appendChild(t),document.body.appendChild(n);var o=t.offsetWidth;n.style.overflow="scroll";var a=t.offsetWidth;o===a&&(a=n.clientWidth),document.body.removeChild(n),r=o-a}return r}},80178:function(e,t,n){"use strict";var r=n(75998),i=function(){},o=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.beforeEnter,o=t.enter,a=t.afterEnter,s=t.leave,c=t.afterLeave,l=t.appear,u=void 0===l||l,d=t.tag,h=t.nativeOn,f={props:{appear:u,css:!1},on:{beforeEnter:n||i,enter:o||function(t,n){(0,r.A)(t,e+"-enter",n)},afterEnter:a||i,leave:s||function(t,n){(0,r.A)(t,e+"-leave",n)},afterLeave:c||i},nativeOn:h};return d&&(f.tag=d),f};t.A=o},67287:function(e,t,n){"use strict";function r(e){return e["default"]||e}n.d(t,{A:function(){return r}})},2410:function(e,t){"use strict";var n=function(e){return!isNaN(parseFloat(e))&&isFinite(e)};t.A=n},6566:function(e,t,n){"use strict";n.d(t,{P1:function(){return l},W2:function(){return c},n1:function(){return d},nP:function(){return u},pK:function(){return f},pY:function(){return h}});var r=n(67287),i=n(95093),o=n(36873),a=n(69843),s=n.n(a),c={validator:function(e){return"string"===typeof e||s()(e)||i.isMoment(e)}},l={validator:function(e){return!!Array.isArray(e)&&(0===e.length||-1===e.findIndex(function(e){return"string"!==typeof e})||-1===e.findIndex(function(e){return!s()(e)&&!i.isMoment(e)}))}},u={validator:function(e){return Array.isArray(e)?0===e.length||-1===e.findIndex(function(e){return"string"!==typeof e})||-1===e.findIndex(function(e){return!s()(e)&&!i.isMoment(e)}):"string"===typeof e||s()(e)||i.isMoment(e)}};function d(e,t,n,a){var s=Array.isArray(t)?t:[t];s.forEach(function(t){t&&(a&&(0,o.A)((0,r.A)(i)(t,a).isValid(),e,"When set `valueFormat`, `"+n+"` should provides invalidate string time. "),!a&&(0,o.A)((0,r.A)(i).isMoment(t)&&t.isValid(),e,"`"+n+"` provides invalidate moment time. If you want to set empty value, use `null` instead."))})}var h=function(e,t){return Array.isArray(e)?e.map(function(e){return"string"===typeof e&&e?(0,r.A)(i)(e,t):e||null}):"string"===typeof e&&e?(0,r.A)(i)(e,t):e||null},f=function(e,t){return Array.isArray(e)?e.map(function(e){return(0,r.A)(i).isMoment(e)?e.format(t):e}):(0,r.A)(i).isMoment(e)?e.format(t):e}},40703:function(e,t,n){"use strict";var r=n(75998),i=n(93146),o=n.n(i),a=n(85471);function s(e,t,n){var i=void 0,a=void 0,s=void 0;return(0,r.A)(e,"ant-motion-collapse-legacy",{start:function(){s&&o().cancel(s),t?(i=e.offsetHeight,0===i?s=o()(function(){i=e.offsetHeight,e.style.height="0px",e.style.opacity="0"}):(e.style.height="0px",e.style.opacity="0")):(e.style.height=e.offsetHeight+"px",e.style.opacity="1")},active:function(){a&&o().cancel(a),a=o()(function(){e.style.height=(t?i:0)+"px",e.style.opacity=t?"1":"0"})},end:function(){s&&o().cancel(s),a&&o().cancel(a),e.style.height="",e.style.opacity="",n&&n()}})}var c={enter:function(e,t){a.Ay.nextTick(function(){s(e,!0,t)})},leave:function(e,t){return s(e,!1,t)}};t.A=c},1406:function(e,t,n){"use strict";function r(e){return e.directive("ant-portal",{inserted:function(e,t){var n=t.value,r="function"===typeof n?n(e):n;r!==e.parentNode&&r.appendChild(e)},componentUpdated:function(e,t){var n=t.value,r="function"===typeof n?n(e):n;r!==e.parentNode&&r.appendChild(e)}})}n.d(t,{o:function(){return r}}),t.A={install:function(e){r(e)}}},15848:function(e,t,n){"use strict";n.d(t,{$c:function(){return y},CB:function(){return V},Gk:function(){return Y},IV:function(){return x},K6:function(){return D},Oq:function(){return M},PT:function(){return h},Sk:function(){return g},Ts:function(){return w},WM:function(){return z},Z0:function(){return k},cK:function(){return p},gd:function(){return O},i5:function(){return S},i7:function(){return L},kQ:function(){return C},nu:function(){return A},rz:function(){return _},sG:function(){return H},t0:function(){return T},ul:function(){return f},v6:function(){return P},xr:function(){return b},zO:function(){return E}});var r=n(97479),i=n(52040),o=n(85505),a=n(11331),s=n.n(a),c=n(46942),l=n.n(c);function u(e){var t=e&&e.toString().match(/^\s*function (\w+)/);return t?t[1]:""}var d=/-(\w)/g,h=function(e){return e.replace(d,function(e,t){return t?t.toUpperCase():""})},f=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments[1],n={},r=/;(?![^(]*\))/g,i=/:(.+)/;return e.split(r).forEach(function(e){if(e){var r=e.split(i);if(r.length>1){var o=t?h(r[0].trim()):r[0].trim();n[o]=r[1].trim()}}}),n},p=function(e,t){var n=e.$options||{},r=n.propsData||{};return t in r},m=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={};return Object.keys(e).forEach(function(r){(r in t||void 0!==e[r])&&(n[r]=e[r])}),n},v=function(e){return e.data&&e.data.scopedSlots||{}},g=function(e){var t=e.componentOptions||{};e.$vnode&&(t=e.$vnode.componentOptions||{});var n=e.children||t.children||[],r={};return n.forEach(function(e){if(!H(e)){var t=e.data&&e.data.slot||"default";r[t]=r[t]||[],r[t].push(e)}}),(0,o.A)({},r,v(e))},y=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"default",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e.$scopedSlots&&e.$scopedSlots[t]&&e.$scopedSlots[t](n)||e.$slots[t]||[]},_=function(e){var t=e.componentOptions||{};return e.$vnode&&(t=e.$vnode.componentOptions||{}),e.children||t.children||[]},b=function(e){if(e.fnOptions)return e.fnOptions;var t=e.componentOptions;return e.$vnode&&(t=e.$vnode.componentOptions),t&&t.Ctor.options||{}},M=function(e){if(e.componentOptions){var t=e.componentOptions,n=t.propsData,r=void 0===n?{}:n,a=t.Ctor,s=void 0===a?{}:a,c=(s.options||{}).props||{},l={},d=!0,h=!1,f=void 0;try{for(var p,v=Object.entries(c)[Symbol.iterator]();!(d=(p=v.next()).done);d=!0){var g=p.value,y=(0,i.A)(g,2),_=y[0],b=y[1],M=b["default"];void 0!==M&&(l[_]="function"===typeof M&&"Function"!==u(b.type)?M.call(e):M)}}catch(L){h=!0,f=L}finally{try{!d&&v["return"]&&v["return"]()}finally{if(h)throw f}}return(0,o.A)({},l,r)}var A=e.$options,w=void 0===A?{}:A,x=e.$props,k=void 0===x?{}:x;return m(k,w.propsData)},A=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e,r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];if(e.$createElement){var i=e.$createElement,o=e[t];return void 0!==o?"function"===typeof o&&r?o(i,n):o:e.$scopedSlots[t]&&r&&e.$scopedSlots[t](n)||e.$scopedSlots[t]||e.$slots[t]||void 0}var a=e.context.$createElement,s=w(e)[t];if(void 0!==s)return"function"===typeof s&&r?s(a,n):s;var c=v(e)[t];if(void 0!==c)return"function"===typeof c&&r?c(a,n):c;var l=[],u=e.componentOptions||{};return(u.children||[]).forEach(function(e){e.data&&e.data.slot===t&&(e.data.attrs&&delete e.data.attrs.slot,"template"===e.tag?l.push(e.children):l.push(e))}),l.length?l:void 0},w=function(e){var t=e.componentOptions;return e.$vnode&&(t=e.$vnode.componentOptions),t&&t.propsData||{}},x=function(e,t){return w(e)[t]},k=function(e){var t=e.data;return e.$vnode&&(t=e.$vnode.data),t&&t.attrs||{}},L=function(e){var t=e.key;return e.$vnode&&(t=e.$vnode.key),t};function C(e){var t={};return e.componentOptions&&e.componentOptions.listeners?t=e.componentOptions.listeners:e.data&&e.data.on&&(t=e.data.on),(0,o.A)({},t)}function S(e){var t={};return e.data&&e.data.on&&(t=e.data.on),(0,o.A)({},t)}function z(e){return(e.$vnode?e.$vnode.componentOptions.listeners:e.$listeners)||{}}function T(e){var t={};e.data?t=e.data:e.$vnode&&e.$vnode.data&&(t=e.$vnode.data);var n=t["class"]||{},r=t.staticClass,i={};return r&&r.split(" ").forEach(function(e){i[e.trim()]=!0}),"string"===typeof n?n.split(" ").forEach(function(e){i[e.trim()]=!0}):Array.isArray(n)?l()(n).split(" ").forEach(function(e){i[e.trim()]=!0}):i=(0,o.A)({},i,n),i}function O(e,t){var n={};e.data?n=e.data:e.$vnode&&e.$vnode.data&&(n=e.$vnode.data);var r=n.style||n.staticStyle;if("string"===typeof r)r=f(r,t);else if(t&&r){var i={};return Object.keys(r).forEach(function(e){return i[h(e)]=r[e]}),i}return r}function H(e){return!(e.tag||e.text&&""!==e.text.trim())}function D(e){return!e.tag}function Y(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return e.filter(function(e){return!H(e)})}var V=function(e,t){return Object.keys(t).forEach(function(n){if(!e[n])throw new Error("not have "+n+" prop");e[n].def&&(e[n]=e[n].def(t[n]))}),e};function P(){var e=[].slice.call(arguments,0),t={};return e.forEach(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=!0,r=!1,a=void 0;try{for(var c,l=Object.entries(e)[Symbol.iterator]();!(n=(c=l.next()).done);n=!0){var u=c.value,d=(0,i.A)(u,2),h=d[0],f=d[1];t[h]=t[h]||{},s()(f)?(0,o.A)(t[h],f):t[h]=f}}catch(p){r=!0,a=p}finally{try{!n&&l["return"]&&l["return"]()}finally{if(r)throw a}}}),t}function E(e){return e&&"object"===("undefined"===typeof e?"undefined":(0,r.A)(e))&&"componentOptions"in e&&"context"in e&&void 0!==e.tag}t.Ay=p},8350:function(e,t,n){"use strict";n.d(t,{A:function(){return l}});var r=n(75189),i=n.n(r),o=n(85505),a=n(4718),s=n(15848);function c(e){return e.name||"Component"}function l(e){var t=e.props||{},n=e.methods||{},r={};Object.keys(t).forEach(function(e){r[e]=(0,o.A)({},t[e],{required:!1})}),e.props.__propsSymbol__=a.A.any,e.props.children=a.A.array.def([]);var l={props:r,model:e.model,name:"Proxy_"+c(e),methods:{getProxyWrappedInstance:function(){return this.$refs.wrappedInstance}},render:function(){var t=arguments[0],n=this.$slots,r=void 0===n?{}:n,a=this.$scopedSlots,c=(0,s.Oq)(this),l={props:(0,o.A)({},c,{__propsSymbol__:Symbol(),componentWillReceiveProps:(0,o.A)({},c),children:r["default"]||c.children||[]}),on:(0,s.WM)(this)};Object.keys(a).length&&(l.scopedSlots=a);var u=Object.keys(r);return t(e,i()([l,{ref:"wrappedInstance"}]),[u.length?u.map(function(e){return t("template",{slot:e},[r[e]])}):null])}};return Object.keys(n).map(function(e){l.methods[e]=function(){var t;return(t=this.getProxyWrappedInstance())[e].apply(t,arguments)}}),l}},70556:function(e,t,n){"use strict";n.d(t,{A:function(){return s}});var r=n(93146),i=n.n(r),o=0,a={};function s(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=o++,r=t;function s(){r-=1,r<=0?(e(),delete a[n]):a[n]=i()(s)}return a[n]=i()(s),n}s.cancel=function(e){void 0!==e&&(i().cancel(a[e]),delete a[e])},s.ids=a},982:function(e,t,n){"use strict";n.d(t,{q:function(){return c},z:function(){return l}});var r=["moz","ms","webkit"];function i(){var e=0;return function(t){var n=(new Date).getTime(),r=Math.max(0,16-(n-e)),i=window.setTimeout(function(){t(n+r)},r);return e=n+r,i}}function o(){if("undefined"===typeof window)return function(){};if(window.requestAnimationFrame)return window.requestAnimationFrame.bind(window);var e=r.filter(function(e){return e+"RequestAnimationFrame"in window})[0];return e?window[e+"RequestAnimationFrame"]:i()}function a(e){if("undefined"===typeof window)return null;if(window.cancelAnimationFrame)return window.cancelAnimationFrame(e);var t=r.filter(function(e){return e+"CancelAnimationFrame"in window||e+"CancelRequestAnimationFrame"in window})[0];return t?(window[t+"CancelAnimationFrame"]||window[t+"CancelRequestAnimationFrame"]).call(this,e):clearTimeout(e)}var s=o(),c=function(e){return a(e.id)},l=function(e,t){var n=Date.now();function r(){Date.now()-n>=t?e.call():i.id=s(r)}var i={id:s(r)};return i}},73363:function(e,t,n){"use strict";n.d(t,{ye:function(){return s}});var r=n(44508),i=n(85505),o=void 0;if("undefined"!==typeof window){var a=function(e){return{media:e,matches:!1,addListener:function(){},removeListener:function(){}}};window.matchMedia||(window.matchMedia=a),o=n(22386)}var s=["xxl","xl","lg","md","sm","xs"],c={xs:"(max-width: 575px)",sm:"(min-width: 576px)",md:"(min-width: 768px)",lg:"(min-width: 992px)",xl:"(min-width: 1200px)",xxl:"(min-width: 1600px)"},l=[],u=-1,d={},h={dispatch:function(e){return d=e,!(l.length<1)&&(l.forEach(function(e){e.func(d)}),!0)},subscribe:function(e){0===l.length&&this.register();var t=(++u).toString();return l.push({token:t,func:e}),e(d),t},unsubscribe:function(e){l=l.filter(function(t){return t.token!==e}),0===l.length&&this.unregister()},unregister:function(){Object.keys(c).map(function(e){return o.unregister(c[e])})},register:function(){var e=this;Object.keys(c).map(function(t){return o.register(c[t],{match:function(){var n=(0,i.A)({},d,(0,r.A)({},t,!0));e.dispatch(n)},unmatch:function(){var n=(0,i.A)({},d,(0,r.A)({},t,!1));e.dispatch(n)},destroy:function(){}})})}};t.Ay=h},14221:function(e,t,n){"use strict";n.d(t,{A:function(){return p}});var r=n(75189),i=n.n(r),o=n(85505),a=n(2833),s=n.n(a),c=n(90034),l=n(15848),u=n(4718),d=n(8350);function h(e){return e.name||"Component"}var f=function(){return{}};function p(e){var t=!!e,n=e||f;return function(r){var a=(0,c.A)(r.props||{},["store"]),f={__propsSymbol__:u.A.any};Object.keys(a).forEach(function(e){f[e]=(0,o.A)({},a[e],{required:!1})});var p={name:"Connect_"+h(r),props:f,inject:{storeContext:{default:function(){return{}}}},data:function(){return this.store=this.storeContext.store,this.preProps=(0,c.A)((0,l.Oq)(this),["__propsSymbol__"]),{subscribed:n(this.store.getState(),this.$props)}},watch:{__propsSymbol__:function(){e&&2===e.length&&(this.subscribed=n(this.store.getState(),this.$props))}},mounted:function(){this.trySubscribe()},beforeDestroy:function(){this.tryUnsubscribe()},methods:{handleChange:function(){if(this.unsubscribe){var e=(0,c.A)((0,l.Oq)(this),["__propsSymbol__"]),t=n(this.store.getState(),e);s()(this.preProps,e)&&s()(this.subscribed,t)||(this.subscribed=t)}},trySubscribe:function(){t&&(this.unsubscribe=this.store.subscribe(this.handleChange),this.handleChange())},tryUnsubscribe:function(){this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=null)},getWrappedInstance:function(){return this.$refs.wrappedInstance}},render:function(){var e=arguments[0],t=this.$slots,n=void 0===t?{}:t,a=this.$scopedSlots,s=this.subscribed,u=this.store,d=(0,l.Oq)(this);this.preProps=(0,o.A)({},(0,c.A)(d,["__propsSymbol__"]));var h={props:(0,o.A)({},d,s,{store:u}),on:(0,l.WM)(this),scopedSlots:a};return e(r,i()([h,{ref:"wrappedInstance"}]),[Object.keys(n).map(function(t){return e("template",{slot:t},[n[t]])})])}};return(0,d.A)(p)}}},6596:function(e,t,n){"use strict";var r=n(75189),i=n.n(r),o=n(85505),a=n(11207),s=n(4718),c={border:0,background:"transparent",padding:0,lineHeight:"inherit",display:"inline-block"},l={props:{noStyle:s.A.bool},methods:{onKeyDown:function(e){var t=e.keyCode;t===a.A.ENTER&&e.preventDefault()},onKeyUp:function(e){var t=e.keyCode;t===a.A.ENTER&&this.$emit("click",e)},setRef:function(e){this.div=e},focus:function(){this.div&&this.div.focus()},blur:function(){this.div&&this.div.blur()}},render:function(){var e=arguments[0],t=this.$props.noStyle;return e("div",i()([{attrs:{role:"button",tabIndex:0}},{directives:[{name:"ant-ref",value:this.setRef}],on:(0,o.A)({},this.$listeners,{keydown:this.onKeyDown,keyup:this.onKeyUp})},{style:(0,o.A)({},t?null:c)}]),[this.$slots["default"]])}};t.A=l},51927:function(e,t,n){"use strict";n.d(t,{Ob:function(){return u},pM:function(){return l}});var r=n(32779),i=n(85505),o=n(15848),a=n(46942),s=n.n(a);function c(e,t){var n=e.componentOptions,r=e.data,o={};n&&n.listeners&&(o=(0,i.A)({},n.listeners));var a={};r&&r.on&&(a=(0,i.A)({},r.on));var s=new e.constructor(e.tag,r?(0,i.A)({},r,{on:a}):r,e.children,e.text,e.elm,e.context,n?(0,i.A)({},n,{listeners:o}):n,e.asyncFactory);return s.ns=e.ns,s.isStatic=e.isStatic,s.key=e.key,s.isComment=e.isComment,s.fnContext=e.fnContext,s.fnOptions=e.fnOptions,s.fnScopeId=e.fnScopeId,s.isCloned=!0,t&&(e.children&&(s.children=l(e.children,!0)),n&&n.children&&(n.children=l(n.children,!0))),s}function l(e,t){for(var n=e.length,r=new Array(n),i=0;i1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],a=e;if(Array.isArray(e)&&(a=(0,o.Gk)(e)[0]),!a)return null;var l=c(a,n),u=t.props,d=void 0===u?{}:u,h=t.key,f=t.on,p=void 0===f?{}:f,m=t.nativeOn,v=void 0===m?{}:m,g=t.children,y=t.directives,_=void 0===y?[]:y,b=l.data||{},M={},A={},w=t.attrs,x=void 0===w?{}:w,k=t.ref,L=t.domProps,C=void 0===L?{}:L,S=t.style,z=void 0===S?{}:S,T=t["class"],O=void 0===T?{}:T,H=t.scopedSlots,D=void 0===H?{}:H;return A="string"===typeof b.style?(0,o.ul)(b.style):(0,i.A)({},b.style,A),A="string"===typeof z?(0,i.A)({},A,(0,o.ul)(A)):(0,i.A)({},A,z),"string"===typeof b["class"]&&""!==b["class"].trim()?b["class"].split(" ").forEach(function(e){M[e.trim()]=!0}):Array.isArray(b["class"])?s()(b["class"]).split(" ").forEach(function(e){M[e.trim()]=!0}):M=(0,i.A)({},b["class"],M),"string"===typeof O&&""!==O.trim()?O.split(" ").forEach(function(e){M[e.trim()]=!0}):M=(0,i.A)({},M,O),l.data=(0,i.A)({},b,{style:A,attrs:(0,i.A)({},b.attrs,x),class:M,domProps:(0,i.A)({},b.domProps,C),scopedSlots:(0,i.A)({},b.scopedSlots,D),directives:[].concat((0,r.A)(b.directives||[]),(0,r.A)(_))}),l.componentOptions?(l.componentOptions.propsData=l.componentOptions.propsData||{},l.componentOptions.listeners=l.componentOptions.listeners||{},l.componentOptions.propsData=(0,i.A)({},l.componentOptions.propsData,d),l.componentOptions.listeners=(0,i.A)({},l.componentOptions.listeners,p),g&&(l.componentOptions.children=g)):(g&&(l.children=g),l.data.on=(0,i.A)({},l.data.on||{},p)),l.data.on=(0,i.A)({},l.data.on||{},v),void 0!==h&&(l.key=h,l.data.key=h),"string"===typeof k&&(l.data.ref=k),l}},4718:function(e,t,n){"use strict";var r=n(97479),i=n(11331),o=n.n(i),a=n(20511),s={get any(){return(0,a.Ax)("any",{type:null})},get func(){return(0,a.Ax)("function",{type:Function}).def(l.func)},get bool(){return(0,a.Ax)("boolean",{type:Boolean}).def(l.bool)},get string(){return(0,a.Ax)("string",{type:String}).def(l.string)},get number(){return(0,a.Ax)("number",{type:Number}).def(l.number)},get array(){return(0,a.Ax)("array",{type:Array}).def(l.array)},get object(){return(0,a.Ax)("object",{type:Object}).def(l.object)},get integer(){return(0,a.Ax)("integer",{type:Number,validator:function(e){return(0,a.Fq)(e)}}).def(l.integer)},get symbol(){return(0,a.Ax)("symbol",{type:null,validator:function(e){return"symbol"===("undefined"===typeof e?"undefined":(0,r.A)(e))}})},custom:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"custom validation failed";if("function"!==typeof e)throw new TypeError("[VueTypes error]: You must provide a function as argument");return(0,a.Ax)(e.name||"<>",{validator:function(){var n=e.apply(void 0,arguments);return n||(0,a.R8)(this._vueTypes_name+" - "+t),n}})},oneOf:function(e){if(!(0,a.cy)(e))throw new TypeError("[VueTypes error]: You must provide an array as argument");var t='oneOf - value should be one of "'+e.join('", "')+'"',n=e.reduce(function(e,t){return null!==t&&void 0!==t&&-1===e.indexOf(t.constructor)&&e.push(t.constructor),e},[]);return(0,a.Ax)("oneOf",{type:n.length>0?n:null,validator:function(n){var r=-1!==e.indexOf(n);return r||(0,a.R8)(t),r}})},instanceOf:function(e){return(0,a.Ax)("instanceOf",{type:e})},oneOfType:function(e){if(!(0,a.cy)(e))throw new TypeError("[VueTypes error]: You must provide an array as argument");var t=!1,n=e.reduce(function(e,n){if(o()(n)){if("oneOf"===n._vueTypes_name)return e.concat(n.type||[]);if(n.type&&!(0,a.Tn)(n.validator)){if((0,a.cy)(n.type))return e.concat(n.type);e.push(n.type)}else(0,a.Tn)(n.validator)&&(t=!0);return e}return e.push(n),e},[]);if(!t)return(0,a.Ax)("oneOfType",{type:n}).def(void 0);var r=e.map(function(e){return e&&(0,a.cy)(e.type)?e.type.map(a.Pw):(0,a.Pw)(e)}).reduce(function(e,t){return e.concat((0,a.cy)(t)?t:[t])},[]).join('", "');return this.custom(function(t){var n=e.some(function(e){return"oneOf"===e._vueTypes_name?!e.type||(0,a.v2)(e.type,t,!0):(0,a.v2)(e,t,!0)});return n||(0,a.R8)('oneOfType - value type should be one of "'+r+'"'),n}).def(void 0)},arrayOf:function(e){return(0,a.Ax)("arrayOf",{type:Array,validator:function(t){var n=t.every(function(t){return(0,a.v2)(e,t)});return n||(0,a.R8)('arrayOf - value must be an array of "'+(0,a.Pw)(e)+'"'),n}})},objectOf:function(e){return(0,a.Ax)("objectOf",{type:Object,validator:function(t){var n=Object.keys(t).every(function(n){return(0,a.v2)(e,t[n])});return n||(0,a.R8)('objectOf - value must be an object of "'+(0,a.Pw)(e)+'"'),n}})},shape:function(e){var t=Object.keys(e),n=t.filter(function(t){return e[t]&&!0===e[t].required}),r=(0,a.Ax)("shape",{type:Object,validator:function(r){var i=this;if(!o()(r))return!1;var s=Object.keys(r);return n.length>0&&n.some(function(e){return-1===s.indexOf(e)})?((0,a.R8)('shape - at least one of required properties "'+n.join('", "')+'" is not present'),!1):s.every(function(n){if(-1===t.indexOf(n))return!0===i._vueTypes_isLoose||((0,a.R8)('shape - object is missing "'+n+'" property'),!1);var o=e[n];return(0,a.v2)(o,r[n])})}});return Object.defineProperty(r,"_vueTypes_isLoose",{enumerable:!1,writable:!0,value:!1}),Object.defineProperty(r,"loose",{get:function(){return this._vueTypes_isLoose=!0,this},enumerable:!1}),r}},c=function(){return{func:void 0,bool:void 0,string:void 0,number:void 0,array:void 0,object:void 0,integer:void 0}},l=c();Object.defineProperty(s,"sensibleDefaults",{enumerable:!1,set:function(e){!1===e?l={}:!0===e?l=c():o()(e)&&(l=e)},get:function(){return l}}),t.A=s},20511:function(e,t,n){"use strict";n.d(t,{Ax:function(){return g},Fq:function(){return h},Pw:function(){return l},R8:function(){return _},Tn:function(){return p},cy:function(){return f},v2:function(){return y}});var r=n(11331),i=n.n(r),o=Object.prototype,a=o.toString,s=o.hasOwnProperty,c=/^\s*function (\w+)/,l=function(e){var t=null!==e&&void 0!==e?e.type?e.type:e:null,n=t&&t.toString().match(c);return n&&n[1]},u=function(e){if(null===e||void 0===e)return null;var t=e.constructor.toString().match(c);return t&&t[1]},d=function(){},h=Number.isInteger||function(e){return"number"===typeof e&&isFinite(e)&&Math.floor(e)===e},f=Array.isArray||function(e){return"[object Array]"===a.call(e)},p=function(e){return"[object Function]"===a.call(e)},m=function(e){Object.defineProperty(e,"def",{value:function(e){return void 0===e&&void 0===this["default"]?(this["default"]=void 0,this):p(e)||y(this,e)?(this["default"]=f(e)||i()(e)?function(){return e}:e,this):(_(this._vueTypes_name+' - invalid default value: "'+e+'"',e),this)},enumerable:!1,writable:!1})},v=function(e){Object.defineProperty(e,"isRequired",{get:function(){return this.required=!0,this},enumerable:!1})},g=function(e,t){return Object.defineProperty(t,"_vueTypes_name",{enumerable:!1,writable:!1,value:e}),v(t),m(t),p(t.validator)&&(t.validator=t.validator.bind(t)),t},y=function e(t,n){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=t,a=!0,c=void 0;i()(t)||(o={type:t});var d=o._vueTypes_name?o._vueTypes_name+" - ":"";return s.call(o,"type")&&null!==o.type&&(f(o.type)?(a=o.type.some(function(t){return e(t,n,!0)}),c=o.type.map(function(e){return l(e)}).join(" or ")):(c=l(o),a="Array"===c?f(n):"Object"===c?i()(n):"String"===c||"Number"===c||"Boolean"===c||"Function"===c?u(n)===c:n instanceof o.type)),a?s.call(o,"validator")&&p(o.validator)?(a=o.validator(n),a||!1!==r||_(d+"custom validation failed"),a):a:(!1===r&&_(d+'value "'+n+'" should be of type "'+c+'"'),!1)},_=d},36873:function(e,t,n){"use strict";n.d(t,{A:function(){return c}});var r={};function i(e,t){0}function o(e,t,n){t||r[n]||(e(!1,n),r[n]=!0)}function a(e,t){o(i,e,t)}var s=a,c=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";s(e,"[antdv: "+t+"] "+n)}},98416:function(e,t,n){"use strict";var r=n(91158),i=n(70556),o=n(25592),a=void 0;function s(e){return!e||null===e.offsetParent}function c(e){var t=(e||"").match(/rgba?\((\d*), (\d*), (\d*)(, [\.\d]*)?\)/);return!(t&&t[1]&&t[2]&&t[3])||!(t[1]===t[2]&&t[2]===t[3])}t.A={name:"Wave",props:["insertExtraNode"],mounted:function(){var e=this;this.$nextTick(function(){var t=e.$el;1===t.nodeType&&(e.instance=e.bindAnimationEvent(t))})},inject:{configProvider:{default:function(){return o.f}}},beforeDestroy:function(){this.instance&&this.instance.cancel(),this.clickWaveTimeoutId&&clearTimeout(this.clickWaveTimeoutId),this.destroy=!0},methods:{onClick:function(e,t){if(!(!e||s(e)||e.className.indexOf("-leave")>=0)){var n=this.$props.insertExtraNode;this.extraNode=document.createElement("div");var i=this.extraNode;i.className="ant-click-animating-node";var o=this.getAttributeName();e.removeAttribute(o),e.setAttribute(o,"true"),a=a||document.createElement("style"),t&&"#ffffff"!==t&&"rgb(255, 255, 255)"!==t&&c(t)&&!/rgba\(\d*, \d*, \d*, 0\)/.test(t)&&"transparent"!==t&&(this.csp&&this.csp.nonce&&(a.nonce=this.csp.nonce),i.style.borderColor=t,a.innerHTML="\n [ant-click-animating-without-extra-node='true']::after, .ant-click-animating-node {\n --antd-wave-shadow-color: "+t+";\n }",document.body.contains(a)||document.body.appendChild(a)),n&&e.appendChild(i),r.A.addStartEventListener(e,this.onTransitionStart),r.A.addEndEventListener(e,this.onTransitionEnd)}},onTransitionStart:function(e){if(!this.destroy){var t=this.$el;e&&e.target===t&&(this.animationStart||this.resetEffect(t))}},onTransitionEnd:function(e){e&&"fadeEffect"===e.animationName&&this.resetEffect(e.target)},getAttributeName:function(){var e=this.$props.insertExtraNode;return e?"ant-click-animating":"ant-click-animating-without-extra-node"},bindAnimationEvent:function(e){var t=this;if(e&&e.getAttribute&&!e.getAttribute("disabled")&&!(e.className.indexOf("disabled")>=0)){var n=function(n){if("INPUT"!==n.target.tagName&&!s(n.target)){t.resetEffect(e);var r=getComputedStyle(e).getPropertyValue("border-top-color")||getComputedStyle(e).getPropertyValue("border-color")||getComputedStyle(e).getPropertyValue("background-color");t.clickWaveTimeoutId=window.setTimeout(function(){return t.onClick(e,r)},0),i.A.cancel(t.animationStartId),t.animationStart=!0,t.animationStartId=(0,i.A)(function(){t.animationStart=!1},10)}};return e.addEventListener("click",n,!0),{cancel:function(){e.removeEventListener("click",n,!0)}}}},resetEffect:function(e){if(e&&e!==this.extraNode&&e instanceof Element){var t=this.$props.insertExtraNode,n=this.getAttributeName();e.setAttribute(n,"false"),a&&(a.innerHTML=""),t&&this.extraNode&&e.contains(this.extraNode)&&e.removeChild(this.extraNode),r.A.removeStartEventListener(e,this.onTransitionStart),r.A.removeEndEventListener(e,this.onTransitionEnd)}}},render:function(){return this.configProvider.csp&&(this.csp=this.configProvider.csp),this.$slots["default"]&&this.$slots["default"][0]}}},64274:function(e,t,n){"use strict";var r=n(44508),i=n(40255),o=n(46942),a=n.n(o),s=n(52315),c=n(4718),l=n(80178),u=n(15848),d=n(51927),h=n(25592),f=n(44807);function p(){}var m={type:c.A.oneOf(["success","info","warning","error"]),closable:c.A.bool,closeText:c.A.any,message:c.A.any,description:c.A.any,afterClose:c.A.func.def(p),showIcon:c.A.bool,iconType:c.A.string,prefixCls:c.A.string,banner:c.A.bool,icon:c.A.any},v={name:"AAlert",props:m,mixins:[s.A],inject:{configProvider:{default:function(){return h.f}}},data:function(){return{closing:!1,closed:!1}},methods:{handleClose:function(e){e.preventDefault();var t=this.$el;t.style.height=t.offsetHeight+"px",t.style.height=t.offsetHeight+"px",this.setState({closing:!0}),this.$emit("close",e)},animationEnd:function(){this.setState({closing:!1,closed:!0}),this.afterClose()}},render:function(){var e,t=arguments[0],n=this.prefixCls,o=this.banner,s=this.closing,c=this.closed,h=this.configProvider.getPrefixCls,f=h("alert",n),p=this.closable,m=this.type,v=this.showIcon,g=this.iconType,y=(0,u.nu)(this,"closeText"),_=(0,u.nu)(this,"description"),b=(0,u.nu)(this,"message"),M=(0,u.nu)(this,"icon");v=!(!o||void 0!==v)||v,m=o&&void 0===m?"warning":m||"info";var A="filled";if(!g){switch(m){case"success":g="check-circle";break;case"info":g="info-circle";break;case"error":g="close-circle";break;case"warning":g="exclamation-circle";break;default:g="default"}_&&(A="outlined")}y&&(p=!0);var w=a()(f,(e={},(0,r.A)(e,f+"-"+m,!0),(0,r.A)(e,f+"-closing",s),(0,r.A)(e,f+"-with-description",!!_),(0,r.A)(e,f+"-no-icon",!v),(0,r.A)(e,f+"-banner",!!o),(0,r.A)(e,f+"-closable",p),e)),x=p?t("button",{attrs:{type:"button",tabIndex:0},on:{click:this.handleClose},class:f+"-close-icon"},[y?t("span",{class:f+"-close-text"},[y]):t(i.A,{attrs:{type:"close"}})]):null,k=M&&((0,u.zO)(M)?(0,d.Ob)(M,{class:f+"-icon"}):t("span",{class:f+"-icon"},[M]))||t(i.A,{class:f+"-icon",attrs:{type:g,theme:A}}),L=(0,l.A)(f+"-slide-up",{appear:!1,afterLeave:this.animationEnd});return c?null:t("transition",L,[t("div",{directives:[{name:"show",value:!s}],class:w,attrs:{"data-show":!s}},[v?k:null,t("span",{class:f+"-message"},[b]),t("span",{class:f+"-description"},[_]),x])])},install:function(e){e.use(f.A),e.component(v.name,v)}};t.A=v},19120:function(e,t,n){"use strict";n(29229)},63956:function(e,t,n){"use strict";n.d(t,{A:function(){return b}});var r=n(97479),i=n(44508),o=n(85505),a=n(28781),s=n(68052),c=n(25824),l=n(57155),u=n(52040),d=n(4718),h=n(51927),f=n(15848);function p(){for(var e=arguments.length,t=Array(e),n=0;ni?o>=a?10+e:20+e:o<=a?10+e:e},onAnimated:function(){this.$emit("animated")},renderNumberList:function(e,t){for(var n=this.$createElement,r=[],i=0;i<30;i++)r.push(n("p",{key:i.toString(),class:u()(t,{current:e===i})},[i%10]));return r},renderCurrentNumber:function(e,t,n){var r=this.$createElement;if("number"===typeof t){var i=this.getPositionByNum(t,n),o=this.animateStarted||void 0===v(this.lastCount)[n],a={transition:o?"none":void 0,msTransform:"translateY("+100*-i+"%)",WebkitTransform:"translateY("+100*-i+"%)",transform:"translateY("+100*-i+"%)"};return r("span",{class:e+"-only",style:a,key:n},[this.renderNumberList(i,e+"-only-unit")])}return r("span",{key:"symbol",class:e+"-symbol"},[t])},renderNumberElement:function(e){var t=this,n=this.sCount;return n&&Number(n)%1===0?v(n).map(function(n,r){return t.renderCurrentNumber(e,n,r)}).reverse():n}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.title,r=this.component,i=void 0===r?"sup":r,o=this.displayComponent,a=this.className,c=this.configProvider.getPrefixCls,l=c("scroll-number",t);if(o)return(0,p.Ob)(o,{class:l+"-custom-component"});var d=(0,h.gd)(this,!0),m=(0,f.A)(this.$props,["count","component","prefixCls","displayComponent"]),v={props:(0,s.A)({},m),attrs:{title:n},style:d,class:u()(l,a)};return d&&d.borderColor&&(v.style.boxShadow="0 0 0 1px "+d.borderColor+" inset"),e(i,v,[this.renderNumberElement(l)])}},_=function(){for(var e=arguments.length,t=Array(e),n=0;ne?e+"+":t;return n},getDispayCount:function(){var e=this.isDot();return e?"":this.getNumberedDispayCount()},getScrollNumberTitle:function(){var e=this.$props.title,t=this.badgeCount;return e||("string"===typeof t||"number"===typeof t?t:void 0)},getStyleWithOffset:function(){var e=this.$props,t=e.offset,n=e.numberStyle;return t?(0,s.A)({right:-parseInt(t[0],10)+"px",marginTop:(0,A.A)(t[1])?t[1]+"px":t[1]},n):(0,s.A)({},n)},getBadgeClassName:function(e){var t,n=(0,h.Gk)(this.$slots["default"]),r=this.hasStatus();return u()(e,(t={},(0,a.A)(t,e+"-status",r),(0,a.A)(t,e+"-dot-status",r&&this.dot&&!this.isZero()),(0,a.A)(t,e+"-not-a-wrapper",!n.length),t))},hasStatus:function(){var e=this.$props,t=e.status,n=e.color;return!!t||!!n},isZero:function(){var e=this.getNumberedDispayCount();return"0"===e||0===e},isDot:function(){var e=this.$props.dot,t=this.isZero();return e&&!t||this.hasStatus()},isHidden:function(){var e=this.$props.showZero,t=this.getDispayCount(),n=this.isZero(),r=this.isDot(),i=null===t||void 0===t||""===t;return(i||n&&!e)&&!r},renderStatusText:function(e){var t=this.$createElement,n=this.$props.text,r=this.isHidden();return r||!n?null:t("span",{class:e+"-status-text"},[n])},renderDispayComponent:function(){var e=this.badgeCount,t=e;if(t&&"object"===("undefined"===typeof t?"undefined":(0,o.A)(t)))return(0,p.Ob)(t,{style:this.getStyleWithOffset()})},renderBadgeNumber:function(e,t){var n,r=this.$createElement,i=this.$props,o=i.status,s=i.color,c=this.badgeCount,l=this.getDispayCount(),u=this.isDot(),d=this.isHidden(),h=(n={},(0,a.A)(n,e+"-dot",u),(0,a.A)(n,e+"-count",!u),(0,a.A)(n,e+"-multiple-words",!u&&c&&c.toString&&c.toString().length>1),(0,a.A)(n,e+"-status-"+o,!!o),(0,a.A)(n,e+"-status-"+s,x(s)),n),f=this.getStyleWithOffset();return s&&!x(s)&&(f=f||{},f.background=s),d?null:r(y,{attrs:{prefixCls:t,"data-show":!d,className:h,count:l,displayComponent:this.renderDispayComponent(),title:this.getScrollNumberTitle()},directives:[{name:"show",value:!d}],style:f,key:"scrollNumber"})}},render:function(){var e,t=arguments[0],n=this.prefixCls,r=this.scrollNumberPrefixCls,o=this.status,s=this.text,c=this.color,l=this.$slots,d=this.configProvider.getPrefixCls,f=d("badge",n),p=d("scroll-number",r),m=(0,h.Gk)(l["default"]),v=(0,h.nu)(this,"count");Array.isArray(v)&&(v=v[0]),this.badgeCount=v;var g=this.renderBadgeNumber(f,p),y=this.renderStatusText(f),_=u()((e={},(0,a.A)(e,f+"-status-dot",this.hasStatus()),(0,a.A)(e,f+"-status-"+o,!!o),(0,a.A)(e,f+"-status-"+c,x(c)),e)),b={};if(c&&!x(c)&&(b.background=c),!m.length&&this.hasStatus()){var A=this.getStyleWithOffset(),w=A&&A.color;return t("span",i()([{on:(0,h.WM)(this)},{class:this.getBadgeClassName(f),style:A}]),[t("span",{class:_,style:b}),t("span",{style:{color:w},class:f+"-status-text"},[s])])}var k=(0,M.A)(m.length?f+"-zoom":"");return t("span",i()([{on:(0,h.WM)(this)},{class:this.getBadgeClassName(f)}]),[m,t("transition",k,[g]),y])}},L=n(44807);k.install=function(e){e.use(L.A),e.component(k.name,k)};var C=k},19807:function(e,t,n){"use strict";n(29229)},44807:function(e,t,n){"use strict";n.d(t,{A:function(){return u}});var r=n(24415),i=n(81593),o=n(35745),a=n(1406),s={install:function(e){e.use(r.A,{name:"ant-ref"}),(0,i.Qg)(e),(0,o.b)(e),(0,a.o)(e)}},c={},l=function(e){c.Vue=e,e.use(s)};c.install=l;var u=c},65847:function(e,t,n){"use strict";n.d(t,{A:function(){return _}});var r=n(32779),i=n(4718),o=n(51927),a=n(15848),s=n(36873),c=n(25592),l=n(57981),u=n(40255),d={name:"ABreadcrumbItem",__ANT_BREADCRUMB_ITEM:!0,props:{prefixCls:i.A.string,href:i.A.string,separator:i.A.any.def("/"),overlay:i.A.any},inject:{configProvider:{default:function(){return c.f}}},methods:{renderBreadcrumbNode:function(e,t){var n=this.$createElement,r=(0,a.nu)(this,"overlay");return r?n(l.A,{attrs:{overlay:r,placement:"bottomCenter"}},[n("span",{class:t+"-overlay-link"},[e,n(u.A,{attrs:{type:"down"}})])]):e}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.$slots,r=this.configProvider.getPrefixCls,i=r("breadcrumb",t),o=(0,a.nu)(this,"separator"),s=n["default"],c=void 0;return c=(0,a.cK)(this,"href")?e("a",{class:i+"-link"},[s]):e("span",{class:i+"-link"},[s]),c=this.renderBreadcrumbNode(c,i),s?e("span",[c,o&&""!==o&&e("span",{class:i+"-separator"},[o])]):null}},h=n(36457),f=i.A.shape({path:i.A.string,breadcrumbName:i.A.string,children:i.A.array}).loose,p={prefixCls:i.A.string,routes:i.A.arrayOf(f),params:i.A.any,separator:i.A.any,itemRender:i.A.func};function m(e,t){if(!e.breadcrumbName)return null;var n=Object.keys(t).join("|"),r=e.breadcrumbName.replace(new RegExp(":("+n+")","g"),function(e,n){return t[n]||e});return r}var v={name:"ABreadcrumb",props:p,inject:{configProvider:{default:function(){return c.f}}},methods:{defaultItemRender:function(e){var t=e.route,n=e.params,r=e.routes,i=e.paths,o=this.$createElement,a=r.indexOf(t)===r.length-1,s=m(t,n);return a?o("span",[s]):o("a",{attrs:{href:"#/"+i.join("/")}},[s])},getPath:function(e,t){return e=(e||"").replace(/^\//,""),Object.keys(t).forEach(function(n){e=e.replace(":"+n,t[n])}),e},addChildPath:function(e,t,n){var i=[].concat((0,r.A)(e)),o=this.getPath(t,n);return o&&i.push(o),i},genForRoutes:function(e){var t=this,n=e.routes,r=void 0===n?[]:n,i=e.params,o=void 0===i?{}:i,a=e.separator,s=e.itemRender,c=void 0===s?this.defaultItemRender:s,l=this.$createElement,u=[];return r.map(function(e){var n=t.getPath(e.path,o);n&&u.push(n);var i=null;return e.children&&e.children.length&&(i=l(h.Ay,[e.children.map(function(e){return l(h.Ay.Item,{key:e.path||e.breadcrumbName},[c({route:e,params:o,routes:r,paths:t.addChildPath(u,e.path,o),h:t.$createElement})])})])),l(d,{attrs:{overlay:i,separator:a},key:n||e.breadcrumbName},[c({route:e,params:o,routes:r,paths:u,h:t.$createElement})])})}},render:function(){var e=arguments[0],t=void 0,n=this.prefixCls,r=this.routes,i=this.params,c=void 0===i?{}:i,l=this.$slots,u=this.$scopedSlots,d=this.configProvider.getPrefixCls,h=d("breadcrumb",n),f=(0,a.Gk)(l["default"]),p=(0,a.nu)(this,"separator"),m=this.itemRender||u.itemRender||this.defaultItemRender;return r&&r.length>0?t=this.genForRoutes({routes:r,params:c,separator:p,itemRender:m}):f.length&&(t=f.map(function(e,t){return(0,s.A)((0,a.xr)(e).__ANT_BREADCRUMB_ITEM||(0,a.xr)(e).__ANT_BREADCRUMB_SEPARATOR,"Breadcrumb","Only accepts Breadcrumb.Item and Breadcrumb.Separator as it's children"),(0,o.Ob)(e,{props:{separator:p},key:t})})),e("div",{class:h},[t])}},g={name:"ABreadcrumbSeparator",__ANT_BREADCRUMB_SEPARATOR:!0,props:{prefixCls:i.A.string},inject:{configProvider:{default:function(){return c.f}}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.$slots,r=this.configProvider.getPrefixCls,i=r("breadcrumb",t),o=n["default"];return e("span",{class:i+"-separator"},[o||"/"])}},y=n(44807);v.Item=d,v.Separator=g,v.install=function(e){e.use(y.A),e.component(v.name,v),e.component(d.name,d),e.component(g.name,g)};var _=v},70093:function(e,t,n){"use strict";n(29229),n(1747),n(63713)},49872:function(e,t,n){"use strict";n.d(t,{E:function(){return s}});var r=n(44508),i=n(15848),o=n(4718),a=n(25592),s={prefixCls:o.A.string,size:{validator:function(e){return["small","large","default"].includes(e)}}};t.A={name:"AButtonGroup",props:s,inject:{configProvider:{default:function(){return a.f}}},data:function(){return{sizeMap:{large:"lg",small:"sm"}}},render:function(){var e,t=arguments[0],n=this.prefixCls,o=this.size,a=this.$slots,s=this.configProvider.getPrefixCls,c=s("btn-group",n),l="";switch(o){case"large":l="lg";break;case"small":l="sm";break;default:break}var u=(e={},(0,r.A)(e,""+c,!0),(0,r.A)(e,c+"-"+l,l),e);return t("div",{class:u},[(0,i.Gk)(a["default"])])}}},26997:function(e,t,n){"use strict";var r=n(4718);t.A=function(){return{prefixCls:r.A.string,type:r.A.string,htmlType:r.A.oneOf(["button","submit","reset"]).def("button"),icon:r.A.any,shape:r.A.oneOf(["circle","circle-outline","round"]),size:r.A.oneOf(["small","large","default"]).def("default"),loading:r.A.oneOfType([r.A.bool,r.A.object]),disabled:r.A.bool,ghost:r.A.bool,block:r.A.bool}}},49084:function(e,t,n){"use strict";n.d(t,{A:function(){return y}});var r=n(75189),i=n.n(r),o=n(85505),a=n(44508),s=n(98416),c=n(40255),l=n(26997),u=n(15848),d=n(25592),h=/^[\u4e00-\u9fa5]{2}$/,f=h.test.bind(h),p=(0,l.A)(),m={name:"AButton",inheritAttrs:!1,__ANT_BUTTON:!0,props:p,inject:{configProvider:{default:function(){return d.f}}},data:function(){return{sizeMap:{large:"lg",small:"sm"},sLoading:!!this.loading,hasTwoCNChar:!1}},computed:{classes:function(){var e,t=this.prefixCls,n=this.type,r=this.shape,i=this.size,o=this.hasTwoCNChar,s=this.sLoading,c=this.ghost,l=this.block,d=this.icon,h=this.$slots,f=this.configProvider.getPrefixCls,p=f("btn",t),m=!1!==this.configProvider.autoInsertSpaceInButton,v="";switch(i){case"large":v="lg";break;case"small":v="sm";break;default:break}var g=s?"loading":d,y=(0,u.Gk)(h["default"]);return e={},(0,a.A)(e,""+p,!0),(0,a.A)(e,p+"-"+n,n),(0,a.A)(e,p+"-"+r,r),(0,a.A)(e,p+"-"+v,v),(0,a.A)(e,p+"-icon-only",0===y.length&&g),(0,a.A)(e,p+"-loading",s),(0,a.A)(e,p+"-background-ghost",c||"ghost"===n),(0,a.A)(e,p+"-two-chinese-chars",o&&m),(0,a.A)(e,p+"-block",l),e}},watch:{loading:function(e,t){var n=this;t&&"boolean"!==typeof t&&clearTimeout(this.delayTimeout),e&&"boolean"!==typeof e&&e.delay?this.delayTimeout=setTimeout(function(){n.sLoading=!!e},e.delay):this.sLoading=!!e}},mounted:function(){this.fixTwoCNChar()},updated:function(){this.fixTwoCNChar()},beforeDestroy:function(){this.delayTimeout&&clearTimeout(this.delayTimeout)},methods:{fixTwoCNChar:function(){var e=this.$refs.buttonNode;if(e){var t=e.textContent;this.isNeedInserted()&&f(t)?this.hasTwoCNChar||(this.hasTwoCNChar=!0):this.hasTwoCNChar&&(this.hasTwoCNChar=!1)}},handleClick:function(e){var t=this.$data.sLoading;t||this.$emit("click",e)},insertSpace:function(e,t){var n=this.$createElement,r=t?" ":"";if("string"===typeof e.text){var i=e.text.trim();return f(i)&&(i=i.split("").join(r)),n("span",[i])}return e},isNeedInserted:function(){var e=this.$slots,t=this.type,n=(0,u.nu)(this,"icon");return e["default"]&&1===e["default"].length&&!n&&"link"!==t}},render:function(){var e=this,t=arguments[0],n=this.type,r=this.htmlType,a=this.classes,l=this.disabled,d=this.handleClick,h=this.sLoading,f=this.$slots,p=this.$attrs,m=(0,u.nu)(this,"icon"),v={attrs:(0,o.A)({},p,{disabled:l}),class:a,on:(0,o.A)({},(0,u.WM)(this),{click:d})},g=h?"loading":m,y=g?t(c.A,{attrs:{type:g}}):null,_=(0,u.Gk)(f["default"]),b=!1!==this.configProvider.autoInsertSpaceInButton,M=_.map(function(t){return e.insertSpace(t,e.isNeedInserted()&&b)});if(void 0!==p.href)return t("a",i()([v,{ref:"buttonNode"}]),[y,M]);var A=t("button",i()([v,{ref:"buttonNode",attrs:{type:r||"button"}}]),[y,M]);return"link"===n?A:t(s.A,[A])}},v=n(49872),g=n(44807);m.Group=v.A,m.install=function(e){e.use(g.A),e.component(m.name,m),e.component(v.A.name,v.A)};var y=m},27902:function(e,t,n){"use strict";n(29229)},73856:function(e,t,n){"use strict";n.d(t,{A:function(){return b}});var r=n(75189),i=n.n(r),o=n(85505),a=n(44508),s=n(90034),c=n(14248),l=n(812),u=n(29966),d=n(4718),h=n(15848),f=n(52315),p=n(25592),m=c.Ay.TabPane,v={name:"ACard",mixins:[f.A],props:{prefixCls:d.A.string,title:d.A.any,extra:d.A.any,bordered:d.A.bool.def(!0),bodyStyle:d.A.object,headStyle:d.A.object,loading:d.A.bool.def(!1),hoverable:d.A.bool.def(!1),type:d.A.string,size:d.A.oneOf(["default","small"]),actions:d.A.any,tabList:d.A.array,tabProps:d.A.object,tabBarExtraContent:d.A.any,activeTabKey:d.A.string,defaultActiveTabKey:d.A.string},inject:{configProvider:{default:function(){return p.f}}},data:function(){return{widerPadding:!1}},methods:{getAction:function(e){var t=this.$createElement,n=e.map(function(n,r){return t("li",{style:{width:100/e.length+"%"},key:"action-"+r},[t("span",[n])])});return n},onTabChange:function(e){this.$emit("tabChange",e)},isContainGrid:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=void 0;return e.forEach(function(e){e&&(0,h.xr)(e).__ANT_CARD_GRID&&(t=!0)}),t}},render:function(){var e,t,n=arguments[0],r=this.$props,d=r.prefixCls,f=r.headStyle,p=void 0===f?{}:f,v=r.bodyStyle,g=void 0===v?{}:v,y=r.loading,_=r.bordered,b=void 0===_||_,M=r.size,A=void 0===M?"default":M,w=r.type,x=r.tabList,k=r.tabProps,L=void 0===k?{}:k,C=r.hoverable,S=r.activeTabKey,z=r.defaultActiveTabKey,T=this.configProvider.getPrefixCls,O=T("card",d),H=this.$slots,D=this.$scopedSlots,Y=(0,h.nu)(this,"tabBarExtraContent"),V=(e={},(0,a.A)(e,""+O,!0),(0,a.A)(e,O+"-loading",y),(0,a.A)(e,O+"-bordered",b),(0,a.A)(e,O+"-hoverable",!!C),(0,a.A)(e,O+"-contain-grid",this.isContainGrid(H["default"])),(0,a.A)(e,O+"-contain-tabs",x&&x.length),(0,a.A)(e,O+"-"+A,"default"!==A),(0,a.A)(e,O+"-type-"+w,!!w),e),P=0===g.padding||"0px"===g.padding?{padding:24}:void 0,E=n("div",{class:O+"-loading-content",style:P},[n(l.A,{attrs:{gutter:8}},[n(u.A,{attrs:{span:22}},[n("div",{class:O+"-loading-block"})])]),n(l.A,{attrs:{gutter:8}},[n(u.A,{attrs:{span:8}},[n("div",{class:O+"-loading-block"})]),n(u.A,{attrs:{span:15}},[n("div",{class:O+"-loading-block"})])]),n(l.A,{attrs:{gutter:8}},[n(u.A,{attrs:{span:6}},[n("div",{class:O+"-loading-block"})]),n(u.A,{attrs:{span:18}},[n("div",{class:O+"-loading-block"})])]),n(l.A,{attrs:{gutter:8}},[n(u.A,{attrs:{span:13}},[n("div",{class:O+"-loading-block"})]),n(u.A,{attrs:{span:9}},[n("div",{class:O+"-loading-block"})])]),n(l.A,{attrs:{gutter:8}},[n(u.A,{attrs:{span:4}},[n("div",{class:O+"-loading-block"})]),n(u.A,{attrs:{span:3}},[n("div",{class:O+"-loading-block"})]),n(u.A,{attrs:{span:16}},[n("div",{class:O+"-loading-block"})])])]),j=void 0!==S,F={props:(0,o.A)({size:"large"},L,(t={},(0,a.A)(t,j?"activeKey":"defaultActiveKey",j?S:z),(0,a.A)(t,"tabBarExtraContent",Y),t)),on:{change:this.onTabChange},class:O+"-head-tabs"},I=void 0,$=x&&x.length?n(c.Ay,F,[x.map(function(e){var t=e.tab,r=e.scopedSlots,i=void 0===r?{}:r,o=i.tab,a=void 0!==t?t:D[o]?D[o](e):null;return n(m,{attrs:{tab:a,disabled:e.disabled},key:e.key})})]):null,R=(0,h.nu)(this,"title"),N=(0,h.nu)(this,"extra");(R||N||$)&&(I=n("div",{class:O+"-head",style:p},[n("div",{class:O+"-head-wrapper"},[R&&n("div",{class:O+"-head-title"},[R]),N&&n("div",{class:O+"-extra"},[N])]),$]));var W=H["default"],B=(0,h.nu)(this,"cover"),K=B?n("div",{class:O+"-cover"},[B]):null,U=n("div",{class:O+"-body",style:g},[y?E:W]),q=(0,h.Gk)(this.$slots.actions),G=q&&q.length?n("ul",{class:O+"-actions"},[this.getAction(q)]):null;return n("div",i()([{class:V,ref:"cardContainerRef"},{on:(0,s.A)((0,h.WM)(this),["tabChange","tab-change"])}]),[I,K,W?U:null,G])}},g={name:"ACardMeta",props:{prefixCls:d.A.string,title:d.A.any,description:d.A.any},inject:{configProvider:{default:function(){return p.f}}},render:function(){var e=arguments[0],t=this.$props.prefixCls,n=this.configProvider.getPrefixCls,r=n("card",t),o=(0,a.A)({},r+"-meta",!0),s=(0,h.nu)(this,"avatar"),c=(0,h.nu)(this,"title"),l=(0,h.nu)(this,"description"),u=s?e("div",{class:r+"-meta-avatar"},[s]):null,d=c?e("div",{class:r+"-meta-title"},[c]):null,f=l?e("div",{class:r+"-meta-description"},[l]):null,p=d||f?e("div",{class:r+"-meta-detail"},[d,f]):null;return e("div",i()([{on:(0,h.WM)(this)},{class:o}]),[u,p])}},y={name:"ACardGrid",__ANT_CARD_GRID:!0,props:{prefixCls:d.A.string,hoverable:d.A.bool},inject:{configProvider:{default:function(){return p.f}}},render:function(){var e,t=arguments[0],n=this.$props,r=n.prefixCls,o=n.hoverable,s=void 0===o||o,c=this.configProvider.getPrefixCls,l=c("card",r),u=(e={},(0,a.A)(e,l+"-grid",!0),(0,a.A)(e,l+"-grid-hoverable",s),e);return t("div",i()([{on:(0,h.WM)(this)},{class:u}]),[this.$slots["default"]])}},_=n(44807);v.Meta=g,v.Grid=y,v.install=function(e){e.use(_.A),e.component(v.name,v),e.component(g.name,g),e.component(y.name,y)};var b=v},85288:function(e,t,n){"use strict";n(29229),n(14686),n(12854),n(35184)},75842:function(e,t,n){"use strict";n.d(t,{A:function(){return M}});var r=n(75189),i=n.n(r),o=n(44508),a=n(85505),s=n(5748),c=n(4718),l=n(46942),u=n.n(l),d=n(68145),h=n(15848),f=n(25592),p=n(36873);function m(){}var v={name:"ACheckbox",inheritAttrs:!1,__ANT_CHECKBOX:!0,model:{prop:"checked"},props:{prefixCls:c.A.string,defaultChecked:c.A.bool,checked:c.A.bool,disabled:c.A.bool,isGroup:c.A.bool,value:c.A.any,name:c.A.string,id:c.A.string,indeterminate:c.A.bool,type:c.A.string.def("checkbox"),autoFocus:c.A.bool},inject:{configProvider:{default:function(){return f.f}},checkboxGroupContext:{default:function(){}}},watch:{value:function(e,t){var n=this;this.$nextTick(function(){var r=n.checkboxGroupContext,i=void 0===r?{}:r;i.registerValue&&i.cancelValue&&(i.cancelValue(t),i.registerValue(e))})}},mounted:function(){var e=this.value,t=this.checkboxGroupContext,n=void 0===t?{}:t;n.registerValue&&n.registerValue(e),(0,p.A)((0,h.Ay)(this,"checked")||this.checkboxGroupContext||!(0,h.Ay)(this,"value"),"Checkbox","`value` is not validate prop, do you mean `checked`?")},beforeDestroy:function(){var e=this.value,t=this.checkboxGroupContext,n=void 0===t?{}:t;n.cancelValue&&n.cancelValue(e)},methods:{handleChange:function(e){var t=e.target.checked;this.$emit("input",t),this.$emit("change",e)},focus:function(){this.$refs.vcCheckbox.focus()},blur:function(){this.$refs.vcCheckbox.blur()}},render:function(){var e,t=this,n=arguments[0],r=this.checkboxGroupContext,c=this.$slots,l=(0,h.Oq)(this),f=c["default"],p=(0,h.WM)(this),v=p.mouseenter,g=void 0===v?m:v,y=p.mouseleave,_=void 0===y?m:y,b=(p.input,(0,s.A)(p,["mouseenter","mouseleave","input"])),M=l.prefixCls,A=l.indeterminate,w=(0,s.A)(l,["prefixCls","indeterminate"]),x=this.configProvider.getPrefixCls,k=x("checkbox",M),L={props:(0,a.A)({},w,{prefixCls:k}),on:b,attrs:(0,h.Z0)(this)};r?(L.on.change=function(){for(var e=arguments.length,n=Array(e),i=0;i0&&(c=this.getOptions().map(function(r){return e(v,{attrs:{prefixCls:s,disabled:"disabled"in r?r.disabled:t.disabled,indeterminate:r.indeterminate,value:r.value,checked:-1!==n.sValue.indexOf(r.value)},key:r.value.toString(),on:{change:r.onChange||y},class:l+"-item"},[r.label])})),e("div",{class:l},[c])}},b=n(44807);v.Group=_,v.install=function(e){e.use(b.A),e.component(v.name,v),e.component(_.name,_)};var M=v},46925:function(e,t,n){"use strict";n(29229)},29966:function(e,t,n){"use strict";var r=n(43594),i=n(44807);r.Ay.install=function(e){e.use(i.A),e.component(r.Ay.name,r.Ay)},t.A=r.Ay},35184:function(e,t,n){"use strict";n(29229),n(67434)},34149:function(e,t,n){"use strict";n.d(t,{A:function(){return C}});var r=n(85505),i=n(44508),o=n(40703),a=n(15848),s=n(51927),c=n(4718),l=function(){return{prefixCls:c.A.string,activeKey:c.A.oneOfType([c.A.string,c.A.number,c.A.arrayOf(c.A.oneOfType([c.A.string,c.A.number]))]),defaultActiveKey:c.A.oneOfType([c.A.string,c.A.number,c.A.arrayOf(c.A.oneOfType([c.A.string,c.A.number]))]),accordion:c.A.bool,destroyInactivePanel:c.A.bool,bordered:c.A.bool,expandIcon:c.A.func,openAnimation:c.A.object,expandIconPosition:c.A.oneOf(["left","right"])}},u=function(){return{openAnimation:c.A.object,prefixCls:c.A.string,header:c.A.oneOfType([c.A.string,c.A.number,c.A.node]),headerClass:c.A.string,showArrow:c.A.bool,isActive:c.A.bool,destroyInactivePanel:c.A.bool,disabled:c.A.bool,accordion:c.A.bool,forceRender:c.A.bool,expandIcon:c.A.func,extra:c.A.any,panelKey:c.A.any}},d={name:"PanelContent",props:{prefixCls:c.A.string,isActive:c.A.bool,destroyInactivePanel:c.A.bool,forceRender:c.A.bool,role:c.A.any},data:function(){return{_isActive:void 0}},render:function(){var e,t=arguments[0];if(this._isActive=this.forceRender||this._isActive||this.isActive,!this._isActive)return null;var n=this.$props,r=n.prefixCls,o=n.isActive,a=n.destroyInactivePanel,s=n.forceRender,c=n.role,l=this.$slots,u=(e={},(0,i.A)(e,r+"-content",!0),(0,i.A)(e,r+"-content-active",o),e),d=s||o||!a?t("div",{class:r+"-content-box"},[l["default"]]):null;return t("div",{class:u,attrs:{role:c}},[d])}},h={name:"Panel",props:(0,a.CB)(u(),{showArrow:!0,isActive:!1,destroyInactivePanel:!1,headerClass:"",forceRender:!1}),methods:{handleItemClick:function(){this.$emit("itemClick",this.panelKey)},handleKeyPress:function(e){"Enter"!==e.key&&13!==e.keyCode&&13!==e.which||this.handleItemClick()}},render:function(){var e,t,n=arguments[0],o=this.$props,s=o.prefixCls,c=o.headerClass,l=o.isActive,u=o.showArrow,h=o.destroyInactivePanel,f=o.disabled,p=o.openAnimation,m=o.accordion,v=o.forceRender,g=o.expandIcon,y=o.extra,_=this.$slots,b={props:(0,r.A)({appear:!0,css:!1}),on:(0,r.A)({},p)},M=(e={},(0,i.A)(e,s+"-header",!0),(0,i.A)(e,c,c),e),A=(0,a.nu)(this,"header"),w=(t={},(0,i.A)(t,s+"-item",!0),(0,i.A)(t,s+"-item-active",l),(0,i.A)(t,s+"-item-disabled",f),t),x=n("i",{class:"arrow"});return u&&"function"===typeof g&&(x=g(this.$props)),n("div",{class:w,attrs:{role:"tablist"}},[n("div",{class:M,on:{click:this.handleItemClick.bind(this),keypress:this.handleKeyPress},attrs:{role:m?"tab":"button",tabIndex:f?-1:0,"aria-expanded":l}},[u&&x,A,y&&n("div",{class:s+"-extra"},[y])]),n("transition",b,[n(d,{directives:[{name:"show",value:l}],attrs:{prefixCls:s,isActive:l,destroyInactivePanel:h,forceRender:v,role:m?"tabpanel":null}},[_["default"]])])])}},f=n(32779),p=n(52315),m=n(75998);function v(e,t,n,r){var i=void 0;return(0,m.A)(e,n,{start:function(){t?(i=e.offsetHeight,e.style.height=0):e.style.height=e.offsetHeight+"px"},active:function(){e.style.height=(t?i:0)+"px"},end:function(){e.style.height="",r()}})}function g(e){return{enter:function(t,n){return v(t,!0,e+"-anim",n)},leave:function(t,n){return v(t,!1,e+"-anim",n)}}}var y=g;function _(e){var t=e;return Array.isArray(t)||(t=t?[t]:[]),t.map(function(e){return String(e)})}var b={name:"Collapse",mixins:[p.A],model:{prop:"activeKey",event:"change"},props:(0,a.CB)(l(),{prefixCls:"rc-collapse",accordion:!1,destroyInactivePanel:!1}),data:function(){var e=this.$props,t=e.activeKey,n=e.defaultActiveKey,r=e.openAnimation,i=e.prefixCls,o=n;(0,a.cK)(this,"activeKey")&&(o=t);var s=r||y(i);return{currentOpenAnimations:s,stateActiveKey:_(o)}},watch:{activeKey:function(e){this.setState({stateActiveKey:_(e)})},openAnimation:function(e){this.setState({currentOpenAnimations:e})}},methods:{onClickItem:function(e){var t=this.stateActiveKey;if(this.accordion)t=t[0]===e?[]:[e];else{t=[].concat((0,f.A)(t));var n=t.indexOf(e),r=n>-1;r?t.splice(n,1):t.push(e)}this.setActiveKey(t)},getNewChild:function(e,t){if(!(0,a.sG)(e)){var n=this.stateActiveKey,r=this.$props,i=r.prefixCls,o=r.accordion,c=r.destroyInactivePanel,l=r.expandIcon,u=e.key||String(t),d=(0,a.Ts)(e),h=d.header,f=d.headerClass,p=d.disabled,m=!1;m=o?n[0]===u:n.indexOf(u)>-1;var v={};p||""===p||(v={itemClick:this.onClickItem});var g={key:u,props:{panelKey:u,header:h,headerClass:f,isActive:m,prefixCls:i,destroyInactivePanel:c,openAnimation:this.currentOpenAnimations,accordion:o,expandIcon:l},on:v};return(0,s.Ob)(e,g)}},getItems:function(){var e=this,t=[];return this.$slots["default"]&&this.$slots["default"].forEach(function(n,r){t.push(e.getNewChild(n,r))}),t},setActiveKey:function(e){this.setState({stateActiveKey:e}),this.$emit("change",this.accordion?e[0]:e)}},render:function(){var e=arguments[0],t=this.$props,n=t.prefixCls,r=t.accordion,o=(0,i.A)({},n,!0);return e("div",{class:o,attrs:{role:r?"tablist":null}},[this.getItems()])}};b.Panel=h;var M=b,A=n(40255),w=n(25592),x={name:"ACollapse",model:{prop:"activeKey",event:"change"},props:(0,a.CB)(l(),{bordered:!0,openAnimation:o.A,expandIconPosition:"left"}),inject:{configProvider:{default:function(){return w.f}}},methods:{renderExpandIcon:function(e,t){var n=this.$createElement,r=(0,a.nu)(this,"expandIcon",e),i=r||n(A.A,{attrs:{type:"right",rotate:e.isActive?90:void 0}});return(0,a.zO)(Array.isArray(r)?i[0]:i)?(0,s.Ob)(i,{class:t+"-arrow"}):i}},render:function(){var e,t=this,n=arguments[0],o=this.prefixCls,s=this.bordered,c=this.expandIconPosition,l=this.configProvider.getPrefixCls,u=l("collapse",o),d=(e={},(0,i.A)(e,u+"-borderless",!s),(0,i.A)(e,u+"-icon-position-"+c,!0),e),h={props:(0,r.A)({},(0,a.Oq)(this),{prefixCls:u,expandIcon:function(e){return t.renderExpandIcon(e,u)}}),class:d,on:(0,a.WM)(this)};return n(M,h,[this.$slots["default"]])}},k={name:"ACollapsePanel",props:(0,r.A)({},u()),inject:{configProvider:{default:function(){return w.f}}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.showArrow,o=void 0===n||n,s=this.configProvider.getPrefixCls,c=s("collapse",t),l=(0,i.A)({},c+"-no-arrow",!o),u={props:(0,r.A)({},(0,a.Oq)(this),{prefixCls:c,extra:(0,a.nu)(this,"extra")}),class:l,on:(0,a.WM)(this)},d=(0,a.nu)(this,"header");return e(M.Panel,u,[this.$slots["default"],d?e("template",{slot:"header"},[d]):null])}},L=n(44807);x.Panel=k,x.install=function(e){e.use(L.A),e.component(x.name,x),e.component(k.name,k)};var C=x},82931:function(e,t,n){"use strict";n(29229)},25592:function(e,t,n){"use strict";n.d(t,{f:function(){return i}});var r=n(20761),i={getPrefixCls:function(e,t){return t||"ant-"+e},renderEmpty:r.A}},39161:function(e,t,n){"use strict";n.d(t,{A:function(){return b}});var r=n(85505),i=n(85471),o=n(4718),a=n(15848),s=n(20761),c=n(44807),l=n(95093),u=n(67287),d=n(96995),h=n(36873),f="internalMark";function p(e){e&&e.locale?(0,u.A)(l).locale(e.locale):(0,u.A)(l).locale("en")}var m={name:"ALocaleProvider",props:{locale:o.A.object.def(function(){return{}}),_ANT_MARK__:o.A.string},data:function(){return(0,h.A)(this._ANT_MARK__===f,"LocaleProvider","`LocaleProvider` is deprecated. Please use `locale` with `ConfigProvider` instead"),{antLocale:(0,r.A)({},this.locale,{exist:!0})}},provide:function(){return{localeData:this.$data}},watch:{locale:function(e){this.antLocale=(0,r.A)({},this.locale,{exist:!0}),p(e),(0,d.L)(e&&e.Modal)}},created:function(){var e=this.locale;p(e),(0,d.L)(e&&e.Modal)},beforeDestroy:function(){(0,d.L)()},render:function(){return this.$slots["default"]?this.$slots["default"][0]:null},install:function(e){e.use(c.A),e.component(m.name,m)}},v=m,g=n(38377);function y(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t={};return e.forEach(function(e){t[e]=function(t){this._proxyVm._data[e]=t}}),t}var _={name:"AConfigProvider",props:{getPopupContainer:o.A.func,prefixCls:o.A.string,renderEmpty:o.A.func,csp:o.A.object,autoInsertSpaceInButton:o.A.bool,locale:o.A.object,pageHeader:o.A.object,transformCellText:o.A.func},provide:function(){var e=this;return this._proxyVm=new i.Ay({data:function(){return(0,r.A)({},e.$props,{getPrefixCls:e.getPrefixCls,renderEmpty:e.renderEmptyComponent})}}),{configProvider:this._proxyVm._data}},watch:(0,r.A)({},y(["prefixCls","csp","autoInsertSpaceInButton","locale","pageHeader","transformCellText"])),methods:{renderEmptyComponent:function(e,t){var n=(0,a.nu)(this,"renderEmpty",{},!1)||s.A;return n(e,t)},getPrefixCls:function(e,t){var n=this.$props.prefixCls,r=void 0===n?"ant":n;return t||(e?r+"-"+e:r)},renderProvider:function(e){var t=this.$createElement;return t(v,{attrs:{locale:this.locale||e,_ANT_MARK__:f}},[this.$slots["default"]?(0,a.Gk)(this.$slots["default"])[0]:null])}},render:function(){var e=this,t=arguments[0];return t(g.A,{scopedSlots:{default:function(t,n,r){return e.renderProvider(r)}}})},install:function(e){e.use(c.A),e.component(_.name,_)}},b=_},20761:function(e,t,n){"use strict";var r=n(4718),i=n(2970),o=n(25592),a={functional:!0,inject:{configProvider:{default:function(){return o.f}}},props:{componentName:r.A.string},render:function(e,t){var n=arguments[0],r=t.props,o=t.injections;function a(e){var t=o.configProvider.getPrefixCls,r=t("empty");switch(e){case"Table":case"List":return n(i.Ay,{attrs:{image:i.Ay.PRESENTED_IMAGE_SIMPLE}});case"Select":case"TreeSelect":case"Cascader":case"Transfer":case"Mentions":return n(i.Ay,{attrs:{image:i.Ay.PRESENTED_IMAGE_SIMPLE},class:r+"-small"});default:return n(i.Ay)}}return a(r.componentName)}};function s(e,t){return e(a,{attrs:{componentName:t}})}t.A=s},10682:function(){},60031:function(e,t,n){"use strict";n.d(t,{A:function(){return en}});var r=n(85505),i=n(85471),o=n(24415),a=n(4718),s=n(52315),c=n(15848),l=n(51927),u=n(11207),d=n(95093),h=n.n(d),f={DATE_ROW_COUNT:6,DATE_COL_COUNT:7},p={functional:!0,render:function(e,t){for(var n=arguments[0],r=t.props,i=r.value,o=i.localeData(),a=r.prefixCls,s=[],c=[],l=o.firstDayOfWeek(),u=void 0,d=h()(),p=0;pt.year()?1:e.year()===t.year()&&e.month()>t.month()}function D(e){return"rc-calendar-"+e.year()+"-"+e.month()+"-"+e.date()}var Y={props:{contentRender:a.A.func,dateRender:a.A.func,disabledDate:a.A.func,prefixCls:a.A.string,selectedValue:a.A.oneOfType([a.A.any,a.A.arrayOf(a.A.any)]),value:a.A.object,hoverValue:a.A.any.def([]),showWeekNumber:a.A.bool},render:function(){var e=arguments[0],t=(0,c.Oq)(this),n=t.contentRender,r=t.prefixCls,i=t.selectedValue,o=t.value,a=t.showWeekNumber,s=t.dateRender,l=t.disabledDate,u=t.hoverValue,d=(0,c.WM)(this),h=d.select,p=void 0===h?z:h,v=d.dayHover,y=void 0===v?z:v,M=void 0,A=void 0,w=void 0,x=[],k=_(o),L=r+"-cell",C=r+"-week-number-cell",S=r+"-date",Y=r+"-today",V=r+"-selected-day",P=r+"-selected-date",E=r+"-selected-start-date",j=r+"-selected-end-date",F=r+"-in-range-cell",I=r+"-last-month-cell",$=r+"-next-month-btn-day",R=r+"-disabled-cell",N=r+"-disabled-cell-first-of-row",W=r+"-disabled-cell-last-of-row",B=r+"-last-day-of-month",K=o.clone();K.date(1);var U=K.day(),q=(U+7-o.localeData().firstDayOfWeek())%7,G=K.clone();G.add(0-q,"days");var J=0;for(M=0;M0&&(ie=x[J-1]);var oe=L,ae=!1,se=!1;T(w,k)&&(oe+=" "+Y,Q=!0);var ce=O(w,o),le=H(w,o);if(i&&Array.isArray(i)){var ue=u.length?u:i;if(!ce&&!le){var de=ue[0],he=ue[1];de&&T(w,de)&&(se=!0,te=!0,oe+=" "+E),(de||he)&&(T(w,he)?(se=!0,te=!0,oe+=" "+j):(null!==de&&void 0!==de||!w.isBefore(he,"day"))&&(null!==he&&void 0!==he||!w.isAfter(de,"day"))?w.isAfter(de,"day")&&w.isBefore(he,"day")&&(oe+=" "+F):oe+=" "+F)}}else T(w,o)&&(se=!0,te=!0);T(w,i)&&(oe+=" "+P),ce&&(oe+=" "+I),le&&(oe+=" "+$),w.clone().endOf("month").date()===w.date()&&(oe+=" "+B),l&&l(w,o)&&(ae=!0,ie&&l(ie,o)||(oe+=" "+N),re&&l(re,o)||(oe+=" "+W)),se&&(oe+=" "+V),ae&&(oe+=" "+R);var fe=void 0;if(s)fe=s(w,o);else{var pe=n?n(w,o):w.date();fe=e("div",{key:D(w),class:S,attrs:{"aria-selected":se,"aria-disabled":ae}},[pe])}ne.push(e("td",{key:J,on:{click:ae?z:p.bind(null,w),mouseenter:ae?z:y.bind(null,w)},attrs:{role:"gridcell",title:b(w)},class:oe},[fe])),J++}X.push(e("tr",{key:M,attrs:{role:"row"},class:g()((Z={},(0,m.A)(Z,r+"-current-week",Q),(0,m.A)(Z,r+"-active-week",te),Z))},[ee,ne]))}return e("tbody",{class:r+"-tbody"},[X])}},V=Y,P={functional:!0,render:function(e,t){var n=arguments[0],r=t.props,i=t.listeners,o=void 0===i?{}:i,a=r.prefixCls,s={props:r,on:o};return n("table",{class:a+"-table",attrs:{cellSpacing:"0",role:"grid"}},[n(p,s),n(V,s)])}},E=4,j=3;function F(){}var I={name:"MonthTable",mixins:[s.A],props:{cellRender:a.A.func,prefixCls:a.A.string,value:a.A.object,locale:a.A.any,contentRender:a.A.any,disabledDate:a.A.func},data:function(){return{sValue:this.value}},watch:{value:function(e){this.setState({sValue:e})}},methods:{setAndSelectValue:function(e){this.setState({sValue:e}),this.__emit("select",e)},chooseMonth:function(e){var t=this.sValue.clone();t.month(e),this.setAndSelectValue(t)},months:function(){for(var e=this.sValue,t=e.clone(),n=[],r=0,i=0;id),i),c=q;return c=r.yeard?e.nextDecade:J.bind(e,r.year),t("td",{attrs:{role:"gridcell",title:r.title},key:r.content,on:{click:o?q:c},class:s},[t("a",{class:h+"-year"},[r.content])])});return t("tr",{key:i,attrs:{role:"row"}},[o])}),v=i&&i("year");return t("div",{class:h},[t("div",[t("div",{class:h+"-header"},[t("a",{class:h+"-prev-decade-btn",attrs:{role:"button",title:r.previousDecade},on:{click:this.previousDecade}}),t("a",{class:h+"-decade-select",attrs:{role:"button",title:r.decadeSelect},on:{click:a}},[t("span",{class:h+"-decade-select-content"},[u,"-",d]),t("span",{class:h+"-decade-select-arrow"},["x"])]),t("a",{class:h+"-next-decade-btn",attrs:{role:"button",title:r.nextDecade},on:{click:this.nextDecade}})]),t("div",{class:h+"-body"},[t("table",{class:h+"-table",attrs:{cellSpacing:"0",role:"grid"}},[t("tbody",{class:h+"-tbody"},[p])])]),v&&t("div",{class:h+"-footer"},[v])])])}},Z=4,Q=3;function ee(){}function te(e){var t=this.sValue.clone();t.add(e,"years"),this.setState({sValue:t})}function ne(e,t){var n=this.sValue.clone();n.year(e),n.month(this.sValue.month()),this.__emit("select",n),t.preventDefault()}var re={mixins:[s.A],props:{locale:a.A.object,value:a.A.object,defaultValue:a.A.object,rootPrefixCls:a.A.string,renderFooter:a.A.func},data:function(){return this.nextCentury=te.bind(this,100),this.previousCentury=te.bind(this,-100),{sValue:this.value||this.defaultValue}},watch:{value:function(e){this.sValue=e}},render:function(){for(var e=this,t=arguments[0],n=this.sValue,r=this.$props,i=r.locale,o=r.renderFooter,a=n.year(),s=100*parseInt(a/100,10),c=s-10,l=s+99,u=[],d=0,h=this.rootPrefixCls+"-decade-panel",f=0;fl,d=(r={},(0,m.A)(r,h+"-cell",1),(0,m.A)(r,h+"-selected-cell",i<=a&&a<=o),(0,m.A)(r,h+"-last-century-cell",c),(0,m.A)(r,h+"-next-century-cell",u),r),f=i+"-"+o,p=ee;return p=c?e.previousCentury:u?e.nextCentury:ne.bind(e,i),t("td",{key:i,on:{click:p},attrs:{role:"gridcell"},class:d},[t("a",{class:h+"-decade"},[f])])});return t("tr",{key:r,attrs:{role:"row"}},[i])});return t("div",{class:h},[t("div",{class:h+"-header"},[t("a",{class:h+"-prev-century-btn",attrs:{role:"button",title:i.previousCentury},on:{click:this.previousCentury}}),t("div",{class:h+"-century"},[s,"-",l]),t("a",{class:h+"-next-century-btn",attrs:{role:"button",title:i.nextCentury},on:{click:this.nextCentury}})]),t("div",{class:h+"-body"},[t("table",{class:h+"-table",attrs:{cellSpacing:"0",role:"grid"}},[t("tbody",{class:h+"-tbody"},[_])])]),y&&t("div",{class:h+"-footer"},[y])])}};function ie(){}function oe(e){var t=this.value.clone();t.add(e,"months"),this.__emit("valueChange",t)}function ae(e){var t=this.value.clone();t.add(e,"years"),this.__emit("valueChange",t)}function se(e,t){return e?t:null}var ce={name:"CalendarHeader",mixins:[s.A],props:{prefixCls:a.A.string,value:a.A.object,showTimePicker:a.A.bool,locale:a.A.object,enablePrev:a.A.any.def(1),enableNext:a.A.any.def(1),disabledMonth:a.A.func,mode:a.A.any,monthCellRender:a.A.func,monthCellContentRender:a.A.func,renderFooter:a.A.func},data:function(){return this.nextMonth=oe.bind(this,1),this.previousMonth=oe.bind(this,-1),this.nextYear=ae.bind(this,1),this.previousYear=ae.bind(this,-1),{yearPanelReferer:null}},methods:{onMonthSelect:function(e){this.__emit("panelChange",e,"date"),(0,c.WM)(this).monthSelect?this.__emit("monthSelect",e):this.__emit("valueChange",e)},onYearSelect:function(e){var t=this.yearPanelReferer;this.setState({yearPanelReferer:null}),this.__emit("panelChange",e,t),this.__emit("valueChange",e)},onDecadeSelect:function(e){this.__emit("panelChange",e,"year"),this.__emit("valueChange",e)},changeYear:function(e){e>0?this.nextYear():this.previousYear()},monthYearElement:function(e){var t=this,n=this.$createElement,r=this.$props,i=r.prefixCls,o=r.locale,a=r.value,s=a.localeData(),c=o.monthBeforeYear,l=i+"-"+(c?"my-select":"ym-select"),u=e?" "+i+"-time-status":"",d=n("a",{class:i+"-year-select"+u,attrs:{role:"button",title:e?null:o.yearSelect},on:{click:e?ie:function(){return t.showYearPanel("date")}}},[a.format(o.yearFormat)]),h=n("a",{class:i+"-month-select"+u,attrs:{role:"button",title:e?null:o.monthSelect},on:{click:e?ie:this.showMonthPanel}},[o.monthFormat?a.format(o.monthFormat):s.monthsShort(a)]),f=void 0;e&&(f=n("a",{class:i+"-day-select"+u,attrs:{role:"button"}},[a.format(o.dayFormat)]));var p=[];return p=c?[h,f,d]:[d,h,f],n("span",{class:l},[p])},showMonthPanel:function(){this.__emit("panelChange",null,"month")},showYearPanel:function(e){this.setState({yearPanelReferer:e}),this.__emit("panelChange",null,"year")},showDecadePanel:function(){this.__emit("panelChange",null,"decade")}},render:function(){var e=this,t=arguments[0],n=(0,c.Oq)(this),r=n.prefixCls,i=n.locale,o=n.mode,a=n.value,s=n.showTimePicker,l=n.enableNext,u=n.enablePrev,d=n.disabledMonth,h=n.renderFooter,f=null;return"month"===o&&(f=t(B,{attrs:{locale:i,value:a,rootPrefixCls:r,disabledDate:d,cellRender:n.monthCellRender,contentRender:n.monthCellContentRender,renderFooter:h,changeYear:this.changeYear},on:{select:this.onMonthSelect,yearPanelShow:function(){return e.showYearPanel("month")}}})),"year"===o&&(f=t(X,{attrs:{locale:i,value:a,rootPrefixCls:r,renderFooter:h,disabledDate:d},on:{select:this.onYearSelect,decadePanelShow:this.showDecadePanel}})),"decade"===o&&(f=t(re,{attrs:{locale:i,value:a,rootPrefixCls:r,renderFooter:h},on:{select:this.onDecadeSelect}})),t("div",{class:r+"-header"},[t("div",{style:{position:"relative"}},[se(u&&!s,t("a",{class:r+"-prev-year-btn",attrs:{role:"button",title:i.previousYear},on:{click:this.previousYear}})),se(u&&!s,t("a",{class:r+"-prev-month-btn",attrs:{role:"button",title:i.previousMonth},on:{click:this.previousMonth}})),this.monthYearElement(s),se(l&&!s,t("a",{class:r+"-next-month-btn",on:{click:this.nextMonth},attrs:{title:i.nextMonth}})),se(l&&!s,t("a",{class:r+"-next-year-btn",on:{click:this.nextYear},attrs:{title:i.nextYear}}))]),f])}},le=ce,ue=n(75189),de=n.n(ue);function he(){}var fe={functional:!0,render:function(e,t){var n=arguments[0],r=t.props,i=t.listeners,o=void 0===i?{}:i,a=r.prefixCls,s=r.locale,c=r.value,l=r.timePicker,u=r.disabled,d=r.disabledDate,h=r.text,f=o.today,p=void 0===f?he:f,m=(!h&&l?s.now:h)||s.today,v=d&&!C(_(c),d),g=v||u,y=g?a+"-today-btn-disabled":"";return n("a",{class:a+"-today-btn "+y,attrs:{role:"button",title:M(c)},on:{click:g?he:p}},[m])}};function pe(){}var me={functional:!0,render:function(e,t){var n=arguments[0],r=t.props,i=t.listeners,o=void 0===i?{}:i,a=r.prefixCls,s=r.locale,c=r.okDisabled,l=o.ok,u=void 0===l?pe:l,d=a+"-ok-btn";return c&&(d+=" "+a+"-ok-btn-disabled"),n("a",{class:d,attrs:{role:"button"},on:{click:c?pe:u}},[s.ok])}};function ve(){}var ge={functional:!0,render:function(e,t){var n,r=t.props,i=t.listeners,o=void 0===i?{}:i,a=r.prefixCls,s=r.locale,c=r.showTimePicker,l=r.timePickerDisabled,u=o.closeTimePicker,d=void 0===u?ve:u,h=o.openTimePicker,f=void 0===h?ve:h,p=(n={},(0,m.A)(n,a+"-time-picker-btn",!0),(0,m.A)(n,a+"-time-picker-btn-disabled",l),n),v=ve;return l||(v=c?d:f),e("a",{class:p,attrs:{role:"button"},on:{click:v}},[c?s.dateSelect:s.timeSelect])}},ye={mixins:[s.A],props:{prefixCls:a.A.string,showDateInput:a.A.bool,disabledTime:a.A.any,timePicker:a.A.any,selectedValue:a.A.any,showOk:a.A.bool,value:a.A.object,renderFooter:a.A.func,defaultValue:a.A.object,locale:a.A.object,showToday:a.A.bool,disabledDate:a.A.func,showTimePicker:a.A.bool,okDisabled:a.A.bool,mode:a.A.string},methods:{onSelect:function(e){this.__emit("select",e)},getRootDOMNode:function(){return this.$el}},render:function(){var e=arguments[0],t=(0,c.Oq)(this),n=t.value,i=t.prefixCls,o=t.showOk,a=t.timePicker,s=t.renderFooter,l=t.showToday,u=t.mode,d=null,h=s&&s(u);if(l||a||h){var f,p={props:(0,r.A)({},t,{value:n}),on:(0,c.WM)(this)},v=null;l&&(v=e(fe,de()([{key:"todayButton"},p]))),delete p.props.value;var g=null;(!0===o||!1!==o&&a)&&(g=e(me,de()([{key:"okButton"},p])));var y=null;a&&(y=e(ge,de()([{key:"timePickerButton"},p])));var _=void 0;(v||y||g||h)&&(_=e("span",{class:i+"-footer-btn"},[h,v,y,g]));var b=(f={},(0,m.A)(f,i+"-footer",!0),(0,m.A)(f,i+"-footer-show-ok",!!g),f);d=e("div",{class:b},[_])}return d}},_e=ye;function be(){}function Me(e){var t=void 0;return t=e?_(e):h()(),t}function Ae(e){return Array.isArray(e)?0===e.length||-1!==e.findIndex(function(e){return void 0===e||h().isMoment(e)}):void 0===e||h().isMoment(e)}var we=a.A.custom(Ae),xe={mixins:[s.A],name:"CalendarMixinWrapper",props:{value:we,defaultValue:we},data:function(){var e=this.$props,t=e.value||e.defaultValue||Me();return{sValue:t,sSelectedValue:e.selectedValue||e.defaultSelectedValue}},watch:{value:function(e){var t=e||this.defaultValue||Me(this.sValue);this.setState({sValue:t})},selectedValue:function(e){this.setState({sSelectedValue:e})}},methods:{onSelect:function(e,t){e&&this.setValue(e),this.setSelectedValue(e,t)},renderRoot:function(e){var t,n=this.$createElement,r=this.$props,i=r.prefixCls,o=(t={},(0,m.A)(t,i,1),(0,m.A)(t,i+"-hidden",!r.visible),(0,m.A)(t,e["class"],!!e["class"]),t);return n("div",{ref:"rootInstance",class:o,attrs:{tabIndex:"0"},on:{keydown:this.onKeyDown||be,blur:this.onBlur||be}},[e.children])},setSelectedValue:function(e,t){(0,c.cK)(this,"selectedValue")||this.setState({sSelectedValue:e}),this.__emit("select",e,t)},setValue:function(e){var t=this.sValue;(0,c.cK)(this,"value")||this.setState({sValue:e}),(t&&e&&!t.isSame(e)||!t&&e||t&&!e)&&this.__emit("change",e)},isAllowedDate:function(e){var t=this.disabledDate,n=this.disabledTime;return C(e,t,n)}}},ke=xe,Le={methods:{getFormat:function(){var e=this.format,t=this.locale,n=this.timePicker;return e||(e=n?t.dateTimeFormat:t.dateFormat),e},focus:function(){this.focusElement?this.focusElement.focus():this.$refs.rootInstance&&this.$refs.rootInstance.focus()},saveFocusElement:function(e){this.focusElement=e}}},Ce=void 0,Se=void 0,ze=void 0,Te={mixins:[s.A],props:{prefixCls:a.A.string,timePicker:a.A.object,value:a.A.object,disabledTime:a.A.any,format:a.A.oneOfType([a.A.string,a.A.arrayOf(a.A.string),a.A.func]),locale:a.A.object,disabledDate:a.A.func,placeholder:a.A.string,selectedValue:a.A.object,clearIcon:a.A.any,inputMode:a.A.string,inputReadOnly:a.A.bool},data:function(){var e=this.selectedValue;return{str:S(e,this.format),invalid:!1,hasFocus:!1}},watch:{selectedValue:function(){this.setState()},format:function(){this.setState()}},updated:function(){var e=this;this.$nextTick(function(){!ze||!e.$data.hasFocus||e.invalid||0===Ce&&0===Se||ze.setSelectionRange(Ce,Se)})},getInstance:function(){return ze},methods:{getDerivedStateFromProps:function(e,t){var n={};ze&&(Ce=ze.selectionStart,Se=ze.selectionEnd);var r=e.selectedValue;return t.hasFocus||(n={str:S(r,this.format),invalid:!1}),n},onClear:function(){this.setState({str:""}),this.__emit("clear",null)},onInputChange:function(e){var t=e.target,n=t.value,r=t.composing,i=this.str,o=void 0===i?"":i;if(!e.isComposing&&!r&&o!==n){var a=this.$props,s=a.disabledDate,c=a.format,l=a.selectedValue;if(!n)return this.__emit("change",null),void this.setState({invalid:!1,str:n});var u=h()(n,c,!0);if(u.isValid()){var d=this.value.clone();d.year(u.year()).month(u.month()).date(u.date()).hour(u.hour()).minute(u.minute()).second(u.second()),!d||s&&s(d)?this.setState({invalid:!0,str:n}):(l!==d||l&&d&&!l.isSame(d))&&(this.setState({invalid:!1,str:n}),this.__emit("change",d))}else this.setState({invalid:!0,str:n})}},onFocus:function(){this.setState({hasFocus:!0})},onBlur:function(){this.setState(function(e,t){return{hasFocus:!1,str:S(t.value,t.format)}})},onKeyDown:function(e){var t=e.keyCode,n=this.$props,r=n.value,i=n.disabledDate;if(t===u.A.ENTER){var o=!i||!i(r);o&&this.__emit("select",r.clone()),e.preventDefault()}},getRootDOMNode:function(){return this.$el},focus:function(){ze&&ze.focus()},saveDateInput:function(e){ze=e}},render:function(){var e=arguments[0],t=this.invalid,n=this.str,r=this.locale,i=this.prefixCls,o=this.placeholder,a=this.disabled,s=this.showClear,l=this.inputMode,u=this.inputReadOnly,d=(0,c.nu)(this,"clearIcon"),h=t?i+"-input-invalid":"";return e("div",{class:i+"-input-wrap"},[e("div",{class:i+"-date-input-wrap"},[e("input",de()([{directives:[{name:"ant-ref",value:this.saveDateInput},{name:"ant-input"}]},{class:i+"-input "+h,domProps:{value:n},attrs:{disabled:a,placeholder:o,inputMode:l,readOnly:u},on:{input:this.onInputChange,keydown:this.onKeyDown,focus:this.onFocus,blur:this.onBlur}}]))]),s?e("a",{attrs:{role:"button",title:r.clear},on:{click:this.onClear}},[d||e("span",{class:i+"-clear-btn"})]):null])}},Oe=Te,He=n(99876);function De(e){return e.clone().startOf("month")}function Ye(e){return e.clone().endOf("month")}function Ve(e,t,n){return e.clone().add(t,n)}function Pe(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n=arguments[2];return e.some(function(e){return e.isSame(t,n)})}var Ee=function(e){return!(!h().isMoment(e)||!e.isValid())&&e},je={name:"Calendar",props:{locale:a.A.object.def(He.A),format:a.A.oneOfType([a.A.string,a.A.arrayOf(a.A.string),a.A.func]),visible:a.A.bool.def(!0),prefixCls:a.A.string.def("rc-calendar"),defaultValue:a.A.object,value:a.A.object,selectedValue:a.A.object,defaultSelectedValue:a.A.object,mode:a.A.oneOf(["time","date","month","year","decade"]),showDateInput:a.A.bool.def(!0),showWeekNumber:a.A.bool,showToday:a.A.bool.def(!0),showOk:a.A.bool,timePicker:a.A.any,dateInputPlaceholder:a.A.any,disabledDate:a.A.func,disabledTime:a.A.any,dateRender:a.A.func,renderFooter:a.A.func.def(function(){return null}),renderSidebar:a.A.func.def(function(){return null}),clearIcon:a.A.any,focusablePanel:a.A.bool.def(!0),inputMode:a.A.string,inputReadOnly:a.A.bool},mixins:[s.A,Le,ke],data:function(){var e=this.$props;return{sMode:this.mode||"date",sValue:Ee(e.value)||Ee(e.defaultValue)||h()(),sSelectedValue:e.selectedValue||e.defaultSelectedValue}},watch:{mode:function(e){this.setState({sMode:e})},value:function(e){this.setState({sValue:Ee(e)||Ee(this.defaultValue)||Me(this.sValue)})},selectedValue:function(e){this.setState({sSelectedValue:e})}},mounted:function(){var e=this;this.$nextTick(function(){e.saveFocusElement(Oe.getInstance())})},methods:{onPanelChange:function(e,t){var n=this.sValue;(0,c.cK)(this,"mode")||this.setState({sMode:t}),this.__emit("panelChange",e||n,t)},onKeyDown:function(e){if("input"!==e.target.nodeName.toLowerCase()){var t=e.keyCode,n=e.ctrlKey||e.metaKey,r=this.disabledDate,i=this.sValue;switch(t){case u.A.DOWN:return this.goTime(1,"weeks"),e.preventDefault(),1;case u.A.UP:return this.goTime(-1,"weeks"),e.preventDefault(),1;case u.A.LEFT:return n?this.goTime(-1,"years"):this.goTime(-1,"days"),e.preventDefault(),1;case u.A.RIGHT:return n?this.goTime(1,"years"):this.goTime(1,"days"),e.preventDefault(),1;case u.A.HOME:return this.setValue(De(i)),e.preventDefault(),1;case u.A.END:return this.setValue(Ye(i)),e.preventDefault(),1;case u.A.PAGE_DOWN:return this.goTime(1,"month"),e.preventDefault(),1;case u.A.PAGE_UP:return this.goTime(-1,"month"),e.preventDefault(),1;case u.A.ENTER:return r&&r(i)||this.onSelect(i,{source:"keyboard"}),e.preventDefault(),1;default:return this.__emit("keydown",e),1}}},onClear:function(){this.onSelect(null),this.__emit("clear")},onOk:function(){var e=this.sSelectedValue;this.isAllowedDate(e)&&this.__emit("ok",e)},onDateInputChange:function(e){this.onSelect(e,{source:"dateInput"})},onDateInputSelect:function(e){this.onSelect(e,{source:"dateInputSelect"})},onDateTableSelect:function(e){var t=this.timePicker,n=this.sSelectedValue;if(!n&&t){var r=(0,c.Oq)(t),i=r.defaultValue;i&&w(i,e)}this.onSelect(e)},onToday:function(){var e=this.sValue,t=_(e);this.onSelect(t,{source:"todayButton"})},onBlur:function(e){var t=this;setTimeout(function(){var n=Oe.getInstance(),r=t.rootInstance;!r||r.contains(document.activeElement)||n&&n.contains(document.activeElement)||t.$emit("blur",e)},0)},getRootDOMNode:function(){return this.$el},openTimePicker:function(){this.onPanelChange(null,"time")},closeTimePicker:function(){this.onPanelChange(null,"date")},goTime:function(e,t){this.setValue(Ve(this.sValue,e,t))}},render:function(){var e=arguments[0],t=this.locale,n=this.prefixCls,i=this.disabledDate,o=this.dateInputPlaceholder,a=this.timePicker,s=this.disabledTime,u=this.showDateInput,d=this.sValue,h=this.sSelectedValue,f=this.sMode,p=this.renderFooter,m=this.inputMode,v=this.inputReadOnly,g=this.monthCellRender,y=this.monthCellContentRender,_=this.$props,b=(0,c.nu)(this,"clearIcon"),M="time"===f,A=M&&s&&a?x(h,s):null,w=null;if(a&&M){var k=(0,c.Oq)(a),L={props:(0,r.A)({showHour:!0,showSecond:!0,showMinute:!0},k,A,{value:h,disabledTime:s}),on:{change:this.onDateInputChange}};void 0!==k.defaultValue&&(L.props.defaultOpenValue=k.defaultValue),w=(0,l.Ob)(a,L)}var C=u?e(Oe,{attrs:{format:this.getFormat(),value:d,locale:t,placeholder:o,showClear:!0,disabledTime:s,disabledDate:i,prefixCls:n,selectedValue:h,clearIcon:b,inputMode:m,inputReadOnly:v},key:"date-input",on:{clear:this.onClear,change:this.onDateInputChange,select:this.onDateInputSelect}}):null,S=[];return _.renderSidebar&&S.push(_.renderSidebar()),S.push(e("div",{class:n+"-panel",key:"panel"},[C,e("div",{attrs:{tabIndex:_.focusablePanel?0:void 0},class:n+"-date-panel"},[e(le,{attrs:{locale:t,mode:f,value:d,disabledMonth:i,renderFooter:p,showTimePicker:M,prefixCls:n,monthCellRender:g,monthCellContentRender:y},on:{valueChange:this.setValue,panelChange:this.onPanelChange}}),a&&M?e("div",{class:n+"-time-picker"},[e("div",{class:n+"-time-picker-panel"},[w])]):null,e("div",{class:n+"-body"},[e(P,{attrs:{locale:t,value:d,selectedValue:h,prefixCls:n,dateRender:_.dateRender,disabledDate:i,showWeekNumber:_.showWeekNumber},on:{select:this.onDateTableSelect}})]),e(_e,{attrs:{showOk:_.showOk,mode:f,renderFooter:_.renderFooter,locale:t,prefixCls:n,showToday:_.showToday,disabledTime:s,showTimePicker:M,showDateInput:_.showDateInput,timePicker:a,selectedValue:h,timePickerDisabled:!h,value:d,disabledDate:i,okDisabled:!1!==_.showOk&&(!h||!this.isAllowedDate(h))},on:{ok:this.onOk,select:this.onSelect,today:this.onToday,openTimePicker:this.openTimePicker,closeTimePicker:this.closeTimePicker}})])])),this.renderRoot({children:S,class:_.showWeekNumber?n+"-week-number":""})}},Fe=je,Ie=Fe;i.Ay.use(o.A,{name:"ant-ref"});var $e=Ie,Re={name:"MonthCalendar",props:{locale:a.A.object.def(He.A),format:a.A.string,visible:a.A.bool.def(!0),prefixCls:a.A.string.def("rc-calendar"),monthCellRender:a.A.func,value:a.A.object,defaultValue:a.A.object,selectedValue:a.A.object,defaultSelectedValue:a.A.object,disabledDate:a.A.func,monthCellContentRender:a.A.func,renderFooter:a.A.func.def(function(){return null}),renderSidebar:a.A.func.def(function(){return null})},mixins:[s.A,Le,ke],data:function(){var e=this.$props;return{mode:"month",sValue:e.value||e.defaultValue||h()(),sSelectedValue:e.selectedValue||e.defaultSelectedValue}},methods:{onKeyDown:function(e){var t=e.keyCode,n=e.ctrlKey||e.metaKey,r=this.sValue,i=this.disabledDate,o=r;switch(t){case u.A.DOWN:o=r.clone(),o.add(3,"months");break;case u.A.UP:o=r.clone(),o.add(-3,"months");break;case u.A.LEFT:o=r.clone(),n?o.add(-1,"years"):o.add(-1,"months");break;case u.A.RIGHT:o=r.clone(),n?o.add(1,"years"):o.add(1,"months");break;case u.A.ENTER:return i&&i(r)||this.onSelect(r),e.preventDefault(),1;default:return}if(o!==r)return this.setValue(o),e.preventDefault(),1},handlePanelChange:function(e,t){"date"!==t&&this.setState({mode:t})}},render:function(){var e=arguments[0],t=this.mode,n=this.sValue,r=this.$props,i=this.$scopedSlots,o=r.prefixCls,a=r.locale,s=r.disabledDate,c=this.monthCellRender||i.monthCellRender,l=this.monthCellContentRender||i.monthCellContentRender,u=this.renderFooter||i.renderFooter,d=e("div",{class:o+"-month-calendar-content"},[e("div",{class:o+"-month-header-wrap"},[e(le,{attrs:{prefixCls:o,mode:t,value:n,locale:a,disabledMonth:s,monthCellRender:c,monthCellContentRender:l},on:{monthSelect:this.onSelect,valueChange:this.setValue,panelChange:this.handlePanelChange}})]),e(_e,{attrs:{prefixCls:o,renderFooter:u}})]);return this.renderRoot({class:r.prefixCls+"-month-calendar",children:d})}},Ne=Re,We=n(90179),Be=n.n(We),Ke=n(51129),Ue={adjustX:1,adjustY:1},qe=[0,0],Ge={bottomLeft:{points:["tl","tl"],overflow:Ue,offset:[0,-3],targetOffset:qe},bottomRight:{points:["tr","tr"],overflow:Ue,offset:[0,-3],targetOffset:qe},topRight:{points:["br","br"],overflow:Ue,offset:[0,3],targetOffset:qe},topLeft:{points:["bl","bl"],overflow:Ue,offset:[0,3],targetOffset:qe}},Je=Ge,Xe=n(47006),Ze=n(69843),Qe=n.n(Ze),et={validator:function(e){return Array.isArray(e)?0===e.length||-1===e.findIndex(function(e){return!Qe()(e)&&!h().isMoment(e)}):Qe()(e)||h().isMoment(e)}},tt={name:"Picker",props:{animation:a.A.oneOfType([a.A.func,a.A.string]),disabled:a.A.bool,transitionName:a.A.string,format:a.A.oneOfType([a.A.string,a.A.array,a.A.func]),children:a.A.func,getCalendarContainer:a.A.func,calendar:a.A.any,open:a.A.bool,defaultOpen:a.A.bool.def(!1),prefixCls:a.A.string.def("rc-calendar-picker"),placement:a.A.any.def("bottomLeft"),value:et,defaultValue:et,align:a.A.object.def(function(){return{}}),dropdownClassName:a.A.string,dateRender:a.A.func},mixins:[s.A],data:function(){var e=this.$props,t=void 0;t=(0,c.cK)(this,"open")?e.open:e.defaultOpen;var n=e.value||e.defaultValue;return{sOpen:t,sValue:n}},watch:{value:function(e){this.setState({sValue:e})},open:function(e){this.setState({sOpen:e})}},mounted:function(){this.preSOpen=this.sOpen},updated:function(){!this.preSOpen&&this.sOpen&&(this.focusTimeout=setTimeout(this.focusCalendar,0)),this.preSOpen=this.sOpen},beforeDestroy:function(){clearTimeout(this.focusTimeout)},methods:{onCalendarKeyDown:function(e){e.keyCode===u.A.ESC&&(e.stopPropagation(),this.closeCalendar(this.focus))},onCalendarSelect:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.$props;(0,c.cK)(this,"value")||this.setState({sValue:e});var r=(0,c.Oq)(n.calendar);("keyboard"===t.source||"dateInputSelect"===t.source||!r.timePicker&&"dateInput"!==t.source||"todayButton"===t.source)&&this.closeCalendar(this.focus),this.__emit("change",e)},onKeyDown:function(e){this.sOpen||e.keyCode!==u.A.DOWN&&e.keyCode!==u.A.ENTER||(this.openCalendar(),e.preventDefault())},onCalendarOk:function(){this.closeCalendar(this.focus)},onCalendarClear:function(){this.closeCalendar(this.focus)},onCalendarBlur:function(){this.setOpen(!1)},onVisibleChange:function(e){this.setOpen(e)},getCalendarElement:function(){var e=this.$props,t=(0,c.Oq)(e.calendar),n=(0,c.kQ)(e.calendar),r=this.sValue,i=r,o={ref:"calendarInstance",props:{defaultValue:i||t.defaultValue,selectedValue:r},on:{keydown:this.onCalendarKeyDown,ok:(0,Ke.A)(n.ok,this.onCalendarOk),select:(0,Ke.A)(n.select,this.onCalendarSelect),clear:(0,Ke.A)(n.clear,this.onCalendarClear),blur:(0,Ke.A)(n.blur,this.onCalendarBlur)}};return(0,l.Ob)(e.calendar,o)},setOpen:function(e,t){this.sOpen!==e&&((0,c.cK)(this,"open")||this.setState({sOpen:e},t),this.__emit("openChange",e))},openCalendar:function(e){this.setOpen(!0,e)},closeCalendar:function(e){this.setOpen(!1,e)},focus:function(){this.sOpen||this.$el.focus()},focusCalendar:function(){this.sOpen&&this.calendarInstance&&this.calendarInstance.componentInstance&&this.calendarInstance.componentInstance.focus()}},render:function(){var e=arguments[0],t=(0,c.Oq)(this),n=(0,c.gd)(this),r=t.prefixCls,i=t.placement,o=t.getCalendarContainer,a=t.align,s=t.animation,u=t.disabled,d=t.dropdownClassName,h=t.transitionName,f=this.sValue,p=this.sOpen,m=this.$scopedSlots["default"],v={value:f,open:p};return!this.sOpen&&this.calendarInstance||(this.calendarInstance=this.getCalendarElement()),e(Xe.A,{attrs:{popupAlign:a,builtinPlacements:Je,popupPlacement:i,action:u&&!p?[]:["click"],destroyPopupOnHide:!0,getPopupContainer:o,popupStyle:n,popupAnimation:s,popupTransitionName:h,popupVisible:p,prefixCls:r,popupClassName:d},on:{popupVisibleChange:this.onVisibleChange}},[e("template",{slot:"popup"},[this.calendarInstance]),(0,l.Ob)(m(v,t),{on:{keydown:this.onKeyDown}})])}},nt=tt,rt=n(40255),it=n(25592),ot=n(67287);function at(e,t){if(!e)return"";if(Array.isArray(t)&&(t=t[0]),"function"===typeof t){var n=t(e);if("string"===typeof n)return n;throw new Error("The function of format does not return a string")}return e.format(t)}function st(){}function ct(e,t){return{props:(0,c.CB)(t,{allowClear:!0,showToday:!0}),mixins:[s.A],model:{prop:"value",event:"change"},inject:{configProvider:{default:function(){return it.f}}},data:function(){var e=this.value||this.defaultValue;if(e&&!(0,ot.A)(d).isMoment(e))throw new Error("The value/defaultValue of DatePicker or MonthPicker must be a moment object");return{sValue:e,showDate:e,_open:!!this.open}},watch:{open:function(e){var t=(0,c.Oq)(this),n={};n._open=e,"value"in t&&!e&&t.value!==this.showDate&&(n.showDate=t.value),this.setState(n)},value:function(e){var t={};t.sValue=e,e!==this.sValue&&(t.showDate=e),this.setState(t)},_open:function(e,t){var n=this;this.$nextTick(function(){(0,c.cK)(n,"open")||!t||e||n.focus()})}},methods:{clearSelection:function(e){e.preventDefault(),e.stopPropagation(),this.handleChange(null)},handleChange:function(e){(0,c.cK)(this,"value")||this.setState({sValue:e,showDate:e}),this.$emit("change",e,at(e,this.format))},handleCalendarChange:function(e){this.setState({showDate:e})},handleOpenChange:function(e){var t=(0,c.Oq)(this);"open"in t||this.setState({_open:e}),this.$emit("openChange",e)},focus:function(){this.$refs.input.focus()},blur:function(){this.$refs.input.blur()},renderFooter:function(){var e=this.$createElement,t=this.$scopedSlots,n=this.$slots,r=this._prefixCls,i=this.renderExtraFooter||t.renderExtraFooter||n.renderExtraFooter;return i?e("div",{class:r+"-footer-extra"},["function"===typeof i?i.apply(void 0,arguments):i]):null},onMouseEnter:function(e){this.$emit("mouseenter",e)},onMouseLeave:function(e){this.$emit("mouseleave",e)}},render:function(){var t,n=this,i=arguments[0],o=this.$scopedSlots,a=this.$data,s=a.sValue,u=a.showDate,h=a._open,f=(0,c.nu)(this,"suffixIcon");f=Array.isArray(f)?f[0]:f;var p=(0,c.WM)(this),v=p.panelChange,y=void 0===v?st:v,_=p.focus,b=void 0===_?st:_,M=p.blur,A=void 0===M?st:M,w=p.ok,x=void 0===w?st:w,k=(0,c.Oq)(this),L=k.prefixCls,C=k.locale,S=k.localeCode,z=k.inputReadOnly,T=this.configProvider.getPrefixCls,O=T("calendar",L);this._prefixCls=O;var H=k.dateRender||o.dateRender,D=k.monthCellContentRender||o.monthCellContentRender,Y="placeholder"in k?k.placeholder:C.lang.placeholder,V=k.showTime?k.disabledTime:null,P=g()((t={},(0,m.A)(t,O+"-time",k.showTime),(0,m.A)(t,O+"-month",Ne===e),t));s&&S&&s.locale(S);var E={props:{},on:{}},j={props:{},on:{}},F={};k.showTime?(j.on.select=this.handleChange,F.minWidth="195px"):E.on.change=this.handleChange,"mode"in k&&(j.props.mode=k.mode);var I=(0,c.v6)(j,{props:{disabledDate:k.disabledDate,disabledTime:V,locale:C.lang,timePicker:k.timePicker,defaultValue:k.defaultPickerValue||(0,ot.A)(d)(),dateInputPlaceholder:Y,prefixCls:O,dateRender:H,format:k.format,showToday:k.showToday,monthCellContentRender:D,renderFooter:this.renderFooter,value:u,inputReadOnly:z},on:{ok:x,panelChange:y,change:this.handleCalendarChange},class:P,scopedSlots:o}),$=i(e,I),R=!k.disabled&&k.allowClear&&s?i(rt.A,{attrs:{type:"close-circle",theme:"filled"},class:O+"-picker-clear",on:{click:this.clearSelection}}):null,N=f&&((0,c.zO)(f)?(0,l.Ob)(f,{class:O+"-picker-icon"}):i("span",{class:O+"-picker-icon"},[f]))||i(rt.A,{attrs:{type:"calendar"},class:O+"-picker-icon"}),W=function(e){var t=e.value;return i("div",[i("input",{ref:"input",attrs:{disabled:k.disabled,readOnly:!0,placeholder:Y,tabIndex:k.tabIndex,name:n.name},on:{focus:b,blur:A},domProps:{value:at(t,n.format)},class:k.pickerInputClass}),R,N])},B={props:(0,r.A)({},k,E.props,{calendar:$,value:s,prefixCls:O+"-picker-container"}),on:(0,r.A)({},Be()(p,"change"),E.on,{open:h,onOpenChange:this.handleOpenChange}),style:k.popupStyle,scopedSlots:(0,r.A)({default:W},o)};return i("span",{class:k.pickerClass,style:F,on:{mouseenter:this.onMouseEnter,mouseleave:this.onMouseLeave}},[i(nt,B)])}}}var lt=n(7772),ut=n(38377),dt=n(83766),ht=n(69656),ft=n(6566),pt={date:"YYYY-MM-DD",dateTime:"YYYY-MM-DD HH:mm:ss",week:"gggg-wo",month:"YYYY-MM"},mt={date:"dateFormat",dateTime:"dateTimeFormat",week:"weekFormat",month:"monthFormat"};function vt(e){var t=e.showHour,n=e.showMinute,r=e.showSecond,i=e.use12Hours,o=0;return t&&(o+=1),n&&(o+=1),r&&(o+=1),i&&(o+=1),o}function gt(e,t,n){return{name:e.name,props:(0,c.CB)(t,{transitionName:"slide-up",popupStyle:{},locale:{}}),model:{prop:"value",event:"change"},inject:{configProvider:{default:function(){return it.f}}},provide:function(){return{savePopupRef:this.savePopupRef}},mounted:function(){var e=this,t=this.autoFocus,n=this.disabled,r=this.value,i=this.defaultValue,o=this.valueFormat;(0,ft.n1)("DatePicker",i,"defaultValue",o),(0,ft.n1)("DatePicker",r,"value",o),t&&!n&&this.$nextTick(function(){e.focus()})},watch:{value:function(e){(0,ft.n1)("DatePicker",e,"value",this.valueFormat)}},methods:{getDefaultLocale:function(){var e=(0,r.A)({},ht.A,this.locale);return e.lang=(0,r.A)({},e.lang,(this.locale||{}).lang),e},savePopupRef:function(e){this.popupRef=e},handleOpenChange:function(e){this.$emit("openChange",e)},handleFocus:function(e){this.$emit("focus",e)},handleBlur:function(e){this.$emit("blur",e)},handleMouseEnter:function(e){this.$emit("mouseenter",e)},handleMouseLeave:function(e){this.$emit("mouseleave",e)},handleChange:function(e,t){this.$emit("change",this.valueFormat?(0,ft.pK)(e,this.valueFormat):e,t)},handleOk:function(e){this.$emit("ok",this.valueFormat?(0,ft.pK)(e,this.valueFormat):e)},handleCalendarChange:function(e,t){this.$emit("calendarChange",this.valueFormat?(0,ft.pK)(e,this.valueFormat):e,t)},focus:function(){this.$refs.picker.focus()},blur:function(){this.$refs.picker.blur()},transformValue:function(e){"value"in e&&(e.value=(0,ft.pY)(e.value,this.valueFormat)),"defaultValue"in e&&(e.defaultValue=(0,ft.pY)(e.defaultValue,this.valueFormat)),"defaultPickerValue"in e&&(e.defaultPickerValue=(0,ft.pY)(e.defaultPickerValue,this.valueFormat))},renderPicker:function(t,i){var o,a=this,s=this.$createElement,l=(0,c.Oq)(this);this.transformValue(l);var u=l.prefixCls,d=l.inputPrefixCls,h=l.getCalendarContainer,f=l.size,p=l.showTime,v=l.disabled,y=l.format,_=p?n+"Time":n,b=y||t[mt[_]]||pt[_],M=this.configProvider,A=M.getPrefixCls,w=M.getPopupContainer,x=h||w,k=A("calendar",u),L=A("input",d),C=g()(k+"-picker",(0,m.A)({},k+"-picker-"+f,!!f)),S=g()(k+"-picker-input",L,(o={},(0,m.A)(o,L+"-lg","large"===f),(0,m.A)(o,L+"-sm","small"===f),(0,m.A)(o,L+"-disabled",v),o)),z=p&&p.format||"HH:mm:ss",T=(0,r.A)({},(0,dt.PH)(z),{format:z,use12Hours:p&&p.use12Hours}),O=vt(T),H=k+"-time-picker-column-"+O,D={props:(0,r.A)({},T,p,{prefixCls:k+"-time-picker",placeholder:t.timePickerLocale.placeholder,transitionName:"slide-up"}),class:H,on:{esc:function(){}}},Y=p?s(lt.A,D):null,V={props:(0,r.A)({},l,{getCalendarContainer:x,format:b,pickerClass:C,pickerInputClass:S,locale:t,localeCode:i,timePicker:Y}),on:(0,r.A)({},(0,c.WM)(this),{openChange:this.handleOpenChange,focus:this.handleFocus,blur:this.handleBlur,mouseenter:this.handleMouseEnter,mouseleave:this.handleMouseLeave,change:this.handleChange,ok:this.handleOk,calendarChange:this.handleCalendarChange}),ref:"picker",scopedSlots:this.$scopedSlots||{}};return s(e,V,[this.$slots&&Object.keys(this.$slots).map(function(e){return s("template",{slot:e,key:e},[a.$slots[e]])})])}},render:function(){var e=arguments[0];return e(ut.A,{attrs:{componentName:"DatePicker",defaultLocale:this.getDefaultLocale},scopedSlots:{default:this.renderPicker}})}}}var yt=n(52040),_t=n(32779);function bt(){}var Mt={mixins:[s.A],props:{prefixCls:a.A.string,value:a.A.any,hoverValue:a.A.any,selectedValue:a.A.any,direction:a.A.any,locale:a.A.any,showDateInput:a.A.bool,showTimePicker:a.A.bool,showWeekNumber:a.A.bool,format:a.A.any,placeholder:a.A.any,disabledDate:a.A.any,timePicker:a.A.any,disabledTime:a.A.any,disabledMonth:a.A.any,mode:a.A.any,timePickerDisabledTime:a.A.object,enableNext:a.A.any,enablePrev:a.A.any,clearIcon:a.A.any,dateRender:a.A.func,inputMode:a.A.string,inputReadOnly:a.A.bool},render:function(){var e=arguments[0],t=this.$props,n=t.prefixCls,i=t.value,o=t.hoverValue,a=t.selectedValue,s=t.mode,u=t.direction,d=t.locale,h=t.format,f=t.placeholder,p=t.disabledDate,m=t.timePicker,v=t.disabledTime,g=t.timePickerDisabledTime,y=t.showTimePicker,_=t.enablePrev,b=t.enableNext,M=t.disabledMonth,A=t.showDateInput,w=t.dateRender,k=t.showWeekNumber,L=t.showClear,C=t.inputMode,S=t.inputReadOnly,z=(0,c.nu)(this,"clearIcon"),T=(0,c.WM)(this),O=T.inputChange,H=void 0===O?bt:O,D=T.inputSelect,Y=void 0===D?bt:D,V=T.valueChange,E=void 0===V?bt:V,j=T.panelChange,F=void 0===j?bt:j,I=T.select,$=void 0===I?bt:I,R=T.dayHover,N=void 0===R?bt:R,W=y&&m,B=W&&v?x(a,v):null,K=n+"-range",U={locale:d,value:i,prefixCls:n,showTimePicker:y},q="left"===u?0:1,G=null;if(W){var J=(0,c.Oq)(m);G=(0,l.Ob)(m,{props:(0,r.A)({showHour:!0,showMinute:!0,showSecond:!0},J,B,g,{defaultOpenValue:i,value:a[q]}),on:{change:H}})}var X=A&&e(Oe,{attrs:{format:h,locale:d,prefixCls:n,timePicker:m,disabledDate:p,placeholder:f,disabledTime:v,value:i,showClear:L||!1,selectedValue:a[q],clearIcon:z,inputMode:C,inputReadOnly:S},on:{change:H,select:Y}}),Z={props:(0,r.A)({},U,{mode:s,enableNext:b,enablePrev:_,disabledMonth:M}),on:{valueChange:E,panelChange:F}},Q={props:(0,r.A)({},U,{hoverValue:o,selectedValue:a,dateRender:w,disabledDate:p,showWeekNumber:k}),on:{select:$,dayHover:N}};return e("div",{class:K+"-part "+K+"-"+u},[X,e("div",{style:{outline:"none"}},[e(le,Z),y?e("div",{class:n+"-time-picker"},[e("div",{class:n+"-time-picker-panel"},[G])]):null,e("div",{class:n+"-body"},[e(P,Q)])])])}},At=Mt;function wt(){}function xt(e){return Array.isArray(e)&&(0===e.length||e.every(function(e){return!e}))}function kt(e,t){if(e===t)return!0;if(null===e||"undefined"===typeof e||null===t||"undefined"===typeof t)return!1;if(e.length!==t.length)return!1;for(var n=0;n0&&(i[1-o]=this.sShowTimePicker?i[o]:void 0),this.__emit("inputSelect",i),this.fireSelectValueChange(i,null,n||{source:"dateInput"})}}var Tt={props:{locale:a.A.object.def(He.A),visible:a.A.bool.def(!0),prefixCls:a.A.string.def("rc-calendar"),dateInputPlaceholder:a.A.any,seperator:a.A.string.def("~"),defaultValue:a.A.any,value:a.A.any,hoverValue:a.A.any,mode:a.A.arrayOf(a.A.oneOf(["time","date","month","year","decade"])),showDateInput:a.A.bool.def(!0),timePicker:a.A.any,showOk:a.A.bool,showToday:a.A.bool.def(!0),defaultSelectedValue:a.A.array.def([]),selectedValue:a.A.array,showClear:a.A.bool,showWeekNumber:a.A.bool,format:a.A.oneOfType([a.A.string,a.A.arrayOf(a.A.string),a.A.func]),type:a.A.any.def("both"),disabledDate:a.A.func,disabledTime:a.A.func.def(wt),renderFooter:a.A.func.def(function(){return null}),renderSidebar:a.A.func.def(function(){return null}),dateRender:a.A.func,clearIcon:a.A.any,inputReadOnly:a.A.bool},mixins:[s.A,Le],data:function(){var e=this.$props,t=e.selectedValue||e.defaultSelectedValue,n=Ct(e,1);return{sSelectedValue:t,prevSelectedValue:t,firstSelectedValue:null,sHoverValue:e.hoverValue||[],sValue:n,sShowTimePicker:!1,sMode:e.mode||["date","date"],sPanelTriggerSource:""}},watch:{value:function(){var e={};e.sValue=Ct(this.$props,0),this.setState(e)},hoverValue:function(e){kt(this.sHoverValue,e)||this.setState({sHoverValue:e})},selectedValue:function(e){var t={};t.sSelectedValue=e,t.prevSelectedValue=e,this.setState(t)},mode:function(e){kt(this.sMode,e)||this.setState({sMode:e})}},methods:{onDatePanelEnter:function(){this.hasSelectedValue()&&this.fireHoverValueChange(this.sSelectedValue.concat())},onDatePanelLeave:function(){this.hasSelectedValue()&&this.fireHoverValueChange([])},onSelect:function(e){var t=this.type,n=this.sSelectedValue,r=this.prevSelectedValue,i=this.firstSelectedValue,o=void 0;if("both"===t)i?this.compare(i,e)<0?(w(r[1],e),o=[i,e]):(w(r[0],e),w(r[1],i),o=[e,i]):(w(r[0],e),o=[e]);else if("start"===t){w(r[0],e);var a=n[1];o=a&&this.compare(a,e)>0?[e,a]:[e]}else{var s=n[0];s&&this.compare(s,e)<=0?(w(r[1],e),o=[s,e]):(w(r[0],e),o=[e])}this.fireSelectValueChange(o)},onKeyDown:function(e){var t=this;if("input"!==e.target.nodeName.toLowerCase()){var n=e.keyCode,r=e.ctrlKey||e.metaKey,i=this.$data,o=i.sSelectedValue,a=i.sHoverValue,s=i.firstSelectedValue,c=i.sValue,l=this.$props.disabledDate,d=function(n){var r=void 0,i=void 0,l=void 0;if(s?1===a.length?(r=a[0].clone(),i=n(r),l=t.onDayHover(i)):(r=a[0].isSame(s,"day")?a[1]:a[0],i=n(r),l=t.onDayHover(i)):(r=a[0]||o[0]||c[0]||h()(),i=n(r),l=[i],t.fireHoverValueChange(l)),l.length>=2){var u=l.some(function(e){return!Pe(c,e,"month")});if(u){var d=l.slice().sort(function(e,t){return e.valueOf()-t.valueOf()});d[0].isSame(d[1],"month")&&(d[1]=d[0].clone().add(1,"month")),t.fireValueChange(d)}}else if(1===l.length){var f=c.findIndex(function(e){return e.isSame(r,"month")});if(-1===f&&(f=0),c.every(function(e){return!e.isSame(i,"month")})){var p=c.slice();p[f]=i.clone(),t.fireValueChange(p)}}return e.preventDefault(),i};switch(n){case u.A.DOWN:return void d(function(e){return Ve(e,1,"weeks")});case u.A.UP:return void d(function(e){return Ve(e,-1,"weeks")});case u.A.LEFT:return void d(r?function(e){return Ve(e,-1,"years")}:function(e){return Ve(e,-1,"days")});case u.A.RIGHT:return void d(r?function(e){return Ve(e,1,"years")}:function(e){return Ve(e,1,"days")});case u.A.HOME:return void d(function(e){return De(e)});case u.A.END:return void d(function(e){return Ye(e)});case u.A.PAGE_DOWN:return void d(function(e){return Ve(e,1,"month")});case u.A.PAGE_UP:return void d(function(e){return Ve(e,-1,"month")});case u.A.ENTER:var f=void 0;return f=0===a.length?d(function(e){return e}):1===a.length?a[0]:a[0].isSame(s,"day")?a[1]:a[0],!f||l&&l(f)||this.onSelect(f),void e.preventDefault();default:this.__emit("keydown",e)}}},onDayHover:function(e){var t=[],n=this.sSelectedValue,r=this.firstSelectedValue,i=this.type;if("start"===i&&n[1])t=this.compare(e,n[1])<0?[e,n[1]]:[e];else if("end"===i&&n[0])t=this.compare(e,n[0])>0?[n[0],e]:[];else{if(!r)return this.sHoverValue.length&&this.setState({sHoverValue:[]}),t;t=this.compare(e,r)<0?[e,r]:[r,e]}return this.fireHoverValueChange(t),t},onToday:function(){var e=_(this.sValue[0]),t=e.clone().add(1,"months");this.setState({sValue:[e,t]})},onOpenTimePicker:function(){this.setState({sShowTimePicker:!0})},onCloseTimePicker:function(){this.setState({sShowTimePicker:!1})},onOk:function(){var e=this.sSelectedValue;this.isAllowedDateAndTime(e)&&this.__emit("ok",e)},onStartInputChange:function(){for(var e=arguments.length,t=Array(e),n=0;n-1},hasSelectedValue:function(){var e=this.sSelectedValue;return!!e[1]&&!!e[0]},compare:function(e,t){return this.timePicker?e.diff(t):e.diff(t,"days")},fireSelectValueChange:function(e,t,n){var r=this.timePicker,i=this.prevSelectedValue;if(r){var o=(0,c.Oq)(r);if(o.defaultValue){var a=o.defaultValue;!i[0]&&e[0]&&w(a[0],e[0]),!i[1]&&e[1]&&w(a[1],e[1])}}if(!this.sSelectedValue[0]||!this.sSelectedValue[1]){var s=e[0]||h()(),l=e[1]||s.clone().add(1,"months");this.setState({sSelectedValue:e,sValue:e&&2===e.length?Lt([s,l]):this.sValue})}e[0]&&!e[1]&&(this.setState({firstSelectedValue:e[0]}),this.fireHoverValueChange(e.concat())),this.__emit("change",e),(t||e[0]&&e[1])&&(this.setState({prevSelectedValue:e,firstSelectedValue:null}),this.fireHoverValueChange([]),this.__emit("select",e,n)),(0,c.cK)(this,"selectedValue")||this.setState({sSelectedValue:e})},fireValueChange:function(e){(0,c.cK)(this,"value")||this.setState({sValue:e}),this.__emit("valueChange",e)},fireHoverValueChange:function(e){(0,c.cK)(this,"hoverValue")||this.setState({sHoverValue:e}),this.__emit("hoverChange",e)},clear:function(){this.fireSelectValueChange([],!0),this.__emit("clear")},disabledStartTime:function(e){return this.disabledTime(e,"start")},disabledEndTime:function(e){return this.disabledTime(e,"end")},disabledStartMonth:function(e){var t=this.sValue;return e.isAfter(t[1],"month")},disabledEndMonth:function(e){var t=this.sValue;return e.isBefore(t[0],"month")}},render:function(){var e,t,n=arguments[0],r=(0,c.Oq)(this),i=r.prefixCls,o=r.dateInputPlaceholder,a=r.timePicker,s=r.showOk,l=r.locale,u=r.showClear,d=r.showToday,h=r.type,f=r.seperator,p=(0,c.nu)(this,"clearIcon"),v=this.sHoverValue,g=this.sSelectedValue,y=this.sMode,b=this.sShowTimePicker,M=this.sValue,A=(e={},(0,m.A)(e,i,1),(0,m.A)(e,i+"-hidden",!r.visible),(0,m.A)(e,i+"-range",1),(0,m.A)(e,i+"-show-time-picker",b),(0,m.A)(e,i+"-week-number",r.showWeekNumber),e),w={props:r,on:(0,c.WM)(this)},x={props:{selectedValue:g},on:{select:this.onSelect,dayHover:"start"===h&&g[1]||"end"===h&&g[0]||v.length?this.onDayHover:wt}},k=void 0,L=void 0;if(o)if(Array.isArray(o)){var C=(0,yt.A)(o,2);k=C[0],L=C[1]}else k=L=o;var S=!0===s||!1!==s&&!!a,z=(t={},(0,m.A)(t,i+"-footer",!0),(0,m.A)(t,i+"-range-bottom",!0),(0,m.A)(t,i+"-footer-show-ok",S),t),T=this.getStartValue(),O=this.getEndValue(),H=_(T),D=H.month(),Y=H.year(),V=T.year()===Y&&T.month()===D||O.year()===Y&&O.month()===D,P=T.clone().add(1,"months"),E=P.year()===O.year()&&P.month()===O.month(),j=(0,c.v6)(w,x,{props:{hoverValue:v,direction:"left",disabledTime:this.disabledStartTime,disabledMonth:this.disabledStartMonth,format:this.getFormat(),value:T,mode:y[0],placeholder:k,showDateInput:this.showDateInput,timePicker:a,showTimePicker:b||"time"===y[0],enablePrev:!0,enableNext:!E||this.isMonthYearPanelShow(y[1]),clearIcon:p},on:{inputChange:this.onStartInputChange,inputSelect:this.onStartInputSelect,valueChange:this.onStartValueChange,panelChange:this.onStartPanelChange}}),F=(0,c.v6)(w,x,{props:{hoverValue:v,direction:"right",format:this.getFormat(),timePickerDisabledTime:this.getEndDisableTime(),placeholder:L,value:O,mode:y[1],showDateInput:this.showDateInput,timePicker:a,showTimePicker:b||"time"===y[1],disabledTime:this.disabledEndTime,disabledMonth:this.disabledEndMonth,enablePrev:!E||this.isMonthYearPanelShow(y[0]),enableNext:!0,clearIcon:p},on:{inputChange:this.onEndInputChange,inputSelect:this.onEndInputSelect,valueChange:this.onEndValueChange,panelChange:this.onEndPanelChange}}),I=null;if(d){var $=(0,c.v6)(w,{props:{disabled:V,value:M[0],text:l.backToToday},on:{today:this.onToday}});I=n(fe,de()([{key:"todayButton"},$]))}var R=null;if(r.timePicker){var N=(0,c.v6)(w,{props:{showTimePicker:b||"time"===y[0]&&"time"===y[1],timePickerDisabled:!this.hasSelectedValue()||v.length},on:{openTimePicker:this.onOpenTimePicker,closeTimePicker:this.onCloseTimePicker}});R=n(ge,de()([{key:"timePickerButton"},N]))}var W=null;if(S){var B=(0,c.v6)(w,{props:{okDisabled:!this.isAllowedDateAndTime(g)||!this.hasSelectedValue()||v.length},on:{ok:this.onOk}});W=n(me,de()([{key:"okButtonNode"},B]))}var K=this.renderFooter(y);return n("div",{ref:"rootInstance",class:A,attrs:{tabIndex:"0"},on:{keydown:this.onKeyDown}},[r.renderSidebar(),n("div",{class:i+"-panel"},[u&&g[0]&&g[1]?n("a",{attrs:{role:"button",title:l.clear},on:{click:this.clear}},[p||n("span",{class:i+"-clear-btn"})]):null,n("div",{class:i+"-date-panel",on:{mouseleave:"both"!==h?this.onDatePanelLeave:wt,mouseenter:"both"!==h?this.onDatePanelEnter:wt}},[n(At,j),n("span",{class:i+"-range-middle"},[f]),n(At,F)]),n("div",{class:z},[d||r.timePicker||S||K?n("div",{class:i+"-footer-btn"},[K,I,R,W]):null])])])}},Ot=Tt,Ht=n(2833),Dt=n.n(Ht),Yt=n(87298),Vt=function(){return{name:a.A.string,transitionName:a.A.string,prefixCls:a.A.string,inputPrefixCls:a.A.string,format:a.A.oneOfType([a.A.string,a.A.array,a.A.func]),disabled:a.A.bool,allowClear:a.A.bool,suffixIcon:a.A.any,popupStyle:a.A.object,dropdownClassName:a.A.string,locale:a.A.any,localeCode:a.A.string,size:a.A.oneOf(["large","small","default"]),getCalendarContainer:a.A.func,open:a.A.bool,disabledDate:a.A.func,showToday:a.A.bool,dateRender:a.A.any,pickerClass:a.A.string,pickerInputClass:a.A.string,timePicker:a.A.any,autoFocus:a.A.bool,tagPrefixCls:a.A.string,tabIndex:a.A.oneOfType([a.A.string,a.A.number]),align:a.A.object.def(function(){return{}}),inputReadOnly:a.A.bool,valueFormat:a.A.string}},Pt=function(){return{value:ft.W2,defaultValue:ft.W2,defaultPickerValue:ft.W2,renderExtraFooter:a.A.any,placeholder:a.A.string}},Et=function(){return(0,r.A)({},Vt(),Pt(),{showTime:a.A.oneOfType([a.A.object,a.A.bool]),open:a.A.bool,disabledTime:a.A.func,mode:a.A.oneOf(["time","date","month","year","decade"])})},jt=function(){return(0,r.A)({},Vt(),Pt(),{placeholder:a.A.string,monthCellContentRender:a.A.func})},Ft=function(){return(0,r.A)({},Vt(),{tagPrefixCls:a.A.string,value:ft.P1,defaultValue:ft.P1,defaultPickerValue:ft.P1,timePicker:a.A.any,showTime:a.A.oneOfType([a.A.object,a.A.bool]),ranges:a.A.object,placeholder:a.A.arrayOf(String),mode:a.A.oneOfType([a.A.string,a.A.arrayOf(String)]),separator:a.A.any,disabledTime:a.A.func,showToday:a.A.bool,renderExtraFooter:a.A.any})},It=function(){return(0,r.A)({},Vt(),Pt(),{placeholder:a.A.string})},$t={functional:!0,render:function(e,t){var n=t.props,r=n.suffixIcon,i=n.prefixCls;return(r&&(0,c.zO)(r)?(0,l.Ob)(r,{class:i+"-picker-icon"}):e("span",{class:i+"-picker-icon"},[r]))||e(rt.A,{attrs:{type:"calendar"},class:i+"-picker-icon"})}};function Rt(){}function Nt(e,t){var n=(0,yt.A)(e,2),r=n[0],i=n[1];if(r||i){if(t&&"month"===t[0])return[r,i];var o=i&&i.isSame(r,"month")?i.clone().add(1,"month"):i;return[r,o]}}function Wt(e){if(e)return Array.isArray(e)?e:[e,e.clone().add(1,"month")]}function Bt(e){return!!Array.isArray(e)&&(0===e.length||e.every(function(e){return!e}))}function Kt(e,t){if(t&&e&&0!==e.length){var n=(0,yt.A)(e,2),r=n[0],i=n[1];r&&r.locale(t),i&&i.locale(t)}}var Ut={name:"ARangePicker",mixins:[s.A],model:{prop:"value",event:"change"},props:(0,c.CB)(Ft(),{allowClear:!0,showToday:!1,separator:"~"}),inject:{configProvider:{default:function(){return it.f}}},data:function(){var e=this.value||this.defaultValue||[],t=(0,yt.A)(e,2),n=t[0],r=t[1];if(n&&!(0,ot.A)(d).isMoment(n)||r&&!(0,ot.A)(d).isMoment(r))throw new Error("The value/defaultValue of RangePicker must be a moment object array after `antd@2.0`, see: https://u.ant.design/date-picker-value");var i=!e||Bt(e)?this.defaultPickerValue:e;return{sValue:e,sShowDate:Wt(i||(0,ot.A)(d)()),sOpen:this.open,sHoverValue:[]}},watch:{value:function(e){var t=e||[],n={sValue:t};Dt()(e,this.sValue)||(n=(0,r.A)({},n,{sShowDate:Nt(t,this.mode)||this.sShowDate})),this.setState(n)},open:function(e){var t={sOpen:e};this.setState(t)},sOpen:function(e,t){var n=this;this.$nextTick(function(){(0,c.cK)(n,"open")||!t||e||n.focus()})}},methods:{setValue:function(e,t){this.handleChange(e),!t&&this.showTime||(0,c.cK)(this,"open")||this.setState({sOpen:!1})},clearSelection:function(e){e.preventDefault(),e.stopPropagation(),this.setState({sValue:[]}),this.handleChange([])},clearHoverValue:function(){this.setState({sHoverValue:[]})},handleChange:function(e){(0,c.cK)(this,"value")||this.setState(function(t){var n=t.sShowDate;return{sValue:e,sShowDate:Nt(e)||n}}),e[0]&&e[1]&&e[0].diff(e[1])>0&&(e[1]=void 0);var t=(0,yt.A)(e,2),n=t[0],r=t[1];this.$emit("change",e,[at(n,this.format),at(r,this.format)])},handleOpenChange:function(e){(0,c.cK)(this,"open")||this.setState({sOpen:e}),!1===e&&this.clearHoverValue(),this.$emit("openChange",e)},handleShowDateChange:function(e){this.setState({sShowDate:e})},handleHoverChange:function(e){this.setState({sHoverValue:e})},handleRangeMouseLeave:function(){this.sOpen&&this.clearHoverValue()},handleCalendarInputSelect:function(e){var t=(0,yt.A)(e,1),n=t[0];n&&this.setState(function(t){var n=t.sShowDate;return{sValue:e,sShowDate:Nt(e)||n}})},handleRangeClick:function(e){"function"===typeof e&&(e=e()),this.setValue(e,!0),this.$emit("ok",e),this.$emit("openChange",!1)},onMouseEnter:function(e){this.$emit("mouseenter",e)},onMouseLeave:function(e){this.$emit("mouseleave",e)},focus:function(){this.$refs.picker.focus()},blur:function(){this.$refs.picker.blur()},renderFooter:function(){var e=this,t=this.$createElement,n=this.ranges,r=this.$scopedSlots,i=this.$slots,o=this._prefixCls,a=this._tagPrefixCls,s=this.renderExtraFooter||r.renderExtraFooter||i.renderExtraFooter;if(!n&&!s)return null;var c=s?t("div",{class:o+"-footer-extra",key:"extra"},["function"===typeof s?s():s]):null,l=n&&Object.keys(n).map(function(r){var i=n[r],o="function"===typeof i?i.call(e):i;return t(Yt.A,{key:r,attrs:{prefixCls:a,color:"blue"},on:{click:function(){return e.handleRangeClick(i)},mouseenter:function(){return e.setState({sHoverValue:o})},mouseleave:e.handleRangeMouseLeave}},[r])}),u=l&&l.length>0?t("div",{class:o+"-footer-extra "+o+"-range-quick-selector",key:"range"},[l]):null;return[u,c]}},render:function(){var e,t=this,n=arguments[0],i=(0,c.Oq)(this),o=(0,c.nu)(this,"suffixIcon");o=Array.isArray(o)?o[0]:o;var a=this.sValue,s=this.sShowDate,l=this.sHoverValue,u=this.sOpen,d=this.$scopedSlots,h=(0,c.WM)(this),f=h.calendarChange,p=void 0===f?Rt:f,v=h.ok,y=void 0===v?Rt:v,_=h.focus,b=void 0===_?Rt:_,M=h.blur,A=void 0===M?Rt:M,w=h.panelChange,x=void 0===w?Rt:w,k=i.prefixCls,L=i.tagPrefixCls,C=i.popupStyle,S=i.disabledDate,z=i.disabledTime,T=i.showTime,O=i.showToday,H=i.ranges,D=i.locale,Y=i.localeCode,V=i.format,P=i.separator,E=i.inputReadOnly,j=this.configProvider.getPrefixCls,F=j("calendar",k),I=j("tag",L);this._prefixCls=F,this._tagPrefixCls=I;var $=i.dateRender||d.dateRender;Kt(a,Y),Kt(s,Y);var R=g()((e={},(0,m.A)(e,F+"-time",T),(0,m.A)(e,F+"-range-with-ranges",H),e)),N={on:{change:this.handleChange}},W={on:{ok:this.handleChange},props:{}};i.timePicker?N.on.change=function(e){return t.handleChange(e)}:W={on:{},props:{}},"mode"in i&&(W.props.mode=i.mode);var B=Array.isArray(i.placeholder)?i.placeholder[0]:D.lang.rangePlaceholder[0],K=Array.isArray(i.placeholder)?i.placeholder[1]:D.lang.rangePlaceholder[1],U=(0,c.v6)(W,{props:{separator:P,format:V,prefixCls:F,renderFooter:this.renderFooter,timePicker:i.timePicker,disabledDate:S,disabledTime:z,dateInputPlaceholder:[B,K],locale:D.lang,dateRender:$,value:s,hoverValue:l,showToday:O,inputReadOnly:E},on:{change:p,ok:y,valueChange:this.handleShowDateChange,hoverChange:this.handleHoverChange,panelChange:x,inputSelect:this.handleCalendarInputSelect},class:R,scopedSlots:d}),q=n(Ot,U),G={};i.showTime&&(G.width="350px");var J=(0,yt.A)(a,2),X=J[0],Z=J[1],Q=!i.disabled&&i.allowClear&&a&&(X||Z)?n(rt.A,{attrs:{type:"close-circle",theme:"filled"},class:F+"-picker-clear",on:{click:this.clearSelection}}):null,ee=n($t,{attrs:{suffixIcon:o,prefixCls:F}}),te=function(e){var t=e.value,r=(0,yt.A)(t,2),o=r[0],a=r[1];return n("span",{class:i.pickerInputClass},[n("input",{attrs:{disabled:i.disabled,readOnly:!0,placeholder:B,tabIndex:-1},domProps:{value:at(o,i.format)},class:F+"-range-picker-input"}),n("span",{class:F+"-range-picker-separator"},[" ",P," "]),n("input",{attrs:{disabled:i.disabled,readOnly:!0,placeholder:K,tabIndex:-1},domProps:{value:at(a,i.format)},class:F+"-range-picker-input"}),Q,ee])},ne=(0,c.v6)({props:i,on:h},N,{props:{calendar:q,value:a,open:u,prefixCls:F+"-picker-container"},on:{openChange:this.handleOpenChange},style:C,scopedSlots:(0,r.A)({default:te},d)});return n("span",{ref:"picker",class:i.pickerClass,style:G,attrs:{tabIndex:i.disabled?-1:0},on:{focus:b,blur:A,mouseenter:this.onMouseEnter,mouseleave:this.onMouseLeave}},[n(nt,ne)])}};function qt(e,t){return e&&e.format(t)||""}function Gt(){}var Jt={name:"AWeekPicker",mixins:[s.A],model:{prop:"value",event:"change"},props:(0,c.CB)(It(),{format:"gggg-wo",allowClear:!0}),inject:{configProvider:{default:function(){return it.f}}},data:function(){var e=this.value||this.defaultValue;if(e&&!(0,ot.A)(d).isMoment(e))throw new Error("The value/defaultValue of WeekPicker or MonthPicker must be a moment object");return{_value:e,_open:this.open}},watch:{value:function(e){var t={_value:e};this.setState(t),this.prevState=(0,r.A)({},this.$data,t)},open:function(e){var t={_open:e};this.setState(t),this.prevState=(0,r.A)({},this.$data,t)},_open:function(e,t){var n=this;this.$nextTick(function(){(0,c.cK)(n,"open")||!t||e||n.focus()})}},mounted:function(){this.prevState=(0,r.A)({},this.$data)},updated:function(){var e=this;this.$nextTick(function(){(0,c.cK)(e,"open")||!e.prevState._open||e._open||e.focus()})},methods:{weekDateRender:function(e){var t=this.$createElement,n=this.$data._value,r=this._prefixCls,i=this.$scopedSlots,o=this.dateRender||i.dateRender,a=o?o(e):e.date();return n&&e.year()===n.year()&&e.week()===n.week()?t("div",{class:r+"-selected-day"},[t("div",{class:r+"-date"},[a])]):t("div",{class:r+"-date"},[a])},handleChange:function(e){(0,c.cK)(this,"value")||this.setState({_value:e}),this.$emit("change",e,qt(e,this.format))},handleOpenChange:function(e){(0,c.cK)(this,"open")||this.setState({_open:e}),this.$emit("openChange",e)},clearSelection:function(e){e.preventDefault(),e.stopPropagation(),this.handleChange(null)},focus:function(){this.$refs.input.focus()},blur:function(){this.$refs.input.blur()},renderFooter:function(){var e=this.$createElement,t=this._prefixCls,n=this.$scopedSlots,r=this.renderExtraFooter||n.renderExtraFooter;return r?e("div",{class:t+"-footer-extra"},[r.apply(void 0,arguments)]):null}},render:function(){var e=arguments[0],t=(0,c.Oq)(this),n=(0,c.nu)(this,"suffixIcon");n=Array.isArray(n)?n[0]:n;var i=this.prefixCls,o=this.disabled,a=this.pickerClass,s=this.popupStyle,l=this.pickerInputClass,u=this.format,d=this.allowClear,h=this.locale,f=this.localeCode,p=this.disabledDate,m=this.defaultPickerValue,v=this.$data,g=this.$scopedSlots,y=(0,c.WM)(this),_=this.configProvider.getPrefixCls,b=_("calendar",i);this._prefixCls=b;var M=v._value,A=v._open,w=y.focus,x=void 0===w?Gt:w,k=y.blur,L=void 0===k?Gt:k;M&&f&&M.locale(f);var C=(0,c.cK)(this,"placeholder")?this.placeholder:h.lang.placeholder,S=this.dateRender||g.dateRender||this.weekDateRender,z=e($e,{attrs:{showWeekNumber:!0,dateRender:S,prefixCls:b,format:u,locale:h.lang,showDateInput:!1,showToday:!1,disabledDate:p,renderFooter:this.renderFooter,defaultValue:m}}),T=!o&&d&&v._value?e(rt.A,{attrs:{type:"close-circle",theme:"filled"},class:b+"-picker-clear",on:{click:this.clearSelection}}):null,O=e($t,{attrs:{suffixIcon:n,prefixCls:b}}),H=function(t){var n=t.value;return e("span",{style:{display:"inline-block",width:"100%"}},[e("input",{ref:"input",attrs:{disabled:o,readOnly:!0,placeholder:C},domProps:{value:n&&n.format(u)||""},class:l,on:{focus:x,blur:L}}),T,O])},D={props:(0,r.A)({},t,{calendar:z,prefixCls:b+"-picker-container",value:M,open:A}),on:(0,r.A)({},y,{change:this.handleChange,openChange:this.handleOpenChange}),style:s,scopedSlots:(0,r.A)({default:H},g)};return e("span",{class:a},[e(nt,D)])}},Xt=n(44807),Zt=gt((0,r.A)({},ct($e,Et()),{name:"ADatePicker"}),Et(),"date"),Qt=gt((0,r.A)({},ct(Ne,jt()),{name:"AMonthPicker"}),jt(),"month");(0,r.A)(Zt,{RangePicker:gt(Ut,Ft(),"date"),MonthPicker:Qt,WeekPicker:gt(Jt,It(),"week")}),Zt.install=function(e){e.use(Xt.A),e.component(Zt.name,Zt),e.component(Zt.RangePicker.name,Zt.RangePicker),e.component(Zt.MonthPicker.name,Zt.MonthPicker),e.component(Zt.WeekPicker.name,Zt.WeekPicker)};var en=Zt},69656:function(e,t,n){"use strict";var r=n(85505),i=n(99876),o=n(68265),a={lang:(0,r.A)({placeholder:"Select date",rangePlaceholder:["Start date","End date"]},i.A),timePickerLocale:(0,r.A)({},o.A)};t.A=a},32581:function(e,t,n){"use strict";n(29229),n(71094),n(26904),n(5554)},9426:function(e,t,n){"use strict";n.d(t,{Ay:function(){return w}});var r=n(44508),i=n(97479),o=n(36873),a=n(73363),s=n(25592),c=n(4718),l=n(15848),u={child:c.A.any,bordered:c.A.bool,colon:c.A.bool,type:c.A.oneOf(["label","content"]),layout:c.A.oneOf(["horizontal","vertical"])},d={functional:!0,props:u,render:function(e,t){var n,i=t.props,o=i.child,a=i.bordered,s=i.colon,c=i.type,u=i.layout,d=(0,l.Oq)(o),h=d.prefixCls,f=d.span,p=void 0===f?1:f,m=t.data.key,v=(0,l.nu)(o,"label"),g=(0,l.Sk)(o),y={attrs:{},class:[h+"-item-label",(n={},(0,r.A)(n,h+"-item-colon",s),(0,r.A)(n,h+"-item-no-label",!v),n)],key:m+"-label"};return"vertical"===u&&(y.attrs.colSpan=2*p-1),a?"label"===c?e("th",y,[v]):e("td",{class:h+"-item-content",key:m+"-content",attrs:{colSpan:2*p-1}},[g["default"]]):e("td",{attrs:{colSpan:p},class:h+"-item"},"vertical"===u?"content"===c?[e("span",{class:h+"-item-content",key:m+"-content"},[g["default"]])]:[e("span",{class:[h+"-item-label",(0,r.A)({},h+"-item-colon",s)],key:m+"-label"},[v])]:[e("span",y,[v]),e("span",{class:h+"-item-content",key:m+"-content"},[g["default"]])])}},h=d,f=n(52315),p=n(44807),m=n(51927),v={prefixCls:c.A.string,label:c.A.any,span:c.A.number};function g(e){var t=e;return void 0===e?t=[]:Array.isArray(e)||(t=[e]),t}var y={name:"ADescriptionsItem",props:(0,l.CB)(v,{span:1})},_={prefixCls:c.A.string,bordered:c.A.bool,size:c.A.oneOf(["default","middle","small"]).def("default"),title:c.A.any,column:c.A.oneOfType([c.A.number,c.A.object]),layout:c.A.oneOf(["horizontal","vertical"]),colon:c.A.bool},b=function(e,t){var n=[],r=null,i=void 0,a=g(e);return a.forEach(function(e,s){var c=(0,l.Oq)(e),u=e;r||(i=t,r=[],n.push(r));var d=s===a.length-1,h=!0;d&&(h=!c.span||c.span===i,u=(0,m.Ob)(u,{props:{span:i}}));var f=c.span,p=void 0===f?1:f;r.push(u),i-=p,i<=0&&(r=null,(0,o.A)(0===i&&h,"Descriptions","Sum of column `span` in a line exceeds `column` of Descriptions."))}),n},M={xxl:3,xl:3,lg:3,md:3,sm:2,xs:1},A={name:"ADescriptions",Item:y,mixins:[f.A],inject:{configProvider:{default:function(){return s.f}}},props:(0,l.CB)(_,{column:M}),data:function(){return{screens:{},token:void 0}},methods:{getColumn:function(){var e=this.$props.column;if("object"===("undefined"===typeof e?"undefined":(0,i.A)(e)))for(var t=0;t0?"-"+c:c,h=(e={},(0,r.A)(e,u,!0),(0,r.A)(e,u+"-"+i,!0),(0,r.A)(e,u+"-with-text"+d,o["default"]),(0,r.A)(e,u+"-dashed",!!a),e);return t("div",{class:h,attrs:{role:"separator"}},[o["default"]&&t("span",{class:u+"-inner-text"},[o["default"]])])},install:function(e){e.use(a.A),e.component(s.name,s)}};t.A=s},28373:function(e,t,n){"use strict";n(29229)},41446:function(e,t,n){"use strict";n.d(t,{A:function(){return $}});var r=n(44508),i=n(5748),o=n(85505),a=n(46942),s=n.n(a),c=n(90034),l=n(75189),u=n.n(l),d=n(97479),h=n(85471),f=n(24415),p=n(52315),m=n(15848),v=n(51927),g=n(93986),y=n(4718),_={width:y.A.any,height:y.A.any,defaultOpen:y.A.bool,firstEnter:y.A.bool,open:y.A.bool,prefixCls:y.A.string,placement:y.A.string,level:y.A.oneOfType([y.A.string,y.A.array]),levelMove:y.A.oneOfType([y.A.number,y.A.func,y.A.array]),ease:y.A.string,duration:y.A.string,handler:y.A.any,showMask:y.A.bool,maskStyle:y.A.object,className:y.A.string,wrapStyle:y.A.object,maskClosable:y.A.bool,afterVisibleChange:y.A.func,keyboard:y.A.bool},b=(0,o.A)({},_,{wrapperClassName:y.A.string,forceRender:y.A.bool,getContainer:y.A.oneOfType([y.A.string,y.A.func,y.A.object,y.A.bool])}),M=((0,o.A)({},_,{getContainer:y.A.func,getOpenCount:y.A.func,switchScrollingEffect:y.A.func}),n(11207));function A(e){return Array.isArray(e)?e:[e]}var w={transition:"transitionend",WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend"},x=Object.keys(w).filter(function(e){if("undefined"===typeof document)return!1;var t=document.getElementsByTagName("html")[0];return e in(t?t.style:{})})[0],k=w[x];function L(e,t,n,r){e.addEventListener?e.addEventListener(t,n,r):e.attachEvent&&e.attachEvent("on"+t,n)}function C(e,t,n,r){e.removeEventListener?e.removeEventListener(t,n,r):e.attachEvent&&e.detachEvent("on"+t,n)}function S(e,t){var n=void 0;return n="function"===typeof e?e(t):e,Array.isArray(n)?2===n.length?n:[n[0],n[1]]:[n]}var z=function(e){return!isNaN(parseFloat(e))&&isFinite(e)},T=("undefined"!==typeof window&&window.document&&window.document.createElement,n(48159));function O(){}var H={},D=!("undefined"!==typeof window&&window.document&&window.document.createElement);h.Ay.use(f.A,{name:"ant-ref"});var Y={mixins:[p.A],props:(0,m.CB)(b,{prefixCls:"drawer",placement:"left",getContainer:"body",level:"all",duration:".3s",ease:"cubic-bezier(0.78, 0.14, 0.15, 0.86)",firstEnter:!1,showMask:!0,handler:!0,maskStyle:{},wrapperClassName:"",className:""}),data:function(){this.levelDom=[],this.contentDom=null,this.maskDom=null,this.handlerdom=null,this.mousePos=null,this.sFirstEnter=this.firstEnter,this.timeout=null,this.children=null,this.drawerId=Number((Date.now()+Math.random()).toString().replace(".",Math.round(9*Math.random()))).toString(16);var e=void 0!==this.open?this.open:!!this.defaultOpen;return H[this.drawerId]=e,this.orignalOpen=this.open,this.preProps=(0,o.A)({},this.$props),{sOpen:e}},mounted:function(){var e=this;this.$nextTick(function(){if(!D){var t=!1;window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){return t=!0,null}})),e.passive=!!t&&{passive:!1}}var n=e.getOpen();(e.handler||n||e.sFirstEnter)&&(e.getDefault(e.$props),n&&(e.isOpenChange=!0,e.$nextTick(function(){e.domFocus()})),e.$forceUpdate())})},watch:{open:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(e){var t=this;void 0!==e&&e!==this.preProps.open&&(this.isOpenChange=!0,this.container||this.getDefault(this.$props),this.setState({sOpen:open})),this.preProps.open=e,e&&this.$nextTick(function(){t.domFocus()})}),placement:function(e){e!==this.preProps.placement&&(this.contentDom=null),this.preProps.placement=e},level:function(e){this.preProps.level!==e&&this.getParentAndLevelDom(this.$props),this.preProps.level=e}},updated:function(){var e=this;this.$nextTick(function(){!e.sFirstEnter&&e.container&&(e.$forceUpdate(),e.sFirstEnter=!0)})},beforeDestroy:function(){delete H[this.drawerId],delete this.isOpenChange,this.container&&(this.sOpen&&this.setLevelDomTransform(!1,!0),document.body.style.overflow=""),this.sFirstEnter=!1,clearTimeout(this.timeout)},methods:{domFocus:function(){this.dom&&this.dom.focus()},onKeyDown:function(e){e.keyCode===M.A.ESC&&(e.stopPropagation(),this.$emit("close",e))},onMaskTouchEnd:function(e){this.$emit("close",e),this.onTouchEnd(e,!0)},onIconTouchEnd:function(e){this.$emit("handleClick",e),this.onTouchEnd(e)},onTouchEnd:function(e,t){if(void 0===this.open){var n=t||this.sOpen;this.isOpenChange=!0,this.setState({sOpen:!n})}},onWrapperTransitionEnd:function(e){if(e.target===this.contentWrapper&&e.propertyName.match(/transform$/)){var t=this.getOpen();this.dom.style.transition="",!t&&this.getCurrentDrawerSome()&&(document.body.style.overflowX="",this.maskDom&&(this.maskDom.style.left="",this.maskDom.style.width="")),this.afterVisibleChange&&this.afterVisibleChange(!!t)}},getDefault:function(e){this.getParentAndLevelDom(e),(e.getContainer||e.parent)&&(this.container=this.defaultGetContainer())},getCurrentDrawerSome:function(){return!Object.keys(H).some(function(e){return H[e]})},getSelfContainer:function(){return this.container},getParentAndLevelDom:function(e){var t=this;if(!D){var n=e.level,r=e.getContainer;if(this.levelDom=[],r){if("string"===typeof r){var i=document.querySelectorAll(r)[0];this.parent=i}"function"===typeof r&&(this.parent=r()),"object"===("undefined"===typeof r?"undefined":(0,d.A)(r))&&r instanceof window.HTMLElement&&(this.parent=r)}if(!r&&this.container&&(this.parent=this.container.parentNode),"all"===n){var o=Array.prototype.slice.call(this.parent.children);o.forEach(function(e){"SCRIPT"!==e.nodeName&&"STYLE"!==e.nodeName&&"LINK"!==e.nodeName&&e!==t.container&&t.levelDom.push(e)})}else n&&A(n).forEach(function(e){document.querySelectorAll(e).forEach(function(e){t.levelDom.push(e)})})}},setLevelDomTransform:function(e,t,n,r){var i=this,o=this.$props,a=o.placement,s=o.levelMove,c=o.duration,l=o.ease,u=o.getContainer;if(!D&&(this.levelDom.forEach(function(o){if(i.isOpenChange||t){o.style.transition="transform "+c+" "+l,L(o,k,i.trnasitionEnd);var u=e?r:0;if(s){var d=S(s,{target:o,open:e});u=e?d[0]:d[1]||0}var h="number"===typeof u?u+"px":u,f="left"===a||"top"===a?h:"-"+h;o.style.transform=u?n+"("+f+")":"",o.style.msTransform=u?n+"("+f+")":""}}),"body"===u)){var d=["touchstart"],h=[document.body,this.maskDom,this.handlerdom,this.contentDom],f=document.body.scrollHeight>(window.innerHeight||document.documentElement.clientHeight)&&window.innerWidth>document.body.offsetWidth?(0,g.A)(1):0,p="width "+c+" "+l,v="transform "+c+" "+l;if(e&&"hidden"!==document.body.style.overflow){if(document.body.style.overflow="hidden",f){switch(document.body.style.position="relative",document.body.style.width="calc(100% - "+f+"px)",this.dom.style.transition="none",a){case"right":this.dom.style.transform="translateX(-"+f+"px)",this.dom.style.msTransform="translateX(-"+f+"px)";break;case"top":case"bottom":this.dom.style.width="calc(100% - "+f+"px)",this.dom.style.transform="translateZ(0)";break;default:break}clearTimeout(this.timeout),this.timeout=setTimeout(function(){i.dom.style.transition=v+","+p,i.dom.style.width="",i.dom.style.transform="",i.dom.style.msTransform=""})}h.forEach(function(e,t){e&&L(e,d[t]||"touchmove",t?i.removeMoveHandler:i.removeStartHandler,i.passive)})}else if(this.getCurrentDrawerSome()){if(document.body.style.overflow="",(this.isOpenChange||t)&&f){document.body.style.position="",document.body.style.width="",x&&(document.body.style.overflowX="hidden"),this.dom.style.transition="none";var y=void 0;switch(a){case"right":this.dom.style.transform="translateX("+f+"px)",this.dom.style.msTransform="translateX("+f+"px)",this.dom.style.width="100%",p="width 0s "+l+" "+c,this.maskDom&&(this.maskDom.style.left="-"+f+"px",this.maskDom.style.width="calc(100% + "+f+"px)");break;case"top":case"bottom":this.dom.style.width="calc(100% + "+f+"px)",this.dom.style.height="100%",this.dom.style.transform="translateZ(0)",y="height 0s "+l+" "+c;break;default:break}clearTimeout(this.timeout),this.timeout=setTimeout(function(){i.dom.style.transition=v+","+(y?y+",":"")+p,i.dom.style.transform="",i.dom.style.msTransform="",i.dom.style.width="",i.dom.style.height=""})}h.forEach(function(e,t){e&&C(e,d[t]||"touchmove",t?i.removeMoveHandler:i.removeStartHandler,i.passive)})}}var _=(0,m.WM)(this),b=_.change;b&&this.isOpenChange&&this.sFirstEnter&&(b(e),this.isOpenChange=!1)},getChildToRender:function(e){var t,n=this,i=this.$createElement,o=this.$props,a=o.className,c=o.prefixCls,l=o.placement,d=o.handler,h=o.showMask,f=o.maskStyle,p=o.width,g=o.height,y=o.wrapStyle,_=o.keyboard,b=o.maskClosable,M=this.$slots["default"],A=s()(c,(t={},(0,r.A)(t,c+"-"+l,!0),(0,r.A)(t,c+"-open",e),(0,r.A)(t,a,!!a),(0,r.A)(t,"no-mask",!h),t)),w=this.isOpenChange,x="left"===l||"right"===l,k="translate"+(x?"X":"Y"),L="left"===l||"top"===l?"-100%":"100%",C=e?"":k+"("+L+")";if(void 0===w||w){var S=this.contentDom?this.contentDom.getBoundingClientRect()[x?"width":"height"]:0,T=(x?p:g)||S;this.setLevelDomTransform(e,!1,k,T)}var H=void 0;if(!1!==d){var D=i("div",{class:"drawer-handle"},[i("i",{class:"drawer-handle-icon"})]),Y=this.handler,V=Y&&Y[0]||D,P=(0,m.kQ)(V),E=P.click;H=(0,v.Ob)(V,{on:{click:function(e){E&&E(),n.onIconTouchEnd(e)}},directives:[{name:"ant-ref",value:function(e){n.handlerdom=e}}]})}var j={class:A,directives:[{name:"ant-ref",value:function(e){n.dom=e}}],on:{transitionend:this.onWrapperTransitionEnd,keydown:e&&_?this.onKeyDown:O},style:y},F=[{name:"ant-ref",value:function(e){n.maskDom=e}}],I=[{name:"ant-ref",value:function(e){n.contentWrapper=e}}],$=[{name:"ant-ref",value:function(e){n.contentDom=e}}];return i("div",u()([j,{attrs:{tabIndex:-1}}]),[h&&i("div",u()([{key:e,class:c+"-mask",on:{click:b?this.onMaskTouchEnd:O},style:f},{directives:F}])),i("div",u()([{class:c+"-content-wrapper",style:{transform:C,msTransform:C,width:z(p)?p+"px":p,height:z(g)?g+"px":g}},{directives:I}]),[i("div",u()([{class:c+"-content"},{directives:$},{on:{touchstart:e?this.removeStartHandler:O,touchmove:e?this.removeMoveHandler:O}}]),[M]),H])])},getOpen:function(){return void 0!==this.open?this.open:this.sOpen},getTouchParentScroll:function(e,t,n,r){if(!t||t===document)return!1;if(t===e.parentNode)return!0;var i=Math.max(Math.abs(n),Math.abs(r))===Math.abs(r),o=Math.max(Math.abs(n),Math.abs(r))===Math.abs(n),a=t.scrollHeight-t.clientHeight,s=t.scrollWidth-t.clientWidth,c=t.scrollTop,l=t.scrollLeft;t.scrollTo&&t.scrollTo(t.scrollLeft+1,t.scrollTop+1);var u=t.scrollTop,d=t.scrollLeft;return t.scrollTo&&t.scrollTo(t.scrollLeft-1,t.scrollTop-1),!((!i||a&&u-c&&(!a||!(t.scrollTop>=a&&r<0||t.scrollTop<=0&&r>0)))&&(!o||s&&d-l&&(!s||!(t.scrollLeft>=s&&n<0||t.scrollLeft<=0&&n>0))))&&this.getTouchParentScroll(e,t.parentNode,n,r)},removeStartHandler:function(e){e.touches.length>1||(this.startPos={x:e.touches[0].clientX,y:e.touches[0].clientY})},removeMoveHandler:function(e){if(!(e.changedTouches.length>1)){var t=e.currentTarget,n=e.changedTouches[0].clientX-this.startPos.x,r=e.changedTouches[0].clientY-this.startPos.y;(t===this.maskDom||t===this.handlerdom||t===this.contentDom&&this.getTouchParentScroll(t,e.target,n,r))&&e.preventDefault()}},trnasitionEnd:function(e){C(e.target,k,this.trnasitionEnd),e.target.style.transition=""},defaultGetContainer:function(){if(D)return null;var e=document.createElement("div");return this.parent.appendChild(e),this.wrapperClassName&&(e.className=this.wrapperClassName),e}},render:function(){var e=this,t=arguments[0],n=this.$props,r=n.getContainer,i=n.wrapperClassName,o=n.handler,a=n.forceRender,s=this.getOpen(),c=null;H[this.drawerId]=s?this.container:s;var l=this.getChildToRender(!!this.sFirstEnter&&s);if(!r){var d=[{name:"ant-ref",value:function(t){e.container=t}}];return t("div",u()([{class:i},{directives:d}]),[l])}if(!this.container||!s&&!this.sFirstEnter)return null;var h=!!o||a;return(h||s||this.dom)&&(c=t(T.A,{attrs:{getContainer:this.getSelfContainer,children:l}})),c}},V=Y,P=V,E=n(40255),j=n(25592),F=n(44807),I={name:"ADrawer",props:{closable:y.A.bool.def(!0),destroyOnClose:y.A.bool,getContainer:y.A.any,maskClosable:y.A.bool.def(!0),mask:y.A.bool.def(!0),maskStyle:y.A.object,wrapStyle:y.A.object,bodyStyle:y.A.object,headerStyle:y.A.object,drawerStyle:y.A.object,title:y.A.any,visible:y.A.bool,width:y.A.oneOfType([y.A.string,y.A.number]).def(256),height:y.A.oneOfType([y.A.string,y.A.number]).def(256),zIndex:y.A.number,prefixCls:y.A.string,placement:y.A.oneOf(["top","right","bottom","left"]).def("right"),level:y.A.any.def(null),wrapClassName:y.A.string,handle:y.A.any,afterVisibleChange:y.A.func,keyboard:y.A.bool.def(!0)},mixins:[p.A],data:function(){return this.destroyClose=!1,this.preVisible=this.$props.visible,{_push:!1}},inject:{parentDrawer:{default:function(){return null}},configProvider:{default:function(){return j.f}}},provide:function(){return{parentDrawer:this}},mounted:function(){var e=this.visible;e&&this.parentDrawer&&this.parentDrawer.push()},updated:function(){var e=this;this.$nextTick(function(){e.preVisible!==e.visible&&e.parentDrawer&&(e.visible?e.parentDrawer.push():e.parentDrawer.pull()),e.preVisible=e.visible})},beforeDestroy:function(){this.parentDrawer&&this.parentDrawer.pull()},methods:{domFocus:function(){this.$refs.vcDrawer&&this.$refs.vcDrawer.domFocus()},close:function(e){this.$emit("close",e)},push:function(){this.setState({_push:!0})},pull:function(){var e=this;this.setState({_push:!1},function(){e.domFocus()})},onDestroyTransitionEnd:function(){var e=this.getDestroyOnClose();e&&(this.visible||(this.destroyClose=!0,this.$forceUpdate()))},getDestroyOnClose:function(){return this.destroyOnClose&&!this.visible},getPushTransform:function(e){return"left"===e||"right"===e?"translateX("+("left"===e?180:-180)+"px)":"top"===e||"bottom"===e?"translateY("+("top"===e?180:-180)+"px)":void 0},getRcDrawerStyle:function(){var e=this.$props,t=e.zIndex,n=e.placement,r=e.wrapStyle,i=this.$data._push;return(0,o.A)({zIndex:t,transform:i?this.getPushTransform(n):void 0},r)},renderHeader:function(e){var t=this.$createElement,n=this.$props,r=n.closable,i=n.headerStyle,o=(0,m.nu)(this,"title");if(!o&&!r)return null;var a=o?e+"-header":e+"-header-no-title";return t("div",{class:a,style:i},[o&&t("div",{class:e+"-title"},[o]),r?this.renderCloseIcon(e):null])},renderCloseIcon:function(e){var t=this.$createElement,n=this.closable;return n&&t("button",{key:"closer",on:{click:this.close},attrs:{"aria-label":"Close"},class:e+"-close"},[t(E.A,{attrs:{type:"close"}})])},renderBody:function(e){var t=this.$createElement;if(this.destroyClose&&!this.visible)return null;this.destroyClose=!1;var n=this.$props,r=n.bodyStyle,i=n.drawerStyle,a={},s=this.getDestroyOnClose();return s&&(a.opacity=0,a.transition="opacity .3s"),t("div",{class:e+"-wrapper-body",style:(0,o.A)({},a,i),on:{transitionend:this.onDestroyTransitionEnd}},[this.renderHeader(e),t("div",{key:"body",class:e+"-body",style:r},[this.$slots["default"]])])}},render:function(){var e,t=arguments[0],n=(0,m.Oq)(this),a=n.prefixCls,l=n.width,u=n.height,d=n.visible,h=n.placement,f=n.wrapClassName,p=n.mask,v=(0,i.A)(n,["prefixCls","width","height","visible","placement","wrapClassName","mask"]),g=p?"":"no-mask",y={};"left"===h||"right"===h?y.width="number"===typeof l?l+"px":l:y.height="number"===typeof u?u+"px":u;var _=(0,m.nu)(this,"handle")||!1,b=this.configProvider.getPrefixCls,M=b("drawer",a),A={ref:"vcDrawer",props:(0,o.A)({},(0,c.A)(v,["closable","destroyOnClose","drawerStyle","headerStyle","bodyStyle","title","push","visible","getPopupContainer","rootPrefixCls","getPrefixCls","renderEmpty","csp","pageHeader","autoInsertSpaceInButton"]),{handler:_},y,{prefixCls:M,open:d,showMask:p,placement:h,className:s()((e={},(0,r.A)(e,f,!!f),(0,r.A)(e,g,!!g),e)),wrapStyle:this.getRcDrawerStyle()}),on:(0,o.A)({},(0,m.WM)(this))};return t(P,A,[this.renderBody(M)])},install:function(e){e.use(F.A),e.component(I.name,I)}},$=I},25537:function(e,t,n){"use strict";n(29229)},13185:function(e,t,n){"use strict";var r=n(5748),i=n(85505),o=n(49084),a=n(26997),s=n(49872),c=n(57981),l=n(4718),u=n(15848),d=n(81156),h=n(25592),f=n(40255),p=(0,a.A)(),m=(0,d.A)(),v=o.A.Group,g=(0,i.A)({},s.E,m,{type:l.A.oneOf(["primary","ghost","dashed","danger","default"]).def("default"),size:l.A.oneOf(["small","large","default"]).def("default"),htmlType:p.htmlType,href:l.A.string,disabled:l.A.bool,prefixCls:l.A.string,placement:m.placement.def("bottomRight"),icon:l.A.any,title:l.A.string});t.A={name:"ADropdownButton",model:{prop:"visible",event:"visibleChange"},props:g,provide:function(){return{savePopupRef:this.savePopupRef}},inject:{configProvider:{default:function(){return h.f}}},methods:{savePopupRef:function(e){this.popupRef=e},onClick:function(e){this.$emit("click",e)},onVisibleChange:function(e){this.$emit("visibleChange",e)}},render:function(){var e=arguments[0],t=this.$props,n=t.type,a=t.disabled,s=t.htmlType,l=t.prefixCls,d=t.trigger,h=t.align,p=t.visible,m=t.placement,g=t.getPopupContainer,y=t.href,_=t.title,b=(0,r.A)(t,["type","disabled","htmlType","prefixCls","trigger","align","visible","placement","getPopupContainer","href","title"]),M=(0,u.nu)(this,"icon")||e(f.A,{attrs:{type:"ellipsis"}}),A=this.configProvider.getPopupContainer,w=this.configProvider.getPrefixCls,x=w("dropdown-button",l),k={props:{align:h,disabled:a,trigger:a?[]:d,placement:m,getPopupContainer:g||A},on:{visibleChange:this.onVisibleChange}};(0,u.cK)(this,"visible")&&(k.props.visible=p);var L={props:(0,i.A)({},b),class:x};return e(v,L,[e(o.A,{attrs:{type:n,disabled:a,htmlType:s,href:y,title:_},on:{click:this.onClick}},[this.$slots["default"]]),e(c.A,k,[e("template",{slot:"overlay"},[(0,u.nu)(this,"overlay")]),e(o.A,{attrs:{type:n}},[M])])])}}},57981:function(e,t,n){"use strict";n.d(t,{A:function(){return A}});var r=n(85505),i=n(5748),o=n(4718),a=n(47006),s={adjustX:1,adjustY:1},c=[0,0],l={topLeft:{points:["bl","tl"],overflow:s,offset:[0,-4],targetOffset:c},topCenter:{points:["bc","tc"],overflow:s,offset:[0,-4],targetOffset:c},topRight:{points:["br","tr"],overflow:s,offset:[0,-4],targetOffset:c},bottomLeft:{points:["tl","bl"],overflow:s,offset:[0,4],targetOffset:c},bottomCenter:{points:["tc","bc"],overflow:s,offset:[0,4],targetOffset:c},bottomRight:{points:["tr","br"],overflow:s,offset:[0,4],targetOffset:c}},u=l,d=n(15848),h=n(52315),f=n(51927),p={mixins:[h.A],props:{minOverlayWidthMatchTrigger:o.A.bool,prefixCls:o.A.string.def("rc-dropdown"),transitionName:o.A.string,overlayClassName:o.A.string.def(""),openClassName:o.A.string,animation:o.A.any,align:o.A.object,overlayStyle:o.A.object.def(function(){return{}}),placement:o.A.string.def("bottomLeft"),overlay:o.A.any,trigger:o.A.array.def(["hover"]),alignPoint:o.A.bool,showAction:o.A.array.def([]),hideAction:o.A.array.def([]),getPopupContainer:o.A.func,visible:o.A.bool,defaultVisible:o.A.bool.def(!1),mouseEnterDelay:o.A.number.def(.15),mouseLeaveDelay:o.A.number.def(.1)},data:function(){var e=this.defaultVisible;return(0,d.cK)(this,"visible")&&(e=this.visible),{sVisible:e}},watch:{visible:function(e){void 0!==e&&this.setState({sVisible:e})}},methods:{onClick:function(e){(0,d.cK)(this,"visible")||this.setState({sVisible:!1}),this.$emit("overlayClick",e),this.childOriginEvents.click&&this.childOriginEvents.click(e)},onVisibleChange:function(e){(0,d.cK)(this,"visible")||this.setState({sVisible:e}),this.__emit("visibleChange",e)},getMinOverlayWidthMatchTrigger:function(){var e=(0,d.Oq)(this),t=e.minOverlayWidthMatchTrigger,n=e.alignPoint;return"minOverlayWidthMatchTrigger"in e?t:!n},getOverlayElement:function(){var e=this.overlay||this.$slots.overlay||this.$scopedSlots.overlay,t=void 0;return t="function"===typeof e?e():e,t},getMenuElement:function(){var e=this,t=this.onClick,n=this.prefixCls,r=this.$slots;this.childOriginEvents=(0,d.kQ)(r.overlay[0]);var i=this.getOverlayElement(),o={props:{prefixCls:n+"-menu",getPopupContainer:function(){return e.getPopupDomNode()}},on:{click:t}};return"string"===typeof i.type&&delete o.props.prefixCls,(0,f.Ob)(r.overlay[0],o)},getMenuElementOrLambda:function(){var e=this.overlay||this.$slots.overlay||this.$scopedSlots.overlay;return"function"===typeof e?this.getMenuElement:this.getMenuElement()},getPopupDomNode:function(){return this.$refs.trigger.getPopupDomNode()},getOpenClassName:function(){var e=this.$props,t=e.openClassName,n=e.prefixCls;return void 0!==t?t:n+"-open"},afterVisibleChange:function(e){if(e&&this.getMinOverlayWidthMatchTrigger()){var t=this.getPopupDomNode(),n=this.$el;n&&t&&n.offsetWidth>t.offsetWidth&&(t.style.minWidth=n.offsetWidth+"px",this.$refs.trigger&&this.$refs.trigger._component&&this.$refs.trigger._component.$refs&&this.$refs.trigger._component.$refs.alignInstance&&this.$refs.trigger._component.$refs.alignInstance.forceAlign())}},renderChildren:function(){var e=this.$slots["default"]&&this.$slots["default"][0],t=this.sVisible;return t&&e?(0,f.Ob)(e,{class:this.getOpenClassName()}):e}},render:function(){var e=arguments[0],t=this.$props,n=t.prefixCls,o=t.transitionName,s=t.animation,c=t.align,l=t.placement,d=t.getPopupContainer,h=t.showAction,f=t.hideAction,p=t.overlayClassName,m=t.overlayStyle,v=t.trigger,g=(0,i.A)(t,["prefixCls","transitionName","animation","align","placement","getPopupContainer","showAction","hideAction","overlayClassName","overlayStyle","trigger"]),y=f;y||-1===v.indexOf("contextmenu")||(y=["click"]);var _={props:(0,r.A)({},g,{prefixCls:n,popupClassName:p,popupStyle:m,builtinPlacements:u,action:v,showAction:h,hideAction:y||[],popupPlacement:l,popupAlign:c,popupTransitionName:o,popupAnimation:s,popupVisible:this.sVisible,afterPopupVisibleChange:this.afterVisibleChange,getPopupContainer:d}),on:{popupVisibleChange:this.onVisibleChange},ref:"trigger"};return e(a.A,_,[this.renderChildren(),e("template",{slot:"popup"},[this.$slots.overlay&&this.getMenuElement()])])}},m=p,v=n(13185),g=n(81156),y=n(25592),_=n(40255),b=(0,g.A)(),M={name:"ADropdown",props:(0,r.A)({},b,{prefixCls:o.A.string,mouseEnterDelay:o.A.number.def(.15),mouseLeaveDelay:o.A.number.def(.1),placement:b.placement.def("bottomLeft")}),model:{prop:"visible",event:"visibleChange"},provide:function(){return{savePopupRef:this.savePopupRef}},inject:{configProvider:{default:function(){return y.f}}},methods:{savePopupRef:function(e){this.popupRef=e},getTransitionName:function(){var e=this.$props,t=e.placement,n=void 0===t?"":t,r=e.transitionName;return void 0!==r?r:n.indexOf("top")>=0?"slide-down":"slide-up"},renderOverlay:function(e){var t=this.$createElement,n=(0,d.nu)(this,"overlay"),r=Array.isArray(n)?n[0]:n,i=r&&(0,d.Ts)(r),o=i||{},a=o.selectable,s=void 0!==a&&a,c=o.focusable,l=void 0===c||c,u=t("span",{class:e+"-menu-submenu-arrow"},[t(_.A,{attrs:{type:"right"},class:e+"-menu-submenu-arrow-icon"})]),h=r&&r.componentOptions?(0,f.Ob)(r,{props:{mode:"vertical",selectable:s,focusable:l,expandIcon:u}}):n;return h}},render:function(){var e=arguments[0],t=this.$slots,n=(0,d.Oq)(this),i=n.prefixCls,o=n.trigger,a=n.disabled,s=n.getPopupContainer,c=this.configProvider.getPopupContainer,l=this.configProvider.getPrefixCls,u=l("dropdown",i),h=(0,f.Ob)(t["default"],{class:u+"-trigger",props:{disabled:a}}),p=a?[]:o,v=void 0;p&&-1!==p.indexOf("contextmenu")&&(v=!0);var g={props:(0,r.A)({alignPoint:v},n,{prefixCls:u,getPopupContainer:s||c,transitionName:this.getTransitionName(),trigger:p}),on:(0,d.WM)(this)};return e(m,g,[h,e("template",{slot:"overlay"},[this.renderOverlay(u)])])}};M.Button=v.A;var A=M},81156:function(e,t,n){"use strict";var r=n(4718);t.A=function(){return{trigger:r.A.array.def(["hover"]),overlay:r.A.any,visible:r.A.bool,disabled:r.A.bool,align:r.A.object,getPopupContainer:r.A.func,prefixCls:r.A.string,transitionName:r.A.string,placement:r.A.oneOf(["topLeft","topCenter","topRight","bottomLeft","bottomCenter","bottomRight"]),overlayClassName:r.A.string,overlayStyle:r.A.object,forceRender:r.A.bool,mouseEnterDelay:r.A.number,mouseLeaveDelay:r.A.number,openClassName:r.A.string,minOverlayWidthMatchTrigger:r.A.bool}}},77197:function(e,t,n){"use strict";var r=n(57981),i=n(13185),o=n(44807);r.A.Button=i.A,r.A.install=function(e){e.use(o.A),e.component(r.A.name,r.A),e.component(i.A.name,i.A)},t.Ay=r.A},63713:function(e,t,n){"use strict";n(29229),n(27902)},2970:function(e,t,n){"use strict";n.d(t,{Ay:function(){return g}});var r=n(75189),i=n.n(r),o=n(97479),a=n(44508),s=n(85505),c=n(4718),l=n(25592),u=n(15848),d=n(38377),h={functional:!0,PRESENTED_IMAGE_DEFAULT:!0,render:function(){var e=arguments[0];return e("svg",{attrs:{width:"184",height:"152",viewBox:"0 0 184 152",xmlns:"http://www.w3.org/2000/svg"}},[e("g",{attrs:{fill:"none",fillRule:"evenodd"}},[e("g",{attrs:{transform:"translate(24 31.67)"}},[e("ellipse",{attrs:{fillOpacity:".8",fill:"#F5F5F7",cx:"67.797",cy:"106.89",rx:"67.797",ry:"12.668"}}),e("path",{attrs:{d:"M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z",fill:"#AEB8C2"}}),e("path",{attrs:{d:"M101.537 86.214L80.63 61.102c-1.001-1.207-2.507-1.867-4.048-1.867H31.724c-1.54 0-3.047.66-4.048 1.867L6.769 86.214v13.792h94.768V86.214z",fill:"url(#linearGradient-1)",transform:"translate(13.56)"}}),e("path",{attrs:{d:"M33.83 0h67.933a4 4 0 0 1 4 4v93.344a4 4 0 0 1-4 4H33.83a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z",fill:"#F5F5F7"}}),e("path",{attrs:{d:"M42.678 9.953h50.237a2 2 0 0 1 2 2V36.91a2 2 0 0 1-2 2H42.678a2 2 0 0 1-2-2V11.953a2 2 0 0 1 2-2zM42.94 49.767h49.713a2.262 2.262 0 1 1 0 4.524H42.94a2.262 2.262 0 0 1 0-4.524zM42.94 61.53h49.713a2.262 2.262 0 1 1 0 4.525H42.94a2.262 2.262 0 0 1 0-4.525zM121.813 105.032c-.775 3.071-3.497 5.36-6.735 5.36H20.515c-3.238 0-5.96-2.29-6.734-5.36a7.309 7.309 0 0 1-.222-1.79V69.675h26.318c2.907 0 5.25 2.448 5.25 5.42v.04c0 2.971 2.37 5.37 5.277 5.37h34.785c2.907 0 5.277-2.421 5.277-5.393V75.1c0-2.972 2.343-5.426 5.25-5.426h26.318v33.569c0 .617-.077 1.216-.221 1.789z",fill:"#DCE0E6"}})]),e("path",{attrs:{d:"M149.121 33.292l-6.83 2.65a1 1 0 0 1-1.317-1.23l1.937-6.207c-2.589-2.944-4.109-6.534-4.109-10.408C138.802 8.102 148.92 0 161.402 0 173.881 0 184 8.102 184 18.097c0 9.995-10.118 18.097-22.599 18.097-4.528 0-8.744-1.066-12.28-2.902z",fill:"#DCE0E6"}}),e("g",{attrs:{transform:"translate(149.65 15.383)",fill:"#FFF"}},[e("ellipse",{attrs:{cx:"20.654",cy:"3.167",rx:"2.849",ry:"2.815"}}),e("path",{attrs:{d:"M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z"}})])])])}},f={functional:!0,PRESENTED_IMAGE_SIMPLE:!0,render:function(){var e=arguments[0];return e("svg",{attrs:{width:"64",height:"41",viewBox:"0 0 64 41",xmlns:"http://www.w3.org/2000/svg"}},[e("g",{attrs:{transform:"translate(0 1)",fill:"none",fillRule:"evenodd"}},[e("ellipse",{attrs:{fill:"#F5F5F5",cx:"32",cy:"33",rx:"32",ry:"7"}}),e("g",{attrs:{fillRule:"nonzero",stroke:"#D9D9D9"}},[e("path",{attrs:{d:"M55 12.76L44.854 1.258C44.367.474 43.656 0 42.907 0H21.093c-.749 0-1.46.474-1.947 1.257L9 12.761V22h46v-9.24z"}}),e("path",{attrs:{d:"M41.613 15.931c0-1.605.994-2.93 2.227-2.931H55v18.137C55 33.26 53.68 35 52.05 35h-40.1C10.32 35 9 33.259 9 31.137V13h11.16c1.233 0 2.227 1.323 2.227 2.928v.022c0 1.605 1.005 2.901 2.237 2.901h14.752c1.232 0 2.237-1.308 2.237-2.913v-.007z",fill:"#FAFAFA"}})])])])}},p=n(44807),m=function(){return{prefixCls:c.A.string,image:c.A.any,description:c.A.any,imageStyle:c.A.object}},v={name:"AEmpty",props:(0,s.A)({},m()),inject:{configProvider:{default:function(){return l.f}}},methods:{renderEmpty:function(e){var t=this.$createElement,n=this.$props,r=n.prefixCls,s=n.imageStyle,c=this.configProvider.getPrefixCls,l=c("empty",r),d=(0,u.nu)(this,"image")||t(h),f=(0,u.nu)(this,"description"),p="undefined"!==typeof f?f:e.description,m="string"===typeof p?p:"empty",v=(0,a.A)({},l,!0),g=null;if("string"===typeof d)g=t("img",{attrs:{alt:m,src:d}});else if("object"===("undefined"===typeof d?"undefined":(0,o.A)(d))&&d.PRESENTED_IMAGE_SIMPLE){var y=d;g=t(y),v[l+"-normal"]=!0}else g=d;return t("div",i()([{class:v},{on:(0,u.WM)(this)}]),[t("div",{class:l+"-image",style:s},[g]),p&&t("p",{class:l+"-description"},[p]),this.$slots["default"]&&t("div",{class:l+"-footer"},[this.$slots["default"]])])}},render:function(){var e=arguments[0];return e(d.A,{attrs:{componentName:"Empty"},scopedSlots:{default:this.renderEmpty}})}};v.PRESENTED_IMAGE_DEFAULT=h,v.PRESENTED_IMAGE_SIMPLE=f,v.install=function(e){e.use(p.A),e.component(v.name,v)};var g=v},93693:function(e,t,n){"use strict";n(29229)},70742:function(e,t,n){"use strict";n.d(t,{Ay:function(){return O}});var r=n(85471),i=n(44508),o=n(85505),a=n(4718),s=n(46942),c=n.n(s),l=n(43594),u=n(69607),d=n.n(u),h=n(36873),f=n(32173),p=n(88055),m=n.n(p),v=n(15848),g=n(52315),y=n(25592),_=n(75837),b=n(51927);function M(){}function A(e,t,n){var r=e;t=t.replace(/\[(\w+)\]/g,".$1"),t=t.replace(/^\./,"");for(var i=t.split("."),o=0,a=i.length;o1&&void 0!==arguments[1]?arguments[1]:M;this.validateDisabled=!1;var r=this.getFilteredRule(e);if(!r||0===r.length)return n(),!0;this.validateState="validating";var i={};r&&r.length>0&&r.forEach(function(e){delete e.trigger}),i[this.prop]=r;var o=new f.A(i);this.FormContext&&this.FormContext.validateMessages&&o.messages(this.FormContext.validateMessages);var a={};a[this.prop]=this.fieldValue,o.validate(a,{firstFields:!0},function(e,r){t.validateState=e?"error":"success",t.validateMessage=e?e[0].message:"",n(t.validateMessage,r),t.FormContext&&t.FormContext.$emit&&t.FormContext.$emit("validate",t.prop,!e,t.validateMessage||null)})},getRules:function(){var e=this.FormContext.rules,t=this.rules,n=void 0!==this.required?{required:!!this.required,trigger:"change"}:[],r=A(e,this.prop||"");return e=e?r.o[this.prop||""]||r.v:[],[].concat(t||e||[]).concat(n)},getFilteredRule:function(e){var t=this.getRules();return t.filter(function(t){return!t.trigger||""===e||(Array.isArray(t.trigger)?t.trigger.indexOf(e)>-1:t.trigger===e)}).map(function(e){return(0,o.A)({},e)})},onFieldBlur:function(){this.validate("blur")},onFieldChange:function(){this.validateDisabled?this.validateDisabled=!1:this.validate("change")},clearValidate:function(){this.validateState="",this.validateMessage="",this.validateDisabled=!1},resetField:function(){var e=this;this.validateState="",this.validateMessage="";var t=this.FormContext.model||{},n=this.fieldValue,r=this.prop;-1!==r.indexOf(":")&&(r=r.replace(/:/,"."));var i=A(t,r,!0);this.validateDisabled=!0,Array.isArray(n)?i.o[i.k]=[].concat(this.initialValue):i.o[i.k]=this.initialValue,this.$nextTick(function(){e.validateDisabled=!1})}},render:function(){var e=this,t=arguments[0],n=this.$slots,r=this.$scopedSlots,i=(0,v.Oq)(this),a=(0,v.nu)(this,"label"),s=(0,v.nu)(this,"extra"),c=(0,v.nu)(this,"help"),l={props:(0,o.A)({},i,{label:a,extra:s,validateStatus:this.validateState,help:this.validateMessage||c,required:this.isRequired||i.required})},u=(0,v.Gk)(r["default"]?r["default"]():n["default"]),d=u[0];if(this.prop&&this.autoLink&&(0,v.zO)(d)){var h=(0,v.kQ)(d),f=h.blur,p=h.change;d=(0,b.Ob)(d,{on:{blur:function(){f&&f.apply(void 0,arguments),e.onFieldBlur()},change:function(){if(Array.isArray(p))for(var t=0,n=p.length;t0&&void 0!==arguments[0]?arguments[0]:[],t=e.length?"string"===typeof e?this.fields.filter(function(t){return e===t.prop}):this.fields.filter(function(t){return e.indexOf(t.prop)>-1}):this.fields;t.forEach(function(e){e.clearValidate()})},validate:function(e){var t=this;if(this.model){var n=void 0;"function"!==typeof e&&window.Promise&&(n=new window.Promise(function(t,n){e=function(e){e?t(e):n(e)}}));var r=!0,i=0;0===this.fields.length&&e&&e(!0);var a={};return this.fields.forEach(function(n){n.validate("",function(n,s){n&&(r=!1),a=(0,o.A)({},a,s),"function"===typeof e&&++i===t.fields.length&&e(r,a)})}),n||void 0}(0,h.A)(!1,"FormModel","model is required for resetFields to work.")},validateField:function(e,t){e=[].concat(e);var n=this.fields.filter(function(t){return-1!==e.indexOf(t.prop)});n.length?n.forEach(function(e){e.validate("",t)}):(0,h.A)(!1,"FormModel","please pass correct props!")}},render:function(){var e,t=arguments[0],n=this.prefixCls,r=this.hideRequiredMark,o=this.layout,a=this.onSubmit,s=this.$slots,l=this.configProvider.getPrefixCls,u=l("form",n),d=c()(u,(e={},(0,i.A)(e,u+"-horizontal","horizontal"===o),(0,i.A)(e,u+"-vertical","vertical"===o),(0,i.A)(e,u+"-inline","inline"===o),(0,i.A)(e,u+"-hide-required-mark",r),e));return t("form",{on:{submit:a},class:d},[s["default"]])}}),C=L,S=n(24415),z=n(35745),T=n(44807);r.Ay.use(S.A,{name:"ant-ref"}),r.Ay.use(z.A),C.install=function(e){e.use(T.A),e.component(C.name,C),e.component(C.Item.name,C.Item)};var O=C},98688:function(e,t,n){"use strict";n(29229),n(67434)},75837:function(e,t,n){"use strict";var r=n(97479),i=n(44508),o=n(5748),a=n(75189),s=n.n(a),c=n(32779),l=n(4718),u=n(46942),d=n.n(u),h=n(7309),f=n.n(h),p=n(9712),m=n(43594),v=n(36873),g=n(20355),y=n(15848),_=n(80178),b=n(52315),M=n(51927),A=n(40255),w=n(25592);function x(){}function k(e){return e.reduce(function(e,t){return[].concat((0,c.A)(e),[" ",t])},[]).slice(1)}var L={id:l.A.string,htmlFor:l.A.string,prefixCls:l.A.string,label:l.A.any,labelCol:l.A.shape(m.fZ).loose,wrapperCol:l.A.shape(m.fZ).loose,help:l.A.any,extra:l.A.any,validateStatus:l.A.oneOf(["","success","warning","error","validating"]),hasFeedback:l.A.bool,required:l.A.bool,colon:l.A.bool,fieldDecoratorId:l.A.string,fieldDecoratorOptions:l.A.object,selfUpdate:l.A.bool,labelAlign:l.A.oneOf(["left","right"])};function C(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n=!1,r=0,i=e.length;r0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n=[],r=0;r0)break;var i=e[r];if((i.tag||""!==i.text.trim())&&!(0,y.xr)(i).__ANT_FORM_ITEM){var o=(0,y.rz)(i),a=i.data&&i.data.attrs||{};g.H in a?n.push(i):o&&(n=n.concat(this.getControls(o,t)))}}return n},getOnlyControl:function(){var e=this.getControls(this.slotDefault,!1)[0];return void 0!==e?e:null},getChildAttr:function(e){var t=this.getOnlyControl(),n={};if(t)return t.data?n=t.data:t.$vnode&&t.$vnode.data&&(n=t.$vnode.data),n[e]||n.attrs[e]},getId:function(){return this.getChildAttr("id")},getMeta:function(){return this.getChildAttr(g.H)},getField:function(){return this.getChildAttr(g.W)},getValidateStatus:function(){var e=this.getOnlyControl();if(!e)return"";var t=this.getField();if(t.validating)return"validating";if(t.errors)return"error";var n="value"in t?t.value:this.getMeta().initialValue;return void 0!==n&&null!==n&&""!==n?"success":""},onLabelClick:function(){var e=this.id||this.getId();if(e){var t=this.$el,n=t.querySelector('[id="'+e+'"]');n&&n.focus&&n.focus()}},onHelpAnimEnd:function(e,t){this.helpShow=t,t||this.$forceUpdate()},isRequired:function(){var e=this.required;if(void 0!==e)return e;if(this.getOnlyControl()){var t=this.getMeta()||{},n=t.validate||[];return n.filter(function(e){return!!e.rules}).some(function(e){return e.rules.some(function(e){return e.required})})}return!1},renderHelp:function(e){var t=this,n=this.$createElement,r=this.getHelpMessage(),i=r?n("div",{class:e+"-explain",key:"help"},[r]):null;i&&(this.helpShow=!!i);var o=(0,_.A)("show-help",{afterEnter:function(){return t.onHelpAnimEnd("help",!0)},afterLeave:function(){return t.onHelpAnimEnd("help",!1)}});return n("transition",s()([o,{key:"help"}]),[i])},renderExtra:function(e){var t=this.$createElement,n=(0,y.nu)(this,"extra");return n?t("div",{class:e+"-extra"},[n]):null},renderValidateWrapper:function(e,t,n,r){var i=this.$createElement,o=this.$props,a=this.getOnlyControl,s=void 0===o.validateStatus&&a?this.getValidateStatus():o.validateStatus,c=e+"-item-control";s&&(c=d()(e+"-item-control",{"has-feedback":s&&o.hasFeedback,"has-success":"success"===s,"has-warning":"warning"===s,"has-error":"error"===s,"is-validating":"validating"===s}));var l="";switch(s){case"success":l="check-circle";break;case"warning":l="exclamation-circle";break;case"error":l="close-circle";break;case"validating":l="loading";break;default:l="";break}var u=o.hasFeedback&&l?i("span",{class:e+"-item-children-icon"},[i(A.A,{attrs:{type:l,theme:"loading"===l?"outlined":"filled"}})]):null;return i("div",{class:c},[i("span",{class:e+"-item-children"},[t,u]),n,r])},renderWrapper:function(e,t){var n=this.$createElement,r=this.isFormItemChildren?{}:this.FormContext,i=r.wrapperCol,a=this.wrapperCol,s=a||i||{},c=s.style,l=s.id,u=s.on,h=(0,o.A)(s,["style","id","on"]),f=d()(e+"-item-control-wrapper",s["class"]),p={props:h,class:f,key:"wrapper",style:c,id:l,on:u};return n(m.Ay,p,[t])},renderLabel:function(e){var t,n=this.$createElement,r=this.FormContext,a=r.vertical,s=r.labelAlign,c=r.labelCol,l=r.colon,u=this.labelAlign,h=this.labelCol,f=this.colon,p=this.id,v=this.htmlFor,g=(0,y.nu)(this,"label"),_=this.isRequired(),b=h||c||{},M=u||s,A=e+"-item-label",w=d()(A,"left"===M&&A+"-left",b["class"]),x=(b["class"],b.style),k=b.id,L=b.on,C=(0,o.A)(b,["class","style","id","on"]),S=g,z=!0===f||!1!==l&&!1!==f,T=z&&!a;T&&"string"===typeof g&&""!==g.trim()&&(S=g.replace(/[::]\s*$/,""));var O=d()((t={},(0,i.A)(t,e+"-item-required",_),(0,i.A)(t,e+"-item-no-colon",!z),t)),H={props:C,class:w,key:"label",style:x,id:k,on:L};return g?n(m.Ay,H,[n("label",{attrs:{for:v||p||this.getId(),title:"string"===typeof g?g:""},class:O,on:{click:this.onLabelClick}},[S])]):null},renderChildren:function(e){return[this.renderLabel(e),this.renderWrapper(e,this.renderValidateWrapper(e,this.slotDefault,this.renderHelp(e),this.renderExtra(e)))]},renderFormItem:function(){var e,t=this.$createElement,n=this.$props.prefixCls,r=this.configProvider.getPrefixCls,o=r("form",n),a=this.renderChildren(o),s=(e={},(0,i.A)(e,o+"-item",!0),(0,i.A)(e,o+"-item-with-help",this.helpShow),e);return t(p.A,{class:d()(s),key:"row"},[a])},decoratorOption:function(e){if(e.data&&e.data.directives){var t=f()(e.data.directives,["name","decorator"]);return(0,v.A)(!t||t&&Array.isArray(t.value),"Form",'Invalid directive: type check failed for directive "decorator". Expected Array, got '+(0,r.A)(t?t.value:t)+". At "+e.tag+"."),t?t.value:null}return null},decoratorChildren:function(e){for(var t=this.FormContext,n=t.form.getFieldDecorator,r=0,i=e.length;r1),"Form","`autoFormCreate` just `decorator` then first children. but you can use JSX to support multiple children"),this.slotDefault=a}else o.form?(a=(0,M.pM)(a),this.slotDefault=this.decoratorChildren(a)):this.slotDefault=a;return this.renderFormItem()}}},20355:function(e,t,n){"use strict";n.d(t,{H:function(){return r},W:function(){return i}});var r="data-__meta",i="data-__field"},15001:function(e,t,n){"use strict";n.d(t,{Ay:function(){return Me}});var r=n(85471),i=n(44508),o=n(85505),a=n(4718),s=n(46942),c=n.n(s),l=n(43594),u=n(69607),d=n.n(u),h=n(36873),f=n(48204),p=n(61448),m=n.n(p),v=n(97479),g=n(5748),y=n(32779),_=n(32173),b=n(9771),M=n.n(b),A=n(58156),w=n.n(A),x=n(63560),k=n.n(x),L=n(75288),C=n.n(L),S=n(90179),z=n.n(S),T=n(9506),O=n(97588),H=function e(t){(0,T.A)(this,e),(0,o.A)(this,t)};function D(e){return e instanceof H}function Y(e){return D(e)?e:new H(e)}function V(e){return e.name||"WrappedComponent"}function P(e,t){return e.name="Form_"+V(t),e.WrappedComponent=t,e.props=(0,o.A)({},e.props,t.props),e}function E(e){return e}function j(e){return Array.prototype.concat.apply([],e)}function F(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments[1],n=arguments[2],r=arguments[3],i=arguments[4];if(n(e,t))i(e,t);else if(void 0===t||null===t);else if(Array.isArray(t))t.forEach(function(t,o){return F(e+"["+o+"]",t,n,r,i)});else{if("object"!==("undefined"===typeof t?"undefined":(0,v.A)(t)))return void M()(!1,r);Object.keys(t).forEach(function(o){var a=t[o];F(e+(e?".":"")+o,a,n,r,i)})}}function I(e,t,n){var r={};return F(void 0,e,t,n,function(e,t){r[e]=t}),r}function $(e,t,n){var r=e.map(function(e){var t=(0,o.A)({},e,{trigger:e.trigger||[]});return"string"===typeof t.trigger&&(t.trigger=[t.trigger]),t});return t&&r.push({trigger:n?[].concat(n):[],rules:t}),r}function R(e){return e.filter(function(e){return!!e.rules&&e.rules.length}).map(function(e){return e.trigger}).reduce(function(e,t){return e.concat(t)},[])}function N(e){if(!e||!e.target)return e;var t=e.target;return"checkbox"===t.type?t.checked:t.value}function W(e){return e?e.map(function(e){return e&&e.message?e.message:e}):e}function B(e,t,n){var r=e,i=t,o=n;return void 0===n&&("function"===typeof r?(o=r,i={},r=void 0):Array.isArray(r)?"function"===typeof i?(o=i,i={}):i=i||{}:(o=i,i=r||{},r=void 0)),{names:r,options:i,callback:o}}function K(e){return 0===Object.keys(e).length}function U(e){return!!e&&e.some(function(e){return e.rules&&e.rules.length})}function q(e,t){return 0===e.lastIndexOf(t,0)}function G(e,t){return 0===t.indexOf(e)&&-1!==[".","["].indexOf(t[e.length])}function J(e){return I(e,function(e,t){return D(t)},"You must wrap field data with `createFormField`.")}var X=function(){function e(t){(0,T.A)(this,e),Z.call(this),this.fields=J(t),this.fieldsMeta={}}return(0,O.A)(e,[{key:"updateFields",value:function(e){this.fields=J(e)}},{key:"flattenRegisteredFields",value:function(e){var t=this.getAllFieldsName();return I(e,function(e){return t.indexOf(e)>=0},'You cannot set a form field before rendering a field associated with the value. You can use `getFieldDecorator(id, options)` instead `v-decorator="[id, options]"` to register it before render.')}},{key:"setFields",value:function(e){var t=this,n=this.fieldsMeta,r=(0,o.A)({},this.fields,e),i={};Object.keys(n).forEach(function(e){i[e]=t.getValueFromFields(e,r)}),Object.keys(i).forEach(function(e){var n=i[e],a=t.getFieldMeta(e);if(a&&a.normalize){var s=a.normalize(n,t.getValueFromFields(e,t.fields),i);s!==n&&(r[e]=(0,o.A)({},r[e],{value:s}))}}),this.fields=r}},{key:"resetFields",value:function(e){var t=this.fields,n=e?this.getValidFieldsFullName(e):this.getAllFieldsName();return n.reduce(function(e,n){var r=t[n];return r&&"value"in r&&(e[n]={}),e},{})}},{key:"setFieldMeta",value:function(e,t){this.fieldsMeta[e]=t}},{key:"setFieldsAsDirty",value:function(){var e=this;Object.keys(this.fields).forEach(function(t){var n=e.fields[t],r=e.fieldsMeta[t];n&&r&&U(r.validate)&&(e.fields[t]=(0,o.A)({},n,{dirty:!0}))})}},{key:"getFieldMeta",value:function(e){return this.fieldsMeta[e]=this.fieldsMeta[e]||{},this.fieldsMeta[e]}},{key:"getValueFromFields",value:function(e,t){var n=t[e];if(n&&"value"in n)return n.value;var r=this.getFieldMeta(e);return r&&r.initialValue}},{key:"getValidFieldsName",value:function(){var e=this,t=this.fieldsMeta;return t?Object.keys(t).filter(function(t){return!e.getFieldMeta(t).hidden}):[]}},{key:"getAllFieldsName",value:function(){var e=this.fieldsMeta;return e?Object.keys(e):[]}},{key:"getValidFieldsFullName",value:function(e){var t=Array.isArray(e)?e:[e];return this.getValidFieldsName().filter(function(e){return t.some(function(t){return e===t||q(e,t)&&[".","["].indexOf(e[t.length])>=0})})}},{key:"getFieldValuePropValue",value:function(e){var t=e.name,n=e.getValueProps,r=e.valuePropName,o=this.getField(t),a="value"in o?o.value:e.initialValue;return n?n(a):(0,i.A)({},r,a)}},{key:"getField",value:function(e){return(0,o.A)({},this.fields[e],{name:e})}},{key:"getNotCollectedFields",value:function(){var e=this,t=this.getValidFieldsName();return t.filter(function(t){return!e.fields[t]}).map(function(t){return{name:t,dirty:!1,value:e.getFieldMeta(t).initialValue}}).reduce(function(e,t){return k()(e,t.name,Y(t))},{})}},{key:"getNestedAllFields",value:function(){var e=this;return Object.keys(this.fields).reduce(function(t,n){return k()(t,n,Y(e.fields[n]))},this.getNotCollectedFields())}},{key:"getFieldMember",value:function(e,t){return this.getField(e)[t]}},{key:"getNestedFields",value:function(e,t){var n=e||this.getValidFieldsName();return n.reduce(function(e,n){return k()(e,n,t(n))},{})}},{key:"getNestedField",value:function(e,t){var n=this.getValidFieldsFullName(e);if(0===n.length||1===n.length&&n[0]===e)return t(e);var r="["===n[0][e.length],i=r?e.length:e.length+1;return n.reduce(function(e,n){return k()(e,n.slice(i),t(n))},r?[]:{})}},{key:"isValidNestedFieldName",value:function(e){var t=this.getAllFieldsName();return t.every(function(t){return!G(t,e)&&!G(e,t)})}},{key:"clearField",value:function(e){delete this.fields[e],delete this.fieldsMeta[e]}}]),e}(),Z=function(){var e=this;this.setFieldsInitialValue=function(t){var n=e.flattenRegisteredFields(t),r=e.fieldsMeta;Object.keys(n).forEach(function(t){r[t]&&e.setFieldMeta(t,(0,o.A)({},e.getFieldMeta(t),{initialValue:n[t]}))})},this.getAllValues=function(){var t=e.fieldsMeta,n=e.fields;return Object.keys(t).reduce(function(t,r){return k()(t,r,e.getValueFromFields(r,n))},{})},this.getFieldsValue=function(t){return e.getNestedFields(t,e.getFieldValue)},this.getFieldValue=function(t){var n=e.fields;return e.getNestedField(t,function(t){return e.getValueFromFields(t,n)})},this.getFieldsError=function(t){return e.getNestedFields(t,e.getFieldError)},this.getFieldError=function(t){return e.getNestedField(t,function(t){return W(e.getFieldMember(t,"errors"))})},this.isFieldValidating=function(t){return e.getFieldMember(t,"validating")},this.isFieldsValidating=function(t){var n=t||e.getValidFieldsName();return n.some(function(t){return e.isFieldValidating(t)})},this.isFieldTouched=function(t){return e.getFieldMember(t,"touched")},this.isFieldsTouched=function(t){var n=t||e.getValidFieldsName();return n.some(function(t){return e.isFieldTouched(t)})}};function Q(e){return new X(e)}var ee=n(51927),te=n(52315),ne=n(15848),re="change";function ie(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=e.validateMessages,r=e.onFieldsChange,s=e.onValuesChange,c=e.mapProps,l=void 0===c?E:c,u=e.mapPropsToFields,d=e.fieldNameProp,h=e.fieldMetaProp,f=e.fieldDataProp,p=e.formPropName,m=void 0===p?"form":p,b=e.name,M=e.props,A=void 0===M?{}:M,x=e.templateContext;return function(e){var c={};Array.isArray(A)?A.forEach(function(e){c[e]=a.A.any}):c=A;var p={mixins:[te.A].concat((0,y.A)(t)),props:(0,o.A)({},c,{wrappedComponentRef:a.A.func.def(function(){})}),data:function(){var e=this,t=u&&u(this.$props);return this.fieldsStore=Q(t||{}),this.templateContext=x,this.instances={},this.cachedBind={},this.clearedFieldMetaCache={},this.formItems={},this.renderFields={},this.domFields={},["getFieldsValue","getFieldValue","setFieldsInitialValue","getFieldsError","getFieldError","isFieldValidating","isFieldsValidating","isFieldsTouched","isFieldTouched"].forEach(function(t){e[t]=function(){var n;return(n=e.fieldsStore)[t].apply(n,arguments)}}),{submitting:!1}},watch:x?{}:{$props:{handler:function(e){u&&this.fieldsStore.updateFields(u(e))},deep:!0}},mounted:function(){this.cleanUpUselessFields()},updated:function(){this.cleanUpUselessFields()},methods:{updateFields:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.fieldsStore.updateFields(u(e)),x&&x.$forceUpdate()},onCollectCommon:function(e,t,n){var r=this.fieldsStore.getFieldMeta(e);if(r[t])r[t].apply(r,(0,y.A)(n));else if(r.originalProps&&r.originalProps[t]){var a;(a=r.originalProps)[t].apply(a,(0,y.A)(n))}var c=r.getValueFromEvent?r.getValueFromEvent.apply(r,(0,y.A)(n)):N.apply(void 0,(0,y.A)(n));if(s&&c!==this.fieldsStore.getFieldValue(e)){var l=this.fieldsStore.getAllValues(),u={};l[e]=c,Object.keys(l).forEach(function(e){return k()(u,e,l[e])}),s((0,o.A)((0,i.A)({},m,this.getForm()),this.$props),k()({},e,c),u)}var d=this.fieldsStore.getField(e);return{name:e,field:(0,o.A)({},d,{value:c,touched:!0}),fieldMeta:r}},onCollect:function(e,t){for(var n=arguments.length,r=Array(n>2?n-2:0),a=2;a2?n-2:0),i=2;i1&&void 0!==arguments[1]?arguments[1]:{};if(!e)throw new Error("Must call `getFieldProps` with valid name string!");delete this.clearedFieldMetaCache[e];var r=(0,o.A)({name:e,trigger:re,valuePropName:"value",validate:[]},n),i=r.rules,a=r.trigger,s=r.validateTrigger,c=void 0===s?a:s,l=r.validate,u=this.fieldsStore.getFieldMeta(e);"initialValue"in r&&(u.initialValue=r.initialValue);var p=(0,o.A)({},this.fieldsStore.getFieldValuePropValue(r)),m={},v={};d&&(p[d]=b?b+"_"+e:e);var g=$(l,i,c),y=R(g);y.forEach(function(n){m[n]||(m[n]=t.getCacheBind(e,n,t.onCollectValidate))}),a&&-1===y.indexOf(a)&&(m[a]=this.getCacheBind(e,a,this.onCollect));var _=(0,o.A)({},u,r,{validate:g});return this.fieldsStore.setFieldMeta(e,_),h&&(v[h]=_),f&&(v[f]=this.fieldsStore.getField(e)),this.renderFields[e]=!0,{props:z()(p,["id"]),domProps:{value:p.value},attrs:(0,o.A)({},v,{id:p.id}),directives:[{name:"ant-ref",value:this.getCacheBind(e,e+"__ref",this.saveRef)}],on:m}},getFieldInstance:function(e){return this.instances[e]},getRules:function(e,t){var n=e.validate.filter(function(e){return!t||e.trigger.indexOf(t)>=0}).map(function(e){return e.rules});return j(n)},setFields:function(e,t){var n=this,i=this.fieldsStore.flattenRegisteredFields(e);this.fieldsStore.setFields(i);var o=Object.keys(i).reduce(function(e,t){return k()(e,t,n.fieldsStore.getField(t))},{});if(r){var a=Object.keys(i).reduce(function(e,t){return k()(e,t,n.fieldsStore.getField(t))},{});r(this,a,this.fieldsStore.getNestedAllFields())}var s=x||this,c=!1;Object.keys(o).forEach(function(e){var t=n.formItems[e];t="function"===typeof t?t():t,t&&t.itemSelfUpdate?t.$forceUpdate():c=!0}),c&&s.$forceUpdate(),this.$nextTick(function(){t&&t()})},setFieldsValue:function(e,t){var n=this.fieldsStore.fieldsMeta,r=this.fieldsStore.flattenRegisteredFields(e),a=Object.keys(r).reduce(function(e,t){var i=n[t];if(i){var o=r[t];e[t]={value:o}}return e},{});if(this.setFields(a,t),s){var c=this.fieldsStore.getAllValues();s((0,o.A)((0,i.A)({},m,this.getForm()),this.$props),e,c)}},saveRef:function(e,t,n){if(!n){var r=this.fieldsStore.getFieldMeta(e);return r.preserve||(this.clearedFieldMetaCache[e]={field:this.fieldsStore.getField(e),meta:r},this.clearField(e)),void delete this.domFields[e]}this.domFields[e]=!0,this.recoverClearedField(e),this.instances[e]=n},cleanUpUselessFields:function(){var e=this,t=this.fieldsStore.getAllFieldsName(),n=t.filter(function(t){var n=e.fieldsStore.getFieldMeta(t);return!e.renderFields[t]&&!e.domFields[t]&&!n.preserve});n.length&&n.forEach(this.clearField),this.renderFields={}},clearField:function(e){this.fieldsStore.clearField(e),delete this.instances[e],delete this.cachedBind[e]},resetFields:function(e){var t=this,n=this.fieldsStore.resetFields(e);if(Object.keys(n).length>0&&this.setFields(n),e){var r=Array.isArray(e)?e:[e];r.forEach(function(e){return delete t.clearedFieldMetaCache[e]})}else this.clearedFieldMetaCache={}},recoverClearedField:function(e){this.clearedFieldMetaCache[e]&&(this.fieldsStore.setFields((0,i.A)({},e,this.clearedFieldMetaCache[e].field)),this.fieldsStore.setFieldMeta(e,this.clearedFieldMetaCache[e].meta),delete this.clearedFieldMetaCache[e])},validateFieldsInternal:function(e,t,r){var i=this,a=t.fieldNames,s=t.action,c=t.options,l=void 0===c?{}:c,u={},d={},h={},f={};if(e.forEach(function(e){var t=e.name;if(!0===l.force||!1!==e.dirty){var n=i.fieldsStore.getFieldMeta(t),r=(0,o.A)({},e);r.errors=void 0,r.validating=!0,r.dirty=!0,u[t]=i.getRules(n,s),d[t]=r.value,h[t]=r}else e.errors&&k()(f,t,{errors:e.errors})}),this.setFields(h),Object.keys(d).forEach(function(e){d[e]=i.fieldsStore.getFieldValue(e)}),r&&K(h))r(K(f)?null:f,this.fieldsStore.getFieldsValue(a));else{var p=new _.A(u);n&&p.messages(n),p.validate(d,l,function(e){var t=(0,o.A)({},f);e&&e.length&&e.forEach(function(e){var n=e.field,r=n;Object.keys(u).some(function(e){var t=u[e]||[];if(e===n)return r=e,!0;if(t.every(function(e){var t=e.type;return"array"!==t})&&0!==n.indexOf(e))return!1;var i=n.slice(e.length+1);return!!/^\d+$/.test(i)&&(r=e,!0)});var i=w()(t,r);("object"!==("undefined"===typeof i?"undefined":(0,v.A)(i))||Array.isArray(i))&&k()(t,r,{errors:[]});var o=w()(t,r.concat(".errors"));o.push(e)});var n=[],s={};Object.keys(u).forEach(function(e){var r=w()(t,e),o=i.fieldsStore.getField(e);C()(o.value,d[e])?(o.errors=r&&r.errors,o.value=d[e],o.validating=!1,o.dirty=!1,s[e]=o):n.push({name:e})}),i.setFields(s),r&&(n.length&&n.forEach(function(e){var n=e.name,r=[{message:n+" need to revalidate",field:n}];k()(t,n,{expired:!0,errors:r})}),r(K(t)?null:t,i.fieldsStore.getFieldsValue(a)))})}},validateFields:function(e,t,n){var r=this,i=new Promise(function(i,o){var a=B(e,t,n),s=a.names,c=a.options,l=B(e,t,n),u=l.callback;if(!u||"function"===typeof u){var d=u;u=function(e,t){d?d(e,t):e?o({errors:e,values:t}):i(t)}}var h=s?r.fieldsStore.getValidFieldsFullName(s):r.fieldsStore.getValidFieldsName(),f=h.filter(function(e){var t=r.fieldsStore.getFieldMeta(e);return U(t.validate)}).map(function(e){var t=r.fieldsStore.getField(e);return t.value=r.fieldsStore.getFieldValue(e),t});f.length?("firstFields"in c||(c.firstFields=h.filter(function(e){var t=r.fieldsStore.getFieldMeta(e);return!!t.validateFirst})),r.validateFieldsInternal(f,{fieldNames:h,options:c},u)):u(null,r.fieldsStore.getFieldsValue(h))});return i["catch"](function(e){return console.error,e}),i},isSubmitting:function(){return this.submitting},submit:function(e){var t=this;var n=function(){t.setState({submitting:!1})};this.setState({submitting:!0}),e(n)}},render:function(){var t=arguments[0],n=this.$slots,r=this.$scopedSlots,a=(0,i.A)({},m,this.getForm()),s=(0,ne.Oq)(this),c=s.wrappedComponentRef,u=(0,g.A)(s,["wrappedComponentRef"]),d={props:l.call(this,(0,o.A)({},a,u)),on:(0,ne.WM)(this),ref:"WrappedComponent",directives:[{name:"ant-ref",value:c}]};Object.keys(r).length&&(d.scopedSlots=r);var h=Object.keys(n);return e?t(e,d,[h.length?h.map(function(e){return t("template",{slot:e},[n[e]])}):null]):null}};if(!e)return p;if(Array.isArray(e.props)){var M={};e.props.forEach(function(e){M[e]=a.A.any}),M[m]=Object,e.props=M}else e.props=e.props||{},m in e.props||(e.props[m]=Object);return P(p,e)}}var oe=ie,ae={methods:{getForm:function(){return{getFieldsValue:this.fieldsStore.getFieldsValue,getFieldValue:this.fieldsStore.getFieldValue,getFieldInstance:this.getFieldInstance,setFieldsValue:this.setFieldsValue,setFields:this.setFields,setFieldsInitialValue:this.fieldsStore.setFieldsInitialValue,getFieldDecorator:this.getFieldDecorator,getFieldProps:this.getFieldProps,getFieldsError:this.fieldsStore.getFieldsError,getFieldError:this.fieldsStore.getFieldError,isFieldValidating:this.fieldsStore.isFieldValidating,isFieldsValidating:this.fieldsStore.isFieldsValidating,isFieldsTouched:this.fieldsStore.isFieldsTouched,isFieldTouched:this.fieldsStore.isFieldTouched,isSubmitting:this.isSubmitting,submit:this.submit,validateFields:this.validateFields,resetFields:this.resetFields}}}};function se(e,t){var n=window.getComputedStyle,r=n?n(e):e.currentStyle;if(r)return r[t.replace(/-(\w)/gi,function(e,t){return t.toUpperCase()})]}function ce(e){var t=e,n=void 0;while("body"!==(n=t.nodeName.toLowerCase())){var r=se(t,"overflowY");if(t!==e&&("auto"===r||"scroll"===r)&&t.scrollHeight>t.clientHeight)return t;t=t.parentNode}return"body"===n?t.ownerDocument:t}var le={methods:{getForm:function(){return(0,o.A)({},ae.methods.getForm.call(this),{validateFieldsAndScroll:this.validateFieldsAndScroll})},validateFieldsAndScroll:function(e,t,n){var r=this,i=B(e,t,n),a=i.names,s=i.callback,c=i.options,l=function(e,t){if(e){var n=r.fieldsStore.getValidFieldsName(),i=void 0,a=void 0;if(n.forEach(function(t){if(m()(e,t)){var n=r.getFieldInstance(t);if(n){var o=n.$el||n.elm,s=o.getBoundingClientRect().top;"hidden"!==o.type&&(void 0===a||a>s)&&(a=s,i=o)}}}),i){var l=c.container||ce(i);(0,f.A)(i,l,(0,o.A)({onlyScrollIfNeeded:!0},c.scroll))}}"function"===typeof s&&s(e,t)};return this.validateFields(a,c,l)}}};function ue(e){return oe((0,o.A)({},e),[le])}var de=ue,he=n(75837),fe=n(20355),pe=n(25592),me=n(44807),ve=(a.A.func,a.A.func,a.A.func,a.A.any,a.A.bool,a.A.string,a.A.func,a.A.func,a.A.func,a.A.func,a.A.func,a.A.func,a.A.func,a.A.func,a.A.func,a.A.func,a.A.func,a.A.func,a.A.func,{layout:a.A.oneOf(["horizontal","inline","vertical"]),labelCol:a.A.shape(l.fZ).loose,wrapperCol:a.A.shape(l.fZ).loose,colon:a.A.bool,labelAlign:a.A.oneOf(["left","right"]),form:a.A.object,prefixCls:a.A.string,hideRequiredMark:a.A.bool,autoFormCreate:a.A.func,options:a.A.object,selfUpdate:a.A.bool}),ge=(a.A.oneOfType([a.A.string,a.A.func]),a.A.string,a.A.boolean,a.A.boolean,a.A.number,a.A.number,a.A.number,a.A.oneOfType([String,a.A.arrayOf(String)]),a.A.custom(d()),a.A.func,a.A.func,{name:"AForm",props:(0,ne.CB)(ve,{layout:"horizontal",hideRequiredMark:!1,colon:!0}),Item:he.A,createFormField:Y,create:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return de((0,o.A)({fieldNameProp:"id"},e,{fieldMetaProp:fe.H,fieldDataProp:fe.W}))},createForm:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=me.A.Vue||r.Ay;return new n(ge.create((0,o.A)({},t,{templateContext:e}))())},created:function(){this.formItemContexts=new Map},provide:function(){var e=this;return{FormContext:this,collectFormItemContext:this.form&&this.form.templateContext?function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"add",r=e.formItemContexts,i=r.get(t)||0;"delete"===n?i<=1?r["delete"](t):r.set(t,i-1):t!==e.form.templateContext&&r.set(t,i+1)}:function(){}}},inject:{configProvider:{default:function(){return pe.f}}},watch:{form:function(){this.$forceUpdate()}},computed:{vertical:function(){return"vertical"===this.layout}},beforeUpdate:function(){this.formItemContexts.forEach(function(e,t){t.$forceUpdate&&t.$forceUpdate()})},updated:function(){this.form&&this.form.cleanUpUselessFields&&this.form.cleanUpUselessFields()},methods:{onSubmit:function(e){(0,ne.WM)(this).submit?this.$emit("submit",e):e.preventDefault()}},render:function(){var e,t=this,n=arguments[0],r=this.prefixCls,a=this.hideRequiredMark,s=this.layout,l=this.onSubmit,u=this.$slots,d=this.autoFormCreate,f=this.options,p=void 0===f?{}:f,m=this.configProvider.getPrefixCls,v=m("form",r),g=c()(v,(e={},(0,i.A)(e,v+"-horizontal","horizontal"===s),(0,i.A)(e,v+"-vertical","vertical"===s),(0,i.A)(e,v+"-inline","inline"===s),(0,i.A)(e,v+"-hide-required-mark",a),e));if(d){(0,h.A)(!1,"Form","`autoFormCreate` is deprecated. please use `form` instead.");var y=this.DomForm||de((0,o.A)({fieldNameProp:"id"},p,{fieldMetaProp:fe.H,fieldDataProp:fe.W,templateContext:this.$vnode.context}))({provide:function(){return{decoratorFormProps:this.$props}},data:function(){return{children:u["default"],formClassName:g,submit:l}},created:function(){d(this.form)},render:function(){var e=arguments[0],t=this.children,n=this.formClassName,r=this.submit;return e("form",{on:{submit:r},class:n},[t])}});return this.domForm&&(this.domForm.children=u["default"],this.domForm.submit=l,this.domForm.formClassName=g),this.DomForm=y,n(y,{attrs:{wrappedComponentRef:function(e){t.domForm=e}}})}return n("form",{on:{submit:l},class:g},[u["default"]])}}),ye=ge,_e=n(24415),be=n(35745);r.Ay.use(_e.A,{name:"ant-ref"}),r.Ay.use(be.A),r.Ay.prototype.$form=ye,ye.install=function(e){e.use(me.A),e.component(ye.name,ye),e.component(ye.Item.name,ye.Item),e.prototype.$form=ye};var Me=ye},16560:function(e,t,n){"use strict";n(29229),n(67434)},43594:function(e,t,n){"use strict";n.d(t,{fZ:function(){return h}});var r=n(44508),i=n(85505),o=n(97479),a=n(4718),s=n(25592),c=n(15848),l=a.A.oneOfType([a.A.string,a.A.number]),u=a.A.shape({span:l,order:l,offset:l,push:l,pull:l}).loose,d=a.A.oneOfType([a.A.string,a.A.number,u]),h={span:l,order:l,offset:l,push:l,pull:l,xs:d,sm:d,md:d,lg:d,xl:d,xxl:d,prefixCls:a.A.string,flex:l};t.Ay={name:"ACol",props:h,inject:{configProvider:{default:function(){return s.f}},rowContext:{default:function(){return null}}},methods:{parseFlex:function(e){return"number"===typeof e?e+" "+e+" auto":/^\d+(\.\d+)?(px|em|rem|%)$/.test(e)?"0 0 "+e:e}},render:function(){var e,t=this,n=arguments[0],a=this.span,s=this.order,l=this.offset,u=this.push,d=this.pull,h=this.flex,f=this.prefixCls,p=this.$slots,m=this.rowContext,v=this.configProvider.getPrefixCls,g=v("col",f),y={};["xs","sm","md","lg","xl","xxl"].forEach(function(e){var n,a={},s=t[e];"number"===typeof s?a.span=s:"object"===("undefined"===typeof s?"undefined":(0,o.A)(s))&&(a=s||{}),y=(0,i.A)({},y,(n={},(0,r.A)(n,g+"-"+e+"-"+a.span,void 0!==a.span),(0,r.A)(n,g+"-"+e+"-order-"+a.order,a.order||0===a.order),(0,r.A)(n,g+"-"+e+"-offset-"+a.offset,a.offset||0===a.offset),(0,r.A)(n,g+"-"+e+"-push-"+a.push,a.push||0===a.push),(0,r.A)(n,g+"-"+e+"-pull-"+a.pull,a.pull||0===a.pull),n))});var _=(0,i.A)((e={},(0,r.A)(e,""+g,!0),(0,r.A)(e,g+"-"+a,void 0!==a),(0,r.A)(e,g+"-order-"+s,s),(0,r.A)(e,g+"-offset-"+l,l),(0,r.A)(e,g+"-push-"+u,u),(0,r.A)(e,g+"-pull-"+d,d),e),y),b={on:(0,c.WM)(this),class:_,style:{}};if(m){var M=m.getGutter();M&&(b.style=(0,i.A)({},M[0]>0?{paddingLeft:M[0]/2+"px",paddingRight:M[0]/2+"px"}:{},M[1]>0?{paddingTop:M[1]/2+"px",paddingBottom:M[1]/2+"px"}:{}))}return h&&(b.style.flex=this.parseFlex(h)),n("div",b,[p["default"]])}}},9712:function(e,t,n){"use strict";var r=n(44508),i=n(97479),o=n(85505),a=n(4718),s=n(52315),c=n(25592),l=n(73363),u={gutter:a.A.oneOfType([a.A.object,a.A.number,a.A.array]),type:a.A.oneOf(["flex"]),align:a.A.oneOf(["top","middle","bottom","stretch"]),justify:a.A.oneOf(["start","end","center","space-around","space-between"]),prefixCls:a.A.string},d=["xxl","xl","lg","md","sm","xs"];t.A={name:"ARow",mixins:[s.A],props:(0,o.A)({},u,{gutter:a.A.oneOfType([a.A.object,a.A.number,a.A.array]).def(0)}),provide:function(){return{rowContext:this}},inject:{configProvider:{default:function(){return c.f}}},data:function(){return{screens:{}}},mounted:function(){var e=this;this.$nextTick(function(){e.token=l.Ay.subscribe(function(t){var n=e.gutter;("object"===("undefined"===typeof n?"undefined":(0,i.A)(n))||Array.isArray(n)&&("object"===(0,i.A)(n[0])||"object"===(0,i.A)(n[1])))&&(e.screens=t)})})},beforeDestroy:function(){l.Ay.unsubscribe(this.token)},methods:{getGutter:function(){var e=[0,0],t=this.gutter,n=this.screens,r=Array.isArray(t)?t:[t,0];return r.forEach(function(t,r){if("object"===("undefined"===typeof t?"undefined":(0,i.A)(t)))for(var o=0;o0?{marginLeft:d[0]/-2+"px",marginRight:d[0]/-2+"px"}:{},d[1]>0?{marginTop:d[1]/-2+"px",marginBottom:d[1]/-2+"px"}:{});return t("div",{class:h,style:f},[c["default"]])}}},67434:function(e,t,n){"use strict";n(29229)},40255:function(e,t,n){"use strict";n.d(t,{A:function(){return U}});var r=n(75189),i=n.n(r),o=n(85505),a=n(44508),s=n(32779),c=n(46942),l=n.n(c),u=n(6678),d=n(9506),h=n(97588),f=n(33446);function p(e){process||console.error("[@ant-design/icons-vue]: "+e+".")}function m(e){return"object"===typeof e&&"string"===typeof e.name&&"string"===typeof e.theme&&("object"===typeof e.icon||"function"===typeof e.icon)}function v(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object.keys(e).reduce(function(t,n){var r=e[n];switch(n){case"class":t.className=r,delete t["class"];break;default:t[n]=r}return t},{})}var g=function(){function e(){(0,d.A)(this,e),this.collection={}}return(0,h.A)(e,[{key:"clear",value:function(){this.collection={}}},{key:"delete",value:function(e){return delete this.collection[e]}},{key:"get",value:function(e){return this.collection[e]}},{key:"has",value:function(e){return Boolean(this.collection[e])}},{key:"set",value:function(e,t){return this.collection[e]=t,this}},{key:"size",get:function(){return Object.keys(this.collection).length}}]),e}();function y(e,t,n,r){return e(t.tag,r?(0,o.A)({key:n},r,{attrs:(0,o.A)({},v(t.attrs),r.attrs)}):{key:n,attrs:(0,o.A)({},v(t.attrs))},(t.children||[]).map(function(r,i){return y(e,r,n+"-"+t.tag+"-"+i)}))}function _(e){return(0,f.generate)(e)[0]}function b(e,t){switch(t){case"fill":return e+"-fill";case"outline":return e+"-o";case"twotone":return e+"-twotone";default:throw new TypeError("Unknown theme type: "+t+", name: "+e)}}var M={primaryColor:"#333",secondaryColor:"#E6E6E6"},A={name:"AntdIcon",props:["type","primaryColor","secondaryColor"],displayName:"IconVue",definitions:new g,data:function(){return{twoToneColorPalette:M}},add:function(){for(var e=arguments.length,t=Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:M;if(e){var n=A.definitions.get(e);return n&&"function"===typeof n.icon&&(n=(0,o.A)({},n,{icon:n.icon(t.primaryColor,t.secondaryColor)})),n}},setTwoToneColors:function(e){var t=e.primaryColor,n=e.secondaryColor;M.primaryColor=t,M.secondaryColor=n||_(t)},getTwoToneColors:function(){return(0,o.A)({},M)},render:function(e){var t=this.$props,n=t.type,r=t.primaryColor,i=t.secondaryColor,a=void 0,s=M;if(r&&(s={primaryColor:r,secondaryColor:i||_(r)}),m(n))a=n;else if("string"===typeof n&&(a=A.get(n,s),!a))return null;return a?(a&&"function"===typeof a.icon&&(a=(0,o.A)({},a,{icon:a.icon(s.primaryColor,s.secondaryColor)})),y(e,a.icon,"svg-"+a.name,{attrs:{"data-icon":a.name,width:"1em",height:"1em",fill:"currentColor","aria-hidden":"true"},on:this.$listeners})):(p("type should be string or icon definiton, but got "+n),null)},install:function(e){e.component(A.name,A)}},w=A,x=w,k=n(4718),L=n(5748),C=n(15848),S=new Set;function z(e){var t=e.scriptUrl,n=e.extraCommonProps,r=void 0===n?{}:n;if("undefined"!==typeof document&&"undefined"!==typeof window&&"function"===typeof document.createElement&&"string"===typeof t&&t.length&&!S.has(t)){var i=document.createElement("script");i.setAttribute("src",t),i.setAttribute("data-namespace",t),S.add(t),document.body.appendChild(i)}var o={functional:!0,name:"AIconfont",props:U.props,render:function(e,t){var n=t.props,i=t.slots,o=t.listeners,a=t.data,s=n.type,c=(0,L.A)(n,["type"]),l=i(),u=l["default"],d=null;s&&(d=e("use",{attrs:{"xlink:href":"#"+s}})),u&&(d=u);var h=(0,C.v6)(r,a,{props:c,on:o});return e(U,h,[d])}};return o}var T=n(36873),O={width:"1em",height:"1em",fill:"currentColor","aria-hidden":"true",focusable:"false"},H=/-fill$/,D=/-o$/,Y=/-twotone$/;function V(e){var t=null;return H.test(e)?t="filled":D.test(e)?t="outlined":Y.test(e)&&(t="twoTone"),t}function P(e){return e.replace(H,"").replace(D,"").replace(Y,"")}function E(e,t){var n=e;return"filled"===t?n+="-fill":"outlined"===t?n+="-o":"twoTone"===t?n+="-twotone":(0,T.A)(!1,"Icon","This icon '"+e+"' has unknown theme '"+t+"'"),n}function j(e){var t=e;switch(e){case"cross":t="close";break;case"interation":t="interaction";break;case"canlendar":t="calendar";break;case"colum-height":t="column-height";break;default:}return(0,T.A)(t===e,"Icon","Icon '"+e+"' was a typo and is now deprecated, please use '"+t+"' instead."),t}var F=n(38377);function I(e){return x.setTwoToneColors({primaryColor:e})}function $(){var e=x.getTwoToneColors();return e.primaryColor}var R=n(44807);x.add.apply(x,(0,s.A)(Object.keys(u).filter(function(e){return"default"!==e}).map(function(e){return u[e]}))),I("#1890ff");var N="outlined",W=void 0;function B(e,t,n){var r,s=n.$props,c=n.$slots,u=(0,C.WM)(n),d=s.type,h=s.component,f=s.viewBox,p=s.spin,m=s.theme,v=s.twoToneColor,g=s.rotate,y=s.tabIndex,_=(0,C.Gk)(c["default"]);_=0===_.length?void 0:_,(0,T.A)(Boolean(d||h||_),"Icon","Icon should have `type` prop or `component` prop or `children`.");var b=l()((r={},(0,a.A)(r,"anticon",!0),(0,a.A)(r,"anticon-"+d,!!d),r)),M=l()((0,a.A)({},"anticon-spin",!!p||"loading"===d)),A=g?{msTransform:"rotate("+g+"deg)",transform:"rotate("+g+"deg)"}:void 0,w={attrs:(0,o.A)({},O,{viewBox:f}),class:M,style:A};f||delete w.attrs.viewBox;var k=function(){if(h)return e(h,w,[_]);if(_){(0,T.A)(Boolean(f)||1===_.length&&"use"===_[0].tag,"Icon","Make sure that you provide correct `viewBox` prop (default `0 0 1024 1024`) to the icon.");var t={attrs:(0,o.A)({},O),class:M,style:A};return e("svg",i()([t,{attrs:{viewBox:f}}]),[_])}if("string"===typeof d){var n=d;if(m){var r=V(d);(0,T.A)(!r||m===r,"Icon","The icon name '"+d+"' already specify a theme '"+r+"', the 'theme' prop '"+m+"' will be ignored.")}return n=E(P(j(n)),W||m||N),e(x,{attrs:{focusable:"false",type:n,primaryColor:v},class:M,style:A})}},L=y;void 0===L&&"click"in u&&(L=-1);var S={attrs:{"aria-label":d&&t.icon+": "+d,tabIndex:L},on:u,class:b,staticClass:""};return e("i",S,[k()])}var K={name:"AIcon",props:{tabIndex:k.A.number,type:k.A.string,component:k.A.any,viewBox:k.A.any,spin:k.A.bool.def(!1),rotate:k.A.number,theme:k.A.oneOf(["filled","outlined","twoTone"]),twoToneColor:k.A.string,role:k.A.string},render:function(e){var t=this;return e(F.A,{attrs:{componentName:"Icon"},scopedSlots:{default:function(n){return B(e,n,t)}}})}};K.createFromIconfontCN=z,K.getTwoToneColor=$,K.setTwoToneColor=I,K.install=function(e){e.use(R.A),e.component(K.name,K)};var U=K},78269:function(e,t,n){"use strict";n(29229)},66066:function(e,t,n){"use strict";n.d(t,{A:function(){return V}});var r=n(44508),i=n(85505),o=n(5748),a=n(4718),s=n(15848),c=n(46942),l=n.n(c),u=n(40255),d=n(32779),h=n(52315),f=n(11207),p=n(51927),m=n(36873),v={disabled:a.A.bool,activeClassName:a.A.string,activeStyle:a.A.any},g={name:"TouchFeedback",mixins:[h.A],props:(0,s.CB)(v,{disabled:!1}),data:function(){return{active:!1}},mounted:function(){var e=this;this.$nextTick(function(){e.disabled&&e.active&&e.setState({active:!1})})},methods:{triggerEvent:function(e,t,n){this.$emit(e,n),t!==this.active&&this.setState({active:t})},onTouchStart:function(e){this.triggerEvent("touchstart",!0,e)},onTouchMove:function(e){this.triggerEvent("touchmove",!1,e)},onTouchEnd:function(e){this.triggerEvent("touchend",!1,e)},onTouchCancel:function(e){this.triggerEvent("touchcancel",!1,e)},onMouseDown:function(e){this.triggerEvent("mousedown",!0,e)},onMouseUp:function(e){this.triggerEvent("mouseup",!1,e)},onMouseLeave:function(e){this.triggerEvent("mouseleave",!1,e)}},render:function(){var e=this.$props,t=e.disabled,n=e.activeClassName,r=void 0===n?"":n,o=e.activeStyle,a=void 0===o?{}:o,s=this.$slots["default"];if(1!==s.length)return(0,m.A)(!1,"m-feedback组件只能包含一个子元素"),null;var c={on:t?{}:{touchstart:this.onTouchStart,touchmove:this.onTouchMove,touchend:this.onTouchEnd,touchcancel:this.onTouchCancel,mousedown:this.onMouseDown,mouseup:this.onMouseUp,mouseleave:this.onMouseLeave}};return!t&&this.active&&(c=(0,i.A)({},c,{style:a,class:r})),(0,p.Ob)(s,c)}},y=g,_={name:"InputHandler",props:{prefixCls:a.A.string,disabled:a.A.bool},render:function(){var e=arguments[0],t=this.$props,n=t.prefixCls,r=t.disabled,i={props:{disabled:r,activeClassName:n+"-handler-active"},on:(0,s.WM)(this)};return e(y,i,[e("span",[this.$slots["default"]])])}},b=_;function M(){}function A(e){e.preventDefault()}function w(e){return e.replace(/[^\w\.-]+/g,"")}var x=200,k=600,L=Number.MAX_SAFE_INTEGER||Math.pow(2,53)-1,C=function(e){return void 0!==e&&null!==e},S=function(e,t){return t===e||"number"===typeof t&&"number"===typeof e&&isNaN(t)&&isNaN(e)},z={value:a.A.oneOfType([a.A.number,a.A.string]),defaultValue:a.A.oneOfType([a.A.number,a.A.string]),focusOnUpDown:a.A.bool,autoFocus:a.A.bool,prefixCls:a.A.string,tabIndex:a.A.oneOfType([a.A.string,a.A.number]),placeholder:a.A.string,disabled:a.A.bool,readonly:a.A.bool,max:a.A.number,min:a.A.number,step:a.A.oneOfType([a.A.number,a.A.string]),upHandler:a.A.any,downHandler:a.A.any,useTouch:a.A.bool,formatter:a.A.func,parser:a.A.func,precision:a.A.number,required:a.A.bool,pattern:a.A.string,decimalSeparator:a.A.string,autoComplete:a.A.string,title:a.A.string,name:a.A.string,type:a.A.string,id:a.A.string},T={name:"VCInputNumber",mixins:[h.A],model:{prop:"value",event:"change"},props:(0,s.CB)(z,{focusOnUpDown:!0,useTouch:!1,prefixCls:"rc-input-number",min:-L,step:1,parser:w,required:!1,autoComplete:"off"}),data:function(){var e=(0,s.Oq)(this);this.prevProps=(0,i.A)({},e);var t=void 0;t="value"in e?this.value:this.defaultValue;var n=this.getValidValue(this.toNumber(t));return{inputValue:this.toPrecisionAsStep(n),sValue:n,focused:this.autoFocus}},mounted:function(){var e=this;this.$nextTick(function(){e.autoFocus&&!e.disabled&&e.focus(),e.updatedFunc()})},updated:function(){var e=this,t=this.$props,n=t.value,r=t.max,o=t.min,a=this.$data.focused,c=this.prevProps,l=(0,s.Oq)(this);if(c){if(!S(c.value,n)||!S(c.max,r)||!S(c.min,o)){var u=a?n:this.getValidValue(n),d=void 0;d=this.pressingUpOrDown?u:this.inputting?this.rawInput:this.toPrecisionAsStep(u),this.setState({sValue:u,inputValue:d})}var h="value"in l?n:this.sValue;"max"in l&&c.max!==r&&"number"===typeof h&&h>r&&this.$emit("change",r),"min"in l&&c.min!==o&&"number"===typeof h&&h1?r-1:0),o=1;o1?t-1:0),r=1;r1&&void 0!==arguments[1]?arguments[1]:this.min,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.max,r=parseFloat(e,10);return isNaN(r)?e:(rn&&(r=n),r)},setValue:function(e,t){var n=this.$props.precision,r=this.isNotCompleteNumber(parseFloat(e,10))?null:parseFloat(e,10),i=this.$data,o=i.sValue,a=void 0===o?null:o,c=i.inputValue,l=void 0===c?null:c,u="number"===typeof r?r.toFixed(n):""+r,d=r!==a||u!==""+l;return(0,s.cK)(this,"value")?this.setState({inputValue:this.toPrecisionAsStep(this.sValue)},t):this.setState({sValue:r,inputValue:this.toPrecisionAsStep(e)},t),d&&this.$emit("change",r),r},getPrecision:function(e){if(C(this.precision))return this.precision;var t=e.toString();if(t.indexOf("e-")>=0)return parseInt(t.slice(t.indexOf("e-")+2),10);var n=0;return t.indexOf(".")>=0&&(n=t.length-t.indexOf(".")-1),n},getMaxPrecision:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;if(C(this.precision))return this.precision;var n=this.step,r=this.getPrecision(t),i=this.getPrecision(n),o=this.getPrecision(e);return e?Math.max(o,r+i):r+i},getPrecisionFactor:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=this.getMaxPrecision(e,t);return Math.pow(10,n)},getInputDisplayValue:function(e){var t=e||this.$data,n=t.focused,r=t.inputValue,i=t.sValue,o=void 0;o=n?r:this.toPrecisionAsStep(i),void 0!==o&&null!==o||(o="");var a=this.formatWrapper(o);return C(this.$props.decimalSeparator)&&(a=a.toString().replace(".",this.$props.decimalSeparator)),a},recordCursorPosition:function(){try{var e=this.$refs.inputRef;this.cursorStart=e.selectionStart,this.cursorEnd=e.selectionEnd,this.currentValue=e.value,this.cursorBefore=e.value.substring(0,this.cursorStart),this.cursorAfter=e.value.substring(this.cursorEnd)}catch(t){}},fixCaret:function(e,t){if(void 0!==e&&void 0!==t&&this.$refs.inputRef&&this.$refs.inputRef.value)try{var n=this.$refs.inputRef,r=n.selectionStart,i=n.selectionEnd;e===r&&t===i||n.setSelectionRange(e,t)}catch(o){}},restoreByAfter:function(e){if(void 0===e)return!1;var t=this.$refs.inputRef.value,n=t.lastIndexOf(e);if(-1===n)return!1;var r=this.cursorBefore.length;return this.lastKeyCode===f.A.DELETE&&this.cursorBefore.charAt(r-1)===e[0]?(this.fixCaret(r,r),!0):n+e.length===t.length&&(this.fixCaret(n,n),!0)},partRestoreByAfter:function(e){var t=this;return void 0!==e&&Array.prototype.some.call(e,function(n,r){var i=e.substring(r);return t.restoreByAfter(i)})},focus:function(){this.$refs.inputRef.focus(),this.recordCursorPosition()},blur:function(){this.$refs.inputRef.blur()},formatWrapper:function(e){return this.formatter?this.formatter(e):e},toPrecisionAsStep:function(e){if(this.isNotCompleteNumber(e)||""===e)return e;var t=Math.abs(this.getMaxPrecision(e));return isNaN(t)?e.toString():Number(e).toFixed(t)},isNotCompleteNumber:function(e){return isNaN(e)||""===e||null===e||e&&e.toString().indexOf(".")===e.toString().length-1},toNumber:function(e){var t=this.$props,n=t.precision,r=t.autoFocus,i=this.focused,o=void 0===i?r:i,a=e&&e.length>16&&o;return this.isNotCompleteNumber(e)||a?e:C(n)?Math.round(e*Math.pow(10,n))/Math.pow(10,n):Number(e)},upStep:function(e,t){var n=this.step,r=this.getPrecisionFactor(e,t),i=Math.abs(this.getMaxPrecision(e,t)),o=((r*e+r*n*t)/r).toFixed(i);return this.toNumber(o)},downStep:function(e,t){var n=this.step,r=this.getPrecisionFactor(e,t),i=Math.abs(this.getMaxPrecision(e,t)),o=((r*e-r*n*t)/r).toFixed(i);return this.toNumber(o)},stepFn:function(e,t){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,i=arguments[3];if(this.stop(),t&&t.preventDefault(),!this.disabled){var o=this.max,a=this.min,s=this.getCurrentValidValue(this.inputValue)||0;if(!this.isNotCompleteNumber(s)){var c=this[e+"Step"](s,r),l=c>o||co?c=o:c=this.max&&(p=i+"-handler-up-disabled"),g<=this.min&&(m=i+"-handler-down-disabled")}var y=!this.readonly&&!this.disabled,_=this.getInputDisplayValue(),w=void 0,x=void 0;c?(w={touchstart:y&&!p?this.up:M,touchend:this.stop},x={touchstart:y&&!m?this.down:M,touchend:this.stop}):(w={mousedown:y&&!p?this.up:M,mouseup:this.stop,mouseleave:this.stop},x={mousedown:y&&!m?this.down:M,mouseup:this.stop,mouseleave:this.stop});var k=!!p||o||a,L=!!m||o||a,C=(0,s.WM)(this),S=C.mouseenter,z=void 0===S?M:S,T=C.mouseleave,O=void 0===T?M:T,H=C.mouseover,D=void 0===H?M:H,Y=C.mouseout,V=void 0===Y?M:Y,P={on:{mouseenter:z,mouseleave:O,mouseover:D,mouseout:V},class:f,attrs:{title:this.$props.title}},E={props:{disabled:k,prefixCls:i},attrs:{unselectable:"unselectable",role:"button","aria-label":"Increase Value","aria-disabled":!!k},class:i+"-handler "+i+"-handler-up "+p,on:w,ref:"up"},j={props:{disabled:L,prefixCls:i},attrs:{unselectable:"unselectable",role:"button","aria-label":"Decrease Value","aria-disabled":!!L},class:i+"-handler "+i+"-handler-down "+m,on:x,ref:"down"};return t("div",P,[t("div",{class:i+"-handler-wrap"},[t(b,E,[d||t("span",{attrs:{unselectable:"unselectable"},class:i+"-handler-up-inner",on:{click:A}})]),t(b,j,[h||t("span",{attrs:{unselectable:"unselectable"},class:i+"-handler-down-inner",on:{click:A}})])]),t("div",{class:i+"-input-wrap"},[t("input",{attrs:{role:"spinbutton","aria-valuemin":this.min,"aria-valuemax":this.max,"aria-valuenow":v,required:this.required,type:this.type,placeholder:this.placeholder,tabIndex:this.tabIndex,autoComplete:u,readonly:this.readonly,disabled:this.disabled,max:this.max,min:this.min,step:this.step,name:this.name,title:this.title,id:this.id,pattern:this.pattern},on:{click:this.handleInputClick,focus:this.onFocus,blur:this.onBlur,keydown:y?this.onKeyDown:M,keyup:y?this.onKeyUp:M,input:this.onTrigger,compositionstart:this.onCompositionstart,compositionend:this.onCompositionend},class:i+"-input",ref:"inputRef",domProps:{value:_}})])])}},O=n(25592),H=n(44807),D={prefixCls:a.A.string,min:a.A.number,max:a.A.number,value:a.A.oneOfType([a.A.number,a.A.string]),step:a.A.oneOfType([a.A.number,a.A.string]),defaultValue:a.A.oneOfType([a.A.number,a.A.string]),tabIndex:a.A.number,disabled:a.A.bool,size:a.A.oneOf(["large","small","default"]),formatter:a.A.func,parser:a.A.func,decimalSeparator:a.A.string,placeholder:a.A.string,name:a.A.string,id:a.A.string,precision:a.A.number,autoFocus:a.A.bool},Y={name:"AInputNumber",model:{prop:"value",event:"change"},props:(0,s.CB)(D,{step:1}),inject:{configProvider:{default:function(){return O.f}}},methods:{focus:function(){this.$refs.inputNumberRef.focus()},blur:function(){this.$refs.inputNumberRef.blur()}},render:function(){var e,t=arguments[0],n=(0,i.A)({},(0,s.Oq)(this),this.$attrs),a=n.prefixCls,c=n.size,d=(0,o.A)(n,["prefixCls","size"]),h=this.configProvider.getPrefixCls,f=h("input-number",a),p=l()((e={},(0,r.A)(e,f+"-lg","large"===c),(0,r.A)(e,f+"-sm","small"===c),e)),m=t(u.A,{attrs:{type:"up"},class:f+"-handler-up-inner"}),v=t(u.A,{attrs:{type:"down"},class:f+"-handler-down-inner"}),g={props:(0,i.A)({prefixCls:f,upHandler:m,downHandler:v},d),class:p,ref:"inputNumberRef",on:(0,s.WM)(this)};return t(T,g)},install:function(e){e.use(H.A),e.component(Y.name,Y)}},V=Y},83492:function(e,t,n){"use strict";n(29229)},57155:function(e,t,n){"use strict";n.d(t,{A:function(){return te}});var r=n(85471),i=n(75189),o=n.n(i),a=n(85505),s=n(44508),c=n(46942),l=n.n(c),u=n(40255),d=n(4718),h=n(51927),f=n(15848);function p(e){return!!((0,f.nu)(e,"prefix")||(0,f.nu)(e,"suffix")||e.$props.allowClear)}var m=["text","input"],v={props:{prefixCls:d.A.string,inputType:d.A.oneOf(m),value:d.A.any,defaultValue:d.A.any,allowClear:d.A.bool,element:d.A.any,handleReset:d.A.func,disabled:d.A.bool,size:d.A.oneOf(["small","large","default"]),suffix:d.A.any,prefix:d.A.any,addonBefore:d.A.any,addonAfter:d.A.any,className:d.A.string,readOnly:d.A.bool},methods:{renderClearIcon:function(e){var t=this.$createElement,n=this.$props,r=n.allowClear,i=n.value,o=n.disabled,a=n.readOnly,s=n.inputType,c=n.handleReset;if(!r||o||a||void 0===i||null===i||""===i)return null;var l=s===m[0]?e+"-textarea-clear-icon":e+"-clear-icon";return t(u.A,{attrs:{type:"close-circle",theme:"filled",role:"button"},on:{click:c},class:l})},renderSuffix:function(e){var t=this.$createElement,n=this.$props,r=n.suffix,i=n.allowClear;return r||i?t("span",{class:e+"-suffix"},[this.renderClearIcon(e),r]):null},renderLabeledIcon:function(e,t){var n,r=this.$createElement,i=this.$props,o=this.renderSuffix(e);if(!p(this))return(0,h.Ob)(t,{props:{value:i.value}});var a=i.prefix?r("span",{class:e+"-prefix"},[i.prefix]):null,c=l()(i.className,e+"-affix-wrapper",(n={},(0,s.A)(n,e+"-affix-wrapper-sm","small"===i.size),(0,s.A)(n,e+"-affix-wrapper-lg","large"===i.size),(0,s.A)(n,e+"-affix-wrapper-input-with-clear-btn",i.suffix&&i.allowClear&&this.$props.value),n));return r("span",{class:c,style:i.style},[a,(0,h.Ob)(t,{style:null,props:{value:i.value},class:W(e,i.size,i.disabled)}),o])},renderInputWithLabel:function(e,t){var n,r=this.$createElement,i=this.$props,o=i.addonBefore,a=i.addonAfter,c=i.style,u=i.size,d=i.className;if(!o&&!a)return t;var f=e+"-group",p=f+"-addon",m=o?r("span",{class:p},[o]):null,v=a?r("span",{class:p},[a]):null,g=l()(e+"-wrapper",(0,s.A)({},f,o||a)),y=l()(d,e+"-group-wrapper",(n={},(0,s.A)(n,e+"-group-wrapper-sm","small"===u),(0,s.A)(n,e+"-group-wrapper-lg","large"===u),n));return r("span",{class:y,style:c},[r("span",{class:g},[m,(0,h.Ob)(t,{style:null}),v])])},renderTextAreaWithClearIcon:function(e,t){var n=this.$createElement,r=this.$props,i=r.value,o=r.allowClear,a=r.className,s=r.style;if(!o)return(0,h.Ob)(t,{props:{value:i}});var c=l()(a,e+"-affix-wrapper",e+"-affix-wrapper-textarea-with-clear-btn");return n("span",{class:c,style:s},[(0,h.Ob)(t,{style:null,props:{value:i}}),this.renderClearIcon(e)])},renderClearableLabeledInput:function(){var e=this.$props,t=e.prefixCls,n=e.inputType,r=e.element;return n===m[0]?this.renderTextAreaWithClearIcon(t,r):this.renderInputWithLabel(t,this.renderLabeledIcon(t,r))}},render:function(){return this.renderClearableLabeledInput()}},g=v,y=n(43591),_={name:"ResizeObserver",props:{disabled:Boolean},data:function(){return this.currentElement=null,this.resizeObserver=null,{width:0,height:0}},mounted:function(){this.onComponentUpdated()},updated:function(){this.onComponentUpdated()},beforeDestroy:function(){this.destroyObserver()},methods:{onComponentUpdated:function(){var e=this.$props.disabled;if(e)this.destroyObserver();else{var t=this.$el,n=t!==this.currentElement;n&&(this.destroyObserver(),this.currentElement=t),!this.resizeObserver&&t&&(this.resizeObserver=new y.A(this.onResize),this.resizeObserver.observe(t))}},onResize:function(e){var t=e[0].target,n=t.getBoundingClientRect(),r=n.width,i=n.height,o=Math.floor(r),a=Math.floor(i);if(this.width!==o||this.height!==a){var s={width:o,height:a};this.width=o,this.height=a,this.$emit("resize",s)}},destroyObserver:function(){this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=null)}},render:function(){return this.$slots["default"][0]}},b=_,M=n(90034),A="\n min-height:0 !important;\n max-height:none !important;\n height:0 !important;\n visibility:hidden !important;\n overflow:hidden !important;\n position:absolute !important;\n z-index:-1000 !important;\n top:0 !important;\n right:0 !important\n",w=["letter-spacing","line-height","padding-top","padding-bottom","font-family","font-weight","font-size","font-variant","text-rendering","text-transform","width","text-indent","padding-left","padding-right","border-width","box-sizing"],x={},k=void 0;function L(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=e.getAttribute("id")||e.getAttribute("data-reactid")||e.getAttribute("name");if(t&&x[n])return x[n];var r=window.getComputedStyle(e),i=r.getPropertyValue("box-sizing")||r.getPropertyValue("-moz-box-sizing")||r.getPropertyValue("-webkit-box-sizing"),o=parseFloat(r.getPropertyValue("padding-bottom"))+parseFloat(r.getPropertyValue("padding-top")),a=parseFloat(r.getPropertyValue("border-bottom-width"))+parseFloat(r.getPropertyValue("border-top-width")),s=w.map(function(e){return e+":"+r.getPropertyValue(e)}).join(";"),c={sizingStyle:s,paddingSize:o,borderSize:a,boxSizing:i};return t&&n&&(x[n]=c),c}function C(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;k||(k=document.createElement("textarea"),document.body.appendChild(k)),e.getAttribute("wrap")?k.setAttribute("wrap",e.getAttribute("wrap")):k.removeAttribute("wrap");var i=L(e,t),o=i.paddingSize,a=i.borderSize,s=i.boxSizing,c=i.sizingStyle;k.setAttribute("style",c+";"+A),k.value=e.value||e.placeholder||"";var l=Number.MIN_SAFE_INTEGER,u=Number.MAX_SAFE_INTEGER,d=k.scrollHeight,h=void 0;if("border-box"===s?d+=a:"content-box"===s&&(d-=o),null!==n||null!==r){k.value=" ";var f=k.scrollHeight-o;null!==n&&(l=f*n,"border-box"===s&&(l=l+o+a),d=Math.max(l,d)),null!==r&&(u=f*r,"border-box"===s&&(u=u+o+a),h=d>u?"":"hidden",d=Math.min(u,d))}return{height:d+"px",minHeight:l+"px",maxHeight:u+"px",overflowY:h}}var S=n(70556),z=n(36873),T=n(52315),O={prefixCls:d.A.string,inputPrefixCls:d.A.string,defaultValue:d.A.oneOfType([d.A.string,d.A.number]),value:d.A.oneOfType([d.A.string,d.A.number]),placeholder:[String,Number],type:{default:"text",type:String},name:String,size:d.A.oneOf(["small","large","default"]),disabled:d.A.bool,readOnly:d.A.bool,addonBefore:d.A.any,addonAfter:d.A.any,prefix:d.A.any,suffix:d.A.any,autoFocus:Boolean,allowClear:Boolean,lazy:{default:!0,type:Boolean},maxLength:d.A.number,loading:d.A.bool,className:d.A.string},H=0,D=1,Y=2,V=(0,a.A)({},O,{autosize:d.A.oneOfType([Object,Boolean]),autoSize:d.A.oneOfType([Object,Boolean])}),P={name:"ResizableTextArea",props:V,data:function(){return{textareaStyles:{},resizeStatus:H}},mixins:[T.A],mounted:function(){var e=this;this.$nextTick(function(){e.resizeTextarea()})},beforeDestroy:function(){S.A.cancel(this.nextFrameActionId),S.A.cancel(this.resizeFrameId)},watch:{value:function(){var e=this;this.$nextTick(function(){e.resizeTextarea()})}},methods:{handleResize:function(e){var t=this.$data.resizeStatus,n=this.$props.autoSize;t===H&&(this.$emit("resize",e),n&&this.resizeOnNextFrame())},resizeOnNextFrame:function(){S.A.cancel(this.nextFrameActionId),this.nextFrameActionId=(0,S.A)(this.resizeTextarea)},resizeTextarea:function(){var e=this,t=this.$props.autoSize||this.$props.autosize;if(t&&this.$refs.textArea){var n=t.minRows,r=t.maxRows,i=C(this.$refs.textArea,!1,n,r);this.setState({textareaStyles:i,resizeStatus:D},function(){S.A.cancel(e.resizeFrameId),e.resizeFrameId=(0,S.A)(function(){e.setState({resizeStatus:Y},function(){e.resizeFrameId=(0,S.A)(function(){e.setState({resizeStatus:H}),e.fixFirefoxAutoScroll()})})})})}},fixFirefoxAutoScroll:function(){try{if(document.activeElement===this.$refs.textArea){var e=this.$refs.textArea.selectionStart,t=this.$refs.textArea.selectionEnd;this.$refs.textArea.setSelectionRange(e,t)}}catch(n){}},renderTextArea:function(){var e=this.$createElement,t=(0,f.Oq)(this),n=t.prefixCls,r=t.autoSize,i=t.autosize,c=t.disabled,u=this.$data,d=u.textareaStyles,h=u.resizeStatus;(0,z.A)(void 0===i,"Input.TextArea","autosize is deprecated, please use autoSize instead.");var p=(0,M.A)(t,["prefixCls","autoSize","autosize","defaultValue","allowClear","type","lazy","value"]),m=l()(n,(0,s.A)({},n+"-disabled",c)),v={};"value"in t&&(v.value=t.value||"");var g=(0,a.A)({},d,h===D?{overflowX:"hidden",overflowY:"hidden"}:null),y={attrs:p,domProps:v,style:g,class:m,on:(0,M.A)((0,f.WM)(this),"pressEnter"),directives:[{name:"ant-input"}]};return e(b,{on:{resize:this.handleResize},attrs:{disabled:!(r||i)}},[e("textarea",o()([y,{ref:"textArea"}]))])}},render:function(){return this.renderTextArea()}},E=P,j=n(25592),F=(0,a.A)({},O,{autosize:d.A.oneOfType([Object,Boolean]),autoSize:d.A.oneOfType([Object,Boolean])}),I={name:"ATextarea",inheritAttrs:!1,model:{prop:"value",event:"change.value"},props:(0,a.A)({},F),inject:{configProvider:{default:function(){return j.f}}},data:function(){var e="undefined"===typeof this.value?this.defaultValue:this.value;return{stateValue:"undefined"===typeof e?"":e}},computed:{},watch:{value:function(e){this.stateValue=e}},mounted:function(){var e=this;this.$nextTick(function(){e.autoFocus&&e.focus()})},methods:{setValue:function(e,t){(0,f.Ay)(this,"value")||(this.stateValue=e,this.$nextTick(function(){t&&t()}))},handleKeyDown:function(e){13===e.keyCode&&this.$emit("pressEnter",e),this.$emit("keydown",e)},onChange:function(e){this.$emit("change.value",e.target.value),this.$emit("change",e),this.$emit("input",e)},handleChange:function(e){var t=this,n=e.target,r=n.value,i=n.composing;(e.isComposing||i)&&this.lazy||this.stateValue===r||(this.setValue(e.target.value,function(){t.$refs.resizableTextArea.resizeTextarea()}),N(this.$refs.resizableTextArea.$refs.textArea,e,this.onChange))},focus:function(){this.$refs.resizableTextArea.$refs.textArea.focus()},blur:function(){this.$refs.resizableTextArea.$refs.textArea.blur()},handleReset:function(e){var t=this;this.setValue("",function(){t.$refs.resizableTextArea.renderTextArea(),t.focus()}),N(this.$refs.resizableTextArea.$refs.textArea,e,this.onChange)},renderTextArea:function(e){var t=this.$createElement,n=(0,f.Oq)(this),r={props:(0,a.A)({},n,{prefixCls:e}),on:(0,a.A)({},(0,f.WM)(this),{input:this.handleChange,keydown:this.handleKeyDown}),attrs:this.$attrs};return t(E,o()([r,{ref:"resizableTextArea"}]))}},render:function(){var e=arguments[0],t=this.stateValue,n=this.prefixCls,r=this.configProvider.getPrefixCls,i=r("input",n),o={props:(0,a.A)({},(0,f.Oq)(this),{prefixCls:i,inputType:"text",value:R(t),element:this.renderTextArea(i),handleReset:this.handleReset}),on:(0,f.WM)(this)};return e(g,o)}};function $(){}function R(e){return"undefined"===typeof e||null===e?"":e}function N(e,t,n){if(n){var r=t;if("click"===t.type){Object.defineProperty(r,"target",{writable:!0}),Object.defineProperty(r,"currentTarget",{writable:!0}),r.target=e,r.currentTarget=e;var i=e.value;return e.value="",n(r),void(e.value=i)}n(r)}}function W(e,t,n){var r;return l()(e,(r={},(0,s.A)(r,e+"-sm","small"===t),(0,s.A)(r,e+"-lg","large"===t),(0,s.A)(r,e+"-disabled",n),r))}var B={name:"AInput",inheritAttrs:!1,model:{prop:"value",event:"change.value"},props:(0,a.A)({},O),inject:{configProvider:{default:function(){return j.f}}},data:function(){var e=this.$props,t="undefined"===typeof e.value?e.defaultValue:e.value;return{stateValue:"undefined"===typeof t?"":t}},watch:{value:function(e){this.stateValue=e}},mounted:function(){var e=this;this.$nextTick(function(){e.autoFocus&&e.focus(),e.clearPasswordValueAttribute()})},beforeDestroy:function(){this.removePasswordTimeout&&clearTimeout(this.removePasswordTimeout)},methods:{onBlur:function(e){this.$forceUpdate();var t=(0,f.WM)(this),n=t.blur;n&&n(e)},focus:function(){this.$refs.input.focus()},blur:function(){this.$refs.input.blur()},select:function(){this.$refs.input.select()},setValue:function(e,t){this.stateValue!==e&&((0,f.cK)(this,"value")||(this.stateValue=e,this.$nextTick(function(){t&&t()})))},onChange:function(e){this.$emit("change.value",e.target.value),this.$emit("change",e),this.$emit("input",e)},handleReset:function(e){var t=this;this.setValue("",function(){t.focus()}),N(this.$refs.input,e,this.onChange)},renderInput:function(e){var t=this.$createElement,n=(0,M.A)(this.$props,["prefixCls","addonBefore","addonAfter","prefix","suffix","allowClear","value","defaultValue","lazy","size","inputType","className"]),r=this.stateValue,i=this.handleKeyDown,o=this.handleChange,s=this.size,c=this.disabled,l={directives:[{name:"ant-input"}],domProps:{value:R(r)},attrs:(0,a.A)({},n,this.$attrs),on:(0,a.A)({},(0,f.WM)(this),{keydown:i,input:o,change:$,blur:this.onBlur}),class:W(e,s,c),ref:"input",key:"ant-input"};return t("input",l)},clearPasswordValueAttribute:function(){var e=this;this.removePasswordTimeout=setTimeout(function(){e.$refs.input&&e.$refs.input.getAttribute&&"password"===e.$refs.input.getAttribute("type")&&e.$refs.input.hasAttribute("value")&&e.$refs.input.removeAttribute("value")})},handleChange:function(e){var t=e.target,n=t.value,r=t.composing;(e.isComposing||r)&&this.lazy||this.stateValue===n||(this.setValue(n,this.clearPasswordValueAttribute),N(this.$refs.input,e,this.onChange))},handleKeyDown:function(e){13===e.keyCode&&this.$emit("pressEnter",e),this.$emit("keydown",e)}},render:function(){var e=arguments[0];if("textarea"===this.$props.type){var t={props:this.$props,attrs:this.$attrs,on:(0,a.A)({},(0,f.WM)(this),{input:this.handleChange,keydown:this.handleKeyDown,change:$,blur:this.onBlur})};return e(I,o()([t,{ref:"input"}]))}var n=this.$props.prefixCls,r=this.$data.stateValue,i=this.configProvider.getPrefixCls,s=i("input",n),c=(0,f.nu)(this,"addonAfter"),l=(0,f.nu)(this,"addonBefore"),u=(0,f.nu)(this,"suffix"),d=(0,f.nu)(this,"prefix"),h={props:(0,a.A)({},(0,f.Oq)(this),{prefixCls:s,inputType:"input",value:R(r),element:this.renderInput(s),handleReset:this.handleReset,addonAfter:c,addonBefore:l,suffix:u,prefix:d}),on:(0,f.WM)(this)};return e(g,h)}},K={name:"AInputGroup",props:{prefixCls:d.A.string,size:{validator:function(e){return["small","large","default"].includes(e)}},compact:Boolean},inject:{configProvider:{default:function(){return j.f}}},computed:{classes:function(){var e,t=this.prefixCls,n=this.size,r=this.compact,i=void 0!==r&&r,o=this.configProvider.getPrefixCls,a=o("input-group",t);return e={},(0,s.A)(e,""+a,!0),(0,s.A)(e,a+"-lg","large"===n),(0,s.A)(e,a+"-sm","small"===n),(0,s.A)(e,a+"-compact",i),e}},methods:{},render:function(){var e=arguments[0];return e("span",o()([{class:this.classes},{on:(0,f.WM)(this)}]),[(0,f.Gk)(this.$slots["default"])])}},U=n(5748),q=n(5574),G=n(49084),J={name:"AInputSearch",inheritAttrs:!1,model:{prop:"value",event:"change.value"},props:(0,a.A)({},O,{enterButton:d.A.any}),inject:{configProvider:{default:function(){return j.f}}},methods:{onChange:function(e){e&&e.target&&"click"===e.type&&this.$emit("search",e.target.value,e),this.$emit("change",e)},onSearch:function(e){this.loading||this.disabled||(this.$emit("search",this.$refs.input.stateValue,e),(0,q.isMobile)({tablet:!0})||this.$refs.input.focus())},focus:function(){this.$refs.input.focus()},blur:function(){this.$refs.input.blur()},renderLoading:function(e){var t=this.$createElement,n=this.$props.size,r=(0,f.nu)(this,"enterButton");return r=r||""===r,r?t(G.A,{class:e+"-button",attrs:{type:"primary",size:n},key:"enterButton"},[t(u.A,{attrs:{type:"loading"}})]):t(u.A,{class:e+"-icon",attrs:{type:"loading"},key:"loadingIcon"})},renderSuffix:function(e){var t=this.$createElement,n=this.loading,r=(0,f.nu)(this,"suffix"),i=(0,f.nu)(this,"enterButton");if(i=i||""===i,n&&!i)return[r,this.renderLoading(e)];if(i)return r;var o=t(u.A,{class:e+"-icon",attrs:{type:"search"},key:"searchIcon",on:{click:this.onSearch}});return r?[r,o]:o},renderAddonAfter:function(e){var t=this.$createElement,n=this.size,r=this.disabled,i=this.loading,o=e+"-button",a=(0,f.nu)(this,"enterButton");a=a||""===a;var s=(0,f.nu)(this,"addonAfter");if(i&&a)return[this.renderLoading(e),s];if(!a)return s;var c=Array.isArray(a)?a[0]:a,l=void 0,d=c.componentOptions&&c.componentOptions.Ctor.extendOptions.__ANT_BUTTON;return l="button"===c.tag||d?(0,h.Ob)(c,{key:"enterButton",class:d?o:"",props:d?{size:n}:{},on:{click:this.onSearch}}):t(G.A,{class:o,attrs:{type:"primary",size:n,disabled:r},key:"enterButton",on:{click:this.onSearch}},[!0===a||""===a?t(u.A,{attrs:{type:"search"}}):a]),s?[l,s]:l}},render:function(){var e=arguments[0],t=(0,f.Oq)(this),n=t.prefixCls,r=t.inputPrefixCls,i=t.size,o=(t.loading,(0,U.A)(t,["prefixCls","inputPrefixCls","size","loading"])),c=this.configProvider.getPrefixCls,u=c("input-search",n),d=c("input",r),h=(0,f.nu)(this,"enterButton"),p=(0,f.nu)(this,"addonBefore");h=h||""===h;var m,v=void 0;h?v=l()(u,(m={},(0,s.A)(m,u+"-enter-button",!!h),(0,s.A)(m,u+"-"+i,!!i),m)):v=u;var g=(0,a.A)({},(0,f.WM)(this));delete g.search;var y={props:(0,a.A)({},o,{prefixCls:d,size:i,suffix:this.renderSuffix(u),prefix:(0,f.nu)(this,"prefix"),addonAfter:this.renderAddonAfter(u),addonBefore:p,className:v}),attrs:this.$attrs,ref:"input",on:(0,a.A)({pressEnter:this.onSearch},g,{change:this.onChange})};return e(B,y)}},X={click:"click",hover:"mouseover"},Z={name:"AInputPassword",mixins:[T.A],inheritAttrs:!1,model:{prop:"value",event:"change.value"},props:(0,a.A)({},O,{prefixCls:d.A.string,inputPrefixCls:d.A.string,action:d.A.string.def("click"),visibilityToggle:d.A.bool.def(!0)}),inject:{configProvider:{default:function(){return j.f}}},data:function(){return{visible:!1}},methods:{focus:function(){this.$refs.input.focus()},blur:function(){this.$refs.input.blur()},onVisibleChange:function(){this.disabled||this.setState({visible:!this.visible})},getIcon:function(e){var t,n=this.$createElement,r=this.$props.action,i=X[r]||"",o={props:{type:this.visible?"eye":"eye-invisible"},on:(t={},(0,s.A)(t,i,this.onVisibleChange),(0,s.A)(t,"mousedown",function(e){e.preventDefault()}),(0,s.A)(t,"mouseup",function(e){e.preventDefault()}),t),class:e+"-icon",key:"passwordIcon"};return n(u.A,o)}},render:function(){var e=arguments[0],t=(0,f.Oq)(this),n=t.prefixCls,r=t.inputPrefixCls,i=t.size,o=(t.suffix,t.visibilityToggle),c=(0,U.A)(t,["prefixCls","inputPrefixCls","size","suffix","visibilityToggle"]),u=this.configProvider.getPrefixCls,d=u("input",r),h=u("input-password",n),p=o&&this.getIcon(h),m=l()(h,(0,s.A)({},h+"-"+i,!!i)),v={props:(0,a.A)({},c,{prefixCls:d,size:i,suffix:p,prefix:(0,f.nu)(this,"prefix"),addonAfter:(0,f.nu)(this,"addonAfter"),addonBefore:(0,f.nu)(this,"addonBefore")}),attrs:(0,a.A)({},this.$attrs,{type:this.visible?"text":"password"}),class:m,ref:"input",on:(0,f.WM)(this)};return e(B,v)}},Q=n(81593),ee=n(44807);r.Ay.use(Q.Ay),B.Group=K,B.Search=J,B.TextArea=I,B.Password=Z,B.install=function(e){e.use(ee.A),e.component(B.name,B),e.component(B.Group.name,B.Group),e.component(B.Search.name,B.Search),e.component(B.TextArea.name,B.TextArea),e.component(B.Password.name,B.Password)};var te=B},71094:function(e,t,n){"use strict";n(29229),n(27902)},37896:function(e,t,n){"use strict";n.d(t,{A:function(){return z}});var r=n(44508),i=n(32779),o=n(85505),a=n(4718),s=n(46942),c=n.n(s),l=n(15848),u=n(25592),d={prefixCls:a.A.string,hasSider:a.A.boolean,tagName:a.A.string};function h(e){var t=e.suffixCls,n=e.tagName,r=e.name;return function(e){return{name:r,props:e.props,inject:{configProvider:{default:function(){return u.f}}},render:function(){var r=arguments[0],i=this.$props.prefixCls,a=this.configProvider.getPrefixCls,s=a(t,i),c={props:(0,o.A)({prefixCls:s},(0,l.Oq)(this),{tagName:n}),on:(0,l.WM)(this)};return r(e,c,[this.$slots["default"]])}}}}var f={props:d,render:function(){var e=arguments[0],t=this.prefixCls,n=this.tagName,r=this.$slots,i={class:t,on:(0,l.WM)(this)};return e(n,i,[r["default"]])}},p={props:d,data:function(){return{siders:[]}},provide:function(){var e=this;return{siderHook:{addSider:function(t){e.siders=[].concat((0,i.A)(e.siders),[t])},removeSider:function(t){e.siders=e.siders.filter(function(e){return e!==t})}}}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.$slots,i=this.hasSider,o=this.tagName,a=c()(t,(0,r.A)({},t+"-has-sider","boolean"===typeof i?i:this.siders.length>0)),s={class:a,on:l.WM};return e(o,s,[n["default"]])}},m=h({suffixCls:"layout",tagName:"section",name:"ALayout"})(p),v=h({suffixCls:"layout-header",tagName:"header",name:"ALayoutHeader"})(f),g=h({suffixCls:"layout-footer",tagName:"footer",name:"ALayoutFooter"})(f),y=h({suffixCls:"layout-content",tagName:"main",name:"ALayoutContent"})(f);m.Header=v,m.Footer=g,m.Content=y;var _=m,b=n(52315),M=n(2410),A=n(40255);if("undefined"!==typeof window){var w=function(e){return{media:e,matches:!1,addListener:function(){},removeListener:function(){}}};window.matchMedia=window.matchMedia||w}var x={xs:"479.98px",sm:"575.98px",md:"767.98px",lg:"991.98px",xl:"1199.98px",xxl:"1599.98px"},k={prefixCls:a.A.string,collapsible:a.A.bool,collapsed:a.A.bool,defaultCollapsed:a.A.bool,reverseArrow:a.A.bool,zeroWidthTriggerStyle:a.A.object,trigger:a.A.any,width:a.A.oneOfType([a.A.number,a.A.string]),collapsedWidth:a.A.oneOfType([a.A.number,a.A.string]),breakpoint:a.A.oneOf(["xs","sm","md","lg","xl","xxl"]),theme:a.A.oneOf(["light","dark"]).def("dark")},L=function(){var e=0;return function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return e+=1,""+t+e}}(),C={name:"ALayoutSider",__ANT_LAYOUT_SIDER:!0,mixins:[b.A],model:{prop:"collapsed",event:"collapse"},props:(0,l.CB)(k,{collapsible:!1,defaultCollapsed:!1,reverseArrow:!1,width:200,collapsedWidth:80}),data:function(){this.uniqueId=L("ant-sider-");var e=void 0;"undefined"!==typeof window&&(e=window.matchMedia);var t=(0,l.Oq)(this);e&&t.breakpoint&&t.breakpoint in x&&(this.mql=e("(max-width: "+x[t.breakpoint]+")"));var n=void 0;return n="collapsed"in t?t.collapsed:t.defaultCollapsed,{sCollapsed:n,below:!1,belowShow:!1}},provide:function(){return{layoutSiderContext:this}},inject:{siderHook:{default:function(){return{}}},configProvider:{default:function(){return u.f}}},watch:{collapsed:function(e){this.setState({sCollapsed:e})}},mounted:function(){var e=this;this.$nextTick(function(){e.mql&&(e.mql.addListener(e.responsiveHandler),e.responsiveHandler(e.mql)),e.siderHook.addSider&&e.siderHook.addSider(e.uniqueId)})},beforeDestroy:function(){this.mql&&this.mql.removeListener(this.responsiveHandler),this.siderHook.removeSider&&this.siderHook.removeSider(this.uniqueId)},methods:{responsiveHandler:function(e){this.setState({below:e.matches}),this.$emit("breakpoint",e.matches),this.sCollapsed!==e.matches&&this.setCollapsed(e.matches,"responsive")},setCollapsed:function(e,t){(0,l.cK)(this,"collapsed")||this.setState({sCollapsed:e}),this.$emit("collapse",e,t)},toggle:function(){var e=!this.sCollapsed;this.setCollapsed(e,"clickTrigger")},belowShowChange:function(){this.setState({belowShow:!this.belowShow})}},render:function(){var e,t=arguments[0],n=(0,l.Oq)(this),i=n.prefixCls,o=n.theme,a=n.collapsible,s=n.reverseArrow,u=n.width,d=n.collapsedWidth,h=n.zeroWidthTriggerStyle,f=this.configProvider.getPrefixCls,p=f("layout-sider",i),m=(0,l.nu)(this,"trigger"),v=this.sCollapsed?d:u,g=(0,M.A)(v)?v+"px":String(v),y=0===parseFloat(String(d||0))?t("span",{on:{click:this.toggle},class:p+"-zero-width-trigger "+p+"-zero-width-trigger-"+(s?"right":"left"),style:h},[t(A.A,{attrs:{type:"bars"}})]):null,_={expanded:t(A.A,s?{attrs:{type:"right"}}:{attrs:{type:"left"}}),collapsed:t(A.A,s?{attrs:{type:"left"}}:{attrs:{type:"right"}})},b=this.sCollapsed?"collapsed":"expanded",w=_[b],x=null!==m?y||t("div",{class:p+"-trigger",on:{click:this.toggle},style:{width:g}},[m||w]):null,k={flex:"0 0 "+g,maxWidth:g,minWidth:g,width:g},L=c()(p,p+"-"+o,(e={},(0,r.A)(e,p+"-collapsed",!!this.sCollapsed),(0,r.A)(e,p+"-has-trigger",a&&null!==m&&!y),(0,r.A)(e,p+"-below",!!this.below),(0,r.A)(e,p+"-zero-width",0===parseFloat(g)),e)),C={on:(0,l.WM)(this),class:L,style:k};return t("aside",C,[t("div",{class:p+"-children"},[this.$slots["default"]]),a||this.below&&y?x:null])}},S=n(44807);_.Sider=C,_.install=function(e){e.use(S.A),e.component(_.name,_),e.component(_.Header.name,_.Header),e.component(_.Footer.name,_.Footer),e.component(_.Sider.name,_.Sider),e.component(_.Content.name,_.Content)};var z=_},58568:function(e,t,n){"use strict";n(29229)},47132:function(e,t,n){"use strict";n.d(t,{Dd:function(){return S},Ay:function(){return H}});var r=n(75189),i=n.n(r),o=n(32779),a=n(5748),s=n(85505),c=n(44508),l=n(97479),u=n(4718),d=n(46942),h=n.n(d),f=n(90034),p=n(25592),m=n(82840),v=n(38223),g=n(64168),y=n(9712),_=n(15848),b=n(43594),M=n(51927),A={prefixCls:u.A.string,extra:u.A.any,actions:u.A.arrayOf(u.A.any),grid:S},w=(u.A.any,u.A.any,u.A.string,u.A.any,{functional:!0,name:"AListItemMeta",__ANT_LIST_ITEM_META:!0,inject:{configProvider:{default:function(){return p.f}}},render:function(e,t){var n=t.props,r=t.slots,o=t.listeners,a=t.injections,s=r(),c=a.configProvider.getPrefixCls,l=n.prefixCls,u=c("list",l),d=n.avatar||s.avatar,h=n.title||s.title,f=n.description||s.description,p=e("div",{class:u+"-item-meta-content"},[h&&e("h4",{class:u+"-item-meta-title"},[h]),f&&e("div",{class:u+"-item-meta-description"},[f])]);return e("div",i()([{on:o},{class:u+"-item-meta"}]),[d&&e("div",{class:u+"-item-meta-avatar"},[d]),(h||f)&&p])}});function x(e,t){return e[t]&&Math.floor(24/e[t])}var k={name:"AListItem",Meta:w,props:A,inject:{listContext:{default:function(){return{}}},configProvider:{default:function(){return p.f}}},methods:{isItemContainsTextNodeAndNotSingular:function(){var e=this.$slots,t=void 0,n=e["default"]||[];return n.forEach(function(e){(0,_.K6)(e)&&!(0,_.sG)(e)&&(t=!0)}),t&&n.length>1},isFlexMode:function(){var e=(0,_.nu)(this,"extra"),t=this.listContext.itemLayout;return"vertical"===t?!!e:!this.isItemContainsTextNodeAndNotSingular()}},render:function(){var e=arguments[0],t=this.listContext,n=t.grid,r=t.itemLayout,o=this.prefixCls,a=this.$slots,s=(0,_.WM)(this),l=this.configProvider.getPrefixCls,u=l("list",o),d=(0,_.nu)(this,"extra"),f=(0,_.nu)(this,"actions"),p=f&&f.length>0&&e("ul",{class:u+"-item-action",key:"actions"},[f.map(function(t,n){return e("li",{key:u+"-item-action-"+n},[t,n!==f.length-1&&e("em",{class:u+"-item-action-split"})])})]),m=n?"div":"li",v=e(m,i()([{on:s},{class:h()(u+"-item",(0,c.A)({},u+"-item-no-flex",!this.isFlexMode()))}]),["vertical"===r&&d?[e("div",{class:u+"-item-main",key:"content"},[a["default"],p]),e("div",{class:u+"-item-extra",key:"extra"},[d])]:[a["default"],p,(0,M.Ob)(d,{key:"extra"})]]),g=n?e(b.Ay,{attrs:{span:x(n,"column"),xs:x(n,"xs"),sm:x(n,"sm"),md:x(n,"md"),lg:x(n,"lg"),xl:x(n,"xl"),xxl:x(n,"xxl")}},[v]):v;return g}},L=n(44807),C=["",1,2,3,4,6,8,12,24],S={gutter:u.A.number,column:u.A.oneOf(C),xs:u.A.oneOf(C),sm:u.A.oneOf(C),md:u.A.oneOf(C),lg:u.A.oneOf(C),xl:u.A.oneOf(C),xxl:u.A.oneOf(C)},z=["small","default","large"],T=function(){return{bordered:u.A.bool,dataSource:u.A.array,extra:u.A.any,grid:u.A.shape(S).loose,itemLayout:u.A.string,loading:u.A.oneOfType([u.A.bool,u.A.object]),loadMore:u.A.any,pagination:u.A.oneOfType([u.A.shape((0,v.BH)()).loose,u.A.bool]),prefixCls:u.A.string,rowKey:u.A.any,renderItem:u.A.any,size:u.A.oneOf(z),split:u.A.bool,header:u.A.any,footer:u.A.any,locale:u.A.object}},O={Item:k,name:"AList",props:(0,_.CB)(T(),{dataSource:[],bordered:!1,split:!0,loading:!1,pagination:!1}),provide:function(){return{listContext:this}},inject:{configProvider:{default:function(){return p.f}}},data:function(){var e=this;this.keys=[],this.defaultPaginationProps={current:1,pageSize:10,onChange:function(t,n){var r=e.pagination;e.paginationCurrent=t,r&&r.onChange&&r.onChange(t,n)},total:0},this.onPaginationChange=this.triggerPaginationEvent("onChange"),this.onPaginationShowSizeChange=this.triggerPaginationEvent("onShowSizeChange");var t=this.$props.pagination,n=t&&"object"===("undefined"===typeof t?"undefined":(0,l.A)(t))?t:{};return{paginationCurrent:n.defaultCurrent||1,paginationSize:n.defaultPageSize||10}},methods:{triggerPaginationEvent:function(e){var t=this;return function(n,r){var i=t.$props.pagination;t.paginationCurrent=n,t.paginationSize=r,i&&i[e]&&i[e](n,r)}},renderItem2:function(e,t){var n=this.$scopedSlots,r=this.rowKey,i=this.renderItem||n.renderItem;if(!i)return null;var o=void 0;return o="function"===typeof r?r(e):"string"===typeof r?e[r]:e.key,o||(o="list-item-"+t),this.keys[t]=o,i(e,t)},isSomethingAfterLastItem:function(){var e=this.pagination,t=(0,_.nu)(this,"loadMore"),n=(0,_.nu)(this,"footer");return!!(t||e||n)},renderEmpty:function(e,t){var n=this.$createElement,r=this.locale;return n("div",{class:e+"-empty-text"},[r&&r.emptyText||t(n,"List")])}},render:function(){var e,t=this,n=arguments[0],r=this.prefixCls,l=this.bordered,u=this.split,d=this.itemLayout,p=this.pagination,v=this.grid,b=this.dataSource,A=void 0===b?[]:b,w=this.size,x=this.loading,k=this.$slots,L=this.paginationCurrent,C=this.paginationSize,S=this.configProvider.getPrefixCls,z=S("list",r),T=(0,_.nu)(this,"loadMore"),O=(0,_.nu)(this,"footer"),H=(0,_.nu)(this,"header"),D=(0,_.Gk)(k["default"]||[]),Y=x;"boolean"===typeof Y&&(Y={spinning:Y});var V=Y&&Y.spinning,P="";switch(w){case"large":P="lg";break;case"small":P="sm";break;default:break}var E=h()(z,(e={},(0,c.A)(e,z+"-vertical","vertical"===d),(0,c.A)(e,z+"-"+P,P),(0,c.A)(e,z+"-split",u),(0,c.A)(e,z+"-bordered",l),(0,c.A)(e,z+"-loading",V),(0,c.A)(e,z+"-grid",v),(0,c.A)(e,z+"-something-after-last-item",this.isSomethingAfterLastItem()),e)),j=(0,s.A)({},this.defaultPaginationProps,{total:A.length,current:L,pageSize:C},p||{}),F=Math.ceil(j.total/j.pageSize);j.current>F&&(j.current=F);var I=j["class"],$=j.style,R=(0,a.A)(j,["class","style"]),N=p?n("div",{class:z+"-pagination"},[n(g.Ay,{props:(0,f.A)(R,["onChange"]),class:I,style:$,on:{change:this.onPaginationChange,showSizeChange:this.onPaginationShowSizeChange}})]):null,W=[].concat((0,o.A)(A));p&&A.length>(j.current-1)*j.pageSize&&(W=[].concat((0,o.A)(A)).splice((j.current-1)*j.pageSize,j.pageSize));var B=void 0;if(B=V&&n("div",{style:{minHeight:53}}),W.length>0){var K=W.map(function(e,n){return t.renderItem2(e,n)}),U=K.map(function(e,n){return(0,M.Ob)(e,{key:t.keys[n]})});B=v?n(y.A,{attrs:{gutter:v.gutter}},[U]):n("ul",{class:z+"-items"},[U])}else if(!D.length&&!V){var q=this.configProvider.renderEmpty;B=this.renderEmpty(z,q)}var G=j.position||"bottom";return n("div",i()([{class:E},{on:(0,_.WM)(this)}]),[("top"===G||"both"===G)&&N,H&&n("div",{class:z+"-header"},[H]),n(m.A,{props:Y},[B,D]),O&&n("div",{class:z+"-footer"},[O]),T||("bottom"===G||"both"===G)&&N])},install:function(e){e.use(L.A),e.component(O.name,O),e.component(O.Item.name,O.Item),e.component(O.Item.Meta.name,O.Item.Meta)}},H=O},66882:function(e,t,n){"use strict";n(29229),n(93693),n(45562),n(25482),n(67434)},38377:function(e,t,n){"use strict";var r=n(85505),i=n(4718),o=n(77749);t.A={name:"LocaleReceiver",props:{componentName:i.A.string.def("global"),defaultLocale:i.A.oneOfType([i.A.object,i.A.func]),children:i.A.func},inject:{localeData:{default:function(){return{}}}},methods:{getLocale:function(){var e=this.componentName,t=this.defaultLocale,n=t||o.A[e||"global"],i=this.localeData.antLocale,a=e&&i?i[e]:{};return(0,r.A)({},"function"===typeof n?n():n,a||{})},getLocaleCode:function(){var e=this.localeData.antLocale,t=e&&e.locale;return e&&e.exist&&!t?o.A.locale:t}},render:function(){var e=this.$scopedSlots,t=this.children||e["default"],n=this.localeData.antLocale;return t(this.getLocale(),this.getLocaleCode(),n)}}},77749:function(e,t,n){"use strict";var r=n(81966);t.A=r.A},1512:function(e,t,n){"use strict";n.d(t,{A:function(){return o}});var r=n(81966),i=r.A,o=i},81966:function(e,t,n){"use strict";n.d(t,{A:function(){return s}});var r=n(15709),i=n(69656),o=n(68265),a=i.A,s={locale:"en",Pagination:r.A,DatePicker:i.A,TimePicker:o.A,Calendar:a,global:{placeholder:"Please select"},Table:{filterTitle:"Filter menu",filterConfirm:"OK",filterReset:"Reset",selectAll:"Select current page",selectInvert:"Invert current page",sortTitle:"Sort",expand:"Expand row",collapse:"Collapse row"},Modal:{okText:"OK",cancelText:"Cancel",justOkText:"OK"},Popconfirm:{okText:"OK",cancelText:"Cancel"},Transfer:{titles:["",""],searchPlaceholder:"Search here",itemUnit:"item",itemsUnit:"items"},Upload:{uploading:"Uploading...",removeFile:"Remove file",uploadError:"Upload error",previewFile:"Preview file",downloadFile:"Download file"},Empty:{description:"No Data"},Icon:{icon:"icon"},Text:{edit:"Edit",copy:"Copy",copied:"Copied",expand:"Expand"},PageHeader:{back:"Back"}}},36457:function(e,t,n){"use strict";n.d(t,{Ay:function(){return T}});var r=n(75189),i=n.n(r),o=n(44508),a=n(85505),s=n(90034),c={name:"MenuDivider",props:{disabled:{type:Boolean,default:!0},rootPrefixCls:String},render:function(){var e=arguments[0],t=this.$props.rootPrefixCls;return e("li",{class:t+"-item-divider"})}},l=n(13382),u=n(74072),d=n(70198),h=n(15848),f=n(46942),p=n.n(f),m={name:"ASubMenu",isSubMenu:!0,props:(0,a.A)({},d.A.props),inject:{menuPropsContext:{default:function(){return{}}}},methods:{onKeyDown:function(e){this.$refs.subMenu.onKeyDown(e)}},render:function(){var e=arguments[0],t=this.$slots,n=this.$scopedSlots,r=this.$props,i=r.rootPrefixCls,o=r.popupClassName,s=this.menuPropsContext.theme,c={props:(0,a.A)({},this.$props,{popupClassName:p()(i+"-"+s,o)}),ref:"subMenu",on:(0,h.WM)(this),scopedSlots:n},l=Object.keys(t);return e(d.A,c,[l.length?l.map(function(n){return e("template",{slot:n},[t[n]])}):null])}},v=n(4718),g=n(40703),y=n(36873),_=n(5285),b=n(90500);function M(){}var A={name:"MenuItem",inheritAttrs:!1,props:_.V,inject:{getInlineCollapsed:{default:function(){return M}},layoutSiderContext:{default:function(){return{}}}},isMenuItem:!0,methods:{onKeyDown:function(e){this.$refs.menuItem.onKeyDown(e)}},render:function(){var e=arguments[0],t=(0,h.Oq)(this),n=t.level,r=t.title,o=t.rootPrefixCls,s=this.getInlineCollapsed,c=this.$slots,l=this.$attrs,u=s(),d=r;"undefined"===typeof r?d=1===n?c["default"]:"":!1===r&&(d="");var f={title:d},p=this.layoutSiderContext.sCollapsed;p||u||(f.title=null,f.visible=!1);var m={props:(0,a.A)({},t,{title:r}),attrs:l,on:(0,h.WM)(this)},v={props:(0,a.A)({},f,{placement:"right",overlayClassName:o+"-inline-collapsed-tooltip"})};return e(b.A,v,[e(_.A,i()([m,{ref:"menuItem"}]),[c["default"]])])}},w=n(52315),x=n(55384),k=n(25592),L=n(44807),C=v.A.oneOf(["vertical","vertical-left","vertical-right","horizontal","inline"]),S=(0,a.A)({},x.A,{theme:v.A.oneOf(["light","dark"]).def("light"),mode:C.def("vertical"),selectable:v.A.bool,selectedKeys:v.A.arrayOf(v.A.oneOfType([v.A.string,v.A.number])),defaultSelectedKeys:v.A.array,openKeys:v.A.array,defaultOpenKeys:v.A.array,openAnimation:v.A.oneOfType([v.A.string,v.A.object]),openTransitionName:v.A.string,prefixCls:v.A.string,multiple:v.A.bool,inlineIndent:v.A.number.def(24),inlineCollapsed:v.A.bool,isRootMenu:v.A.bool.def(!0),focusable:v.A.bool.def(!1)}),z={name:"AMenu",props:S,Divider:(0,a.A)({},c,{name:"AMenuDivider"}),Item:(0,a.A)({},A,{name:"AMenuItem"}),SubMenu:(0,a.A)({},m,{name:"ASubMenu"}),ItemGroup:(0,a.A)({},l.A,{name:"AMenuItemGroup"}),provide:function(){return{getInlineCollapsed:this.getInlineCollapsed,menuPropsContext:this.$props}},mixins:[w.A],inject:{layoutSiderContext:{default:function(){return{}}},configProvider:{default:function(){return k.f}}},model:{prop:"selectedKeys",event:"selectChange"},updated:function(){this.propsUpdating=!1},watch:{mode:function(e,t){"inline"===t&&"inline"!==e&&(this.switchingModeFromInline=!0)},openKeys:function(e){this.setState({sOpenKeys:e})},inlineCollapsed:function(e){this.collapsedChange(e)},"layoutSiderContext.sCollapsed":function(e){this.collapsedChange(e)}},data:function(){var e=(0,h.Oq)(this);(0,y.A)(!("inlineCollapsed"in e&&"inline"!==e.mode),"Menu","`inlineCollapsed` should only be used when Menu's `mode` is inline."),this.switchingModeFromInline=!1,this.leaveAnimationExecutedWhenInlineCollapsed=!1,this.inlineOpenKeys=[];var t=void 0;return"openKeys"in e?t=e.openKeys:"defaultOpenKeys"in e&&(t=e.defaultOpenKeys),{sOpenKeys:t}},methods:{collapsedChange:function(e){this.propsUpdating||(this.propsUpdating=!0,(0,h.cK)(this,"openKeys")?e&&(this.switchingModeFromInline=!0):e?(this.switchingModeFromInline=!0,this.inlineOpenKeys=this.sOpenKeys,this.setState({sOpenKeys:[]})):(this.setState({sOpenKeys:this.inlineOpenKeys}),this.inlineOpenKeys=[]))},restoreModeVerticalFromInline:function(){this.switchingModeFromInline&&(this.switchingModeFromInline=!1,this.$forceUpdate())},handleMouseEnter:function(e){this.restoreModeVerticalFromInline(),this.$emit("mouseenter",e)},handleTransitionEnd:function(e){var t="width"===e.propertyName&&e.target===e.currentTarget,n=e.target.className,r="[object SVGAnimatedString]"===Object.prototype.toString.call(n)?n.animVal:n,i="font-size"===e.propertyName&&r.indexOf("anticon")>=0;(t||i)&&this.restoreModeVerticalFromInline()},handleClick:function(e){this.handleOpenChange([]),this.$emit("click",e)},handleSelect:function(e){this.$emit("select",e),this.$emit("selectChange",e.selectedKeys)},handleDeselect:function(e){this.$emit("deselect",e),this.$emit("selectChange",e.selectedKeys)},handleOpenChange:function(e){this.setOpenKeys(e),this.$emit("openChange",e),this.$emit("update:openKeys",e)},setOpenKeys:function(e){(0,h.cK)(this,"openKeys")||this.setState({sOpenKeys:e})},getRealMenuMode:function(){var e=this.getInlineCollapsed();if(this.switchingModeFromInline&&e)return"inline";var t=this.$props.mode;return e?"vertical":t},getInlineCollapsed:function(){var e=this.$props.inlineCollapsed;return void 0!==this.layoutSiderContext.sCollapsed?this.layoutSiderContext.sCollapsed:e},getMenuOpenAnimation:function(e){var t=this.$props,n=t.openAnimation,r=t.openTransitionName,i=n||r;return void 0===n&&void 0===r&&("horizontal"===e?i="slide-up":"inline"===e?i={on:g.A}:this.switchingModeFromInline?(i="",this.switchingModeFromInline=!1):i="zoom-big"),i}},render:function(){var e,t=this,n=arguments[0],r=this.layoutSiderContext,c=this.$slots,l=r.collapsedWidth,d=this.configProvider.getPopupContainer,f=(0,h.Oq)(this),p=f.prefixCls,m=f.theme,v=f.getPopupContainer,g=this.configProvider.getPrefixCls,y=g("menu",p),_=this.getRealMenuMode(),b=this.getMenuOpenAnimation(_),M=(e={},(0,o.A)(e,y+"-"+m,!0),(0,o.A)(e,y+"-inline-collapsed",this.getInlineCollapsed()),e),A={props:(0,a.A)({},(0,s.A)(f,["inlineCollapsed"]),{getPopupContainer:v||d,openKeys:this.sOpenKeys,mode:_,prefixCls:y}),on:(0,a.A)({},(0,h.WM)(this),{select:this.handleSelect,deselect:this.handleDeselect,openChange:this.handleOpenChange,mouseenter:this.handleMouseEnter}),nativeOn:{transitionend:this.handleTransitionEnd}};(0,h.cK)(this,"selectedKeys")||delete A.props.selectedKeys,"inline"!==_?(A.on.click=this.handleClick,A.props.openTransitionName=b):(A.on.click=function(e){t.$emit("click",e)},A.props.openAnimation=b);var w=this.getInlineCollapsed()&&(0===l||"0"===l||"0px"===l);return w&&(A.props.openKeys=[]),n(u.Ay,i()([A,{class:M}]),[c["default"]])},install:function(e){e.use(L.A),e.component(z.name,z),e.component(z.Item.name,z.Item),e.component(z.SubMenu.name,z.SubMenu),e.component(z.Divider.name,z.Divider),e.component(z.ItemGroup.name,z.ItemGroup)}},T=z},1747:function(e,t,n){"use strict";n(29229),n(42543)},18787:function(e,t,n){"use strict";var r=n(85505),i=n(94915),o=n(40255),a=3,s=void 0,c=void 0,l=1,u="ant-message",d="move-up",h=function(){return document.body},f=void 0;function p(e){c?e(c):i.A.newInstance({prefixCls:u,transitionName:d,style:{top:s},getContainer:h,maxCount:f},function(t){c?e(c):(c=t,e(t))})}function m(e){var t=void 0!==e.duration?e.duration:a,n={info:"info-circle",success:"check-circle",error:"close-circle",warning:"exclamation-circle",loading:"loading"}[e.type],r=e.key||l++,i=new Promise(function(i){var a=function(){return"function"===typeof e.onClose&&e.onClose(),i(!0)};p(function(i){i.notice({key:r,duration:t,style:{},content:function(t){var r=t(o.A,{attrs:{type:n,theme:"loading"===n?"outlined":"filled"}}),i=n?r:"";return t("div",{class:u+"-custom-content"+(e.type?" "+u+"-"+e.type:"")},[e.icon?"function"===typeof e.icon?e.icon(t):e.icon:i,t("span",["function"===typeof e.content?e.content(t):e.content])])},onClose:a})})}),s=function(){c&&c.removeNotice(r)};return s.then=function(e,t){return i.then(e,t)},s.promise=i,s}function v(e){return"[object Object]"===Object.prototype.toString.call(e)&&!!e.content}var g={open:m,config:function(e){void 0!==e.top&&(s=e.top,c=null),void 0!==e.duration&&(a=e.duration),void 0!==e.prefixCls&&(u=e.prefixCls),void 0!==e.getContainer&&(h=e.getContainer),void 0!==e.transitionName&&(d=e.transitionName,c=null),void 0!==e.maxCount&&(f=e.maxCount,c=null)},destroy:function(){c&&(c.destroy(),c=null)}};["success","info","warning","error","loading"].forEach(function(e){g[e]=function(t,n,i){return v(t)?g.open((0,r.A)({},t,{type:e})):("function"===typeof n&&(i=n,n=void 0),g.open({content:t,duration:n,type:e,onClose:i}))}}),g.warn=g.warning,t.A=g},6011:function(e,t,n){"use strict";n(29229)},43898:function(e,t,n){"use strict";n.d(t,{A:function(){return ve}});var r=n(85505),i=n(44508),o=n(46942),a=n.n(o),s=n(75189),c=n.n(s),l=n(15848),u=n(11207),d=n(17948),h=n(4718),f={visible:h.A.bool,hiddenClassName:h.A.string,forceRender:h.A.bool},p={props:f,render:function(){var e=arguments[0];return e("div",{on:(0,l.WM)(this)},[this.$slots["default"]])}},m=n(52315),v=n(80178),g=n(93986),y=function(e){var t=document.body.scrollHeight>(window.innerHeight||document.documentElement.clientHeight)&&window.innerWidth>document.body.offsetWidth;if(t){if(e)return document.body.style.position="",void(document.body.style.width="");var n=(0,g.A)();n&&(document.body.style.position="relative",document.body.style.width="calc(100% - "+n+"px)")}};function _(){return{keyboard:h.A.bool,mask:h.A.bool,afterClose:h.A.func,closable:h.A.bool,maskClosable:h.A.bool,visible:h.A.bool,destroyOnClose:h.A.bool,mousePosition:h.A.shape({x:h.A.number,y:h.A.number}).loose,title:h.A.any,footer:h.A.any,transitionName:h.A.string,maskTransitionName:h.A.string,animation:h.A.any,maskAnimation:h.A.any,wrapStyle:h.A.object,bodyStyle:h.A.object,maskStyle:h.A.object,prefixCls:h.A.string,wrapClassName:h.A.string,width:h.A.oneOfType([h.A.string,h.A.number]),height:h.A.oneOfType([h.A.string,h.A.number]),zIndex:h.A.number,bodyProps:h.A.any,maskProps:h.A.any,wrapProps:h.A.any,getContainer:h.A.any,dialogStyle:h.A.object.def(function(){return{}}),dialogClass:h.A.string.def(""),closeIcon:h.A.any,forceRender:h.A.bool,getOpenCount:h.A.func,focusTriggerAfterClose:h.A.bool}}var b=_,M=b(),A=0;function w(){}function x(e,t){var n=e["page"+(t?"Y":"X")+"Offset"],r="scroll"+(t?"Top":"Left");if("number"!==typeof n){var i=e.document;n=i.documentElement[r],"number"!==typeof n&&(n=i.body[r])}return n}function k(e,t){var n=e.style;["Webkit","Moz","Ms","ms"].forEach(function(e){n[e+"TransformOrigin"]=t}),n["transformOrigin"]=t}function L(e){var t=e.getBoundingClientRect(),n={left:t.left,top:t.top},r=e.ownerDocument,i=r.defaultView||r.parentWindow;return n.left+=x(i),n.top+=x(i,!0),n}var C={},S={mixins:[m.A],props:(0,l.CB)(M,{mask:!0,visible:!1,keyboard:!0,closable:!0,maskClosable:!0,destroyOnClose:!1,prefixCls:"rc-dialog",getOpenCount:function(){return null},focusTriggerAfterClose:!0}),data:function(){return{destroyPopup:!1}},provide:function(){return{dialogContext:this}},watch:{visible:function(e){var t=this;e&&(this.destroyPopup=!1),this.$nextTick(function(){t.updatedCallback(!e)})}},beforeMount:function(){this.inTransition=!1,this.titleId="rcDialogTitle"+A++},mounted:function(){var e=this;this.$nextTick(function(){e.updatedCallback(!1),(e.forceRender||!1===e.getContainer&&!e.visible)&&e.$refs.wrap&&(e.$refs.wrap.style.display="none")})},beforeDestroy:function(){var e=this.visible,t=this.getOpenCount;!e&&!this.inTransition||t()||this.switchScrollingEffect(),clearTimeout(this.timeoutId)},methods:{getDialogWrap:function(){return this.$refs.wrap},updatedCallback:function(e){var t=this.mousePosition,n=this.mask,r=this.focusTriggerAfterClose;if(this.visible){if(!e){this.openTime=Date.now(),this.switchScrollingEffect(),this.tryFocus();var i=this.$refs.dialog.$el;if(t){var o=L(i);k(i,t.x-o.left+"px "+(t.y-o.top)+"px")}else k(i,"")}}else if(e&&(this.inTransition=!0,n&&this.lastOutSideFocusNode&&r)){try{this.lastOutSideFocusNode.focus()}catch(a){this.lastOutSideFocusNode=null}this.lastOutSideFocusNode=null}},tryFocus:function(){(0,d.A)(this.$refs.wrap,document.activeElement)||(this.lastOutSideFocusNode=document.activeElement,this.$refs.sentinelStart.focus())},onAnimateLeave:function(){var e=this.afterClose,t=this.destroyOnClose;this.$refs.wrap&&(this.$refs.wrap.style.display="none"),t&&(this.destroyPopup=!0),this.inTransition=!1,this.switchScrollingEffect(),e&&e()},onDialogMouseDown:function(){this.dialogMouseDown=!0},onMaskMouseUp:function(){var e=this;this.dialogMouseDown&&(this.timeoutId=setTimeout(function(){e.dialogMouseDown=!1},0))},onMaskClick:function(e){Date.now()-this.openTime<300||e.target!==e.currentTarget||this.dialogMouseDown||this.close(e)},onKeydown:function(e){var t=this.$props;if(t.keyboard&&e.keyCode===u.A.ESC)return e.stopPropagation(),void this.close(e);if(t.visible&&e.keyCode===u.A.TAB){var n=document.activeElement,r=this.$refs.sentinelStart;e.shiftKey?n===r&&this.$refs.sentinelEnd.focus():n===this.$refs.sentinelEnd&&r.focus()}},getDialogElement:function(){var e=this.$createElement,t=this.closable,n=this.prefixCls,o=this.width,a=this.height,s=this.title,u=this.footer,d=this.bodyStyle,h=this.visible,f=this.bodyProps,m=this.forceRender,g=this.dialogStyle,y=this.dialogClass,_=(0,r.A)({},g);void 0!==o&&(_.width="number"===typeof o?o+"px":o),void 0!==a&&(_.height="number"===typeof a?a+"px":a);var b=void 0;u&&(b=e("div",{key:"footer",class:n+"-footer",ref:"footer"},[u]));var M=void 0;s&&(M=e("div",{key:"header",class:n+"-header",ref:"header"},[e("div",{class:n+"-title",attrs:{id:this.titleId}},[s])]));var A=void 0;if(t){var x=(0,l.nu)(this,"closeIcon");A=e("button",{attrs:{type:"button","aria-label":"Close"},key:"close",on:{click:this.close||w},class:n+"-close"},[x||e("span",{class:n+"-close-x"})])}var k=_,L={width:0,height:0,overflow:"hidden"},C=(0,i.A)({},n,!0),S=this.getTransitionName(),z=e(p,{directives:[{name:"show",value:h}],key:"dialog-element",attrs:{role:"document",forceRender:m},ref:"dialog",style:k,class:[C,y],on:{mousedown:this.onDialogMouseDown}},[e("div",{attrs:{tabIndex:0,"aria-hidden":"true"},ref:"sentinelStart",style:L}),e("div",{class:n+"-content"},[A,M,e("div",c()([{key:"body",class:n+"-body",style:d,ref:"body"},f]),[this.$slots["default"]]),b]),e("div",{attrs:{tabIndex:0,"aria-hidden":"true"},ref:"sentinelEnd",style:L})]),T=(0,v.A)(S,{afterLeave:this.onAnimateLeave});return e("transition",c()([{key:"dialog"},T]),[h||!this.destroyPopup?z:null])},getZIndexStyle:function(){var e={},t=this.$props;return void 0!==t.zIndex&&(e.zIndex=t.zIndex),e},getWrapStyle:function(){return(0,r.A)({},this.getZIndexStyle(),this.wrapStyle)},getMaskStyle:function(){return(0,r.A)({},this.getZIndexStyle(),this.maskStyle)},getMaskElement:function(){var e=this.$createElement,t=this.$props,n=void 0;if(t.mask){var r=this.getMaskTransitionName();if(n=e(p,c()([{directives:[{name:"show",value:t.visible}],style:this.getMaskStyle(),key:"mask",class:t.prefixCls+"-mask"},t.maskProps])),r){var i=(0,v.A)(r);n=e("transition",c()([{key:"mask"},i]),[n])}}return n},getMaskTransitionName:function(){var e=this.$props,t=e.maskTransitionName,n=e.maskAnimation;return!t&&n&&(t=e.prefixCls+"-"+n),t},getTransitionName:function(){var e=this.$props,t=e.transitionName,n=e.animation;return!t&&n&&(t=e.prefixCls+"-"+n),t},switchScrollingEffect:function(){var e=this.getOpenCount,t=e();if(1===t){if(C.hasOwnProperty("overflowX"))return;C={overflowX:document.body.style.overflowX,overflowY:document.body.style.overflowY,overflow:document.body.style.overflow},y(),document.body.style.overflow="hidden"}else t||(void 0!==C.overflow&&(document.body.style.overflow=C.overflow),void 0!==C.overflowX&&(document.body.style.overflowX=C.overflowX),void 0!==C.overflowY&&(document.body.style.overflowY=C.overflowY),C={},y(!0))},close:function(e){this.__emit("close",e)}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.maskClosable,r=this.visible,i=this.wrapClassName,o=this.title,a=this.wrapProps,s=this.getWrapStyle();return r&&(s.display=null),e("div",{class:t+"-root"},[this.getMaskElement(),e("div",c()([{attrs:{tabIndex:-1,role:"dialog","aria-labelledby":o?this.titleId:null},on:{keydown:this.onKeydown,click:n?this.onMaskClick:w,mouseup:n?this.onMaskMouseUp:w},class:t+"-wrap "+(i||""),ref:"wrap",style:s},a]),[this.getDialogElement()])])}},z=n(97479);function T(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.element,r=void 0===n?document.body:n,i={},o=Object.keys(e);return o.forEach(function(e){i[e]=r.style[e]}),o.forEach(function(t){r.style[t]=e[t]}),i}var O=T,H=n(48159),D=0,Y=!("undefined"!==typeof window&&window.document&&window.document.createElement),V={},P={name:"PortalWrapper",props:{wrapperClassName:h.A.string,forceRender:h.A.bool,getContainer:h.A.any,children:h.A.func,visible:h.A.bool},data:function(){var e=this.$props.visible;return D=e?D+1:D,{}},updated:function(){this.setWrapperClassName()},watch:{visible:function(e){D=e?D+1:D-1},getContainer:function(e,t){var n="function"===typeof e&&"function"===typeof t;(n?e.toString()!==t.toString():e!==t)&&this.removeCurrentContainer(!1)}},beforeDestroy:function(){var e=this.$props.visible;D=e&&D?D-1:D,this.removeCurrentContainer(e)},methods:{getParent:function(){var e=this.$props.getContainer;if(e){if("string"===typeof e)return document.querySelectorAll(e)[0];if("function"===typeof e)return e();if("object"===("undefined"===typeof e?"undefined":(0,z.A)(e))&&e instanceof window.HTMLElement)return e}return document.body},getDomContainer:function(){if(Y)return null;if(!this.container){this.container=document.createElement("div");var e=this.getParent();e&&e.appendChild(this.container)}return this.setWrapperClassName(),this.container},setWrapperClassName:function(){var e=this.$props.wrapperClassName;this.container&&e&&e!==this.container.className&&(this.container.className=e)},savePortal:function(e){this._component=e},removeCurrentContainer:function(){this.container=null,this._component=null},switchScrollingEffect:function(){1!==D||Object.keys(V).length?D||(O(V),V={},y(!0)):(y(),V=O({overflow:"hidden",overflowX:"hidden",overflowY:"hidden"}))}},render:function(){var e=arguments[0],t=this.$props,n=t.children,r=t.forceRender,i=t.visible,o=null,a={getOpenCount:function(){return D},getContainer:this.getDomContainer,switchScrollingEffect:this.switchScrollingEffect};return(r||i||this._component)&&(o=e(H.A,c()([{attrs:{getContainer:this.getDomContainer,children:n(a)}},{directives:[{name:"ant-ref",value:this.savePortal}]}]))),o}},E=b(),j={inheritAttrs:!1,props:(0,r.A)({},E,{visible:E.visible.def(!1)}),render:function(){var e=this,t=arguments[0],n=this.$props,i=n.visible,o=n.getContainer,a=n.forceRender,s={props:this.$props,attrs:this.$attrs,ref:"_component",key:"dialog",on:(0,l.WM)(this)};return!1===o?t(S,c()([s,{attrs:{getOpenCount:function(){return 2}}}]),[this.$slots["default"]]):t(P,{attrs:{visible:i,forceRender:a,getContainer:o,children:function(n){return s.props=(0,r.A)({},s.props,n),t(S,s,[e.$slots["default"]])}}})}},F=j,I=F,$=n(82160),R=n(96995),N=n(40255),W=n(49084),B=n(26997),K=n(38377),U=n(25592),q=(0,B.A)().type,G=null,J=function(e){G={x:e.pageX,y:e.pageY},setTimeout(function(){return G=null},100)};function X(){}"undefined"!==typeof window&&window.document&&window.document.documentElement&&(0,$.A)(document.documentElement,"click",J,!0);var Z=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t={prefixCls:h.A.string,visible:h.A.bool,confirmLoading:h.A.bool,title:h.A.any,closable:h.A.bool,closeIcon:h.A.any,afterClose:h.A.func.def(X),centered:h.A.bool,width:h.A.oneOfType([h.A.string,h.A.number]),footer:h.A.any,okText:h.A.any,okType:q,cancelText:h.A.any,icon:h.A.any,maskClosable:h.A.bool,forceRender:h.A.bool,okButtonProps:h.A.object,cancelButtonProps:h.A.object,destroyOnClose:h.A.bool,wrapClassName:h.A.string,maskTransitionName:h.A.string,transitionName:h.A.string,getContainer:h.A.func,zIndex:h.A.number,bodyStyle:h.A.object,maskStyle:h.A.object,mask:h.A.bool,keyboard:h.A.bool,wrapProps:h.A.object,focusTriggerAfterClose:h.A.bool,dialogStyle:h.A.object.def(function(){return{}})};return(0,l.CB)(t,e)},Q=[],ee={name:"AModal",inheritAttrs:!1,model:{prop:"visible",event:"change"},props:Z({width:520,transitionName:"zoom",maskTransitionName:"fade",confirmLoading:!1,visible:!1,okType:"primary"}),data:function(){return{sVisible:!!this.visible}},watch:{visible:function(e){this.sVisible=e}},inject:{configProvider:{default:function(){return U.f}}},methods:{handleCancel:function(e){this.$emit("cancel",e),this.$emit("change",!1)},handleOk:function(e){this.$emit("ok",e)},renderFooter:function(e){var t=this.$createElement,n=this.okType,r=this.confirmLoading,i=(0,l.v6)({on:{click:this.handleCancel}},this.cancelButtonProps||{}),o=(0,l.v6)({on:{click:this.handleOk},props:{type:n,loading:r}},this.okButtonProps||{});return t("div",[t(W.A,i,[(0,l.nu)(this,"cancelText")||e.cancelText]),t(W.A,o,[(0,l.nu)(this,"okText")||e.okText])])}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.sVisible,o=this.wrapClassName,s=this.centered,c=this.getContainer,u=this.$slots,d=this.$scopedSlots,h=this.$attrs,f=d["default"]?d["default"]():u["default"],p=this.configProvider,m=p.getPrefixCls,v=p.getPopupContainer,g=m("modal",t),y=e(K.A,{attrs:{componentName:"Modal",defaultLocale:(0,R.l)()},scopedSlots:{default:this.renderFooter}}),_=(0,l.nu)(this,"closeIcon"),b=e("span",{class:g+"-close-x"},[_||e(N.A,{class:g+"-close-icon",attrs:{type:"close"}})]),M=(0,l.nu)(this,"footer"),A=(0,l.nu)(this,"title"),w={props:(0,r.A)({},this.$props,{getContainer:void 0===c?v:c,prefixCls:g,wrapClassName:a()((0,i.A)({},g+"-centered",!!s),o),title:A,footer:void 0===M?y:M,visible:n,mousePosition:G,closeIcon:b}),on:(0,r.A)({},(0,l.WM)(this),{close:this.handleCancel}),class:(0,l.t0)(this),style:(0,l.gd)(this),attrs:h};return e(I,w,[f])}},te=n(85471),ne=(0,B.A)().type,re={type:ne,actionFn:h.A.func,closeModal:h.A.func,autoFocus:h.A.bool,buttonProps:h.A.object},ie={mixins:[m.A],props:re,data:function(){return{loading:!1}},mounted:function(){var e=this;this.autoFocus&&(this.timeoutId=setTimeout(function(){return e.$el.focus()}))},beforeDestroy:function(){clearTimeout(this.timeoutId)},methods:{onClick:function(){var e=this,t=this.actionFn,n=this.closeModal;if(t){var r=void 0;t.length?r=t(n):(r=t(),r||n()),r&&r.then&&(this.setState({loading:!0}),r.then(function(){n.apply(void 0,arguments)},function(t){console.error(t),e.setState({loading:!1})}))}else n()}},render:function(){var e=arguments[0],t=this.type,n=this.$slots,r=this.loading,i=this.buttonProps;return e(W.A,c()([{attrs:{type:t,loading:r},on:{click:this.onClick}},i]),[n["default"]])}},oe=n(36873),ae={functional:!0,render:function(e,t){var n=t.props,r=n.onCancel,o=n.onOk,s=n.close,c=n.zIndex,l=n.afterClose,u=n.visible,d=n.keyboard,h=n.centered,f=n.getContainer,p=n.maskStyle,m=n.okButtonProps,v=n.cancelButtonProps,g=n.iconType,y=void 0===g?"question-circle":g,_=n.closable,b=void 0!==_&&_;(0,oe.A)(!("iconType"in n),"Modal","The property 'iconType' is deprecated. Use the property 'icon' instead.");var M=n.icon?n.icon:y,A=n.okType||"primary",w=n.prefixCls||"ant-modal",x=w+"-confirm",k=!("okCancel"in n)||n.okCancel,L=n.width||416,C=n.style||{},S=void 0===n.mask||n.mask,z=void 0!==n.maskClosable&&n.maskClosable,T=(0,R.l)(),O=n.okText||(k?T.okText:T.justOkText),H=n.cancelText||T.cancelText,D=null!==n.autoFocusButton&&(n.autoFocusButton||"ok"),Y=n.transitionName||"zoom",V=n.maskTransitionName||"fade",P=a()(x,x+"-"+n.type,w+"-"+n.type,n["class"]),E=k&&e(ie,{attrs:{actionFn:r,closeModal:s,autoFocus:"cancel"===D,buttonProps:v}},[H]),j="string"===typeof M?e(N.A,{attrs:{type:M}}):M(e);return e(ee,{attrs:{prefixCls:w,wrapClassName:a()((0,i.A)({},x+"-centered",!!h)),visible:u,closable:b,title:"",transitionName:Y,footer:"",maskTransitionName:V,mask:S,maskClosable:z,maskStyle:p,width:L,zIndex:c,afterClose:l,keyboard:d,centered:h,getContainer:f},class:P,on:{cancel:function(e){return s({triggerCancel:!0},e)}},style:C},[e("div",{class:x+"-body-wrapper"},[e("div",{class:x+"-body"},[j,void 0===n.title?null:e("span",{class:x+"-title"},["function"===typeof n.title?n.title(e):n.title]),e("div",{class:x+"-content"},["function"===typeof n.content?n.content(e):n.content])]),e("div",{class:x+"-btns"},[E,e(ie,{attrs:{type:A,actionFn:o,closeModal:s,autoFocus:"ok"===D,buttonProps:m}},[O])])])])}},se=n(44807),ce=n(90034);function le(e){var t=document.createElement("div"),n=document.createElement("div");t.appendChild(n),document.body.appendChild(t);var i=(0,r.A)({},(0,ce.A)(e,["parentContext"]),{close:s,visible:!0}),o=null,a={props:{}};function s(){l.apply(void 0,arguments)}function c(e){i=(0,r.A)({},i,e),a.props=i}function l(){o&&t.parentNode&&(o.$destroy(),o=null,t.parentNode.removeChild(t));for(var n=arguments.length,r=Array(n),i=0;i1&&void 0!==arguments[1]?arguments[1]:c,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:l,r=void 0;switch(e){case"topLeft":r={left:0,top:t,bottom:"auto"};break;case"topRight":r={right:0,top:t,bottom:"auto"};break;case"bottomLeft":r={left:0,top:"auto",bottom:n};break;default:r={right:0,top:"auto",bottom:n};break}return r}function m(e,t){var n=e.prefixCls,r=e.placement,s=void 0===r?u:r,c=e.getContainer,l=void 0===c?d:c,f=e.top,m=e.bottom,v=e.closeIcon,g=void 0===v?h:v,y=n+"-"+s;a[y]?t(a[y]):i.A.newInstance({prefixCls:n,class:n+"-"+s,style:p(s,f,m),getContainer:l,closeIcon:function(e){var t="function"===typeof g?g(e):g,r=e("span",{class:n+"-close-x"},[t||e(o.A,{class:n+"-close-icon",attrs:{type:"close"}})]);return r}},function(e){a[y]=e,t(e)})}var v={success:"check-circle-o",info:"info-circle-o",error:"close-circle-o",warning:"exclamation-circle-o"};function g(e){var t=e.icon,n=e.type,r=e.description,i=e.message,a=e.btn,c=e.prefixCls||"ant-notification",l=c+"-notice",u=void 0===e.duration?s:e.duration,d=null;if(t)d=function(e){return e("span",{class:l+"-icon"},["function"===typeof t?t(e):t])};else if(n){var h=v[n];d=function(e){return e(o.A,{class:l+"-icon "+l+"-icon-"+n,attrs:{type:h}})}}var f=e.placement,p=e.top,g=e.bottom,y=e.getContainer,_=e.closeIcon;m({prefixCls:c,placement:f,top:p,bottom:g,getContainer:y,closeIcon:_},function(t){t.notice({content:function(e){return e("div",{class:d?l+"-with-icon":""},[d&&d(e),e("div",{class:l+"-message"},[!r&&d?e("span",{class:l+"-message-single-line-auto-margin"}):null,"function"===typeof i?i(e):i]),e("div",{class:l+"-description"},["function"===typeof r?r(e):r]),a?e("span",{class:l+"-btn"},["function"===typeof a?a(e):a]):null])},duration:u,closable:!0,onClose:e.onClose,onClick:e.onClick,key:e.key,style:e.style||{},class:e["class"]})})}var y={open:g,close:function(e){Object.keys(a).forEach(function(t){return a[t].removeNotice(e)})},config:f,destroy:function(){Object.keys(a).forEach(function(e){a[e].destroy(),delete a[e]})}};["success","info","warning","error"].forEach(function(e){y[e]=function(t){return y.open((0,r.A)({},t,{type:e}))}}),y.warn=y.warning,t.A=y},41603:function(e,t,n){"use strict";n(29229)},90895:function(e,t,n){"use strict";n.d(t,{J:function(){return f}});var r=n(44508),i=n(4718),o=n(15848),a=n(25592),s=n(40255),c=n(65847),l=n(64719),u=n(6596),d=n(38377),h=n(44807),f={backIcon:i.A.any,prefixCls:i.A.string,title:i.A.any,subTitle:i.A.any,breadcrumb:i.A.object,tags:i.A.any,footer:i.A.any,extra:i.A.any,avatar:i.A.object,ghost:i.A.bool},p=function(e,t,n,r){var i=e.$createElement;return n&&r?i(d.A,{attrs:{componentName:"PageHeader"}},[function(r){var o=r.back;return i("div",{class:t+"-back"},[i(u.A,{on:{click:function(t){e.$emit("back",t)}},class:t+"-back-button",attrs:{"aria-label":o}},[n])])}]):null},m=function(e,t){return e(c.A,t)},v=function(e,t,n){var r=n.avatar,i=(0,o.nu)(n,"title"),a=(0,o.nu)(n,"subTitle"),c=(0,o.nu)(n,"tags"),u=(0,o.nu)(n,"extra"),d=void 0!==(0,o.nu)(n,"backIcon")?(0,o.nu)(n,"backIcon"):e(s.A,{attrs:{type:"arrow-left"}}),h=n.$listeners.back,f=t+"-heading";if(i||a||c||u){var m=p(n,t,d,h);return e("div",{class:f},[m,r&&e(l.A,r),i&&e("span",{class:f+"-title"},[i]),a&&e("span",{class:f+"-sub-title"},[a]),c&&e("span",{class:f+"-tags"},[c]),u&&e("span",{class:f+"-extra"},[u])])}return null},g=function(e,t,n){return n?e("div",{class:t+"-footer"},[n]):null},y=function(e,t,n){return e("div",{class:t+"-content"},[n])},_={name:"APageHeader",props:f,inject:{configProvider:{default:function(){return a.f}}},render:function(e){var t=this.configProvider,n=t.getPrefixCls,i=t.pageHeader,a=(0,o.Oq)(this),s=a.prefixCls,c=a.breadcrumb,l=(0,o.nu)(this,"footer"),u=this.$slots["default"],d=!0;"ghost"in a?d=a.ghost:i&&"ghost"in i&&(d=i.ghost);var h=n("page-header",s),f=c&&c.props&&c.props.routes?m(e,c):null,p=[h,(0,r.A)({"has-breadcrumb":f,"has-footer":l},h+"-ghost",d)];return e("div",{class:p},[f,v(e,h,this),u&&y(e,h,u),g(e,h,l)])},install:function(e){e.use(h.A),e.component(_.name,_)}};t.A=_},70503:function(e,t,n){"use strict";n(70093),n(76181)},38223:function(e,t,n){"use strict";n.d(t,{BH:function(){return T},bv:function(){return z},Ay:function(){return O}});var r=n(5748),i=n(85505),o=n(4718),a=n(25824),s=n(15848),c={props:(0,i.A)({},a.PZ),Option:a.Ay.Option,render:function(){var e=arguments[0],t=(0,s.Oq)(this),n={props:(0,i.A)({},t,{size:"small"}),on:(0,s.WM)(this)};return e(a.Ay,n,[(0,s.Gk)(this.$slots["default"])])}},l=n(38377),u=n(44508),d=n(75189),h=n.n(d),f=n(32779),p=n(52315),m=n(46942),v=n.n(m),g={name:"Pager",props:{rootPrefixCls:o.A.string,page:o.A.number,active:o.A.bool,last:o.A.bool,locale:o.A.object,showTitle:o.A.bool,itemRender:{type:Function,default:function(){}}},methods:{handleClick:function(){this.$emit("click",this.page)},handleKeyPress:function(e){this.$emit("keypress",e,this.handleClick,this.page)}},render:function(){var e,t=arguments[0],n=this.$props,r=n.rootPrefixCls+"-item",i=v()(r,r+"-"+n.page,(e={},(0,u.A)(e,r+"-active",n.active),(0,u.A)(e,r+"-disabled",!n.page),e));return t("li",{class:i,on:{click:this.handleClick,keypress:this.handleKeyPress},attrs:{title:this.showTitle?this.page:null,tabIndex:"0"}},[this.itemRender(this.page,"page",t("a",[this.page]))])}},y={ZERO:48,NINE:57,NUMPAD_ZERO:96,NUMPAD_NINE:105,BACKSPACE:8,DELETE:46,ENTER:13,ARROW_UP:38,ARROW_DOWN:40},_={mixins:[p.A],props:{disabled:o.A.bool,changeSize:o.A.func,quickGo:o.A.func,selectComponentClass:o.A.any,current:o.A.number,pageSizeOptions:o.A.array.def(["10","20","30","40"]),pageSize:o.A.number,buildOptionText:o.A.func,locale:o.A.object,rootPrefixCls:o.A.string,selectPrefixCls:o.A.string,goButton:o.A.any},data:function(){return{goInputText:""}},methods:{getValidValue:function(){var e=this.goInputText,t=this.current;return!e||isNaN(e)?t:Number(e)},defaultBuildOptionText:function(e){return e.value+" "+this.locale.items_per_page},handleChange:function(e){var t=e.target,n=t.value,r=t.composing;e.isComposing||r||this.goInputText===n||this.setState({goInputText:n})},handleBlur:function(e){var t=this.$props,n=t.goButton,r=t.quickGo,i=t.rootPrefixCls;n||e.relatedTarget&&(e.relatedTarget.className.indexOf(i+"-prev")>=0||e.relatedTarget.className.indexOf(i+"-next")>=0)||r(this.getValidValue())},go:function(e){var t=this.goInputText;""!==t&&(e.keyCode!==y.ENTER&&"click"!==e.type||(this.quickGo(this.getValidValue()),this.setState({goInputText:""})))}},render:function(){var e=this,t=arguments[0],n=this.rootPrefixCls,r=this.locale,i=this.changeSize,o=this.quickGo,a=this.goButton,s=this.selectComponentClass,c=this.defaultBuildOptionText,l=this.selectPrefixCls,u=this.pageSize,d=this.pageSizeOptions,f=this.goInputText,p=this.disabled,m=n+"-options",v=null,g=null,y=null;if(!i&&!o)return null;if(i&&s){var _=this.buildOptionText||c,b=d.map(function(e,n){return t(s.Option,{key:n,attrs:{value:e}},[_({value:e})])});v=t(s,{attrs:{disabled:p,prefixCls:l,showSearch:!1,optionLabelProp:"children",dropdownMatchSelectWidth:!1,value:(u||d[0]).toString(),getPopupContainer:function(e){return e.parentNode}},class:m+"-size-changer",on:{change:function(t){return e.changeSize(Number(t))}}},[b])}return o&&(a&&(y="boolean"===typeof a?t("button",{attrs:{type:"button",disabled:p},on:{click:this.go,keyup:this.go}},[r.jump_to_confirm]):t("span",{on:{click:this.go,keyup:this.go}},[a])),g=t("div",{class:m+"-quick-jumper"},[r.jump_to,t("input",h()([{attrs:{disabled:p,type:"text"},domProps:{value:f},on:{input:this.handleChange,keyup:this.go,blur:this.handleBlur}},{directives:[{name:"ant-input"}]}])),r.page,y])),t("li",{class:""+m},[v,g])}},b=n(48931);function M(){}function A(e){return"number"===typeof e&&isFinite(e)&&Math.floor(e)===e}function w(e,t,n){return n}function x(e,t,n){var r=e;return"undefined"===typeof r&&(r=t.statePageSize),Math.floor((n.total-1)/r)+1}var k={name:"Pagination",mixins:[p.A],model:{prop:"current",event:"change.current"},props:{disabled:o.A.bool,prefixCls:o.A.string.def("rc-pagination"),selectPrefixCls:o.A.string.def("rc-select"),current:o.A.number,defaultCurrent:o.A.number.def(1),total:o.A.number.def(0),pageSize:o.A.number,defaultPageSize:o.A.number.def(10),hideOnSinglePage:o.A.bool.def(!1),showSizeChanger:o.A.bool.def(!1),showLessItems:o.A.bool.def(!1),selectComponentClass:o.A.any,showPrevNextJumpers:o.A.bool.def(!0),showQuickJumper:o.A.oneOfType([o.A.bool,o.A.object]).def(!1),showTitle:o.A.bool.def(!0),pageSizeOptions:o.A.arrayOf(o.A.string),buildOptionText:o.A.func,showTotal:o.A.func,simple:o.A.bool,locale:o.A.object.def(b.A),itemRender:o.A.func.def(w),prevIcon:o.A.any,nextIcon:o.A.any,jumpPrevIcon:o.A.any,jumpNextIcon:o.A.any},data:function(){var e=(0,s.Oq)(this),t=this.onChange!==M,n="current"in e;n&&!t&&console.warn("Warning: You provided a `current` prop to a Pagination component without an `onChange` handler. This will render a read-only component.");var r=this.defaultCurrent;"current"in e&&(r=this.current);var i=this.defaultPageSize;return"pageSize"in e&&(i=this.pageSize),r=Math.min(r,x(i,void 0,e)),{stateCurrent:r,stateCurrentInputValue:r,statePageSize:i}},watch:{current:function(e){this.setState({stateCurrent:e,stateCurrentInputValue:e})},pageSize:function(e){var t={},n=this.stateCurrent,r=x(e,this.$data,this.$props);n=n>r?r:n,(0,s.cK)(this,"current")||(t.stateCurrent=n,t.stateCurrentInputValue=n),t.statePageSize=e,this.setState(t)},stateCurrent:function(e,t){var n=this;this.$nextTick(function(){if(n.$refs.paginationNode){var e=n.$refs.paginationNode.querySelector("."+n.prefixCls+"-item-"+t);e&&document.activeElement===e&&e.blur()}})},total:function(){var e={},t=x(this.pageSize,this.$data,this.$props);if((0,s.cK)(this,"current")){var n=Math.min(this.current,t);e.stateCurrent=n,e.stateCurrentInputValue=n}else{var r=this.stateCurrent;r=0===r&&t>0?1:Math.min(this.stateCurrent,t),e.stateCurrent=r}this.setState(e)}},methods:{getJumpPrevPage:function(){return Math.max(1,this.stateCurrent-(this.showLessItems?3:5))},getJumpNextPage:function(){return Math.min(x(void 0,this.$data,this.$props),this.stateCurrent+(this.showLessItems?3:5))},getItemIcon:function(e){var t=this.$createElement,n=this.$props.prefixCls,r=(0,s.nu)(this,e,this.$props)||t("a",{class:n+"-item-link"});return r},getValidValue:function(e){var t=e.target.value,n=x(void 0,this.$data,this.$props),r=this.$data.stateCurrentInputValue,i=void 0;return i=""===t?t:isNaN(Number(t))?r:t>=n?n:Number(t),i},isValid:function(e){return A(e)&&e!==this.stateCurrent},shouldDisplayQuickJumper:function(){var e=this.$props,t=e.showQuickJumper,n=e.pageSize,r=e.total;return!(r<=n)&&t},handleKeyDown:function(e){e.keyCode!==y.ARROW_UP&&e.keyCode!==y.ARROW_DOWN||e.preventDefault()},handleKeyUp:function(e){if(!e.isComposing&&!e.target.composing){var t=this.getValidValue(e),n=this.stateCurrentInputValue;t!==n&&this.setState({stateCurrentInputValue:t}),e.keyCode===y.ENTER?this.handleChange(t):e.keyCode===y.ARROW_UP?this.handleChange(t-1):e.keyCode===y.ARROW_DOWN&&this.handleChange(t+1)}},changePageSize:function(e){var t=this.stateCurrent,n=t,r=x(e,this.$data,this.$props);t=t>r?r:t,0===r&&(t=this.stateCurrent),"number"===typeof e&&((0,s.cK)(this,"pageSize")||this.setState({statePageSize:e}),(0,s.cK)(this,"current")||this.setState({stateCurrent:t,stateCurrentInputValue:t})),this.$emit("update:pageSize",e),this.$emit("showSizeChange",t,e),t!==n&&this.$emit("change.current",t,e)},handleChange:function(e){var t=this.$props.disabled,n=e;if(this.isValid(n)&&!t){var r=x(void 0,this.$data,this.$props);return n>r?n=r:n<1&&(n=1),(0,s.cK)(this,"current")||this.setState({stateCurrent:n,stateCurrentInputValue:n}),this.$emit("change.current",n,this.statePageSize),this.$emit("change",n,this.statePageSize),n}return this.stateCurrent},prev:function(){this.hasPrev()&&this.handleChange(this.stateCurrent-1)},next:function(){this.hasNext()&&this.handleChange(this.stateCurrent+1)},jumpPrev:function(){this.handleChange(this.getJumpPrevPage())},jumpNext:function(){this.handleChange(this.getJumpNextPage())},hasPrev:function(){return this.stateCurrent>1},hasNext:function(){return this.stateCurrent2?n-2:0),i=2;i0?b-1:0,w=b+1=2*y&&3!==b&&(c[0]=t(g,{attrs:{locale:a,rootPrefixCls:r,page:Y,active:!1,showTitle:this.showTitle,itemRender:this.itemRender},on:{click:this.handleChange,keypress:this.runIfEnter},key:Y,class:r+"-item-after-jump-prev"}),c.unshift(l)),s-b>=2*y&&b!==s-2&&(c[c.length-1]=t(g,{attrs:{locale:a,rootPrefixCls:r,page:V,active:!1,showTitle:this.showTitle,itemRender:this.itemRender},on:{click:this.handleChange,keypress:this.runIfEnter},key:V,class:r+"-item-before-jump-next"}),c.push(d)),1!==Y&&c.unshift(f),V!==s&&c.push(p)}var j=null;this.showTotal&&(j=t("li",{class:r+"-total-text"},[this.showTotal(this.total,[0===this.total?0:(b-1)*M+1,b*M>this.total?this.total:b*M])]));var F=!this.hasPrev()||!s,I=!this.hasNext()||!s,$=this.buildOptionText||this.$scopedSlots.buildOptionText;return t("ul",{class:(e={},(0,u.A)(e,""+r,!0),(0,u.A)(e,r+"-disabled",i),e),attrs:{unselectable:"unselectable"},ref:"paginationNode"},[j,t("li",{attrs:{title:this.showTitle?a.prev_page:null,tabIndex:F?null:0,"aria-disabled":F},on:{click:this.prev,keypress:this.runIfEnterPrev},class:(F?r+"-disabled":"")+" "+r+"-prev"},[this.itemRender(A,"prev",this.getItemIcon("prevIcon"))]),c,t("li",{attrs:{title:this.showTitle?a.next_page:null,tabIndex:I?null:0,"aria-disabled":I},on:{click:this.next,keypress:this.runIfEnterNext},class:(I?r+"-disabled":"")+" "+r+"-next"},[this.itemRender(w,"next",this.getItemIcon("nextIcon"))]),t(_,{attrs:{disabled:i,locale:a,rootPrefixCls:r,selectComponentClass:this.selectComponentClass,selectPrefixCls:this.selectPrefixCls,changeSize:this.showSizeChanger?this.changePageSize:null,current:b,pageSize:M,pageSizeOptions:this.pageSizeOptions,buildOptionText:$||null,quickGo:this.shouldDisplayQuickJumper()?this.handleChange:null,goButton:v}})])}},L=n(15709),C=n(40255),S=n(25592),z=function(){return{total:o.A.number,defaultCurrent:o.A.number,disabled:o.A.bool,current:o.A.number,defaultPageSize:o.A.number,pageSize:o.A.number,hideOnSinglePage:o.A.bool,showSizeChanger:o.A.bool,pageSizeOptions:o.A.arrayOf(o.A.oneOfType([o.A.number,o.A.string])),buildOptionText:o.A.func,showSizeChange:o.A.func,showQuickJumper:o.A.oneOfType([o.A.bool,o.A.object]),showTotal:o.A.any,size:o.A.string,simple:o.A.bool,locale:o.A.object,prefixCls:o.A.string,selectPrefixCls:o.A.string,itemRender:o.A.any,role:o.A.string,showLessItems:o.A.bool}},T=function(){return(0,i.A)({},z(),{position:o.A.oneOf(["top","bottom","both"])})},O={name:"APagination",model:{prop:"current",event:"change.current"},props:(0,i.A)({},z()),inject:{configProvider:{default:function(){return S.f}}},methods:{getIconsProps:function(e){var t=this.$createElement,n=t("a",{class:e+"-item-link"},[t(C.A,{attrs:{type:"left"}})]),r=t("a",{class:e+"-item-link"},[t(C.A,{attrs:{type:"right"}})]),i=t("a",{class:e+"-item-link"},[t("div",{class:e+"-item-container"},[t(C.A,{class:e+"-item-link-icon",attrs:{type:"double-left"}}),t("span",{class:e+"-item-ellipsis"},["•••"])])]),o=t("a",{class:e+"-item-link"},[t("div",{class:e+"-item-container"},[t(C.A,{class:e+"-item-link-icon",attrs:{type:"double-right"}}),t("span",{class:e+"-item-ellipsis"},["•••"])])]);return{prevIcon:n,nextIcon:r,jumpPrevIcon:i,jumpNextIcon:o}},renderPagination:function(e){var t=this.$createElement,n=(0,s.Oq)(this),o=n.prefixCls,l=n.selectPrefixCls,u=n.buildOptionText,d=n.size,h=n.locale,f=(0,r.A)(n,["prefixCls","selectPrefixCls","buildOptionText","size","locale"]),p=this.configProvider.getPrefixCls,m=p("pagination",o),v=p("select",l),g="small"===d,y={props:(0,i.A)({prefixCls:m,selectPrefixCls:v},f,this.getIconsProps(m),{selectComponentClass:g?c:a.Ay,locale:(0,i.A)({},e,h),buildOptionText:u||this.$scopedSlots.buildOptionText}),class:{mini:g},on:(0,s.WM)(this)};return t(k,y)}},render:function(){var e=arguments[0];return e(l.A,{attrs:{componentName:"Pagination",defaultLocale:L.A},scopedSlots:{default:this.renderPagination}})}}},64168:function(e,t,n){"use strict";var r=n(38223),i=n(44807);r.Ay.install=function(e){e.use(i.A),e.component(r.Ay.name,r.Ay)},t.Ay=r.Ay},25482:function(e,t,n){"use strict";n(29229),n(22050)},50257:function(e,t,n){"use strict";var r=n(85505),i=n(90034),o=n(90500),a=n(36278),s=n(4718),c=n(15848),l=n(52315),u=n(26997),d=n(40255),h=n(49084),f=n(38377),p=n(77749),m=n(25592),v=n(44807),g=(0,a.A)(),y=(0,u.A)(),_={name:"APopconfirm",props:(0,r.A)({},g,{prefixCls:s.A.string,transitionName:s.A.string.def("zoom-big"),content:s.A.any,title:s.A.any,trigger:g.trigger.def("click"),okType:y.type.def("primary"),disabled:s.A.bool.def(!1),okText:s.A.any,cancelText:s.A.any,icon:s.A.any,okButtonProps:s.A.object,cancelButtonProps:s.A.object}),mixins:[l.A],model:{prop:"visible",event:"visibleChange"},watch:{visible:function(e){this.sVisible=e}},inject:{configProvider:{default:function(){return m.f}}},data:function(){var e=(0,c.Oq)(this),t={sVisible:!1};return"visible"in e&&(t.sVisible=e.visible),"defaultVisible"in e&&(t.sVisible=e.defaultVisible),t},methods:{onConfirm:function(e){this.setVisible(!1,e),this.$emit("confirm",e)},onCancel:function(e){this.setVisible(!1,e),this.$emit("cancel",e)},onVisibleChange:function(e){var t=this.$props.disabled;t||this.setVisible(e)},setVisible:function(e,t){(0,c.cK)(this,"visible")||this.setState({sVisible:e}),this.$emit("visibleChange",e,t)},getPopupDomNode:function(){return this.$refs.tooltip.getPopupDomNode()},renderOverlay:function(e,t){var n=this.$createElement,r=this.okType,i=this.okButtonProps,o=this.cancelButtonProps,a=(0,c.nu)(this,"icon")||n(d.A,{attrs:{type:"exclamation-circle",theme:"filled"}}),s=(0,c.v6)({props:{size:"small"},on:{click:this.onCancel}},o),l=(0,c.v6)({props:{type:r,size:"small"},on:{click:this.onConfirm}},i);return n("div",{class:e+"-inner-content"},[n("div",{class:e+"-message"},[a,n("div",{class:e+"-message-title"},[(0,c.nu)(this,"title")])]),n("div",{class:e+"-buttons"},[n(h.A,s,[(0,c.nu)(this,"cancelText")||t.cancelText]),n(h.A,l,[(0,c.nu)(this,"okText")||t.okText])])])}},render:function(){var e=this,t=arguments[0],n=(0,c.Oq)(this),a=n.prefixCls,s=this.configProvider.getPrefixCls,l=s("popover",a),u=(0,i.A)(n,["title","content","cancelText","okText"]),d={props:(0,r.A)({},u,{prefixCls:l,visible:this.sVisible}),ref:"tooltip",on:{visibleChange:this.onVisibleChange}},h=t(f.A,{attrs:{componentName:"Popconfirm",defaultLocale:p.A.Popconfirm},scopedSlots:{default:function(t){return e.renderOverlay(l,t)}}});return t(o.A,d,[t("template",{slot:"title"},[h]),this.$slots["default"]])},install:function(e){e.use(v.A),e.component(_.name,_)}};t.A=_},94891:function(e,t,n){"use strict";n(29229),n(14825),n(27902)},94261:function(e,t,n){"use strict";var r=n(85505),i=n(90500),o=n(36278),a=n(4718),s=n(15848),c=n(25592),l=n(44807),u=(0,o.A)(),d={name:"APopover",props:(0,r.A)({},u,{prefixCls:a.A.string,transitionName:a.A.string.def("zoom-big"),content:a.A.any,title:a.A.any}),model:{prop:"visible",event:"visibleChange"},inject:{configProvider:{default:function(){return c.f}}},methods:{getPopupDomNode:function(){return this.$refs.tooltip.getPopupDomNode()}},render:function(){var e=arguments[0],t=this.title,n=this.prefixCls,o=this.$slots,a=this.configProvider.getPrefixCls,c=a("popover",n),l=(0,s.Oq)(this);delete l.title,delete l.content;var u={props:(0,r.A)({},l,{prefixCls:c}),ref:"tooltip",on:(0,s.WM)(this)};return e(i.A,u,[e("template",{slot:"title"},[e("div",[(t||o.title)&&e("div",{class:c+"-title"},[(0,s.nu)(this,"title")]),e("div",{class:c+"-inner-content"},[(0,s.nu)(this,"content")])])]),this.$slots["default"]])},install:function(e){e.use(l.A),e.component(d.name,d)}};t.A=d},14825:function(e,t,n){"use strict";n(29229)},93167:function(e,t,n){"use strict";n.d(t,{A:function(){return K}});var r=n(44508),i=n(85505),o=n(46942),a=n.n(o),s=n(4718),c=n(15848),l=n(25592),u=n(40255),d=n(5748),h=n(52040);function f(e){return!e||e<0?0:e>100?100:e}var p=function(e){var t=[],n=!0,r=!1,i=void 0;try{for(var o,a=Object.entries(e)[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var s=o.value,c=(0,h.A)(s,2),l=c[0],u=c[1],d=parseFloat(l.replace(/%/g,""));if(isNaN(d))return{};t.push({key:d,value:u})}}catch(f){r=!0,i=f}finally{try{!n&&a["return"]&&a["return"]()}finally{if(r)throw i}}return t=t.sort(function(e,t){return e.key-t.key}),t.map(function(e){var t=e.key,n=e.value;return n+" "+t+"%"}).join(", ")},m=function(e){var t=e.from,n=void 0===t?"#1890ff":t,r=e.to,i=void 0===r?"#1890ff":r,o=e.direction,a=void 0===o?"to right":o,s=(0,d.A)(e,["from","to","direction"]);if(0!==Object.keys(s).length){var c=p(s);return{backgroundImage:"linear-gradient("+a+", "+c+")"}}return{backgroundImage:"linear-gradient("+a+", "+n+", "+i+")"}},v={functional:!0,render:function(e,t){var n=t.props,r=t.children,o=n.prefixCls,a=n.percent,s=n.successPercent,c=n.strokeWidth,l=n.size,u=n.strokeColor,d=n.strokeLinecap,h=void 0;h=u&&"string"!==typeof u?m(u):{background:u};var p=(0,i.A)({width:f(a)+"%",height:(c||("small"===l?6:8))+"px",background:u,borderRadius:"square"===d?0:"100px"},h),v={width:f(s)+"%",height:(c||("small"===l?6:8))+"px",borderRadius:"square"===d?0:""},g=void 0!==s?e("div",{class:o+"-success-bg",style:v}):null;return e("div",[e("div",{class:o+"-outer"},[e("div",{class:o+"-inner"},[e("div",{class:o+"-bg",style:p}),g])]),r])}},g=v,y=n(75189),_=n.n(y),b=n(85471),M=n(24415);function A(e){return{mixins:[e],updated:function(){var e=this,t=Date.now(),n=!1;Object.keys(this.paths).forEach(function(r){var i=e.paths[r];if(i){n=!0;var o=i.style;o.transitionDuration=".3s, .3s, .3s, .06s",e.prevTimeStamp&&t-e.prevTimeStamp<100&&(o.transitionDuration="0s, 0s")}}),n&&(this.prevTimeStamp=Date.now())}}}var w=A,x={percent:0,prefixCls:"rc-progress",strokeColor:"#2db7f5",strokeLinecap:"round",strokeWidth:1,trailColor:"#D9D9D9",trailWidth:1},k=s.A.oneOfType([s.A.number,s.A.string]),L={percent:s.A.oneOfType([k,s.A.arrayOf(k)]),prefixCls:s.A.string,strokeColor:s.A.oneOfType([s.A.string,s.A.arrayOf(s.A.oneOfType([s.A.string,s.A.object])),s.A.object]),strokeLinecap:s.A.oneOf(["butt","round","square"]),strokeWidth:k,trailColor:s.A.string,trailWidth:k},C=(0,i.A)({},L,{gapPosition:s.A.oneOf(["top","bottom","left","right"]),gapDegree:s.A.oneOfType([s.A.number,s.A.string,s.A.bool])}),S=(0,i.A)({},x,{gapPosition:"top"});b.Ay.use(M.A,{name:"ant-ref"});var z=0;function T(e){return+e.replace("%","")}function O(e){return Array.isArray(e)?e:[e]}function H(e,t,n,r){var i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,o=arguments[5],a=50-r/2,s=0,c=-a,l=0,u=-2*a;switch(o){case"left":s=-a,c=0,l=2*a,u=0;break;case"right":s=a,c=0,l=-2*a,u=0;break;case"bottom":c=a,u=2*a;break;default:}var d="M 50,50 m "+s+","+c+"\n a "+a+","+a+" 0 1 1 "+l+","+-u+"\n a "+a+","+a+" 0 1 1 "+-l+","+u,h=2*Math.PI*a,f={stroke:n,strokeDasharray:t/100*(h-i)+"px "+h+"px",strokeDashoffset:"-"+(i/2+e/100*(h-i))+"px",transition:"stroke-dashoffset .3s ease 0s, stroke-dasharray .3s ease 0s, stroke .3s, stroke-width .06s ease .3s, opacity .3s ease 0s"};return{pathString:d,pathStyle:f}}var D={props:(0,c.CB)(C,S),created:function(){this.paths={},this.gradientId=z,z+=1},methods:{getStokeList:function(){var e=this,t=this.$createElement,n=this.$props,r=n.prefixCls,i=n.percent,o=n.strokeColor,a=n.strokeWidth,s=n.strokeLinecap,c=n.gapDegree,l=n.gapPosition,u=O(i),d=O(o),h=0;return u.map(function(n,i){var o=d[i]||d[d.length-1],u="[object Object]"===Object.prototype.toString.call(o)?"url(#"+r+"-gradient-"+e.gradientId+")":"",f=H(h,n,o,a,c,l),p=f.pathString,m=f.pathStyle;h+=n;var v={key:i,attrs:{d:p,stroke:u,"stroke-linecap":s,"stroke-width":a,opacity:0===n?0:1,"fill-opacity":"0"},class:r+"-circle-path",style:m,directives:[{name:"ant-ref",value:function(t){e.paths[i]=t}}]};return t("path",v)})}},render:function(){var e=arguments[0],t=this.$props,n=t.prefixCls,r=t.strokeWidth,i=t.trailWidth,o=t.gapDegree,a=t.gapPosition,s=t.trailColor,c=t.strokeLinecap,l=t.strokeColor,u=(0,d.A)(t,["prefixCls","strokeWidth","trailWidth","gapDegree","gapPosition","trailColor","strokeLinecap","strokeColor"]),h=H(0,100,s,r,o,a),f=h.pathString,p=h.pathStyle;delete u.percent;var m=O(l),v=m.find(function(e){return"[object Object]"===Object.prototype.toString.call(e)}),g={attrs:{d:f,stroke:s,"stroke-linecap":c,"stroke-width":i||r,"fill-opacity":"0"},class:n+"-circle-trail",style:p};return e("svg",_()([{class:n+"-circle",attrs:{viewBox:"0 0 100 100"}},u]),[v&&e("defs",[e("linearGradient",{attrs:{id:n+"-gradient-"+this.gradientId,x1:"100%",y1:"0%",x2:"0%",y2:"0%"}},[Object.keys(v).sort(function(e,t){return T(e)-T(t)}).map(function(t,n){return e("stop",{key:n,attrs:{offset:t,"stop-color":v[t]}})})])]),e("path",g),this.getStokeList().reverse()])}},Y=w(D),V={normal:"#108ee9",exception:"#ff5500",success:"#87d068"};function P(e){var t=e.percent,n=e.successPercent,r=f(t);if(!n)return r;var i=f(n);return[n,f(r-i)]}function E(e){var t=e.progressStatus,n=e.successPercent,r=e.strokeColor,i=r||V[t];return n?[V.success,i]:i}var j={functional:!0,render:function(e,t){var n,i=t.props,o=t.children,a=i.prefixCls,s=i.width,c=i.strokeWidth,l=i.trailColor,u=i.strokeLinecap,d=i.gapPosition,h=i.gapDegree,f=i.type,p=s||120,m={width:"number"===typeof p?p+"px":p,height:"number"===typeof p?p+"px":p,fontSize:.15*p+6},v=c||6,g=d||"dashboard"===f&&"bottom"||"top",y=h||"dashboard"===f&&75,_=E(i),b="[object Object]"===Object.prototype.toString.call(_),M=(n={},(0,r.A)(n,a+"-inner",!0),(0,r.A)(n,a+"-circle-gradient",b),n);return e("div",{class:M,style:m},[e(Y,{attrs:{percent:P(i),strokeWidth:v,trailWidth:v,strokeColor:_,strokeLinecap:u,trailColor:l,prefixCls:a,gapDegree:y,gapPosition:g}}),o])}},F=j,I=["normal","exception","active","success"],$=s.A.oneOf(["line","circle","dashboard"]),R=s.A.oneOf(["default","small"]),N={prefixCls:s.A.string,type:$,percent:s.A.number,successPercent:s.A.number,format:s.A.func,status:s.A.oneOf(I),showInfo:s.A.bool,strokeWidth:s.A.number,strokeLinecap:s.A.oneOf(["butt","round","square"]),strokeColor:s.A.oneOfType([s.A.string,s.A.object]),trailColor:s.A.string,width:s.A.number,gapDegree:s.A.number,gapPosition:s.A.oneOf(["top","bottom","left","right"]),size:R},W={name:"AProgress",props:(0,c.CB)(N,{type:"line",percent:0,showInfo:!0,trailColor:"#f3f3f3",size:"default",gapDegree:0,strokeLinecap:"round"}),inject:{configProvider:{default:function(){return l.f}}},methods:{getPercentNumber:function(){var e=this.$props,t=e.successPercent,n=e.percent,r=void 0===n?0:n;return parseInt(void 0!==t?t.toString():r.toString(),10)},getProgressStatus:function(){var e=this.$props.status;return I.indexOf(e)<0&&this.getPercentNumber()>=100?"success":e||"normal"},renderProcessInfo:function(e,t){var n=this.$createElement,r=this.$props,i=r.showInfo,o=r.format,a=r.type,s=r.percent,c=r.successPercent;if(!i)return null;var l=void 0,d=o||this.$scopedSlots.format||function(e){return e+"%"},h="circle"===a||"dashboard"===a?"":"-circle";return o||this.$scopedSlots.format||"exception"!==t&&"success"!==t?l=d(f(s),f(c)):"exception"===t?l=n(u.A,{attrs:{type:"close"+h,theme:"line"===a?"filled":"outlined"}}):"success"===t&&(l=n(u.A,{attrs:{type:"check"+h,theme:"line"===a?"filled":"outlined"}})),n("span",{class:e+"-text",attrs:{title:"string"===typeof l?l:void 0}},[l])}},render:function(){var e,t=arguments[0],n=(0,c.Oq)(this),o=n.prefixCls,s=n.size,l=n.type,u=n.showInfo,d=this.configProvider.getPrefixCls,h=d("progress",o),f=this.getProgressStatus(),p=this.renderProcessInfo(h,f),m=void 0;if("line"===l){var v={props:(0,i.A)({},n,{prefixCls:h})};m=t(g,v,[p])}else if("circle"===l||"dashboard"===l){var y={props:(0,i.A)({},n,{prefixCls:h,progressStatus:f})};m=t(F,y,[p])}var _=a()(h,(e={},(0,r.A)(e,h+"-"+("dashboard"===l?"circle":l),!0),(0,r.A)(e,h+"-status-"+f,!0),(0,r.A)(e,h+"-show-info",u),(0,r.A)(e,h+"-"+s,s),e)),b={on:(0,c.WM)(this),class:_};return t("div",b,[m])}},B=n(44807);W.install=function(e){e.use(B.A),e.component(W.name,W)};var K=W},4863:function(e,t,n){"use strict";n(29229)},63301:function(e,t,n){"use strict";n.d(t,{Ay:function(){return b}});var r=n(75189),i=n.n(r),o=n(44508),a=n(85505),s=n(5748),c=n(4718),l=n(68145),u=n(46942),d=n.n(u),h=n(15848),f=n(25592);function p(){}var m={name:"ARadio",model:{prop:"checked"},props:{prefixCls:c.A.string,defaultChecked:Boolean,checked:{type:Boolean,default:void 0},disabled:Boolean,isGroup:Boolean,value:c.A.any,name:String,id:String,autoFocus:Boolean,type:c.A.string.def("radio")},inject:{radioGroupContext:{default:void 0},configProvider:{default:function(){return f.f}}},methods:{focus:function(){this.$refs.vcCheckbox.focus()},blur:function(){this.$refs.vcCheckbox.blur()},handleChange:function(e){var t=e.target.checked;this.$emit("input",t),this.$emit("change",e)},onChange:function(e){this.$emit("change",e),this.radioGroupContext&&this.radioGroupContext.onRadioChange&&this.radioGroupContext.onRadioChange(e)}},render:function(){var e,t=arguments[0],n=this.$slots,r=this.radioGroupContext,c=(0,h.Oq)(this),u=n["default"],f=(0,h.WM)(this),m=f.mouseenter,v=void 0===m?p:m,g=f.mouseleave,y=void 0===g?p:g,_=(0,s.A)(f,["mouseenter","mouseleave"]),b=c.prefixCls,M=(0,s.A)(c,["prefixCls"]),A=this.configProvider.getPrefixCls,w=A("radio",b),x={props:(0,a.A)({},M,{prefixCls:w}),on:_,attrs:(0,h.Z0)(this)};r?(x.props.name=r.name,x.on.change=this.onChange,x.props.checked=c.value===r.stateValue,x.props.disabled=c.disabled||r.disabled):x.on.change=this.handleChange;var k=d()((e={},(0,o.A)(e,w+"-wrapper",!0),(0,o.A)(e,w+"-wrapper-checked",x.props.checked),(0,o.A)(e,w+"-wrapper-disabled",x.props.disabled),e));return t("label",{class:k,on:{mouseenter:v,mouseleave:y}},[t(l.A,i()([x,{ref:"vcCheckbox"}])),void 0!==u?t("span",[u]):null])}};function v(){}var g={name:"ARadioGroup",model:{prop:"value"},props:{prefixCls:c.A.string,defaultValue:c.A.any,value:c.A.any,size:{default:"default",validator:function(e){return["large","default","small"].includes(e)}},options:{default:function(){return[]},type:Array},disabled:Boolean,name:String,buttonStyle:c.A.string.def("outline")},data:function(){var e=this.value,t=this.defaultValue;return this.updatingValue=!1,{stateValue:void 0===e?t:e}},provide:function(){return{radioGroupContext:this}},inject:{configProvider:{default:function(){return f.f}}},computed:{radioOptions:function(){var e=this.disabled;return this.options.map(function(t){return"string"===typeof t?{label:t,value:t}:(0,a.A)({},t,{disabled:void 0===t.disabled?e:t.disabled})})},classes:function(){var e,t=this.prefixCls,n=this.size;return e={},(0,o.A)(e,""+t,!0),(0,o.A)(e,t+"-"+n,n),e}},watch:{value:function(e){this.updatingValue=!1,this.stateValue=e}},methods:{onRadioChange:function(e){var t=this,n=this.stateValue,r=e.target.value;(0,h.cK)(this,"value")||(this.stateValue=r),this.updatingValue||r===n||(this.updatingValue=!0,this.$emit("input",r),this.$emit("change",e)),this.$nextTick(function(){t.updatingValue=!1})}},render:function(){var e=this,t=arguments[0],n=(0,h.WM)(this),r=n.mouseenter,i=void 0===r?v:r,a=n.mouseleave,s=void 0===a?v:a,c=(0,h.Oq)(this),l=c.prefixCls,u=c.options,f=c.buttonStyle,p=this.configProvider.getPrefixCls,g=p("radio",l),y=g+"-group",_=d()(y,y+"-"+f,(0,o.A)({},y+"-"+c.size,c.size)),b=(0,h.Gk)(this.$slots["default"]);return u&&u.length>0&&(b=u.map(function(n){return"string"===typeof n?t(m,{key:n,attrs:{prefixCls:g,disabled:c.disabled,value:n,checked:e.stateValue===n}},[n]):t(m,{key:"radio-group-value-options-"+n.value,attrs:{prefixCls:g,disabled:n.disabled||c.disabled,value:n.value,checked:e.stateValue===n.value}},[n.label])})),t("div",{class:_,on:{mouseenter:i,mouseleave:s}},[b])}},y={name:"ARadioButton",props:(0,a.A)({},m.props),inject:{radioGroupContext:{default:void 0},configProvider:{default:function(){return f.f}}},render:function(){var e=arguments[0],t=(0,h.Oq)(this),n=t.prefixCls,r=(0,s.A)(t,["prefixCls"]),i=this.configProvider.getPrefixCls,o=i("radio-button",n),c={props:(0,a.A)({},r,{prefixCls:o}),on:(0,h.WM)(this)};return this.radioGroupContext&&(c.on.change=this.radioGroupContext.onRadioChange,c.props.checked=this.$props.value===this.radioGroupContext.stateValue,c.props.disabled=this.$props.disabled||this.radioGroupContext.disabled),e(m,c,[this.$slots["default"]])}},_=n(44807);m.Group=g,m.Button=y,m.install=function(e){e.use(_.A),e.component(m.name,m),e.component(m.Group.name,m.Group),e.component(m.Button.name,m.Button)};var b=m},29775:function(e,t,n){"use strict";n(29229)},30692:function(e,t,n){"use strict";n.d(t,{A:function(){return S}});var r=n(85505),i=n(5748),o=n(90034),a=n(4718),s=n(15848),c=n(25592),l=n(46942),u=n.n(l),d=n(11207),h=n(52315);function f(e,t){var n=t?e.pageYOffset:e.pageXOffset,r=t?"scrollTop":"scrollLeft";if("number"!==typeof n){var i=e.document;n=i.documentElement[r],"number"!==typeof n&&(n=i.body[r])}return n}function p(e){var t=void 0,n=void 0,r=e.ownerDocument,i=r.body,o=r&&r.documentElement,a=e.getBoundingClientRect();return t=a.left,n=a.top,t-=o.clientLeft||i.clientLeft||0,n-=o.clientTop||i.clientTop||0,{left:t,top:n}}function m(e){var t=p(e),n=e.ownerDocument,r=n.defaultView||n.parentWindow;return t.left+=f(r),t.left}function v(){}var g={name:"Star",mixins:[h.A],props:{value:a.A.number,index:a.A.number,prefixCls:a.A.string,allowHalf:a.A.bool,disabled:a.A.bool,character:a.A.any,characterRender:a.A.func,focused:a.A.bool,count:a.A.number},methods:{onHover:function(e){var t=this.index;this.$emit("hover",e,t)},onClick:function(e){var t=this.index;this.$emit("click",e,t)},onKeyDown:function(e){var t=this.$props.index;13===e.keyCode&&this.__emit("click",e,t)},getClassName:function(){var e=this.prefixCls,t=this.index,n=this.value,r=this.allowHalf,i=this.focused,o=t+1,a=e;return 0===n&&0===t&&i?a+=" "+e+"-focused":r&&n+.5===o?(a+=" "+e+"-half "+e+"-active",i&&(a+=" "+e+"-focused")):(a+=o<=n?" "+e+"-full":" "+e+"-zero",o===n&&i&&(a+=" "+e+"-focused")),a}},render:function(){var e=arguments[0],t=this.onHover,n=this.onClick,r=this.onKeyDown,i=this.disabled,o=this.prefixCls,a=this.characterRender,c=this.index,l=this.count,u=this.value,d=(0,s.nu)(this,"character"),h=e("li",{class:this.getClassName()},[e("div",{on:{click:i?v:n,keydown:i?v:r,mousemove:i?v:t},attrs:{role:"radio","aria-checked":u>c?"true":"false","aria-posinset":c+1,"aria-setsize":l,tabIndex:0}},[e("div",{class:o+"-first"},[d]),e("div",{class:o+"-second"},[d])])]);return a&&(h=a(h,this.$props)),h}},y={disabled:a.A.bool,value:a.A.number,defaultValue:a.A.number,count:a.A.number,allowHalf:a.A.bool,allowClear:a.A.bool,prefixCls:a.A.string,character:a.A.any,characterRender:a.A.func,tabIndex:a.A.number,autoFocus:a.A.bool};function _(){}var b={name:"Rate",mixins:[h.A],model:{prop:"value",event:"change"},props:(0,s.CB)(y,{defaultValue:0,count:5,allowHalf:!1,allowClear:!0,prefixCls:"rc-rate",tabIndex:0,character:"★"}),data:function(){var e=this.value;return(0,s.cK)(this,"value")||(e=this.defaultValue),{sValue:e,focused:!1,cleanedValue:null,hoverValue:void 0}},watch:{value:function(e){this.setState({sValue:e})}},mounted:function(){var e=this;this.$nextTick(function(){e.autoFocus&&!e.disabled&&e.focus()})},methods:{onHover:function(e,t){var n=this.getStarValue(t,e.pageX),r=this.cleanedValue;n!==r&&this.setState({hoverValue:n,cleanedValue:null}),this.$emit("hoverChange",n)},onMouseLeave:function(){this.setState({hoverValue:void 0,cleanedValue:null}),this.$emit("hoverChange",void 0)},onClick:function(e,t){var n=this.allowClear,r=this.sValue,i=this.getStarValue(t,e.pageX),o=!1;n&&(o=i===r),this.onMouseLeave(!0),this.changeValue(o?0:i),this.setState({cleanedValue:o?i:null})},onFocus:function(){this.setState({focused:!0}),this.$emit("focus")},onBlur:function(){this.setState({focused:!1}),this.$emit("blur")},onKeyDown:function(e){var t=e.keyCode,n=this.count,r=this.allowHalf,i=this.sValue;t===d.A.RIGHT&&i0&&(i-=r?.5:1,this.changeValue(i),e.preventDefault()),this.$emit("keydown",e)},getStarDOM:function(e){return this.$refs["stars"+e].$el},getStarValue:function(e,t){var n=e+1;if(this.allowHalf){var r=this.getStarDOM(e),i=m(r),o=r.clientWidth;t-i0)return!0;return!1}function Q(e,t){var n=new RegExp("["+t.join()+"]");return e.split(n).filter(function(e){return e})}function ee(e,t){var n=(0,w.Ts)(t);if(n.disabled)return!1;var r=E(t,this.optionFilterProp);return r=r.length&&r[0].text?r[0].text:String(r),r.toLowerCase().indexOf(e.toLowerCase())>-1}function te(e,t){if(!R(t)&&!j(t)&&"string"!==typeof e)throw new Error("Invalid `value` of type `"+("undefined"===typeof e?"undefined":(0,Y.A)(e))+"` supplied to Option, expected `string` when `tags/combobox` is `true`.")}function ne(e,t){return function(n){e[t]=n}}function re(){var e=(new Date).getTime(),t="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){var n=(e+16*Math.random())%16|0;return e=Math.floor(e/16),("x"===t?n:7&n|8).toString(16)});return t}var ie={name:"DropdownMenu",mixins:[L.A],props:{ariaId:u.A.string,defaultActiveFirstOption:u.A.bool,value:u.A.any,dropdownMenuStyle:u.A.object,multiple:u.A.bool,prefixCls:u.A.string,menuItems:u.A.any,inputValue:u.A.string,visible:u.A.bool,backfillValue:u.A.any,firstActiveValue:u.A.string,menuItemSelectedIcon:u.A.any},watch:{visible:function(e){var t=this;e?this.$nextTick(function(){t.scrollActiveItemToView()}):this.lastVisible=e}},created:function(){this.rafInstance=null,this.lastInputValue=this.$props.inputValue,this.lastVisible=!1},mounted:function(){var e=this;this.$nextTick(function(){e.scrollActiveItemToView()}),this.lastVisible=this.$props.visible},updated:function(){var e=this.$props;this.lastVisible=e.visible,this.lastInputValue=e.inputValue,this.prevVisible=this.visible},beforeDestroy:function(){this.rafInstance&&T().cancel(this.rafInstance)},methods:{scrollActiveItemToView:function(){var e=this,t=this.firstActiveItem&&this.firstActiveItem.$el,n=this.$props,r=n.value,i=n.visible,o=n.firstActiveValue;if(t&&i){var a={onlyScrollIfNeeded:!0};r&&0!==r.length||!o||(a.alignWithTop=!0),this.rafInstance=T()(function(){(0,D.A)(t,e.$refs.menuRef.$el,a)})}},renderMenu:function(){var e=this,t=this.$createElement,n=this.$props,r=n.menuItems,i=n.defaultActiveFirstOption,o=n.value,a=n.prefixCls,c=n.multiple,l=n.inputValue,u=n.firstActiveValue,d=n.dropdownMenuStyle,h=n.backfillValue,f=n.visible,p=(0,w.nu)(this,"menuItemSelectedIcon"),m=(0,w.WM)(this),v=m.menuDeselect,g=m.menuSelect,y=m.popupScroll;if(r&&r.length){var _=q(r,o),b={props:{multiple:c,itemIcon:c?p:null,selectedKeys:_,prefixCls:a+"-menu"},on:{},style:d,ref:"menuRef",attrs:{role:"listbox"}};y&&(b.on.scroll=y),c?(b.on.deselect=v,b.on.select=g):b.on.click=g;var M={},A=i,x=r;if(_.length||u){n.visible&&!this.lastVisible?M.activeKey=_[0]||u:f||(_[0]&&(A=!1),M.activeKey=void 0);var L=!1,C=function(t){return!L&&-1!==_.indexOf(t.key)||!L&&!_.length&&-1!==u.indexOf(t.key)?(L=!0,(0,k.Ob)(t,{directives:[{name:"ant-ref",value:function(t){e.firstActiveItem=t}}]})):t};x=r.map(function(e){if((0,w.xr)(e).isMenuItemGroup){var t=e.componentOptions.children.map(C);return(0,k.Ob)(e,{children:t})}return C(e)})}else this.firstActiveItem=null;var S=o&&o[o.length-1];return l===this.lastInputValue||S&&S===h||(M.activeKey=""),b.props=(0,s.A)({},M,b.props,{defaultActiveFirst:A}),t(H.Ay,b,[x])}return null}},render:function(){var e=arguments[0],t=this.renderMenu(),n=(0,w.WM)(this),r=n.popupFocus,i=n.popupScroll;return t?e("div",{style:{overflow:"auto",transform:"translateZ(0)"},attrs:{id:this.$props.ariaId,tabIndex:"-1"},on:{focus:r,mousedown:B,scroll:i},ref:"menuContainer"},[t]):null}},oe={bottomLeft:{points:["tl","bl"],offset:[0,4],overflow:{adjustX:0,adjustY:1}},topLeft:{points:["bl","tl"],offset:[0,-4],overflow:{adjustX:0,adjustY:1}}},ae={name:"SelectTrigger",mixins:[L.A],props:{dropdownMatchSelectWidth:u.A.bool,defaultActiveFirstOption:u.A.bool,dropdownAlign:u.A.object,visible:u.A.bool,disabled:u.A.bool,showSearch:u.A.bool,dropdownClassName:u.A.string,dropdownStyle:u.A.object,dropdownMenuStyle:u.A.object,multiple:u.A.bool,inputValue:u.A.string,filterOption:u.A.any,empty:u.A.bool,options:u.A.any,prefixCls:u.A.string,popupClassName:u.A.string,value:u.A.array,showAction:u.A.arrayOf(u.A.string),combobox:u.A.bool,animation:u.A.string,transitionName:u.A.string,getPopupContainer:u.A.func,backfillValue:u.A.any,menuItemSelectedIcon:u.A.any,dropdownRender:u.A.func,ariaId:u.A.string},data:function(){return{dropdownWidth:0}},created:function(){this.rafInstance=null,this.saveDropdownMenuRef=ne(this,"dropdownMenuRef"),this.saveTriggerRef=ne(this,"triggerRef")},mounted:function(){var e=this;this.$nextTick(function(){e.setDropdownWidth()})},updated:function(){var e=this;this.$nextTick(function(){e.setDropdownWidth()})},beforeDestroy:function(){this.cancelRafInstance()},methods:{setDropdownWidth:function(){var e=this;this.cancelRafInstance(),this.rafInstance=T()(function(){var t=e.$el.offsetWidth;t!==e.dropdownWidth&&e.setState({dropdownWidth:t})})},cancelRafInstance:function(){this.rafInstance&&T().cancel(this.rafInstance)},getInnerMenu:function(){return this.dropdownMenuRef&&this.dropdownMenuRef.$refs.menuRef},getPopupDOMNode:function(){return this.triggerRef.getPopupDomNode()},getDropdownElement:function(e){var t=this.$createElement,n=this.value,r=this.firstActiveValue,i=this.defaultActiveFirstOption,o=this.dropdownMenuStyle,a=this.getDropdownPrefixCls,c=this.backfillValue,l=this.menuItemSelectedIcon,u=(0,w.WM)(this),d=u.menuSelect,h=u.menuDeselect,f=u.popupScroll,p=this.$props,m=p.dropdownRender,v=p.ariaId,g={props:(0,s.A)({},e.props,{ariaId:v,prefixCls:a(),value:n,firstActiveValue:r,defaultActiveFirstOption:i,dropdownMenuStyle:o,backfillValue:c,menuItemSelectedIcon:l}),on:(0,s.A)({},e.on,{menuSelect:d,menuDeselect:h,popupScroll:f}),directives:[{name:"ant-ref",value:this.saveDropdownMenuRef}]},y=t(ie,g);return m?m(y,p):null},getDropdownTransitionName:function(){var e=this.$props,t=e.transitionName;return!t&&e.animation&&(t=this.getDropdownPrefixCls()+"-"+e.animation),t},getDropdownPrefixCls:function(){return this.prefixCls+"-dropdown"}},render:function(){var e,t=arguments[0],n=this.$props,r=this.$slots,i=n.multiple,a=n.visible,c=n.inputValue,l=n.dropdownAlign,u=n.disabled,d=n.showSearch,h=n.dropdownClassName,f=n.dropdownStyle,p=n.dropdownMatchSelectWidth,v=n.options,g=n.getPopupContainer,y=n.showAction,_=n.empty,b=(0,w.WM)(this),M=b.mouseenter,A=b.mouseleave,x=b.popupFocus,k=b.dropdownVisibleChange,L=this.getDropdownPrefixCls(),C=(e={},(0,o.A)(e,h,!!h),(0,o.A)(e,L+"--"+(i?"multiple":"single"),1),(0,o.A)(e,L+"--empty",_),e),S=this.getDropdownElement({props:{menuItems:v,multiple:i,inputValue:c,visible:a},on:{popupFocus:x}}),z=void 0;z=u?[]:R(n)&&!d?["click"]:["blur"];var T=(0,s.A)({},f),H=p?"width":"minWidth";this.dropdownWidth&&(T[H]=this.dropdownWidth+"px");var D={props:(0,s.A)({},n,{showAction:u?[]:y,hideAction:z,ref:"triggerRef",popupPlacement:"bottomLeft",builtinPlacements:oe,prefixCls:L,popupTransitionName:this.getDropdownTransitionName(),popupAlign:l,popupVisible:a,getPopupContainer:g,popupClassName:m()(C),popupStyle:T}),on:{popupVisibleChange:k},directives:[{name:"ant-ref",value:this.saveTriggerRef}]};return M&&(D.on.mouseenter=M),A&&(D.on.mouseleave=A),t(O.A,D,[r["default"],t("template",{slot:"popup"},[S])])}},se={defaultActiveFirstOption:u.A.bool,multiple:u.A.bool,filterOption:u.A.any,showSearch:u.A.bool,disabled:u.A.bool,allowClear:u.A.bool,showArrow:u.A.bool,tags:u.A.bool,prefixCls:u.A.string,transitionName:u.A.string,optionLabelProp:u.A.string,optionFilterProp:u.A.string,animation:u.A.string,choiceTransitionName:u.A.string,open:u.A.bool,defaultOpen:u.A.bool,placeholder:u.A.any,labelInValue:u.A.bool,loading:u.A.bool,value:u.A.any,defaultValue:u.A.any,dropdownStyle:u.A.object,dropdownClassName:u.A.string,maxTagTextLength:u.A.number,maxTagCount:u.A.number,maxTagPlaceholder:u.A.any,tokenSeparators:u.A.arrayOf(u.A.string),getInputElement:u.A.func,showAction:u.A.arrayOf(u.A.string),autoFocus:u.A.bool,getPopupContainer:u.A.func,clearIcon:u.A.any,inputIcon:u.A.any,removeIcon:u.A.any,menuItemSelectedIcon:u.A.any,dropdownRender:u.A.func,mode:u.A.oneOf(["multiple","tags"]),backfill:u.A.bool,dropdownAlign:u.A.any,dropdownMatchSelectWidth:u.A.bool,dropdownMenuStyle:u.A.object,notFoundContent:u.A.oneOfType([String,Number]),tabIndex:u.A.oneOfType([String,Number])},ce=n(17948),le=n(51382);A.Ay.use(S.A,{name:"ant-ref"});var ue="RC_SELECT_EMPTY_VALUE_KEY",de=function(){return null};function he(e){return!e||null===e.offsetParent}function fe(){for(var e=arguments.length,t=Array(e),n=0;n0&&void 0!==arguments[0]?arguments[0]:[],n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return t.forEach(function(t){t.data&&void 0===t.data.slot&&((0,w.xr)(t).isSelectOptGroup?e.getOptionsFromChildren(t.componentOptions.children,n):n.push(t))}),n},getInputValueForCombobox:function(e,t,n){var r=[];if("value"in e&&!n&&(r=N(e.value)),"defaultValue"in e&&n&&(r=N(e.defaultValue)),!r.length)return"";r=r[0];var i=r;return e.labelInValue?i=r.label:t[W(r)]&&(i=t[W(r)].label),void 0===i&&(i=""),i},getLabelFromOption:function(e,t){return E(t,e.optionLabelProp)},getOptionsInfoFromProps:function(e,t){var n=this,r=this.getOptionsFromChildren(this.$props.children),i={};if(r.forEach(function(t){var r=P(t);i[W(r)]={option:t,value:r,label:n.getLabelFromOption(e,t),title:(0,w.IV)(t,"title"),disabled:(0,w.IV)(t,"disabled")}}),t){var o=t._optionsInfo,a=t._value;a&&a.forEach(function(e){var t=W(e);i[t]||void 0===o[t]||(i[t]=o[t])})}return i},getValueFromProps:function(e,t){var n=[];return"value"in e&&!t&&(n=N(e.value)),"defaultValue"in e&&t&&(n=N(e.defaultValue)),e.labelInValue&&(n=n.map(function(e){return e.key})),n},onInputChange:function(e){var t=e.target,n=t.value,r=t.composing,i=this.$data._inputValue,o=void 0===i?"":i;if(e.isComposing||r||o===n)this.setState({_mirrorInputValue:n});else{var a=this.$props.tokenSeparators;if(I(this.$props)&&a.length&&Z(n,a)){var s=this.getValueByInput(n);return void 0!==s&&this.fireChange(s),this.setOpenState(!1,{needFocus:!0}),void this.setInputValue("",!1)}this.setInputValue(n),this.setState({_open:!0}),F(this.$props)&&this.fireChange([n])}},onDropdownVisibleChange:function(e){e&&!this._focused&&(this.clearBlurTime(),this.timeoutFocus(),this._focused=!0,this.updateFocusClassName()),this.setOpenState(e)},onKeyDown:function(e){var t=this.$data._open,n=this.$props.disabled;if(!n){var r=e.keyCode;t&&!this.getInputDOMNode()?this.onInputKeydown(e):r===f.A.ENTER||r===f.A.DOWN?(r!==f.A.ENTER||I(this.$props)?t||this.setOpenState(!0):this.maybeFocus(!0),e.preventDefault()):r===f.A.SPACE&&(t||(this.setOpenState(!0),e.preventDefault()))}},onInputKeydown:function(e){var t=this,n=this.$props,r=n.disabled,i=n.combobox,o=n.defaultActiveFirstOption;if(!r){var a=this.$data,s=this.getRealOpenState(a),c=e.keyCode;if(!I(this.$props)||e.target.value||c!==f.A.BACKSPACE){if(c===f.A.DOWN){if(!a._open)return this.openIfHasChildren(),e.preventDefault(),void e.stopPropagation()}else if(c===f.A.ENTER&&a._open)!s&&i||e.preventDefault(),s&&i&&!1===o&&(this.comboboxTimer=setTimeout(function(){t.setOpenState(!1)}));else if(c===f.A.ESC)return void(a._open&&(this.setOpenState(!1),e.preventDefault(),e.stopPropagation()));if(s&&this.selectTriggerRef){var l=this.selectTriggerRef.getInnerMenu();l&&l.onKeyDown(e,this.handleBackfill)&&(e.preventDefault(),e.stopPropagation())}}else{e.preventDefault();var u=a._value;u.length&&this.removeSelected(u[u.length-1])}}},onMenuSelect:function(e){var t=e.item;if(t){var n=this.$data._value,r=this.$props,i=P(t),o=n[n.length-1],a=!1;if(I(r)?-1!==K(n,i)?a=!0:n=n.concat([i]):F(r)||void 0===o||o!==i||i===this.$data._backfillValue?(n=[i],this.setOpenState(!1,{needFocus:!0,fireSearch:!1})):(this.setOpenState(!1,{needFocus:!0,fireSearch:!1}),a=!0),a||this.fireChange(n),!a){this.fireSelect(i);var s=F(r)?E(t,r.optionLabelProp):"";r.autoClearSearchValue&&this.setInputValue(s,!1)}}},onMenuDeselect:function(e){var t=e.item,n=e.domEvent;if("keydown"!==n.type||n.keyCode!==f.A.ENTER)"click"===n.type&&this.removeSelected(P(t)),this.autoClearSearchValue&&this.setInputValue("");else{var r=t.$el;he(r)||this.removeSelected(P(t))}},onArrowClick:function(e){e.stopPropagation(),e.preventDefault(),this.clearBlurTime(),this.disabled||this.setOpenState(!this.$data._open,{needFocus:!this.$data._open})},onPlaceholderClick:function(){this.getInputDOMNode()&&this.getInputDOMNode()&&this.getInputDOMNode().focus()},onPopupFocus:function(){this.maybeFocus(!0,!0)},onClearSelection:function(e){var t=this.$props,n=this.$data;if(!t.disabled){var r=n._inputValue,i=n._value;e.stopPropagation(),(r||i.length)&&(i.length&&this.fireChange([]),this.setOpenState(!1,{needFocus:!0}),r&&this.setInputValue(""))}},onChoiceAnimationLeave:function(){this.forcePopupAlign()},getOptionInfoBySingleValue:function(e,t){var n=this.$createElement,r=void 0;if(t=t||this.$data._optionsInfo,t[W(e)]&&(r=t[W(e)]),r)return r;var i=e;if(this.$props.labelInValue){var o=U(this.$props.value,e),a=U(this.$props.defaultValue,e);void 0!==o?i=o:void 0!==a&&(i=a)}var s={option:n(d.A,{attrs:{value:e},key:e},[e]),value:e,label:i};return s},getOptionBySingleValue:function(e){var t=this.getOptionInfoBySingleValue(e),n=t.option;return n},getOptionsBySingleValue:function(e){var t=this;return e.map(function(e){return t.getOptionBySingleValue(e)})},getValueByLabel:function(e){var t=this;if(void 0===e)return null;var n=null;return Object.keys(this.$data._optionsInfo).forEach(function(r){var i=t.$data._optionsInfo[r],o=i.disabled;if(!o){var a=N(i.label);a&&a.join("")===e&&(n=i.value)}}),n},getVLBySingleValue:function(e){return this.$props.labelInValue?{key:e,label:this.getLabelBySingleValue(e)}:e},getVLForOnChange:function(e){var t=this,n=e;return void 0!==n?(n=this.labelInValue?n.map(function(e){return{key:e,label:t.getLabelBySingleValue(e)}}):n.map(function(e){return e}),I(this.$props)?n:n[0]):n},getLabelBySingleValue:function(e,t){var n=this.getOptionInfoBySingleValue(e,t),r=n.label;return r},getDropdownContainer:function(){return this.dropdownContainer||(this.dropdownContainer=document.createElement("div"),document.body.appendChild(this.dropdownContainer)),this.dropdownContainer},getPlaceholderElement:function(){var e=this.$createElement,t=this.$props,n=this.$data,r=!1;n._mirrorInputValue&&(r=!0);var i=n._value;i.length&&(r=!0),!n._mirrorInputValue&&F(t)&&1===i.length&&n._value&&!n._value[0]&&(r=!1);var o=t.placeholder;if(o){var a={on:{mousedown:B,click:this.onPlaceholderClick},attrs:J,style:(0,s.A)({display:r?"none":"block"},G),class:t.prefixCls+"-selection__placeholder"};return e("div",a,[o])}return null},inputClick:function(e){this.$data._open?(this.clearBlurTime(),e.stopPropagation()):this._focused=!1},inputBlur:function(e){var t=this,n=e.relatedTarget||document.activeElement;if((le.lT||le.UP)&&(e.relatedTarget===this.$refs.arrow||n&&this.selectTriggerRef&&this.selectTriggerRef.getInnerMenu()&&this.selectTriggerRef.getInnerMenu().$el===n||(0,ce.A)(e.target,n)))return e.target.focus(),void e.preventDefault();this.clearBlurTime(),this.disabled?e.preventDefault():this.blurTimer=setTimeout(function(){t._focused=!1,t.updateFocusClassName();var e=t.$props,n=t.$data._value,r=t.$data._inputValue;if(R(e)&&e.showSearch&&r&&e.defaultActiveFirstOption){var i=t._options||[];if(i.length){var o=X(i);o&&(n=[P(o)],t.fireChange(n))}}else if(I(e)&&r){t._mouseDown?t.setInputValue(""):(t.$data._inputValue="",t.getInputDOMNode&&t.getInputDOMNode()&&(t.getInputDOMNode().value=""));var a=t.getValueByInput(r);void 0!==a&&(n=a,t.fireChange(n))}if(I(e)&&t._mouseDown)return t.maybeFocus(!0,!0),void(t._mouseDown=!1);t.setOpenState(!1),t.$emit("blur",t.getVLForOnChange(n))},200)},inputFocus:function(e){if(this.$props.disabled)e.preventDefault();else{this.clearBlurTime();var t=this.getInputDOMNode();t&&e.target===this.rootRef||($(this.$props)||e.target!==t)&&(this._focused||(this._focused=!0,this.updateFocusClassName(),I(this.$props)&&this._mouseDown||this.timeoutFocus()))}},_getInputElement:function(){var e=this.$createElement,t=this.$props,n=this.$data,r=n._inputValue,a=n._mirrorInputValue,c=(0,w.Z0)(this),l=e("input",{attrs:{id:c.id,autoComplete:"off"}}),u=t.getInputElement?t.getInputElement():l,d=m()((0,w.t0)(u),(0,o.A)({},t.prefixCls+"-search__field",!0)),h=(0,w.kQ)(u);return u.data=u.data||{},e("div",{class:t.prefixCls+"-search__field__wrap",on:{click:this.inputClick}},[(0,k.Ob)(u,{props:{disabled:t.disabled,value:r},attrs:(0,s.A)({},u.data.attrs||{},{disabled:t.disabled,value:r}),domProps:{value:r},class:d,directives:[{name:"ant-ref",value:this.saveInputRef},{name:"ant-input"}],on:{input:this.onInputChange,keydown:fe(this.onInputKeydown,h.keydown,(0,w.WM)(this).inputKeydown),focus:fe(this.inputFocus,h.focus),blur:fe(this.inputBlur,h.blur)}}),e("span",i()([{directives:[{name:"ant-ref",value:this.saveInputMirrorRef}]},{class:t.prefixCls+"-search__field__mirror"}]),[a," "])])},getInputDOMNode:function(){return this.topCtrlRef?this.topCtrlRef.querySelector("input,textarea,div[contentEditable]"):this.inputRef},getInputMirrorDOMNode:function(){return this.inputMirrorRef},getPopupDOMNode:function(){if(this.selectTriggerRef)return this.selectTriggerRef.getPopupDOMNode()},getPopupMenuComponent:function(){if(this.selectTriggerRef)return this.selectTriggerRef.getInnerMenu()},setOpenState:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=this.$props,i=this.$data,o=n.needFocus,a=n.fireSearch;if(i._open!==e){this.__emit("dropdownVisibleChange",e);var s={_open:e,_backfillValue:""};!e&&R(r)&&r.showSearch&&this.setInputValue("",a),e||this.maybeFocus(e,!!o),this.setState(s,function(){e&&t.maybeFocus(e,!!o)})}else this.maybeFocus(e,!!o)},setInputValue:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];e!==this.$data._inputValue&&(this.setState({_inputValue:e},this.forcePopupAlign),t&&this.$emit("search",e))},getValueByInput:function(e){var t=this,n=this.$props,r=n.multiple,i=n.tokenSeparators,o=this.$data._value,a=!1;return Q(e,i).forEach(function(e){var n=[e];if(r){var i=t.getValueByLabel(e);i&&-1===K(o,i)&&(o=o.concat(i),a=!0,t.fireSelect(i))}else-1===K(o,e)&&(o=o.concat(n),a=!0,t.fireSelect(e))}),a?o:void 0},getRealOpenState:function(e){var t=this.$props.open;if("boolean"===typeof t)return t;var n=(e||this.$data)._open,r=this._options||[];return!$(this.$props)&&this.$props.showSearch||n&&!r.length&&(n=!1),n},focus:function(){R(this.$props)&&this.selectionRef?this.selectionRef.focus():this.getInputDOMNode()&&this.getInputDOMNode().focus()},blur:function(){R(this.$props)&&this.selectionRef?this.selectionRef.blur():this.getInputDOMNode()&&this.getInputDOMNode().blur()},markMouseDown:function(){this._mouseDown=!0},markMouseLeave:function(){this._mouseDown=!1},handleBackfill:function(e){if(this.backfill&&(R(this.$props)||F(this.$props))){var t=P(e);F(this.$props)&&this.setInputValue(t,!1),this.setState({_value:[t],_backfillValue:t})}},_filterOption:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:ee,r=this.$data,i=r._value,o=r._backfillValue,a=i[i.length-1];if(!e||a&&a===o)return!0;var s=this.$props.filterOption;return(0,w.cK)(this,"filterOption")?!0===s&&(s=n.bind(this)):s=n.bind(this),!s||("function"===typeof s?s.call(this,e,t):!(0,w.IV)(t,"disabled"))},timeoutFocus:function(){var e=this;this.focusTimer&&this.clearFocusTime(),this.focusTimer=window.setTimeout(function(){e.$emit("focus")},10)},clearFocusTime:function(){this.focusTimer&&(clearTimeout(this.focusTimer),this.focusTimer=null)},clearBlurTime:function(){this.blurTimer&&(clearTimeout(this.blurTimer),this.blurTimer=null)},clearComboboxTime:function(){this.comboboxTimer&&(clearTimeout(this.comboboxTimer),this.comboboxTimer=null)},updateFocusClassName:function(){var e=this.rootRef,t=this.prefixCls;this._focused?g()(e).add(t+"-focused"):g()(e).remove(t+"-focused")},maybeFocus:function(e,t){if(t||e){var n=this.getInputDOMNode(),r=document,i=r.activeElement;n&&(e||$(this.$props))?i!==n&&(n.focus(),this._focused=!0):i!==this.selectionRef&&this.selectionRef&&(this.selectionRef.focus(),this._focused=!0)}},removeSelected:function(e,t){var n=this.$props;if(!n.disabled&&!this.isChildDisabled(e)){t&&t.stopPropagation&&t.stopPropagation();var r=this.$data._value,i=r.filter(function(t){return t!==e}),o=I(n);if(o){var a=e;n.labelInValue&&(a={key:e,label:this.getLabelBySingleValue(e)}),this.$emit("deselect",a,this.getOptionBySingleValue(e))}this.fireChange(i)}},openIfHasChildren:function(){var e=this.$props;(e.children&&e.children.length||R(e))&&this.setOpenState(!0)},fireSelect:function(e){this.$emit("select",this.getVLBySingleValue(e),this.getOptionBySingleValue(e))},fireChange:function(e){(0,w.cK)(this,"value")||this.setState({_value:e},this.forcePopupAlign);var t=this.getVLForOnChange(e),n=this.getOptionsBySingleValue(e);this._valueOptions=n,this.$emit("change",t,I(this.$props)?n:n[0])},isChildDisabled:function(e){return(this.$props.children||[]).some(function(t){var n=P(t);return n===e&&(0,w.IV)(t,"disabled")})},forcePopupAlign:function(){this.$data._open&&this.selectTriggerRef&&this.selectTriggerRef.triggerRef&&this.selectTriggerRef.triggerRef.forcePopupAlign()},renderFilterOptions:function(){var e=this.$createElement,t=this.$data._inputValue,n=this.$props,r=n.children,o=n.tags,a=n.notFoundContent,c=[],l=[],u=!1,d=this.renderFilterOptionsFromChildren(r,l,c);if(o){var h=this.$data._value;if(h=h.filter(function(e){return-1===l.indexOf(e)&&(!t||String(e).indexOf(String(t))>-1)}),h.sort(function(e,t){return e.length-t.length}),h.forEach(function(t){var n=t,r=(0,s.A)({},J,{role:"option"}),o=e(y.A,i()([{style:G},{attrs:r},{attrs:{value:n},key:n}]),[n]);d.push(o),c.push(o)}),t&&c.every(function(e){return P(e)!==t})){var f={attrs:J,key:t,props:{value:t,role:"option"},style:G};d.unshift(e(y.A,f,[t]))}}if(!d.length&&a){u=!0;var p={attrs:J,key:"NOT_FOUND",props:{value:"NOT_FOUND",disabled:!0,role:"option"},style:G};d=[e(y.A,p,[a])]}return{empty:u,options:d}},renderFilterOptionsFromChildren:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=this,n=arguments[1],r=arguments[2],o=this.$createElement,a=[],c=this.$props,l=this.$data._inputValue,u=c.tags;return e.forEach(function(e){if(e.data&&void 0===e.data.slot)if((0,w.xr)(e).isSelectOptGroup){var c=(0,w.nu)(e,"label"),d=e.key;d||"string"!==typeof c?!c&&d&&(c=d):d=c;var h=(0,w.Sk)(e)["default"];if(h="function"===typeof h?h():h,l&&t._filterOption(l,e)){var f=h.map(function(e){var t=P(e)||e.key;return o(y.A,i()([{key:t,attrs:{value:t}},e.data]),[e.componentOptions.children])});a.push(o(_.A,{key:d,attrs:{title:c},class:(0,w.t0)(e)},[f]))}else{var p=t.renderFilterOptionsFromChildren(h,n,r);p.length&&a.push(o(_.A,i()([{key:d,attrs:{title:c}},e.data]),[p]))}}else{M()((0,w.xr)(e).isSelectOption,"the children of `Select` should be `Select.Option` or `Select.OptGroup`, instead of `"+((0,w.xr)(e).name||(0,w.xr)(e))+"`.");var m=P(e);if(te(m,t.$props),t._filterOption(l,e)){var v={attrs:(0,s.A)({},J,(0,w.Z0)(e)),key:m,props:(0,s.A)({value:m},(0,w.Ts)(e),{role:"option"}),style:G,on:(0,w.kQ)(e),class:(0,w.t0)(e)},g=o(y.A,v,[e.componentOptions.children]);a.push(g),r.push(g)}u&&n.push(m)}}),a},renderTopControlNode:function(){var e=this,t=this.$createElement,n=this.$props,r=this.$data,o=r._value,a=r._inputValue,c=r._open,l=n.choiceTransitionName,u=n.prefixCls,d=n.maxTagTextLength,h=n.maxTagCount,f=n.maxTagPlaceholder,p=n.showSearch,m=(0,w.nu)(this,"removeIcon"),v=u+"-selection__rendered",g=null;if(R(n)){var y=null;if(o.length){var _=!1,b=1;p&&c?(_=!a,_&&(b=.4)):_=!0;var M=o[0],A=this.getOptionInfoBySingleValue(M),k=A.label,L=A.title;y=t("div",{key:"value",class:u+"-selection-selected-value",attrs:{title:V(L||k)},style:{display:_?"block":"none",opacity:b}},[k])}g=p?[y,t("div",{class:u+"-search "+u+"-search--inline",key:"input",style:{display:c?"block":"none"}},[this._getInputElement()])]:[y]}else{var C=[],S=o,z=void 0;if(void 0!==h&&o.length>h){S=S.slice(0,h);var T=this.getVLForOnChange(o.slice(h,o.length)),O="+ "+(o.length-h)+" ...";f&&(O="function"===typeof f?f(T):f);var H=(0,s.A)({},J,{role:"presentation",title:V(O)});z=t("li",i()([{style:G},{attrs:H},{on:{mousedown:B},class:u+"-selection__choice "+u+"-selection__choice__disabled",key:"maxTagPlaceholder"}]),[t("div",{class:u+"-selection__choice__content"},[O])])}if(I(n)&&(C=S.map(function(n){var r=e.getOptionInfoBySingleValue(n),o=r.label,a=r.title||o;d&&"string"===typeof o&&o.length>d&&(o=o.slice(0,d)+"...");var c=e.isChildDisabled(n),l=c?u+"-selection__choice "+u+"-selection__choice__disabled":u+"-selection__choice",h=(0,s.A)({},J,{role:"presentation",title:V(a)});return t("li",i()([{style:G},{attrs:h},{on:{mousedown:B},class:l,key:n||ue}]),[t("div",{class:u+"-selection__choice__content"},[o]),c?null:t("span",{on:{click:function(t){e.removeSelected(n,t)}},class:u+"-selection__choice__remove"},[m||t("i",{class:u+"-selection__choice__remove-icon"},["×"])])])})),z&&C.push(z),C.push(t("li",{class:u+"-search "+u+"-search--inline",key:"__input"},[this._getInputElement()])),I(n)&&l){var D=(0,x.A)(l,{tag:"ul",afterLeave:this.onChoiceAnimationLeave});g=t("transition-group",D,[C])}else g=t("ul",[C])}return t("div",i()([{class:v},{directives:[{name:"ant-ref",value:this.saveTopCtrlRef}]},{on:{click:this.topCtrlContainerClick}}]),[this.getPlaceholderElement(),g])},renderArrow:function(e){var t=this.$createElement,n=this.$props,r=n.showArrow,o=void 0===r?!e:r,a=n.loading,s=n.prefixCls,c=(0,w.nu)(this,"inputIcon");if(!o&&!a)return null;var l=t("i",a?{class:s+"-arrow-loading"}:{class:s+"-arrow-icon"});return t("span",i()([{key:"arrow",class:s+"-arrow",style:G},{attrs:J},{on:{click:this.onArrowClick},ref:"arrow"}]),[c||l])},topCtrlContainerClick:function(e){this.$data._open&&!R(this.$props)&&e.stopPropagation()},renderClear:function(){var e=this.$createElement,t=this.$props,n=t.prefixCls,r=t.allowClear,o=this.$data,a=o._value,s=o._inputValue,c=(0,w.nu)(this,"clearIcon"),l=e("span",i()([{key:"clear",class:n+"-selection__clear",on:{mousedown:B},style:G},{attrs:J},{on:{click:this.onClearSelection}}]),[c||e("i",{class:n+"-selection__clear-icon"},["×"])]);return r?F(this.$props)?s?l:null:s||a.length?l:null:null},selectionRefClick:function(){if(!this.disabled){var e=this.getInputDOMNode();this._focused&&this.$data._open?(this.setOpenState(!1,!1),e&&e.blur()):(this.clearBlurTime(),this.setOpenState(!0,!0),e&&e.focus())}},selectionRefFocus:function(e){this._focused||this.disabled||$(this.$props)?e.preventDefault():(this._focused=!0,this.updateFocusClassName(),this.$emit("focus"))},selectionRefBlur:function(e){$(this.$props)?e.preventDefault():this.inputBlur(e)}},render:function(){var e,t=arguments[0],n=this.$props,r=I(n),a=n.showArrow,s=void 0===a||a,c=this.$data,l=n.disabled,u=n.prefixCls,d=n.loading,h=this.renderTopControlNode(),f=this.$data,p=f._open,v=f._inputValue,g=f._value;if(p){var y=this.renderFilterOptions();this._empty=y.empty,this._options=y.options}var _=this.getRealOpenState(),b=this._empty,M=this._options||[],A=(0,w.WM)(this),x=A.mouseenter,k=void 0===x?de:x,L=A.mouseleave,C=void 0===L?de:L,S=A.popupScroll,z=void 0===S?de:S,T={props:{},attrs:{role:"combobox","aria-autocomplete":"list","aria-haspopup":"true","aria-expanded":_,"aria-controls":this.$data._ariaId},on:{},class:u+"-selection "+u+"-selection--"+(r?"multiple":"single"),key:"selection"},O={attrs:{tabIndex:-1}};$(n)||(O.attrs.tabIndex=n.disabled?-1:n.tabIndex);var H=(e={},(0,o.A)(e,u,!0),(0,o.A)(e,u+"-open",p),(0,o.A)(e,u+"-focused",p||!!this._focused),(0,o.A)(e,u+"-combobox",F(n)),(0,o.A)(e,u+"-disabled",l),(0,o.A)(e,u+"-enabled",!l),(0,o.A)(e,u+"-allow-clear",!!n.allowClear),(0,o.A)(e,u+"-no-arrow",!s),(0,o.A)(e,u+"-loading",!!d),e);return t(ae,i()([{attrs:{dropdownAlign:n.dropdownAlign,dropdownClassName:n.dropdownClassName,dropdownMatchSelectWidth:n.dropdownMatchSelectWidth,defaultActiveFirstOption:n.defaultActiveFirstOption,dropdownMenuStyle:n.dropdownMenuStyle,transitionName:n.transitionName,animation:n.animation,prefixCls:n.prefixCls,dropdownStyle:n.dropdownStyle,combobox:n.combobox,showSearch:n.showSearch,options:M,empty:b,multiple:r,disabled:l,visible:_,inputValue:v,value:g,backfillValue:c._backfillValue,firstActiveValue:n.firstActiveValue,getPopupContainer:n.getPopupContainer,showAction:n.showAction,menuItemSelectedIcon:(0,w.nu)(this,"menuItemSelectedIcon")},on:{dropdownVisibleChange:this.onDropdownVisibleChange,menuSelect:this.onMenuSelect,menuDeselect:this.onMenuDeselect,popupScroll:z,popupFocus:this.onPopupFocus,mouseenter:k,mouseleave:C}},{directives:[{name:"ant-ref",value:this.saveSelectTriggerRef}]},{attrs:{dropdownRender:n.dropdownRender,ariaId:this.$data._ariaId}}]),[t("div",i()([{directives:[{name:"ant-ref",value:fe(this.saveRootRef,this.saveSelectionRef)}]},{style:(0,w.gd)(this),class:m()(H),on:{mousedown:this.markMouseDown,mouseup:this.markMouseLeave,mouseout:this.markMouseLeave}},O,{on:{blur:this.selectionRefBlur,focus:this.selectionRefFocus,click:this.selectionRefClick,keydown:$(n)?de:this.onKeyDown}}]),[t("div",T,[h,this.renderClear(),this.renderArrow(!!r)])])])}},me=((0,C.A)(pe),n(25592)),ve=n(40255),ge=n(44807),ye=function(){return{prefixCls:u.A.string,size:u.A.oneOf(["small","large","default"]),showAction:u.A.oneOfType([u.A.string,u.A.arrayOf(String)]),notFoundContent:u.A.any,transitionName:u.A.string,choiceTransitionName:u.A.string,showSearch:u.A.bool,allowClear:u.A.bool,disabled:u.A.bool,tabIndex:u.A.number,placeholder:u.A.any,defaultActiveFirstOption:u.A.bool,dropdownClassName:u.A.string,dropdownStyle:u.A.any,dropdownMenuStyle:u.A.any,dropdownMatchSelectWidth:u.A.bool,filterOption:u.A.oneOfType([u.A.bool,u.A.func]),autoFocus:u.A.bool,backfill:u.A.bool,showArrow:u.A.bool,getPopupContainer:u.A.func,open:u.A.bool,defaultOpen:u.A.bool,autoClearSearchValue:u.A.bool,dropdownRender:u.A.func,loading:u.A.bool}},_e=u.A.shape({key:u.A.oneOfType([u.A.string,u.A.number])}).loose,be=u.A.oneOfType([u.A.string,u.A.number,u.A.arrayOf(u.A.oneOfType([_e,u.A.string,u.A.number])),_e]),Me=(0,s.A)({},ye(),{value:be,defaultValue:be,mode:u.A.string,optionLabelProp:u.A.string,firstActiveValue:u.A.oneOfType([String,u.A.arrayOf(String)]),maxTagCount:u.A.number,maxTagPlaceholder:u.A.any,maxTagTextLength:u.A.number,dropdownMatchSelectWidth:u.A.bool,optionFilterProp:u.A.string,labelInValue:u.A.boolean,getPopupContainer:u.A.func,tokenSeparators:u.A.arrayOf(u.A.string),getInputElement:u.A.func,options:u.A.array,suffixIcon:u.A.any,removeIcon:u.A.any,clearIcon:u.A.any,menuItemSelectedIcon:u.A.any}),Ae={prefixCls:u.A.string,size:u.A.oneOf(["default","large","small"]),notFoundContent:u.A.any,showSearch:u.A.bool,optionLabelProp:u.A.string,transitionName:u.A.string,choiceTransitionName:u.A.string},we="SECRET_COMBOBOX_MODE_DO_NOT_USE",xe={SECRET_COMBOBOX_MODE_DO_NOT_USE:we,Option:(0,s.A)({},d.A,{name:"ASelectOption"}),OptGroup:(0,s.A)({},h.A,{name:"ASelectOptGroup"}),name:"ASelect",props:(0,s.A)({},Me,{showSearch:u.A.bool.def(!1),transitionName:u.A.string.def("slide-up"),choiceTransitionName:u.A.string.def("zoom")}),propTypes:Ae,model:{prop:"value",event:"change"},provide:function(){return{savePopupRef:this.savePopupRef}},inject:{configProvider:{default:function(){return me.f}}},created:function(){(0,c.A)("combobox"!==this.$props.mode,"Select","The combobox mode of Select is deprecated,it will be removed in next major version,please use AutoComplete instead")},methods:{getNotFoundContent:function(e){var t=this.$createElement,n=(0,w.nu)(this,"notFoundContent");return void 0!==n?n:this.isCombobox()?null:e(t,"Select")},savePopupRef:function(e){this.popupRef=e},focus:function(){this.$refs.vcSelect.focus()},blur:function(){this.$refs.vcSelect.blur()},isCombobox:function(){var e=this.mode;return"combobox"===e||e===we},renderSuffixIcon:function(e){var t=this.$createElement,n=this.$props.loading,r=(0,w.nu)(this,"suffixIcon");return r=Array.isArray(r)?r[0]:r,r?(0,w.zO)(r)?(0,k.Ob)(r,{class:e+"-arrow-icon"}):r:t(ve.A,n?{attrs:{type:"loading"}}:{attrs:{type:"down"},class:e+"-arrow-icon"})}},render:function(){var e,t=arguments[0],n=(0,w.Oq)(this),r=n.prefixCls,c=n.size,u=n.mode,h=n.options,f=n.getPopupContainer,p=n.showArrow,m=(0,a.A)(n,["prefixCls","size","mode","options","getPopupContainer","showArrow"]),v=this.configProvider.getPrefixCls,g=this.configProvider.renderEmpty,y=v("select",r),_=this.configProvider.getPopupContainer,b=(0,w.nu)(this,"removeIcon");b=Array.isArray(b)?b[0]:b;var M=(0,w.nu)(this,"clearIcon");M=Array.isArray(M)?M[0]:M;var A=(0,w.nu)(this,"menuItemSelectedIcon");A=Array.isArray(A)?A[0]:A;var x=(0,l.A)(m,["inputIcon","removeIcon","clearIcon","suffixIcon","menuItemSelectedIcon"]),L=(e={},(0,o.A)(e,y+"-lg","large"===c),(0,o.A)(e,y+"-sm","small"===c),(0,o.A)(e,y+"-show-arrow",p),e),C=this.$props.optionLabelProp;this.isCombobox()&&(C=C||"value");var S={multiple:"multiple"===u,tags:"tags"===u,combobox:this.isCombobox()},z=b&&((0,w.zO)(b)?(0,k.Ob)(b,{class:y+"-remove-icon"}):b)||t(ve.A,{attrs:{type:"close"},class:y+"-remove-icon"}),T=M&&((0,w.zO)(M)?(0,k.Ob)(M,{class:y+"-clear-icon"}):M)||t(ve.A,{attrs:{type:"close-circle",theme:"filled"},class:y+"-clear-icon"}),O=A&&((0,w.zO)(A)?(0,k.Ob)(A,{class:y+"-selected-icon"}):A)||t(ve.A,{attrs:{type:"check"},class:y+"-selected-icon"}),H={props:(0,s.A)({inputIcon:this.renderSuffixIcon(y),removeIcon:z,clearIcon:T,menuItemSelectedIcon:O,showArrow:p},x,S,{prefixCls:y,optionLabelProp:C||"children",notFoundContent:this.getNotFoundContent(g),maxTagPlaceholder:(0,w.nu)(this,"maxTagPlaceholder"),placeholder:(0,w.nu)(this,"placeholder"),children:h?h.map(function(e){var n=e.key,r=e.label,o=void 0===r?e.title:r,s=e.on,c=e["class"],l=e.style,u=(0,a.A)(e,["key","label","on","class","style"]);return t(d.A,i()([{key:n},{props:u,on:s,class:c,style:l}]),[o])}):(0,w.Gk)(this.$slots["default"]),__propsSymbol__:Symbol(),dropdownRender:(0,w.nu)(this,"dropdownRender",{},!1),getPopupContainer:f||_}),on:(0,w.WM)(this),class:L,ref:"vcSelect"};return t(pe,H)},install:function(e){e.use(ge.A),e.component(xe.name,xe),e.component(xe.Option.name,xe.Option),e.component(xe.OptGroup.name,xe.OptGroup)}},ke=xe},22050:function(e,t,n){"use strict";n(29229),n(93693)},68263:function(e,t,n){"use strict";n.d(t,{A:function(){return H}});var r=n(44508),i=n(85505),o=n(97479),a=n(46942),s=n.n(a),c=n(4718),l=n(15848),u=n(25592),d={prefixCls:c.A.string,size:c.A.oneOfType([c.A.oneOf(["large","small","default"]),c.A.number]),shape:c.A.oneOf(["circle","square"])},h=c.A.shape(d).loose,f={props:(0,l.CB)(d,{size:"large"}),render:function(){var e,t,n=arguments[0],i=this.$props,o=i.prefixCls,a=i.size,c=i.shape,l=s()((e={},(0,r.A)(e,o+"-lg","large"===a),(0,r.A)(e,o+"-sm","small"===a),e)),u=s()((t={},(0,r.A)(t,o+"-circle","circle"===c),(0,r.A)(t,o+"-square","square"===c),t)),d="number"===typeof a?{width:a+"px",height:a+"px",lineHeight:a+"px"}:{};return n("span",{class:s()(o,l,u),style:d})}},p=f,m={prefixCls:c.A.string,width:c.A.oneOfType([c.A.number,c.A.string])},v=c.A.shape(m),g={props:m,render:function(){var e=arguments[0],t=this.$props,n=t.prefixCls,r=t.width,i="number"===typeof r?r+"px":r;return e("h3",{class:n,style:{width:i}})}},y=g,_=n(32779),b=c.A.oneOfType([c.A.number,c.A.string]),M={prefixCls:c.A.string,width:c.A.oneOfType([b,c.A.arrayOf(b)]),rows:c.A.number},A=c.A.shape(M),w={props:M,methods:{getWidth:function(e){var t=this.width,n=this.rows,r=void 0===n?2:n;return Array.isArray(t)?t[e]:r-1===e?t:void 0}},render:function(){var e=this,t=arguments[0],n=this.$props,r=n.prefixCls,i=n.rows,o=[].concat((0,_.A)(Array(i))).map(function(n,r){var i=e.getWidth(r);return t("li",{key:r,style:{width:"number"===typeof i?i+"px":i}})});return t("ul",{class:r},[o])}},x=w,k=n(44807),L={active:c.A.bool,loading:c.A.bool,prefixCls:c.A.string,children:c.A.any,avatar:c.A.oneOfType([c.A.string,h,c.A.bool]),title:c.A.oneOfType([c.A.bool,c.A.string,v]),paragraph:c.A.oneOfType([c.A.bool,c.A.string,A])};function C(e){return e&&"object"===("undefined"===typeof e?"undefined":(0,o.A)(e))?e:{}}function S(e,t){return e&&!t?{shape:"square"}:{shape:"circle"}}function z(e,t){return!e&&t?{width:"38%"}:e&&t?{width:"50%"}:{}}function T(e,t){var n={};return e&&t||(n.width="61%"),n.rows=!e&&t?3:2,n}var O={name:"ASkeleton",props:(0,l.CB)(L,{avatar:!1,title:!0,paragraph:!0}),inject:{configProvider:{default:function(){return u.f}}},render:function(){var e=arguments[0],t=this.$props,n=t.prefixCls,o=t.loading,a=t.avatar,c=t.title,u=t.paragraph,d=t.active,h=this.configProvider.getPrefixCls,f=h("skeleton",n);if(o||!(0,l.cK)(this,"loading")){var m,v=!!a||""===a,g=!!c,_=!!u,b=void 0;if(v){var M={props:(0,i.A)({prefixCls:f+"-avatar"},S(g,_),C(a))};b=e("div",{class:f+"-header"},[e(p,M)])}var A=void 0;if(g||_){var w=void 0;if(g){var k={props:(0,i.A)({prefixCls:f+"-title"},z(v,_),C(c))};w=e(y,k)}var L=void 0;if(_){var O={props:(0,i.A)({prefixCls:f+"-paragraph"},T(v,g),C(u))};L=e(x,O)}A=e("div",{class:f+"-content"},[w,L])}var H=s()(f,(m={},(0,r.A)(m,f+"-with-avatar",v),(0,r.A)(m,f+"-active",d),m));return e("div",{class:H},[b,A])}var D=this.$slots["default"];return D&&1===D.length?D[0]:e("span",[D])},install:function(e){e.use(k.A),e.component(O.name,O)}},H=O},15731:function(e,t,n){"use strict";n(29229)},8442:function(e,t,n){"use strict";var r=n(75189),i=n.n(r),o=n(44508),a=n(4718),s=n(15848),c=n(25592),l=a.A.oneOfType([a.A.number,a.A.oneOf(["small","middle","large"])]),u={small:8,middle:16,large:24},d={prefixCls:a.A.string,size:l,direction:a.A.oneOf(["horizontal","vertical"]),align:a.A.oneOf(["start","end","center","baseline"])},h={functional:!0,name:"ASpace",props:(0,s.CB)(d,{size:"small",direction:"horizontal"}),inject:{configProvider:{default:function(){return c.f}}},render:function(e,t){var n,r=t.prefixCls,a=t.injections.configProvider,c=t.children,l=t.props,d=l.align,h=l.size,f=l.direction,p=a.getPrefixCls,m=p("space",r),v=(0,s.Gk)(c),g=v.length;if(0===g)return null;var y=void 0===d&&"horizontal"===f?"center":d,_=[(n={},(0,o.A)(n,m,!0),(0,o.A)(n,m+"-"+f,!0),(0,o.A)(n,m+"-align-"+y,y),n)];t.data["class"]&&_.push(t.data["class"]);var b=m+"-item",M="marginRight";return e("div",i()([t.data,{class:_}]),[v.map(function(t,n){return e("div",{class:b,key:b+"-"+n,style:n===g-1?{}:(0,o.A)({},"vertical"===f?"marginBottom":M,"string"===typeof h?u[h]+"px":h+"px")},[t])})])},install:function(e){e.component(h.name,h)}};t.Ay=h},33272:function(e,t,n){"use strict";n(29229)},64258:function(e,t,n){"use strict";n.d(t,{Lt:function(){return y},N0:function(){return m}});var r=n(75189),i=n.n(r),o=n(44508),a=n(5748),s=n(38221),c=n.n(s),l=n(4718),u=n(52315),d=n(15848),h=n(51927),f=n(25592),p=l.A.oneOf(["small","default","large"]),m=function(){return{prefixCls:l.A.string,spinning:l.A.bool,size:p,wrapperClassName:l.A.string,tip:l.A.string,delay:l.A.number,indicator:l.A.any}},v=void 0;function g(e,t){return!!e&&!!t&&!isNaN(Number(t))}function y(e){v="function"===typeof e.indicator?e.indicator:function(t){return t(e.indicator)}}t.Ay={name:"ASpin",mixins:[u.A],props:(0,d.CB)(m(),{size:"default",spinning:!0,wrapperClassName:""}),inject:{configProvider:{default:function(){return f.f}}},data:function(){var e=this.spinning,t=this.delay,n=g(e,t);return this.originalUpdateSpinning=this.updateSpinning,this.debouncifyUpdateSpinning(this.$props),{sSpinning:e&&!n}},mounted:function(){this.updateSpinning()},updated:function(){var e=this;this.$nextTick(function(){e.debouncifyUpdateSpinning(),e.updateSpinning()})},beforeDestroy:function(){this.cancelExistingSpin()},methods:{debouncifyUpdateSpinning:function(e){var t=e||this.$props,n=t.delay;n&&(this.cancelExistingSpin(),this.updateSpinning=c()(this.originalUpdateSpinning,n))},updateSpinning:function(){var e=this.spinning,t=this.sSpinning;t!==e&&this.setState({sSpinning:e})},cancelExistingSpin:function(){var e=this.updateSpinning;e&&e.cancel&&e.cancel()},getChildren:function(){return this.$slots&&this.$slots["default"]?(0,d.Gk)(this.$slots["default"]):null},renderIndicator:function(e,t){var n=t+"-dot",r=(0,d.nu)(this,"indicator");return null===r?null:(Array.isArray(r)&&(r=(0,d.Gk)(r),r=1===r.length?r[0]:r),(0,d.zO)(r)?(0,h.Ob)(r,{class:n}):v&&(0,d.zO)(v(e))?(0,h.Ob)(v(e),{class:n}):e("span",{class:n+" "+t+"-dot-spin"},[e("i",{class:t+"-dot-item"}),e("i",{class:t+"-dot-item"}),e("i",{class:t+"-dot-item"}),e("i",{class:t+"-dot-item"})]))}},render:function(e){var t,n=this.$props,r=n.size,s=n.prefixCls,c=n.tip,l=n.wrapperClassName,u=(0,a.A)(n,["size","prefixCls","tip","wrapperClassName"]),h=this.configProvider.getPrefixCls,f=h("spin",s),p=this.sSpinning,m=(t={},(0,o.A)(t,f,!0),(0,o.A)(t,f+"-sm","small"===r),(0,o.A)(t,f+"-lg","large"===r),(0,o.A)(t,f+"-spinning",p),(0,o.A)(t,f+"-show-text",!!c),t),v=e("div",i()([u,{class:m}]),[this.renderIndicator(e,f),c?e("div",{class:f+"-text"},[c]):null]),g=this.getChildren();if(g){var y,_=(y={},(0,o.A)(y,f+"-container",!0),(0,o.A)(y,f+"-blur",p),y);return e("div",i()([{on:(0,d.WM)(this)},{class:[f+"-nested-loading",l]}]),[p&&e("div",{key:"loading"},[v]),e("div",{class:_,key:"container"},[g])])}return v}}},82840:function(e,t,n){"use strict";var r=n(64258),i=n(44807);r.Ay.setDefaultIndicator=r.Lt,r.Ay.install=function(e){e.use(i.A),e.component(r.Ay.name,r.Ay)},t.A=r.Ay},45562:function(e,t,n){"use strict";n(29229)},60304:function(e,t,n){"use strict";n.d(t,{A:function(){return L}});var r=n(85505),i=n(4718),o=n(15848),a=n(25592),s=n(97948),c=n.n(s),l={name:"AStatisticNumber",functional:!0,render:function(e,t){var n=t.props,r=n.value,i=n.formatter,o=n.precision,a=n.decimalSeparator,s=n.groupSeparator,l=void 0===s?"":s,u=n.prefixCls,d=void 0;if("function"===typeof i)d=i({value:r,h:e});else{var h=String(r),f=h.match(/^(-?)(\d*)(\.(\d+))?$/);if(f){var p=f[1],m=f[2]||"0",v=f[4]||"";m=m.replace(/\B(?=(\d{3})+(?!\d))/g,l),"number"===typeof o&&(v=c()(v,o,"0").slice(0,o)),v&&(v=""+a+v),d=[e("span",{key:"int",class:u+"-content-value-int"},[p,m]),v&&e("span",{key:"decimal",class:u+"-content-value-decimal"},[v])]}else d=h}return e("span",{class:u+"-content-value"},[d])}},u={prefixCls:i.A.string,decimalSeparator:i.A.string,groupSeparator:i.A.string,format:i.A.string,value:i.A.oneOfType([i.A.string,i.A.number,i.A.object]),valueStyle:i.A.any,valueRender:i.A.any,formatter:i.A.any,precision:i.A.number,prefix:i.A.any,suffix:i.A.any,title:i.A.any},d={name:"AStatistic",props:(0,o.CB)(u,{decimalSeparator:".",groupSeparator:","}),inject:{configProvider:{default:function(){return a.f}}},render:function(){var e=arguments[0],t=this.$props,n=t.prefixCls,i=t.value,a=void 0===i?0:i,s=t.valueStyle,c=t.valueRender,u=this.configProvider.getPrefixCls,d=u("statistic",n),h=(0,o.nu)(this,"title"),f=(0,o.nu)(this,"prefix"),p=(0,o.nu)(this,"suffix"),m=(0,o.nu)(this,"formatter",{},!1),v=e(l,{props:(0,r.A)({},this.$props,{prefixCls:d,value:a,formatter:m})});return c&&(v=c(v)),e("div",{class:d},[h&&e("div",{class:d+"-title"},[h]),e("div",{style:s,class:d+"-content"},[f&&e("span",{class:d+"-content-prefix"},[f]),v,p&&e("span",{class:d+"-content-suffix"},[p])])])}},h=n(75189),f=n.n(h),p=n(95093),m=n(67287),v=n(52040),g=n(52037),y=n.n(g),_=[["Y",31536e6],["M",2592e6],["D",864e5],["H",36e5],["m",6e4],["s",1e3],["S",1]];function b(e,t){var n=e,r=/\[[^\]]*\]/g,i=(t.match(r)||[]).map(function(e){return e.slice(1,-1)}),o=t.replace(r,"[]"),a=_.reduce(function(e,t){var r=(0,v.A)(t,2),i=r[0],o=r[1];if(-1!==e.indexOf(i)){var a=Math.floor(n/o);return n-=a*o,e.replace(new RegExp(i+"+","g"),function(e){var t=e.length;return y()(a.toString(),t,"0")})}return e},o),s=0;return a.replace(r,function(){var e=i[s];return s+=1,e})}function M(e,t){var n=t.format,r=void 0===n?"":n,i=(0,m.A)(p)(e).valueOf(),o=(0,m.A)(p)().valueOf(),a=Math.max(i-o,0);return b(a,r)}var A=1e3/30;function w(e){return(0,m.A)(p)(e).valueOf()}var x={name:"AStatisticCountdown",props:(0,o.CB)(u,{format:"HH:mm:ss"}),created:function(){this.countdownId=void 0},mounted:function(){this.syncTimer()},updated:function(){this.syncTimer()},beforeDestroy:function(){this.stopTimer()},methods:{syncTimer:function(){var e=this.$props.value,t=w(e);t>=Date.now()?this.startTimer():this.stopTimer()},startTimer:function(){var e=this;this.countdownId||(this.countdownId=window.setInterval(function(){e.$refs.statistic.$forceUpdate(),e.syncTimer()},A))},stopTimer:function(){var e=this.$props.value;if(this.countdownId){clearInterval(this.countdownId),this.countdownId=void 0;var t=w(e);t0&&(this.calcTimeout&&clearTimeout(this.calcTimeout),this.calcTimeout=setTimeout(function(){var r=(n.lastChild.offsetWidth||0)+1;t===r||Math.abs(t-r)<=3||e.setState({lastStepOffsetWidth:r})}))}}},render:function(){var e,t=this,n=arguments[0],i=this.prefixCls,s=this.direction,c=this.type,l=this.labelPlacement,u=this.iconPrefix,h=this.status,f=this.size,p=this.current,m=this.$scopedSlots,v=this.initial,g=this.icons,y="navigation"===c,_=this.progressDot;void 0===_&&(_=m.progressDot);var b=this.lastStepOffsetWidth,M=this.flexSupported,A=(0,o.Gk)(this.$slots["default"]),w=A.length-1,x=_?"vertical":l,k=(e={},(0,a.A)(e,i,!0),(0,a.A)(e,i+"-"+s,!0),(0,a.A)(e,i+"-"+f,f),(0,a.A)(e,i+"-label-"+x,"horizontal"===s),(0,a.A)(e,i+"-dot",!!_),(0,a.A)(e,i+"-navigation",y),(0,a.A)(e,i+"-flex-not-supported",!M),e),L=(0,o.WM)(this),C={class:k,ref:"vcStepsRef",on:L};return n("div",C,[A.map(function(e,n){var a=(0,o.Ts)(e),c=v+n,l={props:(0,r.A)({stepNumber:""+(c+1),stepIndex:c,prefixCls:i,iconPrefix:u,progressDot:t.progressDot,icons:g},a),on:(0,o.kQ)(e),scopedSlots:m};return L.change&&(l.on.stepClick=t.onStepClick),M||"vertical"===s||(y?(l.props.itemWidth=100/(w+1)+"%",l.props.adjustMarginRight=0):n!==w&&(l.props.itemWidth=100/w+"%",l.props.adjustMarginRight=-Math.round(b/w+1)+"px")),"error"===h&&n===p-1&&(l["class"]=i+"-next-error"),a.status||(l.props.status=c===p?h:c0&&void 0!==arguments[0]?arguments[0]:{},t={prefixCls:i.A.string,iconPrefix:i.A.string,current:i.A.number,initial:i.A.number,labelPlacement:i.A.oneOf(["horizontal","vertical"]).def("horizontal"),status:i.A.oneOf(["wait","process","finish","error"]),size:i.A.oneOf(["default","small"]),direction:i.A.oneOf(["horizontal","vertical"]),progressDot:i.A.oneOfType([i.A.bool,i.A.func]),type:i.A.oneOf(["default","navigation"])};return(0,o.CB)(t,e)},x={name:"ASteps",props:w({current:0}),inject:{configProvider:{default:function(){return M.f}}},model:{prop:"current",event:"change"},Step:(0,r.A)({},_.Step,{name:"AStep"}),render:function(){var e=arguments[0],t=(0,o.Oq)(this),n=t.prefixCls,i=t.iconPrefix,a=this.configProvider.getPrefixCls,s=a("steps",n),c=a("",i),l={finish:e(b.A,{attrs:{type:"check"},class:s+"-finish-icon"}),error:e(b.A,{attrs:{type:"close"},class:s+"-error-icon"})},u={props:(0,r.A)({icons:l,iconPrefix:c,prefixCls:s},t),on:(0,o.WM)(this),scopedSlots:this.$scopedSlots};return e(_,u,[this.$slots["default"]])},install:function(e){e.use(A.A),e.component(x.name,x),e.component(x.Step.name,x.Step)}},k=x},36463:function(e,t,n){"use strict";n(29229)},91997:function(e,t,n){"use strict";n.d(t,{A:function(){return y}});var r=n(85505),i=n(44508),o=n(5748),a=n(4718),s=n(15848),c={prefixCls:a.A.string,disabled:a.A.bool.def(!1),checkedChildren:a.A.any,unCheckedChildren:a.A.any,tabIndex:a.A.oneOfType([a.A.string,a.A.number]),checked:a.A.bool.def(!1),defaultChecked:a.A.bool.def(!1),autoFocus:a.A.bool.def(!1),loadingIcon:a.A.any},l=n(52315),u={name:"VcSwitch",mixins:[l.A],model:{prop:"checked",event:"change"},props:(0,r.A)({},c,{prefixCls:c.prefixCls.def("rc-switch")}),data:function(){var e=!1;return e=(0,s.cK)(this,"checked")?!!this.checked:!!this.defaultChecked,{stateChecked:e}},watch:{checked:function(e){this.stateChecked=e}},mounted:function(){var e=this;this.$nextTick(function(){var t=e.autoFocus,n=e.disabled;t&&!n&&e.focus()})},methods:{setChecked:function(e,t){this.disabled||((0,s.cK)(this,"checked")||(this.stateChecked=e),this.$emit("change",e,t))},handleClick:function(e){var t=!this.stateChecked;this.setChecked(t,e),this.$emit("click",t,e)},handleKeyDown:function(e){37===e.keyCode?this.setChecked(!1,e):39===e.keyCode&&this.setChecked(!0,e)},handleMouseUp:function(e){this.$refs.refSwitchNode&&this.$refs.refSwitchNode.blur(),this.$emit("mouseup",e)},focus:function(){this.$refs.refSwitchNode.focus()},blur:function(){this.$refs.refSwitchNode.blur()}},render:function(){var e,t=arguments[0],n=(0,s.Oq)(this),a=n.prefixCls,c=n.disabled,l=n.loadingIcon,u=n.tabIndex,d=(0,o.A)(n,["prefixCls","disabled","loadingIcon","tabIndex"]),h=this.stateChecked,f=(e={},(0,i.A)(e,a,!0),(0,i.A)(e,a+"-checked",h),(0,i.A)(e,a+"-disabled",c),e),p={props:(0,r.A)({},d),on:(0,r.A)({},(0,s.WM)(this),{keydown:this.handleKeyDown,click:this.handleClick,mouseup:this.handleMouseUp}),attrs:{type:"button",role:"switch","aria-checked":h,disabled:c,tabIndex:u},class:f,ref:"refSwitchNode"};return t("button",p,[l,t("span",{class:a+"-inner"},[h?(0,s.nu)(this,"checkedChildren"):(0,s.nu)(this,"unCheckedChildren")])])}},d=u,h=n(98416),f=n(40255),p=n(25592),m=n(44807),v=n(36873),g={name:"ASwitch",__ANT_SWITCH:!0,model:{prop:"checked",event:"change"},props:{prefixCls:a.A.string,size:a.A.oneOf(["small","default","large"]),disabled:a.A.bool,checkedChildren:a.A.any,unCheckedChildren:a.A.any,tabIndex:a.A.oneOfType([a.A.string,a.A.number]),checked:a.A.bool,defaultChecked:a.A.bool,autoFocus:a.A.bool,loading:a.A.bool},inject:{configProvider:{default:function(){return p.f}}},methods:{focus:function(){this.$refs.refSwitchNode.focus()},blur:function(){this.$refs.refSwitchNode.blur()}},created:function(){(0,v.A)((0,s.Ay)(this,"checked")||!(0,s.Ay)(this,"value"),"Switch","`value` is not validate prop, do you mean `checked`?")},render:function(){var e,t=arguments[0],n=(0,s.Oq)(this),a=n.prefixCls,c=n.size,l=n.loading,u=n.disabled,p=(0,o.A)(n,["prefixCls","size","loading","disabled"]),m=this.configProvider.getPrefixCls,v=m("switch",a),g=(e={},(0,i.A)(e,v+"-small","small"===c),(0,i.A)(e,v+"-loading",l),e),y=l?t(f.A,{attrs:{type:"loading"},class:v+"-loading-icon"}):null,_={props:(0,r.A)({},p,{prefixCls:v,loadingIcon:y,checkedChildren:(0,s.nu)(this,"checkedChildren"),unCheckedChildren:(0,s.nu)(this,"unCheckedChildren"),disabled:u||l}),on:(0,s.WM)(this),class:g,ref:"refSwitchNode"};return t(h.A,{attrs:{insertExtraNode:!0}},[t(d,_)])},install:function(e){e.use(m.A),e.component(g.name,g)}},y=g},53966:function(e,t,n){"use strict";n(29229)},76806:function(e,t,n){"use strict";n.d(t,{A:function(){return At}});var r=n(85505),i=n(5748),o=n(44508),a=n(32779),s=n(97479),c=void 0,l=void 0,u={position:"absolute",top:"-9999px",width:"50px",height:"50px"},d="RC_TABLE_INTERNAL_COL_DEFINE";function h(e){var t=e.direction,n=void 0===t?"vertical":t,r=e.prefixCls;if("undefined"===typeof document||"undefined"===typeof window)return 0;var i="vertical"===n;if(i&&c)return c;if(!i&&l)return l;var o=document.createElement("div");Object.keys(u).forEach(function(e){o.style[e]=u[e]}),o.className=r+"-hide-scrollbar scroll-div-append-to-body",i?o.style.overflowY="scroll":o.style.overflowX="scroll",document.body.appendChild(o);var a=0;return i?(a=o.offsetWidth-o.clientWidth,c=a):(a=o.offsetHeight-o.clientHeight,l=a),document.body.removeChild(o),a}function f(e,t,n){var r=void 0;function i(){for(var i=arguments.length,o=Array(i),a=0;a1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];o[n]=o[n]||[];var a=[],s=function(e){var t=o.length-n;e&&!e.children&&t>1&&(!e.rowSpan||e.rowSpan0?(u.children=e(u.children,n+1,u,o),i.colSpan+=u.colSpan):i.colSpan+=1;for(var d=0;d0})}var E={name:"TableHeader",props:{fixed:k.A.string,columns:k.A.array.isRequired,expander:k.A.object.isRequired},inject:{table:{default:function(){return{}}}},render:function(){var e=arguments[0],t=this.table,n=t.sComponents,r=t.prefixCls,i=t.showHeader,o=t.customHeaderRow,a=this.expander,s=this.columns,c=this.fixed;if(!i)return null;var l=P({columns:s});a.renderExpandIndentCell(l,c);var u=n.header.wrapper;return e(u,{class:r+"-thead"},[l.map(function(t,i){return e(V,{attrs:{prefixCls:r,index:i,fixed:c,columns:s,rows:l,row:t,components:n,customHeaderRow:o},key:i})})])}},j=n(58156),F=n.n(j);function I(e){return e&&!(0,D.zO)(e)&&"[object Object]"===Object.prototype.toString.call(e)}var $={name:"TableCell",props:{record:k.A.object,prefixCls:k.A.string,index:k.A.number,indent:k.A.number,indentSize:k.A.number,column:k.A.object,expandIcon:k.A.any,component:k.A.any},inject:{table:{default:function(){return{}}}},methods:{handleClick:function(e){var t=this.record,n=this.column.onCellClick;n&&n(t,e)}},render:function(){var e,t=arguments[0],n=this.record,i=this.indentSize,a=this.prefixCls,s=this.indent,c=this.index,l=this.expandIcon,u=this.column,d=this.component,h=u.dataIndex,f=u.customRender,p=u.className,m=void 0===p?"":p,g=this.table.transformCellText,y=void 0;y="number"===typeof h||h&&0!==h.length?F()(n,h):n;var _={props:{},attrs:{},on:{click:this.handleClick}},b=void 0,M=void 0;f&&(y=f(y,n,c,u),I(y)&&(_.attrs=y.attrs||{},_.props=y.props||{},_["class"]=y["class"],_.style=y.style,b=_.attrs.colSpan,M=_.attrs.rowSpan,y=y.children)),u.customCell&&(_=(0,D.v6)(_,u.customCell(n,c))),I(y)&&(y=null),g&&(y=g({text:y,column:u,record:n,index:c}));var A=l?t("span",{style:{paddingLeft:i*s+"px"},class:a+"-indent indent-level-"+s}):null;if(0===M||0===b)return null;u.align&&(_.style=(0,r.A)({textAlign:u.align},_.style));var w=x()(m,u["class"],(e={},(0,o.A)(e,a+"-cell-ellipsis",!!u.ellipsis),(0,o.A)(e,a+"-cell-break-word",!!u.width),e));return u.ellipsis&&"string"===typeof y&&(_.attrs.title=y),t(d,v()([{class:w},_]),[A,l,y])}},R=n(52315);function N(){}var W={name:"TableRow",mixins:[R.A],inject:{store:{from:"table-store",default:function(){return{}}}},props:(0,D.CB)({customRow:k.A.func,record:k.A.object,prefixCls:k.A.string,columns:k.A.array,index:k.A.number,rowKey:k.A.oneOfType([k.A.string,k.A.number]).isRequired,className:k.A.string,indent:k.A.number,indentSize:k.A.number,hasExpandIcon:k.A.func,fixed:k.A.oneOfType([k.A.string,k.A.bool]),renderExpandIcon:k.A.func,renderExpandIconCell:k.A.func,components:k.A.any,expandedRow:k.A.bool,isAnyColumnsFixed:k.A.bool,ancestorKeys:k.A.array.isRequired,expandIconColumnIndex:k.A.number,expandRowByClick:k.A.bool},{hasExpandIcon:function(){},renderExpandIcon:function(){},renderExpandIconCell:function(){}}),computed:{visible:function(){var e=this.store.expandedRowKeys,t=this.$props.ancestorKeys;return!(0!==t.length&&!t.every(function(t){return e.includes(t)}))},height:function(){var e=this.store,t=e.expandedRowsHeight,n=e.fixedColumnsBodyRowsHeight,r=this.$props,i=r.fixed,o=r.rowKey;return i?t[o]?t[o]:n[o]?n[o]:null:null},hovered:function(){var e=this.store.currentHoverKey,t=this.$props.rowKey;return e===t}},data:function(){return{shouldRender:this.visible}},mounted:function(){var e=this;this.shouldRender&&this.$nextTick(function(){e.saveRowRef()})},watch:{visible:{handler:function(e){e&&(this.shouldRender=!0)},immediate:!0}},updated:function(){var e=this;this.shouldRender&&!this.rowRef&&this.$nextTick(function(){e.saveRowRef()})},methods:{onRowClick:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:N,n=this.record,r=this.index;this.__emit("rowClick",n,r,e),t(e)},onRowDoubleClick:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:N,n=this.record,r=this.index;this.__emit("rowDoubleClick",n,r,e),t(e)},onContextMenu:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:N,n=this.record,r=this.index;this.__emit("rowContextmenu",n,r,e),t(e)},onMouseEnter:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:N,n=this.record,r=this.index,i=this.rowKey;this.__emit("hover",!0,i),this.__emit("rowMouseenter",n,r,e),t(e)},onMouseLeave:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:N,n=this.record,r=this.index,i=this.rowKey;this.__emit("hover",!1,i),this.__emit("rowMouseleave",n,r,e),t(e)},setExpandedRowHeight:function(){var e=this.store,t=this.rowKey,n=e.expandedRowsHeight,i=this.rowRef.getBoundingClientRect().height;n=(0,r.A)({},n,(0,o.A)({},t,i)),e.expandedRowsHeight=n},setRowHeight:function(){var e=this.store,t=this.rowKey,n=e.fixedColumnsBodyRowsHeight,i=this.rowRef.getBoundingClientRect().height;e.fixedColumnsBodyRowsHeight=(0,r.A)({},n,(0,o.A)({},t,i))},getStyle:function(){var e=this.height,t=this.visible,n=(0,D.gd)(this);return e&&(n=(0,r.A)({},n,{height:e})),t||n.display||(n=(0,r.A)({},n,{display:"none"})),n},saveRowRef:function(){this.rowRef=this.$el;var e=this.isAnyColumnsFixed,t=this.fixed,n=this.expandedRow,r=this.ancestorKeys;e&&(!t&&n&&this.setExpandedRowHeight(),!t&&r.length>=0&&this.setRowHeight())}},render:function(){var e=this,t=arguments[0];if(!this.shouldRender)return null;var n=this.prefixCls,o=this.columns,a=this.record,s=this.rowKey,c=this.index,l=this.customRow,u=void 0===l?N:l,d=this.indent,h=this.indentSize,f=this.hovered,p=this.height,m=this.visible,v=this.components,g=this.hasExpandIcon,y=this.renderExpandIcon,_=this.renderExpandIconCell,b=v.body.row,M=v.body.cell,A="";f&&(A+=" "+n+"-hover");var w=[];_(w);for(var k=0;k2&&void 0!==arguments[2]?arguments[2]:[],o=this.$createElement,a=this.table,s=a.columnManager,c=a.sComponents,l=a.prefixCls,u=a.childrenColumnName,d=a.rowClassName,h=a.customRow,f=void 0===h?G:h,p=(0,D.WM)(this.table),m=p.rowClick,v=void 0===m?G:m,g=p.rowDoubleclick,y=void 0===g?G:g,_=p.rowContextmenu,b=void 0===_?G:_,M=p.rowMouseenter,A=void 0===M?G:M,w=p.rowMouseleave,x=void 0===w?G:w,k=this.getRowKey,L=this.fixed,C=this.expander,S=this.isAnyColumnsFixed,z=[],T=function(a){var h=e[a],p=k(h,a),m="string"===typeof d?d:d(h,a,t),g={};s.isAnyColumnsFixed()&&(g.hover=n.handleRowHover);var _=void 0;_="left"===L?s.leftLeafColumns():"right"===L?s.rightLeafColumns():n.getColumns(s.leafColumns());var M=l+"-row",w={props:(0,r.A)({},C.props,{fixed:L,index:a,prefixCls:M,record:h,rowKey:p,needIndentSpaced:C.needIndentSpaced}),key:p,on:{rowClick:v,expandedChange:C.handleExpandChange},scopedSlots:{default:function(e){var n=(0,D.v6)({props:{fixed:L,indent:t,record:h,index:a,prefixCls:M,childrenColumnName:u,columns:_,rowKey:p,ancestorKeys:i,components:c,isAnyColumnsFixed:S,customRow:f},on:(0,r.A)({rowDoubleclick:y,rowContextmenu:b,rowMouseenter:A,rowMouseleave:x},g),class:m,ref:"row_"+a+"_"+t},e);return o(B,n)}}},T=o(q,w);z.push(T),C.renderRows(n.renderRows,z,h,a,t,L,p,i)},O=0;O0&&(m.width=g+"px")}var y=d?n.table:"table",_=n.body.wrapper,b=void 0;return d&&(b=e(_,{class:r+"-tbody"},[this.renderRows(o,0)]),a&&(b=a(b))),e(y,{class:l,style:m,key:"table"},[e(H,{attrs:{columns:p,fixed:h}}),u&&e(E,{attrs:{expander:c,columns:p,fixed:h}}),b])}},X=J,Z={name:"HeadTable",props:{fixed:k.A.oneOfType([k.A.string,k.A.bool]),columns:k.A.array.isRequired,tableClassName:k.A.string.isRequired,handleBodyScrollLeft:k.A.func.isRequired,expander:k.A.object.isRequired},inject:{table:{default:function(){return{}}}},render:function(){var e=arguments[0],t=this.columns,n=this.fixed,r=this.tableClassName,i=this.handleBodyScrollLeft,a=this.expander,s=this.table,c=s.prefixCls,l=s.scroll,u=s.showHeader,d=s.saveRef,f=s.useFixedHeader,p={},m=h({direction:"vertical"});if(l.y){f=!0;var g=h({direction:"horizontal",prefixCls:c});g>0&&!n&&(p.marginBottom="-"+g+"px",p.paddingBottom="0px",p.minWidth=m+"px",p.overflowX="scroll",p.overflowY=0===m?"hidden":"scroll")}return f&&u?e("div",v()([{key:"headTable"},{directives:[{name:"ant-ref",value:n?function(){}:d("headTable")}]},{class:x()(c+"-header",(0,o.A)({},c+"-hide-scrollbar",m>0)),style:p,on:{scroll:i}}]),[e(X,{attrs:{tableClassName:r,hasHead:!0,hasBody:!1,fixed:n,columns:t,expander:a}})]):null}},Q={name:"BodyTable",props:{fixed:k.A.oneOfType([k.A.string,k.A.bool]),columns:k.A.array.isRequired,tableClassName:k.A.string.isRequired,handleBodyScroll:k.A.func.isRequired,handleWheel:k.A.func.isRequired,getRowKey:k.A.func.isRequired,expander:k.A.object.isRequired,isAnyColumnsFixed:k.A.bool},inject:{table:{default:function(){return{}}}},render:function(){var e=arguments[0],t=this.table,n=t.prefixCls,i=t.scroll,o=this.columns,a=this.fixed,s=this.tableClassName,c=this.getRowKey,l=this.handleBodyScroll,u=this.handleWheel,d=this.expander,f=this.isAnyColumnsFixed,p=this.table,m=p.useFixedHeader,g=p.saveRef,y=(0,r.A)({},this.table.bodyStyle),_={};if((i.x||a)&&(y.overflowX=y.overflowX||"scroll",y.WebkitTransform="translate3d (0, 0, 0)"),i.y){var b=y.maxHeight||i.y;b="number"===typeof b?b+"px":b,a?(_.maxHeight=b,_.overflowY=y.overflowY||"scroll"):y.maxHeight=b,y.overflowY=y.overflowY||"scroll",m=!0;var M=h({direction:"vertical"});M>0&&a&&(y.marginBottom="-"+M+"px",y.paddingBottom="0px")}var A=e(X,{attrs:{tableClassName:s,hasHead:!m,hasBody:!0,fixed:a,columns:o,expander:d,getRowKey:c,isAnyColumnsFixed:f}});if(a&&o.length){var w=void 0;return"left"===o[0].fixed||!0===o[0].fixed?w="fixedColumnsBodyLeft":"right"===o[0].fixed&&(w="fixedColumnsBodyRight"),delete y.overflowX,delete y.overflowY,e("div",{key:"bodyTable",class:n+"-body-outer",style:(0,r.A)({},y)},[e("div",v()([{class:n+"-body-inner",style:_},{directives:[{name:"ant-ref",value:g(w)}]},{on:{wheel:u,scroll:l}}]),[A])])}var x=i&&(i.x||i.y);return e("div",v()([{attrs:{tabIndex:x?-1:void 0},key:"bodyTable",class:n+"-body",style:y},{directives:[{name:"ant-ref",value:g("bodyTable")}]},{on:{wheel:u,scroll:l}}]),[A])}},ee=function(){return{expandIconAsCell:k.A.bool,expandRowByClick:k.A.bool,expandedRowKeys:k.A.array,expandedRowClassName:k.A.func,defaultExpandAllRows:k.A.bool,defaultExpandedRowKeys:k.A.array,expandIconColumnIndex:k.A.number,expandedRowRender:k.A.func,expandIcon:k.A.func,childrenColumnName:k.A.string,indentSize:k.A.number,columnManager:k.A.object.isRequired,prefixCls:k.A.string.isRequired,data:k.A.array,getRowKey:k.A.func}},te={name:"ExpandableTable",mixins:[R.A],props:(0,D.CB)(ee(),{expandIconAsCell:!1,expandedRowClassName:function(){return""},expandIconColumnIndex:0,defaultExpandAllRows:!1,defaultExpandedRowKeys:[],childrenColumnName:"children",indentSize:15}),inject:{store:{from:"table-store",default:function(){return{}}}},data:function(){var e=this.data,t=this.childrenColumnName,n=this.defaultExpandAllRows,r=this.expandedRowKeys,i=this.defaultExpandedRowKeys,o=this.getRowKey,s=[],c=[].concat((0,a.A)(e));if(n)for(var l=0;l4&&void 0!==arguments[4]&&arguments[4];n&&(n.preventDefault(),n.stopPropagation());var o=this.store.expandedRowKeys;if(e)o=[].concat((0,a.A)(o),[r]);else{var s=o.indexOf(r);-1!==s&&(o=p(o,r))}this.expandedRowKeys||(this.store.expandedRowKeys=o),this.latestExpandedRows&&y()(this.latestExpandedRows,o)||(this.latestExpandedRows=o,this.__emit("expandedRowsChange",o),this.__emit("update:expandedRowKeys",o)),i||this.__emit("expand",e,t)},renderExpandIndentCell:function(e,t){var n=this.prefixCls,i=this.expandIconAsCell;if(i&&"right"!==t&&e.length){var o={key:"rc-table-expand-icon-cell",className:n+"-expand-icon-th",title:"",rowSpan:e.length};e[0].unshift((0,r.A)({},o,{column:o}))}},renderExpandedRow:function(e,t,n,r,i,o,a){var s=this,c=this.$createElement,l=this.prefixCls,u=this.expandIconAsCell,d=this.indentSize,h=i[i.length-1],f=h+"-extra-row",p={body:{row:"tr",cell:"td"}},m=void 0;m="left"===a?this.columnManager.leftLeafColumns().length:"right"===a?this.columnManager.rightLeafColumns().length:this.columnManager.leafColumns().length;var v=[{key:"extra-row",customRender:function(){var r=s.store.expandedRowKeys,i=r.includes(h);return{attrs:{colSpan:m},children:"right"!==a?n(e,t,o,i):" "}}}];return u&&"right"!==a&&v.unshift({key:"expand-icon-placeholder",customRender:function(){return null}}),c(B,{key:f,attrs:{columns:v,rowKey:f,ancestorKeys:i,prefixCls:l+"-expanded-row",indentSize:d,indent:o,fixed:a,components:p,expandedRow:!0,hasExpandIcon:function(){}},class:r})},renderRows:function(e,t,n,r,i,o,s,c){var l=this.expandedRowClassName,u=this.expandedRowRender,d=this.childrenColumnName,h=n[d],f=[].concat((0,a.A)(c),[s]),p=i+1;u&&t.push(this.renderExpandedRow(n,r,u,l(n,r,i),f,p,o)),h&&t.push.apply(t,(0,a.A)(e(h,p,f)))}},render:function(){var e=this.data,t=this.childrenColumnName,n=this.$scopedSlots,r=(0,D.Oq)(this),i=e.some(function(e){return e[t]});return n["default"]&&n["default"]({props:r,on:(0,D.WM)(this),needIndentSpaced:i,renderRows:this.renderRows,handleExpandChange:this.handleExpandChange,renderExpandIndentCell:this.renderExpandIndentCell})}},ne=te,re=n(85471),ie={name:"Table",mixins:[R.A],provide:function(){return{"table-store":this.store,table:this}},props:(0,D.CB)({data:k.A.array,useFixedHeader:k.A.bool,columns:k.A.array,prefixCls:k.A.string,bodyStyle:k.A.object,rowKey:k.A.oneOfType([k.A.string,k.A.func]),rowClassName:k.A.oneOfType([k.A.string,k.A.func]),customRow:k.A.func,customHeaderRow:k.A.func,showHeader:k.A.bool,title:k.A.func,id:k.A.string,footer:k.A.func,emptyText:k.A.any,scroll:k.A.object,rowRef:k.A.func,getBodyWrapper:k.A.func,components:k.A.shape({table:k.A.any,header:k.A.shape({wrapper:k.A.any,row:k.A.any,cell:k.A.any}),body:k.A.shape({wrapper:k.A.any,row:k.A.any,cell:k.A.any})}),expandIconAsCell:k.A.bool,expandedRowKeys:k.A.array,expandedRowClassName:k.A.func,defaultExpandAllRows:k.A.bool,defaultExpandedRowKeys:k.A.array,expandIconColumnIndex:k.A.number,expandedRowRender:k.A.func,childrenColumnName:k.A.string,indentSize:k.A.number,expandRowByClick:k.A.bool,expandIcon:k.A.func,tableLayout:k.A.string,transformCellText:k.A.func},{data:[],useFixedHeader:!1,rowKey:"key",rowClassName:function(){return""},prefixCls:"rc-table",bodyStyle:{},showHeader:!0,scroll:{},rowRef:function(){return null},emptyText:function(){return"No Data"},customHeaderRow:function(){}}),data:function(){return this.preData=[].concat((0,a.A)(this.data)),this.store=(this.$root.constructor.observable||re.Ay.observable)({currentHoverKey:null,fixedColumnsHeadRowsHeight:[],fixedColumnsBodyRowsHeight:{},expandedRowsHeight:{},expandedRowKeys:[]}),{columnManager:new O(this.columns),sComponents:b()({table:"table",header:{wrapper:"thead",row:"tr",cell:"th"},body:{wrapper:"tbody",row:"tr",cell:"td"}},this.components)}},watch:{components:function(){this._components=b()({table:"table",header:{wrapper:"thead",row:"tr",cell:"th"},body:{wrapper:"tbody",row:"tr",cell:"td"}},this.components)},columns:function(e){e&&this.columnManager.reset(e)},data:function(e){var t=this;0===e.length&&this.hasScrollX()&&this.$nextTick(function(){t.resetScrollX()})}},created:function(){var e=this;["rowClick","rowDoubleclick","rowContextmenu","rowMouseenter","rowMouseleave"].forEach(function(t){(0,L.A)(void 0===(0,D.WM)(e)[t],t+" is deprecated, please use customRow instead.")}),(0,L.A)(void 0===this.getBodyWrapper,"getBodyWrapper is deprecated, please use custom components instead."),this.setScrollPosition("left"),this.debouncedWindowResize=f(this.handleWindowResize,150)},mounted:function(){var e=this;this.$nextTick(function(){e.columnManager.isAnyColumnsFixed()&&(e.handleWindowResize(),e.resizeEvent=(0,C.A)(window,"resize",e.debouncedWindowResize)),e.ref_headTable&&(e.ref_headTable.scrollLeft=0),e.ref_bodyTable&&(e.ref_bodyTable.scrollLeft=0)})},updated:function(){var e=this;this.$nextTick(function(){e.columnManager.isAnyColumnsFixed()&&(e.handleWindowResize(),e.resizeEvent||(e.resizeEvent=(0,C.A)(window,"resize",e.debouncedWindowResize)))})},beforeDestroy:function(){this.resizeEvent&&this.resizeEvent.remove(),this.debouncedWindowResize&&this.debouncedWindowResize.cancel()},methods:{getRowKey:function(e,t){var n=this.rowKey,r="function"===typeof n?n(e,t):e[n];return(0,L.A)(void 0!==r,"Each record in table should have a unique `key` prop,or set `rowKey` to an unique primary key."),void 0===r?t:r},setScrollPosition:function(e){if(this.scrollPosition=e,this.tableNode){var t=this.prefixCls;"both"===e?A()(this.tableNode).remove(new RegExp("^"+t+"-scroll-position-.+$")).add(t+"-scroll-position-left").add(t+"-scroll-position-right"):A()(this.tableNode).remove(new RegExp("^"+t+"-scroll-position-.+$")).add(t+"-scroll-position-"+e)}},setScrollPositionClassName:function(){var e=this.ref_bodyTable,t=0===e.scrollLeft,n=e.scrollLeft+1>=e.children[0].getBoundingClientRect().width-e.getBoundingClientRect().width;t&&n?this.setScrollPosition("both"):t?this.setScrollPosition("left"):n?this.setScrollPosition("right"):"middle"!==this.scrollPosition&&this.setScrollPosition("middle")},isTableLayoutFixed:function(){var e=this.$props,t=e.tableLayout,n=e.columns,r=void 0===n?[]:n,i=e.useFixedHeader,o=e.scroll,a=void 0===o?{}:o;return"undefined"!==typeof t?"fixed"===t:!!r.some(function(e){var t=e.ellipsis;return!!t})||(!(!i&&!a.y)||!(!a.x||!0===a.x||"max-content"===a.x))},handleWindowResize:function(){this.syncFixedTableRowHeight(),this.setScrollPositionClassName()},syncFixedTableRowHeight:function(){var e=this.tableNode.getBoundingClientRect();if(!(void 0!==e.height&&e.height<=0)){var t=this.prefixCls,n=this.ref_headTable?this.ref_headTable.querySelectorAll("thead"):this.ref_bodyTable.querySelectorAll("thead"),r=this.ref_bodyTable.querySelectorAll("."+t+"-row")||[],i=[].map.call(n,function(e){return e.getBoundingClientRect().height?e.getBoundingClientRect().height-.5:"auto"}),o=this.store,a=[].reduce.call(r,function(e,t){var n=t.getAttribute("data-row-key"),r=t.getBoundingClientRect().height||o.fixedColumnsBodyRowsHeight[n]||"auto";return e[n]=r,e},{});y()(o.fixedColumnsHeadRowsHeight,i)&&y()(o.fixedColumnsBodyRowsHeight,a)||(this.store.fixedColumnsHeadRowsHeight=i,this.store.fixedColumnsBodyRowsHeight=a)}},resetScrollX:function(){this.ref_headTable&&(this.ref_headTable.scrollLeft=0),this.ref_bodyTable&&(this.ref_bodyTable.scrollLeft=0)},hasScrollX:function(){var e=this.scroll,t=void 0===e?{}:e;return"x"in t},handleBodyScrollLeft:function(e){if(e.currentTarget===e.target){var t=e.target,n=this.scroll,r=void 0===n?{}:n,i=this.ref_headTable,o=this.ref_bodyTable;t.scrollLeft!==this.lastScrollLeft&&r.x&&(t===o&&i?i.scrollLeft=t.scrollLeft:t===i&&o&&(o.scrollLeft=t.scrollLeft),this.setScrollPositionClassName()),this.lastScrollLeft=t.scrollLeft}},handleBodyScrollTop:function(e){var t=e.target;if(e.currentTarget===t){var n=this.scroll,r=void 0===n?{}:n,i=this.ref_headTable,o=this.ref_bodyTable,a=this.ref_fixedColumnsBodyLeft,s=this.ref_fixedColumnsBodyRight;if(t.scrollTop!==this.lastScrollTop&&r.y&&t!==i){var c=t.scrollTop;a&&t!==a&&(a.scrollTop=c),s&&t!==s&&(s.scrollTop=c),o&&t!==o&&(o.scrollTop=c)}this.lastScrollTop=t.scrollTop}},handleBodyScroll:function(e){this.handleBodyScrollLeft(e),this.handleBodyScrollTop(e)},handleWheel:function(e){var t=this.$props.scroll,n=void 0===t?{}:t;if(window.navigator.userAgent.match(/Trident\/7\./)&&n.y){e.preventDefault();var r=e.deltaY,i=e.target,o=this.ref_bodyTable,a=this.ref_fixedColumnsBodyLeft,s=this.ref_fixedColumnsBodyRight,c=0;c=this.lastScrollTop?this.lastScrollTop+r:r,a&&i!==a&&(a.scrollTop=c),s&&i!==s&&(s.scrollTop=c),o&&i!==o&&(o.scrollTop=c)}},saveRef:function(e){var t=this;return function(n){t["ref_"+e]=n}},saveTableNodeRef:function(e){this.tableNode=e},renderMainTable:function(){var e=this.$createElement,t=this.scroll,n=this.prefixCls,r=this.columnManager.isAnyColumnsFixed(),i=r||t.x||t.y,o=[this.renderTable({columns:this.columnManager.groupedColumns(),isAnyColumnsFixed:r}),this.renderEmptyText(),this.renderFooter()];return i?e("div",{class:n+"-scroll"},[o]):o},renderLeftFixedTable:function(){var e=this.$createElement,t=this.prefixCls;return e("div",{class:t+"-fixed-left"},[this.renderTable({columns:this.columnManager.leftColumns(),fixed:"left"})])},renderRightFixedTable:function(){var e=this.$createElement,t=this.prefixCls;return e("div",{class:t+"-fixed-right"},[this.renderTable({columns:this.columnManager.rightColumns(),fixed:"right"})])},renderTable:function(e){var t=this.$createElement,n=e.columns,r=e.fixed,i=e.isAnyColumnsFixed,o=this.prefixCls,a=this.scroll,s=void 0===a?{}:a,c=s.x||r?o+"-fixed":"",l=t(Z,{key:"head",attrs:{columns:n,fixed:r,tableClassName:c,handleBodyScrollLeft:this.handleBodyScrollLeft,expander:this.expander}}),u=t(Q,{key:"body",attrs:{columns:n,fixed:r,tableClassName:c,getRowKey:this.getRowKey,handleWheel:this.handleWheel,handleBodyScroll:this.handleBodyScroll,expander:this.expander,isAnyColumnsFixed:i}});return[l,u]},renderTitle:function(){var e=this.$createElement,t=this.title,n=this.prefixCls,r=this.data;return t?e("div",{class:n+"-title",key:"title"},[t(r)]):null},renderFooter:function(){var e=this.$createElement,t=this.footer,n=this.prefixCls,r=this.data;return t?e("div",{class:n+"-footer",key:"footer"},[t(r)]):null},renderEmptyText:function(){var e=this.$createElement,t=this.emptyText,n=this.prefixCls,r=this.data;if(r.length)return null;var i=n+"-placeholder";return e("div",{class:i,key:"emptyText"},["function"===typeof t?t():t])}},render:function(){var e,t=this,n=arguments[0],i=(0,D.Oq)(this),a=this.columnManager,s=this.getRowKey,c=i.prefixCls,l=x()(i.prefixCls,(e={},(0,o.A)(e,c+"-fixed-header",i.useFixedHeader||i.scroll&&i.scroll.y),(0,o.A)(e,c+"-scroll-position-left "+c+"-scroll-position-right","both"===this.scrollPosition),(0,o.A)(e,c+"-scroll-position-"+this.scrollPosition,"both"!==this.scrollPosition),(0,o.A)(e,c+"-layout-fixed",this.isTableLayoutFixed()),e)),u=a.isAnyColumnsLeftFixed(),d=a.isAnyColumnsRightFixed(),h={props:(0,r.A)({},i,{columnManager:a,getRowKey:s}),on:(0,D.WM)(this),scopedSlots:{default:function(e){return t.expander=e,n("div",v()([{directives:[{name:"ant-ref",value:t.saveTableNodeRef}]},{class:l}]),[t.renderTitle(),n("div",{class:c+"-content"},[t.renderMainTable(),u&&t.renderLeftFixedTable(),d&&t.renderRightFixedTable()])])}}};return n(ne,h)}},oe={name:"Column",props:{rowSpan:k.A.number,colSpan:k.A.number,title:k.A.any,dataIndex:k.A.string,width:k.A.oneOfType([k.A.number,k.A.string]),ellipsis:k.A.bool,fixed:k.A.oneOf([!0,"left","right"]),align:k.A.oneOf(["left","center","right"]),customRender:k.A.func,className:k.A.string,customCell:k.A.func,customHeaderCell:k.A.func}},ae={name:"ColumnGroup",props:{title:k.A.any},isTableColumnGroup:!0},se={name:"Table",Column:oe,ColumnGroup:ae,props:ie.props,methods:{getTableNode:function(){return this.$refs.table.tableNode},getBodyTable:function(){return this.$refs.table.ref_bodyTable},normalize:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=[];return t.forEach(function(t){if(t.tag){var i=(0,D.i7)(t),o=(0,D.gd)(t),a=(0,D.t0)(t),s=(0,D.Oq)(t),c=(0,D.kQ)(t),l={};Object.keys(c).forEach(function(e){var t="on-"+e;l[(0,D.PT)(t)]=c[e]});var u=(0,D.Sk)(t),d=u["default"],h=u.title,f=(0,r.A)({title:h},s,{style:o,class:a},l);if(i&&(f.key=i),(0,D.xr)(t).isTableColumnGroup)f.children=e.normalize("function"===typeof d?d():d);else{var p=t.data&&t.data.scopedSlots&&t.data.scopedSlots["default"];f.customRender=f.customRender||p}n.push(f)}}),n}},render:function(){var e=arguments[0],t=this.$slots,n=this.normalize,i=(0,D.Oq)(this),o=i.columns||n(t["default"]),a={props:(0,r.A)({},i,{columns:o}),on:(0,D.WM)(this),ref:"table"};return e(ie,a)}},ce=se,le=n(70198),ue=n(5285),de=n(74072),he=n(50545),fe=n.n(he),pe=n(77197),me=n(40255),ve=n(75842),ge=n(63301),ye={name:"FilterDropdownMenuWrapper",methods:{handelClick:function(e){e.stopPropagation()}},render:function(){var e=arguments[0],t=this.$slots,n=this.handelClick;return e("div",{on:{click:n}},[t["default"]])}},_e=n(38223),be=n(64258),Me=(0,_e.bv)(),Ae=(0,be.N0)(),we=k.A.shape({text:k.A.string,value:k.A.string,children:k.A.array}).loose,xe={title:k.A.any,dataIndex:k.A.string,customRender:k.A.func,customCell:k.A.func,customHeaderCell:k.A.func,align:k.A.oneOf(["left","right","center"]),ellipsis:k.A.bool,filters:k.A.arrayOf(we),filterMultiple:k.A.bool,filterDropdown:k.A.any,filterDropdownVisible:k.A.bool,sorter:k.A.oneOfType([k.A.boolean,k.A.func]),defaultSortOrder:k.A.oneOf(["ascend","descend"]),colSpan:k.A.number,width:k.A.oneOfType([k.A.string,k.A.number]),className:k.A.string,fixed:k.A.oneOfType([k.A.bool,k.A.oneOf(["left","right"])]),filterIcon:k.A.any,filteredValue:k.A.array,filtered:k.A.bool,defaultFilteredValue:k.A.array,sortOrder:k.A.oneOfType([k.A.bool,k.A.oneOf(["ascend","descend"])]),sortDirections:k.A.array},ke=k.A.shape({filterTitle:k.A.string,filterConfirm:k.A.any,filterReset:k.A.any,emptyText:k.A.any,selectAll:k.A.any,selectInvert:k.A.any,sortTitle:k.A.string,expand:k.A.string,collapse:k.A.string}).loose,Le=k.A.oneOf(["checkbox","radio"]),Ce={type:Le,selectedRowKeys:k.A.array,getCheckboxProps:k.A.func,selections:k.A.oneOfType([k.A.array,k.A.bool]),hideDefaultSelections:k.A.bool,fixed:k.A.bool,columnWidth:k.A.oneOfType([k.A.string,k.A.number]),selectWay:k.A.oneOf(["onSelect","onSelectMultiple","onSelectAll","onSelectInvert"]),columnTitle:k.A.any},Se={prefixCls:k.A.string,dropdownPrefixCls:k.A.string,rowSelection:k.A.oneOfType([k.A.shape(Ce).loose,null]),pagination:k.A.oneOfType([k.A.shape((0,r.A)({},Me,{position:k.A.oneOf(["top","bottom","both"])})).loose,k.A.bool]),size:k.A.oneOf(["default","middle","small","large"]),dataSource:k.A.array,components:k.A.object,columns:k.A.array,rowKey:k.A.oneOfType([k.A.string,k.A.func]),rowClassName:k.A.func,expandedRowRender:k.A.any,defaultExpandAllRows:k.A.bool,defaultExpandedRowKeys:k.A.array,expandedRowKeys:k.A.array,expandIconAsCell:k.A.bool,expandIconColumnIndex:k.A.number,expandRowByClick:k.A.bool,loading:k.A.oneOfType([k.A.shape(Ae).loose,k.A.bool]),locale:ke,indentSize:k.A.number,customRow:k.A.func,customHeaderRow:k.A.func,useFixedHeader:k.A.bool,bordered:k.A.bool,showHeader:k.A.bool,footer:k.A.func,title:k.A.func,scroll:k.A.object,childrenColumnName:k.A.oneOfType([k.A.array,k.A.string]),bodyStyle:k.A.any,sortDirections:k.A.array,tableLayout:k.A.string,getPopupContainer:k.A.func,expandIcon:k.A.func,transformCellText:k.A.func},ze={store:k.A.any,locale:k.A.any,disabled:k.A.bool,getCheckboxPropsByItem:k.A.func,getRecordKey:k.A.func,data:k.A.array,prefixCls:k.A.string,hideDefaultSelections:k.A.bool,selections:k.A.oneOfType([k.A.array,k.A.bool]),getPopupContainer:k.A.func},Te={store:k.A.any,type:Le,defaultSelection:k.A.arrayOf([k.A.string,k.A.number]),rowIndex:k.A.oneOfType([k.A.string,k.A.number]),name:k.A.string,disabled:k.A.bool,id:k.A.string},Oe={_propsSymbol:k.A.any,locale:ke,selectedKeys:k.A.arrayOf([k.A.string,k.A.number]),column:k.A.object,confirmFilter:k.A.func,prefixCls:k.A.string,dropdownPrefixCls:k.A.string,getPopupContainer:k.A.func,handleFilter:k.A.func},He=n(51927);function De(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"children",n=[],i=function e(i){i.forEach(function(i){if(i[t]){var o=(0,r.A)({},i);delete o[t],n.push(o),i[t].length>0&&e(i[t])}else n.push(i)})};return i(e),n}function Ye(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"children";return e.map(function(e,i){var o={};return e[n]&&(o[n]=Ye(e[n],t,n)),(0,r.A)({},t(e,i),o)})}function Ve(e,t){return e.reduce(function(e,n){if(t(n)&&e.push(n),n.children){var r=Ve(n.children,t);e.push.apply(e,(0,a.A)(r))}return e},[])}function Pe(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(e||[]).forEach(function(e){var n=e.value,r=e.children;t[n.toString()]=n,Pe(r,t)}),t}function Ee(e){e.stopPropagation()}var je={name:"FilterMenu",mixins:[R.A],props:(0,D.CB)(Oe,{handleFilter:function(){},column:{}}),data:function(){var e="filterDropdownVisible"in this.column&&this.column.filterDropdownVisible;return this.preProps=(0,r.A)({},(0,D.Oq)(this)),{sSelectedKeys:this.selectedKeys,sKeyPathOfSelectedItem:{},sVisible:e,sValueKeys:Pe(this.column.filters)}},watch:{_propsSymbol:function(){var e=(0,D.Oq)(this),t=e.column,n={};"selectedKeys"in e&&!y()(this.preProps.selectedKeys,e.selectedKeys)&&(n.sSelectedKeys=e.selectedKeys),y()((this.preProps.column||{}).filters,(e.column||{}).filters)||(n.sValueKeys=Pe(e.column.filters)),"filterDropdownVisible"in t&&(n.sVisible=t.filterDropdownVisible),Object.keys(n).length>0&&this.setState(n),this.preProps=(0,r.A)({},e)}},mounted:function(){var e=this,t=this.column;this.$nextTick(function(){e.setNeverShown(t)})},updated:function(){var e=this,t=this.column;this.$nextTick(function(){e.setNeverShown(t)})},methods:{getDropdownVisible:function(){return!this.neverShown&&this.sVisible},setNeverShown:function(e){var t=this.$el,n=!!fe()(t,".ant-table-scroll");n&&(this.neverShown=!!e.fixed)},setSelectedKeys:function(e){var t=e.selectedKeys;this.setState({sSelectedKeys:t})},setVisible:function(e){var t=this.column;"filterDropdownVisible"in t||this.setState({sVisible:e}),t.onFilterDropdownVisibleChange&&t.onFilterDropdownVisibleChange(e)},handleClearFilters:function(){this.setState({sSelectedKeys:[]},this.handleConfirm)},handleConfirm:function(){var e=this;this.setVisible(!1),this.confirmFilter2(),this.$forceUpdate(),this.$nextTick(function(){e.confirmFilter})},onVisibleChange:function(e){this.setVisible(e);var t=this.$props.column;e||t.filterDropdown instanceof Function||this.confirmFilter2()},handleMenuItemClick:function(e){var t=this.$data.sSelectedKeys;if(e.keyPath&&!(e.keyPath.length<=1)){var n=this.$data.sKeyPathOfSelectedItem;t&&t.indexOf(e.key)>=0?delete n[e.key]:n[e.key]=e.keyPath,this.setState({sKeyPathOfSelectedItem:n})}},hasSubMenu:function(){var e=this.column.filters,t=void 0===e?[]:e;return t.some(function(e){return!!(e.children&&e.children.length>0)})},confirmFilter2:function(){var e=this.$props,t=e.column,n=e.selectedKeys,r=e.confirmFilter,i=this.$data,o=i.sSelectedKeys,a=i.sValueKeys,s=t.filterDropdown;y()(o,n)||r(t,s?o:o.map(function(e){return a[e]}).filter(function(e){return void 0!==e}))},renderMenus:function(e){var t=this,n=this.$createElement,r=this.$props,i=r.dropdownPrefixCls,a=r.prefixCls;return e.map(function(e){if(e.children&&e.children.length>0){var r=t.sKeyPathOfSelectedItem,s=Object.keys(r).some(function(t){return r[t].indexOf(e.value)>=0}),c=x()(a+"-dropdown-submenu",(0,o.A)({},i+"-submenu-contain-selected",s));return n(le.A,{attrs:{title:e.text,popupClassName:c},key:e.value},[t.renderMenus(e.children)])}return t.renderMenuItem(e)})},renderFilterIcon:function(){var e,t=this.$createElement,n=this.column,r=this.locale,i=this.prefixCls,a=this.selectedKeys,s=a&&a.length>0,c=n.filterIcon;"function"===typeof c&&(c=c(s,n));var l=x()((e={},(0,o.A)(e,i+"-selected","filtered"in n?n.filtered:s),(0,o.A)(e,i+"-open",this.getDropdownVisible()),e));return c?1===c.length&&(0,D.zO)(c[0])?(0,He.Ob)(c[0],{on:{click:Ee},class:x()(i+"-icon",l)}):t("span",{class:x()(i+"-icon",l)},[c]):t(me.A,{attrs:{title:r.filterTitle,type:"filter",theme:"filled"},class:l,on:{click:Ee}})},renderMenuItem:function(e){var t=this.$createElement,n=this.column,r=this.$data.sSelectedKeys,i=!("filterMultiple"in n)||n.filterMultiple,o=t(i?ve.A:ge.Ay,{attrs:{checked:r&&r.indexOf(e.value)>=0}});return t(ue.A,{key:e.value},[o,t("span",[e.text])])}},render:function(){var e=this,t=arguments[0],n=this.$data.sSelectedKeys,r=this.column,i=this.locale,a=this.prefixCls,s=this.dropdownPrefixCls,c=this.getPopupContainer,l=!("filterMultiple"in r)||r.filterMultiple,u=x()((0,o.A)({},s+"-menu-without-submenu",!this.hasSubMenu())),d=r.filterDropdown;d instanceof Function&&(d=d({prefixCls:s+"-custom",setSelectedKeys:function(t){return e.setSelectedKeys({selectedKeys:t})},selectedKeys:n,confirm:this.handleConfirm,clearFilters:this.handleClearFilters,filters:r.filters,visible:this.getDropdownVisible(),column:r}));var h=t(ye,{class:a+"-dropdown"},d?[d]:[t(de.Ay,{attrs:{multiple:l,prefixCls:s+"-menu",selectedKeys:n&&n.map(function(e){return e}),getPopupContainer:c},on:{click:this.handleMenuItemClick,select:this.setSelectedKeys,deselect:this.setSelectedKeys},class:u},[this.renderMenus(r.filters)]),t("div",{class:a+"-dropdown-btns"},[t("a",{class:a+"-dropdown-link confirm",on:{click:this.handleConfirm}},[i.filterConfirm]),t("a",{class:a+"-dropdown-link clear",on:{click:this.handleClearFilters}},[i.filterReset])])]);return t(pe.Ay,{attrs:{trigger:["click"],placement:"bottomRight",visible:this.getDropdownVisible(),getPopupContainer:c,forceRender:!0},on:{visibleChange:this.onVisibleChange}},[t("template",{slot:"overlay"},[h]),this.renderFilterIcon()])}},Fe={name:"SelectionBox",mixins:[R.A],props:Te,computed:{checked:function(){var e=this.$props,t=e.store,n=e.defaultSelection,r=e.rowIndex,i=!1;return i=t.selectionDirty?t.selectedRowKeys.indexOf(r)>=0:t.selectedRowKeys.indexOf(r)>=0||n.indexOf(r)>=0,i}},render:function(){var e=arguments[0],t=(0,D.Oq)(this),n=t.type,o=t.rowIndex,a=(0,i.A)(t,["type","rowIndex"]),s=this.checked,c={props:(0,r.A)({checked:s},a),on:(0,D.WM)(this)};return"radio"===n?(c.props.value=o,e(ge.Ay,c)):e(ve.A,c)}},Ie=n(36457);function $e(e){var t=e.store,n=e.getCheckboxPropsByItem,r=e.getRecordKey,i=e.data,o=e.type,a=e.byDefaultChecked;return a?i[o](function(e,t){return n(e,t).defaultChecked}):i[o](function(e,n){return t.selectedRowKeys.indexOf(r(e,n))>=0})}function Re(e){var t=e.store,n=e.data;if(!n.length)return!1;var i=$e((0,r.A)({},e,{data:n,type:"some",byDefaultChecked:!1}))&&!$e((0,r.A)({},e,{data:n,type:"every",byDefaultChecked:!1})),o=$e((0,r.A)({},e,{data:n,type:"some",byDefaultChecked:!0}))&&!$e((0,r.A)({},e,{data:n,type:"every",byDefaultChecked:!0}));return t.selectionDirty?i:i||o}function Ne(e){var t=e.store,n=e.data;return!!n.length&&(t.selectionDirty?$e((0,r.A)({},e,{data:n,type:"every",byDefaultChecked:!1})):$e((0,r.A)({},e,{data:n,type:"every",byDefaultChecked:!1}))||$e((0,r.A)({},e,{data:n,type:"every",byDefaultChecked:!0})))}var We={name:"SelectionCheckboxAll",mixins:[R.A],props:ze,data:function(){var e=this.$props;return this.defaultSelections=e.hideDefaultSelections?[]:[{key:"all",text:e.locale.selectAll},{key:"invert",text:e.locale.selectInvert}],{checked:Ne(e),indeterminate:Re(e)}},watch:{$props:{handler:function(){this.setCheckState(this.$props)},deep:!0,immediate:!0}},methods:{checkSelection:function(e,t,n,r){var i=e||this.$props,o=i.store,a=i.getCheckboxPropsByItem,s=i.getRecordKey;return("every"===n||"some"===n)&&(r?t[n](function(e,t){return a(e,t).props.defaultChecked}):t[n](function(e,t){return o.selectedRowKeys.indexOf(s(e,t))>=0}))},setCheckState:function(e){var t=Ne(e),n=Re(e);this.setState(function(e){var r={};return n!==e.indeterminate&&(r.indeterminate=n),t!==e.checked&&(r.checked=t),r})},handleSelectAllChange:function(e){var t=e.target.checked;this.$emit("select",t?"all":"removeAll",0,null)},renderMenus:function(e){var t=this,n=this.$createElement;return e.map(function(e,r){return n(Ie.Ay.Item,{key:e.key||r},[n("div",{on:{click:function(){t.$emit("select",e.key,r,e.onSelect)}}},[e.text])])})}},render:function(){var e=arguments[0],t=this.disabled,n=this.prefixCls,r=this.selections,i=this.getPopupContainer,a=this.checked,s=this.indeterminate,c=n+"-selection",l=null;if(r){var u=Array.isArray(r)?this.defaultSelections.concat(r):this.defaultSelections,d=e(Ie.Ay,{class:c+"-menu",attrs:{selectedKeys:[]}},[this.renderMenus(u)]);l=u.length>0?e(pe.Ay,{attrs:{getPopupContainer:i}},[e("template",{slot:"overlay"},[d]),e("div",{class:c+"-down"},[e(me.A,{attrs:{type:"down"}})])]):null}return e("div",{class:c},[e(ve.A,{class:x()((0,o.A)({},c+"-select-all-custom",l)),attrs:{checked:a,indeterminate:s,disabled:t},on:{change:this.handleSelectAllChange}}),l])}},Be={name:"ATableColumn",props:xe},Ke={name:"ATableColumnGroup",props:{fixed:k.A.oneOfType([k.A.bool,k.A.oneOf(["left","right"])]),title:k.A.any},__ANT_TABLE_COLUMN_GROUP:!0},Ue={store:k.A.any,rowKey:k.A.oneOfType([k.A.string,k.A.number]),prefixCls:k.A.string};function qe(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"tr",t={name:"BodyRow",props:Ue,computed:{selected:function(){return this.$props.store.selectedRowKeys.indexOf(this.$props.rowKey)>=0}},render:function(){var t=arguments[0],n=(0,o.A)({},this.prefixCls+"-row-selected",this.selected);return t(e,v()([{class:n},{on:(0,D.WM)(this)}]),[this.$slots["default"]])}};return t}var Ge=n(25592),Je=n(64168),Xe=n(82840),Ze=n(38377),Qe=n(77749),et=n(93146),tt=n.n(et);function nt(e,t){if("undefined"===typeof window)return 0;var n=t?"pageYOffset":"pageXOffset",r=t?"scrollTop":"scrollLeft",i=e===window,o=i?e[n]:e[r];return i&&"number"!==typeof o&&(o=window.document.documentElement[r]),o}function rt(e,t,n,r){var i=n-t;return e/=r/2,e<1?i/2*e*e*e+t:i/2*((e-=2)*e*e+2)+t}function it(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.getContainer,r=void 0===n?function(){return window}:n,i=t.callback,o=t.duration,a=void 0===o?450:o,s=r(),c=nt(s,!0),l=Date.now(),u=function t(){var n=Date.now(),r=n-l,o=rt(r>a?a:r,c,e,a);s===window?window.scrollTo(window.pageXOffset,o):s.scrollTop=o,r0&&void 0!==arguments[0]?arguments[0]:{},t=e&&e.body&&e.body.row;return(0,r.A)({},e,{body:(0,r.A)({},e.body,{row:qe(t)})})};function pt(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e===t||["table","header","body"].every(function(n){return y()(e[n],t[n])})}function mt(e,t){return Ve(t||(e||{}).columns||[],function(e){return"undefined"!==typeof e.filteredValue})}function vt(e,t){var n={};return mt(e,t).forEach(function(e){var t=lt(e);n[t]=e.filteredValue}),n}function gt(e,t){return Object.keys(t).length!==Object.keys(e.filters).length||Object.keys(t).some(function(n){return t[n]!==e.filters[n]})}var yt={name:"Table",Column:Be,ColumnGroup:Ke,mixins:[R.A],inject:{configProvider:{default:function(){return Ge.f}}},provide:function(){return{store:this.store}},props:(0,D.CB)(Se,{dataSource:[],useFixedHeader:!1,size:"default",loading:!1,bordered:!1,indentSize:20,locale:{},rowKey:"key",showHeader:!0,sortDirections:["ascend","descend"],childrenColumnName:"children"}),data:function(){var e=(0,D.Oq)(this);return(0,L.A)(!e.expandedRowRender||!("scroll"in e)||!e.scroll.x,"`expandedRowRender` and `scroll` are not compatible. Please use one of them at one time."),this.CheckboxPropsCache={},this.store=(this.$root.constructor.observable||re.Ay.observable)({selectedRowKeys:ct(this.$props).selectedRowKeys||[],selectionDirty:!1}),(0,r.A)({},this.getDefaultSortOrder(e.columns||[]),{sFilters:this.getDefaultFilters(e.columns),sPagination:this.getDefaultPagination(this.$props),pivot:void 0,sComponents:ft(this.components),filterDataCnt:0})},watch:{pagination:{handler:function(e){this.setState(function(t){var n=(0,r.A)({},dt,t.sPagination,e);return n.current=n.current||1,n.pageSize=n.pageSize||10,{sPagination:!1!==e?n:ht}})},deep:!0},rowSelection:{handler:function(e,t){if(e&&"selectedRowKeys"in e){this.store.selectedRowKeys=e.selectedRowKeys||[];var n=this.rowSelection;n&&e.getCheckboxProps!==n.getCheckboxProps&&(this.CheckboxPropsCache={})}else t&&!e&&(this.store.selectedRowKeys=[])},deep:!0},dataSource:function(){this.store.selectionDirty=!1,this.CheckboxPropsCache={}},columns:function(e){var t=mt({columns:e},e);if(t.length>0){var n=vt({columns:e},e),i=(0,r.A)({},this.sFilters);Object.keys(n).forEach(function(e){i[e]=n[e]}),gt({filters:this.sFilters},i)&&this.setState({sFilters:i})}this.$forceUpdate()},components:{handler:function(e,t){if(!pt(e,t)){var n=ft(e);this.setState({sComponents:n})}},deep:!0}},updated:function(){var e=this.columns,t=this.sSortColumn,n=this.sSortOrder;if(this.getSortOrderColumns(e).length>0){var r=this.getSortStateFromColumns(e);ut(r.sSortColumn,t)&&r.sSortOrder===n||this.setState(r)}},methods:{getCheckboxPropsByItem:function(e,t){var n=ct(this.$props);if(!n.getCheckboxProps)return{props:{}};var r=this.getRecordKey(e,t);return this.CheckboxPropsCache[r]||(this.CheckboxPropsCache[r]=n.getCheckboxProps(e)),this.CheckboxPropsCache[r].props=this.CheckboxPropsCache[r].props||{},this.CheckboxPropsCache[r]},getDefaultSelection:function(){var e=this,t=ct(this.$props);return t.getCheckboxProps?this.getFlatData().filter(function(t,n){return e.getCheckboxPropsByItem(t,n).props.defaultChecked}).map(function(t,n){return e.getRecordKey(t,n)}):[]},getDefaultPagination:function(e){var t="object"===(0,s.A)(e.pagination)?e.pagination:{},n=void 0;"current"in t?n=t.current:"defaultCurrent"in t&&(n=t.defaultCurrent);var i=void 0;return"pageSize"in t?i=t.pageSize:"defaultPageSize"in t&&(i=t.defaultPageSize),this.hasPagination(e)?(0,r.A)({},dt,t,{current:n||1,pageSize:i||10}):{}},getSortOrderColumns:function(e){return Ve(e||this.columns||[],function(e){return"sortOrder"in e})},getDefaultFilters:function(e){var t=vt({columns:this.columns},e),n=Ve(e||[],function(e){return"undefined"!==typeof e.defaultFilteredValue}),i=n.reduce(function(e,t){var n=lt(t);return e[n]=t.defaultFilteredValue,e},{});return(0,r.A)({},i,t)},getDefaultSortOrder:function(e){var t=this.getSortStateFromColumns(e),n=Ve(e||[],function(e){return null!=e.defaultSortOrder})[0];return n&&!t.sortColumn?{sSortColumn:n,sSortOrder:n.defaultSortOrder}:t},getSortStateFromColumns:function(e){var t=this.getSortOrderColumns(e).filter(function(e){return e.sortOrder})[0];return t?{sSortColumn:t,sSortOrder:t.sortOrder}:{sSortColumn:null,sSortOrder:null}},getMaxCurrent:function(e){var t=this.sPagination,n=t.current,r=t.pageSize;return(n-1)*r>=e?Math.floor((e-1)/r)+1:n},getRecordKey:function(e,t){var n=this.rowKey,r="function"===typeof n?n(e,t):e[n];return(0,L.A)(void 0!==r,"Table","Each record in dataSource of table should have a unique `key` prop, or set `rowKey` of Table to an unique primary key, "),void 0===r?t:r},getSorterFn:function(e){var t=e||this.$data,n=t.sSortOrder,r=t.sSortColumn;if(n&&r&&"function"===typeof r.sorter)return function(e,t){var i=r.sorter(e,t,n);return 0!==i?"descend"===n?-i:i:0}},getCurrentPageData:function(){var e=this.getLocalData();this.filterDataCnt=e.length;var t=void 0,n=void 0,r=this.sPagination;return this.hasPagination()?(n=r.pageSize,t=this.getMaxCurrent(r.total||e.length)):(n=Number.MAX_VALUE,t=1),(e.length>n||n===Number.MAX_VALUE)&&(e=e.slice((t-1)*n,t*n)),e},getFlatData:function(){var e=this.$props.childrenColumnName;return De(this.getLocalData(null,!1),e)},getFlatCurrentPageData:function(){var e=this.$props.childrenColumnName;return De(this.getCurrentPageData(),e)},getLocalData:function(e){var t=this,n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],r=e||this.$data,i=r.sFilters,o=this.$props.dataSource,s=o||[];s=s.slice(0);var c=this.getSorterFn(r);return c&&(s=this.recursiveSort([].concat((0,a.A)(s)),c)),n&&i&&Object.keys(i).forEach(function(e){var n=t.findColumn(e);if(n){var r=i[e]||[];if(0!==r.length){var o=n.onFilter;s=o?s.filter(function(e){return r.some(function(t){return o(t,e)})}):s}}}),s},onRow:function(e,t,n){var r=this.customRow,i=r?r(t,n):{};return(0,D.v6)(i,{props:{prefixCls:e,store:this.store,rowKey:this.getRecordKey(t,n)}})},setSelectedRowKeys:function(e,t){var n=this,r=t.selectWay,i=t.record,o=t.checked,a=t.changeRowKeys,s=t.nativeEvent,c=ct(this.$props);c&&!("selectedRowKeys"in c)&&(this.store.selectedRowKeys=e);var l=this.getFlatData();if(c.onChange||c[r]){var u=l.filter(function(t,r){return e.indexOf(n.getRecordKey(t,r))>=0});if(c.onChange&&c.onChange(e,u),"onSelect"===r&&c.onSelect)c.onSelect(i,o,u,s);else if("onSelectMultiple"===r&&c.onSelectMultiple){var d=l.filter(function(e,t){return a.indexOf(n.getRecordKey(e,t))>=0});c.onSelectMultiple(o,u,d)}else if("onSelectAll"===r&&c.onSelectAll){var h=l.filter(function(e,t){return a.indexOf(n.getRecordKey(e,t))>=0});c.onSelectAll(o,u,h)}else"onSelectInvert"===r&&c.onSelectInvert&&c.onSelectInvert(e)}},generatePopupContainerFunc:function(e){var t=this.$props.scroll,n=this.$refs.vcTable;return e||(t&&n?function(){return n.getTableNode()}:void 0)},scrollToFirstRow:function(){var e=this,t=this.$props.scroll;t&&!1!==t.scrollToFirstRowOnChange&&it(0,{getContainer:function(){return e.$refs.vcTable.getBodyTable()}})},isSameColumn:function(e,t){return!!(e&&t&&e.key&&e.key===t.key)||(e===t||y()(e,t,function(e,t){if("function"===typeof e&&"function"===typeof t)return e===t||e.toString()===t.toString()}))},handleFilter:function(e,t){var n=this,i=this.$props,c=(0,r.A)({},this.sPagination),l=(0,r.A)({},this.sFilters,(0,o.A)({},lt(e),t)),u=[];Ye(this.columns,function(e){e.children||u.push(lt(e))}),Object.keys(l).forEach(function(e){u.indexOf(e)<0&&delete l[e]}),i.pagination&&(c.current=1,c.onChange(c.current));var d={sPagination:c,sFilters:{}},h=(0,r.A)({},l);mt({columns:i.columns}).forEach(function(e){var t=lt(e);t&&delete h[t]}),Object.keys(h).length>0&&(d.sFilters=h),"object"===(0,s.A)(i.pagination)&&"current"in i.pagination&&(d.sPagination=(0,r.A)({},c,{current:this.sPagination.current})),this.setState(d,function(){n.scrollToFirstRow(),n.store.selectionDirty=!1,n.$emit.apply(n,["change"].concat((0,a.A)(n.prepareParamsArguments((0,r.A)({},n.$data,{sSelectionDirty:!1,sFilters:l,sPagination:c})))))})},handleSelect:function(e,t,n){var r=this,i=n.target.checked,o=n.nativeEvent,a=this.store.selectionDirty?[]:this.getDefaultSelection(),s=this.store.selectedRowKeys.concat(a),c=this.getRecordKey(e,t),l=this.$data.pivot,u=this.getFlatCurrentPageData(),d=t;if(this.$props.expandedRowRender&&(d=u.findIndex(function(e){return r.getRecordKey(e,t)===c})),o.shiftKey&&void 0!==l&&d!==l){var h=[],f=Math.sign(l-d),p=Math.abs(l-d),m=0,v=function(){var e=d+m*f;m+=1;var t=u[e],n=r.getRecordKey(t,e),o=r.getCheckboxPropsByItem(t,e);o.disabled||(s.includes(n)?i||(s=s.filter(function(e){return n!==e}),h.push(n)):i&&(s.push(n),h.push(n)))};while(m<=p)v();this.setState({pivot:d}),this.store.selectionDirty=!0,this.setSelectedRowKeys(s,{selectWay:"onSelectMultiple",record:e,checked:i,changeRowKeys:h,nativeEvent:o})}else i?s.push(this.getRecordKey(e,d)):s=s.filter(function(e){return c!==e}),this.setState({pivot:d}),this.store.selectionDirty=!0,this.setSelectedRowKeys(s,{selectWay:"onSelect",record:e,checked:i,changeRowKeys:void 0,nativeEvent:o})},handleRadioSelect:function(e,t,n){var r=n.target.checked,i=n.nativeEvent,o=this.getRecordKey(e,t),a=[o];this.store.selectionDirty=!0,this.setSelectedRowKeys(a,{selectWay:"onSelect",record:e,checked:r,changeRowKeys:void 0,nativeEvent:i})},handleSelectRow:function(e,t,n){var r=this,i=this.getFlatCurrentPageData(),o=this.store.selectionDirty?[]:this.getDefaultSelection(),a=this.store.selectedRowKeys.concat(o),s=i.filter(function(e,t){return!r.getCheckboxPropsByItem(e,t).props.disabled}).map(function(e,t){return r.getRecordKey(e,t)}),c=[],l="onSelectAll",u=void 0;switch(e){case"all":s.forEach(function(e){a.indexOf(e)<0&&(a.push(e),c.push(e))}),l="onSelectAll",u=!0;break;case"removeAll":s.forEach(function(e){a.indexOf(e)>=0&&(a.splice(a.indexOf(e),1),c.push(e))}),l="onSelectAll",u=!1;break;case"invert":s.forEach(function(e){a.indexOf(e)<0?a.push(e):a.splice(a.indexOf(e),1),c.push(e),l="onSelectInvert"});break;default:break}this.store.selectionDirty=!0;var d=this.rowSelection,h=2;if(d&&d.hideDefaultSelections&&(h=0),t>=h&&"function"===typeof n)return n(s);this.setSelectedRowKeys(a,{selectWay:l,checked:u,changeRowKeys:c})},handlePageChange:function(e){var t=this.$props,n=(0,r.A)({},this.sPagination);n.current=e||(n.current||1);for(var i=arguments.length,o=Array(i>1?i-1:0),c=1;c0&&(s===t||"both"===s)?n(Je.Ay,h):null},renderSelectionBox:function(e){var t=this,n=this.$createElement;return function(r,i,o){var a=t.getRecordKey(i,o),s=t.getCheckboxPropsByItem(i,o),c=function(n){"radio"===e?t.handleRadioSelect(i,o,n):t.handleSelect(i,o,n)},l=(0,D.v6)({props:{type:e,store:t.store,rowIndex:a,defaultSelection:t.getDefaultSelection()},on:{change:c}},s);return n("span",{on:{click:st}},[n(Fe,l)])}},renderRowSelection:function(e){var t=this,n=e.prefixCls,r=e.locale,i=e.getPopupContainer,a=this.$createElement,s=this.rowSelection,c=this.columns.concat();if(s){var l=this.getFlatCurrentPageData().filter(function(e,n){return!s.getCheckboxProps||!t.getCheckboxPropsByItem(e,n).props.disabled}),u=x()(n+"-selection-column",(0,o.A)({},n+"-selection-column-custom",s.selections)),h=(0,o.A)({key:"selection-column",customRender:this.renderSelectionBox(s.type),className:u,fixed:s.fixed,width:s.columnWidth,title:s.columnTitle},d,{class:n+"-selection-col"});if("radio"!==s.type){var f=l.every(function(e,n){return t.getCheckboxPropsByItem(e,n).props.disabled});h.title=h.title||a(We,{attrs:{store:this.store,locale:r,data:l,getCheckboxPropsByItem:this.getCheckboxPropsByItem,getRecordKey:this.getRecordKey,disabled:f,prefixCls:n,selections:s.selections,hideDefaultSelections:s.hideDefaultSelections,getPopupContainer:this.generatePopupContainerFunc(i)},on:{select:this.handleSelectRow}})}"fixed"in s?h.fixed=s.fixed:c.some(function(e){return"left"===e.fixed||!0===e.fixed})&&(h.fixed="left"),c[0]&&"selection-column"===c[0].key?c[0]=h:c.unshift(h)}return c},renderColumnsDropdown:function(e){var t=this,n=e.prefixCls,i=e.dropdownPrefixCls,a=e.columns,s=e.locale,c=e.getPopupContainer,l=this.$createElement,u=this.sSortOrder,d=this.sFilters;return Ye(a,function(e,a){var h,f=lt(e,a),p=void 0,m=void 0,v=e.customHeaderCell,g=t.isSortColumn(e);if(e.filters&&e.filters.length>0||e.filterDropdown){var y=f in d?d[f]:[];p=l(je,{attrs:{_propsSymbol:Symbol(),locale:s,column:e,selectedKeys:y,confirmFilter:t.handleFilter,prefixCls:n+"-filter",dropdownPrefixCls:i||"ant-dropdown",getPopupContainer:t.generatePopupContainerFunc(c)},key:"filter-dropdown"})}if(e.sorter){var _=e.sortDirections||t.sortDirections,b=g&&"ascend"===u,M=g&&"descend"===u,A=-1!==_.indexOf("ascend")&&l(me.A,{class:n+"-column-sorter-up "+(b?"on":"off"),attrs:{type:"caret-up",theme:"filled"},key:"caret-up"}),w=-1!==_.indexOf("descend")&&l(me.A,{class:n+"-column-sorter-down "+(M?"on":"off"),attrs:{type:"caret-down",theme:"filled"},key:"caret-down"});m=l("div",{attrs:{title:s.sortTitle},class:x()(n+"-column-sorter-inner",A&&w&&n+"-column-sorter-inner-full"),key:"sorter"},[A,w]),v=function(n){var i={};e.customHeaderCell&&(i=(0,r.A)({},e.customHeaderCell(n))),i.on=i.on||{};var o=i.on.click;return i.on.click=function(){t.toggleSortOrder(e),o&&o.apply(void 0,arguments)},i}}return(0,r.A)({},e,{className:x()(e.className,(h={},(0,o.A)(h,n+"-column-has-actions",m||p),(0,o.A)(h,n+"-column-has-filters",p),(0,o.A)(h,n+"-column-has-sorters",m),(0,o.A)(h,n+"-column-sort",g&&u),h)),title:[l("span",{key:"title",class:n+"-header-column"},[l("div",{class:m?n+"-column-sorters":void 0},[l("span",{class:n+"-column-title"},[t.renderColumnTitle(e.title)]),l("span",{class:n+"-column-sorter"},[m])])]),p],customHeaderCell:v})})},renderColumnTitle:function(e){var t=this.$data,n=t.sFilters,r=t.sSortOrder,i=t.sSortColumn;return e instanceof Function?e({filters:n,sortOrder:r,sortColumn:i}):e},renderTable:function(e){var t,n=this,a=e.prefixCls,s=e.renderEmpty,c=e.dropdownPrefixCls,l=e.contextLocale,u=e.getPopupContainer,d=e.transformCellText,h=this.$createElement,f=(0,D.Oq)(this),p=f.showHeader,m=f.locale,v=f.getPopupContainer,g=f.expandIcon,y=(0,i.A)(f,["showHeader","locale","getPopupContainer","expandIcon"]),_=this.getCurrentPageData(),b=this.expandedRowRender&&!1!==this.expandIconAsCell,M=v||u,A=(0,r.A)({},l,m);m&&m.emptyText||(A.emptyText=s(h,"Table"));var w=x()((t={},(0,o.A)(t,a+"-"+this.size,!0),(0,o.A)(t,a+"-bordered",this.bordered),(0,o.A)(t,a+"-empty",!_.length),(0,o.A)(t,a+"-without-column-header",!p),t)),k=this.renderRowSelection({prefixCls:a,locale:A,getPopupContainer:M}),L=this.renderColumnsDropdown({columns:k,prefixCls:a,dropdownPrefixCls:c,locale:A,getPopupContainer:M}).map(function(e,t){var n=(0,r.A)({},e);return n.key=lt(n,t),n}),C=L[0]&&"selection-column"===L[0].key?1:0;"expandIconColumnIndex"in y&&(C=y.expandIconColumnIndex);var S={key:"table",props:(0,r.A)({expandIcon:g||this.renderExpandIcon(a)},y,{customRow:function(e,t){return n.onRow(a,e,t)},components:this.sComponents,prefixCls:a,data:_,columns:L,showHeader:p,expandIconColumnIndex:C,expandIconAsCell:b,emptyText:A.emptyText,transformCellText:d}),on:(0,D.WM)(this),class:w,ref:"vcTable"};return h(ce,S)}},render:function(){var e=this,t=arguments[0],n=this.prefixCls,i=this.dropdownPrefixCls,o=this.transformCellText,a=this.getCurrentPageData(),s=this.configProvider,c=s.getPopupContainer,l=s.transformCellText,u=this.getPopupContainer||c,d=o||l,h=this.loading;h="boolean"===typeof h?{props:{spinning:h}}:{props:(0,r.A)({},h)};var f=this.configProvider.getPrefixCls,p=this.configProvider.renderEmpty,m=f("table",n),v=f("dropdown",i),g=t(Ze.A,{attrs:{componentName:"Table",defaultLocale:Qe.A.Table,children:function(t){return e.renderTable({prefixCls:m,renderEmpty:p,dropdownPrefixCls:v,contextLocale:t,getPopupContainer:u,transformCellText:d})}}}),y=this.hasPagination()&&a&&0!==a.length?m+"-with-pagination":m+"-without-pagination",_=(0,r.A)({},h,{class:h.props&&h.props.spinning?y+" "+m+"-spin-holder":""});return t("div",{class:x()(m+"-wrapper")},[t(Xe.A,_,[this.renderPagination(m,"top"),g,this.renderPagination(m,"bottom")])])}},_t=n(24415),bt=n(44807);re.Ay.use(_t.A,{name:"ant-ref"});var Mt={name:"ATable",Column:yt.Column,ColumnGroup:yt.ColumnGroup,props:yt.props,methods:{normalize:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=[];return t.forEach(function(t){if(t.tag){var o=(0,D.i7)(t),a=(0,D.gd)(t),s=(0,D.t0)(t),c=(0,D.Oq)(t),l=(0,D.kQ)(t),u={};Object.keys(l).forEach(function(e){var t=void 0;t=e.startsWith("update:")?"on-"+e.substr(7)+"-change":"on-"+e,u[(0,D.PT)(t)]=l[e]});var d=(0,D.Sk)(t),h=d["default"],f=(0,i.A)(d,["default"]),p=(0,r.A)({},f,c,{style:a,class:s},u);if(o&&(p.key=o),(0,D.xr)(t).__ANT_TABLE_COLUMN_GROUP)p.children=e.normalize("function"===typeof h?h():h);else{var m=t.data&&t.data.scopedSlots&&t.data.scopedSlots["default"];p.customRender=p.customRender||m}n.push(p)}}),n},updateColumns:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=[],o=this.$slots,a=this.$scopedSlots;return t.forEach(function(t){var s=t.slots,c=void 0===s?{}:s,l=t.scopedSlots,u=void 0===l?{}:l,d=(0,i.A)(t,["slots","scopedSlots"]),h=(0,r.A)({},d);Object.keys(c).forEach(function(e){var t=c[e];void 0===h[e]&&o[t]&&(h[e]=1===o[t].length?o[t][0]:o[t])}),Object.keys(u).forEach(function(e){var t=u[e];void 0===h[e]&&a[t]&&(h[e]=a[t])}),t.children&&(h.children=e.updateColumns(h.children)),n.push(h)}),n}},render:function(){var e=arguments[0],t=this.$slots,n=this.normalize,i=this.$scopedSlots,o=(0,D.Oq)(this),a=o.columns?this.updateColumns(o.columns):n(t["default"]),s=o.title,c=o.footer,l=i.title,u=i.footer,d=i.expandedRowRender,h=void 0===d?o.expandedRowRender:d,f=i.expandIcon;s=s||l,c=c||u;var p={props:(0,r.A)({},o,{columns:a,title:s,footer:c,expandedRowRender:h,expandIcon:this.$props.expandIcon||f}),on:(0,D.WM)(this)};return e(yt,p)},install:function(e){e.use(bt.A),e.component(Mt.name,Mt),e.component(Mt.Column.name,Mt.Column),e.component(Mt.ColumnGroup.name,Mt.ColumnGroup)}},At=Mt},28822:function(e,t,n){"use strict";n(29229),n(93693),n(29775),n(46925),n(63713),n(45562),n(25482)},14248:function(e,t,n){"use strict";n.d(t,{Ay:function(){return de}});var r=n(85505),i=n(24415),o=n(85471),a=n(75189),s=n.n(a),c=n(44508),l=n(97479),u=n(40255),d=n(4718),h=n(15848),f=n(11207),p={width:0,height:0,overflow:"hidden",position:"absolute"},m={name:"Sentinel",props:{setRef:d.A.func,prevElement:d.A.any,nextElement:d.A.any},methods:{onKeyDown:function(e){var t=e.target,n=e.which,r=e.shiftKey,i=this.$props,o=i.nextElement,a=i.prevElement;n===f.A.TAB&&document.activeElement===t&&(!r&&o&&o.focus(),r&&a&&a.focus())}},render:function(){var e=arguments[0],t=this.$props.setRef;return e("div",s()([{attrs:{tabIndex:0}},{directives:[{name:"ant-ref",value:t}]},{style:p,on:{keydown:this.onKeyDown},attrs:{role:"presentation"}}]),[this.$slots["default"]])}},v={name:"TabPane",props:{active:d.A.bool,destroyInactiveTabPane:d.A.bool,forceRender:d.A.bool,placeholder:d.A.any,rootPrefixCls:d.A.string,tab:d.A.any,closable:d.A.bool,disabled:d.A.bool},inject:{sentinelContext:{default:function(){return{}}}},render:function(){var e,t=arguments[0],n=this.$props,r=n.destroyInactiveTabPane,i=n.active,o=n.forceRender,a=n.rootPrefixCls,s=this.$slots["default"],l=(0,h.nu)(this,"placeholder");this._isActived=this._isActived||i;var u=a+"-tabpane",d=(e={},(0,c.A)(e,u,1),(0,c.A)(e,u+"-inactive",!i),(0,c.A)(e,u+"-active",i),e),f=r?i:this._isActived,p=f||o,v=this.sentinelContext,g=v.sentinelStart,y=v.sentinelEnd,_=v.setPanelSentinelStart,b=v.setPanelSentinelEnd,M=void 0,A=void 0;return i&&p&&(M=t(m,{attrs:{setRef:_,prevElement:g}}),A=t(m,{attrs:{setRef:b,nextElement:y}})),t("div",{class:d,attrs:{role:"tabpanel","aria-hidden":i?"false":"true"}},[M,p?s:l,A])}},g=n(90034),y=n(52315),_=n(93146),b=n.n(_),M={LEFT:37,UP:38,RIGHT:39,DOWN:40},A=n(51927),w=function(e){return void 0!==e&&null!==e&&""!==e},x=w;function k(e){var t=void 0,n=e.children;return n.forEach(function(e){!e||x(t)||e.disabled||(t=e.key)}),t}function L(e,t){var n=e.children,r=n.map(function(e){return e&&e.key});return r.indexOf(t)>=0}var C={name:"Tabs",mixins:[y.A],model:{prop:"activeKey",event:"change"},props:{destroyInactiveTabPane:d.A.bool,renderTabBar:d.A.func.isRequired,renderTabContent:d.A.func.isRequired,navWrapper:d.A.func.def(function(e){return e}),children:d.A.any.def([]),prefixCls:d.A.string.def("ant-tabs"),tabBarPosition:d.A.string.def("top"),activeKey:d.A.oneOfType([d.A.string,d.A.number]),defaultActiveKey:d.A.oneOfType([d.A.string,d.A.number]),__propsSymbol__:d.A.any,direction:d.A.string.def("ltr"),tabBarGutter:d.A.number},data:function(){var e=(0,h.Oq)(this),t=void 0;return t="activeKey"in e?e.activeKey:"defaultActiveKey"in e?e.defaultActiveKey:k(e),{_activeKey:t}},provide:function(){return{sentinelContext:this}},watch:{__propsSymbol__:function(){var e=(0,h.Oq)(this);"activeKey"in e?this.setState({_activeKey:e.activeKey}):L(e,this.$data._activeKey)||this.setState({_activeKey:k(e)})}},beforeDestroy:function(){this.destroy=!0,b().cancel(this.sentinelId)},methods:{onTabClick:function(e,t){this.tabBar.componentOptions&&this.tabBar.componentOptions.listeners&&this.tabBar.componentOptions.listeners.tabClick&&this.tabBar.componentOptions.listeners.tabClick(e,t),this.setActiveKey(e)},onNavKeyDown:function(e){var t=e.keyCode;if(t===M.RIGHT||t===M.DOWN){e.preventDefault();var n=this.getNextActiveKey(!0);this.onTabClick(n)}else if(t===M.LEFT||t===M.UP){e.preventDefault();var r=this.getNextActiveKey(!1);this.onTabClick(r)}},onScroll:function(e){var t=e.target,n=e.currentTarget;t===n&&t.scrollLeft>0&&(t.scrollLeft=0)},setSentinelStart:function(e){this.sentinelStart=e},setSentinelEnd:function(e){this.sentinelEnd=e},setPanelSentinelStart:function(e){e!==this.panelSentinelStart&&this.updateSentinelContext(),this.panelSentinelStart=e},setPanelSentinelEnd:function(e){e!==this.panelSentinelEnd&&this.updateSentinelContext(),this.panelSentinelEnd=e},setActiveKey:function(e){if(this.$data._activeKey!==e){var t=(0,h.Oq)(this);"activeKey"in t||this.setState({_activeKey:e}),this.__emit("change",e)}},getNextActiveKey:function(e){var t=this.$data._activeKey,n=[];this.$props.children.forEach(function(t){var r=(0,h.IV)(t,"disabled");t&&!r&&""!==r&&(e?n.push(t):n.unshift(t))});var r=n.length,i=r&&n[0].key;return n.forEach(function(e,o){e.key===t&&(i=o===r-1?n[0].key:n[o+1].key)}),i},updateSentinelContext:function(){var e=this;this.destroy||(b().cancel(this.sentinelId),this.sentinelId=b()(function(){e.destroy||e.$forceUpdate()}))}},render:function(){var e,t=arguments[0],n=this.$props,i=n.prefixCls,o=n.navWrapper,a=n.tabBarPosition,s=n.renderTabContent,l=n.renderTabBar,u=n.destroyInactiveTabPane,d=n.direction,f=n.tabBarGutter,p=(e={},(0,c.A)(e,i,1),(0,c.A)(e,i+"-"+a,1),(0,c.A)(e,i+"-rtl","rtl"===d),e);this.tabBar=l();var v=(0,A.Ob)(this.tabBar,{props:{prefixCls:i,navWrapper:o,tabBarPosition:a,panels:n.children,activeKey:this.$data._activeKey,direction:d,tabBarGutter:f},on:{keydown:this.onNavKeyDown,tabClick:this.onTabClick},key:"tabBar"}),y=(0,A.Ob)(s(),{props:{prefixCls:i,tabBarPosition:a,activeKey:this.$data._activeKey,destroyInactiveTabPane:u,direction:d},on:{change:this.setActiveKey},children:n.children,key:"tabContent"}),_=t(m,{key:"sentinelStart",attrs:{setRef:this.setSentinelStart,nextElement:this.panelSentinelStart}}),b=t(m,{key:"sentinelEnd",attrs:{setRef:this.setSentinelEnd,prevElement:this.panelSentinelEnd}}),M=[];"bottom"===a?M.push(_,y,b,v):M.push(v,_,y,b);var w=(0,r.A)({},(0,g.A)((0,h.WM)(this),["change"]),{scroll:this.onScroll});return t("div",{on:w,class:p},[M])}};o.Ay.use(i.A,{name:"ant-ref"});var S=C;function z(e){var t=[];return e.forEach(function(e){e.data&&t.push(e)}),t}function T(e,t){for(var n=z(e),r=0;r2&&void 0!==arguments[2]?arguments[2]:"ltr",r=Y(t)?"translateY":"translateX";return Y(t)||"rtl"!==n?r+"("+100*-e+"%) translateZ(0)":r+"("+100*e+"%) translateZ(0)"}function P(e,t){var n=Y(t)?"marginTop":"marginLeft";return(0,c.A)({},n,100*-e+"%")}function E(e,t){return+window.getComputedStyle(e).getPropertyValue(t).replace("px","")}function j(e,t){return+e.getPropertyValue(t).replace("px","")}function F(e,t,n,r,i){var o=E(i,"padding-"+e);if(!r||!r.parentNode)return o;var a=r.parentNode.childNodes;return Array.prototype.some.call(a,function(i){var a=window.getComputedStyle(i);return i!==r?(o+=j(a,"margin-"+e),o+=i[t],o+=j(a,"margin-"+n),"content-box"===a.boxSizing&&(o+=j(a,"border-"+e+"-width")+j(a,"border-"+n+"-width")),!1):(o+=j(a,"margin-"+e),!0)}),o}function I(e,t){return F("left","offsetWidth","right",e,t)}function $(e,t){return F("top","offsetHeight","bottom",e,t)}var R={name:"TabContent",props:{animated:{type:Boolean,default:!0},animatedWithMargin:{type:Boolean,default:!0},prefixCls:{default:"ant-tabs",type:String},activeKey:d.A.oneOfType([d.A.string,d.A.number]),tabBarPosition:String,direction:d.A.string,destroyInactiveTabPane:d.A.bool},computed:{classes:function(){var e,t=this.animated,n=this.prefixCls;return e={},(0,c.A)(e,n+"-content",!0),(0,c.A)(e,t?n+"-content-animated":n+"-content-no-animated",!0),e}},methods:{getTabPanes:function(){var e=this.$props,t=e.activeKey,n=this.$slots["default"]||[],r=[];return n.forEach(function(n){if(n){var i=n.key,o=t===i;r.push((0,A.Ob)(n,{props:{active:o,destroyInactiveTabPane:e.destroyInactiveTabPane,rootPrefixCls:e.prefixCls}}))}}),r}},render:function(){var e=arguments[0],t=this.activeKey,n=this.tabBarPosition,r=this.animated,i=this.animatedWithMargin,o=this.direction,a=this.classes,s={};if(r&&this.$slots["default"]){var c=T(this.$slots["default"],t);if(-1!==c){var l=i?P(c,n):D(V(c,n,o));s=l}else s={display:"none"}}return e("div",{class:a,style:s},[this.getTabPanes()])}},N=function(e){if("undefined"!==typeof window&&window.document&&window.document.documentElement){var t=Array.isArray(e)?e:[e],n=window.document.documentElement;return t.some(function(e){return e in n.style})}return!1},W=N(["flex","webkitFlex","Flex","msFlex"]),B=n(25592);function K(e,t){var n=e.$props,r=n.styles,i=void 0===r?{}:r,o=n.panels,a=n.activeKey,s=n.direction,c=e.getRef("root"),l=e.getRef("nav")||c,u=e.getRef("inkBar"),d=e.getRef("activeTab"),h=u.style,f=e.$props.tabBarPosition,p=T(o,a);if(t&&(h.display="none"),d){var m=d,v=H(h);if(O(h,""),h.width="",h.height="",h.left="",h.top="",h.bottom="",h.right="","top"===f||"bottom"===f){var g=I(m,l),y=m.offsetWidth;y===c.offsetWidth?y=0:i.inkBar&&void 0!==i.inkBar.width&&(y=parseFloat(i.inkBar.width,10),y&&(g+=(m.offsetWidth-y)/2)),"rtl"===s&&(g=E(m,"margin-left")-g),v?O(h,"translate3d("+g+"px,0,0)"):h.left=g+"px",h.width=y+"px"}else{var _=$(m,l,!0),b=m.offsetHeight;i.inkBar&&void 0!==i.inkBar.height&&(b=parseFloat(i.inkBar.height,10),b&&(_+=(m.offsetHeight-b)/2)),v?(O(h,"translate3d(0,"+_+"px,0)"),h.top="0"):h.top=_+"px",h.height=b+"px"}}h.display=-1!==p?"block":"none"}var U={name:"InkTabBarNode",mixins:[y.A],props:{inkBarAnimated:{type:Boolean,default:!0},direction:d.A.string,prefixCls:String,styles:Object,tabBarPosition:String,saveRef:d.A.func.def(function(){}),getRef:d.A.func.def(function(){}),panels:d.A.array,activeKey:d.A.oneOfType([d.A.string,d.A.number])},updated:function(){this.$nextTick(function(){K(this)})},mounted:function(){this.$nextTick(function(){K(this,!0)})},render:function(){var e,t=arguments[0],n=this.prefixCls,r=this.styles,i=void 0===r?{}:r,o=this.inkBarAnimated,a=n+"-ink-bar",l=(e={},(0,c.A)(e,a,!0),(0,c.A)(e,o?a+"-animated":a+"-no-animated",!0),e);return t("div",s()([{style:i.inkBar,class:l,key:"inkBar"},{directives:[{name:"ant-ref",value:this.saveRef("inkBar")}]}]))}},q=n(9771),G=n.n(q);function J(){}var X={name:"TabBarTabsNode",mixins:[y.A],props:{activeKey:d.A.oneOfType([d.A.string,d.A.number]),panels:d.A.any.def([]),prefixCls:d.A.string.def(""),tabBarGutter:d.A.any.def(null),onTabClick:d.A.func,saveRef:d.A.func.def(J),getRef:d.A.func.def(J),renderTabBarNode:d.A.func,tabBarPosition:d.A.string,direction:d.A.string},render:function(){var e=this,t=arguments[0],n=this.$props,r=n.panels,i=n.activeKey,o=n.prefixCls,a=n.tabBarGutter,l=n.saveRef,u=n.tabBarPosition,d=n.direction,f=[],p=this.renderTabBarNode||this.$scopedSlots.renderTabBarNode;return r.forEach(function(n,m){if(n){var v=(0,h.Oq)(n),g=n.key,y=i===g?o+"-tab-active":"";y+=" "+o+"-tab";var _={on:{}},b=v.disabled||""===v.disabled;b?y+=" "+o+"-tab-disabled":_.on.click=function(){e.__emit("tabClick",g)};var M=[];i===g&&M.push({name:"ant-ref",value:l("activeTab")});var A=(0,h.nu)(n,"tab"),w=a&&m===r.length-1?0:a;w="number"===typeof w?w+"px":w;var x="rtl"===d?"marginLeft":"marginRight",k=(0,c.A)({},Y(u)?"marginBottom":x,w);G()(void 0!==A,"There must be `tab` property or slot on children of Tabs.");var L=t("div",s()([{attrs:{role:"tab","aria-disabled":b?"true":"false","aria-selected":i===g?"true":"false"}},_,{class:y,key:g,style:k},{directives:M}]),[A]);p&&(L=p(L)),f.push(L)}}),t("div",{directives:[{name:"ant-ref",value:this.saveRef("navTabsContainer")}]},[f])}};function Z(){}var Q={name:"TabBarRootNode",mixins:[y.A],props:{saveRef:d.A.func.def(Z),getRef:d.A.func.def(Z),prefixCls:d.A.string.def(""),tabBarPosition:d.A.string.def("top"),extraContent:d.A.any},methods:{onKeyDown:function(e){this.__emit("keydown",e)}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.onKeyDown,i=this.tabBarPosition,o=this.extraContent,a=(0,c.A)({},t+"-bar",!0),l="top"===i||"bottom"===i,u=l?{float:"right"}:{},d=this.$slots["default"],h=d;return o&&(h=[(0,A.Ob)(o,{key:"extra",style:(0,r.A)({},u)}),(0,A.Ob)(d,{key:"content"})],h=l?h:h.reverse()),e("div",s()([{attrs:{role:"tablist",tabIndex:"0"},class:a,on:{keydown:n}},{directives:[{name:"ant-ref",value:this.saveRef("root")}]}]),[h])}},ee=n(38221),te=n.n(ee),ne=n(43591);function re(){}var ie={name:"ScrollableTabBarNode",mixins:[y.A],props:{activeKey:d.A.any,getRef:d.A.func.def(function(){}),saveRef:d.A.func.def(function(){}),tabBarPosition:d.A.oneOf(["left","right","top","bottom"]).def("left"),prefixCls:d.A.string.def(""),scrollAnimated:d.A.bool.def(!0),navWrapper:d.A.func.def(function(e){return e}),prevIcon:d.A.any,nextIcon:d.A.any,direction:d.A.string},data:function(){return this.offset=0,this.prevProps=(0,r.A)({},this.$props),{next:!1,prev:!1}},watch:{tabBarPosition:function(){var e=this;this.tabBarPositionChange=!0,this.$nextTick(function(){e.setOffset(0)})}},mounted:function(){var e=this;this.$nextTick(function(){e.updatedCal(),e.debouncedResize=te()(function(){e.setNextPrev(),e.scrollToActiveTab()},200),e.resizeObserver=new ne.A(e.debouncedResize),e.resizeObserver.observe(e.$props.getRef("container"))})},updated:function(){var e=this;this.$nextTick(function(){e.updatedCal(e.prevProps),e.prevProps=(0,r.A)({},e.$props)})},beforeDestroy:function(){this.resizeObserver&&this.resizeObserver.disconnect(),this.debouncedResize&&this.debouncedResize.cancel&&this.debouncedResize.cancel()},methods:{updatedCal:function(e){var t=this,n=this.$props;e&&e.tabBarPosition!==n.tabBarPosition?this.setOffset(0):this.isNextPrevShown(this.$data)!==this.isNextPrevShown(this.setNextPrev())?(this.$forceUpdate(),this.$nextTick(function(){t.scrollToActiveTab()})):e&&n.activeKey===e.activeKey||this.scrollToActiveTab()},setNextPrev:function(){var e=this.$props.getRef("nav"),t=this.$props.getRef("navTabsContainer"),n=this.getScrollWH(t||e),r=this.getOffsetWH(this.$props.getRef("container"))+1,i=this.getOffsetWH(this.$props.getRef("navWrap")),o=this.offset,a=r-n,s=this.next,c=this.prev;if(a>=0)s=!1,this.setOffset(0,!1),o=0;else if(a1&&void 0!==arguments[1])||arguments[1],n=Math.min(0,e);if(this.offset!==n){this.offset=n;var r={},i=this.$props.tabBarPosition,o=this.$props.getRef("nav").style,a=H(o);"left"===i||"right"===i?r=a?{value:"translate3d(0,"+n+"px,0)"}:{name:"top",value:n+"px"}:a?("rtl"===this.$props.direction&&(n=-n),r={value:"translate3d("+n+"px,0,0)"}):r={name:"left",value:n+"px"},a?O(o,r.value):o[r.name]=r.value,t&&this.setNextPrev()}},setPrev:function(e){this.prev!==e&&(this.prev=e)},setNext:function(e){this.next!==e&&(this.next=e)},isNextPrevShown:function(e){return e?e.next||e.prev:this.next||this.prev},prevTransitionEnd:function(e){if("opacity"===e.propertyName){var t=this.$props.getRef("container");this.scrollToActiveTab({target:t,currentTarget:t})}},scrollToActiveTab:function(e){var t=this.$props.getRef("activeTab"),n=this.$props.getRef("navWrap");if((!e||e.target===e.currentTarget)&&t){var r=this.isNextPrevShown()&&this.lastNextPrevShown;if(this.lastNextPrevShown=this.isNextPrevShown(),r){var i=this.getScrollWH(t),o=this.getOffsetWH(n),a=this.offset,s=this.getOffsetLT(n),c=this.getOffsetLT(t);s>c?(a+=s-c,this.setOffset(a)):s+o=0),e),L={props:(0,r.A)({},this.$props,this.$attrs,{inkBarAnimated:y,extraContent:d,prevIcon:w,nextIcon:x}),style:i,on:(0,h.WM)(this),class:k},C=void 0;return s?(C=s(L,ae),(0,A.Ob)(C,L)):t(ae,L)}},ce=se,le={TabPane:v,name:"ATabs",model:{prop:"activeKey",event:"change"},props:{prefixCls:d.A.string,activeKey:d.A.oneOfType([d.A.string,d.A.number]),defaultActiveKey:d.A.oneOfType([d.A.string,d.A.number]),hideAdd:d.A.bool.def(!1),tabBarStyle:d.A.object,tabBarExtraContent:d.A.any,destroyInactiveTabPane:d.A.bool.def(!1),type:d.A.oneOf(["line","card","editable-card"]),tabPosition:d.A.oneOf(["top","right","bottom","left"]).def("top"),size:d.A.oneOf(["default","small","large"]),animated:d.A.oneOfType([d.A.bool,d.A.object]),tabBarGutter:d.A.number,renderTabBar:d.A.func},inject:{configProvider:{default:function(){return B.f}}},mounted:function(){var e=" no-flex",t=this.$el;t&&!W&&-1===t.className.indexOf(e)&&(t.className+=e)},methods:{removeTab:function(e,t){t.stopPropagation(),x(e)&&this.$emit("edit",e,"remove")},handleChange:function(e){this.$emit("change",e)},createNewTab:function(e){this.$emit("edit",e,"add")},onTabClick:function(e){this.$emit("tabClick",e)},onPrevClick:function(e){this.$emit("prevClick",e)},onNextClick:function(e){this.$emit("nextClick",e)}},render:function(){var e,t,n=this,i=arguments[0],o=(0,h.Oq)(this),a=o.prefixCls,d=o.size,f=o.type,p=void 0===f?"line":f,m=o.tabPosition,v=o.animated,g=void 0===v||v,y=o.hideAdd,_=o.renderTabBar,b=this.configProvider.getPrefixCls,M=b("tabs",a),w=(0,h.Gk)(this.$slots["default"]),x=(0,h.nu)(this,"tabBarExtraContent"),k="object"===("undefined"===typeof g?"undefined":(0,l.A)(g))?g.tabPane:g;"line"!==p&&(k="animated"in o&&k);var L=(e={},(0,c.A)(e,M+"-vertical","left"===m||"right"===m),(0,c.A)(e,M+"-"+d,!!d),(0,c.A)(e,M+"-card",p.indexOf("card")>=0),(0,c.A)(e,M+"-"+p,!0),(0,c.A)(e,M+"-no-animation",!k),e),C=[];"editable-card"===p&&(C=[],w.forEach(function(e,t){var r=(0,h.Oq)(e),o=r.closable;o="undefined"===typeof o||o;var a=o?i(u.A,{attrs:{type:"close"},class:M+"-close-x",on:{click:function(t){return n.removeTab(e.key,t)}}}):null;C.push((0,A.Ob)(e,{props:{tab:i("div",{class:o?void 0:M+"-tab-unclosable"},[(0,h.nu)(e,"tab"),a])},key:e.key||t}))}),y||(x=i("span",[i(u.A,{attrs:{type:"plus"},class:M+"-new-tab",on:{click:this.createNewTab}}),x]))),x=x?i("div",{class:M+"-extra-content"},[x]):null;var z=_||this.$scopedSlots.renderTabBar,T=(0,h.WM)(this),O={props:(0,r.A)({},this.$props,{prefixCls:M,tabBarExtraContent:x,renderTabBar:z}),on:T},H=(t={},(0,c.A)(t,M+"-"+m+"-content",!0),(0,c.A)(t,M+"-card-content",p.indexOf("card")>=0),t),D={props:(0,r.A)({},(0,h.Oq)(this),{prefixCls:M,tabBarPosition:m,renderTabBar:function(){return i(ce,s()([{key:"tabBar"},O]))},renderTabContent:function(){return i(R,{class:H,attrs:{animated:k,animatedWithMargin:!0}})},children:C.length>0?C:w,__propsSymbol__:Symbol()}),on:(0,r.A)({},T,{change:this.handleChange}),class:L};return i(S,D)}},ue=n(44807);le.TabPane=(0,r.A)({},v,{name:"ATabPane",__ANT_TAB_PANE:!0}),le.TabContent=(0,r.A)({},R,{name:"ATabContent"}),o.Ay.use(i.A,{name:"ant-ref"}),le.install=function(e){e.use(ue.A),e.component(le.name,le),e.component(le.TabPane.name,le.TabPane),e.component(le.TabContent.name,le.TabContent)};var de=le},14686:function(e,t,n){"use strict";n(29229)},87298:function(e,t,n){"use strict";n.d(t,{A:function(){return b}});var r=n(75189),i=n.n(r),o=n(44508),a=n(4718),s=n(40255),c=n(80178),l=n(90034),u=n(98416),d=n(15848),h=n(52315),f=n(25592),p=n(36873),m=["pink","red","yellow","orange","cyan","green","blue","purple","geekblue","magenta","volcano","gold","lime"],v=new RegExp("^("+m.join("|")+")(-inverse)?$"),g={name:"ATag",mixins:[h.A],model:{prop:"visible",event:"close.visible"},props:{prefixCls:a.A.string,color:a.A.string,closable:a.A.bool.def(!1),visible:a.A.bool,afterClose:a.A.func},inject:{configProvider:{default:function(){return f.f}}},data:function(){var e=!0,t=(0,d.Oq)(this);return"visible"in t&&(e=this.visible),(0,p.A)(!("afterClose"in t),"Tag","'afterClose' will be deprecated, please use 'close' event, we will remove this in the next version."),{_visible:e}},watch:{visible:function(e){this.setState({_visible:e})}},methods:{setVisible:function(e,t){this.$emit("close",t),this.$emit("close.visible",!1);var n=this.afterClose;n&&n(),t.defaultPrevented||(0,d.cK)(this,"visible")||this.setState({_visible:e})},handleIconClick:function(e){e.stopPropagation(),this.setVisible(!1,e)},isPresetColor:function(){var e=this.$props.color;return!!e&&v.test(e)},getTagStyle:function(){var e=this.$props.color,t=this.isPresetColor();return{backgroundColor:e&&!t?e:void 0}},getTagClassName:function(e){var t,n=this.$props.color,r=this.isPresetColor();return t={},(0,o.A)(t,e,!0),(0,o.A)(t,e+"-"+n,r),(0,o.A)(t,e+"-has-color",n&&!r),t},renderCloseIcon:function(){var e=this.$createElement,t=this.$props.closable;return t?e(s.A,{attrs:{type:"close"},on:{click:this.handleIconClick}}):null}},render:function(){var e=arguments[0],t=this.$props.prefixCls,n=this.configProvider.getPrefixCls,r=n("tag",t),o=this.$data._visible,a=e("span",i()([{directives:[{name:"show",value:o}]},{on:(0,l.A)((0,d.WM)(this),["close"])},{class:this.getTagClassName(r),style:this.getTagStyle()}]),[this.$slots["default"],this.renderCloseIcon()]),s=(0,c.A)(r+"-zoom",{appear:!1});return e(u.A,[e("transition",s,[a])])}},y={name:"ACheckableTag",model:{prop:"checked"},props:{prefixCls:a.A.string,checked:Boolean},inject:{configProvider:{default:function(){return f.f}}},computed:{classes:function(){var e,t=this.checked,n=this.prefixCls,r=this.configProvider.getPrefixCls,i=r("tag",n);return e={},(0,o.A)(e,""+i,!0),(0,o.A)(e,i+"-checkable",!0),(0,o.A)(e,i+"-checkable-checked",t),e}},methods:{handleClick:function(){var e=this.checked;this.$emit("input",!e),this.$emit("change",!e)}},render:function(){var e=arguments[0],t=this.classes,n=this.handleClick,r=this.$slots;return e("div",{class:t,on:{click:n}},[r["default"]])}},_=n(44807);g.CheckableTag=y,g.install=function(e){e.use(_.A),e.component(g.name,g),e.component(g.CheckableTag.name,g.CheckableTag)};var b=g},5554:function(e,t,n){"use strict";n(29229)},83766:function(e,t,n){"use strict";n.d(t,{Ay:function(){return H},PH:function(){return z}});var r=n(44508),i=n(85505),o=n(90034),a=n(95093),s=n.n(a),c=n(46942),l=n.n(c),u=n(4718),d=n(52315),h=n(15848),f=n(51927),p=n(47006),m=n(7772),v={adjustX:1,adjustY:1},g=[0,0],y={bottomLeft:{points:["tl","tl"],overflow:v,offset:[0,-3],targetOffset:g},bottomRight:{points:["tr","tr"],overflow:v,offset:[0,-3],targetOffset:g},topRight:{points:["br","br"],overflow:v,offset:[0,3],targetOffset:g},topLeft:{points:["bl","bl"],overflow:v,offset:[0,3],targetOffset:g}},_=y;function b(){}var M={name:"VcTimePicker",mixins:[d.A],props:(0,h.CB)({prefixCls:u.A.string,clearText:u.A.string,value:u.A.any,defaultOpenValue:{type:Object,default:function(){return s()()}},inputReadOnly:u.A.bool,disabled:u.A.bool,allowEmpty:u.A.bool,defaultValue:u.A.any,open:u.A.bool,defaultOpen:u.A.bool,align:u.A.object,placement:u.A.any,transitionName:u.A.string,getPopupContainer:u.A.func,placeholder:u.A.string,format:u.A.string,showHour:u.A.bool,showMinute:u.A.bool,showSecond:u.A.bool,popupClassName:u.A.string,popupStyle:u.A.object,disabledHours:u.A.func,disabledMinutes:u.A.func,disabledSeconds:u.A.func,hideDisabledOptions:u.A.bool,name:u.A.string,autoComplete:u.A.string,use12Hours:u.A.bool,hourStep:u.A.number,minuteStep:u.A.number,secondStep:u.A.number,focusOnOpen:u.A.bool,autoFocus:u.A.bool,id:u.A.string,inputIcon:u.A.any,clearIcon:u.A.any,addon:u.A.func},{clearText:"clear",prefixCls:"rc-time-picker",defaultOpen:!1,inputReadOnly:!1,popupClassName:"",popupStyle:{},align:{},allowEmpty:!0,showHour:!0,showMinute:!0,showSecond:!0,disabledHours:b,disabledMinutes:b,disabledSeconds:b,hideDisabledOptions:!1,placement:"bottomLeft",use12Hours:!1,focusOnOpen:!1}),data:function(){var e=this.defaultOpen,t=this.defaultValue,n=this.open,r=void 0===n?e:n,i=this.value,o=void 0===i?t:i;return{sOpen:r,sValue:o}},watch:{value:function(e){this.setState({sValue:e})},open:function(e){void 0!==e&&this.setState({sOpen:e})}},mounted:function(){var e=this;this.$nextTick(function(){e.autoFocus&&e.focus()})},methods:{onPanelChange:function(e){this.setValue(e)},onAmPmChange:function(e){this.__emit("amPmChange",e)},onClear:function(e){e.stopPropagation(),this.setValue(null),this.setOpen(!1)},onVisibleChange:function(e){this.setOpen(e)},onEsc:function(){this.setOpen(!1),this.focus()},onKeyDown:function(e){40===e.keyCode&&this.setOpen(!0)},onKeyDown2:function(e){this.__emit("keydown",e)},setValue:function(e){(0,h.cK)(this,"value")||this.setState({sValue:e}),this.__emit("change",e)},getFormat:function(){var e=this.format,t=this.showHour,n=this.showMinute,r=this.showSecond,i=this.use12Hours;if(e)return e;if(i){var o=[t?"h":"",n?"mm":"",r?"ss":""].filter(function(e){return!!e}).join(":");return o.concat(" a")}return[t?"HH":"",n?"mm":"",r?"ss":""].filter(function(e){return!!e}).join(":")},getPanelElement:function(){var e=this.$createElement,t=this.prefixCls,n=this.placeholder,r=this.disabledHours,i=this.addon,o=this.disabledMinutes,a=this.disabledSeconds,s=this.hideDisabledOptions,c=this.inputReadOnly,l=this.showHour,u=this.showMinute,d=this.showSecond,f=this.defaultOpenValue,p=this.clearText,v=this.use12Hours,g=this.focusOnOpen,y=this.onKeyDown2,_=this.hourStep,b=this.minuteStep,M=this.secondStep,A=this.sValue,w=(0,h.nu)(this,"clearIcon");return e(m.A,{attrs:{clearText:p,prefixCls:t+"-panel",value:A,inputReadOnly:c,defaultOpenValue:f,showHour:l,showMinute:u,showSecond:d,format:this.getFormat(),placeholder:n,disabledHours:r,disabledMinutes:o,disabledSeconds:a,hideDisabledOptions:s,use12Hours:v,hourStep:_,minuteStep:b,secondStep:M,focusOnOpen:g,clearIcon:w,addon:i},ref:"panel",on:{change:this.onPanelChange,amPmChange:this.onAmPmChange,esc:this.onEsc,keydown:y}})},getPopupClassName:function(){var e=this.showHour,t=this.showMinute,n=this.showSecond,i=this.use12Hours,o=this.prefixCls,a=this.popupClassName,s=0;return e&&(s+=1),t&&(s+=1),n&&(s+=1),i&&(s+=1),l()(a,(0,r.A)({},o+"-panel-narrow",(!e||!t||!n)&&!i),o+"-panel-column-"+s)},setOpen:function(e){this.sOpen!==e&&((0,h.cK)(this,"open")||this.setState({sOpen:e}),e?this.__emit("open",{open:e}):this.__emit("close",{open:e}))},focus:function(){this.$refs.picker.focus()},blur:function(){this.$refs.picker.blur()},onFocus:function(e){this.__emit("focus",e)},onBlur:function(e){this.__emit("blur",e)},renderClearButton:function(){var e=this,t=this.$createElement,n=this.sValue,r=this.$props,i=r.prefixCls,o=r.allowEmpty,a=r.clearText,s=r.disabled;if(!o||!n||s)return null;var c=(0,h.nu)(this,"clearIcon");if((0,h.zO)(c)){var l=(0,h.kQ)(c)||{},u=l.click;return(0,f.Ob)(c,{on:{click:function(){u&&u.apply(void 0,arguments),e.onClear.apply(e,arguments)}}})}return t("a",{attrs:{role:"button",title:a,tabIndex:0},class:i+"-clear",on:{click:this.onClear}},[c||t("i",{class:i+"-clear-icon"})])}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.placeholder,r=this.placement,i=this.align,o=this.id,a=this.disabled,s=this.transitionName,c=this.getPopupContainer,l=this.name,u=this.autoComplete,d=this.autoFocus,f=this.sOpen,m=this.sValue,v=this.onFocus,g=this.onBlur,y=this.popupStyle,b=this.getPopupClassName(),M=(0,h.nu)(this,"inputIcon");return e(p.A,{attrs:{prefixCls:t+"-panel",popupClassName:b,popupStyle:y,popupAlign:i,builtinPlacements:_,popupPlacement:r,action:a?[]:["click"],destroyPopupOnHide:!0,getPopupContainer:c,popupTransitionName:s,popupVisible:f},on:{popupVisibleChange:this.onVisibleChange}},[e("template",{slot:"popup"},[this.getPanelElement()]),e("span",{class:""+t},[e("input",{class:t+"-input",ref:"picker",attrs:{type:"text",placeholder:n,name:l,disabled:a,autoComplete:u,autoFocus:d,readOnly:!0,id:o},on:{keydown:this.onKeyDown,focus:v,blur:g},domProps:{value:m&&m.format(this.getFormat())||""}}),M||e("span",{class:t+"-icon"}),this.renderClearButton()])])}},A=n(38377),w=n(36873),x=n(40255),k=n(68265),L=n(25592),C=n(44807),S=n(6566);function z(e){return{showHour:e.indexOf("H")>-1||e.indexOf("h")>-1||e.indexOf("k")>-1,showMinute:e.indexOf("m")>-1,showSecond:e.indexOf("s")>-1}}var T=function(){return{size:u.A.oneOf(["large","default","small"]),value:S.nP,defaultValue:S.nP,open:u.A.bool,format:u.A.string,disabled:u.A.bool,placeholder:u.A.string,prefixCls:u.A.string,hideDisabledOptions:u.A.bool,disabledHours:u.A.func,disabledMinutes:u.A.func,disabledSeconds:u.A.func,getPopupContainer:u.A.func,use12Hours:u.A.bool,focusOnOpen:u.A.bool,hourStep:u.A.number,minuteStep:u.A.number,secondStep:u.A.number,allowEmpty:u.A.bool,allowClear:u.A.bool,inputReadOnly:u.A.bool,clearText:u.A.string,defaultOpenValue:u.A.object,popupClassName:u.A.string,popupStyle:u.A.object,suffixIcon:u.A.any,align:u.A.object,placement:u.A.any,transitionName:u.A.string,autoFocus:u.A.bool,addon:u.A.any,clearIcon:u.A.any,locale:u.A.object,valueFormat:u.A.string}},O={name:"ATimePicker",mixins:[d.A],props:(0,h.CB)(T(),{align:{offset:[0,-2]},disabled:!1,disabledHours:void 0,disabledMinutes:void 0,disabledSeconds:void 0,hideDisabledOptions:!1,placement:"bottomLeft",transitionName:"slide-up",focusOnOpen:!0,allowClear:!0}),model:{prop:"value",event:"change"},provide:function(){return{savePopupRef:this.savePopupRef}},inject:{configProvider:{default:function(){return L.f}}},data:function(){var e=this.value,t=this.defaultValue,n=this.valueFormat;return(0,S.n1)("TimePicker",t,"defaultValue",n),(0,S.n1)("TimePicker",e,"value",n),(0,w.A)(!(0,h.cK)(this,"allowEmpty"),"TimePicker","`allowEmpty` is deprecated. Please use `allowClear` instead."),{sValue:(0,S.pY)(e||t,n)}},watch:{value:function(e){(0,S.n1)("TimePicker",e,"value",this.valueFormat),this.setState({sValue:(0,S.pY)(e,this.valueFormat)})}},methods:{getDefaultFormat:function(){var e=this.format,t=this.use12Hours;return e||(t?"h:mm:ss a":"HH:mm:ss")},getAllowClear:function(){var e=this.$props,t=e.allowClear,n=e.allowEmpty;return(0,h.cK)(this,"allowClear")?t:n},getDefaultLocale:function(){var e=(0,i.A)({},k.A,this.$props.locale);return e},savePopupRef:function(e){this.popupRef=e},handleChange:function(e){(0,h.cK)(this,"value")||this.setState({sValue:e});var t=this.format,n=void 0===t?"HH:mm:ss":t;this.$emit("change",this.valueFormat?(0,S.pK)(e,this.valueFormat):e,e&&e.format(n)||"")},handleOpenClose:function(e){var t=e.open;this.$emit("openChange",t),this.$emit("update:open",t)},focus:function(){this.$refs.timePicker.focus()},blur:function(){this.$refs.timePicker.blur()},renderInputIcon:function(e){var t=this.$createElement,n=(0,h.nu)(this,"suffixIcon");n=Array.isArray(n)?n[0]:n;var r=n&&(0,h.zO)(n)&&(0,f.Ob)(n,{class:e+"-clock-icon"})||t(x.A,{attrs:{type:"clock-circle"},class:e+"-clock-icon"});return t("span",{class:e+"-icon"},[r])},renderClearIcon:function(e){var t=this.$createElement,n=(0,h.nu)(this,"clearIcon"),r=e+"-clear";return n&&(0,h.zO)(n)?(0,f.Ob)(n,{class:r}):t(x.A,{attrs:{type:"close-circle",theme:"filled"},class:r})},renderTimePicker:function(e){var t=this.$createElement,n=(0,h.Oq)(this);n=(0,o.A)(n,["defaultValue","suffixIcon","allowEmpty","allowClear"]);var a=n,s=a.prefixCls,c=a.getPopupContainer,l=a.placeholder,u=a.size,d=this.configProvider.getPrefixCls,f=d("time-picker",s),p=this.getDefaultFormat(),m=(0,r.A)({},f+"-"+u,!!u),v=(0,h.nu)(this,"addon",{},!1),g=function(e){return v?t("div",{class:f+"-panel-addon"},["function"===typeof v?v(e):v]):null},y=this.renderInputIcon(f),_=this.renderClearIcon(f),b=this.configProvider.getPopupContainer,A={props:(0,i.A)({},z(p),n,{allowEmpty:this.getAllowClear(),prefixCls:f,getPopupContainer:c||b,format:p,value:this.sValue,placeholder:void 0===l?e.placeholder:l,addon:g,inputIcon:y,clearIcon:_}),class:m,ref:"timePicker",on:(0,i.A)({},(0,h.WM)(this),{change:this.handleChange,open:this.handleOpenClose,close:this.handleOpenClose})};return t(M,A)}},render:function(){var e=arguments[0];return e(A.A,{attrs:{componentName:"TimePicker",defaultLocale:this.getDefaultLocale()},scopedSlots:{default:this.renderTimePicker}})},install:function(e){e.use(C.A),e.component(O.name,O)}},H=O},68265:function(e,t){"use strict";var n={placeholder:"Select time"};t.A=n},26904:function(e,t,n){"use strict";n(29229)},36278:function(e,t,n){"use strict";var r=n(4718),i=r.A.oneOf(["hover","focus","click","contextmenu"]);t.A=function(){return{trigger:r.A.oneOfType([i,r.A.arrayOf(i)]).def("hover"),visible:r.A.bool,defaultVisible:r.A.bool,placement:r.A.oneOf(["top","left","right","bottom","topLeft","topRight","bottomLeft","bottomRight","leftTop","leftBottom","rightTop","rightBottom"]).def("top"),transitionName:r.A.string.def("zoom-big-fast"),overlayStyle:r.A.object.def(function(){return{}}),overlayClassName:r.A.string,prefixCls:r.A.string,mouseEnterDelay:r.A.number.def(.1),mouseLeaveDelay:r.A.number.def(.1),getPopupContainer:r.A.func,arrowPointAtCenter:r.A.bool.def(!1),autoAdjustOverflow:r.A.oneOfType([r.A.bool,r.A.object]).def(!0),destroyTooltipOnHide:r.A.bool.def(!1),align:r.A.object.def(function(){return{}}),builtinPlacements:r.A.object}}},90500:function(e,t,n){"use strict";n.d(t,{A:function(){return S}});var r=n(44508),i=n(85505),o=n(51927),a=n(5748),s=n(4718),c=n(47006),l={adjustX:1,adjustY:1},u=[0,0],d={left:{points:["cr","cl"],overflow:l,offset:[-4,0],targetOffset:u},right:{points:["cl","cr"],overflow:l,offset:[4,0],targetOffset:u},top:{points:["bc","tc"],overflow:l,offset:[0,-4],targetOffset:u},bottom:{points:["tc","bc"],overflow:l,offset:[0,4],targetOffset:u},topLeft:{points:["bl","tl"],overflow:l,offset:[0,-4],targetOffset:u},leftTop:{points:["tr","tl"],overflow:l,offset:[-4,0],targetOffset:u},topRight:{points:["br","tr"],overflow:l,offset:[0,-4],targetOffset:u},rightTop:{points:["tl","tr"],overflow:l,offset:[4,0],targetOffset:u},bottomRight:{points:["tr","br"],overflow:l,offset:[0,4],targetOffset:u},rightBottom:{points:["bl","br"],overflow:l,offset:[4,0],targetOffset:u},bottomLeft:{points:["tl","bl"],overflow:l,offset:[0,4],targetOffset:u},leftBottom:{points:["br","bl"],overflow:l,offset:[-4,0],targetOffset:u}},h={props:{prefixCls:s.A.string,overlay:s.A.any,trigger:s.A.any},updated:function(){var e=this.trigger;e&&e.forcePopupAlign()},render:function(){var e=arguments[0],t=this.overlay,n=this.prefixCls;return e("div",{class:n+"-inner",attrs:{role:"tooltip"}},["function"===typeof t?t():t])}},f=n(15848);function p(){}var m={props:{trigger:s.A.any.def(["hover"]),defaultVisible:s.A.bool,visible:s.A.bool,placement:s.A.string.def("right"),transitionName:s.A.oneOfType([s.A.string,s.A.object]),animation:s.A.any,afterVisibleChange:s.A.func.def(function(){}),overlay:s.A.any,overlayStyle:s.A.object,overlayClassName:s.A.string,prefixCls:s.A.string.def("rc-tooltip"),mouseEnterDelay:s.A.number.def(0),mouseLeaveDelay:s.A.number.def(.1),getTooltipContainer:s.A.func,destroyTooltipOnHide:s.A.bool.def(!1),align:s.A.object.def(function(){return{}}),arrowContent:s.A.any.def(null),tipId:s.A.string,builtinPlacements:s.A.object},methods:{getPopupElement:function(){var e=this.$createElement,t=this.$props,n=t.prefixCls,r=t.tipId;return[e("div",{class:n+"-arrow",key:"arrow"},[(0,f.nu)(this,"arrowContent")]),e(h,{key:"content",attrs:{trigger:this.$refs.trigger,prefixCls:n,id:r,overlay:(0,f.nu)(this,"overlay")}})]},getPopupDomNode:function(){return this.$refs.trigger.getPopupDomNode()}},render:function(e){var t=(0,f.Oq)(this),n=t.overlayClassName,r=t.trigger,o=t.mouseEnterDelay,s=t.mouseLeaveDelay,l=t.overlayStyle,u=t.prefixCls,h=t.afterVisibleChange,m=t.transitionName,v=t.animation,g=t.placement,y=t.align,_=t.destroyTooltipOnHide,b=t.defaultVisible,M=t.getTooltipContainer,A=(0,a.A)(t,["overlayClassName","trigger","mouseEnterDelay","mouseLeaveDelay","overlayStyle","prefixCls","afterVisibleChange","transitionName","animation","placement","align","destroyTooltipOnHide","defaultVisible","getTooltipContainer"]),w=(0,i.A)({},A);(0,f.cK)(this,"visible")&&(w.popupVisible=this.$props.visible);var x=(0,f.WM)(this),k={props:(0,i.A)({popupClassName:n,prefixCls:u,action:r,builtinPlacements:d,popupPlacement:g,popupAlign:y,getPopupContainer:M,afterPopupVisibleChange:h,popupTransitionName:m,popupAnimation:v,defaultPopupVisible:b,destroyPopupOnHide:_,mouseLeaveDelay:s,popupStyle:l,mouseEnterDelay:o},w),on:(0,i.A)({},x,{popupVisibleChange:x.visibleChange||p,popupAlign:x.popupAlign||p}),ref:"trigger"};return e(c.A,k,[e("template",{slot:"popup"},[this.getPopupElement(e)]),this.$slots["default"]])}},v=m,g={adjustX:1,adjustY:1},y={adjustX:0,adjustY:0},_=[0,0];function b(e){return"boolean"===typeof e?e?g:y:(0,i.A)({},y,e)}function M(e){var t=e.arrowWidth,n=void 0===t?5:t,r=e.horizontalArrowShift,o=void 0===r?16:r,a=e.verticalArrowShift,s=void 0===a?12:a,c=e.autoAdjustOverflow,l=void 0===c||c,u={left:{points:["cr","cl"],offset:[-4,0]},right:{points:["cl","cr"],offset:[4,0]},top:{points:["bc","tc"],offset:[0,-4]},bottom:{points:["tc","bc"],offset:[0,4]},topLeft:{points:["bl","tc"],offset:[-(o+n),-4]},leftTop:{points:["tr","cl"],offset:[-4,-(s+n)]},topRight:{points:["br","tc"],offset:[o+n,-4]},rightTop:{points:["tl","cr"],offset:[4,-(s+n)]},bottomRight:{points:["tr","bc"],offset:[o+n,4]},rightBottom:{points:["bl","cr"],offset:[4,s+n]},bottomLeft:{points:["tl","bc"],offset:[-(o+n),4]},leftBottom:{points:["br","cl"],offset:[-4,s+n]}};return Object.keys(u).forEach(function(t){u[t]=e.arrowPointAtCenter?(0,i.A)({},u[t],{overflow:b(l),targetOffset:_}):(0,i.A)({},d[t],{overflow:b(l)}),u[t].ignoreShake=!0}),u}var A=n(25592),w=n(36278),x=function(e,t){var n={},r=(0,i.A)({},e);return t.forEach(function(t){e&&t in e&&(n[t]=e[t],delete r[t])}),{picked:n,omitted:r}},k=(0,w.A)(),L={name:"ATooltip",model:{prop:"visible",event:"visibleChange"},props:(0,i.A)({},k,{title:s.A.any}),inject:{configProvider:{default:function(){return A.f}}},data:function(){return{sVisible:!!this.$props.visible||!!this.$props.defaultVisible}},watch:{visible:function(e){this.sVisible=e}},methods:{onVisibleChange:function(e){(0,f.cK)(this,"visible")||(this.sVisible=!this.isNoTitle()&&e),this.isNoTitle()||this.$emit("visibleChange",e)},getPopupDomNode:function(){return this.$refs.tooltip.getPopupDomNode()},getPlacements:function(){var e=this.$props,t=e.builtinPlacements,n=e.arrowPointAtCenter,r=e.autoAdjustOverflow;return t||M({arrowPointAtCenter:n,verticalArrowShift:8,autoAdjustOverflow:r})},getDisabledCompatibleChildren:function(e){var t=this.$createElement,n=e.componentOptions&&e.componentOptions.Ctor.options||{};if((!0===n.__ANT_BUTTON||!0===n.__ANT_SWITCH||!0===n.__ANT_CHECKBOX)&&(e.componentOptions.propsData.disabled||""===e.componentOptions.propsData.disabled)||"button"===e.tag&&e.data&&e.data.attrs&&void 0!==e.data.attrs.disabled){var r=x((0,f.gd)(e),["position","left","right","top","bottom","float","display","zIndex"]),a=r.picked,s=r.omitted,c=(0,i.A)({display:"inline-block"},a,{cursor:"not-allowed",width:e.componentOptions.propsData.block?"100%":null}),l=(0,i.A)({},s,{pointerEvents:"none"}),u=(0,f.t0)(e),d=(0,o.Ob)(e,{style:l,class:null});return t("span",{style:c,class:u},[d])}return e},isNoTitle:function(){var e=(0,f.nu)(this,"title");return!e&&0!==e},getOverlay:function(){var e=(0,f.nu)(this,"title");return 0===e?e:e||""},onPopupAlign:function(e,t){var n=this.getPlacements(),r=Object.keys(n).filter(function(e){return n[e].points[0]===t.points[0]&&n[e].points[1]===t.points[1]})[0];if(r){var i=e.getBoundingClientRect(),o={top:"50%",left:"50%"};r.indexOf("top")>=0||r.indexOf("Bottom")>=0?o.top=i.height-t.offset[1]+"px":(r.indexOf("Top")>=0||r.indexOf("bottom")>=0)&&(o.top=-t.offset[1]+"px"),r.indexOf("left")>=0||r.indexOf("Right")>=0?o.left=i.width-t.offset[0]+"px":(r.indexOf("right")>=0||r.indexOf("Left")>=0)&&(o.left=-t.offset[0]+"px"),e.style.transformOrigin=o.left+" "+o.top}}},render:function(){var e=arguments[0],t=this.$props,n=this.$data,a=this.$slots,s=t.prefixCls,c=t.openClassName,l=t.getPopupContainer,u=this.configProvider.getPopupContainer,d=this.configProvider.getPrefixCls,h=d("tooltip",s),p=(a["default"]||[]).filter(function(e){return e.tag||""!==e.text.trim()});p=1===p.length?p[0]:p;var m=n.sVisible;if(!(0,f.cK)(this,"visible")&&this.isNoTitle()&&(m=!1),!p)return null;var g=this.getDisabledCompatibleChildren((0,f.zO)(p)?p:e("span",[p])),y=(0,r.A)({},c||h+"-open",!0),_={props:(0,i.A)({},t,{prefixCls:h,getTooltipContainer:l||u,builtinPlacements:this.getPlacements(),overlay:this.getOverlay(),visible:m}),ref:"tooltip",on:(0,i.A)({},(0,f.WM)(this),{visibleChange:this.onVisibleChange,popupAlign:this.onPopupAlign})};return e(v,_,[m?(0,o.Ob)(g,{class:y}):g])}},C=n(44807);L.install=function(e){e.use(C.A),e.component(L.name,L)};var S=L},42543:function(e,t,n){"use strict";n(29229)},27448:function(e,t,n){"use strict";n.d(t,{Ay:function(){return ve}});var r=n(75189),i=n.n(r),o=n(44508),a=n(85505),s=n(46942),c=n.n(s),l=n(50014),u=n.n(l),d=n(24713),h=n.n(d),f=n(44383),p=n.n(f),m=n(4718),v=n(15848),g=n(52315),y=n(6498),_=n.n(y);function b(e,t){var n="cannot "+e.method+" "+e.action+" "+t.status+"'",r=new Error(n);return r.status=t.status,r.method=e.method,r.url=e.action,r}function M(e){var t=e.responseText||e.response;if(!t)return t;try{return JSON.parse(t)}catch(n){return t}}function A(e){var t=new window.XMLHttpRequest;e.onProgress&&t.upload&&(t.upload.onprogress=function(t){t.total>0&&(t.percent=t.loaded/t.total*100),e.onProgress(t)});var n=new window.FormData;e.data&&Object.keys(e.data).forEach(function(t){var r=e.data[t];Array.isArray(r)?r.forEach(function(e){n.append(t+"[]",e)}):n.append(t,e.data[t])}),n.append(e.filename,e.file),t.onerror=function(t){e.onError(t)},t.onload=function(){if(t.status<200||t.status>=300)return e.onError(b(e,t),M(t));e.onSuccess(M(t),t)},t.open(e.method,e.action,!0),e.withCredentials&&"withCredentials"in t&&(t.withCredentials=!0);var r=e.headers||{};for(var i in null!==r["X-Requested-With"]&&t.setRequestHeader("X-Requested-With","XMLHttpRequest"),r)r.hasOwnProperty(i)&&null!==r[i]&&t.setRequestHeader(i,r[i]);return t.send(n),{abort:function(){t.abort()}}}var w=+new Date,x=0;function k(){return"vc-upload-"+w+"-"+ ++x}function L(e,t){return-1!==e.indexOf(t,e.length-t.length)}var C=function(e,t){if(e&&t){var n=Array.isArray(t)?t:t.split(","),r=e.name||"",i=e.type||"",o=i.replace(/\/.*$/,"");return n.some(function(e){var t=e.trim();return"."===t.charAt(0)?L(r.toLowerCase(),t.toLowerCase()):/\/\*$/.test(t)?o===t.replace(/\/.*$/,""):i===t})}return!0};function S(e,t){var n=e.createReader(),r=[];function i(){n.readEntries(function(e){var n=Array.prototype.slice.apply(e);r=r.concat(n);var o=!n.length;o?t(r):i()})}i()}var z=function(e,t,n){var r=function e(r,i){i=i||"",r.isFile?r.file(function(e){n(e)&&(r.fullPath&&!e.webkitRelativePath&&(Object.defineProperties(e,{webkitRelativePath:{writable:!0}}),e.webkitRelativePath=r.fullPath.replace(/^\//,""),Object.defineProperties(e,{webkitRelativePath:{writable:!1}})),t([e]))}):r.isDirectory&&S(r,function(t){t.forEach(function(t){e(t,""+i+r.name+"/")})})},i=!0,o=!1,a=void 0;try{for(var s,c=e[Symbol.iterator]();!(i=(s=c.next()).done);i=!0){var l=s.value;r(l.webkitGetAsEntry())}}catch(u){o=!0,a=u}finally{try{!i&&c["return"]&&c["return"]()}finally{if(o)throw a}}},T=z,O={componentTag:m.A.string,prefixCls:m.A.string,name:m.A.string,multiple:m.A.bool,directory:m.A.bool,disabled:m.A.bool,accept:m.A.string,data:m.A.oneOfType([m.A.object,m.A.func]),action:m.A.oneOfType([m.A.string,m.A.func]),headers:m.A.object,beforeUpload:m.A.func,customRequest:m.A.func,withCredentials:m.A.bool,openFileDialogOnClick:m.A.bool,transformFile:m.A.func,method:m.A.string},H={inheritAttrs:!1,name:"ajaxUploader",mixins:[g.A],props:O,data:function(){return this.reqs={},{uid:k()}},mounted:function(){this._isMounted=!0},beforeDestroy:function(){this._isMounted=!1,this.abort()},methods:{onChange:function(e){var t=e.target.files;this.uploadFiles(t),this.reset()},onClick:function(){var e=this.$refs.fileInputRef;e&&e.click()},onKeyDown:function(e){"Enter"===e.key&&this.onClick()},onFileDrop:function(e){var t=this,n=this.$props.multiple;if(e.preventDefault(),"dragover"!==e.type)if(this.directory)T(e.dataTransfer.items,this.uploadFiles,function(e){return C(e,t.accept)});else{var r=_()(Array.prototype.slice.call(e.dataTransfer.files),function(e){return C(e,t.accept)}),i=r[0],o=r[1];!1===n&&(i=i.slice(0,1)),this.uploadFiles(i),o.length&&this.$emit("reject",o)}},uploadFiles:function(e){var t=this,n=Array.prototype.slice.call(e);n.map(function(e){return e.uid=k(),e}).forEach(function(e){t.upload(e,n)})},upload:function(e,t){var n=this;if(!this.beforeUpload)return setTimeout(function(){return n.post(e)},0);var r=this.beforeUpload(e,t);r&&r.then?r.then(function(t){var r=Object.prototype.toString.call(t);return"[object File]"===r||"[object Blob]"===r?n.post(t):n.post(e)})["catch"](function(e){console&&console.log(e)}):!1!==r&&setTimeout(function(){return n.post(e)},0)},post:function(e){var t=this;if(this._isMounted){var n=this.$props,r=n.data,i=n.transformFile,o=void 0===i?function(e){return e}:i;new Promise(function(n){var r=t.action;if("function"===typeof r)return n(r(e));n(r)}).then(function(i){var a=e.uid,s=t.customRequest||A,c=Promise.resolve(o(e))["catch"](function(e){console.error(e)});c.then(function(o){"function"===typeof r&&(r=r(e));var c={action:i,filename:t.name,data:r,file:o,headers:t.headers,withCredentials:t.withCredentials,method:n.method||"post",onProgress:function(n){t.$emit("progress",n,e)},onSuccess:function(n,r){delete t.reqs[a],t.$emit("success",n,e,r)},onError:function(n,r){delete t.reqs[a],t.$emit("error",n,r,e)}};t.reqs[a]=s(c),t.$emit("start",e)})})}},reset:function(){this.setState({uid:k()})},abort:function(e){var t=this.reqs;if(e){var n=e;e&&e.uid&&(n=e.uid),t[n]&&t[n].abort&&t[n].abort(),delete t[n]}else Object.keys(t).forEach(function(e){t[e]&&t[e].abort&&t[e].abort(),delete t[e]})}},render:function(){var e,t=arguments[0],n=this.$props,r=this.$attrs,i=n.componentTag,s=n.prefixCls,l=n.disabled,u=n.multiple,d=n.accept,h=n.directory,f=n.openFileDialogOnClick,p=c()((e={},(0,o.A)(e,s,!0),(0,o.A)(e,s+"-disabled",l),e)),m=l?{}:{click:f?this.onClick:function(){},keydown:f?this.onKeyDown:function(){},drop:this.onFileDrop,dragover:this.onFileDrop},g={on:(0,a.A)({},(0,v.WM)(this),m),attrs:{role:"button",tabIndex:l?null:"0"},class:p};return t(i,g,[t("input",{attrs:{id:r.id,type:"file",accept:d,directory:h?"directory":null,webkitdirectory:h?"webkitdirectory":null,multiple:u},ref:"fileInputRef",on:{click:function(e){return e.stopPropagation()},change:this.onChange},key:this.uid,style:{display:"none"}}),this.$slots["default"]])}},D=H,Y=n(36873),V={position:"absolute",top:0,opacity:0,filter:"alpha(opacity=0)",left:0,zIndex:9999},P={mixins:[g.A],props:{componentTag:m.A.string,disabled:m.A.bool,prefixCls:m.A.string,accept:m.A.string,multiple:m.A.bool,data:m.A.oneOfType([m.A.object,m.A.func]),action:m.A.oneOfType([m.A.string,m.A.func]),name:m.A.string},data:function(){return this.file={},{uploading:!1}},methods:{onLoad:function(){if(this.uploading){var e=this.file,t=void 0;try{var n=this.getIframeDocument(),r=n.getElementsByTagName("script")[0];r&&r.parentNode===n.body&&n.body.removeChild(r),t=n.body.innerHTML,this.$emit("success",t,e)}catch(i){(0,Y.A)(!1,"cross domain error for Upload. Maybe server should return document.domain script. see Note from https://github.com/react-component/upload"),t="cross-domain",this.$emit("error",i,null,e)}this.endUpload()}},onChange:function(){var e=this,t=this.getFormInputNode(),n=this.file={uid:k(),name:t.value&&t.value.substring(t.value.lastIndexOf("\\")+1,t.value.length)};this.startUpload();var r=this.$props;if(!r.beforeUpload)return this.post(n);var i=r.beforeUpload(n);i&&i.then?i.then(function(){e.post(n)},function(){e.endUpload()}):!1!==i?this.post(n):this.endUpload()},getIframeNode:function(){return this.$refs.iframeRef},getIframeDocument:function(){return this.getIframeNode().contentDocument},getFormNode:function(){return this.getIframeDocument().getElementById("form")},getFormInputNode:function(){return this.getIframeDocument().getElementById("input")},getFormDataNode:function(){return this.getIframeDocument().getElementById("data")},getFileForMultiple:function(e){return this.multiple?[e]:e},getIframeHTML:function(e){var t="",n="";if(e){var r="script";t="<"+r+'>document.domain="'+e+'";",n=''}return'\n \n \n \n \n \n '+t+'\n \n \n
\n \n '+n+'\n \n
\n \n \n '},initIframeSrc:function(){this.domain&&(this.getIframeNode().src="javascript:void((function(){\n var d = document;\n d.open();\n d.domain='"+this.domain+"';\n d.write('');\n d.close();\n })())")},initIframe:function(){var e=this.getIframeNode(),t=e.contentWindow,n=void 0;this.domain=this.domain||"",this.initIframeSrc();try{n=t.document}catch(r){this.domain=document.domain,this.initIframeSrc(),t=e.contentWindow,n=t.document}n.open("text/html","replace"),n.write(this.getIframeHTML(this.domain)),n.close(),this.getFormInputNode().onchange=this.onChange},endUpload:function(){this.uploading&&(this.file={},this.uploading=!1,this.setState({uploading:!1}),this.initIframe())},startUpload:function(){this.uploading||(this.uploading=!0,this.setState({uploading:!0}))},updateIframeWH:function(){var e=this.$el,t=this.getIframeNode();t.style.height=e.offsetHeight+"px",t.style.width=e.offsetWidth+"px"},abort:function(e){if(e){var t=e;e&&e.uid&&(t=e.uid),t===this.file.uid&&this.endUpload()}else this.endUpload()},post:function(e){var t=this,n=this.getFormNode(),r=this.getFormDataNode(),i=this.$props.data;"function"===typeof i&&(i=i(e));var o=document.createDocumentFragment();for(var a in i)if(i.hasOwnProperty(a)){var s=document.createElement("input");s.setAttribute("name",a),s.value=i[a],o.appendChild(s)}r.appendChild(o),new Promise(function(n){var r=t.action;if("function"===typeof r)return n(r(e));n(r)}).then(function(i){n.setAttribute("action",i),n.submit(),r.innerHTML="",t.$emit("start",e)})}},mounted:function(){var e=this;this.$nextTick(function(){e.updateIframeWH(),e.initIframe()})},updated:function(){var e=this;this.$nextTick(function(){e.updateIframeWH()})},render:function(){var e,t=arguments[0],n=this.$props,r=n.componentTag,i=n.disabled,s=n.prefixCls,l=(0,a.A)({},V,{display:this.uploading||i?"none":""}),u=c()((e={},(0,o.A)(e,s,!0),(0,o.A)(e,s+"-disabled",i),e));return t(r,{attrs:{className:u},style:{position:"relative",zIndex:0}},[t("iframe",{ref:"iframeRef",on:{load:this.onLoad},style:l}),this.$slots["default"]])}},E=P;function j(){}var F={componentTag:m.A.string,prefixCls:m.A.string,action:m.A.oneOfType([m.A.string,m.A.func]),name:m.A.string,multipart:m.A.bool,directory:m.A.bool,data:m.A.oneOfType([m.A.object,m.A.func]),headers:m.A.object,accept:m.A.string,multiple:m.A.bool,disabled:m.A.bool,beforeUpload:m.A.func,customRequest:m.A.func,method:m.A.string,withCredentials:m.A.bool,supportServerRender:m.A.bool,openFileDialogOnClick:m.A.bool,transformFile:m.A.func},I={name:"Upload",mixins:[g.A],inheritAttrs:!1,props:(0,v.CB)(F,{componentTag:"span",prefixCls:"rc-upload",data:{},headers:{},name:"file",multipart:!1,supportServerRender:!1,multiple:!1,beforeUpload:j,withCredentials:!1,openFileDialogOnClick:!0}),data:function(){return{Component:null}},mounted:function(){var e=this;this.$nextTick(function(){e.supportServerRender&&e.setState({Component:e.getComponent()},function(){e.$emit("ready")})})},methods:{getComponent:function(){return"undefined"!==typeof File?D:E},abort:function(e){this.$refs.uploaderRef.abort(e)}},render:function(){var e=arguments[0],t={props:(0,a.A)({},this.$props),on:(0,v.WM)(this),ref:"uploaderRef",attrs:this.$attrs};if(this.supportServerRender){var n=this.Component;return n?e(n,t,[this.$slots["default"]]):null}var r=this.getComponent();return e(r,t,[this.$slots["default"]])}},$=I,R=$,N=n(38377),W=n(77749),B=n(25592),K=n(97479);m.A.oneOf(["error","success","done","uploading","removed"]);function U(e){var t=e.uid,n=e.name;return!(!t&&0!==t)&&(!!["string","number"].includes("undefined"===typeof t?"undefined":(0,K.A)(t))&&(""!==n&&"string"===typeof n))}m.A.custom(U),m.A.arrayOf(m.A.custom(U)),m.A.object;var q=m.A.shape({showRemoveIcon:m.A.bool,showPreviewIcon:m.A.bool}).loose,G=m.A.shape({uploading:m.A.string,removeFile:m.A.string,downloadFile:m.A.string,uploadError:m.A.string,previewFile:m.A.string}).loose,J={type:m.A.oneOf(["drag","select"]),name:m.A.string,defaultFileList:m.A.arrayOf(m.A.custom(U)),fileList:m.A.arrayOf(m.A.custom(U)),action:m.A.oneOfType([m.A.string,m.A.func]),directory:m.A.bool,data:m.A.oneOfType([m.A.object,m.A.func]),method:m.A.oneOf(["POST","PUT","post","put"]),headers:m.A.object,showUploadList:m.A.oneOfType([m.A.bool,q]),multiple:m.A.bool,accept:m.A.string,beforeUpload:m.A.func,listType:m.A.oneOf(["text","picture","picture-card"]),remove:m.A.func,supportServerRender:m.A.bool,disabled:m.A.bool,prefixCls:m.A.string,customRequest:m.A.func,withCredentials:m.A.bool,openFileDialogOnClick:m.A.bool,locale:G,height:m.A.number,id:m.A.string,previewFile:m.A.func,transformFile:m.A.func},X=(m.A.arrayOf(m.A.custom(U)),m.A.string,{listType:m.A.oneOf(["text","picture","picture-card"]),items:m.A.arrayOf(m.A.custom(U)),progressAttr:m.A.object,prefixCls:m.A.string,showRemoveIcon:m.A.bool,showDownloadIcon:m.A.bool,showPreviewIcon:m.A.bool,locale:G,previewFile:m.A.func}),Z={name:"AUploadDragger",props:J,render:function(){var e=arguments[0],t=(0,v.Oq)(this),n={props:(0,a.A)({},t,{type:"drag"}),on:(0,v.WM)(this),style:{height:this.height}};return e(pe,n,[this.$slots["default"]])}},Q=n(80178);function ee(){return!0}function te(e){return(0,a.A)({},e,{lastModified:e.lastModified,lastModifiedDate:e.lastModifiedDate,name:e.name,size:e.size,type:e.type,uid:e.uid,percent:0,originFileObj:e})}function ne(){var e=.1,t=.01,n=.98;return function(r){var i=r;return i>=n||(i+=e,e-=t,e<.001&&(e=.001)),i}}function re(e,t){var n=void 0!==e.uid?"uid":"name";return t.filter(function(t){return t[n]===e[n]})[0]}function ie(e,t){var n=void 0!==e.uid?"uid":"name",r=t.filter(function(t){return t[n]!==e[n]});return r.length===t.length?null:r}var oe=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=e.split("/"),n=t[t.length-1],r=n.split(/#|\?/)[0];return(/\.[^./\\]*$/.exec(r)||[""])[0]},ae=function(e){return!!e&&0===e.indexOf("image/")},se=function(e){if(ae(e.type))return!0;var t=e.thumbUrl||e.url,n=oe(t);return!(!/^data:image\//.test(t)&&!/(webp|svg|png|gif|jpg|jpeg|jfif|bmp|dpg|ico)$/i.test(n))||!/^data:/.test(t)&&!n},ce=200;function le(e){return new Promise(function(t){if(ae(e.type)){var n=document.createElement("canvas");n.width=ce,n.height=ce,n.style.cssText="position: fixed; left: 0; top: 0; width: "+ce+"px; height: "+ce+"px; z-index: 9999; display: none;",document.body.appendChild(n);var r=n.getContext("2d"),i=new Image;i.onload=function(){var e=i.width,o=i.height,a=ce,s=ce,c=0,l=0;e=this.$refs.subMenuTitle.offsetWidth||(e.style.minWidth=this.$refs.subMenuTitle.offsetWidth+"px")}},renderChildren:function(e){var t=this.$createElement,n=this.$props,r=(0,y.WM)(this),a=r.select,c=r.deselect,l=r.openChange,u={props:{mode:"horizontal"===n.mode?"vertical":n.mode,visible:n.isOpen,level:n.level+1,inlineIndent:n.inlineIndent,focusable:!1,selectedKeys:n.selectedKeys,eventKey:n.eventKey+"-menu-",openKeys:n.openKeys,openTransitionName:n.openTransitionName,openAnimation:n.openAnimation,subMenuOpenDelay:n.subMenuOpenDelay,parentMenu:this,subMenuCloseDelay:n.subMenuCloseDelay,forceSubMenuRender:n.forceSubMenuRender,triggerSubMenuAction:n.triggerSubMenuAction,builtinPlacements:n.builtinPlacements,defaultActiveFirst:n.store.getState().defaultActiveFirst[(0,b.V8)(n.eventKey)],multiple:n.multiple,prefixCls:n.rootPrefixCls,manualRef:this.saveMenuInstance,itemIcon:(0,y.nu)(this,"itemIcon"),expandIcon:(0,y.nu)(this,"expandIcon"),children:e},on:{click:this.onSubMenuClick,select:a,deselect:c,openChange:l},id:this.internalMenuId},d=u.props,h=this.haveRendered;if(this.haveRendered=!0,this.haveOpened=this.haveOpened||d.visible||d.forceSubMenuRender,!this.haveOpened)return t("div");var p=h||!d.visible||"inline"===!d.mode;u["class"]=" "+d.prefixCls+"-sub";var m={appear:p,css:!1},v={props:m,on:{}};return d.openTransitionName?v=(0,M.A)(d.openTransitionName,{appear:p}):"object"===(0,o.A)(d.openAnimation)?(m=(0,s.A)({},m,d.openAnimation.props||{}),p||(m.appear=!1)):"string"===typeof d.openAnimation&&(v=(0,M.A)(d.openAnimation,{appear:p})),"object"===(0,o.A)(d.openAnimation)&&d.openAnimation.on&&(v.on=d.openAnimation.on),t("transition",v,[t(f.Ay,i()([{directives:[{name:"show",value:n.isOpen}]},u]))])}},render:function(){var e,t,n=arguments[0],r=this.$props,o=this.rootPrefixCls,l=this.parentMenu,d=r.isOpen,h=this.getPrefixCls(),f="inline"===r.mode,p=(e={},(0,a.A)(e,h,!0),(0,a.A)(e,h+"-"+r.mode,!0),(0,a.A)(e,this.getOpenClassName(),d),(0,a.A)(e,this.getActiveClassName(),r.active||d&&!f),(0,a.A)(e,this.getDisabledClassName(),r.disabled),(0,a.A)(e,this.getSelectedClassName(),this.isChildrenSelected()),e);this.internalMenuId||(r.eventKey?this.internalMenuId=r.eventKey+"$Menu":this.internalMenuId="$__$"+ ++A+"$Menu");var m={},g={},_={};r.disabled||(m={mouseleave:this.onMouseLeave,mouseenter:this.onMouseEnter},g={click:this.onTitleClick},_={mouseenter:this.onTitleMouseEnter,mouseleave:this.onTitleMouseLeave});var b={};f&&(b.paddingLeft=r.inlineIndent*r.level+"px");var M={};d&&(M={"aria-owns":this.internalMenuId});var x={attrs:(0,s.A)({"aria-expanded":d},M,{"aria-haspopup":"true",title:"string"===typeof r.title?r.title:void 0}),on:(0,s.A)({},_,g),style:b,class:h+"-title",ref:"subMenuTitle"},k=null;"horizontal"!==r.mode&&(k=(0,y.nu)(this,"expandIcon",r));var L=n("div",x,[(0,y.nu)(this,"title"),k||n("i",{class:h+"-arrow"})]),C=this.renderChildren((0,y.Gk)(this.$slots["default"])),S=this.parentMenu.isRootMenu?this.parentMenu.getPopupContainer:function(e){return e.parentNode},z=w[r.mode],T=r.popupOffset?{offset:r.popupOffset}:{},O="inline"===r.mode?"":r.popupClassName,H={on:(0,s.A)({},(0,c.A)((0,y.WM)(this),["click"]),m),class:p};return n("li",i()([H,{attrs:{role:"menuitem"}}]),[f&&L,f&&C,!f&&n(u.A,{attrs:(t={prefixCls:h,popupClassName:h+"-popup "+o+"-"+l.theme+" "+(O||""),getPopupContainer:S,builtinPlacements:v},(0,a.A)(t,"builtinPlacements",(0,s.A)({},v,r.builtinPlacements)),(0,a.A)(t,"popupPlacement",z),(0,a.A)(t,"popupVisible",d),(0,a.A)(t,"popupAlign",T),(0,a.A)(t,"action",r.disabled?[]:[r.triggerSubMenuAction]),(0,a.A)(t,"mouseEnterDelay",r.subMenuOpenDelay),(0,a.A)(t,"mouseLeaveDelay",r.subMenuCloseDelay),(0,a.A)(t,"forceRender",r.forceSubMenuRender),t),on:{popupVisibleChange:this.onPopupVisibleChange}},[n("template",{slot:"popup"},[C]),L])])}},L=(0,h.A)(function(e,t){var n=e.openKeys,r=e.activeKey,i=e.selectedKeys,o=t.eventKey,a=t.subMenuKey;return{isOpen:n.indexOf(o)>-1,active:r[a]===o,selectedKeys:i}})(k);L.isSubMenu=!0;var C=L},4275:function(e,t,n){"use strict";n.d(t,{Ay:function(){return T},GO:function(){return S}});var r=n(5748),i=n(44508),o=n(85505),a=n(90034),s=n(4718),c=n(14221),l=n(52315),u=n(11207),d=n(46942),h=n.n(d),f=n(78556),p=n(32779),m=n(43591),v=n(70198),g=n(51927),y=n(15848),_=!("undefined"===typeof window||!window.document||!window.document.createElement),b="menuitem-overflowed",M=.5;_&&n(22708);var A={name:"DOMWrap",mixins:[l.A],data:function(){return this.resizeObserver=null,this.mutationObserver=null,this.originalTotalWidth=0,this.overflowedItems=[],this.menuItemSizes=[],{lastVisibleIndex:void 0}},mounted:function(){var e=this;this.$nextTick(function(){if(e.setChildrenWidthAndResize(),1===e.level&&"horizontal"===e.mode){var t=e.$el;if(!t)return;e.resizeObserver=new m.A(function(t){t.forEach(e.setChildrenWidthAndResize)}),[].slice.call(t.children).concat(t).forEach(function(t){e.resizeObserver.observe(t)}),"undefined"!==typeof MutationObserver&&(e.mutationObserver=new MutationObserver(function(){e.resizeObserver.disconnect(),[].slice.call(t.children).concat(t).forEach(function(t){e.resizeObserver.observe(t)}),e.setChildrenWidthAndResize()}),e.mutationObserver.observe(t,{attributes:!1,childList:!0,subTree:!1}))}})},beforeDestroy:function(){this.resizeObserver&&this.resizeObserver.disconnect(),this.mutationObserver&&this.mutationObserver.disconnect()},methods:{getMenuItemNodes:function(){var e=this.$props.prefixCls,t=this.$el;return t?[].slice.call(t.children).filter(function(t){return t.className.split(" ").indexOf(e+"-overflowed-submenu")<0}):[]},getOverflowedSubMenuItem:function(e,t,n){var i=this.$createElement,a=this.$props,s=a.overflowedIndicator,c=a.level,l=a.mode,u=a.prefixCls,d=a.theme;if(1!==c||"horizontal"!==l)return null;var h=this.$slots["default"][0],p=(0,y.Ts)(h),m=(p.title,(0,r.A)(p,["title"])),g=(0,y.kQ)(h),_={},b=e+"-overflowed-indicator",M=e+"-overflowed-indicator";0===t.length&&!0!==n?_={display:"none"}:n&&(_={visibility:"hidden",position:"absolute"},b+="-placeholder",M+="-placeholder");var A=d?u+"-"+d:"",w={},x={};f.$J.props.forEach(function(e){void 0!==m[e]&&(w[e]=m[e])}),f.$J.on.forEach(function(e){void 0!==g[e]&&(x[e]=g[e])});var k={props:(0,o.A)({title:s,popupClassName:A},w,{eventKey:M,disabled:!1}),class:u+"-overflowed-submenu",key:b,style:_,on:x};return i(v.A,k,[t])},setChildrenWidthAndResize:function(){if("horizontal"===this.mode){var e=this.$el;if(e){var t=e.children;if(t&&0!==t.length){var n=e.children[t.length-1];(0,f.eC)(n,"display","inline-block");var r=this.getMenuItemNodes(),i=r.filter(function(e){return e.className.split(" ").indexOf(b)>=0});i.forEach(function(e){(0,f.eC)(e,"display","inline-block")}),this.menuItemSizes=r.map(function(e){return(0,f.RG)(e)}),i.forEach(function(e){(0,f.eC)(e,"display","none")}),this.overflowedIndicatorWidth=(0,f.RG)(e.children[e.children.length-1]),this.originalTotalWidth=this.menuItemSizes.reduce(function(e,t){return e+t},0),this.handleResize(),(0,f.eC)(n,"display","none")}}}},handleResize:function(){var e=this;if("horizontal"===this.mode){var t=this.$el;if(t){var n=(0,f.RG)(t);this.overflowedItems=[];var r=0,i=void 0;this.originalTotalWidth>n+M&&(i=-1,this.menuItemSizes.forEach(function(t){r+=t,r+e.overflowedIndicatorWidth<=n&&(i+=1)})),this.setState({lastVisibleIndex:i})}}},renderChildren:function(e){var t=this,n=this.$data.lastVisibleIndex,r=(0,y.t0)(this);return(e||[]).reduce(function(i,o,a){var s=o,c=(0,y.Ts)(o).eventKey;if("horizontal"===t.mode){var l=t.getOverflowedSubMenuItem(c,[]);void 0!==n&&-1!==r[t.prefixCls+"-root"]&&(a>n&&(s=(0,g.Ob)(o,{style:{display:"none"},props:{eventKey:c+"-hidden"},class:b})),a===n+1&&(t.overflowedItems=e.slice(n+1).map(function(e){return(0,g.Ob)(e,{key:(0,y.Ts)(e).eventKey,props:{mode:"vertical-left"}})}),l=t.getOverflowedSubMenuItem(c,t.overflowedItems)));var u=[].concat((0,p.A)(i),[l,s]);return a===e.length-1&&u.push(t.getOverflowedSubMenuItem(c,[],!0)),u}return[].concat((0,p.A)(i),[s])},[])}},render:function(){var e=arguments[0],t=this.$props.tag,n={on:(0,y.WM)(this)};return e(t,n,[this.renderChildren(this.$slots["default"])])}};A.props={mode:s.A.oneOf(["horizontal","vertical","vertical-left","vertical-right","inline"]),prefixCls:s.A.string,level:s.A.number,theme:s.A.string,overflowedIndicator:s.A.node,visible:s.A.bool,hiddenClassName:s.A.string,tag:s.A.string.def("div")};var w=A;function x(e){return!e.length||e.every(function(e){return!!e.disabled})}function k(e,t,n){var r=e.getState();e.setState({activeKey:(0,o.A)({},r.activeKey,(0,i.A)({},t,n))})}function L(e){return e.eventKey||"0-menu-"}function C(e,t){if(t){var n=this.instanceArrayKeyIndexMap[e];this.instanceArray[n]=t}}function S(e,t){var n=t,r=e.eventKey,i=e.defaultActiveFirst,o=e.children;if(void 0!==n&&null!==n){var a=void 0;if((0,f.ns)(o,function(e,t){var i=e.componentOptions.propsData||{};e&&!i.disabled&&n===(0,f.dL)(e,r,t)&&(a=!0)}),a)return n}return n=null,i?((0,f.ns)(o,function(e,t){var i=e.componentOptions.propsData||{},o=null===n||void 0===n;o&&e&&!i.disabled&&(n=(0,f.dL)(e,r,t))}),n):n}var z={name:"SubPopupMenu",props:(0,y.CB)({prefixCls:s.A.string,openTransitionName:s.A.string,openAnimation:s.A.oneOfType([s.A.string,s.A.object]),openKeys:s.A.arrayOf(s.A.oneOfType([s.A.string,s.A.number])),visible:s.A.bool,parentMenu:s.A.object,eventKey:s.A.string,store:s.A.object,forceSubMenuRender:s.A.bool,focusable:s.A.bool,multiple:s.A.bool,defaultActiveFirst:s.A.bool,activeKey:s.A.oneOfType([s.A.string,s.A.number]),selectedKeys:s.A.arrayOf(s.A.oneOfType([s.A.string,s.A.number])),defaultSelectedKeys:s.A.arrayOf(s.A.oneOfType([s.A.string,s.A.number])),defaultOpenKeys:s.A.arrayOf(s.A.oneOfType([s.A.string,s.A.number])),level:s.A.number,mode:s.A.oneOf(["horizontal","vertical","vertical-left","vertical-right","inline"]),triggerSubMenuAction:s.A.oneOf(["click","hover"]),inlineIndent:s.A.oneOfType([s.A.number,s.A.string]),manualRef:s.A.func,itemIcon:s.A.any,expandIcon:s.A.any,overflowedIndicator:s.A.any,children:s.A.any.def([]),__propsSymbol__:s.A.any},{prefixCls:"rc-menu",mode:"vertical",level:1,inlineIndent:24,visible:!0,focusable:!0,manualRef:f.lQ}),mixins:[l.A],created:function(){var e=(0,y.Oq)(this);this.prevProps=(0,o.A)({},e),e.store.setState({activeKey:(0,o.A)({},e.store.getState().activeKey,(0,i.A)({},e.eventKey,S(e,e.activeKey)))}),this.instanceArray=[]},mounted:function(){this.manualRef&&this.manualRef(this)},updated:function(){var e=(0,y.Oq)(this),t=this.prevProps,n="activeKey"in e?e.activeKey:e.store.getState().activeKey[L(e)],r=S(e,n);if(r!==n)k(e.store,L(e),r);else if("activeKey"in t){var i=S(t,t.activeKey);r!==i&&k(e.store,L(e),r)}this.prevProps=(0,o.A)({},e)},methods:{onKeyDown:function(e,t){var n=e.keyCode,r=void 0;if(this.getFlatInstanceArray().forEach(function(t){t&&t.active&&t.onKeyDown&&(r=t.onKeyDown(e))}),r)return 1;var i=null;return n!==u.A.UP&&n!==u.A.DOWN||(i=this.step(n===u.A.UP?-1:1)),i?(e.preventDefault(),k(this.$props.store,L(this.$props),i.eventKey),"function"===typeof t&&t(i),1):void 0},onItemHover:function(e){var t=e.key,n=e.hover;k(this.$props.store,L(this.$props),n?t:null)},onDeselect:function(e){this.__emit("deselect",e)},onSelect:function(e){this.__emit("select",e)},onClick:function(e){this.__emit("click",e)},onOpenChange:function(e){this.__emit("openChange",e)},onDestroy:function(e){this.__emit("destroy",e)},getFlatInstanceArray:function(){return this.instanceArray},getOpenTransitionName:function(){return this.$props.openTransitionName},step:function(e){var t=this.getFlatInstanceArray(),n=this.$props.store.getState().activeKey[L(this.$props)],r=t.length;if(!r)return null;e<0&&(t=t.concat().reverse());var i=-1;if(t.every(function(e,t){return!e||e.eventKey!==n||(i=t,!1)}),this.defaultActiveFirst||-1===i||!x(t.slice(i,r-1))){var o=(i+1)%r,a=o;do{var s=t[a];if(s&&!s.disabled)return s;a=(a+1)%r}while(a!==o);return null}},getIcon:function(e,t){if(e.$createElement){var n=e[t];return void 0!==n?n:e.$slots[t]||e.$scopedSlots[t]}var r=(0,y.Ts)(e)[t];if(void 0!==r)return r;var i=[],o=e.componentOptions||{};return(o.children||[]).forEach(function(e){e.data&&e.data.slot===t&&("template"===e.tag?i.push(e.children):i.push(e))}),i.length?i:void 0},renderCommonMenuItem:function(e,t,n){var r=this;if(void 0===e.tag)return e;var i=this.$props.store.getState(),a=this.$props,s=(0,f.dL)(e,a.eventKey,t),c=e.componentOptions.propsData||{},l=s===i.activeKey[L(this.$props)];c.disabled||(this.instanceArrayKeyIndexMap[s]=Object.keys(this.instanceArrayKeyIndexMap).length);var u=(0,y.kQ)(e),d={props:(0,o.A)({mode:c.mode||a.mode,level:a.level,inlineIndent:a.inlineIndent,renderMenuItem:this.renderMenuItem,rootPrefixCls:a.prefixCls,index:t,parentMenu:a.parentMenu,manualRef:c.disabled?f.lQ:C.bind(this,s),eventKey:s,active:!c.disabled&&l,multiple:a.multiple,openTransitionName:this.getOpenTransitionName(),openAnimation:a.openAnimation,subMenuOpenDelay:a.subMenuOpenDelay,subMenuCloseDelay:a.subMenuCloseDelay,forceSubMenuRender:a.forceSubMenuRender,builtinPlacements:a.builtinPlacements,itemIcon:this.getIcon(e,"itemIcon")||this.getIcon(this,"itemIcon"),expandIcon:this.getIcon(e,"expandIcon")||this.getIcon(this,"expandIcon")},n),on:{click:function(e){(u.click||f.lQ)(e),r.onClick(e)},itemHover:this.onItemHover,openChange:this.onOpenChange,deselect:this.onDeselect,select:this.onSelect}};return("inline"===a.mode||(0,f.Xb)())&&(d.props.triggerSubMenuAction="click"),(0,g.Ob)(e,d)},renderMenuItem:function(e,t,n){if(!e)return null;var r=this.$props.store.getState(),i={openKeys:r.openKeys,selectedKeys:r.selectedKeys,triggerSubMenuAction:this.triggerSubMenuAction,isRootMenu:!1,subMenuKey:n};return this.renderCommonMenuItem(e,t,i)}},render:function(){var e=this,t=arguments[0],n=(0,r.A)(this.$props,[]),i=n.eventKey,o=n.prefixCls,s=n.visible,c=n.level,l=n.mode,u=n.theme;this.instanceArray=[],this.instanceArrayKeyIndexMap={};var d=h()(n.prefixCls,n.prefixCls+"-"+n.mode),f={props:{tag:"ul",visible:s,prefixCls:o,level:c,mode:l,theme:u,overflowedIndicator:(0,y.nu)(this,"overflowedIndicator")},attrs:{role:n.role||"menu"},class:d,on:(0,a.A)((0,y.WM)(this),["click"])};return n.focusable&&(f.attrs.tabIndex="0",f.on.keydown=this.onKeyDown),t(w,f,[n.children.map(function(t,n){return e.renderMenuItem(t,n,i||"0-menu-")})])}},T=(0,c.A)()(z)},55384:function(e,t,n){"use strict";var r=n(4718);t.A={prefixCls:r.A.string.def("rc-menu"),focusable:r.A.bool.def(!0),multiple:r.A.bool,defaultActiveFirst:r.A.bool,visible:r.A.bool.def(!0),activeKey:r.A.oneOfType([r.A.string,r.A.number]),selectedKeys:r.A.arrayOf(r.A.oneOfType([r.A.string,r.A.number])),defaultSelectedKeys:r.A.arrayOf(r.A.oneOfType([r.A.string,r.A.number])).def([]),defaultOpenKeys:r.A.arrayOf(r.A.oneOfType([r.A.string,r.A.number])).def([]),openKeys:r.A.arrayOf(r.A.oneOfType([r.A.string,r.A.number])),openAnimation:r.A.oneOfType([r.A.string,r.A.object]),mode:r.A.oneOf(["horizontal","vertical","vertical-left","vertical-right","inline"]).def("vertical"),triggerSubMenuAction:r.A.string.def("hover"),subMenuOpenDelay:r.A.number.def(.1),subMenuCloseDelay:r.A.number.def(.1),level:r.A.number.def(1),inlineIndent:r.A.number.def(24),theme:r.A.oneOf(["light","dark"]).def("light"),getPopupContainer:r.A.func,openTransitionName:r.A.string,forceSubMenuRender:r.A.bool,selectable:r.A.bool,isRootMenu:r.A.bool.def(!0),builtinPlacements:r.A.object.def(function(){return{}}),itemIcon:r.A.any,expandIcon:r.A.any,overflowedIndicator:r.A.any}},74072:function(e,t,n){"use strict";n.d(t,{Ay:function(){return p}});var r=n(85505),i=n(4718);function o(e){var t=e,n=[];function i(e){t=(0,r.A)({},t,e);for(var i=0;i=n&&(e.updateKey=a[0].updateKey||a[0].key,a.shift()),a.push(e)),{notices:a}})},remove:function(e){this.setState(function(t){return{notices:t.notices.filter(function(t){return t.key!==e})}})}},render:function(e){var t=this,n=this.prefixCls,r=this.notices,o=this.remove,a=this.getTransitionName,c=(0,u.A)(a()),d=r.map(function(i,a){var c=Boolean(a===r.length-1&&i.updateKey),u=i.updateKey?i.updateKey:i.key,d=i.content,f=i.duration,m=i.closable,v=i.onClose,g=i.style,y=i["class"],_=(0,l.A)(o.bind(t,i.key),v),b={props:{prefixCls:n,duration:f,closable:m,update:c,closeIcon:(0,s.nu)(t,"closeIcon")},on:{close:_,click:i.onClick||p},style:g,class:y,key:u};return e(h,b,["function"===typeof d?d(e):d])}),f=(0,i.A)({},n,1),m=(0,s.gd)(this);return e("div",{class:f,style:m||{top:"65px",left:"50%"}},[e("transition-group",c,[d])])},newInstance:function(e,t){var n=e||{},i=n.getContainer,a=n.style,s=n["class"],c=(0,r.A)(n,["getContainer","style","class"]),l=document.createElement("div");if(i){var u=i();u.appendChild(l)}else document.body.appendChild(l);var d=f.A.Vue||o.Ay;new d({el:l,mounted:function(){var e=this;this.$nextTick(function(){t({notice:function(t){e.$refs.notification.add(t)},removeNotice:function(t){e.$refs.notification.remove(t)},component:e,destroy:function(){e.$destroy(),e.$el.parentNode.removeChild(e.$el)}})})},render:function(){var e=arguments[0],t={props:c,ref:"notification",style:a,class:s};return e(y,t)}})}},_=y,b=_},15709:function(e,t){"use strict";t.A={items_per_page:"/ page",jump_to:"Go to",jump_to_confirm:"confirm",page:"",prev_page:"Previous Page",next_page:"Next Page",prev_5:"Previous 5 Pages",next_5:"Next 5 Pages",prev_3:"Previous 3 Pages",next_3:"Next 3 Pages"}},48931:function(e,t){"use strict";t.A={items_per_page:"条/页",jump_to:"跳至",jump_to_confirm:"确定",page:"页",prev_page:"上一页",next_page:"下一页",prev_5:"向前 5 页",next_5:"向后 5 页",prev_3:"向前 3 页",next_3:"向后 3 页"}},68052:function(e,t,n){"use strict";var r=n(4718);t.A={props:{value:r.A.oneOfType([r.A.string,r.A.number]),label:r.A.oneOfType([r.A.string,r.A.number])},isSelectOptGroup:!0}},28781:function(e,t,n){"use strict";var r=n(4718);t.A={props:{value:r.A.oneOfType([r.A.string,r.A.number]),label:r.A.oneOfType([r.A.string,r.A.number]),disabled:r.A.bool,title:r.A.oneOfType([r.A.string,r.A.number])},isSelectOption:!0}},7772:function(e,t,n){"use strict";n.d(t,{A:function(){return S}});var r=n(95093),i=n.n(r),o=n(4718),a=n(52315),s=n(75189),c=n.n(s),l={mixins:[a.A],props:{format:o.A.string,prefixCls:o.A.string,disabledDate:o.A.func,placeholder:o.A.string,clearText:o.A.string,value:o.A.object,inputReadOnly:o.A.bool.def(!1),hourOptions:o.A.array,minuteOptions:o.A.array,secondOptions:o.A.array,disabledHours:o.A.func,disabledMinutes:o.A.func,disabledSeconds:o.A.func,allowEmpty:o.A.bool,defaultOpenValue:o.A.object,currentSelectPanel:o.A.string,focusOnOpen:o.A.bool,clearIcon:o.A.any},data:function(){var e=this.value,t=this.format;return{str:e&&e.format(t)||"",invalid:!1}},mounted:function(){var e=this;if(this.focusOnOpen){var t=window.requestAnimationFrame||window.setTimeout;t(function(){e.$refs.input.focus(),e.$refs.input.select()})}},watch:{value:function(e){var t=this;this.$nextTick(function(){t.setState({str:e&&e.format(t.format)||"",invalid:!1})})}},methods:{onInputChange:function(e){var t=e.target,n=t.value,r=t.composing,o=this.str,a=void 0===o?"":o;if(!e.isComposing&&!r&&a!==n){this.setState({str:n});var s=this.format,c=this.hourOptions,l=this.minuteOptions,u=this.secondOptions,d=this.disabledHours,h=this.disabledMinutes,f=this.disabledSeconds,p=this.value;if(n){var m=this.getProtoValue().clone(),v=i()(n,s,!0);if(!v.isValid())return void this.setState({invalid:!0});if(m.hour(v.hour()).minute(v.minute()).second(v.second()),c.indexOf(m.hour())<0||l.indexOf(m.minute())<0||u.indexOf(m.second())<0)return void this.setState({invalid:!0});var g=d(),y=h(m.hour()),_=f(m.hour(),m.minute());if(g&&g.indexOf(m.hour())>=0||y&&y.indexOf(m.minute())>=0||_&&_.indexOf(m.second())>=0)return void this.setState({invalid:!0});if(p){if(p.hour()!==m.hour()||p.minute()!==m.minute()||p.second()!==m.second()){var b=p.clone();b.hour(m.hour()),b.minute(m.minute()),b.second(m.second()),this.__emit("change",b)}}else p!==m&&this.__emit("change",m)}else this.__emit("change",null);this.setState({invalid:!1})}},onKeyDown:function(e){27===e.keyCode&&this.__emit("esc"),this.__emit("keydown",e)},getProtoValue:function(){return this.value||this.defaultOpenValue},getInput:function(){var e=this.$createElement,t=this.prefixCls,n=this.placeholder,r=this.inputReadOnly,i=this.invalid,o=this.str,a=i?t+"-input-invalid":"";return e("input",c()([{class:t+"-input "+a,ref:"input",on:{keydown:this.onKeyDown,input:this.onInputChange},domProps:{value:o},attrs:{placeholder:n,readOnly:!!r}},{directives:[{name:"ant-input"}]}]))}},render:function(){var e=arguments[0],t=this.prefixCls;return e("div",{class:t+"-input-wrap"},[this.getInput()])}},u=l,d=n(44508),h=n(46942),f=n.n(h),p=n(93146),m=n.n(p);function v(){}var g=function e(t,n,r){if(r<=0)m()(function(){t.scrollTop=n});else{var i=n-t.scrollTop,o=i/r*10;m()(function(){t.scrollTop+=o,t.scrollTop!==n&&e(t,n,r-10)})}},y={mixins:[a.A],props:{prefixCls:o.A.string,options:o.A.array,selectedIndex:o.A.number,type:o.A.string},data:function(){return{active:!1}},mounted:function(){var e=this;this.$nextTick(function(){e.scrollToSelected(0)})},watch:{selectedIndex:function(){var e=this;this.$nextTick(function(){e.scrollToSelected(120)})}},methods:{onSelect:function(e){var t=this.type;this.__emit("select",t,e)},onEsc:function(e){this.__emit("esc",e)},getOptions:function(){var e=this,t=this.$createElement,n=this.options,r=this.selectedIndex,i=this.prefixCls;return n.map(function(n,o){var a,s=f()((a={},(0,d.A)(a,i+"-select-option-selected",r===o),(0,d.A)(a,i+"-select-option-disabled",n.disabled),a)),c=n.disabled?v:function(){e.onSelect(n.value)},l=function(t){13===t.keyCode?c():27===t.keyCode&&e.onEsc()};return t("li",{attrs:{role:"button",disabled:n.disabled,tabIndex:"0"},on:{click:c,keydown:l},class:s,key:o},[n.value])})},handleMouseEnter:function(e){this.setState({active:!0}),this.__emit("mouseenter",e)},handleMouseLeave:function(){this.setState({active:!1})},scrollToSelected:function(e){var t=this.$el,n=this.$refs.list;if(n){var r=this.selectedIndex;r<0&&(r=0);var i=n.children[r],o=i.offsetTop;g(t,o,e)}}},render:function(){var e,t=arguments[0],n=this.prefixCls,r=this.options,i=this.active;if(0===r.length)return null;var o=(e={},(0,d.A)(e,n+"-select",1),(0,d.A)(e,n+"-select-active",i),e);return t("div",{class:o,on:{mouseenter:this.handleMouseEnter,mouseleave:this.handleMouseLeave}},[t("ul",{ref:"list"},[this.getOptions()])])}},_=y,b=function(e,t){var n=""+e;e<10&&(n="0"+e);var r=!1;return t&&t.indexOf(e)>=0&&(r=!0),{value:n,disabled:r}},M={mixins:[a.A],name:"Combobox",props:{format:o.A.string,defaultOpenValue:o.A.object,prefixCls:o.A.string,value:o.A.object,showHour:o.A.bool,showMinute:o.A.bool,showSecond:o.A.bool,hourOptions:o.A.array,minuteOptions:o.A.array,secondOptions:o.A.array,disabledHours:o.A.func,disabledMinutes:o.A.func,disabledSeconds:o.A.func,use12Hours:o.A.bool,isAM:o.A.bool},methods:{onItemChange:function(e,t){var n=this.defaultOpenValue,r=this.use12Hours,i=this.value,o=this.isAM,a=(i||n).clone();if("hour"===e)r?o?a.hour(+t%12):a.hour(+t%12+12):a.hour(+t);else if("minute"===e)a.minute(+t);else if("ampm"===e){var s=t.toUpperCase();r&&("PM"===s&&a.hour()<12&&a.hour(a.hour()%12+12),"AM"===s&&a.hour()>=12&&a.hour(a.hour()-12)),this.__emit("amPmChange",s)}else a.second(+t);this.__emit("change",a)},onEnterSelectPanel:function(e){this.__emit("currentSelectPanelChange",e)},onEsc:function(e){this.__emit("esc",e)},getHourSelect:function(e){var t=this,n=this.$createElement,r=this.prefixCls,i=this.hourOptions,o=this.disabledHours,a=this.showHour,s=this.use12Hours;if(!a)return null;var c=o(),l=void 0,u=void 0;return s?(l=[12].concat(i.filter(function(e){return e<12&&e>0})),u=e%12||12):(l=i,u=e),n(_,{attrs:{prefixCls:r,options:l.map(function(e){return b(e,c)}),selectedIndex:l.indexOf(u),type:"hour"},on:{select:this.onItemChange,mouseenter:function(){return t.onEnterSelectPanel("hour")},esc:this.onEsc}})},getMinuteSelect:function(e){var t=this,n=this.$createElement,r=this.prefixCls,i=this.minuteOptions,o=this.disabledMinutes,a=this.defaultOpenValue,s=this.showMinute,c=this.value;if(!s)return null;var l=c||a,u=o(l.hour());return n(_,{attrs:{prefixCls:r,options:i.map(function(e){return b(e,u)}),selectedIndex:i.indexOf(e),type:"minute"},on:{select:this.onItemChange,mouseenter:function(){return t.onEnterSelectPanel("minute")},esc:this.onEsc}})},getSecondSelect:function(e){var t=this,n=this.$createElement,r=this.prefixCls,i=this.secondOptions,o=this.disabledSeconds,a=this.showSecond,s=this.defaultOpenValue,c=this.value;if(!a)return null;var l=c||s,u=o(l.hour(),l.minute());return n(_,{attrs:{prefixCls:r,options:i.map(function(e){return b(e,u)}),selectedIndex:i.indexOf(e),type:"second"},on:{select:this.onItemChange,mouseenter:function(){return t.onEnterSelectPanel("second")},esc:this.onEsc}})},getAMPMSelect:function(){var e=this,t=this.$createElement,n=this.prefixCls,r=this.use12Hours,i=this.format,o=this.isAM;if(!r)return null;var a=["am","pm"].map(function(e){return i.match(/\sA/)?e.toUpperCase():e}).map(function(e){return{value:e}}),s=o?0:1;return t(_,{attrs:{prefixCls:n,options:a,selectedIndex:s,type:"ampm"},on:{select:this.onItemChange,mouseenter:function(){return e.onEnterSelectPanel("ampm")},esc:this.onEsc}})}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.defaultOpenValue,r=this.value,i=r||n;return e("div",{class:t+"-combobox"},[this.getHourSelect(i.hour()),this.getMinuteSelect(i.minute()),this.getSecondSelect(i.second()),this.getAMPMSelect(i.hour())])}},A=M,w=n(15848);function x(){}function k(e,t,n){for(var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,i=[],o=0;o=0&&e.hour()<12}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.placeholder,r=this.disabledMinutes,i=this.addon,o=this.disabledSeconds,a=this.hideDisabledOptions,s=this.showHour,c=this.showMinute,l=this.showSecond,d=this.format,h=this.defaultOpenValue,f=this.clearText,p=this.use12Hours,m=this.focusOnOpen,v=this.hourStep,g=this.minuteStep,y=this.secondStep,_=this.inputReadOnly,b=this.sValue,M=this.currentSelectPanel,C=(0,w.nu)(this,"clearIcon"),S=(0,w.WM)(this),z=S.esc,T=void 0===z?x:z,O=S.keydown,H=void 0===O?x:O,D=this.disabledHours2(),Y=r(b?b.hour():null),V=o(b?b.hour():null,b?b.minute():null),P=k(24,D,a,v),E=k(60,Y,a,g),j=k(60,V,a,y),F=L(h,P,E,j);return e("div",{class:t+"-inner"},[e(u,{attrs:{clearText:f,prefixCls:t,defaultOpenValue:F,value:b,currentSelectPanel:M,format:d,placeholder:n,hourOptions:P,minuteOptions:E,secondOptions:j,disabledHours:this.disabledHours2,disabledMinutes:r,disabledSeconds:o,focusOnOpen:m,inputReadOnly:_,clearIcon:C},on:{esc:T,change:this.onChange,keydown:H}}),e(A,{attrs:{prefixCls:t,value:b,defaultOpenValue:F,format:d,showHour:s,showMinute:c,showSecond:l,hourOptions:P,minuteOptions:E,secondOptions:j,disabledHours:this.disabledHours2,disabledMinutes:r,disabledSeconds:o,use12Hours:p,isAM:this.isAM()},on:{change:this.onChange,amPmChange:this.onAmPmChange,currentSelectPanelChange:this.onCurrentSelectPanelChange,esc:this.onEsc}}),i(this)])}},S=C},47006:function(e,t,n){"use strict";n.d(t,{A:function(){return lt}});var r,i=n(85505),o=n(85471),a=n(24415),s=n(4718),c=n(17948),l=n(15848),u=n(982),d=n(82160),h=n(36873),f=n(97479);function p(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function m(e){for(var t=1;t=0&&n.left>=0&&n.bottom>n.top&&n.right>n.left?n:null}function _e(e,t,n,r){var i=fe.clone(e),o={width:t.width,height:t.height};return r.adjustX&&i.left=n.left&&i.left+o.width>n.right&&(o.width-=i.left+o.width-n.right),r.adjustX&&i.left+o.width>n.right&&(i.left=Math.max(n.right-o.width,n.left)),r.adjustY&&i.top=n.top&&i.top+o.height>n.bottom&&(o.height-=i.top+o.height-n.bottom),r.adjustY&&i.top+o.height>n.bottom&&(i.top=Math.max(n.bottom-o.height,n.top)),fe.mix(i,o)}function be(e){var t,n,r;if(fe.isWindow(e)||9===e.nodeType){var i=fe.getWindow(e);t={left:fe.getWindowScrollLeft(i),top:fe.getWindowScrollTop(i)},n=fe.viewportWidth(i),r=fe.viewportHeight(i)}else t=fe.offset(e),n=fe.outerWidth(e),r=fe.outerHeight(e);return t.width=n,t.height=r,t}function Me(e,t){var n=t.charAt(0),r=t.charAt(1),i=e.width,o=e.height,a=e.left,s=e.top;return"c"===n?s+=o/2:"b"===n&&(s+=o),"c"===r?a+=i/2:"r"===r&&(a+=i),{left:a,top:s}}function Ae(e,t,n,r,i){var o=Me(t,n[1]),a=Me(e,n[0]),s=[a.left-o.left,a.top-o.top];return{left:Math.round(e.left-s[0]+r[0]-i[0]),top:Math.round(e.top-s[1]+r[1]-i[1])}}function we(e,t,n){return e.leftn.right}function xe(e,t,n){return e.topn.bottom}function ke(e,t,n){return e.left>n.right||e.left+t.widthn.bottom||e.top+t.height=n.right||r.top>=n.bottom}function De(e,t,n){var r=n.target||t,i=be(r),o=!He(r,n.overflow&&n.overflow.alwaysByViewport);return Oe(e,i,n,o)}function Ye(e,t,n){var r,i,o=fe.getDocument(e),a=o.defaultView||o.parentWindow,s=fe.getWindowScrollLeft(a),c=fe.getWindowScrollTop(a),l=fe.viewportWidth(a),u=fe.viewportHeight(a);r="pageX"in t?t.pageX:s+t.clientX,i="pageY"in t?t.pageY:c+t.clientY;var d={left:r,top:i,width:0,height:0},h=r>=0&&r<=s+l&&i>=0&&i<=c+u,f=[n.points[0],"cc"];return Oe(e,d,m(m({},n),{},{points:f}),h)}De.__getOffsetParent=me,De.__getVisibleRectForElement=ye;function Ve(e,t){var n=void 0;function r(){n&&(clearTimeout(n),n=null)}function i(){r(),n=setTimeout(e,t)}return i.clear=r,i}function Pe(e,t){return e===t||!(!e||!t)&&("pageX"in t&&"pageY"in t?e.pageX===t.pageX&&e.pageY===t.pageY:"clientX"in t&&"clientY"in t&&(e.clientX===t.clientX&&e.clientY===t.clientY))}function Ee(e){return e&&"object"===("undefined"===typeof e?"undefined":(0,f.A)(e))&&e.window===e}function je(e,t){var n=Math.floor(e),r=Math.floor(t);return Math.abs(n-r)<=1}function Fe(e,t){e!==document.activeElement&&(0,c.A)(t,e)&&e.focus()}var Ie=n(51927),$e=n(88055),Re=n.n($e);function Ne(e){return"function"===typeof e&&e?e():null}function We(e){return"object"===("undefined"===typeof e?"undefined":(0,f.A)(e))&&e?e:null}var Be={props:{childrenProps:s.A.object,align:s.A.object.isRequired,target:s.A.oneOfType([s.A.func,s.A.object]).def(function(){return window}),monitorBufferTime:s.A.number.def(50),monitorWindowResize:s.A.bool.def(!1),disabled:s.A.bool.def(!1)},data:function(){return this.aligned=!1,{}},mounted:function(){var e=this;this.$nextTick(function(){e.prevProps=(0,i.A)({},e.$props);var t=e.$props;!e.aligned&&e.forceAlign(),!t.disabled&&t.monitorWindowResize&&e.startMonitorWindowResize()})},updated:function(){var e=this;this.$nextTick(function(){var t=e.prevProps,n=e.$props,r=!1;if(!n.disabled){var o=e.$el,a=o?o.getBoundingClientRect():null;if(t.disabled)r=!0;else{var s=Ne(t.target),c=Ne(n.target),l=We(t.target),u=We(n.target);Ee(s)&&Ee(c)?r=!1:(s!==c||s&&!c&&u||l&&u&&c||u&&!Pe(l,u))&&(r=!0);var d=e.sourceRect||{};r||!o||je(d.width,a.width)&&je(d.height,a.height)||(r=!0)}e.sourceRect=a}r&&e.forceAlign(),n.monitorWindowResize&&!n.disabled?e.startMonitorWindowResize():e.stopMonitorWindowResize(),e.prevProps=(0,i.A)({},e.$props,{align:Re()(e.$props.align)})})},beforeDestroy:function(){this.stopMonitorWindowResize()},methods:{startMonitorWindowResize:function(){this.resizeHandler||(this.bufferMonitor=Ve(this.forceAlign,this.$props.monitorBufferTime),this.resizeHandler=(0,d.A)(window,"resize",this.bufferMonitor))},stopMonitorWindowResize:function(){this.resizeHandler&&(this.bufferMonitor.clear(),this.resizeHandler.remove(),this.resizeHandler=null)},forceAlign:function(){var e=this.$props,t=e.disabled,n=e.target,r=e.align;if(!t&&n){var i=this.$el,o=(0,l.WM)(this),a=void 0,s=Ne(n),c=We(n),u=document.activeElement;s?a=De(i,s,r):c&&(a=Ye(i,c,r)),Fe(u,i),this.aligned=!0,o.align&&o.align(i,a)}}},render:function(){var e=this.$props.childrenProps,t=(0,l.$c)(this)[0];return t&&e?(0,Ie.Ob)(t,{props:e}):t}},Ke=Be,Ue=n(75189),qe=n.n(Ue),Ge={props:{visible:s.A.bool,hiddenClassName:s.A.string},render:function(){var e=arguments[0],t=this.$props,n=t.hiddenClassName,r=(t.visible,null);if(n||!this.$slots["default"]||this.$slots["default"].length>1){var i="";r=e("div",{class:i},[this.$slots["default"]])}else r=this.$slots["default"][0];return r}},Je={props:{hiddenClassName:s.A.string.def(""),prefixCls:s.A.string,visible:s.A.bool},render:function(){var e=arguments[0],t=this.$props,n=t.prefixCls,r=t.visible,i=t.hiddenClassName,o={on:(0,l.WM)(this)};return e("div",qe()([o,{class:r?"":i}]),[e(Ge,{class:n+"-content",attrs:{visible:r}},[this.$slots["default"]])])}},Xe=n(75998),Ze=n(52315),Qe={name:"VCTriggerPopup",mixins:[Ze.A],props:{visible:s.A.bool,getClassNameFromAlign:s.A.func,getRootDomNode:s.A.func,align:s.A.any,destroyPopupOnHide:s.A.bool,prefixCls:s.A.string,getContainer:s.A.func,transitionName:s.A.string,animation:s.A.any,maskAnimation:s.A.string,maskTransitionName:s.A.string,mask:s.A.bool,zIndex:s.A.number,popupClassName:s.A.any,popupStyle:s.A.object.def(function(){return{}}),stretch:s.A.string,point:s.A.shape({pageX:s.A.number,pageY:s.A.number})},data:function(){return this.domEl=null,{stretchChecked:!1,targetWidth:void 0,targetHeight:void 0}},mounted:function(){var e=this;this.$nextTick(function(){e.rootNode=e.getPopupDomNode(),e.setStretchSize()})},updated:function(){var e=this;this.$nextTick(function(){e.setStretchSize()})},beforeDestroy:function(){this.$el.parentNode?this.$el.parentNode.removeChild(this.$el):this.$el.remove&&this.$el.remove()},methods:{onAlign:function(e,t){var n=this.$props,r=n.getClassNameFromAlign(t);this.currentAlignClassName!==r&&(this.currentAlignClassName=r,e.className=this.getClassName(r));var i=(0,l.WM)(this);i.align&&i.align(e,t)},setStretchSize:function(){var e=this.$props,t=e.stretch,n=e.getRootDomNode,r=e.visible,i=this.$data,o=i.stretchChecked,a=i.targetHeight,s=i.targetWidth;if(t&&r){var c=n();if(c){var l=c.offsetHeight,u=c.offsetWidth;a===l&&s===u&&o||this.setState({stretchChecked:!0,targetHeight:l,targetWidth:u})}}else o&&this.setState({stretchChecked:!1})},getPopupDomNode:function(){return this.$refs.popupInstance?this.$refs.popupInstance.$el:null},getTargetElement:function(){return this.$props.getRootDomNode()},getAlignTarget:function(){var e=this.$props.point;return e||this.getTargetElement},getMaskTransitionName:function(){var e=this.$props,t=e.maskTransitionName,n=e.maskAnimation;return!t&&n&&(t=e.prefixCls+"-"+n),t},getTransitionName:function(){var e=this.$props,t=e.transitionName,n=e.animation;return t||("string"===typeof n?t=""+n:n&&n.props&&n.props.name&&(t=n.props.name)),t},getClassName:function(e){return this.$props.prefixCls+" "+this.$props.popupClassName+" "+e},getPopupElement:function(){var e=this,t=this.$createElement,n=this.$props,r=this.$slots,o=this.getTransitionName,a=this.$data,s=a.stretchChecked,c=a.targetHeight,u=a.targetWidth,d=n.align,h=n.visible,p=n.prefixCls,m=n.animation,v=n.popupStyle,g=n.getClassNameFromAlign,y=n.destroyPopupOnHide,_=n.stretch,b=this.getClassName(this.currentAlignClassName||g(d));h||(this.currentAlignClassName=null);var M={};_&&(-1!==_.indexOf("height")?M.height="number"===typeof c?c+"px":c:-1!==_.indexOf("minHeight")&&(M.minHeight="number"===typeof c?c+"px":c),-1!==_.indexOf("width")?M.width="number"===typeof u?u+"px":u:-1!==_.indexOf("minWidth")&&(M.minWidth="number"===typeof u?u+"px":u),s||setTimeout(function(){e.$refs.alignInstance&&e.$refs.alignInstance.forceAlign()},0));var A={props:{prefixCls:p,visible:h},class:b,on:(0,l.WM)(this),ref:"popupInstance",style:(0,i.A)({},M,v,this.getZIndexStyle())},w={props:{appear:!0,css:!1}},x=o(),k=!!x,L={beforeEnter:function(){},enter:function(t,n){e.$nextTick(function(){e.$refs.alignInstance?e.$refs.alignInstance.$nextTick(function(){e.domEl=t,(0,Xe.A)(t,x+"-enter",n)}):n()})},beforeLeave:function(){e.domEl=null},leave:function(e,t){(0,Xe.A)(e,x+"-leave",t)}};if("object"===("undefined"===typeof m?"undefined":(0,f.A)(m))){k=!0;var C=m.on,S=void 0===C?{}:C,z=m.props,T=void 0===z?{}:z;w.props=(0,i.A)({},w.props,T),w.on=(0,i.A)({},L,S)}else w.on=L;return k||(w={}),t("transition",w,y?[h?t(Ke,{attrs:{target:this.getAlignTarget(),monitorWindowResize:!0,align:d},key:"popup",ref:"alignInstance",on:{align:this.onAlign}},[t(Je,A,[r["default"]])]):null]:[t(Ke,{directives:[{name:"show",value:h}],attrs:{target:this.getAlignTarget(),monitorWindowResize:!0,disabled:!h,align:d},key:"popup",ref:"alignInstance",on:{align:this.onAlign}},[t(Je,A,[r["default"]])])])},getZIndexStyle:function(){var e={},t=this.$props;return void 0!==t.zIndex&&(e.zIndex=t.zIndex),e},getMaskElement:function(){var e=this.$createElement,t=this.$props,n=null;if(t.mask){var r=this.getMaskTransitionName();n=e(Ge,{directives:[{name:"show",value:t.visible}],style:this.getZIndexStyle(),key:"mask",class:t.prefixCls+"-mask",attrs:{visible:t.visible}}),r&&(n=e("transition",{attrs:{appear:!0,name:r}},[n]))}return n}},render:function(){var e=arguments[0],t=this.getMaskElement,n=this.getPopupElement;return e("div",[t(),n()])}};function et(e,t,n){return n?e[0]===t[0]:e[0]===t[0]&&e[1]===t[1]}function tt(e,t,n){var r=e[t]||{};return(0,i.A)({},r,n)}function nt(e,t,n,r){var i=n.points;for(var o in e)if(e.hasOwnProperty(o)&&et(e[o].points,i,r))return t+"-placement-"+o;return""}function rt(){}var it={props:{autoMount:s.A.bool.def(!0),autoDestroy:s.A.bool.def(!0),visible:s.A.bool,forceRender:s.A.bool.def(!1),parent:s.A.any,getComponent:s.A.func.isRequired,getContainer:s.A.func.isRequired,children:s.A.func.isRequired},mounted:function(){this.autoMount&&this.renderComponent()},updated:function(){this.autoMount&&this.renderComponent()},beforeDestroy:function(){this.autoDestroy&&this.removeContainer()},methods:{removeContainer:function(){this.container&&(this._component&&this._component.$destroy(),this.container.parentNode.removeChild(this.container),this.container=null,this._component=null)},renderComponent:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],n=this.visible,r=this.forceRender,i=this.getContainer,o=this.parent,a=this;if(n||o._component||o.$refs._component||r){var s=this.componentEl;this.container||(this.container=i(),s=document.createElement("div"),this.componentEl=s,this.container.appendChild(s));var c={component:a.getComponent(e)};this._component?this._component.setComponent(c):this._component=new this.$root.constructor({el:s,parent:a,data:{_com:c},mounted:function(){this.$nextTick(function(){t&&t.call(a)})},updated:function(){this.$nextTick(function(){t&&t.call(a)})},methods:{setComponent:function(e){this.$data._com=e}},render:function(){return this.$data._com.component}})}}},render:function(){return this.children({renderComponent:this.renderComponent,removeContainer:this.removeContainer})}};function ot(){return""}function at(){return window.document}o.Ay.use(a.A,{name:"ant-ref"});var st=["click","mousedown","touchstart","mouseenter","mouseleave","focus","blur","contextmenu"],ct={name:"Trigger",mixins:[Ze.A],props:{action:s.A.oneOfType([s.A.string,s.A.arrayOf(s.A.string)]).def([]),showAction:s.A.any.def([]),hideAction:s.A.any.def([]),getPopupClassNameFromAlign:s.A.any.def(ot),afterPopupVisibleChange:s.A.func.def(rt),popup:s.A.any,popupStyle:s.A.object.def(function(){return{}}),prefixCls:s.A.string.def("rc-trigger-popup"),popupClassName:s.A.string.def(""),popupPlacement:s.A.string,builtinPlacements:s.A.object,popupTransitionName:s.A.oneOfType([s.A.string,s.A.object]),popupAnimation:s.A.any,mouseEnterDelay:s.A.number.def(0),mouseLeaveDelay:s.A.number.def(.1),zIndex:s.A.number,focusDelay:s.A.number.def(0),blurDelay:s.A.number.def(.15),getPopupContainer:s.A.func,getDocument:s.A.func.def(at),forceRender:s.A.bool,destroyPopupOnHide:s.A.bool.def(!1),mask:s.A.bool.def(!1),maskClosable:s.A.bool.def(!0),popupAlign:s.A.object.def(function(){return{}}),popupVisible:s.A.bool,defaultPopupVisible:s.A.bool.def(!1),maskTransitionName:s.A.oneOfType([s.A.string,s.A.object]),maskAnimation:s.A.string,stretch:s.A.string,alignPoint:s.A.bool},provide:function(){return{vcTriggerContext:this}},inject:{vcTriggerContext:{default:function(){return{}}},savePopupRef:{default:function(){return rt}},dialogContext:{default:function(){return null}}},data:function(){var e=this,t=this.$props,n=void 0;return n=(0,l.cK)(this,"popupVisible")?!!t.popupVisible:!!t.defaultPopupVisible,st.forEach(function(t){e["fire"+t]=function(n){e.fireEvents(t,n)}}),{prevPopupVisible:n,sPopupVisible:n,point:null}},watch:{popupVisible:function(e){void 0!==e&&(this.prevPopupVisible=this.sPopupVisible,this.sPopupVisible=e)}},deactivated:function(){this.setPopupVisible(!1)},mounted:function(){var e=this;this.$nextTick(function(){e.renderComponent(null),e.updatedCal()})},updated:function(){var e=this,t=function(){e.sPopupVisible!==e.prevPopupVisible&&e.afterPopupVisibleChange(e.sPopupVisible),e.prevPopupVisible=e.sPopupVisible};this.renderComponent(null,t),this.$nextTick(function(){e.updatedCal()})},beforeDestroy:function(){this.clearDelayTimer(),this.clearOutsideHandler(),clearTimeout(this.mouseDownTimeout)},methods:{updatedCal:function(){var e=this.$props,t=this.$data;if(t.sPopupVisible){var n=void 0;this.clickOutsideHandler||!this.isClickToHide()&&!this.isContextmenuToShow()||(n=e.getDocument(),this.clickOutsideHandler=(0,d.A)(n,"mousedown",this.onDocumentClick)),this.touchOutsideHandler||(n=n||e.getDocument(),this.touchOutsideHandler=(0,d.A)(n,"touchstart",this.onDocumentClick)),!this.contextmenuOutsideHandler1&&this.isContextmenuToShow()&&(n=n||e.getDocument(),this.contextmenuOutsideHandler1=(0,d.A)(n,"scroll",this.onContextmenuClose)),!this.contextmenuOutsideHandler2&&this.isContextmenuToShow()&&(this.contextmenuOutsideHandler2=(0,d.A)(window,"blur",this.onContextmenuClose))}else this.clearOutsideHandler()},onMouseenter:function(e){var t=this.$props.mouseEnterDelay;this.fireEvents("mouseenter",e),this.delaySetPopupVisible(!0,t,t?null:e)},onMouseMove:function(e){this.fireEvents("mousemove",e),this.setPoint(e)},onMouseleave:function(e){this.fireEvents("mouseleave",e),this.delaySetPopupVisible(!1,this.$props.mouseLeaveDelay)},onPopupMouseenter:function(){this.clearDelayTimer()},onPopupMouseleave:function(e){e&&e.relatedTarget&&!e.relatedTarget.setTimeout&&this._component&&this._component.getPopupDomNode&&(0,c.A)(this._component.getPopupDomNode(),e.relatedTarget)||this.delaySetPopupVisible(!1,this.$props.mouseLeaveDelay)},onFocus:function(e){this.fireEvents("focus",e),this.clearDelayTimer(),this.isFocusToShow()&&(this.focusTime=Date.now(),this.delaySetPopupVisible(!0,this.$props.focusDelay))},onMousedown:function(e){this.fireEvents("mousedown",e),this.preClickTime=Date.now()},onTouchstart:function(e){this.fireEvents("touchstart",e),this.preTouchTime=Date.now()},onBlur:function(e){(0,c.A)(e.target,e.relatedTarget||document.activeElement)||(this.fireEvents("blur",e),this.clearDelayTimer(),this.isBlurToHide()&&this.delaySetPopupVisible(!1,this.$props.blurDelay))},onContextmenu:function(e){e.preventDefault(),this.fireEvents("contextmenu",e),this.setPopupVisible(!0,e)},onContextmenuClose:function(){this.isContextmenuToShow()&&this.close()},onClick:function(e){if(this.fireEvents("click",e),this.focusTime){var t=void 0;if(this.preClickTime&&this.preTouchTime?t=Math.min(this.preClickTime,this.preTouchTime):this.preClickTime?t=this.preClickTime:this.preTouchTime&&(t=this.preTouchTime),Math.abs(t-this.focusTime)<20)return;this.focusTime=0}this.preClickTime=0,this.preTouchTime=0,this.isClickToShow()&&(this.isClickToHide()||this.isBlurToHide())&&e&&e.preventDefault&&e.preventDefault(),e&&e.domEvent&&e.domEvent.preventDefault();var n=!this.$data.sPopupVisible;(this.isClickToHide()&&!n||n&&this.isClickToShow())&&this.setPopupVisible(!this.$data.sPopupVisible,e)},onPopupMouseDown:function(){var e=this,t=this.vcTriggerContext,n=void 0===t?{}:t;this.hasPopupMouseDown=!0,clearTimeout(this.mouseDownTimeout),this.mouseDownTimeout=setTimeout(function(){e.hasPopupMouseDown=!1},0),n.onPopupMouseDown&&n.onPopupMouseDown.apply(n,arguments)},onDocumentClick:function(e){if(!this.$props.mask||this.$props.maskClosable){var t=e.target,n=this.$el;(0,c.A)(n,t)||this.hasPopupMouseDown||this.close()}},getPopupDomNode:function(){return this._component&&this._component.getPopupDomNode?this._component.getPopupDomNode():null},getRootDomNode:function(){return this.$el},handleGetPopupClassFromAlign:function(e){var t=[],n=this.$props,r=n.popupPlacement,i=n.builtinPlacements,o=n.prefixCls,a=n.alignPoint,s=n.getPopupClassNameFromAlign;return r&&i&&t.push(nt(i,o,e,a)),s&&t.push(s(e)),t.join(" ")},getPopupAlign:function(){var e=this.$props,t=e.popupPlacement,n=e.popupAlign,r=e.builtinPlacements;return t&&r?tt(r,t,n):n},savePopup:function(e){this._component=e,this.savePopupRef(e)},getComponent:function(){var e=this.$createElement,t=this,n={};this.isMouseEnterToShow()&&(n.mouseenter=t.onPopupMouseenter),this.isMouseLeaveToHide()&&(n.mouseleave=t.onPopupMouseleave),n.mousedown=this.onPopupMouseDown,n.touchstart=this.onPopupMouseDown;var r=t.handleGetPopupClassFromAlign,o=t.getRootDomNode,a=t.getContainer,s=t.$props,c=s.prefixCls,u=s.destroyPopupOnHide,d=s.popupClassName,h=s.action,f=s.popupAnimation,p=s.popupTransitionName,m=s.popupStyle,v=s.mask,g=s.maskAnimation,y=s.maskTransitionName,_=s.zIndex,b=s.stretch,M=s.alignPoint,A=this.$data,w=A.sPopupVisible,x=A.point,k=this.getPopupAlign(),L={props:{prefixCls:c,destroyPopupOnHide:u,visible:w,point:M&&x,action:h,align:k,animation:f,getClassNameFromAlign:r,stretch:b,getRootDomNode:o,mask:v,zIndex:_,transitionName:p,maskAnimation:g,maskTransitionName:y,getContainer:a,popupClassName:d,popupStyle:m},on:(0,i.A)({align:(0,l.WM)(this).popupAlign||rt},n),directives:[{name:"ant-ref",value:this.savePopup}]};return e(Qe,L,[(0,l.nu)(t,"popup")])},getContainer:function(){var e=this.$props,t=this.dialogContext,n=document.createElement("div");n.style.position="absolute",n.style.top="0",n.style.left="0",n.style.width="100%";var r=e.getPopupContainer?e.getPopupContainer(this.$el,t):e.getDocument().body;return r.appendChild(n),this.popupContainer=n,n},setPopupVisible:function(e,t){var n=this.alignPoint,r=this.sPopupVisible;if(this.clearDelayTimer(),r!==e){(0,l.cK)(this,"popupVisible")||this.setState({sPopupVisible:e,prevPopupVisible:r});var i=(0,l.WM)(this);i.popupVisibleChange&&i.popupVisibleChange(e)}n&&t&&this.setPoint(t)},setPoint:function(e){var t=this.$props.alignPoint;t&&e&&this.setState({point:{pageX:e.pageX,pageY:e.pageY}})},delaySetPopupVisible:function(e,t,n){var r=this,i=1e3*t;if(this.clearDelayTimer(),i){var o=n?{pageX:n.pageX,pageY:n.pageY}:null;this.delayTimer=(0,u.z)(function(){r.setPopupVisible(e,o),r.clearDelayTimer()},i)}else this.setPopupVisible(e,n)},clearDelayTimer:function(){this.delayTimer&&((0,u.q)(this.delayTimer),this.delayTimer=null)},clearOutsideHandler:function(){this.clickOutsideHandler&&(this.clickOutsideHandler.remove(),this.clickOutsideHandler=null),this.contextmenuOutsideHandler1&&(this.contextmenuOutsideHandler1.remove(),this.contextmenuOutsideHandler1=null),this.contextmenuOutsideHandler2&&(this.contextmenuOutsideHandler2.remove(),this.contextmenuOutsideHandler2=null),this.touchOutsideHandler&&(this.touchOutsideHandler.remove(),this.touchOutsideHandler=null)},createTwoChains:function(e){var t=function(){},n=(0,l.WM)(this);return this.childOriginEvents[e]&&n[e]?this["fire"+e]:(t=this.childOriginEvents[e]||n[e]||t,t)},isClickToShow:function(){var e=this.$props,t=e.action,n=e.showAction;return-1!==t.indexOf("click")||-1!==n.indexOf("click")},isContextmenuToShow:function(){var e=this.$props,t=e.action,n=e.showAction;return-1!==t.indexOf("contextmenu")||-1!==n.indexOf("contextmenu")},isClickToHide:function(){var e=this.$props,t=e.action,n=e.hideAction;return-1!==t.indexOf("click")||-1!==n.indexOf("click")},isMouseEnterToShow:function(){var e=this.$props,t=e.action,n=e.showAction;return-1!==t.indexOf("hover")||-1!==n.indexOf("mouseenter")},isMouseLeaveToHide:function(){var e=this.$props,t=e.action,n=e.hideAction;return-1!==t.indexOf("hover")||-1!==n.indexOf("mouseleave")},isFocusToShow:function(){var e=this.$props,t=e.action,n=e.showAction;return-1!==t.indexOf("focus")||-1!==n.indexOf("focus")},isBlurToHide:function(){var e=this.$props,t=e.action,n=e.hideAction;return-1!==t.indexOf("focus")||-1!==n.indexOf("blur")},forcePopupAlign:function(){this.$data.sPopupVisible&&this._component&&this._component.$refs.alignInstance&&this._component.$refs.alignInstance.forceAlign()},fireEvents:function(e,t){this.childOriginEvents[e]&&this.childOriginEvents[e](t),this.__emit(e,t)},close:function(){this.setPopupVisible(!1)}},render:function(){var e=this,t=arguments[0],n=this.sPopupVisible,r=(0,l.Gk)(this.$slots["default"]),i=this.$props,o=i.forceRender,a=i.alignPoint;r.length>1&&(0,h.A)(!1,"Trigger $slots.default.length > 1, just support only one default",!0);var s=r[0];this.childOriginEvents=(0,l.i5)(s);var u={props:{},nativeOn:{},key:"trigger"};return this.isContextmenuToShow()?u.nativeOn.contextmenu=this.onContextmenu:u.nativeOn.contextmenu=this.createTwoChains("contextmenu"),this.isClickToHide()||this.isClickToShow()?(u.nativeOn.click=this.onClick,u.nativeOn.mousedown=this.onMousedown,u.nativeOn.touchstart=this.onTouchstart):(u.nativeOn.click=this.createTwoChains("click"),u.nativeOn.mousedown=this.createTwoChains("mousedown"),u.nativeOn.touchstart=this.createTwoChains("onTouchstart")),this.isMouseEnterToShow()?(u.nativeOn.mouseenter=this.onMouseenter,a&&(u.nativeOn.mousemove=this.onMouseMove)):u.nativeOn.mouseenter=this.createTwoChains("mouseenter"),this.isMouseLeaveToHide()?u.nativeOn.mouseleave=this.onMouseleave:u.nativeOn.mouseleave=this.createTwoChains("mouseleave"),this.isFocusToShow()||this.isBlurToHide()?(u.nativeOn.focus=this.onFocus,u.nativeOn.blur=this.onBlur):(u.nativeOn.focus=this.createTwoChains("focus"),u.nativeOn.blur=function(t){!t||t.relatedTarget&&(0,c.A)(t.target,t.relatedTarget)||e.createTwoChains("blur")(t)}),this.trigger=(0,Ie.Ob)(s,u),t(it,{attrs:{parent:this,visible:n,autoMount:!1,forceRender:o,getComponent:this.getComponent,getContainer:this.getContainer,children:function(t){var n=t.renderComponent;return e.renderComponent=n,e.trigger}}})}},lt=ct},82160:function(e,t,n){"use strict";n.d(t,{A:function(){return o}});var r=n(32223),i=n.n(r);function o(e,t,n,r){return i()(e,t,n,r)}},17948:function(e,t,n){"use strict";function r(e,t){var n=t;while(n){if(n===e)return!0;n=n.parentNode}return!1}n.d(t,{A:function(){return r}})},32173:function(e,t){"use strict";function n(){return n=Object.assign||function(e){for(var t=1;t=o)return e;switch(e){case"%s":return String(t[r++]);case"%d":return Number(t[r++]);case"%j":try{return JSON.stringify(t[r++])}catch(n){return"[Circular]"}default:return e}});return a}return i}function p(e){return"string"===e||"url"===e||"hex"===e||"email"===e||"date"===e||"pattern"===e}function m(e,t){return void 0===e||null===e||(!("array"!==t||!Array.isArray(e)||e.length)||!(!p(t)||"string"!==typeof e||e))}function v(e,t,n){var r=[],i=0,o=e.length;function a(e){r.push.apply(r,e),i++,i===o&&n(r)}e.forEach(function(e){t(e,a)})}function g(e,t,n){var r=0,i=e.length;function o(a){if(a&&a.length)n(a);else{var s=r;r+=1,s()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,url:new RegExp("^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$","i"),hex:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/i},L={integer:function(e){return L.number(e)&&parseInt(e,10)===e},float:function(e){return L.number(e)&&!L.integer(e)},array:function(e){return Array.isArray(e)},regexp:function(e){if(e instanceof RegExp)return!0;try{return!!new RegExp(e)}catch(t){return!1}},date:function(e){return"function"===typeof e.getTime&&"function"===typeof e.getMonth&&"function"===typeof e.getYear&&!isNaN(e.getTime())},number:function(e){return!isNaN(e)&&"number"===typeof e},object:function(e){return"object"===typeof e&&!L.array(e)},method:function(e){return"function"===typeof e},email:function(e){return"string"===typeof e&&!!e.match(k.email)&&e.length<255},url:function(e){return"string"===typeof e&&!!e.match(k.url)},hex:function(e){return"string"===typeof e&&!!e.match(k.hex)}};function C(e,t,n,r,i){if(e.required&&void 0===t)w(e,t,n,r,i);else{var o=["integer","float","array","regexp","object","method","email","number","date","url","hex"],a=e.type;o.indexOf(a)>-1?L[a](t)||r.push(f(i.messages.types[a],e.fullField,e.type)):a&&typeof t!==e.type&&r.push(f(i.messages.types[a],e.fullField,e.type))}}function S(e,t,n,r,i){var o="number"===typeof e.len,a="number"===typeof e.min,s="number"===typeof e.max,c=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,l=t,u=null,d="number"===typeof t,h="string"===typeof t,p=Array.isArray(t);if(d?u="number":h?u="string":p&&(u="array"),!u)return!1;p&&(l=t.length),h&&(l=t.replace(c,"_").length),o?l!==e.len&&r.push(f(i.messages[u].len,e.fullField,e.len)):a&&!s&&le.max?r.push(f(i.messages[u].max,e.fullField,e.max)):a&&s&&(le.max)&&r.push(f(i.messages[u].range,e.fullField,e.min,e.max))}var z="enum";function T(e,t,n,r,i){e[z]=Array.isArray(e[z])?e[z]:[],-1===e[z].indexOf(t)&&r.push(f(i.messages[z],e.fullField,e[z].join(", ")))}function O(e,t,n,r,i){if(e.pattern)if(e.pattern instanceof RegExp)e.pattern.lastIndex=0,e.pattern.test(t)||r.push(f(i.messages.pattern.mismatch,e.fullField,t,e.pattern));else if("string"===typeof e.pattern){var o=new RegExp(e.pattern);o.test(t)||r.push(f(i.messages.pattern.mismatch,e.fullField,t,e.pattern))}}var H={required:w,whitespace:x,type:C,range:S,enum:T,pattern:O};function D(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t,"string")&&!e.required)return n();H.required(e,t,r,o,i,"string"),m(t,"string")||(H.type(e,t,r,o,i),H.range(e,t,r,o,i),H.pattern(e,t,r,o,i),!0===e.whitespace&&H.whitespace(e,t,r,o,i))}n(o)}function Y(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();H.required(e,t,r,o,i),void 0!==t&&H.type(e,t,r,o,i)}n(o)}function V(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(""===t&&(t=void 0),m(t)&&!e.required)return n();H.required(e,t,r,o,i),void 0!==t&&(H.type(e,t,r,o,i),H.range(e,t,r,o,i))}n(o)}function P(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();H.required(e,t,r,o,i),void 0!==t&&H.type(e,t,r,o,i)}n(o)}function E(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();H.required(e,t,r,o,i),m(t)||H.type(e,t,r,o,i)}n(o)}function j(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();H.required(e,t,r,o,i),void 0!==t&&(H.type(e,t,r,o,i),H.range(e,t,r,o,i))}n(o)}function F(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();H.required(e,t,r,o,i),void 0!==t&&(H.type(e,t,r,o,i),H.range(e,t,r,o,i))}n(o)}function I(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if((void 0===t||null===t)&&!e.required)return n();H.required(e,t,r,o,i,"array"),void 0!==t&&null!==t&&(H.type(e,t,r,o,i),H.range(e,t,r,o,i))}n(o)}function $(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();H.required(e,t,r,o,i),void 0!==t&&H.type(e,t,r,o,i)}n(o)}var R="enum";function N(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();H.required(e,t,r,o,i),void 0!==t&&H[R](e,t,r,o,i)}n(o)}function W(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t,"string")&&!e.required)return n();H.required(e,t,r,o,i),m(t,"string")||H.pattern(e,t,r,o,i)}n(o)}function B(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t,"date")&&!e.required)return n();var s;if(H.required(e,t,r,o,i),!m(t,"date"))s=t instanceof Date?t:new Date(t),H.type(e,s,r,o,i),s&&H.range(e,s.getTime(),r,o,i)}n(o)}function K(e,t,n,r,i){var o=[],a=Array.isArray(t)?"array":typeof t;H.required(e,t,r,o,i,a),n(o)}function U(e,t,n,r,i){var o=e.type,a=[],s=e.required||!e.required&&r.hasOwnProperty(e.field);if(s){if(m(t,o)&&!e.required)return n();H.required(e,t,r,a,i,o),m(t,o)||H.type(e,t,r,a,i)}n(a)}function q(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();H.required(e,t,r,o,i)}n(o)}var G={string:D,method:Y,number:V,boolean:P,regexp:E,integer:j,float:F,array:I,object:$,enum:N,pattern:W,date:B,url:U,hex:U,email:U,required:K,any:q};function J(){return{default:"Validation error on field %s",required:"%s is required",enum:"%s must be one of %s",whitespace:"%s cannot be empty",date:{format:"%s date %s is invalid for format %s",parse:"%s date could not be parsed, %s is invalid ",invalid:"%s date %s is invalid"},types:{string:"%s is not a %s",method:"%s is not a %s (function)",array:"%s is not an %s",object:"%s is not an %s",number:"%s is not a %s",date:"%s is not a %s",boolean:"%s is not a %s",integer:"%s is not an %s",float:"%s is not a %s",regexp:"%s is not a valid %s",email:"%s is not a valid %s",url:"%s is not a valid %s",hex:"%s is not a valid %s"},string:{len:"%s must be exactly %s characters",min:"%s must be at least %s characters",max:"%s cannot be longer than %s characters",range:"%s must be between %s and %s characters"},number:{len:"%s must equal %s",min:"%s cannot be less than %s",max:"%s cannot be greater than %s",range:"%s must be between %s and %s"},array:{len:"%s must be exactly %s in length",min:"%s cannot be less than %s in length",max:"%s cannot be greater than %s in length",range:"%s must be between %s and %s in length"},pattern:{mismatch:"%s value %s does not match pattern %s"},clone:function(){var e=JSON.parse(JSON.stringify(this));return e.clone=this.clone,e}}}var X=J();function Z(e){this.rules=null,this._messages=X,this.define(e)}Z.prototype={messages:function(e){return e&&(this._messages=A(J(),e)),this._messages},define:function(e){if(!e)throw new Error("Cannot configure a schema with no rules");if("object"!==typeof e||Array.isArray(e))throw new Error("Rules must be an object");var t,n;for(t in this.rules={},e)e.hasOwnProperty(t)&&(n=e[t],this.rules[t]=Array.isArray(n)?n:[n])},validate:function(e,t,r){var i=this;void 0===t&&(t={}),void 0===r&&(r=function(){});var o,a,s=e,c=t,l=r;if("function"===typeof c&&(l=c,c={}),!this.rules||0===Object.keys(this.rules).length)return l&&l(),Promise.resolve();function u(e){var t,n=[],r={};function i(e){var t;Array.isArray(e)?n=(t=n).concat.apply(t,e):n.push(e)}for(t=0;t=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};r.forEach(["delete","get","head"],function(e){d.headers[e]={}}),r.forEach(["post","put","patch"],function(e){d.headers[e]=r.merge(s)}),e.exports=d},94896:function(e){"use strict";e.exports={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1}},49641:function(e){e.exports={version:"0.26.1"}},69012:function(e){"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r=0)return;a[t]="set-cookie"===t?(a[t]?a[t]:[]).concat([n]):a[t]?a[t]+", "+n:n}}),a):a}},17980:function(e){"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}},34841:function(e,t,n){"use strict";var r=n(49641).version,i={};["object","boolean","number","function","string","symbol"].forEach(function(e,t){i[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}});var o={};function a(e,t,n){if("object"!==typeof e)throw new TypeError("options must be an object");var r=Object.keys(e),i=r.length;while(i-- >0){var o=r[i],a=t[o];if(a){var s=e[o],c=void 0===s||a(s,o,e);if(!0!==c)throw new TypeError("option "+o+" must be "+c)}else if(!0!==n)throw Error("Unknown option "+o)}}i.transitional=function(e,t,n){function i(e,t){return"[Axios v"+r+"] Transitional option '"+e+"'"+t+(n?". "+n:"")}return function(n,r,a){if(!1===e)throw new Error(i(r," has been removed"+(t?" in "+t:"")));return t&&!o[r]&&(o[r]=!0,console.warn(i(r," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,r,a)}},e.exports={assertOptions:a,validators:i}},9516:function(e,t,n){"use strict";var r=n(69012),i=Object.prototype.toString;function o(e){return Array.isArray(e)}function a(e){return"undefined"===typeof e}function s(e){return null!==e&&!a(e)&&null!==e.constructor&&!a(e.constructor)&&"function"===typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}function c(e){return"[object ArrayBuffer]"===i.call(e)}function l(e){return"[object FormData]"===i.call(e)}function u(e){var t;return t="undefined"!==typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&c(e.buffer),t}function d(e){return"string"===typeof e}function h(e){return"number"===typeof e}function f(e){return null!==e&&"object"===typeof e}function p(e){if("[object Object]"!==i.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function m(e){return"[object Date]"===i.call(e)}function v(e){return"[object File]"===i.call(e)}function g(e){return"[object Blob]"===i.call(e)}function y(e){return"[object Function]"===i.call(e)}function _(e){return f(e)&&y(e.pipe)}function b(e){return"[object URLSearchParams]"===i.call(e)}function M(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}function A(){return("undefined"===typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!==typeof window&&"undefined"!==typeof document)}function w(e,t){if(null!==e&&"undefined"!==typeof e)if("object"!==typeof e&&(e=[e]),o(e))for(var n=0,r=e.length;n=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}},52040:function(e,t,n){"use strict";var r=n(3053),i=s(r),o=n(4123),a=s(o);function s(e){return e&&e.__esModule?e:{default:e}}t.A=function(){function e(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var s,c=(0,a.default)(e);!(r=(s=c.next()).done);r=!0)if(n.push(s.value),t&&n.length===t)break}catch(l){i=!0,o=l}finally{try{!r&&c["return"]&&c["return"]()}finally{if(i)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if((0,i.default)(Object(t)))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()},32779:function(e,t,n){"use strict";var r=n(9780),i=o(r);function o(e){return e&&e.__esModule?e:{default:e}}t.A=function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tu)if(s=c[u++],s!=s)return!0}else for(;l>u;u++)if((e||u in c)&&c[u]===n)return e||u||0;return!e&&-1}}},13383:function(e,t,n){var r=n(64194),i=n(15413)("toStringTag"),o="Arguments"==r(function(){return arguments}()),a=function(e,t){try{return e[t]}catch(n){}};e.exports=function(e){var t,n,s;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=a(t=Object(e),i))?n:o?r(t):"Object"==(s=r(t))&&"function"==typeof t.callee?"Arguments":s}},64194:function(e){var t={}.toString;e.exports=function(e){return t.call(e).slice(8,-1)}},6791:function(e){var t=e.exports={version:"2.6.12"};"number"==typeof __e&&(__e=t)},64284:function(e,t,n){"use strict";var r=n(21672),i=n(15495);e.exports=function(e,t,n){t in e?r.f(e,t,i(0,n)):e[t]=n}},33971:function(e,t,n){var r=n(73934);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,i){return e.call(t,n,r,i)}}return function(){return e.apply(t,arguments)}}},54947:function(e){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},75872:function(e,t,n){e.exports=!n(82451)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},50559:function(e,t,n){var r=n(90326),i=n(56903).document,o=r(i)&&r(i.createElement);e.exports=function(e){return o?i.createElement(e):{}}},22499:function(e){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},76358:function(e,t,n){var r=n(64796),i=n(14259),o=n(98936);e.exports=function(e){var t=r(e),n=i.f;if(n){var a,s=n(e),c=o.f,l=0;while(s.length>l)c.call(e,a=s[l++])&&t.push(a)}return t}},19786:function(e,t,n){var r=n(56903),i=n(6791),o=n(33971),a=n(14632),s=n(43066),c="prototype",l=function(e,t,n){var u,d,h,f=e&l.F,p=e&l.G,m=e&l.S,v=e&l.P,g=e&l.B,y=e&l.W,_=p?i:i[t]||(i[t]={}),b=_[c],M=p?r:m?r[t]:(r[t]||{})[c];for(u in p&&(n=t),n)d=!f&&M&&void 0!==M[u],d&&s(_,u)||(h=d?M[u]:n[u],_[u]=p&&"function"!=typeof M[u]?n[u]:g&&d?o(h,r):y&&M[u]==h?function(e){var t=function(t,n,r){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n)}return new e(t,n,r)}return e.apply(this,arguments)};return t[c]=e[c],t}(h):v&&"function"==typeof h?o(Function.call,h):h,v&&((_.virtual||(_.virtual={}))[u]=h,e&l.R&&b&&!b[u]&&a(b,u,h)))};l.F=1,l.G=2,l.S=4,l.P=8,l.B=16,l.W=32,l.U=64,l.R=128,e.exports=l},82451:function(e){e.exports=function(e){try{return!!e()}catch(t){return!0}}},56903:function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)},43066:function(e){var t={}.hasOwnProperty;e.exports=function(e,n){return t.call(e,n)}},14632:function(e,t,n){var r=n(21672),i=n(15495);e.exports=n(75872)?function(e,t,n){return r.f(e,t,i(1,n))}:function(e,t,n){return e[t]=n,e}},7745:function(e,t,n){var r=n(56903).document;e.exports=r&&r.documentElement},14913:function(e,t,n){e.exports=!n(75872)&&!n(82451)(function(){return 7!=Object.defineProperty(n(50559)("div"),"a",{get:function(){return 7}}).a})},63278:function(e,t,n){var r=n(64194);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},6471:function(e,t,n){var r=n(52833),i=n(15413)("iterator"),o=Array.prototype;e.exports=function(e){return void 0!==e&&(r.Array===e||o[i]===e)}},1084:function(e,t,n){var r=n(64194);e.exports=Array.isArray||function(e){return"Array"==r(e)}},90326:function(e){e.exports=function(e){return"object"===typeof e?null!==e:"function"===typeof e}},275:function(e,t,n){var r=n(90531);e.exports=function(e,t,n,i){try{return i?t(r(n)[0],n[1]):t(n)}catch(a){var o=e["return"];throw void 0!==o&&r(o.call(e)),a}}},81199:function(e,t,n){"use strict";var r=n(67780),i=n(15495),o=n(1123),a={};n(14632)(a,n(15413)("iterator"),function(){return this}),e.exports=function(e,t,n){e.prototype=r(a,{next:i(1,n)}),o(e,t+" Iterator")}},52500:function(e,t,n){"use strict";var r=n(98849),i=n(19786),o=n(83070),a=n(14632),s=n(52833),c=n(81199),l=n(1123),u=n(66870),d=n(15413)("iterator"),h=!([].keys&&"next"in[].keys()),f="@@iterator",p="keys",m="values",v=function(){return this};e.exports=function(e,t,n,g,y,_,b){c(n,t,g);var M,A,w,x=function(e){if(!h&&e in S)return S[e];switch(e){case p:return function(){return new n(this,e)};case m:return function(){return new n(this,e)}}return function(){return new n(this,e)}},k=t+" Iterator",L=y==m,C=!1,S=e.prototype,z=S[d]||S[f]||y&&S[y],T=z||x(y),O=y?L?x("entries"):T:void 0,H="Array"==t&&S.entries||z;if(H&&(w=u(H.call(new e)),w!==Object.prototype&&w.next&&(l(w,k,!0),r||"function"==typeof w[d]||a(w,d,v))),L&&z&&z.name!==m&&(C=!0,T=function(){return z.call(this)}),r&&!b||!h&&!C&&S[d]||a(S,d,T),s[t]=T,s[k]=v,y)if(M={values:L?T:x(m),keys:_?T:x(p),entries:O},b)for(A in M)A in S||o(S,A,M[A]);else i(i.P+i.F*(h||C),t,M);return M}},26928:function(e,t,n){var r=n(15413)("iterator"),i=!1;try{var o=[7][r]();o["return"]=function(){i=!0},Array.from(o,function(){throw 2})}catch(a){}e.exports=function(e,t){if(!t&&!i)return!1;var n=!1;try{var o=[7],s=o[r]();s.next=function(){return{done:n=!0}},o[r]=function(){return s},e(o)}catch(a){}return n}},35945:function(e){e.exports=function(e,t){return{value:t,done:!!e}}},52833:function(e){e.exports={}},98849:function(e){e.exports=!0},83281:function(e,t,n){var r=n(93108)("meta"),i=n(90326),o=n(43066),a=n(21672).f,s=0,c=Object.isExtensible||function(){return!0},l=!n(82451)(function(){return c(Object.preventExtensions({}))}),u=function(e){a(e,r,{value:{i:"O"+ ++s,w:{}}})},d=function(e,t){if(!i(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!o(e,r)){if(!c(e))return"F";if(!t)return"E";u(e)}return e[r].i},h=function(e,t){if(!o(e,r)){if(!c(e))return!0;if(!t)return!1;u(e)}return e[r].w},f=function(e){return l&&p.NEED&&c(e)&&!o(e,r)&&u(e),e},p=e.exports={KEY:r,NEED:!1,fastKey:d,getWeak:h,onFreeze:f}},99369:function(e,t,n){"use strict";var r=n(75872),i=n(64796),o=n(14259),a=n(98936),s=n(64873),c=n(63278),l=Object.assign;e.exports=!l||n(82451)(function(){var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach(function(e){t[e]=e}),7!=l({},e)[n]||Object.keys(l({},t)).join("")!=r})?function(e,t){var n=s(e),l=arguments.length,u=1,d=o.f,h=a.f;while(l>u){var f,p=c(arguments[u++]),m=d?i(p).concat(d(p)):i(p),v=m.length,g=0;while(v>g)f=m[g++],r&&!h.call(p,f)||(n[f]=p[f])}return n}:l},67780:function(e,t,n){var r=n(90531),i=n(6935),o=n(22499),a=n(36211)("IE_PROTO"),s=function(){},c="prototype",l=function(){var e,t=n(50559)("iframe"),r=o.length,i="<",a=">";t.style.display="none",n(7745).appendChild(t),t.src="javascript:",e=t.contentWindow.document,e.open(),e.write(i+"script"+a+"document.F=Object"+i+"/script"+a),e.close(),l=e.F;while(r--)delete l[c][o[r]];return l()};e.exports=Object.create||function(e,t){var n;return null!==e?(s[c]=r(e),n=new s,s[c]=null,n[a]=e):n=l(),void 0===t?n:i(n,t)}},21672:function(e,t,n){var r=n(90531),i=n(14913),o=n(78381),a=Object.defineProperty;t.f=n(75872)?Object.defineProperty:function(e,t,n){if(r(e),t=o(t,!0),r(n),i)try{return a(e,t,n)}catch(s){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},6935:function(e,t,n){var r=n(21672),i=n(90531),o=n(64796);e.exports=n(75872)?Object.defineProperties:function(e,t){i(e);var n,a=o(t),s=a.length,c=0;while(s>c)r.f(e,n=a[c++],t[n]);return e}},22682:function(e,t,n){var r=n(98936),i=n(15495),o=n(69204),a=n(78381),s=n(43066),c=n(14913),l=Object.getOwnPropertyDescriptor;t.f=n(75872)?l:function(e,t){if(e=o(e),t=a(t,!0),c)try{return l(e,t)}catch(n){}if(s(e,t))return i(!r.f.call(e,t),e[t])}},37106:function(e,t,n){var r=n(69204),i=n(79032).f,o={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(e){try{return i(e)}catch(t){return a.slice()}};e.exports.f=function(e){return a&&"[object Window]"==o.call(e)?s(e):i(r(e))}},79032:function(e,t,n){var r=n(59480),i=n(22499).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return r(e,i)}},14259:function(e,t){t.f=Object.getOwnPropertySymbols},66870:function(e,t,n){var r=n(43066),i=n(64873),o=n(36211)("IE_PROTO"),a=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=i(e),r(e,o)?e[o]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?a:null}},59480:function(e,t,n){var r=n(43066),i=n(69204),o=n(73901)(!1),a=n(36211)("IE_PROTO");e.exports=function(e,t){var n,s=i(e),c=0,l=[];for(n in s)n!=a&&r(s,n)&&l.push(n);while(t.length>c)r(s,n=t[c++])&&(~o(l,n)||l.push(n));return l}},64796:function(e,t,n){var r=n(59480),i=n(22499);e.exports=Object.keys||function(e){return r(e,i)}},98936:function(e,t){t.f={}.propertyIsEnumerable},15495:function(e){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},83070:function(e,t,n){e.exports=n(14632)},1123:function(e,t,n){var r=n(21672).f,i=n(43066),o=n(15413)("toStringTag");e.exports=function(e,t,n){e&&!i(e=n?e:e.prototype,o)&&r(e,o,{configurable:!0,value:t})}},36211:function(e,t,n){var r=n(7421)("keys"),i=n(93108);e.exports=function(e){return r[e]||(r[e]=i(e))}},7421:function(e,t,n){var r=n(6791),i=n(56903),o="__core-js_shared__",a=i[o]||(i[o]={});(e.exports=function(e,t){return a[e]||(a[e]=void 0!==t?t:{})})("versions",[]).push({version:r.version,mode:n(98849)?"pure":"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})},29491:function(e,t,n){var r=n(43570),i=n(54947);e.exports=function(e){return function(t,n){var o,a,s=String(i(t)),c=r(n),l=s.length;return c<0||c>=l?e?"":void 0:(o=s.charCodeAt(c),o<55296||o>56319||c+1===l||(a=s.charCodeAt(c+1))<56320||a>57343?e?s.charAt(c):o:e?s.slice(c,c+2):a-56320+(o-55296<<10)+65536)}}},8830:function(e,t,n){var r=n(43570),i=Math.max,o=Math.min;e.exports=function(e,t){return e=r(e),e<0?i(e+t,0):o(e,t)}},43570:function(e){var t=Math.ceil,n=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?n:t)(e)}},69204:function(e,t,n){var r=n(63278),i=n(54947);e.exports=function(e){return r(i(e))}},9250:function(e,t,n){var r=n(43570),i=Math.min;e.exports=function(e){return e>0?i(r(e),9007199254740991):0}},64873:function(e,t,n){var r=n(54947);e.exports=function(e){return Object(r(e))}},78381:function(e,t,n){var r=n(90326);e.exports=function(e,t){if(!r(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!r(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")}},93108:function(e){var t=0,n=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++t+n).toString(36))}},62613:function(e,t,n){var r=n(56903),i=n(6791),o=n(98849),a=n(1275),s=n(21672).f;e.exports=function(e){var t=i.Symbol||(i.Symbol=o?{}:r.Symbol||{});"_"==e.charAt(0)||e in t||s(t,e,{value:a.f(e)})}},1275:function(e,t,n){t.f=n(15413)},15413:function(e,t,n){var r=n(7421)("wks"),i=n(93108),o=n(56903).Symbol,a="function"==typeof o,s=e.exports=function(e){return r[e]||(r[e]=a&&o[e]||(a?o:i)("Symbol."+e))};s.store=r},18573:function(e,t,n){var r=n(13383),i=n(15413)("iterator"),o=n(52833);e.exports=n(6791).getIteratorMethod=function(e){if(void 0!=e)return e[i]||e["@@iterator"]||o[r(e)]}},23779:function(e,t,n){var r=n(90531),i=n(18573);e.exports=n(6791).getIterator=function(e){var t=i(e);if("function"!=typeof t)throw TypeError(e+" is not iterable!");return r(t.call(e))}},4693:function(e,t,n){var r=n(13383),i=n(15413)("iterator"),o=n(52833);e.exports=n(6791).isIterable=function(e){var t=Object(e);return void 0!==t[i]||"@@iterator"in t||o.hasOwnProperty(r(t))}},32160:function(e,t,n){"use strict";var r=n(33971),i=n(19786),o=n(64873),a=n(275),s=n(6471),c=n(9250),l=n(64284),u=n(18573);i(i.S+i.F*!n(26928)(function(e){Array.from(e)}),"Array",{from:function(e){var t,n,i,d,h=o(e),f="function"==typeof this?this:Array,p=arguments.length,m=p>1?arguments[1]:void 0,v=void 0!==m,g=0,y=u(h);if(v&&(m=r(m,p>2?arguments[2]:void 0,2)),void 0==y||f==Array&&s(y))for(t=c(h.length),n=new f(t);t>g;g++)l(n,g,v?m(h[g],g):h[g]);else for(d=y.call(h),n=new f;!(i=d.next()).done;g++)l(n,g,v?a(d,m,[i.value,g],!0):i.value);return n.length=g,n}})},45270:function(e,t,n){"use strict";var r=n(64233),i=n(35945),o=n(52833),a=n(69204);e.exports=n(52500)(Array,"Array",function(e,t){this._t=a(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,i(1)):i(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])},"values"),o.Arguments=o.Array,r("keys"),r("values"),r("entries")},79115:function(e,t,n){var r=n(19786);r(r.S+r.F,"Object",{assign:n(99369)})},82919:function(e,t,n){var r=n(19786);r(r.S+r.F*!n(75872),"Object",{defineProperty:n(21672).f})},44345:function(){},78750:function(e,t,n){"use strict";var r=n(29491)(!0);n(52500)(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=r(t,n),this._i+=e.length,{value:e,done:!1})})},28957:function(e,t,n){"use strict";var r=n(56903),i=n(43066),o=n(75872),a=n(19786),s=n(83070),c=n(83281).KEY,l=n(82451),u=n(7421),d=n(1123),h=n(93108),f=n(15413),p=n(1275),m=n(62613),v=n(76358),g=n(1084),y=n(90531),_=n(90326),b=n(64873),M=n(69204),A=n(78381),w=n(15495),x=n(67780),k=n(37106),L=n(22682),C=n(14259),S=n(21672),z=n(64796),T=L.f,O=S.f,H=k.f,D=r.Symbol,Y=r.JSON,V=Y&&Y.stringify,P="prototype",E=f("_hidden"),j=f("toPrimitive"),F={}.propertyIsEnumerable,I=u("symbol-registry"),$=u("symbols"),R=u("op-symbols"),N=Object[P],W="function"==typeof D&&!!C.f,B=r.QObject,K=!B||!B[P]||!B[P].findChild,U=o&&l(function(){return 7!=x(O({},"a",{get:function(){return O(this,"a",{value:7}).a}})).a})?function(e,t,n){var r=T(N,t);r&&delete N[t],O(e,t,n),r&&e!==N&&O(N,t,r)}:O,q=function(e){var t=$[e]=x(D[P]);return t._k=e,t},G=W&&"symbol"==typeof D.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof D},J=function(e,t,n){return e===N&&J(R,t,n),y(e),t=A(t,!0),y(n),i($,t)?(n.enumerable?(i(e,E)&&e[E][t]&&(e[E][t]=!1),n=x(n,{enumerable:w(0,!1)})):(i(e,E)||O(e,E,w(1,{})),e[E][t]=!0),U(e,t,n)):O(e,t,n)},X=function(e,t){y(e);var n,r=v(t=M(t)),i=0,o=r.length;while(o>i)J(e,n=r[i++],t[n]);return e},Z=function(e,t){return void 0===t?x(e):X(x(e),t)},Q=function(e){var t=F.call(this,e=A(e,!0));return!(this===N&&i($,e)&&!i(R,e))&&(!(t||!i(this,e)||!i($,e)||i(this,E)&&this[E][e])||t)},ee=function(e,t){if(e=M(e),t=A(t,!0),e!==N||!i($,t)||i(R,t)){var n=T(e,t);return!n||!i($,t)||i(e,E)&&e[E][t]||(n.enumerable=!0),n}},te=function(e){var t,n=H(M(e)),r=[],o=0;while(n.length>o)i($,t=n[o++])||t==E||t==c||r.push(t);return r},ne=function(e){var t,n=e===N,r=H(n?R:M(e)),o=[],a=0;while(r.length>a)!i($,t=r[a++])||n&&!i(N,t)||o.push($[t]);return o};W||(D=function(){if(this instanceof D)throw TypeError("Symbol is not a constructor!");var e=h(arguments.length>0?arguments[0]:void 0),t=function(n){this===N&&t.call(R,n),i(this,E)&&i(this[E],e)&&(this[E][e]=!1),U(this,e,w(1,n))};return o&&K&&U(N,e,{configurable:!0,set:t}),q(e)},s(D[P],"toString",function(){return this._k}),L.f=ee,S.f=J,n(79032).f=k.f=te,n(98936).f=Q,C.f=ne,o&&!n(98849)&&s(N,"propertyIsEnumerable",Q,!0),p.f=function(e){return q(f(e))}),a(a.G+a.W+a.F*!W,{Symbol:D});for(var re="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),ie=0;re.length>ie;)f(re[ie++]);for(var oe=z(f.store),ae=0;oe.length>ae;)m(oe[ae++]);a(a.S+a.F*!W,"Symbol",{for:function(e){return i(I,e+="")?I[e]:I[e]=D(e)},keyFor:function(e){if(!G(e))throw TypeError(e+" is not a symbol!");for(var t in I)if(I[t]===e)return t},useSetter:function(){K=!0},useSimple:function(){K=!1}}),a(a.S+a.F*!W,"Object",{create:Z,defineProperty:J,defineProperties:X,getOwnPropertyDescriptor:ee,getOwnPropertyNames:te,getOwnPropertySymbols:ne});var se=l(function(){C.f(1)});a(a.S+a.F*se,"Object",{getOwnPropertySymbols:function(e){return C.f(b(e))}}),Y&&a(a.S+a.F*(!W||l(function(){var e=D();return"[null]"!=V([e])||"{}"!=V({a:e})||"{}"!=V(Object(e))})),"JSON",{stringify:function(e){var t,n,r=[e],i=1;while(arguments.length>i)r.push(arguments[i++]);if(n=t=r[1],(_(t)||void 0!==e)&&!G(e))return g(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!G(t))return t}),r[1]=t,V.apply(Y,r)}}),D[P][j]||n(14632)(D[P],j,D[P].valueOf),d(D,"Symbol"),d(Math,"Math",!0),d(r.JSON,"JSON",!0)},32469:function(e,t,n){n(62613)("asyncIterator")},75529:function(e,t,n){n(62613)("observable")},96653:function(e,t,n){n(45270);for(var r=n(56903),i=n(14632),o=n(52833),a=n(15413)("toStringTag"),s="CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList".split(","),c=0;c0?!0===o?E.scrollTop(t,p.top+m.top):!1===o?E.scrollTop(t,p.top+v.top):m.top<0?E.scrollTop(t,p.top+m.top):E.scrollTop(t,p.top+v.top):i||(o=void 0===o||!!o,o?E.scrollTop(t,p.top+m.top):E.scrollTop(t,p.top+v.top)),r&&(m.left<0||v.left>0?!0===a?E.scrollLeft(t,p.left+m.left):!1===a?E.scrollLeft(t,p.left+v.left):m.left<0?E.scrollLeft(t,p.left+m.left):E.scrollLeft(t,p.left+v.left):i||(a=void 0===a||!!a,a?E.scrollLeft(t,p.left+m.left):E.scrollLeft(t,p.left+v.left)))}t.A=j},71040:function(e,t,n){var r=n(88404),i=n(22524).each;function o(e,t){this.query=e,this.isUnconditional=t,this.handlers=[],this.mql=window.matchMedia(e);var n=this;this.listener=function(e){n.mql=e.currentTarget||e,n.assess()},this.mql.addListener(this.listener)}o.prototype={constuctor:o,addHandler:function(e){var t=new r(e);this.handlers.push(t),this.matches()&&t.on()},removeHandler:function(e){var t=this.handlers;i(t,function(n,r){if(n.equals(e))return n.destroy(),!t.splice(r,1)})},matches:function(){return this.mql.matches||this.isUnconditional},clear:function(){i(this.handlers,function(e){e.destroy()}),this.mql.removeListener(this.listener),this.handlers.length=0},assess:function(){var e=this.matches()?"on":"off";i(this.handlers,function(t){t[e]()})}},e.exports=o},51098:function(e,t,n){var r=n(71040),i=n(22524),o=i.each,a=i.isFunction,s=i.isArray;function c(){if(!window.matchMedia)throw new Error("matchMedia not present, legacy browsers require a polyfill");this.queries={},this.browserIsIncapable=!window.matchMedia("only all").matches}c.prototype={constructor:c,register:function(e,t,n){var i=this.queries,c=n&&this.browserIsIncapable;return i[e]||(i[e]=new r(e,c)),a(t)&&(t={match:t}),s(t)||(t=[t]),o(t,function(t){a(t)&&(t={match:t}),i[e].addHandler(t)}),this},unregister:function(e,t){var n=this.queries[e];return n&&(t?n.removeHandler(t):(n.clear(),delete this.queries[e])),this}},e.exports=c},88404:function(e){function t(e){this.options=e,!e.deferSetup&&this.setup()}t.prototype={constructor:t,setup:function(){this.options.setup&&this.options.setup(),this.initialised=!0},on:function(){!this.initialised&&this.setup(),this.options.match&&this.options.match()},off:function(){this.options.unmatch&&this.options.unmatch()},destroy:function(){this.options.destroy?this.options.destroy():this.off()},equals:function(e){return this.options===e||this.options.match===e}},e.exports=t},22524:function(e){function t(e,t){var n,r=0,i=e.length;for(r;r1&&-1!==r.indexOf("Macintosh")&&-1!==r.indexOf("Safari")&&(i=!0),i}},55580:function(e,t,n){var r=n(56110),i=n(9325),o=r(i,"DataView");e.exports=o},21549:function(e,t,n){var r=n(22032),i=n(63862),o=n(66721),a=n(12749),s=n(35749);function c(e){var t=-1,n=null==e?0:e.length;this.clear();while(++t-1}e.exports=i},29905:function(e){function t(e,t,n){var r=-1,i=null==e?0:e.length;while(++r0&&n(u)?t>1?o(u,t-1,n,a,s):r(s,u):a||(s[s.length]=u)}return s}e.exports=o},86649:function(e,t,n){var r=n(83221),i=r();e.exports=i},30641:function(e,t,n){var r=n(86649),i=n(95950);function o(e,t){return e&&r(e,t,i)}e.exports=o},47422:function(e,t,n){var r=n(31769),i=n(77797);function o(e,t){t=r(t,e);var n=0,o=t.length;while(null!=e&&nt)return i;do{r%2&&(i+=e),r=n(r/2),r&&(e+=e)}while(r);return i}e.exports=r},69302:function(e,t,n){var r=n(83488),i=n(56757),o=n(32865);function a(e,t){return o(i(e,t,r),e+"")}e.exports=a},73170:function(e,t,n){var r=n(16547),i=n(31769),o=n(30361),a=n(23805),s=n(77797);function c(e,t,n,c){if(!a(e))return e;t=i(t,e);var l=-1,u=t.length,d=u-1,h=e;while(null!=h&&++li?0:i+t),n=n>i?i:n,n<0&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0;var o=Array(i);while(++r=l){var v=t?null:s(e);if(v)return c(v);f=!1,d=a,m=new r}else m=t?[]:p;e:while(++u=i?e:r(e,t,n)}e.exports=i},49653:function(e,t,n){var r=n(37828);function i(e){var t=new e.constructor(e.byteLength);return new r(t).set(new r(e)),t}e.exports=i},93290:function(e,t,n){e=n.nmd(e);var r=n(9325),i=t&&!t.nodeType&&t,o=i&&e&&!e.nodeType&&e,a=o&&o.exports===i,s=a?r.Buffer:void 0,c=s?s.allocUnsafe:void 0;function l(e,t){if(t)return e.slice();var n=e.length,r=c?c(n):new e.constructor(n);return e.copy(r),r}e.exports=l},76169:function(e,t,n){var r=n(49653);function i(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}e.exports=i},73201:function(e){var t=/\w*$/;function n(e){var n=new e.constructor(e.source,t.exec(e));return n.lastIndex=e.lastIndex,n}e.exports=n},93736:function(e,t,n){var r=n(51873),i=r?r.prototype:void 0,o=i?i.valueOf:void 0;function a(e){return o?Object(o.call(e)):{}}e.exports=a},71961:function(e,t,n){var r=n(49653);function i(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}e.exports=i},23007:function(e){function t(e,t){var n=-1,r=e.length;t||(t=Array(r));while(++n1?n[o-1]:void 0,s=o>2?n[2]:void 0;a=e.length>3&&"function"==typeof a?(o--,a):void 0,s&&i(n[0],n[1],s)&&(a=o<3?void 0:a,o=1),t=Object(t);while(++r-1?s[c?t[l]:l]:void 0}}e.exports=a},57216:function(e,t,n){var r=n(84051),i=n(77556),o=n(28754),a=n(49698),s=n(81993),c=n(63912),l=Math.ceil;function u(e,t){t=void 0===t?" ":i(t);var n=t.length;if(n<2)return n?r(t,e):t;var u=r(t,l(e/s(t)));return a(t)?o(c(u),0,e).join(""):u.slice(0,e)}e.exports=u},44517:function(e,t,n){var r=n(76545),i=n(63950),o=n(84247),a=1/0,s=r&&1/o(new r([,-0]))[1]==a?function(e){return new r(e)}:i;e.exports=s},53138:function(e,t,n){var r=n(11331);function i(e){return r(e)?void 0:e}e.exports=i},93243:function(e,t,n){var r=n(56110),i=function(){try{var e=r(Object,"defineProperty");return e({},"",{}),e}catch(t){}}();e.exports=i},25911:function(e,t,n){var r=n(38859),i=n(91867),o=n(19219),a=1,s=2;function c(e,t,n,c,l,u){var d=n&a,h=e.length,f=t.length;if(h!=f&&!(d&&f>h))return!1;var p=u.get(e),m=u.get(t);if(p&&m)return p==t&&m==e;var v=-1,g=!0,y=n&s?new r:void 0;u.set(e,t),u.set(t,e);while(++v-1&&e%1==0&&e-1}e.exports=i},31175:function(e,t,n){var r=n(26025);function i(e,t){var n=this.__data__,i=r(n,e);return i<0?(++this.size,n.push([e,t])):n[i][1]=t,this}e.exports=i},63040:function(e,t,n){var r=n(21549),i=n(80079),o=n(68223);function a(){this.size=0,this.__data__={hash:new r,map:new(o||i),string:new r}}e.exports=a},17670:function(e,t,n){var r=n(12651);function i(e){var t=r(this,e)["delete"](e);return this.size-=t?1:0,t}e.exports=i},90289:function(e,t,n){var r=n(12651);function i(e){return r(this,e).get(e)}e.exports=i},4509:function(e,t,n){var r=n(12651);function i(e){return r(this,e).has(e)}e.exports=i},72949:function(e,t,n){var r=n(12651);function i(e,t){var n=r(this,e),i=n.size;return n.set(e,t),this.size+=n.size==i?0:1,this}e.exports=i},20317:function(e){function t(e){var t=-1,n=Array(e.size);return e.forEach(function(e,r){n[++t]=[r,e]}),n}e.exports=t},67197:function(e){function t(e,t){return function(n){return null!=n&&(n[e]===t&&(void 0!==t||e in Object(n)))}}e.exports=t},62224:function(e,t,n){var r=n(50104),i=500;function o(e){var t=r(e,function(e){return n.size===i&&n.clear(),e}),n=t.cache;return t}e.exports=o},81042:function(e,t,n){var r=n(56110),i=r(Object,"create");e.exports=i},3650:function(e,t,n){var r=n(74335),i=r(Object.keys,Object);e.exports=i},90181:function(e){function t(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}e.exports=t},86009:function(e,t,n){e=n.nmd(e);var r=n(34840),i=t&&!t.nodeType&&t,o=i&&e&&!e.nodeType&&e,a=o&&o.exports===i,s=a&&r.process,c=function(){try{var e=o&&o.require&&o.require("util").types;return e||s&&s.binding&&s.binding("util")}catch(t){}}();e.exports=c},59350:function(e){var t=Object.prototype,n=t.toString;function r(e){return n.call(e)}e.exports=r},74335:function(e){function t(e,t){return function(n){return e(t(n))}}e.exports=t},56757:function(e,t,n){var r=n(91033),i=Math.max;function o(e,t,n){return t=i(void 0===t?e.length-1:t,0),function(){var o=arguments,a=-1,s=i(o.length-t,0),c=Array(s);while(++a0){if(++i>=t)return arguments[0]}else i=0;return e.apply(void 0,arguments)}}e.exports=i},51420:function(e,t,n){var r=n(80079);function i(){this.__data__=new r,this.size=0}e.exports=i},90938:function(e){function t(e){var t=this.__data__,n=t["delete"](e);return this.size=t.size,n}e.exports=t},63605:function(e){function t(e){return this.__data__.get(e)}e.exports=t},29817:function(e){function t(e){return this.__data__.has(e)}e.exports=t},80945:function(e,t,n){var r=n(80079),i=n(68223),o=n(53661),a=200;function s(e,t){var n=this.__data__;if(n instanceof r){var s=n.__data__;if(!i||s.length=t||n<0||g&&r>=d}function w(){var e=i();if(A(e))return x(e);f=setTimeout(w,M(e))}function x(e){return f=void 0,y&&l?_(e):(l=u=void 0,h)}function k(){void 0!==f&&clearTimeout(f),m=0,l=p=u=f=void 0}function L(){return void 0===f?h:x(i())}function C(){var e=i(),n=A(e);if(l=arguments,u=this,p=e,n){if(void 0===f)return b(p);if(g)return clearTimeout(f),f=setTimeout(w,t),_(p)}return void 0===f&&(f=setTimeout(w,t)),h}return t=o(t)||0,r(n)&&(v=!!n.leading,g="maxWait"in n,d=g?s(o(n.maxWait)||0,t):d,y="trailing"in n?!!n.trailing:y),C.cancel=k,C.flush=L,C}e.exports=l},75288:function(e){function t(e,t){return e===t||e!==e&&t!==t}e.exports=t},7309:function(e,t,n){var r=n(62006),i=n(24713),o=r(i);e.exports=o},24713:function(e,t,n){var r=n(2523),i=n(15389),o=n(61489),a=Math.max;function s(e,t,n){var s=null==e?0:e.length;if(!s)return-1;var c=null==n?0:o(n);return c<0&&(c=a(s+c,0)),r(e,i(t,3),c)}e.exports=s},35970:function(e,t,n){var r=n(83120);function i(e){var t=null==e?0:e.length;return t?r(e,1):[]}e.exports=i},58156:function(e,t,n){var r=n(47422);function i(e,t,n){var i=null==e?void 0:r(e,t);return void 0===i?n:i}e.exports=i},61448:function(e,t,n){var r=n(20426),i=n(49326);function o(e,t){return null!=e&&i(e,t,r)}e.exports=o},80631:function(e,t,n){var r=n(28077),i=n(49326);function o(e,t){return null!=e&&i(e,t,r)}e.exports=o},83488:function(e){function t(e){return e}e.exports=t},72428:function(e,t,n){var r=n(27534),i=n(40346),o=Object.prototype,a=o.hasOwnProperty,s=o.propertyIsEnumerable,c=r(function(){return arguments}())?r:function(e){return i(e)&&a.call(e,"callee")&&!s.call(e,"callee")};e.exports=c},56449:function(e){var t=Array.isArray;e.exports=t},64894:function(e,t,n){var r=n(1882),i=n(30294);function o(e){return null!=e&&i(e.length)&&!r(e)}e.exports=o},83693:function(e,t,n){var r=n(64894),i=n(40346);function o(e){return i(e)&&r(e)}e.exports=o},3656:function(e,t,n){e=n.nmd(e);var r=n(9325),i=n(89935),o=t&&!t.nodeType&&t,a=o&&e&&!e.nodeType&&e,s=a&&a.exports===o,c=s?r.Buffer:void 0,l=c?c.isBuffer:void 0,u=l||i;e.exports=u},1882:function(e,t,n){var r=n(72552),i=n(23805),o="[object AsyncFunction]",a="[object Function]",s="[object GeneratorFunction]",c="[object Proxy]";function l(e){if(!i(e))return!1;var t=r(e);return t==a||t==s||t==o||t==c}e.exports=l},30294:function(e){var t=9007199254740991;function n(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=t}e.exports=n},87730:function(e,t,n){var r=n(29172),i=n(27301),o=n(86009),a=o&&o.isMap,s=a?i(a):r;e.exports=s},69843:function(e){function t(e){return null==e}e.exports=t},23805:function(e){function t(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}e.exports=t},40346:function(e){function t(e){return null!=e&&"object"==typeof e}e.exports=t},11331:function(e,t,n){var r=n(72552),i=n(28879),o=n(40346),a="[object Object]",s=Function.prototype,c=Object.prototype,l=s.toString,u=c.hasOwnProperty,d=l.call(Object);function h(e){if(!o(e)||r(e)!=a)return!1;var t=i(e);if(null===t)return!0;var n=u.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&l.call(n)==d}e.exports=h},69607:function(e,t,n){var r=n(81437),i=n(27301),o=n(86009),a=o&&o.isRegExp,s=a?i(a):r;e.exports=s},38440:function(e,t,n){var r=n(16038),i=n(27301),o=n(86009),a=o&&o.isSet,s=a?i(a):r;e.exports=s},44394:function(e,t,n){var r=n(72552),i=n(40346),o="[object Symbol]";function a(e){return"symbol"==typeof e||i(e)&&r(e)==o}e.exports=a},37167:function(e,t,n){var r=n(4901),i=n(27301),o=n(86009),a=o&&o.isTypedArray,s=a?i(a):r;e.exports=s},95950:function(e,t,n){var r=n(70695),i=n(88984),o=n(64894);function a(e){return o(e)?r(e):i(e)}e.exports=a},37241:function(e,t,n){var r=n(70695),i=n(72903),o=n(64894);function a(e){return o(e)?r(e,!0):i(e)}e.exports=a},68090:function(e){function t(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}e.exports=t},50104:function(e,t,n){var r=n(53661),i="Expected a function";function o(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError(i);var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var a=e.apply(this,r);return n.cache=o.set(i,a)||o,a};return n.cache=new(o.Cache||r),n}o.Cache=r,e.exports=o},55364:function(e,t,n){var r=n(85250),i=n(20999),o=i(function(e,t,n){r(e,t,n)});e.exports=o},63950:function(e){function t(){}e.exports=t},10124:function(e,t,n){var r=n(9325),i=function(){return r.Date.now()};e.exports=i},90179:function(e,t,n){var r=n(34932),i=n(9999),o=n(19931),a=n(31769),s=n(21791),c=n(53138),l=n(38816),u=n(83349),d=1,h=2,f=4,p=l(function(e,t){var n={};if(null==e)return n;var l=!1;t=r(t,function(t){return t=a(t,e),l||(l=t.length>1),t}),s(e,u(e),n),l&&(n=i(n,d|h|f,c));var p=t.length;while(p--)o(n,t[p]);return n});e.exports=p},97948:function(e,t,n){var r=n(57216),i=n(81993),o=n(61489),a=n(13222);function s(e,t,n){e=a(e),t=o(t);var s=t?i(e):0;return t&&s=3&&t?(e.pop(),this.sSelectedKeys=[e[e.length-1].path]):this.sSelectedKeys=[e.pop().path]}var n=[];"inline"===this.mode&&e.forEach(function(e){e.path&&n.push(e.path)}),this.openOnceKey||this.sOpenKeys.forEach(function(e){n.push(e)}),this.collapsed?this.cachedOpenKeys=n:this.sOpenKeys=n}},computed:{rootSubmenuKeys:function(e){var t=e.menus.map(function(e){return e.path})||[];return t}},created:function(){var e=this;this.$watch("$route",function(){e.updateMenu()}),this.$watch("collapsed",function(t){t?(e.cachedOpenKeys=e.sOpenKeys.concat(),e.sOpenKeys=[]):e.sOpenKeys=e.cachedOpenKeys}),void 0!==this.selectedKeys&&(this.sSelectedKeys=this.selectedKeys),void 0!==this.openKeys&&(this.sOpenKeys=this.openKeys)},mounted:function(){this.updateMenu()}},A=M,w=A,x=(n(25537),n(41446));function k(e,t){if("createEvent"in document){var n=document.createEvent("HTMLEvents");n.initEvent(t,!1,!0),e.dispatchEvent(n)}}var L=n(51382),C=function(e,t){var n=e.slots&&e.slots();return n[t]||e.props[t]},S=function(e){return"function"===typeof e},z=function(e){return"Fluid"!==e};var T=a.A.Sider,O={i18nRender:o.A.oneOfType([o.A.func,o.A.bool]).def(!1),mode:o.A.string.def("inline"),theme:o.A.string.def("dark"),contentWidth:o.A.oneOf(["Fluid","Fixed"]).def("Fluid"),collapsible:o.A.bool,collapsed:o.A.bool,collapsedWidth:o.A.oneOfType([o.A.string,o.A.number]).def(80),openKeys:o.A.array.def(void 0),selectedKeys:o.A.array.def(void 0),openOnceKey:o.A.bool.def(!0),handleCollapse:o.A.func,menus:o.A.array,siderWidth:o.A.oneOfType([o.A.string,o.A.number]).def(256),isMobile:o.A.bool,layout:o.A.string.def("inline"),fixSiderbar:o.A.bool,logo:o.A.any,title:o.A.string.def(""),menuHeaderRender:o.A.oneOfType([o.A.func,o.A.array,o.A.object,o.A.bool]),menuRender:o.A.oneOfType([o.A.func,o.A.array,o.A.object,o.A.bool]),openChange:o.A.func,select:o.A.func,menuClick:o.A.func},H=function(e,t){return"string"===typeof t?e("img",{attrs:{src:t,alt:"logo"}}):"function"===typeof t?t():e(t)},D=function(e,t){var n=t.logo,r=void 0===n?"https://gw.alipayobjects.com/zos/antfincdn/PmY%24TNNDBI/logo.svg":n,i=t.title,o=t.menuHeaderRender;if(!1===o)return null;var a=H(e,r),s=e("h1",[i]);return o?S(o)&&o(e,a,t.collapsed?null:s,t)||o:e("span",[a,s])},Y=function(e){return e>=32&&e<=80?e:80},V={name:"SiderMenu",model:{prop:"collapsed",event:"collapse"},props:O,render:function(e){var t=this.collapsible,n=this.collapsed,r=this.collapsedWidth,i=this.selectedKeys,o=this.openKeys,a=this.openChange,s=void 0===a?function(){return null}:a,c=this.select,l=void 0===c?function(){return null}:c,u=this.menuClick,d=void 0===u?function(){return null}:u,h=this.openOnceKey,f=this.siderWidth,p=this.fixSiderbar,m=this.mode,v=this.theme,g=this.menus,y=this.logo,_=this.title,b=this.onMenuHeaderClick,M=void 0===b?function(){return null}:b,A=this.i18nRender,x=this.menuHeaderRender,k=this.menuRender,L=["ant-pro-sider-menu-sider"];p&&L.push("fix-sider-bar"),"light"===v&&L.push("light");var C=D(e,{logo:y,title:_,menuHeaderRender:x,collapsed:n}),z=function(e,t){return e?"".concat(t?Math.abs((t-32)/2):0,"px"):32};return e(T,{class:L,attrs:{breakpoint:"lg",trigger:null,width:f,theme:v,collapsible:t,collapsed:n,collapsedWidth:Y(r)}},[C&&e("div",{class:"ant-pro-sider-menu-logo",on:{click:M},style:{paddingLeft:z(n,Y(r))},attrs:{id:"logo"}},[e("router-link",{attrs:{to:{path:"/"}}},[C])]),k&&(S(k)&&k(e,this.$props)||k)||e(w,{attrs:{collapsed:n,collapsedWidth:Y(r),openKeys:o,selectedKeys:i,openOnceKey:h,menus:g,mode:m,theme:v,i18nRender:A},on:{openChange:s,select:l,click:d}})])}},P=V;function E(e){for(var t=1;t=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function J(e,t){if(null==e)return{};var n,r,i={},o=Object.keys(e);for(r=0;r=0||(i[n]=e[n]);return i}function X(e){for(var t=1;t0&&e(K.Ay,i()([{class:"".concat(Q,"-tabs"),attrs:{activeKey:o,tabBarExtraContent:s},on:{change:function(e){a&&a(e)}}},c]),[r.map(function(t){return e(K.Ay.TabPane,i()([t,{attrs:{tab:n(t.tab)},key:t.key}]))})])},ae=function(e,t,n){return t||n?e("div",{class:"".concat(Q,"-detail")},[e("div",{class:"".concat(Q,"-main")},[e("div",{class:"".concat(Q,"-row")},[t&&e("div",{class:"".concat(Q,"-content")},[t]),n&&e("div",{class:"".concat(Q,"-extraContent")},[n])])])]):null},se=function(e,t,n,r){var o=t.title,a=t.tags,s=t.content,c=t.pageHeaderRender,l=t.extra,u=t.extraContent,d=t.breadcrumb,h=t.back,f=G(t,q);if(c)return c(X({},t));var p=o;o||!1===o||(p=n.title);var m=(0,$.cy)(p)?p:p&&r(p),v={breadcrumb:d,extra:l,tags:a,title:m,footer:oe(e,f,r)};return h||(v.backIcon=!1),e(B.A,i()([{props:v},{on:{back:h||ie}}]),[ae(e,s,u)])},ce={name:"PageHeaderWrapper",props:te,inject:["locale","contentWidth","breadcrumbRender"],render:function(e){var t=this,n=this.$route,r=this.$listeners,i=this.$slots["default"],o=(0,U.nu)(this,"title"),a=(0,U.nu)(this,"tags"),s=(0,U.nu)(this,"content"),c=(0,U.nu)(this,"extra"),l=(0,U.nu)(this,"extraContent"),u=re(this.$props.route||n),d=this.$props.i18nRender||this.locale||ne,h=this.$props.contentWidth||this.contentWidth||!1,f=this.$props.back||r.back,p=f&&function(){f&&f()}||void 0,m=this.$props.tabChange,v=function(e){t.$emit("tabChange",e),m&&m(e)},g={},y=this.$props.breadcrumb;if(!0===y){var _=n.matched.concat().map(function(e){return{path:e.path,breadcrumbName:d(e.meta.title)}}),b=function(e){var t=e.route,n=e.params,r=e.routes,i=(e.paths,e.h);return r.indexOf(t)===r.length-1&&i("span",[t.breadcrumbName])||i("router-link",{attrs:{to:{path:t.path||"/",params:n}}},[t.breadcrumbName])},M=this.breadcrumbRender||b;g={props:{routes:_,itemRender:M}}}else g=y||null;var A=X({},this.$props,{title:o,tags:a,content:s,extra:c,extraContent:l,breadcrumb:g,tabChange:v,back:p});return e("div",{class:"ant-pro-page-header-wrap"},[e("div",{class:"".concat(Q,"-page-header-warp")},[e(W,[se(e,A,u,d)])]),i?e(W,{attrs:{contentWidth:h}},[e("div",{class:"".concat(Q,"-children-content")},[i])]):null])},install:function(e){e.component(ce.name,ce),e.component("page-container",ce)}},le=ce,ue=(o.A.array,o.A.any,{name:"VueFragment",functional:!0,render:function(e,t){return t.children.length>1?e("div",{},t.children):t.children}}),de=n(38221),he=n.n(de),fe={collapsed:o.A.bool,handleCollapse:o.A.func,isMobile:o.A.bool.def(!1),fixedHeader:o.A.bool.def(!1),logo:o.A.any,menuRender:o.A.any,collapsedButtonRender:o.A.any,headerContentRender:o.A.any,rightContentRender:o.A.any},pe=function(e,t){return e(l.A,{attrs:{type:t?"menu-unfold":"menu-fold"}})},me={name:"GlobalHeader",props:fe,render:function(e){var t=this,n=this.$props,r=n.isMobile,i=n.logo,o=n.rightContentRender,a=n.headerContentRender,s=function(){var e=t.$props,n=e.collapsed,r=e.handleCollapse;r&&r(!n),t.triggerResizeEvent()},c=function(){var n=t.$props,r=n.collapsed,i=n.collapsedButtonRender,o=void 0===i?pe:i,a=n.menuRender;return!1!==o&&!1!==a?e("span",{class:"ant-pro-global-header-trigger",on:{click:s}},[S(o)&&o(e,r)||o]):null},l="ant-pro-global-header";return e("div",{class:l},[r&&e("a",{class:"".concat(l,"-logo"),key:"logo",attrs:{href:"/"}},[H(e,i)]),c(),a&&e("div",{class:"".concat(l,"-content")},[S(a)&&a(e,this.$props)||a]),S(o)&&o(e,this.$props)||o])},methods:{triggerResizeEvent:he()(function(){L.M&&k(window,"resize")})},beforeDestroy:function(){this.triggerResizeEvent.cancel&&this.triggerResizeEvent.cancel()}},ve=me;function ge(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0,r=arguments.length>3?arguments[3]:void 0;return e?t?n||80:r:0},Ee=function(e,t){return!1===t.headerRender?null:e(we,{props:t})},je=function(e){return e},Fe={name:"BasicLayout",functional:!0,props:Ye,render:function(e,t){var n=t.props,r=t.children,o=t.listeners,c=n.layout,l=n.isMobile,u=n.collapsed,d=n.collapsedWidth,h=n.mediaQuery,f=n.handleMediaQuery,p=n.handleCollapse,m=n.siderWidth,v=n.fixSiderbar,g=n.i18nRender,y=void 0===g?je:g,_=C(t,"footerRender"),b=C(t,"rightContentRender"),M=C(t,"collapsedButtonRender"),A=C(t,"menuHeaderRender"),w=C(t,"breadcrumbRender"),x=C(t,"headerContentRender"),k=C(t,"menuRender"),L="topmenu"===c,z=!L,T=v&&!L&&!l,O=He({},n,{hasSiderMenu:z,footerRender:_,menuHeaderRender:A,rightContentRender:b,collapsedButtonRender:M,breadcrumbRender:w,headerContentRender:x,menuRender:k},o);return e(Oe,{attrs:{i18nRender:y,contentWidth:n.contentWidth,breadcrumbRender:w}},[e(s.ContainerQuery,{attrs:{query:Ve},on:{change:f}},[e(a.A,{class:He({"ant-pro-basicLayout":!0,"ant-pro-topmenu":L},h)},[e(I,i()([{props:O},{attrs:{collapsed:u},on:{collapse:p}}])),e(a.A,{class:[c],style:{paddingLeft:z?"".concat(Pe(!!T,u,d,m),"px"):void 0,minHeight:"100vh"}},[Ee(e,He({},O,{mode:"horizontal"})),e(Se,{class:"ant-pro-basicLayout-content",attrs:{contentWidth:n.contentWidth}},[r]),!1!==_&&e(a.A.Footer,[S(_)&&_(e)||_])||null])])])])},install:function(e){e.component(le.name,le),e.component("PageContainer",le),e.component("ProLayout",Fe)}},Ie=Fe;n(90034),n(28373),n(97345),n(66882),n(47132),n(53966),n(91997),n(27902),n(49084),n(19120),n(64274),n(1406),n(6011),n(18787),n(42543),n(90500),o.A.string,o.A.array,o.A.oneOfType([o.A.func,o.A.bool]).def(!1);o.A.string,o.A.bool,o.A.array,o.A.string,o.A.string,o.A.oneOfType([o.A.func,o.A.bool]).def(!1),n(22050),n(25824);o.A.oneOf(["Fluid","Fixed"]).def("Fluid"),o.A.bool,o.A.bool,o.A.oneOf(["sidemenu","topmenu"]),o.A.oneOfType([o.A.func,o.A.bool]).def(!1),n(69511),n(58391),n(81776);o.A.string.def("");var $e={theme:o.A.oneOf(["dark","light","realDark"]),primaryColor:o.A.string,layout:o.A.oneOf(["sidemenu","topmenu"]),colorWeak:o.A.bool,contentWidth:o.A.oneOf(["Fluid","Fixed"]).def("Fluid"),fixedHeader:o.A.bool,fixSiderbar:o.A.bool,hideHintAlert:o.A.bool.def(!1),hideCopyButton:o.A.bool.def(!1)};o.A.func,o.A.objectOf($e),o.A.oneOfType([o.A.func,o.A.bool]).def(!1)},58391:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(6535)),o=2,a=16,s=5,c=5,l=15,u=5,d=4;function h(e,t,n){var r;return r=Math.round(e.h)>=60&&Math.round(e.h)<=240?n?Math.round(e.h)-o*t:Math.round(e.h)+o*t:n?Math.round(e.h)+o*t:Math.round(e.h)-o*t,r<0?r+=360:r>=360&&(r-=360),r}function f(e,t,n){return 0===e.h&&0===e.s?e.s:(r=n?Math.round(100*e.s)-a*t:t===d?Math.round(100*e.s)+a:Math.round(100*e.s)+s*t,r>100&&(r=100),n&&t===u&&r>10&&(r=10),r<6&&(r=6),r);var r}function p(e,t,n){return n?Math.round(100*e.v)+c*t:Math.round(100*e.v)-l*t}function m(e){for(var t=[],n=i.default(e),r=u;r>0;r-=1){var o=n.toHsv(),a=i.default({h:h(o,r,!0),s:f(o,r,!0),v:p(o,r,!0)}).toHexString();t.push(a)}t.push(n.toHexString());for(r=1;r<=d;r+=1){o=n.toHsv(),a=i.default({h:h(o,r),s:f(o,r),v:p(o,r)}).toHexString();t.push(a)}return t}t["default"]=m},33446:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(58391));t.generate=i.default;var o={red:"#F5222D",volcano:"#FA541C",orange:"#FA8C16",gold:"#FAAD14",yellow:"#FADB14",lime:"#A0D911",green:"#52C41A",cyan:"#13C2C2",blue:"#1890FF",geekblue:"#2F54EB",purple:"#722ED1",magenta:"#EB2F96",grey:"#666666"};t.presetPrimaryColors=o;var a={};t.presetPalettes=a,Object.keys(o).forEach(function(e){a[e]=i.default(o[e]),a[e].primary=a[e][5]});var s=a.red;t.red=s;var c=a.volcano;t.volcano=c;var l=a.gold;t.gold=l;var u=a.orange;t.orange=u;var d=a.yellow;t.yellow=d;var h=a.lime;t.lime=h;var f=a.green;t.green=f;var p=a.cyan;t.cyan=p;var m=a.blue;t.blue=m;var v=a.geekblue;t.geekblue=v;var g=a.purple;t.purple=g;var y=a.magenta;t.magenta=y;var _=a.grey;t.grey=_},6678:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n="0 0 1024 1024",r="64 64 896 896",i="fill",o="outline",a="twotone";function s(e){for(var t=[],n=1;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],n="function"===typeof e?e(this.$data,this.$props):e;if(this.getDerivedStateFromProps){var r=this.getDerivedStateFromProps((0,o.Oq)(this),(0,i.A)({},this.$data,n));if(null===r)return;n=(0,i.A)({},n,r||{})}(0,i.A)(this.$data,n),this.$forceUpdate(),this.$nextTick(function(){t&&t()})},__emit:function(){var e=[].slice.call(arguments,0),t=e[0],n=this.$listeners[t];if(e.length&&n)if(Array.isArray(n))for(var i=0,o=n.length;i=n.F1&&t<=n.F12)return!1;switch(t){case n.ALT:case n.CAPS_LOCK:case n.CONTEXT_MENU:case n.CTRL:case n.DOWN:case n.END:case n.ESC:case n.HOME:case n.INSERT:case n.LEFT:case n.MAC_FF_META:case n.META:case n.NUMLOCK:case n.NUM_CENTER:case n.PAGE_DOWN:case n.PAGE_UP:case n.PAUSE:case n.PRINT_SCREEN:case n.RIGHT:case n.SHIFT:case n.UP:case n.WIN_KEY:case n.WIN_KEY_RIGHT:return!1;default:return!0}},isCharacterKey:function(e){if(e>=n.ZERO&&e<=n.NINE)return!0;if(e>=n.NUM_ZERO&&e<=n.NUM_MULTIPLY)return!0;if(e>=n.A&&e<=n.Z)return!0;if(-1!==window.navigation.userAgent.indexOf("WebKit")&&0===e)return!0;switch(e){case n.SPACE:case n.QUESTION_MARK:case n.NUM_PLUS:case n.NUM_MINUS:case n.NUM_PERIOD:case n.NUM_DIVISION:case n.SEMICOLON:case n.DASH:case n.EQUALS:case n.COMMA:case n.PERIOD:case n.SLASH:case n.APOSTROPHE:case n.SINGLE_QUOTE:case n.OPEN_SQUARE_BRACKET:case n.BACKSLASH:case n.CLOSE_SQUARE_BRACKET:return!0;default:return!1}}};t.A=n},48159:function(e,t,n){"use strict";var r=n(4718),i=n(51927);t.A={name:"Portal",props:{getContainer:r.A.func.isRequired,children:r.A.any.isRequired,didUpdate:r.A.func},mounted:function(){this.createContainer()},updated:function(){var e=this,t=this.$props.didUpdate;t&&this.$nextTick(function(){t(e.$props)})},beforeDestroy:function(){this.removeContainer()},methods:{createContainer:function(){this._container=this.$props.getContainer(),this.$forceUpdate()},removeContainer:function(){this._container&&this._container.parentNode&&this._container.parentNode.removeChild(this._container)}},render:function(){return this._container?(0,i.Ob)(this.$props.children,{directives:[{name:"ant-portal",value:this._container}]}):null}}},81593:function(e,t,n){"use strict";n.d(t,{Qg:function(){return d}});var r="undefined"!==typeof window,i=r&&window.navigator.userAgent.toLowerCase(),o=i&&i.indexOf("msie 9.0")>0;function a(e,t){for(var n=Object.create(null),r=e.split(","),i=0;i0);a&&a.indexOf("android"),a&&/iphone|ipad|ipod|ios/.test(a),a&&/chrome\/\d+/.test(a),a&&/phantomjs/.test(a),a&&a.match(/firefox\/(\d+)/)},93986:function(e,t,n){"use strict";n.d(t,{A:function(){return i}});var r=void 0;function i(e){if(e||void 0===r){var t=document.createElement("div");t.style.width="100%",t.style.height="200px";var n=document.createElement("div"),i=n.style;i.position="absolute",i.top=0,i.left=0,i.pointerEvents="none",i.visibility="hidden",i.width="200px",i.height="150px",i.overflow="hidden",n.appendChild(t),document.body.appendChild(n);var o=t.offsetWidth;n.style.overflow="scroll";var a=t.offsetWidth;o===a&&(a=n.clientWidth),document.body.removeChild(n),r=o-a}return r}},80178:function(e,t,n){"use strict";var r=n(75998),i=function(){},o=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.beforeEnter,o=t.enter,a=t.afterEnter,s=t.leave,c=t.afterLeave,l=t.appear,u=void 0===l||l,d=t.tag,h=t.nativeOn,f={props:{appear:u,css:!1},on:{beforeEnter:n||i,enter:o||function(t,n){(0,r.A)(t,e+"-enter",n)},afterEnter:a||i,leave:s||function(t,n){(0,r.A)(t,e+"-leave",n)},afterLeave:c||i},nativeOn:h};return d&&(f.tag=d),f};t.A=o},67287:function(e,t,n){"use strict";function r(e){return e["default"]||e}n.d(t,{A:function(){return r}})},2410:function(e,t){"use strict";var n=function(e){return!isNaN(parseFloat(e))&&isFinite(e)};t.A=n},6566:function(e,t,n){"use strict";n.d(t,{P1:function(){return l},W2:function(){return c},n1:function(){return d},nP:function(){return u},pK:function(){return f},pY:function(){return h}});var r=n(67287),i=n(95093),o=n(36873),a=n(69843),s=n.n(a),c={validator:function(e){return"string"===typeof e||s()(e)||i.isMoment(e)}},l={validator:function(e){return!!Array.isArray(e)&&(0===e.length||-1===e.findIndex(function(e){return"string"!==typeof e})||-1===e.findIndex(function(e){return!s()(e)&&!i.isMoment(e)}))}},u={validator:function(e){return Array.isArray(e)?0===e.length||-1===e.findIndex(function(e){return"string"!==typeof e})||-1===e.findIndex(function(e){return!s()(e)&&!i.isMoment(e)}):"string"===typeof e||s()(e)||i.isMoment(e)}};function d(e,t,n,a){var s=Array.isArray(t)?t:[t];s.forEach(function(t){t&&(a&&(0,o.A)((0,r.A)(i)(t,a).isValid(),e,"When set `valueFormat`, `"+n+"` should provides invalidate string time. "),!a&&(0,o.A)((0,r.A)(i).isMoment(t)&&t.isValid(),e,"`"+n+"` provides invalidate moment time. If you want to set empty value, use `null` instead."))})}var h=function(e,t){return Array.isArray(e)?e.map(function(e){return"string"===typeof e&&e?(0,r.A)(i)(e,t):e||null}):"string"===typeof e&&e?(0,r.A)(i)(e,t):e||null},f=function(e,t){return Array.isArray(e)?e.map(function(e){return(0,r.A)(i).isMoment(e)?e.format(t):e}):(0,r.A)(i).isMoment(e)?e.format(t):e}},40703:function(e,t,n){"use strict";var r=n(75998),i=n(93146),o=n.n(i),a=n(85471);function s(e,t,n){var i=void 0,a=void 0,s=void 0;return(0,r.A)(e,"ant-motion-collapse-legacy",{start:function(){s&&o().cancel(s),t?(i=e.offsetHeight,0===i?s=o()(function(){i=e.offsetHeight,e.style.height="0px",e.style.opacity="0"}):(e.style.height="0px",e.style.opacity="0")):(e.style.height=e.offsetHeight+"px",e.style.opacity="1")},active:function(){a&&o().cancel(a),a=o()(function(){e.style.height=(t?i:0)+"px",e.style.opacity=t?"1":"0"})},end:function(){s&&o().cancel(s),a&&o().cancel(a),e.style.height="",e.style.opacity="",n&&n()}})}var c={enter:function(e,t){a.Ay.nextTick(function(){s(e,!0,t)})},leave:function(e,t){return s(e,!1,t)}};t.A=c},1406:function(e,t,n){"use strict";function r(e){return e.directive("ant-portal",{inserted:function(e,t){var n=t.value,r="function"===typeof n?n(e):n;r!==e.parentNode&&r.appendChild(e)},componentUpdated:function(e,t){var n=t.value,r="function"===typeof n?n(e):n;r!==e.parentNode&&r.appendChild(e)}})}n.d(t,{o:function(){return r}}),t.A={install:function(e){r(e)}}},15848:function(e,t,n){"use strict";n.d(t,{$c:function(){return y},CB:function(){return V},Gk:function(){return Y},IV:function(){return x},K6:function(){return D},Oq:function(){return M},PT:function(){return h},Sk:function(){return g},Ts:function(){return w},WM:function(){return z},Z0:function(){return k},cK:function(){return p},gd:function(){return O},i5:function(){return S},i7:function(){return L},kQ:function(){return C},nu:function(){return A},rz:function(){return _},sG:function(){return H},t0:function(){return T},ul:function(){return f},v6:function(){return P},xr:function(){return b},zO:function(){return E}});var r=n(97479),i=n(52040),o=n(85505),a=n(11331),s=n.n(a),c=n(46942),l=n.n(c);function u(e){var t=e&&e.toString().match(/^\s*function (\w+)/);return t?t[1]:""}var d=/-(\w)/g,h=function(e){return e.replace(d,function(e,t){return t?t.toUpperCase():""})},f=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments[1],n={},r=/;(?![^(]*\))/g,i=/:(.+)/;return e.split(r).forEach(function(e){if(e){var r=e.split(i);if(r.length>1){var o=t?h(r[0].trim()):r[0].trim();n[o]=r[1].trim()}}}),n},p=function(e,t){var n=e.$options||{},r=n.propsData||{};return t in r},m=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={};return Object.keys(e).forEach(function(r){(r in t||void 0!==e[r])&&(n[r]=e[r])}),n},v=function(e){return e.data&&e.data.scopedSlots||{}},g=function(e){var t=e.componentOptions||{};e.$vnode&&(t=e.$vnode.componentOptions||{});var n=e.children||t.children||[],r={};return n.forEach(function(e){if(!H(e)){var t=e.data&&e.data.slot||"default";r[t]=r[t]||[],r[t].push(e)}}),(0,o.A)({},r,v(e))},y=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"default",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e.$scopedSlots&&e.$scopedSlots[t]&&e.$scopedSlots[t](n)||e.$slots[t]||[]},_=function(e){var t=e.componentOptions||{};return e.$vnode&&(t=e.$vnode.componentOptions||{}),e.children||t.children||[]},b=function(e){if(e.fnOptions)return e.fnOptions;var t=e.componentOptions;return e.$vnode&&(t=e.$vnode.componentOptions),t&&t.Ctor.options||{}},M=function(e){if(e.componentOptions){var t=e.componentOptions,n=t.propsData,r=void 0===n?{}:n,a=t.Ctor,s=void 0===a?{}:a,c=(s.options||{}).props||{},l={},d=!0,h=!1,f=void 0;try{for(var p,v=Object.entries(c)[Symbol.iterator]();!(d=(p=v.next()).done);d=!0){var g=p.value,y=(0,i.A)(g,2),_=y[0],b=y[1],M=b["default"];void 0!==M&&(l[_]="function"===typeof M&&"Function"!==u(b.type)?M.call(e):M)}}catch(L){h=!0,f=L}finally{try{!d&&v["return"]&&v["return"]()}finally{if(h)throw f}}return(0,o.A)({},l,r)}var A=e.$options,w=void 0===A?{}:A,x=e.$props,k=void 0===x?{}:x;return m(k,w.propsData)},A=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e,r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];if(e.$createElement){var i=e.$createElement,o=e[t];return void 0!==o?"function"===typeof o&&r?o(i,n):o:e.$scopedSlots[t]&&r&&e.$scopedSlots[t](n)||e.$scopedSlots[t]||e.$slots[t]||void 0}var a=e.context.$createElement,s=w(e)[t];if(void 0!==s)return"function"===typeof s&&r?s(a,n):s;var c=v(e)[t];if(void 0!==c)return"function"===typeof c&&r?c(a,n):c;var l=[],u=e.componentOptions||{};return(u.children||[]).forEach(function(e){e.data&&e.data.slot===t&&(e.data.attrs&&delete e.data.attrs.slot,"template"===e.tag?l.push(e.children):l.push(e))}),l.length?l:void 0},w=function(e){var t=e.componentOptions;return e.$vnode&&(t=e.$vnode.componentOptions),t&&t.propsData||{}},x=function(e,t){return w(e)[t]},k=function(e){var t=e.data;return e.$vnode&&(t=e.$vnode.data),t&&t.attrs||{}},L=function(e){var t=e.key;return e.$vnode&&(t=e.$vnode.key),t};function C(e){var t={};return e.componentOptions&&e.componentOptions.listeners?t=e.componentOptions.listeners:e.data&&e.data.on&&(t=e.data.on),(0,o.A)({},t)}function S(e){var t={};return e.data&&e.data.on&&(t=e.data.on),(0,o.A)({},t)}function z(e){return(e.$vnode?e.$vnode.componentOptions.listeners:e.$listeners)||{}}function T(e){var t={};e.data?t=e.data:e.$vnode&&e.$vnode.data&&(t=e.$vnode.data);var n=t["class"]||{},r=t.staticClass,i={};return r&&r.split(" ").forEach(function(e){i[e.trim()]=!0}),"string"===typeof n?n.split(" ").forEach(function(e){i[e.trim()]=!0}):Array.isArray(n)?l()(n).split(" ").forEach(function(e){i[e.trim()]=!0}):i=(0,o.A)({},i,n),i}function O(e,t){var n={};e.data?n=e.data:e.$vnode&&e.$vnode.data&&(n=e.$vnode.data);var r=n.style||n.staticStyle;if("string"===typeof r)r=f(r,t);else if(t&&r){var i={};return Object.keys(r).forEach(function(e){return i[h(e)]=r[e]}),i}return r}function H(e){return!(e.tag||e.text&&""!==e.text.trim())}function D(e){return!e.tag}function Y(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return e.filter(function(e){return!H(e)})}var V=function(e,t){return Object.keys(t).forEach(function(n){if(!e[n])throw new Error("not have "+n+" prop");e[n].def&&(e[n]=e[n].def(t[n]))}),e};function P(){var e=[].slice.call(arguments,0),t={};return e.forEach(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=!0,r=!1,a=void 0;try{for(var c,l=Object.entries(e)[Symbol.iterator]();!(n=(c=l.next()).done);n=!0){var u=c.value,d=(0,i.A)(u,2),h=d[0],f=d[1];t[h]=t[h]||{},s()(f)?(0,o.A)(t[h],f):t[h]=f}}catch(p){r=!0,a=p}finally{try{!n&&l["return"]&&l["return"]()}finally{if(r)throw a}}}),t}function E(e){return e&&"object"===("undefined"===typeof e?"undefined":(0,r.A)(e))&&"componentOptions"in e&&"context"in e&&void 0!==e.tag}t.Ay=p},8350:function(e,t,n){"use strict";n.d(t,{A:function(){return l}});var r=n(75189),i=n.n(r),o=n(85505),a=n(4718),s=n(15848);function c(e){return e.name||"Component"}function l(e){var t=e.props||{},n=e.methods||{},r={};Object.keys(t).forEach(function(e){r[e]=(0,o.A)({},t[e],{required:!1})}),e.props.__propsSymbol__=a.A.any,e.props.children=a.A.array.def([]);var l={props:r,model:e.model,name:"Proxy_"+c(e),methods:{getProxyWrappedInstance:function(){return this.$refs.wrappedInstance}},render:function(){var t=arguments[0],n=this.$slots,r=void 0===n?{}:n,a=this.$scopedSlots,c=(0,s.Oq)(this),l={props:(0,o.A)({},c,{__propsSymbol__:Symbol(),componentWillReceiveProps:(0,o.A)({},c),children:r["default"]||c.children||[]}),on:(0,s.WM)(this)};Object.keys(a).length&&(l.scopedSlots=a);var u=Object.keys(r);return t(e,i()([l,{ref:"wrappedInstance"}]),[u.length?u.map(function(e){return t("template",{slot:e},[r[e]])}):null])}};return Object.keys(n).map(function(e){l.methods[e]=function(){var t;return(t=this.getProxyWrappedInstance())[e].apply(t,arguments)}}),l}},70556:function(e,t,n){"use strict";n.d(t,{A:function(){return s}});var r=n(93146),i=n.n(r),o=0,a={};function s(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=o++,r=t;function s(){r-=1,r<=0?(e(),delete a[n]):a[n]=i()(s)}return a[n]=i()(s),n}s.cancel=function(e){void 0!==e&&(i().cancel(a[e]),delete a[e])},s.ids=a},982:function(e,t,n){"use strict";n.d(t,{q:function(){return c},z:function(){return l}});var r=["moz","ms","webkit"];function i(){var e=0;return function(t){var n=(new Date).getTime(),r=Math.max(0,16-(n-e)),i=window.setTimeout(function(){t(n+r)},r);return e=n+r,i}}function o(){if("undefined"===typeof window)return function(){};if(window.requestAnimationFrame)return window.requestAnimationFrame.bind(window);var e=r.filter(function(e){return e+"RequestAnimationFrame"in window})[0];return e?window[e+"RequestAnimationFrame"]:i()}function a(e){if("undefined"===typeof window)return null;if(window.cancelAnimationFrame)return window.cancelAnimationFrame(e);var t=r.filter(function(e){return e+"CancelAnimationFrame"in window||e+"CancelRequestAnimationFrame"in window})[0];return t?(window[t+"CancelAnimationFrame"]||window[t+"CancelRequestAnimationFrame"]).call(this,e):clearTimeout(e)}var s=o(),c=function(e){return a(e.id)},l=function(e,t){var n=Date.now();function r(){Date.now()-n>=t?e.call():i.id=s(r)}var i={id:s(r)};return i}},73363:function(e,t,n){"use strict";n.d(t,{ye:function(){return s}});var r=n(44508),i=n(85505),o=void 0;if("undefined"!==typeof window){var a=function(e){return{media:e,matches:!1,addListener:function(){},removeListener:function(){}}};window.matchMedia||(window.matchMedia=a),o=n(22386)}var s=["xxl","xl","lg","md","sm","xs"],c={xs:"(max-width: 575px)",sm:"(min-width: 576px)",md:"(min-width: 768px)",lg:"(min-width: 992px)",xl:"(min-width: 1200px)",xxl:"(min-width: 1600px)"},l=[],u=-1,d={},h={dispatch:function(e){return d=e,!(l.length<1)&&(l.forEach(function(e){e.func(d)}),!0)},subscribe:function(e){0===l.length&&this.register();var t=(++u).toString();return l.push({token:t,func:e}),e(d),t},unsubscribe:function(e){l=l.filter(function(t){return t.token!==e}),0===l.length&&this.unregister()},unregister:function(){Object.keys(c).map(function(e){return o.unregister(c[e])})},register:function(){var e=this;Object.keys(c).map(function(t){return o.register(c[t],{match:function(){var n=(0,i.A)({},d,(0,r.A)({},t,!0));e.dispatch(n)},unmatch:function(){var n=(0,i.A)({},d,(0,r.A)({},t,!1));e.dispatch(n)},destroy:function(){}})})}};t.Ay=h},14221:function(e,t,n){"use strict";n.d(t,{A:function(){return p}});var r=n(75189),i=n.n(r),o=n(85505),a=n(2833),s=n.n(a),c=n(90034),l=n(15848),u=n(4718),d=n(8350);function h(e){return e.name||"Component"}var f=function(){return{}};function p(e){var t=!!e,n=e||f;return function(r){var a=(0,c.A)(r.props||{},["store"]),f={__propsSymbol__:u.A.any};Object.keys(a).forEach(function(e){f[e]=(0,o.A)({},a[e],{required:!1})});var p={name:"Connect_"+h(r),props:f,inject:{storeContext:{default:function(){return{}}}},data:function(){return this.store=this.storeContext.store,this.preProps=(0,c.A)((0,l.Oq)(this),["__propsSymbol__"]),{subscribed:n(this.store.getState(),this.$props)}},watch:{__propsSymbol__:function(){e&&2===e.length&&(this.subscribed=n(this.store.getState(),this.$props))}},mounted:function(){this.trySubscribe()},beforeDestroy:function(){this.tryUnsubscribe()},methods:{handleChange:function(){if(this.unsubscribe){var e=(0,c.A)((0,l.Oq)(this),["__propsSymbol__"]),t=n(this.store.getState(),e);s()(this.preProps,e)&&s()(this.subscribed,t)||(this.subscribed=t)}},trySubscribe:function(){t&&(this.unsubscribe=this.store.subscribe(this.handleChange),this.handleChange())},tryUnsubscribe:function(){this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=null)},getWrappedInstance:function(){return this.$refs.wrappedInstance}},render:function(){var e=arguments[0],t=this.$slots,n=void 0===t?{}:t,a=this.$scopedSlots,s=this.subscribed,u=this.store,d=(0,l.Oq)(this);this.preProps=(0,o.A)({},(0,c.A)(d,["__propsSymbol__"]));var h={props:(0,o.A)({},d,s,{store:u}),on:(0,l.WM)(this),scopedSlots:a};return e(r,i()([h,{ref:"wrappedInstance"}]),[Object.keys(n).map(function(t){return e("template",{slot:t},[n[t]])})])}};return(0,d.A)(p)}}},6596:function(e,t,n){"use strict";var r=n(75189),i=n.n(r),o=n(85505),a=n(11207),s=n(4718),c={border:0,background:"transparent",padding:0,lineHeight:"inherit",display:"inline-block"},l={props:{noStyle:s.A.bool},methods:{onKeyDown:function(e){var t=e.keyCode;t===a.A.ENTER&&e.preventDefault()},onKeyUp:function(e){var t=e.keyCode;t===a.A.ENTER&&this.$emit("click",e)},setRef:function(e){this.div=e},focus:function(){this.div&&this.div.focus()},blur:function(){this.div&&this.div.blur()}},render:function(){var e=arguments[0],t=this.$props.noStyle;return e("div",i()([{attrs:{role:"button",tabIndex:0}},{directives:[{name:"ant-ref",value:this.setRef}],on:(0,o.A)({},this.$listeners,{keydown:this.onKeyDown,keyup:this.onKeyUp})},{style:(0,o.A)({},t?null:c)}]),[this.$slots["default"]])}};t.A=l},51927:function(e,t,n){"use strict";n.d(t,{Ob:function(){return u},pM:function(){return l}});var r=n(32779),i=n(85505),o=n(15848),a=n(46942),s=n.n(a);function c(e,t){var n=e.componentOptions,r=e.data,o={};n&&n.listeners&&(o=(0,i.A)({},n.listeners));var a={};r&&r.on&&(a=(0,i.A)({},r.on));var s=new e.constructor(e.tag,r?(0,i.A)({},r,{on:a}):r,e.children,e.text,e.elm,e.context,n?(0,i.A)({},n,{listeners:o}):n,e.asyncFactory);return s.ns=e.ns,s.isStatic=e.isStatic,s.key=e.key,s.isComment=e.isComment,s.fnContext=e.fnContext,s.fnOptions=e.fnOptions,s.fnScopeId=e.fnScopeId,s.isCloned=!0,t&&(e.children&&(s.children=l(e.children,!0)),n&&n.children&&(n.children=l(n.children,!0))),s}function l(e,t){for(var n=e.length,r=new Array(n),i=0;i1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],a=e;if(Array.isArray(e)&&(a=(0,o.Gk)(e)[0]),!a)return null;var l=c(a,n),u=t.props,d=void 0===u?{}:u,h=t.key,f=t.on,p=void 0===f?{}:f,m=t.nativeOn,v=void 0===m?{}:m,g=t.children,y=t.directives,_=void 0===y?[]:y,b=l.data||{},M={},A={},w=t.attrs,x=void 0===w?{}:w,k=t.ref,L=t.domProps,C=void 0===L?{}:L,S=t.style,z=void 0===S?{}:S,T=t["class"],O=void 0===T?{}:T,H=t.scopedSlots,D=void 0===H?{}:H;return A="string"===typeof b.style?(0,o.ul)(b.style):(0,i.A)({},b.style,A),A="string"===typeof z?(0,i.A)({},A,(0,o.ul)(A)):(0,i.A)({},A,z),"string"===typeof b["class"]&&""!==b["class"].trim()?b["class"].split(" ").forEach(function(e){M[e.trim()]=!0}):Array.isArray(b["class"])?s()(b["class"]).split(" ").forEach(function(e){M[e.trim()]=!0}):M=(0,i.A)({},b["class"],M),"string"===typeof O&&""!==O.trim()?O.split(" ").forEach(function(e){M[e.trim()]=!0}):M=(0,i.A)({},M,O),l.data=(0,i.A)({},b,{style:A,attrs:(0,i.A)({},b.attrs,x),class:M,domProps:(0,i.A)({},b.domProps,C),scopedSlots:(0,i.A)({},b.scopedSlots,D),directives:[].concat((0,r.A)(b.directives||[]),(0,r.A)(_))}),l.componentOptions?(l.componentOptions.propsData=l.componentOptions.propsData||{},l.componentOptions.listeners=l.componentOptions.listeners||{},l.componentOptions.propsData=(0,i.A)({},l.componentOptions.propsData,d),l.componentOptions.listeners=(0,i.A)({},l.componentOptions.listeners,p),g&&(l.componentOptions.children=g)):(g&&(l.children=g),l.data.on=(0,i.A)({},l.data.on||{},p)),l.data.on=(0,i.A)({},l.data.on||{},v),void 0!==h&&(l.key=h,l.data.key=h),"string"===typeof k&&(l.data.ref=k),l}},4718:function(e,t,n){"use strict";var r=n(97479),i=n(11331),o=n.n(i),a=n(20511),s={get any(){return(0,a.Ax)("any",{type:null})},get func(){return(0,a.Ax)("function",{type:Function}).def(l.func)},get bool(){return(0,a.Ax)("boolean",{type:Boolean}).def(l.bool)},get string(){return(0,a.Ax)("string",{type:String}).def(l.string)},get number(){return(0,a.Ax)("number",{type:Number}).def(l.number)},get array(){return(0,a.Ax)("array",{type:Array}).def(l.array)},get object(){return(0,a.Ax)("object",{type:Object}).def(l.object)},get integer(){return(0,a.Ax)("integer",{type:Number,validator:function(e){return(0,a.Fq)(e)}}).def(l.integer)},get symbol(){return(0,a.Ax)("symbol",{type:null,validator:function(e){return"symbol"===("undefined"===typeof e?"undefined":(0,r.A)(e))}})},custom:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"custom validation failed";if("function"!==typeof e)throw new TypeError("[VueTypes error]: You must provide a function as argument");return(0,a.Ax)(e.name||"<>",{validator:function(){var n=e.apply(void 0,arguments);return n||(0,a.R8)(this._vueTypes_name+" - "+t),n}})},oneOf:function(e){if(!(0,a.cy)(e))throw new TypeError("[VueTypes error]: You must provide an array as argument");var t='oneOf - value should be one of "'+e.join('", "')+'"',n=e.reduce(function(e,t){return null!==t&&void 0!==t&&-1===e.indexOf(t.constructor)&&e.push(t.constructor),e},[]);return(0,a.Ax)("oneOf",{type:n.length>0?n:null,validator:function(n){var r=-1!==e.indexOf(n);return r||(0,a.R8)(t),r}})},instanceOf:function(e){return(0,a.Ax)("instanceOf",{type:e})},oneOfType:function(e){if(!(0,a.cy)(e))throw new TypeError("[VueTypes error]: You must provide an array as argument");var t=!1,n=e.reduce(function(e,n){if(o()(n)){if("oneOf"===n._vueTypes_name)return e.concat(n.type||[]);if(n.type&&!(0,a.Tn)(n.validator)){if((0,a.cy)(n.type))return e.concat(n.type);e.push(n.type)}else(0,a.Tn)(n.validator)&&(t=!0);return e}return e.push(n),e},[]);if(!t)return(0,a.Ax)("oneOfType",{type:n}).def(void 0);var r=e.map(function(e){return e&&(0,a.cy)(e.type)?e.type.map(a.Pw):(0,a.Pw)(e)}).reduce(function(e,t){return e.concat((0,a.cy)(t)?t:[t])},[]).join('", "');return this.custom(function(t){var n=e.some(function(e){return"oneOf"===e._vueTypes_name?!e.type||(0,a.v2)(e.type,t,!0):(0,a.v2)(e,t,!0)});return n||(0,a.R8)('oneOfType - value type should be one of "'+r+'"'),n}).def(void 0)},arrayOf:function(e){return(0,a.Ax)("arrayOf",{type:Array,validator:function(t){var n=t.every(function(t){return(0,a.v2)(e,t)});return n||(0,a.R8)('arrayOf - value must be an array of "'+(0,a.Pw)(e)+'"'),n}})},objectOf:function(e){return(0,a.Ax)("objectOf",{type:Object,validator:function(t){var n=Object.keys(t).every(function(n){return(0,a.v2)(e,t[n])});return n||(0,a.R8)('objectOf - value must be an object of "'+(0,a.Pw)(e)+'"'),n}})},shape:function(e){var t=Object.keys(e),n=t.filter(function(t){return e[t]&&!0===e[t].required}),r=(0,a.Ax)("shape",{type:Object,validator:function(r){var i=this;if(!o()(r))return!1;var s=Object.keys(r);return n.length>0&&n.some(function(e){return-1===s.indexOf(e)})?((0,a.R8)('shape - at least one of required properties "'+n.join('", "')+'" is not present'),!1):s.every(function(n){if(-1===t.indexOf(n))return!0===i._vueTypes_isLoose||((0,a.R8)('shape - object is missing "'+n+'" property'),!1);var o=e[n];return(0,a.v2)(o,r[n])})}});return Object.defineProperty(r,"_vueTypes_isLoose",{enumerable:!1,writable:!0,value:!1}),Object.defineProperty(r,"loose",{get:function(){return this._vueTypes_isLoose=!0,this},enumerable:!1}),r}},c=function(){return{func:void 0,bool:void 0,string:void 0,number:void 0,array:void 0,object:void 0,integer:void 0}},l=c();Object.defineProperty(s,"sensibleDefaults",{enumerable:!1,set:function(e){!1===e?l={}:!0===e?l=c():o()(e)&&(l=e)},get:function(){return l}}),t.A=s},20511:function(e,t,n){"use strict";n.d(t,{Ax:function(){return g},Fq:function(){return h},Pw:function(){return l},R8:function(){return _},Tn:function(){return p},cy:function(){return f},v2:function(){return y}});var r=n(11331),i=n.n(r),o=Object.prototype,a=o.toString,s=o.hasOwnProperty,c=/^\s*function (\w+)/,l=function(e){var t=null!==e&&void 0!==e?e.type?e.type:e:null,n=t&&t.toString().match(c);return n&&n[1]},u=function(e){if(null===e||void 0===e)return null;var t=e.constructor.toString().match(c);return t&&t[1]},d=function(){},h=Number.isInteger||function(e){return"number"===typeof e&&isFinite(e)&&Math.floor(e)===e},f=Array.isArray||function(e){return"[object Array]"===a.call(e)},p=function(e){return"[object Function]"===a.call(e)},m=function(e){Object.defineProperty(e,"def",{value:function(e){return void 0===e&&void 0===this["default"]?(this["default"]=void 0,this):p(e)||y(this,e)?(this["default"]=f(e)||i()(e)?function(){return e}:e,this):(_(this._vueTypes_name+' - invalid default value: "'+e+'"',e),this)},enumerable:!1,writable:!1})},v=function(e){Object.defineProperty(e,"isRequired",{get:function(){return this.required=!0,this},enumerable:!1})},g=function(e,t){return Object.defineProperty(t,"_vueTypes_name",{enumerable:!1,writable:!1,value:e}),v(t),m(t),p(t.validator)&&(t.validator=t.validator.bind(t)),t},y=function e(t,n){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=t,a=!0,c=void 0;i()(t)||(o={type:t});var d=o._vueTypes_name?o._vueTypes_name+" - ":"";return s.call(o,"type")&&null!==o.type&&(f(o.type)?(a=o.type.some(function(t){return e(t,n,!0)}),c=o.type.map(function(e){return l(e)}).join(" or ")):(c=l(o),a="Array"===c?f(n):"Object"===c?i()(n):"String"===c||"Number"===c||"Boolean"===c||"Function"===c?u(n)===c:n instanceof o.type)),a?s.call(o,"validator")&&p(o.validator)?(a=o.validator(n),a||!1!==r||_(d+"custom validation failed"),a):a:(!1===r&&_(d+'value "'+n+'" should be of type "'+c+'"'),!1)},_=d},36873:function(e,t,n){"use strict";n.d(t,{A:function(){return c}});var r={};function i(e,t){0}function o(e,t,n){t||r[n]||(e(!1,n),r[n]=!0)}function a(e,t){o(i,e,t)}var s=a,c=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";s(e,"[antdv: "+t+"] "+n)}},98416:function(e,t,n){"use strict";var r=n(91158),i=n(70556),o=n(25592),a=void 0;function s(e){return!e||null===e.offsetParent}function c(e){var t=(e||"").match(/rgba?\((\d*), (\d*), (\d*)(, [\.\d]*)?\)/);return!(t&&t[1]&&t[2]&&t[3])||!(t[1]===t[2]&&t[2]===t[3])}t.A={name:"Wave",props:["insertExtraNode"],mounted:function(){var e=this;this.$nextTick(function(){var t=e.$el;1===t.nodeType&&(e.instance=e.bindAnimationEvent(t))})},inject:{configProvider:{default:function(){return o.f}}},beforeDestroy:function(){this.instance&&this.instance.cancel(),this.clickWaveTimeoutId&&clearTimeout(this.clickWaveTimeoutId),this.destroy=!0},methods:{onClick:function(e,t){if(!(!e||s(e)||e.className.indexOf("-leave")>=0)){var n=this.$props.insertExtraNode;this.extraNode=document.createElement("div");var i=this.extraNode;i.className="ant-click-animating-node";var o=this.getAttributeName();e.removeAttribute(o),e.setAttribute(o,"true"),a=a||document.createElement("style"),t&&"#ffffff"!==t&&"rgb(255, 255, 255)"!==t&&c(t)&&!/rgba\(\d*, \d*, \d*, 0\)/.test(t)&&"transparent"!==t&&(this.csp&&this.csp.nonce&&(a.nonce=this.csp.nonce),i.style.borderColor=t,a.innerHTML="\n [ant-click-animating-without-extra-node='true']::after, .ant-click-animating-node {\n --antd-wave-shadow-color: "+t+";\n }",document.body.contains(a)||document.body.appendChild(a)),n&&e.appendChild(i),r.A.addStartEventListener(e,this.onTransitionStart),r.A.addEndEventListener(e,this.onTransitionEnd)}},onTransitionStart:function(e){if(!this.destroy){var t=this.$el;e&&e.target===t&&(this.animationStart||this.resetEffect(t))}},onTransitionEnd:function(e){e&&"fadeEffect"===e.animationName&&this.resetEffect(e.target)},getAttributeName:function(){var e=this.$props.insertExtraNode;return e?"ant-click-animating":"ant-click-animating-without-extra-node"},bindAnimationEvent:function(e){var t=this;if(e&&e.getAttribute&&!e.getAttribute("disabled")&&!(e.className.indexOf("disabled")>=0)){var n=function(n){if("INPUT"!==n.target.tagName&&!s(n.target)){t.resetEffect(e);var r=getComputedStyle(e).getPropertyValue("border-top-color")||getComputedStyle(e).getPropertyValue("border-color")||getComputedStyle(e).getPropertyValue("background-color");t.clickWaveTimeoutId=window.setTimeout(function(){return t.onClick(e,r)},0),i.A.cancel(t.animationStartId),t.animationStart=!0,t.animationStartId=(0,i.A)(function(){t.animationStart=!1},10)}};return e.addEventListener("click",n,!0),{cancel:function(){e.removeEventListener("click",n,!0)}}}},resetEffect:function(e){if(e&&e!==this.extraNode&&e instanceof Element){var t=this.$props.insertExtraNode,n=this.getAttributeName();e.setAttribute(n,"false"),a&&(a.innerHTML=""),t&&this.extraNode&&e.contains(this.extraNode)&&e.removeChild(this.extraNode),r.A.removeStartEventListener(e,this.onTransitionStart),r.A.removeEndEventListener(e,this.onTransitionEnd)}}},render:function(){return this.configProvider.csp&&(this.csp=this.configProvider.csp),this.$slots["default"]&&this.$slots["default"][0]}}},64274:function(e,t,n){"use strict";var r=n(44508),i=n(40255),o=n(46942),a=n.n(o),s=n(52315),c=n(4718),l=n(80178),u=n(15848),d=n(51927),h=n(25592),f=n(44807);function p(){}var m={type:c.A.oneOf(["success","info","warning","error"]),closable:c.A.bool,closeText:c.A.any,message:c.A.any,description:c.A.any,afterClose:c.A.func.def(p),showIcon:c.A.bool,iconType:c.A.string,prefixCls:c.A.string,banner:c.A.bool,icon:c.A.any},v={name:"AAlert",props:m,mixins:[s.A],inject:{configProvider:{default:function(){return h.f}}},data:function(){return{closing:!1,closed:!1}},methods:{handleClose:function(e){e.preventDefault();var t=this.$el;t.style.height=t.offsetHeight+"px",t.style.height=t.offsetHeight+"px",this.setState({closing:!0}),this.$emit("close",e)},animationEnd:function(){this.setState({closing:!1,closed:!0}),this.afterClose()}},render:function(){var e,t=arguments[0],n=this.prefixCls,o=this.banner,s=this.closing,c=this.closed,h=this.configProvider.getPrefixCls,f=h("alert",n),p=this.closable,m=this.type,v=this.showIcon,g=this.iconType,y=(0,u.nu)(this,"closeText"),_=(0,u.nu)(this,"description"),b=(0,u.nu)(this,"message"),M=(0,u.nu)(this,"icon");v=!(!o||void 0!==v)||v,m=o&&void 0===m?"warning":m||"info";var A="filled";if(!g){switch(m){case"success":g="check-circle";break;case"info":g="info-circle";break;case"error":g="close-circle";break;case"warning":g="exclamation-circle";break;default:g="default"}_&&(A="outlined")}y&&(p=!0);var w=a()(f,(e={},(0,r.A)(e,f+"-"+m,!0),(0,r.A)(e,f+"-closing",s),(0,r.A)(e,f+"-with-description",!!_),(0,r.A)(e,f+"-no-icon",!v),(0,r.A)(e,f+"-banner",!!o),(0,r.A)(e,f+"-closable",p),e)),x=p?t("button",{attrs:{type:"button",tabIndex:0},on:{click:this.handleClose},class:f+"-close-icon"},[y?t("span",{class:f+"-close-text"},[y]):t(i.A,{attrs:{type:"close"}})]):null,k=M&&((0,u.zO)(M)?(0,d.Ob)(M,{class:f+"-icon"}):t("span",{class:f+"-icon"},[M]))||t(i.A,{class:f+"-icon",attrs:{type:g,theme:A}}),L=(0,l.A)(f+"-slide-up",{appear:!1,afterLeave:this.animationEnd});return c?null:t("transition",L,[t("div",{directives:[{name:"show",value:!s}],class:w,attrs:{"data-show":!s}},[v?k:null,t("span",{class:f+"-message"},[b]),t("span",{class:f+"-description"},[_]),x])])},install:function(e){e.use(f.A),e.component(v.name,v)}};t.A=v},19120:function(e,t,n){"use strict";n(29229)},63956:function(e,t,n){"use strict";n.d(t,{A:function(){return b}});var r=n(97479),i=n(44508),o=n(85505),a=n(28781),s=n(68052),c=n(25824),l=n(57155),u=n(52040),d=n(4718),h=n(51927),f=n(15848);function p(){for(var e=arguments.length,t=Array(e),n=0;ni?o>=a?10+e:20+e:o<=a?10+e:e},onAnimated:function(){this.$emit("animated")},renderNumberList:function(e,t){for(var n=this.$createElement,r=[],i=0;i<30;i++)r.push(n("p",{key:i.toString(),class:u()(t,{current:e===i})},[i%10]));return r},renderCurrentNumber:function(e,t,n){var r=this.$createElement;if("number"===typeof t){var i=this.getPositionByNum(t,n),o=this.animateStarted||void 0===v(this.lastCount)[n],a={transition:o?"none":void 0,msTransform:"translateY("+100*-i+"%)",WebkitTransform:"translateY("+100*-i+"%)",transform:"translateY("+100*-i+"%)"};return r("span",{class:e+"-only",style:a,key:n},[this.renderNumberList(i,e+"-only-unit")])}return r("span",{key:"symbol",class:e+"-symbol"},[t])},renderNumberElement:function(e){var t=this,n=this.sCount;return n&&Number(n)%1===0?v(n).map(function(n,r){return t.renderCurrentNumber(e,n,r)}).reverse():n}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.title,r=this.component,i=void 0===r?"sup":r,o=this.displayComponent,a=this.className,c=this.configProvider.getPrefixCls,l=c("scroll-number",t);if(o)return(0,p.Ob)(o,{class:l+"-custom-component"});var d=(0,h.gd)(this,!0),m=(0,f.A)(this.$props,["count","component","prefixCls","displayComponent"]),v={props:(0,s.A)({},m),attrs:{title:n},style:d,class:u()(l,a)};return d&&d.borderColor&&(v.style.boxShadow="0 0 0 1px "+d.borderColor+" inset"),e(i,v,[this.renderNumberElement(l)])}},_=function(){for(var e=arguments.length,t=Array(e),n=0;ne?e+"+":t;return n},getDispayCount:function(){var e=this.isDot();return e?"":this.getNumberedDispayCount()},getScrollNumberTitle:function(){var e=this.$props.title,t=this.badgeCount;return e||("string"===typeof t||"number"===typeof t?t:void 0)},getStyleWithOffset:function(){var e=this.$props,t=e.offset,n=e.numberStyle;return t?(0,s.A)({right:-parseInt(t[0],10)+"px",marginTop:(0,A.A)(t[1])?t[1]+"px":t[1]},n):(0,s.A)({},n)},getBadgeClassName:function(e){var t,n=(0,h.Gk)(this.$slots["default"]),r=this.hasStatus();return u()(e,(t={},(0,a.A)(t,e+"-status",r),(0,a.A)(t,e+"-dot-status",r&&this.dot&&!this.isZero()),(0,a.A)(t,e+"-not-a-wrapper",!n.length),t))},hasStatus:function(){var e=this.$props,t=e.status,n=e.color;return!!t||!!n},isZero:function(){var e=this.getNumberedDispayCount();return"0"===e||0===e},isDot:function(){var e=this.$props.dot,t=this.isZero();return e&&!t||this.hasStatus()},isHidden:function(){var e=this.$props.showZero,t=this.getDispayCount(),n=this.isZero(),r=this.isDot(),i=null===t||void 0===t||""===t;return(i||n&&!e)&&!r},renderStatusText:function(e){var t=this.$createElement,n=this.$props.text,r=this.isHidden();return r||!n?null:t("span",{class:e+"-status-text"},[n])},renderDispayComponent:function(){var e=this.badgeCount,t=e;if(t&&"object"===("undefined"===typeof t?"undefined":(0,o.A)(t)))return(0,p.Ob)(t,{style:this.getStyleWithOffset()})},renderBadgeNumber:function(e,t){var n,r=this.$createElement,i=this.$props,o=i.status,s=i.color,c=this.badgeCount,l=this.getDispayCount(),u=this.isDot(),d=this.isHidden(),h=(n={},(0,a.A)(n,e+"-dot",u),(0,a.A)(n,e+"-count",!u),(0,a.A)(n,e+"-multiple-words",!u&&c&&c.toString&&c.toString().length>1),(0,a.A)(n,e+"-status-"+o,!!o),(0,a.A)(n,e+"-status-"+s,x(s)),n),f=this.getStyleWithOffset();return s&&!x(s)&&(f=f||{},f.background=s),d?null:r(y,{attrs:{prefixCls:t,"data-show":!d,className:h,count:l,displayComponent:this.renderDispayComponent(),title:this.getScrollNumberTitle()},directives:[{name:"show",value:!d}],style:f,key:"scrollNumber"})}},render:function(){var e,t=arguments[0],n=this.prefixCls,r=this.scrollNumberPrefixCls,o=this.status,s=this.text,c=this.color,l=this.$slots,d=this.configProvider.getPrefixCls,f=d("badge",n),p=d("scroll-number",r),m=(0,h.Gk)(l["default"]),v=(0,h.nu)(this,"count");Array.isArray(v)&&(v=v[0]),this.badgeCount=v;var g=this.renderBadgeNumber(f,p),y=this.renderStatusText(f),_=u()((e={},(0,a.A)(e,f+"-status-dot",this.hasStatus()),(0,a.A)(e,f+"-status-"+o,!!o),(0,a.A)(e,f+"-status-"+c,x(c)),e)),b={};if(c&&!x(c)&&(b.background=c),!m.length&&this.hasStatus()){var A=this.getStyleWithOffset(),w=A&&A.color;return t("span",i()([{on:(0,h.WM)(this)},{class:this.getBadgeClassName(f),style:A}]),[t("span",{class:_,style:b}),t("span",{style:{color:w},class:f+"-status-text"},[s])])}var k=(0,M.A)(m.length?f+"-zoom":"");return t("span",i()([{on:(0,h.WM)(this)},{class:this.getBadgeClassName(f)}]),[m,t("transition",k,[g]),y])}},L=n(44807);k.install=function(e){e.use(L.A),e.component(k.name,k)};var C=k},19807:function(e,t,n){"use strict";n(29229)},44807:function(e,t,n){"use strict";n.d(t,{A:function(){return u}});var r=n(24415),i=n(81593),o=n(35745),a=n(1406),s={install:function(e){e.use(r.A,{name:"ant-ref"}),(0,i.Qg)(e),(0,o.b)(e),(0,a.o)(e)}},c={},l=function(e){c.Vue=e,e.use(s)};c.install=l;var u=c},65847:function(e,t,n){"use strict";n.d(t,{A:function(){return _}});var r=n(32779),i=n(4718),o=n(51927),a=n(15848),s=n(36873),c=n(25592),l=n(57981),u=n(40255),d={name:"ABreadcrumbItem",__ANT_BREADCRUMB_ITEM:!0,props:{prefixCls:i.A.string,href:i.A.string,separator:i.A.any.def("/"),overlay:i.A.any},inject:{configProvider:{default:function(){return c.f}}},methods:{renderBreadcrumbNode:function(e,t){var n=this.$createElement,r=(0,a.nu)(this,"overlay");return r?n(l.A,{attrs:{overlay:r,placement:"bottomCenter"}},[n("span",{class:t+"-overlay-link"},[e,n(u.A,{attrs:{type:"down"}})])]):e}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.$slots,r=this.configProvider.getPrefixCls,i=r("breadcrumb",t),o=(0,a.nu)(this,"separator"),s=n["default"],c=void 0;return c=(0,a.cK)(this,"href")?e("a",{class:i+"-link"},[s]):e("span",{class:i+"-link"},[s]),c=this.renderBreadcrumbNode(c,i),s?e("span",[c,o&&""!==o&&e("span",{class:i+"-separator"},[o])]):null}},h=n(36457),f=i.A.shape({path:i.A.string,breadcrumbName:i.A.string,children:i.A.array}).loose,p={prefixCls:i.A.string,routes:i.A.arrayOf(f),params:i.A.any,separator:i.A.any,itemRender:i.A.func};function m(e,t){if(!e.breadcrumbName)return null;var n=Object.keys(t).join("|"),r=e.breadcrumbName.replace(new RegExp(":("+n+")","g"),function(e,n){return t[n]||e});return r}var v={name:"ABreadcrumb",props:p,inject:{configProvider:{default:function(){return c.f}}},methods:{defaultItemRender:function(e){var t=e.route,n=e.params,r=e.routes,i=e.paths,o=this.$createElement,a=r.indexOf(t)===r.length-1,s=m(t,n);return a?o("span",[s]):o("a",{attrs:{href:"#/"+i.join("/")}},[s])},getPath:function(e,t){return e=(e||"").replace(/^\//,""),Object.keys(t).forEach(function(n){e=e.replace(":"+n,t[n])}),e},addChildPath:function(e,t,n){var i=[].concat((0,r.A)(e)),o=this.getPath(t,n);return o&&i.push(o),i},genForRoutes:function(e){var t=this,n=e.routes,r=void 0===n?[]:n,i=e.params,o=void 0===i?{}:i,a=e.separator,s=e.itemRender,c=void 0===s?this.defaultItemRender:s,l=this.$createElement,u=[];return r.map(function(e){var n=t.getPath(e.path,o);n&&u.push(n);var i=null;return e.children&&e.children.length&&(i=l(h.Ay,[e.children.map(function(e){return l(h.Ay.Item,{key:e.path||e.breadcrumbName},[c({route:e,params:o,routes:r,paths:t.addChildPath(u,e.path,o),h:t.$createElement})])})])),l(d,{attrs:{overlay:i,separator:a},key:n||e.breadcrumbName},[c({route:e,params:o,routes:r,paths:u,h:t.$createElement})])})}},render:function(){var e=arguments[0],t=void 0,n=this.prefixCls,r=this.routes,i=this.params,c=void 0===i?{}:i,l=this.$slots,u=this.$scopedSlots,d=this.configProvider.getPrefixCls,h=d("breadcrumb",n),f=(0,a.Gk)(l["default"]),p=(0,a.nu)(this,"separator"),m=this.itemRender||u.itemRender||this.defaultItemRender;return r&&r.length>0?t=this.genForRoutes({routes:r,params:c,separator:p,itemRender:m}):f.length&&(t=f.map(function(e,t){return(0,s.A)((0,a.xr)(e).__ANT_BREADCRUMB_ITEM||(0,a.xr)(e).__ANT_BREADCRUMB_SEPARATOR,"Breadcrumb","Only accepts Breadcrumb.Item and Breadcrumb.Separator as it's children"),(0,o.Ob)(e,{props:{separator:p},key:t})})),e("div",{class:h},[t])}},g={name:"ABreadcrumbSeparator",__ANT_BREADCRUMB_SEPARATOR:!0,props:{prefixCls:i.A.string},inject:{configProvider:{default:function(){return c.f}}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.$slots,r=this.configProvider.getPrefixCls,i=r("breadcrumb",t),o=n["default"];return e("span",{class:i+"-separator"},[o||"/"])}},y=n(44807);v.Item=d,v.Separator=g,v.install=function(e){e.use(y.A),e.component(v.name,v),e.component(d.name,d),e.component(g.name,g)};var _=v},70093:function(e,t,n){"use strict";n(29229),n(1747),n(63713)},49872:function(e,t,n){"use strict";n.d(t,{E:function(){return s}});var r=n(44508),i=n(15848),o=n(4718),a=n(25592),s={prefixCls:o.A.string,size:{validator:function(e){return["small","large","default"].includes(e)}}};t.A={name:"AButtonGroup",props:s,inject:{configProvider:{default:function(){return a.f}}},data:function(){return{sizeMap:{large:"lg",small:"sm"}}},render:function(){var e,t=arguments[0],n=this.prefixCls,o=this.size,a=this.$slots,s=this.configProvider.getPrefixCls,c=s("btn-group",n),l="";switch(o){case"large":l="lg";break;case"small":l="sm";break;default:break}var u=(e={},(0,r.A)(e,""+c,!0),(0,r.A)(e,c+"-"+l,l),e);return t("div",{class:u},[(0,i.Gk)(a["default"])])}}},26997:function(e,t,n){"use strict";var r=n(4718);t.A=function(){return{prefixCls:r.A.string,type:r.A.string,htmlType:r.A.oneOf(["button","submit","reset"]).def("button"),icon:r.A.any,shape:r.A.oneOf(["circle","circle-outline","round"]),size:r.A.oneOf(["small","large","default"]).def("default"),loading:r.A.oneOfType([r.A.bool,r.A.object]),disabled:r.A.bool,ghost:r.A.bool,block:r.A.bool}}},49084:function(e,t,n){"use strict";n.d(t,{A:function(){return y}});var r=n(75189),i=n.n(r),o=n(85505),a=n(44508),s=n(98416),c=n(40255),l=n(26997),u=n(15848),d=n(25592),h=/^[\u4e00-\u9fa5]{2}$/,f=h.test.bind(h),p=(0,l.A)(),m={name:"AButton",inheritAttrs:!1,__ANT_BUTTON:!0,props:p,inject:{configProvider:{default:function(){return d.f}}},data:function(){return{sizeMap:{large:"lg",small:"sm"},sLoading:!!this.loading,hasTwoCNChar:!1}},computed:{classes:function(){var e,t=this.prefixCls,n=this.type,r=this.shape,i=this.size,o=this.hasTwoCNChar,s=this.sLoading,c=this.ghost,l=this.block,d=this.icon,h=this.$slots,f=this.configProvider.getPrefixCls,p=f("btn",t),m=!1!==this.configProvider.autoInsertSpaceInButton,v="";switch(i){case"large":v="lg";break;case"small":v="sm";break;default:break}var g=s?"loading":d,y=(0,u.Gk)(h["default"]);return e={},(0,a.A)(e,""+p,!0),(0,a.A)(e,p+"-"+n,n),(0,a.A)(e,p+"-"+r,r),(0,a.A)(e,p+"-"+v,v),(0,a.A)(e,p+"-icon-only",0===y.length&&g),(0,a.A)(e,p+"-loading",s),(0,a.A)(e,p+"-background-ghost",c||"ghost"===n),(0,a.A)(e,p+"-two-chinese-chars",o&&m),(0,a.A)(e,p+"-block",l),e}},watch:{loading:function(e,t){var n=this;t&&"boolean"!==typeof t&&clearTimeout(this.delayTimeout),e&&"boolean"!==typeof e&&e.delay?this.delayTimeout=setTimeout(function(){n.sLoading=!!e},e.delay):this.sLoading=!!e}},mounted:function(){this.fixTwoCNChar()},updated:function(){this.fixTwoCNChar()},beforeDestroy:function(){this.delayTimeout&&clearTimeout(this.delayTimeout)},methods:{fixTwoCNChar:function(){var e=this.$refs.buttonNode;if(e){var t=e.textContent;this.isNeedInserted()&&f(t)?this.hasTwoCNChar||(this.hasTwoCNChar=!0):this.hasTwoCNChar&&(this.hasTwoCNChar=!1)}},handleClick:function(e){var t=this.$data.sLoading;t||this.$emit("click",e)},insertSpace:function(e,t){var n=this.$createElement,r=t?" ":"";if("string"===typeof e.text){var i=e.text.trim();return f(i)&&(i=i.split("").join(r)),n("span",[i])}return e},isNeedInserted:function(){var e=this.$slots,t=this.type,n=(0,u.nu)(this,"icon");return e["default"]&&1===e["default"].length&&!n&&"link"!==t}},render:function(){var e=this,t=arguments[0],n=this.type,r=this.htmlType,a=this.classes,l=this.disabled,d=this.handleClick,h=this.sLoading,f=this.$slots,p=this.$attrs,m=(0,u.nu)(this,"icon"),v={attrs:(0,o.A)({},p,{disabled:l}),class:a,on:(0,o.A)({},(0,u.WM)(this),{click:d})},g=h?"loading":m,y=g?t(c.A,{attrs:{type:g}}):null,_=(0,u.Gk)(f["default"]),b=!1!==this.configProvider.autoInsertSpaceInButton,M=_.map(function(t){return e.insertSpace(t,e.isNeedInserted()&&b)});if(void 0!==p.href)return t("a",i()([v,{ref:"buttonNode"}]),[y,M]);var A=t("button",i()([v,{ref:"buttonNode",attrs:{type:r||"button"}}]),[y,M]);return"link"===n?A:t(s.A,[A])}},v=n(49872),g=n(44807);m.Group=v.A,m.install=function(e){e.use(g.A),e.component(m.name,m),e.component(v.A.name,v.A)};var y=m},27902:function(e,t,n){"use strict";n(29229)},73856:function(e,t,n){"use strict";n.d(t,{A:function(){return b}});var r=n(75189),i=n.n(r),o=n(85505),a=n(44508),s=n(90034),c=n(14248),l=n(812),u=n(29966),d=n(4718),h=n(15848),f=n(52315),p=n(25592),m=c.Ay.TabPane,v={name:"ACard",mixins:[f.A],props:{prefixCls:d.A.string,title:d.A.any,extra:d.A.any,bordered:d.A.bool.def(!0),bodyStyle:d.A.object,headStyle:d.A.object,loading:d.A.bool.def(!1),hoverable:d.A.bool.def(!1),type:d.A.string,size:d.A.oneOf(["default","small"]),actions:d.A.any,tabList:d.A.array,tabProps:d.A.object,tabBarExtraContent:d.A.any,activeTabKey:d.A.string,defaultActiveTabKey:d.A.string},inject:{configProvider:{default:function(){return p.f}}},data:function(){return{widerPadding:!1}},methods:{getAction:function(e){var t=this.$createElement,n=e.map(function(n,r){return t("li",{style:{width:100/e.length+"%"},key:"action-"+r},[t("span",[n])])});return n},onTabChange:function(e){this.$emit("tabChange",e)},isContainGrid:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=void 0;return e.forEach(function(e){e&&(0,h.xr)(e).__ANT_CARD_GRID&&(t=!0)}),t}},render:function(){var e,t,n=arguments[0],r=this.$props,d=r.prefixCls,f=r.headStyle,p=void 0===f?{}:f,v=r.bodyStyle,g=void 0===v?{}:v,y=r.loading,_=r.bordered,b=void 0===_||_,M=r.size,A=void 0===M?"default":M,w=r.type,x=r.tabList,k=r.tabProps,L=void 0===k?{}:k,C=r.hoverable,S=r.activeTabKey,z=r.defaultActiveTabKey,T=this.configProvider.getPrefixCls,O=T("card",d),H=this.$slots,D=this.$scopedSlots,Y=(0,h.nu)(this,"tabBarExtraContent"),V=(e={},(0,a.A)(e,""+O,!0),(0,a.A)(e,O+"-loading",y),(0,a.A)(e,O+"-bordered",b),(0,a.A)(e,O+"-hoverable",!!C),(0,a.A)(e,O+"-contain-grid",this.isContainGrid(H["default"])),(0,a.A)(e,O+"-contain-tabs",x&&x.length),(0,a.A)(e,O+"-"+A,"default"!==A),(0,a.A)(e,O+"-type-"+w,!!w),e),P=0===g.padding||"0px"===g.padding?{padding:24}:void 0,E=n("div",{class:O+"-loading-content",style:P},[n(l.A,{attrs:{gutter:8}},[n(u.A,{attrs:{span:22}},[n("div",{class:O+"-loading-block"})])]),n(l.A,{attrs:{gutter:8}},[n(u.A,{attrs:{span:8}},[n("div",{class:O+"-loading-block"})]),n(u.A,{attrs:{span:15}},[n("div",{class:O+"-loading-block"})])]),n(l.A,{attrs:{gutter:8}},[n(u.A,{attrs:{span:6}},[n("div",{class:O+"-loading-block"})]),n(u.A,{attrs:{span:18}},[n("div",{class:O+"-loading-block"})])]),n(l.A,{attrs:{gutter:8}},[n(u.A,{attrs:{span:13}},[n("div",{class:O+"-loading-block"})]),n(u.A,{attrs:{span:9}},[n("div",{class:O+"-loading-block"})])]),n(l.A,{attrs:{gutter:8}},[n(u.A,{attrs:{span:4}},[n("div",{class:O+"-loading-block"})]),n(u.A,{attrs:{span:3}},[n("div",{class:O+"-loading-block"})]),n(u.A,{attrs:{span:16}},[n("div",{class:O+"-loading-block"})])])]),j=void 0!==S,F={props:(0,o.A)({size:"large"},L,(t={},(0,a.A)(t,j?"activeKey":"defaultActiveKey",j?S:z),(0,a.A)(t,"tabBarExtraContent",Y),t)),on:{change:this.onTabChange},class:O+"-head-tabs"},I=void 0,$=x&&x.length?n(c.Ay,F,[x.map(function(e){var t=e.tab,r=e.scopedSlots,i=void 0===r?{}:r,o=i.tab,a=void 0!==t?t:D[o]?D[o](e):null;return n(m,{attrs:{tab:a,disabled:e.disabled},key:e.key})})]):null,R=(0,h.nu)(this,"title"),N=(0,h.nu)(this,"extra");(R||N||$)&&(I=n("div",{class:O+"-head",style:p},[n("div",{class:O+"-head-wrapper"},[R&&n("div",{class:O+"-head-title"},[R]),N&&n("div",{class:O+"-extra"},[N])]),$]));var W=H["default"],B=(0,h.nu)(this,"cover"),K=B?n("div",{class:O+"-cover"},[B]):null,U=n("div",{class:O+"-body",style:g},[y?E:W]),q=(0,h.Gk)(this.$slots.actions),G=q&&q.length?n("ul",{class:O+"-actions"},[this.getAction(q)]):null;return n("div",i()([{class:V,ref:"cardContainerRef"},{on:(0,s.A)((0,h.WM)(this),["tabChange","tab-change"])}]),[I,K,W?U:null,G])}},g={name:"ACardMeta",props:{prefixCls:d.A.string,title:d.A.any,description:d.A.any},inject:{configProvider:{default:function(){return p.f}}},render:function(){var e=arguments[0],t=this.$props.prefixCls,n=this.configProvider.getPrefixCls,r=n("card",t),o=(0,a.A)({},r+"-meta",!0),s=(0,h.nu)(this,"avatar"),c=(0,h.nu)(this,"title"),l=(0,h.nu)(this,"description"),u=s?e("div",{class:r+"-meta-avatar"},[s]):null,d=c?e("div",{class:r+"-meta-title"},[c]):null,f=l?e("div",{class:r+"-meta-description"},[l]):null,p=d||f?e("div",{class:r+"-meta-detail"},[d,f]):null;return e("div",i()([{on:(0,h.WM)(this)},{class:o}]),[u,p])}},y={name:"ACardGrid",__ANT_CARD_GRID:!0,props:{prefixCls:d.A.string,hoverable:d.A.bool},inject:{configProvider:{default:function(){return p.f}}},render:function(){var e,t=arguments[0],n=this.$props,r=n.prefixCls,o=n.hoverable,s=void 0===o||o,c=this.configProvider.getPrefixCls,l=c("card",r),u=(e={},(0,a.A)(e,l+"-grid",!0),(0,a.A)(e,l+"-grid-hoverable",s),e);return t("div",i()([{on:(0,h.WM)(this)},{class:u}]),[this.$slots["default"]])}},_=n(44807);v.Meta=g,v.Grid=y,v.install=function(e){e.use(_.A),e.component(v.name,v),e.component(g.name,g),e.component(y.name,y)};var b=v},85288:function(e,t,n){"use strict";n(29229),n(14686),n(12854),n(35184)},75842:function(e,t,n){"use strict";n.d(t,{A:function(){return M}});var r=n(75189),i=n.n(r),o=n(44508),a=n(85505),s=n(5748),c=n(4718),l=n(46942),u=n.n(l),d=n(68145),h=n(15848),f=n(25592),p=n(36873);function m(){}var v={name:"ACheckbox",inheritAttrs:!1,__ANT_CHECKBOX:!0,model:{prop:"checked"},props:{prefixCls:c.A.string,defaultChecked:c.A.bool,checked:c.A.bool,disabled:c.A.bool,isGroup:c.A.bool,value:c.A.any,name:c.A.string,id:c.A.string,indeterminate:c.A.bool,type:c.A.string.def("checkbox"),autoFocus:c.A.bool},inject:{configProvider:{default:function(){return f.f}},checkboxGroupContext:{default:function(){}}},watch:{value:function(e,t){var n=this;this.$nextTick(function(){var r=n.checkboxGroupContext,i=void 0===r?{}:r;i.registerValue&&i.cancelValue&&(i.cancelValue(t),i.registerValue(e))})}},mounted:function(){var e=this.value,t=this.checkboxGroupContext,n=void 0===t?{}:t;n.registerValue&&n.registerValue(e),(0,p.A)((0,h.Ay)(this,"checked")||this.checkboxGroupContext||!(0,h.Ay)(this,"value"),"Checkbox","`value` is not validate prop, do you mean `checked`?")},beforeDestroy:function(){var e=this.value,t=this.checkboxGroupContext,n=void 0===t?{}:t;n.cancelValue&&n.cancelValue(e)},methods:{handleChange:function(e){var t=e.target.checked;this.$emit("input",t),this.$emit("change",e)},focus:function(){this.$refs.vcCheckbox.focus()},blur:function(){this.$refs.vcCheckbox.blur()}},render:function(){var e,t=this,n=arguments[0],r=this.checkboxGroupContext,c=this.$slots,l=(0,h.Oq)(this),f=c["default"],p=(0,h.WM)(this),v=p.mouseenter,g=void 0===v?m:v,y=p.mouseleave,_=void 0===y?m:y,b=(p.input,(0,s.A)(p,["mouseenter","mouseleave","input"])),M=l.prefixCls,A=l.indeterminate,w=(0,s.A)(l,["prefixCls","indeterminate"]),x=this.configProvider.getPrefixCls,k=x("checkbox",M),L={props:(0,a.A)({},w,{prefixCls:k}),on:b,attrs:(0,h.Z0)(this)};r?(L.on.change=function(){for(var e=arguments.length,n=Array(e),i=0;i0&&(c=this.getOptions().map(function(r){return e(v,{attrs:{prefixCls:s,disabled:"disabled"in r?r.disabled:t.disabled,indeterminate:r.indeterminate,value:r.value,checked:-1!==n.sValue.indexOf(r.value)},key:r.value.toString(),on:{change:r.onChange||y},class:l+"-item"},[r.label])})),e("div",{class:l},[c])}},b=n(44807);v.Group=_,v.install=function(e){e.use(b.A),e.component(v.name,v),e.component(_.name,_)};var M=v},46925:function(e,t,n){"use strict";n(29229)},29966:function(e,t,n){"use strict";var r=n(43594),i=n(44807);r.Ay.install=function(e){e.use(i.A),e.component(r.Ay.name,r.Ay)},t.A=r.Ay},35184:function(e,t,n){"use strict";n(29229),n(67434)},34149:function(e,t,n){"use strict";n.d(t,{A:function(){return C}});var r=n(85505),i=n(44508),o=n(40703),a=n(15848),s=n(51927),c=n(4718),l=function(){return{prefixCls:c.A.string,activeKey:c.A.oneOfType([c.A.string,c.A.number,c.A.arrayOf(c.A.oneOfType([c.A.string,c.A.number]))]),defaultActiveKey:c.A.oneOfType([c.A.string,c.A.number,c.A.arrayOf(c.A.oneOfType([c.A.string,c.A.number]))]),accordion:c.A.bool,destroyInactivePanel:c.A.bool,bordered:c.A.bool,expandIcon:c.A.func,openAnimation:c.A.object,expandIconPosition:c.A.oneOf(["left","right"])}},u=function(){return{openAnimation:c.A.object,prefixCls:c.A.string,header:c.A.oneOfType([c.A.string,c.A.number,c.A.node]),headerClass:c.A.string,showArrow:c.A.bool,isActive:c.A.bool,destroyInactivePanel:c.A.bool,disabled:c.A.bool,accordion:c.A.bool,forceRender:c.A.bool,expandIcon:c.A.func,extra:c.A.any,panelKey:c.A.any}},d={name:"PanelContent",props:{prefixCls:c.A.string,isActive:c.A.bool,destroyInactivePanel:c.A.bool,forceRender:c.A.bool,role:c.A.any},data:function(){return{_isActive:void 0}},render:function(){var e,t=arguments[0];if(this._isActive=this.forceRender||this._isActive||this.isActive,!this._isActive)return null;var n=this.$props,r=n.prefixCls,o=n.isActive,a=n.destroyInactivePanel,s=n.forceRender,c=n.role,l=this.$slots,u=(e={},(0,i.A)(e,r+"-content",!0),(0,i.A)(e,r+"-content-active",o),e),d=s||o||!a?t("div",{class:r+"-content-box"},[l["default"]]):null;return t("div",{class:u,attrs:{role:c}},[d])}},h={name:"Panel",props:(0,a.CB)(u(),{showArrow:!0,isActive:!1,destroyInactivePanel:!1,headerClass:"",forceRender:!1}),methods:{handleItemClick:function(){this.$emit("itemClick",this.panelKey)},handleKeyPress:function(e){"Enter"!==e.key&&13!==e.keyCode&&13!==e.which||this.handleItemClick()}},render:function(){var e,t,n=arguments[0],o=this.$props,s=o.prefixCls,c=o.headerClass,l=o.isActive,u=o.showArrow,h=o.destroyInactivePanel,f=o.disabled,p=o.openAnimation,m=o.accordion,v=o.forceRender,g=o.expandIcon,y=o.extra,_=this.$slots,b={props:(0,r.A)({appear:!0,css:!1}),on:(0,r.A)({},p)},M=(e={},(0,i.A)(e,s+"-header",!0),(0,i.A)(e,c,c),e),A=(0,a.nu)(this,"header"),w=(t={},(0,i.A)(t,s+"-item",!0),(0,i.A)(t,s+"-item-active",l),(0,i.A)(t,s+"-item-disabled",f),t),x=n("i",{class:"arrow"});return u&&"function"===typeof g&&(x=g(this.$props)),n("div",{class:w,attrs:{role:"tablist"}},[n("div",{class:M,on:{click:this.handleItemClick.bind(this),keypress:this.handleKeyPress},attrs:{role:m?"tab":"button",tabIndex:f?-1:0,"aria-expanded":l}},[u&&x,A,y&&n("div",{class:s+"-extra"},[y])]),n("transition",b,[n(d,{directives:[{name:"show",value:l}],attrs:{prefixCls:s,isActive:l,destroyInactivePanel:h,forceRender:v,role:m?"tabpanel":null}},[_["default"]])])])}},f=n(32779),p=n(52315),m=n(75998);function v(e,t,n,r){var i=void 0;return(0,m.A)(e,n,{start:function(){t?(i=e.offsetHeight,e.style.height=0):e.style.height=e.offsetHeight+"px"},active:function(){e.style.height=(t?i:0)+"px"},end:function(){e.style.height="",r()}})}function g(e){return{enter:function(t,n){return v(t,!0,e+"-anim",n)},leave:function(t,n){return v(t,!1,e+"-anim",n)}}}var y=g;function _(e){var t=e;return Array.isArray(t)||(t=t?[t]:[]),t.map(function(e){return String(e)})}var b={name:"Collapse",mixins:[p.A],model:{prop:"activeKey",event:"change"},props:(0,a.CB)(l(),{prefixCls:"rc-collapse",accordion:!1,destroyInactivePanel:!1}),data:function(){var e=this.$props,t=e.activeKey,n=e.defaultActiveKey,r=e.openAnimation,i=e.prefixCls,o=n;(0,a.cK)(this,"activeKey")&&(o=t);var s=r||y(i);return{currentOpenAnimations:s,stateActiveKey:_(o)}},watch:{activeKey:function(e){this.setState({stateActiveKey:_(e)})},openAnimation:function(e){this.setState({currentOpenAnimations:e})}},methods:{onClickItem:function(e){var t=this.stateActiveKey;if(this.accordion)t=t[0]===e?[]:[e];else{t=[].concat((0,f.A)(t));var n=t.indexOf(e),r=n>-1;r?t.splice(n,1):t.push(e)}this.setActiveKey(t)},getNewChild:function(e,t){if(!(0,a.sG)(e)){var n=this.stateActiveKey,r=this.$props,i=r.prefixCls,o=r.accordion,c=r.destroyInactivePanel,l=r.expandIcon,u=e.key||String(t),d=(0,a.Ts)(e),h=d.header,f=d.headerClass,p=d.disabled,m=!1;m=o?n[0]===u:n.indexOf(u)>-1;var v={};p||""===p||(v={itemClick:this.onClickItem});var g={key:u,props:{panelKey:u,header:h,headerClass:f,isActive:m,prefixCls:i,destroyInactivePanel:c,openAnimation:this.currentOpenAnimations,accordion:o,expandIcon:l},on:v};return(0,s.Ob)(e,g)}},getItems:function(){var e=this,t=[];return this.$slots["default"]&&this.$slots["default"].forEach(function(n,r){t.push(e.getNewChild(n,r))}),t},setActiveKey:function(e){this.setState({stateActiveKey:e}),this.$emit("change",this.accordion?e[0]:e)}},render:function(){var e=arguments[0],t=this.$props,n=t.prefixCls,r=t.accordion,o=(0,i.A)({},n,!0);return e("div",{class:o,attrs:{role:r?"tablist":null}},[this.getItems()])}};b.Panel=h;var M=b,A=n(40255),w=n(25592),x={name:"ACollapse",model:{prop:"activeKey",event:"change"},props:(0,a.CB)(l(),{bordered:!0,openAnimation:o.A,expandIconPosition:"left"}),inject:{configProvider:{default:function(){return w.f}}},methods:{renderExpandIcon:function(e,t){var n=this.$createElement,r=(0,a.nu)(this,"expandIcon",e),i=r||n(A.A,{attrs:{type:"right",rotate:e.isActive?90:void 0}});return(0,a.zO)(Array.isArray(r)?i[0]:i)?(0,s.Ob)(i,{class:t+"-arrow"}):i}},render:function(){var e,t=this,n=arguments[0],o=this.prefixCls,s=this.bordered,c=this.expandIconPosition,l=this.configProvider.getPrefixCls,u=l("collapse",o),d=(e={},(0,i.A)(e,u+"-borderless",!s),(0,i.A)(e,u+"-icon-position-"+c,!0),e),h={props:(0,r.A)({},(0,a.Oq)(this),{prefixCls:u,expandIcon:function(e){return t.renderExpandIcon(e,u)}}),class:d,on:(0,a.WM)(this)};return n(M,h,[this.$slots["default"]])}},k={name:"ACollapsePanel",props:(0,r.A)({},u()),inject:{configProvider:{default:function(){return w.f}}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.showArrow,o=void 0===n||n,s=this.configProvider.getPrefixCls,c=s("collapse",t),l=(0,i.A)({},c+"-no-arrow",!o),u={props:(0,r.A)({},(0,a.Oq)(this),{prefixCls:c,extra:(0,a.nu)(this,"extra")}),class:l,on:(0,a.WM)(this)},d=(0,a.nu)(this,"header");return e(M.Panel,u,[this.$slots["default"],d?e("template",{slot:"header"},[d]):null])}},L=n(44807);x.Panel=k,x.install=function(e){e.use(L.A),e.component(x.name,x),e.component(k.name,k)};var C=x},82931:function(e,t,n){"use strict";n(29229)},25592:function(e,t,n){"use strict";n.d(t,{f:function(){return i}});var r=n(20761),i={getPrefixCls:function(e,t){return t||"ant-"+e},renderEmpty:r.A}},39161:function(e,t,n){"use strict";n.d(t,{A:function(){return b}});var r=n(85505),i=n(85471),o=n(4718),a=n(15848),s=n(20761),c=n(44807),l=n(95093),u=n(67287),d=n(96995),h=n(36873),f="internalMark";function p(e){e&&e.locale?(0,u.A)(l).locale(e.locale):(0,u.A)(l).locale("en")}var m={name:"ALocaleProvider",props:{locale:o.A.object.def(function(){return{}}),_ANT_MARK__:o.A.string},data:function(){return(0,h.A)(this._ANT_MARK__===f,"LocaleProvider","`LocaleProvider` is deprecated. Please use `locale` with `ConfigProvider` instead"),{antLocale:(0,r.A)({},this.locale,{exist:!0})}},provide:function(){return{localeData:this.$data}},watch:{locale:function(e){this.antLocale=(0,r.A)({},this.locale,{exist:!0}),p(e),(0,d.L)(e&&e.Modal)}},created:function(){var e=this.locale;p(e),(0,d.L)(e&&e.Modal)},beforeDestroy:function(){(0,d.L)()},render:function(){return this.$slots["default"]?this.$slots["default"][0]:null},install:function(e){e.use(c.A),e.component(m.name,m)}},v=m,g=n(38377);function y(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t={};return e.forEach(function(e){t[e]=function(t){this._proxyVm._data[e]=t}}),t}var _={name:"AConfigProvider",props:{getPopupContainer:o.A.func,prefixCls:o.A.string,renderEmpty:o.A.func,csp:o.A.object,autoInsertSpaceInButton:o.A.bool,locale:o.A.object,pageHeader:o.A.object,transformCellText:o.A.func},provide:function(){var e=this;return this._proxyVm=new i.Ay({data:function(){return(0,r.A)({},e.$props,{getPrefixCls:e.getPrefixCls,renderEmpty:e.renderEmptyComponent})}}),{configProvider:this._proxyVm._data}},watch:(0,r.A)({},y(["prefixCls","csp","autoInsertSpaceInButton","locale","pageHeader","transformCellText"])),methods:{renderEmptyComponent:function(e,t){var n=(0,a.nu)(this,"renderEmpty",{},!1)||s.A;return n(e,t)},getPrefixCls:function(e,t){var n=this.$props.prefixCls,r=void 0===n?"ant":n;return t||(e?r+"-"+e:r)},renderProvider:function(e){var t=this.$createElement;return t(v,{attrs:{locale:this.locale||e,_ANT_MARK__:f}},[this.$slots["default"]?(0,a.Gk)(this.$slots["default"])[0]:null])}},render:function(){var e=this,t=arguments[0];return t(g.A,{scopedSlots:{default:function(t,n,r){return e.renderProvider(r)}}})},install:function(e){e.use(c.A),e.component(_.name,_)}},b=_},20761:function(e,t,n){"use strict";var r=n(4718),i=n(2970),o=n(25592),a={functional:!0,inject:{configProvider:{default:function(){return o.f}}},props:{componentName:r.A.string},render:function(e,t){var n=arguments[0],r=t.props,o=t.injections;function a(e){var t=o.configProvider.getPrefixCls,r=t("empty");switch(e){case"Table":case"List":return n(i.Ay,{attrs:{image:i.Ay.PRESENTED_IMAGE_SIMPLE}});case"Select":case"TreeSelect":case"Cascader":case"Transfer":case"Mentions":return n(i.Ay,{attrs:{image:i.Ay.PRESENTED_IMAGE_SIMPLE},class:r+"-small"});default:return n(i.Ay)}}return a(r.componentName)}};function s(e,t){return e(a,{attrs:{componentName:t}})}t.A=s},10682:function(){},60031:function(e,t,n){"use strict";n.d(t,{A:function(){return en}});var r=n(85505),i=n(85471),o=n(24415),a=n(4718),s=n(52315),c=n(15848),l=n(51927),u=n(11207),d=n(95093),h=n.n(d),f={DATE_ROW_COUNT:6,DATE_COL_COUNT:7},p={functional:!0,render:function(e,t){for(var n=arguments[0],r=t.props,i=r.value,o=i.localeData(),a=r.prefixCls,s=[],c=[],l=o.firstDayOfWeek(),u=void 0,d=h()(),p=0;pt.year()?1:e.year()===t.year()&&e.month()>t.month()}function D(e){return"rc-calendar-"+e.year()+"-"+e.month()+"-"+e.date()}var Y={props:{contentRender:a.A.func,dateRender:a.A.func,disabledDate:a.A.func,prefixCls:a.A.string,selectedValue:a.A.oneOfType([a.A.any,a.A.arrayOf(a.A.any)]),value:a.A.object,hoverValue:a.A.any.def([]),showWeekNumber:a.A.bool},render:function(){var e=arguments[0],t=(0,c.Oq)(this),n=t.contentRender,r=t.prefixCls,i=t.selectedValue,o=t.value,a=t.showWeekNumber,s=t.dateRender,l=t.disabledDate,u=t.hoverValue,d=(0,c.WM)(this),h=d.select,p=void 0===h?z:h,v=d.dayHover,y=void 0===v?z:v,M=void 0,A=void 0,w=void 0,x=[],k=_(o),L=r+"-cell",C=r+"-week-number-cell",S=r+"-date",Y=r+"-today",V=r+"-selected-day",P=r+"-selected-date",E=r+"-selected-start-date",j=r+"-selected-end-date",F=r+"-in-range-cell",I=r+"-last-month-cell",$=r+"-next-month-btn-day",R=r+"-disabled-cell",N=r+"-disabled-cell-first-of-row",W=r+"-disabled-cell-last-of-row",B=r+"-last-day-of-month",K=o.clone();K.date(1);var U=K.day(),q=(U+7-o.localeData().firstDayOfWeek())%7,G=K.clone();G.add(0-q,"days");var J=0;for(M=0;M0&&(ie=x[J-1]);var oe=L,ae=!1,se=!1;T(w,k)&&(oe+=" "+Y,Q=!0);var ce=O(w,o),le=H(w,o);if(i&&Array.isArray(i)){var ue=u.length?u:i;if(!ce&&!le){var de=ue[0],he=ue[1];de&&T(w,de)&&(se=!0,te=!0,oe+=" "+E),(de||he)&&(T(w,he)?(se=!0,te=!0,oe+=" "+j):(null!==de&&void 0!==de||!w.isBefore(he,"day"))&&(null!==he&&void 0!==he||!w.isAfter(de,"day"))?w.isAfter(de,"day")&&w.isBefore(he,"day")&&(oe+=" "+F):oe+=" "+F)}}else T(w,o)&&(se=!0,te=!0);T(w,i)&&(oe+=" "+P),ce&&(oe+=" "+I),le&&(oe+=" "+$),w.clone().endOf("month").date()===w.date()&&(oe+=" "+B),l&&l(w,o)&&(ae=!0,ie&&l(ie,o)||(oe+=" "+N),re&&l(re,o)||(oe+=" "+W)),se&&(oe+=" "+V),ae&&(oe+=" "+R);var fe=void 0;if(s)fe=s(w,o);else{var pe=n?n(w,o):w.date();fe=e("div",{key:D(w),class:S,attrs:{"aria-selected":se,"aria-disabled":ae}},[pe])}ne.push(e("td",{key:J,on:{click:ae?z:p.bind(null,w),mouseenter:ae?z:y.bind(null,w)},attrs:{role:"gridcell",title:b(w)},class:oe},[fe])),J++}X.push(e("tr",{key:M,attrs:{role:"row"},class:g()((Z={},(0,m.A)(Z,r+"-current-week",Q),(0,m.A)(Z,r+"-active-week",te),Z))},[ee,ne]))}return e("tbody",{class:r+"-tbody"},[X])}},V=Y,P={functional:!0,render:function(e,t){var n=arguments[0],r=t.props,i=t.listeners,o=void 0===i?{}:i,a=r.prefixCls,s={props:r,on:o};return n("table",{class:a+"-table",attrs:{cellSpacing:"0",role:"grid"}},[n(p,s),n(V,s)])}},E=4,j=3;function F(){}var I={name:"MonthTable",mixins:[s.A],props:{cellRender:a.A.func,prefixCls:a.A.string,value:a.A.object,locale:a.A.any,contentRender:a.A.any,disabledDate:a.A.func},data:function(){return{sValue:this.value}},watch:{value:function(e){this.setState({sValue:e})}},methods:{setAndSelectValue:function(e){this.setState({sValue:e}),this.__emit("select",e)},chooseMonth:function(e){var t=this.sValue.clone();t.month(e),this.setAndSelectValue(t)},months:function(){for(var e=this.sValue,t=e.clone(),n=[],r=0,i=0;id),i),c=q;return c=r.yeard?e.nextDecade:J.bind(e,r.year),t("td",{attrs:{role:"gridcell",title:r.title},key:r.content,on:{click:o?q:c},class:s},[t("a",{class:h+"-year"},[r.content])])});return t("tr",{key:i,attrs:{role:"row"}},[o])}),v=i&&i("year");return t("div",{class:h},[t("div",[t("div",{class:h+"-header"},[t("a",{class:h+"-prev-decade-btn",attrs:{role:"button",title:r.previousDecade},on:{click:this.previousDecade}}),t("a",{class:h+"-decade-select",attrs:{role:"button",title:r.decadeSelect},on:{click:a}},[t("span",{class:h+"-decade-select-content"},[u,"-",d]),t("span",{class:h+"-decade-select-arrow"},["x"])]),t("a",{class:h+"-next-decade-btn",attrs:{role:"button",title:r.nextDecade},on:{click:this.nextDecade}})]),t("div",{class:h+"-body"},[t("table",{class:h+"-table",attrs:{cellSpacing:"0",role:"grid"}},[t("tbody",{class:h+"-tbody"},[p])])]),v&&t("div",{class:h+"-footer"},[v])])])}},Z=4,Q=3;function ee(){}function te(e){var t=this.sValue.clone();t.add(e,"years"),this.setState({sValue:t})}function ne(e,t){var n=this.sValue.clone();n.year(e),n.month(this.sValue.month()),this.__emit("select",n),t.preventDefault()}var re={mixins:[s.A],props:{locale:a.A.object,value:a.A.object,defaultValue:a.A.object,rootPrefixCls:a.A.string,renderFooter:a.A.func},data:function(){return this.nextCentury=te.bind(this,100),this.previousCentury=te.bind(this,-100),{sValue:this.value||this.defaultValue}},watch:{value:function(e){this.sValue=e}},render:function(){for(var e=this,t=arguments[0],n=this.sValue,r=this.$props,i=r.locale,o=r.renderFooter,a=n.year(),s=100*parseInt(a/100,10),c=s-10,l=s+99,u=[],d=0,h=this.rootPrefixCls+"-decade-panel",f=0;fl,d=(r={},(0,m.A)(r,h+"-cell",1),(0,m.A)(r,h+"-selected-cell",i<=a&&a<=o),(0,m.A)(r,h+"-last-century-cell",c),(0,m.A)(r,h+"-next-century-cell",u),r),f=i+"-"+o,p=ee;return p=c?e.previousCentury:u?e.nextCentury:ne.bind(e,i),t("td",{key:i,on:{click:p},attrs:{role:"gridcell"},class:d},[t("a",{class:h+"-decade"},[f])])});return t("tr",{key:r,attrs:{role:"row"}},[i])});return t("div",{class:h},[t("div",{class:h+"-header"},[t("a",{class:h+"-prev-century-btn",attrs:{role:"button",title:i.previousCentury},on:{click:this.previousCentury}}),t("div",{class:h+"-century"},[s,"-",l]),t("a",{class:h+"-next-century-btn",attrs:{role:"button",title:i.nextCentury},on:{click:this.nextCentury}})]),t("div",{class:h+"-body"},[t("table",{class:h+"-table",attrs:{cellSpacing:"0",role:"grid"}},[t("tbody",{class:h+"-tbody"},[_])])]),y&&t("div",{class:h+"-footer"},[y])])}};function ie(){}function oe(e){var t=this.value.clone();t.add(e,"months"),this.__emit("valueChange",t)}function ae(e){var t=this.value.clone();t.add(e,"years"),this.__emit("valueChange",t)}function se(e,t){return e?t:null}var ce={name:"CalendarHeader",mixins:[s.A],props:{prefixCls:a.A.string,value:a.A.object,showTimePicker:a.A.bool,locale:a.A.object,enablePrev:a.A.any.def(1),enableNext:a.A.any.def(1),disabledMonth:a.A.func,mode:a.A.any,monthCellRender:a.A.func,monthCellContentRender:a.A.func,renderFooter:a.A.func},data:function(){return this.nextMonth=oe.bind(this,1),this.previousMonth=oe.bind(this,-1),this.nextYear=ae.bind(this,1),this.previousYear=ae.bind(this,-1),{yearPanelReferer:null}},methods:{onMonthSelect:function(e){this.__emit("panelChange",e,"date"),(0,c.WM)(this).monthSelect?this.__emit("monthSelect",e):this.__emit("valueChange",e)},onYearSelect:function(e){var t=this.yearPanelReferer;this.setState({yearPanelReferer:null}),this.__emit("panelChange",e,t),this.__emit("valueChange",e)},onDecadeSelect:function(e){this.__emit("panelChange",e,"year"),this.__emit("valueChange",e)},changeYear:function(e){e>0?this.nextYear():this.previousYear()},monthYearElement:function(e){var t=this,n=this.$createElement,r=this.$props,i=r.prefixCls,o=r.locale,a=r.value,s=a.localeData(),c=o.monthBeforeYear,l=i+"-"+(c?"my-select":"ym-select"),u=e?" "+i+"-time-status":"",d=n("a",{class:i+"-year-select"+u,attrs:{role:"button",title:e?null:o.yearSelect},on:{click:e?ie:function(){return t.showYearPanel("date")}}},[a.format(o.yearFormat)]),h=n("a",{class:i+"-month-select"+u,attrs:{role:"button",title:e?null:o.monthSelect},on:{click:e?ie:this.showMonthPanel}},[o.monthFormat?a.format(o.monthFormat):s.monthsShort(a)]),f=void 0;e&&(f=n("a",{class:i+"-day-select"+u,attrs:{role:"button"}},[a.format(o.dayFormat)]));var p=[];return p=c?[h,f,d]:[d,h,f],n("span",{class:l},[p])},showMonthPanel:function(){this.__emit("panelChange",null,"month")},showYearPanel:function(e){this.setState({yearPanelReferer:e}),this.__emit("panelChange",null,"year")},showDecadePanel:function(){this.__emit("panelChange",null,"decade")}},render:function(){var e=this,t=arguments[0],n=(0,c.Oq)(this),r=n.prefixCls,i=n.locale,o=n.mode,a=n.value,s=n.showTimePicker,l=n.enableNext,u=n.enablePrev,d=n.disabledMonth,h=n.renderFooter,f=null;return"month"===o&&(f=t(B,{attrs:{locale:i,value:a,rootPrefixCls:r,disabledDate:d,cellRender:n.monthCellRender,contentRender:n.monthCellContentRender,renderFooter:h,changeYear:this.changeYear},on:{select:this.onMonthSelect,yearPanelShow:function(){return e.showYearPanel("month")}}})),"year"===o&&(f=t(X,{attrs:{locale:i,value:a,rootPrefixCls:r,renderFooter:h,disabledDate:d},on:{select:this.onYearSelect,decadePanelShow:this.showDecadePanel}})),"decade"===o&&(f=t(re,{attrs:{locale:i,value:a,rootPrefixCls:r,renderFooter:h},on:{select:this.onDecadeSelect}})),t("div",{class:r+"-header"},[t("div",{style:{position:"relative"}},[se(u&&!s,t("a",{class:r+"-prev-year-btn",attrs:{role:"button",title:i.previousYear},on:{click:this.previousYear}})),se(u&&!s,t("a",{class:r+"-prev-month-btn",attrs:{role:"button",title:i.previousMonth},on:{click:this.previousMonth}})),this.monthYearElement(s),se(l&&!s,t("a",{class:r+"-next-month-btn",on:{click:this.nextMonth},attrs:{title:i.nextMonth}})),se(l&&!s,t("a",{class:r+"-next-year-btn",on:{click:this.nextYear},attrs:{title:i.nextYear}}))]),f])}},le=ce,ue=n(75189),de=n.n(ue);function he(){}var fe={functional:!0,render:function(e,t){var n=arguments[0],r=t.props,i=t.listeners,o=void 0===i?{}:i,a=r.prefixCls,s=r.locale,c=r.value,l=r.timePicker,u=r.disabled,d=r.disabledDate,h=r.text,f=o.today,p=void 0===f?he:f,m=(!h&&l?s.now:h)||s.today,v=d&&!C(_(c),d),g=v||u,y=g?a+"-today-btn-disabled":"";return n("a",{class:a+"-today-btn "+y,attrs:{role:"button",title:M(c)},on:{click:g?he:p}},[m])}};function pe(){}var me={functional:!0,render:function(e,t){var n=arguments[0],r=t.props,i=t.listeners,o=void 0===i?{}:i,a=r.prefixCls,s=r.locale,c=r.okDisabled,l=o.ok,u=void 0===l?pe:l,d=a+"-ok-btn";return c&&(d+=" "+a+"-ok-btn-disabled"),n("a",{class:d,attrs:{role:"button"},on:{click:c?pe:u}},[s.ok])}};function ve(){}var ge={functional:!0,render:function(e,t){var n,r=t.props,i=t.listeners,o=void 0===i?{}:i,a=r.prefixCls,s=r.locale,c=r.showTimePicker,l=r.timePickerDisabled,u=o.closeTimePicker,d=void 0===u?ve:u,h=o.openTimePicker,f=void 0===h?ve:h,p=(n={},(0,m.A)(n,a+"-time-picker-btn",!0),(0,m.A)(n,a+"-time-picker-btn-disabled",l),n),v=ve;return l||(v=c?d:f),e("a",{class:p,attrs:{role:"button"},on:{click:v}},[c?s.dateSelect:s.timeSelect])}},ye={mixins:[s.A],props:{prefixCls:a.A.string,showDateInput:a.A.bool,disabledTime:a.A.any,timePicker:a.A.any,selectedValue:a.A.any,showOk:a.A.bool,value:a.A.object,renderFooter:a.A.func,defaultValue:a.A.object,locale:a.A.object,showToday:a.A.bool,disabledDate:a.A.func,showTimePicker:a.A.bool,okDisabled:a.A.bool,mode:a.A.string},methods:{onSelect:function(e){this.__emit("select",e)},getRootDOMNode:function(){return this.$el}},render:function(){var e=arguments[0],t=(0,c.Oq)(this),n=t.value,i=t.prefixCls,o=t.showOk,a=t.timePicker,s=t.renderFooter,l=t.showToday,u=t.mode,d=null,h=s&&s(u);if(l||a||h){var f,p={props:(0,r.A)({},t,{value:n}),on:(0,c.WM)(this)},v=null;l&&(v=e(fe,de()([{key:"todayButton"},p]))),delete p.props.value;var g=null;(!0===o||!1!==o&&a)&&(g=e(me,de()([{key:"okButton"},p])));var y=null;a&&(y=e(ge,de()([{key:"timePickerButton"},p])));var _=void 0;(v||y||g||h)&&(_=e("span",{class:i+"-footer-btn"},[h,v,y,g]));var b=(f={},(0,m.A)(f,i+"-footer",!0),(0,m.A)(f,i+"-footer-show-ok",!!g),f);d=e("div",{class:b},[_])}return d}},_e=ye;function be(){}function Me(e){var t=void 0;return t=e?_(e):h()(),t}function Ae(e){return Array.isArray(e)?0===e.length||-1!==e.findIndex(function(e){return void 0===e||h().isMoment(e)}):void 0===e||h().isMoment(e)}var we=a.A.custom(Ae),xe={mixins:[s.A],name:"CalendarMixinWrapper",props:{value:we,defaultValue:we},data:function(){var e=this.$props,t=e.value||e.defaultValue||Me();return{sValue:t,sSelectedValue:e.selectedValue||e.defaultSelectedValue}},watch:{value:function(e){var t=e||this.defaultValue||Me(this.sValue);this.setState({sValue:t})},selectedValue:function(e){this.setState({sSelectedValue:e})}},methods:{onSelect:function(e,t){e&&this.setValue(e),this.setSelectedValue(e,t)},renderRoot:function(e){var t,n=this.$createElement,r=this.$props,i=r.prefixCls,o=(t={},(0,m.A)(t,i,1),(0,m.A)(t,i+"-hidden",!r.visible),(0,m.A)(t,e["class"],!!e["class"]),t);return n("div",{ref:"rootInstance",class:o,attrs:{tabIndex:"0"},on:{keydown:this.onKeyDown||be,blur:this.onBlur||be}},[e.children])},setSelectedValue:function(e,t){(0,c.cK)(this,"selectedValue")||this.setState({sSelectedValue:e}),this.__emit("select",e,t)},setValue:function(e){var t=this.sValue;(0,c.cK)(this,"value")||this.setState({sValue:e}),(t&&e&&!t.isSame(e)||!t&&e||t&&!e)&&this.__emit("change",e)},isAllowedDate:function(e){var t=this.disabledDate,n=this.disabledTime;return C(e,t,n)}}},ke=xe,Le={methods:{getFormat:function(){var e=this.format,t=this.locale,n=this.timePicker;return e||(e=n?t.dateTimeFormat:t.dateFormat),e},focus:function(){this.focusElement?this.focusElement.focus():this.$refs.rootInstance&&this.$refs.rootInstance.focus()},saveFocusElement:function(e){this.focusElement=e}}},Ce=void 0,Se=void 0,ze=void 0,Te={mixins:[s.A],props:{prefixCls:a.A.string,timePicker:a.A.object,value:a.A.object,disabledTime:a.A.any,format:a.A.oneOfType([a.A.string,a.A.arrayOf(a.A.string),a.A.func]),locale:a.A.object,disabledDate:a.A.func,placeholder:a.A.string,selectedValue:a.A.object,clearIcon:a.A.any,inputMode:a.A.string,inputReadOnly:a.A.bool},data:function(){var e=this.selectedValue;return{str:S(e,this.format),invalid:!1,hasFocus:!1}},watch:{selectedValue:function(){this.setState()},format:function(){this.setState()}},updated:function(){var e=this;this.$nextTick(function(){!ze||!e.$data.hasFocus||e.invalid||0===Ce&&0===Se||ze.setSelectionRange(Ce,Se)})},getInstance:function(){return ze},methods:{getDerivedStateFromProps:function(e,t){var n={};ze&&(Ce=ze.selectionStart,Se=ze.selectionEnd);var r=e.selectedValue;return t.hasFocus||(n={str:S(r,this.format),invalid:!1}),n},onClear:function(){this.setState({str:""}),this.__emit("clear",null)},onInputChange:function(e){var t=e.target,n=t.value,r=t.composing,i=this.str,o=void 0===i?"":i;if(!e.isComposing&&!r&&o!==n){var a=this.$props,s=a.disabledDate,c=a.format,l=a.selectedValue;if(!n)return this.__emit("change",null),void this.setState({invalid:!1,str:n});var u=h()(n,c,!0);if(u.isValid()){var d=this.value.clone();d.year(u.year()).month(u.month()).date(u.date()).hour(u.hour()).minute(u.minute()).second(u.second()),!d||s&&s(d)?this.setState({invalid:!0,str:n}):(l!==d||l&&d&&!l.isSame(d))&&(this.setState({invalid:!1,str:n}),this.__emit("change",d))}else this.setState({invalid:!0,str:n})}},onFocus:function(){this.setState({hasFocus:!0})},onBlur:function(){this.setState(function(e,t){return{hasFocus:!1,str:S(t.value,t.format)}})},onKeyDown:function(e){var t=e.keyCode,n=this.$props,r=n.value,i=n.disabledDate;if(t===u.A.ENTER){var o=!i||!i(r);o&&this.__emit("select",r.clone()),e.preventDefault()}},getRootDOMNode:function(){return this.$el},focus:function(){ze&&ze.focus()},saveDateInput:function(e){ze=e}},render:function(){var e=arguments[0],t=this.invalid,n=this.str,r=this.locale,i=this.prefixCls,o=this.placeholder,a=this.disabled,s=this.showClear,l=this.inputMode,u=this.inputReadOnly,d=(0,c.nu)(this,"clearIcon"),h=t?i+"-input-invalid":"";return e("div",{class:i+"-input-wrap"},[e("div",{class:i+"-date-input-wrap"},[e("input",de()([{directives:[{name:"ant-ref",value:this.saveDateInput},{name:"ant-input"}]},{class:i+"-input "+h,domProps:{value:n},attrs:{disabled:a,placeholder:o,inputMode:l,readOnly:u},on:{input:this.onInputChange,keydown:this.onKeyDown,focus:this.onFocus,blur:this.onBlur}}]))]),s?e("a",{attrs:{role:"button",title:r.clear},on:{click:this.onClear}},[d||e("span",{class:i+"-clear-btn"})]):null])}},Oe=Te,He=n(99876);function De(e){return e.clone().startOf("month")}function Ye(e){return e.clone().endOf("month")}function Ve(e,t,n){return e.clone().add(t,n)}function Pe(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n=arguments[2];return e.some(function(e){return e.isSame(t,n)})}var Ee=function(e){return!(!h().isMoment(e)||!e.isValid())&&e},je={name:"Calendar",props:{locale:a.A.object.def(He.A),format:a.A.oneOfType([a.A.string,a.A.arrayOf(a.A.string),a.A.func]),visible:a.A.bool.def(!0),prefixCls:a.A.string.def("rc-calendar"),defaultValue:a.A.object,value:a.A.object,selectedValue:a.A.object,defaultSelectedValue:a.A.object,mode:a.A.oneOf(["time","date","month","year","decade"]),showDateInput:a.A.bool.def(!0),showWeekNumber:a.A.bool,showToday:a.A.bool.def(!0),showOk:a.A.bool,timePicker:a.A.any,dateInputPlaceholder:a.A.any,disabledDate:a.A.func,disabledTime:a.A.any,dateRender:a.A.func,renderFooter:a.A.func.def(function(){return null}),renderSidebar:a.A.func.def(function(){return null}),clearIcon:a.A.any,focusablePanel:a.A.bool.def(!0),inputMode:a.A.string,inputReadOnly:a.A.bool},mixins:[s.A,Le,ke],data:function(){var e=this.$props;return{sMode:this.mode||"date",sValue:Ee(e.value)||Ee(e.defaultValue)||h()(),sSelectedValue:e.selectedValue||e.defaultSelectedValue}},watch:{mode:function(e){this.setState({sMode:e})},value:function(e){this.setState({sValue:Ee(e)||Ee(this.defaultValue)||Me(this.sValue)})},selectedValue:function(e){this.setState({sSelectedValue:e})}},mounted:function(){var e=this;this.$nextTick(function(){e.saveFocusElement(Oe.getInstance())})},methods:{onPanelChange:function(e,t){var n=this.sValue;(0,c.cK)(this,"mode")||this.setState({sMode:t}),this.__emit("panelChange",e||n,t)},onKeyDown:function(e){if("input"!==e.target.nodeName.toLowerCase()){var t=e.keyCode,n=e.ctrlKey||e.metaKey,r=this.disabledDate,i=this.sValue;switch(t){case u.A.DOWN:return this.goTime(1,"weeks"),e.preventDefault(),1;case u.A.UP:return this.goTime(-1,"weeks"),e.preventDefault(),1;case u.A.LEFT:return n?this.goTime(-1,"years"):this.goTime(-1,"days"),e.preventDefault(),1;case u.A.RIGHT:return n?this.goTime(1,"years"):this.goTime(1,"days"),e.preventDefault(),1;case u.A.HOME:return this.setValue(De(i)),e.preventDefault(),1;case u.A.END:return this.setValue(Ye(i)),e.preventDefault(),1;case u.A.PAGE_DOWN:return this.goTime(1,"month"),e.preventDefault(),1;case u.A.PAGE_UP:return this.goTime(-1,"month"),e.preventDefault(),1;case u.A.ENTER:return r&&r(i)||this.onSelect(i,{source:"keyboard"}),e.preventDefault(),1;default:return this.__emit("keydown",e),1}}},onClear:function(){this.onSelect(null),this.__emit("clear")},onOk:function(){var e=this.sSelectedValue;this.isAllowedDate(e)&&this.__emit("ok",e)},onDateInputChange:function(e){this.onSelect(e,{source:"dateInput"})},onDateInputSelect:function(e){this.onSelect(e,{source:"dateInputSelect"})},onDateTableSelect:function(e){var t=this.timePicker,n=this.sSelectedValue;if(!n&&t){var r=(0,c.Oq)(t),i=r.defaultValue;i&&w(i,e)}this.onSelect(e)},onToday:function(){var e=this.sValue,t=_(e);this.onSelect(t,{source:"todayButton"})},onBlur:function(e){var t=this;setTimeout(function(){var n=Oe.getInstance(),r=t.rootInstance;!r||r.contains(document.activeElement)||n&&n.contains(document.activeElement)||t.$emit("blur",e)},0)},getRootDOMNode:function(){return this.$el},openTimePicker:function(){this.onPanelChange(null,"time")},closeTimePicker:function(){this.onPanelChange(null,"date")},goTime:function(e,t){this.setValue(Ve(this.sValue,e,t))}},render:function(){var e=arguments[0],t=this.locale,n=this.prefixCls,i=this.disabledDate,o=this.dateInputPlaceholder,a=this.timePicker,s=this.disabledTime,u=this.showDateInput,d=this.sValue,h=this.sSelectedValue,f=this.sMode,p=this.renderFooter,m=this.inputMode,v=this.inputReadOnly,g=this.monthCellRender,y=this.monthCellContentRender,_=this.$props,b=(0,c.nu)(this,"clearIcon"),M="time"===f,A=M&&s&&a?x(h,s):null,w=null;if(a&&M){var k=(0,c.Oq)(a),L={props:(0,r.A)({showHour:!0,showSecond:!0,showMinute:!0},k,A,{value:h,disabledTime:s}),on:{change:this.onDateInputChange}};void 0!==k.defaultValue&&(L.props.defaultOpenValue=k.defaultValue),w=(0,l.Ob)(a,L)}var C=u?e(Oe,{attrs:{format:this.getFormat(),value:d,locale:t,placeholder:o,showClear:!0,disabledTime:s,disabledDate:i,prefixCls:n,selectedValue:h,clearIcon:b,inputMode:m,inputReadOnly:v},key:"date-input",on:{clear:this.onClear,change:this.onDateInputChange,select:this.onDateInputSelect}}):null,S=[];return _.renderSidebar&&S.push(_.renderSidebar()),S.push(e("div",{class:n+"-panel",key:"panel"},[C,e("div",{attrs:{tabIndex:_.focusablePanel?0:void 0},class:n+"-date-panel"},[e(le,{attrs:{locale:t,mode:f,value:d,disabledMonth:i,renderFooter:p,showTimePicker:M,prefixCls:n,monthCellRender:g,monthCellContentRender:y},on:{valueChange:this.setValue,panelChange:this.onPanelChange}}),a&&M?e("div",{class:n+"-time-picker"},[e("div",{class:n+"-time-picker-panel"},[w])]):null,e("div",{class:n+"-body"},[e(P,{attrs:{locale:t,value:d,selectedValue:h,prefixCls:n,dateRender:_.dateRender,disabledDate:i,showWeekNumber:_.showWeekNumber},on:{select:this.onDateTableSelect}})]),e(_e,{attrs:{showOk:_.showOk,mode:f,renderFooter:_.renderFooter,locale:t,prefixCls:n,showToday:_.showToday,disabledTime:s,showTimePicker:M,showDateInput:_.showDateInput,timePicker:a,selectedValue:h,timePickerDisabled:!h,value:d,disabledDate:i,okDisabled:!1!==_.showOk&&(!h||!this.isAllowedDate(h))},on:{ok:this.onOk,select:this.onSelect,today:this.onToday,openTimePicker:this.openTimePicker,closeTimePicker:this.closeTimePicker}})])])),this.renderRoot({children:S,class:_.showWeekNumber?n+"-week-number":""})}},Fe=je,Ie=Fe;i.Ay.use(o.A,{name:"ant-ref"});var $e=Ie,Re={name:"MonthCalendar",props:{locale:a.A.object.def(He.A),format:a.A.string,visible:a.A.bool.def(!0),prefixCls:a.A.string.def("rc-calendar"),monthCellRender:a.A.func,value:a.A.object,defaultValue:a.A.object,selectedValue:a.A.object,defaultSelectedValue:a.A.object,disabledDate:a.A.func,monthCellContentRender:a.A.func,renderFooter:a.A.func.def(function(){return null}),renderSidebar:a.A.func.def(function(){return null})},mixins:[s.A,Le,ke],data:function(){var e=this.$props;return{mode:"month",sValue:e.value||e.defaultValue||h()(),sSelectedValue:e.selectedValue||e.defaultSelectedValue}},methods:{onKeyDown:function(e){var t=e.keyCode,n=e.ctrlKey||e.metaKey,r=this.sValue,i=this.disabledDate,o=r;switch(t){case u.A.DOWN:o=r.clone(),o.add(3,"months");break;case u.A.UP:o=r.clone(),o.add(-3,"months");break;case u.A.LEFT:o=r.clone(),n?o.add(-1,"years"):o.add(-1,"months");break;case u.A.RIGHT:o=r.clone(),n?o.add(1,"years"):o.add(1,"months");break;case u.A.ENTER:return i&&i(r)||this.onSelect(r),e.preventDefault(),1;default:return}if(o!==r)return this.setValue(o),e.preventDefault(),1},handlePanelChange:function(e,t){"date"!==t&&this.setState({mode:t})}},render:function(){var e=arguments[0],t=this.mode,n=this.sValue,r=this.$props,i=this.$scopedSlots,o=r.prefixCls,a=r.locale,s=r.disabledDate,c=this.monthCellRender||i.monthCellRender,l=this.monthCellContentRender||i.monthCellContentRender,u=this.renderFooter||i.renderFooter,d=e("div",{class:o+"-month-calendar-content"},[e("div",{class:o+"-month-header-wrap"},[e(le,{attrs:{prefixCls:o,mode:t,value:n,locale:a,disabledMonth:s,monthCellRender:c,monthCellContentRender:l},on:{monthSelect:this.onSelect,valueChange:this.setValue,panelChange:this.handlePanelChange}})]),e(_e,{attrs:{prefixCls:o,renderFooter:u}})]);return this.renderRoot({class:r.prefixCls+"-month-calendar",children:d})}},Ne=Re,We=n(90179),Be=n.n(We),Ke=n(51129),Ue={adjustX:1,adjustY:1},qe=[0,0],Ge={bottomLeft:{points:["tl","tl"],overflow:Ue,offset:[0,-3],targetOffset:qe},bottomRight:{points:["tr","tr"],overflow:Ue,offset:[0,-3],targetOffset:qe},topRight:{points:["br","br"],overflow:Ue,offset:[0,3],targetOffset:qe},topLeft:{points:["bl","bl"],overflow:Ue,offset:[0,3],targetOffset:qe}},Je=Ge,Xe=n(47006),Ze=n(69843),Qe=n.n(Ze),et={validator:function(e){return Array.isArray(e)?0===e.length||-1===e.findIndex(function(e){return!Qe()(e)&&!h().isMoment(e)}):Qe()(e)||h().isMoment(e)}},tt={name:"Picker",props:{animation:a.A.oneOfType([a.A.func,a.A.string]),disabled:a.A.bool,transitionName:a.A.string,format:a.A.oneOfType([a.A.string,a.A.array,a.A.func]),children:a.A.func,getCalendarContainer:a.A.func,calendar:a.A.any,open:a.A.bool,defaultOpen:a.A.bool.def(!1),prefixCls:a.A.string.def("rc-calendar-picker"),placement:a.A.any.def("bottomLeft"),value:et,defaultValue:et,align:a.A.object.def(function(){return{}}),dropdownClassName:a.A.string,dateRender:a.A.func},mixins:[s.A],data:function(){var e=this.$props,t=void 0;t=(0,c.cK)(this,"open")?e.open:e.defaultOpen;var n=e.value||e.defaultValue;return{sOpen:t,sValue:n}},watch:{value:function(e){this.setState({sValue:e})},open:function(e){this.setState({sOpen:e})}},mounted:function(){this.preSOpen=this.sOpen},updated:function(){!this.preSOpen&&this.sOpen&&(this.focusTimeout=setTimeout(this.focusCalendar,0)),this.preSOpen=this.sOpen},beforeDestroy:function(){clearTimeout(this.focusTimeout)},methods:{onCalendarKeyDown:function(e){e.keyCode===u.A.ESC&&(e.stopPropagation(),this.closeCalendar(this.focus))},onCalendarSelect:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.$props;(0,c.cK)(this,"value")||this.setState({sValue:e});var r=(0,c.Oq)(n.calendar);("keyboard"===t.source||"dateInputSelect"===t.source||!r.timePicker&&"dateInput"!==t.source||"todayButton"===t.source)&&this.closeCalendar(this.focus),this.__emit("change",e)},onKeyDown:function(e){this.sOpen||e.keyCode!==u.A.DOWN&&e.keyCode!==u.A.ENTER||(this.openCalendar(),e.preventDefault())},onCalendarOk:function(){this.closeCalendar(this.focus)},onCalendarClear:function(){this.closeCalendar(this.focus)},onCalendarBlur:function(){this.setOpen(!1)},onVisibleChange:function(e){this.setOpen(e)},getCalendarElement:function(){var e=this.$props,t=(0,c.Oq)(e.calendar),n=(0,c.kQ)(e.calendar),r=this.sValue,i=r,o={ref:"calendarInstance",props:{defaultValue:i||t.defaultValue,selectedValue:r},on:{keydown:this.onCalendarKeyDown,ok:(0,Ke.A)(n.ok,this.onCalendarOk),select:(0,Ke.A)(n.select,this.onCalendarSelect),clear:(0,Ke.A)(n.clear,this.onCalendarClear),blur:(0,Ke.A)(n.blur,this.onCalendarBlur)}};return(0,l.Ob)(e.calendar,o)},setOpen:function(e,t){this.sOpen!==e&&((0,c.cK)(this,"open")||this.setState({sOpen:e},t),this.__emit("openChange",e))},openCalendar:function(e){this.setOpen(!0,e)},closeCalendar:function(e){this.setOpen(!1,e)},focus:function(){this.sOpen||this.$el.focus()},focusCalendar:function(){this.sOpen&&this.calendarInstance&&this.calendarInstance.componentInstance&&this.calendarInstance.componentInstance.focus()}},render:function(){var e=arguments[0],t=(0,c.Oq)(this),n=(0,c.gd)(this),r=t.prefixCls,i=t.placement,o=t.getCalendarContainer,a=t.align,s=t.animation,u=t.disabled,d=t.dropdownClassName,h=t.transitionName,f=this.sValue,p=this.sOpen,m=this.$scopedSlots["default"],v={value:f,open:p};return!this.sOpen&&this.calendarInstance||(this.calendarInstance=this.getCalendarElement()),e(Xe.A,{attrs:{popupAlign:a,builtinPlacements:Je,popupPlacement:i,action:u&&!p?[]:["click"],destroyPopupOnHide:!0,getPopupContainer:o,popupStyle:n,popupAnimation:s,popupTransitionName:h,popupVisible:p,prefixCls:r,popupClassName:d},on:{popupVisibleChange:this.onVisibleChange}},[e("template",{slot:"popup"},[this.calendarInstance]),(0,l.Ob)(m(v,t),{on:{keydown:this.onKeyDown}})])}},nt=tt,rt=n(40255),it=n(25592),ot=n(67287);function at(e,t){if(!e)return"";if(Array.isArray(t)&&(t=t[0]),"function"===typeof t){var n=t(e);if("string"===typeof n)return n;throw new Error("The function of format does not return a string")}return e.format(t)}function st(){}function ct(e,t){return{props:(0,c.CB)(t,{allowClear:!0,showToday:!0}),mixins:[s.A],model:{prop:"value",event:"change"},inject:{configProvider:{default:function(){return it.f}}},data:function(){var e=this.value||this.defaultValue;if(e&&!(0,ot.A)(d).isMoment(e))throw new Error("The value/defaultValue of DatePicker or MonthPicker must be a moment object");return{sValue:e,showDate:e,_open:!!this.open}},watch:{open:function(e){var t=(0,c.Oq)(this),n={};n._open=e,"value"in t&&!e&&t.value!==this.showDate&&(n.showDate=t.value),this.setState(n)},value:function(e){var t={};t.sValue=e,e!==this.sValue&&(t.showDate=e),this.setState(t)},_open:function(e,t){var n=this;this.$nextTick(function(){(0,c.cK)(n,"open")||!t||e||n.focus()})}},methods:{clearSelection:function(e){e.preventDefault(),e.stopPropagation(),this.handleChange(null)},handleChange:function(e){(0,c.cK)(this,"value")||this.setState({sValue:e,showDate:e}),this.$emit("change",e,at(e,this.format))},handleCalendarChange:function(e){this.setState({showDate:e})},handleOpenChange:function(e){var t=(0,c.Oq)(this);"open"in t||this.setState({_open:e}),this.$emit("openChange",e)},focus:function(){this.$refs.input.focus()},blur:function(){this.$refs.input.blur()},renderFooter:function(){var e=this.$createElement,t=this.$scopedSlots,n=this.$slots,r=this._prefixCls,i=this.renderExtraFooter||t.renderExtraFooter||n.renderExtraFooter;return i?e("div",{class:r+"-footer-extra"},["function"===typeof i?i.apply(void 0,arguments):i]):null},onMouseEnter:function(e){this.$emit("mouseenter",e)},onMouseLeave:function(e){this.$emit("mouseleave",e)}},render:function(){var t,n=this,i=arguments[0],o=this.$scopedSlots,a=this.$data,s=a.sValue,u=a.showDate,h=a._open,f=(0,c.nu)(this,"suffixIcon");f=Array.isArray(f)?f[0]:f;var p=(0,c.WM)(this),v=p.panelChange,y=void 0===v?st:v,_=p.focus,b=void 0===_?st:_,M=p.blur,A=void 0===M?st:M,w=p.ok,x=void 0===w?st:w,k=(0,c.Oq)(this),L=k.prefixCls,C=k.locale,S=k.localeCode,z=k.inputReadOnly,T=this.configProvider.getPrefixCls,O=T("calendar",L);this._prefixCls=O;var H=k.dateRender||o.dateRender,D=k.monthCellContentRender||o.monthCellContentRender,Y="placeholder"in k?k.placeholder:C.lang.placeholder,V=k.showTime?k.disabledTime:null,P=g()((t={},(0,m.A)(t,O+"-time",k.showTime),(0,m.A)(t,O+"-month",Ne===e),t));s&&S&&s.locale(S);var E={props:{},on:{}},j={props:{},on:{}},F={};k.showTime?(j.on.select=this.handleChange,F.minWidth="195px"):E.on.change=this.handleChange,"mode"in k&&(j.props.mode=k.mode);var I=(0,c.v6)(j,{props:{disabledDate:k.disabledDate,disabledTime:V,locale:C.lang,timePicker:k.timePicker,defaultValue:k.defaultPickerValue||(0,ot.A)(d)(),dateInputPlaceholder:Y,prefixCls:O,dateRender:H,format:k.format,showToday:k.showToday,monthCellContentRender:D,renderFooter:this.renderFooter,value:u,inputReadOnly:z},on:{ok:x,panelChange:y,change:this.handleCalendarChange},class:P,scopedSlots:o}),$=i(e,I),R=!k.disabled&&k.allowClear&&s?i(rt.A,{attrs:{type:"close-circle",theme:"filled"},class:O+"-picker-clear",on:{click:this.clearSelection}}):null,N=f&&((0,c.zO)(f)?(0,l.Ob)(f,{class:O+"-picker-icon"}):i("span",{class:O+"-picker-icon"},[f]))||i(rt.A,{attrs:{type:"calendar"},class:O+"-picker-icon"}),W=function(e){var t=e.value;return i("div",[i("input",{ref:"input",attrs:{disabled:k.disabled,readOnly:!0,placeholder:Y,tabIndex:k.tabIndex,name:n.name},on:{focus:b,blur:A},domProps:{value:at(t,n.format)},class:k.pickerInputClass}),R,N])},B={props:(0,r.A)({},k,E.props,{calendar:$,value:s,prefixCls:O+"-picker-container"}),on:(0,r.A)({},Be()(p,"change"),E.on,{open:h,onOpenChange:this.handleOpenChange}),style:k.popupStyle,scopedSlots:(0,r.A)({default:W},o)};return i("span",{class:k.pickerClass,style:F,on:{mouseenter:this.onMouseEnter,mouseleave:this.onMouseLeave}},[i(nt,B)])}}}var lt=n(7772),ut=n(38377),dt=n(83766),ht=n(69656),ft=n(6566),pt={date:"YYYY-MM-DD",dateTime:"YYYY-MM-DD HH:mm:ss",week:"gggg-wo",month:"YYYY-MM"},mt={date:"dateFormat",dateTime:"dateTimeFormat",week:"weekFormat",month:"monthFormat"};function vt(e){var t=e.showHour,n=e.showMinute,r=e.showSecond,i=e.use12Hours,o=0;return t&&(o+=1),n&&(o+=1),r&&(o+=1),i&&(o+=1),o}function gt(e,t,n){return{name:e.name,props:(0,c.CB)(t,{transitionName:"slide-up",popupStyle:{},locale:{}}),model:{prop:"value",event:"change"},inject:{configProvider:{default:function(){return it.f}}},provide:function(){return{savePopupRef:this.savePopupRef}},mounted:function(){var e=this,t=this.autoFocus,n=this.disabled,r=this.value,i=this.defaultValue,o=this.valueFormat;(0,ft.n1)("DatePicker",i,"defaultValue",o),(0,ft.n1)("DatePicker",r,"value",o),t&&!n&&this.$nextTick(function(){e.focus()})},watch:{value:function(e){(0,ft.n1)("DatePicker",e,"value",this.valueFormat)}},methods:{getDefaultLocale:function(){var e=(0,r.A)({},ht.A,this.locale);return e.lang=(0,r.A)({},e.lang,(this.locale||{}).lang),e},savePopupRef:function(e){this.popupRef=e},handleOpenChange:function(e){this.$emit("openChange",e)},handleFocus:function(e){this.$emit("focus",e)},handleBlur:function(e){this.$emit("blur",e)},handleMouseEnter:function(e){this.$emit("mouseenter",e)},handleMouseLeave:function(e){this.$emit("mouseleave",e)},handleChange:function(e,t){this.$emit("change",this.valueFormat?(0,ft.pK)(e,this.valueFormat):e,t)},handleOk:function(e){this.$emit("ok",this.valueFormat?(0,ft.pK)(e,this.valueFormat):e)},handleCalendarChange:function(e,t){this.$emit("calendarChange",this.valueFormat?(0,ft.pK)(e,this.valueFormat):e,t)},focus:function(){this.$refs.picker.focus()},blur:function(){this.$refs.picker.blur()},transformValue:function(e){"value"in e&&(e.value=(0,ft.pY)(e.value,this.valueFormat)),"defaultValue"in e&&(e.defaultValue=(0,ft.pY)(e.defaultValue,this.valueFormat)),"defaultPickerValue"in e&&(e.defaultPickerValue=(0,ft.pY)(e.defaultPickerValue,this.valueFormat))},renderPicker:function(t,i){var o,a=this,s=this.$createElement,l=(0,c.Oq)(this);this.transformValue(l);var u=l.prefixCls,d=l.inputPrefixCls,h=l.getCalendarContainer,f=l.size,p=l.showTime,v=l.disabled,y=l.format,_=p?n+"Time":n,b=y||t[mt[_]]||pt[_],M=this.configProvider,A=M.getPrefixCls,w=M.getPopupContainer,x=h||w,k=A("calendar",u),L=A("input",d),C=g()(k+"-picker",(0,m.A)({},k+"-picker-"+f,!!f)),S=g()(k+"-picker-input",L,(o={},(0,m.A)(o,L+"-lg","large"===f),(0,m.A)(o,L+"-sm","small"===f),(0,m.A)(o,L+"-disabled",v),o)),z=p&&p.format||"HH:mm:ss",T=(0,r.A)({},(0,dt.PH)(z),{format:z,use12Hours:p&&p.use12Hours}),O=vt(T),H=k+"-time-picker-column-"+O,D={props:(0,r.A)({},T,p,{prefixCls:k+"-time-picker",placeholder:t.timePickerLocale.placeholder,transitionName:"slide-up"}),class:H,on:{esc:function(){}}},Y=p?s(lt.A,D):null,V={props:(0,r.A)({},l,{getCalendarContainer:x,format:b,pickerClass:C,pickerInputClass:S,locale:t,localeCode:i,timePicker:Y}),on:(0,r.A)({},(0,c.WM)(this),{openChange:this.handleOpenChange,focus:this.handleFocus,blur:this.handleBlur,mouseenter:this.handleMouseEnter,mouseleave:this.handleMouseLeave,change:this.handleChange,ok:this.handleOk,calendarChange:this.handleCalendarChange}),ref:"picker",scopedSlots:this.$scopedSlots||{}};return s(e,V,[this.$slots&&Object.keys(this.$slots).map(function(e){return s("template",{slot:e,key:e},[a.$slots[e]])})])}},render:function(){var e=arguments[0];return e(ut.A,{attrs:{componentName:"DatePicker",defaultLocale:this.getDefaultLocale},scopedSlots:{default:this.renderPicker}})}}}var yt=n(52040),_t=n(32779);function bt(){}var Mt={mixins:[s.A],props:{prefixCls:a.A.string,value:a.A.any,hoverValue:a.A.any,selectedValue:a.A.any,direction:a.A.any,locale:a.A.any,showDateInput:a.A.bool,showTimePicker:a.A.bool,showWeekNumber:a.A.bool,format:a.A.any,placeholder:a.A.any,disabledDate:a.A.any,timePicker:a.A.any,disabledTime:a.A.any,disabledMonth:a.A.any,mode:a.A.any,timePickerDisabledTime:a.A.object,enableNext:a.A.any,enablePrev:a.A.any,clearIcon:a.A.any,dateRender:a.A.func,inputMode:a.A.string,inputReadOnly:a.A.bool},render:function(){var e=arguments[0],t=this.$props,n=t.prefixCls,i=t.value,o=t.hoverValue,a=t.selectedValue,s=t.mode,u=t.direction,d=t.locale,h=t.format,f=t.placeholder,p=t.disabledDate,m=t.timePicker,v=t.disabledTime,g=t.timePickerDisabledTime,y=t.showTimePicker,_=t.enablePrev,b=t.enableNext,M=t.disabledMonth,A=t.showDateInput,w=t.dateRender,k=t.showWeekNumber,L=t.showClear,C=t.inputMode,S=t.inputReadOnly,z=(0,c.nu)(this,"clearIcon"),T=(0,c.WM)(this),O=T.inputChange,H=void 0===O?bt:O,D=T.inputSelect,Y=void 0===D?bt:D,V=T.valueChange,E=void 0===V?bt:V,j=T.panelChange,F=void 0===j?bt:j,I=T.select,$=void 0===I?bt:I,R=T.dayHover,N=void 0===R?bt:R,W=y&&m,B=W&&v?x(a,v):null,K=n+"-range",U={locale:d,value:i,prefixCls:n,showTimePicker:y},q="left"===u?0:1,G=null;if(W){var J=(0,c.Oq)(m);G=(0,l.Ob)(m,{props:(0,r.A)({showHour:!0,showMinute:!0,showSecond:!0},J,B,g,{defaultOpenValue:i,value:a[q]}),on:{change:H}})}var X=A&&e(Oe,{attrs:{format:h,locale:d,prefixCls:n,timePicker:m,disabledDate:p,placeholder:f,disabledTime:v,value:i,showClear:L||!1,selectedValue:a[q],clearIcon:z,inputMode:C,inputReadOnly:S},on:{change:H,select:Y}}),Z={props:(0,r.A)({},U,{mode:s,enableNext:b,enablePrev:_,disabledMonth:M}),on:{valueChange:E,panelChange:F}},Q={props:(0,r.A)({},U,{hoverValue:o,selectedValue:a,dateRender:w,disabledDate:p,showWeekNumber:k}),on:{select:$,dayHover:N}};return e("div",{class:K+"-part "+K+"-"+u},[X,e("div",{style:{outline:"none"}},[e(le,Z),y?e("div",{class:n+"-time-picker"},[e("div",{class:n+"-time-picker-panel"},[G])]):null,e("div",{class:n+"-body"},[e(P,Q)])])])}},At=Mt;function wt(){}function xt(e){return Array.isArray(e)&&(0===e.length||e.every(function(e){return!e}))}function kt(e,t){if(e===t)return!0;if(null===e||"undefined"===typeof e||null===t||"undefined"===typeof t)return!1;if(e.length!==t.length)return!1;for(var n=0;n0&&(i[1-o]=this.sShowTimePicker?i[o]:void 0),this.__emit("inputSelect",i),this.fireSelectValueChange(i,null,n||{source:"dateInput"})}}var Tt={props:{locale:a.A.object.def(He.A),visible:a.A.bool.def(!0),prefixCls:a.A.string.def("rc-calendar"),dateInputPlaceholder:a.A.any,seperator:a.A.string.def("~"),defaultValue:a.A.any,value:a.A.any,hoverValue:a.A.any,mode:a.A.arrayOf(a.A.oneOf(["time","date","month","year","decade"])),showDateInput:a.A.bool.def(!0),timePicker:a.A.any,showOk:a.A.bool,showToday:a.A.bool.def(!0),defaultSelectedValue:a.A.array.def([]),selectedValue:a.A.array,showClear:a.A.bool,showWeekNumber:a.A.bool,format:a.A.oneOfType([a.A.string,a.A.arrayOf(a.A.string),a.A.func]),type:a.A.any.def("both"),disabledDate:a.A.func,disabledTime:a.A.func.def(wt),renderFooter:a.A.func.def(function(){return null}),renderSidebar:a.A.func.def(function(){return null}),dateRender:a.A.func,clearIcon:a.A.any,inputReadOnly:a.A.bool},mixins:[s.A,Le],data:function(){var e=this.$props,t=e.selectedValue||e.defaultSelectedValue,n=Ct(e,1);return{sSelectedValue:t,prevSelectedValue:t,firstSelectedValue:null,sHoverValue:e.hoverValue||[],sValue:n,sShowTimePicker:!1,sMode:e.mode||["date","date"],sPanelTriggerSource:""}},watch:{value:function(){var e={};e.sValue=Ct(this.$props,0),this.setState(e)},hoverValue:function(e){kt(this.sHoverValue,e)||this.setState({sHoverValue:e})},selectedValue:function(e){var t={};t.sSelectedValue=e,t.prevSelectedValue=e,this.setState(t)},mode:function(e){kt(this.sMode,e)||this.setState({sMode:e})}},methods:{onDatePanelEnter:function(){this.hasSelectedValue()&&this.fireHoverValueChange(this.sSelectedValue.concat())},onDatePanelLeave:function(){this.hasSelectedValue()&&this.fireHoverValueChange([])},onSelect:function(e){var t=this.type,n=this.sSelectedValue,r=this.prevSelectedValue,i=this.firstSelectedValue,o=void 0;if("both"===t)i?this.compare(i,e)<0?(w(r[1],e),o=[i,e]):(w(r[0],e),w(r[1],i),o=[e,i]):(w(r[0],e),o=[e]);else if("start"===t){w(r[0],e);var a=n[1];o=a&&this.compare(a,e)>0?[e,a]:[e]}else{var s=n[0];s&&this.compare(s,e)<=0?(w(r[1],e),o=[s,e]):(w(r[0],e),o=[e])}this.fireSelectValueChange(o)},onKeyDown:function(e){var t=this;if("input"!==e.target.nodeName.toLowerCase()){var n=e.keyCode,r=e.ctrlKey||e.metaKey,i=this.$data,o=i.sSelectedValue,a=i.sHoverValue,s=i.firstSelectedValue,c=i.sValue,l=this.$props.disabledDate,d=function(n){var r=void 0,i=void 0,l=void 0;if(s?1===a.length?(r=a[0].clone(),i=n(r),l=t.onDayHover(i)):(r=a[0].isSame(s,"day")?a[1]:a[0],i=n(r),l=t.onDayHover(i)):(r=a[0]||o[0]||c[0]||h()(),i=n(r),l=[i],t.fireHoverValueChange(l)),l.length>=2){var u=l.some(function(e){return!Pe(c,e,"month")});if(u){var d=l.slice().sort(function(e,t){return e.valueOf()-t.valueOf()});d[0].isSame(d[1],"month")&&(d[1]=d[0].clone().add(1,"month")),t.fireValueChange(d)}}else if(1===l.length){var f=c.findIndex(function(e){return e.isSame(r,"month")});if(-1===f&&(f=0),c.every(function(e){return!e.isSame(i,"month")})){var p=c.slice();p[f]=i.clone(),t.fireValueChange(p)}}return e.preventDefault(),i};switch(n){case u.A.DOWN:return void d(function(e){return Ve(e,1,"weeks")});case u.A.UP:return void d(function(e){return Ve(e,-1,"weeks")});case u.A.LEFT:return void d(r?function(e){return Ve(e,-1,"years")}:function(e){return Ve(e,-1,"days")});case u.A.RIGHT:return void d(r?function(e){return Ve(e,1,"years")}:function(e){return Ve(e,1,"days")});case u.A.HOME:return void d(function(e){return De(e)});case u.A.END:return void d(function(e){return Ye(e)});case u.A.PAGE_DOWN:return void d(function(e){return Ve(e,1,"month")});case u.A.PAGE_UP:return void d(function(e){return Ve(e,-1,"month")});case u.A.ENTER:var f=void 0;return f=0===a.length?d(function(e){return e}):1===a.length?a[0]:a[0].isSame(s,"day")?a[1]:a[0],!f||l&&l(f)||this.onSelect(f),void e.preventDefault();default:this.__emit("keydown",e)}}},onDayHover:function(e){var t=[],n=this.sSelectedValue,r=this.firstSelectedValue,i=this.type;if("start"===i&&n[1])t=this.compare(e,n[1])<0?[e,n[1]]:[e];else if("end"===i&&n[0])t=this.compare(e,n[0])>0?[n[0],e]:[];else{if(!r)return this.sHoverValue.length&&this.setState({sHoverValue:[]}),t;t=this.compare(e,r)<0?[e,r]:[r,e]}return this.fireHoverValueChange(t),t},onToday:function(){var e=_(this.sValue[0]),t=e.clone().add(1,"months");this.setState({sValue:[e,t]})},onOpenTimePicker:function(){this.setState({sShowTimePicker:!0})},onCloseTimePicker:function(){this.setState({sShowTimePicker:!1})},onOk:function(){var e=this.sSelectedValue;this.isAllowedDateAndTime(e)&&this.__emit("ok",e)},onStartInputChange:function(){for(var e=arguments.length,t=Array(e),n=0;n-1},hasSelectedValue:function(){var e=this.sSelectedValue;return!!e[1]&&!!e[0]},compare:function(e,t){return this.timePicker?e.diff(t):e.diff(t,"days")},fireSelectValueChange:function(e,t,n){var r=this.timePicker,i=this.prevSelectedValue;if(r){var o=(0,c.Oq)(r);if(o.defaultValue){var a=o.defaultValue;!i[0]&&e[0]&&w(a[0],e[0]),!i[1]&&e[1]&&w(a[1],e[1])}}if(!this.sSelectedValue[0]||!this.sSelectedValue[1]){var s=e[0]||h()(),l=e[1]||s.clone().add(1,"months");this.setState({sSelectedValue:e,sValue:e&&2===e.length?Lt([s,l]):this.sValue})}e[0]&&!e[1]&&(this.setState({firstSelectedValue:e[0]}),this.fireHoverValueChange(e.concat())),this.__emit("change",e),(t||e[0]&&e[1])&&(this.setState({prevSelectedValue:e,firstSelectedValue:null}),this.fireHoverValueChange([]),this.__emit("select",e,n)),(0,c.cK)(this,"selectedValue")||this.setState({sSelectedValue:e})},fireValueChange:function(e){(0,c.cK)(this,"value")||this.setState({sValue:e}),this.__emit("valueChange",e)},fireHoverValueChange:function(e){(0,c.cK)(this,"hoverValue")||this.setState({sHoverValue:e}),this.__emit("hoverChange",e)},clear:function(){this.fireSelectValueChange([],!0),this.__emit("clear")},disabledStartTime:function(e){return this.disabledTime(e,"start")},disabledEndTime:function(e){return this.disabledTime(e,"end")},disabledStartMonth:function(e){var t=this.sValue;return e.isAfter(t[1],"month")},disabledEndMonth:function(e){var t=this.sValue;return e.isBefore(t[0],"month")}},render:function(){var e,t,n=arguments[0],r=(0,c.Oq)(this),i=r.prefixCls,o=r.dateInputPlaceholder,a=r.timePicker,s=r.showOk,l=r.locale,u=r.showClear,d=r.showToday,h=r.type,f=r.seperator,p=(0,c.nu)(this,"clearIcon"),v=this.sHoverValue,g=this.sSelectedValue,y=this.sMode,b=this.sShowTimePicker,M=this.sValue,A=(e={},(0,m.A)(e,i,1),(0,m.A)(e,i+"-hidden",!r.visible),(0,m.A)(e,i+"-range",1),(0,m.A)(e,i+"-show-time-picker",b),(0,m.A)(e,i+"-week-number",r.showWeekNumber),e),w={props:r,on:(0,c.WM)(this)},x={props:{selectedValue:g},on:{select:this.onSelect,dayHover:"start"===h&&g[1]||"end"===h&&g[0]||v.length?this.onDayHover:wt}},k=void 0,L=void 0;if(o)if(Array.isArray(o)){var C=(0,yt.A)(o,2);k=C[0],L=C[1]}else k=L=o;var S=!0===s||!1!==s&&!!a,z=(t={},(0,m.A)(t,i+"-footer",!0),(0,m.A)(t,i+"-range-bottom",!0),(0,m.A)(t,i+"-footer-show-ok",S),t),T=this.getStartValue(),O=this.getEndValue(),H=_(T),D=H.month(),Y=H.year(),V=T.year()===Y&&T.month()===D||O.year()===Y&&O.month()===D,P=T.clone().add(1,"months"),E=P.year()===O.year()&&P.month()===O.month(),j=(0,c.v6)(w,x,{props:{hoverValue:v,direction:"left",disabledTime:this.disabledStartTime,disabledMonth:this.disabledStartMonth,format:this.getFormat(),value:T,mode:y[0],placeholder:k,showDateInput:this.showDateInput,timePicker:a,showTimePicker:b||"time"===y[0],enablePrev:!0,enableNext:!E||this.isMonthYearPanelShow(y[1]),clearIcon:p},on:{inputChange:this.onStartInputChange,inputSelect:this.onStartInputSelect,valueChange:this.onStartValueChange,panelChange:this.onStartPanelChange}}),F=(0,c.v6)(w,x,{props:{hoverValue:v,direction:"right",format:this.getFormat(),timePickerDisabledTime:this.getEndDisableTime(),placeholder:L,value:O,mode:y[1],showDateInput:this.showDateInput,timePicker:a,showTimePicker:b||"time"===y[1],disabledTime:this.disabledEndTime,disabledMonth:this.disabledEndMonth,enablePrev:!E||this.isMonthYearPanelShow(y[0]),enableNext:!0,clearIcon:p},on:{inputChange:this.onEndInputChange,inputSelect:this.onEndInputSelect,valueChange:this.onEndValueChange,panelChange:this.onEndPanelChange}}),I=null;if(d){var $=(0,c.v6)(w,{props:{disabled:V,value:M[0],text:l.backToToday},on:{today:this.onToday}});I=n(fe,de()([{key:"todayButton"},$]))}var R=null;if(r.timePicker){var N=(0,c.v6)(w,{props:{showTimePicker:b||"time"===y[0]&&"time"===y[1],timePickerDisabled:!this.hasSelectedValue()||v.length},on:{openTimePicker:this.onOpenTimePicker,closeTimePicker:this.onCloseTimePicker}});R=n(ge,de()([{key:"timePickerButton"},N]))}var W=null;if(S){var B=(0,c.v6)(w,{props:{okDisabled:!this.isAllowedDateAndTime(g)||!this.hasSelectedValue()||v.length},on:{ok:this.onOk}});W=n(me,de()([{key:"okButtonNode"},B]))}var K=this.renderFooter(y);return n("div",{ref:"rootInstance",class:A,attrs:{tabIndex:"0"},on:{keydown:this.onKeyDown}},[r.renderSidebar(),n("div",{class:i+"-panel"},[u&&g[0]&&g[1]?n("a",{attrs:{role:"button",title:l.clear},on:{click:this.clear}},[p||n("span",{class:i+"-clear-btn"})]):null,n("div",{class:i+"-date-panel",on:{mouseleave:"both"!==h?this.onDatePanelLeave:wt,mouseenter:"both"!==h?this.onDatePanelEnter:wt}},[n(At,j),n("span",{class:i+"-range-middle"},[f]),n(At,F)]),n("div",{class:z},[d||r.timePicker||S||K?n("div",{class:i+"-footer-btn"},[K,I,R,W]):null])])])}},Ot=Tt,Ht=n(2833),Dt=n.n(Ht),Yt=n(87298),Vt=function(){return{name:a.A.string,transitionName:a.A.string,prefixCls:a.A.string,inputPrefixCls:a.A.string,format:a.A.oneOfType([a.A.string,a.A.array,a.A.func]),disabled:a.A.bool,allowClear:a.A.bool,suffixIcon:a.A.any,popupStyle:a.A.object,dropdownClassName:a.A.string,locale:a.A.any,localeCode:a.A.string,size:a.A.oneOf(["large","small","default"]),getCalendarContainer:a.A.func,open:a.A.bool,disabledDate:a.A.func,showToday:a.A.bool,dateRender:a.A.any,pickerClass:a.A.string,pickerInputClass:a.A.string,timePicker:a.A.any,autoFocus:a.A.bool,tagPrefixCls:a.A.string,tabIndex:a.A.oneOfType([a.A.string,a.A.number]),align:a.A.object.def(function(){return{}}),inputReadOnly:a.A.bool,valueFormat:a.A.string}},Pt=function(){return{value:ft.W2,defaultValue:ft.W2,defaultPickerValue:ft.W2,renderExtraFooter:a.A.any,placeholder:a.A.string}},Et=function(){return(0,r.A)({},Vt(),Pt(),{showTime:a.A.oneOfType([a.A.object,a.A.bool]),open:a.A.bool,disabledTime:a.A.func,mode:a.A.oneOf(["time","date","month","year","decade"])})},jt=function(){return(0,r.A)({},Vt(),Pt(),{placeholder:a.A.string,monthCellContentRender:a.A.func})},Ft=function(){return(0,r.A)({},Vt(),{tagPrefixCls:a.A.string,value:ft.P1,defaultValue:ft.P1,defaultPickerValue:ft.P1,timePicker:a.A.any,showTime:a.A.oneOfType([a.A.object,a.A.bool]),ranges:a.A.object,placeholder:a.A.arrayOf(String),mode:a.A.oneOfType([a.A.string,a.A.arrayOf(String)]),separator:a.A.any,disabledTime:a.A.func,showToday:a.A.bool,renderExtraFooter:a.A.any})},It=function(){return(0,r.A)({},Vt(),Pt(),{placeholder:a.A.string})},$t={functional:!0,render:function(e,t){var n=t.props,r=n.suffixIcon,i=n.prefixCls;return(r&&(0,c.zO)(r)?(0,l.Ob)(r,{class:i+"-picker-icon"}):e("span",{class:i+"-picker-icon"},[r]))||e(rt.A,{attrs:{type:"calendar"},class:i+"-picker-icon"})}};function Rt(){}function Nt(e,t){var n=(0,yt.A)(e,2),r=n[0],i=n[1];if(r||i){if(t&&"month"===t[0])return[r,i];var o=i&&i.isSame(r,"month")?i.clone().add(1,"month"):i;return[r,o]}}function Wt(e){if(e)return Array.isArray(e)?e:[e,e.clone().add(1,"month")]}function Bt(e){return!!Array.isArray(e)&&(0===e.length||e.every(function(e){return!e}))}function Kt(e,t){if(t&&e&&0!==e.length){var n=(0,yt.A)(e,2),r=n[0],i=n[1];r&&r.locale(t),i&&i.locale(t)}}var Ut={name:"ARangePicker",mixins:[s.A],model:{prop:"value",event:"change"},props:(0,c.CB)(Ft(),{allowClear:!0,showToday:!1,separator:"~"}),inject:{configProvider:{default:function(){return it.f}}},data:function(){var e=this.value||this.defaultValue||[],t=(0,yt.A)(e,2),n=t[0],r=t[1];if(n&&!(0,ot.A)(d).isMoment(n)||r&&!(0,ot.A)(d).isMoment(r))throw new Error("The value/defaultValue of RangePicker must be a moment object array after `antd@2.0`, see: https://u.ant.design/date-picker-value");var i=!e||Bt(e)?this.defaultPickerValue:e;return{sValue:e,sShowDate:Wt(i||(0,ot.A)(d)()),sOpen:this.open,sHoverValue:[]}},watch:{value:function(e){var t=e||[],n={sValue:t};Dt()(e,this.sValue)||(n=(0,r.A)({},n,{sShowDate:Nt(t,this.mode)||this.sShowDate})),this.setState(n)},open:function(e){var t={sOpen:e};this.setState(t)},sOpen:function(e,t){var n=this;this.$nextTick(function(){(0,c.cK)(n,"open")||!t||e||n.focus()})}},methods:{setValue:function(e,t){this.handleChange(e),!t&&this.showTime||(0,c.cK)(this,"open")||this.setState({sOpen:!1})},clearSelection:function(e){e.preventDefault(),e.stopPropagation(),this.setState({sValue:[]}),this.handleChange([])},clearHoverValue:function(){this.setState({sHoverValue:[]})},handleChange:function(e){(0,c.cK)(this,"value")||this.setState(function(t){var n=t.sShowDate;return{sValue:e,sShowDate:Nt(e)||n}}),e[0]&&e[1]&&e[0].diff(e[1])>0&&(e[1]=void 0);var t=(0,yt.A)(e,2),n=t[0],r=t[1];this.$emit("change",e,[at(n,this.format),at(r,this.format)])},handleOpenChange:function(e){(0,c.cK)(this,"open")||this.setState({sOpen:e}),!1===e&&this.clearHoverValue(),this.$emit("openChange",e)},handleShowDateChange:function(e){this.setState({sShowDate:e})},handleHoverChange:function(e){this.setState({sHoverValue:e})},handleRangeMouseLeave:function(){this.sOpen&&this.clearHoverValue()},handleCalendarInputSelect:function(e){var t=(0,yt.A)(e,1),n=t[0];n&&this.setState(function(t){var n=t.sShowDate;return{sValue:e,sShowDate:Nt(e)||n}})},handleRangeClick:function(e){"function"===typeof e&&(e=e()),this.setValue(e,!0),this.$emit("ok",e),this.$emit("openChange",!1)},onMouseEnter:function(e){this.$emit("mouseenter",e)},onMouseLeave:function(e){this.$emit("mouseleave",e)},focus:function(){this.$refs.picker.focus()},blur:function(){this.$refs.picker.blur()},renderFooter:function(){var e=this,t=this.$createElement,n=this.ranges,r=this.$scopedSlots,i=this.$slots,o=this._prefixCls,a=this._tagPrefixCls,s=this.renderExtraFooter||r.renderExtraFooter||i.renderExtraFooter;if(!n&&!s)return null;var c=s?t("div",{class:o+"-footer-extra",key:"extra"},["function"===typeof s?s():s]):null,l=n&&Object.keys(n).map(function(r){var i=n[r],o="function"===typeof i?i.call(e):i;return t(Yt.A,{key:r,attrs:{prefixCls:a,color:"blue"},on:{click:function(){return e.handleRangeClick(i)},mouseenter:function(){return e.setState({sHoverValue:o})},mouseleave:e.handleRangeMouseLeave}},[r])}),u=l&&l.length>0?t("div",{class:o+"-footer-extra "+o+"-range-quick-selector",key:"range"},[l]):null;return[u,c]}},render:function(){var e,t=this,n=arguments[0],i=(0,c.Oq)(this),o=(0,c.nu)(this,"suffixIcon");o=Array.isArray(o)?o[0]:o;var a=this.sValue,s=this.sShowDate,l=this.sHoverValue,u=this.sOpen,d=this.$scopedSlots,h=(0,c.WM)(this),f=h.calendarChange,p=void 0===f?Rt:f,v=h.ok,y=void 0===v?Rt:v,_=h.focus,b=void 0===_?Rt:_,M=h.blur,A=void 0===M?Rt:M,w=h.panelChange,x=void 0===w?Rt:w,k=i.prefixCls,L=i.tagPrefixCls,C=i.popupStyle,S=i.disabledDate,z=i.disabledTime,T=i.showTime,O=i.showToday,H=i.ranges,D=i.locale,Y=i.localeCode,V=i.format,P=i.separator,E=i.inputReadOnly,j=this.configProvider.getPrefixCls,F=j("calendar",k),I=j("tag",L);this._prefixCls=F,this._tagPrefixCls=I;var $=i.dateRender||d.dateRender;Kt(a,Y),Kt(s,Y);var R=g()((e={},(0,m.A)(e,F+"-time",T),(0,m.A)(e,F+"-range-with-ranges",H),e)),N={on:{change:this.handleChange}},W={on:{ok:this.handleChange},props:{}};i.timePicker?N.on.change=function(e){return t.handleChange(e)}:W={on:{},props:{}},"mode"in i&&(W.props.mode=i.mode);var B=Array.isArray(i.placeholder)?i.placeholder[0]:D.lang.rangePlaceholder[0],K=Array.isArray(i.placeholder)?i.placeholder[1]:D.lang.rangePlaceholder[1],U=(0,c.v6)(W,{props:{separator:P,format:V,prefixCls:F,renderFooter:this.renderFooter,timePicker:i.timePicker,disabledDate:S,disabledTime:z,dateInputPlaceholder:[B,K],locale:D.lang,dateRender:$,value:s,hoverValue:l,showToday:O,inputReadOnly:E},on:{change:p,ok:y,valueChange:this.handleShowDateChange,hoverChange:this.handleHoverChange,panelChange:x,inputSelect:this.handleCalendarInputSelect},class:R,scopedSlots:d}),q=n(Ot,U),G={};i.showTime&&(G.width="350px");var J=(0,yt.A)(a,2),X=J[0],Z=J[1],Q=!i.disabled&&i.allowClear&&a&&(X||Z)?n(rt.A,{attrs:{type:"close-circle",theme:"filled"},class:F+"-picker-clear",on:{click:this.clearSelection}}):null,ee=n($t,{attrs:{suffixIcon:o,prefixCls:F}}),te=function(e){var t=e.value,r=(0,yt.A)(t,2),o=r[0],a=r[1];return n("span",{class:i.pickerInputClass},[n("input",{attrs:{disabled:i.disabled,readOnly:!0,placeholder:B,tabIndex:-1},domProps:{value:at(o,i.format)},class:F+"-range-picker-input"}),n("span",{class:F+"-range-picker-separator"},[" ",P," "]),n("input",{attrs:{disabled:i.disabled,readOnly:!0,placeholder:K,tabIndex:-1},domProps:{value:at(a,i.format)},class:F+"-range-picker-input"}),Q,ee])},ne=(0,c.v6)({props:i,on:h},N,{props:{calendar:q,value:a,open:u,prefixCls:F+"-picker-container"},on:{openChange:this.handleOpenChange},style:C,scopedSlots:(0,r.A)({default:te},d)});return n("span",{ref:"picker",class:i.pickerClass,style:G,attrs:{tabIndex:i.disabled?-1:0},on:{focus:b,blur:A,mouseenter:this.onMouseEnter,mouseleave:this.onMouseLeave}},[n(nt,ne)])}};function qt(e,t){return e&&e.format(t)||""}function Gt(){}var Jt={name:"AWeekPicker",mixins:[s.A],model:{prop:"value",event:"change"},props:(0,c.CB)(It(),{format:"gggg-wo",allowClear:!0}),inject:{configProvider:{default:function(){return it.f}}},data:function(){var e=this.value||this.defaultValue;if(e&&!(0,ot.A)(d).isMoment(e))throw new Error("The value/defaultValue of WeekPicker or MonthPicker must be a moment object");return{_value:e,_open:this.open}},watch:{value:function(e){var t={_value:e};this.setState(t),this.prevState=(0,r.A)({},this.$data,t)},open:function(e){var t={_open:e};this.setState(t),this.prevState=(0,r.A)({},this.$data,t)},_open:function(e,t){var n=this;this.$nextTick(function(){(0,c.cK)(n,"open")||!t||e||n.focus()})}},mounted:function(){this.prevState=(0,r.A)({},this.$data)},updated:function(){var e=this;this.$nextTick(function(){(0,c.cK)(e,"open")||!e.prevState._open||e._open||e.focus()})},methods:{weekDateRender:function(e){var t=this.$createElement,n=this.$data._value,r=this._prefixCls,i=this.$scopedSlots,o=this.dateRender||i.dateRender,a=o?o(e):e.date();return n&&e.year()===n.year()&&e.week()===n.week()?t("div",{class:r+"-selected-day"},[t("div",{class:r+"-date"},[a])]):t("div",{class:r+"-date"},[a])},handleChange:function(e){(0,c.cK)(this,"value")||this.setState({_value:e}),this.$emit("change",e,qt(e,this.format))},handleOpenChange:function(e){(0,c.cK)(this,"open")||this.setState({_open:e}),this.$emit("openChange",e)},clearSelection:function(e){e.preventDefault(),e.stopPropagation(),this.handleChange(null)},focus:function(){this.$refs.input.focus()},blur:function(){this.$refs.input.blur()},renderFooter:function(){var e=this.$createElement,t=this._prefixCls,n=this.$scopedSlots,r=this.renderExtraFooter||n.renderExtraFooter;return r?e("div",{class:t+"-footer-extra"},[r.apply(void 0,arguments)]):null}},render:function(){var e=arguments[0],t=(0,c.Oq)(this),n=(0,c.nu)(this,"suffixIcon");n=Array.isArray(n)?n[0]:n;var i=this.prefixCls,o=this.disabled,a=this.pickerClass,s=this.popupStyle,l=this.pickerInputClass,u=this.format,d=this.allowClear,h=this.locale,f=this.localeCode,p=this.disabledDate,m=this.defaultPickerValue,v=this.$data,g=this.$scopedSlots,y=(0,c.WM)(this),_=this.configProvider.getPrefixCls,b=_("calendar",i);this._prefixCls=b;var M=v._value,A=v._open,w=y.focus,x=void 0===w?Gt:w,k=y.blur,L=void 0===k?Gt:k;M&&f&&M.locale(f);var C=(0,c.cK)(this,"placeholder")?this.placeholder:h.lang.placeholder,S=this.dateRender||g.dateRender||this.weekDateRender,z=e($e,{attrs:{showWeekNumber:!0,dateRender:S,prefixCls:b,format:u,locale:h.lang,showDateInput:!1,showToday:!1,disabledDate:p,renderFooter:this.renderFooter,defaultValue:m}}),T=!o&&d&&v._value?e(rt.A,{attrs:{type:"close-circle",theme:"filled"},class:b+"-picker-clear",on:{click:this.clearSelection}}):null,O=e($t,{attrs:{suffixIcon:n,prefixCls:b}}),H=function(t){var n=t.value;return e("span",{style:{display:"inline-block",width:"100%"}},[e("input",{ref:"input",attrs:{disabled:o,readOnly:!0,placeholder:C},domProps:{value:n&&n.format(u)||""},class:l,on:{focus:x,blur:L}}),T,O])},D={props:(0,r.A)({},t,{calendar:z,prefixCls:b+"-picker-container",value:M,open:A}),on:(0,r.A)({},y,{change:this.handleChange,openChange:this.handleOpenChange}),style:s,scopedSlots:(0,r.A)({default:H},g)};return e("span",{class:a},[e(nt,D)])}},Xt=n(44807),Zt=gt((0,r.A)({},ct($e,Et()),{name:"ADatePicker"}),Et(),"date"),Qt=gt((0,r.A)({},ct(Ne,jt()),{name:"AMonthPicker"}),jt(),"month");(0,r.A)(Zt,{RangePicker:gt(Ut,Ft(),"date"),MonthPicker:Qt,WeekPicker:gt(Jt,It(),"week")}),Zt.install=function(e){e.use(Xt.A),e.component(Zt.name,Zt),e.component(Zt.RangePicker.name,Zt.RangePicker),e.component(Zt.MonthPicker.name,Zt.MonthPicker),e.component(Zt.WeekPicker.name,Zt.WeekPicker)};var en=Zt},69656:function(e,t,n){"use strict";var r=n(85505),i=n(99876),o=n(68265),a={lang:(0,r.A)({placeholder:"Select date",rangePlaceholder:["Start date","End date"]},i.A),timePickerLocale:(0,r.A)({},o.A)};t.A=a},32581:function(e,t,n){"use strict";n(29229),n(71094),n(26904),n(5554)},9426:function(e,t,n){"use strict";n.d(t,{Ay:function(){return w}});var r=n(44508),i=n(97479),o=n(36873),a=n(73363),s=n(25592),c=n(4718),l=n(15848),u={child:c.A.any,bordered:c.A.bool,colon:c.A.bool,type:c.A.oneOf(["label","content"]),layout:c.A.oneOf(["horizontal","vertical"])},d={functional:!0,props:u,render:function(e,t){var n,i=t.props,o=i.child,a=i.bordered,s=i.colon,c=i.type,u=i.layout,d=(0,l.Oq)(o),h=d.prefixCls,f=d.span,p=void 0===f?1:f,m=t.data.key,v=(0,l.nu)(o,"label"),g=(0,l.Sk)(o),y={attrs:{},class:[h+"-item-label",(n={},(0,r.A)(n,h+"-item-colon",s),(0,r.A)(n,h+"-item-no-label",!v),n)],key:m+"-label"};return"vertical"===u&&(y.attrs.colSpan=2*p-1),a?"label"===c?e("th",y,[v]):e("td",{class:h+"-item-content",key:m+"-content",attrs:{colSpan:2*p-1}},[g["default"]]):e("td",{attrs:{colSpan:p},class:h+"-item"},"vertical"===u?"content"===c?[e("span",{class:h+"-item-content",key:m+"-content"},[g["default"]])]:[e("span",{class:[h+"-item-label",(0,r.A)({},h+"-item-colon",s)],key:m+"-label"},[v])]:[e("span",y,[v]),e("span",{class:h+"-item-content",key:m+"-content"},[g["default"]])])}},h=d,f=n(52315),p=n(44807),m=n(51927),v={prefixCls:c.A.string,label:c.A.any,span:c.A.number};function g(e){var t=e;return void 0===e?t=[]:Array.isArray(e)||(t=[e]),t}var y={name:"ADescriptionsItem",props:(0,l.CB)(v,{span:1})},_={prefixCls:c.A.string,bordered:c.A.bool,size:c.A.oneOf(["default","middle","small"]).def("default"),title:c.A.any,column:c.A.oneOfType([c.A.number,c.A.object]),layout:c.A.oneOf(["horizontal","vertical"]),colon:c.A.bool},b=function(e,t){var n=[],r=null,i=void 0,a=g(e);return a.forEach(function(e,s){var c=(0,l.Oq)(e),u=e;r||(i=t,r=[],n.push(r));var d=s===a.length-1,h=!0;d&&(h=!c.span||c.span===i,u=(0,m.Ob)(u,{props:{span:i}}));var f=c.span,p=void 0===f?1:f;r.push(u),i-=p,i<=0&&(r=null,(0,o.A)(0===i&&h,"Descriptions","Sum of column `span` in a line exceeds `column` of Descriptions."))}),n},M={xxl:3,xl:3,lg:3,md:3,sm:2,xs:1},A={name:"ADescriptions",Item:y,mixins:[f.A],inject:{configProvider:{default:function(){return s.f}}},props:(0,l.CB)(_,{column:M}),data:function(){return{screens:{},token:void 0}},methods:{getColumn:function(){var e=this.$props.column;if("object"===("undefined"===typeof e?"undefined":(0,i.A)(e)))for(var t=0;t0?"-"+c:c,h=(e={},(0,r.A)(e,u,!0),(0,r.A)(e,u+"-"+i,!0),(0,r.A)(e,u+"-with-text"+d,o["default"]),(0,r.A)(e,u+"-dashed",!!a),e);return t("div",{class:h,attrs:{role:"separator"}},[o["default"]&&t("span",{class:u+"-inner-text"},[o["default"]])])},install:function(e){e.use(a.A),e.component(s.name,s)}};t.A=s},28373:function(e,t,n){"use strict";n(29229)},41446:function(e,t,n){"use strict";n.d(t,{A:function(){return $}});var r=n(44508),i=n(5748),o=n(85505),a=n(46942),s=n.n(a),c=n(90034),l=n(75189),u=n.n(l),d=n(97479),h=n(85471),f=n(24415),p=n(52315),m=n(15848),v=n(51927),g=n(93986),y=n(4718),_={width:y.A.any,height:y.A.any,defaultOpen:y.A.bool,firstEnter:y.A.bool,open:y.A.bool,prefixCls:y.A.string,placement:y.A.string,level:y.A.oneOfType([y.A.string,y.A.array]),levelMove:y.A.oneOfType([y.A.number,y.A.func,y.A.array]),ease:y.A.string,duration:y.A.string,handler:y.A.any,showMask:y.A.bool,maskStyle:y.A.object,className:y.A.string,wrapStyle:y.A.object,maskClosable:y.A.bool,afterVisibleChange:y.A.func,keyboard:y.A.bool},b=(0,o.A)({},_,{wrapperClassName:y.A.string,forceRender:y.A.bool,getContainer:y.A.oneOfType([y.A.string,y.A.func,y.A.object,y.A.bool])}),M=((0,o.A)({},_,{getContainer:y.A.func,getOpenCount:y.A.func,switchScrollingEffect:y.A.func}),n(11207));function A(e){return Array.isArray(e)?e:[e]}var w={transition:"transitionend",WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend"},x=Object.keys(w).filter(function(e){if("undefined"===typeof document)return!1;var t=document.getElementsByTagName("html")[0];return e in(t?t.style:{})})[0],k=w[x];function L(e,t,n,r){e.addEventListener?e.addEventListener(t,n,r):e.attachEvent&&e.attachEvent("on"+t,n)}function C(e,t,n,r){e.removeEventListener?e.removeEventListener(t,n,r):e.attachEvent&&e.detachEvent("on"+t,n)}function S(e,t){var n=void 0;return n="function"===typeof e?e(t):e,Array.isArray(n)?2===n.length?n:[n[0],n[1]]:[n]}var z=function(e){return!isNaN(parseFloat(e))&&isFinite(e)},T=("undefined"!==typeof window&&window.document&&window.document.createElement,n(48159));function O(){}var H={},D=!("undefined"!==typeof window&&window.document&&window.document.createElement);h.Ay.use(f.A,{name:"ant-ref"});var Y={mixins:[p.A],props:(0,m.CB)(b,{prefixCls:"drawer",placement:"left",getContainer:"body",level:"all",duration:".3s",ease:"cubic-bezier(0.78, 0.14, 0.15, 0.86)",firstEnter:!1,showMask:!0,handler:!0,maskStyle:{},wrapperClassName:"",className:""}),data:function(){this.levelDom=[],this.contentDom=null,this.maskDom=null,this.handlerdom=null,this.mousePos=null,this.sFirstEnter=this.firstEnter,this.timeout=null,this.children=null,this.drawerId=Number((Date.now()+Math.random()).toString().replace(".",Math.round(9*Math.random()))).toString(16);var e=void 0!==this.open?this.open:!!this.defaultOpen;return H[this.drawerId]=e,this.orignalOpen=this.open,this.preProps=(0,o.A)({},this.$props),{sOpen:e}},mounted:function(){var e=this;this.$nextTick(function(){if(!D){var t=!1;window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){return t=!0,null}})),e.passive=!!t&&{passive:!1}}var n=e.getOpen();(e.handler||n||e.sFirstEnter)&&(e.getDefault(e.$props),n&&(e.isOpenChange=!0,e.$nextTick(function(){e.domFocus()})),e.$forceUpdate())})},watch:{open:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(e){var t=this;void 0!==e&&e!==this.preProps.open&&(this.isOpenChange=!0,this.container||this.getDefault(this.$props),this.setState({sOpen:open})),this.preProps.open=e,e&&this.$nextTick(function(){t.domFocus()})}),placement:function(e){e!==this.preProps.placement&&(this.contentDom=null),this.preProps.placement=e},level:function(e){this.preProps.level!==e&&this.getParentAndLevelDom(this.$props),this.preProps.level=e}},updated:function(){var e=this;this.$nextTick(function(){!e.sFirstEnter&&e.container&&(e.$forceUpdate(),e.sFirstEnter=!0)})},beforeDestroy:function(){delete H[this.drawerId],delete this.isOpenChange,this.container&&(this.sOpen&&this.setLevelDomTransform(!1,!0),document.body.style.overflow=""),this.sFirstEnter=!1,clearTimeout(this.timeout)},methods:{domFocus:function(){this.dom&&this.dom.focus()},onKeyDown:function(e){e.keyCode===M.A.ESC&&(e.stopPropagation(),this.$emit("close",e))},onMaskTouchEnd:function(e){this.$emit("close",e),this.onTouchEnd(e,!0)},onIconTouchEnd:function(e){this.$emit("handleClick",e),this.onTouchEnd(e)},onTouchEnd:function(e,t){if(void 0===this.open){var n=t||this.sOpen;this.isOpenChange=!0,this.setState({sOpen:!n})}},onWrapperTransitionEnd:function(e){if(e.target===this.contentWrapper&&e.propertyName.match(/transform$/)){var t=this.getOpen();this.dom.style.transition="",!t&&this.getCurrentDrawerSome()&&(document.body.style.overflowX="",this.maskDom&&(this.maskDom.style.left="",this.maskDom.style.width="")),this.afterVisibleChange&&this.afterVisibleChange(!!t)}},getDefault:function(e){this.getParentAndLevelDom(e),(e.getContainer||e.parent)&&(this.container=this.defaultGetContainer())},getCurrentDrawerSome:function(){return!Object.keys(H).some(function(e){return H[e]})},getSelfContainer:function(){return this.container},getParentAndLevelDom:function(e){var t=this;if(!D){var n=e.level,r=e.getContainer;if(this.levelDom=[],r){if("string"===typeof r){var i=document.querySelectorAll(r)[0];this.parent=i}"function"===typeof r&&(this.parent=r()),"object"===("undefined"===typeof r?"undefined":(0,d.A)(r))&&r instanceof window.HTMLElement&&(this.parent=r)}if(!r&&this.container&&(this.parent=this.container.parentNode),"all"===n){var o=Array.prototype.slice.call(this.parent.children);o.forEach(function(e){"SCRIPT"!==e.nodeName&&"STYLE"!==e.nodeName&&"LINK"!==e.nodeName&&e!==t.container&&t.levelDom.push(e)})}else n&&A(n).forEach(function(e){document.querySelectorAll(e).forEach(function(e){t.levelDom.push(e)})})}},setLevelDomTransform:function(e,t,n,r){var i=this,o=this.$props,a=o.placement,s=o.levelMove,c=o.duration,l=o.ease,u=o.getContainer;if(!D&&(this.levelDom.forEach(function(o){if(i.isOpenChange||t){o.style.transition="transform "+c+" "+l,L(o,k,i.trnasitionEnd);var u=e?r:0;if(s){var d=S(s,{target:o,open:e});u=e?d[0]:d[1]||0}var h="number"===typeof u?u+"px":u,f="left"===a||"top"===a?h:"-"+h;o.style.transform=u?n+"("+f+")":"",o.style.msTransform=u?n+"("+f+")":""}}),"body"===u)){var d=["touchstart"],h=[document.body,this.maskDom,this.handlerdom,this.contentDom],f=document.body.scrollHeight>(window.innerHeight||document.documentElement.clientHeight)&&window.innerWidth>document.body.offsetWidth?(0,g.A)(1):0,p="width "+c+" "+l,v="transform "+c+" "+l;if(e&&"hidden"!==document.body.style.overflow){if(document.body.style.overflow="hidden",f){switch(document.body.style.position="relative",document.body.style.width="calc(100% - "+f+"px)",this.dom.style.transition="none",a){case"right":this.dom.style.transform="translateX(-"+f+"px)",this.dom.style.msTransform="translateX(-"+f+"px)";break;case"top":case"bottom":this.dom.style.width="calc(100% - "+f+"px)",this.dom.style.transform="translateZ(0)";break;default:break}clearTimeout(this.timeout),this.timeout=setTimeout(function(){i.dom.style.transition=v+","+p,i.dom.style.width="",i.dom.style.transform="",i.dom.style.msTransform=""})}h.forEach(function(e,t){e&&L(e,d[t]||"touchmove",t?i.removeMoveHandler:i.removeStartHandler,i.passive)})}else if(this.getCurrentDrawerSome()){if(document.body.style.overflow="",(this.isOpenChange||t)&&f){document.body.style.position="",document.body.style.width="",x&&(document.body.style.overflowX="hidden"),this.dom.style.transition="none";var y=void 0;switch(a){case"right":this.dom.style.transform="translateX("+f+"px)",this.dom.style.msTransform="translateX("+f+"px)",this.dom.style.width="100%",p="width 0s "+l+" "+c,this.maskDom&&(this.maskDom.style.left="-"+f+"px",this.maskDom.style.width="calc(100% + "+f+"px)");break;case"top":case"bottom":this.dom.style.width="calc(100% + "+f+"px)",this.dom.style.height="100%",this.dom.style.transform="translateZ(0)",y="height 0s "+l+" "+c;break;default:break}clearTimeout(this.timeout),this.timeout=setTimeout(function(){i.dom.style.transition=v+","+(y?y+",":"")+p,i.dom.style.transform="",i.dom.style.msTransform="",i.dom.style.width="",i.dom.style.height=""})}h.forEach(function(e,t){e&&C(e,d[t]||"touchmove",t?i.removeMoveHandler:i.removeStartHandler,i.passive)})}}var _=(0,m.WM)(this),b=_.change;b&&this.isOpenChange&&this.sFirstEnter&&(b(e),this.isOpenChange=!1)},getChildToRender:function(e){var t,n=this,i=this.$createElement,o=this.$props,a=o.className,c=o.prefixCls,l=o.placement,d=o.handler,h=o.showMask,f=o.maskStyle,p=o.width,g=o.height,y=o.wrapStyle,_=o.keyboard,b=o.maskClosable,M=this.$slots["default"],A=s()(c,(t={},(0,r.A)(t,c+"-"+l,!0),(0,r.A)(t,c+"-open",e),(0,r.A)(t,a,!!a),(0,r.A)(t,"no-mask",!h),t)),w=this.isOpenChange,x="left"===l||"right"===l,k="translate"+(x?"X":"Y"),L="left"===l||"top"===l?"-100%":"100%",C=e?"":k+"("+L+")";if(void 0===w||w){var S=this.contentDom?this.contentDom.getBoundingClientRect()[x?"width":"height"]:0,T=(x?p:g)||S;this.setLevelDomTransform(e,!1,k,T)}var H=void 0;if(!1!==d){var D=i("div",{class:"drawer-handle"},[i("i",{class:"drawer-handle-icon"})]),Y=this.handler,V=Y&&Y[0]||D,P=(0,m.kQ)(V),E=P.click;H=(0,v.Ob)(V,{on:{click:function(e){E&&E(),n.onIconTouchEnd(e)}},directives:[{name:"ant-ref",value:function(e){n.handlerdom=e}}]})}var j={class:A,directives:[{name:"ant-ref",value:function(e){n.dom=e}}],on:{transitionend:this.onWrapperTransitionEnd,keydown:e&&_?this.onKeyDown:O},style:y},F=[{name:"ant-ref",value:function(e){n.maskDom=e}}],I=[{name:"ant-ref",value:function(e){n.contentWrapper=e}}],$=[{name:"ant-ref",value:function(e){n.contentDom=e}}];return i("div",u()([j,{attrs:{tabIndex:-1}}]),[h&&i("div",u()([{key:e,class:c+"-mask",on:{click:b?this.onMaskTouchEnd:O},style:f},{directives:F}])),i("div",u()([{class:c+"-content-wrapper",style:{transform:C,msTransform:C,width:z(p)?p+"px":p,height:z(g)?g+"px":g}},{directives:I}]),[i("div",u()([{class:c+"-content"},{directives:$},{on:{touchstart:e?this.removeStartHandler:O,touchmove:e?this.removeMoveHandler:O}}]),[M]),H])])},getOpen:function(){return void 0!==this.open?this.open:this.sOpen},getTouchParentScroll:function(e,t,n,r){if(!t||t===document)return!1;if(t===e.parentNode)return!0;var i=Math.max(Math.abs(n),Math.abs(r))===Math.abs(r),o=Math.max(Math.abs(n),Math.abs(r))===Math.abs(n),a=t.scrollHeight-t.clientHeight,s=t.scrollWidth-t.clientWidth,c=t.scrollTop,l=t.scrollLeft;t.scrollTo&&t.scrollTo(t.scrollLeft+1,t.scrollTop+1);var u=t.scrollTop,d=t.scrollLeft;return t.scrollTo&&t.scrollTo(t.scrollLeft-1,t.scrollTop-1),!((!i||a&&u-c&&(!a||!(t.scrollTop>=a&&r<0||t.scrollTop<=0&&r>0)))&&(!o||s&&d-l&&(!s||!(t.scrollLeft>=s&&n<0||t.scrollLeft<=0&&n>0))))&&this.getTouchParentScroll(e,t.parentNode,n,r)},removeStartHandler:function(e){e.touches.length>1||(this.startPos={x:e.touches[0].clientX,y:e.touches[0].clientY})},removeMoveHandler:function(e){if(!(e.changedTouches.length>1)){var t=e.currentTarget,n=e.changedTouches[0].clientX-this.startPos.x,r=e.changedTouches[0].clientY-this.startPos.y;(t===this.maskDom||t===this.handlerdom||t===this.contentDom&&this.getTouchParentScroll(t,e.target,n,r))&&e.preventDefault()}},trnasitionEnd:function(e){C(e.target,k,this.trnasitionEnd),e.target.style.transition=""},defaultGetContainer:function(){if(D)return null;var e=document.createElement("div");return this.parent.appendChild(e),this.wrapperClassName&&(e.className=this.wrapperClassName),e}},render:function(){var e=this,t=arguments[0],n=this.$props,r=n.getContainer,i=n.wrapperClassName,o=n.handler,a=n.forceRender,s=this.getOpen(),c=null;H[this.drawerId]=s?this.container:s;var l=this.getChildToRender(!!this.sFirstEnter&&s);if(!r){var d=[{name:"ant-ref",value:function(t){e.container=t}}];return t("div",u()([{class:i},{directives:d}]),[l])}if(!this.container||!s&&!this.sFirstEnter)return null;var h=!!o||a;return(h||s||this.dom)&&(c=t(T.A,{attrs:{getContainer:this.getSelfContainer,children:l}})),c}},V=Y,P=V,E=n(40255),j=n(25592),F=n(44807),I={name:"ADrawer",props:{closable:y.A.bool.def(!0),destroyOnClose:y.A.bool,getContainer:y.A.any,maskClosable:y.A.bool.def(!0),mask:y.A.bool.def(!0),maskStyle:y.A.object,wrapStyle:y.A.object,bodyStyle:y.A.object,headerStyle:y.A.object,drawerStyle:y.A.object,title:y.A.any,visible:y.A.bool,width:y.A.oneOfType([y.A.string,y.A.number]).def(256),height:y.A.oneOfType([y.A.string,y.A.number]).def(256),zIndex:y.A.number,prefixCls:y.A.string,placement:y.A.oneOf(["top","right","bottom","left"]).def("right"),level:y.A.any.def(null),wrapClassName:y.A.string,handle:y.A.any,afterVisibleChange:y.A.func,keyboard:y.A.bool.def(!0)},mixins:[p.A],data:function(){return this.destroyClose=!1,this.preVisible=this.$props.visible,{_push:!1}},inject:{parentDrawer:{default:function(){return null}},configProvider:{default:function(){return j.f}}},provide:function(){return{parentDrawer:this}},mounted:function(){var e=this.visible;e&&this.parentDrawer&&this.parentDrawer.push()},updated:function(){var e=this;this.$nextTick(function(){e.preVisible!==e.visible&&e.parentDrawer&&(e.visible?e.parentDrawer.push():e.parentDrawer.pull()),e.preVisible=e.visible})},beforeDestroy:function(){this.parentDrawer&&this.parentDrawer.pull()},methods:{domFocus:function(){this.$refs.vcDrawer&&this.$refs.vcDrawer.domFocus()},close:function(e){this.$emit("close",e)},push:function(){this.setState({_push:!0})},pull:function(){var e=this;this.setState({_push:!1},function(){e.domFocus()})},onDestroyTransitionEnd:function(){var e=this.getDestroyOnClose();e&&(this.visible||(this.destroyClose=!0,this.$forceUpdate()))},getDestroyOnClose:function(){return this.destroyOnClose&&!this.visible},getPushTransform:function(e){return"left"===e||"right"===e?"translateX("+("left"===e?180:-180)+"px)":"top"===e||"bottom"===e?"translateY("+("top"===e?180:-180)+"px)":void 0},getRcDrawerStyle:function(){var e=this.$props,t=e.zIndex,n=e.placement,r=e.wrapStyle,i=this.$data._push;return(0,o.A)({zIndex:t,transform:i?this.getPushTransform(n):void 0},r)},renderHeader:function(e){var t=this.$createElement,n=this.$props,r=n.closable,i=n.headerStyle,o=(0,m.nu)(this,"title");if(!o&&!r)return null;var a=o?e+"-header":e+"-header-no-title";return t("div",{class:a,style:i},[o&&t("div",{class:e+"-title"},[o]),r?this.renderCloseIcon(e):null])},renderCloseIcon:function(e){var t=this.$createElement,n=this.closable;return n&&t("button",{key:"closer",on:{click:this.close},attrs:{"aria-label":"Close"},class:e+"-close"},[t(E.A,{attrs:{type:"close"}})])},renderBody:function(e){var t=this.$createElement;if(this.destroyClose&&!this.visible)return null;this.destroyClose=!1;var n=this.$props,r=n.bodyStyle,i=n.drawerStyle,a={},s=this.getDestroyOnClose();return s&&(a.opacity=0,a.transition="opacity .3s"),t("div",{class:e+"-wrapper-body",style:(0,o.A)({},a,i),on:{transitionend:this.onDestroyTransitionEnd}},[this.renderHeader(e),t("div",{key:"body",class:e+"-body",style:r},[this.$slots["default"]])])}},render:function(){var e,t=arguments[0],n=(0,m.Oq)(this),a=n.prefixCls,l=n.width,u=n.height,d=n.visible,h=n.placement,f=n.wrapClassName,p=n.mask,v=(0,i.A)(n,["prefixCls","width","height","visible","placement","wrapClassName","mask"]),g=p?"":"no-mask",y={};"left"===h||"right"===h?y.width="number"===typeof l?l+"px":l:y.height="number"===typeof u?u+"px":u;var _=(0,m.nu)(this,"handle")||!1,b=this.configProvider.getPrefixCls,M=b("drawer",a),A={ref:"vcDrawer",props:(0,o.A)({},(0,c.A)(v,["closable","destroyOnClose","drawerStyle","headerStyle","bodyStyle","title","push","visible","getPopupContainer","rootPrefixCls","getPrefixCls","renderEmpty","csp","pageHeader","autoInsertSpaceInButton"]),{handler:_},y,{prefixCls:M,open:d,showMask:p,placement:h,className:s()((e={},(0,r.A)(e,f,!!f),(0,r.A)(e,g,!!g),e)),wrapStyle:this.getRcDrawerStyle()}),on:(0,o.A)({},(0,m.WM)(this))};return t(P,A,[this.renderBody(M)])},install:function(e){e.use(F.A),e.component(I.name,I)}},$=I},25537:function(e,t,n){"use strict";n(29229)},13185:function(e,t,n){"use strict";var r=n(5748),i=n(85505),o=n(49084),a=n(26997),s=n(49872),c=n(57981),l=n(4718),u=n(15848),d=n(81156),h=n(25592),f=n(40255),p=(0,a.A)(),m=(0,d.A)(),v=o.A.Group,g=(0,i.A)({},s.E,m,{type:l.A.oneOf(["primary","ghost","dashed","danger","default"]).def("default"),size:l.A.oneOf(["small","large","default"]).def("default"),htmlType:p.htmlType,href:l.A.string,disabled:l.A.bool,prefixCls:l.A.string,placement:m.placement.def("bottomRight"),icon:l.A.any,title:l.A.string});t.A={name:"ADropdownButton",model:{prop:"visible",event:"visibleChange"},props:g,provide:function(){return{savePopupRef:this.savePopupRef}},inject:{configProvider:{default:function(){return h.f}}},methods:{savePopupRef:function(e){this.popupRef=e},onClick:function(e){this.$emit("click",e)},onVisibleChange:function(e){this.$emit("visibleChange",e)}},render:function(){var e=arguments[0],t=this.$props,n=t.type,a=t.disabled,s=t.htmlType,l=t.prefixCls,d=t.trigger,h=t.align,p=t.visible,m=t.placement,g=t.getPopupContainer,y=t.href,_=t.title,b=(0,r.A)(t,["type","disabled","htmlType","prefixCls","trigger","align","visible","placement","getPopupContainer","href","title"]),M=(0,u.nu)(this,"icon")||e(f.A,{attrs:{type:"ellipsis"}}),A=this.configProvider.getPopupContainer,w=this.configProvider.getPrefixCls,x=w("dropdown-button",l),k={props:{align:h,disabled:a,trigger:a?[]:d,placement:m,getPopupContainer:g||A},on:{visibleChange:this.onVisibleChange}};(0,u.cK)(this,"visible")&&(k.props.visible=p);var L={props:(0,i.A)({},b),class:x};return e(v,L,[e(o.A,{attrs:{type:n,disabled:a,htmlType:s,href:y,title:_},on:{click:this.onClick}},[this.$slots["default"]]),e(c.A,k,[e("template",{slot:"overlay"},[(0,u.nu)(this,"overlay")]),e(o.A,{attrs:{type:n}},[M])])])}}},57981:function(e,t,n){"use strict";n.d(t,{A:function(){return A}});var r=n(85505),i=n(5748),o=n(4718),a=n(47006),s={adjustX:1,adjustY:1},c=[0,0],l={topLeft:{points:["bl","tl"],overflow:s,offset:[0,-4],targetOffset:c},topCenter:{points:["bc","tc"],overflow:s,offset:[0,-4],targetOffset:c},topRight:{points:["br","tr"],overflow:s,offset:[0,-4],targetOffset:c},bottomLeft:{points:["tl","bl"],overflow:s,offset:[0,4],targetOffset:c},bottomCenter:{points:["tc","bc"],overflow:s,offset:[0,4],targetOffset:c},bottomRight:{points:["tr","br"],overflow:s,offset:[0,4],targetOffset:c}},u=l,d=n(15848),h=n(52315),f=n(51927),p={mixins:[h.A],props:{minOverlayWidthMatchTrigger:o.A.bool,prefixCls:o.A.string.def("rc-dropdown"),transitionName:o.A.string,overlayClassName:o.A.string.def(""),openClassName:o.A.string,animation:o.A.any,align:o.A.object,overlayStyle:o.A.object.def(function(){return{}}),placement:o.A.string.def("bottomLeft"),overlay:o.A.any,trigger:o.A.array.def(["hover"]),alignPoint:o.A.bool,showAction:o.A.array.def([]),hideAction:o.A.array.def([]),getPopupContainer:o.A.func,visible:o.A.bool,defaultVisible:o.A.bool.def(!1),mouseEnterDelay:o.A.number.def(.15),mouseLeaveDelay:o.A.number.def(.1)},data:function(){var e=this.defaultVisible;return(0,d.cK)(this,"visible")&&(e=this.visible),{sVisible:e}},watch:{visible:function(e){void 0!==e&&this.setState({sVisible:e})}},methods:{onClick:function(e){(0,d.cK)(this,"visible")||this.setState({sVisible:!1}),this.$emit("overlayClick",e),this.childOriginEvents.click&&this.childOriginEvents.click(e)},onVisibleChange:function(e){(0,d.cK)(this,"visible")||this.setState({sVisible:e}),this.__emit("visibleChange",e)},getMinOverlayWidthMatchTrigger:function(){var e=(0,d.Oq)(this),t=e.minOverlayWidthMatchTrigger,n=e.alignPoint;return"minOverlayWidthMatchTrigger"in e?t:!n},getOverlayElement:function(){var e=this.overlay||this.$slots.overlay||this.$scopedSlots.overlay,t=void 0;return t="function"===typeof e?e():e,t},getMenuElement:function(){var e=this,t=this.onClick,n=this.prefixCls,r=this.$slots;this.childOriginEvents=(0,d.kQ)(r.overlay[0]);var i=this.getOverlayElement(),o={props:{prefixCls:n+"-menu",getPopupContainer:function(){return e.getPopupDomNode()}},on:{click:t}};return"string"===typeof i.type&&delete o.props.prefixCls,(0,f.Ob)(r.overlay[0],o)},getMenuElementOrLambda:function(){var e=this.overlay||this.$slots.overlay||this.$scopedSlots.overlay;return"function"===typeof e?this.getMenuElement:this.getMenuElement()},getPopupDomNode:function(){return this.$refs.trigger.getPopupDomNode()},getOpenClassName:function(){var e=this.$props,t=e.openClassName,n=e.prefixCls;return void 0!==t?t:n+"-open"},afterVisibleChange:function(e){if(e&&this.getMinOverlayWidthMatchTrigger()){var t=this.getPopupDomNode(),n=this.$el;n&&t&&n.offsetWidth>t.offsetWidth&&(t.style.minWidth=n.offsetWidth+"px",this.$refs.trigger&&this.$refs.trigger._component&&this.$refs.trigger._component.$refs&&this.$refs.trigger._component.$refs.alignInstance&&this.$refs.trigger._component.$refs.alignInstance.forceAlign())}},renderChildren:function(){var e=this.$slots["default"]&&this.$slots["default"][0],t=this.sVisible;return t&&e?(0,f.Ob)(e,{class:this.getOpenClassName()}):e}},render:function(){var e=arguments[0],t=this.$props,n=t.prefixCls,o=t.transitionName,s=t.animation,c=t.align,l=t.placement,d=t.getPopupContainer,h=t.showAction,f=t.hideAction,p=t.overlayClassName,m=t.overlayStyle,v=t.trigger,g=(0,i.A)(t,["prefixCls","transitionName","animation","align","placement","getPopupContainer","showAction","hideAction","overlayClassName","overlayStyle","trigger"]),y=f;y||-1===v.indexOf("contextmenu")||(y=["click"]);var _={props:(0,r.A)({},g,{prefixCls:n,popupClassName:p,popupStyle:m,builtinPlacements:u,action:v,showAction:h,hideAction:y||[],popupPlacement:l,popupAlign:c,popupTransitionName:o,popupAnimation:s,popupVisible:this.sVisible,afterPopupVisibleChange:this.afterVisibleChange,getPopupContainer:d}),on:{popupVisibleChange:this.onVisibleChange},ref:"trigger"};return e(a.A,_,[this.renderChildren(),e("template",{slot:"popup"},[this.$slots.overlay&&this.getMenuElement()])])}},m=p,v=n(13185),g=n(81156),y=n(25592),_=n(40255),b=(0,g.A)(),M={name:"ADropdown",props:(0,r.A)({},b,{prefixCls:o.A.string,mouseEnterDelay:o.A.number.def(.15),mouseLeaveDelay:o.A.number.def(.1),placement:b.placement.def("bottomLeft")}),model:{prop:"visible",event:"visibleChange"},provide:function(){return{savePopupRef:this.savePopupRef}},inject:{configProvider:{default:function(){return y.f}}},methods:{savePopupRef:function(e){this.popupRef=e},getTransitionName:function(){var e=this.$props,t=e.placement,n=void 0===t?"":t,r=e.transitionName;return void 0!==r?r:n.indexOf("top")>=0?"slide-down":"slide-up"},renderOverlay:function(e){var t=this.$createElement,n=(0,d.nu)(this,"overlay"),r=Array.isArray(n)?n[0]:n,i=r&&(0,d.Ts)(r),o=i||{},a=o.selectable,s=void 0!==a&&a,c=o.focusable,l=void 0===c||c,u=t("span",{class:e+"-menu-submenu-arrow"},[t(_.A,{attrs:{type:"right"},class:e+"-menu-submenu-arrow-icon"})]),h=r&&r.componentOptions?(0,f.Ob)(r,{props:{mode:"vertical",selectable:s,focusable:l,expandIcon:u}}):n;return h}},render:function(){var e=arguments[0],t=this.$slots,n=(0,d.Oq)(this),i=n.prefixCls,o=n.trigger,a=n.disabled,s=n.getPopupContainer,c=this.configProvider.getPopupContainer,l=this.configProvider.getPrefixCls,u=l("dropdown",i),h=(0,f.Ob)(t["default"],{class:u+"-trigger",props:{disabled:a}}),p=a?[]:o,v=void 0;p&&-1!==p.indexOf("contextmenu")&&(v=!0);var g={props:(0,r.A)({alignPoint:v},n,{prefixCls:u,getPopupContainer:s||c,transitionName:this.getTransitionName(),trigger:p}),on:(0,d.WM)(this)};return e(m,g,[h,e("template",{slot:"overlay"},[this.renderOverlay(u)])])}};M.Button=v.A;var A=M},81156:function(e,t,n){"use strict";var r=n(4718);t.A=function(){return{trigger:r.A.array.def(["hover"]),overlay:r.A.any,visible:r.A.bool,disabled:r.A.bool,align:r.A.object,getPopupContainer:r.A.func,prefixCls:r.A.string,transitionName:r.A.string,placement:r.A.oneOf(["topLeft","topCenter","topRight","bottomLeft","bottomCenter","bottomRight"]),overlayClassName:r.A.string,overlayStyle:r.A.object,forceRender:r.A.bool,mouseEnterDelay:r.A.number,mouseLeaveDelay:r.A.number,openClassName:r.A.string,minOverlayWidthMatchTrigger:r.A.bool}}},77197:function(e,t,n){"use strict";var r=n(57981),i=n(13185),o=n(44807);r.A.Button=i.A,r.A.install=function(e){e.use(o.A),e.component(r.A.name,r.A),e.component(i.A.name,i.A)},t.Ay=r.A},63713:function(e,t,n){"use strict";n(29229),n(27902)},2970:function(e,t,n){"use strict";n.d(t,{Ay:function(){return g}});var r=n(75189),i=n.n(r),o=n(97479),a=n(44508),s=n(85505),c=n(4718),l=n(25592),u=n(15848),d=n(38377),h={functional:!0,PRESENTED_IMAGE_DEFAULT:!0,render:function(){var e=arguments[0];return e("svg",{attrs:{width:"184",height:"152",viewBox:"0 0 184 152",xmlns:"http://www.w3.org/2000/svg"}},[e("g",{attrs:{fill:"none",fillRule:"evenodd"}},[e("g",{attrs:{transform:"translate(24 31.67)"}},[e("ellipse",{attrs:{fillOpacity:".8",fill:"#F5F5F7",cx:"67.797",cy:"106.89",rx:"67.797",ry:"12.668"}}),e("path",{attrs:{d:"M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z",fill:"#AEB8C2"}}),e("path",{attrs:{d:"M101.537 86.214L80.63 61.102c-1.001-1.207-2.507-1.867-4.048-1.867H31.724c-1.54 0-3.047.66-4.048 1.867L6.769 86.214v13.792h94.768V86.214z",fill:"url(#linearGradient-1)",transform:"translate(13.56)"}}),e("path",{attrs:{d:"M33.83 0h67.933a4 4 0 0 1 4 4v93.344a4 4 0 0 1-4 4H33.83a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z",fill:"#F5F5F7"}}),e("path",{attrs:{d:"M42.678 9.953h50.237a2 2 0 0 1 2 2V36.91a2 2 0 0 1-2 2H42.678a2 2 0 0 1-2-2V11.953a2 2 0 0 1 2-2zM42.94 49.767h49.713a2.262 2.262 0 1 1 0 4.524H42.94a2.262 2.262 0 0 1 0-4.524zM42.94 61.53h49.713a2.262 2.262 0 1 1 0 4.525H42.94a2.262 2.262 0 0 1 0-4.525zM121.813 105.032c-.775 3.071-3.497 5.36-6.735 5.36H20.515c-3.238 0-5.96-2.29-6.734-5.36a7.309 7.309 0 0 1-.222-1.79V69.675h26.318c2.907 0 5.25 2.448 5.25 5.42v.04c0 2.971 2.37 5.37 5.277 5.37h34.785c2.907 0 5.277-2.421 5.277-5.393V75.1c0-2.972 2.343-5.426 5.25-5.426h26.318v33.569c0 .617-.077 1.216-.221 1.789z",fill:"#DCE0E6"}})]),e("path",{attrs:{d:"M149.121 33.292l-6.83 2.65a1 1 0 0 1-1.317-1.23l1.937-6.207c-2.589-2.944-4.109-6.534-4.109-10.408C138.802 8.102 148.92 0 161.402 0 173.881 0 184 8.102 184 18.097c0 9.995-10.118 18.097-22.599 18.097-4.528 0-8.744-1.066-12.28-2.902z",fill:"#DCE0E6"}}),e("g",{attrs:{transform:"translate(149.65 15.383)",fill:"#FFF"}},[e("ellipse",{attrs:{cx:"20.654",cy:"3.167",rx:"2.849",ry:"2.815"}}),e("path",{attrs:{d:"M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z"}})])])])}},f={functional:!0,PRESENTED_IMAGE_SIMPLE:!0,render:function(){var e=arguments[0];return e("svg",{attrs:{width:"64",height:"41",viewBox:"0 0 64 41",xmlns:"http://www.w3.org/2000/svg"}},[e("g",{attrs:{transform:"translate(0 1)",fill:"none",fillRule:"evenodd"}},[e("ellipse",{attrs:{fill:"#F5F5F5",cx:"32",cy:"33",rx:"32",ry:"7"}}),e("g",{attrs:{fillRule:"nonzero",stroke:"#D9D9D9"}},[e("path",{attrs:{d:"M55 12.76L44.854 1.258C44.367.474 43.656 0 42.907 0H21.093c-.749 0-1.46.474-1.947 1.257L9 12.761V22h46v-9.24z"}}),e("path",{attrs:{d:"M41.613 15.931c0-1.605.994-2.93 2.227-2.931H55v18.137C55 33.26 53.68 35 52.05 35h-40.1C10.32 35 9 33.259 9 31.137V13h11.16c1.233 0 2.227 1.323 2.227 2.928v.022c0 1.605 1.005 2.901 2.237 2.901h14.752c1.232 0 2.237-1.308 2.237-2.913v-.007z",fill:"#FAFAFA"}})])])])}},p=n(44807),m=function(){return{prefixCls:c.A.string,image:c.A.any,description:c.A.any,imageStyle:c.A.object}},v={name:"AEmpty",props:(0,s.A)({},m()),inject:{configProvider:{default:function(){return l.f}}},methods:{renderEmpty:function(e){var t=this.$createElement,n=this.$props,r=n.prefixCls,s=n.imageStyle,c=this.configProvider.getPrefixCls,l=c("empty",r),d=(0,u.nu)(this,"image")||t(h),f=(0,u.nu)(this,"description"),p="undefined"!==typeof f?f:e.description,m="string"===typeof p?p:"empty",v=(0,a.A)({},l,!0),g=null;if("string"===typeof d)g=t("img",{attrs:{alt:m,src:d}});else if("object"===("undefined"===typeof d?"undefined":(0,o.A)(d))&&d.PRESENTED_IMAGE_SIMPLE){var y=d;g=t(y),v[l+"-normal"]=!0}else g=d;return t("div",i()([{class:v},{on:(0,u.WM)(this)}]),[t("div",{class:l+"-image",style:s},[g]),p&&t("p",{class:l+"-description"},[p]),this.$slots["default"]&&t("div",{class:l+"-footer"},[this.$slots["default"]])])}},render:function(){var e=arguments[0];return e(d.A,{attrs:{componentName:"Empty"},scopedSlots:{default:this.renderEmpty}})}};v.PRESENTED_IMAGE_DEFAULT=h,v.PRESENTED_IMAGE_SIMPLE=f,v.install=function(e){e.use(p.A),e.component(v.name,v)};var g=v},93693:function(e,t,n){"use strict";n(29229)},70742:function(e,t,n){"use strict";n.d(t,{Ay:function(){return O}});var r=n(85471),i=n(44508),o=n(85505),a=n(4718),s=n(46942),c=n.n(s),l=n(43594),u=n(69607),d=n.n(u),h=n(36873),f=n(32173),p=n(88055),m=n.n(p),v=n(15848),g=n(52315),y=n(25592),_=n(75837),b=n(51927);function M(){}function A(e,t,n){var r=e;t=t.replace(/\[(\w+)\]/g,".$1"),t=t.replace(/^\./,"");for(var i=t.split("."),o=0,a=i.length;o1&&void 0!==arguments[1]?arguments[1]:M;this.validateDisabled=!1;var r=this.getFilteredRule(e);if(!r||0===r.length)return n(),!0;this.validateState="validating";var i={};r&&r.length>0&&r.forEach(function(e){delete e.trigger}),i[this.prop]=r;var o=new f.A(i);this.FormContext&&this.FormContext.validateMessages&&o.messages(this.FormContext.validateMessages);var a={};a[this.prop]=this.fieldValue,o.validate(a,{firstFields:!0},function(e,r){t.validateState=e?"error":"success",t.validateMessage=e?e[0].message:"",n(t.validateMessage,r),t.FormContext&&t.FormContext.$emit&&t.FormContext.$emit("validate",t.prop,!e,t.validateMessage||null)})},getRules:function(){var e=this.FormContext.rules,t=this.rules,n=void 0!==this.required?{required:!!this.required,trigger:"change"}:[],r=A(e,this.prop||"");return e=e?r.o[this.prop||""]||r.v:[],[].concat(t||e||[]).concat(n)},getFilteredRule:function(e){var t=this.getRules();return t.filter(function(t){return!t.trigger||""===e||(Array.isArray(t.trigger)?t.trigger.indexOf(e)>-1:t.trigger===e)}).map(function(e){return(0,o.A)({},e)})},onFieldBlur:function(){this.validate("blur")},onFieldChange:function(){this.validateDisabled?this.validateDisabled=!1:this.validate("change")},clearValidate:function(){this.validateState="",this.validateMessage="",this.validateDisabled=!1},resetField:function(){var e=this;this.validateState="",this.validateMessage="";var t=this.FormContext.model||{},n=this.fieldValue,r=this.prop;-1!==r.indexOf(":")&&(r=r.replace(/:/,"."));var i=A(t,r,!0);this.validateDisabled=!0,Array.isArray(n)?i.o[i.k]=[].concat(this.initialValue):i.o[i.k]=this.initialValue,this.$nextTick(function(){e.validateDisabled=!1})}},render:function(){var e=this,t=arguments[0],n=this.$slots,r=this.$scopedSlots,i=(0,v.Oq)(this),a=(0,v.nu)(this,"label"),s=(0,v.nu)(this,"extra"),c=(0,v.nu)(this,"help"),l={props:(0,o.A)({},i,{label:a,extra:s,validateStatus:this.validateState,help:this.validateMessage||c,required:this.isRequired||i.required})},u=(0,v.Gk)(r["default"]?r["default"]():n["default"]),d=u[0];if(this.prop&&this.autoLink&&(0,v.zO)(d)){var h=(0,v.kQ)(d),f=h.blur,p=h.change;d=(0,b.Ob)(d,{on:{blur:function(){f&&f.apply(void 0,arguments),e.onFieldBlur()},change:function(){if(Array.isArray(p))for(var t=0,n=p.length;t0&&void 0!==arguments[0]?arguments[0]:[],t=e.length?"string"===typeof e?this.fields.filter(function(t){return e===t.prop}):this.fields.filter(function(t){return e.indexOf(t.prop)>-1}):this.fields;t.forEach(function(e){e.clearValidate()})},validate:function(e){var t=this;if(this.model){var n=void 0;"function"!==typeof e&&window.Promise&&(n=new window.Promise(function(t,n){e=function(e){e?t(e):n(e)}}));var r=!0,i=0;0===this.fields.length&&e&&e(!0);var a={};return this.fields.forEach(function(n){n.validate("",function(n,s){n&&(r=!1),a=(0,o.A)({},a,s),"function"===typeof e&&++i===t.fields.length&&e(r,a)})}),n||void 0}(0,h.A)(!1,"FormModel","model is required for resetFields to work.")},validateField:function(e,t){e=[].concat(e);var n=this.fields.filter(function(t){return-1!==e.indexOf(t.prop)});n.length?n.forEach(function(e){e.validate("",t)}):(0,h.A)(!1,"FormModel","please pass correct props!")}},render:function(){var e,t=arguments[0],n=this.prefixCls,r=this.hideRequiredMark,o=this.layout,a=this.onSubmit,s=this.$slots,l=this.configProvider.getPrefixCls,u=l("form",n),d=c()(u,(e={},(0,i.A)(e,u+"-horizontal","horizontal"===o),(0,i.A)(e,u+"-vertical","vertical"===o),(0,i.A)(e,u+"-inline","inline"===o),(0,i.A)(e,u+"-hide-required-mark",r),e));return t("form",{on:{submit:a},class:d},[s["default"]])}}),C=L,S=n(24415),z=n(35745),T=n(44807);r.Ay.use(S.A,{name:"ant-ref"}),r.Ay.use(z.A),C.install=function(e){e.use(T.A),e.component(C.name,C),e.component(C.Item.name,C.Item)};var O=C},98688:function(e,t,n){"use strict";n(29229),n(67434)},75837:function(e,t,n){"use strict";var r=n(97479),i=n(44508),o=n(5748),a=n(75189),s=n.n(a),c=n(32779),l=n(4718),u=n(46942),d=n.n(u),h=n(7309),f=n.n(h),p=n(9712),m=n(43594),v=n(36873),g=n(20355),y=n(15848),_=n(80178),b=n(52315),M=n(51927),A=n(40255),w=n(25592);function x(){}function k(e){return e.reduce(function(e,t){return[].concat((0,c.A)(e),[" ",t])},[]).slice(1)}var L={id:l.A.string,htmlFor:l.A.string,prefixCls:l.A.string,label:l.A.any,labelCol:l.A.shape(m.fZ).loose,wrapperCol:l.A.shape(m.fZ).loose,help:l.A.any,extra:l.A.any,validateStatus:l.A.oneOf(["","success","warning","error","validating"]),hasFeedback:l.A.bool,required:l.A.bool,colon:l.A.bool,fieldDecoratorId:l.A.string,fieldDecoratorOptions:l.A.object,selfUpdate:l.A.bool,labelAlign:l.A.oneOf(["left","right"])};function C(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n=!1,r=0,i=e.length;r0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n=[],r=0;r0)break;var i=e[r];if((i.tag||""!==i.text.trim())&&!(0,y.xr)(i).__ANT_FORM_ITEM){var o=(0,y.rz)(i),a=i.data&&i.data.attrs||{};g.H in a?n.push(i):o&&(n=n.concat(this.getControls(o,t)))}}return n},getOnlyControl:function(){var e=this.getControls(this.slotDefault,!1)[0];return void 0!==e?e:null},getChildAttr:function(e){var t=this.getOnlyControl(),n={};if(t)return t.data?n=t.data:t.$vnode&&t.$vnode.data&&(n=t.$vnode.data),n[e]||n.attrs[e]},getId:function(){return this.getChildAttr("id")},getMeta:function(){return this.getChildAttr(g.H)},getField:function(){return this.getChildAttr(g.W)},getValidateStatus:function(){var e=this.getOnlyControl();if(!e)return"";var t=this.getField();if(t.validating)return"validating";if(t.errors)return"error";var n="value"in t?t.value:this.getMeta().initialValue;return void 0!==n&&null!==n&&""!==n?"success":""},onLabelClick:function(){var e=this.id||this.getId();if(e){var t=this.$el,n=t.querySelector('[id="'+e+'"]');n&&n.focus&&n.focus()}},onHelpAnimEnd:function(e,t){this.helpShow=t,t||this.$forceUpdate()},isRequired:function(){var e=this.required;if(void 0!==e)return e;if(this.getOnlyControl()){var t=this.getMeta()||{},n=t.validate||[];return n.filter(function(e){return!!e.rules}).some(function(e){return e.rules.some(function(e){return e.required})})}return!1},renderHelp:function(e){var t=this,n=this.$createElement,r=this.getHelpMessage(),i=r?n("div",{class:e+"-explain",key:"help"},[r]):null;i&&(this.helpShow=!!i);var o=(0,_.A)("show-help",{afterEnter:function(){return t.onHelpAnimEnd("help",!0)},afterLeave:function(){return t.onHelpAnimEnd("help",!1)}});return n("transition",s()([o,{key:"help"}]),[i])},renderExtra:function(e){var t=this.$createElement,n=(0,y.nu)(this,"extra");return n?t("div",{class:e+"-extra"},[n]):null},renderValidateWrapper:function(e,t,n,r){var i=this.$createElement,o=this.$props,a=this.getOnlyControl,s=void 0===o.validateStatus&&a?this.getValidateStatus():o.validateStatus,c=e+"-item-control";s&&(c=d()(e+"-item-control",{"has-feedback":s&&o.hasFeedback,"has-success":"success"===s,"has-warning":"warning"===s,"has-error":"error"===s,"is-validating":"validating"===s}));var l="";switch(s){case"success":l="check-circle";break;case"warning":l="exclamation-circle";break;case"error":l="close-circle";break;case"validating":l="loading";break;default:l="";break}var u=o.hasFeedback&&l?i("span",{class:e+"-item-children-icon"},[i(A.A,{attrs:{type:l,theme:"loading"===l?"outlined":"filled"}})]):null;return i("div",{class:c},[i("span",{class:e+"-item-children"},[t,u]),n,r])},renderWrapper:function(e,t){var n=this.$createElement,r=this.isFormItemChildren?{}:this.FormContext,i=r.wrapperCol,a=this.wrapperCol,s=a||i||{},c=s.style,l=s.id,u=s.on,h=(0,o.A)(s,["style","id","on"]),f=d()(e+"-item-control-wrapper",s["class"]),p={props:h,class:f,key:"wrapper",style:c,id:l,on:u};return n(m.Ay,p,[t])},renderLabel:function(e){var t,n=this.$createElement,r=this.FormContext,a=r.vertical,s=r.labelAlign,c=r.labelCol,l=r.colon,u=this.labelAlign,h=this.labelCol,f=this.colon,p=this.id,v=this.htmlFor,g=(0,y.nu)(this,"label"),_=this.isRequired(),b=h||c||{},M=u||s,A=e+"-item-label",w=d()(A,"left"===M&&A+"-left",b["class"]),x=(b["class"],b.style),k=b.id,L=b.on,C=(0,o.A)(b,["class","style","id","on"]),S=g,z=!0===f||!1!==l&&!1!==f,T=z&&!a;T&&"string"===typeof g&&""!==g.trim()&&(S=g.replace(/[::]\s*$/,""));var O=d()((t={},(0,i.A)(t,e+"-item-required",_),(0,i.A)(t,e+"-item-no-colon",!z),t)),H={props:C,class:w,key:"label",style:x,id:k,on:L};return g?n(m.Ay,H,[n("label",{attrs:{for:v||p||this.getId(),title:"string"===typeof g?g:""},class:O,on:{click:this.onLabelClick}},[S])]):null},renderChildren:function(e){return[this.renderLabel(e),this.renderWrapper(e,this.renderValidateWrapper(e,this.slotDefault,this.renderHelp(e),this.renderExtra(e)))]},renderFormItem:function(){var e,t=this.$createElement,n=this.$props.prefixCls,r=this.configProvider.getPrefixCls,o=r("form",n),a=this.renderChildren(o),s=(e={},(0,i.A)(e,o+"-item",!0),(0,i.A)(e,o+"-item-with-help",this.helpShow),e);return t(p.A,{class:d()(s),key:"row"},[a])},decoratorOption:function(e){if(e.data&&e.data.directives){var t=f()(e.data.directives,["name","decorator"]);return(0,v.A)(!t||t&&Array.isArray(t.value),"Form",'Invalid directive: type check failed for directive "decorator". Expected Array, got '+(0,r.A)(t?t.value:t)+". At "+e.tag+"."),t?t.value:null}return null},decoratorChildren:function(e){for(var t=this.FormContext,n=t.form.getFieldDecorator,r=0,i=e.length;r1),"Form","`autoFormCreate` just `decorator` then first children. but you can use JSX to support multiple children"),this.slotDefault=a}else o.form?(a=(0,M.pM)(a),this.slotDefault=this.decoratorChildren(a)):this.slotDefault=a;return this.renderFormItem()}}},20355:function(e,t,n){"use strict";n.d(t,{H:function(){return r},W:function(){return i}});var r="data-__meta",i="data-__field"},15001:function(e,t,n){"use strict";n.d(t,{Ay:function(){return Me}});var r=n(85471),i=n(44508),o=n(85505),a=n(4718),s=n(46942),c=n.n(s),l=n(43594),u=n(69607),d=n.n(u),h=n(36873),f=n(48204),p=n(61448),m=n.n(p),v=n(97479),g=n(5748),y=n(32779),_=n(32173),b=n(9771),M=n.n(b),A=n(58156),w=n.n(A),x=n(63560),k=n.n(x),L=n(75288),C=n.n(L),S=n(90179),z=n.n(S),T=n(9506),O=n(97588),H=function e(t){(0,T.A)(this,e),(0,o.A)(this,t)};function D(e){return e instanceof H}function Y(e){return D(e)?e:new H(e)}function V(e){return e.name||"WrappedComponent"}function P(e,t){return e.name="Form_"+V(t),e.WrappedComponent=t,e.props=(0,o.A)({},e.props,t.props),e}function E(e){return e}function j(e){return Array.prototype.concat.apply([],e)}function F(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments[1],n=arguments[2],r=arguments[3],i=arguments[4];if(n(e,t))i(e,t);else if(void 0===t||null===t);else if(Array.isArray(t))t.forEach(function(t,o){return F(e+"["+o+"]",t,n,r,i)});else{if("object"!==("undefined"===typeof t?"undefined":(0,v.A)(t)))return void M()(!1,r);Object.keys(t).forEach(function(o){var a=t[o];F(e+(e?".":"")+o,a,n,r,i)})}}function I(e,t,n){var r={};return F(void 0,e,t,n,function(e,t){r[e]=t}),r}function $(e,t,n){var r=e.map(function(e){var t=(0,o.A)({},e,{trigger:e.trigger||[]});return"string"===typeof t.trigger&&(t.trigger=[t.trigger]),t});return t&&r.push({trigger:n?[].concat(n):[],rules:t}),r}function R(e){return e.filter(function(e){return!!e.rules&&e.rules.length}).map(function(e){return e.trigger}).reduce(function(e,t){return e.concat(t)},[])}function N(e){if(!e||!e.target)return e;var t=e.target;return"checkbox"===t.type?t.checked:t.value}function W(e){return e?e.map(function(e){return e&&e.message?e.message:e}):e}function B(e,t,n){var r=e,i=t,o=n;return void 0===n&&("function"===typeof r?(o=r,i={},r=void 0):Array.isArray(r)?"function"===typeof i?(o=i,i={}):i=i||{}:(o=i,i=r||{},r=void 0)),{names:r,options:i,callback:o}}function K(e){return 0===Object.keys(e).length}function U(e){return!!e&&e.some(function(e){return e.rules&&e.rules.length})}function q(e,t){return 0===e.lastIndexOf(t,0)}function G(e,t){return 0===t.indexOf(e)&&-1!==[".","["].indexOf(t[e.length])}function J(e){return I(e,function(e,t){return D(t)},"You must wrap field data with `createFormField`.")}var X=function(){function e(t){(0,T.A)(this,e),Z.call(this),this.fields=J(t),this.fieldsMeta={}}return(0,O.A)(e,[{key:"updateFields",value:function(e){this.fields=J(e)}},{key:"flattenRegisteredFields",value:function(e){var t=this.getAllFieldsName();return I(e,function(e){return t.indexOf(e)>=0},'You cannot set a form field before rendering a field associated with the value. You can use `getFieldDecorator(id, options)` instead `v-decorator="[id, options]"` to register it before render.')}},{key:"setFields",value:function(e){var t=this,n=this.fieldsMeta,r=(0,o.A)({},this.fields,e),i={};Object.keys(n).forEach(function(e){i[e]=t.getValueFromFields(e,r)}),Object.keys(i).forEach(function(e){var n=i[e],a=t.getFieldMeta(e);if(a&&a.normalize){var s=a.normalize(n,t.getValueFromFields(e,t.fields),i);s!==n&&(r[e]=(0,o.A)({},r[e],{value:s}))}}),this.fields=r}},{key:"resetFields",value:function(e){var t=this.fields,n=e?this.getValidFieldsFullName(e):this.getAllFieldsName();return n.reduce(function(e,n){var r=t[n];return r&&"value"in r&&(e[n]={}),e},{})}},{key:"setFieldMeta",value:function(e,t){this.fieldsMeta[e]=t}},{key:"setFieldsAsDirty",value:function(){var e=this;Object.keys(this.fields).forEach(function(t){var n=e.fields[t],r=e.fieldsMeta[t];n&&r&&U(r.validate)&&(e.fields[t]=(0,o.A)({},n,{dirty:!0}))})}},{key:"getFieldMeta",value:function(e){return this.fieldsMeta[e]=this.fieldsMeta[e]||{},this.fieldsMeta[e]}},{key:"getValueFromFields",value:function(e,t){var n=t[e];if(n&&"value"in n)return n.value;var r=this.getFieldMeta(e);return r&&r.initialValue}},{key:"getValidFieldsName",value:function(){var e=this,t=this.fieldsMeta;return t?Object.keys(t).filter(function(t){return!e.getFieldMeta(t).hidden}):[]}},{key:"getAllFieldsName",value:function(){var e=this.fieldsMeta;return e?Object.keys(e):[]}},{key:"getValidFieldsFullName",value:function(e){var t=Array.isArray(e)?e:[e];return this.getValidFieldsName().filter(function(e){return t.some(function(t){return e===t||q(e,t)&&[".","["].indexOf(e[t.length])>=0})})}},{key:"getFieldValuePropValue",value:function(e){var t=e.name,n=e.getValueProps,r=e.valuePropName,o=this.getField(t),a="value"in o?o.value:e.initialValue;return n?n(a):(0,i.A)({},r,a)}},{key:"getField",value:function(e){return(0,o.A)({},this.fields[e],{name:e})}},{key:"getNotCollectedFields",value:function(){var e=this,t=this.getValidFieldsName();return t.filter(function(t){return!e.fields[t]}).map(function(t){return{name:t,dirty:!1,value:e.getFieldMeta(t).initialValue}}).reduce(function(e,t){return k()(e,t.name,Y(t))},{})}},{key:"getNestedAllFields",value:function(){var e=this;return Object.keys(this.fields).reduce(function(t,n){return k()(t,n,Y(e.fields[n]))},this.getNotCollectedFields())}},{key:"getFieldMember",value:function(e,t){return this.getField(e)[t]}},{key:"getNestedFields",value:function(e,t){var n=e||this.getValidFieldsName();return n.reduce(function(e,n){return k()(e,n,t(n))},{})}},{key:"getNestedField",value:function(e,t){var n=this.getValidFieldsFullName(e);if(0===n.length||1===n.length&&n[0]===e)return t(e);var r="["===n[0][e.length],i=r?e.length:e.length+1;return n.reduce(function(e,n){return k()(e,n.slice(i),t(n))},r?[]:{})}},{key:"isValidNestedFieldName",value:function(e){var t=this.getAllFieldsName();return t.every(function(t){return!G(t,e)&&!G(e,t)})}},{key:"clearField",value:function(e){delete this.fields[e],delete this.fieldsMeta[e]}}]),e}(),Z=function(){var e=this;this.setFieldsInitialValue=function(t){var n=e.flattenRegisteredFields(t),r=e.fieldsMeta;Object.keys(n).forEach(function(t){r[t]&&e.setFieldMeta(t,(0,o.A)({},e.getFieldMeta(t),{initialValue:n[t]}))})},this.getAllValues=function(){var t=e.fieldsMeta,n=e.fields;return Object.keys(t).reduce(function(t,r){return k()(t,r,e.getValueFromFields(r,n))},{})},this.getFieldsValue=function(t){return e.getNestedFields(t,e.getFieldValue)},this.getFieldValue=function(t){var n=e.fields;return e.getNestedField(t,function(t){return e.getValueFromFields(t,n)})},this.getFieldsError=function(t){return e.getNestedFields(t,e.getFieldError)},this.getFieldError=function(t){return e.getNestedField(t,function(t){return W(e.getFieldMember(t,"errors"))})},this.isFieldValidating=function(t){return e.getFieldMember(t,"validating")},this.isFieldsValidating=function(t){var n=t||e.getValidFieldsName();return n.some(function(t){return e.isFieldValidating(t)})},this.isFieldTouched=function(t){return e.getFieldMember(t,"touched")},this.isFieldsTouched=function(t){var n=t||e.getValidFieldsName();return n.some(function(t){return e.isFieldTouched(t)})}};function Q(e){return new X(e)}var ee=n(51927),te=n(52315),ne=n(15848),re="change";function ie(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=e.validateMessages,r=e.onFieldsChange,s=e.onValuesChange,c=e.mapProps,l=void 0===c?E:c,u=e.mapPropsToFields,d=e.fieldNameProp,h=e.fieldMetaProp,f=e.fieldDataProp,p=e.formPropName,m=void 0===p?"form":p,b=e.name,M=e.props,A=void 0===M?{}:M,x=e.templateContext;return function(e){var c={};Array.isArray(A)?A.forEach(function(e){c[e]=a.A.any}):c=A;var p={mixins:[te.A].concat((0,y.A)(t)),props:(0,o.A)({},c,{wrappedComponentRef:a.A.func.def(function(){})}),data:function(){var e=this,t=u&&u(this.$props);return this.fieldsStore=Q(t||{}),this.templateContext=x,this.instances={},this.cachedBind={},this.clearedFieldMetaCache={},this.formItems={},this.renderFields={},this.domFields={},["getFieldsValue","getFieldValue","setFieldsInitialValue","getFieldsError","getFieldError","isFieldValidating","isFieldsValidating","isFieldsTouched","isFieldTouched"].forEach(function(t){e[t]=function(){var n;return(n=e.fieldsStore)[t].apply(n,arguments)}}),{submitting:!1}},watch:x?{}:{$props:{handler:function(e){u&&this.fieldsStore.updateFields(u(e))},deep:!0}},mounted:function(){this.cleanUpUselessFields()},updated:function(){this.cleanUpUselessFields()},methods:{updateFields:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.fieldsStore.updateFields(u(e)),x&&x.$forceUpdate()},onCollectCommon:function(e,t,n){var r=this.fieldsStore.getFieldMeta(e);if(r[t])r[t].apply(r,(0,y.A)(n));else if(r.originalProps&&r.originalProps[t]){var a;(a=r.originalProps)[t].apply(a,(0,y.A)(n))}var c=r.getValueFromEvent?r.getValueFromEvent.apply(r,(0,y.A)(n)):N.apply(void 0,(0,y.A)(n));if(s&&c!==this.fieldsStore.getFieldValue(e)){var l=this.fieldsStore.getAllValues(),u={};l[e]=c,Object.keys(l).forEach(function(e){return k()(u,e,l[e])}),s((0,o.A)((0,i.A)({},m,this.getForm()),this.$props),k()({},e,c),u)}var d=this.fieldsStore.getField(e);return{name:e,field:(0,o.A)({},d,{value:c,touched:!0}),fieldMeta:r}},onCollect:function(e,t){for(var n=arguments.length,r=Array(n>2?n-2:0),a=2;a2?n-2:0),i=2;i1&&void 0!==arguments[1]?arguments[1]:{};if(!e)throw new Error("Must call `getFieldProps` with valid name string!");delete this.clearedFieldMetaCache[e];var r=(0,o.A)({name:e,trigger:re,valuePropName:"value",validate:[]},n),i=r.rules,a=r.trigger,s=r.validateTrigger,c=void 0===s?a:s,l=r.validate,u=this.fieldsStore.getFieldMeta(e);"initialValue"in r&&(u.initialValue=r.initialValue);var p=(0,o.A)({},this.fieldsStore.getFieldValuePropValue(r)),m={},v={};d&&(p[d]=b?b+"_"+e:e);var g=$(l,i,c),y=R(g);y.forEach(function(n){m[n]||(m[n]=t.getCacheBind(e,n,t.onCollectValidate))}),a&&-1===y.indexOf(a)&&(m[a]=this.getCacheBind(e,a,this.onCollect));var _=(0,o.A)({},u,r,{validate:g});return this.fieldsStore.setFieldMeta(e,_),h&&(v[h]=_),f&&(v[f]=this.fieldsStore.getField(e)),this.renderFields[e]=!0,{props:z()(p,["id"]),domProps:{value:p.value},attrs:(0,o.A)({},v,{id:p.id}),directives:[{name:"ant-ref",value:this.getCacheBind(e,e+"__ref",this.saveRef)}],on:m}},getFieldInstance:function(e){return this.instances[e]},getRules:function(e,t){var n=e.validate.filter(function(e){return!t||e.trigger.indexOf(t)>=0}).map(function(e){return e.rules});return j(n)},setFields:function(e,t){var n=this,i=this.fieldsStore.flattenRegisteredFields(e);this.fieldsStore.setFields(i);var o=Object.keys(i).reduce(function(e,t){return k()(e,t,n.fieldsStore.getField(t))},{});if(r){var a=Object.keys(i).reduce(function(e,t){return k()(e,t,n.fieldsStore.getField(t))},{});r(this,a,this.fieldsStore.getNestedAllFields())}var s=x||this,c=!1;Object.keys(o).forEach(function(e){var t=n.formItems[e];t="function"===typeof t?t():t,t&&t.itemSelfUpdate?t.$forceUpdate():c=!0}),c&&s.$forceUpdate(),this.$nextTick(function(){t&&t()})},setFieldsValue:function(e,t){var n=this.fieldsStore.fieldsMeta,r=this.fieldsStore.flattenRegisteredFields(e),a=Object.keys(r).reduce(function(e,t){var i=n[t];if(i){var o=r[t];e[t]={value:o}}return e},{});if(this.setFields(a,t),s){var c=this.fieldsStore.getAllValues();s((0,o.A)((0,i.A)({},m,this.getForm()),this.$props),e,c)}},saveRef:function(e,t,n){if(!n){var r=this.fieldsStore.getFieldMeta(e);return r.preserve||(this.clearedFieldMetaCache[e]={field:this.fieldsStore.getField(e),meta:r},this.clearField(e)),void delete this.domFields[e]}this.domFields[e]=!0,this.recoverClearedField(e),this.instances[e]=n},cleanUpUselessFields:function(){var e=this,t=this.fieldsStore.getAllFieldsName(),n=t.filter(function(t){var n=e.fieldsStore.getFieldMeta(t);return!e.renderFields[t]&&!e.domFields[t]&&!n.preserve});n.length&&n.forEach(this.clearField),this.renderFields={}},clearField:function(e){this.fieldsStore.clearField(e),delete this.instances[e],delete this.cachedBind[e]},resetFields:function(e){var t=this,n=this.fieldsStore.resetFields(e);if(Object.keys(n).length>0&&this.setFields(n),e){var r=Array.isArray(e)?e:[e];r.forEach(function(e){return delete t.clearedFieldMetaCache[e]})}else this.clearedFieldMetaCache={}},recoverClearedField:function(e){this.clearedFieldMetaCache[e]&&(this.fieldsStore.setFields((0,i.A)({},e,this.clearedFieldMetaCache[e].field)),this.fieldsStore.setFieldMeta(e,this.clearedFieldMetaCache[e].meta),delete this.clearedFieldMetaCache[e])},validateFieldsInternal:function(e,t,r){var i=this,a=t.fieldNames,s=t.action,c=t.options,l=void 0===c?{}:c,u={},d={},h={},f={};if(e.forEach(function(e){var t=e.name;if(!0===l.force||!1!==e.dirty){var n=i.fieldsStore.getFieldMeta(t),r=(0,o.A)({},e);r.errors=void 0,r.validating=!0,r.dirty=!0,u[t]=i.getRules(n,s),d[t]=r.value,h[t]=r}else e.errors&&k()(f,t,{errors:e.errors})}),this.setFields(h),Object.keys(d).forEach(function(e){d[e]=i.fieldsStore.getFieldValue(e)}),r&&K(h))r(K(f)?null:f,this.fieldsStore.getFieldsValue(a));else{var p=new _.A(u);n&&p.messages(n),p.validate(d,l,function(e){var t=(0,o.A)({},f);e&&e.length&&e.forEach(function(e){var n=e.field,r=n;Object.keys(u).some(function(e){var t=u[e]||[];if(e===n)return r=e,!0;if(t.every(function(e){var t=e.type;return"array"!==t})&&0!==n.indexOf(e))return!1;var i=n.slice(e.length+1);return!!/^\d+$/.test(i)&&(r=e,!0)});var i=w()(t,r);("object"!==("undefined"===typeof i?"undefined":(0,v.A)(i))||Array.isArray(i))&&k()(t,r,{errors:[]});var o=w()(t,r.concat(".errors"));o.push(e)});var n=[],s={};Object.keys(u).forEach(function(e){var r=w()(t,e),o=i.fieldsStore.getField(e);C()(o.value,d[e])?(o.errors=r&&r.errors,o.value=d[e],o.validating=!1,o.dirty=!1,s[e]=o):n.push({name:e})}),i.setFields(s),r&&(n.length&&n.forEach(function(e){var n=e.name,r=[{message:n+" need to revalidate",field:n}];k()(t,n,{expired:!0,errors:r})}),r(K(t)?null:t,i.fieldsStore.getFieldsValue(a)))})}},validateFields:function(e,t,n){var r=this,i=new Promise(function(i,o){var a=B(e,t,n),s=a.names,c=a.options,l=B(e,t,n),u=l.callback;if(!u||"function"===typeof u){var d=u;u=function(e,t){d?d(e,t):e?o({errors:e,values:t}):i(t)}}var h=s?r.fieldsStore.getValidFieldsFullName(s):r.fieldsStore.getValidFieldsName(),f=h.filter(function(e){var t=r.fieldsStore.getFieldMeta(e);return U(t.validate)}).map(function(e){var t=r.fieldsStore.getField(e);return t.value=r.fieldsStore.getFieldValue(e),t});f.length?("firstFields"in c||(c.firstFields=h.filter(function(e){var t=r.fieldsStore.getFieldMeta(e);return!!t.validateFirst})),r.validateFieldsInternal(f,{fieldNames:h,options:c},u)):u(null,r.fieldsStore.getFieldsValue(h))});return i["catch"](function(e){return console.error,e}),i},isSubmitting:function(){return this.submitting},submit:function(e){var t=this;var n=function(){t.setState({submitting:!1})};this.setState({submitting:!0}),e(n)}},render:function(){var t=arguments[0],n=this.$slots,r=this.$scopedSlots,a=(0,i.A)({},m,this.getForm()),s=(0,ne.Oq)(this),c=s.wrappedComponentRef,u=(0,g.A)(s,["wrappedComponentRef"]),d={props:l.call(this,(0,o.A)({},a,u)),on:(0,ne.WM)(this),ref:"WrappedComponent",directives:[{name:"ant-ref",value:c}]};Object.keys(r).length&&(d.scopedSlots=r);var h=Object.keys(n);return e?t(e,d,[h.length?h.map(function(e){return t("template",{slot:e},[n[e]])}):null]):null}};if(!e)return p;if(Array.isArray(e.props)){var M={};e.props.forEach(function(e){M[e]=a.A.any}),M[m]=Object,e.props=M}else e.props=e.props||{},m in e.props||(e.props[m]=Object);return P(p,e)}}var oe=ie,ae={methods:{getForm:function(){return{getFieldsValue:this.fieldsStore.getFieldsValue,getFieldValue:this.fieldsStore.getFieldValue,getFieldInstance:this.getFieldInstance,setFieldsValue:this.setFieldsValue,setFields:this.setFields,setFieldsInitialValue:this.fieldsStore.setFieldsInitialValue,getFieldDecorator:this.getFieldDecorator,getFieldProps:this.getFieldProps,getFieldsError:this.fieldsStore.getFieldsError,getFieldError:this.fieldsStore.getFieldError,isFieldValidating:this.fieldsStore.isFieldValidating,isFieldsValidating:this.fieldsStore.isFieldsValidating,isFieldsTouched:this.fieldsStore.isFieldsTouched,isFieldTouched:this.fieldsStore.isFieldTouched,isSubmitting:this.isSubmitting,submit:this.submit,validateFields:this.validateFields,resetFields:this.resetFields}}}};function se(e,t){var n=window.getComputedStyle,r=n?n(e):e.currentStyle;if(r)return r[t.replace(/-(\w)/gi,function(e,t){return t.toUpperCase()})]}function ce(e){var t=e,n=void 0;while("body"!==(n=t.nodeName.toLowerCase())){var r=se(t,"overflowY");if(t!==e&&("auto"===r||"scroll"===r)&&t.scrollHeight>t.clientHeight)return t;t=t.parentNode}return"body"===n?t.ownerDocument:t}var le={methods:{getForm:function(){return(0,o.A)({},ae.methods.getForm.call(this),{validateFieldsAndScroll:this.validateFieldsAndScroll})},validateFieldsAndScroll:function(e,t,n){var r=this,i=B(e,t,n),a=i.names,s=i.callback,c=i.options,l=function(e,t){if(e){var n=r.fieldsStore.getValidFieldsName(),i=void 0,a=void 0;if(n.forEach(function(t){if(m()(e,t)){var n=r.getFieldInstance(t);if(n){var o=n.$el||n.elm,s=o.getBoundingClientRect().top;"hidden"!==o.type&&(void 0===a||a>s)&&(a=s,i=o)}}}),i){var l=c.container||ce(i);(0,f.A)(i,l,(0,o.A)({onlyScrollIfNeeded:!0},c.scroll))}}"function"===typeof s&&s(e,t)};return this.validateFields(a,c,l)}}};function ue(e){return oe((0,o.A)({},e),[le])}var de=ue,he=n(75837),fe=n(20355),pe=n(25592),me=n(44807),ve=(a.A.func,a.A.func,a.A.func,a.A.any,a.A.bool,a.A.string,a.A.func,a.A.func,a.A.func,a.A.func,a.A.func,a.A.func,a.A.func,a.A.func,a.A.func,a.A.func,a.A.func,a.A.func,a.A.func,{layout:a.A.oneOf(["horizontal","inline","vertical"]),labelCol:a.A.shape(l.fZ).loose,wrapperCol:a.A.shape(l.fZ).loose,colon:a.A.bool,labelAlign:a.A.oneOf(["left","right"]),form:a.A.object,prefixCls:a.A.string,hideRequiredMark:a.A.bool,autoFormCreate:a.A.func,options:a.A.object,selfUpdate:a.A.bool}),ge=(a.A.oneOfType([a.A.string,a.A.func]),a.A.string,a.A.boolean,a.A.boolean,a.A.number,a.A.number,a.A.number,a.A.oneOfType([String,a.A.arrayOf(String)]),a.A.custom(d()),a.A.func,a.A.func,{name:"AForm",props:(0,ne.CB)(ve,{layout:"horizontal",hideRequiredMark:!1,colon:!0}),Item:he.A,createFormField:Y,create:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return de((0,o.A)({fieldNameProp:"id"},e,{fieldMetaProp:fe.H,fieldDataProp:fe.W}))},createForm:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=me.A.Vue||r.Ay;return new n(ge.create((0,o.A)({},t,{templateContext:e}))())},created:function(){this.formItemContexts=new Map},provide:function(){var e=this;return{FormContext:this,collectFormItemContext:this.form&&this.form.templateContext?function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"add",r=e.formItemContexts,i=r.get(t)||0;"delete"===n?i<=1?r["delete"](t):r.set(t,i-1):t!==e.form.templateContext&&r.set(t,i+1)}:function(){}}},inject:{configProvider:{default:function(){return pe.f}}},watch:{form:function(){this.$forceUpdate()}},computed:{vertical:function(){return"vertical"===this.layout}},beforeUpdate:function(){this.formItemContexts.forEach(function(e,t){t.$forceUpdate&&t.$forceUpdate()})},updated:function(){this.form&&this.form.cleanUpUselessFields&&this.form.cleanUpUselessFields()},methods:{onSubmit:function(e){(0,ne.WM)(this).submit?this.$emit("submit",e):e.preventDefault()}},render:function(){var e,t=this,n=arguments[0],r=this.prefixCls,a=this.hideRequiredMark,s=this.layout,l=this.onSubmit,u=this.$slots,d=this.autoFormCreate,f=this.options,p=void 0===f?{}:f,m=this.configProvider.getPrefixCls,v=m("form",r),g=c()(v,(e={},(0,i.A)(e,v+"-horizontal","horizontal"===s),(0,i.A)(e,v+"-vertical","vertical"===s),(0,i.A)(e,v+"-inline","inline"===s),(0,i.A)(e,v+"-hide-required-mark",a),e));if(d){(0,h.A)(!1,"Form","`autoFormCreate` is deprecated. please use `form` instead.");var y=this.DomForm||de((0,o.A)({fieldNameProp:"id"},p,{fieldMetaProp:fe.H,fieldDataProp:fe.W,templateContext:this.$vnode.context}))({provide:function(){return{decoratorFormProps:this.$props}},data:function(){return{children:u["default"],formClassName:g,submit:l}},created:function(){d(this.form)},render:function(){var e=arguments[0],t=this.children,n=this.formClassName,r=this.submit;return e("form",{on:{submit:r},class:n},[t])}});return this.domForm&&(this.domForm.children=u["default"],this.domForm.submit=l,this.domForm.formClassName=g),this.DomForm=y,n(y,{attrs:{wrappedComponentRef:function(e){t.domForm=e}}})}return n("form",{on:{submit:l},class:g},[u["default"]])}}),ye=ge,_e=n(24415),be=n(35745);r.Ay.use(_e.A,{name:"ant-ref"}),r.Ay.use(be.A),r.Ay.prototype.$form=ye,ye.install=function(e){e.use(me.A),e.component(ye.name,ye),e.component(ye.Item.name,ye.Item),e.prototype.$form=ye};var Me=ye},16560:function(e,t,n){"use strict";n(29229),n(67434)},43594:function(e,t,n){"use strict";n.d(t,{fZ:function(){return h}});var r=n(44508),i=n(85505),o=n(97479),a=n(4718),s=n(25592),c=n(15848),l=a.A.oneOfType([a.A.string,a.A.number]),u=a.A.shape({span:l,order:l,offset:l,push:l,pull:l}).loose,d=a.A.oneOfType([a.A.string,a.A.number,u]),h={span:l,order:l,offset:l,push:l,pull:l,xs:d,sm:d,md:d,lg:d,xl:d,xxl:d,prefixCls:a.A.string,flex:l};t.Ay={name:"ACol",props:h,inject:{configProvider:{default:function(){return s.f}},rowContext:{default:function(){return null}}},methods:{parseFlex:function(e){return"number"===typeof e?e+" "+e+" auto":/^\d+(\.\d+)?(px|em|rem|%)$/.test(e)?"0 0 "+e:e}},render:function(){var e,t=this,n=arguments[0],a=this.span,s=this.order,l=this.offset,u=this.push,d=this.pull,h=this.flex,f=this.prefixCls,p=this.$slots,m=this.rowContext,v=this.configProvider.getPrefixCls,g=v("col",f),y={};["xs","sm","md","lg","xl","xxl"].forEach(function(e){var n,a={},s=t[e];"number"===typeof s?a.span=s:"object"===("undefined"===typeof s?"undefined":(0,o.A)(s))&&(a=s||{}),y=(0,i.A)({},y,(n={},(0,r.A)(n,g+"-"+e+"-"+a.span,void 0!==a.span),(0,r.A)(n,g+"-"+e+"-order-"+a.order,a.order||0===a.order),(0,r.A)(n,g+"-"+e+"-offset-"+a.offset,a.offset||0===a.offset),(0,r.A)(n,g+"-"+e+"-push-"+a.push,a.push||0===a.push),(0,r.A)(n,g+"-"+e+"-pull-"+a.pull,a.pull||0===a.pull),n))});var _=(0,i.A)((e={},(0,r.A)(e,""+g,!0),(0,r.A)(e,g+"-"+a,void 0!==a),(0,r.A)(e,g+"-order-"+s,s),(0,r.A)(e,g+"-offset-"+l,l),(0,r.A)(e,g+"-push-"+u,u),(0,r.A)(e,g+"-pull-"+d,d),e),y),b={on:(0,c.WM)(this),class:_,style:{}};if(m){var M=m.getGutter();M&&(b.style=(0,i.A)({},M[0]>0?{paddingLeft:M[0]/2+"px",paddingRight:M[0]/2+"px"}:{},M[1]>0?{paddingTop:M[1]/2+"px",paddingBottom:M[1]/2+"px"}:{}))}return h&&(b.style.flex=this.parseFlex(h)),n("div",b,[p["default"]])}}},9712:function(e,t,n){"use strict";var r=n(44508),i=n(97479),o=n(85505),a=n(4718),s=n(52315),c=n(25592),l=n(73363),u={gutter:a.A.oneOfType([a.A.object,a.A.number,a.A.array]),type:a.A.oneOf(["flex"]),align:a.A.oneOf(["top","middle","bottom","stretch"]),justify:a.A.oneOf(["start","end","center","space-around","space-between"]),prefixCls:a.A.string},d=["xxl","xl","lg","md","sm","xs"];t.A={name:"ARow",mixins:[s.A],props:(0,o.A)({},u,{gutter:a.A.oneOfType([a.A.object,a.A.number,a.A.array]).def(0)}),provide:function(){return{rowContext:this}},inject:{configProvider:{default:function(){return c.f}}},data:function(){return{screens:{}}},mounted:function(){var e=this;this.$nextTick(function(){e.token=l.Ay.subscribe(function(t){var n=e.gutter;("object"===("undefined"===typeof n?"undefined":(0,i.A)(n))||Array.isArray(n)&&("object"===(0,i.A)(n[0])||"object"===(0,i.A)(n[1])))&&(e.screens=t)})})},beforeDestroy:function(){l.Ay.unsubscribe(this.token)},methods:{getGutter:function(){var e=[0,0],t=this.gutter,n=this.screens,r=Array.isArray(t)?t:[t,0];return r.forEach(function(t,r){if("object"===("undefined"===typeof t?"undefined":(0,i.A)(t)))for(var o=0;o0?{marginLeft:d[0]/-2+"px",marginRight:d[0]/-2+"px"}:{},d[1]>0?{marginTop:d[1]/-2+"px",marginBottom:d[1]/-2+"px"}:{});return t("div",{class:h,style:f},[c["default"]])}}},67434:function(e,t,n){"use strict";n(29229)},40255:function(e,t,n){"use strict";n.d(t,{A:function(){return U}});var r=n(75189),i=n.n(r),o=n(85505),a=n(44508),s=n(32779),c=n(46942),l=n.n(c),u=n(6678),d=n(9506),h=n(97588),f=n(33446);function p(e){process||console.error("[@ant-design/icons-vue]: "+e+".")}function m(e){return"object"===typeof e&&"string"===typeof e.name&&"string"===typeof e.theme&&("object"===typeof e.icon||"function"===typeof e.icon)}function v(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object.keys(e).reduce(function(t,n){var r=e[n];switch(n){case"class":t.className=r,delete t["class"];break;default:t[n]=r}return t},{})}var g=function(){function e(){(0,d.A)(this,e),this.collection={}}return(0,h.A)(e,[{key:"clear",value:function(){this.collection={}}},{key:"delete",value:function(e){return delete this.collection[e]}},{key:"get",value:function(e){return this.collection[e]}},{key:"has",value:function(e){return Boolean(this.collection[e])}},{key:"set",value:function(e,t){return this.collection[e]=t,this}},{key:"size",get:function(){return Object.keys(this.collection).length}}]),e}();function y(e,t,n,r){return e(t.tag,r?(0,o.A)({key:n},r,{attrs:(0,o.A)({},v(t.attrs),r.attrs)}):{key:n,attrs:(0,o.A)({},v(t.attrs))},(t.children||[]).map(function(r,i){return y(e,r,n+"-"+t.tag+"-"+i)}))}function _(e){return(0,f.generate)(e)[0]}function b(e,t){switch(t){case"fill":return e+"-fill";case"outline":return e+"-o";case"twotone":return e+"-twotone";default:throw new TypeError("Unknown theme type: "+t+", name: "+e)}}var M={primaryColor:"#333",secondaryColor:"#E6E6E6"},A={name:"AntdIcon",props:["type","primaryColor","secondaryColor"],displayName:"IconVue",definitions:new g,data:function(){return{twoToneColorPalette:M}},add:function(){for(var e=arguments.length,t=Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:M;if(e){var n=A.definitions.get(e);return n&&"function"===typeof n.icon&&(n=(0,o.A)({},n,{icon:n.icon(t.primaryColor,t.secondaryColor)})),n}},setTwoToneColors:function(e){var t=e.primaryColor,n=e.secondaryColor;M.primaryColor=t,M.secondaryColor=n||_(t)},getTwoToneColors:function(){return(0,o.A)({},M)},render:function(e){var t=this.$props,n=t.type,r=t.primaryColor,i=t.secondaryColor,a=void 0,s=M;if(r&&(s={primaryColor:r,secondaryColor:i||_(r)}),m(n))a=n;else if("string"===typeof n&&(a=A.get(n,s),!a))return null;return a?(a&&"function"===typeof a.icon&&(a=(0,o.A)({},a,{icon:a.icon(s.primaryColor,s.secondaryColor)})),y(e,a.icon,"svg-"+a.name,{attrs:{"data-icon":a.name,width:"1em",height:"1em",fill:"currentColor","aria-hidden":"true"},on:this.$listeners})):(p("type should be string or icon definiton, but got "+n),null)},install:function(e){e.component(A.name,A)}},w=A,x=w,k=n(4718),L=n(5748),C=n(15848),S=new Set;function z(e){var t=e.scriptUrl,n=e.extraCommonProps,r=void 0===n?{}:n;if("undefined"!==typeof document&&"undefined"!==typeof window&&"function"===typeof document.createElement&&"string"===typeof t&&t.length&&!S.has(t)){var i=document.createElement("script");i.setAttribute("src",t),i.setAttribute("data-namespace",t),S.add(t),document.body.appendChild(i)}var o={functional:!0,name:"AIconfont",props:U.props,render:function(e,t){var n=t.props,i=t.slots,o=t.listeners,a=t.data,s=n.type,c=(0,L.A)(n,["type"]),l=i(),u=l["default"],d=null;s&&(d=e("use",{attrs:{"xlink:href":"#"+s}})),u&&(d=u);var h=(0,C.v6)(r,a,{props:c,on:o});return e(U,h,[d])}};return o}var T=n(36873),O={width:"1em",height:"1em",fill:"currentColor","aria-hidden":"true",focusable:"false"},H=/-fill$/,D=/-o$/,Y=/-twotone$/;function V(e){var t=null;return H.test(e)?t="filled":D.test(e)?t="outlined":Y.test(e)&&(t="twoTone"),t}function P(e){return e.replace(H,"").replace(D,"").replace(Y,"")}function E(e,t){var n=e;return"filled"===t?n+="-fill":"outlined"===t?n+="-o":"twoTone"===t?n+="-twotone":(0,T.A)(!1,"Icon","This icon '"+e+"' has unknown theme '"+t+"'"),n}function j(e){var t=e;switch(e){case"cross":t="close";break;case"interation":t="interaction";break;case"canlendar":t="calendar";break;case"colum-height":t="column-height";break;default:}return(0,T.A)(t===e,"Icon","Icon '"+e+"' was a typo and is now deprecated, please use '"+t+"' instead."),t}var F=n(38377);function I(e){return x.setTwoToneColors({primaryColor:e})}function $(){var e=x.getTwoToneColors();return e.primaryColor}var R=n(44807);x.add.apply(x,(0,s.A)(Object.keys(u).filter(function(e){return"default"!==e}).map(function(e){return u[e]}))),I("#1890ff");var N="outlined",W=void 0;function B(e,t,n){var r,s=n.$props,c=n.$slots,u=(0,C.WM)(n),d=s.type,h=s.component,f=s.viewBox,p=s.spin,m=s.theme,v=s.twoToneColor,g=s.rotate,y=s.tabIndex,_=(0,C.Gk)(c["default"]);_=0===_.length?void 0:_,(0,T.A)(Boolean(d||h||_),"Icon","Icon should have `type` prop or `component` prop or `children`.");var b=l()((r={},(0,a.A)(r,"anticon",!0),(0,a.A)(r,"anticon-"+d,!!d),r)),M=l()((0,a.A)({},"anticon-spin",!!p||"loading"===d)),A=g?{msTransform:"rotate("+g+"deg)",transform:"rotate("+g+"deg)"}:void 0,w={attrs:(0,o.A)({},O,{viewBox:f}),class:M,style:A};f||delete w.attrs.viewBox;var k=function(){if(h)return e(h,w,[_]);if(_){(0,T.A)(Boolean(f)||1===_.length&&"use"===_[0].tag,"Icon","Make sure that you provide correct `viewBox` prop (default `0 0 1024 1024`) to the icon.");var t={attrs:(0,o.A)({},O),class:M,style:A};return e("svg",i()([t,{attrs:{viewBox:f}}]),[_])}if("string"===typeof d){var n=d;if(m){var r=V(d);(0,T.A)(!r||m===r,"Icon","The icon name '"+d+"' already specify a theme '"+r+"', the 'theme' prop '"+m+"' will be ignored.")}return n=E(P(j(n)),W||m||N),e(x,{attrs:{focusable:"false",type:n,primaryColor:v},class:M,style:A})}},L=y;void 0===L&&"click"in u&&(L=-1);var S={attrs:{"aria-label":d&&t.icon+": "+d,tabIndex:L},on:u,class:b,staticClass:""};return e("i",S,[k()])}var K={name:"AIcon",props:{tabIndex:k.A.number,type:k.A.string,component:k.A.any,viewBox:k.A.any,spin:k.A.bool.def(!1),rotate:k.A.number,theme:k.A.oneOf(["filled","outlined","twoTone"]),twoToneColor:k.A.string,role:k.A.string},render:function(e){var t=this;return e(F.A,{attrs:{componentName:"Icon"},scopedSlots:{default:function(n){return B(e,n,t)}}})}};K.createFromIconfontCN=z,K.getTwoToneColor=$,K.setTwoToneColor=I,K.install=function(e){e.use(R.A),e.component(K.name,K)};var U=K},78269:function(e,t,n){"use strict";n(29229)},66066:function(e,t,n){"use strict";n.d(t,{A:function(){return V}});var r=n(44508),i=n(85505),o=n(5748),a=n(4718),s=n(15848),c=n(46942),l=n.n(c),u=n(40255),d=n(32779),h=n(52315),f=n(11207),p=n(51927),m=n(36873),v={disabled:a.A.bool,activeClassName:a.A.string,activeStyle:a.A.any},g={name:"TouchFeedback",mixins:[h.A],props:(0,s.CB)(v,{disabled:!1}),data:function(){return{active:!1}},mounted:function(){var e=this;this.$nextTick(function(){e.disabled&&e.active&&e.setState({active:!1})})},methods:{triggerEvent:function(e,t,n){this.$emit(e,n),t!==this.active&&this.setState({active:t})},onTouchStart:function(e){this.triggerEvent("touchstart",!0,e)},onTouchMove:function(e){this.triggerEvent("touchmove",!1,e)},onTouchEnd:function(e){this.triggerEvent("touchend",!1,e)},onTouchCancel:function(e){this.triggerEvent("touchcancel",!1,e)},onMouseDown:function(e){this.triggerEvent("mousedown",!0,e)},onMouseUp:function(e){this.triggerEvent("mouseup",!1,e)},onMouseLeave:function(e){this.triggerEvent("mouseleave",!1,e)}},render:function(){var e=this.$props,t=e.disabled,n=e.activeClassName,r=void 0===n?"":n,o=e.activeStyle,a=void 0===o?{}:o,s=this.$slots["default"];if(1!==s.length)return(0,m.A)(!1,"m-feedback组件只能包含一个子元素"),null;var c={on:t?{}:{touchstart:this.onTouchStart,touchmove:this.onTouchMove,touchend:this.onTouchEnd,touchcancel:this.onTouchCancel,mousedown:this.onMouseDown,mouseup:this.onMouseUp,mouseleave:this.onMouseLeave}};return!t&&this.active&&(c=(0,i.A)({},c,{style:a,class:r})),(0,p.Ob)(s,c)}},y=g,_={name:"InputHandler",props:{prefixCls:a.A.string,disabled:a.A.bool},render:function(){var e=arguments[0],t=this.$props,n=t.prefixCls,r=t.disabled,i={props:{disabled:r,activeClassName:n+"-handler-active"},on:(0,s.WM)(this)};return e(y,i,[e("span",[this.$slots["default"]])])}},b=_;function M(){}function A(e){e.preventDefault()}function w(e){return e.replace(/[^\w\.-]+/g,"")}var x=200,k=600,L=Number.MAX_SAFE_INTEGER||Math.pow(2,53)-1,C=function(e){return void 0!==e&&null!==e},S=function(e,t){return t===e||"number"===typeof t&&"number"===typeof e&&isNaN(t)&&isNaN(e)},z={value:a.A.oneOfType([a.A.number,a.A.string]),defaultValue:a.A.oneOfType([a.A.number,a.A.string]),focusOnUpDown:a.A.bool,autoFocus:a.A.bool,prefixCls:a.A.string,tabIndex:a.A.oneOfType([a.A.string,a.A.number]),placeholder:a.A.string,disabled:a.A.bool,readonly:a.A.bool,max:a.A.number,min:a.A.number,step:a.A.oneOfType([a.A.number,a.A.string]),upHandler:a.A.any,downHandler:a.A.any,useTouch:a.A.bool,formatter:a.A.func,parser:a.A.func,precision:a.A.number,required:a.A.bool,pattern:a.A.string,decimalSeparator:a.A.string,autoComplete:a.A.string,title:a.A.string,name:a.A.string,type:a.A.string,id:a.A.string},T={name:"VCInputNumber",mixins:[h.A],model:{prop:"value",event:"change"},props:(0,s.CB)(z,{focusOnUpDown:!0,useTouch:!1,prefixCls:"rc-input-number",min:-L,step:1,parser:w,required:!1,autoComplete:"off"}),data:function(){var e=(0,s.Oq)(this);this.prevProps=(0,i.A)({},e);var t=void 0;t="value"in e?this.value:this.defaultValue;var n=this.getValidValue(this.toNumber(t));return{inputValue:this.toPrecisionAsStep(n),sValue:n,focused:this.autoFocus}},mounted:function(){var e=this;this.$nextTick(function(){e.autoFocus&&!e.disabled&&e.focus(),e.updatedFunc()})},updated:function(){var e=this,t=this.$props,n=t.value,r=t.max,o=t.min,a=this.$data.focused,c=this.prevProps,l=(0,s.Oq)(this);if(c){if(!S(c.value,n)||!S(c.max,r)||!S(c.min,o)){var u=a?n:this.getValidValue(n),d=void 0;d=this.pressingUpOrDown?u:this.inputting?this.rawInput:this.toPrecisionAsStep(u),this.setState({sValue:u,inputValue:d})}var h="value"in l?n:this.sValue;"max"in l&&c.max!==r&&"number"===typeof h&&h>r&&this.$emit("change",r),"min"in l&&c.min!==o&&"number"===typeof h&&h1?r-1:0),o=1;o1?t-1:0),r=1;r1&&void 0!==arguments[1]?arguments[1]:this.min,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.max,r=parseFloat(e,10);return isNaN(r)?e:(rn&&(r=n),r)},setValue:function(e,t){var n=this.$props.precision,r=this.isNotCompleteNumber(parseFloat(e,10))?null:parseFloat(e,10),i=this.$data,o=i.sValue,a=void 0===o?null:o,c=i.inputValue,l=void 0===c?null:c,u="number"===typeof r?r.toFixed(n):""+r,d=r!==a||u!==""+l;return(0,s.cK)(this,"value")?this.setState({inputValue:this.toPrecisionAsStep(this.sValue)},t):this.setState({sValue:r,inputValue:this.toPrecisionAsStep(e)},t),d&&this.$emit("change",r),r},getPrecision:function(e){if(C(this.precision))return this.precision;var t=e.toString();if(t.indexOf("e-")>=0)return parseInt(t.slice(t.indexOf("e-")+2),10);var n=0;return t.indexOf(".")>=0&&(n=t.length-t.indexOf(".")-1),n},getMaxPrecision:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;if(C(this.precision))return this.precision;var n=this.step,r=this.getPrecision(t),i=this.getPrecision(n),o=this.getPrecision(e);return e?Math.max(o,r+i):r+i},getPrecisionFactor:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=this.getMaxPrecision(e,t);return Math.pow(10,n)},getInputDisplayValue:function(e){var t=e||this.$data,n=t.focused,r=t.inputValue,i=t.sValue,o=void 0;o=n?r:this.toPrecisionAsStep(i),void 0!==o&&null!==o||(o="");var a=this.formatWrapper(o);return C(this.$props.decimalSeparator)&&(a=a.toString().replace(".",this.$props.decimalSeparator)),a},recordCursorPosition:function(){try{var e=this.$refs.inputRef;this.cursorStart=e.selectionStart,this.cursorEnd=e.selectionEnd,this.currentValue=e.value,this.cursorBefore=e.value.substring(0,this.cursorStart),this.cursorAfter=e.value.substring(this.cursorEnd)}catch(t){}},fixCaret:function(e,t){if(void 0!==e&&void 0!==t&&this.$refs.inputRef&&this.$refs.inputRef.value)try{var n=this.$refs.inputRef,r=n.selectionStart,i=n.selectionEnd;e===r&&t===i||n.setSelectionRange(e,t)}catch(o){}},restoreByAfter:function(e){if(void 0===e)return!1;var t=this.$refs.inputRef.value,n=t.lastIndexOf(e);if(-1===n)return!1;var r=this.cursorBefore.length;return this.lastKeyCode===f.A.DELETE&&this.cursorBefore.charAt(r-1)===e[0]?(this.fixCaret(r,r),!0):n+e.length===t.length&&(this.fixCaret(n,n),!0)},partRestoreByAfter:function(e){var t=this;return void 0!==e&&Array.prototype.some.call(e,function(n,r){var i=e.substring(r);return t.restoreByAfter(i)})},focus:function(){this.$refs.inputRef.focus(),this.recordCursorPosition()},blur:function(){this.$refs.inputRef.blur()},formatWrapper:function(e){return this.formatter?this.formatter(e):e},toPrecisionAsStep:function(e){if(this.isNotCompleteNumber(e)||""===e)return e;var t=Math.abs(this.getMaxPrecision(e));return isNaN(t)?e.toString():Number(e).toFixed(t)},isNotCompleteNumber:function(e){return isNaN(e)||""===e||null===e||e&&e.toString().indexOf(".")===e.toString().length-1},toNumber:function(e){var t=this.$props,n=t.precision,r=t.autoFocus,i=this.focused,o=void 0===i?r:i,a=e&&e.length>16&&o;return this.isNotCompleteNumber(e)||a?e:C(n)?Math.round(e*Math.pow(10,n))/Math.pow(10,n):Number(e)},upStep:function(e,t){var n=this.step,r=this.getPrecisionFactor(e,t),i=Math.abs(this.getMaxPrecision(e,t)),o=((r*e+r*n*t)/r).toFixed(i);return this.toNumber(o)},downStep:function(e,t){var n=this.step,r=this.getPrecisionFactor(e,t),i=Math.abs(this.getMaxPrecision(e,t)),o=((r*e-r*n*t)/r).toFixed(i);return this.toNumber(o)},stepFn:function(e,t){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,i=arguments[3];if(this.stop(),t&&t.preventDefault(),!this.disabled){var o=this.max,a=this.min,s=this.getCurrentValidValue(this.inputValue)||0;if(!this.isNotCompleteNumber(s)){var c=this[e+"Step"](s,r),l=c>o||co?c=o:c=this.max&&(p=i+"-handler-up-disabled"),g<=this.min&&(m=i+"-handler-down-disabled")}var y=!this.readonly&&!this.disabled,_=this.getInputDisplayValue(),w=void 0,x=void 0;c?(w={touchstart:y&&!p?this.up:M,touchend:this.stop},x={touchstart:y&&!m?this.down:M,touchend:this.stop}):(w={mousedown:y&&!p?this.up:M,mouseup:this.stop,mouseleave:this.stop},x={mousedown:y&&!m?this.down:M,mouseup:this.stop,mouseleave:this.stop});var k=!!p||o||a,L=!!m||o||a,C=(0,s.WM)(this),S=C.mouseenter,z=void 0===S?M:S,T=C.mouseleave,O=void 0===T?M:T,H=C.mouseover,D=void 0===H?M:H,Y=C.mouseout,V=void 0===Y?M:Y,P={on:{mouseenter:z,mouseleave:O,mouseover:D,mouseout:V},class:f,attrs:{title:this.$props.title}},E={props:{disabled:k,prefixCls:i},attrs:{unselectable:"unselectable",role:"button","aria-label":"Increase Value","aria-disabled":!!k},class:i+"-handler "+i+"-handler-up "+p,on:w,ref:"up"},j={props:{disabled:L,prefixCls:i},attrs:{unselectable:"unselectable",role:"button","aria-label":"Decrease Value","aria-disabled":!!L},class:i+"-handler "+i+"-handler-down "+m,on:x,ref:"down"};return t("div",P,[t("div",{class:i+"-handler-wrap"},[t(b,E,[d||t("span",{attrs:{unselectable:"unselectable"},class:i+"-handler-up-inner",on:{click:A}})]),t(b,j,[h||t("span",{attrs:{unselectable:"unselectable"},class:i+"-handler-down-inner",on:{click:A}})])]),t("div",{class:i+"-input-wrap"},[t("input",{attrs:{role:"spinbutton","aria-valuemin":this.min,"aria-valuemax":this.max,"aria-valuenow":v,required:this.required,type:this.type,placeholder:this.placeholder,tabIndex:this.tabIndex,autoComplete:u,readonly:this.readonly,disabled:this.disabled,max:this.max,min:this.min,step:this.step,name:this.name,title:this.title,id:this.id,pattern:this.pattern},on:{click:this.handleInputClick,focus:this.onFocus,blur:this.onBlur,keydown:y?this.onKeyDown:M,keyup:y?this.onKeyUp:M,input:this.onTrigger,compositionstart:this.onCompositionstart,compositionend:this.onCompositionend},class:i+"-input",ref:"inputRef",domProps:{value:_}})])])}},O=n(25592),H=n(44807),D={prefixCls:a.A.string,min:a.A.number,max:a.A.number,value:a.A.oneOfType([a.A.number,a.A.string]),step:a.A.oneOfType([a.A.number,a.A.string]),defaultValue:a.A.oneOfType([a.A.number,a.A.string]),tabIndex:a.A.number,disabled:a.A.bool,size:a.A.oneOf(["large","small","default"]),formatter:a.A.func,parser:a.A.func,decimalSeparator:a.A.string,placeholder:a.A.string,name:a.A.string,id:a.A.string,precision:a.A.number,autoFocus:a.A.bool},Y={name:"AInputNumber",model:{prop:"value",event:"change"},props:(0,s.CB)(D,{step:1}),inject:{configProvider:{default:function(){return O.f}}},methods:{focus:function(){this.$refs.inputNumberRef.focus()},blur:function(){this.$refs.inputNumberRef.blur()}},render:function(){var e,t=arguments[0],n=(0,i.A)({},(0,s.Oq)(this),this.$attrs),a=n.prefixCls,c=n.size,d=(0,o.A)(n,["prefixCls","size"]),h=this.configProvider.getPrefixCls,f=h("input-number",a),p=l()((e={},(0,r.A)(e,f+"-lg","large"===c),(0,r.A)(e,f+"-sm","small"===c),e)),m=t(u.A,{attrs:{type:"up"},class:f+"-handler-up-inner"}),v=t(u.A,{attrs:{type:"down"},class:f+"-handler-down-inner"}),g={props:(0,i.A)({prefixCls:f,upHandler:m,downHandler:v},d),class:p,ref:"inputNumberRef",on:(0,s.WM)(this)};return t(T,g)},install:function(e){e.use(H.A),e.component(Y.name,Y)}},V=Y},83492:function(e,t,n){"use strict";n(29229)},57155:function(e,t,n){"use strict";n.d(t,{A:function(){return te}});var r=n(85471),i=n(75189),o=n.n(i),a=n(85505),s=n(44508),c=n(46942),l=n.n(c),u=n(40255),d=n(4718),h=n(51927),f=n(15848);function p(e){return!!((0,f.nu)(e,"prefix")||(0,f.nu)(e,"suffix")||e.$props.allowClear)}var m=["text","input"],v={props:{prefixCls:d.A.string,inputType:d.A.oneOf(m),value:d.A.any,defaultValue:d.A.any,allowClear:d.A.bool,element:d.A.any,handleReset:d.A.func,disabled:d.A.bool,size:d.A.oneOf(["small","large","default"]),suffix:d.A.any,prefix:d.A.any,addonBefore:d.A.any,addonAfter:d.A.any,className:d.A.string,readOnly:d.A.bool},methods:{renderClearIcon:function(e){var t=this.$createElement,n=this.$props,r=n.allowClear,i=n.value,o=n.disabled,a=n.readOnly,s=n.inputType,c=n.handleReset;if(!r||o||a||void 0===i||null===i||""===i)return null;var l=s===m[0]?e+"-textarea-clear-icon":e+"-clear-icon";return t(u.A,{attrs:{type:"close-circle",theme:"filled",role:"button"},on:{click:c},class:l})},renderSuffix:function(e){var t=this.$createElement,n=this.$props,r=n.suffix,i=n.allowClear;return r||i?t("span",{class:e+"-suffix"},[this.renderClearIcon(e),r]):null},renderLabeledIcon:function(e,t){var n,r=this.$createElement,i=this.$props,o=this.renderSuffix(e);if(!p(this))return(0,h.Ob)(t,{props:{value:i.value}});var a=i.prefix?r("span",{class:e+"-prefix"},[i.prefix]):null,c=l()(i.className,e+"-affix-wrapper",(n={},(0,s.A)(n,e+"-affix-wrapper-sm","small"===i.size),(0,s.A)(n,e+"-affix-wrapper-lg","large"===i.size),(0,s.A)(n,e+"-affix-wrapper-input-with-clear-btn",i.suffix&&i.allowClear&&this.$props.value),n));return r("span",{class:c,style:i.style},[a,(0,h.Ob)(t,{style:null,props:{value:i.value},class:W(e,i.size,i.disabled)}),o])},renderInputWithLabel:function(e,t){var n,r=this.$createElement,i=this.$props,o=i.addonBefore,a=i.addonAfter,c=i.style,u=i.size,d=i.className;if(!o&&!a)return t;var f=e+"-group",p=f+"-addon",m=o?r("span",{class:p},[o]):null,v=a?r("span",{class:p},[a]):null,g=l()(e+"-wrapper",(0,s.A)({},f,o||a)),y=l()(d,e+"-group-wrapper",(n={},(0,s.A)(n,e+"-group-wrapper-sm","small"===u),(0,s.A)(n,e+"-group-wrapper-lg","large"===u),n));return r("span",{class:y,style:c},[r("span",{class:g},[m,(0,h.Ob)(t,{style:null}),v])])},renderTextAreaWithClearIcon:function(e,t){var n=this.$createElement,r=this.$props,i=r.value,o=r.allowClear,a=r.className,s=r.style;if(!o)return(0,h.Ob)(t,{props:{value:i}});var c=l()(a,e+"-affix-wrapper",e+"-affix-wrapper-textarea-with-clear-btn");return n("span",{class:c,style:s},[(0,h.Ob)(t,{style:null,props:{value:i}}),this.renderClearIcon(e)])},renderClearableLabeledInput:function(){var e=this.$props,t=e.prefixCls,n=e.inputType,r=e.element;return n===m[0]?this.renderTextAreaWithClearIcon(t,r):this.renderInputWithLabel(t,this.renderLabeledIcon(t,r))}},render:function(){return this.renderClearableLabeledInput()}},g=v,y=n(43591),_={name:"ResizeObserver",props:{disabled:Boolean},data:function(){return this.currentElement=null,this.resizeObserver=null,{width:0,height:0}},mounted:function(){this.onComponentUpdated()},updated:function(){this.onComponentUpdated()},beforeDestroy:function(){this.destroyObserver()},methods:{onComponentUpdated:function(){var e=this.$props.disabled;if(e)this.destroyObserver();else{var t=this.$el,n=t!==this.currentElement;n&&(this.destroyObserver(),this.currentElement=t),!this.resizeObserver&&t&&(this.resizeObserver=new y.A(this.onResize),this.resizeObserver.observe(t))}},onResize:function(e){var t=e[0].target,n=t.getBoundingClientRect(),r=n.width,i=n.height,o=Math.floor(r),a=Math.floor(i);if(this.width!==o||this.height!==a){var s={width:o,height:a};this.width=o,this.height=a,this.$emit("resize",s)}},destroyObserver:function(){this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=null)}},render:function(){return this.$slots["default"][0]}},b=_,M=n(90034),A="\n min-height:0 !important;\n max-height:none !important;\n height:0 !important;\n visibility:hidden !important;\n overflow:hidden !important;\n position:absolute !important;\n z-index:-1000 !important;\n top:0 !important;\n right:0 !important\n",w=["letter-spacing","line-height","padding-top","padding-bottom","font-family","font-weight","font-size","font-variant","text-rendering","text-transform","width","text-indent","padding-left","padding-right","border-width","box-sizing"],x={},k=void 0;function L(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=e.getAttribute("id")||e.getAttribute("data-reactid")||e.getAttribute("name");if(t&&x[n])return x[n];var r=window.getComputedStyle(e),i=r.getPropertyValue("box-sizing")||r.getPropertyValue("-moz-box-sizing")||r.getPropertyValue("-webkit-box-sizing"),o=parseFloat(r.getPropertyValue("padding-bottom"))+parseFloat(r.getPropertyValue("padding-top")),a=parseFloat(r.getPropertyValue("border-bottom-width"))+parseFloat(r.getPropertyValue("border-top-width")),s=w.map(function(e){return e+":"+r.getPropertyValue(e)}).join(";"),c={sizingStyle:s,paddingSize:o,borderSize:a,boxSizing:i};return t&&n&&(x[n]=c),c}function C(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;k||(k=document.createElement("textarea"),document.body.appendChild(k)),e.getAttribute("wrap")?k.setAttribute("wrap",e.getAttribute("wrap")):k.removeAttribute("wrap");var i=L(e,t),o=i.paddingSize,a=i.borderSize,s=i.boxSizing,c=i.sizingStyle;k.setAttribute("style",c+";"+A),k.value=e.value||e.placeholder||"";var l=Number.MIN_SAFE_INTEGER,u=Number.MAX_SAFE_INTEGER,d=k.scrollHeight,h=void 0;if("border-box"===s?d+=a:"content-box"===s&&(d-=o),null!==n||null!==r){k.value=" ";var f=k.scrollHeight-o;null!==n&&(l=f*n,"border-box"===s&&(l=l+o+a),d=Math.max(l,d)),null!==r&&(u=f*r,"border-box"===s&&(u=u+o+a),h=d>u?"":"hidden",d=Math.min(u,d))}return{height:d+"px",minHeight:l+"px",maxHeight:u+"px",overflowY:h}}var S=n(70556),z=n(36873),T=n(52315),O={prefixCls:d.A.string,inputPrefixCls:d.A.string,defaultValue:d.A.oneOfType([d.A.string,d.A.number]),value:d.A.oneOfType([d.A.string,d.A.number]),placeholder:[String,Number],type:{default:"text",type:String},name:String,size:d.A.oneOf(["small","large","default"]),disabled:d.A.bool,readOnly:d.A.bool,addonBefore:d.A.any,addonAfter:d.A.any,prefix:d.A.any,suffix:d.A.any,autoFocus:Boolean,allowClear:Boolean,lazy:{default:!0,type:Boolean},maxLength:d.A.number,loading:d.A.bool,className:d.A.string},H=0,D=1,Y=2,V=(0,a.A)({},O,{autosize:d.A.oneOfType([Object,Boolean]),autoSize:d.A.oneOfType([Object,Boolean])}),P={name:"ResizableTextArea",props:V,data:function(){return{textareaStyles:{},resizeStatus:H}},mixins:[T.A],mounted:function(){var e=this;this.$nextTick(function(){e.resizeTextarea()})},beforeDestroy:function(){S.A.cancel(this.nextFrameActionId),S.A.cancel(this.resizeFrameId)},watch:{value:function(){var e=this;this.$nextTick(function(){e.resizeTextarea()})}},methods:{handleResize:function(e){var t=this.$data.resizeStatus,n=this.$props.autoSize;t===H&&(this.$emit("resize",e),n&&this.resizeOnNextFrame())},resizeOnNextFrame:function(){S.A.cancel(this.nextFrameActionId),this.nextFrameActionId=(0,S.A)(this.resizeTextarea)},resizeTextarea:function(){var e=this,t=this.$props.autoSize||this.$props.autosize;if(t&&this.$refs.textArea){var n=t.minRows,r=t.maxRows,i=C(this.$refs.textArea,!1,n,r);this.setState({textareaStyles:i,resizeStatus:D},function(){S.A.cancel(e.resizeFrameId),e.resizeFrameId=(0,S.A)(function(){e.setState({resizeStatus:Y},function(){e.resizeFrameId=(0,S.A)(function(){e.setState({resizeStatus:H}),e.fixFirefoxAutoScroll()})})})})}},fixFirefoxAutoScroll:function(){try{if(document.activeElement===this.$refs.textArea){var e=this.$refs.textArea.selectionStart,t=this.$refs.textArea.selectionEnd;this.$refs.textArea.setSelectionRange(e,t)}}catch(n){}},renderTextArea:function(){var e=this.$createElement,t=(0,f.Oq)(this),n=t.prefixCls,r=t.autoSize,i=t.autosize,c=t.disabled,u=this.$data,d=u.textareaStyles,h=u.resizeStatus;(0,z.A)(void 0===i,"Input.TextArea","autosize is deprecated, please use autoSize instead.");var p=(0,M.A)(t,["prefixCls","autoSize","autosize","defaultValue","allowClear","type","lazy","value"]),m=l()(n,(0,s.A)({},n+"-disabled",c)),v={};"value"in t&&(v.value=t.value||"");var g=(0,a.A)({},d,h===D?{overflowX:"hidden",overflowY:"hidden"}:null),y={attrs:p,domProps:v,style:g,class:m,on:(0,M.A)((0,f.WM)(this),"pressEnter"),directives:[{name:"ant-input"}]};return e(b,{on:{resize:this.handleResize},attrs:{disabled:!(r||i)}},[e("textarea",o()([y,{ref:"textArea"}]))])}},render:function(){return this.renderTextArea()}},E=P,j=n(25592),F=(0,a.A)({},O,{autosize:d.A.oneOfType([Object,Boolean]),autoSize:d.A.oneOfType([Object,Boolean])}),I={name:"ATextarea",inheritAttrs:!1,model:{prop:"value",event:"change.value"},props:(0,a.A)({},F),inject:{configProvider:{default:function(){return j.f}}},data:function(){var e="undefined"===typeof this.value?this.defaultValue:this.value;return{stateValue:"undefined"===typeof e?"":e}},computed:{},watch:{value:function(e){this.stateValue=e}},mounted:function(){var e=this;this.$nextTick(function(){e.autoFocus&&e.focus()})},methods:{setValue:function(e,t){(0,f.Ay)(this,"value")||(this.stateValue=e,this.$nextTick(function(){t&&t()}))},handleKeyDown:function(e){13===e.keyCode&&this.$emit("pressEnter",e),this.$emit("keydown",e)},onChange:function(e){this.$emit("change.value",e.target.value),this.$emit("change",e),this.$emit("input",e)},handleChange:function(e){var t=this,n=e.target,r=n.value,i=n.composing;(e.isComposing||i)&&this.lazy||this.stateValue===r||(this.setValue(e.target.value,function(){t.$refs.resizableTextArea.resizeTextarea()}),N(this.$refs.resizableTextArea.$refs.textArea,e,this.onChange))},focus:function(){this.$refs.resizableTextArea.$refs.textArea.focus()},blur:function(){this.$refs.resizableTextArea.$refs.textArea.blur()},handleReset:function(e){var t=this;this.setValue("",function(){t.$refs.resizableTextArea.renderTextArea(),t.focus()}),N(this.$refs.resizableTextArea.$refs.textArea,e,this.onChange)},renderTextArea:function(e){var t=this.$createElement,n=(0,f.Oq)(this),r={props:(0,a.A)({},n,{prefixCls:e}),on:(0,a.A)({},(0,f.WM)(this),{input:this.handleChange,keydown:this.handleKeyDown}),attrs:this.$attrs};return t(E,o()([r,{ref:"resizableTextArea"}]))}},render:function(){var e=arguments[0],t=this.stateValue,n=this.prefixCls,r=this.configProvider.getPrefixCls,i=r("input",n),o={props:(0,a.A)({},(0,f.Oq)(this),{prefixCls:i,inputType:"text",value:R(t),element:this.renderTextArea(i),handleReset:this.handleReset}),on:(0,f.WM)(this)};return e(g,o)}};function $(){}function R(e){return"undefined"===typeof e||null===e?"":e}function N(e,t,n){if(n){var r=t;if("click"===t.type){Object.defineProperty(r,"target",{writable:!0}),Object.defineProperty(r,"currentTarget",{writable:!0}),r.target=e,r.currentTarget=e;var i=e.value;return e.value="",n(r),void(e.value=i)}n(r)}}function W(e,t,n){var r;return l()(e,(r={},(0,s.A)(r,e+"-sm","small"===t),(0,s.A)(r,e+"-lg","large"===t),(0,s.A)(r,e+"-disabled",n),r))}var B={name:"AInput",inheritAttrs:!1,model:{prop:"value",event:"change.value"},props:(0,a.A)({},O),inject:{configProvider:{default:function(){return j.f}}},data:function(){var e=this.$props,t="undefined"===typeof e.value?e.defaultValue:e.value;return{stateValue:"undefined"===typeof t?"":t}},watch:{value:function(e){this.stateValue=e}},mounted:function(){var e=this;this.$nextTick(function(){e.autoFocus&&e.focus(),e.clearPasswordValueAttribute()})},beforeDestroy:function(){this.removePasswordTimeout&&clearTimeout(this.removePasswordTimeout)},methods:{onBlur:function(e){this.$forceUpdate();var t=(0,f.WM)(this),n=t.blur;n&&n(e)},focus:function(){this.$refs.input.focus()},blur:function(){this.$refs.input.blur()},select:function(){this.$refs.input.select()},setValue:function(e,t){this.stateValue!==e&&((0,f.cK)(this,"value")||(this.stateValue=e,this.$nextTick(function(){t&&t()})))},onChange:function(e){this.$emit("change.value",e.target.value),this.$emit("change",e),this.$emit("input",e)},handleReset:function(e){var t=this;this.setValue("",function(){t.focus()}),N(this.$refs.input,e,this.onChange)},renderInput:function(e){var t=this.$createElement,n=(0,M.A)(this.$props,["prefixCls","addonBefore","addonAfter","prefix","suffix","allowClear","value","defaultValue","lazy","size","inputType","className"]),r=this.stateValue,i=this.handleKeyDown,o=this.handleChange,s=this.size,c=this.disabled,l={directives:[{name:"ant-input"}],domProps:{value:R(r)},attrs:(0,a.A)({},n,this.$attrs),on:(0,a.A)({},(0,f.WM)(this),{keydown:i,input:o,change:$,blur:this.onBlur}),class:W(e,s,c),ref:"input",key:"ant-input"};return t("input",l)},clearPasswordValueAttribute:function(){var e=this;this.removePasswordTimeout=setTimeout(function(){e.$refs.input&&e.$refs.input.getAttribute&&"password"===e.$refs.input.getAttribute("type")&&e.$refs.input.hasAttribute("value")&&e.$refs.input.removeAttribute("value")})},handleChange:function(e){var t=e.target,n=t.value,r=t.composing;(e.isComposing||r)&&this.lazy||this.stateValue===n||(this.setValue(n,this.clearPasswordValueAttribute),N(this.$refs.input,e,this.onChange))},handleKeyDown:function(e){13===e.keyCode&&this.$emit("pressEnter",e),this.$emit("keydown",e)}},render:function(){var e=arguments[0];if("textarea"===this.$props.type){var t={props:this.$props,attrs:this.$attrs,on:(0,a.A)({},(0,f.WM)(this),{input:this.handleChange,keydown:this.handleKeyDown,change:$,blur:this.onBlur})};return e(I,o()([t,{ref:"input"}]))}var n=this.$props.prefixCls,r=this.$data.stateValue,i=this.configProvider.getPrefixCls,s=i("input",n),c=(0,f.nu)(this,"addonAfter"),l=(0,f.nu)(this,"addonBefore"),u=(0,f.nu)(this,"suffix"),d=(0,f.nu)(this,"prefix"),h={props:(0,a.A)({},(0,f.Oq)(this),{prefixCls:s,inputType:"input",value:R(r),element:this.renderInput(s),handleReset:this.handleReset,addonAfter:c,addonBefore:l,suffix:u,prefix:d}),on:(0,f.WM)(this)};return e(g,h)}},K={name:"AInputGroup",props:{prefixCls:d.A.string,size:{validator:function(e){return["small","large","default"].includes(e)}},compact:Boolean},inject:{configProvider:{default:function(){return j.f}}},computed:{classes:function(){var e,t=this.prefixCls,n=this.size,r=this.compact,i=void 0!==r&&r,o=this.configProvider.getPrefixCls,a=o("input-group",t);return e={},(0,s.A)(e,""+a,!0),(0,s.A)(e,a+"-lg","large"===n),(0,s.A)(e,a+"-sm","small"===n),(0,s.A)(e,a+"-compact",i),e}},methods:{},render:function(){var e=arguments[0];return e("span",o()([{class:this.classes},{on:(0,f.WM)(this)}]),[(0,f.Gk)(this.$slots["default"])])}},U=n(5748),q=n(5574),G=n(49084),J={name:"AInputSearch",inheritAttrs:!1,model:{prop:"value",event:"change.value"},props:(0,a.A)({},O,{enterButton:d.A.any}),inject:{configProvider:{default:function(){return j.f}}},methods:{onChange:function(e){e&&e.target&&"click"===e.type&&this.$emit("search",e.target.value,e),this.$emit("change",e)},onSearch:function(e){this.loading||this.disabled||(this.$emit("search",this.$refs.input.stateValue,e),(0,q.isMobile)({tablet:!0})||this.$refs.input.focus())},focus:function(){this.$refs.input.focus()},blur:function(){this.$refs.input.blur()},renderLoading:function(e){var t=this.$createElement,n=this.$props.size,r=(0,f.nu)(this,"enterButton");return r=r||""===r,r?t(G.A,{class:e+"-button",attrs:{type:"primary",size:n},key:"enterButton"},[t(u.A,{attrs:{type:"loading"}})]):t(u.A,{class:e+"-icon",attrs:{type:"loading"},key:"loadingIcon"})},renderSuffix:function(e){var t=this.$createElement,n=this.loading,r=(0,f.nu)(this,"suffix"),i=(0,f.nu)(this,"enterButton");if(i=i||""===i,n&&!i)return[r,this.renderLoading(e)];if(i)return r;var o=t(u.A,{class:e+"-icon",attrs:{type:"search"},key:"searchIcon",on:{click:this.onSearch}});return r?[r,o]:o},renderAddonAfter:function(e){var t=this.$createElement,n=this.size,r=this.disabled,i=this.loading,o=e+"-button",a=(0,f.nu)(this,"enterButton");a=a||""===a;var s=(0,f.nu)(this,"addonAfter");if(i&&a)return[this.renderLoading(e),s];if(!a)return s;var c=Array.isArray(a)?a[0]:a,l=void 0,d=c.componentOptions&&c.componentOptions.Ctor.extendOptions.__ANT_BUTTON;return l="button"===c.tag||d?(0,h.Ob)(c,{key:"enterButton",class:d?o:"",props:d?{size:n}:{},on:{click:this.onSearch}}):t(G.A,{class:o,attrs:{type:"primary",size:n,disabled:r},key:"enterButton",on:{click:this.onSearch}},[!0===a||""===a?t(u.A,{attrs:{type:"search"}}):a]),s?[l,s]:l}},render:function(){var e=arguments[0],t=(0,f.Oq)(this),n=t.prefixCls,r=t.inputPrefixCls,i=t.size,o=(t.loading,(0,U.A)(t,["prefixCls","inputPrefixCls","size","loading"])),c=this.configProvider.getPrefixCls,u=c("input-search",n),d=c("input",r),h=(0,f.nu)(this,"enterButton"),p=(0,f.nu)(this,"addonBefore");h=h||""===h;var m,v=void 0;h?v=l()(u,(m={},(0,s.A)(m,u+"-enter-button",!!h),(0,s.A)(m,u+"-"+i,!!i),m)):v=u;var g=(0,a.A)({},(0,f.WM)(this));delete g.search;var y={props:(0,a.A)({},o,{prefixCls:d,size:i,suffix:this.renderSuffix(u),prefix:(0,f.nu)(this,"prefix"),addonAfter:this.renderAddonAfter(u),addonBefore:p,className:v}),attrs:this.$attrs,ref:"input",on:(0,a.A)({pressEnter:this.onSearch},g,{change:this.onChange})};return e(B,y)}},X={click:"click",hover:"mouseover"},Z={name:"AInputPassword",mixins:[T.A],inheritAttrs:!1,model:{prop:"value",event:"change.value"},props:(0,a.A)({},O,{prefixCls:d.A.string,inputPrefixCls:d.A.string,action:d.A.string.def("click"),visibilityToggle:d.A.bool.def(!0)}),inject:{configProvider:{default:function(){return j.f}}},data:function(){return{visible:!1}},methods:{focus:function(){this.$refs.input.focus()},blur:function(){this.$refs.input.blur()},onVisibleChange:function(){this.disabled||this.setState({visible:!this.visible})},getIcon:function(e){var t,n=this.$createElement,r=this.$props.action,i=X[r]||"",o={props:{type:this.visible?"eye":"eye-invisible"},on:(t={},(0,s.A)(t,i,this.onVisibleChange),(0,s.A)(t,"mousedown",function(e){e.preventDefault()}),(0,s.A)(t,"mouseup",function(e){e.preventDefault()}),t),class:e+"-icon",key:"passwordIcon"};return n(u.A,o)}},render:function(){var e=arguments[0],t=(0,f.Oq)(this),n=t.prefixCls,r=t.inputPrefixCls,i=t.size,o=(t.suffix,t.visibilityToggle),c=(0,U.A)(t,["prefixCls","inputPrefixCls","size","suffix","visibilityToggle"]),u=this.configProvider.getPrefixCls,d=u("input",r),h=u("input-password",n),p=o&&this.getIcon(h),m=l()(h,(0,s.A)({},h+"-"+i,!!i)),v={props:(0,a.A)({},c,{prefixCls:d,size:i,suffix:p,prefix:(0,f.nu)(this,"prefix"),addonAfter:(0,f.nu)(this,"addonAfter"),addonBefore:(0,f.nu)(this,"addonBefore")}),attrs:(0,a.A)({},this.$attrs,{type:this.visible?"text":"password"}),class:m,ref:"input",on:(0,f.WM)(this)};return e(B,v)}},Q=n(81593),ee=n(44807);r.Ay.use(Q.Ay),B.Group=K,B.Search=J,B.TextArea=I,B.Password=Z,B.install=function(e){e.use(ee.A),e.component(B.name,B),e.component(B.Group.name,B.Group),e.component(B.Search.name,B.Search),e.component(B.TextArea.name,B.TextArea),e.component(B.Password.name,B.Password)};var te=B},71094:function(e,t,n){"use strict";n(29229),n(27902)},37896:function(e,t,n){"use strict";n.d(t,{A:function(){return z}});var r=n(44508),i=n(32779),o=n(85505),a=n(4718),s=n(46942),c=n.n(s),l=n(15848),u=n(25592),d={prefixCls:a.A.string,hasSider:a.A.boolean,tagName:a.A.string};function h(e){var t=e.suffixCls,n=e.tagName,r=e.name;return function(e){return{name:r,props:e.props,inject:{configProvider:{default:function(){return u.f}}},render:function(){var r=arguments[0],i=this.$props.prefixCls,a=this.configProvider.getPrefixCls,s=a(t,i),c={props:(0,o.A)({prefixCls:s},(0,l.Oq)(this),{tagName:n}),on:(0,l.WM)(this)};return r(e,c,[this.$slots["default"]])}}}}var f={props:d,render:function(){var e=arguments[0],t=this.prefixCls,n=this.tagName,r=this.$slots,i={class:t,on:(0,l.WM)(this)};return e(n,i,[r["default"]])}},p={props:d,data:function(){return{siders:[]}},provide:function(){var e=this;return{siderHook:{addSider:function(t){e.siders=[].concat((0,i.A)(e.siders),[t])},removeSider:function(t){e.siders=e.siders.filter(function(e){return e!==t})}}}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.$slots,i=this.hasSider,o=this.tagName,a=c()(t,(0,r.A)({},t+"-has-sider","boolean"===typeof i?i:this.siders.length>0)),s={class:a,on:l.WM};return e(o,s,[n["default"]])}},m=h({suffixCls:"layout",tagName:"section",name:"ALayout"})(p),v=h({suffixCls:"layout-header",tagName:"header",name:"ALayoutHeader"})(f),g=h({suffixCls:"layout-footer",tagName:"footer",name:"ALayoutFooter"})(f),y=h({suffixCls:"layout-content",tagName:"main",name:"ALayoutContent"})(f);m.Header=v,m.Footer=g,m.Content=y;var _=m,b=n(52315),M=n(2410),A=n(40255);if("undefined"!==typeof window){var w=function(e){return{media:e,matches:!1,addListener:function(){},removeListener:function(){}}};window.matchMedia=window.matchMedia||w}var x={xs:"479.98px",sm:"575.98px",md:"767.98px",lg:"991.98px",xl:"1199.98px",xxl:"1599.98px"},k={prefixCls:a.A.string,collapsible:a.A.bool,collapsed:a.A.bool,defaultCollapsed:a.A.bool,reverseArrow:a.A.bool,zeroWidthTriggerStyle:a.A.object,trigger:a.A.any,width:a.A.oneOfType([a.A.number,a.A.string]),collapsedWidth:a.A.oneOfType([a.A.number,a.A.string]),breakpoint:a.A.oneOf(["xs","sm","md","lg","xl","xxl"]),theme:a.A.oneOf(["light","dark"]).def("dark")},L=function(){var e=0;return function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return e+=1,""+t+e}}(),C={name:"ALayoutSider",__ANT_LAYOUT_SIDER:!0,mixins:[b.A],model:{prop:"collapsed",event:"collapse"},props:(0,l.CB)(k,{collapsible:!1,defaultCollapsed:!1,reverseArrow:!1,width:200,collapsedWidth:80}),data:function(){this.uniqueId=L("ant-sider-");var e=void 0;"undefined"!==typeof window&&(e=window.matchMedia);var t=(0,l.Oq)(this);e&&t.breakpoint&&t.breakpoint in x&&(this.mql=e("(max-width: "+x[t.breakpoint]+")"));var n=void 0;return n="collapsed"in t?t.collapsed:t.defaultCollapsed,{sCollapsed:n,below:!1,belowShow:!1}},provide:function(){return{layoutSiderContext:this}},inject:{siderHook:{default:function(){return{}}},configProvider:{default:function(){return u.f}}},watch:{collapsed:function(e){this.setState({sCollapsed:e})}},mounted:function(){var e=this;this.$nextTick(function(){e.mql&&(e.mql.addListener(e.responsiveHandler),e.responsiveHandler(e.mql)),e.siderHook.addSider&&e.siderHook.addSider(e.uniqueId)})},beforeDestroy:function(){this.mql&&this.mql.removeListener(this.responsiveHandler),this.siderHook.removeSider&&this.siderHook.removeSider(this.uniqueId)},methods:{responsiveHandler:function(e){this.setState({below:e.matches}),this.$emit("breakpoint",e.matches),this.sCollapsed!==e.matches&&this.setCollapsed(e.matches,"responsive")},setCollapsed:function(e,t){(0,l.cK)(this,"collapsed")||this.setState({sCollapsed:e}),this.$emit("collapse",e,t)},toggle:function(){var e=!this.sCollapsed;this.setCollapsed(e,"clickTrigger")},belowShowChange:function(){this.setState({belowShow:!this.belowShow})}},render:function(){var e,t=arguments[0],n=(0,l.Oq)(this),i=n.prefixCls,o=n.theme,a=n.collapsible,s=n.reverseArrow,u=n.width,d=n.collapsedWidth,h=n.zeroWidthTriggerStyle,f=this.configProvider.getPrefixCls,p=f("layout-sider",i),m=(0,l.nu)(this,"trigger"),v=this.sCollapsed?d:u,g=(0,M.A)(v)?v+"px":String(v),y=0===parseFloat(String(d||0))?t("span",{on:{click:this.toggle},class:p+"-zero-width-trigger "+p+"-zero-width-trigger-"+(s?"right":"left"),style:h},[t(A.A,{attrs:{type:"bars"}})]):null,_={expanded:t(A.A,s?{attrs:{type:"right"}}:{attrs:{type:"left"}}),collapsed:t(A.A,s?{attrs:{type:"left"}}:{attrs:{type:"right"}})},b=this.sCollapsed?"collapsed":"expanded",w=_[b],x=null!==m?y||t("div",{class:p+"-trigger",on:{click:this.toggle},style:{width:g}},[m||w]):null,k={flex:"0 0 "+g,maxWidth:g,minWidth:g,width:g},L=c()(p,p+"-"+o,(e={},(0,r.A)(e,p+"-collapsed",!!this.sCollapsed),(0,r.A)(e,p+"-has-trigger",a&&null!==m&&!y),(0,r.A)(e,p+"-below",!!this.below),(0,r.A)(e,p+"-zero-width",0===parseFloat(g)),e)),C={on:(0,l.WM)(this),class:L,style:k};return t("aside",C,[t("div",{class:p+"-children"},[this.$slots["default"]]),a||this.below&&y?x:null])}},S=n(44807);_.Sider=C,_.install=function(e){e.use(S.A),e.component(_.name,_),e.component(_.Header.name,_.Header),e.component(_.Footer.name,_.Footer),e.component(_.Sider.name,_.Sider),e.component(_.Content.name,_.Content)};var z=_},58568:function(e,t,n){"use strict";n(29229)},47132:function(e,t,n){"use strict";n.d(t,{Dd:function(){return S},Ay:function(){return H}});var r=n(75189),i=n.n(r),o=n(32779),a=n(5748),s=n(85505),c=n(44508),l=n(97479),u=n(4718),d=n(46942),h=n.n(d),f=n(90034),p=n(25592),m=n(82840),v=n(38223),g=n(64168),y=n(9712),_=n(15848),b=n(43594),M=n(51927),A={prefixCls:u.A.string,extra:u.A.any,actions:u.A.arrayOf(u.A.any),grid:S},w=(u.A.any,u.A.any,u.A.string,u.A.any,{functional:!0,name:"AListItemMeta",__ANT_LIST_ITEM_META:!0,inject:{configProvider:{default:function(){return p.f}}},render:function(e,t){var n=t.props,r=t.slots,o=t.listeners,a=t.injections,s=r(),c=a.configProvider.getPrefixCls,l=n.prefixCls,u=c("list",l),d=n.avatar||s.avatar,h=n.title||s.title,f=n.description||s.description,p=e("div",{class:u+"-item-meta-content"},[h&&e("h4",{class:u+"-item-meta-title"},[h]),f&&e("div",{class:u+"-item-meta-description"},[f])]);return e("div",i()([{on:o},{class:u+"-item-meta"}]),[d&&e("div",{class:u+"-item-meta-avatar"},[d]),(h||f)&&p])}});function x(e,t){return e[t]&&Math.floor(24/e[t])}var k={name:"AListItem",Meta:w,props:A,inject:{listContext:{default:function(){return{}}},configProvider:{default:function(){return p.f}}},methods:{isItemContainsTextNodeAndNotSingular:function(){var e=this.$slots,t=void 0,n=e["default"]||[];return n.forEach(function(e){(0,_.K6)(e)&&!(0,_.sG)(e)&&(t=!0)}),t&&n.length>1},isFlexMode:function(){var e=(0,_.nu)(this,"extra"),t=this.listContext.itemLayout;return"vertical"===t?!!e:!this.isItemContainsTextNodeAndNotSingular()}},render:function(){var e=arguments[0],t=this.listContext,n=t.grid,r=t.itemLayout,o=this.prefixCls,a=this.$slots,s=(0,_.WM)(this),l=this.configProvider.getPrefixCls,u=l("list",o),d=(0,_.nu)(this,"extra"),f=(0,_.nu)(this,"actions"),p=f&&f.length>0&&e("ul",{class:u+"-item-action",key:"actions"},[f.map(function(t,n){return e("li",{key:u+"-item-action-"+n},[t,n!==f.length-1&&e("em",{class:u+"-item-action-split"})])})]),m=n?"div":"li",v=e(m,i()([{on:s},{class:h()(u+"-item",(0,c.A)({},u+"-item-no-flex",!this.isFlexMode()))}]),["vertical"===r&&d?[e("div",{class:u+"-item-main",key:"content"},[a["default"],p]),e("div",{class:u+"-item-extra",key:"extra"},[d])]:[a["default"],p,(0,M.Ob)(d,{key:"extra"})]]),g=n?e(b.Ay,{attrs:{span:x(n,"column"),xs:x(n,"xs"),sm:x(n,"sm"),md:x(n,"md"),lg:x(n,"lg"),xl:x(n,"xl"),xxl:x(n,"xxl")}},[v]):v;return g}},L=n(44807),C=["",1,2,3,4,6,8,12,24],S={gutter:u.A.number,column:u.A.oneOf(C),xs:u.A.oneOf(C),sm:u.A.oneOf(C),md:u.A.oneOf(C),lg:u.A.oneOf(C),xl:u.A.oneOf(C),xxl:u.A.oneOf(C)},z=["small","default","large"],T=function(){return{bordered:u.A.bool,dataSource:u.A.array,extra:u.A.any,grid:u.A.shape(S).loose,itemLayout:u.A.string,loading:u.A.oneOfType([u.A.bool,u.A.object]),loadMore:u.A.any,pagination:u.A.oneOfType([u.A.shape((0,v.BH)()).loose,u.A.bool]),prefixCls:u.A.string,rowKey:u.A.any,renderItem:u.A.any,size:u.A.oneOf(z),split:u.A.bool,header:u.A.any,footer:u.A.any,locale:u.A.object}},O={Item:k,name:"AList",props:(0,_.CB)(T(),{dataSource:[],bordered:!1,split:!0,loading:!1,pagination:!1}),provide:function(){return{listContext:this}},inject:{configProvider:{default:function(){return p.f}}},data:function(){var e=this;this.keys=[],this.defaultPaginationProps={current:1,pageSize:10,onChange:function(t,n){var r=e.pagination;e.paginationCurrent=t,r&&r.onChange&&r.onChange(t,n)},total:0},this.onPaginationChange=this.triggerPaginationEvent("onChange"),this.onPaginationShowSizeChange=this.triggerPaginationEvent("onShowSizeChange");var t=this.$props.pagination,n=t&&"object"===("undefined"===typeof t?"undefined":(0,l.A)(t))?t:{};return{paginationCurrent:n.defaultCurrent||1,paginationSize:n.defaultPageSize||10}},methods:{triggerPaginationEvent:function(e){var t=this;return function(n,r){var i=t.$props.pagination;t.paginationCurrent=n,t.paginationSize=r,i&&i[e]&&i[e](n,r)}},renderItem2:function(e,t){var n=this.$scopedSlots,r=this.rowKey,i=this.renderItem||n.renderItem;if(!i)return null;var o=void 0;return o="function"===typeof r?r(e):"string"===typeof r?e[r]:e.key,o||(o="list-item-"+t),this.keys[t]=o,i(e,t)},isSomethingAfterLastItem:function(){var e=this.pagination,t=(0,_.nu)(this,"loadMore"),n=(0,_.nu)(this,"footer");return!!(t||e||n)},renderEmpty:function(e,t){var n=this.$createElement,r=this.locale;return n("div",{class:e+"-empty-text"},[r&&r.emptyText||t(n,"List")])}},render:function(){var e,t=this,n=arguments[0],r=this.prefixCls,l=this.bordered,u=this.split,d=this.itemLayout,p=this.pagination,v=this.grid,b=this.dataSource,A=void 0===b?[]:b,w=this.size,x=this.loading,k=this.$slots,L=this.paginationCurrent,C=this.paginationSize,S=this.configProvider.getPrefixCls,z=S("list",r),T=(0,_.nu)(this,"loadMore"),O=(0,_.nu)(this,"footer"),H=(0,_.nu)(this,"header"),D=(0,_.Gk)(k["default"]||[]),Y=x;"boolean"===typeof Y&&(Y={spinning:Y});var V=Y&&Y.spinning,P="";switch(w){case"large":P="lg";break;case"small":P="sm";break;default:break}var E=h()(z,(e={},(0,c.A)(e,z+"-vertical","vertical"===d),(0,c.A)(e,z+"-"+P,P),(0,c.A)(e,z+"-split",u),(0,c.A)(e,z+"-bordered",l),(0,c.A)(e,z+"-loading",V),(0,c.A)(e,z+"-grid",v),(0,c.A)(e,z+"-something-after-last-item",this.isSomethingAfterLastItem()),e)),j=(0,s.A)({},this.defaultPaginationProps,{total:A.length,current:L,pageSize:C},p||{}),F=Math.ceil(j.total/j.pageSize);j.current>F&&(j.current=F);var I=j["class"],$=j.style,R=(0,a.A)(j,["class","style"]),N=p?n("div",{class:z+"-pagination"},[n(g.Ay,{props:(0,f.A)(R,["onChange"]),class:I,style:$,on:{change:this.onPaginationChange,showSizeChange:this.onPaginationShowSizeChange}})]):null,W=[].concat((0,o.A)(A));p&&A.length>(j.current-1)*j.pageSize&&(W=[].concat((0,o.A)(A)).splice((j.current-1)*j.pageSize,j.pageSize));var B=void 0;if(B=V&&n("div",{style:{minHeight:53}}),W.length>0){var K=W.map(function(e,n){return t.renderItem2(e,n)}),U=K.map(function(e,n){return(0,M.Ob)(e,{key:t.keys[n]})});B=v?n(y.A,{attrs:{gutter:v.gutter}},[U]):n("ul",{class:z+"-items"},[U])}else if(!D.length&&!V){var q=this.configProvider.renderEmpty;B=this.renderEmpty(z,q)}var G=j.position||"bottom";return n("div",i()([{class:E},{on:(0,_.WM)(this)}]),[("top"===G||"both"===G)&&N,H&&n("div",{class:z+"-header"},[H]),n(m.A,{props:Y},[B,D]),O&&n("div",{class:z+"-footer"},[O]),T||("bottom"===G||"both"===G)&&N])},install:function(e){e.use(L.A),e.component(O.name,O),e.component(O.Item.name,O.Item),e.component(O.Item.Meta.name,O.Item.Meta)}},H=O},66882:function(e,t,n){"use strict";n(29229),n(93693),n(45562),n(25482),n(67434)},38377:function(e,t,n){"use strict";var r=n(85505),i=n(4718),o=n(77749);t.A={name:"LocaleReceiver",props:{componentName:i.A.string.def("global"),defaultLocale:i.A.oneOfType([i.A.object,i.A.func]),children:i.A.func},inject:{localeData:{default:function(){return{}}}},methods:{getLocale:function(){var e=this.componentName,t=this.defaultLocale,n=t||o.A[e||"global"],i=this.localeData.antLocale,a=e&&i?i[e]:{};return(0,r.A)({},"function"===typeof n?n():n,a||{})},getLocaleCode:function(){var e=this.localeData.antLocale,t=e&&e.locale;return e&&e.exist&&!t?o.A.locale:t}},render:function(){var e=this.$scopedSlots,t=this.children||e["default"],n=this.localeData.antLocale;return t(this.getLocale(),this.getLocaleCode(),n)}}},77749:function(e,t,n){"use strict";var r=n(81966);t.A=r.A},1512:function(e,t,n){"use strict";n.d(t,{A:function(){return o}});var r=n(81966),i=r.A,o=i},81966:function(e,t,n){"use strict";n.d(t,{A:function(){return s}});var r=n(15709),i=n(69656),o=n(68265),a=i.A,s={locale:"en",Pagination:r.A,DatePicker:i.A,TimePicker:o.A,Calendar:a,global:{placeholder:"Please select"},Table:{filterTitle:"Filter menu",filterConfirm:"OK",filterReset:"Reset",selectAll:"Select current page",selectInvert:"Invert current page",sortTitle:"Sort",expand:"Expand row",collapse:"Collapse row"},Modal:{okText:"OK",cancelText:"Cancel",justOkText:"OK"},Popconfirm:{okText:"OK",cancelText:"Cancel"},Transfer:{titles:["",""],searchPlaceholder:"Search here",itemUnit:"item",itemsUnit:"items"},Upload:{uploading:"Uploading...",removeFile:"Remove file",uploadError:"Upload error",previewFile:"Preview file",downloadFile:"Download file"},Empty:{description:"No Data"},Icon:{icon:"icon"},Text:{edit:"Edit",copy:"Copy",copied:"Copied",expand:"Expand"},PageHeader:{back:"Back"}}},36457:function(e,t,n){"use strict";n.d(t,{Ay:function(){return T}});var r=n(75189),i=n.n(r),o=n(44508),a=n(85505),s=n(90034),c={name:"MenuDivider",props:{disabled:{type:Boolean,default:!0},rootPrefixCls:String},render:function(){var e=arguments[0],t=this.$props.rootPrefixCls;return e("li",{class:t+"-item-divider"})}},l=n(13382),u=n(74072),d=n(70198),h=n(15848),f=n(46942),p=n.n(f),m={name:"ASubMenu",isSubMenu:!0,props:(0,a.A)({},d.A.props),inject:{menuPropsContext:{default:function(){return{}}}},methods:{onKeyDown:function(e){this.$refs.subMenu.onKeyDown(e)}},render:function(){var e=arguments[0],t=this.$slots,n=this.$scopedSlots,r=this.$props,i=r.rootPrefixCls,o=r.popupClassName,s=this.menuPropsContext.theme,c={props:(0,a.A)({},this.$props,{popupClassName:p()(i+"-"+s,o)}),ref:"subMenu",on:(0,h.WM)(this),scopedSlots:n},l=Object.keys(t);return e(d.A,c,[l.length?l.map(function(n){return e("template",{slot:n},[t[n]])}):null])}},v=n(4718),g=n(40703),y=n(36873),_=n(5285),b=n(90500);function M(){}var A={name:"MenuItem",inheritAttrs:!1,props:_.V,inject:{getInlineCollapsed:{default:function(){return M}},layoutSiderContext:{default:function(){return{}}}},isMenuItem:!0,methods:{onKeyDown:function(e){this.$refs.menuItem.onKeyDown(e)}},render:function(){var e=arguments[0],t=(0,h.Oq)(this),n=t.level,r=t.title,o=t.rootPrefixCls,s=this.getInlineCollapsed,c=this.$slots,l=this.$attrs,u=s(),d=r;"undefined"===typeof r?d=1===n?c["default"]:"":!1===r&&(d="");var f={title:d},p=this.layoutSiderContext.sCollapsed;p||u||(f.title=null,f.visible=!1);var m={props:(0,a.A)({},t,{title:r}),attrs:l,on:(0,h.WM)(this)},v={props:(0,a.A)({},f,{placement:"right",overlayClassName:o+"-inline-collapsed-tooltip"})};return e(b.A,v,[e(_.A,i()([m,{ref:"menuItem"}]),[c["default"]])])}},w=n(52315),x=n(55384),k=n(25592),L=n(44807),C=v.A.oneOf(["vertical","vertical-left","vertical-right","horizontal","inline"]),S=(0,a.A)({},x.A,{theme:v.A.oneOf(["light","dark"]).def("light"),mode:C.def("vertical"),selectable:v.A.bool,selectedKeys:v.A.arrayOf(v.A.oneOfType([v.A.string,v.A.number])),defaultSelectedKeys:v.A.array,openKeys:v.A.array,defaultOpenKeys:v.A.array,openAnimation:v.A.oneOfType([v.A.string,v.A.object]),openTransitionName:v.A.string,prefixCls:v.A.string,multiple:v.A.bool,inlineIndent:v.A.number.def(24),inlineCollapsed:v.A.bool,isRootMenu:v.A.bool.def(!0),focusable:v.A.bool.def(!1)}),z={name:"AMenu",props:S,Divider:(0,a.A)({},c,{name:"AMenuDivider"}),Item:(0,a.A)({},A,{name:"AMenuItem"}),SubMenu:(0,a.A)({},m,{name:"ASubMenu"}),ItemGroup:(0,a.A)({},l.A,{name:"AMenuItemGroup"}),provide:function(){return{getInlineCollapsed:this.getInlineCollapsed,menuPropsContext:this.$props}},mixins:[w.A],inject:{layoutSiderContext:{default:function(){return{}}},configProvider:{default:function(){return k.f}}},model:{prop:"selectedKeys",event:"selectChange"},updated:function(){this.propsUpdating=!1},watch:{mode:function(e,t){"inline"===t&&"inline"!==e&&(this.switchingModeFromInline=!0)},openKeys:function(e){this.setState({sOpenKeys:e})},inlineCollapsed:function(e){this.collapsedChange(e)},"layoutSiderContext.sCollapsed":function(e){this.collapsedChange(e)}},data:function(){var e=(0,h.Oq)(this);(0,y.A)(!("inlineCollapsed"in e&&"inline"!==e.mode),"Menu","`inlineCollapsed` should only be used when Menu's `mode` is inline."),this.switchingModeFromInline=!1,this.leaveAnimationExecutedWhenInlineCollapsed=!1,this.inlineOpenKeys=[];var t=void 0;return"openKeys"in e?t=e.openKeys:"defaultOpenKeys"in e&&(t=e.defaultOpenKeys),{sOpenKeys:t}},methods:{collapsedChange:function(e){this.propsUpdating||(this.propsUpdating=!0,(0,h.cK)(this,"openKeys")?e&&(this.switchingModeFromInline=!0):e?(this.switchingModeFromInline=!0,this.inlineOpenKeys=this.sOpenKeys,this.setState({sOpenKeys:[]})):(this.setState({sOpenKeys:this.inlineOpenKeys}),this.inlineOpenKeys=[]))},restoreModeVerticalFromInline:function(){this.switchingModeFromInline&&(this.switchingModeFromInline=!1,this.$forceUpdate())},handleMouseEnter:function(e){this.restoreModeVerticalFromInline(),this.$emit("mouseenter",e)},handleTransitionEnd:function(e){var t="width"===e.propertyName&&e.target===e.currentTarget,n=e.target.className,r="[object SVGAnimatedString]"===Object.prototype.toString.call(n)?n.animVal:n,i="font-size"===e.propertyName&&r.indexOf("anticon")>=0;(t||i)&&this.restoreModeVerticalFromInline()},handleClick:function(e){this.handleOpenChange([]),this.$emit("click",e)},handleSelect:function(e){this.$emit("select",e),this.$emit("selectChange",e.selectedKeys)},handleDeselect:function(e){this.$emit("deselect",e),this.$emit("selectChange",e.selectedKeys)},handleOpenChange:function(e){this.setOpenKeys(e),this.$emit("openChange",e),this.$emit("update:openKeys",e)},setOpenKeys:function(e){(0,h.cK)(this,"openKeys")||this.setState({sOpenKeys:e})},getRealMenuMode:function(){var e=this.getInlineCollapsed();if(this.switchingModeFromInline&&e)return"inline";var t=this.$props.mode;return e?"vertical":t},getInlineCollapsed:function(){var e=this.$props.inlineCollapsed;return void 0!==this.layoutSiderContext.sCollapsed?this.layoutSiderContext.sCollapsed:e},getMenuOpenAnimation:function(e){var t=this.$props,n=t.openAnimation,r=t.openTransitionName,i=n||r;return void 0===n&&void 0===r&&("horizontal"===e?i="slide-up":"inline"===e?i={on:g.A}:this.switchingModeFromInline?(i="",this.switchingModeFromInline=!1):i="zoom-big"),i}},render:function(){var e,t=this,n=arguments[0],r=this.layoutSiderContext,c=this.$slots,l=r.collapsedWidth,d=this.configProvider.getPopupContainer,f=(0,h.Oq)(this),p=f.prefixCls,m=f.theme,v=f.getPopupContainer,g=this.configProvider.getPrefixCls,y=g("menu",p),_=this.getRealMenuMode(),b=this.getMenuOpenAnimation(_),M=(e={},(0,o.A)(e,y+"-"+m,!0),(0,o.A)(e,y+"-inline-collapsed",this.getInlineCollapsed()),e),A={props:(0,a.A)({},(0,s.A)(f,["inlineCollapsed"]),{getPopupContainer:v||d,openKeys:this.sOpenKeys,mode:_,prefixCls:y}),on:(0,a.A)({},(0,h.WM)(this),{select:this.handleSelect,deselect:this.handleDeselect,openChange:this.handleOpenChange,mouseenter:this.handleMouseEnter}),nativeOn:{transitionend:this.handleTransitionEnd}};(0,h.cK)(this,"selectedKeys")||delete A.props.selectedKeys,"inline"!==_?(A.on.click=this.handleClick,A.props.openTransitionName=b):(A.on.click=function(e){t.$emit("click",e)},A.props.openAnimation=b);var w=this.getInlineCollapsed()&&(0===l||"0"===l||"0px"===l);return w&&(A.props.openKeys=[]),n(u.Ay,i()([A,{class:M}]),[c["default"]])},install:function(e){e.use(L.A),e.component(z.name,z),e.component(z.Item.name,z.Item),e.component(z.SubMenu.name,z.SubMenu),e.component(z.Divider.name,z.Divider),e.component(z.ItemGroup.name,z.ItemGroup)}},T=z},1747:function(e,t,n){"use strict";n(29229),n(42543)},18787:function(e,t,n){"use strict";var r=n(85505),i=n(94915),o=n(40255),a=3,s=void 0,c=void 0,l=1,u="ant-message",d="move-up",h=function(){return document.body},f=void 0;function p(e){c?e(c):i.A.newInstance({prefixCls:u,transitionName:d,style:{top:s},getContainer:h,maxCount:f},function(t){c?e(c):(c=t,e(t))})}function m(e){var t=void 0!==e.duration?e.duration:a,n={info:"info-circle",success:"check-circle",error:"close-circle",warning:"exclamation-circle",loading:"loading"}[e.type],r=e.key||l++,i=new Promise(function(i){var a=function(){return"function"===typeof e.onClose&&e.onClose(),i(!0)};p(function(i){i.notice({key:r,duration:t,style:{},content:function(t){var r=t(o.A,{attrs:{type:n,theme:"loading"===n?"outlined":"filled"}}),i=n?r:"";return t("div",{class:u+"-custom-content"+(e.type?" "+u+"-"+e.type:"")},[e.icon?"function"===typeof e.icon?e.icon(t):e.icon:i,t("span",["function"===typeof e.content?e.content(t):e.content])])},onClose:a})})}),s=function(){c&&c.removeNotice(r)};return s.then=function(e,t){return i.then(e,t)},s.promise=i,s}function v(e){return"[object Object]"===Object.prototype.toString.call(e)&&!!e.content}var g={open:m,config:function(e){void 0!==e.top&&(s=e.top,c=null),void 0!==e.duration&&(a=e.duration),void 0!==e.prefixCls&&(u=e.prefixCls),void 0!==e.getContainer&&(h=e.getContainer),void 0!==e.transitionName&&(d=e.transitionName,c=null),void 0!==e.maxCount&&(f=e.maxCount,c=null)},destroy:function(){c&&(c.destroy(),c=null)}};["success","info","warning","error","loading"].forEach(function(e){g[e]=function(t,n,i){return v(t)?g.open((0,r.A)({},t,{type:e})):("function"===typeof n&&(i=n,n=void 0),g.open({content:t,duration:n,type:e,onClose:i}))}}),g.warn=g.warning,t.A=g},6011:function(e,t,n){"use strict";n(29229)},43898:function(e,t,n){"use strict";n.d(t,{A:function(){return ve}});var r=n(85505),i=n(44508),o=n(46942),a=n.n(o),s=n(75189),c=n.n(s),l=n(15848),u=n(11207),d=n(17948),h=n(4718),f={visible:h.A.bool,hiddenClassName:h.A.string,forceRender:h.A.bool},p={props:f,render:function(){var e=arguments[0];return e("div",{on:(0,l.WM)(this)},[this.$slots["default"]])}},m=n(52315),v=n(80178),g=n(93986),y=function(e){var t=document.body.scrollHeight>(window.innerHeight||document.documentElement.clientHeight)&&window.innerWidth>document.body.offsetWidth;if(t){if(e)return document.body.style.position="",void(document.body.style.width="");var n=(0,g.A)();n&&(document.body.style.position="relative",document.body.style.width="calc(100% - "+n+"px)")}};function _(){return{keyboard:h.A.bool,mask:h.A.bool,afterClose:h.A.func,closable:h.A.bool,maskClosable:h.A.bool,visible:h.A.bool,destroyOnClose:h.A.bool,mousePosition:h.A.shape({x:h.A.number,y:h.A.number}).loose,title:h.A.any,footer:h.A.any,transitionName:h.A.string,maskTransitionName:h.A.string,animation:h.A.any,maskAnimation:h.A.any,wrapStyle:h.A.object,bodyStyle:h.A.object,maskStyle:h.A.object,prefixCls:h.A.string,wrapClassName:h.A.string,width:h.A.oneOfType([h.A.string,h.A.number]),height:h.A.oneOfType([h.A.string,h.A.number]),zIndex:h.A.number,bodyProps:h.A.any,maskProps:h.A.any,wrapProps:h.A.any,getContainer:h.A.any,dialogStyle:h.A.object.def(function(){return{}}),dialogClass:h.A.string.def(""),closeIcon:h.A.any,forceRender:h.A.bool,getOpenCount:h.A.func,focusTriggerAfterClose:h.A.bool}}var b=_,M=b(),A=0;function w(){}function x(e,t){var n=e["page"+(t?"Y":"X")+"Offset"],r="scroll"+(t?"Top":"Left");if("number"!==typeof n){var i=e.document;n=i.documentElement[r],"number"!==typeof n&&(n=i.body[r])}return n}function k(e,t){var n=e.style;["Webkit","Moz","Ms","ms"].forEach(function(e){n[e+"TransformOrigin"]=t}),n["transformOrigin"]=t}function L(e){var t=e.getBoundingClientRect(),n={left:t.left,top:t.top},r=e.ownerDocument,i=r.defaultView||r.parentWindow;return n.left+=x(i),n.top+=x(i,!0),n}var C={},S={mixins:[m.A],props:(0,l.CB)(M,{mask:!0,visible:!1,keyboard:!0,closable:!0,maskClosable:!0,destroyOnClose:!1,prefixCls:"rc-dialog",getOpenCount:function(){return null},focusTriggerAfterClose:!0}),data:function(){return{destroyPopup:!1}},provide:function(){return{dialogContext:this}},watch:{visible:function(e){var t=this;e&&(this.destroyPopup=!1),this.$nextTick(function(){t.updatedCallback(!e)})}},beforeMount:function(){this.inTransition=!1,this.titleId="rcDialogTitle"+A++},mounted:function(){var e=this;this.$nextTick(function(){e.updatedCallback(!1),(e.forceRender||!1===e.getContainer&&!e.visible)&&e.$refs.wrap&&(e.$refs.wrap.style.display="none")})},beforeDestroy:function(){var e=this.visible,t=this.getOpenCount;!e&&!this.inTransition||t()||this.switchScrollingEffect(),clearTimeout(this.timeoutId)},methods:{getDialogWrap:function(){return this.$refs.wrap},updatedCallback:function(e){var t=this.mousePosition,n=this.mask,r=this.focusTriggerAfterClose;if(this.visible){if(!e){this.openTime=Date.now(),this.switchScrollingEffect(),this.tryFocus();var i=this.$refs.dialog.$el;if(t){var o=L(i);k(i,t.x-o.left+"px "+(t.y-o.top)+"px")}else k(i,"")}}else if(e&&(this.inTransition=!0,n&&this.lastOutSideFocusNode&&r)){try{this.lastOutSideFocusNode.focus()}catch(a){this.lastOutSideFocusNode=null}this.lastOutSideFocusNode=null}},tryFocus:function(){(0,d.A)(this.$refs.wrap,document.activeElement)||(this.lastOutSideFocusNode=document.activeElement,this.$refs.sentinelStart.focus())},onAnimateLeave:function(){var e=this.afterClose,t=this.destroyOnClose;this.$refs.wrap&&(this.$refs.wrap.style.display="none"),t&&(this.destroyPopup=!0),this.inTransition=!1,this.switchScrollingEffect(),e&&e()},onDialogMouseDown:function(){this.dialogMouseDown=!0},onMaskMouseUp:function(){var e=this;this.dialogMouseDown&&(this.timeoutId=setTimeout(function(){e.dialogMouseDown=!1},0))},onMaskClick:function(e){Date.now()-this.openTime<300||e.target!==e.currentTarget||this.dialogMouseDown||this.close(e)},onKeydown:function(e){var t=this.$props;if(t.keyboard&&e.keyCode===u.A.ESC)return e.stopPropagation(),void this.close(e);if(t.visible&&e.keyCode===u.A.TAB){var n=document.activeElement,r=this.$refs.sentinelStart;e.shiftKey?n===r&&this.$refs.sentinelEnd.focus():n===this.$refs.sentinelEnd&&r.focus()}},getDialogElement:function(){var e=this.$createElement,t=this.closable,n=this.prefixCls,o=this.width,a=this.height,s=this.title,u=this.footer,d=this.bodyStyle,h=this.visible,f=this.bodyProps,m=this.forceRender,g=this.dialogStyle,y=this.dialogClass,_=(0,r.A)({},g);void 0!==o&&(_.width="number"===typeof o?o+"px":o),void 0!==a&&(_.height="number"===typeof a?a+"px":a);var b=void 0;u&&(b=e("div",{key:"footer",class:n+"-footer",ref:"footer"},[u]));var M=void 0;s&&(M=e("div",{key:"header",class:n+"-header",ref:"header"},[e("div",{class:n+"-title",attrs:{id:this.titleId}},[s])]));var A=void 0;if(t){var x=(0,l.nu)(this,"closeIcon");A=e("button",{attrs:{type:"button","aria-label":"Close"},key:"close",on:{click:this.close||w},class:n+"-close"},[x||e("span",{class:n+"-close-x"})])}var k=_,L={width:0,height:0,overflow:"hidden"},C=(0,i.A)({},n,!0),S=this.getTransitionName(),z=e(p,{directives:[{name:"show",value:h}],key:"dialog-element",attrs:{role:"document",forceRender:m},ref:"dialog",style:k,class:[C,y],on:{mousedown:this.onDialogMouseDown}},[e("div",{attrs:{tabIndex:0,"aria-hidden":"true"},ref:"sentinelStart",style:L}),e("div",{class:n+"-content"},[A,M,e("div",c()([{key:"body",class:n+"-body",style:d,ref:"body"},f]),[this.$slots["default"]]),b]),e("div",{attrs:{tabIndex:0,"aria-hidden":"true"},ref:"sentinelEnd",style:L})]),T=(0,v.A)(S,{afterLeave:this.onAnimateLeave});return e("transition",c()([{key:"dialog"},T]),[h||!this.destroyPopup?z:null])},getZIndexStyle:function(){var e={},t=this.$props;return void 0!==t.zIndex&&(e.zIndex=t.zIndex),e},getWrapStyle:function(){return(0,r.A)({},this.getZIndexStyle(),this.wrapStyle)},getMaskStyle:function(){return(0,r.A)({},this.getZIndexStyle(),this.maskStyle)},getMaskElement:function(){var e=this.$createElement,t=this.$props,n=void 0;if(t.mask){var r=this.getMaskTransitionName();if(n=e(p,c()([{directives:[{name:"show",value:t.visible}],style:this.getMaskStyle(),key:"mask",class:t.prefixCls+"-mask"},t.maskProps])),r){var i=(0,v.A)(r);n=e("transition",c()([{key:"mask"},i]),[n])}}return n},getMaskTransitionName:function(){var e=this.$props,t=e.maskTransitionName,n=e.maskAnimation;return!t&&n&&(t=e.prefixCls+"-"+n),t},getTransitionName:function(){var e=this.$props,t=e.transitionName,n=e.animation;return!t&&n&&(t=e.prefixCls+"-"+n),t},switchScrollingEffect:function(){var e=this.getOpenCount,t=e();if(1===t){if(C.hasOwnProperty("overflowX"))return;C={overflowX:document.body.style.overflowX,overflowY:document.body.style.overflowY,overflow:document.body.style.overflow},y(),document.body.style.overflow="hidden"}else t||(void 0!==C.overflow&&(document.body.style.overflow=C.overflow),void 0!==C.overflowX&&(document.body.style.overflowX=C.overflowX),void 0!==C.overflowY&&(document.body.style.overflowY=C.overflowY),C={},y(!0))},close:function(e){this.__emit("close",e)}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.maskClosable,r=this.visible,i=this.wrapClassName,o=this.title,a=this.wrapProps,s=this.getWrapStyle();return r&&(s.display=null),e("div",{class:t+"-root"},[this.getMaskElement(),e("div",c()([{attrs:{tabIndex:-1,role:"dialog","aria-labelledby":o?this.titleId:null},on:{keydown:this.onKeydown,click:n?this.onMaskClick:w,mouseup:n?this.onMaskMouseUp:w},class:t+"-wrap "+(i||""),ref:"wrap",style:s},a]),[this.getDialogElement()])])}},z=n(97479);function T(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.element,r=void 0===n?document.body:n,i={},o=Object.keys(e);return o.forEach(function(e){i[e]=r.style[e]}),o.forEach(function(t){r.style[t]=e[t]}),i}var O=T,H=n(48159),D=0,Y=!("undefined"!==typeof window&&window.document&&window.document.createElement),V={},P={name:"PortalWrapper",props:{wrapperClassName:h.A.string,forceRender:h.A.bool,getContainer:h.A.any,children:h.A.func,visible:h.A.bool},data:function(){var e=this.$props.visible;return D=e?D+1:D,{}},updated:function(){this.setWrapperClassName()},watch:{visible:function(e){D=e?D+1:D-1},getContainer:function(e,t){var n="function"===typeof e&&"function"===typeof t;(n?e.toString()!==t.toString():e!==t)&&this.removeCurrentContainer(!1)}},beforeDestroy:function(){var e=this.$props.visible;D=e&&D?D-1:D,this.removeCurrentContainer(e)},methods:{getParent:function(){var e=this.$props.getContainer;if(e){if("string"===typeof e)return document.querySelectorAll(e)[0];if("function"===typeof e)return e();if("object"===("undefined"===typeof e?"undefined":(0,z.A)(e))&&e instanceof window.HTMLElement)return e}return document.body},getDomContainer:function(){if(Y)return null;if(!this.container){this.container=document.createElement("div");var e=this.getParent();e&&e.appendChild(this.container)}return this.setWrapperClassName(),this.container},setWrapperClassName:function(){var e=this.$props.wrapperClassName;this.container&&e&&e!==this.container.className&&(this.container.className=e)},savePortal:function(e){this._component=e},removeCurrentContainer:function(){this.container=null,this._component=null},switchScrollingEffect:function(){1!==D||Object.keys(V).length?D||(O(V),V={},y(!0)):(y(),V=O({overflow:"hidden",overflowX:"hidden",overflowY:"hidden"}))}},render:function(){var e=arguments[0],t=this.$props,n=t.children,r=t.forceRender,i=t.visible,o=null,a={getOpenCount:function(){return D},getContainer:this.getDomContainer,switchScrollingEffect:this.switchScrollingEffect};return(r||i||this._component)&&(o=e(H.A,c()([{attrs:{getContainer:this.getDomContainer,children:n(a)}},{directives:[{name:"ant-ref",value:this.savePortal}]}]))),o}},E=b(),j={inheritAttrs:!1,props:(0,r.A)({},E,{visible:E.visible.def(!1)}),render:function(){var e=this,t=arguments[0],n=this.$props,i=n.visible,o=n.getContainer,a=n.forceRender,s={props:this.$props,attrs:this.$attrs,ref:"_component",key:"dialog",on:(0,l.WM)(this)};return!1===o?t(S,c()([s,{attrs:{getOpenCount:function(){return 2}}}]),[this.$slots["default"]]):t(P,{attrs:{visible:i,forceRender:a,getContainer:o,children:function(n){return s.props=(0,r.A)({},s.props,n),t(S,s,[e.$slots["default"]])}}})}},F=j,I=F,$=n(82160),R=n(96995),N=n(40255),W=n(49084),B=n(26997),K=n(38377),U=n(25592),q=(0,B.A)().type,G=null,J=function(e){G={x:e.pageX,y:e.pageY},setTimeout(function(){return G=null},100)};function X(){}"undefined"!==typeof window&&window.document&&window.document.documentElement&&(0,$.A)(document.documentElement,"click",J,!0);var Z=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t={prefixCls:h.A.string,visible:h.A.bool,confirmLoading:h.A.bool,title:h.A.any,closable:h.A.bool,closeIcon:h.A.any,afterClose:h.A.func.def(X),centered:h.A.bool,width:h.A.oneOfType([h.A.string,h.A.number]),footer:h.A.any,okText:h.A.any,okType:q,cancelText:h.A.any,icon:h.A.any,maskClosable:h.A.bool,forceRender:h.A.bool,okButtonProps:h.A.object,cancelButtonProps:h.A.object,destroyOnClose:h.A.bool,wrapClassName:h.A.string,maskTransitionName:h.A.string,transitionName:h.A.string,getContainer:h.A.func,zIndex:h.A.number,bodyStyle:h.A.object,maskStyle:h.A.object,mask:h.A.bool,keyboard:h.A.bool,wrapProps:h.A.object,focusTriggerAfterClose:h.A.bool,dialogStyle:h.A.object.def(function(){return{}})};return(0,l.CB)(t,e)},Q=[],ee={name:"AModal",inheritAttrs:!1,model:{prop:"visible",event:"change"},props:Z({width:520,transitionName:"zoom",maskTransitionName:"fade",confirmLoading:!1,visible:!1,okType:"primary"}),data:function(){return{sVisible:!!this.visible}},watch:{visible:function(e){this.sVisible=e}},inject:{configProvider:{default:function(){return U.f}}},methods:{handleCancel:function(e){this.$emit("cancel",e),this.$emit("change",!1)},handleOk:function(e){this.$emit("ok",e)},renderFooter:function(e){var t=this.$createElement,n=this.okType,r=this.confirmLoading,i=(0,l.v6)({on:{click:this.handleCancel}},this.cancelButtonProps||{}),o=(0,l.v6)({on:{click:this.handleOk},props:{type:n,loading:r}},this.okButtonProps||{});return t("div",[t(W.A,i,[(0,l.nu)(this,"cancelText")||e.cancelText]),t(W.A,o,[(0,l.nu)(this,"okText")||e.okText])])}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.sVisible,o=this.wrapClassName,s=this.centered,c=this.getContainer,u=this.$slots,d=this.$scopedSlots,h=this.$attrs,f=d["default"]?d["default"]():u["default"],p=this.configProvider,m=p.getPrefixCls,v=p.getPopupContainer,g=m("modal",t),y=e(K.A,{attrs:{componentName:"Modal",defaultLocale:(0,R.l)()},scopedSlots:{default:this.renderFooter}}),_=(0,l.nu)(this,"closeIcon"),b=e("span",{class:g+"-close-x"},[_||e(N.A,{class:g+"-close-icon",attrs:{type:"close"}})]),M=(0,l.nu)(this,"footer"),A=(0,l.nu)(this,"title"),w={props:(0,r.A)({},this.$props,{getContainer:void 0===c?v:c,prefixCls:g,wrapClassName:a()((0,i.A)({},g+"-centered",!!s),o),title:A,footer:void 0===M?y:M,visible:n,mousePosition:G,closeIcon:b}),on:(0,r.A)({},(0,l.WM)(this),{close:this.handleCancel}),class:(0,l.t0)(this),style:(0,l.gd)(this),attrs:h};return e(I,w,[f])}},te=n(85471),ne=(0,B.A)().type,re={type:ne,actionFn:h.A.func,closeModal:h.A.func,autoFocus:h.A.bool,buttonProps:h.A.object},ie={mixins:[m.A],props:re,data:function(){return{loading:!1}},mounted:function(){var e=this;this.autoFocus&&(this.timeoutId=setTimeout(function(){return e.$el.focus()}))},beforeDestroy:function(){clearTimeout(this.timeoutId)},methods:{onClick:function(){var e=this,t=this.actionFn,n=this.closeModal;if(t){var r=void 0;t.length?r=t(n):(r=t(),r||n()),r&&r.then&&(this.setState({loading:!0}),r.then(function(){n.apply(void 0,arguments)},function(t){console.error(t),e.setState({loading:!1})}))}else n()}},render:function(){var e=arguments[0],t=this.type,n=this.$slots,r=this.loading,i=this.buttonProps;return e(W.A,c()([{attrs:{type:t,loading:r},on:{click:this.onClick}},i]),[n["default"]])}},oe=n(36873),ae={functional:!0,render:function(e,t){var n=t.props,r=n.onCancel,o=n.onOk,s=n.close,c=n.zIndex,l=n.afterClose,u=n.visible,d=n.keyboard,h=n.centered,f=n.getContainer,p=n.maskStyle,m=n.okButtonProps,v=n.cancelButtonProps,g=n.iconType,y=void 0===g?"question-circle":g,_=n.closable,b=void 0!==_&&_;(0,oe.A)(!("iconType"in n),"Modal","The property 'iconType' is deprecated. Use the property 'icon' instead.");var M=n.icon?n.icon:y,A=n.okType||"primary",w=n.prefixCls||"ant-modal",x=w+"-confirm",k=!("okCancel"in n)||n.okCancel,L=n.width||416,C=n.style||{},S=void 0===n.mask||n.mask,z=void 0!==n.maskClosable&&n.maskClosable,T=(0,R.l)(),O=n.okText||(k?T.okText:T.justOkText),H=n.cancelText||T.cancelText,D=null!==n.autoFocusButton&&(n.autoFocusButton||"ok"),Y=n.transitionName||"zoom",V=n.maskTransitionName||"fade",P=a()(x,x+"-"+n.type,w+"-"+n.type,n["class"]),E=k&&e(ie,{attrs:{actionFn:r,closeModal:s,autoFocus:"cancel"===D,buttonProps:v}},[H]),j="string"===typeof M?e(N.A,{attrs:{type:M}}):M(e);return e(ee,{attrs:{prefixCls:w,wrapClassName:a()((0,i.A)({},x+"-centered",!!h)),visible:u,closable:b,title:"",transitionName:Y,footer:"",maskTransitionName:V,mask:S,maskClosable:z,maskStyle:p,width:L,zIndex:c,afterClose:l,keyboard:d,centered:h,getContainer:f},class:P,on:{cancel:function(e){return s({triggerCancel:!0},e)}},style:C},[e("div",{class:x+"-body-wrapper"},[e("div",{class:x+"-body"},[j,void 0===n.title?null:e("span",{class:x+"-title"},["function"===typeof n.title?n.title(e):n.title]),e("div",{class:x+"-content"},["function"===typeof n.content?n.content(e):n.content])]),e("div",{class:x+"-btns"},[E,e(ie,{attrs:{type:A,actionFn:o,closeModal:s,autoFocus:"ok"===D,buttonProps:m}},[O])])])])}},se=n(44807),ce=n(90034);function le(e){var t=document.createElement("div"),n=document.createElement("div");t.appendChild(n),document.body.appendChild(t);var i=(0,r.A)({},(0,ce.A)(e,["parentContext"]),{close:s,visible:!0}),o=null,a={props:{}};function s(){l.apply(void 0,arguments)}function c(e){i=(0,r.A)({},i,e),a.props=i}function l(){o&&t.parentNode&&(o.$destroy(),o=null,t.parentNode.removeChild(t));for(var n=arguments.length,r=Array(n),i=0;i1&&void 0!==arguments[1]?arguments[1]:c,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:l,r=void 0;switch(e){case"topLeft":r={left:0,top:t,bottom:"auto"};break;case"topRight":r={right:0,top:t,bottom:"auto"};break;case"bottomLeft":r={left:0,top:"auto",bottom:n};break;default:r={right:0,top:"auto",bottom:n};break}return r}function m(e,t){var n=e.prefixCls,r=e.placement,s=void 0===r?u:r,c=e.getContainer,l=void 0===c?d:c,f=e.top,m=e.bottom,v=e.closeIcon,g=void 0===v?h:v,y=n+"-"+s;a[y]?t(a[y]):i.A.newInstance({prefixCls:n,class:n+"-"+s,style:p(s,f,m),getContainer:l,closeIcon:function(e){var t="function"===typeof g?g(e):g,r=e("span",{class:n+"-close-x"},[t||e(o.A,{class:n+"-close-icon",attrs:{type:"close"}})]);return r}},function(e){a[y]=e,t(e)})}var v={success:"check-circle-o",info:"info-circle-o",error:"close-circle-o",warning:"exclamation-circle-o"};function g(e){var t=e.icon,n=e.type,r=e.description,i=e.message,a=e.btn,c=e.prefixCls||"ant-notification",l=c+"-notice",u=void 0===e.duration?s:e.duration,d=null;if(t)d=function(e){return e("span",{class:l+"-icon"},["function"===typeof t?t(e):t])};else if(n){var h=v[n];d=function(e){return e(o.A,{class:l+"-icon "+l+"-icon-"+n,attrs:{type:h}})}}var f=e.placement,p=e.top,g=e.bottom,y=e.getContainer,_=e.closeIcon;m({prefixCls:c,placement:f,top:p,bottom:g,getContainer:y,closeIcon:_},function(t){t.notice({content:function(e){return e("div",{class:d?l+"-with-icon":""},[d&&d(e),e("div",{class:l+"-message"},[!r&&d?e("span",{class:l+"-message-single-line-auto-margin"}):null,"function"===typeof i?i(e):i]),e("div",{class:l+"-description"},["function"===typeof r?r(e):r]),a?e("span",{class:l+"-btn"},["function"===typeof a?a(e):a]):null])},duration:u,closable:!0,onClose:e.onClose,onClick:e.onClick,key:e.key,style:e.style||{},class:e["class"]})})}var y={open:g,close:function(e){Object.keys(a).forEach(function(t){return a[t].removeNotice(e)})},config:f,destroy:function(){Object.keys(a).forEach(function(e){a[e].destroy(),delete a[e]})}};["success","info","warning","error"].forEach(function(e){y[e]=function(t){return y.open((0,r.A)({},t,{type:e}))}}),y.warn=y.warning,t.A=y},41603:function(e,t,n){"use strict";n(29229)},90895:function(e,t,n){"use strict";n.d(t,{J:function(){return f}});var r=n(44508),i=n(4718),o=n(15848),a=n(25592),s=n(40255),c=n(65847),l=n(64719),u=n(6596),d=n(38377),h=n(44807),f={backIcon:i.A.any,prefixCls:i.A.string,title:i.A.any,subTitle:i.A.any,breadcrumb:i.A.object,tags:i.A.any,footer:i.A.any,extra:i.A.any,avatar:i.A.object,ghost:i.A.bool},p=function(e,t,n,r){var i=e.$createElement;return n&&r?i(d.A,{attrs:{componentName:"PageHeader"}},[function(r){var o=r.back;return i("div",{class:t+"-back"},[i(u.A,{on:{click:function(t){e.$emit("back",t)}},class:t+"-back-button",attrs:{"aria-label":o}},[n])])}]):null},m=function(e,t){return e(c.A,t)},v=function(e,t,n){var r=n.avatar,i=(0,o.nu)(n,"title"),a=(0,o.nu)(n,"subTitle"),c=(0,o.nu)(n,"tags"),u=(0,o.nu)(n,"extra"),d=void 0!==(0,o.nu)(n,"backIcon")?(0,o.nu)(n,"backIcon"):e(s.A,{attrs:{type:"arrow-left"}}),h=n.$listeners.back,f=t+"-heading";if(i||a||c||u){var m=p(n,t,d,h);return e("div",{class:f},[m,r&&e(l.A,r),i&&e("span",{class:f+"-title"},[i]),a&&e("span",{class:f+"-sub-title"},[a]),c&&e("span",{class:f+"-tags"},[c]),u&&e("span",{class:f+"-extra"},[u])])}return null},g=function(e,t,n){return n?e("div",{class:t+"-footer"},[n]):null},y=function(e,t,n){return e("div",{class:t+"-content"},[n])},_={name:"APageHeader",props:f,inject:{configProvider:{default:function(){return a.f}}},render:function(e){var t=this.configProvider,n=t.getPrefixCls,i=t.pageHeader,a=(0,o.Oq)(this),s=a.prefixCls,c=a.breadcrumb,l=(0,o.nu)(this,"footer"),u=this.$slots["default"],d=!0;"ghost"in a?d=a.ghost:i&&"ghost"in i&&(d=i.ghost);var h=n("page-header",s),f=c&&c.props&&c.props.routes?m(e,c):null,p=[h,(0,r.A)({"has-breadcrumb":f,"has-footer":l},h+"-ghost",d)];return e("div",{class:p},[f,v(e,h,this),u&&y(e,h,u),g(e,h,l)])},install:function(e){e.use(h.A),e.component(_.name,_)}};t.A=_},70503:function(e,t,n){"use strict";n(70093),n(76181)},38223:function(e,t,n){"use strict";n.d(t,{BH:function(){return T},bv:function(){return z},Ay:function(){return O}});var r=n(5748),i=n(85505),o=n(4718),a=n(25824),s=n(15848),c={props:(0,i.A)({},a.PZ),Option:a.Ay.Option,render:function(){var e=arguments[0],t=(0,s.Oq)(this),n={props:(0,i.A)({},t,{size:"small"}),on:(0,s.WM)(this)};return e(a.Ay,n,[(0,s.Gk)(this.$slots["default"])])}},l=n(38377),u=n(44508),d=n(75189),h=n.n(d),f=n(32779),p=n(52315),m=n(46942),v=n.n(m),g={name:"Pager",props:{rootPrefixCls:o.A.string,page:o.A.number,active:o.A.bool,last:o.A.bool,locale:o.A.object,showTitle:o.A.bool,itemRender:{type:Function,default:function(){}}},methods:{handleClick:function(){this.$emit("click",this.page)},handleKeyPress:function(e){this.$emit("keypress",e,this.handleClick,this.page)}},render:function(){var e,t=arguments[0],n=this.$props,r=n.rootPrefixCls+"-item",i=v()(r,r+"-"+n.page,(e={},(0,u.A)(e,r+"-active",n.active),(0,u.A)(e,r+"-disabled",!n.page),e));return t("li",{class:i,on:{click:this.handleClick,keypress:this.handleKeyPress},attrs:{title:this.showTitle?this.page:null,tabIndex:"0"}},[this.itemRender(this.page,"page",t("a",[this.page]))])}},y={ZERO:48,NINE:57,NUMPAD_ZERO:96,NUMPAD_NINE:105,BACKSPACE:8,DELETE:46,ENTER:13,ARROW_UP:38,ARROW_DOWN:40},_={mixins:[p.A],props:{disabled:o.A.bool,changeSize:o.A.func,quickGo:o.A.func,selectComponentClass:o.A.any,current:o.A.number,pageSizeOptions:o.A.array.def(["10","20","30","40"]),pageSize:o.A.number,buildOptionText:o.A.func,locale:o.A.object,rootPrefixCls:o.A.string,selectPrefixCls:o.A.string,goButton:o.A.any},data:function(){return{goInputText:""}},methods:{getValidValue:function(){var e=this.goInputText,t=this.current;return!e||isNaN(e)?t:Number(e)},defaultBuildOptionText:function(e){return e.value+" "+this.locale.items_per_page},handleChange:function(e){var t=e.target,n=t.value,r=t.composing;e.isComposing||r||this.goInputText===n||this.setState({goInputText:n})},handleBlur:function(e){var t=this.$props,n=t.goButton,r=t.quickGo,i=t.rootPrefixCls;n||e.relatedTarget&&(e.relatedTarget.className.indexOf(i+"-prev")>=0||e.relatedTarget.className.indexOf(i+"-next")>=0)||r(this.getValidValue())},go:function(e){var t=this.goInputText;""!==t&&(e.keyCode!==y.ENTER&&"click"!==e.type||(this.quickGo(this.getValidValue()),this.setState({goInputText:""})))}},render:function(){var e=this,t=arguments[0],n=this.rootPrefixCls,r=this.locale,i=this.changeSize,o=this.quickGo,a=this.goButton,s=this.selectComponentClass,c=this.defaultBuildOptionText,l=this.selectPrefixCls,u=this.pageSize,d=this.pageSizeOptions,f=this.goInputText,p=this.disabled,m=n+"-options",v=null,g=null,y=null;if(!i&&!o)return null;if(i&&s){var _=this.buildOptionText||c,b=d.map(function(e,n){return t(s.Option,{key:n,attrs:{value:e}},[_({value:e})])});v=t(s,{attrs:{disabled:p,prefixCls:l,showSearch:!1,optionLabelProp:"children",dropdownMatchSelectWidth:!1,value:(u||d[0]).toString(),getPopupContainer:function(e){return e.parentNode}},class:m+"-size-changer",on:{change:function(t){return e.changeSize(Number(t))}}},[b])}return o&&(a&&(y="boolean"===typeof a?t("button",{attrs:{type:"button",disabled:p},on:{click:this.go,keyup:this.go}},[r.jump_to_confirm]):t("span",{on:{click:this.go,keyup:this.go}},[a])),g=t("div",{class:m+"-quick-jumper"},[r.jump_to,t("input",h()([{attrs:{disabled:p,type:"text"},domProps:{value:f},on:{input:this.handleChange,keyup:this.go,blur:this.handleBlur}},{directives:[{name:"ant-input"}]}])),r.page,y])),t("li",{class:""+m},[v,g])}},b=n(48931);function M(){}function A(e){return"number"===typeof e&&isFinite(e)&&Math.floor(e)===e}function w(e,t,n){return n}function x(e,t,n){var r=e;return"undefined"===typeof r&&(r=t.statePageSize),Math.floor((n.total-1)/r)+1}var k={name:"Pagination",mixins:[p.A],model:{prop:"current",event:"change.current"},props:{disabled:o.A.bool,prefixCls:o.A.string.def("rc-pagination"),selectPrefixCls:o.A.string.def("rc-select"),current:o.A.number,defaultCurrent:o.A.number.def(1),total:o.A.number.def(0),pageSize:o.A.number,defaultPageSize:o.A.number.def(10),hideOnSinglePage:o.A.bool.def(!1),showSizeChanger:o.A.bool.def(!1),showLessItems:o.A.bool.def(!1),selectComponentClass:o.A.any,showPrevNextJumpers:o.A.bool.def(!0),showQuickJumper:o.A.oneOfType([o.A.bool,o.A.object]).def(!1),showTitle:o.A.bool.def(!0),pageSizeOptions:o.A.arrayOf(o.A.string),buildOptionText:o.A.func,showTotal:o.A.func,simple:o.A.bool,locale:o.A.object.def(b.A),itemRender:o.A.func.def(w),prevIcon:o.A.any,nextIcon:o.A.any,jumpPrevIcon:o.A.any,jumpNextIcon:o.A.any},data:function(){var e=(0,s.Oq)(this),t=this.onChange!==M,n="current"in e;n&&!t&&console.warn("Warning: You provided a `current` prop to a Pagination component without an `onChange` handler. This will render a read-only component.");var r=this.defaultCurrent;"current"in e&&(r=this.current);var i=this.defaultPageSize;return"pageSize"in e&&(i=this.pageSize),r=Math.min(r,x(i,void 0,e)),{stateCurrent:r,stateCurrentInputValue:r,statePageSize:i}},watch:{current:function(e){this.setState({stateCurrent:e,stateCurrentInputValue:e})},pageSize:function(e){var t={},n=this.stateCurrent,r=x(e,this.$data,this.$props);n=n>r?r:n,(0,s.cK)(this,"current")||(t.stateCurrent=n,t.stateCurrentInputValue=n),t.statePageSize=e,this.setState(t)},stateCurrent:function(e,t){var n=this;this.$nextTick(function(){if(n.$refs.paginationNode){var e=n.$refs.paginationNode.querySelector("."+n.prefixCls+"-item-"+t);e&&document.activeElement===e&&e.blur()}})},total:function(){var e={},t=x(this.pageSize,this.$data,this.$props);if((0,s.cK)(this,"current")){var n=Math.min(this.current,t);e.stateCurrent=n,e.stateCurrentInputValue=n}else{var r=this.stateCurrent;r=0===r&&t>0?1:Math.min(this.stateCurrent,t),e.stateCurrent=r}this.setState(e)}},methods:{getJumpPrevPage:function(){return Math.max(1,this.stateCurrent-(this.showLessItems?3:5))},getJumpNextPage:function(){return Math.min(x(void 0,this.$data,this.$props),this.stateCurrent+(this.showLessItems?3:5))},getItemIcon:function(e){var t=this.$createElement,n=this.$props.prefixCls,r=(0,s.nu)(this,e,this.$props)||t("a",{class:n+"-item-link"});return r},getValidValue:function(e){var t=e.target.value,n=x(void 0,this.$data,this.$props),r=this.$data.stateCurrentInputValue,i=void 0;return i=""===t?t:isNaN(Number(t))?r:t>=n?n:Number(t),i},isValid:function(e){return A(e)&&e!==this.stateCurrent},shouldDisplayQuickJumper:function(){var e=this.$props,t=e.showQuickJumper,n=e.pageSize,r=e.total;return!(r<=n)&&t},handleKeyDown:function(e){e.keyCode!==y.ARROW_UP&&e.keyCode!==y.ARROW_DOWN||e.preventDefault()},handleKeyUp:function(e){if(!e.isComposing&&!e.target.composing){var t=this.getValidValue(e),n=this.stateCurrentInputValue;t!==n&&this.setState({stateCurrentInputValue:t}),e.keyCode===y.ENTER?this.handleChange(t):e.keyCode===y.ARROW_UP?this.handleChange(t-1):e.keyCode===y.ARROW_DOWN&&this.handleChange(t+1)}},changePageSize:function(e){var t=this.stateCurrent,n=t,r=x(e,this.$data,this.$props);t=t>r?r:t,0===r&&(t=this.stateCurrent),"number"===typeof e&&((0,s.cK)(this,"pageSize")||this.setState({statePageSize:e}),(0,s.cK)(this,"current")||this.setState({stateCurrent:t,stateCurrentInputValue:t})),this.$emit("update:pageSize",e),this.$emit("showSizeChange",t,e),t!==n&&this.$emit("change.current",t,e)},handleChange:function(e){var t=this.$props.disabled,n=e;if(this.isValid(n)&&!t){var r=x(void 0,this.$data,this.$props);return n>r?n=r:n<1&&(n=1),(0,s.cK)(this,"current")||this.setState({stateCurrent:n,stateCurrentInputValue:n}),this.$emit("change.current",n,this.statePageSize),this.$emit("change",n,this.statePageSize),n}return this.stateCurrent},prev:function(){this.hasPrev()&&this.handleChange(this.stateCurrent-1)},next:function(){this.hasNext()&&this.handleChange(this.stateCurrent+1)},jumpPrev:function(){this.handleChange(this.getJumpPrevPage())},jumpNext:function(){this.handleChange(this.getJumpNextPage())},hasPrev:function(){return this.stateCurrent>1},hasNext:function(){return this.stateCurrent2?n-2:0),i=2;i0?b-1:0,w=b+1=2*y&&3!==b&&(c[0]=t(g,{attrs:{locale:a,rootPrefixCls:r,page:Y,active:!1,showTitle:this.showTitle,itemRender:this.itemRender},on:{click:this.handleChange,keypress:this.runIfEnter},key:Y,class:r+"-item-after-jump-prev"}),c.unshift(l)),s-b>=2*y&&b!==s-2&&(c[c.length-1]=t(g,{attrs:{locale:a,rootPrefixCls:r,page:V,active:!1,showTitle:this.showTitle,itemRender:this.itemRender},on:{click:this.handleChange,keypress:this.runIfEnter},key:V,class:r+"-item-before-jump-next"}),c.push(d)),1!==Y&&c.unshift(f),V!==s&&c.push(p)}var j=null;this.showTotal&&(j=t("li",{class:r+"-total-text"},[this.showTotal(this.total,[0===this.total?0:(b-1)*M+1,b*M>this.total?this.total:b*M])]));var F=!this.hasPrev()||!s,I=!this.hasNext()||!s,$=this.buildOptionText||this.$scopedSlots.buildOptionText;return t("ul",{class:(e={},(0,u.A)(e,""+r,!0),(0,u.A)(e,r+"-disabled",i),e),attrs:{unselectable:"unselectable"},ref:"paginationNode"},[j,t("li",{attrs:{title:this.showTitle?a.prev_page:null,tabIndex:F?null:0,"aria-disabled":F},on:{click:this.prev,keypress:this.runIfEnterPrev},class:(F?r+"-disabled":"")+" "+r+"-prev"},[this.itemRender(A,"prev",this.getItemIcon("prevIcon"))]),c,t("li",{attrs:{title:this.showTitle?a.next_page:null,tabIndex:I?null:0,"aria-disabled":I},on:{click:this.next,keypress:this.runIfEnterNext},class:(I?r+"-disabled":"")+" "+r+"-next"},[this.itemRender(w,"next",this.getItemIcon("nextIcon"))]),t(_,{attrs:{disabled:i,locale:a,rootPrefixCls:r,selectComponentClass:this.selectComponentClass,selectPrefixCls:this.selectPrefixCls,changeSize:this.showSizeChanger?this.changePageSize:null,current:b,pageSize:M,pageSizeOptions:this.pageSizeOptions,buildOptionText:$||null,quickGo:this.shouldDisplayQuickJumper()?this.handleChange:null,goButton:v}})])}},L=n(15709),C=n(40255),S=n(25592),z=function(){return{total:o.A.number,defaultCurrent:o.A.number,disabled:o.A.bool,current:o.A.number,defaultPageSize:o.A.number,pageSize:o.A.number,hideOnSinglePage:o.A.bool,showSizeChanger:o.A.bool,pageSizeOptions:o.A.arrayOf(o.A.oneOfType([o.A.number,o.A.string])),buildOptionText:o.A.func,showSizeChange:o.A.func,showQuickJumper:o.A.oneOfType([o.A.bool,o.A.object]),showTotal:o.A.any,size:o.A.string,simple:o.A.bool,locale:o.A.object,prefixCls:o.A.string,selectPrefixCls:o.A.string,itemRender:o.A.any,role:o.A.string,showLessItems:o.A.bool}},T=function(){return(0,i.A)({},z(),{position:o.A.oneOf(["top","bottom","both"])})},O={name:"APagination",model:{prop:"current",event:"change.current"},props:(0,i.A)({},z()),inject:{configProvider:{default:function(){return S.f}}},methods:{getIconsProps:function(e){var t=this.$createElement,n=t("a",{class:e+"-item-link"},[t(C.A,{attrs:{type:"left"}})]),r=t("a",{class:e+"-item-link"},[t(C.A,{attrs:{type:"right"}})]),i=t("a",{class:e+"-item-link"},[t("div",{class:e+"-item-container"},[t(C.A,{class:e+"-item-link-icon",attrs:{type:"double-left"}}),t("span",{class:e+"-item-ellipsis"},["•••"])])]),o=t("a",{class:e+"-item-link"},[t("div",{class:e+"-item-container"},[t(C.A,{class:e+"-item-link-icon",attrs:{type:"double-right"}}),t("span",{class:e+"-item-ellipsis"},["•••"])])]);return{prevIcon:n,nextIcon:r,jumpPrevIcon:i,jumpNextIcon:o}},renderPagination:function(e){var t=this.$createElement,n=(0,s.Oq)(this),o=n.prefixCls,l=n.selectPrefixCls,u=n.buildOptionText,d=n.size,h=n.locale,f=(0,r.A)(n,["prefixCls","selectPrefixCls","buildOptionText","size","locale"]),p=this.configProvider.getPrefixCls,m=p("pagination",o),v=p("select",l),g="small"===d,y={props:(0,i.A)({prefixCls:m,selectPrefixCls:v},f,this.getIconsProps(m),{selectComponentClass:g?c:a.Ay,locale:(0,i.A)({},e,h),buildOptionText:u||this.$scopedSlots.buildOptionText}),class:{mini:g},on:(0,s.WM)(this)};return t(k,y)}},render:function(){var e=arguments[0];return e(l.A,{attrs:{componentName:"Pagination",defaultLocale:L.A},scopedSlots:{default:this.renderPagination}})}}},64168:function(e,t,n){"use strict";var r=n(38223),i=n(44807);r.Ay.install=function(e){e.use(i.A),e.component(r.Ay.name,r.Ay)},t.Ay=r.Ay},25482:function(e,t,n){"use strict";n(29229),n(22050)},50257:function(e,t,n){"use strict";var r=n(85505),i=n(90034),o=n(90500),a=n(36278),s=n(4718),c=n(15848),l=n(52315),u=n(26997),d=n(40255),h=n(49084),f=n(38377),p=n(77749),m=n(25592),v=n(44807),g=(0,a.A)(),y=(0,u.A)(),_={name:"APopconfirm",props:(0,r.A)({},g,{prefixCls:s.A.string,transitionName:s.A.string.def("zoom-big"),content:s.A.any,title:s.A.any,trigger:g.trigger.def("click"),okType:y.type.def("primary"),disabled:s.A.bool.def(!1),okText:s.A.any,cancelText:s.A.any,icon:s.A.any,okButtonProps:s.A.object,cancelButtonProps:s.A.object}),mixins:[l.A],model:{prop:"visible",event:"visibleChange"},watch:{visible:function(e){this.sVisible=e}},inject:{configProvider:{default:function(){return m.f}}},data:function(){var e=(0,c.Oq)(this),t={sVisible:!1};return"visible"in e&&(t.sVisible=e.visible),"defaultVisible"in e&&(t.sVisible=e.defaultVisible),t},methods:{onConfirm:function(e){this.setVisible(!1,e),this.$emit("confirm",e)},onCancel:function(e){this.setVisible(!1,e),this.$emit("cancel",e)},onVisibleChange:function(e){var t=this.$props.disabled;t||this.setVisible(e)},setVisible:function(e,t){(0,c.cK)(this,"visible")||this.setState({sVisible:e}),this.$emit("visibleChange",e,t)},getPopupDomNode:function(){return this.$refs.tooltip.getPopupDomNode()},renderOverlay:function(e,t){var n=this.$createElement,r=this.okType,i=this.okButtonProps,o=this.cancelButtonProps,a=(0,c.nu)(this,"icon")||n(d.A,{attrs:{type:"exclamation-circle",theme:"filled"}}),s=(0,c.v6)({props:{size:"small"},on:{click:this.onCancel}},o),l=(0,c.v6)({props:{type:r,size:"small"},on:{click:this.onConfirm}},i);return n("div",{class:e+"-inner-content"},[n("div",{class:e+"-message"},[a,n("div",{class:e+"-message-title"},[(0,c.nu)(this,"title")])]),n("div",{class:e+"-buttons"},[n(h.A,s,[(0,c.nu)(this,"cancelText")||t.cancelText]),n(h.A,l,[(0,c.nu)(this,"okText")||t.okText])])])}},render:function(){var e=this,t=arguments[0],n=(0,c.Oq)(this),a=n.prefixCls,s=this.configProvider.getPrefixCls,l=s("popover",a),u=(0,i.A)(n,["title","content","cancelText","okText"]),d={props:(0,r.A)({},u,{prefixCls:l,visible:this.sVisible}),ref:"tooltip",on:{visibleChange:this.onVisibleChange}},h=t(f.A,{attrs:{componentName:"Popconfirm",defaultLocale:p.A.Popconfirm},scopedSlots:{default:function(t){return e.renderOverlay(l,t)}}});return t(o.A,d,[t("template",{slot:"title"},[h]),this.$slots["default"]])},install:function(e){e.use(v.A),e.component(_.name,_)}};t.A=_},94891:function(e,t,n){"use strict";n(29229),n(14825),n(27902)},94261:function(e,t,n){"use strict";var r=n(85505),i=n(90500),o=n(36278),a=n(4718),s=n(15848),c=n(25592),l=n(44807),u=(0,o.A)(),d={name:"APopover",props:(0,r.A)({},u,{prefixCls:a.A.string,transitionName:a.A.string.def("zoom-big"),content:a.A.any,title:a.A.any}),model:{prop:"visible",event:"visibleChange"},inject:{configProvider:{default:function(){return c.f}}},methods:{getPopupDomNode:function(){return this.$refs.tooltip.getPopupDomNode()}},render:function(){var e=arguments[0],t=this.title,n=this.prefixCls,o=this.$slots,a=this.configProvider.getPrefixCls,c=a("popover",n),l=(0,s.Oq)(this);delete l.title,delete l.content;var u={props:(0,r.A)({},l,{prefixCls:c}),ref:"tooltip",on:(0,s.WM)(this)};return e(i.A,u,[e("template",{slot:"title"},[e("div",[(t||o.title)&&e("div",{class:c+"-title"},[(0,s.nu)(this,"title")]),e("div",{class:c+"-inner-content"},[(0,s.nu)(this,"content")])])]),this.$slots["default"]])},install:function(e){e.use(l.A),e.component(d.name,d)}};t.A=d},14825:function(e,t,n){"use strict";n(29229)},93167:function(e,t,n){"use strict";n.d(t,{A:function(){return K}});var r=n(44508),i=n(85505),o=n(46942),a=n.n(o),s=n(4718),c=n(15848),l=n(25592),u=n(40255),d=n(5748),h=n(52040);function f(e){return!e||e<0?0:e>100?100:e}var p=function(e){var t=[],n=!0,r=!1,i=void 0;try{for(var o,a=Object.entries(e)[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var s=o.value,c=(0,h.A)(s,2),l=c[0],u=c[1],d=parseFloat(l.replace(/%/g,""));if(isNaN(d))return{};t.push({key:d,value:u})}}catch(f){r=!0,i=f}finally{try{!n&&a["return"]&&a["return"]()}finally{if(r)throw i}}return t=t.sort(function(e,t){return e.key-t.key}),t.map(function(e){var t=e.key,n=e.value;return n+" "+t+"%"}).join(", ")},m=function(e){var t=e.from,n=void 0===t?"#1890ff":t,r=e.to,i=void 0===r?"#1890ff":r,o=e.direction,a=void 0===o?"to right":o,s=(0,d.A)(e,["from","to","direction"]);if(0!==Object.keys(s).length){var c=p(s);return{backgroundImage:"linear-gradient("+a+", "+c+")"}}return{backgroundImage:"linear-gradient("+a+", "+n+", "+i+")"}},v={functional:!0,render:function(e,t){var n=t.props,r=t.children,o=n.prefixCls,a=n.percent,s=n.successPercent,c=n.strokeWidth,l=n.size,u=n.strokeColor,d=n.strokeLinecap,h=void 0;h=u&&"string"!==typeof u?m(u):{background:u};var p=(0,i.A)({width:f(a)+"%",height:(c||("small"===l?6:8))+"px",background:u,borderRadius:"square"===d?0:"100px"},h),v={width:f(s)+"%",height:(c||("small"===l?6:8))+"px",borderRadius:"square"===d?0:""},g=void 0!==s?e("div",{class:o+"-success-bg",style:v}):null;return e("div",[e("div",{class:o+"-outer"},[e("div",{class:o+"-inner"},[e("div",{class:o+"-bg",style:p}),g])]),r])}},g=v,y=n(75189),_=n.n(y),b=n(85471),M=n(24415);function A(e){return{mixins:[e],updated:function(){var e=this,t=Date.now(),n=!1;Object.keys(this.paths).forEach(function(r){var i=e.paths[r];if(i){n=!0;var o=i.style;o.transitionDuration=".3s, .3s, .3s, .06s",e.prevTimeStamp&&t-e.prevTimeStamp<100&&(o.transitionDuration="0s, 0s")}}),n&&(this.prevTimeStamp=Date.now())}}}var w=A,x={percent:0,prefixCls:"rc-progress",strokeColor:"#2db7f5",strokeLinecap:"round",strokeWidth:1,trailColor:"#D9D9D9",trailWidth:1},k=s.A.oneOfType([s.A.number,s.A.string]),L={percent:s.A.oneOfType([k,s.A.arrayOf(k)]),prefixCls:s.A.string,strokeColor:s.A.oneOfType([s.A.string,s.A.arrayOf(s.A.oneOfType([s.A.string,s.A.object])),s.A.object]),strokeLinecap:s.A.oneOf(["butt","round","square"]),strokeWidth:k,trailColor:s.A.string,trailWidth:k},C=(0,i.A)({},L,{gapPosition:s.A.oneOf(["top","bottom","left","right"]),gapDegree:s.A.oneOfType([s.A.number,s.A.string,s.A.bool])}),S=(0,i.A)({},x,{gapPosition:"top"});b.Ay.use(M.A,{name:"ant-ref"});var z=0;function T(e){return+e.replace("%","")}function O(e){return Array.isArray(e)?e:[e]}function H(e,t,n,r){var i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,o=arguments[5],a=50-r/2,s=0,c=-a,l=0,u=-2*a;switch(o){case"left":s=-a,c=0,l=2*a,u=0;break;case"right":s=a,c=0,l=-2*a,u=0;break;case"bottom":c=a,u=2*a;break;default:}var d="M 50,50 m "+s+","+c+"\n a "+a+","+a+" 0 1 1 "+l+","+-u+"\n a "+a+","+a+" 0 1 1 "+-l+","+u,h=2*Math.PI*a,f={stroke:n,strokeDasharray:t/100*(h-i)+"px "+h+"px",strokeDashoffset:"-"+(i/2+e/100*(h-i))+"px",transition:"stroke-dashoffset .3s ease 0s, stroke-dasharray .3s ease 0s, stroke .3s, stroke-width .06s ease .3s, opacity .3s ease 0s"};return{pathString:d,pathStyle:f}}var D={props:(0,c.CB)(C,S),created:function(){this.paths={},this.gradientId=z,z+=1},methods:{getStokeList:function(){var e=this,t=this.$createElement,n=this.$props,r=n.prefixCls,i=n.percent,o=n.strokeColor,a=n.strokeWidth,s=n.strokeLinecap,c=n.gapDegree,l=n.gapPosition,u=O(i),d=O(o),h=0;return u.map(function(n,i){var o=d[i]||d[d.length-1],u="[object Object]"===Object.prototype.toString.call(o)?"url(#"+r+"-gradient-"+e.gradientId+")":"",f=H(h,n,o,a,c,l),p=f.pathString,m=f.pathStyle;h+=n;var v={key:i,attrs:{d:p,stroke:u,"stroke-linecap":s,"stroke-width":a,opacity:0===n?0:1,"fill-opacity":"0"},class:r+"-circle-path",style:m,directives:[{name:"ant-ref",value:function(t){e.paths[i]=t}}]};return t("path",v)})}},render:function(){var e=arguments[0],t=this.$props,n=t.prefixCls,r=t.strokeWidth,i=t.trailWidth,o=t.gapDegree,a=t.gapPosition,s=t.trailColor,c=t.strokeLinecap,l=t.strokeColor,u=(0,d.A)(t,["prefixCls","strokeWidth","trailWidth","gapDegree","gapPosition","trailColor","strokeLinecap","strokeColor"]),h=H(0,100,s,r,o,a),f=h.pathString,p=h.pathStyle;delete u.percent;var m=O(l),v=m.find(function(e){return"[object Object]"===Object.prototype.toString.call(e)}),g={attrs:{d:f,stroke:s,"stroke-linecap":c,"stroke-width":i||r,"fill-opacity":"0"},class:n+"-circle-trail",style:p};return e("svg",_()([{class:n+"-circle",attrs:{viewBox:"0 0 100 100"}},u]),[v&&e("defs",[e("linearGradient",{attrs:{id:n+"-gradient-"+this.gradientId,x1:"100%",y1:"0%",x2:"0%",y2:"0%"}},[Object.keys(v).sort(function(e,t){return T(e)-T(t)}).map(function(t,n){return e("stop",{key:n,attrs:{offset:t,"stop-color":v[t]}})})])]),e("path",g),this.getStokeList().reverse()])}},Y=w(D),V={normal:"#108ee9",exception:"#ff5500",success:"#87d068"};function P(e){var t=e.percent,n=e.successPercent,r=f(t);if(!n)return r;var i=f(n);return[n,f(r-i)]}function E(e){var t=e.progressStatus,n=e.successPercent,r=e.strokeColor,i=r||V[t];return n?[V.success,i]:i}var j={functional:!0,render:function(e,t){var n,i=t.props,o=t.children,a=i.prefixCls,s=i.width,c=i.strokeWidth,l=i.trailColor,u=i.strokeLinecap,d=i.gapPosition,h=i.gapDegree,f=i.type,p=s||120,m={width:"number"===typeof p?p+"px":p,height:"number"===typeof p?p+"px":p,fontSize:.15*p+6},v=c||6,g=d||"dashboard"===f&&"bottom"||"top",y=h||"dashboard"===f&&75,_=E(i),b="[object Object]"===Object.prototype.toString.call(_),M=(n={},(0,r.A)(n,a+"-inner",!0),(0,r.A)(n,a+"-circle-gradient",b),n);return e("div",{class:M,style:m},[e(Y,{attrs:{percent:P(i),strokeWidth:v,trailWidth:v,strokeColor:_,strokeLinecap:u,trailColor:l,prefixCls:a,gapDegree:y,gapPosition:g}}),o])}},F=j,I=["normal","exception","active","success"],$=s.A.oneOf(["line","circle","dashboard"]),R=s.A.oneOf(["default","small"]),N={prefixCls:s.A.string,type:$,percent:s.A.number,successPercent:s.A.number,format:s.A.func,status:s.A.oneOf(I),showInfo:s.A.bool,strokeWidth:s.A.number,strokeLinecap:s.A.oneOf(["butt","round","square"]),strokeColor:s.A.oneOfType([s.A.string,s.A.object]),trailColor:s.A.string,width:s.A.number,gapDegree:s.A.number,gapPosition:s.A.oneOf(["top","bottom","left","right"]),size:R},W={name:"AProgress",props:(0,c.CB)(N,{type:"line",percent:0,showInfo:!0,trailColor:"#f3f3f3",size:"default",gapDegree:0,strokeLinecap:"round"}),inject:{configProvider:{default:function(){return l.f}}},methods:{getPercentNumber:function(){var e=this.$props,t=e.successPercent,n=e.percent,r=void 0===n?0:n;return parseInt(void 0!==t?t.toString():r.toString(),10)},getProgressStatus:function(){var e=this.$props.status;return I.indexOf(e)<0&&this.getPercentNumber()>=100?"success":e||"normal"},renderProcessInfo:function(e,t){var n=this.$createElement,r=this.$props,i=r.showInfo,o=r.format,a=r.type,s=r.percent,c=r.successPercent;if(!i)return null;var l=void 0,d=o||this.$scopedSlots.format||function(e){return e+"%"},h="circle"===a||"dashboard"===a?"":"-circle";return o||this.$scopedSlots.format||"exception"!==t&&"success"!==t?l=d(f(s),f(c)):"exception"===t?l=n(u.A,{attrs:{type:"close"+h,theme:"line"===a?"filled":"outlined"}}):"success"===t&&(l=n(u.A,{attrs:{type:"check"+h,theme:"line"===a?"filled":"outlined"}})),n("span",{class:e+"-text",attrs:{title:"string"===typeof l?l:void 0}},[l])}},render:function(){var e,t=arguments[0],n=(0,c.Oq)(this),o=n.prefixCls,s=n.size,l=n.type,u=n.showInfo,d=this.configProvider.getPrefixCls,h=d("progress",o),f=this.getProgressStatus(),p=this.renderProcessInfo(h,f),m=void 0;if("line"===l){var v={props:(0,i.A)({},n,{prefixCls:h})};m=t(g,v,[p])}else if("circle"===l||"dashboard"===l){var y={props:(0,i.A)({},n,{prefixCls:h,progressStatus:f})};m=t(F,y,[p])}var _=a()(h,(e={},(0,r.A)(e,h+"-"+("dashboard"===l?"circle":l),!0),(0,r.A)(e,h+"-status-"+f,!0),(0,r.A)(e,h+"-show-info",u),(0,r.A)(e,h+"-"+s,s),e)),b={on:(0,c.WM)(this),class:_};return t("div",b,[m])}},B=n(44807);W.install=function(e){e.use(B.A),e.component(W.name,W)};var K=W},4863:function(e,t,n){"use strict";n(29229)},63301:function(e,t,n){"use strict";n.d(t,{Ay:function(){return b}});var r=n(75189),i=n.n(r),o=n(44508),a=n(85505),s=n(5748),c=n(4718),l=n(68145),u=n(46942),d=n.n(u),h=n(15848),f=n(25592);function p(){}var m={name:"ARadio",model:{prop:"checked"},props:{prefixCls:c.A.string,defaultChecked:Boolean,checked:{type:Boolean,default:void 0},disabled:Boolean,isGroup:Boolean,value:c.A.any,name:String,id:String,autoFocus:Boolean,type:c.A.string.def("radio")},inject:{radioGroupContext:{default:void 0},configProvider:{default:function(){return f.f}}},methods:{focus:function(){this.$refs.vcCheckbox.focus()},blur:function(){this.$refs.vcCheckbox.blur()},handleChange:function(e){var t=e.target.checked;this.$emit("input",t),this.$emit("change",e)},onChange:function(e){this.$emit("change",e),this.radioGroupContext&&this.radioGroupContext.onRadioChange&&this.radioGroupContext.onRadioChange(e)}},render:function(){var e,t=arguments[0],n=this.$slots,r=this.radioGroupContext,c=(0,h.Oq)(this),u=n["default"],f=(0,h.WM)(this),m=f.mouseenter,v=void 0===m?p:m,g=f.mouseleave,y=void 0===g?p:g,_=(0,s.A)(f,["mouseenter","mouseleave"]),b=c.prefixCls,M=(0,s.A)(c,["prefixCls"]),A=this.configProvider.getPrefixCls,w=A("radio",b),x={props:(0,a.A)({},M,{prefixCls:w}),on:_,attrs:(0,h.Z0)(this)};r?(x.props.name=r.name,x.on.change=this.onChange,x.props.checked=c.value===r.stateValue,x.props.disabled=c.disabled||r.disabled):x.on.change=this.handleChange;var k=d()((e={},(0,o.A)(e,w+"-wrapper",!0),(0,o.A)(e,w+"-wrapper-checked",x.props.checked),(0,o.A)(e,w+"-wrapper-disabled",x.props.disabled),e));return t("label",{class:k,on:{mouseenter:v,mouseleave:y}},[t(l.A,i()([x,{ref:"vcCheckbox"}])),void 0!==u?t("span",[u]):null])}};function v(){}var g={name:"ARadioGroup",model:{prop:"value"},props:{prefixCls:c.A.string,defaultValue:c.A.any,value:c.A.any,size:{default:"default",validator:function(e){return["large","default","small"].includes(e)}},options:{default:function(){return[]},type:Array},disabled:Boolean,name:String,buttonStyle:c.A.string.def("outline")},data:function(){var e=this.value,t=this.defaultValue;return this.updatingValue=!1,{stateValue:void 0===e?t:e}},provide:function(){return{radioGroupContext:this}},inject:{configProvider:{default:function(){return f.f}}},computed:{radioOptions:function(){var e=this.disabled;return this.options.map(function(t){return"string"===typeof t?{label:t,value:t}:(0,a.A)({},t,{disabled:void 0===t.disabled?e:t.disabled})})},classes:function(){var e,t=this.prefixCls,n=this.size;return e={},(0,o.A)(e,""+t,!0),(0,o.A)(e,t+"-"+n,n),e}},watch:{value:function(e){this.updatingValue=!1,this.stateValue=e}},methods:{onRadioChange:function(e){var t=this,n=this.stateValue,r=e.target.value;(0,h.cK)(this,"value")||(this.stateValue=r),this.updatingValue||r===n||(this.updatingValue=!0,this.$emit("input",r),this.$emit("change",e)),this.$nextTick(function(){t.updatingValue=!1})}},render:function(){var e=this,t=arguments[0],n=(0,h.WM)(this),r=n.mouseenter,i=void 0===r?v:r,a=n.mouseleave,s=void 0===a?v:a,c=(0,h.Oq)(this),l=c.prefixCls,u=c.options,f=c.buttonStyle,p=this.configProvider.getPrefixCls,g=p("radio",l),y=g+"-group",_=d()(y,y+"-"+f,(0,o.A)({},y+"-"+c.size,c.size)),b=(0,h.Gk)(this.$slots["default"]);return u&&u.length>0&&(b=u.map(function(n){return"string"===typeof n?t(m,{key:n,attrs:{prefixCls:g,disabled:c.disabled,value:n,checked:e.stateValue===n}},[n]):t(m,{key:"radio-group-value-options-"+n.value,attrs:{prefixCls:g,disabled:n.disabled||c.disabled,value:n.value,checked:e.stateValue===n.value}},[n.label])})),t("div",{class:_,on:{mouseenter:i,mouseleave:s}},[b])}},y={name:"ARadioButton",props:(0,a.A)({},m.props),inject:{radioGroupContext:{default:void 0},configProvider:{default:function(){return f.f}}},render:function(){var e=arguments[0],t=(0,h.Oq)(this),n=t.prefixCls,r=(0,s.A)(t,["prefixCls"]),i=this.configProvider.getPrefixCls,o=i("radio-button",n),c={props:(0,a.A)({},r,{prefixCls:o}),on:(0,h.WM)(this)};return this.radioGroupContext&&(c.on.change=this.radioGroupContext.onRadioChange,c.props.checked=this.$props.value===this.radioGroupContext.stateValue,c.props.disabled=this.$props.disabled||this.radioGroupContext.disabled),e(m,c,[this.$slots["default"]])}},_=n(44807);m.Group=g,m.Button=y,m.install=function(e){e.use(_.A),e.component(m.name,m),e.component(m.Group.name,m.Group),e.component(m.Button.name,m.Button)};var b=m},29775:function(e,t,n){"use strict";n(29229)},30692:function(e,t,n){"use strict";n.d(t,{A:function(){return S}});var r=n(85505),i=n(5748),o=n(90034),a=n(4718),s=n(15848),c=n(25592),l=n(46942),u=n.n(l),d=n(11207),h=n(52315);function f(e,t){var n=t?e.pageYOffset:e.pageXOffset,r=t?"scrollTop":"scrollLeft";if("number"!==typeof n){var i=e.document;n=i.documentElement[r],"number"!==typeof n&&(n=i.body[r])}return n}function p(e){var t=void 0,n=void 0,r=e.ownerDocument,i=r.body,o=r&&r.documentElement,a=e.getBoundingClientRect();return t=a.left,n=a.top,t-=o.clientLeft||i.clientLeft||0,n-=o.clientTop||i.clientTop||0,{left:t,top:n}}function m(e){var t=p(e),n=e.ownerDocument,r=n.defaultView||n.parentWindow;return t.left+=f(r),t.left}function v(){}var g={name:"Star",mixins:[h.A],props:{value:a.A.number,index:a.A.number,prefixCls:a.A.string,allowHalf:a.A.bool,disabled:a.A.bool,character:a.A.any,characterRender:a.A.func,focused:a.A.bool,count:a.A.number},methods:{onHover:function(e){var t=this.index;this.$emit("hover",e,t)},onClick:function(e){var t=this.index;this.$emit("click",e,t)},onKeyDown:function(e){var t=this.$props.index;13===e.keyCode&&this.__emit("click",e,t)},getClassName:function(){var e=this.prefixCls,t=this.index,n=this.value,r=this.allowHalf,i=this.focused,o=t+1,a=e;return 0===n&&0===t&&i?a+=" "+e+"-focused":r&&n+.5===o?(a+=" "+e+"-half "+e+"-active",i&&(a+=" "+e+"-focused")):(a+=o<=n?" "+e+"-full":" "+e+"-zero",o===n&&i&&(a+=" "+e+"-focused")),a}},render:function(){var e=arguments[0],t=this.onHover,n=this.onClick,r=this.onKeyDown,i=this.disabled,o=this.prefixCls,a=this.characterRender,c=this.index,l=this.count,u=this.value,d=(0,s.nu)(this,"character"),h=e("li",{class:this.getClassName()},[e("div",{on:{click:i?v:n,keydown:i?v:r,mousemove:i?v:t},attrs:{role:"radio","aria-checked":u>c?"true":"false","aria-posinset":c+1,"aria-setsize":l,tabIndex:0}},[e("div",{class:o+"-first"},[d]),e("div",{class:o+"-second"},[d])])]);return a&&(h=a(h,this.$props)),h}},y={disabled:a.A.bool,value:a.A.number,defaultValue:a.A.number,count:a.A.number,allowHalf:a.A.bool,allowClear:a.A.bool,prefixCls:a.A.string,character:a.A.any,characterRender:a.A.func,tabIndex:a.A.number,autoFocus:a.A.bool};function _(){}var b={name:"Rate",mixins:[h.A],model:{prop:"value",event:"change"},props:(0,s.CB)(y,{defaultValue:0,count:5,allowHalf:!1,allowClear:!0,prefixCls:"rc-rate",tabIndex:0,character:"★"}),data:function(){var e=this.value;return(0,s.cK)(this,"value")||(e=this.defaultValue),{sValue:e,focused:!1,cleanedValue:null,hoverValue:void 0}},watch:{value:function(e){this.setState({sValue:e})}},mounted:function(){var e=this;this.$nextTick(function(){e.autoFocus&&!e.disabled&&e.focus()})},methods:{onHover:function(e,t){var n=this.getStarValue(t,e.pageX),r=this.cleanedValue;n!==r&&this.setState({hoverValue:n,cleanedValue:null}),this.$emit("hoverChange",n)},onMouseLeave:function(){this.setState({hoverValue:void 0,cleanedValue:null}),this.$emit("hoverChange",void 0)},onClick:function(e,t){var n=this.allowClear,r=this.sValue,i=this.getStarValue(t,e.pageX),o=!1;n&&(o=i===r),this.onMouseLeave(!0),this.changeValue(o?0:i),this.setState({cleanedValue:o?i:null})},onFocus:function(){this.setState({focused:!0}),this.$emit("focus")},onBlur:function(){this.setState({focused:!1}),this.$emit("blur")},onKeyDown:function(e){var t=e.keyCode,n=this.count,r=this.allowHalf,i=this.sValue;t===d.A.RIGHT&&i0&&(i-=r?.5:1,this.changeValue(i),e.preventDefault()),this.$emit("keydown",e)},getStarDOM:function(e){return this.$refs["stars"+e].$el},getStarValue:function(e,t){var n=e+1;if(this.allowHalf){var r=this.getStarDOM(e),i=m(r),o=r.clientWidth;t-i0)return!0;return!1}function Q(e,t){var n=new RegExp("["+t.join()+"]");return e.split(n).filter(function(e){return e})}function ee(e,t){var n=(0,w.Ts)(t);if(n.disabled)return!1;var r=E(t,this.optionFilterProp);return r=r.length&&r[0].text?r[0].text:String(r),r.toLowerCase().indexOf(e.toLowerCase())>-1}function te(e,t){if(!R(t)&&!j(t)&&"string"!==typeof e)throw new Error("Invalid `value` of type `"+("undefined"===typeof e?"undefined":(0,Y.A)(e))+"` supplied to Option, expected `string` when `tags/combobox` is `true`.")}function ne(e,t){return function(n){e[t]=n}}function re(){var e=(new Date).getTime(),t="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){var n=(e+16*Math.random())%16|0;return e=Math.floor(e/16),("x"===t?n:7&n|8).toString(16)});return t}var ie={name:"DropdownMenu",mixins:[L.A],props:{ariaId:u.A.string,defaultActiveFirstOption:u.A.bool,value:u.A.any,dropdownMenuStyle:u.A.object,multiple:u.A.bool,prefixCls:u.A.string,menuItems:u.A.any,inputValue:u.A.string,visible:u.A.bool,backfillValue:u.A.any,firstActiveValue:u.A.string,menuItemSelectedIcon:u.A.any},watch:{visible:function(e){var t=this;e?this.$nextTick(function(){t.scrollActiveItemToView()}):this.lastVisible=e}},created:function(){this.rafInstance=null,this.lastInputValue=this.$props.inputValue,this.lastVisible=!1},mounted:function(){var e=this;this.$nextTick(function(){e.scrollActiveItemToView()}),this.lastVisible=this.$props.visible},updated:function(){var e=this.$props;this.lastVisible=e.visible,this.lastInputValue=e.inputValue,this.prevVisible=this.visible},beforeDestroy:function(){this.rafInstance&&T().cancel(this.rafInstance)},methods:{scrollActiveItemToView:function(){var e=this,t=this.firstActiveItem&&this.firstActiveItem.$el,n=this.$props,r=n.value,i=n.visible,o=n.firstActiveValue;if(t&&i){var a={onlyScrollIfNeeded:!0};r&&0!==r.length||!o||(a.alignWithTop=!0),this.rafInstance=T()(function(){(0,D.A)(t,e.$refs.menuRef.$el,a)})}},renderMenu:function(){var e=this,t=this.$createElement,n=this.$props,r=n.menuItems,i=n.defaultActiveFirstOption,o=n.value,a=n.prefixCls,c=n.multiple,l=n.inputValue,u=n.firstActiveValue,d=n.dropdownMenuStyle,h=n.backfillValue,f=n.visible,p=(0,w.nu)(this,"menuItemSelectedIcon"),m=(0,w.WM)(this),v=m.menuDeselect,g=m.menuSelect,y=m.popupScroll;if(r&&r.length){var _=q(r,o),b={props:{multiple:c,itemIcon:c?p:null,selectedKeys:_,prefixCls:a+"-menu"},on:{},style:d,ref:"menuRef",attrs:{role:"listbox"}};y&&(b.on.scroll=y),c?(b.on.deselect=v,b.on.select=g):b.on.click=g;var M={},A=i,x=r;if(_.length||u){n.visible&&!this.lastVisible?M.activeKey=_[0]||u:f||(_[0]&&(A=!1),M.activeKey=void 0);var L=!1,C=function(t){return!L&&-1!==_.indexOf(t.key)||!L&&!_.length&&-1!==u.indexOf(t.key)?(L=!0,(0,k.Ob)(t,{directives:[{name:"ant-ref",value:function(t){e.firstActiveItem=t}}]})):t};x=r.map(function(e){if((0,w.xr)(e).isMenuItemGroup){var t=e.componentOptions.children.map(C);return(0,k.Ob)(e,{children:t})}return C(e)})}else this.firstActiveItem=null;var S=o&&o[o.length-1];return l===this.lastInputValue||S&&S===h||(M.activeKey=""),b.props=(0,s.A)({},M,b.props,{defaultActiveFirst:A}),t(H.Ay,b,[x])}return null}},render:function(){var e=arguments[0],t=this.renderMenu(),n=(0,w.WM)(this),r=n.popupFocus,i=n.popupScroll;return t?e("div",{style:{overflow:"auto",transform:"translateZ(0)"},attrs:{id:this.$props.ariaId,tabIndex:"-1"},on:{focus:r,mousedown:B,scroll:i},ref:"menuContainer"},[t]):null}},oe={bottomLeft:{points:["tl","bl"],offset:[0,4],overflow:{adjustX:0,adjustY:1}},topLeft:{points:["bl","tl"],offset:[0,-4],overflow:{adjustX:0,adjustY:1}}},ae={name:"SelectTrigger",mixins:[L.A],props:{dropdownMatchSelectWidth:u.A.bool,defaultActiveFirstOption:u.A.bool,dropdownAlign:u.A.object,visible:u.A.bool,disabled:u.A.bool,showSearch:u.A.bool,dropdownClassName:u.A.string,dropdownStyle:u.A.object,dropdownMenuStyle:u.A.object,multiple:u.A.bool,inputValue:u.A.string,filterOption:u.A.any,empty:u.A.bool,options:u.A.any,prefixCls:u.A.string,popupClassName:u.A.string,value:u.A.array,showAction:u.A.arrayOf(u.A.string),combobox:u.A.bool,animation:u.A.string,transitionName:u.A.string,getPopupContainer:u.A.func,backfillValue:u.A.any,menuItemSelectedIcon:u.A.any,dropdownRender:u.A.func,ariaId:u.A.string},data:function(){return{dropdownWidth:0}},created:function(){this.rafInstance=null,this.saveDropdownMenuRef=ne(this,"dropdownMenuRef"),this.saveTriggerRef=ne(this,"triggerRef")},mounted:function(){var e=this;this.$nextTick(function(){e.setDropdownWidth()})},updated:function(){var e=this;this.$nextTick(function(){e.setDropdownWidth()})},beforeDestroy:function(){this.cancelRafInstance()},methods:{setDropdownWidth:function(){var e=this;this.cancelRafInstance(),this.rafInstance=T()(function(){var t=e.$el.offsetWidth;t!==e.dropdownWidth&&e.setState({dropdownWidth:t})})},cancelRafInstance:function(){this.rafInstance&&T().cancel(this.rafInstance)},getInnerMenu:function(){return this.dropdownMenuRef&&this.dropdownMenuRef.$refs.menuRef},getPopupDOMNode:function(){return this.triggerRef.getPopupDomNode()},getDropdownElement:function(e){var t=this.$createElement,n=this.value,r=this.firstActiveValue,i=this.defaultActiveFirstOption,o=this.dropdownMenuStyle,a=this.getDropdownPrefixCls,c=this.backfillValue,l=this.menuItemSelectedIcon,u=(0,w.WM)(this),d=u.menuSelect,h=u.menuDeselect,f=u.popupScroll,p=this.$props,m=p.dropdownRender,v=p.ariaId,g={props:(0,s.A)({},e.props,{ariaId:v,prefixCls:a(),value:n,firstActiveValue:r,defaultActiveFirstOption:i,dropdownMenuStyle:o,backfillValue:c,menuItemSelectedIcon:l}),on:(0,s.A)({},e.on,{menuSelect:d,menuDeselect:h,popupScroll:f}),directives:[{name:"ant-ref",value:this.saveDropdownMenuRef}]},y=t(ie,g);return m?m(y,p):null},getDropdownTransitionName:function(){var e=this.$props,t=e.transitionName;return!t&&e.animation&&(t=this.getDropdownPrefixCls()+"-"+e.animation),t},getDropdownPrefixCls:function(){return this.prefixCls+"-dropdown"}},render:function(){var e,t=arguments[0],n=this.$props,r=this.$slots,i=n.multiple,a=n.visible,c=n.inputValue,l=n.dropdownAlign,u=n.disabled,d=n.showSearch,h=n.dropdownClassName,f=n.dropdownStyle,p=n.dropdownMatchSelectWidth,v=n.options,g=n.getPopupContainer,y=n.showAction,_=n.empty,b=(0,w.WM)(this),M=b.mouseenter,A=b.mouseleave,x=b.popupFocus,k=b.dropdownVisibleChange,L=this.getDropdownPrefixCls(),C=(e={},(0,o.A)(e,h,!!h),(0,o.A)(e,L+"--"+(i?"multiple":"single"),1),(0,o.A)(e,L+"--empty",_),e),S=this.getDropdownElement({props:{menuItems:v,multiple:i,inputValue:c,visible:a},on:{popupFocus:x}}),z=void 0;z=u?[]:R(n)&&!d?["click"]:["blur"];var T=(0,s.A)({},f),H=p?"width":"minWidth";this.dropdownWidth&&(T[H]=this.dropdownWidth+"px");var D={props:(0,s.A)({},n,{showAction:u?[]:y,hideAction:z,ref:"triggerRef",popupPlacement:"bottomLeft",builtinPlacements:oe,prefixCls:L,popupTransitionName:this.getDropdownTransitionName(),popupAlign:l,popupVisible:a,getPopupContainer:g,popupClassName:m()(C),popupStyle:T}),on:{popupVisibleChange:k},directives:[{name:"ant-ref",value:this.saveTriggerRef}]};return M&&(D.on.mouseenter=M),A&&(D.on.mouseleave=A),t(O.A,D,[r["default"],t("template",{slot:"popup"},[S])])}},se={defaultActiveFirstOption:u.A.bool,multiple:u.A.bool,filterOption:u.A.any,showSearch:u.A.bool,disabled:u.A.bool,allowClear:u.A.bool,showArrow:u.A.bool,tags:u.A.bool,prefixCls:u.A.string,transitionName:u.A.string,optionLabelProp:u.A.string,optionFilterProp:u.A.string,animation:u.A.string,choiceTransitionName:u.A.string,open:u.A.bool,defaultOpen:u.A.bool,placeholder:u.A.any,labelInValue:u.A.bool,loading:u.A.bool,value:u.A.any,defaultValue:u.A.any,dropdownStyle:u.A.object,dropdownClassName:u.A.string,maxTagTextLength:u.A.number,maxTagCount:u.A.number,maxTagPlaceholder:u.A.any,tokenSeparators:u.A.arrayOf(u.A.string),getInputElement:u.A.func,showAction:u.A.arrayOf(u.A.string),autoFocus:u.A.bool,getPopupContainer:u.A.func,clearIcon:u.A.any,inputIcon:u.A.any,removeIcon:u.A.any,menuItemSelectedIcon:u.A.any,dropdownRender:u.A.func,mode:u.A.oneOf(["multiple","tags"]),backfill:u.A.bool,dropdownAlign:u.A.any,dropdownMatchSelectWidth:u.A.bool,dropdownMenuStyle:u.A.object,notFoundContent:u.A.oneOfType([String,Number]),tabIndex:u.A.oneOfType([String,Number])},ce=n(17948),le=n(51382);A.Ay.use(S.A,{name:"ant-ref"});var ue="RC_SELECT_EMPTY_VALUE_KEY",de=function(){return null};function he(e){return!e||null===e.offsetParent}function fe(){for(var e=arguments.length,t=Array(e),n=0;n0&&void 0!==arguments[0]?arguments[0]:[],n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return t.forEach(function(t){t.data&&void 0===t.data.slot&&((0,w.xr)(t).isSelectOptGroup?e.getOptionsFromChildren(t.componentOptions.children,n):n.push(t))}),n},getInputValueForCombobox:function(e,t,n){var r=[];if("value"in e&&!n&&(r=N(e.value)),"defaultValue"in e&&n&&(r=N(e.defaultValue)),!r.length)return"";r=r[0];var i=r;return e.labelInValue?i=r.label:t[W(r)]&&(i=t[W(r)].label),void 0===i&&(i=""),i},getLabelFromOption:function(e,t){return E(t,e.optionLabelProp)},getOptionsInfoFromProps:function(e,t){var n=this,r=this.getOptionsFromChildren(this.$props.children),i={};if(r.forEach(function(t){var r=P(t);i[W(r)]={option:t,value:r,label:n.getLabelFromOption(e,t),title:(0,w.IV)(t,"title"),disabled:(0,w.IV)(t,"disabled")}}),t){var o=t._optionsInfo,a=t._value;a&&a.forEach(function(e){var t=W(e);i[t]||void 0===o[t]||(i[t]=o[t])})}return i},getValueFromProps:function(e,t){var n=[];return"value"in e&&!t&&(n=N(e.value)),"defaultValue"in e&&t&&(n=N(e.defaultValue)),e.labelInValue&&(n=n.map(function(e){return e.key})),n},onInputChange:function(e){var t=e.target,n=t.value,r=t.composing,i=this.$data._inputValue,o=void 0===i?"":i;if(e.isComposing||r||o===n)this.setState({_mirrorInputValue:n});else{var a=this.$props.tokenSeparators;if(I(this.$props)&&a.length&&Z(n,a)){var s=this.getValueByInput(n);return void 0!==s&&this.fireChange(s),this.setOpenState(!1,{needFocus:!0}),void this.setInputValue("",!1)}this.setInputValue(n),this.setState({_open:!0}),F(this.$props)&&this.fireChange([n])}},onDropdownVisibleChange:function(e){e&&!this._focused&&(this.clearBlurTime(),this.timeoutFocus(),this._focused=!0,this.updateFocusClassName()),this.setOpenState(e)},onKeyDown:function(e){var t=this.$data._open,n=this.$props.disabled;if(!n){var r=e.keyCode;t&&!this.getInputDOMNode()?this.onInputKeydown(e):r===f.A.ENTER||r===f.A.DOWN?(r!==f.A.ENTER||I(this.$props)?t||this.setOpenState(!0):this.maybeFocus(!0),e.preventDefault()):r===f.A.SPACE&&(t||(this.setOpenState(!0),e.preventDefault()))}},onInputKeydown:function(e){var t=this,n=this.$props,r=n.disabled,i=n.combobox,o=n.defaultActiveFirstOption;if(!r){var a=this.$data,s=this.getRealOpenState(a),c=e.keyCode;if(!I(this.$props)||e.target.value||c!==f.A.BACKSPACE){if(c===f.A.DOWN){if(!a._open)return this.openIfHasChildren(),e.preventDefault(),void e.stopPropagation()}else if(c===f.A.ENTER&&a._open)!s&&i||e.preventDefault(),s&&i&&!1===o&&(this.comboboxTimer=setTimeout(function(){t.setOpenState(!1)}));else if(c===f.A.ESC)return void(a._open&&(this.setOpenState(!1),e.preventDefault(),e.stopPropagation()));if(s&&this.selectTriggerRef){var l=this.selectTriggerRef.getInnerMenu();l&&l.onKeyDown(e,this.handleBackfill)&&(e.preventDefault(),e.stopPropagation())}}else{e.preventDefault();var u=a._value;u.length&&this.removeSelected(u[u.length-1])}}},onMenuSelect:function(e){var t=e.item;if(t){var n=this.$data._value,r=this.$props,i=P(t),o=n[n.length-1],a=!1;if(I(r)?-1!==K(n,i)?a=!0:n=n.concat([i]):F(r)||void 0===o||o!==i||i===this.$data._backfillValue?(n=[i],this.setOpenState(!1,{needFocus:!0,fireSearch:!1})):(this.setOpenState(!1,{needFocus:!0,fireSearch:!1}),a=!0),a||this.fireChange(n),!a){this.fireSelect(i);var s=F(r)?E(t,r.optionLabelProp):"";r.autoClearSearchValue&&this.setInputValue(s,!1)}}},onMenuDeselect:function(e){var t=e.item,n=e.domEvent;if("keydown"!==n.type||n.keyCode!==f.A.ENTER)"click"===n.type&&this.removeSelected(P(t)),this.autoClearSearchValue&&this.setInputValue("");else{var r=t.$el;he(r)||this.removeSelected(P(t))}},onArrowClick:function(e){e.stopPropagation(),e.preventDefault(),this.clearBlurTime(),this.disabled||this.setOpenState(!this.$data._open,{needFocus:!this.$data._open})},onPlaceholderClick:function(){this.getInputDOMNode()&&this.getInputDOMNode()&&this.getInputDOMNode().focus()},onPopupFocus:function(){this.maybeFocus(!0,!0)},onClearSelection:function(e){var t=this.$props,n=this.$data;if(!t.disabled){var r=n._inputValue,i=n._value;e.stopPropagation(),(r||i.length)&&(i.length&&this.fireChange([]),this.setOpenState(!1,{needFocus:!0}),r&&this.setInputValue(""))}},onChoiceAnimationLeave:function(){this.forcePopupAlign()},getOptionInfoBySingleValue:function(e,t){var n=this.$createElement,r=void 0;if(t=t||this.$data._optionsInfo,t[W(e)]&&(r=t[W(e)]),r)return r;var i=e;if(this.$props.labelInValue){var o=U(this.$props.value,e),a=U(this.$props.defaultValue,e);void 0!==o?i=o:void 0!==a&&(i=a)}var s={option:n(d.A,{attrs:{value:e},key:e},[e]),value:e,label:i};return s},getOptionBySingleValue:function(e){var t=this.getOptionInfoBySingleValue(e),n=t.option;return n},getOptionsBySingleValue:function(e){var t=this;return e.map(function(e){return t.getOptionBySingleValue(e)})},getValueByLabel:function(e){var t=this;if(void 0===e)return null;var n=null;return Object.keys(this.$data._optionsInfo).forEach(function(r){var i=t.$data._optionsInfo[r],o=i.disabled;if(!o){var a=N(i.label);a&&a.join("")===e&&(n=i.value)}}),n},getVLBySingleValue:function(e){return this.$props.labelInValue?{key:e,label:this.getLabelBySingleValue(e)}:e},getVLForOnChange:function(e){var t=this,n=e;return void 0!==n?(n=this.labelInValue?n.map(function(e){return{key:e,label:t.getLabelBySingleValue(e)}}):n.map(function(e){return e}),I(this.$props)?n:n[0]):n},getLabelBySingleValue:function(e,t){var n=this.getOptionInfoBySingleValue(e,t),r=n.label;return r},getDropdownContainer:function(){return this.dropdownContainer||(this.dropdownContainer=document.createElement("div"),document.body.appendChild(this.dropdownContainer)),this.dropdownContainer},getPlaceholderElement:function(){var e=this.$createElement,t=this.$props,n=this.$data,r=!1;n._mirrorInputValue&&(r=!0);var i=n._value;i.length&&(r=!0),!n._mirrorInputValue&&F(t)&&1===i.length&&n._value&&!n._value[0]&&(r=!1);var o=t.placeholder;if(o){var a={on:{mousedown:B,click:this.onPlaceholderClick},attrs:J,style:(0,s.A)({display:r?"none":"block"},G),class:t.prefixCls+"-selection__placeholder"};return e("div",a,[o])}return null},inputClick:function(e){this.$data._open?(this.clearBlurTime(),e.stopPropagation()):this._focused=!1},inputBlur:function(e){var t=this,n=e.relatedTarget||document.activeElement;if((le.lT||le.UP)&&(e.relatedTarget===this.$refs.arrow||n&&this.selectTriggerRef&&this.selectTriggerRef.getInnerMenu()&&this.selectTriggerRef.getInnerMenu().$el===n||(0,ce.A)(e.target,n)))return e.target.focus(),void e.preventDefault();this.clearBlurTime(),this.disabled?e.preventDefault():this.blurTimer=setTimeout(function(){t._focused=!1,t.updateFocusClassName();var e=t.$props,n=t.$data._value,r=t.$data._inputValue;if(R(e)&&e.showSearch&&r&&e.defaultActiveFirstOption){var i=t._options||[];if(i.length){var o=X(i);o&&(n=[P(o)],t.fireChange(n))}}else if(I(e)&&r){t._mouseDown?t.setInputValue(""):(t.$data._inputValue="",t.getInputDOMNode&&t.getInputDOMNode()&&(t.getInputDOMNode().value=""));var a=t.getValueByInput(r);void 0!==a&&(n=a,t.fireChange(n))}if(I(e)&&t._mouseDown)return t.maybeFocus(!0,!0),void(t._mouseDown=!1);t.setOpenState(!1),t.$emit("blur",t.getVLForOnChange(n))},200)},inputFocus:function(e){if(this.$props.disabled)e.preventDefault();else{this.clearBlurTime();var t=this.getInputDOMNode();t&&e.target===this.rootRef||($(this.$props)||e.target!==t)&&(this._focused||(this._focused=!0,this.updateFocusClassName(),I(this.$props)&&this._mouseDown||this.timeoutFocus()))}},_getInputElement:function(){var e=this.$createElement,t=this.$props,n=this.$data,r=n._inputValue,a=n._mirrorInputValue,c=(0,w.Z0)(this),l=e("input",{attrs:{id:c.id,autoComplete:"off"}}),u=t.getInputElement?t.getInputElement():l,d=m()((0,w.t0)(u),(0,o.A)({},t.prefixCls+"-search__field",!0)),h=(0,w.kQ)(u);return u.data=u.data||{},e("div",{class:t.prefixCls+"-search__field__wrap",on:{click:this.inputClick}},[(0,k.Ob)(u,{props:{disabled:t.disabled,value:r},attrs:(0,s.A)({},u.data.attrs||{},{disabled:t.disabled,value:r}),domProps:{value:r},class:d,directives:[{name:"ant-ref",value:this.saveInputRef},{name:"ant-input"}],on:{input:this.onInputChange,keydown:fe(this.onInputKeydown,h.keydown,(0,w.WM)(this).inputKeydown),focus:fe(this.inputFocus,h.focus),blur:fe(this.inputBlur,h.blur)}}),e("span",i()([{directives:[{name:"ant-ref",value:this.saveInputMirrorRef}]},{class:t.prefixCls+"-search__field__mirror"}]),[a," "])])},getInputDOMNode:function(){return this.topCtrlRef?this.topCtrlRef.querySelector("input,textarea,div[contentEditable]"):this.inputRef},getInputMirrorDOMNode:function(){return this.inputMirrorRef},getPopupDOMNode:function(){if(this.selectTriggerRef)return this.selectTriggerRef.getPopupDOMNode()},getPopupMenuComponent:function(){if(this.selectTriggerRef)return this.selectTriggerRef.getInnerMenu()},setOpenState:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=this.$props,i=this.$data,o=n.needFocus,a=n.fireSearch;if(i._open!==e){this.__emit("dropdownVisibleChange",e);var s={_open:e,_backfillValue:""};!e&&R(r)&&r.showSearch&&this.setInputValue("",a),e||this.maybeFocus(e,!!o),this.setState(s,function(){e&&t.maybeFocus(e,!!o)})}else this.maybeFocus(e,!!o)},setInputValue:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];e!==this.$data._inputValue&&(this.setState({_inputValue:e},this.forcePopupAlign),t&&this.$emit("search",e))},getValueByInput:function(e){var t=this,n=this.$props,r=n.multiple,i=n.tokenSeparators,o=this.$data._value,a=!1;return Q(e,i).forEach(function(e){var n=[e];if(r){var i=t.getValueByLabel(e);i&&-1===K(o,i)&&(o=o.concat(i),a=!0,t.fireSelect(i))}else-1===K(o,e)&&(o=o.concat(n),a=!0,t.fireSelect(e))}),a?o:void 0},getRealOpenState:function(e){var t=this.$props.open;if("boolean"===typeof t)return t;var n=(e||this.$data)._open,r=this._options||[];return!$(this.$props)&&this.$props.showSearch||n&&!r.length&&(n=!1),n},focus:function(){R(this.$props)&&this.selectionRef?this.selectionRef.focus():this.getInputDOMNode()&&this.getInputDOMNode().focus()},blur:function(){R(this.$props)&&this.selectionRef?this.selectionRef.blur():this.getInputDOMNode()&&this.getInputDOMNode().blur()},markMouseDown:function(){this._mouseDown=!0},markMouseLeave:function(){this._mouseDown=!1},handleBackfill:function(e){if(this.backfill&&(R(this.$props)||F(this.$props))){var t=P(e);F(this.$props)&&this.setInputValue(t,!1),this.setState({_value:[t],_backfillValue:t})}},_filterOption:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:ee,r=this.$data,i=r._value,o=r._backfillValue,a=i[i.length-1];if(!e||a&&a===o)return!0;var s=this.$props.filterOption;return(0,w.cK)(this,"filterOption")?!0===s&&(s=n.bind(this)):s=n.bind(this),!s||("function"===typeof s?s.call(this,e,t):!(0,w.IV)(t,"disabled"))},timeoutFocus:function(){var e=this;this.focusTimer&&this.clearFocusTime(),this.focusTimer=window.setTimeout(function(){e.$emit("focus")},10)},clearFocusTime:function(){this.focusTimer&&(clearTimeout(this.focusTimer),this.focusTimer=null)},clearBlurTime:function(){this.blurTimer&&(clearTimeout(this.blurTimer),this.blurTimer=null)},clearComboboxTime:function(){this.comboboxTimer&&(clearTimeout(this.comboboxTimer),this.comboboxTimer=null)},updateFocusClassName:function(){var e=this.rootRef,t=this.prefixCls;this._focused?g()(e).add(t+"-focused"):g()(e).remove(t+"-focused")},maybeFocus:function(e,t){if(t||e){var n=this.getInputDOMNode(),r=document,i=r.activeElement;n&&(e||$(this.$props))?i!==n&&(n.focus(),this._focused=!0):i!==this.selectionRef&&this.selectionRef&&(this.selectionRef.focus(),this._focused=!0)}},removeSelected:function(e,t){var n=this.$props;if(!n.disabled&&!this.isChildDisabled(e)){t&&t.stopPropagation&&t.stopPropagation();var r=this.$data._value,i=r.filter(function(t){return t!==e}),o=I(n);if(o){var a=e;n.labelInValue&&(a={key:e,label:this.getLabelBySingleValue(e)}),this.$emit("deselect",a,this.getOptionBySingleValue(e))}this.fireChange(i)}},openIfHasChildren:function(){var e=this.$props;(e.children&&e.children.length||R(e))&&this.setOpenState(!0)},fireSelect:function(e){this.$emit("select",this.getVLBySingleValue(e),this.getOptionBySingleValue(e))},fireChange:function(e){(0,w.cK)(this,"value")||this.setState({_value:e},this.forcePopupAlign);var t=this.getVLForOnChange(e),n=this.getOptionsBySingleValue(e);this._valueOptions=n,this.$emit("change",t,I(this.$props)?n:n[0])},isChildDisabled:function(e){return(this.$props.children||[]).some(function(t){var n=P(t);return n===e&&(0,w.IV)(t,"disabled")})},forcePopupAlign:function(){this.$data._open&&this.selectTriggerRef&&this.selectTriggerRef.triggerRef&&this.selectTriggerRef.triggerRef.forcePopupAlign()},renderFilterOptions:function(){var e=this.$createElement,t=this.$data._inputValue,n=this.$props,r=n.children,o=n.tags,a=n.notFoundContent,c=[],l=[],u=!1,d=this.renderFilterOptionsFromChildren(r,l,c);if(o){var h=this.$data._value;if(h=h.filter(function(e){return-1===l.indexOf(e)&&(!t||String(e).indexOf(String(t))>-1)}),h.sort(function(e,t){return e.length-t.length}),h.forEach(function(t){var n=t,r=(0,s.A)({},J,{role:"option"}),o=e(y.A,i()([{style:G},{attrs:r},{attrs:{value:n},key:n}]),[n]);d.push(o),c.push(o)}),t&&c.every(function(e){return P(e)!==t})){var f={attrs:J,key:t,props:{value:t,role:"option"},style:G};d.unshift(e(y.A,f,[t]))}}if(!d.length&&a){u=!0;var p={attrs:J,key:"NOT_FOUND",props:{value:"NOT_FOUND",disabled:!0,role:"option"},style:G};d=[e(y.A,p,[a])]}return{empty:u,options:d}},renderFilterOptionsFromChildren:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=this,n=arguments[1],r=arguments[2],o=this.$createElement,a=[],c=this.$props,l=this.$data._inputValue,u=c.tags;return e.forEach(function(e){if(e.data&&void 0===e.data.slot)if((0,w.xr)(e).isSelectOptGroup){var c=(0,w.nu)(e,"label"),d=e.key;d||"string"!==typeof c?!c&&d&&(c=d):d=c;var h=(0,w.Sk)(e)["default"];if(h="function"===typeof h?h():h,l&&t._filterOption(l,e)){var f=h.map(function(e){var t=P(e)||e.key;return o(y.A,i()([{key:t,attrs:{value:t}},e.data]),[e.componentOptions.children])});a.push(o(_.A,{key:d,attrs:{title:c},class:(0,w.t0)(e)},[f]))}else{var p=t.renderFilterOptionsFromChildren(h,n,r);p.length&&a.push(o(_.A,i()([{key:d,attrs:{title:c}},e.data]),[p]))}}else{M()((0,w.xr)(e).isSelectOption,"the children of `Select` should be `Select.Option` or `Select.OptGroup`, instead of `"+((0,w.xr)(e).name||(0,w.xr)(e))+"`.");var m=P(e);if(te(m,t.$props),t._filterOption(l,e)){var v={attrs:(0,s.A)({},J,(0,w.Z0)(e)),key:m,props:(0,s.A)({value:m},(0,w.Ts)(e),{role:"option"}),style:G,on:(0,w.kQ)(e),class:(0,w.t0)(e)},g=o(y.A,v,[e.componentOptions.children]);a.push(g),r.push(g)}u&&n.push(m)}}),a},renderTopControlNode:function(){var e=this,t=this.$createElement,n=this.$props,r=this.$data,o=r._value,a=r._inputValue,c=r._open,l=n.choiceTransitionName,u=n.prefixCls,d=n.maxTagTextLength,h=n.maxTagCount,f=n.maxTagPlaceholder,p=n.showSearch,m=(0,w.nu)(this,"removeIcon"),v=u+"-selection__rendered",g=null;if(R(n)){var y=null;if(o.length){var _=!1,b=1;p&&c?(_=!a,_&&(b=.4)):_=!0;var M=o[0],A=this.getOptionInfoBySingleValue(M),k=A.label,L=A.title;y=t("div",{key:"value",class:u+"-selection-selected-value",attrs:{title:V(L||k)},style:{display:_?"block":"none",opacity:b}},[k])}g=p?[y,t("div",{class:u+"-search "+u+"-search--inline",key:"input",style:{display:c?"block":"none"}},[this._getInputElement()])]:[y]}else{var C=[],S=o,z=void 0;if(void 0!==h&&o.length>h){S=S.slice(0,h);var T=this.getVLForOnChange(o.slice(h,o.length)),O="+ "+(o.length-h)+" ...";f&&(O="function"===typeof f?f(T):f);var H=(0,s.A)({},J,{role:"presentation",title:V(O)});z=t("li",i()([{style:G},{attrs:H},{on:{mousedown:B},class:u+"-selection__choice "+u+"-selection__choice__disabled",key:"maxTagPlaceholder"}]),[t("div",{class:u+"-selection__choice__content"},[O])])}if(I(n)&&(C=S.map(function(n){var r=e.getOptionInfoBySingleValue(n),o=r.label,a=r.title||o;d&&"string"===typeof o&&o.length>d&&(o=o.slice(0,d)+"...");var c=e.isChildDisabled(n),l=c?u+"-selection__choice "+u+"-selection__choice__disabled":u+"-selection__choice",h=(0,s.A)({},J,{role:"presentation",title:V(a)});return t("li",i()([{style:G},{attrs:h},{on:{mousedown:B},class:l,key:n||ue}]),[t("div",{class:u+"-selection__choice__content"},[o]),c?null:t("span",{on:{click:function(t){e.removeSelected(n,t)}},class:u+"-selection__choice__remove"},[m||t("i",{class:u+"-selection__choice__remove-icon"},["×"])])])})),z&&C.push(z),C.push(t("li",{class:u+"-search "+u+"-search--inline",key:"__input"},[this._getInputElement()])),I(n)&&l){var D=(0,x.A)(l,{tag:"ul",afterLeave:this.onChoiceAnimationLeave});g=t("transition-group",D,[C])}else g=t("ul",[C])}return t("div",i()([{class:v},{directives:[{name:"ant-ref",value:this.saveTopCtrlRef}]},{on:{click:this.topCtrlContainerClick}}]),[this.getPlaceholderElement(),g])},renderArrow:function(e){var t=this.$createElement,n=this.$props,r=n.showArrow,o=void 0===r?!e:r,a=n.loading,s=n.prefixCls,c=(0,w.nu)(this,"inputIcon");if(!o&&!a)return null;var l=t("i",a?{class:s+"-arrow-loading"}:{class:s+"-arrow-icon"});return t("span",i()([{key:"arrow",class:s+"-arrow",style:G},{attrs:J},{on:{click:this.onArrowClick},ref:"arrow"}]),[c||l])},topCtrlContainerClick:function(e){this.$data._open&&!R(this.$props)&&e.stopPropagation()},renderClear:function(){var e=this.$createElement,t=this.$props,n=t.prefixCls,r=t.allowClear,o=this.$data,a=o._value,s=o._inputValue,c=(0,w.nu)(this,"clearIcon"),l=e("span",i()([{key:"clear",class:n+"-selection__clear",on:{mousedown:B},style:G},{attrs:J},{on:{click:this.onClearSelection}}]),[c||e("i",{class:n+"-selection__clear-icon"},["×"])]);return r?F(this.$props)?s?l:null:s||a.length?l:null:null},selectionRefClick:function(){if(!this.disabled){var e=this.getInputDOMNode();this._focused&&this.$data._open?(this.setOpenState(!1,!1),e&&e.blur()):(this.clearBlurTime(),this.setOpenState(!0,!0),e&&e.focus())}},selectionRefFocus:function(e){this._focused||this.disabled||$(this.$props)?e.preventDefault():(this._focused=!0,this.updateFocusClassName(),this.$emit("focus"))},selectionRefBlur:function(e){$(this.$props)?e.preventDefault():this.inputBlur(e)}},render:function(){var e,t=arguments[0],n=this.$props,r=I(n),a=n.showArrow,s=void 0===a||a,c=this.$data,l=n.disabled,u=n.prefixCls,d=n.loading,h=this.renderTopControlNode(),f=this.$data,p=f._open,v=f._inputValue,g=f._value;if(p){var y=this.renderFilterOptions();this._empty=y.empty,this._options=y.options}var _=this.getRealOpenState(),b=this._empty,M=this._options||[],A=(0,w.WM)(this),x=A.mouseenter,k=void 0===x?de:x,L=A.mouseleave,C=void 0===L?de:L,S=A.popupScroll,z=void 0===S?de:S,T={props:{},attrs:{role:"combobox","aria-autocomplete":"list","aria-haspopup":"true","aria-expanded":_,"aria-controls":this.$data._ariaId},on:{},class:u+"-selection "+u+"-selection--"+(r?"multiple":"single"),key:"selection"},O={attrs:{tabIndex:-1}};$(n)||(O.attrs.tabIndex=n.disabled?-1:n.tabIndex);var H=(e={},(0,o.A)(e,u,!0),(0,o.A)(e,u+"-open",p),(0,o.A)(e,u+"-focused",p||!!this._focused),(0,o.A)(e,u+"-combobox",F(n)),(0,o.A)(e,u+"-disabled",l),(0,o.A)(e,u+"-enabled",!l),(0,o.A)(e,u+"-allow-clear",!!n.allowClear),(0,o.A)(e,u+"-no-arrow",!s),(0,o.A)(e,u+"-loading",!!d),e);return t(ae,i()([{attrs:{dropdownAlign:n.dropdownAlign,dropdownClassName:n.dropdownClassName,dropdownMatchSelectWidth:n.dropdownMatchSelectWidth,defaultActiveFirstOption:n.defaultActiveFirstOption,dropdownMenuStyle:n.dropdownMenuStyle,transitionName:n.transitionName,animation:n.animation,prefixCls:n.prefixCls,dropdownStyle:n.dropdownStyle,combobox:n.combobox,showSearch:n.showSearch,options:M,empty:b,multiple:r,disabled:l,visible:_,inputValue:v,value:g,backfillValue:c._backfillValue,firstActiveValue:n.firstActiveValue,getPopupContainer:n.getPopupContainer,showAction:n.showAction,menuItemSelectedIcon:(0,w.nu)(this,"menuItemSelectedIcon")},on:{dropdownVisibleChange:this.onDropdownVisibleChange,menuSelect:this.onMenuSelect,menuDeselect:this.onMenuDeselect,popupScroll:z,popupFocus:this.onPopupFocus,mouseenter:k,mouseleave:C}},{directives:[{name:"ant-ref",value:this.saveSelectTriggerRef}]},{attrs:{dropdownRender:n.dropdownRender,ariaId:this.$data._ariaId}}]),[t("div",i()([{directives:[{name:"ant-ref",value:fe(this.saveRootRef,this.saveSelectionRef)}]},{style:(0,w.gd)(this),class:m()(H),on:{mousedown:this.markMouseDown,mouseup:this.markMouseLeave,mouseout:this.markMouseLeave}},O,{on:{blur:this.selectionRefBlur,focus:this.selectionRefFocus,click:this.selectionRefClick,keydown:$(n)?de:this.onKeyDown}}]),[t("div",T,[h,this.renderClear(),this.renderArrow(!!r)])])])}},me=((0,C.A)(pe),n(25592)),ve=n(40255),ge=n(44807),ye=function(){return{prefixCls:u.A.string,size:u.A.oneOf(["small","large","default"]),showAction:u.A.oneOfType([u.A.string,u.A.arrayOf(String)]),notFoundContent:u.A.any,transitionName:u.A.string,choiceTransitionName:u.A.string,showSearch:u.A.bool,allowClear:u.A.bool,disabled:u.A.bool,tabIndex:u.A.number,placeholder:u.A.any,defaultActiveFirstOption:u.A.bool,dropdownClassName:u.A.string,dropdownStyle:u.A.any,dropdownMenuStyle:u.A.any,dropdownMatchSelectWidth:u.A.bool,filterOption:u.A.oneOfType([u.A.bool,u.A.func]),autoFocus:u.A.bool,backfill:u.A.bool,showArrow:u.A.bool,getPopupContainer:u.A.func,open:u.A.bool,defaultOpen:u.A.bool,autoClearSearchValue:u.A.bool,dropdownRender:u.A.func,loading:u.A.bool}},_e=u.A.shape({key:u.A.oneOfType([u.A.string,u.A.number])}).loose,be=u.A.oneOfType([u.A.string,u.A.number,u.A.arrayOf(u.A.oneOfType([_e,u.A.string,u.A.number])),_e]),Me=(0,s.A)({},ye(),{value:be,defaultValue:be,mode:u.A.string,optionLabelProp:u.A.string,firstActiveValue:u.A.oneOfType([String,u.A.arrayOf(String)]),maxTagCount:u.A.number,maxTagPlaceholder:u.A.any,maxTagTextLength:u.A.number,dropdownMatchSelectWidth:u.A.bool,optionFilterProp:u.A.string,labelInValue:u.A.boolean,getPopupContainer:u.A.func,tokenSeparators:u.A.arrayOf(u.A.string),getInputElement:u.A.func,options:u.A.array,suffixIcon:u.A.any,removeIcon:u.A.any,clearIcon:u.A.any,menuItemSelectedIcon:u.A.any}),Ae={prefixCls:u.A.string,size:u.A.oneOf(["default","large","small"]),notFoundContent:u.A.any,showSearch:u.A.bool,optionLabelProp:u.A.string,transitionName:u.A.string,choiceTransitionName:u.A.string},we="SECRET_COMBOBOX_MODE_DO_NOT_USE",xe={SECRET_COMBOBOX_MODE_DO_NOT_USE:we,Option:(0,s.A)({},d.A,{name:"ASelectOption"}),OptGroup:(0,s.A)({},h.A,{name:"ASelectOptGroup"}),name:"ASelect",props:(0,s.A)({},Me,{showSearch:u.A.bool.def(!1),transitionName:u.A.string.def("slide-up"),choiceTransitionName:u.A.string.def("zoom")}),propTypes:Ae,model:{prop:"value",event:"change"},provide:function(){return{savePopupRef:this.savePopupRef}},inject:{configProvider:{default:function(){return me.f}}},created:function(){(0,c.A)("combobox"!==this.$props.mode,"Select","The combobox mode of Select is deprecated,it will be removed in next major version,please use AutoComplete instead")},methods:{getNotFoundContent:function(e){var t=this.$createElement,n=(0,w.nu)(this,"notFoundContent");return void 0!==n?n:this.isCombobox()?null:e(t,"Select")},savePopupRef:function(e){this.popupRef=e},focus:function(){this.$refs.vcSelect.focus()},blur:function(){this.$refs.vcSelect.blur()},isCombobox:function(){var e=this.mode;return"combobox"===e||e===we},renderSuffixIcon:function(e){var t=this.$createElement,n=this.$props.loading,r=(0,w.nu)(this,"suffixIcon");return r=Array.isArray(r)?r[0]:r,r?(0,w.zO)(r)?(0,k.Ob)(r,{class:e+"-arrow-icon"}):r:t(ve.A,n?{attrs:{type:"loading"}}:{attrs:{type:"down"},class:e+"-arrow-icon"})}},render:function(){var e,t=arguments[0],n=(0,w.Oq)(this),r=n.prefixCls,c=n.size,u=n.mode,h=n.options,f=n.getPopupContainer,p=n.showArrow,m=(0,a.A)(n,["prefixCls","size","mode","options","getPopupContainer","showArrow"]),v=this.configProvider.getPrefixCls,g=this.configProvider.renderEmpty,y=v("select",r),_=this.configProvider.getPopupContainer,b=(0,w.nu)(this,"removeIcon");b=Array.isArray(b)?b[0]:b;var M=(0,w.nu)(this,"clearIcon");M=Array.isArray(M)?M[0]:M;var A=(0,w.nu)(this,"menuItemSelectedIcon");A=Array.isArray(A)?A[0]:A;var x=(0,l.A)(m,["inputIcon","removeIcon","clearIcon","suffixIcon","menuItemSelectedIcon"]),L=(e={},(0,o.A)(e,y+"-lg","large"===c),(0,o.A)(e,y+"-sm","small"===c),(0,o.A)(e,y+"-show-arrow",p),e),C=this.$props.optionLabelProp;this.isCombobox()&&(C=C||"value");var S={multiple:"multiple"===u,tags:"tags"===u,combobox:this.isCombobox()},z=b&&((0,w.zO)(b)?(0,k.Ob)(b,{class:y+"-remove-icon"}):b)||t(ve.A,{attrs:{type:"close"},class:y+"-remove-icon"}),T=M&&((0,w.zO)(M)?(0,k.Ob)(M,{class:y+"-clear-icon"}):M)||t(ve.A,{attrs:{type:"close-circle",theme:"filled"},class:y+"-clear-icon"}),O=A&&((0,w.zO)(A)?(0,k.Ob)(A,{class:y+"-selected-icon"}):A)||t(ve.A,{attrs:{type:"check"},class:y+"-selected-icon"}),H={props:(0,s.A)({inputIcon:this.renderSuffixIcon(y),removeIcon:z,clearIcon:T,menuItemSelectedIcon:O,showArrow:p},x,S,{prefixCls:y,optionLabelProp:C||"children",notFoundContent:this.getNotFoundContent(g),maxTagPlaceholder:(0,w.nu)(this,"maxTagPlaceholder"),placeholder:(0,w.nu)(this,"placeholder"),children:h?h.map(function(e){var n=e.key,r=e.label,o=void 0===r?e.title:r,s=e.on,c=e["class"],l=e.style,u=(0,a.A)(e,["key","label","on","class","style"]);return t(d.A,i()([{key:n},{props:u,on:s,class:c,style:l}]),[o])}):(0,w.Gk)(this.$slots["default"]),__propsSymbol__:Symbol(),dropdownRender:(0,w.nu)(this,"dropdownRender",{},!1),getPopupContainer:f||_}),on:(0,w.WM)(this),class:L,ref:"vcSelect"};return t(pe,H)},install:function(e){e.use(ge.A),e.component(xe.name,xe),e.component(xe.Option.name,xe.Option),e.component(xe.OptGroup.name,xe.OptGroup)}},ke=xe},22050:function(e,t,n){"use strict";n(29229),n(93693)},68263:function(e,t,n){"use strict";n.d(t,{A:function(){return H}});var r=n(44508),i=n(85505),o=n(97479),a=n(46942),s=n.n(a),c=n(4718),l=n(15848),u=n(25592),d={prefixCls:c.A.string,size:c.A.oneOfType([c.A.oneOf(["large","small","default"]),c.A.number]),shape:c.A.oneOf(["circle","square"])},h=c.A.shape(d).loose,f={props:(0,l.CB)(d,{size:"large"}),render:function(){var e,t,n=arguments[0],i=this.$props,o=i.prefixCls,a=i.size,c=i.shape,l=s()((e={},(0,r.A)(e,o+"-lg","large"===a),(0,r.A)(e,o+"-sm","small"===a),e)),u=s()((t={},(0,r.A)(t,o+"-circle","circle"===c),(0,r.A)(t,o+"-square","square"===c),t)),d="number"===typeof a?{width:a+"px",height:a+"px",lineHeight:a+"px"}:{};return n("span",{class:s()(o,l,u),style:d})}},p=f,m={prefixCls:c.A.string,width:c.A.oneOfType([c.A.number,c.A.string])},v=c.A.shape(m),g={props:m,render:function(){var e=arguments[0],t=this.$props,n=t.prefixCls,r=t.width,i="number"===typeof r?r+"px":r;return e("h3",{class:n,style:{width:i}})}},y=g,_=n(32779),b=c.A.oneOfType([c.A.number,c.A.string]),M={prefixCls:c.A.string,width:c.A.oneOfType([b,c.A.arrayOf(b)]),rows:c.A.number},A=c.A.shape(M),w={props:M,methods:{getWidth:function(e){var t=this.width,n=this.rows,r=void 0===n?2:n;return Array.isArray(t)?t[e]:r-1===e?t:void 0}},render:function(){var e=this,t=arguments[0],n=this.$props,r=n.prefixCls,i=n.rows,o=[].concat((0,_.A)(Array(i))).map(function(n,r){var i=e.getWidth(r);return t("li",{key:r,style:{width:"number"===typeof i?i+"px":i}})});return t("ul",{class:r},[o])}},x=w,k=n(44807),L={active:c.A.bool,loading:c.A.bool,prefixCls:c.A.string,children:c.A.any,avatar:c.A.oneOfType([c.A.string,h,c.A.bool]),title:c.A.oneOfType([c.A.bool,c.A.string,v]),paragraph:c.A.oneOfType([c.A.bool,c.A.string,A])};function C(e){return e&&"object"===("undefined"===typeof e?"undefined":(0,o.A)(e))?e:{}}function S(e,t){return e&&!t?{shape:"square"}:{shape:"circle"}}function z(e,t){return!e&&t?{width:"38%"}:e&&t?{width:"50%"}:{}}function T(e,t){var n={};return e&&t||(n.width="61%"),n.rows=!e&&t?3:2,n}var O={name:"ASkeleton",props:(0,l.CB)(L,{avatar:!1,title:!0,paragraph:!0}),inject:{configProvider:{default:function(){return u.f}}},render:function(){var e=arguments[0],t=this.$props,n=t.prefixCls,o=t.loading,a=t.avatar,c=t.title,u=t.paragraph,d=t.active,h=this.configProvider.getPrefixCls,f=h("skeleton",n);if(o||!(0,l.cK)(this,"loading")){var m,v=!!a||""===a,g=!!c,_=!!u,b=void 0;if(v){var M={props:(0,i.A)({prefixCls:f+"-avatar"},S(g,_),C(a))};b=e("div",{class:f+"-header"},[e(p,M)])}var A=void 0;if(g||_){var w=void 0;if(g){var k={props:(0,i.A)({prefixCls:f+"-title"},z(v,_),C(c))};w=e(y,k)}var L=void 0;if(_){var O={props:(0,i.A)({prefixCls:f+"-paragraph"},T(v,g),C(u))};L=e(x,O)}A=e("div",{class:f+"-content"},[w,L])}var H=s()(f,(m={},(0,r.A)(m,f+"-with-avatar",v),(0,r.A)(m,f+"-active",d),m));return e("div",{class:H},[b,A])}var D=this.$slots["default"];return D&&1===D.length?D[0]:e("span",[D])},install:function(e){e.use(k.A),e.component(O.name,O)}},H=O},15731:function(e,t,n){"use strict";n(29229)},8442:function(e,t,n){"use strict";var r=n(75189),i=n.n(r),o=n(44508),a=n(4718),s=n(15848),c=n(25592),l=a.A.oneOfType([a.A.number,a.A.oneOf(["small","middle","large"])]),u={small:8,middle:16,large:24},d={prefixCls:a.A.string,size:l,direction:a.A.oneOf(["horizontal","vertical"]),align:a.A.oneOf(["start","end","center","baseline"])},h={functional:!0,name:"ASpace",props:(0,s.CB)(d,{size:"small",direction:"horizontal"}),inject:{configProvider:{default:function(){return c.f}}},render:function(e,t){var n,r=t.prefixCls,a=t.injections.configProvider,c=t.children,l=t.props,d=l.align,h=l.size,f=l.direction,p=a.getPrefixCls,m=p("space",r),v=(0,s.Gk)(c),g=v.length;if(0===g)return null;var y=void 0===d&&"horizontal"===f?"center":d,_=[(n={},(0,o.A)(n,m,!0),(0,o.A)(n,m+"-"+f,!0),(0,o.A)(n,m+"-align-"+y,y),n)];t.data["class"]&&_.push(t.data["class"]);var b=m+"-item",M="marginRight";return e("div",i()([t.data,{class:_}]),[v.map(function(t,n){return e("div",{class:b,key:b+"-"+n,style:n===g-1?{}:(0,o.A)({},"vertical"===f?"marginBottom":M,"string"===typeof h?u[h]+"px":h+"px")},[t])})])},install:function(e){e.component(h.name,h)}};t.Ay=h},33272:function(e,t,n){"use strict";n(29229)},64258:function(e,t,n){"use strict";n.d(t,{Lt:function(){return y},N0:function(){return m}});var r=n(75189),i=n.n(r),o=n(44508),a=n(5748),s=n(38221),c=n.n(s),l=n(4718),u=n(52315),d=n(15848),h=n(51927),f=n(25592),p=l.A.oneOf(["small","default","large"]),m=function(){return{prefixCls:l.A.string,spinning:l.A.bool,size:p,wrapperClassName:l.A.string,tip:l.A.string,delay:l.A.number,indicator:l.A.any}},v=void 0;function g(e,t){return!!e&&!!t&&!isNaN(Number(t))}function y(e){v="function"===typeof e.indicator?e.indicator:function(t){return t(e.indicator)}}t.Ay={name:"ASpin",mixins:[u.A],props:(0,d.CB)(m(),{size:"default",spinning:!0,wrapperClassName:""}),inject:{configProvider:{default:function(){return f.f}}},data:function(){var e=this.spinning,t=this.delay,n=g(e,t);return this.originalUpdateSpinning=this.updateSpinning,this.debouncifyUpdateSpinning(this.$props),{sSpinning:e&&!n}},mounted:function(){this.updateSpinning()},updated:function(){var e=this;this.$nextTick(function(){e.debouncifyUpdateSpinning(),e.updateSpinning()})},beforeDestroy:function(){this.cancelExistingSpin()},methods:{debouncifyUpdateSpinning:function(e){var t=e||this.$props,n=t.delay;n&&(this.cancelExistingSpin(),this.updateSpinning=c()(this.originalUpdateSpinning,n))},updateSpinning:function(){var e=this.spinning,t=this.sSpinning;t!==e&&this.setState({sSpinning:e})},cancelExistingSpin:function(){var e=this.updateSpinning;e&&e.cancel&&e.cancel()},getChildren:function(){return this.$slots&&this.$slots["default"]?(0,d.Gk)(this.$slots["default"]):null},renderIndicator:function(e,t){var n=t+"-dot",r=(0,d.nu)(this,"indicator");return null===r?null:(Array.isArray(r)&&(r=(0,d.Gk)(r),r=1===r.length?r[0]:r),(0,d.zO)(r)?(0,h.Ob)(r,{class:n}):v&&(0,d.zO)(v(e))?(0,h.Ob)(v(e),{class:n}):e("span",{class:n+" "+t+"-dot-spin"},[e("i",{class:t+"-dot-item"}),e("i",{class:t+"-dot-item"}),e("i",{class:t+"-dot-item"}),e("i",{class:t+"-dot-item"})]))}},render:function(e){var t,n=this.$props,r=n.size,s=n.prefixCls,c=n.tip,l=n.wrapperClassName,u=(0,a.A)(n,["size","prefixCls","tip","wrapperClassName"]),h=this.configProvider.getPrefixCls,f=h("spin",s),p=this.sSpinning,m=(t={},(0,o.A)(t,f,!0),(0,o.A)(t,f+"-sm","small"===r),(0,o.A)(t,f+"-lg","large"===r),(0,o.A)(t,f+"-spinning",p),(0,o.A)(t,f+"-show-text",!!c),t),v=e("div",i()([u,{class:m}]),[this.renderIndicator(e,f),c?e("div",{class:f+"-text"},[c]):null]),g=this.getChildren();if(g){var y,_=(y={},(0,o.A)(y,f+"-container",!0),(0,o.A)(y,f+"-blur",p),y);return e("div",i()([{on:(0,d.WM)(this)},{class:[f+"-nested-loading",l]}]),[p&&e("div",{key:"loading"},[v]),e("div",{class:_,key:"container"},[g])])}return v}}},82840:function(e,t,n){"use strict";var r=n(64258),i=n(44807);r.Ay.setDefaultIndicator=r.Lt,r.Ay.install=function(e){e.use(i.A),e.component(r.Ay.name,r.Ay)},t.A=r.Ay},45562:function(e,t,n){"use strict";n(29229)},60304:function(e,t,n){"use strict";n.d(t,{A:function(){return L}});var r=n(85505),i=n(4718),o=n(15848),a=n(25592),s=n(97948),c=n.n(s),l={name:"AStatisticNumber",functional:!0,render:function(e,t){var n=t.props,r=n.value,i=n.formatter,o=n.precision,a=n.decimalSeparator,s=n.groupSeparator,l=void 0===s?"":s,u=n.prefixCls,d=void 0;if("function"===typeof i)d=i({value:r,h:e});else{var h=String(r),f=h.match(/^(-?)(\d*)(\.(\d+))?$/);if(f){var p=f[1],m=f[2]||"0",v=f[4]||"";m=m.replace(/\B(?=(\d{3})+(?!\d))/g,l),"number"===typeof o&&(v=c()(v,o,"0").slice(0,o)),v&&(v=""+a+v),d=[e("span",{key:"int",class:u+"-content-value-int"},[p,m]),v&&e("span",{key:"decimal",class:u+"-content-value-decimal"},[v])]}else d=h}return e("span",{class:u+"-content-value"},[d])}},u={prefixCls:i.A.string,decimalSeparator:i.A.string,groupSeparator:i.A.string,format:i.A.string,value:i.A.oneOfType([i.A.string,i.A.number,i.A.object]),valueStyle:i.A.any,valueRender:i.A.any,formatter:i.A.any,precision:i.A.number,prefix:i.A.any,suffix:i.A.any,title:i.A.any},d={name:"AStatistic",props:(0,o.CB)(u,{decimalSeparator:".",groupSeparator:","}),inject:{configProvider:{default:function(){return a.f}}},render:function(){var e=arguments[0],t=this.$props,n=t.prefixCls,i=t.value,a=void 0===i?0:i,s=t.valueStyle,c=t.valueRender,u=this.configProvider.getPrefixCls,d=u("statistic",n),h=(0,o.nu)(this,"title"),f=(0,o.nu)(this,"prefix"),p=(0,o.nu)(this,"suffix"),m=(0,o.nu)(this,"formatter",{},!1),v=e(l,{props:(0,r.A)({},this.$props,{prefixCls:d,value:a,formatter:m})});return c&&(v=c(v)),e("div",{class:d},[h&&e("div",{class:d+"-title"},[h]),e("div",{style:s,class:d+"-content"},[f&&e("span",{class:d+"-content-prefix"},[f]),v,p&&e("span",{class:d+"-content-suffix"},[p])])])}},h=n(75189),f=n.n(h),p=n(95093),m=n(67287),v=n(52040),g=n(52037),y=n.n(g),_=[["Y",31536e6],["M",2592e6],["D",864e5],["H",36e5],["m",6e4],["s",1e3],["S",1]];function b(e,t){var n=e,r=/\[[^\]]*\]/g,i=(t.match(r)||[]).map(function(e){return e.slice(1,-1)}),o=t.replace(r,"[]"),a=_.reduce(function(e,t){var r=(0,v.A)(t,2),i=r[0],o=r[1];if(-1!==e.indexOf(i)){var a=Math.floor(n/o);return n-=a*o,e.replace(new RegExp(i+"+","g"),function(e){var t=e.length;return y()(a.toString(),t,"0")})}return e},o),s=0;return a.replace(r,function(){var e=i[s];return s+=1,e})}function M(e,t){var n=t.format,r=void 0===n?"":n,i=(0,m.A)(p)(e).valueOf(),o=(0,m.A)(p)().valueOf(),a=Math.max(i-o,0);return b(a,r)}var A=1e3/30;function w(e){return(0,m.A)(p)(e).valueOf()}var x={name:"AStatisticCountdown",props:(0,o.CB)(u,{format:"HH:mm:ss"}),created:function(){this.countdownId=void 0},mounted:function(){this.syncTimer()},updated:function(){this.syncTimer()},beforeDestroy:function(){this.stopTimer()},methods:{syncTimer:function(){var e=this.$props.value,t=w(e);t>=Date.now()?this.startTimer():this.stopTimer()},startTimer:function(){var e=this;this.countdownId||(this.countdownId=window.setInterval(function(){e.$refs.statistic.$forceUpdate(),e.syncTimer()},A))},stopTimer:function(){var e=this.$props.value;if(this.countdownId){clearInterval(this.countdownId),this.countdownId=void 0;var t=w(e);t0&&(this.calcTimeout&&clearTimeout(this.calcTimeout),this.calcTimeout=setTimeout(function(){var r=(n.lastChild.offsetWidth||0)+1;t===r||Math.abs(t-r)<=3||e.setState({lastStepOffsetWidth:r})}))}}},render:function(){var e,t=this,n=arguments[0],i=this.prefixCls,s=this.direction,c=this.type,l=this.labelPlacement,u=this.iconPrefix,h=this.status,f=this.size,p=this.current,m=this.$scopedSlots,v=this.initial,g=this.icons,y="navigation"===c,_=this.progressDot;void 0===_&&(_=m.progressDot);var b=this.lastStepOffsetWidth,M=this.flexSupported,A=(0,o.Gk)(this.$slots["default"]),w=A.length-1,x=_?"vertical":l,k=(e={},(0,a.A)(e,i,!0),(0,a.A)(e,i+"-"+s,!0),(0,a.A)(e,i+"-"+f,f),(0,a.A)(e,i+"-label-"+x,"horizontal"===s),(0,a.A)(e,i+"-dot",!!_),(0,a.A)(e,i+"-navigation",y),(0,a.A)(e,i+"-flex-not-supported",!M),e),L=(0,o.WM)(this),C={class:k,ref:"vcStepsRef",on:L};return n("div",C,[A.map(function(e,n){var a=(0,o.Ts)(e),c=v+n,l={props:(0,r.A)({stepNumber:""+(c+1),stepIndex:c,prefixCls:i,iconPrefix:u,progressDot:t.progressDot,icons:g},a),on:(0,o.kQ)(e),scopedSlots:m};return L.change&&(l.on.stepClick=t.onStepClick),M||"vertical"===s||(y?(l.props.itemWidth=100/(w+1)+"%",l.props.adjustMarginRight=0):n!==w&&(l.props.itemWidth=100/w+"%",l.props.adjustMarginRight=-Math.round(b/w+1)+"px")),"error"===h&&n===p-1&&(l["class"]=i+"-next-error"),a.status||(l.props.status=c===p?h:c0&&void 0!==arguments[0]?arguments[0]:{},t={prefixCls:i.A.string,iconPrefix:i.A.string,current:i.A.number,initial:i.A.number,labelPlacement:i.A.oneOf(["horizontal","vertical"]).def("horizontal"),status:i.A.oneOf(["wait","process","finish","error"]),size:i.A.oneOf(["default","small"]),direction:i.A.oneOf(["horizontal","vertical"]),progressDot:i.A.oneOfType([i.A.bool,i.A.func]),type:i.A.oneOf(["default","navigation"])};return(0,o.CB)(t,e)},x={name:"ASteps",props:w({current:0}),inject:{configProvider:{default:function(){return M.f}}},model:{prop:"current",event:"change"},Step:(0,r.A)({},_.Step,{name:"AStep"}),render:function(){var e=arguments[0],t=(0,o.Oq)(this),n=t.prefixCls,i=t.iconPrefix,a=this.configProvider.getPrefixCls,s=a("steps",n),c=a("",i),l={finish:e(b.A,{attrs:{type:"check"},class:s+"-finish-icon"}),error:e(b.A,{attrs:{type:"close"},class:s+"-error-icon"})},u={props:(0,r.A)({icons:l,iconPrefix:c,prefixCls:s},t),on:(0,o.WM)(this),scopedSlots:this.$scopedSlots};return e(_,u,[this.$slots["default"]])},install:function(e){e.use(A.A),e.component(x.name,x),e.component(x.Step.name,x.Step)}},k=x},36463:function(e,t,n){"use strict";n(29229)},91997:function(e,t,n){"use strict";n.d(t,{A:function(){return y}});var r=n(85505),i=n(44508),o=n(5748),a=n(4718),s=n(15848),c={prefixCls:a.A.string,disabled:a.A.bool.def(!1),checkedChildren:a.A.any,unCheckedChildren:a.A.any,tabIndex:a.A.oneOfType([a.A.string,a.A.number]),checked:a.A.bool.def(!1),defaultChecked:a.A.bool.def(!1),autoFocus:a.A.bool.def(!1),loadingIcon:a.A.any},l=n(52315),u={name:"VcSwitch",mixins:[l.A],model:{prop:"checked",event:"change"},props:(0,r.A)({},c,{prefixCls:c.prefixCls.def("rc-switch")}),data:function(){var e=!1;return e=(0,s.cK)(this,"checked")?!!this.checked:!!this.defaultChecked,{stateChecked:e}},watch:{checked:function(e){this.stateChecked=e}},mounted:function(){var e=this;this.$nextTick(function(){var t=e.autoFocus,n=e.disabled;t&&!n&&e.focus()})},methods:{setChecked:function(e,t){this.disabled||((0,s.cK)(this,"checked")||(this.stateChecked=e),this.$emit("change",e,t))},handleClick:function(e){var t=!this.stateChecked;this.setChecked(t,e),this.$emit("click",t,e)},handleKeyDown:function(e){37===e.keyCode?this.setChecked(!1,e):39===e.keyCode&&this.setChecked(!0,e)},handleMouseUp:function(e){this.$refs.refSwitchNode&&this.$refs.refSwitchNode.blur(),this.$emit("mouseup",e)},focus:function(){this.$refs.refSwitchNode.focus()},blur:function(){this.$refs.refSwitchNode.blur()}},render:function(){var e,t=arguments[0],n=(0,s.Oq)(this),a=n.prefixCls,c=n.disabled,l=n.loadingIcon,u=n.tabIndex,d=(0,o.A)(n,["prefixCls","disabled","loadingIcon","tabIndex"]),h=this.stateChecked,f=(e={},(0,i.A)(e,a,!0),(0,i.A)(e,a+"-checked",h),(0,i.A)(e,a+"-disabled",c),e),p={props:(0,r.A)({},d),on:(0,r.A)({},(0,s.WM)(this),{keydown:this.handleKeyDown,click:this.handleClick,mouseup:this.handleMouseUp}),attrs:{type:"button",role:"switch","aria-checked":h,disabled:c,tabIndex:u},class:f,ref:"refSwitchNode"};return t("button",p,[l,t("span",{class:a+"-inner"},[h?(0,s.nu)(this,"checkedChildren"):(0,s.nu)(this,"unCheckedChildren")])])}},d=u,h=n(98416),f=n(40255),p=n(25592),m=n(44807),v=n(36873),g={name:"ASwitch",__ANT_SWITCH:!0,model:{prop:"checked",event:"change"},props:{prefixCls:a.A.string,size:a.A.oneOf(["small","default","large"]),disabled:a.A.bool,checkedChildren:a.A.any,unCheckedChildren:a.A.any,tabIndex:a.A.oneOfType([a.A.string,a.A.number]),checked:a.A.bool,defaultChecked:a.A.bool,autoFocus:a.A.bool,loading:a.A.bool},inject:{configProvider:{default:function(){return p.f}}},methods:{focus:function(){this.$refs.refSwitchNode.focus()},blur:function(){this.$refs.refSwitchNode.blur()}},created:function(){(0,v.A)((0,s.Ay)(this,"checked")||!(0,s.Ay)(this,"value"),"Switch","`value` is not validate prop, do you mean `checked`?")},render:function(){var e,t=arguments[0],n=(0,s.Oq)(this),a=n.prefixCls,c=n.size,l=n.loading,u=n.disabled,p=(0,o.A)(n,["prefixCls","size","loading","disabled"]),m=this.configProvider.getPrefixCls,v=m("switch",a),g=(e={},(0,i.A)(e,v+"-small","small"===c),(0,i.A)(e,v+"-loading",l),e),y=l?t(f.A,{attrs:{type:"loading"},class:v+"-loading-icon"}):null,_={props:(0,r.A)({},p,{prefixCls:v,loadingIcon:y,checkedChildren:(0,s.nu)(this,"checkedChildren"),unCheckedChildren:(0,s.nu)(this,"unCheckedChildren"),disabled:u||l}),on:(0,s.WM)(this),class:g,ref:"refSwitchNode"};return t(h.A,{attrs:{insertExtraNode:!0}},[t(d,_)])},install:function(e){e.use(m.A),e.component(g.name,g)}},y=g},53966:function(e,t,n){"use strict";n(29229)},76806:function(e,t,n){"use strict";n.d(t,{A:function(){return At}});var r=n(85505),i=n(5748),o=n(44508),a=n(32779),s=n(97479),c=void 0,l=void 0,u={position:"absolute",top:"-9999px",width:"50px",height:"50px"},d="RC_TABLE_INTERNAL_COL_DEFINE";function h(e){var t=e.direction,n=void 0===t?"vertical":t,r=e.prefixCls;if("undefined"===typeof document||"undefined"===typeof window)return 0;var i="vertical"===n;if(i&&c)return c;if(!i&&l)return l;var o=document.createElement("div");Object.keys(u).forEach(function(e){o.style[e]=u[e]}),o.className=r+"-hide-scrollbar scroll-div-append-to-body",i?o.style.overflowY="scroll":o.style.overflowX="scroll",document.body.appendChild(o);var a=0;return i?(a=o.offsetWidth-o.clientWidth,c=a):(a=o.offsetHeight-o.clientHeight,l=a),document.body.removeChild(o),a}function f(e,t,n){var r=void 0;function i(){for(var i=arguments.length,o=Array(i),a=0;a1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];o[n]=o[n]||[];var a=[],s=function(e){var t=o.length-n;e&&!e.children&&t>1&&(!e.rowSpan||e.rowSpan0?(u.children=e(u.children,n+1,u,o),i.colSpan+=u.colSpan):i.colSpan+=1;for(var d=0;d0})}var E={name:"TableHeader",props:{fixed:k.A.string,columns:k.A.array.isRequired,expander:k.A.object.isRequired},inject:{table:{default:function(){return{}}}},render:function(){var e=arguments[0],t=this.table,n=t.sComponents,r=t.prefixCls,i=t.showHeader,o=t.customHeaderRow,a=this.expander,s=this.columns,c=this.fixed;if(!i)return null;var l=P({columns:s});a.renderExpandIndentCell(l,c);var u=n.header.wrapper;return e(u,{class:r+"-thead"},[l.map(function(t,i){return e(V,{attrs:{prefixCls:r,index:i,fixed:c,columns:s,rows:l,row:t,components:n,customHeaderRow:o},key:i})})])}},j=n(58156),F=n.n(j);function I(e){return e&&!(0,D.zO)(e)&&"[object Object]"===Object.prototype.toString.call(e)}var $={name:"TableCell",props:{record:k.A.object,prefixCls:k.A.string,index:k.A.number,indent:k.A.number,indentSize:k.A.number,column:k.A.object,expandIcon:k.A.any,component:k.A.any},inject:{table:{default:function(){return{}}}},methods:{handleClick:function(e){var t=this.record,n=this.column.onCellClick;n&&n(t,e)}},render:function(){var e,t=arguments[0],n=this.record,i=this.indentSize,a=this.prefixCls,s=this.indent,c=this.index,l=this.expandIcon,u=this.column,d=this.component,h=u.dataIndex,f=u.customRender,p=u.className,m=void 0===p?"":p,g=this.table.transformCellText,y=void 0;y="number"===typeof h||h&&0!==h.length?F()(n,h):n;var _={props:{},attrs:{},on:{click:this.handleClick}},b=void 0,M=void 0;f&&(y=f(y,n,c,u),I(y)&&(_.attrs=y.attrs||{},_.props=y.props||{},_["class"]=y["class"],_.style=y.style,b=_.attrs.colSpan,M=_.attrs.rowSpan,y=y.children)),u.customCell&&(_=(0,D.v6)(_,u.customCell(n,c))),I(y)&&(y=null),g&&(y=g({text:y,column:u,record:n,index:c}));var A=l?t("span",{style:{paddingLeft:i*s+"px"},class:a+"-indent indent-level-"+s}):null;if(0===M||0===b)return null;u.align&&(_.style=(0,r.A)({textAlign:u.align},_.style));var w=x()(m,u["class"],(e={},(0,o.A)(e,a+"-cell-ellipsis",!!u.ellipsis),(0,o.A)(e,a+"-cell-break-word",!!u.width),e));return u.ellipsis&&"string"===typeof y&&(_.attrs.title=y),t(d,v()([{class:w},_]),[A,l,y])}},R=n(52315);function N(){}var W={name:"TableRow",mixins:[R.A],inject:{store:{from:"table-store",default:function(){return{}}}},props:(0,D.CB)({customRow:k.A.func,record:k.A.object,prefixCls:k.A.string,columns:k.A.array,index:k.A.number,rowKey:k.A.oneOfType([k.A.string,k.A.number]).isRequired,className:k.A.string,indent:k.A.number,indentSize:k.A.number,hasExpandIcon:k.A.func,fixed:k.A.oneOfType([k.A.string,k.A.bool]),renderExpandIcon:k.A.func,renderExpandIconCell:k.A.func,components:k.A.any,expandedRow:k.A.bool,isAnyColumnsFixed:k.A.bool,ancestorKeys:k.A.array.isRequired,expandIconColumnIndex:k.A.number,expandRowByClick:k.A.bool},{hasExpandIcon:function(){},renderExpandIcon:function(){},renderExpandIconCell:function(){}}),computed:{visible:function(){var e=this.store.expandedRowKeys,t=this.$props.ancestorKeys;return!(0!==t.length&&!t.every(function(t){return e.includes(t)}))},height:function(){var e=this.store,t=e.expandedRowsHeight,n=e.fixedColumnsBodyRowsHeight,r=this.$props,i=r.fixed,o=r.rowKey;return i?t[o]?t[o]:n[o]?n[o]:null:null},hovered:function(){var e=this.store.currentHoverKey,t=this.$props.rowKey;return e===t}},data:function(){return{shouldRender:this.visible}},mounted:function(){var e=this;this.shouldRender&&this.$nextTick(function(){e.saveRowRef()})},watch:{visible:{handler:function(e){e&&(this.shouldRender=!0)},immediate:!0}},updated:function(){var e=this;this.shouldRender&&!this.rowRef&&this.$nextTick(function(){e.saveRowRef()})},methods:{onRowClick:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:N,n=this.record,r=this.index;this.__emit("rowClick",n,r,e),t(e)},onRowDoubleClick:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:N,n=this.record,r=this.index;this.__emit("rowDoubleClick",n,r,e),t(e)},onContextMenu:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:N,n=this.record,r=this.index;this.__emit("rowContextmenu",n,r,e),t(e)},onMouseEnter:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:N,n=this.record,r=this.index,i=this.rowKey;this.__emit("hover",!0,i),this.__emit("rowMouseenter",n,r,e),t(e)},onMouseLeave:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:N,n=this.record,r=this.index,i=this.rowKey;this.__emit("hover",!1,i),this.__emit("rowMouseleave",n,r,e),t(e)},setExpandedRowHeight:function(){var e=this.store,t=this.rowKey,n=e.expandedRowsHeight,i=this.rowRef.getBoundingClientRect().height;n=(0,r.A)({},n,(0,o.A)({},t,i)),e.expandedRowsHeight=n},setRowHeight:function(){var e=this.store,t=this.rowKey,n=e.fixedColumnsBodyRowsHeight,i=this.rowRef.getBoundingClientRect().height;e.fixedColumnsBodyRowsHeight=(0,r.A)({},n,(0,o.A)({},t,i))},getStyle:function(){var e=this.height,t=this.visible,n=(0,D.gd)(this);return e&&(n=(0,r.A)({},n,{height:e})),t||n.display||(n=(0,r.A)({},n,{display:"none"})),n},saveRowRef:function(){this.rowRef=this.$el;var e=this.isAnyColumnsFixed,t=this.fixed,n=this.expandedRow,r=this.ancestorKeys;e&&(!t&&n&&this.setExpandedRowHeight(),!t&&r.length>=0&&this.setRowHeight())}},render:function(){var e=this,t=arguments[0];if(!this.shouldRender)return null;var n=this.prefixCls,o=this.columns,a=this.record,s=this.rowKey,c=this.index,l=this.customRow,u=void 0===l?N:l,d=this.indent,h=this.indentSize,f=this.hovered,p=this.height,m=this.visible,v=this.components,g=this.hasExpandIcon,y=this.renderExpandIcon,_=this.renderExpandIconCell,b=v.body.row,M=v.body.cell,A="";f&&(A+=" "+n+"-hover");var w=[];_(w);for(var k=0;k2&&void 0!==arguments[2]?arguments[2]:[],o=this.$createElement,a=this.table,s=a.columnManager,c=a.sComponents,l=a.prefixCls,u=a.childrenColumnName,d=a.rowClassName,h=a.customRow,f=void 0===h?G:h,p=(0,D.WM)(this.table),m=p.rowClick,v=void 0===m?G:m,g=p.rowDoubleclick,y=void 0===g?G:g,_=p.rowContextmenu,b=void 0===_?G:_,M=p.rowMouseenter,A=void 0===M?G:M,w=p.rowMouseleave,x=void 0===w?G:w,k=this.getRowKey,L=this.fixed,C=this.expander,S=this.isAnyColumnsFixed,z=[],T=function(a){var h=e[a],p=k(h,a),m="string"===typeof d?d:d(h,a,t),g={};s.isAnyColumnsFixed()&&(g.hover=n.handleRowHover);var _=void 0;_="left"===L?s.leftLeafColumns():"right"===L?s.rightLeafColumns():n.getColumns(s.leafColumns());var M=l+"-row",w={props:(0,r.A)({},C.props,{fixed:L,index:a,prefixCls:M,record:h,rowKey:p,needIndentSpaced:C.needIndentSpaced}),key:p,on:{rowClick:v,expandedChange:C.handleExpandChange},scopedSlots:{default:function(e){var n=(0,D.v6)({props:{fixed:L,indent:t,record:h,index:a,prefixCls:M,childrenColumnName:u,columns:_,rowKey:p,ancestorKeys:i,components:c,isAnyColumnsFixed:S,customRow:f},on:(0,r.A)({rowDoubleclick:y,rowContextmenu:b,rowMouseenter:A,rowMouseleave:x},g),class:m,ref:"row_"+a+"_"+t},e);return o(B,n)}}},T=o(q,w);z.push(T),C.renderRows(n.renderRows,z,h,a,t,L,p,i)},O=0;O0&&(m.width=g+"px")}var y=d?n.table:"table",_=n.body.wrapper,b=void 0;return d&&(b=e(_,{class:r+"-tbody"},[this.renderRows(o,0)]),a&&(b=a(b))),e(y,{class:l,style:m,key:"table"},[e(H,{attrs:{columns:p,fixed:h}}),u&&e(E,{attrs:{expander:c,columns:p,fixed:h}}),b])}},X=J,Z={name:"HeadTable",props:{fixed:k.A.oneOfType([k.A.string,k.A.bool]),columns:k.A.array.isRequired,tableClassName:k.A.string.isRequired,handleBodyScrollLeft:k.A.func.isRequired,expander:k.A.object.isRequired},inject:{table:{default:function(){return{}}}},render:function(){var e=arguments[0],t=this.columns,n=this.fixed,r=this.tableClassName,i=this.handleBodyScrollLeft,a=this.expander,s=this.table,c=s.prefixCls,l=s.scroll,u=s.showHeader,d=s.saveRef,f=s.useFixedHeader,p={},m=h({direction:"vertical"});if(l.y){f=!0;var g=h({direction:"horizontal",prefixCls:c});g>0&&!n&&(p.marginBottom="-"+g+"px",p.paddingBottom="0px",p.minWidth=m+"px",p.overflowX="scroll",p.overflowY=0===m?"hidden":"scroll")}return f&&u?e("div",v()([{key:"headTable"},{directives:[{name:"ant-ref",value:n?function(){}:d("headTable")}]},{class:x()(c+"-header",(0,o.A)({},c+"-hide-scrollbar",m>0)),style:p,on:{scroll:i}}]),[e(X,{attrs:{tableClassName:r,hasHead:!0,hasBody:!1,fixed:n,columns:t,expander:a}})]):null}},Q={name:"BodyTable",props:{fixed:k.A.oneOfType([k.A.string,k.A.bool]),columns:k.A.array.isRequired,tableClassName:k.A.string.isRequired,handleBodyScroll:k.A.func.isRequired,handleWheel:k.A.func.isRequired,getRowKey:k.A.func.isRequired,expander:k.A.object.isRequired,isAnyColumnsFixed:k.A.bool},inject:{table:{default:function(){return{}}}},render:function(){var e=arguments[0],t=this.table,n=t.prefixCls,i=t.scroll,o=this.columns,a=this.fixed,s=this.tableClassName,c=this.getRowKey,l=this.handleBodyScroll,u=this.handleWheel,d=this.expander,f=this.isAnyColumnsFixed,p=this.table,m=p.useFixedHeader,g=p.saveRef,y=(0,r.A)({},this.table.bodyStyle),_={};if((i.x||a)&&(y.overflowX=y.overflowX||"scroll",y.WebkitTransform="translate3d (0, 0, 0)"),i.y){var b=y.maxHeight||i.y;b="number"===typeof b?b+"px":b,a?(_.maxHeight=b,_.overflowY=y.overflowY||"scroll"):y.maxHeight=b,y.overflowY=y.overflowY||"scroll",m=!0;var M=h({direction:"vertical"});M>0&&a&&(y.marginBottom="-"+M+"px",y.paddingBottom="0px")}var A=e(X,{attrs:{tableClassName:s,hasHead:!m,hasBody:!0,fixed:a,columns:o,expander:d,getRowKey:c,isAnyColumnsFixed:f}});if(a&&o.length){var w=void 0;return"left"===o[0].fixed||!0===o[0].fixed?w="fixedColumnsBodyLeft":"right"===o[0].fixed&&(w="fixedColumnsBodyRight"),delete y.overflowX,delete y.overflowY,e("div",{key:"bodyTable",class:n+"-body-outer",style:(0,r.A)({},y)},[e("div",v()([{class:n+"-body-inner",style:_},{directives:[{name:"ant-ref",value:g(w)}]},{on:{wheel:u,scroll:l}}]),[A])])}var x=i&&(i.x||i.y);return e("div",v()([{attrs:{tabIndex:x?-1:void 0},key:"bodyTable",class:n+"-body",style:y},{directives:[{name:"ant-ref",value:g("bodyTable")}]},{on:{wheel:u,scroll:l}}]),[A])}},ee=function(){return{expandIconAsCell:k.A.bool,expandRowByClick:k.A.bool,expandedRowKeys:k.A.array,expandedRowClassName:k.A.func,defaultExpandAllRows:k.A.bool,defaultExpandedRowKeys:k.A.array,expandIconColumnIndex:k.A.number,expandedRowRender:k.A.func,expandIcon:k.A.func,childrenColumnName:k.A.string,indentSize:k.A.number,columnManager:k.A.object.isRequired,prefixCls:k.A.string.isRequired,data:k.A.array,getRowKey:k.A.func}},te={name:"ExpandableTable",mixins:[R.A],props:(0,D.CB)(ee(),{expandIconAsCell:!1,expandedRowClassName:function(){return""},expandIconColumnIndex:0,defaultExpandAllRows:!1,defaultExpandedRowKeys:[],childrenColumnName:"children",indentSize:15}),inject:{store:{from:"table-store",default:function(){return{}}}},data:function(){var e=this.data,t=this.childrenColumnName,n=this.defaultExpandAllRows,r=this.expandedRowKeys,i=this.defaultExpandedRowKeys,o=this.getRowKey,s=[],c=[].concat((0,a.A)(e));if(n)for(var l=0;l4&&void 0!==arguments[4]&&arguments[4];n&&(n.preventDefault(),n.stopPropagation());var o=this.store.expandedRowKeys;if(e)o=[].concat((0,a.A)(o),[r]);else{var s=o.indexOf(r);-1!==s&&(o=p(o,r))}this.expandedRowKeys||(this.store.expandedRowKeys=o),this.latestExpandedRows&&y()(this.latestExpandedRows,o)||(this.latestExpandedRows=o,this.__emit("expandedRowsChange",o),this.__emit("update:expandedRowKeys",o)),i||this.__emit("expand",e,t)},renderExpandIndentCell:function(e,t){var n=this.prefixCls,i=this.expandIconAsCell;if(i&&"right"!==t&&e.length){var o={key:"rc-table-expand-icon-cell",className:n+"-expand-icon-th",title:"",rowSpan:e.length};e[0].unshift((0,r.A)({},o,{column:o}))}},renderExpandedRow:function(e,t,n,r,i,o,a){var s=this,c=this.$createElement,l=this.prefixCls,u=this.expandIconAsCell,d=this.indentSize,h=i[i.length-1],f=h+"-extra-row",p={body:{row:"tr",cell:"td"}},m=void 0;m="left"===a?this.columnManager.leftLeafColumns().length:"right"===a?this.columnManager.rightLeafColumns().length:this.columnManager.leafColumns().length;var v=[{key:"extra-row",customRender:function(){var r=s.store.expandedRowKeys,i=r.includes(h);return{attrs:{colSpan:m},children:"right"!==a?n(e,t,o,i):" "}}}];return u&&"right"!==a&&v.unshift({key:"expand-icon-placeholder",customRender:function(){return null}}),c(B,{key:f,attrs:{columns:v,rowKey:f,ancestorKeys:i,prefixCls:l+"-expanded-row",indentSize:d,indent:o,fixed:a,components:p,expandedRow:!0,hasExpandIcon:function(){}},class:r})},renderRows:function(e,t,n,r,i,o,s,c){var l=this.expandedRowClassName,u=this.expandedRowRender,d=this.childrenColumnName,h=n[d],f=[].concat((0,a.A)(c),[s]),p=i+1;u&&t.push(this.renderExpandedRow(n,r,u,l(n,r,i),f,p,o)),h&&t.push.apply(t,(0,a.A)(e(h,p,f)))}},render:function(){var e=this.data,t=this.childrenColumnName,n=this.$scopedSlots,r=(0,D.Oq)(this),i=e.some(function(e){return e[t]});return n["default"]&&n["default"]({props:r,on:(0,D.WM)(this),needIndentSpaced:i,renderRows:this.renderRows,handleExpandChange:this.handleExpandChange,renderExpandIndentCell:this.renderExpandIndentCell})}},ne=te,re=n(85471),ie={name:"Table",mixins:[R.A],provide:function(){return{"table-store":this.store,table:this}},props:(0,D.CB)({data:k.A.array,useFixedHeader:k.A.bool,columns:k.A.array,prefixCls:k.A.string,bodyStyle:k.A.object,rowKey:k.A.oneOfType([k.A.string,k.A.func]),rowClassName:k.A.oneOfType([k.A.string,k.A.func]),customRow:k.A.func,customHeaderRow:k.A.func,showHeader:k.A.bool,title:k.A.func,id:k.A.string,footer:k.A.func,emptyText:k.A.any,scroll:k.A.object,rowRef:k.A.func,getBodyWrapper:k.A.func,components:k.A.shape({table:k.A.any,header:k.A.shape({wrapper:k.A.any,row:k.A.any,cell:k.A.any}),body:k.A.shape({wrapper:k.A.any,row:k.A.any,cell:k.A.any})}),expandIconAsCell:k.A.bool,expandedRowKeys:k.A.array,expandedRowClassName:k.A.func,defaultExpandAllRows:k.A.bool,defaultExpandedRowKeys:k.A.array,expandIconColumnIndex:k.A.number,expandedRowRender:k.A.func,childrenColumnName:k.A.string,indentSize:k.A.number,expandRowByClick:k.A.bool,expandIcon:k.A.func,tableLayout:k.A.string,transformCellText:k.A.func},{data:[],useFixedHeader:!1,rowKey:"key",rowClassName:function(){return""},prefixCls:"rc-table",bodyStyle:{},showHeader:!0,scroll:{},rowRef:function(){return null},emptyText:function(){return"No Data"},customHeaderRow:function(){}}),data:function(){return this.preData=[].concat((0,a.A)(this.data)),this.store=(this.$root.constructor.observable||re.Ay.observable)({currentHoverKey:null,fixedColumnsHeadRowsHeight:[],fixedColumnsBodyRowsHeight:{},expandedRowsHeight:{},expandedRowKeys:[]}),{columnManager:new O(this.columns),sComponents:b()({table:"table",header:{wrapper:"thead",row:"tr",cell:"th"},body:{wrapper:"tbody",row:"tr",cell:"td"}},this.components)}},watch:{components:function(){this._components=b()({table:"table",header:{wrapper:"thead",row:"tr",cell:"th"},body:{wrapper:"tbody",row:"tr",cell:"td"}},this.components)},columns:function(e){e&&this.columnManager.reset(e)},data:function(e){var t=this;0===e.length&&this.hasScrollX()&&this.$nextTick(function(){t.resetScrollX()})}},created:function(){var e=this;["rowClick","rowDoubleclick","rowContextmenu","rowMouseenter","rowMouseleave"].forEach(function(t){(0,L.A)(void 0===(0,D.WM)(e)[t],t+" is deprecated, please use customRow instead.")}),(0,L.A)(void 0===this.getBodyWrapper,"getBodyWrapper is deprecated, please use custom components instead."),this.setScrollPosition("left"),this.debouncedWindowResize=f(this.handleWindowResize,150)},mounted:function(){var e=this;this.$nextTick(function(){e.columnManager.isAnyColumnsFixed()&&(e.handleWindowResize(),e.resizeEvent=(0,C.A)(window,"resize",e.debouncedWindowResize)),e.ref_headTable&&(e.ref_headTable.scrollLeft=0),e.ref_bodyTable&&(e.ref_bodyTable.scrollLeft=0)})},updated:function(){var e=this;this.$nextTick(function(){e.columnManager.isAnyColumnsFixed()&&(e.handleWindowResize(),e.resizeEvent||(e.resizeEvent=(0,C.A)(window,"resize",e.debouncedWindowResize)))})},beforeDestroy:function(){this.resizeEvent&&this.resizeEvent.remove(),this.debouncedWindowResize&&this.debouncedWindowResize.cancel()},methods:{getRowKey:function(e,t){var n=this.rowKey,r="function"===typeof n?n(e,t):e[n];return(0,L.A)(void 0!==r,"Each record in table should have a unique `key` prop,or set `rowKey` to an unique primary key."),void 0===r?t:r},setScrollPosition:function(e){if(this.scrollPosition=e,this.tableNode){var t=this.prefixCls;"both"===e?A()(this.tableNode).remove(new RegExp("^"+t+"-scroll-position-.+$")).add(t+"-scroll-position-left").add(t+"-scroll-position-right"):A()(this.tableNode).remove(new RegExp("^"+t+"-scroll-position-.+$")).add(t+"-scroll-position-"+e)}},setScrollPositionClassName:function(){var e=this.ref_bodyTable,t=0===e.scrollLeft,n=e.scrollLeft+1>=e.children[0].getBoundingClientRect().width-e.getBoundingClientRect().width;t&&n?this.setScrollPosition("both"):t?this.setScrollPosition("left"):n?this.setScrollPosition("right"):"middle"!==this.scrollPosition&&this.setScrollPosition("middle")},isTableLayoutFixed:function(){var e=this.$props,t=e.tableLayout,n=e.columns,r=void 0===n?[]:n,i=e.useFixedHeader,o=e.scroll,a=void 0===o?{}:o;return"undefined"!==typeof t?"fixed"===t:!!r.some(function(e){var t=e.ellipsis;return!!t})||(!(!i&&!a.y)||!(!a.x||!0===a.x||"max-content"===a.x))},handleWindowResize:function(){this.syncFixedTableRowHeight(),this.setScrollPositionClassName()},syncFixedTableRowHeight:function(){var e=this.tableNode.getBoundingClientRect();if(!(void 0!==e.height&&e.height<=0)){var t=this.prefixCls,n=this.ref_headTable?this.ref_headTable.querySelectorAll("thead"):this.ref_bodyTable.querySelectorAll("thead"),r=this.ref_bodyTable.querySelectorAll("."+t+"-row")||[],i=[].map.call(n,function(e){return e.getBoundingClientRect().height?e.getBoundingClientRect().height-.5:"auto"}),o=this.store,a=[].reduce.call(r,function(e,t){var n=t.getAttribute("data-row-key"),r=t.getBoundingClientRect().height||o.fixedColumnsBodyRowsHeight[n]||"auto";return e[n]=r,e},{});y()(o.fixedColumnsHeadRowsHeight,i)&&y()(o.fixedColumnsBodyRowsHeight,a)||(this.store.fixedColumnsHeadRowsHeight=i,this.store.fixedColumnsBodyRowsHeight=a)}},resetScrollX:function(){this.ref_headTable&&(this.ref_headTable.scrollLeft=0),this.ref_bodyTable&&(this.ref_bodyTable.scrollLeft=0)},hasScrollX:function(){var e=this.scroll,t=void 0===e?{}:e;return"x"in t},handleBodyScrollLeft:function(e){if(e.currentTarget===e.target){var t=e.target,n=this.scroll,r=void 0===n?{}:n,i=this.ref_headTable,o=this.ref_bodyTable;t.scrollLeft!==this.lastScrollLeft&&r.x&&(t===o&&i?i.scrollLeft=t.scrollLeft:t===i&&o&&(o.scrollLeft=t.scrollLeft),this.setScrollPositionClassName()),this.lastScrollLeft=t.scrollLeft}},handleBodyScrollTop:function(e){var t=e.target;if(e.currentTarget===t){var n=this.scroll,r=void 0===n?{}:n,i=this.ref_headTable,o=this.ref_bodyTable,a=this.ref_fixedColumnsBodyLeft,s=this.ref_fixedColumnsBodyRight;if(t.scrollTop!==this.lastScrollTop&&r.y&&t!==i){var c=t.scrollTop;a&&t!==a&&(a.scrollTop=c),s&&t!==s&&(s.scrollTop=c),o&&t!==o&&(o.scrollTop=c)}this.lastScrollTop=t.scrollTop}},handleBodyScroll:function(e){this.handleBodyScrollLeft(e),this.handleBodyScrollTop(e)},handleWheel:function(e){var t=this.$props.scroll,n=void 0===t?{}:t;if(window.navigator.userAgent.match(/Trident\/7\./)&&n.y){e.preventDefault();var r=e.deltaY,i=e.target,o=this.ref_bodyTable,a=this.ref_fixedColumnsBodyLeft,s=this.ref_fixedColumnsBodyRight,c=0;c=this.lastScrollTop?this.lastScrollTop+r:r,a&&i!==a&&(a.scrollTop=c),s&&i!==s&&(s.scrollTop=c),o&&i!==o&&(o.scrollTop=c)}},saveRef:function(e){var t=this;return function(n){t["ref_"+e]=n}},saveTableNodeRef:function(e){this.tableNode=e},renderMainTable:function(){var e=this.$createElement,t=this.scroll,n=this.prefixCls,r=this.columnManager.isAnyColumnsFixed(),i=r||t.x||t.y,o=[this.renderTable({columns:this.columnManager.groupedColumns(),isAnyColumnsFixed:r}),this.renderEmptyText(),this.renderFooter()];return i?e("div",{class:n+"-scroll"},[o]):o},renderLeftFixedTable:function(){var e=this.$createElement,t=this.prefixCls;return e("div",{class:t+"-fixed-left"},[this.renderTable({columns:this.columnManager.leftColumns(),fixed:"left"})])},renderRightFixedTable:function(){var e=this.$createElement,t=this.prefixCls;return e("div",{class:t+"-fixed-right"},[this.renderTable({columns:this.columnManager.rightColumns(),fixed:"right"})])},renderTable:function(e){var t=this.$createElement,n=e.columns,r=e.fixed,i=e.isAnyColumnsFixed,o=this.prefixCls,a=this.scroll,s=void 0===a?{}:a,c=s.x||r?o+"-fixed":"",l=t(Z,{key:"head",attrs:{columns:n,fixed:r,tableClassName:c,handleBodyScrollLeft:this.handleBodyScrollLeft,expander:this.expander}}),u=t(Q,{key:"body",attrs:{columns:n,fixed:r,tableClassName:c,getRowKey:this.getRowKey,handleWheel:this.handleWheel,handleBodyScroll:this.handleBodyScroll,expander:this.expander,isAnyColumnsFixed:i}});return[l,u]},renderTitle:function(){var e=this.$createElement,t=this.title,n=this.prefixCls,r=this.data;return t?e("div",{class:n+"-title",key:"title"},[t(r)]):null},renderFooter:function(){var e=this.$createElement,t=this.footer,n=this.prefixCls,r=this.data;return t?e("div",{class:n+"-footer",key:"footer"},[t(r)]):null},renderEmptyText:function(){var e=this.$createElement,t=this.emptyText,n=this.prefixCls,r=this.data;if(r.length)return null;var i=n+"-placeholder";return e("div",{class:i,key:"emptyText"},["function"===typeof t?t():t])}},render:function(){var e,t=this,n=arguments[0],i=(0,D.Oq)(this),a=this.columnManager,s=this.getRowKey,c=i.prefixCls,l=x()(i.prefixCls,(e={},(0,o.A)(e,c+"-fixed-header",i.useFixedHeader||i.scroll&&i.scroll.y),(0,o.A)(e,c+"-scroll-position-left "+c+"-scroll-position-right","both"===this.scrollPosition),(0,o.A)(e,c+"-scroll-position-"+this.scrollPosition,"both"!==this.scrollPosition),(0,o.A)(e,c+"-layout-fixed",this.isTableLayoutFixed()),e)),u=a.isAnyColumnsLeftFixed(),d=a.isAnyColumnsRightFixed(),h={props:(0,r.A)({},i,{columnManager:a,getRowKey:s}),on:(0,D.WM)(this),scopedSlots:{default:function(e){return t.expander=e,n("div",v()([{directives:[{name:"ant-ref",value:t.saveTableNodeRef}]},{class:l}]),[t.renderTitle(),n("div",{class:c+"-content"},[t.renderMainTable(),u&&t.renderLeftFixedTable(),d&&t.renderRightFixedTable()])])}}};return n(ne,h)}},oe={name:"Column",props:{rowSpan:k.A.number,colSpan:k.A.number,title:k.A.any,dataIndex:k.A.string,width:k.A.oneOfType([k.A.number,k.A.string]),ellipsis:k.A.bool,fixed:k.A.oneOf([!0,"left","right"]),align:k.A.oneOf(["left","center","right"]),customRender:k.A.func,className:k.A.string,customCell:k.A.func,customHeaderCell:k.A.func}},ae={name:"ColumnGroup",props:{title:k.A.any},isTableColumnGroup:!0},se={name:"Table",Column:oe,ColumnGroup:ae,props:ie.props,methods:{getTableNode:function(){return this.$refs.table.tableNode},getBodyTable:function(){return this.$refs.table.ref_bodyTable},normalize:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=[];return t.forEach(function(t){if(t.tag){var i=(0,D.i7)(t),o=(0,D.gd)(t),a=(0,D.t0)(t),s=(0,D.Oq)(t),c=(0,D.kQ)(t),l={};Object.keys(c).forEach(function(e){var t="on-"+e;l[(0,D.PT)(t)]=c[e]});var u=(0,D.Sk)(t),d=u["default"],h=u.title,f=(0,r.A)({title:h},s,{style:o,class:a},l);if(i&&(f.key=i),(0,D.xr)(t).isTableColumnGroup)f.children=e.normalize("function"===typeof d?d():d);else{var p=t.data&&t.data.scopedSlots&&t.data.scopedSlots["default"];f.customRender=f.customRender||p}n.push(f)}}),n}},render:function(){var e=arguments[0],t=this.$slots,n=this.normalize,i=(0,D.Oq)(this),o=i.columns||n(t["default"]),a={props:(0,r.A)({},i,{columns:o}),on:(0,D.WM)(this),ref:"table"};return e(ie,a)}},ce=se,le=n(70198),ue=n(5285),de=n(74072),he=n(50545),fe=n.n(he),pe=n(77197),me=n(40255),ve=n(75842),ge=n(63301),ye={name:"FilterDropdownMenuWrapper",methods:{handelClick:function(e){e.stopPropagation()}},render:function(){var e=arguments[0],t=this.$slots,n=this.handelClick;return e("div",{on:{click:n}},[t["default"]])}},_e=n(38223),be=n(64258),Me=(0,_e.bv)(),Ae=(0,be.N0)(),we=k.A.shape({text:k.A.string,value:k.A.string,children:k.A.array}).loose,xe={title:k.A.any,dataIndex:k.A.string,customRender:k.A.func,customCell:k.A.func,customHeaderCell:k.A.func,align:k.A.oneOf(["left","right","center"]),ellipsis:k.A.bool,filters:k.A.arrayOf(we),filterMultiple:k.A.bool,filterDropdown:k.A.any,filterDropdownVisible:k.A.bool,sorter:k.A.oneOfType([k.A.boolean,k.A.func]),defaultSortOrder:k.A.oneOf(["ascend","descend"]),colSpan:k.A.number,width:k.A.oneOfType([k.A.string,k.A.number]),className:k.A.string,fixed:k.A.oneOfType([k.A.bool,k.A.oneOf(["left","right"])]),filterIcon:k.A.any,filteredValue:k.A.array,filtered:k.A.bool,defaultFilteredValue:k.A.array,sortOrder:k.A.oneOfType([k.A.bool,k.A.oneOf(["ascend","descend"])]),sortDirections:k.A.array},ke=k.A.shape({filterTitle:k.A.string,filterConfirm:k.A.any,filterReset:k.A.any,emptyText:k.A.any,selectAll:k.A.any,selectInvert:k.A.any,sortTitle:k.A.string,expand:k.A.string,collapse:k.A.string}).loose,Le=k.A.oneOf(["checkbox","radio"]),Ce={type:Le,selectedRowKeys:k.A.array,getCheckboxProps:k.A.func,selections:k.A.oneOfType([k.A.array,k.A.bool]),hideDefaultSelections:k.A.bool,fixed:k.A.bool,columnWidth:k.A.oneOfType([k.A.string,k.A.number]),selectWay:k.A.oneOf(["onSelect","onSelectMultiple","onSelectAll","onSelectInvert"]),columnTitle:k.A.any},Se={prefixCls:k.A.string,dropdownPrefixCls:k.A.string,rowSelection:k.A.oneOfType([k.A.shape(Ce).loose,null]),pagination:k.A.oneOfType([k.A.shape((0,r.A)({},Me,{position:k.A.oneOf(["top","bottom","both"])})).loose,k.A.bool]),size:k.A.oneOf(["default","middle","small","large"]),dataSource:k.A.array,components:k.A.object,columns:k.A.array,rowKey:k.A.oneOfType([k.A.string,k.A.func]),rowClassName:k.A.func,expandedRowRender:k.A.any,defaultExpandAllRows:k.A.bool,defaultExpandedRowKeys:k.A.array,expandedRowKeys:k.A.array,expandIconAsCell:k.A.bool,expandIconColumnIndex:k.A.number,expandRowByClick:k.A.bool,loading:k.A.oneOfType([k.A.shape(Ae).loose,k.A.bool]),locale:ke,indentSize:k.A.number,customRow:k.A.func,customHeaderRow:k.A.func,useFixedHeader:k.A.bool,bordered:k.A.bool,showHeader:k.A.bool,footer:k.A.func,title:k.A.func,scroll:k.A.object,childrenColumnName:k.A.oneOfType([k.A.array,k.A.string]),bodyStyle:k.A.any,sortDirections:k.A.array,tableLayout:k.A.string,getPopupContainer:k.A.func,expandIcon:k.A.func,transformCellText:k.A.func},ze={store:k.A.any,locale:k.A.any,disabled:k.A.bool,getCheckboxPropsByItem:k.A.func,getRecordKey:k.A.func,data:k.A.array,prefixCls:k.A.string,hideDefaultSelections:k.A.bool,selections:k.A.oneOfType([k.A.array,k.A.bool]),getPopupContainer:k.A.func},Te={store:k.A.any,type:Le,defaultSelection:k.A.arrayOf([k.A.string,k.A.number]),rowIndex:k.A.oneOfType([k.A.string,k.A.number]),name:k.A.string,disabled:k.A.bool,id:k.A.string},Oe={_propsSymbol:k.A.any,locale:ke,selectedKeys:k.A.arrayOf([k.A.string,k.A.number]),column:k.A.object,confirmFilter:k.A.func,prefixCls:k.A.string,dropdownPrefixCls:k.A.string,getPopupContainer:k.A.func,handleFilter:k.A.func},He=n(51927);function De(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"children",n=[],i=function e(i){i.forEach(function(i){if(i[t]){var o=(0,r.A)({},i);delete o[t],n.push(o),i[t].length>0&&e(i[t])}else n.push(i)})};return i(e),n}function Ye(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"children";return e.map(function(e,i){var o={};return e[n]&&(o[n]=Ye(e[n],t,n)),(0,r.A)({},t(e,i),o)})}function Ve(e,t){return e.reduce(function(e,n){if(t(n)&&e.push(n),n.children){var r=Ve(n.children,t);e.push.apply(e,(0,a.A)(r))}return e},[])}function Pe(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(e||[]).forEach(function(e){var n=e.value,r=e.children;t[n.toString()]=n,Pe(r,t)}),t}function Ee(e){e.stopPropagation()}var je={name:"FilterMenu",mixins:[R.A],props:(0,D.CB)(Oe,{handleFilter:function(){},column:{}}),data:function(){var e="filterDropdownVisible"in this.column&&this.column.filterDropdownVisible;return this.preProps=(0,r.A)({},(0,D.Oq)(this)),{sSelectedKeys:this.selectedKeys,sKeyPathOfSelectedItem:{},sVisible:e,sValueKeys:Pe(this.column.filters)}},watch:{_propsSymbol:function(){var e=(0,D.Oq)(this),t=e.column,n={};"selectedKeys"in e&&!y()(this.preProps.selectedKeys,e.selectedKeys)&&(n.sSelectedKeys=e.selectedKeys),y()((this.preProps.column||{}).filters,(e.column||{}).filters)||(n.sValueKeys=Pe(e.column.filters)),"filterDropdownVisible"in t&&(n.sVisible=t.filterDropdownVisible),Object.keys(n).length>0&&this.setState(n),this.preProps=(0,r.A)({},e)}},mounted:function(){var e=this,t=this.column;this.$nextTick(function(){e.setNeverShown(t)})},updated:function(){var e=this,t=this.column;this.$nextTick(function(){e.setNeverShown(t)})},methods:{getDropdownVisible:function(){return!this.neverShown&&this.sVisible},setNeverShown:function(e){var t=this.$el,n=!!fe()(t,".ant-table-scroll");n&&(this.neverShown=!!e.fixed)},setSelectedKeys:function(e){var t=e.selectedKeys;this.setState({sSelectedKeys:t})},setVisible:function(e){var t=this.column;"filterDropdownVisible"in t||this.setState({sVisible:e}),t.onFilterDropdownVisibleChange&&t.onFilterDropdownVisibleChange(e)},handleClearFilters:function(){this.setState({sSelectedKeys:[]},this.handleConfirm)},handleConfirm:function(){var e=this;this.setVisible(!1),this.confirmFilter2(),this.$forceUpdate(),this.$nextTick(function(){e.confirmFilter})},onVisibleChange:function(e){this.setVisible(e);var t=this.$props.column;e||t.filterDropdown instanceof Function||this.confirmFilter2()},handleMenuItemClick:function(e){var t=this.$data.sSelectedKeys;if(e.keyPath&&!(e.keyPath.length<=1)){var n=this.$data.sKeyPathOfSelectedItem;t&&t.indexOf(e.key)>=0?delete n[e.key]:n[e.key]=e.keyPath,this.setState({sKeyPathOfSelectedItem:n})}},hasSubMenu:function(){var e=this.column.filters,t=void 0===e?[]:e;return t.some(function(e){return!!(e.children&&e.children.length>0)})},confirmFilter2:function(){var e=this.$props,t=e.column,n=e.selectedKeys,r=e.confirmFilter,i=this.$data,o=i.sSelectedKeys,a=i.sValueKeys,s=t.filterDropdown;y()(o,n)||r(t,s?o:o.map(function(e){return a[e]}).filter(function(e){return void 0!==e}))},renderMenus:function(e){var t=this,n=this.$createElement,r=this.$props,i=r.dropdownPrefixCls,a=r.prefixCls;return e.map(function(e){if(e.children&&e.children.length>0){var r=t.sKeyPathOfSelectedItem,s=Object.keys(r).some(function(t){return r[t].indexOf(e.value)>=0}),c=x()(a+"-dropdown-submenu",(0,o.A)({},i+"-submenu-contain-selected",s));return n(le.A,{attrs:{title:e.text,popupClassName:c},key:e.value},[t.renderMenus(e.children)])}return t.renderMenuItem(e)})},renderFilterIcon:function(){var e,t=this.$createElement,n=this.column,r=this.locale,i=this.prefixCls,a=this.selectedKeys,s=a&&a.length>0,c=n.filterIcon;"function"===typeof c&&(c=c(s,n));var l=x()((e={},(0,o.A)(e,i+"-selected","filtered"in n?n.filtered:s),(0,o.A)(e,i+"-open",this.getDropdownVisible()),e));return c?1===c.length&&(0,D.zO)(c[0])?(0,He.Ob)(c[0],{on:{click:Ee},class:x()(i+"-icon",l)}):t("span",{class:x()(i+"-icon",l)},[c]):t(me.A,{attrs:{title:r.filterTitle,type:"filter",theme:"filled"},class:l,on:{click:Ee}})},renderMenuItem:function(e){var t=this.$createElement,n=this.column,r=this.$data.sSelectedKeys,i=!("filterMultiple"in n)||n.filterMultiple,o=t(i?ve.A:ge.Ay,{attrs:{checked:r&&r.indexOf(e.value)>=0}});return t(ue.A,{key:e.value},[o,t("span",[e.text])])}},render:function(){var e=this,t=arguments[0],n=this.$data.sSelectedKeys,r=this.column,i=this.locale,a=this.prefixCls,s=this.dropdownPrefixCls,c=this.getPopupContainer,l=!("filterMultiple"in r)||r.filterMultiple,u=x()((0,o.A)({},s+"-menu-without-submenu",!this.hasSubMenu())),d=r.filterDropdown;d instanceof Function&&(d=d({prefixCls:s+"-custom",setSelectedKeys:function(t){return e.setSelectedKeys({selectedKeys:t})},selectedKeys:n,confirm:this.handleConfirm,clearFilters:this.handleClearFilters,filters:r.filters,visible:this.getDropdownVisible(),column:r}));var h=t(ye,{class:a+"-dropdown"},d?[d]:[t(de.Ay,{attrs:{multiple:l,prefixCls:s+"-menu",selectedKeys:n&&n.map(function(e){return e}),getPopupContainer:c},on:{click:this.handleMenuItemClick,select:this.setSelectedKeys,deselect:this.setSelectedKeys},class:u},[this.renderMenus(r.filters)]),t("div",{class:a+"-dropdown-btns"},[t("a",{class:a+"-dropdown-link confirm",on:{click:this.handleConfirm}},[i.filterConfirm]),t("a",{class:a+"-dropdown-link clear",on:{click:this.handleClearFilters}},[i.filterReset])])]);return t(pe.Ay,{attrs:{trigger:["click"],placement:"bottomRight",visible:this.getDropdownVisible(),getPopupContainer:c,forceRender:!0},on:{visibleChange:this.onVisibleChange}},[t("template",{slot:"overlay"},[h]),this.renderFilterIcon()])}},Fe={name:"SelectionBox",mixins:[R.A],props:Te,computed:{checked:function(){var e=this.$props,t=e.store,n=e.defaultSelection,r=e.rowIndex,i=!1;return i=t.selectionDirty?t.selectedRowKeys.indexOf(r)>=0:t.selectedRowKeys.indexOf(r)>=0||n.indexOf(r)>=0,i}},render:function(){var e=arguments[0],t=(0,D.Oq)(this),n=t.type,o=t.rowIndex,a=(0,i.A)(t,["type","rowIndex"]),s=this.checked,c={props:(0,r.A)({checked:s},a),on:(0,D.WM)(this)};return"radio"===n?(c.props.value=o,e(ge.Ay,c)):e(ve.A,c)}},Ie=n(36457);function $e(e){var t=e.store,n=e.getCheckboxPropsByItem,r=e.getRecordKey,i=e.data,o=e.type,a=e.byDefaultChecked;return a?i[o](function(e,t){return n(e,t).defaultChecked}):i[o](function(e,n){return t.selectedRowKeys.indexOf(r(e,n))>=0})}function Re(e){var t=e.store,n=e.data;if(!n.length)return!1;var i=$e((0,r.A)({},e,{data:n,type:"some",byDefaultChecked:!1}))&&!$e((0,r.A)({},e,{data:n,type:"every",byDefaultChecked:!1})),o=$e((0,r.A)({},e,{data:n,type:"some",byDefaultChecked:!0}))&&!$e((0,r.A)({},e,{data:n,type:"every",byDefaultChecked:!0}));return t.selectionDirty?i:i||o}function Ne(e){var t=e.store,n=e.data;return!!n.length&&(t.selectionDirty?$e((0,r.A)({},e,{data:n,type:"every",byDefaultChecked:!1})):$e((0,r.A)({},e,{data:n,type:"every",byDefaultChecked:!1}))||$e((0,r.A)({},e,{data:n,type:"every",byDefaultChecked:!0})))}var We={name:"SelectionCheckboxAll",mixins:[R.A],props:ze,data:function(){var e=this.$props;return this.defaultSelections=e.hideDefaultSelections?[]:[{key:"all",text:e.locale.selectAll},{key:"invert",text:e.locale.selectInvert}],{checked:Ne(e),indeterminate:Re(e)}},watch:{$props:{handler:function(){this.setCheckState(this.$props)},deep:!0,immediate:!0}},methods:{checkSelection:function(e,t,n,r){var i=e||this.$props,o=i.store,a=i.getCheckboxPropsByItem,s=i.getRecordKey;return("every"===n||"some"===n)&&(r?t[n](function(e,t){return a(e,t).props.defaultChecked}):t[n](function(e,t){return o.selectedRowKeys.indexOf(s(e,t))>=0}))},setCheckState:function(e){var t=Ne(e),n=Re(e);this.setState(function(e){var r={};return n!==e.indeterminate&&(r.indeterminate=n),t!==e.checked&&(r.checked=t),r})},handleSelectAllChange:function(e){var t=e.target.checked;this.$emit("select",t?"all":"removeAll",0,null)},renderMenus:function(e){var t=this,n=this.$createElement;return e.map(function(e,r){return n(Ie.Ay.Item,{key:e.key||r},[n("div",{on:{click:function(){t.$emit("select",e.key,r,e.onSelect)}}},[e.text])])})}},render:function(){var e=arguments[0],t=this.disabled,n=this.prefixCls,r=this.selections,i=this.getPopupContainer,a=this.checked,s=this.indeterminate,c=n+"-selection",l=null;if(r){var u=Array.isArray(r)?this.defaultSelections.concat(r):this.defaultSelections,d=e(Ie.Ay,{class:c+"-menu",attrs:{selectedKeys:[]}},[this.renderMenus(u)]);l=u.length>0?e(pe.Ay,{attrs:{getPopupContainer:i}},[e("template",{slot:"overlay"},[d]),e("div",{class:c+"-down"},[e(me.A,{attrs:{type:"down"}})])]):null}return e("div",{class:c},[e(ve.A,{class:x()((0,o.A)({},c+"-select-all-custom",l)),attrs:{checked:a,indeterminate:s,disabled:t},on:{change:this.handleSelectAllChange}}),l])}},Be={name:"ATableColumn",props:xe},Ke={name:"ATableColumnGroup",props:{fixed:k.A.oneOfType([k.A.bool,k.A.oneOf(["left","right"])]),title:k.A.any},__ANT_TABLE_COLUMN_GROUP:!0},Ue={store:k.A.any,rowKey:k.A.oneOfType([k.A.string,k.A.number]),prefixCls:k.A.string};function qe(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"tr",t={name:"BodyRow",props:Ue,computed:{selected:function(){return this.$props.store.selectedRowKeys.indexOf(this.$props.rowKey)>=0}},render:function(){var t=arguments[0],n=(0,o.A)({},this.prefixCls+"-row-selected",this.selected);return t(e,v()([{class:n},{on:(0,D.WM)(this)}]),[this.$slots["default"]])}};return t}var Ge=n(25592),Je=n(64168),Xe=n(82840),Ze=n(38377),Qe=n(77749),et=n(93146),tt=n.n(et);function nt(e,t){if("undefined"===typeof window)return 0;var n=t?"pageYOffset":"pageXOffset",r=t?"scrollTop":"scrollLeft",i=e===window,o=i?e[n]:e[r];return i&&"number"!==typeof o&&(o=window.document.documentElement[r]),o}function rt(e,t,n,r){var i=n-t;return e/=r/2,e<1?i/2*e*e*e+t:i/2*((e-=2)*e*e+2)+t}function it(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.getContainer,r=void 0===n?function(){return window}:n,i=t.callback,o=t.duration,a=void 0===o?450:o,s=r(),c=nt(s,!0),l=Date.now(),u=function t(){var n=Date.now(),r=n-l,o=rt(r>a?a:r,c,e,a);s===window?window.scrollTo(window.pageXOffset,o):s.scrollTop=o,r0&&void 0!==arguments[0]?arguments[0]:{},t=e&&e.body&&e.body.row;return(0,r.A)({},e,{body:(0,r.A)({},e.body,{row:qe(t)})})};function pt(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e===t||["table","header","body"].every(function(n){return y()(e[n],t[n])})}function mt(e,t){return Ve(t||(e||{}).columns||[],function(e){return"undefined"!==typeof e.filteredValue})}function vt(e,t){var n={};return mt(e,t).forEach(function(e){var t=lt(e);n[t]=e.filteredValue}),n}function gt(e,t){return Object.keys(t).length!==Object.keys(e.filters).length||Object.keys(t).some(function(n){return t[n]!==e.filters[n]})}var yt={name:"Table",Column:Be,ColumnGroup:Ke,mixins:[R.A],inject:{configProvider:{default:function(){return Ge.f}}},provide:function(){return{store:this.store}},props:(0,D.CB)(Se,{dataSource:[],useFixedHeader:!1,size:"default",loading:!1,bordered:!1,indentSize:20,locale:{},rowKey:"key",showHeader:!0,sortDirections:["ascend","descend"],childrenColumnName:"children"}),data:function(){var e=(0,D.Oq)(this);return(0,L.A)(!e.expandedRowRender||!("scroll"in e)||!e.scroll.x,"`expandedRowRender` and `scroll` are not compatible. Please use one of them at one time."),this.CheckboxPropsCache={},this.store=(this.$root.constructor.observable||re.Ay.observable)({selectedRowKeys:ct(this.$props).selectedRowKeys||[],selectionDirty:!1}),(0,r.A)({},this.getDefaultSortOrder(e.columns||[]),{sFilters:this.getDefaultFilters(e.columns),sPagination:this.getDefaultPagination(this.$props),pivot:void 0,sComponents:ft(this.components),filterDataCnt:0})},watch:{pagination:{handler:function(e){this.setState(function(t){var n=(0,r.A)({},dt,t.sPagination,e);return n.current=n.current||1,n.pageSize=n.pageSize||10,{sPagination:!1!==e?n:ht}})},deep:!0},rowSelection:{handler:function(e,t){if(e&&"selectedRowKeys"in e){this.store.selectedRowKeys=e.selectedRowKeys||[];var n=this.rowSelection;n&&e.getCheckboxProps!==n.getCheckboxProps&&(this.CheckboxPropsCache={})}else t&&!e&&(this.store.selectedRowKeys=[])},deep:!0},dataSource:function(){this.store.selectionDirty=!1,this.CheckboxPropsCache={}},columns:function(e){var t=mt({columns:e},e);if(t.length>0){var n=vt({columns:e},e),i=(0,r.A)({},this.sFilters);Object.keys(n).forEach(function(e){i[e]=n[e]}),gt({filters:this.sFilters},i)&&this.setState({sFilters:i})}this.$forceUpdate()},components:{handler:function(e,t){if(!pt(e,t)){var n=ft(e);this.setState({sComponents:n})}},deep:!0}},updated:function(){var e=this.columns,t=this.sSortColumn,n=this.sSortOrder;if(this.getSortOrderColumns(e).length>0){var r=this.getSortStateFromColumns(e);ut(r.sSortColumn,t)&&r.sSortOrder===n||this.setState(r)}},methods:{getCheckboxPropsByItem:function(e,t){var n=ct(this.$props);if(!n.getCheckboxProps)return{props:{}};var r=this.getRecordKey(e,t);return this.CheckboxPropsCache[r]||(this.CheckboxPropsCache[r]=n.getCheckboxProps(e)),this.CheckboxPropsCache[r].props=this.CheckboxPropsCache[r].props||{},this.CheckboxPropsCache[r]},getDefaultSelection:function(){var e=this,t=ct(this.$props);return t.getCheckboxProps?this.getFlatData().filter(function(t,n){return e.getCheckboxPropsByItem(t,n).props.defaultChecked}).map(function(t,n){return e.getRecordKey(t,n)}):[]},getDefaultPagination:function(e){var t="object"===(0,s.A)(e.pagination)?e.pagination:{},n=void 0;"current"in t?n=t.current:"defaultCurrent"in t&&(n=t.defaultCurrent);var i=void 0;return"pageSize"in t?i=t.pageSize:"defaultPageSize"in t&&(i=t.defaultPageSize),this.hasPagination(e)?(0,r.A)({},dt,t,{current:n||1,pageSize:i||10}):{}},getSortOrderColumns:function(e){return Ve(e||this.columns||[],function(e){return"sortOrder"in e})},getDefaultFilters:function(e){var t=vt({columns:this.columns},e),n=Ve(e||[],function(e){return"undefined"!==typeof e.defaultFilteredValue}),i=n.reduce(function(e,t){var n=lt(t);return e[n]=t.defaultFilteredValue,e},{});return(0,r.A)({},i,t)},getDefaultSortOrder:function(e){var t=this.getSortStateFromColumns(e),n=Ve(e||[],function(e){return null!=e.defaultSortOrder})[0];return n&&!t.sortColumn?{sSortColumn:n,sSortOrder:n.defaultSortOrder}:t},getSortStateFromColumns:function(e){var t=this.getSortOrderColumns(e).filter(function(e){return e.sortOrder})[0];return t?{sSortColumn:t,sSortOrder:t.sortOrder}:{sSortColumn:null,sSortOrder:null}},getMaxCurrent:function(e){var t=this.sPagination,n=t.current,r=t.pageSize;return(n-1)*r>=e?Math.floor((e-1)/r)+1:n},getRecordKey:function(e,t){var n=this.rowKey,r="function"===typeof n?n(e,t):e[n];return(0,L.A)(void 0!==r,"Table","Each record in dataSource of table should have a unique `key` prop, or set `rowKey` of Table to an unique primary key, "),void 0===r?t:r},getSorterFn:function(e){var t=e||this.$data,n=t.sSortOrder,r=t.sSortColumn;if(n&&r&&"function"===typeof r.sorter)return function(e,t){var i=r.sorter(e,t,n);return 0!==i?"descend"===n?-i:i:0}},getCurrentPageData:function(){var e=this.getLocalData();this.filterDataCnt=e.length;var t=void 0,n=void 0,r=this.sPagination;return this.hasPagination()?(n=r.pageSize,t=this.getMaxCurrent(r.total||e.length)):(n=Number.MAX_VALUE,t=1),(e.length>n||n===Number.MAX_VALUE)&&(e=e.slice((t-1)*n,t*n)),e},getFlatData:function(){var e=this.$props.childrenColumnName;return De(this.getLocalData(null,!1),e)},getFlatCurrentPageData:function(){var e=this.$props.childrenColumnName;return De(this.getCurrentPageData(),e)},getLocalData:function(e){var t=this,n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],r=e||this.$data,i=r.sFilters,o=this.$props.dataSource,s=o||[];s=s.slice(0);var c=this.getSorterFn(r);return c&&(s=this.recursiveSort([].concat((0,a.A)(s)),c)),n&&i&&Object.keys(i).forEach(function(e){var n=t.findColumn(e);if(n){var r=i[e]||[];if(0!==r.length){var o=n.onFilter;s=o?s.filter(function(e){return r.some(function(t){return o(t,e)})}):s}}}),s},onRow:function(e,t,n){var r=this.customRow,i=r?r(t,n):{};return(0,D.v6)(i,{props:{prefixCls:e,store:this.store,rowKey:this.getRecordKey(t,n)}})},setSelectedRowKeys:function(e,t){var n=this,r=t.selectWay,i=t.record,o=t.checked,a=t.changeRowKeys,s=t.nativeEvent,c=ct(this.$props);c&&!("selectedRowKeys"in c)&&(this.store.selectedRowKeys=e);var l=this.getFlatData();if(c.onChange||c[r]){var u=l.filter(function(t,r){return e.indexOf(n.getRecordKey(t,r))>=0});if(c.onChange&&c.onChange(e,u),"onSelect"===r&&c.onSelect)c.onSelect(i,o,u,s);else if("onSelectMultiple"===r&&c.onSelectMultiple){var d=l.filter(function(e,t){return a.indexOf(n.getRecordKey(e,t))>=0});c.onSelectMultiple(o,u,d)}else if("onSelectAll"===r&&c.onSelectAll){var h=l.filter(function(e,t){return a.indexOf(n.getRecordKey(e,t))>=0});c.onSelectAll(o,u,h)}else"onSelectInvert"===r&&c.onSelectInvert&&c.onSelectInvert(e)}},generatePopupContainerFunc:function(e){var t=this.$props.scroll,n=this.$refs.vcTable;return e||(t&&n?function(){return n.getTableNode()}:void 0)},scrollToFirstRow:function(){var e=this,t=this.$props.scroll;t&&!1!==t.scrollToFirstRowOnChange&&it(0,{getContainer:function(){return e.$refs.vcTable.getBodyTable()}})},isSameColumn:function(e,t){return!!(e&&t&&e.key&&e.key===t.key)||(e===t||y()(e,t,function(e,t){if("function"===typeof e&&"function"===typeof t)return e===t||e.toString()===t.toString()}))},handleFilter:function(e,t){var n=this,i=this.$props,c=(0,r.A)({},this.sPagination),l=(0,r.A)({},this.sFilters,(0,o.A)({},lt(e),t)),u=[];Ye(this.columns,function(e){e.children||u.push(lt(e))}),Object.keys(l).forEach(function(e){u.indexOf(e)<0&&delete l[e]}),i.pagination&&(c.current=1,c.onChange(c.current));var d={sPagination:c,sFilters:{}},h=(0,r.A)({},l);mt({columns:i.columns}).forEach(function(e){var t=lt(e);t&&delete h[t]}),Object.keys(h).length>0&&(d.sFilters=h),"object"===(0,s.A)(i.pagination)&&"current"in i.pagination&&(d.sPagination=(0,r.A)({},c,{current:this.sPagination.current})),this.setState(d,function(){n.scrollToFirstRow(),n.store.selectionDirty=!1,n.$emit.apply(n,["change"].concat((0,a.A)(n.prepareParamsArguments((0,r.A)({},n.$data,{sSelectionDirty:!1,sFilters:l,sPagination:c})))))})},handleSelect:function(e,t,n){var r=this,i=n.target.checked,o=n.nativeEvent,a=this.store.selectionDirty?[]:this.getDefaultSelection(),s=this.store.selectedRowKeys.concat(a),c=this.getRecordKey(e,t),l=this.$data.pivot,u=this.getFlatCurrentPageData(),d=t;if(this.$props.expandedRowRender&&(d=u.findIndex(function(e){return r.getRecordKey(e,t)===c})),o.shiftKey&&void 0!==l&&d!==l){var h=[],f=Math.sign(l-d),p=Math.abs(l-d),m=0,v=function(){var e=d+m*f;m+=1;var t=u[e],n=r.getRecordKey(t,e),o=r.getCheckboxPropsByItem(t,e);o.disabled||(s.includes(n)?i||(s=s.filter(function(e){return n!==e}),h.push(n)):i&&(s.push(n),h.push(n)))};while(m<=p)v();this.setState({pivot:d}),this.store.selectionDirty=!0,this.setSelectedRowKeys(s,{selectWay:"onSelectMultiple",record:e,checked:i,changeRowKeys:h,nativeEvent:o})}else i?s.push(this.getRecordKey(e,d)):s=s.filter(function(e){return c!==e}),this.setState({pivot:d}),this.store.selectionDirty=!0,this.setSelectedRowKeys(s,{selectWay:"onSelect",record:e,checked:i,changeRowKeys:void 0,nativeEvent:o})},handleRadioSelect:function(e,t,n){var r=n.target.checked,i=n.nativeEvent,o=this.getRecordKey(e,t),a=[o];this.store.selectionDirty=!0,this.setSelectedRowKeys(a,{selectWay:"onSelect",record:e,checked:r,changeRowKeys:void 0,nativeEvent:i})},handleSelectRow:function(e,t,n){var r=this,i=this.getFlatCurrentPageData(),o=this.store.selectionDirty?[]:this.getDefaultSelection(),a=this.store.selectedRowKeys.concat(o),s=i.filter(function(e,t){return!r.getCheckboxPropsByItem(e,t).props.disabled}).map(function(e,t){return r.getRecordKey(e,t)}),c=[],l="onSelectAll",u=void 0;switch(e){case"all":s.forEach(function(e){a.indexOf(e)<0&&(a.push(e),c.push(e))}),l="onSelectAll",u=!0;break;case"removeAll":s.forEach(function(e){a.indexOf(e)>=0&&(a.splice(a.indexOf(e),1),c.push(e))}),l="onSelectAll",u=!1;break;case"invert":s.forEach(function(e){a.indexOf(e)<0?a.push(e):a.splice(a.indexOf(e),1),c.push(e),l="onSelectInvert"});break;default:break}this.store.selectionDirty=!0;var d=this.rowSelection,h=2;if(d&&d.hideDefaultSelections&&(h=0),t>=h&&"function"===typeof n)return n(s);this.setSelectedRowKeys(a,{selectWay:l,checked:u,changeRowKeys:c})},handlePageChange:function(e){var t=this.$props,n=(0,r.A)({},this.sPagination);n.current=e||(n.current||1);for(var i=arguments.length,o=Array(i>1?i-1:0),c=1;c0&&(s===t||"both"===s)?n(Je.Ay,h):null},renderSelectionBox:function(e){var t=this,n=this.$createElement;return function(r,i,o){var a=t.getRecordKey(i,o),s=t.getCheckboxPropsByItem(i,o),c=function(n){"radio"===e?t.handleRadioSelect(i,o,n):t.handleSelect(i,o,n)},l=(0,D.v6)({props:{type:e,store:t.store,rowIndex:a,defaultSelection:t.getDefaultSelection()},on:{change:c}},s);return n("span",{on:{click:st}},[n(Fe,l)])}},renderRowSelection:function(e){var t=this,n=e.prefixCls,r=e.locale,i=e.getPopupContainer,a=this.$createElement,s=this.rowSelection,c=this.columns.concat();if(s){var l=this.getFlatCurrentPageData().filter(function(e,n){return!s.getCheckboxProps||!t.getCheckboxPropsByItem(e,n).props.disabled}),u=x()(n+"-selection-column",(0,o.A)({},n+"-selection-column-custom",s.selections)),h=(0,o.A)({key:"selection-column",customRender:this.renderSelectionBox(s.type),className:u,fixed:s.fixed,width:s.columnWidth,title:s.columnTitle},d,{class:n+"-selection-col"});if("radio"!==s.type){var f=l.every(function(e,n){return t.getCheckboxPropsByItem(e,n).props.disabled});h.title=h.title||a(We,{attrs:{store:this.store,locale:r,data:l,getCheckboxPropsByItem:this.getCheckboxPropsByItem,getRecordKey:this.getRecordKey,disabled:f,prefixCls:n,selections:s.selections,hideDefaultSelections:s.hideDefaultSelections,getPopupContainer:this.generatePopupContainerFunc(i)},on:{select:this.handleSelectRow}})}"fixed"in s?h.fixed=s.fixed:c.some(function(e){return"left"===e.fixed||!0===e.fixed})&&(h.fixed="left"),c[0]&&"selection-column"===c[0].key?c[0]=h:c.unshift(h)}return c},renderColumnsDropdown:function(e){var t=this,n=e.prefixCls,i=e.dropdownPrefixCls,a=e.columns,s=e.locale,c=e.getPopupContainer,l=this.$createElement,u=this.sSortOrder,d=this.sFilters;return Ye(a,function(e,a){var h,f=lt(e,a),p=void 0,m=void 0,v=e.customHeaderCell,g=t.isSortColumn(e);if(e.filters&&e.filters.length>0||e.filterDropdown){var y=f in d?d[f]:[];p=l(je,{attrs:{_propsSymbol:Symbol(),locale:s,column:e,selectedKeys:y,confirmFilter:t.handleFilter,prefixCls:n+"-filter",dropdownPrefixCls:i||"ant-dropdown",getPopupContainer:t.generatePopupContainerFunc(c)},key:"filter-dropdown"})}if(e.sorter){var _=e.sortDirections||t.sortDirections,b=g&&"ascend"===u,M=g&&"descend"===u,A=-1!==_.indexOf("ascend")&&l(me.A,{class:n+"-column-sorter-up "+(b?"on":"off"),attrs:{type:"caret-up",theme:"filled"},key:"caret-up"}),w=-1!==_.indexOf("descend")&&l(me.A,{class:n+"-column-sorter-down "+(M?"on":"off"),attrs:{type:"caret-down",theme:"filled"},key:"caret-down"});m=l("div",{attrs:{title:s.sortTitle},class:x()(n+"-column-sorter-inner",A&&w&&n+"-column-sorter-inner-full"),key:"sorter"},[A,w]),v=function(n){var i={};e.customHeaderCell&&(i=(0,r.A)({},e.customHeaderCell(n))),i.on=i.on||{};var o=i.on.click;return i.on.click=function(){t.toggleSortOrder(e),o&&o.apply(void 0,arguments)},i}}return(0,r.A)({},e,{className:x()(e.className,(h={},(0,o.A)(h,n+"-column-has-actions",m||p),(0,o.A)(h,n+"-column-has-filters",p),(0,o.A)(h,n+"-column-has-sorters",m),(0,o.A)(h,n+"-column-sort",g&&u),h)),title:[l("span",{key:"title",class:n+"-header-column"},[l("div",{class:m?n+"-column-sorters":void 0},[l("span",{class:n+"-column-title"},[t.renderColumnTitle(e.title)]),l("span",{class:n+"-column-sorter"},[m])])]),p],customHeaderCell:v})})},renderColumnTitle:function(e){var t=this.$data,n=t.sFilters,r=t.sSortOrder,i=t.sSortColumn;return e instanceof Function?e({filters:n,sortOrder:r,sortColumn:i}):e},renderTable:function(e){var t,n=this,a=e.prefixCls,s=e.renderEmpty,c=e.dropdownPrefixCls,l=e.contextLocale,u=e.getPopupContainer,d=e.transformCellText,h=this.$createElement,f=(0,D.Oq)(this),p=f.showHeader,m=f.locale,v=f.getPopupContainer,g=f.expandIcon,y=(0,i.A)(f,["showHeader","locale","getPopupContainer","expandIcon"]),_=this.getCurrentPageData(),b=this.expandedRowRender&&!1!==this.expandIconAsCell,M=v||u,A=(0,r.A)({},l,m);m&&m.emptyText||(A.emptyText=s(h,"Table"));var w=x()((t={},(0,o.A)(t,a+"-"+this.size,!0),(0,o.A)(t,a+"-bordered",this.bordered),(0,o.A)(t,a+"-empty",!_.length),(0,o.A)(t,a+"-without-column-header",!p),t)),k=this.renderRowSelection({prefixCls:a,locale:A,getPopupContainer:M}),L=this.renderColumnsDropdown({columns:k,prefixCls:a,dropdownPrefixCls:c,locale:A,getPopupContainer:M}).map(function(e,t){var n=(0,r.A)({},e);return n.key=lt(n,t),n}),C=L[0]&&"selection-column"===L[0].key?1:0;"expandIconColumnIndex"in y&&(C=y.expandIconColumnIndex);var S={key:"table",props:(0,r.A)({expandIcon:g||this.renderExpandIcon(a)},y,{customRow:function(e,t){return n.onRow(a,e,t)},components:this.sComponents,prefixCls:a,data:_,columns:L,showHeader:p,expandIconColumnIndex:C,expandIconAsCell:b,emptyText:A.emptyText,transformCellText:d}),on:(0,D.WM)(this),class:w,ref:"vcTable"};return h(ce,S)}},render:function(){var e=this,t=arguments[0],n=this.prefixCls,i=this.dropdownPrefixCls,o=this.transformCellText,a=this.getCurrentPageData(),s=this.configProvider,c=s.getPopupContainer,l=s.transformCellText,u=this.getPopupContainer||c,d=o||l,h=this.loading;h="boolean"===typeof h?{props:{spinning:h}}:{props:(0,r.A)({},h)};var f=this.configProvider.getPrefixCls,p=this.configProvider.renderEmpty,m=f("table",n),v=f("dropdown",i),g=t(Ze.A,{attrs:{componentName:"Table",defaultLocale:Qe.A.Table,children:function(t){return e.renderTable({prefixCls:m,renderEmpty:p,dropdownPrefixCls:v,contextLocale:t,getPopupContainer:u,transformCellText:d})}}}),y=this.hasPagination()&&a&&0!==a.length?m+"-with-pagination":m+"-without-pagination",_=(0,r.A)({},h,{class:h.props&&h.props.spinning?y+" "+m+"-spin-holder":""});return t("div",{class:x()(m+"-wrapper")},[t(Xe.A,_,[this.renderPagination(m,"top"),g,this.renderPagination(m,"bottom")])])}},_t=n(24415),bt=n(44807);re.Ay.use(_t.A,{name:"ant-ref"});var Mt={name:"ATable",Column:yt.Column,ColumnGroup:yt.ColumnGroup,props:yt.props,methods:{normalize:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=[];return t.forEach(function(t){if(t.tag){var o=(0,D.i7)(t),a=(0,D.gd)(t),s=(0,D.t0)(t),c=(0,D.Oq)(t),l=(0,D.kQ)(t),u={};Object.keys(l).forEach(function(e){var t=void 0;t=e.startsWith("update:")?"on-"+e.substr(7)+"-change":"on-"+e,u[(0,D.PT)(t)]=l[e]});var d=(0,D.Sk)(t),h=d["default"],f=(0,i.A)(d,["default"]),p=(0,r.A)({},f,c,{style:a,class:s},u);if(o&&(p.key=o),(0,D.xr)(t).__ANT_TABLE_COLUMN_GROUP)p.children=e.normalize("function"===typeof h?h():h);else{var m=t.data&&t.data.scopedSlots&&t.data.scopedSlots["default"];p.customRender=p.customRender||m}n.push(p)}}),n},updateColumns:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=[],o=this.$slots,a=this.$scopedSlots;return t.forEach(function(t){var s=t.slots,c=void 0===s?{}:s,l=t.scopedSlots,u=void 0===l?{}:l,d=(0,i.A)(t,["slots","scopedSlots"]),h=(0,r.A)({},d);Object.keys(c).forEach(function(e){var t=c[e];void 0===h[e]&&o[t]&&(h[e]=1===o[t].length?o[t][0]:o[t])}),Object.keys(u).forEach(function(e){var t=u[e];void 0===h[e]&&a[t]&&(h[e]=a[t])}),t.children&&(h.children=e.updateColumns(h.children)),n.push(h)}),n}},render:function(){var e=arguments[0],t=this.$slots,n=this.normalize,i=this.$scopedSlots,o=(0,D.Oq)(this),a=o.columns?this.updateColumns(o.columns):n(t["default"]),s=o.title,c=o.footer,l=i.title,u=i.footer,d=i.expandedRowRender,h=void 0===d?o.expandedRowRender:d,f=i.expandIcon;s=s||l,c=c||u;var p={props:(0,r.A)({},o,{columns:a,title:s,footer:c,expandedRowRender:h,expandIcon:this.$props.expandIcon||f}),on:(0,D.WM)(this)};return e(yt,p)},install:function(e){e.use(bt.A),e.component(Mt.name,Mt),e.component(Mt.Column.name,Mt.Column),e.component(Mt.ColumnGroup.name,Mt.ColumnGroup)}},At=Mt},28822:function(e,t,n){"use strict";n(29229),n(93693),n(29775),n(46925),n(63713),n(45562),n(25482)},14248:function(e,t,n){"use strict";n.d(t,{Ay:function(){return de}});var r=n(85505),i=n(24415),o=n(85471),a=n(75189),s=n.n(a),c=n(44508),l=n(97479),u=n(40255),d=n(4718),h=n(15848),f=n(11207),p={width:0,height:0,overflow:"hidden",position:"absolute"},m={name:"Sentinel",props:{setRef:d.A.func,prevElement:d.A.any,nextElement:d.A.any},methods:{onKeyDown:function(e){var t=e.target,n=e.which,r=e.shiftKey,i=this.$props,o=i.nextElement,a=i.prevElement;n===f.A.TAB&&document.activeElement===t&&(!r&&o&&o.focus(),r&&a&&a.focus())}},render:function(){var e=arguments[0],t=this.$props.setRef;return e("div",s()([{attrs:{tabIndex:0}},{directives:[{name:"ant-ref",value:t}]},{style:p,on:{keydown:this.onKeyDown},attrs:{role:"presentation"}}]),[this.$slots["default"]])}},v={name:"TabPane",props:{active:d.A.bool,destroyInactiveTabPane:d.A.bool,forceRender:d.A.bool,placeholder:d.A.any,rootPrefixCls:d.A.string,tab:d.A.any,closable:d.A.bool,disabled:d.A.bool},inject:{sentinelContext:{default:function(){return{}}}},render:function(){var e,t=arguments[0],n=this.$props,r=n.destroyInactiveTabPane,i=n.active,o=n.forceRender,a=n.rootPrefixCls,s=this.$slots["default"],l=(0,h.nu)(this,"placeholder");this._isActived=this._isActived||i;var u=a+"-tabpane",d=(e={},(0,c.A)(e,u,1),(0,c.A)(e,u+"-inactive",!i),(0,c.A)(e,u+"-active",i),e),f=r?i:this._isActived,p=f||o,v=this.sentinelContext,g=v.sentinelStart,y=v.sentinelEnd,_=v.setPanelSentinelStart,b=v.setPanelSentinelEnd,M=void 0,A=void 0;return i&&p&&(M=t(m,{attrs:{setRef:_,prevElement:g}}),A=t(m,{attrs:{setRef:b,nextElement:y}})),t("div",{class:d,attrs:{role:"tabpanel","aria-hidden":i?"false":"true"}},[M,p?s:l,A])}},g=n(90034),y=n(52315),_=n(93146),b=n.n(_),M={LEFT:37,UP:38,RIGHT:39,DOWN:40},A=n(51927),w=function(e){return void 0!==e&&null!==e&&""!==e},x=w;function k(e){var t=void 0,n=e.children;return n.forEach(function(e){!e||x(t)||e.disabled||(t=e.key)}),t}function L(e,t){var n=e.children,r=n.map(function(e){return e&&e.key});return r.indexOf(t)>=0}var C={name:"Tabs",mixins:[y.A],model:{prop:"activeKey",event:"change"},props:{destroyInactiveTabPane:d.A.bool,renderTabBar:d.A.func.isRequired,renderTabContent:d.A.func.isRequired,navWrapper:d.A.func.def(function(e){return e}),children:d.A.any.def([]),prefixCls:d.A.string.def("ant-tabs"),tabBarPosition:d.A.string.def("top"),activeKey:d.A.oneOfType([d.A.string,d.A.number]),defaultActiveKey:d.A.oneOfType([d.A.string,d.A.number]),__propsSymbol__:d.A.any,direction:d.A.string.def("ltr"),tabBarGutter:d.A.number},data:function(){var e=(0,h.Oq)(this),t=void 0;return t="activeKey"in e?e.activeKey:"defaultActiveKey"in e?e.defaultActiveKey:k(e),{_activeKey:t}},provide:function(){return{sentinelContext:this}},watch:{__propsSymbol__:function(){var e=(0,h.Oq)(this);"activeKey"in e?this.setState({_activeKey:e.activeKey}):L(e,this.$data._activeKey)||this.setState({_activeKey:k(e)})}},beforeDestroy:function(){this.destroy=!0,b().cancel(this.sentinelId)},methods:{onTabClick:function(e,t){this.tabBar.componentOptions&&this.tabBar.componentOptions.listeners&&this.tabBar.componentOptions.listeners.tabClick&&this.tabBar.componentOptions.listeners.tabClick(e,t),this.setActiveKey(e)},onNavKeyDown:function(e){var t=e.keyCode;if(t===M.RIGHT||t===M.DOWN){e.preventDefault();var n=this.getNextActiveKey(!0);this.onTabClick(n)}else if(t===M.LEFT||t===M.UP){e.preventDefault();var r=this.getNextActiveKey(!1);this.onTabClick(r)}},onScroll:function(e){var t=e.target,n=e.currentTarget;t===n&&t.scrollLeft>0&&(t.scrollLeft=0)},setSentinelStart:function(e){this.sentinelStart=e},setSentinelEnd:function(e){this.sentinelEnd=e},setPanelSentinelStart:function(e){e!==this.panelSentinelStart&&this.updateSentinelContext(),this.panelSentinelStart=e},setPanelSentinelEnd:function(e){e!==this.panelSentinelEnd&&this.updateSentinelContext(),this.panelSentinelEnd=e},setActiveKey:function(e){if(this.$data._activeKey!==e){var t=(0,h.Oq)(this);"activeKey"in t||this.setState({_activeKey:e}),this.__emit("change",e)}},getNextActiveKey:function(e){var t=this.$data._activeKey,n=[];this.$props.children.forEach(function(t){var r=(0,h.IV)(t,"disabled");t&&!r&&""!==r&&(e?n.push(t):n.unshift(t))});var r=n.length,i=r&&n[0].key;return n.forEach(function(e,o){e.key===t&&(i=o===r-1?n[0].key:n[o+1].key)}),i},updateSentinelContext:function(){var e=this;this.destroy||(b().cancel(this.sentinelId),this.sentinelId=b()(function(){e.destroy||e.$forceUpdate()}))}},render:function(){var e,t=arguments[0],n=this.$props,i=n.prefixCls,o=n.navWrapper,a=n.tabBarPosition,s=n.renderTabContent,l=n.renderTabBar,u=n.destroyInactiveTabPane,d=n.direction,f=n.tabBarGutter,p=(e={},(0,c.A)(e,i,1),(0,c.A)(e,i+"-"+a,1),(0,c.A)(e,i+"-rtl","rtl"===d),e);this.tabBar=l();var v=(0,A.Ob)(this.tabBar,{props:{prefixCls:i,navWrapper:o,tabBarPosition:a,panels:n.children,activeKey:this.$data._activeKey,direction:d,tabBarGutter:f},on:{keydown:this.onNavKeyDown,tabClick:this.onTabClick},key:"tabBar"}),y=(0,A.Ob)(s(),{props:{prefixCls:i,tabBarPosition:a,activeKey:this.$data._activeKey,destroyInactiveTabPane:u,direction:d},on:{change:this.setActiveKey},children:n.children,key:"tabContent"}),_=t(m,{key:"sentinelStart",attrs:{setRef:this.setSentinelStart,nextElement:this.panelSentinelStart}}),b=t(m,{key:"sentinelEnd",attrs:{setRef:this.setSentinelEnd,prevElement:this.panelSentinelEnd}}),M=[];"bottom"===a?M.push(_,y,b,v):M.push(v,_,y,b);var w=(0,r.A)({},(0,g.A)((0,h.WM)(this),["change"]),{scroll:this.onScroll});return t("div",{on:w,class:p},[M])}};o.Ay.use(i.A,{name:"ant-ref"});var S=C;function z(e){var t=[];return e.forEach(function(e){e.data&&t.push(e)}),t}function T(e,t){for(var n=z(e),r=0;r2&&void 0!==arguments[2]?arguments[2]:"ltr",r=Y(t)?"translateY":"translateX";return Y(t)||"rtl"!==n?r+"("+100*-e+"%) translateZ(0)":r+"("+100*e+"%) translateZ(0)"}function P(e,t){var n=Y(t)?"marginTop":"marginLeft";return(0,c.A)({},n,100*-e+"%")}function E(e,t){return+window.getComputedStyle(e).getPropertyValue(t).replace("px","")}function j(e,t){return+e.getPropertyValue(t).replace("px","")}function F(e,t,n,r,i){var o=E(i,"padding-"+e);if(!r||!r.parentNode)return o;var a=r.parentNode.childNodes;return Array.prototype.some.call(a,function(i){var a=window.getComputedStyle(i);return i!==r?(o+=j(a,"margin-"+e),o+=i[t],o+=j(a,"margin-"+n),"content-box"===a.boxSizing&&(o+=j(a,"border-"+e+"-width")+j(a,"border-"+n+"-width")),!1):(o+=j(a,"margin-"+e),!0)}),o}function I(e,t){return F("left","offsetWidth","right",e,t)}function $(e,t){return F("top","offsetHeight","bottom",e,t)}var R={name:"TabContent",props:{animated:{type:Boolean,default:!0},animatedWithMargin:{type:Boolean,default:!0},prefixCls:{default:"ant-tabs",type:String},activeKey:d.A.oneOfType([d.A.string,d.A.number]),tabBarPosition:String,direction:d.A.string,destroyInactiveTabPane:d.A.bool},computed:{classes:function(){var e,t=this.animated,n=this.prefixCls;return e={},(0,c.A)(e,n+"-content",!0),(0,c.A)(e,t?n+"-content-animated":n+"-content-no-animated",!0),e}},methods:{getTabPanes:function(){var e=this.$props,t=e.activeKey,n=this.$slots["default"]||[],r=[];return n.forEach(function(n){if(n){var i=n.key,o=t===i;r.push((0,A.Ob)(n,{props:{active:o,destroyInactiveTabPane:e.destroyInactiveTabPane,rootPrefixCls:e.prefixCls}}))}}),r}},render:function(){var e=arguments[0],t=this.activeKey,n=this.tabBarPosition,r=this.animated,i=this.animatedWithMargin,o=this.direction,a=this.classes,s={};if(r&&this.$slots["default"]){var c=T(this.$slots["default"],t);if(-1!==c){var l=i?P(c,n):D(V(c,n,o));s=l}else s={display:"none"}}return e("div",{class:a,style:s},[this.getTabPanes()])}},N=function(e){if("undefined"!==typeof window&&window.document&&window.document.documentElement){var t=Array.isArray(e)?e:[e],n=window.document.documentElement;return t.some(function(e){return e in n.style})}return!1},W=N(["flex","webkitFlex","Flex","msFlex"]),B=n(25592);function K(e,t){var n=e.$props,r=n.styles,i=void 0===r?{}:r,o=n.panels,a=n.activeKey,s=n.direction,c=e.getRef("root"),l=e.getRef("nav")||c,u=e.getRef("inkBar"),d=e.getRef("activeTab"),h=u.style,f=e.$props.tabBarPosition,p=T(o,a);if(t&&(h.display="none"),d){var m=d,v=H(h);if(O(h,""),h.width="",h.height="",h.left="",h.top="",h.bottom="",h.right="","top"===f||"bottom"===f){var g=I(m,l),y=m.offsetWidth;y===c.offsetWidth?y=0:i.inkBar&&void 0!==i.inkBar.width&&(y=parseFloat(i.inkBar.width,10),y&&(g+=(m.offsetWidth-y)/2)),"rtl"===s&&(g=E(m,"margin-left")-g),v?O(h,"translate3d("+g+"px,0,0)"):h.left=g+"px",h.width=y+"px"}else{var _=$(m,l,!0),b=m.offsetHeight;i.inkBar&&void 0!==i.inkBar.height&&(b=parseFloat(i.inkBar.height,10),b&&(_+=(m.offsetHeight-b)/2)),v?(O(h,"translate3d(0,"+_+"px,0)"),h.top="0"):h.top=_+"px",h.height=b+"px"}}h.display=-1!==p?"block":"none"}var U={name:"InkTabBarNode",mixins:[y.A],props:{inkBarAnimated:{type:Boolean,default:!0},direction:d.A.string,prefixCls:String,styles:Object,tabBarPosition:String,saveRef:d.A.func.def(function(){}),getRef:d.A.func.def(function(){}),panels:d.A.array,activeKey:d.A.oneOfType([d.A.string,d.A.number])},updated:function(){this.$nextTick(function(){K(this)})},mounted:function(){this.$nextTick(function(){K(this,!0)})},render:function(){var e,t=arguments[0],n=this.prefixCls,r=this.styles,i=void 0===r?{}:r,o=this.inkBarAnimated,a=n+"-ink-bar",l=(e={},(0,c.A)(e,a,!0),(0,c.A)(e,o?a+"-animated":a+"-no-animated",!0),e);return t("div",s()([{style:i.inkBar,class:l,key:"inkBar"},{directives:[{name:"ant-ref",value:this.saveRef("inkBar")}]}]))}},q=n(9771),G=n.n(q);function J(){}var X={name:"TabBarTabsNode",mixins:[y.A],props:{activeKey:d.A.oneOfType([d.A.string,d.A.number]),panels:d.A.any.def([]),prefixCls:d.A.string.def(""),tabBarGutter:d.A.any.def(null),onTabClick:d.A.func,saveRef:d.A.func.def(J),getRef:d.A.func.def(J),renderTabBarNode:d.A.func,tabBarPosition:d.A.string,direction:d.A.string},render:function(){var e=this,t=arguments[0],n=this.$props,r=n.panels,i=n.activeKey,o=n.prefixCls,a=n.tabBarGutter,l=n.saveRef,u=n.tabBarPosition,d=n.direction,f=[],p=this.renderTabBarNode||this.$scopedSlots.renderTabBarNode;return r.forEach(function(n,m){if(n){var v=(0,h.Oq)(n),g=n.key,y=i===g?o+"-tab-active":"";y+=" "+o+"-tab";var _={on:{}},b=v.disabled||""===v.disabled;b?y+=" "+o+"-tab-disabled":_.on.click=function(){e.__emit("tabClick",g)};var M=[];i===g&&M.push({name:"ant-ref",value:l("activeTab")});var A=(0,h.nu)(n,"tab"),w=a&&m===r.length-1?0:a;w="number"===typeof w?w+"px":w;var x="rtl"===d?"marginLeft":"marginRight",k=(0,c.A)({},Y(u)?"marginBottom":x,w);G()(void 0!==A,"There must be `tab` property or slot on children of Tabs.");var L=t("div",s()([{attrs:{role:"tab","aria-disabled":b?"true":"false","aria-selected":i===g?"true":"false"}},_,{class:y,key:g,style:k},{directives:M}]),[A]);p&&(L=p(L)),f.push(L)}}),t("div",{directives:[{name:"ant-ref",value:this.saveRef("navTabsContainer")}]},[f])}};function Z(){}var Q={name:"TabBarRootNode",mixins:[y.A],props:{saveRef:d.A.func.def(Z),getRef:d.A.func.def(Z),prefixCls:d.A.string.def(""),tabBarPosition:d.A.string.def("top"),extraContent:d.A.any},methods:{onKeyDown:function(e){this.__emit("keydown",e)}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.onKeyDown,i=this.tabBarPosition,o=this.extraContent,a=(0,c.A)({},t+"-bar",!0),l="top"===i||"bottom"===i,u=l?{float:"right"}:{},d=this.$slots["default"],h=d;return o&&(h=[(0,A.Ob)(o,{key:"extra",style:(0,r.A)({},u)}),(0,A.Ob)(d,{key:"content"})],h=l?h:h.reverse()),e("div",s()([{attrs:{role:"tablist",tabIndex:"0"},class:a,on:{keydown:n}},{directives:[{name:"ant-ref",value:this.saveRef("root")}]}]),[h])}},ee=n(38221),te=n.n(ee),ne=n(43591);function re(){}var ie={name:"ScrollableTabBarNode",mixins:[y.A],props:{activeKey:d.A.any,getRef:d.A.func.def(function(){}),saveRef:d.A.func.def(function(){}),tabBarPosition:d.A.oneOf(["left","right","top","bottom"]).def("left"),prefixCls:d.A.string.def(""),scrollAnimated:d.A.bool.def(!0),navWrapper:d.A.func.def(function(e){return e}),prevIcon:d.A.any,nextIcon:d.A.any,direction:d.A.string},data:function(){return this.offset=0,this.prevProps=(0,r.A)({},this.$props),{next:!1,prev:!1}},watch:{tabBarPosition:function(){var e=this;this.tabBarPositionChange=!0,this.$nextTick(function(){e.setOffset(0)})}},mounted:function(){var e=this;this.$nextTick(function(){e.updatedCal(),e.debouncedResize=te()(function(){e.setNextPrev(),e.scrollToActiveTab()},200),e.resizeObserver=new ne.A(e.debouncedResize),e.resizeObserver.observe(e.$props.getRef("container"))})},updated:function(){var e=this;this.$nextTick(function(){e.updatedCal(e.prevProps),e.prevProps=(0,r.A)({},e.$props)})},beforeDestroy:function(){this.resizeObserver&&this.resizeObserver.disconnect(),this.debouncedResize&&this.debouncedResize.cancel&&this.debouncedResize.cancel()},methods:{updatedCal:function(e){var t=this,n=this.$props;e&&e.tabBarPosition!==n.tabBarPosition?this.setOffset(0):this.isNextPrevShown(this.$data)!==this.isNextPrevShown(this.setNextPrev())?(this.$forceUpdate(),this.$nextTick(function(){t.scrollToActiveTab()})):e&&n.activeKey===e.activeKey||this.scrollToActiveTab()},setNextPrev:function(){var e=this.$props.getRef("nav"),t=this.$props.getRef("navTabsContainer"),n=this.getScrollWH(t||e),r=this.getOffsetWH(this.$props.getRef("container"))+1,i=this.getOffsetWH(this.$props.getRef("navWrap")),o=this.offset,a=r-n,s=this.next,c=this.prev;if(a>=0)s=!1,this.setOffset(0,!1),o=0;else if(a1&&void 0!==arguments[1])||arguments[1],n=Math.min(0,e);if(this.offset!==n){this.offset=n;var r={},i=this.$props.tabBarPosition,o=this.$props.getRef("nav").style,a=H(o);"left"===i||"right"===i?r=a?{value:"translate3d(0,"+n+"px,0)"}:{name:"top",value:n+"px"}:a?("rtl"===this.$props.direction&&(n=-n),r={value:"translate3d("+n+"px,0,0)"}):r={name:"left",value:n+"px"},a?O(o,r.value):o[r.name]=r.value,t&&this.setNextPrev()}},setPrev:function(e){this.prev!==e&&(this.prev=e)},setNext:function(e){this.next!==e&&(this.next=e)},isNextPrevShown:function(e){return e?e.next||e.prev:this.next||this.prev},prevTransitionEnd:function(e){if("opacity"===e.propertyName){var t=this.$props.getRef("container");this.scrollToActiveTab({target:t,currentTarget:t})}},scrollToActiveTab:function(e){var t=this.$props.getRef("activeTab"),n=this.$props.getRef("navWrap");if((!e||e.target===e.currentTarget)&&t){var r=this.isNextPrevShown()&&this.lastNextPrevShown;if(this.lastNextPrevShown=this.isNextPrevShown(),r){var i=this.getScrollWH(t),o=this.getOffsetWH(n),a=this.offset,s=this.getOffsetLT(n),c=this.getOffsetLT(t);s>c?(a+=s-c,this.setOffset(a)):s+o=0),e),L={props:(0,r.A)({},this.$props,this.$attrs,{inkBarAnimated:y,extraContent:d,prevIcon:w,nextIcon:x}),style:i,on:(0,h.WM)(this),class:k},C=void 0;return s?(C=s(L,ae),(0,A.Ob)(C,L)):t(ae,L)}},ce=se,le={TabPane:v,name:"ATabs",model:{prop:"activeKey",event:"change"},props:{prefixCls:d.A.string,activeKey:d.A.oneOfType([d.A.string,d.A.number]),defaultActiveKey:d.A.oneOfType([d.A.string,d.A.number]),hideAdd:d.A.bool.def(!1),tabBarStyle:d.A.object,tabBarExtraContent:d.A.any,destroyInactiveTabPane:d.A.bool.def(!1),type:d.A.oneOf(["line","card","editable-card"]),tabPosition:d.A.oneOf(["top","right","bottom","left"]).def("top"),size:d.A.oneOf(["default","small","large"]),animated:d.A.oneOfType([d.A.bool,d.A.object]),tabBarGutter:d.A.number,renderTabBar:d.A.func},inject:{configProvider:{default:function(){return B.f}}},mounted:function(){var e=" no-flex",t=this.$el;t&&!W&&-1===t.className.indexOf(e)&&(t.className+=e)},methods:{removeTab:function(e,t){t.stopPropagation(),x(e)&&this.$emit("edit",e,"remove")},handleChange:function(e){this.$emit("change",e)},createNewTab:function(e){this.$emit("edit",e,"add")},onTabClick:function(e){this.$emit("tabClick",e)},onPrevClick:function(e){this.$emit("prevClick",e)},onNextClick:function(e){this.$emit("nextClick",e)}},render:function(){var e,t,n=this,i=arguments[0],o=(0,h.Oq)(this),a=o.prefixCls,d=o.size,f=o.type,p=void 0===f?"line":f,m=o.tabPosition,v=o.animated,g=void 0===v||v,y=o.hideAdd,_=o.renderTabBar,b=this.configProvider.getPrefixCls,M=b("tabs",a),w=(0,h.Gk)(this.$slots["default"]),x=(0,h.nu)(this,"tabBarExtraContent"),k="object"===("undefined"===typeof g?"undefined":(0,l.A)(g))?g.tabPane:g;"line"!==p&&(k="animated"in o&&k);var L=(e={},(0,c.A)(e,M+"-vertical","left"===m||"right"===m),(0,c.A)(e,M+"-"+d,!!d),(0,c.A)(e,M+"-card",p.indexOf("card")>=0),(0,c.A)(e,M+"-"+p,!0),(0,c.A)(e,M+"-no-animation",!k),e),C=[];"editable-card"===p&&(C=[],w.forEach(function(e,t){var r=(0,h.Oq)(e),o=r.closable;o="undefined"===typeof o||o;var a=o?i(u.A,{attrs:{type:"close"},class:M+"-close-x",on:{click:function(t){return n.removeTab(e.key,t)}}}):null;C.push((0,A.Ob)(e,{props:{tab:i("div",{class:o?void 0:M+"-tab-unclosable"},[(0,h.nu)(e,"tab"),a])},key:e.key||t}))}),y||(x=i("span",[i(u.A,{attrs:{type:"plus"},class:M+"-new-tab",on:{click:this.createNewTab}}),x]))),x=x?i("div",{class:M+"-extra-content"},[x]):null;var z=_||this.$scopedSlots.renderTabBar,T=(0,h.WM)(this),O={props:(0,r.A)({},this.$props,{prefixCls:M,tabBarExtraContent:x,renderTabBar:z}),on:T},H=(t={},(0,c.A)(t,M+"-"+m+"-content",!0),(0,c.A)(t,M+"-card-content",p.indexOf("card")>=0),t),D={props:(0,r.A)({},(0,h.Oq)(this),{prefixCls:M,tabBarPosition:m,renderTabBar:function(){return i(ce,s()([{key:"tabBar"},O]))},renderTabContent:function(){return i(R,{class:H,attrs:{animated:k,animatedWithMargin:!0}})},children:C.length>0?C:w,__propsSymbol__:Symbol()}),on:(0,r.A)({},T,{change:this.handleChange}),class:L};return i(S,D)}},ue=n(44807);le.TabPane=(0,r.A)({},v,{name:"ATabPane",__ANT_TAB_PANE:!0}),le.TabContent=(0,r.A)({},R,{name:"ATabContent"}),o.Ay.use(i.A,{name:"ant-ref"}),le.install=function(e){e.use(ue.A),e.component(le.name,le),e.component(le.TabPane.name,le.TabPane),e.component(le.TabContent.name,le.TabContent)};var de=le},14686:function(e,t,n){"use strict";n(29229)},87298:function(e,t,n){"use strict";n.d(t,{A:function(){return b}});var r=n(75189),i=n.n(r),o=n(44508),a=n(4718),s=n(40255),c=n(80178),l=n(90034),u=n(98416),d=n(15848),h=n(52315),f=n(25592),p=n(36873),m=["pink","red","yellow","orange","cyan","green","blue","purple","geekblue","magenta","volcano","gold","lime"],v=new RegExp("^("+m.join("|")+")(-inverse)?$"),g={name:"ATag",mixins:[h.A],model:{prop:"visible",event:"close.visible"},props:{prefixCls:a.A.string,color:a.A.string,closable:a.A.bool.def(!1),visible:a.A.bool,afterClose:a.A.func},inject:{configProvider:{default:function(){return f.f}}},data:function(){var e=!0,t=(0,d.Oq)(this);return"visible"in t&&(e=this.visible),(0,p.A)(!("afterClose"in t),"Tag","'afterClose' will be deprecated, please use 'close' event, we will remove this in the next version."),{_visible:e}},watch:{visible:function(e){this.setState({_visible:e})}},methods:{setVisible:function(e,t){this.$emit("close",t),this.$emit("close.visible",!1);var n=this.afterClose;n&&n(),t.defaultPrevented||(0,d.cK)(this,"visible")||this.setState({_visible:e})},handleIconClick:function(e){e.stopPropagation(),this.setVisible(!1,e)},isPresetColor:function(){var e=this.$props.color;return!!e&&v.test(e)},getTagStyle:function(){var e=this.$props.color,t=this.isPresetColor();return{backgroundColor:e&&!t?e:void 0}},getTagClassName:function(e){var t,n=this.$props.color,r=this.isPresetColor();return t={},(0,o.A)(t,e,!0),(0,o.A)(t,e+"-"+n,r),(0,o.A)(t,e+"-has-color",n&&!r),t},renderCloseIcon:function(){var e=this.$createElement,t=this.$props.closable;return t?e(s.A,{attrs:{type:"close"},on:{click:this.handleIconClick}}):null}},render:function(){var e=arguments[0],t=this.$props.prefixCls,n=this.configProvider.getPrefixCls,r=n("tag",t),o=this.$data._visible,a=e("span",i()([{directives:[{name:"show",value:o}]},{on:(0,l.A)((0,d.WM)(this),["close"])},{class:this.getTagClassName(r),style:this.getTagStyle()}]),[this.$slots["default"],this.renderCloseIcon()]),s=(0,c.A)(r+"-zoom",{appear:!1});return e(u.A,[e("transition",s,[a])])}},y={name:"ACheckableTag",model:{prop:"checked"},props:{prefixCls:a.A.string,checked:Boolean},inject:{configProvider:{default:function(){return f.f}}},computed:{classes:function(){var e,t=this.checked,n=this.prefixCls,r=this.configProvider.getPrefixCls,i=r("tag",n);return e={},(0,o.A)(e,""+i,!0),(0,o.A)(e,i+"-checkable",!0),(0,o.A)(e,i+"-checkable-checked",t),e}},methods:{handleClick:function(){var e=this.checked;this.$emit("input",!e),this.$emit("change",!e)}},render:function(){var e=arguments[0],t=this.classes,n=this.handleClick,r=this.$slots;return e("div",{class:t,on:{click:n}},[r["default"]])}},_=n(44807);g.CheckableTag=y,g.install=function(e){e.use(_.A),e.component(g.name,g),e.component(g.CheckableTag.name,g.CheckableTag)};var b=g},5554:function(e,t,n){"use strict";n(29229)},83766:function(e,t,n){"use strict";n.d(t,{Ay:function(){return H},PH:function(){return z}});var r=n(44508),i=n(85505),o=n(90034),a=n(95093),s=n.n(a),c=n(46942),l=n.n(c),u=n(4718),d=n(52315),h=n(15848),f=n(51927),p=n(47006),m=n(7772),v={adjustX:1,adjustY:1},g=[0,0],y={bottomLeft:{points:["tl","tl"],overflow:v,offset:[0,-3],targetOffset:g},bottomRight:{points:["tr","tr"],overflow:v,offset:[0,-3],targetOffset:g},topRight:{points:["br","br"],overflow:v,offset:[0,3],targetOffset:g},topLeft:{points:["bl","bl"],overflow:v,offset:[0,3],targetOffset:g}},_=y;function b(){}var M={name:"VcTimePicker",mixins:[d.A],props:(0,h.CB)({prefixCls:u.A.string,clearText:u.A.string,value:u.A.any,defaultOpenValue:{type:Object,default:function(){return s()()}},inputReadOnly:u.A.bool,disabled:u.A.bool,allowEmpty:u.A.bool,defaultValue:u.A.any,open:u.A.bool,defaultOpen:u.A.bool,align:u.A.object,placement:u.A.any,transitionName:u.A.string,getPopupContainer:u.A.func,placeholder:u.A.string,format:u.A.string,showHour:u.A.bool,showMinute:u.A.bool,showSecond:u.A.bool,popupClassName:u.A.string,popupStyle:u.A.object,disabledHours:u.A.func,disabledMinutes:u.A.func,disabledSeconds:u.A.func,hideDisabledOptions:u.A.bool,name:u.A.string,autoComplete:u.A.string,use12Hours:u.A.bool,hourStep:u.A.number,minuteStep:u.A.number,secondStep:u.A.number,focusOnOpen:u.A.bool,autoFocus:u.A.bool,id:u.A.string,inputIcon:u.A.any,clearIcon:u.A.any,addon:u.A.func},{clearText:"clear",prefixCls:"rc-time-picker",defaultOpen:!1,inputReadOnly:!1,popupClassName:"",popupStyle:{},align:{},allowEmpty:!0,showHour:!0,showMinute:!0,showSecond:!0,disabledHours:b,disabledMinutes:b,disabledSeconds:b,hideDisabledOptions:!1,placement:"bottomLeft",use12Hours:!1,focusOnOpen:!1}),data:function(){var e=this.defaultOpen,t=this.defaultValue,n=this.open,r=void 0===n?e:n,i=this.value,o=void 0===i?t:i;return{sOpen:r,sValue:o}},watch:{value:function(e){this.setState({sValue:e})},open:function(e){void 0!==e&&this.setState({sOpen:e})}},mounted:function(){var e=this;this.$nextTick(function(){e.autoFocus&&e.focus()})},methods:{onPanelChange:function(e){this.setValue(e)},onAmPmChange:function(e){this.__emit("amPmChange",e)},onClear:function(e){e.stopPropagation(),this.setValue(null),this.setOpen(!1)},onVisibleChange:function(e){this.setOpen(e)},onEsc:function(){this.setOpen(!1),this.focus()},onKeyDown:function(e){40===e.keyCode&&this.setOpen(!0)},onKeyDown2:function(e){this.__emit("keydown",e)},setValue:function(e){(0,h.cK)(this,"value")||this.setState({sValue:e}),this.__emit("change",e)},getFormat:function(){var e=this.format,t=this.showHour,n=this.showMinute,r=this.showSecond,i=this.use12Hours;if(e)return e;if(i){var o=[t?"h":"",n?"mm":"",r?"ss":""].filter(function(e){return!!e}).join(":");return o.concat(" a")}return[t?"HH":"",n?"mm":"",r?"ss":""].filter(function(e){return!!e}).join(":")},getPanelElement:function(){var e=this.$createElement,t=this.prefixCls,n=this.placeholder,r=this.disabledHours,i=this.addon,o=this.disabledMinutes,a=this.disabledSeconds,s=this.hideDisabledOptions,c=this.inputReadOnly,l=this.showHour,u=this.showMinute,d=this.showSecond,f=this.defaultOpenValue,p=this.clearText,v=this.use12Hours,g=this.focusOnOpen,y=this.onKeyDown2,_=this.hourStep,b=this.minuteStep,M=this.secondStep,A=this.sValue,w=(0,h.nu)(this,"clearIcon");return e(m.A,{attrs:{clearText:p,prefixCls:t+"-panel",value:A,inputReadOnly:c,defaultOpenValue:f,showHour:l,showMinute:u,showSecond:d,format:this.getFormat(),placeholder:n,disabledHours:r,disabledMinutes:o,disabledSeconds:a,hideDisabledOptions:s,use12Hours:v,hourStep:_,minuteStep:b,secondStep:M,focusOnOpen:g,clearIcon:w,addon:i},ref:"panel",on:{change:this.onPanelChange,amPmChange:this.onAmPmChange,esc:this.onEsc,keydown:y}})},getPopupClassName:function(){var e=this.showHour,t=this.showMinute,n=this.showSecond,i=this.use12Hours,o=this.prefixCls,a=this.popupClassName,s=0;return e&&(s+=1),t&&(s+=1),n&&(s+=1),i&&(s+=1),l()(a,(0,r.A)({},o+"-panel-narrow",(!e||!t||!n)&&!i),o+"-panel-column-"+s)},setOpen:function(e){this.sOpen!==e&&((0,h.cK)(this,"open")||this.setState({sOpen:e}),e?this.__emit("open",{open:e}):this.__emit("close",{open:e}))},focus:function(){this.$refs.picker.focus()},blur:function(){this.$refs.picker.blur()},onFocus:function(e){this.__emit("focus",e)},onBlur:function(e){this.__emit("blur",e)},renderClearButton:function(){var e=this,t=this.$createElement,n=this.sValue,r=this.$props,i=r.prefixCls,o=r.allowEmpty,a=r.clearText,s=r.disabled;if(!o||!n||s)return null;var c=(0,h.nu)(this,"clearIcon");if((0,h.zO)(c)){var l=(0,h.kQ)(c)||{},u=l.click;return(0,f.Ob)(c,{on:{click:function(){u&&u.apply(void 0,arguments),e.onClear.apply(e,arguments)}}})}return t("a",{attrs:{role:"button",title:a,tabIndex:0},class:i+"-clear",on:{click:this.onClear}},[c||t("i",{class:i+"-clear-icon"})])}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.placeholder,r=this.placement,i=this.align,o=this.id,a=this.disabled,s=this.transitionName,c=this.getPopupContainer,l=this.name,u=this.autoComplete,d=this.autoFocus,f=this.sOpen,m=this.sValue,v=this.onFocus,g=this.onBlur,y=this.popupStyle,b=this.getPopupClassName(),M=(0,h.nu)(this,"inputIcon");return e(p.A,{attrs:{prefixCls:t+"-panel",popupClassName:b,popupStyle:y,popupAlign:i,builtinPlacements:_,popupPlacement:r,action:a?[]:["click"],destroyPopupOnHide:!0,getPopupContainer:c,popupTransitionName:s,popupVisible:f},on:{popupVisibleChange:this.onVisibleChange}},[e("template",{slot:"popup"},[this.getPanelElement()]),e("span",{class:""+t},[e("input",{class:t+"-input",ref:"picker",attrs:{type:"text",placeholder:n,name:l,disabled:a,autoComplete:u,autoFocus:d,readOnly:!0,id:o},on:{keydown:this.onKeyDown,focus:v,blur:g},domProps:{value:m&&m.format(this.getFormat())||""}}),M||e("span",{class:t+"-icon"}),this.renderClearButton()])])}},A=n(38377),w=n(36873),x=n(40255),k=n(68265),L=n(25592),C=n(44807),S=n(6566);function z(e){return{showHour:e.indexOf("H")>-1||e.indexOf("h")>-1||e.indexOf("k")>-1,showMinute:e.indexOf("m")>-1,showSecond:e.indexOf("s")>-1}}var T=function(){return{size:u.A.oneOf(["large","default","small"]),value:S.nP,defaultValue:S.nP,open:u.A.bool,format:u.A.string,disabled:u.A.bool,placeholder:u.A.string,prefixCls:u.A.string,hideDisabledOptions:u.A.bool,disabledHours:u.A.func,disabledMinutes:u.A.func,disabledSeconds:u.A.func,getPopupContainer:u.A.func,use12Hours:u.A.bool,focusOnOpen:u.A.bool,hourStep:u.A.number,minuteStep:u.A.number,secondStep:u.A.number,allowEmpty:u.A.bool,allowClear:u.A.bool,inputReadOnly:u.A.bool,clearText:u.A.string,defaultOpenValue:u.A.object,popupClassName:u.A.string,popupStyle:u.A.object,suffixIcon:u.A.any,align:u.A.object,placement:u.A.any,transitionName:u.A.string,autoFocus:u.A.bool,addon:u.A.any,clearIcon:u.A.any,locale:u.A.object,valueFormat:u.A.string}},O={name:"ATimePicker",mixins:[d.A],props:(0,h.CB)(T(),{align:{offset:[0,-2]},disabled:!1,disabledHours:void 0,disabledMinutes:void 0,disabledSeconds:void 0,hideDisabledOptions:!1,placement:"bottomLeft",transitionName:"slide-up",focusOnOpen:!0,allowClear:!0}),model:{prop:"value",event:"change"},provide:function(){return{savePopupRef:this.savePopupRef}},inject:{configProvider:{default:function(){return L.f}}},data:function(){var e=this.value,t=this.defaultValue,n=this.valueFormat;return(0,S.n1)("TimePicker",t,"defaultValue",n),(0,S.n1)("TimePicker",e,"value",n),(0,w.A)(!(0,h.cK)(this,"allowEmpty"),"TimePicker","`allowEmpty` is deprecated. Please use `allowClear` instead."),{sValue:(0,S.pY)(e||t,n)}},watch:{value:function(e){(0,S.n1)("TimePicker",e,"value",this.valueFormat),this.setState({sValue:(0,S.pY)(e,this.valueFormat)})}},methods:{getDefaultFormat:function(){var e=this.format,t=this.use12Hours;return e||(t?"h:mm:ss a":"HH:mm:ss")},getAllowClear:function(){var e=this.$props,t=e.allowClear,n=e.allowEmpty;return(0,h.cK)(this,"allowClear")?t:n},getDefaultLocale:function(){var e=(0,i.A)({},k.A,this.$props.locale);return e},savePopupRef:function(e){this.popupRef=e},handleChange:function(e){(0,h.cK)(this,"value")||this.setState({sValue:e});var t=this.format,n=void 0===t?"HH:mm:ss":t;this.$emit("change",this.valueFormat?(0,S.pK)(e,this.valueFormat):e,e&&e.format(n)||"")},handleOpenClose:function(e){var t=e.open;this.$emit("openChange",t),this.$emit("update:open",t)},focus:function(){this.$refs.timePicker.focus()},blur:function(){this.$refs.timePicker.blur()},renderInputIcon:function(e){var t=this.$createElement,n=(0,h.nu)(this,"suffixIcon");n=Array.isArray(n)?n[0]:n;var r=n&&(0,h.zO)(n)&&(0,f.Ob)(n,{class:e+"-clock-icon"})||t(x.A,{attrs:{type:"clock-circle"},class:e+"-clock-icon"});return t("span",{class:e+"-icon"},[r])},renderClearIcon:function(e){var t=this.$createElement,n=(0,h.nu)(this,"clearIcon"),r=e+"-clear";return n&&(0,h.zO)(n)?(0,f.Ob)(n,{class:r}):t(x.A,{attrs:{type:"close-circle",theme:"filled"},class:r})},renderTimePicker:function(e){var t=this.$createElement,n=(0,h.Oq)(this);n=(0,o.A)(n,["defaultValue","suffixIcon","allowEmpty","allowClear"]);var a=n,s=a.prefixCls,c=a.getPopupContainer,l=a.placeholder,u=a.size,d=this.configProvider.getPrefixCls,f=d("time-picker",s),p=this.getDefaultFormat(),m=(0,r.A)({},f+"-"+u,!!u),v=(0,h.nu)(this,"addon",{},!1),g=function(e){return v?t("div",{class:f+"-panel-addon"},["function"===typeof v?v(e):v]):null},y=this.renderInputIcon(f),_=this.renderClearIcon(f),b=this.configProvider.getPopupContainer,A={props:(0,i.A)({},z(p),n,{allowEmpty:this.getAllowClear(),prefixCls:f,getPopupContainer:c||b,format:p,value:this.sValue,placeholder:void 0===l?e.placeholder:l,addon:g,inputIcon:y,clearIcon:_}),class:m,ref:"timePicker",on:(0,i.A)({},(0,h.WM)(this),{change:this.handleChange,open:this.handleOpenClose,close:this.handleOpenClose})};return t(M,A)}},render:function(){var e=arguments[0];return e(A.A,{attrs:{componentName:"TimePicker",defaultLocale:this.getDefaultLocale()},scopedSlots:{default:this.renderTimePicker}})},install:function(e){e.use(C.A),e.component(O.name,O)}},H=O},68265:function(e,t){"use strict";var n={placeholder:"Select time"};t.A=n},26904:function(e,t,n){"use strict";n(29229)},36278:function(e,t,n){"use strict";var r=n(4718),i=r.A.oneOf(["hover","focus","click","contextmenu"]);t.A=function(){return{trigger:r.A.oneOfType([i,r.A.arrayOf(i)]).def("hover"),visible:r.A.bool,defaultVisible:r.A.bool,placement:r.A.oneOf(["top","left","right","bottom","topLeft","topRight","bottomLeft","bottomRight","leftTop","leftBottom","rightTop","rightBottom"]).def("top"),transitionName:r.A.string.def("zoom-big-fast"),overlayStyle:r.A.object.def(function(){return{}}),overlayClassName:r.A.string,prefixCls:r.A.string,mouseEnterDelay:r.A.number.def(.1),mouseLeaveDelay:r.A.number.def(.1),getPopupContainer:r.A.func,arrowPointAtCenter:r.A.bool.def(!1),autoAdjustOverflow:r.A.oneOfType([r.A.bool,r.A.object]).def(!0),destroyTooltipOnHide:r.A.bool.def(!1),align:r.A.object.def(function(){return{}}),builtinPlacements:r.A.object}}},90500:function(e,t,n){"use strict";n.d(t,{A:function(){return S}});var r=n(44508),i=n(85505),o=n(51927),a=n(5748),s=n(4718),c=n(47006),l={adjustX:1,adjustY:1},u=[0,0],d={left:{points:["cr","cl"],overflow:l,offset:[-4,0],targetOffset:u},right:{points:["cl","cr"],overflow:l,offset:[4,0],targetOffset:u},top:{points:["bc","tc"],overflow:l,offset:[0,-4],targetOffset:u},bottom:{points:["tc","bc"],overflow:l,offset:[0,4],targetOffset:u},topLeft:{points:["bl","tl"],overflow:l,offset:[0,-4],targetOffset:u},leftTop:{points:["tr","tl"],overflow:l,offset:[-4,0],targetOffset:u},topRight:{points:["br","tr"],overflow:l,offset:[0,-4],targetOffset:u},rightTop:{points:["tl","tr"],overflow:l,offset:[4,0],targetOffset:u},bottomRight:{points:["tr","br"],overflow:l,offset:[0,4],targetOffset:u},rightBottom:{points:["bl","br"],overflow:l,offset:[4,0],targetOffset:u},bottomLeft:{points:["tl","bl"],overflow:l,offset:[0,4],targetOffset:u},leftBottom:{points:["br","bl"],overflow:l,offset:[-4,0],targetOffset:u}},h={props:{prefixCls:s.A.string,overlay:s.A.any,trigger:s.A.any},updated:function(){var e=this.trigger;e&&e.forcePopupAlign()},render:function(){var e=arguments[0],t=this.overlay,n=this.prefixCls;return e("div",{class:n+"-inner",attrs:{role:"tooltip"}},["function"===typeof t?t():t])}},f=n(15848);function p(){}var m={props:{trigger:s.A.any.def(["hover"]),defaultVisible:s.A.bool,visible:s.A.bool,placement:s.A.string.def("right"),transitionName:s.A.oneOfType([s.A.string,s.A.object]),animation:s.A.any,afterVisibleChange:s.A.func.def(function(){}),overlay:s.A.any,overlayStyle:s.A.object,overlayClassName:s.A.string,prefixCls:s.A.string.def("rc-tooltip"),mouseEnterDelay:s.A.number.def(0),mouseLeaveDelay:s.A.number.def(.1),getTooltipContainer:s.A.func,destroyTooltipOnHide:s.A.bool.def(!1),align:s.A.object.def(function(){return{}}),arrowContent:s.A.any.def(null),tipId:s.A.string,builtinPlacements:s.A.object},methods:{getPopupElement:function(){var e=this.$createElement,t=this.$props,n=t.prefixCls,r=t.tipId;return[e("div",{class:n+"-arrow",key:"arrow"},[(0,f.nu)(this,"arrowContent")]),e(h,{key:"content",attrs:{trigger:this.$refs.trigger,prefixCls:n,id:r,overlay:(0,f.nu)(this,"overlay")}})]},getPopupDomNode:function(){return this.$refs.trigger.getPopupDomNode()}},render:function(e){var t=(0,f.Oq)(this),n=t.overlayClassName,r=t.trigger,o=t.mouseEnterDelay,s=t.mouseLeaveDelay,l=t.overlayStyle,u=t.prefixCls,h=t.afterVisibleChange,m=t.transitionName,v=t.animation,g=t.placement,y=t.align,_=t.destroyTooltipOnHide,b=t.defaultVisible,M=t.getTooltipContainer,A=(0,a.A)(t,["overlayClassName","trigger","mouseEnterDelay","mouseLeaveDelay","overlayStyle","prefixCls","afterVisibleChange","transitionName","animation","placement","align","destroyTooltipOnHide","defaultVisible","getTooltipContainer"]),w=(0,i.A)({},A);(0,f.cK)(this,"visible")&&(w.popupVisible=this.$props.visible);var x=(0,f.WM)(this),k={props:(0,i.A)({popupClassName:n,prefixCls:u,action:r,builtinPlacements:d,popupPlacement:g,popupAlign:y,getPopupContainer:M,afterPopupVisibleChange:h,popupTransitionName:m,popupAnimation:v,defaultPopupVisible:b,destroyPopupOnHide:_,mouseLeaveDelay:s,popupStyle:l,mouseEnterDelay:o},w),on:(0,i.A)({},x,{popupVisibleChange:x.visibleChange||p,popupAlign:x.popupAlign||p}),ref:"trigger"};return e(c.A,k,[e("template",{slot:"popup"},[this.getPopupElement(e)]),this.$slots["default"]])}},v=m,g={adjustX:1,adjustY:1},y={adjustX:0,adjustY:0},_=[0,0];function b(e){return"boolean"===typeof e?e?g:y:(0,i.A)({},y,e)}function M(e){var t=e.arrowWidth,n=void 0===t?5:t,r=e.horizontalArrowShift,o=void 0===r?16:r,a=e.verticalArrowShift,s=void 0===a?12:a,c=e.autoAdjustOverflow,l=void 0===c||c,u={left:{points:["cr","cl"],offset:[-4,0]},right:{points:["cl","cr"],offset:[4,0]},top:{points:["bc","tc"],offset:[0,-4]},bottom:{points:["tc","bc"],offset:[0,4]},topLeft:{points:["bl","tc"],offset:[-(o+n),-4]},leftTop:{points:["tr","cl"],offset:[-4,-(s+n)]},topRight:{points:["br","tc"],offset:[o+n,-4]},rightTop:{points:["tl","cr"],offset:[4,-(s+n)]},bottomRight:{points:["tr","bc"],offset:[o+n,4]},rightBottom:{points:["bl","cr"],offset:[4,s+n]},bottomLeft:{points:["tl","bc"],offset:[-(o+n),4]},leftBottom:{points:["br","cl"],offset:[-4,s+n]}};return Object.keys(u).forEach(function(t){u[t]=e.arrowPointAtCenter?(0,i.A)({},u[t],{overflow:b(l),targetOffset:_}):(0,i.A)({},d[t],{overflow:b(l)}),u[t].ignoreShake=!0}),u}var A=n(25592),w=n(36278),x=function(e,t){var n={},r=(0,i.A)({},e);return t.forEach(function(t){e&&t in e&&(n[t]=e[t],delete r[t])}),{picked:n,omitted:r}},k=(0,w.A)(),L={name:"ATooltip",model:{prop:"visible",event:"visibleChange"},props:(0,i.A)({},k,{title:s.A.any}),inject:{configProvider:{default:function(){return A.f}}},data:function(){return{sVisible:!!this.$props.visible||!!this.$props.defaultVisible}},watch:{visible:function(e){this.sVisible=e}},methods:{onVisibleChange:function(e){(0,f.cK)(this,"visible")||(this.sVisible=!this.isNoTitle()&&e),this.isNoTitle()||this.$emit("visibleChange",e)},getPopupDomNode:function(){return this.$refs.tooltip.getPopupDomNode()},getPlacements:function(){var e=this.$props,t=e.builtinPlacements,n=e.arrowPointAtCenter,r=e.autoAdjustOverflow;return t||M({arrowPointAtCenter:n,verticalArrowShift:8,autoAdjustOverflow:r})},getDisabledCompatibleChildren:function(e){var t=this.$createElement,n=e.componentOptions&&e.componentOptions.Ctor.options||{};if((!0===n.__ANT_BUTTON||!0===n.__ANT_SWITCH||!0===n.__ANT_CHECKBOX)&&(e.componentOptions.propsData.disabled||""===e.componentOptions.propsData.disabled)||"button"===e.tag&&e.data&&e.data.attrs&&void 0!==e.data.attrs.disabled){var r=x((0,f.gd)(e),["position","left","right","top","bottom","float","display","zIndex"]),a=r.picked,s=r.omitted,c=(0,i.A)({display:"inline-block"},a,{cursor:"not-allowed",width:e.componentOptions.propsData.block?"100%":null}),l=(0,i.A)({},s,{pointerEvents:"none"}),u=(0,f.t0)(e),d=(0,o.Ob)(e,{style:l,class:null});return t("span",{style:c,class:u},[d])}return e},isNoTitle:function(){var e=(0,f.nu)(this,"title");return!e&&0!==e},getOverlay:function(){var e=(0,f.nu)(this,"title");return 0===e?e:e||""},onPopupAlign:function(e,t){var n=this.getPlacements(),r=Object.keys(n).filter(function(e){return n[e].points[0]===t.points[0]&&n[e].points[1]===t.points[1]})[0];if(r){var i=e.getBoundingClientRect(),o={top:"50%",left:"50%"};r.indexOf("top")>=0||r.indexOf("Bottom")>=0?o.top=i.height-t.offset[1]+"px":(r.indexOf("Top")>=0||r.indexOf("bottom")>=0)&&(o.top=-t.offset[1]+"px"),r.indexOf("left")>=0||r.indexOf("Right")>=0?o.left=i.width-t.offset[0]+"px":(r.indexOf("right")>=0||r.indexOf("Left")>=0)&&(o.left=-t.offset[0]+"px"),e.style.transformOrigin=o.left+" "+o.top}}},render:function(){var e=arguments[0],t=this.$props,n=this.$data,a=this.$slots,s=t.prefixCls,c=t.openClassName,l=t.getPopupContainer,u=this.configProvider.getPopupContainer,d=this.configProvider.getPrefixCls,h=d("tooltip",s),p=(a["default"]||[]).filter(function(e){return e.tag||""!==e.text.trim()});p=1===p.length?p[0]:p;var m=n.sVisible;if(!(0,f.cK)(this,"visible")&&this.isNoTitle()&&(m=!1),!p)return null;var g=this.getDisabledCompatibleChildren((0,f.zO)(p)?p:e("span",[p])),y=(0,r.A)({},c||h+"-open",!0),_={props:(0,i.A)({},t,{prefixCls:h,getTooltipContainer:l||u,builtinPlacements:this.getPlacements(),overlay:this.getOverlay(),visible:m}),ref:"tooltip",on:(0,i.A)({},(0,f.WM)(this),{visibleChange:this.onVisibleChange,popupAlign:this.onPopupAlign})};return e(v,_,[m?(0,o.Ob)(g,{class:y}):g])}},C=n(44807);L.install=function(e){e.use(C.A),e.component(L.name,L)};var S=L},42543:function(e,t,n){"use strict";n(29229)},27448:function(e,t,n){"use strict";n.d(t,{Ay:function(){return ve}});var r=n(75189),i=n.n(r),o=n(44508),a=n(85505),s=n(46942),c=n.n(s),l=n(50014),u=n.n(l),d=n(24713),h=n.n(d),f=n(44383),p=n.n(f),m=n(4718),v=n(15848),g=n(52315),y=n(6498),_=n.n(y);function b(e,t){var n="cannot "+e.method+" "+e.action+" "+t.status+"'",r=new Error(n);return r.status=t.status,r.method=e.method,r.url=e.action,r}function M(e){var t=e.responseText||e.response;if(!t)return t;try{return JSON.parse(t)}catch(n){return t}}function A(e){var t=new window.XMLHttpRequest;e.onProgress&&t.upload&&(t.upload.onprogress=function(t){t.total>0&&(t.percent=t.loaded/t.total*100),e.onProgress(t)});var n=new window.FormData;e.data&&Object.keys(e.data).forEach(function(t){var r=e.data[t];Array.isArray(r)?r.forEach(function(e){n.append(t+"[]",e)}):n.append(t,e.data[t])}),n.append(e.filename,e.file),t.onerror=function(t){e.onError(t)},t.onload=function(){if(t.status<200||t.status>=300)return e.onError(b(e,t),M(t));e.onSuccess(M(t),t)},t.open(e.method,e.action,!0),e.withCredentials&&"withCredentials"in t&&(t.withCredentials=!0);var r=e.headers||{};for(var i in null!==r["X-Requested-With"]&&t.setRequestHeader("X-Requested-With","XMLHttpRequest"),r)r.hasOwnProperty(i)&&null!==r[i]&&t.setRequestHeader(i,r[i]);return t.send(n),{abort:function(){t.abort()}}}var w=+new Date,x=0;function k(){return"vc-upload-"+w+"-"+ ++x}function L(e,t){return-1!==e.indexOf(t,e.length-t.length)}var C=function(e,t){if(e&&t){var n=Array.isArray(t)?t:t.split(","),r=e.name||"",i=e.type||"",o=i.replace(/\/.*$/,"");return n.some(function(e){var t=e.trim();return"."===t.charAt(0)?L(r.toLowerCase(),t.toLowerCase()):/\/\*$/.test(t)?o===t.replace(/\/.*$/,""):i===t})}return!0};function S(e,t){var n=e.createReader(),r=[];function i(){n.readEntries(function(e){var n=Array.prototype.slice.apply(e);r=r.concat(n);var o=!n.length;o?t(r):i()})}i()}var z=function(e,t,n){var r=function e(r,i){i=i||"",r.isFile?r.file(function(e){n(e)&&(r.fullPath&&!e.webkitRelativePath&&(Object.defineProperties(e,{webkitRelativePath:{writable:!0}}),e.webkitRelativePath=r.fullPath.replace(/^\//,""),Object.defineProperties(e,{webkitRelativePath:{writable:!1}})),t([e]))}):r.isDirectory&&S(r,function(t){t.forEach(function(t){e(t,""+i+r.name+"/")})})},i=!0,o=!1,a=void 0;try{for(var s,c=e[Symbol.iterator]();!(i=(s=c.next()).done);i=!0){var l=s.value;r(l.webkitGetAsEntry())}}catch(u){o=!0,a=u}finally{try{!i&&c["return"]&&c["return"]()}finally{if(o)throw a}}},T=z,O={componentTag:m.A.string,prefixCls:m.A.string,name:m.A.string,multiple:m.A.bool,directory:m.A.bool,disabled:m.A.bool,accept:m.A.string,data:m.A.oneOfType([m.A.object,m.A.func]),action:m.A.oneOfType([m.A.string,m.A.func]),headers:m.A.object,beforeUpload:m.A.func,customRequest:m.A.func,withCredentials:m.A.bool,openFileDialogOnClick:m.A.bool,transformFile:m.A.func,method:m.A.string},H={inheritAttrs:!1,name:"ajaxUploader",mixins:[g.A],props:O,data:function(){return this.reqs={},{uid:k()}},mounted:function(){this._isMounted=!0},beforeDestroy:function(){this._isMounted=!1,this.abort()},methods:{onChange:function(e){var t=e.target.files;this.uploadFiles(t),this.reset()},onClick:function(){var e=this.$refs.fileInputRef;e&&e.click()},onKeyDown:function(e){"Enter"===e.key&&this.onClick()},onFileDrop:function(e){var t=this,n=this.$props.multiple;if(e.preventDefault(),"dragover"!==e.type)if(this.directory)T(e.dataTransfer.items,this.uploadFiles,function(e){return C(e,t.accept)});else{var r=_()(Array.prototype.slice.call(e.dataTransfer.files),function(e){return C(e,t.accept)}),i=r[0],o=r[1];!1===n&&(i=i.slice(0,1)),this.uploadFiles(i),o.length&&this.$emit("reject",o)}},uploadFiles:function(e){var t=this,n=Array.prototype.slice.call(e);n.map(function(e){return e.uid=k(),e}).forEach(function(e){t.upload(e,n)})},upload:function(e,t){var n=this;if(!this.beforeUpload)return setTimeout(function(){return n.post(e)},0);var r=this.beforeUpload(e,t);r&&r.then?r.then(function(t){var r=Object.prototype.toString.call(t);return"[object File]"===r||"[object Blob]"===r?n.post(t):n.post(e)})["catch"](function(e){console&&console.log(e)}):!1!==r&&setTimeout(function(){return n.post(e)},0)},post:function(e){var t=this;if(this._isMounted){var n=this.$props,r=n.data,i=n.transformFile,o=void 0===i?function(e){return e}:i;new Promise(function(n){var r=t.action;if("function"===typeof r)return n(r(e));n(r)}).then(function(i){var a=e.uid,s=t.customRequest||A,c=Promise.resolve(o(e))["catch"](function(e){console.error(e)});c.then(function(o){"function"===typeof r&&(r=r(e));var c={action:i,filename:t.name,data:r,file:o,headers:t.headers,withCredentials:t.withCredentials,method:n.method||"post",onProgress:function(n){t.$emit("progress",n,e)},onSuccess:function(n,r){delete t.reqs[a],t.$emit("success",n,e,r)},onError:function(n,r){delete t.reqs[a],t.$emit("error",n,r,e)}};t.reqs[a]=s(c),t.$emit("start",e)})})}},reset:function(){this.setState({uid:k()})},abort:function(e){var t=this.reqs;if(e){var n=e;e&&e.uid&&(n=e.uid),t[n]&&t[n].abort&&t[n].abort(),delete t[n]}else Object.keys(t).forEach(function(e){t[e]&&t[e].abort&&t[e].abort(),delete t[e]})}},render:function(){var e,t=arguments[0],n=this.$props,r=this.$attrs,i=n.componentTag,s=n.prefixCls,l=n.disabled,u=n.multiple,d=n.accept,h=n.directory,f=n.openFileDialogOnClick,p=c()((e={},(0,o.A)(e,s,!0),(0,o.A)(e,s+"-disabled",l),e)),m=l?{}:{click:f?this.onClick:function(){},keydown:f?this.onKeyDown:function(){},drop:this.onFileDrop,dragover:this.onFileDrop},g={on:(0,a.A)({},(0,v.WM)(this),m),attrs:{role:"button",tabIndex:l?null:"0"},class:p};return t(i,g,[t("input",{attrs:{id:r.id,type:"file",accept:d,directory:h?"directory":null,webkitdirectory:h?"webkitdirectory":null,multiple:u},ref:"fileInputRef",on:{click:function(e){return e.stopPropagation()},change:this.onChange},key:this.uid,style:{display:"none"}}),this.$slots["default"]])}},D=H,Y=n(36873),V={position:"absolute",top:0,opacity:0,filter:"alpha(opacity=0)",left:0,zIndex:9999},P={mixins:[g.A],props:{componentTag:m.A.string,disabled:m.A.bool,prefixCls:m.A.string,accept:m.A.string,multiple:m.A.bool,data:m.A.oneOfType([m.A.object,m.A.func]),action:m.A.oneOfType([m.A.string,m.A.func]),name:m.A.string},data:function(){return this.file={},{uploading:!1}},methods:{onLoad:function(){if(this.uploading){var e=this.file,t=void 0;try{var n=this.getIframeDocument(),r=n.getElementsByTagName("script")[0];r&&r.parentNode===n.body&&n.body.removeChild(r),t=n.body.innerHTML,this.$emit("success",t,e)}catch(i){(0,Y.A)(!1,"cross domain error for Upload. Maybe server should return document.domain script. see Note from https://github.com/react-component/upload"),t="cross-domain",this.$emit("error",i,null,e)}this.endUpload()}},onChange:function(){var e=this,t=this.getFormInputNode(),n=this.file={uid:k(),name:t.value&&t.value.substring(t.value.lastIndexOf("\\")+1,t.value.length)};this.startUpload();var r=this.$props;if(!r.beforeUpload)return this.post(n);var i=r.beforeUpload(n);i&&i.then?i.then(function(){e.post(n)},function(){e.endUpload()}):!1!==i?this.post(n):this.endUpload()},getIframeNode:function(){return this.$refs.iframeRef},getIframeDocument:function(){return this.getIframeNode().contentDocument},getFormNode:function(){return this.getIframeDocument().getElementById("form")},getFormInputNode:function(){return this.getIframeDocument().getElementById("input")},getFormDataNode:function(){return this.getIframeDocument().getElementById("data")},getFileForMultiple:function(e){return this.multiple?[e]:e},getIframeHTML:function(e){var t="",n="";if(e){var r="script";t="<"+r+'>document.domain="'+e+'";",n=''}return'\n \n \n \n \n \n '+t+'\n \n \n
\n \n '+n+'\n \n
\n \n \n '},initIframeSrc:function(){this.domain&&(this.getIframeNode().src="javascript:void((function(){\n var d = document;\n d.open();\n d.domain='"+this.domain+"';\n d.write('');\n d.close();\n })())")},initIframe:function(){var e=this.getIframeNode(),t=e.contentWindow,n=void 0;this.domain=this.domain||"",this.initIframeSrc();try{n=t.document}catch(r){this.domain=document.domain,this.initIframeSrc(),t=e.contentWindow,n=t.document}n.open("text/html","replace"),n.write(this.getIframeHTML(this.domain)),n.close(),this.getFormInputNode().onchange=this.onChange},endUpload:function(){this.uploading&&(this.file={},this.uploading=!1,this.setState({uploading:!1}),this.initIframe())},startUpload:function(){this.uploading||(this.uploading=!0,this.setState({uploading:!0}))},updateIframeWH:function(){var e=this.$el,t=this.getIframeNode();t.style.height=e.offsetHeight+"px",t.style.width=e.offsetWidth+"px"},abort:function(e){if(e){var t=e;e&&e.uid&&(t=e.uid),t===this.file.uid&&this.endUpload()}else this.endUpload()},post:function(e){var t=this,n=this.getFormNode(),r=this.getFormDataNode(),i=this.$props.data;"function"===typeof i&&(i=i(e));var o=document.createDocumentFragment();for(var a in i)if(i.hasOwnProperty(a)){var s=document.createElement("input");s.setAttribute("name",a),s.value=i[a],o.appendChild(s)}r.appendChild(o),new Promise(function(n){var r=t.action;if("function"===typeof r)return n(r(e));n(r)}).then(function(i){n.setAttribute("action",i),n.submit(),r.innerHTML="",t.$emit("start",e)})}},mounted:function(){var e=this;this.$nextTick(function(){e.updateIframeWH(),e.initIframe()})},updated:function(){var e=this;this.$nextTick(function(){e.updateIframeWH()})},render:function(){var e,t=arguments[0],n=this.$props,r=n.componentTag,i=n.disabled,s=n.prefixCls,l=(0,a.A)({},V,{display:this.uploading||i?"none":""}),u=c()((e={},(0,o.A)(e,s,!0),(0,o.A)(e,s+"-disabled",i),e));return t(r,{attrs:{className:u},style:{position:"relative",zIndex:0}},[t("iframe",{ref:"iframeRef",on:{load:this.onLoad},style:l}),this.$slots["default"]])}},E=P;function j(){}var F={componentTag:m.A.string,prefixCls:m.A.string,action:m.A.oneOfType([m.A.string,m.A.func]),name:m.A.string,multipart:m.A.bool,directory:m.A.bool,data:m.A.oneOfType([m.A.object,m.A.func]),headers:m.A.object,accept:m.A.string,multiple:m.A.bool,disabled:m.A.bool,beforeUpload:m.A.func,customRequest:m.A.func,method:m.A.string,withCredentials:m.A.bool,supportServerRender:m.A.bool,openFileDialogOnClick:m.A.bool,transformFile:m.A.func},I={name:"Upload",mixins:[g.A],inheritAttrs:!1,props:(0,v.CB)(F,{componentTag:"span",prefixCls:"rc-upload",data:{},headers:{},name:"file",multipart:!1,supportServerRender:!1,multiple:!1,beforeUpload:j,withCredentials:!1,openFileDialogOnClick:!0}),data:function(){return{Component:null}},mounted:function(){var e=this;this.$nextTick(function(){e.supportServerRender&&e.setState({Component:e.getComponent()},function(){e.$emit("ready")})})},methods:{getComponent:function(){return"undefined"!==typeof File?D:E},abort:function(e){this.$refs.uploaderRef.abort(e)}},render:function(){var e=arguments[0],t={props:(0,a.A)({},this.$props),on:(0,v.WM)(this),ref:"uploaderRef",attrs:this.$attrs};if(this.supportServerRender){var n=this.Component;return n?e(n,t,[this.$slots["default"]]):null}var r=this.getComponent();return e(r,t,[this.$slots["default"]])}},$=I,R=$,N=n(38377),W=n(77749),B=n(25592),K=n(97479);m.A.oneOf(["error","success","done","uploading","removed"]);function U(e){var t=e.uid,n=e.name;return!(!t&&0!==t)&&(!!["string","number"].includes("undefined"===typeof t?"undefined":(0,K.A)(t))&&(""!==n&&"string"===typeof n))}m.A.custom(U),m.A.arrayOf(m.A.custom(U)),m.A.object;var q=m.A.shape({showRemoveIcon:m.A.bool,showPreviewIcon:m.A.bool}).loose,G=m.A.shape({uploading:m.A.string,removeFile:m.A.string,downloadFile:m.A.string,uploadError:m.A.string,previewFile:m.A.string}).loose,J={type:m.A.oneOf(["drag","select"]),name:m.A.string,defaultFileList:m.A.arrayOf(m.A.custom(U)),fileList:m.A.arrayOf(m.A.custom(U)),action:m.A.oneOfType([m.A.string,m.A.func]),directory:m.A.bool,data:m.A.oneOfType([m.A.object,m.A.func]),method:m.A.oneOf(["POST","PUT","post","put"]),headers:m.A.object,showUploadList:m.A.oneOfType([m.A.bool,q]),multiple:m.A.bool,accept:m.A.string,beforeUpload:m.A.func,listType:m.A.oneOf(["text","picture","picture-card"]),remove:m.A.func,supportServerRender:m.A.bool,disabled:m.A.bool,prefixCls:m.A.string,customRequest:m.A.func,withCredentials:m.A.bool,openFileDialogOnClick:m.A.bool,locale:G,height:m.A.number,id:m.A.string,previewFile:m.A.func,transformFile:m.A.func},X=(m.A.arrayOf(m.A.custom(U)),m.A.string,{listType:m.A.oneOf(["text","picture","picture-card"]),items:m.A.arrayOf(m.A.custom(U)),progressAttr:m.A.object,prefixCls:m.A.string,showRemoveIcon:m.A.bool,showDownloadIcon:m.A.bool,showPreviewIcon:m.A.bool,locale:G,previewFile:m.A.func}),Z={name:"AUploadDragger",props:J,render:function(){var e=arguments[0],t=(0,v.Oq)(this),n={props:(0,a.A)({},t,{type:"drag"}),on:(0,v.WM)(this),style:{height:this.height}};return e(pe,n,[this.$slots["default"]])}},Q=n(80178);function ee(){return!0}function te(e){return(0,a.A)({},e,{lastModified:e.lastModified,lastModifiedDate:e.lastModifiedDate,name:e.name,size:e.size,type:e.type,uid:e.uid,percent:0,originFileObj:e})}function ne(){var e=.1,t=.01,n=.98;return function(r){var i=r;return i>=n||(i+=e,e-=t,e<.001&&(e=.001)),i}}function re(e,t){var n=void 0!==e.uid?"uid":"name";return t.filter(function(t){return t[n]===e[n]})[0]}function ie(e,t){var n=void 0!==e.uid?"uid":"name",r=t.filter(function(t){return t[n]!==e[n]});return r.length===t.length?null:r}var oe=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=e.split("/"),n=t[t.length-1],r=n.split(/#|\?/)[0];return(/\.[^./\\]*$/.exec(r)||[""])[0]},ae=function(e){return!!e&&0===e.indexOf("image/")},se=function(e){if(ae(e.type))return!0;var t=e.thumbUrl||e.url,n=oe(t);return!(!/^data:image\//.test(t)&&!/(webp|svg|png|gif|jpg|jpeg|jfif|bmp|dpg|ico)$/i.test(n))||!/^data:/.test(t)&&!n},ce=200;function le(e){return new Promise(function(t){if(ae(e.type)){var n=document.createElement("canvas");n.width=ce,n.height=ce,n.style.cssText="position: fixed; left: 0; top: 0; width: "+ce+"px; height: "+ce+"px; z-index: 9999; display: none;",document.body.appendChild(n);var r=n.getContext("2d"),i=new Image;i.onload=function(){var e=i.width,o=i.height,a=ce,s=ce,c=0,l=0;e=this.$refs.subMenuTitle.offsetWidth||(e.style.minWidth=this.$refs.subMenuTitle.offsetWidth+"px")}},renderChildren:function(e){var t=this.$createElement,n=this.$props,r=(0,y.WM)(this),a=r.select,c=r.deselect,l=r.openChange,u={props:{mode:"horizontal"===n.mode?"vertical":n.mode,visible:n.isOpen,level:n.level+1,inlineIndent:n.inlineIndent,focusable:!1,selectedKeys:n.selectedKeys,eventKey:n.eventKey+"-menu-",openKeys:n.openKeys,openTransitionName:n.openTransitionName,openAnimation:n.openAnimation,subMenuOpenDelay:n.subMenuOpenDelay,parentMenu:this,subMenuCloseDelay:n.subMenuCloseDelay,forceSubMenuRender:n.forceSubMenuRender,triggerSubMenuAction:n.triggerSubMenuAction,builtinPlacements:n.builtinPlacements,defaultActiveFirst:n.store.getState().defaultActiveFirst[(0,b.V8)(n.eventKey)],multiple:n.multiple,prefixCls:n.rootPrefixCls,manualRef:this.saveMenuInstance,itemIcon:(0,y.nu)(this,"itemIcon"),expandIcon:(0,y.nu)(this,"expandIcon"),children:e},on:{click:this.onSubMenuClick,select:a,deselect:c,openChange:l},id:this.internalMenuId},d=u.props,h=this.haveRendered;if(this.haveRendered=!0,this.haveOpened=this.haveOpened||d.visible||d.forceSubMenuRender,!this.haveOpened)return t("div");var p=h||!d.visible||"inline"===!d.mode;u["class"]=" "+d.prefixCls+"-sub";var m={appear:p,css:!1},v={props:m,on:{}};return d.openTransitionName?v=(0,M.A)(d.openTransitionName,{appear:p}):"object"===(0,o.A)(d.openAnimation)?(m=(0,s.A)({},m,d.openAnimation.props||{}),p||(m.appear=!1)):"string"===typeof d.openAnimation&&(v=(0,M.A)(d.openAnimation,{appear:p})),"object"===(0,o.A)(d.openAnimation)&&d.openAnimation.on&&(v.on=d.openAnimation.on),t("transition",v,[t(f.Ay,i()([{directives:[{name:"show",value:n.isOpen}]},u]))])}},render:function(){var e,t,n=arguments[0],r=this.$props,o=this.rootPrefixCls,l=this.parentMenu,d=r.isOpen,h=this.getPrefixCls(),f="inline"===r.mode,p=(e={},(0,a.A)(e,h,!0),(0,a.A)(e,h+"-"+r.mode,!0),(0,a.A)(e,this.getOpenClassName(),d),(0,a.A)(e,this.getActiveClassName(),r.active||d&&!f),(0,a.A)(e,this.getDisabledClassName(),r.disabled),(0,a.A)(e,this.getSelectedClassName(),this.isChildrenSelected()),e);this.internalMenuId||(r.eventKey?this.internalMenuId=r.eventKey+"$Menu":this.internalMenuId="$__$"+ ++A+"$Menu");var m={},g={},_={};r.disabled||(m={mouseleave:this.onMouseLeave,mouseenter:this.onMouseEnter},g={click:this.onTitleClick},_={mouseenter:this.onTitleMouseEnter,mouseleave:this.onTitleMouseLeave});var b={};f&&(b.paddingLeft=r.inlineIndent*r.level+"px");var M={};d&&(M={"aria-owns":this.internalMenuId});var x={attrs:(0,s.A)({"aria-expanded":d},M,{"aria-haspopup":"true",title:"string"===typeof r.title?r.title:void 0}),on:(0,s.A)({},_,g),style:b,class:h+"-title",ref:"subMenuTitle"},k=null;"horizontal"!==r.mode&&(k=(0,y.nu)(this,"expandIcon",r));var L=n("div",x,[(0,y.nu)(this,"title"),k||n("i",{class:h+"-arrow"})]),C=this.renderChildren((0,y.Gk)(this.$slots["default"])),S=this.parentMenu.isRootMenu?this.parentMenu.getPopupContainer:function(e){return e.parentNode},z=w[r.mode],T=r.popupOffset?{offset:r.popupOffset}:{},O="inline"===r.mode?"":r.popupClassName,H={on:(0,s.A)({},(0,c.A)((0,y.WM)(this),["click"]),m),class:p};return n("li",i()([H,{attrs:{role:"menuitem"}}]),[f&&L,f&&C,!f&&n(u.A,{attrs:(t={prefixCls:h,popupClassName:h+"-popup "+o+"-"+l.theme+" "+(O||""),getPopupContainer:S,builtinPlacements:v},(0,a.A)(t,"builtinPlacements",(0,s.A)({},v,r.builtinPlacements)),(0,a.A)(t,"popupPlacement",z),(0,a.A)(t,"popupVisible",d),(0,a.A)(t,"popupAlign",T),(0,a.A)(t,"action",r.disabled?[]:[r.triggerSubMenuAction]),(0,a.A)(t,"mouseEnterDelay",r.subMenuOpenDelay),(0,a.A)(t,"mouseLeaveDelay",r.subMenuCloseDelay),(0,a.A)(t,"forceRender",r.forceSubMenuRender),t),on:{popupVisibleChange:this.onPopupVisibleChange}},[n("template",{slot:"popup"},[C]),L])])}},L=(0,h.A)(function(e,t){var n=e.openKeys,r=e.activeKey,i=e.selectedKeys,o=t.eventKey,a=t.subMenuKey;return{isOpen:n.indexOf(o)>-1,active:r[a]===o,selectedKeys:i}})(k);L.isSubMenu=!0;var C=L},4275:function(e,t,n){"use strict";n.d(t,{Ay:function(){return T},GO:function(){return S}});var r=n(5748),i=n(44508),o=n(85505),a=n(90034),s=n(4718),c=n(14221),l=n(52315),u=n(11207),d=n(46942),h=n.n(d),f=n(78556),p=n(32779),m=n(43591),v=n(70198),g=n(51927),y=n(15848),_=!("undefined"===typeof window||!window.document||!window.document.createElement),b="menuitem-overflowed",M=.5;_&&n(22708);var A={name:"DOMWrap",mixins:[l.A],data:function(){return this.resizeObserver=null,this.mutationObserver=null,this.originalTotalWidth=0,this.overflowedItems=[],this.menuItemSizes=[],{lastVisibleIndex:void 0}},mounted:function(){var e=this;this.$nextTick(function(){if(e.setChildrenWidthAndResize(),1===e.level&&"horizontal"===e.mode){var t=e.$el;if(!t)return;e.resizeObserver=new m.A(function(t){t.forEach(e.setChildrenWidthAndResize)}),[].slice.call(t.children).concat(t).forEach(function(t){e.resizeObserver.observe(t)}),"undefined"!==typeof MutationObserver&&(e.mutationObserver=new MutationObserver(function(){e.resizeObserver.disconnect(),[].slice.call(t.children).concat(t).forEach(function(t){e.resizeObserver.observe(t)}),e.setChildrenWidthAndResize()}),e.mutationObserver.observe(t,{attributes:!1,childList:!0,subTree:!1}))}})},beforeDestroy:function(){this.resizeObserver&&this.resizeObserver.disconnect(),this.mutationObserver&&this.mutationObserver.disconnect()},methods:{getMenuItemNodes:function(){var e=this.$props.prefixCls,t=this.$el;return t?[].slice.call(t.children).filter(function(t){return t.className.split(" ").indexOf(e+"-overflowed-submenu")<0}):[]},getOverflowedSubMenuItem:function(e,t,n){var i=this.$createElement,a=this.$props,s=a.overflowedIndicator,c=a.level,l=a.mode,u=a.prefixCls,d=a.theme;if(1!==c||"horizontal"!==l)return null;var h=this.$slots["default"][0],p=(0,y.Ts)(h),m=(p.title,(0,r.A)(p,["title"])),g=(0,y.kQ)(h),_={},b=e+"-overflowed-indicator",M=e+"-overflowed-indicator";0===t.length&&!0!==n?_={display:"none"}:n&&(_={visibility:"hidden",position:"absolute"},b+="-placeholder",M+="-placeholder");var A=d?u+"-"+d:"",w={},x={};f.$J.props.forEach(function(e){void 0!==m[e]&&(w[e]=m[e])}),f.$J.on.forEach(function(e){void 0!==g[e]&&(x[e]=g[e])});var k={props:(0,o.A)({title:s,popupClassName:A},w,{eventKey:M,disabled:!1}),class:u+"-overflowed-submenu",key:b,style:_,on:x};return i(v.A,k,[t])},setChildrenWidthAndResize:function(){if("horizontal"===this.mode){var e=this.$el;if(e){var t=e.children;if(t&&0!==t.length){var n=e.children[t.length-1];(0,f.eC)(n,"display","inline-block");var r=this.getMenuItemNodes(),i=r.filter(function(e){return e.className.split(" ").indexOf(b)>=0});i.forEach(function(e){(0,f.eC)(e,"display","inline-block")}),this.menuItemSizes=r.map(function(e){return(0,f.RG)(e)}),i.forEach(function(e){(0,f.eC)(e,"display","none")}),this.overflowedIndicatorWidth=(0,f.RG)(e.children[e.children.length-1]),this.originalTotalWidth=this.menuItemSizes.reduce(function(e,t){return e+t},0),this.handleResize(),(0,f.eC)(n,"display","none")}}}},handleResize:function(){var e=this;if("horizontal"===this.mode){var t=this.$el;if(t){var n=(0,f.RG)(t);this.overflowedItems=[];var r=0,i=void 0;this.originalTotalWidth>n+M&&(i=-1,this.menuItemSizes.forEach(function(t){r+=t,r+e.overflowedIndicatorWidth<=n&&(i+=1)})),this.setState({lastVisibleIndex:i})}}},renderChildren:function(e){var t=this,n=this.$data.lastVisibleIndex,r=(0,y.t0)(this);return(e||[]).reduce(function(i,o,a){var s=o,c=(0,y.Ts)(o).eventKey;if("horizontal"===t.mode){var l=t.getOverflowedSubMenuItem(c,[]);void 0!==n&&-1!==r[t.prefixCls+"-root"]&&(a>n&&(s=(0,g.Ob)(o,{style:{display:"none"},props:{eventKey:c+"-hidden"},class:b})),a===n+1&&(t.overflowedItems=e.slice(n+1).map(function(e){return(0,g.Ob)(e,{key:(0,y.Ts)(e).eventKey,props:{mode:"vertical-left"}})}),l=t.getOverflowedSubMenuItem(c,t.overflowedItems)));var u=[].concat((0,p.A)(i),[l,s]);return a===e.length-1&&u.push(t.getOverflowedSubMenuItem(c,[],!0)),u}return[].concat((0,p.A)(i),[s])},[])}},render:function(){var e=arguments[0],t=this.$props.tag,n={on:(0,y.WM)(this)};return e(t,n,[this.renderChildren(this.$slots["default"])])}};A.props={mode:s.A.oneOf(["horizontal","vertical","vertical-left","vertical-right","inline"]),prefixCls:s.A.string,level:s.A.number,theme:s.A.string,overflowedIndicator:s.A.node,visible:s.A.bool,hiddenClassName:s.A.string,tag:s.A.string.def("div")};var w=A;function x(e){return!e.length||e.every(function(e){return!!e.disabled})}function k(e,t,n){var r=e.getState();e.setState({activeKey:(0,o.A)({},r.activeKey,(0,i.A)({},t,n))})}function L(e){return e.eventKey||"0-menu-"}function C(e,t){if(t){var n=this.instanceArrayKeyIndexMap[e];this.instanceArray[n]=t}}function S(e,t){var n=t,r=e.eventKey,i=e.defaultActiveFirst,o=e.children;if(void 0!==n&&null!==n){var a=void 0;if((0,f.ns)(o,function(e,t){var i=e.componentOptions.propsData||{};e&&!i.disabled&&n===(0,f.dL)(e,r,t)&&(a=!0)}),a)return n}return n=null,i?((0,f.ns)(o,function(e,t){var i=e.componentOptions.propsData||{},o=null===n||void 0===n;o&&e&&!i.disabled&&(n=(0,f.dL)(e,r,t))}),n):n}var z={name:"SubPopupMenu",props:(0,y.CB)({prefixCls:s.A.string,openTransitionName:s.A.string,openAnimation:s.A.oneOfType([s.A.string,s.A.object]),openKeys:s.A.arrayOf(s.A.oneOfType([s.A.string,s.A.number])),visible:s.A.bool,parentMenu:s.A.object,eventKey:s.A.string,store:s.A.object,forceSubMenuRender:s.A.bool,focusable:s.A.bool,multiple:s.A.bool,defaultActiveFirst:s.A.bool,activeKey:s.A.oneOfType([s.A.string,s.A.number]),selectedKeys:s.A.arrayOf(s.A.oneOfType([s.A.string,s.A.number])),defaultSelectedKeys:s.A.arrayOf(s.A.oneOfType([s.A.string,s.A.number])),defaultOpenKeys:s.A.arrayOf(s.A.oneOfType([s.A.string,s.A.number])),level:s.A.number,mode:s.A.oneOf(["horizontal","vertical","vertical-left","vertical-right","inline"]),triggerSubMenuAction:s.A.oneOf(["click","hover"]),inlineIndent:s.A.oneOfType([s.A.number,s.A.string]),manualRef:s.A.func,itemIcon:s.A.any,expandIcon:s.A.any,overflowedIndicator:s.A.any,children:s.A.any.def([]),__propsSymbol__:s.A.any},{prefixCls:"rc-menu",mode:"vertical",level:1,inlineIndent:24,visible:!0,focusable:!0,manualRef:f.lQ}),mixins:[l.A],created:function(){var e=(0,y.Oq)(this);this.prevProps=(0,o.A)({},e),e.store.setState({activeKey:(0,o.A)({},e.store.getState().activeKey,(0,i.A)({},e.eventKey,S(e,e.activeKey)))}),this.instanceArray=[]},mounted:function(){this.manualRef&&this.manualRef(this)},updated:function(){var e=(0,y.Oq)(this),t=this.prevProps,n="activeKey"in e?e.activeKey:e.store.getState().activeKey[L(e)],r=S(e,n);if(r!==n)k(e.store,L(e),r);else if("activeKey"in t){var i=S(t,t.activeKey);r!==i&&k(e.store,L(e),r)}this.prevProps=(0,o.A)({},e)},methods:{onKeyDown:function(e,t){var n=e.keyCode,r=void 0;if(this.getFlatInstanceArray().forEach(function(t){t&&t.active&&t.onKeyDown&&(r=t.onKeyDown(e))}),r)return 1;var i=null;return n!==u.A.UP&&n!==u.A.DOWN||(i=this.step(n===u.A.UP?-1:1)),i?(e.preventDefault(),k(this.$props.store,L(this.$props),i.eventKey),"function"===typeof t&&t(i),1):void 0},onItemHover:function(e){var t=e.key,n=e.hover;k(this.$props.store,L(this.$props),n?t:null)},onDeselect:function(e){this.__emit("deselect",e)},onSelect:function(e){this.__emit("select",e)},onClick:function(e){this.__emit("click",e)},onOpenChange:function(e){this.__emit("openChange",e)},onDestroy:function(e){this.__emit("destroy",e)},getFlatInstanceArray:function(){return this.instanceArray},getOpenTransitionName:function(){return this.$props.openTransitionName},step:function(e){var t=this.getFlatInstanceArray(),n=this.$props.store.getState().activeKey[L(this.$props)],r=t.length;if(!r)return null;e<0&&(t=t.concat().reverse());var i=-1;if(t.every(function(e,t){return!e||e.eventKey!==n||(i=t,!1)}),this.defaultActiveFirst||-1===i||!x(t.slice(i,r-1))){var o=(i+1)%r,a=o;do{var s=t[a];if(s&&!s.disabled)return s;a=(a+1)%r}while(a!==o);return null}},getIcon:function(e,t){if(e.$createElement){var n=e[t];return void 0!==n?n:e.$slots[t]||e.$scopedSlots[t]}var r=(0,y.Ts)(e)[t];if(void 0!==r)return r;var i=[],o=e.componentOptions||{};return(o.children||[]).forEach(function(e){e.data&&e.data.slot===t&&("template"===e.tag?i.push(e.children):i.push(e))}),i.length?i:void 0},renderCommonMenuItem:function(e,t,n){var r=this;if(void 0===e.tag)return e;var i=this.$props.store.getState(),a=this.$props,s=(0,f.dL)(e,a.eventKey,t),c=e.componentOptions.propsData||{},l=s===i.activeKey[L(this.$props)];c.disabled||(this.instanceArrayKeyIndexMap[s]=Object.keys(this.instanceArrayKeyIndexMap).length);var u=(0,y.kQ)(e),d={props:(0,o.A)({mode:c.mode||a.mode,level:a.level,inlineIndent:a.inlineIndent,renderMenuItem:this.renderMenuItem,rootPrefixCls:a.prefixCls,index:t,parentMenu:a.parentMenu,manualRef:c.disabled?f.lQ:C.bind(this,s),eventKey:s,active:!c.disabled&&l,multiple:a.multiple,openTransitionName:this.getOpenTransitionName(),openAnimation:a.openAnimation,subMenuOpenDelay:a.subMenuOpenDelay,subMenuCloseDelay:a.subMenuCloseDelay,forceSubMenuRender:a.forceSubMenuRender,builtinPlacements:a.builtinPlacements,itemIcon:this.getIcon(e,"itemIcon")||this.getIcon(this,"itemIcon"),expandIcon:this.getIcon(e,"expandIcon")||this.getIcon(this,"expandIcon")},n),on:{click:function(e){(u.click||f.lQ)(e),r.onClick(e)},itemHover:this.onItemHover,openChange:this.onOpenChange,deselect:this.onDeselect,select:this.onSelect}};return("inline"===a.mode||(0,f.Xb)())&&(d.props.triggerSubMenuAction="click"),(0,g.Ob)(e,d)},renderMenuItem:function(e,t,n){if(!e)return null;var r=this.$props.store.getState(),i={openKeys:r.openKeys,selectedKeys:r.selectedKeys,triggerSubMenuAction:this.triggerSubMenuAction,isRootMenu:!1,subMenuKey:n};return this.renderCommonMenuItem(e,t,i)}},render:function(){var e=this,t=arguments[0],n=(0,r.A)(this.$props,[]),i=n.eventKey,o=n.prefixCls,s=n.visible,c=n.level,l=n.mode,u=n.theme;this.instanceArray=[],this.instanceArrayKeyIndexMap={};var d=h()(n.prefixCls,n.prefixCls+"-"+n.mode),f={props:{tag:"ul",visible:s,prefixCls:o,level:c,mode:l,theme:u,overflowedIndicator:(0,y.nu)(this,"overflowedIndicator")},attrs:{role:n.role||"menu"},class:d,on:(0,a.A)((0,y.WM)(this),["click"])};return n.focusable&&(f.attrs.tabIndex="0",f.on.keydown=this.onKeyDown),t(w,f,[n.children.map(function(t,n){return e.renderMenuItem(t,n,i||"0-menu-")})])}},T=(0,c.A)()(z)},55384:function(e,t,n){"use strict";var r=n(4718);t.A={prefixCls:r.A.string.def("rc-menu"),focusable:r.A.bool.def(!0),multiple:r.A.bool,defaultActiveFirst:r.A.bool,visible:r.A.bool.def(!0),activeKey:r.A.oneOfType([r.A.string,r.A.number]),selectedKeys:r.A.arrayOf(r.A.oneOfType([r.A.string,r.A.number])),defaultSelectedKeys:r.A.arrayOf(r.A.oneOfType([r.A.string,r.A.number])).def([]),defaultOpenKeys:r.A.arrayOf(r.A.oneOfType([r.A.string,r.A.number])).def([]),openKeys:r.A.arrayOf(r.A.oneOfType([r.A.string,r.A.number])),openAnimation:r.A.oneOfType([r.A.string,r.A.object]),mode:r.A.oneOf(["horizontal","vertical","vertical-left","vertical-right","inline"]).def("vertical"),triggerSubMenuAction:r.A.string.def("hover"),subMenuOpenDelay:r.A.number.def(.1),subMenuCloseDelay:r.A.number.def(.1),level:r.A.number.def(1),inlineIndent:r.A.number.def(24),theme:r.A.oneOf(["light","dark"]).def("light"),getPopupContainer:r.A.func,openTransitionName:r.A.string,forceSubMenuRender:r.A.bool,selectable:r.A.bool,isRootMenu:r.A.bool.def(!0),builtinPlacements:r.A.object.def(function(){return{}}),itemIcon:r.A.any,expandIcon:r.A.any,overflowedIndicator:r.A.any}},74072:function(e,t,n){"use strict";n.d(t,{Ay:function(){return p}});var r=n(85505),i=n(4718);function o(e){var t=e,n=[];function i(e){t=(0,r.A)({},t,e);for(var i=0;i=n&&(e.updateKey=a[0].updateKey||a[0].key,a.shift()),a.push(e)),{notices:a}})},remove:function(e){this.setState(function(t){return{notices:t.notices.filter(function(t){return t.key!==e})}})}},render:function(e){var t=this,n=this.prefixCls,r=this.notices,o=this.remove,a=this.getTransitionName,c=(0,u.A)(a()),d=r.map(function(i,a){var c=Boolean(a===r.length-1&&i.updateKey),u=i.updateKey?i.updateKey:i.key,d=i.content,f=i.duration,m=i.closable,v=i.onClose,g=i.style,y=i["class"],_=(0,l.A)(o.bind(t,i.key),v),b={props:{prefixCls:n,duration:f,closable:m,update:c,closeIcon:(0,s.nu)(t,"closeIcon")},on:{close:_,click:i.onClick||p},style:g,class:y,key:u};return e(h,b,["function"===typeof d?d(e):d])}),f=(0,i.A)({},n,1),m=(0,s.gd)(this);return e("div",{class:f,style:m||{top:"65px",left:"50%"}},[e("transition-group",c,[d])])},newInstance:function(e,t){var n=e||{},i=n.getContainer,a=n.style,s=n["class"],c=(0,r.A)(n,["getContainer","style","class"]),l=document.createElement("div");if(i){var u=i();u.appendChild(l)}else document.body.appendChild(l);var d=f.A.Vue||o.Ay;new d({el:l,mounted:function(){var e=this;this.$nextTick(function(){t({notice:function(t){e.$refs.notification.add(t)},removeNotice:function(t){e.$refs.notification.remove(t)},component:e,destroy:function(){e.$destroy(),e.$el.parentNode.removeChild(e.$el)}})})},render:function(){var e=arguments[0],t={props:c,ref:"notification",style:a,class:s};return e(y,t)}})}},_=y,b=_},15709:function(e,t){"use strict";t.A={items_per_page:"/ page",jump_to:"Go to",jump_to_confirm:"confirm",page:"",prev_page:"Previous Page",next_page:"Next Page",prev_5:"Previous 5 Pages",next_5:"Next 5 Pages",prev_3:"Previous 3 Pages",next_3:"Next 3 Pages"}},48931:function(e,t){"use strict";t.A={items_per_page:"条/页",jump_to:"跳至",jump_to_confirm:"确定",page:"页",prev_page:"上一页",next_page:"下一页",prev_5:"向前 5 页",next_5:"向后 5 页",prev_3:"向前 3 页",next_3:"向后 3 页"}},68052:function(e,t,n){"use strict";var r=n(4718);t.A={props:{value:r.A.oneOfType([r.A.string,r.A.number]),label:r.A.oneOfType([r.A.string,r.A.number])},isSelectOptGroup:!0}},28781:function(e,t,n){"use strict";var r=n(4718);t.A={props:{value:r.A.oneOfType([r.A.string,r.A.number]),label:r.A.oneOfType([r.A.string,r.A.number]),disabled:r.A.bool,title:r.A.oneOfType([r.A.string,r.A.number])},isSelectOption:!0}},7772:function(e,t,n){"use strict";n.d(t,{A:function(){return S}});var r=n(95093),i=n.n(r),o=n(4718),a=n(52315),s=n(75189),c=n.n(s),l={mixins:[a.A],props:{format:o.A.string,prefixCls:o.A.string,disabledDate:o.A.func,placeholder:o.A.string,clearText:o.A.string,value:o.A.object,inputReadOnly:o.A.bool.def(!1),hourOptions:o.A.array,minuteOptions:o.A.array,secondOptions:o.A.array,disabledHours:o.A.func,disabledMinutes:o.A.func,disabledSeconds:o.A.func,allowEmpty:o.A.bool,defaultOpenValue:o.A.object,currentSelectPanel:o.A.string,focusOnOpen:o.A.bool,clearIcon:o.A.any},data:function(){var e=this.value,t=this.format;return{str:e&&e.format(t)||"",invalid:!1}},mounted:function(){var e=this;if(this.focusOnOpen){var t=window.requestAnimationFrame||window.setTimeout;t(function(){e.$refs.input.focus(),e.$refs.input.select()})}},watch:{value:function(e){var t=this;this.$nextTick(function(){t.setState({str:e&&e.format(t.format)||"",invalid:!1})})}},methods:{onInputChange:function(e){var t=e.target,n=t.value,r=t.composing,o=this.str,a=void 0===o?"":o;if(!e.isComposing&&!r&&a!==n){this.setState({str:n});var s=this.format,c=this.hourOptions,l=this.minuteOptions,u=this.secondOptions,d=this.disabledHours,h=this.disabledMinutes,f=this.disabledSeconds,p=this.value;if(n){var m=this.getProtoValue().clone(),v=i()(n,s,!0);if(!v.isValid())return void this.setState({invalid:!0});if(m.hour(v.hour()).minute(v.minute()).second(v.second()),c.indexOf(m.hour())<0||l.indexOf(m.minute())<0||u.indexOf(m.second())<0)return void this.setState({invalid:!0});var g=d(),y=h(m.hour()),_=f(m.hour(),m.minute());if(g&&g.indexOf(m.hour())>=0||y&&y.indexOf(m.minute())>=0||_&&_.indexOf(m.second())>=0)return void this.setState({invalid:!0});if(p){if(p.hour()!==m.hour()||p.minute()!==m.minute()||p.second()!==m.second()){var b=p.clone();b.hour(m.hour()),b.minute(m.minute()),b.second(m.second()),this.__emit("change",b)}}else p!==m&&this.__emit("change",m)}else this.__emit("change",null);this.setState({invalid:!1})}},onKeyDown:function(e){27===e.keyCode&&this.__emit("esc"),this.__emit("keydown",e)},getProtoValue:function(){return this.value||this.defaultOpenValue},getInput:function(){var e=this.$createElement,t=this.prefixCls,n=this.placeholder,r=this.inputReadOnly,i=this.invalid,o=this.str,a=i?t+"-input-invalid":"";return e("input",c()([{class:t+"-input "+a,ref:"input",on:{keydown:this.onKeyDown,input:this.onInputChange},domProps:{value:o},attrs:{placeholder:n,readOnly:!!r}},{directives:[{name:"ant-input"}]}]))}},render:function(){var e=arguments[0],t=this.prefixCls;return e("div",{class:t+"-input-wrap"},[this.getInput()])}},u=l,d=n(44508),h=n(46942),f=n.n(h),p=n(93146),m=n.n(p);function v(){}var g=function e(t,n,r){if(r<=0)m()(function(){t.scrollTop=n});else{var i=n-t.scrollTop,o=i/r*10;m()(function(){t.scrollTop+=o,t.scrollTop!==n&&e(t,n,r-10)})}},y={mixins:[a.A],props:{prefixCls:o.A.string,options:o.A.array,selectedIndex:o.A.number,type:o.A.string},data:function(){return{active:!1}},mounted:function(){var e=this;this.$nextTick(function(){e.scrollToSelected(0)})},watch:{selectedIndex:function(){var e=this;this.$nextTick(function(){e.scrollToSelected(120)})}},methods:{onSelect:function(e){var t=this.type;this.__emit("select",t,e)},onEsc:function(e){this.__emit("esc",e)},getOptions:function(){var e=this,t=this.$createElement,n=this.options,r=this.selectedIndex,i=this.prefixCls;return n.map(function(n,o){var a,s=f()((a={},(0,d.A)(a,i+"-select-option-selected",r===o),(0,d.A)(a,i+"-select-option-disabled",n.disabled),a)),c=n.disabled?v:function(){e.onSelect(n.value)},l=function(t){13===t.keyCode?c():27===t.keyCode&&e.onEsc()};return t("li",{attrs:{role:"button",disabled:n.disabled,tabIndex:"0"},on:{click:c,keydown:l},class:s,key:o},[n.value])})},handleMouseEnter:function(e){this.setState({active:!0}),this.__emit("mouseenter",e)},handleMouseLeave:function(){this.setState({active:!1})},scrollToSelected:function(e){var t=this.$el,n=this.$refs.list;if(n){var r=this.selectedIndex;r<0&&(r=0);var i=n.children[r],o=i.offsetTop;g(t,o,e)}}},render:function(){var e,t=arguments[0],n=this.prefixCls,r=this.options,i=this.active;if(0===r.length)return null;var o=(e={},(0,d.A)(e,n+"-select",1),(0,d.A)(e,n+"-select-active",i),e);return t("div",{class:o,on:{mouseenter:this.handleMouseEnter,mouseleave:this.handleMouseLeave}},[t("ul",{ref:"list"},[this.getOptions()])])}},_=y,b=function(e,t){var n=""+e;e<10&&(n="0"+e);var r=!1;return t&&t.indexOf(e)>=0&&(r=!0),{value:n,disabled:r}},M={mixins:[a.A],name:"Combobox",props:{format:o.A.string,defaultOpenValue:o.A.object,prefixCls:o.A.string,value:o.A.object,showHour:o.A.bool,showMinute:o.A.bool,showSecond:o.A.bool,hourOptions:o.A.array,minuteOptions:o.A.array,secondOptions:o.A.array,disabledHours:o.A.func,disabledMinutes:o.A.func,disabledSeconds:o.A.func,use12Hours:o.A.bool,isAM:o.A.bool},methods:{onItemChange:function(e,t){var n=this.defaultOpenValue,r=this.use12Hours,i=this.value,o=this.isAM,a=(i||n).clone();if("hour"===e)r?o?a.hour(+t%12):a.hour(+t%12+12):a.hour(+t);else if("minute"===e)a.minute(+t);else if("ampm"===e){var s=t.toUpperCase();r&&("PM"===s&&a.hour()<12&&a.hour(a.hour()%12+12),"AM"===s&&a.hour()>=12&&a.hour(a.hour()-12)),this.__emit("amPmChange",s)}else a.second(+t);this.__emit("change",a)},onEnterSelectPanel:function(e){this.__emit("currentSelectPanelChange",e)},onEsc:function(e){this.__emit("esc",e)},getHourSelect:function(e){var t=this,n=this.$createElement,r=this.prefixCls,i=this.hourOptions,o=this.disabledHours,a=this.showHour,s=this.use12Hours;if(!a)return null;var c=o(),l=void 0,u=void 0;return s?(l=[12].concat(i.filter(function(e){return e<12&&e>0})),u=e%12||12):(l=i,u=e),n(_,{attrs:{prefixCls:r,options:l.map(function(e){return b(e,c)}),selectedIndex:l.indexOf(u),type:"hour"},on:{select:this.onItemChange,mouseenter:function(){return t.onEnterSelectPanel("hour")},esc:this.onEsc}})},getMinuteSelect:function(e){var t=this,n=this.$createElement,r=this.prefixCls,i=this.minuteOptions,o=this.disabledMinutes,a=this.defaultOpenValue,s=this.showMinute,c=this.value;if(!s)return null;var l=c||a,u=o(l.hour());return n(_,{attrs:{prefixCls:r,options:i.map(function(e){return b(e,u)}),selectedIndex:i.indexOf(e),type:"minute"},on:{select:this.onItemChange,mouseenter:function(){return t.onEnterSelectPanel("minute")},esc:this.onEsc}})},getSecondSelect:function(e){var t=this,n=this.$createElement,r=this.prefixCls,i=this.secondOptions,o=this.disabledSeconds,a=this.showSecond,s=this.defaultOpenValue,c=this.value;if(!a)return null;var l=c||s,u=o(l.hour(),l.minute());return n(_,{attrs:{prefixCls:r,options:i.map(function(e){return b(e,u)}),selectedIndex:i.indexOf(e),type:"second"},on:{select:this.onItemChange,mouseenter:function(){return t.onEnterSelectPanel("second")},esc:this.onEsc}})},getAMPMSelect:function(){var e=this,t=this.$createElement,n=this.prefixCls,r=this.use12Hours,i=this.format,o=this.isAM;if(!r)return null;var a=["am","pm"].map(function(e){return i.match(/\sA/)?e.toUpperCase():e}).map(function(e){return{value:e}}),s=o?0:1;return t(_,{attrs:{prefixCls:n,options:a,selectedIndex:s,type:"ampm"},on:{select:this.onItemChange,mouseenter:function(){return e.onEnterSelectPanel("ampm")},esc:this.onEsc}})}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.defaultOpenValue,r=this.value,i=r||n;return e("div",{class:t+"-combobox"},[this.getHourSelect(i.hour()),this.getMinuteSelect(i.minute()),this.getSecondSelect(i.second()),this.getAMPMSelect(i.hour())])}},A=M,w=n(15848);function x(){}function k(e,t,n){for(var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,i=[],o=0;o=0&&e.hour()<12}},render:function(){var e=arguments[0],t=this.prefixCls,n=this.placeholder,r=this.disabledMinutes,i=this.addon,o=this.disabledSeconds,a=this.hideDisabledOptions,s=this.showHour,c=this.showMinute,l=this.showSecond,d=this.format,h=this.defaultOpenValue,f=this.clearText,p=this.use12Hours,m=this.focusOnOpen,v=this.hourStep,g=this.minuteStep,y=this.secondStep,_=this.inputReadOnly,b=this.sValue,M=this.currentSelectPanel,C=(0,w.nu)(this,"clearIcon"),S=(0,w.WM)(this),z=S.esc,T=void 0===z?x:z,O=S.keydown,H=void 0===O?x:O,D=this.disabledHours2(),Y=r(b?b.hour():null),V=o(b?b.hour():null,b?b.minute():null),P=k(24,D,a,v),E=k(60,Y,a,g),j=k(60,V,a,y),F=L(h,P,E,j);return e("div",{class:t+"-inner"},[e(u,{attrs:{clearText:f,prefixCls:t,defaultOpenValue:F,value:b,currentSelectPanel:M,format:d,placeholder:n,hourOptions:P,minuteOptions:E,secondOptions:j,disabledHours:this.disabledHours2,disabledMinutes:r,disabledSeconds:o,focusOnOpen:m,inputReadOnly:_,clearIcon:C},on:{esc:T,change:this.onChange,keydown:H}}),e(A,{attrs:{prefixCls:t,value:b,defaultOpenValue:F,format:d,showHour:s,showMinute:c,showSecond:l,hourOptions:P,minuteOptions:E,secondOptions:j,disabledHours:this.disabledHours2,disabledMinutes:r,disabledSeconds:o,use12Hours:p,isAM:this.isAM()},on:{change:this.onChange,amPmChange:this.onAmPmChange,currentSelectPanelChange:this.onCurrentSelectPanelChange,esc:this.onEsc}}),i(this)])}},S=C},47006:function(e,t,n){"use strict";n.d(t,{A:function(){return lt}});var r,i=n(85505),o=n(85471),a=n(24415),s=n(4718),c=n(17948),l=n(15848),u=n(982),d=n(82160),h=n(36873),f=n(97479);function p(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function m(e){for(var t=1;t=0&&n.left>=0&&n.bottom>n.top&&n.right>n.left?n:null}function _e(e,t,n,r){var i=fe.clone(e),o={width:t.width,height:t.height};return r.adjustX&&i.left=n.left&&i.left+o.width>n.right&&(o.width-=i.left+o.width-n.right),r.adjustX&&i.left+o.width>n.right&&(i.left=Math.max(n.right-o.width,n.left)),r.adjustY&&i.top=n.top&&i.top+o.height>n.bottom&&(o.height-=i.top+o.height-n.bottom),r.adjustY&&i.top+o.height>n.bottom&&(i.top=Math.max(n.bottom-o.height,n.top)),fe.mix(i,o)}function be(e){var t,n,r;if(fe.isWindow(e)||9===e.nodeType){var i=fe.getWindow(e);t={left:fe.getWindowScrollLeft(i),top:fe.getWindowScrollTop(i)},n=fe.viewportWidth(i),r=fe.viewportHeight(i)}else t=fe.offset(e),n=fe.outerWidth(e),r=fe.outerHeight(e);return t.width=n,t.height=r,t}function Me(e,t){var n=t.charAt(0),r=t.charAt(1),i=e.width,o=e.height,a=e.left,s=e.top;return"c"===n?s+=o/2:"b"===n&&(s+=o),"c"===r?a+=i/2:"r"===r&&(a+=i),{left:a,top:s}}function Ae(e,t,n,r,i){var o=Me(t,n[1]),a=Me(e,n[0]),s=[a.left-o.left,a.top-o.top];return{left:Math.round(e.left-s[0]+r[0]-i[0]),top:Math.round(e.top-s[1]+r[1]-i[1])}}function we(e,t,n){return e.leftn.right}function xe(e,t,n){return e.topn.bottom}function ke(e,t,n){return e.left>n.right||e.left+t.widthn.bottom||e.top+t.height=n.right||r.top>=n.bottom}function De(e,t,n){var r=n.target||t,i=be(r),o=!He(r,n.overflow&&n.overflow.alwaysByViewport);return Oe(e,i,n,o)}function Ye(e,t,n){var r,i,o=fe.getDocument(e),a=o.defaultView||o.parentWindow,s=fe.getWindowScrollLeft(a),c=fe.getWindowScrollTop(a),l=fe.viewportWidth(a),u=fe.viewportHeight(a);r="pageX"in t?t.pageX:s+t.clientX,i="pageY"in t?t.pageY:c+t.clientY;var d={left:r,top:i,width:0,height:0},h=r>=0&&r<=s+l&&i>=0&&i<=c+u,f=[n.points[0],"cc"];return Oe(e,d,m(m({},n),{},{points:f}),h)}De.__getOffsetParent=me,De.__getVisibleRectForElement=ye;function Ve(e,t){var n=void 0;function r(){n&&(clearTimeout(n),n=null)}function i(){r(),n=setTimeout(e,t)}return i.clear=r,i}function Pe(e,t){return e===t||!(!e||!t)&&("pageX"in t&&"pageY"in t?e.pageX===t.pageX&&e.pageY===t.pageY:"clientX"in t&&"clientY"in t&&(e.clientX===t.clientX&&e.clientY===t.clientY))}function Ee(e){return e&&"object"===("undefined"===typeof e?"undefined":(0,f.A)(e))&&e.window===e}function je(e,t){var n=Math.floor(e),r=Math.floor(t);return Math.abs(n-r)<=1}function Fe(e,t){e!==document.activeElement&&(0,c.A)(t,e)&&e.focus()}var Ie=n(51927),$e=n(88055),Re=n.n($e);function Ne(e){return"function"===typeof e&&e?e():null}function We(e){return"object"===("undefined"===typeof e?"undefined":(0,f.A)(e))&&e?e:null}var Be={props:{childrenProps:s.A.object,align:s.A.object.isRequired,target:s.A.oneOfType([s.A.func,s.A.object]).def(function(){return window}),monitorBufferTime:s.A.number.def(50),monitorWindowResize:s.A.bool.def(!1),disabled:s.A.bool.def(!1)},data:function(){return this.aligned=!1,{}},mounted:function(){var e=this;this.$nextTick(function(){e.prevProps=(0,i.A)({},e.$props);var t=e.$props;!e.aligned&&e.forceAlign(),!t.disabled&&t.monitorWindowResize&&e.startMonitorWindowResize()})},updated:function(){var e=this;this.$nextTick(function(){var t=e.prevProps,n=e.$props,r=!1;if(!n.disabled){var o=e.$el,a=o?o.getBoundingClientRect():null;if(t.disabled)r=!0;else{var s=Ne(t.target),c=Ne(n.target),l=We(t.target),u=We(n.target);Ee(s)&&Ee(c)?r=!1:(s!==c||s&&!c&&u||l&&u&&c||u&&!Pe(l,u))&&(r=!0);var d=e.sourceRect||{};r||!o||je(d.width,a.width)&&je(d.height,a.height)||(r=!0)}e.sourceRect=a}r&&e.forceAlign(),n.monitorWindowResize&&!n.disabled?e.startMonitorWindowResize():e.stopMonitorWindowResize(),e.prevProps=(0,i.A)({},e.$props,{align:Re()(e.$props.align)})})},beforeDestroy:function(){this.stopMonitorWindowResize()},methods:{startMonitorWindowResize:function(){this.resizeHandler||(this.bufferMonitor=Ve(this.forceAlign,this.$props.monitorBufferTime),this.resizeHandler=(0,d.A)(window,"resize",this.bufferMonitor))},stopMonitorWindowResize:function(){this.resizeHandler&&(this.bufferMonitor.clear(),this.resizeHandler.remove(),this.resizeHandler=null)},forceAlign:function(){var e=this.$props,t=e.disabled,n=e.target,r=e.align;if(!t&&n){var i=this.$el,o=(0,l.WM)(this),a=void 0,s=Ne(n),c=We(n),u=document.activeElement;s?a=De(i,s,r):c&&(a=Ye(i,c,r)),Fe(u,i),this.aligned=!0,o.align&&o.align(i,a)}}},render:function(){var e=this.$props.childrenProps,t=(0,l.$c)(this)[0];return t&&e?(0,Ie.Ob)(t,{props:e}):t}},Ke=Be,Ue=n(75189),qe=n.n(Ue),Ge={props:{visible:s.A.bool,hiddenClassName:s.A.string},render:function(){var e=arguments[0],t=this.$props,n=t.hiddenClassName,r=(t.visible,null);if(n||!this.$slots["default"]||this.$slots["default"].length>1){var i="";r=e("div",{class:i},[this.$slots["default"]])}else r=this.$slots["default"][0];return r}},Je={props:{hiddenClassName:s.A.string.def(""),prefixCls:s.A.string,visible:s.A.bool},render:function(){var e=arguments[0],t=this.$props,n=t.prefixCls,r=t.visible,i=t.hiddenClassName,o={on:(0,l.WM)(this)};return e("div",qe()([o,{class:r?"":i}]),[e(Ge,{class:n+"-content",attrs:{visible:r}},[this.$slots["default"]])])}},Xe=n(75998),Ze=n(52315),Qe={name:"VCTriggerPopup",mixins:[Ze.A],props:{visible:s.A.bool,getClassNameFromAlign:s.A.func,getRootDomNode:s.A.func,align:s.A.any,destroyPopupOnHide:s.A.bool,prefixCls:s.A.string,getContainer:s.A.func,transitionName:s.A.string,animation:s.A.any,maskAnimation:s.A.string,maskTransitionName:s.A.string,mask:s.A.bool,zIndex:s.A.number,popupClassName:s.A.any,popupStyle:s.A.object.def(function(){return{}}),stretch:s.A.string,point:s.A.shape({pageX:s.A.number,pageY:s.A.number})},data:function(){return this.domEl=null,{stretchChecked:!1,targetWidth:void 0,targetHeight:void 0}},mounted:function(){var e=this;this.$nextTick(function(){e.rootNode=e.getPopupDomNode(),e.setStretchSize()})},updated:function(){var e=this;this.$nextTick(function(){e.setStretchSize()})},beforeDestroy:function(){this.$el.parentNode?this.$el.parentNode.removeChild(this.$el):this.$el.remove&&this.$el.remove()},methods:{onAlign:function(e,t){var n=this.$props,r=n.getClassNameFromAlign(t);this.currentAlignClassName!==r&&(this.currentAlignClassName=r,e.className=this.getClassName(r));var i=(0,l.WM)(this);i.align&&i.align(e,t)},setStretchSize:function(){var e=this.$props,t=e.stretch,n=e.getRootDomNode,r=e.visible,i=this.$data,o=i.stretchChecked,a=i.targetHeight,s=i.targetWidth;if(t&&r){var c=n();if(c){var l=c.offsetHeight,u=c.offsetWidth;a===l&&s===u&&o||this.setState({stretchChecked:!0,targetHeight:l,targetWidth:u})}}else o&&this.setState({stretchChecked:!1})},getPopupDomNode:function(){return this.$refs.popupInstance?this.$refs.popupInstance.$el:null},getTargetElement:function(){return this.$props.getRootDomNode()},getAlignTarget:function(){var e=this.$props.point;return e||this.getTargetElement},getMaskTransitionName:function(){var e=this.$props,t=e.maskTransitionName,n=e.maskAnimation;return!t&&n&&(t=e.prefixCls+"-"+n),t},getTransitionName:function(){var e=this.$props,t=e.transitionName,n=e.animation;return t||("string"===typeof n?t=""+n:n&&n.props&&n.props.name&&(t=n.props.name)),t},getClassName:function(e){return this.$props.prefixCls+" "+this.$props.popupClassName+" "+e},getPopupElement:function(){var e=this,t=this.$createElement,n=this.$props,r=this.$slots,o=this.getTransitionName,a=this.$data,s=a.stretchChecked,c=a.targetHeight,u=a.targetWidth,d=n.align,h=n.visible,p=n.prefixCls,m=n.animation,v=n.popupStyle,g=n.getClassNameFromAlign,y=n.destroyPopupOnHide,_=n.stretch,b=this.getClassName(this.currentAlignClassName||g(d));h||(this.currentAlignClassName=null);var M={};_&&(-1!==_.indexOf("height")?M.height="number"===typeof c?c+"px":c:-1!==_.indexOf("minHeight")&&(M.minHeight="number"===typeof c?c+"px":c),-1!==_.indexOf("width")?M.width="number"===typeof u?u+"px":u:-1!==_.indexOf("minWidth")&&(M.minWidth="number"===typeof u?u+"px":u),s||setTimeout(function(){e.$refs.alignInstance&&e.$refs.alignInstance.forceAlign()},0));var A={props:{prefixCls:p,visible:h},class:b,on:(0,l.WM)(this),ref:"popupInstance",style:(0,i.A)({},M,v,this.getZIndexStyle())},w={props:{appear:!0,css:!1}},x=o(),k=!!x,L={beforeEnter:function(){},enter:function(t,n){e.$nextTick(function(){e.$refs.alignInstance?e.$refs.alignInstance.$nextTick(function(){e.domEl=t,(0,Xe.A)(t,x+"-enter",n)}):n()})},beforeLeave:function(){e.domEl=null},leave:function(e,t){(0,Xe.A)(e,x+"-leave",t)}};if("object"===("undefined"===typeof m?"undefined":(0,f.A)(m))){k=!0;var C=m.on,S=void 0===C?{}:C,z=m.props,T=void 0===z?{}:z;w.props=(0,i.A)({},w.props,T),w.on=(0,i.A)({},L,S)}else w.on=L;return k||(w={}),t("transition",w,y?[h?t(Ke,{attrs:{target:this.getAlignTarget(),monitorWindowResize:!0,align:d},key:"popup",ref:"alignInstance",on:{align:this.onAlign}},[t(Je,A,[r["default"]])]):null]:[t(Ke,{directives:[{name:"show",value:h}],attrs:{target:this.getAlignTarget(),monitorWindowResize:!0,disabled:!h,align:d},key:"popup",ref:"alignInstance",on:{align:this.onAlign}},[t(Je,A,[r["default"]])])])},getZIndexStyle:function(){var e={},t=this.$props;return void 0!==t.zIndex&&(e.zIndex=t.zIndex),e},getMaskElement:function(){var e=this.$createElement,t=this.$props,n=null;if(t.mask){var r=this.getMaskTransitionName();n=e(Ge,{directives:[{name:"show",value:t.visible}],style:this.getZIndexStyle(),key:"mask",class:t.prefixCls+"-mask",attrs:{visible:t.visible}}),r&&(n=e("transition",{attrs:{appear:!0,name:r}},[n]))}return n}},render:function(){var e=arguments[0],t=this.getMaskElement,n=this.getPopupElement;return e("div",[t(),n()])}};function et(e,t,n){return n?e[0]===t[0]:e[0]===t[0]&&e[1]===t[1]}function tt(e,t,n){var r=e[t]||{};return(0,i.A)({},r,n)}function nt(e,t,n,r){var i=n.points;for(var o in e)if(e.hasOwnProperty(o)&&et(e[o].points,i,r))return t+"-placement-"+o;return""}function rt(){}var it={props:{autoMount:s.A.bool.def(!0),autoDestroy:s.A.bool.def(!0),visible:s.A.bool,forceRender:s.A.bool.def(!1),parent:s.A.any,getComponent:s.A.func.isRequired,getContainer:s.A.func.isRequired,children:s.A.func.isRequired},mounted:function(){this.autoMount&&this.renderComponent()},updated:function(){this.autoMount&&this.renderComponent()},beforeDestroy:function(){this.autoDestroy&&this.removeContainer()},methods:{removeContainer:function(){this.container&&(this._component&&this._component.$destroy(),this.container.parentNode.removeChild(this.container),this.container=null,this._component=null)},renderComponent:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],n=this.visible,r=this.forceRender,i=this.getContainer,o=this.parent,a=this;if(n||o._component||o.$refs._component||r){var s=this.componentEl;this.container||(this.container=i(),s=document.createElement("div"),this.componentEl=s,this.container.appendChild(s));var c={component:a.getComponent(e)};this._component?this._component.setComponent(c):this._component=new this.$root.constructor({el:s,parent:a,data:{_com:c},mounted:function(){this.$nextTick(function(){t&&t.call(a)})},updated:function(){this.$nextTick(function(){t&&t.call(a)})},methods:{setComponent:function(e){this.$data._com=e}},render:function(){return this.$data._com.component}})}}},render:function(){return this.children({renderComponent:this.renderComponent,removeContainer:this.removeContainer})}};function ot(){return""}function at(){return window.document}o.Ay.use(a.A,{name:"ant-ref"});var st=["click","mousedown","touchstart","mouseenter","mouseleave","focus","blur","contextmenu"],ct={name:"Trigger",mixins:[Ze.A],props:{action:s.A.oneOfType([s.A.string,s.A.arrayOf(s.A.string)]).def([]),showAction:s.A.any.def([]),hideAction:s.A.any.def([]),getPopupClassNameFromAlign:s.A.any.def(ot),afterPopupVisibleChange:s.A.func.def(rt),popup:s.A.any,popupStyle:s.A.object.def(function(){return{}}),prefixCls:s.A.string.def("rc-trigger-popup"),popupClassName:s.A.string.def(""),popupPlacement:s.A.string,builtinPlacements:s.A.object,popupTransitionName:s.A.oneOfType([s.A.string,s.A.object]),popupAnimation:s.A.any,mouseEnterDelay:s.A.number.def(0),mouseLeaveDelay:s.A.number.def(.1),zIndex:s.A.number,focusDelay:s.A.number.def(0),blurDelay:s.A.number.def(.15),getPopupContainer:s.A.func,getDocument:s.A.func.def(at),forceRender:s.A.bool,destroyPopupOnHide:s.A.bool.def(!1),mask:s.A.bool.def(!1),maskClosable:s.A.bool.def(!0),popupAlign:s.A.object.def(function(){return{}}),popupVisible:s.A.bool,defaultPopupVisible:s.A.bool.def(!1),maskTransitionName:s.A.oneOfType([s.A.string,s.A.object]),maskAnimation:s.A.string,stretch:s.A.string,alignPoint:s.A.bool},provide:function(){return{vcTriggerContext:this}},inject:{vcTriggerContext:{default:function(){return{}}},savePopupRef:{default:function(){return rt}},dialogContext:{default:function(){return null}}},data:function(){var e=this,t=this.$props,n=void 0;return n=(0,l.cK)(this,"popupVisible")?!!t.popupVisible:!!t.defaultPopupVisible,st.forEach(function(t){e["fire"+t]=function(n){e.fireEvents(t,n)}}),{prevPopupVisible:n,sPopupVisible:n,point:null}},watch:{popupVisible:function(e){void 0!==e&&(this.prevPopupVisible=this.sPopupVisible,this.sPopupVisible=e)}},deactivated:function(){this.setPopupVisible(!1)},mounted:function(){var e=this;this.$nextTick(function(){e.renderComponent(null),e.updatedCal()})},updated:function(){var e=this,t=function(){e.sPopupVisible!==e.prevPopupVisible&&e.afterPopupVisibleChange(e.sPopupVisible),e.prevPopupVisible=e.sPopupVisible};this.renderComponent(null,t),this.$nextTick(function(){e.updatedCal()})},beforeDestroy:function(){this.clearDelayTimer(),this.clearOutsideHandler(),clearTimeout(this.mouseDownTimeout)},methods:{updatedCal:function(){var e=this.$props,t=this.$data;if(t.sPopupVisible){var n=void 0;this.clickOutsideHandler||!this.isClickToHide()&&!this.isContextmenuToShow()||(n=e.getDocument(),this.clickOutsideHandler=(0,d.A)(n,"mousedown",this.onDocumentClick)),this.touchOutsideHandler||(n=n||e.getDocument(),this.touchOutsideHandler=(0,d.A)(n,"touchstart",this.onDocumentClick)),!this.contextmenuOutsideHandler1&&this.isContextmenuToShow()&&(n=n||e.getDocument(),this.contextmenuOutsideHandler1=(0,d.A)(n,"scroll",this.onContextmenuClose)),!this.contextmenuOutsideHandler2&&this.isContextmenuToShow()&&(this.contextmenuOutsideHandler2=(0,d.A)(window,"blur",this.onContextmenuClose))}else this.clearOutsideHandler()},onMouseenter:function(e){var t=this.$props.mouseEnterDelay;this.fireEvents("mouseenter",e),this.delaySetPopupVisible(!0,t,t?null:e)},onMouseMove:function(e){this.fireEvents("mousemove",e),this.setPoint(e)},onMouseleave:function(e){this.fireEvents("mouseleave",e),this.delaySetPopupVisible(!1,this.$props.mouseLeaveDelay)},onPopupMouseenter:function(){this.clearDelayTimer()},onPopupMouseleave:function(e){e&&e.relatedTarget&&!e.relatedTarget.setTimeout&&this._component&&this._component.getPopupDomNode&&(0,c.A)(this._component.getPopupDomNode(),e.relatedTarget)||this.delaySetPopupVisible(!1,this.$props.mouseLeaveDelay)},onFocus:function(e){this.fireEvents("focus",e),this.clearDelayTimer(),this.isFocusToShow()&&(this.focusTime=Date.now(),this.delaySetPopupVisible(!0,this.$props.focusDelay))},onMousedown:function(e){this.fireEvents("mousedown",e),this.preClickTime=Date.now()},onTouchstart:function(e){this.fireEvents("touchstart",e),this.preTouchTime=Date.now()},onBlur:function(e){(0,c.A)(e.target,e.relatedTarget||document.activeElement)||(this.fireEvents("blur",e),this.clearDelayTimer(),this.isBlurToHide()&&this.delaySetPopupVisible(!1,this.$props.blurDelay))},onContextmenu:function(e){e.preventDefault(),this.fireEvents("contextmenu",e),this.setPopupVisible(!0,e)},onContextmenuClose:function(){this.isContextmenuToShow()&&this.close()},onClick:function(e){if(this.fireEvents("click",e),this.focusTime){var t=void 0;if(this.preClickTime&&this.preTouchTime?t=Math.min(this.preClickTime,this.preTouchTime):this.preClickTime?t=this.preClickTime:this.preTouchTime&&(t=this.preTouchTime),Math.abs(t-this.focusTime)<20)return;this.focusTime=0}this.preClickTime=0,this.preTouchTime=0,this.isClickToShow()&&(this.isClickToHide()||this.isBlurToHide())&&e&&e.preventDefault&&e.preventDefault(),e&&e.domEvent&&e.domEvent.preventDefault();var n=!this.$data.sPopupVisible;(this.isClickToHide()&&!n||n&&this.isClickToShow())&&this.setPopupVisible(!this.$data.sPopupVisible,e)},onPopupMouseDown:function(){var e=this,t=this.vcTriggerContext,n=void 0===t?{}:t;this.hasPopupMouseDown=!0,clearTimeout(this.mouseDownTimeout),this.mouseDownTimeout=setTimeout(function(){e.hasPopupMouseDown=!1},0),n.onPopupMouseDown&&n.onPopupMouseDown.apply(n,arguments)},onDocumentClick:function(e){if(!this.$props.mask||this.$props.maskClosable){var t=e.target,n=this.$el;(0,c.A)(n,t)||this.hasPopupMouseDown||this.close()}},getPopupDomNode:function(){return this._component&&this._component.getPopupDomNode?this._component.getPopupDomNode():null},getRootDomNode:function(){return this.$el},handleGetPopupClassFromAlign:function(e){var t=[],n=this.$props,r=n.popupPlacement,i=n.builtinPlacements,o=n.prefixCls,a=n.alignPoint,s=n.getPopupClassNameFromAlign;return r&&i&&t.push(nt(i,o,e,a)),s&&t.push(s(e)),t.join(" ")},getPopupAlign:function(){var e=this.$props,t=e.popupPlacement,n=e.popupAlign,r=e.builtinPlacements;return t&&r?tt(r,t,n):n},savePopup:function(e){this._component=e,this.savePopupRef(e)},getComponent:function(){var e=this.$createElement,t=this,n={};this.isMouseEnterToShow()&&(n.mouseenter=t.onPopupMouseenter),this.isMouseLeaveToHide()&&(n.mouseleave=t.onPopupMouseleave),n.mousedown=this.onPopupMouseDown,n.touchstart=this.onPopupMouseDown;var r=t.handleGetPopupClassFromAlign,o=t.getRootDomNode,a=t.getContainer,s=t.$props,c=s.prefixCls,u=s.destroyPopupOnHide,d=s.popupClassName,h=s.action,f=s.popupAnimation,p=s.popupTransitionName,m=s.popupStyle,v=s.mask,g=s.maskAnimation,y=s.maskTransitionName,_=s.zIndex,b=s.stretch,M=s.alignPoint,A=this.$data,w=A.sPopupVisible,x=A.point,k=this.getPopupAlign(),L={props:{prefixCls:c,destroyPopupOnHide:u,visible:w,point:M&&x,action:h,align:k,animation:f,getClassNameFromAlign:r,stretch:b,getRootDomNode:o,mask:v,zIndex:_,transitionName:p,maskAnimation:g,maskTransitionName:y,getContainer:a,popupClassName:d,popupStyle:m},on:(0,i.A)({align:(0,l.WM)(this).popupAlign||rt},n),directives:[{name:"ant-ref",value:this.savePopup}]};return e(Qe,L,[(0,l.nu)(t,"popup")])},getContainer:function(){var e=this.$props,t=this.dialogContext,n=document.createElement("div");n.style.position="absolute",n.style.top="0",n.style.left="0",n.style.width="100%";var r=e.getPopupContainer?e.getPopupContainer(this.$el,t):e.getDocument().body;return r.appendChild(n),this.popupContainer=n,n},setPopupVisible:function(e,t){var n=this.alignPoint,r=this.sPopupVisible;if(this.clearDelayTimer(),r!==e){(0,l.cK)(this,"popupVisible")||this.setState({sPopupVisible:e,prevPopupVisible:r});var i=(0,l.WM)(this);i.popupVisibleChange&&i.popupVisibleChange(e)}n&&t&&this.setPoint(t)},setPoint:function(e){var t=this.$props.alignPoint;t&&e&&this.setState({point:{pageX:e.pageX,pageY:e.pageY}})},delaySetPopupVisible:function(e,t,n){var r=this,i=1e3*t;if(this.clearDelayTimer(),i){var o=n?{pageX:n.pageX,pageY:n.pageY}:null;this.delayTimer=(0,u.z)(function(){r.setPopupVisible(e,o),r.clearDelayTimer()},i)}else this.setPopupVisible(e,n)},clearDelayTimer:function(){this.delayTimer&&((0,u.q)(this.delayTimer),this.delayTimer=null)},clearOutsideHandler:function(){this.clickOutsideHandler&&(this.clickOutsideHandler.remove(),this.clickOutsideHandler=null),this.contextmenuOutsideHandler1&&(this.contextmenuOutsideHandler1.remove(),this.contextmenuOutsideHandler1=null),this.contextmenuOutsideHandler2&&(this.contextmenuOutsideHandler2.remove(),this.contextmenuOutsideHandler2=null),this.touchOutsideHandler&&(this.touchOutsideHandler.remove(),this.touchOutsideHandler=null)},createTwoChains:function(e){var t=function(){},n=(0,l.WM)(this);return this.childOriginEvents[e]&&n[e]?this["fire"+e]:(t=this.childOriginEvents[e]||n[e]||t,t)},isClickToShow:function(){var e=this.$props,t=e.action,n=e.showAction;return-1!==t.indexOf("click")||-1!==n.indexOf("click")},isContextmenuToShow:function(){var e=this.$props,t=e.action,n=e.showAction;return-1!==t.indexOf("contextmenu")||-1!==n.indexOf("contextmenu")},isClickToHide:function(){var e=this.$props,t=e.action,n=e.hideAction;return-1!==t.indexOf("click")||-1!==n.indexOf("click")},isMouseEnterToShow:function(){var e=this.$props,t=e.action,n=e.showAction;return-1!==t.indexOf("hover")||-1!==n.indexOf("mouseenter")},isMouseLeaveToHide:function(){var e=this.$props,t=e.action,n=e.hideAction;return-1!==t.indexOf("hover")||-1!==n.indexOf("mouseleave")},isFocusToShow:function(){var e=this.$props,t=e.action,n=e.showAction;return-1!==t.indexOf("focus")||-1!==n.indexOf("focus")},isBlurToHide:function(){var e=this.$props,t=e.action,n=e.hideAction;return-1!==t.indexOf("focus")||-1!==n.indexOf("blur")},forcePopupAlign:function(){this.$data.sPopupVisible&&this._component&&this._component.$refs.alignInstance&&this._component.$refs.alignInstance.forceAlign()},fireEvents:function(e,t){this.childOriginEvents[e]&&this.childOriginEvents[e](t),this.__emit(e,t)},close:function(){this.setPopupVisible(!1)}},render:function(){var e=this,t=arguments[0],n=this.sPopupVisible,r=(0,l.Gk)(this.$slots["default"]),i=this.$props,o=i.forceRender,a=i.alignPoint;r.length>1&&(0,h.A)(!1,"Trigger $slots.default.length > 1, just support only one default",!0);var s=r[0];this.childOriginEvents=(0,l.i5)(s);var u={props:{},nativeOn:{},key:"trigger"};return this.isContextmenuToShow()?u.nativeOn.contextmenu=this.onContextmenu:u.nativeOn.contextmenu=this.createTwoChains("contextmenu"),this.isClickToHide()||this.isClickToShow()?(u.nativeOn.click=this.onClick,u.nativeOn.mousedown=this.onMousedown,u.nativeOn.touchstart=this.onTouchstart):(u.nativeOn.click=this.createTwoChains("click"),u.nativeOn.mousedown=this.createTwoChains("mousedown"),u.nativeOn.touchstart=this.createTwoChains("onTouchstart")),this.isMouseEnterToShow()?(u.nativeOn.mouseenter=this.onMouseenter,a&&(u.nativeOn.mousemove=this.onMouseMove)):u.nativeOn.mouseenter=this.createTwoChains("mouseenter"),this.isMouseLeaveToHide()?u.nativeOn.mouseleave=this.onMouseleave:u.nativeOn.mouseleave=this.createTwoChains("mouseleave"),this.isFocusToShow()||this.isBlurToHide()?(u.nativeOn.focus=this.onFocus,u.nativeOn.blur=this.onBlur):(u.nativeOn.focus=this.createTwoChains("focus"),u.nativeOn.blur=function(t){!t||t.relatedTarget&&(0,c.A)(t.target,t.relatedTarget)||e.createTwoChains("blur")(t)}),this.trigger=(0,Ie.Ob)(s,u),t(it,{attrs:{parent:this,visible:n,autoMount:!1,forceRender:o,getComponent:this.getComponent,getContainer:this.getContainer,children:function(t){var n=t.renderComponent;return e.renderComponent=n,e.trigger}}})}},lt=ct},82160:function(e,t,n){"use strict";n.d(t,{A:function(){return o}});var r=n(32223),i=n.n(r);function o(e,t,n,r){return i()(e,t,n,r)}},17948:function(e,t,n){"use strict";function r(e,t){var n=t;while(n){if(n===e)return!0;n=n.parentNode}return!1}n.d(t,{A:function(){return r}})},32173:function(e,t){"use strict";function n(){return n=Object.assign||function(e){for(var t=1;t=o)return e;switch(e){case"%s":return String(t[r++]);case"%d":return Number(t[r++]);case"%j":try{return JSON.stringify(t[r++])}catch(n){return"[Circular]"}default:return e}});return a}return i}function p(e){return"string"===e||"url"===e||"hex"===e||"email"===e||"date"===e||"pattern"===e}function m(e,t){return void 0===e||null===e||(!("array"!==t||!Array.isArray(e)||e.length)||!(!p(t)||"string"!==typeof e||e))}function v(e,t,n){var r=[],i=0,o=e.length;function a(e){r.push.apply(r,e),i++,i===o&&n(r)}e.forEach(function(e){t(e,a)})}function g(e,t,n){var r=0,i=e.length;function o(a){if(a&&a.length)n(a);else{var s=r;r+=1,s()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,url:new RegExp("^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$","i"),hex:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/i},L={integer:function(e){return L.number(e)&&parseInt(e,10)===e},float:function(e){return L.number(e)&&!L.integer(e)},array:function(e){return Array.isArray(e)},regexp:function(e){if(e instanceof RegExp)return!0;try{return!!new RegExp(e)}catch(t){return!1}},date:function(e){return"function"===typeof e.getTime&&"function"===typeof e.getMonth&&"function"===typeof e.getYear&&!isNaN(e.getTime())},number:function(e){return!isNaN(e)&&"number"===typeof e},object:function(e){return"object"===typeof e&&!L.array(e)},method:function(e){return"function"===typeof e},email:function(e){return"string"===typeof e&&!!e.match(k.email)&&e.length<255},url:function(e){return"string"===typeof e&&!!e.match(k.url)},hex:function(e){return"string"===typeof e&&!!e.match(k.hex)}};function C(e,t,n,r,i){if(e.required&&void 0===t)w(e,t,n,r,i);else{var o=["integer","float","array","regexp","object","method","email","number","date","url","hex"],a=e.type;o.indexOf(a)>-1?L[a](t)||r.push(f(i.messages.types[a],e.fullField,e.type)):a&&typeof t!==e.type&&r.push(f(i.messages.types[a],e.fullField,e.type))}}function S(e,t,n,r,i){var o="number"===typeof e.len,a="number"===typeof e.min,s="number"===typeof e.max,c=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,l=t,u=null,d="number"===typeof t,h="string"===typeof t,p=Array.isArray(t);if(d?u="number":h?u="string":p&&(u="array"),!u)return!1;p&&(l=t.length),h&&(l=t.replace(c,"_").length),o?l!==e.len&&r.push(f(i.messages[u].len,e.fullField,e.len)):a&&!s&&le.max?r.push(f(i.messages[u].max,e.fullField,e.max)):a&&s&&(le.max)&&r.push(f(i.messages[u].range,e.fullField,e.min,e.max))}var z="enum";function T(e,t,n,r,i){e[z]=Array.isArray(e[z])?e[z]:[],-1===e[z].indexOf(t)&&r.push(f(i.messages[z],e.fullField,e[z].join(", ")))}function O(e,t,n,r,i){if(e.pattern)if(e.pattern instanceof RegExp)e.pattern.lastIndex=0,e.pattern.test(t)||r.push(f(i.messages.pattern.mismatch,e.fullField,t,e.pattern));else if("string"===typeof e.pattern){var o=new RegExp(e.pattern);o.test(t)||r.push(f(i.messages.pattern.mismatch,e.fullField,t,e.pattern))}}var H={required:w,whitespace:x,type:C,range:S,enum:T,pattern:O};function D(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t,"string")&&!e.required)return n();H.required(e,t,r,o,i,"string"),m(t,"string")||(H.type(e,t,r,o,i),H.range(e,t,r,o,i),H.pattern(e,t,r,o,i),!0===e.whitespace&&H.whitespace(e,t,r,o,i))}n(o)}function Y(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();H.required(e,t,r,o,i),void 0!==t&&H.type(e,t,r,o,i)}n(o)}function V(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(""===t&&(t=void 0),m(t)&&!e.required)return n();H.required(e,t,r,o,i),void 0!==t&&(H.type(e,t,r,o,i),H.range(e,t,r,o,i))}n(o)}function P(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();H.required(e,t,r,o,i),void 0!==t&&H.type(e,t,r,o,i)}n(o)}function E(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();H.required(e,t,r,o,i),m(t)||H.type(e,t,r,o,i)}n(o)}function j(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();H.required(e,t,r,o,i),void 0!==t&&(H.type(e,t,r,o,i),H.range(e,t,r,o,i))}n(o)}function F(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();H.required(e,t,r,o,i),void 0!==t&&(H.type(e,t,r,o,i),H.range(e,t,r,o,i))}n(o)}function I(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if((void 0===t||null===t)&&!e.required)return n();H.required(e,t,r,o,i,"array"),void 0!==t&&null!==t&&(H.type(e,t,r,o,i),H.range(e,t,r,o,i))}n(o)}function $(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();H.required(e,t,r,o,i),void 0!==t&&H.type(e,t,r,o,i)}n(o)}var R="enum";function N(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();H.required(e,t,r,o,i),void 0!==t&&H[R](e,t,r,o,i)}n(o)}function W(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t,"string")&&!e.required)return n();H.required(e,t,r,o,i),m(t,"string")||H.pattern(e,t,r,o,i)}n(o)}function B(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t,"date")&&!e.required)return n();var s;if(H.required(e,t,r,o,i),!m(t,"date"))s=t instanceof Date?t:new Date(t),H.type(e,s,r,o,i),s&&H.range(e,s.getTime(),r,o,i)}n(o)}function K(e,t,n,r,i){var o=[],a=Array.isArray(t)?"array":typeof t;H.required(e,t,r,o,i,a),n(o)}function U(e,t,n,r,i){var o=e.type,a=[],s=e.required||!e.required&&r.hasOwnProperty(e.field);if(s){if(m(t,o)&&!e.required)return n();H.required(e,t,r,a,i,o),m(t,o)||H.type(e,t,r,a,i)}n(a)}function q(e,t,n,r,i){var o=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(m(t)&&!e.required)return n();H.required(e,t,r,o,i)}n(o)}var G={string:D,method:Y,number:V,boolean:P,regexp:E,integer:j,float:F,array:I,object:$,enum:N,pattern:W,date:B,url:U,hex:U,email:U,required:K,any:q};function J(){return{default:"Validation error on field %s",required:"%s is required",enum:"%s must be one of %s",whitespace:"%s cannot be empty",date:{format:"%s date %s is invalid for format %s",parse:"%s date could not be parsed, %s is invalid ",invalid:"%s date %s is invalid"},types:{string:"%s is not a %s",method:"%s is not a %s (function)",array:"%s is not an %s",object:"%s is not an %s",number:"%s is not a %s",date:"%s is not a %s",boolean:"%s is not a %s",integer:"%s is not an %s",float:"%s is not a %s",regexp:"%s is not a valid %s",email:"%s is not a valid %s",url:"%s is not a valid %s",hex:"%s is not a valid %s"},string:{len:"%s must be exactly %s characters",min:"%s must be at least %s characters",max:"%s cannot be longer than %s characters",range:"%s must be between %s and %s characters"},number:{len:"%s must equal %s",min:"%s cannot be less than %s",max:"%s cannot be greater than %s",range:"%s must be between %s and %s"},array:{len:"%s must be exactly %s in length",min:"%s cannot be less than %s in length",max:"%s cannot be greater than %s in length",range:"%s must be between %s and %s in length"},pattern:{mismatch:"%s value %s does not match pattern %s"},clone:function(){var e=JSON.parse(JSON.stringify(this));return e.clone=this.clone,e}}}var X=J();function Z(e){this.rules=null,this._messages=X,this.define(e)}Z.prototype={messages:function(e){return e&&(this._messages=A(J(),e)),this._messages},define:function(e){if(!e)throw new Error("Cannot configure a schema with no rules");if("object"!==typeof e||Array.isArray(e))throw new Error("Rules must be an object");var t,n;for(t in this.rules={},e)e.hasOwnProperty(t)&&(n=e[t],this.rules[t]=Array.isArray(n)?n:[n])},validate:function(e,t,r){var i=this;void 0===t&&(t={}),void 0===r&&(r=function(){});var o,a,s=e,c=t,l=r;if("function"===typeof c&&(l=c,c={}),!this.rules||0===Object.keys(this.rules).length)return l&&l(),Promise.resolve();function u(e){var t,n=[],r={};function i(e){var t;Array.isArray(e)?n=(t=n).concat.apply(t,e):n.push(e)}for(t=0;t=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};r.forEach(["delete","get","head"],function(e){d.headers[e]={}}),r.forEach(["post","put","patch"],function(e){d.headers[e]=r.merge(s)}),e.exports=d},94896:function(e){"use strict";e.exports={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1}},49641:function(e){e.exports={version:"0.26.1"}},69012:function(e){"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r=0)return;a[t]="set-cookie"===t?(a[t]?a[t]:[]).concat([n]):a[t]?a[t]+", "+n:n}}),a):a}},17980:function(e){"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}},34841:function(e,t,n){"use strict";var r=n(49641).version,i={};["object","boolean","number","function","string","symbol"].forEach(function(e,t){i[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}});var o={};function a(e,t,n){if("object"!==typeof e)throw new TypeError("options must be an object");var r=Object.keys(e),i=r.length;while(i-- >0){var o=r[i],a=t[o];if(a){var s=e[o],c=void 0===s||a(s,o,e);if(!0!==c)throw new TypeError("option "+o+" must be "+c)}else if(!0!==n)throw Error("Unknown option "+o)}}i.transitional=function(e,t,n){function i(e,t){return"[Axios v"+r+"] Transitional option '"+e+"'"+t+(n?". "+n:"")}return function(n,r,a){if(!1===e)throw new Error(i(r," has been removed"+(t?" in "+t:"")));return t&&!o[r]&&(o[r]=!0,console.warn(i(r," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,r,a)}},e.exports={assertOptions:a,validators:i}},9516:function(e,t,n){"use strict";var r=n(69012),i=Object.prototype.toString;function o(e){return Array.isArray(e)}function a(e){return"undefined"===typeof e}function s(e){return null!==e&&!a(e)&&null!==e.constructor&&!a(e.constructor)&&"function"===typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}function c(e){return"[object ArrayBuffer]"===i.call(e)}function l(e){return"[object FormData]"===i.call(e)}function u(e){var t;return t="undefined"!==typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&c(e.buffer),t}function d(e){return"string"===typeof e}function h(e){return"number"===typeof e}function f(e){return null!==e&&"object"===typeof e}function p(e){if("[object Object]"!==i.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function m(e){return"[object Date]"===i.call(e)}function v(e){return"[object File]"===i.call(e)}function g(e){return"[object Blob]"===i.call(e)}function y(e){return"[object Function]"===i.call(e)}function _(e){return f(e)&&y(e.pipe)}function b(e){return"[object URLSearchParams]"===i.call(e)}function M(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}function A(){return("undefined"===typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!==typeof window&&"undefined"!==typeof document)}function w(e,t){if(null!==e&&"undefined"!==typeof e)if("object"!==typeof e&&(e=[e]),o(e))for(var n=0,r=e.length;n=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}},52040:function(e,t,n){"use strict";var r=n(3053),i=s(r),o=n(4123),a=s(o);function s(e){return e&&e.__esModule?e:{default:e}}t.A=function(){function e(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var s,c=(0,a.default)(e);!(r=(s=c.next()).done);r=!0)if(n.push(s.value),t&&n.length===t)break}catch(l){i=!0,o=l}finally{try{!r&&c["return"]&&c["return"]()}finally{if(i)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if((0,i.default)(Object(t)))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()},32779:function(e,t,n){"use strict";var r=n(9780),i=o(r);function o(e){return e&&e.__esModule?e:{default:e}}t.A=function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tu)if(s=c[u++],s!=s)return!0}else for(;l>u;u++)if((e||u in c)&&c[u]===n)return e||u||0;return!e&&-1}}},13383:function(e,t,n){var r=n(64194),i=n(15413)("toStringTag"),o="Arguments"==r(function(){return arguments}()),a=function(e,t){try{return e[t]}catch(n){}};e.exports=function(e){var t,n,s;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=a(t=Object(e),i))?n:o?r(t):"Object"==(s=r(t))&&"function"==typeof t.callee?"Arguments":s}},64194:function(e){var t={}.toString;e.exports=function(e){return t.call(e).slice(8,-1)}},6791:function(e){var t=e.exports={version:"2.6.12"};"number"==typeof __e&&(__e=t)},64284:function(e,t,n){"use strict";var r=n(21672),i=n(15495);e.exports=function(e,t,n){t in e?r.f(e,t,i(0,n)):e[t]=n}},33971:function(e,t,n){var r=n(73934);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,i){return e.call(t,n,r,i)}}return function(){return e.apply(t,arguments)}}},54947:function(e){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},75872:function(e,t,n){e.exports=!n(82451)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},50559:function(e,t,n){var r=n(90326),i=n(56903).document,o=r(i)&&r(i.createElement);e.exports=function(e){return o?i.createElement(e):{}}},22499:function(e){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},76358:function(e,t,n){var r=n(64796),i=n(14259),o=n(98936);e.exports=function(e){var t=r(e),n=i.f;if(n){var a,s=n(e),c=o.f,l=0;while(s.length>l)c.call(e,a=s[l++])&&t.push(a)}return t}},19786:function(e,t,n){var r=n(56903),i=n(6791),o=n(33971),a=n(14632),s=n(43066),c="prototype",l=function(e,t,n){var u,d,h,f=e&l.F,p=e&l.G,m=e&l.S,v=e&l.P,g=e&l.B,y=e&l.W,_=p?i:i[t]||(i[t]={}),b=_[c],M=p?r:m?r[t]:(r[t]||{})[c];for(u in p&&(n=t),n)d=!f&&M&&void 0!==M[u],d&&s(_,u)||(h=d?M[u]:n[u],_[u]=p&&"function"!=typeof M[u]?n[u]:g&&d?o(h,r):y&&M[u]==h?function(e){var t=function(t,n,r){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n)}return new e(t,n,r)}return e.apply(this,arguments)};return t[c]=e[c],t}(h):v&&"function"==typeof h?o(Function.call,h):h,v&&((_.virtual||(_.virtual={}))[u]=h,e&l.R&&b&&!b[u]&&a(b,u,h)))};l.F=1,l.G=2,l.S=4,l.P=8,l.B=16,l.W=32,l.U=64,l.R=128,e.exports=l},82451:function(e){e.exports=function(e){try{return!!e()}catch(t){return!0}}},56903:function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)},43066:function(e){var t={}.hasOwnProperty;e.exports=function(e,n){return t.call(e,n)}},14632:function(e,t,n){var r=n(21672),i=n(15495);e.exports=n(75872)?function(e,t,n){return r.f(e,t,i(1,n))}:function(e,t,n){return e[t]=n,e}},7745:function(e,t,n){var r=n(56903).document;e.exports=r&&r.documentElement},14913:function(e,t,n){e.exports=!n(75872)&&!n(82451)(function(){return 7!=Object.defineProperty(n(50559)("div"),"a",{get:function(){return 7}}).a})},63278:function(e,t,n){var r=n(64194);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},6471:function(e,t,n){var r=n(52833),i=n(15413)("iterator"),o=Array.prototype;e.exports=function(e){return void 0!==e&&(r.Array===e||o[i]===e)}},1084:function(e,t,n){var r=n(64194);e.exports=Array.isArray||function(e){return"Array"==r(e)}},90326:function(e){e.exports=function(e){return"object"===typeof e?null!==e:"function"===typeof e}},275:function(e,t,n){var r=n(90531);e.exports=function(e,t,n,i){try{return i?t(r(n)[0],n[1]):t(n)}catch(a){var o=e["return"];throw void 0!==o&&r(o.call(e)),a}}},81199:function(e,t,n){"use strict";var r=n(67780),i=n(15495),o=n(1123),a={};n(14632)(a,n(15413)("iterator"),function(){return this}),e.exports=function(e,t,n){e.prototype=r(a,{next:i(1,n)}),o(e,t+" Iterator")}},52500:function(e,t,n){"use strict";var r=n(98849),i=n(19786),o=n(83070),a=n(14632),s=n(52833),c=n(81199),l=n(1123),u=n(66870),d=n(15413)("iterator"),h=!([].keys&&"next"in[].keys()),f="@@iterator",p="keys",m="values",v=function(){return this};e.exports=function(e,t,n,g,y,_,b){c(n,t,g);var M,A,w,x=function(e){if(!h&&e in S)return S[e];switch(e){case p:return function(){return new n(this,e)};case m:return function(){return new n(this,e)}}return function(){return new n(this,e)}},k=t+" Iterator",L=y==m,C=!1,S=e.prototype,z=S[d]||S[f]||y&&S[y],T=z||x(y),O=y?L?x("entries"):T:void 0,H="Array"==t&&S.entries||z;if(H&&(w=u(H.call(new e)),w!==Object.prototype&&w.next&&(l(w,k,!0),r||"function"==typeof w[d]||a(w,d,v))),L&&z&&z.name!==m&&(C=!0,T=function(){return z.call(this)}),r&&!b||!h&&!C&&S[d]||a(S,d,T),s[t]=T,s[k]=v,y)if(M={values:L?T:x(m),keys:_?T:x(p),entries:O},b)for(A in M)A in S||o(S,A,M[A]);else i(i.P+i.F*(h||C),t,M);return M}},26928:function(e,t,n){var r=n(15413)("iterator"),i=!1;try{var o=[7][r]();o["return"]=function(){i=!0},Array.from(o,function(){throw 2})}catch(a){}e.exports=function(e,t){if(!t&&!i)return!1;var n=!1;try{var o=[7],s=o[r]();s.next=function(){return{done:n=!0}},o[r]=function(){return s},e(o)}catch(a){}return n}},35945:function(e){e.exports=function(e,t){return{value:t,done:!!e}}},52833:function(e){e.exports={}},98849:function(e){e.exports=!0},83281:function(e,t,n){var r=n(93108)("meta"),i=n(90326),o=n(43066),a=n(21672).f,s=0,c=Object.isExtensible||function(){return!0},l=!n(82451)(function(){return c(Object.preventExtensions({}))}),u=function(e){a(e,r,{value:{i:"O"+ ++s,w:{}}})},d=function(e,t){if(!i(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!o(e,r)){if(!c(e))return"F";if(!t)return"E";u(e)}return e[r].i},h=function(e,t){if(!o(e,r)){if(!c(e))return!0;if(!t)return!1;u(e)}return e[r].w},f=function(e){return l&&p.NEED&&c(e)&&!o(e,r)&&u(e),e},p=e.exports={KEY:r,NEED:!1,fastKey:d,getWeak:h,onFreeze:f}},99369:function(e,t,n){"use strict";var r=n(75872),i=n(64796),o=n(14259),a=n(98936),s=n(64873),c=n(63278),l=Object.assign;e.exports=!l||n(82451)(function(){var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach(function(e){t[e]=e}),7!=l({},e)[n]||Object.keys(l({},t)).join("")!=r})?function(e,t){var n=s(e),l=arguments.length,u=1,d=o.f,h=a.f;while(l>u){var f,p=c(arguments[u++]),m=d?i(p).concat(d(p)):i(p),v=m.length,g=0;while(v>g)f=m[g++],r&&!h.call(p,f)||(n[f]=p[f])}return n}:l},67780:function(e,t,n){var r=n(90531),i=n(6935),o=n(22499),a=n(36211)("IE_PROTO"),s=function(){},c="prototype",l=function(){var e,t=n(50559)("iframe"),r=o.length,i="<",a=">";t.style.display="none",n(7745).appendChild(t),t.src="javascript:",e=t.contentWindow.document,e.open(),e.write(i+"script"+a+"document.F=Object"+i+"/script"+a),e.close(),l=e.F;while(r--)delete l[c][o[r]];return l()};e.exports=Object.create||function(e,t){var n;return null!==e?(s[c]=r(e),n=new s,s[c]=null,n[a]=e):n=l(),void 0===t?n:i(n,t)}},21672:function(e,t,n){var r=n(90531),i=n(14913),o=n(78381),a=Object.defineProperty;t.f=n(75872)?Object.defineProperty:function(e,t,n){if(r(e),t=o(t,!0),r(n),i)try{return a(e,t,n)}catch(s){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},6935:function(e,t,n){var r=n(21672),i=n(90531),o=n(64796);e.exports=n(75872)?Object.defineProperties:function(e,t){i(e);var n,a=o(t),s=a.length,c=0;while(s>c)r.f(e,n=a[c++],t[n]);return e}},22682:function(e,t,n){var r=n(98936),i=n(15495),o=n(69204),a=n(78381),s=n(43066),c=n(14913),l=Object.getOwnPropertyDescriptor;t.f=n(75872)?l:function(e,t){if(e=o(e),t=a(t,!0),c)try{return l(e,t)}catch(n){}if(s(e,t))return i(!r.f.call(e,t),e[t])}},37106:function(e,t,n){var r=n(69204),i=n(79032).f,o={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(e){try{return i(e)}catch(t){return a.slice()}};e.exports.f=function(e){return a&&"[object Window]"==o.call(e)?s(e):i(r(e))}},79032:function(e,t,n){var r=n(59480),i=n(22499).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return r(e,i)}},14259:function(e,t){t.f=Object.getOwnPropertySymbols},66870:function(e,t,n){var r=n(43066),i=n(64873),o=n(36211)("IE_PROTO"),a=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=i(e),r(e,o)?e[o]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?a:null}},59480:function(e,t,n){var r=n(43066),i=n(69204),o=n(73901)(!1),a=n(36211)("IE_PROTO");e.exports=function(e,t){var n,s=i(e),c=0,l=[];for(n in s)n!=a&&r(s,n)&&l.push(n);while(t.length>c)r(s,n=t[c++])&&(~o(l,n)||l.push(n));return l}},64796:function(e,t,n){var r=n(59480),i=n(22499);e.exports=Object.keys||function(e){return r(e,i)}},98936:function(e,t){t.f={}.propertyIsEnumerable},15495:function(e){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},83070:function(e,t,n){e.exports=n(14632)},1123:function(e,t,n){var r=n(21672).f,i=n(43066),o=n(15413)("toStringTag");e.exports=function(e,t,n){e&&!i(e=n?e:e.prototype,o)&&r(e,o,{configurable:!0,value:t})}},36211:function(e,t,n){var r=n(7421)("keys"),i=n(93108);e.exports=function(e){return r[e]||(r[e]=i(e))}},7421:function(e,t,n){var r=n(6791),i=n(56903),o="__core-js_shared__",a=i[o]||(i[o]={});(e.exports=function(e,t){return a[e]||(a[e]=void 0!==t?t:{})})("versions",[]).push({version:r.version,mode:n(98849)?"pure":"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})},29491:function(e,t,n){var r=n(43570),i=n(54947);e.exports=function(e){return function(t,n){var o,a,s=String(i(t)),c=r(n),l=s.length;return c<0||c>=l?e?"":void 0:(o=s.charCodeAt(c),o<55296||o>56319||c+1===l||(a=s.charCodeAt(c+1))<56320||a>57343?e?s.charAt(c):o:e?s.slice(c,c+2):a-56320+(o-55296<<10)+65536)}}},8830:function(e,t,n){var r=n(43570),i=Math.max,o=Math.min;e.exports=function(e,t){return e=r(e),e<0?i(e+t,0):o(e,t)}},43570:function(e){var t=Math.ceil,n=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?n:t)(e)}},69204:function(e,t,n){var r=n(63278),i=n(54947);e.exports=function(e){return r(i(e))}},9250:function(e,t,n){var r=n(43570),i=Math.min;e.exports=function(e){return e>0?i(r(e),9007199254740991):0}},64873:function(e,t,n){var r=n(54947);e.exports=function(e){return Object(r(e))}},78381:function(e,t,n){var r=n(90326);e.exports=function(e,t){if(!r(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!r(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")}},93108:function(e){var t=0,n=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++t+n).toString(36))}},62613:function(e,t,n){var r=n(56903),i=n(6791),o=n(98849),a=n(1275),s=n(21672).f;e.exports=function(e){var t=i.Symbol||(i.Symbol=o?{}:r.Symbol||{});"_"==e.charAt(0)||e in t||s(t,e,{value:a.f(e)})}},1275:function(e,t,n){t.f=n(15413)},15413:function(e,t,n){var r=n(7421)("wks"),i=n(93108),o=n(56903).Symbol,a="function"==typeof o,s=e.exports=function(e){return r[e]||(r[e]=a&&o[e]||(a?o:i)("Symbol."+e))};s.store=r},18573:function(e,t,n){var r=n(13383),i=n(15413)("iterator"),o=n(52833);e.exports=n(6791).getIteratorMethod=function(e){if(void 0!=e)return e[i]||e["@@iterator"]||o[r(e)]}},23779:function(e,t,n){var r=n(90531),i=n(18573);e.exports=n(6791).getIterator=function(e){var t=i(e);if("function"!=typeof t)throw TypeError(e+" is not iterable!");return r(t.call(e))}},4693:function(e,t,n){var r=n(13383),i=n(15413)("iterator"),o=n(52833);e.exports=n(6791).isIterable=function(e){var t=Object(e);return void 0!==t[i]||"@@iterator"in t||o.hasOwnProperty(r(t))}},32160:function(e,t,n){"use strict";var r=n(33971),i=n(19786),o=n(64873),a=n(275),s=n(6471),c=n(9250),l=n(64284),u=n(18573);i(i.S+i.F*!n(26928)(function(e){Array.from(e)}),"Array",{from:function(e){var t,n,i,d,h=o(e),f="function"==typeof this?this:Array,p=arguments.length,m=p>1?arguments[1]:void 0,v=void 0!==m,g=0,y=u(h);if(v&&(m=r(m,p>2?arguments[2]:void 0,2)),void 0==y||f==Array&&s(y))for(t=c(h.length),n=new f(t);t>g;g++)l(n,g,v?m(h[g],g):h[g]);else for(d=y.call(h),n=new f;!(i=d.next()).done;g++)l(n,g,v?a(d,m,[i.value,g],!0):i.value);return n.length=g,n}})},45270:function(e,t,n){"use strict";var r=n(64233),i=n(35945),o=n(52833),a=n(69204);e.exports=n(52500)(Array,"Array",function(e,t){this._t=a(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,i(1)):i(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])},"values"),o.Arguments=o.Array,r("keys"),r("values"),r("entries")},79115:function(e,t,n){var r=n(19786);r(r.S+r.F,"Object",{assign:n(99369)})},82919:function(e,t,n){var r=n(19786);r(r.S+r.F*!n(75872),"Object",{defineProperty:n(21672).f})},44345:function(){},78750:function(e,t,n){"use strict";var r=n(29491)(!0);n(52500)(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=r(t,n),this._i+=e.length,{value:e,done:!1})})},28957:function(e,t,n){"use strict";var r=n(56903),i=n(43066),o=n(75872),a=n(19786),s=n(83070),c=n(83281).KEY,l=n(82451),u=n(7421),d=n(1123),h=n(93108),f=n(15413),p=n(1275),m=n(62613),v=n(76358),g=n(1084),y=n(90531),_=n(90326),b=n(64873),M=n(69204),A=n(78381),w=n(15495),x=n(67780),k=n(37106),L=n(22682),C=n(14259),S=n(21672),z=n(64796),T=L.f,O=S.f,H=k.f,D=r.Symbol,Y=r.JSON,V=Y&&Y.stringify,P="prototype",E=f("_hidden"),j=f("toPrimitive"),F={}.propertyIsEnumerable,I=u("symbol-registry"),$=u("symbols"),R=u("op-symbols"),N=Object[P],W="function"==typeof D&&!!C.f,B=r.QObject,K=!B||!B[P]||!B[P].findChild,U=o&&l(function(){return 7!=x(O({},"a",{get:function(){return O(this,"a",{value:7}).a}})).a})?function(e,t,n){var r=T(N,t);r&&delete N[t],O(e,t,n),r&&e!==N&&O(N,t,r)}:O,q=function(e){var t=$[e]=x(D[P]);return t._k=e,t},G=W&&"symbol"==typeof D.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof D},J=function(e,t,n){return e===N&&J(R,t,n),y(e),t=A(t,!0),y(n),i($,t)?(n.enumerable?(i(e,E)&&e[E][t]&&(e[E][t]=!1),n=x(n,{enumerable:w(0,!1)})):(i(e,E)||O(e,E,w(1,{})),e[E][t]=!0),U(e,t,n)):O(e,t,n)},X=function(e,t){y(e);var n,r=v(t=M(t)),i=0,o=r.length;while(o>i)J(e,n=r[i++],t[n]);return e},Z=function(e,t){return void 0===t?x(e):X(x(e),t)},Q=function(e){var t=F.call(this,e=A(e,!0));return!(this===N&&i($,e)&&!i(R,e))&&(!(t||!i(this,e)||!i($,e)||i(this,E)&&this[E][e])||t)},ee=function(e,t){if(e=M(e),t=A(t,!0),e!==N||!i($,t)||i(R,t)){var n=T(e,t);return!n||!i($,t)||i(e,E)&&e[E][t]||(n.enumerable=!0),n}},te=function(e){var t,n=H(M(e)),r=[],o=0;while(n.length>o)i($,t=n[o++])||t==E||t==c||r.push(t);return r},ne=function(e){var t,n=e===N,r=H(n?R:M(e)),o=[],a=0;while(r.length>a)!i($,t=r[a++])||n&&!i(N,t)||o.push($[t]);return o};W||(D=function(){if(this instanceof D)throw TypeError("Symbol is not a constructor!");var e=h(arguments.length>0?arguments[0]:void 0),t=function(n){this===N&&t.call(R,n),i(this,E)&&i(this[E],e)&&(this[E][e]=!1),U(this,e,w(1,n))};return o&&K&&U(N,e,{configurable:!0,set:t}),q(e)},s(D[P],"toString",function(){return this._k}),L.f=ee,S.f=J,n(79032).f=k.f=te,n(98936).f=Q,C.f=ne,o&&!n(98849)&&s(N,"propertyIsEnumerable",Q,!0),p.f=function(e){return q(f(e))}),a(a.G+a.W+a.F*!W,{Symbol:D});for(var re="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),ie=0;re.length>ie;)f(re[ie++]);for(var oe=z(f.store),ae=0;oe.length>ae;)m(oe[ae++]);a(a.S+a.F*!W,"Symbol",{for:function(e){return i(I,e+="")?I[e]:I[e]=D(e)},keyFor:function(e){if(!G(e))throw TypeError(e+" is not a symbol!");for(var t in I)if(I[t]===e)return t},useSetter:function(){K=!0},useSimple:function(){K=!1}}),a(a.S+a.F*!W,"Object",{create:Z,defineProperty:J,defineProperties:X,getOwnPropertyDescriptor:ee,getOwnPropertyNames:te,getOwnPropertySymbols:ne});var se=l(function(){C.f(1)});a(a.S+a.F*se,"Object",{getOwnPropertySymbols:function(e){return C.f(b(e))}}),Y&&a(a.S+a.F*(!W||l(function(){var e=D();return"[null]"!=V([e])||"{}"!=V({a:e})||"{}"!=V(Object(e))})),"JSON",{stringify:function(e){var t,n,r=[e],i=1;while(arguments.length>i)r.push(arguments[i++]);if(n=t=r[1],(_(t)||void 0!==e)&&!G(e))return g(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!G(t))return t}),r[1]=t,V.apply(Y,r)}}),D[P][j]||n(14632)(D[P],j,D[P].valueOf),d(D,"Symbol"),d(Math,"Math",!0),d(r.JSON,"JSON",!0)},32469:function(e,t,n){n(62613)("asyncIterator")},75529:function(e,t,n){n(62613)("observable")},96653:function(e,t,n){n(45270);for(var r=n(56903),i=n(14632),o=n(52833),a=n(15413)("toStringTag"),s="CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList".split(","),c=0;c0?!0===o?E.scrollTop(t,p.top+m.top):!1===o?E.scrollTop(t,p.top+v.top):m.top<0?E.scrollTop(t,p.top+m.top):E.scrollTop(t,p.top+v.top):i||(o=void 0===o||!!o,o?E.scrollTop(t,p.top+m.top):E.scrollTop(t,p.top+v.top)),r&&(m.left<0||v.left>0?!0===a?E.scrollLeft(t,p.left+m.left):!1===a?E.scrollLeft(t,p.left+v.left):m.left<0?E.scrollLeft(t,p.left+m.left):E.scrollLeft(t,p.left+v.left):i||(a=void 0===a||!!a,a?E.scrollLeft(t,p.left+m.left):E.scrollLeft(t,p.left+v.left)))}t.A=j},71040:function(e,t,n){var r=n(88404),i=n(22524).each;function o(e,t){this.query=e,this.isUnconditional=t,this.handlers=[],this.mql=window.matchMedia(e);var n=this;this.listener=function(e){n.mql=e.currentTarget||e,n.assess()},this.mql.addListener(this.listener)}o.prototype={constuctor:o,addHandler:function(e){var t=new r(e);this.handlers.push(t),this.matches()&&t.on()},removeHandler:function(e){var t=this.handlers;i(t,function(n,r){if(n.equals(e))return n.destroy(),!t.splice(r,1)})},matches:function(){return this.mql.matches||this.isUnconditional},clear:function(){i(this.handlers,function(e){e.destroy()}),this.mql.removeListener(this.listener),this.handlers.length=0},assess:function(){var e=this.matches()?"on":"off";i(this.handlers,function(t){t[e]()})}},e.exports=o},51098:function(e,t,n){var r=n(71040),i=n(22524),o=i.each,a=i.isFunction,s=i.isArray;function c(){if(!window.matchMedia)throw new Error("matchMedia not present, legacy browsers require a polyfill");this.queries={},this.browserIsIncapable=!window.matchMedia("only all").matches}c.prototype={constructor:c,register:function(e,t,n){var i=this.queries,c=n&&this.browserIsIncapable;return i[e]||(i[e]=new r(e,c)),a(t)&&(t={match:t}),s(t)||(t=[t]),o(t,function(t){a(t)&&(t={match:t}),i[e].addHandler(t)}),this},unregister:function(e,t){var n=this.queries[e];return n&&(t?n.removeHandler(t):(n.clear(),delete this.queries[e])),this}},e.exports=c},88404:function(e){function t(e){this.options=e,!e.deferSetup&&this.setup()}t.prototype={constructor:t,setup:function(){this.options.setup&&this.options.setup(),this.initialised=!0},on:function(){!this.initialised&&this.setup(),this.options.match&&this.options.match()},off:function(){this.options.unmatch&&this.options.unmatch()},destroy:function(){this.options.destroy?this.options.destroy():this.off()},equals:function(e){return this.options===e||this.options.match===e}},e.exports=t},22524:function(e){function t(e,t){var n,r=0,i=e.length;for(r;r1&&-1!==r.indexOf("Macintosh")&&-1!==r.indexOf("Safari")&&(i=!0),i}},55580:function(e,t,n){var r=n(56110),i=n(9325),o=r(i,"DataView");e.exports=o},21549:function(e,t,n){var r=n(22032),i=n(63862),o=n(66721),a=n(12749),s=n(35749);function c(e){var t=-1,n=null==e?0:e.length;this.clear();while(++t-1}e.exports=i},29905:function(e){function t(e,t,n){var r=-1,i=null==e?0:e.length;while(++r0&&n(u)?t>1?o(u,t-1,n,a,s):r(s,u):a||(s[s.length]=u)}return s}e.exports=o},86649:function(e,t,n){var r=n(83221),i=r();e.exports=i},30641:function(e,t,n){var r=n(86649),i=n(95950);function o(e,t){return e&&r(e,t,i)}e.exports=o},47422:function(e,t,n){var r=n(31769),i=n(77797);function o(e,t){t=r(t,e);var n=0,o=t.length;while(null!=e&&nt)return i;do{r%2&&(i+=e),r=n(r/2),r&&(e+=e)}while(r);return i}e.exports=r},69302:function(e,t,n){var r=n(83488),i=n(56757),o=n(32865);function a(e,t){return o(i(e,t,r),e+"")}e.exports=a},73170:function(e,t,n){var r=n(16547),i=n(31769),o=n(30361),a=n(23805),s=n(77797);function c(e,t,n,c){if(!a(e))return e;t=i(t,e);var l=-1,u=t.length,d=u-1,h=e;while(null!=h&&++li?0:i+t),n=n>i?i:n,n<0&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0;var o=Array(i);while(++r=l){var v=t?null:s(e);if(v)return c(v);f=!1,d=a,m=new r}else m=t?[]:p;e:while(++u=i?e:r(e,t,n)}e.exports=i},49653:function(e,t,n){var r=n(37828);function i(e){var t=new e.constructor(e.byteLength);return new r(t).set(new r(e)),t}e.exports=i},93290:function(e,t,n){e=n.nmd(e);var r=n(9325),i=t&&!t.nodeType&&t,o=i&&e&&!e.nodeType&&e,a=o&&o.exports===i,s=a?r.Buffer:void 0,c=s?s.allocUnsafe:void 0;function l(e,t){if(t)return e.slice();var n=e.length,r=c?c(n):new e.constructor(n);return e.copy(r),r}e.exports=l},76169:function(e,t,n){var r=n(49653);function i(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}e.exports=i},73201:function(e){var t=/\w*$/;function n(e){var n=new e.constructor(e.source,t.exec(e));return n.lastIndex=e.lastIndex,n}e.exports=n},93736:function(e,t,n){var r=n(51873),i=r?r.prototype:void 0,o=i?i.valueOf:void 0;function a(e){return o?Object(o.call(e)):{}}e.exports=a},71961:function(e,t,n){var r=n(49653);function i(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}e.exports=i},23007:function(e){function t(e,t){var n=-1,r=e.length;t||(t=Array(r));while(++n1?n[o-1]:void 0,s=o>2?n[2]:void 0;a=e.length>3&&"function"==typeof a?(o--,a):void 0,s&&i(n[0],n[1],s)&&(a=o<3?void 0:a,o=1),t=Object(t);while(++r-1?s[c?t[l]:l]:void 0}}e.exports=a},57216:function(e,t,n){var r=n(84051),i=n(77556),o=n(28754),a=n(49698),s=n(81993),c=n(63912),l=Math.ceil;function u(e,t){t=void 0===t?" ":i(t);var n=t.length;if(n<2)return n?r(t,e):t;var u=r(t,l(e/s(t)));return a(t)?o(c(u),0,e).join(""):u.slice(0,e)}e.exports=u},44517:function(e,t,n){var r=n(76545),i=n(63950),o=n(84247),a=1/0,s=r&&1/o(new r([,-0]))[1]==a?function(e){return new r(e)}:i;e.exports=s},53138:function(e,t,n){var r=n(11331);function i(e){return r(e)?void 0:e}e.exports=i},93243:function(e,t,n){var r=n(56110),i=function(){try{var e=r(Object,"defineProperty");return e({},"",{}),e}catch(t){}}();e.exports=i},25911:function(e,t,n){var r=n(38859),i=n(91867),o=n(19219),a=1,s=2;function c(e,t,n,c,l,u){var d=n&a,h=e.length,f=t.length;if(h!=f&&!(d&&f>h))return!1;var p=u.get(e),m=u.get(t);if(p&&m)return p==t&&m==e;var v=-1,g=!0,y=n&s?new r:void 0;u.set(e,t),u.set(t,e);while(++v-1&&e%1==0&&e-1}e.exports=i},31175:function(e,t,n){var r=n(26025);function i(e,t){var n=this.__data__,i=r(n,e);return i<0?(++this.size,n.push([e,t])):n[i][1]=t,this}e.exports=i},63040:function(e,t,n){var r=n(21549),i=n(80079),o=n(68223);function a(){this.size=0,this.__data__={hash:new r,map:new(o||i),string:new r}}e.exports=a},17670:function(e,t,n){var r=n(12651);function i(e){var t=r(this,e)["delete"](e);return this.size-=t?1:0,t}e.exports=i},90289:function(e,t,n){var r=n(12651);function i(e){return r(this,e).get(e)}e.exports=i},4509:function(e,t,n){var r=n(12651);function i(e){return r(this,e).has(e)}e.exports=i},72949:function(e,t,n){var r=n(12651);function i(e,t){var n=r(this,e),i=n.size;return n.set(e,t),this.size+=n.size==i?0:1,this}e.exports=i},20317:function(e){function t(e){var t=-1,n=Array(e.size);return e.forEach(function(e,r){n[++t]=[r,e]}),n}e.exports=t},67197:function(e){function t(e,t){return function(n){return null!=n&&(n[e]===t&&(void 0!==t||e in Object(n)))}}e.exports=t},62224:function(e,t,n){var r=n(50104),i=500;function o(e){var t=r(e,function(e){return n.size===i&&n.clear(),e}),n=t.cache;return t}e.exports=o},81042:function(e,t,n){var r=n(56110),i=r(Object,"create");e.exports=i},3650:function(e,t,n){var r=n(74335),i=r(Object.keys,Object);e.exports=i},90181:function(e){function t(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}e.exports=t},86009:function(e,t,n){e=n.nmd(e);var r=n(34840),i=t&&!t.nodeType&&t,o=i&&e&&!e.nodeType&&e,a=o&&o.exports===i,s=a&&r.process,c=function(){try{var e=o&&o.require&&o.require("util").types;return e||s&&s.binding&&s.binding("util")}catch(t){}}();e.exports=c},59350:function(e){var t=Object.prototype,n=t.toString;function r(e){return n.call(e)}e.exports=r},74335:function(e){function t(e,t){return function(n){return e(t(n))}}e.exports=t},56757:function(e,t,n){var r=n(91033),i=Math.max;function o(e,t,n){return t=i(void 0===t?e.length-1:t,0),function(){var o=arguments,a=-1,s=i(o.length-t,0),c=Array(s);while(++a0){if(++i>=t)return arguments[0]}else i=0;return e.apply(void 0,arguments)}}e.exports=i},51420:function(e,t,n){var r=n(80079);function i(){this.__data__=new r,this.size=0}e.exports=i},90938:function(e){function t(e){var t=this.__data__,n=t["delete"](e);return this.size=t.size,n}e.exports=t},63605:function(e){function t(e){return this.__data__.get(e)}e.exports=t},29817:function(e){function t(e){return this.__data__.has(e)}e.exports=t},80945:function(e,t,n){var r=n(80079),i=n(68223),o=n(53661),a=200;function s(e,t){var n=this.__data__;if(n instanceof r){var s=n.__data__;if(!i||s.length=t||n<0||g&&r>=d}function w(){var e=i();if(A(e))return x(e);f=setTimeout(w,M(e))}function x(e){return f=void 0,y&&l?_(e):(l=u=void 0,h)}function k(){void 0!==f&&clearTimeout(f),m=0,l=p=u=f=void 0}function L(){return void 0===f?h:x(i())}function C(){var e=i(),n=A(e);if(l=arguments,u=this,p=e,n){if(void 0===f)return b(p);if(g)return clearTimeout(f),f=setTimeout(w,t),_(p)}return void 0===f&&(f=setTimeout(w,t)),h}return t=o(t)||0,r(n)&&(v=!!n.leading,g="maxWait"in n,d=g?s(o(n.maxWait)||0,t):d,y="trailing"in n?!!n.trailing:y),C.cancel=k,C.flush=L,C}e.exports=l},75288:function(e){function t(e,t){return e===t||e!==e&&t!==t}e.exports=t},7309:function(e,t,n){var r=n(62006),i=n(24713),o=r(i);e.exports=o},24713:function(e,t,n){var r=n(2523),i=n(15389),o=n(61489),a=Math.max;function s(e,t,n){var s=null==e?0:e.length;if(!s)return-1;var c=null==n?0:o(n);return c<0&&(c=a(s+c,0)),r(e,i(t,3),c)}e.exports=s},35970:function(e,t,n){var r=n(83120);function i(e){var t=null==e?0:e.length;return t?r(e,1):[]}e.exports=i},58156:function(e,t,n){var r=n(47422);function i(e,t,n){var i=null==e?void 0:r(e,t);return void 0===i?n:i}e.exports=i},61448:function(e,t,n){var r=n(20426),i=n(49326);function o(e,t){return null!=e&&i(e,t,r)}e.exports=o},80631:function(e,t,n){var r=n(28077),i=n(49326);function o(e,t){return null!=e&&i(e,t,r)}e.exports=o},83488:function(e){function t(e){return e}e.exports=t},72428:function(e,t,n){var r=n(27534),i=n(40346),o=Object.prototype,a=o.hasOwnProperty,s=o.propertyIsEnumerable,c=r(function(){return arguments}())?r:function(e){return i(e)&&a.call(e,"callee")&&!s.call(e,"callee")};e.exports=c},56449:function(e){var t=Array.isArray;e.exports=t},64894:function(e,t,n){var r=n(1882),i=n(30294);function o(e){return null!=e&&i(e.length)&&!r(e)}e.exports=o},83693:function(e,t,n){var r=n(64894),i=n(40346);function o(e){return i(e)&&r(e)}e.exports=o},3656:function(e,t,n){e=n.nmd(e);var r=n(9325),i=n(89935),o=t&&!t.nodeType&&t,a=o&&e&&!e.nodeType&&e,s=a&&a.exports===o,c=s?r.Buffer:void 0,l=c?c.isBuffer:void 0,u=l||i;e.exports=u},1882:function(e,t,n){var r=n(72552),i=n(23805),o="[object AsyncFunction]",a="[object Function]",s="[object GeneratorFunction]",c="[object Proxy]";function l(e){if(!i(e))return!1;var t=r(e);return t==a||t==s||t==o||t==c}e.exports=l},30294:function(e){var t=9007199254740991;function n(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=t}e.exports=n},87730:function(e,t,n){var r=n(29172),i=n(27301),o=n(86009),a=o&&o.isMap,s=a?i(a):r;e.exports=s},69843:function(e){function t(e){return null==e}e.exports=t},23805:function(e){function t(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}e.exports=t},40346:function(e){function t(e){return null!=e&&"object"==typeof e}e.exports=t},11331:function(e,t,n){var r=n(72552),i=n(28879),o=n(40346),a="[object Object]",s=Function.prototype,c=Object.prototype,l=s.toString,u=c.hasOwnProperty,d=l.call(Object);function h(e){if(!o(e)||r(e)!=a)return!1;var t=i(e);if(null===t)return!0;var n=u.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&l.call(n)==d}e.exports=h},69607:function(e,t,n){var r=n(81437),i=n(27301),o=n(86009),a=o&&o.isRegExp,s=a?i(a):r;e.exports=s},38440:function(e,t,n){var r=n(16038),i=n(27301),o=n(86009),a=o&&o.isSet,s=a?i(a):r;e.exports=s},44394:function(e,t,n){var r=n(72552),i=n(40346),o="[object Symbol]";function a(e){return"symbol"==typeof e||i(e)&&r(e)==o}e.exports=a},37167:function(e,t,n){var r=n(4901),i=n(27301),o=n(86009),a=o&&o.isTypedArray,s=a?i(a):r;e.exports=s},95950:function(e,t,n){var r=n(70695),i=n(88984),o=n(64894);function a(e){return o(e)?r(e):i(e)}e.exports=a},37241:function(e,t,n){var r=n(70695),i=n(72903),o=n(64894);function a(e){return o(e)?r(e,!0):i(e)}e.exports=a},68090:function(e){function t(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}e.exports=t},50104:function(e,t,n){var r=n(53661),i="Expected a function";function o(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError(i);var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var a=e.apply(this,r);return n.cache=o.set(i,a)||o,a};return n.cache=new(o.Cache||r),n}o.Cache=r,e.exports=o},55364:function(e,t,n){var r=n(85250),i=n(20999),o=i(function(e,t,n){r(e,t,n)});e.exports=o},63950:function(e){function t(){}e.exports=t},10124:function(e,t,n){var r=n(9325),i=function(){return r.Date.now()};e.exports=i},90179:function(e,t,n){var r=n(34932),i=n(9999),o=n(19931),a=n(31769),s=n(21791),c=n(53138),l=n(38816),u=n(83349),d=1,h=2,f=4,p=l(function(e,t){var n={};if(null==e)return n;var l=!1;t=r(t,function(t){return t=a(t,e),l||(l=t.length>1),t}),s(e,u(e),n),l&&(n=i(n,d|h|f,c));var p=t.length;while(p--)o(n,t[p]);return n});e.exports=p},97948:function(e,t,n){var r=n(57216),i=n(81993),o=n(61489),a=n(13222);function s(e,t,n){e=a(e),t=o(t);var s=t?i(e):0;return t&&s=20?"ste":"de")},week:{dow:1,doy:4}});return t})},41488:function(e,t,n){(function(e,t){t(n(95093))})(0,function(e){"use strict"; //! moment.js locale configuration @@ -298,12 +298,12 @@ var r=Object.freeze({}),i=Array.isArray;function o(e){return void 0===e||null=== * (c) 2021 Evan You * @license MIT */ -function r(e){var t=Number(e.version.split(".")[0]);if(t>=2)e.mixin({beforeCreate:r});else{var n=e.prototype._init;e.prototype._init=function(e){void 0===e&&(e={}),e.init=e.init?[r].concat(e.init):r,n.call(this,e)}}function r(){var e=this.$options;e.store?this.$store="function"===typeof e.store?e.store():e.store:e.parent&&e.parent.$store&&(this.$store=e.parent.$store)}}n.d(t,{L8:function(){return V},aH:function(){return D},i0:function(){return P}});var i="undefined"!==typeof window?window:"undefined"!==typeof n.g?n.g:{},o=i.__VUE_DEVTOOLS_GLOBAL_HOOK__;function a(e){o&&(e._devtoolHook=o,o.emit("vuex:init",e),o.on("vuex:travel-to-state",function(t){e.replaceState(t)}),e.subscribe(function(e,t){o.emit("vuex:mutation",e,t)},{prepend:!0}),e.subscribeAction(function(e,t){o.emit("vuex:action",e,t)},{prepend:!0}))}function s(e,t){return e.filter(t)[0]}function c(e,t){if(void 0===t&&(t=[]),null===e||"object"!==typeof e)return e;var n=s(t,function(t){return t.original===e});if(n)return n.copy;var r=Array.isArray(e)?[]:{};return t.push({original:e,copy:r}),Object.keys(e).forEach(function(n){r[n]=c(e[n],t)}),r}function l(e,t){Object.keys(e).forEach(function(n){return t(e[n],n)})}function u(e){return null!==e&&"object"===typeof e}function d(e){return e&&"function"===typeof e.then}function h(e,t){return function(){return e(t)}}var f=function(e,t){this.runtime=t,this._children=Object.create(null),this._rawModule=e;var n=e.state;this.state=("function"===typeof n?n():n)||{}},p={namespaced:{configurable:!0}};p.namespaced.get=function(){return!!this._rawModule.namespaced},f.prototype.addChild=function(e,t){this._children[e]=t},f.prototype.removeChild=function(e){delete this._children[e]},f.prototype.getChild=function(e){return this._children[e]},f.prototype.hasChild=function(e){return e in this._children},f.prototype.update=function(e){this._rawModule.namespaced=e.namespaced,e.actions&&(this._rawModule.actions=e.actions),e.mutations&&(this._rawModule.mutations=e.mutations),e.getters&&(this._rawModule.getters=e.getters)},f.prototype.forEachChild=function(e){l(this._children,e)},f.prototype.forEachGetter=function(e){this._rawModule.getters&&l(this._rawModule.getters,e)},f.prototype.forEachAction=function(e){this._rawModule.actions&&l(this._rawModule.actions,e)},f.prototype.forEachMutation=function(e){this._rawModule.mutations&&l(this._rawModule.mutations,e)},Object.defineProperties(f.prototype,p);var m=function(e){this.register([],e,!1)};function v(e,t,n){if(t.update(n),n.modules)for(var r in n.modules){if(!t.getChild(r))return void 0;v(e.concat(r),t.getChild(r),n.modules[r])}}m.prototype.get=function(e){return e.reduce(function(e,t){return e.getChild(t)},this.root)},m.prototype.getNamespace=function(e){var t=this.root;return e.reduce(function(e,n){return t=t.getChild(n),e+(t.namespaced?n+"/":"")},"")},m.prototype.update=function(e){v([],this.root,e)},m.prototype.register=function(e,t,n){var r=this;void 0===n&&(n=!0);var i=new f(t,n);if(0===e.length)this.root=i;else{var o=this.get(e.slice(0,-1));o.addChild(e[e.length-1],i)}t.modules&&l(t.modules,function(t,i){r.register(e.concat(i),t,n)})},m.prototype.unregister=function(e){var t=this.get(e.slice(0,-1)),n=e[e.length-1],r=t.getChild(n);r&&r.runtime&&t.removeChild(n)},m.prototype.isRegistered=function(e){var t=this.get(e.slice(0,-1)),n=e[e.length-1];return!!t&&t.hasChild(n)};var g;var y=function(e){var t=this;void 0===e&&(e={}),!g&&"undefined"!==typeof window&&window.Vue&&H(window.Vue);var n=e.plugins;void 0===n&&(n=[]);var r=e.strict;void 0===r&&(r=!1),this._committing=!1,this._actions=Object.create(null),this._actionSubscribers=[],this._mutations=Object.create(null),this._wrappedGetters=Object.create(null),this._modules=new m(e),this._modulesNamespaceMap=Object.create(null),this._subscribers=[],this._watcherVM=new g,this._makeLocalGettersCache=Object.create(null);var i=this,o=this,s=o.dispatch,c=o.commit;this.dispatch=function(e,t){return s.call(i,e,t)},this.commit=function(e,t,n){return c.call(i,e,t,n)},this.strict=r;var l=this._modules.root.state;w(this,l,[],this._modules.root),A(this,l),n.forEach(function(e){return e(t)});var u=void 0!==e.devtools?e.devtools:g.config.devtools;u&&a(this)},_={state:{configurable:!0}};function b(e,t,n){return t.indexOf(e)<0&&(n&&n.prepend?t.unshift(e):t.push(e)),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}function M(e,t){e._actions=Object.create(null),e._mutations=Object.create(null),e._wrappedGetters=Object.create(null),e._modulesNamespaceMap=Object.create(null);var n=e.state;w(e,n,[],e._modules.root,!0),A(e,n,t)}function A(e,t,n){var r=e._vm;e.getters={},e._makeLocalGettersCache=Object.create(null);var i=e._wrappedGetters,o={};l(i,function(t,n){o[n]=h(t,e),Object.defineProperty(e.getters,n,{get:function(){return e._vm[n]},enumerable:!0})});var a=g.config.silent;g.config.silent=!0,e._vm=new g({data:{$$state:t},computed:o}),g.config.silent=a,e.strict&&z(e),r&&(n&&e._withCommit(function(){r._data.$$state=null}),g.nextTick(function(){return r.$destroy()}))}function w(e,t,n,r,i){var o=!n.length,a=e._modules.getNamespace(n);if(r.namespaced&&(e._modulesNamespaceMap[a],e._modulesNamespaceMap[a]=r),!o&&!i){var s=T(t,n.slice(0,-1)),c=n[n.length-1];e._withCommit(function(){g.set(s,c,r.state)})}var l=r.context=x(e,a,n);r.forEachMutation(function(t,n){var r=a+n;L(e,r,t,l)}),r.forEachAction(function(t,n){var r=t.root?n:a+n,i=t.handler||t;C(e,r,i,l)}),r.forEachGetter(function(t,n){var r=a+n;S(e,r,t,l)}),r.forEachChild(function(r,o){w(e,t,n.concat(o),r,i)})}function x(e,t,n){var r=""===t,i={dispatch:r?e.dispatch:function(n,r,i){var o=O(n,r,i),a=o.payload,s=o.options,c=o.type;return s&&s.root||(c=t+c),e.dispatch(c,a)},commit:r?e.commit:function(n,r,i){var o=O(n,r,i),a=o.payload,s=o.options,c=o.type;s&&s.root||(c=t+c),e.commit(c,a,s)}};return Object.defineProperties(i,{getters:{get:r?function(){return e.getters}:function(){return k(e,t)}},state:{get:function(){return T(e.state,n)}}}),i}function k(e,t){if(!e._makeLocalGettersCache[t]){var n={},r=t.length;Object.keys(e.getters).forEach(function(i){if(i.slice(0,r)===t){var o=i.slice(r);Object.defineProperty(n,o,{get:function(){return e.getters[i]},enumerable:!0})}}),e._makeLocalGettersCache[t]=n}return e._makeLocalGettersCache[t]}function L(e,t,n,r){var i=e._mutations[t]||(e._mutations[t]=[]);i.push(function(t){n.call(e,r.state,t)})}function C(e,t,n,r){var i=e._actions[t]||(e._actions[t]=[]);i.push(function(t){var i=n.call(e,{dispatch:r.dispatch,commit:r.commit,getters:r.getters,state:r.state,rootGetters:e.getters,rootState:e.state},t);return d(i)||(i=Promise.resolve(i)),e._devtoolHook?i.catch(function(t){throw e._devtoolHook.emit("vuex:error",t),t}):i})}function S(e,t,n,r){e._wrappedGetters[t]||(e._wrappedGetters[t]=function(e){return n(r.state,r.getters,e.state,e.getters)})}function z(e){e._vm.$watch(function(){return this._data.$$state},function(){0},{deep:!0,sync:!0})}function T(e,t){return t.reduce(function(e,t){return e[t]},e)}function O(e,t,n){return u(e)&&e.type&&(n=t,t=e,e=e.type),{type:e,payload:t,options:n}}function H(e){g&&e===g||(g=e,r(g))}_.state.get=function(){return this._vm._data.$$state},_.state.set=function(e){0},y.prototype.commit=function(e,t,n){var r=this,i=O(e,t,n),o=i.type,a=i.payload,s=(i.options,{type:o,payload:a}),c=this._mutations[o];c&&(this._withCommit(function(){c.forEach(function(e){e(a)})}),this._subscribers.slice().forEach(function(e){return e(s,r.state)}))},y.prototype.dispatch=function(e,t){var n=this,r=O(e,t),i=r.type,o=r.payload,a={type:i,payload:o},s=this._actions[i];if(s){try{this._actionSubscribers.slice().filter(function(e){return e.before}).forEach(function(e){return e.before(a,n.state)})}catch(l){0}var c=s.length>1?Promise.all(s.map(function(e){return e(o)})):s[0](o);return new Promise(function(e,t){c.then(function(t){try{n._actionSubscribers.filter(function(e){return e.after}).forEach(function(e){return e.after(a,n.state)})}catch(l){0}e(t)},function(e){try{n._actionSubscribers.filter(function(e){return e.error}).forEach(function(t){return t.error(a,n.state,e)})}catch(l){0}t(e)})})}},y.prototype.subscribe=function(e,t){return b(e,this._subscribers,t)},y.prototype.subscribeAction=function(e,t){var n="function"===typeof e?{before:e}:e;return b(n,this._actionSubscribers,t)},y.prototype.watch=function(e,t,n){var r=this;return this._watcherVM.$watch(function(){return e(r.state,r.getters)},t,n)},y.prototype.replaceState=function(e){var t=this;this._withCommit(function(){t._vm._data.$$state=e})},y.prototype.registerModule=function(e,t,n){void 0===n&&(n={}),"string"===typeof e&&(e=[e]),this._modules.register(e,t),w(this,this.state,e,this._modules.get(e),n.preserveState),A(this,this.state)},y.prototype.unregisterModule=function(e){var t=this;"string"===typeof e&&(e=[e]),this._modules.unregister(e),this._withCommit(function(){var n=T(t.state,e.slice(0,-1));g.delete(n,e[e.length-1])}),M(this)},y.prototype.hasModule=function(e){return"string"===typeof e&&(e=[e]),this._modules.isRegistered(e)},y.prototype.hotUpdate=function(e){this._modules.update(e),M(this,!0)},y.prototype._withCommit=function(e){var t=this._committing;this._committing=!0,e(),this._committing=t},Object.defineProperties(y.prototype,_);var D=I(function(e,t){var n={};return j(t).forEach(function(t){var r=t.key,i=t.val;n[r]=function(){var t=this.$store.state,n=this.$store.getters;if(e){var r=$(this.$store,"mapState",e);if(!r)return;t=r.context.state,n=r.context.getters}return"function"===typeof i?i.call(this,t,n):t[i]},n[r].vuex=!0}),n}),Y=I(function(e,t){var n={};return j(t).forEach(function(t){var r=t.key,i=t.val;n[r]=function(){var t=[],n=arguments.length;while(n--)t[n]=arguments[n];var r=this.$store.commit;if(e){var o=$(this.$store,"mapMutations",e);if(!o)return;r=o.context.commit}return"function"===typeof i?i.apply(this,[r].concat(t)):r.apply(this.$store,[i].concat(t))}}),n}),V=I(function(e,t){var n={};return j(t).forEach(function(t){var r=t.key,i=t.val;i=e+i,n[r]=function(){if(!e||$(this.$store,"mapGetters",e))return this.$store.getters[i]},n[r].vuex=!0}),n}),P=I(function(e,t){var n={};return j(t).forEach(function(t){var r=t.key,i=t.val;n[r]=function(){var t=[],n=arguments.length;while(n--)t[n]=arguments[n];var r=this.$store.dispatch;if(e){var o=$(this.$store,"mapActions",e);if(!o)return;r=o.context.dispatch}return"function"===typeof i?i.apply(this,[r].concat(t)):r.apply(this.$store,[i].concat(t))}}),n}),E=function(e){return{mapState:D.bind(null,e),mapGetters:V.bind(null,e),mapMutations:Y.bind(null,e),mapActions:P.bind(null,e)}};function j(e){return F(e)?Array.isArray(e)?e.map(function(e){return{key:e,val:e}}):Object.keys(e).map(function(t){return{key:t,val:e[t]}}):[]}function F(e){return Array.isArray(e)||u(e)}function I(e){return function(t,n){return"string"!==typeof t?(n=t,t=""):"/"!==t.charAt(t.length-1)&&(t+="/"),e(t,n)}}function $(e,t,n){var r=e._modulesNamespaceMap[n];return r}function R(e){void 0===e&&(e={});var t=e.collapsed;void 0===t&&(t=!0);var n=e.filter;void 0===n&&(n=function(e,t,n){return!0});var r=e.transformer;void 0===r&&(r=function(e){return e});var i=e.mutationTransformer;void 0===i&&(i=function(e){return e});var o=e.actionFilter;void 0===o&&(o=function(e,t){return!0});var a=e.actionTransformer;void 0===a&&(a=function(e){return e});var s=e.logMutations;void 0===s&&(s=!0);var l=e.logActions;void 0===l&&(l=!0);var u=e.logger;return void 0===u&&(u=console),function(e){var d=c(e.state);"undefined"!==typeof u&&(s&&e.subscribe(function(e,o){var a=c(o);if(n(e,d,a)){var s=B(),l=i(e),h="mutation "+e.type+s;N(u,h,t),u.log("%c prev state","color: #9E9E9E; font-weight: bold",r(d)),u.log("%c mutation","color: #03A9F4; font-weight: bold",l),u.log("%c next state","color: #4CAF50; font-weight: bold",r(a)),W(u)}d=a}),l&&e.subscribeAction(function(e,n){if(o(e,n)){var r=B(),i=a(e),s="action "+e.type+r;N(u,s,t),u.log("%c action","color: #03A9F4; font-weight: bold",i),W(u)}}))}}function N(e,t,n){var r=n?e.groupCollapsed:e.group;try{r.call(e,t)}catch(i){e.log(t)}}function W(e){try{e.groupEnd()}catch(t){e.log("—— log end ——")}}function B(){var e=new Date;return" @ "+U(e.getHours(),2)+":"+U(e.getMinutes(),2)+":"+U(e.getSeconds(),2)+"."+U(e.getMilliseconds(),3)}function K(e,t){return new Array(t+1).join(e)}function U(e,t){return K("0",t-e.toString().length)+e}var q={Store:y,install:H,version:"3.6.2",mapState:D,mapMutations:Y,mapGetters:V,mapActions:P,createNamespacedHelpers:E,createLogger:R};t.Ay=q},9771:function(e){"use strict";var t=!1,n=function(){};if(t){var r=function(e,t){var n=arguments.length;t=new Array(n>1?n-1:0);for(var r=1;r2?i-2:0);for(var o=2;o1e-5){d=l<=.5?c/(a+s):c/(2-a-s);var h=(a-r)/c,f=(a-i)/c,p=(a-o)/c;u=r==a?p-f:i==a?2+h-p:4+f-h,u*=60,u<0&&(u+=360)}return[u,d,l]}e.exports={lighten:n,darken:r,mix:i,toNum3:a,rgb:o,rgbaToRgb:o,pad2:t,rgbToHsl:l,rrggbbToHsl:c}},48104:function(e,t,n){var r=n(31488);e.exports=function(e,t){"#"===e[0]&&(e=e.slice(1));for(var n=["#"+e,r.toNum3(e).join(",")],i=1;i<=9;i++)n.push(r.lighten(e,Number((i/10).toFixed(2)))),n.push(r.darken(e,Number((i/10).toFixed(2))));return n.push(r.lighten(e,.85)),n.push(r.lighten(e,.925)),n.push(r.lighten(e,.95)),n.push(r.lighten(e,.975)),n.push(r.rrggbbToHsl(e)),[].push.apply(n,t),n}},46942:function(e,t){var n,r; +function r(e){var t=Number(e.version.split(".")[0]);if(t>=2)e.mixin({beforeCreate:r});else{var n=e.prototype._init;e.prototype._init=function(e){void 0===e&&(e={}),e.init=e.init?[r].concat(e.init):r,n.call(this,e)}}function r(){var e=this.$options;e.store?this.$store="function"===typeof e.store?e.store():e.store:e.parent&&e.parent.$store&&(this.$store=e.parent.$store)}}n.d(t,{L8:function(){return V},aH:function(){return D},i0:function(){return P}});var i="undefined"!==typeof window?window:"undefined"!==typeof n.g?n.g:{},o=i.__VUE_DEVTOOLS_GLOBAL_HOOK__;function a(e){o&&(e._devtoolHook=o,o.emit("vuex:init",e),o.on("vuex:travel-to-state",function(t){e.replaceState(t)}),e.subscribe(function(e,t){o.emit("vuex:mutation",e,t)},{prepend:!0}),e.subscribeAction(function(e,t){o.emit("vuex:action",e,t)},{prepend:!0}))}function s(e,t){return e.filter(t)[0]}function c(e,t){if(void 0===t&&(t=[]),null===e||"object"!==typeof e)return e;var n=s(t,function(t){return t.original===e});if(n)return n.copy;var r=Array.isArray(e)?[]:{};return t.push({original:e,copy:r}),Object.keys(e).forEach(function(n){r[n]=c(e[n],t)}),r}function l(e,t){Object.keys(e).forEach(function(n){return t(e[n],n)})}function u(e){return null!==e&&"object"===typeof e}function d(e){return e&&"function"===typeof e.then}function h(e,t){return function(){return e(t)}}var f=function(e,t){this.runtime=t,this._children=Object.create(null),this._rawModule=e;var n=e.state;this.state=("function"===typeof n?n():n)||{}},p={namespaced:{configurable:!0}};p.namespaced.get=function(){return!!this._rawModule.namespaced},f.prototype.addChild=function(e,t){this._children[e]=t},f.prototype.removeChild=function(e){delete this._children[e]},f.prototype.getChild=function(e){return this._children[e]},f.prototype.hasChild=function(e){return e in this._children},f.prototype.update=function(e){this._rawModule.namespaced=e.namespaced,e.actions&&(this._rawModule.actions=e.actions),e.mutations&&(this._rawModule.mutations=e.mutations),e.getters&&(this._rawModule.getters=e.getters)},f.prototype.forEachChild=function(e){l(this._children,e)},f.prototype.forEachGetter=function(e){this._rawModule.getters&&l(this._rawModule.getters,e)},f.prototype.forEachAction=function(e){this._rawModule.actions&&l(this._rawModule.actions,e)},f.prototype.forEachMutation=function(e){this._rawModule.mutations&&l(this._rawModule.mutations,e)},Object.defineProperties(f.prototype,p);var m=function(e){this.register([],e,!1)};function v(e,t,n){if(t.update(n),n.modules)for(var r in n.modules){if(!t.getChild(r))return void 0;v(e.concat(r),t.getChild(r),n.modules[r])}}m.prototype.get=function(e){return e.reduce(function(e,t){return e.getChild(t)},this.root)},m.prototype.getNamespace=function(e){var t=this.root;return e.reduce(function(e,n){return t=t.getChild(n),e+(t.namespaced?n+"/":"")},"")},m.prototype.update=function(e){v([],this.root,e)},m.prototype.register=function(e,t,n){var r=this;void 0===n&&(n=!0);var i=new f(t,n);if(0===e.length)this.root=i;else{var o=this.get(e.slice(0,-1));o.addChild(e[e.length-1],i)}t.modules&&l(t.modules,function(t,i){r.register(e.concat(i),t,n)})},m.prototype.unregister=function(e){var t=this.get(e.slice(0,-1)),n=e[e.length-1],r=t.getChild(n);r&&r.runtime&&t.removeChild(n)},m.prototype.isRegistered=function(e){var t=this.get(e.slice(0,-1)),n=e[e.length-1];return!!t&&t.hasChild(n)};var g;var y=function(e){var t=this;void 0===e&&(e={}),!g&&"undefined"!==typeof window&&window.Vue&&H(window.Vue);var n=e.plugins;void 0===n&&(n=[]);var r=e.strict;void 0===r&&(r=!1),this._committing=!1,this._actions=Object.create(null),this._actionSubscribers=[],this._mutations=Object.create(null),this._wrappedGetters=Object.create(null),this._modules=new m(e),this._modulesNamespaceMap=Object.create(null),this._subscribers=[],this._watcherVM=new g,this._makeLocalGettersCache=Object.create(null);var i=this,o=this,s=o.dispatch,c=o.commit;this.dispatch=function(e,t){return s.call(i,e,t)},this.commit=function(e,t,n){return c.call(i,e,t,n)},this.strict=r;var l=this._modules.root.state;w(this,l,[],this._modules.root),A(this,l),n.forEach(function(e){return e(t)});var u=void 0!==e.devtools?e.devtools:g.config.devtools;u&&a(this)},_={state:{configurable:!0}};function b(e,t,n){return t.indexOf(e)<0&&(n&&n.prepend?t.unshift(e):t.push(e)),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}function M(e,t){e._actions=Object.create(null),e._mutations=Object.create(null),e._wrappedGetters=Object.create(null),e._modulesNamespaceMap=Object.create(null);var n=e.state;w(e,n,[],e._modules.root,!0),A(e,n,t)}function A(e,t,n){var r=e._vm;e.getters={},e._makeLocalGettersCache=Object.create(null);var i=e._wrappedGetters,o={};l(i,function(t,n){o[n]=h(t,e),Object.defineProperty(e.getters,n,{get:function(){return e._vm[n]},enumerable:!0})});var a=g.config.silent;g.config.silent=!0,e._vm=new g({data:{$$state:t},computed:o}),g.config.silent=a,e.strict&&z(e),r&&(n&&e._withCommit(function(){r._data.$$state=null}),g.nextTick(function(){return r.$destroy()}))}function w(e,t,n,r,i){var o=!n.length,a=e._modules.getNamespace(n);if(r.namespaced&&(e._modulesNamespaceMap[a],e._modulesNamespaceMap[a]=r),!o&&!i){var s=T(t,n.slice(0,-1)),c=n[n.length-1];e._withCommit(function(){g.set(s,c,r.state)})}var l=r.context=x(e,a,n);r.forEachMutation(function(t,n){var r=a+n;L(e,r,t,l)}),r.forEachAction(function(t,n){var r=t.root?n:a+n,i=t.handler||t;C(e,r,i,l)}),r.forEachGetter(function(t,n){var r=a+n;S(e,r,t,l)}),r.forEachChild(function(r,o){w(e,t,n.concat(o),r,i)})}function x(e,t,n){var r=""===t,i={dispatch:r?e.dispatch:function(n,r,i){var o=O(n,r,i),a=o.payload,s=o.options,c=o.type;return s&&s.root||(c=t+c),e.dispatch(c,a)},commit:r?e.commit:function(n,r,i){var o=O(n,r,i),a=o.payload,s=o.options,c=o.type;s&&s.root||(c=t+c),e.commit(c,a,s)}};return Object.defineProperties(i,{getters:{get:r?function(){return e.getters}:function(){return k(e,t)}},state:{get:function(){return T(e.state,n)}}}),i}function k(e,t){if(!e._makeLocalGettersCache[t]){var n={},r=t.length;Object.keys(e.getters).forEach(function(i){if(i.slice(0,r)===t){var o=i.slice(r);Object.defineProperty(n,o,{get:function(){return e.getters[i]},enumerable:!0})}}),e._makeLocalGettersCache[t]=n}return e._makeLocalGettersCache[t]}function L(e,t,n,r){var i=e._mutations[t]||(e._mutations[t]=[]);i.push(function(t){n.call(e,r.state,t)})}function C(e,t,n,r){var i=e._actions[t]||(e._actions[t]=[]);i.push(function(t){var i=n.call(e,{dispatch:r.dispatch,commit:r.commit,getters:r.getters,state:r.state,rootGetters:e.getters,rootState:e.state},t);return d(i)||(i=Promise.resolve(i)),e._devtoolHook?i.catch(function(t){throw e._devtoolHook.emit("vuex:error",t),t}):i})}function S(e,t,n,r){e._wrappedGetters[t]||(e._wrappedGetters[t]=function(e){return n(r.state,r.getters,e.state,e.getters)})}function z(e){e._vm.$watch(function(){return this._data.$$state},function(){0},{deep:!0,sync:!0})}function T(e,t){return t.reduce(function(e,t){return e[t]},e)}function O(e,t,n){return u(e)&&e.type&&(n=t,t=e,e=e.type),{type:e,payload:t,options:n}}function H(e){g&&e===g||(g=e,r(g))}_.state.get=function(){return this._vm._data.$$state},_.state.set=function(e){0},y.prototype.commit=function(e,t,n){var r=this,i=O(e,t,n),o=i.type,a=i.payload,s=(i.options,{type:o,payload:a}),c=this._mutations[o];c&&(this._withCommit(function(){c.forEach(function(e){e(a)})}),this._subscribers.slice().forEach(function(e){return e(s,r.state)}))},y.prototype.dispatch=function(e,t){var n=this,r=O(e,t),i=r.type,o=r.payload,a={type:i,payload:o},s=this._actions[i];if(s){try{this._actionSubscribers.slice().filter(function(e){return e.before}).forEach(function(e){return e.before(a,n.state)})}catch(l){0}var c=s.length>1?Promise.all(s.map(function(e){return e(o)})):s[0](o);return new Promise(function(e,t){c.then(function(t){try{n._actionSubscribers.filter(function(e){return e.after}).forEach(function(e){return e.after(a,n.state)})}catch(l){0}e(t)},function(e){try{n._actionSubscribers.filter(function(e){return e.error}).forEach(function(t){return t.error(a,n.state,e)})}catch(l){0}t(e)})})}},y.prototype.subscribe=function(e,t){return b(e,this._subscribers,t)},y.prototype.subscribeAction=function(e,t){var n="function"===typeof e?{before:e}:e;return b(n,this._actionSubscribers,t)},y.prototype.watch=function(e,t,n){var r=this;return this._watcherVM.$watch(function(){return e(r.state,r.getters)},t,n)},y.prototype.replaceState=function(e){var t=this;this._withCommit(function(){t._vm._data.$$state=e})},y.prototype.registerModule=function(e,t,n){void 0===n&&(n={}),"string"===typeof e&&(e=[e]),this._modules.register(e,t),w(this,this.state,e,this._modules.get(e),n.preserveState),A(this,this.state)},y.prototype.unregisterModule=function(e){var t=this;"string"===typeof e&&(e=[e]),this._modules.unregister(e),this._withCommit(function(){var n=T(t.state,e.slice(0,-1));g.delete(n,e[e.length-1])}),M(this)},y.prototype.hasModule=function(e){return"string"===typeof e&&(e=[e]),this._modules.isRegistered(e)},y.prototype.hotUpdate=function(e){this._modules.update(e),M(this,!0)},y.prototype._withCommit=function(e){var t=this._committing;this._committing=!0,e(),this._committing=t},Object.defineProperties(y.prototype,_);var D=I(function(e,t){var n={};return j(t).forEach(function(t){var r=t.key,i=t.val;n[r]=function(){var t=this.$store.state,n=this.$store.getters;if(e){var r=$(this.$store,"mapState",e);if(!r)return;t=r.context.state,n=r.context.getters}return"function"===typeof i?i.call(this,t,n):t[i]},n[r].vuex=!0}),n}),Y=I(function(e,t){var n={};return j(t).forEach(function(t){var r=t.key,i=t.val;n[r]=function(){var t=[],n=arguments.length;while(n--)t[n]=arguments[n];var r=this.$store.commit;if(e){var o=$(this.$store,"mapMutations",e);if(!o)return;r=o.context.commit}return"function"===typeof i?i.apply(this,[r].concat(t)):r.apply(this.$store,[i].concat(t))}}),n}),V=I(function(e,t){var n={};return j(t).forEach(function(t){var r=t.key,i=t.val;i=e+i,n[r]=function(){if(!e||$(this.$store,"mapGetters",e))return this.$store.getters[i]},n[r].vuex=!0}),n}),P=I(function(e,t){var n={};return j(t).forEach(function(t){var r=t.key,i=t.val;n[r]=function(){var t=[],n=arguments.length;while(n--)t[n]=arguments[n];var r=this.$store.dispatch;if(e){var o=$(this.$store,"mapActions",e);if(!o)return;r=o.context.dispatch}return"function"===typeof i?i.apply(this,[r].concat(t)):r.apply(this.$store,[i].concat(t))}}),n}),E=function(e){return{mapState:D.bind(null,e),mapGetters:V.bind(null,e),mapMutations:Y.bind(null,e),mapActions:P.bind(null,e)}};function j(e){return F(e)?Array.isArray(e)?e.map(function(e){return{key:e,val:e}}):Object.keys(e).map(function(t){return{key:t,val:e[t]}}):[]}function F(e){return Array.isArray(e)||u(e)}function I(e){return function(t,n){return"string"!==typeof t?(n=t,t=""):"/"!==t.charAt(t.length-1)&&(t+="/"),e(t,n)}}function $(e,t,n){var r=e._modulesNamespaceMap[n];return r}function R(e){void 0===e&&(e={});var t=e.collapsed;void 0===t&&(t=!0);var n=e.filter;void 0===n&&(n=function(e,t,n){return!0});var r=e.transformer;void 0===r&&(r=function(e){return e});var i=e.mutationTransformer;void 0===i&&(i=function(e){return e});var o=e.actionFilter;void 0===o&&(o=function(e,t){return!0});var a=e.actionTransformer;void 0===a&&(a=function(e){return e});var s=e.logMutations;void 0===s&&(s=!0);var l=e.logActions;void 0===l&&(l=!0);var u=e.logger;return void 0===u&&(u=console),function(e){var d=c(e.state);"undefined"!==typeof u&&(s&&e.subscribe(function(e,o){var a=c(o);if(n(e,d,a)){var s=B(),l=i(e),h="mutation "+e.type+s;N(u,h,t),u.log("%c prev state","color: #9E9E9E; font-weight: bold",r(d)),u.log("%c mutation","color: #03A9F4; font-weight: bold",l),u.log("%c next state","color: #4CAF50; font-weight: bold",r(a)),W(u)}d=a}),l&&e.subscribeAction(function(e,n){if(o(e,n)){var r=B(),i=a(e),s="action "+e.type+r;N(u,s,t),u.log("%c action","color: #03A9F4; font-weight: bold",i),W(u)}}))}}function N(e,t,n){var r=n?e.groupCollapsed:e.group;try{r.call(e,t)}catch(i){e.log(t)}}function W(e){try{e.groupEnd()}catch(t){e.log("—— log end ——")}}function B(){var e=new Date;return" @ "+U(e.getHours(),2)+":"+U(e.getMinutes(),2)+":"+U(e.getSeconds(),2)+"."+U(e.getMilliseconds(),3)}function K(e,t){return new Array(t+1).join(e)}function U(e,t){return K("0",t-e.toString().length)+e}var q={Store:y,install:H,version:"3.6.2",mapState:D,mapMutations:Y,mapGetters:V,mapActions:P,createNamespacedHelpers:E,createLogger:R};t.Ay=q},9771:function(e){"use strict";var t=!1,n=function(){};if(t){var r=function(e,t){var n=arguments.length;t=new Array(n>1?n-1:0);for(var r=1;r2?i-2:0);for(var o=2;o1e-5){d=l<=.5?c/(a+s):c/(2-a-s);var h=(a-r)/c,f=(a-i)/c,p=(a-o)/c;u=r==a?p-f:i==a?2+h-p:4+f-h,u*=60,u<0&&(u+=360)}return[u,d,l]}e.exports={lighten:n,darken:r,mix:i,toNum3:a,rgb:o,rgbaToRgb:o,pad2:t,rgbToHsl:l,rrggbbToHsl:c}},48104:function(e,t,n){var r=n(31488);e.exports=function(e,t){"#"===e[0]&&(e=e.slice(1));for(var n=["#"+e,r.toNum3(e).join(",")],i=1;i<=9;i++)n.push(r.lighten(e,Number((i/10).toFixed(2)))),n.push(r.darken(e,Number((i/10).toFixed(2))));return n.push(r.lighten(e,.85)),n.push(r.lighten(e,.925)),n.push(r.lighten(e,.95)),n.push(r.lighten(e,.975)),n.push(r.rrggbbToHsl(e)),[].push.apply(n,t),n}},46942:function(e,t){var n,r; /*! Copyright (c) 2018 Jed Watson. Licensed under the MIT License (MIT), see http://jedwatson.github.io/classnames -*/(function(){"use strict";var i={}.hasOwnProperty;function o(){for(var e="",t=0;t>8&255]},G=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},J=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},X=function(e){return B(m(e),23,4)},Z=function(e){return B(e,52,8)},Q=function(e,t,n){l(e[z],t,{configurable:!0,get:function(){return n(this)[t]}})},ee=function(e,t,n,r){var i=D(e),o=p(n),a=!!r;if(o+t>i.byteLength)throw new R(O);var s=i.bytes,c=o+i.byteOffset,l=b(s,c,c+t);return a?l:W(l)},te=function(e,t,n,r,i,o){var a=D(e),s=p(n),c=r(+i),l=!!o;if(s+t>a.byteLength)throw new R(O);for(var u=a.bytes,d=s+a.byteOffset,h=0;h>24)},setUint8:function(e,t){ie(this,e,t<<24>>24)}},{unsafe:!0})}else P=function(e){h(this,E);var t=p(e);Y(this,{type:C,bytes:N($(t),0),byteLength:t}),o||(this.byteLength=t,this.detached=!1)},E=P[z],j=function(e,t,n){h(this,F),h(e,E);var r=H(e),i=r.byteLength,a=f(t);if(a<0||a>i)throw new R("Wrong offset");if(n=void 0===n?i-a:p(n),a+n>i)throw new R(T);Y(this,{type:S,buffer:e,byteLength:n,byteOffset:a,bytes:r.bytes}),o||(this.buffer=e,this.byteLength=n,this.byteOffset=a)},F=j[z],o&&(Q(P,"byteLength",H),Q(j,"buffer",D),Q(j,"byteLength",D),Q(j,"byteOffset",D)),u(F,{getInt8:function(e){return ee(this,1,e)[0]<<24>>24},getUint8:function(e){return ee(this,1,e)[0]},getInt16:function(e){var t=ee(this,2,e,arguments.length>1&&arguments[1]);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=ee(this,2,e,arguments.length>1&&arguments[1]);return t[1]<<8|t[0]},getInt32:function(e){return J(ee(this,4,e,arguments.length>1&&arguments[1]))},getUint32:function(e){return J(ee(this,4,e,arguments.length>1&&arguments[1]))>>>0},getFloat32:function(e){return K(ee(this,4,e,arguments.length>1&&arguments[1]),23)},getFloat64:function(e){return K(ee(this,8,e,arguments.length>1&&arguments[1]),52)},setInt8:function(e,t){te(this,1,e,U,t)},setUint8:function(e,t){te(this,1,e,U,t)},setInt16:function(e,t){te(this,2,e,q,t,arguments.length>2&&arguments[2])},setUint16:function(e,t){te(this,2,e,q,t,arguments.length>2&&arguments[2])},setInt32:function(e,t){te(this,4,e,G,t,arguments.length>2&&arguments[2])},setUint32:function(e,t){te(this,4,e,G,t,arguments.length>2&&arguments[2])},setFloat32:function(e,t){te(this,4,e,X,t,arguments.length>2&&arguments[2])},setFloat64:function(e,t){te(this,8,e,Z,t,arguments.length>2&&arguments[2])}});w(P,C),w(j,S),e.exports={ArrayBuffer:P,DataView:j}},57029:function(e,t,n){"use strict";var r=n(48981),i=n(35610),o=n(26198),a=n(84606),s=Math.min;e.exports=[].copyWithin||function(e,t){var n=r(this),c=o(n),l=i(e,c),u=i(t,c),d=arguments.length>2?arguments[2]:void 0,h=s((void 0===d?c:i(d,c))-u,c-l),f=1;u0)u in n?n[l]=n[u]:a(n,l),l+=f,u+=f;return n}},84373:function(e,t,n){"use strict";var r=n(48981),i=n(35610),o=n(26198);e.exports=function(e){var t=r(this),n=o(t),a=arguments.length,s=i(a>1?arguments[1]:void 0,n),c=a>2?arguments[2]:void 0,l=void 0===c?n:i(c,n);while(l>s)t[s++]=e;return t}},90235:function(e,t,n){"use strict";var r=n(59213).forEach,i=n(34598),o=i("forEach");e.exports=o?[].forEach:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}},35370:function(e,t,n){"use strict";var r=n(26198);e.exports=function(e,t,n){var i=0,o=arguments.length>2?n:r(t),a=new e(o);while(o>i)a[i]=t[i++];return a}},97916:function(e,t,n){"use strict";var r=n(76080),i=n(69565),o=n(48981),a=n(96319),s=n(44209),c=n(33517),l=n(26198),u=n(97040),d=n(34527),h=n(70081),f=n(50851),p=n(9539),m=Array;e.exports=function(e){var t=c(this),n=arguments.length,v=n>1?arguments[1]:void 0,g=void 0!==v;g&&(v=r(v,n>2?arguments[2]:void 0));var y,_,b,M,A,w,x=o(e),k=f(x),L=0;if(!k||this===m&&s(k))for(y=l(x),_=t?new this(y):m(y);y>L;L++)w=g?v(x[L],L):x[L],u(_,L,w);else for(_=t?new this:[],M=h(x,k),A=M.next;!(b=i(A,M)).done;L++){w=g?a(M,v,[b.value,L],!0):b.value;try{u(_,L,w)}catch(C){p(M,"throw",C)}}return d(_,L),_}},19617:function(e,t,n){"use strict";var r=n(25397),i=n(35610),o=n(26198),a=function(e){return function(t,n,a){var s=r(t),c=o(s);if(0===c)return!e&&-1;var l,u=i(a,c);if(e&&n!==n){while(c>u)if(l=s[u++],l!==l)return!0}else for(;c>u;u++)if((e||u in s)&&s[u]===n)return e||u||0;return!e&&-1}};e.exports={includes:a(!0),indexOf:a(!1)}},59213:function(e,t,n){"use strict";var r=n(76080),i=n(47055),o=n(48981),a=n(26198),s=n(1469),c=n(97040),l=function(e){var t=1===e,n=2===e,l=3===e,u=4===e,d=6===e,h=7===e,f=5===e||d;return function(p,m,v){for(var g,y,_=o(p),b=i(_),M=a(b),A=r(m,v),w=0,x=0,k=t?s(p,M):n||h?s(p,0):void 0;M>w;w++)if((f||w in b)&&(g=b[w],y=A(g,w,_),e))if(t)c(k,w,y);else if(y)switch(e){case 3:return!0;case 5:return g;case 6:return w;case 2:c(k,x++,g)}else switch(e){case 4:return!1;case 7:c(k,x++,g)}return d?-1:l||u?u:k}};e.exports={forEach:l(0),map:l(1),filter:l(2),some:l(3),every:l(4),find:l(5),findIndex:l(6),filterReject:l(7)}},8379:function(e,t,n){"use strict";var r=n(18745),i=n(25397),o=n(91291),a=n(26198),s=n(34598),c=Math.min,l=[].lastIndexOf,u=!!l&&1/[1].lastIndexOf(1,-0)<0,d=s("lastIndexOf"),h=u||!d;e.exports=h?function(e){if(u)return r(l,this,arguments)||0;var t=i(this),n=a(t);if(0===n)return-1;var s=n-1;for(arguments.length>1&&(s=c(s,o(arguments[1]))),s<0&&(s=n+s);s>=0;s--)if(s in t&&t[s]===e)return s||0;return-1}:l},70597:function(e,t,n){"use strict";var r=n(79039),i=n(78227),o=n(39519),a=i("species");e.exports=function(e){return o>=51||!r(function(){var t=[],n=t.constructor={};return n[a]=function(){return{foo:1}},1!==t[e](Boolean).foo})}},34598:function(e,t,n){"use strict";var r=n(79039);e.exports=function(e,t){var n=[][e];return!!n&&r(function(){n.call(null,t||function(){return 1},1)})}},80926:function(e,t,n){"use strict";var r=n(79306),i=n(48981),o=n(47055),a=n(26198),s=TypeError,c="Reduce of empty array with no initial value",l=function(e){return function(t,n,l,u){var d=i(t),h=o(d),f=a(d);if(r(n),0===f&&l<2)throw new s(c);var p=e?f-1:0,m=e?-1:1;if(l<2)while(1){if(p in h){u=h[p],p+=m;break}if(p+=m,e?p<0:f<=p)throw new s(c)}for(;e?p>=0:f>p;p+=m)p in h&&(u=n(u,h[p],p,d));return u}};e.exports={left:l(!1),right:l(!0)}},34527:function(e,t,n){"use strict";var r=n(43724),i=n(34376),o=TypeError,a=Object.getOwnPropertyDescriptor,s=r&&!function(){if(void 0!==this)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(e){return e instanceof TypeError}}();e.exports=s?function(e,t){if(i(e)&&!a(e,"length").writable)throw new o("Cannot set read only .length");return e.length=t}:function(e,t){return e.length=t}},67680:function(e,t,n){"use strict";var r=n(79504);e.exports=r([].slice)},74488:function(e,t,n){"use strict";var r=n(67680),i=Math.floor,o=function(e,t){var n=e.length;if(n<8){var a,s,c=1;while(c0)e[s]=e[--s];s!==c++&&(e[s]=a)}}else{var l=i(n/2),u=o(r(e,0,l),t),d=o(r(e,l),t),h=u.length,f=d.length,p=0,m=0;while(p1?arguments[1]:void 0);while(t=t?t.next:n.first){r(t.value,t.key,this);while(t&&t.removed)t=t.previous}},has:function(e){return!!_(this,e)}}),o(h,n?{get:function(e){var t=_(this,e);return t&&t.value},set:function(e,t){return y(this,0===e?0:e,t)}}:{add:function(e){return y(this,e=0===e?0:e,e)}}),f&&i(h,"size",{configurable:!0,get:function(){return m(this).size}}),d},setStrong:function(e,t,n){var r=t+" Iterator",i=g(t),o=g(r);u(e,t,function(e,t){v(this,{type:r,target:e,state:i(e),kind:t,last:null})},function(){var e=o(this),t=e.kind,n=e.last;while(n&&n.removed)n=n.previous;return e.target&&(e.last=n=n?n.next:e.state.first)?d("keys"===t?n.key:"values"===t?n.value:[n.key,n.value],!1):(e.target=null,d(void 0,!0))},n?"entries":"values",!n,!0),h(t)}}},91625:function(e,t,n){"use strict";var r=n(79504),i=n(56279),o=n(3451).getWeakData,a=n(90679),s=n(28551),c=n(64117),l=n(20034),u=n(72652),d=n(59213),h=n(39297),f=n(91181),p=f.set,m=f.getterFor,v=d.find,g=d.findIndex,y=r([].splice),_=0,b=function(e){return e.frozen||(e.frozen=new M)},M=function(){this.entries=[]},A=function(e,t){return v(e.entries,function(e){return e[0]===t})};M.prototype={get:function(e){var t=A(this,e);if(t)return t[1]},has:function(e){return!!A(this,e)},set:function(e,t){var n=A(this,e);n?n[1]=t:this.entries.push([e,t])},delete:function(e){var t=g(this.entries,function(t){return t[0]===e});return~t&&y(this.entries,t,1),!!~t}},e.exports={getConstructor:function(e,t,n,r){var d=e(function(e,i){a(e,f),p(e,{type:t,id:_++,frozen:null}),c(i)||u(i,e[r],{that:e,AS_ENTRIES:n})}),f=d.prototype,v=m(t),g=function(e,t,n){var r=v(e),i=o(s(t),!0);return!0===i?b(r).set(t,n):i[r.id]=n,e};return i(f,{delete:function(e){var t=v(this);if(!l(e))return!1;var n=o(e);return!0===n?b(t)["delete"](e):n&&h(n,t.id)&&delete n[t.id]},has:function(e){var t=v(this);if(!l(e))return!1;var n=o(e);return!0===n?b(t).has(e):n&&h(n,t.id)}}),i(f,n?{get:function(e){var t=v(this);if(l(e)){var n=o(e);if(!0===n)return b(t).get(e);if(n)return n[t.id]}},set:function(e,t){return g(this,e,t)}}:{add:function(e){return g(this,e,!0)}}),d}}},16468:function(e,t,n){"use strict";var r=n(46518),i=n(44576),o=n(79504),a=n(92796),s=n(36840),c=n(3451),l=n(72652),u=n(90679),d=n(94901),h=n(64117),f=n(20034),p=n(79039),m=n(84428),v=n(10687),g=n(23167);e.exports=function(e,t,n){var y=-1!==e.indexOf("Map"),_=-1!==e.indexOf("Weak"),b=y?"set":"add",M=i[e],A=M&&M.prototype,w=M,x={},k=function(e){var t=o(A[e]);s(A,e,"add"===e?function(e){return t(this,0===e?0:e),this}:"delete"===e?function(e){return!(_&&!f(e))&&t(this,0===e?0:e)}:"get"===e?function(e){return _&&!f(e)?void 0:t(this,0===e?0:e)}:"has"===e?function(e){return!(_&&!f(e))&&t(this,0===e?0:e)}:function(e,n){return t(this,0===e?0:e,n),this})},L=a(e,!d(M)||!(_||A.forEach&&!p(function(){(new M).entries().next()})));if(L)w=n.getConstructor(t,e,y,b),c.enable();else if(a(e,!0)){var C=new w,S=C[b](_?{}:-0,1)!==C,z=p(function(){C.has(1)}),T=m(function(e){new M(e)}),O=!_&&p(function(){var e=new M,t=5;while(t--)e[b](t,t);return!e.has(-0)});T||(w=t(function(e,t){u(e,A);var n=g(new M,e,w);return h(t)||l(t,n[b],{that:n,AS_ENTRIES:y}),n}),w.prototype=A,A.constructor=w),(z||O)&&(k("delete"),k("has"),y&&k("get")),(O||S)&&k(b),_&&A.clear&&delete A.clear}return x[e]=w,r({global:!0,constructor:!0,forced:w!==M},x),v(w,e),_||n.setStrong(w,e,y),w}},77740:function(e,t,n){"use strict";var r=n(39297),i=n(35031),o=n(77347),a=n(24913);e.exports=function(e,t,n){for(var s=i(t),c=a.f,l=o.f,u=0;u"+c+""}},62529:function(e){"use strict";e.exports=function(e,t){return{value:e,done:t}}},66699:function(e,t,n){"use strict";var r=n(43724),i=n(24913),o=n(6980);e.exports=r?function(e,t,n){return i.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},6980:function(e){"use strict";e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},97040:function(e,t,n){"use strict";var r=n(43724),i=n(24913),o=n(6980);e.exports=function(e,t,n){r?i.f(e,t,o(0,n)):e[t]=n}},53640:function(e,t,n){"use strict";var r=n(28551),i=n(84270),o=TypeError;e.exports=function(e){if(r(this),"string"===e||"default"===e)e="string";else if("number"!==e)throw new o("Incorrect hint");return i(this,e)}},62106:function(e,t,n){"use strict";var r=n(50283),i=n(24913);e.exports=function(e,t,n){return n.get&&r(n.get,t,{getter:!0}),n.set&&r(n.set,t,{setter:!0}),i.f(e,t,n)}},36840:function(e,t,n){"use strict";var r=n(94901),i=n(24913),o=n(50283),a=n(39433);e.exports=function(e,t,n,s){s||(s={});var c=s.enumerable,l=void 0!==s.name?s.name:t;if(r(n)&&o(n,l,s),s.global)c?e[t]=n:a(t,n);else{try{s.unsafe?e[t]&&(c=!0):delete e[t]}catch(u){}c?e[t]=n:i.f(e,t,{value:n,enumerable:!1,configurable:!s.nonConfigurable,writable:!s.nonWritable})}return e}},56279:function(e,t,n){"use strict";var r=n(36840);e.exports=function(e,t,n){for(var i in t)r(e,i,t[i],n);return e}},39433:function(e,t,n){"use strict";var r=n(44576),i=Object.defineProperty;e.exports=function(e,t){try{i(r,e,{value:t,configurable:!0,writable:!0})}catch(n){r[e]=t}return t}},84606:function(e,t,n){"use strict";var r=n(16823),i=TypeError;e.exports=function(e,t){if(!delete e[t])throw new i("Cannot delete property "+r(t)+" of "+r(e))}},43724:function(e,t,n){"use strict";var r=n(79039);e.exports=!r(function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]})},4055:function(e,t,n){"use strict";var r=n(44576),i=n(20034),o=r.document,a=i(o)&&i(o.createElement);e.exports=function(e){return a?o.createElement(e):{}}},96837:function(e){"use strict";var t=TypeError,n=9007199254740991;e.exports=function(e){if(e>n)throw new t("Maximum allowed index exceeded");return e}},67400:function(e){"use strict";e.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},79296:function(e,t,n){"use strict";var r=n(4055),i=r("span").classList,o=i&&i.constructor&&i.constructor.prototype;e.exports=o===Object.prototype?void 0:o},88727:function(e){"use strict";e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},13709:function(e,t,n){"use strict";var r=n(82839),i=r.match(/firefox\/(\d+)/i);e.exports=!!i&&+i[1]},13763:function(e,t,n){"use strict";var r=n(82839);e.exports=/MSIE|Trident/.test(r)},44265:function(e,t,n){"use strict";var r=n(82839);e.exports=/ipad|iphone|ipod/i.test(r)&&"undefined"!=typeof Pebble},89544:function(e,t,n){"use strict";var r=n(82839);e.exports=/ipad|iphone|ipod/i.test(r)&&/applewebkit/i.test(r)},16193:function(e,t,n){"use strict";var r=n(84215);e.exports="NODE"===r},7860:function(e,t,n){"use strict";var r=n(82839);e.exports=/web0s(?!.*chrome)/i.test(r)},82839:function(e,t,n){"use strict";var r=n(44576),i=r.navigator,o=i&&i.userAgent;e.exports=o?String(o):""},39519:function(e,t,n){"use strict";var r,i,o=n(44576),a=n(82839),s=o.process,c=o.Deno,l=s&&s.versions||c&&c.version,u=l&&l.v8;u&&(r=u.split("."),i=r[0]>0&&r[0]<4?1:+(r[0]+r[1])),!i&&a&&(r=a.match(/Edge\/(\d+)/),(!r||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/),r&&(i=+r[1]))),e.exports=i},3607:function(e,t,n){"use strict";var r=n(82839),i=r.match(/AppleWebKit\/(\d+)\./);e.exports=!!i&&+i[1]},84215:function(e,t,n){"use strict";var r=n(44576),i=n(82839),o=n(22195),a=function(e){return i.slice(0,e.length)===e};e.exports=function(){return a("Bun/")?"BUN":a("Cloudflare-Workers")?"CLOUDFLARE":a("Deno/")?"DENO":a("Node.js/")?"NODE":r.Bun&&"string"==typeof Bun.version?"BUN":r.Deno&&"object"==typeof Deno.version?"DENO":"process"===o(r.process)?"NODE":r.window&&r.document?"BROWSER":"REST"}()},46518:function(e,t,n){"use strict";var r=n(44576),i=n(77347).f,o=n(66699),a=n(36840),s=n(39433),c=n(77740),l=n(92796);e.exports=function(e,t){var n,u,d,h,f,p,m=e.target,v=e.global,g=e.stat;if(u=v?r:g?r[m]||s(m,{}):r[m]&&r[m].prototype,u)for(d in t){if(f=t[d],e.dontCallGetSet?(p=i(u,d),h=p&&p.value):h=u[d],n=l(v?d:m+(g?".":"#")+d,e.forced),!n&&void 0!==h){if(typeof f==typeof h)continue;c(f,h)}(e.sham||h&&h.sham)&&o(f,"sham",!0),a(u,d,f,e)}}},79039:function(e){"use strict";e.exports=function(e){try{return!!e()}catch(t){return!0}}},89228:function(e,t,n){"use strict";n(27495);var r=n(69565),i=n(36840),o=n(57323),a=n(79039),s=n(78227),c=n(66699),l=s("species"),u=RegExp.prototype;e.exports=function(e,t,n,d){var h=s(e),f=!a(function(){var t={};return t[h]=function(){return 7},7!==""[e](t)}),p=f&&!a(function(){var t=!1,n=/a/;if("split"===e){var r={};r[l]=function(){return n},n={constructor:r,flags:""},n[h]=/./[h]}return n.exec=function(){return t=!0,null},n[h](""),!t});if(!f||!p||n){var m=/./[h],v=t(h,""[e],function(e,t,n,i,a){var s=t.exec;return s===o||s===u.exec?f&&!a?{done:!0,value:r(m,t,n,i)}:{done:!0,value:r(e,n,t,i)}:{done:!1}});i(String.prototype,e,v[0]),i(u,h,v[1])}d&&c(u[h],"sham",!0)}},70259:function(e,t,n){"use strict";var r=n(34376),i=n(26198),o=n(96837),a=n(76080),s=n(97040),c=function(e,t,n,l,u,d,h,f){var p,m,v=u,g=0,y=!!h&&a(h,f);while(g0&&r(p)?(m=i(p),v=c(e,t,p,m,v,d-1)-1):(o(v+1),s(e,v,p)),v++),g++;return v};e.exports=c},92744:function(e,t,n){"use strict";var r=n(79039);e.exports=!r(function(){return Object.isExtensible(Object.preventExtensions({}))})},18745:function(e,t,n){"use strict";var r=n(40616),i=Function.prototype,o=i.apply,a=i.call;e.exports="object"==typeof Reflect&&Reflect.apply||(r?a.bind(o):function(){return a.apply(o,arguments)})},76080:function(e,t,n){"use strict";var r=n(27476),i=n(79306),o=n(40616),a=r(r.bind);e.exports=function(e,t){return i(e),void 0===t?e:o?a(e,t):function(){return e.apply(t,arguments)}}},40616:function(e,t,n){"use strict";var r=n(79039);e.exports=!r(function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")})},30566:function(e,t,n){"use strict";var r=n(79504),i=n(79306),o=n(20034),a=n(39297),s=n(67680),c=n(40616),l=Function,u=r([].concat),d=r([].join),h={},f=function(e,t,n){if(!a(h,t)){for(var r=[],i=0;i]*>)/g,u=/\$([$&'`]|\d{1,2})/g;e.exports=function(e,t,n,r,d,h){var f=n+e.length,p=r.length,m=u;return void 0!==d&&(d=i(d),m=l),s(h,m,function(i,s){var l;switch(a(s,0)){case"$":return"$";case"&":return e;case"`":return c(t,0,n);case"'":return c(t,f);case"<":l=d[c(s,1,-1)];break;default:var u=+s;if(0===u)return i;if(u>p){var h=o(u/10);return 0===h?i:h<=p?void 0===r[h-1]?a(s,1):r[h-1]+a(s,1):i}l=r[u-1]}return void 0===l?"":l})}},44576:function(e,t,n){"use strict";var r=function(e){return e&&e.Math===Math&&e};e.exports=r("object"==typeof globalThis&&globalThis)||r("object"==typeof window&&window)||r("object"==typeof self&&self)||r("object"==typeof n.g&&n.g)||r("object"==typeof this&&this)||function(){return this}()||Function("return this")()},39297:function(e,t,n){"use strict";var r=n(79504),i=n(48981),o=r({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return o(i(e),t)}},30421:function(e){"use strict";e.exports={}},90757:function(e){"use strict";e.exports=function(e,t){try{1===arguments.length?console.error(e):console.error(e,t)}catch(n){}}},20397:function(e,t,n){"use strict";var r=n(97751);e.exports=r("document","documentElement")},35917:function(e,t,n){"use strict";var r=n(43724),i=n(79039),o=n(4055);e.exports=!r&&!i(function(){return 7!==Object.defineProperty(o("div"),"a",{get:function(){return 7}}).a})},88490:function(e){"use strict";var t=Array,n=Math.abs,r=Math.pow,i=Math.floor,o=Math.log,a=Math.LN2,s=function(e,s,c){var l,u,d,h=t(c),f=8*c-s-1,p=(1<>1,v=23===s?r(2,-24)-r(2,-77):0,g=e<0||0===e&&1/e<0?1:0,y=0;e=n(e),e!==e||e===1/0?(u=e!==e?1:0,l=p):(l=i(o(e)/a),d=r(2,-l),e*d<1&&(l--,d*=2),e+=l+m>=1?v/d:v*r(2,1-m),e*d>=2&&(l++,d/=2),l+m>=p?(u=0,l=p):l+m>=1?(u=(e*d-1)*r(2,s),l+=m):(u=e*r(2,m-1)*r(2,s),l=0));while(s>=8)h[y++]=255&u,u/=256,s-=8;l=l<0)h[y++]=255&l,l/=256,f-=8;return h[y-1]|=128*g,h},c=function(e,t){var n,i=e.length,o=8*i-t-1,a=(1<>1,c=o-7,l=i-1,u=e[l--],d=127&u;u>>=7;while(c>0)d=256*d+e[l--],c-=8;n=d&(1<<-c)-1,d>>=-c,c+=t;while(c>0)n=256*n+e[l--],c-=8;if(0===d)d=1-s;else{if(d===a)return n?NaN:u?-1/0:1/0;n+=r(2,t),d-=s}return(u?-1:1)*n*r(2,d-t)};e.exports={pack:s,unpack:c}},47055:function(e,t,n){"use strict";var r=n(79504),i=n(79039),o=n(22195),a=Object,s=r("".split);e.exports=i(function(){return!a("z").propertyIsEnumerable(0)})?function(e){return"String"===o(e)?s(e,""):a(e)}:a},23167:function(e,t,n){"use strict";var r=n(94901),i=n(20034),o=n(52967);e.exports=function(e,t,n){var a,s;return o&&r(a=t.constructor)&&a!==n&&i(s=a.prototype)&&s!==n.prototype&&o(e,s),e}},33706:function(e,t,n){"use strict";var r=n(79504),i=n(94901),o=n(77629),a=r(Function.toString);i(o.inspectSource)||(o.inspectSource=function(e){return a(e)}),e.exports=o.inspectSource},3451:function(e,t,n){"use strict";var r=n(46518),i=n(79504),o=n(30421),a=n(20034),s=n(39297),c=n(24913).f,l=n(38480),u=n(10298),d=n(34124),h=n(33392),f=n(92744),p=!1,m=h("meta"),v=0,g=function(e){c(e,m,{value:{objectID:"O"+v++,weakData:{}}})},y=function(e,t){if(!a(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!s(e,m)){if(!d(e))return"F";if(!t)return"E";g(e)}return e[m].objectID},_=function(e,t){if(!s(e,m)){if(!d(e))return!0;if(!t)return!1;g(e)}return e[m].weakData},b=function(e){return f&&p&&d(e)&&!s(e,m)&&g(e),e},M=function(){A.enable=function(){},p=!0;var e=l.f,t=i([].splice),n={};n[m]=1,e(n).length&&(l.f=function(n){for(var r=e(n),i=0,o=r.length;iy;y++)if(b=T(e[y]),b&&l(m,b))return b;return new p(!1)}v=u(e,g)}M=k?e.next:v.next;while(!(A=i(M,v)).done){var O=A.value;try{b=T(O)}catch(H){if(!v)throw H;h(v,"throw",H)}if("object"==typeof b&&b&&l(m,b))return b}return new p(!1)}},9539:function(e,t,n){"use strict";var r=n(69565),i=n(28551),o=n(55966);e.exports=function(e,t,n){var a,s;i(e);try{if(a=o(e,"return"),!a){if("throw"===t)throw n;return n}a=r(a,e)}catch(c){s=!0,a=c}if("throw"===t)throw n;if(s)throw a;return i(a),n}},33994:function(e,t,n){"use strict";var r=n(57657).IteratorPrototype,i=n(2360),o=n(6980),a=n(10687),s=n(26269),c=function(){return this};e.exports=function(e,t,n,l){var u=t+" Iterator";return e.prototype=i(r,{next:o(+!l,n)}),a(e,u,!1,!0),s[u]=c,e}},51088:function(e,t,n){"use strict";var r=n(46518),i=n(69565),o=n(96395),a=n(10350),s=n(94901),c=n(33994),l=n(42787),u=n(52967),d=n(10687),h=n(66699),f=n(36840),p=n(78227),m=n(26269),v=n(57657),g=a.PROPER,y=a.CONFIGURABLE,_=v.IteratorPrototype,b=v.BUGGY_SAFARI_ITERATORS,M=p("iterator"),A="keys",w="values",x="entries",k=function(){return this};e.exports=function(e,t,n,a,p,v,L){c(n,t,a);var C,S,z,T=function(e){if(e===p&&V)return V;if(!b&&e&&e in D)return D[e];switch(e){case A:return function(){return new n(this,e)};case w:return function(){return new n(this,e)};case x:return function(){return new n(this,e)}}return function(){return new n(this)}},O=t+" Iterator",H=!1,D=e.prototype,Y=D[M]||D["@@iterator"]||p&&D[p],V=!b&&Y||T(p),P="Array"===t&&D.entries||Y;if(P&&(C=l(P.call(new e)),C!==Object.prototype&&C.next&&(o||l(C)===_||(u?u(C,_):s(C[M])||f(C,M,k)),d(C,O,!0,!0),o&&(m[O]=k))),g&&p===w&&Y&&Y.name!==w&&(!o&&y?h(D,"name",w):(H=!0,V=function(){return i(Y,this)})),p)if(S={values:T(w),keys:v?V:T(A),entries:T(x)},L)for(z in S)(b||H||!(z in D))&&f(D,z,S[z]);else r({target:t,proto:!0,forced:b||H},S);return o&&!L||D[M]===V||f(D,M,V,{name:p}),m[t]=V,S}},57657:function(e,t,n){"use strict";var r,i,o,a=n(79039),s=n(94901),c=n(20034),l=n(2360),u=n(42787),d=n(36840),h=n(78227),f=n(96395),p=h("iterator"),m=!1;[].keys&&(o=[].keys(),"next"in o?(i=u(u(o)),i!==Object.prototype&&(r=i)):m=!0);var v=!c(r)||a(function(){var e={};return r[p].call(e)!==e});v?r={}:f&&(r=l(r)),s(r[p])||d(r,p,function(){return this}),e.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:m}},26269:function(e){"use strict";e.exports={}},26198:function(e,t,n){"use strict";var r=n(18014);e.exports=function(e){return r(e.length)}},50283:function(e,t,n){"use strict";var r=n(79504),i=n(79039),o=n(94901),a=n(39297),s=n(43724),c=n(10350).CONFIGURABLE,l=n(33706),u=n(91181),d=u.enforce,h=u.get,f=String,p=Object.defineProperty,m=r("".slice),v=r("".replace),g=r([].join),y=s&&!i(function(){return 8!==p(function(){},"length",{value:8}).length}),_=String(String).split("String"),b=e.exports=function(e,t,n){"Symbol("===m(f(t),0,7)&&(t="["+v(f(t),/^Symbol\(([^)]*)\).*$/,"$1")+"]"),n&&n.getter&&(t="get "+t),n&&n.setter&&(t="set "+t),(!a(e,"name")||c&&e.name!==t)&&(s?p(e,"name",{value:t,configurable:!0}):e.name=t),y&&n&&a(n,"arity")&&e.length!==n.arity&&p(e,"length",{value:n.arity});try{n&&a(n,"constructor")&&n.constructor?s&&p(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(i){}var r=d(e);return a(r,"source")||(r.source=g(_,"string"==typeof t?t:"")),e};Function.prototype.toString=b(function(){return o(this)&&h(this).source||l(this)},"toString")},53250:function(e){"use strict";var t=Math.expm1,n=Math.exp;e.exports=!t||t(10)>22025.465794806718||t(10)<22025.465794806718||-2e-17!==t(-2e-17)?function(e){var t=+e;return 0===t?t:t>-1e-6&&t<1e-6?t+t*t/2:n(t)-1}:t},33164:function(e,t,n){"use strict";var r=n(77782),i=n(53602),o=Math.abs,a=2220446049250313e-31;e.exports=function(e,t,n,s){var c=+e,l=o(c),u=r(c);if(ln||h!==h?u*(1/0):u*h}},15617:function(e,t,n){"use strict";var r=n(33164),i=1.1920928955078125e-7,o=34028234663852886e22,a=11754943508222875e-54;e.exports=Math.fround||function(e){return r(e,i,o,a)}},49340:function(e){"use strict";var t=Math.log,n=Math.LOG10E;e.exports=Math.log10||function(e){return t(e)*n}},7740:function(e){"use strict";var t=Math.log;e.exports=Math.log1p||function(e){var n=+e;return n>-1e-8&&n<1e-8?n-n*n/2:t(1+n)}},67787:function(e){"use strict";var t=Math.log,n=Math.LN2;e.exports=Math.log2||function(e){return t(e)/n}},53602:function(e){"use strict";var t=2220446049250313e-31,n=1/t;e.exports=function(e){return e+n-n}},77782:function(e){"use strict";e.exports=Math.sign||function(e){var t=+e;return 0===t||t!==t?t:t<0?-1:1}},80741:function(e){"use strict";var t=Math.ceil,n=Math.floor;e.exports=Math.trunc||function(e){var r=+e;return(r>0?n:t)(r)}},91955:function(e,t,n){"use strict";var r,i,o,a,s,c=n(44576),l=n(93389),u=n(76080),d=n(59225).set,h=n(18265),f=n(89544),p=n(44265),m=n(7860),v=n(16193),g=c.MutationObserver||c.WebKitMutationObserver,y=c.document,_=c.process,b=c.Promise,M=l("queueMicrotask");if(!M){var A=new h,w=function(){var e,t;v&&(e=_.domain)&&e.exit();while(t=A.get())try{t()}catch(n){throw A.head&&r(),n}e&&e.enter()};f||v||m||!g||!y?!p&&b&&b.resolve?(a=b.resolve(void 0),a.constructor=b,s=u(a.then,a),r=function(){s(w)}):v?r=function(){_.nextTick(w)}:(d=u(d,c),r=function(){d(w)}):(i=!0,o=y.createTextNode(""),new g(w).observe(o,{characterData:!0}),r=function(){o.data=i=!i}),M=function(e){A.head||r(),A.add(e)}}e.exports=M},27819:function(e,t,n){"use strict";var r=n(79039);e.exports=!r(function(){var e="9007199254740993",t=JSON.rawJSON(e);return!JSON.isRawJSON(t)||JSON.stringify(t)!==e})},36043:function(e,t,n){"use strict";var r=n(79306),i=TypeError,o=function(e){var t,n;this.promise=new e(function(e,r){if(void 0!==t||void 0!==n)throw new i("Bad Promise constructor");t=e,n=r}),this.resolve=r(t),this.reject=r(n)};e.exports.f=function(e){return new o(e)}},60511:function(e,t,n){"use strict";var r=n(60788),i=TypeError;e.exports=function(e){if(r(e))throw new i("The method doesn't accept regular expressions");return e}},50360:function(e,t,n){"use strict";var r=n(44576),i=r.isFinite;e.exports=Number.isFinite||function(e){return"number"==typeof e&&i(e)}},33904:function(e,t,n){"use strict";var r=n(44576),i=n(79039),o=n(79504),a=n(655),s=n(43802).trim,c=n(47452),l=o("".charAt),u=r.parseFloat,d=r.Symbol,h=d&&d.iterator,f=1/u(c+"-0")!==-1/0||h&&!i(function(){u(Object(h))});e.exports=f?function(e){var t=s(a(e)),n=u(t);return 0===n&&"-"===l(t,0)?-0:n}:u},52703:function(e,t,n){"use strict";var r=n(44576),i=n(79039),o=n(79504),a=n(655),s=n(43802).trim,c=n(47452),l=r.parseInt,u=r.Symbol,d=u&&u.iterator,h=/^[+-]?0x/i,f=o(h.exec),p=8!==l(c+"08")||22!==l(c+"0x16")||d&&!i(function(){l(Object(d))});e.exports=p?function(e,t){var n=s(a(e));return l(n,t>>>0||(f(h,n)?16:10))}:l},44213:function(e,t,n){"use strict";var r=n(43724),i=n(79504),o=n(69565),a=n(79039),s=n(71072),c=n(33717),l=n(48773),u=n(48981),d=n(47055),h=Object.assign,f=Object.defineProperty,p=i([].concat);e.exports=!h||a(function(){if(r&&1!==h({b:1},h(f({},"a",{enumerable:!0,get:function(){f(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},n=Symbol("assign detection"),i="abcdefghijklmnopqrst";return e[n]=7,i.split("").forEach(function(e){t[e]=e}),7!==h({},e)[n]||s(h({},t)).join("")!==i})?function(e,t){var n=u(e),i=arguments.length,a=1,h=c.f,f=l.f;while(i>a){var m,v=d(arguments[a++]),g=h?p(s(v),h(v)):s(v),y=g.length,_=0;while(y>_)m=g[_++],r&&!o(f,v,m)||(n[m]=v[m])}return n}:h},2360:function(e,t,n){"use strict";var r,i=n(28551),o=n(96801),a=n(88727),s=n(30421),c=n(20397),l=n(4055),u=n(66119),d=">",h="<",f="prototype",p="script",m=u("IE_PROTO"),v=function(){},g=function(e){return h+p+d+e+h+"/"+p+d},y=function(e){e.write(g("")),e.close();var t=e.parentWindow.Object;return e=null,t},_=function(){var e,t=l("iframe"),n="java"+p+":";return t.style.display="none",c.appendChild(t),t.src=String(n),e=t.contentWindow.document,e.open(),e.write(g("document.F=Object")),e.close(),e.F},b=function(){try{r=new ActiveXObject("htmlfile")}catch(t){}b="undefined"!=typeof document?document.domain&&r?y(r):_():y(r);var e=a.length;while(e--)delete b[f][a[e]];return b()};s[m]=!0,e.exports=Object.create||function(e,t){var n;return null!==e?(v[f]=i(e),n=new v,v[f]=null,n[m]=e):n=b(),void 0===t?n:o.f(n,t)}},96801:function(e,t,n){"use strict";var r=n(43724),i=n(48686),o=n(24913),a=n(28551),s=n(25397),c=n(71072);t.f=r&&!i?Object.defineProperties:function(e,t){a(e);var n,r=s(t),i=c(t),l=i.length,u=0;while(l>u)o.f(e,n=i[u++],r[n]);return e}},24913:function(e,t,n){"use strict";var r=n(43724),i=n(35917),o=n(48686),a=n(28551),s=n(56969),c=TypeError,l=Object.defineProperty,u=Object.getOwnPropertyDescriptor,d="enumerable",h="configurable",f="writable";t.f=r?o?function(e,t,n){if(a(e),t=s(t),a(n),"function"===typeof e&&"prototype"===t&&"value"in n&&f in n&&!n[f]){var r=u(e,t);r&&r[f]&&(e[t]=n.value,n={configurable:h in n?n[h]:r[h],enumerable:d in n?n[d]:r[d],writable:!1})}return l(e,t,n)}:l:function(e,t,n){if(a(e),t=s(t),a(n),i)try{return l(e,t,n)}catch(r){}if("get"in n||"set"in n)throw new c("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},77347:function(e,t,n){"use strict";var r=n(43724),i=n(69565),o=n(48773),a=n(6980),s=n(25397),c=n(56969),l=n(39297),u=n(35917),d=Object.getOwnPropertyDescriptor;t.f=r?d:function(e,t){if(e=s(e),t=c(t),u)try{return d(e,t)}catch(n){}if(l(e,t))return a(!i(o.f,e,t),e[t])}},10298:function(e,t,n){"use strict";var r=n(22195),i=n(25397),o=n(38480).f,a=n(67680),s="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],c=function(e){try{return o(e)}catch(t){return a(s)}};e.exports.f=function(e){return s&&"Window"===r(e)?c(e):o(i(e))}},38480:function(e,t,n){"use strict";var r=n(61828),i=n(88727),o=i.concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return r(e,o)}},33717:function(e,t){"use strict";t.f=Object.getOwnPropertySymbols},42787:function(e,t,n){"use strict";var r=n(39297),i=n(94901),o=n(48981),a=n(66119),s=n(12211),c=a("IE_PROTO"),l=Object,u=l.prototype;e.exports=s?l.getPrototypeOf:function(e){var t=o(e);if(r(t,c))return t[c];var n=t.constructor;return i(n)&&t instanceof n?n.prototype:t instanceof l?u:null}},34124:function(e,t,n){"use strict";var r=n(79039),i=n(20034),o=n(22195),a=n(15652),s=Object.isExtensible,c=r(function(){s(1)});e.exports=c||a?function(e){return!!i(e)&&((!a||"ArrayBuffer"!==o(e))&&(!s||s(e)))}:s},1625:function(e,t,n){"use strict";var r=n(79504);e.exports=r({}.isPrototypeOf)},61828:function(e,t,n){"use strict";var r=n(79504),i=n(39297),o=n(25397),a=n(19617).indexOf,s=n(30421),c=r([].push);e.exports=function(e,t){var n,r=o(e),l=0,u=[];for(n in r)!i(s,n)&&i(r,n)&&c(u,n);while(t.length>l)i(r,n=t[l++])&&(~a(u,n)||c(u,n));return u}},71072:function(e,t,n){"use strict";var r=n(61828),i=n(88727);e.exports=Object.keys||function(e){return r(e,i)}},48773:function(e,t){"use strict";var n={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,i=r&&!n.call({1:2},1);t.f=i?function(e){var t=r(this,e);return!!t&&t.enumerable}:n},42551:function(e,t,n){"use strict";var r=n(96395),i=n(44576),o=n(79039),a=n(3607);e.exports=r||!o(function(){if(!(a&&a<535)){var e=Math.random();__defineSetter__.call(null,e,function(){}),delete i[e]}})},52967:function(e,t,n){"use strict";var r=n(46706),i=n(20034),o=n(67750),a=n(73506);e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,n={};try{e=r(Object.prototype,"__proto__","set"),e(n,[]),t=n instanceof Array}catch(s){}return function(n,r){return o(n),a(r),i(n)?(t?e(n,r):n.__proto__=r,n):n}}():void 0)},32357:function(e,t,n){"use strict";var r=n(43724),i=n(79039),o=n(79504),a=n(42787),s=n(71072),c=n(25397),l=n(48773).f,u=o(l),d=o([].push),h=r&&i(function(){var e=Object.create(null);return e[2]=2,!u(e,2)}),f=function(e){return function(t){var n,i=c(t),o=s(i),l=h&&null===a(i),f=o.length,p=0,m=[];while(f>p)n=o[p++],r&&!(l?n in i:u(i,n))||d(m,e?[n,i[n]]:i[n]);return m}};e.exports={entries:f(!0),values:f(!1)}},53179:function(e,t,n){"use strict";var r=n(92140),i=n(36955);e.exports=r?{}.toString:function(){return"[object "+i(this)+"]"}},84270:function(e,t,n){"use strict";var r=n(69565),i=n(94901),o=n(20034),a=TypeError;e.exports=function(e,t){var n,s;if("string"===t&&i(n=e.toString)&&!o(s=r(n,e)))return s;if(i(n=e.valueOf)&&!o(s=r(n,e)))return s;if("string"!==t&&i(n=e.toString)&&!o(s=r(n,e)))return s;throw new a("Can't convert object to primitive value")}},35031:function(e,t,n){"use strict";var r=n(97751),i=n(79504),o=n(38480),a=n(33717),s=n(28551),c=i([].concat);e.exports=r("Reflect","ownKeys")||function(e){var t=o.f(s(e)),n=a.f;return n?c(t,n(e)):t}},616:function(e,t,n){"use strict";var r=n(79504),i=n(39297),o=SyntaxError,a=parseInt,s=String.fromCharCode,c=r("".charAt),l=r("".slice),u=r(/./.exec),d={'\\"':'"',"\\\\":"\\","\\/":"/","\\b":"\b","\\f":"\f","\\n":"\n","\\r":"\r","\\t":"\t"},h=/^[\da-f]{4}$/i,f=/^[\u0000-\u001F]$/;e.exports=function(e,t){var n=!0,r="";while(t0&&v(l,s.lastIndex-1);s.lastIndex>0&&(!s.multiline||s.multiline&&"\n"!==z&&"\r"!==z&&"\u2028"!==z&&"\u2029"!==z)&&(L="(?: (?:"+L+"))",S=" "+S,C++),n=new RegExp("^(?:"+L+")",k)}A&&(n=new RegExp("^"+L+"$(?!\\s)",k)),b&&(i=s.lastIndex);var T=r(p,w?n:s,S);return w?T?(T.input=l,T[0]=_(T[0],C),T.index=s.lastIndex,s.lastIndex+=T[0].length):s.lastIndex=0:b&&T&&(s.lastIndex=s.global?T.index+T[0].length:i),A&&T&&T.length>1&&r(f,T[0],n,function(){for(var e=1;eb)","g");return"b"!==e.exec("b").groups.a||"bc"!=="b".replace(e,"$
c")})},67750:function(e,t,n){"use strict";var r=n(64117),i=TypeError;e.exports=function(e){if(r(e))throw new i("Can't call method on "+e);return e}},93389:function(e,t,n){"use strict";var r=n(44576),i=n(43724),o=Object.getOwnPropertyDescriptor;e.exports=function(e){if(!i)return r[e];var t=o(r,e);return t&&t.value}},3470:function(e){"use strict";e.exports=Object.is||function(e,t){return e===t?0!==e||1/e===1/t:e!==e&&t!==t}},79472:function(e,t,n){"use strict";var r=n(44576),i=n(18745),o=n(94901),a=n(84215),s=n(82839),c=n(67680),l=n(22812),u=r.Function,d=/MSIE .\./.test(s)||"BUN"===a&&function(){var e=r.Bun.version.split(".");return e.length<3||"0"===e[0]&&(e[1]<3||"3"===e[1]&&"0"===e[2])}();e.exports=function(e,t){var n=t?2:1;return d?function(r,a){var s=l(arguments.length,1)>n,d=o(r)?r:u(r),h=s?c(arguments,n):[],f=s?function(){i(d,this,h)}:d;return t?e(f,a):e(f)}:e}},87633:function(e,t,n){"use strict";var r=n(97751),i=n(62106),o=n(78227),a=n(43724),s=o("species");e.exports=function(e){var t=r(e);a&&t&&!t[s]&&i(t,s,{configurable:!0,get:function(){return this}})}},10687:function(e,t,n){"use strict";var r=n(24913).f,i=n(39297),o=n(78227),a=o("toStringTag");e.exports=function(e,t,n){e&&!n&&(e=e.prototype),e&&!i(e,a)&&r(e,a,{configurable:!0,value:t})}},66119:function(e,t,n){"use strict";var r=n(25745),i=n(33392),o=r("keys");e.exports=function(e){return o[e]||(o[e]=i(e))}},77629:function(e,t,n){"use strict";var r=n(96395),i=n(44576),o=n(39433),a="__core-js_shared__",s=e.exports=i[a]||o(a,{});(s.versions||(s.versions=[])).push({version:"3.49.0",mode:r?"pure":"global",copyright:"© 2013–2025 Denis Pushkarev (zloirock.ru), 2025–2026 CoreJS Company (core-js.io). All rights reserved.",license:"https://github.com/zloirock/core-js/blob/v3.49.0/LICENSE",source:"https://github.com/zloirock/core-js"})},25745:function(e,t,n){"use strict";var r=n(77629);e.exports=function(e,t){return r[e]||(r[e]=t||{})}},2293:function(e,t,n){"use strict";var r=n(28551),i=n(35548),o=n(64117),a=n(78227),s=a("species");e.exports=function(e,t){var n,a=r(e).constructor;return void 0===a||o(n=r(a)[s])?t:i(n)}},23061:function(e,t,n){"use strict";var r=n(79039);e.exports=function(e){return r(function(){var t=""[e]('"');return t!==t.toLowerCase()||t.split('"').length>3})}},68183:function(e,t,n){"use strict";var r=n(79504),i=n(91291),o=n(655),a=n(67750),s=r("".charAt),c=r("".charCodeAt),l=r("".slice),u=function(e){return function(t,n){var r,u,d=o(a(t)),h=i(n),f=d.length;return h<0||h>=f?e?"":void 0:(r=c(d,h),r<55296||r>56319||h+1===f||(u=c(d,h+1))<56320||u>57343?e?s(d,h):r:e?l(d,h,h+2):u-56320+(r-55296<<10)+65536)}};e.exports={codeAt:u(!1),charAt:u(!0)}},83063:function(e,t,n){"use strict";var r=n(82839);e.exports=/Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\w+)? Safari\//.test(r)},60533:function(e,t,n){"use strict";var r=n(79504),i=n(18014),o=n(655),a=n(72333),s=n(67750),c=r(a),l=r("".slice),u=Math.ceil,d=function(e){return function(t,n,r){var a=o(s(t)),d=i(n),h=a.length;if(d<=h)return a;var f,p,m=void 0===r?" ":o(r);return""===m?a:(f=d-h,p=c(m,u(f/m.length)),p.length>f&&(p=l(p,0,f)),e?a+p:p+a)}};e.exports={start:d(!1),end:d(!0)}},3717:function(e,t,n){"use strict";var r=n(79504),i=2147483647,o=36,a=1,s=26,c=38,l=700,u=72,d=128,h="-",f=/[^\0-\u007E]/,p=/[.\u3002\uFF0E\uFF61]/g,m="Overflow: input needs wider integers to process",v=o-a,g=RangeError,y=r(p.exec),_=Math.floor,b=String.fromCharCode,M=r("".charCodeAt),A=r([].join),w=r([].push),x=r("".replace),k=r("".split),L=r("".toLowerCase),C=function(e){var t=[],n=0,r=e.length;while(n=55296&&i<=56319&&n>1,e+=_(e/t);while(e>v*s>>1)e=_(e/v),r+=o;return _(r+(v+1)*e/(e+c))},T=function(e){var t=[];e=C(e);var n,r,c=e.length,l=d,f=0,p=u;for(n=0;n=l&&r_((i-f)/x))throw new g(m);for(f+=(M-l)*x,l=M,n=0;ni)throw new g(m);if(r===l){var k=f,L=o;while(1){var T=L<=p?a:L>=p+s?s:L-p;if(k0;(c=s(c/2))&&(t+=t))c%2&&(n+=t);return n}},18866:function(e,t,n){"use strict";var r=n(43802).end,i=n(60706);e.exports=i("trimEnd")?function(){return r(this)}:"".trimEnd},60706:function(e,t,n){"use strict";var r=n(10350).PROPER,i=n(79039),o=n(47452),a="​…᠎";e.exports=function(e){return i(function(){return!!o[e]()||a[e]()!==a||r&&o[e].name!==e})}},53487:function(e,t,n){"use strict";var r=n(43802).start,i=n(60706);e.exports=i("trimStart")?function(){return r(this)}:"".trimStart},43802:function(e,t,n){"use strict";var r=n(79504),i=n(67750),o=n(655),a=n(47452),s=r("".replace),c=RegExp("^["+a+"]+"),l=RegExp("(^|[^"+a+"])["+a+"]+$"),u=function(e){return function(t){var n=o(i(t));return 1&e&&(n=s(n,c,"")),2&e&&(n=s(n,l,"$1")),n}};e.exports={start:u(1),end:u(2),trim:u(3)}},4495:function(e,t,n){"use strict";var r=n(39519),i=n(79039),o=n(44576),a=o.String;e.exports=!!Object.getOwnPropertySymbols&&!i(function(){var e=Symbol("symbol detection");return!a(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&r&&r<41})},58242:function(e,t,n){"use strict";var r=n(69565),i=n(97751),o=n(78227),a=n(36840);e.exports=function(){var e=i("Symbol"),t=e&&e.prototype,n=t&&t.valueOf,s=o("toPrimitive");t&&!t[s]&&a(t,s,function(e){return r(n,this)},{arity:1})}},91296:function(e,t,n){"use strict";var r=n(4495);e.exports=r&&!!Symbol["for"]&&!!Symbol.keyFor},59225:function(e,t,n){"use strict";var r,i,o,a,s=n(44576),c=n(18745),l=n(76080),u=n(94901),d=n(39297),h=n(79039),f=n(20397),p=n(67680),m=n(4055),v=n(22812),g=n(89544),y=n(16193),_=s.setImmediate,b=s.clearImmediate,M=s.process,A=s.Dispatch,w=s.Function,x=s.MessageChannel,k=s.String,L=0,C={},S="onreadystatechange";h(function(){r=s.location});var z=function(e){if(d(C,e)){var t=C[e];delete C[e],t()}},T=function(e){return function(){z(e)}},O=function(e){z(e.data)},H=function(e){s.postMessage(k(e),r.protocol+"//"+r.host)};_&&b||(_=function(e){v(arguments.length,1);var t=u(e)?e:w(e),n=p(arguments,1);return C[++L]=function(){c(t,void 0,n)},i(L),L},b=function(e){delete C[e]},y?i=function(e){M.nextTick(T(e))}:A&&A.now?i=function(e){A.now(T(e))}:x&&!g?(o=new x,a=o.port2,o.port1.onmessage=O,i=l(a.postMessage,a)):s.addEventListener&&u(s.postMessage)&&!s.importScripts&&r&&"file:"!==r.protocol&&!h(H)?(i=H,s.addEventListener("message",O,!1)):i=S in m("script")?function(e){f.appendChild(m("script"))[S]=function(){f.removeChild(this),z(e)}}:function(e){setTimeout(T(e),0)}),e.exports={set:_,clear:b}},31240:function(e,t,n){"use strict";var r=n(79504);e.exports=r(1.1.valueOf)},35610:function(e,t,n){"use strict";var r=n(91291),i=Math.max,o=Math.min;e.exports=function(e,t){var n=r(e);return n<0?i(n+t,0):o(n,t)}},75854:function(e,t,n){"use strict";var r=n(72777),i=TypeError;e.exports=function(e){var t=r(e,"number");if("number"==typeof t)throw new i("Can't convert number to bigint");return BigInt(t)}},57696:function(e,t,n){"use strict";var r=n(91291),i=n(18014),o=RangeError;e.exports=function(e){if(void 0===e)return 0;var t=r(e),n=i(t);if(t!==n)throw new o("Wrong length or index");return n}},25397:function(e,t,n){"use strict";var r=n(47055),i=n(67750);e.exports=function(e){return r(i(e))}},91291:function(e,t,n){"use strict";var r=n(80741);e.exports=function(e){var t=+e;return t!==t||0===t?0:r(t)}},18014:function(e,t,n){"use strict";var r=n(91291),i=Math.min;e.exports=function(e){var t=r(e);return t>0?i(t,9007199254740991):0}},48981:function(e,t,n){"use strict";var r=n(67750),i=Object;e.exports=function(e){return i(r(e))}},58229:function(e,t,n){"use strict";var r=n(99590),i=RangeError;e.exports=function(e,t){var n=r(e);if(n%t)throw new i("Wrong offset");return n}},99590:function(e,t,n){"use strict";var r=n(91291),i=RangeError;e.exports=function(e){var t=r(e);if(t<0)throw new i("The argument can't be less than 0");return t}},72777:function(e,t,n){"use strict";var r=n(69565),i=n(20034),o=n(10757),a=n(55966),s=n(84270),c=n(78227),l=TypeError,u=c("toPrimitive");e.exports=function(e,t){if(!i(e)||o(e))return e;var n,c=a(e,u);if(c){if(void 0===t&&(t="default"),n=r(c,e,t),!i(n)||o(n))return n;throw new l("Can't convert object to primitive value")}return void 0===t&&(t="number"),s(e,t)}},56969:function(e,t,n){"use strict";var r=n(72777),i=n(10757);e.exports=function(e){var t=r(e,"string");return i(t)?t:t+""}},92140:function(e,t,n){"use strict";var r=n(78227),i=r("toStringTag"),o={};o[i]="z",e.exports="[object z]"===String(o)},655:function(e,t,n){"use strict";var r=n(36955),i=String;e.exports=function(e){if("Symbol"===r(e))throw new TypeError("Cannot convert a Symbol value to a string");return i(e)}},58319:function(e){"use strict";var t=Math.floor;e.exports=function(e){var n=+e;if(n!==n||n<=0)return 0;if(n>=255)return 255;var r=t(n);return r+.5=0},ee=function(e,t){return t=g(t),Q(e,t)?d(2,e[t]):F(e,t)},te=function(e,t,n){return t=g(t),!(Q(e,t)&&b(n)&&y(n,"value"))||y(n,"get")||y(n,"set")||n.configurable||y(n,"writable")&&!n.writable||y(n,"enumerable")&&!n.enumerable?j(e,t,n):(e[t]=n.value,e)};a?(W||(O.f=ee,T.f=te,X(U,"buffer"),X(U,"byteOffset"),X(U,"byteLength"),X(U,"length")),r({target:"Object",stat:!0,forced:!W},{getOwnPropertyDescriptor:ee,defineProperty:te}),e.exports=function(e,t,n){var a=e.match(/\d+/)[0]/8,c=e+(n?"Clamped":"")+"Array",l="get"+e,d="set"+e,f=i[c],g=f,y=g&&g.prototype,_={},M=function(e,t){var n=V(e);return n.view[l](t*a+n.byteOffset,!0)},w=function(e,t,r){var i=V(e);i.view[d](t*a+i.byteOffset,n?v(r):r,!0)},z=function(e,t){j(e,t,{get:function(){return M(this,t)},set:function(e){return w(this,t,e)},enumerable:!0})};W?s&&(g=t(function(e,t,n,r){return u(e,y),Y(function(){return b(t)?Z(t)?void 0!==r?new f(t,m(n,a),r):void 0!==n?new f(t,m(n,a)):new f(t):q(t)?H(g,t):o(L,g,t):new f(p(t))}(),e,g)}),x&&x(g,K),C(k(f),function(e){e in g||h(g,e,f[e])}),g.prototype=y):(g=t(function(e,t,n,r){u(e,y);var i,s,c,l=0,d=0;if(b(t)){if(!Z(t))return q(t)?H(g,t):o(L,g,t);i=t,d=m(n,a);var h=t.byteLength;if(void 0===r){if(h%a)throw new I(J);if(s=h-d,s<0)throw new I(J)}else if(s=p(r)*a,s+d>h)throw new I(J);c=s/a}else c=p(t),s=c*a,i=new $(s);P(e,{buffer:i,byteOffset:d,byteLength:s,length:c,view:new N(i)});while(l1?arguments[1]:void 0,v=void 0!==m;v&&o(m);var g,y,_,b,M,A,w,x,k=s(e),L=u(k);if(L&&!d(L)){w=l(k,L),x=w.next,k=[];while(!(A=i(x,w)).done)k.push(A.value)}for(v&&n>2&&(m=r(m,arguments[2])),y=c(k),_=new(f(t))(y),b=h(_),g=0;y>g;g++)M=v?m(k[g],g):k[g],_[g]=b?p(M):+M;return _}},33392:function(e,t,n){"use strict";var r=n(79504),i=0,o=Math.random(),a=r(1.1.toString);e.exports=function(e){return"Symbol("+(void 0===e?"":e)+")_"+a(++i+o,36)}},67416:function(e,t,n){"use strict";var r=n(79039),i=n(78227),o=n(43724),a=n(96395),s=i("iterator");e.exports=!r(function(){var e=new URL("b?a=1&b=2&c=3","https://a"),t=e.searchParams,n=new URLSearchParams("a=1&a=2&b=3"),r="";return e.pathname="c%20d",t.forEach(function(e,n){t["delete"]("b"),r+=n+e}),n["delete"]("a",2),n["delete"]("b",void 0),a&&(!e.toJSON||!n.has("a",1)||n.has("a",2)||!n.has("a",void 0)||n.has("b"))||!t.size&&(a||!o)||!t.sort||"https://a/c%20d?a=1&c=3"!==e.href||"3"!==t.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!t[s]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("https://тест").host||"#%D0%B1"!==new URL("https://a#б").hash||"a1c3"!==r||"x"!==new URL("https://x",void 0).host})},7040:function(e,t,n){"use strict";var r=n(4495);e.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},48686:function(e,t,n){"use strict";var r=n(43724),i=n(79039);e.exports=r&&i(function(){return 42!==Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype})},22812:function(e){"use strict";var t=TypeError;e.exports=function(e,n){if(e=51||!i(function(){var e=[];return e[v]=!1,e.concat()[0]!==e}),y=function(e){if(!a(e))return!1;var t=e[v];return void 0!==t?!!t:o(e)},_=!g||!f("concat");r({target:"Array",proto:!0,arity:1,forced:_},{concat:function(e){var t,n,r,i,o,a=s(this),f=h(a,0),p=0;for(t=-1,r=arguments.length;t1?arguments[1]:void 0)}})},48980:function(e,t,n){"use strict";var r=n(46518),i=n(59213).findIndex,o=n(6469),a="findIndex",s=!0;a in[]&&Array(1)[a](function(){s=!1}),r({target:"Array",proto:!0,forced:s},{findIndex:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}}),o(a)},50113:function(e,t,n){"use strict";var r=n(46518),i=n(59213).find,o=n(6469),a="find",s=!0;a in[]&&Array(1)[a](function(){s=!1}),r({target:"Array",proto:!0,forced:s},{find:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}}),o(a)},78350:function(e,t,n){"use strict";var r=n(46518),i=n(70259),o=n(79306),a=n(48981),s=n(26198),c=n(1469);r({target:"Array",proto:!0},{flatMap:function(e){var t,n=a(this),r=s(n);return o(e),t=c(n,0),i(t,n,n,r,0,1,e,arguments.length>1?arguments[1]:void 0),t}})},46449:function(e,t,n){"use strict";var r=n(46518),i=n(70259),o=n(48981),a=n(26198),s=n(91291),c=n(1469);r({target:"Array",proto:!0},{flat:function(){var e=arguments.length?arguments[0]:void 0,t=o(this),n=a(t),r=void 0===e?1:s(e),l=c(t,0);return i(l,t,t,n,0,r),l}})},23418:function(e,t,n){"use strict";var r=n(46518),i=n(97916),o=n(84428),a=!o(function(e){Array.from(e)});r({target:"Array",stat:!0,forced:a},{from:i})},74423:function(e,t,n){"use strict";var r=n(46518),i=n(19617).includes,o=n(79039),a=n(6469),s=o(function(){return!Array(1).includes()}),c=o(function(){return[,1].includes(void 0,1)});r({target:"Array",proto:!0,forced:s||c},{includes:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}}),a("includes")},23792:function(e,t,n){"use strict";var r=n(25397),i=n(6469),o=n(26269),a=n(91181),s=n(24913).f,c=n(51088),l=n(62529),u=n(96395),d=n(43724),h="Array Iterator",f=a.set,p=a.getterFor(h);e.exports=c(Array,"Array",function(e,t){f(this,{type:h,target:r(e),index:0,kind:t})},function(){var e=p(this),t=e.target,n=e.index++;if(!t||n>=t.length)return e.target=null,l(void 0,!0);switch(e.kind){case"keys":return l(n,!1);case"values":return l(t[n],!1)}return l([n,t[n]],!1)},"values");var m=o.Arguments=o.Array;if(i("keys"),i("values"),i("entries"),!u&&d&&"values"!==m.name)try{s(m,"name",{value:"values"})}catch(v){}},48598:function(e,t,n){"use strict";var r=n(46518),i=n(79504),o=n(47055),a=n(25397),s=n(34598),c=i([].join),l=o!==Object,u=l||!s("join",",");r({target:"Array",proto:!0,forced:u},{join:function(e){return c(a(this),void 0===e?",":e)}})},62062:function(e,t,n){"use strict";var r=n(46518),i=n(59213).map,o=n(70597),a=o("map");r({target:"Array",proto:!0,forced:!a},{map:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}})},31051:function(e,t,n){"use strict";var r=n(46518),i=n(79039),o=n(33517),a=n(97040),s=n(34527),c=Array,l=i(function(){function e(){}return!(c.of.call(e)instanceof e)});r({target:"Array",stat:!0,forced:l},{of:function(){var e=0,t=arguments.length,n=new(o(this)?this:c)(t);while(t>e)a(n,e,arguments[e++]);return s(n,t),n}})},34782:function(e,t,n){"use strict";var r=n(46518),i=n(34376),o=n(33517),a=n(20034),s=n(35610),c=n(26198),l=n(25397),u=n(97040),d=n(34527),h=n(78227),f=n(70597),p=n(67680),m=f("slice"),v=h("species"),g=Array,y=Math.max;r({target:"Array",proto:!0,forced:!m},{slice:function(e,t){var n,r,h,f=l(this),m=c(f),_=s(e,m),b=s(void 0===t?m:t,m);if(i(f)&&(n=f.constructor,o(n)&&(n===g||i(n.prototype))?n=void 0:a(n)&&(n=n[v],null===n&&(n=void 0)),n===g||void 0===n))return p(f,_,b);for(r=new(void 0===n?g:n)(y(b-_,0)),h=0;_3)){if(p)return!0;if(v)return v<603;var e,t,n,r,i="";for(e=65;e<76;e++){switch(t=String.fromCharCode(e),e){case 66:case 69:case 70:case 72:n=3;break;case 68:case 71:n=4;break;default:n=2}for(r=0;r<47;r++)g.push({k:t+r,v:n})}for(g.sort(function(e,t){return t.v-e.v}),r=0;ri?1:-1}};r({target:"Array",proto:!0,forced:x},{sort:function(e){void 0!==e&&o(e);var t=a(this);if(w)return void 0===e?y(t):y(t,e);var n,r,i=[],l=s(t);for(r=0;rb-r+n;p--)h(_,p-1)}else if(n>r)for(p=b-r;p>M;p--)g=p+r-1,y=p+n-1,g in _?_[y]=_[g]:h(_,y);for(p=0;p94906265.62425156?a(t)+c:i(t-1+s(t-1)*s(t+1))}})},82326:function(e,t,n){"use strict";var r=n(46518),i=Math.asinh,o=Math.log,a=Math.sqrt,s=Math.LN2,c=94906265.62425156;function l(e){var t=+e;return isFinite(t)&&0!==t?t<0?-l(-t):t>c?o(t)+s:o(t+a(t*t+1)):t}var u=!(i&&1/i(0)>0);r({target:"Math",stat:!0,forced:u},{asinh:l})},36389:function(e,t,n){"use strict";var r=n(46518),i=n(7740),o=Math.atanh,a=!(o&&1/o(-0)<0);r({target:"Math",stat:!0,forced:a},{atanh:function(e){var t=+e;return 0===t?t:i(2*t/(1-t))/2}})},64444:function(e,t,n){"use strict";var r=n(46518),i=n(77782),o=Math.abs,a=Math.pow;r({target:"Math",stat:!0},{cbrt:function(e){var t=+e;return i(t)*a(o(t),1/3)}})},8085:function(e,t,n){"use strict";var r=n(46518),i=Math.floor,o=Math.log,a=Math.LOG2E;r({target:"Math",stat:!0},{clz32:function(e){var t=e>>>0;return t?31-i(o(t+.5)*a):32}})},77762:function(e,t,n){"use strict";var r=n(46518),i=n(53250),o=Math.cosh,a=Math.abs,s=Math.E,c=!o||o(710)===1/0;r({target:"Math",stat:!0,forced:c},{cosh:function(e){var t=i(a(e)-1)+1;return(t+1/(t*s*s))*(s/2)}})},65070:function(e,t,n){"use strict";var r=n(46518),i=n(53250);r({target:"Math",stat:!0,forced:i!==Math.expm1},{expm1:i})},60605:function(e,t,n){"use strict";var r=n(46518),i=n(15617);r({target:"Math",stat:!0},{fround:i})},39469:function(e,t,n){"use strict";var r=n(46518),i=Math.hypot,o=Math.abs,a=Math.sqrt,s=!!i&&i(1/0,NaN)!==1/0;r({target:"Math",stat:!0,arity:2,forced:s},{hypot:function(e,t){var n,r,i=0,s=0,c=arguments.length,l=0;while(s0?(r=n/l,i+=r*r):i+=n;return l===1/0?1/0:l*a(i)}})},72152:function(e,t,n){"use strict";var r=n(46518),i=n(79039),o=Math.imul,a=i(function(){return-5!==o(4294967295,5)||2!==o.length});r({target:"Math",stat:!0,forced:a},{imul:function(e,t){var n=65535,r=+e,i=+t,o=n&r,a=n&i;return 0|o*a+((n&r>>>16)*a+o*(n&i>>>16)<<16>>>0)}})},75376:function(e,t,n){"use strict";var r=n(46518),i=n(49340);r({target:"Math",stat:!0},{log10:i})},56624:function(e,t,n){"use strict";var r=n(46518),i=n(7740);r({target:"Math",stat:!0},{log1p:i})},11367:function(e,t,n){"use strict";var r=n(46518),i=n(67787);r({target:"Math",stat:!0},{log2:i})},5914:function(e,t,n){"use strict";var r=n(46518),i=n(77782);r({target:"Math",stat:!0},{sign:i})},78553:function(e,t,n){"use strict";var r=n(46518),i=n(79039),o=n(53250),a=Math.abs,s=Math.exp,c=Math.E,l=i(function(){return-2e-17!==Math.sinh(-2e-17)});r({target:"Math",stat:!0,forced:l},{sinh:function(e){var t=+e;return a(t)<1?(o(t)-o(-t))/2:(s(t-1)-s(-t-1))*(c/2)}})},98690:function(e,t,n){"use strict";var r=n(46518),i=n(53250),o=Math.exp;r({target:"Math",stat:!0},{tanh:function(e){var t=+e,n=i(t),r=i(-t);return n===1/0?1:r===1/0?-1:(n-r)/(o(t)+o(-t))}})},60479:function(e,t,n){"use strict";var r=n(10687);r(Math,"Math",!0)},70761:function(e,t,n){"use strict";var r=n(46518),i=n(80741);r({target:"Math",stat:!0},{trunc:i})},2892:function(e,t,n){"use strict";var r=n(46518),i=n(96395),o=n(43724),a=n(44576),s=n(19167),c=n(79504),l=n(92796),u=n(39297),d=n(23167),h=n(1625),f=n(10757),p=n(72777),m=n(79039),v=n(38480).f,g=n(77347).f,y=n(24913).f,_=n(31240),b=n(43802).trim,M="Number",A=a[M],w=s[M],x=A.prototype,k=a.TypeError,L=c("".slice),C=c("".charCodeAt),S=function(e){var t=p(e,"number");return"bigint"==typeof t?t:z(t)},z=function(e){var t,n,r,i,o,a,s,c,l=p(e,"number");if(f(l))throw new k("Cannot convert a Symbol value to a number");if("string"==typeof l&&l.length>2)if(l=b(l),t=C(l,0),43===t||45===t){if(n=C(l,2),88===n||120===n)return NaN}else if(48===t){switch(C(l,1)){case 66:case 98:r=2,i=49;break;case 79:case 111:r=8,i=55;break;default:return+l}for(o=L(l,2),a=o.length,s=0;si)return NaN;return parseInt(o,r)}return+l},T=l(M,!A(" 0o1")||!A("0b1")||A("+0x1")),O=function(e){return h(x,e)&&m(function(){_(e)})},H=function(e){var t=arguments.length<1?0:A(S(e));return O(this)?d(Object(t),this,H):t};H.prototype=x,T&&!i&&(x.constructor=H),r({global:!0,constructor:!0,wrap:!0,forced:T},{Number:H});var D=function(e,t){for(var n,r=o?v(t):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,fromString,range".split(","),i=0;r.length>i;i++)u(t,n=r[i])&&!u(e,n)&&y(e,n,g(t,n))};i&&w&&D(s[M],w),(T||i)&&D(s[M],A)},45374:function(e,t,n){"use strict";var r=n(46518);r({target:"Number",stat:!0,nonConfigurable:!0,nonWritable:!0},{EPSILON:Math.pow(2,-52)})},25428:function(e,t,n){"use strict";var r=n(46518),i=n(50360);r({target:"Number",stat:!0},{isFinite:i})},32637:function(e,t,n){"use strict";var r=n(46518),i=n(2087);r({target:"Number",stat:!0},{isInteger:i})},40150:function(e,t,n){"use strict";var r=n(46518);r({target:"Number",stat:!0},{isNaN:function(e){return e!==e}})},59149:function(e,t,n){"use strict";var r=n(46518),i=n(2087),o=Math.abs;r({target:"Number",stat:!0},{isSafeInteger:function(e){return i(e)&&o(e)<=9007199254740991}})},64601:function(e,t,n){"use strict";var r=n(46518);r({target:"Number",stat:!0,nonConfigurable:!0,nonWritable:!0},{MAX_SAFE_INTEGER:9007199254740991})},44435:function(e,t,n){"use strict";var r=n(46518);r({target:"Number",stat:!0,nonConfigurable:!0,nonWritable:!0},{MIN_SAFE_INTEGER:-9007199254740991})},87220:function(e,t,n){"use strict";var r=n(46518),i=n(33904);r({target:"Number",stat:!0,forced:Number.parseFloat!==i},{parseFloat:i})},25843:function(e,t,n){"use strict";var r=n(46518),i=n(52703);r({target:"Number",stat:!0,forced:Number.parseInt!==i},{parseInt:i})},9868:function(e,t,n){"use strict";var r=n(46518),i=n(79504),o=n(91291),a=n(31240),s=n(72333),c=n(79039),l=RangeError,u=String,d=Math.floor,h=i(s),f=i("".slice),p=i(1.1.toFixed),m=function(e,t,n){return 0===t?n:t%2===1?m(e,t-1,n*e):m(e*e,t/2,n)},v=function(e){var t=0,n=e;while(n>=4096)t+=12,n/=4096;while(n>=2)t+=1,n/=2;return t},g=function(e,t,n){var r=-1,i=n;while(++r<6)i+=t*e[r],e[r]=i%1e7,i=d(i/1e7)},y=function(e,t){var n=6,r=0;while(--n>=0)r+=e[n],e[n]=d(r/t),r=r%t*1e7},_=function(e){var t=6,n="";while(--t>=0)if(""!==n||0===t||0!==e[t]){var r=u(e[t]);n=""===n?r:n+h("0",7-r.length)+r}return n},b=c(function(){return"0.000"!==p(8e-5,3)||"1"!==p(.9,0)||"1.25"!==p(1.255,2)||"1000000000000000128"!==p(0xde0b6b3a7640080,0)})||!c(function(){p({})});r({target:"Number",proto:!0,forced:b},{toFixed:function(e){var t,n,r,i,s=a(this),c=o(e),d=[0,0,0,0,0,0],p="",b="0";if(c<0||c>20)throw new l("Incorrect fraction digits");if(s!==s)return"NaN";if(s<=-1e21||s>=1e21)return u(s);if(s<0&&(p="-",s=-s),s>1e-21)if(t=v(s*m(2,69,1))-69,n=t<0?s*m(2,-t,1):s/m(2,t,1),n*=4503599627370496,t=52-t,t>0){g(d,0,n),r=c;while(r>=7)g(d,1e7,0),r-=7;g(d,m(10,r,1),0),r=t-1;while(r>=23)y(d,1<<23),r-=23;y(d,1<0?(i=b.length,b=p+(i<=c?"0."+h("0",c-i)+b:f(b,0,i-c)+"."+f(b,i-c))):b=p+b,b}})},69085:function(e,t,n){"use strict";var r=n(46518),i=n(44213);r({target:"Object",stat:!0,arity:2,forced:Object.assign!==i},{assign:i})},17427:function(e,t,n){"use strict";var r=n(46518),i=n(43724),o=n(42551),a=n(79306),s=n(48981),c=n(24913);i&&r({target:"Object",proto:!0,forced:o},{__defineGetter__:function(e,t){c.f(s(this),e,{get:a(t),enumerable:!0,configurable:!0})}})},87607:function(e,t,n){"use strict";var r=n(46518),i=n(43724),o=n(42551),a=n(79306),s=n(48981),c=n(24913);i&&r({target:"Object",proto:!0,forced:o},{__defineSetter__:function(e,t){c.f(s(this),e,{set:a(t),enumerable:!0,configurable:!0})}})},5506:function(e,t,n){"use strict";var r=n(46518),i=n(32357).entries;r({target:"Object",stat:!0},{entries:function(e){return i(e)}})},52811:function(e,t,n){"use strict";var r=n(46518),i=n(92744),o=n(79039),a=n(20034),s=n(3451).onFreeze,c=Object.freeze,l=o(function(){c(1)});r({target:"Object",stat:!0,forced:l,sham:!i},{freeze:function(e){return c&&a(e)?c(s(e)):e}})},53921:function(e,t,n){"use strict";var r=n(46518),i=n(72652),o=n(97040);r({target:"Object",stat:!0},{fromEntries:function(e){var t={};return i(e,function(e,n){o(t,e,n)},{AS_ENTRIES:!0}),t}})},83851:function(e,t,n){"use strict";var r=n(46518),i=n(79039),o=n(25397),a=n(77347).f,s=n(43724),c=!s||i(function(){a(1)});r({target:"Object",stat:!0,forced:c,sham:!s},{getOwnPropertyDescriptor:function(e,t){return a(o(e),t)}})},81278:function(e,t,n){"use strict";var r=n(46518),i=n(43724),o=n(35031),a=n(25397),s=n(77347),c=n(97040);r({target:"Object",stat:!0,sham:!i},{getOwnPropertyDescriptors:function(e){var t,n,r=a(e),i=s.f,l=o(r),u={},d=0;while(l.length>d)n=i(r,t=l[d++]),void 0!==n&&c(u,t,n);return u}})},1480:function(e,t,n){"use strict";var r=n(46518),i=n(79039),o=n(10298).f,a=i(function(){return!Object.getOwnPropertyNames(1)});r({target:"Object",stat:!0,forced:a},{getOwnPropertyNames:o})},49773:function(e,t,n){"use strict";var r=n(46518),i=n(4495),o=n(79039),a=n(33717),s=n(48981),c=!i||o(function(){a.f(1)});r({target:"Object",stat:!0,forced:c},{getOwnPropertySymbols:function(e){var t=a.f;return t?t(s(e)):[]}})},40875:function(e,t,n){"use strict";var r=n(46518),i=n(79039),o=n(48981),a=n(42787),s=n(12211),c=i(function(){a(1)});r({target:"Object",stat:!0,forced:c,sham:!s},{getPrototypeOf:function(e){return a(o(e))}})},94052:function(e,t,n){"use strict";var r=n(46518),i=n(34124);r({target:"Object",stat:!0,forced:Object.isExtensible!==i},{isExtensible:i})},94003:function(e,t,n){"use strict";var r=n(46518),i=n(79039),o=n(20034),a=n(22195),s=n(15652),c=Object.isFrozen,l=s||i(function(){c(1)});r({target:"Object",stat:!0,forced:l},{isFrozen:function(e){return!o(e)||(!(!s||"ArrayBuffer"!==a(e))||!!c&&c(e))}})},221:function(e,t,n){"use strict";var r=n(46518),i=n(79039),o=n(20034),a=n(22195),s=n(15652),c=Object.isSealed,l=s||i(function(){c(1)});r({target:"Object",stat:!0,forced:l},{isSealed:function(e){return!o(e)||(!(!s||"ArrayBuffer"!==a(e))||!!c&&c(e))}})},29908:function(e,t,n){"use strict";var r=n(46518),i=n(3470);r({target:"Object",stat:!0},{is:i})},79432:function(e,t,n){"use strict";var r=n(46518),i=n(48981),o=n(71072),a=n(79039),s=a(function(){o(1)});r({target:"Object",stat:!0,forced:s},{keys:function(e){return o(i(e))}})},9220:function(e,t,n){"use strict";var r=n(46518),i=n(43724),o=n(42551),a=n(48981),s=n(56969),c=n(42787),l=n(77347).f;i&&r({target:"Object",proto:!0,forced:o},{__lookupGetter__:function(e){var t,n=a(this),r=s(e);do{if(t=l(n,r))return t.get}while(n=c(n))}})},7904:function(e,t,n){"use strict";var r=n(46518),i=n(43724),o=n(42551),a=n(48981),s=n(56969),c=n(42787),l=n(77347).f;i&&r({target:"Object",proto:!0,forced:o},{__lookupSetter__:function(e){var t,n=a(this),r=s(e);do{if(t=l(n,r))return t.set}while(n=c(n))}})},93967:function(e,t,n){"use strict";var r=n(46518),i=n(20034),o=n(3451).onFreeze,a=n(92744),s=n(79039),c=Object.preventExtensions,l=s(function(){c(1)});r({target:"Object",stat:!0,forced:l,sham:!a},{preventExtensions:function(e){return c&&i(e)?c(o(e)):e}})},93941:function(e,t,n){"use strict";var r=n(46518),i=n(20034),o=n(3451).onFreeze,a=n(92744),s=n(79039),c=Object.seal,l=s(function(){c(1)});r({target:"Object",stat:!0,forced:l,sham:!a},{seal:function(e){return c&&i(e)?c(o(e)):e}})},10287:function(e,t,n){"use strict";var r=n(46518),i=n(52967);r({target:"Object",stat:!0},{setPrototypeOf:i})},26099:function(e,t,n){"use strict";var r=n(92140),i=n(36840),o=n(53179);r||i(Object.prototype,"toString",o,{unsafe:!0})},16034:function(e,t,n){"use strict";var r=n(46518),i=n(32357).values;r({target:"Object",stat:!0},{values:function(e){return i(e)}})},16499:function(e,t,n){"use strict";var r=n(46518),i=n(69565),o=n(79306),a=n(36043),s=n(1103),c=n(72652),l=n(90537);r({target:"Promise",stat:!0,forced:l},{all:function(e){var t=this,n=a.f(t),r=n.resolve,l=n.reject,u=s(function(){var n=o(t.resolve),a=[],s=0,u=1;c(e,function(e){var o=s++,c=!1;u++,i(n,t,e).then(function(e){c||(c=!0,a[o]=e,--u||r(a))},l)}),--u||r(a)});return u.error&&l(u.value),n.promise}})},82003:function(e,t,n){"use strict";var r=n(46518),i=n(96395),o=n(10916).CONSTRUCTOR,a=n(80550),s=n(97751),c=n(94901),l=n(36840),u=a&&a.prototype;if(r({target:"Promise",proto:!0,forced:o,real:!0},{catch:function(e){return this.then(void 0,e)}}),!i&&c(a)){var d=s("Promise").prototype["catch"];u["catch"]!==d&&l(u,"catch",d,{unsafe:!0})}},10436:function(e,t,n){"use strict";var r,i,o,a,s=n(46518),c=n(96395),l=n(16193),u=n(44576),d=n(19167),h=n(69565),f=n(36840),p=n(52967),m=n(10687),v=n(87633),g=n(79306),y=n(94901),_=n(20034),b=n(90679),M=n(2293),A=n(59225).set,w=n(91955),x=n(90757),k=n(1103),L=n(18265),C=n(91181),S=n(80550),z=n(10916),T=n(36043),O="Promise",H=z.CONSTRUCTOR,D=z.REJECTION_EVENT,Y=z.SUBCLASSING,V=C.getterFor(O),P=C.set,E=S&&S.prototype,j=S,F=E,I=u.TypeError,$=u.document,R=u.process,N=T.f,W=N,B=!!($&&$.createEvent&&u.dispatchEvent),K="unhandledrejection",U="rejectionhandled",q=0,G=1,J=2,X=1,Z=2,Q=function(e){var t;return!(!_(e)||!y(t=e.then))&&t},ee=function(e,t){var n,r,i,o=t.value,a=t.state===G,s=a?e.ok:e.fail,c=e.resolve,l=e.reject,u=e.domain;try{s?(a||(t.rejection===Z&&oe(t),t.rejection=X),!0===s?n=o:(u&&u.enter(),n=s(o),u&&(u.exit(),i=!0)),n===e.promise?l(new I("Promise-chain cycle")):(r=Q(n))?h(r,n,c,l):c(n)):l(o)}catch(d){u&&!i&&u.exit(),l(d)}},te=function(e,t){e.notified||(e.notified=!0,w(function(){var n,r=e.reactions;while(n=r.get())ee(n,e);e.notified=!1,t&&!e.rejection&&re(e)}))},ne=function(e,t,n){var r,i;B?(r=$.createEvent("Event"),r.promise=t,r.reason=n,r.initEvent(e,!1,!0),u.dispatchEvent(r)):r={promise:t,reason:n},!D&&(i=u["on"+e])?i(r):e===K&&x("Unhandled promise rejection",n)},re=function(e){h(A,u,function(){var t,n=e.facade,r=e.value,i=ie(e);if(i&&(t=k(function(){l?R.emit("unhandledRejection",r,n):ne(K,n,r)}),e.rejection=l||ie(e)?Z:X,t.error))throw t.value})},ie=function(e){return e.rejection!==X&&!e.parent},oe=function(e){h(A,u,function(){var t=e.facade;l?R.emit("rejectionHandled",t):ne(U,t,e.value)})},ae=function(e,t,n){return function(r){e(t,r,n)}},se=function(e,t,n){e.done||(e.done=!0,n&&(e=n),e.value=t,e.state=J,te(e,!0))},ce=function(e,t,n){if(!e.done){e.done=!0,n&&(e=n);try{if(e.facade===t)throw new I("Promise can't be resolved itself");var r=Q(t);r?w(function(){var n={done:!1};try{h(r,t,ae(ce,n,e),ae(se,n,e))}catch(i){se(n,i,e)}}):(e.value=t,e.state=G,te(e,!1))}catch(i){se({done:!1},i,e)}}};if(H&&(j=function(e){b(this,F),g(e),h(r,this);var t=V(this);try{e(ae(ce,t),ae(se,t))}catch(n){se(t,n)}},F=j.prototype,r=function(e){P(this,{type:O,done:!1,notified:!1,parent:!1,reactions:new L,rejection:!1,state:q,value:null})},r.prototype=f(F,"then",function(e,t){var n=V(this),r=N(M(this,j));return n.parent=!0,r.ok=!y(e)||e,r.fail=y(t)&&t,r.domain=l?R.domain:void 0,n.state===q?n.reactions.add(r):w(function(){ee(r,n)}),r.promise}),i=function(){var e=new r,t=V(e);this.promise=e,this.resolve=ae(ce,t),this.reject=ae(se,t)},T.f=N=function(e){return e===j||e===o?new i(e):W(e)},!c&&y(S)&&E!==Object.prototype)){a=E.then,Y||f(E,"then",function(e,t){var n=this;return new j(function(e,t){h(a,n,e,t)}).then(e,t)},{unsafe:!0});try{delete E.constructor}catch(le){}p&&p(E,F)}s({global:!0,constructor:!0,wrap:!0,forced:H},{Promise:j}),o=d.Promise,m(j,O,!1,!0),v(O)},9391:function(e,t,n){"use strict";var r=n(46518),i=n(96395),o=n(80550),a=n(79039),s=n(97751),c=n(94901),l=n(2293),u=n(93438),d=n(36840),h=o&&o.prototype,f=!!o&&a(function(){h["finally"].call({then:function(){}},function(){})});if(r({target:"Promise",proto:!0,real:!0,forced:f},{finally:function(e){var t=l(this,s("Promise")),n=c(e);return this.then(n?function(n){return u(t,e()).then(function(){return n})}:e,n?function(n){return u(t,e()).then(function(){throw n})}:e)}}),!i&&c(o)){var p=s("Promise").prototype["finally"];h["finally"]!==p&&d(h,"finally",p,{unsafe:!0})}},3362:function(e,t,n){"use strict";n(10436),n(16499),n(82003),n(7743),n(51481),n(40280)},7743:function(e,t,n){"use strict";var r=n(46518),i=n(69565),o=n(79306),a=n(36043),s=n(1103),c=n(72652),l=n(90537);r({target:"Promise",stat:!0,forced:l},{race:function(e){var t=this,n=a.f(t),r=n.reject,l=s(function(){var a=o(t.resolve);c(e,function(e){i(a,t,e).then(n.resolve,r)})});return l.error&&r(l.value),n.promise}})},51481:function(e,t,n){"use strict";var r=n(46518),i=n(36043),o=n(10916).CONSTRUCTOR;r({target:"Promise",stat:!0,forced:o},{reject:function(e){var t=i.f(this),n=t.reject;return n(e),t.promise}})},40280:function(e,t,n){"use strict";var r=n(46518),i=n(97751),o=n(96395),a=n(80550),s=n(10916).CONSTRUCTOR,c=n(93438),l=i("Promise"),u=o&&!s;r({target:"Promise",stat:!0,forced:o||s},{resolve:function(e){return c(u&&this===l?a:this,e)}})},39796:function(e,t,n){"use strict";var r=n(46518),i=n(18745),o=n(79306),a=n(28551),s=n(79039),c=!s(function(){Reflect.apply(function(){})});r({target:"Reflect",stat:!0,forced:c},{apply:function(e,t,n){return i(o(e),t,a(n))}})},60825:function(e,t,n){"use strict";var r=n(46518),i=n(97751),o=n(18745),a=n(30566),s=n(35548),c=n(28551),l=n(20034),u=n(2360),d=n(79039),h=i("Reflect","construct"),f=Object.prototype,p=[].push,m=d(function(){function e(){}return!(h(function(){},[],e)instanceof e)}),v=!d(function(){h(function(){})}),g=m||v;r({target:"Reflect",stat:!0,forced:g,sham:g},{construct:function(e,t){s(e);var n=arguments.length<3?e:s(arguments[2]);if(c(t),v&&!m)return h(e,t,n);if(e===n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var r=[null];return o(p,r,t),new(o(a,e,r))}var i=n.prototype,d=u(l(i)?i:f),g=o(e,d,t);return l(g)?g:d}})},87411:function(e,t,n){"use strict";var r=n(46518),i=n(43724),o=n(28551),a=n(56969),s=n(24913),c=n(94901),l=n(79039),u=TypeError,d=l(function(){Reflect.defineProperty(s.f({},1,{value:1}),1,{value:2})});r({target:"Reflect",stat:!0,forced:d,sham:!i},{defineProperty:function(e,t,n){o(e);var r,i,l=a(t);if(o(n),("get"in n||"set"in n)&&("get"in n&&!c(r=n.get)&&void 0!==r||"set"in n&&!c(i=n.set)&&void 0!==i||"value"in n||"writable"in n))throw new u("Invalid property descriptor");try{return s.f(e,l,n),!0}catch(d){return!1}}})},21211:function(e,t,n){"use strict";var r=n(46518),i=n(28551),o=n(77347).f,a=n(56969);r({target:"Reflect",stat:!0},{deleteProperty:function(e,t){i(e);var n=a(t),r=o(e,n);return!(r&&!r.configurable)&&delete e[n]}})},9065:function(e,t,n){"use strict";var r=n(46518),i=n(43724),o=n(28551),a=n(77347);r({target:"Reflect",stat:!0,sham:!i},{getOwnPropertyDescriptor:function(e,t){return a.f(o(e),t)}})},86565:function(e,t,n){"use strict";var r=n(46518),i=n(28551),o=n(42787),a=n(12211);r({target:"Reflect",stat:!0,sham:!a},{getPrototypeOf:function(e){return o(i(e))}})},40888:function(e,t,n){"use strict";var r=n(46518),i=n(69565),o=n(20034),a=n(28551),s=n(16575),c=n(77347),l=n(42787),u=n(56969),d=function(e,t,n){if(a(e)===n)return e[t];var r=c.f(e,t);if(r)return s(r)?r.value:void 0===r.get?void 0:i(r.get,n);var u=l(e);return o(u)?d(u,t,n):void 0};r({target:"Reflect",stat:!0},{get:function(e,t){return d(a(e),u(t),arguments.length<3?e:arguments[2])}})},32812:function(e,t,n){"use strict";var r=n(46518);r({target:"Reflect",stat:!0},{has:function(e,t){return t in e}})},84634:function(e,t,n){"use strict";var r=n(46518),i=n(28551),o=n(34124);r({target:"Reflect",stat:!0},{isExtensible:function(e){return i(e),o(e)}})},71137:function(e,t,n){"use strict";var r=n(46518),i=n(35031);r({target:"Reflect",stat:!0},{ownKeys:i})},30985:function(e,t,n){"use strict";var r=n(46518),i=n(97751),o=n(28551),a=n(92744);r({target:"Reflect",stat:!0,sham:!a},{preventExtensions:function(e){o(e);try{var t=i("Object","preventExtensions");return t&&t(e),!0}catch(n){return!1}}})},34873:function(e,t,n){"use strict";var r=n(46518),i=n(28551),o=n(73506),a=n(52967);a&&r({target:"Reflect",stat:!0},{setPrototypeOf:function(e,t){i(e),o(t);try{return a(e,t),!0}catch(n){return!1}}})},34268:function(e,t,n){"use strict";var r=n(46518),i=n(69565),o=n(28551),a=n(20034),s=n(16575),c=n(79039),l=n(24913),u=n(77347),d=n(42787),h=n(6980),f=n(56969),p=function(e,t,n,r){var c,f,m,v=u.f(o(e),t);if(!v){if(a(f=d(e)))return p(f,t,n,r);v=h(0)}if(s(v)){if(!1===v.writable||!a(r))return!1;if(c=u.f(r,t)){if(!s(c)||!1===c.writable)return!1;l.f(r,t,{value:n})}else try{l.f(r,t,h(0,n))}catch(g){return!1}}else{if(m=v.set,void 0===m)return!1;i(m,r,n)}return!0},m=c(function(){var e=function(){},t=l.f(new e,"a",{configurable:!0});return!1!==Reflect.set(e.prototype,"a",1,t)});r({target:"Reflect",stat:!0,forced:m},{set:function(e,t,n){return p(o(e),f(t),n,arguments.length<4?e:arguments[3])}})},84864:function(e,t,n){"use strict";var r=n(43724),i=n(44576),o=n(79504),a=n(92796),s=n(23167),c=n(66699),l=n(2360),u=n(38480).f,d=n(1625),h=n(60788),f=n(655),p=n(61034),m=n(58429),v=n(11056),g=n(36840),y=n(79039),_=n(39297),b=n(91181).enforce,M=n(87633),A=n(78227),w=n(83635),x=n(18814),k=A("match"),L=i.RegExp,C=L.prototype,S=i.SyntaxError,z=o(C.exec),T=o("".charAt),O=o("".replace),H=o("".indexOf),D=o("".slice),Y=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,V=/a/g,P=/a/g,E=new L(V)!==V,j=m.MISSED_STICKY,F=m.UNSUPPORTED_Y,I=r&&(!E||j||w||x||y(function(){return P[k]=!1,L(V)!==V||L(P)===P||"/a/i"!==String(L(V,"i"))})),$=function(e){for(var t,n=e.length,r=0,i="",o=!1;r"===t&&c:if(""===d||_(a,d))throw new S("Invalid capture group name");a[d]=!0,o[o.length]=[d,u],c=!1,d="";continue}c?d+=t:i+=t}for(var h=0;h",p="\\"+o[h][1];while(H(i,f)>-1)i=O(i,f,p)}return[i,o]};if(a("RegExp",I)){for(var N=function(e,t){var n,r,i,o,a,l,u=d(C,this),m=h(e),v=void 0===t,g=[],y=e;if(!u&&m&&v&&e.constructor===N)return e;if((m||d(C,e))&&(e=e.source,v&&(t=p(y))),e=void 0===e?"":f(e),t=void 0===t?"":f(t),y=e,w&&"dotAll"in V&&(r=!!t&&H(t,"s")>-1,r&&(t=O(t,/s/g,""))),n=t,j&&"sticky"in V&&(i=!!t&&H(t,"y")>-1,i&&F&&(t=O(t,/y/g,""))),x&&(o=R(e),e=o[0],g=o[1]),a=s(L(e,t),u?this:C,N),(r||i||g.length)&&(l=b(a),r&&(l.dotAll=!0,l.raw=N($(e),n)),i&&(l.sticky=!0),g.length&&(l.groups=g)),e!==y)try{c(a,"source",""===y?"(?:)":y)}catch(_){}return a},W=u(L),B=0;W.length>B;)v(N,L,W[B++]);C.constructor=N,N.prototype=C,g(i,"RegExp",N,{constructor:!0})}M("RegExp")},27495:function(e,t,n){"use strict";var r=n(46518),i=n(57323);r({target:"RegExp",proto:!0,forced:/./.exec!==i},{exec:i})},69479:function(e,t,n){"use strict";var r=n(43724),i=n(62106),o=n(65213),a=n(67979);r&&!o.correct&&(i(RegExp.prototype,"flags",{configurable:!0,get:a}),o.correct=!0)},38781:function(e,t,n){"use strict";var r=n(10350).PROPER,i=n(36840),o=n(28551),a=n(655),s=n(79039),c=n(61034),l="toString",u=RegExp.prototype,d=u[l],h=s(function(){return"/a/b"!==d.call({source:"a",flags:"b"})}),f=r&&d.name!==l;(h||f)&&i(u,l,function(){var e=o(this),t=a(e.source),n=a(c(e));return"/"+t+"/"+n},{unsafe:!0})},92405:function(e,t,n){"use strict";var r=n(16468),i=n(86938);r("Set",function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}},i)},31415:function(e,t,n){"use strict";n(92405)},89907:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("anchor")},{anchor:function(e){return i(this,"a","name",e)}})},11898:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("big")},{big:function(){return i(this,"big","","")}})},35490:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("blink")},{blink:function(){return i(this,"blink","","")}})},5745:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("bold")},{bold:function(){return i(this,"b","","")}})},23860:function(e,t,n){"use strict";var r=n(46518),i=n(68183).codeAt;r({target:"String",proto:!0},{codePointAt:function(e){return i(this,e)}})},99449:function(e,t,n){"use strict";var r=n(46518),i=n(27476),o=n(77347).f,a=n(18014),s=n(655),c=n(60511),l=n(67750),u=n(41436),d=n(96395),h=i("".slice),f=Math.min,p=u("endsWith"),m=!d&&!p&&!!function(){var e=o(String.prototype,"endsWith");return e&&!e.writable}();r({target:"String",proto:!0,forced:!m&&!p},{endsWith:function(e){var t=s(l(this));c(e);var n=s(e),r=arguments.length>1?arguments[1]:void 0,i=t.length,o=void 0===r?i:f(a(r),i);return h(t,o-n.length,o)===n}})},94298:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("fixed")},{fixed:function(){return i(this,"tt","","")}})},60268:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("fontcolor")},{fontcolor:function(e){return i(this,"font","color",e)}})},69546:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("fontsize")},{fontsize:function(e){return i(this,"font","size",e)}})},27337:function(e,t,n){"use strict";var r=n(46518),i=n(79504),o=n(35610),a=RangeError,s=String.fromCharCode,c=String.fromCodePoint,l=i([].join),u=!!c&&1!==c.length;r({target:"String",stat:!0,arity:1,forced:u},{fromCodePoint:function(e){var t,n=[],r=arguments.length,i=0;while(r>i){if(t=+arguments[i],o(t,1114111)!==t)throw new a(t+" is not a valid code point");n[i++]=t<65536?s(t):s(55296+((t-=65536)>>10),t%1024+56320)}return l(n,"")}})},21699:function(e,t,n){"use strict";var r=n(46518),i=n(79504),o=n(60511),a=n(67750),s=n(655),c=n(41436),l=i("".indexOf);r({target:"String",proto:!0,forced:!c("includes")},{includes:function(e){return!!~l(s(a(this)),s(o(e)),arguments.length>1?arguments[1]:void 0)}})},20781:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("italics")},{italics:function(){return i(this,"i","","")}})},47764:function(e,t,n){"use strict";var r=n(68183).charAt,i=n(655),o=n(91181),a=n(51088),s=n(62529),c="String Iterator",l=o.set,u=o.getterFor(c);a(String,"String",function(e){l(this,{type:c,string:i(e),index:0})},function(){var e,t=u(this),n=t.string,i=t.index;return i>=n.length?s(void 0,!0):(e=r(n,i),t.index+=e.length,s(e,!1))})},50778:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("link")},{link:function(e){return i(this,"a","href",e)}})},71761:function(e,t,n){"use strict";var r=n(69565),i=n(79504),o=n(89228),a=n(28551),s=n(20034),c=n(18014),l=n(655),u=n(67750),d=n(55966),h=n(57829),f=n(61034),p=n(56682),m=i("".indexOf);o("match",function(e,t,n){return[function(t){var n=u(this),i=s(t)?d(t,e):void 0;return i?r(i,t,n):new RegExp(t)[e](l(n))},function(e){var r=a(this),i=l(e),o=n(t,r,i);if(o.done)return o.value;var s=l(f(r));if(!~m(s,"g"))return p(r,i);var u=!!~m(s,"u")||!!~m(s,"v");r.lastIndex=0;var d,v=[],g=0;while(null!==(d=p(r,i))){var y=l(d[0]);v[g]=y,""===y&&(r.lastIndex=h(i,c(r.lastIndex),u)),g++}return 0===g?null:v}]})},35701:function(e,t,n){"use strict";var r=n(46518),i=n(60533).end,o=n(83063);r({target:"String",proto:!0,forced:o},{padEnd:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}})},68156:function(e,t,n){"use strict";var r=n(46518),i=n(60533).start,o=n(83063);r({target:"String",proto:!0,forced:o},{padStart:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}})},85906:function(e,t,n){"use strict";var r=n(46518),i=n(79504),o=n(25397),a=n(48981),s=n(655),c=n(26198),l=i([].push),u=i([].join);r({target:"String",stat:!0},{raw:function(e){var t=o(a(e).raw),n=c(t);if(!n)return"";var r=arguments.length,i=[],d=0;while(1){if(l(i,s(t[d++])),d===n)return u(i,"");d")});a("replace",function(e,t,n){var o=T?"$":"$0";return[function(e,n){var r=p(this),o=u(e)?v(e,M):void 0;return o?i(o,e,r,n):i(t,f(r),e,n)},function(e,i){var a=c(this),s=f(e),u=l(i);u||(i=f(i));var p=f(y(a));if("string"==typeof i&&!~L(i,o)&&!~L(i,"$<")&&!~L(p,"y")){var v=n(t,a,s,i);if(v.done)return v.value}var b,M=!!~L(p,"g");M&&(b=!!~L(p,"u")||!!~L(p,"v"),a.lastIndex=0);var z,T=[];while(1){if(z=_(a,s),null===z)break;if(k(T,z),!M)break;var O=f(z[0]);""===O&&(a.lastIndex=m(s,h(a.lastIndex),b))}for(var H="",D=0,Y=0;Y=D&&(H+=C(s,D,E)+V,D=E+P.length)}return H+C(s,D)}]},!O||!z||T)},5746:function(e,t,n){"use strict";var r=n(69565),i=n(89228),o=n(28551),a=n(20034),s=n(67750),c=n(3470),l=n(655),u=n(55966),d=n(56682);i("search",function(e,t,n){return[function(t){var n=s(this),i=a(t)?u(t,e):void 0;return i?r(i,t,n):new RegExp(t)[e](l(n))},function(e){var r=o(this),i=l(e),a=n(t,r,i);if(a.done)return a.value;var s=r.lastIndex;c(s,0)||(r.lastIndex=0);var u=d(r,i);return c(r.lastIndex,s)||(r.lastIndex=s),null===u?-1:u.index}]})},89195:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("small")},{small:function(){return i(this,"small","","")}})},90744:function(e,t,n){"use strict";var r=n(69565),i=n(79504),o=n(89228),a=n(28551),s=n(20034),c=n(67750),l=n(2293),u=n(57829),d=n(18014),h=n(655),f=n(55966),p=n(61034),m=n(56682),v=n(58429),g=n(79039),y=v.UNSUPPORTED_Y,_=4294967295,b=Math.min,M=i([].push),A=i("".slice),w=i("".indexOf),x=!g(function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var n="ab".split(e);return 2!==n.length||"a"!==n[0]||"b"!==n[1]}),k="c"==="abbc".split(/(b)*/)[1]||4!=="test".split(/(?:)/,-1).length||2!=="ab".split(/(?:ab)*/).length||4!==".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length;o("split",function(e,t,n){var i="0".split(void 0,0).length?function(e,n){return void 0===e&&0===n?[]:r(t,this,e,n)}:t;return[function(t,n){var o=c(this),a=s(t)?f(t,e):void 0;return a?r(a,t,o,n):r(i,h(o),t,n)},function(e,r){var o=a(this),s=h(e);if(!k){var c=n(i,o,s,r,i!==t);if(c.done)return c.value}var f=l(o,RegExp),v=h(p(o)),g=!!~w(v,"u")||!!~w(v,"v");y?~w(v,"g")||(v+="g"):~w(v,"y")||(v+="y");var x=new f(y?"^(?:"+o.source+")":o,v),L=void 0===r?_:r>>>0;if(0===L)return[];if(0===s.length)return null===m(x,s)?[s]:[];var C=0,S=0,z=[];while(S1?arguments[1]:void 0,t.length));return h(t,r,r+n.length)===n}})},46276:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("strike")},{strike:function(){return i(this,"strike","","")}})},48718:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("sub")},{sub:function(){return i(this,"sub","","")}})},16308:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("sup")},{sup:function(){return i(this,"sup","","")}})},39202:function(e,t,n){"use strict";n(33313);var r=n(46518),i=n(18866);r({target:"String",proto:!0,name:"trimEnd",forced:"".trimEnd!==i},{trimEnd:i})},58934:function(e,t,n){"use strict";var r=n(46518),i=n(53487);r({target:"String",proto:!0,name:"trimStart",forced:"".trimLeft!==i},{trimLeft:i})},33313:function(e,t,n){"use strict";var r=n(46518),i=n(18866);r({target:"String",proto:!0,name:"trimEnd",forced:"".trimRight!==i},{trimRight:i})},43359:function(e,t,n){"use strict";n(58934);var r=n(46518),i=n(53487);r({target:"String",proto:!0,name:"trimStart",forced:"".trimStart!==i},{trimStart:i})},42762:function(e,t,n){"use strict";var r=n(46518),i=n(43802).trim,o=n(60706);r({target:"String",proto:!0,forced:o("trim")},{trim:function(){return i(this)}})},66412:function(e,t,n){"use strict";var r=n(70511);r("asyncIterator")},6761:function(e,t,n){"use strict";var r=n(46518),i=n(44576),o=n(69565),a=n(79504),s=n(96395),c=n(43724),l=n(4495),u=n(79039),d=n(39297),h=n(1625),f=n(28551),p=n(25397),m=n(56969),v=n(655),g=n(6980),y=n(2360),_=n(71072),b=n(38480),M=n(10298),A=n(33717),w=n(77347),x=n(24913),k=n(96801),L=n(48773),C=n(36840),S=n(62106),z=n(25745),T=n(66119),O=n(30421),H=n(33392),D=n(78227),Y=n(1951),V=n(70511),P=n(58242),E=n(10687),j=n(91181),F=n(59213).forEach,I=T("hidden"),$="Symbol",R="prototype",N=j.set,W=j.getterFor($),B=Object[R],K=i.Symbol,U=K&&K[R],q=i.RangeError,G=i.TypeError,J=i.QObject,X=w.f,Z=x.f,Q=M.f,ee=L.f,te=a([].push),ne=z("symbols"),re=z("op-symbols"),ie=z("wks"),oe=!J||!J[R]||!J[R].findChild,ae=function(e,t,n){var r=X(B,t);return r&&delete B[t],Z(e,t,n),r&&e!==B&&Z(B,t,r),e},se=c&&u(function(){return 7!==y(Z({},"a",{get:function(){return Z(this,"a",{value:7}).a}})).a})?ae:Z,ce=function(e,t){var n=ne[e]=y(U);return N(n,{type:$,tag:e,description:t}),c||(n.description=t),n},le=function(e,t,n){e===B&&le(re,t,n),f(e);var r=m(t);return f(n),d(ne,r)?(("enumerable"in n?!n.enumerable:!d(e,r)||d(e,I)&&e[I][r])?(d(e,I)||Z(e,I,g(1,y(null))),e[I][r]=!0):(d(e,I)&&e[I][r]&&(e[I][r]=!1),n=y(n,{enumerable:g(0,!1)})),se(e,r,n)):Z(e,r,n)},ue=function(e,t){f(e);var n=p(t),r=_(n).concat(me(n));return F(r,function(t){c&&!o(he,n,t)||le(e,t,n[t])}),e},de=function(e,t){return void 0===t?y(e):ue(y(e),t)},he=function(e){var t=m(e),n=o(ee,this,t);return!(this===B&&d(ne,t)&&!d(re,t))&&(!(n||!d(this,t)||!d(ne,t)||d(this,I)&&this[I][t])||n)},fe=function(e,t){var n=p(e),r=m(t);if(n!==B||!d(ne,r)||d(re,r)){var i=X(n,r);return!i||!d(ne,r)||d(n,I)&&n[I][r]||(i.enumerable=!0),i}},pe=function(e){var t=Q(p(e)),n=[];return F(t,function(e){d(ne,e)||d(O,e)||te(n,e)}),n},me=function(e){var t=e===B,n=Q(t?re:p(e)),r=[];return F(n,function(e){!d(ne,e)||t&&!d(B,e)||te(r,ne[e])}),r};l||(K=function(){if(h(U,this))throw new G("Symbol is not a constructor");var e=arguments.length&&void 0!==arguments[0]?v(arguments[0]):void 0,t=H(e),n=function(e){var r=void 0===this?i:this;r===B&&o(n,re,e),d(r,I)&&d(r[I],t)&&(r[I][t]=!1);var a=g(1,e);try{se(r,t,a)}catch(s){if(!(s instanceof q))throw s;ae(r,t,a)}};return c&&oe&&se(B,t,{configurable:!0,set:n}),ce(t,e)},U=K[R],C(U,"toString",function(){return W(this).tag}),C(K,"withoutSetter",function(e){return ce(H(e),e)}),L.f=he,x.f=le,k.f=ue,w.f=fe,b.f=M.f=pe,A.f=me,Y.f=function(e){return ce(D(e),e)},c&&(S(U,"description",{configurable:!0,get:function(){return W(this).description}}),s||C(B,"propertyIsEnumerable",he,{unsafe:!0}))),r({global:!0,constructor:!0,wrap:!0,forced:!l,sham:!l},{Symbol:K}),F(_(ie),function(e){V(e)}),r({target:$,stat:!0,forced:!l},{useSetter:function(){oe=!0},useSimple:function(){oe=!1}}),r({target:"Object",stat:!0,forced:!l,sham:!c},{create:de,defineProperty:le,defineProperties:ue,getOwnPropertyDescriptor:fe}),r({target:"Object",stat:!0,forced:!l},{getOwnPropertyNames:pe}),P(),E(K,$),O[I]=!0},89463:function(e,t,n){"use strict";var r=n(46518),i=n(43724),o=n(44576),a=n(69565),s=n(79504),c=n(39297),l=n(94901),u=n(1625),d=n(655),h=n(62106),f=n(77740),p=o.Symbol,m=p&&p.prototype;if(i&&l(p)&&(!("description"in m)||void 0!==p().description)){var v={},g=function(){var e=arguments.length<1||void 0===arguments[0]?void 0:d(arguments[0]),t=u(m,this)?new p(e):void 0===e?p():p(e);return""===e&&(v[t]=!0),t};f(g,p);var y=g["for"];g["for"]={for:function(e){var t=d(e),n=a(y,this,t);return""===t&&(v[n]=!0),n}}["for"],g.prototype=m,m.constructor=g;var _="Symbol(description detection)"===String(p("description detection")),b=s(m.valueOf),M=s(m.toString),A=/^Symbol\((.*)\)[^)]+$/,w=s("".replace),x=s("".slice);h(m,"description",{configurable:!0,get:function(){var e=b(this);if(c(v,e))return"";var t=M(e),n=_?x(t,7,-1):w(t,A,"$1");return""===n?void 0:n}}),r({global:!0,constructor:!0,forced:!0},{Symbol:g})}},81510:function(e,t,n){"use strict";var r=n(46518),i=n(97751),o=n(39297),a=n(655),s=n(25745),c=n(91296),l=s("string-to-symbol-registry"),u=s("symbol-to-string-registry");r({target:"Symbol",stat:!0,forced:!c},{for:function(e){var t=a(e);if(o(l,t))return l[t];var n=i("Symbol")(t);return l[t]=n,u[n]=t,n}})},60193:function(e,t,n){"use strict";var r=n(70511);r("hasInstance")},92168:function(e,t,n){"use strict";var r=n(70511);r("isConcatSpreadable")},2259:function(e,t,n){"use strict";var r=n(70511);r("iterator")},52675:function(e,t,n){"use strict";n(6761),n(81510),n(97812),n(33110),n(49773)},97812:function(e,t,n){"use strict";var r=n(46518),i=n(39297),o=n(10757),a=n(16823),s=n(25745),c=n(91296),l=s("symbol-to-string-registry");r({target:"Symbol",stat:!0,forced:!c},{keyFor:function(e){if(!o(e))throw new TypeError(a(e)+" is not a symbol");if(i(l,e))return l[e]}})},86964:function(e,t,n){"use strict";var r=n(70511);r("match")},83237:function(e,t,n){"use strict";var r=n(70511);r("replace")},61833:function(e,t,n){"use strict";var r=n(70511);r("search")},67947:function(e,t,n){"use strict";var r=n(70511);r("species")},31073:function(e,t,n){"use strict";var r=n(70511);r("split")},45700:function(e,t,n){"use strict";var r=n(70511),i=n(58242);r("toPrimitive"),i()},78125:function(e,t,n){"use strict";var r=n(97751),i=n(70511),o=n(10687);i("toStringTag"),o(r("Symbol"),"Symbol")},20326:function(e,t,n){"use strict";var r=n(70511);r("unscopables")},81630:function(e,t,n){"use strict";var r=n(79504),i=n(94644),o=n(57029),a=r(o),s=i.aTypedArray,c=i.exportTypedArrayMethod;c("copyWithin",function(e,t){return a(s(this),e,t,arguments.length>2?arguments[2]:void 0)})},72170:function(e,t,n){"use strict";var r=n(94644),i=n(59213).every,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("every",function(e){return i(o(this),e,arguments.length>1?arguments[1]:void 0)})},75044:function(e,t,n){"use strict";var r=n(94644),i=n(84373),o=n(75854),a=n(36955),s=n(69565),c=n(79504),l=n(79039),u=r.aTypedArray,d=r.exportTypedArrayMethod,h=c("".slice),f=l(function(){var e=0;return new Int8Array(2).fill({valueOf:function(){return e++}}),1!==e});d("fill",function(e){var t=arguments.length;u(this);var n="Big"===h(a(this),0,3)?o(e):+e;return s(i,this,n,t>1?arguments[1]:void 0,t>2?arguments[2]:void 0)},f)},69539:function(e,t,n){"use strict";var r=n(94644),i=n(59213).filter,o=n(29948),a=r.aTypedArray,s=r.exportTypedArrayMethod;s("filter",function(e){var t=i(a(this),e,arguments.length>1?arguments[1]:void 0);return o(this,t)})},89955:function(e,t,n){"use strict";var r=n(94644),i=n(59213).findIndex,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("findIndex",function(e){return i(o(this),e,arguments.length>1?arguments[1]:void 0)})},31694:function(e,t,n){"use strict";var r=n(94644),i=n(59213).find,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("find",function(e){return i(o(this),e,arguments.length>1?arguments[1]:void 0)})},34594:function(e,t,n){"use strict";var r=n(15823);r("Float32",function(e){return function(t,n,r){return e(this,t,n,r)}})},29833:function(e,t,n){"use strict";var r=n(15823);r("Float64",function(e){return function(t,n,r){return e(this,t,n,r)}})},33206:function(e,t,n){"use strict";var r=n(94644),i=n(59213).forEach,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("forEach",function(e){i(o(this),e,arguments.length>1?arguments[1]:void 0)})},48345:function(e,t,n){"use strict";var r=n(72805),i=n(94644).exportTypedArrayStaticMethod,o=n(43251);i("from",o,r)},44496:function(e,t,n){"use strict";var r=n(94644),i=n(19617).includes,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("includes",function(e){return i(o(this),e,arguments.length>1?arguments[1]:void 0)})},66651:function(e,t,n){"use strict";var r=n(94644),i=n(19617).indexOf,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("indexOf",function(e){return i(o(this),e,arguments.length>1?arguments[1]:void 0)})},72107:function(e,t,n){"use strict";var r=n(15823);r("Int16",function(e){return function(t,n,r){return e(this,t,n,r)}})},95477:function(e,t,n){"use strict";var r=n(15823);r("Int32",function(e){return function(t,n,r){return e(this,t,n,r)}})},46594:function(e,t,n){"use strict";var r=n(15823);r("Int8",function(e){return function(t,n,r){return e(this,t,n,r)}})},12887:function(e,t,n){"use strict";var r=n(44576),i=n(79039),o=n(79504),a=n(94644),s=n(23792),c=n(78227),l=c("iterator"),u=r.Uint8Array,d=o(s.values),h=o(s.keys),f=o(s.entries),p=a.aTypedArray,m=a.exportTypedArrayMethod,v=u&&u.prototype,g=!i(function(){v[l].call([1])}),y=!!v&&v.values&&v[l]===v.values&&"values"===v.values.name,_=function(){return d(p(this))};m("entries",function(){return f(p(this))},g),m("keys",function(){return h(p(this))},g),m("values",_,g||!y,{name:"values"}),m(l,_,g||!y,{name:"values"})},19369:function(e,t,n){"use strict";var r=n(94644),i=n(79504),o=r.aTypedArray,a=r.exportTypedArrayMethod,s=i([].join);a("join",function(e){return s(o(this),e)})},66812:function(e,t,n){"use strict";var r=n(94644),i=n(18745),o=n(8379),a=r.aTypedArray,s=r.exportTypedArrayMethod;s("lastIndexOf",function(e){var t=arguments.length;return i(o,a(this),t>1?[e,arguments[1]]:[e])})},8995:function(e,t,n){"use strict";var r=n(94644),i=n(59213).map,o=n(29948),a=r.aTypedArray,s=r.exportTypedArrayMethod;s("map",function(e){var t=i(a(this),e,arguments.length>1?arguments[1]:void 0);return o(this,t)})},52568:function(e,t,n){"use strict";var r=n(94644),i=n(72805),o=r.aTypedArrayConstructor,a=r.exportTypedArrayStaticMethod;a("of",function(){var e=0,t=arguments.length,n=new(o(this))(t);while(t>e)n[e]=arguments[e++];return n},i)},36072:function(e,t,n){"use strict";var r=n(94644),i=n(80926).right,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("reduceRight",function(e){var t=arguments.length;return i(o(this),e,t,t>1?arguments[1]:void 0)})},31575:function(e,t,n){"use strict";var r=n(94644),i=n(80926).left,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("reduce",function(e){var t=arguments.length;return i(o(this),e,t,t>1?arguments[1]:void 0)})},88747:function(e,t,n){"use strict";var r=n(94644),i=r.aTypedArray,o=r.exportTypedArrayMethod,a=Math.floor;o("reverse",function(){var e,t=this,n=i(t).length,r=a(n/2),o=0;while(o1?arguments[1]:void 0,1),n=c(e);if(v)return i(f,this,n,t);var r=this.length,o=a(n),l=0;if(o+t>r)throw new u("Wrong length");while(li)l[i]=n[i++];return l},l)},57301:function(e,t,n){"use strict";var r=n(94644),i=n(59213).some,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("some",function(e){return i(o(this),e,arguments.length>1?arguments[1]:void 0)})},373:function(e,t,n){"use strict";var r=n(44576),i=n(27476),o=n(79039),a=n(79306),s=n(74488),c=n(94644),l=n(13709),u=n(13763),d=n(39519),h=n(3607),f=c.aTypedArray,p=c.exportTypedArrayMethod,m=r.Uint16Array,v=m&&i(m.prototype.sort),g=!!v&&!(o(function(){v(new m(2),null)})&&o(function(){v(new m(2),{})})),y=!!v&&!o(function(){if(d)return d<74;if(l)return l<67;if(u)return!0;if(h)return h<602;var e,t,n=new m(516),r=Array(516);for(e=0;e<516;e++)t=e%4,n[e]=515-e,r[e]=e-2*t+3;for(v(n,function(e,t){return(e/4|0)-(t/4|0)}),e=0;e<516;e++)if(n[e]!==r[e])return!0}),_=function(e){return function(t,n){return void 0!==e?+e(t,n)||0:n!==n?t!==t?0:-1:t!==t?1:0===t&&0===n?1/t>0?1/n>0?0:1:1/n>0?-1:0:t>n?1:t0&&0!==(e&n);n>>=1)t++;return t},le=function(e){var t=null,n=e.length;switch(n){case 1:t=e[0];break;case 2:t=(31&e[0])<<6|63&e[1];break;case 3:t=(15&e[0])<<12|(63&e[1])<<6|63&e[2];break;case 4:t=(7&e[0])<<18|(63&e[1])<<12|(63&e[2])<<6|63&e[3];break}return null===t||t>1114111||t>=55296&&t<=57343||t<(n>3?65536:n>2?2048:n>1?128:0)?null:t},ue=function(e){e=Z(e,ie," ");var t=e.length,n="",r=0;while(rt){n+="%",r++;continue}var o=se(e,r+1);if(o!==o){n+=i,r++;continue}r+=2;var a=ce(o);if(0===a)i=K(o);else{if(1===a||a>4){n+=oe,r++;continue}var s=[o],c=1;while(ct||"%"!==G(e,r))break;var l=se(e,r+1);if(l!==l||l>191||l<128)break;if(1===c){if(224===o&&l<160)break;if(237===o&&l>159)break;if(240===o&&l<144)break;if(244===o&&l>143)break}X(s,l),r+=2,c++}if(s.length!==a){n+=oe;continue}var u=le(s);if(null===u){for(var d=0;d=t.length)return e.target=null,z(void 0,!0);var r=t[n];switch(e.kind){case"keys":return z(r.key,!1);case"values":return z(r.value,!1)}return z([r.key,r.value],!1)},!0),ve=function(e){this.entries=[],this.url=null,void 0!==e&&(w(e)?this.parseObject(e):this.parseQuery("string"==typeof e?"?"===G(e,0)?ne(e,1):e:x(e)))};ve.prototype={type:Y,bindURL:function(e){this.url=e,this.update()},parseObject:function(e){var t,n,r,i,o,a,c,l=this.entries,u=S(e);if(u){t=C(e,u),n=t.next;while(!(r=s(n,t)).done){if(i=C(A(r.value)),o=i.next,(a=s(o,i)).done||(c=s(o,i)).done||!s(o,i).done)throw new W("Expected sequence with length 2");X(l,{key:x(a.value),value:x(c.value)})}}else for(var d in e)_(e,d)&&X(l,{key:d,value:x(e[d])})},parseQuery:function(e){if(e){var t,n,r=this.entries,i=te(e,"&"),o=0;while(o0?arguments[0]:void 0,t=P(this,new ve(e));l||(this.size=t.entries.length)},ye=ge.prototype;if(f(ye,{append:function(e,t){var n=E(this);T(arguments.length,2),X(n.entries,{key:x(e),value:x(t)}),l||this.size++,n.updateURL()},delete:function(e){var t=E(this),n=T(arguments.length,1),r=t.entries,i=x(e),o=n<2?void 0:arguments[1],a=void 0===o?o:x(o),s=0;while(st.key?1:-1}),e.updateURL()},forEach:function(e){var t,n=E(this).entries,r=b(e,arguments.length>1?arguments[1]:void 0),i=0;while(i1?Me(arguments[1]):{})}}),y(I)){var Ae=function(e){return g(this,R),new I(e,arguments.length>1?Me(arguments[1]):{})};R.constructor=Ae,Ae.prototype=R,r({global:!0,constructor:!0,dontCallGetSet:!0,forced:!0},{Request:Ae})}}e.exports={URLSearchParams:ge,getState:E}},48408:function(e,t,n){"use strict";n(98406)},45806:function(e,t,n){"use strict";n(47764);var r,i=n(46518),o=n(43724),a=n(67416),s=n(44576),c=n(76080),l=n(79504),u=n(36840),d=n(62106),h=n(90679),f=n(39297),p=n(44213),m=n(97916),v=n(67680),g=n(68183).codeAt,y=n(3717),_=n(655),b=n(10687),M=n(22812),A=n(98406),w=n(91181),x=w.set,k=w.getterFor("URL"),L=A.URLSearchParams,C=A.getState,S=s.URL,z=s.TypeError,T=s.encodeURIComponent,O=s.parseInt,H=Math.floor,D=Math.pow,Y=l("".charAt),V=l(/./.exec),P=l([].join),E=l(1.1.toString),j=l([].pop),F=l([].push),I=l("".replace),$=l([].shift),R=l("".split),N=l("".slice),W=l("".toLowerCase),B=l([].unshift),K="Invalid authority",U="Invalid scheme",q="Invalid host",G="Invalid port",J=/[a-z]/i,X=/[\d+\-.a-z]/i,Z=/\d/,Q=/^0x/i,ee=/^[0-7]+$/,te=/^\d+$/,ne=/^[\da-f]+$/i,re=/[\0\t\n\r #%/:<>?@[\\\]^|]/,ie=/[\0\t\n\r #/:<>?@[\\\]^|]/,oe=/^[\u0000-\u0020]+/,ae=/(^|[^\u0000-\u0020])[\u0000-\u0020]+$/,se=/[\t\n\r]/g,ce=function(e){var t,n,r=R(e,".");if(""===r[r.length-1]){if(1===r.length)return!1;r.length--}return t=r[r.length-1],!!V(te,t)||!!V(Q,t)&&(n=N(t,2),""===n||!!V(ne,n))},le=function(e){var t,n,r,i,o,a,s,c=R(e,".");if(c.length&&""===c[c.length-1]&&c.length--,t=c.length,t>4)return null;for(n=[],r=0;r1&&"0"===Y(i,0)&&(o=V(Q,i)?16:8,i=N(i,8===o?1:2)),""===i)a=0;else{if(!V(10===o?te:8===o?ee:ne,i))return null;a=O(i,o)}F(n,a)}for(r=0;r=D(256,5-t))return null}else if(a>255)return null;for(s=j(n),r=0;r6)return;r=0;while(h()){if(i=null,r>0){if(!("."===h()&&r<4))return;d++}if(!V(Z,h()))return;while(V(Z,h())){if(o=O(h(),10),null===i)i=o;else{if(0===i)return;i=10*i+o}if(i>255)return;d++}c[l]=256*c[l]+i,r++,2!==r&&4!==r||l++}if(4!==r)return;break}if(":"===h()){if(d++,!h())return}else if(h())return;c[l++]=t}else{if(null!==u)return;d++,l++,u=l}}if(null!==u){a=l-u,l=7;while(0!==l&&a>0)s=c[l],c[l--]=c[u+a-1],c[u+--a]=s}else if(8!==l)return;return c},de=function(e){for(var t=null,n=1,r=null,i=0,o=0;o<8;o++)0!==e[o]?(i>n&&(t=r,n=i),r=null,i=0):(null===r&&(r=o),++i);return i>n?r:t},he=function(e){var t,n,r,i;if("number"==typeof e){for(t=[],n=0;n<4;n++)B(t,e%256),e=H(e/256);return P(t,".")}if("object"==typeof e){for(t="",r=de(e),n=0;n<8;n++)i&&0===e[n]||(i&&(i=!1),r===n?(t+=n?":":"::",i=!0):(t+=E(e[n],16),n<7&&(t+=":")));return"["+t+"]"}return e},fe={},pe=p({},fe,{" ":1,'"':1,"#":1,"<":1,">":1}),me=p({},pe,{"'":1}),ve=p({},fe,{" ":1,'"':1,"<":1,">":1,"`":1}),ge=p({},ve,{"#":1,"?":1,"{":1,"}":1,"^":1}),ye=p({},ge,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),_e=function(e,t){var n=g(e,0);return n>=32&&n<127&&!f(t,e)?e:"'"===e&&f(t,e)?"%27":T(e)},be={ftp:21,file:null,http:80,https:443,ws:80,wss:443},Me=function(e,t){var n;return 2===e.length&&V(J,Y(e,0))&&(":"===(n=Y(e,1))||!t&&"|"===n)},Ae=function(e){var t;return e.length>1&&Me(N(e,0,2))&&(2===e.length||"/"===(t=Y(e,2))||"\\"===t||"?"===t||"#"===t)},we=function(e){return"."===e||"%2e"===W(e)},xe=function(e){return e=W(e),".."===e||"%2e."===e||".%2e"===e||"%2e%2e"===e},ke={},Le={},Ce={},Se={},ze={},Te={},Oe={},He={},De={},Ye={},Ve={},Pe={},Ee={},je={},Fe={},Ie={},$e={},Re={},Ne={},We={},Be={},Ke=function(e,t,n){var r,i,o,a=_(e);if(t){if(i=this.parse(a),i)throw new z(i);this.searchParams=null}else{if(void 0!==n&&(r=new Ke(n,!0)),i=this.parse(a,null,r),i)throw new z(i);o=C(new L),o.bindURL(this),this.searchParams=o}};Ke.prototype={type:"URL",parse:function(e,t,n){var i,o,a,s,c=this,l=t||ke,u=0,d="",h=!1,p=!1,g=!1;e=_(e),t||(c.scheme="",c.username="",c.password="",c.host=null,c.port=null,c.path=[],c.query=null,c.fragment=null,c.cannotBeABaseURL=!1,e=I(e,oe,""),e=I(e,ae,"$1")),e=I(e,se,""),i=m(e);while(u<=i.length){switch(o=i[u],l){case ke:if(!o||!V(J,o)){if(t)return U;l=Ce;continue}d+=W(o),l=Le;break;case Le:if(o&&V(X,o))d+=W(o);else{if(":"!==o){if(t)return U;d="",l=Ce,u=0;continue}if(t&&(c.isSpecial()!==f(be,d)||"file"===d&&(c.includesCredentials()||null!==c.port)||"file"===c.scheme&&""===c.host))return;if(c.scheme=d,t)return void(c.isSpecial()&&be[c.scheme]===c.port&&(c.port=null));d="","file"===c.scheme?l=je:c.isSpecial()&&n&&n.scheme===c.scheme?l=Se:c.isSpecial()?l=He:"/"===i[u+1]?(l=ze,u++):(c.cannotBeABaseURL=!0,F(c.path,""),l=Ne)}break;case Ce:if(!n||n.cannotBeABaseURL&&"#"!==o)return U;if(n.cannotBeABaseURL&&"#"===o){c.scheme=n.scheme,c.path=v(n.path),c.query=n.query,c.fragment="",c.cannotBeABaseURL=!0,l=Be;break}l="file"===n.scheme?je:Te;continue;case Se:if("/"!==o||"/"!==i[u+1]){l=Te;continue}l=De,u++;break;case ze:if("/"===o){l=Ye;break}l=Re;continue;case Te:if(c.scheme=n.scheme,o===r)c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,c.path=v(n.path),c.query=n.query;else if("/"===o||"\\"===o&&c.isSpecial())l=Oe;else if("?"===o)c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,c.path=v(n.path),c.query="",l=We;else{if("#"!==o){c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,c.path=v(n.path),c.path.length&&c.path.length--,l=Re;continue}c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,c.path=v(n.path),c.query=n.query,c.fragment="",l=Be}break;case Oe:if(!c.isSpecial()||"/"!==o&&"\\"!==o){if("/"!==o){c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,l=Re;continue}l=Ye}else l=De;break;case He:if(l=De,"/"!==o||"/"!==i[u+1])continue;u++;break;case De:if("/"!==o&&"\\"!==o){l=Ye;continue}break;case Ye:if("@"===o){h&&(d="%40"+d),h=!0,a=m(d);for(var y=0;y65535)return G;c.port=c.isSpecial()&&A===be[c.scheme]?null:A,d=""}if(t)return;l=$e;continue}return G}d+=o;break;case je:if(c.scheme="file",c.host="","/"===o||"\\"===o)l=Fe;else{if(!n||"file"!==n.scheme){l=Re;continue}switch(o){case r:c.host=n.host,c.path=v(n.path),c.query=n.query;break;case"?":c.host=n.host,c.path=v(n.path),c.query="",l=We;break;case"#":c.host=n.host,c.path=v(n.path),c.query=n.query,c.fragment="",l=Be;break;default:c.host=n.host,Ae(P(v(i,u),""))||(c.path=v(n.path),c.shortenPath()),l=Re;continue}}break;case Fe:if("/"===o||"\\"===o){l=Ie;break}n&&"file"===n.scheme&&(c.host=n.host,!Ae(P(v(i,u),""))&&Me(n.path[0],!0)&&F(c.path,n.path[0])),l=Re;continue;case Ie:if(o===r||"/"===o||"\\"===o||"?"===o||"#"===o){if(!t&&Me(d))l=Re;else if(""===d){if(c.host="",t)return;l=$e}else{if(s=c.parseHost(d),s)return s;if("localhost"===c.host&&(c.host=""),t)return;d="",l=$e}continue}d+=o;break;case $e:if(c.isSpecial()){if(l=Re,"/"!==o&&"\\"!==o)continue}else if(t||"?"!==o)if(t||"#"!==o){if(o!==r&&(l=Re,"/"!==o))continue}else c.fragment="",l=Be;else c.query="",l=We;break;case Re:if(o===r||"/"===o||"\\"===o&&c.isSpecial()||!t&&("?"===o||"#"===o)){if(xe(d)?(c.shortenPath(),"/"===o||"\\"===o&&c.isSpecial()||F(c.path,"")):we(d)?"/"===o||"\\"===o&&c.isSpecial()||F(c.path,""):("file"===c.scheme&&!c.path.length&&Me(d)&&(null!==c.host&&""!==c.host&&(c.host=""),d=Y(d,0)+":"),F(c.path,d)),d="","file"===c.scheme&&(o===r||"?"===o||"#"===o))while(c.path.length>1&&""===c.path[0])$(c.path);"?"===o?(c.query="",l=We):"#"===o&&(c.fragment="",l=Be)}else d+=_e(o,ge);break;case Ne:"?"===o?(c.query="",l=We):"#"===o?(c.fragment="",l=Be):o!==r&&(c.path[0]+=_e(o,fe));break;case We:t||"#"!==o?o!==r&&(c.query+=_e(o,c.isSpecial()?me:pe)):(c.fragment="",l=Be);break;case Be:o!==r&&(c.fragment+=_e(o,ve));break}u++}},parseHost:function(e){var t,n,r;if("["===Y(e,0)){if("]"!==Y(e,e.length-1))return q;if(t=ue(N(e,1,-1)),!t)return q;this.host=t}else if(this.isSpecial()){if(e=y(e),V(re,e))return q;if(ce(e)){if(t=le(e),null===t)return q;this.host=t}else this.host=e}else{if(V(ie,e))return q;for(t="",n=m(e),r=0;r1&&""===a[0]&&(l+="/."),l+=e.cannotBeABaseURL?a[0]:a.length?"/"+P(a,"/"):"",null!==s&&(l+="?"+s),null!==c&&(l+="#"+c),l},setHref:function(e){var t=this.parse(e);if(t)throw new z(t);this.searchParams.update()},getOrigin:function(){var e=this.scheme,t=this.port;if("blob"===e)try{return new Ue(this.path[0]).origin}catch(n){return"null"}return"file"!==e&&this.isSpecial()?e+"://"+he(this.host)+(null!==t?":"+t:""):"null"},getProtocol:function(){return this.scheme+":"},setProtocol:function(e){this.parse(_(e)+":",ke)},getUsername:function(){return this.username},setUsername:function(e){var t=m(_(e));if(!this.cannotHaveUsernamePasswordPort()){this.username="";for(var n=0;n1?arguments[1]:void 0,r=x(t,new Ke(e,!1,n));o||(t.href=r.serialize(),t.origin=r.getOrigin(),t.protocol=r.getProtocol(),t.username=r.getUsername(),t.password=r.getPassword(),t.host=r.getHost(),t.hostname=r.getHostname(),t.port=r.getPort(),t.pathname=r.getPathname(),t.search=r.getSearch(),t.searchParams=r.getSearchParams(),t.hash=r.getHash())},qe=Ue.prototype,Ge=function(e,t){return{get:function(){return k(this)[e]()},set:t&&function(e){return k(this)[t](e)},configurable:!0,enumerable:!0}};if(o&&(d(qe,"href",Ge("serialize","setHref")),d(qe,"origin",Ge("getOrigin")),d(qe,"protocol",Ge("getProtocol","setProtocol")),d(qe,"username",Ge("getUsername","setUsername")),d(qe,"password",Ge("getPassword","setPassword")),d(qe,"host",Ge("getHost","setHost")),d(qe,"hostname",Ge("getHostname","setHostname")),d(qe,"port",Ge("getPort","setPort")),d(qe,"pathname",Ge("getPathname","setPathname")),d(qe,"search",Ge("getSearch","setSearch")),d(qe,"searchParams",Ge("getSearchParams")),d(qe,"hash",Ge("getHash","setHash"))),u(qe,"toJSON",function(){return k(this).serialize()},{enumerable:!0}),u(qe,"toString",function(){return k(this).serialize()},{enumerable:!0}),S){var Je=S.createObjectURL,Xe=S.revokeObjectURL;Je&&u(Ue,"createObjectURL",c(Je,S)),Xe&&u(Ue,"revokeObjectURL",c(Xe,S))}b(Ue,"URL"),i({global:!0,constructor:!0,forced:!a,sham:!o},{URL:Ue})},3296:function(e,t,n){"use strict";n(45806)},27208:function(e,t,n){"use strict";var r=n(46518),i=n(69565);r({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return i(URL.prototype.toString,this)}})},6535:function(e){(function(t,n){e.exports=n()})(0,function(){"use strict";function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(t)}var t=/^\s+/,n=/\s+$/;function r(e,t){if(e=e||"",t=t||{},e instanceof r)return e;if(!(this instanceof r))return new r(e,t);var n=i(e);this._originalInput=e,this._r=n.r,this._g=n.g,this._b=n.b,this._a=n.a,this._roundA=Math.round(100*this._a)/100,this._format=t.format||n.format,this._gradientType=t.gradientType,this._r<1&&(this._r=Math.round(this._r)),this._g<1&&(this._g=Math.round(this._g)),this._b<1&&(this._b=Math.round(this._b)),this._ok=n.ok}function i(t){var n={r:0,g:0,b:0},r=1,i=null,a=null,c=null,u=!1,d=!1;return"string"==typeof t&&(t=I(t)),"object"==e(t)&&(F(t.r)&&F(t.g)&&F(t.b)?(n=o(t.r,t.g,t.b),u=!0,d="%"===String(t.r).substr(-1)?"prgb":"rgb"):F(t.h)&&F(t.s)&&F(t.v)?(i=V(t.s),a=V(t.v),n=l(t.h,i,a),u=!0,d="hsv"):F(t.h)&&F(t.s)&&F(t.l)&&(i=V(t.s),c=V(t.l),n=s(t.h,i,c),u=!0,d="hsl"),t.hasOwnProperty("a")&&(r=t.a)),r=S(r),{ok:u,format:t.format||d,r:Math.min(255,Math.max(n.r,0)),g:Math.min(255,Math.max(n.g,0)),b:Math.min(255,Math.max(n.b,0)),a:r}}function o(e,t,n){return{r:255*z(e,255),g:255*z(t,255),b:255*z(n,255)}}function a(e,t,n){e=z(e,255),t=z(t,255),n=z(n,255);var r,i,o=Math.max(e,t,n),a=Math.min(e,t,n),s=(o+a)/2;if(o==a)r=i=0;else{var c=o-a;switch(i=s>.5?c/(2-o-a):c/(o+a),o){case e:r=(t-n)/c+(t1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}if(e=z(e,360),t=z(t,100),n=z(n,100),0===t)r=i=o=n;else{var s=n<.5?n*(1+t):n+t-n*t,c=2*n-s;r=a(c,s,e+1/3),i=a(c,s,e),o=a(c,s,e-1/3)}return{r:255*r,g:255*i,b:255*o}}function c(e,t,n){e=z(e,255),t=z(t,255),n=z(n,255);var r,i,o=Math.max(e,t,n),a=Math.min(e,t,n),s=o,c=o-a;if(i=0===o?0:c/o,o==a)r=0;else{switch(o){case e:r=(t-n)/c+(t>1)+720)%360;--t;)i.h=(i.h+o)%360,a.push(r(i));return a}function x(e,t){t=t||6;var n=r(e).toHsv(),i=n.h,o=n.s,a=n.v,s=[],c=1/t;while(t--)s.push(r({h:i,s:o,v:a})),a=(a+c)%1;return s}r.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var e=this.toRgb();return(299*e.r+587*e.g+114*e.b)/1e3},getLuminance:function(){var e,t,n,r,i,o,a=this.toRgb();return e=a.r/255,t=a.g/255,n=a.b/255,r=e<=.03928?e/12.92:Math.pow((e+.055)/1.055,2.4),i=t<=.03928?t/12.92:Math.pow((t+.055)/1.055,2.4),o=n<=.03928?n/12.92:Math.pow((n+.055)/1.055,2.4),.2126*r+.7152*i+.0722*o},setAlpha:function(e){return this._a=S(e),this._roundA=Math.round(100*this._a)/100,this},toHsv:function(){var e=c(this._r,this._g,this._b);return{h:360*e.h,s:e.s,v:e.v,a:this._a}},toHsvString:function(){var e=c(this._r,this._g,this._b),t=Math.round(360*e.h),n=Math.round(100*e.s),r=Math.round(100*e.v);return 1==this._a?"hsv("+t+", "+n+"%, "+r+"%)":"hsva("+t+", "+n+"%, "+r+"%, "+this._roundA+")"},toHsl:function(){var e=a(this._r,this._g,this._b);return{h:360*e.h,s:e.s,l:e.l,a:this._a}},toHslString:function(){var e=a(this._r,this._g,this._b),t=Math.round(360*e.h),n=Math.round(100*e.s),r=Math.round(100*e.l);return 1==this._a?"hsl("+t+", "+n+"%, "+r+"%)":"hsla("+t+", "+n+"%, "+r+"%, "+this._roundA+")"},toHex:function(e){return u(this._r,this._g,this._b,e)},toHexString:function(e){return"#"+this.toHex(e)},toHex8:function(e){return d(this._r,this._g,this._b,this._a,e)},toHex8String:function(e){return"#"+this.toHex8(e)},toRgb:function(){return{r:Math.round(this._r),g:Math.round(this._g),b:Math.round(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+")":"rgba("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:Math.round(100*z(this._r,255))+"%",g:Math.round(100*z(this._g,255))+"%",b:Math.round(100*z(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+Math.round(100*z(this._r,255))+"%, "+Math.round(100*z(this._g,255))+"%, "+Math.round(100*z(this._b,255))+"%)":"rgba("+Math.round(100*z(this._r,255))+"%, "+Math.round(100*z(this._g,255))+"%, "+Math.round(100*z(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1)&&(L[u(this._r,this._g,this._b,!0)]||!1)},toFilter:function(e){var t="#"+h(this._r,this._g,this._b,this._a),n=t,i=this._gradientType?"GradientType = 1, ":"";if(e){var o=r(e);n="#"+h(o._r,o._g,o._b,o._a)}return"progid:DXImageTransform.Microsoft.gradient("+i+"startColorstr="+t+",endColorstr="+n+")"},toString:function(e){var t=!!e;e=e||this._format;var n=!1,r=this._a<1&&this._a>=0,i=!t&&r&&("hex"===e||"hex6"===e||"hex3"===e||"hex4"===e||"hex8"===e||"name"===e);return i?"name"===e&&0===this._a?this.toName():this.toRgbString():("rgb"===e&&(n=this.toRgbString()),"prgb"===e&&(n=this.toPercentageRgbString()),"hex"!==e&&"hex6"!==e||(n=this.toHexString()),"hex3"===e&&(n=this.toHexString(!0)),"hex4"===e&&(n=this.toHex8String(!0)),"hex8"===e&&(n=this.toHex8String()),"name"===e&&(n=this.toName()),"hsl"===e&&(n=this.toHslString()),"hsv"===e&&(n=this.toHsvString()),n||this.toHexString())},clone:function(){return r(this.toString())},_applyModification:function(e,t){var n=e.apply(null,[this].concat([].slice.call(t)));return this._r=n._r,this._g=n._g,this._b=n._b,this.setAlpha(n._a),this},lighten:function(){return this._applyModification(v,arguments)},brighten:function(){return this._applyModification(g,arguments)},darken:function(){return this._applyModification(y,arguments)},desaturate:function(){return this._applyModification(f,arguments)},saturate:function(){return this._applyModification(p,arguments)},greyscale:function(){return this._applyModification(m,arguments)},spin:function(){return this._applyModification(_,arguments)},_applyCombination:function(e,t){return e.apply(null,[this].concat([].slice.call(t)))},analogous:function(){return this._applyCombination(w,arguments)},complement:function(){return this._applyCombination(b,arguments)},monochromatic:function(){return this._applyCombination(x,arguments)},splitcomplement:function(){return this._applyCombination(A,arguments)},triad:function(){return this._applyCombination(M,[3])},tetrad:function(){return this._applyCombination(M,[4])}},r.fromRatio=function(t,n){if("object"==e(t)){var i={};for(var o in t)t.hasOwnProperty(o)&&(i[o]="a"===o?t[o]:V(t[o]));t=i}return r(t,n)},r.equals=function(e,t){return!(!e||!t)&&r(e).toRgbString()==r(t).toRgbString()},r.random=function(){return r.fromRatio({r:Math.random(),g:Math.random(),b:Math.random()})},r.mix=function(e,t,n){n=0===n?0:n||50;var i=r(e).toRgb(),o=r(t).toRgb(),a=n/100,s={r:(o.r-i.r)*a+i.r,g:(o.g-i.g)*a+i.g,b:(o.b-i.b)*a+i.b,a:(o.a-i.a)*a+i.a};return r(s)},r.readability=function(e,t){var n=r(e),i=r(t);return(Math.max(n.getLuminance(),i.getLuminance())+.05)/(Math.min(n.getLuminance(),i.getLuminance())+.05)},r.isReadable=function(e,t,n){var i,o,a=r.readability(e,t);switch(o=!1,i=$(n),i.level+i.size){case"AAsmall":case"AAAlarge":o=a>=4.5;break;case"AAlarge":o=a>=3;break;case"AAAsmall":o=a>=7;break}return o},r.mostReadable=function(e,t,n){var i,o,a,s,c=null,l=0;n=n||{},o=n.includeFallbackColors,a=n.level,s=n.size;for(var u=0;ul&&(l=i,c=r(t[u]));return r.isReadable(e,c,{level:a,size:s})||!o?c:(n.includeFallbackColors=!1,r.mostReadable(e,["#fff","#000"],n))};var k=r.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},L=r.hexNames=C(k);function C(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[e[n]]=n);return t}function S(e){return e=parseFloat(e),(isNaN(e)||e<0||e>1)&&(e=1),e}function z(e,t){H(e)&&(e="100%");var n=D(e);return e=Math.min(t,Math.max(0,parseFloat(e))),n&&(e=parseInt(e*t,10)/100),Math.abs(e-t)<1e-6?1:e%t/parseFloat(t)}function T(e){return Math.min(1,Math.max(0,e))}function O(e){return parseInt(e,16)}function H(e){return"string"==typeof e&&-1!=e.indexOf(".")&&1===parseFloat(e)}function D(e){return"string"===typeof e&&-1!=e.indexOf("%")}function Y(e){return 1==e.length?"0"+e:""+e}function V(e){return e<=1&&(e=100*e+"%"),e}function P(e){return Math.round(255*parseFloat(e)).toString(16)}function E(e){return O(e)/255}var j=function(){var e="[-\\+]?\\d+%?",t="[-\\+]?\\d*\\.\\d+%?",n="(?:"+t+")|(?:"+e+")",r="[\\s|\\(]+("+n+")[,|\\s]+("+n+")[,|\\s]+("+n+")\\s*\\)?",i="[\\s|\\(]+("+n+")[,|\\s]+("+n+")[,|\\s]+("+n+")[,|\\s]+("+n+")\\s*\\)?";return{CSS_UNIT:new RegExp(n),rgb:new RegExp("rgb"+r),rgba:new RegExp("rgba"+i),hsl:new RegExp("hsl"+r),hsla:new RegExp("hsla"+i),hsv:new RegExp("hsv"+r),hsva:new RegExp("hsva"+i),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();function F(e){return!!j.CSS_UNIT.exec(e)}function I(e){e=e.replace(t,"").replace(n,"").toLowerCase();var r,i=!1;if(k[e])e=k[e],i=!0;else if("transparent"==e)return{r:0,g:0,b:0,a:0,format:"name"};return(r=j.rgb.exec(e))?{r:r[1],g:r[2],b:r[3]}:(r=j.rgba.exec(e))?{r:r[1],g:r[2],b:r[3],a:r[4]}:(r=j.hsl.exec(e))?{h:r[1],s:r[2],l:r[3]}:(r=j.hsla.exec(e))?{h:r[1],s:r[2],l:r[3],a:r[4]}:(r=j.hsv.exec(e))?{h:r[1],s:r[2],v:r[3]}:(r=j.hsva.exec(e))?{h:r[1],s:r[2],v:r[3],a:r[4]}:(r=j.hex8.exec(e))?{r:O(r[1]),g:O(r[2]),b:O(r[3]),a:E(r[4]),format:i?"name":"hex8"}:(r=j.hex6.exec(e))?{r:O(r[1]),g:O(r[2]),b:O(r[3]),format:i?"name":"hex"}:(r=j.hex4.exec(e))?{r:O(r[1]+""+r[1]),g:O(r[2]+""+r[2]),b:O(r[3]+""+r[3]),a:E(r[4]+""+r[4]),format:i?"name":"hex8"}:!!(r=j.hex3.exec(e))&&{r:O(r[1]+""+r[1]),g:O(r[2]+""+r[2]),b:O(r[3]+""+r[3]),format:i?"name":"hex"}}function $(e){var t,n;return e=e||{level:"AA",size:"small"},t=(e.level||"AA").toUpperCase(),n=(e.size||"small").toLowerCase(),"AA"!==t&&"AAA"!==t&&(t="AA"),"small"!==n&&"large"!==n&&(n="small"),{level:t,size:n}}return r})},93511:function(e,t,n){"use strict";n.d(t,{In:function(){return Je}});var r=n(85471);const i=/^[a-z0-9]+(-[a-z0-9]+)*$/,o=(e,t,n,r="")=>{const i=e.split(":");if("@"===e.slice(0,1)){if(i.length<2||i.length>3)return null;r=i.shift().slice(1)}if(i.length>3||!i.length)return null;if(i.length>1){const e=i.pop(),n=i.pop(),o={provider:i.length>0?i[0]:r,prefix:n,name:e};return t&&!a(o)?null:o}const o=i[0],s=o.split("-");if(s.length>1){const e={provider:r,prefix:s.shift(),name:s.join("-")};return t&&!a(e)?null:e}if(n&&""===r){const e={provider:r,prefix:"",name:o};return t&&!a(e,n)?null:e}return null},a=(e,t)=>!!e&&!(""!==e.provider&&!e.provider.match(i)||!(t&&""===e.prefix||e.prefix.match(i))||!e.name.match(i)),s=Object.freeze({left:0,top:0,width:16,height:16}),c=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),l=Object.freeze({...s,...c}),u=Object.freeze({...l,body:"",hidden:!1});function d(e,t){const n={};!e.hFlip!==!t.hFlip&&(n.hFlip=!0),!e.vFlip!==!t.vFlip&&(n.vFlip=!0);const r=((e.rotate||0)+(t.rotate||0))%4;return r&&(n.rotate=r),n}function h(e,t){const n=d(e,t);for(const r in u)r in c?r in e&&!(r in n)&&(n[r]=c[r]):r in t?n[r]=t[r]:r in e&&(n[r]=e[r]);return n}function f(e,t){const n=e.icons,r=e.aliases||Object.create(null),i=Object.create(null);function o(e){if(n[e])return i[e]=[];if(!(e in i)){i[e]=null;const t=r[e]&&r[e].parent,n=t&&o(t);n&&(i[e]=[t].concat(n))}return i[e]}return(t||Object.keys(n).concat(Object.keys(r))).forEach(o),i}function p(e,t,n){const r=e.icons,i=e.aliases||Object.create(null);let o={};function a(e){o=h(r[e]||i[e],o)}return a(t),n.forEach(a),h(e,o)}function m(e,t){const n=[];if("object"!==typeof e||"object"!==typeof e.icons)return n;e.not_found instanceof Array&&e.not_found.forEach(e=>{t(e,null),n.push(e)});const r=f(e);for(const i in r){const o=r[i];o&&(t(i,p(e,i,o)),n.push(i))}return n}const v={provider:"",aliases:{},not_found:{},...s};function g(e,t){for(const n in t)if(n in e&&typeof e[n]!==typeof t[n])return!1;return!0}function y(e){if("object"!==typeof e||null===e)return null;const t=e;if("string"!==typeof t.prefix||!e.icons||"object"!==typeof e.icons)return null;if(!g(e,v))return null;const n=t.icons;for(const o in n){const e=n[o];if(!o.match(i)||"string"!==typeof e.body||!g(e,u))return null}const r=t.aliases||Object.create(null);for(const o in r){const e=r[o],t=e.parent;if(!o.match(i)||"string"!==typeof t||!n[t]&&!r[t]||!g(e,u))return null}return t}const _=Object.create(null);function b(e,t){return{provider:e,prefix:t,icons:Object.create(null),missing:new Set}}function M(e,t){const n=_[e]||(_[e]=Object.create(null));return n[t]||(n[t]=b(e,t))}function A(e,t){return y(t)?m(t,(t,n)=>{n?e.icons[t]=n:e.missing.add(t)}):[]}function w(e,t,n){try{if("string"===typeof n.body)return e.icons[t]={...n},!0}catch(r){}return!1}let x=!1;function k(e){return"boolean"===typeof e&&(x=e),x}function L(e){const t="string"===typeof e?o(e,!0,x):e;if(t){const e=M(t.provider,t.prefix),n=t.name;return e.icons[n]||(e.missing.has(n)?null:void 0)}}function C(e,t){const n=o(e,!0,x);if(!n)return!1;const r=M(n.provider,n.prefix);return w(r,n.name,t)}function S(e,t){if("object"!==typeof e)return!1;if("string"!==typeof t&&(t=e.provider||""),x&&!t&&!e.prefix){let t=!1;return y(e)&&(e.prefix="",m(e,(e,n)=>{n&&C(e,n)&&(t=!0)})),t}const n=e.prefix;if(!a({provider:t,prefix:n,name:"a"}))return!1;const r=M(t,n);return!!A(r,e)}const z=Object.freeze({width:null,height:null}),T=Object.freeze({...z,...c}),O=/(-?[0-9.]*[0-9]+[0-9.]*)/g,H=/^-?[0-9.]*[0-9]+[0-9.]*$/g;function D(e,t,n){if(1===t)return e;if(n=n||100,"number"===typeof e)return Math.ceil(e*t*n)/n;if("string"!==typeof e)return e;const r=e.split(O);if(null===r||!r.length)return e;const i=[];let o=r.shift(),a=H.test(o);while(1){if(a){const e=parseFloat(o);isNaN(e)?i.push(o):i.push(Math.ceil(e*t*n)/n)}else i.push(o);if(o=r.shift(),void 0===o)return i.join("");a=!a}}const Y=e=>"unset"===e||"undefined"===e||"none"===e;function V(e,t){const n={...l,...e},r={...T,...t},i={left:n.left,top:n.top,width:n.width,height:n.height};let o=n.body;[n,r].forEach(e=>{const t=[],n=e.hFlip,r=e.vFlip;let a,s=e.rotate;switch(n?r?s+=2:(t.push("translate("+(i.width+i.left).toString()+" "+(0-i.top).toString()+")"),t.push("scale(-1 1)"),i.top=i.left=0):r&&(t.push("translate("+(0-i.left).toString()+" "+(i.height+i.top).toString()+")"),t.push("scale(1 -1)"),i.top=i.left=0),s<0&&(s-=4*Math.floor(s/4)),s%=4,s){case 1:a=i.height/2+i.top,t.unshift("rotate(90 "+a.toString()+" "+a.toString()+")");break;case 2:t.unshift("rotate(180 "+(i.width/2+i.left).toString()+" "+(i.height/2+i.top).toString()+")");break;case 3:a=i.width/2+i.left,t.unshift("rotate(-90 "+a.toString()+" "+a.toString()+")");break}s%2===1&&(i.left!==i.top&&(a=i.left,i.left=i.top,i.top=a),i.width!==i.height&&(a=i.width,i.width=i.height,i.height=a)),t.length&&(o=''+o+"")});const a=r.width,s=r.height,c=i.width,u=i.height;let d,h;null===a?(h=null===s?"1em":"auto"===s?u:s,d=D(h,c/u)):(d="auto"===a?c:a,h=null===s?D(d,u/c):"auto"===s?u:s);const f={},p=(e,t)=>{Y(t)||(f[e]=t.toString())};return p("width",d),p("height",h),f.viewBox=i.left.toString()+" "+i.top.toString()+" "+c.toString()+" "+u.toString(),{attributes:f,body:o}}const P=/\sid="(\S+)"/g,E="IconifyId"+Date.now().toString(16)+(16777216*Math.random()|0).toString(16);let j=0;function F(e,t=E){const n=[];let r;while(r=P.exec(e))n.push(r[1]);if(!n.length)return e;const i="suffix"+(16777216*Math.random()|Date.now()).toString(16);return n.forEach(n=>{const r="function"===typeof t?t(n):t+(j++).toString(),o=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");e=e.replace(new RegExp('([#;"])('+o+')([")]|\\.[a-z])',"g"),"$1"+r+i+"$3")}),e=e.replace(new RegExp(i,"g"),""),e}const I=Object.create(null);function $(e,t){I[e]=t}function R(e){return I[e]||I[""]}function N(e){let t;if("string"===typeof e.resources)t=[e.resources];else if(t=e.resources,!(t instanceof Array)||!t.length)return null;const n={resources:t,path:e.path||"/",maxURL:e.maxURL||500,rotate:e.rotate||750,timeout:e.timeout||5e3,random:!0===e.random,index:e.index||0,dataAfterTimeout:!1!==e.dataAfterTimeout};return n}const W=Object.create(null),B=["https://api.simplesvg.com","https://api.unisvg.com"],K=[];while(B.length>0)1===B.length||Math.random()>.5?K.push(B.shift()):K.push(B.pop());function U(e,t){const n=N(t);return null!==n&&(W[e]=n,!0)}function q(e){return W[e]}W[""]=N({resources:["https://api.iconify.design"].concat(K)});const G=()=>{let e;try{if(e=fetch,"function"===typeof e)return e}catch(t){}};let J=G();function X(e,t){const n=q(e);if(!n)return 0;let r;if(n.maxURL){let e=0;n.resources.forEach(t=>{const n=t;e=Math.max(e,n.length)});const i=t+".json?icons=";r=n.maxURL-e-n.path.length-i.length}else r=0;return r}function Z(e){return 404===e}const Q=(e,t,n)=>{const r=[],i=X(e,t),o="icons";let a={type:o,provider:e,prefix:t,icons:[]},s=0;return n.forEach((n,c)=>{s+=n.length+1,s>=i&&c>0&&(r.push(a),a={type:o,provider:e,prefix:t,icons:[]},s=n.length),a.icons.push(n)}),r.push(a),r};function ee(e){if("string"===typeof e){const t=q(e);if(t)return t.path}return"/"}const te=(e,t,n)=>{if(!J)return void n("abort",424);let r=ee(t.provider);switch(t.type){case"icons":{const e=t.prefix,n=t.icons,i=n.join(","),o=new URLSearchParams({icons:i});r+=e+".json?"+o.toString();break}case"custom":{const e=t.uri;r+="/"===e.slice(0,1)?e.slice(1):e;break}default:return void n("abort",400)}let i=503;J(e+r).then(e=>{const t=e.status;if(200===t)return i=501,e.json();setTimeout(()=>{n(Z(t)?"abort":"next",t)})}).then(e=>{"object"===typeof e&&null!==e?setTimeout(()=>{n("success",e)}):setTimeout(()=>{404===e?n("abort",e):n("next",i)})}).catch(()=>{n("next",i)})},ne={prepare:Q,send:te};function re(e){const t={loaded:[],missing:[],pending:[]},n=Object.create(null);e.sort((e,t)=>e.provider!==t.provider?e.provider.localeCompare(t.provider):e.prefix!==t.prefix?e.prefix.localeCompare(t.prefix):e.name.localeCompare(t.name));let r={provider:"",prefix:"",name:""};return e.forEach(e=>{if(r.name===e.name&&r.prefix===e.prefix&&r.provider===e.provider)return;r=e;const i=e.provider,o=e.prefix,a=e.name,s=n[i]||(n[i]=Object.create(null)),c=s[o]||(s[o]=M(i,o));let l;l=a in c.icons?t.loaded:""===o||c.missing.has(a)?t.missing:t.pending;const u={provider:i,prefix:o,name:a};l.push(u)}),t}function ie(e,t){e.forEach(e=>{const n=e.loaderCallbacks;n&&(e.loaderCallbacks=n.filter(e=>e.id!==t))})}function oe(e){e.pendingCallbacksFlag||(e.pendingCallbacksFlag=!0,setTimeout(()=>{e.pendingCallbacksFlag=!1;const t=e.loaderCallbacks?e.loaderCallbacks.slice(0):[];if(!t.length)return;let n=!1;const r=e.provider,i=e.prefix;t.forEach(t=>{const o=t.icons,a=o.pending.length;o.pending=o.pending.filter(t=>{if(t.prefix!==i)return!0;const a=t.name;if(e.icons[a])o.loaded.push({provider:r,prefix:i,name:a});else{if(!e.missing.has(a))return n=!0,!0;o.missing.push({provider:r,prefix:i,name:a})}return!1}),o.pending.length!==a&&(n||ie([e],t.id),t.callback(o.loaded.slice(0),o.missing.slice(0),o.pending.slice(0),t.abort))})}))}let ae=0;function se(e,t,n){const r=ae++,i=ie.bind(null,n,r);if(!t.pending.length)return i;const o={id:r,icons:t,callback:e,abort:i};return n.forEach(e=>{(e.loaderCallbacks||(e.loaderCallbacks=[])).push(o)}),i}function ce(e,t=!0,n=!1){const r=[];return e.forEach(e=>{const i="string"===typeof e?o(e,t,n):e;i&&r.push(i)}),r}var le={resources:[],index:0,timeout:2e3,rotate:750,random:!1,dataAfterTimeout:!1};function ue(e,t,n,r){const i=e.resources.length,o=e.random?Math.floor(Math.random()*i):e.index;let a;if(e.random){let t=e.resources.slice(0);a=[];while(t.length>1){const e=Math.floor(Math.random()*t.length);a.push(t[e]),t=t.slice(0,e).concat(t.slice(e+1))}a=a.concat(t)}else a=e.resources.slice(o).concat(e.resources.slice(0,o));const s=Date.now();let c,l="pending",u=0,d=null,h=[],f=[];function p(){d&&(clearTimeout(d),d=null)}function m(){"pending"===l&&(l="aborted"),p(),h.forEach(e=>{"pending"===e.status&&(e.status="aborted")}),h=[]}function v(e,t){t&&(f=[]),"function"===typeof e&&f.push(e)}function g(){return{startTime:s,payload:t,status:l,queriesSent:u,queriesPending:h.length,subscribe:v,abort:m}}function y(){l="failed",f.forEach(e=>{e(void 0,c)})}function _(){h.forEach(e=>{"pending"===e.status&&(e.status="aborted")}),h=[]}function b(t,n,r){const i="success"!==n;switch(h=h.filter(e=>e!==t),l){case"pending":break;case"failed":if(i||!e.dataAfterTimeout)return;break;default:return}if("abort"===n)return c=r,void y();if(i)return c=r,void(h.length||(a.length?M():y()));if(p(),_(),!e.random){const n=e.resources.indexOf(t.resource);-1!==n&&n!==e.index&&(e.index=n)}l="completed",f.forEach(e=>{e(r)})}function M(){if("pending"!==l)return;p();const r=a.shift();if(void 0===r)return h.length?void(d=setTimeout(()=>{p(),"pending"===l&&(_(),y())},e.timeout)):void y();const i={status:"pending",resource:r,callback:(e,t)=>{b(i,e,t)}};h.push(i),u++,d=setTimeout(M,e.rotate),n(r,t,i.callback)}return"function"===typeof r&&f.push(r),setTimeout(M),g}function de(e){const t={...le,...e};let n=[];function r(){n=n.filter(e=>"pending"===e().status)}function i(e,i,o){const a=ue(t,e,i,(e,t)=>{r(),o&&o(e,t)});return n.push(a),a}function o(e){return n.find(t=>e(t))||null}const a={query:i,find:o,setIndex:e=>{t.index=e},getIndex:()=>t.index,cleanup:r};return a}function he(){}const fe=Object.create(null);function pe(e){if(!fe[e]){const t=q(e);if(!t)return;const n=de(t),r={config:t,redundancy:n};fe[e]=r}return fe[e]}function me(e,t,n){let r,i;if("string"===typeof e){const t=R(e);if(!t)return n(void 0,424),he;i=t.send;const o=pe(e);o&&(r=o.redundancy)}else{const t=N(e);if(t){r=de(t);const n=e.resources?e.resources[0]:"",o=R(n);o&&(i=o.send)}}return r&&i?r.query(t,i,n)().abort:(n(void 0,424),he)}const ve="iconify2",ge="iconify",ye=ge+"-count",_e=ge+"-version",be=36e5,Me=168;function Ae(e,t){try{return e.getItem(t)}catch(n){}}function we(e,t,n){try{return e.setItem(t,n),!0}catch(r){}}function xe(e,t){try{e.removeItem(t)}catch(n){}}function ke(e,t){return we(e,ye,t.toString())}function Le(e){return parseInt(Ae(e,ye))||0}const Ce={local:!0,session:!0},Se={local:new Set,session:new Set};let ze=!1;function Te(e){ze=e}let Oe="undefined"===typeof window?{}:window;function He(e){const t=e+"Storage";try{if(Oe&&Oe[t]&&"number"===typeof Oe[t].length)return Oe[t]}catch(n){}Ce[e]=!1}function De(e,t){const n=He(e);if(!n)return;const r=Ae(n,_e);if(r!==ve){if(r){const e=Le(n);for(let t=0;t{const r=ge+e.toString(),o=Ae(n,r);if("string"===typeof o){try{const n=JSON.parse(o);if("object"===typeof n&&"number"===typeof n.cached&&n.cached>i&&"string"===typeof n.provider&&"object"===typeof n.data&&"string"===typeof n.data.prefix&&t(n,e))return!0}catch(a){}xe(n,r)}};let a=Le(n);for(let s=a-1;s>=0;s--)o(s)||(s===a-1?(a--,ke(n,a)):Se[e].add(s))}function Ye(){if(!ze){Te(!0);for(const e in Ce)De(e,e=>{const t=e.data,n=e.provider,r=t.prefix,i=M(n,r);if(!A(i,t).length)return!1;const o=t.lastModified||-1;return i.lastModifiedCached=i.lastModifiedCached?Math.min(i.lastModifiedCached,o):o,!0})}}function Ve(e,t){const n=e.lastModifiedCached;if(n&&n>=t)return n===t;if(e.lastModifiedCached=t,n)for(const r in Ce)De(r,n=>{const r=n.data;return n.provider!==e.provider||r.prefix!==e.prefix||r.lastModified===t});return!0}function Pe(e,t){function n(n){let r;if(!Ce[n]||!(r=He(n)))return;const i=Se[n];let o;if(i.size)i.delete(o=Array.from(i).shift());else if(o=Le(r),!ke(r,o+1))return;const a={cached:Math.floor(Date.now()/be),provider:e.provider,data:t};return we(r,ge+o.toString(),JSON.stringify(a))}ze||Ye(),t.lastModified&&!Ve(e,t.lastModified)||Object.keys(t.icons).length&&(t.not_found&&(t=Object.assign({},t),delete t.not_found),n("local")||n("session"))}function Ee(){}function je(e){e.iconsLoaderFlag||(e.iconsLoaderFlag=!0,setTimeout(()=>{e.iconsLoaderFlag=!1,oe(e)}))}function Fe(e,t){e.iconsToLoad?e.iconsToLoad=e.iconsToLoad.concat(t).sort():e.iconsToLoad=t,e.iconsQueueFlag||(e.iconsQueueFlag=!0,setTimeout(()=>{e.iconsQueueFlag=!1;const{provider:t,prefix:n}=e,r=e.iconsToLoad;let i;if(delete e.iconsToLoad,!r||!(i=R(t)))return;const o=i.prepare(t,n,r);o.forEach(n=>{me(t,n,t=>{if("object"!==typeof t)n.icons.forEach(t=>{e.missing.add(t)});else try{const n=A(e,t);if(!n.length)return;const r=e.pendingIcons;r&&n.forEach(e=>{r.delete(e)}),Pe(e,t)}catch(r){console.error(r)}je(e)})})}))}const Ie=(e,t)=>{const n=ce(e,!0,k()),r=re(n);if(!r.pending.length){let e=!0;return t&&setTimeout(()=>{e&&t(r.loaded,r.missing,r.pending,Ee)}),()=>{e=!1}}const i=Object.create(null),o=[];let a,s;return r.pending.forEach(e=>{const{provider:t,prefix:n}=e;if(n===s&&t===a)return;a=t,s=n,o.push(M(t,n));const r=i[t]||(i[t]=Object.create(null));r[n]||(r[n]=[])}),r.pending.forEach(e=>{const{provider:t,prefix:n,name:r}=e,o=M(t,n),a=o.pendingIcons||(o.pendingIcons=new Set);a.has(r)||(a.add(r),i[t][n].push(r))}),o.forEach(e=>{const{provider:t,prefix:n}=e;i[t][n].length&&Fe(e,i[t][n])}),t?se(t,r,o):Ee};function $e(e,t){const n={...e};for(const r in t){const e=t[r],i=typeof e;r in z?(null===e||e&&("string"===i||"number"===i))&&(n[r]=e):i===typeof n[r]&&(n[r]="rotate"===r?e%4:e)}return n}const Re=/[\s,]+/;function Ne(e,t){t.split(Re).forEach(t=>{const n=t.trim();switch(n){case"horizontal":e.hFlip=!0;break;case"vertical":e.vFlip=!0;break}})}function We(e,t=0){const n=e.replace(/^-?[0-9.]*/,"");function r(e){while(e<0)e+=4;return e%4}if(""===n){const t=parseInt(e);return isNaN(t)?0:r(t)}if(n!==e){let t=0;switch(n){case"%":t=25;break;case"deg":t=90}if(t){let i=parseFloat(e.slice(0,e.length-n.length));return isNaN(i)?0:(i/=t,i%1===0?r(i):0)}}return t}const Be={...T,inline:!1},Ke={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink","aria-hidden":!0,role:"img"},Ue={};["horizontal","vertical"].forEach(e=>{const t=e.slice(0,1)+"Flip";Ue[e+"-flip"]=t,Ue[e.slice(0,1)+"-flip"]=t,Ue[e+"Flip"]=t});const qe=(e,t,n,r)=>{const i=$e(Be,t),o={...Ke},a={};for(let d in t){const e=t[d];if(void 0!==e)switch(d){case"icon":case"style":case"onLoad":break;case"inline":case"hFlip":case"vFlip":i[d]=!0===e||"true"===e||1===e;break;case"flip":"string"===typeof e&&Ne(i,e);break;case"color":a.color=e;break;case"rotate":"string"===typeof e?i[d]=We(e):"number"===typeof e&&(i[d]=e);break;case"ariaHidden":case"aria-hidden":!0!==e&&"true"!==e&&delete o["aria-hidden"];break;default:const t=Ue[d];t?!0!==e&&"true"!==e&&1!==e||(i[t]=!0):void 0===Be[d]&&(o[d]=e)}}const s=V(r,i);for(let d in s.attributes)o[d]=s.attributes[d];i.inline&&(a.verticalAlign="-0.125em");let c=0,l=t.id;"string"===typeof l&&(l=l.replace(/-/g,"_"));const u={attrs:o,domProps:{innerHTML:F(s.body,l?()=>l+"ID"+c++:"iconifyVue")}};return Object.keys(a).length>0&&(u.style=a),n&&(["on","ref"].forEach(e=>{void 0!==n[e]&&(u[e]=n[e])}),["staticClass","class"].forEach(e=>{void 0!==n[e]&&(u.class=n[e])})),e("svg",u)};if(k(!0),$("",ne),"undefined"!==typeof document&&"undefined"!==typeof window){Ye();const e=window;if(void 0!==e.IconifyPreload){const t=e.IconifyPreload,n="Invalid IconifyPreload syntax.";"object"===typeof t&&null!==t&&(t instanceof Array?t:[t]).forEach(e=>{try{("object"!==typeof e||null===e||e instanceof Array||"object"!==typeof e.icons||"string"!==typeof e.prefix||!S(e))&&console.error(n)}catch(t){console.error(n)}})}if(void 0!==e.IconifyProviders){const t=e.IconifyProviders;if("object"===typeof t&&null!==t)for(let e in t){const n="IconifyProviders["+e+"] is invalid.";try{const r=t[e];if("object"!==typeof r||!r||void 0===r.resources)continue;U(e,r)||console.error(n)}catch(Xe){console.error(n)}}}}const Ge={body:""},Je=r.Ay.extend({inheritAttrs:!1,data(){return{iconMounted:!1}},beforeMount(){this._name="",this._loadingIcon=null,this.iconMounted=!0},beforeDestroy(){this.abortLoading()},methods:{abortLoading(){this._loadingIcon&&(this._loadingIcon.abort(),this._loadingIcon=null)},getIcon(e,t){if("object"===typeof e&&null!==e&&"string"===typeof e.body)return this._name="",this.abortLoading(),{data:e};let n;if("string"!==typeof e||null===(n=o(e,!1,!0)))return this.abortLoading(),null;const r=L(n);if(!r)return this._loadingIcon&&this._loadingIcon.name===e||(this.abortLoading(),this._name="",null!==r&&(this._loadingIcon={name:e,abort:Ie([n],()=>{this.$forceUpdate()})})),null;this.abortLoading(),this._name!==e&&(this._name=e,t&&t(e));const i=["iconify"];return""!==n.prefix&&i.push("iconify--"+n.prefix),""!==n.provider&&i.push("iconify--"+n.provider),{data:r,classes:i}}},render(e){const t=Object.assign({},this.$attrs);let n=this.$data;const r=this.iconMounted?this.getIcon(t.icon,t.onLoad):null;return r?(r.classes&&(n={...n,class:("string"===typeof n["class"]?n["class"]+" ":"")+r.classes.join(" ")}),qe(e,t,n,r.data)):qe(e,t,n,Ge)}})},55696:function(e,t,n){"use strict";function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n=e.length?{done:!0}:{done:!1,value:e[i++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,s=!0,c=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){c=!0,a=e},f:function(){try{s||null==n["return"]||n["return"]()}finally{if(c)throw a}}}}},42822:function(e,t,n){"use strict";n.d(t,{A:function(){return a}});var r=n(68285);function i(e,t){if("object"!=(0,r.A)(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t||"default");if("object"!=(0,r.A)(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}function o(e){var t=i(e,"string");return"symbol"==(0,r.A)(t)?t:t+""}function a(e,t,n){return(t=o(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},57888:function(e,t,n){"use strict";n.d(t,{A:function(){return o}});var r=n(42822);function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function o(e){for(var t=1;t>8&255]},G=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},J=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},X=function(e){return B(m(e),23,4)},Z=function(e){return B(e,52,8)},Q=function(e,t,n){l(e[z],t,{configurable:!0,get:function(){return n(this)[t]}})},ee=function(e,t,n,r){var i=D(e),o=p(n),a=!!r;if(o+t>i.byteLength)throw new R(O);var s=i.bytes,c=o+i.byteOffset,l=b(s,c,c+t);return a?l:W(l)},te=function(e,t,n,r,i,o){var a=D(e),s=p(n),c=r(+i),l=!!o;if(s+t>a.byteLength)throw new R(O);for(var u=a.bytes,d=s+a.byteOffset,h=0;h>24)},setUint8:function(e,t){ie(this,e,t<<24>>24)}},{unsafe:!0})}else P=function(e){h(this,E);var t=p(e);Y(this,{type:C,bytes:N($(t),0),byteLength:t}),o||(this.byteLength=t,this.detached=!1)},E=P[z],j=function(e,t,n){h(this,F),h(e,E);var r=H(e),i=r.byteLength,a=f(t);if(a<0||a>i)throw new R("Wrong offset");if(n=void 0===n?i-a:p(n),a+n>i)throw new R(T);Y(this,{type:S,buffer:e,byteLength:n,byteOffset:a,bytes:r.bytes}),o||(this.buffer=e,this.byteLength=n,this.byteOffset=a)},F=j[z],o&&(Q(P,"byteLength",H),Q(j,"buffer",D),Q(j,"byteLength",D),Q(j,"byteOffset",D)),u(F,{getInt8:function(e){return ee(this,1,e)[0]<<24>>24},getUint8:function(e){return ee(this,1,e)[0]},getInt16:function(e){var t=ee(this,2,e,arguments.length>1&&arguments[1]);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=ee(this,2,e,arguments.length>1&&arguments[1]);return t[1]<<8|t[0]},getInt32:function(e){return J(ee(this,4,e,arguments.length>1&&arguments[1]))},getUint32:function(e){return J(ee(this,4,e,arguments.length>1&&arguments[1]))>>>0},getFloat32:function(e){return K(ee(this,4,e,arguments.length>1&&arguments[1]),23)},getFloat64:function(e){return K(ee(this,8,e,arguments.length>1&&arguments[1]),52)},setInt8:function(e,t){te(this,1,e,U,t)},setUint8:function(e,t){te(this,1,e,U,t)},setInt16:function(e,t){te(this,2,e,q,t,arguments.length>2&&arguments[2])},setUint16:function(e,t){te(this,2,e,q,t,arguments.length>2&&arguments[2])},setInt32:function(e,t){te(this,4,e,G,t,arguments.length>2&&arguments[2])},setUint32:function(e,t){te(this,4,e,G,t,arguments.length>2&&arguments[2])},setFloat32:function(e,t){te(this,4,e,X,t,arguments.length>2&&arguments[2])},setFloat64:function(e,t){te(this,8,e,Z,t,arguments.length>2&&arguments[2])}});w(P,C),w(j,S),e.exports={ArrayBuffer:P,DataView:j}},57029:function(e,t,n){"use strict";var r=n(48981),i=n(35610),o=n(26198),a=n(84606),s=Math.min;e.exports=[].copyWithin||function(e,t){var n=r(this),c=o(n),l=i(e,c),u=i(t,c),d=arguments.length>2?arguments[2]:void 0,h=s((void 0===d?c:i(d,c))-u,c-l),f=1;u0)u in n?n[l]=n[u]:a(n,l),l+=f,u+=f;return n}},84373:function(e,t,n){"use strict";var r=n(48981),i=n(35610),o=n(26198);e.exports=function(e){var t=r(this),n=o(t),a=arguments.length,s=i(a>1?arguments[1]:void 0,n),c=a>2?arguments[2]:void 0,l=void 0===c?n:i(c,n);while(l>s)t[s++]=e;return t}},90235:function(e,t,n){"use strict";var r=n(59213).forEach,i=n(34598),o=i("forEach");e.exports=o?[].forEach:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}},35370:function(e,t,n){"use strict";var r=n(26198);e.exports=function(e,t,n){var i=0,o=arguments.length>2?n:r(t),a=new e(o);while(o>i)a[i]=t[i++];return a}},97916:function(e,t,n){"use strict";var r=n(76080),i=n(69565),o=n(48981),a=n(96319),s=n(44209),c=n(33517),l=n(26198),u=n(97040),d=n(34527),h=n(70081),f=n(50851),p=n(9539),m=Array;e.exports=function(e){var t=c(this),n=arguments.length,v=n>1?arguments[1]:void 0,g=void 0!==v;g&&(v=r(v,n>2?arguments[2]:void 0));var y,_,b,M,A,w,x=o(e),k=f(x),L=0;if(!k||this===m&&s(k))for(y=l(x),_=t?new this(y):m(y);y>L;L++)w=g?v(x[L],L):x[L],u(_,L,w);else for(_=t?new this:[],M=h(x,k),A=M.next;!(b=i(A,M)).done;L++){w=g?a(M,v,[b.value,L],!0):b.value;try{u(_,L,w)}catch(C){p(M,"throw",C)}}return d(_,L),_}},19617:function(e,t,n){"use strict";var r=n(25397),i=n(35610),o=n(26198),a=function(e){return function(t,n,a){var s=r(t),c=o(s);if(0===c)return!e&&-1;var l,u=i(a,c);if(e&&n!==n){while(c>u)if(l=s[u++],l!==l)return!0}else for(;c>u;u++)if((e||u in s)&&s[u]===n)return e||u||0;return!e&&-1}};e.exports={includes:a(!0),indexOf:a(!1)}},59213:function(e,t,n){"use strict";var r=n(76080),i=n(47055),o=n(48981),a=n(26198),s=n(1469),c=n(97040),l=function(e){var t=1===e,n=2===e,l=3===e,u=4===e,d=6===e,h=7===e,f=5===e||d;return function(p,m,v){for(var g,y,_=o(p),b=i(_),M=a(b),A=r(m,v),w=0,x=0,k=t?s(p,M):n||h?s(p,0):void 0;M>w;w++)if((f||w in b)&&(g=b[w],y=A(g,w,_),e))if(t)c(k,w,y);else if(y)switch(e){case 3:return!0;case 5:return g;case 6:return w;case 2:c(k,x++,g)}else switch(e){case 4:return!1;case 7:c(k,x++,g)}return d?-1:l||u?u:k}};e.exports={forEach:l(0),map:l(1),filter:l(2),some:l(3),every:l(4),find:l(5),findIndex:l(6),filterReject:l(7)}},8379:function(e,t,n){"use strict";var r=n(18745),i=n(25397),o=n(91291),a=n(26198),s=n(34598),c=Math.min,l=[].lastIndexOf,u=!!l&&1/[1].lastIndexOf(1,-0)<0,d=s("lastIndexOf"),h=u||!d;e.exports=h?function(e){if(u)return r(l,this,arguments)||0;var t=i(this),n=a(t);if(0===n)return-1;var s=n-1;for(arguments.length>1&&(s=c(s,o(arguments[1]))),s<0&&(s=n+s);s>=0;s--)if(s in t&&t[s]===e)return s||0;return-1}:l},70597:function(e,t,n){"use strict";var r=n(79039),i=n(78227),o=n(39519),a=i("species");e.exports=function(e){return o>=51||!r(function(){var t=[],n=t.constructor={};return n[a]=function(){return{foo:1}},1!==t[e](Boolean).foo})}},34598:function(e,t,n){"use strict";var r=n(79039);e.exports=function(e,t){var n=[][e];return!!n&&r(function(){n.call(null,t||function(){return 1},1)})}},80926:function(e,t,n){"use strict";var r=n(79306),i=n(48981),o=n(47055),a=n(26198),s=TypeError,c="Reduce of empty array with no initial value",l=function(e){return function(t,n,l,u){var d=i(t),h=o(d),f=a(d);if(r(n),0===f&&l<2)throw new s(c);var p=e?f-1:0,m=e?-1:1;if(l<2)while(1){if(p in h){u=h[p],p+=m;break}if(p+=m,e?p<0:f<=p)throw new s(c)}for(;e?p>=0:f>p;p+=m)p in h&&(u=n(u,h[p],p,d));return u}};e.exports={left:l(!1),right:l(!0)}},34527:function(e,t,n){"use strict";var r=n(43724),i=n(34376),o=TypeError,a=Object.getOwnPropertyDescriptor,s=r&&!function(){if(void 0!==this)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(e){return e instanceof TypeError}}();e.exports=s?function(e,t){if(i(e)&&!a(e,"length").writable)throw new o("Cannot set read only .length");return e.length=t}:function(e,t){return e.length=t}},67680:function(e,t,n){"use strict";var r=n(79504);e.exports=r([].slice)},74488:function(e,t,n){"use strict";var r=n(67680),i=Math.floor,o=function(e,t){var n=e.length;if(n<8){var a,s,c=1;while(c0)e[s]=e[--s];s!==c++&&(e[s]=a)}}else{var l=i(n/2),u=o(r(e,0,l),t),d=o(r(e,l),t),h=u.length,f=d.length,p=0,m=0;while(p1?arguments[1]:void 0);while(t=t?t.next:n.first){r(t.value,t.key,this);while(t&&t.removed)t=t.previous}},has:function(e){return!!_(this,e)}}),o(h,n?{get:function(e){var t=_(this,e);return t&&t.value},set:function(e,t){return y(this,0===e?0:e,t)}}:{add:function(e){return y(this,e=0===e?0:e,e)}}),f&&i(h,"size",{configurable:!0,get:function(){return m(this).size}}),d},setStrong:function(e,t,n){var r=t+" Iterator",i=g(t),o=g(r);u(e,t,function(e,t){v(this,{type:r,target:e,state:i(e),kind:t,last:null})},function(){var e=o(this),t=e.kind,n=e.last;while(n&&n.removed)n=n.previous;return e.target&&(e.last=n=n?n.next:e.state.first)?d("keys"===t?n.key:"values"===t?n.value:[n.key,n.value],!1):(e.target=null,d(void 0,!0))},n?"entries":"values",!n,!0),h(t)}}},91625:function(e,t,n){"use strict";var r=n(79504),i=n(56279),o=n(3451).getWeakData,a=n(90679),s=n(28551),c=n(64117),l=n(20034),u=n(72652),d=n(59213),h=n(39297),f=n(91181),p=f.set,m=f.getterFor,v=d.find,g=d.findIndex,y=r([].splice),_=0,b=function(e){return e.frozen||(e.frozen=new M)},M=function(){this.entries=[]},A=function(e,t){return v(e.entries,function(e){return e[0]===t})};M.prototype={get:function(e){var t=A(this,e);if(t)return t[1]},has:function(e){return!!A(this,e)},set:function(e,t){var n=A(this,e);n?n[1]=t:this.entries.push([e,t])},delete:function(e){var t=g(this.entries,function(t){return t[0]===e});return~t&&y(this.entries,t,1),!!~t}},e.exports={getConstructor:function(e,t,n,r){var d=e(function(e,i){a(e,f),p(e,{type:t,id:_++,frozen:null}),c(i)||u(i,e[r],{that:e,AS_ENTRIES:n})}),f=d.prototype,v=m(t),g=function(e,t,n){var r=v(e),i=o(s(t),!0);return!0===i?b(r).set(t,n):i[r.id]=n,e};return i(f,{delete:function(e){var t=v(this);if(!l(e))return!1;var n=o(e);return!0===n?b(t)["delete"](e):n&&h(n,t.id)&&delete n[t.id]},has:function(e){var t=v(this);if(!l(e))return!1;var n=o(e);return!0===n?b(t).has(e):n&&h(n,t.id)}}),i(f,n?{get:function(e){var t=v(this);if(l(e)){var n=o(e);if(!0===n)return b(t).get(e);if(n)return n[t.id]}},set:function(e,t){return g(this,e,t)}}:{add:function(e){return g(this,e,!0)}}),d}}},16468:function(e,t,n){"use strict";var r=n(46518),i=n(44576),o=n(79504),a=n(92796),s=n(36840),c=n(3451),l=n(72652),u=n(90679),d=n(94901),h=n(64117),f=n(20034),p=n(79039),m=n(84428),v=n(10687),g=n(23167);e.exports=function(e,t,n){var y=-1!==e.indexOf("Map"),_=-1!==e.indexOf("Weak"),b=y?"set":"add",M=i[e],A=M&&M.prototype,w=M,x={},k=function(e){var t=o(A[e]);s(A,e,"add"===e?function(e){return t(this,0===e?0:e),this}:"delete"===e?function(e){return!(_&&!f(e))&&t(this,0===e?0:e)}:"get"===e?function(e){return _&&!f(e)?void 0:t(this,0===e?0:e)}:"has"===e?function(e){return!(_&&!f(e))&&t(this,0===e?0:e)}:function(e,n){return t(this,0===e?0:e,n),this})},L=a(e,!d(M)||!(_||A.forEach&&!p(function(){(new M).entries().next()})));if(L)w=n.getConstructor(t,e,y,b),c.enable();else if(a(e,!0)){var C=new w,S=C[b](_?{}:-0,1)!==C,z=p(function(){C.has(1)}),T=m(function(e){new M(e)}),O=!_&&p(function(){var e=new M,t=5;while(t--)e[b](t,t);return!e.has(-0)});T||(w=t(function(e,t){u(e,A);var n=g(new M,e,w);return h(t)||l(t,n[b],{that:n,AS_ENTRIES:y}),n}),w.prototype=A,A.constructor=w),(z||O)&&(k("delete"),k("has"),y&&k("get")),(O||S)&&k(b),_&&A.clear&&delete A.clear}return x[e]=w,r({global:!0,constructor:!0,forced:w!==M},x),v(w,e),_||n.setStrong(w,e,y),w}},77740:function(e,t,n){"use strict";var r=n(39297),i=n(35031),o=n(77347),a=n(24913);e.exports=function(e,t,n){for(var s=i(t),c=a.f,l=o.f,u=0;u"+c+""}},62529:function(e){"use strict";e.exports=function(e,t){return{value:e,done:t}}},66699:function(e,t,n){"use strict";var r=n(43724),i=n(24913),o=n(6980);e.exports=r?function(e,t,n){return i.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},6980:function(e){"use strict";e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},97040:function(e,t,n){"use strict";var r=n(43724),i=n(24913),o=n(6980);e.exports=function(e,t,n){r?i.f(e,t,o(0,n)):e[t]=n}},53640:function(e,t,n){"use strict";var r=n(28551),i=n(84270),o=TypeError;e.exports=function(e){if(r(this),"string"===e||"default"===e)e="string";else if("number"!==e)throw new o("Incorrect hint");return i(this,e)}},62106:function(e,t,n){"use strict";var r=n(50283),i=n(24913);e.exports=function(e,t,n){return n.get&&r(n.get,t,{getter:!0}),n.set&&r(n.set,t,{setter:!0}),i.f(e,t,n)}},36840:function(e,t,n){"use strict";var r=n(94901),i=n(24913),o=n(50283),a=n(39433);e.exports=function(e,t,n,s){s||(s={});var c=s.enumerable,l=void 0!==s.name?s.name:t;if(r(n)&&o(n,l,s),s.global)c?e[t]=n:a(t,n);else{try{s.unsafe?e[t]&&(c=!0):delete e[t]}catch(u){}c?e[t]=n:i.f(e,t,{value:n,enumerable:!1,configurable:!s.nonConfigurable,writable:!s.nonWritable})}return e}},56279:function(e,t,n){"use strict";var r=n(36840);e.exports=function(e,t,n){for(var i in t)r(e,i,t[i],n);return e}},39433:function(e,t,n){"use strict";var r=n(44576),i=Object.defineProperty;e.exports=function(e,t){try{i(r,e,{value:t,configurable:!0,writable:!0})}catch(n){r[e]=t}return t}},84606:function(e,t,n){"use strict";var r=n(16823),i=TypeError;e.exports=function(e,t){if(!delete e[t])throw new i("Cannot delete property "+r(t)+" of "+r(e))}},43724:function(e,t,n){"use strict";var r=n(79039);e.exports=!r(function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]})},4055:function(e,t,n){"use strict";var r=n(44576),i=n(20034),o=r.document,a=i(o)&&i(o.createElement);e.exports=function(e){return a?o.createElement(e):{}}},96837:function(e){"use strict";var t=TypeError,n=9007199254740991;e.exports=function(e){if(e>n)throw new t("Maximum allowed index exceeded");return e}},67400:function(e){"use strict";e.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},79296:function(e,t,n){"use strict";var r=n(4055),i=r("span").classList,o=i&&i.constructor&&i.constructor.prototype;e.exports=o===Object.prototype?void 0:o},88727:function(e){"use strict";e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},13709:function(e,t,n){"use strict";var r=n(82839),i=r.match(/firefox\/(\d+)/i);e.exports=!!i&&+i[1]},13763:function(e,t,n){"use strict";var r=n(82839);e.exports=/MSIE|Trident/.test(r)},44265:function(e,t,n){"use strict";var r=n(82839);e.exports=/ipad|iphone|ipod/i.test(r)&&"undefined"!=typeof Pebble},89544:function(e,t,n){"use strict";var r=n(82839);e.exports=/ipad|iphone|ipod/i.test(r)&&/applewebkit/i.test(r)},16193:function(e,t,n){"use strict";var r=n(84215);e.exports="NODE"===r},7860:function(e,t,n){"use strict";var r=n(82839);e.exports=/web0s(?!.*chrome)/i.test(r)},82839:function(e,t,n){"use strict";var r=n(44576),i=r.navigator,o=i&&i.userAgent;e.exports=o?String(o):""},39519:function(e,t,n){"use strict";var r,i,o=n(44576),a=n(82839),s=o.process,c=o.Deno,l=s&&s.versions||c&&c.version,u=l&&l.v8;u&&(r=u.split("."),i=r[0]>0&&r[0]<4?1:+(r[0]+r[1])),!i&&a&&(r=a.match(/Edge\/(\d+)/),(!r||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/),r&&(i=+r[1]))),e.exports=i},3607:function(e,t,n){"use strict";var r=n(82839),i=r.match(/AppleWebKit\/(\d+)\./);e.exports=!!i&&+i[1]},84215:function(e,t,n){"use strict";var r=n(44576),i=n(82839),o=n(22195),a=function(e){return i.slice(0,e.length)===e};e.exports=function(){return a("Bun/")?"BUN":a("Cloudflare-Workers")?"CLOUDFLARE":a("Deno/")?"DENO":a("Node.js/")?"NODE":r.Bun&&"string"==typeof Bun.version?"BUN":r.Deno&&"object"==typeof Deno.version?"DENO":"process"===o(r.process)?"NODE":r.window&&r.document?"BROWSER":"REST"}()},46518:function(e,t,n){"use strict";var r=n(44576),i=n(77347).f,o=n(66699),a=n(36840),s=n(39433),c=n(77740),l=n(92796);e.exports=function(e,t){var n,u,d,h,f,p,m=e.target,v=e.global,g=e.stat;if(u=v?r:g?r[m]||s(m,{}):r[m]&&r[m].prototype,u)for(d in t){if(f=t[d],e.dontCallGetSet?(p=i(u,d),h=p&&p.value):h=u[d],n=l(v?d:m+(g?".":"#")+d,e.forced),!n&&void 0!==h){if(typeof f==typeof h)continue;c(f,h)}(e.sham||h&&h.sham)&&o(f,"sham",!0),a(u,d,f,e)}}},79039:function(e){"use strict";e.exports=function(e){try{return!!e()}catch(t){return!0}}},89228:function(e,t,n){"use strict";n(27495);var r=n(69565),i=n(36840),o=n(57323),a=n(79039),s=n(78227),c=n(66699),l=s("species"),u=RegExp.prototype;e.exports=function(e,t,n,d){var h=s(e),f=!a(function(){var t={};return t[h]=function(){return 7},7!==""[e](t)}),p=f&&!a(function(){var t=!1,n=/a/;if("split"===e){var r={};r[l]=function(){return n},n={constructor:r,flags:""},n[h]=/./[h]}return n.exec=function(){return t=!0,null},n[h](""),!t});if(!f||!p||n){var m=/./[h],v=t(h,""[e],function(e,t,n,i,a){var s=t.exec;return s===o||s===u.exec?f&&!a?{done:!0,value:r(m,t,n,i)}:{done:!0,value:r(e,n,t,i)}:{done:!1}});i(String.prototype,e,v[0]),i(u,h,v[1])}d&&c(u[h],"sham",!0)}},70259:function(e,t,n){"use strict";var r=n(34376),i=n(26198),o=n(96837),a=n(76080),s=n(97040),c=function(e,t,n,l,u,d,h,f){var p,m,v=u,g=0,y=!!h&&a(h,f);while(g0&&r(p)?(m=i(p),v=c(e,t,p,m,v,d-1)-1):(o(v+1),s(e,v,p)),v++),g++;return v};e.exports=c},92744:function(e,t,n){"use strict";var r=n(79039);e.exports=!r(function(){return Object.isExtensible(Object.preventExtensions({}))})},18745:function(e,t,n){"use strict";var r=n(40616),i=Function.prototype,o=i.apply,a=i.call;e.exports="object"==typeof Reflect&&Reflect.apply||(r?a.bind(o):function(){return a.apply(o,arguments)})},76080:function(e,t,n){"use strict";var r=n(27476),i=n(79306),o=n(40616),a=r(r.bind);e.exports=function(e,t){return i(e),void 0===t?e:o?a(e,t):function(){return e.apply(t,arguments)}}},40616:function(e,t,n){"use strict";var r=n(79039);e.exports=!r(function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")})},30566:function(e,t,n){"use strict";var r=n(79504),i=n(79306),o=n(20034),a=n(39297),s=n(67680),c=n(40616),l=Function,u=r([].concat),d=r([].join),h={},f=function(e,t,n){if(!a(h,t)){for(var r=[],i=0;i]*>)/g,u=/\$([$&'`]|\d{1,2})/g;e.exports=function(e,t,n,r,d,h){var f=n+e.length,p=r.length,m=u;return void 0!==d&&(d=i(d),m=l),s(h,m,function(i,s){var l;switch(a(s,0)){case"$":return"$";case"&":return e;case"`":return c(t,0,n);case"'":return c(t,f);case"<":l=d[c(s,1,-1)];break;default:var u=+s;if(0===u)return i;if(u>p){var h=o(u/10);return 0===h?i:h<=p?void 0===r[h-1]?a(s,1):r[h-1]+a(s,1):i}l=r[u-1]}return void 0===l?"":l})}},44576:function(e,t,n){"use strict";var r=function(e){return e&&e.Math===Math&&e};e.exports=r("object"==typeof globalThis&&globalThis)||r("object"==typeof window&&window)||r("object"==typeof self&&self)||r("object"==typeof n.g&&n.g)||r("object"==typeof this&&this)||function(){return this}()||Function("return this")()},39297:function(e,t,n){"use strict";var r=n(79504),i=n(48981),o=r({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return o(i(e),t)}},30421:function(e){"use strict";e.exports={}},90757:function(e){"use strict";e.exports=function(e,t){try{1===arguments.length?console.error(e):console.error(e,t)}catch(n){}}},20397:function(e,t,n){"use strict";var r=n(97751);e.exports=r("document","documentElement")},35917:function(e,t,n){"use strict";var r=n(43724),i=n(79039),o=n(4055);e.exports=!r&&!i(function(){return 7!==Object.defineProperty(o("div"),"a",{get:function(){return 7}}).a})},88490:function(e){"use strict";var t=Array,n=Math.abs,r=Math.pow,i=Math.floor,o=Math.log,a=Math.LN2,s=function(e,s,c){var l,u,d,h=t(c),f=8*c-s-1,p=(1<>1,v=23===s?r(2,-24)-r(2,-77):0,g=e<0||0===e&&1/e<0?1:0,y=0;e=n(e),e!==e||e===1/0?(u=e!==e?1:0,l=p):(l=i(o(e)/a),d=r(2,-l),e*d<1&&(l--,d*=2),e+=l+m>=1?v/d:v*r(2,1-m),e*d>=2&&(l++,d/=2),l+m>=p?(u=0,l=p):l+m>=1?(u=(e*d-1)*r(2,s),l+=m):(u=e*r(2,m-1)*r(2,s),l=0));while(s>=8)h[y++]=255&u,u/=256,s-=8;l=l<0)h[y++]=255&l,l/=256,f-=8;return h[y-1]|=128*g,h},c=function(e,t){var n,i=e.length,o=8*i-t-1,a=(1<>1,c=o-7,l=i-1,u=e[l--],d=127&u;u>>=7;while(c>0)d=256*d+e[l--],c-=8;n=d&(1<<-c)-1,d>>=-c,c+=t;while(c>0)n=256*n+e[l--],c-=8;if(0===d)d=1-s;else{if(d===a)return n?NaN:u?-1/0:1/0;n+=r(2,t),d-=s}return(u?-1:1)*n*r(2,d-t)};e.exports={pack:s,unpack:c}},47055:function(e,t,n){"use strict";var r=n(79504),i=n(79039),o=n(22195),a=Object,s=r("".split);e.exports=i(function(){return!a("z").propertyIsEnumerable(0)})?function(e){return"String"===o(e)?s(e,""):a(e)}:a},23167:function(e,t,n){"use strict";var r=n(94901),i=n(20034),o=n(52967);e.exports=function(e,t,n){var a,s;return o&&r(a=t.constructor)&&a!==n&&i(s=a.prototype)&&s!==n.prototype&&o(e,s),e}},33706:function(e,t,n){"use strict";var r=n(79504),i=n(94901),o=n(77629),a=r(Function.toString);i(o.inspectSource)||(o.inspectSource=function(e){return a(e)}),e.exports=o.inspectSource},3451:function(e,t,n){"use strict";var r=n(46518),i=n(79504),o=n(30421),a=n(20034),s=n(39297),c=n(24913).f,l=n(38480),u=n(10298),d=n(34124),h=n(33392),f=n(92744),p=!1,m=h("meta"),v=0,g=function(e){c(e,m,{value:{objectID:"O"+v++,weakData:{}}})},y=function(e,t){if(!a(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!s(e,m)){if(!d(e))return"F";if(!t)return"E";g(e)}return e[m].objectID},_=function(e,t){if(!s(e,m)){if(!d(e))return!0;if(!t)return!1;g(e)}return e[m].weakData},b=function(e){return f&&p&&d(e)&&!s(e,m)&&g(e),e},M=function(){A.enable=function(){},p=!0;var e=l.f,t=i([].splice),n={};n[m]=1,e(n).length&&(l.f=function(n){for(var r=e(n),i=0,o=r.length;iy;y++)if(b=T(e[y]),b&&l(m,b))return b;return new p(!1)}v=u(e,g)}M=k?e.next:v.next;while(!(A=i(M,v)).done){var O=A.value;try{b=T(O)}catch(H){if(!v)throw H;h(v,"throw",H)}if("object"==typeof b&&b&&l(m,b))return b}return new p(!1)}},9539:function(e,t,n){"use strict";var r=n(69565),i=n(28551),o=n(55966);e.exports=function(e,t,n){var a,s;i(e);try{if(a=o(e,"return"),!a){if("throw"===t)throw n;return n}a=r(a,e)}catch(c){s=!0,a=c}if("throw"===t)throw n;if(s)throw a;return i(a),n}},33994:function(e,t,n){"use strict";var r=n(57657).IteratorPrototype,i=n(2360),o=n(6980),a=n(10687),s=n(26269),c=function(){return this};e.exports=function(e,t,n,l){var u=t+" Iterator";return e.prototype=i(r,{next:o(+!l,n)}),a(e,u,!1,!0),s[u]=c,e}},51088:function(e,t,n){"use strict";var r=n(46518),i=n(69565),o=n(96395),a=n(10350),s=n(94901),c=n(33994),l=n(42787),u=n(52967),d=n(10687),h=n(66699),f=n(36840),p=n(78227),m=n(26269),v=n(57657),g=a.PROPER,y=a.CONFIGURABLE,_=v.IteratorPrototype,b=v.BUGGY_SAFARI_ITERATORS,M=p("iterator"),A="keys",w="values",x="entries",k=function(){return this};e.exports=function(e,t,n,a,p,v,L){c(n,t,a);var C,S,z,T=function(e){if(e===p&&V)return V;if(!b&&e&&e in D)return D[e];switch(e){case A:return function(){return new n(this,e)};case w:return function(){return new n(this,e)};case x:return function(){return new n(this,e)}}return function(){return new n(this)}},O=t+" Iterator",H=!1,D=e.prototype,Y=D[M]||D["@@iterator"]||p&&D[p],V=!b&&Y||T(p),P="Array"===t&&D.entries||Y;if(P&&(C=l(P.call(new e)),C!==Object.prototype&&C.next&&(o||l(C)===_||(u?u(C,_):s(C[M])||f(C,M,k)),d(C,O,!0,!0),o&&(m[O]=k))),g&&p===w&&Y&&Y.name!==w&&(!o&&y?h(D,"name",w):(H=!0,V=function(){return i(Y,this)})),p)if(S={values:T(w),keys:v?V:T(A),entries:T(x)},L)for(z in S)(b||H||!(z in D))&&f(D,z,S[z]);else r({target:t,proto:!0,forced:b||H},S);return o&&!L||D[M]===V||f(D,M,V,{name:p}),m[t]=V,S}},57657:function(e,t,n){"use strict";var r,i,o,a=n(79039),s=n(94901),c=n(20034),l=n(2360),u=n(42787),d=n(36840),h=n(78227),f=n(96395),p=h("iterator"),m=!1;[].keys&&(o=[].keys(),"next"in o?(i=u(u(o)),i!==Object.prototype&&(r=i)):m=!0);var v=!c(r)||a(function(){var e={};return r[p].call(e)!==e});v?r={}:f&&(r=l(r)),s(r[p])||d(r,p,function(){return this}),e.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:m}},26269:function(e){"use strict";e.exports={}},26198:function(e,t,n){"use strict";var r=n(18014);e.exports=function(e){return r(e.length)}},50283:function(e,t,n){"use strict";var r=n(79504),i=n(79039),o=n(94901),a=n(39297),s=n(43724),c=n(10350).CONFIGURABLE,l=n(33706),u=n(91181),d=u.enforce,h=u.get,f=String,p=Object.defineProperty,m=r("".slice),v=r("".replace),g=r([].join),y=s&&!i(function(){return 8!==p(function(){},"length",{value:8}).length}),_=String(String).split("String"),b=e.exports=function(e,t,n){"Symbol("===m(f(t),0,7)&&(t="["+v(f(t),/^Symbol\(([^)]*)\).*$/,"$1")+"]"),n&&n.getter&&(t="get "+t),n&&n.setter&&(t="set "+t),(!a(e,"name")||c&&e.name!==t)&&(s?p(e,"name",{value:t,configurable:!0}):e.name=t),y&&n&&a(n,"arity")&&e.length!==n.arity&&p(e,"length",{value:n.arity});try{n&&a(n,"constructor")&&n.constructor?s&&p(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(i){}var r=d(e);return a(r,"source")||(r.source=g(_,"string"==typeof t?t:"")),e};Function.prototype.toString=b(function(){return o(this)&&h(this).source||l(this)},"toString")},53250:function(e){"use strict";var t=Math.expm1,n=Math.exp;e.exports=!t||t(10)>22025.465794806718||t(10)<22025.465794806718||-2e-17!==t(-2e-17)?function(e){var t=+e;return 0===t?t:t>-1e-6&&t<1e-6?t+t*t/2:n(t)-1}:t},33164:function(e,t,n){"use strict";var r=n(77782),i=n(53602),o=Math.abs,a=2220446049250313e-31;e.exports=function(e,t,n,s){var c=+e,l=o(c),u=r(c);if(ln||h!==h?u*(1/0):u*h}},15617:function(e,t,n){"use strict";var r=n(33164),i=1.1920928955078125e-7,o=34028234663852886e22,a=11754943508222875e-54;e.exports=Math.fround||function(e){return r(e,i,o,a)}},49340:function(e){"use strict";var t=Math.log,n=Math.LOG10E;e.exports=Math.log10||function(e){return t(e)*n}},7740:function(e){"use strict";var t=Math.log;e.exports=Math.log1p||function(e){var n=+e;return n>-1e-8&&n<1e-8?n-n*n/2:t(1+n)}},67787:function(e){"use strict";var t=Math.log,n=Math.LN2;e.exports=Math.log2||function(e){return t(e)/n}},53602:function(e){"use strict";var t=2220446049250313e-31,n=1/t;e.exports=function(e){return e+n-n}},77782:function(e){"use strict";e.exports=Math.sign||function(e){var t=+e;return 0===t||t!==t?t:t<0?-1:1}},80741:function(e){"use strict";var t=Math.ceil,n=Math.floor;e.exports=Math.trunc||function(e){var r=+e;return(r>0?n:t)(r)}},91955:function(e,t,n){"use strict";var r,i,o,a,s,c=n(44576),l=n(93389),u=n(76080),d=n(59225).set,h=n(18265),f=n(89544),p=n(44265),m=n(7860),v=n(16193),g=c.MutationObserver||c.WebKitMutationObserver,y=c.document,_=c.process,b=c.Promise,M=l("queueMicrotask");if(!M){var A=new h,w=function(){var e,t;v&&(e=_.domain)&&e.exit();while(t=A.get())try{t()}catch(n){throw A.head&&r(),n}e&&e.enter()};f||v||m||!g||!y?!p&&b&&b.resolve?(a=b.resolve(void 0),a.constructor=b,s=u(a.then,a),r=function(){s(w)}):v?r=function(){_.nextTick(w)}:(d=u(d,c),r=function(){d(w)}):(i=!0,o=y.createTextNode(""),new g(w).observe(o,{characterData:!0}),r=function(){o.data=i=!i}),M=function(e){A.head||r(),A.add(e)}}e.exports=M},27819:function(e,t,n){"use strict";var r=n(79039);e.exports=!r(function(){var e="9007199254740993",t=JSON.rawJSON(e);return!JSON.isRawJSON(t)||JSON.stringify(t)!==e})},36043:function(e,t,n){"use strict";var r=n(79306),i=TypeError,o=function(e){var t,n;this.promise=new e(function(e,r){if(void 0!==t||void 0!==n)throw new i("Bad Promise constructor");t=e,n=r}),this.resolve=r(t),this.reject=r(n)};e.exports.f=function(e){return new o(e)}},60511:function(e,t,n){"use strict";var r=n(60788),i=TypeError;e.exports=function(e){if(r(e))throw new i("The method doesn't accept regular expressions");return e}},50360:function(e,t,n){"use strict";var r=n(44576),i=r.isFinite;e.exports=Number.isFinite||function(e){return"number"==typeof e&&i(e)}},33904:function(e,t,n){"use strict";var r=n(44576),i=n(79039),o=n(79504),a=n(655),s=n(43802).trim,c=n(47452),l=o("".charAt),u=r.parseFloat,d=r.Symbol,h=d&&d.iterator,f=1/u(c+"-0")!==-1/0||h&&!i(function(){u(Object(h))});e.exports=f?function(e){var t=s(a(e)),n=u(t);return 0===n&&"-"===l(t,0)?-0:n}:u},52703:function(e,t,n){"use strict";var r=n(44576),i=n(79039),o=n(79504),a=n(655),s=n(43802).trim,c=n(47452),l=r.parseInt,u=r.Symbol,d=u&&u.iterator,h=/^[+-]?0x/i,f=o(h.exec),p=8!==l(c+"08")||22!==l(c+"0x16")||d&&!i(function(){l(Object(d))});e.exports=p?function(e,t){var n=s(a(e));return l(n,t>>>0||(f(h,n)?16:10))}:l},44213:function(e,t,n){"use strict";var r=n(43724),i=n(79504),o=n(69565),a=n(79039),s=n(71072),c=n(33717),l=n(48773),u=n(48981),d=n(47055),h=Object.assign,f=Object.defineProperty,p=i([].concat);e.exports=!h||a(function(){if(r&&1!==h({b:1},h(f({},"a",{enumerable:!0,get:function(){f(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},n=Symbol("assign detection"),i="abcdefghijklmnopqrst";return e[n]=7,i.split("").forEach(function(e){t[e]=e}),7!==h({},e)[n]||s(h({},t)).join("")!==i})?function(e,t){var n=u(e),i=arguments.length,a=1,h=c.f,f=l.f;while(i>a){var m,v=d(arguments[a++]),g=h?p(s(v),h(v)):s(v),y=g.length,_=0;while(y>_)m=g[_++],r&&!o(f,v,m)||(n[m]=v[m])}return n}:h},2360:function(e,t,n){"use strict";var r,i=n(28551),o=n(96801),a=n(88727),s=n(30421),c=n(20397),l=n(4055),u=n(66119),d=">",h="<",f="prototype",p="script",m=u("IE_PROTO"),v=function(){},g=function(e){return h+p+d+e+h+"/"+p+d},y=function(e){e.write(g("")),e.close();var t=e.parentWindow.Object;return e=null,t},_=function(){var e,t=l("iframe"),n="java"+p+":";return t.style.display="none",c.appendChild(t),t.src=String(n),e=t.contentWindow.document,e.open(),e.write(g("document.F=Object")),e.close(),e.F},b=function(){try{r=new ActiveXObject("htmlfile")}catch(t){}b="undefined"!=typeof document?document.domain&&r?y(r):_():y(r);var e=a.length;while(e--)delete b[f][a[e]];return b()};s[m]=!0,e.exports=Object.create||function(e,t){var n;return null!==e?(v[f]=i(e),n=new v,v[f]=null,n[m]=e):n=b(),void 0===t?n:o.f(n,t)}},96801:function(e,t,n){"use strict";var r=n(43724),i=n(48686),o=n(24913),a=n(28551),s=n(25397),c=n(71072);t.f=r&&!i?Object.defineProperties:function(e,t){a(e);var n,r=s(t),i=c(t),l=i.length,u=0;while(l>u)o.f(e,n=i[u++],r[n]);return e}},24913:function(e,t,n){"use strict";var r=n(43724),i=n(35917),o=n(48686),a=n(28551),s=n(56969),c=TypeError,l=Object.defineProperty,u=Object.getOwnPropertyDescriptor,d="enumerable",h="configurable",f="writable";t.f=r?o?function(e,t,n){if(a(e),t=s(t),a(n),"function"===typeof e&&"prototype"===t&&"value"in n&&f in n&&!n[f]){var r=u(e,t);r&&r[f]&&(e[t]=n.value,n={configurable:h in n?n[h]:r[h],enumerable:d in n?n[d]:r[d],writable:!1})}return l(e,t,n)}:l:function(e,t,n){if(a(e),t=s(t),a(n),i)try{return l(e,t,n)}catch(r){}if("get"in n||"set"in n)throw new c("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},77347:function(e,t,n){"use strict";var r=n(43724),i=n(69565),o=n(48773),a=n(6980),s=n(25397),c=n(56969),l=n(39297),u=n(35917),d=Object.getOwnPropertyDescriptor;t.f=r?d:function(e,t){if(e=s(e),t=c(t),u)try{return d(e,t)}catch(n){}if(l(e,t))return a(!i(o.f,e,t),e[t])}},10298:function(e,t,n){"use strict";var r=n(22195),i=n(25397),o=n(38480).f,a=n(67680),s="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],c=function(e){try{return o(e)}catch(t){return a(s)}};e.exports.f=function(e){return s&&"Window"===r(e)?c(e):o(i(e))}},38480:function(e,t,n){"use strict";var r=n(61828),i=n(88727),o=i.concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return r(e,o)}},33717:function(e,t){"use strict";t.f=Object.getOwnPropertySymbols},42787:function(e,t,n){"use strict";var r=n(39297),i=n(94901),o=n(48981),a=n(66119),s=n(12211),c=a("IE_PROTO"),l=Object,u=l.prototype;e.exports=s?l.getPrototypeOf:function(e){var t=o(e);if(r(t,c))return t[c];var n=t.constructor;return i(n)&&t instanceof n?n.prototype:t instanceof l?u:null}},34124:function(e,t,n){"use strict";var r=n(79039),i=n(20034),o=n(22195),a=n(15652),s=Object.isExtensible,c=r(function(){s(1)});e.exports=c||a?function(e){return!!i(e)&&((!a||"ArrayBuffer"!==o(e))&&(!s||s(e)))}:s},1625:function(e,t,n){"use strict";var r=n(79504);e.exports=r({}.isPrototypeOf)},61828:function(e,t,n){"use strict";var r=n(79504),i=n(39297),o=n(25397),a=n(19617).indexOf,s=n(30421),c=r([].push);e.exports=function(e,t){var n,r=o(e),l=0,u=[];for(n in r)!i(s,n)&&i(r,n)&&c(u,n);while(t.length>l)i(r,n=t[l++])&&(~a(u,n)||c(u,n));return u}},71072:function(e,t,n){"use strict";var r=n(61828),i=n(88727);e.exports=Object.keys||function(e){return r(e,i)}},48773:function(e,t){"use strict";var n={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,i=r&&!n.call({1:2},1);t.f=i?function(e){var t=r(this,e);return!!t&&t.enumerable}:n},42551:function(e,t,n){"use strict";var r=n(96395),i=n(44576),o=n(79039),a=n(3607);e.exports=r||!o(function(){if(!(a&&a<535)){var e=Math.random();__defineSetter__.call(null,e,function(){}),delete i[e]}})},52967:function(e,t,n){"use strict";var r=n(46706),i=n(20034),o=n(67750),a=n(73506);e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,n={};try{e=r(Object.prototype,"__proto__","set"),e(n,[]),t=n instanceof Array}catch(s){}return function(n,r){return o(n),a(r),i(n)?(t?e(n,r):n.__proto__=r,n):n}}():void 0)},32357:function(e,t,n){"use strict";var r=n(43724),i=n(79039),o=n(79504),a=n(42787),s=n(71072),c=n(25397),l=n(48773).f,u=o(l),d=o([].push),h=r&&i(function(){var e=Object.create(null);return e[2]=2,!u(e,2)}),f=function(e){return function(t){var n,i=c(t),o=s(i),l=h&&null===a(i),f=o.length,p=0,m=[];while(f>p)n=o[p++],r&&!(l?n in i:u(i,n))||d(m,e?[n,i[n]]:i[n]);return m}};e.exports={entries:f(!0),values:f(!1)}},53179:function(e,t,n){"use strict";var r=n(92140),i=n(36955);e.exports=r?{}.toString:function(){return"[object "+i(this)+"]"}},84270:function(e,t,n){"use strict";var r=n(69565),i=n(94901),o=n(20034),a=TypeError;e.exports=function(e,t){var n,s;if("string"===t&&i(n=e.toString)&&!o(s=r(n,e)))return s;if(i(n=e.valueOf)&&!o(s=r(n,e)))return s;if("string"!==t&&i(n=e.toString)&&!o(s=r(n,e)))return s;throw new a("Can't convert object to primitive value")}},35031:function(e,t,n){"use strict";var r=n(97751),i=n(79504),o=n(38480),a=n(33717),s=n(28551),c=i([].concat);e.exports=r("Reflect","ownKeys")||function(e){var t=o.f(s(e)),n=a.f;return n?c(t,n(e)):t}},616:function(e,t,n){"use strict";var r=n(79504),i=n(39297),o=SyntaxError,a=parseInt,s=String.fromCharCode,c=r("".charAt),l=r("".slice),u=r(/./.exec),d={'\\"':'"',"\\\\":"\\","\\/":"/","\\b":"\b","\\f":"\f","\\n":"\n","\\r":"\r","\\t":"\t"},h=/^[\da-f]{4}$/i,f=/^[\u0000-\u001F]$/;e.exports=function(e,t){var n=!0,r="";while(t0&&v(l,s.lastIndex-1);s.lastIndex>0&&(!s.multiline||s.multiline&&"\n"!==z&&"\r"!==z&&"\u2028"!==z&&"\u2029"!==z)&&(L="(?: (?:"+L+"))",S=" "+S,C++),n=new RegExp("^(?:"+L+")",k)}A&&(n=new RegExp("^"+L+"$(?!\\s)",k)),b&&(i=s.lastIndex);var T=r(p,w?n:s,S);return w?T?(T.input=l,T[0]=_(T[0],C),T.index=s.lastIndex,s.lastIndex+=T[0].length):s.lastIndex=0:b&&T&&(s.lastIndex=s.global?T.index+T[0].length:i),A&&T&&T.length>1&&r(f,T[0],n,function(){for(var e=1;eb)","g");return"b"!==e.exec("b").groups.a||"bc"!=="b".replace(e,"$c")})},67750:function(e,t,n){"use strict";var r=n(64117),i=TypeError;e.exports=function(e){if(r(e))throw new i("Can't call method on "+e);return e}},93389:function(e,t,n){"use strict";var r=n(44576),i=n(43724),o=Object.getOwnPropertyDescriptor;e.exports=function(e){if(!i)return r[e];var t=o(r,e);return t&&t.value}},3470:function(e){"use strict";e.exports=Object.is||function(e,t){return e===t?0!==e||1/e===1/t:e!==e&&t!==t}},79472:function(e,t,n){"use strict";var r=n(44576),i=n(18745),o=n(94901),a=n(84215),s=n(82839),c=n(67680),l=n(22812),u=r.Function,d=/MSIE .\./.test(s)||"BUN"===a&&function(){var e=r.Bun.version.split(".");return e.length<3||"0"===e[0]&&(e[1]<3||"3"===e[1]&&"0"===e[2])}();e.exports=function(e,t){var n=t?2:1;return d?function(r,a){var s=l(arguments.length,1)>n,d=o(r)?r:u(r),h=s?c(arguments,n):[],f=s?function(){i(d,this,h)}:d;return t?e(f,a):e(f)}:e}},87633:function(e,t,n){"use strict";var r=n(97751),i=n(62106),o=n(78227),a=n(43724),s=o("species");e.exports=function(e){var t=r(e);a&&t&&!t[s]&&i(t,s,{configurable:!0,get:function(){return this}})}},10687:function(e,t,n){"use strict";var r=n(24913).f,i=n(39297),o=n(78227),a=o("toStringTag");e.exports=function(e,t,n){e&&!n&&(e=e.prototype),e&&!i(e,a)&&r(e,a,{configurable:!0,value:t})}},66119:function(e,t,n){"use strict";var r=n(25745),i=n(33392),o=r("keys");e.exports=function(e){return o[e]||(o[e]=i(e))}},77629:function(e,t,n){"use strict";var r=n(96395),i=n(44576),o=n(39433),a="__core-js_shared__",s=e.exports=i[a]||o(a,{});(s.versions||(s.versions=[])).push({version:"3.49.0",mode:r?"pure":"global",copyright:"© 2013–2025 Denis Pushkarev (zloirock.ru), 2025–2026 CoreJS Company (core-js.io). All rights reserved.",license:"https://github.com/zloirock/core-js/blob/v3.49.0/LICENSE",source:"https://github.com/zloirock/core-js"})},25745:function(e,t,n){"use strict";var r=n(77629);e.exports=function(e,t){return r[e]||(r[e]=t||{})}},2293:function(e,t,n){"use strict";var r=n(28551),i=n(35548),o=n(64117),a=n(78227),s=a("species");e.exports=function(e,t){var n,a=r(e).constructor;return void 0===a||o(n=r(a)[s])?t:i(n)}},23061:function(e,t,n){"use strict";var r=n(79039);e.exports=function(e){return r(function(){var t=""[e]('"');return t!==t.toLowerCase()||t.split('"').length>3})}},68183:function(e,t,n){"use strict";var r=n(79504),i=n(91291),o=n(655),a=n(67750),s=r("".charAt),c=r("".charCodeAt),l=r("".slice),u=function(e){return function(t,n){var r,u,d=o(a(t)),h=i(n),f=d.length;return h<0||h>=f?e?"":void 0:(r=c(d,h),r<55296||r>56319||h+1===f||(u=c(d,h+1))<56320||u>57343?e?s(d,h):r:e?l(d,h,h+2):u-56320+(r-55296<<10)+65536)}};e.exports={codeAt:u(!1),charAt:u(!0)}},83063:function(e,t,n){"use strict";var r=n(82839);e.exports=/Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\w+)? Safari\//.test(r)},60533:function(e,t,n){"use strict";var r=n(79504),i=n(18014),o=n(655),a=n(72333),s=n(67750),c=r(a),l=r("".slice),u=Math.ceil,d=function(e){return function(t,n,r){var a=o(s(t)),d=i(n),h=a.length;if(d<=h)return a;var f,p,m=void 0===r?" ":o(r);return""===m?a:(f=d-h,p=c(m,u(f/m.length)),p.length>f&&(p=l(p,0,f)),e?a+p:p+a)}};e.exports={start:d(!1),end:d(!0)}},3717:function(e,t,n){"use strict";var r=n(79504),i=2147483647,o=36,a=1,s=26,c=38,l=700,u=72,d=128,h="-",f=/[^\0-\u007E]/,p=/[.\u3002\uFF0E\uFF61]/g,m="Overflow: input needs wider integers to process",v=o-a,g=RangeError,y=r(p.exec),_=Math.floor,b=String.fromCharCode,M=r("".charCodeAt),A=r([].join),w=r([].push),x=r("".replace),k=r("".split),L=r("".toLowerCase),C=function(e){var t=[],n=0,r=e.length;while(n=55296&&i<=56319&&n>1,e+=_(e/t);while(e>v*s>>1)e=_(e/v),r+=o;return _(r+(v+1)*e/(e+c))},T=function(e){var t=[];e=C(e);var n,r,c=e.length,l=d,f=0,p=u;for(n=0;n=l&&r_((i-f)/x))throw new g(m);for(f+=(M-l)*x,l=M,n=0;ni)throw new g(m);if(r===l){var k=f,L=o;while(1){var T=L<=p?a:L>=p+s?s:L-p;if(k0;(c=s(c/2))&&(t+=t))c%2&&(n+=t);return n}},18866:function(e,t,n){"use strict";var r=n(43802).end,i=n(60706);e.exports=i("trimEnd")?function(){return r(this)}:"".trimEnd},60706:function(e,t,n){"use strict";var r=n(10350).PROPER,i=n(79039),o=n(47452),a="​…᠎";e.exports=function(e){return i(function(){return!!o[e]()||a[e]()!==a||r&&o[e].name!==e})}},53487:function(e,t,n){"use strict";var r=n(43802).start,i=n(60706);e.exports=i("trimStart")?function(){return r(this)}:"".trimStart},43802:function(e,t,n){"use strict";var r=n(79504),i=n(67750),o=n(655),a=n(47452),s=r("".replace),c=RegExp("^["+a+"]+"),l=RegExp("(^|[^"+a+"])["+a+"]+$"),u=function(e){return function(t){var n=o(i(t));return 1&e&&(n=s(n,c,"")),2&e&&(n=s(n,l,"$1")),n}};e.exports={start:u(1),end:u(2),trim:u(3)}},4495:function(e,t,n){"use strict";var r=n(39519),i=n(79039),o=n(44576),a=o.String;e.exports=!!Object.getOwnPropertySymbols&&!i(function(){var e=Symbol("symbol detection");return!a(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&r&&r<41})},58242:function(e,t,n){"use strict";var r=n(69565),i=n(97751),o=n(78227),a=n(36840);e.exports=function(){var e=i("Symbol"),t=e&&e.prototype,n=t&&t.valueOf,s=o("toPrimitive");t&&!t[s]&&a(t,s,function(e){return r(n,this)},{arity:1})}},91296:function(e,t,n){"use strict";var r=n(4495);e.exports=r&&!!Symbol["for"]&&!!Symbol.keyFor},59225:function(e,t,n){"use strict";var r,i,o,a,s=n(44576),c=n(18745),l=n(76080),u=n(94901),d=n(39297),h=n(79039),f=n(20397),p=n(67680),m=n(4055),v=n(22812),g=n(89544),y=n(16193),_=s.setImmediate,b=s.clearImmediate,M=s.process,A=s.Dispatch,w=s.Function,x=s.MessageChannel,k=s.String,L=0,C={},S="onreadystatechange";h(function(){r=s.location});var z=function(e){if(d(C,e)){var t=C[e];delete C[e],t()}},T=function(e){return function(){z(e)}},O=function(e){z(e.data)},H=function(e){s.postMessage(k(e),r.protocol+"//"+r.host)};_&&b||(_=function(e){v(arguments.length,1);var t=u(e)?e:w(e),n=p(arguments,1);return C[++L]=function(){c(t,void 0,n)},i(L),L},b=function(e){delete C[e]},y?i=function(e){M.nextTick(T(e))}:A&&A.now?i=function(e){A.now(T(e))}:x&&!g?(o=new x,a=o.port2,o.port1.onmessage=O,i=l(a.postMessage,a)):s.addEventListener&&u(s.postMessage)&&!s.importScripts&&r&&"file:"!==r.protocol&&!h(H)?(i=H,s.addEventListener("message",O,!1)):i=S in m("script")?function(e){f.appendChild(m("script"))[S]=function(){f.removeChild(this),z(e)}}:function(e){setTimeout(T(e),0)}),e.exports={set:_,clear:b}},31240:function(e,t,n){"use strict";var r=n(79504);e.exports=r(1.1.valueOf)},35610:function(e,t,n){"use strict";var r=n(91291),i=Math.max,o=Math.min;e.exports=function(e,t){var n=r(e);return n<0?i(n+t,0):o(n,t)}},75854:function(e,t,n){"use strict";var r=n(72777),i=TypeError;e.exports=function(e){var t=r(e,"number");if("number"==typeof t)throw new i("Can't convert number to bigint");return BigInt(t)}},57696:function(e,t,n){"use strict";var r=n(91291),i=n(18014),o=RangeError;e.exports=function(e){if(void 0===e)return 0;var t=r(e),n=i(t);if(t!==n)throw new o("Wrong length or index");return n}},25397:function(e,t,n){"use strict";var r=n(47055),i=n(67750);e.exports=function(e){return r(i(e))}},91291:function(e,t,n){"use strict";var r=n(80741);e.exports=function(e){var t=+e;return t!==t||0===t?0:r(t)}},18014:function(e,t,n){"use strict";var r=n(91291),i=Math.min;e.exports=function(e){var t=r(e);return t>0?i(t,9007199254740991):0}},48981:function(e,t,n){"use strict";var r=n(67750),i=Object;e.exports=function(e){return i(r(e))}},58229:function(e,t,n){"use strict";var r=n(99590),i=RangeError;e.exports=function(e,t){var n=r(e);if(n%t)throw new i("Wrong offset");return n}},99590:function(e,t,n){"use strict";var r=n(91291),i=RangeError;e.exports=function(e){var t=r(e);if(t<0)throw new i("The argument can't be less than 0");return t}},72777:function(e,t,n){"use strict";var r=n(69565),i=n(20034),o=n(10757),a=n(55966),s=n(84270),c=n(78227),l=TypeError,u=c("toPrimitive");e.exports=function(e,t){if(!i(e)||o(e))return e;var n,c=a(e,u);if(c){if(void 0===t&&(t="default"),n=r(c,e,t),!i(n)||o(n))return n;throw new l("Can't convert object to primitive value")}return void 0===t&&(t="number"),s(e,t)}},56969:function(e,t,n){"use strict";var r=n(72777),i=n(10757);e.exports=function(e){var t=r(e,"string");return i(t)?t:t+""}},92140:function(e,t,n){"use strict";var r=n(78227),i=r("toStringTag"),o={};o[i]="z",e.exports="[object z]"===String(o)},655:function(e,t,n){"use strict";var r=n(36955),i=String;e.exports=function(e){if("Symbol"===r(e))throw new TypeError("Cannot convert a Symbol value to a string");return i(e)}},58319:function(e){"use strict";var t=Math.floor;e.exports=function(e){var n=+e;if(n!==n||n<=0)return 0;if(n>=255)return 255;var r=t(n);return r+.5=0},ee=function(e,t){return t=g(t),Q(e,t)?d(2,e[t]):F(e,t)},te=function(e,t,n){return t=g(t),!(Q(e,t)&&b(n)&&y(n,"value"))||y(n,"get")||y(n,"set")||n.configurable||y(n,"writable")&&!n.writable||y(n,"enumerable")&&!n.enumerable?j(e,t,n):(e[t]=n.value,e)};a?(W||(O.f=ee,T.f=te,X(U,"buffer"),X(U,"byteOffset"),X(U,"byteLength"),X(U,"length")),r({target:"Object",stat:!0,forced:!W},{getOwnPropertyDescriptor:ee,defineProperty:te}),e.exports=function(e,t,n){var a=e.match(/\d+/)[0]/8,c=e+(n?"Clamped":"")+"Array",l="get"+e,d="set"+e,f=i[c],g=f,y=g&&g.prototype,_={},M=function(e,t){var n=V(e);return n.view[l](t*a+n.byteOffset,!0)},w=function(e,t,r){var i=V(e);i.view[d](t*a+i.byteOffset,n?v(r):r,!0)},z=function(e,t){j(e,t,{get:function(){return M(this,t)},set:function(e){return w(this,t,e)},enumerable:!0})};W?s&&(g=t(function(e,t,n,r){return u(e,y),Y(function(){return b(t)?Z(t)?void 0!==r?new f(t,m(n,a),r):void 0!==n?new f(t,m(n,a)):new f(t):q(t)?H(g,t):o(L,g,t):new f(p(t))}(),e,g)}),x&&x(g,K),C(k(f),function(e){e in g||h(g,e,f[e])}),g.prototype=y):(g=t(function(e,t,n,r){u(e,y);var i,s,c,l=0,d=0;if(b(t)){if(!Z(t))return q(t)?H(g,t):o(L,g,t);i=t,d=m(n,a);var h=t.byteLength;if(void 0===r){if(h%a)throw new I(J);if(s=h-d,s<0)throw new I(J)}else if(s=p(r)*a,s+d>h)throw new I(J);c=s/a}else c=p(t),s=c*a,i=new $(s);P(e,{buffer:i,byteOffset:d,byteLength:s,length:c,view:new N(i)});while(l1?arguments[1]:void 0,v=void 0!==m;v&&o(m);var g,y,_,b,M,A,w,x,k=s(e),L=u(k);if(L&&!d(L)){w=l(k,L),x=w.next,k=[];while(!(A=i(x,w)).done)k.push(A.value)}for(v&&n>2&&(m=r(m,arguments[2])),y=c(k),_=new(f(t))(y),b=h(_),g=0;y>g;g++)M=v?m(k[g],g):k[g],_[g]=b?p(M):+M;return _}},33392:function(e,t,n){"use strict";var r=n(79504),i=0,o=Math.random(),a=r(1.1.toString);e.exports=function(e){return"Symbol("+(void 0===e?"":e)+")_"+a(++i+o,36)}},67416:function(e,t,n){"use strict";var r=n(79039),i=n(78227),o=n(43724),a=n(96395),s=i("iterator");e.exports=!r(function(){var e=new URL("b?a=1&b=2&c=3","https://a"),t=e.searchParams,n=new URLSearchParams("a=1&a=2&b=3"),r="";return e.pathname="c%20d",t.forEach(function(e,n){t["delete"]("b"),r+=n+e}),n["delete"]("a",2),n["delete"]("b",void 0),a&&(!e.toJSON||!n.has("a",1)||n.has("a",2)||!n.has("a",void 0)||n.has("b"))||!t.size&&(a||!o)||!t.sort||"https://a/c%20d?a=1&c=3"!==e.href||"3"!==t.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!t[s]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("https://тест").host||"#%D0%B1"!==new URL("https://a#б").hash||"a1c3"!==r||"x"!==new URL("https://x",void 0).host})},7040:function(e,t,n){"use strict";var r=n(4495);e.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},48686:function(e,t,n){"use strict";var r=n(43724),i=n(79039);e.exports=r&&i(function(){return 42!==Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype})},22812:function(e){"use strict";var t=TypeError;e.exports=function(e,n){if(e=51||!i(function(){var e=[];return e[v]=!1,e.concat()[0]!==e}),y=function(e){if(!a(e))return!1;var t=e[v];return void 0!==t?!!t:o(e)},_=!g||!f("concat");r({target:"Array",proto:!0,arity:1,forced:_},{concat:function(e){var t,n,r,i,o,a=s(this),f=h(a,0),p=0;for(t=-1,r=arguments.length;t1?arguments[1]:void 0)}})},48980:function(e,t,n){"use strict";var r=n(46518),i=n(59213).findIndex,o=n(6469),a="findIndex",s=!0;a in[]&&Array(1)[a](function(){s=!1}),r({target:"Array",proto:!0,forced:s},{findIndex:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}}),o(a)},50113:function(e,t,n){"use strict";var r=n(46518),i=n(59213).find,o=n(6469),a="find",s=!0;a in[]&&Array(1)[a](function(){s=!1}),r({target:"Array",proto:!0,forced:s},{find:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}}),o(a)},78350:function(e,t,n){"use strict";var r=n(46518),i=n(70259),o=n(79306),a=n(48981),s=n(26198),c=n(1469);r({target:"Array",proto:!0},{flatMap:function(e){var t,n=a(this),r=s(n);return o(e),t=c(n,0),i(t,n,n,r,0,1,e,arguments.length>1?arguments[1]:void 0),t}})},46449:function(e,t,n){"use strict";var r=n(46518),i=n(70259),o=n(48981),a=n(26198),s=n(91291),c=n(1469);r({target:"Array",proto:!0},{flat:function(){var e=arguments.length?arguments[0]:void 0,t=o(this),n=a(t),r=void 0===e?1:s(e),l=c(t,0);return i(l,t,t,n,0,r),l}})},23418:function(e,t,n){"use strict";var r=n(46518),i=n(97916),o=n(84428),a=!o(function(e){Array.from(e)});r({target:"Array",stat:!0,forced:a},{from:i})},74423:function(e,t,n){"use strict";var r=n(46518),i=n(19617).includes,o=n(79039),a=n(6469),s=o(function(){return!Array(1).includes()}),c=o(function(){return[,1].includes(void 0,1)});r({target:"Array",proto:!0,forced:s||c},{includes:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}}),a("includes")},23792:function(e,t,n){"use strict";var r=n(25397),i=n(6469),o=n(26269),a=n(91181),s=n(24913).f,c=n(51088),l=n(62529),u=n(96395),d=n(43724),h="Array Iterator",f=a.set,p=a.getterFor(h);e.exports=c(Array,"Array",function(e,t){f(this,{type:h,target:r(e),index:0,kind:t})},function(){var e=p(this),t=e.target,n=e.index++;if(!t||n>=t.length)return e.target=null,l(void 0,!0);switch(e.kind){case"keys":return l(n,!1);case"values":return l(t[n],!1)}return l([n,t[n]],!1)},"values");var m=o.Arguments=o.Array;if(i("keys"),i("values"),i("entries"),!u&&d&&"values"!==m.name)try{s(m,"name",{value:"values"})}catch(v){}},48598:function(e,t,n){"use strict";var r=n(46518),i=n(79504),o=n(47055),a=n(25397),s=n(34598),c=i([].join),l=o!==Object,u=l||!s("join",",");r({target:"Array",proto:!0,forced:u},{join:function(e){return c(a(this),void 0===e?",":e)}})},62062:function(e,t,n){"use strict";var r=n(46518),i=n(59213).map,o=n(70597),a=o("map");r({target:"Array",proto:!0,forced:!a},{map:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}})},31051:function(e,t,n){"use strict";var r=n(46518),i=n(79039),o=n(33517),a=n(97040),s=n(34527),c=Array,l=i(function(){function e(){}return!(c.of.call(e)instanceof e)});r({target:"Array",stat:!0,forced:l},{of:function(){var e=0,t=arguments.length,n=new(o(this)?this:c)(t);while(t>e)a(n,e,arguments[e++]);return s(n,t),n}})},34782:function(e,t,n){"use strict";var r=n(46518),i=n(34376),o=n(33517),a=n(20034),s=n(35610),c=n(26198),l=n(25397),u=n(97040),d=n(34527),h=n(78227),f=n(70597),p=n(67680),m=f("slice"),v=h("species"),g=Array,y=Math.max;r({target:"Array",proto:!0,forced:!m},{slice:function(e,t){var n,r,h,f=l(this),m=c(f),_=s(e,m),b=s(void 0===t?m:t,m);if(i(f)&&(n=f.constructor,o(n)&&(n===g||i(n.prototype))?n=void 0:a(n)&&(n=n[v],null===n&&(n=void 0)),n===g||void 0===n))return p(f,_,b);for(r=new(void 0===n?g:n)(y(b-_,0)),h=0;_3)){if(p)return!0;if(v)return v<603;var e,t,n,r,i="";for(e=65;e<76;e++){switch(t=String.fromCharCode(e),e){case 66:case 69:case 70:case 72:n=3;break;case 68:case 71:n=4;break;default:n=2}for(r=0;r<47;r++)g.push({k:t+r,v:n})}for(g.sort(function(e,t){return t.v-e.v}),r=0;ri?1:-1}};r({target:"Array",proto:!0,forced:x},{sort:function(e){void 0!==e&&o(e);var t=a(this);if(w)return void 0===e?y(t):y(t,e);var n,r,i=[],l=s(t);for(r=0;rb-r+n;p--)h(_,p-1)}else if(n>r)for(p=b-r;p>M;p--)g=p+r-1,y=p+n-1,g in _?_[y]=_[g]:h(_,y);for(p=0;p94906265.62425156?a(t)+c:i(t-1+s(t-1)*s(t+1))}})},82326:function(e,t,n){"use strict";var r=n(46518),i=Math.asinh,o=Math.log,a=Math.sqrt,s=Math.LN2,c=94906265.62425156;function l(e){var t=+e;return isFinite(t)&&0!==t?t<0?-l(-t):t>c?o(t)+s:o(t+a(t*t+1)):t}var u=!(i&&1/i(0)>0);r({target:"Math",stat:!0,forced:u},{asinh:l})},36389:function(e,t,n){"use strict";var r=n(46518),i=n(7740),o=Math.atanh,a=!(o&&1/o(-0)<0);r({target:"Math",stat:!0,forced:a},{atanh:function(e){var t=+e;return 0===t?t:i(2*t/(1-t))/2}})},64444:function(e,t,n){"use strict";var r=n(46518),i=n(77782),o=Math.abs,a=Math.pow;r({target:"Math",stat:!0},{cbrt:function(e){var t=+e;return i(t)*a(o(t),1/3)}})},8085:function(e,t,n){"use strict";var r=n(46518),i=Math.floor,o=Math.log,a=Math.LOG2E;r({target:"Math",stat:!0},{clz32:function(e){var t=e>>>0;return t?31-i(o(t+.5)*a):32}})},77762:function(e,t,n){"use strict";var r=n(46518),i=n(53250),o=Math.cosh,a=Math.abs,s=Math.E,c=!o||o(710)===1/0;r({target:"Math",stat:!0,forced:c},{cosh:function(e){var t=i(a(e)-1)+1;return(t+1/(t*s*s))*(s/2)}})},65070:function(e,t,n){"use strict";var r=n(46518),i=n(53250);r({target:"Math",stat:!0,forced:i!==Math.expm1},{expm1:i})},60605:function(e,t,n){"use strict";var r=n(46518),i=n(15617);r({target:"Math",stat:!0},{fround:i})},39469:function(e,t,n){"use strict";var r=n(46518),i=Math.hypot,o=Math.abs,a=Math.sqrt,s=!!i&&i(1/0,NaN)!==1/0;r({target:"Math",stat:!0,arity:2,forced:s},{hypot:function(e,t){var n,r,i=0,s=0,c=arguments.length,l=0;while(s0?(r=n/l,i+=r*r):i+=n;return l===1/0?1/0:l*a(i)}})},72152:function(e,t,n){"use strict";var r=n(46518),i=n(79039),o=Math.imul,a=i(function(){return-5!==o(4294967295,5)||2!==o.length});r({target:"Math",stat:!0,forced:a},{imul:function(e,t){var n=65535,r=+e,i=+t,o=n&r,a=n&i;return 0|o*a+((n&r>>>16)*a+o*(n&i>>>16)<<16>>>0)}})},75376:function(e,t,n){"use strict";var r=n(46518),i=n(49340);r({target:"Math",stat:!0},{log10:i})},56624:function(e,t,n){"use strict";var r=n(46518),i=n(7740);r({target:"Math",stat:!0},{log1p:i})},11367:function(e,t,n){"use strict";var r=n(46518),i=n(67787);r({target:"Math",stat:!0},{log2:i})},5914:function(e,t,n){"use strict";var r=n(46518),i=n(77782);r({target:"Math",stat:!0},{sign:i})},78553:function(e,t,n){"use strict";var r=n(46518),i=n(79039),o=n(53250),a=Math.abs,s=Math.exp,c=Math.E,l=i(function(){return-2e-17!==Math.sinh(-2e-17)});r({target:"Math",stat:!0,forced:l},{sinh:function(e){var t=+e;return a(t)<1?(o(t)-o(-t))/2:(s(t-1)-s(-t-1))*(c/2)}})},98690:function(e,t,n){"use strict";var r=n(46518),i=n(53250),o=Math.exp;r({target:"Math",stat:!0},{tanh:function(e){var t=+e,n=i(t),r=i(-t);return n===1/0?1:r===1/0?-1:(n-r)/(o(t)+o(-t))}})},60479:function(e,t,n){"use strict";var r=n(10687);r(Math,"Math",!0)},70761:function(e,t,n){"use strict";var r=n(46518),i=n(80741);r({target:"Math",stat:!0},{trunc:i})},2892:function(e,t,n){"use strict";var r=n(46518),i=n(96395),o=n(43724),a=n(44576),s=n(19167),c=n(79504),l=n(92796),u=n(39297),d=n(23167),h=n(1625),f=n(10757),p=n(72777),m=n(79039),v=n(38480).f,g=n(77347).f,y=n(24913).f,_=n(31240),b=n(43802).trim,M="Number",A=a[M],w=s[M],x=A.prototype,k=a.TypeError,L=c("".slice),C=c("".charCodeAt),S=function(e){var t=p(e,"number");return"bigint"==typeof t?t:z(t)},z=function(e){var t,n,r,i,o,a,s,c,l=p(e,"number");if(f(l))throw new k("Cannot convert a Symbol value to a number");if("string"==typeof l&&l.length>2)if(l=b(l),t=C(l,0),43===t||45===t){if(n=C(l,2),88===n||120===n)return NaN}else if(48===t){switch(C(l,1)){case 66:case 98:r=2,i=49;break;case 79:case 111:r=8,i=55;break;default:return+l}for(o=L(l,2),a=o.length,s=0;si)return NaN;return parseInt(o,r)}return+l},T=l(M,!A(" 0o1")||!A("0b1")||A("+0x1")),O=function(e){return h(x,e)&&m(function(){_(e)})},H=function(e){var t=arguments.length<1?0:A(S(e));return O(this)?d(Object(t),this,H):t};H.prototype=x,T&&!i&&(x.constructor=H),r({global:!0,constructor:!0,wrap:!0,forced:T},{Number:H});var D=function(e,t){for(var n,r=o?v(t):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,fromString,range".split(","),i=0;r.length>i;i++)u(t,n=r[i])&&!u(e,n)&&y(e,n,g(t,n))};i&&w&&D(s[M],w),(T||i)&&D(s[M],A)},45374:function(e,t,n){"use strict";var r=n(46518);r({target:"Number",stat:!0,nonConfigurable:!0,nonWritable:!0},{EPSILON:Math.pow(2,-52)})},25428:function(e,t,n){"use strict";var r=n(46518),i=n(50360);r({target:"Number",stat:!0},{isFinite:i})},32637:function(e,t,n){"use strict";var r=n(46518),i=n(2087);r({target:"Number",stat:!0},{isInteger:i})},40150:function(e,t,n){"use strict";var r=n(46518);r({target:"Number",stat:!0},{isNaN:function(e){return e!==e}})},59149:function(e,t,n){"use strict";var r=n(46518),i=n(2087),o=Math.abs;r({target:"Number",stat:!0},{isSafeInteger:function(e){return i(e)&&o(e)<=9007199254740991}})},64601:function(e,t,n){"use strict";var r=n(46518);r({target:"Number",stat:!0,nonConfigurable:!0,nonWritable:!0},{MAX_SAFE_INTEGER:9007199254740991})},44435:function(e,t,n){"use strict";var r=n(46518);r({target:"Number",stat:!0,nonConfigurable:!0,nonWritable:!0},{MIN_SAFE_INTEGER:-9007199254740991})},87220:function(e,t,n){"use strict";var r=n(46518),i=n(33904);r({target:"Number",stat:!0,forced:Number.parseFloat!==i},{parseFloat:i})},25843:function(e,t,n){"use strict";var r=n(46518),i=n(52703);r({target:"Number",stat:!0,forced:Number.parseInt!==i},{parseInt:i})},9868:function(e,t,n){"use strict";var r=n(46518),i=n(79504),o=n(91291),a=n(31240),s=n(72333),c=n(79039),l=RangeError,u=String,d=Math.floor,h=i(s),f=i("".slice),p=i(1.1.toFixed),m=function(e,t,n){return 0===t?n:t%2===1?m(e,t-1,n*e):m(e*e,t/2,n)},v=function(e){var t=0,n=e;while(n>=4096)t+=12,n/=4096;while(n>=2)t+=1,n/=2;return t},g=function(e,t,n){var r=-1,i=n;while(++r<6)i+=t*e[r],e[r]=i%1e7,i=d(i/1e7)},y=function(e,t){var n=6,r=0;while(--n>=0)r+=e[n],e[n]=d(r/t),r=r%t*1e7},_=function(e){var t=6,n="";while(--t>=0)if(""!==n||0===t||0!==e[t]){var r=u(e[t]);n=""===n?r:n+h("0",7-r.length)+r}return n},b=c(function(){return"0.000"!==p(8e-5,3)||"1"!==p(.9,0)||"1.25"!==p(1.255,2)||"1000000000000000128"!==p(0xde0b6b3a7640080,0)})||!c(function(){p({})});r({target:"Number",proto:!0,forced:b},{toFixed:function(e){var t,n,r,i,s=a(this),c=o(e),d=[0,0,0,0,0,0],p="",b="0";if(c<0||c>20)throw new l("Incorrect fraction digits");if(s!==s)return"NaN";if(s<=-1e21||s>=1e21)return u(s);if(s<0&&(p="-",s=-s),s>1e-21)if(t=v(s*m(2,69,1))-69,n=t<0?s*m(2,-t,1):s/m(2,t,1),n*=4503599627370496,t=52-t,t>0){g(d,0,n),r=c;while(r>=7)g(d,1e7,0),r-=7;g(d,m(10,r,1),0),r=t-1;while(r>=23)y(d,1<<23),r-=23;y(d,1<0?(i=b.length,b=p+(i<=c?"0."+h("0",c-i)+b:f(b,0,i-c)+"."+f(b,i-c))):b=p+b,b}})},69085:function(e,t,n){"use strict";var r=n(46518),i=n(44213);r({target:"Object",stat:!0,arity:2,forced:Object.assign!==i},{assign:i})},17427:function(e,t,n){"use strict";var r=n(46518),i=n(43724),o=n(42551),a=n(79306),s=n(48981),c=n(24913);i&&r({target:"Object",proto:!0,forced:o},{__defineGetter__:function(e,t){c.f(s(this),e,{get:a(t),enumerable:!0,configurable:!0})}})},87607:function(e,t,n){"use strict";var r=n(46518),i=n(43724),o=n(42551),a=n(79306),s=n(48981),c=n(24913);i&&r({target:"Object",proto:!0,forced:o},{__defineSetter__:function(e,t){c.f(s(this),e,{set:a(t),enumerable:!0,configurable:!0})}})},5506:function(e,t,n){"use strict";var r=n(46518),i=n(32357).entries;r({target:"Object",stat:!0},{entries:function(e){return i(e)}})},52811:function(e,t,n){"use strict";var r=n(46518),i=n(92744),o=n(79039),a=n(20034),s=n(3451).onFreeze,c=Object.freeze,l=o(function(){c(1)});r({target:"Object",stat:!0,forced:l,sham:!i},{freeze:function(e){return c&&a(e)?c(s(e)):e}})},53921:function(e,t,n){"use strict";var r=n(46518),i=n(72652),o=n(97040);r({target:"Object",stat:!0},{fromEntries:function(e){var t={};return i(e,function(e,n){o(t,e,n)},{AS_ENTRIES:!0}),t}})},83851:function(e,t,n){"use strict";var r=n(46518),i=n(79039),o=n(25397),a=n(77347).f,s=n(43724),c=!s||i(function(){a(1)});r({target:"Object",stat:!0,forced:c,sham:!s},{getOwnPropertyDescriptor:function(e,t){return a(o(e),t)}})},81278:function(e,t,n){"use strict";var r=n(46518),i=n(43724),o=n(35031),a=n(25397),s=n(77347),c=n(97040);r({target:"Object",stat:!0,sham:!i},{getOwnPropertyDescriptors:function(e){var t,n,r=a(e),i=s.f,l=o(r),u={},d=0;while(l.length>d)n=i(r,t=l[d++]),void 0!==n&&c(u,t,n);return u}})},1480:function(e,t,n){"use strict";var r=n(46518),i=n(79039),o=n(10298).f,a=i(function(){return!Object.getOwnPropertyNames(1)});r({target:"Object",stat:!0,forced:a},{getOwnPropertyNames:o})},49773:function(e,t,n){"use strict";var r=n(46518),i=n(4495),o=n(79039),a=n(33717),s=n(48981),c=!i||o(function(){a.f(1)});r({target:"Object",stat:!0,forced:c},{getOwnPropertySymbols:function(e){var t=a.f;return t?t(s(e)):[]}})},40875:function(e,t,n){"use strict";var r=n(46518),i=n(79039),o=n(48981),a=n(42787),s=n(12211),c=i(function(){a(1)});r({target:"Object",stat:!0,forced:c,sham:!s},{getPrototypeOf:function(e){return a(o(e))}})},94052:function(e,t,n){"use strict";var r=n(46518),i=n(34124);r({target:"Object",stat:!0,forced:Object.isExtensible!==i},{isExtensible:i})},94003:function(e,t,n){"use strict";var r=n(46518),i=n(79039),o=n(20034),a=n(22195),s=n(15652),c=Object.isFrozen,l=s||i(function(){c(1)});r({target:"Object",stat:!0,forced:l},{isFrozen:function(e){return!o(e)||(!(!s||"ArrayBuffer"!==a(e))||!!c&&c(e))}})},221:function(e,t,n){"use strict";var r=n(46518),i=n(79039),o=n(20034),a=n(22195),s=n(15652),c=Object.isSealed,l=s||i(function(){c(1)});r({target:"Object",stat:!0,forced:l},{isSealed:function(e){return!o(e)||(!(!s||"ArrayBuffer"!==a(e))||!!c&&c(e))}})},29908:function(e,t,n){"use strict";var r=n(46518),i=n(3470);r({target:"Object",stat:!0},{is:i})},79432:function(e,t,n){"use strict";var r=n(46518),i=n(48981),o=n(71072),a=n(79039),s=a(function(){o(1)});r({target:"Object",stat:!0,forced:s},{keys:function(e){return o(i(e))}})},9220:function(e,t,n){"use strict";var r=n(46518),i=n(43724),o=n(42551),a=n(48981),s=n(56969),c=n(42787),l=n(77347).f;i&&r({target:"Object",proto:!0,forced:o},{__lookupGetter__:function(e){var t,n=a(this),r=s(e);do{if(t=l(n,r))return t.get}while(n=c(n))}})},7904:function(e,t,n){"use strict";var r=n(46518),i=n(43724),o=n(42551),a=n(48981),s=n(56969),c=n(42787),l=n(77347).f;i&&r({target:"Object",proto:!0,forced:o},{__lookupSetter__:function(e){var t,n=a(this),r=s(e);do{if(t=l(n,r))return t.set}while(n=c(n))}})},93967:function(e,t,n){"use strict";var r=n(46518),i=n(20034),o=n(3451).onFreeze,a=n(92744),s=n(79039),c=Object.preventExtensions,l=s(function(){c(1)});r({target:"Object",stat:!0,forced:l,sham:!a},{preventExtensions:function(e){return c&&i(e)?c(o(e)):e}})},93941:function(e,t,n){"use strict";var r=n(46518),i=n(20034),o=n(3451).onFreeze,a=n(92744),s=n(79039),c=Object.seal,l=s(function(){c(1)});r({target:"Object",stat:!0,forced:l,sham:!a},{seal:function(e){return c&&i(e)?c(o(e)):e}})},10287:function(e,t,n){"use strict";var r=n(46518),i=n(52967);r({target:"Object",stat:!0},{setPrototypeOf:i})},26099:function(e,t,n){"use strict";var r=n(92140),i=n(36840),o=n(53179);r||i(Object.prototype,"toString",o,{unsafe:!0})},16034:function(e,t,n){"use strict";var r=n(46518),i=n(32357).values;r({target:"Object",stat:!0},{values:function(e){return i(e)}})},16499:function(e,t,n){"use strict";var r=n(46518),i=n(69565),o=n(79306),a=n(36043),s=n(1103),c=n(72652),l=n(90537);r({target:"Promise",stat:!0,forced:l},{all:function(e){var t=this,n=a.f(t),r=n.resolve,l=n.reject,u=s(function(){var n=o(t.resolve),a=[],s=0,u=1;c(e,function(e){var o=s++,c=!1;u++,i(n,t,e).then(function(e){c||(c=!0,a[o]=e,--u||r(a))},l)}),--u||r(a)});return u.error&&l(u.value),n.promise}})},82003:function(e,t,n){"use strict";var r=n(46518),i=n(96395),o=n(10916).CONSTRUCTOR,a=n(80550),s=n(97751),c=n(94901),l=n(36840),u=a&&a.prototype;if(r({target:"Promise",proto:!0,forced:o,real:!0},{catch:function(e){return this.then(void 0,e)}}),!i&&c(a)){var d=s("Promise").prototype["catch"];u["catch"]!==d&&l(u,"catch",d,{unsafe:!0})}},10436:function(e,t,n){"use strict";var r,i,o,a,s=n(46518),c=n(96395),l=n(16193),u=n(44576),d=n(19167),h=n(69565),f=n(36840),p=n(52967),m=n(10687),v=n(87633),g=n(79306),y=n(94901),_=n(20034),b=n(90679),M=n(2293),A=n(59225).set,w=n(91955),x=n(90757),k=n(1103),L=n(18265),C=n(91181),S=n(80550),z=n(10916),T=n(36043),O="Promise",H=z.CONSTRUCTOR,D=z.REJECTION_EVENT,Y=z.SUBCLASSING,V=C.getterFor(O),P=C.set,E=S&&S.prototype,j=S,F=E,I=u.TypeError,$=u.document,R=u.process,N=T.f,W=N,B=!!($&&$.createEvent&&u.dispatchEvent),K="unhandledrejection",U="rejectionhandled",q=0,G=1,J=2,X=1,Z=2,Q=function(e){var t;return!(!_(e)||!y(t=e.then))&&t},ee=function(e,t){var n,r,i,o=t.value,a=t.state===G,s=a?e.ok:e.fail,c=e.resolve,l=e.reject,u=e.domain;try{s?(a||(t.rejection===Z&&oe(t),t.rejection=X),!0===s?n=o:(u&&u.enter(),n=s(o),u&&(u.exit(),i=!0)),n===e.promise?l(new I("Promise-chain cycle")):(r=Q(n))?h(r,n,c,l):c(n)):l(o)}catch(d){u&&!i&&u.exit(),l(d)}},te=function(e,t){e.notified||(e.notified=!0,w(function(){var n,r=e.reactions;while(n=r.get())ee(n,e);e.notified=!1,t&&!e.rejection&&re(e)}))},ne=function(e,t,n){var r,i;B?(r=$.createEvent("Event"),r.promise=t,r.reason=n,r.initEvent(e,!1,!0),u.dispatchEvent(r)):r={promise:t,reason:n},!D&&(i=u["on"+e])?i(r):e===K&&x("Unhandled promise rejection",n)},re=function(e){h(A,u,function(){var t,n=e.facade,r=e.value,i=ie(e);if(i&&(t=k(function(){l?R.emit("unhandledRejection",r,n):ne(K,n,r)}),e.rejection=l||ie(e)?Z:X,t.error))throw t.value})},ie=function(e){return e.rejection!==X&&!e.parent},oe=function(e){h(A,u,function(){var t=e.facade;l?R.emit("rejectionHandled",t):ne(U,t,e.value)})},ae=function(e,t,n){return function(r){e(t,r,n)}},se=function(e,t,n){e.done||(e.done=!0,n&&(e=n),e.value=t,e.state=J,te(e,!0))},ce=function(e,t,n){if(!e.done){e.done=!0,n&&(e=n);try{if(e.facade===t)throw new I("Promise can't be resolved itself");var r=Q(t);r?w(function(){var n={done:!1};try{h(r,t,ae(ce,n,e),ae(se,n,e))}catch(i){se(n,i,e)}}):(e.value=t,e.state=G,te(e,!1))}catch(i){se({done:!1},i,e)}}};if(H&&(j=function(e){b(this,F),g(e),h(r,this);var t=V(this);try{e(ae(ce,t),ae(se,t))}catch(n){se(t,n)}},F=j.prototype,r=function(e){P(this,{type:O,done:!1,notified:!1,parent:!1,reactions:new L,rejection:!1,state:q,value:null})},r.prototype=f(F,"then",function(e,t){var n=V(this),r=N(M(this,j));return n.parent=!0,r.ok=!y(e)||e,r.fail=y(t)&&t,r.domain=l?R.domain:void 0,n.state===q?n.reactions.add(r):w(function(){ee(r,n)}),r.promise}),i=function(){var e=new r,t=V(e);this.promise=e,this.resolve=ae(ce,t),this.reject=ae(se,t)},T.f=N=function(e){return e===j||e===o?new i(e):W(e)},!c&&y(S)&&E!==Object.prototype)){a=E.then,Y||f(E,"then",function(e,t){var n=this;return new j(function(e,t){h(a,n,e,t)}).then(e,t)},{unsafe:!0});try{delete E.constructor}catch(le){}p&&p(E,F)}s({global:!0,constructor:!0,wrap:!0,forced:H},{Promise:j}),o=d.Promise,m(j,O,!1,!0),v(O)},9391:function(e,t,n){"use strict";var r=n(46518),i=n(96395),o=n(80550),a=n(79039),s=n(97751),c=n(94901),l=n(2293),u=n(93438),d=n(36840),h=o&&o.prototype,f=!!o&&a(function(){h["finally"].call({then:function(){}},function(){})});if(r({target:"Promise",proto:!0,real:!0,forced:f},{finally:function(e){var t=l(this,s("Promise")),n=c(e);return this.then(n?function(n){return u(t,e()).then(function(){return n})}:e,n?function(n){return u(t,e()).then(function(){throw n})}:e)}}),!i&&c(o)){var p=s("Promise").prototype["finally"];h["finally"]!==p&&d(h,"finally",p,{unsafe:!0})}},3362:function(e,t,n){"use strict";n(10436),n(16499),n(82003),n(7743),n(51481),n(40280)},7743:function(e,t,n){"use strict";var r=n(46518),i=n(69565),o=n(79306),a=n(36043),s=n(1103),c=n(72652),l=n(90537);r({target:"Promise",stat:!0,forced:l},{race:function(e){var t=this,n=a.f(t),r=n.reject,l=s(function(){var a=o(t.resolve);c(e,function(e){i(a,t,e).then(n.resolve,r)})});return l.error&&r(l.value),n.promise}})},51481:function(e,t,n){"use strict";var r=n(46518),i=n(36043),o=n(10916).CONSTRUCTOR;r({target:"Promise",stat:!0,forced:o},{reject:function(e){var t=i.f(this),n=t.reject;return n(e),t.promise}})},40280:function(e,t,n){"use strict";var r=n(46518),i=n(97751),o=n(96395),a=n(80550),s=n(10916).CONSTRUCTOR,c=n(93438),l=i("Promise"),u=o&&!s;r({target:"Promise",stat:!0,forced:o||s},{resolve:function(e){return c(u&&this===l?a:this,e)}})},39796:function(e,t,n){"use strict";var r=n(46518),i=n(18745),o=n(79306),a=n(28551),s=n(79039),c=!s(function(){Reflect.apply(function(){})});r({target:"Reflect",stat:!0,forced:c},{apply:function(e,t,n){return i(o(e),t,a(n))}})},60825:function(e,t,n){"use strict";var r=n(46518),i=n(97751),o=n(18745),a=n(30566),s=n(35548),c=n(28551),l=n(20034),u=n(2360),d=n(79039),h=i("Reflect","construct"),f=Object.prototype,p=[].push,m=d(function(){function e(){}return!(h(function(){},[],e)instanceof e)}),v=!d(function(){h(function(){})}),g=m||v;r({target:"Reflect",stat:!0,forced:g,sham:g},{construct:function(e,t){s(e);var n=arguments.length<3?e:s(arguments[2]);if(c(t),v&&!m)return h(e,t,n);if(e===n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var r=[null];return o(p,r,t),new(o(a,e,r))}var i=n.prototype,d=u(l(i)?i:f),g=o(e,d,t);return l(g)?g:d}})},87411:function(e,t,n){"use strict";var r=n(46518),i=n(43724),o=n(28551),a=n(56969),s=n(24913),c=n(94901),l=n(79039),u=TypeError,d=l(function(){Reflect.defineProperty(s.f({},1,{value:1}),1,{value:2})});r({target:"Reflect",stat:!0,forced:d,sham:!i},{defineProperty:function(e,t,n){o(e);var r,i,l=a(t);if(o(n),("get"in n||"set"in n)&&("get"in n&&!c(r=n.get)&&void 0!==r||"set"in n&&!c(i=n.set)&&void 0!==i||"value"in n||"writable"in n))throw new u("Invalid property descriptor");try{return s.f(e,l,n),!0}catch(d){return!1}}})},21211:function(e,t,n){"use strict";var r=n(46518),i=n(28551),o=n(77347).f,a=n(56969);r({target:"Reflect",stat:!0},{deleteProperty:function(e,t){i(e);var n=a(t),r=o(e,n);return!(r&&!r.configurable)&&delete e[n]}})},9065:function(e,t,n){"use strict";var r=n(46518),i=n(43724),o=n(28551),a=n(77347);r({target:"Reflect",stat:!0,sham:!i},{getOwnPropertyDescriptor:function(e,t){return a.f(o(e),t)}})},86565:function(e,t,n){"use strict";var r=n(46518),i=n(28551),o=n(42787),a=n(12211);r({target:"Reflect",stat:!0,sham:!a},{getPrototypeOf:function(e){return o(i(e))}})},40888:function(e,t,n){"use strict";var r=n(46518),i=n(69565),o=n(20034),a=n(28551),s=n(16575),c=n(77347),l=n(42787),u=n(56969),d=function(e,t,n){if(a(e)===n)return e[t];var r=c.f(e,t);if(r)return s(r)?r.value:void 0===r.get?void 0:i(r.get,n);var u=l(e);return o(u)?d(u,t,n):void 0};r({target:"Reflect",stat:!0},{get:function(e,t){return d(a(e),u(t),arguments.length<3?e:arguments[2])}})},32812:function(e,t,n){"use strict";var r=n(46518);r({target:"Reflect",stat:!0},{has:function(e,t){return t in e}})},84634:function(e,t,n){"use strict";var r=n(46518),i=n(28551),o=n(34124);r({target:"Reflect",stat:!0},{isExtensible:function(e){return i(e),o(e)}})},71137:function(e,t,n){"use strict";var r=n(46518),i=n(35031);r({target:"Reflect",stat:!0},{ownKeys:i})},30985:function(e,t,n){"use strict";var r=n(46518),i=n(97751),o=n(28551),a=n(92744);r({target:"Reflect",stat:!0,sham:!a},{preventExtensions:function(e){o(e);try{var t=i("Object","preventExtensions");return t&&t(e),!0}catch(n){return!1}}})},34873:function(e,t,n){"use strict";var r=n(46518),i=n(28551),o=n(73506),a=n(52967);a&&r({target:"Reflect",stat:!0},{setPrototypeOf:function(e,t){i(e),o(t);try{return a(e,t),!0}catch(n){return!1}}})},34268:function(e,t,n){"use strict";var r=n(46518),i=n(69565),o=n(28551),a=n(20034),s=n(16575),c=n(79039),l=n(24913),u=n(77347),d=n(42787),h=n(6980),f=n(56969),p=function(e,t,n,r){var c,f,m,v=u.f(o(e),t);if(!v){if(a(f=d(e)))return p(f,t,n,r);v=h(0)}if(s(v)){if(!1===v.writable||!a(r))return!1;if(c=u.f(r,t)){if(!s(c)||!1===c.writable)return!1;l.f(r,t,{value:n})}else try{l.f(r,t,h(0,n))}catch(g){return!1}}else{if(m=v.set,void 0===m)return!1;i(m,r,n)}return!0},m=c(function(){var e=function(){},t=l.f(new e,"a",{configurable:!0});return!1!==Reflect.set(e.prototype,"a",1,t)});r({target:"Reflect",stat:!0,forced:m},{set:function(e,t,n){return p(o(e),f(t),n,arguments.length<4?e:arguments[3])}})},84864:function(e,t,n){"use strict";var r=n(43724),i=n(44576),o=n(79504),a=n(92796),s=n(23167),c=n(66699),l=n(2360),u=n(38480).f,d=n(1625),h=n(60788),f=n(655),p=n(61034),m=n(58429),v=n(11056),g=n(36840),y=n(79039),_=n(39297),b=n(91181).enforce,M=n(87633),A=n(78227),w=n(83635),x=n(18814),k=A("match"),L=i.RegExp,C=L.prototype,S=i.SyntaxError,z=o(C.exec),T=o("".charAt),O=o("".replace),H=o("".indexOf),D=o("".slice),Y=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,V=/a/g,P=/a/g,E=new L(V)!==V,j=m.MISSED_STICKY,F=m.UNSUPPORTED_Y,I=r&&(!E||j||w||x||y(function(){return P[k]=!1,L(V)!==V||L(P)===P||"/a/i"!==String(L(V,"i"))})),$=function(e){for(var t,n=e.length,r=0,i="",o=!1;r"===t&&c:if(""===d||_(a,d))throw new S("Invalid capture group name");a[d]=!0,o[o.length]=[d,u],c=!1,d="";continue}c?d+=t:i+=t}for(var h=0;h",p="\\"+o[h][1];while(H(i,f)>-1)i=O(i,f,p)}return[i,o]};if(a("RegExp",I)){for(var N=function(e,t){var n,r,i,o,a,l,u=d(C,this),m=h(e),v=void 0===t,g=[],y=e;if(!u&&m&&v&&e.constructor===N)return e;if((m||d(C,e))&&(e=e.source,v&&(t=p(y))),e=void 0===e?"":f(e),t=void 0===t?"":f(t),y=e,w&&"dotAll"in V&&(r=!!t&&H(t,"s")>-1,r&&(t=O(t,/s/g,""))),n=t,j&&"sticky"in V&&(i=!!t&&H(t,"y")>-1,i&&F&&(t=O(t,/y/g,""))),x&&(o=R(e),e=o[0],g=o[1]),a=s(L(e,t),u?this:C,N),(r||i||g.length)&&(l=b(a),r&&(l.dotAll=!0,l.raw=N($(e),n)),i&&(l.sticky=!0),g.length&&(l.groups=g)),e!==y)try{c(a,"source",""===y?"(?:)":y)}catch(_){}return a},W=u(L),B=0;W.length>B;)v(N,L,W[B++]);C.constructor=N,N.prototype=C,g(i,"RegExp",N,{constructor:!0})}M("RegExp")},27495:function(e,t,n){"use strict";var r=n(46518),i=n(57323);r({target:"RegExp",proto:!0,forced:/./.exec!==i},{exec:i})},69479:function(e,t,n){"use strict";var r=n(43724),i=n(62106),o=n(65213),a=n(67979);r&&!o.correct&&(i(RegExp.prototype,"flags",{configurable:!0,get:a}),o.correct=!0)},38781:function(e,t,n){"use strict";var r=n(10350).PROPER,i=n(36840),o=n(28551),a=n(655),s=n(79039),c=n(61034),l="toString",u=RegExp.prototype,d=u[l],h=s(function(){return"/a/b"!==d.call({source:"a",flags:"b"})}),f=r&&d.name!==l;(h||f)&&i(u,l,function(){var e=o(this),t=a(e.source),n=a(c(e));return"/"+t+"/"+n},{unsafe:!0})},92405:function(e,t,n){"use strict";var r=n(16468),i=n(86938);r("Set",function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}},i)},31415:function(e,t,n){"use strict";n(92405)},89907:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("anchor")},{anchor:function(e){return i(this,"a","name",e)}})},11898:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("big")},{big:function(){return i(this,"big","","")}})},35490:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("blink")},{blink:function(){return i(this,"blink","","")}})},5745:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("bold")},{bold:function(){return i(this,"b","","")}})},23860:function(e,t,n){"use strict";var r=n(46518),i=n(68183).codeAt;r({target:"String",proto:!0},{codePointAt:function(e){return i(this,e)}})},99449:function(e,t,n){"use strict";var r=n(46518),i=n(27476),o=n(77347).f,a=n(18014),s=n(655),c=n(60511),l=n(67750),u=n(41436),d=n(96395),h=i("".slice),f=Math.min,p=u("endsWith"),m=!d&&!p&&!!function(){var e=o(String.prototype,"endsWith");return e&&!e.writable}();r({target:"String",proto:!0,forced:!m&&!p},{endsWith:function(e){var t=s(l(this));c(e);var n=s(e),r=arguments.length>1?arguments[1]:void 0,i=t.length,o=void 0===r?i:f(a(r),i);return h(t,o-n.length,o)===n}})},94298:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("fixed")},{fixed:function(){return i(this,"tt","","")}})},60268:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("fontcolor")},{fontcolor:function(e){return i(this,"font","color",e)}})},69546:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("fontsize")},{fontsize:function(e){return i(this,"font","size",e)}})},27337:function(e,t,n){"use strict";var r=n(46518),i=n(79504),o=n(35610),a=RangeError,s=String.fromCharCode,c=String.fromCodePoint,l=i([].join),u=!!c&&1!==c.length;r({target:"String",stat:!0,arity:1,forced:u},{fromCodePoint:function(e){var t,n=[],r=arguments.length,i=0;while(r>i){if(t=+arguments[i],o(t,1114111)!==t)throw new a(t+" is not a valid code point");n[i++]=t<65536?s(t):s(55296+((t-=65536)>>10),t%1024+56320)}return l(n,"")}})},21699:function(e,t,n){"use strict";var r=n(46518),i=n(79504),o=n(60511),a=n(67750),s=n(655),c=n(41436),l=i("".indexOf);r({target:"String",proto:!0,forced:!c("includes")},{includes:function(e){return!!~l(s(a(this)),s(o(e)),arguments.length>1?arguments[1]:void 0)}})},20781:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("italics")},{italics:function(){return i(this,"i","","")}})},47764:function(e,t,n){"use strict";var r=n(68183).charAt,i=n(655),o=n(91181),a=n(51088),s=n(62529),c="String Iterator",l=o.set,u=o.getterFor(c);a(String,"String",function(e){l(this,{type:c,string:i(e),index:0})},function(){var e,t=u(this),n=t.string,i=t.index;return i>=n.length?s(void 0,!0):(e=r(n,i),t.index+=e.length,s(e,!1))})},50778:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("link")},{link:function(e){return i(this,"a","href",e)}})},71761:function(e,t,n){"use strict";var r=n(69565),i=n(79504),o=n(89228),a=n(28551),s=n(20034),c=n(18014),l=n(655),u=n(67750),d=n(55966),h=n(57829),f=n(61034),p=n(56682),m=i("".indexOf);o("match",function(e,t,n){return[function(t){var n=u(this),i=s(t)?d(t,e):void 0;return i?r(i,t,n):new RegExp(t)[e](l(n))},function(e){var r=a(this),i=l(e),o=n(t,r,i);if(o.done)return o.value;var s=l(f(r));if(!~m(s,"g"))return p(r,i);var u=!!~m(s,"u")||!!~m(s,"v");r.lastIndex=0;var d,v=[],g=0;while(null!==(d=p(r,i))){var y=l(d[0]);v[g]=y,""===y&&(r.lastIndex=h(i,c(r.lastIndex),u)),g++}return 0===g?null:v}]})},35701:function(e,t,n){"use strict";var r=n(46518),i=n(60533).end,o=n(83063);r({target:"String",proto:!0,forced:o},{padEnd:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}})},68156:function(e,t,n){"use strict";var r=n(46518),i=n(60533).start,o=n(83063);r({target:"String",proto:!0,forced:o},{padStart:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}})},85906:function(e,t,n){"use strict";var r=n(46518),i=n(79504),o=n(25397),a=n(48981),s=n(655),c=n(26198),l=i([].push),u=i([].join);r({target:"String",stat:!0},{raw:function(e){var t=o(a(e).raw),n=c(t);if(!n)return"";var r=arguments.length,i=[],d=0;while(1){if(l(i,s(t[d++])),d===n)return u(i,"");d")});a("replace",function(e,t,n){var o=T?"$":"$0";return[function(e,n){var r=p(this),o=u(e)?v(e,M):void 0;return o?i(o,e,r,n):i(t,f(r),e,n)},function(e,i){var a=c(this),s=f(e),u=l(i);u||(i=f(i));var p=f(y(a));if("string"==typeof i&&!~L(i,o)&&!~L(i,"$<")&&!~L(p,"y")){var v=n(t,a,s,i);if(v.done)return v.value}var b,M=!!~L(p,"g");M&&(b=!!~L(p,"u")||!!~L(p,"v"),a.lastIndex=0);var z,T=[];while(1){if(z=_(a,s),null===z)break;if(k(T,z),!M)break;var O=f(z[0]);""===O&&(a.lastIndex=m(s,h(a.lastIndex),b))}for(var H="",D=0,Y=0;Y=D&&(H+=C(s,D,E)+V,D=E+P.length)}return H+C(s,D)}]},!O||!z||T)},5746:function(e,t,n){"use strict";var r=n(69565),i=n(89228),o=n(28551),a=n(20034),s=n(67750),c=n(3470),l=n(655),u=n(55966),d=n(56682);i("search",function(e,t,n){return[function(t){var n=s(this),i=a(t)?u(t,e):void 0;return i?r(i,t,n):new RegExp(t)[e](l(n))},function(e){var r=o(this),i=l(e),a=n(t,r,i);if(a.done)return a.value;var s=r.lastIndex;c(s,0)||(r.lastIndex=0);var u=d(r,i);return c(r.lastIndex,s)||(r.lastIndex=s),null===u?-1:u.index}]})},89195:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("small")},{small:function(){return i(this,"small","","")}})},90744:function(e,t,n){"use strict";var r=n(69565),i=n(79504),o=n(89228),a=n(28551),s=n(20034),c=n(67750),l=n(2293),u=n(57829),d=n(18014),h=n(655),f=n(55966),p=n(61034),m=n(56682),v=n(58429),g=n(79039),y=v.UNSUPPORTED_Y,_=4294967295,b=Math.min,M=i([].push),A=i("".slice),w=i("".indexOf),x=!g(function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var n="ab".split(e);return 2!==n.length||"a"!==n[0]||"b"!==n[1]}),k="c"==="abbc".split(/(b)*/)[1]||4!=="test".split(/(?:)/,-1).length||2!=="ab".split(/(?:ab)*/).length||4!==".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length;o("split",function(e,t,n){var i="0".split(void 0,0).length?function(e,n){return void 0===e&&0===n?[]:r(t,this,e,n)}:t;return[function(t,n){var o=c(this),a=s(t)?f(t,e):void 0;return a?r(a,t,o,n):r(i,h(o),t,n)},function(e,r){var o=a(this),s=h(e);if(!k){var c=n(i,o,s,r,i!==t);if(c.done)return c.value}var f=l(o,RegExp),v=h(p(o)),g=!!~w(v,"u")||!!~w(v,"v");y?~w(v,"g")||(v+="g"):~w(v,"y")||(v+="y");var x=new f(y?"^(?:"+o.source+")":o,v),L=void 0===r?_:r>>>0;if(0===L)return[];if(0===s.length)return null===m(x,s)?[s]:[];var C=0,S=0,z=[];while(S1?arguments[1]:void 0,t.length));return h(t,r,r+n.length)===n}})},46276:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("strike")},{strike:function(){return i(this,"strike","","")}})},48718:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("sub")},{sub:function(){return i(this,"sub","","")}})},16308:function(e,t,n){"use strict";var r=n(46518),i=n(77240),o=n(23061);r({target:"String",proto:!0,forced:o("sup")},{sup:function(){return i(this,"sup","","")}})},39202:function(e,t,n){"use strict";n(33313);var r=n(46518),i=n(18866);r({target:"String",proto:!0,name:"trimEnd",forced:"".trimEnd!==i},{trimEnd:i})},58934:function(e,t,n){"use strict";var r=n(46518),i=n(53487);r({target:"String",proto:!0,name:"trimStart",forced:"".trimLeft!==i},{trimLeft:i})},33313:function(e,t,n){"use strict";var r=n(46518),i=n(18866);r({target:"String",proto:!0,name:"trimEnd",forced:"".trimRight!==i},{trimRight:i})},43359:function(e,t,n){"use strict";n(58934);var r=n(46518),i=n(53487);r({target:"String",proto:!0,name:"trimStart",forced:"".trimStart!==i},{trimStart:i})},42762:function(e,t,n){"use strict";var r=n(46518),i=n(43802).trim,o=n(60706);r({target:"String",proto:!0,forced:o("trim")},{trim:function(){return i(this)}})},66412:function(e,t,n){"use strict";var r=n(70511);r("asyncIterator")},6761:function(e,t,n){"use strict";var r=n(46518),i=n(44576),o=n(69565),a=n(79504),s=n(96395),c=n(43724),l=n(4495),u=n(79039),d=n(39297),h=n(1625),f=n(28551),p=n(25397),m=n(56969),v=n(655),g=n(6980),y=n(2360),_=n(71072),b=n(38480),M=n(10298),A=n(33717),w=n(77347),x=n(24913),k=n(96801),L=n(48773),C=n(36840),S=n(62106),z=n(25745),T=n(66119),O=n(30421),H=n(33392),D=n(78227),Y=n(1951),V=n(70511),P=n(58242),E=n(10687),j=n(91181),F=n(59213).forEach,I=T("hidden"),$="Symbol",R="prototype",N=j.set,W=j.getterFor($),B=Object[R],K=i.Symbol,U=K&&K[R],q=i.RangeError,G=i.TypeError,J=i.QObject,X=w.f,Z=x.f,Q=M.f,ee=L.f,te=a([].push),ne=z("symbols"),re=z("op-symbols"),ie=z("wks"),oe=!J||!J[R]||!J[R].findChild,ae=function(e,t,n){var r=X(B,t);return r&&delete B[t],Z(e,t,n),r&&e!==B&&Z(B,t,r),e},se=c&&u(function(){return 7!==y(Z({},"a",{get:function(){return Z(this,"a",{value:7}).a}})).a})?ae:Z,ce=function(e,t){var n=ne[e]=y(U);return N(n,{type:$,tag:e,description:t}),c||(n.description=t),n},le=function(e,t,n){e===B&&le(re,t,n),f(e);var r=m(t);return f(n),d(ne,r)?(("enumerable"in n?!n.enumerable:!d(e,r)||d(e,I)&&e[I][r])?(d(e,I)||Z(e,I,g(1,y(null))),e[I][r]=!0):(d(e,I)&&e[I][r]&&(e[I][r]=!1),n=y(n,{enumerable:g(0,!1)})),se(e,r,n)):Z(e,r,n)},ue=function(e,t){f(e);var n=p(t),r=_(n).concat(me(n));return F(r,function(t){c&&!o(he,n,t)||le(e,t,n[t])}),e},de=function(e,t){return void 0===t?y(e):ue(y(e),t)},he=function(e){var t=m(e),n=o(ee,this,t);return!(this===B&&d(ne,t)&&!d(re,t))&&(!(n||!d(this,t)||!d(ne,t)||d(this,I)&&this[I][t])||n)},fe=function(e,t){var n=p(e),r=m(t);if(n!==B||!d(ne,r)||d(re,r)){var i=X(n,r);return!i||!d(ne,r)||d(n,I)&&n[I][r]||(i.enumerable=!0),i}},pe=function(e){var t=Q(p(e)),n=[];return F(t,function(e){d(ne,e)||d(O,e)||te(n,e)}),n},me=function(e){var t=e===B,n=Q(t?re:p(e)),r=[];return F(n,function(e){!d(ne,e)||t&&!d(B,e)||te(r,ne[e])}),r};l||(K=function(){if(h(U,this))throw new G("Symbol is not a constructor");var e=arguments.length&&void 0!==arguments[0]?v(arguments[0]):void 0,t=H(e),n=function(e){var r=void 0===this?i:this;r===B&&o(n,re,e),d(r,I)&&d(r[I],t)&&(r[I][t]=!1);var a=g(1,e);try{se(r,t,a)}catch(s){if(!(s instanceof q))throw s;ae(r,t,a)}};return c&&oe&&se(B,t,{configurable:!0,set:n}),ce(t,e)},U=K[R],C(U,"toString",function(){return W(this).tag}),C(K,"withoutSetter",function(e){return ce(H(e),e)}),L.f=he,x.f=le,k.f=ue,w.f=fe,b.f=M.f=pe,A.f=me,Y.f=function(e){return ce(D(e),e)},c&&(S(U,"description",{configurable:!0,get:function(){return W(this).description}}),s||C(B,"propertyIsEnumerable",he,{unsafe:!0}))),r({global:!0,constructor:!0,wrap:!0,forced:!l,sham:!l},{Symbol:K}),F(_(ie),function(e){V(e)}),r({target:$,stat:!0,forced:!l},{useSetter:function(){oe=!0},useSimple:function(){oe=!1}}),r({target:"Object",stat:!0,forced:!l,sham:!c},{create:de,defineProperty:le,defineProperties:ue,getOwnPropertyDescriptor:fe}),r({target:"Object",stat:!0,forced:!l},{getOwnPropertyNames:pe}),P(),E(K,$),O[I]=!0},89463:function(e,t,n){"use strict";var r=n(46518),i=n(43724),o=n(44576),a=n(69565),s=n(79504),c=n(39297),l=n(94901),u=n(1625),d=n(655),h=n(62106),f=n(77740),p=o.Symbol,m=p&&p.prototype;if(i&&l(p)&&(!("description"in m)||void 0!==p().description)){var v={},g=function(){var e=arguments.length<1||void 0===arguments[0]?void 0:d(arguments[0]),t=u(m,this)?new p(e):void 0===e?p():p(e);return""===e&&(v[t]=!0),t};f(g,p);var y=g["for"];g["for"]={for:function(e){var t=d(e),n=a(y,this,t);return""===t&&(v[n]=!0),n}}["for"],g.prototype=m,m.constructor=g;var _="Symbol(description detection)"===String(p("description detection")),b=s(m.valueOf),M=s(m.toString),A=/^Symbol\((.*)\)[^)]+$/,w=s("".replace),x=s("".slice);h(m,"description",{configurable:!0,get:function(){var e=b(this);if(c(v,e))return"";var t=M(e),n=_?x(t,7,-1):w(t,A,"$1");return""===n?void 0:n}}),r({global:!0,constructor:!0,forced:!0},{Symbol:g})}},81510:function(e,t,n){"use strict";var r=n(46518),i=n(97751),o=n(39297),a=n(655),s=n(25745),c=n(91296),l=s("string-to-symbol-registry"),u=s("symbol-to-string-registry");r({target:"Symbol",stat:!0,forced:!c},{for:function(e){var t=a(e);if(o(l,t))return l[t];var n=i("Symbol")(t);return l[t]=n,u[n]=t,n}})},60193:function(e,t,n){"use strict";var r=n(70511);r("hasInstance")},92168:function(e,t,n){"use strict";var r=n(70511);r("isConcatSpreadable")},2259:function(e,t,n){"use strict";var r=n(70511);r("iterator")},52675:function(e,t,n){"use strict";n(6761),n(81510),n(97812),n(33110),n(49773)},97812:function(e,t,n){"use strict";var r=n(46518),i=n(39297),o=n(10757),a=n(16823),s=n(25745),c=n(91296),l=s("symbol-to-string-registry");r({target:"Symbol",stat:!0,forced:!c},{keyFor:function(e){if(!o(e))throw new TypeError(a(e)+" is not a symbol");if(i(l,e))return l[e]}})},86964:function(e,t,n){"use strict";var r=n(70511);r("match")},83237:function(e,t,n){"use strict";var r=n(70511);r("replace")},61833:function(e,t,n){"use strict";var r=n(70511);r("search")},67947:function(e,t,n){"use strict";var r=n(70511);r("species")},31073:function(e,t,n){"use strict";var r=n(70511);r("split")},45700:function(e,t,n){"use strict";var r=n(70511),i=n(58242);r("toPrimitive"),i()},78125:function(e,t,n){"use strict";var r=n(97751),i=n(70511),o=n(10687);i("toStringTag"),o(r("Symbol"),"Symbol")},20326:function(e,t,n){"use strict";var r=n(70511);r("unscopables")},81630:function(e,t,n){"use strict";var r=n(79504),i=n(94644),o=n(57029),a=r(o),s=i.aTypedArray,c=i.exportTypedArrayMethod;c("copyWithin",function(e,t){return a(s(this),e,t,arguments.length>2?arguments[2]:void 0)})},72170:function(e,t,n){"use strict";var r=n(94644),i=n(59213).every,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("every",function(e){return i(o(this),e,arguments.length>1?arguments[1]:void 0)})},75044:function(e,t,n){"use strict";var r=n(94644),i=n(84373),o=n(75854),a=n(36955),s=n(69565),c=n(79504),l=n(79039),u=r.aTypedArray,d=r.exportTypedArrayMethod,h=c("".slice),f=l(function(){var e=0;return new Int8Array(2).fill({valueOf:function(){return e++}}),1!==e});d("fill",function(e){var t=arguments.length;u(this);var n="Big"===h(a(this),0,3)?o(e):+e;return s(i,this,n,t>1?arguments[1]:void 0,t>2?arguments[2]:void 0)},f)},69539:function(e,t,n){"use strict";var r=n(94644),i=n(59213).filter,o=n(29948),a=r.aTypedArray,s=r.exportTypedArrayMethod;s("filter",function(e){var t=i(a(this),e,arguments.length>1?arguments[1]:void 0);return o(this,t)})},89955:function(e,t,n){"use strict";var r=n(94644),i=n(59213).findIndex,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("findIndex",function(e){return i(o(this),e,arguments.length>1?arguments[1]:void 0)})},31694:function(e,t,n){"use strict";var r=n(94644),i=n(59213).find,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("find",function(e){return i(o(this),e,arguments.length>1?arguments[1]:void 0)})},34594:function(e,t,n){"use strict";var r=n(15823);r("Float32",function(e){return function(t,n,r){return e(this,t,n,r)}})},29833:function(e,t,n){"use strict";var r=n(15823);r("Float64",function(e){return function(t,n,r){return e(this,t,n,r)}})},33206:function(e,t,n){"use strict";var r=n(94644),i=n(59213).forEach,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("forEach",function(e){i(o(this),e,arguments.length>1?arguments[1]:void 0)})},48345:function(e,t,n){"use strict";var r=n(72805),i=n(94644).exportTypedArrayStaticMethod,o=n(43251);i("from",o,r)},44496:function(e,t,n){"use strict";var r=n(94644),i=n(19617).includes,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("includes",function(e){return i(o(this),e,arguments.length>1?arguments[1]:void 0)})},66651:function(e,t,n){"use strict";var r=n(94644),i=n(19617).indexOf,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("indexOf",function(e){return i(o(this),e,arguments.length>1?arguments[1]:void 0)})},72107:function(e,t,n){"use strict";var r=n(15823);r("Int16",function(e){return function(t,n,r){return e(this,t,n,r)}})},95477:function(e,t,n){"use strict";var r=n(15823);r("Int32",function(e){return function(t,n,r){return e(this,t,n,r)}})},46594:function(e,t,n){"use strict";var r=n(15823);r("Int8",function(e){return function(t,n,r){return e(this,t,n,r)}})},12887:function(e,t,n){"use strict";var r=n(44576),i=n(79039),o=n(79504),a=n(94644),s=n(23792),c=n(78227),l=c("iterator"),u=r.Uint8Array,d=o(s.values),h=o(s.keys),f=o(s.entries),p=a.aTypedArray,m=a.exportTypedArrayMethod,v=u&&u.prototype,g=!i(function(){v[l].call([1])}),y=!!v&&v.values&&v[l]===v.values&&"values"===v.values.name,_=function(){return d(p(this))};m("entries",function(){return f(p(this))},g),m("keys",function(){return h(p(this))},g),m("values",_,g||!y,{name:"values"}),m(l,_,g||!y,{name:"values"})},19369:function(e,t,n){"use strict";var r=n(94644),i=n(79504),o=r.aTypedArray,a=r.exportTypedArrayMethod,s=i([].join);a("join",function(e){return s(o(this),e)})},66812:function(e,t,n){"use strict";var r=n(94644),i=n(18745),o=n(8379),a=r.aTypedArray,s=r.exportTypedArrayMethod;s("lastIndexOf",function(e){var t=arguments.length;return i(o,a(this),t>1?[e,arguments[1]]:[e])})},8995:function(e,t,n){"use strict";var r=n(94644),i=n(59213).map,o=n(29948),a=r.aTypedArray,s=r.exportTypedArrayMethod;s("map",function(e){var t=i(a(this),e,arguments.length>1?arguments[1]:void 0);return o(this,t)})},52568:function(e,t,n){"use strict";var r=n(94644),i=n(72805),o=r.aTypedArrayConstructor,a=r.exportTypedArrayStaticMethod;a("of",function(){var e=0,t=arguments.length,n=new(o(this))(t);while(t>e)n[e]=arguments[e++];return n},i)},36072:function(e,t,n){"use strict";var r=n(94644),i=n(80926).right,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("reduceRight",function(e){var t=arguments.length;return i(o(this),e,t,t>1?arguments[1]:void 0)})},31575:function(e,t,n){"use strict";var r=n(94644),i=n(80926).left,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("reduce",function(e){var t=arguments.length;return i(o(this),e,t,t>1?arguments[1]:void 0)})},88747:function(e,t,n){"use strict";var r=n(94644),i=r.aTypedArray,o=r.exportTypedArrayMethod,a=Math.floor;o("reverse",function(){var e,t=this,n=i(t).length,r=a(n/2),o=0;while(o1?arguments[1]:void 0,1),n=c(e);if(v)return i(f,this,n,t);var r=this.length,o=a(n),l=0;if(o+t>r)throw new u("Wrong length");while(li)l[i]=n[i++];return l},l)},57301:function(e,t,n){"use strict";var r=n(94644),i=n(59213).some,o=r.aTypedArray,a=r.exportTypedArrayMethod;a("some",function(e){return i(o(this),e,arguments.length>1?arguments[1]:void 0)})},373:function(e,t,n){"use strict";var r=n(44576),i=n(27476),o=n(79039),a=n(79306),s=n(74488),c=n(94644),l=n(13709),u=n(13763),d=n(39519),h=n(3607),f=c.aTypedArray,p=c.exportTypedArrayMethod,m=r.Uint16Array,v=m&&i(m.prototype.sort),g=!!v&&!(o(function(){v(new m(2),null)})&&o(function(){v(new m(2),{})})),y=!!v&&!o(function(){if(d)return d<74;if(l)return l<67;if(u)return!0;if(h)return h<602;var e,t,n=new m(516),r=Array(516);for(e=0;e<516;e++)t=e%4,n[e]=515-e,r[e]=e-2*t+3;for(v(n,function(e,t){return(e/4|0)-(t/4|0)}),e=0;e<516;e++)if(n[e]!==r[e])return!0}),_=function(e){return function(t,n){return void 0!==e?+e(t,n)||0:n!==n?t!==t?0:-1:t!==t?1:0===t&&0===n?1/t>0?1/n>0?0:1:1/n>0?-1:0:t>n?1:t0&&0!==(e&n);n>>=1)t++;return t},le=function(e){var t=null,n=e.length;switch(n){case 1:t=e[0];break;case 2:t=(31&e[0])<<6|63&e[1];break;case 3:t=(15&e[0])<<12|(63&e[1])<<6|63&e[2];break;case 4:t=(7&e[0])<<18|(63&e[1])<<12|(63&e[2])<<6|63&e[3];break}return null===t||t>1114111||t>=55296&&t<=57343||t<(n>3?65536:n>2?2048:n>1?128:0)?null:t},ue=function(e){e=Z(e,ie," ");var t=e.length,n="",r=0;while(rt){n+="%",r++;continue}var o=se(e,r+1);if(o!==o){n+=i,r++;continue}r+=2;var a=ce(o);if(0===a)i=K(o);else{if(1===a||a>4){n+=oe,r++;continue}var s=[o],c=1;while(ct||"%"!==G(e,r))break;var l=se(e,r+1);if(l!==l||l>191||l<128)break;if(1===c){if(224===o&&l<160)break;if(237===o&&l>159)break;if(240===o&&l<144)break;if(244===o&&l>143)break}X(s,l),r+=2,c++}if(s.length!==a){n+=oe;continue}var u=le(s);if(null===u){for(var d=0;d=t.length)return e.target=null,z(void 0,!0);var r=t[n];switch(e.kind){case"keys":return z(r.key,!1);case"values":return z(r.value,!1)}return z([r.key,r.value],!1)},!0),ve=function(e){this.entries=[],this.url=null,void 0!==e&&(w(e)?this.parseObject(e):this.parseQuery("string"==typeof e?"?"===G(e,0)?ne(e,1):e:x(e)))};ve.prototype={type:Y,bindURL:function(e){this.url=e,this.update()},parseObject:function(e){var t,n,r,i,o,a,c,l=this.entries,u=S(e);if(u){t=C(e,u),n=t.next;while(!(r=s(n,t)).done){if(i=C(A(r.value)),o=i.next,(a=s(o,i)).done||(c=s(o,i)).done||!s(o,i).done)throw new W("Expected sequence with length 2");X(l,{key:x(a.value),value:x(c.value)})}}else for(var d in e)_(e,d)&&X(l,{key:d,value:x(e[d])})},parseQuery:function(e){if(e){var t,n,r=this.entries,i=te(e,"&"),o=0;while(o0?arguments[0]:void 0,t=P(this,new ve(e));l||(this.size=t.entries.length)},ye=ge.prototype;if(f(ye,{append:function(e,t){var n=E(this);T(arguments.length,2),X(n.entries,{key:x(e),value:x(t)}),l||this.size++,n.updateURL()},delete:function(e){var t=E(this),n=T(arguments.length,1),r=t.entries,i=x(e),o=n<2?void 0:arguments[1],a=void 0===o?o:x(o),s=0;while(st.key?1:-1}),e.updateURL()},forEach:function(e){var t,n=E(this).entries,r=b(e,arguments.length>1?arguments[1]:void 0),i=0;while(i1?Me(arguments[1]):{})}}),y(I)){var Ae=function(e){return g(this,R),new I(e,arguments.length>1?Me(arguments[1]):{})};R.constructor=Ae,Ae.prototype=R,r({global:!0,constructor:!0,dontCallGetSet:!0,forced:!0},{Request:Ae})}}e.exports={URLSearchParams:ge,getState:E}},48408:function(e,t,n){"use strict";n(98406)},45806:function(e,t,n){"use strict";n(47764);var r,i=n(46518),o=n(43724),a=n(67416),s=n(44576),c=n(76080),l=n(79504),u=n(36840),d=n(62106),h=n(90679),f=n(39297),p=n(44213),m=n(97916),v=n(67680),g=n(68183).codeAt,y=n(3717),_=n(655),b=n(10687),M=n(22812),A=n(98406),w=n(91181),x=w.set,k=w.getterFor("URL"),L=A.URLSearchParams,C=A.getState,S=s.URL,z=s.TypeError,T=s.encodeURIComponent,O=s.parseInt,H=Math.floor,D=Math.pow,Y=l("".charAt),V=l(/./.exec),P=l([].join),E=l(1.1.toString),j=l([].pop),F=l([].push),I=l("".replace),$=l([].shift),R=l("".split),N=l("".slice),W=l("".toLowerCase),B=l([].unshift),K="Invalid authority",U="Invalid scheme",q="Invalid host",G="Invalid port",J=/[a-z]/i,X=/[\d+\-.a-z]/i,Z=/\d/,Q=/^0x/i,ee=/^[0-7]+$/,te=/^\d+$/,ne=/^[\da-f]+$/i,re=/[\0\t\n\r #%/:<>?@[\\\]^|]/,ie=/[\0\t\n\r #/:<>?@[\\\]^|]/,oe=/^[\u0000-\u0020]+/,ae=/(^|[^\u0000-\u0020])[\u0000-\u0020]+$/,se=/[\t\n\r]/g,ce=function(e){var t,n,r=R(e,".");if(""===r[r.length-1]){if(1===r.length)return!1;r.length--}return t=r[r.length-1],!!V(te,t)||!!V(Q,t)&&(n=N(t,2),""===n||!!V(ne,n))},le=function(e){var t,n,r,i,o,a,s,c=R(e,".");if(c.length&&""===c[c.length-1]&&c.length--,t=c.length,t>4)return null;for(n=[],r=0;r1&&"0"===Y(i,0)&&(o=V(Q,i)?16:8,i=N(i,8===o?1:2)),""===i)a=0;else{if(!V(10===o?te:8===o?ee:ne,i))return null;a=O(i,o)}F(n,a)}for(r=0;r=D(256,5-t))return null}else if(a>255)return null;for(s=j(n),r=0;r6)return;r=0;while(h()){if(i=null,r>0){if(!("."===h()&&r<4))return;d++}if(!V(Z,h()))return;while(V(Z,h())){if(o=O(h(),10),null===i)i=o;else{if(0===i)return;i=10*i+o}if(i>255)return;d++}c[l]=256*c[l]+i,r++,2!==r&&4!==r||l++}if(4!==r)return;break}if(":"===h()){if(d++,!h())return}else if(h())return;c[l++]=t}else{if(null!==u)return;d++,l++,u=l}}if(null!==u){a=l-u,l=7;while(0!==l&&a>0)s=c[l],c[l--]=c[u+a-1],c[u+--a]=s}else if(8!==l)return;return c},de=function(e){for(var t=null,n=1,r=null,i=0,o=0;o<8;o++)0!==e[o]?(i>n&&(t=r,n=i),r=null,i=0):(null===r&&(r=o),++i);return i>n?r:t},he=function(e){var t,n,r,i;if("number"==typeof e){for(t=[],n=0;n<4;n++)B(t,e%256),e=H(e/256);return P(t,".")}if("object"==typeof e){for(t="",r=de(e),n=0;n<8;n++)i&&0===e[n]||(i&&(i=!1),r===n?(t+=n?":":"::",i=!0):(t+=E(e[n],16),n<7&&(t+=":")));return"["+t+"]"}return e},fe={},pe=p({},fe,{" ":1,'"':1,"#":1,"<":1,">":1}),me=p({},pe,{"'":1}),ve=p({},fe,{" ":1,'"':1,"<":1,">":1,"`":1}),ge=p({},ve,{"#":1,"?":1,"{":1,"}":1,"^":1}),ye=p({},ge,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),_e=function(e,t){var n=g(e,0);return n>=32&&n<127&&!f(t,e)?e:"'"===e&&f(t,e)?"%27":T(e)},be={ftp:21,file:null,http:80,https:443,ws:80,wss:443},Me=function(e,t){var n;return 2===e.length&&V(J,Y(e,0))&&(":"===(n=Y(e,1))||!t&&"|"===n)},Ae=function(e){var t;return e.length>1&&Me(N(e,0,2))&&(2===e.length||"/"===(t=Y(e,2))||"\\"===t||"?"===t||"#"===t)},we=function(e){return"."===e||"%2e"===W(e)},xe=function(e){return e=W(e),".."===e||"%2e."===e||".%2e"===e||"%2e%2e"===e},ke={},Le={},Ce={},Se={},ze={},Te={},Oe={},He={},De={},Ye={},Ve={},Pe={},Ee={},je={},Fe={},Ie={},$e={},Re={},Ne={},We={},Be={},Ke=function(e,t,n){var r,i,o,a=_(e);if(t){if(i=this.parse(a),i)throw new z(i);this.searchParams=null}else{if(void 0!==n&&(r=new Ke(n,!0)),i=this.parse(a,null,r),i)throw new z(i);o=C(new L),o.bindURL(this),this.searchParams=o}};Ke.prototype={type:"URL",parse:function(e,t,n){var i,o,a,s,c=this,l=t||ke,u=0,d="",h=!1,p=!1,g=!1;e=_(e),t||(c.scheme="",c.username="",c.password="",c.host=null,c.port=null,c.path=[],c.query=null,c.fragment=null,c.cannotBeABaseURL=!1,e=I(e,oe,""),e=I(e,ae,"$1")),e=I(e,se,""),i=m(e);while(u<=i.length){switch(o=i[u],l){case ke:if(!o||!V(J,o)){if(t)return U;l=Ce;continue}d+=W(o),l=Le;break;case Le:if(o&&V(X,o))d+=W(o);else{if(":"!==o){if(t)return U;d="",l=Ce,u=0;continue}if(t&&(c.isSpecial()!==f(be,d)||"file"===d&&(c.includesCredentials()||null!==c.port)||"file"===c.scheme&&""===c.host))return;if(c.scheme=d,t)return void(c.isSpecial()&&be[c.scheme]===c.port&&(c.port=null));d="","file"===c.scheme?l=je:c.isSpecial()&&n&&n.scheme===c.scheme?l=Se:c.isSpecial()?l=He:"/"===i[u+1]?(l=ze,u++):(c.cannotBeABaseURL=!0,F(c.path,""),l=Ne)}break;case Ce:if(!n||n.cannotBeABaseURL&&"#"!==o)return U;if(n.cannotBeABaseURL&&"#"===o){c.scheme=n.scheme,c.path=v(n.path),c.query=n.query,c.fragment="",c.cannotBeABaseURL=!0,l=Be;break}l="file"===n.scheme?je:Te;continue;case Se:if("/"!==o||"/"!==i[u+1]){l=Te;continue}l=De,u++;break;case ze:if("/"===o){l=Ye;break}l=Re;continue;case Te:if(c.scheme=n.scheme,o===r)c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,c.path=v(n.path),c.query=n.query;else if("/"===o||"\\"===o&&c.isSpecial())l=Oe;else if("?"===o)c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,c.path=v(n.path),c.query="",l=We;else{if("#"!==o){c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,c.path=v(n.path),c.path.length&&c.path.length--,l=Re;continue}c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,c.path=v(n.path),c.query=n.query,c.fragment="",l=Be}break;case Oe:if(!c.isSpecial()||"/"!==o&&"\\"!==o){if("/"!==o){c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,l=Re;continue}l=Ye}else l=De;break;case He:if(l=De,"/"!==o||"/"!==i[u+1])continue;u++;break;case De:if("/"!==o&&"\\"!==o){l=Ye;continue}break;case Ye:if("@"===o){h&&(d="%40"+d),h=!0,a=m(d);for(var y=0;y65535)return G;c.port=c.isSpecial()&&A===be[c.scheme]?null:A,d=""}if(t)return;l=$e;continue}return G}d+=o;break;case je:if(c.scheme="file",c.host="","/"===o||"\\"===o)l=Fe;else{if(!n||"file"!==n.scheme){l=Re;continue}switch(o){case r:c.host=n.host,c.path=v(n.path),c.query=n.query;break;case"?":c.host=n.host,c.path=v(n.path),c.query="",l=We;break;case"#":c.host=n.host,c.path=v(n.path),c.query=n.query,c.fragment="",l=Be;break;default:c.host=n.host,Ae(P(v(i,u),""))||(c.path=v(n.path),c.shortenPath()),l=Re;continue}}break;case Fe:if("/"===o||"\\"===o){l=Ie;break}n&&"file"===n.scheme&&(c.host=n.host,!Ae(P(v(i,u),""))&&Me(n.path[0],!0)&&F(c.path,n.path[0])),l=Re;continue;case Ie:if(o===r||"/"===o||"\\"===o||"?"===o||"#"===o){if(!t&&Me(d))l=Re;else if(""===d){if(c.host="",t)return;l=$e}else{if(s=c.parseHost(d),s)return s;if("localhost"===c.host&&(c.host=""),t)return;d="",l=$e}continue}d+=o;break;case $e:if(c.isSpecial()){if(l=Re,"/"!==o&&"\\"!==o)continue}else if(t||"?"!==o)if(t||"#"!==o){if(o!==r&&(l=Re,"/"!==o))continue}else c.fragment="",l=Be;else c.query="",l=We;break;case Re:if(o===r||"/"===o||"\\"===o&&c.isSpecial()||!t&&("?"===o||"#"===o)){if(xe(d)?(c.shortenPath(),"/"===o||"\\"===o&&c.isSpecial()||F(c.path,"")):we(d)?"/"===o||"\\"===o&&c.isSpecial()||F(c.path,""):("file"===c.scheme&&!c.path.length&&Me(d)&&(null!==c.host&&""!==c.host&&(c.host=""),d=Y(d,0)+":"),F(c.path,d)),d="","file"===c.scheme&&(o===r||"?"===o||"#"===o))while(c.path.length>1&&""===c.path[0])$(c.path);"?"===o?(c.query="",l=We):"#"===o&&(c.fragment="",l=Be)}else d+=_e(o,ge);break;case Ne:"?"===o?(c.query="",l=We):"#"===o?(c.fragment="",l=Be):o!==r&&(c.path[0]+=_e(o,fe));break;case We:t||"#"!==o?o!==r&&(c.query+=_e(o,c.isSpecial()?me:pe)):(c.fragment="",l=Be);break;case Be:o!==r&&(c.fragment+=_e(o,ve));break}u++}},parseHost:function(e){var t,n,r;if("["===Y(e,0)){if("]"!==Y(e,e.length-1))return q;if(t=ue(N(e,1,-1)),!t)return q;this.host=t}else if(this.isSpecial()){if(e=y(e),V(re,e))return q;if(ce(e)){if(t=le(e),null===t)return q;this.host=t}else this.host=e}else{if(V(ie,e))return q;for(t="",n=m(e),r=0;r1&&""===a[0]&&(l+="/."),l+=e.cannotBeABaseURL?a[0]:a.length?"/"+P(a,"/"):"",null!==s&&(l+="?"+s),null!==c&&(l+="#"+c),l},setHref:function(e){var t=this.parse(e);if(t)throw new z(t);this.searchParams.update()},getOrigin:function(){var e=this.scheme,t=this.port;if("blob"===e)try{return new Ue(this.path[0]).origin}catch(n){return"null"}return"file"!==e&&this.isSpecial()?e+"://"+he(this.host)+(null!==t?":"+t:""):"null"},getProtocol:function(){return this.scheme+":"},setProtocol:function(e){this.parse(_(e)+":",ke)},getUsername:function(){return this.username},setUsername:function(e){var t=m(_(e));if(!this.cannotHaveUsernamePasswordPort()){this.username="";for(var n=0;n1?arguments[1]:void 0,r=x(t,new Ke(e,!1,n));o||(t.href=r.serialize(),t.origin=r.getOrigin(),t.protocol=r.getProtocol(),t.username=r.getUsername(),t.password=r.getPassword(),t.host=r.getHost(),t.hostname=r.getHostname(),t.port=r.getPort(),t.pathname=r.getPathname(),t.search=r.getSearch(),t.searchParams=r.getSearchParams(),t.hash=r.getHash())},qe=Ue.prototype,Ge=function(e,t){return{get:function(){return k(this)[e]()},set:t&&function(e){return k(this)[t](e)},configurable:!0,enumerable:!0}};if(o&&(d(qe,"href",Ge("serialize","setHref")),d(qe,"origin",Ge("getOrigin")),d(qe,"protocol",Ge("getProtocol","setProtocol")),d(qe,"username",Ge("getUsername","setUsername")),d(qe,"password",Ge("getPassword","setPassword")),d(qe,"host",Ge("getHost","setHost")),d(qe,"hostname",Ge("getHostname","setHostname")),d(qe,"port",Ge("getPort","setPort")),d(qe,"pathname",Ge("getPathname","setPathname")),d(qe,"search",Ge("getSearch","setSearch")),d(qe,"searchParams",Ge("getSearchParams")),d(qe,"hash",Ge("getHash","setHash"))),u(qe,"toJSON",function(){return k(this).serialize()},{enumerable:!0}),u(qe,"toString",function(){return k(this).serialize()},{enumerable:!0}),S){var Je=S.createObjectURL,Xe=S.revokeObjectURL;Je&&u(Ue,"createObjectURL",c(Je,S)),Xe&&u(Ue,"revokeObjectURL",c(Xe,S))}b(Ue,"URL"),i({global:!0,constructor:!0,forced:!a,sham:!o},{URL:Ue})},3296:function(e,t,n){"use strict";n(45806)},27208:function(e,t,n){"use strict";var r=n(46518),i=n(69565);r({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return i(URL.prototype.toString,this)}})},6535:function(e){(function(t,n){e.exports=n()})(0,function(){"use strict";function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(t)}var t=/^\s+/,n=/\s+$/;function r(e,t){if(e=e||"",t=t||{},e instanceof r)return e;if(!(this instanceof r))return new r(e,t);var n=i(e);this._originalInput=e,this._r=n.r,this._g=n.g,this._b=n.b,this._a=n.a,this._roundA=Math.round(100*this._a)/100,this._format=t.format||n.format,this._gradientType=t.gradientType,this._r<1&&(this._r=Math.round(this._r)),this._g<1&&(this._g=Math.round(this._g)),this._b<1&&(this._b=Math.round(this._b)),this._ok=n.ok}function i(t){var n={r:0,g:0,b:0},r=1,i=null,a=null,c=null,u=!1,d=!1;return"string"==typeof t&&(t=I(t)),"object"==e(t)&&(F(t.r)&&F(t.g)&&F(t.b)?(n=o(t.r,t.g,t.b),u=!0,d="%"===String(t.r).substr(-1)?"prgb":"rgb"):F(t.h)&&F(t.s)&&F(t.v)?(i=V(t.s),a=V(t.v),n=l(t.h,i,a),u=!0,d="hsv"):F(t.h)&&F(t.s)&&F(t.l)&&(i=V(t.s),c=V(t.l),n=s(t.h,i,c),u=!0,d="hsl"),t.hasOwnProperty("a")&&(r=t.a)),r=S(r),{ok:u,format:t.format||d,r:Math.min(255,Math.max(n.r,0)),g:Math.min(255,Math.max(n.g,0)),b:Math.min(255,Math.max(n.b,0)),a:r}}function o(e,t,n){return{r:255*z(e,255),g:255*z(t,255),b:255*z(n,255)}}function a(e,t,n){e=z(e,255),t=z(t,255),n=z(n,255);var r,i,o=Math.max(e,t,n),a=Math.min(e,t,n),s=(o+a)/2;if(o==a)r=i=0;else{var c=o-a;switch(i=s>.5?c/(2-o-a):c/(o+a),o){case e:r=(t-n)/c+(t1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}if(e=z(e,360),t=z(t,100),n=z(n,100),0===t)r=i=o=n;else{var s=n<.5?n*(1+t):n+t-n*t,c=2*n-s;r=a(c,s,e+1/3),i=a(c,s,e),o=a(c,s,e-1/3)}return{r:255*r,g:255*i,b:255*o}}function c(e,t,n){e=z(e,255),t=z(t,255),n=z(n,255);var r,i,o=Math.max(e,t,n),a=Math.min(e,t,n),s=o,c=o-a;if(i=0===o?0:c/o,o==a)r=0;else{switch(o){case e:r=(t-n)/c+(t>1)+720)%360;--t;)i.h=(i.h+o)%360,a.push(r(i));return a}function x(e,t){t=t||6;var n=r(e).toHsv(),i=n.h,o=n.s,a=n.v,s=[],c=1/t;while(t--)s.push(r({h:i,s:o,v:a})),a=(a+c)%1;return s}r.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var e=this.toRgb();return(299*e.r+587*e.g+114*e.b)/1e3},getLuminance:function(){var e,t,n,r,i,o,a=this.toRgb();return e=a.r/255,t=a.g/255,n=a.b/255,r=e<=.03928?e/12.92:Math.pow((e+.055)/1.055,2.4),i=t<=.03928?t/12.92:Math.pow((t+.055)/1.055,2.4),o=n<=.03928?n/12.92:Math.pow((n+.055)/1.055,2.4),.2126*r+.7152*i+.0722*o},setAlpha:function(e){return this._a=S(e),this._roundA=Math.round(100*this._a)/100,this},toHsv:function(){var e=c(this._r,this._g,this._b);return{h:360*e.h,s:e.s,v:e.v,a:this._a}},toHsvString:function(){var e=c(this._r,this._g,this._b),t=Math.round(360*e.h),n=Math.round(100*e.s),r=Math.round(100*e.v);return 1==this._a?"hsv("+t+", "+n+"%, "+r+"%)":"hsva("+t+", "+n+"%, "+r+"%, "+this._roundA+")"},toHsl:function(){var e=a(this._r,this._g,this._b);return{h:360*e.h,s:e.s,l:e.l,a:this._a}},toHslString:function(){var e=a(this._r,this._g,this._b),t=Math.round(360*e.h),n=Math.round(100*e.s),r=Math.round(100*e.l);return 1==this._a?"hsl("+t+", "+n+"%, "+r+"%)":"hsla("+t+", "+n+"%, "+r+"%, "+this._roundA+")"},toHex:function(e){return u(this._r,this._g,this._b,e)},toHexString:function(e){return"#"+this.toHex(e)},toHex8:function(e){return d(this._r,this._g,this._b,this._a,e)},toHex8String:function(e){return"#"+this.toHex8(e)},toRgb:function(){return{r:Math.round(this._r),g:Math.round(this._g),b:Math.round(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+")":"rgba("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:Math.round(100*z(this._r,255))+"%",g:Math.round(100*z(this._g,255))+"%",b:Math.round(100*z(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+Math.round(100*z(this._r,255))+"%, "+Math.round(100*z(this._g,255))+"%, "+Math.round(100*z(this._b,255))+"%)":"rgba("+Math.round(100*z(this._r,255))+"%, "+Math.round(100*z(this._g,255))+"%, "+Math.round(100*z(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1)&&(L[u(this._r,this._g,this._b,!0)]||!1)},toFilter:function(e){var t="#"+h(this._r,this._g,this._b,this._a),n=t,i=this._gradientType?"GradientType = 1, ":"";if(e){var o=r(e);n="#"+h(o._r,o._g,o._b,o._a)}return"progid:DXImageTransform.Microsoft.gradient("+i+"startColorstr="+t+",endColorstr="+n+")"},toString:function(e){var t=!!e;e=e||this._format;var n=!1,r=this._a<1&&this._a>=0,i=!t&&r&&("hex"===e||"hex6"===e||"hex3"===e||"hex4"===e||"hex8"===e||"name"===e);return i?"name"===e&&0===this._a?this.toName():this.toRgbString():("rgb"===e&&(n=this.toRgbString()),"prgb"===e&&(n=this.toPercentageRgbString()),"hex"!==e&&"hex6"!==e||(n=this.toHexString()),"hex3"===e&&(n=this.toHexString(!0)),"hex4"===e&&(n=this.toHex8String(!0)),"hex8"===e&&(n=this.toHex8String()),"name"===e&&(n=this.toName()),"hsl"===e&&(n=this.toHslString()),"hsv"===e&&(n=this.toHsvString()),n||this.toHexString())},clone:function(){return r(this.toString())},_applyModification:function(e,t){var n=e.apply(null,[this].concat([].slice.call(t)));return this._r=n._r,this._g=n._g,this._b=n._b,this.setAlpha(n._a),this},lighten:function(){return this._applyModification(v,arguments)},brighten:function(){return this._applyModification(g,arguments)},darken:function(){return this._applyModification(y,arguments)},desaturate:function(){return this._applyModification(f,arguments)},saturate:function(){return this._applyModification(p,arguments)},greyscale:function(){return this._applyModification(m,arguments)},spin:function(){return this._applyModification(_,arguments)},_applyCombination:function(e,t){return e.apply(null,[this].concat([].slice.call(t)))},analogous:function(){return this._applyCombination(w,arguments)},complement:function(){return this._applyCombination(b,arguments)},monochromatic:function(){return this._applyCombination(x,arguments)},splitcomplement:function(){return this._applyCombination(A,arguments)},triad:function(){return this._applyCombination(M,[3])},tetrad:function(){return this._applyCombination(M,[4])}},r.fromRatio=function(t,n){if("object"==e(t)){var i={};for(var o in t)t.hasOwnProperty(o)&&(i[o]="a"===o?t[o]:V(t[o]));t=i}return r(t,n)},r.equals=function(e,t){return!(!e||!t)&&r(e).toRgbString()==r(t).toRgbString()},r.random=function(){return r.fromRatio({r:Math.random(),g:Math.random(),b:Math.random()})},r.mix=function(e,t,n){n=0===n?0:n||50;var i=r(e).toRgb(),o=r(t).toRgb(),a=n/100,s={r:(o.r-i.r)*a+i.r,g:(o.g-i.g)*a+i.g,b:(o.b-i.b)*a+i.b,a:(o.a-i.a)*a+i.a};return r(s)},r.readability=function(e,t){var n=r(e),i=r(t);return(Math.max(n.getLuminance(),i.getLuminance())+.05)/(Math.min(n.getLuminance(),i.getLuminance())+.05)},r.isReadable=function(e,t,n){var i,o,a=r.readability(e,t);switch(o=!1,i=$(n),i.level+i.size){case"AAsmall":case"AAAlarge":o=a>=4.5;break;case"AAlarge":o=a>=3;break;case"AAAsmall":o=a>=7;break}return o},r.mostReadable=function(e,t,n){var i,o,a,s,c=null,l=0;n=n||{},o=n.includeFallbackColors,a=n.level,s=n.size;for(var u=0;ul&&(l=i,c=r(t[u]));return r.isReadable(e,c,{level:a,size:s})||!o?c:(n.includeFallbackColors=!1,r.mostReadable(e,["#fff","#000"],n))};var k=r.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},L=r.hexNames=C(k);function C(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[e[n]]=n);return t}function S(e){return e=parseFloat(e),(isNaN(e)||e<0||e>1)&&(e=1),e}function z(e,t){H(e)&&(e="100%");var n=D(e);return e=Math.min(t,Math.max(0,parseFloat(e))),n&&(e=parseInt(e*t,10)/100),Math.abs(e-t)<1e-6?1:e%t/parseFloat(t)}function T(e){return Math.min(1,Math.max(0,e))}function O(e){return parseInt(e,16)}function H(e){return"string"==typeof e&&-1!=e.indexOf(".")&&1===parseFloat(e)}function D(e){return"string"===typeof e&&-1!=e.indexOf("%")}function Y(e){return 1==e.length?"0"+e:""+e}function V(e){return e<=1&&(e=100*e+"%"),e}function P(e){return Math.round(255*parseFloat(e)).toString(16)}function E(e){return O(e)/255}var j=function(){var e="[-\\+]?\\d+%?",t="[-\\+]?\\d*\\.\\d+%?",n="(?:"+t+")|(?:"+e+")",r="[\\s|\\(]+("+n+")[,|\\s]+("+n+")[,|\\s]+("+n+")\\s*\\)?",i="[\\s|\\(]+("+n+")[,|\\s]+("+n+")[,|\\s]+("+n+")[,|\\s]+("+n+")\\s*\\)?";return{CSS_UNIT:new RegExp(n),rgb:new RegExp("rgb"+r),rgba:new RegExp("rgba"+i),hsl:new RegExp("hsl"+r),hsla:new RegExp("hsla"+i),hsv:new RegExp("hsv"+r),hsva:new RegExp("hsva"+i),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();function F(e){return!!j.CSS_UNIT.exec(e)}function I(e){e=e.replace(t,"").replace(n,"").toLowerCase();var r,i=!1;if(k[e])e=k[e],i=!0;else if("transparent"==e)return{r:0,g:0,b:0,a:0,format:"name"};return(r=j.rgb.exec(e))?{r:r[1],g:r[2],b:r[3]}:(r=j.rgba.exec(e))?{r:r[1],g:r[2],b:r[3],a:r[4]}:(r=j.hsl.exec(e))?{h:r[1],s:r[2],l:r[3]}:(r=j.hsla.exec(e))?{h:r[1],s:r[2],l:r[3],a:r[4]}:(r=j.hsv.exec(e))?{h:r[1],s:r[2],v:r[3]}:(r=j.hsva.exec(e))?{h:r[1],s:r[2],v:r[3],a:r[4]}:(r=j.hex8.exec(e))?{r:O(r[1]),g:O(r[2]),b:O(r[3]),a:E(r[4]),format:i?"name":"hex8"}:(r=j.hex6.exec(e))?{r:O(r[1]),g:O(r[2]),b:O(r[3]),format:i?"name":"hex"}:(r=j.hex4.exec(e))?{r:O(r[1]+""+r[1]),g:O(r[2]+""+r[2]),b:O(r[3]+""+r[3]),a:E(r[4]+""+r[4]),format:i?"name":"hex8"}:!!(r=j.hex3.exec(e))&&{r:O(r[1]+""+r[1]),g:O(r[2]+""+r[2]),b:O(r[3]+""+r[3]),format:i?"name":"hex"}}function $(e){var t,n;return e=e||{level:"AA",size:"small"},t=(e.level||"AA").toUpperCase(),n=(e.size||"small").toLowerCase(),"AA"!==t&&"AAA"!==t&&(t="AA"),"small"!==n&&"large"!==n&&(n="small"),{level:t,size:n}}return r})},93511:function(e,t,n){"use strict";n.d(t,{In:function(){return Je}});var r=n(85471);const i=/^[a-z0-9]+(-[a-z0-9]+)*$/,o=(e,t,n,r="")=>{const i=e.split(":");if("@"===e.slice(0,1)){if(i.length<2||i.length>3)return null;r=i.shift().slice(1)}if(i.length>3||!i.length)return null;if(i.length>1){const e=i.pop(),n=i.pop(),o={provider:i.length>0?i[0]:r,prefix:n,name:e};return t&&!a(o)?null:o}const o=i[0],s=o.split("-");if(s.length>1){const e={provider:r,prefix:s.shift(),name:s.join("-")};return t&&!a(e)?null:e}if(n&&""===r){const e={provider:r,prefix:"",name:o};return t&&!a(e,n)?null:e}return null},a=(e,t)=>!!e&&!(""!==e.provider&&!e.provider.match(i)||!(t&&""===e.prefix||e.prefix.match(i))||!e.name.match(i)),s=Object.freeze({left:0,top:0,width:16,height:16}),c=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),l=Object.freeze({...s,...c}),u=Object.freeze({...l,body:"",hidden:!1});function d(e,t){const n={};!e.hFlip!==!t.hFlip&&(n.hFlip=!0),!e.vFlip!==!t.vFlip&&(n.vFlip=!0);const r=((e.rotate||0)+(t.rotate||0))%4;return r&&(n.rotate=r),n}function h(e,t){const n=d(e,t);for(const r in u)r in c?r in e&&!(r in n)&&(n[r]=c[r]):r in t?n[r]=t[r]:r in e&&(n[r]=e[r]);return n}function f(e,t){const n=e.icons,r=e.aliases||Object.create(null),i=Object.create(null);function o(e){if(n[e])return i[e]=[];if(!(e in i)){i[e]=null;const t=r[e]&&r[e].parent,n=t&&o(t);n&&(i[e]=[t].concat(n))}return i[e]}return(t||Object.keys(n).concat(Object.keys(r))).forEach(o),i}function p(e,t,n){const r=e.icons,i=e.aliases||Object.create(null);let o={};function a(e){o=h(r[e]||i[e],o)}return a(t),n.forEach(a),h(e,o)}function m(e,t){const n=[];if("object"!==typeof e||"object"!==typeof e.icons)return n;e.not_found instanceof Array&&e.not_found.forEach(e=>{t(e,null),n.push(e)});const r=f(e);for(const i in r){const o=r[i];o&&(t(i,p(e,i,o)),n.push(i))}return n}const v={provider:"",aliases:{},not_found:{},...s};function g(e,t){for(const n in t)if(n in e&&typeof e[n]!==typeof t[n])return!1;return!0}function y(e){if("object"!==typeof e||null===e)return null;const t=e;if("string"!==typeof t.prefix||!e.icons||"object"!==typeof e.icons)return null;if(!g(e,v))return null;const n=t.icons;for(const o in n){const e=n[o];if(!o.match(i)||"string"!==typeof e.body||!g(e,u))return null}const r=t.aliases||Object.create(null);for(const o in r){const e=r[o],t=e.parent;if(!o.match(i)||"string"!==typeof t||!n[t]&&!r[t]||!g(e,u))return null}return t}const _=Object.create(null);function b(e,t){return{provider:e,prefix:t,icons:Object.create(null),missing:new Set}}function M(e,t){const n=_[e]||(_[e]=Object.create(null));return n[t]||(n[t]=b(e,t))}function A(e,t){return y(t)?m(t,(t,n)=>{n?e.icons[t]=n:e.missing.add(t)}):[]}function w(e,t,n){try{if("string"===typeof n.body)return e.icons[t]={...n},!0}catch(r){}return!1}let x=!1;function k(e){return"boolean"===typeof e&&(x=e),x}function L(e){const t="string"===typeof e?o(e,!0,x):e;if(t){const e=M(t.provider,t.prefix),n=t.name;return e.icons[n]||(e.missing.has(n)?null:void 0)}}function C(e,t){const n=o(e,!0,x);if(!n)return!1;const r=M(n.provider,n.prefix);return w(r,n.name,t)}function S(e,t){if("object"!==typeof e)return!1;if("string"!==typeof t&&(t=e.provider||""),x&&!t&&!e.prefix){let t=!1;return y(e)&&(e.prefix="",m(e,(e,n)=>{n&&C(e,n)&&(t=!0)})),t}const n=e.prefix;if(!a({provider:t,prefix:n,name:"a"}))return!1;const r=M(t,n);return!!A(r,e)}const z=Object.freeze({width:null,height:null}),T=Object.freeze({...z,...c}),O=/(-?[0-9.]*[0-9]+[0-9.]*)/g,H=/^-?[0-9.]*[0-9]+[0-9.]*$/g;function D(e,t,n){if(1===t)return e;if(n=n||100,"number"===typeof e)return Math.ceil(e*t*n)/n;if("string"!==typeof e)return e;const r=e.split(O);if(null===r||!r.length)return e;const i=[];let o=r.shift(),a=H.test(o);while(1){if(a){const e=parseFloat(o);isNaN(e)?i.push(o):i.push(Math.ceil(e*t*n)/n)}else i.push(o);if(o=r.shift(),void 0===o)return i.join("");a=!a}}const Y=e=>"unset"===e||"undefined"===e||"none"===e;function V(e,t){const n={...l,...e},r={...T,...t},i={left:n.left,top:n.top,width:n.width,height:n.height};let o=n.body;[n,r].forEach(e=>{const t=[],n=e.hFlip,r=e.vFlip;let a,s=e.rotate;switch(n?r?s+=2:(t.push("translate("+(i.width+i.left).toString()+" "+(0-i.top).toString()+")"),t.push("scale(-1 1)"),i.top=i.left=0):r&&(t.push("translate("+(0-i.left).toString()+" "+(i.height+i.top).toString()+")"),t.push("scale(1 -1)"),i.top=i.left=0),s<0&&(s-=4*Math.floor(s/4)),s%=4,s){case 1:a=i.height/2+i.top,t.unshift("rotate(90 "+a.toString()+" "+a.toString()+")");break;case 2:t.unshift("rotate(180 "+(i.width/2+i.left).toString()+" "+(i.height/2+i.top).toString()+")");break;case 3:a=i.width/2+i.left,t.unshift("rotate(-90 "+a.toString()+" "+a.toString()+")");break}s%2===1&&(i.left!==i.top&&(a=i.left,i.left=i.top,i.top=a),i.width!==i.height&&(a=i.width,i.width=i.height,i.height=a)),t.length&&(o=''+o+"")});const a=r.width,s=r.height,c=i.width,u=i.height;let d,h;null===a?(h=null===s?"1em":"auto"===s?u:s,d=D(h,c/u)):(d="auto"===a?c:a,h=null===s?D(d,u/c):"auto"===s?u:s);const f={},p=(e,t)=>{Y(t)||(f[e]=t.toString())};return p("width",d),p("height",h),f.viewBox=i.left.toString()+" "+i.top.toString()+" "+c.toString()+" "+u.toString(),{attributes:f,body:o}}const P=/\sid="(\S+)"/g,E="IconifyId"+Date.now().toString(16)+(16777216*Math.random()|0).toString(16);let j=0;function F(e,t=E){const n=[];let r;while(r=P.exec(e))n.push(r[1]);if(!n.length)return e;const i="suffix"+(16777216*Math.random()|Date.now()).toString(16);return n.forEach(n=>{const r="function"===typeof t?t(n):t+(j++).toString(),o=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");e=e.replace(new RegExp('([#;"])('+o+')([")]|\\.[a-z])',"g"),"$1"+r+i+"$3")}),e=e.replace(new RegExp(i,"g"),""),e}const I=Object.create(null);function $(e,t){I[e]=t}function R(e){return I[e]||I[""]}function N(e){let t;if("string"===typeof e.resources)t=[e.resources];else if(t=e.resources,!(t instanceof Array)||!t.length)return null;const n={resources:t,path:e.path||"/",maxURL:e.maxURL||500,rotate:e.rotate||750,timeout:e.timeout||5e3,random:!0===e.random,index:e.index||0,dataAfterTimeout:!1!==e.dataAfterTimeout};return n}const W=Object.create(null),B=["https://api.simplesvg.com","https://api.unisvg.com"],K=[];while(B.length>0)1===B.length||Math.random()>.5?K.push(B.shift()):K.push(B.pop());function U(e,t){const n=N(t);return null!==n&&(W[e]=n,!0)}function q(e){return W[e]}W[""]=N({resources:["https://api.iconify.design"].concat(K)});const G=()=>{let e;try{if(e=fetch,"function"===typeof e)return e}catch(t){}};let J=G();function X(e,t){const n=q(e);if(!n)return 0;let r;if(n.maxURL){let e=0;n.resources.forEach(t=>{const n=t;e=Math.max(e,n.length)});const i=t+".json?icons=";r=n.maxURL-e-n.path.length-i.length}else r=0;return r}function Z(e){return 404===e}const Q=(e,t,n)=>{const r=[],i=X(e,t),o="icons";let a={type:o,provider:e,prefix:t,icons:[]},s=0;return n.forEach((n,c)=>{s+=n.length+1,s>=i&&c>0&&(r.push(a),a={type:o,provider:e,prefix:t,icons:[]},s=n.length),a.icons.push(n)}),r.push(a),r};function ee(e){if("string"===typeof e){const t=q(e);if(t)return t.path}return"/"}const te=(e,t,n)=>{if(!J)return void n("abort",424);let r=ee(t.provider);switch(t.type){case"icons":{const e=t.prefix,n=t.icons,i=n.join(","),o=new URLSearchParams({icons:i});r+=e+".json?"+o.toString();break}case"custom":{const e=t.uri;r+="/"===e.slice(0,1)?e.slice(1):e;break}default:return void n("abort",400)}let i=503;J(e+r).then(e=>{const t=e.status;if(200===t)return i=501,e.json();setTimeout(()=>{n(Z(t)?"abort":"next",t)})}).then(e=>{"object"===typeof e&&null!==e?setTimeout(()=>{n("success",e)}):setTimeout(()=>{404===e?n("abort",e):n("next",i)})}).catch(()=>{n("next",i)})},ne={prepare:Q,send:te};function re(e){const t={loaded:[],missing:[],pending:[]},n=Object.create(null);e.sort((e,t)=>e.provider!==t.provider?e.provider.localeCompare(t.provider):e.prefix!==t.prefix?e.prefix.localeCompare(t.prefix):e.name.localeCompare(t.name));let r={provider:"",prefix:"",name:""};return e.forEach(e=>{if(r.name===e.name&&r.prefix===e.prefix&&r.provider===e.provider)return;r=e;const i=e.provider,o=e.prefix,a=e.name,s=n[i]||(n[i]=Object.create(null)),c=s[o]||(s[o]=M(i,o));let l;l=a in c.icons?t.loaded:""===o||c.missing.has(a)?t.missing:t.pending;const u={provider:i,prefix:o,name:a};l.push(u)}),t}function ie(e,t){e.forEach(e=>{const n=e.loaderCallbacks;n&&(e.loaderCallbacks=n.filter(e=>e.id!==t))})}function oe(e){e.pendingCallbacksFlag||(e.pendingCallbacksFlag=!0,setTimeout(()=>{e.pendingCallbacksFlag=!1;const t=e.loaderCallbacks?e.loaderCallbacks.slice(0):[];if(!t.length)return;let n=!1;const r=e.provider,i=e.prefix;t.forEach(t=>{const o=t.icons,a=o.pending.length;o.pending=o.pending.filter(t=>{if(t.prefix!==i)return!0;const a=t.name;if(e.icons[a])o.loaded.push({provider:r,prefix:i,name:a});else{if(!e.missing.has(a))return n=!0,!0;o.missing.push({provider:r,prefix:i,name:a})}return!1}),o.pending.length!==a&&(n||ie([e],t.id),t.callback(o.loaded.slice(0),o.missing.slice(0),o.pending.slice(0),t.abort))})}))}let ae=0;function se(e,t,n){const r=ae++,i=ie.bind(null,n,r);if(!t.pending.length)return i;const o={id:r,icons:t,callback:e,abort:i};return n.forEach(e=>{(e.loaderCallbacks||(e.loaderCallbacks=[])).push(o)}),i}function ce(e,t=!0,n=!1){const r=[];return e.forEach(e=>{const i="string"===typeof e?o(e,t,n):e;i&&r.push(i)}),r}var le={resources:[],index:0,timeout:2e3,rotate:750,random:!1,dataAfterTimeout:!1};function ue(e,t,n,r){const i=e.resources.length,o=e.random?Math.floor(Math.random()*i):e.index;let a;if(e.random){let t=e.resources.slice(0);a=[];while(t.length>1){const e=Math.floor(Math.random()*t.length);a.push(t[e]),t=t.slice(0,e).concat(t.slice(e+1))}a=a.concat(t)}else a=e.resources.slice(o).concat(e.resources.slice(0,o));const s=Date.now();let c,l="pending",u=0,d=null,h=[],f=[];function p(){d&&(clearTimeout(d),d=null)}function m(){"pending"===l&&(l="aborted"),p(),h.forEach(e=>{"pending"===e.status&&(e.status="aborted")}),h=[]}function v(e,t){t&&(f=[]),"function"===typeof e&&f.push(e)}function g(){return{startTime:s,payload:t,status:l,queriesSent:u,queriesPending:h.length,subscribe:v,abort:m}}function y(){l="failed",f.forEach(e=>{e(void 0,c)})}function _(){h.forEach(e=>{"pending"===e.status&&(e.status="aborted")}),h=[]}function b(t,n,r){const i="success"!==n;switch(h=h.filter(e=>e!==t),l){case"pending":break;case"failed":if(i||!e.dataAfterTimeout)return;break;default:return}if("abort"===n)return c=r,void y();if(i)return c=r,void(h.length||(a.length?M():y()));if(p(),_(),!e.random){const n=e.resources.indexOf(t.resource);-1!==n&&n!==e.index&&(e.index=n)}l="completed",f.forEach(e=>{e(r)})}function M(){if("pending"!==l)return;p();const r=a.shift();if(void 0===r)return h.length?void(d=setTimeout(()=>{p(),"pending"===l&&(_(),y())},e.timeout)):void y();const i={status:"pending",resource:r,callback:(e,t)=>{b(i,e,t)}};h.push(i),u++,d=setTimeout(M,e.rotate),n(r,t,i.callback)}return"function"===typeof r&&f.push(r),setTimeout(M),g}function de(e){const t={...le,...e};let n=[];function r(){n=n.filter(e=>"pending"===e().status)}function i(e,i,o){const a=ue(t,e,i,(e,t)=>{r(),o&&o(e,t)});return n.push(a),a}function o(e){return n.find(t=>e(t))||null}const a={query:i,find:o,setIndex:e=>{t.index=e},getIndex:()=>t.index,cleanup:r};return a}function he(){}const fe=Object.create(null);function pe(e){if(!fe[e]){const t=q(e);if(!t)return;const n=de(t),r={config:t,redundancy:n};fe[e]=r}return fe[e]}function me(e,t,n){let r,i;if("string"===typeof e){const t=R(e);if(!t)return n(void 0,424),he;i=t.send;const o=pe(e);o&&(r=o.redundancy)}else{const t=N(e);if(t){r=de(t);const n=e.resources?e.resources[0]:"",o=R(n);o&&(i=o.send)}}return r&&i?r.query(t,i,n)().abort:(n(void 0,424),he)}const ve="iconify2",ge="iconify",ye=ge+"-count",_e=ge+"-version",be=36e5,Me=168;function Ae(e,t){try{return e.getItem(t)}catch(n){}}function we(e,t,n){try{return e.setItem(t,n),!0}catch(r){}}function xe(e,t){try{e.removeItem(t)}catch(n){}}function ke(e,t){return we(e,ye,t.toString())}function Le(e){return parseInt(Ae(e,ye))||0}const Ce={local:!0,session:!0},Se={local:new Set,session:new Set};let ze=!1;function Te(e){ze=e}let Oe="undefined"===typeof window?{}:window;function He(e){const t=e+"Storage";try{if(Oe&&Oe[t]&&"number"===typeof Oe[t].length)return Oe[t]}catch(n){}Ce[e]=!1}function De(e,t){const n=He(e);if(!n)return;const r=Ae(n,_e);if(r!==ve){if(r){const e=Le(n);for(let t=0;t{const r=ge+e.toString(),o=Ae(n,r);if("string"===typeof o){try{const n=JSON.parse(o);if("object"===typeof n&&"number"===typeof n.cached&&n.cached>i&&"string"===typeof n.provider&&"object"===typeof n.data&&"string"===typeof n.data.prefix&&t(n,e))return!0}catch(a){}xe(n,r)}};let a=Le(n);for(let s=a-1;s>=0;s--)o(s)||(s===a-1?(a--,ke(n,a)):Se[e].add(s))}function Ye(){if(!ze){Te(!0);for(const e in Ce)De(e,e=>{const t=e.data,n=e.provider,r=t.prefix,i=M(n,r);if(!A(i,t).length)return!1;const o=t.lastModified||-1;return i.lastModifiedCached=i.lastModifiedCached?Math.min(i.lastModifiedCached,o):o,!0})}}function Ve(e,t){const n=e.lastModifiedCached;if(n&&n>=t)return n===t;if(e.lastModifiedCached=t,n)for(const r in Ce)De(r,n=>{const r=n.data;return n.provider!==e.provider||r.prefix!==e.prefix||r.lastModified===t});return!0}function Pe(e,t){function n(n){let r;if(!Ce[n]||!(r=He(n)))return;const i=Se[n];let o;if(i.size)i.delete(o=Array.from(i).shift());else if(o=Le(r),!ke(r,o+1))return;const a={cached:Math.floor(Date.now()/be),provider:e.provider,data:t};return we(r,ge+o.toString(),JSON.stringify(a))}ze||Ye(),t.lastModified&&!Ve(e,t.lastModified)||Object.keys(t.icons).length&&(t.not_found&&(t=Object.assign({},t),delete t.not_found),n("local")||n("session"))}function Ee(){}function je(e){e.iconsLoaderFlag||(e.iconsLoaderFlag=!0,setTimeout(()=>{e.iconsLoaderFlag=!1,oe(e)}))}function Fe(e,t){e.iconsToLoad?e.iconsToLoad=e.iconsToLoad.concat(t).sort():e.iconsToLoad=t,e.iconsQueueFlag||(e.iconsQueueFlag=!0,setTimeout(()=>{e.iconsQueueFlag=!1;const{provider:t,prefix:n}=e,r=e.iconsToLoad;let i;if(delete e.iconsToLoad,!r||!(i=R(t)))return;const o=i.prepare(t,n,r);o.forEach(n=>{me(t,n,t=>{if("object"!==typeof t)n.icons.forEach(t=>{e.missing.add(t)});else try{const n=A(e,t);if(!n.length)return;const r=e.pendingIcons;r&&n.forEach(e=>{r.delete(e)}),Pe(e,t)}catch(r){console.error(r)}je(e)})})}))}const Ie=(e,t)=>{const n=ce(e,!0,k()),r=re(n);if(!r.pending.length){let e=!0;return t&&setTimeout(()=>{e&&t(r.loaded,r.missing,r.pending,Ee)}),()=>{e=!1}}const i=Object.create(null),o=[];let a,s;return r.pending.forEach(e=>{const{provider:t,prefix:n}=e;if(n===s&&t===a)return;a=t,s=n,o.push(M(t,n));const r=i[t]||(i[t]=Object.create(null));r[n]||(r[n]=[])}),r.pending.forEach(e=>{const{provider:t,prefix:n,name:r}=e,o=M(t,n),a=o.pendingIcons||(o.pendingIcons=new Set);a.has(r)||(a.add(r),i[t][n].push(r))}),o.forEach(e=>{const{provider:t,prefix:n}=e;i[t][n].length&&Fe(e,i[t][n])}),t?se(t,r,o):Ee};function $e(e,t){const n={...e};for(const r in t){const e=t[r],i=typeof e;r in z?(null===e||e&&("string"===i||"number"===i))&&(n[r]=e):i===typeof n[r]&&(n[r]="rotate"===r?e%4:e)}return n}const Re=/[\s,]+/;function Ne(e,t){t.split(Re).forEach(t=>{const n=t.trim();switch(n){case"horizontal":e.hFlip=!0;break;case"vertical":e.vFlip=!0;break}})}function We(e,t=0){const n=e.replace(/^-?[0-9.]*/,"");function r(e){while(e<0)e+=4;return e%4}if(""===n){const t=parseInt(e);return isNaN(t)?0:r(t)}if(n!==e){let t=0;switch(n){case"%":t=25;break;case"deg":t=90}if(t){let i=parseFloat(e.slice(0,e.length-n.length));return isNaN(i)?0:(i/=t,i%1===0?r(i):0)}}return t}const Be={...T,inline:!1},Ke={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink","aria-hidden":!0,role:"img"},Ue={};["horizontal","vertical"].forEach(e=>{const t=e.slice(0,1)+"Flip";Ue[e+"-flip"]=t,Ue[e.slice(0,1)+"-flip"]=t,Ue[e+"Flip"]=t});const qe=(e,t,n,r)=>{const i=$e(Be,t),o={...Ke},a={};for(let d in t){const e=t[d];if(void 0!==e)switch(d){case"icon":case"style":case"onLoad":break;case"inline":case"hFlip":case"vFlip":i[d]=!0===e||"true"===e||1===e;break;case"flip":"string"===typeof e&&Ne(i,e);break;case"color":a.color=e;break;case"rotate":"string"===typeof e?i[d]=We(e):"number"===typeof e&&(i[d]=e);break;case"ariaHidden":case"aria-hidden":!0!==e&&"true"!==e&&delete o["aria-hidden"];break;default:const t=Ue[d];t?!0!==e&&"true"!==e&&1!==e||(i[t]=!0):void 0===Be[d]&&(o[d]=e)}}const s=V(r,i);for(let d in s.attributes)o[d]=s.attributes[d];i.inline&&(a.verticalAlign="-0.125em");let c=0,l=t.id;"string"===typeof l&&(l=l.replace(/-/g,"_"));const u={attrs:o,domProps:{innerHTML:F(s.body,l?()=>l+"ID"+c++:"iconifyVue")}};return Object.keys(a).length>0&&(u.style=a),n&&(["on","ref"].forEach(e=>{void 0!==n[e]&&(u[e]=n[e])}),["staticClass","class"].forEach(e=>{void 0!==n[e]&&(u.class=n[e])})),e("svg",u)};if(k(!0),$("",ne),"undefined"!==typeof document&&"undefined"!==typeof window){Ye();const e=window;if(void 0!==e.IconifyPreload){const t=e.IconifyPreload,n="Invalid IconifyPreload syntax.";"object"===typeof t&&null!==t&&(t instanceof Array?t:[t]).forEach(e=>{try{("object"!==typeof e||null===e||e instanceof Array||"object"!==typeof e.icons||"string"!==typeof e.prefix||!S(e))&&console.error(n)}catch(t){console.error(n)}})}if(void 0!==e.IconifyProviders){const t=e.IconifyProviders;if("object"===typeof t&&null!==t)for(let e in t){const n="IconifyProviders["+e+"] is invalid.";try{const r=t[e];if("object"!==typeof r||!r||void 0===r.resources)continue;U(e,r)||console.error(n)}catch(Xe){console.error(n)}}}}const Ge={body:""},Je=r.Ay.extend({inheritAttrs:!1,data(){return{iconMounted:!1}},beforeMount(){this._name="",this._loadingIcon=null,this.iconMounted=!0},beforeDestroy(){this.abortLoading()},methods:{abortLoading(){this._loadingIcon&&(this._loadingIcon.abort(),this._loadingIcon=null)},getIcon(e,t){if("object"===typeof e&&null!==e&&"string"===typeof e.body)return this._name="",this.abortLoading(),{data:e};let n;if("string"!==typeof e||null===(n=o(e,!1,!0)))return this.abortLoading(),null;const r=L(n);if(!r)return this._loadingIcon&&this._loadingIcon.name===e||(this.abortLoading(),this._name="",null!==r&&(this._loadingIcon={name:e,abort:Ie([n],()=>{this.$forceUpdate()})})),null;this.abortLoading(),this._name!==e&&(this._name=e,t&&t(e));const i=["iconify"];return""!==n.prefix&&i.push("iconify--"+n.prefix),""!==n.provider&&i.push("iconify--"+n.provider),{data:r,classes:i}}},render(e){const t=Object.assign({},this.$attrs);let n=this.$data;const r=this.iconMounted?this.getIcon(t.icon,t.onLoad):null;return r?(r.classes&&(n={...n,class:("string"===typeof n["class"]?n["class"]+" ":"")+r.classes.join(" ")}),qe(e,t,n,r.data)):qe(e,t,n,Ge)}})},33754:function(e,t,n){"use strict";function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n=e.length?{done:!0}:{done:!1,value:e[i++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,s=!0,c=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){c=!0,a=e},f:function(){try{s||null==n["return"]||n["return"]()}finally{if(c)throw a}}}}},26297:function(e,t,n){"use strict";n.d(t,{A:function(){return a}});var r=n(44735);function i(e,t){if("object"!=(0,r.A)(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t||"default");if("object"!=(0,r.A)(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}function o(e){var t=i(e,"string");return"symbol"==(0,r.A)(t)?t:t+""}function a(e,t,n){return(t=o(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},76338:function(e,t,n){"use strict";n.d(t,{A:function(){return o}});var r=n(26297);function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function o(e){for(var t=1;t3?(i=p===r)&&(s=o[(a=o[4])?5:(a=3,3)],o[4]=o[5]=e):o[0]<=f&&((i=n<2&&fr||r>p)&&(o[4]=n,o[5]=r,h.n=p,a=0))}if(i||n>1)return c;throw d=!0,r}return function(i,u,p){if(l>1)throw TypeError("Generator is already running");for(d&&1===u&&f(u,p),a=u,s=p;(t=a<2?e:s)||!d;){o||(a?a<3?(a>1&&(h.n=-1),f(a,s)):h.n=s:h.v=s);try{if(l=2,o){if(a||(i="next"),t=o[i]){if(!(t=t.call(o,s)))throw TypeError("iterator result is not an object");if(!t.done)return t;s=t.value,a<2&&(a=0)}else 1===a&&(t=o["return"])&&t.call(o),a<2&&(s=TypeError("The iterator does not provide a '"+i+"' method"),a=1);o=e}else if((t=(d=h.n<0)?s:n.call(r,h))!==c)break}catch(t){o=e,a=1,s=t}finally{l=1}}return{value:t,done:d}}}(n,o,a),!0),u}var c={};function l(){}function u(){}function d(){}t=Object.getPrototypeOf;var h=[][o]?t(t([][o]())):(r(t={},o,function(){return this}),t),f=d.prototype=l.prototype=Object.create(h);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,r(e,a,"GeneratorFunction")),e.prototype=Object.create(f),e}return u.prototype=d,r(f,"constructor",d),r(d,"constructor",u),u.displayName="GeneratorFunction",r(d,a,"GeneratorFunction"),r(f),r(f,a,"Generator"),r(f,o,function(){return this}),r(f,"toString",function(){return"[object Generator]"}),(i=function(){return{w:s,m:p}})()}n.d(t,{A:function(){return i}})},21092:function(e,t,n){"use strict";function r(e){if(Array.isArray(e))return e}function i(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,o,a,s=[],c=!0,l=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&null!=n["return"]&&(a=n["return"](),Object(a)!==a))return}finally{if(l)throw i}}return s}}n.d(t,{A:function(){return s}});var o=n(72237);function a(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function s(e,t){return r(e)||i(e,t)||(0,o.A)(e,t)||a()}},9133:function(e,t,n){"use strict";n.d(t,{A:function(){return c}});var r=n(55696);function i(e){if(Array.isArray(e))return(0,r.A)(e)}function o(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}var a=n(72237);function s(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function c(e){return i(e)||o(e)||(0,a.A)(e)||s()}},68285:function(e,t,n){"use strict";function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}n.d(t,{A:function(){return r}})},72237:function(e,t,n){"use strict";n.d(t,{A:function(){return i}});var r=n(55696);function i(e,t){if(e){if("string"==typeof e)return(0,r.A)(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?(0,r.A)(e,t):void 0}}}}]); -(typeof window=='undefined'?global:window).tc_cfg_5634492426084697={"url":"css/theme-colors-de962665.css","colors":["#1890ff","#2f9bff","#46a6ff","#5db1ff","#74bcff","#8cc8ff","#a3d3ff","#badeff","#d1e9ff","#e6f7ff","#bae7ff","#91d5ff","#69c0ff","#40a9ff","#1890ff","#096dd9","#0050b3","#003a8c","#002766","24,144,255"]}; +var e,t,n="function"==typeof Symbol?Symbol:{},o=n.iterator||"@@iterator",a=n.toStringTag||"@@toStringTag";function s(n,i,o,a){var s=i&&i.prototype instanceof l?i:l,u=Object.create(s.prototype);return r(u,"_invoke",function(n,r,i){var o,a,s,l=0,u=i||[],d=!1,h={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(t,n){return o=t,a=0,s=e,h.n=n,c}};function f(n,r){for(a=n,s=r,t=0;!d&&l&&!i&&t3?(i=p===r)&&(s=o[(a=o[4])?5:(a=3,3)],o[4]=o[5]=e):o[0]<=f&&((i=n<2&&fr||r>p)&&(o[4]=n,o[5]=r,h.n=p,a=0))}if(i||n>1)return c;throw d=!0,r}return function(i,u,p){if(l>1)throw TypeError("Generator is already running");for(d&&1===u&&f(u,p),a=u,s=p;(t=a<2?e:s)||!d;){o||(a?a<3?(a>1&&(h.n=-1),f(a,s)):h.n=s:h.v=s);try{if(l=2,o){if(a||(i="next"),t=o[i]){if(!(t=t.call(o,s)))throw TypeError("iterator result is not an object");if(!t.done)return t;s=t.value,a<2&&(a=0)}else 1===a&&(t=o["return"])&&t.call(o),a<2&&(s=TypeError("The iterator does not provide a '"+i+"' method"),a=1);o=e}else if((t=(d=h.n<0)?s:n.call(r,h))!==c)break}catch(t){o=e,a=1,s=t}finally{l=1}}return{value:t,done:d}}}(n,o,a),!0),u}var c={};function l(){}function u(){}function d(){}t=Object.getPrototypeOf;var h=[][o]?t(t([][o]())):(r(t={},o,function(){return this}),t),f=d.prototype=l.prototype=Object.create(h);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,r(e,a,"GeneratorFunction")),e.prototype=Object.create(f),e}return u.prototype=d,r(f,"constructor",d),r(d,"constructor",u),u.displayName="GeneratorFunction",r(d,a,"GeneratorFunction"),r(f),r(f,a,"Generator"),r(f,o,function(){return this}),r(f,"toString",function(){return"[object Generator]"}),(i=function(){return{w:s,m:p}})()}n.d(t,{A:function(){return i}})},15863:function(e,t,n){"use strict";function r(e){if(Array.isArray(e))return e}function i(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,o,a,s=[],c=!0,l=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&null!=n["return"]&&(a=n["return"](),Object(a)!==a))return}finally{if(l)throw i}}return s}}n.d(t,{A:function(){return s}});var o=n(30291);function a(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function s(e,t){return r(e)||i(e,t)||(0,o.A)(e,t)||a()}},2403:function(e,t,n){"use strict";n.d(t,{A:function(){return c}});var r=n(33754);function i(e){if(Array.isArray(e))return(0,r.A)(e)}function o(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}var a=n(30291);function s(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function c(e){return i(e)||o(e)||(0,a.A)(e)||s()}},44735:function(e,t,n){"use strict";function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}n.d(t,{A:function(){return r}})},30291:function(e,t,n){"use strict";n.d(t,{A:function(){return i}});var r=n(33754);function i(e,t){if(e){if("string"==typeof e)return(0,r.A)(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?(0,r.A)(e,t):void 0}}}}]); +(typeof window=='undefined'?global:window).tc_cfg_8186277970596425={"url":"css/theme-colors-32dabe8f.css","colors":["#1890ff","#2f9bff","#46a6ff","#5db1ff","#74bcff","#8cc8ff","#a3d3ff","#badeff","#d1e9ff","#e6f7ff","#bae7ff","#91d5ff","#69c0ff","#40a9ff","#1890ff","#096dd9","#0050b3","#003a8c","#002766","24,144,255"]}; diff --git a/frontend/dist/js/fail-legacy.a7acaaa1.js b/frontend/dist/js/fail-legacy.a7acaaa1.js deleted file mode 100644 index 6a9905c..0000000 --- a/frontend/dist/js/fail-legacy.a7acaaa1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[143],{4049:function(t,e,n){n.r(e),n.d(e,{default:function(){return l}});var u=function(){var t=this,e=t._self._c;return e("a-result",{attrs:{status:"404",title:"404","sub-title":"Sorry, the page you visited does not exist."},scopedSlots:t._u([{key:"extra",fn:function(){return[e("a-button",{attrs:{type:"primary"},on:{click:t.toHome}},[t._v(" Back Home ")])]},proxy:!0}])})},o=[],r={name:"Exception404",methods:{toHome:function(){this.$router.push({path:"/"})}}},s=r,a=n(845),i=(0,a.A)(s,u,o,!1,null,null,null),l=i.exports}}]); \ No newline at end of file diff --git a/frontend/dist/js/fail-legacy.b308ae47.js b/frontend/dist/js/fail-legacy.b308ae47.js new file mode 100644 index 0000000..0cadedc --- /dev/null +++ b/frontend/dist/js/fail-legacy.b308ae47.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[143],{55273:function(t,e,n){n.r(e),n.d(e,{default:function(){return l}});var u=function(){var t=this,e=t._self._c;return e("a-result",{attrs:{status:"404",title:"404","sub-title":"Sorry, the page you visited does not exist."},scopedSlots:t._u([{key:"extra",fn:function(){return[e("a-button",{attrs:{type:"primary"},on:{click:t.toHome}},[t._v(" Back Home ")])]},proxy:!0}])})},o=[],r={name:"Exception404",methods:{toHome:function(){this.$router.push({path:"/"})}}},s=r,a=n(845),i=(0,a.A)(s,u,o,!1,null,null,null),l=i.exports}}]); \ No newline at end of file diff --git a/frontend/dist/js/fail.a7acaaa1.js b/frontend/dist/js/fail.a7acaaa1.js deleted file mode 100644 index 6a9905c..0000000 --- a/frontend/dist/js/fail.a7acaaa1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[143],{4049:function(t,e,n){n.r(e),n.d(e,{default:function(){return l}});var u=function(){var t=this,e=t._self._c;return e("a-result",{attrs:{status:"404",title:"404","sub-title":"Sorry, the page you visited does not exist."},scopedSlots:t._u([{key:"extra",fn:function(){return[e("a-button",{attrs:{type:"primary"},on:{click:t.toHome}},[t._v(" Back Home ")])]},proxy:!0}])})},o=[],r={name:"Exception404",methods:{toHome:function(){this.$router.push({path:"/"})}}},s=r,a=n(845),i=(0,a.A)(s,u,o,!1,null,null,null),l=i.exports}}]); \ No newline at end of file diff --git a/frontend/dist/js/fail.b308ae47.js b/frontend/dist/js/fail.b308ae47.js new file mode 100644 index 0000000..0cadedc --- /dev/null +++ b/frontend/dist/js/fail.b308ae47.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[143],{55273:function(t,e,n){n.r(e),n.d(e,{default:function(){return l}});var u=function(){var t=this,e=t._self._c;return e("a-result",{attrs:{status:"404",title:"404","sub-title":"Sorry, the page you visited does not exist."},scopedSlots:t._u([{key:"extra",fn:function(){return[e("a-button",{attrs:{type:"primary"},on:{click:t.toHome}},[t._v(" Back Home ")])]},proxy:!0}])})},o=[],r={name:"Exception404",methods:{toHome:function(){this.$router.push({path:"/"})}}},s=r,a=n(845),i=(0,a.A)(s,u,o,!1,null,null,null),l=i.exports}}]); \ No newline at end of file diff --git a/frontend/dist/js/lang-ar-SA-legacy.3f373c8d.js b/frontend/dist/js/lang-ar-SA-legacy.3f373c8d.js deleted file mode 100644 index ee6252a..0000000 --- a/frontend/dist/js/lang-ar-SA-legacy.3f373c8d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[618],{34254:function(a,t,i){i.d(t,{default:function(){return f}});var e=i(57888),s={items_per_page:"/ الصفحة",jump_to:"الذهاب إلى",jump_to_confirm:"تأكيد",page:"",prev_page:"الصفحة السابقة",next_page:"الصفحة التالية",prev_5:"خمس صفحات سابقة",next_5:"خمس صفحات تالية",prev_3:"ثلاث صفحات سابقة",next_3:"ثلاث صفحات تالية"},o=i(85505),r={today:"اليوم",now:"الأن",backToToday:"العودة إلى اليوم",ok:"تأكيد",clear:"مسح",month:"الشهر",year:"السنة",timeSelect:"اختيار الوقت",dateSelect:"اختيار التاريخ",monthSelect:"اختيار الشهر",yearSelect:"اختيار السنة",decadeSelect:"اختيار العقد",yearFormat:"YYYY",dateFormat:"M/D/YYYY",dayFormat:"D",dateTimeFormat:"M/D/YYYY HH:mm:ss",monthBeforeYear:!0,previousMonth:"الشهر السابق (PageUp)",nextMonth:"الشهر التالى(PageDown)",previousYear:"العام السابق (Control + left)",nextYear:"العام التالى (Control + right)",previousDecade:"العقد السابق",nextDecade:"العقد التالى",previousCentury:"القرن السابق",nextCentury:"القرن التالى"},n={placeholder:"اختيار الوقت"},d=n,l={lang:(0,o.A)({placeholder:"اختيار التاريخ",rangePlaceholder:["البداية","النهاية"]},r),timePickerLocale:(0,o.A)({},d),dateFormat:"DD-MM-YYYY",monthFormat:"MM-YYYY",dateTimeFormat:"DD-MM-YYYY HH:mm:ss",weekFormat:"wo-YYYY"},c=l,g=c,b={locale:"ar",Pagination:s,DatePicker:c,TimePicker:d,Calendar:g,Table:{filterTitle:"الفلاتر",filterConfirm:"تأكيد",filterReset:"إعادة ضبط",selectAll:"اختيار الكل",selectInvert:"إلغاء الاختيار"},Modal:{okText:"تأكيد",cancelText:"إلغاء",justOkText:"تأكيد"},Popconfirm:{okText:"تأكيد",cancelText:"إلغاء"},Transfer:{searchPlaceholder:"ابحث هنا",itemUnit:"عنصر",itemsUnit:"عناصر"},Upload:{uploading:"جاري الرفع...",removeFile:"احذف الملف",uploadError:"مشكلة فى الرفع",previewFile:"استعرض الملف",downloadFile:"تحميل الملف"},Empty:{description:"لا توجد بيانات"}},m=b,h=i(61509),u=i.n(h),p={antLocale:m,momentName:"ar",momentLocale:u()},y={submit:"إرسال",save:"حفظ","submit.ok":"تم التقديم بنجاح","save.ok":"تم الحفظ بنجاح","menu.welcome":"مرحبا بكم","menu.home":"الصفحة الرئيسية","menu.dashboard":"لوحة القيادة","menu.dashboard.indicator":"تحليل المؤشر","menu.dashboard.community":"مجتمع المؤشرات","menu.dashboard.analysis":"تحليل الذكاء الاصطناعي","menu.dashboard.tradingAssistant":"مساعد التداول","menu.dashboard.aiTradingAssistant":"مساعد التداول بالذكاء الاصطناعي","menu.dashboard.signalRobot":"روبوت الإشارة","menu.dashboard.monitor":"صفحة المراقبة","menu.dashboard.workplace":"طاولة العمل","menu.form":"صفحة النموذج","menu.form.basic-form":"الشكل الأساسي","menu.form.step-form":"شكل خطوة بخطوة","menu.form.step-form.info":"نموذج خطوة بخطوة (املأ معلومات النقل)","menu.form.step-form.confirm":"نموذج خطوة بخطوة (تأكيد معلومات النقل)","menu.form.step-form.result":"نموذج خطوة بخطوة (كامل)","menu.form.advanced-form":"نماذج متقدمة","menu.list":"صفحة القائمة","menu.list.table-list":"نموذج الاستفسار","menu.list.basic-list":"القائمة القياسية","menu.list.card-list":"قائمة البطاقات","menu.list.search-list":"قائمة البحث","menu.list.search-list.articles":"قائمة البحث (المقالات)","menu.list.search-list.projects":"قائمة البحث (المشروع)","menu.list.search-list.applications":"قائمة البحث (التطبيق)","menu.profile":"صفحة التفاصيل","menu.profile.basic":"صفحة التفاصيل الأساسية","menu.profile.advanced":"صفحة التفاصيل المتقدمة","menu.result":"صفحة النتائج","menu.result.success":"صفحة النجاح","menu.result.fail":"صفحة الفشل","menu.exception":"صفحة الاستثناء","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"خطأ الزناد","menu.account":"الصفحة الشخصية","menu.account.center":"مركز شخصي","menu.account.settings":"الإعدادات الشخصية","menu.account.trigger":"خطأ الزناد","menu.account.logout":"تسجيل الخروج","menu.wallet":"محفظتي","menu.docs":"مركز الوثائق","menu.docs.detail":"تفاصيل الوثيقة","menu.header.refreshPage":"تحديث الصفحة","menu.invite.friends":"دعوة الأصدقاء","app.setting.pagestyle":"إعدادات النمط الشاملة","app.setting.pagestyle.light":"نمط القائمة مشرق","app.setting.pagestyle.dark":"نمط القائمة المظلمة","app.setting.pagestyle.realdark":"الوضع المظلم","app.setting.themecolor":"لون الموضوع","app.setting.navigationmode":"وضع التنقل","app.setting.sidemenu.nav":"التنقل في الشريط الجانبي","app.setting.topmenu.nav":"التنقل في الشريط العلوي","app.setting.content-width":"عرض منطقة المحتوى","app.setting.content-width.tooltip":"يكون هذا الإعداد فعالاً فقط عندما يكون [Top Bar Navigation]","app.setting.content-width.fixed":"ثابت","app.setting.content-width.fluid":"البث","app.setting.fixedheader":"رأس ثابت","app.setting.fixedheader.tooltip":"شكلي عندما رأس ثابت","app.setting.autoHideHeader":"إخفاء الرأس عند التمرير","app.setting.fixedsidebar":"القائمة الجانبية الثابتة","app.setting.sidemenu":"تخطيط القائمة الجانبية","app.setting.topmenu":"تخطيط القائمة العلوية","app.setting.othersettings":"إعدادات أخرى","app.setting.weakmode":"وضع ضعف اللون","app.setting.multitab":"وضع علامات التبويب المتعددة","app.setting.copy":"إعدادات النسخ","app.setting.loading":"جارٍ تحميل الموضوع","app.setting.copyinfo":"انسخ الإعدادات بنجاح src/config/defaultSettings.js","app.setting.copy.success":"اكتمل النسخ","app.setting.copy.fail":"فشل النسخ","app.setting.theme.switching":"تغيير الموضوع!","app.setting.production.hint":"يتم استخدام شريط التكوين فقط للمعاينة في بيئة التطوير ولن يتم عرضه في بيئة الإنتاج. يرجى نسخ وتعديل ملف التكوين يدويا.","app.setting.themecolor.daybreak":"الأزرق الداكن (افتراضي)","app.setting.themecolor.dust":"الغسق","app.setting.themecolor.volcano":"بركان","app.setting.themecolor.sunset":"غروب الشمس","app.setting.themecolor.cyan":"مينغكينغ","app.setting.themecolor.green":"أورورا الخضراء","app.setting.themecolor.geekblue":"المهوس الأزرق","app.setting.themecolor.purple":"جيانغ زي","app.setting.tooltip":"إعدادات الصفحة","user.login.userName":"اسم المستخدم","user.login.password":"كلمة المرور","user.login.username.placeholder":"الحساب: المشرف","user.login.password.placeholder":"كلمة المرور: admin أو ant.design","user.login.message-invalid-credentials":"فشل تسجيل الدخول، يرجى التحقق من البريد الإلكتروني الخاص بك ورمز التحقق","user.login.message-invalid-verification-code":"خطأ في رمز التحقق","user.login.tab-login-credentials":"تسجيل الدخول بكلمة مرور الحساب","user.login.tab-login-email":"تسجيل الدخول بالبريد الإلكتروني","user.login.tab-login-mobile":"تسجيل الدخول برقم الهاتف المحمول","user.login.captcha.placeholder":"الرجاء إدخال رمز التحقق الرسومي","user.login.mobile.placeholder":"رقم الهاتف المحمول","user.login.mobile.verification-code.placeholder":"رمز التحقق","user.login.email.placeholder":"الرجاء إدخال عنوان البريد الإلكتروني الخاص بك","user.login.email.verification-code.placeholder":"الرجاء إدخال رمز التحقق","user.login.email.sending":"جاري إرسال رمز التحقق...","user.login.email.send-success-title":"نصائح","user.login.email.send-success":"تم إرسال رمز التحقق بنجاح، يرجى التحقق من بريدك الإلكتروني","user.login.sms.send-success":"تم إرسال رمز التحقق بنجاح، يرجى التحقق من الرسالة النصية","user.login.remember-me":"تسجيل الدخول التلقائي","user.login.forgot-password":"نسيت كلمة المرور","user.login.sign-in-with":"طرق تسجيل الدخول الأخرى","user.login.signup":"تسجيل حساب","user.login.login":"تسجيل الدخول","user.register.register":"سجل","user.register.email.placeholder":"البريد الإلكتروني","user.register.password.placeholder":"الرجاء إدخال 6 أحرف على الأقل. يرجى عدم استخدام كلمات المرور التي يمكن تخمينها بسهولة.","user.register.password.popover-message":"الرجاء إدخال 6 أحرف على الأقل. يرجى عدم استخدام كلمات المرور التي يمكن تخمينها بسهولة.","user.register.confirm-password.placeholder":"تأكيد كلمة المرور","user.register.get-verification-code":"الحصول على رمز التحقق","user.register.sign-in":"قم بتسجيل الدخول باستخدام حساب موجود","user.register-result.msg":"حسابك: {email} تم التسجيل بنجاح","user.register-result.activation-email":"تم إرسال رسالة التفعيل إلى صندوق البريد الخاص بك وهي صالحة لمدة 24 ساعة. يرجى تسجيل الدخول إلى بريدك الإلكتروني على الفور والنقر على الرابط الموجود في البريد الإلكتروني لتفعيل حسابك.","user.register-result.back-home":"العودة إلى الصفحة الرئيسية","user.register-result.view-mailbox":"تحقق من صندوق البريد الخاص بك","user.email.required":"الرجاء إدخال عنوان البريد الإلكتروني الخاص بك!","user.email.wrong-format":"تنسيق عنوان البريد الإلكتروني خاطئ!","user.userName.required":"الرجاء إدخال اسم حسابك أو عنوان البريد الإلكتروني الخاص بك","user.password.required":"الرجاء إدخال كلمة المرور الخاصة بك!","user.password.twice.msg":"كلمات المرور التي تم إدخالها مرتين غير متطابقة!","user.password.strength.msg":"كلمة المرور ليست قوية بما فيه الكفاية","user.password.strength.strong":"القوة : قوية","user.password.strength.medium":"القوة: متوسطة","user.password.strength.low":"القوة: منخفضة","user.password.strength.short":"القوة : قصيرة جداً","user.confirm-password.required":"الرجاء تأكيد كلمة المرور الخاصة بك!","user.phone-number.required":"الرجاء إدخال رقم الهاتف المحمول الصحيح","user.phone-number.wrong-format":"تنسيق رقم الهاتف المحمول خاطئ!","user.verification-code.required":"الرجاء إدخال رمز التحقق!","user.captcha.required":"الرجاء إدخال رمز التحقق الرسومي!","user.login.infos":"QuantDinger هي أداة مساعدة لتحليل الأسهم متعددة الوكلاء تعمل بالذكاء الاصطناعي ولا تتمتع بمؤهلات استشارية في مجال الاستثمار في الأوراق المالية. يتم إنشاء جميع نتائج التحليل والدرجات والآراء المرجعية في المنصة تلقائيًا بواسطة الذكاء الاصطناعي استنادًا إلى البيانات التاريخية وتستخدم فقط للتعلم والبحث والتبادل الفني، ولا تشكل أي نصيحة استثمارية أو أساس لصنع القرار. ينطوي الاستثمار في الأسهم على مخاطر مختلفة مثل مخاطر السوق، ومخاطر السيولة، ومخاطر السياسة، وما إلى ذلك، مما قد يؤدي إلى خسارة رأس المال. يجب على المستخدمين اتخاذ قرارات مستقلة بناءً على قدرتهم على تحمل المخاطر، ويجب أن يتحمل المستخدم أي سلوك استثماري وعواقب تنشأ عن استخدام هذه الأداة. السوق محفوف بالمخاطر والاستثمار يحتاج إلى الحذر.","user.login.tab-login-web3":"تسجيل الدخول إلى Web3","user.login.web3.tip":"تسجيل الدخول بالتوقيع باستخدام المحفظة","user.login.web3.connect":"ربط المحفظة وتسجيل الدخول","user.login.web3.no-wallet":"لم يتم الكشف عن المحفظة","user.login.web3.no-address":"لم يتم الحصول على عنوان المحفظة","user.login.web3.nonce-failed":"فشل الحصول على رقم عشوائي","user.login.web3.verify-failed":"فشل التحقق من التوقيع","user.login.web3.success":"تم تسجيل الدخول بنجاح","user.login.web3.failed":"فشل تسجيل الدخول إلى المحفظة","nav.no_wallet":"لم يتم الكشف عن المحفظة","nav.copy":"نسخ","nav.copy_success":"تم النسخ بنجاح","user.login.oauth.google":"قم بتسجيل الدخول باستخدام جوجل","user.login.oauth.github":"قم بتسجيل الدخول باستخدام جيثب","user.login.oauth.loading":"جارٍ إعادة التوجيه إلى صفحة التفويض...","user.login.oauth.failed":"فشل تسجيل الدخول باستخدام OAuth","user.login.oauth.get-url-failed":"فشل الحصول على رابط الترخيص","user.login.subtitle":"رؤى كمية مدفوعة في الأسواق العالمية","user.login.legal.title":"إخلاء المسؤولية القانونية","user.login.legal.view":"عرض إخلاء المسؤولية القانونية","user.login.legal.collapse":"طي إخلاء المسؤولية القانونية","user.login.legal.agree":"لقد قرأت ووافقت على إخلاء المسؤولية القانونية","user.login.legal.required":"يرجى قراءة والتحقق من إخلاء المسؤولية القانونية أولا","user.login.legal.content":"QuantDinger هي أداة مساعدة لتحليل الأسهم متعددة الوكلاء تعمل بالذكاء الاصطناعي ولا تتمتع بمؤهلات استشارية في مجال الاستثمار في الأوراق المالية. يتم إنشاء جميع نتائج التحليل والتقييمات والآراء المرجعية في المنصة تلقائيًا بواسطة الذكاء الاصطناعي استنادًا إلى البيانات التاريخية وتستخدم فقط للتعلم والبحث والتبادل الفني، ولا تشكل أي نصيحة استثمارية أو أساس لصنع القرار. ينطوي الاستثمار في الأسهم على مخاطر مختلفة مثل مخاطر السوق، ومخاطر السيولة، ومخاطر السياسة، وما إلى ذلك، مما قد يؤدي إلى خسارة رأس المال. يجب على المستخدمين اتخاذ قرارات مستقلة بناءً على قدرتهم على تحمل المخاطر، ويجب أن يتحمل المستخدم أي سلوك استثماري وعواقب تنشأ عن استخدام هذه الأداة. السوق محفوف بالمخاطر والاستثمار يحتاج إلى الحذر.","user.login.privacy.title":"سياسة خصوصية المستخدم","user.login.privacy.view":"عرض سياسة خصوصية المستخدم","user.login.privacy.collapse":"إغلاق شروط خصوصية المستخدم","user.login.privacy.content":"نحن نقدر خصوصيتك وحماية البيانات. 1) نطاق التجميع: يتم جمع المعلومات المطلوبة لتنفيذ الوظيفة فقط (مثل البريد الإلكتروني ورقم الهاتف المحمول ورمز المنطقة وعنوان محفظة Web3) والسجلات الضرورية ومعلومات الجهاز. 2) الغرض من الاستخدام: لتسجيل الدخول إلى الحساب والتحقق من الأمان وتوفير وظيفة الخدمة واستكشاف الأخطاء وإصلاحها ومتطلبات الامتثال. 3) التخزين والأمان: يتم تشفير البيانات وتخزينها، ويتم اتخاذ الأذونات اللازمة وإجراءات التحكم في الوصول لمحاولة منع الوصول غير المصرح به أو الكشف عنها أو فقدانها. 4) المشاركة مع أطراف ثالثة: ما لم يكن ذلك مطلوبًا بموجب القوانين واللوائح أو ضروريًا لأداء الخدمات، لن تتم مشاركة معلوماتك الشخصية مع أطراف ثالثة؛ إذا كانت هناك خدمات تابعة لجهات خارجية (مثل المحافظ ومقدمي خدمات الرسائل النصية القصيرة)، فلن تتم معالجتها إلا إلى الحد الأدنى اللازم لتنفيذ الوظيفة. 5) ملفات تعريف الارتباط/التخزين المحلي: تُستخدم لحالة تسجيل الدخول وصيانة الجلسة الضرورية (مثل الرموز المميزة، PHPSESSID)، ويمكنك مسحها أو تقييدها في المتصفح. 6) الحقوق الشخصية: يمكنك ممارسة حقوقك في الاستفسار والتصحيح والحذف وسحب الموافقة وما إلى ذلك وفقًا للقوانين واللوائح. 7) التغييرات والإشعارات: عند تحديث هذه الشروط، سيتم عرضها بشكل بارز على الصفحة. من خلال الاستمرار في استخدام هذه الخدمة، يعتبر أنك قد قرأت المحتوى المحدث ووافقت عليه. إذا كنت لا توافق على هذه الشروط أو أي تحديثات لها، فيرجى التوقف عن استخدام الخدمة والاتصال بنا.","account.basicInfo":"المعلومات الأساسية","account.id":"معرف المستخدم","account.username":"اسم المستخدم","account.nickname":"اللقب","account.email":"البريد الإلكتروني","account.mobile":"رقم الهاتف المحمول","account.web3address":"عنوان المحفظة","account.pid":"معرف المرجع","account.level":"مستوى المستخدم","account.money":"التوازن","account.qdtBalance":"رصيد كيو دي تي","account.score":"النقاط","account.createtime":"وقت التسجيل","account.inviteLink":"رابط الدعوة","account.recharge":"إعادة الشحن","account.rechargeTip":"يرجى استخدام WeChat أو Alipay لمسح رمز الاستجابة السريعة أدناه لإعادة الشحن.","account.qrCodePlaceholder":"العنصر النائب لرمز الاستجابة السريعة (المحاكاة)","account.rechargeAmount":"مبلغ إعادة الشحن","account.enterAmount":"الرجاء إدخال مبلغ إعادة الشحن","account.rechargeHint":"الحد الأدنى لمبلغ الإيداع: 1 QDT","account.confirmRecharge":"تأكيد إعادة الشحن","account.enterValidAmount":"الرجاء إدخال مبلغ تعبئة صالح","account.rechargeSuccess":"تم إعادة الشحن بنجاح! تم إيداع {amount} QDT","account.settings.menuMap.basic":"الإعدادات الأساسية","account.settings.menuMap.security":"إعدادات الأمان","account.settings.menuMap.notification":"إشعار الرسالة الجديدة","account.settings.menuMap.moneyLog":"تفاصيل الصندوق","account.moneyLog.empty":"لا توجد تفاصيل الصندوق حتى الآن","account.moneyLog.total":"{total} السجلات في المجموع","account.moneyLog.type.purchase":"مؤشر الشراء","account.moneyLog.type.recharge":"إعادة الشحن","account.moneyLog.type.refund":"استرداد","account.moneyLog.type.reward":"مكافأة","account.moneyLog.type.income":"دخل المؤشر","account.moneyLog.type.commission":"رسوم التعامل مع المنصة","wallet.balance":"رصيد كيو دي تي","wallet.recharge":"إعادة الشحن","wallet.withdraw":"سحب النقود","wallet.filter":"تصفية","wallet.reset":"إعادة تعيين","wallet.totalRecharge":"التغذية المتراكمة","wallet.totalWithdraw":"عمليات السحب التراكمية","wallet.totalIncome":"الدخل التراكمي","wallet.records":"سجلات المعاملات وتفاصيل الصندوق","wallet.tradingRecords":"تاريخ المعاملة","wallet.moneyLog":"تفاصيل الصندوق","wallet.rechargeTip":"يرجى استخدام WeChat أو Alipay لمسح رمز الاستجابة السريعة أدناه لإعادة الشحن.","wallet.qrCodePlaceholder":"العنصر النائب لرمز الاستجابة السريعة (المحاكاة)","wallet.rechargeAmount":"مبلغ إعادة الشحن","wallet.enterAmount":"الرجاء إدخال مبلغ إعادة الشحن","wallet.rechargeHint":"الحد الأدنى لمبلغ الإيداع: 1 QDT","wallet.confirmRecharge":"تأكيد إعادة الشحن","wallet.enterValidAmount":"الرجاء إدخال مبلغ تعبئة صالح","wallet.rechargeSuccess":"تم إعادة الشحن بنجاح! تم إيداع {amount} QDT","wallet.rechargeFailed":"فشلت عملية إعادة الشحن","wallet.withdrawTip":"الرجاء إدخال مبلغ السحب وعنوان السحب","wallet.withdrawAmount":"سحب المبلغ","wallet.enterWithdrawAmount":"الرجاء إدخال مبلغ السحب","wallet.withdrawHint":"الحد الأدنى لمبلغ السحب: 1 QDT","wallet.withdrawAddress":"عنوان السحب (اختياري)","wallet.enterWithdrawAddress":"الرجاء إدخال عنوان السحب","wallet.confirmWithdraw":"تأكيد الانسحاب","wallet.enterValidWithdrawAmount":"الرجاء إدخال مبلغ سحب صالح","wallet.insufficientBalance":"رصيد غير كاف","wallet.withdrawSuccess":"تم السحب بنجاح! تم سحب {المبلغ} QDT","wallet.withdrawFailed":"فشل الانسحاب","wallet.noTradingRecords":"لا يوجد سجل المعاملات حتى الآن","wallet.noMoneyLog":"لا توجد تفاصيل الصندوق حتى الآن","wallet.loadTradingRecordsFailed":"فشل في تحميل سجلات المعاملات","wallet.loadMoneyLogFailed":"فشل في تحميل تفاصيل الصندوق","wallet.moneyLogTotal":"{total} السجلات في المجموع","wallet.moneyLogTypeTitle":"اكتب","wallet.moneyLogType.all":"جميع الأنواع","wallet.table.time":"الوقت","wallet.table.type":"اكتب","wallet.table.price":"السعر","wallet.table.amount":"الكمية","wallet.table.money":"المبلغ","wallet.table.balance":"التوازن","wallet.table.memo":"ملاحظات","wallet.table.value":"قيمة","wallet.table.profit":"الربح والخسارة","wallet.table.commission":"رسوم المناولة","wallet.table.total":"{total} السجلات في المجموع","wallet.tradeType.buy":"شراء","wallet.tradeType.sell":"بيع","wallet.tradeType.liquidation":"التصفية القسرية","wallet.tradeType.openLong":"مفتوح لفترة طويلة","wallet.tradeType.addLong":"غادوت","wallet.tradeType.closeLong":"بيندو","wallet.tradeType.closeLongStop":"وقف الخسارة وطويلة","wallet.tradeType.closeLongProfit":"جني الربح ومستوى أكثر","wallet.tradeType.openShort":"فتح قصيرة","wallet.tradeType.addShort":"إضافة قصيرة","wallet.tradeType.closeShort":"فارغ","wallet.tradeType.closeShortStop":"وقف الخسارة","wallet.tradeType.closeShortProfit":"جني الأرباح وأغلق على المكشوف","wallet.moneyLogType.purchase":"مؤشر الشراء","wallet.moneyLogType.recharge":"إعادة الشحن","wallet.moneyLogType.withdraw":"سحب النقود","wallet.moneyLogType.refund":"استرداد","wallet.moneyLogType.reward":"مكافأة","wallet.moneyLogType.income":"الدخل","wallet.moneyLogType.commission":"رسوم المناولة","wallet.web3Address.required":"يرجى ملء عنوان محفظة Web3 أولاً","wallet.web3Address.requiredDescription":"قبل إعادة الشحن، تحتاج إلى ربط عنوان محفظة Web3 الخاص بك لتلقي إعادة الشحن.","wallet.web3Address.placeholder":"الرجاء إدخال عنوان محفظة Web3 الخاص بك (يبدأ بـ 0x)","wallet.web3Address.save":"حفظ عنوان المحفظة","wallet.web3Address.saveSuccess":"تم حفظ عنوان المحفظة بنجاح","wallet.web3Address.saveFailed":"فشل في حفظ عنوان المحفظة","wallet.web3Address.invalidFormat":"يرجى إدخال عنوان محفظة Web3 صالح (تنسيق Ethereum: 42 حرفًا يبدأ بـ 0x، أو تنسيق TRC20: 34 حرفًا يبدأ بـ T)","wallet.selectCoin":"اختر العملة","wallet.selectChain":"سلسلة الاختيار","wallet.chain.eth":"إيثريوم (ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"ش.م.ب","wallet.targetQdtAmount":"مقدار QDT الذي تريد استرداده (اختياري)","wallet.targetQdtAmount.placeholder":"يرجى إدخال كمية QDT التي تريد استردادها، وسعر QDT الحالي: {price} USDT","wallet.targetQdtAmount.requiredUsdt":"تحتاج إلى إعادة الشحن: {amount} USDT","wallet.rechargeAddress":"عنوان إعادة الشحن","wallet.copyAddress":"نسخ","wallet.copySuccess":"تم النسخ بنجاح!","wallet.copyFailed":"فشل النسخ، يرجى النسخ يدويًا","wallet.rechargeAddressHint":"يرجى التأكد من استخدام {chain} لإيداع {coin} في هذا العنوان","wallet.qdtPrice.loading":"جار التحميل...","wallet.rechargeTip.new":"يرجى تحديد العملة والسلسلة، ثم مسح رمز الاستجابة السريعة أدناه لإعادة الشحن","wallet.exchangeRate":"1 QDT ≈ {معدل} USDT","wallet.withdrawableAmount":"المبلغ النقدي المتاح","wallet.totalBalance":"الرصيد الإجمالي","wallet.insufficientWithdrawable":"المبلغ النقدي الذي يمكن سحبه غير كاف. المبلغ الحالي الذي يمكن سحبه هو: {amount} QDT","wallet.withdrawAddressRequired":"الرجاء إدخال عنوان السحب","wallet.withdrawAddressHint":"يرجى التأكد من صحة العنوان. وبعد الانسحاب لا يمكن إلغاؤه.","wallet.withdrawSubmitSuccess":"تم إرسال طلب السحب بنجاح، برجاء انتظار المراجعة","menu.footer.contactUs":"اتصل بنا","menu.footer.getSupport":"احصل على الدعم","menu.footer.socialAccounts":"حساب اجتماعي","menu.footer.userAgreement":"اتفاقية المستخدم","menu.footer.privacyPolicy":"سياسة الخصوصية","menu.footer.support":"الدعم","menu.footer.featureRequest":"طلب الميزة","menu.footer.email":"البريد الإلكتروني","menu.footer.liveChat":"24/7 الدردشة الحية","dashboard.analysis.title":"التحليل متعدد الأبعاد","dashboard.analysis.subtitle":"منصة تحليل مالي شاملة تعتمد على الذكاء الاصطناعي","dashboard.analysis.selectSymbol":"حدد أو أدخل الرمز الأساسي","dashboard.analysis.selectModel":"حدد النموذج","dashboard.analysis.startAnalysis":"ابدأ التحليل","dashboard.analysis.history":"التاريخ","dashboard.analysis.tab.overview":"تحليل شامل","dashboard.analysis.tab.fundamental":"الأساسيات","dashboard.analysis.tab.technical":"التكنولوجيا","dashboard.analysis.tab.news":"أخبار","dashboard.analysis.tab.sentiment":"العواطف","dashboard.analysis.tab.risk":"خطر","dashboard.analysis.tab.debate":"المناقشة الطويلة والقصيرة","dashboard.analysis.tab.decision":"القرار النهائي","dashboard.analysis.empty.selectSymbol":"حدد هدفًا لبدء التحليل","dashboard.analysis.empty.selectSymbolDesc":"اختر من قائمة الأسهم المحددة ذاتيًا أو أدخل الكود الأساسي للحصول على تقرير تحليل الذكاء الاصطناعي متعدد الأبعاد","dashboard.analysis.empty.startAnalysis":'انقر فوق الزر "بدء التحليل" لإجراء تحليل متعدد الأبعاد',"dashboard.analysis.empty.startAnalysisDesc":"سنزودك بتحليل شامل من أبعاد متعددة مثل الأساسيات والتكنولوجيا والأخبار والمشاعر والمخاطر","dashboard.analysis.empty.noData":"لا توجد حاليًا أي بيانات تحليل {type}، يرجى إجراء تحليل شامل أولاً","dashboard.analysis.empty.noWatchlist":"لا يوجد حاليا أي أسهم مختارة ذاتيا","dashboard.analysis.empty.noHistory":"لا يوجد تاريخ بعد","dashboard.analysis.empty.watchlistHint":"لا يوجد حاليا أي أسهم مختارة ذاتيا، يرجى أولا","dashboard.analysis.empty.noDebateData":"لا توجد بيانات مناقشة حتى الآن","dashboard.analysis.empty.noDecisionData":"لا توجد بيانات القرار حتى الآن","dashboard.analysis.empty.selectAgent":"الرجاء تحديد وكيل لعرض نتائج التحليل","dashboard.analysis.loading.analyzing":"جارٍ التحليل، يرجى الانتظار...","dashboard.analysis.loading.fundamental":"تحليل البيانات الأساسية...","dashboard.analysis.loading.technical":"تحليل المؤشرات الفنية...","dashboard.analysis.loading.news":"تحليل بيانات الأخبار...","dashboard.analysis.loading.sentiment":"تحليل معنويات السوق..","dashboard.analysis.loading.risk":"تقييم المخاطر...","dashboard.analysis.loading.debate":"والنقاش الطويل والقصير مستمر..","dashboard.analysis.loading.decision":"إصدار القرار النهائي...","dashboard.analysis.score.overall":"التقييم العام","dashboard.analysis.score.recommendation":"نصيحة استثمارية","dashboard.analysis.score.confidence":"الثقة","dashboard.analysis.dimension.fundamental":"الأساسيات","dashboard.analysis.dimension.technical":"التكنولوجيا","dashboard.analysis.dimension.news":"أخبار","dashboard.analysis.dimension.sentiment":"العواطف","dashboard.analysis.dimension.risk":"خطر","dashboard.analysis.card.dimensionScores":"التقييمات لكل البعد","dashboard.analysis.card.overviewReport":"تقرير التحليل الشامل","dashboard.analysis.card.financialMetrics":"المؤشرات المالية","dashboard.analysis.card.fundamentalReport":"تقرير التحليل الأساسي","dashboard.analysis.card.technicalIndicators":"المؤشرات الفنية","dashboard.analysis.card.technicalReport":"تقرير التحليل الفني","dashboard.analysis.card.newsList":"أخبار ذات صلة","dashboard.analysis.card.newsReport":"تقرير تحليل الأخبار","dashboard.analysis.card.sentimentIndicators":"مؤشر المشاعر","dashboard.analysis.card.sentimentReport":"تقرير تحليل المشاعر","dashboard.analysis.card.riskMetrics":"مؤشرات المخاطر","dashboard.analysis.card.riskReport":"تقرير تقييم المخاطر","dashboard.analysis.card.bullView":"النظرة الصعودية (الثور)","dashboard.analysis.card.bearView":"وجهة النظر الهبوطية (الدب)","dashboard.analysis.card.researchConclusion":"استنتاج الباحث","dashboard.analysis.card.traderPlan":"خطة التاجر","dashboard.analysis.card.riskDebate":"مناقشة لجنة المخاطر","dashboard.analysis.card.finalDecision":"القرار النهائي","dashboard.analysis.card.tradePlanDetail":"تفاصيل خطة التداول","dashboard.analysis.tradingPlan.entry_price":"سعر القبول","dashboard.analysis.tradingPlan.position_size":"حجم الموقف","dashboard.analysis.tradingPlan.stop_loss":"وقف الخسارة","dashboard.analysis.tradingPlan.take_profit":"جني الربح","dashboard.analysis.label.confidence":"الثقة","dashboard.analysis.label.keyPoints":"النقاط الأساسية","dashboard.analysis.label.riskWarning":"تحذير من المخاطر","dashboard.analysis.risk.risky":"محفوف بالمخاطر","dashboard.analysis.risk.neutral":"وجهة نظر محايدة (محايدة)","dashboard.analysis.risk.safe":"وجهة نظر محافظة (آمنة)","dashboard.analysis.risk.conclusion":"الاستنتاج","dashboard.analysis.feature.fundamental":"التحليل الأساسي","dashboard.analysis.feature.technical":"التحليل الفني","dashboard.analysis.feature.news":"تحليل الأخبار","dashboard.analysis.feature.sentiment":"تحليل المشاعر","dashboard.analysis.feature.risk":"تقييم المخاطر","dashboard.analysis.watchlist.title":"اختيار الأسهم الخاصة بي","dashboard.analysis.watchlist.add":"إضافة","dashboard.analysis.watchlist.addStock":"إضافة مخزون","dashboard.analysis.modal.addStock.title":"إضافة أسهم اختيارية","dashboard.analysis.modal.addStock.confirm":"حسنًا","dashboard.analysis.modal.addStock.cancel":"إلغاء","dashboard.analysis.modal.addStock.market":"نوع السوق","dashboard.analysis.modal.addStock.marketPlaceholder":"الرجاء تحديد السوق","dashboard.analysis.modal.addStock.marketRequired":"الرجاء تحديد نوع السوق","dashboard.analysis.modal.addStock.symbol":"رمز المخزون","dashboard.analysis.modal.addStock.symbolPlaceholder":"على سبيل المثال: AAPL، TSLA، GOOGL، 000001، BTC","dashboard.analysis.modal.addStock.symbolRequired":"الرجاء إدخال رمز المخزون","dashboard.analysis.modal.addStock.searchPlaceholder":"البحث عن رمز الهدف أو الاسم","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"ابحث عن الرمز الأساسي أو أدخله (على سبيل المثال: AAPL، BTC/USDT، EUR/USD)","dashboard.analysis.modal.addStock.searchOrInputHint":"يدعم البحث عن الكائنات في قاعدة البيانات، أو إدخال الكود مباشرة (سيحصل النظام على الاسم تلقائيًا)","dashboard.analysis.modal.addStock.search":"بحث","dashboard.analysis.modal.addStock.searchResults":"نتائج البحث","dashboard.analysis.modal.addStock.hotSymbols":"أهداف شعبية","dashboard.analysis.modal.addStock.noHotSymbols":"لا توجد أهداف شعبية حتى الآن","dashboard.analysis.modal.addStock.selectedSymbol":"مختارة","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"الرجاء تحديد الهدف أولاً","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"الرجاء تحديد هدف أو إدخال رمز الهدف أولاً","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"الرجاء إدخال رمز الهدف","dashboard.analysis.modal.addStock.pleaseSelectMarket":"الرجاء تحديد نوع السوق أولا","dashboard.analysis.modal.addStock.searchFailed":"فشل البحث، يرجى المحاولة مرة أخرى في وقت لاحق","dashboard.analysis.modal.addStock.noSearchResults":"لم يتم العثور على هدف مطابق","dashboard.analysis.modal.addStock.willAutoFetchName":"سيحصل النظام تلقائيًا على الاسم","dashboard.analysis.modal.addStock.addDirectly":"أضف مباشرة","dashboard.analysis.modal.addStock.nameWillBeFetched":"سيتم التقاط الاسم تلقائيًا عند إضافته","dashboard.analysis.market.USStock":"الأسهم الأمريكية","dashboard.analysis.market.Crypto":"عملة مشفرة","dashboard.analysis.market.Forex":"الفوركس","dashboard.analysis.market.Futures":"العقود الآجلة","dashboard.analysis.modal.history.title":"سجلات التحليل التاريخي","dashboard.analysis.modal.history.viewResult":"عرض النتائج","dashboard.analysis.modal.history.completeTime":"وقت الانتهاء","dashboard.analysis.modal.history.error":"خطأ","dashboard.analysis.status.pending":"في انتظار","dashboard.analysis.status.processing":"المعالجة","dashboard.analysis.status.completed":"مكتمل","dashboard.analysis.status.failed":"فشل","dashboard.analysis.message.selectSymbol":"الرجاء تحديد الهدف أولا","dashboard.analysis.message.taskCreated":"تم إنشاء مهمة التحليل ويتم تنفيذها في الخلفية...","dashboard.analysis.message.analysisComplete":"اكتمل التحليل","dashboard.analysis.message.analysisCompleteCache":"اكتمل التحليل (باستخدام البيانات المخزنة مؤقتًا)","dashboard.analysis.message.analysisFailed":"فشل التحليل، يرجى المحاولة مرة أخرى في وقت لاحق","dashboard.analysis.message.addStockSuccess":"تمت الإضافة بنجاح","dashboard.analysis.message.addStockFailed":"فشلت الإضافة","dashboard.analysis.message.removeStockSuccess":"تمت الإزالة بنجاح","dashboard.analysis.message.removeStockFailed":"فشلت عملية الإزالة","dashboard.analysis.message.resumingAnalysis":"جاري استئناف مهمة التحليل...","dashboard.analysis.message.deleteSuccess":"تم الحذف بنجاح","dashboard.analysis.message.deleteFailed":"فشل الحذف","dashboard.analysis.modal.history.delete":"حذف","dashboard.analysis.modal.history.deleteConfirm":"هل أنت متأكد أنك تريد حذف سجل التحليل هذا؟","dashboard.analysis.test":"متجر رقم {no}، طريق Gongzhuan","dashboard.analysis.introduce":"وصف المؤشر","dashboard.analysis.total-sales":"إجمالي المبيعات","dashboard.analysis.day-sales":"متوسط المبيعات اليومية¥","dashboard.analysis.visits":"الزيارات","dashboard.analysis.visits-trend":"اتجاهات المرور","dashboard.analysis.visits-ranking":"ترتيب زيارة المتجر","dashboard.analysis.day-visits":"زيارات يومية","dashboard.analysis.week":"أسبوعية على أساس سنوي","dashboard.analysis.day":"سنة بعد سنة","dashboard.analysis.payments":"عدد الدفعات","dashboard.analysis.conversion-rate":"معدل التحويل","dashboard.analysis.operational-effect":"آثار النشاط التشغيلي","dashboard.analysis.sales-trend":"اتجاهات المبيعات","dashboard.analysis.sales-ranking":"ترتيب مبيعات المتجر","dashboard.analysis.all-year":"على مدار السنة","dashboard.analysis.all-month":"هذا الشهر","dashboard.analysis.all-week":"هذا الاسبوع","dashboard.analysis.all-day":"اليوم","dashboard.analysis.search-users":"عدد مستخدمي البحث","dashboard.analysis.per-capita-search":"عمليات البحث للفرد","dashboard.analysis.online-top-search":"عمليات البحث الشائعة على الإنترنت","dashboard.analysis.the-proportion-of-sales":"نسبة فئة المبيعات","dashboard.analysis.dropdown-option-one":"العملية الأولى","dashboard.analysis.dropdown-option-two":"العملية 2","dashboard.analysis.channel.all":"جميع القنوات","dashboard.analysis.channel.online":"على الانترنت","dashboard.analysis.channel.stores":"متجر","dashboard.analysis.sales":"المبيعات","dashboard.analysis.traffic":"تدفق الركاب","dashboard.analysis.table.rank":"الترتيب","dashboard.analysis.table.search-keyword":"البحث عن الكلمات الرئيسية","dashboard.analysis.table.users":"عدد المستخدمين","dashboard.analysis.table.weekly-range":"زيادة أسبوعية","dashboard.indicator.selectSymbol":"حدد أو أدخل الرمز الأساسي","dashboard.indicator.emptyWatchlistHint":"لا يوجد حاليا أي أسهم مختارة ذاتيا، يرجى إضافتها أولا","dashboard.indicator.hint.selectSymbol":"الرجاء تحديد هدف لبدء التحليل","dashboard.indicator.hint.selectSymbolDesc":"حدد أو أدخل رمز السهم في مربع البحث أعلاه لعرض مخططات K-line والمؤشرات الفنية","dashboard.indicator.retry":"حاول مرة أخرى","dashboard.indicator.panel.title":"المؤشرات الفنية","dashboard.indicator.panel.realtimeOn":"قم بإيقاف تشغيل التحديثات في الوقت الفعلي","dashboard.indicator.panel.realtimeOff":"تمكين التحديثات في الوقت الحقيقي","dashboard.indicator.panel.themeLight":"التبديل إلى المظهر الداكن","dashboard.indicator.panel.themeDark":"التبديل إلى موضوع الضوء","dashboard.indicator.section.enabled":"ممكّن","dashboard.indicator.section.added":"المؤشرات التي أضفتها","dashboard.indicator.section.custom":"المؤشرات التي أنشأتها بنفسك","dashboard.indicator.section.bought":"المؤشرات التي اشتريتها","dashboard.indicator.section.myCreated":"المؤشرات التي قمت بإنشائها","dashboard.indicator.empty":"لا يوجد مؤشر حتى الآن، يرجى إضافة أو إنشاء مؤشر أولاً","dashboard.indicator.buy":"مؤشر الشراء","dashboard.indicator.action.start":"ابدأ","dashboard.indicator.action.stop":"إغلاق","dashboard.indicator.action.edit":"تحرير","dashboard.indicator.action.delete":"حذف","dashboard.indicator.action.backtest":"com.backtest","dashboard.indicator.status.normal":"عادي","dashboard.indicator.status.normalPermanent":"عادي (صالح بشكل دائم)","dashboard.indicator.status.expired":"انتهت صلاحيتها","dashboard.indicator.expiry.permanent":"صالحة بشكل دائم","dashboard.indicator.expiry.noExpiry":"لا يوجد وقت انتهاء الصلاحية","dashboard.indicator.expiry.expired":"انتهت الصلاحية: {التاريخ}","dashboard.indicator.expiry.expiresOn":"وقت انتهاء الصلاحية: {التاريخ}","dashboard.indicator.delete.confirmTitle":"تأكيد الحذف","dashboard.indicator.delete.confirmContent":'هل أنت متأكد أنك تريد حذف المؤشر "{name}"؟ هذه العملية لا رجعة فيها.',"dashboard.indicator.delete.confirmOk":"حذف","dashboard.indicator.delete.confirmCancel":"إلغاء","dashboard.indicator.delete.success":"تم الحذف بنجاح","dashboard.indicator.delete.failed":"فشل الحذف","dashboard.indicator.save.success":"تم الحفظ بنجاح","dashboard.indicator.save.failed":"فشل الحفظ","dashboard.indicator.error.loadWatchlistFailed":"فشل تحميل الأسهم الاختيارية","dashboard.indicator.error.chartNotReady":"لم تتم تهيئة مكون المخطط. يرجى تحديد الهدف أولاً وانتظر حتى يتم تحميل المخطط.","dashboard.indicator.error.chartMethodNotReady":"طريقة مكون المخطط ليست جاهزة، يرجى المحاولة مرة أخرى لاحقًا","dashboard.indicator.error.chartExecuteNotReady":"طريقة تنفيذ مكون الرسم البياني ليست جاهزة، يرجى المحاولة مرة أخرى لاحقًا","dashboard.indicator.error.parseFailed":"غير قادر على تحليل كود بايثون","dashboard.indicator.error.parseFailedCheck":"غير قادر على تحليل كود بايثون، يرجى التحقق من تنسيق الكود","dashboard.indicator.error.addIndicatorFailed":"فشل في إضافة المؤشر","dashboard.indicator.error.runIndicatorFailed":"فشل مؤشر التشغيل","dashboard.indicator.error.pleaseLogin":"الرجاء تسجيل الدخول أولا","dashboard.indicator.error.loadDataFailed":"فشل تحميل البيانات","dashboard.indicator.error.loadDataFailedDesc":"يرجى التحقق من اتصال الشبكة","dashboard.indicator.error.pythonEngineFailed":"فشل محرك Python في التحميل وقد لا تكون وظيفة المؤشر متاحة.","dashboard.indicator.error.chartInitFailed":"فشلت تهيئة المخطط","dashboard.indicator.warning.enterCode":"الرجاء إدخال رمز المؤشر أولا","dashboard.indicator.warning.pyodideLoadFailed":"فشل محرك بايثون في التحميل","dashboard.indicator.warning.pyodideLoadFailedDesc":"هذه الميزة غير متوفرة في منطقتك الحالية أو بيئة الشبكة الحالية","dashboard.indicator.warning.chartNotInitialized":"لم تتم تهيئة المخطط ولا يمكن استخدام أداة رسم الخط.","dashboard.indicator.success.runIndicator":"يعمل المؤشر بنجاح","dashboard.indicator.success.clearDrawings":"تم مسح كافة الرسومات الخطية","dashboard.indicator.sma":"SMA (مجموعة المتوسطات المتحركة)","dashboard.indicator.ema":"EMA (مجموعة المتوسط المتحرك الأسي)","dashboard.indicator.rsi":"مؤشر القوة النسبية (القوة النسبية)","dashboard.indicator.macd":"ماكد","dashboard.indicator.bb":"بولينجر باند","dashboard.indicator.atr":"ATR (متوسط المدى الحقيقي)","dashboard.indicator.cci":"CCI (مؤشر قناة السلع)","dashboard.indicator.williams":"ويليامز %R (مؤشر ويليامز)","dashboard.indicator.mfi":"مؤسسات التمويل الأصغر (مؤشر تدفق الأموال)","dashboard.indicator.adx":"ADX (مؤشر الاتجاه المتوسط)","dashboard.indicator.obv":"OBV (موجة الطاقة)","dashboard.indicator.adosc":"ADOSC (مذبذب التجميع/الإرسال)","dashboard.indicator.ad":"AD (خط التجميع/التوزيع)","dashboard.indicator.kdj":"KDJ (مؤشر ستوكاستيك)","dashboard.indicator.signal.buy":"شراء","dashboard.indicator.signal.sell":"بيع","dashboard.indicator.signal.supertrendBuy":"شراء سوبر تريند","dashboard.indicator.signal.supertrendSell":"بيع سوبر تريند","dashboard.indicator.chart.kline":"خط K","dashboard.indicator.chart.volume":"الحجم","dashboard.indicator.chart.uptrend":"الاتجاه الصعودي","dashboard.indicator.chart.downtrend":"الاتجاه الهابط","dashboard.indicator.tooltip.time":"الوقت","dashboard.indicator.tooltip.open":"مفتوح","dashboard.indicator.tooltip.close":"تلقي","dashboard.indicator.tooltip.high":"عالية","dashboard.indicator.tooltip.low":"منخفض","dashboard.indicator.tooltip.volume":"الحجم","dashboard.indicator.drawing.line":"قطعة الخط","dashboard.indicator.drawing.horizontalLine":"خط أفقي","dashboard.indicator.drawing.verticalLine":"خط عمودي","dashboard.indicator.drawing.ray":"راي","dashboard.indicator.drawing.straightLine":"خط مستقيم","dashboard.indicator.drawing.parallelLine":"خطوط متوازية","dashboard.indicator.drawing.priceLine":"خط السعر","dashboard.indicator.drawing.priceChannel":"قناة السعر","dashboard.indicator.drawing.fibonacciLine":"خطوط فيبوناتشي","dashboard.indicator.drawing.measure":"قياس","dashboard.indicator.drawing.clearAll":"مسح كافة الرسومات الخطية","dashboard.indicator.market.USStock":"الأسهم الأمريكية","dashboard.indicator.market.Crypto":"عملة مشفرة","dashboard.indicator.market.Forex":"الفوركس","dashboard.indicator.market.Futures":"العقود الآجلة","dashboard.indicator.create":"إنشاء مؤشر","dashboard.indicator.editor.title":"إنشاء/تحرير المؤشرات","dashboard.indicator.editor.name":"اسم المؤشر","dashboard.indicator.editor.nameRequired":"الرجاء إدخال اسم المؤشر","dashboard.indicator.editor.namePlaceholder":"الرجاء إدخال اسم المؤشر","dashboard.indicator.editor.description":"وصف المؤشر","dashboard.indicator.editor.descriptionPlaceholder":"الرجاء إدخال وصف للمؤشر (اختياري)","dashboard.indicator.editor.code":"كود بايثون","dashboard.indicator.editor.codeRequired":"الرجاء إدخال رمز المؤشر","dashboard.indicator.editor.codePlaceholder":"الرجاء إدخال رمز بايثون","dashboard.indicator.editor.run":"تشغيل","dashboard.indicator.editor.runHint":"انقر فوق زر التشغيل لمعاينة تأثير المؤشر على مخطط K-line","dashboard.indicator.editor.guide":"دليل التطوير","dashboard.indicator.editor.guideTitle":"دليل تطوير مؤشر بايثون","dashboard.indicator.editor.save":"حفظ","dashboard.indicator.editor.cancel":"إلغاء","dashboard.indicator.editor.unnamed":"مؤشر بدون اسم","dashboard.indicator.editor.publishToCommunity":"نشر إلى المجتمع","dashboard.indicator.editor.publishToCommunityHint":"بمجرد النشر، يمكن للمستخدمين الآخرين عرض واستخدام المؤشر الخاص بك في المجتمع","dashboard.indicator.editor.indicatorType":"نوع المؤشر","dashboard.indicator.editor.indicatorTypeRequired":"الرجاء تحديد نوع المؤشر","dashboard.indicator.editor.indicatorTypePlaceholder":"الرجاء تحديد نوع المؤشر","dashboard.indicator.editor.previewImage":"معاينة","dashboard.indicator.editor.uploadImage":"تحميل الصور","dashboard.indicator.editor.previewImageHint":"الحجم الموصى به: 800×400، ولا يزيد عن 2 ميجابايت","dashboard.indicator.editor.pricing":"سعر البيع (QDT)","dashboard.indicator.editor.pricingType.free":"مجانا","dashboard.indicator.editor.pricingType.permanent":"دائم","dashboard.indicator.editor.pricingType.monthly":"الدفع الشهري","dashboard.indicator.editor.price":"السعر","dashboard.indicator.editor.priceRequired":"الرجاء إدخال السعر","dashboard.indicator.editor.pricePlaceholder":"الرجاء إدخال السعر","dashboard.indicator.editor.pricingHint":"على الرغم من أن سعر المؤشرات المجانية هو 0، إلا أن المنصة ستكافئك (QDT) بناءً على استخدام المؤشر الخاص بك ومعدل الثناء.","dashboard.indicator.editor.aiGenerate":"جيل ذكي","dashboard.indicator.editor.aiPromptPlaceholder":"أخبرني بأفكارك وسأقوم بإنشاء رمز مؤشر بايثون لك","dashboard.indicator.editor.aiGenerateBtn":"كود تم إنشاؤه بواسطة الذكاء الاصطناعي","dashboard.indicator.editor.aiPromptRequired":"الرجاء إدخال أفكارك","dashboard.indicator.editor.aiGenerateSuccess":"تم إنشاء الكود بنجاح","dashboard.indicator.editor.aiGenerateError":"فشل إنشاء الكود، يرجى المحاولة مرة أخرى لاحقًا","dashboard.indicator.backtest.title":"اختبار خلفي للمؤشر","dashboard.indicator.backtest.config":"معلمات الاختبار الخلفي","dashboard.indicator.backtest.startDate":"تاريخ البدء","dashboard.indicator.backtest.endDate":"تاريخ الانتهاء","dashboard.indicator.backtest.selectStartDate":"حدد تاريخ البدء","dashboard.indicator.backtest.selectEndDate":"حدد تاريخ الانتهاء","dashboard.indicator.backtest.startDateRequired":"الرجاء تحديد تاريخ البدء","dashboard.indicator.backtest.endDateRequired":"الرجاء تحديد تاريخ الانتهاء","dashboard.indicator.backtest.initialCapital":"رأس المال الأولي","dashboard.indicator.backtest.initialCapitalRequired":"الرجاء إدخال الأموال الأولية","dashboard.indicator.backtest.commission":"رسوم المناولة","dashboard.indicator.backtest.leverage":"نسبة الرافعة المالية","dashboard.indicator.backtest.tradeDirection":"اتجاه التداول","dashboard.indicator.backtest.longOnly":"اذهب لفترة طويلة","dashboard.indicator.backtest.shortOnly":"قصيرة","dashboard.indicator.backtest.both":"في اتجاهين","dashboard.indicator.backtest.run":"ابدأ الاختبار الخلفي","dashboard.indicator.backtest.rerun":"باك تست مرة أخرى","dashboard.indicator.backtest.close":"إغلاق","dashboard.indicator.backtest.running":"الاختبار الخلفي للمؤشر قيد التقدم...","dashboard.indicator.backtest.results":"نتائج الاختبار الخلفي","dashboard.indicator.backtest.totalReturn":"العائد الإجمالي","dashboard.indicator.backtest.annualReturn":"الدخل السنوي","dashboard.indicator.backtest.maxDrawdown":"الحد الأقصى للسحب","dashboard.indicator.backtest.sharpeRatio":"نسبة شارب","dashboard.indicator.backtest.winRate":"معدل الفوز","dashboard.indicator.backtest.profitFactor":"نسبة الربح إلى الخسارة","dashboard.indicator.backtest.totalTrades":"عدد المعاملات","dashboard.indicator.totalReturn":"العائد الإجمالي","dashboard.indicator.annualReturn":"معدل العائد السنوي","dashboard.indicator.maxDrawdown":"الحد الأقصى للسحب","dashboard.indicator.sharpeRatio":"نسبة شارب","dashboard.indicator.winRate":"معدل الفوز","dashboard.indicator.profitFactor":"نسبة الربح إلى الخسارة","dashboard.indicator.totalTrades":"إجمالي عدد المعاملات","dashboard.indicator.backtest.totalCommission":"إجمالي رسوم المناولة","dashboard.indicator.backtest.equityCurve":"منحنى العائد","dashboard.indicator.backtest.strategy":"دخل المؤشر","dashboard.indicator.backtest.benchmark":"العودة المرجعية","dashboard.indicator.backtest.tradeHistory":"تاريخ المعاملة","dashboard.indicator.backtest.tradeTime":"الوقت","dashboard.indicator.backtest.tradeType":"اكتب","dashboard.indicator.backtest.buy":"شراء","dashboard.indicator.backtest.sell":"بيع","dashboard.indicator.backtest.liquidation":"التصفية","dashboard.indicator.backtest.openLong":"مفتوح لفترة طويلة","dashboard.indicator.backtest.closeLong":"بيندو","dashboard.indicator.backtest.closeLongStop":"قريب من الشراء (وقف الخسارة)","dashboard.indicator.backtest.closeLongProfit":"إغلاق المزيد (جني الأرباح)","dashboard.indicator.backtest.addLong":"إضافة موقف طويل","dashboard.indicator.backtest.openShort":"فتح قصيرة","dashboard.indicator.backtest.closeShort":"فارغ","dashboard.indicator.backtest.closeShortStop":"إغلاق (وقف الخسارة)","dashboard.indicator.backtest.closeShortProfit":"إغلاق (جني الأرباح)","dashboard.indicator.backtest.addShort":"إضافة موقف قصير","dashboard.indicator.backtest.price":"السعر","dashboard.indicator.backtest.amount":"الكمية","dashboard.indicator.backtest.balance":"رصيد الحساب","dashboard.indicator.backtest.profit":"الربح والخسارة","dashboard.indicator.backtest.success":"تم الانتهاء من الاختبار الخلفي","dashboard.indicator.backtest.failed":"فشل الاختبار الخلفي، يرجى المحاولة مرة أخرى لاحقًا","dashboard.indicator.backtest.noIndicatorCode":"لا يوجد رمز قابل للاختبار الخلفي لهذا المؤشر","dashboard.indicator.backtest.noSymbol":"يرجى تحديد هدف المعاملة أولاً","dashboard.indicator.backtest.dateRangeExceeded":"يتجاوز النطاق الزمني للاختبار الخلفي الحد الأقصى: يمكن اختبار الفترة الزمنية {timeframe} بحد أقصى {maxRange}","dashboard.indicator.backtest.dateRangeExceededDays":"Backtest range exceeds limit: {timeframe} max {maxRange} ({maxDays} days)","dashboard.indicator.backtest.metaLine":"Symbol: {symbol} | Market: {market} | Timeframe: {timeframe}","dashboard.indicator.backtest.savedRunId":"Backtest saved. Run ID: {id}","dashboard.indicator.backtest.prev":"Previous","dashboard.indicator.backtest.next":"Next","dashboard.indicator.backtest.steps.strategy.title":"Strategy","dashboard.indicator.backtest.steps.strategy.desc":"Position sizing & risk controls","dashboard.indicator.backtest.steps.trading.title":"Trading settings","dashboard.indicator.backtest.steps.trading.desc":"Time range, capital, fees, leverage","dashboard.indicator.backtest.steps.results.title":"Results","dashboard.indicator.backtest.steps.results.desc":"Backtest output","dashboard.indicator.backtest.panel.risk":"Risk management (SL/TP/Trailing)","dashboard.indicator.backtest.panel.scale":"Scale in / DCA (trend & mean-reversion)","dashboard.indicator.backtest.panel.reduce":"Reduce position (trend & adverse)","dashboard.indicator.backtest.panel.position":"Position sizing","dashboard.indicator.backtest.field.stopLossPct":"Stop Loss (%)","dashboard.indicator.backtest.field.takeProfitPct":"Take Profit (%)","dashboard.indicator.backtest.field.trailingEnabled":"Trailing stop / take profit","dashboard.indicator.backtest.field.trailingStopPct":"Trailing drawdown (%)","dashboard.indicator.backtest.field.trailingActivationPct":"Trailing activation (%)","dashboard.indicator.backtest.field.slippage":"Slippage (%)","dashboard.indicator.backtest.field.trendAddEnabled":"Trend-following scale-in","dashboard.indicator.backtest.field.dcaAddEnabled":"Mean-reversion DCA","dashboard.indicator.backtest.field.trendAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.dcaAddStepPct":"DCA trigger (%)","dashboard.indicator.backtest.field.trendAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.dcaAddSizePct":"DCA size (% of capital)","dashboard.indicator.backtest.field.trendAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.dcaAddMaxTimes":"Max DCA times","dashboard.indicator.backtest.field.trendReduceEnabled":"Trend reduce","dashboard.indicator.backtest.field.adverseReduceEnabled":"Adverse reduce","dashboard.indicator.backtest.field.trendReduceStepPct":"Trend trigger (%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"Adverse trigger (%)","dashboard.indicator.backtest.field.trendReduceSizePct":"Reduce size (% of position)","dashboard.indicator.backtest.field.adverseReduceSizePct":"Adverse reduce size (% of position)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"Max trend reduce times","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"Max adverse reduce times","dashboard.indicator.backtest.field.entryPct":"Entry size (% of capital)","dashboard.indicator.backtest.field.minOrderPct":"Min order size (% of capital) (optional)","dashboard.indicator.backtest.closeLongTrailing":"Close Long (Trailing)","dashboard.indicator.backtest.reduceLong":"Reduce Long","dashboard.indicator.backtest.closeShortTrailing":"Close Short (Trailing)","dashboard.indicator.backtest.reduceShort":"Reduce Short","dashboard.docs.title":"مركز الوثائق","dashboard.docs.search.placeholder":"بحث في المستندات...","dashboard.docs.category.all":"الكل","dashboard.docs.category.guide":"دليل التطوير","dashboard.docs.category.api":"وثائق واجهة برمجة التطبيقات","dashboard.docs.category.tutorial":"البرنامج التعليمي","dashboard.docs.category.faq":"الأسئلة الشائعة","dashboard.docs.featured.title":"الوثائق الموصى بها","dashboard.docs.featured.tag":"موصى به","dashboard.docs.list.views":"تصفح","dashboard.docs.list.author":"المؤلف","dashboard.docs.list.empty":"لا توجد وثيقة بعد","dashboard.docs.list.backToAll":"العودة إلى جميع الوثائق","dashboard.docs.list.total":"{count} من المستندات في المجموع","dashboard.docs.detail.back":"العودة إلى قائمة المستندات","dashboard.docs.detail.updatedAt":"تم التحديث على","dashboard.docs.detail.related":"الوثائق ذات الصلة","dashboard.docs.detail.notFound":"الوثيقة غير موجودة","dashboard.docs.detail.error":"المستند غير موجود أو تم حذفه","dashboard.docs.search.result":"نتائج البحث","dashboard.docs.search.keyword":"الكلمات الرئيسية","community.filter.indicatorType":"نوع المؤشر","community.filter.all":"الكل","community.filter.other":"خيارات أخرى","community.filter.pricing":"نوع التسعير","community.filter.allPricing":"جميع التسعير","community.filter.sortBy":"الترتيب حسب","community.filter.search":"بحث","community.filter.searchPlaceholder":"البحث عن اسم المقياس","community.indicatorType.trend":"نوع الاتجاه","community.indicatorType.momentum":"نوع الزخم","community.indicatorType.volatility":"التقلب","community.indicatorType.volume":"الحجم","community.indicatorType.custom":"تخصيص","community.pricing.free":"مجانا","community.pricing.paid":"ادفع","community.sort.downloads":"التنزيلات","community.sort.rating":"التقييم","community.sort.newest":"أحدث الإصدارات","community.pagination.total":"{total} مؤشرات في المجموع","community.noDescription":"لا يوجد وصف بعد","community.detail.type":"اكتب","community.detail.pricing":"التسعير","community.detail.rating":"التقييم","community.detail.downloads":"التنزيلات","community.detail.author":"المؤلف","community.detail.description":"مقدمة","community.detail.detailContent":"وصف تفصيلي","community.detail.backtestStats":"إحصائيات الاختبار الخلفي","community.action.purchase":"مؤشر الشراء","community.action.addToMyIndicators":"أضف إلى مؤشراتي","community.action.favorite":"المجموعة","community.action.unfavorite":"إلغاء المفضلة","community.action.buyNow":"اشتري الآن","community.action.renew":"التجديد","community.purchase.price":"السعر","community.purchase.permanent":"دائم","community.purchase.monthly":"شهر","community.purchase.confirmBuy":"هل تريد تأكيد شراء هذا المؤشر ({price} QDT)؟","community.purchase.confirmRenew":"هل تريد تأكيد تجديد هذا المؤشر ({price} QDT/month)؟","community.purchase.confirmFree":"هل تريد تأكيد إضافة هذا المؤشر المجاني؟","community.purchase.confirmTitle":"تأكيد الإجراء","community.purchase.owned":"لقد قمت بشراء هذا المؤشر (صالح بشكل دائم)","community.purchase.ownIndicator":"هذا هو المقياس الذي نشرته","community.purchase.expired":"لقد انتهت صلاحية اشتراكك","community.purchase.expiresOn":"وقت انتهاء الصلاحية: {التاريخ}","community.tabs.detail":"تفاصيل المؤشر","community.tabs.backtest":"بيانات الاختبار الخلفي","community.tabs.ratings":"مراجعات المستخدم","community.rating.myRating":"تقييمي","community.rating.stars":"{عد} النجوم","community.rating.commentPlaceholder":"شارك تجربتك...","community.rating.submit":"إرسال التقييم","community.rating.modify":"تعديل","community.rating.saveModify":"حفظ التغييرات","community.rating.cancel":"إلغاء","community.rating.selectRating":"الرجاء تحديد التقييم","community.rating.success":"التقييم ناجح","community.rating.modifySuccess":"تم تعديل المراجعة بنجاح","community.rating.failed":"فشل التقييم","community.rating.noRatings":"لا توجد تعليقات حتى الآن","community.backtest.note":"البيانات المذكورة أعلاه هي نتائج اختبار خلفي تاريخية وهي للإشارة فقط ولا تمثل أرباحًا مستقبلية.","community.backtest.noData":"لا توجد بيانات باكتست حتى الآن","community.backtest.uploadHint":"لم يقم المؤلف بتحميل بيانات الاختبار الخلفي حتى الآن","community.message.loadFailed":"فشل تحميل قائمة المؤشرات","community.message.purchaseProcessing":"جارٍ معالجة طلب الشراء...","community.message.downloadSuccess":"تمت إضافة المقياس إلى قائمة المقاييس الخاصة بي","community.message.favoriteSuccess":"تم التجميع بنجاح","community.message.unfavoriteSuccess":"تم إلغاء التجميع بنجاح","community.message.operationSuccess":"العملية ناجحة","community.message.operationFailed":"فشلت العملية","community.banner.readOnly":"للقراءة فقط","community.banner.loginHint":"لل تسجيل الدخول أو التسجيل، يرجى النقر على الزر للانتقال إلى صفحة مستقلة لتجنب مشاكل CSRF","community.banner.jumpButton":"الانتقال إلى تسجيل الدخول/التسجيل","dashboard.totalEquity":"إجمالي حقوق الملكية","dashboard.totalPnL":"إجمالي الربح والخسارة","dashboard.aiStrategies":"استراتيجية الذكاء الاصطناعي","dashboard.indicatorStrategies":"استراتيجية المؤشر","dashboard.running":"الجري","dashboard.pnlHistory":"الأرباح والخسائر التاريخية","dashboard.strategyPerformance":"نسبة الربح والخسارة في الاستراتيجية","dashboard.recentTrades":"المعاملات الأخيرة","dashboard.currentPositions":"الوضع الحالي","dashboard.table.time":"الوقت","dashboard.table.strategy":"اسم السياسة","dashboard.table.symbol":"الهدف","dashboard.table.type":"اكتب","dashboard.table.side":"الاتجاه","dashboard.table.size":"الفائدة المفتوحة","dashboard.table.entryPrice":"متوسط سعر الافتتاح","dashboard.table.price":"السعر","dashboard.table.amount":"الكمية","dashboard.table.profit":"الربح والخسارة","dashboard.pendingOrders":"سجل تنفيذ الطلبات","dashboard.totalOrders":"إجمالي {total} طلب","dashboard.viewError":"عرض الخطأ","dashboard.filled":"تم التنفيذ","dashboard.orderTable.time":"وقت الإنشاء","dashboard.orderTable.strategy":"الإستراتيجية","dashboard.orderTable.symbol":"زوج التداول","dashboard.orderTable.signalType":"نوع الإشارة","dashboard.orderTable.amount":"الكمية","dashboard.orderTable.price":"سعر التنفيذ","dashboard.orderTable.status":"الحالة","dashboard.orderTable.executedAt":"وقت التنفيذ","dashboard.signalType.openLong":"فتح Long","dashboard.signalType.openShort":"فتح Short","dashboard.signalType.closeLong":"إغلاق Long","dashboard.signalType.closeShort":"إغلاق Short","dashboard.signalType.addLong":"إضافة Long","dashboard.signalType.addShort":"إضافة Short","dashboard.status.pending":"قيد الانتظار","dashboard.status.processing":"قيد المعالجة","dashboard.status.completed":"مكتمل","dashboard.status.failed":"فشل","dashboard.status.cancelled":"ملغي","dashboard.table.pnl":"الربح أو الخسارة غير المحققة","form.basic-form.basic.title":"الشكل الأساسي","form.basic-form.basic.description":"تُستخدم صفحات النماذج لجمع المعلومات من المستخدمين أو التحقق منها. تُستخدم النماذج الأساسية بشكل شائع في سيناريوهات النماذج التي تحتوي على عدد قليل من عناصر البيانات.","form.basic-form.title.label":"العنوان","form.basic-form.title.placeholder":"إعطاء الهدف اسما","form.basic-form.title.required":"الرجاء إدخال عنوان","form.basic-form.date.label":"تاريخ البدء والانتهاء","form.basic-form.placeholder.start":"تاريخ البدء","form.basic-form.placeholder.end":"تاريخ الانتهاء","form.basic-form.date.required":"الرجاء تحديد تاريخي البدء والانتهاء","form.basic-form.goal.label":"وصف الهدف","form.basic-form.goal.placeholder":"الرجاء إدخال أهداف العمل المرحلية","form.basic-form.goal.required":"الرجاء إدخال وصف الهدف","form.basic-form.standard.label":"قياس","form.basic-form.standard.placeholder":"الرجاء إدخال المقاييس","form.basic-form.standard.required":"الرجاء إدخال المقاييس","form.basic-form.client.label":"العميل","form.basic-form.client.required":"يرجى وصف العملاء الذين تخدمهم","form.basic-form.label.tooltip":"متلقي الخدمة المستهدفين","form.basic-form.client.placeholder":"يرجى وصف العملاء الذين تخدمهم، والعملاء الداخليين مباشرةً @الاسم/رقم الوظيفة","form.basic-form.invites.label":"دعوة المراجعين","form.basic-form.invites.placeholder":"يرجى إرسال @الاسم/رقم الموظف مباشرةً، ويمكنك دعوة ما يصل إلى 5 أشخاص","form.basic-form.weight.label":"الوزن","form.basic-form.weight.placeholder":"من فضلك أدخل","form.basic-form.public.label":"تستهدف الجمهور","form.basic-form.label.help":"تتم مشاركة العملاء والمراجعين بشكل افتراضي","form.basic-form.radio.public":"عام","form.basic-form.radio.partially-public":"عامة جزئيا","form.basic-form.radio.private":"خاص","form.basic-form.publicUsers.placeholder":"مفتوح ل","form.basic-form.option.A":"زميل 1","form.basic-form.option.B":"زميل 2","form.basic-form.option.C":"زميل ثلاثة","form.basic-form.email.required":"الرجاء إدخال عنوان البريد الإلكتروني الخاص بك!","form.basic-form.email.wrong-format":"تنسيق عنوان البريد الإلكتروني خاطئ!","form.basic-form.userName.required":"الرجاء إدخال اسم المستخدم!","form.basic-form.password.required":"الرجاء إدخال كلمة المرور الخاصة بك!","form.basic-form.password.twice":"كلمات المرور التي تم إدخالها مرتين غير متطابقة!","form.basic-form.strength.msg":"الرجاء إدخال 6 أحرف على الأقل. يرجى عدم استخدام كلمات المرور التي يمكن تخمينها بسهولة.","form.basic-form.strength.strong":"القوة : قوية","form.basic-form.strength.medium":"القوة: متوسطة","form.basic-form.strength.short":"القوة : قصيرة جداً","form.basic-form.confirm-password.required":"الرجاء تأكيد كلمة المرور الخاصة بك!","form.basic-form.phone-number.required":"الرجاء إدخال رقم هاتفك المحمول!","form.basic-form.phone-number.wrong-format":"تنسيق رقم الهاتف المحمول خاطئ!","form.basic-form.verification-code.required":"الرجاء إدخال رمز التحقق!","form.basic-form.form.get-captcha":"الحصول على رمز التحقق","form.basic-form.captcha.second":"ثواني","form.basic-form.form.optional":"(اختياري)","form.basic-form.form.submit":"إرسال","form.basic-form.form.save":"حفظ","form.basic-form.email.placeholder":"البريد الإلكتروني","form.basic-form.password.placeholder":"كلمة المرور مكونة من 6 أحرف على الأقل، حساسة لحالة الأحرف","form.basic-form.confirm-password.placeholder":"تأكيد كلمة المرور","form.basic-form.phone-number.placeholder":"رقم الهاتف المحمول","form.basic-form.verification-code.placeholder":"رمز التحقق","result.success.title":"تم التقديم بنجاح","result.success.description":'يتم استخدام صفحة نتائج الإرسال لتقديم تعليقات على نتائج المعالجة لسلسلة من مهام التشغيل. إذا كانت عملية بسيطة فقط، فاستخدم رسالة الملاحظات العامة السريعة. يمكن لمنطقة النص هذه عرض تعليمات تكميلية بسيطة. إذا كانت هناك حاجة لعرض "المستندات"، فيمكن للمنطقة الرمادية أدناه عرض محتوى أكثر تعقيدًا.',"result.success.operate-title":"اسم المشروع","result.success.operate-id":"معرف المشروع","result.success.principal":"الشخص المسؤول","result.success.operate-time":"الوقت الفعال","result.success.step1-title":"إنشاء مشروع","result.success.step1-operator":"تشو ليلي","result.success.step2-title":"المراجعة الأولية للقسم","result.success.step2-operator":"تشو ماوماو","result.success.step2-extra":"عاجل","result.success.step3-title":"المراجعة المالية","result.success.step4-title":"كامل","result.success.btn-return":"العودة إلى القائمة","result.success.btn-project":"عرض العناصر","result.success.btn-print":"طباعة","result.fail.error.title":"فشل التقديم","result.fail.error.description":"يرجى التحقق من المعلومات التالية وتعديلها قبل إعادة الإرسال.","result.fail.error.hint-title":"يحتوي المحتوى الذي أرسلته على الأخطاء التالية:","result.fail.error.hint-text1":"لقد تم تجميد حسابك","result.fail.error.hint-btn1":"ذوبان الجليد على الفور","result.fail.error.hint-text2":"حسابك ليس مؤهلاً بعد للتقديم","result.fail.error.hint-btn2":"قم بالترقية الآن","result.fail.error.btn-text":"العودة إلى التعديل","account.settings.menuMap.custom":"التخصيص","account.settings.menuMap.binding":"ربط الحساب","account.settings.basic.avatar":"الصورة الرمزية","account.settings.basic.change-avatar":"تغيير الصورة الرمزية","account.settings.basic.email":"البريد الإلكتروني","account.settings.basic.email-message":"الرجاء إدخال البريد الإلكتروني الخاص بك!","account.settings.basic.nickname":"اللقب","account.settings.basic.nickname-message":"الرجاء إدخال اللقب الخاص بك!","account.settings.basic.profile":"الملف الشخصي","account.settings.basic.profile-message":"الرجاء إدخال ملف التعريف الشخصي الخاص بك!","account.settings.basic.profile-placeholder":"الملف الشخصي","account.settings.basic.country":"البلد/المنطقة","account.settings.basic.country-message":"الرجاء إدخال بلدك أو منطقتك!","account.settings.basic.geographic":"المحافظة والمدينة","account.settings.basic.geographic-message":"من فضلك أدخل محافظتك ومدينتك!","account.settings.basic.address":"عنوان الشارع","account.settings.basic.address-message":"الرجاء إدخال عنوان الشارع الخاص بك!","account.settings.basic.phone":"رقم الاتصال","account.settings.basic.phone-message":"الرجاء إدخال رقم الاتصال الخاص بك!","account.settings.basic.update":"تحديث المعلومات الأساسية","account.settings.basic.update.success":"تم تحديث المعلومات الأساسية بنجاح","account.settings.security.strong":"قوي","account.settings.security.medium":"في","account.settings.security.weak":"ضعيف","account.settings.security.password":"كلمة مرور الحساب","account.settings.security.password-description":"قوة كلمة المرور الحالية:","account.settings.security.phone":"الهاتف المحمول الأمن","account.settings.security.phone-description":"الهاتف المحمول المرتبط بالفعل:","account.settings.security.question":"القضايا الأمنية","account.settings.security.question-description":"لم يتم تعيين أي أسئلة أمنية، الأمر الذي يمكن أن يحمي أمان الحساب بشكل فعال.","account.settings.security.email":"ربط البريد الإلكتروني","account.settings.security.email-description":"عنوان البريد الإلكتروني المرتبط بالفعل:","account.settings.security.mfa":"جهاز ام اف ايه","account.settings.security.mfa-description":"جهاز MFA غير مقيد. بعد الربط، يمكنك التأكيد مرة أخرى.","account.settings.security.modify":"تعديل","account.settings.security.set":"الإعدادات","account.settings.security.bind":"ملزمة","account.settings.binding.taobao":"ربط تاوباو","account.settings.binding.taobao-description":"حساب تاوباو غير ملزم حاليا","account.settings.binding.alipay":"ربط عليباي","account.settings.binding.alipay-description":"حساب Alipay غير ملزم حاليا","account.settings.binding.dingding":"ملزمة DingTalk","account.settings.binding.dingding-description":"لا يوجد حساب DingTalk مرتبط حاليًا","account.settings.binding.bind":"ملزمة","account.settings.notification.password":"كلمة مرور الحساب","account.settings.notification.password-description":"سيتم إخطار الرسائل الواردة من المستخدمين الآخرين في شكل رسائل موقع.","account.settings.notification.messages":"رسائل النظام","account.settings.notification.messages-description":"سيتم إخطار رسائل النظام في شكل رسائل الموقع.","account.settings.notification.todo":"المهام الواجبة","account.settings.notification.todo-description":"سيتم إخطار المهام الواجبة في شكل رسائل داخل الموقع","account.settings.settings.open":"مفتوح","account.settings.settings.close":"قريب","trading-assistant.title":"مساعد التداول","trading-assistant.strategyList":"قائمة الإستراتيجية","trading-assistant.createStrategy":"إنشاء سياسة","trading-assistant.noStrategy":"لا توجد استراتيجية حتى الآن","trading-assistant.selectStrategy":"يرجى تحديد استراتيجية من اليسار لعرض التفاصيل","trading-assistant.startStrategy":"استراتيجية الإطلاق","trading-assistant.stopStrategy":"استراتيجية التوقف","trading-assistant.editStrategy":"استراتيجية التحرير","trading-assistant.deleteStrategy":"حذف السياسة","trading-assistant.status.running":"الجري","trading-assistant.status.stopped":"توقف","trading-assistant.status.error":"خطأ","trading-assistant.strategyType.IndicatorStrategy":"استراتيجية المؤشر الفني","trading-assistant.strategyType.PromptBasedStrategy":"استراتيجية الكلمات الدلالية","trading-assistant.strategyType.GridStrategy":"استراتيجية الشبكة","trading-assistant.tabs.tradingRecords":"تاريخ المعاملة","trading-assistant.tabs.positions":"سجل الموقف","trading-assistant.tabs.equityCurve":"منحنى الأسهم","trading-assistant.form.step1":"حدد المؤشرات","trading-assistant.form.step2":"تكوين الصرف","trading-assistant.form.step3":"معلمات الاستراتيجية","trading-assistant.form.indicator":"حدد المؤشرات","trading-assistant.form.indicatorHint":"يمكنك فقط تحديد المؤشرات الفنية التي اشتريتها أو أنشأتها","trading-assistant.form.qdtCostHints":"سيؤدي استخدام الإستراتيجية إلى استهلاك QDT، يرجى التأكد من أن الحساب به رصيد كافٍ من QDT","trading-assistant.form.indicatorDescription":"وصف المؤشر","trading-assistant.form.noDescription":"لا يوجد وصف بعد","trading-assistant.form.exchange":"اختر الصرف","trading-assistant.form.apiKey":"مفتاح واجهة برمجة التطبيقات","trading-assistant.form.secretKey":"المفتاح السري","trading-assistant.form.passphrase":"عبارة المرور","trading-assistant.form.testConnection":"اتصال الاختبار","trading-assistant.form.strategyName":"اسم السياسة","trading-assistant.form.symbol":"زوج التداول","trading-assistant.form.symbolHint":"حاليًا، يتم دعم أزواج تداول العملات المشفرة فقط","trading-assistant.form.initialCapital":"حجم الاستثمار","trading-assistant.form.marketType":"نوع السوق","trading-assistant.form.marketTypeFutures":"العقد","trading-assistant.form.marketTypeSpot":"بقعة","trading-assistant.form.marketTypeHint":"يدعم العقد التداول في اتجاهين والرافعة المالية، في حين أن السعر الفوري يدعم فقط المراكز الطويلة والرافعة المالية ثابتة عند 1x","trading-assistant.form.leverage":"الاستفادة المتعددة","trading-assistant.form.leverageHint":"العقد: 1-125 مرة، البقعة: ثابتة 1 مرة","trading-assistant.form.spotLeverageFixed":"الرافعة المالية للتداول الفوري ثابتة عند 1x","trading-assistant.form.spotOnlyLongHint":"التداول الفوري يدعم فقط المراكز الطويلة","trading-assistant.form.tradeDirection":"اتجاه التداول","trading-assistant.form.tradeDirectionLong":"طويلة فقط","trading-assistant.form.tradeDirectionShort":"قصيرة فقط","trading-assistant.form.tradeDirectionBoth":"معاملة في اتجاهين","trading-assistant.form.timeframe":"الفترة الزمنية","trading-assistant.form.klinePeriod":"فترة K-Line","trading-assistant.form.timeframe1m":"1 دقيقة","trading-assistant.form.timeframe5m":"5 دقائق","trading-assistant.form.timeframe15m":"15 دقيقة","trading-assistant.form.timeframe30m":"30 دقيقة","trading-assistant.form.timeframe1H":"1 ساعة","trading-assistant.form.timeframe4H":"4 ساعات","trading-assistant.form.timeframe1D":"يوم واحد","trading-assistant.form.selectStrategyType":"اختر نوع الاستراتيجية","trading-assistant.form.indicatorStrategy":"استراتيجية المؤشر","trading-assistant.form.indicatorStrategyDesc":"استراتيجية تداول آلية تعتمد على المؤشرات الفنية","trading-assistant.form.aiStrategy":"استراتيجية AI","trading-assistant.form.aiStrategyDesc":"استراتيجية تداول آلية تعتمد على اتخاذ القرار الذكي للذكاء الاصطناعي","trading-assistant.form.enableAiFilter":"تفعيل مرشح اتخاذ القرار الذكي للذكاء الاصطناعي","trading-assistant.form.enableAiFilterHint":"عند التفعيل، سيتم تصفية إشارات المؤشر بواسطة الذكاء الاصطناعي لتحسين جودة التداول","trading-assistant.form.aiFilterPrompt":"موجه مخصص","trading-assistant.form.aiFilterPromptHint":"توفير تعليمات مخصصة لتصفية الذكاء الاصطناعي، اتركه فارغًا لاستخدام الإعداد الافتراضي للنظام","trading-assistant.validation.strategyTypeRequired":"يرجى اختيار نوع الاستراتيجية","trading-assistant.form.advancedSettings":"الإعدادات المتقدمة","trading-assistant.form.orderMode":"وضع الطلب","trading-assistant.form.orderModeMaker":"صانع","trading-assistant.form.orderModeTaker":"سعر السوق (المتلقي)","trading-assistant.form.orderModeHint":"يستخدم وضع الأمر المعلق أوامر الحد وتكون رسوم المناولة أقل؛ يتم تنفيذ وضع سعر السوق على الفور وتكون رسوم المناولة أعلى.","trading-assistant.form.makerWaitSec":"وقت الانتظار للأوامر المعلقة (ثواني)","trading-assistant.form.makerWaitSecHint":"الوقت اللازم لانتظار المعاملة بعد تقديم الطلب. قم بالإلغاء وحاول مرة أخرى بعد انتهاء المهلة.","trading-assistant.form.makerRetries":"عدد مرات إعادة المحاولة للأوامر المعلقة","trading-assistant.form.makerRetriesHint":"الحد الأقصى لعدد مرات إعادة المحاولة عندما لا يتم تنفيذ الأمر المعلق","trading-assistant.form.fallbackToMarket":"يفشل الأمر المعلق ويتم تخفيض سعر السوق.","trading-assistant.form.fallbackToMarketHint":"عندما لا يتم إكمال أمر الفتح/الإغلاق المعلق، ما إذا كان ينبغي تخفيضه إلى أمر سوق لضمان اكتمال المعاملة.","trading-assistant.form.marginMode":"وضع الهامش","trading-assistant.form.marginModeCross":"مستودع كامل","trading-assistant.form.marginModeIsolated":"موقف معزول","trading-assistant.form.stopLossPct":"نسبة وقف الخسارة (٪)","trading-assistant.form.stopLossPctHint":"قم بتعيين نسبة وقف الخسارة، 0 يعني عدم تمكين وقف الخسارة","trading-assistant.form.takeProfitPct":"نسبة جني الأرباح (%)","trading-assistant.form.takeProfitPctHint":"قم بتعيين نسبة أخذ الربح، 0 يعني تعطيل أخذ الربح","trading-assistant.form.signalMode":"وضع الإشارة","trading-assistant.form.signalModeConfirmed":"تأكيد الوضع","trading-assistant.form.signalModeAggressive":"الوضع العدواني","trading-assistant.form.signalModeHint":"وضع التأكيد: يتحقق فقط من خطوط K المكتملة؛ الوضع العدواني: يتحقق أيضًا من تشكيل خطوط K","trading-assistant.form.cancel":"إلغاء","trading-assistant.form.prev":"الخطوة السابقة","trading-assistant.form.next":"الخطوة التالية","trading-assistant.form.confirmCreate":"تأكيد الإنشاء","trading-assistant.form.confirmEdit":"تأكيد التغييرات","trading-assistant.messages.createSuccess":"تم إنشاء الإستراتيجية بنجاح","trading-assistant.messages.createFailed":"فشل في إنشاء السياسة","trading-assistant.messages.updateSuccess":"تم تحديث السياسة بنجاح","trading-assistant.messages.updateFailed":"فشل تحديث السياسة","trading-assistant.messages.deleteSuccess":"تم حذف السياسة بنجاح","trading-assistant.messages.deleteFailed":"فشل سياسة الحذف","trading-assistant.messages.startSuccess":"بدأت الإستراتيجية بنجاح","trading-assistant.messages.startFailed":"فشل في بدء السياسة","trading-assistant.messages.stopSuccess":"تم إيقاف الإستراتيجية بنجاح","trading-assistant.messages.stopFailed":"فشلت استراتيجية التوقف","trading-assistant.messages.loadFailed":"فشل الحصول على قائمة السياسات","trading-assistant.messages.runningWarning":"الاستراتيجية قيد التشغيل. يرجى إيقاف الإستراتيجية قبل تعديلها.","trading-assistant.messages.deleteConfirmWithName":'هل أنت متأكد أنك تريد حذف السياسة "{name}"؟ هذه العملية لا رجعة فيها.',"trading-assistant.messages.deleteConfirm":"هل أنت متأكد أنك تريد حذف هذه السياسة؟ هذه العملية لا رجعة فيها.","trading-assistant.messages.loadTradesFailed":"فشل في الحصول على سجلات المعاملات","trading-assistant.messages.loadPositionsFailed":"فشل الحصول على سجل الموقف","trading-assistant.messages.loadEquityFailed":"فشل في الحصول على منحنى الأسهم","trading-assistant.messages.loadIndicatorsFailed":"فشل تحميل قائمة المؤشرات، يرجى المحاولة مرة أخرى في وقت لاحق","trading-assistant.messages.spotLimitations":"تم ضبط التداول الفوري تلقائيًا على رافعة مالية طويلة فقط بمقدار 1x","trading-assistant.messages.autoFillApiConfig":"تمت تعبئة تكوين واجهة برمجة التطبيقات التاريخية للبورصة تلقائيًا","trading-assistant.placeholders.selectIndicator":"الرجاء تحديد مؤشر","trading-assistant.placeholders.selectExchange":"الرجاء تحديد التبادل","trading-assistant.placeholders.inputApiKey":"الرجاء إدخال مفتاح API","trading-assistant.placeholders.inputSecretKey":"الرجاء إدخال المفتاح السري","trading-assistant.placeholders.inputPassphrase":"الرجاء إدخال عبارة المرور","trading-assistant.placeholders.inputStrategyName":"الرجاء إدخال اسم السياسة","trading-assistant.placeholders.selectSymbol":"يرجى اختيار زوج التداول","trading-assistant.placeholders.selectTimeframe":"الرجاء تحديد الفترة الزمنية","trading-assistant.placeholders.selectKlinePeriod":"الرجاء تحديد فترة K-Line","trading-assistant.placeholders.inputAiFilterPrompt":"الرجاء إدخال موجه مخصص (اختياري)","trading-assistant.validation.indicatorRequired":"الرجاء تحديد مؤشر","trading-assistant.validation.exchangeRequired":"الرجاء تحديد التبادل","trading-assistant.validation.apiKeyRequired":"الرجاء إدخال مفتاح API","trading-assistant.validation.secretKeyRequired":"الرجاء إدخال المفتاح السري","trading-assistant.validation.passphraseRequired":"الرجاء إدخال عبارة المرور","trading-assistant.validation.exchangeConfigIncomplete":"يرجى ملء معلومات تكوين التبادل الكاملة","trading-assistant.validation.testConnectionRequired":'يرجى النقر على زر "اختبار الاتصال" أولاً والتأكد من نجاح الاتصال',"trading-assistant.validation.testConnectionFailed":"فشل اختبار الاتصال، يرجى التحقق من التكوين وإعادة المحاولة","trading-assistant.validation.credentialRequired":"يرجى إضافة واختبار بيانات اعتماد التبادل في المركز الشخصي أولاً","trading-assistant.validation.strategyNameRequired":"الرجاء إدخال اسم السياسة","trading-assistant.validation.symbolRequired":"يرجى اختيار زوج التداول","trading-assistant.validation.initialCapitalRequired":"الرجاء إدخال مبلغ الاستثمار","trading-assistant.validation.leverageRequired":"الرجاء إدخال نسبة الرافعة المالية","trading-assistant.table.time":"الوقت","trading-assistant.table.type":"اكتب","trading-assistant.table.price":"السعر","trading-assistant.table.amount":"الكمية","trading-assistant.table.value":"المبلغ","trading-assistant.table.commission":"رسوم المناولة","trading-assistant.table.symbol":"زوج التداول","trading-assistant.table.side":"الاتجاه","trading-assistant.table.size":"كمية الموقف","trading-assistant.table.entryPrice":"سعر الافتتاح","trading-assistant.table.currentPrice":"السعر الحالي","trading-assistant.table.unrealizedPnl":"الربح أو الخسارة غير المحققة","trading-assistant.table.pnlPercent":"نسبة الربح والخسارة","trading-assistant.table.buy":"شراء","trading-assistant.table.sell":"بيع","trading-assistant.table.long":"اذهب لفترة طويلة","trading-assistant.table.short":"قصيرة","trading-assistant.table.noPositions":"لا توجد مناصب حتى الآن","trading-assistant.detail.title":"تفاصيل الاستراتيجية","trading-assistant.detail.strategyName":"اسم السياسة","trading-assistant.detail.strategyType":"نوع الإستراتيجية","trading-assistant.detail.status":"الحالة","trading-assistant.detail.tradingMode":"نموذج التداول","trading-assistant.detail.exchange":"تبادل","trading-assistant.detail.initialCapital":"رأس المال الأولي","trading-assistant.detail.totalInvestment":"إجمالي مبلغ الاستثمار","trading-assistant.detail.currentEquity":"صافي القيمة الحالية","trading-assistant.detail.totalPnl":"إجمالي الربح والخسارة","trading-assistant.detail.indicatorName":"اسم المؤشر","trading-assistant.detail.maxLeverage":"الحد الأقصى للرافعة المالية","trading-assistant.detail.decideInterval":"الفاصل الزمني للقرار","trading-assistant.detail.symbols":"كائن المعاملة","trading-assistant.detail.createdAt":"وقت الخلق","trading-assistant.detail.updatedAt":"وقت التحديث","trading-assistant.detail.llmConfig":"تكوين نموذج الذكاء الاصطناعي","trading-assistant.detail.exchangeConfig":"تكوين الصرف","trading-assistant.detail.provider":"مزود","trading-assistant.detail.modelId":"معرف النموذج","trading-assistant.detail.close":"إغلاق","trading-assistant.detail.loadFailed":"فشل الحصول على تفاصيل السياسة","trading-assistant.equity.noData":"لا توجد بيانات عن صافي القيمة حتى الآن","trading-assistant.equity.equity":"صافي القيمة","trading-assistant.exchange.tradingMode":"نموذج التداول","trading-assistant.exchange.virtual":"محاكاة التداول","trading-assistant.exchange.live":"معاملة حقيقية","trading-assistant.exchange.selectExchange":"اختر الصرف","trading-assistant.exchange.walletAddress":"عنوان المحفظة","trading-assistant.exchange.walletAddressPlaceholder":"الرجاء إدخال عنوان محفظتك (يبدأ بـ 0x)","trading-assistant.exchange.privateKey":"مفتاح خاص","trading-assistant.exchange.privateKeyPlaceholder":"الرجاء إدخال المفتاح الخاص (64 حرفًا)","trading-assistant.exchange.testConnection":"اتصال الاختبار","trading-assistant.exchange.connectionSuccess":"تم الاتصال بنجاح","trading-assistant.exchange.connectionFailed":"فشل الاتصال","trading-assistant.exchange.testFailed":"فشل اختبار الاتصال","trading-assistant.exchange.fillComplete":"يرجى ملء معلومات تكوين التبادل الكاملة","trading-assistant.strategyTypeOptions.ai":"استراتيجية تعتمد على الذكاء الاصطناعي","trading-assistant.strategyTypeOptions.indicator":"استراتيجية المؤشر الفني","trading-assistant.strategyTypeOptions.aiDeveloping":"إن وظيفة الإستراتيجية المبنية على الذكاء الاصطناعي قيد التطوير، لذا ترقبوا ذلك","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"ميزات الإستراتيجية المعتمدة على الذكاء الاصطناعي قيد التطوير","trading-assistant.indicatorType.trend":"الاتجاه","trading-assistant.indicatorType.momentum":"الزخم","trading-assistant.indicatorType.volatility":"التقلب","trading-assistant.indicatorType.volume":"الحجم","trading-assistant.indicatorType.custom":"تخصيص","trading-assistant.exchangeNames":{okx:"أوكي إكس",binance:"بينانس",hyperliquid:"السائل الزائد",blockchaincom:"Blockchain.com",coinbaseexchange:"كوين بيس",gate:"بوابة.io",mexc:"ميكسك",kraken:"كراكن",bitfinex:"بيتفينكس",bybit:"بايبيت",kucoin:"كيو كوين",huobi:"هوبي",bitget:"بيتجيت",bitmex:"بيتميكس",deribit:"ديربيت",phemex:"فيميكس",bitmart:"بيتمارت",bitstamp:"بيتستامب",bittrex:"بيتريكس",poloniex:"بولونيكس",gemini:"الجوزاء",cryptocom:"تشفير.كوم",bitflyer:"bitFlyer",upbit:"أوبيت",bithumb:"بيتهامب",coinone:"عملة واحدة",zb:"ZB",lbank:"بنك إل",bibox:"بيبوكس",bigone:"BigONE",bitrue:"صحيح",coinex:"كوين إكس",digifinex:"DigiFinex",ftx:"إف تي إكس",ftxus:"إف تي إكس الولايات المتحدة",binanceus:"بينانس الولايات المتحدة",binancecoinm:"عملة بينانس-M",binanceusdm:"Binance USDⓈ-M",deepcoin:"ديبكوين"},"ai-trading-assistant.title":"مساعد التداول بالذكاء الاصطناعي","ai-trading-assistant.strategyList":"قائمة الإستراتيجية","ai-trading-assistant.createStrategy":"إنشاء سياسة","ai-trading-assistant.noStrategy":"لا توجد استراتيجية حتى الآن","ai-trading-assistant.selectStrategy":"يرجى تحديد استراتيجية من اليسار لعرض التفاصيل","ai-trading-assistant.startStrategy":"استراتيجية الإطلاق","ai-trading-assistant.stopStrategy":"استراتيجية التوقف","ai-trading-assistant.editStrategy":"استراتيجية التحرير","ai-trading-assistant.deleteStrategy":"حذف السياسة","ai-trading-assistant.status.running":"الجري","ai-trading-assistant.status.stopped":"توقف","ai-trading-assistant.status.error":"خطأ","ai-trading-assistant.tabs.tradingRecords":"تاريخ المعاملة","ai-trading-assistant.tabs.positions":"سجل الموقف","ai-trading-assistant.tabs.aiDecisions":"سجل قرار الذكاء الاصطناعي","ai-trading-assistant.tabs.equityCurve":"منحنى الأسهم","ai-trading-assistant.form.createTitle":"إنشاء استراتيجيات التداول بالذكاء الاصطناعي","ai-trading-assistant.form.editTitle":"تحرير استراتيجية التداول بالذكاء الاصطناعي","ai-trading-assistant.form.strategyName":"اسم السياسة","ai-trading-assistant.form.modelId":"نموذج الذكاء الاصطناعي","ai-trading-assistant.form.modelIdHint":"استخدم خدمة OpenRouter الخاصة بالنظام دون تكوين مفتاح API","ai-trading-assistant.form.decideInterval":"الفاصل الزمني للقرار","ai-trading-assistant.form.decideInterval5m":"5 دقائق","ai-trading-assistant.form.decideInterval10m":"10 دقائق","ai-trading-assistant.form.decideInterval30m":"30 دقيقة","ai-trading-assistant.form.decideInterval1h":"1 ساعة","ai-trading-assistant.form.decideInterval4h":"4 ساعات","ai-trading-assistant.form.decideInterval1d":"يوم واحد","ai-trading-assistant.form.decideInterval1w":"1 أسبوع","ai-trading-assistant.form.decideIntervalHint":"الفاصل الزمني للذكاء الاصطناعي لاتخاذ القرارات","ai-trading-assistant.form.runPeriod":"تشغيل دورة","ai-trading-assistant.form.runPeriodHint":"وقت البدء ووقت الانتهاء لتشغيل الإستراتيجية","ai-trading-assistant.form.startDate":"تاريخ البدء","ai-trading-assistant.form.endDate":"تاريخ الانتهاء","ai-trading-assistant.form.qdtCostTitle":"تعليمات خصم QDT","ai-trading-assistant.form.qdtCostHint":"سيتم خصم {cost} QDT لكل قرار للذكاء الاصطناعي. يرجى التأكد من أن حسابك يحتوي على رصيد QDT كافٍ. أثناء تنفيذ الإستراتيجية، سيتم خصم الرسوم في الوقت الفعلي لكل قرار.","ai-trading-assistant.form.apiKey":"مفتاح واجهة برمجة التطبيقات","ai-trading-assistant.form.exchange":"اختر الصرف","ai-trading-assistant.form.secretKey":"المفتاح السري","ai-trading-assistant.form.passphrase":"عبارة المرور","ai-trading-assistant.form.testConnection":"اتصال الاختبار","ai-trading-assistant.form.symbol":"زوج التداول","ai-trading-assistant.form.symbolHint":"حدد زوج التداول للتداول","ai-trading-assistant.form.initialCapital":"المبلغ المستثمر (الهامش)","ai-trading-assistant.form.leverage":"الاستفادة المتعددة","ai-trading-assistant.form.timeframe":"الفترة الزمنية","ai-trading-assistant.form.timeframe1m":"1 دقيقة","ai-trading-assistant.form.timeframe5m":"5 دقائق","ai-trading-assistant.form.timeframe15m":"15 دقيقة","ai-trading-assistant.form.timeframe30m":"30 دقيقة","ai-trading-assistant.form.timeframe1H":"1 ساعة","ai-trading-assistant.form.timeframe4H":"4 ساعات","ai-trading-assistant.form.timeframe1D":"يوم واحد","ai-trading-assistant.form.marketType":"نوع السوق","ai-trading-assistant.form.marketTypeFutures":"العقد","ai-trading-assistant.form.marketTypeSpot":"بقعة","ai-trading-assistant.form.totalPnl":"إجمالي الربح والخسارة","ai-trading-assistant.form.customPrompt":"كلمات موجهة مخصصة","ai-trading-assistant.form.customPromptHint":"اختياري، يُستخدم لتخصيص استراتيجيات التداول بالذكاء الاصطناعي ومنطق اتخاذ القرار","ai-trading-assistant.form.cancel":"إلغاء","ai-trading-assistant.form.prev":"الخطوة السابقة","ai-trading-assistant.form.next":"الخطوة التالية","ai-trading-assistant.form.confirmCreate":"تأكيد الإنشاء","ai-trading-assistant.form.confirmEdit":"تأكيد التغييرات","ai-trading-assistant.messages.createSuccess":"تم إنشاء الإستراتيجية بنجاح","ai-trading-assistant.messages.createFailed":"فشل في إنشاء السياسة","ai-trading-assistant.messages.updateSuccess":"تم تحديث السياسة بنجاح","ai-trading-assistant.messages.updateFailed":"فشل تحديث السياسة","ai-trading-assistant.messages.deleteSuccess":"تم حذف السياسة بنجاح","ai-trading-assistant.messages.deleteFailed":"فشل سياسة الحذف","ai-trading-assistant.messages.startSuccess":"بدأت الإستراتيجية بنجاح","ai-trading-assistant.messages.startFailed":"فشل في بدء السياسة","ai-trading-assistant.messages.stopSuccess":"تم إيقاف الإستراتيجية بنجاح","ai-trading-assistant.messages.stopFailed":"فشلت استراتيجية التوقف","ai-trading-assistant.messages.loadFailed":"فشل الحصول على قائمة السياسات","ai-trading-assistant.messages.loadDecisionsFailed":"فشل في الحصول على سجل قرار الذكاء الاصطناعي","ai-trading-assistant.messages.deleteConfirm":"هل أنت متأكد أنك تريد حذف هذه السياسة؟ هذه العملية لا رجعة فيها.","ai-trading-assistant.placeholders.inputStrategyName":"الرجاء إدخال اسم السياسة","ai-trading-assistant.placeholders.selectModelId":"الرجاء تحديد نموذج الذكاء الاصطناعي","ai-trading-assistant.placeholders.selectDecideInterval":"الرجاء تحديد الفاصل الزمني للقرار","ai-trading-assistant.placeholders.startTime":"وقت البدء","ai-trading-assistant.placeholders.endTime":"وقت النهاية","ai-trading-assistant.placeholders.inputApiKey":"الرجاء إدخال مفتاح API","ai-trading-assistant.placeholders.selectExchange":"الرجاء تحديد التبادل","ai-trading-assistant.placeholders.inputSecretKey":"الرجاء إدخال المفتاح السري","ai-trading-assistant.placeholders.inputPassphrase":"الرجاء إدخال عبارة المرور","ai-trading-assistant.placeholders.selectSymbol":"يرجى تحديد زوج تداول، مثل: BTC/USDT","ai-trading-assistant.placeholders.selectTimeframe":"الرجاء تحديد الفترة الزمنية","ai-trading-assistant.placeholders.inputCustomPrompt":"الرجاء إدخال كلمة مطالبة مخصصة (اختياري)","ai-trading-assistant.validation.strategyNameRequired":"الرجاء إدخال اسم السياسة","ai-trading-assistant.validation.modelIdRequired":"الرجاء تحديد نموذج الذكاء الاصطناعي","ai-trading-assistant.validation.runPeriodRequired":"الرجاء تحديد دورة التشغيل","ai-trading-assistant.validation.apiKeyRequired":"الرجاء إدخال مفتاح API","ai-trading-assistant.validation.exchangeRequired":"الرجاء تحديد التبادل","ai-trading-assistant.validation.secretKeyRequired":"الرجاء إدخال المفتاح السري","ai-trading-assistant.validation.symbolRequired":"يرجى اختيار زوج التداول","ai-trading-assistant.validation.initialCapitalRequired":"الرجاء إدخال مبلغ الاستثمار","ai-trading-assistant.table.time":"الوقت","ai-trading-assistant.table.type":"اكتب","ai-trading-assistant.table.price":"السعر","ai-trading-assistant.table.amount":"الكمية","ai-trading-assistant.table.value":"المبلغ","ai-trading-assistant.table.symbol":"زوج التداول","ai-trading-assistant.table.side":"الاتجاه","ai-trading-assistant.table.size":"كمية الموقف","ai-trading-assistant.table.entryPrice":"سعر الافتتاح","ai-trading-assistant.table.currentPrice":"السعر الحالي","ai-trading-assistant.table.unrealizedPnl":"الربح أو الخسارة غير المحققة","ai-trading-assistant.table.profit":"الربح والخسارة","ai-trading-assistant.table.openLong":"مفتوح لفترة طويلة","ai-trading-assistant.table.closeLong":"بيندو","ai-trading-assistant.table.openShort":"فتح قصيرة","ai-trading-assistant.table.closeShort":"فارغ","ai-trading-assistant.table.addLong":"غادوت","ai-trading-assistant.table.addShort":"إضافة قصيرة","ai-trading-assistant.table.closeShortProfit":"جني الأرباح من المركز القصير","ai-trading-assistant.table.closeShortStop":"وقف الخسارة","ai-trading-assistant.table.closeLongProfit":"توقف لفترة طويلة وجني الأرباح","ai-trading-assistant.table.closeLongStop":"وقف الخسارة","ai-trading-assistant.table.buy":"شراء","ai-trading-assistant.table.sell":"بيع","ai-trading-assistant.table.long":"اذهب لفترة طويلة","ai-trading-assistant.table.short":"قصيرة","ai-trading-assistant.table.hold":"عقد","ai-trading-assistant.table.reasoning":"سبب التحليل","ai-trading-assistant.table.decisions":"صنع القرار","ai-trading-assistant.table.riskAssessment":"تقييم المخاطر","ai-trading-assistant.table.confidence":"الثقة","ai-trading-assistant.table.totalRecords":"{total} السجلات في المجموع","ai-trading-assistant.table.noPositions":"لا توجد مناصب حتى الآن","ai-trading-assistant.detail.title":"تفاصيل الاستراتيجية","ai-trading-assistant.equity.noData":"لا توجد بيانات عن صافي القيمة حتى الآن","ai-trading-assistant.equity.equity":"صافي القيمة","ai-trading-assistant.exchange.testFailed":"فشل اختبار الاتصال","ai-trading-assistant.exchange.connectionSuccess":"تم الاتصال بنجاح","ai-trading-assistant.exchange.connectionFailed":"فشل الاتصال","ai-trading-assistant.form.advancedSettings":"الإعدادات المتقدمة","ai-trading-assistant.form.orderMode":"وضع الطلب","ai-trading-assistant.form.orderModeMaker":"صانع","ai-trading-assistant.form.orderModeTaker":"سعر السوق (المتلقي)","ai-trading-assistant.form.orderModeHint":"يستخدم وضع الأمر المعلق أوامر الحد وتكون رسوم المناولة أقل؛ يتم تنفيذ وضع سعر السوق على الفور وتكون رسوم المناولة أعلى.","ai-trading-assistant.form.makerWaitSec":"وقت الانتظار للأوامر المعلقة (ثواني)","ai-trading-assistant.form.makerWaitSecHint":"الوقت اللازم لانتظار المعاملة بعد تقديم الطلب. قم بالإلغاء وحاول مرة أخرى بعد انتهاء المهلة.","ai-trading-assistant.form.makerRetries":"عدد مرات إعادة المحاولة للأوامر المعلقة","ai-trading-assistant.form.makerRetriesHint":"الحد الأقصى لعدد مرات إعادة المحاولة عندما لا يتم تنفيذ الأمر المعلق","ai-trading-assistant.form.fallbackToMarket":"يفشل الأمر المعلق ويتم تخفيض سعر السوق.","ai-trading-assistant.form.fallbackToMarketHint":"عندما لا يتم إكمال أمر الفتح/الإغلاق المعلق، ما إذا كان ينبغي تخفيضه إلى أمر سوق لضمان اكتمال المعاملة.","ai-trading-assistant.form.marginMode":"وضع الهامش","ai-trading-assistant.form.marginModeCross":"مستودع كامل","ai-trading-assistant.form.marginModeIsolated":"موقف معزول","ai-analysis.title":"محرك التداول الكمي","ai-analysis.system.online":"على الانترنت","ai-analysis.system.agents":"وكيل","ai-analysis.system.active":"نشط","ai-analysis.system.stage":"المرحلة","ai-analysis.panel.roster":"تشكيلة الوكيل","ai-analysis.panel.thinking":"أفكر...","ai-analysis.panel.done":"كامل","ai-analysis.panel.standby":"الاستعداد","ai-analysis.input.title":"محرك التداول الكمي","ai-analysis.input.placeholder":"حدد الأصول المستهدفة (مثل BTC/USDT)","ai-analysis.input.watchlist":"الأسهم الاختيارية","ai-analysis.input.start":"ابدأ التحليل","ai-analysis.input.recent":"المهام الأخيرة:","ai-analysis.vis.stage":"المرحلة","ai-analysis.vis.processing":"المعالجة","ai-analysis.result.complete":"اكتمل التحليل","ai-analysis.result.signal":"الإشارة النهائية","ai-analysis.result.confidence":"الثقة:","ai-analysis.result.new":"تحليل جديد","ai-analysis.result.full":"عرض التقرير كاملا","ai-analysis.logs.title":"سجل النظام","ai-analysis.modal.title":"تقرير سري","ai-analysis.modal.fundamental":"التحليل الأساسي","ai-analysis.modal.technical":"التحليل الفني","ai-analysis.modal.sentiment":"التحليل العاطفي","ai-analysis.modal.risk":"تقييم المخاطر","ai-analysis.stage.idle":"الاستعداد","ai-analysis.stage.1":"المرحلة الأولى: التحليل متعدد الأبعاد","ai-analysis.stage.2":"المرحلة الثانية: المناقشة الطويلة والقصيرة","ai-analysis.stage.3":"المرحلة الثالثة: التخطيط الاستراتيجي","ai-analysis.stage.4":"المرحلة الرابعة: مراجعة مراقبة المخاطر","ai-analysis.stage.complete":"كامل","ai-analysis.agent.investment_director":"مدير الاستثمار","ai-analysis.agent.role.investment_director":"تحليل شامل واستنتاج نهائي","ai-analysis.agent.market":"محلل السوق","ai-analysis.agent.role.market":"التكنولوجيا وبيانات السوق","ai-analysis.agent.fundamental":"محلل أساسي","ai-analysis.agent.role.fundamental":"التمويل والتقييم","ai-analysis.agent.technical":"محلل فني","ai-analysis.agent.role.technical":"المؤشرات الفنية والرسوم البيانية","ai-analysis.agent.news":"محلل اخبار","ai-analysis.agent.role.news":"مرشح الأخبار العالمية","ai-analysis.agent.sentiment":"محلل المشاعر","ai-analysis.agent.role.sentiment":"الاجتماعية والعاطفية","ai-analysis.agent.risk":"محلل المخاطر","ai-analysis.agent.role.risk":"فحص المخاطر الأساسية","ai-analysis.agent.bull":"الباحث الصاعد","ai-analysis.agent.role.bull":"التعدين محفز النمو","ai-analysis.agent.bear":"الباحث الهابط","ai-analysis.agent.role.bear":"حفر المخاطر والعيوب","ai-analysis.agent.manager":"مدير البحوث","ai-analysis.agent.role.manager":"مشرف المناقشة","ai-analysis.agent.trader":"تاجر","ai-analysis.agent.role.trader":"استراتيجي تنفيذي","ai-analysis.agent.risky":"محلل ناشط","ai-analysis.agent.role.risky":"استراتيجية عدوانية","ai-analysis.agent.neutral":"محلل التوازن","ai-analysis.agent.role.neutral":"استراتيجية التوازن","ai-analysis.agent.safe":"محلل محافظ","ai-analysis.agent.role.safe":"استراتيجية محافظة","ai-analysis.agent.cro":"مدير مراقبة المخاطر (CRO)","ai-analysis.agent.role.cro":"سلطة اتخاذ القرار النهائي","ai-analysis.script.market":"جارٍ جلب بيانات OHLCV من البورصات الرئيسية...","ai-analysis.script.fundamental":"استخراج التقارير المالية الربع سنوية...","ai-analysis.script.technical":"تحليل المؤشرات الفنية وأنماط الرسم البياني.","ai-analysis.script.news":"متابعة الأخبار المالية العالمية...","ai-analysis.script.sentiment":"تحليل اتجاهات وسائل التواصل الاجتماعي...","ai-analysis.script.risk":"حساب التقلبات التاريخية...","invite.inviteLink":"رابط الدعوة","invite.copy":"انسخ الرابط","invite.copySuccess":"تم النسخ بنجاح!","invite.copyFailed":"فشل النسخ، يرجى النسخ يدويًا","invite.noInviteLink":"لم يتم إنشاء رابط الدعوة","invite.totalInvites":"الدعوات التراكمية","invite.totalReward":"المكافآت التراكمية","invite.rules":"قواعد الدعوة","invite.rule1":"في كل مرة تقوم فيها بدعوة صديق بنجاح للتسجيل، سوف تحصل على مكافأة","invite.rule2":"إذا أكمل الصديق المدعو المعاملة الأولى، فستحصل على مكافآت إضافية","invite.rule3":"سيتم إرسال مكافآت الدعوة مباشرة إلى حسابك","invite.inviteList":"قائمة الدعوة","invite.tasks":"مركز البعثة","invite.inviteeName":"المدعو","invite.inviteTime":"وقت الدعوة","invite.status":"الحالة","invite.reward":"مكافأة","invite.active":"نشط","invite.inactive":"لم يتم تفعيلها","invite.completed":"مكتمل","invite.claimed":"تم الاستلام","invite.pending":"ليتم الانتهاء منها","invite.goToTask":"لإكمال","invite.claimReward":"المطالبة بالمكافآت","invite.verify":"اكتمل التحقق","invite.verifySuccess":"تم التحقق بنجاح! اكتملت المهمة","invite.verifyNotCompleted":"المهمة لم تكتمل بعد، يرجى إكمال المهمة أولا","invite.verifyFailed":"فشل التحقق، يرجى المحاولة مرة أخرى في وقت لاحق","invite.claimSuccess":"تم استلام {reward} QDT بنجاح!","invite.claimFailed":"فشل التجميع، يرجى المحاولة مرة أخرى لاحقًا","invite.totalRecords":"{total} السجلات في المجموع","invite.task.twitter.title":"إعادة تغريد إلى X (تويتر)","invite.task.twitter.desc":"شارك تغريداتنا الرسمية على حساب X (Twitter) الخاص بك","invite.task.youtube.title":"تابع قناتنا على اليوتيوب","invite.task.youtube.desc":"اشترك وتابع قناتنا الرسمية على اليوتيوب","invite.task.telegram.title":"انضم إلى مجموعة تيليجرام","invite.task.telegram.desc":"انضم إلى مجموعة مجتمع Telegram الرسمية لدينا","invite.task.discord.title":"انضم إلى خادم Discord","invite.task.discord.desc":"انضم إلى خادم مجتمع Discord الخاص بنا",message:"-","layouts.usermenu.dialog.title":"معلومات","layouts.usermenu.dialog.content":"هل أنت متأكد أنك تريد تسجيل الخروج؟","layouts.userLayout.title":"ابحث عن الحقيقة في حالة عدم اليقين","dashboard.indicator.boundary.message":"Note: The indicator script only computes plots + buy/sell signals. Position sizing, risk, scaling, fees/slippage belong to execution config.","dashboard.indicator.boundary.indicatorRule":"Keep the script to buy/sell only (and set df['buy']/df['sell']). Do NOT implement position management, TP/SL, scaling in the script.","dashboard.indicator.boundary.backtestRule":"Rule: If a bar has a main signal (buy/sell → open/close/reverse), scaling in/out is skipped on the same bar.","dashboard.indicator.guide.title":"Python Indicator & Strategy Development Guide","dashboard.indicator.guide.intro":"This platform supports writing custom technical indicators and trading signals using Python. The system includes built-in pandas and numpy data analysis libraries. You can use standard DataFrame operations to process K-line data and draw charts or mark buy/sell signals.","dashboard.indicator.guide.section1.title":"1. Runtime Environment & Predefined Variables","dashboard.indicator.guide.section1.env":"Your code runs in a browser-based Python environment (Pyodide).","dashboard.indicator.guide.section1.libs":"Pre-installed Libraries","dashboard.indicator.guide.section1.libsDesc":"The following libraries are imported by default, no need to import again:","dashboard.indicator.guide.section1.libsList":"pandas (pd), numpy (np), math, json","dashboard.indicator.guide.section1.data":"Input Data: df","dashboard.indicator.guide.section1.dataDesc":"The system automatically converts current K-line data into a Pandas DataFrame object, variable name is df.","dashboard.indicator.guide.section1.dataColumns":"df contains the following columns (all float type):","dashboard.indicator.guide.section1.dataColumnsList":"time (timestamp, seconds), open, high, low, close, volume","dashboard.indicator.guide.section1.dataNote":"Data index is arranged from old to new (0 is the earliest data, last row is the latest data).","dashboard.indicator.guide.section1.dataIndex":"Important: df index is timestamp (DatetimeIndex), please preserve the index, avoid using .values which loses the index.","dashboard.indicator.guide.section2.title":"2. Parameter Definition","dashboard.indicator.guide.section2.desc":"You can define variables as parameters at the beginning of your code. The system will try to parse statements like variable = value as adjustable parameters.","dashboard.indicator.guide.section2.example":"Parameter Example","dashboard.indicator.guide.section2.exampleCode":"span = 20 or multiplier = 2.0","dashboard.indicator.guide.section3.title":"3. Backtest Signal Setup (Important!)","dashboard.indicator.guide.section3.desc":"If you want your indicator to support backtesting, you must set the following two columns in your code:","dashboard.indicator.guide.section3.backtestRequired":"Required for Backtesting:","dashboard.indicator.guide.section3.backtestBuySignal":"df['buy_signal'] - Boolean Series, True indicates buy signal","dashboard.indicator.guide.section3.backtestSellSignal":"df['sell_signal'] - Boolean Series, True indicates sell signal","dashboard.indicator.guide.section3.backtestExample":"Example:","dashboard.indicator.guide.section3.backtestExampleCode":"df['buy_signal'] = condition_buy
df['sell_signal'] = condition_sell","dashboard.indicator.guide.section3.backtestNote":"Note: Even if you only set output.signals for chart display, you must set these two columns to enable backtesting.","dashboard.indicator.guide.section4.title":"4. Output Requirements: output","dashboard.indicator.guide.section4.desc":"At the end of code execution, you must define a dictionary named output to tell the chart how to display results.","dashboard.indicator.guide.section4.fields":"The output dictionary contains the following fields:","dashboard.indicator.guide.section4.plots":"plots - For drawing lines (e.g., moving averages, RSI)","dashboard.indicator.guide.section4.signals":"signals - For marking buy/sell signals (e.g., arrows, labels)","dashboard.indicator.guide.section4.name":"name - Indicator name (optional)","dashboard.indicator.guide.section4.calculatedVars":"calculatedVars - Calculated variables (optional, for displaying additional information)","dashboard.indicator.guide.section5.title":"5. Plot Configuration (Plots)","dashboard.indicator.guide.section5.desc":"Each object in the plots list represents a line.","dashboard.indicator.guide.section5.table.field":"Field","dashboard.indicator.guide.section5.table.type":"Type","dashboard.indicator.guide.section5.table.required":"Required","dashboard.indicator.guide.section5.table.requiredYes":"Yes","dashboard.indicator.guide.section5.table.requiredNo":"No","dashboard.indicator.guide.section5.table.desc":"Description","dashboard.indicator.guide.section5.table.name":"The name of the indicator line, displayed in the legend","dashboard.indicator.guide.section5.table.data":"Data list, length must match the number of rows in df. Recommended to use series.tolist()","dashboard.indicator.guide.section5.table.color":"Line color (Hex format, e.g. '#ff0000'). If not filled, the system will automatically assign","dashboard.indicator.guide.section5.table.typeDesc":"Chart type, default is 'line'","dashboard.indicator.guide.section5.table.overlay":"Important. True means display on main chart (with K-line), False means display on sub-chart (independent area)","dashboard.indicator.guide.section5.example":"Example: Draw Simple Moving Average (SMA)","dashboard.indicator.guide.section5.exampleCalc":"Calculate SMA","dashboard.indicator.guide.section5.exampleOutput":"Construct Output","dashboard.indicator.guide.section5.exampleOverlay":"Display on main chart","dashboard.indicator.guide.section6.title":"6. Signal Markers (Signals)","dashboard.indicator.guide.section6.desc":"signals are used to mark buy/sell points on specific K-lines through icons or text. Note: This is only for chart display. The backtest system uses df['buy_signal'] and df['sell_signal'].","dashboard.indicator.guide.section6.table.type":"Signal type: 'buy' (buy, marked below K-line) or 'sell' (sell, marked above K-line)","dashboard.indicator.guide.section6.table.data":"Signal data list. Fill price value at signal positions, fill None (or np.nan) at non-signal positions","dashboard.indicator.guide.section6.table.text":'Text displayed on the label (e.g. "B", "S", "Buy", "Sell")',"dashboard.indicator.guide.section6.table.color":"Marker color","dashboard.indicator.guide.section6.hint":"The system automatically handles positioning.","dashboard.indicator.guide.section6.buy":"Markers will be automatically positioned below the Low of the current K-line","dashboard.indicator.guide.section6.sell":"Markers will be automatically positioned above the High of the current K-line","dashboard.indicator.guide.section6.example":"Example: Draw Buy/Sell Signals","dashboard.indicator.guide.section6.exampleInit":"Initialize signal list, fill all with None","dashboard.indicator.guide.section6.exampleLogic":"Simple logic: mark buy when close price is greater than open price","dashboard.indicator.guide.section6.exampleNote":"In actual logic, please use loops or vectorized operations","dashboard.indicator.guide.section6.examplePrice":"Record price","dashboard.indicator.guide.section6.exampleText":"Buy","dashboard.indicator.guide.section7.title":"7. Complete Code Examples","dashboard.indicator.guide.section7.exampleA":"Example A: Dual EMA Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleACode":'# 1. Calculate indicators
df[\'ema_fast\'] = df[\'close\'].ewm(span=5, adjust=False).mean()
df[\'ema_slow\'] = df[\'close\'].ewm(span=13, adjust=False).mean()

# 2. Calculate crossover signals
cross_up = (df[\'ema_fast\'] > df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) <= df[\'ema_slow\'].shift(1))
cross_down = (df[\'ema_fast\'] < df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) >= df[\'ema_slow\'].shift(1))

# 3. 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = cross_up
df[\'close_long\'] = cross_down
df[\'open_short\'] = cross_down
df[\'close_short\'] = cross_up

# 4. Generate signal data for chart display
buy_signals = [df[\'low\'].iloc[i] * 0.995 if cross_up.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if cross_down.iloc[i] else None for i in range(len(df))]

# 5. Build output
output = {
"name": "Dual EMA Strategy",
"plots": [
{"name": "EMA 5", "data": df[\'ema_fast\'].tolist(), "color": "#FF6B6B", "overlay": True},
{"name": "EMA 13", "data": df[\'ema_slow\'].tolist(), "color": "#4ECDC4", "overlay": True}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section7.exampleB":"Example B: Bollinger Bands - Chart Display Only","dashboard.indicator.guide.section7.exampleBCode":'# Calculate Bollinger Bands (chart display only, no backtesting)
length = 20
mult = 2.0
df[\'sma\'] = df[\'close\'].rolling(length).mean()
df[\'std\'] = df[\'close\'].rolling(length).std()
df[\'upper\'] = df[\'sma\'] + mult * df[\'std\']
df[\'lower\'] = df[\'sma\'] - mult * df[\'std\']

output = {
"name": "Bollinger Bands",
"plots": [
{"name": "Upper", "data": df[\'upper\'].tolist(), "color": "#FF5252", "overlay": True},
{"name": "Middle", "data": df[\'sma\'].tolist(), "color": "#2196F3", "overlay": True},
{"name": "Lower", "data": df[\'lower\'].tolist(), "color": "#00E676", "overlay": True}
]
}',"dashboard.indicator.guide.section7.exampleC":"Example C: RSI Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleCCode":'# Calculate RSI
delta = df[\'close\'].diff()
up = delta.clip(lower=0)
down = -1 * delta.clip(upper=0)
ema_up = up.ewm(com=13, adjust=False).mean()
ema_down = down.ewm(com=13, adjust=False).mean()
rs = ema_up / ema_down
df[\'rsi\'] = 100 - (100 / (1 + rs))

# Generate trading signals
buy_condition = df[\'rsi\'] < 30 # Oversold buy
sell_condition = df[\'rsi\'] > 70 # Overbought sell

# 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = buy_condition
df[\'close_long\'] = sell_condition
df[\'open_short\'] = sell_condition
df[\'close_short\'] = buy_condition

# Generate chart signals
buy_signals = [df[\'low\'].iloc[i] * 0.995 if buy_condition.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if sell_condition.iloc[i] else None for i in range(len(df))]

output = {
"name": "RSI Strategy",
"plots": [
{"name": "RSI", "data": df[\'rsi\'].tolist(), "color": "#9C27B0", "overlay": False},
{"name": "Overbought", "data": [70] * len(df), "color": "#FF5252", "style": "dashed", "overlay": False},
{"name": "Oversold", "data": [30] * len(df), "color": "#00E676", "style": "dashed", "overlay": False}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section6.param":"Parameters","dashboard.indicator.guide.section6.calc":"Calculate","dashboard.indicator.guide.section6.output":"Output","dashboard.indicator.guide.section6.generate":"Generate signal data (initialize with None)","dashboard.indicator.guide.section6.subchart":"Display on sub-chart","dashboard.indicator.guide.section8.title":"8. Frequently Asked Questions (FAQ)","dashboard.indicator.guide.section8.q1":"Q: Why can't my indicator be backtested?","dashboard.indicator.guide.section8.a1":"A: The backtest system requires NEW signal columns: df['open_long'], df['close_long'], df['open_short'], df['close_short'] (boolean). Even if you set output.signals for chart display, you must set these columns to enable backtesting.","dashboard.indicator.guide.section8.q2":"Q: Data length mismatch?","dashboard.indicator.guide.section8.a2":"A: The data list in plots and signals must have exactly the same length as the K-line data. If you use df['xxx'].tolist(), there is usually no problem.","dashboard.indicator.guide.section8.q3":"Q: How to handle NaN (empty values)?","dashboard.indicator.guide.section8.a3":"A: Pandas calculations (such as rolling mean) will produce NaN at the beginning. The system will automatically convert NaN to null for chart rendering. You don't need to manually clean it, but if you need specific logic, you can use df.fillna(0) or other methods.","dashboard.indicator.guide.section8.q4":"Q: Index mismatch causing all signals to be NaN?","dashboard.indicator.guide.section8.a4":"A: Please ensure you preserve the original df index (timestamp). Avoid using .values to create new Series. Use columns directly like df['close'] for operations.","dashboard.indicator.guide.section8.q5":"Q: Can I use third-party network libraries?","dashboard.indicator.guide.section8.a5":"A: No. The runtime environment is a browser sandbox and cannot use libraries like requests to request external APIs, nor can it install additional pip packages. Limited to built-in libraries such as pandas, numpy, math, json.","dashboard.indicator.guide.section8.q6":"Q: How to debug code?","dashboard.indicator.guide.section8.a6":"A: If the chart does not display indicators, it is usually because the Python code has an error. Please check for syntax errors or array index out of bounds. It is recommended to debug the algorithm logic in a local Python environment first, then copy it in.","dashboard.indicator.guide.section8.q7":"Q: Backtest shows 0 signals?","dashboard.indicator.guide.section8.a7":"A: Please check the data type of df['open_long']/df['close_long']/df['open_short']/df['close_short']. They should be boolean (True/False), not numeric. Use condition.fillna(False).astype(bool) to ensure correct type.","dashboard.indicator.backtest.commissionHint":"Charged on notional value (incl. leverage) per trade; both entry & exit are deducted from balance.","dashboard.indicator.backtest.historyTitle":"Backtest History","dashboard.indicator.backtest.historyRefresh":"Refresh","dashboard.indicator.backtest.historyView":"View","dashboard.indicator.backtest.historyNoData":"No backtest history","dashboard.indicator.backtest.historyUseCurrent":"Only current symbol/timeframe","dashboard.indicator.backtest.historyFilterSymbol":"Symbol","dashboard.indicator.backtest.historyFilterTimeframe":"Timeframe","dashboard.indicator.backtest.historyApply":"Apply filters","dashboard.indicator.backtest.historyAIAnalyze":"AI Analyze","dashboard.indicator.backtest.historyAIAnalyzeTitle":"AI Suggestions","dashboard.indicator.backtest.historyNoAIResult":"No AI analysis result","dashboard.indicator.backtest.historyRunId":"Run ID","dashboard.indicator.backtest.historyCreatedAt":"Time","dashboard.indicator.backtest.historyRange":"Range","dashboard.indicator.backtest.historyStatus":"Status","dashboard.indicator.backtest.historyStatusSuccess":"Success","dashboard.indicator.backtest.historyStatusFailed":"Failed","dashboard.indicator.backtest.historyActions":"Actions","dashboard.indicator.backtest.hint.entryPctMax":"Max entry: {maxPct}% (reserve budget for future scale-ins)","trading-assistant.exchange.ipWhitelistTip":"Please add the following IPs to the whitelist in your exchange API settings:","signal-robot.title":"Signal Robot Console","signal-robot.createBot":"Create New Bot","signal-robot.search.nameOrSymbol":"Name/Symbol","signal-robot.search.placeholder":"Search bot name or symbol","signal-robot.search.status":"Status","signal-robot.search.statusAll":"All","signal-robot.search.statusRunning":"Running","signal-robot.search.statusPaused":"Paused","signal-robot.search.query":"Query","signal-robot.search.reset":"Reset","signal-robot.table.botName":"Bot Name","signal-robot.table.symbolTimeframe":"Symbol/Timeframe","signal-robot.table.triggerStrategy":"Trigger Strategy","signal-robot.table.notificationChannels":"Notification Channels","signal-robot.table.status":"Status","signal-robot.table.action":"Action","signal-robot.table.triggerConditions":"{count} trigger conditions","signal-robot.table.monitoring":"Monitoring","signal-robot.table.paused":"Paused","signal-robot.table.edit":"Edit","signal-robot.table.pause":"Pause","signal-robot.table.start":"Start","signal-robot.table.delete":"Delete","signal-robot.table.deleteConfirm":"Are you sure you want to delete this bot?","signal-robot.table.deleteSuccess":"Deleted successfully","signal-robot.table.startSuccess":"Bot started","signal-robot.table.pauseSuccess":"Bot paused","signal-robot.channel.telegram":"Telegram","signal-robot.channel.discord":"Discord","signal-robot.channel.email":"Email","signal-robot.channel.webhook":"Webhook","signal-robot.channel.browser":"Browser Push","signal-robot.modal.createTitle":"Create New Signal Robot","signal-robot.modal.editTitle":"Edit Signal Robot","signal-robot.modal.step.basic":"Basic Settings","signal-robot.modal.step.entry":"Entry Strategy","signal-robot.modal.step.position":"Position Management","signal-robot.modal.step.risk":"Risk Control","signal-robot.modal.step.notify":"Notification Config","signal-robot.modal.prev":"Previous","signal-robot.modal.next":"Next","signal-robot.modal.preview":"Preview Backtest","signal-robot.modal.complete":"Complete & Run","signal-robot.modal.saveSuccess":"Saved successfully","signal-robot.modal.previewDeveloping":"Preview feature is under development...","signal-robot.modal.basicInfoRequired":"Please complete basic information","signal-robot.basic.alert":"Set basic information for the bot","signal-robot.basic.title":"Basic Information","signal-robot.basic.botName":"Bot Name","signal-robot.basic.botNamePlaceholder":"e.g.: BTC SuperTrend Strategy","signal-robot.basic.symbol":"Trading Pair","signal-robot.basic.symbolPlaceholder":"Select from watchlist","signal-robot.basic.noWatchlist":"No watchlist items, please add in market page first","signal-robot.basic.timeframe":"K-Line Period","signal-robot.basic.timeframe15m":"15 Minutes","signal-robot.basic.timeframe30m":"30 Minutes","signal-robot.basic.timeframe1h":"1 Hour","signal-robot.basic.timeframe4h":"4 Hours","signal-robot.basic.timeframe1d":"1 Day","signal-robot.basic.autoNameSuggestion":"{symbol} Signal Robot","signal-robot.entry.alert":"Trigger entry signal when all conditions below are met","signal-robot.entry.condition":"Condition {index}","signal-robot.entry.indicator":"Indicator","signal-robot.entry.indicatorSupertrend":"SuperTrend","signal-robot.entry.indicatorEma":"EMA (Exponential Moving Average)","signal-robot.entry.indicatorRsi":"RSI (Relative Strength Index)","signal-robot.entry.indicatorMacd":"MACD","signal-robot.entry.indicatorBollinger":"Bollinger Bands","signal-robot.entry.atrPeriod":"ATR Period","signal-robot.entry.multiplier":"Multiplier","signal-robot.entry.triggerSignal":"Trigger Signal","signal-robot.entry.signalTrendBullish":"Trend Bullish","signal-robot.entry.signalTrendBearish":"Trend Bearish","signal-robot.entry.signalIsUptrend":"Is Uptrend","signal-robot.entry.signalIsDowntrend":"Is Downtrend","signal-robot.entry.period":"Period","signal-robot.entry.compareCondition":"Compare Condition","signal-robot.entry.priceAbove":"Price > EMA (Price Above)","signal-robot.entry.priceBelow":"Price < EMA (Price Below)","signal-robot.entry.crossUp":"Price Crosses Above EMA (Golden Cross)","signal-robot.entry.crossDown":"Price Crosses Below EMA (Death Cross)","signal-robot.entry.compare":"Compare","signal-robot.entry.greaterThan":"Greater Than","signal-robot.entry.lessThan":"Less Than","signal-robot.entry.crossUpShort":"Cross Up","signal-robot.entry.crossDownShort":"Cross Down","signal-robot.entry.threshold":"Threshold","signal-robot.entry.selectIndicator":"Please select an indicator to configure parameters","signal-robot.entry.addCondition":"Add Condition","signal-robot.position.alert":"Configure initial position size, leverage and pyramiding rules","signal-robot.position.basicTitle":"Basic Position Management","signal-robot.position.initialSize":"Initial Size (Capital %)","signal-robot.position.initialSizeHint":"Recommended 5% - 20%","signal-robot.position.leverage":"Leverage","signal-robot.position.leverageHint":"Please ensure your exchange account supports this leverage","signal-robot.position.maxPyramiding":"Max Pyramiding Times","signal-robot.position.maxPyramidingHint":"0 means no pyramiding","signal-robot.position.pyramidingTitle":"Pyramiding Rules","signal-robot.position.pyramidingEnabled":"Enabled","signal-robot.position.pyramidingDisabled":"Disabled","signal-robot.position.pyramidingCondition":"Pyramiding Trigger Condition","signal-robot.position.priceRisePct":"Price Rises (Long) / Falls (Short)","signal-robot.position.profitPct":"Profit Reaches","signal-robot.position.triggerThreshold":"Trigger Threshold (%)","signal-robot.position.triggerThresholdHint":"e.g. 3%: add position once every 3% rise","signal-robot.position.addSize":"Single Add Size (Capital %)","signal-robot.position.pyramidingDisabledHint":"Pyramiding disabled, only initial position will be executed","signal-robot.risk.alert":"Configure take profit, stop loss and exit rules","signal-robot.risk.stopLossTitle":"Stop Loss","signal-robot.risk.stopLossEnabled":"Enabled","signal-robot.risk.stopLossDisabled":"Disabled","signal-robot.risk.stopLossType":"Stop Loss Type","signal-robot.risk.stopLossFixedPct":"Fixed Percentage","signal-robot.risk.stopLossAtrMultiplier":"ATR Multiplier","signal-robot.risk.stopLossValue":"Value","signal-robot.risk.stopLossFixedHint":"e.g. 2%: stop loss when loss reaches 2%","signal-robot.risk.stopLossAtrHint":"e.g. 2.0: stop loss when price touches ATR*2.0","signal-robot.risk.stopLossDisabledHint":"Stop loss disabled (high risk)","signal-robot.risk.trailingStopTitle":"Trailing Stop","signal-robot.risk.activationProfit":"Activation Profit (%)","signal-robot.risk.activationProfitHint":"Start trailing when profit reaches this level","signal-robot.risk.callbackPct":"Callback (%)","signal-robot.risk.callbackPctHint":"Trigger take profit when price falls from peak by this percentage","signal-robot.risk.trailingStopDisabledHint":"Trailing stop disabled","signal-robot.risk.otherExitTitle":"Other Exit Rules","signal-robot.risk.signalExit":"Allow Signal Exit","signal-robot.risk.signalExitHint":"Close position immediately when reverse signal appears (e.g. close long when short signal appears)","signal-robot.notify.alert":"Configure notification methods when signal is triggered","signal-robot.notify.channelTitle":"Notification Channels","signal-robot.notify.discordWebhook":"Discord Webhook","signal-robot.notify.genericWebhook":"Generic Webhook","signal-robot.notify.webhookUrl":"Webhook URL","signal-robot.notify.webhookUrlPlaceholder":"https://example.com/webhook","signal-robot.notify.discordUrl":"Discord URL","signal-robot.notify.discordUrlPlaceholder":"https://discord.com/api/webhooks/...","signal-robot.operator.greaterThan":"Greater Than","signal-robot.operator.lessThan":"Less Than","signal-robot.operator.equal":"Equal","signal-robot.operator.goldenCross":"Golden Cross","signal-robot.operator.deathCross":"Death Cross","signal-robot.operator.increaseBy":"Increase By","signal-robot.operator.decreaseBy":"Decrease By","signal-robot.indicator.price":"Price","signal-robot.indicator.rsi":"RSI","signal-robot.indicator.kdjK":"KDJ(K)","signal-robot.indicator.kdjJ":"KDJ(J)","signal-robot.indicator.macd":"MACD","signal-robot.indicator.macdHist":"MACD Histogram","signal-robot.indicator.bollingerUp":"Bollinger Upper","signal-robot.indicator.bollingerLow":"Bollinger Lower","signal-robot.indicator.volume":"Volume","signal-robot.indicator.changePct1h":"1H Change %","signal-robot.indicator.changePct24h":"24H Change %","signal-robot.indicator.signalLine":"Signal Line","settings.group.agent_memory":"الذاكرة/الانعكاس","settings.group.reflection_worker":"عامل التحقق التلقائي للانعكاس","settings.field.ENABLE_AGENT_MEMORY":"تمكين ذاكرة الوكيل","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"تمكين الاسترجاع المتجهي (محلي)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"بُعد التضمين","settings.field.AGENT_MEMORY_TOP_K":"عدد الاسترجاع Top-K","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"حجم نافذة المرشحين","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"نصف عمر تلاشي الزمن (أيام)","settings.field.AGENT_MEMORY_W_SIM":"وزن التشابه","settings.field.AGENT_MEMORY_W_RECENCY":"وزن الحداثة","settings.field.AGENT_MEMORY_W_RETURNS":"وزن العائد","settings.field.ENABLE_REFLECTION_WORKER":"تمكين التحقق التلقائي","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"فاصل التحقق (ثانية)","profile.notifications.title":"إعدادات الإشعارات","profile.notifications.hint":"قم بتكوين طرق الإشعارات الافتراضية، سيتم استخدامها تلقائياً عند إنشاء مراقبة الأصول والتنبيهات","profile.notifications.defaultChannels":"قنوات الإشعارات الافتراضية","profile.notifications.browser":"إشعار داخل التطبيق","profile.notifications.email":"البريد الإلكتروني","profile.notifications.phone":"رسالة نصية","profile.notifications.telegramBotToken":"Telegram Bot Token","profile.notifications.telegramBotTokenPlaceholder":"أدخل Telegram Bot Token الخاص بك","profile.notifications.telegramBotTokenHint":"أنشئ بوت عبر @BotFather للحصول على Token","profile.notifications.telegramChatId":"Telegram Chat ID","profile.notifications.telegramPlaceholder":"أدخل Telegram Chat ID الخاص بك (مثال: 123456789)","profile.notifications.telegramHint":"أرسل /start إلى @userinfobot للحصول على Chat ID","profile.notifications.notifyEmail":"بريد الإشعارات","profile.notifications.emailPlaceholder":"عنوان البريد الإلكتروني لاستلام الإشعارات","profile.notifications.emailHint":"يستخدم بريد الحساب بشكل افتراضي، يمكنك تعيين بريد آخر","profile.notifications.phonePlaceholder":"أدخل رقم الهاتف (مثال: +966501234567)","profile.notifications.phoneHint":"يحتاج المسؤول إلى تكوين خدمة Twilio","profile.notifications.discordWebhook":"Discord Webhook","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"أنشئ Webhook في إعدادات خادم Discord","profile.notifications.webhookUrl":"Webhook URL","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"عنوان Webhook مخصص، يرسل الإشعارات عبر POST JSON","profile.notifications.webhookToken":"Webhook Token (اختياري)","profile.notifications.webhookTokenPlaceholder":"Bearer Token للتحقق من الطلب","profile.notifications.webhookTokenHint":"يُرسل كـ Authorization: Bearer Token إلى Webhook","profile.notifications.testBtn":"إرسال إشعار تجريبي","profile.notifications.saveSuccess":"تم حفظ إعدادات الإشعارات بنجاح","profile.notifications.selectChannel":"الرجاء اختيار قناة إشعار واحدة على الأقل","profile.notifications.fillTelegramToken":"الرجاء إدخال Telegram Bot Token","profile.notifications.fillTelegram":"الرجاء إدخال Telegram Chat ID","profile.notifications.fillEmail":"الرجاء إدخال بريد الإشعارات","profile.notifications.testSent":"تم إرسال الإشعار التجريبي، يرجى التحقق من قنوات الإشعارات"},f=(0,e.A)((0,e.A)({},p),y)}}]); \ No newline at end of file diff --git a/frontend/dist/js/lang-ar-SA-legacy.5fdad08d.js b/frontend/dist/js/lang-ar-SA-legacy.5fdad08d.js new file mode 100644 index 0000000..a2bcdd9 --- /dev/null +++ b/frontend/dist/js/lang-ar-SA-legacy.5fdad08d.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[618],{217:function(a,t,i){i.d(t,{default:function(){return f}});var e=i(76338),s={items_per_page:"/ الصفحة",jump_to:"الذهاب إلى",jump_to_confirm:"تأكيد",page:"",prev_page:"الصفحة السابقة",next_page:"الصفحة التالية",prev_5:"خمس صفحات سابقة",next_5:"خمس صفحات تالية",prev_3:"ثلاث صفحات سابقة",next_3:"ثلاث صفحات تالية"},o=i(85505),r={today:"اليوم",now:"الأن",backToToday:"العودة إلى اليوم",ok:"تأكيد",clear:"مسح",month:"الشهر",year:"السنة",timeSelect:"اختيار الوقت",dateSelect:"اختيار التاريخ",monthSelect:"اختيار الشهر",yearSelect:"اختيار السنة",decadeSelect:"اختيار العقد",yearFormat:"YYYY",dateFormat:"M/D/YYYY",dayFormat:"D",dateTimeFormat:"M/D/YYYY HH:mm:ss",monthBeforeYear:!0,previousMonth:"الشهر السابق (PageUp)",nextMonth:"الشهر التالى(PageDown)",previousYear:"العام السابق (Control + left)",nextYear:"العام التالى (Control + right)",previousDecade:"العقد السابق",nextDecade:"العقد التالى",previousCentury:"القرن السابق",nextCentury:"القرن التالى"},n={placeholder:"اختيار الوقت"},d=n,l={lang:(0,o.A)({placeholder:"اختيار التاريخ",rangePlaceholder:["البداية","النهاية"]},r),timePickerLocale:(0,o.A)({},d),dateFormat:"DD-MM-YYYY",monthFormat:"MM-YYYY",dateTimeFormat:"DD-MM-YYYY HH:mm:ss",weekFormat:"wo-YYYY"},c=l,g=c,b={locale:"ar",Pagination:s,DatePicker:c,TimePicker:d,Calendar:g,Table:{filterTitle:"الفلاتر",filterConfirm:"تأكيد",filterReset:"إعادة ضبط",selectAll:"اختيار الكل",selectInvert:"إلغاء الاختيار"},Modal:{okText:"تأكيد",cancelText:"إلغاء",justOkText:"تأكيد"},Popconfirm:{okText:"تأكيد",cancelText:"إلغاء"},Transfer:{searchPlaceholder:"ابحث هنا",itemUnit:"عنصر",itemsUnit:"عناصر"},Upload:{uploading:"جاري الرفع...",removeFile:"احذف الملف",uploadError:"مشكلة فى الرفع",previewFile:"استعرض الملف",downloadFile:"تحميل الملف"},Empty:{description:"لا توجد بيانات"}},m=b,h=i(61509),u=i.n(h),p={antLocale:m,momentName:"ar",momentLocale:u()},y={submit:"إرسال",save:"حفظ","submit.ok":"تم التقديم بنجاح","save.ok":"تم الحفظ بنجاح","menu.welcome":"مرحبا بكم","menu.home":"الصفحة الرئيسية","menu.dashboard":"لوحة القيادة","menu.dashboard.indicator":"تحليل المؤشر","menu.dashboard.community":"مجتمع المؤشرات","menu.dashboard.analysis":"تحليل الذكاء الاصطناعي","menu.dashboard.tradingAssistant":"مساعد التداول","menu.dashboard.aiTradingAssistant":"مساعد التداول بالذكاء الاصطناعي","menu.dashboard.signalRobot":"روبوت الإشارة","menu.dashboard.monitor":"صفحة المراقبة","menu.dashboard.workplace":"طاولة العمل","menu.form":"صفحة النموذج","menu.form.basic-form":"الشكل الأساسي","menu.form.step-form":"شكل خطوة بخطوة","menu.form.step-form.info":"نموذج خطوة بخطوة (املأ معلومات النقل)","menu.form.step-form.confirm":"نموذج خطوة بخطوة (تأكيد معلومات النقل)","menu.form.step-form.result":"نموذج خطوة بخطوة (كامل)","menu.form.advanced-form":"نماذج متقدمة","menu.list":"صفحة القائمة","menu.list.table-list":"نموذج الاستفسار","menu.list.basic-list":"القائمة القياسية","menu.list.card-list":"قائمة البطاقات","menu.list.search-list":"قائمة البحث","menu.list.search-list.articles":"قائمة البحث (المقالات)","menu.list.search-list.projects":"قائمة البحث (المشروع)","menu.list.search-list.applications":"قائمة البحث (التطبيق)","menu.profile":"صفحة التفاصيل","menu.profile.basic":"صفحة التفاصيل الأساسية","menu.profile.advanced":"صفحة التفاصيل المتقدمة","menu.result":"صفحة النتائج","menu.result.success":"صفحة النجاح","menu.result.fail":"صفحة الفشل","menu.exception":"صفحة الاستثناء","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"خطأ الزناد","menu.account":"الصفحة الشخصية","menu.account.center":"مركز شخصي","menu.account.settings":"الإعدادات الشخصية","menu.account.trigger":"خطأ الزناد","menu.account.logout":"تسجيل الخروج","menu.wallet":"محفظتي","menu.docs":"مركز الوثائق","menu.docs.detail":"تفاصيل الوثيقة","menu.header.refreshPage":"تحديث الصفحة","menu.invite.friends":"دعوة الأصدقاء","app.setting.pagestyle":"إعدادات النمط الشاملة","app.setting.pagestyle.light":"نمط القائمة مشرق","app.setting.pagestyle.dark":"نمط القائمة المظلمة","app.setting.pagestyle.realdark":"الوضع المظلم","app.setting.themecolor":"لون الموضوع","app.setting.navigationmode":"وضع التنقل","app.setting.sidemenu.nav":"التنقل في الشريط الجانبي","app.setting.topmenu.nav":"التنقل في الشريط العلوي","app.setting.content-width":"عرض منطقة المحتوى","app.setting.content-width.tooltip":"يكون هذا الإعداد فعالاً فقط عندما يكون [Top Bar Navigation]","app.setting.content-width.fixed":"ثابت","app.setting.content-width.fluid":"البث","app.setting.fixedheader":"رأس ثابت","app.setting.fixedheader.tooltip":"شكلي عندما رأس ثابت","app.setting.autoHideHeader":"إخفاء الرأس عند التمرير","app.setting.fixedsidebar":"القائمة الجانبية الثابتة","app.setting.sidemenu":"تخطيط القائمة الجانبية","app.setting.topmenu":"تخطيط القائمة العلوية","app.setting.othersettings":"إعدادات أخرى","app.setting.weakmode":"وضع ضعف اللون","app.setting.multitab":"وضع علامات التبويب المتعددة","app.setting.copy":"إعدادات النسخ","app.setting.loading":"جارٍ تحميل الموضوع","app.setting.copyinfo":"انسخ الإعدادات بنجاح src/config/defaultSettings.js","app.setting.copy.success":"اكتمل النسخ","app.setting.copy.fail":"فشل النسخ","app.setting.theme.switching":"تغيير الموضوع!","app.setting.production.hint":"يتم استخدام شريط التكوين فقط للمعاينة في بيئة التطوير ولن يتم عرضه في بيئة الإنتاج. يرجى نسخ وتعديل ملف التكوين يدويا.","app.setting.themecolor.daybreak":"الأزرق الداكن (افتراضي)","app.setting.themecolor.dust":"الغسق","app.setting.themecolor.volcano":"بركان","app.setting.themecolor.sunset":"غروب الشمس","app.setting.themecolor.cyan":"مينغكينغ","app.setting.themecolor.green":"أورورا الخضراء","app.setting.themecolor.geekblue":"المهوس الأزرق","app.setting.themecolor.purple":"جيانغ زي","app.setting.tooltip":"إعدادات الصفحة","user.login.userName":"اسم المستخدم","user.login.password":"كلمة المرور","user.login.username.placeholder":"الحساب: المشرف","user.login.password.placeholder":"كلمة المرور: admin أو ant.design","user.login.message-invalid-credentials":"فشل تسجيل الدخول، يرجى التحقق من البريد الإلكتروني الخاص بك ورمز التحقق","user.login.message-invalid-verification-code":"خطأ في رمز التحقق","user.login.tab-login-credentials":"تسجيل الدخول بكلمة مرور الحساب","user.login.tab-login-email":"تسجيل الدخول بالبريد الإلكتروني","user.login.tab-login-mobile":"تسجيل الدخول برقم الهاتف المحمول","user.login.captcha.placeholder":"الرجاء إدخال رمز التحقق الرسومي","user.login.mobile.placeholder":"رقم الهاتف المحمول","user.login.mobile.verification-code.placeholder":"رمز التحقق","user.login.email.placeholder":"الرجاء إدخال عنوان البريد الإلكتروني الخاص بك","user.login.email.verification-code.placeholder":"الرجاء إدخال رمز التحقق","user.login.email.sending":"جاري إرسال رمز التحقق...","user.login.email.send-success-title":"نصائح","user.login.email.send-success":"تم إرسال رمز التحقق بنجاح، يرجى التحقق من بريدك الإلكتروني","user.login.sms.send-success":"تم إرسال رمز التحقق بنجاح، يرجى التحقق من الرسالة النصية","user.login.remember-me":"تسجيل الدخول التلقائي","user.login.forgot-password":"نسيت كلمة المرور","user.login.sign-in-with":"طرق تسجيل الدخول الأخرى","user.login.signup":"تسجيل حساب","user.login.login":"تسجيل الدخول","user.register.register":"سجل","user.register.email.placeholder":"البريد الإلكتروني","user.register.password.placeholder":"الرجاء إدخال 6 أحرف على الأقل. يرجى عدم استخدام كلمات المرور التي يمكن تخمينها بسهولة.","user.register.password.popover-message":"الرجاء إدخال 6 أحرف على الأقل. يرجى عدم استخدام كلمات المرور التي يمكن تخمينها بسهولة.","user.register.confirm-password.placeholder":"تأكيد كلمة المرور","user.register.get-verification-code":"الحصول على رمز التحقق","user.register.sign-in":"قم بتسجيل الدخول باستخدام حساب موجود","user.register-result.msg":"حسابك: {email} تم التسجيل بنجاح","user.register-result.activation-email":"تم إرسال رسالة التفعيل إلى صندوق البريد الخاص بك وهي صالحة لمدة 24 ساعة. يرجى تسجيل الدخول إلى بريدك الإلكتروني على الفور والنقر على الرابط الموجود في البريد الإلكتروني لتفعيل حسابك.","user.register-result.back-home":"العودة إلى الصفحة الرئيسية","user.register-result.view-mailbox":"تحقق من صندوق البريد الخاص بك","user.email.required":"الرجاء إدخال عنوان البريد الإلكتروني الخاص بك!","user.email.wrong-format":"تنسيق عنوان البريد الإلكتروني خاطئ!","user.userName.required":"الرجاء إدخال اسم حسابك أو عنوان البريد الإلكتروني الخاص بك","user.password.required":"الرجاء إدخال كلمة المرور الخاصة بك!","user.password.twice.msg":"كلمات المرور التي تم إدخالها مرتين غير متطابقة!","user.password.strength.msg":"كلمة المرور ليست قوية بما فيه الكفاية","user.password.strength.strong":"القوة : قوية","user.password.strength.medium":"القوة: متوسطة","user.password.strength.low":"القوة: منخفضة","user.password.strength.short":"القوة : قصيرة جداً","user.confirm-password.required":"الرجاء تأكيد كلمة المرور الخاصة بك!","user.phone-number.required":"الرجاء إدخال رقم الهاتف المحمول الصحيح","user.phone-number.wrong-format":"تنسيق رقم الهاتف المحمول خاطئ!","user.verification-code.required":"الرجاء إدخال رمز التحقق!","user.captcha.required":"الرجاء إدخال رمز التحقق الرسومي!","user.login.infos":"QuantDinger هي أداة مساعدة لتحليل الأسهم متعددة الوكلاء تعمل بالذكاء الاصطناعي ولا تتمتع بمؤهلات استشارية في مجال الاستثمار في الأوراق المالية. يتم إنشاء جميع نتائج التحليل والدرجات والآراء المرجعية في المنصة تلقائيًا بواسطة الذكاء الاصطناعي استنادًا إلى البيانات التاريخية وتستخدم فقط للتعلم والبحث والتبادل الفني، ولا تشكل أي نصيحة استثمارية أو أساس لصنع القرار. ينطوي الاستثمار في الأسهم على مخاطر مختلفة مثل مخاطر السوق، ومخاطر السيولة، ومخاطر السياسة، وما إلى ذلك، مما قد يؤدي إلى خسارة رأس المال. يجب على المستخدمين اتخاذ قرارات مستقلة بناءً على قدرتهم على تحمل المخاطر، ويجب أن يتحمل المستخدم أي سلوك استثماري وعواقب تنشأ عن استخدام هذه الأداة. السوق محفوف بالمخاطر والاستثمار يحتاج إلى الحذر.","user.login.tab-login-web3":"تسجيل الدخول إلى Web3","user.login.web3.tip":"تسجيل الدخول بالتوقيع باستخدام المحفظة","user.login.web3.connect":"ربط المحفظة وتسجيل الدخول","user.login.web3.no-wallet":"لم يتم الكشف عن المحفظة","user.login.web3.no-address":"لم يتم الحصول على عنوان المحفظة","user.login.web3.nonce-failed":"فشل الحصول على رقم عشوائي","user.login.web3.verify-failed":"فشل التحقق من التوقيع","user.login.web3.success":"تم تسجيل الدخول بنجاح","user.login.web3.failed":"فشل تسجيل الدخول إلى المحفظة","nav.no_wallet":"لم يتم الكشف عن المحفظة","nav.copy":"نسخ","nav.copy_success":"تم النسخ بنجاح","user.login.oauth.google":"قم بتسجيل الدخول باستخدام جوجل","user.login.oauth.github":"قم بتسجيل الدخول باستخدام جيثب","user.login.oauth.loading":"جارٍ إعادة التوجيه إلى صفحة التفويض...","user.login.oauth.failed":"فشل تسجيل الدخول باستخدام OAuth","user.login.oauth.get-url-failed":"فشل الحصول على رابط الترخيص","user.login.subtitle":"رؤى كمية مدفوعة في الأسواق العالمية","user.login.legal.title":"إخلاء المسؤولية القانونية","user.login.legal.view":"عرض إخلاء المسؤولية القانونية","user.login.legal.collapse":"طي إخلاء المسؤولية القانونية","user.login.legal.agree":"لقد قرأت ووافقت على إخلاء المسؤولية القانونية","user.login.legal.required":"يرجى قراءة والتحقق من إخلاء المسؤولية القانونية أولا","user.login.legal.content":"QuantDinger هي أداة مساعدة لتحليل الأسهم متعددة الوكلاء تعمل بالذكاء الاصطناعي ولا تتمتع بمؤهلات استشارية في مجال الاستثمار في الأوراق المالية. يتم إنشاء جميع نتائج التحليل والتقييمات والآراء المرجعية في المنصة تلقائيًا بواسطة الذكاء الاصطناعي استنادًا إلى البيانات التاريخية وتستخدم فقط للتعلم والبحث والتبادل الفني، ولا تشكل أي نصيحة استثمارية أو أساس لصنع القرار. ينطوي الاستثمار في الأسهم على مخاطر مختلفة مثل مخاطر السوق، ومخاطر السيولة، ومخاطر السياسة، وما إلى ذلك، مما قد يؤدي إلى خسارة رأس المال. يجب على المستخدمين اتخاذ قرارات مستقلة بناءً على قدرتهم على تحمل المخاطر، ويجب أن يتحمل المستخدم أي سلوك استثماري وعواقب تنشأ عن استخدام هذه الأداة. السوق محفوف بالمخاطر والاستثمار يحتاج إلى الحذر.","user.login.privacy.title":"سياسة خصوصية المستخدم","user.login.privacy.view":"عرض سياسة خصوصية المستخدم","user.login.privacy.collapse":"إغلاق شروط خصوصية المستخدم","user.login.privacy.content":"نحن نقدر خصوصيتك وحماية البيانات. 1) نطاق التجميع: يتم جمع المعلومات المطلوبة لتنفيذ الوظيفة فقط (مثل البريد الإلكتروني ورقم الهاتف المحمول ورمز المنطقة وعنوان محفظة Web3) والسجلات الضرورية ومعلومات الجهاز. 2) الغرض من الاستخدام: لتسجيل الدخول إلى الحساب والتحقق من الأمان وتوفير وظيفة الخدمة واستكشاف الأخطاء وإصلاحها ومتطلبات الامتثال. 3) التخزين والأمان: يتم تشفير البيانات وتخزينها، ويتم اتخاذ الأذونات اللازمة وإجراءات التحكم في الوصول لمحاولة منع الوصول غير المصرح به أو الكشف عنها أو فقدانها. 4) المشاركة مع أطراف ثالثة: ما لم يكن ذلك مطلوبًا بموجب القوانين واللوائح أو ضروريًا لأداء الخدمات، لن تتم مشاركة معلوماتك الشخصية مع أطراف ثالثة؛ إذا كانت هناك خدمات تابعة لجهات خارجية (مثل المحافظ ومقدمي خدمات الرسائل النصية القصيرة)، فلن تتم معالجتها إلا إلى الحد الأدنى اللازم لتنفيذ الوظيفة. 5) ملفات تعريف الارتباط/التخزين المحلي: تُستخدم لحالة تسجيل الدخول وصيانة الجلسة الضرورية (مثل الرموز المميزة، PHPSESSID)، ويمكنك مسحها أو تقييدها في المتصفح. 6) الحقوق الشخصية: يمكنك ممارسة حقوقك في الاستفسار والتصحيح والحذف وسحب الموافقة وما إلى ذلك وفقًا للقوانين واللوائح. 7) التغييرات والإشعارات: عند تحديث هذه الشروط، سيتم عرضها بشكل بارز على الصفحة. من خلال الاستمرار في استخدام هذه الخدمة، يعتبر أنك قد قرأت المحتوى المحدث ووافقت عليه. إذا كنت لا توافق على هذه الشروط أو أي تحديثات لها، فيرجى التوقف عن استخدام الخدمة والاتصال بنا.","account.basicInfo":"المعلومات الأساسية","account.id":"معرف المستخدم","account.username":"اسم المستخدم","account.nickname":"اللقب","account.email":"البريد الإلكتروني","account.mobile":"رقم الهاتف المحمول","account.web3address":"عنوان المحفظة","account.pid":"معرف المرجع","account.level":"مستوى المستخدم","account.money":"التوازن","account.qdtBalance":"رصيد كيو دي تي","account.score":"النقاط","account.createtime":"وقت التسجيل","account.inviteLink":"رابط الدعوة","account.recharge":"إعادة الشحن","account.rechargeTip":"يرجى استخدام WeChat أو Alipay لمسح رمز الاستجابة السريعة أدناه لإعادة الشحن.","account.qrCodePlaceholder":"العنصر النائب لرمز الاستجابة السريعة (المحاكاة)","account.rechargeAmount":"مبلغ إعادة الشحن","account.enterAmount":"الرجاء إدخال مبلغ إعادة الشحن","account.rechargeHint":"الحد الأدنى لمبلغ الإيداع: 1 QDT","account.confirmRecharge":"تأكيد إعادة الشحن","account.enterValidAmount":"الرجاء إدخال مبلغ تعبئة صالح","account.rechargeSuccess":"تم إعادة الشحن بنجاح! تم إيداع {amount} QDT","account.settings.menuMap.basic":"الإعدادات الأساسية","account.settings.menuMap.security":"إعدادات الأمان","account.settings.menuMap.notification":"إشعار الرسالة الجديدة","account.settings.menuMap.moneyLog":"تفاصيل الصندوق","account.moneyLog.empty":"لا توجد تفاصيل الصندوق حتى الآن","account.moneyLog.total":"{total} السجلات في المجموع","account.moneyLog.type.purchase":"مؤشر الشراء","account.moneyLog.type.recharge":"إعادة الشحن","account.moneyLog.type.refund":"استرداد","account.moneyLog.type.reward":"مكافأة","account.moneyLog.type.income":"دخل المؤشر","account.moneyLog.type.commission":"رسوم التعامل مع المنصة","wallet.balance":"رصيد كيو دي تي","wallet.recharge":"إعادة الشحن","wallet.withdraw":"سحب النقود","wallet.filter":"تصفية","wallet.reset":"إعادة تعيين","wallet.totalRecharge":"التغذية المتراكمة","wallet.totalWithdraw":"عمليات السحب التراكمية","wallet.totalIncome":"الدخل التراكمي","wallet.records":"سجلات المعاملات وتفاصيل الصندوق","wallet.tradingRecords":"تاريخ المعاملة","wallet.moneyLog":"تفاصيل الصندوق","wallet.rechargeTip":"يرجى استخدام WeChat أو Alipay لمسح رمز الاستجابة السريعة أدناه لإعادة الشحن.","wallet.qrCodePlaceholder":"العنصر النائب لرمز الاستجابة السريعة (المحاكاة)","wallet.rechargeAmount":"مبلغ إعادة الشحن","wallet.enterAmount":"الرجاء إدخال مبلغ إعادة الشحن","wallet.rechargeHint":"الحد الأدنى لمبلغ الإيداع: 1 QDT","wallet.confirmRecharge":"تأكيد إعادة الشحن","wallet.enterValidAmount":"الرجاء إدخال مبلغ تعبئة صالح","wallet.rechargeSuccess":"تم إعادة الشحن بنجاح! تم إيداع {amount} QDT","wallet.rechargeFailed":"فشلت عملية إعادة الشحن","wallet.withdrawTip":"الرجاء إدخال مبلغ السحب وعنوان السحب","wallet.withdrawAmount":"سحب المبلغ","wallet.enterWithdrawAmount":"الرجاء إدخال مبلغ السحب","wallet.withdrawHint":"الحد الأدنى لمبلغ السحب: 1 QDT","wallet.withdrawAddress":"عنوان السحب (اختياري)","wallet.enterWithdrawAddress":"الرجاء إدخال عنوان السحب","wallet.confirmWithdraw":"تأكيد الانسحاب","wallet.enterValidWithdrawAmount":"الرجاء إدخال مبلغ سحب صالح","wallet.insufficientBalance":"رصيد غير كاف","wallet.withdrawSuccess":"تم السحب بنجاح! تم سحب {المبلغ} QDT","wallet.withdrawFailed":"فشل الانسحاب","wallet.noTradingRecords":"لا يوجد سجل المعاملات حتى الآن","wallet.noMoneyLog":"لا توجد تفاصيل الصندوق حتى الآن","wallet.loadTradingRecordsFailed":"فشل في تحميل سجلات المعاملات","wallet.loadMoneyLogFailed":"فشل في تحميل تفاصيل الصندوق","wallet.moneyLogTotal":"{total} السجلات في المجموع","wallet.moneyLogTypeTitle":"اكتب","wallet.moneyLogType.all":"جميع الأنواع","wallet.table.time":"الوقت","wallet.table.type":"اكتب","wallet.table.price":"السعر","wallet.table.amount":"الكمية","wallet.table.money":"المبلغ","wallet.table.balance":"التوازن","wallet.table.memo":"ملاحظات","wallet.table.value":"قيمة","wallet.table.profit":"الربح والخسارة","wallet.table.commission":"رسوم المناولة","wallet.table.total":"{total} السجلات في المجموع","wallet.tradeType.buy":"شراء","wallet.tradeType.sell":"بيع","wallet.tradeType.liquidation":"التصفية القسرية","wallet.tradeType.openLong":"مفتوح لفترة طويلة","wallet.tradeType.addLong":"غادوت","wallet.tradeType.closeLong":"بيندو","wallet.tradeType.closeLongStop":"وقف الخسارة وطويلة","wallet.tradeType.closeLongProfit":"جني الربح ومستوى أكثر","wallet.tradeType.openShort":"فتح قصيرة","wallet.tradeType.addShort":"إضافة قصيرة","wallet.tradeType.closeShort":"فارغ","wallet.tradeType.closeShortStop":"وقف الخسارة","wallet.tradeType.closeShortProfit":"جني الأرباح وأغلق على المكشوف","wallet.moneyLogType.purchase":"مؤشر الشراء","wallet.moneyLogType.recharge":"إعادة الشحن","wallet.moneyLogType.withdraw":"سحب النقود","wallet.moneyLogType.refund":"استرداد","wallet.moneyLogType.reward":"مكافأة","wallet.moneyLogType.income":"الدخل","wallet.moneyLogType.commission":"رسوم المناولة","wallet.web3Address.required":"يرجى ملء عنوان محفظة Web3 أولاً","wallet.web3Address.requiredDescription":"قبل إعادة الشحن، تحتاج إلى ربط عنوان محفظة Web3 الخاص بك لتلقي إعادة الشحن.","wallet.web3Address.placeholder":"الرجاء إدخال عنوان محفظة Web3 الخاص بك (يبدأ بـ 0x)","wallet.web3Address.save":"حفظ عنوان المحفظة","wallet.web3Address.saveSuccess":"تم حفظ عنوان المحفظة بنجاح","wallet.web3Address.saveFailed":"فشل في حفظ عنوان المحفظة","wallet.web3Address.invalidFormat":"يرجى إدخال عنوان محفظة Web3 صالح (تنسيق Ethereum: 42 حرفًا يبدأ بـ 0x، أو تنسيق TRC20: 34 حرفًا يبدأ بـ T)","wallet.selectCoin":"اختر العملة","wallet.selectChain":"سلسلة الاختيار","wallet.chain.eth":"إيثريوم (ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"ش.م.ب","wallet.targetQdtAmount":"مقدار QDT الذي تريد استرداده (اختياري)","wallet.targetQdtAmount.placeholder":"يرجى إدخال كمية QDT التي تريد استردادها، وسعر QDT الحالي: {price} USDT","wallet.targetQdtAmount.requiredUsdt":"تحتاج إلى إعادة الشحن: {amount} USDT","wallet.rechargeAddress":"عنوان إعادة الشحن","wallet.copyAddress":"نسخ","wallet.copySuccess":"تم النسخ بنجاح!","wallet.copyFailed":"فشل النسخ، يرجى النسخ يدويًا","wallet.rechargeAddressHint":"يرجى التأكد من استخدام {chain} لإيداع {coin} في هذا العنوان","wallet.qdtPrice.loading":"جار التحميل...","wallet.rechargeTip.new":"يرجى تحديد العملة والسلسلة، ثم مسح رمز الاستجابة السريعة أدناه لإعادة الشحن","wallet.exchangeRate":"1 QDT ≈ {معدل} USDT","wallet.withdrawableAmount":"المبلغ النقدي المتاح","wallet.totalBalance":"الرصيد الإجمالي","wallet.insufficientWithdrawable":"المبلغ النقدي الذي يمكن سحبه غير كاف. المبلغ الحالي الذي يمكن سحبه هو: {amount} QDT","wallet.withdrawAddressRequired":"الرجاء إدخال عنوان السحب","wallet.withdrawAddressHint":"يرجى التأكد من صحة العنوان. وبعد الانسحاب لا يمكن إلغاؤه.","wallet.withdrawSubmitSuccess":"تم إرسال طلب السحب بنجاح، برجاء انتظار المراجعة","menu.footer.contactUs":"اتصل بنا","menu.footer.getSupport":"احصل على الدعم","menu.footer.socialAccounts":"حساب اجتماعي","menu.footer.userAgreement":"اتفاقية المستخدم","menu.footer.privacyPolicy":"سياسة الخصوصية","menu.footer.support":"الدعم","menu.footer.featureRequest":"طلب الميزة","menu.footer.email":"البريد الإلكتروني","menu.footer.liveChat":"24/7 الدردشة الحية","dashboard.analysis.title":"التحليل متعدد الأبعاد","dashboard.analysis.subtitle":"منصة تحليل مالي شاملة تعتمد على الذكاء الاصطناعي","dashboard.analysis.selectSymbol":"حدد أو أدخل الرمز الأساسي","dashboard.analysis.selectModel":"حدد النموذج","dashboard.analysis.startAnalysis":"ابدأ التحليل","dashboard.analysis.history":"التاريخ","dashboard.analysis.tab.overview":"تحليل شامل","dashboard.analysis.tab.fundamental":"الأساسيات","dashboard.analysis.tab.technical":"التكنولوجيا","dashboard.analysis.tab.news":"أخبار","dashboard.analysis.tab.sentiment":"العواطف","dashboard.analysis.tab.risk":"خطر","dashboard.analysis.tab.debate":"المناقشة الطويلة والقصيرة","dashboard.analysis.tab.decision":"القرار النهائي","dashboard.analysis.empty.selectSymbol":"حدد هدفًا لبدء التحليل","dashboard.analysis.empty.selectSymbolDesc":"اختر من قائمة الأسهم المحددة ذاتيًا أو أدخل الكود الأساسي للحصول على تقرير تحليل الذكاء الاصطناعي متعدد الأبعاد","dashboard.analysis.empty.startAnalysis":'انقر فوق الزر "بدء التحليل" لإجراء تحليل متعدد الأبعاد',"dashboard.analysis.empty.startAnalysisDesc":"سنزودك بتحليل شامل من أبعاد متعددة مثل الأساسيات والتكنولوجيا والأخبار والمشاعر والمخاطر","dashboard.analysis.empty.noData":"لا توجد حاليًا أي بيانات تحليل {type}، يرجى إجراء تحليل شامل أولاً","dashboard.analysis.empty.noWatchlist":"لا يوجد حاليا أي أسهم مختارة ذاتيا","dashboard.analysis.empty.noHistory":"لا يوجد تاريخ بعد","dashboard.analysis.empty.watchlistHint":"لا يوجد حاليا أي أسهم مختارة ذاتيا، يرجى أولا","dashboard.analysis.empty.noDebateData":"لا توجد بيانات مناقشة حتى الآن","dashboard.analysis.empty.noDecisionData":"لا توجد بيانات القرار حتى الآن","dashboard.analysis.empty.selectAgent":"الرجاء تحديد وكيل لعرض نتائج التحليل","dashboard.analysis.loading.analyzing":"جارٍ التحليل، يرجى الانتظار...","dashboard.analysis.loading.fundamental":"تحليل البيانات الأساسية...","dashboard.analysis.loading.technical":"تحليل المؤشرات الفنية...","dashboard.analysis.loading.news":"تحليل بيانات الأخبار...","dashboard.analysis.loading.sentiment":"تحليل معنويات السوق..","dashboard.analysis.loading.risk":"تقييم المخاطر...","dashboard.analysis.loading.debate":"والنقاش الطويل والقصير مستمر..","dashboard.analysis.loading.decision":"إصدار القرار النهائي...","dashboard.analysis.score.overall":"التقييم العام","dashboard.analysis.score.recommendation":"نصيحة استثمارية","dashboard.analysis.score.confidence":"الثقة","dashboard.analysis.dimension.fundamental":"الأساسيات","dashboard.analysis.dimension.technical":"التكنولوجيا","dashboard.analysis.dimension.news":"أخبار","dashboard.analysis.dimension.sentiment":"العواطف","dashboard.analysis.dimension.risk":"خطر","dashboard.analysis.card.dimensionScores":"التقييمات لكل البعد","dashboard.analysis.card.overviewReport":"تقرير التحليل الشامل","dashboard.analysis.card.financialMetrics":"المؤشرات المالية","dashboard.analysis.card.fundamentalReport":"تقرير التحليل الأساسي","dashboard.analysis.card.technicalIndicators":"المؤشرات الفنية","dashboard.analysis.card.technicalReport":"تقرير التحليل الفني","dashboard.analysis.card.newsList":"أخبار ذات صلة","dashboard.analysis.card.newsReport":"تقرير تحليل الأخبار","dashboard.analysis.card.sentimentIndicators":"مؤشر المشاعر","dashboard.analysis.card.sentimentReport":"تقرير تحليل المشاعر","dashboard.analysis.card.riskMetrics":"مؤشرات المخاطر","dashboard.analysis.card.riskReport":"تقرير تقييم المخاطر","dashboard.analysis.card.bullView":"النظرة الصعودية (الثور)","dashboard.analysis.card.bearView":"وجهة النظر الهبوطية (الدب)","dashboard.analysis.card.researchConclusion":"استنتاج الباحث","dashboard.analysis.card.traderPlan":"خطة التاجر","dashboard.analysis.card.riskDebate":"مناقشة لجنة المخاطر","dashboard.analysis.card.finalDecision":"القرار النهائي","dashboard.analysis.card.tradePlanDetail":"تفاصيل خطة التداول","dashboard.analysis.tradingPlan.entry_price":"سعر القبول","dashboard.analysis.tradingPlan.position_size":"حجم الموقف","dashboard.analysis.tradingPlan.stop_loss":"وقف الخسارة","dashboard.analysis.tradingPlan.take_profit":"جني الربح","dashboard.analysis.label.confidence":"الثقة","dashboard.analysis.label.keyPoints":"النقاط الأساسية","dashboard.analysis.label.riskWarning":"تحذير من المخاطر","dashboard.analysis.risk.risky":"محفوف بالمخاطر","dashboard.analysis.risk.neutral":"وجهة نظر محايدة (محايدة)","dashboard.analysis.risk.safe":"وجهة نظر محافظة (آمنة)","dashboard.analysis.risk.conclusion":"الاستنتاج","dashboard.analysis.feature.fundamental":"التحليل الأساسي","dashboard.analysis.feature.technical":"التحليل الفني","dashboard.analysis.feature.news":"تحليل الأخبار","dashboard.analysis.feature.sentiment":"تحليل المشاعر","dashboard.analysis.feature.risk":"تقييم المخاطر","dashboard.analysis.watchlist.title":"اختيار الأسهم الخاصة بي","dashboard.analysis.watchlist.add":"إضافة","dashboard.analysis.watchlist.addStock":"إضافة مخزون","dashboard.analysis.modal.addStock.title":"إضافة أسهم اختيارية","dashboard.analysis.modal.addStock.confirm":"حسنًا","dashboard.analysis.modal.addStock.cancel":"إلغاء","dashboard.analysis.modal.addStock.market":"نوع السوق","dashboard.analysis.modal.addStock.marketPlaceholder":"الرجاء تحديد السوق","dashboard.analysis.modal.addStock.marketRequired":"الرجاء تحديد نوع السوق","dashboard.analysis.modal.addStock.symbol":"رمز المخزون","dashboard.analysis.modal.addStock.symbolPlaceholder":"على سبيل المثال: AAPL، TSLA، GOOGL، 000001، BTC","dashboard.analysis.modal.addStock.symbolRequired":"الرجاء إدخال رمز المخزون","dashboard.analysis.modal.addStock.searchPlaceholder":"البحث عن رمز الهدف أو الاسم","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"ابحث عن الرمز الأساسي أو أدخله (على سبيل المثال: AAPL، BTC/USDT، EUR/USD)","dashboard.analysis.modal.addStock.searchOrInputHint":"يدعم البحث عن الكائنات في قاعدة البيانات، أو إدخال الكود مباشرة (سيحصل النظام على الاسم تلقائيًا)","dashboard.analysis.modal.addStock.search":"بحث","dashboard.analysis.modal.addStock.searchResults":"نتائج البحث","dashboard.analysis.modal.addStock.hotSymbols":"أهداف شعبية","dashboard.analysis.modal.addStock.noHotSymbols":"لا توجد أهداف شعبية حتى الآن","dashboard.analysis.modal.addStock.selectedSymbol":"مختارة","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"الرجاء تحديد الهدف أولاً","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"الرجاء تحديد هدف أو إدخال رمز الهدف أولاً","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"الرجاء إدخال رمز الهدف","dashboard.analysis.modal.addStock.pleaseSelectMarket":"الرجاء تحديد نوع السوق أولا","dashboard.analysis.modal.addStock.searchFailed":"فشل البحث، يرجى المحاولة مرة أخرى في وقت لاحق","dashboard.analysis.modal.addStock.noSearchResults":"لم يتم العثور على هدف مطابق","dashboard.analysis.modal.addStock.willAutoFetchName":"سيحصل النظام تلقائيًا على الاسم","dashboard.analysis.modal.addStock.addDirectly":"أضف مباشرة","dashboard.analysis.modal.addStock.nameWillBeFetched":"سيتم التقاط الاسم تلقائيًا عند إضافته","dashboard.analysis.market.USStock":"الأسهم الأمريكية","dashboard.analysis.market.Crypto":"عملة مشفرة","dashboard.analysis.market.Forex":"الفوركس","dashboard.analysis.market.Futures":"العقود الآجلة","dashboard.analysis.modal.history.title":"سجلات التحليل التاريخي","dashboard.analysis.modal.history.viewResult":"عرض النتائج","dashboard.analysis.modal.history.completeTime":"وقت الانتهاء","dashboard.analysis.modal.history.error":"خطأ","dashboard.analysis.status.pending":"في انتظار","dashboard.analysis.status.processing":"المعالجة","dashboard.analysis.status.completed":"مكتمل","dashboard.analysis.status.failed":"فشل","dashboard.analysis.message.selectSymbol":"الرجاء تحديد الهدف أولا","dashboard.analysis.message.taskCreated":"تم إنشاء مهمة التحليل ويتم تنفيذها في الخلفية...","dashboard.analysis.message.analysisComplete":"اكتمل التحليل","dashboard.analysis.message.analysisCompleteCache":"اكتمل التحليل (باستخدام البيانات المخزنة مؤقتًا)","dashboard.analysis.message.analysisFailed":"فشل التحليل، يرجى المحاولة مرة أخرى في وقت لاحق","dashboard.analysis.message.addStockSuccess":"تمت الإضافة بنجاح","dashboard.analysis.message.addStockFailed":"فشلت الإضافة","dashboard.analysis.message.removeStockSuccess":"تمت الإزالة بنجاح","dashboard.analysis.message.removeStockFailed":"فشلت عملية الإزالة","dashboard.analysis.message.resumingAnalysis":"جاري استئناف مهمة التحليل...","dashboard.analysis.message.deleteSuccess":"تم الحذف بنجاح","dashboard.analysis.message.deleteFailed":"فشل الحذف","dashboard.analysis.modal.history.delete":"حذف","dashboard.analysis.modal.history.deleteConfirm":"هل أنت متأكد أنك تريد حذف سجل التحليل هذا؟","dashboard.analysis.test":"متجر رقم {no}، طريق Gongzhuan","dashboard.analysis.introduce":"وصف المؤشر","dashboard.analysis.total-sales":"إجمالي المبيعات","dashboard.analysis.day-sales":"متوسط المبيعات اليومية¥","dashboard.analysis.visits":"الزيارات","dashboard.analysis.visits-trend":"اتجاهات المرور","dashboard.analysis.visits-ranking":"ترتيب زيارة المتجر","dashboard.analysis.day-visits":"زيارات يومية","dashboard.analysis.week":"أسبوعية على أساس سنوي","dashboard.analysis.day":"سنة بعد سنة","dashboard.analysis.payments":"عدد الدفعات","dashboard.analysis.conversion-rate":"معدل التحويل","dashboard.analysis.operational-effect":"آثار النشاط التشغيلي","dashboard.analysis.sales-trend":"اتجاهات المبيعات","dashboard.analysis.sales-ranking":"ترتيب مبيعات المتجر","dashboard.analysis.all-year":"على مدار السنة","dashboard.analysis.all-month":"هذا الشهر","dashboard.analysis.all-week":"هذا الاسبوع","dashboard.analysis.all-day":"اليوم","dashboard.analysis.search-users":"عدد مستخدمي البحث","dashboard.analysis.per-capita-search":"عمليات البحث للفرد","dashboard.analysis.online-top-search":"عمليات البحث الشائعة على الإنترنت","dashboard.analysis.the-proportion-of-sales":"نسبة فئة المبيعات","dashboard.analysis.dropdown-option-one":"العملية الأولى","dashboard.analysis.dropdown-option-two":"العملية 2","dashboard.analysis.channel.all":"جميع القنوات","dashboard.analysis.channel.online":"على الانترنت","dashboard.analysis.channel.stores":"متجر","dashboard.analysis.sales":"المبيعات","dashboard.analysis.traffic":"تدفق الركاب","dashboard.analysis.table.rank":"الترتيب","dashboard.analysis.table.search-keyword":"البحث عن الكلمات الرئيسية","dashboard.analysis.table.users":"عدد المستخدمين","dashboard.analysis.table.weekly-range":"زيادة أسبوعية","dashboard.indicator.selectSymbol":"حدد أو أدخل الرمز الأساسي","dashboard.indicator.emptyWatchlistHint":"لا يوجد حاليا أي أسهم مختارة ذاتيا، يرجى إضافتها أولا","dashboard.indicator.hint.selectSymbol":"الرجاء تحديد هدف لبدء التحليل","dashboard.indicator.hint.selectSymbolDesc":"حدد أو أدخل رمز السهم في مربع البحث أعلاه لعرض مخططات K-line والمؤشرات الفنية","dashboard.indicator.retry":"حاول مرة أخرى","dashboard.indicator.panel.title":"المؤشرات الفنية","dashboard.indicator.panel.realtimeOn":"قم بإيقاف تشغيل التحديثات في الوقت الفعلي","dashboard.indicator.panel.realtimeOff":"تمكين التحديثات في الوقت الحقيقي","dashboard.indicator.panel.themeLight":"التبديل إلى المظهر الداكن","dashboard.indicator.panel.themeDark":"التبديل إلى موضوع الضوء","dashboard.indicator.section.enabled":"ممكّن","dashboard.indicator.section.added":"المؤشرات التي أضفتها","dashboard.indicator.section.custom":"المؤشرات التي أنشأتها بنفسك","dashboard.indicator.section.bought":"المؤشرات التي اشتريتها","dashboard.indicator.section.myCreated":"المؤشرات التي قمت بإنشائها","dashboard.indicator.empty":"لا يوجد مؤشر حتى الآن، يرجى إضافة أو إنشاء مؤشر أولاً","dashboard.indicator.buy":"مؤشر الشراء","dashboard.indicator.action.start":"ابدأ","dashboard.indicator.action.stop":"إغلاق","dashboard.indicator.action.edit":"تحرير","dashboard.indicator.action.delete":"حذف","dashboard.indicator.action.backtest":"com.backtest","dashboard.indicator.status.normal":"عادي","dashboard.indicator.status.normalPermanent":"عادي (صالح بشكل دائم)","dashboard.indicator.status.expired":"انتهت صلاحيتها","dashboard.indicator.expiry.permanent":"صالحة بشكل دائم","dashboard.indicator.expiry.noExpiry":"لا يوجد وقت انتهاء الصلاحية","dashboard.indicator.expiry.expired":"انتهت الصلاحية: {التاريخ}","dashboard.indicator.expiry.expiresOn":"وقت انتهاء الصلاحية: {التاريخ}","dashboard.indicator.delete.confirmTitle":"تأكيد الحذف","dashboard.indicator.delete.confirmContent":'هل أنت متأكد أنك تريد حذف المؤشر "{name}"؟ هذه العملية لا رجعة فيها.',"dashboard.indicator.delete.confirmOk":"حذف","dashboard.indicator.delete.confirmCancel":"إلغاء","dashboard.indicator.delete.success":"تم الحذف بنجاح","dashboard.indicator.delete.failed":"فشل الحذف","dashboard.indicator.save.success":"تم الحفظ بنجاح","dashboard.indicator.save.failed":"فشل الحفظ","dashboard.indicator.error.loadWatchlistFailed":"فشل تحميل الأسهم الاختيارية","dashboard.indicator.error.chartNotReady":"لم تتم تهيئة مكون المخطط. يرجى تحديد الهدف أولاً وانتظر حتى يتم تحميل المخطط.","dashboard.indicator.error.chartMethodNotReady":"طريقة مكون المخطط ليست جاهزة، يرجى المحاولة مرة أخرى لاحقًا","dashboard.indicator.error.chartExecuteNotReady":"طريقة تنفيذ مكون الرسم البياني ليست جاهزة، يرجى المحاولة مرة أخرى لاحقًا","dashboard.indicator.error.parseFailed":"غير قادر على تحليل كود بايثون","dashboard.indicator.error.parseFailedCheck":"غير قادر على تحليل كود بايثون، يرجى التحقق من تنسيق الكود","dashboard.indicator.error.addIndicatorFailed":"فشل في إضافة المؤشر","dashboard.indicator.error.runIndicatorFailed":"فشل مؤشر التشغيل","dashboard.indicator.error.pleaseLogin":"الرجاء تسجيل الدخول أولا","dashboard.indicator.error.loadDataFailed":"فشل تحميل البيانات","dashboard.indicator.error.loadDataFailedDesc":"يرجى التحقق من اتصال الشبكة","dashboard.indicator.error.pythonEngineFailed":"فشل محرك Python في التحميل وقد لا تكون وظيفة المؤشر متاحة.","dashboard.indicator.error.chartInitFailed":"فشلت تهيئة المخطط","dashboard.indicator.warning.enterCode":"الرجاء إدخال رمز المؤشر أولا","dashboard.indicator.warning.pyodideLoadFailed":"فشل محرك بايثون في التحميل","dashboard.indicator.warning.pyodideLoadFailedDesc":"هذه الميزة غير متوفرة في منطقتك الحالية أو بيئة الشبكة الحالية","dashboard.indicator.warning.chartNotInitialized":"لم تتم تهيئة المخطط ولا يمكن استخدام أداة رسم الخط.","dashboard.indicator.success.runIndicator":"يعمل المؤشر بنجاح","dashboard.indicator.success.clearDrawings":"تم مسح كافة الرسومات الخطية","dashboard.indicator.sma":"SMA (مجموعة المتوسطات المتحركة)","dashboard.indicator.ema":"EMA (مجموعة المتوسط المتحرك الأسي)","dashboard.indicator.rsi":"مؤشر القوة النسبية (القوة النسبية)","dashboard.indicator.macd":"ماكد","dashboard.indicator.bb":"بولينجر باند","dashboard.indicator.atr":"ATR (متوسط المدى الحقيقي)","dashboard.indicator.cci":"CCI (مؤشر قناة السلع)","dashboard.indicator.williams":"ويليامز %R (مؤشر ويليامز)","dashboard.indicator.mfi":"مؤسسات التمويل الأصغر (مؤشر تدفق الأموال)","dashboard.indicator.adx":"ADX (مؤشر الاتجاه المتوسط)","dashboard.indicator.obv":"OBV (موجة الطاقة)","dashboard.indicator.adosc":"ADOSC (مذبذب التجميع/الإرسال)","dashboard.indicator.ad":"AD (خط التجميع/التوزيع)","dashboard.indicator.kdj":"KDJ (مؤشر ستوكاستيك)","dashboard.indicator.signal.buy":"شراء","dashboard.indicator.signal.sell":"بيع","dashboard.indicator.signal.supertrendBuy":"شراء سوبر تريند","dashboard.indicator.signal.supertrendSell":"بيع سوبر تريند","dashboard.indicator.chart.kline":"خط K","dashboard.indicator.chart.volume":"الحجم","dashboard.indicator.chart.uptrend":"الاتجاه الصعودي","dashboard.indicator.chart.downtrend":"الاتجاه الهابط","dashboard.indicator.tooltip.time":"الوقت","dashboard.indicator.tooltip.open":"مفتوح","dashboard.indicator.tooltip.close":"تلقي","dashboard.indicator.tooltip.high":"عالية","dashboard.indicator.tooltip.low":"منخفض","dashboard.indicator.tooltip.volume":"الحجم","dashboard.indicator.drawing.line":"قطعة الخط","dashboard.indicator.drawing.horizontalLine":"خط أفقي","dashboard.indicator.drawing.verticalLine":"خط عمودي","dashboard.indicator.drawing.ray":"راي","dashboard.indicator.drawing.straightLine":"خط مستقيم","dashboard.indicator.drawing.parallelLine":"خطوط متوازية","dashboard.indicator.drawing.priceLine":"خط السعر","dashboard.indicator.drawing.priceChannel":"قناة السعر","dashboard.indicator.drawing.fibonacciLine":"خطوط فيبوناتشي","dashboard.indicator.drawing.measure":"قياس","dashboard.indicator.drawing.clearAll":"مسح كافة الرسومات الخطية","dashboard.indicator.market.USStock":"الأسهم الأمريكية","dashboard.indicator.market.Crypto":"عملة مشفرة","dashboard.indicator.market.Forex":"الفوركس","dashboard.indicator.market.Futures":"العقود الآجلة","dashboard.indicator.create":"إنشاء مؤشر","dashboard.indicator.editor.title":"إنشاء/تحرير المؤشرات","dashboard.indicator.editor.name":"اسم المؤشر","dashboard.indicator.editor.nameRequired":"الرجاء إدخال اسم المؤشر","dashboard.indicator.editor.namePlaceholder":"الرجاء إدخال اسم المؤشر","dashboard.indicator.editor.description":"وصف المؤشر","dashboard.indicator.editor.descriptionPlaceholder":"الرجاء إدخال وصف للمؤشر (اختياري)","dashboard.indicator.editor.code":"كود بايثون","dashboard.indicator.editor.codeRequired":"الرجاء إدخال رمز المؤشر","dashboard.indicator.editor.codePlaceholder":"الرجاء إدخال رمز بايثون","dashboard.indicator.editor.run":"تشغيل","dashboard.indicator.editor.runHint":"انقر فوق زر التشغيل لمعاينة تأثير المؤشر على مخطط K-line","dashboard.indicator.editor.guide":"دليل التطوير","dashboard.indicator.editor.guideTitle":"دليل تطوير مؤشر بايثون","dashboard.indicator.editor.save":"حفظ","dashboard.indicator.editor.cancel":"إلغاء","dashboard.indicator.editor.unnamed":"مؤشر بدون اسم","dashboard.indicator.editor.publishToCommunity":"نشر إلى المجتمع","dashboard.indicator.editor.publishToCommunityHint":"بمجرد النشر، يمكن للمستخدمين الآخرين عرض واستخدام المؤشر الخاص بك في المجتمع","dashboard.indicator.editor.indicatorType":"نوع المؤشر","dashboard.indicator.editor.indicatorTypeRequired":"الرجاء تحديد نوع المؤشر","dashboard.indicator.editor.indicatorTypePlaceholder":"الرجاء تحديد نوع المؤشر","dashboard.indicator.editor.previewImage":"معاينة","dashboard.indicator.editor.uploadImage":"تحميل الصور","dashboard.indicator.editor.previewImageHint":"الحجم الموصى به: 800×400، ولا يزيد عن 2 ميجابايت","dashboard.indicator.editor.pricing":"سعر البيع (QDT)","dashboard.indicator.editor.pricingType.free":"مجانا","dashboard.indicator.editor.pricingType.permanent":"دائم","dashboard.indicator.editor.pricingType.monthly":"الدفع الشهري","dashboard.indicator.editor.price":"السعر","dashboard.indicator.editor.priceRequired":"الرجاء إدخال السعر","dashboard.indicator.editor.pricePlaceholder":"الرجاء إدخال السعر","dashboard.indicator.editor.pricingHint":"على الرغم من أن سعر المؤشرات المجانية هو 0، إلا أن المنصة ستكافئك (QDT) بناءً على استخدام المؤشر الخاص بك ومعدل الثناء.","dashboard.indicator.editor.aiGenerate":"جيل ذكي","dashboard.indicator.editor.aiPromptPlaceholder":"أخبرني بأفكارك وسأقوم بإنشاء رمز مؤشر بايثون لك","dashboard.indicator.editor.aiGenerateBtn":"كود تم إنشاؤه بواسطة الذكاء الاصطناعي","dashboard.indicator.editor.aiPromptRequired":"الرجاء إدخال أفكارك","dashboard.indicator.editor.aiGenerateSuccess":"تم إنشاء الكود بنجاح","dashboard.indicator.editor.aiGenerateError":"فشل إنشاء الكود، يرجى المحاولة مرة أخرى لاحقًا","dashboard.indicator.backtest.title":"اختبار خلفي للمؤشر","dashboard.indicator.backtest.config":"معلمات الاختبار الخلفي","dashboard.indicator.backtest.startDate":"تاريخ البدء","dashboard.indicator.backtest.endDate":"تاريخ الانتهاء","dashboard.indicator.backtest.selectStartDate":"حدد تاريخ البدء","dashboard.indicator.backtest.selectEndDate":"حدد تاريخ الانتهاء","dashboard.indicator.backtest.startDateRequired":"الرجاء تحديد تاريخ البدء","dashboard.indicator.backtest.endDateRequired":"الرجاء تحديد تاريخ الانتهاء","dashboard.indicator.backtest.initialCapital":"رأس المال الأولي","dashboard.indicator.backtest.initialCapitalRequired":"الرجاء إدخال الأموال الأولية","dashboard.indicator.backtest.commission":"رسوم المناولة","dashboard.indicator.backtest.leverage":"نسبة الرافعة المالية","dashboard.indicator.backtest.tradeDirection":"اتجاه التداول","dashboard.indicator.backtest.longOnly":"اذهب لفترة طويلة","dashboard.indicator.backtest.shortOnly":"قصيرة","dashboard.indicator.backtest.both":"في اتجاهين","dashboard.indicator.backtest.run":"ابدأ الاختبار الخلفي","dashboard.indicator.backtest.rerun":"باك تست مرة أخرى","dashboard.indicator.backtest.close":"إغلاق","dashboard.indicator.backtest.running":"الاختبار الخلفي للمؤشر قيد التقدم...","dashboard.indicator.backtest.results":"نتائج الاختبار الخلفي","dashboard.indicator.backtest.totalReturn":"العائد الإجمالي","dashboard.indicator.backtest.annualReturn":"الدخل السنوي","dashboard.indicator.backtest.maxDrawdown":"الحد الأقصى للسحب","dashboard.indicator.backtest.sharpeRatio":"نسبة شارب","dashboard.indicator.backtest.winRate":"معدل الفوز","dashboard.indicator.backtest.profitFactor":"نسبة الربح إلى الخسارة","dashboard.indicator.backtest.totalTrades":"عدد المعاملات","dashboard.indicator.totalReturn":"العائد الإجمالي","dashboard.indicator.annualReturn":"معدل العائد السنوي","dashboard.indicator.maxDrawdown":"الحد الأقصى للسحب","dashboard.indicator.sharpeRatio":"نسبة شارب","dashboard.indicator.winRate":"معدل الفوز","dashboard.indicator.profitFactor":"نسبة الربح إلى الخسارة","dashboard.indicator.totalTrades":"إجمالي عدد المعاملات","dashboard.indicator.backtest.totalCommission":"إجمالي رسوم المناولة","dashboard.indicator.backtest.equityCurve":"منحنى العائد","dashboard.indicator.backtest.strategy":"دخل المؤشر","dashboard.indicator.backtest.benchmark":"العودة المرجعية","dashboard.indicator.backtest.tradeHistory":"تاريخ المعاملة","dashboard.indicator.backtest.tradeTime":"الوقت","dashboard.indicator.backtest.tradeType":"اكتب","dashboard.indicator.backtest.buy":"شراء","dashboard.indicator.backtest.sell":"بيع","dashboard.indicator.backtest.liquidation":"التصفية","dashboard.indicator.backtest.openLong":"مفتوح لفترة طويلة","dashboard.indicator.backtest.closeLong":"بيندو","dashboard.indicator.backtest.closeLongStop":"قريب من الشراء (وقف الخسارة)","dashboard.indicator.backtest.closeLongProfit":"إغلاق المزيد (جني الأرباح)","dashboard.indicator.backtest.addLong":"إضافة موقف طويل","dashboard.indicator.backtest.openShort":"فتح قصيرة","dashboard.indicator.backtest.closeShort":"فارغ","dashboard.indicator.backtest.closeShortStop":"إغلاق (وقف الخسارة)","dashboard.indicator.backtest.closeShortProfit":"إغلاق (جني الأرباح)","dashboard.indicator.backtest.addShort":"إضافة موقف قصير","dashboard.indicator.backtest.price":"السعر","dashboard.indicator.backtest.amount":"الكمية","dashboard.indicator.backtest.balance":"رصيد الحساب","dashboard.indicator.backtest.profit":"الربح والخسارة","dashboard.indicator.backtest.success":"تم الانتهاء من الاختبار الخلفي","dashboard.indicator.backtest.failed":"فشل الاختبار الخلفي، يرجى المحاولة مرة أخرى لاحقًا","dashboard.indicator.backtest.noIndicatorCode":"لا يوجد رمز قابل للاختبار الخلفي لهذا المؤشر","dashboard.indicator.backtest.noSymbol":"يرجى تحديد هدف المعاملة أولاً","dashboard.indicator.backtest.dateRangeExceeded":"يتجاوز النطاق الزمني للاختبار الخلفي الحد الأقصى: يمكن اختبار الفترة الزمنية {timeframe} بحد أقصى {maxRange}","dashboard.indicator.backtest.dateRangeExceededDays":"Backtest range exceeds limit: {timeframe} max {maxRange} ({maxDays} days)","dashboard.indicator.backtest.metaLine":"Symbol: {symbol} | Market: {market} | Timeframe: {timeframe}","dashboard.indicator.backtest.savedRunId":"Backtest saved. Run ID: {id}","dashboard.indicator.backtest.prev":"Previous","dashboard.indicator.backtest.next":"Next","dashboard.indicator.backtest.steps.strategy.title":"Strategy","dashboard.indicator.backtest.steps.strategy.desc":"Position sizing & risk controls","dashboard.indicator.backtest.steps.trading.title":"Trading settings","dashboard.indicator.backtest.steps.trading.desc":"Time range, capital, fees, leverage","dashboard.indicator.backtest.steps.results.title":"Results","dashboard.indicator.backtest.steps.results.desc":"Backtest output","dashboard.indicator.backtest.panel.risk":"Risk management (SL/TP/Trailing)","dashboard.indicator.backtest.panel.scale":"Scale in / DCA (trend & mean-reversion)","dashboard.indicator.backtest.panel.reduce":"Reduce position (trend & adverse)","dashboard.indicator.backtest.panel.position":"Position sizing","dashboard.indicator.backtest.field.stopLossPct":"Stop Loss (%)","dashboard.indicator.backtest.field.takeProfitPct":"Take Profit (%)","dashboard.indicator.backtest.field.trailingEnabled":"Trailing stop / take profit","dashboard.indicator.backtest.field.trailingStopPct":"Trailing drawdown (%)","dashboard.indicator.backtest.field.trailingActivationPct":"Trailing activation (%)","dashboard.indicator.backtest.field.slippage":"Slippage (%)","dashboard.indicator.backtest.field.trendAddEnabled":"Trend-following scale-in","dashboard.indicator.backtest.field.dcaAddEnabled":"Mean-reversion DCA","dashboard.indicator.backtest.field.trendAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.dcaAddStepPct":"DCA trigger (%)","dashboard.indicator.backtest.field.trendAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.dcaAddSizePct":"DCA size (% of capital)","dashboard.indicator.backtest.field.trendAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.dcaAddMaxTimes":"Max DCA times","dashboard.indicator.backtest.field.trendReduceEnabled":"Trend reduce","dashboard.indicator.backtest.field.adverseReduceEnabled":"Adverse reduce","dashboard.indicator.backtest.field.trendReduceStepPct":"Trend trigger (%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"Adverse trigger (%)","dashboard.indicator.backtest.field.trendReduceSizePct":"Reduce size (% of position)","dashboard.indicator.backtest.field.adverseReduceSizePct":"Adverse reduce size (% of position)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"Max trend reduce times","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"Max adverse reduce times","dashboard.indicator.backtest.field.entryPct":"Entry size (% of capital)","dashboard.indicator.backtest.field.minOrderPct":"Min order size (% of capital) (optional)","dashboard.indicator.backtest.closeLongTrailing":"Close Long (Trailing)","dashboard.indicator.backtest.reduceLong":"Reduce Long","dashboard.indicator.backtest.closeShortTrailing":"Close Short (Trailing)","dashboard.indicator.backtest.reduceShort":"Reduce Short","dashboard.docs.title":"مركز الوثائق","dashboard.docs.search.placeholder":"بحث في المستندات...","dashboard.docs.category.all":"الكل","dashboard.docs.category.guide":"دليل التطوير","dashboard.docs.category.api":"وثائق واجهة برمجة التطبيقات","dashboard.docs.category.tutorial":"البرنامج التعليمي","dashboard.docs.category.faq":"الأسئلة الشائعة","dashboard.docs.featured.title":"الوثائق الموصى بها","dashboard.docs.featured.tag":"موصى به","dashboard.docs.list.views":"تصفح","dashboard.docs.list.author":"المؤلف","dashboard.docs.list.empty":"لا توجد وثيقة بعد","dashboard.docs.list.backToAll":"العودة إلى جميع الوثائق","dashboard.docs.list.total":"{count} من المستندات في المجموع","dashboard.docs.detail.back":"العودة إلى قائمة المستندات","dashboard.docs.detail.updatedAt":"تم التحديث على","dashboard.docs.detail.related":"الوثائق ذات الصلة","dashboard.docs.detail.notFound":"الوثيقة غير موجودة","dashboard.docs.detail.error":"المستند غير موجود أو تم حذفه","dashboard.docs.search.result":"نتائج البحث","dashboard.docs.search.keyword":"الكلمات الرئيسية","community.filter.indicatorType":"نوع المؤشر","community.filter.all":"الكل","community.filter.other":"خيارات أخرى","community.filter.pricing":"نوع التسعير","community.filter.allPricing":"جميع التسعير","community.filter.sortBy":"الترتيب حسب","community.filter.search":"بحث","community.filter.searchPlaceholder":"البحث عن اسم المقياس","community.indicatorType.trend":"نوع الاتجاه","community.indicatorType.momentum":"نوع الزخم","community.indicatorType.volatility":"التقلب","community.indicatorType.volume":"الحجم","community.indicatorType.custom":"تخصيص","community.pricing.free":"مجانا","community.pricing.paid":"ادفع","community.sort.downloads":"التنزيلات","community.sort.rating":"التقييم","community.sort.newest":"أحدث الإصدارات","community.pagination.total":"{total} مؤشرات في المجموع","community.noDescription":"لا يوجد وصف بعد","community.detail.type":"اكتب","community.detail.pricing":"التسعير","community.detail.rating":"التقييم","community.detail.downloads":"التنزيلات","community.detail.author":"المؤلف","community.detail.description":"مقدمة","community.detail.detailContent":"وصف تفصيلي","community.detail.backtestStats":"إحصائيات الاختبار الخلفي","community.action.purchase":"مؤشر الشراء","community.action.addToMyIndicators":"أضف إلى مؤشراتي","community.action.favorite":"المجموعة","community.action.unfavorite":"إلغاء المفضلة","community.action.buyNow":"اشتري الآن","community.action.renew":"التجديد","community.purchase.price":"السعر","community.purchase.permanent":"دائم","community.purchase.monthly":"شهر","community.purchase.confirmBuy":"هل تريد تأكيد شراء هذا المؤشر ({price} QDT)؟","community.purchase.confirmRenew":"هل تريد تأكيد تجديد هذا المؤشر ({price} QDT/month)؟","community.purchase.confirmFree":"هل تريد تأكيد إضافة هذا المؤشر المجاني؟","community.purchase.confirmTitle":"تأكيد الإجراء","community.purchase.owned":"لقد قمت بشراء هذا المؤشر (صالح بشكل دائم)","community.purchase.ownIndicator":"هذا هو المقياس الذي نشرته","community.purchase.expired":"لقد انتهت صلاحية اشتراكك","community.purchase.expiresOn":"وقت انتهاء الصلاحية: {التاريخ}","community.tabs.detail":"تفاصيل المؤشر","community.tabs.backtest":"بيانات الاختبار الخلفي","community.tabs.ratings":"مراجعات المستخدم","community.rating.myRating":"تقييمي","community.rating.stars":"{عد} النجوم","community.rating.commentPlaceholder":"شارك تجربتك...","community.rating.submit":"إرسال التقييم","community.rating.modify":"تعديل","community.rating.saveModify":"حفظ التغييرات","community.rating.cancel":"إلغاء","community.rating.selectRating":"الرجاء تحديد التقييم","community.rating.success":"التقييم ناجح","community.rating.modifySuccess":"تم تعديل المراجعة بنجاح","community.rating.failed":"فشل التقييم","community.rating.noRatings":"لا توجد تعليقات حتى الآن","community.backtest.note":"البيانات المذكورة أعلاه هي نتائج اختبار خلفي تاريخية وهي للإشارة فقط ولا تمثل أرباحًا مستقبلية.","community.backtest.noData":"لا توجد بيانات باكتست حتى الآن","community.backtest.uploadHint":"لم يقم المؤلف بتحميل بيانات الاختبار الخلفي حتى الآن","community.message.loadFailed":"فشل تحميل قائمة المؤشرات","community.message.purchaseProcessing":"جارٍ معالجة طلب الشراء...","community.message.downloadSuccess":"تمت إضافة المقياس إلى قائمة المقاييس الخاصة بي","community.message.favoriteSuccess":"تم التجميع بنجاح","community.message.unfavoriteSuccess":"تم إلغاء التجميع بنجاح","community.message.operationSuccess":"العملية ناجحة","community.message.operationFailed":"فشلت العملية","community.banner.readOnly":"للقراءة فقط","community.banner.loginHint":"لل تسجيل الدخول أو التسجيل، يرجى النقر على الزر للانتقال إلى صفحة مستقلة لتجنب مشاكل CSRF","community.banner.jumpButton":"الانتقال إلى تسجيل الدخول/التسجيل","dashboard.totalEquity":"إجمالي حقوق الملكية","dashboard.totalPnL":"إجمالي الربح والخسارة","dashboard.aiStrategies":"استراتيجية الذكاء الاصطناعي","dashboard.indicatorStrategies":"استراتيجية المؤشر","dashboard.running":"الجري","dashboard.pnlHistory":"الأرباح والخسائر التاريخية","dashboard.strategyPerformance":"نسبة الربح والخسارة في الاستراتيجية","dashboard.recentTrades":"المعاملات الأخيرة","dashboard.currentPositions":"الوضع الحالي","dashboard.table.time":"الوقت","dashboard.table.strategy":"اسم السياسة","dashboard.table.symbol":"الهدف","dashboard.table.type":"اكتب","dashboard.table.side":"الاتجاه","dashboard.table.size":"الفائدة المفتوحة","dashboard.table.entryPrice":"متوسط سعر الافتتاح","dashboard.table.price":"السعر","dashboard.table.amount":"الكمية","dashboard.table.profit":"الربح والخسارة","dashboard.pendingOrders":"سجل تنفيذ الطلبات","dashboard.totalOrders":"إجمالي {total} طلب","dashboard.viewError":"عرض الخطأ","dashboard.filled":"تم التنفيذ","dashboard.orderTable.time":"وقت الإنشاء","dashboard.orderTable.strategy":"الإستراتيجية","dashboard.orderTable.symbol":"زوج التداول","dashboard.orderTable.signalType":"نوع الإشارة","dashboard.orderTable.amount":"الكمية","dashboard.orderTable.price":"سعر التنفيذ","dashboard.orderTable.status":"الحالة","dashboard.orderTable.executedAt":"وقت التنفيذ","dashboard.signalType.openLong":"فتح Long","dashboard.signalType.openShort":"فتح Short","dashboard.signalType.closeLong":"إغلاق Long","dashboard.signalType.closeShort":"إغلاق Short","dashboard.signalType.addLong":"إضافة Long","dashboard.signalType.addShort":"إضافة Short","dashboard.status.pending":"قيد الانتظار","dashboard.status.processing":"قيد المعالجة","dashboard.status.completed":"مكتمل","dashboard.status.failed":"فشل","dashboard.status.cancelled":"ملغي","dashboard.table.pnl":"الربح أو الخسارة غير المحققة","form.basic-form.basic.title":"الشكل الأساسي","form.basic-form.basic.description":"تُستخدم صفحات النماذج لجمع المعلومات من المستخدمين أو التحقق منها. تُستخدم النماذج الأساسية بشكل شائع في سيناريوهات النماذج التي تحتوي على عدد قليل من عناصر البيانات.","form.basic-form.title.label":"العنوان","form.basic-form.title.placeholder":"إعطاء الهدف اسما","form.basic-form.title.required":"الرجاء إدخال عنوان","form.basic-form.date.label":"تاريخ البدء والانتهاء","form.basic-form.placeholder.start":"تاريخ البدء","form.basic-form.placeholder.end":"تاريخ الانتهاء","form.basic-form.date.required":"الرجاء تحديد تاريخي البدء والانتهاء","form.basic-form.goal.label":"وصف الهدف","form.basic-form.goal.placeholder":"الرجاء إدخال أهداف العمل المرحلية","form.basic-form.goal.required":"الرجاء إدخال وصف الهدف","form.basic-form.standard.label":"قياس","form.basic-form.standard.placeholder":"الرجاء إدخال المقاييس","form.basic-form.standard.required":"الرجاء إدخال المقاييس","form.basic-form.client.label":"العميل","form.basic-form.client.required":"يرجى وصف العملاء الذين تخدمهم","form.basic-form.label.tooltip":"متلقي الخدمة المستهدفين","form.basic-form.client.placeholder":"يرجى وصف العملاء الذين تخدمهم، والعملاء الداخليين مباشرةً @الاسم/رقم الوظيفة","form.basic-form.invites.label":"دعوة المراجعين","form.basic-form.invites.placeholder":"يرجى إرسال @الاسم/رقم الموظف مباشرةً، ويمكنك دعوة ما يصل إلى 5 أشخاص","form.basic-form.weight.label":"الوزن","form.basic-form.weight.placeholder":"من فضلك أدخل","form.basic-form.public.label":"تستهدف الجمهور","form.basic-form.label.help":"تتم مشاركة العملاء والمراجعين بشكل افتراضي","form.basic-form.radio.public":"عام","form.basic-form.radio.partially-public":"عامة جزئيا","form.basic-form.radio.private":"خاص","form.basic-form.publicUsers.placeholder":"مفتوح ل","form.basic-form.option.A":"زميل 1","form.basic-form.option.B":"زميل 2","form.basic-form.option.C":"زميل ثلاثة","form.basic-form.email.required":"الرجاء إدخال عنوان البريد الإلكتروني الخاص بك!","form.basic-form.email.wrong-format":"تنسيق عنوان البريد الإلكتروني خاطئ!","form.basic-form.userName.required":"الرجاء إدخال اسم المستخدم!","form.basic-form.password.required":"الرجاء إدخال كلمة المرور الخاصة بك!","form.basic-form.password.twice":"كلمات المرور التي تم إدخالها مرتين غير متطابقة!","form.basic-form.strength.msg":"الرجاء إدخال 6 أحرف على الأقل. يرجى عدم استخدام كلمات المرور التي يمكن تخمينها بسهولة.","form.basic-form.strength.strong":"القوة : قوية","form.basic-form.strength.medium":"القوة: متوسطة","form.basic-form.strength.short":"القوة : قصيرة جداً","form.basic-form.confirm-password.required":"الرجاء تأكيد كلمة المرور الخاصة بك!","form.basic-form.phone-number.required":"الرجاء إدخال رقم هاتفك المحمول!","form.basic-form.phone-number.wrong-format":"تنسيق رقم الهاتف المحمول خاطئ!","form.basic-form.verification-code.required":"الرجاء إدخال رمز التحقق!","form.basic-form.form.get-captcha":"الحصول على رمز التحقق","form.basic-form.captcha.second":"ثواني","form.basic-form.form.optional":"(اختياري)","form.basic-form.form.submit":"إرسال","form.basic-form.form.save":"حفظ","form.basic-form.email.placeholder":"البريد الإلكتروني","form.basic-form.password.placeholder":"كلمة المرور مكونة من 6 أحرف على الأقل، حساسة لحالة الأحرف","form.basic-form.confirm-password.placeholder":"تأكيد كلمة المرور","form.basic-form.phone-number.placeholder":"رقم الهاتف المحمول","form.basic-form.verification-code.placeholder":"رمز التحقق","result.success.title":"تم التقديم بنجاح","result.success.description":'يتم استخدام صفحة نتائج الإرسال لتقديم تعليقات على نتائج المعالجة لسلسلة من مهام التشغيل. إذا كانت عملية بسيطة فقط، فاستخدم رسالة الملاحظات العامة السريعة. يمكن لمنطقة النص هذه عرض تعليمات تكميلية بسيطة. إذا كانت هناك حاجة لعرض "المستندات"، فيمكن للمنطقة الرمادية أدناه عرض محتوى أكثر تعقيدًا.',"result.success.operate-title":"اسم المشروع","result.success.operate-id":"معرف المشروع","result.success.principal":"الشخص المسؤول","result.success.operate-time":"الوقت الفعال","result.success.step1-title":"إنشاء مشروع","result.success.step1-operator":"تشو ليلي","result.success.step2-title":"المراجعة الأولية للقسم","result.success.step2-operator":"تشو ماوماو","result.success.step2-extra":"عاجل","result.success.step3-title":"المراجعة المالية","result.success.step4-title":"كامل","result.success.btn-return":"العودة إلى القائمة","result.success.btn-project":"عرض العناصر","result.success.btn-print":"طباعة","result.fail.error.title":"فشل التقديم","result.fail.error.description":"يرجى التحقق من المعلومات التالية وتعديلها قبل إعادة الإرسال.","result.fail.error.hint-title":"يحتوي المحتوى الذي أرسلته على الأخطاء التالية:","result.fail.error.hint-text1":"لقد تم تجميد حسابك","result.fail.error.hint-btn1":"ذوبان الجليد على الفور","result.fail.error.hint-text2":"حسابك ليس مؤهلاً بعد للتقديم","result.fail.error.hint-btn2":"قم بالترقية الآن","result.fail.error.btn-text":"العودة إلى التعديل","account.settings.menuMap.custom":"التخصيص","account.settings.menuMap.binding":"ربط الحساب","account.settings.basic.avatar":"الصورة الرمزية","account.settings.basic.change-avatar":"تغيير الصورة الرمزية","account.settings.basic.email":"البريد الإلكتروني","account.settings.basic.email-message":"الرجاء إدخال البريد الإلكتروني الخاص بك!","account.settings.basic.nickname":"اللقب","account.settings.basic.nickname-message":"الرجاء إدخال اللقب الخاص بك!","account.settings.basic.profile":"الملف الشخصي","account.settings.basic.profile-message":"الرجاء إدخال ملف التعريف الشخصي الخاص بك!","account.settings.basic.profile-placeholder":"الملف الشخصي","account.settings.basic.country":"البلد/المنطقة","account.settings.basic.country-message":"الرجاء إدخال بلدك أو منطقتك!","account.settings.basic.geographic":"المحافظة والمدينة","account.settings.basic.geographic-message":"من فضلك أدخل محافظتك ومدينتك!","account.settings.basic.address":"عنوان الشارع","account.settings.basic.address-message":"الرجاء إدخال عنوان الشارع الخاص بك!","account.settings.basic.phone":"رقم الاتصال","account.settings.basic.phone-message":"الرجاء إدخال رقم الاتصال الخاص بك!","account.settings.basic.update":"تحديث المعلومات الأساسية","account.settings.basic.update.success":"تم تحديث المعلومات الأساسية بنجاح","account.settings.security.strong":"قوي","account.settings.security.medium":"في","account.settings.security.weak":"ضعيف","account.settings.security.password":"كلمة مرور الحساب","account.settings.security.password-description":"قوة كلمة المرور الحالية:","account.settings.security.phone":"الهاتف المحمول الأمن","account.settings.security.phone-description":"الهاتف المحمول المرتبط بالفعل:","account.settings.security.question":"القضايا الأمنية","account.settings.security.question-description":"لم يتم تعيين أي أسئلة أمنية، الأمر الذي يمكن أن يحمي أمان الحساب بشكل فعال.","account.settings.security.email":"ربط البريد الإلكتروني","account.settings.security.email-description":"عنوان البريد الإلكتروني المرتبط بالفعل:","account.settings.security.mfa":"جهاز ام اف ايه","account.settings.security.mfa-description":"جهاز MFA غير مقيد. بعد الربط، يمكنك التأكيد مرة أخرى.","account.settings.security.modify":"تعديل","account.settings.security.set":"الإعدادات","account.settings.security.bind":"ملزمة","account.settings.binding.taobao":"ربط تاوباو","account.settings.binding.taobao-description":"حساب تاوباو غير ملزم حاليا","account.settings.binding.alipay":"ربط عليباي","account.settings.binding.alipay-description":"حساب Alipay غير ملزم حاليا","account.settings.binding.dingding":"ملزمة DingTalk","account.settings.binding.dingding-description":"لا يوجد حساب DingTalk مرتبط حاليًا","account.settings.binding.bind":"ملزمة","account.settings.notification.password":"كلمة مرور الحساب","account.settings.notification.password-description":"سيتم إخطار الرسائل الواردة من المستخدمين الآخرين في شكل رسائل موقع.","account.settings.notification.messages":"رسائل النظام","account.settings.notification.messages-description":"سيتم إخطار رسائل النظام في شكل رسائل الموقع.","account.settings.notification.todo":"المهام الواجبة","account.settings.notification.todo-description":"سيتم إخطار المهام الواجبة في شكل رسائل داخل الموقع","account.settings.settings.open":"مفتوح","account.settings.settings.close":"قريب","trading-assistant.title":"مساعد التداول","trading-assistant.strategyList":"قائمة الإستراتيجية","trading-assistant.createStrategy":"إنشاء سياسة","trading-assistant.noStrategy":"لا توجد استراتيجية حتى الآن","trading-assistant.selectStrategy":"يرجى تحديد استراتيجية من اليسار لعرض التفاصيل","trading-assistant.startStrategy":"استراتيجية الإطلاق","trading-assistant.stopStrategy":"استراتيجية التوقف","trading-assistant.editStrategy":"استراتيجية التحرير","trading-assistant.deleteStrategy":"حذف السياسة","trading-assistant.status.running":"الجري","trading-assistant.status.stopped":"توقف","trading-assistant.status.error":"خطأ","trading-assistant.strategyType.IndicatorStrategy":"استراتيجية المؤشر الفني","trading-assistant.strategyType.PromptBasedStrategy":"استراتيجية الكلمات الدلالية","trading-assistant.strategyType.GridStrategy":"استراتيجية الشبكة","trading-assistant.tabs.tradingRecords":"تاريخ المعاملة","trading-assistant.tabs.positions":"سجل الموقف","trading-assistant.tabs.equityCurve":"منحنى الأسهم","trading-assistant.form.step1":"حدد المؤشرات","trading-assistant.form.step2":"تكوين الصرف","trading-assistant.form.step3":"معلمات الاستراتيجية","trading-assistant.form.indicator":"حدد المؤشرات","trading-assistant.form.indicatorHint":"يمكنك فقط تحديد المؤشرات الفنية التي اشتريتها أو أنشأتها","trading-assistant.form.qdtCostHints":"سيؤدي استخدام الإستراتيجية إلى استهلاك QDT، يرجى التأكد من أن الحساب به رصيد كافٍ من QDT","trading-assistant.form.indicatorDescription":"وصف المؤشر","trading-assistant.form.noDescription":"لا يوجد وصف بعد","trading-assistant.form.exchange":"اختر الصرف","trading-assistant.form.apiKey":"مفتاح واجهة برمجة التطبيقات","trading-assistant.form.secretKey":"المفتاح السري","trading-assistant.form.passphrase":"عبارة المرور","trading-assistant.form.testConnection":"اتصال الاختبار","trading-assistant.form.strategyName":"اسم السياسة","trading-assistant.form.symbol":"زوج التداول","trading-assistant.form.symbolHint":"حاليًا، يتم دعم أزواج تداول العملات المشفرة فقط","trading-assistant.form.initialCapital":"حجم الاستثمار","trading-assistant.form.marketType":"نوع السوق","trading-assistant.form.marketTypeFutures":"العقد","trading-assistant.form.marketTypeSpot":"بقعة","trading-assistant.form.marketTypeHint":"يدعم العقد التداول في اتجاهين والرافعة المالية، في حين أن السعر الفوري يدعم فقط المراكز الطويلة والرافعة المالية ثابتة عند 1x","trading-assistant.form.leverage":"الاستفادة المتعددة","trading-assistant.form.leverageHint":"العقد: 1-125 مرة، البقعة: ثابتة 1 مرة","trading-assistant.form.spotLeverageFixed":"الرافعة المالية للتداول الفوري ثابتة عند 1x","trading-assistant.form.spotOnlyLongHint":"التداول الفوري يدعم فقط المراكز الطويلة","trading-assistant.form.tradeDirection":"اتجاه التداول","trading-assistant.form.tradeDirectionLong":"طويلة فقط","trading-assistant.form.tradeDirectionShort":"قصيرة فقط","trading-assistant.form.tradeDirectionBoth":"معاملة في اتجاهين","trading-assistant.form.timeframe":"الفترة الزمنية","trading-assistant.form.klinePeriod":"فترة K-Line","trading-assistant.form.timeframe1m":"1 دقيقة","trading-assistant.form.timeframe5m":"5 دقائق","trading-assistant.form.timeframe15m":"15 دقيقة","trading-assistant.form.timeframe30m":"30 دقيقة","trading-assistant.form.timeframe1H":"1 ساعة","trading-assistant.form.timeframe4H":"4 ساعات","trading-assistant.form.timeframe1D":"يوم واحد","trading-assistant.form.selectStrategyType":"اختر نوع الاستراتيجية","trading-assistant.form.indicatorStrategy":"استراتيجية المؤشر","trading-assistant.form.indicatorStrategyDesc":"استراتيجية تداول آلية تعتمد على المؤشرات الفنية","trading-assistant.form.aiStrategy":"استراتيجية AI","trading-assistant.form.aiStrategyDesc":"استراتيجية تداول آلية تعتمد على اتخاذ القرار الذكي للذكاء الاصطناعي","trading-assistant.form.enableAiFilter":"تفعيل مرشح اتخاذ القرار الذكي للذكاء الاصطناعي","trading-assistant.form.enableAiFilterHint":"عند التفعيل، سيتم تصفية إشارات المؤشر بواسطة الذكاء الاصطناعي لتحسين جودة التداول","trading-assistant.form.aiFilterPrompt":"موجه مخصص","trading-assistant.form.aiFilterPromptHint":"توفير تعليمات مخصصة لتصفية الذكاء الاصطناعي، اتركه فارغًا لاستخدام الإعداد الافتراضي للنظام","trading-assistant.validation.strategyTypeRequired":"يرجى اختيار نوع الاستراتيجية","trading-assistant.form.advancedSettings":"الإعدادات المتقدمة","trading-assistant.form.orderMode":"وضع الطلب","trading-assistant.form.orderModeMaker":"صانع","trading-assistant.form.orderModeTaker":"سعر السوق (المتلقي)","trading-assistant.form.orderModeHint":"يستخدم وضع الأمر المعلق أوامر الحد وتكون رسوم المناولة أقل؛ يتم تنفيذ وضع سعر السوق على الفور وتكون رسوم المناولة أعلى.","trading-assistant.form.makerWaitSec":"وقت الانتظار للأوامر المعلقة (ثواني)","trading-assistant.form.makerWaitSecHint":"الوقت اللازم لانتظار المعاملة بعد تقديم الطلب. قم بالإلغاء وحاول مرة أخرى بعد انتهاء المهلة.","trading-assistant.form.makerRetries":"عدد مرات إعادة المحاولة للأوامر المعلقة","trading-assistant.form.makerRetriesHint":"الحد الأقصى لعدد مرات إعادة المحاولة عندما لا يتم تنفيذ الأمر المعلق","trading-assistant.form.fallbackToMarket":"يفشل الأمر المعلق ويتم تخفيض سعر السوق.","trading-assistant.form.fallbackToMarketHint":"عندما لا يتم إكمال أمر الفتح/الإغلاق المعلق، ما إذا كان ينبغي تخفيضه إلى أمر سوق لضمان اكتمال المعاملة.","trading-assistant.form.marginMode":"وضع الهامش","trading-assistant.form.marginModeCross":"مستودع كامل","trading-assistant.form.marginModeIsolated":"موقف معزول","trading-assistant.form.stopLossPct":"نسبة وقف الخسارة (٪)","trading-assistant.form.stopLossPctHint":"قم بتعيين نسبة وقف الخسارة، 0 يعني عدم تمكين وقف الخسارة","trading-assistant.form.takeProfitPct":"نسبة جني الأرباح (%)","trading-assistant.form.takeProfitPctHint":"قم بتعيين نسبة أخذ الربح، 0 يعني تعطيل أخذ الربح","trading-assistant.form.signalMode":"وضع الإشارة","trading-assistant.form.signalModeConfirmed":"تأكيد الوضع","trading-assistant.form.signalModeAggressive":"الوضع العدواني","trading-assistant.form.signalModeHint":"وضع التأكيد: يتحقق فقط من خطوط K المكتملة؛ الوضع العدواني: يتحقق أيضًا من تشكيل خطوط K","trading-assistant.form.cancel":"إلغاء","trading-assistant.form.prev":"الخطوة السابقة","trading-assistant.form.next":"الخطوة التالية","trading-assistant.form.confirmCreate":"تأكيد الإنشاء","trading-assistant.form.confirmEdit":"تأكيد التغييرات","trading-assistant.messages.createSuccess":"تم إنشاء الإستراتيجية بنجاح","trading-assistant.messages.createFailed":"فشل في إنشاء السياسة","trading-assistant.messages.updateSuccess":"تم تحديث السياسة بنجاح","trading-assistant.messages.updateFailed":"فشل تحديث السياسة","trading-assistant.messages.deleteSuccess":"تم حذف السياسة بنجاح","trading-assistant.messages.deleteFailed":"فشل سياسة الحذف","trading-assistant.messages.startSuccess":"بدأت الإستراتيجية بنجاح","trading-assistant.messages.startFailed":"فشل في بدء السياسة","trading-assistant.messages.stopSuccess":"تم إيقاف الإستراتيجية بنجاح","trading-assistant.messages.stopFailed":"فشلت استراتيجية التوقف","trading-assistant.messages.loadFailed":"فشل الحصول على قائمة السياسات","trading-assistant.messages.runningWarning":"الاستراتيجية قيد التشغيل. يرجى إيقاف الإستراتيجية قبل تعديلها.","trading-assistant.messages.deleteConfirmWithName":'هل أنت متأكد أنك تريد حذف السياسة "{name}"؟ هذه العملية لا رجعة فيها.',"trading-assistant.messages.deleteConfirm":"هل أنت متأكد أنك تريد حذف هذه السياسة؟ هذه العملية لا رجعة فيها.","trading-assistant.messages.loadTradesFailed":"فشل في الحصول على سجلات المعاملات","trading-assistant.messages.loadPositionsFailed":"فشل الحصول على سجل الموقف","trading-assistant.messages.loadEquityFailed":"فشل في الحصول على منحنى الأسهم","trading-assistant.messages.loadIndicatorsFailed":"فشل تحميل قائمة المؤشرات، يرجى المحاولة مرة أخرى في وقت لاحق","trading-assistant.messages.spotLimitations":"تم ضبط التداول الفوري تلقائيًا على رافعة مالية طويلة فقط بمقدار 1x","trading-assistant.messages.autoFillApiConfig":"تمت تعبئة تكوين واجهة برمجة التطبيقات التاريخية للبورصة تلقائيًا","trading-assistant.placeholders.selectIndicator":"الرجاء تحديد مؤشر","trading-assistant.placeholders.selectExchange":"الرجاء تحديد التبادل","trading-assistant.placeholders.inputApiKey":"الرجاء إدخال مفتاح API","trading-assistant.placeholders.inputSecretKey":"الرجاء إدخال المفتاح السري","trading-assistant.placeholders.inputPassphrase":"الرجاء إدخال عبارة المرور","trading-assistant.placeholders.inputStrategyName":"الرجاء إدخال اسم السياسة","trading-assistant.placeholders.selectSymbol":"يرجى اختيار زوج التداول","trading-assistant.placeholders.selectTimeframe":"الرجاء تحديد الفترة الزمنية","trading-assistant.placeholders.selectKlinePeriod":"الرجاء تحديد فترة K-Line","trading-assistant.placeholders.inputAiFilterPrompt":"الرجاء إدخال موجه مخصص (اختياري)","trading-assistant.validation.indicatorRequired":"الرجاء تحديد مؤشر","trading-assistant.validation.exchangeRequired":"الرجاء تحديد التبادل","trading-assistant.validation.apiKeyRequired":"الرجاء إدخال مفتاح API","trading-assistant.validation.secretKeyRequired":"الرجاء إدخال المفتاح السري","trading-assistant.validation.passphraseRequired":"الرجاء إدخال عبارة المرور","trading-assistant.validation.exchangeConfigIncomplete":"يرجى ملء معلومات تكوين التبادل الكاملة","trading-assistant.validation.testConnectionRequired":'يرجى النقر على زر "اختبار الاتصال" أولاً والتأكد من نجاح الاتصال',"trading-assistant.validation.testConnectionFailed":"فشل اختبار الاتصال، يرجى التحقق من التكوين وإعادة المحاولة","trading-assistant.validation.credentialRequired":"يرجى إضافة واختبار بيانات اعتماد التبادل في المركز الشخصي أولاً","trading-assistant.validation.strategyNameRequired":"الرجاء إدخال اسم السياسة","trading-assistant.validation.symbolRequired":"يرجى اختيار زوج التداول","trading-assistant.validation.initialCapitalRequired":"الرجاء إدخال مبلغ الاستثمار","trading-assistant.validation.leverageRequired":"الرجاء إدخال نسبة الرافعة المالية","trading-assistant.table.time":"الوقت","trading-assistant.table.type":"اكتب","trading-assistant.table.price":"السعر","trading-assistant.table.amount":"الكمية","trading-assistant.table.value":"المبلغ","trading-assistant.table.commission":"رسوم المناولة","trading-assistant.table.symbol":"زوج التداول","trading-assistant.table.side":"الاتجاه","trading-assistant.table.size":"كمية الموقف","trading-assistant.table.entryPrice":"سعر الافتتاح","trading-assistant.table.currentPrice":"السعر الحالي","trading-assistant.table.unrealizedPnl":"الربح أو الخسارة غير المحققة","trading-assistant.table.pnlPercent":"نسبة الربح والخسارة","trading-assistant.table.buy":"شراء","trading-assistant.table.sell":"بيع","trading-assistant.table.long":"اذهب لفترة طويلة","trading-assistant.table.short":"قصيرة","trading-assistant.table.noPositions":"لا توجد مناصب حتى الآن","trading-assistant.detail.title":"تفاصيل الاستراتيجية","trading-assistant.detail.strategyName":"اسم السياسة","trading-assistant.detail.strategyType":"نوع الإستراتيجية","trading-assistant.detail.status":"الحالة","trading-assistant.detail.tradingMode":"نموذج التداول","trading-assistant.detail.exchange":"تبادل","trading-assistant.detail.initialCapital":"رأس المال الأولي","trading-assistant.detail.totalInvestment":"إجمالي مبلغ الاستثمار","trading-assistant.detail.currentEquity":"صافي القيمة الحالية","trading-assistant.detail.totalPnl":"إجمالي الربح والخسارة","trading-assistant.detail.indicatorName":"اسم المؤشر","trading-assistant.detail.maxLeverage":"الحد الأقصى للرافعة المالية","trading-assistant.detail.decideInterval":"الفاصل الزمني للقرار","trading-assistant.detail.symbols":"كائن المعاملة","trading-assistant.detail.createdAt":"وقت الخلق","trading-assistant.detail.updatedAt":"وقت التحديث","trading-assistant.detail.llmConfig":"تكوين نموذج الذكاء الاصطناعي","trading-assistant.detail.exchangeConfig":"تكوين الصرف","trading-assistant.detail.provider":"مزود","trading-assistant.detail.modelId":"معرف النموذج","trading-assistant.detail.close":"إغلاق","trading-assistant.detail.loadFailed":"فشل الحصول على تفاصيل السياسة","trading-assistant.equity.noData":"لا توجد بيانات عن صافي القيمة حتى الآن","trading-assistant.equity.equity":"صافي القيمة","trading-assistant.exchange.tradingMode":"نموذج التداول","trading-assistant.exchange.virtual":"محاكاة التداول","trading-assistant.exchange.live":"معاملة حقيقية","trading-assistant.exchange.selectExchange":"اختر الصرف","trading-assistant.exchange.walletAddress":"عنوان المحفظة","trading-assistant.exchange.walletAddressPlaceholder":"الرجاء إدخال عنوان محفظتك (يبدأ بـ 0x)","trading-assistant.exchange.privateKey":"مفتاح خاص","trading-assistant.exchange.privateKeyPlaceholder":"الرجاء إدخال المفتاح الخاص (64 حرفًا)","trading-assistant.exchange.testConnection":"اتصال الاختبار","trading-assistant.exchange.connectionSuccess":"تم الاتصال بنجاح","trading-assistant.exchange.connectionFailed":"فشل الاتصال","trading-assistant.exchange.testFailed":"فشل اختبار الاتصال","trading-assistant.exchange.fillComplete":"يرجى ملء معلومات تكوين التبادل الكاملة","trading-assistant.strategyTypeOptions.ai":"استراتيجية تعتمد على الذكاء الاصطناعي","trading-assistant.strategyTypeOptions.indicator":"استراتيجية المؤشر الفني","trading-assistant.strategyTypeOptions.aiDeveloping":"إن وظيفة الإستراتيجية المبنية على الذكاء الاصطناعي قيد التطوير، لذا ترقبوا ذلك","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"ميزات الإستراتيجية المعتمدة على الذكاء الاصطناعي قيد التطوير","trading-assistant.indicatorType.trend":"الاتجاه","trading-assistant.indicatorType.momentum":"الزخم","trading-assistant.indicatorType.volatility":"التقلب","trading-assistant.indicatorType.volume":"الحجم","trading-assistant.indicatorType.custom":"تخصيص","trading-assistant.exchangeNames":{okx:"أوكي إكس",binance:"بينانس",hyperliquid:"السائل الزائد",blockchaincom:"Blockchain.com",coinbaseexchange:"كوين بيس",gate:"بوابة.io",mexc:"ميكسك",kraken:"كراكن",bitfinex:"بيتفينكس",bybit:"بايبيت",kucoin:"كيو كوين",huobi:"هوبي",bitget:"بيتجيت",bitmex:"بيتميكس",deribit:"ديربيت",phemex:"فيميكس",bitmart:"بيتمارت",bitstamp:"بيتستامب",bittrex:"بيتريكس",poloniex:"بولونيكس",gemini:"الجوزاء",cryptocom:"تشفير.كوم",bitflyer:"bitFlyer",upbit:"أوبيت",bithumb:"بيتهامب",coinone:"عملة واحدة",zb:"ZB",lbank:"بنك إل",bibox:"بيبوكس",bigone:"BigONE",bitrue:"صحيح",coinex:"كوين إكس",digifinex:"DigiFinex",ftx:"إف تي إكس",ftxus:"إف تي إكس الولايات المتحدة",binanceus:"بينانس الولايات المتحدة",binancecoinm:"عملة بينانس-M",binanceusdm:"Binance USDⓈ-M",deepcoin:"ديبكوين"},"ai-trading-assistant.title":"مساعد التداول بالذكاء الاصطناعي","ai-trading-assistant.strategyList":"قائمة الإستراتيجية","ai-trading-assistant.createStrategy":"إنشاء سياسة","ai-trading-assistant.noStrategy":"لا توجد استراتيجية حتى الآن","ai-trading-assistant.selectStrategy":"يرجى تحديد استراتيجية من اليسار لعرض التفاصيل","ai-trading-assistant.startStrategy":"استراتيجية الإطلاق","ai-trading-assistant.stopStrategy":"استراتيجية التوقف","ai-trading-assistant.editStrategy":"استراتيجية التحرير","ai-trading-assistant.deleteStrategy":"حذف السياسة","ai-trading-assistant.status.running":"الجري","ai-trading-assistant.status.stopped":"توقف","ai-trading-assistant.status.error":"خطأ","ai-trading-assistant.tabs.tradingRecords":"تاريخ المعاملة","ai-trading-assistant.tabs.positions":"سجل الموقف","ai-trading-assistant.tabs.aiDecisions":"سجل قرار الذكاء الاصطناعي","ai-trading-assistant.tabs.equityCurve":"منحنى الأسهم","ai-trading-assistant.form.createTitle":"إنشاء استراتيجيات التداول بالذكاء الاصطناعي","ai-trading-assistant.form.editTitle":"تحرير استراتيجية التداول بالذكاء الاصطناعي","ai-trading-assistant.form.strategyName":"اسم السياسة","ai-trading-assistant.form.modelId":"نموذج الذكاء الاصطناعي","ai-trading-assistant.form.modelIdHint":"استخدم خدمة OpenRouter الخاصة بالنظام دون تكوين مفتاح API","ai-trading-assistant.form.decideInterval":"الفاصل الزمني للقرار","ai-trading-assistant.form.decideInterval5m":"5 دقائق","ai-trading-assistant.form.decideInterval10m":"10 دقائق","ai-trading-assistant.form.decideInterval30m":"30 دقيقة","ai-trading-assistant.form.decideInterval1h":"1 ساعة","ai-trading-assistant.form.decideInterval4h":"4 ساعات","ai-trading-assistant.form.decideInterval1d":"يوم واحد","ai-trading-assistant.form.decideInterval1w":"1 أسبوع","ai-trading-assistant.form.decideIntervalHint":"الفاصل الزمني للذكاء الاصطناعي لاتخاذ القرارات","ai-trading-assistant.form.runPeriod":"تشغيل دورة","ai-trading-assistant.form.runPeriodHint":"وقت البدء ووقت الانتهاء لتشغيل الإستراتيجية","ai-trading-assistant.form.startDate":"تاريخ البدء","ai-trading-assistant.form.endDate":"تاريخ الانتهاء","ai-trading-assistant.form.qdtCostTitle":"تعليمات خصم QDT","ai-trading-assistant.form.qdtCostHint":"سيتم خصم {cost} QDT لكل قرار للذكاء الاصطناعي. يرجى التأكد من أن حسابك يحتوي على رصيد QDT كافٍ. أثناء تنفيذ الإستراتيجية، سيتم خصم الرسوم في الوقت الفعلي لكل قرار.","ai-trading-assistant.form.apiKey":"مفتاح واجهة برمجة التطبيقات","ai-trading-assistant.form.exchange":"اختر الصرف","ai-trading-assistant.form.secretKey":"المفتاح السري","ai-trading-assistant.form.passphrase":"عبارة المرور","ai-trading-assistant.form.testConnection":"اتصال الاختبار","ai-trading-assistant.form.symbol":"زوج التداول","ai-trading-assistant.form.symbolHint":"حدد زوج التداول للتداول","ai-trading-assistant.form.initialCapital":"المبلغ المستثمر (الهامش)","ai-trading-assistant.form.leverage":"الاستفادة المتعددة","ai-trading-assistant.form.timeframe":"الفترة الزمنية","ai-trading-assistant.form.timeframe1m":"1 دقيقة","ai-trading-assistant.form.timeframe5m":"5 دقائق","ai-trading-assistant.form.timeframe15m":"15 دقيقة","ai-trading-assistant.form.timeframe30m":"30 دقيقة","ai-trading-assistant.form.timeframe1H":"1 ساعة","ai-trading-assistant.form.timeframe4H":"4 ساعات","ai-trading-assistant.form.timeframe1D":"يوم واحد","ai-trading-assistant.form.marketType":"نوع السوق","ai-trading-assistant.form.marketTypeFutures":"العقد","ai-trading-assistant.form.marketTypeSpot":"بقعة","ai-trading-assistant.form.totalPnl":"إجمالي الربح والخسارة","ai-trading-assistant.form.customPrompt":"كلمات موجهة مخصصة","ai-trading-assistant.form.customPromptHint":"اختياري، يُستخدم لتخصيص استراتيجيات التداول بالذكاء الاصطناعي ومنطق اتخاذ القرار","ai-trading-assistant.form.cancel":"إلغاء","ai-trading-assistant.form.prev":"الخطوة السابقة","ai-trading-assistant.form.next":"الخطوة التالية","ai-trading-assistant.form.confirmCreate":"تأكيد الإنشاء","ai-trading-assistant.form.confirmEdit":"تأكيد التغييرات","ai-trading-assistant.messages.createSuccess":"تم إنشاء الإستراتيجية بنجاح","ai-trading-assistant.messages.createFailed":"فشل في إنشاء السياسة","ai-trading-assistant.messages.updateSuccess":"تم تحديث السياسة بنجاح","ai-trading-assistant.messages.updateFailed":"فشل تحديث السياسة","ai-trading-assistant.messages.deleteSuccess":"تم حذف السياسة بنجاح","ai-trading-assistant.messages.deleteFailed":"فشل سياسة الحذف","ai-trading-assistant.messages.startSuccess":"بدأت الإستراتيجية بنجاح","ai-trading-assistant.messages.startFailed":"فشل في بدء السياسة","ai-trading-assistant.messages.stopSuccess":"تم إيقاف الإستراتيجية بنجاح","ai-trading-assistant.messages.stopFailed":"فشلت استراتيجية التوقف","ai-trading-assistant.messages.loadFailed":"فشل الحصول على قائمة السياسات","ai-trading-assistant.messages.loadDecisionsFailed":"فشل في الحصول على سجل قرار الذكاء الاصطناعي","ai-trading-assistant.messages.deleteConfirm":"هل أنت متأكد أنك تريد حذف هذه السياسة؟ هذه العملية لا رجعة فيها.","ai-trading-assistant.placeholders.inputStrategyName":"الرجاء إدخال اسم السياسة","ai-trading-assistant.placeholders.selectModelId":"الرجاء تحديد نموذج الذكاء الاصطناعي","ai-trading-assistant.placeholders.selectDecideInterval":"الرجاء تحديد الفاصل الزمني للقرار","ai-trading-assistant.placeholders.startTime":"وقت البدء","ai-trading-assistant.placeholders.endTime":"وقت النهاية","ai-trading-assistant.placeholders.inputApiKey":"الرجاء إدخال مفتاح API","ai-trading-assistant.placeholders.selectExchange":"الرجاء تحديد التبادل","ai-trading-assistant.placeholders.inputSecretKey":"الرجاء إدخال المفتاح السري","ai-trading-assistant.placeholders.inputPassphrase":"الرجاء إدخال عبارة المرور","ai-trading-assistant.placeholders.selectSymbol":"يرجى تحديد زوج تداول، مثل: BTC/USDT","ai-trading-assistant.placeholders.selectTimeframe":"الرجاء تحديد الفترة الزمنية","ai-trading-assistant.placeholders.inputCustomPrompt":"الرجاء إدخال كلمة مطالبة مخصصة (اختياري)","ai-trading-assistant.validation.strategyNameRequired":"الرجاء إدخال اسم السياسة","ai-trading-assistant.validation.modelIdRequired":"الرجاء تحديد نموذج الذكاء الاصطناعي","ai-trading-assistant.validation.runPeriodRequired":"الرجاء تحديد دورة التشغيل","ai-trading-assistant.validation.apiKeyRequired":"الرجاء إدخال مفتاح API","ai-trading-assistant.validation.exchangeRequired":"الرجاء تحديد التبادل","ai-trading-assistant.validation.secretKeyRequired":"الرجاء إدخال المفتاح السري","ai-trading-assistant.validation.symbolRequired":"يرجى اختيار زوج التداول","ai-trading-assistant.validation.initialCapitalRequired":"الرجاء إدخال مبلغ الاستثمار","ai-trading-assistant.table.time":"الوقت","ai-trading-assistant.table.type":"اكتب","ai-trading-assistant.table.price":"السعر","ai-trading-assistant.table.amount":"الكمية","ai-trading-assistant.table.value":"المبلغ","ai-trading-assistant.table.symbol":"زوج التداول","ai-trading-assistant.table.side":"الاتجاه","ai-trading-assistant.table.size":"كمية الموقف","ai-trading-assistant.table.entryPrice":"سعر الافتتاح","ai-trading-assistant.table.currentPrice":"السعر الحالي","ai-trading-assistant.table.unrealizedPnl":"الربح أو الخسارة غير المحققة","ai-trading-assistant.table.profit":"الربح والخسارة","ai-trading-assistant.table.openLong":"مفتوح لفترة طويلة","ai-trading-assistant.table.closeLong":"بيندو","ai-trading-assistant.table.openShort":"فتح قصيرة","ai-trading-assistant.table.closeShort":"فارغ","ai-trading-assistant.table.addLong":"غادوت","ai-trading-assistant.table.addShort":"إضافة قصيرة","ai-trading-assistant.table.closeShortProfit":"جني الأرباح من المركز القصير","ai-trading-assistant.table.closeShortStop":"وقف الخسارة","ai-trading-assistant.table.closeLongProfit":"توقف لفترة طويلة وجني الأرباح","ai-trading-assistant.table.closeLongStop":"وقف الخسارة","ai-trading-assistant.table.buy":"شراء","ai-trading-assistant.table.sell":"بيع","ai-trading-assistant.table.long":"اذهب لفترة طويلة","ai-trading-assistant.table.short":"قصيرة","ai-trading-assistant.table.hold":"عقد","ai-trading-assistant.table.reasoning":"سبب التحليل","ai-trading-assistant.table.decisions":"صنع القرار","ai-trading-assistant.table.riskAssessment":"تقييم المخاطر","ai-trading-assistant.table.confidence":"الثقة","ai-trading-assistant.table.totalRecords":"{total} السجلات في المجموع","ai-trading-assistant.table.noPositions":"لا توجد مناصب حتى الآن","ai-trading-assistant.detail.title":"تفاصيل الاستراتيجية","ai-trading-assistant.equity.noData":"لا توجد بيانات عن صافي القيمة حتى الآن","ai-trading-assistant.equity.equity":"صافي القيمة","ai-trading-assistant.exchange.testFailed":"فشل اختبار الاتصال","ai-trading-assistant.exchange.connectionSuccess":"تم الاتصال بنجاح","ai-trading-assistant.exchange.connectionFailed":"فشل الاتصال","ai-trading-assistant.form.advancedSettings":"الإعدادات المتقدمة","ai-trading-assistant.form.orderMode":"وضع الطلب","ai-trading-assistant.form.orderModeMaker":"صانع","ai-trading-assistant.form.orderModeTaker":"سعر السوق (المتلقي)","ai-trading-assistant.form.orderModeHint":"يستخدم وضع الأمر المعلق أوامر الحد وتكون رسوم المناولة أقل؛ يتم تنفيذ وضع سعر السوق على الفور وتكون رسوم المناولة أعلى.","ai-trading-assistant.form.makerWaitSec":"وقت الانتظار للأوامر المعلقة (ثواني)","ai-trading-assistant.form.makerWaitSecHint":"الوقت اللازم لانتظار المعاملة بعد تقديم الطلب. قم بالإلغاء وحاول مرة أخرى بعد انتهاء المهلة.","ai-trading-assistant.form.makerRetries":"عدد مرات إعادة المحاولة للأوامر المعلقة","ai-trading-assistant.form.makerRetriesHint":"الحد الأقصى لعدد مرات إعادة المحاولة عندما لا يتم تنفيذ الأمر المعلق","ai-trading-assistant.form.fallbackToMarket":"يفشل الأمر المعلق ويتم تخفيض سعر السوق.","ai-trading-assistant.form.fallbackToMarketHint":"عندما لا يتم إكمال أمر الفتح/الإغلاق المعلق، ما إذا كان ينبغي تخفيضه إلى أمر سوق لضمان اكتمال المعاملة.","ai-trading-assistant.form.marginMode":"وضع الهامش","ai-trading-assistant.form.marginModeCross":"مستودع كامل","ai-trading-assistant.form.marginModeIsolated":"موقف معزول","ai-analysis.title":"محرك التداول الكمي","ai-analysis.system.online":"على الانترنت","ai-analysis.system.agents":"وكيل","ai-analysis.system.active":"نشط","ai-analysis.system.stage":"المرحلة","ai-analysis.panel.roster":"تشكيلة الوكيل","ai-analysis.panel.thinking":"أفكر...","ai-analysis.panel.done":"كامل","ai-analysis.panel.standby":"الاستعداد","ai-analysis.input.title":"محرك التداول الكمي","ai-analysis.input.placeholder":"حدد الأصول المستهدفة (مثل BTC/USDT)","ai-analysis.input.watchlist":"الأسهم الاختيارية","ai-analysis.input.start":"ابدأ التحليل","ai-analysis.input.recent":"المهام الأخيرة:","ai-analysis.vis.stage":"المرحلة","ai-analysis.vis.processing":"المعالجة","ai-analysis.result.complete":"اكتمل التحليل","ai-analysis.result.signal":"الإشارة النهائية","ai-analysis.result.confidence":"الثقة:","ai-analysis.result.new":"تحليل جديد","ai-analysis.result.full":"عرض التقرير كاملا","ai-analysis.logs.title":"سجل النظام","ai-analysis.modal.title":"تقرير سري","ai-analysis.modal.fundamental":"التحليل الأساسي","ai-analysis.modal.technical":"التحليل الفني","ai-analysis.modal.sentiment":"التحليل العاطفي","ai-analysis.modal.risk":"تقييم المخاطر","ai-analysis.stage.idle":"الاستعداد","ai-analysis.stage.1":"المرحلة الأولى: التحليل متعدد الأبعاد","ai-analysis.stage.2":"المرحلة الثانية: المناقشة الطويلة والقصيرة","ai-analysis.stage.3":"المرحلة الثالثة: التخطيط الاستراتيجي","ai-analysis.stage.4":"المرحلة الرابعة: مراجعة مراقبة المخاطر","ai-analysis.stage.complete":"كامل","ai-analysis.agent.investment_director":"مدير الاستثمار","ai-analysis.agent.role.investment_director":"تحليل شامل واستنتاج نهائي","ai-analysis.agent.market":"محلل السوق","ai-analysis.agent.role.market":"التكنولوجيا وبيانات السوق","ai-analysis.agent.fundamental":"محلل أساسي","ai-analysis.agent.role.fundamental":"التمويل والتقييم","ai-analysis.agent.technical":"محلل فني","ai-analysis.agent.role.technical":"المؤشرات الفنية والرسوم البيانية","ai-analysis.agent.news":"محلل اخبار","ai-analysis.agent.role.news":"مرشح الأخبار العالمية","ai-analysis.agent.sentiment":"محلل المشاعر","ai-analysis.agent.role.sentiment":"الاجتماعية والعاطفية","ai-analysis.agent.risk":"محلل المخاطر","ai-analysis.agent.role.risk":"فحص المخاطر الأساسية","ai-analysis.agent.bull":"الباحث الصاعد","ai-analysis.agent.role.bull":"التعدين محفز النمو","ai-analysis.agent.bear":"الباحث الهابط","ai-analysis.agent.role.bear":"حفر المخاطر والعيوب","ai-analysis.agent.manager":"مدير البحوث","ai-analysis.agent.role.manager":"مشرف المناقشة","ai-analysis.agent.trader":"تاجر","ai-analysis.agent.role.trader":"استراتيجي تنفيذي","ai-analysis.agent.risky":"محلل ناشط","ai-analysis.agent.role.risky":"استراتيجية عدوانية","ai-analysis.agent.neutral":"محلل التوازن","ai-analysis.agent.role.neutral":"استراتيجية التوازن","ai-analysis.agent.safe":"محلل محافظ","ai-analysis.agent.role.safe":"استراتيجية محافظة","ai-analysis.agent.cro":"مدير مراقبة المخاطر (CRO)","ai-analysis.agent.role.cro":"سلطة اتخاذ القرار النهائي","ai-analysis.script.market":"جارٍ جلب بيانات OHLCV من البورصات الرئيسية...","ai-analysis.script.fundamental":"استخراج التقارير المالية الربع سنوية...","ai-analysis.script.technical":"تحليل المؤشرات الفنية وأنماط الرسم البياني.","ai-analysis.script.news":"متابعة الأخبار المالية العالمية...","ai-analysis.script.sentiment":"تحليل اتجاهات وسائل التواصل الاجتماعي...","ai-analysis.script.risk":"حساب التقلبات التاريخية...","invite.inviteLink":"رابط الدعوة","invite.copy":"انسخ الرابط","invite.copySuccess":"تم النسخ بنجاح!","invite.copyFailed":"فشل النسخ، يرجى النسخ يدويًا","invite.noInviteLink":"لم يتم إنشاء رابط الدعوة","invite.totalInvites":"الدعوات التراكمية","invite.totalReward":"المكافآت التراكمية","invite.rules":"قواعد الدعوة","invite.rule1":"في كل مرة تقوم فيها بدعوة صديق بنجاح للتسجيل، سوف تحصل على مكافأة","invite.rule2":"إذا أكمل الصديق المدعو المعاملة الأولى، فستحصل على مكافآت إضافية","invite.rule3":"سيتم إرسال مكافآت الدعوة مباشرة إلى حسابك","invite.inviteList":"قائمة الدعوة","invite.tasks":"مركز البعثة","invite.inviteeName":"المدعو","invite.inviteTime":"وقت الدعوة","invite.status":"الحالة","invite.reward":"مكافأة","invite.active":"نشط","invite.inactive":"لم يتم تفعيلها","invite.completed":"مكتمل","invite.claimed":"تم الاستلام","invite.pending":"ليتم الانتهاء منها","invite.goToTask":"لإكمال","invite.claimReward":"المطالبة بالمكافآت","invite.verify":"اكتمل التحقق","invite.verifySuccess":"تم التحقق بنجاح! اكتملت المهمة","invite.verifyNotCompleted":"المهمة لم تكتمل بعد، يرجى إكمال المهمة أولا","invite.verifyFailed":"فشل التحقق، يرجى المحاولة مرة أخرى في وقت لاحق","invite.claimSuccess":"تم استلام {reward} QDT بنجاح!","invite.claimFailed":"فشل التجميع، يرجى المحاولة مرة أخرى لاحقًا","invite.totalRecords":"{total} السجلات في المجموع","invite.task.twitter.title":"إعادة تغريد إلى X (تويتر)","invite.task.twitter.desc":"شارك تغريداتنا الرسمية على حساب X (Twitter) الخاص بك","invite.task.youtube.title":"تابع قناتنا على اليوتيوب","invite.task.youtube.desc":"اشترك وتابع قناتنا الرسمية على اليوتيوب","invite.task.telegram.title":"انضم إلى مجموعة تيليجرام","invite.task.telegram.desc":"انضم إلى مجموعة مجتمع Telegram الرسمية لدينا","invite.task.discord.title":"انضم إلى خادم Discord","invite.task.discord.desc":"انضم إلى خادم مجتمع Discord الخاص بنا",message:"-","layouts.usermenu.dialog.title":"معلومات","layouts.usermenu.dialog.content":"هل أنت متأكد أنك تريد تسجيل الخروج؟","layouts.userLayout.title":"ابحث عن الحقيقة في حالة عدم اليقين","dashboard.indicator.boundary.message":"Note: The indicator script only computes plots + buy/sell signals. Position sizing, risk, scaling, fees/slippage belong to execution config.","dashboard.indicator.boundary.indicatorRule":"Keep the script to buy/sell only (and set df['buy']/df['sell']). Do NOT implement position management, TP/SL, scaling in the script.","dashboard.indicator.boundary.backtestRule":"Rule: If a bar has a main signal (buy/sell → open/close/reverse), scaling in/out is skipped on the same bar.","dashboard.indicator.guide.title":"Python Indicator & Strategy Development Guide","dashboard.indicator.guide.intro":"This platform supports writing custom technical indicators and trading signals using Python. The system includes built-in pandas and numpy data analysis libraries. You can use standard DataFrame operations to process K-line data and draw charts or mark buy/sell signals.","dashboard.indicator.guide.section1.title":"1. Runtime Environment & Predefined Variables","dashboard.indicator.guide.section1.env":"Your code runs in a browser-based Python environment (Pyodide).","dashboard.indicator.guide.section1.libs":"Pre-installed Libraries","dashboard.indicator.guide.section1.libsDesc":"The following libraries are imported by default, no need to import again:","dashboard.indicator.guide.section1.libsList":"pandas (pd), numpy (np), math, json","dashboard.indicator.guide.section1.data":"Input Data: df","dashboard.indicator.guide.section1.dataDesc":"The system automatically converts current K-line data into a Pandas DataFrame object, variable name is df.","dashboard.indicator.guide.section1.dataColumns":"df contains the following columns (all float type):","dashboard.indicator.guide.section1.dataColumnsList":"time (timestamp, seconds), open, high, low, close, volume","dashboard.indicator.guide.section1.dataNote":"Data index is arranged from old to new (0 is the earliest data, last row is the latest data).","dashboard.indicator.guide.section1.dataIndex":"Important: df index is timestamp (DatetimeIndex), please preserve the index, avoid using .values which loses the index.","dashboard.indicator.guide.section2.title":"2. Parameter Definition","dashboard.indicator.guide.section2.desc":"You can define variables as parameters at the beginning of your code. The system will try to parse statements like variable = value as adjustable parameters.","dashboard.indicator.guide.section2.example":"Parameter Example","dashboard.indicator.guide.section2.exampleCode":"span = 20 or multiplier = 2.0","dashboard.indicator.guide.section3.title":"3. Backtest Signal Setup (Important!)","dashboard.indicator.guide.section3.desc":"If you want your indicator to support backtesting, you must set the following two columns in your code:","dashboard.indicator.guide.section3.backtestRequired":"Required for Backtesting:","dashboard.indicator.guide.section3.backtestBuySignal":"df['buy_signal'] - Boolean Series, True indicates buy signal","dashboard.indicator.guide.section3.backtestSellSignal":"df['sell_signal'] - Boolean Series, True indicates sell signal","dashboard.indicator.guide.section3.backtestExample":"Example:","dashboard.indicator.guide.section3.backtestExampleCode":"df['buy_signal'] = condition_buy
df['sell_signal'] = condition_sell","dashboard.indicator.guide.section3.backtestNote":"Note: Even if you only set output.signals for chart display, you must set these two columns to enable backtesting.","dashboard.indicator.guide.section4.title":"4. Output Requirements: output","dashboard.indicator.guide.section4.desc":"At the end of code execution, you must define a dictionary named output to tell the chart how to display results.","dashboard.indicator.guide.section4.fields":"The output dictionary contains the following fields:","dashboard.indicator.guide.section4.plots":"plots - For drawing lines (e.g., moving averages, RSI)","dashboard.indicator.guide.section4.signals":"signals - For marking buy/sell signals (e.g., arrows, labels)","dashboard.indicator.guide.section4.name":"name - Indicator name (optional)","dashboard.indicator.guide.section4.calculatedVars":"calculatedVars - Calculated variables (optional, for displaying additional information)","dashboard.indicator.guide.section5.title":"5. Plot Configuration (Plots)","dashboard.indicator.guide.section5.desc":"Each object in the plots list represents a line.","dashboard.indicator.guide.section5.table.field":"Field","dashboard.indicator.guide.section5.table.type":"Type","dashboard.indicator.guide.section5.table.required":"Required","dashboard.indicator.guide.section5.table.requiredYes":"Yes","dashboard.indicator.guide.section5.table.requiredNo":"No","dashboard.indicator.guide.section5.table.desc":"Description","dashboard.indicator.guide.section5.table.name":"The name of the indicator line, displayed in the legend","dashboard.indicator.guide.section5.table.data":"Data list, length must match the number of rows in df. Recommended to use series.tolist()","dashboard.indicator.guide.section5.table.color":"Line color (Hex format, e.g. '#ff0000'). If not filled, the system will automatically assign","dashboard.indicator.guide.section5.table.typeDesc":"Chart type, default is 'line'","dashboard.indicator.guide.section5.table.overlay":"Important. True means display on main chart (with K-line), False means display on sub-chart (independent area)","dashboard.indicator.guide.section5.example":"Example: Draw Simple Moving Average (SMA)","dashboard.indicator.guide.section5.exampleCalc":"Calculate SMA","dashboard.indicator.guide.section5.exampleOutput":"Construct Output","dashboard.indicator.guide.section5.exampleOverlay":"Display on main chart","dashboard.indicator.guide.section6.title":"6. Signal Markers (Signals)","dashboard.indicator.guide.section6.desc":"signals are used to mark buy/sell points on specific K-lines through icons or text. Note: This is only for chart display. The backtest system uses df['buy_signal'] and df['sell_signal'].","dashboard.indicator.guide.section6.table.type":"Signal type: 'buy' (buy, marked below K-line) or 'sell' (sell, marked above K-line)","dashboard.indicator.guide.section6.table.data":"Signal data list. Fill price value at signal positions, fill None (or np.nan) at non-signal positions","dashboard.indicator.guide.section6.table.text":'Text displayed on the label (e.g. "B", "S", "Buy", "Sell")',"dashboard.indicator.guide.section6.table.color":"Marker color","dashboard.indicator.guide.section6.hint":"The system automatically handles positioning.","dashboard.indicator.guide.section6.buy":"Markers will be automatically positioned below the Low of the current K-line","dashboard.indicator.guide.section6.sell":"Markers will be automatically positioned above the High of the current K-line","dashboard.indicator.guide.section6.example":"Example: Draw Buy/Sell Signals","dashboard.indicator.guide.section6.exampleInit":"Initialize signal list, fill all with None","dashboard.indicator.guide.section6.exampleLogic":"Simple logic: mark buy when close price is greater than open price","dashboard.indicator.guide.section6.exampleNote":"In actual logic, please use loops or vectorized operations","dashboard.indicator.guide.section6.examplePrice":"Record price","dashboard.indicator.guide.section6.exampleText":"Buy","dashboard.indicator.guide.section7.title":"7. Complete Code Examples","dashboard.indicator.guide.section7.exampleA":"Example A: Dual EMA Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleACode":'# 1. Calculate indicators
df[\'ema_fast\'] = df[\'close\'].ewm(span=5, adjust=False).mean()
df[\'ema_slow\'] = df[\'close\'].ewm(span=13, adjust=False).mean()

# 2. Calculate crossover signals
cross_up = (df[\'ema_fast\'] > df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) <= df[\'ema_slow\'].shift(1))
cross_down = (df[\'ema_fast\'] < df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) >= df[\'ema_slow\'].shift(1))

# 3. 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = cross_up
df[\'close_long\'] = cross_down
df[\'open_short\'] = cross_down
df[\'close_short\'] = cross_up

# 4. Generate signal data for chart display
buy_signals = [df[\'low\'].iloc[i] * 0.995 if cross_up.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if cross_down.iloc[i] else None for i in range(len(df))]

# 5. Build output
output = {
"name": "Dual EMA Strategy",
"plots": [
{"name": "EMA 5", "data": df[\'ema_fast\'].tolist(), "color": "#FF6B6B", "overlay": True},
{"name": "EMA 13", "data": df[\'ema_slow\'].tolist(), "color": "#4ECDC4", "overlay": True}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section7.exampleB":"Example B: Bollinger Bands - Chart Display Only","dashboard.indicator.guide.section7.exampleBCode":'# Calculate Bollinger Bands (chart display only, no backtesting)
length = 20
mult = 2.0
df[\'sma\'] = df[\'close\'].rolling(length).mean()
df[\'std\'] = df[\'close\'].rolling(length).std()
df[\'upper\'] = df[\'sma\'] + mult * df[\'std\']
df[\'lower\'] = df[\'sma\'] - mult * df[\'std\']

output = {
"name": "Bollinger Bands",
"plots": [
{"name": "Upper", "data": df[\'upper\'].tolist(), "color": "#FF5252", "overlay": True},
{"name": "Middle", "data": df[\'sma\'].tolist(), "color": "#2196F3", "overlay": True},
{"name": "Lower", "data": df[\'lower\'].tolist(), "color": "#00E676", "overlay": True}
]
}',"dashboard.indicator.guide.section7.exampleC":"Example C: RSI Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleCCode":'# Calculate RSI
delta = df[\'close\'].diff()
up = delta.clip(lower=0)
down = -1 * delta.clip(upper=0)
ema_up = up.ewm(com=13, adjust=False).mean()
ema_down = down.ewm(com=13, adjust=False).mean()
rs = ema_up / ema_down
df[\'rsi\'] = 100 - (100 / (1 + rs))

# Generate trading signals
buy_condition = df[\'rsi\'] < 30 # Oversold buy
sell_condition = df[\'rsi\'] > 70 # Overbought sell

# 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = buy_condition
df[\'close_long\'] = sell_condition
df[\'open_short\'] = sell_condition
df[\'close_short\'] = buy_condition

# Generate chart signals
buy_signals = [df[\'low\'].iloc[i] * 0.995 if buy_condition.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if sell_condition.iloc[i] else None for i in range(len(df))]

output = {
"name": "RSI Strategy",
"plots": [
{"name": "RSI", "data": df[\'rsi\'].tolist(), "color": "#9C27B0", "overlay": False},
{"name": "Overbought", "data": [70] * len(df), "color": "#FF5252", "style": "dashed", "overlay": False},
{"name": "Oversold", "data": [30] * len(df), "color": "#00E676", "style": "dashed", "overlay": False}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section6.param":"Parameters","dashboard.indicator.guide.section6.calc":"Calculate","dashboard.indicator.guide.section6.output":"Output","dashboard.indicator.guide.section6.generate":"Generate signal data (initialize with None)","dashboard.indicator.guide.section6.subchart":"Display on sub-chart","dashboard.indicator.guide.section8.title":"8. Frequently Asked Questions (FAQ)","dashboard.indicator.guide.section8.q1":"Q: Why can't my indicator be backtested?","dashboard.indicator.guide.section8.a1":"A: The backtest system requires NEW signal columns: df['open_long'], df['close_long'], df['open_short'], df['close_short'] (boolean). Even if you set output.signals for chart display, you must set these columns to enable backtesting.","dashboard.indicator.guide.section8.q2":"Q: Data length mismatch?","dashboard.indicator.guide.section8.a2":"A: The data list in plots and signals must have exactly the same length as the K-line data. If you use df['xxx'].tolist(), there is usually no problem.","dashboard.indicator.guide.section8.q3":"Q: How to handle NaN (empty values)?","dashboard.indicator.guide.section8.a3":"A: Pandas calculations (such as rolling mean) will produce NaN at the beginning. The system will automatically convert NaN to null for chart rendering. You don't need to manually clean it, but if you need specific logic, you can use df.fillna(0) or other methods.","dashboard.indicator.guide.section8.q4":"Q: Index mismatch causing all signals to be NaN?","dashboard.indicator.guide.section8.a4":"A: Please ensure you preserve the original df index (timestamp). Avoid using .values to create new Series. Use columns directly like df['close'] for operations.","dashboard.indicator.guide.section8.q5":"Q: Can I use third-party network libraries?","dashboard.indicator.guide.section8.a5":"A: No. The runtime environment is a browser sandbox and cannot use libraries like requests to request external APIs, nor can it install additional pip packages. Limited to built-in libraries such as pandas, numpy, math, json.","dashboard.indicator.guide.section8.q6":"Q: How to debug code?","dashboard.indicator.guide.section8.a6":"A: If the chart does not display indicators, it is usually because the Python code has an error. Please check for syntax errors or array index out of bounds. It is recommended to debug the algorithm logic in a local Python environment first, then copy it in.","dashboard.indicator.guide.section8.q7":"Q: Backtest shows 0 signals?","dashboard.indicator.guide.section8.a7":"A: Please check the data type of df['open_long']/df['close_long']/df['open_short']/df['close_short']. They should be boolean (True/False), not numeric. Use condition.fillna(False).astype(bool) to ensure correct type.","dashboard.indicator.backtest.commissionHint":"Charged on notional value (incl. leverage) per trade; both entry & exit are deducted from balance.","dashboard.indicator.backtest.historyTitle":"Backtest History","dashboard.indicator.backtest.historyRefresh":"Refresh","dashboard.indicator.backtest.historyView":"View","dashboard.indicator.backtest.historyNoData":"No backtest history","dashboard.indicator.backtest.historyUseCurrent":"Only current symbol/timeframe","dashboard.indicator.backtest.historyFilterSymbol":"Symbol","dashboard.indicator.backtest.historyFilterTimeframe":"Timeframe","dashboard.indicator.backtest.historyApply":"Apply filters","dashboard.indicator.backtest.historyAIAnalyze":"AI Analyze","dashboard.indicator.backtest.historyAIAnalyzeTitle":"AI Suggestions","dashboard.indicator.backtest.historyNoAIResult":"No AI analysis result","dashboard.indicator.backtest.historyRunId":"Run ID","dashboard.indicator.backtest.historyCreatedAt":"Time","dashboard.indicator.backtest.historyRange":"Range","dashboard.indicator.backtest.historyStatus":"Status","dashboard.indicator.backtest.historyStatusSuccess":"Success","dashboard.indicator.backtest.historyStatusFailed":"Failed","dashboard.indicator.backtest.historyActions":"Actions","dashboard.indicator.backtest.hint.entryPctMax":"Max entry: {maxPct}% (reserve budget for future scale-ins)","trading-assistant.exchange.ipWhitelistTip":"Please add the following IPs to the whitelist in your exchange API settings:","signal-robot.title":"Signal Robot Console","signal-robot.createBot":"Create New Bot","signal-robot.search.nameOrSymbol":"Name/Symbol","signal-robot.search.placeholder":"Search bot name or symbol","signal-robot.search.status":"Status","signal-robot.search.statusAll":"All","signal-robot.search.statusRunning":"Running","signal-robot.search.statusPaused":"Paused","signal-robot.search.query":"Query","signal-robot.search.reset":"Reset","signal-robot.table.botName":"Bot Name","signal-robot.table.symbolTimeframe":"Symbol/Timeframe","signal-robot.table.triggerStrategy":"Trigger Strategy","signal-robot.table.notificationChannels":"Notification Channels","signal-robot.table.status":"Status","signal-robot.table.action":"Action","signal-robot.table.triggerConditions":"{count} trigger conditions","signal-robot.table.monitoring":"Monitoring","signal-robot.table.paused":"Paused","signal-robot.table.edit":"Edit","signal-robot.table.pause":"Pause","signal-robot.table.start":"Start","signal-robot.table.delete":"Delete","signal-robot.table.deleteConfirm":"Are you sure you want to delete this bot?","signal-robot.table.deleteSuccess":"Deleted successfully","signal-robot.table.startSuccess":"Bot started","signal-robot.table.pauseSuccess":"Bot paused","signal-robot.channel.telegram":"Telegram","signal-robot.channel.discord":"Discord","signal-robot.channel.email":"Email","signal-robot.channel.webhook":"Webhook","signal-robot.channel.browser":"Browser Push","signal-robot.modal.createTitle":"Create New Signal Robot","signal-robot.modal.editTitle":"Edit Signal Robot","signal-robot.modal.step.basic":"Basic Settings","signal-robot.modal.step.entry":"Entry Strategy","signal-robot.modal.step.position":"Position Management","signal-robot.modal.step.risk":"Risk Control","signal-robot.modal.step.notify":"Notification Config","signal-robot.modal.prev":"Previous","signal-robot.modal.next":"Next","signal-robot.modal.preview":"Preview Backtest","signal-robot.modal.complete":"Complete & Run","signal-robot.modal.saveSuccess":"Saved successfully","signal-robot.modal.previewDeveloping":"Preview feature is under development...","signal-robot.modal.basicInfoRequired":"Please complete basic information","signal-robot.basic.alert":"Set basic information for the bot","signal-robot.basic.title":"Basic Information","signal-robot.basic.botName":"Bot Name","signal-robot.basic.botNamePlaceholder":"e.g.: BTC SuperTrend Strategy","signal-robot.basic.symbol":"Trading Pair","signal-robot.basic.symbolPlaceholder":"Select from watchlist","signal-robot.basic.noWatchlist":"No watchlist items, please add in market page first","signal-robot.basic.timeframe":"K-Line Period","signal-robot.basic.timeframe15m":"15 Minutes","signal-robot.basic.timeframe30m":"30 Minutes","signal-robot.basic.timeframe1h":"1 Hour","signal-robot.basic.timeframe4h":"4 Hours","signal-robot.basic.timeframe1d":"1 Day","signal-robot.basic.autoNameSuggestion":"{symbol} Signal Robot","signal-robot.entry.alert":"Trigger entry signal when all conditions below are met","signal-robot.entry.condition":"Condition {index}","signal-robot.entry.indicator":"Indicator","signal-robot.entry.indicatorSupertrend":"SuperTrend","signal-robot.entry.indicatorEma":"EMA (Exponential Moving Average)","signal-robot.entry.indicatorRsi":"RSI (Relative Strength Index)","signal-robot.entry.indicatorMacd":"MACD","signal-robot.entry.indicatorBollinger":"Bollinger Bands","signal-robot.entry.atrPeriod":"ATR Period","signal-robot.entry.multiplier":"Multiplier","signal-robot.entry.triggerSignal":"Trigger Signal","signal-robot.entry.signalTrendBullish":"Trend Bullish","signal-robot.entry.signalTrendBearish":"Trend Bearish","signal-robot.entry.signalIsUptrend":"Is Uptrend","signal-robot.entry.signalIsDowntrend":"Is Downtrend","signal-robot.entry.period":"Period","signal-robot.entry.compareCondition":"Compare Condition","signal-robot.entry.priceAbove":"Price > EMA (Price Above)","signal-robot.entry.priceBelow":"Price < EMA (Price Below)","signal-robot.entry.crossUp":"Price Crosses Above EMA (Golden Cross)","signal-robot.entry.crossDown":"Price Crosses Below EMA (Death Cross)","signal-robot.entry.compare":"Compare","signal-robot.entry.greaterThan":"Greater Than","signal-robot.entry.lessThan":"Less Than","signal-robot.entry.crossUpShort":"Cross Up","signal-robot.entry.crossDownShort":"Cross Down","signal-robot.entry.threshold":"Threshold","signal-robot.entry.selectIndicator":"Please select an indicator to configure parameters","signal-robot.entry.addCondition":"Add Condition","signal-robot.position.alert":"Configure initial position size, leverage and pyramiding rules","signal-robot.position.basicTitle":"Basic Position Management","signal-robot.position.initialSize":"Initial Size (Capital %)","signal-robot.position.initialSizeHint":"Recommended 5% - 20%","signal-robot.position.leverage":"Leverage","signal-robot.position.leverageHint":"Please ensure your exchange account supports this leverage","signal-robot.position.maxPyramiding":"Max Pyramiding Times","signal-robot.position.maxPyramidingHint":"0 means no pyramiding","signal-robot.position.pyramidingTitle":"Pyramiding Rules","signal-robot.position.pyramidingEnabled":"Enabled","signal-robot.position.pyramidingDisabled":"Disabled","signal-robot.position.pyramidingCondition":"Pyramiding Trigger Condition","signal-robot.position.priceRisePct":"Price Rises (Long) / Falls (Short)","signal-robot.position.profitPct":"Profit Reaches","signal-robot.position.triggerThreshold":"Trigger Threshold (%)","signal-robot.position.triggerThresholdHint":"e.g. 3%: add position once every 3% rise","signal-robot.position.addSize":"Single Add Size (Capital %)","signal-robot.position.pyramidingDisabledHint":"Pyramiding disabled, only initial position will be executed","signal-robot.risk.alert":"Configure take profit, stop loss and exit rules","signal-robot.risk.stopLossTitle":"Stop Loss","signal-robot.risk.stopLossEnabled":"Enabled","signal-robot.risk.stopLossDisabled":"Disabled","signal-robot.risk.stopLossType":"Stop Loss Type","signal-robot.risk.stopLossFixedPct":"Fixed Percentage","signal-robot.risk.stopLossAtrMultiplier":"ATR Multiplier","signal-robot.risk.stopLossValue":"Value","signal-robot.risk.stopLossFixedHint":"e.g. 2%: stop loss when loss reaches 2%","signal-robot.risk.stopLossAtrHint":"e.g. 2.0: stop loss when price touches ATR*2.0","signal-robot.risk.stopLossDisabledHint":"Stop loss disabled (high risk)","signal-robot.risk.trailingStopTitle":"Trailing Stop","signal-robot.risk.activationProfit":"Activation Profit (%)","signal-robot.risk.activationProfitHint":"Start trailing when profit reaches this level","signal-robot.risk.callbackPct":"Callback (%)","signal-robot.risk.callbackPctHint":"Trigger take profit when price falls from peak by this percentage","signal-robot.risk.trailingStopDisabledHint":"Trailing stop disabled","signal-robot.risk.otherExitTitle":"Other Exit Rules","signal-robot.risk.signalExit":"Allow Signal Exit","signal-robot.risk.signalExitHint":"Close position immediately when reverse signal appears (e.g. close long when short signal appears)","signal-robot.notify.alert":"Configure notification methods when signal is triggered","signal-robot.notify.channelTitle":"Notification Channels","signal-robot.notify.discordWebhook":"Discord Webhook","signal-robot.notify.genericWebhook":"Generic Webhook","signal-robot.notify.webhookUrl":"Webhook URL","signal-robot.notify.webhookUrlPlaceholder":"https://example.com/webhook","signal-robot.notify.discordUrl":"Discord URL","signal-robot.notify.discordUrlPlaceholder":"https://discord.com/api/webhooks/...","signal-robot.operator.greaterThan":"Greater Than","signal-robot.operator.lessThan":"Less Than","signal-robot.operator.equal":"Equal","signal-robot.operator.goldenCross":"Golden Cross","signal-robot.operator.deathCross":"Death Cross","signal-robot.operator.increaseBy":"Increase By","signal-robot.operator.decreaseBy":"Decrease By","signal-robot.indicator.price":"Price","signal-robot.indicator.rsi":"RSI","signal-robot.indicator.kdjK":"KDJ(K)","signal-robot.indicator.kdjJ":"KDJ(J)","signal-robot.indicator.macd":"MACD","signal-robot.indicator.macdHist":"MACD Histogram","signal-robot.indicator.bollingerUp":"Bollinger Upper","signal-robot.indicator.bollingerLow":"Bollinger Lower","signal-robot.indicator.volume":"Volume","signal-robot.indicator.changePct1h":"1H Change %","signal-robot.indicator.changePct24h":"24H Change %","signal-robot.indicator.signalLine":"Signal Line","settings.group.agent_memory":"الذاكرة/الانعكاس","settings.group.reflection_worker":"عامل التحقق التلقائي للانعكاس","settings.field.ENABLE_AGENT_MEMORY":"تمكين ذاكرة الوكيل","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"تمكين الاسترجاع المتجهي (محلي)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"بُعد التضمين","settings.field.AGENT_MEMORY_TOP_K":"عدد الاسترجاع Top-K","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"حجم نافذة المرشحين","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"نصف عمر تلاشي الزمن (أيام)","settings.field.AGENT_MEMORY_W_SIM":"وزن التشابه","settings.field.AGENT_MEMORY_W_RECENCY":"وزن الحداثة","settings.field.AGENT_MEMORY_W_RETURNS":"وزن العائد","settings.field.ENABLE_REFLECTION_WORKER":"تمكين التحقق التلقائي","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"فاصل التحقق (ثانية)","profile.notifications.title":"إعدادات الإشعارات","profile.notifications.hint":"قم بتكوين طرق الإشعارات الافتراضية، سيتم استخدامها تلقائياً عند إنشاء مراقبة الأصول والتنبيهات","profile.notifications.defaultChannels":"قنوات الإشعارات الافتراضية","profile.notifications.browser":"إشعار داخل التطبيق","profile.notifications.email":"البريد الإلكتروني","profile.notifications.phone":"رسالة نصية","profile.notifications.telegramBotToken":"Telegram Bot Token","profile.notifications.telegramBotTokenPlaceholder":"أدخل Telegram Bot Token الخاص بك","profile.notifications.telegramBotTokenHint":"أنشئ بوت عبر @BotFather للحصول على Token","profile.notifications.telegramChatId":"Telegram Chat ID","profile.notifications.telegramPlaceholder":"أدخل Telegram Chat ID الخاص بك (مثال: 123456789)","profile.notifications.telegramHint":"أرسل /start إلى @userinfobot للحصول على Chat ID","profile.notifications.notifyEmail":"بريد الإشعارات","profile.notifications.emailPlaceholder":"عنوان البريد الإلكتروني لاستلام الإشعارات","profile.notifications.emailHint":"يستخدم بريد الحساب بشكل افتراضي، يمكنك تعيين بريد آخر","profile.notifications.phonePlaceholder":"أدخل رقم الهاتف (مثال: +966501234567)","profile.notifications.phoneHint":"يحتاج المسؤول إلى تكوين خدمة Twilio","profile.notifications.discordWebhook":"Discord Webhook","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"أنشئ Webhook في إعدادات خادم Discord","profile.notifications.webhookUrl":"Webhook URL","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"عنوان Webhook مخصص، يرسل الإشعارات عبر POST JSON","profile.notifications.webhookToken":"Webhook Token (اختياري)","profile.notifications.webhookTokenPlaceholder":"Bearer Token للتحقق من الطلب","profile.notifications.webhookTokenHint":"يُرسل كـ Authorization: Bearer Token إلى Webhook","profile.notifications.testBtn":"إرسال إشعار تجريبي","profile.notifications.saveSuccess":"تم حفظ إعدادات الإشعارات بنجاح","profile.notifications.selectChannel":"الرجاء اختيار قناة إشعار واحدة على الأقل","profile.notifications.fillTelegramToken":"الرجاء إدخال Telegram Bot Token","profile.notifications.fillTelegram":"الرجاء إدخال Telegram Chat ID","profile.notifications.fillEmail":"الرجاء إدخال بريد الإشعارات","profile.notifications.testSent":"تم إرسال الإشعار التجريبي، يرجى التحقق من قنوات الإشعارات"},f=(0,e.A)((0,e.A)({},p),y)}}]); \ No newline at end of file diff --git a/frontend/dist/js/lang-ar-SA.194c8ea0.js b/frontend/dist/js/lang-ar-SA.194c8ea0.js deleted file mode 100644 index ee6252a..0000000 --- a/frontend/dist/js/lang-ar-SA.194c8ea0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[618],{34254:function(a,t,i){i.d(t,{default:function(){return f}});var e=i(57888),s={items_per_page:"/ الصفحة",jump_to:"الذهاب إلى",jump_to_confirm:"تأكيد",page:"",prev_page:"الصفحة السابقة",next_page:"الصفحة التالية",prev_5:"خمس صفحات سابقة",next_5:"خمس صفحات تالية",prev_3:"ثلاث صفحات سابقة",next_3:"ثلاث صفحات تالية"},o=i(85505),r={today:"اليوم",now:"الأن",backToToday:"العودة إلى اليوم",ok:"تأكيد",clear:"مسح",month:"الشهر",year:"السنة",timeSelect:"اختيار الوقت",dateSelect:"اختيار التاريخ",monthSelect:"اختيار الشهر",yearSelect:"اختيار السنة",decadeSelect:"اختيار العقد",yearFormat:"YYYY",dateFormat:"M/D/YYYY",dayFormat:"D",dateTimeFormat:"M/D/YYYY HH:mm:ss",monthBeforeYear:!0,previousMonth:"الشهر السابق (PageUp)",nextMonth:"الشهر التالى(PageDown)",previousYear:"العام السابق (Control + left)",nextYear:"العام التالى (Control + right)",previousDecade:"العقد السابق",nextDecade:"العقد التالى",previousCentury:"القرن السابق",nextCentury:"القرن التالى"},n={placeholder:"اختيار الوقت"},d=n,l={lang:(0,o.A)({placeholder:"اختيار التاريخ",rangePlaceholder:["البداية","النهاية"]},r),timePickerLocale:(0,o.A)({},d),dateFormat:"DD-MM-YYYY",monthFormat:"MM-YYYY",dateTimeFormat:"DD-MM-YYYY HH:mm:ss",weekFormat:"wo-YYYY"},c=l,g=c,b={locale:"ar",Pagination:s,DatePicker:c,TimePicker:d,Calendar:g,Table:{filterTitle:"الفلاتر",filterConfirm:"تأكيد",filterReset:"إعادة ضبط",selectAll:"اختيار الكل",selectInvert:"إلغاء الاختيار"},Modal:{okText:"تأكيد",cancelText:"إلغاء",justOkText:"تأكيد"},Popconfirm:{okText:"تأكيد",cancelText:"إلغاء"},Transfer:{searchPlaceholder:"ابحث هنا",itemUnit:"عنصر",itemsUnit:"عناصر"},Upload:{uploading:"جاري الرفع...",removeFile:"احذف الملف",uploadError:"مشكلة فى الرفع",previewFile:"استعرض الملف",downloadFile:"تحميل الملف"},Empty:{description:"لا توجد بيانات"}},m=b,h=i(61509),u=i.n(h),p={antLocale:m,momentName:"ar",momentLocale:u()},y={submit:"إرسال",save:"حفظ","submit.ok":"تم التقديم بنجاح","save.ok":"تم الحفظ بنجاح","menu.welcome":"مرحبا بكم","menu.home":"الصفحة الرئيسية","menu.dashboard":"لوحة القيادة","menu.dashboard.indicator":"تحليل المؤشر","menu.dashboard.community":"مجتمع المؤشرات","menu.dashboard.analysis":"تحليل الذكاء الاصطناعي","menu.dashboard.tradingAssistant":"مساعد التداول","menu.dashboard.aiTradingAssistant":"مساعد التداول بالذكاء الاصطناعي","menu.dashboard.signalRobot":"روبوت الإشارة","menu.dashboard.monitor":"صفحة المراقبة","menu.dashboard.workplace":"طاولة العمل","menu.form":"صفحة النموذج","menu.form.basic-form":"الشكل الأساسي","menu.form.step-form":"شكل خطوة بخطوة","menu.form.step-form.info":"نموذج خطوة بخطوة (املأ معلومات النقل)","menu.form.step-form.confirm":"نموذج خطوة بخطوة (تأكيد معلومات النقل)","menu.form.step-form.result":"نموذج خطوة بخطوة (كامل)","menu.form.advanced-form":"نماذج متقدمة","menu.list":"صفحة القائمة","menu.list.table-list":"نموذج الاستفسار","menu.list.basic-list":"القائمة القياسية","menu.list.card-list":"قائمة البطاقات","menu.list.search-list":"قائمة البحث","menu.list.search-list.articles":"قائمة البحث (المقالات)","menu.list.search-list.projects":"قائمة البحث (المشروع)","menu.list.search-list.applications":"قائمة البحث (التطبيق)","menu.profile":"صفحة التفاصيل","menu.profile.basic":"صفحة التفاصيل الأساسية","menu.profile.advanced":"صفحة التفاصيل المتقدمة","menu.result":"صفحة النتائج","menu.result.success":"صفحة النجاح","menu.result.fail":"صفحة الفشل","menu.exception":"صفحة الاستثناء","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"خطأ الزناد","menu.account":"الصفحة الشخصية","menu.account.center":"مركز شخصي","menu.account.settings":"الإعدادات الشخصية","menu.account.trigger":"خطأ الزناد","menu.account.logout":"تسجيل الخروج","menu.wallet":"محفظتي","menu.docs":"مركز الوثائق","menu.docs.detail":"تفاصيل الوثيقة","menu.header.refreshPage":"تحديث الصفحة","menu.invite.friends":"دعوة الأصدقاء","app.setting.pagestyle":"إعدادات النمط الشاملة","app.setting.pagestyle.light":"نمط القائمة مشرق","app.setting.pagestyle.dark":"نمط القائمة المظلمة","app.setting.pagestyle.realdark":"الوضع المظلم","app.setting.themecolor":"لون الموضوع","app.setting.navigationmode":"وضع التنقل","app.setting.sidemenu.nav":"التنقل في الشريط الجانبي","app.setting.topmenu.nav":"التنقل في الشريط العلوي","app.setting.content-width":"عرض منطقة المحتوى","app.setting.content-width.tooltip":"يكون هذا الإعداد فعالاً فقط عندما يكون [Top Bar Navigation]","app.setting.content-width.fixed":"ثابت","app.setting.content-width.fluid":"البث","app.setting.fixedheader":"رأس ثابت","app.setting.fixedheader.tooltip":"شكلي عندما رأس ثابت","app.setting.autoHideHeader":"إخفاء الرأس عند التمرير","app.setting.fixedsidebar":"القائمة الجانبية الثابتة","app.setting.sidemenu":"تخطيط القائمة الجانبية","app.setting.topmenu":"تخطيط القائمة العلوية","app.setting.othersettings":"إعدادات أخرى","app.setting.weakmode":"وضع ضعف اللون","app.setting.multitab":"وضع علامات التبويب المتعددة","app.setting.copy":"إعدادات النسخ","app.setting.loading":"جارٍ تحميل الموضوع","app.setting.copyinfo":"انسخ الإعدادات بنجاح src/config/defaultSettings.js","app.setting.copy.success":"اكتمل النسخ","app.setting.copy.fail":"فشل النسخ","app.setting.theme.switching":"تغيير الموضوع!","app.setting.production.hint":"يتم استخدام شريط التكوين فقط للمعاينة في بيئة التطوير ولن يتم عرضه في بيئة الإنتاج. يرجى نسخ وتعديل ملف التكوين يدويا.","app.setting.themecolor.daybreak":"الأزرق الداكن (افتراضي)","app.setting.themecolor.dust":"الغسق","app.setting.themecolor.volcano":"بركان","app.setting.themecolor.sunset":"غروب الشمس","app.setting.themecolor.cyan":"مينغكينغ","app.setting.themecolor.green":"أورورا الخضراء","app.setting.themecolor.geekblue":"المهوس الأزرق","app.setting.themecolor.purple":"جيانغ زي","app.setting.tooltip":"إعدادات الصفحة","user.login.userName":"اسم المستخدم","user.login.password":"كلمة المرور","user.login.username.placeholder":"الحساب: المشرف","user.login.password.placeholder":"كلمة المرور: admin أو ant.design","user.login.message-invalid-credentials":"فشل تسجيل الدخول، يرجى التحقق من البريد الإلكتروني الخاص بك ورمز التحقق","user.login.message-invalid-verification-code":"خطأ في رمز التحقق","user.login.tab-login-credentials":"تسجيل الدخول بكلمة مرور الحساب","user.login.tab-login-email":"تسجيل الدخول بالبريد الإلكتروني","user.login.tab-login-mobile":"تسجيل الدخول برقم الهاتف المحمول","user.login.captcha.placeholder":"الرجاء إدخال رمز التحقق الرسومي","user.login.mobile.placeholder":"رقم الهاتف المحمول","user.login.mobile.verification-code.placeholder":"رمز التحقق","user.login.email.placeholder":"الرجاء إدخال عنوان البريد الإلكتروني الخاص بك","user.login.email.verification-code.placeholder":"الرجاء إدخال رمز التحقق","user.login.email.sending":"جاري إرسال رمز التحقق...","user.login.email.send-success-title":"نصائح","user.login.email.send-success":"تم إرسال رمز التحقق بنجاح، يرجى التحقق من بريدك الإلكتروني","user.login.sms.send-success":"تم إرسال رمز التحقق بنجاح، يرجى التحقق من الرسالة النصية","user.login.remember-me":"تسجيل الدخول التلقائي","user.login.forgot-password":"نسيت كلمة المرور","user.login.sign-in-with":"طرق تسجيل الدخول الأخرى","user.login.signup":"تسجيل حساب","user.login.login":"تسجيل الدخول","user.register.register":"سجل","user.register.email.placeholder":"البريد الإلكتروني","user.register.password.placeholder":"الرجاء إدخال 6 أحرف على الأقل. يرجى عدم استخدام كلمات المرور التي يمكن تخمينها بسهولة.","user.register.password.popover-message":"الرجاء إدخال 6 أحرف على الأقل. يرجى عدم استخدام كلمات المرور التي يمكن تخمينها بسهولة.","user.register.confirm-password.placeholder":"تأكيد كلمة المرور","user.register.get-verification-code":"الحصول على رمز التحقق","user.register.sign-in":"قم بتسجيل الدخول باستخدام حساب موجود","user.register-result.msg":"حسابك: {email} تم التسجيل بنجاح","user.register-result.activation-email":"تم إرسال رسالة التفعيل إلى صندوق البريد الخاص بك وهي صالحة لمدة 24 ساعة. يرجى تسجيل الدخول إلى بريدك الإلكتروني على الفور والنقر على الرابط الموجود في البريد الإلكتروني لتفعيل حسابك.","user.register-result.back-home":"العودة إلى الصفحة الرئيسية","user.register-result.view-mailbox":"تحقق من صندوق البريد الخاص بك","user.email.required":"الرجاء إدخال عنوان البريد الإلكتروني الخاص بك!","user.email.wrong-format":"تنسيق عنوان البريد الإلكتروني خاطئ!","user.userName.required":"الرجاء إدخال اسم حسابك أو عنوان البريد الإلكتروني الخاص بك","user.password.required":"الرجاء إدخال كلمة المرور الخاصة بك!","user.password.twice.msg":"كلمات المرور التي تم إدخالها مرتين غير متطابقة!","user.password.strength.msg":"كلمة المرور ليست قوية بما فيه الكفاية","user.password.strength.strong":"القوة : قوية","user.password.strength.medium":"القوة: متوسطة","user.password.strength.low":"القوة: منخفضة","user.password.strength.short":"القوة : قصيرة جداً","user.confirm-password.required":"الرجاء تأكيد كلمة المرور الخاصة بك!","user.phone-number.required":"الرجاء إدخال رقم الهاتف المحمول الصحيح","user.phone-number.wrong-format":"تنسيق رقم الهاتف المحمول خاطئ!","user.verification-code.required":"الرجاء إدخال رمز التحقق!","user.captcha.required":"الرجاء إدخال رمز التحقق الرسومي!","user.login.infos":"QuantDinger هي أداة مساعدة لتحليل الأسهم متعددة الوكلاء تعمل بالذكاء الاصطناعي ولا تتمتع بمؤهلات استشارية في مجال الاستثمار في الأوراق المالية. يتم إنشاء جميع نتائج التحليل والدرجات والآراء المرجعية في المنصة تلقائيًا بواسطة الذكاء الاصطناعي استنادًا إلى البيانات التاريخية وتستخدم فقط للتعلم والبحث والتبادل الفني، ولا تشكل أي نصيحة استثمارية أو أساس لصنع القرار. ينطوي الاستثمار في الأسهم على مخاطر مختلفة مثل مخاطر السوق، ومخاطر السيولة، ومخاطر السياسة، وما إلى ذلك، مما قد يؤدي إلى خسارة رأس المال. يجب على المستخدمين اتخاذ قرارات مستقلة بناءً على قدرتهم على تحمل المخاطر، ويجب أن يتحمل المستخدم أي سلوك استثماري وعواقب تنشأ عن استخدام هذه الأداة. السوق محفوف بالمخاطر والاستثمار يحتاج إلى الحذر.","user.login.tab-login-web3":"تسجيل الدخول إلى Web3","user.login.web3.tip":"تسجيل الدخول بالتوقيع باستخدام المحفظة","user.login.web3.connect":"ربط المحفظة وتسجيل الدخول","user.login.web3.no-wallet":"لم يتم الكشف عن المحفظة","user.login.web3.no-address":"لم يتم الحصول على عنوان المحفظة","user.login.web3.nonce-failed":"فشل الحصول على رقم عشوائي","user.login.web3.verify-failed":"فشل التحقق من التوقيع","user.login.web3.success":"تم تسجيل الدخول بنجاح","user.login.web3.failed":"فشل تسجيل الدخول إلى المحفظة","nav.no_wallet":"لم يتم الكشف عن المحفظة","nav.copy":"نسخ","nav.copy_success":"تم النسخ بنجاح","user.login.oauth.google":"قم بتسجيل الدخول باستخدام جوجل","user.login.oauth.github":"قم بتسجيل الدخول باستخدام جيثب","user.login.oauth.loading":"جارٍ إعادة التوجيه إلى صفحة التفويض...","user.login.oauth.failed":"فشل تسجيل الدخول باستخدام OAuth","user.login.oauth.get-url-failed":"فشل الحصول على رابط الترخيص","user.login.subtitle":"رؤى كمية مدفوعة في الأسواق العالمية","user.login.legal.title":"إخلاء المسؤولية القانونية","user.login.legal.view":"عرض إخلاء المسؤولية القانونية","user.login.legal.collapse":"طي إخلاء المسؤولية القانونية","user.login.legal.agree":"لقد قرأت ووافقت على إخلاء المسؤولية القانونية","user.login.legal.required":"يرجى قراءة والتحقق من إخلاء المسؤولية القانونية أولا","user.login.legal.content":"QuantDinger هي أداة مساعدة لتحليل الأسهم متعددة الوكلاء تعمل بالذكاء الاصطناعي ولا تتمتع بمؤهلات استشارية في مجال الاستثمار في الأوراق المالية. يتم إنشاء جميع نتائج التحليل والتقييمات والآراء المرجعية في المنصة تلقائيًا بواسطة الذكاء الاصطناعي استنادًا إلى البيانات التاريخية وتستخدم فقط للتعلم والبحث والتبادل الفني، ولا تشكل أي نصيحة استثمارية أو أساس لصنع القرار. ينطوي الاستثمار في الأسهم على مخاطر مختلفة مثل مخاطر السوق، ومخاطر السيولة، ومخاطر السياسة، وما إلى ذلك، مما قد يؤدي إلى خسارة رأس المال. يجب على المستخدمين اتخاذ قرارات مستقلة بناءً على قدرتهم على تحمل المخاطر، ويجب أن يتحمل المستخدم أي سلوك استثماري وعواقب تنشأ عن استخدام هذه الأداة. السوق محفوف بالمخاطر والاستثمار يحتاج إلى الحذر.","user.login.privacy.title":"سياسة خصوصية المستخدم","user.login.privacy.view":"عرض سياسة خصوصية المستخدم","user.login.privacy.collapse":"إغلاق شروط خصوصية المستخدم","user.login.privacy.content":"نحن نقدر خصوصيتك وحماية البيانات. 1) نطاق التجميع: يتم جمع المعلومات المطلوبة لتنفيذ الوظيفة فقط (مثل البريد الإلكتروني ورقم الهاتف المحمول ورمز المنطقة وعنوان محفظة Web3) والسجلات الضرورية ومعلومات الجهاز. 2) الغرض من الاستخدام: لتسجيل الدخول إلى الحساب والتحقق من الأمان وتوفير وظيفة الخدمة واستكشاف الأخطاء وإصلاحها ومتطلبات الامتثال. 3) التخزين والأمان: يتم تشفير البيانات وتخزينها، ويتم اتخاذ الأذونات اللازمة وإجراءات التحكم في الوصول لمحاولة منع الوصول غير المصرح به أو الكشف عنها أو فقدانها. 4) المشاركة مع أطراف ثالثة: ما لم يكن ذلك مطلوبًا بموجب القوانين واللوائح أو ضروريًا لأداء الخدمات، لن تتم مشاركة معلوماتك الشخصية مع أطراف ثالثة؛ إذا كانت هناك خدمات تابعة لجهات خارجية (مثل المحافظ ومقدمي خدمات الرسائل النصية القصيرة)، فلن تتم معالجتها إلا إلى الحد الأدنى اللازم لتنفيذ الوظيفة. 5) ملفات تعريف الارتباط/التخزين المحلي: تُستخدم لحالة تسجيل الدخول وصيانة الجلسة الضرورية (مثل الرموز المميزة، PHPSESSID)، ويمكنك مسحها أو تقييدها في المتصفح. 6) الحقوق الشخصية: يمكنك ممارسة حقوقك في الاستفسار والتصحيح والحذف وسحب الموافقة وما إلى ذلك وفقًا للقوانين واللوائح. 7) التغييرات والإشعارات: عند تحديث هذه الشروط، سيتم عرضها بشكل بارز على الصفحة. من خلال الاستمرار في استخدام هذه الخدمة، يعتبر أنك قد قرأت المحتوى المحدث ووافقت عليه. إذا كنت لا توافق على هذه الشروط أو أي تحديثات لها، فيرجى التوقف عن استخدام الخدمة والاتصال بنا.","account.basicInfo":"المعلومات الأساسية","account.id":"معرف المستخدم","account.username":"اسم المستخدم","account.nickname":"اللقب","account.email":"البريد الإلكتروني","account.mobile":"رقم الهاتف المحمول","account.web3address":"عنوان المحفظة","account.pid":"معرف المرجع","account.level":"مستوى المستخدم","account.money":"التوازن","account.qdtBalance":"رصيد كيو دي تي","account.score":"النقاط","account.createtime":"وقت التسجيل","account.inviteLink":"رابط الدعوة","account.recharge":"إعادة الشحن","account.rechargeTip":"يرجى استخدام WeChat أو Alipay لمسح رمز الاستجابة السريعة أدناه لإعادة الشحن.","account.qrCodePlaceholder":"العنصر النائب لرمز الاستجابة السريعة (المحاكاة)","account.rechargeAmount":"مبلغ إعادة الشحن","account.enterAmount":"الرجاء إدخال مبلغ إعادة الشحن","account.rechargeHint":"الحد الأدنى لمبلغ الإيداع: 1 QDT","account.confirmRecharge":"تأكيد إعادة الشحن","account.enterValidAmount":"الرجاء إدخال مبلغ تعبئة صالح","account.rechargeSuccess":"تم إعادة الشحن بنجاح! تم إيداع {amount} QDT","account.settings.menuMap.basic":"الإعدادات الأساسية","account.settings.menuMap.security":"إعدادات الأمان","account.settings.menuMap.notification":"إشعار الرسالة الجديدة","account.settings.menuMap.moneyLog":"تفاصيل الصندوق","account.moneyLog.empty":"لا توجد تفاصيل الصندوق حتى الآن","account.moneyLog.total":"{total} السجلات في المجموع","account.moneyLog.type.purchase":"مؤشر الشراء","account.moneyLog.type.recharge":"إعادة الشحن","account.moneyLog.type.refund":"استرداد","account.moneyLog.type.reward":"مكافأة","account.moneyLog.type.income":"دخل المؤشر","account.moneyLog.type.commission":"رسوم التعامل مع المنصة","wallet.balance":"رصيد كيو دي تي","wallet.recharge":"إعادة الشحن","wallet.withdraw":"سحب النقود","wallet.filter":"تصفية","wallet.reset":"إعادة تعيين","wallet.totalRecharge":"التغذية المتراكمة","wallet.totalWithdraw":"عمليات السحب التراكمية","wallet.totalIncome":"الدخل التراكمي","wallet.records":"سجلات المعاملات وتفاصيل الصندوق","wallet.tradingRecords":"تاريخ المعاملة","wallet.moneyLog":"تفاصيل الصندوق","wallet.rechargeTip":"يرجى استخدام WeChat أو Alipay لمسح رمز الاستجابة السريعة أدناه لإعادة الشحن.","wallet.qrCodePlaceholder":"العنصر النائب لرمز الاستجابة السريعة (المحاكاة)","wallet.rechargeAmount":"مبلغ إعادة الشحن","wallet.enterAmount":"الرجاء إدخال مبلغ إعادة الشحن","wallet.rechargeHint":"الحد الأدنى لمبلغ الإيداع: 1 QDT","wallet.confirmRecharge":"تأكيد إعادة الشحن","wallet.enterValidAmount":"الرجاء إدخال مبلغ تعبئة صالح","wallet.rechargeSuccess":"تم إعادة الشحن بنجاح! تم إيداع {amount} QDT","wallet.rechargeFailed":"فشلت عملية إعادة الشحن","wallet.withdrawTip":"الرجاء إدخال مبلغ السحب وعنوان السحب","wallet.withdrawAmount":"سحب المبلغ","wallet.enterWithdrawAmount":"الرجاء إدخال مبلغ السحب","wallet.withdrawHint":"الحد الأدنى لمبلغ السحب: 1 QDT","wallet.withdrawAddress":"عنوان السحب (اختياري)","wallet.enterWithdrawAddress":"الرجاء إدخال عنوان السحب","wallet.confirmWithdraw":"تأكيد الانسحاب","wallet.enterValidWithdrawAmount":"الرجاء إدخال مبلغ سحب صالح","wallet.insufficientBalance":"رصيد غير كاف","wallet.withdrawSuccess":"تم السحب بنجاح! تم سحب {المبلغ} QDT","wallet.withdrawFailed":"فشل الانسحاب","wallet.noTradingRecords":"لا يوجد سجل المعاملات حتى الآن","wallet.noMoneyLog":"لا توجد تفاصيل الصندوق حتى الآن","wallet.loadTradingRecordsFailed":"فشل في تحميل سجلات المعاملات","wallet.loadMoneyLogFailed":"فشل في تحميل تفاصيل الصندوق","wallet.moneyLogTotal":"{total} السجلات في المجموع","wallet.moneyLogTypeTitle":"اكتب","wallet.moneyLogType.all":"جميع الأنواع","wallet.table.time":"الوقت","wallet.table.type":"اكتب","wallet.table.price":"السعر","wallet.table.amount":"الكمية","wallet.table.money":"المبلغ","wallet.table.balance":"التوازن","wallet.table.memo":"ملاحظات","wallet.table.value":"قيمة","wallet.table.profit":"الربح والخسارة","wallet.table.commission":"رسوم المناولة","wallet.table.total":"{total} السجلات في المجموع","wallet.tradeType.buy":"شراء","wallet.tradeType.sell":"بيع","wallet.tradeType.liquidation":"التصفية القسرية","wallet.tradeType.openLong":"مفتوح لفترة طويلة","wallet.tradeType.addLong":"غادوت","wallet.tradeType.closeLong":"بيندو","wallet.tradeType.closeLongStop":"وقف الخسارة وطويلة","wallet.tradeType.closeLongProfit":"جني الربح ومستوى أكثر","wallet.tradeType.openShort":"فتح قصيرة","wallet.tradeType.addShort":"إضافة قصيرة","wallet.tradeType.closeShort":"فارغ","wallet.tradeType.closeShortStop":"وقف الخسارة","wallet.tradeType.closeShortProfit":"جني الأرباح وأغلق على المكشوف","wallet.moneyLogType.purchase":"مؤشر الشراء","wallet.moneyLogType.recharge":"إعادة الشحن","wallet.moneyLogType.withdraw":"سحب النقود","wallet.moneyLogType.refund":"استرداد","wallet.moneyLogType.reward":"مكافأة","wallet.moneyLogType.income":"الدخل","wallet.moneyLogType.commission":"رسوم المناولة","wallet.web3Address.required":"يرجى ملء عنوان محفظة Web3 أولاً","wallet.web3Address.requiredDescription":"قبل إعادة الشحن، تحتاج إلى ربط عنوان محفظة Web3 الخاص بك لتلقي إعادة الشحن.","wallet.web3Address.placeholder":"الرجاء إدخال عنوان محفظة Web3 الخاص بك (يبدأ بـ 0x)","wallet.web3Address.save":"حفظ عنوان المحفظة","wallet.web3Address.saveSuccess":"تم حفظ عنوان المحفظة بنجاح","wallet.web3Address.saveFailed":"فشل في حفظ عنوان المحفظة","wallet.web3Address.invalidFormat":"يرجى إدخال عنوان محفظة Web3 صالح (تنسيق Ethereum: 42 حرفًا يبدأ بـ 0x، أو تنسيق TRC20: 34 حرفًا يبدأ بـ T)","wallet.selectCoin":"اختر العملة","wallet.selectChain":"سلسلة الاختيار","wallet.chain.eth":"إيثريوم (ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"ش.م.ب","wallet.targetQdtAmount":"مقدار QDT الذي تريد استرداده (اختياري)","wallet.targetQdtAmount.placeholder":"يرجى إدخال كمية QDT التي تريد استردادها، وسعر QDT الحالي: {price} USDT","wallet.targetQdtAmount.requiredUsdt":"تحتاج إلى إعادة الشحن: {amount} USDT","wallet.rechargeAddress":"عنوان إعادة الشحن","wallet.copyAddress":"نسخ","wallet.copySuccess":"تم النسخ بنجاح!","wallet.copyFailed":"فشل النسخ، يرجى النسخ يدويًا","wallet.rechargeAddressHint":"يرجى التأكد من استخدام {chain} لإيداع {coin} في هذا العنوان","wallet.qdtPrice.loading":"جار التحميل...","wallet.rechargeTip.new":"يرجى تحديد العملة والسلسلة، ثم مسح رمز الاستجابة السريعة أدناه لإعادة الشحن","wallet.exchangeRate":"1 QDT ≈ {معدل} USDT","wallet.withdrawableAmount":"المبلغ النقدي المتاح","wallet.totalBalance":"الرصيد الإجمالي","wallet.insufficientWithdrawable":"المبلغ النقدي الذي يمكن سحبه غير كاف. المبلغ الحالي الذي يمكن سحبه هو: {amount} QDT","wallet.withdrawAddressRequired":"الرجاء إدخال عنوان السحب","wallet.withdrawAddressHint":"يرجى التأكد من صحة العنوان. وبعد الانسحاب لا يمكن إلغاؤه.","wallet.withdrawSubmitSuccess":"تم إرسال طلب السحب بنجاح، برجاء انتظار المراجعة","menu.footer.contactUs":"اتصل بنا","menu.footer.getSupport":"احصل على الدعم","menu.footer.socialAccounts":"حساب اجتماعي","menu.footer.userAgreement":"اتفاقية المستخدم","menu.footer.privacyPolicy":"سياسة الخصوصية","menu.footer.support":"الدعم","menu.footer.featureRequest":"طلب الميزة","menu.footer.email":"البريد الإلكتروني","menu.footer.liveChat":"24/7 الدردشة الحية","dashboard.analysis.title":"التحليل متعدد الأبعاد","dashboard.analysis.subtitle":"منصة تحليل مالي شاملة تعتمد على الذكاء الاصطناعي","dashboard.analysis.selectSymbol":"حدد أو أدخل الرمز الأساسي","dashboard.analysis.selectModel":"حدد النموذج","dashboard.analysis.startAnalysis":"ابدأ التحليل","dashboard.analysis.history":"التاريخ","dashboard.analysis.tab.overview":"تحليل شامل","dashboard.analysis.tab.fundamental":"الأساسيات","dashboard.analysis.tab.technical":"التكنولوجيا","dashboard.analysis.tab.news":"أخبار","dashboard.analysis.tab.sentiment":"العواطف","dashboard.analysis.tab.risk":"خطر","dashboard.analysis.tab.debate":"المناقشة الطويلة والقصيرة","dashboard.analysis.tab.decision":"القرار النهائي","dashboard.analysis.empty.selectSymbol":"حدد هدفًا لبدء التحليل","dashboard.analysis.empty.selectSymbolDesc":"اختر من قائمة الأسهم المحددة ذاتيًا أو أدخل الكود الأساسي للحصول على تقرير تحليل الذكاء الاصطناعي متعدد الأبعاد","dashboard.analysis.empty.startAnalysis":'انقر فوق الزر "بدء التحليل" لإجراء تحليل متعدد الأبعاد',"dashboard.analysis.empty.startAnalysisDesc":"سنزودك بتحليل شامل من أبعاد متعددة مثل الأساسيات والتكنولوجيا والأخبار والمشاعر والمخاطر","dashboard.analysis.empty.noData":"لا توجد حاليًا أي بيانات تحليل {type}، يرجى إجراء تحليل شامل أولاً","dashboard.analysis.empty.noWatchlist":"لا يوجد حاليا أي أسهم مختارة ذاتيا","dashboard.analysis.empty.noHistory":"لا يوجد تاريخ بعد","dashboard.analysis.empty.watchlistHint":"لا يوجد حاليا أي أسهم مختارة ذاتيا، يرجى أولا","dashboard.analysis.empty.noDebateData":"لا توجد بيانات مناقشة حتى الآن","dashboard.analysis.empty.noDecisionData":"لا توجد بيانات القرار حتى الآن","dashboard.analysis.empty.selectAgent":"الرجاء تحديد وكيل لعرض نتائج التحليل","dashboard.analysis.loading.analyzing":"جارٍ التحليل، يرجى الانتظار...","dashboard.analysis.loading.fundamental":"تحليل البيانات الأساسية...","dashboard.analysis.loading.technical":"تحليل المؤشرات الفنية...","dashboard.analysis.loading.news":"تحليل بيانات الأخبار...","dashboard.analysis.loading.sentiment":"تحليل معنويات السوق..","dashboard.analysis.loading.risk":"تقييم المخاطر...","dashboard.analysis.loading.debate":"والنقاش الطويل والقصير مستمر..","dashboard.analysis.loading.decision":"إصدار القرار النهائي...","dashboard.analysis.score.overall":"التقييم العام","dashboard.analysis.score.recommendation":"نصيحة استثمارية","dashboard.analysis.score.confidence":"الثقة","dashboard.analysis.dimension.fundamental":"الأساسيات","dashboard.analysis.dimension.technical":"التكنولوجيا","dashboard.analysis.dimension.news":"أخبار","dashboard.analysis.dimension.sentiment":"العواطف","dashboard.analysis.dimension.risk":"خطر","dashboard.analysis.card.dimensionScores":"التقييمات لكل البعد","dashboard.analysis.card.overviewReport":"تقرير التحليل الشامل","dashboard.analysis.card.financialMetrics":"المؤشرات المالية","dashboard.analysis.card.fundamentalReport":"تقرير التحليل الأساسي","dashboard.analysis.card.technicalIndicators":"المؤشرات الفنية","dashboard.analysis.card.technicalReport":"تقرير التحليل الفني","dashboard.analysis.card.newsList":"أخبار ذات صلة","dashboard.analysis.card.newsReport":"تقرير تحليل الأخبار","dashboard.analysis.card.sentimentIndicators":"مؤشر المشاعر","dashboard.analysis.card.sentimentReport":"تقرير تحليل المشاعر","dashboard.analysis.card.riskMetrics":"مؤشرات المخاطر","dashboard.analysis.card.riskReport":"تقرير تقييم المخاطر","dashboard.analysis.card.bullView":"النظرة الصعودية (الثور)","dashboard.analysis.card.bearView":"وجهة النظر الهبوطية (الدب)","dashboard.analysis.card.researchConclusion":"استنتاج الباحث","dashboard.analysis.card.traderPlan":"خطة التاجر","dashboard.analysis.card.riskDebate":"مناقشة لجنة المخاطر","dashboard.analysis.card.finalDecision":"القرار النهائي","dashboard.analysis.card.tradePlanDetail":"تفاصيل خطة التداول","dashboard.analysis.tradingPlan.entry_price":"سعر القبول","dashboard.analysis.tradingPlan.position_size":"حجم الموقف","dashboard.analysis.tradingPlan.stop_loss":"وقف الخسارة","dashboard.analysis.tradingPlan.take_profit":"جني الربح","dashboard.analysis.label.confidence":"الثقة","dashboard.analysis.label.keyPoints":"النقاط الأساسية","dashboard.analysis.label.riskWarning":"تحذير من المخاطر","dashboard.analysis.risk.risky":"محفوف بالمخاطر","dashboard.analysis.risk.neutral":"وجهة نظر محايدة (محايدة)","dashboard.analysis.risk.safe":"وجهة نظر محافظة (آمنة)","dashboard.analysis.risk.conclusion":"الاستنتاج","dashboard.analysis.feature.fundamental":"التحليل الأساسي","dashboard.analysis.feature.technical":"التحليل الفني","dashboard.analysis.feature.news":"تحليل الأخبار","dashboard.analysis.feature.sentiment":"تحليل المشاعر","dashboard.analysis.feature.risk":"تقييم المخاطر","dashboard.analysis.watchlist.title":"اختيار الأسهم الخاصة بي","dashboard.analysis.watchlist.add":"إضافة","dashboard.analysis.watchlist.addStock":"إضافة مخزون","dashboard.analysis.modal.addStock.title":"إضافة أسهم اختيارية","dashboard.analysis.modal.addStock.confirm":"حسنًا","dashboard.analysis.modal.addStock.cancel":"إلغاء","dashboard.analysis.modal.addStock.market":"نوع السوق","dashboard.analysis.modal.addStock.marketPlaceholder":"الرجاء تحديد السوق","dashboard.analysis.modal.addStock.marketRequired":"الرجاء تحديد نوع السوق","dashboard.analysis.modal.addStock.symbol":"رمز المخزون","dashboard.analysis.modal.addStock.symbolPlaceholder":"على سبيل المثال: AAPL، TSLA، GOOGL، 000001، BTC","dashboard.analysis.modal.addStock.symbolRequired":"الرجاء إدخال رمز المخزون","dashboard.analysis.modal.addStock.searchPlaceholder":"البحث عن رمز الهدف أو الاسم","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"ابحث عن الرمز الأساسي أو أدخله (على سبيل المثال: AAPL، BTC/USDT، EUR/USD)","dashboard.analysis.modal.addStock.searchOrInputHint":"يدعم البحث عن الكائنات في قاعدة البيانات، أو إدخال الكود مباشرة (سيحصل النظام على الاسم تلقائيًا)","dashboard.analysis.modal.addStock.search":"بحث","dashboard.analysis.modal.addStock.searchResults":"نتائج البحث","dashboard.analysis.modal.addStock.hotSymbols":"أهداف شعبية","dashboard.analysis.modal.addStock.noHotSymbols":"لا توجد أهداف شعبية حتى الآن","dashboard.analysis.modal.addStock.selectedSymbol":"مختارة","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"الرجاء تحديد الهدف أولاً","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"الرجاء تحديد هدف أو إدخال رمز الهدف أولاً","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"الرجاء إدخال رمز الهدف","dashboard.analysis.modal.addStock.pleaseSelectMarket":"الرجاء تحديد نوع السوق أولا","dashboard.analysis.modal.addStock.searchFailed":"فشل البحث، يرجى المحاولة مرة أخرى في وقت لاحق","dashboard.analysis.modal.addStock.noSearchResults":"لم يتم العثور على هدف مطابق","dashboard.analysis.modal.addStock.willAutoFetchName":"سيحصل النظام تلقائيًا على الاسم","dashboard.analysis.modal.addStock.addDirectly":"أضف مباشرة","dashboard.analysis.modal.addStock.nameWillBeFetched":"سيتم التقاط الاسم تلقائيًا عند إضافته","dashboard.analysis.market.USStock":"الأسهم الأمريكية","dashboard.analysis.market.Crypto":"عملة مشفرة","dashboard.analysis.market.Forex":"الفوركس","dashboard.analysis.market.Futures":"العقود الآجلة","dashboard.analysis.modal.history.title":"سجلات التحليل التاريخي","dashboard.analysis.modal.history.viewResult":"عرض النتائج","dashboard.analysis.modal.history.completeTime":"وقت الانتهاء","dashboard.analysis.modal.history.error":"خطأ","dashboard.analysis.status.pending":"في انتظار","dashboard.analysis.status.processing":"المعالجة","dashboard.analysis.status.completed":"مكتمل","dashboard.analysis.status.failed":"فشل","dashboard.analysis.message.selectSymbol":"الرجاء تحديد الهدف أولا","dashboard.analysis.message.taskCreated":"تم إنشاء مهمة التحليل ويتم تنفيذها في الخلفية...","dashboard.analysis.message.analysisComplete":"اكتمل التحليل","dashboard.analysis.message.analysisCompleteCache":"اكتمل التحليل (باستخدام البيانات المخزنة مؤقتًا)","dashboard.analysis.message.analysisFailed":"فشل التحليل، يرجى المحاولة مرة أخرى في وقت لاحق","dashboard.analysis.message.addStockSuccess":"تمت الإضافة بنجاح","dashboard.analysis.message.addStockFailed":"فشلت الإضافة","dashboard.analysis.message.removeStockSuccess":"تمت الإزالة بنجاح","dashboard.analysis.message.removeStockFailed":"فشلت عملية الإزالة","dashboard.analysis.message.resumingAnalysis":"جاري استئناف مهمة التحليل...","dashboard.analysis.message.deleteSuccess":"تم الحذف بنجاح","dashboard.analysis.message.deleteFailed":"فشل الحذف","dashboard.analysis.modal.history.delete":"حذف","dashboard.analysis.modal.history.deleteConfirm":"هل أنت متأكد أنك تريد حذف سجل التحليل هذا؟","dashboard.analysis.test":"متجر رقم {no}، طريق Gongzhuan","dashboard.analysis.introduce":"وصف المؤشر","dashboard.analysis.total-sales":"إجمالي المبيعات","dashboard.analysis.day-sales":"متوسط المبيعات اليومية¥","dashboard.analysis.visits":"الزيارات","dashboard.analysis.visits-trend":"اتجاهات المرور","dashboard.analysis.visits-ranking":"ترتيب زيارة المتجر","dashboard.analysis.day-visits":"زيارات يومية","dashboard.analysis.week":"أسبوعية على أساس سنوي","dashboard.analysis.day":"سنة بعد سنة","dashboard.analysis.payments":"عدد الدفعات","dashboard.analysis.conversion-rate":"معدل التحويل","dashboard.analysis.operational-effect":"آثار النشاط التشغيلي","dashboard.analysis.sales-trend":"اتجاهات المبيعات","dashboard.analysis.sales-ranking":"ترتيب مبيعات المتجر","dashboard.analysis.all-year":"على مدار السنة","dashboard.analysis.all-month":"هذا الشهر","dashboard.analysis.all-week":"هذا الاسبوع","dashboard.analysis.all-day":"اليوم","dashboard.analysis.search-users":"عدد مستخدمي البحث","dashboard.analysis.per-capita-search":"عمليات البحث للفرد","dashboard.analysis.online-top-search":"عمليات البحث الشائعة على الإنترنت","dashboard.analysis.the-proportion-of-sales":"نسبة فئة المبيعات","dashboard.analysis.dropdown-option-one":"العملية الأولى","dashboard.analysis.dropdown-option-two":"العملية 2","dashboard.analysis.channel.all":"جميع القنوات","dashboard.analysis.channel.online":"على الانترنت","dashboard.analysis.channel.stores":"متجر","dashboard.analysis.sales":"المبيعات","dashboard.analysis.traffic":"تدفق الركاب","dashboard.analysis.table.rank":"الترتيب","dashboard.analysis.table.search-keyword":"البحث عن الكلمات الرئيسية","dashboard.analysis.table.users":"عدد المستخدمين","dashboard.analysis.table.weekly-range":"زيادة أسبوعية","dashboard.indicator.selectSymbol":"حدد أو أدخل الرمز الأساسي","dashboard.indicator.emptyWatchlistHint":"لا يوجد حاليا أي أسهم مختارة ذاتيا، يرجى إضافتها أولا","dashboard.indicator.hint.selectSymbol":"الرجاء تحديد هدف لبدء التحليل","dashboard.indicator.hint.selectSymbolDesc":"حدد أو أدخل رمز السهم في مربع البحث أعلاه لعرض مخططات K-line والمؤشرات الفنية","dashboard.indicator.retry":"حاول مرة أخرى","dashboard.indicator.panel.title":"المؤشرات الفنية","dashboard.indicator.panel.realtimeOn":"قم بإيقاف تشغيل التحديثات في الوقت الفعلي","dashboard.indicator.panel.realtimeOff":"تمكين التحديثات في الوقت الحقيقي","dashboard.indicator.panel.themeLight":"التبديل إلى المظهر الداكن","dashboard.indicator.panel.themeDark":"التبديل إلى موضوع الضوء","dashboard.indicator.section.enabled":"ممكّن","dashboard.indicator.section.added":"المؤشرات التي أضفتها","dashboard.indicator.section.custom":"المؤشرات التي أنشأتها بنفسك","dashboard.indicator.section.bought":"المؤشرات التي اشتريتها","dashboard.indicator.section.myCreated":"المؤشرات التي قمت بإنشائها","dashboard.indicator.empty":"لا يوجد مؤشر حتى الآن، يرجى إضافة أو إنشاء مؤشر أولاً","dashboard.indicator.buy":"مؤشر الشراء","dashboard.indicator.action.start":"ابدأ","dashboard.indicator.action.stop":"إغلاق","dashboard.indicator.action.edit":"تحرير","dashboard.indicator.action.delete":"حذف","dashboard.indicator.action.backtest":"com.backtest","dashboard.indicator.status.normal":"عادي","dashboard.indicator.status.normalPermanent":"عادي (صالح بشكل دائم)","dashboard.indicator.status.expired":"انتهت صلاحيتها","dashboard.indicator.expiry.permanent":"صالحة بشكل دائم","dashboard.indicator.expiry.noExpiry":"لا يوجد وقت انتهاء الصلاحية","dashboard.indicator.expiry.expired":"انتهت الصلاحية: {التاريخ}","dashboard.indicator.expiry.expiresOn":"وقت انتهاء الصلاحية: {التاريخ}","dashboard.indicator.delete.confirmTitle":"تأكيد الحذف","dashboard.indicator.delete.confirmContent":'هل أنت متأكد أنك تريد حذف المؤشر "{name}"؟ هذه العملية لا رجعة فيها.',"dashboard.indicator.delete.confirmOk":"حذف","dashboard.indicator.delete.confirmCancel":"إلغاء","dashboard.indicator.delete.success":"تم الحذف بنجاح","dashboard.indicator.delete.failed":"فشل الحذف","dashboard.indicator.save.success":"تم الحفظ بنجاح","dashboard.indicator.save.failed":"فشل الحفظ","dashboard.indicator.error.loadWatchlistFailed":"فشل تحميل الأسهم الاختيارية","dashboard.indicator.error.chartNotReady":"لم تتم تهيئة مكون المخطط. يرجى تحديد الهدف أولاً وانتظر حتى يتم تحميل المخطط.","dashboard.indicator.error.chartMethodNotReady":"طريقة مكون المخطط ليست جاهزة، يرجى المحاولة مرة أخرى لاحقًا","dashboard.indicator.error.chartExecuteNotReady":"طريقة تنفيذ مكون الرسم البياني ليست جاهزة، يرجى المحاولة مرة أخرى لاحقًا","dashboard.indicator.error.parseFailed":"غير قادر على تحليل كود بايثون","dashboard.indicator.error.parseFailedCheck":"غير قادر على تحليل كود بايثون، يرجى التحقق من تنسيق الكود","dashboard.indicator.error.addIndicatorFailed":"فشل في إضافة المؤشر","dashboard.indicator.error.runIndicatorFailed":"فشل مؤشر التشغيل","dashboard.indicator.error.pleaseLogin":"الرجاء تسجيل الدخول أولا","dashboard.indicator.error.loadDataFailed":"فشل تحميل البيانات","dashboard.indicator.error.loadDataFailedDesc":"يرجى التحقق من اتصال الشبكة","dashboard.indicator.error.pythonEngineFailed":"فشل محرك Python في التحميل وقد لا تكون وظيفة المؤشر متاحة.","dashboard.indicator.error.chartInitFailed":"فشلت تهيئة المخطط","dashboard.indicator.warning.enterCode":"الرجاء إدخال رمز المؤشر أولا","dashboard.indicator.warning.pyodideLoadFailed":"فشل محرك بايثون في التحميل","dashboard.indicator.warning.pyodideLoadFailedDesc":"هذه الميزة غير متوفرة في منطقتك الحالية أو بيئة الشبكة الحالية","dashboard.indicator.warning.chartNotInitialized":"لم تتم تهيئة المخطط ولا يمكن استخدام أداة رسم الخط.","dashboard.indicator.success.runIndicator":"يعمل المؤشر بنجاح","dashboard.indicator.success.clearDrawings":"تم مسح كافة الرسومات الخطية","dashboard.indicator.sma":"SMA (مجموعة المتوسطات المتحركة)","dashboard.indicator.ema":"EMA (مجموعة المتوسط المتحرك الأسي)","dashboard.indicator.rsi":"مؤشر القوة النسبية (القوة النسبية)","dashboard.indicator.macd":"ماكد","dashboard.indicator.bb":"بولينجر باند","dashboard.indicator.atr":"ATR (متوسط المدى الحقيقي)","dashboard.indicator.cci":"CCI (مؤشر قناة السلع)","dashboard.indicator.williams":"ويليامز %R (مؤشر ويليامز)","dashboard.indicator.mfi":"مؤسسات التمويل الأصغر (مؤشر تدفق الأموال)","dashboard.indicator.adx":"ADX (مؤشر الاتجاه المتوسط)","dashboard.indicator.obv":"OBV (موجة الطاقة)","dashboard.indicator.adosc":"ADOSC (مذبذب التجميع/الإرسال)","dashboard.indicator.ad":"AD (خط التجميع/التوزيع)","dashboard.indicator.kdj":"KDJ (مؤشر ستوكاستيك)","dashboard.indicator.signal.buy":"شراء","dashboard.indicator.signal.sell":"بيع","dashboard.indicator.signal.supertrendBuy":"شراء سوبر تريند","dashboard.indicator.signal.supertrendSell":"بيع سوبر تريند","dashboard.indicator.chart.kline":"خط K","dashboard.indicator.chart.volume":"الحجم","dashboard.indicator.chart.uptrend":"الاتجاه الصعودي","dashboard.indicator.chart.downtrend":"الاتجاه الهابط","dashboard.indicator.tooltip.time":"الوقت","dashboard.indicator.tooltip.open":"مفتوح","dashboard.indicator.tooltip.close":"تلقي","dashboard.indicator.tooltip.high":"عالية","dashboard.indicator.tooltip.low":"منخفض","dashboard.indicator.tooltip.volume":"الحجم","dashboard.indicator.drawing.line":"قطعة الخط","dashboard.indicator.drawing.horizontalLine":"خط أفقي","dashboard.indicator.drawing.verticalLine":"خط عمودي","dashboard.indicator.drawing.ray":"راي","dashboard.indicator.drawing.straightLine":"خط مستقيم","dashboard.indicator.drawing.parallelLine":"خطوط متوازية","dashboard.indicator.drawing.priceLine":"خط السعر","dashboard.indicator.drawing.priceChannel":"قناة السعر","dashboard.indicator.drawing.fibonacciLine":"خطوط فيبوناتشي","dashboard.indicator.drawing.measure":"قياس","dashboard.indicator.drawing.clearAll":"مسح كافة الرسومات الخطية","dashboard.indicator.market.USStock":"الأسهم الأمريكية","dashboard.indicator.market.Crypto":"عملة مشفرة","dashboard.indicator.market.Forex":"الفوركس","dashboard.indicator.market.Futures":"العقود الآجلة","dashboard.indicator.create":"إنشاء مؤشر","dashboard.indicator.editor.title":"إنشاء/تحرير المؤشرات","dashboard.indicator.editor.name":"اسم المؤشر","dashboard.indicator.editor.nameRequired":"الرجاء إدخال اسم المؤشر","dashboard.indicator.editor.namePlaceholder":"الرجاء إدخال اسم المؤشر","dashboard.indicator.editor.description":"وصف المؤشر","dashboard.indicator.editor.descriptionPlaceholder":"الرجاء إدخال وصف للمؤشر (اختياري)","dashboard.indicator.editor.code":"كود بايثون","dashboard.indicator.editor.codeRequired":"الرجاء إدخال رمز المؤشر","dashboard.indicator.editor.codePlaceholder":"الرجاء إدخال رمز بايثون","dashboard.indicator.editor.run":"تشغيل","dashboard.indicator.editor.runHint":"انقر فوق زر التشغيل لمعاينة تأثير المؤشر على مخطط K-line","dashboard.indicator.editor.guide":"دليل التطوير","dashboard.indicator.editor.guideTitle":"دليل تطوير مؤشر بايثون","dashboard.indicator.editor.save":"حفظ","dashboard.indicator.editor.cancel":"إلغاء","dashboard.indicator.editor.unnamed":"مؤشر بدون اسم","dashboard.indicator.editor.publishToCommunity":"نشر إلى المجتمع","dashboard.indicator.editor.publishToCommunityHint":"بمجرد النشر، يمكن للمستخدمين الآخرين عرض واستخدام المؤشر الخاص بك في المجتمع","dashboard.indicator.editor.indicatorType":"نوع المؤشر","dashboard.indicator.editor.indicatorTypeRequired":"الرجاء تحديد نوع المؤشر","dashboard.indicator.editor.indicatorTypePlaceholder":"الرجاء تحديد نوع المؤشر","dashboard.indicator.editor.previewImage":"معاينة","dashboard.indicator.editor.uploadImage":"تحميل الصور","dashboard.indicator.editor.previewImageHint":"الحجم الموصى به: 800×400، ولا يزيد عن 2 ميجابايت","dashboard.indicator.editor.pricing":"سعر البيع (QDT)","dashboard.indicator.editor.pricingType.free":"مجانا","dashboard.indicator.editor.pricingType.permanent":"دائم","dashboard.indicator.editor.pricingType.monthly":"الدفع الشهري","dashboard.indicator.editor.price":"السعر","dashboard.indicator.editor.priceRequired":"الرجاء إدخال السعر","dashboard.indicator.editor.pricePlaceholder":"الرجاء إدخال السعر","dashboard.indicator.editor.pricingHint":"على الرغم من أن سعر المؤشرات المجانية هو 0، إلا أن المنصة ستكافئك (QDT) بناءً على استخدام المؤشر الخاص بك ومعدل الثناء.","dashboard.indicator.editor.aiGenerate":"جيل ذكي","dashboard.indicator.editor.aiPromptPlaceholder":"أخبرني بأفكارك وسأقوم بإنشاء رمز مؤشر بايثون لك","dashboard.indicator.editor.aiGenerateBtn":"كود تم إنشاؤه بواسطة الذكاء الاصطناعي","dashboard.indicator.editor.aiPromptRequired":"الرجاء إدخال أفكارك","dashboard.indicator.editor.aiGenerateSuccess":"تم إنشاء الكود بنجاح","dashboard.indicator.editor.aiGenerateError":"فشل إنشاء الكود، يرجى المحاولة مرة أخرى لاحقًا","dashboard.indicator.backtest.title":"اختبار خلفي للمؤشر","dashboard.indicator.backtest.config":"معلمات الاختبار الخلفي","dashboard.indicator.backtest.startDate":"تاريخ البدء","dashboard.indicator.backtest.endDate":"تاريخ الانتهاء","dashboard.indicator.backtest.selectStartDate":"حدد تاريخ البدء","dashboard.indicator.backtest.selectEndDate":"حدد تاريخ الانتهاء","dashboard.indicator.backtest.startDateRequired":"الرجاء تحديد تاريخ البدء","dashboard.indicator.backtest.endDateRequired":"الرجاء تحديد تاريخ الانتهاء","dashboard.indicator.backtest.initialCapital":"رأس المال الأولي","dashboard.indicator.backtest.initialCapitalRequired":"الرجاء إدخال الأموال الأولية","dashboard.indicator.backtest.commission":"رسوم المناولة","dashboard.indicator.backtest.leverage":"نسبة الرافعة المالية","dashboard.indicator.backtest.tradeDirection":"اتجاه التداول","dashboard.indicator.backtest.longOnly":"اذهب لفترة طويلة","dashboard.indicator.backtest.shortOnly":"قصيرة","dashboard.indicator.backtest.both":"في اتجاهين","dashboard.indicator.backtest.run":"ابدأ الاختبار الخلفي","dashboard.indicator.backtest.rerun":"باك تست مرة أخرى","dashboard.indicator.backtest.close":"إغلاق","dashboard.indicator.backtest.running":"الاختبار الخلفي للمؤشر قيد التقدم...","dashboard.indicator.backtest.results":"نتائج الاختبار الخلفي","dashboard.indicator.backtest.totalReturn":"العائد الإجمالي","dashboard.indicator.backtest.annualReturn":"الدخل السنوي","dashboard.indicator.backtest.maxDrawdown":"الحد الأقصى للسحب","dashboard.indicator.backtest.sharpeRatio":"نسبة شارب","dashboard.indicator.backtest.winRate":"معدل الفوز","dashboard.indicator.backtest.profitFactor":"نسبة الربح إلى الخسارة","dashboard.indicator.backtest.totalTrades":"عدد المعاملات","dashboard.indicator.totalReturn":"العائد الإجمالي","dashboard.indicator.annualReturn":"معدل العائد السنوي","dashboard.indicator.maxDrawdown":"الحد الأقصى للسحب","dashboard.indicator.sharpeRatio":"نسبة شارب","dashboard.indicator.winRate":"معدل الفوز","dashboard.indicator.profitFactor":"نسبة الربح إلى الخسارة","dashboard.indicator.totalTrades":"إجمالي عدد المعاملات","dashboard.indicator.backtest.totalCommission":"إجمالي رسوم المناولة","dashboard.indicator.backtest.equityCurve":"منحنى العائد","dashboard.indicator.backtest.strategy":"دخل المؤشر","dashboard.indicator.backtest.benchmark":"العودة المرجعية","dashboard.indicator.backtest.tradeHistory":"تاريخ المعاملة","dashboard.indicator.backtest.tradeTime":"الوقت","dashboard.indicator.backtest.tradeType":"اكتب","dashboard.indicator.backtest.buy":"شراء","dashboard.indicator.backtest.sell":"بيع","dashboard.indicator.backtest.liquidation":"التصفية","dashboard.indicator.backtest.openLong":"مفتوح لفترة طويلة","dashboard.indicator.backtest.closeLong":"بيندو","dashboard.indicator.backtest.closeLongStop":"قريب من الشراء (وقف الخسارة)","dashboard.indicator.backtest.closeLongProfit":"إغلاق المزيد (جني الأرباح)","dashboard.indicator.backtest.addLong":"إضافة موقف طويل","dashboard.indicator.backtest.openShort":"فتح قصيرة","dashboard.indicator.backtest.closeShort":"فارغ","dashboard.indicator.backtest.closeShortStop":"إغلاق (وقف الخسارة)","dashboard.indicator.backtest.closeShortProfit":"إغلاق (جني الأرباح)","dashboard.indicator.backtest.addShort":"إضافة موقف قصير","dashboard.indicator.backtest.price":"السعر","dashboard.indicator.backtest.amount":"الكمية","dashboard.indicator.backtest.balance":"رصيد الحساب","dashboard.indicator.backtest.profit":"الربح والخسارة","dashboard.indicator.backtest.success":"تم الانتهاء من الاختبار الخلفي","dashboard.indicator.backtest.failed":"فشل الاختبار الخلفي، يرجى المحاولة مرة أخرى لاحقًا","dashboard.indicator.backtest.noIndicatorCode":"لا يوجد رمز قابل للاختبار الخلفي لهذا المؤشر","dashboard.indicator.backtest.noSymbol":"يرجى تحديد هدف المعاملة أولاً","dashboard.indicator.backtest.dateRangeExceeded":"يتجاوز النطاق الزمني للاختبار الخلفي الحد الأقصى: يمكن اختبار الفترة الزمنية {timeframe} بحد أقصى {maxRange}","dashboard.indicator.backtest.dateRangeExceededDays":"Backtest range exceeds limit: {timeframe} max {maxRange} ({maxDays} days)","dashboard.indicator.backtest.metaLine":"Symbol: {symbol} | Market: {market} | Timeframe: {timeframe}","dashboard.indicator.backtest.savedRunId":"Backtest saved. Run ID: {id}","dashboard.indicator.backtest.prev":"Previous","dashboard.indicator.backtest.next":"Next","dashboard.indicator.backtest.steps.strategy.title":"Strategy","dashboard.indicator.backtest.steps.strategy.desc":"Position sizing & risk controls","dashboard.indicator.backtest.steps.trading.title":"Trading settings","dashboard.indicator.backtest.steps.trading.desc":"Time range, capital, fees, leverage","dashboard.indicator.backtest.steps.results.title":"Results","dashboard.indicator.backtest.steps.results.desc":"Backtest output","dashboard.indicator.backtest.panel.risk":"Risk management (SL/TP/Trailing)","dashboard.indicator.backtest.panel.scale":"Scale in / DCA (trend & mean-reversion)","dashboard.indicator.backtest.panel.reduce":"Reduce position (trend & adverse)","dashboard.indicator.backtest.panel.position":"Position sizing","dashboard.indicator.backtest.field.stopLossPct":"Stop Loss (%)","dashboard.indicator.backtest.field.takeProfitPct":"Take Profit (%)","dashboard.indicator.backtest.field.trailingEnabled":"Trailing stop / take profit","dashboard.indicator.backtest.field.trailingStopPct":"Trailing drawdown (%)","dashboard.indicator.backtest.field.trailingActivationPct":"Trailing activation (%)","dashboard.indicator.backtest.field.slippage":"Slippage (%)","dashboard.indicator.backtest.field.trendAddEnabled":"Trend-following scale-in","dashboard.indicator.backtest.field.dcaAddEnabled":"Mean-reversion DCA","dashboard.indicator.backtest.field.trendAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.dcaAddStepPct":"DCA trigger (%)","dashboard.indicator.backtest.field.trendAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.dcaAddSizePct":"DCA size (% of capital)","dashboard.indicator.backtest.field.trendAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.dcaAddMaxTimes":"Max DCA times","dashboard.indicator.backtest.field.trendReduceEnabled":"Trend reduce","dashboard.indicator.backtest.field.adverseReduceEnabled":"Adverse reduce","dashboard.indicator.backtest.field.trendReduceStepPct":"Trend trigger (%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"Adverse trigger (%)","dashboard.indicator.backtest.field.trendReduceSizePct":"Reduce size (% of position)","dashboard.indicator.backtest.field.adverseReduceSizePct":"Adverse reduce size (% of position)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"Max trend reduce times","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"Max adverse reduce times","dashboard.indicator.backtest.field.entryPct":"Entry size (% of capital)","dashboard.indicator.backtest.field.minOrderPct":"Min order size (% of capital) (optional)","dashboard.indicator.backtest.closeLongTrailing":"Close Long (Trailing)","dashboard.indicator.backtest.reduceLong":"Reduce Long","dashboard.indicator.backtest.closeShortTrailing":"Close Short (Trailing)","dashboard.indicator.backtest.reduceShort":"Reduce Short","dashboard.docs.title":"مركز الوثائق","dashboard.docs.search.placeholder":"بحث في المستندات...","dashboard.docs.category.all":"الكل","dashboard.docs.category.guide":"دليل التطوير","dashboard.docs.category.api":"وثائق واجهة برمجة التطبيقات","dashboard.docs.category.tutorial":"البرنامج التعليمي","dashboard.docs.category.faq":"الأسئلة الشائعة","dashboard.docs.featured.title":"الوثائق الموصى بها","dashboard.docs.featured.tag":"موصى به","dashboard.docs.list.views":"تصفح","dashboard.docs.list.author":"المؤلف","dashboard.docs.list.empty":"لا توجد وثيقة بعد","dashboard.docs.list.backToAll":"العودة إلى جميع الوثائق","dashboard.docs.list.total":"{count} من المستندات في المجموع","dashboard.docs.detail.back":"العودة إلى قائمة المستندات","dashboard.docs.detail.updatedAt":"تم التحديث على","dashboard.docs.detail.related":"الوثائق ذات الصلة","dashboard.docs.detail.notFound":"الوثيقة غير موجودة","dashboard.docs.detail.error":"المستند غير موجود أو تم حذفه","dashboard.docs.search.result":"نتائج البحث","dashboard.docs.search.keyword":"الكلمات الرئيسية","community.filter.indicatorType":"نوع المؤشر","community.filter.all":"الكل","community.filter.other":"خيارات أخرى","community.filter.pricing":"نوع التسعير","community.filter.allPricing":"جميع التسعير","community.filter.sortBy":"الترتيب حسب","community.filter.search":"بحث","community.filter.searchPlaceholder":"البحث عن اسم المقياس","community.indicatorType.trend":"نوع الاتجاه","community.indicatorType.momentum":"نوع الزخم","community.indicatorType.volatility":"التقلب","community.indicatorType.volume":"الحجم","community.indicatorType.custom":"تخصيص","community.pricing.free":"مجانا","community.pricing.paid":"ادفع","community.sort.downloads":"التنزيلات","community.sort.rating":"التقييم","community.sort.newest":"أحدث الإصدارات","community.pagination.total":"{total} مؤشرات في المجموع","community.noDescription":"لا يوجد وصف بعد","community.detail.type":"اكتب","community.detail.pricing":"التسعير","community.detail.rating":"التقييم","community.detail.downloads":"التنزيلات","community.detail.author":"المؤلف","community.detail.description":"مقدمة","community.detail.detailContent":"وصف تفصيلي","community.detail.backtestStats":"إحصائيات الاختبار الخلفي","community.action.purchase":"مؤشر الشراء","community.action.addToMyIndicators":"أضف إلى مؤشراتي","community.action.favorite":"المجموعة","community.action.unfavorite":"إلغاء المفضلة","community.action.buyNow":"اشتري الآن","community.action.renew":"التجديد","community.purchase.price":"السعر","community.purchase.permanent":"دائم","community.purchase.monthly":"شهر","community.purchase.confirmBuy":"هل تريد تأكيد شراء هذا المؤشر ({price} QDT)؟","community.purchase.confirmRenew":"هل تريد تأكيد تجديد هذا المؤشر ({price} QDT/month)؟","community.purchase.confirmFree":"هل تريد تأكيد إضافة هذا المؤشر المجاني؟","community.purchase.confirmTitle":"تأكيد الإجراء","community.purchase.owned":"لقد قمت بشراء هذا المؤشر (صالح بشكل دائم)","community.purchase.ownIndicator":"هذا هو المقياس الذي نشرته","community.purchase.expired":"لقد انتهت صلاحية اشتراكك","community.purchase.expiresOn":"وقت انتهاء الصلاحية: {التاريخ}","community.tabs.detail":"تفاصيل المؤشر","community.tabs.backtest":"بيانات الاختبار الخلفي","community.tabs.ratings":"مراجعات المستخدم","community.rating.myRating":"تقييمي","community.rating.stars":"{عد} النجوم","community.rating.commentPlaceholder":"شارك تجربتك...","community.rating.submit":"إرسال التقييم","community.rating.modify":"تعديل","community.rating.saveModify":"حفظ التغييرات","community.rating.cancel":"إلغاء","community.rating.selectRating":"الرجاء تحديد التقييم","community.rating.success":"التقييم ناجح","community.rating.modifySuccess":"تم تعديل المراجعة بنجاح","community.rating.failed":"فشل التقييم","community.rating.noRatings":"لا توجد تعليقات حتى الآن","community.backtest.note":"البيانات المذكورة أعلاه هي نتائج اختبار خلفي تاريخية وهي للإشارة فقط ولا تمثل أرباحًا مستقبلية.","community.backtest.noData":"لا توجد بيانات باكتست حتى الآن","community.backtest.uploadHint":"لم يقم المؤلف بتحميل بيانات الاختبار الخلفي حتى الآن","community.message.loadFailed":"فشل تحميل قائمة المؤشرات","community.message.purchaseProcessing":"جارٍ معالجة طلب الشراء...","community.message.downloadSuccess":"تمت إضافة المقياس إلى قائمة المقاييس الخاصة بي","community.message.favoriteSuccess":"تم التجميع بنجاح","community.message.unfavoriteSuccess":"تم إلغاء التجميع بنجاح","community.message.operationSuccess":"العملية ناجحة","community.message.operationFailed":"فشلت العملية","community.banner.readOnly":"للقراءة فقط","community.banner.loginHint":"لل تسجيل الدخول أو التسجيل، يرجى النقر على الزر للانتقال إلى صفحة مستقلة لتجنب مشاكل CSRF","community.banner.jumpButton":"الانتقال إلى تسجيل الدخول/التسجيل","dashboard.totalEquity":"إجمالي حقوق الملكية","dashboard.totalPnL":"إجمالي الربح والخسارة","dashboard.aiStrategies":"استراتيجية الذكاء الاصطناعي","dashboard.indicatorStrategies":"استراتيجية المؤشر","dashboard.running":"الجري","dashboard.pnlHistory":"الأرباح والخسائر التاريخية","dashboard.strategyPerformance":"نسبة الربح والخسارة في الاستراتيجية","dashboard.recentTrades":"المعاملات الأخيرة","dashboard.currentPositions":"الوضع الحالي","dashboard.table.time":"الوقت","dashboard.table.strategy":"اسم السياسة","dashboard.table.symbol":"الهدف","dashboard.table.type":"اكتب","dashboard.table.side":"الاتجاه","dashboard.table.size":"الفائدة المفتوحة","dashboard.table.entryPrice":"متوسط سعر الافتتاح","dashboard.table.price":"السعر","dashboard.table.amount":"الكمية","dashboard.table.profit":"الربح والخسارة","dashboard.pendingOrders":"سجل تنفيذ الطلبات","dashboard.totalOrders":"إجمالي {total} طلب","dashboard.viewError":"عرض الخطأ","dashboard.filled":"تم التنفيذ","dashboard.orderTable.time":"وقت الإنشاء","dashboard.orderTable.strategy":"الإستراتيجية","dashboard.orderTable.symbol":"زوج التداول","dashboard.orderTable.signalType":"نوع الإشارة","dashboard.orderTable.amount":"الكمية","dashboard.orderTable.price":"سعر التنفيذ","dashboard.orderTable.status":"الحالة","dashboard.orderTable.executedAt":"وقت التنفيذ","dashboard.signalType.openLong":"فتح Long","dashboard.signalType.openShort":"فتح Short","dashboard.signalType.closeLong":"إغلاق Long","dashboard.signalType.closeShort":"إغلاق Short","dashboard.signalType.addLong":"إضافة Long","dashboard.signalType.addShort":"إضافة Short","dashboard.status.pending":"قيد الانتظار","dashboard.status.processing":"قيد المعالجة","dashboard.status.completed":"مكتمل","dashboard.status.failed":"فشل","dashboard.status.cancelled":"ملغي","dashboard.table.pnl":"الربح أو الخسارة غير المحققة","form.basic-form.basic.title":"الشكل الأساسي","form.basic-form.basic.description":"تُستخدم صفحات النماذج لجمع المعلومات من المستخدمين أو التحقق منها. تُستخدم النماذج الأساسية بشكل شائع في سيناريوهات النماذج التي تحتوي على عدد قليل من عناصر البيانات.","form.basic-form.title.label":"العنوان","form.basic-form.title.placeholder":"إعطاء الهدف اسما","form.basic-form.title.required":"الرجاء إدخال عنوان","form.basic-form.date.label":"تاريخ البدء والانتهاء","form.basic-form.placeholder.start":"تاريخ البدء","form.basic-form.placeholder.end":"تاريخ الانتهاء","form.basic-form.date.required":"الرجاء تحديد تاريخي البدء والانتهاء","form.basic-form.goal.label":"وصف الهدف","form.basic-form.goal.placeholder":"الرجاء إدخال أهداف العمل المرحلية","form.basic-form.goal.required":"الرجاء إدخال وصف الهدف","form.basic-form.standard.label":"قياس","form.basic-form.standard.placeholder":"الرجاء إدخال المقاييس","form.basic-form.standard.required":"الرجاء إدخال المقاييس","form.basic-form.client.label":"العميل","form.basic-form.client.required":"يرجى وصف العملاء الذين تخدمهم","form.basic-form.label.tooltip":"متلقي الخدمة المستهدفين","form.basic-form.client.placeholder":"يرجى وصف العملاء الذين تخدمهم، والعملاء الداخليين مباشرةً @الاسم/رقم الوظيفة","form.basic-form.invites.label":"دعوة المراجعين","form.basic-form.invites.placeholder":"يرجى إرسال @الاسم/رقم الموظف مباشرةً، ويمكنك دعوة ما يصل إلى 5 أشخاص","form.basic-form.weight.label":"الوزن","form.basic-form.weight.placeholder":"من فضلك أدخل","form.basic-form.public.label":"تستهدف الجمهور","form.basic-form.label.help":"تتم مشاركة العملاء والمراجعين بشكل افتراضي","form.basic-form.radio.public":"عام","form.basic-form.radio.partially-public":"عامة جزئيا","form.basic-form.radio.private":"خاص","form.basic-form.publicUsers.placeholder":"مفتوح ل","form.basic-form.option.A":"زميل 1","form.basic-form.option.B":"زميل 2","form.basic-form.option.C":"زميل ثلاثة","form.basic-form.email.required":"الرجاء إدخال عنوان البريد الإلكتروني الخاص بك!","form.basic-form.email.wrong-format":"تنسيق عنوان البريد الإلكتروني خاطئ!","form.basic-form.userName.required":"الرجاء إدخال اسم المستخدم!","form.basic-form.password.required":"الرجاء إدخال كلمة المرور الخاصة بك!","form.basic-form.password.twice":"كلمات المرور التي تم إدخالها مرتين غير متطابقة!","form.basic-form.strength.msg":"الرجاء إدخال 6 أحرف على الأقل. يرجى عدم استخدام كلمات المرور التي يمكن تخمينها بسهولة.","form.basic-form.strength.strong":"القوة : قوية","form.basic-form.strength.medium":"القوة: متوسطة","form.basic-form.strength.short":"القوة : قصيرة جداً","form.basic-form.confirm-password.required":"الرجاء تأكيد كلمة المرور الخاصة بك!","form.basic-form.phone-number.required":"الرجاء إدخال رقم هاتفك المحمول!","form.basic-form.phone-number.wrong-format":"تنسيق رقم الهاتف المحمول خاطئ!","form.basic-form.verification-code.required":"الرجاء إدخال رمز التحقق!","form.basic-form.form.get-captcha":"الحصول على رمز التحقق","form.basic-form.captcha.second":"ثواني","form.basic-form.form.optional":"(اختياري)","form.basic-form.form.submit":"إرسال","form.basic-form.form.save":"حفظ","form.basic-form.email.placeholder":"البريد الإلكتروني","form.basic-form.password.placeholder":"كلمة المرور مكونة من 6 أحرف على الأقل، حساسة لحالة الأحرف","form.basic-form.confirm-password.placeholder":"تأكيد كلمة المرور","form.basic-form.phone-number.placeholder":"رقم الهاتف المحمول","form.basic-form.verification-code.placeholder":"رمز التحقق","result.success.title":"تم التقديم بنجاح","result.success.description":'يتم استخدام صفحة نتائج الإرسال لتقديم تعليقات على نتائج المعالجة لسلسلة من مهام التشغيل. إذا كانت عملية بسيطة فقط، فاستخدم رسالة الملاحظات العامة السريعة. يمكن لمنطقة النص هذه عرض تعليمات تكميلية بسيطة. إذا كانت هناك حاجة لعرض "المستندات"، فيمكن للمنطقة الرمادية أدناه عرض محتوى أكثر تعقيدًا.',"result.success.operate-title":"اسم المشروع","result.success.operate-id":"معرف المشروع","result.success.principal":"الشخص المسؤول","result.success.operate-time":"الوقت الفعال","result.success.step1-title":"إنشاء مشروع","result.success.step1-operator":"تشو ليلي","result.success.step2-title":"المراجعة الأولية للقسم","result.success.step2-operator":"تشو ماوماو","result.success.step2-extra":"عاجل","result.success.step3-title":"المراجعة المالية","result.success.step4-title":"كامل","result.success.btn-return":"العودة إلى القائمة","result.success.btn-project":"عرض العناصر","result.success.btn-print":"طباعة","result.fail.error.title":"فشل التقديم","result.fail.error.description":"يرجى التحقق من المعلومات التالية وتعديلها قبل إعادة الإرسال.","result.fail.error.hint-title":"يحتوي المحتوى الذي أرسلته على الأخطاء التالية:","result.fail.error.hint-text1":"لقد تم تجميد حسابك","result.fail.error.hint-btn1":"ذوبان الجليد على الفور","result.fail.error.hint-text2":"حسابك ليس مؤهلاً بعد للتقديم","result.fail.error.hint-btn2":"قم بالترقية الآن","result.fail.error.btn-text":"العودة إلى التعديل","account.settings.menuMap.custom":"التخصيص","account.settings.menuMap.binding":"ربط الحساب","account.settings.basic.avatar":"الصورة الرمزية","account.settings.basic.change-avatar":"تغيير الصورة الرمزية","account.settings.basic.email":"البريد الإلكتروني","account.settings.basic.email-message":"الرجاء إدخال البريد الإلكتروني الخاص بك!","account.settings.basic.nickname":"اللقب","account.settings.basic.nickname-message":"الرجاء إدخال اللقب الخاص بك!","account.settings.basic.profile":"الملف الشخصي","account.settings.basic.profile-message":"الرجاء إدخال ملف التعريف الشخصي الخاص بك!","account.settings.basic.profile-placeholder":"الملف الشخصي","account.settings.basic.country":"البلد/المنطقة","account.settings.basic.country-message":"الرجاء إدخال بلدك أو منطقتك!","account.settings.basic.geographic":"المحافظة والمدينة","account.settings.basic.geographic-message":"من فضلك أدخل محافظتك ومدينتك!","account.settings.basic.address":"عنوان الشارع","account.settings.basic.address-message":"الرجاء إدخال عنوان الشارع الخاص بك!","account.settings.basic.phone":"رقم الاتصال","account.settings.basic.phone-message":"الرجاء إدخال رقم الاتصال الخاص بك!","account.settings.basic.update":"تحديث المعلومات الأساسية","account.settings.basic.update.success":"تم تحديث المعلومات الأساسية بنجاح","account.settings.security.strong":"قوي","account.settings.security.medium":"في","account.settings.security.weak":"ضعيف","account.settings.security.password":"كلمة مرور الحساب","account.settings.security.password-description":"قوة كلمة المرور الحالية:","account.settings.security.phone":"الهاتف المحمول الأمن","account.settings.security.phone-description":"الهاتف المحمول المرتبط بالفعل:","account.settings.security.question":"القضايا الأمنية","account.settings.security.question-description":"لم يتم تعيين أي أسئلة أمنية، الأمر الذي يمكن أن يحمي أمان الحساب بشكل فعال.","account.settings.security.email":"ربط البريد الإلكتروني","account.settings.security.email-description":"عنوان البريد الإلكتروني المرتبط بالفعل:","account.settings.security.mfa":"جهاز ام اف ايه","account.settings.security.mfa-description":"جهاز MFA غير مقيد. بعد الربط، يمكنك التأكيد مرة أخرى.","account.settings.security.modify":"تعديل","account.settings.security.set":"الإعدادات","account.settings.security.bind":"ملزمة","account.settings.binding.taobao":"ربط تاوباو","account.settings.binding.taobao-description":"حساب تاوباو غير ملزم حاليا","account.settings.binding.alipay":"ربط عليباي","account.settings.binding.alipay-description":"حساب Alipay غير ملزم حاليا","account.settings.binding.dingding":"ملزمة DingTalk","account.settings.binding.dingding-description":"لا يوجد حساب DingTalk مرتبط حاليًا","account.settings.binding.bind":"ملزمة","account.settings.notification.password":"كلمة مرور الحساب","account.settings.notification.password-description":"سيتم إخطار الرسائل الواردة من المستخدمين الآخرين في شكل رسائل موقع.","account.settings.notification.messages":"رسائل النظام","account.settings.notification.messages-description":"سيتم إخطار رسائل النظام في شكل رسائل الموقع.","account.settings.notification.todo":"المهام الواجبة","account.settings.notification.todo-description":"سيتم إخطار المهام الواجبة في شكل رسائل داخل الموقع","account.settings.settings.open":"مفتوح","account.settings.settings.close":"قريب","trading-assistant.title":"مساعد التداول","trading-assistant.strategyList":"قائمة الإستراتيجية","trading-assistant.createStrategy":"إنشاء سياسة","trading-assistant.noStrategy":"لا توجد استراتيجية حتى الآن","trading-assistant.selectStrategy":"يرجى تحديد استراتيجية من اليسار لعرض التفاصيل","trading-assistant.startStrategy":"استراتيجية الإطلاق","trading-assistant.stopStrategy":"استراتيجية التوقف","trading-assistant.editStrategy":"استراتيجية التحرير","trading-assistant.deleteStrategy":"حذف السياسة","trading-assistant.status.running":"الجري","trading-assistant.status.stopped":"توقف","trading-assistant.status.error":"خطأ","trading-assistant.strategyType.IndicatorStrategy":"استراتيجية المؤشر الفني","trading-assistant.strategyType.PromptBasedStrategy":"استراتيجية الكلمات الدلالية","trading-assistant.strategyType.GridStrategy":"استراتيجية الشبكة","trading-assistant.tabs.tradingRecords":"تاريخ المعاملة","trading-assistant.tabs.positions":"سجل الموقف","trading-assistant.tabs.equityCurve":"منحنى الأسهم","trading-assistant.form.step1":"حدد المؤشرات","trading-assistant.form.step2":"تكوين الصرف","trading-assistant.form.step3":"معلمات الاستراتيجية","trading-assistant.form.indicator":"حدد المؤشرات","trading-assistant.form.indicatorHint":"يمكنك فقط تحديد المؤشرات الفنية التي اشتريتها أو أنشأتها","trading-assistant.form.qdtCostHints":"سيؤدي استخدام الإستراتيجية إلى استهلاك QDT، يرجى التأكد من أن الحساب به رصيد كافٍ من QDT","trading-assistant.form.indicatorDescription":"وصف المؤشر","trading-assistant.form.noDescription":"لا يوجد وصف بعد","trading-assistant.form.exchange":"اختر الصرف","trading-assistant.form.apiKey":"مفتاح واجهة برمجة التطبيقات","trading-assistant.form.secretKey":"المفتاح السري","trading-assistant.form.passphrase":"عبارة المرور","trading-assistant.form.testConnection":"اتصال الاختبار","trading-assistant.form.strategyName":"اسم السياسة","trading-assistant.form.symbol":"زوج التداول","trading-assistant.form.symbolHint":"حاليًا، يتم دعم أزواج تداول العملات المشفرة فقط","trading-assistant.form.initialCapital":"حجم الاستثمار","trading-assistant.form.marketType":"نوع السوق","trading-assistant.form.marketTypeFutures":"العقد","trading-assistant.form.marketTypeSpot":"بقعة","trading-assistant.form.marketTypeHint":"يدعم العقد التداول في اتجاهين والرافعة المالية، في حين أن السعر الفوري يدعم فقط المراكز الطويلة والرافعة المالية ثابتة عند 1x","trading-assistant.form.leverage":"الاستفادة المتعددة","trading-assistant.form.leverageHint":"العقد: 1-125 مرة، البقعة: ثابتة 1 مرة","trading-assistant.form.spotLeverageFixed":"الرافعة المالية للتداول الفوري ثابتة عند 1x","trading-assistant.form.spotOnlyLongHint":"التداول الفوري يدعم فقط المراكز الطويلة","trading-assistant.form.tradeDirection":"اتجاه التداول","trading-assistant.form.tradeDirectionLong":"طويلة فقط","trading-assistant.form.tradeDirectionShort":"قصيرة فقط","trading-assistant.form.tradeDirectionBoth":"معاملة في اتجاهين","trading-assistant.form.timeframe":"الفترة الزمنية","trading-assistant.form.klinePeriod":"فترة K-Line","trading-assistant.form.timeframe1m":"1 دقيقة","trading-assistant.form.timeframe5m":"5 دقائق","trading-assistant.form.timeframe15m":"15 دقيقة","trading-assistant.form.timeframe30m":"30 دقيقة","trading-assistant.form.timeframe1H":"1 ساعة","trading-assistant.form.timeframe4H":"4 ساعات","trading-assistant.form.timeframe1D":"يوم واحد","trading-assistant.form.selectStrategyType":"اختر نوع الاستراتيجية","trading-assistant.form.indicatorStrategy":"استراتيجية المؤشر","trading-assistant.form.indicatorStrategyDesc":"استراتيجية تداول آلية تعتمد على المؤشرات الفنية","trading-assistant.form.aiStrategy":"استراتيجية AI","trading-assistant.form.aiStrategyDesc":"استراتيجية تداول آلية تعتمد على اتخاذ القرار الذكي للذكاء الاصطناعي","trading-assistant.form.enableAiFilter":"تفعيل مرشح اتخاذ القرار الذكي للذكاء الاصطناعي","trading-assistant.form.enableAiFilterHint":"عند التفعيل، سيتم تصفية إشارات المؤشر بواسطة الذكاء الاصطناعي لتحسين جودة التداول","trading-assistant.form.aiFilterPrompt":"موجه مخصص","trading-assistant.form.aiFilterPromptHint":"توفير تعليمات مخصصة لتصفية الذكاء الاصطناعي، اتركه فارغًا لاستخدام الإعداد الافتراضي للنظام","trading-assistant.validation.strategyTypeRequired":"يرجى اختيار نوع الاستراتيجية","trading-assistant.form.advancedSettings":"الإعدادات المتقدمة","trading-assistant.form.orderMode":"وضع الطلب","trading-assistant.form.orderModeMaker":"صانع","trading-assistant.form.orderModeTaker":"سعر السوق (المتلقي)","trading-assistant.form.orderModeHint":"يستخدم وضع الأمر المعلق أوامر الحد وتكون رسوم المناولة أقل؛ يتم تنفيذ وضع سعر السوق على الفور وتكون رسوم المناولة أعلى.","trading-assistant.form.makerWaitSec":"وقت الانتظار للأوامر المعلقة (ثواني)","trading-assistant.form.makerWaitSecHint":"الوقت اللازم لانتظار المعاملة بعد تقديم الطلب. قم بالإلغاء وحاول مرة أخرى بعد انتهاء المهلة.","trading-assistant.form.makerRetries":"عدد مرات إعادة المحاولة للأوامر المعلقة","trading-assistant.form.makerRetriesHint":"الحد الأقصى لعدد مرات إعادة المحاولة عندما لا يتم تنفيذ الأمر المعلق","trading-assistant.form.fallbackToMarket":"يفشل الأمر المعلق ويتم تخفيض سعر السوق.","trading-assistant.form.fallbackToMarketHint":"عندما لا يتم إكمال أمر الفتح/الإغلاق المعلق، ما إذا كان ينبغي تخفيضه إلى أمر سوق لضمان اكتمال المعاملة.","trading-assistant.form.marginMode":"وضع الهامش","trading-assistant.form.marginModeCross":"مستودع كامل","trading-assistant.form.marginModeIsolated":"موقف معزول","trading-assistant.form.stopLossPct":"نسبة وقف الخسارة (٪)","trading-assistant.form.stopLossPctHint":"قم بتعيين نسبة وقف الخسارة، 0 يعني عدم تمكين وقف الخسارة","trading-assistant.form.takeProfitPct":"نسبة جني الأرباح (%)","trading-assistant.form.takeProfitPctHint":"قم بتعيين نسبة أخذ الربح، 0 يعني تعطيل أخذ الربح","trading-assistant.form.signalMode":"وضع الإشارة","trading-assistant.form.signalModeConfirmed":"تأكيد الوضع","trading-assistant.form.signalModeAggressive":"الوضع العدواني","trading-assistant.form.signalModeHint":"وضع التأكيد: يتحقق فقط من خطوط K المكتملة؛ الوضع العدواني: يتحقق أيضًا من تشكيل خطوط K","trading-assistant.form.cancel":"إلغاء","trading-assistant.form.prev":"الخطوة السابقة","trading-assistant.form.next":"الخطوة التالية","trading-assistant.form.confirmCreate":"تأكيد الإنشاء","trading-assistant.form.confirmEdit":"تأكيد التغييرات","trading-assistant.messages.createSuccess":"تم إنشاء الإستراتيجية بنجاح","trading-assistant.messages.createFailed":"فشل في إنشاء السياسة","trading-assistant.messages.updateSuccess":"تم تحديث السياسة بنجاح","trading-assistant.messages.updateFailed":"فشل تحديث السياسة","trading-assistant.messages.deleteSuccess":"تم حذف السياسة بنجاح","trading-assistant.messages.deleteFailed":"فشل سياسة الحذف","trading-assistant.messages.startSuccess":"بدأت الإستراتيجية بنجاح","trading-assistant.messages.startFailed":"فشل في بدء السياسة","trading-assistant.messages.stopSuccess":"تم إيقاف الإستراتيجية بنجاح","trading-assistant.messages.stopFailed":"فشلت استراتيجية التوقف","trading-assistant.messages.loadFailed":"فشل الحصول على قائمة السياسات","trading-assistant.messages.runningWarning":"الاستراتيجية قيد التشغيل. يرجى إيقاف الإستراتيجية قبل تعديلها.","trading-assistant.messages.deleteConfirmWithName":'هل أنت متأكد أنك تريد حذف السياسة "{name}"؟ هذه العملية لا رجعة فيها.',"trading-assistant.messages.deleteConfirm":"هل أنت متأكد أنك تريد حذف هذه السياسة؟ هذه العملية لا رجعة فيها.","trading-assistant.messages.loadTradesFailed":"فشل في الحصول على سجلات المعاملات","trading-assistant.messages.loadPositionsFailed":"فشل الحصول على سجل الموقف","trading-assistant.messages.loadEquityFailed":"فشل في الحصول على منحنى الأسهم","trading-assistant.messages.loadIndicatorsFailed":"فشل تحميل قائمة المؤشرات، يرجى المحاولة مرة أخرى في وقت لاحق","trading-assistant.messages.spotLimitations":"تم ضبط التداول الفوري تلقائيًا على رافعة مالية طويلة فقط بمقدار 1x","trading-assistant.messages.autoFillApiConfig":"تمت تعبئة تكوين واجهة برمجة التطبيقات التاريخية للبورصة تلقائيًا","trading-assistant.placeholders.selectIndicator":"الرجاء تحديد مؤشر","trading-assistant.placeholders.selectExchange":"الرجاء تحديد التبادل","trading-assistant.placeholders.inputApiKey":"الرجاء إدخال مفتاح API","trading-assistant.placeholders.inputSecretKey":"الرجاء إدخال المفتاح السري","trading-assistant.placeholders.inputPassphrase":"الرجاء إدخال عبارة المرور","trading-assistant.placeholders.inputStrategyName":"الرجاء إدخال اسم السياسة","trading-assistant.placeholders.selectSymbol":"يرجى اختيار زوج التداول","trading-assistant.placeholders.selectTimeframe":"الرجاء تحديد الفترة الزمنية","trading-assistant.placeholders.selectKlinePeriod":"الرجاء تحديد فترة K-Line","trading-assistant.placeholders.inputAiFilterPrompt":"الرجاء إدخال موجه مخصص (اختياري)","trading-assistant.validation.indicatorRequired":"الرجاء تحديد مؤشر","trading-assistant.validation.exchangeRequired":"الرجاء تحديد التبادل","trading-assistant.validation.apiKeyRequired":"الرجاء إدخال مفتاح API","trading-assistant.validation.secretKeyRequired":"الرجاء إدخال المفتاح السري","trading-assistant.validation.passphraseRequired":"الرجاء إدخال عبارة المرور","trading-assistant.validation.exchangeConfigIncomplete":"يرجى ملء معلومات تكوين التبادل الكاملة","trading-assistant.validation.testConnectionRequired":'يرجى النقر على زر "اختبار الاتصال" أولاً والتأكد من نجاح الاتصال',"trading-assistant.validation.testConnectionFailed":"فشل اختبار الاتصال، يرجى التحقق من التكوين وإعادة المحاولة","trading-assistant.validation.credentialRequired":"يرجى إضافة واختبار بيانات اعتماد التبادل في المركز الشخصي أولاً","trading-assistant.validation.strategyNameRequired":"الرجاء إدخال اسم السياسة","trading-assistant.validation.symbolRequired":"يرجى اختيار زوج التداول","trading-assistant.validation.initialCapitalRequired":"الرجاء إدخال مبلغ الاستثمار","trading-assistant.validation.leverageRequired":"الرجاء إدخال نسبة الرافعة المالية","trading-assistant.table.time":"الوقت","trading-assistant.table.type":"اكتب","trading-assistant.table.price":"السعر","trading-assistant.table.amount":"الكمية","trading-assistant.table.value":"المبلغ","trading-assistant.table.commission":"رسوم المناولة","trading-assistant.table.symbol":"زوج التداول","trading-assistant.table.side":"الاتجاه","trading-assistant.table.size":"كمية الموقف","trading-assistant.table.entryPrice":"سعر الافتتاح","trading-assistant.table.currentPrice":"السعر الحالي","trading-assistant.table.unrealizedPnl":"الربح أو الخسارة غير المحققة","trading-assistant.table.pnlPercent":"نسبة الربح والخسارة","trading-assistant.table.buy":"شراء","trading-assistant.table.sell":"بيع","trading-assistant.table.long":"اذهب لفترة طويلة","trading-assistant.table.short":"قصيرة","trading-assistant.table.noPositions":"لا توجد مناصب حتى الآن","trading-assistant.detail.title":"تفاصيل الاستراتيجية","trading-assistant.detail.strategyName":"اسم السياسة","trading-assistant.detail.strategyType":"نوع الإستراتيجية","trading-assistant.detail.status":"الحالة","trading-assistant.detail.tradingMode":"نموذج التداول","trading-assistant.detail.exchange":"تبادل","trading-assistant.detail.initialCapital":"رأس المال الأولي","trading-assistant.detail.totalInvestment":"إجمالي مبلغ الاستثمار","trading-assistant.detail.currentEquity":"صافي القيمة الحالية","trading-assistant.detail.totalPnl":"إجمالي الربح والخسارة","trading-assistant.detail.indicatorName":"اسم المؤشر","trading-assistant.detail.maxLeverage":"الحد الأقصى للرافعة المالية","trading-assistant.detail.decideInterval":"الفاصل الزمني للقرار","trading-assistant.detail.symbols":"كائن المعاملة","trading-assistant.detail.createdAt":"وقت الخلق","trading-assistant.detail.updatedAt":"وقت التحديث","trading-assistant.detail.llmConfig":"تكوين نموذج الذكاء الاصطناعي","trading-assistant.detail.exchangeConfig":"تكوين الصرف","trading-assistant.detail.provider":"مزود","trading-assistant.detail.modelId":"معرف النموذج","trading-assistant.detail.close":"إغلاق","trading-assistant.detail.loadFailed":"فشل الحصول على تفاصيل السياسة","trading-assistant.equity.noData":"لا توجد بيانات عن صافي القيمة حتى الآن","trading-assistant.equity.equity":"صافي القيمة","trading-assistant.exchange.tradingMode":"نموذج التداول","trading-assistant.exchange.virtual":"محاكاة التداول","trading-assistant.exchange.live":"معاملة حقيقية","trading-assistant.exchange.selectExchange":"اختر الصرف","trading-assistant.exchange.walletAddress":"عنوان المحفظة","trading-assistant.exchange.walletAddressPlaceholder":"الرجاء إدخال عنوان محفظتك (يبدأ بـ 0x)","trading-assistant.exchange.privateKey":"مفتاح خاص","trading-assistant.exchange.privateKeyPlaceholder":"الرجاء إدخال المفتاح الخاص (64 حرفًا)","trading-assistant.exchange.testConnection":"اتصال الاختبار","trading-assistant.exchange.connectionSuccess":"تم الاتصال بنجاح","trading-assistant.exchange.connectionFailed":"فشل الاتصال","trading-assistant.exchange.testFailed":"فشل اختبار الاتصال","trading-assistant.exchange.fillComplete":"يرجى ملء معلومات تكوين التبادل الكاملة","trading-assistant.strategyTypeOptions.ai":"استراتيجية تعتمد على الذكاء الاصطناعي","trading-assistant.strategyTypeOptions.indicator":"استراتيجية المؤشر الفني","trading-assistant.strategyTypeOptions.aiDeveloping":"إن وظيفة الإستراتيجية المبنية على الذكاء الاصطناعي قيد التطوير، لذا ترقبوا ذلك","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"ميزات الإستراتيجية المعتمدة على الذكاء الاصطناعي قيد التطوير","trading-assistant.indicatorType.trend":"الاتجاه","trading-assistant.indicatorType.momentum":"الزخم","trading-assistant.indicatorType.volatility":"التقلب","trading-assistant.indicatorType.volume":"الحجم","trading-assistant.indicatorType.custom":"تخصيص","trading-assistant.exchangeNames":{okx:"أوكي إكس",binance:"بينانس",hyperliquid:"السائل الزائد",blockchaincom:"Blockchain.com",coinbaseexchange:"كوين بيس",gate:"بوابة.io",mexc:"ميكسك",kraken:"كراكن",bitfinex:"بيتفينكس",bybit:"بايبيت",kucoin:"كيو كوين",huobi:"هوبي",bitget:"بيتجيت",bitmex:"بيتميكس",deribit:"ديربيت",phemex:"فيميكس",bitmart:"بيتمارت",bitstamp:"بيتستامب",bittrex:"بيتريكس",poloniex:"بولونيكس",gemini:"الجوزاء",cryptocom:"تشفير.كوم",bitflyer:"bitFlyer",upbit:"أوبيت",bithumb:"بيتهامب",coinone:"عملة واحدة",zb:"ZB",lbank:"بنك إل",bibox:"بيبوكس",bigone:"BigONE",bitrue:"صحيح",coinex:"كوين إكس",digifinex:"DigiFinex",ftx:"إف تي إكس",ftxus:"إف تي إكس الولايات المتحدة",binanceus:"بينانس الولايات المتحدة",binancecoinm:"عملة بينانس-M",binanceusdm:"Binance USDⓈ-M",deepcoin:"ديبكوين"},"ai-trading-assistant.title":"مساعد التداول بالذكاء الاصطناعي","ai-trading-assistant.strategyList":"قائمة الإستراتيجية","ai-trading-assistant.createStrategy":"إنشاء سياسة","ai-trading-assistant.noStrategy":"لا توجد استراتيجية حتى الآن","ai-trading-assistant.selectStrategy":"يرجى تحديد استراتيجية من اليسار لعرض التفاصيل","ai-trading-assistant.startStrategy":"استراتيجية الإطلاق","ai-trading-assistant.stopStrategy":"استراتيجية التوقف","ai-trading-assistant.editStrategy":"استراتيجية التحرير","ai-trading-assistant.deleteStrategy":"حذف السياسة","ai-trading-assistant.status.running":"الجري","ai-trading-assistant.status.stopped":"توقف","ai-trading-assistant.status.error":"خطأ","ai-trading-assistant.tabs.tradingRecords":"تاريخ المعاملة","ai-trading-assistant.tabs.positions":"سجل الموقف","ai-trading-assistant.tabs.aiDecisions":"سجل قرار الذكاء الاصطناعي","ai-trading-assistant.tabs.equityCurve":"منحنى الأسهم","ai-trading-assistant.form.createTitle":"إنشاء استراتيجيات التداول بالذكاء الاصطناعي","ai-trading-assistant.form.editTitle":"تحرير استراتيجية التداول بالذكاء الاصطناعي","ai-trading-assistant.form.strategyName":"اسم السياسة","ai-trading-assistant.form.modelId":"نموذج الذكاء الاصطناعي","ai-trading-assistant.form.modelIdHint":"استخدم خدمة OpenRouter الخاصة بالنظام دون تكوين مفتاح API","ai-trading-assistant.form.decideInterval":"الفاصل الزمني للقرار","ai-trading-assistant.form.decideInterval5m":"5 دقائق","ai-trading-assistant.form.decideInterval10m":"10 دقائق","ai-trading-assistant.form.decideInterval30m":"30 دقيقة","ai-trading-assistant.form.decideInterval1h":"1 ساعة","ai-trading-assistant.form.decideInterval4h":"4 ساعات","ai-trading-assistant.form.decideInterval1d":"يوم واحد","ai-trading-assistant.form.decideInterval1w":"1 أسبوع","ai-trading-assistant.form.decideIntervalHint":"الفاصل الزمني للذكاء الاصطناعي لاتخاذ القرارات","ai-trading-assistant.form.runPeriod":"تشغيل دورة","ai-trading-assistant.form.runPeriodHint":"وقت البدء ووقت الانتهاء لتشغيل الإستراتيجية","ai-trading-assistant.form.startDate":"تاريخ البدء","ai-trading-assistant.form.endDate":"تاريخ الانتهاء","ai-trading-assistant.form.qdtCostTitle":"تعليمات خصم QDT","ai-trading-assistant.form.qdtCostHint":"سيتم خصم {cost} QDT لكل قرار للذكاء الاصطناعي. يرجى التأكد من أن حسابك يحتوي على رصيد QDT كافٍ. أثناء تنفيذ الإستراتيجية، سيتم خصم الرسوم في الوقت الفعلي لكل قرار.","ai-trading-assistant.form.apiKey":"مفتاح واجهة برمجة التطبيقات","ai-trading-assistant.form.exchange":"اختر الصرف","ai-trading-assistant.form.secretKey":"المفتاح السري","ai-trading-assistant.form.passphrase":"عبارة المرور","ai-trading-assistant.form.testConnection":"اتصال الاختبار","ai-trading-assistant.form.symbol":"زوج التداول","ai-trading-assistant.form.symbolHint":"حدد زوج التداول للتداول","ai-trading-assistant.form.initialCapital":"المبلغ المستثمر (الهامش)","ai-trading-assistant.form.leverage":"الاستفادة المتعددة","ai-trading-assistant.form.timeframe":"الفترة الزمنية","ai-trading-assistant.form.timeframe1m":"1 دقيقة","ai-trading-assistant.form.timeframe5m":"5 دقائق","ai-trading-assistant.form.timeframe15m":"15 دقيقة","ai-trading-assistant.form.timeframe30m":"30 دقيقة","ai-trading-assistant.form.timeframe1H":"1 ساعة","ai-trading-assistant.form.timeframe4H":"4 ساعات","ai-trading-assistant.form.timeframe1D":"يوم واحد","ai-trading-assistant.form.marketType":"نوع السوق","ai-trading-assistant.form.marketTypeFutures":"العقد","ai-trading-assistant.form.marketTypeSpot":"بقعة","ai-trading-assistant.form.totalPnl":"إجمالي الربح والخسارة","ai-trading-assistant.form.customPrompt":"كلمات موجهة مخصصة","ai-trading-assistant.form.customPromptHint":"اختياري، يُستخدم لتخصيص استراتيجيات التداول بالذكاء الاصطناعي ومنطق اتخاذ القرار","ai-trading-assistant.form.cancel":"إلغاء","ai-trading-assistant.form.prev":"الخطوة السابقة","ai-trading-assistant.form.next":"الخطوة التالية","ai-trading-assistant.form.confirmCreate":"تأكيد الإنشاء","ai-trading-assistant.form.confirmEdit":"تأكيد التغييرات","ai-trading-assistant.messages.createSuccess":"تم إنشاء الإستراتيجية بنجاح","ai-trading-assistant.messages.createFailed":"فشل في إنشاء السياسة","ai-trading-assistant.messages.updateSuccess":"تم تحديث السياسة بنجاح","ai-trading-assistant.messages.updateFailed":"فشل تحديث السياسة","ai-trading-assistant.messages.deleteSuccess":"تم حذف السياسة بنجاح","ai-trading-assistant.messages.deleteFailed":"فشل سياسة الحذف","ai-trading-assistant.messages.startSuccess":"بدأت الإستراتيجية بنجاح","ai-trading-assistant.messages.startFailed":"فشل في بدء السياسة","ai-trading-assistant.messages.stopSuccess":"تم إيقاف الإستراتيجية بنجاح","ai-trading-assistant.messages.stopFailed":"فشلت استراتيجية التوقف","ai-trading-assistant.messages.loadFailed":"فشل الحصول على قائمة السياسات","ai-trading-assistant.messages.loadDecisionsFailed":"فشل في الحصول على سجل قرار الذكاء الاصطناعي","ai-trading-assistant.messages.deleteConfirm":"هل أنت متأكد أنك تريد حذف هذه السياسة؟ هذه العملية لا رجعة فيها.","ai-trading-assistant.placeholders.inputStrategyName":"الرجاء إدخال اسم السياسة","ai-trading-assistant.placeholders.selectModelId":"الرجاء تحديد نموذج الذكاء الاصطناعي","ai-trading-assistant.placeholders.selectDecideInterval":"الرجاء تحديد الفاصل الزمني للقرار","ai-trading-assistant.placeholders.startTime":"وقت البدء","ai-trading-assistant.placeholders.endTime":"وقت النهاية","ai-trading-assistant.placeholders.inputApiKey":"الرجاء إدخال مفتاح API","ai-trading-assistant.placeholders.selectExchange":"الرجاء تحديد التبادل","ai-trading-assistant.placeholders.inputSecretKey":"الرجاء إدخال المفتاح السري","ai-trading-assistant.placeholders.inputPassphrase":"الرجاء إدخال عبارة المرور","ai-trading-assistant.placeholders.selectSymbol":"يرجى تحديد زوج تداول، مثل: BTC/USDT","ai-trading-assistant.placeholders.selectTimeframe":"الرجاء تحديد الفترة الزمنية","ai-trading-assistant.placeholders.inputCustomPrompt":"الرجاء إدخال كلمة مطالبة مخصصة (اختياري)","ai-trading-assistant.validation.strategyNameRequired":"الرجاء إدخال اسم السياسة","ai-trading-assistant.validation.modelIdRequired":"الرجاء تحديد نموذج الذكاء الاصطناعي","ai-trading-assistant.validation.runPeriodRequired":"الرجاء تحديد دورة التشغيل","ai-trading-assistant.validation.apiKeyRequired":"الرجاء إدخال مفتاح API","ai-trading-assistant.validation.exchangeRequired":"الرجاء تحديد التبادل","ai-trading-assistant.validation.secretKeyRequired":"الرجاء إدخال المفتاح السري","ai-trading-assistant.validation.symbolRequired":"يرجى اختيار زوج التداول","ai-trading-assistant.validation.initialCapitalRequired":"الرجاء إدخال مبلغ الاستثمار","ai-trading-assistant.table.time":"الوقت","ai-trading-assistant.table.type":"اكتب","ai-trading-assistant.table.price":"السعر","ai-trading-assistant.table.amount":"الكمية","ai-trading-assistant.table.value":"المبلغ","ai-trading-assistant.table.symbol":"زوج التداول","ai-trading-assistant.table.side":"الاتجاه","ai-trading-assistant.table.size":"كمية الموقف","ai-trading-assistant.table.entryPrice":"سعر الافتتاح","ai-trading-assistant.table.currentPrice":"السعر الحالي","ai-trading-assistant.table.unrealizedPnl":"الربح أو الخسارة غير المحققة","ai-trading-assistant.table.profit":"الربح والخسارة","ai-trading-assistant.table.openLong":"مفتوح لفترة طويلة","ai-trading-assistant.table.closeLong":"بيندو","ai-trading-assistant.table.openShort":"فتح قصيرة","ai-trading-assistant.table.closeShort":"فارغ","ai-trading-assistant.table.addLong":"غادوت","ai-trading-assistant.table.addShort":"إضافة قصيرة","ai-trading-assistant.table.closeShortProfit":"جني الأرباح من المركز القصير","ai-trading-assistant.table.closeShortStop":"وقف الخسارة","ai-trading-assistant.table.closeLongProfit":"توقف لفترة طويلة وجني الأرباح","ai-trading-assistant.table.closeLongStop":"وقف الخسارة","ai-trading-assistant.table.buy":"شراء","ai-trading-assistant.table.sell":"بيع","ai-trading-assistant.table.long":"اذهب لفترة طويلة","ai-trading-assistant.table.short":"قصيرة","ai-trading-assistant.table.hold":"عقد","ai-trading-assistant.table.reasoning":"سبب التحليل","ai-trading-assistant.table.decisions":"صنع القرار","ai-trading-assistant.table.riskAssessment":"تقييم المخاطر","ai-trading-assistant.table.confidence":"الثقة","ai-trading-assistant.table.totalRecords":"{total} السجلات في المجموع","ai-trading-assistant.table.noPositions":"لا توجد مناصب حتى الآن","ai-trading-assistant.detail.title":"تفاصيل الاستراتيجية","ai-trading-assistant.equity.noData":"لا توجد بيانات عن صافي القيمة حتى الآن","ai-trading-assistant.equity.equity":"صافي القيمة","ai-trading-assistant.exchange.testFailed":"فشل اختبار الاتصال","ai-trading-assistant.exchange.connectionSuccess":"تم الاتصال بنجاح","ai-trading-assistant.exchange.connectionFailed":"فشل الاتصال","ai-trading-assistant.form.advancedSettings":"الإعدادات المتقدمة","ai-trading-assistant.form.orderMode":"وضع الطلب","ai-trading-assistant.form.orderModeMaker":"صانع","ai-trading-assistant.form.orderModeTaker":"سعر السوق (المتلقي)","ai-trading-assistant.form.orderModeHint":"يستخدم وضع الأمر المعلق أوامر الحد وتكون رسوم المناولة أقل؛ يتم تنفيذ وضع سعر السوق على الفور وتكون رسوم المناولة أعلى.","ai-trading-assistant.form.makerWaitSec":"وقت الانتظار للأوامر المعلقة (ثواني)","ai-trading-assistant.form.makerWaitSecHint":"الوقت اللازم لانتظار المعاملة بعد تقديم الطلب. قم بالإلغاء وحاول مرة أخرى بعد انتهاء المهلة.","ai-trading-assistant.form.makerRetries":"عدد مرات إعادة المحاولة للأوامر المعلقة","ai-trading-assistant.form.makerRetriesHint":"الحد الأقصى لعدد مرات إعادة المحاولة عندما لا يتم تنفيذ الأمر المعلق","ai-trading-assistant.form.fallbackToMarket":"يفشل الأمر المعلق ويتم تخفيض سعر السوق.","ai-trading-assistant.form.fallbackToMarketHint":"عندما لا يتم إكمال أمر الفتح/الإغلاق المعلق، ما إذا كان ينبغي تخفيضه إلى أمر سوق لضمان اكتمال المعاملة.","ai-trading-assistant.form.marginMode":"وضع الهامش","ai-trading-assistant.form.marginModeCross":"مستودع كامل","ai-trading-assistant.form.marginModeIsolated":"موقف معزول","ai-analysis.title":"محرك التداول الكمي","ai-analysis.system.online":"على الانترنت","ai-analysis.system.agents":"وكيل","ai-analysis.system.active":"نشط","ai-analysis.system.stage":"المرحلة","ai-analysis.panel.roster":"تشكيلة الوكيل","ai-analysis.panel.thinking":"أفكر...","ai-analysis.panel.done":"كامل","ai-analysis.panel.standby":"الاستعداد","ai-analysis.input.title":"محرك التداول الكمي","ai-analysis.input.placeholder":"حدد الأصول المستهدفة (مثل BTC/USDT)","ai-analysis.input.watchlist":"الأسهم الاختيارية","ai-analysis.input.start":"ابدأ التحليل","ai-analysis.input.recent":"المهام الأخيرة:","ai-analysis.vis.stage":"المرحلة","ai-analysis.vis.processing":"المعالجة","ai-analysis.result.complete":"اكتمل التحليل","ai-analysis.result.signal":"الإشارة النهائية","ai-analysis.result.confidence":"الثقة:","ai-analysis.result.new":"تحليل جديد","ai-analysis.result.full":"عرض التقرير كاملا","ai-analysis.logs.title":"سجل النظام","ai-analysis.modal.title":"تقرير سري","ai-analysis.modal.fundamental":"التحليل الأساسي","ai-analysis.modal.technical":"التحليل الفني","ai-analysis.modal.sentiment":"التحليل العاطفي","ai-analysis.modal.risk":"تقييم المخاطر","ai-analysis.stage.idle":"الاستعداد","ai-analysis.stage.1":"المرحلة الأولى: التحليل متعدد الأبعاد","ai-analysis.stage.2":"المرحلة الثانية: المناقشة الطويلة والقصيرة","ai-analysis.stage.3":"المرحلة الثالثة: التخطيط الاستراتيجي","ai-analysis.stage.4":"المرحلة الرابعة: مراجعة مراقبة المخاطر","ai-analysis.stage.complete":"كامل","ai-analysis.agent.investment_director":"مدير الاستثمار","ai-analysis.agent.role.investment_director":"تحليل شامل واستنتاج نهائي","ai-analysis.agent.market":"محلل السوق","ai-analysis.agent.role.market":"التكنولوجيا وبيانات السوق","ai-analysis.agent.fundamental":"محلل أساسي","ai-analysis.agent.role.fundamental":"التمويل والتقييم","ai-analysis.agent.technical":"محلل فني","ai-analysis.agent.role.technical":"المؤشرات الفنية والرسوم البيانية","ai-analysis.agent.news":"محلل اخبار","ai-analysis.agent.role.news":"مرشح الأخبار العالمية","ai-analysis.agent.sentiment":"محلل المشاعر","ai-analysis.agent.role.sentiment":"الاجتماعية والعاطفية","ai-analysis.agent.risk":"محلل المخاطر","ai-analysis.agent.role.risk":"فحص المخاطر الأساسية","ai-analysis.agent.bull":"الباحث الصاعد","ai-analysis.agent.role.bull":"التعدين محفز النمو","ai-analysis.agent.bear":"الباحث الهابط","ai-analysis.agent.role.bear":"حفر المخاطر والعيوب","ai-analysis.agent.manager":"مدير البحوث","ai-analysis.agent.role.manager":"مشرف المناقشة","ai-analysis.agent.trader":"تاجر","ai-analysis.agent.role.trader":"استراتيجي تنفيذي","ai-analysis.agent.risky":"محلل ناشط","ai-analysis.agent.role.risky":"استراتيجية عدوانية","ai-analysis.agent.neutral":"محلل التوازن","ai-analysis.agent.role.neutral":"استراتيجية التوازن","ai-analysis.agent.safe":"محلل محافظ","ai-analysis.agent.role.safe":"استراتيجية محافظة","ai-analysis.agent.cro":"مدير مراقبة المخاطر (CRO)","ai-analysis.agent.role.cro":"سلطة اتخاذ القرار النهائي","ai-analysis.script.market":"جارٍ جلب بيانات OHLCV من البورصات الرئيسية...","ai-analysis.script.fundamental":"استخراج التقارير المالية الربع سنوية...","ai-analysis.script.technical":"تحليل المؤشرات الفنية وأنماط الرسم البياني.","ai-analysis.script.news":"متابعة الأخبار المالية العالمية...","ai-analysis.script.sentiment":"تحليل اتجاهات وسائل التواصل الاجتماعي...","ai-analysis.script.risk":"حساب التقلبات التاريخية...","invite.inviteLink":"رابط الدعوة","invite.copy":"انسخ الرابط","invite.copySuccess":"تم النسخ بنجاح!","invite.copyFailed":"فشل النسخ، يرجى النسخ يدويًا","invite.noInviteLink":"لم يتم إنشاء رابط الدعوة","invite.totalInvites":"الدعوات التراكمية","invite.totalReward":"المكافآت التراكمية","invite.rules":"قواعد الدعوة","invite.rule1":"في كل مرة تقوم فيها بدعوة صديق بنجاح للتسجيل، سوف تحصل على مكافأة","invite.rule2":"إذا أكمل الصديق المدعو المعاملة الأولى، فستحصل على مكافآت إضافية","invite.rule3":"سيتم إرسال مكافآت الدعوة مباشرة إلى حسابك","invite.inviteList":"قائمة الدعوة","invite.tasks":"مركز البعثة","invite.inviteeName":"المدعو","invite.inviteTime":"وقت الدعوة","invite.status":"الحالة","invite.reward":"مكافأة","invite.active":"نشط","invite.inactive":"لم يتم تفعيلها","invite.completed":"مكتمل","invite.claimed":"تم الاستلام","invite.pending":"ليتم الانتهاء منها","invite.goToTask":"لإكمال","invite.claimReward":"المطالبة بالمكافآت","invite.verify":"اكتمل التحقق","invite.verifySuccess":"تم التحقق بنجاح! اكتملت المهمة","invite.verifyNotCompleted":"المهمة لم تكتمل بعد، يرجى إكمال المهمة أولا","invite.verifyFailed":"فشل التحقق، يرجى المحاولة مرة أخرى في وقت لاحق","invite.claimSuccess":"تم استلام {reward} QDT بنجاح!","invite.claimFailed":"فشل التجميع، يرجى المحاولة مرة أخرى لاحقًا","invite.totalRecords":"{total} السجلات في المجموع","invite.task.twitter.title":"إعادة تغريد إلى X (تويتر)","invite.task.twitter.desc":"شارك تغريداتنا الرسمية على حساب X (Twitter) الخاص بك","invite.task.youtube.title":"تابع قناتنا على اليوتيوب","invite.task.youtube.desc":"اشترك وتابع قناتنا الرسمية على اليوتيوب","invite.task.telegram.title":"انضم إلى مجموعة تيليجرام","invite.task.telegram.desc":"انضم إلى مجموعة مجتمع Telegram الرسمية لدينا","invite.task.discord.title":"انضم إلى خادم Discord","invite.task.discord.desc":"انضم إلى خادم مجتمع Discord الخاص بنا",message:"-","layouts.usermenu.dialog.title":"معلومات","layouts.usermenu.dialog.content":"هل أنت متأكد أنك تريد تسجيل الخروج؟","layouts.userLayout.title":"ابحث عن الحقيقة في حالة عدم اليقين","dashboard.indicator.boundary.message":"Note: The indicator script only computes plots + buy/sell signals. Position sizing, risk, scaling, fees/slippage belong to execution config.","dashboard.indicator.boundary.indicatorRule":"Keep the script to buy/sell only (and set df['buy']/df['sell']). Do NOT implement position management, TP/SL, scaling in the script.","dashboard.indicator.boundary.backtestRule":"Rule: If a bar has a main signal (buy/sell → open/close/reverse), scaling in/out is skipped on the same bar.","dashboard.indicator.guide.title":"Python Indicator & Strategy Development Guide","dashboard.indicator.guide.intro":"This platform supports writing custom technical indicators and trading signals using Python. The system includes built-in pandas and numpy data analysis libraries. You can use standard DataFrame operations to process K-line data and draw charts or mark buy/sell signals.","dashboard.indicator.guide.section1.title":"1. Runtime Environment & Predefined Variables","dashboard.indicator.guide.section1.env":"Your code runs in a browser-based Python environment (Pyodide).","dashboard.indicator.guide.section1.libs":"Pre-installed Libraries","dashboard.indicator.guide.section1.libsDesc":"The following libraries are imported by default, no need to import again:","dashboard.indicator.guide.section1.libsList":"pandas (pd), numpy (np), math, json","dashboard.indicator.guide.section1.data":"Input Data: df","dashboard.indicator.guide.section1.dataDesc":"The system automatically converts current K-line data into a Pandas DataFrame object, variable name is df.","dashboard.indicator.guide.section1.dataColumns":"df contains the following columns (all float type):","dashboard.indicator.guide.section1.dataColumnsList":"time (timestamp, seconds), open, high, low, close, volume","dashboard.indicator.guide.section1.dataNote":"Data index is arranged from old to new (0 is the earliest data, last row is the latest data).","dashboard.indicator.guide.section1.dataIndex":"Important: df index is timestamp (DatetimeIndex), please preserve the index, avoid using .values which loses the index.","dashboard.indicator.guide.section2.title":"2. Parameter Definition","dashboard.indicator.guide.section2.desc":"You can define variables as parameters at the beginning of your code. The system will try to parse statements like variable = value as adjustable parameters.","dashboard.indicator.guide.section2.example":"Parameter Example","dashboard.indicator.guide.section2.exampleCode":"span = 20 or multiplier = 2.0","dashboard.indicator.guide.section3.title":"3. Backtest Signal Setup (Important!)","dashboard.indicator.guide.section3.desc":"If you want your indicator to support backtesting, you must set the following two columns in your code:","dashboard.indicator.guide.section3.backtestRequired":"Required for Backtesting:","dashboard.indicator.guide.section3.backtestBuySignal":"df['buy_signal'] - Boolean Series, True indicates buy signal","dashboard.indicator.guide.section3.backtestSellSignal":"df['sell_signal'] - Boolean Series, True indicates sell signal","dashboard.indicator.guide.section3.backtestExample":"Example:","dashboard.indicator.guide.section3.backtestExampleCode":"df['buy_signal'] = condition_buy
df['sell_signal'] = condition_sell","dashboard.indicator.guide.section3.backtestNote":"Note: Even if you only set output.signals for chart display, you must set these two columns to enable backtesting.","dashboard.indicator.guide.section4.title":"4. Output Requirements: output","dashboard.indicator.guide.section4.desc":"At the end of code execution, you must define a dictionary named output to tell the chart how to display results.","dashboard.indicator.guide.section4.fields":"The output dictionary contains the following fields:","dashboard.indicator.guide.section4.plots":"plots - For drawing lines (e.g., moving averages, RSI)","dashboard.indicator.guide.section4.signals":"signals - For marking buy/sell signals (e.g., arrows, labels)","dashboard.indicator.guide.section4.name":"name - Indicator name (optional)","dashboard.indicator.guide.section4.calculatedVars":"calculatedVars - Calculated variables (optional, for displaying additional information)","dashboard.indicator.guide.section5.title":"5. Plot Configuration (Plots)","dashboard.indicator.guide.section5.desc":"Each object in the plots list represents a line.","dashboard.indicator.guide.section5.table.field":"Field","dashboard.indicator.guide.section5.table.type":"Type","dashboard.indicator.guide.section5.table.required":"Required","dashboard.indicator.guide.section5.table.requiredYes":"Yes","dashboard.indicator.guide.section5.table.requiredNo":"No","dashboard.indicator.guide.section5.table.desc":"Description","dashboard.indicator.guide.section5.table.name":"The name of the indicator line, displayed in the legend","dashboard.indicator.guide.section5.table.data":"Data list, length must match the number of rows in df. Recommended to use series.tolist()","dashboard.indicator.guide.section5.table.color":"Line color (Hex format, e.g. '#ff0000'). If not filled, the system will automatically assign","dashboard.indicator.guide.section5.table.typeDesc":"Chart type, default is 'line'","dashboard.indicator.guide.section5.table.overlay":"Important. True means display on main chart (with K-line), False means display on sub-chart (independent area)","dashboard.indicator.guide.section5.example":"Example: Draw Simple Moving Average (SMA)","dashboard.indicator.guide.section5.exampleCalc":"Calculate SMA","dashboard.indicator.guide.section5.exampleOutput":"Construct Output","dashboard.indicator.guide.section5.exampleOverlay":"Display on main chart","dashboard.indicator.guide.section6.title":"6. Signal Markers (Signals)","dashboard.indicator.guide.section6.desc":"signals are used to mark buy/sell points on specific K-lines through icons or text. Note: This is only for chart display. The backtest system uses df['buy_signal'] and df['sell_signal'].","dashboard.indicator.guide.section6.table.type":"Signal type: 'buy' (buy, marked below K-line) or 'sell' (sell, marked above K-line)","dashboard.indicator.guide.section6.table.data":"Signal data list. Fill price value at signal positions, fill None (or np.nan) at non-signal positions","dashboard.indicator.guide.section6.table.text":'Text displayed on the label (e.g. "B", "S", "Buy", "Sell")',"dashboard.indicator.guide.section6.table.color":"Marker color","dashboard.indicator.guide.section6.hint":"The system automatically handles positioning.","dashboard.indicator.guide.section6.buy":"Markers will be automatically positioned below the Low of the current K-line","dashboard.indicator.guide.section6.sell":"Markers will be automatically positioned above the High of the current K-line","dashboard.indicator.guide.section6.example":"Example: Draw Buy/Sell Signals","dashboard.indicator.guide.section6.exampleInit":"Initialize signal list, fill all with None","dashboard.indicator.guide.section6.exampleLogic":"Simple logic: mark buy when close price is greater than open price","dashboard.indicator.guide.section6.exampleNote":"In actual logic, please use loops or vectorized operations","dashboard.indicator.guide.section6.examplePrice":"Record price","dashboard.indicator.guide.section6.exampleText":"Buy","dashboard.indicator.guide.section7.title":"7. Complete Code Examples","dashboard.indicator.guide.section7.exampleA":"Example A: Dual EMA Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleACode":'# 1. Calculate indicators
df[\'ema_fast\'] = df[\'close\'].ewm(span=5, adjust=False).mean()
df[\'ema_slow\'] = df[\'close\'].ewm(span=13, adjust=False).mean()

# 2. Calculate crossover signals
cross_up = (df[\'ema_fast\'] > df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) <= df[\'ema_slow\'].shift(1))
cross_down = (df[\'ema_fast\'] < df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) >= df[\'ema_slow\'].shift(1))

# 3. 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = cross_up
df[\'close_long\'] = cross_down
df[\'open_short\'] = cross_down
df[\'close_short\'] = cross_up

# 4. Generate signal data for chart display
buy_signals = [df[\'low\'].iloc[i] * 0.995 if cross_up.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if cross_down.iloc[i] else None for i in range(len(df))]

# 5. Build output
output = {
"name": "Dual EMA Strategy",
"plots": [
{"name": "EMA 5", "data": df[\'ema_fast\'].tolist(), "color": "#FF6B6B", "overlay": True},
{"name": "EMA 13", "data": df[\'ema_slow\'].tolist(), "color": "#4ECDC4", "overlay": True}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section7.exampleB":"Example B: Bollinger Bands - Chart Display Only","dashboard.indicator.guide.section7.exampleBCode":'# Calculate Bollinger Bands (chart display only, no backtesting)
length = 20
mult = 2.0
df[\'sma\'] = df[\'close\'].rolling(length).mean()
df[\'std\'] = df[\'close\'].rolling(length).std()
df[\'upper\'] = df[\'sma\'] + mult * df[\'std\']
df[\'lower\'] = df[\'sma\'] - mult * df[\'std\']

output = {
"name": "Bollinger Bands",
"plots": [
{"name": "Upper", "data": df[\'upper\'].tolist(), "color": "#FF5252", "overlay": True},
{"name": "Middle", "data": df[\'sma\'].tolist(), "color": "#2196F3", "overlay": True},
{"name": "Lower", "data": df[\'lower\'].tolist(), "color": "#00E676", "overlay": True}
]
}',"dashboard.indicator.guide.section7.exampleC":"Example C: RSI Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleCCode":'# Calculate RSI
delta = df[\'close\'].diff()
up = delta.clip(lower=0)
down = -1 * delta.clip(upper=0)
ema_up = up.ewm(com=13, adjust=False).mean()
ema_down = down.ewm(com=13, adjust=False).mean()
rs = ema_up / ema_down
df[\'rsi\'] = 100 - (100 / (1 + rs))

# Generate trading signals
buy_condition = df[\'rsi\'] < 30 # Oversold buy
sell_condition = df[\'rsi\'] > 70 # Overbought sell

# 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = buy_condition
df[\'close_long\'] = sell_condition
df[\'open_short\'] = sell_condition
df[\'close_short\'] = buy_condition

# Generate chart signals
buy_signals = [df[\'low\'].iloc[i] * 0.995 if buy_condition.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if sell_condition.iloc[i] else None for i in range(len(df))]

output = {
"name": "RSI Strategy",
"plots": [
{"name": "RSI", "data": df[\'rsi\'].tolist(), "color": "#9C27B0", "overlay": False},
{"name": "Overbought", "data": [70] * len(df), "color": "#FF5252", "style": "dashed", "overlay": False},
{"name": "Oversold", "data": [30] * len(df), "color": "#00E676", "style": "dashed", "overlay": False}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section6.param":"Parameters","dashboard.indicator.guide.section6.calc":"Calculate","dashboard.indicator.guide.section6.output":"Output","dashboard.indicator.guide.section6.generate":"Generate signal data (initialize with None)","dashboard.indicator.guide.section6.subchart":"Display on sub-chart","dashboard.indicator.guide.section8.title":"8. Frequently Asked Questions (FAQ)","dashboard.indicator.guide.section8.q1":"Q: Why can't my indicator be backtested?","dashboard.indicator.guide.section8.a1":"A: The backtest system requires NEW signal columns: df['open_long'], df['close_long'], df['open_short'], df['close_short'] (boolean). Even if you set output.signals for chart display, you must set these columns to enable backtesting.","dashboard.indicator.guide.section8.q2":"Q: Data length mismatch?","dashboard.indicator.guide.section8.a2":"A: The data list in plots and signals must have exactly the same length as the K-line data. If you use df['xxx'].tolist(), there is usually no problem.","dashboard.indicator.guide.section8.q3":"Q: How to handle NaN (empty values)?","dashboard.indicator.guide.section8.a3":"A: Pandas calculations (such as rolling mean) will produce NaN at the beginning. The system will automatically convert NaN to null for chart rendering. You don't need to manually clean it, but if you need specific logic, you can use df.fillna(0) or other methods.","dashboard.indicator.guide.section8.q4":"Q: Index mismatch causing all signals to be NaN?","dashboard.indicator.guide.section8.a4":"A: Please ensure you preserve the original df index (timestamp). Avoid using .values to create new Series. Use columns directly like df['close'] for operations.","dashboard.indicator.guide.section8.q5":"Q: Can I use third-party network libraries?","dashboard.indicator.guide.section8.a5":"A: No. The runtime environment is a browser sandbox and cannot use libraries like requests to request external APIs, nor can it install additional pip packages. Limited to built-in libraries such as pandas, numpy, math, json.","dashboard.indicator.guide.section8.q6":"Q: How to debug code?","dashboard.indicator.guide.section8.a6":"A: If the chart does not display indicators, it is usually because the Python code has an error. Please check for syntax errors or array index out of bounds. It is recommended to debug the algorithm logic in a local Python environment first, then copy it in.","dashboard.indicator.guide.section8.q7":"Q: Backtest shows 0 signals?","dashboard.indicator.guide.section8.a7":"A: Please check the data type of df['open_long']/df['close_long']/df['open_short']/df['close_short']. They should be boolean (True/False), not numeric. Use condition.fillna(False).astype(bool) to ensure correct type.","dashboard.indicator.backtest.commissionHint":"Charged on notional value (incl. leverage) per trade; both entry & exit are deducted from balance.","dashboard.indicator.backtest.historyTitle":"Backtest History","dashboard.indicator.backtest.historyRefresh":"Refresh","dashboard.indicator.backtest.historyView":"View","dashboard.indicator.backtest.historyNoData":"No backtest history","dashboard.indicator.backtest.historyUseCurrent":"Only current symbol/timeframe","dashboard.indicator.backtest.historyFilterSymbol":"Symbol","dashboard.indicator.backtest.historyFilterTimeframe":"Timeframe","dashboard.indicator.backtest.historyApply":"Apply filters","dashboard.indicator.backtest.historyAIAnalyze":"AI Analyze","dashboard.indicator.backtest.historyAIAnalyzeTitle":"AI Suggestions","dashboard.indicator.backtest.historyNoAIResult":"No AI analysis result","dashboard.indicator.backtest.historyRunId":"Run ID","dashboard.indicator.backtest.historyCreatedAt":"Time","dashboard.indicator.backtest.historyRange":"Range","dashboard.indicator.backtest.historyStatus":"Status","dashboard.indicator.backtest.historyStatusSuccess":"Success","dashboard.indicator.backtest.historyStatusFailed":"Failed","dashboard.indicator.backtest.historyActions":"Actions","dashboard.indicator.backtest.hint.entryPctMax":"Max entry: {maxPct}% (reserve budget for future scale-ins)","trading-assistant.exchange.ipWhitelistTip":"Please add the following IPs to the whitelist in your exchange API settings:","signal-robot.title":"Signal Robot Console","signal-robot.createBot":"Create New Bot","signal-robot.search.nameOrSymbol":"Name/Symbol","signal-robot.search.placeholder":"Search bot name or symbol","signal-robot.search.status":"Status","signal-robot.search.statusAll":"All","signal-robot.search.statusRunning":"Running","signal-robot.search.statusPaused":"Paused","signal-robot.search.query":"Query","signal-robot.search.reset":"Reset","signal-robot.table.botName":"Bot Name","signal-robot.table.symbolTimeframe":"Symbol/Timeframe","signal-robot.table.triggerStrategy":"Trigger Strategy","signal-robot.table.notificationChannels":"Notification Channels","signal-robot.table.status":"Status","signal-robot.table.action":"Action","signal-robot.table.triggerConditions":"{count} trigger conditions","signal-robot.table.monitoring":"Monitoring","signal-robot.table.paused":"Paused","signal-robot.table.edit":"Edit","signal-robot.table.pause":"Pause","signal-robot.table.start":"Start","signal-robot.table.delete":"Delete","signal-robot.table.deleteConfirm":"Are you sure you want to delete this bot?","signal-robot.table.deleteSuccess":"Deleted successfully","signal-robot.table.startSuccess":"Bot started","signal-robot.table.pauseSuccess":"Bot paused","signal-robot.channel.telegram":"Telegram","signal-robot.channel.discord":"Discord","signal-robot.channel.email":"Email","signal-robot.channel.webhook":"Webhook","signal-robot.channel.browser":"Browser Push","signal-robot.modal.createTitle":"Create New Signal Robot","signal-robot.modal.editTitle":"Edit Signal Robot","signal-robot.modal.step.basic":"Basic Settings","signal-robot.modal.step.entry":"Entry Strategy","signal-robot.modal.step.position":"Position Management","signal-robot.modal.step.risk":"Risk Control","signal-robot.modal.step.notify":"Notification Config","signal-robot.modal.prev":"Previous","signal-robot.modal.next":"Next","signal-robot.modal.preview":"Preview Backtest","signal-robot.modal.complete":"Complete & Run","signal-robot.modal.saveSuccess":"Saved successfully","signal-robot.modal.previewDeveloping":"Preview feature is under development...","signal-robot.modal.basicInfoRequired":"Please complete basic information","signal-robot.basic.alert":"Set basic information for the bot","signal-robot.basic.title":"Basic Information","signal-robot.basic.botName":"Bot Name","signal-robot.basic.botNamePlaceholder":"e.g.: BTC SuperTrend Strategy","signal-robot.basic.symbol":"Trading Pair","signal-robot.basic.symbolPlaceholder":"Select from watchlist","signal-robot.basic.noWatchlist":"No watchlist items, please add in market page first","signal-robot.basic.timeframe":"K-Line Period","signal-robot.basic.timeframe15m":"15 Minutes","signal-robot.basic.timeframe30m":"30 Minutes","signal-robot.basic.timeframe1h":"1 Hour","signal-robot.basic.timeframe4h":"4 Hours","signal-robot.basic.timeframe1d":"1 Day","signal-robot.basic.autoNameSuggestion":"{symbol} Signal Robot","signal-robot.entry.alert":"Trigger entry signal when all conditions below are met","signal-robot.entry.condition":"Condition {index}","signal-robot.entry.indicator":"Indicator","signal-robot.entry.indicatorSupertrend":"SuperTrend","signal-robot.entry.indicatorEma":"EMA (Exponential Moving Average)","signal-robot.entry.indicatorRsi":"RSI (Relative Strength Index)","signal-robot.entry.indicatorMacd":"MACD","signal-robot.entry.indicatorBollinger":"Bollinger Bands","signal-robot.entry.atrPeriod":"ATR Period","signal-robot.entry.multiplier":"Multiplier","signal-robot.entry.triggerSignal":"Trigger Signal","signal-robot.entry.signalTrendBullish":"Trend Bullish","signal-robot.entry.signalTrendBearish":"Trend Bearish","signal-robot.entry.signalIsUptrend":"Is Uptrend","signal-robot.entry.signalIsDowntrend":"Is Downtrend","signal-robot.entry.period":"Period","signal-robot.entry.compareCondition":"Compare Condition","signal-robot.entry.priceAbove":"Price > EMA (Price Above)","signal-robot.entry.priceBelow":"Price < EMA (Price Below)","signal-robot.entry.crossUp":"Price Crosses Above EMA (Golden Cross)","signal-robot.entry.crossDown":"Price Crosses Below EMA (Death Cross)","signal-robot.entry.compare":"Compare","signal-robot.entry.greaterThan":"Greater Than","signal-robot.entry.lessThan":"Less Than","signal-robot.entry.crossUpShort":"Cross Up","signal-robot.entry.crossDownShort":"Cross Down","signal-robot.entry.threshold":"Threshold","signal-robot.entry.selectIndicator":"Please select an indicator to configure parameters","signal-robot.entry.addCondition":"Add Condition","signal-robot.position.alert":"Configure initial position size, leverage and pyramiding rules","signal-robot.position.basicTitle":"Basic Position Management","signal-robot.position.initialSize":"Initial Size (Capital %)","signal-robot.position.initialSizeHint":"Recommended 5% - 20%","signal-robot.position.leverage":"Leverage","signal-robot.position.leverageHint":"Please ensure your exchange account supports this leverage","signal-robot.position.maxPyramiding":"Max Pyramiding Times","signal-robot.position.maxPyramidingHint":"0 means no pyramiding","signal-robot.position.pyramidingTitle":"Pyramiding Rules","signal-robot.position.pyramidingEnabled":"Enabled","signal-robot.position.pyramidingDisabled":"Disabled","signal-robot.position.pyramidingCondition":"Pyramiding Trigger Condition","signal-robot.position.priceRisePct":"Price Rises (Long) / Falls (Short)","signal-robot.position.profitPct":"Profit Reaches","signal-robot.position.triggerThreshold":"Trigger Threshold (%)","signal-robot.position.triggerThresholdHint":"e.g. 3%: add position once every 3% rise","signal-robot.position.addSize":"Single Add Size (Capital %)","signal-robot.position.pyramidingDisabledHint":"Pyramiding disabled, only initial position will be executed","signal-robot.risk.alert":"Configure take profit, stop loss and exit rules","signal-robot.risk.stopLossTitle":"Stop Loss","signal-robot.risk.stopLossEnabled":"Enabled","signal-robot.risk.stopLossDisabled":"Disabled","signal-robot.risk.stopLossType":"Stop Loss Type","signal-robot.risk.stopLossFixedPct":"Fixed Percentage","signal-robot.risk.stopLossAtrMultiplier":"ATR Multiplier","signal-robot.risk.stopLossValue":"Value","signal-robot.risk.stopLossFixedHint":"e.g. 2%: stop loss when loss reaches 2%","signal-robot.risk.stopLossAtrHint":"e.g. 2.0: stop loss when price touches ATR*2.0","signal-robot.risk.stopLossDisabledHint":"Stop loss disabled (high risk)","signal-robot.risk.trailingStopTitle":"Trailing Stop","signal-robot.risk.activationProfit":"Activation Profit (%)","signal-robot.risk.activationProfitHint":"Start trailing when profit reaches this level","signal-robot.risk.callbackPct":"Callback (%)","signal-robot.risk.callbackPctHint":"Trigger take profit when price falls from peak by this percentage","signal-robot.risk.trailingStopDisabledHint":"Trailing stop disabled","signal-robot.risk.otherExitTitle":"Other Exit Rules","signal-robot.risk.signalExit":"Allow Signal Exit","signal-robot.risk.signalExitHint":"Close position immediately when reverse signal appears (e.g. close long when short signal appears)","signal-robot.notify.alert":"Configure notification methods when signal is triggered","signal-robot.notify.channelTitle":"Notification Channels","signal-robot.notify.discordWebhook":"Discord Webhook","signal-robot.notify.genericWebhook":"Generic Webhook","signal-robot.notify.webhookUrl":"Webhook URL","signal-robot.notify.webhookUrlPlaceholder":"https://example.com/webhook","signal-robot.notify.discordUrl":"Discord URL","signal-robot.notify.discordUrlPlaceholder":"https://discord.com/api/webhooks/...","signal-robot.operator.greaterThan":"Greater Than","signal-robot.operator.lessThan":"Less Than","signal-robot.operator.equal":"Equal","signal-robot.operator.goldenCross":"Golden Cross","signal-robot.operator.deathCross":"Death Cross","signal-robot.operator.increaseBy":"Increase By","signal-robot.operator.decreaseBy":"Decrease By","signal-robot.indicator.price":"Price","signal-robot.indicator.rsi":"RSI","signal-robot.indicator.kdjK":"KDJ(K)","signal-robot.indicator.kdjJ":"KDJ(J)","signal-robot.indicator.macd":"MACD","signal-robot.indicator.macdHist":"MACD Histogram","signal-robot.indicator.bollingerUp":"Bollinger Upper","signal-robot.indicator.bollingerLow":"Bollinger Lower","signal-robot.indicator.volume":"Volume","signal-robot.indicator.changePct1h":"1H Change %","signal-robot.indicator.changePct24h":"24H Change %","signal-robot.indicator.signalLine":"Signal Line","settings.group.agent_memory":"الذاكرة/الانعكاس","settings.group.reflection_worker":"عامل التحقق التلقائي للانعكاس","settings.field.ENABLE_AGENT_MEMORY":"تمكين ذاكرة الوكيل","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"تمكين الاسترجاع المتجهي (محلي)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"بُعد التضمين","settings.field.AGENT_MEMORY_TOP_K":"عدد الاسترجاع Top-K","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"حجم نافذة المرشحين","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"نصف عمر تلاشي الزمن (أيام)","settings.field.AGENT_MEMORY_W_SIM":"وزن التشابه","settings.field.AGENT_MEMORY_W_RECENCY":"وزن الحداثة","settings.field.AGENT_MEMORY_W_RETURNS":"وزن العائد","settings.field.ENABLE_REFLECTION_WORKER":"تمكين التحقق التلقائي","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"فاصل التحقق (ثانية)","profile.notifications.title":"إعدادات الإشعارات","profile.notifications.hint":"قم بتكوين طرق الإشعارات الافتراضية، سيتم استخدامها تلقائياً عند إنشاء مراقبة الأصول والتنبيهات","profile.notifications.defaultChannels":"قنوات الإشعارات الافتراضية","profile.notifications.browser":"إشعار داخل التطبيق","profile.notifications.email":"البريد الإلكتروني","profile.notifications.phone":"رسالة نصية","profile.notifications.telegramBotToken":"Telegram Bot Token","profile.notifications.telegramBotTokenPlaceholder":"أدخل Telegram Bot Token الخاص بك","profile.notifications.telegramBotTokenHint":"أنشئ بوت عبر @BotFather للحصول على Token","profile.notifications.telegramChatId":"Telegram Chat ID","profile.notifications.telegramPlaceholder":"أدخل Telegram Chat ID الخاص بك (مثال: 123456789)","profile.notifications.telegramHint":"أرسل /start إلى @userinfobot للحصول على Chat ID","profile.notifications.notifyEmail":"بريد الإشعارات","profile.notifications.emailPlaceholder":"عنوان البريد الإلكتروني لاستلام الإشعارات","profile.notifications.emailHint":"يستخدم بريد الحساب بشكل افتراضي، يمكنك تعيين بريد آخر","profile.notifications.phonePlaceholder":"أدخل رقم الهاتف (مثال: +966501234567)","profile.notifications.phoneHint":"يحتاج المسؤول إلى تكوين خدمة Twilio","profile.notifications.discordWebhook":"Discord Webhook","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"أنشئ Webhook في إعدادات خادم Discord","profile.notifications.webhookUrl":"Webhook URL","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"عنوان Webhook مخصص، يرسل الإشعارات عبر POST JSON","profile.notifications.webhookToken":"Webhook Token (اختياري)","profile.notifications.webhookTokenPlaceholder":"Bearer Token للتحقق من الطلب","profile.notifications.webhookTokenHint":"يُرسل كـ Authorization: Bearer Token إلى Webhook","profile.notifications.testBtn":"إرسال إشعار تجريبي","profile.notifications.saveSuccess":"تم حفظ إعدادات الإشعارات بنجاح","profile.notifications.selectChannel":"الرجاء اختيار قناة إشعار واحدة على الأقل","profile.notifications.fillTelegramToken":"الرجاء إدخال Telegram Bot Token","profile.notifications.fillTelegram":"الرجاء إدخال Telegram Chat ID","profile.notifications.fillEmail":"الرجاء إدخال بريد الإشعارات","profile.notifications.testSent":"تم إرسال الإشعار التجريبي، يرجى التحقق من قنوات الإشعارات"},f=(0,e.A)((0,e.A)({},p),y)}}]); \ No newline at end of file diff --git a/frontend/dist/js/lang-ar-SA.87868447.js b/frontend/dist/js/lang-ar-SA.87868447.js new file mode 100644 index 0000000..a2bcdd9 --- /dev/null +++ b/frontend/dist/js/lang-ar-SA.87868447.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[618],{217:function(a,t,i){i.d(t,{default:function(){return f}});var e=i(76338),s={items_per_page:"/ الصفحة",jump_to:"الذهاب إلى",jump_to_confirm:"تأكيد",page:"",prev_page:"الصفحة السابقة",next_page:"الصفحة التالية",prev_5:"خمس صفحات سابقة",next_5:"خمس صفحات تالية",prev_3:"ثلاث صفحات سابقة",next_3:"ثلاث صفحات تالية"},o=i(85505),r={today:"اليوم",now:"الأن",backToToday:"العودة إلى اليوم",ok:"تأكيد",clear:"مسح",month:"الشهر",year:"السنة",timeSelect:"اختيار الوقت",dateSelect:"اختيار التاريخ",monthSelect:"اختيار الشهر",yearSelect:"اختيار السنة",decadeSelect:"اختيار العقد",yearFormat:"YYYY",dateFormat:"M/D/YYYY",dayFormat:"D",dateTimeFormat:"M/D/YYYY HH:mm:ss",monthBeforeYear:!0,previousMonth:"الشهر السابق (PageUp)",nextMonth:"الشهر التالى(PageDown)",previousYear:"العام السابق (Control + left)",nextYear:"العام التالى (Control + right)",previousDecade:"العقد السابق",nextDecade:"العقد التالى",previousCentury:"القرن السابق",nextCentury:"القرن التالى"},n={placeholder:"اختيار الوقت"},d=n,l={lang:(0,o.A)({placeholder:"اختيار التاريخ",rangePlaceholder:["البداية","النهاية"]},r),timePickerLocale:(0,o.A)({},d),dateFormat:"DD-MM-YYYY",monthFormat:"MM-YYYY",dateTimeFormat:"DD-MM-YYYY HH:mm:ss",weekFormat:"wo-YYYY"},c=l,g=c,b={locale:"ar",Pagination:s,DatePicker:c,TimePicker:d,Calendar:g,Table:{filterTitle:"الفلاتر",filterConfirm:"تأكيد",filterReset:"إعادة ضبط",selectAll:"اختيار الكل",selectInvert:"إلغاء الاختيار"},Modal:{okText:"تأكيد",cancelText:"إلغاء",justOkText:"تأكيد"},Popconfirm:{okText:"تأكيد",cancelText:"إلغاء"},Transfer:{searchPlaceholder:"ابحث هنا",itemUnit:"عنصر",itemsUnit:"عناصر"},Upload:{uploading:"جاري الرفع...",removeFile:"احذف الملف",uploadError:"مشكلة فى الرفع",previewFile:"استعرض الملف",downloadFile:"تحميل الملف"},Empty:{description:"لا توجد بيانات"}},m=b,h=i(61509),u=i.n(h),p={antLocale:m,momentName:"ar",momentLocale:u()},y={submit:"إرسال",save:"حفظ","submit.ok":"تم التقديم بنجاح","save.ok":"تم الحفظ بنجاح","menu.welcome":"مرحبا بكم","menu.home":"الصفحة الرئيسية","menu.dashboard":"لوحة القيادة","menu.dashboard.indicator":"تحليل المؤشر","menu.dashboard.community":"مجتمع المؤشرات","menu.dashboard.analysis":"تحليل الذكاء الاصطناعي","menu.dashboard.tradingAssistant":"مساعد التداول","menu.dashboard.aiTradingAssistant":"مساعد التداول بالذكاء الاصطناعي","menu.dashboard.signalRobot":"روبوت الإشارة","menu.dashboard.monitor":"صفحة المراقبة","menu.dashboard.workplace":"طاولة العمل","menu.form":"صفحة النموذج","menu.form.basic-form":"الشكل الأساسي","menu.form.step-form":"شكل خطوة بخطوة","menu.form.step-form.info":"نموذج خطوة بخطوة (املأ معلومات النقل)","menu.form.step-form.confirm":"نموذج خطوة بخطوة (تأكيد معلومات النقل)","menu.form.step-form.result":"نموذج خطوة بخطوة (كامل)","menu.form.advanced-form":"نماذج متقدمة","menu.list":"صفحة القائمة","menu.list.table-list":"نموذج الاستفسار","menu.list.basic-list":"القائمة القياسية","menu.list.card-list":"قائمة البطاقات","menu.list.search-list":"قائمة البحث","menu.list.search-list.articles":"قائمة البحث (المقالات)","menu.list.search-list.projects":"قائمة البحث (المشروع)","menu.list.search-list.applications":"قائمة البحث (التطبيق)","menu.profile":"صفحة التفاصيل","menu.profile.basic":"صفحة التفاصيل الأساسية","menu.profile.advanced":"صفحة التفاصيل المتقدمة","menu.result":"صفحة النتائج","menu.result.success":"صفحة النجاح","menu.result.fail":"صفحة الفشل","menu.exception":"صفحة الاستثناء","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"خطأ الزناد","menu.account":"الصفحة الشخصية","menu.account.center":"مركز شخصي","menu.account.settings":"الإعدادات الشخصية","menu.account.trigger":"خطأ الزناد","menu.account.logout":"تسجيل الخروج","menu.wallet":"محفظتي","menu.docs":"مركز الوثائق","menu.docs.detail":"تفاصيل الوثيقة","menu.header.refreshPage":"تحديث الصفحة","menu.invite.friends":"دعوة الأصدقاء","app.setting.pagestyle":"إعدادات النمط الشاملة","app.setting.pagestyle.light":"نمط القائمة مشرق","app.setting.pagestyle.dark":"نمط القائمة المظلمة","app.setting.pagestyle.realdark":"الوضع المظلم","app.setting.themecolor":"لون الموضوع","app.setting.navigationmode":"وضع التنقل","app.setting.sidemenu.nav":"التنقل في الشريط الجانبي","app.setting.topmenu.nav":"التنقل في الشريط العلوي","app.setting.content-width":"عرض منطقة المحتوى","app.setting.content-width.tooltip":"يكون هذا الإعداد فعالاً فقط عندما يكون [Top Bar Navigation]","app.setting.content-width.fixed":"ثابت","app.setting.content-width.fluid":"البث","app.setting.fixedheader":"رأس ثابت","app.setting.fixedheader.tooltip":"شكلي عندما رأس ثابت","app.setting.autoHideHeader":"إخفاء الرأس عند التمرير","app.setting.fixedsidebar":"القائمة الجانبية الثابتة","app.setting.sidemenu":"تخطيط القائمة الجانبية","app.setting.topmenu":"تخطيط القائمة العلوية","app.setting.othersettings":"إعدادات أخرى","app.setting.weakmode":"وضع ضعف اللون","app.setting.multitab":"وضع علامات التبويب المتعددة","app.setting.copy":"إعدادات النسخ","app.setting.loading":"جارٍ تحميل الموضوع","app.setting.copyinfo":"انسخ الإعدادات بنجاح src/config/defaultSettings.js","app.setting.copy.success":"اكتمل النسخ","app.setting.copy.fail":"فشل النسخ","app.setting.theme.switching":"تغيير الموضوع!","app.setting.production.hint":"يتم استخدام شريط التكوين فقط للمعاينة في بيئة التطوير ولن يتم عرضه في بيئة الإنتاج. يرجى نسخ وتعديل ملف التكوين يدويا.","app.setting.themecolor.daybreak":"الأزرق الداكن (افتراضي)","app.setting.themecolor.dust":"الغسق","app.setting.themecolor.volcano":"بركان","app.setting.themecolor.sunset":"غروب الشمس","app.setting.themecolor.cyan":"مينغكينغ","app.setting.themecolor.green":"أورورا الخضراء","app.setting.themecolor.geekblue":"المهوس الأزرق","app.setting.themecolor.purple":"جيانغ زي","app.setting.tooltip":"إعدادات الصفحة","user.login.userName":"اسم المستخدم","user.login.password":"كلمة المرور","user.login.username.placeholder":"الحساب: المشرف","user.login.password.placeholder":"كلمة المرور: admin أو ant.design","user.login.message-invalid-credentials":"فشل تسجيل الدخول، يرجى التحقق من البريد الإلكتروني الخاص بك ورمز التحقق","user.login.message-invalid-verification-code":"خطأ في رمز التحقق","user.login.tab-login-credentials":"تسجيل الدخول بكلمة مرور الحساب","user.login.tab-login-email":"تسجيل الدخول بالبريد الإلكتروني","user.login.tab-login-mobile":"تسجيل الدخول برقم الهاتف المحمول","user.login.captcha.placeholder":"الرجاء إدخال رمز التحقق الرسومي","user.login.mobile.placeholder":"رقم الهاتف المحمول","user.login.mobile.verification-code.placeholder":"رمز التحقق","user.login.email.placeholder":"الرجاء إدخال عنوان البريد الإلكتروني الخاص بك","user.login.email.verification-code.placeholder":"الرجاء إدخال رمز التحقق","user.login.email.sending":"جاري إرسال رمز التحقق...","user.login.email.send-success-title":"نصائح","user.login.email.send-success":"تم إرسال رمز التحقق بنجاح، يرجى التحقق من بريدك الإلكتروني","user.login.sms.send-success":"تم إرسال رمز التحقق بنجاح، يرجى التحقق من الرسالة النصية","user.login.remember-me":"تسجيل الدخول التلقائي","user.login.forgot-password":"نسيت كلمة المرور","user.login.sign-in-with":"طرق تسجيل الدخول الأخرى","user.login.signup":"تسجيل حساب","user.login.login":"تسجيل الدخول","user.register.register":"سجل","user.register.email.placeholder":"البريد الإلكتروني","user.register.password.placeholder":"الرجاء إدخال 6 أحرف على الأقل. يرجى عدم استخدام كلمات المرور التي يمكن تخمينها بسهولة.","user.register.password.popover-message":"الرجاء إدخال 6 أحرف على الأقل. يرجى عدم استخدام كلمات المرور التي يمكن تخمينها بسهولة.","user.register.confirm-password.placeholder":"تأكيد كلمة المرور","user.register.get-verification-code":"الحصول على رمز التحقق","user.register.sign-in":"قم بتسجيل الدخول باستخدام حساب موجود","user.register-result.msg":"حسابك: {email} تم التسجيل بنجاح","user.register-result.activation-email":"تم إرسال رسالة التفعيل إلى صندوق البريد الخاص بك وهي صالحة لمدة 24 ساعة. يرجى تسجيل الدخول إلى بريدك الإلكتروني على الفور والنقر على الرابط الموجود في البريد الإلكتروني لتفعيل حسابك.","user.register-result.back-home":"العودة إلى الصفحة الرئيسية","user.register-result.view-mailbox":"تحقق من صندوق البريد الخاص بك","user.email.required":"الرجاء إدخال عنوان البريد الإلكتروني الخاص بك!","user.email.wrong-format":"تنسيق عنوان البريد الإلكتروني خاطئ!","user.userName.required":"الرجاء إدخال اسم حسابك أو عنوان البريد الإلكتروني الخاص بك","user.password.required":"الرجاء إدخال كلمة المرور الخاصة بك!","user.password.twice.msg":"كلمات المرور التي تم إدخالها مرتين غير متطابقة!","user.password.strength.msg":"كلمة المرور ليست قوية بما فيه الكفاية","user.password.strength.strong":"القوة : قوية","user.password.strength.medium":"القوة: متوسطة","user.password.strength.low":"القوة: منخفضة","user.password.strength.short":"القوة : قصيرة جداً","user.confirm-password.required":"الرجاء تأكيد كلمة المرور الخاصة بك!","user.phone-number.required":"الرجاء إدخال رقم الهاتف المحمول الصحيح","user.phone-number.wrong-format":"تنسيق رقم الهاتف المحمول خاطئ!","user.verification-code.required":"الرجاء إدخال رمز التحقق!","user.captcha.required":"الرجاء إدخال رمز التحقق الرسومي!","user.login.infos":"QuantDinger هي أداة مساعدة لتحليل الأسهم متعددة الوكلاء تعمل بالذكاء الاصطناعي ولا تتمتع بمؤهلات استشارية في مجال الاستثمار في الأوراق المالية. يتم إنشاء جميع نتائج التحليل والدرجات والآراء المرجعية في المنصة تلقائيًا بواسطة الذكاء الاصطناعي استنادًا إلى البيانات التاريخية وتستخدم فقط للتعلم والبحث والتبادل الفني، ولا تشكل أي نصيحة استثمارية أو أساس لصنع القرار. ينطوي الاستثمار في الأسهم على مخاطر مختلفة مثل مخاطر السوق، ومخاطر السيولة، ومخاطر السياسة، وما إلى ذلك، مما قد يؤدي إلى خسارة رأس المال. يجب على المستخدمين اتخاذ قرارات مستقلة بناءً على قدرتهم على تحمل المخاطر، ويجب أن يتحمل المستخدم أي سلوك استثماري وعواقب تنشأ عن استخدام هذه الأداة. السوق محفوف بالمخاطر والاستثمار يحتاج إلى الحذر.","user.login.tab-login-web3":"تسجيل الدخول إلى Web3","user.login.web3.tip":"تسجيل الدخول بالتوقيع باستخدام المحفظة","user.login.web3.connect":"ربط المحفظة وتسجيل الدخول","user.login.web3.no-wallet":"لم يتم الكشف عن المحفظة","user.login.web3.no-address":"لم يتم الحصول على عنوان المحفظة","user.login.web3.nonce-failed":"فشل الحصول على رقم عشوائي","user.login.web3.verify-failed":"فشل التحقق من التوقيع","user.login.web3.success":"تم تسجيل الدخول بنجاح","user.login.web3.failed":"فشل تسجيل الدخول إلى المحفظة","nav.no_wallet":"لم يتم الكشف عن المحفظة","nav.copy":"نسخ","nav.copy_success":"تم النسخ بنجاح","user.login.oauth.google":"قم بتسجيل الدخول باستخدام جوجل","user.login.oauth.github":"قم بتسجيل الدخول باستخدام جيثب","user.login.oauth.loading":"جارٍ إعادة التوجيه إلى صفحة التفويض...","user.login.oauth.failed":"فشل تسجيل الدخول باستخدام OAuth","user.login.oauth.get-url-failed":"فشل الحصول على رابط الترخيص","user.login.subtitle":"رؤى كمية مدفوعة في الأسواق العالمية","user.login.legal.title":"إخلاء المسؤولية القانونية","user.login.legal.view":"عرض إخلاء المسؤولية القانونية","user.login.legal.collapse":"طي إخلاء المسؤولية القانونية","user.login.legal.agree":"لقد قرأت ووافقت على إخلاء المسؤولية القانونية","user.login.legal.required":"يرجى قراءة والتحقق من إخلاء المسؤولية القانونية أولا","user.login.legal.content":"QuantDinger هي أداة مساعدة لتحليل الأسهم متعددة الوكلاء تعمل بالذكاء الاصطناعي ولا تتمتع بمؤهلات استشارية في مجال الاستثمار في الأوراق المالية. يتم إنشاء جميع نتائج التحليل والتقييمات والآراء المرجعية في المنصة تلقائيًا بواسطة الذكاء الاصطناعي استنادًا إلى البيانات التاريخية وتستخدم فقط للتعلم والبحث والتبادل الفني، ولا تشكل أي نصيحة استثمارية أو أساس لصنع القرار. ينطوي الاستثمار في الأسهم على مخاطر مختلفة مثل مخاطر السوق، ومخاطر السيولة، ومخاطر السياسة، وما إلى ذلك، مما قد يؤدي إلى خسارة رأس المال. يجب على المستخدمين اتخاذ قرارات مستقلة بناءً على قدرتهم على تحمل المخاطر، ويجب أن يتحمل المستخدم أي سلوك استثماري وعواقب تنشأ عن استخدام هذه الأداة. السوق محفوف بالمخاطر والاستثمار يحتاج إلى الحذر.","user.login.privacy.title":"سياسة خصوصية المستخدم","user.login.privacy.view":"عرض سياسة خصوصية المستخدم","user.login.privacy.collapse":"إغلاق شروط خصوصية المستخدم","user.login.privacy.content":"نحن نقدر خصوصيتك وحماية البيانات. 1) نطاق التجميع: يتم جمع المعلومات المطلوبة لتنفيذ الوظيفة فقط (مثل البريد الإلكتروني ورقم الهاتف المحمول ورمز المنطقة وعنوان محفظة Web3) والسجلات الضرورية ومعلومات الجهاز. 2) الغرض من الاستخدام: لتسجيل الدخول إلى الحساب والتحقق من الأمان وتوفير وظيفة الخدمة واستكشاف الأخطاء وإصلاحها ومتطلبات الامتثال. 3) التخزين والأمان: يتم تشفير البيانات وتخزينها، ويتم اتخاذ الأذونات اللازمة وإجراءات التحكم في الوصول لمحاولة منع الوصول غير المصرح به أو الكشف عنها أو فقدانها. 4) المشاركة مع أطراف ثالثة: ما لم يكن ذلك مطلوبًا بموجب القوانين واللوائح أو ضروريًا لأداء الخدمات، لن تتم مشاركة معلوماتك الشخصية مع أطراف ثالثة؛ إذا كانت هناك خدمات تابعة لجهات خارجية (مثل المحافظ ومقدمي خدمات الرسائل النصية القصيرة)، فلن تتم معالجتها إلا إلى الحد الأدنى اللازم لتنفيذ الوظيفة. 5) ملفات تعريف الارتباط/التخزين المحلي: تُستخدم لحالة تسجيل الدخول وصيانة الجلسة الضرورية (مثل الرموز المميزة، PHPSESSID)، ويمكنك مسحها أو تقييدها في المتصفح. 6) الحقوق الشخصية: يمكنك ممارسة حقوقك في الاستفسار والتصحيح والحذف وسحب الموافقة وما إلى ذلك وفقًا للقوانين واللوائح. 7) التغييرات والإشعارات: عند تحديث هذه الشروط، سيتم عرضها بشكل بارز على الصفحة. من خلال الاستمرار في استخدام هذه الخدمة، يعتبر أنك قد قرأت المحتوى المحدث ووافقت عليه. إذا كنت لا توافق على هذه الشروط أو أي تحديثات لها، فيرجى التوقف عن استخدام الخدمة والاتصال بنا.","account.basicInfo":"المعلومات الأساسية","account.id":"معرف المستخدم","account.username":"اسم المستخدم","account.nickname":"اللقب","account.email":"البريد الإلكتروني","account.mobile":"رقم الهاتف المحمول","account.web3address":"عنوان المحفظة","account.pid":"معرف المرجع","account.level":"مستوى المستخدم","account.money":"التوازن","account.qdtBalance":"رصيد كيو دي تي","account.score":"النقاط","account.createtime":"وقت التسجيل","account.inviteLink":"رابط الدعوة","account.recharge":"إعادة الشحن","account.rechargeTip":"يرجى استخدام WeChat أو Alipay لمسح رمز الاستجابة السريعة أدناه لإعادة الشحن.","account.qrCodePlaceholder":"العنصر النائب لرمز الاستجابة السريعة (المحاكاة)","account.rechargeAmount":"مبلغ إعادة الشحن","account.enterAmount":"الرجاء إدخال مبلغ إعادة الشحن","account.rechargeHint":"الحد الأدنى لمبلغ الإيداع: 1 QDT","account.confirmRecharge":"تأكيد إعادة الشحن","account.enterValidAmount":"الرجاء إدخال مبلغ تعبئة صالح","account.rechargeSuccess":"تم إعادة الشحن بنجاح! تم إيداع {amount} QDT","account.settings.menuMap.basic":"الإعدادات الأساسية","account.settings.menuMap.security":"إعدادات الأمان","account.settings.menuMap.notification":"إشعار الرسالة الجديدة","account.settings.menuMap.moneyLog":"تفاصيل الصندوق","account.moneyLog.empty":"لا توجد تفاصيل الصندوق حتى الآن","account.moneyLog.total":"{total} السجلات في المجموع","account.moneyLog.type.purchase":"مؤشر الشراء","account.moneyLog.type.recharge":"إعادة الشحن","account.moneyLog.type.refund":"استرداد","account.moneyLog.type.reward":"مكافأة","account.moneyLog.type.income":"دخل المؤشر","account.moneyLog.type.commission":"رسوم التعامل مع المنصة","wallet.balance":"رصيد كيو دي تي","wallet.recharge":"إعادة الشحن","wallet.withdraw":"سحب النقود","wallet.filter":"تصفية","wallet.reset":"إعادة تعيين","wallet.totalRecharge":"التغذية المتراكمة","wallet.totalWithdraw":"عمليات السحب التراكمية","wallet.totalIncome":"الدخل التراكمي","wallet.records":"سجلات المعاملات وتفاصيل الصندوق","wallet.tradingRecords":"تاريخ المعاملة","wallet.moneyLog":"تفاصيل الصندوق","wallet.rechargeTip":"يرجى استخدام WeChat أو Alipay لمسح رمز الاستجابة السريعة أدناه لإعادة الشحن.","wallet.qrCodePlaceholder":"العنصر النائب لرمز الاستجابة السريعة (المحاكاة)","wallet.rechargeAmount":"مبلغ إعادة الشحن","wallet.enterAmount":"الرجاء إدخال مبلغ إعادة الشحن","wallet.rechargeHint":"الحد الأدنى لمبلغ الإيداع: 1 QDT","wallet.confirmRecharge":"تأكيد إعادة الشحن","wallet.enterValidAmount":"الرجاء إدخال مبلغ تعبئة صالح","wallet.rechargeSuccess":"تم إعادة الشحن بنجاح! تم إيداع {amount} QDT","wallet.rechargeFailed":"فشلت عملية إعادة الشحن","wallet.withdrawTip":"الرجاء إدخال مبلغ السحب وعنوان السحب","wallet.withdrawAmount":"سحب المبلغ","wallet.enterWithdrawAmount":"الرجاء إدخال مبلغ السحب","wallet.withdrawHint":"الحد الأدنى لمبلغ السحب: 1 QDT","wallet.withdrawAddress":"عنوان السحب (اختياري)","wallet.enterWithdrawAddress":"الرجاء إدخال عنوان السحب","wallet.confirmWithdraw":"تأكيد الانسحاب","wallet.enterValidWithdrawAmount":"الرجاء إدخال مبلغ سحب صالح","wallet.insufficientBalance":"رصيد غير كاف","wallet.withdrawSuccess":"تم السحب بنجاح! تم سحب {المبلغ} QDT","wallet.withdrawFailed":"فشل الانسحاب","wallet.noTradingRecords":"لا يوجد سجل المعاملات حتى الآن","wallet.noMoneyLog":"لا توجد تفاصيل الصندوق حتى الآن","wallet.loadTradingRecordsFailed":"فشل في تحميل سجلات المعاملات","wallet.loadMoneyLogFailed":"فشل في تحميل تفاصيل الصندوق","wallet.moneyLogTotal":"{total} السجلات في المجموع","wallet.moneyLogTypeTitle":"اكتب","wallet.moneyLogType.all":"جميع الأنواع","wallet.table.time":"الوقت","wallet.table.type":"اكتب","wallet.table.price":"السعر","wallet.table.amount":"الكمية","wallet.table.money":"المبلغ","wallet.table.balance":"التوازن","wallet.table.memo":"ملاحظات","wallet.table.value":"قيمة","wallet.table.profit":"الربح والخسارة","wallet.table.commission":"رسوم المناولة","wallet.table.total":"{total} السجلات في المجموع","wallet.tradeType.buy":"شراء","wallet.tradeType.sell":"بيع","wallet.tradeType.liquidation":"التصفية القسرية","wallet.tradeType.openLong":"مفتوح لفترة طويلة","wallet.tradeType.addLong":"غادوت","wallet.tradeType.closeLong":"بيندو","wallet.tradeType.closeLongStop":"وقف الخسارة وطويلة","wallet.tradeType.closeLongProfit":"جني الربح ومستوى أكثر","wallet.tradeType.openShort":"فتح قصيرة","wallet.tradeType.addShort":"إضافة قصيرة","wallet.tradeType.closeShort":"فارغ","wallet.tradeType.closeShortStop":"وقف الخسارة","wallet.tradeType.closeShortProfit":"جني الأرباح وأغلق على المكشوف","wallet.moneyLogType.purchase":"مؤشر الشراء","wallet.moneyLogType.recharge":"إعادة الشحن","wallet.moneyLogType.withdraw":"سحب النقود","wallet.moneyLogType.refund":"استرداد","wallet.moneyLogType.reward":"مكافأة","wallet.moneyLogType.income":"الدخل","wallet.moneyLogType.commission":"رسوم المناولة","wallet.web3Address.required":"يرجى ملء عنوان محفظة Web3 أولاً","wallet.web3Address.requiredDescription":"قبل إعادة الشحن، تحتاج إلى ربط عنوان محفظة Web3 الخاص بك لتلقي إعادة الشحن.","wallet.web3Address.placeholder":"الرجاء إدخال عنوان محفظة Web3 الخاص بك (يبدأ بـ 0x)","wallet.web3Address.save":"حفظ عنوان المحفظة","wallet.web3Address.saveSuccess":"تم حفظ عنوان المحفظة بنجاح","wallet.web3Address.saveFailed":"فشل في حفظ عنوان المحفظة","wallet.web3Address.invalidFormat":"يرجى إدخال عنوان محفظة Web3 صالح (تنسيق Ethereum: 42 حرفًا يبدأ بـ 0x، أو تنسيق TRC20: 34 حرفًا يبدأ بـ T)","wallet.selectCoin":"اختر العملة","wallet.selectChain":"سلسلة الاختيار","wallet.chain.eth":"إيثريوم (ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"ش.م.ب","wallet.targetQdtAmount":"مقدار QDT الذي تريد استرداده (اختياري)","wallet.targetQdtAmount.placeholder":"يرجى إدخال كمية QDT التي تريد استردادها، وسعر QDT الحالي: {price} USDT","wallet.targetQdtAmount.requiredUsdt":"تحتاج إلى إعادة الشحن: {amount} USDT","wallet.rechargeAddress":"عنوان إعادة الشحن","wallet.copyAddress":"نسخ","wallet.copySuccess":"تم النسخ بنجاح!","wallet.copyFailed":"فشل النسخ، يرجى النسخ يدويًا","wallet.rechargeAddressHint":"يرجى التأكد من استخدام {chain} لإيداع {coin} في هذا العنوان","wallet.qdtPrice.loading":"جار التحميل...","wallet.rechargeTip.new":"يرجى تحديد العملة والسلسلة، ثم مسح رمز الاستجابة السريعة أدناه لإعادة الشحن","wallet.exchangeRate":"1 QDT ≈ {معدل} USDT","wallet.withdrawableAmount":"المبلغ النقدي المتاح","wallet.totalBalance":"الرصيد الإجمالي","wallet.insufficientWithdrawable":"المبلغ النقدي الذي يمكن سحبه غير كاف. المبلغ الحالي الذي يمكن سحبه هو: {amount} QDT","wallet.withdrawAddressRequired":"الرجاء إدخال عنوان السحب","wallet.withdrawAddressHint":"يرجى التأكد من صحة العنوان. وبعد الانسحاب لا يمكن إلغاؤه.","wallet.withdrawSubmitSuccess":"تم إرسال طلب السحب بنجاح، برجاء انتظار المراجعة","menu.footer.contactUs":"اتصل بنا","menu.footer.getSupport":"احصل على الدعم","menu.footer.socialAccounts":"حساب اجتماعي","menu.footer.userAgreement":"اتفاقية المستخدم","menu.footer.privacyPolicy":"سياسة الخصوصية","menu.footer.support":"الدعم","menu.footer.featureRequest":"طلب الميزة","menu.footer.email":"البريد الإلكتروني","menu.footer.liveChat":"24/7 الدردشة الحية","dashboard.analysis.title":"التحليل متعدد الأبعاد","dashboard.analysis.subtitle":"منصة تحليل مالي شاملة تعتمد على الذكاء الاصطناعي","dashboard.analysis.selectSymbol":"حدد أو أدخل الرمز الأساسي","dashboard.analysis.selectModel":"حدد النموذج","dashboard.analysis.startAnalysis":"ابدأ التحليل","dashboard.analysis.history":"التاريخ","dashboard.analysis.tab.overview":"تحليل شامل","dashboard.analysis.tab.fundamental":"الأساسيات","dashboard.analysis.tab.technical":"التكنولوجيا","dashboard.analysis.tab.news":"أخبار","dashboard.analysis.tab.sentiment":"العواطف","dashboard.analysis.tab.risk":"خطر","dashboard.analysis.tab.debate":"المناقشة الطويلة والقصيرة","dashboard.analysis.tab.decision":"القرار النهائي","dashboard.analysis.empty.selectSymbol":"حدد هدفًا لبدء التحليل","dashboard.analysis.empty.selectSymbolDesc":"اختر من قائمة الأسهم المحددة ذاتيًا أو أدخل الكود الأساسي للحصول على تقرير تحليل الذكاء الاصطناعي متعدد الأبعاد","dashboard.analysis.empty.startAnalysis":'انقر فوق الزر "بدء التحليل" لإجراء تحليل متعدد الأبعاد',"dashboard.analysis.empty.startAnalysisDesc":"سنزودك بتحليل شامل من أبعاد متعددة مثل الأساسيات والتكنولوجيا والأخبار والمشاعر والمخاطر","dashboard.analysis.empty.noData":"لا توجد حاليًا أي بيانات تحليل {type}، يرجى إجراء تحليل شامل أولاً","dashboard.analysis.empty.noWatchlist":"لا يوجد حاليا أي أسهم مختارة ذاتيا","dashboard.analysis.empty.noHistory":"لا يوجد تاريخ بعد","dashboard.analysis.empty.watchlistHint":"لا يوجد حاليا أي أسهم مختارة ذاتيا، يرجى أولا","dashboard.analysis.empty.noDebateData":"لا توجد بيانات مناقشة حتى الآن","dashboard.analysis.empty.noDecisionData":"لا توجد بيانات القرار حتى الآن","dashboard.analysis.empty.selectAgent":"الرجاء تحديد وكيل لعرض نتائج التحليل","dashboard.analysis.loading.analyzing":"جارٍ التحليل، يرجى الانتظار...","dashboard.analysis.loading.fundamental":"تحليل البيانات الأساسية...","dashboard.analysis.loading.technical":"تحليل المؤشرات الفنية...","dashboard.analysis.loading.news":"تحليل بيانات الأخبار...","dashboard.analysis.loading.sentiment":"تحليل معنويات السوق..","dashboard.analysis.loading.risk":"تقييم المخاطر...","dashboard.analysis.loading.debate":"والنقاش الطويل والقصير مستمر..","dashboard.analysis.loading.decision":"إصدار القرار النهائي...","dashboard.analysis.score.overall":"التقييم العام","dashboard.analysis.score.recommendation":"نصيحة استثمارية","dashboard.analysis.score.confidence":"الثقة","dashboard.analysis.dimension.fundamental":"الأساسيات","dashboard.analysis.dimension.technical":"التكنولوجيا","dashboard.analysis.dimension.news":"أخبار","dashboard.analysis.dimension.sentiment":"العواطف","dashboard.analysis.dimension.risk":"خطر","dashboard.analysis.card.dimensionScores":"التقييمات لكل البعد","dashboard.analysis.card.overviewReport":"تقرير التحليل الشامل","dashboard.analysis.card.financialMetrics":"المؤشرات المالية","dashboard.analysis.card.fundamentalReport":"تقرير التحليل الأساسي","dashboard.analysis.card.technicalIndicators":"المؤشرات الفنية","dashboard.analysis.card.technicalReport":"تقرير التحليل الفني","dashboard.analysis.card.newsList":"أخبار ذات صلة","dashboard.analysis.card.newsReport":"تقرير تحليل الأخبار","dashboard.analysis.card.sentimentIndicators":"مؤشر المشاعر","dashboard.analysis.card.sentimentReport":"تقرير تحليل المشاعر","dashboard.analysis.card.riskMetrics":"مؤشرات المخاطر","dashboard.analysis.card.riskReport":"تقرير تقييم المخاطر","dashboard.analysis.card.bullView":"النظرة الصعودية (الثور)","dashboard.analysis.card.bearView":"وجهة النظر الهبوطية (الدب)","dashboard.analysis.card.researchConclusion":"استنتاج الباحث","dashboard.analysis.card.traderPlan":"خطة التاجر","dashboard.analysis.card.riskDebate":"مناقشة لجنة المخاطر","dashboard.analysis.card.finalDecision":"القرار النهائي","dashboard.analysis.card.tradePlanDetail":"تفاصيل خطة التداول","dashboard.analysis.tradingPlan.entry_price":"سعر القبول","dashboard.analysis.tradingPlan.position_size":"حجم الموقف","dashboard.analysis.tradingPlan.stop_loss":"وقف الخسارة","dashboard.analysis.tradingPlan.take_profit":"جني الربح","dashboard.analysis.label.confidence":"الثقة","dashboard.analysis.label.keyPoints":"النقاط الأساسية","dashboard.analysis.label.riskWarning":"تحذير من المخاطر","dashboard.analysis.risk.risky":"محفوف بالمخاطر","dashboard.analysis.risk.neutral":"وجهة نظر محايدة (محايدة)","dashboard.analysis.risk.safe":"وجهة نظر محافظة (آمنة)","dashboard.analysis.risk.conclusion":"الاستنتاج","dashboard.analysis.feature.fundamental":"التحليل الأساسي","dashboard.analysis.feature.technical":"التحليل الفني","dashboard.analysis.feature.news":"تحليل الأخبار","dashboard.analysis.feature.sentiment":"تحليل المشاعر","dashboard.analysis.feature.risk":"تقييم المخاطر","dashboard.analysis.watchlist.title":"اختيار الأسهم الخاصة بي","dashboard.analysis.watchlist.add":"إضافة","dashboard.analysis.watchlist.addStock":"إضافة مخزون","dashboard.analysis.modal.addStock.title":"إضافة أسهم اختيارية","dashboard.analysis.modal.addStock.confirm":"حسنًا","dashboard.analysis.modal.addStock.cancel":"إلغاء","dashboard.analysis.modal.addStock.market":"نوع السوق","dashboard.analysis.modal.addStock.marketPlaceholder":"الرجاء تحديد السوق","dashboard.analysis.modal.addStock.marketRequired":"الرجاء تحديد نوع السوق","dashboard.analysis.modal.addStock.symbol":"رمز المخزون","dashboard.analysis.modal.addStock.symbolPlaceholder":"على سبيل المثال: AAPL، TSLA، GOOGL، 000001، BTC","dashboard.analysis.modal.addStock.symbolRequired":"الرجاء إدخال رمز المخزون","dashboard.analysis.modal.addStock.searchPlaceholder":"البحث عن رمز الهدف أو الاسم","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"ابحث عن الرمز الأساسي أو أدخله (على سبيل المثال: AAPL، BTC/USDT، EUR/USD)","dashboard.analysis.modal.addStock.searchOrInputHint":"يدعم البحث عن الكائنات في قاعدة البيانات، أو إدخال الكود مباشرة (سيحصل النظام على الاسم تلقائيًا)","dashboard.analysis.modal.addStock.search":"بحث","dashboard.analysis.modal.addStock.searchResults":"نتائج البحث","dashboard.analysis.modal.addStock.hotSymbols":"أهداف شعبية","dashboard.analysis.modal.addStock.noHotSymbols":"لا توجد أهداف شعبية حتى الآن","dashboard.analysis.modal.addStock.selectedSymbol":"مختارة","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"الرجاء تحديد الهدف أولاً","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"الرجاء تحديد هدف أو إدخال رمز الهدف أولاً","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"الرجاء إدخال رمز الهدف","dashboard.analysis.modal.addStock.pleaseSelectMarket":"الرجاء تحديد نوع السوق أولا","dashboard.analysis.modal.addStock.searchFailed":"فشل البحث، يرجى المحاولة مرة أخرى في وقت لاحق","dashboard.analysis.modal.addStock.noSearchResults":"لم يتم العثور على هدف مطابق","dashboard.analysis.modal.addStock.willAutoFetchName":"سيحصل النظام تلقائيًا على الاسم","dashboard.analysis.modal.addStock.addDirectly":"أضف مباشرة","dashboard.analysis.modal.addStock.nameWillBeFetched":"سيتم التقاط الاسم تلقائيًا عند إضافته","dashboard.analysis.market.USStock":"الأسهم الأمريكية","dashboard.analysis.market.Crypto":"عملة مشفرة","dashboard.analysis.market.Forex":"الفوركس","dashboard.analysis.market.Futures":"العقود الآجلة","dashboard.analysis.modal.history.title":"سجلات التحليل التاريخي","dashboard.analysis.modal.history.viewResult":"عرض النتائج","dashboard.analysis.modal.history.completeTime":"وقت الانتهاء","dashboard.analysis.modal.history.error":"خطأ","dashboard.analysis.status.pending":"في انتظار","dashboard.analysis.status.processing":"المعالجة","dashboard.analysis.status.completed":"مكتمل","dashboard.analysis.status.failed":"فشل","dashboard.analysis.message.selectSymbol":"الرجاء تحديد الهدف أولا","dashboard.analysis.message.taskCreated":"تم إنشاء مهمة التحليل ويتم تنفيذها في الخلفية...","dashboard.analysis.message.analysisComplete":"اكتمل التحليل","dashboard.analysis.message.analysisCompleteCache":"اكتمل التحليل (باستخدام البيانات المخزنة مؤقتًا)","dashboard.analysis.message.analysisFailed":"فشل التحليل، يرجى المحاولة مرة أخرى في وقت لاحق","dashboard.analysis.message.addStockSuccess":"تمت الإضافة بنجاح","dashboard.analysis.message.addStockFailed":"فشلت الإضافة","dashboard.analysis.message.removeStockSuccess":"تمت الإزالة بنجاح","dashboard.analysis.message.removeStockFailed":"فشلت عملية الإزالة","dashboard.analysis.message.resumingAnalysis":"جاري استئناف مهمة التحليل...","dashboard.analysis.message.deleteSuccess":"تم الحذف بنجاح","dashboard.analysis.message.deleteFailed":"فشل الحذف","dashboard.analysis.modal.history.delete":"حذف","dashboard.analysis.modal.history.deleteConfirm":"هل أنت متأكد أنك تريد حذف سجل التحليل هذا؟","dashboard.analysis.test":"متجر رقم {no}، طريق Gongzhuan","dashboard.analysis.introduce":"وصف المؤشر","dashboard.analysis.total-sales":"إجمالي المبيعات","dashboard.analysis.day-sales":"متوسط المبيعات اليومية¥","dashboard.analysis.visits":"الزيارات","dashboard.analysis.visits-trend":"اتجاهات المرور","dashboard.analysis.visits-ranking":"ترتيب زيارة المتجر","dashboard.analysis.day-visits":"زيارات يومية","dashboard.analysis.week":"أسبوعية على أساس سنوي","dashboard.analysis.day":"سنة بعد سنة","dashboard.analysis.payments":"عدد الدفعات","dashboard.analysis.conversion-rate":"معدل التحويل","dashboard.analysis.operational-effect":"آثار النشاط التشغيلي","dashboard.analysis.sales-trend":"اتجاهات المبيعات","dashboard.analysis.sales-ranking":"ترتيب مبيعات المتجر","dashboard.analysis.all-year":"على مدار السنة","dashboard.analysis.all-month":"هذا الشهر","dashboard.analysis.all-week":"هذا الاسبوع","dashboard.analysis.all-day":"اليوم","dashboard.analysis.search-users":"عدد مستخدمي البحث","dashboard.analysis.per-capita-search":"عمليات البحث للفرد","dashboard.analysis.online-top-search":"عمليات البحث الشائعة على الإنترنت","dashboard.analysis.the-proportion-of-sales":"نسبة فئة المبيعات","dashboard.analysis.dropdown-option-one":"العملية الأولى","dashboard.analysis.dropdown-option-two":"العملية 2","dashboard.analysis.channel.all":"جميع القنوات","dashboard.analysis.channel.online":"على الانترنت","dashboard.analysis.channel.stores":"متجر","dashboard.analysis.sales":"المبيعات","dashboard.analysis.traffic":"تدفق الركاب","dashboard.analysis.table.rank":"الترتيب","dashboard.analysis.table.search-keyword":"البحث عن الكلمات الرئيسية","dashboard.analysis.table.users":"عدد المستخدمين","dashboard.analysis.table.weekly-range":"زيادة أسبوعية","dashboard.indicator.selectSymbol":"حدد أو أدخل الرمز الأساسي","dashboard.indicator.emptyWatchlistHint":"لا يوجد حاليا أي أسهم مختارة ذاتيا، يرجى إضافتها أولا","dashboard.indicator.hint.selectSymbol":"الرجاء تحديد هدف لبدء التحليل","dashboard.indicator.hint.selectSymbolDesc":"حدد أو أدخل رمز السهم في مربع البحث أعلاه لعرض مخططات K-line والمؤشرات الفنية","dashboard.indicator.retry":"حاول مرة أخرى","dashboard.indicator.panel.title":"المؤشرات الفنية","dashboard.indicator.panel.realtimeOn":"قم بإيقاف تشغيل التحديثات في الوقت الفعلي","dashboard.indicator.panel.realtimeOff":"تمكين التحديثات في الوقت الحقيقي","dashboard.indicator.panel.themeLight":"التبديل إلى المظهر الداكن","dashboard.indicator.panel.themeDark":"التبديل إلى موضوع الضوء","dashboard.indicator.section.enabled":"ممكّن","dashboard.indicator.section.added":"المؤشرات التي أضفتها","dashboard.indicator.section.custom":"المؤشرات التي أنشأتها بنفسك","dashboard.indicator.section.bought":"المؤشرات التي اشتريتها","dashboard.indicator.section.myCreated":"المؤشرات التي قمت بإنشائها","dashboard.indicator.empty":"لا يوجد مؤشر حتى الآن، يرجى إضافة أو إنشاء مؤشر أولاً","dashboard.indicator.buy":"مؤشر الشراء","dashboard.indicator.action.start":"ابدأ","dashboard.indicator.action.stop":"إغلاق","dashboard.indicator.action.edit":"تحرير","dashboard.indicator.action.delete":"حذف","dashboard.indicator.action.backtest":"com.backtest","dashboard.indicator.status.normal":"عادي","dashboard.indicator.status.normalPermanent":"عادي (صالح بشكل دائم)","dashboard.indicator.status.expired":"انتهت صلاحيتها","dashboard.indicator.expiry.permanent":"صالحة بشكل دائم","dashboard.indicator.expiry.noExpiry":"لا يوجد وقت انتهاء الصلاحية","dashboard.indicator.expiry.expired":"انتهت الصلاحية: {التاريخ}","dashboard.indicator.expiry.expiresOn":"وقت انتهاء الصلاحية: {التاريخ}","dashboard.indicator.delete.confirmTitle":"تأكيد الحذف","dashboard.indicator.delete.confirmContent":'هل أنت متأكد أنك تريد حذف المؤشر "{name}"؟ هذه العملية لا رجعة فيها.',"dashboard.indicator.delete.confirmOk":"حذف","dashboard.indicator.delete.confirmCancel":"إلغاء","dashboard.indicator.delete.success":"تم الحذف بنجاح","dashboard.indicator.delete.failed":"فشل الحذف","dashboard.indicator.save.success":"تم الحفظ بنجاح","dashboard.indicator.save.failed":"فشل الحفظ","dashboard.indicator.error.loadWatchlistFailed":"فشل تحميل الأسهم الاختيارية","dashboard.indicator.error.chartNotReady":"لم تتم تهيئة مكون المخطط. يرجى تحديد الهدف أولاً وانتظر حتى يتم تحميل المخطط.","dashboard.indicator.error.chartMethodNotReady":"طريقة مكون المخطط ليست جاهزة، يرجى المحاولة مرة أخرى لاحقًا","dashboard.indicator.error.chartExecuteNotReady":"طريقة تنفيذ مكون الرسم البياني ليست جاهزة، يرجى المحاولة مرة أخرى لاحقًا","dashboard.indicator.error.parseFailed":"غير قادر على تحليل كود بايثون","dashboard.indicator.error.parseFailedCheck":"غير قادر على تحليل كود بايثون، يرجى التحقق من تنسيق الكود","dashboard.indicator.error.addIndicatorFailed":"فشل في إضافة المؤشر","dashboard.indicator.error.runIndicatorFailed":"فشل مؤشر التشغيل","dashboard.indicator.error.pleaseLogin":"الرجاء تسجيل الدخول أولا","dashboard.indicator.error.loadDataFailed":"فشل تحميل البيانات","dashboard.indicator.error.loadDataFailedDesc":"يرجى التحقق من اتصال الشبكة","dashboard.indicator.error.pythonEngineFailed":"فشل محرك Python في التحميل وقد لا تكون وظيفة المؤشر متاحة.","dashboard.indicator.error.chartInitFailed":"فشلت تهيئة المخطط","dashboard.indicator.warning.enterCode":"الرجاء إدخال رمز المؤشر أولا","dashboard.indicator.warning.pyodideLoadFailed":"فشل محرك بايثون في التحميل","dashboard.indicator.warning.pyodideLoadFailedDesc":"هذه الميزة غير متوفرة في منطقتك الحالية أو بيئة الشبكة الحالية","dashboard.indicator.warning.chartNotInitialized":"لم تتم تهيئة المخطط ولا يمكن استخدام أداة رسم الخط.","dashboard.indicator.success.runIndicator":"يعمل المؤشر بنجاح","dashboard.indicator.success.clearDrawings":"تم مسح كافة الرسومات الخطية","dashboard.indicator.sma":"SMA (مجموعة المتوسطات المتحركة)","dashboard.indicator.ema":"EMA (مجموعة المتوسط المتحرك الأسي)","dashboard.indicator.rsi":"مؤشر القوة النسبية (القوة النسبية)","dashboard.indicator.macd":"ماكد","dashboard.indicator.bb":"بولينجر باند","dashboard.indicator.atr":"ATR (متوسط المدى الحقيقي)","dashboard.indicator.cci":"CCI (مؤشر قناة السلع)","dashboard.indicator.williams":"ويليامز %R (مؤشر ويليامز)","dashboard.indicator.mfi":"مؤسسات التمويل الأصغر (مؤشر تدفق الأموال)","dashboard.indicator.adx":"ADX (مؤشر الاتجاه المتوسط)","dashboard.indicator.obv":"OBV (موجة الطاقة)","dashboard.indicator.adosc":"ADOSC (مذبذب التجميع/الإرسال)","dashboard.indicator.ad":"AD (خط التجميع/التوزيع)","dashboard.indicator.kdj":"KDJ (مؤشر ستوكاستيك)","dashboard.indicator.signal.buy":"شراء","dashboard.indicator.signal.sell":"بيع","dashboard.indicator.signal.supertrendBuy":"شراء سوبر تريند","dashboard.indicator.signal.supertrendSell":"بيع سوبر تريند","dashboard.indicator.chart.kline":"خط K","dashboard.indicator.chart.volume":"الحجم","dashboard.indicator.chart.uptrend":"الاتجاه الصعودي","dashboard.indicator.chart.downtrend":"الاتجاه الهابط","dashboard.indicator.tooltip.time":"الوقت","dashboard.indicator.tooltip.open":"مفتوح","dashboard.indicator.tooltip.close":"تلقي","dashboard.indicator.tooltip.high":"عالية","dashboard.indicator.tooltip.low":"منخفض","dashboard.indicator.tooltip.volume":"الحجم","dashboard.indicator.drawing.line":"قطعة الخط","dashboard.indicator.drawing.horizontalLine":"خط أفقي","dashboard.indicator.drawing.verticalLine":"خط عمودي","dashboard.indicator.drawing.ray":"راي","dashboard.indicator.drawing.straightLine":"خط مستقيم","dashboard.indicator.drawing.parallelLine":"خطوط متوازية","dashboard.indicator.drawing.priceLine":"خط السعر","dashboard.indicator.drawing.priceChannel":"قناة السعر","dashboard.indicator.drawing.fibonacciLine":"خطوط فيبوناتشي","dashboard.indicator.drawing.measure":"قياس","dashboard.indicator.drawing.clearAll":"مسح كافة الرسومات الخطية","dashboard.indicator.market.USStock":"الأسهم الأمريكية","dashboard.indicator.market.Crypto":"عملة مشفرة","dashboard.indicator.market.Forex":"الفوركس","dashboard.indicator.market.Futures":"العقود الآجلة","dashboard.indicator.create":"إنشاء مؤشر","dashboard.indicator.editor.title":"إنشاء/تحرير المؤشرات","dashboard.indicator.editor.name":"اسم المؤشر","dashboard.indicator.editor.nameRequired":"الرجاء إدخال اسم المؤشر","dashboard.indicator.editor.namePlaceholder":"الرجاء إدخال اسم المؤشر","dashboard.indicator.editor.description":"وصف المؤشر","dashboard.indicator.editor.descriptionPlaceholder":"الرجاء إدخال وصف للمؤشر (اختياري)","dashboard.indicator.editor.code":"كود بايثون","dashboard.indicator.editor.codeRequired":"الرجاء إدخال رمز المؤشر","dashboard.indicator.editor.codePlaceholder":"الرجاء إدخال رمز بايثون","dashboard.indicator.editor.run":"تشغيل","dashboard.indicator.editor.runHint":"انقر فوق زر التشغيل لمعاينة تأثير المؤشر على مخطط K-line","dashboard.indicator.editor.guide":"دليل التطوير","dashboard.indicator.editor.guideTitle":"دليل تطوير مؤشر بايثون","dashboard.indicator.editor.save":"حفظ","dashboard.indicator.editor.cancel":"إلغاء","dashboard.indicator.editor.unnamed":"مؤشر بدون اسم","dashboard.indicator.editor.publishToCommunity":"نشر إلى المجتمع","dashboard.indicator.editor.publishToCommunityHint":"بمجرد النشر، يمكن للمستخدمين الآخرين عرض واستخدام المؤشر الخاص بك في المجتمع","dashboard.indicator.editor.indicatorType":"نوع المؤشر","dashboard.indicator.editor.indicatorTypeRequired":"الرجاء تحديد نوع المؤشر","dashboard.indicator.editor.indicatorTypePlaceholder":"الرجاء تحديد نوع المؤشر","dashboard.indicator.editor.previewImage":"معاينة","dashboard.indicator.editor.uploadImage":"تحميل الصور","dashboard.indicator.editor.previewImageHint":"الحجم الموصى به: 800×400، ولا يزيد عن 2 ميجابايت","dashboard.indicator.editor.pricing":"سعر البيع (QDT)","dashboard.indicator.editor.pricingType.free":"مجانا","dashboard.indicator.editor.pricingType.permanent":"دائم","dashboard.indicator.editor.pricingType.monthly":"الدفع الشهري","dashboard.indicator.editor.price":"السعر","dashboard.indicator.editor.priceRequired":"الرجاء إدخال السعر","dashboard.indicator.editor.pricePlaceholder":"الرجاء إدخال السعر","dashboard.indicator.editor.pricingHint":"على الرغم من أن سعر المؤشرات المجانية هو 0، إلا أن المنصة ستكافئك (QDT) بناءً على استخدام المؤشر الخاص بك ومعدل الثناء.","dashboard.indicator.editor.aiGenerate":"جيل ذكي","dashboard.indicator.editor.aiPromptPlaceholder":"أخبرني بأفكارك وسأقوم بإنشاء رمز مؤشر بايثون لك","dashboard.indicator.editor.aiGenerateBtn":"كود تم إنشاؤه بواسطة الذكاء الاصطناعي","dashboard.indicator.editor.aiPromptRequired":"الرجاء إدخال أفكارك","dashboard.indicator.editor.aiGenerateSuccess":"تم إنشاء الكود بنجاح","dashboard.indicator.editor.aiGenerateError":"فشل إنشاء الكود، يرجى المحاولة مرة أخرى لاحقًا","dashboard.indicator.backtest.title":"اختبار خلفي للمؤشر","dashboard.indicator.backtest.config":"معلمات الاختبار الخلفي","dashboard.indicator.backtest.startDate":"تاريخ البدء","dashboard.indicator.backtest.endDate":"تاريخ الانتهاء","dashboard.indicator.backtest.selectStartDate":"حدد تاريخ البدء","dashboard.indicator.backtest.selectEndDate":"حدد تاريخ الانتهاء","dashboard.indicator.backtest.startDateRequired":"الرجاء تحديد تاريخ البدء","dashboard.indicator.backtest.endDateRequired":"الرجاء تحديد تاريخ الانتهاء","dashboard.indicator.backtest.initialCapital":"رأس المال الأولي","dashboard.indicator.backtest.initialCapitalRequired":"الرجاء إدخال الأموال الأولية","dashboard.indicator.backtest.commission":"رسوم المناولة","dashboard.indicator.backtest.leverage":"نسبة الرافعة المالية","dashboard.indicator.backtest.tradeDirection":"اتجاه التداول","dashboard.indicator.backtest.longOnly":"اذهب لفترة طويلة","dashboard.indicator.backtest.shortOnly":"قصيرة","dashboard.indicator.backtest.both":"في اتجاهين","dashboard.indicator.backtest.run":"ابدأ الاختبار الخلفي","dashboard.indicator.backtest.rerun":"باك تست مرة أخرى","dashboard.indicator.backtest.close":"إغلاق","dashboard.indicator.backtest.running":"الاختبار الخلفي للمؤشر قيد التقدم...","dashboard.indicator.backtest.results":"نتائج الاختبار الخلفي","dashboard.indicator.backtest.totalReturn":"العائد الإجمالي","dashboard.indicator.backtest.annualReturn":"الدخل السنوي","dashboard.indicator.backtest.maxDrawdown":"الحد الأقصى للسحب","dashboard.indicator.backtest.sharpeRatio":"نسبة شارب","dashboard.indicator.backtest.winRate":"معدل الفوز","dashboard.indicator.backtest.profitFactor":"نسبة الربح إلى الخسارة","dashboard.indicator.backtest.totalTrades":"عدد المعاملات","dashboard.indicator.totalReturn":"العائد الإجمالي","dashboard.indicator.annualReturn":"معدل العائد السنوي","dashboard.indicator.maxDrawdown":"الحد الأقصى للسحب","dashboard.indicator.sharpeRatio":"نسبة شارب","dashboard.indicator.winRate":"معدل الفوز","dashboard.indicator.profitFactor":"نسبة الربح إلى الخسارة","dashboard.indicator.totalTrades":"إجمالي عدد المعاملات","dashboard.indicator.backtest.totalCommission":"إجمالي رسوم المناولة","dashboard.indicator.backtest.equityCurve":"منحنى العائد","dashboard.indicator.backtest.strategy":"دخل المؤشر","dashboard.indicator.backtest.benchmark":"العودة المرجعية","dashboard.indicator.backtest.tradeHistory":"تاريخ المعاملة","dashboard.indicator.backtest.tradeTime":"الوقت","dashboard.indicator.backtest.tradeType":"اكتب","dashboard.indicator.backtest.buy":"شراء","dashboard.indicator.backtest.sell":"بيع","dashboard.indicator.backtest.liquidation":"التصفية","dashboard.indicator.backtest.openLong":"مفتوح لفترة طويلة","dashboard.indicator.backtest.closeLong":"بيندو","dashboard.indicator.backtest.closeLongStop":"قريب من الشراء (وقف الخسارة)","dashboard.indicator.backtest.closeLongProfit":"إغلاق المزيد (جني الأرباح)","dashboard.indicator.backtest.addLong":"إضافة موقف طويل","dashboard.indicator.backtest.openShort":"فتح قصيرة","dashboard.indicator.backtest.closeShort":"فارغ","dashboard.indicator.backtest.closeShortStop":"إغلاق (وقف الخسارة)","dashboard.indicator.backtest.closeShortProfit":"إغلاق (جني الأرباح)","dashboard.indicator.backtest.addShort":"إضافة موقف قصير","dashboard.indicator.backtest.price":"السعر","dashboard.indicator.backtest.amount":"الكمية","dashboard.indicator.backtest.balance":"رصيد الحساب","dashboard.indicator.backtest.profit":"الربح والخسارة","dashboard.indicator.backtest.success":"تم الانتهاء من الاختبار الخلفي","dashboard.indicator.backtest.failed":"فشل الاختبار الخلفي، يرجى المحاولة مرة أخرى لاحقًا","dashboard.indicator.backtest.noIndicatorCode":"لا يوجد رمز قابل للاختبار الخلفي لهذا المؤشر","dashboard.indicator.backtest.noSymbol":"يرجى تحديد هدف المعاملة أولاً","dashboard.indicator.backtest.dateRangeExceeded":"يتجاوز النطاق الزمني للاختبار الخلفي الحد الأقصى: يمكن اختبار الفترة الزمنية {timeframe} بحد أقصى {maxRange}","dashboard.indicator.backtest.dateRangeExceededDays":"Backtest range exceeds limit: {timeframe} max {maxRange} ({maxDays} days)","dashboard.indicator.backtest.metaLine":"Symbol: {symbol} | Market: {market} | Timeframe: {timeframe}","dashboard.indicator.backtest.savedRunId":"Backtest saved. Run ID: {id}","dashboard.indicator.backtest.prev":"Previous","dashboard.indicator.backtest.next":"Next","dashboard.indicator.backtest.steps.strategy.title":"Strategy","dashboard.indicator.backtest.steps.strategy.desc":"Position sizing & risk controls","dashboard.indicator.backtest.steps.trading.title":"Trading settings","dashboard.indicator.backtest.steps.trading.desc":"Time range, capital, fees, leverage","dashboard.indicator.backtest.steps.results.title":"Results","dashboard.indicator.backtest.steps.results.desc":"Backtest output","dashboard.indicator.backtest.panel.risk":"Risk management (SL/TP/Trailing)","dashboard.indicator.backtest.panel.scale":"Scale in / DCA (trend & mean-reversion)","dashboard.indicator.backtest.panel.reduce":"Reduce position (trend & adverse)","dashboard.indicator.backtest.panel.position":"Position sizing","dashboard.indicator.backtest.field.stopLossPct":"Stop Loss (%)","dashboard.indicator.backtest.field.takeProfitPct":"Take Profit (%)","dashboard.indicator.backtest.field.trailingEnabled":"Trailing stop / take profit","dashboard.indicator.backtest.field.trailingStopPct":"Trailing drawdown (%)","dashboard.indicator.backtest.field.trailingActivationPct":"Trailing activation (%)","dashboard.indicator.backtest.field.slippage":"Slippage (%)","dashboard.indicator.backtest.field.trendAddEnabled":"Trend-following scale-in","dashboard.indicator.backtest.field.dcaAddEnabled":"Mean-reversion DCA","dashboard.indicator.backtest.field.trendAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.dcaAddStepPct":"DCA trigger (%)","dashboard.indicator.backtest.field.trendAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.dcaAddSizePct":"DCA size (% of capital)","dashboard.indicator.backtest.field.trendAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.dcaAddMaxTimes":"Max DCA times","dashboard.indicator.backtest.field.trendReduceEnabled":"Trend reduce","dashboard.indicator.backtest.field.adverseReduceEnabled":"Adverse reduce","dashboard.indicator.backtest.field.trendReduceStepPct":"Trend trigger (%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"Adverse trigger (%)","dashboard.indicator.backtest.field.trendReduceSizePct":"Reduce size (% of position)","dashboard.indicator.backtest.field.adverseReduceSizePct":"Adverse reduce size (% of position)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"Max trend reduce times","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"Max adverse reduce times","dashboard.indicator.backtest.field.entryPct":"Entry size (% of capital)","dashboard.indicator.backtest.field.minOrderPct":"Min order size (% of capital) (optional)","dashboard.indicator.backtest.closeLongTrailing":"Close Long (Trailing)","dashboard.indicator.backtest.reduceLong":"Reduce Long","dashboard.indicator.backtest.closeShortTrailing":"Close Short (Trailing)","dashboard.indicator.backtest.reduceShort":"Reduce Short","dashboard.docs.title":"مركز الوثائق","dashboard.docs.search.placeholder":"بحث في المستندات...","dashboard.docs.category.all":"الكل","dashboard.docs.category.guide":"دليل التطوير","dashboard.docs.category.api":"وثائق واجهة برمجة التطبيقات","dashboard.docs.category.tutorial":"البرنامج التعليمي","dashboard.docs.category.faq":"الأسئلة الشائعة","dashboard.docs.featured.title":"الوثائق الموصى بها","dashboard.docs.featured.tag":"موصى به","dashboard.docs.list.views":"تصفح","dashboard.docs.list.author":"المؤلف","dashboard.docs.list.empty":"لا توجد وثيقة بعد","dashboard.docs.list.backToAll":"العودة إلى جميع الوثائق","dashboard.docs.list.total":"{count} من المستندات في المجموع","dashboard.docs.detail.back":"العودة إلى قائمة المستندات","dashboard.docs.detail.updatedAt":"تم التحديث على","dashboard.docs.detail.related":"الوثائق ذات الصلة","dashboard.docs.detail.notFound":"الوثيقة غير موجودة","dashboard.docs.detail.error":"المستند غير موجود أو تم حذفه","dashboard.docs.search.result":"نتائج البحث","dashboard.docs.search.keyword":"الكلمات الرئيسية","community.filter.indicatorType":"نوع المؤشر","community.filter.all":"الكل","community.filter.other":"خيارات أخرى","community.filter.pricing":"نوع التسعير","community.filter.allPricing":"جميع التسعير","community.filter.sortBy":"الترتيب حسب","community.filter.search":"بحث","community.filter.searchPlaceholder":"البحث عن اسم المقياس","community.indicatorType.trend":"نوع الاتجاه","community.indicatorType.momentum":"نوع الزخم","community.indicatorType.volatility":"التقلب","community.indicatorType.volume":"الحجم","community.indicatorType.custom":"تخصيص","community.pricing.free":"مجانا","community.pricing.paid":"ادفع","community.sort.downloads":"التنزيلات","community.sort.rating":"التقييم","community.sort.newest":"أحدث الإصدارات","community.pagination.total":"{total} مؤشرات في المجموع","community.noDescription":"لا يوجد وصف بعد","community.detail.type":"اكتب","community.detail.pricing":"التسعير","community.detail.rating":"التقييم","community.detail.downloads":"التنزيلات","community.detail.author":"المؤلف","community.detail.description":"مقدمة","community.detail.detailContent":"وصف تفصيلي","community.detail.backtestStats":"إحصائيات الاختبار الخلفي","community.action.purchase":"مؤشر الشراء","community.action.addToMyIndicators":"أضف إلى مؤشراتي","community.action.favorite":"المجموعة","community.action.unfavorite":"إلغاء المفضلة","community.action.buyNow":"اشتري الآن","community.action.renew":"التجديد","community.purchase.price":"السعر","community.purchase.permanent":"دائم","community.purchase.monthly":"شهر","community.purchase.confirmBuy":"هل تريد تأكيد شراء هذا المؤشر ({price} QDT)؟","community.purchase.confirmRenew":"هل تريد تأكيد تجديد هذا المؤشر ({price} QDT/month)؟","community.purchase.confirmFree":"هل تريد تأكيد إضافة هذا المؤشر المجاني؟","community.purchase.confirmTitle":"تأكيد الإجراء","community.purchase.owned":"لقد قمت بشراء هذا المؤشر (صالح بشكل دائم)","community.purchase.ownIndicator":"هذا هو المقياس الذي نشرته","community.purchase.expired":"لقد انتهت صلاحية اشتراكك","community.purchase.expiresOn":"وقت انتهاء الصلاحية: {التاريخ}","community.tabs.detail":"تفاصيل المؤشر","community.tabs.backtest":"بيانات الاختبار الخلفي","community.tabs.ratings":"مراجعات المستخدم","community.rating.myRating":"تقييمي","community.rating.stars":"{عد} النجوم","community.rating.commentPlaceholder":"شارك تجربتك...","community.rating.submit":"إرسال التقييم","community.rating.modify":"تعديل","community.rating.saveModify":"حفظ التغييرات","community.rating.cancel":"إلغاء","community.rating.selectRating":"الرجاء تحديد التقييم","community.rating.success":"التقييم ناجح","community.rating.modifySuccess":"تم تعديل المراجعة بنجاح","community.rating.failed":"فشل التقييم","community.rating.noRatings":"لا توجد تعليقات حتى الآن","community.backtest.note":"البيانات المذكورة أعلاه هي نتائج اختبار خلفي تاريخية وهي للإشارة فقط ولا تمثل أرباحًا مستقبلية.","community.backtest.noData":"لا توجد بيانات باكتست حتى الآن","community.backtest.uploadHint":"لم يقم المؤلف بتحميل بيانات الاختبار الخلفي حتى الآن","community.message.loadFailed":"فشل تحميل قائمة المؤشرات","community.message.purchaseProcessing":"جارٍ معالجة طلب الشراء...","community.message.downloadSuccess":"تمت إضافة المقياس إلى قائمة المقاييس الخاصة بي","community.message.favoriteSuccess":"تم التجميع بنجاح","community.message.unfavoriteSuccess":"تم إلغاء التجميع بنجاح","community.message.operationSuccess":"العملية ناجحة","community.message.operationFailed":"فشلت العملية","community.banner.readOnly":"للقراءة فقط","community.banner.loginHint":"لل تسجيل الدخول أو التسجيل، يرجى النقر على الزر للانتقال إلى صفحة مستقلة لتجنب مشاكل CSRF","community.banner.jumpButton":"الانتقال إلى تسجيل الدخول/التسجيل","dashboard.totalEquity":"إجمالي حقوق الملكية","dashboard.totalPnL":"إجمالي الربح والخسارة","dashboard.aiStrategies":"استراتيجية الذكاء الاصطناعي","dashboard.indicatorStrategies":"استراتيجية المؤشر","dashboard.running":"الجري","dashboard.pnlHistory":"الأرباح والخسائر التاريخية","dashboard.strategyPerformance":"نسبة الربح والخسارة في الاستراتيجية","dashboard.recentTrades":"المعاملات الأخيرة","dashboard.currentPositions":"الوضع الحالي","dashboard.table.time":"الوقت","dashboard.table.strategy":"اسم السياسة","dashboard.table.symbol":"الهدف","dashboard.table.type":"اكتب","dashboard.table.side":"الاتجاه","dashboard.table.size":"الفائدة المفتوحة","dashboard.table.entryPrice":"متوسط سعر الافتتاح","dashboard.table.price":"السعر","dashboard.table.amount":"الكمية","dashboard.table.profit":"الربح والخسارة","dashboard.pendingOrders":"سجل تنفيذ الطلبات","dashboard.totalOrders":"إجمالي {total} طلب","dashboard.viewError":"عرض الخطأ","dashboard.filled":"تم التنفيذ","dashboard.orderTable.time":"وقت الإنشاء","dashboard.orderTable.strategy":"الإستراتيجية","dashboard.orderTable.symbol":"زوج التداول","dashboard.orderTable.signalType":"نوع الإشارة","dashboard.orderTable.amount":"الكمية","dashboard.orderTable.price":"سعر التنفيذ","dashboard.orderTable.status":"الحالة","dashboard.orderTable.executedAt":"وقت التنفيذ","dashboard.signalType.openLong":"فتح Long","dashboard.signalType.openShort":"فتح Short","dashboard.signalType.closeLong":"إغلاق Long","dashboard.signalType.closeShort":"إغلاق Short","dashboard.signalType.addLong":"إضافة Long","dashboard.signalType.addShort":"إضافة Short","dashboard.status.pending":"قيد الانتظار","dashboard.status.processing":"قيد المعالجة","dashboard.status.completed":"مكتمل","dashboard.status.failed":"فشل","dashboard.status.cancelled":"ملغي","dashboard.table.pnl":"الربح أو الخسارة غير المحققة","form.basic-form.basic.title":"الشكل الأساسي","form.basic-form.basic.description":"تُستخدم صفحات النماذج لجمع المعلومات من المستخدمين أو التحقق منها. تُستخدم النماذج الأساسية بشكل شائع في سيناريوهات النماذج التي تحتوي على عدد قليل من عناصر البيانات.","form.basic-form.title.label":"العنوان","form.basic-form.title.placeholder":"إعطاء الهدف اسما","form.basic-form.title.required":"الرجاء إدخال عنوان","form.basic-form.date.label":"تاريخ البدء والانتهاء","form.basic-form.placeholder.start":"تاريخ البدء","form.basic-form.placeholder.end":"تاريخ الانتهاء","form.basic-form.date.required":"الرجاء تحديد تاريخي البدء والانتهاء","form.basic-form.goal.label":"وصف الهدف","form.basic-form.goal.placeholder":"الرجاء إدخال أهداف العمل المرحلية","form.basic-form.goal.required":"الرجاء إدخال وصف الهدف","form.basic-form.standard.label":"قياس","form.basic-form.standard.placeholder":"الرجاء إدخال المقاييس","form.basic-form.standard.required":"الرجاء إدخال المقاييس","form.basic-form.client.label":"العميل","form.basic-form.client.required":"يرجى وصف العملاء الذين تخدمهم","form.basic-form.label.tooltip":"متلقي الخدمة المستهدفين","form.basic-form.client.placeholder":"يرجى وصف العملاء الذين تخدمهم، والعملاء الداخليين مباشرةً @الاسم/رقم الوظيفة","form.basic-form.invites.label":"دعوة المراجعين","form.basic-form.invites.placeholder":"يرجى إرسال @الاسم/رقم الموظف مباشرةً، ويمكنك دعوة ما يصل إلى 5 أشخاص","form.basic-form.weight.label":"الوزن","form.basic-form.weight.placeholder":"من فضلك أدخل","form.basic-form.public.label":"تستهدف الجمهور","form.basic-form.label.help":"تتم مشاركة العملاء والمراجعين بشكل افتراضي","form.basic-form.radio.public":"عام","form.basic-form.radio.partially-public":"عامة جزئيا","form.basic-form.radio.private":"خاص","form.basic-form.publicUsers.placeholder":"مفتوح ل","form.basic-form.option.A":"زميل 1","form.basic-form.option.B":"زميل 2","form.basic-form.option.C":"زميل ثلاثة","form.basic-form.email.required":"الرجاء إدخال عنوان البريد الإلكتروني الخاص بك!","form.basic-form.email.wrong-format":"تنسيق عنوان البريد الإلكتروني خاطئ!","form.basic-form.userName.required":"الرجاء إدخال اسم المستخدم!","form.basic-form.password.required":"الرجاء إدخال كلمة المرور الخاصة بك!","form.basic-form.password.twice":"كلمات المرور التي تم إدخالها مرتين غير متطابقة!","form.basic-form.strength.msg":"الرجاء إدخال 6 أحرف على الأقل. يرجى عدم استخدام كلمات المرور التي يمكن تخمينها بسهولة.","form.basic-form.strength.strong":"القوة : قوية","form.basic-form.strength.medium":"القوة: متوسطة","form.basic-form.strength.short":"القوة : قصيرة جداً","form.basic-form.confirm-password.required":"الرجاء تأكيد كلمة المرور الخاصة بك!","form.basic-form.phone-number.required":"الرجاء إدخال رقم هاتفك المحمول!","form.basic-form.phone-number.wrong-format":"تنسيق رقم الهاتف المحمول خاطئ!","form.basic-form.verification-code.required":"الرجاء إدخال رمز التحقق!","form.basic-form.form.get-captcha":"الحصول على رمز التحقق","form.basic-form.captcha.second":"ثواني","form.basic-form.form.optional":"(اختياري)","form.basic-form.form.submit":"إرسال","form.basic-form.form.save":"حفظ","form.basic-form.email.placeholder":"البريد الإلكتروني","form.basic-form.password.placeholder":"كلمة المرور مكونة من 6 أحرف على الأقل، حساسة لحالة الأحرف","form.basic-form.confirm-password.placeholder":"تأكيد كلمة المرور","form.basic-form.phone-number.placeholder":"رقم الهاتف المحمول","form.basic-form.verification-code.placeholder":"رمز التحقق","result.success.title":"تم التقديم بنجاح","result.success.description":'يتم استخدام صفحة نتائج الإرسال لتقديم تعليقات على نتائج المعالجة لسلسلة من مهام التشغيل. إذا كانت عملية بسيطة فقط، فاستخدم رسالة الملاحظات العامة السريعة. يمكن لمنطقة النص هذه عرض تعليمات تكميلية بسيطة. إذا كانت هناك حاجة لعرض "المستندات"، فيمكن للمنطقة الرمادية أدناه عرض محتوى أكثر تعقيدًا.',"result.success.operate-title":"اسم المشروع","result.success.operate-id":"معرف المشروع","result.success.principal":"الشخص المسؤول","result.success.operate-time":"الوقت الفعال","result.success.step1-title":"إنشاء مشروع","result.success.step1-operator":"تشو ليلي","result.success.step2-title":"المراجعة الأولية للقسم","result.success.step2-operator":"تشو ماوماو","result.success.step2-extra":"عاجل","result.success.step3-title":"المراجعة المالية","result.success.step4-title":"كامل","result.success.btn-return":"العودة إلى القائمة","result.success.btn-project":"عرض العناصر","result.success.btn-print":"طباعة","result.fail.error.title":"فشل التقديم","result.fail.error.description":"يرجى التحقق من المعلومات التالية وتعديلها قبل إعادة الإرسال.","result.fail.error.hint-title":"يحتوي المحتوى الذي أرسلته على الأخطاء التالية:","result.fail.error.hint-text1":"لقد تم تجميد حسابك","result.fail.error.hint-btn1":"ذوبان الجليد على الفور","result.fail.error.hint-text2":"حسابك ليس مؤهلاً بعد للتقديم","result.fail.error.hint-btn2":"قم بالترقية الآن","result.fail.error.btn-text":"العودة إلى التعديل","account.settings.menuMap.custom":"التخصيص","account.settings.menuMap.binding":"ربط الحساب","account.settings.basic.avatar":"الصورة الرمزية","account.settings.basic.change-avatar":"تغيير الصورة الرمزية","account.settings.basic.email":"البريد الإلكتروني","account.settings.basic.email-message":"الرجاء إدخال البريد الإلكتروني الخاص بك!","account.settings.basic.nickname":"اللقب","account.settings.basic.nickname-message":"الرجاء إدخال اللقب الخاص بك!","account.settings.basic.profile":"الملف الشخصي","account.settings.basic.profile-message":"الرجاء إدخال ملف التعريف الشخصي الخاص بك!","account.settings.basic.profile-placeholder":"الملف الشخصي","account.settings.basic.country":"البلد/المنطقة","account.settings.basic.country-message":"الرجاء إدخال بلدك أو منطقتك!","account.settings.basic.geographic":"المحافظة والمدينة","account.settings.basic.geographic-message":"من فضلك أدخل محافظتك ومدينتك!","account.settings.basic.address":"عنوان الشارع","account.settings.basic.address-message":"الرجاء إدخال عنوان الشارع الخاص بك!","account.settings.basic.phone":"رقم الاتصال","account.settings.basic.phone-message":"الرجاء إدخال رقم الاتصال الخاص بك!","account.settings.basic.update":"تحديث المعلومات الأساسية","account.settings.basic.update.success":"تم تحديث المعلومات الأساسية بنجاح","account.settings.security.strong":"قوي","account.settings.security.medium":"في","account.settings.security.weak":"ضعيف","account.settings.security.password":"كلمة مرور الحساب","account.settings.security.password-description":"قوة كلمة المرور الحالية:","account.settings.security.phone":"الهاتف المحمول الأمن","account.settings.security.phone-description":"الهاتف المحمول المرتبط بالفعل:","account.settings.security.question":"القضايا الأمنية","account.settings.security.question-description":"لم يتم تعيين أي أسئلة أمنية، الأمر الذي يمكن أن يحمي أمان الحساب بشكل فعال.","account.settings.security.email":"ربط البريد الإلكتروني","account.settings.security.email-description":"عنوان البريد الإلكتروني المرتبط بالفعل:","account.settings.security.mfa":"جهاز ام اف ايه","account.settings.security.mfa-description":"جهاز MFA غير مقيد. بعد الربط، يمكنك التأكيد مرة أخرى.","account.settings.security.modify":"تعديل","account.settings.security.set":"الإعدادات","account.settings.security.bind":"ملزمة","account.settings.binding.taobao":"ربط تاوباو","account.settings.binding.taobao-description":"حساب تاوباو غير ملزم حاليا","account.settings.binding.alipay":"ربط عليباي","account.settings.binding.alipay-description":"حساب Alipay غير ملزم حاليا","account.settings.binding.dingding":"ملزمة DingTalk","account.settings.binding.dingding-description":"لا يوجد حساب DingTalk مرتبط حاليًا","account.settings.binding.bind":"ملزمة","account.settings.notification.password":"كلمة مرور الحساب","account.settings.notification.password-description":"سيتم إخطار الرسائل الواردة من المستخدمين الآخرين في شكل رسائل موقع.","account.settings.notification.messages":"رسائل النظام","account.settings.notification.messages-description":"سيتم إخطار رسائل النظام في شكل رسائل الموقع.","account.settings.notification.todo":"المهام الواجبة","account.settings.notification.todo-description":"سيتم إخطار المهام الواجبة في شكل رسائل داخل الموقع","account.settings.settings.open":"مفتوح","account.settings.settings.close":"قريب","trading-assistant.title":"مساعد التداول","trading-assistant.strategyList":"قائمة الإستراتيجية","trading-assistant.createStrategy":"إنشاء سياسة","trading-assistant.noStrategy":"لا توجد استراتيجية حتى الآن","trading-assistant.selectStrategy":"يرجى تحديد استراتيجية من اليسار لعرض التفاصيل","trading-assistant.startStrategy":"استراتيجية الإطلاق","trading-assistant.stopStrategy":"استراتيجية التوقف","trading-assistant.editStrategy":"استراتيجية التحرير","trading-assistant.deleteStrategy":"حذف السياسة","trading-assistant.status.running":"الجري","trading-assistant.status.stopped":"توقف","trading-assistant.status.error":"خطأ","trading-assistant.strategyType.IndicatorStrategy":"استراتيجية المؤشر الفني","trading-assistant.strategyType.PromptBasedStrategy":"استراتيجية الكلمات الدلالية","trading-assistant.strategyType.GridStrategy":"استراتيجية الشبكة","trading-assistant.tabs.tradingRecords":"تاريخ المعاملة","trading-assistant.tabs.positions":"سجل الموقف","trading-assistant.tabs.equityCurve":"منحنى الأسهم","trading-assistant.form.step1":"حدد المؤشرات","trading-assistant.form.step2":"تكوين الصرف","trading-assistant.form.step3":"معلمات الاستراتيجية","trading-assistant.form.indicator":"حدد المؤشرات","trading-assistant.form.indicatorHint":"يمكنك فقط تحديد المؤشرات الفنية التي اشتريتها أو أنشأتها","trading-assistant.form.qdtCostHints":"سيؤدي استخدام الإستراتيجية إلى استهلاك QDT، يرجى التأكد من أن الحساب به رصيد كافٍ من QDT","trading-assistant.form.indicatorDescription":"وصف المؤشر","trading-assistant.form.noDescription":"لا يوجد وصف بعد","trading-assistant.form.exchange":"اختر الصرف","trading-assistant.form.apiKey":"مفتاح واجهة برمجة التطبيقات","trading-assistant.form.secretKey":"المفتاح السري","trading-assistant.form.passphrase":"عبارة المرور","trading-assistant.form.testConnection":"اتصال الاختبار","trading-assistant.form.strategyName":"اسم السياسة","trading-assistant.form.symbol":"زوج التداول","trading-assistant.form.symbolHint":"حاليًا، يتم دعم أزواج تداول العملات المشفرة فقط","trading-assistant.form.initialCapital":"حجم الاستثمار","trading-assistant.form.marketType":"نوع السوق","trading-assistant.form.marketTypeFutures":"العقد","trading-assistant.form.marketTypeSpot":"بقعة","trading-assistant.form.marketTypeHint":"يدعم العقد التداول في اتجاهين والرافعة المالية، في حين أن السعر الفوري يدعم فقط المراكز الطويلة والرافعة المالية ثابتة عند 1x","trading-assistant.form.leverage":"الاستفادة المتعددة","trading-assistant.form.leverageHint":"العقد: 1-125 مرة، البقعة: ثابتة 1 مرة","trading-assistant.form.spotLeverageFixed":"الرافعة المالية للتداول الفوري ثابتة عند 1x","trading-assistant.form.spotOnlyLongHint":"التداول الفوري يدعم فقط المراكز الطويلة","trading-assistant.form.tradeDirection":"اتجاه التداول","trading-assistant.form.tradeDirectionLong":"طويلة فقط","trading-assistant.form.tradeDirectionShort":"قصيرة فقط","trading-assistant.form.tradeDirectionBoth":"معاملة في اتجاهين","trading-assistant.form.timeframe":"الفترة الزمنية","trading-assistant.form.klinePeriod":"فترة K-Line","trading-assistant.form.timeframe1m":"1 دقيقة","trading-assistant.form.timeframe5m":"5 دقائق","trading-assistant.form.timeframe15m":"15 دقيقة","trading-assistant.form.timeframe30m":"30 دقيقة","trading-assistant.form.timeframe1H":"1 ساعة","trading-assistant.form.timeframe4H":"4 ساعات","trading-assistant.form.timeframe1D":"يوم واحد","trading-assistant.form.selectStrategyType":"اختر نوع الاستراتيجية","trading-assistant.form.indicatorStrategy":"استراتيجية المؤشر","trading-assistant.form.indicatorStrategyDesc":"استراتيجية تداول آلية تعتمد على المؤشرات الفنية","trading-assistant.form.aiStrategy":"استراتيجية AI","trading-assistant.form.aiStrategyDesc":"استراتيجية تداول آلية تعتمد على اتخاذ القرار الذكي للذكاء الاصطناعي","trading-assistant.form.enableAiFilter":"تفعيل مرشح اتخاذ القرار الذكي للذكاء الاصطناعي","trading-assistant.form.enableAiFilterHint":"عند التفعيل، سيتم تصفية إشارات المؤشر بواسطة الذكاء الاصطناعي لتحسين جودة التداول","trading-assistant.form.aiFilterPrompt":"موجه مخصص","trading-assistant.form.aiFilterPromptHint":"توفير تعليمات مخصصة لتصفية الذكاء الاصطناعي، اتركه فارغًا لاستخدام الإعداد الافتراضي للنظام","trading-assistant.validation.strategyTypeRequired":"يرجى اختيار نوع الاستراتيجية","trading-assistant.form.advancedSettings":"الإعدادات المتقدمة","trading-assistant.form.orderMode":"وضع الطلب","trading-assistant.form.orderModeMaker":"صانع","trading-assistant.form.orderModeTaker":"سعر السوق (المتلقي)","trading-assistant.form.orderModeHint":"يستخدم وضع الأمر المعلق أوامر الحد وتكون رسوم المناولة أقل؛ يتم تنفيذ وضع سعر السوق على الفور وتكون رسوم المناولة أعلى.","trading-assistant.form.makerWaitSec":"وقت الانتظار للأوامر المعلقة (ثواني)","trading-assistant.form.makerWaitSecHint":"الوقت اللازم لانتظار المعاملة بعد تقديم الطلب. قم بالإلغاء وحاول مرة أخرى بعد انتهاء المهلة.","trading-assistant.form.makerRetries":"عدد مرات إعادة المحاولة للأوامر المعلقة","trading-assistant.form.makerRetriesHint":"الحد الأقصى لعدد مرات إعادة المحاولة عندما لا يتم تنفيذ الأمر المعلق","trading-assistant.form.fallbackToMarket":"يفشل الأمر المعلق ويتم تخفيض سعر السوق.","trading-assistant.form.fallbackToMarketHint":"عندما لا يتم إكمال أمر الفتح/الإغلاق المعلق، ما إذا كان ينبغي تخفيضه إلى أمر سوق لضمان اكتمال المعاملة.","trading-assistant.form.marginMode":"وضع الهامش","trading-assistant.form.marginModeCross":"مستودع كامل","trading-assistant.form.marginModeIsolated":"موقف معزول","trading-assistant.form.stopLossPct":"نسبة وقف الخسارة (٪)","trading-assistant.form.stopLossPctHint":"قم بتعيين نسبة وقف الخسارة، 0 يعني عدم تمكين وقف الخسارة","trading-assistant.form.takeProfitPct":"نسبة جني الأرباح (%)","trading-assistant.form.takeProfitPctHint":"قم بتعيين نسبة أخذ الربح، 0 يعني تعطيل أخذ الربح","trading-assistant.form.signalMode":"وضع الإشارة","trading-assistant.form.signalModeConfirmed":"تأكيد الوضع","trading-assistant.form.signalModeAggressive":"الوضع العدواني","trading-assistant.form.signalModeHint":"وضع التأكيد: يتحقق فقط من خطوط K المكتملة؛ الوضع العدواني: يتحقق أيضًا من تشكيل خطوط K","trading-assistant.form.cancel":"إلغاء","trading-assistant.form.prev":"الخطوة السابقة","trading-assistant.form.next":"الخطوة التالية","trading-assistant.form.confirmCreate":"تأكيد الإنشاء","trading-assistant.form.confirmEdit":"تأكيد التغييرات","trading-assistant.messages.createSuccess":"تم إنشاء الإستراتيجية بنجاح","trading-assistant.messages.createFailed":"فشل في إنشاء السياسة","trading-assistant.messages.updateSuccess":"تم تحديث السياسة بنجاح","trading-assistant.messages.updateFailed":"فشل تحديث السياسة","trading-assistant.messages.deleteSuccess":"تم حذف السياسة بنجاح","trading-assistant.messages.deleteFailed":"فشل سياسة الحذف","trading-assistant.messages.startSuccess":"بدأت الإستراتيجية بنجاح","trading-assistant.messages.startFailed":"فشل في بدء السياسة","trading-assistant.messages.stopSuccess":"تم إيقاف الإستراتيجية بنجاح","trading-assistant.messages.stopFailed":"فشلت استراتيجية التوقف","trading-assistant.messages.loadFailed":"فشل الحصول على قائمة السياسات","trading-assistant.messages.runningWarning":"الاستراتيجية قيد التشغيل. يرجى إيقاف الإستراتيجية قبل تعديلها.","trading-assistant.messages.deleteConfirmWithName":'هل أنت متأكد أنك تريد حذف السياسة "{name}"؟ هذه العملية لا رجعة فيها.',"trading-assistant.messages.deleteConfirm":"هل أنت متأكد أنك تريد حذف هذه السياسة؟ هذه العملية لا رجعة فيها.","trading-assistant.messages.loadTradesFailed":"فشل في الحصول على سجلات المعاملات","trading-assistant.messages.loadPositionsFailed":"فشل الحصول على سجل الموقف","trading-assistant.messages.loadEquityFailed":"فشل في الحصول على منحنى الأسهم","trading-assistant.messages.loadIndicatorsFailed":"فشل تحميل قائمة المؤشرات، يرجى المحاولة مرة أخرى في وقت لاحق","trading-assistant.messages.spotLimitations":"تم ضبط التداول الفوري تلقائيًا على رافعة مالية طويلة فقط بمقدار 1x","trading-assistant.messages.autoFillApiConfig":"تمت تعبئة تكوين واجهة برمجة التطبيقات التاريخية للبورصة تلقائيًا","trading-assistant.placeholders.selectIndicator":"الرجاء تحديد مؤشر","trading-assistant.placeholders.selectExchange":"الرجاء تحديد التبادل","trading-assistant.placeholders.inputApiKey":"الرجاء إدخال مفتاح API","trading-assistant.placeholders.inputSecretKey":"الرجاء إدخال المفتاح السري","trading-assistant.placeholders.inputPassphrase":"الرجاء إدخال عبارة المرور","trading-assistant.placeholders.inputStrategyName":"الرجاء إدخال اسم السياسة","trading-assistant.placeholders.selectSymbol":"يرجى اختيار زوج التداول","trading-assistant.placeholders.selectTimeframe":"الرجاء تحديد الفترة الزمنية","trading-assistant.placeholders.selectKlinePeriod":"الرجاء تحديد فترة K-Line","trading-assistant.placeholders.inputAiFilterPrompt":"الرجاء إدخال موجه مخصص (اختياري)","trading-assistant.validation.indicatorRequired":"الرجاء تحديد مؤشر","trading-assistant.validation.exchangeRequired":"الرجاء تحديد التبادل","trading-assistant.validation.apiKeyRequired":"الرجاء إدخال مفتاح API","trading-assistant.validation.secretKeyRequired":"الرجاء إدخال المفتاح السري","trading-assistant.validation.passphraseRequired":"الرجاء إدخال عبارة المرور","trading-assistant.validation.exchangeConfigIncomplete":"يرجى ملء معلومات تكوين التبادل الكاملة","trading-assistant.validation.testConnectionRequired":'يرجى النقر على زر "اختبار الاتصال" أولاً والتأكد من نجاح الاتصال',"trading-assistant.validation.testConnectionFailed":"فشل اختبار الاتصال، يرجى التحقق من التكوين وإعادة المحاولة","trading-assistant.validation.credentialRequired":"يرجى إضافة واختبار بيانات اعتماد التبادل في المركز الشخصي أولاً","trading-assistant.validation.strategyNameRequired":"الرجاء إدخال اسم السياسة","trading-assistant.validation.symbolRequired":"يرجى اختيار زوج التداول","trading-assistant.validation.initialCapitalRequired":"الرجاء إدخال مبلغ الاستثمار","trading-assistant.validation.leverageRequired":"الرجاء إدخال نسبة الرافعة المالية","trading-assistant.table.time":"الوقت","trading-assistant.table.type":"اكتب","trading-assistant.table.price":"السعر","trading-assistant.table.amount":"الكمية","trading-assistant.table.value":"المبلغ","trading-assistant.table.commission":"رسوم المناولة","trading-assistant.table.symbol":"زوج التداول","trading-assistant.table.side":"الاتجاه","trading-assistant.table.size":"كمية الموقف","trading-assistant.table.entryPrice":"سعر الافتتاح","trading-assistant.table.currentPrice":"السعر الحالي","trading-assistant.table.unrealizedPnl":"الربح أو الخسارة غير المحققة","trading-assistant.table.pnlPercent":"نسبة الربح والخسارة","trading-assistant.table.buy":"شراء","trading-assistant.table.sell":"بيع","trading-assistant.table.long":"اذهب لفترة طويلة","trading-assistant.table.short":"قصيرة","trading-assistant.table.noPositions":"لا توجد مناصب حتى الآن","trading-assistant.detail.title":"تفاصيل الاستراتيجية","trading-assistant.detail.strategyName":"اسم السياسة","trading-assistant.detail.strategyType":"نوع الإستراتيجية","trading-assistant.detail.status":"الحالة","trading-assistant.detail.tradingMode":"نموذج التداول","trading-assistant.detail.exchange":"تبادل","trading-assistant.detail.initialCapital":"رأس المال الأولي","trading-assistant.detail.totalInvestment":"إجمالي مبلغ الاستثمار","trading-assistant.detail.currentEquity":"صافي القيمة الحالية","trading-assistant.detail.totalPnl":"إجمالي الربح والخسارة","trading-assistant.detail.indicatorName":"اسم المؤشر","trading-assistant.detail.maxLeverage":"الحد الأقصى للرافعة المالية","trading-assistant.detail.decideInterval":"الفاصل الزمني للقرار","trading-assistant.detail.symbols":"كائن المعاملة","trading-assistant.detail.createdAt":"وقت الخلق","trading-assistant.detail.updatedAt":"وقت التحديث","trading-assistant.detail.llmConfig":"تكوين نموذج الذكاء الاصطناعي","trading-assistant.detail.exchangeConfig":"تكوين الصرف","trading-assistant.detail.provider":"مزود","trading-assistant.detail.modelId":"معرف النموذج","trading-assistant.detail.close":"إغلاق","trading-assistant.detail.loadFailed":"فشل الحصول على تفاصيل السياسة","trading-assistant.equity.noData":"لا توجد بيانات عن صافي القيمة حتى الآن","trading-assistant.equity.equity":"صافي القيمة","trading-assistant.exchange.tradingMode":"نموذج التداول","trading-assistant.exchange.virtual":"محاكاة التداول","trading-assistant.exchange.live":"معاملة حقيقية","trading-assistant.exchange.selectExchange":"اختر الصرف","trading-assistant.exchange.walletAddress":"عنوان المحفظة","trading-assistant.exchange.walletAddressPlaceholder":"الرجاء إدخال عنوان محفظتك (يبدأ بـ 0x)","trading-assistant.exchange.privateKey":"مفتاح خاص","trading-assistant.exchange.privateKeyPlaceholder":"الرجاء إدخال المفتاح الخاص (64 حرفًا)","trading-assistant.exchange.testConnection":"اتصال الاختبار","trading-assistant.exchange.connectionSuccess":"تم الاتصال بنجاح","trading-assistant.exchange.connectionFailed":"فشل الاتصال","trading-assistant.exchange.testFailed":"فشل اختبار الاتصال","trading-assistant.exchange.fillComplete":"يرجى ملء معلومات تكوين التبادل الكاملة","trading-assistant.strategyTypeOptions.ai":"استراتيجية تعتمد على الذكاء الاصطناعي","trading-assistant.strategyTypeOptions.indicator":"استراتيجية المؤشر الفني","trading-assistant.strategyTypeOptions.aiDeveloping":"إن وظيفة الإستراتيجية المبنية على الذكاء الاصطناعي قيد التطوير، لذا ترقبوا ذلك","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"ميزات الإستراتيجية المعتمدة على الذكاء الاصطناعي قيد التطوير","trading-assistant.indicatorType.trend":"الاتجاه","trading-assistant.indicatorType.momentum":"الزخم","trading-assistant.indicatorType.volatility":"التقلب","trading-assistant.indicatorType.volume":"الحجم","trading-assistant.indicatorType.custom":"تخصيص","trading-assistant.exchangeNames":{okx:"أوكي إكس",binance:"بينانس",hyperliquid:"السائل الزائد",blockchaincom:"Blockchain.com",coinbaseexchange:"كوين بيس",gate:"بوابة.io",mexc:"ميكسك",kraken:"كراكن",bitfinex:"بيتفينكس",bybit:"بايبيت",kucoin:"كيو كوين",huobi:"هوبي",bitget:"بيتجيت",bitmex:"بيتميكس",deribit:"ديربيت",phemex:"فيميكس",bitmart:"بيتمارت",bitstamp:"بيتستامب",bittrex:"بيتريكس",poloniex:"بولونيكس",gemini:"الجوزاء",cryptocom:"تشفير.كوم",bitflyer:"bitFlyer",upbit:"أوبيت",bithumb:"بيتهامب",coinone:"عملة واحدة",zb:"ZB",lbank:"بنك إل",bibox:"بيبوكس",bigone:"BigONE",bitrue:"صحيح",coinex:"كوين إكس",digifinex:"DigiFinex",ftx:"إف تي إكس",ftxus:"إف تي إكس الولايات المتحدة",binanceus:"بينانس الولايات المتحدة",binancecoinm:"عملة بينانس-M",binanceusdm:"Binance USDⓈ-M",deepcoin:"ديبكوين"},"ai-trading-assistant.title":"مساعد التداول بالذكاء الاصطناعي","ai-trading-assistant.strategyList":"قائمة الإستراتيجية","ai-trading-assistant.createStrategy":"إنشاء سياسة","ai-trading-assistant.noStrategy":"لا توجد استراتيجية حتى الآن","ai-trading-assistant.selectStrategy":"يرجى تحديد استراتيجية من اليسار لعرض التفاصيل","ai-trading-assistant.startStrategy":"استراتيجية الإطلاق","ai-trading-assistant.stopStrategy":"استراتيجية التوقف","ai-trading-assistant.editStrategy":"استراتيجية التحرير","ai-trading-assistant.deleteStrategy":"حذف السياسة","ai-trading-assistant.status.running":"الجري","ai-trading-assistant.status.stopped":"توقف","ai-trading-assistant.status.error":"خطأ","ai-trading-assistant.tabs.tradingRecords":"تاريخ المعاملة","ai-trading-assistant.tabs.positions":"سجل الموقف","ai-trading-assistant.tabs.aiDecisions":"سجل قرار الذكاء الاصطناعي","ai-trading-assistant.tabs.equityCurve":"منحنى الأسهم","ai-trading-assistant.form.createTitle":"إنشاء استراتيجيات التداول بالذكاء الاصطناعي","ai-trading-assistant.form.editTitle":"تحرير استراتيجية التداول بالذكاء الاصطناعي","ai-trading-assistant.form.strategyName":"اسم السياسة","ai-trading-assistant.form.modelId":"نموذج الذكاء الاصطناعي","ai-trading-assistant.form.modelIdHint":"استخدم خدمة OpenRouter الخاصة بالنظام دون تكوين مفتاح API","ai-trading-assistant.form.decideInterval":"الفاصل الزمني للقرار","ai-trading-assistant.form.decideInterval5m":"5 دقائق","ai-trading-assistant.form.decideInterval10m":"10 دقائق","ai-trading-assistant.form.decideInterval30m":"30 دقيقة","ai-trading-assistant.form.decideInterval1h":"1 ساعة","ai-trading-assistant.form.decideInterval4h":"4 ساعات","ai-trading-assistant.form.decideInterval1d":"يوم واحد","ai-trading-assistant.form.decideInterval1w":"1 أسبوع","ai-trading-assistant.form.decideIntervalHint":"الفاصل الزمني للذكاء الاصطناعي لاتخاذ القرارات","ai-trading-assistant.form.runPeriod":"تشغيل دورة","ai-trading-assistant.form.runPeriodHint":"وقت البدء ووقت الانتهاء لتشغيل الإستراتيجية","ai-trading-assistant.form.startDate":"تاريخ البدء","ai-trading-assistant.form.endDate":"تاريخ الانتهاء","ai-trading-assistant.form.qdtCostTitle":"تعليمات خصم QDT","ai-trading-assistant.form.qdtCostHint":"سيتم خصم {cost} QDT لكل قرار للذكاء الاصطناعي. يرجى التأكد من أن حسابك يحتوي على رصيد QDT كافٍ. أثناء تنفيذ الإستراتيجية، سيتم خصم الرسوم في الوقت الفعلي لكل قرار.","ai-trading-assistant.form.apiKey":"مفتاح واجهة برمجة التطبيقات","ai-trading-assistant.form.exchange":"اختر الصرف","ai-trading-assistant.form.secretKey":"المفتاح السري","ai-trading-assistant.form.passphrase":"عبارة المرور","ai-trading-assistant.form.testConnection":"اتصال الاختبار","ai-trading-assistant.form.symbol":"زوج التداول","ai-trading-assistant.form.symbolHint":"حدد زوج التداول للتداول","ai-trading-assistant.form.initialCapital":"المبلغ المستثمر (الهامش)","ai-trading-assistant.form.leverage":"الاستفادة المتعددة","ai-trading-assistant.form.timeframe":"الفترة الزمنية","ai-trading-assistant.form.timeframe1m":"1 دقيقة","ai-trading-assistant.form.timeframe5m":"5 دقائق","ai-trading-assistant.form.timeframe15m":"15 دقيقة","ai-trading-assistant.form.timeframe30m":"30 دقيقة","ai-trading-assistant.form.timeframe1H":"1 ساعة","ai-trading-assistant.form.timeframe4H":"4 ساعات","ai-trading-assistant.form.timeframe1D":"يوم واحد","ai-trading-assistant.form.marketType":"نوع السوق","ai-trading-assistant.form.marketTypeFutures":"العقد","ai-trading-assistant.form.marketTypeSpot":"بقعة","ai-trading-assistant.form.totalPnl":"إجمالي الربح والخسارة","ai-trading-assistant.form.customPrompt":"كلمات موجهة مخصصة","ai-trading-assistant.form.customPromptHint":"اختياري، يُستخدم لتخصيص استراتيجيات التداول بالذكاء الاصطناعي ومنطق اتخاذ القرار","ai-trading-assistant.form.cancel":"إلغاء","ai-trading-assistant.form.prev":"الخطوة السابقة","ai-trading-assistant.form.next":"الخطوة التالية","ai-trading-assistant.form.confirmCreate":"تأكيد الإنشاء","ai-trading-assistant.form.confirmEdit":"تأكيد التغييرات","ai-trading-assistant.messages.createSuccess":"تم إنشاء الإستراتيجية بنجاح","ai-trading-assistant.messages.createFailed":"فشل في إنشاء السياسة","ai-trading-assistant.messages.updateSuccess":"تم تحديث السياسة بنجاح","ai-trading-assistant.messages.updateFailed":"فشل تحديث السياسة","ai-trading-assistant.messages.deleteSuccess":"تم حذف السياسة بنجاح","ai-trading-assistant.messages.deleteFailed":"فشل سياسة الحذف","ai-trading-assistant.messages.startSuccess":"بدأت الإستراتيجية بنجاح","ai-trading-assistant.messages.startFailed":"فشل في بدء السياسة","ai-trading-assistant.messages.stopSuccess":"تم إيقاف الإستراتيجية بنجاح","ai-trading-assistant.messages.stopFailed":"فشلت استراتيجية التوقف","ai-trading-assistant.messages.loadFailed":"فشل الحصول على قائمة السياسات","ai-trading-assistant.messages.loadDecisionsFailed":"فشل في الحصول على سجل قرار الذكاء الاصطناعي","ai-trading-assistant.messages.deleteConfirm":"هل أنت متأكد أنك تريد حذف هذه السياسة؟ هذه العملية لا رجعة فيها.","ai-trading-assistant.placeholders.inputStrategyName":"الرجاء إدخال اسم السياسة","ai-trading-assistant.placeholders.selectModelId":"الرجاء تحديد نموذج الذكاء الاصطناعي","ai-trading-assistant.placeholders.selectDecideInterval":"الرجاء تحديد الفاصل الزمني للقرار","ai-trading-assistant.placeholders.startTime":"وقت البدء","ai-trading-assistant.placeholders.endTime":"وقت النهاية","ai-trading-assistant.placeholders.inputApiKey":"الرجاء إدخال مفتاح API","ai-trading-assistant.placeholders.selectExchange":"الرجاء تحديد التبادل","ai-trading-assistant.placeholders.inputSecretKey":"الرجاء إدخال المفتاح السري","ai-trading-assistant.placeholders.inputPassphrase":"الرجاء إدخال عبارة المرور","ai-trading-assistant.placeholders.selectSymbol":"يرجى تحديد زوج تداول، مثل: BTC/USDT","ai-trading-assistant.placeholders.selectTimeframe":"الرجاء تحديد الفترة الزمنية","ai-trading-assistant.placeholders.inputCustomPrompt":"الرجاء إدخال كلمة مطالبة مخصصة (اختياري)","ai-trading-assistant.validation.strategyNameRequired":"الرجاء إدخال اسم السياسة","ai-trading-assistant.validation.modelIdRequired":"الرجاء تحديد نموذج الذكاء الاصطناعي","ai-trading-assistant.validation.runPeriodRequired":"الرجاء تحديد دورة التشغيل","ai-trading-assistant.validation.apiKeyRequired":"الرجاء إدخال مفتاح API","ai-trading-assistant.validation.exchangeRequired":"الرجاء تحديد التبادل","ai-trading-assistant.validation.secretKeyRequired":"الرجاء إدخال المفتاح السري","ai-trading-assistant.validation.symbolRequired":"يرجى اختيار زوج التداول","ai-trading-assistant.validation.initialCapitalRequired":"الرجاء إدخال مبلغ الاستثمار","ai-trading-assistant.table.time":"الوقت","ai-trading-assistant.table.type":"اكتب","ai-trading-assistant.table.price":"السعر","ai-trading-assistant.table.amount":"الكمية","ai-trading-assistant.table.value":"المبلغ","ai-trading-assistant.table.symbol":"زوج التداول","ai-trading-assistant.table.side":"الاتجاه","ai-trading-assistant.table.size":"كمية الموقف","ai-trading-assistant.table.entryPrice":"سعر الافتتاح","ai-trading-assistant.table.currentPrice":"السعر الحالي","ai-trading-assistant.table.unrealizedPnl":"الربح أو الخسارة غير المحققة","ai-trading-assistant.table.profit":"الربح والخسارة","ai-trading-assistant.table.openLong":"مفتوح لفترة طويلة","ai-trading-assistant.table.closeLong":"بيندو","ai-trading-assistant.table.openShort":"فتح قصيرة","ai-trading-assistant.table.closeShort":"فارغ","ai-trading-assistant.table.addLong":"غادوت","ai-trading-assistant.table.addShort":"إضافة قصيرة","ai-trading-assistant.table.closeShortProfit":"جني الأرباح من المركز القصير","ai-trading-assistant.table.closeShortStop":"وقف الخسارة","ai-trading-assistant.table.closeLongProfit":"توقف لفترة طويلة وجني الأرباح","ai-trading-assistant.table.closeLongStop":"وقف الخسارة","ai-trading-assistant.table.buy":"شراء","ai-trading-assistant.table.sell":"بيع","ai-trading-assistant.table.long":"اذهب لفترة طويلة","ai-trading-assistant.table.short":"قصيرة","ai-trading-assistant.table.hold":"عقد","ai-trading-assistant.table.reasoning":"سبب التحليل","ai-trading-assistant.table.decisions":"صنع القرار","ai-trading-assistant.table.riskAssessment":"تقييم المخاطر","ai-trading-assistant.table.confidence":"الثقة","ai-trading-assistant.table.totalRecords":"{total} السجلات في المجموع","ai-trading-assistant.table.noPositions":"لا توجد مناصب حتى الآن","ai-trading-assistant.detail.title":"تفاصيل الاستراتيجية","ai-trading-assistant.equity.noData":"لا توجد بيانات عن صافي القيمة حتى الآن","ai-trading-assistant.equity.equity":"صافي القيمة","ai-trading-assistant.exchange.testFailed":"فشل اختبار الاتصال","ai-trading-assistant.exchange.connectionSuccess":"تم الاتصال بنجاح","ai-trading-assistant.exchange.connectionFailed":"فشل الاتصال","ai-trading-assistant.form.advancedSettings":"الإعدادات المتقدمة","ai-trading-assistant.form.orderMode":"وضع الطلب","ai-trading-assistant.form.orderModeMaker":"صانع","ai-trading-assistant.form.orderModeTaker":"سعر السوق (المتلقي)","ai-trading-assistant.form.orderModeHint":"يستخدم وضع الأمر المعلق أوامر الحد وتكون رسوم المناولة أقل؛ يتم تنفيذ وضع سعر السوق على الفور وتكون رسوم المناولة أعلى.","ai-trading-assistant.form.makerWaitSec":"وقت الانتظار للأوامر المعلقة (ثواني)","ai-trading-assistant.form.makerWaitSecHint":"الوقت اللازم لانتظار المعاملة بعد تقديم الطلب. قم بالإلغاء وحاول مرة أخرى بعد انتهاء المهلة.","ai-trading-assistant.form.makerRetries":"عدد مرات إعادة المحاولة للأوامر المعلقة","ai-trading-assistant.form.makerRetriesHint":"الحد الأقصى لعدد مرات إعادة المحاولة عندما لا يتم تنفيذ الأمر المعلق","ai-trading-assistant.form.fallbackToMarket":"يفشل الأمر المعلق ويتم تخفيض سعر السوق.","ai-trading-assistant.form.fallbackToMarketHint":"عندما لا يتم إكمال أمر الفتح/الإغلاق المعلق، ما إذا كان ينبغي تخفيضه إلى أمر سوق لضمان اكتمال المعاملة.","ai-trading-assistant.form.marginMode":"وضع الهامش","ai-trading-assistant.form.marginModeCross":"مستودع كامل","ai-trading-assistant.form.marginModeIsolated":"موقف معزول","ai-analysis.title":"محرك التداول الكمي","ai-analysis.system.online":"على الانترنت","ai-analysis.system.agents":"وكيل","ai-analysis.system.active":"نشط","ai-analysis.system.stage":"المرحلة","ai-analysis.panel.roster":"تشكيلة الوكيل","ai-analysis.panel.thinking":"أفكر...","ai-analysis.panel.done":"كامل","ai-analysis.panel.standby":"الاستعداد","ai-analysis.input.title":"محرك التداول الكمي","ai-analysis.input.placeholder":"حدد الأصول المستهدفة (مثل BTC/USDT)","ai-analysis.input.watchlist":"الأسهم الاختيارية","ai-analysis.input.start":"ابدأ التحليل","ai-analysis.input.recent":"المهام الأخيرة:","ai-analysis.vis.stage":"المرحلة","ai-analysis.vis.processing":"المعالجة","ai-analysis.result.complete":"اكتمل التحليل","ai-analysis.result.signal":"الإشارة النهائية","ai-analysis.result.confidence":"الثقة:","ai-analysis.result.new":"تحليل جديد","ai-analysis.result.full":"عرض التقرير كاملا","ai-analysis.logs.title":"سجل النظام","ai-analysis.modal.title":"تقرير سري","ai-analysis.modal.fundamental":"التحليل الأساسي","ai-analysis.modal.technical":"التحليل الفني","ai-analysis.modal.sentiment":"التحليل العاطفي","ai-analysis.modal.risk":"تقييم المخاطر","ai-analysis.stage.idle":"الاستعداد","ai-analysis.stage.1":"المرحلة الأولى: التحليل متعدد الأبعاد","ai-analysis.stage.2":"المرحلة الثانية: المناقشة الطويلة والقصيرة","ai-analysis.stage.3":"المرحلة الثالثة: التخطيط الاستراتيجي","ai-analysis.stage.4":"المرحلة الرابعة: مراجعة مراقبة المخاطر","ai-analysis.stage.complete":"كامل","ai-analysis.agent.investment_director":"مدير الاستثمار","ai-analysis.agent.role.investment_director":"تحليل شامل واستنتاج نهائي","ai-analysis.agent.market":"محلل السوق","ai-analysis.agent.role.market":"التكنولوجيا وبيانات السوق","ai-analysis.agent.fundamental":"محلل أساسي","ai-analysis.agent.role.fundamental":"التمويل والتقييم","ai-analysis.agent.technical":"محلل فني","ai-analysis.agent.role.technical":"المؤشرات الفنية والرسوم البيانية","ai-analysis.agent.news":"محلل اخبار","ai-analysis.agent.role.news":"مرشح الأخبار العالمية","ai-analysis.agent.sentiment":"محلل المشاعر","ai-analysis.agent.role.sentiment":"الاجتماعية والعاطفية","ai-analysis.agent.risk":"محلل المخاطر","ai-analysis.agent.role.risk":"فحص المخاطر الأساسية","ai-analysis.agent.bull":"الباحث الصاعد","ai-analysis.agent.role.bull":"التعدين محفز النمو","ai-analysis.agent.bear":"الباحث الهابط","ai-analysis.agent.role.bear":"حفر المخاطر والعيوب","ai-analysis.agent.manager":"مدير البحوث","ai-analysis.agent.role.manager":"مشرف المناقشة","ai-analysis.agent.trader":"تاجر","ai-analysis.agent.role.trader":"استراتيجي تنفيذي","ai-analysis.agent.risky":"محلل ناشط","ai-analysis.agent.role.risky":"استراتيجية عدوانية","ai-analysis.agent.neutral":"محلل التوازن","ai-analysis.agent.role.neutral":"استراتيجية التوازن","ai-analysis.agent.safe":"محلل محافظ","ai-analysis.agent.role.safe":"استراتيجية محافظة","ai-analysis.agent.cro":"مدير مراقبة المخاطر (CRO)","ai-analysis.agent.role.cro":"سلطة اتخاذ القرار النهائي","ai-analysis.script.market":"جارٍ جلب بيانات OHLCV من البورصات الرئيسية...","ai-analysis.script.fundamental":"استخراج التقارير المالية الربع سنوية...","ai-analysis.script.technical":"تحليل المؤشرات الفنية وأنماط الرسم البياني.","ai-analysis.script.news":"متابعة الأخبار المالية العالمية...","ai-analysis.script.sentiment":"تحليل اتجاهات وسائل التواصل الاجتماعي...","ai-analysis.script.risk":"حساب التقلبات التاريخية...","invite.inviteLink":"رابط الدعوة","invite.copy":"انسخ الرابط","invite.copySuccess":"تم النسخ بنجاح!","invite.copyFailed":"فشل النسخ، يرجى النسخ يدويًا","invite.noInviteLink":"لم يتم إنشاء رابط الدعوة","invite.totalInvites":"الدعوات التراكمية","invite.totalReward":"المكافآت التراكمية","invite.rules":"قواعد الدعوة","invite.rule1":"في كل مرة تقوم فيها بدعوة صديق بنجاح للتسجيل، سوف تحصل على مكافأة","invite.rule2":"إذا أكمل الصديق المدعو المعاملة الأولى، فستحصل على مكافآت إضافية","invite.rule3":"سيتم إرسال مكافآت الدعوة مباشرة إلى حسابك","invite.inviteList":"قائمة الدعوة","invite.tasks":"مركز البعثة","invite.inviteeName":"المدعو","invite.inviteTime":"وقت الدعوة","invite.status":"الحالة","invite.reward":"مكافأة","invite.active":"نشط","invite.inactive":"لم يتم تفعيلها","invite.completed":"مكتمل","invite.claimed":"تم الاستلام","invite.pending":"ليتم الانتهاء منها","invite.goToTask":"لإكمال","invite.claimReward":"المطالبة بالمكافآت","invite.verify":"اكتمل التحقق","invite.verifySuccess":"تم التحقق بنجاح! اكتملت المهمة","invite.verifyNotCompleted":"المهمة لم تكتمل بعد، يرجى إكمال المهمة أولا","invite.verifyFailed":"فشل التحقق، يرجى المحاولة مرة أخرى في وقت لاحق","invite.claimSuccess":"تم استلام {reward} QDT بنجاح!","invite.claimFailed":"فشل التجميع، يرجى المحاولة مرة أخرى لاحقًا","invite.totalRecords":"{total} السجلات في المجموع","invite.task.twitter.title":"إعادة تغريد إلى X (تويتر)","invite.task.twitter.desc":"شارك تغريداتنا الرسمية على حساب X (Twitter) الخاص بك","invite.task.youtube.title":"تابع قناتنا على اليوتيوب","invite.task.youtube.desc":"اشترك وتابع قناتنا الرسمية على اليوتيوب","invite.task.telegram.title":"انضم إلى مجموعة تيليجرام","invite.task.telegram.desc":"انضم إلى مجموعة مجتمع Telegram الرسمية لدينا","invite.task.discord.title":"انضم إلى خادم Discord","invite.task.discord.desc":"انضم إلى خادم مجتمع Discord الخاص بنا",message:"-","layouts.usermenu.dialog.title":"معلومات","layouts.usermenu.dialog.content":"هل أنت متأكد أنك تريد تسجيل الخروج؟","layouts.userLayout.title":"ابحث عن الحقيقة في حالة عدم اليقين","dashboard.indicator.boundary.message":"Note: The indicator script only computes plots + buy/sell signals. Position sizing, risk, scaling, fees/slippage belong to execution config.","dashboard.indicator.boundary.indicatorRule":"Keep the script to buy/sell only (and set df['buy']/df['sell']). Do NOT implement position management, TP/SL, scaling in the script.","dashboard.indicator.boundary.backtestRule":"Rule: If a bar has a main signal (buy/sell → open/close/reverse), scaling in/out is skipped on the same bar.","dashboard.indicator.guide.title":"Python Indicator & Strategy Development Guide","dashboard.indicator.guide.intro":"This platform supports writing custom technical indicators and trading signals using Python. The system includes built-in pandas and numpy data analysis libraries. You can use standard DataFrame operations to process K-line data and draw charts or mark buy/sell signals.","dashboard.indicator.guide.section1.title":"1. Runtime Environment & Predefined Variables","dashboard.indicator.guide.section1.env":"Your code runs in a browser-based Python environment (Pyodide).","dashboard.indicator.guide.section1.libs":"Pre-installed Libraries","dashboard.indicator.guide.section1.libsDesc":"The following libraries are imported by default, no need to import again:","dashboard.indicator.guide.section1.libsList":"pandas (pd), numpy (np), math, json","dashboard.indicator.guide.section1.data":"Input Data: df","dashboard.indicator.guide.section1.dataDesc":"The system automatically converts current K-line data into a Pandas DataFrame object, variable name is df.","dashboard.indicator.guide.section1.dataColumns":"df contains the following columns (all float type):","dashboard.indicator.guide.section1.dataColumnsList":"time (timestamp, seconds), open, high, low, close, volume","dashboard.indicator.guide.section1.dataNote":"Data index is arranged from old to new (0 is the earliest data, last row is the latest data).","dashboard.indicator.guide.section1.dataIndex":"Important: df index is timestamp (DatetimeIndex), please preserve the index, avoid using .values which loses the index.","dashboard.indicator.guide.section2.title":"2. Parameter Definition","dashboard.indicator.guide.section2.desc":"You can define variables as parameters at the beginning of your code. The system will try to parse statements like variable = value as adjustable parameters.","dashboard.indicator.guide.section2.example":"Parameter Example","dashboard.indicator.guide.section2.exampleCode":"span = 20 or multiplier = 2.0","dashboard.indicator.guide.section3.title":"3. Backtest Signal Setup (Important!)","dashboard.indicator.guide.section3.desc":"If you want your indicator to support backtesting, you must set the following two columns in your code:","dashboard.indicator.guide.section3.backtestRequired":"Required for Backtesting:","dashboard.indicator.guide.section3.backtestBuySignal":"df['buy_signal'] - Boolean Series, True indicates buy signal","dashboard.indicator.guide.section3.backtestSellSignal":"df['sell_signal'] - Boolean Series, True indicates sell signal","dashboard.indicator.guide.section3.backtestExample":"Example:","dashboard.indicator.guide.section3.backtestExampleCode":"df['buy_signal'] = condition_buy
df['sell_signal'] = condition_sell","dashboard.indicator.guide.section3.backtestNote":"Note: Even if you only set output.signals for chart display, you must set these two columns to enable backtesting.","dashboard.indicator.guide.section4.title":"4. Output Requirements: output","dashboard.indicator.guide.section4.desc":"At the end of code execution, you must define a dictionary named output to tell the chart how to display results.","dashboard.indicator.guide.section4.fields":"The output dictionary contains the following fields:","dashboard.indicator.guide.section4.plots":"plots - For drawing lines (e.g., moving averages, RSI)","dashboard.indicator.guide.section4.signals":"signals - For marking buy/sell signals (e.g., arrows, labels)","dashboard.indicator.guide.section4.name":"name - Indicator name (optional)","dashboard.indicator.guide.section4.calculatedVars":"calculatedVars - Calculated variables (optional, for displaying additional information)","dashboard.indicator.guide.section5.title":"5. Plot Configuration (Plots)","dashboard.indicator.guide.section5.desc":"Each object in the plots list represents a line.","dashboard.indicator.guide.section5.table.field":"Field","dashboard.indicator.guide.section5.table.type":"Type","dashboard.indicator.guide.section5.table.required":"Required","dashboard.indicator.guide.section5.table.requiredYes":"Yes","dashboard.indicator.guide.section5.table.requiredNo":"No","dashboard.indicator.guide.section5.table.desc":"Description","dashboard.indicator.guide.section5.table.name":"The name of the indicator line, displayed in the legend","dashboard.indicator.guide.section5.table.data":"Data list, length must match the number of rows in df. Recommended to use series.tolist()","dashboard.indicator.guide.section5.table.color":"Line color (Hex format, e.g. '#ff0000'). If not filled, the system will automatically assign","dashboard.indicator.guide.section5.table.typeDesc":"Chart type, default is 'line'","dashboard.indicator.guide.section5.table.overlay":"Important. True means display on main chart (with K-line), False means display on sub-chart (independent area)","dashboard.indicator.guide.section5.example":"Example: Draw Simple Moving Average (SMA)","dashboard.indicator.guide.section5.exampleCalc":"Calculate SMA","dashboard.indicator.guide.section5.exampleOutput":"Construct Output","dashboard.indicator.guide.section5.exampleOverlay":"Display on main chart","dashboard.indicator.guide.section6.title":"6. Signal Markers (Signals)","dashboard.indicator.guide.section6.desc":"signals are used to mark buy/sell points on specific K-lines through icons or text. Note: This is only for chart display. The backtest system uses df['buy_signal'] and df['sell_signal'].","dashboard.indicator.guide.section6.table.type":"Signal type: 'buy' (buy, marked below K-line) or 'sell' (sell, marked above K-line)","dashboard.indicator.guide.section6.table.data":"Signal data list. Fill price value at signal positions, fill None (or np.nan) at non-signal positions","dashboard.indicator.guide.section6.table.text":'Text displayed on the label (e.g. "B", "S", "Buy", "Sell")',"dashboard.indicator.guide.section6.table.color":"Marker color","dashboard.indicator.guide.section6.hint":"The system automatically handles positioning.","dashboard.indicator.guide.section6.buy":"Markers will be automatically positioned below the Low of the current K-line","dashboard.indicator.guide.section6.sell":"Markers will be automatically positioned above the High of the current K-line","dashboard.indicator.guide.section6.example":"Example: Draw Buy/Sell Signals","dashboard.indicator.guide.section6.exampleInit":"Initialize signal list, fill all with None","dashboard.indicator.guide.section6.exampleLogic":"Simple logic: mark buy when close price is greater than open price","dashboard.indicator.guide.section6.exampleNote":"In actual logic, please use loops or vectorized operations","dashboard.indicator.guide.section6.examplePrice":"Record price","dashboard.indicator.guide.section6.exampleText":"Buy","dashboard.indicator.guide.section7.title":"7. Complete Code Examples","dashboard.indicator.guide.section7.exampleA":"Example A: Dual EMA Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleACode":'# 1. Calculate indicators
df[\'ema_fast\'] = df[\'close\'].ewm(span=5, adjust=False).mean()
df[\'ema_slow\'] = df[\'close\'].ewm(span=13, adjust=False).mean()

# 2. Calculate crossover signals
cross_up = (df[\'ema_fast\'] > df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) <= df[\'ema_slow\'].shift(1))
cross_down = (df[\'ema_fast\'] < df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) >= df[\'ema_slow\'].shift(1))

# 3. 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = cross_up
df[\'close_long\'] = cross_down
df[\'open_short\'] = cross_down
df[\'close_short\'] = cross_up

# 4. Generate signal data for chart display
buy_signals = [df[\'low\'].iloc[i] * 0.995 if cross_up.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if cross_down.iloc[i] else None for i in range(len(df))]

# 5. Build output
output = {
"name": "Dual EMA Strategy",
"plots": [
{"name": "EMA 5", "data": df[\'ema_fast\'].tolist(), "color": "#FF6B6B", "overlay": True},
{"name": "EMA 13", "data": df[\'ema_slow\'].tolist(), "color": "#4ECDC4", "overlay": True}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section7.exampleB":"Example B: Bollinger Bands - Chart Display Only","dashboard.indicator.guide.section7.exampleBCode":'# Calculate Bollinger Bands (chart display only, no backtesting)
length = 20
mult = 2.0
df[\'sma\'] = df[\'close\'].rolling(length).mean()
df[\'std\'] = df[\'close\'].rolling(length).std()
df[\'upper\'] = df[\'sma\'] + mult * df[\'std\']
df[\'lower\'] = df[\'sma\'] - mult * df[\'std\']

output = {
"name": "Bollinger Bands",
"plots": [
{"name": "Upper", "data": df[\'upper\'].tolist(), "color": "#FF5252", "overlay": True},
{"name": "Middle", "data": df[\'sma\'].tolist(), "color": "#2196F3", "overlay": True},
{"name": "Lower", "data": df[\'lower\'].tolist(), "color": "#00E676", "overlay": True}
]
}',"dashboard.indicator.guide.section7.exampleC":"Example C: RSI Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleCCode":'# Calculate RSI
delta = df[\'close\'].diff()
up = delta.clip(lower=0)
down = -1 * delta.clip(upper=0)
ema_up = up.ewm(com=13, adjust=False).mean()
ema_down = down.ewm(com=13, adjust=False).mean()
rs = ema_up / ema_down
df[\'rsi\'] = 100 - (100 / (1 + rs))

# Generate trading signals
buy_condition = df[\'rsi\'] < 30 # Oversold buy
sell_condition = df[\'rsi\'] > 70 # Overbought sell

# 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = buy_condition
df[\'close_long\'] = sell_condition
df[\'open_short\'] = sell_condition
df[\'close_short\'] = buy_condition

# Generate chart signals
buy_signals = [df[\'low\'].iloc[i] * 0.995 if buy_condition.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if sell_condition.iloc[i] else None for i in range(len(df))]

output = {
"name": "RSI Strategy",
"plots": [
{"name": "RSI", "data": df[\'rsi\'].tolist(), "color": "#9C27B0", "overlay": False},
{"name": "Overbought", "data": [70] * len(df), "color": "#FF5252", "style": "dashed", "overlay": False},
{"name": "Oversold", "data": [30] * len(df), "color": "#00E676", "style": "dashed", "overlay": False}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section6.param":"Parameters","dashboard.indicator.guide.section6.calc":"Calculate","dashboard.indicator.guide.section6.output":"Output","dashboard.indicator.guide.section6.generate":"Generate signal data (initialize with None)","dashboard.indicator.guide.section6.subchart":"Display on sub-chart","dashboard.indicator.guide.section8.title":"8. Frequently Asked Questions (FAQ)","dashboard.indicator.guide.section8.q1":"Q: Why can't my indicator be backtested?","dashboard.indicator.guide.section8.a1":"A: The backtest system requires NEW signal columns: df['open_long'], df['close_long'], df['open_short'], df['close_short'] (boolean). Even if you set output.signals for chart display, you must set these columns to enable backtesting.","dashboard.indicator.guide.section8.q2":"Q: Data length mismatch?","dashboard.indicator.guide.section8.a2":"A: The data list in plots and signals must have exactly the same length as the K-line data. If you use df['xxx'].tolist(), there is usually no problem.","dashboard.indicator.guide.section8.q3":"Q: How to handle NaN (empty values)?","dashboard.indicator.guide.section8.a3":"A: Pandas calculations (such as rolling mean) will produce NaN at the beginning. The system will automatically convert NaN to null for chart rendering. You don't need to manually clean it, but if you need specific logic, you can use df.fillna(0) or other methods.","dashboard.indicator.guide.section8.q4":"Q: Index mismatch causing all signals to be NaN?","dashboard.indicator.guide.section8.a4":"A: Please ensure you preserve the original df index (timestamp). Avoid using .values to create new Series. Use columns directly like df['close'] for operations.","dashboard.indicator.guide.section8.q5":"Q: Can I use third-party network libraries?","dashboard.indicator.guide.section8.a5":"A: No. The runtime environment is a browser sandbox and cannot use libraries like requests to request external APIs, nor can it install additional pip packages. Limited to built-in libraries such as pandas, numpy, math, json.","dashboard.indicator.guide.section8.q6":"Q: How to debug code?","dashboard.indicator.guide.section8.a6":"A: If the chart does not display indicators, it is usually because the Python code has an error. Please check for syntax errors or array index out of bounds. It is recommended to debug the algorithm logic in a local Python environment first, then copy it in.","dashboard.indicator.guide.section8.q7":"Q: Backtest shows 0 signals?","dashboard.indicator.guide.section8.a7":"A: Please check the data type of df['open_long']/df['close_long']/df['open_short']/df['close_short']. They should be boolean (True/False), not numeric. Use condition.fillna(False).astype(bool) to ensure correct type.","dashboard.indicator.backtest.commissionHint":"Charged on notional value (incl. leverage) per trade; both entry & exit are deducted from balance.","dashboard.indicator.backtest.historyTitle":"Backtest History","dashboard.indicator.backtest.historyRefresh":"Refresh","dashboard.indicator.backtest.historyView":"View","dashboard.indicator.backtest.historyNoData":"No backtest history","dashboard.indicator.backtest.historyUseCurrent":"Only current symbol/timeframe","dashboard.indicator.backtest.historyFilterSymbol":"Symbol","dashboard.indicator.backtest.historyFilterTimeframe":"Timeframe","dashboard.indicator.backtest.historyApply":"Apply filters","dashboard.indicator.backtest.historyAIAnalyze":"AI Analyze","dashboard.indicator.backtest.historyAIAnalyzeTitle":"AI Suggestions","dashboard.indicator.backtest.historyNoAIResult":"No AI analysis result","dashboard.indicator.backtest.historyRunId":"Run ID","dashboard.indicator.backtest.historyCreatedAt":"Time","dashboard.indicator.backtest.historyRange":"Range","dashboard.indicator.backtest.historyStatus":"Status","dashboard.indicator.backtest.historyStatusSuccess":"Success","dashboard.indicator.backtest.historyStatusFailed":"Failed","dashboard.indicator.backtest.historyActions":"Actions","dashboard.indicator.backtest.hint.entryPctMax":"Max entry: {maxPct}% (reserve budget for future scale-ins)","trading-assistant.exchange.ipWhitelistTip":"Please add the following IPs to the whitelist in your exchange API settings:","signal-robot.title":"Signal Robot Console","signal-robot.createBot":"Create New Bot","signal-robot.search.nameOrSymbol":"Name/Symbol","signal-robot.search.placeholder":"Search bot name or symbol","signal-robot.search.status":"Status","signal-robot.search.statusAll":"All","signal-robot.search.statusRunning":"Running","signal-robot.search.statusPaused":"Paused","signal-robot.search.query":"Query","signal-robot.search.reset":"Reset","signal-robot.table.botName":"Bot Name","signal-robot.table.symbolTimeframe":"Symbol/Timeframe","signal-robot.table.triggerStrategy":"Trigger Strategy","signal-robot.table.notificationChannels":"Notification Channels","signal-robot.table.status":"Status","signal-robot.table.action":"Action","signal-robot.table.triggerConditions":"{count} trigger conditions","signal-robot.table.monitoring":"Monitoring","signal-robot.table.paused":"Paused","signal-robot.table.edit":"Edit","signal-robot.table.pause":"Pause","signal-robot.table.start":"Start","signal-robot.table.delete":"Delete","signal-robot.table.deleteConfirm":"Are you sure you want to delete this bot?","signal-robot.table.deleteSuccess":"Deleted successfully","signal-robot.table.startSuccess":"Bot started","signal-robot.table.pauseSuccess":"Bot paused","signal-robot.channel.telegram":"Telegram","signal-robot.channel.discord":"Discord","signal-robot.channel.email":"Email","signal-robot.channel.webhook":"Webhook","signal-robot.channel.browser":"Browser Push","signal-robot.modal.createTitle":"Create New Signal Robot","signal-robot.modal.editTitle":"Edit Signal Robot","signal-robot.modal.step.basic":"Basic Settings","signal-robot.modal.step.entry":"Entry Strategy","signal-robot.modal.step.position":"Position Management","signal-robot.modal.step.risk":"Risk Control","signal-robot.modal.step.notify":"Notification Config","signal-robot.modal.prev":"Previous","signal-robot.modal.next":"Next","signal-robot.modal.preview":"Preview Backtest","signal-robot.modal.complete":"Complete & Run","signal-robot.modal.saveSuccess":"Saved successfully","signal-robot.modal.previewDeveloping":"Preview feature is under development...","signal-robot.modal.basicInfoRequired":"Please complete basic information","signal-robot.basic.alert":"Set basic information for the bot","signal-robot.basic.title":"Basic Information","signal-robot.basic.botName":"Bot Name","signal-robot.basic.botNamePlaceholder":"e.g.: BTC SuperTrend Strategy","signal-robot.basic.symbol":"Trading Pair","signal-robot.basic.symbolPlaceholder":"Select from watchlist","signal-robot.basic.noWatchlist":"No watchlist items, please add in market page first","signal-robot.basic.timeframe":"K-Line Period","signal-robot.basic.timeframe15m":"15 Minutes","signal-robot.basic.timeframe30m":"30 Minutes","signal-robot.basic.timeframe1h":"1 Hour","signal-robot.basic.timeframe4h":"4 Hours","signal-robot.basic.timeframe1d":"1 Day","signal-robot.basic.autoNameSuggestion":"{symbol} Signal Robot","signal-robot.entry.alert":"Trigger entry signal when all conditions below are met","signal-robot.entry.condition":"Condition {index}","signal-robot.entry.indicator":"Indicator","signal-robot.entry.indicatorSupertrend":"SuperTrend","signal-robot.entry.indicatorEma":"EMA (Exponential Moving Average)","signal-robot.entry.indicatorRsi":"RSI (Relative Strength Index)","signal-robot.entry.indicatorMacd":"MACD","signal-robot.entry.indicatorBollinger":"Bollinger Bands","signal-robot.entry.atrPeriod":"ATR Period","signal-robot.entry.multiplier":"Multiplier","signal-robot.entry.triggerSignal":"Trigger Signal","signal-robot.entry.signalTrendBullish":"Trend Bullish","signal-robot.entry.signalTrendBearish":"Trend Bearish","signal-robot.entry.signalIsUptrend":"Is Uptrend","signal-robot.entry.signalIsDowntrend":"Is Downtrend","signal-robot.entry.period":"Period","signal-robot.entry.compareCondition":"Compare Condition","signal-robot.entry.priceAbove":"Price > EMA (Price Above)","signal-robot.entry.priceBelow":"Price < EMA (Price Below)","signal-robot.entry.crossUp":"Price Crosses Above EMA (Golden Cross)","signal-robot.entry.crossDown":"Price Crosses Below EMA (Death Cross)","signal-robot.entry.compare":"Compare","signal-robot.entry.greaterThan":"Greater Than","signal-robot.entry.lessThan":"Less Than","signal-robot.entry.crossUpShort":"Cross Up","signal-robot.entry.crossDownShort":"Cross Down","signal-robot.entry.threshold":"Threshold","signal-robot.entry.selectIndicator":"Please select an indicator to configure parameters","signal-robot.entry.addCondition":"Add Condition","signal-robot.position.alert":"Configure initial position size, leverage and pyramiding rules","signal-robot.position.basicTitle":"Basic Position Management","signal-robot.position.initialSize":"Initial Size (Capital %)","signal-robot.position.initialSizeHint":"Recommended 5% - 20%","signal-robot.position.leverage":"Leverage","signal-robot.position.leverageHint":"Please ensure your exchange account supports this leverage","signal-robot.position.maxPyramiding":"Max Pyramiding Times","signal-robot.position.maxPyramidingHint":"0 means no pyramiding","signal-robot.position.pyramidingTitle":"Pyramiding Rules","signal-robot.position.pyramidingEnabled":"Enabled","signal-robot.position.pyramidingDisabled":"Disabled","signal-robot.position.pyramidingCondition":"Pyramiding Trigger Condition","signal-robot.position.priceRisePct":"Price Rises (Long) / Falls (Short)","signal-robot.position.profitPct":"Profit Reaches","signal-robot.position.triggerThreshold":"Trigger Threshold (%)","signal-robot.position.triggerThresholdHint":"e.g. 3%: add position once every 3% rise","signal-robot.position.addSize":"Single Add Size (Capital %)","signal-robot.position.pyramidingDisabledHint":"Pyramiding disabled, only initial position will be executed","signal-robot.risk.alert":"Configure take profit, stop loss and exit rules","signal-robot.risk.stopLossTitle":"Stop Loss","signal-robot.risk.stopLossEnabled":"Enabled","signal-robot.risk.stopLossDisabled":"Disabled","signal-robot.risk.stopLossType":"Stop Loss Type","signal-robot.risk.stopLossFixedPct":"Fixed Percentage","signal-robot.risk.stopLossAtrMultiplier":"ATR Multiplier","signal-robot.risk.stopLossValue":"Value","signal-robot.risk.stopLossFixedHint":"e.g. 2%: stop loss when loss reaches 2%","signal-robot.risk.stopLossAtrHint":"e.g. 2.0: stop loss when price touches ATR*2.0","signal-robot.risk.stopLossDisabledHint":"Stop loss disabled (high risk)","signal-robot.risk.trailingStopTitle":"Trailing Stop","signal-robot.risk.activationProfit":"Activation Profit (%)","signal-robot.risk.activationProfitHint":"Start trailing when profit reaches this level","signal-robot.risk.callbackPct":"Callback (%)","signal-robot.risk.callbackPctHint":"Trigger take profit when price falls from peak by this percentage","signal-robot.risk.trailingStopDisabledHint":"Trailing stop disabled","signal-robot.risk.otherExitTitle":"Other Exit Rules","signal-robot.risk.signalExit":"Allow Signal Exit","signal-robot.risk.signalExitHint":"Close position immediately when reverse signal appears (e.g. close long when short signal appears)","signal-robot.notify.alert":"Configure notification methods when signal is triggered","signal-robot.notify.channelTitle":"Notification Channels","signal-robot.notify.discordWebhook":"Discord Webhook","signal-robot.notify.genericWebhook":"Generic Webhook","signal-robot.notify.webhookUrl":"Webhook URL","signal-robot.notify.webhookUrlPlaceholder":"https://example.com/webhook","signal-robot.notify.discordUrl":"Discord URL","signal-robot.notify.discordUrlPlaceholder":"https://discord.com/api/webhooks/...","signal-robot.operator.greaterThan":"Greater Than","signal-robot.operator.lessThan":"Less Than","signal-robot.operator.equal":"Equal","signal-robot.operator.goldenCross":"Golden Cross","signal-robot.operator.deathCross":"Death Cross","signal-robot.operator.increaseBy":"Increase By","signal-robot.operator.decreaseBy":"Decrease By","signal-robot.indicator.price":"Price","signal-robot.indicator.rsi":"RSI","signal-robot.indicator.kdjK":"KDJ(K)","signal-robot.indicator.kdjJ":"KDJ(J)","signal-robot.indicator.macd":"MACD","signal-robot.indicator.macdHist":"MACD Histogram","signal-robot.indicator.bollingerUp":"Bollinger Upper","signal-robot.indicator.bollingerLow":"Bollinger Lower","signal-robot.indicator.volume":"Volume","signal-robot.indicator.changePct1h":"1H Change %","signal-robot.indicator.changePct24h":"24H Change %","signal-robot.indicator.signalLine":"Signal Line","settings.group.agent_memory":"الذاكرة/الانعكاس","settings.group.reflection_worker":"عامل التحقق التلقائي للانعكاس","settings.field.ENABLE_AGENT_MEMORY":"تمكين ذاكرة الوكيل","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"تمكين الاسترجاع المتجهي (محلي)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"بُعد التضمين","settings.field.AGENT_MEMORY_TOP_K":"عدد الاسترجاع Top-K","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"حجم نافذة المرشحين","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"نصف عمر تلاشي الزمن (أيام)","settings.field.AGENT_MEMORY_W_SIM":"وزن التشابه","settings.field.AGENT_MEMORY_W_RECENCY":"وزن الحداثة","settings.field.AGENT_MEMORY_W_RETURNS":"وزن العائد","settings.field.ENABLE_REFLECTION_WORKER":"تمكين التحقق التلقائي","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"فاصل التحقق (ثانية)","profile.notifications.title":"إعدادات الإشعارات","profile.notifications.hint":"قم بتكوين طرق الإشعارات الافتراضية، سيتم استخدامها تلقائياً عند إنشاء مراقبة الأصول والتنبيهات","profile.notifications.defaultChannels":"قنوات الإشعارات الافتراضية","profile.notifications.browser":"إشعار داخل التطبيق","profile.notifications.email":"البريد الإلكتروني","profile.notifications.phone":"رسالة نصية","profile.notifications.telegramBotToken":"Telegram Bot Token","profile.notifications.telegramBotTokenPlaceholder":"أدخل Telegram Bot Token الخاص بك","profile.notifications.telegramBotTokenHint":"أنشئ بوت عبر @BotFather للحصول على Token","profile.notifications.telegramChatId":"Telegram Chat ID","profile.notifications.telegramPlaceholder":"أدخل Telegram Chat ID الخاص بك (مثال: 123456789)","profile.notifications.telegramHint":"أرسل /start إلى @userinfobot للحصول على Chat ID","profile.notifications.notifyEmail":"بريد الإشعارات","profile.notifications.emailPlaceholder":"عنوان البريد الإلكتروني لاستلام الإشعارات","profile.notifications.emailHint":"يستخدم بريد الحساب بشكل افتراضي، يمكنك تعيين بريد آخر","profile.notifications.phonePlaceholder":"أدخل رقم الهاتف (مثال: +966501234567)","profile.notifications.phoneHint":"يحتاج المسؤول إلى تكوين خدمة Twilio","profile.notifications.discordWebhook":"Discord Webhook","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"أنشئ Webhook في إعدادات خادم Discord","profile.notifications.webhookUrl":"Webhook URL","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"عنوان Webhook مخصص، يرسل الإشعارات عبر POST JSON","profile.notifications.webhookToken":"Webhook Token (اختياري)","profile.notifications.webhookTokenPlaceholder":"Bearer Token للتحقق من الطلب","profile.notifications.webhookTokenHint":"يُرسل كـ Authorization: Bearer Token إلى Webhook","profile.notifications.testBtn":"إرسال إشعار تجريبي","profile.notifications.saveSuccess":"تم حفظ إعدادات الإشعارات بنجاح","profile.notifications.selectChannel":"الرجاء اختيار قناة إشعار واحدة على الأقل","profile.notifications.fillTelegramToken":"الرجاء إدخال Telegram Bot Token","profile.notifications.fillTelegram":"الرجاء إدخال Telegram Chat ID","profile.notifications.fillEmail":"الرجاء إدخال بريد الإشعارات","profile.notifications.testSent":"تم إرسال الإشعار التجريبي، يرجى التحقق من قنوات الإشعارات"},f=(0,e.A)((0,e.A)({},p),y)}}]); \ No newline at end of file diff --git a/frontend/dist/js/lang-de-DE-legacy.015182dc.js b/frontend/dist/js/lang-de-DE-legacy.ddd1b59c.js similarity index 99% rename from frontend/dist/js/lang-de-DE-legacy.015182dc.js rename to frontend/dist/js/lang-de-DE-legacy.ddd1b59c.js index be6f533..e5de75f 100644 --- a/frontend/dist/js/lang-de-DE-legacy.015182dc.js +++ b/frontend/dist/js/lang-de-DE-legacy.ddd1b59c.js @@ -1 +1 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[879],{28071:function(e,a,t){t.d(a,{default:function(){return y}});var i=t(57888),n={items_per_page:"/ Seite",jump_to:"Gehe zu",jump_to_confirm:"bestätigen",page:"",prev_page:"Vorherige Seite",next_page:"Nächste Seite",prev_5:"5 Seiten zurück",next_5:"5 Seiten vor",prev_3:"3 Seiten zurück",next_3:"3 Seiten vor"},s=t(85505),r={today:"Heute",now:"Jetzt",backToToday:"Zurück zu Heute",ok:"OK",clear:"Zurücksetzen",month:"Monat",year:"Jahr",timeSelect:"Zeit wählen",dateSelect:"Datum wählen",monthSelect:"Wähle einen Monat",yearSelect:"Wähle ein Jahr",decadeSelect:"Wähle ein Jahrzehnt",yearFormat:"YYYY",dateFormat:"D.M.YYYY",dayFormat:"D",dateTimeFormat:"D.M.YYYY HH:mm:ss",monthBeforeYear:!0,previousMonth:"Vorheriger Monat (PageUp)",nextMonth:"Nächster Monat (PageDown)",previousYear:"Vorheriges Jahr (Ctrl + left)",nextYear:"Nächstes Jahr (Ctrl + right)",previousDecade:"Vorheriges Jahrzehnt",nextDecade:"Nächstes Jahrzehnt",previousCentury:"Vorheriges Jahrhundert",nextCentury:"Nächstes Jahrhundert"},o={placeholder:"Zeit auswählen"},d=o,l={lang:(0,s.A)({placeholder:"Datum auswählen",rangePlaceholder:["Startdatum","Enddatum"]},r),timePickerLocale:(0,s.A)({},d)},c=l,g=c,u={locale:"de",Pagination:n,DatePicker:c,TimePicker:d,Calendar:g,Table:{filterTitle:"Filter-Menü",filterConfirm:"OK",filterReset:"Zurücksetzen",selectAll:"Selektiere Alle",selectInvert:"Selektion Invertieren"},Modal:{okText:"OK",cancelText:"Abbrechen",justOkText:"OK"},Popconfirm:{okText:"OK",cancelText:"Abbrechen"},Transfer:{searchPlaceholder:"Suchen",itemUnit:"Eintrag",itemsUnit:"Einträge"},Upload:{uploading:"Hochladen...",removeFile:"Datei entfernen",uploadError:"Fehler beim Hochladen",previewFile:"Dateivorschau",downloadFile:"Download-Datei"},Empty:{description:"Keine Daten"}},h=u,b=t(77853),m=t.n(b),f={antLocale:h,momentName:"de",momentLocale:m()},p={submit:"Senden",save:"speichern","submit.ok":"Übermittlung erfolgreich","save.ok":"Erfolgreich gespeichert","menu.welcome":"Willkommen","menu.home":"Startseite","menu.dashboard":"Armaturenbrett","menu.dashboard.indicator":"Indikatorenanalyse","menu.dashboard.community":"Indikatorgemeinschaft","menu.dashboard.analysis":"KI-Analyse","menu.dashboard.tradingAssistant":"Handelsassistent","menu.dashboard.aiTradingAssistant":"KI-Handelsassistent","menu.dashboard.signalRobot":"Signal-Roboter","menu.dashboard.monitor":"Überwachungsseite","menu.dashboard.workplace":"Werkbank","menu.form":"Formularseite","menu.form.basic-form":"Grundform","menu.form.step-form":"Schritt-für-Schritt-Formular","menu.form.step-form.info":"Schritt-für-Schritt-Formular (Übertragungsinformationen ausfüllen)","menu.form.step-form.confirm":"Schritt-für-Schritt-Formular (Übertragungsinformationen bestätigen)","menu.form.step-form.result":"Schritt-für-Schritt-Formular (vollständig)","menu.form.advanced-form":"Erweiterte Formulare","menu.list":"Listenseite","menu.list.table-list":"Anfrageformular","menu.list.basic-list":"Standardliste","menu.list.card-list":"Kartenliste","menu.list.search-list":"Suchliste","menu.list.search-list.articles":"Suchliste (Artikel)","menu.list.search-list.projects":"Suchliste (Projekt)","menu.list.search-list.applications":"Suchliste (App)","menu.profile":"Detailseite","menu.profile.basic":"Grundlegende Detailseite","menu.profile.advanced":"Erweiterte Detailseite","menu.result":"Ergebnisseite","menu.result.success":"Erfolgsseite","menu.result.fail":"Fehlerseite","menu.exception":"Ausnahmeseite","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"Fehler auslösen","menu.account":"Persönliche Seite","menu.account.center":"Persönliches Zentrum","menu.account.settings":"persönliche Einstellungen","menu.account.trigger":"Triggerfehler","menu.account.logout":"Abmelden","menu.wallet":"meine Brieftasche","menu.docs":"Dokumentenzentrum","menu.docs.detail":"Dokumentdetails","menu.header.refreshPage":"Seite aktualisieren","menu.invite.friends":"Freunde einladen","app.setting.pagestyle":"allgemeine Stileinstellungen","app.setting.pagestyle.light":"Heller Menüstil","app.setting.pagestyle.dark":"Dunkler Menüstil","app.setting.pagestyle.realdark":"Dunkelmodus","app.setting.themecolor":"Themenfarbe","app.setting.navigationmode":"Navigationsmodus","app.setting.sidemenu.nav":"Seitenleistennavigation","app.setting.topmenu.nav":"Navigation in der oberen Leiste","app.setting.content-width":"Breite des Inhaltsbereichs","app.setting.content-width.tooltip":"Diese Einstellung ist nur wirksam, wenn [Navigation in der oberen Leiste]","app.setting.content-width.fixed":"Behoben","app.setting.content-width.fluid":"Streaming","app.setting.fixedheader":"Fester Header","app.setting.fixedheader.tooltip":"Bei festem Header konfigurierbar","app.setting.autoHideHeader":"Kopfzeile beim Scrollen ausblenden","app.setting.fixedsidebar":"Seitenmenü korrigiert","app.setting.sidemenu":"Seitenmenü-Layout","app.setting.topmenu":"Oberes Menülayout","app.setting.othersettings":"Andere Einstellungen","app.setting.weakmode":"Farbschwächemodus","app.setting.multitab":"Multi-Tab-Modus","app.setting.copy":"Einstellungen kopieren","app.setting.loading":"Thema wird geladen","app.setting.copyinfo":"Einstellungen erfolgreich kopieren src/config/defaultSettings.js","app.setting.copy.success":"Kopieren abgeschlossen","app.setting.copy.fail":"Der Kopiervorgang ist fehlgeschlagen","app.setting.theme.switching":"Wechselndes Thema!","app.setting.production.hint":"Die Konfigurationsleiste dient nur der Vorschau in der Entwicklungsumgebung und wird in der Produktionsumgebung nicht angezeigt. Bitte kopieren und ändern Sie die Konfigurationsdatei manuell.","app.setting.themecolor.daybreak":"Morgenblau (Standard)","app.setting.themecolor.dust":"Dämmerung","app.setting.themecolor.volcano":"Vulkan","app.setting.themecolor.sunset":"Sonnenuntergang","app.setting.themecolor.cyan":"Mingqing","app.setting.themecolor.green":"Auroragrün","app.setting.themecolor.geekblue":"Geek blau","app.setting.themecolor.purple":"Jiang Zi","app.setting.tooltip":"Seiteneinstellungen","user.login.userName":"Benutzername","user.login.password":"Passwort","user.login.username.placeholder":"Konto: Admin","user.login.password.placeholder":"Passwort: admin oder ant.design","user.login.message-invalid-credentials":"Die Anmeldung ist fehlgeschlagen. Bitte überprüfen Sie Ihre E-Mail-Adresse und Ihren Bestätigungscode","user.login.message-invalid-verification-code":"Fehler beim Bestätigungscode","user.login.tab-login-credentials":"Anmeldung mit Kontopasswort","user.login.tab-login-email":"E-Mail-Login","user.login.tab-login-mobile":"Anmeldung über die Mobiltelefonnummer","user.login.captcha.placeholder":"Bitte geben Sie den grafischen Bestätigungscode ein","user.login.mobile.placeholder":"Mobiltelefonnummer","user.login.mobile.verification-code.placeholder":"Bestätigungscode","user.login.email.placeholder":"Bitte geben Sie Ihre E-Mail-Adresse ein","user.login.email.verification-code.placeholder":"Bitte geben Sie den Bestätigungscode ein","user.login.email.sending":"Bestätigungscode wird gesendet...","user.login.email.send-success-title":"Tipps","user.login.email.send-success":"Der Bestätigungscode wurde erfolgreich gesendet. Bitte überprüfen Sie Ihre E-Mails","user.login.sms.send-success":"Der Bestätigungscode wurde erfolgreich gesendet. Bitte überprüfen Sie die Textnachricht","user.login.remember-me":"Automatische Anmeldung","user.login.forgot-password":"Passwort vergessen","user.login.sign-in-with":"Andere Anmeldemethoden","user.login.signup":"Registrieren Sie ein Konto","user.login.login":"Anmelden","user.register.register":"Registrieren","user.register.email.placeholder":"E-Mail","user.register.password.placeholder":"Bitte geben Sie mindestens 6 Zeichen ein. Bitte verwenden Sie keine Passwörter, die leicht zu erraten sind.","user.register.password.popover-message":"Bitte geben Sie mindestens 6 Zeichen ein. Bitte verwenden Sie keine Passwörter, die leicht zu erraten sind.","user.register.confirm-password.placeholder":"Passwort bestätigen","user.register.get-verification-code":"Holen Sie sich den Bestätigungscode","user.register.sign-in":"Melden Sie sich mit einem bestehenden Konto an","user.register-result.msg":"Ihr Konto: {email} Registrierung erfolgreich","user.register-result.activation-email":"Die Aktivierungs-E-Mail wurde an Ihr Postfach gesendet und ist 24 Stunden lang gültig. Bitte melden Sie sich umgehend bei Ihrem E-Mail-Konto an und klicken Sie auf den Link in der E-Mail, um Ihr Konto zu aktivieren.","user.register-result.back-home":"Zurück zur Startseite","user.register-result.view-mailbox":"Überprüfen Sie Ihr Postfach","user.email.required":"Bitte geben Sie Ihre E-Mail-Adresse ein!","user.email.wrong-format":"Das E-Mail-Adressformat ist falsch!","user.userName.required":"Bitte geben Sie Ihren Kontonamen oder Ihre E-Mail-Adresse ein","user.password.required":"Bitte geben Sie Ihr Passwort ein!","user.password.twice.msg":"Die doppelt eingegebenen Passwörter stimmen nicht überein!","user.password.strength.msg":"Das Passwort ist nicht sicher genug","user.password.strength.strong":"Stärke: Stark","user.password.strength.medium":"Stärke: Mittel","user.password.strength.low":"Stärke: gering","user.password.strength.short":"Stärke: zu kurz","user.confirm-password.required":"Bitte bestätigen Sie Ihr Passwort!","user.phone-number.required":"Bitte geben Sie die korrekte Mobiltelefonnummer ein","user.phone-number.wrong-format":"Das Format der Mobiltelefonnummer ist falsch!","user.verification-code.required":"Bitte geben Sie den Verifizierungscode ein!","user.captcha.required":"Bitte geben Sie den grafischen Verifizierungscode ein!","user.login.infos":"QuantDinger ist ein AI-Multi-Agent-Hilfstool für die Aktienanalyse und verfügt nicht über Qualifikationen als Wertpapieranlageberater. Alle Analyseergebnisse, Scores und Referenzmeinungen in der Plattform werden von KI automatisch auf Basis historischer Daten generiert und dienen ausschließlich der Ausbildung, Forschung und dem technischen Austausch und stellen keine Anlageberatung oder Entscheidungsgrundlage dar. Aktienanlagen bergen verschiedene Risiken wie Marktrisiko, Liquiditätsrisiko, politisches Risiko usw., die zu einem Kapitalverlust führen können. Benutzer sollten unabhängige Entscheidungen auf der Grundlage ihrer eigenen Risikotoleranz treffen, und jegliches Investitionsverhalten und alle Konsequenzen, die sich aus der Verwendung dieses Tools ergeben, sind vom Benutzer zu tragen. Der Markt ist riskant und Investitionen müssen vorsichtig sein.","user.login.tab-login-web3":"Web3-Anmeldung","user.login.web3.tip":"Signatur-Login mit Wallet","user.login.web3.connect":"Wallet verbinden und anmelden","user.login.web3.no-wallet":"Wallet nicht erkannt","user.login.web3.no-address":"Wallet-Adresse nicht erhalten","user.login.web3.nonce-failed":"Zufallszahl konnte nicht abgerufen werden","user.login.web3.verify-failed":"Die Signaturüberprüfung ist fehlgeschlagen","user.login.web3.success":"Anmeldung erfolgreich","user.login.web3.failed":"Die Wallet-Anmeldung ist fehlgeschlagen","nav.no_wallet":"Wallet nicht erkannt","nav.copy":"Kopieren","nav.copy_success":"Erfolgreich kopiert","user.login.oauth.google":"Melden Sie sich mit Google an","user.login.oauth.github":"Melden Sie sich mit GitHub an","user.login.oauth.loading":"Weiterleitung zur Autorisierungsseite...","user.login.oauth.failed":"Die OAuth-Anmeldung ist fehlgeschlagen","user.login.oauth.get-url-failed":"Der Autorisierungslink konnte nicht abgerufen werden","user.login.subtitle":"Gezielte quantitative Einblicke in globale Märkte","user.login.legal.title":"Haftungsausschluss","user.login.legal.view":"Rechtlichen Haftungsausschluss anzeigen","user.login.legal.collapse":"Haftungsausschluss einklappen","user.login.legal.agree":"Ich habe den Haftungsausschluss gelesen und stimme ihm zu","user.login.legal.required":"Bitte lesen und überprüfen Sie zunächst den rechtlichen Haftungsausschluss","user.login.legal.content":"QuantDinger ist ein AI-Multi-Agent-Hilfstool für die Aktienanalyse und verfügt nicht über Qualifikationen als Wertpapieranlageberater. Alle Analyseergebnisse, Bewertungen und Referenzmeinungen in der Plattform werden von KI automatisch auf Basis historischer Daten generiert und dienen ausschließlich der Ausbildung, Forschung und dem technischen Austausch und stellen keine Anlageberatung oder Entscheidungsgrundlage dar. Aktienanlagen bergen verschiedene Risiken wie Marktrisiko, Liquiditätsrisiko, politisches Risiko usw., die zu einem Kapitalverlust führen können. Benutzer sollten unabhängige Entscheidungen auf der Grundlage ihrer eigenen Risikotoleranz treffen, und jegliches Investitionsverhalten und alle Konsequenzen, die sich aus der Verwendung dieses Tools ergeben, sind vom Benutzer zu tragen. Der Markt ist riskant und Investitionen müssen vorsichtig sein.","user.login.privacy.title":"Datenschutzrichtlinie für Benutzer","user.login.privacy.view":"Datenschutzrichtlinie für Benutzer anzeigen","user.login.privacy.collapse":"Schließen Sie die Datenschutzbestimmungen für Benutzer","user.login.privacy.content":"Wir legen Wert auf Ihre Privatsphäre und Ihren Datenschutz. 1) Erfassungsumfang: Es werden nur die zur Umsetzung der Funktion erforderlichen Informationen (z. B. E-Mail, Mobiltelefonnummer, Vorwahl, Web3-Wallet-Adresse) sowie notwendige Protokolle und Geräteinformationen erfasst. 2) Verwendungszweck: Zur Kontoanmeldung und Sicherheitsüberprüfung, Bereitstellung von Servicefunktionen, Fehlerbehebung und Compliance-Anforderungen. 3) Speicherung und Sicherheit: Daten werden verschlüsselt und gespeichert, und es werden die erforderlichen Berechtigungen und Zugriffskontrollmaßnahmen ergriffen, um unbefugten Zugriff, Offenlegung oder Verlust zu verhindern. 4) Weitergabe an Dritte: Sofern dies nicht durch Gesetze und Vorschriften vorgeschrieben oder für die Erbringung von Dienstleistungen erforderlich ist, werden Ihre personenbezogenen Daten nicht an Dritte weitergegeben. Bei Einbindung von Diensten Dritter (z. B. Wallets, SMS-Dienstleister) erfolgt die Verarbeitung nur im für die Umsetzung der Funktion erforderlichen Mindestumfang. 5) Cookies/lokale Speicherung: werden für den Anmeldestatus und die notwendige Sitzungswartung verwendet (z. B. Token, PHPSESSID). Sie können sie im Browser löschen oder einschränken. 6) Persönlichkeitsrechte: Sie können Ihre Rechte auf Auskunft, Berichtigung, Löschung, Widerruf der Einwilligung usw. gemäß den Gesetzen und Vorschriften ausüben. 7) Änderungen und Hinweise: Wenn diese Bedingungen aktualisiert werden, werden sie gut sichtbar auf der Seite angezeigt. Durch die weitere Nutzung dieses Dienstes wird davon ausgegangen, dass Sie den aktualisierten Inhalt gelesen und ihm zugestimmt haben. Wenn Sie diesen Bedingungen oder deren Aktualisierungen nicht zustimmen, stellen Sie bitte die Nutzung des Dienstes ein und kontaktieren Sie uns.","account.basicInfo":"Grundlegende Informationen","account.id":"Benutzer-ID","account.username":"Benutzername","account.nickname":"Spitzname","account.email":"E-Mail","account.mobile":"Mobiltelefonnummer","account.web3address":"Wallet-Adresse","account.pid":"Referrer-ID","account.level":"Benutzerebene","account.money":"Gleichgewicht","account.qdtBalance":"QDT-Balance","account.score":"Punkte","account.createtime":"Anmeldezeit","account.inviteLink":"Einladungslink","account.recharge":"Aufladen","account.rechargeTip":"Bitte verwenden Sie WeChat oder Alipay, um den untenstehenden QR-Code zum Aufladen zu scannen.","account.qrCodePlaceholder":"QR-Code-Platzhalter (Emulation)","account.rechargeAmount":"Aufladebetrag","account.enterAmount":"Bitte geben Sie den Aufladebetrag ein","account.rechargeHint":"Mindesteinzahlungsbetrag: 1 QDT","account.confirmRecharge":"Bestätigen Sie das Aufladen","account.enterValidAmount":"Bitte geben Sie einen gültigen Aufladebetrag ein","account.rechargeSuccess":"Aufladen erfolgreich! {amount} QDT eingezahlt","account.settings.menuMap.basic":"Grundeinstellungen","account.settings.menuMap.security":"Sicherheitseinstellungen","account.settings.menuMap.notification":"Benachrichtigung über neue Nachrichten","account.settings.menuMap.moneyLog":"Details zum Fonds","account.moneyLog.empty":"Noch keine Fondsdetails","account.moneyLog.total":"Insgesamt {total} Datensätze","account.moneyLog.type.purchase":"Kaufindikator","account.moneyLog.type.recharge":"Aufladen","account.moneyLog.type.refund":"Rückerstattung","account.moneyLog.type.reward":"Belohnung","account.moneyLog.type.income":"Indikatoreinkommen","account.moneyLog.type.commission":"Bearbeitungsgebühr für die Plattform","wallet.balance":"QDT-Balance","wallet.recharge":"Aufladen","wallet.withdraw":"Bargeld abheben","wallet.filter":"Filtern","wallet.reset":"zurückgesetzt","wallet.totalRecharge":"Akkumulierte Aufladung","wallet.totalWithdraw":"Kumulierte Abhebungen","wallet.totalIncome":"Kumuliertes Einkommen","wallet.records":"Transaktionsaufzeichnungen und Fondsdetails","wallet.tradingRecords":"Transaktionsverlauf","wallet.moneyLog":"Details zum Fonds","wallet.rechargeTip":"Bitte verwenden Sie WeChat oder Alipay, um den untenstehenden QR-Code zum Aufladen zu scannen.","wallet.qrCodePlaceholder":"QR-Code-Platzhalter (Emulation)","wallet.rechargeAmount":"Aufladebetrag","wallet.enterAmount":"Bitte geben Sie den Aufladebetrag ein","wallet.rechargeHint":"Mindesteinzahlungsbetrag: 1 QDT","wallet.confirmRecharge":"Bestätigen Sie das Aufladen","wallet.enterValidAmount":"Bitte geben Sie einen gültigen Aufladebetrag ein","wallet.rechargeSuccess":"Aufladen erfolgreich! {amount} QDT eingezahlt","wallet.rechargeFailed":"Das Aufladen ist fehlgeschlagen","wallet.withdrawTip":"Bitte geben Sie den Auszahlungsbetrag und die Auszahlungsadresse ein","wallet.withdrawAmount":"Betrag abheben","wallet.enterWithdrawAmount":"Bitte geben Sie den Auszahlungsbetrag ein","wallet.withdrawHint":"Mindestauszahlungsbetrag: 1 QDT","wallet.withdrawAddress":"Auszahlungsadresse (optional)","wallet.enterWithdrawAddress":"Bitte geben Sie die Auszahlungsadresse ein","wallet.confirmWithdraw":"Auszahlung bestätigen","wallet.enterValidWithdrawAmount":"Bitte geben Sie einen gültigen Auszahlungsbetrag ein","wallet.insufficientBalance":"Unzureichendes Gleichgewicht","wallet.withdrawSuccess":"Auszahlung erfolgreich! {Betrag} QDT abgehoben","wallet.withdrawFailed":"Die Auszahlung ist fehlgeschlagen","wallet.noTradingRecords":"Noch kein Transaktionsdatensatz","wallet.noMoneyLog":"Noch keine Fondsdetails","wallet.loadTradingRecordsFailed":"Transaktionsdatensätze konnten nicht geladen werden","wallet.loadMoneyLogFailed":"Die Fondsdetails konnten nicht geladen werden","wallet.moneyLogTotal":"Insgesamt {total} Datensätze","wallet.moneyLogTypeTitle":"Typ","wallet.moneyLogType.all":"Alle Arten","wallet.table.time":"Zeit","wallet.table.type":"Typ","wallet.table.price":"Preis","wallet.table.amount":"Menge","wallet.table.money":"Betrag","wallet.table.balance":"Gleichgewicht","wallet.table.memo":"Bemerkungen","wallet.table.value":"Wert","wallet.table.profit":"Gewinn und Verlust","wallet.table.commission":"Bearbeitungsgebühr","wallet.table.total":"Insgesamt {total} Datensätze","wallet.tradeType.buy":"kaufen","wallet.tradeType.sell":"verkaufen","wallet.tradeType.liquidation":"Zwangsliquidation","wallet.tradeType.openLong":"Lange geöffnet","wallet.tradeType.addLong":"Gadot","wallet.tradeType.closeLong":"Pinduo","wallet.tradeType.closeLongStop":"Stop-Loss und Long","wallet.tradeType.closeLongProfit":"Nehmen Sie Gewinn mit und steigern Sie Ihr Level","wallet.tradeType.openShort":"Kurz öffnen","wallet.tradeType.addShort":"kurz hinzufügen","wallet.tradeType.closeShort":"leer","wallet.tradeType.closeShortStop":"Stop-Loss","wallet.tradeType.closeShortProfit":"Nehmen Sie den Gewinn mit und schließen Sie mit Leerverkäufen","wallet.moneyLogType.purchase":"Kaufindikator","wallet.moneyLogType.recharge":"Aufladen","wallet.moneyLogType.withdraw":"Bargeld abheben","wallet.moneyLogType.refund":"Rückerstattung","wallet.moneyLogType.reward":"Belohnung","wallet.moneyLogType.income":"Einkommen","wallet.moneyLogType.commission":"Bearbeitungsgebühr","wallet.web3Address.required":"Bitte geben Sie zuerst die Web3-Wallet-Adresse ein","wallet.web3Address.requiredDescription":"Vor dem Aufladen müssen Sie Ihre Web3-Wallet-Adresse verknüpfen, um eine Aufladung zu erhalten.","wallet.web3Address.placeholder":"Bitte geben Sie Ihre Web3-Wallet-Adresse ein (beginnend mit 0x)","wallet.web3Address.save":"Wallet-Adresse speichern","wallet.web3Address.saveSuccess":"Wallet-Adresse erfolgreich gespeichert","wallet.web3Address.saveFailed":"Wallet-Adresse konnte nicht gespeichert werden","wallet.web3Address.invalidFormat":"Bitte geben Sie eine gültige Web3-Wallet-Adresse ein (Ethereum-Format: 42 Zeichen, beginnend mit 0x, oder TRC20-Format: 34 Zeichen, beginnend mit T)","wallet.selectCoin":"Währung auswählen","wallet.selectChain":"Auswahlkette","wallet.chain.eth":"ETH(ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"BSC","wallet.targetQdtAmount":"Der QDT-Betrag, den Sie einlösen möchten (optional)","wallet.targetQdtAmount.placeholder":"Bitte geben Sie die Menge an QDT ein, die Sie einlösen möchten, den aktuellen QDT-Preis: {price} USDT","wallet.targetQdtAmount.requiredUsdt":"Aufladung erforderlich: {amount} USDT","wallet.rechargeAddress":"Aufladeadresse","wallet.copyAddress":"Kopieren","wallet.copySuccess":"Erfolgreich kopieren!","wallet.copyFailed":"Der Kopiervorgang ist fehlgeschlagen. Bitte manuell kopieren","wallet.rechargeAddressHint":"Bitte stellen Sie sicher, dass Sie {chain} verwenden, um {coin} an diese Adresse einzuzahlen","wallet.qdtPrice.loading":"Laden...","wallet.rechargeTip.new":"Bitte wählen Sie die Währung und die Kette aus und scannen Sie dann den untenstehenden QR-Code zum Aufladen","wallet.exchangeRate":"1 QDT ≈ {rate} USDT","wallet.withdrawableAmount":"Verfügbarer Bargeldbetrag","wallet.totalBalance":"Gesamtsaldo","wallet.insufficientWithdrawable":"Der Bargeldbetrag, der abgehoben werden kann, reicht nicht aus. Der aktuelle Betrag, der abgehoben werden kann, ist: {amount} QDT","wallet.withdrawAddressRequired":"Bitte geben Sie die Auszahlungsadresse ein","wallet.withdrawAddressHint":"Bitte stellen Sie sicher, dass die Adresse korrekt ist. Nach dem Widerruf ist ein Widerruf nicht mehr möglich.","wallet.withdrawSubmitSuccess":"Auszahlungsantrag erfolgreich eingereicht, bitte warten Sie auf die Prüfung","menu.footer.contactUs":"Kontaktieren Sie uns","menu.footer.getSupport":"Holen Sie sich Unterstützung","menu.footer.socialAccounts":"soziales Konto","menu.footer.userAgreement":"Benutzervereinbarung","menu.footer.privacyPolicy":"Datenschutzrichtlinie","menu.footer.support":"Unterstützung","menu.footer.featureRequest":"Funktionsanfrage","menu.footer.email":"E-Mail","menu.footer.liveChat":"Live-Chat rund um die Uhr","dashboard.analysis.title":"Mehrdimensionale Analyse","dashboard.analysis.subtitle":"KI-gesteuerte umfassende Finanzanalyseplattform","dashboard.analysis.selectSymbol":"Wählen Sie den zugrunde liegenden Code aus oder geben Sie ihn ein","dashboard.analysis.selectModel":"Modell auswählen","dashboard.analysis.startAnalysis":"Analyse starten","dashboard.analysis.history":"Geschichte","dashboard.analysis.tab.overview":"umfassende Analyse","dashboard.analysis.tab.fundamental":"Grundlagen","dashboard.analysis.tab.technical":"Technologie","dashboard.analysis.tab.news":"Nachrichten","dashboard.analysis.tab.sentiment":"Emotionen","dashboard.analysis.tab.risk":"Risiko","dashboard.analysis.tab.debate":"Die Lang-Kurz-Debatte","dashboard.analysis.tab.decision":"endgültige Entscheidung","dashboard.analysis.empty.selectSymbol":"Wählen Sie ein Ziel aus, um die Analyse zu starten","dashboard.analysis.empty.selectSymbolDesc":"Wählen Sie aus der selbstgewählten Aktienliste aus oder geben Sie den zugrunde liegenden Code ein, um einen mehrdimensionalen KI-Analysebericht zu erhalten","dashboard.analysis.empty.startAnalysis":"Klicken Sie auf die Schaltfläche „Analyse starten“, um eine mehrdimensionale Analyse durchzuführen","dashboard.analysis.empty.startAnalysisDesc":"Wir bieten Ihnen umfassende Analysen aus mehreren Dimensionen wie Fundamentaldaten, Technologie, Nachrichten, Stimmung und Risiko","dashboard.analysis.empty.noData":"Derzeit liegen keine {type}-Analysedaten vor. Bitte führen Sie zunächst eine umfassende Analyse durch","dashboard.analysis.empty.noWatchlist":"Derzeit gibt es keine selbstgewählten Aktien","dashboard.analysis.empty.noHistory":"Noch keine Geschichte","dashboard.analysis.empty.watchlistHint":"Derzeit sind keine selbstgewählten Aktien vorhanden, bitte zuerst","dashboard.analysis.empty.noDebateData":"Noch keine Debattendaten","dashboard.analysis.empty.noDecisionData":"Noch keine Entscheidungsdaten","dashboard.analysis.empty.selectAgent":"Bitte wählen Sie einen Agenten aus, um die Analyseergebnisse anzuzeigen","dashboard.analysis.loading.analyzing":"Analyse läuft, bitte warten...","dashboard.analysis.loading.fundamental":"Fundamentaldaten analysieren...","dashboard.analysis.loading.technical":"Analyse technischer Indikatoren...","dashboard.analysis.loading.news":"Nachrichtendaten werden analysiert...","dashboard.analysis.loading.sentiment":"Marktstimmung analysieren...","dashboard.analysis.loading.risk":"Risiko einschätzen...","dashboard.analysis.loading.debate":"Die Lang-Kurz-Debatte geht weiter...","dashboard.analysis.loading.decision":"Endgültige Entscheidung generieren...","dashboard.analysis.score.overall":"Gesamtbewertung","dashboard.analysis.score.recommendation":"Anlageberatung","dashboard.analysis.score.confidence":"Vertrauen","dashboard.analysis.dimension.fundamental":"Grundlagen","dashboard.analysis.dimension.technical":"Technologie","dashboard.analysis.dimension.news":"Nachrichten","dashboard.analysis.dimension.sentiment":"Emotionen","dashboard.analysis.dimension.risk":"Risiko","dashboard.analysis.card.dimensionScores":"Bewertungen für jede Dimension","dashboard.analysis.card.overviewReport":"Umfassender Analysebericht","dashboard.analysis.card.financialMetrics":"Finanzindikatoren","dashboard.analysis.card.fundamentalReport":"Fundamentalanalysebericht","dashboard.analysis.card.technicalIndicators":"Technische Indikatoren","dashboard.analysis.card.technicalReport":"Technischer Analysebericht","dashboard.analysis.card.newsList":"Verwandte Neuigkeiten","dashboard.analysis.card.newsReport":"Bericht zur Nachrichtenanalyse","dashboard.analysis.card.sentimentIndicators":"Stimmungsindikator","dashboard.analysis.card.sentimentReport":"Stimmungsanalysebericht","dashboard.analysis.card.riskMetrics":"Risikoindikatoren","dashboard.analysis.card.riskReport":"Risikobewertungsbericht","dashboard.analysis.card.bullView":"Bullische Sichtweise (Bull)","dashboard.analysis.card.bearView":"Bärische Sichtweise (Bär)","dashboard.analysis.card.researchConclusion":"Fazit des Forschers","dashboard.analysis.card.traderPlan":"Händlerplan","dashboard.analysis.card.riskDebate":"Debatte im Risikoausschuss","dashboard.analysis.card.finalDecision":"Endgültige Entscheidung","dashboard.analysis.card.tradePlanDetail":"Einzelheiten zum Handelsplan","dashboard.analysis.tradingPlan.entry_price":"Eintrittspreis","dashboard.analysis.tradingPlan.position_size":"Positionsgröße","dashboard.analysis.tradingPlan.stop_loss":"Stop-Loss","dashboard.analysis.tradingPlan.take_profit":"Nehmen Sie Gewinn mit","dashboard.analysis.label.confidence":"Vertrauen","dashboard.analysis.label.keyPoints":"Kernpunkte","dashboard.analysis.label.riskWarning":"Risikowarnung","dashboard.analysis.risk.risky":"Riskant","dashboard.analysis.risk.neutral":"Neutraler Standpunkt (Neutral)","dashboard.analysis.risk.safe":"Konservative Sichtweise (sicher)","dashboard.analysis.risk.conclusion":"Fazit","dashboard.analysis.feature.fundamental":"Fundamentalanalyse","dashboard.analysis.feature.technical":"technische Analyse","dashboard.analysis.feature.news":"Nachrichtenanalyse","dashboard.analysis.feature.sentiment":"Stimmungsanalyse","dashboard.analysis.feature.risk":"Risikobewertung","dashboard.analysis.watchlist.title":"Meine Aktienauswahl","dashboard.analysis.watchlist.add":"hinzufügen","dashboard.analysis.watchlist.addStock":"Brühe hinzufügen","dashboard.analysis.modal.addStock.title":"Fügen Sie optionale Aktien hinzu","dashboard.analysis.modal.addStock.confirm":"Okay","dashboard.analysis.modal.addStock.cancel":"Abbrechen","dashboard.analysis.modal.addStock.market":"Markttyp","dashboard.analysis.modal.addStock.marketPlaceholder":"Bitte wählen Sie einen Markt aus","dashboard.analysis.modal.addStock.marketRequired":"Bitte wählen Sie den Markttyp aus","dashboard.analysis.modal.addStock.symbol":"Lagercode","dashboard.analysis.modal.addStock.symbolPlaceholder":"Zum Beispiel: AAPL, TSLA, GOOGL, 000001, BTC","dashboard.analysis.modal.addStock.symbolRequired":"Bitte Lagercode eingeben","dashboard.analysis.modal.addStock.searchPlaceholder":"Suchen Sie nach Zielcode oder Name","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"Suchen Sie den zugrunde liegenden Code oder geben Sie ihn ein (z. B. AAPL, BTC/USDT, EUR/USD).","dashboard.analysis.modal.addStock.searchOrInputHint":"Unterstützt die Suche nach Objekten in der Datenbank oder die direkte Eingabe des Codes (das System erhält den Namen automatisch).","dashboard.analysis.modal.addStock.search":"Suchen","dashboard.analysis.modal.addStock.searchResults":"Suchergebnisse","dashboard.analysis.modal.addStock.hotSymbols":"Beliebte Ziele","dashboard.analysis.modal.addStock.noHotSymbols":"Noch keine beliebten Ziele","dashboard.analysis.modal.addStock.selectedSymbol":"Ausgewählt","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"Bitte wählen Sie zunächst ein Ziel aus","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"Bitte wählen Sie ein Ziel aus oder geben Sie zuerst den Zielcode ein","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"Bitte geben Sie den Zielcode ein","dashboard.analysis.modal.addStock.pleaseSelectMarket":"Bitte wählen Sie zunächst den Markttyp aus","dashboard.analysis.modal.addStock.searchFailed":"Die Suche ist fehlgeschlagen. Bitte versuchen Sie es später erneut","dashboard.analysis.modal.addStock.noSearchResults":"Kein passendes Ziel gefunden","dashboard.analysis.modal.addStock.willAutoFetchName":"Das System erhält den Namen automatisch","dashboard.analysis.modal.addStock.addDirectly":"Direkt hinzufügen","dashboard.analysis.modal.addStock.nameWillBeFetched":"Der Name wird beim Hinzufügen automatisch übernommen","dashboard.analysis.market.USStock":"US-Aktien","dashboard.analysis.market.Crypto":"Kryptowährung","dashboard.analysis.market.Forex":"Forex","dashboard.analysis.market.Futures":"Futures","dashboard.analysis.modal.history.title":"Historische Analyseaufzeichnungen","dashboard.analysis.modal.history.viewResult":"Ergebnisse anzeigen","dashboard.analysis.modal.history.completeTime":"Fertigstellungszeit","dashboard.analysis.modal.history.error":"Fehler","dashboard.analysis.status.pending":"Ausstehend","dashboard.analysis.status.processing":"Verarbeitung","dashboard.analysis.status.completed":"Abgeschlossen","dashboard.analysis.status.failed":"gescheitert","dashboard.analysis.message.selectSymbol":"Bitte wählen Sie zuerst das Ziel aus","dashboard.analysis.message.taskCreated":"Die Analyseaufgabe wurde erstellt und wird im Hintergrund ausgeführt...","dashboard.analysis.message.analysisComplete":"Analyse abgeschlossen","dashboard.analysis.message.analysisCompleteCache":"Analyse abgeschlossen (unter Verwendung zwischengespeicherter Daten)","dashboard.analysis.message.analysisFailed":"Die Analyse ist fehlgeschlagen. Bitte versuchen Sie es später noch einmal","dashboard.analysis.message.addStockSuccess":"Erfolgreich hinzugefügt","dashboard.analysis.message.addStockFailed":"Das Hinzufügen ist fehlgeschlagen","dashboard.analysis.message.removeStockSuccess":"Erfolgreich entfernt","dashboard.analysis.message.removeStockFailed":"Das Entfernen ist fehlgeschlagen","dashboard.analysis.message.resumingAnalysis":"Analyseaufgabe wird fortgesetzt...","dashboard.analysis.message.deleteSuccess":"Erfolgreich gelöscht","dashboard.analysis.message.deleteFailed":"Löschen fehlgeschlagen","dashboard.analysis.modal.history.delete":"Löschen","dashboard.analysis.modal.history.deleteConfirm":"Möchten Sie diesen Analysedatensatz wirklich löschen?","dashboard.analysis.test":"Geschäft Nr. {no}, Gongzhuan Road","dashboard.analysis.introduce":"Beschreibung des Indikators","dashboard.analysis.total-sales":"Gesamtumsatz","dashboard.analysis.day-sales":"Durchschnittlicher Tagesumsatz¥","dashboard.analysis.visits":"Besuche","dashboard.analysis.visits-trend":"Verkehrstrends","dashboard.analysis.visits-ranking":"Ranking der Ladenbesuche","dashboard.analysis.day-visits":"Tägliche Besuche","dashboard.analysis.week":"Wöchentlich im Jahresvergleich","dashboard.analysis.day":"Jahr für Jahr","dashboard.analysis.payments":"Anzahl der Zahlungen","dashboard.analysis.conversion-rate":"Umrechnungskurs","dashboard.analysis.operational-effect":"Auswirkungen der betrieblichen Tätigkeit","dashboard.analysis.sales-trend":"Verkaufstrends","dashboard.analysis.sales-ranking":"Ranking der Filialverkäufe","dashboard.analysis.all-year":"Das ganze Jahr über","dashboard.analysis.all-month":"diesen Monat","dashboard.analysis.all-week":"diese Woche","dashboard.analysis.all-day":"heute","dashboard.analysis.search-users":"Anzahl der Suchbenutzer","dashboard.analysis.per-capita-search":"Suchanfragen pro Kopf","dashboard.analysis.online-top-search":"Beliebte Suchanfragen im Internet","dashboard.analysis.the-proportion-of-sales":"Anteil der Verkaufskategorie","dashboard.analysis.dropdown-option-one":"Operation eins","dashboard.analysis.dropdown-option-two":"Betrieb 2","dashboard.analysis.channel.all":"Alle Kanäle","dashboard.analysis.channel.online":"online","dashboard.analysis.channel.stores":"speichern","dashboard.analysis.sales":"Verkäufe","dashboard.analysis.traffic":"Passagierfluss","dashboard.analysis.table.rank":"Rangliste","dashboard.analysis.table.search-keyword":"Suchbegriffe suchen","dashboard.analysis.table.users":"Anzahl der Benutzer","dashboard.analysis.table.weekly-range":"Wöchentliche Erhöhung","dashboard.indicator.selectSymbol":"Wählen Sie den zugrunde liegenden Code aus oder geben Sie ihn ein","dashboard.indicator.emptyWatchlistHint":"Derzeit sind keine selbst ausgewählten Aktien vorhanden. Bitte fügen Sie diese zuerst hinzu","dashboard.indicator.hint.selectSymbol":"Bitte wählen Sie ein Ziel aus, um mit der Analyse zu beginnen","dashboard.indicator.hint.selectSymbolDesc":"Wählen Sie einen Aktiencode aus oder geben Sie ihn in das Suchfeld oben ein, um K-Line-Diagramme und technische Indikatoren anzuzeigen","dashboard.indicator.retry":"Versuchen Sie es erneut","dashboard.indicator.panel.title":"Technische Indikatoren","dashboard.indicator.panel.realtimeOn":"Deaktivieren Sie Echtzeit-Updates","dashboard.indicator.panel.realtimeOff":"Aktivieren Sie Echtzeit-Updates","dashboard.indicator.panel.themeLight":"Wechseln Sie zum dunklen Thema","dashboard.indicator.panel.themeDark":"Wechseln Sie zum Lichtthema","dashboard.indicator.section.enabled":"Aktiviert","dashboard.indicator.section.added":"Indikatoren, die ich hinzugefügt habe","dashboard.indicator.section.custom":"Von Ihnen selbst erstellte Indikatoren","dashboard.indicator.section.bought":"Indikatoren, die ich gekauft habe","dashboard.indicator.section.myCreated":"Von mir erstellte Indikatoren","dashboard.indicator.empty":"Es gibt noch keinen Indikator. Bitte fügen Sie zuerst einen Indikator hinzu oder erstellen Sie ihn","dashboard.indicator.buy":"Kaufindikator","dashboard.indicator.action.start":"beginnen","dashboard.indicator.action.stop":"Schließen","dashboard.indicator.action.edit":"Bearbeiten","dashboard.indicator.action.delete":"Löschen","dashboard.indicator.action.backtest":"Backtest","dashboard.indicator.status.normal":"normal","dashboard.indicator.status.normalPermanent":"Normal (dauerhaft gültig)","dashboard.indicator.status.expired":"Abgelaufen","dashboard.indicator.expiry.permanent":"Dauerhaft gültig","dashboard.indicator.expiry.noExpiry":"Keine Ablaufzeit","dashboard.indicator.expiry.expired":"Abgelaufen: {Datum}","dashboard.indicator.expiry.expiresOn":"Ablaufzeit: {Datum}","dashboard.indicator.delete.confirmTitle":"Bestätigen Sie den Löschvorgang","dashboard.indicator.delete.confirmContent":"Sind Sie sicher, dass Sie den Indikator „{name}“ löschen möchten? Dieser Vorgang ist irreversibel.","dashboard.indicator.delete.confirmOk":"Löschen","dashboard.indicator.delete.confirmCancel":"Abbrechen","dashboard.indicator.delete.success":"Erfolgreich löschen","dashboard.indicator.delete.failed":"Das Löschen ist fehlgeschlagen","dashboard.indicator.save.success":"Erfolgreich gespeichert","dashboard.indicator.save.failed":"Speichern fehlgeschlagen","dashboard.indicator.error.loadWatchlistFailed":"Optionale Bestände konnten nicht geladen werden","dashboard.indicator.error.chartNotReady":"Die Diagrammkomponente ist nicht initialisiert. Bitte wählen Sie zuerst das Ziel aus und warten Sie, bis das Diagramm geladen ist.","dashboard.indicator.error.chartMethodNotReady":"Die Diagrammkomponentenmethode ist nicht bereit. Bitte versuchen Sie es später erneut","dashboard.indicator.error.chartExecuteNotReady":"Die Ausführungsmethode der Diagrammkomponente ist nicht bereit. Bitte versuchen Sie es später erneut","dashboard.indicator.error.parseFailed":"Python-Code kann nicht analysiert werden","dashboard.indicator.error.parseFailedCheck":"Der Python-Code kann nicht analysiert werden. Bitte überprüfen Sie das Codeformat","dashboard.indicator.error.addIndicatorFailed":"Der Indikator konnte nicht hinzugefügt werden","dashboard.indicator.error.runIndicatorFailed":"Die Laufanzeige ist fehlgeschlagen","dashboard.indicator.error.pleaseLogin":"Bitte melden Sie sich zuerst an","dashboard.indicator.error.loadDataFailed":"Das Laden der Daten ist fehlgeschlagen","dashboard.indicator.error.loadDataFailedDesc":"Bitte überprüfen Sie die Netzwerkverbindung","dashboard.indicator.error.pythonEngineFailed":"Die Python-Engine konnte nicht geladen werden und die Indikatorfunktion ist möglicherweise nicht verfügbar.","dashboard.indicator.error.chartInitFailed":"Die Initialisierung des Diagramms ist fehlgeschlagen","dashboard.indicator.warning.enterCode":"Bitte geben Sie zuerst den Indikatorcode ein","dashboard.indicator.warning.pyodideLoadFailed":"Die Python-Engine konnte nicht geladen werden","dashboard.indicator.warning.pyodideLoadFailedDesc":"Diese Funktion ist in Ihrer aktuellen Region oder Netzwerkumgebung nicht verfügbar","dashboard.indicator.warning.chartNotInitialized":"Das Diagramm ist nicht initialisiert und das Linienzeichnungstool kann nicht verwendet werden.","dashboard.indicator.success.runIndicator":"Indikator läuft erfolgreich","dashboard.indicator.success.clearDrawings":"Alle Strichzeichnungen gelöscht","dashboard.indicator.sma":"SMA (gleitende Durchschnittskombination)","dashboard.indicator.ema":"EMA (exponentielle gleitende Durchschnittskombination)","dashboard.indicator.rsi":"RSI (relative Stärke)","dashboard.indicator.macd":"MACD","dashboard.indicator.bb":"Bollinger-Bänder","dashboard.indicator.atr":"ATR (Average True Range)","dashboard.indicator.cci":"CCI (Commodity Channel Index)","dashboard.indicator.williams":"Williams %R (Williams-Indikator)","dashboard.indicator.mfi":"MFI (Geldflussindex)","dashboard.indicator.adx":"ADX (durchschnittlicher Trendindex)","dashboard.indicator.obv":"OBV (Energiewelle)","dashboard.indicator.adosc":"ADOSC (Akkumulieren/Dispatch-Oszillator)","dashboard.indicator.ad":"AD (Sammel-/Verteilungsleitung)","dashboard.indicator.kdj":"KDJ (stochastischer Indikator)","dashboard.indicator.signal.buy":"KAUFEN","dashboard.indicator.signal.sell":"VERKAUFEN","dashboard.indicator.signal.supertrendBuy":"SuperTrend kaufen","dashboard.indicator.signal.supertrendSell":"SuperTrend verkaufen","dashboard.indicator.chart.kline":"K-Linie","dashboard.indicator.chart.volume":"Lautstärke","dashboard.indicator.chart.uptrend":"Aufwärtstrend","dashboard.indicator.chart.downtrend":"Abwärtstrend","dashboard.indicator.tooltip.time":"Zeit","dashboard.indicator.tooltip.open":"offen","dashboard.indicator.tooltip.close":"erhalten","dashboard.indicator.tooltip.high":"hoch","dashboard.indicator.tooltip.low":"niedrig","dashboard.indicator.tooltip.volume":"Lautstärke","dashboard.indicator.drawing.line":"Liniensegment","dashboard.indicator.drawing.horizontalLine":"horizontale Linie","dashboard.indicator.drawing.verticalLine":"vertikale Linie","dashboard.indicator.drawing.ray":"Strahl","dashboard.indicator.drawing.straightLine":"gerade Linie","dashboard.indicator.drawing.parallelLine":"parallele Linien","dashboard.indicator.drawing.priceLine":"Preislinie","dashboard.indicator.drawing.priceChannel":"Preiskanal","dashboard.indicator.drawing.fibonacciLine":"Fibonacci-Linien","dashboard.indicator.drawing.measure":"Messen","dashboard.indicator.drawing.clearAll":"Löschen Sie alle Strichzeichnungen","dashboard.indicator.market.USStock":"US-Aktien","dashboard.indicator.market.Crypto":"Kryptowährung","dashboard.indicator.market.Forex":"Forex","dashboard.indicator.market.Futures":"Futures","dashboard.indicator.create":"Indikator erstellen","dashboard.indicator.editor.title":"Indikatoren erstellen/bearbeiten","dashboard.indicator.editor.name":"Indikatorname","dashboard.indicator.editor.nameRequired":"Bitte geben Sie den Indikatornamen ein","dashboard.indicator.editor.namePlaceholder":"Bitte geben Sie den Indikatornamen ein","dashboard.indicator.editor.description":"Beschreibung des Indikators","dashboard.indicator.editor.descriptionPlaceholder":"Bitte geben Sie eine Beschreibung des Indikators ein (optional)","dashboard.indicator.editor.code":"Python-Code","dashboard.indicator.editor.codeRequired":"Bitte geben Sie den Indikatorcode ein","dashboard.indicator.editor.codePlaceholder":"Bitte geben Sie Python-Code ein","dashboard.indicator.editor.run":"laufen","dashboard.indicator.editor.runHint":"Klicken Sie auf die Schaltfläche „Ausführen“, um eine Vorschau des Indikatoreffekts im K-Liniendiagramm anzuzeigen","dashboard.indicator.editor.guide":"Entwicklungshandbuch","dashboard.indicator.editor.guideTitle":"Leitfaden zur Entwicklung von Python-Indikatoren","dashboard.indicator.editor.save":"speichern","dashboard.indicator.editor.cancel":"Abbrechen","dashboard.indicator.editor.unnamed":"Unbenannter Indikator","dashboard.indicator.editor.publishToCommunity":"In der Community posten","dashboard.indicator.editor.publishToCommunityHint":"Nach der Veröffentlichung können andere Benutzer Ihren Indikator in der Community anzeigen und verwenden","dashboard.indicator.editor.indicatorType":"Indikatortyp","dashboard.indicator.editor.indicatorTypeRequired":"Bitte wählen Sie den Indikatortyp aus","dashboard.indicator.editor.indicatorTypePlaceholder":"Bitte wählen Sie den Indikatortyp aus","dashboard.indicator.editor.previewImage":"Vorschau","dashboard.indicator.editor.uploadImage":"Bilder hochladen","dashboard.indicator.editor.previewImageHint":"Empfohlene Größe: 800 x 400, nicht mehr als 2 MB","dashboard.indicator.editor.pricing":"Verkaufspreis (QDT)","dashboard.indicator.editor.pricingType.free":"kostenlos","dashboard.indicator.editor.pricingType.permanent":"dauerhaft","dashboard.indicator.editor.pricingType.monthly":"monatliche Zahlung","dashboard.indicator.editor.price":"Preis","dashboard.indicator.editor.priceRequired":"Bitte geben Sie den Preis ein","dashboard.indicator.editor.pricePlaceholder":"Bitte geben Sie den Preis ein","dashboard.indicator.editor.pricingHint":"Obwohl der Preis für kostenlose Indikatoren 0 beträgt, belohnt Sie die Plattform (QDT) basierend auf Ihrer Indikatornutzung und Lobrate.","dashboard.indicator.editor.aiGenerate":"Intelligente Generation","dashboard.indicator.editor.aiPromptPlaceholder":"Teilen Sie mir Ihre Ideen mit und ich werde den Python-Indikatorcode für Sie generieren","dashboard.indicator.editor.aiGenerateBtn":"KI-generierter Code","dashboard.indicator.editor.aiPromptRequired":"Bitte geben Sie Ihre Gedanken ein","dashboard.indicator.editor.aiGenerateSuccess":"Codegenerierung erfolgreich","dashboard.indicator.editor.aiGenerateError":"Die Codegenerierung ist fehlgeschlagen. Bitte versuchen Sie es später noch einmal","dashboard.indicator.backtest.title":"Indikator-Backtest","dashboard.indicator.backtest.config":"Backtest-Parameter","dashboard.indicator.backtest.startDate":"Startdatum","dashboard.indicator.backtest.endDate":"Enddatum","dashboard.indicator.backtest.selectStartDate":"Wählen Sie das Startdatum","dashboard.indicator.backtest.selectEndDate":"Wählen Sie das Enddatum aus","dashboard.indicator.backtest.startDateRequired":"Bitte wählen Sie ein Startdatum aus","dashboard.indicator.backtest.endDateRequired":"Bitte wählen Sie ein Enddatum aus","dashboard.indicator.backtest.initialCapital":"Anfangskapital","dashboard.indicator.backtest.initialCapitalRequired":"Bitte geben Sie den Anfangsbetrag ein","dashboard.indicator.backtest.commission":"Bearbeitungsgebühr","dashboard.indicator.backtest.leverage":"Verschuldungsquote","dashboard.indicator.backtest.tradeDirection":"Handelsrichtung","dashboard.indicator.backtest.longOnly":"Geh lange","dashboard.indicator.backtest.shortOnly":"kurz","dashboard.indicator.backtest.both":"Zweiseitig","dashboard.indicator.backtest.run":"Beginnen Sie mit dem Backtesting","dashboard.indicator.backtest.rerun":"Nochmals Backtest","dashboard.indicator.backtest.close":"Schließen","dashboard.indicator.backtest.running":"Indikator-Backtest läuft...","dashboard.indicator.backtest.results":"Backtest-Ergebnisse","dashboard.indicator.backtest.totalReturn":"Gesamtrendite","dashboard.indicator.backtest.annualReturn":"annualisiertes Einkommen","dashboard.indicator.backtest.maxDrawdown":"maximaler Drawdown","dashboard.indicator.backtest.sharpeRatio":"Sharpe-Ratio","dashboard.indicator.backtest.winRate":"Gewinnquote","dashboard.indicator.backtest.profitFactor":"Gewinn-Verlust-Verhältnis","dashboard.indicator.backtest.totalTrades":"Anzahl der Transaktionen","dashboard.indicator.totalReturn":"Gesamtrendite","dashboard.indicator.annualReturn":"annualisierte Rendite","dashboard.indicator.maxDrawdown":"maximaler Drawdown","dashboard.indicator.sharpeRatio":"Sharpe-Ratio","dashboard.indicator.winRate":"Gewinnquote","dashboard.indicator.profitFactor":"Gewinn-Verlust-Verhältnis","dashboard.indicator.totalTrades":"Gesamtzahl der Transaktionen","dashboard.indicator.backtest.totalCommission":"Gesamtbearbeitungsgebühr","dashboard.indicator.backtest.equityCurve":"Zinskurve","dashboard.indicator.backtest.strategy":"Indikatoreinkommen","dashboard.indicator.backtest.benchmark":"Benchmark-Rendite","dashboard.indicator.backtest.tradeHistory":"Transaktionsverlauf","dashboard.indicator.backtest.tradeTime":"Zeit","dashboard.indicator.backtest.tradeType":"Typ","dashboard.indicator.backtest.buy":"kaufen","dashboard.indicator.backtest.sell":"verkaufen","dashboard.indicator.backtest.liquidation":"Liquidation","dashboard.indicator.backtest.openLong":"Lange geöffnet","dashboard.indicator.backtest.closeLong":"Pinduo","dashboard.indicator.backtest.closeLongStop":"Nahezu long (Stop-Loss)","dashboard.indicator.backtest.closeLongProfit":"Mehr schließen (Gewinn mitnehmen)","dashboard.indicator.backtest.addLong":"Long-Position hinzufügen","dashboard.indicator.backtest.openShort":"Kurz öffnen","dashboard.indicator.backtest.closeShort":"leer","dashboard.indicator.backtest.closeShortStop":"Schließen (Stop-Loss)","dashboard.indicator.backtest.closeShortProfit":"Schließen (Gewinn mitnehmen)","dashboard.indicator.backtest.addShort":"Short-Position hinzufügen","dashboard.indicator.backtest.price":"Preis","dashboard.indicator.backtest.amount":"Menge","dashboard.indicator.backtest.balance":"Kontostand","dashboard.indicator.backtest.profit":"Gewinn und Verlust","dashboard.indicator.backtest.success":"Backtest abgeschlossen","dashboard.indicator.backtest.failed":"Der Backtest ist fehlgeschlagen. Bitte versuchen Sie es später noch einmal","dashboard.indicator.backtest.noIndicatorCode":"Für diesen Indikator gibt es keinen rückprüfbaren Code","dashboard.indicator.backtest.noSymbol":"Bitte wählen Sie zunächst das Transaktionsziel aus","dashboard.indicator.backtest.dateRangeExceeded":"Der Backtest-Zeitbereich überschreitet das Limit: {timeframe} Zeitraum kann höchstens {maxRange} backtestet werden","dashboard.indicator.backtest.dateRangeExceededDays":"Backtest range exceeds limit: {timeframe} max {maxRange} ({maxDays} days)","dashboard.indicator.backtest.metaLine":"Symbol: {symbol} | Market: {market} | Timeframe: {timeframe}","dashboard.indicator.backtest.savedRunId":"Backtest saved. Run ID: {id}","dashboard.indicator.backtest.prev":"Previous","dashboard.indicator.backtest.next":"Next","dashboard.indicator.backtest.steps.strategy.title":"Strategy","dashboard.indicator.backtest.steps.strategy.desc":"Position sizing & risk controls","dashboard.indicator.backtest.steps.trading.title":"Trading settings","dashboard.indicator.backtest.steps.trading.desc":"Time range, capital, fees, leverage","dashboard.indicator.backtest.steps.results.title":"Results","dashboard.indicator.backtest.steps.results.desc":"Backtest output","dashboard.indicator.backtest.panel.risk":"Risk management (SL/TP/Trailing)","dashboard.indicator.backtest.panel.scale":"Scale in / DCA (trend & mean-reversion)","dashboard.indicator.backtest.panel.reduce":"Reduce position (trend & adverse)","dashboard.indicator.backtest.panel.position":"Position sizing","dashboard.indicator.backtest.field.stopLossPct":"Stop Loss (%)","dashboard.indicator.backtest.field.takeProfitPct":"Take Profit (%)","dashboard.indicator.backtest.field.trailingEnabled":"Trailing stop / take profit","dashboard.indicator.backtest.field.trailingStopPct":"Trailing drawdown (%)","dashboard.indicator.backtest.field.trailingActivationPct":"Trailing activation (%)","dashboard.indicator.backtest.field.slippage":"Slippage (%)","dashboard.indicator.backtest.field.trendAddEnabled":"Trend-following scale-in","dashboard.indicator.backtest.field.dcaAddEnabled":"Mean-reversion DCA","dashboard.indicator.backtest.field.trendAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.dcaAddStepPct":"DCA trigger (%)","dashboard.indicator.backtest.field.trendAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.dcaAddSizePct":"DCA size (% of capital)","dashboard.indicator.backtest.field.trendAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.dcaAddMaxTimes":"Max DCA times","dashboard.indicator.backtest.field.trendReduceEnabled":"Trend reduce","dashboard.indicator.backtest.field.adverseReduceEnabled":"Adverse reduce","dashboard.indicator.backtest.field.trendReduceStepPct":"Trend trigger (%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"Adverse trigger (%)","dashboard.indicator.backtest.field.trendReduceSizePct":"Reduce size (% of position)","dashboard.indicator.backtest.field.adverseReduceSizePct":"Adverse reduce size (% of position)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"Max trend reduce times","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"Max adverse reduce times","dashboard.indicator.backtest.field.entryPct":"Entry size (% of capital)","dashboard.indicator.backtest.field.minOrderPct":"Min order size (% of capital) (optional)","dashboard.indicator.backtest.closeLongTrailing":"Close Long (Trailing)","dashboard.indicator.backtest.reduceLong":"Reduce Long","dashboard.indicator.backtest.closeShortTrailing":"Close Short (Trailing)","dashboard.indicator.backtest.reduceShort":"Reduce Short","dashboard.docs.title":"Dokumentenzentrum","dashboard.docs.search.placeholder":"Dokumente durchsuchen...","dashboard.docs.category.all":"Alle","dashboard.docs.category.guide":"Entwicklungshandbuch","dashboard.docs.category.api":"API-Dokumentation","dashboard.docs.category.tutorial":"Anleitung","dashboard.docs.category.faq":"FAQ","dashboard.docs.featured.title":"Empfohlene Dokumentation","dashboard.docs.featured.tag":"Empfohlen","dashboard.docs.list.views":"Durchsuchen","dashboard.docs.list.author":"Autor","dashboard.docs.list.empty":"Noch kein Dokument","dashboard.docs.list.backToAll":"Zurück zu allen Dokumenten","dashboard.docs.list.total":"Insgesamt {count} Dokumente","dashboard.docs.detail.back":"Zurück zur Dokumentenliste","dashboard.docs.detail.updatedAt":"aktualisiert am","dashboard.docs.detail.related":"Verwandte Dokumente","dashboard.docs.detail.notFound":"Dokument existiert nicht","dashboard.docs.detail.error":"Das Dokument existiert nicht oder wurde gelöscht","dashboard.docs.search.result":"Suchergebnisse","dashboard.docs.search.keyword":"Schlüsselwörter","community.filter.indicatorType":"Indikatortyp","community.filter.all":"Alle","community.filter.other":"Andere Optionen","community.filter.pricing":"Preisart","community.filter.allPricing":"Alle Preise","community.filter.sortBy":"Sortieren nach","community.filter.search":"Suchen","community.filter.searchPlaceholder":"Metrikname suchen","community.indicatorType.trend":"Trendtyp","community.indicatorType.momentum":"Impulstyp","community.indicatorType.volatility":"Volatilität","community.indicatorType.volume":"Lautstärke","community.indicatorType.custom":"Anpassen","community.pricing.free":"kostenlos","community.pricing.paid":"Bezahlen","community.sort.downloads":"Downloads","community.sort.rating":"Bewertung","community.sort.newest":"Neueste Veröffentlichungen","community.pagination.total":"{total} Indikatoren insgesamt","community.noDescription":"Noch keine Beschreibung","community.detail.type":"Typ","community.detail.pricing":"Preise","community.detail.rating":"Bewertung","community.detail.downloads":"Downloads","community.detail.author":"Autor","community.detail.description":"Einführung","community.detail.detailContent":"Detaillierte Beschreibung","community.detail.backtestStats":"Backtest-Statistiken","community.action.purchase":"Kaufindikator","community.action.addToMyIndicators":"Zu meinen Indikatoren hinzufügen","community.action.favorite":"Sammlung","community.action.unfavorite":"Favoriten abbrechen","community.action.buyNow":"Jetzt kaufen","community.action.renew":"Erneuerung","community.purchase.price":"Preis","community.purchase.permanent":"dauerhaft","community.purchase.monthly":"Monat","community.purchase.confirmBuy":"Bestätigen Sie den Kauf dieses Indikators ({price} QDT)?","community.purchase.confirmRenew":"Bestätigen Sie die Erneuerung dieses Indikators ({price} QDT/Monat)?","community.purchase.confirmFree":"Bestätigen Sie, dass Sie diesen kostenlosen Indikator hinzufügen möchten?","community.purchase.confirmTitle":"Aktion bestätigen","community.purchase.owned":"Sie haben diesen Indikator erworben (dauerhaft gültig)","community.purchase.ownIndicator":"Dies ist die von Ihnen veröffentlichte Metrik","community.purchase.expired":"Ihr Abonnement ist abgelaufen","community.purchase.expiresOn":"Ablaufzeit: {Datum}","community.tabs.detail":"Indikatordetails","community.tabs.backtest":"Backtest-Daten","community.tabs.ratings":"Benutzerbewertungen","community.rating.myRating":"Meine Bewertung","community.rating.stars":"{count} Sterne","community.rating.commentPlaceholder":"Teilen Sie Ihre Erfahrungen...","community.rating.submit":"Bewertung abgeben","community.rating.modify":"Ändern","community.rating.saveModify":"Änderungen speichern","community.rating.cancel":"Abbrechen","community.rating.selectRating":"Bitte wählen Sie eine Bewertung aus","community.rating.success":"Bewertung erfolgreich","community.rating.modifySuccess":"Bewertung erfolgreich geändert","community.rating.failed":"Bewertung fehlgeschlagen","community.rating.noRatings":"Noch keine Kommentare","community.backtest.note":"Die oben genannten Daten sind historische Backtest-Ergebnisse und dienen nur als Referenz und stellen keine zukünftigen Erträge dar.","community.backtest.noData":"Noch keine Backtest-Daten","community.backtest.uploadHint":"Der Autor hat noch keine Backtest-Daten hochgeladen","community.message.loadFailed":"Die Indikatorliste konnte nicht geladen werden","community.message.purchaseProcessing":"Kaufanfrage wird bearbeitet...","community.message.downloadSuccess":"Die Metrik wurde zu meiner Metrikliste hinzugefügt","community.message.favoriteSuccess":"Sammlung erfolgreich","community.message.unfavoriteSuccess":"Abholung erfolgreich abbrechen","community.message.operationSuccess":"Operation erfolgreich","community.message.operationFailed":"Der Vorgang ist fehlgeschlagen","community.banner.readOnly":"Nur lesen","community.banner.loginHint":"Für Login oder Registrierung bitte auf die Schaltfläche klicken, um zu einer unabhängigen Seite zu wechseln und CSRF-Probleme zu vermeiden","community.banner.jumpButton":"Zur Anmeldung/Registrierung","dashboard.totalEquity":"Gesamteigenkapital","dashboard.totalPnL":"Gesamtgewinn und -verlust","dashboard.aiStrategies":"KI-Strategie","dashboard.indicatorStrategies":"Indikatorstrategie","dashboard.running":"Laufen","dashboard.pnlHistory":"historischer Gewinn und Verlust","dashboard.strategyPerformance":"Gewinn- und Verlustquote der Strategie","dashboard.recentTrades":"aktuelle Transaktionen","dashboard.currentPositions":"Aktuelle Position","dashboard.table.time":"Zeit","dashboard.table.strategy":"Richtlinienname","dashboard.table.symbol":"Ziel","dashboard.table.type":"Typ","dashboard.table.side":"Richtung","dashboard.table.size":"Offenes Interesse","dashboard.table.entryPrice":"durchschnittlicher Eröffnungspreis","dashboard.table.price":"Preis","dashboard.table.amount":"Menge","dashboard.table.profit":"Gewinn und Verlust","dashboard.pendingOrders":"Auftragsausführungsprotokoll","dashboard.totalOrders":"Gesamt {total} Aufträge","dashboard.viewError":"Fehler anzeigen","dashboard.filled":"Ausgeführt","dashboard.orderTable.time":"Erstellungszeit","dashboard.orderTable.strategy":"Strategie","dashboard.orderTable.symbol":"Handelspaar","dashboard.orderTable.signalType":"Signaltyp","dashboard.orderTable.amount":"Menge","dashboard.orderTable.price":"Ausführungspreis","dashboard.orderTable.status":"Status","dashboard.orderTable.executedAt":"Ausführungszeit","dashboard.signalType.openLong":"Long öffnen","dashboard.signalType.openShort":"Short öffnen","dashboard.signalType.closeLong":"Long schließen","dashboard.signalType.closeShort":"Short schließen","dashboard.signalType.addLong":"Long hinzufügen","dashboard.signalType.addShort":"Short hinzufügen","dashboard.status.pending":"Ausstehend","dashboard.status.processing":"In Bearbeitung","dashboard.status.completed":"Abgeschlossen","dashboard.status.failed":"Fehlgeschlagen","dashboard.status.cancelled":"Storniert","dashboard.table.pnl":"nicht realisierter Gewinn oder Verlust","form.basic-form.basic.title":"Grundform","form.basic-form.basic.description":"Formularseiten werden verwendet, um Informationen von Benutzern zu sammeln oder zu überprüfen. Grundformulare werden häufig in Formularszenarien mit wenigen Datenelementen verwendet.","form.basic-form.title.label":"Titel","form.basic-form.title.placeholder":"Geben Sie dem Ziel einen Namen","form.basic-form.title.required":"Bitte geben Sie einen Titel ein","form.basic-form.date.label":"Start- und Enddatum","form.basic-form.placeholder.start":"Startdatum","form.basic-form.placeholder.end":"Enddatum","form.basic-form.date.required":"Bitte wählen Sie Start- und Enddatum aus","form.basic-form.goal.label":"Zielbeschreibung","form.basic-form.goal.placeholder":"Bitte geben Sie Ihre schrittweisen Arbeitsziele ein","form.basic-form.goal.required":"Bitte geben Sie eine Zielbeschreibung ein","form.basic-form.standard.label":"messen","form.basic-form.standard.placeholder":"Bitte geben Sie Messwerte ein","form.basic-form.standard.required":"Bitte geben Sie Messwerte ein","form.basic-form.client.label":"Kunde","form.basic-form.client.required":"Bitte beschreiben Sie die Kunden, die Sie betreuen","form.basic-form.label.tooltip":"Zielgruppe der Leistungsempfänger","form.basic-form.client.placeholder":"Bitte beschreiben Sie die von Ihnen betreuten Kunden, interne Kunden direkt @Name/Auftragsnummer","form.basic-form.invites.label":"Laden Sie Gutachter ein","form.basic-form.invites.placeholder":"Bitte direkt @Name/Mitarbeiternummer angeben, es können bis zu 5 Personen einladen","form.basic-form.weight.label":"Gewicht","form.basic-form.weight.placeholder":"Bitte treten Sie ein","form.basic-form.public.label":"Zielpublikum","form.basic-form.label.help":"Kunden und Rezensenten werden standardmäßig geteilt","form.basic-form.radio.public":"öffentlich","form.basic-form.radio.partially-public":"Teilweise öffentlich","form.basic-form.radio.private":"privat","form.basic-form.publicUsers.placeholder":"offen für","form.basic-form.option.A":"Kollege 1","form.basic-form.option.B":"Kollege 2","form.basic-form.option.C":"Kollege drei","form.basic-form.email.required":"Bitte geben Sie Ihre E-Mail-Adresse ein!","form.basic-form.email.wrong-format":"Das E-Mail-Adressformat ist falsch!","form.basic-form.userName.required":"Bitte Benutzernamen eingeben!","form.basic-form.password.required":"Bitte geben Sie Ihr Passwort ein!","form.basic-form.password.twice":"Die doppelt eingegebenen Passwörter stimmen nicht überein!","form.basic-form.strength.msg":"Bitte geben Sie mindestens 6 Zeichen ein. Bitte verwenden Sie keine Passwörter, die leicht zu erraten sind.","form.basic-form.strength.strong":"Stärke: Stark","form.basic-form.strength.medium":"Stärke: Mittel","form.basic-form.strength.short":"Stärke: zu kurz","form.basic-form.confirm-password.required":"Bitte bestätigen Sie Ihr Passwort!","form.basic-form.phone-number.required":"Bitte geben Sie Ihre Mobiltelefonnummer ein!","form.basic-form.phone-number.wrong-format":"Das Format der Mobiltelefonnummer ist falsch!","form.basic-form.verification-code.required":"Bitte geben Sie den Verifizierungscode ein!","form.basic-form.form.get-captcha":"Holen Sie sich den Bestätigungscode","form.basic-form.captcha.second":"Sekunden","form.basic-form.form.optional":"(optional)","form.basic-form.form.submit":"Senden","form.basic-form.form.save":"speichern","form.basic-form.email.placeholder":"E-Mail","form.basic-form.password.placeholder":"Passwort mit mindestens 6 Zeichen, Groß- und Kleinschreibung beachten","form.basic-form.confirm-password.placeholder":"Passwort bestätigen","form.basic-form.phone-number.placeholder":"Mobiltelefonnummer","form.basic-form.verification-code.placeholder":"Bestätigungscode","result.success.title":"Übermittlung erfolgreich","result.success.description":"Die Seite mit den Übermittlungsergebnissen wird verwendet, um Rückmeldungen zu den Verarbeitungsergebnissen einer Reihe von Vorgangsaufgaben zu geben. Wenn es sich nur um einen einfachen Vorgang handelt, verwenden Sie das globale Eingabeaufforderungs-Feedback „Nachricht“. In diesem Textbereich können einfache Zusatzanweisungen angezeigt werden. Bei Bedarf zur Darstellung von „Dokumenten“ können im grauen Bereich darunter komplexere Inhalte angezeigt werden.","result.success.operate-title":"Projektname","result.success.operate-id":"Projekt-ID","result.success.principal":"Verantwortliche Person","result.success.operate-time":"Effektive Zeit","result.success.step1-title":"Projekt erstellen","result.success.step1-operator":"Qu Lili","result.success.step2-title":"Vorläufige Prüfung der Abteilung","result.success.step2-operator":"Zhou Maomao","result.success.step2-extra":"Dringend","result.success.step3-title":"Finanzielle Überprüfung","result.success.step4-title":"Komplett","result.success.btn-return":"Zurück zur Liste","result.success.btn-project":"Artikel ansehen","result.success.btn-print":"Drucken","result.fail.error.title":"Die Übermittlung ist fehlgeschlagen","result.fail.error.description":"Bitte überprüfen und ändern Sie die folgenden Informationen, bevor Sie sie erneut einreichen.","result.fail.error.hint-title":"Der von Ihnen übermittelte Inhalt enthält die folgenden Fehler:","result.fail.error.hint-text1":"Ihr Konto wurde gesperrt","result.fail.error.hint-btn1":"Sofort auftauen","result.fail.error.hint-text2":"Ihr Konto ist noch nicht antragsberechtigt","result.fail.error.hint-btn2":"Jetzt upgraden","result.fail.error.btn-text":"Zurück zur Änderung","account.settings.menuMap.custom":"Personalisierung","account.settings.menuMap.binding":"Kontobindung","account.settings.basic.avatar":"Avatar","account.settings.basic.change-avatar":"Avatar ändern","account.settings.basic.email":"E-Mail","account.settings.basic.email-message":"Bitte geben Sie Ihre E-Mail ein!","account.settings.basic.nickname":"Spitzname","account.settings.basic.nickname-message":"Bitte geben Sie Ihren Spitznamen ein!","account.settings.basic.profile":"Profil","account.settings.basic.profile-message":"Bitte geben Sie Ihr persönliches Profil ein!","account.settings.basic.profile-placeholder":"Profil","account.settings.basic.country":"Land/Region","account.settings.basic.country-message":"Bitte geben Sie Ihr Land oder Ihre Region ein!","account.settings.basic.geographic":"Provinz und Stadt","account.settings.basic.geographic-message":"Bitte geben Sie Ihr Bundesland und Ihre Stadt ein!","account.settings.basic.address":"Straßenadresse","account.settings.basic.address-message":"Bitte geben Sie Ihre Straße ein!","account.settings.basic.phone":"Kontaktnummer","account.settings.basic.phone-message":"Bitte geben Sie Ihre Kontaktnummer ein!","account.settings.basic.update":"Grundlegende Informationen aktualisieren","account.settings.basic.update.success":"Grundlegende Informationen erfolgreich aktualisieren","account.settings.security.strong":"Stark","account.settings.security.medium":"in","account.settings.security.weak":"schwach","account.settings.security.password":"Kontopasswort","account.settings.security.password-description":"Aktuelle Passwortstärke:","account.settings.security.phone":"Sicherheitshandy","account.settings.security.phone-description":"Bereits gebundenes Mobiltelefon:","account.settings.security.question":"Sicherheitsprobleme","account.settings.security.question-description":"Es werden keine Sicherheitsfragen gestellt, wodurch die Kontosicherheit wirksam geschützt werden kann.","account.settings.security.email":"E-Mail binden","account.settings.security.email-description":"Bereits gebundene E-Mail-Adresse:","account.settings.security.mfa":"MFA-Gerät","account.settings.security.mfa-description":"Das MFA-Gerät ist nicht gebunden. Nach der Bindung können Sie noch einmal bestätigen.","account.settings.security.modify":"Ändern","account.settings.security.set":"Einstellungen","account.settings.security.bind":"verbindlich","account.settings.binding.taobao":"Binde Taobao","account.settings.binding.taobao-description":"Das Taobao-Konto ist derzeit nicht gebunden","account.settings.binding.alipay":"Alipay binden","account.settings.binding.alipay-description":"Das Alipay-Konto ist derzeit nicht gebunden","account.settings.binding.dingding":"Bindung von DingTalk","account.settings.binding.dingding-description":"Derzeit ist kein DingTalk-Konto gebunden","account.settings.binding.bind":"verbindlich","account.settings.notification.password":"Kontopasswort","account.settings.notification.password-description":"Nachrichten von anderen Benutzern werden in Form von Site-Nachrichten benachrichtigt.","account.settings.notification.messages":"Systemmeldungen","account.settings.notification.messages-description":"Systemmeldungen werden in Form von Site-Nachrichten benachrichtigt.","account.settings.notification.todo":"Zu erledigende Aufgaben","account.settings.notification.todo-description":"Zu erledigende Aufgaben werden in Form von In-Site-Nachrichten benachrichtigt","account.settings.settings.open":"offen","account.settings.settings.close":"schließen","trading-assistant.title":"Handelsassistent","trading-assistant.strategyList":"Strategieliste","trading-assistant.createStrategy":"Richtlinie erstellen","trading-assistant.noStrategy":"Noch keine Strategie","trading-assistant.selectStrategy":"Bitte wählen Sie links eine Strategie aus, um Details anzuzeigen","trading-assistant.startStrategy":"Startstrategie","trading-assistant.stopStrategy":"Stoppstrategie","trading-assistant.editStrategy":"Redaktionelle Strategie","trading-assistant.deleteStrategy":"Richtlinie löschen","trading-assistant.status.running":"Laufen","trading-assistant.status.stopped":"Angehalten","trading-assistant.status.error":"Fehler","trading-assistant.strategyType.IndicatorStrategy":"Technische Indikatorstrategie","trading-assistant.strategyType.PromptBasedStrategy":"Stichwortstrategie","trading-assistant.strategyType.GridStrategy":"Grid-Strategie","trading-assistant.tabs.tradingRecords":"Transaktionsverlauf","trading-assistant.tabs.positions":"Positionsaufzeichnung","trading-assistant.tabs.equityCurve":"Eigenkapitalkurve","trading-assistant.form.step1":"Wählen Sie Indikatoren aus","trading-assistant.form.step2":"Exchange-Konfiguration","trading-assistant.form.step3":"Strategieparameter","trading-assistant.form.step2Params":"Parameter","trading-assistant.form.step3Signal":"Signalzustellung","trading-assistant.form.marketCategory":"Marktkategorie","trading-assistant.form.marketCategoryHint":"Wählen Sie zuerst den Markt. Nur Krypto kann Live-Trading aktivieren; andere Märkte sind nur Signal.","trading-assistant.market.USStock":"US-Aktien","trading-assistant.market.Crypto":"Krypto","trading-assistant.market.Forex":"Forex","trading-assistant.form.indicator":"Wählen Sie Indikatoren aus","trading-assistant.form.indicatorHint":"Sie können nur technische Indikatoren auswählen, die Sie gekauft oder erstellt haben","trading-assistant.form.qdtCostHints":"Bei Verwendung dieser Strategie wird QDT verbraucht. Bitte stellen Sie sicher, dass das Konto über ausreichend QDT-Guthaben verfügt","trading-assistant.form.indicatorDescription":"Beschreibung des Indikators","trading-assistant.form.noDescription":"Noch keine Beschreibung","trading-assistant.form.exchange":"Austausch auswählen","trading-assistant.form.apiKey":"API-Schlüssel","trading-assistant.form.secretKey":"Geheimer Schlüssel","trading-assistant.form.passphrase":"Passphrase","trading-assistant.form.testConnection":"Testverbindung","trading-assistant.form.strategyName":"Richtlinienname","trading-assistant.form.symbol":"Handelspaar","trading-assistant.form.symbolHint":"Das Symbolformat hängt vom ausgewählten Markt ab","trading-assistant.form.symbolHintCrypto":"Krypto: z.B. BTC/USDT","trading-assistant.form.symbolHintGeneral":"Geben Sie das Symbol des gewählten Marktes ein (z.B. 600519, AAPL, EURUSD).","trading-assistant.form.initialCapital":"Höhe der Investition","trading-assistant.form.marketType":"Markttyp","trading-assistant.form.marketTypeFutures":"Vertrag","trading-assistant.form.marketTypeSpot":"Spot","trading-assistant.form.marketTypeHint":"Der Kontrakt unterstützt bidirektionalen Handel und Leverage, während der Spot nur Long-Positionen unterstützt und der Leverage auf 1x festgelegt ist","trading-assistant.form.leverage":"Nutzen Sie mehrere","trading-assistant.form.leverageHint":"Vertrag: 1-125 Mal, Spot: 1 Mal fest","trading-assistant.form.spotLeverageFixed":"Der Hebel für den Spothandel ist auf 1x festgelegt","trading-assistant.form.spotOnlyLongHint":"Der Spothandel unterstützt nur Long-Positionen","trading-assistant.form.tradeDirection":"Handelsrichtung","trading-assistant.form.tradeDirectionLong":"Nur lang","trading-assistant.form.tradeDirectionShort":"Nur kurz","trading-assistant.form.tradeDirectionBoth":"zweiseitige Transaktion","trading-assistant.form.timeframe":"Zeitraum","trading-assistant.form.klinePeriod":"K-Linien-Zeitraum","trading-assistant.form.timeframe1m":"1 Minute","trading-assistant.form.timeframe5m":"5 Minuten","trading-assistant.form.timeframe15m":"15 Minuten","trading-assistant.form.timeframe30m":"30 Minuten","trading-assistant.form.timeframe1H":"1 Stunde","trading-assistant.form.timeframe4H":"4 Stunden","trading-assistant.form.timeframe1D":"1 Tag","trading-assistant.form.selectStrategyType":"Strategietyp auswählen","trading-assistant.form.indicatorStrategy":"Indikator-Strategie","trading-assistant.form.indicatorStrategyDesc":"Automatisierte Handelsstrategie basierend auf technischen Indikatoren","trading-assistant.form.aiStrategy":"KI-Strategie","trading-assistant.form.aiStrategyDesc":"Automatisierte Handelsstrategie basierend auf KI-Intelligenzentscheidungen","trading-assistant.form.enableAiFilter":"KI-Intelligenzentscheidungsfilter aktivieren","trading-assistant.form.enableAiFilterHint":"Wenn aktiviert, werden Indikatorsignale von KI gefiltert, um die Handelsqualität zu verbessern","trading-assistant.form.aiFilterPrompt":"Benutzerdefinierte Eingabeaufforderung","trading-assistant.form.aiFilterPromptHint":"Benutzerdefinierte Anweisungen für KI-Filterung bereitstellen, leer lassen, um die Systemstandardwerte zu verwenden","trading-assistant.validation.strategyTypeRequired":"Bitte wählen Sie einen Strategietyp","trading-assistant.validation.marketCategoryRequired":"Bitte wählen Sie eine Marktkategorie","trading-assistant.form.advancedSettings":"Erweiterte Einstellungen","trading-assistant.form.orderMode":"Bestellmodus","trading-assistant.form.orderModeMaker":"Hersteller","trading-assistant.form.orderModeTaker":"Marktpreis (Taker)","trading-assistant.form.orderModeHint":"Im Pending-Order-Modus werden Limit-Orders verwendet und die Bearbeitungsgebühr ist niedriger; Der Marktpreismodus wird sofort ausgeführt und die Bearbeitungsgebühr ist höher.","trading-assistant.form.makerWaitSec":"Wartezeit für ausstehende Bestellungen (Sekunden)","trading-assistant.form.makerWaitSecHint":"Die Zeit, die nach der Bestellung auf die Transaktion gewartet wird. Brechen Sie ab und versuchen Sie es nach einer Zeitüberschreitung erneut.","trading-assistant.form.makerRetries":"Anzahl der Wiederholungsversuche für ausstehende Bestellungen","trading-assistant.form.makerRetriesHint":"Die maximale Anzahl von Wiederholungsversuchen, wenn eine ausstehende Order nicht ausgeführt wird","trading-assistant.form.fallbackToMarket":"Die ausstehende Bestellung schlägt fehl und der Marktpreis wird herabgestuft.","trading-assistant.form.fallbackToMarketHint":"Wenn die ausstehende Eröffnungs-/Schließorder nicht abgeschlossen wurde, wird angegeben, ob sie auf eine Marktorder herabgestuft werden soll, um sicherzustellen, dass die Transaktion abgeschlossen wird.","trading-assistant.form.marginMode":"Margin-Modus","trading-assistant.form.marginModeCross":"Volles Lager","trading-assistant.form.marginModeIsolated":"Isolierte Lage","trading-assistant.form.stopLossPct":"Stop-Loss-Verhältnis (%)","trading-assistant.form.stopLossPctHint":"Legen Sie den Stop-Loss-Prozentsatz fest. 0 bedeutet, dass Stop-Loss nicht aktiviert ist","trading-assistant.form.takeProfitPct":"Take-Profit-Quote (%)","trading-assistant.form.takeProfitPctHint":"Legen Sie den Take-Profit-Prozentsatz fest. 0 bedeutet, dass Take-Profit deaktiviert ist","trading-assistant.form.commission":"Gebühr (%)","trading-assistant.form.commissionHint":"Handelsgebühr in Prozent (optional)","trading-assistant.form.slippage":"Slippage (%)","trading-assistant.form.slippageHint":"Geschätzter Slippage-Prozentsatz (optional)","trading-assistant.form.executionMode":"Ausführung","trading-assistant.form.executionModeSignal":"Nur Signal (Benachrichtigungen)","trading-assistant.form.executionModeLive":"Live-Trading (nur Krypto)","trading-assistant.form.liveTradingCryptoOnlyHint":"Live-Trading ist nur für Krypto verfügbar. Andere Märkte können nur Signale senden.","trading-assistant.form.notifyChannels":"Benachrichtigungskanäle","trading-assistant.form.notifyChannelsHint":"Wählen Sie aus, wie Sie Kauf/Verkauf- und Risikosignale erhalten möchten.","trading-assistant.notify.browser":"Browser","trading-assistant.notify.email":"E-Mail","trading-assistant.notify.phone":"Telefon","trading-assistant.notify.telegram":"Telegram","trading-assistant.notify.discord":"Discord","trading-assistant.notify.webhook":"Webhook","trading-assistant.form.notifyEmail":"E-Mail","trading-assistant.form.notifyPhone":"Telefonnummer","trading-assistant.form.notifyTelegram":"Telegram (Chat-ID / Benutzername)","trading-assistant.form.notifyDiscord":"Discord (Webhook-URL)","trading-assistant.form.notifyWebhook":"Webhook-URL","trading-assistant.form.liveTradingConfigTitle":"Exchange-Zugangsdaten","trading-assistant.form.liveTradingConfigHint":"Geben Sie Ihre Exchange-API-Zugangsdaten ein. Sie können die Verbindung vor dem Speichern testen.","trading-assistant.form.savedCredential":"Gespeicherte Zugangsdaten","trading-assistant.form.savedCredentialHint":"Optional: Wählen Sie gespeicherte Zugangsdaten zum automatischen Ausfüllen.","trading-assistant.form.saveCredential":"Diese Zugangsdaten für später speichern","trading-assistant.form.credentialName":"Name (optional)","trading-assistant.form.signalMode":"Signalmodus","trading-assistant.form.signalModeConfirmed":"Bestätigen Sie den Modus","trading-assistant.form.signalModeAggressive":"Aggressiver Modus","trading-assistant.form.signalModeHint":"Bestätigungsmodus: prüft nur abgeschlossene K-Zeilen; Aggressiver Modus: Überprüft auch die Bildung von K-Linien","trading-assistant.form.cancel":"Abbrechen","trading-assistant.form.prev":"Vorheriger Schritt","trading-assistant.form.next":"Nächster Schritt","trading-assistant.form.confirmCreate":"Bestätigen Sie die Erstellung","trading-assistant.form.confirmEdit":"Bestätigen Sie die Änderungen","trading-assistant.messages.createSuccess":"Strategie erfolgreich erstellt","trading-assistant.messages.createFailed":"Richtlinie konnte nicht erstellt werden","trading-assistant.messages.updateSuccess":"Richtlinienaktualisierung erfolgreich","trading-assistant.messages.updateFailed":"Die Aktualisierungsrichtlinie ist fehlgeschlagen","trading-assistant.messages.deleteSuccess":"Richtlinienlöschung erfolgreich","trading-assistant.messages.deleteFailed":"Das Löschen der Richtlinie ist fehlgeschlagen","trading-assistant.messages.startSuccess":"Strategie erfolgreich gestartet","trading-assistant.messages.startFailed":"Die Richtlinie konnte nicht gestartet werden","trading-assistant.messages.stopSuccess":"Die Strategie wurde erfolgreich beendet","trading-assistant.messages.stopFailed":"Die Stoppstrategie ist fehlgeschlagen","trading-assistant.messages.loadFailed":"Richtlinienliste konnte nicht abgerufen werden","trading-assistant.messages.runningWarning":"Die Strategie läuft. Bitte stoppen Sie die Strategie, bevor Sie sie ändern.","trading-assistant.messages.deleteConfirmWithName":"Sind Sie sicher, dass Sie die Richtlinie „{name}“ löschen möchten? Dieser Vorgang ist irreversibel.","trading-assistant.messages.deleteConfirm":"Sind Sie sicher, dass Sie diese Richtlinie löschen möchten? Dieser Vorgang ist irreversibel.","trading-assistant.messages.loadTradesFailed":"Transaktionsdatensätze konnten nicht abgerufen werden","trading-assistant.messages.loadPositionsFailed":"Positionsdatensatz konnte nicht abgerufen werden","trading-assistant.messages.loadEquityFailed":"Die Eigenkapitalkurve konnte nicht ermittelt werden","trading-assistant.messages.loadIndicatorsFailed":"Die Indikatorliste konnte nicht geladen werden. Bitte versuchen Sie es später noch einmal","trading-assistant.messages.spotLimitations":"Der Spot-Handel wurde automatisch auf „Nur Long“ mit 1-facher Hebelwirkung eingestellt","trading-assistant.messages.autoFillApiConfig":"Die historische API-Konfiguration der Börse wurde automatisch ausgefüllt","trading-assistant.placeholders.selectIndicator":"Bitte wählen Sie einen Indikator aus","trading-assistant.placeholders.selectExchange":"Bitte wählen Sie einen Austausch aus","trading-assistant.placeholders.selectMarketCategory":"Bitte Marktkategorie auswählen","trading-assistant.placeholders.inputApiKey":"Bitte geben Sie den API-Schlüssel ein","trading-assistant.placeholders.inputSecretKey":"Bitte geben Sie den Geheimschlüssel ein","trading-assistant.placeholders.inputPassphrase":"Bitte geben Sie die Passphrase ein","trading-assistant.placeholders.inputStrategyName":"Bitte geben Sie einen Richtliniennamen ein","trading-assistant.placeholders.selectSymbol":"Bitte wählen Sie ein Handelspaar aus","trading-assistant.placeholders.inputSymbol":"Bitte Symbol eingeben","trading-assistant.placeholders.selectTimeframe":"Bitte wählen Sie einen Zeitraum aus","trading-assistant.placeholders.selectKlinePeriod":"Bitte wählen Sie einen K-Linien-Zeitraum aus","trading-assistant.placeholders.inputAiFilterPrompt":"Bitte geben Sie eine benutzerdefinierte Eingabeaufforderung ein (optional)","trading-assistant.placeholders.inputEmail":"Bitte E-Mail eingeben","trading-assistant.placeholders.inputPhone":"Bitte Telefonnummer eingeben","trading-assistant.placeholders.inputTelegram":"Bitte Telegram Chat-ID / Benutzername eingeben","trading-assistant.placeholders.inputDiscord":"Bitte Discord Webhook-URL eingeben","trading-assistant.placeholders.inputWebhook":"Bitte Webhook-URL eingeben","trading-assistant.placeholders.selectSavedCredential":"Gespeicherte Zugangsdaten auswählen","trading-assistant.placeholders.inputCredentialName":"Zum Beispiel: Binance Hauptschlüssel","trading-assistant.validation.indicatorRequired":"Bitte wählen Sie einen Indikator aus","trading-assistant.validation.exchangeRequired":"Bitte wählen Sie einen Austausch aus","trading-assistant.validation.apiKeyRequired":"Bitte geben Sie den API-Schlüssel ein","trading-assistant.validation.secretKeyRequired":"Bitte geben Sie den Geheimschlüssel ein","trading-assistant.validation.passphraseRequired":"Bitte geben Sie die Passphrase ein","trading-assistant.validation.exchangeConfigIncomplete":"Bitte geben Sie die vollständigen Exchange-Konfigurationsinformationen ein","trading-assistant.validation.testConnectionRequired":'Bitte klicken Sie zuerst auf die Schaltfläche "Verbindung testen" und stellen Sie sicher, dass die Verbindung erfolgreich ist',"trading-assistant.validation.testConnectionFailed":"Verbindungstest fehlgeschlagen, bitte überprüfen Sie die Konfiguration und testen Sie erneut","trading-assistant.validation.credentialRequired":"Bitte fügen Sie zuerst die Börsenanmeldedaten im Persönlichen Zentrum hinzu und testen Sie sie","trading-assistant.validation.strategyNameRequired":"Bitte geben Sie einen Richtliniennamen ein","trading-assistant.validation.symbolRequired":"Bitte wählen Sie ein Handelspaar aus","trading-assistant.validation.initialCapitalRequired":"Bitte geben Sie den Anlagebetrag ein","trading-assistant.validation.leverageRequired":"Bitte geben Sie die Leverage Ratio ein","trading-assistant.validation.emailInvalid":"Ungültige E-Mail-Adresse","trading-assistant.validation.notifyChannelRequired":"Bitte wählen Sie mindestens einen Benachrichtigungskanal aus","trading-assistant.table.time":"Zeit","trading-assistant.table.type":"Typ","trading-assistant.table.price":"Preis","trading-assistant.table.amount":"Menge","trading-assistant.table.value":"Betrag","trading-assistant.table.commission":"Bearbeitungsgebühr","trading-assistant.table.symbol":"Handelspaar","trading-assistant.table.side":"Richtung","trading-assistant.table.size":"Positionsmenge","trading-assistant.table.entryPrice":"Eröffnungspreis","trading-assistant.table.currentPrice":"aktueller Preis","trading-assistant.table.unrealizedPnl":"nicht realisierter Gewinn oder Verlust","trading-assistant.table.pnlPercent":"Gewinn- und Verlustquote","trading-assistant.table.buy":"kaufen","trading-assistant.table.sell":"verkaufen","trading-assistant.table.long":"Geh lange","trading-assistant.table.short":"kurz","trading-assistant.table.noPositions":"Noch keine Stellen","trading-assistant.detail.title":"Strategiedetails","trading-assistant.detail.strategyName":"Richtlinienname","trading-assistant.detail.strategyType":"Strategietyp","trading-assistant.detail.status":"Status","trading-assistant.detail.tradingMode":"Handelsmodell","trading-assistant.detail.exchange":"Austausch","trading-assistant.detail.initialCapital":"Anfangskapital","trading-assistant.detail.totalInvestment":"Gesamtinvestitionsbetrag","trading-assistant.detail.currentEquity":"Aktuelles Nettovermögen","trading-assistant.detail.totalPnl":"Gesamtgewinn und -verlust","trading-assistant.detail.indicatorName":"Indikatorname","trading-assistant.detail.maxLeverage":"Maximale Hebelwirkung","trading-assistant.detail.decideInterval":"Entscheidungsintervall","trading-assistant.detail.symbols":"Transaktionsobjekt","trading-assistant.detail.createdAt":"Schöpfungszeit","trading-assistant.detail.updatedAt":"Aktualisierungszeit","trading-assistant.detail.llmConfig":"Konfiguration des KI-Modells","trading-assistant.detail.exchangeConfig":"Exchange-Konfiguration","trading-assistant.detail.provider":"Anbieter","trading-assistant.detail.modelId":"Modell-ID","trading-assistant.detail.close":"Schließen","trading-assistant.detail.loadFailed":"Richtliniendetails konnten nicht abgerufen werden","trading-assistant.equity.noData":"Noch keine Daten zum Vermögen","trading-assistant.equity.equity":"Nettovermögen","trading-assistant.exchange.tradingMode":"Handelsmodell","trading-assistant.exchange.virtual":"simulierter Handel","trading-assistant.exchange.live":"Echte Transaktion","trading-assistant.exchange.selectExchange":"Austausch auswählen","trading-assistant.exchange.walletAddress":"Wallet-Adresse","trading-assistant.exchange.walletAddressPlaceholder":"Bitte geben Sie Ihre Wallet-Adresse ein (beginnend mit 0x)","trading-assistant.exchange.privateKey":"privater Schlüssel","trading-assistant.exchange.privateKeyPlaceholder":"Bitte geben Sie den privaten Schlüssel ein (64 Zeichen)","trading-assistant.exchange.testConnection":"Testverbindung","trading-assistant.exchange.connectionSuccess":"Verbindung erfolgreich","trading-assistant.exchange.connectionFailed":"Verbindung fehlgeschlagen","trading-assistant.exchange.testFailed":"Verbindungstest fehlgeschlagen","trading-assistant.exchange.fillComplete":"Bitte geben Sie die vollständigen Exchange-Konfigurationsinformationen ein","trading-assistant.strategyTypeOptions.ai":"KI-gesteuerte Strategie","trading-assistant.strategyTypeOptions.indicator":"Technische Indikatorstrategie","trading-assistant.strategyTypeOptions.aiDeveloping":"Die KI-gesteuerte Strategiefunktion befindet sich in der Entwicklung, also bleiben Sie dran","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"KI-gesteuerte Strategiefunktionen sind in der Entwicklung","trading-assistant.indicatorType.trend":"Trend","trading-assistant.indicatorType.momentum":"Schwung","trading-assistant.indicatorType.volatility":"Fluktuation","trading-assistant.indicatorType.volume":"Lautstärke","trading-assistant.indicatorType.custom":"Anpassen","trading-assistant.exchangeNames":{okx:"OKX",binance:"Binance",hyperliquid:"Hyperliquid",blockchaincom:"Blockchain.com",coinbaseexchange:"Coinbase",gate:"Gate.io",mexc:"MEXC",kraken:"Kraken",bitfinex:"Bitfinex",bybit:"Bybit",kucoin:"KuCoin",huobi:"Huobi",bitget:"Bitget",bitmex:"BitMEX",deribit:"Deribit",phemex:"Phemex",bitmart:"BitMart",bitstamp:"Bitstamp",bittrex:"Bittrex",poloniex:"Poloniex",gemini:"Zwillinge",cryptocom:"Crypto.com",bitflyer:"bitFlyer",upbit:"Upbit",bithumb:"Bithumb",coinone:"Coinone",zb:"ZB",lbank:"LBank",bibox:"Bibox",bigone:"BigONE",bitrue:"Bitrue",coinex:"CoinEx",digifinex:"DigiFinex",ftx:"FTX",ftxus:"FTX USA",binanceus:"Binance USA",binancecoinm:"Binance COIN-M",binanceusdm:"Binance USDⓈ-M",deepcoin:"Deepcoin"},"ai-trading-assistant.title":"KI-Handelsassistent","ai-trading-assistant.strategyList":"Strategieliste","ai-trading-assistant.createStrategy":"Richtlinie erstellen","ai-trading-assistant.noStrategy":"Noch keine Strategie","ai-trading-assistant.selectStrategy":"Bitte wählen Sie links eine Strategie aus, um Details anzuzeigen","ai-trading-assistant.startStrategy":"Startstrategie","ai-trading-assistant.stopStrategy":"Stoppstrategie","ai-trading-assistant.editStrategy":"Redaktionelle Strategie","ai-trading-assistant.deleteStrategy":"Richtlinie löschen","ai-trading-assistant.status.running":"Laufen","ai-trading-assistant.status.stopped":"Angehalten","ai-trading-assistant.status.error":"Fehler","ai-trading-assistant.tabs.tradingRecords":"Transaktionsverlauf","ai-trading-assistant.tabs.positions":"Positionsaufzeichnung","ai-trading-assistant.tabs.aiDecisions":"KI-Entscheidungsaufzeichnung","ai-trading-assistant.tabs.equityCurve":"Eigenkapitalkurve","ai-trading-assistant.form.createTitle":"Erstellen Sie KI-Handelsstrategien","ai-trading-assistant.form.editTitle":"Bearbeiten Sie die KI-Handelsstrategie","ai-trading-assistant.form.strategyName":"Richtlinienname","ai-trading-assistant.form.modelId":"KI-Modell","ai-trading-assistant.form.modelIdHint":"Verwenden Sie den OpenRouter-Systemdienst, ohne den API-Schlüssel zu konfigurieren","ai-trading-assistant.form.decideInterval":"Entscheidungsintervall","ai-trading-assistant.form.decideInterval5m":"5 Minuten","ai-trading-assistant.form.decideInterval10m":"10 Minuten","ai-trading-assistant.form.decideInterval30m":"30 Minuten","ai-trading-assistant.form.decideInterval1h":"1 Stunde","ai-trading-assistant.form.decideInterval4h":"4 Stunden","ai-trading-assistant.form.decideInterval1d":"1 Tag","ai-trading-assistant.form.decideInterval1w":"1 Woche","ai-trading-assistant.form.decideIntervalHint":"Das Zeitintervall, in dem die KI Entscheidungen trifft","ai-trading-assistant.form.runPeriod":"Laufzyklus","ai-trading-assistant.form.runPeriodHint":"Die Startzeit und Endzeit des Strategielaufs","ai-trading-assistant.form.startDate":"Startdatum","ai-trading-assistant.form.endDate":"Enddatum","ai-trading-assistant.form.qdtCostTitle":"Anweisungen zum QDT-Abzug","ai-trading-assistant.form.qdtCostHint":"{cost} QDT wird für jede KI-Entscheidung abgezogen. Bitte stellen Sie sicher, dass Ihr Konto über ausreichend QDT-Guthaben verfügt. Während der Umsetzung der Strategie werden für jede Entscheidung Gebühren in Echtzeit abgezogen.","ai-trading-assistant.form.apiKey":"API-Schlüssel","ai-trading-assistant.form.exchange":"Austausch auswählen","ai-trading-assistant.form.secretKey":"Geheimer Schlüssel","ai-trading-assistant.form.passphrase":"Passphrase","ai-trading-assistant.form.testConnection":"Testverbindung","ai-trading-assistant.form.symbol":"Handelspaar","ai-trading-assistant.form.symbolHint":"Wählen Sie das Handelspaar aus, mit dem Sie handeln möchten","ai-trading-assistant.form.initialCapital":"Investierter Betrag (Marge)","ai-trading-assistant.form.leverage":"Nutzen Sie mehrere","ai-trading-assistant.form.timeframe":"Zeitraum","ai-trading-assistant.form.timeframe1m":"1 Minute","ai-trading-assistant.form.timeframe5m":"5 Minuten","ai-trading-assistant.form.timeframe15m":"15 Minuten","ai-trading-assistant.form.timeframe30m":"30 Minuten","ai-trading-assistant.form.timeframe1H":"1 Stunde","ai-trading-assistant.form.timeframe4H":"4 Stunden","ai-trading-assistant.form.timeframe1D":"1 Tag","ai-trading-assistant.form.marketType":"Markttyp","ai-trading-assistant.form.marketTypeFutures":"Vertrag","ai-trading-assistant.form.marketTypeSpot":"Spot","ai-trading-assistant.form.totalPnl":"Gesamtgewinn und -verlust","ai-trading-assistant.form.customPrompt":"Benutzerdefinierte Aufforderungswörter","ai-trading-assistant.form.customPromptHint":"Optional, wird zur Anpassung von KI-Handelsstrategien und Entscheidungslogik verwendet","ai-trading-assistant.form.cancel":"Abbrechen","ai-trading-assistant.form.prev":"Vorheriger Schritt","ai-trading-assistant.form.next":"Nächster Schritt","ai-trading-assistant.form.confirmCreate":"Bestätigen Sie die Erstellung","ai-trading-assistant.form.confirmEdit":"Bestätigen Sie die Änderungen","ai-trading-assistant.messages.createSuccess":"Strategie erfolgreich erstellt","ai-trading-assistant.messages.createFailed":"Richtlinie konnte nicht erstellt werden","ai-trading-assistant.messages.updateSuccess":"Richtlinienaktualisierung erfolgreich","ai-trading-assistant.messages.updateFailed":"Die Aktualisierungsrichtlinie ist fehlgeschlagen","ai-trading-assistant.messages.deleteSuccess":"Richtlinienlöschung erfolgreich","ai-trading-assistant.messages.deleteFailed":"Das Löschen der Richtlinie ist fehlgeschlagen","ai-trading-assistant.messages.startSuccess":"Strategie erfolgreich gestartet","ai-trading-assistant.messages.startFailed":"Die Richtlinie konnte nicht gestartet werden","ai-trading-assistant.messages.stopSuccess":"Die Strategie wurde erfolgreich beendet","ai-trading-assistant.messages.stopFailed":"Die Stoppstrategie ist fehlgeschlagen","ai-trading-assistant.messages.loadFailed":"Richtlinienliste konnte nicht abgerufen werden","ai-trading-assistant.messages.loadDecisionsFailed":"Der KI-Entscheidungsdatensatz konnte nicht abgerufen werden","ai-trading-assistant.messages.deleteConfirm":"Sind Sie sicher, dass Sie diese Richtlinie löschen möchten? Dieser Vorgang ist irreversibel.","ai-trading-assistant.placeholders.inputStrategyName":"Bitte geben Sie einen Richtliniennamen ein","ai-trading-assistant.placeholders.selectModelId":"Bitte wählen Sie ein KI-Modell aus","ai-trading-assistant.placeholders.selectDecideInterval":"Bitte wählen Sie ein Entscheidungsintervall aus","ai-trading-assistant.placeholders.startTime":"Startzeit","ai-trading-assistant.placeholders.endTime":"Endzeit","ai-trading-assistant.placeholders.inputApiKey":"Bitte geben Sie den API-Schlüssel ein","ai-trading-assistant.placeholders.selectExchange":"Bitte wählen Sie einen Austausch aus","ai-trading-assistant.placeholders.inputSecretKey":"Bitte geben Sie den Geheimschlüssel ein","ai-trading-assistant.placeholders.inputPassphrase":"Bitte geben Sie die Passphrase ein","ai-trading-assistant.placeholders.selectSymbol":"Bitte wählen Sie ein Handelspaar aus, zum Beispiel: BTC/USDT","ai-trading-assistant.placeholders.selectTimeframe":"Bitte wählen Sie einen Zeitraum aus","ai-trading-assistant.placeholders.inputCustomPrompt":"Bitte geben Sie ein benutzerdefiniertes Aufforderungswort ein (optional)","ai-trading-assistant.validation.strategyNameRequired":"Bitte geben Sie einen Richtliniennamen ein","ai-trading-assistant.validation.modelIdRequired":"Bitte wählen Sie ein KI-Modell aus","ai-trading-assistant.validation.runPeriodRequired":"Bitte wählen Sie einen Laufzyklus aus","ai-trading-assistant.validation.apiKeyRequired":"Bitte geben Sie den API-Schlüssel ein","ai-trading-assistant.validation.exchangeRequired":"Bitte wählen Sie einen Austausch aus","ai-trading-assistant.validation.secretKeyRequired":"Bitte geben Sie den Geheimschlüssel ein","ai-trading-assistant.validation.symbolRequired":"Bitte wählen Sie ein Handelspaar aus","ai-trading-assistant.validation.initialCapitalRequired":"Bitte geben Sie den Anlagebetrag ein","ai-trading-assistant.table.time":"Zeit","ai-trading-assistant.table.type":"Typ","ai-trading-assistant.table.price":"Preis","ai-trading-assistant.table.amount":"Menge","ai-trading-assistant.table.value":"Betrag","ai-trading-assistant.table.symbol":"Handelspaar","ai-trading-assistant.table.side":"Richtung","ai-trading-assistant.table.size":"Positionsmenge","ai-trading-assistant.table.entryPrice":"Eröffnungspreis","ai-trading-assistant.table.currentPrice":"aktueller Preis","ai-trading-assistant.table.unrealizedPnl":"nicht realisierter Gewinn oder Verlust","ai-trading-assistant.table.profit":"Gewinn und Verlust","ai-trading-assistant.table.openLong":"Lange geöffnet","ai-trading-assistant.table.closeLong":"Pinduo","ai-trading-assistant.table.openShort":"Kurz öffnen","ai-trading-assistant.table.closeShort":"leer","ai-trading-assistant.table.addLong":"Gadot","ai-trading-assistant.table.addShort":"kurz hinzufügen","ai-trading-assistant.table.closeShortProfit":"Nehmen Sie Gewinne aus Short-Positionen mit","ai-trading-assistant.table.closeShortStop":"Stop-Loss","ai-trading-assistant.table.closeLongProfit":"Halten Sie lange inne und nehmen Sie Gewinn mit","ai-trading-assistant.table.closeLongStop":"Stop-Loss","ai-trading-assistant.table.buy":"kaufen","ai-trading-assistant.table.sell":"verkaufen","ai-trading-assistant.table.long":"Geh lange","ai-trading-assistant.table.short":"kurz","ai-trading-assistant.table.hold":"halten","ai-trading-assistant.table.reasoning":"Analysegrund","ai-trading-assistant.table.decisions":"Entscheidungsfindung","ai-trading-assistant.table.riskAssessment":"Risikobewertung","ai-trading-assistant.table.confidence":"Vertrauen","ai-trading-assistant.table.totalRecords":"Insgesamt {total} Datensätze","ai-trading-assistant.table.noPositions":"Noch keine Stellen","ai-trading-assistant.detail.title":"Strategiedetails","ai-trading-assistant.equity.noData":"Noch keine Daten zum Vermögen","ai-trading-assistant.equity.equity":"Nettovermögen","ai-trading-assistant.exchange.testFailed":"Verbindungstest fehlgeschlagen","ai-trading-assistant.exchange.connectionSuccess":"Verbindung erfolgreich","ai-trading-assistant.exchange.connectionFailed":"Verbindung fehlgeschlagen","ai-trading-assistant.form.advancedSettings":"Erweiterte Einstellungen","ai-trading-assistant.form.orderMode":"Bestellmodus","ai-trading-assistant.form.orderModeMaker":"Hersteller","ai-trading-assistant.form.orderModeTaker":"Marktpreis (Taker)","ai-trading-assistant.form.orderModeHint":"Im Pending-Order-Modus werden Limit-Orders verwendet und die Bearbeitungsgebühr ist niedriger; Der Marktpreismodus wird sofort ausgeführt und die Bearbeitungsgebühr ist höher.","ai-trading-assistant.form.makerWaitSec":"Wartezeit für ausstehende Bestellungen (Sekunden)","ai-trading-assistant.form.makerWaitSecHint":"Die Zeit, die nach der Bestellung auf die Transaktion gewartet wird. Brechen Sie ab und versuchen Sie es nach einer Zeitüberschreitung erneut.","ai-trading-assistant.form.makerRetries":"Anzahl der Wiederholungsversuche für ausstehende Bestellungen","ai-trading-assistant.form.makerRetriesHint":"Die maximale Anzahl von Wiederholungsversuchen, wenn eine ausstehende Order nicht ausgeführt wird","ai-trading-assistant.form.fallbackToMarket":"Die ausstehende Bestellung schlägt fehl und der Marktpreis wird herabgestuft.","ai-trading-assistant.form.fallbackToMarketHint":"Wenn die ausstehende Eröffnungs-/Schließorder nicht abgeschlossen wurde, wird angegeben, ob sie auf eine Marktorder herabgestuft werden soll, um sicherzustellen, dass die Transaktion abgeschlossen wird.","ai-trading-assistant.form.marginMode":"Margin-Modus","ai-trading-assistant.form.marginModeCross":"Volles Lager","ai-trading-assistant.form.marginModeIsolated":"Isolierte Lage","ai-analysis.title":"Quantenhandelsmaschine","ai-analysis.system.online":"online","ai-analysis.system.agents":"Agent","ai-analysis.system.active":"aktiv","ai-analysis.system.stage":"Bühne","ai-analysis.panel.roster":"Agentenaufstellung","ai-analysis.panel.thinking":"Denken...","ai-analysis.panel.done":"Komplett","ai-analysis.panel.standby":"Standby","ai-analysis.input.title":"Quantenhandelsmaschine","ai-analysis.input.placeholder":"Zielwert auswählen (z. B. BTC/USDT)","ai-analysis.input.watchlist":"Optionale Bestände","ai-analysis.input.start":"Analyse starten","ai-analysis.input.recent":"Letzte Aufgaben:","ai-analysis.vis.stage":"Bühne","ai-analysis.vis.processing":"Verarbeitung","ai-analysis.result.complete":"Analyse abgeschlossen","ai-analysis.result.signal":"Schlusssignal","ai-analysis.result.confidence":"Vertrauen:","ai-analysis.result.new":"neue Analyse","ai-analysis.result.full":"Vollständigen Bericht ansehen","ai-analysis.logs.title":"Systemprotokoll","ai-analysis.modal.title":"vertraulicher Bericht","ai-analysis.modal.fundamental":"Fundamentalanalyse","ai-analysis.modal.technical":"Technische Analyse","ai-analysis.modal.sentiment":"Emotionale Analyse","ai-analysis.modal.risk":"Risikobewertung","ai-analysis.stage.idle":"Standby","ai-analysis.stage.1":"Phase Eins: Mehrdimensionale Analyse","ai-analysis.stage.2":"Phase Zwei: Lang-Kurz-Debatte","ai-analysis.stage.3":"Phase drei: Strategische Planung","ai-analysis.stage.4":"Die vierte Stufe: Überprüfung der Risikokontrolle","ai-analysis.stage.complete":"Komplett","ai-analysis.agent.investment_director":"Investmentdirektor","ai-analysis.agent.role.investment_director":"Umfassende Analyse und abschließendes Fazit","ai-analysis.agent.market":"Marktanalyst","ai-analysis.agent.role.market":"Technologie- und Marktdaten","ai-analysis.agent.fundamental":"Fundamentalanalytiker","ai-analysis.agent.role.fundamental":"Finanzen und Bewertung","ai-analysis.agent.technical":"Technischer Analyst","ai-analysis.agent.role.technical":"Technische Indikatoren und Diagramme","ai-analysis.agent.news":"Nachrichtenanalyst","ai-analysis.agent.role.news":"Globaler Nachrichtenfilter","ai-analysis.agent.sentiment":"Stimmungsanalytiker","ai-analysis.agent.role.sentiment":"Sozial und emotional","ai-analysis.agent.risk":"Risikoanalytiker","ai-analysis.agent.role.risk":"Grundlegender Risikocheck","ai-analysis.agent.bull":"bullischer Forscher","ai-analysis.agent.role.bull":"Wachstumskatalysator-Bergbau","ai-analysis.agent.bear":"bärischer Forscher","ai-analysis.agent.role.bear":"Risiko- und Fehlersuche","ai-analysis.agent.manager":"Forschungsmanager","ai-analysis.agent.role.manager":"Debattenmoderator","ai-analysis.agent.trader":"Händler","ai-analysis.agent.role.trader":"Führungsstratege","ai-analysis.agent.risky":"aktivistischer Analytiker","ai-analysis.agent.role.risky":"aggressive Strategie","ai-analysis.agent.neutral":"Bilanzanalytiker","ai-analysis.agent.role.neutral":"Ausgleichsstrategie","ai-analysis.agent.safe":"konservativer Analytiker","ai-analysis.agent.role.safe":"konservative Strategie","ai-analysis.agent.cro":"Risikokontrollmanager (CRO)","ai-analysis.agent.role.cro":"letzte Entscheidungsbefugnis","ai-analysis.script.market":"OHLCV-Daten werden von wichtigen Börsen abgerufen...","ai-analysis.script.fundamental":"Quartalsfinanzberichte abrufen...","ai-analysis.script.technical":"Analyse technischer Indikatoren und Chartmuster...","ai-analysis.script.news":"Globale Finanznachrichten scannen...","ai-analysis.script.sentiment":"Analyse von Social-Media-Trends...","ai-analysis.script.risk":"Berechnung der historischen Volatilität...","invite.inviteLink":"Einladungslink","invite.copy":"Link kopieren","invite.copySuccess":"Erfolgreich kopieren!","invite.copyFailed":"Der Kopiervorgang ist fehlgeschlagen. Bitte manuell kopieren","invite.noInviteLink":"Der Einladungslink wurde nicht generiert","invite.totalInvites":"Kumulierte Einladungen","invite.totalReward":"Kumulative Belohnungen","invite.rules":"Einladungsregeln","invite.rule1":"Jedes Mal, wenn Sie einen Freund erfolgreich zur Registrierung einladen, erhalten Sie eine Belohnung","invite.rule2":"Wenn der eingeladene Freund die erste Transaktion abschließt, erhalten Sie zusätzliche Belohnungen","invite.rule3":"Einladungsprämien werden direkt an Ihr Konto gesendet","invite.inviteList":"Einladungsliste","invite.tasks":"Missionszentrum","invite.inviteeName":"Eingeladen","invite.inviteTime":"Einladungszeit","invite.status":"Status","invite.reward":"Belohnung","invite.active":"aktiv","invite.inactive":"Nicht aktiviert","invite.completed":"Abgeschlossen","invite.claimed":"Erhalten","invite.pending":"Zu vervollständigen","invite.goToTask":"zu vervollständigen","invite.claimReward":"Belohnungen einfordern","invite.verify":"Verifizierung abgeschlossen","invite.verifySuccess":"Verifizierung erfolgreich! Aufgabe abgeschlossen","invite.verifyNotCompleted":"Die Aufgabe wurde noch nicht abgeschlossen. Bitte schließen Sie die Aufgabe zuerst ab","invite.verifyFailed":"Die Verifizierung ist fehlgeschlagen. Bitte versuchen Sie es später noch einmal","invite.claimSuccess":"{reward} QDT erfolgreich erhalten!","invite.claimFailed":"Fehler beim Sammeln. Bitte versuchen Sie es später noch einmal","invite.totalRecords":"Insgesamt {total} Datensätze","invite.task.twitter.title":"Retweeten an X (Twitter)","invite.task.twitter.desc":"Teilen Sie unsere offiziellen Tweets mit Ihrem X-Konto (Twitter).","invite.task.youtube.title":"Folgen Sie unserem YouTube-Kanal","invite.task.youtube.desc":"Abonnieren und folgen Sie unserem offiziellen YouTube-Kanal","invite.task.telegram.title":"Treten Sie der Telegram-Gruppe bei","invite.task.telegram.desc":"Treten Sie unserer offiziellen Telegram-Community-Gruppe bei","invite.task.discord.title":"Treten Sie einem Discord-Server bei","invite.task.discord.desc":"Treten Sie unserem Discord-Community-Server bei",message:"-","layouts.usermenu.dialog.title":"Informationen","layouts.usermenu.dialog.content":"Möchten Sie sich wirklich abmelden?","layouts.userLayout.title":"Finden Sie die Wahrheit in der Unsicherheit","dashboard.indicator.boundary.message":"Note: The indicator script only computes plots + buy/sell signals. Position sizing, risk, scaling, fees/slippage belong to execution config.","dashboard.indicator.boundary.indicatorRule":"Keep the script to buy/sell only (and set df['buy']/df['sell']). Do NOT implement position management, TP/SL, scaling in the script.","dashboard.indicator.boundary.backtestRule":"Rule: If a bar has a main signal (buy/sell → open/close/reverse), scaling in/out is skipped on the same bar.","dashboard.indicator.guide.title":"Python Indicator & Strategy Development Guide","dashboard.indicator.guide.intro":"This platform supports writing custom technical indicators and trading signals using Python. The system includes built-in pandas and numpy data analysis libraries. You can use standard DataFrame operations to process K-line data and draw charts or mark buy/sell signals.","dashboard.indicator.guide.section1.title":"1. Runtime Environment & Predefined Variables","dashboard.indicator.guide.section1.env":"Your code runs in a browser-based Python environment (Pyodide).","dashboard.indicator.guide.section1.libs":"Pre-installed Libraries","dashboard.indicator.guide.section1.libsDesc":"The following libraries are imported by default, no need to import again:","dashboard.indicator.guide.section1.libsList":"pandas (pd), numpy (np), math, json","dashboard.indicator.guide.section1.data":"Input Data: df","dashboard.indicator.guide.section1.dataDesc":"The system automatically converts current K-line data into a Pandas DataFrame object, variable name is df.","dashboard.indicator.guide.section1.dataColumns":"df contains the following columns (all float type):","dashboard.indicator.guide.section1.dataColumnsList":"time (timestamp, seconds), open, high, low, close, volume","dashboard.indicator.guide.section1.dataNote":"Data index is arranged from old to new (0 is the earliest data, last row is the latest data).","dashboard.indicator.guide.section1.dataIndex":"Important: df index is timestamp (DatetimeIndex), please preserve the index, avoid using .values which loses the index.","dashboard.indicator.guide.section2.title":"2. Parameter Definition","dashboard.indicator.guide.section2.desc":"You can define variables as parameters at the beginning of your code. The system will try to parse statements like variable = value as adjustable parameters.","dashboard.indicator.guide.section2.example":"Parameter Example","dashboard.indicator.guide.section2.exampleCode":"span = 20 or multiplier = 2.0","dashboard.indicator.guide.section3.title":"3. Backtest Signal Setup (Important!)","dashboard.indicator.guide.section3.desc":"If you want your indicator to support backtesting, you must set the following two columns in your code:","dashboard.indicator.guide.section3.backtestRequired":"Required for Backtesting:","dashboard.indicator.guide.section3.backtestBuySignal":"df['buy_signal'] - Boolean Series, True indicates buy signal","dashboard.indicator.guide.section3.backtestSellSignal":"df['sell_signal'] - Boolean Series, True indicates sell signal","dashboard.indicator.guide.section3.backtestExample":"Example:","dashboard.indicator.guide.section3.backtestExampleCode":"df['buy_signal'] = condition_buy
df['sell_signal'] = condition_sell","dashboard.indicator.guide.section3.backtestNote":"Note: Even if you only set output.signals for chart display, you must set these two columns to enable backtesting.","dashboard.indicator.guide.section4.title":"4. Output Requirements: output","dashboard.indicator.guide.section4.desc":"At the end of code execution, you must define a dictionary named output to tell the chart how to display results.","dashboard.indicator.guide.section4.fields":"The output dictionary contains the following fields:","dashboard.indicator.guide.section4.plots":"plots - For drawing lines (e.g., moving averages, RSI)","dashboard.indicator.guide.section4.signals":"signals - For marking buy/sell signals (e.g., arrows, labels)","dashboard.indicator.guide.section4.name":"name - Indicator name (optional)","dashboard.indicator.guide.section4.calculatedVars":"calculatedVars - Calculated variables (optional, for displaying additional information)","dashboard.indicator.guide.section5.title":"5. Plot Configuration (Plots)","dashboard.indicator.guide.section5.desc":"Each object in the plots list represents a line.","dashboard.indicator.guide.section5.table.field":"Field","dashboard.indicator.guide.section5.table.type":"Type","dashboard.indicator.guide.section5.table.required":"Required","dashboard.indicator.guide.section5.table.requiredYes":"Yes","dashboard.indicator.guide.section5.table.requiredNo":"No","dashboard.indicator.guide.section5.table.desc":"Description","dashboard.indicator.guide.section5.table.name":"The name of the indicator line, displayed in the legend","dashboard.indicator.guide.section5.table.data":"Data list, length must match the number of rows in df. Recommended to use series.tolist()","dashboard.indicator.guide.section5.table.color":"Line color (Hex format, e.g. '#ff0000'). If not filled, the system will automatically assign","dashboard.indicator.guide.section5.table.typeDesc":"Chart type, default is 'line'","dashboard.indicator.guide.section5.table.overlay":"Important. True means display on main chart (with K-line), False means display on sub-chart (independent area)","dashboard.indicator.guide.section5.example":"Example: Draw Simple Moving Average (SMA)","dashboard.indicator.guide.section5.exampleCalc":"Calculate SMA","dashboard.indicator.guide.section5.exampleOutput":"Construct Output","dashboard.indicator.guide.section5.exampleOverlay":"Display on main chart","dashboard.indicator.guide.section6.title":"6. Signal Markers (Signals)","dashboard.indicator.guide.section6.desc":"signals are used to mark buy/sell points on specific K-lines through icons or text. Note: This is only for chart display. The backtest system uses df['buy_signal'] and df['sell_signal'].","dashboard.indicator.guide.section6.table.type":"Signal type: 'buy' (buy, marked below K-line) or 'sell' (sell, marked above K-line)","dashboard.indicator.guide.section6.table.data":"Signal data list. Fill price value at signal positions, fill None (or np.nan) at non-signal positions","dashboard.indicator.guide.section6.table.text":'Text displayed on the label (e.g. "B", "S", "Buy", "Sell")',"dashboard.indicator.guide.section6.table.color":"Marker color","dashboard.indicator.guide.section6.hint":"The system automatically handles positioning.","dashboard.indicator.guide.section6.buy":"Markers will be automatically positioned below the Low of the current K-line","dashboard.indicator.guide.section6.sell":"Markers will be automatically positioned above the High of the current K-line","dashboard.indicator.guide.section6.example":"Example: Draw Buy/Sell Signals","dashboard.indicator.guide.section6.exampleInit":"Initialize signal list, fill all with None","dashboard.indicator.guide.section6.exampleLogic":"Simple logic: mark buy when close price is greater than open price","dashboard.indicator.guide.section6.exampleNote":"In actual logic, please use loops or vectorized operations","dashboard.indicator.guide.section6.examplePrice":"Record price","dashboard.indicator.guide.section6.exampleText":"Buy","dashboard.indicator.guide.section7.title":"7. Complete Code Examples","dashboard.indicator.guide.section7.exampleA":"Example A: Dual EMA Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleACode":'# 1. Calculate indicators
df[\'ema_fast\'] = df[\'close\'].ewm(span=5, adjust=False).mean()
df[\'ema_slow\'] = df[\'close\'].ewm(span=13, adjust=False).mean()

# 2. Calculate crossover signals
cross_up = (df[\'ema_fast\'] > df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) <= df[\'ema_slow\'].shift(1))
cross_down = (df[\'ema_fast\'] < df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) >= df[\'ema_slow\'].shift(1))

# 3. 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = cross_up
df[\'close_long\'] = cross_down
df[\'open_short\'] = cross_down
df[\'close_short\'] = cross_up

# 4. Generate signal data for chart display
buy_signals = [df[\'low\'].iloc[i] * 0.995 if cross_up.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if cross_down.iloc[i] else None for i in range(len(df))]

# 5. Build output
output = {
"name": "Dual EMA Strategy",
"plots": [
{"name": "EMA 5", "data": df[\'ema_fast\'].tolist(), "color": "#FF6B6B", "overlay": True},
{"name": "EMA 13", "data": df[\'ema_slow\'].tolist(), "color": "#4ECDC4", "overlay": True}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section7.exampleB":"Example B: Bollinger Bands - Chart Display Only","dashboard.indicator.guide.section7.exampleBCode":'# Calculate Bollinger Bands (chart display only, no backtesting)
length = 20
mult = 2.0
df[\'sma\'] = df[\'close\'].rolling(length).mean()
df[\'std\'] = df[\'close\'].rolling(length).std()
df[\'upper\'] = df[\'sma\'] + mult * df[\'std\']
df[\'lower\'] = df[\'sma\'] - mult * df[\'std\']

output = {
"name": "Bollinger Bands",
"plots": [
{"name": "Upper", "data": df[\'upper\'].tolist(), "color": "#FF5252", "overlay": True},
{"name": "Middle", "data": df[\'sma\'].tolist(), "color": "#2196F3", "overlay": True},
{"name": "Lower", "data": df[\'lower\'].tolist(), "color": "#00E676", "overlay": True}
]
}',"dashboard.indicator.guide.section7.exampleC":"Example C: RSI Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleCCode":'# Calculate RSI
delta = df[\'close\'].diff()
up = delta.clip(lower=0)
down = -1 * delta.clip(upper=0)
ema_up = up.ewm(com=13, adjust=False).mean()
ema_down = down.ewm(com=13, adjust=False).mean()
rs = ema_up / ema_down
df[\'rsi\'] = 100 - (100 / (1 + rs))

# Generate trading signals
buy_condition = df[\'rsi\'] < 30 # Oversold buy
sell_condition = df[\'rsi\'] > 70 # Overbought sell

# 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = buy_condition
df[\'close_long\'] = sell_condition
df[\'open_short\'] = sell_condition
df[\'close_short\'] = buy_condition

# Generate chart signals
buy_signals = [df[\'low\'].iloc[i] * 0.995 if buy_condition.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if sell_condition.iloc[i] else None for i in range(len(df))]

output = {
"name": "RSI Strategy",
"plots": [
{"name": "RSI", "data": df[\'rsi\'].tolist(), "color": "#9C27B0", "overlay": False},
{"name": "Overbought", "data": [70] * len(df), "color": "#FF5252", "style": "dashed", "overlay": False},
{"name": "Oversold", "data": [30] * len(df), "color": "#00E676", "style": "dashed", "overlay": False}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section6.param":"Parameters","dashboard.indicator.guide.section6.calc":"Calculate","dashboard.indicator.guide.section6.output":"Output","dashboard.indicator.guide.section6.generate":"Generate signal data (initialize with None)","dashboard.indicator.guide.section6.subchart":"Display on sub-chart","dashboard.indicator.guide.section8.title":"8. Frequently Asked Questions (FAQ)","dashboard.indicator.guide.section8.q1":"Q: Why can't my indicator be backtested?","dashboard.indicator.guide.section8.a1":"A: The backtest system requires NEW signal columns: df['open_long'], df['close_long'], df['open_short'], df['close_short'] (boolean). Even if you set output.signals for chart display, you must set these columns to enable backtesting.","dashboard.indicator.guide.section8.q2":"Q: Data length mismatch?","dashboard.indicator.guide.section8.a2":"A: The data list in plots and signals must have exactly the same length as the K-line data. If you use df['xxx'].tolist(), there is usually no problem.","dashboard.indicator.guide.section8.q3":"Q: How to handle NaN (empty values)?","dashboard.indicator.guide.section8.a3":"A: Pandas calculations (such as rolling mean) will produce NaN at the beginning. The system will automatically convert NaN to null for chart rendering. You don't need to manually clean it, but if you need specific logic, you can use df.fillna(0) or other methods.","dashboard.indicator.guide.section8.q4":"Q: Index mismatch causing all signals to be NaN?","dashboard.indicator.guide.section8.a4":"A: Please ensure you preserve the original df index (timestamp). Avoid using .values to create new Series. Use columns directly like df['close'] for operations.","dashboard.indicator.guide.section8.q5":"Q: Can I use third-party network libraries?","dashboard.indicator.guide.section8.a5":"A: No. The runtime environment is a browser sandbox and cannot use libraries like requests to request external APIs, nor can it install additional pip packages. Limited to built-in libraries such as pandas, numpy, math, json.","dashboard.indicator.guide.section8.q6":"Q: How to debug code?","dashboard.indicator.guide.section8.a6":"A: If the chart does not display indicators, it is usually because the Python code has an error. Please check for syntax errors or array index out of bounds. It is recommended to debug the algorithm logic in a local Python environment first, then copy it in.","dashboard.indicator.guide.section8.q7":"Q: Backtest shows 0 signals?","dashboard.indicator.guide.section8.a7":"A: Please check the data type of df['open_long']/df['close_long']/df['open_short']/df['close_short']. They should be boolean (True/False), not numeric. Use condition.fillna(False).astype(bool) to ensure correct type.","dashboard.indicator.backtest.commissionHint":"Charged on notional value (incl. leverage) per trade; both entry & exit are deducted from balance.","dashboard.indicator.backtest.historyTitle":"Backtest History","dashboard.indicator.backtest.historyRefresh":"Refresh","dashboard.indicator.backtest.historyView":"View","dashboard.indicator.backtest.historyNoData":"No backtest history","dashboard.indicator.backtest.historyUseCurrent":"Only current symbol/timeframe","dashboard.indicator.backtest.historyFilterSymbol":"Symbol","dashboard.indicator.backtest.historyFilterTimeframe":"Timeframe","dashboard.indicator.backtest.historyApply":"Apply filters","dashboard.indicator.backtest.historyAIAnalyze":"AI Analyze","dashboard.indicator.backtest.historyAIAnalyzeTitle":"AI Suggestions","dashboard.indicator.backtest.historyNoAIResult":"No AI analysis result","dashboard.indicator.backtest.historyRunId":"Run ID","dashboard.indicator.backtest.historyCreatedAt":"Time","dashboard.indicator.backtest.historyRange":"Range","dashboard.indicator.backtest.historyStatus":"Status","dashboard.indicator.backtest.historyStatusSuccess":"Success","dashboard.indicator.backtest.historyStatusFailed":"Failed","dashboard.indicator.backtest.historyActions":"Actions","dashboard.indicator.backtest.hint.entryPctMax":"Max entry: {maxPct}% (reserve budget for future scale-ins)","trading-assistant.exchange.ipWhitelistTip":"Please add the following IPs to the whitelist in your exchange API settings:","signal-robot.title":"Signal Robot Console","signal-robot.createBot":"Create New Bot","signal-robot.search.nameOrSymbol":"Name/Symbol","signal-robot.search.placeholder":"Search bot name or symbol","signal-robot.search.status":"Status","signal-robot.search.statusAll":"All","signal-robot.search.statusRunning":"Running","signal-robot.search.statusPaused":"Paused","signal-robot.search.query":"Query","signal-robot.search.reset":"Reset","signal-robot.table.botName":"Bot Name","signal-robot.table.symbolTimeframe":"Symbol/Timeframe","signal-robot.table.triggerStrategy":"Trigger Strategy","signal-robot.table.notificationChannels":"Notification Channels","signal-robot.table.status":"Status","signal-robot.table.action":"Action","signal-robot.table.triggerConditions":"{count} trigger conditions","signal-robot.table.monitoring":"Monitoring","signal-robot.table.paused":"Paused","signal-robot.table.edit":"Edit","signal-robot.table.pause":"Pause","signal-robot.table.start":"Start","signal-robot.table.delete":"Delete","signal-robot.table.deleteConfirm":"Are you sure you want to delete this bot?","signal-robot.table.deleteSuccess":"Deleted successfully","signal-robot.table.startSuccess":"Bot started","signal-robot.table.pauseSuccess":"Bot paused","signal-robot.channel.telegram":"Telegram","signal-robot.channel.discord":"Discord","signal-robot.channel.email":"Email","signal-robot.channel.webhook":"Webhook","signal-robot.channel.browser":"Browser Push","signal-robot.modal.createTitle":"Create New Signal Robot","signal-robot.modal.editTitle":"Edit Signal Robot","signal-robot.modal.step.basic":"Basic Settings","signal-robot.modal.step.entry":"Entry Strategy","signal-robot.modal.step.position":"Position Management","signal-robot.modal.step.risk":"Risk Control","signal-robot.modal.step.notify":"Notification Config","signal-robot.modal.prev":"Previous","signal-robot.modal.next":"Next","signal-robot.modal.preview":"Preview Backtest","signal-robot.modal.complete":"Complete & Run","signal-robot.modal.saveSuccess":"Saved successfully","signal-robot.modal.previewDeveloping":"Preview feature is under development...","signal-robot.modal.basicInfoRequired":"Please complete basic information","signal-robot.basic.alert":"Set basic information for the bot","signal-robot.basic.title":"Basic Information","signal-robot.basic.botName":"Bot Name","signal-robot.basic.botNamePlaceholder":"e.g.: BTC SuperTrend Strategy","signal-robot.basic.symbol":"Trading Pair","signal-robot.basic.symbolPlaceholder":"Select from watchlist","signal-robot.basic.noWatchlist":"No watchlist items, please add in market page first","signal-robot.basic.timeframe":"K-Line Period","signal-robot.basic.timeframe15m":"15 Minutes","signal-robot.basic.timeframe30m":"30 Minutes","signal-robot.basic.timeframe1h":"1 Hour","signal-robot.basic.timeframe4h":"4 Hours","signal-robot.basic.timeframe1d":"1 Day","signal-robot.basic.autoNameSuggestion":"{symbol} Signal Robot","signal-robot.entry.alert":"Trigger entry signal when all conditions below are met","signal-robot.entry.condition":"Condition {index}","signal-robot.entry.indicator":"Indicator","signal-robot.entry.indicatorSupertrend":"SuperTrend","signal-robot.entry.indicatorEma":"EMA (Exponential Moving Average)","signal-robot.entry.indicatorRsi":"RSI (Relative Strength Index)","signal-robot.entry.indicatorMacd":"MACD","signal-robot.entry.indicatorBollinger":"Bollinger Bands","signal-robot.entry.atrPeriod":"ATR Period","signal-robot.entry.multiplier":"Multiplier","signal-robot.entry.triggerSignal":"Trigger Signal","signal-robot.entry.signalTrendBullish":"Trend Bullish","signal-robot.entry.signalTrendBearish":"Trend Bearish","signal-robot.entry.signalIsUptrend":"Is Uptrend","signal-robot.entry.signalIsDowntrend":"Is Downtrend","signal-robot.entry.period":"Period","signal-robot.entry.compareCondition":"Compare Condition","signal-robot.entry.priceAbove":"Price > EMA (Price Above)","signal-robot.entry.priceBelow":"Price < EMA (Price Below)","signal-robot.entry.crossUp":"Price Crosses Above EMA (Golden Cross)","signal-robot.entry.crossDown":"Price Crosses Below EMA (Death Cross)","signal-robot.entry.compare":"Compare","signal-robot.entry.greaterThan":"Greater Than","signal-robot.entry.lessThan":"Less Than","signal-robot.entry.crossUpShort":"Cross Up","signal-robot.entry.crossDownShort":"Cross Down","signal-robot.entry.threshold":"Threshold","signal-robot.entry.selectIndicator":"Please select an indicator to configure parameters","signal-robot.entry.addCondition":"Add Condition","signal-robot.position.alert":"Configure initial position size, leverage and pyramiding rules","signal-robot.position.basicTitle":"Basic Position Management","signal-robot.position.initialSize":"Initial Size (Capital %)","signal-robot.position.initialSizeHint":"Recommended 5% - 20%","signal-robot.position.leverage":"Leverage","signal-robot.position.leverageHint":"Please ensure your exchange account supports this leverage","signal-robot.position.maxPyramiding":"Max Pyramiding Times","signal-robot.position.maxPyramidingHint":"0 means no pyramiding","signal-robot.position.pyramidingTitle":"Pyramiding Rules","signal-robot.position.pyramidingEnabled":"Enabled","signal-robot.position.pyramidingDisabled":"Disabled","signal-robot.position.pyramidingCondition":"Pyramiding Trigger Condition","signal-robot.position.priceRisePct":"Price Rises (Long) / Falls (Short)","signal-robot.position.profitPct":"Profit Reaches","signal-robot.position.triggerThreshold":"Trigger Threshold (%)","signal-robot.position.triggerThresholdHint":"e.g. 3%: add position once every 3% rise","signal-robot.position.addSize":"Single Add Size (Capital %)","signal-robot.position.pyramidingDisabledHint":"Pyramiding disabled, only initial position will be executed","signal-robot.risk.alert":"Configure take profit, stop loss and exit rules","signal-robot.risk.stopLossTitle":"Stop Loss","signal-robot.risk.stopLossEnabled":"Enabled","signal-robot.risk.stopLossDisabled":"Disabled","signal-robot.risk.stopLossType":"Stop Loss Type","signal-robot.risk.stopLossFixedPct":"Fixed Percentage","signal-robot.risk.stopLossAtrMultiplier":"ATR Multiplier","signal-robot.risk.stopLossValue":"Value","signal-robot.risk.stopLossFixedHint":"e.g. 2%: stop loss when loss reaches 2%","signal-robot.risk.stopLossAtrHint":"e.g. 2.0: stop loss when price touches ATR*2.0","signal-robot.risk.stopLossDisabledHint":"Stop loss disabled (high risk)","signal-robot.risk.trailingStopTitle":"Trailing Stop","signal-robot.risk.activationProfit":"Activation Profit (%)","signal-robot.risk.activationProfitHint":"Start trailing when profit reaches this level","signal-robot.risk.callbackPct":"Callback (%)","signal-robot.risk.callbackPctHint":"Trigger take profit when price falls from peak by this percentage","signal-robot.risk.trailingStopDisabledHint":"Trailing stop disabled","signal-robot.risk.otherExitTitle":"Other Exit Rules","signal-robot.risk.signalExit":"Allow Signal Exit","signal-robot.risk.signalExitHint":"Close position immediately when reverse signal appears (e.g. close long when short signal appears)","signal-robot.notify.alert":"Configure notification methods when signal is triggered","signal-robot.notify.channelTitle":"Notification Channels","signal-robot.notify.discordWebhook":"Discord Webhook","signal-robot.notify.genericWebhook":"Generic Webhook","signal-robot.notify.webhookUrl":"Webhook URL","signal-robot.notify.webhookUrlPlaceholder":"https://example.com/webhook","signal-robot.notify.discordUrl":"Discord URL","signal-robot.notify.discordUrlPlaceholder":"https://discord.com/api/webhooks/...","signal-robot.operator.greaterThan":"Greater Than","signal-robot.operator.lessThan":"Less Than","signal-robot.operator.equal":"Equal","signal-robot.operator.goldenCross":"Golden Cross","signal-robot.operator.deathCross":"Death Cross","signal-robot.operator.increaseBy":"Increase By","signal-robot.operator.decreaseBy":"Decrease By","signal-robot.indicator.price":"Price","signal-robot.indicator.rsi":"RSI","signal-robot.indicator.kdjK":"KDJ(K)","signal-robot.indicator.kdjJ":"KDJ(J)","signal-robot.indicator.macd":"MACD","signal-robot.indicator.macdHist":"MACD Histogram","signal-robot.indicator.bollingerUp":"Bollinger Upper","signal-robot.indicator.bollingerLow":"Bollinger Lower","signal-robot.indicator.volume":"Volume","signal-robot.indicator.changePct1h":"1H Change %","signal-robot.indicator.changePct24h":"24H Change %","signal-robot.indicator.signalLine":"Signal Line","settings.group.agent_memory":"Gedächtnis/Reflexion","settings.group.reflection_worker":"Automatischer Reflexions-Prüf-Worker","settings.field.ENABLE_AGENT_MEMORY":"Agenten-Gedächtnis aktivieren","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"Vektorsuche aktivieren (lokal)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"Embedding-Dimension","settings.field.AGENT_MEMORY_TOP_K":"Top-K Abrufanzahl","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"Kandidatenfenstergröße","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"Halbwertszeit der Zeitabnahme (Tage)","settings.field.AGENT_MEMORY_W_SIM":"Ähnlichkeitsgewicht","settings.field.AGENT_MEMORY_W_RECENCY":"Aktualitätsgewicht","settings.field.AGENT_MEMORY_W_RETURNS":"Renditegewicht","settings.field.ENABLE_REFLECTION_WORKER":"Automatische Verifikation aktivieren","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"Verifikationsintervall (Sek.)","profile.notifications.title":"Benachrichtigungseinstellungen","profile.notifications.hint":"Konfigurieren Sie Ihre Standard-Benachrichtigungsmethoden, die automatisch beim Erstellen von Asset-Monitoren und Alarmen verwendet werden","profile.notifications.defaultChannels":"Standard-Benachrichtigungskanäle","profile.notifications.browser":"In-App-Benachrichtigung","profile.notifications.email":"E-Mail","profile.notifications.phone":"SMS","profile.notifications.telegramBotToken":"Telegram Bot Token","profile.notifications.telegramBotTokenPlaceholder":"Geben Sie Ihren Telegram Bot Token ein","profile.notifications.telegramBotTokenHint":"Erstellen Sie einen Bot über @BotFather um den Token zu erhalten","profile.notifications.telegramChatId":"Telegram Chat ID","profile.notifications.telegramPlaceholder":"Geben Sie Ihre Telegram Chat ID ein (z.B. 123456789)","profile.notifications.telegramHint":"Senden Sie /start an @userinfobot um Ihre Chat ID zu erhalten","profile.notifications.notifyEmail":"Benachrichtigungs-E-Mail","profile.notifications.emailPlaceholder":"E-Mail-Adresse für Benachrichtigungen","profile.notifications.emailHint":"Verwendet standardmäßig die Konto-E-Mail, Sie können eine andere festlegen","profile.notifications.phonePlaceholder":"Telefonnummer eingeben (z.B. +49151234567)","profile.notifications.phoneHint":"Administrator muss Twilio-Dienst konfigurieren","profile.notifications.discordWebhook":"Discord Webhook","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"Erstellen Sie einen Webhook in den Discord-Servereinstellungen","profile.notifications.webhookUrl":"Webhook URL","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"Benutzerdefinierte Webhook-URL, Benachrichtigungen per POST JSON","profile.notifications.webhookToken":"Webhook Token (Optional)","profile.notifications.webhookTokenPlaceholder":"Bearer Token zur Anfrage-Authentifizierung","profile.notifications.webhookTokenHint":"Wird als Authorization: Bearer Token an Webhook gesendet","profile.notifications.testBtn":"Testbenachrichtigung senden","profile.notifications.saveSuccess":"Benachrichtigungseinstellungen gespeichert","profile.notifications.selectChannel":"Bitte wählen Sie mindestens einen Benachrichtigungskanal","profile.notifications.fillTelegramToken":"Bitte Telegram Bot Token eingeben","profile.notifications.fillTelegram":"Bitte Telegram Chat ID eingeben","profile.notifications.fillEmail":"Bitte Benachrichtigungs-E-Mail eingeben","profile.notifications.testSent":"Testbenachrichtigung gesendet, bitte Benachrichtigungskanäle überprüfen"},y=(0,i.A)((0,i.A)({},f),p)}}]); \ No newline at end of file +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[879],{73065:function(e,a,t){t.d(a,{default:function(){return y}});var i=t(76338),n={items_per_page:"/ Seite",jump_to:"Gehe zu",jump_to_confirm:"bestätigen",page:"",prev_page:"Vorherige Seite",next_page:"Nächste Seite",prev_5:"5 Seiten zurück",next_5:"5 Seiten vor",prev_3:"3 Seiten zurück",next_3:"3 Seiten vor"},s=t(85505),r={today:"Heute",now:"Jetzt",backToToday:"Zurück zu Heute",ok:"OK",clear:"Zurücksetzen",month:"Monat",year:"Jahr",timeSelect:"Zeit wählen",dateSelect:"Datum wählen",monthSelect:"Wähle einen Monat",yearSelect:"Wähle ein Jahr",decadeSelect:"Wähle ein Jahrzehnt",yearFormat:"YYYY",dateFormat:"D.M.YYYY",dayFormat:"D",dateTimeFormat:"D.M.YYYY HH:mm:ss",monthBeforeYear:!0,previousMonth:"Vorheriger Monat (PageUp)",nextMonth:"Nächster Monat (PageDown)",previousYear:"Vorheriges Jahr (Ctrl + left)",nextYear:"Nächstes Jahr (Ctrl + right)",previousDecade:"Vorheriges Jahrzehnt",nextDecade:"Nächstes Jahrzehnt",previousCentury:"Vorheriges Jahrhundert",nextCentury:"Nächstes Jahrhundert"},o={placeholder:"Zeit auswählen"},d=o,l={lang:(0,s.A)({placeholder:"Datum auswählen",rangePlaceholder:["Startdatum","Enddatum"]},r),timePickerLocale:(0,s.A)({},d)},c=l,g=c,u={locale:"de",Pagination:n,DatePicker:c,TimePicker:d,Calendar:g,Table:{filterTitle:"Filter-Menü",filterConfirm:"OK",filterReset:"Zurücksetzen",selectAll:"Selektiere Alle",selectInvert:"Selektion Invertieren"},Modal:{okText:"OK",cancelText:"Abbrechen",justOkText:"OK"},Popconfirm:{okText:"OK",cancelText:"Abbrechen"},Transfer:{searchPlaceholder:"Suchen",itemUnit:"Eintrag",itemsUnit:"Einträge"},Upload:{uploading:"Hochladen...",removeFile:"Datei entfernen",uploadError:"Fehler beim Hochladen",previewFile:"Dateivorschau",downloadFile:"Download-Datei"},Empty:{description:"Keine Daten"}},h=u,b=t(77853),m=t.n(b),f={antLocale:h,momentName:"de",momentLocale:m()},p={submit:"Senden",save:"speichern","submit.ok":"Übermittlung erfolgreich","save.ok":"Erfolgreich gespeichert","menu.welcome":"Willkommen","menu.home":"Startseite","menu.dashboard":"Armaturenbrett","menu.dashboard.indicator":"Indikatorenanalyse","menu.dashboard.community":"Indikatorgemeinschaft","menu.dashboard.analysis":"KI-Analyse","menu.dashboard.tradingAssistant":"Handelsassistent","menu.dashboard.aiTradingAssistant":"KI-Handelsassistent","menu.dashboard.signalRobot":"Signal-Roboter","menu.dashboard.monitor":"Überwachungsseite","menu.dashboard.workplace":"Werkbank","menu.form":"Formularseite","menu.form.basic-form":"Grundform","menu.form.step-form":"Schritt-für-Schritt-Formular","menu.form.step-form.info":"Schritt-für-Schritt-Formular (Übertragungsinformationen ausfüllen)","menu.form.step-form.confirm":"Schritt-für-Schritt-Formular (Übertragungsinformationen bestätigen)","menu.form.step-form.result":"Schritt-für-Schritt-Formular (vollständig)","menu.form.advanced-form":"Erweiterte Formulare","menu.list":"Listenseite","menu.list.table-list":"Anfrageformular","menu.list.basic-list":"Standardliste","menu.list.card-list":"Kartenliste","menu.list.search-list":"Suchliste","menu.list.search-list.articles":"Suchliste (Artikel)","menu.list.search-list.projects":"Suchliste (Projekt)","menu.list.search-list.applications":"Suchliste (App)","menu.profile":"Detailseite","menu.profile.basic":"Grundlegende Detailseite","menu.profile.advanced":"Erweiterte Detailseite","menu.result":"Ergebnisseite","menu.result.success":"Erfolgsseite","menu.result.fail":"Fehlerseite","menu.exception":"Ausnahmeseite","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"Fehler auslösen","menu.account":"Persönliche Seite","menu.account.center":"Persönliches Zentrum","menu.account.settings":"persönliche Einstellungen","menu.account.trigger":"Triggerfehler","menu.account.logout":"Abmelden","menu.wallet":"meine Brieftasche","menu.docs":"Dokumentenzentrum","menu.docs.detail":"Dokumentdetails","menu.header.refreshPage":"Seite aktualisieren","menu.invite.friends":"Freunde einladen","app.setting.pagestyle":"allgemeine Stileinstellungen","app.setting.pagestyle.light":"Heller Menüstil","app.setting.pagestyle.dark":"Dunkler Menüstil","app.setting.pagestyle.realdark":"Dunkelmodus","app.setting.themecolor":"Themenfarbe","app.setting.navigationmode":"Navigationsmodus","app.setting.sidemenu.nav":"Seitenleistennavigation","app.setting.topmenu.nav":"Navigation in der oberen Leiste","app.setting.content-width":"Breite des Inhaltsbereichs","app.setting.content-width.tooltip":"Diese Einstellung ist nur wirksam, wenn [Navigation in der oberen Leiste]","app.setting.content-width.fixed":"Behoben","app.setting.content-width.fluid":"Streaming","app.setting.fixedheader":"Fester Header","app.setting.fixedheader.tooltip":"Bei festem Header konfigurierbar","app.setting.autoHideHeader":"Kopfzeile beim Scrollen ausblenden","app.setting.fixedsidebar":"Seitenmenü korrigiert","app.setting.sidemenu":"Seitenmenü-Layout","app.setting.topmenu":"Oberes Menülayout","app.setting.othersettings":"Andere Einstellungen","app.setting.weakmode":"Farbschwächemodus","app.setting.multitab":"Multi-Tab-Modus","app.setting.copy":"Einstellungen kopieren","app.setting.loading":"Thema wird geladen","app.setting.copyinfo":"Einstellungen erfolgreich kopieren src/config/defaultSettings.js","app.setting.copy.success":"Kopieren abgeschlossen","app.setting.copy.fail":"Der Kopiervorgang ist fehlgeschlagen","app.setting.theme.switching":"Wechselndes Thema!","app.setting.production.hint":"Die Konfigurationsleiste dient nur der Vorschau in der Entwicklungsumgebung und wird in der Produktionsumgebung nicht angezeigt. Bitte kopieren und ändern Sie die Konfigurationsdatei manuell.","app.setting.themecolor.daybreak":"Morgenblau (Standard)","app.setting.themecolor.dust":"Dämmerung","app.setting.themecolor.volcano":"Vulkan","app.setting.themecolor.sunset":"Sonnenuntergang","app.setting.themecolor.cyan":"Mingqing","app.setting.themecolor.green":"Auroragrün","app.setting.themecolor.geekblue":"Geek blau","app.setting.themecolor.purple":"Jiang Zi","app.setting.tooltip":"Seiteneinstellungen","user.login.userName":"Benutzername","user.login.password":"Passwort","user.login.username.placeholder":"Konto: Admin","user.login.password.placeholder":"Passwort: admin oder ant.design","user.login.message-invalid-credentials":"Die Anmeldung ist fehlgeschlagen. Bitte überprüfen Sie Ihre E-Mail-Adresse und Ihren Bestätigungscode","user.login.message-invalid-verification-code":"Fehler beim Bestätigungscode","user.login.tab-login-credentials":"Anmeldung mit Kontopasswort","user.login.tab-login-email":"E-Mail-Login","user.login.tab-login-mobile":"Anmeldung über die Mobiltelefonnummer","user.login.captcha.placeholder":"Bitte geben Sie den grafischen Bestätigungscode ein","user.login.mobile.placeholder":"Mobiltelefonnummer","user.login.mobile.verification-code.placeholder":"Bestätigungscode","user.login.email.placeholder":"Bitte geben Sie Ihre E-Mail-Adresse ein","user.login.email.verification-code.placeholder":"Bitte geben Sie den Bestätigungscode ein","user.login.email.sending":"Bestätigungscode wird gesendet...","user.login.email.send-success-title":"Tipps","user.login.email.send-success":"Der Bestätigungscode wurde erfolgreich gesendet. Bitte überprüfen Sie Ihre E-Mails","user.login.sms.send-success":"Der Bestätigungscode wurde erfolgreich gesendet. Bitte überprüfen Sie die Textnachricht","user.login.remember-me":"Automatische Anmeldung","user.login.forgot-password":"Passwort vergessen","user.login.sign-in-with":"Andere Anmeldemethoden","user.login.signup":"Registrieren Sie ein Konto","user.login.login":"Anmelden","user.register.register":"Registrieren","user.register.email.placeholder":"E-Mail","user.register.password.placeholder":"Bitte geben Sie mindestens 6 Zeichen ein. Bitte verwenden Sie keine Passwörter, die leicht zu erraten sind.","user.register.password.popover-message":"Bitte geben Sie mindestens 6 Zeichen ein. Bitte verwenden Sie keine Passwörter, die leicht zu erraten sind.","user.register.confirm-password.placeholder":"Passwort bestätigen","user.register.get-verification-code":"Holen Sie sich den Bestätigungscode","user.register.sign-in":"Melden Sie sich mit einem bestehenden Konto an","user.register-result.msg":"Ihr Konto: {email} Registrierung erfolgreich","user.register-result.activation-email":"Die Aktivierungs-E-Mail wurde an Ihr Postfach gesendet und ist 24 Stunden lang gültig. Bitte melden Sie sich umgehend bei Ihrem E-Mail-Konto an und klicken Sie auf den Link in der E-Mail, um Ihr Konto zu aktivieren.","user.register-result.back-home":"Zurück zur Startseite","user.register-result.view-mailbox":"Überprüfen Sie Ihr Postfach","user.email.required":"Bitte geben Sie Ihre E-Mail-Adresse ein!","user.email.wrong-format":"Das E-Mail-Adressformat ist falsch!","user.userName.required":"Bitte geben Sie Ihren Kontonamen oder Ihre E-Mail-Adresse ein","user.password.required":"Bitte geben Sie Ihr Passwort ein!","user.password.twice.msg":"Die doppelt eingegebenen Passwörter stimmen nicht überein!","user.password.strength.msg":"Das Passwort ist nicht sicher genug","user.password.strength.strong":"Stärke: Stark","user.password.strength.medium":"Stärke: Mittel","user.password.strength.low":"Stärke: gering","user.password.strength.short":"Stärke: zu kurz","user.confirm-password.required":"Bitte bestätigen Sie Ihr Passwort!","user.phone-number.required":"Bitte geben Sie die korrekte Mobiltelefonnummer ein","user.phone-number.wrong-format":"Das Format der Mobiltelefonnummer ist falsch!","user.verification-code.required":"Bitte geben Sie den Verifizierungscode ein!","user.captcha.required":"Bitte geben Sie den grafischen Verifizierungscode ein!","user.login.infos":"QuantDinger ist ein AI-Multi-Agent-Hilfstool für die Aktienanalyse und verfügt nicht über Qualifikationen als Wertpapieranlageberater. Alle Analyseergebnisse, Scores und Referenzmeinungen in der Plattform werden von KI automatisch auf Basis historischer Daten generiert und dienen ausschließlich der Ausbildung, Forschung und dem technischen Austausch und stellen keine Anlageberatung oder Entscheidungsgrundlage dar. Aktienanlagen bergen verschiedene Risiken wie Marktrisiko, Liquiditätsrisiko, politisches Risiko usw., die zu einem Kapitalverlust führen können. Benutzer sollten unabhängige Entscheidungen auf der Grundlage ihrer eigenen Risikotoleranz treffen, und jegliches Investitionsverhalten und alle Konsequenzen, die sich aus der Verwendung dieses Tools ergeben, sind vom Benutzer zu tragen. Der Markt ist riskant und Investitionen müssen vorsichtig sein.","user.login.tab-login-web3":"Web3-Anmeldung","user.login.web3.tip":"Signatur-Login mit Wallet","user.login.web3.connect":"Wallet verbinden und anmelden","user.login.web3.no-wallet":"Wallet nicht erkannt","user.login.web3.no-address":"Wallet-Adresse nicht erhalten","user.login.web3.nonce-failed":"Zufallszahl konnte nicht abgerufen werden","user.login.web3.verify-failed":"Die Signaturüberprüfung ist fehlgeschlagen","user.login.web3.success":"Anmeldung erfolgreich","user.login.web3.failed":"Die Wallet-Anmeldung ist fehlgeschlagen","nav.no_wallet":"Wallet nicht erkannt","nav.copy":"Kopieren","nav.copy_success":"Erfolgreich kopiert","user.login.oauth.google":"Melden Sie sich mit Google an","user.login.oauth.github":"Melden Sie sich mit GitHub an","user.login.oauth.loading":"Weiterleitung zur Autorisierungsseite...","user.login.oauth.failed":"Die OAuth-Anmeldung ist fehlgeschlagen","user.login.oauth.get-url-failed":"Der Autorisierungslink konnte nicht abgerufen werden","user.login.subtitle":"Gezielte quantitative Einblicke in globale Märkte","user.login.legal.title":"Haftungsausschluss","user.login.legal.view":"Rechtlichen Haftungsausschluss anzeigen","user.login.legal.collapse":"Haftungsausschluss einklappen","user.login.legal.agree":"Ich habe den Haftungsausschluss gelesen und stimme ihm zu","user.login.legal.required":"Bitte lesen und überprüfen Sie zunächst den rechtlichen Haftungsausschluss","user.login.legal.content":"QuantDinger ist ein AI-Multi-Agent-Hilfstool für die Aktienanalyse und verfügt nicht über Qualifikationen als Wertpapieranlageberater. Alle Analyseergebnisse, Bewertungen und Referenzmeinungen in der Plattform werden von KI automatisch auf Basis historischer Daten generiert und dienen ausschließlich der Ausbildung, Forschung und dem technischen Austausch und stellen keine Anlageberatung oder Entscheidungsgrundlage dar. Aktienanlagen bergen verschiedene Risiken wie Marktrisiko, Liquiditätsrisiko, politisches Risiko usw., die zu einem Kapitalverlust führen können. Benutzer sollten unabhängige Entscheidungen auf der Grundlage ihrer eigenen Risikotoleranz treffen, und jegliches Investitionsverhalten und alle Konsequenzen, die sich aus der Verwendung dieses Tools ergeben, sind vom Benutzer zu tragen. Der Markt ist riskant und Investitionen müssen vorsichtig sein.","user.login.privacy.title":"Datenschutzrichtlinie für Benutzer","user.login.privacy.view":"Datenschutzrichtlinie für Benutzer anzeigen","user.login.privacy.collapse":"Schließen Sie die Datenschutzbestimmungen für Benutzer","user.login.privacy.content":"Wir legen Wert auf Ihre Privatsphäre und Ihren Datenschutz. 1) Erfassungsumfang: Es werden nur die zur Umsetzung der Funktion erforderlichen Informationen (z. B. E-Mail, Mobiltelefonnummer, Vorwahl, Web3-Wallet-Adresse) sowie notwendige Protokolle und Geräteinformationen erfasst. 2) Verwendungszweck: Zur Kontoanmeldung und Sicherheitsüberprüfung, Bereitstellung von Servicefunktionen, Fehlerbehebung und Compliance-Anforderungen. 3) Speicherung und Sicherheit: Daten werden verschlüsselt und gespeichert, und es werden die erforderlichen Berechtigungen und Zugriffskontrollmaßnahmen ergriffen, um unbefugten Zugriff, Offenlegung oder Verlust zu verhindern. 4) Weitergabe an Dritte: Sofern dies nicht durch Gesetze und Vorschriften vorgeschrieben oder für die Erbringung von Dienstleistungen erforderlich ist, werden Ihre personenbezogenen Daten nicht an Dritte weitergegeben. Bei Einbindung von Diensten Dritter (z. B. Wallets, SMS-Dienstleister) erfolgt die Verarbeitung nur im für die Umsetzung der Funktion erforderlichen Mindestumfang. 5) Cookies/lokale Speicherung: werden für den Anmeldestatus und die notwendige Sitzungswartung verwendet (z. B. Token, PHPSESSID). Sie können sie im Browser löschen oder einschränken. 6) Persönlichkeitsrechte: Sie können Ihre Rechte auf Auskunft, Berichtigung, Löschung, Widerruf der Einwilligung usw. gemäß den Gesetzen und Vorschriften ausüben. 7) Änderungen und Hinweise: Wenn diese Bedingungen aktualisiert werden, werden sie gut sichtbar auf der Seite angezeigt. Durch die weitere Nutzung dieses Dienstes wird davon ausgegangen, dass Sie den aktualisierten Inhalt gelesen und ihm zugestimmt haben. Wenn Sie diesen Bedingungen oder deren Aktualisierungen nicht zustimmen, stellen Sie bitte die Nutzung des Dienstes ein und kontaktieren Sie uns.","account.basicInfo":"Grundlegende Informationen","account.id":"Benutzer-ID","account.username":"Benutzername","account.nickname":"Spitzname","account.email":"E-Mail","account.mobile":"Mobiltelefonnummer","account.web3address":"Wallet-Adresse","account.pid":"Referrer-ID","account.level":"Benutzerebene","account.money":"Gleichgewicht","account.qdtBalance":"QDT-Balance","account.score":"Punkte","account.createtime":"Anmeldezeit","account.inviteLink":"Einladungslink","account.recharge":"Aufladen","account.rechargeTip":"Bitte verwenden Sie WeChat oder Alipay, um den untenstehenden QR-Code zum Aufladen zu scannen.","account.qrCodePlaceholder":"QR-Code-Platzhalter (Emulation)","account.rechargeAmount":"Aufladebetrag","account.enterAmount":"Bitte geben Sie den Aufladebetrag ein","account.rechargeHint":"Mindesteinzahlungsbetrag: 1 QDT","account.confirmRecharge":"Bestätigen Sie das Aufladen","account.enterValidAmount":"Bitte geben Sie einen gültigen Aufladebetrag ein","account.rechargeSuccess":"Aufladen erfolgreich! {amount} QDT eingezahlt","account.settings.menuMap.basic":"Grundeinstellungen","account.settings.menuMap.security":"Sicherheitseinstellungen","account.settings.menuMap.notification":"Benachrichtigung über neue Nachrichten","account.settings.menuMap.moneyLog":"Details zum Fonds","account.moneyLog.empty":"Noch keine Fondsdetails","account.moneyLog.total":"Insgesamt {total} Datensätze","account.moneyLog.type.purchase":"Kaufindikator","account.moneyLog.type.recharge":"Aufladen","account.moneyLog.type.refund":"Rückerstattung","account.moneyLog.type.reward":"Belohnung","account.moneyLog.type.income":"Indikatoreinkommen","account.moneyLog.type.commission":"Bearbeitungsgebühr für die Plattform","wallet.balance":"QDT-Balance","wallet.recharge":"Aufladen","wallet.withdraw":"Bargeld abheben","wallet.filter":"Filtern","wallet.reset":"zurückgesetzt","wallet.totalRecharge":"Akkumulierte Aufladung","wallet.totalWithdraw":"Kumulierte Abhebungen","wallet.totalIncome":"Kumuliertes Einkommen","wallet.records":"Transaktionsaufzeichnungen und Fondsdetails","wallet.tradingRecords":"Transaktionsverlauf","wallet.moneyLog":"Details zum Fonds","wallet.rechargeTip":"Bitte verwenden Sie WeChat oder Alipay, um den untenstehenden QR-Code zum Aufladen zu scannen.","wallet.qrCodePlaceholder":"QR-Code-Platzhalter (Emulation)","wallet.rechargeAmount":"Aufladebetrag","wallet.enterAmount":"Bitte geben Sie den Aufladebetrag ein","wallet.rechargeHint":"Mindesteinzahlungsbetrag: 1 QDT","wallet.confirmRecharge":"Bestätigen Sie das Aufladen","wallet.enterValidAmount":"Bitte geben Sie einen gültigen Aufladebetrag ein","wallet.rechargeSuccess":"Aufladen erfolgreich! {amount} QDT eingezahlt","wallet.rechargeFailed":"Das Aufladen ist fehlgeschlagen","wallet.withdrawTip":"Bitte geben Sie den Auszahlungsbetrag und die Auszahlungsadresse ein","wallet.withdrawAmount":"Betrag abheben","wallet.enterWithdrawAmount":"Bitte geben Sie den Auszahlungsbetrag ein","wallet.withdrawHint":"Mindestauszahlungsbetrag: 1 QDT","wallet.withdrawAddress":"Auszahlungsadresse (optional)","wallet.enterWithdrawAddress":"Bitte geben Sie die Auszahlungsadresse ein","wallet.confirmWithdraw":"Auszahlung bestätigen","wallet.enterValidWithdrawAmount":"Bitte geben Sie einen gültigen Auszahlungsbetrag ein","wallet.insufficientBalance":"Unzureichendes Gleichgewicht","wallet.withdrawSuccess":"Auszahlung erfolgreich! {Betrag} QDT abgehoben","wallet.withdrawFailed":"Die Auszahlung ist fehlgeschlagen","wallet.noTradingRecords":"Noch kein Transaktionsdatensatz","wallet.noMoneyLog":"Noch keine Fondsdetails","wallet.loadTradingRecordsFailed":"Transaktionsdatensätze konnten nicht geladen werden","wallet.loadMoneyLogFailed":"Die Fondsdetails konnten nicht geladen werden","wallet.moneyLogTotal":"Insgesamt {total} Datensätze","wallet.moneyLogTypeTitle":"Typ","wallet.moneyLogType.all":"Alle Arten","wallet.table.time":"Zeit","wallet.table.type":"Typ","wallet.table.price":"Preis","wallet.table.amount":"Menge","wallet.table.money":"Betrag","wallet.table.balance":"Gleichgewicht","wallet.table.memo":"Bemerkungen","wallet.table.value":"Wert","wallet.table.profit":"Gewinn und Verlust","wallet.table.commission":"Bearbeitungsgebühr","wallet.table.total":"Insgesamt {total} Datensätze","wallet.tradeType.buy":"kaufen","wallet.tradeType.sell":"verkaufen","wallet.tradeType.liquidation":"Zwangsliquidation","wallet.tradeType.openLong":"Lange geöffnet","wallet.tradeType.addLong":"Gadot","wallet.tradeType.closeLong":"Pinduo","wallet.tradeType.closeLongStop":"Stop-Loss und Long","wallet.tradeType.closeLongProfit":"Nehmen Sie Gewinn mit und steigern Sie Ihr Level","wallet.tradeType.openShort":"Kurz öffnen","wallet.tradeType.addShort":"kurz hinzufügen","wallet.tradeType.closeShort":"leer","wallet.tradeType.closeShortStop":"Stop-Loss","wallet.tradeType.closeShortProfit":"Nehmen Sie den Gewinn mit und schließen Sie mit Leerverkäufen","wallet.moneyLogType.purchase":"Kaufindikator","wallet.moneyLogType.recharge":"Aufladen","wallet.moneyLogType.withdraw":"Bargeld abheben","wallet.moneyLogType.refund":"Rückerstattung","wallet.moneyLogType.reward":"Belohnung","wallet.moneyLogType.income":"Einkommen","wallet.moneyLogType.commission":"Bearbeitungsgebühr","wallet.web3Address.required":"Bitte geben Sie zuerst die Web3-Wallet-Adresse ein","wallet.web3Address.requiredDescription":"Vor dem Aufladen müssen Sie Ihre Web3-Wallet-Adresse verknüpfen, um eine Aufladung zu erhalten.","wallet.web3Address.placeholder":"Bitte geben Sie Ihre Web3-Wallet-Adresse ein (beginnend mit 0x)","wallet.web3Address.save":"Wallet-Adresse speichern","wallet.web3Address.saveSuccess":"Wallet-Adresse erfolgreich gespeichert","wallet.web3Address.saveFailed":"Wallet-Adresse konnte nicht gespeichert werden","wallet.web3Address.invalidFormat":"Bitte geben Sie eine gültige Web3-Wallet-Adresse ein (Ethereum-Format: 42 Zeichen, beginnend mit 0x, oder TRC20-Format: 34 Zeichen, beginnend mit T)","wallet.selectCoin":"Währung auswählen","wallet.selectChain":"Auswahlkette","wallet.chain.eth":"ETH(ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"BSC","wallet.targetQdtAmount":"Der QDT-Betrag, den Sie einlösen möchten (optional)","wallet.targetQdtAmount.placeholder":"Bitte geben Sie die Menge an QDT ein, die Sie einlösen möchten, den aktuellen QDT-Preis: {price} USDT","wallet.targetQdtAmount.requiredUsdt":"Aufladung erforderlich: {amount} USDT","wallet.rechargeAddress":"Aufladeadresse","wallet.copyAddress":"Kopieren","wallet.copySuccess":"Erfolgreich kopieren!","wallet.copyFailed":"Der Kopiervorgang ist fehlgeschlagen. Bitte manuell kopieren","wallet.rechargeAddressHint":"Bitte stellen Sie sicher, dass Sie {chain} verwenden, um {coin} an diese Adresse einzuzahlen","wallet.qdtPrice.loading":"Laden...","wallet.rechargeTip.new":"Bitte wählen Sie die Währung und die Kette aus und scannen Sie dann den untenstehenden QR-Code zum Aufladen","wallet.exchangeRate":"1 QDT ≈ {rate} USDT","wallet.withdrawableAmount":"Verfügbarer Bargeldbetrag","wallet.totalBalance":"Gesamtsaldo","wallet.insufficientWithdrawable":"Der Bargeldbetrag, der abgehoben werden kann, reicht nicht aus. Der aktuelle Betrag, der abgehoben werden kann, ist: {amount} QDT","wallet.withdrawAddressRequired":"Bitte geben Sie die Auszahlungsadresse ein","wallet.withdrawAddressHint":"Bitte stellen Sie sicher, dass die Adresse korrekt ist. Nach dem Widerruf ist ein Widerruf nicht mehr möglich.","wallet.withdrawSubmitSuccess":"Auszahlungsantrag erfolgreich eingereicht, bitte warten Sie auf die Prüfung","menu.footer.contactUs":"Kontaktieren Sie uns","menu.footer.getSupport":"Holen Sie sich Unterstützung","menu.footer.socialAccounts":"soziales Konto","menu.footer.userAgreement":"Benutzervereinbarung","menu.footer.privacyPolicy":"Datenschutzrichtlinie","menu.footer.support":"Unterstützung","menu.footer.featureRequest":"Funktionsanfrage","menu.footer.email":"E-Mail","menu.footer.liveChat":"Live-Chat rund um die Uhr","dashboard.analysis.title":"Mehrdimensionale Analyse","dashboard.analysis.subtitle":"KI-gesteuerte umfassende Finanzanalyseplattform","dashboard.analysis.selectSymbol":"Wählen Sie den zugrunde liegenden Code aus oder geben Sie ihn ein","dashboard.analysis.selectModel":"Modell auswählen","dashboard.analysis.startAnalysis":"Analyse starten","dashboard.analysis.history":"Geschichte","dashboard.analysis.tab.overview":"umfassende Analyse","dashboard.analysis.tab.fundamental":"Grundlagen","dashboard.analysis.tab.technical":"Technologie","dashboard.analysis.tab.news":"Nachrichten","dashboard.analysis.tab.sentiment":"Emotionen","dashboard.analysis.tab.risk":"Risiko","dashboard.analysis.tab.debate":"Die Lang-Kurz-Debatte","dashboard.analysis.tab.decision":"endgültige Entscheidung","dashboard.analysis.empty.selectSymbol":"Wählen Sie ein Ziel aus, um die Analyse zu starten","dashboard.analysis.empty.selectSymbolDesc":"Wählen Sie aus der selbstgewählten Aktienliste aus oder geben Sie den zugrunde liegenden Code ein, um einen mehrdimensionalen KI-Analysebericht zu erhalten","dashboard.analysis.empty.startAnalysis":"Klicken Sie auf die Schaltfläche „Analyse starten“, um eine mehrdimensionale Analyse durchzuführen","dashboard.analysis.empty.startAnalysisDesc":"Wir bieten Ihnen umfassende Analysen aus mehreren Dimensionen wie Fundamentaldaten, Technologie, Nachrichten, Stimmung und Risiko","dashboard.analysis.empty.noData":"Derzeit liegen keine {type}-Analysedaten vor. Bitte führen Sie zunächst eine umfassende Analyse durch","dashboard.analysis.empty.noWatchlist":"Derzeit gibt es keine selbstgewählten Aktien","dashboard.analysis.empty.noHistory":"Noch keine Geschichte","dashboard.analysis.empty.watchlistHint":"Derzeit sind keine selbstgewählten Aktien vorhanden, bitte zuerst","dashboard.analysis.empty.noDebateData":"Noch keine Debattendaten","dashboard.analysis.empty.noDecisionData":"Noch keine Entscheidungsdaten","dashboard.analysis.empty.selectAgent":"Bitte wählen Sie einen Agenten aus, um die Analyseergebnisse anzuzeigen","dashboard.analysis.loading.analyzing":"Analyse läuft, bitte warten...","dashboard.analysis.loading.fundamental":"Fundamentaldaten analysieren...","dashboard.analysis.loading.technical":"Analyse technischer Indikatoren...","dashboard.analysis.loading.news":"Nachrichtendaten werden analysiert...","dashboard.analysis.loading.sentiment":"Marktstimmung analysieren...","dashboard.analysis.loading.risk":"Risiko einschätzen...","dashboard.analysis.loading.debate":"Die Lang-Kurz-Debatte geht weiter...","dashboard.analysis.loading.decision":"Endgültige Entscheidung generieren...","dashboard.analysis.score.overall":"Gesamtbewertung","dashboard.analysis.score.recommendation":"Anlageberatung","dashboard.analysis.score.confidence":"Vertrauen","dashboard.analysis.dimension.fundamental":"Grundlagen","dashboard.analysis.dimension.technical":"Technologie","dashboard.analysis.dimension.news":"Nachrichten","dashboard.analysis.dimension.sentiment":"Emotionen","dashboard.analysis.dimension.risk":"Risiko","dashboard.analysis.card.dimensionScores":"Bewertungen für jede Dimension","dashboard.analysis.card.overviewReport":"Umfassender Analysebericht","dashboard.analysis.card.financialMetrics":"Finanzindikatoren","dashboard.analysis.card.fundamentalReport":"Fundamentalanalysebericht","dashboard.analysis.card.technicalIndicators":"Technische Indikatoren","dashboard.analysis.card.technicalReport":"Technischer Analysebericht","dashboard.analysis.card.newsList":"Verwandte Neuigkeiten","dashboard.analysis.card.newsReport":"Bericht zur Nachrichtenanalyse","dashboard.analysis.card.sentimentIndicators":"Stimmungsindikator","dashboard.analysis.card.sentimentReport":"Stimmungsanalysebericht","dashboard.analysis.card.riskMetrics":"Risikoindikatoren","dashboard.analysis.card.riskReport":"Risikobewertungsbericht","dashboard.analysis.card.bullView":"Bullische Sichtweise (Bull)","dashboard.analysis.card.bearView":"Bärische Sichtweise (Bär)","dashboard.analysis.card.researchConclusion":"Fazit des Forschers","dashboard.analysis.card.traderPlan":"Händlerplan","dashboard.analysis.card.riskDebate":"Debatte im Risikoausschuss","dashboard.analysis.card.finalDecision":"Endgültige Entscheidung","dashboard.analysis.card.tradePlanDetail":"Einzelheiten zum Handelsplan","dashboard.analysis.tradingPlan.entry_price":"Eintrittspreis","dashboard.analysis.tradingPlan.position_size":"Positionsgröße","dashboard.analysis.tradingPlan.stop_loss":"Stop-Loss","dashboard.analysis.tradingPlan.take_profit":"Nehmen Sie Gewinn mit","dashboard.analysis.label.confidence":"Vertrauen","dashboard.analysis.label.keyPoints":"Kernpunkte","dashboard.analysis.label.riskWarning":"Risikowarnung","dashboard.analysis.risk.risky":"Riskant","dashboard.analysis.risk.neutral":"Neutraler Standpunkt (Neutral)","dashboard.analysis.risk.safe":"Konservative Sichtweise (sicher)","dashboard.analysis.risk.conclusion":"Fazit","dashboard.analysis.feature.fundamental":"Fundamentalanalyse","dashboard.analysis.feature.technical":"technische Analyse","dashboard.analysis.feature.news":"Nachrichtenanalyse","dashboard.analysis.feature.sentiment":"Stimmungsanalyse","dashboard.analysis.feature.risk":"Risikobewertung","dashboard.analysis.watchlist.title":"Meine Aktienauswahl","dashboard.analysis.watchlist.add":"hinzufügen","dashboard.analysis.watchlist.addStock":"Brühe hinzufügen","dashboard.analysis.modal.addStock.title":"Fügen Sie optionale Aktien hinzu","dashboard.analysis.modal.addStock.confirm":"Okay","dashboard.analysis.modal.addStock.cancel":"Abbrechen","dashboard.analysis.modal.addStock.market":"Markttyp","dashboard.analysis.modal.addStock.marketPlaceholder":"Bitte wählen Sie einen Markt aus","dashboard.analysis.modal.addStock.marketRequired":"Bitte wählen Sie den Markttyp aus","dashboard.analysis.modal.addStock.symbol":"Lagercode","dashboard.analysis.modal.addStock.symbolPlaceholder":"Zum Beispiel: AAPL, TSLA, GOOGL, 000001, BTC","dashboard.analysis.modal.addStock.symbolRequired":"Bitte Lagercode eingeben","dashboard.analysis.modal.addStock.searchPlaceholder":"Suchen Sie nach Zielcode oder Name","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"Suchen Sie den zugrunde liegenden Code oder geben Sie ihn ein (z. B. AAPL, BTC/USDT, EUR/USD).","dashboard.analysis.modal.addStock.searchOrInputHint":"Unterstützt die Suche nach Objekten in der Datenbank oder die direkte Eingabe des Codes (das System erhält den Namen automatisch).","dashboard.analysis.modal.addStock.search":"Suchen","dashboard.analysis.modal.addStock.searchResults":"Suchergebnisse","dashboard.analysis.modal.addStock.hotSymbols":"Beliebte Ziele","dashboard.analysis.modal.addStock.noHotSymbols":"Noch keine beliebten Ziele","dashboard.analysis.modal.addStock.selectedSymbol":"Ausgewählt","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"Bitte wählen Sie zunächst ein Ziel aus","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"Bitte wählen Sie ein Ziel aus oder geben Sie zuerst den Zielcode ein","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"Bitte geben Sie den Zielcode ein","dashboard.analysis.modal.addStock.pleaseSelectMarket":"Bitte wählen Sie zunächst den Markttyp aus","dashboard.analysis.modal.addStock.searchFailed":"Die Suche ist fehlgeschlagen. Bitte versuchen Sie es später erneut","dashboard.analysis.modal.addStock.noSearchResults":"Kein passendes Ziel gefunden","dashboard.analysis.modal.addStock.willAutoFetchName":"Das System erhält den Namen automatisch","dashboard.analysis.modal.addStock.addDirectly":"Direkt hinzufügen","dashboard.analysis.modal.addStock.nameWillBeFetched":"Der Name wird beim Hinzufügen automatisch übernommen","dashboard.analysis.market.USStock":"US-Aktien","dashboard.analysis.market.Crypto":"Kryptowährung","dashboard.analysis.market.Forex":"Forex","dashboard.analysis.market.Futures":"Futures","dashboard.analysis.modal.history.title":"Historische Analyseaufzeichnungen","dashboard.analysis.modal.history.viewResult":"Ergebnisse anzeigen","dashboard.analysis.modal.history.completeTime":"Fertigstellungszeit","dashboard.analysis.modal.history.error":"Fehler","dashboard.analysis.status.pending":"Ausstehend","dashboard.analysis.status.processing":"Verarbeitung","dashboard.analysis.status.completed":"Abgeschlossen","dashboard.analysis.status.failed":"gescheitert","dashboard.analysis.message.selectSymbol":"Bitte wählen Sie zuerst das Ziel aus","dashboard.analysis.message.taskCreated":"Die Analyseaufgabe wurde erstellt und wird im Hintergrund ausgeführt...","dashboard.analysis.message.analysisComplete":"Analyse abgeschlossen","dashboard.analysis.message.analysisCompleteCache":"Analyse abgeschlossen (unter Verwendung zwischengespeicherter Daten)","dashboard.analysis.message.analysisFailed":"Die Analyse ist fehlgeschlagen. Bitte versuchen Sie es später noch einmal","dashboard.analysis.message.addStockSuccess":"Erfolgreich hinzugefügt","dashboard.analysis.message.addStockFailed":"Das Hinzufügen ist fehlgeschlagen","dashboard.analysis.message.removeStockSuccess":"Erfolgreich entfernt","dashboard.analysis.message.removeStockFailed":"Das Entfernen ist fehlgeschlagen","dashboard.analysis.message.resumingAnalysis":"Analyseaufgabe wird fortgesetzt...","dashboard.analysis.message.deleteSuccess":"Erfolgreich gelöscht","dashboard.analysis.message.deleteFailed":"Löschen fehlgeschlagen","dashboard.analysis.modal.history.delete":"Löschen","dashboard.analysis.modal.history.deleteConfirm":"Möchten Sie diesen Analysedatensatz wirklich löschen?","dashboard.analysis.test":"Geschäft Nr. {no}, Gongzhuan Road","dashboard.analysis.introduce":"Beschreibung des Indikators","dashboard.analysis.total-sales":"Gesamtumsatz","dashboard.analysis.day-sales":"Durchschnittlicher Tagesumsatz¥","dashboard.analysis.visits":"Besuche","dashboard.analysis.visits-trend":"Verkehrstrends","dashboard.analysis.visits-ranking":"Ranking der Ladenbesuche","dashboard.analysis.day-visits":"Tägliche Besuche","dashboard.analysis.week":"Wöchentlich im Jahresvergleich","dashboard.analysis.day":"Jahr für Jahr","dashboard.analysis.payments":"Anzahl der Zahlungen","dashboard.analysis.conversion-rate":"Umrechnungskurs","dashboard.analysis.operational-effect":"Auswirkungen der betrieblichen Tätigkeit","dashboard.analysis.sales-trend":"Verkaufstrends","dashboard.analysis.sales-ranking":"Ranking der Filialverkäufe","dashboard.analysis.all-year":"Das ganze Jahr über","dashboard.analysis.all-month":"diesen Monat","dashboard.analysis.all-week":"diese Woche","dashboard.analysis.all-day":"heute","dashboard.analysis.search-users":"Anzahl der Suchbenutzer","dashboard.analysis.per-capita-search":"Suchanfragen pro Kopf","dashboard.analysis.online-top-search":"Beliebte Suchanfragen im Internet","dashboard.analysis.the-proportion-of-sales":"Anteil der Verkaufskategorie","dashboard.analysis.dropdown-option-one":"Operation eins","dashboard.analysis.dropdown-option-two":"Betrieb 2","dashboard.analysis.channel.all":"Alle Kanäle","dashboard.analysis.channel.online":"online","dashboard.analysis.channel.stores":"speichern","dashboard.analysis.sales":"Verkäufe","dashboard.analysis.traffic":"Passagierfluss","dashboard.analysis.table.rank":"Rangliste","dashboard.analysis.table.search-keyword":"Suchbegriffe suchen","dashboard.analysis.table.users":"Anzahl der Benutzer","dashboard.analysis.table.weekly-range":"Wöchentliche Erhöhung","dashboard.indicator.selectSymbol":"Wählen Sie den zugrunde liegenden Code aus oder geben Sie ihn ein","dashboard.indicator.emptyWatchlistHint":"Derzeit sind keine selbst ausgewählten Aktien vorhanden. Bitte fügen Sie diese zuerst hinzu","dashboard.indicator.hint.selectSymbol":"Bitte wählen Sie ein Ziel aus, um mit der Analyse zu beginnen","dashboard.indicator.hint.selectSymbolDesc":"Wählen Sie einen Aktiencode aus oder geben Sie ihn in das Suchfeld oben ein, um K-Line-Diagramme und technische Indikatoren anzuzeigen","dashboard.indicator.retry":"Versuchen Sie es erneut","dashboard.indicator.panel.title":"Technische Indikatoren","dashboard.indicator.panel.realtimeOn":"Deaktivieren Sie Echtzeit-Updates","dashboard.indicator.panel.realtimeOff":"Aktivieren Sie Echtzeit-Updates","dashboard.indicator.panel.themeLight":"Wechseln Sie zum dunklen Thema","dashboard.indicator.panel.themeDark":"Wechseln Sie zum Lichtthema","dashboard.indicator.section.enabled":"Aktiviert","dashboard.indicator.section.added":"Indikatoren, die ich hinzugefügt habe","dashboard.indicator.section.custom":"Von Ihnen selbst erstellte Indikatoren","dashboard.indicator.section.bought":"Indikatoren, die ich gekauft habe","dashboard.indicator.section.myCreated":"Von mir erstellte Indikatoren","dashboard.indicator.empty":"Es gibt noch keinen Indikator. Bitte fügen Sie zuerst einen Indikator hinzu oder erstellen Sie ihn","dashboard.indicator.buy":"Kaufindikator","dashboard.indicator.action.start":"beginnen","dashboard.indicator.action.stop":"Schließen","dashboard.indicator.action.edit":"Bearbeiten","dashboard.indicator.action.delete":"Löschen","dashboard.indicator.action.backtest":"Backtest","dashboard.indicator.status.normal":"normal","dashboard.indicator.status.normalPermanent":"Normal (dauerhaft gültig)","dashboard.indicator.status.expired":"Abgelaufen","dashboard.indicator.expiry.permanent":"Dauerhaft gültig","dashboard.indicator.expiry.noExpiry":"Keine Ablaufzeit","dashboard.indicator.expiry.expired":"Abgelaufen: {Datum}","dashboard.indicator.expiry.expiresOn":"Ablaufzeit: {Datum}","dashboard.indicator.delete.confirmTitle":"Bestätigen Sie den Löschvorgang","dashboard.indicator.delete.confirmContent":"Sind Sie sicher, dass Sie den Indikator „{name}“ löschen möchten? Dieser Vorgang ist irreversibel.","dashboard.indicator.delete.confirmOk":"Löschen","dashboard.indicator.delete.confirmCancel":"Abbrechen","dashboard.indicator.delete.success":"Erfolgreich löschen","dashboard.indicator.delete.failed":"Das Löschen ist fehlgeschlagen","dashboard.indicator.save.success":"Erfolgreich gespeichert","dashboard.indicator.save.failed":"Speichern fehlgeschlagen","dashboard.indicator.error.loadWatchlistFailed":"Optionale Bestände konnten nicht geladen werden","dashboard.indicator.error.chartNotReady":"Die Diagrammkomponente ist nicht initialisiert. Bitte wählen Sie zuerst das Ziel aus und warten Sie, bis das Diagramm geladen ist.","dashboard.indicator.error.chartMethodNotReady":"Die Diagrammkomponentenmethode ist nicht bereit. Bitte versuchen Sie es später erneut","dashboard.indicator.error.chartExecuteNotReady":"Die Ausführungsmethode der Diagrammkomponente ist nicht bereit. Bitte versuchen Sie es später erneut","dashboard.indicator.error.parseFailed":"Python-Code kann nicht analysiert werden","dashboard.indicator.error.parseFailedCheck":"Der Python-Code kann nicht analysiert werden. Bitte überprüfen Sie das Codeformat","dashboard.indicator.error.addIndicatorFailed":"Der Indikator konnte nicht hinzugefügt werden","dashboard.indicator.error.runIndicatorFailed":"Die Laufanzeige ist fehlgeschlagen","dashboard.indicator.error.pleaseLogin":"Bitte melden Sie sich zuerst an","dashboard.indicator.error.loadDataFailed":"Das Laden der Daten ist fehlgeschlagen","dashboard.indicator.error.loadDataFailedDesc":"Bitte überprüfen Sie die Netzwerkverbindung","dashboard.indicator.error.pythonEngineFailed":"Die Python-Engine konnte nicht geladen werden und die Indikatorfunktion ist möglicherweise nicht verfügbar.","dashboard.indicator.error.chartInitFailed":"Die Initialisierung des Diagramms ist fehlgeschlagen","dashboard.indicator.warning.enterCode":"Bitte geben Sie zuerst den Indikatorcode ein","dashboard.indicator.warning.pyodideLoadFailed":"Die Python-Engine konnte nicht geladen werden","dashboard.indicator.warning.pyodideLoadFailedDesc":"Diese Funktion ist in Ihrer aktuellen Region oder Netzwerkumgebung nicht verfügbar","dashboard.indicator.warning.chartNotInitialized":"Das Diagramm ist nicht initialisiert und das Linienzeichnungstool kann nicht verwendet werden.","dashboard.indicator.success.runIndicator":"Indikator läuft erfolgreich","dashboard.indicator.success.clearDrawings":"Alle Strichzeichnungen gelöscht","dashboard.indicator.sma":"SMA (gleitende Durchschnittskombination)","dashboard.indicator.ema":"EMA (exponentielle gleitende Durchschnittskombination)","dashboard.indicator.rsi":"RSI (relative Stärke)","dashboard.indicator.macd":"MACD","dashboard.indicator.bb":"Bollinger-Bänder","dashboard.indicator.atr":"ATR (Average True Range)","dashboard.indicator.cci":"CCI (Commodity Channel Index)","dashboard.indicator.williams":"Williams %R (Williams-Indikator)","dashboard.indicator.mfi":"MFI (Geldflussindex)","dashboard.indicator.adx":"ADX (durchschnittlicher Trendindex)","dashboard.indicator.obv":"OBV (Energiewelle)","dashboard.indicator.adosc":"ADOSC (Akkumulieren/Dispatch-Oszillator)","dashboard.indicator.ad":"AD (Sammel-/Verteilungsleitung)","dashboard.indicator.kdj":"KDJ (stochastischer Indikator)","dashboard.indicator.signal.buy":"KAUFEN","dashboard.indicator.signal.sell":"VERKAUFEN","dashboard.indicator.signal.supertrendBuy":"SuperTrend kaufen","dashboard.indicator.signal.supertrendSell":"SuperTrend verkaufen","dashboard.indicator.chart.kline":"K-Linie","dashboard.indicator.chart.volume":"Lautstärke","dashboard.indicator.chart.uptrend":"Aufwärtstrend","dashboard.indicator.chart.downtrend":"Abwärtstrend","dashboard.indicator.tooltip.time":"Zeit","dashboard.indicator.tooltip.open":"offen","dashboard.indicator.tooltip.close":"erhalten","dashboard.indicator.tooltip.high":"hoch","dashboard.indicator.tooltip.low":"niedrig","dashboard.indicator.tooltip.volume":"Lautstärke","dashboard.indicator.drawing.line":"Liniensegment","dashboard.indicator.drawing.horizontalLine":"horizontale Linie","dashboard.indicator.drawing.verticalLine":"vertikale Linie","dashboard.indicator.drawing.ray":"Strahl","dashboard.indicator.drawing.straightLine":"gerade Linie","dashboard.indicator.drawing.parallelLine":"parallele Linien","dashboard.indicator.drawing.priceLine":"Preislinie","dashboard.indicator.drawing.priceChannel":"Preiskanal","dashboard.indicator.drawing.fibonacciLine":"Fibonacci-Linien","dashboard.indicator.drawing.measure":"Messen","dashboard.indicator.drawing.clearAll":"Löschen Sie alle Strichzeichnungen","dashboard.indicator.market.USStock":"US-Aktien","dashboard.indicator.market.Crypto":"Kryptowährung","dashboard.indicator.market.Forex":"Forex","dashboard.indicator.market.Futures":"Futures","dashboard.indicator.create":"Indikator erstellen","dashboard.indicator.editor.title":"Indikatoren erstellen/bearbeiten","dashboard.indicator.editor.name":"Indikatorname","dashboard.indicator.editor.nameRequired":"Bitte geben Sie den Indikatornamen ein","dashboard.indicator.editor.namePlaceholder":"Bitte geben Sie den Indikatornamen ein","dashboard.indicator.editor.description":"Beschreibung des Indikators","dashboard.indicator.editor.descriptionPlaceholder":"Bitte geben Sie eine Beschreibung des Indikators ein (optional)","dashboard.indicator.editor.code":"Python-Code","dashboard.indicator.editor.codeRequired":"Bitte geben Sie den Indikatorcode ein","dashboard.indicator.editor.codePlaceholder":"Bitte geben Sie Python-Code ein","dashboard.indicator.editor.run":"laufen","dashboard.indicator.editor.runHint":"Klicken Sie auf die Schaltfläche „Ausführen“, um eine Vorschau des Indikatoreffekts im K-Liniendiagramm anzuzeigen","dashboard.indicator.editor.guide":"Entwicklungshandbuch","dashboard.indicator.editor.guideTitle":"Leitfaden zur Entwicklung von Python-Indikatoren","dashboard.indicator.editor.save":"speichern","dashboard.indicator.editor.cancel":"Abbrechen","dashboard.indicator.editor.unnamed":"Unbenannter Indikator","dashboard.indicator.editor.publishToCommunity":"In der Community posten","dashboard.indicator.editor.publishToCommunityHint":"Nach der Veröffentlichung können andere Benutzer Ihren Indikator in der Community anzeigen und verwenden","dashboard.indicator.editor.indicatorType":"Indikatortyp","dashboard.indicator.editor.indicatorTypeRequired":"Bitte wählen Sie den Indikatortyp aus","dashboard.indicator.editor.indicatorTypePlaceholder":"Bitte wählen Sie den Indikatortyp aus","dashboard.indicator.editor.previewImage":"Vorschau","dashboard.indicator.editor.uploadImage":"Bilder hochladen","dashboard.indicator.editor.previewImageHint":"Empfohlene Größe: 800 x 400, nicht mehr als 2 MB","dashboard.indicator.editor.pricing":"Verkaufspreis (QDT)","dashboard.indicator.editor.pricingType.free":"kostenlos","dashboard.indicator.editor.pricingType.permanent":"dauerhaft","dashboard.indicator.editor.pricingType.monthly":"monatliche Zahlung","dashboard.indicator.editor.price":"Preis","dashboard.indicator.editor.priceRequired":"Bitte geben Sie den Preis ein","dashboard.indicator.editor.pricePlaceholder":"Bitte geben Sie den Preis ein","dashboard.indicator.editor.pricingHint":"Obwohl der Preis für kostenlose Indikatoren 0 beträgt, belohnt Sie die Plattform (QDT) basierend auf Ihrer Indikatornutzung und Lobrate.","dashboard.indicator.editor.aiGenerate":"Intelligente Generation","dashboard.indicator.editor.aiPromptPlaceholder":"Teilen Sie mir Ihre Ideen mit und ich werde den Python-Indikatorcode für Sie generieren","dashboard.indicator.editor.aiGenerateBtn":"KI-generierter Code","dashboard.indicator.editor.aiPromptRequired":"Bitte geben Sie Ihre Gedanken ein","dashboard.indicator.editor.aiGenerateSuccess":"Codegenerierung erfolgreich","dashboard.indicator.editor.aiGenerateError":"Die Codegenerierung ist fehlgeschlagen. Bitte versuchen Sie es später noch einmal","dashboard.indicator.backtest.title":"Indikator-Backtest","dashboard.indicator.backtest.config":"Backtest-Parameter","dashboard.indicator.backtest.startDate":"Startdatum","dashboard.indicator.backtest.endDate":"Enddatum","dashboard.indicator.backtest.selectStartDate":"Wählen Sie das Startdatum","dashboard.indicator.backtest.selectEndDate":"Wählen Sie das Enddatum aus","dashboard.indicator.backtest.startDateRequired":"Bitte wählen Sie ein Startdatum aus","dashboard.indicator.backtest.endDateRequired":"Bitte wählen Sie ein Enddatum aus","dashboard.indicator.backtest.initialCapital":"Anfangskapital","dashboard.indicator.backtest.initialCapitalRequired":"Bitte geben Sie den Anfangsbetrag ein","dashboard.indicator.backtest.commission":"Bearbeitungsgebühr","dashboard.indicator.backtest.leverage":"Verschuldungsquote","dashboard.indicator.backtest.tradeDirection":"Handelsrichtung","dashboard.indicator.backtest.longOnly":"Geh lange","dashboard.indicator.backtest.shortOnly":"kurz","dashboard.indicator.backtest.both":"Zweiseitig","dashboard.indicator.backtest.run":"Beginnen Sie mit dem Backtesting","dashboard.indicator.backtest.rerun":"Nochmals Backtest","dashboard.indicator.backtest.close":"Schließen","dashboard.indicator.backtest.running":"Indikator-Backtest läuft...","dashboard.indicator.backtest.results":"Backtest-Ergebnisse","dashboard.indicator.backtest.totalReturn":"Gesamtrendite","dashboard.indicator.backtest.annualReturn":"annualisiertes Einkommen","dashboard.indicator.backtest.maxDrawdown":"maximaler Drawdown","dashboard.indicator.backtest.sharpeRatio":"Sharpe-Ratio","dashboard.indicator.backtest.winRate":"Gewinnquote","dashboard.indicator.backtest.profitFactor":"Gewinn-Verlust-Verhältnis","dashboard.indicator.backtest.totalTrades":"Anzahl der Transaktionen","dashboard.indicator.totalReturn":"Gesamtrendite","dashboard.indicator.annualReturn":"annualisierte Rendite","dashboard.indicator.maxDrawdown":"maximaler Drawdown","dashboard.indicator.sharpeRatio":"Sharpe-Ratio","dashboard.indicator.winRate":"Gewinnquote","dashboard.indicator.profitFactor":"Gewinn-Verlust-Verhältnis","dashboard.indicator.totalTrades":"Gesamtzahl der Transaktionen","dashboard.indicator.backtest.totalCommission":"Gesamtbearbeitungsgebühr","dashboard.indicator.backtest.equityCurve":"Zinskurve","dashboard.indicator.backtest.strategy":"Indikatoreinkommen","dashboard.indicator.backtest.benchmark":"Benchmark-Rendite","dashboard.indicator.backtest.tradeHistory":"Transaktionsverlauf","dashboard.indicator.backtest.tradeTime":"Zeit","dashboard.indicator.backtest.tradeType":"Typ","dashboard.indicator.backtest.buy":"kaufen","dashboard.indicator.backtest.sell":"verkaufen","dashboard.indicator.backtest.liquidation":"Liquidation","dashboard.indicator.backtest.openLong":"Lange geöffnet","dashboard.indicator.backtest.closeLong":"Pinduo","dashboard.indicator.backtest.closeLongStop":"Nahezu long (Stop-Loss)","dashboard.indicator.backtest.closeLongProfit":"Mehr schließen (Gewinn mitnehmen)","dashboard.indicator.backtest.addLong":"Long-Position hinzufügen","dashboard.indicator.backtest.openShort":"Kurz öffnen","dashboard.indicator.backtest.closeShort":"leer","dashboard.indicator.backtest.closeShortStop":"Schließen (Stop-Loss)","dashboard.indicator.backtest.closeShortProfit":"Schließen (Gewinn mitnehmen)","dashboard.indicator.backtest.addShort":"Short-Position hinzufügen","dashboard.indicator.backtest.price":"Preis","dashboard.indicator.backtest.amount":"Menge","dashboard.indicator.backtest.balance":"Kontostand","dashboard.indicator.backtest.profit":"Gewinn und Verlust","dashboard.indicator.backtest.success":"Backtest abgeschlossen","dashboard.indicator.backtest.failed":"Der Backtest ist fehlgeschlagen. Bitte versuchen Sie es später noch einmal","dashboard.indicator.backtest.noIndicatorCode":"Für diesen Indikator gibt es keinen rückprüfbaren Code","dashboard.indicator.backtest.noSymbol":"Bitte wählen Sie zunächst das Transaktionsziel aus","dashboard.indicator.backtest.dateRangeExceeded":"Der Backtest-Zeitbereich überschreitet das Limit: {timeframe} Zeitraum kann höchstens {maxRange} backtestet werden","dashboard.indicator.backtest.dateRangeExceededDays":"Backtest range exceeds limit: {timeframe} max {maxRange} ({maxDays} days)","dashboard.indicator.backtest.metaLine":"Symbol: {symbol} | Market: {market} | Timeframe: {timeframe}","dashboard.indicator.backtest.savedRunId":"Backtest saved. Run ID: {id}","dashboard.indicator.backtest.prev":"Previous","dashboard.indicator.backtest.next":"Next","dashboard.indicator.backtest.steps.strategy.title":"Strategy","dashboard.indicator.backtest.steps.strategy.desc":"Position sizing & risk controls","dashboard.indicator.backtest.steps.trading.title":"Trading settings","dashboard.indicator.backtest.steps.trading.desc":"Time range, capital, fees, leverage","dashboard.indicator.backtest.steps.results.title":"Results","dashboard.indicator.backtest.steps.results.desc":"Backtest output","dashboard.indicator.backtest.panel.risk":"Risk management (SL/TP/Trailing)","dashboard.indicator.backtest.panel.scale":"Scale in / DCA (trend & mean-reversion)","dashboard.indicator.backtest.panel.reduce":"Reduce position (trend & adverse)","dashboard.indicator.backtest.panel.position":"Position sizing","dashboard.indicator.backtest.field.stopLossPct":"Stop Loss (%)","dashboard.indicator.backtest.field.takeProfitPct":"Take Profit (%)","dashboard.indicator.backtest.field.trailingEnabled":"Trailing stop / take profit","dashboard.indicator.backtest.field.trailingStopPct":"Trailing drawdown (%)","dashboard.indicator.backtest.field.trailingActivationPct":"Trailing activation (%)","dashboard.indicator.backtest.field.slippage":"Slippage (%)","dashboard.indicator.backtest.field.trendAddEnabled":"Trend-following scale-in","dashboard.indicator.backtest.field.dcaAddEnabled":"Mean-reversion DCA","dashboard.indicator.backtest.field.trendAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.dcaAddStepPct":"DCA trigger (%)","dashboard.indicator.backtest.field.trendAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.dcaAddSizePct":"DCA size (% of capital)","dashboard.indicator.backtest.field.trendAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.dcaAddMaxTimes":"Max DCA times","dashboard.indicator.backtest.field.trendReduceEnabled":"Trend reduce","dashboard.indicator.backtest.field.adverseReduceEnabled":"Adverse reduce","dashboard.indicator.backtest.field.trendReduceStepPct":"Trend trigger (%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"Adverse trigger (%)","dashboard.indicator.backtest.field.trendReduceSizePct":"Reduce size (% of position)","dashboard.indicator.backtest.field.adverseReduceSizePct":"Adverse reduce size (% of position)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"Max trend reduce times","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"Max adverse reduce times","dashboard.indicator.backtest.field.entryPct":"Entry size (% of capital)","dashboard.indicator.backtest.field.minOrderPct":"Min order size (% of capital) (optional)","dashboard.indicator.backtest.closeLongTrailing":"Close Long (Trailing)","dashboard.indicator.backtest.reduceLong":"Reduce Long","dashboard.indicator.backtest.closeShortTrailing":"Close Short (Trailing)","dashboard.indicator.backtest.reduceShort":"Reduce Short","dashboard.docs.title":"Dokumentenzentrum","dashboard.docs.search.placeholder":"Dokumente durchsuchen...","dashboard.docs.category.all":"Alle","dashboard.docs.category.guide":"Entwicklungshandbuch","dashboard.docs.category.api":"API-Dokumentation","dashboard.docs.category.tutorial":"Anleitung","dashboard.docs.category.faq":"FAQ","dashboard.docs.featured.title":"Empfohlene Dokumentation","dashboard.docs.featured.tag":"Empfohlen","dashboard.docs.list.views":"Durchsuchen","dashboard.docs.list.author":"Autor","dashboard.docs.list.empty":"Noch kein Dokument","dashboard.docs.list.backToAll":"Zurück zu allen Dokumenten","dashboard.docs.list.total":"Insgesamt {count} Dokumente","dashboard.docs.detail.back":"Zurück zur Dokumentenliste","dashboard.docs.detail.updatedAt":"aktualisiert am","dashboard.docs.detail.related":"Verwandte Dokumente","dashboard.docs.detail.notFound":"Dokument existiert nicht","dashboard.docs.detail.error":"Das Dokument existiert nicht oder wurde gelöscht","dashboard.docs.search.result":"Suchergebnisse","dashboard.docs.search.keyword":"Schlüsselwörter","community.filter.indicatorType":"Indikatortyp","community.filter.all":"Alle","community.filter.other":"Andere Optionen","community.filter.pricing":"Preisart","community.filter.allPricing":"Alle Preise","community.filter.sortBy":"Sortieren nach","community.filter.search":"Suchen","community.filter.searchPlaceholder":"Metrikname suchen","community.indicatorType.trend":"Trendtyp","community.indicatorType.momentum":"Impulstyp","community.indicatorType.volatility":"Volatilität","community.indicatorType.volume":"Lautstärke","community.indicatorType.custom":"Anpassen","community.pricing.free":"kostenlos","community.pricing.paid":"Bezahlen","community.sort.downloads":"Downloads","community.sort.rating":"Bewertung","community.sort.newest":"Neueste Veröffentlichungen","community.pagination.total":"{total} Indikatoren insgesamt","community.noDescription":"Noch keine Beschreibung","community.detail.type":"Typ","community.detail.pricing":"Preise","community.detail.rating":"Bewertung","community.detail.downloads":"Downloads","community.detail.author":"Autor","community.detail.description":"Einführung","community.detail.detailContent":"Detaillierte Beschreibung","community.detail.backtestStats":"Backtest-Statistiken","community.action.purchase":"Kaufindikator","community.action.addToMyIndicators":"Zu meinen Indikatoren hinzufügen","community.action.favorite":"Sammlung","community.action.unfavorite":"Favoriten abbrechen","community.action.buyNow":"Jetzt kaufen","community.action.renew":"Erneuerung","community.purchase.price":"Preis","community.purchase.permanent":"dauerhaft","community.purchase.monthly":"Monat","community.purchase.confirmBuy":"Bestätigen Sie den Kauf dieses Indikators ({price} QDT)?","community.purchase.confirmRenew":"Bestätigen Sie die Erneuerung dieses Indikators ({price} QDT/Monat)?","community.purchase.confirmFree":"Bestätigen Sie, dass Sie diesen kostenlosen Indikator hinzufügen möchten?","community.purchase.confirmTitle":"Aktion bestätigen","community.purchase.owned":"Sie haben diesen Indikator erworben (dauerhaft gültig)","community.purchase.ownIndicator":"Dies ist die von Ihnen veröffentlichte Metrik","community.purchase.expired":"Ihr Abonnement ist abgelaufen","community.purchase.expiresOn":"Ablaufzeit: {Datum}","community.tabs.detail":"Indikatordetails","community.tabs.backtest":"Backtest-Daten","community.tabs.ratings":"Benutzerbewertungen","community.rating.myRating":"Meine Bewertung","community.rating.stars":"{count} Sterne","community.rating.commentPlaceholder":"Teilen Sie Ihre Erfahrungen...","community.rating.submit":"Bewertung abgeben","community.rating.modify":"Ändern","community.rating.saveModify":"Änderungen speichern","community.rating.cancel":"Abbrechen","community.rating.selectRating":"Bitte wählen Sie eine Bewertung aus","community.rating.success":"Bewertung erfolgreich","community.rating.modifySuccess":"Bewertung erfolgreich geändert","community.rating.failed":"Bewertung fehlgeschlagen","community.rating.noRatings":"Noch keine Kommentare","community.backtest.note":"Die oben genannten Daten sind historische Backtest-Ergebnisse und dienen nur als Referenz und stellen keine zukünftigen Erträge dar.","community.backtest.noData":"Noch keine Backtest-Daten","community.backtest.uploadHint":"Der Autor hat noch keine Backtest-Daten hochgeladen","community.message.loadFailed":"Die Indikatorliste konnte nicht geladen werden","community.message.purchaseProcessing":"Kaufanfrage wird bearbeitet...","community.message.downloadSuccess":"Die Metrik wurde zu meiner Metrikliste hinzugefügt","community.message.favoriteSuccess":"Sammlung erfolgreich","community.message.unfavoriteSuccess":"Abholung erfolgreich abbrechen","community.message.operationSuccess":"Operation erfolgreich","community.message.operationFailed":"Der Vorgang ist fehlgeschlagen","community.banner.readOnly":"Nur lesen","community.banner.loginHint":"Für Login oder Registrierung bitte auf die Schaltfläche klicken, um zu einer unabhängigen Seite zu wechseln und CSRF-Probleme zu vermeiden","community.banner.jumpButton":"Zur Anmeldung/Registrierung","dashboard.totalEquity":"Gesamteigenkapital","dashboard.totalPnL":"Gesamtgewinn und -verlust","dashboard.aiStrategies":"KI-Strategie","dashboard.indicatorStrategies":"Indikatorstrategie","dashboard.running":"Laufen","dashboard.pnlHistory":"historischer Gewinn und Verlust","dashboard.strategyPerformance":"Gewinn- und Verlustquote der Strategie","dashboard.recentTrades":"aktuelle Transaktionen","dashboard.currentPositions":"Aktuelle Position","dashboard.table.time":"Zeit","dashboard.table.strategy":"Richtlinienname","dashboard.table.symbol":"Ziel","dashboard.table.type":"Typ","dashboard.table.side":"Richtung","dashboard.table.size":"Offenes Interesse","dashboard.table.entryPrice":"durchschnittlicher Eröffnungspreis","dashboard.table.price":"Preis","dashboard.table.amount":"Menge","dashboard.table.profit":"Gewinn und Verlust","dashboard.pendingOrders":"Auftragsausführungsprotokoll","dashboard.totalOrders":"Gesamt {total} Aufträge","dashboard.viewError":"Fehler anzeigen","dashboard.filled":"Ausgeführt","dashboard.orderTable.time":"Erstellungszeit","dashboard.orderTable.strategy":"Strategie","dashboard.orderTable.symbol":"Handelspaar","dashboard.orderTable.signalType":"Signaltyp","dashboard.orderTable.amount":"Menge","dashboard.orderTable.price":"Ausführungspreis","dashboard.orderTable.status":"Status","dashboard.orderTable.executedAt":"Ausführungszeit","dashboard.signalType.openLong":"Long öffnen","dashboard.signalType.openShort":"Short öffnen","dashboard.signalType.closeLong":"Long schließen","dashboard.signalType.closeShort":"Short schließen","dashboard.signalType.addLong":"Long hinzufügen","dashboard.signalType.addShort":"Short hinzufügen","dashboard.status.pending":"Ausstehend","dashboard.status.processing":"In Bearbeitung","dashboard.status.completed":"Abgeschlossen","dashboard.status.failed":"Fehlgeschlagen","dashboard.status.cancelled":"Storniert","dashboard.table.pnl":"nicht realisierter Gewinn oder Verlust","form.basic-form.basic.title":"Grundform","form.basic-form.basic.description":"Formularseiten werden verwendet, um Informationen von Benutzern zu sammeln oder zu überprüfen. Grundformulare werden häufig in Formularszenarien mit wenigen Datenelementen verwendet.","form.basic-form.title.label":"Titel","form.basic-form.title.placeholder":"Geben Sie dem Ziel einen Namen","form.basic-form.title.required":"Bitte geben Sie einen Titel ein","form.basic-form.date.label":"Start- und Enddatum","form.basic-form.placeholder.start":"Startdatum","form.basic-form.placeholder.end":"Enddatum","form.basic-form.date.required":"Bitte wählen Sie Start- und Enddatum aus","form.basic-form.goal.label":"Zielbeschreibung","form.basic-form.goal.placeholder":"Bitte geben Sie Ihre schrittweisen Arbeitsziele ein","form.basic-form.goal.required":"Bitte geben Sie eine Zielbeschreibung ein","form.basic-form.standard.label":"messen","form.basic-form.standard.placeholder":"Bitte geben Sie Messwerte ein","form.basic-form.standard.required":"Bitte geben Sie Messwerte ein","form.basic-form.client.label":"Kunde","form.basic-form.client.required":"Bitte beschreiben Sie die Kunden, die Sie betreuen","form.basic-form.label.tooltip":"Zielgruppe der Leistungsempfänger","form.basic-form.client.placeholder":"Bitte beschreiben Sie die von Ihnen betreuten Kunden, interne Kunden direkt @Name/Auftragsnummer","form.basic-form.invites.label":"Laden Sie Gutachter ein","form.basic-form.invites.placeholder":"Bitte direkt @Name/Mitarbeiternummer angeben, es können bis zu 5 Personen einladen","form.basic-form.weight.label":"Gewicht","form.basic-form.weight.placeholder":"Bitte treten Sie ein","form.basic-form.public.label":"Zielpublikum","form.basic-form.label.help":"Kunden und Rezensenten werden standardmäßig geteilt","form.basic-form.radio.public":"öffentlich","form.basic-form.radio.partially-public":"Teilweise öffentlich","form.basic-form.radio.private":"privat","form.basic-form.publicUsers.placeholder":"offen für","form.basic-form.option.A":"Kollege 1","form.basic-form.option.B":"Kollege 2","form.basic-form.option.C":"Kollege drei","form.basic-form.email.required":"Bitte geben Sie Ihre E-Mail-Adresse ein!","form.basic-form.email.wrong-format":"Das E-Mail-Adressformat ist falsch!","form.basic-form.userName.required":"Bitte Benutzernamen eingeben!","form.basic-form.password.required":"Bitte geben Sie Ihr Passwort ein!","form.basic-form.password.twice":"Die doppelt eingegebenen Passwörter stimmen nicht überein!","form.basic-form.strength.msg":"Bitte geben Sie mindestens 6 Zeichen ein. Bitte verwenden Sie keine Passwörter, die leicht zu erraten sind.","form.basic-form.strength.strong":"Stärke: Stark","form.basic-form.strength.medium":"Stärke: Mittel","form.basic-form.strength.short":"Stärke: zu kurz","form.basic-form.confirm-password.required":"Bitte bestätigen Sie Ihr Passwort!","form.basic-form.phone-number.required":"Bitte geben Sie Ihre Mobiltelefonnummer ein!","form.basic-form.phone-number.wrong-format":"Das Format der Mobiltelefonnummer ist falsch!","form.basic-form.verification-code.required":"Bitte geben Sie den Verifizierungscode ein!","form.basic-form.form.get-captcha":"Holen Sie sich den Bestätigungscode","form.basic-form.captcha.second":"Sekunden","form.basic-form.form.optional":"(optional)","form.basic-form.form.submit":"Senden","form.basic-form.form.save":"speichern","form.basic-form.email.placeholder":"E-Mail","form.basic-form.password.placeholder":"Passwort mit mindestens 6 Zeichen, Groß- und Kleinschreibung beachten","form.basic-form.confirm-password.placeholder":"Passwort bestätigen","form.basic-form.phone-number.placeholder":"Mobiltelefonnummer","form.basic-form.verification-code.placeholder":"Bestätigungscode","result.success.title":"Übermittlung erfolgreich","result.success.description":"Die Seite mit den Übermittlungsergebnissen wird verwendet, um Rückmeldungen zu den Verarbeitungsergebnissen einer Reihe von Vorgangsaufgaben zu geben. Wenn es sich nur um einen einfachen Vorgang handelt, verwenden Sie das globale Eingabeaufforderungs-Feedback „Nachricht“. In diesem Textbereich können einfache Zusatzanweisungen angezeigt werden. Bei Bedarf zur Darstellung von „Dokumenten“ können im grauen Bereich darunter komplexere Inhalte angezeigt werden.","result.success.operate-title":"Projektname","result.success.operate-id":"Projekt-ID","result.success.principal":"Verantwortliche Person","result.success.operate-time":"Effektive Zeit","result.success.step1-title":"Projekt erstellen","result.success.step1-operator":"Qu Lili","result.success.step2-title":"Vorläufige Prüfung der Abteilung","result.success.step2-operator":"Zhou Maomao","result.success.step2-extra":"Dringend","result.success.step3-title":"Finanzielle Überprüfung","result.success.step4-title":"Komplett","result.success.btn-return":"Zurück zur Liste","result.success.btn-project":"Artikel ansehen","result.success.btn-print":"Drucken","result.fail.error.title":"Die Übermittlung ist fehlgeschlagen","result.fail.error.description":"Bitte überprüfen und ändern Sie die folgenden Informationen, bevor Sie sie erneut einreichen.","result.fail.error.hint-title":"Der von Ihnen übermittelte Inhalt enthält die folgenden Fehler:","result.fail.error.hint-text1":"Ihr Konto wurde gesperrt","result.fail.error.hint-btn1":"Sofort auftauen","result.fail.error.hint-text2":"Ihr Konto ist noch nicht antragsberechtigt","result.fail.error.hint-btn2":"Jetzt upgraden","result.fail.error.btn-text":"Zurück zur Änderung","account.settings.menuMap.custom":"Personalisierung","account.settings.menuMap.binding":"Kontobindung","account.settings.basic.avatar":"Avatar","account.settings.basic.change-avatar":"Avatar ändern","account.settings.basic.email":"E-Mail","account.settings.basic.email-message":"Bitte geben Sie Ihre E-Mail ein!","account.settings.basic.nickname":"Spitzname","account.settings.basic.nickname-message":"Bitte geben Sie Ihren Spitznamen ein!","account.settings.basic.profile":"Profil","account.settings.basic.profile-message":"Bitte geben Sie Ihr persönliches Profil ein!","account.settings.basic.profile-placeholder":"Profil","account.settings.basic.country":"Land/Region","account.settings.basic.country-message":"Bitte geben Sie Ihr Land oder Ihre Region ein!","account.settings.basic.geographic":"Provinz und Stadt","account.settings.basic.geographic-message":"Bitte geben Sie Ihr Bundesland und Ihre Stadt ein!","account.settings.basic.address":"Straßenadresse","account.settings.basic.address-message":"Bitte geben Sie Ihre Straße ein!","account.settings.basic.phone":"Kontaktnummer","account.settings.basic.phone-message":"Bitte geben Sie Ihre Kontaktnummer ein!","account.settings.basic.update":"Grundlegende Informationen aktualisieren","account.settings.basic.update.success":"Grundlegende Informationen erfolgreich aktualisieren","account.settings.security.strong":"Stark","account.settings.security.medium":"in","account.settings.security.weak":"schwach","account.settings.security.password":"Kontopasswort","account.settings.security.password-description":"Aktuelle Passwortstärke:","account.settings.security.phone":"Sicherheitshandy","account.settings.security.phone-description":"Bereits gebundenes Mobiltelefon:","account.settings.security.question":"Sicherheitsprobleme","account.settings.security.question-description":"Es werden keine Sicherheitsfragen gestellt, wodurch die Kontosicherheit wirksam geschützt werden kann.","account.settings.security.email":"E-Mail binden","account.settings.security.email-description":"Bereits gebundene E-Mail-Adresse:","account.settings.security.mfa":"MFA-Gerät","account.settings.security.mfa-description":"Das MFA-Gerät ist nicht gebunden. Nach der Bindung können Sie noch einmal bestätigen.","account.settings.security.modify":"Ändern","account.settings.security.set":"Einstellungen","account.settings.security.bind":"verbindlich","account.settings.binding.taobao":"Binde Taobao","account.settings.binding.taobao-description":"Das Taobao-Konto ist derzeit nicht gebunden","account.settings.binding.alipay":"Alipay binden","account.settings.binding.alipay-description":"Das Alipay-Konto ist derzeit nicht gebunden","account.settings.binding.dingding":"Bindung von DingTalk","account.settings.binding.dingding-description":"Derzeit ist kein DingTalk-Konto gebunden","account.settings.binding.bind":"verbindlich","account.settings.notification.password":"Kontopasswort","account.settings.notification.password-description":"Nachrichten von anderen Benutzern werden in Form von Site-Nachrichten benachrichtigt.","account.settings.notification.messages":"Systemmeldungen","account.settings.notification.messages-description":"Systemmeldungen werden in Form von Site-Nachrichten benachrichtigt.","account.settings.notification.todo":"Zu erledigende Aufgaben","account.settings.notification.todo-description":"Zu erledigende Aufgaben werden in Form von In-Site-Nachrichten benachrichtigt","account.settings.settings.open":"offen","account.settings.settings.close":"schließen","trading-assistant.title":"Handelsassistent","trading-assistant.strategyList":"Strategieliste","trading-assistant.createStrategy":"Richtlinie erstellen","trading-assistant.noStrategy":"Noch keine Strategie","trading-assistant.selectStrategy":"Bitte wählen Sie links eine Strategie aus, um Details anzuzeigen","trading-assistant.startStrategy":"Startstrategie","trading-assistant.stopStrategy":"Stoppstrategie","trading-assistant.editStrategy":"Redaktionelle Strategie","trading-assistant.deleteStrategy":"Richtlinie löschen","trading-assistant.status.running":"Laufen","trading-assistant.status.stopped":"Angehalten","trading-assistant.status.error":"Fehler","trading-assistant.strategyType.IndicatorStrategy":"Technische Indikatorstrategie","trading-assistant.strategyType.PromptBasedStrategy":"Stichwortstrategie","trading-assistant.strategyType.GridStrategy":"Grid-Strategie","trading-assistant.tabs.tradingRecords":"Transaktionsverlauf","trading-assistant.tabs.positions":"Positionsaufzeichnung","trading-assistant.tabs.equityCurve":"Eigenkapitalkurve","trading-assistant.form.step1":"Wählen Sie Indikatoren aus","trading-assistant.form.step2":"Exchange-Konfiguration","trading-assistant.form.step3":"Strategieparameter","trading-assistant.form.step2Params":"Parameter","trading-assistant.form.step3Signal":"Signalzustellung","trading-assistant.form.marketCategory":"Marktkategorie","trading-assistant.form.marketCategoryHint":"Wählen Sie zuerst den Markt. Nur Krypto kann Live-Trading aktivieren; andere Märkte sind nur Signal.","trading-assistant.market.USStock":"US-Aktien","trading-assistant.market.Crypto":"Krypto","trading-assistant.market.Forex":"Forex","trading-assistant.form.indicator":"Wählen Sie Indikatoren aus","trading-assistant.form.indicatorHint":"Sie können nur technische Indikatoren auswählen, die Sie gekauft oder erstellt haben","trading-assistant.form.qdtCostHints":"Bei Verwendung dieser Strategie wird QDT verbraucht. Bitte stellen Sie sicher, dass das Konto über ausreichend QDT-Guthaben verfügt","trading-assistant.form.indicatorDescription":"Beschreibung des Indikators","trading-assistant.form.noDescription":"Noch keine Beschreibung","trading-assistant.form.exchange":"Austausch auswählen","trading-assistant.form.apiKey":"API-Schlüssel","trading-assistant.form.secretKey":"Geheimer Schlüssel","trading-assistant.form.passphrase":"Passphrase","trading-assistant.form.testConnection":"Testverbindung","trading-assistant.form.strategyName":"Richtlinienname","trading-assistant.form.symbol":"Handelspaar","trading-assistant.form.symbolHint":"Das Symbolformat hängt vom ausgewählten Markt ab","trading-assistant.form.symbolHintCrypto":"Krypto: z.B. BTC/USDT","trading-assistant.form.symbolHintGeneral":"Geben Sie das Symbol des gewählten Marktes ein (z.B. 600519, AAPL, EURUSD).","trading-assistant.form.initialCapital":"Höhe der Investition","trading-assistant.form.marketType":"Markttyp","trading-assistant.form.marketTypeFutures":"Vertrag","trading-assistant.form.marketTypeSpot":"Spot","trading-assistant.form.marketTypeHint":"Der Kontrakt unterstützt bidirektionalen Handel und Leverage, während der Spot nur Long-Positionen unterstützt und der Leverage auf 1x festgelegt ist","trading-assistant.form.leverage":"Nutzen Sie mehrere","trading-assistant.form.leverageHint":"Vertrag: 1-125 Mal, Spot: 1 Mal fest","trading-assistant.form.spotLeverageFixed":"Der Hebel für den Spothandel ist auf 1x festgelegt","trading-assistant.form.spotOnlyLongHint":"Der Spothandel unterstützt nur Long-Positionen","trading-assistant.form.tradeDirection":"Handelsrichtung","trading-assistant.form.tradeDirectionLong":"Nur lang","trading-assistant.form.tradeDirectionShort":"Nur kurz","trading-assistant.form.tradeDirectionBoth":"zweiseitige Transaktion","trading-assistant.form.timeframe":"Zeitraum","trading-assistant.form.klinePeriod":"K-Linien-Zeitraum","trading-assistant.form.timeframe1m":"1 Minute","trading-assistant.form.timeframe5m":"5 Minuten","trading-assistant.form.timeframe15m":"15 Minuten","trading-assistant.form.timeframe30m":"30 Minuten","trading-assistant.form.timeframe1H":"1 Stunde","trading-assistant.form.timeframe4H":"4 Stunden","trading-assistant.form.timeframe1D":"1 Tag","trading-assistant.form.selectStrategyType":"Strategietyp auswählen","trading-assistant.form.indicatorStrategy":"Indikator-Strategie","trading-assistant.form.indicatorStrategyDesc":"Automatisierte Handelsstrategie basierend auf technischen Indikatoren","trading-assistant.form.aiStrategy":"KI-Strategie","trading-assistant.form.aiStrategyDesc":"Automatisierte Handelsstrategie basierend auf KI-Intelligenzentscheidungen","trading-assistant.form.enableAiFilter":"KI-Intelligenzentscheidungsfilter aktivieren","trading-assistant.form.enableAiFilterHint":"Wenn aktiviert, werden Indikatorsignale von KI gefiltert, um die Handelsqualität zu verbessern","trading-assistant.form.aiFilterPrompt":"Benutzerdefinierte Eingabeaufforderung","trading-assistant.form.aiFilterPromptHint":"Benutzerdefinierte Anweisungen für KI-Filterung bereitstellen, leer lassen, um die Systemstandardwerte zu verwenden","trading-assistant.validation.strategyTypeRequired":"Bitte wählen Sie einen Strategietyp","trading-assistant.validation.marketCategoryRequired":"Bitte wählen Sie eine Marktkategorie","trading-assistant.form.advancedSettings":"Erweiterte Einstellungen","trading-assistant.form.orderMode":"Bestellmodus","trading-assistant.form.orderModeMaker":"Hersteller","trading-assistant.form.orderModeTaker":"Marktpreis (Taker)","trading-assistant.form.orderModeHint":"Im Pending-Order-Modus werden Limit-Orders verwendet und die Bearbeitungsgebühr ist niedriger; Der Marktpreismodus wird sofort ausgeführt und die Bearbeitungsgebühr ist höher.","trading-assistant.form.makerWaitSec":"Wartezeit für ausstehende Bestellungen (Sekunden)","trading-assistant.form.makerWaitSecHint":"Die Zeit, die nach der Bestellung auf die Transaktion gewartet wird. Brechen Sie ab und versuchen Sie es nach einer Zeitüberschreitung erneut.","trading-assistant.form.makerRetries":"Anzahl der Wiederholungsversuche für ausstehende Bestellungen","trading-assistant.form.makerRetriesHint":"Die maximale Anzahl von Wiederholungsversuchen, wenn eine ausstehende Order nicht ausgeführt wird","trading-assistant.form.fallbackToMarket":"Die ausstehende Bestellung schlägt fehl und der Marktpreis wird herabgestuft.","trading-assistant.form.fallbackToMarketHint":"Wenn die ausstehende Eröffnungs-/Schließorder nicht abgeschlossen wurde, wird angegeben, ob sie auf eine Marktorder herabgestuft werden soll, um sicherzustellen, dass die Transaktion abgeschlossen wird.","trading-assistant.form.marginMode":"Margin-Modus","trading-assistant.form.marginModeCross":"Volles Lager","trading-assistant.form.marginModeIsolated":"Isolierte Lage","trading-assistant.form.stopLossPct":"Stop-Loss-Verhältnis (%)","trading-assistant.form.stopLossPctHint":"Legen Sie den Stop-Loss-Prozentsatz fest. 0 bedeutet, dass Stop-Loss nicht aktiviert ist","trading-assistant.form.takeProfitPct":"Take-Profit-Quote (%)","trading-assistant.form.takeProfitPctHint":"Legen Sie den Take-Profit-Prozentsatz fest. 0 bedeutet, dass Take-Profit deaktiviert ist","trading-assistant.form.commission":"Gebühr (%)","trading-assistant.form.commissionHint":"Handelsgebühr in Prozent (optional)","trading-assistant.form.slippage":"Slippage (%)","trading-assistant.form.slippageHint":"Geschätzter Slippage-Prozentsatz (optional)","trading-assistant.form.executionMode":"Ausführung","trading-assistant.form.executionModeSignal":"Nur Signal (Benachrichtigungen)","trading-assistant.form.executionModeLive":"Live-Trading (nur Krypto)","trading-assistant.form.liveTradingCryptoOnlyHint":"Live-Trading ist nur für Krypto verfügbar. Andere Märkte können nur Signale senden.","trading-assistant.form.notifyChannels":"Benachrichtigungskanäle","trading-assistant.form.notifyChannelsHint":"Wählen Sie aus, wie Sie Kauf/Verkauf- und Risikosignale erhalten möchten.","trading-assistant.notify.browser":"Browser","trading-assistant.notify.email":"E-Mail","trading-assistant.notify.phone":"Telefon","trading-assistant.notify.telegram":"Telegram","trading-assistant.notify.discord":"Discord","trading-assistant.notify.webhook":"Webhook","trading-assistant.form.notifyEmail":"E-Mail","trading-assistant.form.notifyPhone":"Telefonnummer","trading-assistant.form.notifyTelegram":"Telegram (Chat-ID / Benutzername)","trading-assistant.form.notifyDiscord":"Discord (Webhook-URL)","trading-assistant.form.notifyWebhook":"Webhook-URL","trading-assistant.form.liveTradingConfigTitle":"Exchange-Zugangsdaten","trading-assistant.form.liveTradingConfigHint":"Geben Sie Ihre Exchange-API-Zugangsdaten ein. Sie können die Verbindung vor dem Speichern testen.","trading-assistant.form.savedCredential":"Gespeicherte Zugangsdaten","trading-assistant.form.savedCredentialHint":"Optional: Wählen Sie gespeicherte Zugangsdaten zum automatischen Ausfüllen.","trading-assistant.form.saveCredential":"Diese Zugangsdaten für später speichern","trading-assistant.form.credentialName":"Name (optional)","trading-assistant.form.signalMode":"Signalmodus","trading-assistant.form.signalModeConfirmed":"Bestätigen Sie den Modus","trading-assistant.form.signalModeAggressive":"Aggressiver Modus","trading-assistant.form.signalModeHint":"Bestätigungsmodus: prüft nur abgeschlossene K-Zeilen; Aggressiver Modus: Überprüft auch die Bildung von K-Linien","trading-assistant.form.cancel":"Abbrechen","trading-assistant.form.prev":"Vorheriger Schritt","trading-assistant.form.next":"Nächster Schritt","trading-assistant.form.confirmCreate":"Bestätigen Sie die Erstellung","trading-assistant.form.confirmEdit":"Bestätigen Sie die Änderungen","trading-assistant.messages.createSuccess":"Strategie erfolgreich erstellt","trading-assistant.messages.createFailed":"Richtlinie konnte nicht erstellt werden","trading-assistant.messages.updateSuccess":"Richtlinienaktualisierung erfolgreich","trading-assistant.messages.updateFailed":"Die Aktualisierungsrichtlinie ist fehlgeschlagen","trading-assistant.messages.deleteSuccess":"Richtlinienlöschung erfolgreich","trading-assistant.messages.deleteFailed":"Das Löschen der Richtlinie ist fehlgeschlagen","trading-assistant.messages.startSuccess":"Strategie erfolgreich gestartet","trading-assistant.messages.startFailed":"Die Richtlinie konnte nicht gestartet werden","trading-assistant.messages.stopSuccess":"Die Strategie wurde erfolgreich beendet","trading-assistant.messages.stopFailed":"Die Stoppstrategie ist fehlgeschlagen","trading-assistant.messages.loadFailed":"Richtlinienliste konnte nicht abgerufen werden","trading-assistant.messages.runningWarning":"Die Strategie läuft. Bitte stoppen Sie die Strategie, bevor Sie sie ändern.","trading-assistant.messages.deleteConfirmWithName":"Sind Sie sicher, dass Sie die Richtlinie „{name}“ löschen möchten? Dieser Vorgang ist irreversibel.","trading-assistant.messages.deleteConfirm":"Sind Sie sicher, dass Sie diese Richtlinie löschen möchten? Dieser Vorgang ist irreversibel.","trading-assistant.messages.loadTradesFailed":"Transaktionsdatensätze konnten nicht abgerufen werden","trading-assistant.messages.loadPositionsFailed":"Positionsdatensatz konnte nicht abgerufen werden","trading-assistant.messages.loadEquityFailed":"Die Eigenkapitalkurve konnte nicht ermittelt werden","trading-assistant.messages.loadIndicatorsFailed":"Die Indikatorliste konnte nicht geladen werden. Bitte versuchen Sie es später noch einmal","trading-assistant.messages.spotLimitations":"Der Spot-Handel wurde automatisch auf „Nur Long“ mit 1-facher Hebelwirkung eingestellt","trading-assistant.messages.autoFillApiConfig":"Die historische API-Konfiguration der Börse wurde automatisch ausgefüllt","trading-assistant.placeholders.selectIndicator":"Bitte wählen Sie einen Indikator aus","trading-assistant.placeholders.selectExchange":"Bitte wählen Sie einen Austausch aus","trading-assistant.placeholders.selectMarketCategory":"Bitte Marktkategorie auswählen","trading-assistant.placeholders.inputApiKey":"Bitte geben Sie den API-Schlüssel ein","trading-assistant.placeholders.inputSecretKey":"Bitte geben Sie den Geheimschlüssel ein","trading-assistant.placeholders.inputPassphrase":"Bitte geben Sie die Passphrase ein","trading-assistant.placeholders.inputStrategyName":"Bitte geben Sie einen Richtliniennamen ein","trading-assistant.placeholders.selectSymbol":"Bitte wählen Sie ein Handelspaar aus","trading-assistant.placeholders.inputSymbol":"Bitte Symbol eingeben","trading-assistant.placeholders.selectTimeframe":"Bitte wählen Sie einen Zeitraum aus","trading-assistant.placeholders.selectKlinePeriod":"Bitte wählen Sie einen K-Linien-Zeitraum aus","trading-assistant.placeholders.inputAiFilterPrompt":"Bitte geben Sie eine benutzerdefinierte Eingabeaufforderung ein (optional)","trading-assistant.placeholders.inputEmail":"Bitte E-Mail eingeben","trading-assistant.placeholders.inputPhone":"Bitte Telefonnummer eingeben","trading-assistant.placeholders.inputTelegram":"Bitte Telegram Chat-ID / Benutzername eingeben","trading-assistant.placeholders.inputDiscord":"Bitte Discord Webhook-URL eingeben","trading-assistant.placeholders.inputWebhook":"Bitte Webhook-URL eingeben","trading-assistant.placeholders.selectSavedCredential":"Gespeicherte Zugangsdaten auswählen","trading-assistant.placeholders.inputCredentialName":"Zum Beispiel: Binance Hauptschlüssel","trading-assistant.validation.indicatorRequired":"Bitte wählen Sie einen Indikator aus","trading-assistant.validation.exchangeRequired":"Bitte wählen Sie einen Austausch aus","trading-assistant.validation.apiKeyRequired":"Bitte geben Sie den API-Schlüssel ein","trading-assistant.validation.secretKeyRequired":"Bitte geben Sie den Geheimschlüssel ein","trading-assistant.validation.passphraseRequired":"Bitte geben Sie die Passphrase ein","trading-assistant.validation.exchangeConfigIncomplete":"Bitte geben Sie die vollständigen Exchange-Konfigurationsinformationen ein","trading-assistant.validation.testConnectionRequired":'Bitte klicken Sie zuerst auf die Schaltfläche "Verbindung testen" und stellen Sie sicher, dass die Verbindung erfolgreich ist',"trading-assistant.validation.testConnectionFailed":"Verbindungstest fehlgeschlagen, bitte überprüfen Sie die Konfiguration und testen Sie erneut","trading-assistant.validation.credentialRequired":"Bitte fügen Sie zuerst die Börsenanmeldedaten im Persönlichen Zentrum hinzu und testen Sie sie","trading-assistant.validation.strategyNameRequired":"Bitte geben Sie einen Richtliniennamen ein","trading-assistant.validation.symbolRequired":"Bitte wählen Sie ein Handelspaar aus","trading-assistant.validation.initialCapitalRequired":"Bitte geben Sie den Anlagebetrag ein","trading-assistant.validation.leverageRequired":"Bitte geben Sie die Leverage Ratio ein","trading-assistant.validation.emailInvalid":"Ungültige E-Mail-Adresse","trading-assistant.validation.notifyChannelRequired":"Bitte wählen Sie mindestens einen Benachrichtigungskanal aus","trading-assistant.table.time":"Zeit","trading-assistant.table.type":"Typ","trading-assistant.table.price":"Preis","trading-assistant.table.amount":"Menge","trading-assistant.table.value":"Betrag","trading-assistant.table.commission":"Bearbeitungsgebühr","trading-assistant.table.symbol":"Handelspaar","trading-assistant.table.side":"Richtung","trading-assistant.table.size":"Positionsmenge","trading-assistant.table.entryPrice":"Eröffnungspreis","trading-assistant.table.currentPrice":"aktueller Preis","trading-assistant.table.unrealizedPnl":"nicht realisierter Gewinn oder Verlust","trading-assistant.table.pnlPercent":"Gewinn- und Verlustquote","trading-assistant.table.buy":"kaufen","trading-assistant.table.sell":"verkaufen","trading-assistant.table.long":"Geh lange","trading-assistant.table.short":"kurz","trading-assistant.table.noPositions":"Noch keine Stellen","trading-assistant.detail.title":"Strategiedetails","trading-assistant.detail.strategyName":"Richtlinienname","trading-assistant.detail.strategyType":"Strategietyp","trading-assistant.detail.status":"Status","trading-assistant.detail.tradingMode":"Handelsmodell","trading-assistant.detail.exchange":"Austausch","trading-assistant.detail.initialCapital":"Anfangskapital","trading-assistant.detail.totalInvestment":"Gesamtinvestitionsbetrag","trading-assistant.detail.currentEquity":"Aktuelles Nettovermögen","trading-assistant.detail.totalPnl":"Gesamtgewinn und -verlust","trading-assistant.detail.indicatorName":"Indikatorname","trading-assistant.detail.maxLeverage":"Maximale Hebelwirkung","trading-assistant.detail.decideInterval":"Entscheidungsintervall","trading-assistant.detail.symbols":"Transaktionsobjekt","trading-assistant.detail.createdAt":"Schöpfungszeit","trading-assistant.detail.updatedAt":"Aktualisierungszeit","trading-assistant.detail.llmConfig":"Konfiguration des KI-Modells","trading-assistant.detail.exchangeConfig":"Exchange-Konfiguration","trading-assistant.detail.provider":"Anbieter","trading-assistant.detail.modelId":"Modell-ID","trading-assistant.detail.close":"Schließen","trading-assistant.detail.loadFailed":"Richtliniendetails konnten nicht abgerufen werden","trading-assistant.equity.noData":"Noch keine Daten zum Vermögen","trading-assistant.equity.equity":"Nettovermögen","trading-assistant.exchange.tradingMode":"Handelsmodell","trading-assistant.exchange.virtual":"simulierter Handel","trading-assistant.exchange.live":"Echte Transaktion","trading-assistant.exchange.selectExchange":"Austausch auswählen","trading-assistant.exchange.walletAddress":"Wallet-Adresse","trading-assistant.exchange.walletAddressPlaceholder":"Bitte geben Sie Ihre Wallet-Adresse ein (beginnend mit 0x)","trading-assistant.exchange.privateKey":"privater Schlüssel","trading-assistant.exchange.privateKeyPlaceholder":"Bitte geben Sie den privaten Schlüssel ein (64 Zeichen)","trading-assistant.exchange.testConnection":"Testverbindung","trading-assistant.exchange.connectionSuccess":"Verbindung erfolgreich","trading-assistant.exchange.connectionFailed":"Verbindung fehlgeschlagen","trading-assistant.exchange.testFailed":"Verbindungstest fehlgeschlagen","trading-assistant.exchange.fillComplete":"Bitte geben Sie die vollständigen Exchange-Konfigurationsinformationen ein","trading-assistant.strategyTypeOptions.ai":"KI-gesteuerte Strategie","trading-assistant.strategyTypeOptions.indicator":"Technische Indikatorstrategie","trading-assistant.strategyTypeOptions.aiDeveloping":"Die KI-gesteuerte Strategiefunktion befindet sich in der Entwicklung, also bleiben Sie dran","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"KI-gesteuerte Strategiefunktionen sind in der Entwicklung","trading-assistant.indicatorType.trend":"Trend","trading-assistant.indicatorType.momentum":"Schwung","trading-assistant.indicatorType.volatility":"Fluktuation","trading-assistant.indicatorType.volume":"Lautstärke","trading-assistant.indicatorType.custom":"Anpassen","trading-assistant.exchangeNames":{okx:"OKX",binance:"Binance",hyperliquid:"Hyperliquid",blockchaincom:"Blockchain.com",coinbaseexchange:"Coinbase",gate:"Gate.io",mexc:"MEXC",kraken:"Kraken",bitfinex:"Bitfinex",bybit:"Bybit",kucoin:"KuCoin",huobi:"Huobi",bitget:"Bitget",bitmex:"BitMEX",deribit:"Deribit",phemex:"Phemex",bitmart:"BitMart",bitstamp:"Bitstamp",bittrex:"Bittrex",poloniex:"Poloniex",gemini:"Zwillinge",cryptocom:"Crypto.com",bitflyer:"bitFlyer",upbit:"Upbit",bithumb:"Bithumb",coinone:"Coinone",zb:"ZB",lbank:"LBank",bibox:"Bibox",bigone:"BigONE",bitrue:"Bitrue",coinex:"CoinEx",digifinex:"DigiFinex",ftx:"FTX",ftxus:"FTX USA",binanceus:"Binance USA",binancecoinm:"Binance COIN-M",binanceusdm:"Binance USDⓈ-M",deepcoin:"Deepcoin"},"ai-trading-assistant.title":"KI-Handelsassistent","ai-trading-assistant.strategyList":"Strategieliste","ai-trading-assistant.createStrategy":"Richtlinie erstellen","ai-trading-assistant.noStrategy":"Noch keine Strategie","ai-trading-assistant.selectStrategy":"Bitte wählen Sie links eine Strategie aus, um Details anzuzeigen","ai-trading-assistant.startStrategy":"Startstrategie","ai-trading-assistant.stopStrategy":"Stoppstrategie","ai-trading-assistant.editStrategy":"Redaktionelle Strategie","ai-trading-assistant.deleteStrategy":"Richtlinie löschen","ai-trading-assistant.status.running":"Laufen","ai-trading-assistant.status.stopped":"Angehalten","ai-trading-assistant.status.error":"Fehler","ai-trading-assistant.tabs.tradingRecords":"Transaktionsverlauf","ai-trading-assistant.tabs.positions":"Positionsaufzeichnung","ai-trading-assistant.tabs.aiDecisions":"KI-Entscheidungsaufzeichnung","ai-trading-assistant.tabs.equityCurve":"Eigenkapitalkurve","ai-trading-assistant.form.createTitle":"Erstellen Sie KI-Handelsstrategien","ai-trading-assistant.form.editTitle":"Bearbeiten Sie die KI-Handelsstrategie","ai-trading-assistant.form.strategyName":"Richtlinienname","ai-trading-assistant.form.modelId":"KI-Modell","ai-trading-assistant.form.modelIdHint":"Verwenden Sie den OpenRouter-Systemdienst, ohne den API-Schlüssel zu konfigurieren","ai-trading-assistant.form.decideInterval":"Entscheidungsintervall","ai-trading-assistant.form.decideInterval5m":"5 Minuten","ai-trading-assistant.form.decideInterval10m":"10 Minuten","ai-trading-assistant.form.decideInterval30m":"30 Minuten","ai-trading-assistant.form.decideInterval1h":"1 Stunde","ai-trading-assistant.form.decideInterval4h":"4 Stunden","ai-trading-assistant.form.decideInterval1d":"1 Tag","ai-trading-assistant.form.decideInterval1w":"1 Woche","ai-trading-assistant.form.decideIntervalHint":"Das Zeitintervall, in dem die KI Entscheidungen trifft","ai-trading-assistant.form.runPeriod":"Laufzyklus","ai-trading-assistant.form.runPeriodHint":"Die Startzeit und Endzeit des Strategielaufs","ai-trading-assistant.form.startDate":"Startdatum","ai-trading-assistant.form.endDate":"Enddatum","ai-trading-assistant.form.qdtCostTitle":"Anweisungen zum QDT-Abzug","ai-trading-assistant.form.qdtCostHint":"{cost} QDT wird für jede KI-Entscheidung abgezogen. Bitte stellen Sie sicher, dass Ihr Konto über ausreichend QDT-Guthaben verfügt. Während der Umsetzung der Strategie werden für jede Entscheidung Gebühren in Echtzeit abgezogen.","ai-trading-assistant.form.apiKey":"API-Schlüssel","ai-trading-assistant.form.exchange":"Austausch auswählen","ai-trading-assistant.form.secretKey":"Geheimer Schlüssel","ai-trading-assistant.form.passphrase":"Passphrase","ai-trading-assistant.form.testConnection":"Testverbindung","ai-trading-assistant.form.symbol":"Handelspaar","ai-trading-assistant.form.symbolHint":"Wählen Sie das Handelspaar aus, mit dem Sie handeln möchten","ai-trading-assistant.form.initialCapital":"Investierter Betrag (Marge)","ai-trading-assistant.form.leverage":"Nutzen Sie mehrere","ai-trading-assistant.form.timeframe":"Zeitraum","ai-trading-assistant.form.timeframe1m":"1 Minute","ai-trading-assistant.form.timeframe5m":"5 Minuten","ai-trading-assistant.form.timeframe15m":"15 Minuten","ai-trading-assistant.form.timeframe30m":"30 Minuten","ai-trading-assistant.form.timeframe1H":"1 Stunde","ai-trading-assistant.form.timeframe4H":"4 Stunden","ai-trading-assistant.form.timeframe1D":"1 Tag","ai-trading-assistant.form.marketType":"Markttyp","ai-trading-assistant.form.marketTypeFutures":"Vertrag","ai-trading-assistant.form.marketTypeSpot":"Spot","ai-trading-assistant.form.totalPnl":"Gesamtgewinn und -verlust","ai-trading-assistant.form.customPrompt":"Benutzerdefinierte Aufforderungswörter","ai-trading-assistant.form.customPromptHint":"Optional, wird zur Anpassung von KI-Handelsstrategien und Entscheidungslogik verwendet","ai-trading-assistant.form.cancel":"Abbrechen","ai-trading-assistant.form.prev":"Vorheriger Schritt","ai-trading-assistant.form.next":"Nächster Schritt","ai-trading-assistant.form.confirmCreate":"Bestätigen Sie die Erstellung","ai-trading-assistant.form.confirmEdit":"Bestätigen Sie die Änderungen","ai-trading-assistant.messages.createSuccess":"Strategie erfolgreich erstellt","ai-trading-assistant.messages.createFailed":"Richtlinie konnte nicht erstellt werden","ai-trading-assistant.messages.updateSuccess":"Richtlinienaktualisierung erfolgreich","ai-trading-assistant.messages.updateFailed":"Die Aktualisierungsrichtlinie ist fehlgeschlagen","ai-trading-assistant.messages.deleteSuccess":"Richtlinienlöschung erfolgreich","ai-trading-assistant.messages.deleteFailed":"Das Löschen der Richtlinie ist fehlgeschlagen","ai-trading-assistant.messages.startSuccess":"Strategie erfolgreich gestartet","ai-trading-assistant.messages.startFailed":"Die Richtlinie konnte nicht gestartet werden","ai-trading-assistant.messages.stopSuccess":"Die Strategie wurde erfolgreich beendet","ai-trading-assistant.messages.stopFailed":"Die Stoppstrategie ist fehlgeschlagen","ai-trading-assistant.messages.loadFailed":"Richtlinienliste konnte nicht abgerufen werden","ai-trading-assistant.messages.loadDecisionsFailed":"Der KI-Entscheidungsdatensatz konnte nicht abgerufen werden","ai-trading-assistant.messages.deleteConfirm":"Sind Sie sicher, dass Sie diese Richtlinie löschen möchten? Dieser Vorgang ist irreversibel.","ai-trading-assistant.placeholders.inputStrategyName":"Bitte geben Sie einen Richtliniennamen ein","ai-trading-assistant.placeholders.selectModelId":"Bitte wählen Sie ein KI-Modell aus","ai-trading-assistant.placeholders.selectDecideInterval":"Bitte wählen Sie ein Entscheidungsintervall aus","ai-trading-assistant.placeholders.startTime":"Startzeit","ai-trading-assistant.placeholders.endTime":"Endzeit","ai-trading-assistant.placeholders.inputApiKey":"Bitte geben Sie den API-Schlüssel ein","ai-trading-assistant.placeholders.selectExchange":"Bitte wählen Sie einen Austausch aus","ai-trading-assistant.placeholders.inputSecretKey":"Bitte geben Sie den Geheimschlüssel ein","ai-trading-assistant.placeholders.inputPassphrase":"Bitte geben Sie die Passphrase ein","ai-trading-assistant.placeholders.selectSymbol":"Bitte wählen Sie ein Handelspaar aus, zum Beispiel: BTC/USDT","ai-trading-assistant.placeholders.selectTimeframe":"Bitte wählen Sie einen Zeitraum aus","ai-trading-assistant.placeholders.inputCustomPrompt":"Bitte geben Sie ein benutzerdefiniertes Aufforderungswort ein (optional)","ai-trading-assistant.validation.strategyNameRequired":"Bitte geben Sie einen Richtliniennamen ein","ai-trading-assistant.validation.modelIdRequired":"Bitte wählen Sie ein KI-Modell aus","ai-trading-assistant.validation.runPeriodRequired":"Bitte wählen Sie einen Laufzyklus aus","ai-trading-assistant.validation.apiKeyRequired":"Bitte geben Sie den API-Schlüssel ein","ai-trading-assistant.validation.exchangeRequired":"Bitte wählen Sie einen Austausch aus","ai-trading-assistant.validation.secretKeyRequired":"Bitte geben Sie den Geheimschlüssel ein","ai-trading-assistant.validation.symbolRequired":"Bitte wählen Sie ein Handelspaar aus","ai-trading-assistant.validation.initialCapitalRequired":"Bitte geben Sie den Anlagebetrag ein","ai-trading-assistant.table.time":"Zeit","ai-trading-assistant.table.type":"Typ","ai-trading-assistant.table.price":"Preis","ai-trading-assistant.table.amount":"Menge","ai-trading-assistant.table.value":"Betrag","ai-trading-assistant.table.symbol":"Handelspaar","ai-trading-assistant.table.side":"Richtung","ai-trading-assistant.table.size":"Positionsmenge","ai-trading-assistant.table.entryPrice":"Eröffnungspreis","ai-trading-assistant.table.currentPrice":"aktueller Preis","ai-trading-assistant.table.unrealizedPnl":"nicht realisierter Gewinn oder Verlust","ai-trading-assistant.table.profit":"Gewinn und Verlust","ai-trading-assistant.table.openLong":"Lange geöffnet","ai-trading-assistant.table.closeLong":"Pinduo","ai-trading-assistant.table.openShort":"Kurz öffnen","ai-trading-assistant.table.closeShort":"leer","ai-trading-assistant.table.addLong":"Gadot","ai-trading-assistant.table.addShort":"kurz hinzufügen","ai-trading-assistant.table.closeShortProfit":"Nehmen Sie Gewinne aus Short-Positionen mit","ai-trading-assistant.table.closeShortStop":"Stop-Loss","ai-trading-assistant.table.closeLongProfit":"Halten Sie lange inne und nehmen Sie Gewinn mit","ai-trading-assistant.table.closeLongStop":"Stop-Loss","ai-trading-assistant.table.buy":"kaufen","ai-trading-assistant.table.sell":"verkaufen","ai-trading-assistant.table.long":"Geh lange","ai-trading-assistant.table.short":"kurz","ai-trading-assistant.table.hold":"halten","ai-trading-assistant.table.reasoning":"Analysegrund","ai-trading-assistant.table.decisions":"Entscheidungsfindung","ai-trading-assistant.table.riskAssessment":"Risikobewertung","ai-trading-assistant.table.confidence":"Vertrauen","ai-trading-assistant.table.totalRecords":"Insgesamt {total} Datensätze","ai-trading-assistant.table.noPositions":"Noch keine Stellen","ai-trading-assistant.detail.title":"Strategiedetails","ai-trading-assistant.equity.noData":"Noch keine Daten zum Vermögen","ai-trading-assistant.equity.equity":"Nettovermögen","ai-trading-assistant.exchange.testFailed":"Verbindungstest fehlgeschlagen","ai-trading-assistant.exchange.connectionSuccess":"Verbindung erfolgreich","ai-trading-assistant.exchange.connectionFailed":"Verbindung fehlgeschlagen","ai-trading-assistant.form.advancedSettings":"Erweiterte Einstellungen","ai-trading-assistant.form.orderMode":"Bestellmodus","ai-trading-assistant.form.orderModeMaker":"Hersteller","ai-trading-assistant.form.orderModeTaker":"Marktpreis (Taker)","ai-trading-assistant.form.orderModeHint":"Im Pending-Order-Modus werden Limit-Orders verwendet und die Bearbeitungsgebühr ist niedriger; Der Marktpreismodus wird sofort ausgeführt und die Bearbeitungsgebühr ist höher.","ai-trading-assistant.form.makerWaitSec":"Wartezeit für ausstehende Bestellungen (Sekunden)","ai-trading-assistant.form.makerWaitSecHint":"Die Zeit, die nach der Bestellung auf die Transaktion gewartet wird. Brechen Sie ab und versuchen Sie es nach einer Zeitüberschreitung erneut.","ai-trading-assistant.form.makerRetries":"Anzahl der Wiederholungsversuche für ausstehende Bestellungen","ai-trading-assistant.form.makerRetriesHint":"Die maximale Anzahl von Wiederholungsversuchen, wenn eine ausstehende Order nicht ausgeführt wird","ai-trading-assistant.form.fallbackToMarket":"Die ausstehende Bestellung schlägt fehl und der Marktpreis wird herabgestuft.","ai-trading-assistant.form.fallbackToMarketHint":"Wenn die ausstehende Eröffnungs-/Schließorder nicht abgeschlossen wurde, wird angegeben, ob sie auf eine Marktorder herabgestuft werden soll, um sicherzustellen, dass die Transaktion abgeschlossen wird.","ai-trading-assistant.form.marginMode":"Margin-Modus","ai-trading-assistant.form.marginModeCross":"Volles Lager","ai-trading-assistant.form.marginModeIsolated":"Isolierte Lage","ai-analysis.title":"Quantenhandelsmaschine","ai-analysis.system.online":"online","ai-analysis.system.agents":"Agent","ai-analysis.system.active":"aktiv","ai-analysis.system.stage":"Bühne","ai-analysis.panel.roster":"Agentenaufstellung","ai-analysis.panel.thinking":"Denken...","ai-analysis.panel.done":"Komplett","ai-analysis.panel.standby":"Standby","ai-analysis.input.title":"Quantenhandelsmaschine","ai-analysis.input.placeholder":"Zielwert auswählen (z. B. BTC/USDT)","ai-analysis.input.watchlist":"Optionale Bestände","ai-analysis.input.start":"Analyse starten","ai-analysis.input.recent":"Letzte Aufgaben:","ai-analysis.vis.stage":"Bühne","ai-analysis.vis.processing":"Verarbeitung","ai-analysis.result.complete":"Analyse abgeschlossen","ai-analysis.result.signal":"Schlusssignal","ai-analysis.result.confidence":"Vertrauen:","ai-analysis.result.new":"neue Analyse","ai-analysis.result.full":"Vollständigen Bericht ansehen","ai-analysis.logs.title":"Systemprotokoll","ai-analysis.modal.title":"vertraulicher Bericht","ai-analysis.modal.fundamental":"Fundamentalanalyse","ai-analysis.modal.technical":"Technische Analyse","ai-analysis.modal.sentiment":"Emotionale Analyse","ai-analysis.modal.risk":"Risikobewertung","ai-analysis.stage.idle":"Standby","ai-analysis.stage.1":"Phase Eins: Mehrdimensionale Analyse","ai-analysis.stage.2":"Phase Zwei: Lang-Kurz-Debatte","ai-analysis.stage.3":"Phase drei: Strategische Planung","ai-analysis.stage.4":"Die vierte Stufe: Überprüfung der Risikokontrolle","ai-analysis.stage.complete":"Komplett","ai-analysis.agent.investment_director":"Investmentdirektor","ai-analysis.agent.role.investment_director":"Umfassende Analyse und abschließendes Fazit","ai-analysis.agent.market":"Marktanalyst","ai-analysis.agent.role.market":"Technologie- und Marktdaten","ai-analysis.agent.fundamental":"Fundamentalanalytiker","ai-analysis.agent.role.fundamental":"Finanzen und Bewertung","ai-analysis.agent.technical":"Technischer Analyst","ai-analysis.agent.role.technical":"Technische Indikatoren und Diagramme","ai-analysis.agent.news":"Nachrichtenanalyst","ai-analysis.agent.role.news":"Globaler Nachrichtenfilter","ai-analysis.agent.sentiment":"Stimmungsanalytiker","ai-analysis.agent.role.sentiment":"Sozial und emotional","ai-analysis.agent.risk":"Risikoanalytiker","ai-analysis.agent.role.risk":"Grundlegender Risikocheck","ai-analysis.agent.bull":"bullischer Forscher","ai-analysis.agent.role.bull":"Wachstumskatalysator-Bergbau","ai-analysis.agent.bear":"bärischer Forscher","ai-analysis.agent.role.bear":"Risiko- und Fehlersuche","ai-analysis.agent.manager":"Forschungsmanager","ai-analysis.agent.role.manager":"Debattenmoderator","ai-analysis.agent.trader":"Händler","ai-analysis.agent.role.trader":"Führungsstratege","ai-analysis.agent.risky":"aktivistischer Analytiker","ai-analysis.agent.role.risky":"aggressive Strategie","ai-analysis.agent.neutral":"Bilanzanalytiker","ai-analysis.agent.role.neutral":"Ausgleichsstrategie","ai-analysis.agent.safe":"konservativer Analytiker","ai-analysis.agent.role.safe":"konservative Strategie","ai-analysis.agent.cro":"Risikokontrollmanager (CRO)","ai-analysis.agent.role.cro":"letzte Entscheidungsbefugnis","ai-analysis.script.market":"OHLCV-Daten werden von wichtigen Börsen abgerufen...","ai-analysis.script.fundamental":"Quartalsfinanzberichte abrufen...","ai-analysis.script.technical":"Analyse technischer Indikatoren und Chartmuster...","ai-analysis.script.news":"Globale Finanznachrichten scannen...","ai-analysis.script.sentiment":"Analyse von Social-Media-Trends...","ai-analysis.script.risk":"Berechnung der historischen Volatilität...","invite.inviteLink":"Einladungslink","invite.copy":"Link kopieren","invite.copySuccess":"Erfolgreich kopieren!","invite.copyFailed":"Der Kopiervorgang ist fehlgeschlagen. Bitte manuell kopieren","invite.noInviteLink":"Der Einladungslink wurde nicht generiert","invite.totalInvites":"Kumulierte Einladungen","invite.totalReward":"Kumulative Belohnungen","invite.rules":"Einladungsregeln","invite.rule1":"Jedes Mal, wenn Sie einen Freund erfolgreich zur Registrierung einladen, erhalten Sie eine Belohnung","invite.rule2":"Wenn der eingeladene Freund die erste Transaktion abschließt, erhalten Sie zusätzliche Belohnungen","invite.rule3":"Einladungsprämien werden direkt an Ihr Konto gesendet","invite.inviteList":"Einladungsliste","invite.tasks":"Missionszentrum","invite.inviteeName":"Eingeladen","invite.inviteTime":"Einladungszeit","invite.status":"Status","invite.reward":"Belohnung","invite.active":"aktiv","invite.inactive":"Nicht aktiviert","invite.completed":"Abgeschlossen","invite.claimed":"Erhalten","invite.pending":"Zu vervollständigen","invite.goToTask":"zu vervollständigen","invite.claimReward":"Belohnungen einfordern","invite.verify":"Verifizierung abgeschlossen","invite.verifySuccess":"Verifizierung erfolgreich! Aufgabe abgeschlossen","invite.verifyNotCompleted":"Die Aufgabe wurde noch nicht abgeschlossen. Bitte schließen Sie die Aufgabe zuerst ab","invite.verifyFailed":"Die Verifizierung ist fehlgeschlagen. Bitte versuchen Sie es später noch einmal","invite.claimSuccess":"{reward} QDT erfolgreich erhalten!","invite.claimFailed":"Fehler beim Sammeln. Bitte versuchen Sie es später noch einmal","invite.totalRecords":"Insgesamt {total} Datensätze","invite.task.twitter.title":"Retweeten an X (Twitter)","invite.task.twitter.desc":"Teilen Sie unsere offiziellen Tweets mit Ihrem X-Konto (Twitter).","invite.task.youtube.title":"Folgen Sie unserem YouTube-Kanal","invite.task.youtube.desc":"Abonnieren und folgen Sie unserem offiziellen YouTube-Kanal","invite.task.telegram.title":"Treten Sie der Telegram-Gruppe bei","invite.task.telegram.desc":"Treten Sie unserer offiziellen Telegram-Community-Gruppe bei","invite.task.discord.title":"Treten Sie einem Discord-Server bei","invite.task.discord.desc":"Treten Sie unserem Discord-Community-Server bei",message:"-","layouts.usermenu.dialog.title":"Informationen","layouts.usermenu.dialog.content":"Möchten Sie sich wirklich abmelden?","layouts.userLayout.title":"Finden Sie die Wahrheit in der Unsicherheit","dashboard.indicator.boundary.message":"Note: The indicator script only computes plots + buy/sell signals. Position sizing, risk, scaling, fees/slippage belong to execution config.","dashboard.indicator.boundary.indicatorRule":"Keep the script to buy/sell only (and set df['buy']/df['sell']). Do NOT implement position management, TP/SL, scaling in the script.","dashboard.indicator.boundary.backtestRule":"Rule: If a bar has a main signal (buy/sell → open/close/reverse), scaling in/out is skipped on the same bar.","dashboard.indicator.guide.title":"Python Indicator & Strategy Development Guide","dashboard.indicator.guide.intro":"This platform supports writing custom technical indicators and trading signals using Python. The system includes built-in pandas and numpy data analysis libraries. You can use standard DataFrame operations to process K-line data and draw charts or mark buy/sell signals.","dashboard.indicator.guide.section1.title":"1. Runtime Environment & Predefined Variables","dashboard.indicator.guide.section1.env":"Your code runs in a browser-based Python environment (Pyodide).","dashboard.indicator.guide.section1.libs":"Pre-installed Libraries","dashboard.indicator.guide.section1.libsDesc":"The following libraries are imported by default, no need to import again:","dashboard.indicator.guide.section1.libsList":"pandas (pd), numpy (np), math, json","dashboard.indicator.guide.section1.data":"Input Data: df","dashboard.indicator.guide.section1.dataDesc":"The system automatically converts current K-line data into a Pandas DataFrame object, variable name is df.","dashboard.indicator.guide.section1.dataColumns":"df contains the following columns (all float type):","dashboard.indicator.guide.section1.dataColumnsList":"time (timestamp, seconds), open, high, low, close, volume","dashboard.indicator.guide.section1.dataNote":"Data index is arranged from old to new (0 is the earliest data, last row is the latest data).","dashboard.indicator.guide.section1.dataIndex":"Important: df index is timestamp (DatetimeIndex), please preserve the index, avoid using .values which loses the index.","dashboard.indicator.guide.section2.title":"2. Parameter Definition","dashboard.indicator.guide.section2.desc":"You can define variables as parameters at the beginning of your code. The system will try to parse statements like variable = value as adjustable parameters.","dashboard.indicator.guide.section2.example":"Parameter Example","dashboard.indicator.guide.section2.exampleCode":"span = 20 or multiplier = 2.0","dashboard.indicator.guide.section3.title":"3. Backtest Signal Setup (Important!)","dashboard.indicator.guide.section3.desc":"If you want your indicator to support backtesting, you must set the following two columns in your code:","dashboard.indicator.guide.section3.backtestRequired":"Required for Backtesting:","dashboard.indicator.guide.section3.backtestBuySignal":"df['buy_signal'] - Boolean Series, True indicates buy signal","dashboard.indicator.guide.section3.backtestSellSignal":"df['sell_signal'] - Boolean Series, True indicates sell signal","dashboard.indicator.guide.section3.backtestExample":"Example:","dashboard.indicator.guide.section3.backtestExampleCode":"df['buy_signal'] = condition_buy
df['sell_signal'] = condition_sell","dashboard.indicator.guide.section3.backtestNote":"Note: Even if you only set output.signals for chart display, you must set these two columns to enable backtesting.","dashboard.indicator.guide.section4.title":"4. Output Requirements: output","dashboard.indicator.guide.section4.desc":"At the end of code execution, you must define a dictionary named output to tell the chart how to display results.","dashboard.indicator.guide.section4.fields":"The output dictionary contains the following fields:","dashboard.indicator.guide.section4.plots":"plots - For drawing lines (e.g., moving averages, RSI)","dashboard.indicator.guide.section4.signals":"signals - For marking buy/sell signals (e.g., arrows, labels)","dashboard.indicator.guide.section4.name":"name - Indicator name (optional)","dashboard.indicator.guide.section4.calculatedVars":"calculatedVars - Calculated variables (optional, for displaying additional information)","dashboard.indicator.guide.section5.title":"5. Plot Configuration (Plots)","dashboard.indicator.guide.section5.desc":"Each object in the plots list represents a line.","dashboard.indicator.guide.section5.table.field":"Field","dashboard.indicator.guide.section5.table.type":"Type","dashboard.indicator.guide.section5.table.required":"Required","dashboard.indicator.guide.section5.table.requiredYes":"Yes","dashboard.indicator.guide.section5.table.requiredNo":"No","dashboard.indicator.guide.section5.table.desc":"Description","dashboard.indicator.guide.section5.table.name":"The name of the indicator line, displayed in the legend","dashboard.indicator.guide.section5.table.data":"Data list, length must match the number of rows in df. Recommended to use series.tolist()","dashboard.indicator.guide.section5.table.color":"Line color (Hex format, e.g. '#ff0000'). If not filled, the system will automatically assign","dashboard.indicator.guide.section5.table.typeDesc":"Chart type, default is 'line'","dashboard.indicator.guide.section5.table.overlay":"Important. True means display on main chart (with K-line), False means display on sub-chart (independent area)","dashboard.indicator.guide.section5.example":"Example: Draw Simple Moving Average (SMA)","dashboard.indicator.guide.section5.exampleCalc":"Calculate SMA","dashboard.indicator.guide.section5.exampleOutput":"Construct Output","dashboard.indicator.guide.section5.exampleOverlay":"Display on main chart","dashboard.indicator.guide.section6.title":"6. Signal Markers (Signals)","dashboard.indicator.guide.section6.desc":"signals are used to mark buy/sell points on specific K-lines through icons or text. Note: This is only for chart display. The backtest system uses df['buy_signal'] and df['sell_signal'].","dashboard.indicator.guide.section6.table.type":"Signal type: 'buy' (buy, marked below K-line) or 'sell' (sell, marked above K-line)","dashboard.indicator.guide.section6.table.data":"Signal data list. Fill price value at signal positions, fill None (or np.nan) at non-signal positions","dashboard.indicator.guide.section6.table.text":'Text displayed on the label (e.g. "B", "S", "Buy", "Sell")',"dashboard.indicator.guide.section6.table.color":"Marker color","dashboard.indicator.guide.section6.hint":"The system automatically handles positioning.","dashboard.indicator.guide.section6.buy":"Markers will be automatically positioned below the Low of the current K-line","dashboard.indicator.guide.section6.sell":"Markers will be automatically positioned above the High of the current K-line","dashboard.indicator.guide.section6.example":"Example: Draw Buy/Sell Signals","dashboard.indicator.guide.section6.exampleInit":"Initialize signal list, fill all with None","dashboard.indicator.guide.section6.exampleLogic":"Simple logic: mark buy when close price is greater than open price","dashboard.indicator.guide.section6.exampleNote":"In actual logic, please use loops or vectorized operations","dashboard.indicator.guide.section6.examplePrice":"Record price","dashboard.indicator.guide.section6.exampleText":"Buy","dashboard.indicator.guide.section7.title":"7. Complete Code Examples","dashboard.indicator.guide.section7.exampleA":"Example A: Dual EMA Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleACode":'# 1. Calculate indicators
df[\'ema_fast\'] = df[\'close\'].ewm(span=5, adjust=False).mean()
df[\'ema_slow\'] = df[\'close\'].ewm(span=13, adjust=False).mean()

# 2. Calculate crossover signals
cross_up = (df[\'ema_fast\'] > df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) <= df[\'ema_slow\'].shift(1))
cross_down = (df[\'ema_fast\'] < df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) >= df[\'ema_slow\'].shift(1))

# 3. 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = cross_up
df[\'close_long\'] = cross_down
df[\'open_short\'] = cross_down
df[\'close_short\'] = cross_up

# 4. Generate signal data for chart display
buy_signals = [df[\'low\'].iloc[i] * 0.995 if cross_up.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if cross_down.iloc[i] else None for i in range(len(df))]

# 5. Build output
output = {
"name": "Dual EMA Strategy",
"plots": [
{"name": "EMA 5", "data": df[\'ema_fast\'].tolist(), "color": "#FF6B6B", "overlay": True},
{"name": "EMA 13", "data": df[\'ema_slow\'].tolist(), "color": "#4ECDC4", "overlay": True}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section7.exampleB":"Example B: Bollinger Bands - Chart Display Only","dashboard.indicator.guide.section7.exampleBCode":'# Calculate Bollinger Bands (chart display only, no backtesting)
length = 20
mult = 2.0
df[\'sma\'] = df[\'close\'].rolling(length).mean()
df[\'std\'] = df[\'close\'].rolling(length).std()
df[\'upper\'] = df[\'sma\'] + mult * df[\'std\']
df[\'lower\'] = df[\'sma\'] - mult * df[\'std\']

output = {
"name": "Bollinger Bands",
"plots": [
{"name": "Upper", "data": df[\'upper\'].tolist(), "color": "#FF5252", "overlay": True},
{"name": "Middle", "data": df[\'sma\'].tolist(), "color": "#2196F3", "overlay": True},
{"name": "Lower", "data": df[\'lower\'].tolist(), "color": "#00E676", "overlay": True}
]
}',"dashboard.indicator.guide.section7.exampleC":"Example C: RSI Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleCCode":'# Calculate RSI
delta = df[\'close\'].diff()
up = delta.clip(lower=0)
down = -1 * delta.clip(upper=0)
ema_up = up.ewm(com=13, adjust=False).mean()
ema_down = down.ewm(com=13, adjust=False).mean()
rs = ema_up / ema_down
df[\'rsi\'] = 100 - (100 / (1 + rs))

# Generate trading signals
buy_condition = df[\'rsi\'] < 30 # Oversold buy
sell_condition = df[\'rsi\'] > 70 # Overbought sell

# 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = buy_condition
df[\'close_long\'] = sell_condition
df[\'open_short\'] = sell_condition
df[\'close_short\'] = buy_condition

# Generate chart signals
buy_signals = [df[\'low\'].iloc[i] * 0.995 if buy_condition.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if sell_condition.iloc[i] else None for i in range(len(df))]

output = {
"name": "RSI Strategy",
"plots": [
{"name": "RSI", "data": df[\'rsi\'].tolist(), "color": "#9C27B0", "overlay": False},
{"name": "Overbought", "data": [70] * len(df), "color": "#FF5252", "style": "dashed", "overlay": False},
{"name": "Oversold", "data": [30] * len(df), "color": "#00E676", "style": "dashed", "overlay": False}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section6.param":"Parameters","dashboard.indicator.guide.section6.calc":"Calculate","dashboard.indicator.guide.section6.output":"Output","dashboard.indicator.guide.section6.generate":"Generate signal data (initialize with None)","dashboard.indicator.guide.section6.subchart":"Display on sub-chart","dashboard.indicator.guide.section8.title":"8. Frequently Asked Questions (FAQ)","dashboard.indicator.guide.section8.q1":"Q: Why can't my indicator be backtested?","dashboard.indicator.guide.section8.a1":"A: The backtest system requires NEW signal columns: df['open_long'], df['close_long'], df['open_short'], df['close_short'] (boolean). Even if you set output.signals for chart display, you must set these columns to enable backtesting.","dashboard.indicator.guide.section8.q2":"Q: Data length mismatch?","dashboard.indicator.guide.section8.a2":"A: The data list in plots and signals must have exactly the same length as the K-line data. If you use df['xxx'].tolist(), there is usually no problem.","dashboard.indicator.guide.section8.q3":"Q: How to handle NaN (empty values)?","dashboard.indicator.guide.section8.a3":"A: Pandas calculations (such as rolling mean) will produce NaN at the beginning. The system will automatically convert NaN to null for chart rendering. You don't need to manually clean it, but if you need specific logic, you can use df.fillna(0) or other methods.","dashboard.indicator.guide.section8.q4":"Q: Index mismatch causing all signals to be NaN?","dashboard.indicator.guide.section8.a4":"A: Please ensure you preserve the original df index (timestamp). Avoid using .values to create new Series. Use columns directly like df['close'] for operations.","dashboard.indicator.guide.section8.q5":"Q: Can I use third-party network libraries?","dashboard.indicator.guide.section8.a5":"A: No. The runtime environment is a browser sandbox and cannot use libraries like requests to request external APIs, nor can it install additional pip packages. Limited to built-in libraries such as pandas, numpy, math, json.","dashboard.indicator.guide.section8.q6":"Q: How to debug code?","dashboard.indicator.guide.section8.a6":"A: If the chart does not display indicators, it is usually because the Python code has an error. Please check for syntax errors or array index out of bounds. It is recommended to debug the algorithm logic in a local Python environment first, then copy it in.","dashboard.indicator.guide.section8.q7":"Q: Backtest shows 0 signals?","dashboard.indicator.guide.section8.a7":"A: Please check the data type of df['open_long']/df['close_long']/df['open_short']/df['close_short']. They should be boolean (True/False), not numeric. Use condition.fillna(False).astype(bool) to ensure correct type.","dashboard.indicator.backtest.commissionHint":"Charged on notional value (incl. leverage) per trade; both entry & exit are deducted from balance.","dashboard.indicator.backtest.historyTitle":"Backtest History","dashboard.indicator.backtest.historyRefresh":"Refresh","dashboard.indicator.backtest.historyView":"View","dashboard.indicator.backtest.historyNoData":"No backtest history","dashboard.indicator.backtest.historyUseCurrent":"Only current symbol/timeframe","dashboard.indicator.backtest.historyFilterSymbol":"Symbol","dashboard.indicator.backtest.historyFilterTimeframe":"Timeframe","dashboard.indicator.backtest.historyApply":"Apply filters","dashboard.indicator.backtest.historyAIAnalyze":"AI Analyze","dashboard.indicator.backtest.historyAIAnalyzeTitle":"AI Suggestions","dashboard.indicator.backtest.historyNoAIResult":"No AI analysis result","dashboard.indicator.backtest.historyRunId":"Run ID","dashboard.indicator.backtest.historyCreatedAt":"Time","dashboard.indicator.backtest.historyRange":"Range","dashboard.indicator.backtest.historyStatus":"Status","dashboard.indicator.backtest.historyStatusSuccess":"Success","dashboard.indicator.backtest.historyStatusFailed":"Failed","dashboard.indicator.backtest.historyActions":"Actions","dashboard.indicator.backtest.hint.entryPctMax":"Max entry: {maxPct}% (reserve budget for future scale-ins)","trading-assistant.exchange.ipWhitelistTip":"Please add the following IPs to the whitelist in your exchange API settings:","signal-robot.title":"Signal Robot Console","signal-robot.createBot":"Create New Bot","signal-robot.search.nameOrSymbol":"Name/Symbol","signal-robot.search.placeholder":"Search bot name or symbol","signal-robot.search.status":"Status","signal-robot.search.statusAll":"All","signal-robot.search.statusRunning":"Running","signal-robot.search.statusPaused":"Paused","signal-robot.search.query":"Query","signal-robot.search.reset":"Reset","signal-robot.table.botName":"Bot Name","signal-robot.table.symbolTimeframe":"Symbol/Timeframe","signal-robot.table.triggerStrategy":"Trigger Strategy","signal-robot.table.notificationChannels":"Notification Channels","signal-robot.table.status":"Status","signal-robot.table.action":"Action","signal-robot.table.triggerConditions":"{count} trigger conditions","signal-robot.table.monitoring":"Monitoring","signal-robot.table.paused":"Paused","signal-robot.table.edit":"Edit","signal-robot.table.pause":"Pause","signal-robot.table.start":"Start","signal-robot.table.delete":"Delete","signal-robot.table.deleteConfirm":"Are you sure you want to delete this bot?","signal-robot.table.deleteSuccess":"Deleted successfully","signal-robot.table.startSuccess":"Bot started","signal-robot.table.pauseSuccess":"Bot paused","signal-robot.channel.telegram":"Telegram","signal-robot.channel.discord":"Discord","signal-robot.channel.email":"Email","signal-robot.channel.webhook":"Webhook","signal-robot.channel.browser":"Browser Push","signal-robot.modal.createTitle":"Create New Signal Robot","signal-robot.modal.editTitle":"Edit Signal Robot","signal-robot.modal.step.basic":"Basic Settings","signal-robot.modal.step.entry":"Entry Strategy","signal-robot.modal.step.position":"Position Management","signal-robot.modal.step.risk":"Risk Control","signal-robot.modal.step.notify":"Notification Config","signal-robot.modal.prev":"Previous","signal-robot.modal.next":"Next","signal-robot.modal.preview":"Preview Backtest","signal-robot.modal.complete":"Complete & Run","signal-robot.modal.saveSuccess":"Saved successfully","signal-robot.modal.previewDeveloping":"Preview feature is under development...","signal-robot.modal.basicInfoRequired":"Please complete basic information","signal-robot.basic.alert":"Set basic information for the bot","signal-robot.basic.title":"Basic Information","signal-robot.basic.botName":"Bot Name","signal-robot.basic.botNamePlaceholder":"e.g.: BTC SuperTrend Strategy","signal-robot.basic.symbol":"Trading Pair","signal-robot.basic.symbolPlaceholder":"Select from watchlist","signal-robot.basic.noWatchlist":"No watchlist items, please add in market page first","signal-robot.basic.timeframe":"K-Line Period","signal-robot.basic.timeframe15m":"15 Minutes","signal-robot.basic.timeframe30m":"30 Minutes","signal-robot.basic.timeframe1h":"1 Hour","signal-robot.basic.timeframe4h":"4 Hours","signal-robot.basic.timeframe1d":"1 Day","signal-robot.basic.autoNameSuggestion":"{symbol} Signal Robot","signal-robot.entry.alert":"Trigger entry signal when all conditions below are met","signal-robot.entry.condition":"Condition {index}","signal-robot.entry.indicator":"Indicator","signal-robot.entry.indicatorSupertrend":"SuperTrend","signal-robot.entry.indicatorEma":"EMA (Exponential Moving Average)","signal-robot.entry.indicatorRsi":"RSI (Relative Strength Index)","signal-robot.entry.indicatorMacd":"MACD","signal-robot.entry.indicatorBollinger":"Bollinger Bands","signal-robot.entry.atrPeriod":"ATR Period","signal-robot.entry.multiplier":"Multiplier","signal-robot.entry.triggerSignal":"Trigger Signal","signal-robot.entry.signalTrendBullish":"Trend Bullish","signal-robot.entry.signalTrendBearish":"Trend Bearish","signal-robot.entry.signalIsUptrend":"Is Uptrend","signal-robot.entry.signalIsDowntrend":"Is Downtrend","signal-robot.entry.period":"Period","signal-robot.entry.compareCondition":"Compare Condition","signal-robot.entry.priceAbove":"Price > EMA (Price Above)","signal-robot.entry.priceBelow":"Price < EMA (Price Below)","signal-robot.entry.crossUp":"Price Crosses Above EMA (Golden Cross)","signal-robot.entry.crossDown":"Price Crosses Below EMA (Death Cross)","signal-robot.entry.compare":"Compare","signal-robot.entry.greaterThan":"Greater Than","signal-robot.entry.lessThan":"Less Than","signal-robot.entry.crossUpShort":"Cross Up","signal-robot.entry.crossDownShort":"Cross Down","signal-robot.entry.threshold":"Threshold","signal-robot.entry.selectIndicator":"Please select an indicator to configure parameters","signal-robot.entry.addCondition":"Add Condition","signal-robot.position.alert":"Configure initial position size, leverage and pyramiding rules","signal-robot.position.basicTitle":"Basic Position Management","signal-robot.position.initialSize":"Initial Size (Capital %)","signal-robot.position.initialSizeHint":"Recommended 5% - 20%","signal-robot.position.leverage":"Leverage","signal-robot.position.leverageHint":"Please ensure your exchange account supports this leverage","signal-robot.position.maxPyramiding":"Max Pyramiding Times","signal-robot.position.maxPyramidingHint":"0 means no pyramiding","signal-robot.position.pyramidingTitle":"Pyramiding Rules","signal-robot.position.pyramidingEnabled":"Enabled","signal-robot.position.pyramidingDisabled":"Disabled","signal-robot.position.pyramidingCondition":"Pyramiding Trigger Condition","signal-robot.position.priceRisePct":"Price Rises (Long) / Falls (Short)","signal-robot.position.profitPct":"Profit Reaches","signal-robot.position.triggerThreshold":"Trigger Threshold (%)","signal-robot.position.triggerThresholdHint":"e.g. 3%: add position once every 3% rise","signal-robot.position.addSize":"Single Add Size (Capital %)","signal-robot.position.pyramidingDisabledHint":"Pyramiding disabled, only initial position will be executed","signal-robot.risk.alert":"Configure take profit, stop loss and exit rules","signal-robot.risk.stopLossTitle":"Stop Loss","signal-robot.risk.stopLossEnabled":"Enabled","signal-robot.risk.stopLossDisabled":"Disabled","signal-robot.risk.stopLossType":"Stop Loss Type","signal-robot.risk.stopLossFixedPct":"Fixed Percentage","signal-robot.risk.stopLossAtrMultiplier":"ATR Multiplier","signal-robot.risk.stopLossValue":"Value","signal-robot.risk.stopLossFixedHint":"e.g. 2%: stop loss when loss reaches 2%","signal-robot.risk.stopLossAtrHint":"e.g. 2.0: stop loss when price touches ATR*2.0","signal-robot.risk.stopLossDisabledHint":"Stop loss disabled (high risk)","signal-robot.risk.trailingStopTitle":"Trailing Stop","signal-robot.risk.activationProfit":"Activation Profit (%)","signal-robot.risk.activationProfitHint":"Start trailing when profit reaches this level","signal-robot.risk.callbackPct":"Callback (%)","signal-robot.risk.callbackPctHint":"Trigger take profit when price falls from peak by this percentage","signal-robot.risk.trailingStopDisabledHint":"Trailing stop disabled","signal-robot.risk.otherExitTitle":"Other Exit Rules","signal-robot.risk.signalExit":"Allow Signal Exit","signal-robot.risk.signalExitHint":"Close position immediately when reverse signal appears (e.g. close long when short signal appears)","signal-robot.notify.alert":"Configure notification methods when signal is triggered","signal-robot.notify.channelTitle":"Notification Channels","signal-robot.notify.discordWebhook":"Discord Webhook","signal-robot.notify.genericWebhook":"Generic Webhook","signal-robot.notify.webhookUrl":"Webhook URL","signal-robot.notify.webhookUrlPlaceholder":"https://example.com/webhook","signal-robot.notify.discordUrl":"Discord URL","signal-robot.notify.discordUrlPlaceholder":"https://discord.com/api/webhooks/...","signal-robot.operator.greaterThan":"Greater Than","signal-robot.operator.lessThan":"Less Than","signal-robot.operator.equal":"Equal","signal-robot.operator.goldenCross":"Golden Cross","signal-robot.operator.deathCross":"Death Cross","signal-robot.operator.increaseBy":"Increase By","signal-robot.operator.decreaseBy":"Decrease By","signal-robot.indicator.price":"Price","signal-robot.indicator.rsi":"RSI","signal-robot.indicator.kdjK":"KDJ(K)","signal-robot.indicator.kdjJ":"KDJ(J)","signal-robot.indicator.macd":"MACD","signal-robot.indicator.macdHist":"MACD Histogram","signal-robot.indicator.bollingerUp":"Bollinger Upper","signal-robot.indicator.bollingerLow":"Bollinger Lower","signal-robot.indicator.volume":"Volume","signal-robot.indicator.changePct1h":"1H Change %","signal-robot.indicator.changePct24h":"24H Change %","signal-robot.indicator.signalLine":"Signal Line","settings.group.agent_memory":"Gedächtnis/Reflexion","settings.group.reflection_worker":"Automatischer Reflexions-Prüf-Worker","settings.field.ENABLE_AGENT_MEMORY":"Agenten-Gedächtnis aktivieren","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"Vektorsuche aktivieren (lokal)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"Embedding-Dimension","settings.field.AGENT_MEMORY_TOP_K":"Top-K Abrufanzahl","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"Kandidatenfenstergröße","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"Halbwertszeit der Zeitabnahme (Tage)","settings.field.AGENT_MEMORY_W_SIM":"Ähnlichkeitsgewicht","settings.field.AGENT_MEMORY_W_RECENCY":"Aktualitätsgewicht","settings.field.AGENT_MEMORY_W_RETURNS":"Renditegewicht","settings.field.ENABLE_REFLECTION_WORKER":"Automatische Verifikation aktivieren","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"Verifikationsintervall (Sek.)","profile.notifications.title":"Benachrichtigungseinstellungen","profile.notifications.hint":"Konfigurieren Sie Ihre Standard-Benachrichtigungsmethoden, die automatisch beim Erstellen von Asset-Monitoren und Alarmen verwendet werden","profile.notifications.defaultChannels":"Standard-Benachrichtigungskanäle","profile.notifications.browser":"In-App-Benachrichtigung","profile.notifications.email":"E-Mail","profile.notifications.phone":"SMS","profile.notifications.telegramBotToken":"Telegram Bot Token","profile.notifications.telegramBotTokenPlaceholder":"Geben Sie Ihren Telegram Bot Token ein","profile.notifications.telegramBotTokenHint":"Erstellen Sie einen Bot über @BotFather um den Token zu erhalten","profile.notifications.telegramChatId":"Telegram Chat ID","profile.notifications.telegramPlaceholder":"Geben Sie Ihre Telegram Chat ID ein (z.B. 123456789)","profile.notifications.telegramHint":"Senden Sie /start an @userinfobot um Ihre Chat ID zu erhalten","profile.notifications.notifyEmail":"Benachrichtigungs-E-Mail","profile.notifications.emailPlaceholder":"E-Mail-Adresse für Benachrichtigungen","profile.notifications.emailHint":"Verwendet standardmäßig die Konto-E-Mail, Sie können eine andere festlegen","profile.notifications.phonePlaceholder":"Telefonnummer eingeben (z.B. +49151234567)","profile.notifications.phoneHint":"Administrator muss Twilio-Dienst konfigurieren","profile.notifications.discordWebhook":"Discord Webhook","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"Erstellen Sie einen Webhook in den Discord-Servereinstellungen","profile.notifications.webhookUrl":"Webhook URL","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"Benutzerdefinierte Webhook-URL, Benachrichtigungen per POST JSON","profile.notifications.webhookToken":"Webhook Token (Optional)","profile.notifications.webhookTokenPlaceholder":"Bearer Token zur Anfrage-Authentifizierung","profile.notifications.webhookTokenHint":"Wird als Authorization: Bearer Token an Webhook gesendet","profile.notifications.testBtn":"Testbenachrichtigung senden","profile.notifications.saveSuccess":"Benachrichtigungseinstellungen gespeichert","profile.notifications.selectChannel":"Bitte wählen Sie mindestens einen Benachrichtigungskanal","profile.notifications.fillTelegramToken":"Bitte Telegram Bot Token eingeben","profile.notifications.fillTelegram":"Bitte Telegram Chat ID eingeben","profile.notifications.fillEmail":"Bitte Benachrichtigungs-E-Mail eingeben","profile.notifications.testSent":"Testbenachrichtigung gesendet, bitte Benachrichtigungskanäle überprüfen"},y=(0,i.A)((0,i.A)({},f),p)}}]); \ No newline at end of file diff --git a/frontend/dist/js/lang-de-DE.3694b7c2.js b/frontend/dist/js/lang-de-DE.555ed03d.js similarity index 99% rename from frontend/dist/js/lang-de-DE.3694b7c2.js rename to frontend/dist/js/lang-de-DE.555ed03d.js index be6f533..e5de75f 100644 --- a/frontend/dist/js/lang-de-DE.3694b7c2.js +++ b/frontend/dist/js/lang-de-DE.555ed03d.js @@ -1 +1 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[879],{28071:function(e,a,t){t.d(a,{default:function(){return y}});var i=t(57888),n={items_per_page:"/ Seite",jump_to:"Gehe zu",jump_to_confirm:"bestätigen",page:"",prev_page:"Vorherige Seite",next_page:"Nächste Seite",prev_5:"5 Seiten zurück",next_5:"5 Seiten vor",prev_3:"3 Seiten zurück",next_3:"3 Seiten vor"},s=t(85505),r={today:"Heute",now:"Jetzt",backToToday:"Zurück zu Heute",ok:"OK",clear:"Zurücksetzen",month:"Monat",year:"Jahr",timeSelect:"Zeit wählen",dateSelect:"Datum wählen",monthSelect:"Wähle einen Monat",yearSelect:"Wähle ein Jahr",decadeSelect:"Wähle ein Jahrzehnt",yearFormat:"YYYY",dateFormat:"D.M.YYYY",dayFormat:"D",dateTimeFormat:"D.M.YYYY HH:mm:ss",monthBeforeYear:!0,previousMonth:"Vorheriger Monat (PageUp)",nextMonth:"Nächster Monat (PageDown)",previousYear:"Vorheriges Jahr (Ctrl + left)",nextYear:"Nächstes Jahr (Ctrl + right)",previousDecade:"Vorheriges Jahrzehnt",nextDecade:"Nächstes Jahrzehnt",previousCentury:"Vorheriges Jahrhundert",nextCentury:"Nächstes Jahrhundert"},o={placeholder:"Zeit auswählen"},d=o,l={lang:(0,s.A)({placeholder:"Datum auswählen",rangePlaceholder:["Startdatum","Enddatum"]},r),timePickerLocale:(0,s.A)({},d)},c=l,g=c,u={locale:"de",Pagination:n,DatePicker:c,TimePicker:d,Calendar:g,Table:{filterTitle:"Filter-Menü",filterConfirm:"OK",filterReset:"Zurücksetzen",selectAll:"Selektiere Alle",selectInvert:"Selektion Invertieren"},Modal:{okText:"OK",cancelText:"Abbrechen",justOkText:"OK"},Popconfirm:{okText:"OK",cancelText:"Abbrechen"},Transfer:{searchPlaceholder:"Suchen",itemUnit:"Eintrag",itemsUnit:"Einträge"},Upload:{uploading:"Hochladen...",removeFile:"Datei entfernen",uploadError:"Fehler beim Hochladen",previewFile:"Dateivorschau",downloadFile:"Download-Datei"},Empty:{description:"Keine Daten"}},h=u,b=t(77853),m=t.n(b),f={antLocale:h,momentName:"de",momentLocale:m()},p={submit:"Senden",save:"speichern","submit.ok":"Übermittlung erfolgreich","save.ok":"Erfolgreich gespeichert","menu.welcome":"Willkommen","menu.home":"Startseite","menu.dashboard":"Armaturenbrett","menu.dashboard.indicator":"Indikatorenanalyse","menu.dashboard.community":"Indikatorgemeinschaft","menu.dashboard.analysis":"KI-Analyse","menu.dashboard.tradingAssistant":"Handelsassistent","menu.dashboard.aiTradingAssistant":"KI-Handelsassistent","menu.dashboard.signalRobot":"Signal-Roboter","menu.dashboard.monitor":"Überwachungsseite","menu.dashboard.workplace":"Werkbank","menu.form":"Formularseite","menu.form.basic-form":"Grundform","menu.form.step-form":"Schritt-für-Schritt-Formular","menu.form.step-form.info":"Schritt-für-Schritt-Formular (Übertragungsinformationen ausfüllen)","menu.form.step-form.confirm":"Schritt-für-Schritt-Formular (Übertragungsinformationen bestätigen)","menu.form.step-form.result":"Schritt-für-Schritt-Formular (vollständig)","menu.form.advanced-form":"Erweiterte Formulare","menu.list":"Listenseite","menu.list.table-list":"Anfrageformular","menu.list.basic-list":"Standardliste","menu.list.card-list":"Kartenliste","menu.list.search-list":"Suchliste","menu.list.search-list.articles":"Suchliste (Artikel)","menu.list.search-list.projects":"Suchliste (Projekt)","menu.list.search-list.applications":"Suchliste (App)","menu.profile":"Detailseite","menu.profile.basic":"Grundlegende Detailseite","menu.profile.advanced":"Erweiterte Detailseite","menu.result":"Ergebnisseite","menu.result.success":"Erfolgsseite","menu.result.fail":"Fehlerseite","menu.exception":"Ausnahmeseite","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"Fehler auslösen","menu.account":"Persönliche Seite","menu.account.center":"Persönliches Zentrum","menu.account.settings":"persönliche Einstellungen","menu.account.trigger":"Triggerfehler","menu.account.logout":"Abmelden","menu.wallet":"meine Brieftasche","menu.docs":"Dokumentenzentrum","menu.docs.detail":"Dokumentdetails","menu.header.refreshPage":"Seite aktualisieren","menu.invite.friends":"Freunde einladen","app.setting.pagestyle":"allgemeine Stileinstellungen","app.setting.pagestyle.light":"Heller Menüstil","app.setting.pagestyle.dark":"Dunkler Menüstil","app.setting.pagestyle.realdark":"Dunkelmodus","app.setting.themecolor":"Themenfarbe","app.setting.navigationmode":"Navigationsmodus","app.setting.sidemenu.nav":"Seitenleistennavigation","app.setting.topmenu.nav":"Navigation in der oberen Leiste","app.setting.content-width":"Breite des Inhaltsbereichs","app.setting.content-width.tooltip":"Diese Einstellung ist nur wirksam, wenn [Navigation in der oberen Leiste]","app.setting.content-width.fixed":"Behoben","app.setting.content-width.fluid":"Streaming","app.setting.fixedheader":"Fester Header","app.setting.fixedheader.tooltip":"Bei festem Header konfigurierbar","app.setting.autoHideHeader":"Kopfzeile beim Scrollen ausblenden","app.setting.fixedsidebar":"Seitenmenü korrigiert","app.setting.sidemenu":"Seitenmenü-Layout","app.setting.topmenu":"Oberes Menülayout","app.setting.othersettings":"Andere Einstellungen","app.setting.weakmode":"Farbschwächemodus","app.setting.multitab":"Multi-Tab-Modus","app.setting.copy":"Einstellungen kopieren","app.setting.loading":"Thema wird geladen","app.setting.copyinfo":"Einstellungen erfolgreich kopieren src/config/defaultSettings.js","app.setting.copy.success":"Kopieren abgeschlossen","app.setting.copy.fail":"Der Kopiervorgang ist fehlgeschlagen","app.setting.theme.switching":"Wechselndes Thema!","app.setting.production.hint":"Die Konfigurationsleiste dient nur der Vorschau in der Entwicklungsumgebung und wird in der Produktionsumgebung nicht angezeigt. Bitte kopieren und ändern Sie die Konfigurationsdatei manuell.","app.setting.themecolor.daybreak":"Morgenblau (Standard)","app.setting.themecolor.dust":"Dämmerung","app.setting.themecolor.volcano":"Vulkan","app.setting.themecolor.sunset":"Sonnenuntergang","app.setting.themecolor.cyan":"Mingqing","app.setting.themecolor.green":"Auroragrün","app.setting.themecolor.geekblue":"Geek blau","app.setting.themecolor.purple":"Jiang Zi","app.setting.tooltip":"Seiteneinstellungen","user.login.userName":"Benutzername","user.login.password":"Passwort","user.login.username.placeholder":"Konto: Admin","user.login.password.placeholder":"Passwort: admin oder ant.design","user.login.message-invalid-credentials":"Die Anmeldung ist fehlgeschlagen. Bitte überprüfen Sie Ihre E-Mail-Adresse und Ihren Bestätigungscode","user.login.message-invalid-verification-code":"Fehler beim Bestätigungscode","user.login.tab-login-credentials":"Anmeldung mit Kontopasswort","user.login.tab-login-email":"E-Mail-Login","user.login.tab-login-mobile":"Anmeldung über die Mobiltelefonnummer","user.login.captcha.placeholder":"Bitte geben Sie den grafischen Bestätigungscode ein","user.login.mobile.placeholder":"Mobiltelefonnummer","user.login.mobile.verification-code.placeholder":"Bestätigungscode","user.login.email.placeholder":"Bitte geben Sie Ihre E-Mail-Adresse ein","user.login.email.verification-code.placeholder":"Bitte geben Sie den Bestätigungscode ein","user.login.email.sending":"Bestätigungscode wird gesendet...","user.login.email.send-success-title":"Tipps","user.login.email.send-success":"Der Bestätigungscode wurde erfolgreich gesendet. Bitte überprüfen Sie Ihre E-Mails","user.login.sms.send-success":"Der Bestätigungscode wurde erfolgreich gesendet. Bitte überprüfen Sie die Textnachricht","user.login.remember-me":"Automatische Anmeldung","user.login.forgot-password":"Passwort vergessen","user.login.sign-in-with":"Andere Anmeldemethoden","user.login.signup":"Registrieren Sie ein Konto","user.login.login":"Anmelden","user.register.register":"Registrieren","user.register.email.placeholder":"E-Mail","user.register.password.placeholder":"Bitte geben Sie mindestens 6 Zeichen ein. Bitte verwenden Sie keine Passwörter, die leicht zu erraten sind.","user.register.password.popover-message":"Bitte geben Sie mindestens 6 Zeichen ein. Bitte verwenden Sie keine Passwörter, die leicht zu erraten sind.","user.register.confirm-password.placeholder":"Passwort bestätigen","user.register.get-verification-code":"Holen Sie sich den Bestätigungscode","user.register.sign-in":"Melden Sie sich mit einem bestehenden Konto an","user.register-result.msg":"Ihr Konto: {email} Registrierung erfolgreich","user.register-result.activation-email":"Die Aktivierungs-E-Mail wurde an Ihr Postfach gesendet und ist 24 Stunden lang gültig. Bitte melden Sie sich umgehend bei Ihrem E-Mail-Konto an und klicken Sie auf den Link in der E-Mail, um Ihr Konto zu aktivieren.","user.register-result.back-home":"Zurück zur Startseite","user.register-result.view-mailbox":"Überprüfen Sie Ihr Postfach","user.email.required":"Bitte geben Sie Ihre E-Mail-Adresse ein!","user.email.wrong-format":"Das E-Mail-Adressformat ist falsch!","user.userName.required":"Bitte geben Sie Ihren Kontonamen oder Ihre E-Mail-Adresse ein","user.password.required":"Bitte geben Sie Ihr Passwort ein!","user.password.twice.msg":"Die doppelt eingegebenen Passwörter stimmen nicht überein!","user.password.strength.msg":"Das Passwort ist nicht sicher genug","user.password.strength.strong":"Stärke: Stark","user.password.strength.medium":"Stärke: Mittel","user.password.strength.low":"Stärke: gering","user.password.strength.short":"Stärke: zu kurz","user.confirm-password.required":"Bitte bestätigen Sie Ihr Passwort!","user.phone-number.required":"Bitte geben Sie die korrekte Mobiltelefonnummer ein","user.phone-number.wrong-format":"Das Format der Mobiltelefonnummer ist falsch!","user.verification-code.required":"Bitte geben Sie den Verifizierungscode ein!","user.captcha.required":"Bitte geben Sie den grafischen Verifizierungscode ein!","user.login.infos":"QuantDinger ist ein AI-Multi-Agent-Hilfstool für die Aktienanalyse und verfügt nicht über Qualifikationen als Wertpapieranlageberater. Alle Analyseergebnisse, Scores und Referenzmeinungen in der Plattform werden von KI automatisch auf Basis historischer Daten generiert und dienen ausschließlich der Ausbildung, Forschung und dem technischen Austausch und stellen keine Anlageberatung oder Entscheidungsgrundlage dar. Aktienanlagen bergen verschiedene Risiken wie Marktrisiko, Liquiditätsrisiko, politisches Risiko usw., die zu einem Kapitalverlust führen können. Benutzer sollten unabhängige Entscheidungen auf der Grundlage ihrer eigenen Risikotoleranz treffen, und jegliches Investitionsverhalten und alle Konsequenzen, die sich aus der Verwendung dieses Tools ergeben, sind vom Benutzer zu tragen. Der Markt ist riskant und Investitionen müssen vorsichtig sein.","user.login.tab-login-web3":"Web3-Anmeldung","user.login.web3.tip":"Signatur-Login mit Wallet","user.login.web3.connect":"Wallet verbinden und anmelden","user.login.web3.no-wallet":"Wallet nicht erkannt","user.login.web3.no-address":"Wallet-Adresse nicht erhalten","user.login.web3.nonce-failed":"Zufallszahl konnte nicht abgerufen werden","user.login.web3.verify-failed":"Die Signaturüberprüfung ist fehlgeschlagen","user.login.web3.success":"Anmeldung erfolgreich","user.login.web3.failed":"Die Wallet-Anmeldung ist fehlgeschlagen","nav.no_wallet":"Wallet nicht erkannt","nav.copy":"Kopieren","nav.copy_success":"Erfolgreich kopiert","user.login.oauth.google":"Melden Sie sich mit Google an","user.login.oauth.github":"Melden Sie sich mit GitHub an","user.login.oauth.loading":"Weiterleitung zur Autorisierungsseite...","user.login.oauth.failed":"Die OAuth-Anmeldung ist fehlgeschlagen","user.login.oauth.get-url-failed":"Der Autorisierungslink konnte nicht abgerufen werden","user.login.subtitle":"Gezielte quantitative Einblicke in globale Märkte","user.login.legal.title":"Haftungsausschluss","user.login.legal.view":"Rechtlichen Haftungsausschluss anzeigen","user.login.legal.collapse":"Haftungsausschluss einklappen","user.login.legal.agree":"Ich habe den Haftungsausschluss gelesen und stimme ihm zu","user.login.legal.required":"Bitte lesen und überprüfen Sie zunächst den rechtlichen Haftungsausschluss","user.login.legal.content":"QuantDinger ist ein AI-Multi-Agent-Hilfstool für die Aktienanalyse und verfügt nicht über Qualifikationen als Wertpapieranlageberater. Alle Analyseergebnisse, Bewertungen und Referenzmeinungen in der Plattform werden von KI automatisch auf Basis historischer Daten generiert und dienen ausschließlich der Ausbildung, Forschung und dem technischen Austausch und stellen keine Anlageberatung oder Entscheidungsgrundlage dar. Aktienanlagen bergen verschiedene Risiken wie Marktrisiko, Liquiditätsrisiko, politisches Risiko usw., die zu einem Kapitalverlust führen können. Benutzer sollten unabhängige Entscheidungen auf der Grundlage ihrer eigenen Risikotoleranz treffen, und jegliches Investitionsverhalten und alle Konsequenzen, die sich aus der Verwendung dieses Tools ergeben, sind vom Benutzer zu tragen. Der Markt ist riskant und Investitionen müssen vorsichtig sein.","user.login.privacy.title":"Datenschutzrichtlinie für Benutzer","user.login.privacy.view":"Datenschutzrichtlinie für Benutzer anzeigen","user.login.privacy.collapse":"Schließen Sie die Datenschutzbestimmungen für Benutzer","user.login.privacy.content":"Wir legen Wert auf Ihre Privatsphäre und Ihren Datenschutz. 1) Erfassungsumfang: Es werden nur die zur Umsetzung der Funktion erforderlichen Informationen (z. B. E-Mail, Mobiltelefonnummer, Vorwahl, Web3-Wallet-Adresse) sowie notwendige Protokolle und Geräteinformationen erfasst. 2) Verwendungszweck: Zur Kontoanmeldung und Sicherheitsüberprüfung, Bereitstellung von Servicefunktionen, Fehlerbehebung und Compliance-Anforderungen. 3) Speicherung und Sicherheit: Daten werden verschlüsselt und gespeichert, und es werden die erforderlichen Berechtigungen und Zugriffskontrollmaßnahmen ergriffen, um unbefugten Zugriff, Offenlegung oder Verlust zu verhindern. 4) Weitergabe an Dritte: Sofern dies nicht durch Gesetze und Vorschriften vorgeschrieben oder für die Erbringung von Dienstleistungen erforderlich ist, werden Ihre personenbezogenen Daten nicht an Dritte weitergegeben. Bei Einbindung von Diensten Dritter (z. B. Wallets, SMS-Dienstleister) erfolgt die Verarbeitung nur im für die Umsetzung der Funktion erforderlichen Mindestumfang. 5) Cookies/lokale Speicherung: werden für den Anmeldestatus und die notwendige Sitzungswartung verwendet (z. B. Token, PHPSESSID). Sie können sie im Browser löschen oder einschränken. 6) Persönlichkeitsrechte: Sie können Ihre Rechte auf Auskunft, Berichtigung, Löschung, Widerruf der Einwilligung usw. gemäß den Gesetzen und Vorschriften ausüben. 7) Änderungen und Hinweise: Wenn diese Bedingungen aktualisiert werden, werden sie gut sichtbar auf der Seite angezeigt. Durch die weitere Nutzung dieses Dienstes wird davon ausgegangen, dass Sie den aktualisierten Inhalt gelesen und ihm zugestimmt haben. Wenn Sie diesen Bedingungen oder deren Aktualisierungen nicht zustimmen, stellen Sie bitte die Nutzung des Dienstes ein und kontaktieren Sie uns.","account.basicInfo":"Grundlegende Informationen","account.id":"Benutzer-ID","account.username":"Benutzername","account.nickname":"Spitzname","account.email":"E-Mail","account.mobile":"Mobiltelefonnummer","account.web3address":"Wallet-Adresse","account.pid":"Referrer-ID","account.level":"Benutzerebene","account.money":"Gleichgewicht","account.qdtBalance":"QDT-Balance","account.score":"Punkte","account.createtime":"Anmeldezeit","account.inviteLink":"Einladungslink","account.recharge":"Aufladen","account.rechargeTip":"Bitte verwenden Sie WeChat oder Alipay, um den untenstehenden QR-Code zum Aufladen zu scannen.","account.qrCodePlaceholder":"QR-Code-Platzhalter (Emulation)","account.rechargeAmount":"Aufladebetrag","account.enterAmount":"Bitte geben Sie den Aufladebetrag ein","account.rechargeHint":"Mindesteinzahlungsbetrag: 1 QDT","account.confirmRecharge":"Bestätigen Sie das Aufladen","account.enterValidAmount":"Bitte geben Sie einen gültigen Aufladebetrag ein","account.rechargeSuccess":"Aufladen erfolgreich! {amount} QDT eingezahlt","account.settings.menuMap.basic":"Grundeinstellungen","account.settings.menuMap.security":"Sicherheitseinstellungen","account.settings.menuMap.notification":"Benachrichtigung über neue Nachrichten","account.settings.menuMap.moneyLog":"Details zum Fonds","account.moneyLog.empty":"Noch keine Fondsdetails","account.moneyLog.total":"Insgesamt {total} Datensätze","account.moneyLog.type.purchase":"Kaufindikator","account.moneyLog.type.recharge":"Aufladen","account.moneyLog.type.refund":"Rückerstattung","account.moneyLog.type.reward":"Belohnung","account.moneyLog.type.income":"Indikatoreinkommen","account.moneyLog.type.commission":"Bearbeitungsgebühr für die Plattform","wallet.balance":"QDT-Balance","wallet.recharge":"Aufladen","wallet.withdraw":"Bargeld abheben","wallet.filter":"Filtern","wallet.reset":"zurückgesetzt","wallet.totalRecharge":"Akkumulierte Aufladung","wallet.totalWithdraw":"Kumulierte Abhebungen","wallet.totalIncome":"Kumuliertes Einkommen","wallet.records":"Transaktionsaufzeichnungen und Fondsdetails","wallet.tradingRecords":"Transaktionsverlauf","wallet.moneyLog":"Details zum Fonds","wallet.rechargeTip":"Bitte verwenden Sie WeChat oder Alipay, um den untenstehenden QR-Code zum Aufladen zu scannen.","wallet.qrCodePlaceholder":"QR-Code-Platzhalter (Emulation)","wallet.rechargeAmount":"Aufladebetrag","wallet.enterAmount":"Bitte geben Sie den Aufladebetrag ein","wallet.rechargeHint":"Mindesteinzahlungsbetrag: 1 QDT","wallet.confirmRecharge":"Bestätigen Sie das Aufladen","wallet.enterValidAmount":"Bitte geben Sie einen gültigen Aufladebetrag ein","wallet.rechargeSuccess":"Aufladen erfolgreich! {amount} QDT eingezahlt","wallet.rechargeFailed":"Das Aufladen ist fehlgeschlagen","wallet.withdrawTip":"Bitte geben Sie den Auszahlungsbetrag und die Auszahlungsadresse ein","wallet.withdrawAmount":"Betrag abheben","wallet.enterWithdrawAmount":"Bitte geben Sie den Auszahlungsbetrag ein","wallet.withdrawHint":"Mindestauszahlungsbetrag: 1 QDT","wallet.withdrawAddress":"Auszahlungsadresse (optional)","wallet.enterWithdrawAddress":"Bitte geben Sie die Auszahlungsadresse ein","wallet.confirmWithdraw":"Auszahlung bestätigen","wallet.enterValidWithdrawAmount":"Bitte geben Sie einen gültigen Auszahlungsbetrag ein","wallet.insufficientBalance":"Unzureichendes Gleichgewicht","wallet.withdrawSuccess":"Auszahlung erfolgreich! {Betrag} QDT abgehoben","wallet.withdrawFailed":"Die Auszahlung ist fehlgeschlagen","wallet.noTradingRecords":"Noch kein Transaktionsdatensatz","wallet.noMoneyLog":"Noch keine Fondsdetails","wallet.loadTradingRecordsFailed":"Transaktionsdatensätze konnten nicht geladen werden","wallet.loadMoneyLogFailed":"Die Fondsdetails konnten nicht geladen werden","wallet.moneyLogTotal":"Insgesamt {total} Datensätze","wallet.moneyLogTypeTitle":"Typ","wallet.moneyLogType.all":"Alle Arten","wallet.table.time":"Zeit","wallet.table.type":"Typ","wallet.table.price":"Preis","wallet.table.amount":"Menge","wallet.table.money":"Betrag","wallet.table.balance":"Gleichgewicht","wallet.table.memo":"Bemerkungen","wallet.table.value":"Wert","wallet.table.profit":"Gewinn und Verlust","wallet.table.commission":"Bearbeitungsgebühr","wallet.table.total":"Insgesamt {total} Datensätze","wallet.tradeType.buy":"kaufen","wallet.tradeType.sell":"verkaufen","wallet.tradeType.liquidation":"Zwangsliquidation","wallet.tradeType.openLong":"Lange geöffnet","wallet.tradeType.addLong":"Gadot","wallet.tradeType.closeLong":"Pinduo","wallet.tradeType.closeLongStop":"Stop-Loss und Long","wallet.tradeType.closeLongProfit":"Nehmen Sie Gewinn mit und steigern Sie Ihr Level","wallet.tradeType.openShort":"Kurz öffnen","wallet.tradeType.addShort":"kurz hinzufügen","wallet.tradeType.closeShort":"leer","wallet.tradeType.closeShortStop":"Stop-Loss","wallet.tradeType.closeShortProfit":"Nehmen Sie den Gewinn mit und schließen Sie mit Leerverkäufen","wallet.moneyLogType.purchase":"Kaufindikator","wallet.moneyLogType.recharge":"Aufladen","wallet.moneyLogType.withdraw":"Bargeld abheben","wallet.moneyLogType.refund":"Rückerstattung","wallet.moneyLogType.reward":"Belohnung","wallet.moneyLogType.income":"Einkommen","wallet.moneyLogType.commission":"Bearbeitungsgebühr","wallet.web3Address.required":"Bitte geben Sie zuerst die Web3-Wallet-Adresse ein","wallet.web3Address.requiredDescription":"Vor dem Aufladen müssen Sie Ihre Web3-Wallet-Adresse verknüpfen, um eine Aufladung zu erhalten.","wallet.web3Address.placeholder":"Bitte geben Sie Ihre Web3-Wallet-Adresse ein (beginnend mit 0x)","wallet.web3Address.save":"Wallet-Adresse speichern","wallet.web3Address.saveSuccess":"Wallet-Adresse erfolgreich gespeichert","wallet.web3Address.saveFailed":"Wallet-Adresse konnte nicht gespeichert werden","wallet.web3Address.invalidFormat":"Bitte geben Sie eine gültige Web3-Wallet-Adresse ein (Ethereum-Format: 42 Zeichen, beginnend mit 0x, oder TRC20-Format: 34 Zeichen, beginnend mit T)","wallet.selectCoin":"Währung auswählen","wallet.selectChain":"Auswahlkette","wallet.chain.eth":"ETH(ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"BSC","wallet.targetQdtAmount":"Der QDT-Betrag, den Sie einlösen möchten (optional)","wallet.targetQdtAmount.placeholder":"Bitte geben Sie die Menge an QDT ein, die Sie einlösen möchten, den aktuellen QDT-Preis: {price} USDT","wallet.targetQdtAmount.requiredUsdt":"Aufladung erforderlich: {amount} USDT","wallet.rechargeAddress":"Aufladeadresse","wallet.copyAddress":"Kopieren","wallet.copySuccess":"Erfolgreich kopieren!","wallet.copyFailed":"Der Kopiervorgang ist fehlgeschlagen. Bitte manuell kopieren","wallet.rechargeAddressHint":"Bitte stellen Sie sicher, dass Sie {chain} verwenden, um {coin} an diese Adresse einzuzahlen","wallet.qdtPrice.loading":"Laden...","wallet.rechargeTip.new":"Bitte wählen Sie die Währung und die Kette aus und scannen Sie dann den untenstehenden QR-Code zum Aufladen","wallet.exchangeRate":"1 QDT ≈ {rate} USDT","wallet.withdrawableAmount":"Verfügbarer Bargeldbetrag","wallet.totalBalance":"Gesamtsaldo","wallet.insufficientWithdrawable":"Der Bargeldbetrag, der abgehoben werden kann, reicht nicht aus. Der aktuelle Betrag, der abgehoben werden kann, ist: {amount} QDT","wallet.withdrawAddressRequired":"Bitte geben Sie die Auszahlungsadresse ein","wallet.withdrawAddressHint":"Bitte stellen Sie sicher, dass die Adresse korrekt ist. Nach dem Widerruf ist ein Widerruf nicht mehr möglich.","wallet.withdrawSubmitSuccess":"Auszahlungsantrag erfolgreich eingereicht, bitte warten Sie auf die Prüfung","menu.footer.contactUs":"Kontaktieren Sie uns","menu.footer.getSupport":"Holen Sie sich Unterstützung","menu.footer.socialAccounts":"soziales Konto","menu.footer.userAgreement":"Benutzervereinbarung","menu.footer.privacyPolicy":"Datenschutzrichtlinie","menu.footer.support":"Unterstützung","menu.footer.featureRequest":"Funktionsanfrage","menu.footer.email":"E-Mail","menu.footer.liveChat":"Live-Chat rund um die Uhr","dashboard.analysis.title":"Mehrdimensionale Analyse","dashboard.analysis.subtitle":"KI-gesteuerte umfassende Finanzanalyseplattform","dashboard.analysis.selectSymbol":"Wählen Sie den zugrunde liegenden Code aus oder geben Sie ihn ein","dashboard.analysis.selectModel":"Modell auswählen","dashboard.analysis.startAnalysis":"Analyse starten","dashboard.analysis.history":"Geschichte","dashboard.analysis.tab.overview":"umfassende Analyse","dashboard.analysis.tab.fundamental":"Grundlagen","dashboard.analysis.tab.technical":"Technologie","dashboard.analysis.tab.news":"Nachrichten","dashboard.analysis.tab.sentiment":"Emotionen","dashboard.analysis.tab.risk":"Risiko","dashboard.analysis.tab.debate":"Die Lang-Kurz-Debatte","dashboard.analysis.tab.decision":"endgültige Entscheidung","dashboard.analysis.empty.selectSymbol":"Wählen Sie ein Ziel aus, um die Analyse zu starten","dashboard.analysis.empty.selectSymbolDesc":"Wählen Sie aus der selbstgewählten Aktienliste aus oder geben Sie den zugrunde liegenden Code ein, um einen mehrdimensionalen KI-Analysebericht zu erhalten","dashboard.analysis.empty.startAnalysis":"Klicken Sie auf die Schaltfläche „Analyse starten“, um eine mehrdimensionale Analyse durchzuführen","dashboard.analysis.empty.startAnalysisDesc":"Wir bieten Ihnen umfassende Analysen aus mehreren Dimensionen wie Fundamentaldaten, Technologie, Nachrichten, Stimmung und Risiko","dashboard.analysis.empty.noData":"Derzeit liegen keine {type}-Analysedaten vor. Bitte führen Sie zunächst eine umfassende Analyse durch","dashboard.analysis.empty.noWatchlist":"Derzeit gibt es keine selbstgewählten Aktien","dashboard.analysis.empty.noHistory":"Noch keine Geschichte","dashboard.analysis.empty.watchlistHint":"Derzeit sind keine selbstgewählten Aktien vorhanden, bitte zuerst","dashboard.analysis.empty.noDebateData":"Noch keine Debattendaten","dashboard.analysis.empty.noDecisionData":"Noch keine Entscheidungsdaten","dashboard.analysis.empty.selectAgent":"Bitte wählen Sie einen Agenten aus, um die Analyseergebnisse anzuzeigen","dashboard.analysis.loading.analyzing":"Analyse läuft, bitte warten...","dashboard.analysis.loading.fundamental":"Fundamentaldaten analysieren...","dashboard.analysis.loading.technical":"Analyse technischer Indikatoren...","dashboard.analysis.loading.news":"Nachrichtendaten werden analysiert...","dashboard.analysis.loading.sentiment":"Marktstimmung analysieren...","dashboard.analysis.loading.risk":"Risiko einschätzen...","dashboard.analysis.loading.debate":"Die Lang-Kurz-Debatte geht weiter...","dashboard.analysis.loading.decision":"Endgültige Entscheidung generieren...","dashboard.analysis.score.overall":"Gesamtbewertung","dashboard.analysis.score.recommendation":"Anlageberatung","dashboard.analysis.score.confidence":"Vertrauen","dashboard.analysis.dimension.fundamental":"Grundlagen","dashboard.analysis.dimension.technical":"Technologie","dashboard.analysis.dimension.news":"Nachrichten","dashboard.analysis.dimension.sentiment":"Emotionen","dashboard.analysis.dimension.risk":"Risiko","dashboard.analysis.card.dimensionScores":"Bewertungen für jede Dimension","dashboard.analysis.card.overviewReport":"Umfassender Analysebericht","dashboard.analysis.card.financialMetrics":"Finanzindikatoren","dashboard.analysis.card.fundamentalReport":"Fundamentalanalysebericht","dashboard.analysis.card.technicalIndicators":"Technische Indikatoren","dashboard.analysis.card.technicalReport":"Technischer Analysebericht","dashboard.analysis.card.newsList":"Verwandte Neuigkeiten","dashboard.analysis.card.newsReport":"Bericht zur Nachrichtenanalyse","dashboard.analysis.card.sentimentIndicators":"Stimmungsindikator","dashboard.analysis.card.sentimentReport":"Stimmungsanalysebericht","dashboard.analysis.card.riskMetrics":"Risikoindikatoren","dashboard.analysis.card.riskReport":"Risikobewertungsbericht","dashboard.analysis.card.bullView":"Bullische Sichtweise (Bull)","dashboard.analysis.card.bearView":"Bärische Sichtweise (Bär)","dashboard.analysis.card.researchConclusion":"Fazit des Forschers","dashboard.analysis.card.traderPlan":"Händlerplan","dashboard.analysis.card.riskDebate":"Debatte im Risikoausschuss","dashboard.analysis.card.finalDecision":"Endgültige Entscheidung","dashboard.analysis.card.tradePlanDetail":"Einzelheiten zum Handelsplan","dashboard.analysis.tradingPlan.entry_price":"Eintrittspreis","dashboard.analysis.tradingPlan.position_size":"Positionsgröße","dashboard.analysis.tradingPlan.stop_loss":"Stop-Loss","dashboard.analysis.tradingPlan.take_profit":"Nehmen Sie Gewinn mit","dashboard.analysis.label.confidence":"Vertrauen","dashboard.analysis.label.keyPoints":"Kernpunkte","dashboard.analysis.label.riskWarning":"Risikowarnung","dashboard.analysis.risk.risky":"Riskant","dashboard.analysis.risk.neutral":"Neutraler Standpunkt (Neutral)","dashboard.analysis.risk.safe":"Konservative Sichtweise (sicher)","dashboard.analysis.risk.conclusion":"Fazit","dashboard.analysis.feature.fundamental":"Fundamentalanalyse","dashboard.analysis.feature.technical":"technische Analyse","dashboard.analysis.feature.news":"Nachrichtenanalyse","dashboard.analysis.feature.sentiment":"Stimmungsanalyse","dashboard.analysis.feature.risk":"Risikobewertung","dashboard.analysis.watchlist.title":"Meine Aktienauswahl","dashboard.analysis.watchlist.add":"hinzufügen","dashboard.analysis.watchlist.addStock":"Brühe hinzufügen","dashboard.analysis.modal.addStock.title":"Fügen Sie optionale Aktien hinzu","dashboard.analysis.modal.addStock.confirm":"Okay","dashboard.analysis.modal.addStock.cancel":"Abbrechen","dashboard.analysis.modal.addStock.market":"Markttyp","dashboard.analysis.modal.addStock.marketPlaceholder":"Bitte wählen Sie einen Markt aus","dashboard.analysis.modal.addStock.marketRequired":"Bitte wählen Sie den Markttyp aus","dashboard.analysis.modal.addStock.symbol":"Lagercode","dashboard.analysis.modal.addStock.symbolPlaceholder":"Zum Beispiel: AAPL, TSLA, GOOGL, 000001, BTC","dashboard.analysis.modal.addStock.symbolRequired":"Bitte Lagercode eingeben","dashboard.analysis.modal.addStock.searchPlaceholder":"Suchen Sie nach Zielcode oder Name","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"Suchen Sie den zugrunde liegenden Code oder geben Sie ihn ein (z. B. AAPL, BTC/USDT, EUR/USD).","dashboard.analysis.modal.addStock.searchOrInputHint":"Unterstützt die Suche nach Objekten in der Datenbank oder die direkte Eingabe des Codes (das System erhält den Namen automatisch).","dashboard.analysis.modal.addStock.search":"Suchen","dashboard.analysis.modal.addStock.searchResults":"Suchergebnisse","dashboard.analysis.modal.addStock.hotSymbols":"Beliebte Ziele","dashboard.analysis.modal.addStock.noHotSymbols":"Noch keine beliebten Ziele","dashboard.analysis.modal.addStock.selectedSymbol":"Ausgewählt","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"Bitte wählen Sie zunächst ein Ziel aus","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"Bitte wählen Sie ein Ziel aus oder geben Sie zuerst den Zielcode ein","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"Bitte geben Sie den Zielcode ein","dashboard.analysis.modal.addStock.pleaseSelectMarket":"Bitte wählen Sie zunächst den Markttyp aus","dashboard.analysis.modal.addStock.searchFailed":"Die Suche ist fehlgeschlagen. Bitte versuchen Sie es später erneut","dashboard.analysis.modal.addStock.noSearchResults":"Kein passendes Ziel gefunden","dashboard.analysis.modal.addStock.willAutoFetchName":"Das System erhält den Namen automatisch","dashboard.analysis.modal.addStock.addDirectly":"Direkt hinzufügen","dashboard.analysis.modal.addStock.nameWillBeFetched":"Der Name wird beim Hinzufügen automatisch übernommen","dashboard.analysis.market.USStock":"US-Aktien","dashboard.analysis.market.Crypto":"Kryptowährung","dashboard.analysis.market.Forex":"Forex","dashboard.analysis.market.Futures":"Futures","dashboard.analysis.modal.history.title":"Historische Analyseaufzeichnungen","dashboard.analysis.modal.history.viewResult":"Ergebnisse anzeigen","dashboard.analysis.modal.history.completeTime":"Fertigstellungszeit","dashboard.analysis.modal.history.error":"Fehler","dashboard.analysis.status.pending":"Ausstehend","dashboard.analysis.status.processing":"Verarbeitung","dashboard.analysis.status.completed":"Abgeschlossen","dashboard.analysis.status.failed":"gescheitert","dashboard.analysis.message.selectSymbol":"Bitte wählen Sie zuerst das Ziel aus","dashboard.analysis.message.taskCreated":"Die Analyseaufgabe wurde erstellt und wird im Hintergrund ausgeführt...","dashboard.analysis.message.analysisComplete":"Analyse abgeschlossen","dashboard.analysis.message.analysisCompleteCache":"Analyse abgeschlossen (unter Verwendung zwischengespeicherter Daten)","dashboard.analysis.message.analysisFailed":"Die Analyse ist fehlgeschlagen. Bitte versuchen Sie es später noch einmal","dashboard.analysis.message.addStockSuccess":"Erfolgreich hinzugefügt","dashboard.analysis.message.addStockFailed":"Das Hinzufügen ist fehlgeschlagen","dashboard.analysis.message.removeStockSuccess":"Erfolgreich entfernt","dashboard.analysis.message.removeStockFailed":"Das Entfernen ist fehlgeschlagen","dashboard.analysis.message.resumingAnalysis":"Analyseaufgabe wird fortgesetzt...","dashboard.analysis.message.deleteSuccess":"Erfolgreich gelöscht","dashboard.analysis.message.deleteFailed":"Löschen fehlgeschlagen","dashboard.analysis.modal.history.delete":"Löschen","dashboard.analysis.modal.history.deleteConfirm":"Möchten Sie diesen Analysedatensatz wirklich löschen?","dashboard.analysis.test":"Geschäft Nr. {no}, Gongzhuan Road","dashboard.analysis.introduce":"Beschreibung des Indikators","dashboard.analysis.total-sales":"Gesamtumsatz","dashboard.analysis.day-sales":"Durchschnittlicher Tagesumsatz¥","dashboard.analysis.visits":"Besuche","dashboard.analysis.visits-trend":"Verkehrstrends","dashboard.analysis.visits-ranking":"Ranking der Ladenbesuche","dashboard.analysis.day-visits":"Tägliche Besuche","dashboard.analysis.week":"Wöchentlich im Jahresvergleich","dashboard.analysis.day":"Jahr für Jahr","dashboard.analysis.payments":"Anzahl der Zahlungen","dashboard.analysis.conversion-rate":"Umrechnungskurs","dashboard.analysis.operational-effect":"Auswirkungen der betrieblichen Tätigkeit","dashboard.analysis.sales-trend":"Verkaufstrends","dashboard.analysis.sales-ranking":"Ranking der Filialverkäufe","dashboard.analysis.all-year":"Das ganze Jahr über","dashboard.analysis.all-month":"diesen Monat","dashboard.analysis.all-week":"diese Woche","dashboard.analysis.all-day":"heute","dashboard.analysis.search-users":"Anzahl der Suchbenutzer","dashboard.analysis.per-capita-search":"Suchanfragen pro Kopf","dashboard.analysis.online-top-search":"Beliebte Suchanfragen im Internet","dashboard.analysis.the-proportion-of-sales":"Anteil der Verkaufskategorie","dashboard.analysis.dropdown-option-one":"Operation eins","dashboard.analysis.dropdown-option-two":"Betrieb 2","dashboard.analysis.channel.all":"Alle Kanäle","dashboard.analysis.channel.online":"online","dashboard.analysis.channel.stores":"speichern","dashboard.analysis.sales":"Verkäufe","dashboard.analysis.traffic":"Passagierfluss","dashboard.analysis.table.rank":"Rangliste","dashboard.analysis.table.search-keyword":"Suchbegriffe suchen","dashboard.analysis.table.users":"Anzahl der Benutzer","dashboard.analysis.table.weekly-range":"Wöchentliche Erhöhung","dashboard.indicator.selectSymbol":"Wählen Sie den zugrunde liegenden Code aus oder geben Sie ihn ein","dashboard.indicator.emptyWatchlistHint":"Derzeit sind keine selbst ausgewählten Aktien vorhanden. Bitte fügen Sie diese zuerst hinzu","dashboard.indicator.hint.selectSymbol":"Bitte wählen Sie ein Ziel aus, um mit der Analyse zu beginnen","dashboard.indicator.hint.selectSymbolDesc":"Wählen Sie einen Aktiencode aus oder geben Sie ihn in das Suchfeld oben ein, um K-Line-Diagramme und technische Indikatoren anzuzeigen","dashboard.indicator.retry":"Versuchen Sie es erneut","dashboard.indicator.panel.title":"Technische Indikatoren","dashboard.indicator.panel.realtimeOn":"Deaktivieren Sie Echtzeit-Updates","dashboard.indicator.panel.realtimeOff":"Aktivieren Sie Echtzeit-Updates","dashboard.indicator.panel.themeLight":"Wechseln Sie zum dunklen Thema","dashboard.indicator.panel.themeDark":"Wechseln Sie zum Lichtthema","dashboard.indicator.section.enabled":"Aktiviert","dashboard.indicator.section.added":"Indikatoren, die ich hinzugefügt habe","dashboard.indicator.section.custom":"Von Ihnen selbst erstellte Indikatoren","dashboard.indicator.section.bought":"Indikatoren, die ich gekauft habe","dashboard.indicator.section.myCreated":"Von mir erstellte Indikatoren","dashboard.indicator.empty":"Es gibt noch keinen Indikator. Bitte fügen Sie zuerst einen Indikator hinzu oder erstellen Sie ihn","dashboard.indicator.buy":"Kaufindikator","dashboard.indicator.action.start":"beginnen","dashboard.indicator.action.stop":"Schließen","dashboard.indicator.action.edit":"Bearbeiten","dashboard.indicator.action.delete":"Löschen","dashboard.indicator.action.backtest":"Backtest","dashboard.indicator.status.normal":"normal","dashboard.indicator.status.normalPermanent":"Normal (dauerhaft gültig)","dashboard.indicator.status.expired":"Abgelaufen","dashboard.indicator.expiry.permanent":"Dauerhaft gültig","dashboard.indicator.expiry.noExpiry":"Keine Ablaufzeit","dashboard.indicator.expiry.expired":"Abgelaufen: {Datum}","dashboard.indicator.expiry.expiresOn":"Ablaufzeit: {Datum}","dashboard.indicator.delete.confirmTitle":"Bestätigen Sie den Löschvorgang","dashboard.indicator.delete.confirmContent":"Sind Sie sicher, dass Sie den Indikator „{name}“ löschen möchten? Dieser Vorgang ist irreversibel.","dashboard.indicator.delete.confirmOk":"Löschen","dashboard.indicator.delete.confirmCancel":"Abbrechen","dashboard.indicator.delete.success":"Erfolgreich löschen","dashboard.indicator.delete.failed":"Das Löschen ist fehlgeschlagen","dashboard.indicator.save.success":"Erfolgreich gespeichert","dashboard.indicator.save.failed":"Speichern fehlgeschlagen","dashboard.indicator.error.loadWatchlistFailed":"Optionale Bestände konnten nicht geladen werden","dashboard.indicator.error.chartNotReady":"Die Diagrammkomponente ist nicht initialisiert. Bitte wählen Sie zuerst das Ziel aus und warten Sie, bis das Diagramm geladen ist.","dashboard.indicator.error.chartMethodNotReady":"Die Diagrammkomponentenmethode ist nicht bereit. Bitte versuchen Sie es später erneut","dashboard.indicator.error.chartExecuteNotReady":"Die Ausführungsmethode der Diagrammkomponente ist nicht bereit. Bitte versuchen Sie es später erneut","dashboard.indicator.error.parseFailed":"Python-Code kann nicht analysiert werden","dashboard.indicator.error.parseFailedCheck":"Der Python-Code kann nicht analysiert werden. Bitte überprüfen Sie das Codeformat","dashboard.indicator.error.addIndicatorFailed":"Der Indikator konnte nicht hinzugefügt werden","dashboard.indicator.error.runIndicatorFailed":"Die Laufanzeige ist fehlgeschlagen","dashboard.indicator.error.pleaseLogin":"Bitte melden Sie sich zuerst an","dashboard.indicator.error.loadDataFailed":"Das Laden der Daten ist fehlgeschlagen","dashboard.indicator.error.loadDataFailedDesc":"Bitte überprüfen Sie die Netzwerkverbindung","dashboard.indicator.error.pythonEngineFailed":"Die Python-Engine konnte nicht geladen werden und die Indikatorfunktion ist möglicherweise nicht verfügbar.","dashboard.indicator.error.chartInitFailed":"Die Initialisierung des Diagramms ist fehlgeschlagen","dashboard.indicator.warning.enterCode":"Bitte geben Sie zuerst den Indikatorcode ein","dashboard.indicator.warning.pyodideLoadFailed":"Die Python-Engine konnte nicht geladen werden","dashboard.indicator.warning.pyodideLoadFailedDesc":"Diese Funktion ist in Ihrer aktuellen Region oder Netzwerkumgebung nicht verfügbar","dashboard.indicator.warning.chartNotInitialized":"Das Diagramm ist nicht initialisiert und das Linienzeichnungstool kann nicht verwendet werden.","dashboard.indicator.success.runIndicator":"Indikator läuft erfolgreich","dashboard.indicator.success.clearDrawings":"Alle Strichzeichnungen gelöscht","dashboard.indicator.sma":"SMA (gleitende Durchschnittskombination)","dashboard.indicator.ema":"EMA (exponentielle gleitende Durchschnittskombination)","dashboard.indicator.rsi":"RSI (relative Stärke)","dashboard.indicator.macd":"MACD","dashboard.indicator.bb":"Bollinger-Bänder","dashboard.indicator.atr":"ATR (Average True Range)","dashboard.indicator.cci":"CCI (Commodity Channel Index)","dashboard.indicator.williams":"Williams %R (Williams-Indikator)","dashboard.indicator.mfi":"MFI (Geldflussindex)","dashboard.indicator.adx":"ADX (durchschnittlicher Trendindex)","dashboard.indicator.obv":"OBV (Energiewelle)","dashboard.indicator.adosc":"ADOSC (Akkumulieren/Dispatch-Oszillator)","dashboard.indicator.ad":"AD (Sammel-/Verteilungsleitung)","dashboard.indicator.kdj":"KDJ (stochastischer Indikator)","dashboard.indicator.signal.buy":"KAUFEN","dashboard.indicator.signal.sell":"VERKAUFEN","dashboard.indicator.signal.supertrendBuy":"SuperTrend kaufen","dashboard.indicator.signal.supertrendSell":"SuperTrend verkaufen","dashboard.indicator.chart.kline":"K-Linie","dashboard.indicator.chart.volume":"Lautstärke","dashboard.indicator.chart.uptrend":"Aufwärtstrend","dashboard.indicator.chart.downtrend":"Abwärtstrend","dashboard.indicator.tooltip.time":"Zeit","dashboard.indicator.tooltip.open":"offen","dashboard.indicator.tooltip.close":"erhalten","dashboard.indicator.tooltip.high":"hoch","dashboard.indicator.tooltip.low":"niedrig","dashboard.indicator.tooltip.volume":"Lautstärke","dashboard.indicator.drawing.line":"Liniensegment","dashboard.indicator.drawing.horizontalLine":"horizontale Linie","dashboard.indicator.drawing.verticalLine":"vertikale Linie","dashboard.indicator.drawing.ray":"Strahl","dashboard.indicator.drawing.straightLine":"gerade Linie","dashboard.indicator.drawing.parallelLine":"parallele Linien","dashboard.indicator.drawing.priceLine":"Preislinie","dashboard.indicator.drawing.priceChannel":"Preiskanal","dashboard.indicator.drawing.fibonacciLine":"Fibonacci-Linien","dashboard.indicator.drawing.measure":"Messen","dashboard.indicator.drawing.clearAll":"Löschen Sie alle Strichzeichnungen","dashboard.indicator.market.USStock":"US-Aktien","dashboard.indicator.market.Crypto":"Kryptowährung","dashboard.indicator.market.Forex":"Forex","dashboard.indicator.market.Futures":"Futures","dashboard.indicator.create":"Indikator erstellen","dashboard.indicator.editor.title":"Indikatoren erstellen/bearbeiten","dashboard.indicator.editor.name":"Indikatorname","dashboard.indicator.editor.nameRequired":"Bitte geben Sie den Indikatornamen ein","dashboard.indicator.editor.namePlaceholder":"Bitte geben Sie den Indikatornamen ein","dashboard.indicator.editor.description":"Beschreibung des Indikators","dashboard.indicator.editor.descriptionPlaceholder":"Bitte geben Sie eine Beschreibung des Indikators ein (optional)","dashboard.indicator.editor.code":"Python-Code","dashboard.indicator.editor.codeRequired":"Bitte geben Sie den Indikatorcode ein","dashboard.indicator.editor.codePlaceholder":"Bitte geben Sie Python-Code ein","dashboard.indicator.editor.run":"laufen","dashboard.indicator.editor.runHint":"Klicken Sie auf die Schaltfläche „Ausführen“, um eine Vorschau des Indikatoreffekts im K-Liniendiagramm anzuzeigen","dashboard.indicator.editor.guide":"Entwicklungshandbuch","dashboard.indicator.editor.guideTitle":"Leitfaden zur Entwicklung von Python-Indikatoren","dashboard.indicator.editor.save":"speichern","dashboard.indicator.editor.cancel":"Abbrechen","dashboard.indicator.editor.unnamed":"Unbenannter Indikator","dashboard.indicator.editor.publishToCommunity":"In der Community posten","dashboard.indicator.editor.publishToCommunityHint":"Nach der Veröffentlichung können andere Benutzer Ihren Indikator in der Community anzeigen und verwenden","dashboard.indicator.editor.indicatorType":"Indikatortyp","dashboard.indicator.editor.indicatorTypeRequired":"Bitte wählen Sie den Indikatortyp aus","dashboard.indicator.editor.indicatorTypePlaceholder":"Bitte wählen Sie den Indikatortyp aus","dashboard.indicator.editor.previewImage":"Vorschau","dashboard.indicator.editor.uploadImage":"Bilder hochladen","dashboard.indicator.editor.previewImageHint":"Empfohlene Größe: 800 x 400, nicht mehr als 2 MB","dashboard.indicator.editor.pricing":"Verkaufspreis (QDT)","dashboard.indicator.editor.pricingType.free":"kostenlos","dashboard.indicator.editor.pricingType.permanent":"dauerhaft","dashboard.indicator.editor.pricingType.monthly":"monatliche Zahlung","dashboard.indicator.editor.price":"Preis","dashboard.indicator.editor.priceRequired":"Bitte geben Sie den Preis ein","dashboard.indicator.editor.pricePlaceholder":"Bitte geben Sie den Preis ein","dashboard.indicator.editor.pricingHint":"Obwohl der Preis für kostenlose Indikatoren 0 beträgt, belohnt Sie die Plattform (QDT) basierend auf Ihrer Indikatornutzung und Lobrate.","dashboard.indicator.editor.aiGenerate":"Intelligente Generation","dashboard.indicator.editor.aiPromptPlaceholder":"Teilen Sie mir Ihre Ideen mit und ich werde den Python-Indikatorcode für Sie generieren","dashboard.indicator.editor.aiGenerateBtn":"KI-generierter Code","dashboard.indicator.editor.aiPromptRequired":"Bitte geben Sie Ihre Gedanken ein","dashboard.indicator.editor.aiGenerateSuccess":"Codegenerierung erfolgreich","dashboard.indicator.editor.aiGenerateError":"Die Codegenerierung ist fehlgeschlagen. Bitte versuchen Sie es später noch einmal","dashboard.indicator.backtest.title":"Indikator-Backtest","dashboard.indicator.backtest.config":"Backtest-Parameter","dashboard.indicator.backtest.startDate":"Startdatum","dashboard.indicator.backtest.endDate":"Enddatum","dashboard.indicator.backtest.selectStartDate":"Wählen Sie das Startdatum","dashboard.indicator.backtest.selectEndDate":"Wählen Sie das Enddatum aus","dashboard.indicator.backtest.startDateRequired":"Bitte wählen Sie ein Startdatum aus","dashboard.indicator.backtest.endDateRequired":"Bitte wählen Sie ein Enddatum aus","dashboard.indicator.backtest.initialCapital":"Anfangskapital","dashboard.indicator.backtest.initialCapitalRequired":"Bitte geben Sie den Anfangsbetrag ein","dashboard.indicator.backtest.commission":"Bearbeitungsgebühr","dashboard.indicator.backtest.leverage":"Verschuldungsquote","dashboard.indicator.backtest.tradeDirection":"Handelsrichtung","dashboard.indicator.backtest.longOnly":"Geh lange","dashboard.indicator.backtest.shortOnly":"kurz","dashboard.indicator.backtest.both":"Zweiseitig","dashboard.indicator.backtest.run":"Beginnen Sie mit dem Backtesting","dashboard.indicator.backtest.rerun":"Nochmals Backtest","dashboard.indicator.backtest.close":"Schließen","dashboard.indicator.backtest.running":"Indikator-Backtest läuft...","dashboard.indicator.backtest.results":"Backtest-Ergebnisse","dashboard.indicator.backtest.totalReturn":"Gesamtrendite","dashboard.indicator.backtest.annualReturn":"annualisiertes Einkommen","dashboard.indicator.backtest.maxDrawdown":"maximaler Drawdown","dashboard.indicator.backtest.sharpeRatio":"Sharpe-Ratio","dashboard.indicator.backtest.winRate":"Gewinnquote","dashboard.indicator.backtest.profitFactor":"Gewinn-Verlust-Verhältnis","dashboard.indicator.backtest.totalTrades":"Anzahl der Transaktionen","dashboard.indicator.totalReturn":"Gesamtrendite","dashboard.indicator.annualReturn":"annualisierte Rendite","dashboard.indicator.maxDrawdown":"maximaler Drawdown","dashboard.indicator.sharpeRatio":"Sharpe-Ratio","dashboard.indicator.winRate":"Gewinnquote","dashboard.indicator.profitFactor":"Gewinn-Verlust-Verhältnis","dashboard.indicator.totalTrades":"Gesamtzahl der Transaktionen","dashboard.indicator.backtest.totalCommission":"Gesamtbearbeitungsgebühr","dashboard.indicator.backtest.equityCurve":"Zinskurve","dashboard.indicator.backtest.strategy":"Indikatoreinkommen","dashboard.indicator.backtest.benchmark":"Benchmark-Rendite","dashboard.indicator.backtest.tradeHistory":"Transaktionsverlauf","dashboard.indicator.backtest.tradeTime":"Zeit","dashboard.indicator.backtest.tradeType":"Typ","dashboard.indicator.backtest.buy":"kaufen","dashboard.indicator.backtest.sell":"verkaufen","dashboard.indicator.backtest.liquidation":"Liquidation","dashboard.indicator.backtest.openLong":"Lange geöffnet","dashboard.indicator.backtest.closeLong":"Pinduo","dashboard.indicator.backtest.closeLongStop":"Nahezu long (Stop-Loss)","dashboard.indicator.backtest.closeLongProfit":"Mehr schließen (Gewinn mitnehmen)","dashboard.indicator.backtest.addLong":"Long-Position hinzufügen","dashboard.indicator.backtest.openShort":"Kurz öffnen","dashboard.indicator.backtest.closeShort":"leer","dashboard.indicator.backtest.closeShortStop":"Schließen (Stop-Loss)","dashboard.indicator.backtest.closeShortProfit":"Schließen (Gewinn mitnehmen)","dashboard.indicator.backtest.addShort":"Short-Position hinzufügen","dashboard.indicator.backtest.price":"Preis","dashboard.indicator.backtest.amount":"Menge","dashboard.indicator.backtest.balance":"Kontostand","dashboard.indicator.backtest.profit":"Gewinn und Verlust","dashboard.indicator.backtest.success":"Backtest abgeschlossen","dashboard.indicator.backtest.failed":"Der Backtest ist fehlgeschlagen. Bitte versuchen Sie es später noch einmal","dashboard.indicator.backtest.noIndicatorCode":"Für diesen Indikator gibt es keinen rückprüfbaren Code","dashboard.indicator.backtest.noSymbol":"Bitte wählen Sie zunächst das Transaktionsziel aus","dashboard.indicator.backtest.dateRangeExceeded":"Der Backtest-Zeitbereich überschreitet das Limit: {timeframe} Zeitraum kann höchstens {maxRange} backtestet werden","dashboard.indicator.backtest.dateRangeExceededDays":"Backtest range exceeds limit: {timeframe} max {maxRange} ({maxDays} days)","dashboard.indicator.backtest.metaLine":"Symbol: {symbol} | Market: {market} | Timeframe: {timeframe}","dashboard.indicator.backtest.savedRunId":"Backtest saved. Run ID: {id}","dashboard.indicator.backtest.prev":"Previous","dashboard.indicator.backtest.next":"Next","dashboard.indicator.backtest.steps.strategy.title":"Strategy","dashboard.indicator.backtest.steps.strategy.desc":"Position sizing & risk controls","dashboard.indicator.backtest.steps.trading.title":"Trading settings","dashboard.indicator.backtest.steps.trading.desc":"Time range, capital, fees, leverage","dashboard.indicator.backtest.steps.results.title":"Results","dashboard.indicator.backtest.steps.results.desc":"Backtest output","dashboard.indicator.backtest.panel.risk":"Risk management (SL/TP/Trailing)","dashboard.indicator.backtest.panel.scale":"Scale in / DCA (trend & mean-reversion)","dashboard.indicator.backtest.panel.reduce":"Reduce position (trend & adverse)","dashboard.indicator.backtest.panel.position":"Position sizing","dashboard.indicator.backtest.field.stopLossPct":"Stop Loss (%)","dashboard.indicator.backtest.field.takeProfitPct":"Take Profit (%)","dashboard.indicator.backtest.field.trailingEnabled":"Trailing stop / take profit","dashboard.indicator.backtest.field.trailingStopPct":"Trailing drawdown (%)","dashboard.indicator.backtest.field.trailingActivationPct":"Trailing activation (%)","dashboard.indicator.backtest.field.slippage":"Slippage (%)","dashboard.indicator.backtest.field.trendAddEnabled":"Trend-following scale-in","dashboard.indicator.backtest.field.dcaAddEnabled":"Mean-reversion DCA","dashboard.indicator.backtest.field.trendAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.dcaAddStepPct":"DCA trigger (%)","dashboard.indicator.backtest.field.trendAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.dcaAddSizePct":"DCA size (% of capital)","dashboard.indicator.backtest.field.trendAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.dcaAddMaxTimes":"Max DCA times","dashboard.indicator.backtest.field.trendReduceEnabled":"Trend reduce","dashboard.indicator.backtest.field.adverseReduceEnabled":"Adverse reduce","dashboard.indicator.backtest.field.trendReduceStepPct":"Trend trigger (%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"Adverse trigger (%)","dashboard.indicator.backtest.field.trendReduceSizePct":"Reduce size (% of position)","dashboard.indicator.backtest.field.adverseReduceSizePct":"Adverse reduce size (% of position)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"Max trend reduce times","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"Max adverse reduce times","dashboard.indicator.backtest.field.entryPct":"Entry size (% of capital)","dashboard.indicator.backtest.field.minOrderPct":"Min order size (% of capital) (optional)","dashboard.indicator.backtest.closeLongTrailing":"Close Long (Trailing)","dashboard.indicator.backtest.reduceLong":"Reduce Long","dashboard.indicator.backtest.closeShortTrailing":"Close Short (Trailing)","dashboard.indicator.backtest.reduceShort":"Reduce Short","dashboard.docs.title":"Dokumentenzentrum","dashboard.docs.search.placeholder":"Dokumente durchsuchen...","dashboard.docs.category.all":"Alle","dashboard.docs.category.guide":"Entwicklungshandbuch","dashboard.docs.category.api":"API-Dokumentation","dashboard.docs.category.tutorial":"Anleitung","dashboard.docs.category.faq":"FAQ","dashboard.docs.featured.title":"Empfohlene Dokumentation","dashboard.docs.featured.tag":"Empfohlen","dashboard.docs.list.views":"Durchsuchen","dashboard.docs.list.author":"Autor","dashboard.docs.list.empty":"Noch kein Dokument","dashboard.docs.list.backToAll":"Zurück zu allen Dokumenten","dashboard.docs.list.total":"Insgesamt {count} Dokumente","dashboard.docs.detail.back":"Zurück zur Dokumentenliste","dashboard.docs.detail.updatedAt":"aktualisiert am","dashboard.docs.detail.related":"Verwandte Dokumente","dashboard.docs.detail.notFound":"Dokument existiert nicht","dashboard.docs.detail.error":"Das Dokument existiert nicht oder wurde gelöscht","dashboard.docs.search.result":"Suchergebnisse","dashboard.docs.search.keyword":"Schlüsselwörter","community.filter.indicatorType":"Indikatortyp","community.filter.all":"Alle","community.filter.other":"Andere Optionen","community.filter.pricing":"Preisart","community.filter.allPricing":"Alle Preise","community.filter.sortBy":"Sortieren nach","community.filter.search":"Suchen","community.filter.searchPlaceholder":"Metrikname suchen","community.indicatorType.trend":"Trendtyp","community.indicatorType.momentum":"Impulstyp","community.indicatorType.volatility":"Volatilität","community.indicatorType.volume":"Lautstärke","community.indicatorType.custom":"Anpassen","community.pricing.free":"kostenlos","community.pricing.paid":"Bezahlen","community.sort.downloads":"Downloads","community.sort.rating":"Bewertung","community.sort.newest":"Neueste Veröffentlichungen","community.pagination.total":"{total} Indikatoren insgesamt","community.noDescription":"Noch keine Beschreibung","community.detail.type":"Typ","community.detail.pricing":"Preise","community.detail.rating":"Bewertung","community.detail.downloads":"Downloads","community.detail.author":"Autor","community.detail.description":"Einführung","community.detail.detailContent":"Detaillierte Beschreibung","community.detail.backtestStats":"Backtest-Statistiken","community.action.purchase":"Kaufindikator","community.action.addToMyIndicators":"Zu meinen Indikatoren hinzufügen","community.action.favorite":"Sammlung","community.action.unfavorite":"Favoriten abbrechen","community.action.buyNow":"Jetzt kaufen","community.action.renew":"Erneuerung","community.purchase.price":"Preis","community.purchase.permanent":"dauerhaft","community.purchase.monthly":"Monat","community.purchase.confirmBuy":"Bestätigen Sie den Kauf dieses Indikators ({price} QDT)?","community.purchase.confirmRenew":"Bestätigen Sie die Erneuerung dieses Indikators ({price} QDT/Monat)?","community.purchase.confirmFree":"Bestätigen Sie, dass Sie diesen kostenlosen Indikator hinzufügen möchten?","community.purchase.confirmTitle":"Aktion bestätigen","community.purchase.owned":"Sie haben diesen Indikator erworben (dauerhaft gültig)","community.purchase.ownIndicator":"Dies ist die von Ihnen veröffentlichte Metrik","community.purchase.expired":"Ihr Abonnement ist abgelaufen","community.purchase.expiresOn":"Ablaufzeit: {Datum}","community.tabs.detail":"Indikatordetails","community.tabs.backtest":"Backtest-Daten","community.tabs.ratings":"Benutzerbewertungen","community.rating.myRating":"Meine Bewertung","community.rating.stars":"{count} Sterne","community.rating.commentPlaceholder":"Teilen Sie Ihre Erfahrungen...","community.rating.submit":"Bewertung abgeben","community.rating.modify":"Ändern","community.rating.saveModify":"Änderungen speichern","community.rating.cancel":"Abbrechen","community.rating.selectRating":"Bitte wählen Sie eine Bewertung aus","community.rating.success":"Bewertung erfolgreich","community.rating.modifySuccess":"Bewertung erfolgreich geändert","community.rating.failed":"Bewertung fehlgeschlagen","community.rating.noRatings":"Noch keine Kommentare","community.backtest.note":"Die oben genannten Daten sind historische Backtest-Ergebnisse und dienen nur als Referenz und stellen keine zukünftigen Erträge dar.","community.backtest.noData":"Noch keine Backtest-Daten","community.backtest.uploadHint":"Der Autor hat noch keine Backtest-Daten hochgeladen","community.message.loadFailed":"Die Indikatorliste konnte nicht geladen werden","community.message.purchaseProcessing":"Kaufanfrage wird bearbeitet...","community.message.downloadSuccess":"Die Metrik wurde zu meiner Metrikliste hinzugefügt","community.message.favoriteSuccess":"Sammlung erfolgreich","community.message.unfavoriteSuccess":"Abholung erfolgreich abbrechen","community.message.operationSuccess":"Operation erfolgreich","community.message.operationFailed":"Der Vorgang ist fehlgeschlagen","community.banner.readOnly":"Nur lesen","community.banner.loginHint":"Für Login oder Registrierung bitte auf die Schaltfläche klicken, um zu einer unabhängigen Seite zu wechseln und CSRF-Probleme zu vermeiden","community.banner.jumpButton":"Zur Anmeldung/Registrierung","dashboard.totalEquity":"Gesamteigenkapital","dashboard.totalPnL":"Gesamtgewinn und -verlust","dashboard.aiStrategies":"KI-Strategie","dashboard.indicatorStrategies":"Indikatorstrategie","dashboard.running":"Laufen","dashboard.pnlHistory":"historischer Gewinn und Verlust","dashboard.strategyPerformance":"Gewinn- und Verlustquote der Strategie","dashboard.recentTrades":"aktuelle Transaktionen","dashboard.currentPositions":"Aktuelle Position","dashboard.table.time":"Zeit","dashboard.table.strategy":"Richtlinienname","dashboard.table.symbol":"Ziel","dashboard.table.type":"Typ","dashboard.table.side":"Richtung","dashboard.table.size":"Offenes Interesse","dashboard.table.entryPrice":"durchschnittlicher Eröffnungspreis","dashboard.table.price":"Preis","dashboard.table.amount":"Menge","dashboard.table.profit":"Gewinn und Verlust","dashboard.pendingOrders":"Auftragsausführungsprotokoll","dashboard.totalOrders":"Gesamt {total} Aufträge","dashboard.viewError":"Fehler anzeigen","dashboard.filled":"Ausgeführt","dashboard.orderTable.time":"Erstellungszeit","dashboard.orderTable.strategy":"Strategie","dashboard.orderTable.symbol":"Handelspaar","dashboard.orderTable.signalType":"Signaltyp","dashboard.orderTable.amount":"Menge","dashboard.orderTable.price":"Ausführungspreis","dashboard.orderTable.status":"Status","dashboard.orderTable.executedAt":"Ausführungszeit","dashboard.signalType.openLong":"Long öffnen","dashboard.signalType.openShort":"Short öffnen","dashboard.signalType.closeLong":"Long schließen","dashboard.signalType.closeShort":"Short schließen","dashboard.signalType.addLong":"Long hinzufügen","dashboard.signalType.addShort":"Short hinzufügen","dashboard.status.pending":"Ausstehend","dashboard.status.processing":"In Bearbeitung","dashboard.status.completed":"Abgeschlossen","dashboard.status.failed":"Fehlgeschlagen","dashboard.status.cancelled":"Storniert","dashboard.table.pnl":"nicht realisierter Gewinn oder Verlust","form.basic-form.basic.title":"Grundform","form.basic-form.basic.description":"Formularseiten werden verwendet, um Informationen von Benutzern zu sammeln oder zu überprüfen. Grundformulare werden häufig in Formularszenarien mit wenigen Datenelementen verwendet.","form.basic-form.title.label":"Titel","form.basic-form.title.placeholder":"Geben Sie dem Ziel einen Namen","form.basic-form.title.required":"Bitte geben Sie einen Titel ein","form.basic-form.date.label":"Start- und Enddatum","form.basic-form.placeholder.start":"Startdatum","form.basic-form.placeholder.end":"Enddatum","form.basic-form.date.required":"Bitte wählen Sie Start- und Enddatum aus","form.basic-form.goal.label":"Zielbeschreibung","form.basic-form.goal.placeholder":"Bitte geben Sie Ihre schrittweisen Arbeitsziele ein","form.basic-form.goal.required":"Bitte geben Sie eine Zielbeschreibung ein","form.basic-form.standard.label":"messen","form.basic-form.standard.placeholder":"Bitte geben Sie Messwerte ein","form.basic-form.standard.required":"Bitte geben Sie Messwerte ein","form.basic-form.client.label":"Kunde","form.basic-form.client.required":"Bitte beschreiben Sie die Kunden, die Sie betreuen","form.basic-form.label.tooltip":"Zielgruppe der Leistungsempfänger","form.basic-form.client.placeholder":"Bitte beschreiben Sie die von Ihnen betreuten Kunden, interne Kunden direkt @Name/Auftragsnummer","form.basic-form.invites.label":"Laden Sie Gutachter ein","form.basic-form.invites.placeholder":"Bitte direkt @Name/Mitarbeiternummer angeben, es können bis zu 5 Personen einladen","form.basic-form.weight.label":"Gewicht","form.basic-form.weight.placeholder":"Bitte treten Sie ein","form.basic-form.public.label":"Zielpublikum","form.basic-form.label.help":"Kunden und Rezensenten werden standardmäßig geteilt","form.basic-form.radio.public":"öffentlich","form.basic-form.radio.partially-public":"Teilweise öffentlich","form.basic-form.radio.private":"privat","form.basic-form.publicUsers.placeholder":"offen für","form.basic-form.option.A":"Kollege 1","form.basic-form.option.B":"Kollege 2","form.basic-form.option.C":"Kollege drei","form.basic-form.email.required":"Bitte geben Sie Ihre E-Mail-Adresse ein!","form.basic-form.email.wrong-format":"Das E-Mail-Adressformat ist falsch!","form.basic-form.userName.required":"Bitte Benutzernamen eingeben!","form.basic-form.password.required":"Bitte geben Sie Ihr Passwort ein!","form.basic-form.password.twice":"Die doppelt eingegebenen Passwörter stimmen nicht überein!","form.basic-form.strength.msg":"Bitte geben Sie mindestens 6 Zeichen ein. Bitte verwenden Sie keine Passwörter, die leicht zu erraten sind.","form.basic-form.strength.strong":"Stärke: Stark","form.basic-form.strength.medium":"Stärke: Mittel","form.basic-form.strength.short":"Stärke: zu kurz","form.basic-form.confirm-password.required":"Bitte bestätigen Sie Ihr Passwort!","form.basic-form.phone-number.required":"Bitte geben Sie Ihre Mobiltelefonnummer ein!","form.basic-form.phone-number.wrong-format":"Das Format der Mobiltelefonnummer ist falsch!","form.basic-form.verification-code.required":"Bitte geben Sie den Verifizierungscode ein!","form.basic-form.form.get-captcha":"Holen Sie sich den Bestätigungscode","form.basic-form.captcha.second":"Sekunden","form.basic-form.form.optional":"(optional)","form.basic-form.form.submit":"Senden","form.basic-form.form.save":"speichern","form.basic-form.email.placeholder":"E-Mail","form.basic-form.password.placeholder":"Passwort mit mindestens 6 Zeichen, Groß- und Kleinschreibung beachten","form.basic-form.confirm-password.placeholder":"Passwort bestätigen","form.basic-form.phone-number.placeholder":"Mobiltelefonnummer","form.basic-form.verification-code.placeholder":"Bestätigungscode","result.success.title":"Übermittlung erfolgreich","result.success.description":"Die Seite mit den Übermittlungsergebnissen wird verwendet, um Rückmeldungen zu den Verarbeitungsergebnissen einer Reihe von Vorgangsaufgaben zu geben. Wenn es sich nur um einen einfachen Vorgang handelt, verwenden Sie das globale Eingabeaufforderungs-Feedback „Nachricht“. In diesem Textbereich können einfache Zusatzanweisungen angezeigt werden. Bei Bedarf zur Darstellung von „Dokumenten“ können im grauen Bereich darunter komplexere Inhalte angezeigt werden.","result.success.operate-title":"Projektname","result.success.operate-id":"Projekt-ID","result.success.principal":"Verantwortliche Person","result.success.operate-time":"Effektive Zeit","result.success.step1-title":"Projekt erstellen","result.success.step1-operator":"Qu Lili","result.success.step2-title":"Vorläufige Prüfung der Abteilung","result.success.step2-operator":"Zhou Maomao","result.success.step2-extra":"Dringend","result.success.step3-title":"Finanzielle Überprüfung","result.success.step4-title":"Komplett","result.success.btn-return":"Zurück zur Liste","result.success.btn-project":"Artikel ansehen","result.success.btn-print":"Drucken","result.fail.error.title":"Die Übermittlung ist fehlgeschlagen","result.fail.error.description":"Bitte überprüfen und ändern Sie die folgenden Informationen, bevor Sie sie erneut einreichen.","result.fail.error.hint-title":"Der von Ihnen übermittelte Inhalt enthält die folgenden Fehler:","result.fail.error.hint-text1":"Ihr Konto wurde gesperrt","result.fail.error.hint-btn1":"Sofort auftauen","result.fail.error.hint-text2":"Ihr Konto ist noch nicht antragsberechtigt","result.fail.error.hint-btn2":"Jetzt upgraden","result.fail.error.btn-text":"Zurück zur Änderung","account.settings.menuMap.custom":"Personalisierung","account.settings.menuMap.binding":"Kontobindung","account.settings.basic.avatar":"Avatar","account.settings.basic.change-avatar":"Avatar ändern","account.settings.basic.email":"E-Mail","account.settings.basic.email-message":"Bitte geben Sie Ihre E-Mail ein!","account.settings.basic.nickname":"Spitzname","account.settings.basic.nickname-message":"Bitte geben Sie Ihren Spitznamen ein!","account.settings.basic.profile":"Profil","account.settings.basic.profile-message":"Bitte geben Sie Ihr persönliches Profil ein!","account.settings.basic.profile-placeholder":"Profil","account.settings.basic.country":"Land/Region","account.settings.basic.country-message":"Bitte geben Sie Ihr Land oder Ihre Region ein!","account.settings.basic.geographic":"Provinz und Stadt","account.settings.basic.geographic-message":"Bitte geben Sie Ihr Bundesland und Ihre Stadt ein!","account.settings.basic.address":"Straßenadresse","account.settings.basic.address-message":"Bitte geben Sie Ihre Straße ein!","account.settings.basic.phone":"Kontaktnummer","account.settings.basic.phone-message":"Bitte geben Sie Ihre Kontaktnummer ein!","account.settings.basic.update":"Grundlegende Informationen aktualisieren","account.settings.basic.update.success":"Grundlegende Informationen erfolgreich aktualisieren","account.settings.security.strong":"Stark","account.settings.security.medium":"in","account.settings.security.weak":"schwach","account.settings.security.password":"Kontopasswort","account.settings.security.password-description":"Aktuelle Passwortstärke:","account.settings.security.phone":"Sicherheitshandy","account.settings.security.phone-description":"Bereits gebundenes Mobiltelefon:","account.settings.security.question":"Sicherheitsprobleme","account.settings.security.question-description":"Es werden keine Sicherheitsfragen gestellt, wodurch die Kontosicherheit wirksam geschützt werden kann.","account.settings.security.email":"E-Mail binden","account.settings.security.email-description":"Bereits gebundene E-Mail-Adresse:","account.settings.security.mfa":"MFA-Gerät","account.settings.security.mfa-description":"Das MFA-Gerät ist nicht gebunden. Nach der Bindung können Sie noch einmal bestätigen.","account.settings.security.modify":"Ändern","account.settings.security.set":"Einstellungen","account.settings.security.bind":"verbindlich","account.settings.binding.taobao":"Binde Taobao","account.settings.binding.taobao-description":"Das Taobao-Konto ist derzeit nicht gebunden","account.settings.binding.alipay":"Alipay binden","account.settings.binding.alipay-description":"Das Alipay-Konto ist derzeit nicht gebunden","account.settings.binding.dingding":"Bindung von DingTalk","account.settings.binding.dingding-description":"Derzeit ist kein DingTalk-Konto gebunden","account.settings.binding.bind":"verbindlich","account.settings.notification.password":"Kontopasswort","account.settings.notification.password-description":"Nachrichten von anderen Benutzern werden in Form von Site-Nachrichten benachrichtigt.","account.settings.notification.messages":"Systemmeldungen","account.settings.notification.messages-description":"Systemmeldungen werden in Form von Site-Nachrichten benachrichtigt.","account.settings.notification.todo":"Zu erledigende Aufgaben","account.settings.notification.todo-description":"Zu erledigende Aufgaben werden in Form von In-Site-Nachrichten benachrichtigt","account.settings.settings.open":"offen","account.settings.settings.close":"schließen","trading-assistant.title":"Handelsassistent","trading-assistant.strategyList":"Strategieliste","trading-assistant.createStrategy":"Richtlinie erstellen","trading-assistant.noStrategy":"Noch keine Strategie","trading-assistant.selectStrategy":"Bitte wählen Sie links eine Strategie aus, um Details anzuzeigen","trading-assistant.startStrategy":"Startstrategie","trading-assistant.stopStrategy":"Stoppstrategie","trading-assistant.editStrategy":"Redaktionelle Strategie","trading-assistant.deleteStrategy":"Richtlinie löschen","trading-assistant.status.running":"Laufen","trading-assistant.status.stopped":"Angehalten","trading-assistant.status.error":"Fehler","trading-assistant.strategyType.IndicatorStrategy":"Technische Indikatorstrategie","trading-assistant.strategyType.PromptBasedStrategy":"Stichwortstrategie","trading-assistant.strategyType.GridStrategy":"Grid-Strategie","trading-assistant.tabs.tradingRecords":"Transaktionsverlauf","trading-assistant.tabs.positions":"Positionsaufzeichnung","trading-assistant.tabs.equityCurve":"Eigenkapitalkurve","trading-assistant.form.step1":"Wählen Sie Indikatoren aus","trading-assistant.form.step2":"Exchange-Konfiguration","trading-assistant.form.step3":"Strategieparameter","trading-assistant.form.step2Params":"Parameter","trading-assistant.form.step3Signal":"Signalzustellung","trading-assistant.form.marketCategory":"Marktkategorie","trading-assistant.form.marketCategoryHint":"Wählen Sie zuerst den Markt. Nur Krypto kann Live-Trading aktivieren; andere Märkte sind nur Signal.","trading-assistant.market.USStock":"US-Aktien","trading-assistant.market.Crypto":"Krypto","trading-assistant.market.Forex":"Forex","trading-assistant.form.indicator":"Wählen Sie Indikatoren aus","trading-assistant.form.indicatorHint":"Sie können nur technische Indikatoren auswählen, die Sie gekauft oder erstellt haben","trading-assistant.form.qdtCostHints":"Bei Verwendung dieser Strategie wird QDT verbraucht. Bitte stellen Sie sicher, dass das Konto über ausreichend QDT-Guthaben verfügt","trading-assistant.form.indicatorDescription":"Beschreibung des Indikators","trading-assistant.form.noDescription":"Noch keine Beschreibung","trading-assistant.form.exchange":"Austausch auswählen","trading-assistant.form.apiKey":"API-Schlüssel","trading-assistant.form.secretKey":"Geheimer Schlüssel","trading-assistant.form.passphrase":"Passphrase","trading-assistant.form.testConnection":"Testverbindung","trading-assistant.form.strategyName":"Richtlinienname","trading-assistant.form.symbol":"Handelspaar","trading-assistant.form.symbolHint":"Das Symbolformat hängt vom ausgewählten Markt ab","trading-assistant.form.symbolHintCrypto":"Krypto: z.B. BTC/USDT","trading-assistant.form.symbolHintGeneral":"Geben Sie das Symbol des gewählten Marktes ein (z.B. 600519, AAPL, EURUSD).","trading-assistant.form.initialCapital":"Höhe der Investition","trading-assistant.form.marketType":"Markttyp","trading-assistant.form.marketTypeFutures":"Vertrag","trading-assistant.form.marketTypeSpot":"Spot","trading-assistant.form.marketTypeHint":"Der Kontrakt unterstützt bidirektionalen Handel und Leverage, während der Spot nur Long-Positionen unterstützt und der Leverage auf 1x festgelegt ist","trading-assistant.form.leverage":"Nutzen Sie mehrere","trading-assistant.form.leverageHint":"Vertrag: 1-125 Mal, Spot: 1 Mal fest","trading-assistant.form.spotLeverageFixed":"Der Hebel für den Spothandel ist auf 1x festgelegt","trading-assistant.form.spotOnlyLongHint":"Der Spothandel unterstützt nur Long-Positionen","trading-assistant.form.tradeDirection":"Handelsrichtung","trading-assistant.form.tradeDirectionLong":"Nur lang","trading-assistant.form.tradeDirectionShort":"Nur kurz","trading-assistant.form.tradeDirectionBoth":"zweiseitige Transaktion","trading-assistant.form.timeframe":"Zeitraum","trading-assistant.form.klinePeriod":"K-Linien-Zeitraum","trading-assistant.form.timeframe1m":"1 Minute","trading-assistant.form.timeframe5m":"5 Minuten","trading-assistant.form.timeframe15m":"15 Minuten","trading-assistant.form.timeframe30m":"30 Minuten","trading-assistant.form.timeframe1H":"1 Stunde","trading-assistant.form.timeframe4H":"4 Stunden","trading-assistant.form.timeframe1D":"1 Tag","trading-assistant.form.selectStrategyType":"Strategietyp auswählen","trading-assistant.form.indicatorStrategy":"Indikator-Strategie","trading-assistant.form.indicatorStrategyDesc":"Automatisierte Handelsstrategie basierend auf technischen Indikatoren","trading-assistant.form.aiStrategy":"KI-Strategie","trading-assistant.form.aiStrategyDesc":"Automatisierte Handelsstrategie basierend auf KI-Intelligenzentscheidungen","trading-assistant.form.enableAiFilter":"KI-Intelligenzentscheidungsfilter aktivieren","trading-assistant.form.enableAiFilterHint":"Wenn aktiviert, werden Indikatorsignale von KI gefiltert, um die Handelsqualität zu verbessern","trading-assistant.form.aiFilterPrompt":"Benutzerdefinierte Eingabeaufforderung","trading-assistant.form.aiFilterPromptHint":"Benutzerdefinierte Anweisungen für KI-Filterung bereitstellen, leer lassen, um die Systemstandardwerte zu verwenden","trading-assistant.validation.strategyTypeRequired":"Bitte wählen Sie einen Strategietyp","trading-assistant.validation.marketCategoryRequired":"Bitte wählen Sie eine Marktkategorie","trading-assistant.form.advancedSettings":"Erweiterte Einstellungen","trading-assistant.form.orderMode":"Bestellmodus","trading-assistant.form.orderModeMaker":"Hersteller","trading-assistant.form.orderModeTaker":"Marktpreis (Taker)","trading-assistant.form.orderModeHint":"Im Pending-Order-Modus werden Limit-Orders verwendet und die Bearbeitungsgebühr ist niedriger; Der Marktpreismodus wird sofort ausgeführt und die Bearbeitungsgebühr ist höher.","trading-assistant.form.makerWaitSec":"Wartezeit für ausstehende Bestellungen (Sekunden)","trading-assistant.form.makerWaitSecHint":"Die Zeit, die nach der Bestellung auf die Transaktion gewartet wird. Brechen Sie ab und versuchen Sie es nach einer Zeitüberschreitung erneut.","trading-assistant.form.makerRetries":"Anzahl der Wiederholungsversuche für ausstehende Bestellungen","trading-assistant.form.makerRetriesHint":"Die maximale Anzahl von Wiederholungsversuchen, wenn eine ausstehende Order nicht ausgeführt wird","trading-assistant.form.fallbackToMarket":"Die ausstehende Bestellung schlägt fehl und der Marktpreis wird herabgestuft.","trading-assistant.form.fallbackToMarketHint":"Wenn die ausstehende Eröffnungs-/Schließorder nicht abgeschlossen wurde, wird angegeben, ob sie auf eine Marktorder herabgestuft werden soll, um sicherzustellen, dass die Transaktion abgeschlossen wird.","trading-assistant.form.marginMode":"Margin-Modus","trading-assistant.form.marginModeCross":"Volles Lager","trading-assistant.form.marginModeIsolated":"Isolierte Lage","trading-assistant.form.stopLossPct":"Stop-Loss-Verhältnis (%)","trading-assistant.form.stopLossPctHint":"Legen Sie den Stop-Loss-Prozentsatz fest. 0 bedeutet, dass Stop-Loss nicht aktiviert ist","trading-assistant.form.takeProfitPct":"Take-Profit-Quote (%)","trading-assistant.form.takeProfitPctHint":"Legen Sie den Take-Profit-Prozentsatz fest. 0 bedeutet, dass Take-Profit deaktiviert ist","trading-assistant.form.commission":"Gebühr (%)","trading-assistant.form.commissionHint":"Handelsgebühr in Prozent (optional)","trading-assistant.form.slippage":"Slippage (%)","trading-assistant.form.slippageHint":"Geschätzter Slippage-Prozentsatz (optional)","trading-assistant.form.executionMode":"Ausführung","trading-assistant.form.executionModeSignal":"Nur Signal (Benachrichtigungen)","trading-assistant.form.executionModeLive":"Live-Trading (nur Krypto)","trading-assistant.form.liveTradingCryptoOnlyHint":"Live-Trading ist nur für Krypto verfügbar. Andere Märkte können nur Signale senden.","trading-assistant.form.notifyChannels":"Benachrichtigungskanäle","trading-assistant.form.notifyChannelsHint":"Wählen Sie aus, wie Sie Kauf/Verkauf- und Risikosignale erhalten möchten.","trading-assistant.notify.browser":"Browser","trading-assistant.notify.email":"E-Mail","trading-assistant.notify.phone":"Telefon","trading-assistant.notify.telegram":"Telegram","trading-assistant.notify.discord":"Discord","trading-assistant.notify.webhook":"Webhook","trading-assistant.form.notifyEmail":"E-Mail","trading-assistant.form.notifyPhone":"Telefonnummer","trading-assistant.form.notifyTelegram":"Telegram (Chat-ID / Benutzername)","trading-assistant.form.notifyDiscord":"Discord (Webhook-URL)","trading-assistant.form.notifyWebhook":"Webhook-URL","trading-assistant.form.liveTradingConfigTitle":"Exchange-Zugangsdaten","trading-assistant.form.liveTradingConfigHint":"Geben Sie Ihre Exchange-API-Zugangsdaten ein. Sie können die Verbindung vor dem Speichern testen.","trading-assistant.form.savedCredential":"Gespeicherte Zugangsdaten","trading-assistant.form.savedCredentialHint":"Optional: Wählen Sie gespeicherte Zugangsdaten zum automatischen Ausfüllen.","trading-assistant.form.saveCredential":"Diese Zugangsdaten für später speichern","trading-assistant.form.credentialName":"Name (optional)","trading-assistant.form.signalMode":"Signalmodus","trading-assistant.form.signalModeConfirmed":"Bestätigen Sie den Modus","trading-assistant.form.signalModeAggressive":"Aggressiver Modus","trading-assistant.form.signalModeHint":"Bestätigungsmodus: prüft nur abgeschlossene K-Zeilen; Aggressiver Modus: Überprüft auch die Bildung von K-Linien","trading-assistant.form.cancel":"Abbrechen","trading-assistant.form.prev":"Vorheriger Schritt","trading-assistant.form.next":"Nächster Schritt","trading-assistant.form.confirmCreate":"Bestätigen Sie die Erstellung","trading-assistant.form.confirmEdit":"Bestätigen Sie die Änderungen","trading-assistant.messages.createSuccess":"Strategie erfolgreich erstellt","trading-assistant.messages.createFailed":"Richtlinie konnte nicht erstellt werden","trading-assistant.messages.updateSuccess":"Richtlinienaktualisierung erfolgreich","trading-assistant.messages.updateFailed":"Die Aktualisierungsrichtlinie ist fehlgeschlagen","trading-assistant.messages.deleteSuccess":"Richtlinienlöschung erfolgreich","trading-assistant.messages.deleteFailed":"Das Löschen der Richtlinie ist fehlgeschlagen","trading-assistant.messages.startSuccess":"Strategie erfolgreich gestartet","trading-assistant.messages.startFailed":"Die Richtlinie konnte nicht gestartet werden","trading-assistant.messages.stopSuccess":"Die Strategie wurde erfolgreich beendet","trading-assistant.messages.stopFailed":"Die Stoppstrategie ist fehlgeschlagen","trading-assistant.messages.loadFailed":"Richtlinienliste konnte nicht abgerufen werden","trading-assistant.messages.runningWarning":"Die Strategie läuft. Bitte stoppen Sie die Strategie, bevor Sie sie ändern.","trading-assistant.messages.deleteConfirmWithName":"Sind Sie sicher, dass Sie die Richtlinie „{name}“ löschen möchten? Dieser Vorgang ist irreversibel.","trading-assistant.messages.deleteConfirm":"Sind Sie sicher, dass Sie diese Richtlinie löschen möchten? Dieser Vorgang ist irreversibel.","trading-assistant.messages.loadTradesFailed":"Transaktionsdatensätze konnten nicht abgerufen werden","trading-assistant.messages.loadPositionsFailed":"Positionsdatensatz konnte nicht abgerufen werden","trading-assistant.messages.loadEquityFailed":"Die Eigenkapitalkurve konnte nicht ermittelt werden","trading-assistant.messages.loadIndicatorsFailed":"Die Indikatorliste konnte nicht geladen werden. Bitte versuchen Sie es später noch einmal","trading-assistant.messages.spotLimitations":"Der Spot-Handel wurde automatisch auf „Nur Long“ mit 1-facher Hebelwirkung eingestellt","trading-assistant.messages.autoFillApiConfig":"Die historische API-Konfiguration der Börse wurde automatisch ausgefüllt","trading-assistant.placeholders.selectIndicator":"Bitte wählen Sie einen Indikator aus","trading-assistant.placeholders.selectExchange":"Bitte wählen Sie einen Austausch aus","trading-assistant.placeholders.selectMarketCategory":"Bitte Marktkategorie auswählen","trading-assistant.placeholders.inputApiKey":"Bitte geben Sie den API-Schlüssel ein","trading-assistant.placeholders.inputSecretKey":"Bitte geben Sie den Geheimschlüssel ein","trading-assistant.placeholders.inputPassphrase":"Bitte geben Sie die Passphrase ein","trading-assistant.placeholders.inputStrategyName":"Bitte geben Sie einen Richtliniennamen ein","trading-assistant.placeholders.selectSymbol":"Bitte wählen Sie ein Handelspaar aus","trading-assistant.placeholders.inputSymbol":"Bitte Symbol eingeben","trading-assistant.placeholders.selectTimeframe":"Bitte wählen Sie einen Zeitraum aus","trading-assistant.placeholders.selectKlinePeriod":"Bitte wählen Sie einen K-Linien-Zeitraum aus","trading-assistant.placeholders.inputAiFilterPrompt":"Bitte geben Sie eine benutzerdefinierte Eingabeaufforderung ein (optional)","trading-assistant.placeholders.inputEmail":"Bitte E-Mail eingeben","trading-assistant.placeholders.inputPhone":"Bitte Telefonnummer eingeben","trading-assistant.placeholders.inputTelegram":"Bitte Telegram Chat-ID / Benutzername eingeben","trading-assistant.placeholders.inputDiscord":"Bitte Discord Webhook-URL eingeben","trading-assistant.placeholders.inputWebhook":"Bitte Webhook-URL eingeben","trading-assistant.placeholders.selectSavedCredential":"Gespeicherte Zugangsdaten auswählen","trading-assistant.placeholders.inputCredentialName":"Zum Beispiel: Binance Hauptschlüssel","trading-assistant.validation.indicatorRequired":"Bitte wählen Sie einen Indikator aus","trading-assistant.validation.exchangeRequired":"Bitte wählen Sie einen Austausch aus","trading-assistant.validation.apiKeyRequired":"Bitte geben Sie den API-Schlüssel ein","trading-assistant.validation.secretKeyRequired":"Bitte geben Sie den Geheimschlüssel ein","trading-assistant.validation.passphraseRequired":"Bitte geben Sie die Passphrase ein","trading-assistant.validation.exchangeConfigIncomplete":"Bitte geben Sie die vollständigen Exchange-Konfigurationsinformationen ein","trading-assistant.validation.testConnectionRequired":'Bitte klicken Sie zuerst auf die Schaltfläche "Verbindung testen" und stellen Sie sicher, dass die Verbindung erfolgreich ist',"trading-assistant.validation.testConnectionFailed":"Verbindungstest fehlgeschlagen, bitte überprüfen Sie die Konfiguration und testen Sie erneut","trading-assistant.validation.credentialRequired":"Bitte fügen Sie zuerst die Börsenanmeldedaten im Persönlichen Zentrum hinzu und testen Sie sie","trading-assistant.validation.strategyNameRequired":"Bitte geben Sie einen Richtliniennamen ein","trading-assistant.validation.symbolRequired":"Bitte wählen Sie ein Handelspaar aus","trading-assistant.validation.initialCapitalRequired":"Bitte geben Sie den Anlagebetrag ein","trading-assistant.validation.leverageRequired":"Bitte geben Sie die Leverage Ratio ein","trading-assistant.validation.emailInvalid":"Ungültige E-Mail-Adresse","trading-assistant.validation.notifyChannelRequired":"Bitte wählen Sie mindestens einen Benachrichtigungskanal aus","trading-assistant.table.time":"Zeit","trading-assistant.table.type":"Typ","trading-assistant.table.price":"Preis","trading-assistant.table.amount":"Menge","trading-assistant.table.value":"Betrag","trading-assistant.table.commission":"Bearbeitungsgebühr","trading-assistant.table.symbol":"Handelspaar","trading-assistant.table.side":"Richtung","trading-assistant.table.size":"Positionsmenge","trading-assistant.table.entryPrice":"Eröffnungspreis","trading-assistant.table.currentPrice":"aktueller Preis","trading-assistant.table.unrealizedPnl":"nicht realisierter Gewinn oder Verlust","trading-assistant.table.pnlPercent":"Gewinn- und Verlustquote","trading-assistant.table.buy":"kaufen","trading-assistant.table.sell":"verkaufen","trading-assistant.table.long":"Geh lange","trading-assistant.table.short":"kurz","trading-assistant.table.noPositions":"Noch keine Stellen","trading-assistant.detail.title":"Strategiedetails","trading-assistant.detail.strategyName":"Richtlinienname","trading-assistant.detail.strategyType":"Strategietyp","trading-assistant.detail.status":"Status","trading-assistant.detail.tradingMode":"Handelsmodell","trading-assistant.detail.exchange":"Austausch","trading-assistant.detail.initialCapital":"Anfangskapital","trading-assistant.detail.totalInvestment":"Gesamtinvestitionsbetrag","trading-assistant.detail.currentEquity":"Aktuelles Nettovermögen","trading-assistant.detail.totalPnl":"Gesamtgewinn und -verlust","trading-assistant.detail.indicatorName":"Indikatorname","trading-assistant.detail.maxLeverage":"Maximale Hebelwirkung","trading-assistant.detail.decideInterval":"Entscheidungsintervall","trading-assistant.detail.symbols":"Transaktionsobjekt","trading-assistant.detail.createdAt":"Schöpfungszeit","trading-assistant.detail.updatedAt":"Aktualisierungszeit","trading-assistant.detail.llmConfig":"Konfiguration des KI-Modells","trading-assistant.detail.exchangeConfig":"Exchange-Konfiguration","trading-assistant.detail.provider":"Anbieter","trading-assistant.detail.modelId":"Modell-ID","trading-assistant.detail.close":"Schließen","trading-assistant.detail.loadFailed":"Richtliniendetails konnten nicht abgerufen werden","trading-assistant.equity.noData":"Noch keine Daten zum Vermögen","trading-assistant.equity.equity":"Nettovermögen","trading-assistant.exchange.tradingMode":"Handelsmodell","trading-assistant.exchange.virtual":"simulierter Handel","trading-assistant.exchange.live":"Echte Transaktion","trading-assistant.exchange.selectExchange":"Austausch auswählen","trading-assistant.exchange.walletAddress":"Wallet-Adresse","trading-assistant.exchange.walletAddressPlaceholder":"Bitte geben Sie Ihre Wallet-Adresse ein (beginnend mit 0x)","trading-assistant.exchange.privateKey":"privater Schlüssel","trading-assistant.exchange.privateKeyPlaceholder":"Bitte geben Sie den privaten Schlüssel ein (64 Zeichen)","trading-assistant.exchange.testConnection":"Testverbindung","trading-assistant.exchange.connectionSuccess":"Verbindung erfolgreich","trading-assistant.exchange.connectionFailed":"Verbindung fehlgeschlagen","trading-assistant.exchange.testFailed":"Verbindungstest fehlgeschlagen","trading-assistant.exchange.fillComplete":"Bitte geben Sie die vollständigen Exchange-Konfigurationsinformationen ein","trading-assistant.strategyTypeOptions.ai":"KI-gesteuerte Strategie","trading-assistant.strategyTypeOptions.indicator":"Technische Indikatorstrategie","trading-assistant.strategyTypeOptions.aiDeveloping":"Die KI-gesteuerte Strategiefunktion befindet sich in der Entwicklung, also bleiben Sie dran","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"KI-gesteuerte Strategiefunktionen sind in der Entwicklung","trading-assistant.indicatorType.trend":"Trend","trading-assistant.indicatorType.momentum":"Schwung","trading-assistant.indicatorType.volatility":"Fluktuation","trading-assistant.indicatorType.volume":"Lautstärke","trading-assistant.indicatorType.custom":"Anpassen","trading-assistant.exchangeNames":{okx:"OKX",binance:"Binance",hyperliquid:"Hyperliquid",blockchaincom:"Blockchain.com",coinbaseexchange:"Coinbase",gate:"Gate.io",mexc:"MEXC",kraken:"Kraken",bitfinex:"Bitfinex",bybit:"Bybit",kucoin:"KuCoin",huobi:"Huobi",bitget:"Bitget",bitmex:"BitMEX",deribit:"Deribit",phemex:"Phemex",bitmart:"BitMart",bitstamp:"Bitstamp",bittrex:"Bittrex",poloniex:"Poloniex",gemini:"Zwillinge",cryptocom:"Crypto.com",bitflyer:"bitFlyer",upbit:"Upbit",bithumb:"Bithumb",coinone:"Coinone",zb:"ZB",lbank:"LBank",bibox:"Bibox",bigone:"BigONE",bitrue:"Bitrue",coinex:"CoinEx",digifinex:"DigiFinex",ftx:"FTX",ftxus:"FTX USA",binanceus:"Binance USA",binancecoinm:"Binance COIN-M",binanceusdm:"Binance USDⓈ-M",deepcoin:"Deepcoin"},"ai-trading-assistant.title":"KI-Handelsassistent","ai-trading-assistant.strategyList":"Strategieliste","ai-trading-assistant.createStrategy":"Richtlinie erstellen","ai-trading-assistant.noStrategy":"Noch keine Strategie","ai-trading-assistant.selectStrategy":"Bitte wählen Sie links eine Strategie aus, um Details anzuzeigen","ai-trading-assistant.startStrategy":"Startstrategie","ai-trading-assistant.stopStrategy":"Stoppstrategie","ai-trading-assistant.editStrategy":"Redaktionelle Strategie","ai-trading-assistant.deleteStrategy":"Richtlinie löschen","ai-trading-assistant.status.running":"Laufen","ai-trading-assistant.status.stopped":"Angehalten","ai-trading-assistant.status.error":"Fehler","ai-trading-assistant.tabs.tradingRecords":"Transaktionsverlauf","ai-trading-assistant.tabs.positions":"Positionsaufzeichnung","ai-trading-assistant.tabs.aiDecisions":"KI-Entscheidungsaufzeichnung","ai-trading-assistant.tabs.equityCurve":"Eigenkapitalkurve","ai-trading-assistant.form.createTitle":"Erstellen Sie KI-Handelsstrategien","ai-trading-assistant.form.editTitle":"Bearbeiten Sie die KI-Handelsstrategie","ai-trading-assistant.form.strategyName":"Richtlinienname","ai-trading-assistant.form.modelId":"KI-Modell","ai-trading-assistant.form.modelIdHint":"Verwenden Sie den OpenRouter-Systemdienst, ohne den API-Schlüssel zu konfigurieren","ai-trading-assistant.form.decideInterval":"Entscheidungsintervall","ai-trading-assistant.form.decideInterval5m":"5 Minuten","ai-trading-assistant.form.decideInterval10m":"10 Minuten","ai-trading-assistant.form.decideInterval30m":"30 Minuten","ai-trading-assistant.form.decideInterval1h":"1 Stunde","ai-trading-assistant.form.decideInterval4h":"4 Stunden","ai-trading-assistant.form.decideInterval1d":"1 Tag","ai-trading-assistant.form.decideInterval1w":"1 Woche","ai-trading-assistant.form.decideIntervalHint":"Das Zeitintervall, in dem die KI Entscheidungen trifft","ai-trading-assistant.form.runPeriod":"Laufzyklus","ai-trading-assistant.form.runPeriodHint":"Die Startzeit und Endzeit des Strategielaufs","ai-trading-assistant.form.startDate":"Startdatum","ai-trading-assistant.form.endDate":"Enddatum","ai-trading-assistant.form.qdtCostTitle":"Anweisungen zum QDT-Abzug","ai-trading-assistant.form.qdtCostHint":"{cost} QDT wird für jede KI-Entscheidung abgezogen. Bitte stellen Sie sicher, dass Ihr Konto über ausreichend QDT-Guthaben verfügt. Während der Umsetzung der Strategie werden für jede Entscheidung Gebühren in Echtzeit abgezogen.","ai-trading-assistant.form.apiKey":"API-Schlüssel","ai-trading-assistant.form.exchange":"Austausch auswählen","ai-trading-assistant.form.secretKey":"Geheimer Schlüssel","ai-trading-assistant.form.passphrase":"Passphrase","ai-trading-assistant.form.testConnection":"Testverbindung","ai-trading-assistant.form.symbol":"Handelspaar","ai-trading-assistant.form.symbolHint":"Wählen Sie das Handelspaar aus, mit dem Sie handeln möchten","ai-trading-assistant.form.initialCapital":"Investierter Betrag (Marge)","ai-trading-assistant.form.leverage":"Nutzen Sie mehrere","ai-trading-assistant.form.timeframe":"Zeitraum","ai-trading-assistant.form.timeframe1m":"1 Minute","ai-trading-assistant.form.timeframe5m":"5 Minuten","ai-trading-assistant.form.timeframe15m":"15 Minuten","ai-trading-assistant.form.timeframe30m":"30 Minuten","ai-trading-assistant.form.timeframe1H":"1 Stunde","ai-trading-assistant.form.timeframe4H":"4 Stunden","ai-trading-assistant.form.timeframe1D":"1 Tag","ai-trading-assistant.form.marketType":"Markttyp","ai-trading-assistant.form.marketTypeFutures":"Vertrag","ai-trading-assistant.form.marketTypeSpot":"Spot","ai-trading-assistant.form.totalPnl":"Gesamtgewinn und -verlust","ai-trading-assistant.form.customPrompt":"Benutzerdefinierte Aufforderungswörter","ai-trading-assistant.form.customPromptHint":"Optional, wird zur Anpassung von KI-Handelsstrategien und Entscheidungslogik verwendet","ai-trading-assistant.form.cancel":"Abbrechen","ai-trading-assistant.form.prev":"Vorheriger Schritt","ai-trading-assistant.form.next":"Nächster Schritt","ai-trading-assistant.form.confirmCreate":"Bestätigen Sie die Erstellung","ai-trading-assistant.form.confirmEdit":"Bestätigen Sie die Änderungen","ai-trading-assistant.messages.createSuccess":"Strategie erfolgreich erstellt","ai-trading-assistant.messages.createFailed":"Richtlinie konnte nicht erstellt werden","ai-trading-assistant.messages.updateSuccess":"Richtlinienaktualisierung erfolgreich","ai-trading-assistant.messages.updateFailed":"Die Aktualisierungsrichtlinie ist fehlgeschlagen","ai-trading-assistant.messages.deleteSuccess":"Richtlinienlöschung erfolgreich","ai-trading-assistant.messages.deleteFailed":"Das Löschen der Richtlinie ist fehlgeschlagen","ai-trading-assistant.messages.startSuccess":"Strategie erfolgreich gestartet","ai-trading-assistant.messages.startFailed":"Die Richtlinie konnte nicht gestartet werden","ai-trading-assistant.messages.stopSuccess":"Die Strategie wurde erfolgreich beendet","ai-trading-assistant.messages.stopFailed":"Die Stoppstrategie ist fehlgeschlagen","ai-trading-assistant.messages.loadFailed":"Richtlinienliste konnte nicht abgerufen werden","ai-trading-assistant.messages.loadDecisionsFailed":"Der KI-Entscheidungsdatensatz konnte nicht abgerufen werden","ai-trading-assistant.messages.deleteConfirm":"Sind Sie sicher, dass Sie diese Richtlinie löschen möchten? Dieser Vorgang ist irreversibel.","ai-trading-assistant.placeholders.inputStrategyName":"Bitte geben Sie einen Richtliniennamen ein","ai-trading-assistant.placeholders.selectModelId":"Bitte wählen Sie ein KI-Modell aus","ai-trading-assistant.placeholders.selectDecideInterval":"Bitte wählen Sie ein Entscheidungsintervall aus","ai-trading-assistant.placeholders.startTime":"Startzeit","ai-trading-assistant.placeholders.endTime":"Endzeit","ai-trading-assistant.placeholders.inputApiKey":"Bitte geben Sie den API-Schlüssel ein","ai-trading-assistant.placeholders.selectExchange":"Bitte wählen Sie einen Austausch aus","ai-trading-assistant.placeholders.inputSecretKey":"Bitte geben Sie den Geheimschlüssel ein","ai-trading-assistant.placeholders.inputPassphrase":"Bitte geben Sie die Passphrase ein","ai-trading-assistant.placeholders.selectSymbol":"Bitte wählen Sie ein Handelspaar aus, zum Beispiel: BTC/USDT","ai-trading-assistant.placeholders.selectTimeframe":"Bitte wählen Sie einen Zeitraum aus","ai-trading-assistant.placeholders.inputCustomPrompt":"Bitte geben Sie ein benutzerdefiniertes Aufforderungswort ein (optional)","ai-trading-assistant.validation.strategyNameRequired":"Bitte geben Sie einen Richtliniennamen ein","ai-trading-assistant.validation.modelIdRequired":"Bitte wählen Sie ein KI-Modell aus","ai-trading-assistant.validation.runPeriodRequired":"Bitte wählen Sie einen Laufzyklus aus","ai-trading-assistant.validation.apiKeyRequired":"Bitte geben Sie den API-Schlüssel ein","ai-trading-assistant.validation.exchangeRequired":"Bitte wählen Sie einen Austausch aus","ai-trading-assistant.validation.secretKeyRequired":"Bitte geben Sie den Geheimschlüssel ein","ai-trading-assistant.validation.symbolRequired":"Bitte wählen Sie ein Handelspaar aus","ai-trading-assistant.validation.initialCapitalRequired":"Bitte geben Sie den Anlagebetrag ein","ai-trading-assistant.table.time":"Zeit","ai-trading-assistant.table.type":"Typ","ai-trading-assistant.table.price":"Preis","ai-trading-assistant.table.amount":"Menge","ai-trading-assistant.table.value":"Betrag","ai-trading-assistant.table.symbol":"Handelspaar","ai-trading-assistant.table.side":"Richtung","ai-trading-assistant.table.size":"Positionsmenge","ai-trading-assistant.table.entryPrice":"Eröffnungspreis","ai-trading-assistant.table.currentPrice":"aktueller Preis","ai-trading-assistant.table.unrealizedPnl":"nicht realisierter Gewinn oder Verlust","ai-trading-assistant.table.profit":"Gewinn und Verlust","ai-trading-assistant.table.openLong":"Lange geöffnet","ai-trading-assistant.table.closeLong":"Pinduo","ai-trading-assistant.table.openShort":"Kurz öffnen","ai-trading-assistant.table.closeShort":"leer","ai-trading-assistant.table.addLong":"Gadot","ai-trading-assistant.table.addShort":"kurz hinzufügen","ai-trading-assistant.table.closeShortProfit":"Nehmen Sie Gewinne aus Short-Positionen mit","ai-trading-assistant.table.closeShortStop":"Stop-Loss","ai-trading-assistant.table.closeLongProfit":"Halten Sie lange inne und nehmen Sie Gewinn mit","ai-trading-assistant.table.closeLongStop":"Stop-Loss","ai-trading-assistant.table.buy":"kaufen","ai-trading-assistant.table.sell":"verkaufen","ai-trading-assistant.table.long":"Geh lange","ai-trading-assistant.table.short":"kurz","ai-trading-assistant.table.hold":"halten","ai-trading-assistant.table.reasoning":"Analysegrund","ai-trading-assistant.table.decisions":"Entscheidungsfindung","ai-trading-assistant.table.riskAssessment":"Risikobewertung","ai-trading-assistant.table.confidence":"Vertrauen","ai-trading-assistant.table.totalRecords":"Insgesamt {total} Datensätze","ai-trading-assistant.table.noPositions":"Noch keine Stellen","ai-trading-assistant.detail.title":"Strategiedetails","ai-trading-assistant.equity.noData":"Noch keine Daten zum Vermögen","ai-trading-assistant.equity.equity":"Nettovermögen","ai-trading-assistant.exchange.testFailed":"Verbindungstest fehlgeschlagen","ai-trading-assistant.exchange.connectionSuccess":"Verbindung erfolgreich","ai-trading-assistant.exchange.connectionFailed":"Verbindung fehlgeschlagen","ai-trading-assistant.form.advancedSettings":"Erweiterte Einstellungen","ai-trading-assistant.form.orderMode":"Bestellmodus","ai-trading-assistant.form.orderModeMaker":"Hersteller","ai-trading-assistant.form.orderModeTaker":"Marktpreis (Taker)","ai-trading-assistant.form.orderModeHint":"Im Pending-Order-Modus werden Limit-Orders verwendet und die Bearbeitungsgebühr ist niedriger; Der Marktpreismodus wird sofort ausgeführt und die Bearbeitungsgebühr ist höher.","ai-trading-assistant.form.makerWaitSec":"Wartezeit für ausstehende Bestellungen (Sekunden)","ai-trading-assistant.form.makerWaitSecHint":"Die Zeit, die nach der Bestellung auf die Transaktion gewartet wird. Brechen Sie ab und versuchen Sie es nach einer Zeitüberschreitung erneut.","ai-trading-assistant.form.makerRetries":"Anzahl der Wiederholungsversuche für ausstehende Bestellungen","ai-trading-assistant.form.makerRetriesHint":"Die maximale Anzahl von Wiederholungsversuchen, wenn eine ausstehende Order nicht ausgeführt wird","ai-trading-assistant.form.fallbackToMarket":"Die ausstehende Bestellung schlägt fehl und der Marktpreis wird herabgestuft.","ai-trading-assistant.form.fallbackToMarketHint":"Wenn die ausstehende Eröffnungs-/Schließorder nicht abgeschlossen wurde, wird angegeben, ob sie auf eine Marktorder herabgestuft werden soll, um sicherzustellen, dass die Transaktion abgeschlossen wird.","ai-trading-assistant.form.marginMode":"Margin-Modus","ai-trading-assistant.form.marginModeCross":"Volles Lager","ai-trading-assistant.form.marginModeIsolated":"Isolierte Lage","ai-analysis.title":"Quantenhandelsmaschine","ai-analysis.system.online":"online","ai-analysis.system.agents":"Agent","ai-analysis.system.active":"aktiv","ai-analysis.system.stage":"Bühne","ai-analysis.panel.roster":"Agentenaufstellung","ai-analysis.panel.thinking":"Denken...","ai-analysis.panel.done":"Komplett","ai-analysis.panel.standby":"Standby","ai-analysis.input.title":"Quantenhandelsmaschine","ai-analysis.input.placeholder":"Zielwert auswählen (z. B. BTC/USDT)","ai-analysis.input.watchlist":"Optionale Bestände","ai-analysis.input.start":"Analyse starten","ai-analysis.input.recent":"Letzte Aufgaben:","ai-analysis.vis.stage":"Bühne","ai-analysis.vis.processing":"Verarbeitung","ai-analysis.result.complete":"Analyse abgeschlossen","ai-analysis.result.signal":"Schlusssignal","ai-analysis.result.confidence":"Vertrauen:","ai-analysis.result.new":"neue Analyse","ai-analysis.result.full":"Vollständigen Bericht ansehen","ai-analysis.logs.title":"Systemprotokoll","ai-analysis.modal.title":"vertraulicher Bericht","ai-analysis.modal.fundamental":"Fundamentalanalyse","ai-analysis.modal.technical":"Technische Analyse","ai-analysis.modal.sentiment":"Emotionale Analyse","ai-analysis.modal.risk":"Risikobewertung","ai-analysis.stage.idle":"Standby","ai-analysis.stage.1":"Phase Eins: Mehrdimensionale Analyse","ai-analysis.stage.2":"Phase Zwei: Lang-Kurz-Debatte","ai-analysis.stage.3":"Phase drei: Strategische Planung","ai-analysis.stage.4":"Die vierte Stufe: Überprüfung der Risikokontrolle","ai-analysis.stage.complete":"Komplett","ai-analysis.agent.investment_director":"Investmentdirektor","ai-analysis.agent.role.investment_director":"Umfassende Analyse und abschließendes Fazit","ai-analysis.agent.market":"Marktanalyst","ai-analysis.agent.role.market":"Technologie- und Marktdaten","ai-analysis.agent.fundamental":"Fundamentalanalytiker","ai-analysis.agent.role.fundamental":"Finanzen und Bewertung","ai-analysis.agent.technical":"Technischer Analyst","ai-analysis.agent.role.technical":"Technische Indikatoren und Diagramme","ai-analysis.agent.news":"Nachrichtenanalyst","ai-analysis.agent.role.news":"Globaler Nachrichtenfilter","ai-analysis.agent.sentiment":"Stimmungsanalytiker","ai-analysis.agent.role.sentiment":"Sozial und emotional","ai-analysis.agent.risk":"Risikoanalytiker","ai-analysis.agent.role.risk":"Grundlegender Risikocheck","ai-analysis.agent.bull":"bullischer Forscher","ai-analysis.agent.role.bull":"Wachstumskatalysator-Bergbau","ai-analysis.agent.bear":"bärischer Forscher","ai-analysis.agent.role.bear":"Risiko- und Fehlersuche","ai-analysis.agent.manager":"Forschungsmanager","ai-analysis.agent.role.manager":"Debattenmoderator","ai-analysis.agent.trader":"Händler","ai-analysis.agent.role.trader":"Führungsstratege","ai-analysis.agent.risky":"aktivistischer Analytiker","ai-analysis.agent.role.risky":"aggressive Strategie","ai-analysis.agent.neutral":"Bilanzanalytiker","ai-analysis.agent.role.neutral":"Ausgleichsstrategie","ai-analysis.agent.safe":"konservativer Analytiker","ai-analysis.agent.role.safe":"konservative Strategie","ai-analysis.agent.cro":"Risikokontrollmanager (CRO)","ai-analysis.agent.role.cro":"letzte Entscheidungsbefugnis","ai-analysis.script.market":"OHLCV-Daten werden von wichtigen Börsen abgerufen...","ai-analysis.script.fundamental":"Quartalsfinanzberichte abrufen...","ai-analysis.script.technical":"Analyse technischer Indikatoren und Chartmuster...","ai-analysis.script.news":"Globale Finanznachrichten scannen...","ai-analysis.script.sentiment":"Analyse von Social-Media-Trends...","ai-analysis.script.risk":"Berechnung der historischen Volatilität...","invite.inviteLink":"Einladungslink","invite.copy":"Link kopieren","invite.copySuccess":"Erfolgreich kopieren!","invite.copyFailed":"Der Kopiervorgang ist fehlgeschlagen. Bitte manuell kopieren","invite.noInviteLink":"Der Einladungslink wurde nicht generiert","invite.totalInvites":"Kumulierte Einladungen","invite.totalReward":"Kumulative Belohnungen","invite.rules":"Einladungsregeln","invite.rule1":"Jedes Mal, wenn Sie einen Freund erfolgreich zur Registrierung einladen, erhalten Sie eine Belohnung","invite.rule2":"Wenn der eingeladene Freund die erste Transaktion abschließt, erhalten Sie zusätzliche Belohnungen","invite.rule3":"Einladungsprämien werden direkt an Ihr Konto gesendet","invite.inviteList":"Einladungsliste","invite.tasks":"Missionszentrum","invite.inviteeName":"Eingeladen","invite.inviteTime":"Einladungszeit","invite.status":"Status","invite.reward":"Belohnung","invite.active":"aktiv","invite.inactive":"Nicht aktiviert","invite.completed":"Abgeschlossen","invite.claimed":"Erhalten","invite.pending":"Zu vervollständigen","invite.goToTask":"zu vervollständigen","invite.claimReward":"Belohnungen einfordern","invite.verify":"Verifizierung abgeschlossen","invite.verifySuccess":"Verifizierung erfolgreich! Aufgabe abgeschlossen","invite.verifyNotCompleted":"Die Aufgabe wurde noch nicht abgeschlossen. Bitte schließen Sie die Aufgabe zuerst ab","invite.verifyFailed":"Die Verifizierung ist fehlgeschlagen. Bitte versuchen Sie es später noch einmal","invite.claimSuccess":"{reward} QDT erfolgreich erhalten!","invite.claimFailed":"Fehler beim Sammeln. Bitte versuchen Sie es später noch einmal","invite.totalRecords":"Insgesamt {total} Datensätze","invite.task.twitter.title":"Retweeten an X (Twitter)","invite.task.twitter.desc":"Teilen Sie unsere offiziellen Tweets mit Ihrem X-Konto (Twitter).","invite.task.youtube.title":"Folgen Sie unserem YouTube-Kanal","invite.task.youtube.desc":"Abonnieren und folgen Sie unserem offiziellen YouTube-Kanal","invite.task.telegram.title":"Treten Sie der Telegram-Gruppe bei","invite.task.telegram.desc":"Treten Sie unserer offiziellen Telegram-Community-Gruppe bei","invite.task.discord.title":"Treten Sie einem Discord-Server bei","invite.task.discord.desc":"Treten Sie unserem Discord-Community-Server bei",message:"-","layouts.usermenu.dialog.title":"Informationen","layouts.usermenu.dialog.content":"Möchten Sie sich wirklich abmelden?","layouts.userLayout.title":"Finden Sie die Wahrheit in der Unsicherheit","dashboard.indicator.boundary.message":"Note: The indicator script only computes plots + buy/sell signals. Position sizing, risk, scaling, fees/slippage belong to execution config.","dashboard.indicator.boundary.indicatorRule":"Keep the script to buy/sell only (and set df['buy']/df['sell']). Do NOT implement position management, TP/SL, scaling in the script.","dashboard.indicator.boundary.backtestRule":"Rule: If a bar has a main signal (buy/sell → open/close/reverse), scaling in/out is skipped on the same bar.","dashboard.indicator.guide.title":"Python Indicator & Strategy Development Guide","dashboard.indicator.guide.intro":"This platform supports writing custom technical indicators and trading signals using Python. The system includes built-in pandas and numpy data analysis libraries. You can use standard DataFrame operations to process K-line data and draw charts or mark buy/sell signals.","dashboard.indicator.guide.section1.title":"1. Runtime Environment & Predefined Variables","dashboard.indicator.guide.section1.env":"Your code runs in a browser-based Python environment (Pyodide).","dashboard.indicator.guide.section1.libs":"Pre-installed Libraries","dashboard.indicator.guide.section1.libsDesc":"The following libraries are imported by default, no need to import again:","dashboard.indicator.guide.section1.libsList":"pandas (pd), numpy (np), math, json","dashboard.indicator.guide.section1.data":"Input Data: df","dashboard.indicator.guide.section1.dataDesc":"The system automatically converts current K-line data into a Pandas DataFrame object, variable name is df.","dashboard.indicator.guide.section1.dataColumns":"df contains the following columns (all float type):","dashboard.indicator.guide.section1.dataColumnsList":"time (timestamp, seconds), open, high, low, close, volume","dashboard.indicator.guide.section1.dataNote":"Data index is arranged from old to new (0 is the earliest data, last row is the latest data).","dashboard.indicator.guide.section1.dataIndex":"Important: df index is timestamp (DatetimeIndex), please preserve the index, avoid using .values which loses the index.","dashboard.indicator.guide.section2.title":"2. Parameter Definition","dashboard.indicator.guide.section2.desc":"You can define variables as parameters at the beginning of your code. The system will try to parse statements like variable = value as adjustable parameters.","dashboard.indicator.guide.section2.example":"Parameter Example","dashboard.indicator.guide.section2.exampleCode":"span = 20 or multiplier = 2.0","dashboard.indicator.guide.section3.title":"3. Backtest Signal Setup (Important!)","dashboard.indicator.guide.section3.desc":"If you want your indicator to support backtesting, you must set the following two columns in your code:","dashboard.indicator.guide.section3.backtestRequired":"Required for Backtesting:","dashboard.indicator.guide.section3.backtestBuySignal":"df['buy_signal'] - Boolean Series, True indicates buy signal","dashboard.indicator.guide.section3.backtestSellSignal":"df['sell_signal'] - Boolean Series, True indicates sell signal","dashboard.indicator.guide.section3.backtestExample":"Example:","dashboard.indicator.guide.section3.backtestExampleCode":"df['buy_signal'] = condition_buy
df['sell_signal'] = condition_sell","dashboard.indicator.guide.section3.backtestNote":"Note: Even if you only set output.signals for chart display, you must set these two columns to enable backtesting.","dashboard.indicator.guide.section4.title":"4. Output Requirements: output","dashboard.indicator.guide.section4.desc":"At the end of code execution, you must define a dictionary named output to tell the chart how to display results.","dashboard.indicator.guide.section4.fields":"The output dictionary contains the following fields:","dashboard.indicator.guide.section4.plots":"plots - For drawing lines (e.g., moving averages, RSI)","dashboard.indicator.guide.section4.signals":"signals - For marking buy/sell signals (e.g., arrows, labels)","dashboard.indicator.guide.section4.name":"name - Indicator name (optional)","dashboard.indicator.guide.section4.calculatedVars":"calculatedVars - Calculated variables (optional, for displaying additional information)","dashboard.indicator.guide.section5.title":"5. Plot Configuration (Plots)","dashboard.indicator.guide.section5.desc":"Each object in the plots list represents a line.","dashboard.indicator.guide.section5.table.field":"Field","dashboard.indicator.guide.section5.table.type":"Type","dashboard.indicator.guide.section5.table.required":"Required","dashboard.indicator.guide.section5.table.requiredYes":"Yes","dashboard.indicator.guide.section5.table.requiredNo":"No","dashboard.indicator.guide.section5.table.desc":"Description","dashboard.indicator.guide.section5.table.name":"The name of the indicator line, displayed in the legend","dashboard.indicator.guide.section5.table.data":"Data list, length must match the number of rows in df. Recommended to use series.tolist()","dashboard.indicator.guide.section5.table.color":"Line color (Hex format, e.g. '#ff0000'). If not filled, the system will automatically assign","dashboard.indicator.guide.section5.table.typeDesc":"Chart type, default is 'line'","dashboard.indicator.guide.section5.table.overlay":"Important. True means display on main chart (with K-line), False means display on sub-chart (independent area)","dashboard.indicator.guide.section5.example":"Example: Draw Simple Moving Average (SMA)","dashboard.indicator.guide.section5.exampleCalc":"Calculate SMA","dashboard.indicator.guide.section5.exampleOutput":"Construct Output","dashboard.indicator.guide.section5.exampleOverlay":"Display on main chart","dashboard.indicator.guide.section6.title":"6. Signal Markers (Signals)","dashboard.indicator.guide.section6.desc":"signals are used to mark buy/sell points on specific K-lines through icons or text. Note: This is only for chart display. The backtest system uses df['buy_signal'] and df['sell_signal'].","dashboard.indicator.guide.section6.table.type":"Signal type: 'buy' (buy, marked below K-line) or 'sell' (sell, marked above K-line)","dashboard.indicator.guide.section6.table.data":"Signal data list. Fill price value at signal positions, fill None (or np.nan) at non-signal positions","dashboard.indicator.guide.section6.table.text":'Text displayed on the label (e.g. "B", "S", "Buy", "Sell")',"dashboard.indicator.guide.section6.table.color":"Marker color","dashboard.indicator.guide.section6.hint":"The system automatically handles positioning.","dashboard.indicator.guide.section6.buy":"Markers will be automatically positioned below the Low of the current K-line","dashboard.indicator.guide.section6.sell":"Markers will be automatically positioned above the High of the current K-line","dashboard.indicator.guide.section6.example":"Example: Draw Buy/Sell Signals","dashboard.indicator.guide.section6.exampleInit":"Initialize signal list, fill all with None","dashboard.indicator.guide.section6.exampleLogic":"Simple logic: mark buy when close price is greater than open price","dashboard.indicator.guide.section6.exampleNote":"In actual logic, please use loops or vectorized operations","dashboard.indicator.guide.section6.examplePrice":"Record price","dashboard.indicator.guide.section6.exampleText":"Buy","dashboard.indicator.guide.section7.title":"7. Complete Code Examples","dashboard.indicator.guide.section7.exampleA":"Example A: Dual EMA Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleACode":'# 1. Calculate indicators
df[\'ema_fast\'] = df[\'close\'].ewm(span=5, adjust=False).mean()
df[\'ema_slow\'] = df[\'close\'].ewm(span=13, adjust=False).mean()

# 2. Calculate crossover signals
cross_up = (df[\'ema_fast\'] > df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) <= df[\'ema_slow\'].shift(1))
cross_down = (df[\'ema_fast\'] < df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) >= df[\'ema_slow\'].shift(1))

# 3. 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = cross_up
df[\'close_long\'] = cross_down
df[\'open_short\'] = cross_down
df[\'close_short\'] = cross_up

# 4. Generate signal data for chart display
buy_signals = [df[\'low\'].iloc[i] * 0.995 if cross_up.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if cross_down.iloc[i] else None for i in range(len(df))]

# 5. Build output
output = {
"name": "Dual EMA Strategy",
"plots": [
{"name": "EMA 5", "data": df[\'ema_fast\'].tolist(), "color": "#FF6B6B", "overlay": True},
{"name": "EMA 13", "data": df[\'ema_slow\'].tolist(), "color": "#4ECDC4", "overlay": True}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section7.exampleB":"Example B: Bollinger Bands - Chart Display Only","dashboard.indicator.guide.section7.exampleBCode":'# Calculate Bollinger Bands (chart display only, no backtesting)
length = 20
mult = 2.0
df[\'sma\'] = df[\'close\'].rolling(length).mean()
df[\'std\'] = df[\'close\'].rolling(length).std()
df[\'upper\'] = df[\'sma\'] + mult * df[\'std\']
df[\'lower\'] = df[\'sma\'] - mult * df[\'std\']

output = {
"name": "Bollinger Bands",
"plots": [
{"name": "Upper", "data": df[\'upper\'].tolist(), "color": "#FF5252", "overlay": True},
{"name": "Middle", "data": df[\'sma\'].tolist(), "color": "#2196F3", "overlay": True},
{"name": "Lower", "data": df[\'lower\'].tolist(), "color": "#00E676", "overlay": True}
]
}',"dashboard.indicator.guide.section7.exampleC":"Example C: RSI Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleCCode":'# Calculate RSI
delta = df[\'close\'].diff()
up = delta.clip(lower=0)
down = -1 * delta.clip(upper=0)
ema_up = up.ewm(com=13, adjust=False).mean()
ema_down = down.ewm(com=13, adjust=False).mean()
rs = ema_up / ema_down
df[\'rsi\'] = 100 - (100 / (1 + rs))

# Generate trading signals
buy_condition = df[\'rsi\'] < 30 # Oversold buy
sell_condition = df[\'rsi\'] > 70 # Overbought sell

# 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = buy_condition
df[\'close_long\'] = sell_condition
df[\'open_short\'] = sell_condition
df[\'close_short\'] = buy_condition

# Generate chart signals
buy_signals = [df[\'low\'].iloc[i] * 0.995 if buy_condition.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if sell_condition.iloc[i] else None for i in range(len(df))]

output = {
"name": "RSI Strategy",
"plots": [
{"name": "RSI", "data": df[\'rsi\'].tolist(), "color": "#9C27B0", "overlay": False},
{"name": "Overbought", "data": [70] * len(df), "color": "#FF5252", "style": "dashed", "overlay": False},
{"name": "Oversold", "data": [30] * len(df), "color": "#00E676", "style": "dashed", "overlay": False}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section6.param":"Parameters","dashboard.indicator.guide.section6.calc":"Calculate","dashboard.indicator.guide.section6.output":"Output","dashboard.indicator.guide.section6.generate":"Generate signal data (initialize with None)","dashboard.indicator.guide.section6.subchart":"Display on sub-chart","dashboard.indicator.guide.section8.title":"8. Frequently Asked Questions (FAQ)","dashboard.indicator.guide.section8.q1":"Q: Why can't my indicator be backtested?","dashboard.indicator.guide.section8.a1":"A: The backtest system requires NEW signal columns: df['open_long'], df['close_long'], df['open_short'], df['close_short'] (boolean). Even if you set output.signals for chart display, you must set these columns to enable backtesting.","dashboard.indicator.guide.section8.q2":"Q: Data length mismatch?","dashboard.indicator.guide.section8.a2":"A: The data list in plots and signals must have exactly the same length as the K-line data. If you use df['xxx'].tolist(), there is usually no problem.","dashboard.indicator.guide.section8.q3":"Q: How to handle NaN (empty values)?","dashboard.indicator.guide.section8.a3":"A: Pandas calculations (such as rolling mean) will produce NaN at the beginning. The system will automatically convert NaN to null for chart rendering. You don't need to manually clean it, but if you need specific logic, you can use df.fillna(0) or other methods.","dashboard.indicator.guide.section8.q4":"Q: Index mismatch causing all signals to be NaN?","dashboard.indicator.guide.section8.a4":"A: Please ensure you preserve the original df index (timestamp). Avoid using .values to create new Series. Use columns directly like df['close'] for operations.","dashboard.indicator.guide.section8.q5":"Q: Can I use third-party network libraries?","dashboard.indicator.guide.section8.a5":"A: No. The runtime environment is a browser sandbox and cannot use libraries like requests to request external APIs, nor can it install additional pip packages. Limited to built-in libraries such as pandas, numpy, math, json.","dashboard.indicator.guide.section8.q6":"Q: How to debug code?","dashboard.indicator.guide.section8.a6":"A: If the chart does not display indicators, it is usually because the Python code has an error. Please check for syntax errors or array index out of bounds. It is recommended to debug the algorithm logic in a local Python environment first, then copy it in.","dashboard.indicator.guide.section8.q7":"Q: Backtest shows 0 signals?","dashboard.indicator.guide.section8.a7":"A: Please check the data type of df['open_long']/df['close_long']/df['open_short']/df['close_short']. They should be boolean (True/False), not numeric. Use condition.fillna(False).astype(bool) to ensure correct type.","dashboard.indicator.backtest.commissionHint":"Charged on notional value (incl. leverage) per trade; both entry & exit are deducted from balance.","dashboard.indicator.backtest.historyTitle":"Backtest History","dashboard.indicator.backtest.historyRefresh":"Refresh","dashboard.indicator.backtest.historyView":"View","dashboard.indicator.backtest.historyNoData":"No backtest history","dashboard.indicator.backtest.historyUseCurrent":"Only current symbol/timeframe","dashboard.indicator.backtest.historyFilterSymbol":"Symbol","dashboard.indicator.backtest.historyFilterTimeframe":"Timeframe","dashboard.indicator.backtest.historyApply":"Apply filters","dashboard.indicator.backtest.historyAIAnalyze":"AI Analyze","dashboard.indicator.backtest.historyAIAnalyzeTitle":"AI Suggestions","dashboard.indicator.backtest.historyNoAIResult":"No AI analysis result","dashboard.indicator.backtest.historyRunId":"Run ID","dashboard.indicator.backtest.historyCreatedAt":"Time","dashboard.indicator.backtest.historyRange":"Range","dashboard.indicator.backtest.historyStatus":"Status","dashboard.indicator.backtest.historyStatusSuccess":"Success","dashboard.indicator.backtest.historyStatusFailed":"Failed","dashboard.indicator.backtest.historyActions":"Actions","dashboard.indicator.backtest.hint.entryPctMax":"Max entry: {maxPct}% (reserve budget for future scale-ins)","trading-assistant.exchange.ipWhitelistTip":"Please add the following IPs to the whitelist in your exchange API settings:","signal-robot.title":"Signal Robot Console","signal-robot.createBot":"Create New Bot","signal-robot.search.nameOrSymbol":"Name/Symbol","signal-robot.search.placeholder":"Search bot name or symbol","signal-robot.search.status":"Status","signal-robot.search.statusAll":"All","signal-robot.search.statusRunning":"Running","signal-robot.search.statusPaused":"Paused","signal-robot.search.query":"Query","signal-robot.search.reset":"Reset","signal-robot.table.botName":"Bot Name","signal-robot.table.symbolTimeframe":"Symbol/Timeframe","signal-robot.table.triggerStrategy":"Trigger Strategy","signal-robot.table.notificationChannels":"Notification Channels","signal-robot.table.status":"Status","signal-robot.table.action":"Action","signal-robot.table.triggerConditions":"{count} trigger conditions","signal-robot.table.monitoring":"Monitoring","signal-robot.table.paused":"Paused","signal-robot.table.edit":"Edit","signal-robot.table.pause":"Pause","signal-robot.table.start":"Start","signal-robot.table.delete":"Delete","signal-robot.table.deleteConfirm":"Are you sure you want to delete this bot?","signal-robot.table.deleteSuccess":"Deleted successfully","signal-robot.table.startSuccess":"Bot started","signal-robot.table.pauseSuccess":"Bot paused","signal-robot.channel.telegram":"Telegram","signal-robot.channel.discord":"Discord","signal-robot.channel.email":"Email","signal-robot.channel.webhook":"Webhook","signal-robot.channel.browser":"Browser Push","signal-robot.modal.createTitle":"Create New Signal Robot","signal-robot.modal.editTitle":"Edit Signal Robot","signal-robot.modal.step.basic":"Basic Settings","signal-robot.modal.step.entry":"Entry Strategy","signal-robot.modal.step.position":"Position Management","signal-robot.modal.step.risk":"Risk Control","signal-robot.modal.step.notify":"Notification Config","signal-robot.modal.prev":"Previous","signal-robot.modal.next":"Next","signal-robot.modal.preview":"Preview Backtest","signal-robot.modal.complete":"Complete & Run","signal-robot.modal.saveSuccess":"Saved successfully","signal-robot.modal.previewDeveloping":"Preview feature is under development...","signal-robot.modal.basicInfoRequired":"Please complete basic information","signal-robot.basic.alert":"Set basic information for the bot","signal-robot.basic.title":"Basic Information","signal-robot.basic.botName":"Bot Name","signal-robot.basic.botNamePlaceholder":"e.g.: BTC SuperTrend Strategy","signal-robot.basic.symbol":"Trading Pair","signal-robot.basic.symbolPlaceholder":"Select from watchlist","signal-robot.basic.noWatchlist":"No watchlist items, please add in market page first","signal-robot.basic.timeframe":"K-Line Period","signal-robot.basic.timeframe15m":"15 Minutes","signal-robot.basic.timeframe30m":"30 Minutes","signal-robot.basic.timeframe1h":"1 Hour","signal-robot.basic.timeframe4h":"4 Hours","signal-robot.basic.timeframe1d":"1 Day","signal-robot.basic.autoNameSuggestion":"{symbol} Signal Robot","signal-robot.entry.alert":"Trigger entry signal when all conditions below are met","signal-robot.entry.condition":"Condition {index}","signal-robot.entry.indicator":"Indicator","signal-robot.entry.indicatorSupertrend":"SuperTrend","signal-robot.entry.indicatorEma":"EMA (Exponential Moving Average)","signal-robot.entry.indicatorRsi":"RSI (Relative Strength Index)","signal-robot.entry.indicatorMacd":"MACD","signal-robot.entry.indicatorBollinger":"Bollinger Bands","signal-robot.entry.atrPeriod":"ATR Period","signal-robot.entry.multiplier":"Multiplier","signal-robot.entry.triggerSignal":"Trigger Signal","signal-robot.entry.signalTrendBullish":"Trend Bullish","signal-robot.entry.signalTrendBearish":"Trend Bearish","signal-robot.entry.signalIsUptrend":"Is Uptrend","signal-robot.entry.signalIsDowntrend":"Is Downtrend","signal-robot.entry.period":"Period","signal-robot.entry.compareCondition":"Compare Condition","signal-robot.entry.priceAbove":"Price > EMA (Price Above)","signal-robot.entry.priceBelow":"Price < EMA (Price Below)","signal-robot.entry.crossUp":"Price Crosses Above EMA (Golden Cross)","signal-robot.entry.crossDown":"Price Crosses Below EMA (Death Cross)","signal-robot.entry.compare":"Compare","signal-robot.entry.greaterThan":"Greater Than","signal-robot.entry.lessThan":"Less Than","signal-robot.entry.crossUpShort":"Cross Up","signal-robot.entry.crossDownShort":"Cross Down","signal-robot.entry.threshold":"Threshold","signal-robot.entry.selectIndicator":"Please select an indicator to configure parameters","signal-robot.entry.addCondition":"Add Condition","signal-robot.position.alert":"Configure initial position size, leverage and pyramiding rules","signal-robot.position.basicTitle":"Basic Position Management","signal-robot.position.initialSize":"Initial Size (Capital %)","signal-robot.position.initialSizeHint":"Recommended 5% - 20%","signal-robot.position.leverage":"Leverage","signal-robot.position.leverageHint":"Please ensure your exchange account supports this leverage","signal-robot.position.maxPyramiding":"Max Pyramiding Times","signal-robot.position.maxPyramidingHint":"0 means no pyramiding","signal-robot.position.pyramidingTitle":"Pyramiding Rules","signal-robot.position.pyramidingEnabled":"Enabled","signal-robot.position.pyramidingDisabled":"Disabled","signal-robot.position.pyramidingCondition":"Pyramiding Trigger Condition","signal-robot.position.priceRisePct":"Price Rises (Long) / Falls (Short)","signal-robot.position.profitPct":"Profit Reaches","signal-robot.position.triggerThreshold":"Trigger Threshold (%)","signal-robot.position.triggerThresholdHint":"e.g. 3%: add position once every 3% rise","signal-robot.position.addSize":"Single Add Size (Capital %)","signal-robot.position.pyramidingDisabledHint":"Pyramiding disabled, only initial position will be executed","signal-robot.risk.alert":"Configure take profit, stop loss and exit rules","signal-robot.risk.stopLossTitle":"Stop Loss","signal-robot.risk.stopLossEnabled":"Enabled","signal-robot.risk.stopLossDisabled":"Disabled","signal-robot.risk.stopLossType":"Stop Loss Type","signal-robot.risk.stopLossFixedPct":"Fixed Percentage","signal-robot.risk.stopLossAtrMultiplier":"ATR Multiplier","signal-robot.risk.stopLossValue":"Value","signal-robot.risk.stopLossFixedHint":"e.g. 2%: stop loss when loss reaches 2%","signal-robot.risk.stopLossAtrHint":"e.g. 2.0: stop loss when price touches ATR*2.0","signal-robot.risk.stopLossDisabledHint":"Stop loss disabled (high risk)","signal-robot.risk.trailingStopTitle":"Trailing Stop","signal-robot.risk.activationProfit":"Activation Profit (%)","signal-robot.risk.activationProfitHint":"Start trailing when profit reaches this level","signal-robot.risk.callbackPct":"Callback (%)","signal-robot.risk.callbackPctHint":"Trigger take profit when price falls from peak by this percentage","signal-robot.risk.trailingStopDisabledHint":"Trailing stop disabled","signal-robot.risk.otherExitTitle":"Other Exit Rules","signal-robot.risk.signalExit":"Allow Signal Exit","signal-robot.risk.signalExitHint":"Close position immediately when reverse signal appears (e.g. close long when short signal appears)","signal-robot.notify.alert":"Configure notification methods when signal is triggered","signal-robot.notify.channelTitle":"Notification Channels","signal-robot.notify.discordWebhook":"Discord Webhook","signal-robot.notify.genericWebhook":"Generic Webhook","signal-robot.notify.webhookUrl":"Webhook URL","signal-robot.notify.webhookUrlPlaceholder":"https://example.com/webhook","signal-robot.notify.discordUrl":"Discord URL","signal-robot.notify.discordUrlPlaceholder":"https://discord.com/api/webhooks/...","signal-robot.operator.greaterThan":"Greater Than","signal-robot.operator.lessThan":"Less Than","signal-robot.operator.equal":"Equal","signal-robot.operator.goldenCross":"Golden Cross","signal-robot.operator.deathCross":"Death Cross","signal-robot.operator.increaseBy":"Increase By","signal-robot.operator.decreaseBy":"Decrease By","signal-robot.indicator.price":"Price","signal-robot.indicator.rsi":"RSI","signal-robot.indicator.kdjK":"KDJ(K)","signal-robot.indicator.kdjJ":"KDJ(J)","signal-robot.indicator.macd":"MACD","signal-robot.indicator.macdHist":"MACD Histogram","signal-robot.indicator.bollingerUp":"Bollinger Upper","signal-robot.indicator.bollingerLow":"Bollinger Lower","signal-robot.indicator.volume":"Volume","signal-robot.indicator.changePct1h":"1H Change %","signal-robot.indicator.changePct24h":"24H Change %","signal-robot.indicator.signalLine":"Signal Line","settings.group.agent_memory":"Gedächtnis/Reflexion","settings.group.reflection_worker":"Automatischer Reflexions-Prüf-Worker","settings.field.ENABLE_AGENT_MEMORY":"Agenten-Gedächtnis aktivieren","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"Vektorsuche aktivieren (lokal)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"Embedding-Dimension","settings.field.AGENT_MEMORY_TOP_K":"Top-K Abrufanzahl","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"Kandidatenfenstergröße","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"Halbwertszeit der Zeitabnahme (Tage)","settings.field.AGENT_MEMORY_W_SIM":"Ähnlichkeitsgewicht","settings.field.AGENT_MEMORY_W_RECENCY":"Aktualitätsgewicht","settings.field.AGENT_MEMORY_W_RETURNS":"Renditegewicht","settings.field.ENABLE_REFLECTION_WORKER":"Automatische Verifikation aktivieren","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"Verifikationsintervall (Sek.)","profile.notifications.title":"Benachrichtigungseinstellungen","profile.notifications.hint":"Konfigurieren Sie Ihre Standard-Benachrichtigungsmethoden, die automatisch beim Erstellen von Asset-Monitoren und Alarmen verwendet werden","profile.notifications.defaultChannels":"Standard-Benachrichtigungskanäle","profile.notifications.browser":"In-App-Benachrichtigung","profile.notifications.email":"E-Mail","profile.notifications.phone":"SMS","profile.notifications.telegramBotToken":"Telegram Bot Token","profile.notifications.telegramBotTokenPlaceholder":"Geben Sie Ihren Telegram Bot Token ein","profile.notifications.telegramBotTokenHint":"Erstellen Sie einen Bot über @BotFather um den Token zu erhalten","profile.notifications.telegramChatId":"Telegram Chat ID","profile.notifications.telegramPlaceholder":"Geben Sie Ihre Telegram Chat ID ein (z.B. 123456789)","profile.notifications.telegramHint":"Senden Sie /start an @userinfobot um Ihre Chat ID zu erhalten","profile.notifications.notifyEmail":"Benachrichtigungs-E-Mail","profile.notifications.emailPlaceholder":"E-Mail-Adresse für Benachrichtigungen","profile.notifications.emailHint":"Verwendet standardmäßig die Konto-E-Mail, Sie können eine andere festlegen","profile.notifications.phonePlaceholder":"Telefonnummer eingeben (z.B. +49151234567)","profile.notifications.phoneHint":"Administrator muss Twilio-Dienst konfigurieren","profile.notifications.discordWebhook":"Discord Webhook","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"Erstellen Sie einen Webhook in den Discord-Servereinstellungen","profile.notifications.webhookUrl":"Webhook URL","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"Benutzerdefinierte Webhook-URL, Benachrichtigungen per POST JSON","profile.notifications.webhookToken":"Webhook Token (Optional)","profile.notifications.webhookTokenPlaceholder":"Bearer Token zur Anfrage-Authentifizierung","profile.notifications.webhookTokenHint":"Wird als Authorization: Bearer Token an Webhook gesendet","profile.notifications.testBtn":"Testbenachrichtigung senden","profile.notifications.saveSuccess":"Benachrichtigungseinstellungen gespeichert","profile.notifications.selectChannel":"Bitte wählen Sie mindestens einen Benachrichtigungskanal","profile.notifications.fillTelegramToken":"Bitte Telegram Bot Token eingeben","profile.notifications.fillTelegram":"Bitte Telegram Chat ID eingeben","profile.notifications.fillEmail":"Bitte Benachrichtigungs-E-Mail eingeben","profile.notifications.testSent":"Testbenachrichtigung gesendet, bitte Benachrichtigungskanäle überprüfen"},y=(0,i.A)((0,i.A)({},f),p)}}]); \ No newline at end of file +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[879],{73065:function(e,a,t){t.d(a,{default:function(){return y}});var i=t(76338),n={items_per_page:"/ Seite",jump_to:"Gehe zu",jump_to_confirm:"bestätigen",page:"",prev_page:"Vorherige Seite",next_page:"Nächste Seite",prev_5:"5 Seiten zurück",next_5:"5 Seiten vor",prev_3:"3 Seiten zurück",next_3:"3 Seiten vor"},s=t(85505),r={today:"Heute",now:"Jetzt",backToToday:"Zurück zu Heute",ok:"OK",clear:"Zurücksetzen",month:"Monat",year:"Jahr",timeSelect:"Zeit wählen",dateSelect:"Datum wählen",monthSelect:"Wähle einen Monat",yearSelect:"Wähle ein Jahr",decadeSelect:"Wähle ein Jahrzehnt",yearFormat:"YYYY",dateFormat:"D.M.YYYY",dayFormat:"D",dateTimeFormat:"D.M.YYYY HH:mm:ss",monthBeforeYear:!0,previousMonth:"Vorheriger Monat (PageUp)",nextMonth:"Nächster Monat (PageDown)",previousYear:"Vorheriges Jahr (Ctrl + left)",nextYear:"Nächstes Jahr (Ctrl + right)",previousDecade:"Vorheriges Jahrzehnt",nextDecade:"Nächstes Jahrzehnt",previousCentury:"Vorheriges Jahrhundert",nextCentury:"Nächstes Jahrhundert"},o={placeholder:"Zeit auswählen"},d=o,l={lang:(0,s.A)({placeholder:"Datum auswählen",rangePlaceholder:["Startdatum","Enddatum"]},r),timePickerLocale:(0,s.A)({},d)},c=l,g=c,u={locale:"de",Pagination:n,DatePicker:c,TimePicker:d,Calendar:g,Table:{filterTitle:"Filter-Menü",filterConfirm:"OK",filterReset:"Zurücksetzen",selectAll:"Selektiere Alle",selectInvert:"Selektion Invertieren"},Modal:{okText:"OK",cancelText:"Abbrechen",justOkText:"OK"},Popconfirm:{okText:"OK",cancelText:"Abbrechen"},Transfer:{searchPlaceholder:"Suchen",itemUnit:"Eintrag",itemsUnit:"Einträge"},Upload:{uploading:"Hochladen...",removeFile:"Datei entfernen",uploadError:"Fehler beim Hochladen",previewFile:"Dateivorschau",downloadFile:"Download-Datei"},Empty:{description:"Keine Daten"}},h=u,b=t(77853),m=t.n(b),f={antLocale:h,momentName:"de",momentLocale:m()},p={submit:"Senden",save:"speichern","submit.ok":"Übermittlung erfolgreich","save.ok":"Erfolgreich gespeichert","menu.welcome":"Willkommen","menu.home":"Startseite","menu.dashboard":"Armaturenbrett","menu.dashboard.indicator":"Indikatorenanalyse","menu.dashboard.community":"Indikatorgemeinschaft","menu.dashboard.analysis":"KI-Analyse","menu.dashboard.tradingAssistant":"Handelsassistent","menu.dashboard.aiTradingAssistant":"KI-Handelsassistent","menu.dashboard.signalRobot":"Signal-Roboter","menu.dashboard.monitor":"Überwachungsseite","menu.dashboard.workplace":"Werkbank","menu.form":"Formularseite","menu.form.basic-form":"Grundform","menu.form.step-form":"Schritt-für-Schritt-Formular","menu.form.step-form.info":"Schritt-für-Schritt-Formular (Übertragungsinformationen ausfüllen)","menu.form.step-form.confirm":"Schritt-für-Schritt-Formular (Übertragungsinformationen bestätigen)","menu.form.step-form.result":"Schritt-für-Schritt-Formular (vollständig)","menu.form.advanced-form":"Erweiterte Formulare","menu.list":"Listenseite","menu.list.table-list":"Anfrageformular","menu.list.basic-list":"Standardliste","menu.list.card-list":"Kartenliste","menu.list.search-list":"Suchliste","menu.list.search-list.articles":"Suchliste (Artikel)","menu.list.search-list.projects":"Suchliste (Projekt)","menu.list.search-list.applications":"Suchliste (App)","menu.profile":"Detailseite","menu.profile.basic":"Grundlegende Detailseite","menu.profile.advanced":"Erweiterte Detailseite","menu.result":"Ergebnisseite","menu.result.success":"Erfolgsseite","menu.result.fail":"Fehlerseite","menu.exception":"Ausnahmeseite","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"Fehler auslösen","menu.account":"Persönliche Seite","menu.account.center":"Persönliches Zentrum","menu.account.settings":"persönliche Einstellungen","menu.account.trigger":"Triggerfehler","menu.account.logout":"Abmelden","menu.wallet":"meine Brieftasche","menu.docs":"Dokumentenzentrum","menu.docs.detail":"Dokumentdetails","menu.header.refreshPage":"Seite aktualisieren","menu.invite.friends":"Freunde einladen","app.setting.pagestyle":"allgemeine Stileinstellungen","app.setting.pagestyle.light":"Heller Menüstil","app.setting.pagestyle.dark":"Dunkler Menüstil","app.setting.pagestyle.realdark":"Dunkelmodus","app.setting.themecolor":"Themenfarbe","app.setting.navigationmode":"Navigationsmodus","app.setting.sidemenu.nav":"Seitenleistennavigation","app.setting.topmenu.nav":"Navigation in der oberen Leiste","app.setting.content-width":"Breite des Inhaltsbereichs","app.setting.content-width.tooltip":"Diese Einstellung ist nur wirksam, wenn [Navigation in der oberen Leiste]","app.setting.content-width.fixed":"Behoben","app.setting.content-width.fluid":"Streaming","app.setting.fixedheader":"Fester Header","app.setting.fixedheader.tooltip":"Bei festem Header konfigurierbar","app.setting.autoHideHeader":"Kopfzeile beim Scrollen ausblenden","app.setting.fixedsidebar":"Seitenmenü korrigiert","app.setting.sidemenu":"Seitenmenü-Layout","app.setting.topmenu":"Oberes Menülayout","app.setting.othersettings":"Andere Einstellungen","app.setting.weakmode":"Farbschwächemodus","app.setting.multitab":"Multi-Tab-Modus","app.setting.copy":"Einstellungen kopieren","app.setting.loading":"Thema wird geladen","app.setting.copyinfo":"Einstellungen erfolgreich kopieren src/config/defaultSettings.js","app.setting.copy.success":"Kopieren abgeschlossen","app.setting.copy.fail":"Der Kopiervorgang ist fehlgeschlagen","app.setting.theme.switching":"Wechselndes Thema!","app.setting.production.hint":"Die Konfigurationsleiste dient nur der Vorschau in der Entwicklungsumgebung und wird in der Produktionsumgebung nicht angezeigt. Bitte kopieren und ändern Sie die Konfigurationsdatei manuell.","app.setting.themecolor.daybreak":"Morgenblau (Standard)","app.setting.themecolor.dust":"Dämmerung","app.setting.themecolor.volcano":"Vulkan","app.setting.themecolor.sunset":"Sonnenuntergang","app.setting.themecolor.cyan":"Mingqing","app.setting.themecolor.green":"Auroragrün","app.setting.themecolor.geekblue":"Geek blau","app.setting.themecolor.purple":"Jiang Zi","app.setting.tooltip":"Seiteneinstellungen","user.login.userName":"Benutzername","user.login.password":"Passwort","user.login.username.placeholder":"Konto: Admin","user.login.password.placeholder":"Passwort: admin oder ant.design","user.login.message-invalid-credentials":"Die Anmeldung ist fehlgeschlagen. Bitte überprüfen Sie Ihre E-Mail-Adresse und Ihren Bestätigungscode","user.login.message-invalid-verification-code":"Fehler beim Bestätigungscode","user.login.tab-login-credentials":"Anmeldung mit Kontopasswort","user.login.tab-login-email":"E-Mail-Login","user.login.tab-login-mobile":"Anmeldung über die Mobiltelefonnummer","user.login.captcha.placeholder":"Bitte geben Sie den grafischen Bestätigungscode ein","user.login.mobile.placeholder":"Mobiltelefonnummer","user.login.mobile.verification-code.placeholder":"Bestätigungscode","user.login.email.placeholder":"Bitte geben Sie Ihre E-Mail-Adresse ein","user.login.email.verification-code.placeholder":"Bitte geben Sie den Bestätigungscode ein","user.login.email.sending":"Bestätigungscode wird gesendet...","user.login.email.send-success-title":"Tipps","user.login.email.send-success":"Der Bestätigungscode wurde erfolgreich gesendet. Bitte überprüfen Sie Ihre E-Mails","user.login.sms.send-success":"Der Bestätigungscode wurde erfolgreich gesendet. Bitte überprüfen Sie die Textnachricht","user.login.remember-me":"Automatische Anmeldung","user.login.forgot-password":"Passwort vergessen","user.login.sign-in-with":"Andere Anmeldemethoden","user.login.signup":"Registrieren Sie ein Konto","user.login.login":"Anmelden","user.register.register":"Registrieren","user.register.email.placeholder":"E-Mail","user.register.password.placeholder":"Bitte geben Sie mindestens 6 Zeichen ein. Bitte verwenden Sie keine Passwörter, die leicht zu erraten sind.","user.register.password.popover-message":"Bitte geben Sie mindestens 6 Zeichen ein. Bitte verwenden Sie keine Passwörter, die leicht zu erraten sind.","user.register.confirm-password.placeholder":"Passwort bestätigen","user.register.get-verification-code":"Holen Sie sich den Bestätigungscode","user.register.sign-in":"Melden Sie sich mit einem bestehenden Konto an","user.register-result.msg":"Ihr Konto: {email} Registrierung erfolgreich","user.register-result.activation-email":"Die Aktivierungs-E-Mail wurde an Ihr Postfach gesendet und ist 24 Stunden lang gültig. Bitte melden Sie sich umgehend bei Ihrem E-Mail-Konto an und klicken Sie auf den Link in der E-Mail, um Ihr Konto zu aktivieren.","user.register-result.back-home":"Zurück zur Startseite","user.register-result.view-mailbox":"Überprüfen Sie Ihr Postfach","user.email.required":"Bitte geben Sie Ihre E-Mail-Adresse ein!","user.email.wrong-format":"Das E-Mail-Adressformat ist falsch!","user.userName.required":"Bitte geben Sie Ihren Kontonamen oder Ihre E-Mail-Adresse ein","user.password.required":"Bitte geben Sie Ihr Passwort ein!","user.password.twice.msg":"Die doppelt eingegebenen Passwörter stimmen nicht überein!","user.password.strength.msg":"Das Passwort ist nicht sicher genug","user.password.strength.strong":"Stärke: Stark","user.password.strength.medium":"Stärke: Mittel","user.password.strength.low":"Stärke: gering","user.password.strength.short":"Stärke: zu kurz","user.confirm-password.required":"Bitte bestätigen Sie Ihr Passwort!","user.phone-number.required":"Bitte geben Sie die korrekte Mobiltelefonnummer ein","user.phone-number.wrong-format":"Das Format der Mobiltelefonnummer ist falsch!","user.verification-code.required":"Bitte geben Sie den Verifizierungscode ein!","user.captcha.required":"Bitte geben Sie den grafischen Verifizierungscode ein!","user.login.infos":"QuantDinger ist ein AI-Multi-Agent-Hilfstool für die Aktienanalyse und verfügt nicht über Qualifikationen als Wertpapieranlageberater. Alle Analyseergebnisse, Scores und Referenzmeinungen in der Plattform werden von KI automatisch auf Basis historischer Daten generiert und dienen ausschließlich der Ausbildung, Forschung und dem technischen Austausch und stellen keine Anlageberatung oder Entscheidungsgrundlage dar. Aktienanlagen bergen verschiedene Risiken wie Marktrisiko, Liquiditätsrisiko, politisches Risiko usw., die zu einem Kapitalverlust führen können. Benutzer sollten unabhängige Entscheidungen auf der Grundlage ihrer eigenen Risikotoleranz treffen, und jegliches Investitionsverhalten und alle Konsequenzen, die sich aus der Verwendung dieses Tools ergeben, sind vom Benutzer zu tragen. Der Markt ist riskant und Investitionen müssen vorsichtig sein.","user.login.tab-login-web3":"Web3-Anmeldung","user.login.web3.tip":"Signatur-Login mit Wallet","user.login.web3.connect":"Wallet verbinden und anmelden","user.login.web3.no-wallet":"Wallet nicht erkannt","user.login.web3.no-address":"Wallet-Adresse nicht erhalten","user.login.web3.nonce-failed":"Zufallszahl konnte nicht abgerufen werden","user.login.web3.verify-failed":"Die Signaturüberprüfung ist fehlgeschlagen","user.login.web3.success":"Anmeldung erfolgreich","user.login.web3.failed":"Die Wallet-Anmeldung ist fehlgeschlagen","nav.no_wallet":"Wallet nicht erkannt","nav.copy":"Kopieren","nav.copy_success":"Erfolgreich kopiert","user.login.oauth.google":"Melden Sie sich mit Google an","user.login.oauth.github":"Melden Sie sich mit GitHub an","user.login.oauth.loading":"Weiterleitung zur Autorisierungsseite...","user.login.oauth.failed":"Die OAuth-Anmeldung ist fehlgeschlagen","user.login.oauth.get-url-failed":"Der Autorisierungslink konnte nicht abgerufen werden","user.login.subtitle":"Gezielte quantitative Einblicke in globale Märkte","user.login.legal.title":"Haftungsausschluss","user.login.legal.view":"Rechtlichen Haftungsausschluss anzeigen","user.login.legal.collapse":"Haftungsausschluss einklappen","user.login.legal.agree":"Ich habe den Haftungsausschluss gelesen und stimme ihm zu","user.login.legal.required":"Bitte lesen und überprüfen Sie zunächst den rechtlichen Haftungsausschluss","user.login.legal.content":"QuantDinger ist ein AI-Multi-Agent-Hilfstool für die Aktienanalyse und verfügt nicht über Qualifikationen als Wertpapieranlageberater. Alle Analyseergebnisse, Bewertungen und Referenzmeinungen in der Plattform werden von KI automatisch auf Basis historischer Daten generiert und dienen ausschließlich der Ausbildung, Forschung und dem technischen Austausch und stellen keine Anlageberatung oder Entscheidungsgrundlage dar. Aktienanlagen bergen verschiedene Risiken wie Marktrisiko, Liquiditätsrisiko, politisches Risiko usw., die zu einem Kapitalverlust führen können. Benutzer sollten unabhängige Entscheidungen auf der Grundlage ihrer eigenen Risikotoleranz treffen, und jegliches Investitionsverhalten und alle Konsequenzen, die sich aus der Verwendung dieses Tools ergeben, sind vom Benutzer zu tragen. Der Markt ist riskant und Investitionen müssen vorsichtig sein.","user.login.privacy.title":"Datenschutzrichtlinie für Benutzer","user.login.privacy.view":"Datenschutzrichtlinie für Benutzer anzeigen","user.login.privacy.collapse":"Schließen Sie die Datenschutzbestimmungen für Benutzer","user.login.privacy.content":"Wir legen Wert auf Ihre Privatsphäre und Ihren Datenschutz. 1) Erfassungsumfang: Es werden nur die zur Umsetzung der Funktion erforderlichen Informationen (z. B. E-Mail, Mobiltelefonnummer, Vorwahl, Web3-Wallet-Adresse) sowie notwendige Protokolle und Geräteinformationen erfasst. 2) Verwendungszweck: Zur Kontoanmeldung und Sicherheitsüberprüfung, Bereitstellung von Servicefunktionen, Fehlerbehebung und Compliance-Anforderungen. 3) Speicherung und Sicherheit: Daten werden verschlüsselt und gespeichert, und es werden die erforderlichen Berechtigungen und Zugriffskontrollmaßnahmen ergriffen, um unbefugten Zugriff, Offenlegung oder Verlust zu verhindern. 4) Weitergabe an Dritte: Sofern dies nicht durch Gesetze und Vorschriften vorgeschrieben oder für die Erbringung von Dienstleistungen erforderlich ist, werden Ihre personenbezogenen Daten nicht an Dritte weitergegeben. Bei Einbindung von Diensten Dritter (z. B. Wallets, SMS-Dienstleister) erfolgt die Verarbeitung nur im für die Umsetzung der Funktion erforderlichen Mindestumfang. 5) Cookies/lokale Speicherung: werden für den Anmeldestatus und die notwendige Sitzungswartung verwendet (z. B. Token, PHPSESSID). Sie können sie im Browser löschen oder einschränken. 6) Persönlichkeitsrechte: Sie können Ihre Rechte auf Auskunft, Berichtigung, Löschung, Widerruf der Einwilligung usw. gemäß den Gesetzen und Vorschriften ausüben. 7) Änderungen und Hinweise: Wenn diese Bedingungen aktualisiert werden, werden sie gut sichtbar auf der Seite angezeigt. Durch die weitere Nutzung dieses Dienstes wird davon ausgegangen, dass Sie den aktualisierten Inhalt gelesen und ihm zugestimmt haben. Wenn Sie diesen Bedingungen oder deren Aktualisierungen nicht zustimmen, stellen Sie bitte die Nutzung des Dienstes ein und kontaktieren Sie uns.","account.basicInfo":"Grundlegende Informationen","account.id":"Benutzer-ID","account.username":"Benutzername","account.nickname":"Spitzname","account.email":"E-Mail","account.mobile":"Mobiltelefonnummer","account.web3address":"Wallet-Adresse","account.pid":"Referrer-ID","account.level":"Benutzerebene","account.money":"Gleichgewicht","account.qdtBalance":"QDT-Balance","account.score":"Punkte","account.createtime":"Anmeldezeit","account.inviteLink":"Einladungslink","account.recharge":"Aufladen","account.rechargeTip":"Bitte verwenden Sie WeChat oder Alipay, um den untenstehenden QR-Code zum Aufladen zu scannen.","account.qrCodePlaceholder":"QR-Code-Platzhalter (Emulation)","account.rechargeAmount":"Aufladebetrag","account.enterAmount":"Bitte geben Sie den Aufladebetrag ein","account.rechargeHint":"Mindesteinzahlungsbetrag: 1 QDT","account.confirmRecharge":"Bestätigen Sie das Aufladen","account.enterValidAmount":"Bitte geben Sie einen gültigen Aufladebetrag ein","account.rechargeSuccess":"Aufladen erfolgreich! {amount} QDT eingezahlt","account.settings.menuMap.basic":"Grundeinstellungen","account.settings.menuMap.security":"Sicherheitseinstellungen","account.settings.menuMap.notification":"Benachrichtigung über neue Nachrichten","account.settings.menuMap.moneyLog":"Details zum Fonds","account.moneyLog.empty":"Noch keine Fondsdetails","account.moneyLog.total":"Insgesamt {total} Datensätze","account.moneyLog.type.purchase":"Kaufindikator","account.moneyLog.type.recharge":"Aufladen","account.moneyLog.type.refund":"Rückerstattung","account.moneyLog.type.reward":"Belohnung","account.moneyLog.type.income":"Indikatoreinkommen","account.moneyLog.type.commission":"Bearbeitungsgebühr für die Plattform","wallet.balance":"QDT-Balance","wallet.recharge":"Aufladen","wallet.withdraw":"Bargeld abheben","wallet.filter":"Filtern","wallet.reset":"zurückgesetzt","wallet.totalRecharge":"Akkumulierte Aufladung","wallet.totalWithdraw":"Kumulierte Abhebungen","wallet.totalIncome":"Kumuliertes Einkommen","wallet.records":"Transaktionsaufzeichnungen und Fondsdetails","wallet.tradingRecords":"Transaktionsverlauf","wallet.moneyLog":"Details zum Fonds","wallet.rechargeTip":"Bitte verwenden Sie WeChat oder Alipay, um den untenstehenden QR-Code zum Aufladen zu scannen.","wallet.qrCodePlaceholder":"QR-Code-Platzhalter (Emulation)","wallet.rechargeAmount":"Aufladebetrag","wallet.enterAmount":"Bitte geben Sie den Aufladebetrag ein","wallet.rechargeHint":"Mindesteinzahlungsbetrag: 1 QDT","wallet.confirmRecharge":"Bestätigen Sie das Aufladen","wallet.enterValidAmount":"Bitte geben Sie einen gültigen Aufladebetrag ein","wallet.rechargeSuccess":"Aufladen erfolgreich! {amount} QDT eingezahlt","wallet.rechargeFailed":"Das Aufladen ist fehlgeschlagen","wallet.withdrawTip":"Bitte geben Sie den Auszahlungsbetrag und die Auszahlungsadresse ein","wallet.withdrawAmount":"Betrag abheben","wallet.enterWithdrawAmount":"Bitte geben Sie den Auszahlungsbetrag ein","wallet.withdrawHint":"Mindestauszahlungsbetrag: 1 QDT","wallet.withdrawAddress":"Auszahlungsadresse (optional)","wallet.enterWithdrawAddress":"Bitte geben Sie die Auszahlungsadresse ein","wallet.confirmWithdraw":"Auszahlung bestätigen","wallet.enterValidWithdrawAmount":"Bitte geben Sie einen gültigen Auszahlungsbetrag ein","wallet.insufficientBalance":"Unzureichendes Gleichgewicht","wallet.withdrawSuccess":"Auszahlung erfolgreich! {Betrag} QDT abgehoben","wallet.withdrawFailed":"Die Auszahlung ist fehlgeschlagen","wallet.noTradingRecords":"Noch kein Transaktionsdatensatz","wallet.noMoneyLog":"Noch keine Fondsdetails","wallet.loadTradingRecordsFailed":"Transaktionsdatensätze konnten nicht geladen werden","wallet.loadMoneyLogFailed":"Die Fondsdetails konnten nicht geladen werden","wallet.moneyLogTotal":"Insgesamt {total} Datensätze","wallet.moneyLogTypeTitle":"Typ","wallet.moneyLogType.all":"Alle Arten","wallet.table.time":"Zeit","wallet.table.type":"Typ","wallet.table.price":"Preis","wallet.table.amount":"Menge","wallet.table.money":"Betrag","wallet.table.balance":"Gleichgewicht","wallet.table.memo":"Bemerkungen","wallet.table.value":"Wert","wallet.table.profit":"Gewinn und Verlust","wallet.table.commission":"Bearbeitungsgebühr","wallet.table.total":"Insgesamt {total} Datensätze","wallet.tradeType.buy":"kaufen","wallet.tradeType.sell":"verkaufen","wallet.tradeType.liquidation":"Zwangsliquidation","wallet.tradeType.openLong":"Lange geöffnet","wallet.tradeType.addLong":"Gadot","wallet.tradeType.closeLong":"Pinduo","wallet.tradeType.closeLongStop":"Stop-Loss und Long","wallet.tradeType.closeLongProfit":"Nehmen Sie Gewinn mit und steigern Sie Ihr Level","wallet.tradeType.openShort":"Kurz öffnen","wallet.tradeType.addShort":"kurz hinzufügen","wallet.tradeType.closeShort":"leer","wallet.tradeType.closeShortStop":"Stop-Loss","wallet.tradeType.closeShortProfit":"Nehmen Sie den Gewinn mit und schließen Sie mit Leerverkäufen","wallet.moneyLogType.purchase":"Kaufindikator","wallet.moneyLogType.recharge":"Aufladen","wallet.moneyLogType.withdraw":"Bargeld abheben","wallet.moneyLogType.refund":"Rückerstattung","wallet.moneyLogType.reward":"Belohnung","wallet.moneyLogType.income":"Einkommen","wallet.moneyLogType.commission":"Bearbeitungsgebühr","wallet.web3Address.required":"Bitte geben Sie zuerst die Web3-Wallet-Adresse ein","wallet.web3Address.requiredDescription":"Vor dem Aufladen müssen Sie Ihre Web3-Wallet-Adresse verknüpfen, um eine Aufladung zu erhalten.","wallet.web3Address.placeholder":"Bitte geben Sie Ihre Web3-Wallet-Adresse ein (beginnend mit 0x)","wallet.web3Address.save":"Wallet-Adresse speichern","wallet.web3Address.saveSuccess":"Wallet-Adresse erfolgreich gespeichert","wallet.web3Address.saveFailed":"Wallet-Adresse konnte nicht gespeichert werden","wallet.web3Address.invalidFormat":"Bitte geben Sie eine gültige Web3-Wallet-Adresse ein (Ethereum-Format: 42 Zeichen, beginnend mit 0x, oder TRC20-Format: 34 Zeichen, beginnend mit T)","wallet.selectCoin":"Währung auswählen","wallet.selectChain":"Auswahlkette","wallet.chain.eth":"ETH(ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"BSC","wallet.targetQdtAmount":"Der QDT-Betrag, den Sie einlösen möchten (optional)","wallet.targetQdtAmount.placeholder":"Bitte geben Sie die Menge an QDT ein, die Sie einlösen möchten, den aktuellen QDT-Preis: {price} USDT","wallet.targetQdtAmount.requiredUsdt":"Aufladung erforderlich: {amount} USDT","wallet.rechargeAddress":"Aufladeadresse","wallet.copyAddress":"Kopieren","wallet.copySuccess":"Erfolgreich kopieren!","wallet.copyFailed":"Der Kopiervorgang ist fehlgeschlagen. Bitte manuell kopieren","wallet.rechargeAddressHint":"Bitte stellen Sie sicher, dass Sie {chain} verwenden, um {coin} an diese Adresse einzuzahlen","wallet.qdtPrice.loading":"Laden...","wallet.rechargeTip.new":"Bitte wählen Sie die Währung und die Kette aus und scannen Sie dann den untenstehenden QR-Code zum Aufladen","wallet.exchangeRate":"1 QDT ≈ {rate} USDT","wallet.withdrawableAmount":"Verfügbarer Bargeldbetrag","wallet.totalBalance":"Gesamtsaldo","wallet.insufficientWithdrawable":"Der Bargeldbetrag, der abgehoben werden kann, reicht nicht aus. Der aktuelle Betrag, der abgehoben werden kann, ist: {amount} QDT","wallet.withdrawAddressRequired":"Bitte geben Sie die Auszahlungsadresse ein","wallet.withdrawAddressHint":"Bitte stellen Sie sicher, dass die Adresse korrekt ist. Nach dem Widerruf ist ein Widerruf nicht mehr möglich.","wallet.withdrawSubmitSuccess":"Auszahlungsantrag erfolgreich eingereicht, bitte warten Sie auf die Prüfung","menu.footer.contactUs":"Kontaktieren Sie uns","menu.footer.getSupport":"Holen Sie sich Unterstützung","menu.footer.socialAccounts":"soziales Konto","menu.footer.userAgreement":"Benutzervereinbarung","menu.footer.privacyPolicy":"Datenschutzrichtlinie","menu.footer.support":"Unterstützung","menu.footer.featureRequest":"Funktionsanfrage","menu.footer.email":"E-Mail","menu.footer.liveChat":"Live-Chat rund um die Uhr","dashboard.analysis.title":"Mehrdimensionale Analyse","dashboard.analysis.subtitle":"KI-gesteuerte umfassende Finanzanalyseplattform","dashboard.analysis.selectSymbol":"Wählen Sie den zugrunde liegenden Code aus oder geben Sie ihn ein","dashboard.analysis.selectModel":"Modell auswählen","dashboard.analysis.startAnalysis":"Analyse starten","dashboard.analysis.history":"Geschichte","dashboard.analysis.tab.overview":"umfassende Analyse","dashboard.analysis.tab.fundamental":"Grundlagen","dashboard.analysis.tab.technical":"Technologie","dashboard.analysis.tab.news":"Nachrichten","dashboard.analysis.tab.sentiment":"Emotionen","dashboard.analysis.tab.risk":"Risiko","dashboard.analysis.tab.debate":"Die Lang-Kurz-Debatte","dashboard.analysis.tab.decision":"endgültige Entscheidung","dashboard.analysis.empty.selectSymbol":"Wählen Sie ein Ziel aus, um die Analyse zu starten","dashboard.analysis.empty.selectSymbolDesc":"Wählen Sie aus der selbstgewählten Aktienliste aus oder geben Sie den zugrunde liegenden Code ein, um einen mehrdimensionalen KI-Analysebericht zu erhalten","dashboard.analysis.empty.startAnalysis":"Klicken Sie auf die Schaltfläche „Analyse starten“, um eine mehrdimensionale Analyse durchzuführen","dashboard.analysis.empty.startAnalysisDesc":"Wir bieten Ihnen umfassende Analysen aus mehreren Dimensionen wie Fundamentaldaten, Technologie, Nachrichten, Stimmung und Risiko","dashboard.analysis.empty.noData":"Derzeit liegen keine {type}-Analysedaten vor. Bitte führen Sie zunächst eine umfassende Analyse durch","dashboard.analysis.empty.noWatchlist":"Derzeit gibt es keine selbstgewählten Aktien","dashboard.analysis.empty.noHistory":"Noch keine Geschichte","dashboard.analysis.empty.watchlistHint":"Derzeit sind keine selbstgewählten Aktien vorhanden, bitte zuerst","dashboard.analysis.empty.noDebateData":"Noch keine Debattendaten","dashboard.analysis.empty.noDecisionData":"Noch keine Entscheidungsdaten","dashboard.analysis.empty.selectAgent":"Bitte wählen Sie einen Agenten aus, um die Analyseergebnisse anzuzeigen","dashboard.analysis.loading.analyzing":"Analyse läuft, bitte warten...","dashboard.analysis.loading.fundamental":"Fundamentaldaten analysieren...","dashboard.analysis.loading.technical":"Analyse technischer Indikatoren...","dashboard.analysis.loading.news":"Nachrichtendaten werden analysiert...","dashboard.analysis.loading.sentiment":"Marktstimmung analysieren...","dashboard.analysis.loading.risk":"Risiko einschätzen...","dashboard.analysis.loading.debate":"Die Lang-Kurz-Debatte geht weiter...","dashboard.analysis.loading.decision":"Endgültige Entscheidung generieren...","dashboard.analysis.score.overall":"Gesamtbewertung","dashboard.analysis.score.recommendation":"Anlageberatung","dashboard.analysis.score.confidence":"Vertrauen","dashboard.analysis.dimension.fundamental":"Grundlagen","dashboard.analysis.dimension.technical":"Technologie","dashboard.analysis.dimension.news":"Nachrichten","dashboard.analysis.dimension.sentiment":"Emotionen","dashboard.analysis.dimension.risk":"Risiko","dashboard.analysis.card.dimensionScores":"Bewertungen für jede Dimension","dashboard.analysis.card.overviewReport":"Umfassender Analysebericht","dashboard.analysis.card.financialMetrics":"Finanzindikatoren","dashboard.analysis.card.fundamentalReport":"Fundamentalanalysebericht","dashboard.analysis.card.technicalIndicators":"Technische Indikatoren","dashboard.analysis.card.technicalReport":"Technischer Analysebericht","dashboard.analysis.card.newsList":"Verwandte Neuigkeiten","dashboard.analysis.card.newsReport":"Bericht zur Nachrichtenanalyse","dashboard.analysis.card.sentimentIndicators":"Stimmungsindikator","dashboard.analysis.card.sentimentReport":"Stimmungsanalysebericht","dashboard.analysis.card.riskMetrics":"Risikoindikatoren","dashboard.analysis.card.riskReport":"Risikobewertungsbericht","dashboard.analysis.card.bullView":"Bullische Sichtweise (Bull)","dashboard.analysis.card.bearView":"Bärische Sichtweise (Bär)","dashboard.analysis.card.researchConclusion":"Fazit des Forschers","dashboard.analysis.card.traderPlan":"Händlerplan","dashboard.analysis.card.riskDebate":"Debatte im Risikoausschuss","dashboard.analysis.card.finalDecision":"Endgültige Entscheidung","dashboard.analysis.card.tradePlanDetail":"Einzelheiten zum Handelsplan","dashboard.analysis.tradingPlan.entry_price":"Eintrittspreis","dashboard.analysis.tradingPlan.position_size":"Positionsgröße","dashboard.analysis.tradingPlan.stop_loss":"Stop-Loss","dashboard.analysis.tradingPlan.take_profit":"Nehmen Sie Gewinn mit","dashboard.analysis.label.confidence":"Vertrauen","dashboard.analysis.label.keyPoints":"Kernpunkte","dashboard.analysis.label.riskWarning":"Risikowarnung","dashboard.analysis.risk.risky":"Riskant","dashboard.analysis.risk.neutral":"Neutraler Standpunkt (Neutral)","dashboard.analysis.risk.safe":"Konservative Sichtweise (sicher)","dashboard.analysis.risk.conclusion":"Fazit","dashboard.analysis.feature.fundamental":"Fundamentalanalyse","dashboard.analysis.feature.technical":"technische Analyse","dashboard.analysis.feature.news":"Nachrichtenanalyse","dashboard.analysis.feature.sentiment":"Stimmungsanalyse","dashboard.analysis.feature.risk":"Risikobewertung","dashboard.analysis.watchlist.title":"Meine Aktienauswahl","dashboard.analysis.watchlist.add":"hinzufügen","dashboard.analysis.watchlist.addStock":"Brühe hinzufügen","dashboard.analysis.modal.addStock.title":"Fügen Sie optionale Aktien hinzu","dashboard.analysis.modal.addStock.confirm":"Okay","dashboard.analysis.modal.addStock.cancel":"Abbrechen","dashboard.analysis.modal.addStock.market":"Markttyp","dashboard.analysis.modal.addStock.marketPlaceholder":"Bitte wählen Sie einen Markt aus","dashboard.analysis.modal.addStock.marketRequired":"Bitte wählen Sie den Markttyp aus","dashboard.analysis.modal.addStock.symbol":"Lagercode","dashboard.analysis.modal.addStock.symbolPlaceholder":"Zum Beispiel: AAPL, TSLA, GOOGL, 000001, BTC","dashboard.analysis.modal.addStock.symbolRequired":"Bitte Lagercode eingeben","dashboard.analysis.modal.addStock.searchPlaceholder":"Suchen Sie nach Zielcode oder Name","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"Suchen Sie den zugrunde liegenden Code oder geben Sie ihn ein (z. B. AAPL, BTC/USDT, EUR/USD).","dashboard.analysis.modal.addStock.searchOrInputHint":"Unterstützt die Suche nach Objekten in der Datenbank oder die direkte Eingabe des Codes (das System erhält den Namen automatisch).","dashboard.analysis.modal.addStock.search":"Suchen","dashboard.analysis.modal.addStock.searchResults":"Suchergebnisse","dashboard.analysis.modal.addStock.hotSymbols":"Beliebte Ziele","dashboard.analysis.modal.addStock.noHotSymbols":"Noch keine beliebten Ziele","dashboard.analysis.modal.addStock.selectedSymbol":"Ausgewählt","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"Bitte wählen Sie zunächst ein Ziel aus","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"Bitte wählen Sie ein Ziel aus oder geben Sie zuerst den Zielcode ein","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"Bitte geben Sie den Zielcode ein","dashboard.analysis.modal.addStock.pleaseSelectMarket":"Bitte wählen Sie zunächst den Markttyp aus","dashboard.analysis.modal.addStock.searchFailed":"Die Suche ist fehlgeschlagen. Bitte versuchen Sie es später erneut","dashboard.analysis.modal.addStock.noSearchResults":"Kein passendes Ziel gefunden","dashboard.analysis.modal.addStock.willAutoFetchName":"Das System erhält den Namen automatisch","dashboard.analysis.modal.addStock.addDirectly":"Direkt hinzufügen","dashboard.analysis.modal.addStock.nameWillBeFetched":"Der Name wird beim Hinzufügen automatisch übernommen","dashboard.analysis.market.USStock":"US-Aktien","dashboard.analysis.market.Crypto":"Kryptowährung","dashboard.analysis.market.Forex":"Forex","dashboard.analysis.market.Futures":"Futures","dashboard.analysis.modal.history.title":"Historische Analyseaufzeichnungen","dashboard.analysis.modal.history.viewResult":"Ergebnisse anzeigen","dashboard.analysis.modal.history.completeTime":"Fertigstellungszeit","dashboard.analysis.modal.history.error":"Fehler","dashboard.analysis.status.pending":"Ausstehend","dashboard.analysis.status.processing":"Verarbeitung","dashboard.analysis.status.completed":"Abgeschlossen","dashboard.analysis.status.failed":"gescheitert","dashboard.analysis.message.selectSymbol":"Bitte wählen Sie zuerst das Ziel aus","dashboard.analysis.message.taskCreated":"Die Analyseaufgabe wurde erstellt und wird im Hintergrund ausgeführt...","dashboard.analysis.message.analysisComplete":"Analyse abgeschlossen","dashboard.analysis.message.analysisCompleteCache":"Analyse abgeschlossen (unter Verwendung zwischengespeicherter Daten)","dashboard.analysis.message.analysisFailed":"Die Analyse ist fehlgeschlagen. Bitte versuchen Sie es später noch einmal","dashboard.analysis.message.addStockSuccess":"Erfolgreich hinzugefügt","dashboard.analysis.message.addStockFailed":"Das Hinzufügen ist fehlgeschlagen","dashboard.analysis.message.removeStockSuccess":"Erfolgreich entfernt","dashboard.analysis.message.removeStockFailed":"Das Entfernen ist fehlgeschlagen","dashboard.analysis.message.resumingAnalysis":"Analyseaufgabe wird fortgesetzt...","dashboard.analysis.message.deleteSuccess":"Erfolgreich gelöscht","dashboard.analysis.message.deleteFailed":"Löschen fehlgeschlagen","dashboard.analysis.modal.history.delete":"Löschen","dashboard.analysis.modal.history.deleteConfirm":"Möchten Sie diesen Analysedatensatz wirklich löschen?","dashboard.analysis.test":"Geschäft Nr. {no}, Gongzhuan Road","dashboard.analysis.introduce":"Beschreibung des Indikators","dashboard.analysis.total-sales":"Gesamtumsatz","dashboard.analysis.day-sales":"Durchschnittlicher Tagesumsatz¥","dashboard.analysis.visits":"Besuche","dashboard.analysis.visits-trend":"Verkehrstrends","dashboard.analysis.visits-ranking":"Ranking der Ladenbesuche","dashboard.analysis.day-visits":"Tägliche Besuche","dashboard.analysis.week":"Wöchentlich im Jahresvergleich","dashboard.analysis.day":"Jahr für Jahr","dashboard.analysis.payments":"Anzahl der Zahlungen","dashboard.analysis.conversion-rate":"Umrechnungskurs","dashboard.analysis.operational-effect":"Auswirkungen der betrieblichen Tätigkeit","dashboard.analysis.sales-trend":"Verkaufstrends","dashboard.analysis.sales-ranking":"Ranking der Filialverkäufe","dashboard.analysis.all-year":"Das ganze Jahr über","dashboard.analysis.all-month":"diesen Monat","dashboard.analysis.all-week":"diese Woche","dashboard.analysis.all-day":"heute","dashboard.analysis.search-users":"Anzahl der Suchbenutzer","dashboard.analysis.per-capita-search":"Suchanfragen pro Kopf","dashboard.analysis.online-top-search":"Beliebte Suchanfragen im Internet","dashboard.analysis.the-proportion-of-sales":"Anteil der Verkaufskategorie","dashboard.analysis.dropdown-option-one":"Operation eins","dashboard.analysis.dropdown-option-two":"Betrieb 2","dashboard.analysis.channel.all":"Alle Kanäle","dashboard.analysis.channel.online":"online","dashboard.analysis.channel.stores":"speichern","dashboard.analysis.sales":"Verkäufe","dashboard.analysis.traffic":"Passagierfluss","dashboard.analysis.table.rank":"Rangliste","dashboard.analysis.table.search-keyword":"Suchbegriffe suchen","dashboard.analysis.table.users":"Anzahl der Benutzer","dashboard.analysis.table.weekly-range":"Wöchentliche Erhöhung","dashboard.indicator.selectSymbol":"Wählen Sie den zugrunde liegenden Code aus oder geben Sie ihn ein","dashboard.indicator.emptyWatchlistHint":"Derzeit sind keine selbst ausgewählten Aktien vorhanden. Bitte fügen Sie diese zuerst hinzu","dashboard.indicator.hint.selectSymbol":"Bitte wählen Sie ein Ziel aus, um mit der Analyse zu beginnen","dashboard.indicator.hint.selectSymbolDesc":"Wählen Sie einen Aktiencode aus oder geben Sie ihn in das Suchfeld oben ein, um K-Line-Diagramme und technische Indikatoren anzuzeigen","dashboard.indicator.retry":"Versuchen Sie es erneut","dashboard.indicator.panel.title":"Technische Indikatoren","dashboard.indicator.panel.realtimeOn":"Deaktivieren Sie Echtzeit-Updates","dashboard.indicator.panel.realtimeOff":"Aktivieren Sie Echtzeit-Updates","dashboard.indicator.panel.themeLight":"Wechseln Sie zum dunklen Thema","dashboard.indicator.panel.themeDark":"Wechseln Sie zum Lichtthema","dashboard.indicator.section.enabled":"Aktiviert","dashboard.indicator.section.added":"Indikatoren, die ich hinzugefügt habe","dashboard.indicator.section.custom":"Von Ihnen selbst erstellte Indikatoren","dashboard.indicator.section.bought":"Indikatoren, die ich gekauft habe","dashboard.indicator.section.myCreated":"Von mir erstellte Indikatoren","dashboard.indicator.empty":"Es gibt noch keinen Indikator. Bitte fügen Sie zuerst einen Indikator hinzu oder erstellen Sie ihn","dashboard.indicator.buy":"Kaufindikator","dashboard.indicator.action.start":"beginnen","dashboard.indicator.action.stop":"Schließen","dashboard.indicator.action.edit":"Bearbeiten","dashboard.indicator.action.delete":"Löschen","dashboard.indicator.action.backtest":"Backtest","dashboard.indicator.status.normal":"normal","dashboard.indicator.status.normalPermanent":"Normal (dauerhaft gültig)","dashboard.indicator.status.expired":"Abgelaufen","dashboard.indicator.expiry.permanent":"Dauerhaft gültig","dashboard.indicator.expiry.noExpiry":"Keine Ablaufzeit","dashboard.indicator.expiry.expired":"Abgelaufen: {Datum}","dashboard.indicator.expiry.expiresOn":"Ablaufzeit: {Datum}","dashboard.indicator.delete.confirmTitle":"Bestätigen Sie den Löschvorgang","dashboard.indicator.delete.confirmContent":"Sind Sie sicher, dass Sie den Indikator „{name}“ löschen möchten? Dieser Vorgang ist irreversibel.","dashboard.indicator.delete.confirmOk":"Löschen","dashboard.indicator.delete.confirmCancel":"Abbrechen","dashboard.indicator.delete.success":"Erfolgreich löschen","dashboard.indicator.delete.failed":"Das Löschen ist fehlgeschlagen","dashboard.indicator.save.success":"Erfolgreich gespeichert","dashboard.indicator.save.failed":"Speichern fehlgeschlagen","dashboard.indicator.error.loadWatchlistFailed":"Optionale Bestände konnten nicht geladen werden","dashboard.indicator.error.chartNotReady":"Die Diagrammkomponente ist nicht initialisiert. Bitte wählen Sie zuerst das Ziel aus und warten Sie, bis das Diagramm geladen ist.","dashboard.indicator.error.chartMethodNotReady":"Die Diagrammkomponentenmethode ist nicht bereit. Bitte versuchen Sie es später erneut","dashboard.indicator.error.chartExecuteNotReady":"Die Ausführungsmethode der Diagrammkomponente ist nicht bereit. Bitte versuchen Sie es später erneut","dashboard.indicator.error.parseFailed":"Python-Code kann nicht analysiert werden","dashboard.indicator.error.parseFailedCheck":"Der Python-Code kann nicht analysiert werden. Bitte überprüfen Sie das Codeformat","dashboard.indicator.error.addIndicatorFailed":"Der Indikator konnte nicht hinzugefügt werden","dashboard.indicator.error.runIndicatorFailed":"Die Laufanzeige ist fehlgeschlagen","dashboard.indicator.error.pleaseLogin":"Bitte melden Sie sich zuerst an","dashboard.indicator.error.loadDataFailed":"Das Laden der Daten ist fehlgeschlagen","dashboard.indicator.error.loadDataFailedDesc":"Bitte überprüfen Sie die Netzwerkverbindung","dashboard.indicator.error.pythonEngineFailed":"Die Python-Engine konnte nicht geladen werden und die Indikatorfunktion ist möglicherweise nicht verfügbar.","dashboard.indicator.error.chartInitFailed":"Die Initialisierung des Diagramms ist fehlgeschlagen","dashboard.indicator.warning.enterCode":"Bitte geben Sie zuerst den Indikatorcode ein","dashboard.indicator.warning.pyodideLoadFailed":"Die Python-Engine konnte nicht geladen werden","dashboard.indicator.warning.pyodideLoadFailedDesc":"Diese Funktion ist in Ihrer aktuellen Region oder Netzwerkumgebung nicht verfügbar","dashboard.indicator.warning.chartNotInitialized":"Das Diagramm ist nicht initialisiert und das Linienzeichnungstool kann nicht verwendet werden.","dashboard.indicator.success.runIndicator":"Indikator läuft erfolgreich","dashboard.indicator.success.clearDrawings":"Alle Strichzeichnungen gelöscht","dashboard.indicator.sma":"SMA (gleitende Durchschnittskombination)","dashboard.indicator.ema":"EMA (exponentielle gleitende Durchschnittskombination)","dashboard.indicator.rsi":"RSI (relative Stärke)","dashboard.indicator.macd":"MACD","dashboard.indicator.bb":"Bollinger-Bänder","dashboard.indicator.atr":"ATR (Average True Range)","dashboard.indicator.cci":"CCI (Commodity Channel Index)","dashboard.indicator.williams":"Williams %R (Williams-Indikator)","dashboard.indicator.mfi":"MFI (Geldflussindex)","dashboard.indicator.adx":"ADX (durchschnittlicher Trendindex)","dashboard.indicator.obv":"OBV (Energiewelle)","dashboard.indicator.adosc":"ADOSC (Akkumulieren/Dispatch-Oszillator)","dashboard.indicator.ad":"AD (Sammel-/Verteilungsleitung)","dashboard.indicator.kdj":"KDJ (stochastischer Indikator)","dashboard.indicator.signal.buy":"KAUFEN","dashboard.indicator.signal.sell":"VERKAUFEN","dashboard.indicator.signal.supertrendBuy":"SuperTrend kaufen","dashboard.indicator.signal.supertrendSell":"SuperTrend verkaufen","dashboard.indicator.chart.kline":"K-Linie","dashboard.indicator.chart.volume":"Lautstärke","dashboard.indicator.chart.uptrend":"Aufwärtstrend","dashboard.indicator.chart.downtrend":"Abwärtstrend","dashboard.indicator.tooltip.time":"Zeit","dashboard.indicator.tooltip.open":"offen","dashboard.indicator.tooltip.close":"erhalten","dashboard.indicator.tooltip.high":"hoch","dashboard.indicator.tooltip.low":"niedrig","dashboard.indicator.tooltip.volume":"Lautstärke","dashboard.indicator.drawing.line":"Liniensegment","dashboard.indicator.drawing.horizontalLine":"horizontale Linie","dashboard.indicator.drawing.verticalLine":"vertikale Linie","dashboard.indicator.drawing.ray":"Strahl","dashboard.indicator.drawing.straightLine":"gerade Linie","dashboard.indicator.drawing.parallelLine":"parallele Linien","dashboard.indicator.drawing.priceLine":"Preislinie","dashboard.indicator.drawing.priceChannel":"Preiskanal","dashboard.indicator.drawing.fibonacciLine":"Fibonacci-Linien","dashboard.indicator.drawing.measure":"Messen","dashboard.indicator.drawing.clearAll":"Löschen Sie alle Strichzeichnungen","dashboard.indicator.market.USStock":"US-Aktien","dashboard.indicator.market.Crypto":"Kryptowährung","dashboard.indicator.market.Forex":"Forex","dashboard.indicator.market.Futures":"Futures","dashboard.indicator.create":"Indikator erstellen","dashboard.indicator.editor.title":"Indikatoren erstellen/bearbeiten","dashboard.indicator.editor.name":"Indikatorname","dashboard.indicator.editor.nameRequired":"Bitte geben Sie den Indikatornamen ein","dashboard.indicator.editor.namePlaceholder":"Bitte geben Sie den Indikatornamen ein","dashboard.indicator.editor.description":"Beschreibung des Indikators","dashboard.indicator.editor.descriptionPlaceholder":"Bitte geben Sie eine Beschreibung des Indikators ein (optional)","dashboard.indicator.editor.code":"Python-Code","dashboard.indicator.editor.codeRequired":"Bitte geben Sie den Indikatorcode ein","dashboard.indicator.editor.codePlaceholder":"Bitte geben Sie Python-Code ein","dashboard.indicator.editor.run":"laufen","dashboard.indicator.editor.runHint":"Klicken Sie auf die Schaltfläche „Ausführen“, um eine Vorschau des Indikatoreffekts im K-Liniendiagramm anzuzeigen","dashboard.indicator.editor.guide":"Entwicklungshandbuch","dashboard.indicator.editor.guideTitle":"Leitfaden zur Entwicklung von Python-Indikatoren","dashboard.indicator.editor.save":"speichern","dashboard.indicator.editor.cancel":"Abbrechen","dashboard.indicator.editor.unnamed":"Unbenannter Indikator","dashboard.indicator.editor.publishToCommunity":"In der Community posten","dashboard.indicator.editor.publishToCommunityHint":"Nach der Veröffentlichung können andere Benutzer Ihren Indikator in der Community anzeigen und verwenden","dashboard.indicator.editor.indicatorType":"Indikatortyp","dashboard.indicator.editor.indicatorTypeRequired":"Bitte wählen Sie den Indikatortyp aus","dashboard.indicator.editor.indicatorTypePlaceholder":"Bitte wählen Sie den Indikatortyp aus","dashboard.indicator.editor.previewImage":"Vorschau","dashboard.indicator.editor.uploadImage":"Bilder hochladen","dashboard.indicator.editor.previewImageHint":"Empfohlene Größe: 800 x 400, nicht mehr als 2 MB","dashboard.indicator.editor.pricing":"Verkaufspreis (QDT)","dashboard.indicator.editor.pricingType.free":"kostenlos","dashboard.indicator.editor.pricingType.permanent":"dauerhaft","dashboard.indicator.editor.pricingType.monthly":"monatliche Zahlung","dashboard.indicator.editor.price":"Preis","dashboard.indicator.editor.priceRequired":"Bitte geben Sie den Preis ein","dashboard.indicator.editor.pricePlaceholder":"Bitte geben Sie den Preis ein","dashboard.indicator.editor.pricingHint":"Obwohl der Preis für kostenlose Indikatoren 0 beträgt, belohnt Sie die Plattform (QDT) basierend auf Ihrer Indikatornutzung und Lobrate.","dashboard.indicator.editor.aiGenerate":"Intelligente Generation","dashboard.indicator.editor.aiPromptPlaceholder":"Teilen Sie mir Ihre Ideen mit und ich werde den Python-Indikatorcode für Sie generieren","dashboard.indicator.editor.aiGenerateBtn":"KI-generierter Code","dashboard.indicator.editor.aiPromptRequired":"Bitte geben Sie Ihre Gedanken ein","dashboard.indicator.editor.aiGenerateSuccess":"Codegenerierung erfolgreich","dashboard.indicator.editor.aiGenerateError":"Die Codegenerierung ist fehlgeschlagen. Bitte versuchen Sie es später noch einmal","dashboard.indicator.backtest.title":"Indikator-Backtest","dashboard.indicator.backtest.config":"Backtest-Parameter","dashboard.indicator.backtest.startDate":"Startdatum","dashboard.indicator.backtest.endDate":"Enddatum","dashboard.indicator.backtest.selectStartDate":"Wählen Sie das Startdatum","dashboard.indicator.backtest.selectEndDate":"Wählen Sie das Enddatum aus","dashboard.indicator.backtest.startDateRequired":"Bitte wählen Sie ein Startdatum aus","dashboard.indicator.backtest.endDateRequired":"Bitte wählen Sie ein Enddatum aus","dashboard.indicator.backtest.initialCapital":"Anfangskapital","dashboard.indicator.backtest.initialCapitalRequired":"Bitte geben Sie den Anfangsbetrag ein","dashboard.indicator.backtest.commission":"Bearbeitungsgebühr","dashboard.indicator.backtest.leverage":"Verschuldungsquote","dashboard.indicator.backtest.tradeDirection":"Handelsrichtung","dashboard.indicator.backtest.longOnly":"Geh lange","dashboard.indicator.backtest.shortOnly":"kurz","dashboard.indicator.backtest.both":"Zweiseitig","dashboard.indicator.backtest.run":"Beginnen Sie mit dem Backtesting","dashboard.indicator.backtest.rerun":"Nochmals Backtest","dashboard.indicator.backtest.close":"Schließen","dashboard.indicator.backtest.running":"Indikator-Backtest läuft...","dashboard.indicator.backtest.results":"Backtest-Ergebnisse","dashboard.indicator.backtest.totalReturn":"Gesamtrendite","dashboard.indicator.backtest.annualReturn":"annualisiertes Einkommen","dashboard.indicator.backtest.maxDrawdown":"maximaler Drawdown","dashboard.indicator.backtest.sharpeRatio":"Sharpe-Ratio","dashboard.indicator.backtest.winRate":"Gewinnquote","dashboard.indicator.backtest.profitFactor":"Gewinn-Verlust-Verhältnis","dashboard.indicator.backtest.totalTrades":"Anzahl der Transaktionen","dashboard.indicator.totalReturn":"Gesamtrendite","dashboard.indicator.annualReturn":"annualisierte Rendite","dashboard.indicator.maxDrawdown":"maximaler Drawdown","dashboard.indicator.sharpeRatio":"Sharpe-Ratio","dashboard.indicator.winRate":"Gewinnquote","dashboard.indicator.profitFactor":"Gewinn-Verlust-Verhältnis","dashboard.indicator.totalTrades":"Gesamtzahl der Transaktionen","dashboard.indicator.backtest.totalCommission":"Gesamtbearbeitungsgebühr","dashboard.indicator.backtest.equityCurve":"Zinskurve","dashboard.indicator.backtest.strategy":"Indikatoreinkommen","dashboard.indicator.backtest.benchmark":"Benchmark-Rendite","dashboard.indicator.backtest.tradeHistory":"Transaktionsverlauf","dashboard.indicator.backtest.tradeTime":"Zeit","dashboard.indicator.backtest.tradeType":"Typ","dashboard.indicator.backtest.buy":"kaufen","dashboard.indicator.backtest.sell":"verkaufen","dashboard.indicator.backtest.liquidation":"Liquidation","dashboard.indicator.backtest.openLong":"Lange geöffnet","dashboard.indicator.backtest.closeLong":"Pinduo","dashboard.indicator.backtest.closeLongStop":"Nahezu long (Stop-Loss)","dashboard.indicator.backtest.closeLongProfit":"Mehr schließen (Gewinn mitnehmen)","dashboard.indicator.backtest.addLong":"Long-Position hinzufügen","dashboard.indicator.backtest.openShort":"Kurz öffnen","dashboard.indicator.backtest.closeShort":"leer","dashboard.indicator.backtest.closeShortStop":"Schließen (Stop-Loss)","dashboard.indicator.backtest.closeShortProfit":"Schließen (Gewinn mitnehmen)","dashboard.indicator.backtest.addShort":"Short-Position hinzufügen","dashboard.indicator.backtest.price":"Preis","dashboard.indicator.backtest.amount":"Menge","dashboard.indicator.backtest.balance":"Kontostand","dashboard.indicator.backtest.profit":"Gewinn und Verlust","dashboard.indicator.backtest.success":"Backtest abgeschlossen","dashboard.indicator.backtest.failed":"Der Backtest ist fehlgeschlagen. Bitte versuchen Sie es später noch einmal","dashboard.indicator.backtest.noIndicatorCode":"Für diesen Indikator gibt es keinen rückprüfbaren Code","dashboard.indicator.backtest.noSymbol":"Bitte wählen Sie zunächst das Transaktionsziel aus","dashboard.indicator.backtest.dateRangeExceeded":"Der Backtest-Zeitbereich überschreitet das Limit: {timeframe} Zeitraum kann höchstens {maxRange} backtestet werden","dashboard.indicator.backtest.dateRangeExceededDays":"Backtest range exceeds limit: {timeframe} max {maxRange} ({maxDays} days)","dashboard.indicator.backtest.metaLine":"Symbol: {symbol} | Market: {market} | Timeframe: {timeframe}","dashboard.indicator.backtest.savedRunId":"Backtest saved. Run ID: {id}","dashboard.indicator.backtest.prev":"Previous","dashboard.indicator.backtest.next":"Next","dashboard.indicator.backtest.steps.strategy.title":"Strategy","dashboard.indicator.backtest.steps.strategy.desc":"Position sizing & risk controls","dashboard.indicator.backtest.steps.trading.title":"Trading settings","dashboard.indicator.backtest.steps.trading.desc":"Time range, capital, fees, leverage","dashboard.indicator.backtest.steps.results.title":"Results","dashboard.indicator.backtest.steps.results.desc":"Backtest output","dashboard.indicator.backtest.panel.risk":"Risk management (SL/TP/Trailing)","dashboard.indicator.backtest.panel.scale":"Scale in / DCA (trend & mean-reversion)","dashboard.indicator.backtest.panel.reduce":"Reduce position (trend & adverse)","dashboard.indicator.backtest.panel.position":"Position sizing","dashboard.indicator.backtest.field.stopLossPct":"Stop Loss (%)","dashboard.indicator.backtest.field.takeProfitPct":"Take Profit (%)","dashboard.indicator.backtest.field.trailingEnabled":"Trailing stop / take profit","dashboard.indicator.backtest.field.trailingStopPct":"Trailing drawdown (%)","dashboard.indicator.backtest.field.trailingActivationPct":"Trailing activation (%)","dashboard.indicator.backtest.field.slippage":"Slippage (%)","dashboard.indicator.backtest.field.trendAddEnabled":"Trend-following scale-in","dashboard.indicator.backtest.field.dcaAddEnabled":"Mean-reversion DCA","dashboard.indicator.backtest.field.trendAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.dcaAddStepPct":"DCA trigger (%)","dashboard.indicator.backtest.field.trendAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.dcaAddSizePct":"DCA size (% of capital)","dashboard.indicator.backtest.field.trendAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.dcaAddMaxTimes":"Max DCA times","dashboard.indicator.backtest.field.trendReduceEnabled":"Trend reduce","dashboard.indicator.backtest.field.adverseReduceEnabled":"Adverse reduce","dashboard.indicator.backtest.field.trendReduceStepPct":"Trend trigger (%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"Adverse trigger (%)","dashboard.indicator.backtest.field.trendReduceSizePct":"Reduce size (% of position)","dashboard.indicator.backtest.field.adverseReduceSizePct":"Adverse reduce size (% of position)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"Max trend reduce times","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"Max adverse reduce times","dashboard.indicator.backtest.field.entryPct":"Entry size (% of capital)","dashboard.indicator.backtest.field.minOrderPct":"Min order size (% of capital) (optional)","dashboard.indicator.backtest.closeLongTrailing":"Close Long (Trailing)","dashboard.indicator.backtest.reduceLong":"Reduce Long","dashboard.indicator.backtest.closeShortTrailing":"Close Short (Trailing)","dashboard.indicator.backtest.reduceShort":"Reduce Short","dashboard.docs.title":"Dokumentenzentrum","dashboard.docs.search.placeholder":"Dokumente durchsuchen...","dashboard.docs.category.all":"Alle","dashboard.docs.category.guide":"Entwicklungshandbuch","dashboard.docs.category.api":"API-Dokumentation","dashboard.docs.category.tutorial":"Anleitung","dashboard.docs.category.faq":"FAQ","dashboard.docs.featured.title":"Empfohlene Dokumentation","dashboard.docs.featured.tag":"Empfohlen","dashboard.docs.list.views":"Durchsuchen","dashboard.docs.list.author":"Autor","dashboard.docs.list.empty":"Noch kein Dokument","dashboard.docs.list.backToAll":"Zurück zu allen Dokumenten","dashboard.docs.list.total":"Insgesamt {count} Dokumente","dashboard.docs.detail.back":"Zurück zur Dokumentenliste","dashboard.docs.detail.updatedAt":"aktualisiert am","dashboard.docs.detail.related":"Verwandte Dokumente","dashboard.docs.detail.notFound":"Dokument existiert nicht","dashboard.docs.detail.error":"Das Dokument existiert nicht oder wurde gelöscht","dashboard.docs.search.result":"Suchergebnisse","dashboard.docs.search.keyword":"Schlüsselwörter","community.filter.indicatorType":"Indikatortyp","community.filter.all":"Alle","community.filter.other":"Andere Optionen","community.filter.pricing":"Preisart","community.filter.allPricing":"Alle Preise","community.filter.sortBy":"Sortieren nach","community.filter.search":"Suchen","community.filter.searchPlaceholder":"Metrikname suchen","community.indicatorType.trend":"Trendtyp","community.indicatorType.momentum":"Impulstyp","community.indicatorType.volatility":"Volatilität","community.indicatorType.volume":"Lautstärke","community.indicatorType.custom":"Anpassen","community.pricing.free":"kostenlos","community.pricing.paid":"Bezahlen","community.sort.downloads":"Downloads","community.sort.rating":"Bewertung","community.sort.newest":"Neueste Veröffentlichungen","community.pagination.total":"{total} Indikatoren insgesamt","community.noDescription":"Noch keine Beschreibung","community.detail.type":"Typ","community.detail.pricing":"Preise","community.detail.rating":"Bewertung","community.detail.downloads":"Downloads","community.detail.author":"Autor","community.detail.description":"Einführung","community.detail.detailContent":"Detaillierte Beschreibung","community.detail.backtestStats":"Backtest-Statistiken","community.action.purchase":"Kaufindikator","community.action.addToMyIndicators":"Zu meinen Indikatoren hinzufügen","community.action.favorite":"Sammlung","community.action.unfavorite":"Favoriten abbrechen","community.action.buyNow":"Jetzt kaufen","community.action.renew":"Erneuerung","community.purchase.price":"Preis","community.purchase.permanent":"dauerhaft","community.purchase.monthly":"Monat","community.purchase.confirmBuy":"Bestätigen Sie den Kauf dieses Indikators ({price} QDT)?","community.purchase.confirmRenew":"Bestätigen Sie die Erneuerung dieses Indikators ({price} QDT/Monat)?","community.purchase.confirmFree":"Bestätigen Sie, dass Sie diesen kostenlosen Indikator hinzufügen möchten?","community.purchase.confirmTitle":"Aktion bestätigen","community.purchase.owned":"Sie haben diesen Indikator erworben (dauerhaft gültig)","community.purchase.ownIndicator":"Dies ist die von Ihnen veröffentlichte Metrik","community.purchase.expired":"Ihr Abonnement ist abgelaufen","community.purchase.expiresOn":"Ablaufzeit: {Datum}","community.tabs.detail":"Indikatordetails","community.tabs.backtest":"Backtest-Daten","community.tabs.ratings":"Benutzerbewertungen","community.rating.myRating":"Meine Bewertung","community.rating.stars":"{count} Sterne","community.rating.commentPlaceholder":"Teilen Sie Ihre Erfahrungen...","community.rating.submit":"Bewertung abgeben","community.rating.modify":"Ändern","community.rating.saveModify":"Änderungen speichern","community.rating.cancel":"Abbrechen","community.rating.selectRating":"Bitte wählen Sie eine Bewertung aus","community.rating.success":"Bewertung erfolgreich","community.rating.modifySuccess":"Bewertung erfolgreich geändert","community.rating.failed":"Bewertung fehlgeschlagen","community.rating.noRatings":"Noch keine Kommentare","community.backtest.note":"Die oben genannten Daten sind historische Backtest-Ergebnisse und dienen nur als Referenz und stellen keine zukünftigen Erträge dar.","community.backtest.noData":"Noch keine Backtest-Daten","community.backtest.uploadHint":"Der Autor hat noch keine Backtest-Daten hochgeladen","community.message.loadFailed":"Die Indikatorliste konnte nicht geladen werden","community.message.purchaseProcessing":"Kaufanfrage wird bearbeitet...","community.message.downloadSuccess":"Die Metrik wurde zu meiner Metrikliste hinzugefügt","community.message.favoriteSuccess":"Sammlung erfolgreich","community.message.unfavoriteSuccess":"Abholung erfolgreich abbrechen","community.message.operationSuccess":"Operation erfolgreich","community.message.operationFailed":"Der Vorgang ist fehlgeschlagen","community.banner.readOnly":"Nur lesen","community.banner.loginHint":"Für Login oder Registrierung bitte auf die Schaltfläche klicken, um zu einer unabhängigen Seite zu wechseln und CSRF-Probleme zu vermeiden","community.banner.jumpButton":"Zur Anmeldung/Registrierung","dashboard.totalEquity":"Gesamteigenkapital","dashboard.totalPnL":"Gesamtgewinn und -verlust","dashboard.aiStrategies":"KI-Strategie","dashboard.indicatorStrategies":"Indikatorstrategie","dashboard.running":"Laufen","dashboard.pnlHistory":"historischer Gewinn und Verlust","dashboard.strategyPerformance":"Gewinn- und Verlustquote der Strategie","dashboard.recentTrades":"aktuelle Transaktionen","dashboard.currentPositions":"Aktuelle Position","dashboard.table.time":"Zeit","dashboard.table.strategy":"Richtlinienname","dashboard.table.symbol":"Ziel","dashboard.table.type":"Typ","dashboard.table.side":"Richtung","dashboard.table.size":"Offenes Interesse","dashboard.table.entryPrice":"durchschnittlicher Eröffnungspreis","dashboard.table.price":"Preis","dashboard.table.amount":"Menge","dashboard.table.profit":"Gewinn und Verlust","dashboard.pendingOrders":"Auftragsausführungsprotokoll","dashboard.totalOrders":"Gesamt {total} Aufträge","dashboard.viewError":"Fehler anzeigen","dashboard.filled":"Ausgeführt","dashboard.orderTable.time":"Erstellungszeit","dashboard.orderTable.strategy":"Strategie","dashboard.orderTable.symbol":"Handelspaar","dashboard.orderTable.signalType":"Signaltyp","dashboard.orderTable.amount":"Menge","dashboard.orderTable.price":"Ausführungspreis","dashboard.orderTable.status":"Status","dashboard.orderTable.executedAt":"Ausführungszeit","dashboard.signalType.openLong":"Long öffnen","dashboard.signalType.openShort":"Short öffnen","dashboard.signalType.closeLong":"Long schließen","dashboard.signalType.closeShort":"Short schließen","dashboard.signalType.addLong":"Long hinzufügen","dashboard.signalType.addShort":"Short hinzufügen","dashboard.status.pending":"Ausstehend","dashboard.status.processing":"In Bearbeitung","dashboard.status.completed":"Abgeschlossen","dashboard.status.failed":"Fehlgeschlagen","dashboard.status.cancelled":"Storniert","dashboard.table.pnl":"nicht realisierter Gewinn oder Verlust","form.basic-form.basic.title":"Grundform","form.basic-form.basic.description":"Formularseiten werden verwendet, um Informationen von Benutzern zu sammeln oder zu überprüfen. Grundformulare werden häufig in Formularszenarien mit wenigen Datenelementen verwendet.","form.basic-form.title.label":"Titel","form.basic-form.title.placeholder":"Geben Sie dem Ziel einen Namen","form.basic-form.title.required":"Bitte geben Sie einen Titel ein","form.basic-form.date.label":"Start- und Enddatum","form.basic-form.placeholder.start":"Startdatum","form.basic-form.placeholder.end":"Enddatum","form.basic-form.date.required":"Bitte wählen Sie Start- und Enddatum aus","form.basic-form.goal.label":"Zielbeschreibung","form.basic-form.goal.placeholder":"Bitte geben Sie Ihre schrittweisen Arbeitsziele ein","form.basic-form.goal.required":"Bitte geben Sie eine Zielbeschreibung ein","form.basic-form.standard.label":"messen","form.basic-form.standard.placeholder":"Bitte geben Sie Messwerte ein","form.basic-form.standard.required":"Bitte geben Sie Messwerte ein","form.basic-form.client.label":"Kunde","form.basic-form.client.required":"Bitte beschreiben Sie die Kunden, die Sie betreuen","form.basic-form.label.tooltip":"Zielgruppe der Leistungsempfänger","form.basic-form.client.placeholder":"Bitte beschreiben Sie die von Ihnen betreuten Kunden, interne Kunden direkt @Name/Auftragsnummer","form.basic-form.invites.label":"Laden Sie Gutachter ein","form.basic-form.invites.placeholder":"Bitte direkt @Name/Mitarbeiternummer angeben, es können bis zu 5 Personen einladen","form.basic-form.weight.label":"Gewicht","form.basic-form.weight.placeholder":"Bitte treten Sie ein","form.basic-form.public.label":"Zielpublikum","form.basic-form.label.help":"Kunden und Rezensenten werden standardmäßig geteilt","form.basic-form.radio.public":"öffentlich","form.basic-form.radio.partially-public":"Teilweise öffentlich","form.basic-form.radio.private":"privat","form.basic-form.publicUsers.placeholder":"offen für","form.basic-form.option.A":"Kollege 1","form.basic-form.option.B":"Kollege 2","form.basic-form.option.C":"Kollege drei","form.basic-form.email.required":"Bitte geben Sie Ihre E-Mail-Adresse ein!","form.basic-form.email.wrong-format":"Das E-Mail-Adressformat ist falsch!","form.basic-form.userName.required":"Bitte Benutzernamen eingeben!","form.basic-form.password.required":"Bitte geben Sie Ihr Passwort ein!","form.basic-form.password.twice":"Die doppelt eingegebenen Passwörter stimmen nicht überein!","form.basic-form.strength.msg":"Bitte geben Sie mindestens 6 Zeichen ein. Bitte verwenden Sie keine Passwörter, die leicht zu erraten sind.","form.basic-form.strength.strong":"Stärke: Stark","form.basic-form.strength.medium":"Stärke: Mittel","form.basic-form.strength.short":"Stärke: zu kurz","form.basic-form.confirm-password.required":"Bitte bestätigen Sie Ihr Passwort!","form.basic-form.phone-number.required":"Bitte geben Sie Ihre Mobiltelefonnummer ein!","form.basic-form.phone-number.wrong-format":"Das Format der Mobiltelefonnummer ist falsch!","form.basic-form.verification-code.required":"Bitte geben Sie den Verifizierungscode ein!","form.basic-form.form.get-captcha":"Holen Sie sich den Bestätigungscode","form.basic-form.captcha.second":"Sekunden","form.basic-form.form.optional":"(optional)","form.basic-form.form.submit":"Senden","form.basic-form.form.save":"speichern","form.basic-form.email.placeholder":"E-Mail","form.basic-form.password.placeholder":"Passwort mit mindestens 6 Zeichen, Groß- und Kleinschreibung beachten","form.basic-form.confirm-password.placeholder":"Passwort bestätigen","form.basic-form.phone-number.placeholder":"Mobiltelefonnummer","form.basic-form.verification-code.placeholder":"Bestätigungscode","result.success.title":"Übermittlung erfolgreich","result.success.description":"Die Seite mit den Übermittlungsergebnissen wird verwendet, um Rückmeldungen zu den Verarbeitungsergebnissen einer Reihe von Vorgangsaufgaben zu geben. Wenn es sich nur um einen einfachen Vorgang handelt, verwenden Sie das globale Eingabeaufforderungs-Feedback „Nachricht“. In diesem Textbereich können einfache Zusatzanweisungen angezeigt werden. Bei Bedarf zur Darstellung von „Dokumenten“ können im grauen Bereich darunter komplexere Inhalte angezeigt werden.","result.success.operate-title":"Projektname","result.success.operate-id":"Projekt-ID","result.success.principal":"Verantwortliche Person","result.success.operate-time":"Effektive Zeit","result.success.step1-title":"Projekt erstellen","result.success.step1-operator":"Qu Lili","result.success.step2-title":"Vorläufige Prüfung der Abteilung","result.success.step2-operator":"Zhou Maomao","result.success.step2-extra":"Dringend","result.success.step3-title":"Finanzielle Überprüfung","result.success.step4-title":"Komplett","result.success.btn-return":"Zurück zur Liste","result.success.btn-project":"Artikel ansehen","result.success.btn-print":"Drucken","result.fail.error.title":"Die Übermittlung ist fehlgeschlagen","result.fail.error.description":"Bitte überprüfen und ändern Sie die folgenden Informationen, bevor Sie sie erneut einreichen.","result.fail.error.hint-title":"Der von Ihnen übermittelte Inhalt enthält die folgenden Fehler:","result.fail.error.hint-text1":"Ihr Konto wurde gesperrt","result.fail.error.hint-btn1":"Sofort auftauen","result.fail.error.hint-text2":"Ihr Konto ist noch nicht antragsberechtigt","result.fail.error.hint-btn2":"Jetzt upgraden","result.fail.error.btn-text":"Zurück zur Änderung","account.settings.menuMap.custom":"Personalisierung","account.settings.menuMap.binding":"Kontobindung","account.settings.basic.avatar":"Avatar","account.settings.basic.change-avatar":"Avatar ändern","account.settings.basic.email":"E-Mail","account.settings.basic.email-message":"Bitte geben Sie Ihre E-Mail ein!","account.settings.basic.nickname":"Spitzname","account.settings.basic.nickname-message":"Bitte geben Sie Ihren Spitznamen ein!","account.settings.basic.profile":"Profil","account.settings.basic.profile-message":"Bitte geben Sie Ihr persönliches Profil ein!","account.settings.basic.profile-placeholder":"Profil","account.settings.basic.country":"Land/Region","account.settings.basic.country-message":"Bitte geben Sie Ihr Land oder Ihre Region ein!","account.settings.basic.geographic":"Provinz und Stadt","account.settings.basic.geographic-message":"Bitte geben Sie Ihr Bundesland und Ihre Stadt ein!","account.settings.basic.address":"Straßenadresse","account.settings.basic.address-message":"Bitte geben Sie Ihre Straße ein!","account.settings.basic.phone":"Kontaktnummer","account.settings.basic.phone-message":"Bitte geben Sie Ihre Kontaktnummer ein!","account.settings.basic.update":"Grundlegende Informationen aktualisieren","account.settings.basic.update.success":"Grundlegende Informationen erfolgreich aktualisieren","account.settings.security.strong":"Stark","account.settings.security.medium":"in","account.settings.security.weak":"schwach","account.settings.security.password":"Kontopasswort","account.settings.security.password-description":"Aktuelle Passwortstärke:","account.settings.security.phone":"Sicherheitshandy","account.settings.security.phone-description":"Bereits gebundenes Mobiltelefon:","account.settings.security.question":"Sicherheitsprobleme","account.settings.security.question-description":"Es werden keine Sicherheitsfragen gestellt, wodurch die Kontosicherheit wirksam geschützt werden kann.","account.settings.security.email":"E-Mail binden","account.settings.security.email-description":"Bereits gebundene E-Mail-Adresse:","account.settings.security.mfa":"MFA-Gerät","account.settings.security.mfa-description":"Das MFA-Gerät ist nicht gebunden. Nach der Bindung können Sie noch einmal bestätigen.","account.settings.security.modify":"Ändern","account.settings.security.set":"Einstellungen","account.settings.security.bind":"verbindlich","account.settings.binding.taobao":"Binde Taobao","account.settings.binding.taobao-description":"Das Taobao-Konto ist derzeit nicht gebunden","account.settings.binding.alipay":"Alipay binden","account.settings.binding.alipay-description":"Das Alipay-Konto ist derzeit nicht gebunden","account.settings.binding.dingding":"Bindung von DingTalk","account.settings.binding.dingding-description":"Derzeit ist kein DingTalk-Konto gebunden","account.settings.binding.bind":"verbindlich","account.settings.notification.password":"Kontopasswort","account.settings.notification.password-description":"Nachrichten von anderen Benutzern werden in Form von Site-Nachrichten benachrichtigt.","account.settings.notification.messages":"Systemmeldungen","account.settings.notification.messages-description":"Systemmeldungen werden in Form von Site-Nachrichten benachrichtigt.","account.settings.notification.todo":"Zu erledigende Aufgaben","account.settings.notification.todo-description":"Zu erledigende Aufgaben werden in Form von In-Site-Nachrichten benachrichtigt","account.settings.settings.open":"offen","account.settings.settings.close":"schließen","trading-assistant.title":"Handelsassistent","trading-assistant.strategyList":"Strategieliste","trading-assistant.createStrategy":"Richtlinie erstellen","trading-assistant.noStrategy":"Noch keine Strategie","trading-assistant.selectStrategy":"Bitte wählen Sie links eine Strategie aus, um Details anzuzeigen","trading-assistant.startStrategy":"Startstrategie","trading-assistant.stopStrategy":"Stoppstrategie","trading-assistant.editStrategy":"Redaktionelle Strategie","trading-assistant.deleteStrategy":"Richtlinie löschen","trading-assistant.status.running":"Laufen","trading-assistant.status.stopped":"Angehalten","trading-assistant.status.error":"Fehler","trading-assistant.strategyType.IndicatorStrategy":"Technische Indikatorstrategie","trading-assistant.strategyType.PromptBasedStrategy":"Stichwortstrategie","trading-assistant.strategyType.GridStrategy":"Grid-Strategie","trading-assistant.tabs.tradingRecords":"Transaktionsverlauf","trading-assistant.tabs.positions":"Positionsaufzeichnung","trading-assistant.tabs.equityCurve":"Eigenkapitalkurve","trading-assistant.form.step1":"Wählen Sie Indikatoren aus","trading-assistant.form.step2":"Exchange-Konfiguration","trading-assistant.form.step3":"Strategieparameter","trading-assistant.form.step2Params":"Parameter","trading-assistant.form.step3Signal":"Signalzustellung","trading-assistant.form.marketCategory":"Marktkategorie","trading-assistant.form.marketCategoryHint":"Wählen Sie zuerst den Markt. Nur Krypto kann Live-Trading aktivieren; andere Märkte sind nur Signal.","trading-assistant.market.USStock":"US-Aktien","trading-assistant.market.Crypto":"Krypto","trading-assistant.market.Forex":"Forex","trading-assistant.form.indicator":"Wählen Sie Indikatoren aus","trading-assistant.form.indicatorHint":"Sie können nur technische Indikatoren auswählen, die Sie gekauft oder erstellt haben","trading-assistant.form.qdtCostHints":"Bei Verwendung dieser Strategie wird QDT verbraucht. Bitte stellen Sie sicher, dass das Konto über ausreichend QDT-Guthaben verfügt","trading-assistant.form.indicatorDescription":"Beschreibung des Indikators","trading-assistant.form.noDescription":"Noch keine Beschreibung","trading-assistant.form.exchange":"Austausch auswählen","trading-assistant.form.apiKey":"API-Schlüssel","trading-assistant.form.secretKey":"Geheimer Schlüssel","trading-assistant.form.passphrase":"Passphrase","trading-assistant.form.testConnection":"Testverbindung","trading-assistant.form.strategyName":"Richtlinienname","trading-assistant.form.symbol":"Handelspaar","trading-assistant.form.symbolHint":"Das Symbolformat hängt vom ausgewählten Markt ab","trading-assistant.form.symbolHintCrypto":"Krypto: z.B. BTC/USDT","trading-assistant.form.symbolHintGeneral":"Geben Sie das Symbol des gewählten Marktes ein (z.B. 600519, AAPL, EURUSD).","trading-assistant.form.initialCapital":"Höhe der Investition","trading-assistant.form.marketType":"Markttyp","trading-assistant.form.marketTypeFutures":"Vertrag","trading-assistant.form.marketTypeSpot":"Spot","trading-assistant.form.marketTypeHint":"Der Kontrakt unterstützt bidirektionalen Handel und Leverage, während der Spot nur Long-Positionen unterstützt und der Leverage auf 1x festgelegt ist","trading-assistant.form.leverage":"Nutzen Sie mehrere","trading-assistant.form.leverageHint":"Vertrag: 1-125 Mal, Spot: 1 Mal fest","trading-assistant.form.spotLeverageFixed":"Der Hebel für den Spothandel ist auf 1x festgelegt","trading-assistant.form.spotOnlyLongHint":"Der Spothandel unterstützt nur Long-Positionen","trading-assistant.form.tradeDirection":"Handelsrichtung","trading-assistant.form.tradeDirectionLong":"Nur lang","trading-assistant.form.tradeDirectionShort":"Nur kurz","trading-assistant.form.tradeDirectionBoth":"zweiseitige Transaktion","trading-assistant.form.timeframe":"Zeitraum","trading-assistant.form.klinePeriod":"K-Linien-Zeitraum","trading-assistant.form.timeframe1m":"1 Minute","trading-assistant.form.timeframe5m":"5 Minuten","trading-assistant.form.timeframe15m":"15 Minuten","trading-assistant.form.timeframe30m":"30 Minuten","trading-assistant.form.timeframe1H":"1 Stunde","trading-assistant.form.timeframe4H":"4 Stunden","trading-assistant.form.timeframe1D":"1 Tag","trading-assistant.form.selectStrategyType":"Strategietyp auswählen","trading-assistant.form.indicatorStrategy":"Indikator-Strategie","trading-assistant.form.indicatorStrategyDesc":"Automatisierte Handelsstrategie basierend auf technischen Indikatoren","trading-assistant.form.aiStrategy":"KI-Strategie","trading-assistant.form.aiStrategyDesc":"Automatisierte Handelsstrategie basierend auf KI-Intelligenzentscheidungen","trading-assistant.form.enableAiFilter":"KI-Intelligenzentscheidungsfilter aktivieren","trading-assistant.form.enableAiFilterHint":"Wenn aktiviert, werden Indikatorsignale von KI gefiltert, um die Handelsqualität zu verbessern","trading-assistant.form.aiFilterPrompt":"Benutzerdefinierte Eingabeaufforderung","trading-assistant.form.aiFilterPromptHint":"Benutzerdefinierte Anweisungen für KI-Filterung bereitstellen, leer lassen, um die Systemstandardwerte zu verwenden","trading-assistant.validation.strategyTypeRequired":"Bitte wählen Sie einen Strategietyp","trading-assistant.validation.marketCategoryRequired":"Bitte wählen Sie eine Marktkategorie","trading-assistant.form.advancedSettings":"Erweiterte Einstellungen","trading-assistant.form.orderMode":"Bestellmodus","trading-assistant.form.orderModeMaker":"Hersteller","trading-assistant.form.orderModeTaker":"Marktpreis (Taker)","trading-assistant.form.orderModeHint":"Im Pending-Order-Modus werden Limit-Orders verwendet und die Bearbeitungsgebühr ist niedriger; Der Marktpreismodus wird sofort ausgeführt und die Bearbeitungsgebühr ist höher.","trading-assistant.form.makerWaitSec":"Wartezeit für ausstehende Bestellungen (Sekunden)","trading-assistant.form.makerWaitSecHint":"Die Zeit, die nach der Bestellung auf die Transaktion gewartet wird. Brechen Sie ab und versuchen Sie es nach einer Zeitüberschreitung erneut.","trading-assistant.form.makerRetries":"Anzahl der Wiederholungsversuche für ausstehende Bestellungen","trading-assistant.form.makerRetriesHint":"Die maximale Anzahl von Wiederholungsversuchen, wenn eine ausstehende Order nicht ausgeführt wird","trading-assistant.form.fallbackToMarket":"Die ausstehende Bestellung schlägt fehl und der Marktpreis wird herabgestuft.","trading-assistant.form.fallbackToMarketHint":"Wenn die ausstehende Eröffnungs-/Schließorder nicht abgeschlossen wurde, wird angegeben, ob sie auf eine Marktorder herabgestuft werden soll, um sicherzustellen, dass die Transaktion abgeschlossen wird.","trading-assistant.form.marginMode":"Margin-Modus","trading-assistant.form.marginModeCross":"Volles Lager","trading-assistant.form.marginModeIsolated":"Isolierte Lage","trading-assistant.form.stopLossPct":"Stop-Loss-Verhältnis (%)","trading-assistant.form.stopLossPctHint":"Legen Sie den Stop-Loss-Prozentsatz fest. 0 bedeutet, dass Stop-Loss nicht aktiviert ist","trading-assistant.form.takeProfitPct":"Take-Profit-Quote (%)","trading-assistant.form.takeProfitPctHint":"Legen Sie den Take-Profit-Prozentsatz fest. 0 bedeutet, dass Take-Profit deaktiviert ist","trading-assistant.form.commission":"Gebühr (%)","trading-assistant.form.commissionHint":"Handelsgebühr in Prozent (optional)","trading-assistant.form.slippage":"Slippage (%)","trading-assistant.form.slippageHint":"Geschätzter Slippage-Prozentsatz (optional)","trading-assistant.form.executionMode":"Ausführung","trading-assistant.form.executionModeSignal":"Nur Signal (Benachrichtigungen)","trading-assistant.form.executionModeLive":"Live-Trading (nur Krypto)","trading-assistant.form.liveTradingCryptoOnlyHint":"Live-Trading ist nur für Krypto verfügbar. Andere Märkte können nur Signale senden.","trading-assistant.form.notifyChannels":"Benachrichtigungskanäle","trading-assistant.form.notifyChannelsHint":"Wählen Sie aus, wie Sie Kauf/Verkauf- und Risikosignale erhalten möchten.","trading-assistant.notify.browser":"Browser","trading-assistant.notify.email":"E-Mail","trading-assistant.notify.phone":"Telefon","trading-assistant.notify.telegram":"Telegram","trading-assistant.notify.discord":"Discord","trading-assistant.notify.webhook":"Webhook","trading-assistant.form.notifyEmail":"E-Mail","trading-assistant.form.notifyPhone":"Telefonnummer","trading-assistant.form.notifyTelegram":"Telegram (Chat-ID / Benutzername)","trading-assistant.form.notifyDiscord":"Discord (Webhook-URL)","trading-assistant.form.notifyWebhook":"Webhook-URL","trading-assistant.form.liveTradingConfigTitle":"Exchange-Zugangsdaten","trading-assistant.form.liveTradingConfigHint":"Geben Sie Ihre Exchange-API-Zugangsdaten ein. Sie können die Verbindung vor dem Speichern testen.","trading-assistant.form.savedCredential":"Gespeicherte Zugangsdaten","trading-assistant.form.savedCredentialHint":"Optional: Wählen Sie gespeicherte Zugangsdaten zum automatischen Ausfüllen.","trading-assistant.form.saveCredential":"Diese Zugangsdaten für später speichern","trading-assistant.form.credentialName":"Name (optional)","trading-assistant.form.signalMode":"Signalmodus","trading-assistant.form.signalModeConfirmed":"Bestätigen Sie den Modus","trading-assistant.form.signalModeAggressive":"Aggressiver Modus","trading-assistant.form.signalModeHint":"Bestätigungsmodus: prüft nur abgeschlossene K-Zeilen; Aggressiver Modus: Überprüft auch die Bildung von K-Linien","trading-assistant.form.cancel":"Abbrechen","trading-assistant.form.prev":"Vorheriger Schritt","trading-assistant.form.next":"Nächster Schritt","trading-assistant.form.confirmCreate":"Bestätigen Sie die Erstellung","trading-assistant.form.confirmEdit":"Bestätigen Sie die Änderungen","trading-assistant.messages.createSuccess":"Strategie erfolgreich erstellt","trading-assistant.messages.createFailed":"Richtlinie konnte nicht erstellt werden","trading-assistant.messages.updateSuccess":"Richtlinienaktualisierung erfolgreich","trading-assistant.messages.updateFailed":"Die Aktualisierungsrichtlinie ist fehlgeschlagen","trading-assistant.messages.deleteSuccess":"Richtlinienlöschung erfolgreich","trading-assistant.messages.deleteFailed":"Das Löschen der Richtlinie ist fehlgeschlagen","trading-assistant.messages.startSuccess":"Strategie erfolgreich gestartet","trading-assistant.messages.startFailed":"Die Richtlinie konnte nicht gestartet werden","trading-assistant.messages.stopSuccess":"Die Strategie wurde erfolgreich beendet","trading-assistant.messages.stopFailed":"Die Stoppstrategie ist fehlgeschlagen","trading-assistant.messages.loadFailed":"Richtlinienliste konnte nicht abgerufen werden","trading-assistant.messages.runningWarning":"Die Strategie läuft. Bitte stoppen Sie die Strategie, bevor Sie sie ändern.","trading-assistant.messages.deleteConfirmWithName":"Sind Sie sicher, dass Sie die Richtlinie „{name}“ löschen möchten? Dieser Vorgang ist irreversibel.","trading-assistant.messages.deleteConfirm":"Sind Sie sicher, dass Sie diese Richtlinie löschen möchten? Dieser Vorgang ist irreversibel.","trading-assistant.messages.loadTradesFailed":"Transaktionsdatensätze konnten nicht abgerufen werden","trading-assistant.messages.loadPositionsFailed":"Positionsdatensatz konnte nicht abgerufen werden","trading-assistant.messages.loadEquityFailed":"Die Eigenkapitalkurve konnte nicht ermittelt werden","trading-assistant.messages.loadIndicatorsFailed":"Die Indikatorliste konnte nicht geladen werden. Bitte versuchen Sie es später noch einmal","trading-assistant.messages.spotLimitations":"Der Spot-Handel wurde automatisch auf „Nur Long“ mit 1-facher Hebelwirkung eingestellt","trading-assistant.messages.autoFillApiConfig":"Die historische API-Konfiguration der Börse wurde automatisch ausgefüllt","trading-assistant.placeholders.selectIndicator":"Bitte wählen Sie einen Indikator aus","trading-assistant.placeholders.selectExchange":"Bitte wählen Sie einen Austausch aus","trading-assistant.placeholders.selectMarketCategory":"Bitte Marktkategorie auswählen","trading-assistant.placeholders.inputApiKey":"Bitte geben Sie den API-Schlüssel ein","trading-assistant.placeholders.inputSecretKey":"Bitte geben Sie den Geheimschlüssel ein","trading-assistant.placeholders.inputPassphrase":"Bitte geben Sie die Passphrase ein","trading-assistant.placeholders.inputStrategyName":"Bitte geben Sie einen Richtliniennamen ein","trading-assistant.placeholders.selectSymbol":"Bitte wählen Sie ein Handelspaar aus","trading-assistant.placeholders.inputSymbol":"Bitte Symbol eingeben","trading-assistant.placeholders.selectTimeframe":"Bitte wählen Sie einen Zeitraum aus","trading-assistant.placeholders.selectKlinePeriod":"Bitte wählen Sie einen K-Linien-Zeitraum aus","trading-assistant.placeholders.inputAiFilterPrompt":"Bitte geben Sie eine benutzerdefinierte Eingabeaufforderung ein (optional)","trading-assistant.placeholders.inputEmail":"Bitte E-Mail eingeben","trading-assistant.placeholders.inputPhone":"Bitte Telefonnummer eingeben","trading-assistant.placeholders.inputTelegram":"Bitte Telegram Chat-ID / Benutzername eingeben","trading-assistant.placeholders.inputDiscord":"Bitte Discord Webhook-URL eingeben","trading-assistant.placeholders.inputWebhook":"Bitte Webhook-URL eingeben","trading-assistant.placeholders.selectSavedCredential":"Gespeicherte Zugangsdaten auswählen","trading-assistant.placeholders.inputCredentialName":"Zum Beispiel: Binance Hauptschlüssel","trading-assistant.validation.indicatorRequired":"Bitte wählen Sie einen Indikator aus","trading-assistant.validation.exchangeRequired":"Bitte wählen Sie einen Austausch aus","trading-assistant.validation.apiKeyRequired":"Bitte geben Sie den API-Schlüssel ein","trading-assistant.validation.secretKeyRequired":"Bitte geben Sie den Geheimschlüssel ein","trading-assistant.validation.passphraseRequired":"Bitte geben Sie die Passphrase ein","trading-assistant.validation.exchangeConfigIncomplete":"Bitte geben Sie die vollständigen Exchange-Konfigurationsinformationen ein","trading-assistant.validation.testConnectionRequired":'Bitte klicken Sie zuerst auf die Schaltfläche "Verbindung testen" und stellen Sie sicher, dass die Verbindung erfolgreich ist',"trading-assistant.validation.testConnectionFailed":"Verbindungstest fehlgeschlagen, bitte überprüfen Sie die Konfiguration und testen Sie erneut","trading-assistant.validation.credentialRequired":"Bitte fügen Sie zuerst die Börsenanmeldedaten im Persönlichen Zentrum hinzu und testen Sie sie","trading-assistant.validation.strategyNameRequired":"Bitte geben Sie einen Richtliniennamen ein","trading-assistant.validation.symbolRequired":"Bitte wählen Sie ein Handelspaar aus","trading-assistant.validation.initialCapitalRequired":"Bitte geben Sie den Anlagebetrag ein","trading-assistant.validation.leverageRequired":"Bitte geben Sie die Leverage Ratio ein","trading-assistant.validation.emailInvalid":"Ungültige E-Mail-Adresse","trading-assistant.validation.notifyChannelRequired":"Bitte wählen Sie mindestens einen Benachrichtigungskanal aus","trading-assistant.table.time":"Zeit","trading-assistant.table.type":"Typ","trading-assistant.table.price":"Preis","trading-assistant.table.amount":"Menge","trading-assistant.table.value":"Betrag","trading-assistant.table.commission":"Bearbeitungsgebühr","trading-assistant.table.symbol":"Handelspaar","trading-assistant.table.side":"Richtung","trading-assistant.table.size":"Positionsmenge","trading-assistant.table.entryPrice":"Eröffnungspreis","trading-assistant.table.currentPrice":"aktueller Preis","trading-assistant.table.unrealizedPnl":"nicht realisierter Gewinn oder Verlust","trading-assistant.table.pnlPercent":"Gewinn- und Verlustquote","trading-assistant.table.buy":"kaufen","trading-assistant.table.sell":"verkaufen","trading-assistant.table.long":"Geh lange","trading-assistant.table.short":"kurz","trading-assistant.table.noPositions":"Noch keine Stellen","trading-assistant.detail.title":"Strategiedetails","trading-assistant.detail.strategyName":"Richtlinienname","trading-assistant.detail.strategyType":"Strategietyp","trading-assistant.detail.status":"Status","trading-assistant.detail.tradingMode":"Handelsmodell","trading-assistant.detail.exchange":"Austausch","trading-assistant.detail.initialCapital":"Anfangskapital","trading-assistant.detail.totalInvestment":"Gesamtinvestitionsbetrag","trading-assistant.detail.currentEquity":"Aktuelles Nettovermögen","trading-assistant.detail.totalPnl":"Gesamtgewinn und -verlust","trading-assistant.detail.indicatorName":"Indikatorname","trading-assistant.detail.maxLeverage":"Maximale Hebelwirkung","trading-assistant.detail.decideInterval":"Entscheidungsintervall","trading-assistant.detail.symbols":"Transaktionsobjekt","trading-assistant.detail.createdAt":"Schöpfungszeit","trading-assistant.detail.updatedAt":"Aktualisierungszeit","trading-assistant.detail.llmConfig":"Konfiguration des KI-Modells","trading-assistant.detail.exchangeConfig":"Exchange-Konfiguration","trading-assistant.detail.provider":"Anbieter","trading-assistant.detail.modelId":"Modell-ID","trading-assistant.detail.close":"Schließen","trading-assistant.detail.loadFailed":"Richtliniendetails konnten nicht abgerufen werden","trading-assistant.equity.noData":"Noch keine Daten zum Vermögen","trading-assistant.equity.equity":"Nettovermögen","trading-assistant.exchange.tradingMode":"Handelsmodell","trading-assistant.exchange.virtual":"simulierter Handel","trading-assistant.exchange.live":"Echte Transaktion","trading-assistant.exchange.selectExchange":"Austausch auswählen","trading-assistant.exchange.walletAddress":"Wallet-Adresse","trading-assistant.exchange.walletAddressPlaceholder":"Bitte geben Sie Ihre Wallet-Adresse ein (beginnend mit 0x)","trading-assistant.exchange.privateKey":"privater Schlüssel","trading-assistant.exchange.privateKeyPlaceholder":"Bitte geben Sie den privaten Schlüssel ein (64 Zeichen)","trading-assistant.exchange.testConnection":"Testverbindung","trading-assistant.exchange.connectionSuccess":"Verbindung erfolgreich","trading-assistant.exchange.connectionFailed":"Verbindung fehlgeschlagen","trading-assistant.exchange.testFailed":"Verbindungstest fehlgeschlagen","trading-assistant.exchange.fillComplete":"Bitte geben Sie die vollständigen Exchange-Konfigurationsinformationen ein","trading-assistant.strategyTypeOptions.ai":"KI-gesteuerte Strategie","trading-assistant.strategyTypeOptions.indicator":"Technische Indikatorstrategie","trading-assistant.strategyTypeOptions.aiDeveloping":"Die KI-gesteuerte Strategiefunktion befindet sich in der Entwicklung, also bleiben Sie dran","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"KI-gesteuerte Strategiefunktionen sind in der Entwicklung","trading-assistant.indicatorType.trend":"Trend","trading-assistant.indicatorType.momentum":"Schwung","trading-assistant.indicatorType.volatility":"Fluktuation","trading-assistant.indicatorType.volume":"Lautstärke","trading-assistant.indicatorType.custom":"Anpassen","trading-assistant.exchangeNames":{okx:"OKX",binance:"Binance",hyperliquid:"Hyperliquid",blockchaincom:"Blockchain.com",coinbaseexchange:"Coinbase",gate:"Gate.io",mexc:"MEXC",kraken:"Kraken",bitfinex:"Bitfinex",bybit:"Bybit",kucoin:"KuCoin",huobi:"Huobi",bitget:"Bitget",bitmex:"BitMEX",deribit:"Deribit",phemex:"Phemex",bitmart:"BitMart",bitstamp:"Bitstamp",bittrex:"Bittrex",poloniex:"Poloniex",gemini:"Zwillinge",cryptocom:"Crypto.com",bitflyer:"bitFlyer",upbit:"Upbit",bithumb:"Bithumb",coinone:"Coinone",zb:"ZB",lbank:"LBank",bibox:"Bibox",bigone:"BigONE",bitrue:"Bitrue",coinex:"CoinEx",digifinex:"DigiFinex",ftx:"FTX",ftxus:"FTX USA",binanceus:"Binance USA",binancecoinm:"Binance COIN-M",binanceusdm:"Binance USDⓈ-M",deepcoin:"Deepcoin"},"ai-trading-assistant.title":"KI-Handelsassistent","ai-trading-assistant.strategyList":"Strategieliste","ai-trading-assistant.createStrategy":"Richtlinie erstellen","ai-trading-assistant.noStrategy":"Noch keine Strategie","ai-trading-assistant.selectStrategy":"Bitte wählen Sie links eine Strategie aus, um Details anzuzeigen","ai-trading-assistant.startStrategy":"Startstrategie","ai-trading-assistant.stopStrategy":"Stoppstrategie","ai-trading-assistant.editStrategy":"Redaktionelle Strategie","ai-trading-assistant.deleteStrategy":"Richtlinie löschen","ai-trading-assistant.status.running":"Laufen","ai-trading-assistant.status.stopped":"Angehalten","ai-trading-assistant.status.error":"Fehler","ai-trading-assistant.tabs.tradingRecords":"Transaktionsverlauf","ai-trading-assistant.tabs.positions":"Positionsaufzeichnung","ai-trading-assistant.tabs.aiDecisions":"KI-Entscheidungsaufzeichnung","ai-trading-assistant.tabs.equityCurve":"Eigenkapitalkurve","ai-trading-assistant.form.createTitle":"Erstellen Sie KI-Handelsstrategien","ai-trading-assistant.form.editTitle":"Bearbeiten Sie die KI-Handelsstrategie","ai-trading-assistant.form.strategyName":"Richtlinienname","ai-trading-assistant.form.modelId":"KI-Modell","ai-trading-assistant.form.modelIdHint":"Verwenden Sie den OpenRouter-Systemdienst, ohne den API-Schlüssel zu konfigurieren","ai-trading-assistant.form.decideInterval":"Entscheidungsintervall","ai-trading-assistant.form.decideInterval5m":"5 Minuten","ai-trading-assistant.form.decideInterval10m":"10 Minuten","ai-trading-assistant.form.decideInterval30m":"30 Minuten","ai-trading-assistant.form.decideInterval1h":"1 Stunde","ai-trading-assistant.form.decideInterval4h":"4 Stunden","ai-trading-assistant.form.decideInterval1d":"1 Tag","ai-trading-assistant.form.decideInterval1w":"1 Woche","ai-trading-assistant.form.decideIntervalHint":"Das Zeitintervall, in dem die KI Entscheidungen trifft","ai-trading-assistant.form.runPeriod":"Laufzyklus","ai-trading-assistant.form.runPeriodHint":"Die Startzeit und Endzeit des Strategielaufs","ai-trading-assistant.form.startDate":"Startdatum","ai-trading-assistant.form.endDate":"Enddatum","ai-trading-assistant.form.qdtCostTitle":"Anweisungen zum QDT-Abzug","ai-trading-assistant.form.qdtCostHint":"{cost} QDT wird für jede KI-Entscheidung abgezogen. Bitte stellen Sie sicher, dass Ihr Konto über ausreichend QDT-Guthaben verfügt. Während der Umsetzung der Strategie werden für jede Entscheidung Gebühren in Echtzeit abgezogen.","ai-trading-assistant.form.apiKey":"API-Schlüssel","ai-trading-assistant.form.exchange":"Austausch auswählen","ai-trading-assistant.form.secretKey":"Geheimer Schlüssel","ai-trading-assistant.form.passphrase":"Passphrase","ai-trading-assistant.form.testConnection":"Testverbindung","ai-trading-assistant.form.symbol":"Handelspaar","ai-trading-assistant.form.symbolHint":"Wählen Sie das Handelspaar aus, mit dem Sie handeln möchten","ai-trading-assistant.form.initialCapital":"Investierter Betrag (Marge)","ai-trading-assistant.form.leverage":"Nutzen Sie mehrere","ai-trading-assistant.form.timeframe":"Zeitraum","ai-trading-assistant.form.timeframe1m":"1 Minute","ai-trading-assistant.form.timeframe5m":"5 Minuten","ai-trading-assistant.form.timeframe15m":"15 Minuten","ai-trading-assistant.form.timeframe30m":"30 Minuten","ai-trading-assistant.form.timeframe1H":"1 Stunde","ai-trading-assistant.form.timeframe4H":"4 Stunden","ai-trading-assistant.form.timeframe1D":"1 Tag","ai-trading-assistant.form.marketType":"Markttyp","ai-trading-assistant.form.marketTypeFutures":"Vertrag","ai-trading-assistant.form.marketTypeSpot":"Spot","ai-trading-assistant.form.totalPnl":"Gesamtgewinn und -verlust","ai-trading-assistant.form.customPrompt":"Benutzerdefinierte Aufforderungswörter","ai-trading-assistant.form.customPromptHint":"Optional, wird zur Anpassung von KI-Handelsstrategien und Entscheidungslogik verwendet","ai-trading-assistant.form.cancel":"Abbrechen","ai-trading-assistant.form.prev":"Vorheriger Schritt","ai-trading-assistant.form.next":"Nächster Schritt","ai-trading-assistant.form.confirmCreate":"Bestätigen Sie die Erstellung","ai-trading-assistant.form.confirmEdit":"Bestätigen Sie die Änderungen","ai-trading-assistant.messages.createSuccess":"Strategie erfolgreich erstellt","ai-trading-assistant.messages.createFailed":"Richtlinie konnte nicht erstellt werden","ai-trading-assistant.messages.updateSuccess":"Richtlinienaktualisierung erfolgreich","ai-trading-assistant.messages.updateFailed":"Die Aktualisierungsrichtlinie ist fehlgeschlagen","ai-trading-assistant.messages.deleteSuccess":"Richtlinienlöschung erfolgreich","ai-trading-assistant.messages.deleteFailed":"Das Löschen der Richtlinie ist fehlgeschlagen","ai-trading-assistant.messages.startSuccess":"Strategie erfolgreich gestartet","ai-trading-assistant.messages.startFailed":"Die Richtlinie konnte nicht gestartet werden","ai-trading-assistant.messages.stopSuccess":"Die Strategie wurde erfolgreich beendet","ai-trading-assistant.messages.stopFailed":"Die Stoppstrategie ist fehlgeschlagen","ai-trading-assistant.messages.loadFailed":"Richtlinienliste konnte nicht abgerufen werden","ai-trading-assistant.messages.loadDecisionsFailed":"Der KI-Entscheidungsdatensatz konnte nicht abgerufen werden","ai-trading-assistant.messages.deleteConfirm":"Sind Sie sicher, dass Sie diese Richtlinie löschen möchten? Dieser Vorgang ist irreversibel.","ai-trading-assistant.placeholders.inputStrategyName":"Bitte geben Sie einen Richtliniennamen ein","ai-trading-assistant.placeholders.selectModelId":"Bitte wählen Sie ein KI-Modell aus","ai-trading-assistant.placeholders.selectDecideInterval":"Bitte wählen Sie ein Entscheidungsintervall aus","ai-trading-assistant.placeholders.startTime":"Startzeit","ai-trading-assistant.placeholders.endTime":"Endzeit","ai-trading-assistant.placeholders.inputApiKey":"Bitte geben Sie den API-Schlüssel ein","ai-trading-assistant.placeholders.selectExchange":"Bitte wählen Sie einen Austausch aus","ai-trading-assistant.placeholders.inputSecretKey":"Bitte geben Sie den Geheimschlüssel ein","ai-trading-assistant.placeholders.inputPassphrase":"Bitte geben Sie die Passphrase ein","ai-trading-assistant.placeholders.selectSymbol":"Bitte wählen Sie ein Handelspaar aus, zum Beispiel: BTC/USDT","ai-trading-assistant.placeholders.selectTimeframe":"Bitte wählen Sie einen Zeitraum aus","ai-trading-assistant.placeholders.inputCustomPrompt":"Bitte geben Sie ein benutzerdefiniertes Aufforderungswort ein (optional)","ai-trading-assistant.validation.strategyNameRequired":"Bitte geben Sie einen Richtliniennamen ein","ai-trading-assistant.validation.modelIdRequired":"Bitte wählen Sie ein KI-Modell aus","ai-trading-assistant.validation.runPeriodRequired":"Bitte wählen Sie einen Laufzyklus aus","ai-trading-assistant.validation.apiKeyRequired":"Bitte geben Sie den API-Schlüssel ein","ai-trading-assistant.validation.exchangeRequired":"Bitte wählen Sie einen Austausch aus","ai-trading-assistant.validation.secretKeyRequired":"Bitte geben Sie den Geheimschlüssel ein","ai-trading-assistant.validation.symbolRequired":"Bitte wählen Sie ein Handelspaar aus","ai-trading-assistant.validation.initialCapitalRequired":"Bitte geben Sie den Anlagebetrag ein","ai-trading-assistant.table.time":"Zeit","ai-trading-assistant.table.type":"Typ","ai-trading-assistant.table.price":"Preis","ai-trading-assistant.table.amount":"Menge","ai-trading-assistant.table.value":"Betrag","ai-trading-assistant.table.symbol":"Handelspaar","ai-trading-assistant.table.side":"Richtung","ai-trading-assistant.table.size":"Positionsmenge","ai-trading-assistant.table.entryPrice":"Eröffnungspreis","ai-trading-assistant.table.currentPrice":"aktueller Preis","ai-trading-assistant.table.unrealizedPnl":"nicht realisierter Gewinn oder Verlust","ai-trading-assistant.table.profit":"Gewinn und Verlust","ai-trading-assistant.table.openLong":"Lange geöffnet","ai-trading-assistant.table.closeLong":"Pinduo","ai-trading-assistant.table.openShort":"Kurz öffnen","ai-trading-assistant.table.closeShort":"leer","ai-trading-assistant.table.addLong":"Gadot","ai-trading-assistant.table.addShort":"kurz hinzufügen","ai-trading-assistant.table.closeShortProfit":"Nehmen Sie Gewinne aus Short-Positionen mit","ai-trading-assistant.table.closeShortStop":"Stop-Loss","ai-trading-assistant.table.closeLongProfit":"Halten Sie lange inne und nehmen Sie Gewinn mit","ai-trading-assistant.table.closeLongStop":"Stop-Loss","ai-trading-assistant.table.buy":"kaufen","ai-trading-assistant.table.sell":"verkaufen","ai-trading-assistant.table.long":"Geh lange","ai-trading-assistant.table.short":"kurz","ai-trading-assistant.table.hold":"halten","ai-trading-assistant.table.reasoning":"Analysegrund","ai-trading-assistant.table.decisions":"Entscheidungsfindung","ai-trading-assistant.table.riskAssessment":"Risikobewertung","ai-trading-assistant.table.confidence":"Vertrauen","ai-trading-assistant.table.totalRecords":"Insgesamt {total} Datensätze","ai-trading-assistant.table.noPositions":"Noch keine Stellen","ai-trading-assistant.detail.title":"Strategiedetails","ai-trading-assistant.equity.noData":"Noch keine Daten zum Vermögen","ai-trading-assistant.equity.equity":"Nettovermögen","ai-trading-assistant.exchange.testFailed":"Verbindungstest fehlgeschlagen","ai-trading-assistant.exchange.connectionSuccess":"Verbindung erfolgreich","ai-trading-assistant.exchange.connectionFailed":"Verbindung fehlgeschlagen","ai-trading-assistant.form.advancedSettings":"Erweiterte Einstellungen","ai-trading-assistant.form.orderMode":"Bestellmodus","ai-trading-assistant.form.orderModeMaker":"Hersteller","ai-trading-assistant.form.orderModeTaker":"Marktpreis (Taker)","ai-trading-assistant.form.orderModeHint":"Im Pending-Order-Modus werden Limit-Orders verwendet und die Bearbeitungsgebühr ist niedriger; Der Marktpreismodus wird sofort ausgeführt und die Bearbeitungsgebühr ist höher.","ai-trading-assistant.form.makerWaitSec":"Wartezeit für ausstehende Bestellungen (Sekunden)","ai-trading-assistant.form.makerWaitSecHint":"Die Zeit, die nach der Bestellung auf die Transaktion gewartet wird. Brechen Sie ab und versuchen Sie es nach einer Zeitüberschreitung erneut.","ai-trading-assistant.form.makerRetries":"Anzahl der Wiederholungsversuche für ausstehende Bestellungen","ai-trading-assistant.form.makerRetriesHint":"Die maximale Anzahl von Wiederholungsversuchen, wenn eine ausstehende Order nicht ausgeführt wird","ai-trading-assistant.form.fallbackToMarket":"Die ausstehende Bestellung schlägt fehl und der Marktpreis wird herabgestuft.","ai-trading-assistant.form.fallbackToMarketHint":"Wenn die ausstehende Eröffnungs-/Schließorder nicht abgeschlossen wurde, wird angegeben, ob sie auf eine Marktorder herabgestuft werden soll, um sicherzustellen, dass die Transaktion abgeschlossen wird.","ai-trading-assistant.form.marginMode":"Margin-Modus","ai-trading-assistant.form.marginModeCross":"Volles Lager","ai-trading-assistant.form.marginModeIsolated":"Isolierte Lage","ai-analysis.title":"Quantenhandelsmaschine","ai-analysis.system.online":"online","ai-analysis.system.agents":"Agent","ai-analysis.system.active":"aktiv","ai-analysis.system.stage":"Bühne","ai-analysis.panel.roster":"Agentenaufstellung","ai-analysis.panel.thinking":"Denken...","ai-analysis.panel.done":"Komplett","ai-analysis.panel.standby":"Standby","ai-analysis.input.title":"Quantenhandelsmaschine","ai-analysis.input.placeholder":"Zielwert auswählen (z. B. BTC/USDT)","ai-analysis.input.watchlist":"Optionale Bestände","ai-analysis.input.start":"Analyse starten","ai-analysis.input.recent":"Letzte Aufgaben:","ai-analysis.vis.stage":"Bühne","ai-analysis.vis.processing":"Verarbeitung","ai-analysis.result.complete":"Analyse abgeschlossen","ai-analysis.result.signal":"Schlusssignal","ai-analysis.result.confidence":"Vertrauen:","ai-analysis.result.new":"neue Analyse","ai-analysis.result.full":"Vollständigen Bericht ansehen","ai-analysis.logs.title":"Systemprotokoll","ai-analysis.modal.title":"vertraulicher Bericht","ai-analysis.modal.fundamental":"Fundamentalanalyse","ai-analysis.modal.technical":"Technische Analyse","ai-analysis.modal.sentiment":"Emotionale Analyse","ai-analysis.modal.risk":"Risikobewertung","ai-analysis.stage.idle":"Standby","ai-analysis.stage.1":"Phase Eins: Mehrdimensionale Analyse","ai-analysis.stage.2":"Phase Zwei: Lang-Kurz-Debatte","ai-analysis.stage.3":"Phase drei: Strategische Planung","ai-analysis.stage.4":"Die vierte Stufe: Überprüfung der Risikokontrolle","ai-analysis.stage.complete":"Komplett","ai-analysis.agent.investment_director":"Investmentdirektor","ai-analysis.agent.role.investment_director":"Umfassende Analyse und abschließendes Fazit","ai-analysis.agent.market":"Marktanalyst","ai-analysis.agent.role.market":"Technologie- und Marktdaten","ai-analysis.agent.fundamental":"Fundamentalanalytiker","ai-analysis.agent.role.fundamental":"Finanzen und Bewertung","ai-analysis.agent.technical":"Technischer Analyst","ai-analysis.agent.role.technical":"Technische Indikatoren und Diagramme","ai-analysis.agent.news":"Nachrichtenanalyst","ai-analysis.agent.role.news":"Globaler Nachrichtenfilter","ai-analysis.agent.sentiment":"Stimmungsanalytiker","ai-analysis.agent.role.sentiment":"Sozial und emotional","ai-analysis.agent.risk":"Risikoanalytiker","ai-analysis.agent.role.risk":"Grundlegender Risikocheck","ai-analysis.agent.bull":"bullischer Forscher","ai-analysis.agent.role.bull":"Wachstumskatalysator-Bergbau","ai-analysis.agent.bear":"bärischer Forscher","ai-analysis.agent.role.bear":"Risiko- und Fehlersuche","ai-analysis.agent.manager":"Forschungsmanager","ai-analysis.agent.role.manager":"Debattenmoderator","ai-analysis.agent.trader":"Händler","ai-analysis.agent.role.trader":"Führungsstratege","ai-analysis.agent.risky":"aktivistischer Analytiker","ai-analysis.agent.role.risky":"aggressive Strategie","ai-analysis.agent.neutral":"Bilanzanalytiker","ai-analysis.agent.role.neutral":"Ausgleichsstrategie","ai-analysis.agent.safe":"konservativer Analytiker","ai-analysis.agent.role.safe":"konservative Strategie","ai-analysis.agent.cro":"Risikokontrollmanager (CRO)","ai-analysis.agent.role.cro":"letzte Entscheidungsbefugnis","ai-analysis.script.market":"OHLCV-Daten werden von wichtigen Börsen abgerufen...","ai-analysis.script.fundamental":"Quartalsfinanzberichte abrufen...","ai-analysis.script.technical":"Analyse technischer Indikatoren und Chartmuster...","ai-analysis.script.news":"Globale Finanznachrichten scannen...","ai-analysis.script.sentiment":"Analyse von Social-Media-Trends...","ai-analysis.script.risk":"Berechnung der historischen Volatilität...","invite.inviteLink":"Einladungslink","invite.copy":"Link kopieren","invite.copySuccess":"Erfolgreich kopieren!","invite.copyFailed":"Der Kopiervorgang ist fehlgeschlagen. Bitte manuell kopieren","invite.noInviteLink":"Der Einladungslink wurde nicht generiert","invite.totalInvites":"Kumulierte Einladungen","invite.totalReward":"Kumulative Belohnungen","invite.rules":"Einladungsregeln","invite.rule1":"Jedes Mal, wenn Sie einen Freund erfolgreich zur Registrierung einladen, erhalten Sie eine Belohnung","invite.rule2":"Wenn der eingeladene Freund die erste Transaktion abschließt, erhalten Sie zusätzliche Belohnungen","invite.rule3":"Einladungsprämien werden direkt an Ihr Konto gesendet","invite.inviteList":"Einladungsliste","invite.tasks":"Missionszentrum","invite.inviteeName":"Eingeladen","invite.inviteTime":"Einladungszeit","invite.status":"Status","invite.reward":"Belohnung","invite.active":"aktiv","invite.inactive":"Nicht aktiviert","invite.completed":"Abgeschlossen","invite.claimed":"Erhalten","invite.pending":"Zu vervollständigen","invite.goToTask":"zu vervollständigen","invite.claimReward":"Belohnungen einfordern","invite.verify":"Verifizierung abgeschlossen","invite.verifySuccess":"Verifizierung erfolgreich! Aufgabe abgeschlossen","invite.verifyNotCompleted":"Die Aufgabe wurde noch nicht abgeschlossen. Bitte schließen Sie die Aufgabe zuerst ab","invite.verifyFailed":"Die Verifizierung ist fehlgeschlagen. Bitte versuchen Sie es später noch einmal","invite.claimSuccess":"{reward} QDT erfolgreich erhalten!","invite.claimFailed":"Fehler beim Sammeln. Bitte versuchen Sie es später noch einmal","invite.totalRecords":"Insgesamt {total} Datensätze","invite.task.twitter.title":"Retweeten an X (Twitter)","invite.task.twitter.desc":"Teilen Sie unsere offiziellen Tweets mit Ihrem X-Konto (Twitter).","invite.task.youtube.title":"Folgen Sie unserem YouTube-Kanal","invite.task.youtube.desc":"Abonnieren und folgen Sie unserem offiziellen YouTube-Kanal","invite.task.telegram.title":"Treten Sie der Telegram-Gruppe bei","invite.task.telegram.desc":"Treten Sie unserer offiziellen Telegram-Community-Gruppe bei","invite.task.discord.title":"Treten Sie einem Discord-Server bei","invite.task.discord.desc":"Treten Sie unserem Discord-Community-Server bei",message:"-","layouts.usermenu.dialog.title":"Informationen","layouts.usermenu.dialog.content":"Möchten Sie sich wirklich abmelden?","layouts.userLayout.title":"Finden Sie die Wahrheit in der Unsicherheit","dashboard.indicator.boundary.message":"Note: The indicator script only computes plots + buy/sell signals. Position sizing, risk, scaling, fees/slippage belong to execution config.","dashboard.indicator.boundary.indicatorRule":"Keep the script to buy/sell only (and set df['buy']/df['sell']). Do NOT implement position management, TP/SL, scaling in the script.","dashboard.indicator.boundary.backtestRule":"Rule: If a bar has a main signal (buy/sell → open/close/reverse), scaling in/out is skipped on the same bar.","dashboard.indicator.guide.title":"Python Indicator & Strategy Development Guide","dashboard.indicator.guide.intro":"This platform supports writing custom technical indicators and trading signals using Python. The system includes built-in pandas and numpy data analysis libraries. You can use standard DataFrame operations to process K-line data and draw charts or mark buy/sell signals.","dashboard.indicator.guide.section1.title":"1. Runtime Environment & Predefined Variables","dashboard.indicator.guide.section1.env":"Your code runs in a browser-based Python environment (Pyodide).","dashboard.indicator.guide.section1.libs":"Pre-installed Libraries","dashboard.indicator.guide.section1.libsDesc":"The following libraries are imported by default, no need to import again:","dashboard.indicator.guide.section1.libsList":"pandas (pd), numpy (np), math, json","dashboard.indicator.guide.section1.data":"Input Data: df","dashboard.indicator.guide.section1.dataDesc":"The system automatically converts current K-line data into a Pandas DataFrame object, variable name is df.","dashboard.indicator.guide.section1.dataColumns":"df contains the following columns (all float type):","dashboard.indicator.guide.section1.dataColumnsList":"time (timestamp, seconds), open, high, low, close, volume","dashboard.indicator.guide.section1.dataNote":"Data index is arranged from old to new (0 is the earliest data, last row is the latest data).","dashboard.indicator.guide.section1.dataIndex":"Important: df index is timestamp (DatetimeIndex), please preserve the index, avoid using .values which loses the index.","dashboard.indicator.guide.section2.title":"2. Parameter Definition","dashboard.indicator.guide.section2.desc":"You can define variables as parameters at the beginning of your code. The system will try to parse statements like variable = value as adjustable parameters.","dashboard.indicator.guide.section2.example":"Parameter Example","dashboard.indicator.guide.section2.exampleCode":"span = 20 or multiplier = 2.0","dashboard.indicator.guide.section3.title":"3. Backtest Signal Setup (Important!)","dashboard.indicator.guide.section3.desc":"If you want your indicator to support backtesting, you must set the following two columns in your code:","dashboard.indicator.guide.section3.backtestRequired":"Required for Backtesting:","dashboard.indicator.guide.section3.backtestBuySignal":"df['buy_signal'] - Boolean Series, True indicates buy signal","dashboard.indicator.guide.section3.backtestSellSignal":"df['sell_signal'] - Boolean Series, True indicates sell signal","dashboard.indicator.guide.section3.backtestExample":"Example:","dashboard.indicator.guide.section3.backtestExampleCode":"df['buy_signal'] = condition_buy
df['sell_signal'] = condition_sell","dashboard.indicator.guide.section3.backtestNote":"Note: Even if you only set output.signals for chart display, you must set these two columns to enable backtesting.","dashboard.indicator.guide.section4.title":"4. Output Requirements: output","dashboard.indicator.guide.section4.desc":"At the end of code execution, you must define a dictionary named output to tell the chart how to display results.","dashboard.indicator.guide.section4.fields":"The output dictionary contains the following fields:","dashboard.indicator.guide.section4.plots":"plots - For drawing lines (e.g., moving averages, RSI)","dashboard.indicator.guide.section4.signals":"signals - For marking buy/sell signals (e.g., arrows, labels)","dashboard.indicator.guide.section4.name":"name - Indicator name (optional)","dashboard.indicator.guide.section4.calculatedVars":"calculatedVars - Calculated variables (optional, for displaying additional information)","dashboard.indicator.guide.section5.title":"5. Plot Configuration (Plots)","dashboard.indicator.guide.section5.desc":"Each object in the plots list represents a line.","dashboard.indicator.guide.section5.table.field":"Field","dashboard.indicator.guide.section5.table.type":"Type","dashboard.indicator.guide.section5.table.required":"Required","dashboard.indicator.guide.section5.table.requiredYes":"Yes","dashboard.indicator.guide.section5.table.requiredNo":"No","dashboard.indicator.guide.section5.table.desc":"Description","dashboard.indicator.guide.section5.table.name":"The name of the indicator line, displayed in the legend","dashboard.indicator.guide.section5.table.data":"Data list, length must match the number of rows in df. Recommended to use series.tolist()","dashboard.indicator.guide.section5.table.color":"Line color (Hex format, e.g. '#ff0000'). If not filled, the system will automatically assign","dashboard.indicator.guide.section5.table.typeDesc":"Chart type, default is 'line'","dashboard.indicator.guide.section5.table.overlay":"Important. True means display on main chart (with K-line), False means display on sub-chart (independent area)","dashboard.indicator.guide.section5.example":"Example: Draw Simple Moving Average (SMA)","dashboard.indicator.guide.section5.exampleCalc":"Calculate SMA","dashboard.indicator.guide.section5.exampleOutput":"Construct Output","dashboard.indicator.guide.section5.exampleOverlay":"Display on main chart","dashboard.indicator.guide.section6.title":"6. Signal Markers (Signals)","dashboard.indicator.guide.section6.desc":"signals are used to mark buy/sell points on specific K-lines through icons or text. Note: This is only for chart display. The backtest system uses df['buy_signal'] and df['sell_signal'].","dashboard.indicator.guide.section6.table.type":"Signal type: 'buy' (buy, marked below K-line) or 'sell' (sell, marked above K-line)","dashboard.indicator.guide.section6.table.data":"Signal data list. Fill price value at signal positions, fill None (or np.nan) at non-signal positions","dashboard.indicator.guide.section6.table.text":'Text displayed on the label (e.g. "B", "S", "Buy", "Sell")',"dashboard.indicator.guide.section6.table.color":"Marker color","dashboard.indicator.guide.section6.hint":"The system automatically handles positioning.","dashboard.indicator.guide.section6.buy":"Markers will be automatically positioned below the Low of the current K-line","dashboard.indicator.guide.section6.sell":"Markers will be automatically positioned above the High of the current K-line","dashboard.indicator.guide.section6.example":"Example: Draw Buy/Sell Signals","dashboard.indicator.guide.section6.exampleInit":"Initialize signal list, fill all with None","dashboard.indicator.guide.section6.exampleLogic":"Simple logic: mark buy when close price is greater than open price","dashboard.indicator.guide.section6.exampleNote":"In actual logic, please use loops or vectorized operations","dashboard.indicator.guide.section6.examplePrice":"Record price","dashboard.indicator.guide.section6.exampleText":"Buy","dashboard.indicator.guide.section7.title":"7. Complete Code Examples","dashboard.indicator.guide.section7.exampleA":"Example A: Dual EMA Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleACode":'# 1. Calculate indicators
df[\'ema_fast\'] = df[\'close\'].ewm(span=5, adjust=False).mean()
df[\'ema_slow\'] = df[\'close\'].ewm(span=13, adjust=False).mean()

# 2. Calculate crossover signals
cross_up = (df[\'ema_fast\'] > df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) <= df[\'ema_slow\'].shift(1))
cross_down = (df[\'ema_fast\'] < df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) >= df[\'ema_slow\'].shift(1))

# 3. 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = cross_up
df[\'close_long\'] = cross_down
df[\'open_short\'] = cross_down
df[\'close_short\'] = cross_up

# 4. Generate signal data for chart display
buy_signals = [df[\'low\'].iloc[i] * 0.995 if cross_up.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if cross_down.iloc[i] else None for i in range(len(df))]

# 5. Build output
output = {
"name": "Dual EMA Strategy",
"plots": [
{"name": "EMA 5", "data": df[\'ema_fast\'].tolist(), "color": "#FF6B6B", "overlay": True},
{"name": "EMA 13", "data": df[\'ema_slow\'].tolist(), "color": "#4ECDC4", "overlay": True}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section7.exampleB":"Example B: Bollinger Bands - Chart Display Only","dashboard.indicator.guide.section7.exampleBCode":'# Calculate Bollinger Bands (chart display only, no backtesting)
length = 20
mult = 2.0
df[\'sma\'] = df[\'close\'].rolling(length).mean()
df[\'std\'] = df[\'close\'].rolling(length).std()
df[\'upper\'] = df[\'sma\'] + mult * df[\'std\']
df[\'lower\'] = df[\'sma\'] - mult * df[\'std\']

output = {
"name": "Bollinger Bands",
"plots": [
{"name": "Upper", "data": df[\'upper\'].tolist(), "color": "#FF5252", "overlay": True},
{"name": "Middle", "data": df[\'sma\'].tolist(), "color": "#2196F3", "overlay": True},
{"name": "Lower", "data": df[\'lower\'].tolist(), "color": "#00E676", "overlay": True}
]
}',"dashboard.indicator.guide.section7.exampleC":"Example C: RSI Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleCCode":'# Calculate RSI
delta = df[\'close\'].diff()
up = delta.clip(lower=0)
down = -1 * delta.clip(upper=0)
ema_up = up.ewm(com=13, adjust=False).mean()
ema_down = down.ewm(com=13, adjust=False).mean()
rs = ema_up / ema_down
df[\'rsi\'] = 100 - (100 / (1 + rs))

# Generate trading signals
buy_condition = df[\'rsi\'] < 30 # Oversold buy
sell_condition = df[\'rsi\'] > 70 # Overbought sell

# 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = buy_condition
df[\'close_long\'] = sell_condition
df[\'open_short\'] = sell_condition
df[\'close_short\'] = buy_condition

# Generate chart signals
buy_signals = [df[\'low\'].iloc[i] * 0.995 if buy_condition.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if sell_condition.iloc[i] else None for i in range(len(df))]

output = {
"name": "RSI Strategy",
"plots": [
{"name": "RSI", "data": df[\'rsi\'].tolist(), "color": "#9C27B0", "overlay": False},
{"name": "Overbought", "data": [70] * len(df), "color": "#FF5252", "style": "dashed", "overlay": False},
{"name": "Oversold", "data": [30] * len(df), "color": "#00E676", "style": "dashed", "overlay": False}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section6.param":"Parameters","dashboard.indicator.guide.section6.calc":"Calculate","dashboard.indicator.guide.section6.output":"Output","dashboard.indicator.guide.section6.generate":"Generate signal data (initialize with None)","dashboard.indicator.guide.section6.subchart":"Display on sub-chart","dashboard.indicator.guide.section8.title":"8. Frequently Asked Questions (FAQ)","dashboard.indicator.guide.section8.q1":"Q: Why can't my indicator be backtested?","dashboard.indicator.guide.section8.a1":"A: The backtest system requires NEW signal columns: df['open_long'], df['close_long'], df['open_short'], df['close_short'] (boolean). Even if you set output.signals for chart display, you must set these columns to enable backtesting.","dashboard.indicator.guide.section8.q2":"Q: Data length mismatch?","dashboard.indicator.guide.section8.a2":"A: The data list in plots and signals must have exactly the same length as the K-line data. If you use df['xxx'].tolist(), there is usually no problem.","dashboard.indicator.guide.section8.q3":"Q: How to handle NaN (empty values)?","dashboard.indicator.guide.section8.a3":"A: Pandas calculations (such as rolling mean) will produce NaN at the beginning. The system will automatically convert NaN to null for chart rendering. You don't need to manually clean it, but if you need specific logic, you can use df.fillna(0) or other methods.","dashboard.indicator.guide.section8.q4":"Q: Index mismatch causing all signals to be NaN?","dashboard.indicator.guide.section8.a4":"A: Please ensure you preserve the original df index (timestamp). Avoid using .values to create new Series. Use columns directly like df['close'] for operations.","dashboard.indicator.guide.section8.q5":"Q: Can I use third-party network libraries?","dashboard.indicator.guide.section8.a5":"A: No. The runtime environment is a browser sandbox and cannot use libraries like requests to request external APIs, nor can it install additional pip packages. Limited to built-in libraries such as pandas, numpy, math, json.","dashboard.indicator.guide.section8.q6":"Q: How to debug code?","dashboard.indicator.guide.section8.a6":"A: If the chart does not display indicators, it is usually because the Python code has an error. Please check for syntax errors or array index out of bounds. It is recommended to debug the algorithm logic in a local Python environment first, then copy it in.","dashboard.indicator.guide.section8.q7":"Q: Backtest shows 0 signals?","dashboard.indicator.guide.section8.a7":"A: Please check the data type of df['open_long']/df['close_long']/df['open_short']/df['close_short']. They should be boolean (True/False), not numeric. Use condition.fillna(False).astype(bool) to ensure correct type.","dashboard.indicator.backtest.commissionHint":"Charged on notional value (incl. leverage) per trade; both entry & exit are deducted from balance.","dashboard.indicator.backtest.historyTitle":"Backtest History","dashboard.indicator.backtest.historyRefresh":"Refresh","dashboard.indicator.backtest.historyView":"View","dashboard.indicator.backtest.historyNoData":"No backtest history","dashboard.indicator.backtest.historyUseCurrent":"Only current symbol/timeframe","dashboard.indicator.backtest.historyFilterSymbol":"Symbol","dashboard.indicator.backtest.historyFilterTimeframe":"Timeframe","dashboard.indicator.backtest.historyApply":"Apply filters","dashboard.indicator.backtest.historyAIAnalyze":"AI Analyze","dashboard.indicator.backtest.historyAIAnalyzeTitle":"AI Suggestions","dashboard.indicator.backtest.historyNoAIResult":"No AI analysis result","dashboard.indicator.backtest.historyRunId":"Run ID","dashboard.indicator.backtest.historyCreatedAt":"Time","dashboard.indicator.backtest.historyRange":"Range","dashboard.indicator.backtest.historyStatus":"Status","dashboard.indicator.backtest.historyStatusSuccess":"Success","dashboard.indicator.backtest.historyStatusFailed":"Failed","dashboard.indicator.backtest.historyActions":"Actions","dashboard.indicator.backtest.hint.entryPctMax":"Max entry: {maxPct}% (reserve budget for future scale-ins)","trading-assistant.exchange.ipWhitelistTip":"Please add the following IPs to the whitelist in your exchange API settings:","signal-robot.title":"Signal Robot Console","signal-robot.createBot":"Create New Bot","signal-robot.search.nameOrSymbol":"Name/Symbol","signal-robot.search.placeholder":"Search bot name or symbol","signal-robot.search.status":"Status","signal-robot.search.statusAll":"All","signal-robot.search.statusRunning":"Running","signal-robot.search.statusPaused":"Paused","signal-robot.search.query":"Query","signal-robot.search.reset":"Reset","signal-robot.table.botName":"Bot Name","signal-robot.table.symbolTimeframe":"Symbol/Timeframe","signal-robot.table.triggerStrategy":"Trigger Strategy","signal-robot.table.notificationChannels":"Notification Channels","signal-robot.table.status":"Status","signal-robot.table.action":"Action","signal-robot.table.triggerConditions":"{count} trigger conditions","signal-robot.table.monitoring":"Monitoring","signal-robot.table.paused":"Paused","signal-robot.table.edit":"Edit","signal-robot.table.pause":"Pause","signal-robot.table.start":"Start","signal-robot.table.delete":"Delete","signal-robot.table.deleteConfirm":"Are you sure you want to delete this bot?","signal-robot.table.deleteSuccess":"Deleted successfully","signal-robot.table.startSuccess":"Bot started","signal-robot.table.pauseSuccess":"Bot paused","signal-robot.channel.telegram":"Telegram","signal-robot.channel.discord":"Discord","signal-robot.channel.email":"Email","signal-robot.channel.webhook":"Webhook","signal-robot.channel.browser":"Browser Push","signal-robot.modal.createTitle":"Create New Signal Robot","signal-robot.modal.editTitle":"Edit Signal Robot","signal-robot.modal.step.basic":"Basic Settings","signal-robot.modal.step.entry":"Entry Strategy","signal-robot.modal.step.position":"Position Management","signal-robot.modal.step.risk":"Risk Control","signal-robot.modal.step.notify":"Notification Config","signal-robot.modal.prev":"Previous","signal-robot.modal.next":"Next","signal-robot.modal.preview":"Preview Backtest","signal-robot.modal.complete":"Complete & Run","signal-robot.modal.saveSuccess":"Saved successfully","signal-robot.modal.previewDeveloping":"Preview feature is under development...","signal-robot.modal.basicInfoRequired":"Please complete basic information","signal-robot.basic.alert":"Set basic information for the bot","signal-robot.basic.title":"Basic Information","signal-robot.basic.botName":"Bot Name","signal-robot.basic.botNamePlaceholder":"e.g.: BTC SuperTrend Strategy","signal-robot.basic.symbol":"Trading Pair","signal-robot.basic.symbolPlaceholder":"Select from watchlist","signal-robot.basic.noWatchlist":"No watchlist items, please add in market page first","signal-robot.basic.timeframe":"K-Line Period","signal-robot.basic.timeframe15m":"15 Minutes","signal-robot.basic.timeframe30m":"30 Minutes","signal-robot.basic.timeframe1h":"1 Hour","signal-robot.basic.timeframe4h":"4 Hours","signal-robot.basic.timeframe1d":"1 Day","signal-robot.basic.autoNameSuggestion":"{symbol} Signal Robot","signal-robot.entry.alert":"Trigger entry signal when all conditions below are met","signal-robot.entry.condition":"Condition {index}","signal-robot.entry.indicator":"Indicator","signal-robot.entry.indicatorSupertrend":"SuperTrend","signal-robot.entry.indicatorEma":"EMA (Exponential Moving Average)","signal-robot.entry.indicatorRsi":"RSI (Relative Strength Index)","signal-robot.entry.indicatorMacd":"MACD","signal-robot.entry.indicatorBollinger":"Bollinger Bands","signal-robot.entry.atrPeriod":"ATR Period","signal-robot.entry.multiplier":"Multiplier","signal-robot.entry.triggerSignal":"Trigger Signal","signal-robot.entry.signalTrendBullish":"Trend Bullish","signal-robot.entry.signalTrendBearish":"Trend Bearish","signal-robot.entry.signalIsUptrend":"Is Uptrend","signal-robot.entry.signalIsDowntrend":"Is Downtrend","signal-robot.entry.period":"Period","signal-robot.entry.compareCondition":"Compare Condition","signal-robot.entry.priceAbove":"Price > EMA (Price Above)","signal-robot.entry.priceBelow":"Price < EMA (Price Below)","signal-robot.entry.crossUp":"Price Crosses Above EMA (Golden Cross)","signal-robot.entry.crossDown":"Price Crosses Below EMA (Death Cross)","signal-robot.entry.compare":"Compare","signal-robot.entry.greaterThan":"Greater Than","signal-robot.entry.lessThan":"Less Than","signal-robot.entry.crossUpShort":"Cross Up","signal-robot.entry.crossDownShort":"Cross Down","signal-robot.entry.threshold":"Threshold","signal-robot.entry.selectIndicator":"Please select an indicator to configure parameters","signal-robot.entry.addCondition":"Add Condition","signal-robot.position.alert":"Configure initial position size, leverage and pyramiding rules","signal-robot.position.basicTitle":"Basic Position Management","signal-robot.position.initialSize":"Initial Size (Capital %)","signal-robot.position.initialSizeHint":"Recommended 5% - 20%","signal-robot.position.leverage":"Leverage","signal-robot.position.leverageHint":"Please ensure your exchange account supports this leverage","signal-robot.position.maxPyramiding":"Max Pyramiding Times","signal-robot.position.maxPyramidingHint":"0 means no pyramiding","signal-robot.position.pyramidingTitle":"Pyramiding Rules","signal-robot.position.pyramidingEnabled":"Enabled","signal-robot.position.pyramidingDisabled":"Disabled","signal-robot.position.pyramidingCondition":"Pyramiding Trigger Condition","signal-robot.position.priceRisePct":"Price Rises (Long) / Falls (Short)","signal-robot.position.profitPct":"Profit Reaches","signal-robot.position.triggerThreshold":"Trigger Threshold (%)","signal-robot.position.triggerThresholdHint":"e.g. 3%: add position once every 3% rise","signal-robot.position.addSize":"Single Add Size (Capital %)","signal-robot.position.pyramidingDisabledHint":"Pyramiding disabled, only initial position will be executed","signal-robot.risk.alert":"Configure take profit, stop loss and exit rules","signal-robot.risk.stopLossTitle":"Stop Loss","signal-robot.risk.stopLossEnabled":"Enabled","signal-robot.risk.stopLossDisabled":"Disabled","signal-robot.risk.stopLossType":"Stop Loss Type","signal-robot.risk.stopLossFixedPct":"Fixed Percentage","signal-robot.risk.stopLossAtrMultiplier":"ATR Multiplier","signal-robot.risk.stopLossValue":"Value","signal-robot.risk.stopLossFixedHint":"e.g. 2%: stop loss when loss reaches 2%","signal-robot.risk.stopLossAtrHint":"e.g. 2.0: stop loss when price touches ATR*2.0","signal-robot.risk.stopLossDisabledHint":"Stop loss disabled (high risk)","signal-robot.risk.trailingStopTitle":"Trailing Stop","signal-robot.risk.activationProfit":"Activation Profit (%)","signal-robot.risk.activationProfitHint":"Start trailing when profit reaches this level","signal-robot.risk.callbackPct":"Callback (%)","signal-robot.risk.callbackPctHint":"Trigger take profit when price falls from peak by this percentage","signal-robot.risk.trailingStopDisabledHint":"Trailing stop disabled","signal-robot.risk.otherExitTitle":"Other Exit Rules","signal-robot.risk.signalExit":"Allow Signal Exit","signal-robot.risk.signalExitHint":"Close position immediately when reverse signal appears (e.g. close long when short signal appears)","signal-robot.notify.alert":"Configure notification methods when signal is triggered","signal-robot.notify.channelTitle":"Notification Channels","signal-robot.notify.discordWebhook":"Discord Webhook","signal-robot.notify.genericWebhook":"Generic Webhook","signal-robot.notify.webhookUrl":"Webhook URL","signal-robot.notify.webhookUrlPlaceholder":"https://example.com/webhook","signal-robot.notify.discordUrl":"Discord URL","signal-robot.notify.discordUrlPlaceholder":"https://discord.com/api/webhooks/...","signal-robot.operator.greaterThan":"Greater Than","signal-robot.operator.lessThan":"Less Than","signal-robot.operator.equal":"Equal","signal-robot.operator.goldenCross":"Golden Cross","signal-robot.operator.deathCross":"Death Cross","signal-robot.operator.increaseBy":"Increase By","signal-robot.operator.decreaseBy":"Decrease By","signal-robot.indicator.price":"Price","signal-robot.indicator.rsi":"RSI","signal-robot.indicator.kdjK":"KDJ(K)","signal-robot.indicator.kdjJ":"KDJ(J)","signal-robot.indicator.macd":"MACD","signal-robot.indicator.macdHist":"MACD Histogram","signal-robot.indicator.bollingerUp":"Bollinger Upper","signal-robot.indicator.bollingerLow":"Bollinger Lower","signal-robot.indicator.volume":"Volume","signal-robot.indicator.changePct1h":"1H Change %","signal-robot.indicator.changePct24h":"24H Change %","signal-robot.indicator.signalLine":"Signal Line","settings.group.agent_memory":"Gedächtnis/Reflexion","settings.group.reflection_worker":"Automatischer Reflexions-Prüf-Worker","settings.field.ENABLE_AGENT_MEMORY":"Agenten-Gedächtnis aktivieren","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"Vektorsuche aktivieren (lokal)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"Embedding-Dimension","settings.field.AGENT_MEMORY_TOP_K":"Top-K Abrufanzahl","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"Kandidatenfenstergröße","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"Halbwertszeit der Zeitabnahme (Tage)","settings.field.AGENT_MEMORY_W_SIM":"Ähnlichkeitsgewicht","settings.field.AGENT_MEMORY_W_RECENCY":"Aktualitätsgewicht","settings.field.AGENT_MEMORY_W_RETURNS":"Renditegewicht","settings.field.ENABLE_REFLECTION_WORKER":"Automatische Verifikation aktivieren","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"Verifikationsintervall (Sek.)","profile.notifications.title":"Benachrichtigungseinstellungen","profile.notifications.hint":"Konfigurieren Sie Ihre Standard-Benachrichtigungsmethoden, die automatisch beim Erstellen von Asset-Monitoren und Alarmen verwendet werden","profile.notifications.defaultChannels":"Standard-Benachrichtigungskanäle","profile.notifications.browser":"In-App-Benachrichtigung","profile.notifications.email":"E-Mail","profile.notifications.phone":"SMS","profile.notifications.telegramBotToken":"Telegram Bot Token","profile.notifications.telegramBotTokenPlaceholder":"Geben Sie Ihren Telegram Bot Token ein","profile.notifications.telegramBotTokenHint":"Erstellen Sie einen Bot über @BotFather um den Token zu erhalten","profile.notifications.telegramChatId":"Telegram Chat ID","profile.notifications.telegramPlaceholder":"Geben Sie Ihre Telegram Chat ID ein (z.B. 123456789)","profile.notifications.telegramHint":"Senden Sie /start an @userinfobot um Ihre Chat ID zu erhalten","profile.notifications.notifyEmail":"Benachrichtigungs-E-Mail","profile.notifications.emailPlaceholder":"E-Mail-Adresse für Benachrichtigungen","profile.notifications.emailHint":"Verwendet standardmäßig die Konto-E-Mail, Sie können eine andere festlegen","profile.notifications.phonePlaceholder":"Telefonnummer eingeben (z.B. +49151234567)","profile.notifications.phoneHint":"Administrator muss Twilio-Dienst konfigurieren","profile.notifications.discordWebhook":"Discord Webhook","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"Erstellen Sie einen Webhook in den Discord-Servereinstellungen","profile.notifications.webhookUrl":"Webhook URL","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"Benutzerdefinierte Webhook-URL, Benachrichtigungen per POST JSON","profile.notifications.webhookToken":"Webhook Token (Optional)","profile.notifications.webhookTokenPlaceholder":"Bearer Token zur Anfrage-Authentifizierung","profile.notifications.webhookTokenHint":"Wird als Authorization: Bearer Token an Webhook gesendet","profile.notifications.testBtn":"Testbenachrichtigung senden","profile.notifications.saveSuccess":"Benachrichtigungseinstellungen gespeichert","profile.notifications.selectChannel":"Bitte wählen Sie mindestens einen Benachrichtigungskanal","profile.notifications.fillTelegramToken":"Bitte Telegram Bot Token eingeben","profile.notifications.fillTelegram":"Bitte Telegram Chat ID eingeben","profile.notifications.fillEmail":"Bitte Benachrichtigungs-E-Mail eingeben","profile.notifications.testSent":"Testbenachrichtigung gesendet, bitte Benachrichtigungskanäle überprüfen"},y=(0,i.A)((0,i.A)({},f),p)}}]); \ No newline at end of file diff --git a/frontend/dist/js/lang-fr-FR-legacy.84fb2396.js b/frontend/dist/js/lang-fr-FR-legacy.407a69cf.js similarity index 99% rename from frontend/dist/js/lang-fr-FR-legacy.84fb2396.js rename to frontend/dist/js/lang-fr-FR-legacy.407a69cf.js index eb572bf..4a152bb 100644 --- a/frontend/dist/js/lang-fr-FR-legacy.84fb2396.js +++ b/frontend/dist/js/lang-fr-FR-legacy.407a69cf.js @@ -1 +1 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[969],{49243:function(e,a,t){t.d(a,{default:function(){return y}});var i=t(57888),s={items_per_page:"/ page",jump_to:"Aller à",jump_to_confirm:"confirmer",page:"",prev_page:"Page précédente",next_page:"Page suivante",prev_5:"5 Pages précédentes",next_5:"5 Pages suivantes",prev_3:"3 Pages précédentes",next_3:"3 Pages suivantes"},r=t(85505),n={today:"Aujourd'hui",now:"Maintenant",backToToday:"Aujourd'hui",ok:"Ok",clear:"Rétablir",month:"Mois",year:"Année",timeSelect:"Sélectionner l'heure",dateSelect:"Sélectionner la date",monthSelect:"Choisissez un mois",yearSelect:"Choisissez une année",decadeSelect:"Choisissez une décennie",yearFormat:"YYYY",dateFormat:"DD/MM/YYYY",dayFormat:"DD",dateTimeFormat:"DD/MM/YYYY HH:mm:ss",monthBeforeYear:!0,previousMonth:"Mois précédent (PageUp)",nextMonth:"Mois suivant (PageDown)",previousYear:"Année précédente (Ctrl + gauche)",nextYear:"Année prochaine (Ctrl + droite)",previousDecade:"Décennie précédente",nextDecade:"Décennie suivante",previousCentury:"Siècle précédent",nextCentury:"Siècle suivant"},o={placeholder:"Sélectionner l'heure"},d=o,l={lang:(0,r.A)({placeholder:"Sélectionner une date",rangePlaceholder:["Date de début","Date de fin"]},n),timePickerLocale:(0,r.A)({},d)},c=l,u=c,m={locale:"fr",Pagination:s,DatePicker:c,TimePicker:d,Calendar:u,Table:{filterTitle:"Filtrer",filterConfirm:"OK",filterReset:"Réinitialiser"},Modal:{okText:"OK",cancelText:"Annuler",justOkText:"OK"},Popconfirm:{okText:"OK",cancelText:"Annuler"},Transfer:{searchPlaceholder:"Recherche",itemUnit:"élément",itemsUnit:"éléments"},Empty:{description:"Aucune donnée"},Upload:{uploading:"Téléchargement...",removeFile:"Effacer le fichier",uploadError:"Erreur de téléchargement",previewFile:"Fichier de prévisualisation",downloadFile:"Télécharger un fichier"},Text:{edit:"éditer",copy:"copier",copied:"copie effectuée",expand:"développer"}},g=m,p=t(85498),b=t.n(p),h={antLocale:g,momentName:"fr",momentLocale:b()},f={submit:"Soumettre",save:"enregistrer","submit.ok":"Soumission réussie","save.ok":"Enregistré avec succès","menu.welcome":"bienvenue","menu.home":"Page d'accueil","menu.dashboard":"Tableau de bord","menu.dashboard.indicator":"Analyse des indicateurs","menu.dashboard.community":"communauté des indicateurs","menu.dashboard.analysis":"Analyse de l'IA","menu.dashboard.tradingAssistant":"Assistante commerciale","menu.dashboard.aiTradingAssistant":"Assistant de trading IA","menu.dashboard.signalRobot":"Robot de signal","menu.dashboard.monitor":"Page de surveillance","menu.dashboard.workplace":"établi","menu.form":"page de formulaire","menu.form.basic-form":"forme de base","menu.form.step-form":"formulaire étape par étape","menu.form.step-form.info":"Formulaire étape par étape (remplir les informations de transfert)","menu.form.step-form.confirm":"Formulaire étape par étape (confirmer les informations de transfert)","menu.form.step-form.result":"Formulaire étape par étape (à compléter)","menu.form.advanced-form":"Formulaires avancés","menu.list":"Page de liste","menu.list.table-list":"Formulaire de demande","menu.list.basic-list":"Liste standard","menu.list.card-list":"liste de cartes","menu.list.search-list":"liste de recherche","menu.list.search-list.articles":"Liste de recherche (articles)","menu.list.search-list.projects":"Liste de recherche (projet)","menu.list.search-list.applications":"Liste de recherche (application)","menu.profile":"Page de détails","menu.profile.basic":"Page de détails de base","menu.profile.advanced":"Page de détails avancés","menu.result":"Page de résultats","menu.result.success":"page de réussite","menu.result.fail":"page d'échec","menu.exception":"Page d'exceptions","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"erreur de déclenchement","menu.account":"Page personnelle","menu.account.center":"Centre personnel","menu.account.settings":"paramètres personnels","menu.account.trigger":"Erreur de déclenchement","menu.account.logout":"Se déconnecter","menu.wallet":"mon portefeuille","menu.docs":"Centre de documentation","menu.docs.detail":"Détails du document","menu.header.refreshPage":"actualiser la page","menu.invite.friends":"Inviter des amis","app.setting.pagestyle":"paramètres de style généraux","app.setting.pagestyle.light":"Style de menu lumineux","app.setting.pagestyle.dark":"style de menu sombre","app.setting.pagestyle.realdark":"mode sombre","app.setting.themecolor":"couleur du thème","app.setting.navigationmode":"Mode navigation","app.setting.sidemenu.nav":"Navigation dans la barre latérale","app.setting.topmenu.nav":"Navigation dans la barre supérieure","app.setting.content-width":"largeur de la zone de contenu","app.setting.content-width.tooltip":"Ce paramètre n'est efficace que lorsque [Navigation dans la barre supérieure]","app.setting.content-width.fixed":"Corrigé","app.setting.content-width.fluid":"diffusion en continu","app.setting.fixedheader":"En-tête fixe","app.setting.fixedheader.tooltip":"Configurable lorsqu'il est fixe","app.setting.autoHideHeader":"Masquer l'en-tête lors du défilement","app.setting.fixedsidebar":"Menu latéral fixe","app.setting.sidemenu":"Disposition du menu latéral","app.setting.topmenu":"Disposition du menu supérieur","app.setting.othersettings":"Autres paramètres","app.setting.weakmode":"Mode de faiblesse des couleurs","app.setting.multitab":"Mode multi-onglets","app.setting.copy":"Paramètres de copie","app.setting.loading":"Chargement du thème","app.setting.copyinfo":"Copiez les paramètres avec succès src/config/defaultSettings.js","app.setting.copy.success":"Copie terminée","app.setting.copy.fail":"Échec de la copie","app.setting.theme.switching":"Changer de thème !","app.setting.production.hint":"La barre de configuration est uniquement utilisée pour l'aperçu dans l'environnement de développement et ne sera pas affichée dans l'environnement de production. Veuillez copier et modifier le fichier de configuration manuellement.","app.setting.themecolor.daybreak":"Bleu aube (par défaut)","app.setting.themecolor.dust":"crépuscule","app.setting.themecolor.volcano":"volcan","app.setting.themecolor.sunset":"coucher de soleil","app.setting.themecolor.cyan":"Mingqing","app.setting.themecolor.green":"aurore verte","app.setting.themecolor.geekblue":"bleu geek","app.setting.themecolor.purple":"Jiang Zi","app.setting.tooltip":"Paramètres des pages","user.login.userName":"Nom d'utilisateur","user.login.password":"Mot de passe","user.login.username.placeholder":"Compte : administrateur","user.login.password.placeholder":"Mot de passe : admin ou ant.design","user.login.message-invalid-credentials":"La connexion a échoué, veuillez vérifier votre e-mail et votre code de vérification","user.login.message-invalid-verification-code":"Erreur de code de vérification","user.login.tab-login-credentials":"Connexion par mot de passe du compte","user.login.tab-login-email":"Connexion par e-mail","user.login.tab-login-mobile":"Connexion au numéro de téléphone portable","user.login.captcha.placeholder":"Veuillez saisir le code de vérification graphique","user.login.mobile.placeholder":"Numéro de téléphone portable","user.login.mobile.verification-code.placeholder":"Code de vérification","user.login.email.placeholder":"Veuillez entrer votre adresse e-mail","user.login.email.verification-code.placeholder":"Veuillez entrer le code de vérification","user.login.email.sending":"Le code de vérification est en cours d'envoi...","user.login.email.send-success-title":"Conseils","user.login.email.send-success":"Code de vérification envoyé avec succès, veuillez vérifier votre email","user.login.sms.send-success":"Code de vérification envoyé avec succès, veuillez vérifier le message texte","user.login.remember-me":"Connexion automatique","user.login.forgot-password":"Mot de passe oublié","user.login.sign-in-with":"Autres méthodes de connexion","user.login.signup":"Créer un compte","user.login.login":"Connexion","user.register.register":"S'inscrire","user.register.email.placeholder":"Courriel","user.register.password.placeholder":"Veuillez saisir au moins 6 caractères. Veuillez ne pas utiliser de mots de passe faciles à deviner.","user.register.password.popover-message":"Veuillez saisir au moins 6 caractères. Veuillez ne pas utiliser de mots de passe faciles à deviner.","user.register.confirm-password.placeholder":"Confirmer le mot de passe","user.register.get-verification-code":"Obtenir le code de vérification","user.register.sign-in":"Connectez-vous en utilisant un compte existant","user.register-result.msg":"Votre compte : {email} Inscription réussie","user.register-result.activation-email":"L'e-mail d'activation a été envoyé dans votre boîte mail et est valable 24 heures. Veuillez vous connecter rapidement à votre messagerie et cliquer sur le lien contenu dans l'e-mail pour activer votre compte.","user.register-result.back-home":"Retour à la page d'accueil","user.register-result.view-mailbox":"Vérifiez votre boîte aux lettres","user.email.required":"Veuillez entrer votre adresse e-mail !","user.email.wrong-format":"Le format de l'adresse e-mail est incorrect !","user.userName.required":"Veuillez saisir votre nom de compte ou votre adresse e-mail","user.password.required":"Veuillez entrer votre mot de passe !","user.password.twice.msg":"Les mots de passe saisis deux fois ne correspondent pas !","user.password.strength.msg":"Le mot de passe n'est pas assez fort","user.password.strength.strong":"Force : Forte","user.password.strength.medium":"Force : moyenne","user.password.strength.low":"Force : faible","user.password.strength.short":"Force : trop courte","user.confirm-password.required":"Veuillez confirmer votre mot de passe !","user.phone-number.required":"Veuillez saisir le bon numéro de téléphone portable","user.phone-number.wrong-format":"Le format du numéro de téléphone portable est erroné !","user.verification-code.required":"Veuillez entrer le code de vérification !","user.captcha.required":"Veuillez saisir le code de vérification graphique !","user.login.infos":"QuantDinger est un outil auxiliaire d'analyse boursière multi-agents d'IA et n'a pas de qualifications en conseil en investissement en valeurs mobilières. Tous les résultats d'analyse, scores et avis de référence de la plateforme sont automatiquement générés par l'IA sur la base de données historiques et sont utilisés uniquement à des fins d'apprentissage, de recherche et d'échange technique, et ne constituent aucun conseil d'investissement ou base de prise de décision. L'investissement en actions implique divers risques tels que le risque de marché, le risque de liquidité, le risque politique, etc., qui peuvent entraîner une perte du principal. Les utilisateurs doivent prendre des décisions indépendantes en fonction de leur propre tolérance au risque, et tout comportement d'investissement et conséquences découlant de l'utilisation de cet outil seront à la charge de l'utilisateur. Le marché est risqué et les investissements doivent être prudents.","user.login.tab-login-web3":"Connexion Web3","user.login.web3.tip":"Connexion par signature à l'aide du portefeuille","user.login.web3.connect":"Connectez le portefeuille et connectez-vous","user.login.web3.no-wallet":"Portefeuille non détecté","user.login.web3.no-address":"Adresse du portefeuille non obtenue","user.login.web3.nonce-failed":"Impossible d'obtenir un nombre aléatoire","user.login.web3.verify-failed":"La vérification de la signature a échoué","user.login.web3.success":"Connexion réussie","user.login.web3.failed":"Échec de la connexion au portefeuille","nav.no_wallet":"Portefeuille non détecté","nav.copy":"Copier","nav.copy_success":"Copié avec succès","user.login.oauth.google":"Connectez-vous avec Google","user.login.oauth.github":"Connectez-vous avec GitHub","user.login.oauth.loading":"Redirection vers la page d'autorisation...","user.login.oauth.failed":"Échec de la connexion OAuth","user.login.oauth.get-url-failed":"Échec de l'obtention du lien d'autorisation","user.login.subtitle":"Informations quantitatives sur les marchés mondiaux","user.login.legal.title":"Mentions légales","user.login.legal.view":"Voir les mentions légales","user.login.legal.collapse":"Réduire les mentions légales","user.login.legal.agree":"J'ai lu et j'accepte les mentions légales","user.login.legal.required":"Veuillez d'abord lire et vérifier les mentions légales","user.login.legal.content":"QuantDinger est un outil auxiliaire d'analyse boursière multi-agents d'IA et n'a pas de qualifications en conseil en investissement en valeurs mobilières. Tous les résultats d'analyse, notes et avis de référence de la plateforme sont automatiquement générés par l'IA sur la base de données historiques et sont utilisés uniquement à des fins d'apprentissage, de recherche et d'échange technique, et ne constituent aucun conseil d'investissement ou base de prise de décision. L'investissement en actions implique divers risques tels que le risque de marché, le risque de liquidité, le risque politique, etc., qui peuvent entraîner une perte du principal. Les utilisateurs doivent prendre des décisions indépendantes en fonction de leur propre tolérance au risque, et tout comportement d'investissement et conséquences découlant de l'utilisation de cet outil seront à la charge de l'utilisateur. Le marché est risqué et les investissements doivent être prudents.","user.login.privacy.title":"Politique de confidentialité des utilisateurs","user.login.privacy.view":"Afficher la politique de confidentialité des utilisateurs","user.login.privacy.collapse":"Fermer les conditions de confidentialité des utilisateurs","user.login.privacy.content":"Nous accordons une grande importance à votre vie privée et à la protection de vos données. 1) Portée de la collecte : seules les informations nécessaires à la mise en œuvre de la fonction (telles que l'e-mail, le numéro de téléphone mobile, l'indicatif régional, l'adresse du portefeuille Web3) ainsi que les journaux et informations sur l'appareil nécessaires sont collectés. 2) Objectif d'utilisation : Pour la connexion au compte et la vérification de la sécurité, la fourniture de fonctions de service, le dépannage et les exigences de conformité. 3) Stockage et sécurité : les données sont cryptées et stockées, et les autorisations et mesures de contrôle d'accès nécessaires sont prises pour tenter d'empêcher tout accès non autorisé, toute divulgation ou toute perte. 4) Partage avec des tiers : sauf si les lois et réglementations l'exigent ou si cela est nécessaire à l'exécution des services, vos informations personnelles ne seront pas partagées avec des tiers ; si des services tiers (tels que des portefeuilles, des fournisseurs de services SMS) sont impliqués, ils ne seront traités que dans la mesure minimale nécessaire à la mise en œuvre de la fonction. 5) Cookies/stockage local : utilisés pour le statut de connexion et la maintenance de session nécessaire (tels que les jetons, PHPSESSID), vous pouvez les effacer ou les restreindre dans le navigateur. 6) Droits personnels : Vous pouvez exercer vos droits d'information, de rectification, de suppression, de retrait de consentement, etc. conformément aux lois et règlements. 7) Modifications et avis : lorsque ces conditions seront mises à jour, elles seront affichées bien en évidence sur la page. En continuant à utiliser ce service, vous êtes réputé avoir lu et accepté le contenu mis à jour. Si vous n'acceptez pas ces Conditions ou toute mise à jour de celles-ci, veuillez cesser d'utiliser le Service et nous contacter.","account.basicInfo":"Informations de base","account.id":"Identifiant utilisateur","account.username":"Nom d'utilisateur","account.nickname":"Surnom","account.email":"Courriel","account.mobile":"Numéro de téléphone portable","account.web3address":"adresse du portefeuille","account.pid":"Identifiant du référent","account.level":"Niveau utilisateur","account.money":"équilibre","account.qdtBalance":"Solde QDT","account.score":"Points","account.createtime":"Heure d'inscription","account.inviteLink":"Lien d'invitation","account.recharge":"Recharger","account.rechargeTip":"Veuillez utiliser WeChat ou Alipay pour scanner le code QR ci-dessous pour recharger.","account.qrCodePlaceholder":"Espace réservé au code QR (émulation)","account.rechargeAmount":"Montant de la recharge","account.enterAmount":"Veuillez saisir le montant de la recharge","account.rechargeHint":"Montant minimum du dépôt : 1 QDT","account.confirmRecharge":"Confirmer la recharge","account.enterValidAmount":"Veuillez saisir un montant de recharge valide","account.rechargeSuccess":"Recharge réussie ! Déposé {montant} QDT","account.settings.menuMap.basic":"Paramètres de base","account.settings.menuMap.security":"Paramètres de sécurité","account.settings.menuMap.notification":"Notification de nouveau message","account.settings.menuMap.moneyLog":"Détails du fonds","account.moneyLog.empty":"Aucun détail sur le fonds pour l'instant","account.moneyLog.total":"{total} enregistrements au total","account.moneyLog.type.purchase":"indicateur d'achat","account.moneyLog.type.recharge":"Recharger","account.moneyLog.type.refund":"Remboursement","account.moneyLog.type.reward":"récompense","account.moneyLog.type.income":"Revenu de l'indicateur","account.moneyLog.type.commission":"Frais de gestion de la plateforme","wallet.balance":"Solde QDT","wallet.recharge":"Recharger","wallet.withdraw":"Retirer de l'argent","wallet.filter":"Filtrer","wallet.reset":"réinitialiser","wallet.totalRecharge":"Recharge accumulée","wallet.totalWithdraw":"Retraits cumulés","wallet.totalIncome":"Revenu cumulé","wallet.records":"Enregistrements de transactions et détails des fonds","wallet.tradingRecords":"historique des transactions","wallet.moneyLog":"Détails du fonds","wallet.rechargeTip":"Veuillez utiliser WeChat ou Alipay pour scanner le code QR ci-dessous pour recharger.","wallet.qrCodePlaceholder":"Espace réservé au code QR (émulation)","wallet.rechargeAmount":"Montant de la recharge","wallet.enterAmount":"Veuillez saisir le montant de la recharge","wallet.rechargeHint":"Montant minimum du dépôt : 1 QDT","wallet.confirmRecharge":"Confirmer la recharge","wallet.enterValidAmount":"Veuillez saisir un montant de recharge valide","wallet.rechargeSuccess":"Recharge réussie ! Déposé {montant} QDT","wallet.rechargeFailed":"La recharge a échoué","wallet.withdrawTip":"Veuillez saisir le montant du retrait et l'adresse de retrait","wallet.withdrawAmount":"Montant du retrait","wallet.enterWithdrawAmount":"Veuillez saisir le montant du retrait","wallet.withdrawHint":"Montant minimum de retrait : 1 QDT","wallet.withdrawAddress":"Adresse de retrait (facultatif)","wallet.enterWithdrawAddress":"Veuillez saisir l'adresse de retrait","wallet.confirmWithdraw":"Confirmer le retrait","wallet.enterValidWithdrawAmount":"Veuillez saisir un montant de retrait valide","wallet.insufficientBalance":"Solde insuffisant","wallet.withdrawSuccess":"Retrait réussi ! Retiré {montant} QDT","wallet.withdrawFailed":"Échec du retrait","wallet.noTradingRecords":"Aucun enregistrement de transaction pour l'instant","wallet.noMoneyLog":"Aucun détail sur le fonds pour l'instant","wallet.loadTradingRecordsFailed":"Échec du chargement des enregistrements de transaction","wallet.loadMoneyLogFailed":"Échec du chargement des détails du fonds","wallet.moneyLogTotal":"{total} enregistrements au total","wallet.moneyLogTypeTitle":"Tapez","wallet.moneyLogType.all":"Tous types","wallet.table.time":"temps","wallet.table.type":"Tapez","wallet.table.price":"prix","wallet.table.amount":"Quantité","wallet.table.money":"Montant","wallet.table.balance":"équilibre","wallet.table.memo":"Remarques","wallet.table.value":"valeur","wallet.table.profit":"Profits et pertes","wallet.table.commission":"frais de traitement","wallet.table.total":"{total} enregistrements au total","wallet.tradeType.buy":"acheter","wallet.tradeType.sell":"vendre","wallet.tradeType.liquidation":"liquidation forcée","wallet.tradeType.openLong":"Ouvert longtemps","wallet.tradeType.addLong":"Gadot","wallet.tradeType.closeLong":"Pinduo","wallet.tradeType.closeLongStop":"Stop loss et long","wallet.tradeType.closeLongProfit":"Prenez des bénéfices et gagnez plus de niveaux","wallet.tradeType.openShort":"Ouvert court","wallet.tradeType.addShort":"ajouter un court","wallet.tradeType.closeShort":"vide","wallet.tradeType.closeShortStop":"Arrêter la perte","wallet.tradeType.closeShortProfit":"Prenez des bénéfices et clôturez à découvert","wallet.moneyLogType.purchase":"indicateur d'achat","wallet.moneyLogType.recharge":"Recharger","wallet.moneyLogType.withdraw":"Retirer de l'argent","wallet.moneyLogType.refund":"Remboursement","wallet.moneyLogType.reward":"récompense","wallet.moneyLogType.income":"revenu","wallet.moneyLogType.commission":"frais de traitement","wallet.web3Address.required":"Veuillez d'abord remplir l'adresse du portefeuille Web3","wallet.web3Address.requiredDescription":"Avant de recharger, vous devez lier l'adresse de votre portefeuille Web3 pour recevoir la recharge.","wallet.web3Address.placeholder":"Veuillez saisir l'adresse de votre portefeuille Web3 (en commençant par 0x)","wallet.web3Address.save":"Enregistrer l'adresse du portefeuille","wallet.web3Address.saveSuccess":"Adresse du portefeuille enregistrée avec succès","wallet.web3Address.saveFailed":"Échec de l'enregistrement de l'adresse du portefeuille","wallet.web3Address.invalidFormat":"Veuillez saisir une adresse de portefeuille Web3 valide (format Ethereum : 42 caractères commençant par 0x, ou format TRC20 : 34 caractères commençant par T)","wallet.selectCoin":"Sélectionnez la devise","wallet.selectChain":"chaîne de sélection","wallet.chain.eth":"ETH(ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"BSC","wallet.targetQdtAmount":"Le montant de QDT que vous souhaitez échanger (facultatif)","wallet.targetQdtAmount.placeholder":"Veuillez saisir la quantité de QDT que vous souhaitez utiliser, le prix actuel du QDT : {price} USDT","wallet.targetQdtAmount.requiredUsdt":"Besoin de recharge : {amount} USDT","wallet.rechargeAddress":"Adresse de recharge","wallet.copyAddress":"Copier","wallet.copySuccess":"Copiez avec succès !","wallet.copyFailed":"Échec de la copie, veuillez copier manuellement","wallet.rechargeAddressHint":"Veuillez vous assurer d'utiliser {chain} pour déposer {coin} à cette adresse","wallet.qdtPrice.loading":"Chargement...","wallet.rechargeTip.new":"Veuillez sélectionner la devise et la chaîne, puis scannez le code QR ci-dessous pour recharger","wallet.exchangeRate":"1 QDT ≈ {taux} USDT","wallet.withdrawableAmount":"Montant des liquidités disponibles","wallet.totalBalance":"solde total","wallet.insufficientWithdrawable":"Le montant en espèces pouvant être retiré est insuffisant. Le montant actuel qui peut être retiré est : {amount} QDT","wallet.withdrawAddressRequired":"Veuillez saisir l'adresse de retrait","wallet.withdrawAddressHint":"Veuillez vous assurer que l'adresse est correcte. Après le retrait, il ne peut être révoqué.","wallet.withdrawSubmitSuccess":"Demande de retrait soumise avec succès, veuillez attendre l'examen","menu.footer.contactUs":"Contactez-nous","menu.footer.getSupport":"Obtenir de l'aide","menu.footer.socialAccounts":"compte social","menu.footer.userAgreement":"Contrat d'utilisation","menu.footer.privacyPolicy":"politique de confidentialité","menu.footer.support":"Assistance","menu.footer.featureRequest":"Demande de fonctionnalité","menu.footer.email":"Courriel","menu.footer.liveChat":"Chat en direct 24h/24 et 7j/7","dashboard.analysis.title":"Analyse multidimensionnelle","dashboard.analysis.subtitle":"Plateforme d'analyse financière complète basée sur l'IA","dashboard.analysis.selectSymbol":"Sélectionnez ou saisissez le code sous-jacent","dashboard.analysis.selectModel":"Sélectionnez le modèle","dashboard.analysis.startAnalysis":"Démarrer l'analyse","dashboard.analysis.history":"Histoire","dashboard.analysis.tab.overview":"analyse complète","dashboard.analysis.tab.fundamental":"Fondamentaux","dashboard.analysis.tab.technical":"technologie","dashboard.analysis.tab.news":"Actualités","dashboard.analysis.tab.sentiment":"émotions","dashboard.analysis.tab.risk":"risque","dashboard.analysis.tab.debate":"Le débat long-court","dashboard.analysis.tab.decision":"décision finale","dashboard.analysis.empty.selectSymbol":"Sélectionnez une cible pour démarrer l'analyse","dashboard.analysis.empty.selectSymbolDesc":"Sélectionnez dans la liste d'actions auto-sélectionnée ou entrez le code sous-jacent pour obtenir un rapport d'analyse IA multidimensionnel","dashboard.analysis.empty.startAnalysis":'Cliquez sur le bouton "Démarrer l\'analyse" pour effectuer une analyse multidimensionnelle',"dashboard.analysis.empty.startAnalysisDesc":"Nous vous fournirons une analyse complète portant sur plusieurs dimensions telles que les fondamentaux, la technologie, l'actualité, le sentiment et le risque.","dashboard.analysis.empty.noData":"Il n'y a actuellement aucune donnée d'analyse {type}, veuillez d'abord effectuer une analyse complète","dashboard.analysis.empty.noWatchlist":"Il n'y a actuellement aucun titre auto-sélectionné","dashboard.analysis.empty.noHistory":"Pas encore d'historique","dashboard.analysis.empty.watchlistHint":"Il n'y a actuellement aucun stock auto-sélectionné, veuillez d'abord","dashboard.analysis.empty.noDebateData":"Aucune donnée de débat pour l'instant","dashboard.analysis.empty.noDecisionData":"Aucune donnée de décision pour l'instant","dashboard.analysis.empty.selectAgent":"Veuillez sélectionner un agent pour afficher les résultats de l'analyse","dashboard.analysis.loading.analyzing":"Analyse, veuillez patienter...","dashboard.analysis.loading.fundamental":"Analyser les données fondamentales...","dashboard.analysis.loading.technical":"Analyse des indicateurs techniques...","dashboard.analysis.loading.news":"Analyser les données d'actualité...","dashboard.analysis.loading.sentiment":"Analyser le sentiment du marché...","dashboard.analysis.loading.risk":"Évaluer le risque...","dashboard.analysis.loading.debate":"Le débat long-court est en cours...","dashboard.analysis.loading.decision":"Générer la décision finale...","dashboard.analysis.score.overall":"Note globale","dashboard.analysis.score.recommendation":"conseil en investissement","dashboard.analysis.score.confidence":"Confiance","dashboard.analysis.dimension.fundamental":"Fondamentaux","dashboard.analysis.dimension.technical":"technologie","dashboard.analysis.dimension.news":"Actualités","dashboard.analysis.dimension.sentiment":"émotions","dashboard.analysis.dimension.risk":"risque","dashboard.analysis.card.dimensionScores":"Notes pour chaque dimension","dashboard.analysis.card.overviewReport":"Rapport d'analyse complet","dashboard.analysis.card.financialMetrics":"indicateurs financiers","dashboard.analysis.card.fundamentalReport":"Rapport d'analyse fondamentale","dashboard.analysis.card.technicalIndicators":"Indicateurs techniques","dashboard.analysis.card.technicalReport":"rapport d'analyse technique","dashboard.analysis.card.newsList":"Actualités connexes","dashboard.analysis.card.newsReport":"Rapport d'analyse de l'actualité","dashboard.analysis.card.sentimentIndicators":"indicateur de sentiment","dashboard.analysis.card.sentimentReport":"Rapport d'analyse des sentiments","dashboard.analysis.card.riskMetrics":"indicateurs de risque","dashboard.analysis.card.riskReport":"rapport d'évaluation des risques","dashboard.analysis.card.bullView":"Vue haussière (Taureau)","dashboard.analysis.card.bearView":"Vue baissière (ours)","dashboard.analysis.card.researchConclusion":"Conclusion du chercheur","dashboard.analysis.card.traderPlan":"plan de commerçant","dashboard.analysis.card.riskDebate":"Débat en commission des risques","dashboard.analysis.card.finalDecision":"Décision finale","dashboard.analysis.card.tradePlanDetail":"Détails du plan de trading","dashboard.analysis.tradingPlan.entry_price":"Prix d'entrée","dashboard.analysis.tradingPlan.position_size":"Taille du poste","dashboard.analysis.tradingPlan.stop_loss":"arrêter les pertes","dashboard.analysis.tradingPlan.take_profit":"Profiter","dashboard.analysis.label.confidence":"Confiance","dashboard.analysis.label.keyPoints":"points essentiels","dashboard.analysis.label.riskWarning":"Avertissement de risque","dashboard.analysis.risk.risky":"Risqué","dashboard.analysis.risk.neutral":"Point de vue neutre (Neutre)","dashboard.analysis.risk.safe":"Vue conservatrice (sûr)","dashboard.analysis.risk.conclusion":"Conclusion","dashboard.analysis.feature.fundamental":"analyse fondamentale","dashboard.analysis.feature.technical":"analyse technique","dashboard.analysis.feature.news":"analyse de l'actualité","dashboard.analysis.feature.sentiment":"analyse des sentiments","dashboard.analysis.feature.risk":"évaluation des risques","dashboard.analysis.watchlist.title":"Ma sélection de titres","dashboard.analysis.watchlist.add":"ajouter","dashboard.analysis.watchlist.addStock":"ajouter du stock","dashboard.analysis.modal.addStock.title":"Ajouter des actions facultatives","dashboard.analysis.modal.addStock.confirm":"D'accord","dashboard.analysis.modal.addStock.cancel":"Annuler","dashboard.analysis.modal.addStock.market":"type de marché","dashboard.analysis.modal.addStock.marketPlaceholder":"Veuillez sélectionner un marché","dashboard.analysis.modal.addStock.marketRequired":"Veuillez sélectionner le type de marché","dashboard.analysis.modal.addStock.symbol":"Code de stock","dashboard.analysis.modal.addStock.symbolPlaceholder":"Par exemple : AAPL, TSLA, GOOGL, 000001, BTC","dashboard.analysis.modal.addStock.symbolRequired":"Veuillez entrer le code de stock","dashboard.analysis.modal.addStock.searchPlaceholder":"Rechercher le code ou le nom de la cible","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"Recherchez ou saisissez le code sous-jacent (par exemple : AAPL, BTC/USDT, EUR/USD)","dashboard.analysis.modal.addStock.searchOrInputHint":"Prend en charge la recherche d'objets dans la base de données ou la saisie directe du code (le système obtiendra automatiquement le nom)","dashboard.analysis.modal.addStock.search":"Rechercher","dashboard.analysis.modal.addStock.searchResults":"Résultats de la recherche","dashboard.analysis.modal.addStock.hotSymbols":"Cibles populaires","dashboard.analysis.modal.addStock.noHotSymbols":"Aucune cible populaire pour l'instant","dashboard.analysis.modal.addStock.selectedSymbol":"Sélectionné","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"Veuillez d'abord sélectionner une cible","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"Veuillez sélectionner une cible ou saisir d'abord le code cible","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"Veuillez entrer le code cible","dashboard.analysis.modal.addStock.pleaseSelectMarket":"Veuillez d'abord sélectionner le type de marché","dashboard.analysis.modal.addStock.searchFailed":"La recherche a échoué, veuillez réessayer plus tard","dashboard.analysis.modal.addStock.noSearchResults":"Aucune cible correspondante trouvée","dashboard.analysis.modal.addStock.willAutoFetchName":"Le système obtiendra automatiquement le nom","dashboard.analysis.modal.addStock.addDirectly":"Ajouter directement","dashboard.analysis.modal.addStock.nameWillBeFetched":"Le nom sera récupéré automatiquement une fois ajouté","dashboard.analysis.market.USStock":"Actions américaines","dashboard.analysis.market.Crypto":"crypto-monnaie","dashboard.analysis.market.Forex":"Forex","dashboard.analysis.market.Futures":"Contrats à terme","dashboard.analysis.modal.history.title":"Enregistrements d'analyse historique","dashboard.analysis.modal.history.viewResult":"Afficher les résultats","dashboard.analysis.modal.history.completeTime":"temps d'achèvement","dashboard.analysis.modal.history.error":"Erreur","dashboard.analysis.status.pending":"En attente","dashboard.analysis.status.processing":"Traitement","dashboard.analysis.status.completed":"Terminé","dashboard.analysis.status.failed":"échoué","dashboard.analysis.message.selectSymbol":"Veuillez d'abord sélectionner la cible","dashboard.analysis.message.taskCreated":"La tâche d'analyse a été créée et est exécutée en arrière-plan...","dashboard.analysis.message.analysisComplete":"Analyse terminée","dashboard.analysis.message.analysisCompleteCache":"Analyse terminée (à l'aide des données mises en cache)","dashboard.analysis.message.analysisFailed":"L'analyse a échoué, veuillez réessayer plus tard","dashboard.analysis.message.addStockSuccess":"Ajouté avec succès","dashboard.analysis.message.addStockFailed":"L'ajout a échoué","dashboard.analysis.message.removeStockSuccess":"Supprimé avec succès","dashboard.analysis.message.removeStockFailed":"Échec de la suppression","dashboard.analysis.message.resumingAnalysis":"Reprise de la tâche d'analyse...","dashboard.analysis.message.deleteSuccess":"Supprimé avec succès","dashboard.analysis.message.deleteFailed":"Échec de la suppression","dashboard.analysis.modal.history.delete":"Supprimer","dashboard.analysis.modal.history.deleteConfirm":"Êtes-vous sûr de vouloir supprimer cet enregistrement d'analyse ?","dashboard.analysis.test":"Magasin n° {no}, route Gongzhuan","dashboard.analysis.introduce":"Description de l'indicateur","dashboard.analysis.total-sales":"ventes totales","dashboard.analysis.day-sales":"Ventes quotidiennes moyennes¥","dashboard.analysis.visits":"Visites","dashboard.analysis.visits-trend":"Tendances du trafic","dashboard.analysis.visits-ranking":"Classement des visites en magasin","dashboard.analysis.day-visits":"Visites quotidiennes","dashboard.analysis.week":"Hebdomadaire, année sur année","dashboard.analysis.day":"Année après année","dashboard.analysis.payments":"Nombre de paiements","dashboard.analysis.conversion-rate":"taux de conversion","dashboard.analysis.operational-effect":"Effets sur l'activité opérationnelle","dashboard.analysis.sales-trend":"tendances des ventes","dashboard.analysis.sales-ranking":"Classement des ventes en magasin","dashboard.analysis.all-year":"Toute l'année","dashboard.analysis.all-month":"ce mois-ci","dashboard.analysis.all-week":"cette semaine","dashboard.analysis.all-day":"aujourd'hui","dashboard.analysis.search-users":"Nombre d'utilisateurs de recherche","dashboard.analysis.per-capita-search":"Recherches par habitant","dashboard.analysis.online-top-search":"Recherches populaires en ligne","dashboard.analysis.the-proportion-of-sales":"Proportion de la catégorie de ventes","dashboard.analysis.dropdown-option-one":"Première opération","dashboard.analysis.dropdown-option-two":"Opération 2","dashboard.analysis.channel.all":"Toutes les chaînes","dashboard.analysis.channel.online":"en ligne","dashboard.analysis.channel.stores":"magasin","dashboard.analysis.sales":"ventes","dashboard.analysis.traffic":"flux de passagers","dashboard.analysis.table.rank":"Classement","dashboard.analysis.table.search-keyword":"Rechercher des mots-clés","dashboard.analysis.table.users":"Nombre d'utilisateurs","dashboard.analysis.table.weekly-range":"Augmentation hebdomadaire","dashboard.indicator.selectSymbol":"Sélectionnez ou saisissez le code sous-jacent","dashboard.indicator.emptyWatchlistHint":"Il n'y a actuellement aucun titre auto-sélectionné, veuillez d'abord les ajouter","dashboard.indicator.hint.selectSymbol":"Veuillez sélectionner une cible pour démarrer l'analyse","dashboard.indicator.hint.selectSymbolDesc":"Sélectionnez ou entrez un code boursier dans la zone de recherche ci-dessus pour afficher les graphiques K-line et les indicateurs techniques.","dashboard.indicator.retry":"Réessayez","dashboard.indicator.panel.title":"Indicateurs techniques","dashboard.indicator.panel.realtimeOn":"Désactivez les mises à jour en temps réel","dashboard.indicator.panel.realtimeOff":"Activer les mises à jour en temps réel","dashboard.indicator.panel.themeLight":"Passer au thème sombre","dashboard.indicator.panel.themeDark":"Passer au thème clair","dashboard.indicator.section.enabled":"Activé","dashboard.indicator.section.added":"Indicateurs que j'ai ajoutés","dashboard.indicator.section.custom":"Indicateurs créés par vous-même","dashboard.indicator.section.bought":"Indicateurs que j'ai achetés","dashboard.indicator.section.myCreated":"Indicateurs que j'ai créés","dashboard.indicator.empty":"Il n'y a pas encore d'indicateur, veuillez d'abord ajouter ou créer un indicateur","dashboard.indicator.buy":"indicateur d'achat","dashboard.indicator.action.start":"commencer","dashboard.indicator.action.stop":"Fermer","dashboard.indicator.action.edit":"Modifier","dashboard.indicator.action.delete":"Supprimer","dashboard.indicator.action.backtest":"backtest","dashboard.indicator.status.normal":"normal","dashboard.indicator.status.normalPermanent":"Normal (valable en permanence)","dashboard.indicator.status.expired":"Expiré","dashboard.indicator.expiry.permanent":"Valable en permanence","dashboard.indicator.expiry.noExpiry":"Pas de délai d'expiration","dashboard.indicator.expiry.expired":"Expiré : {date}","dashboard.indicator.expiry.expiresOn":"Heure d'expiration : {date}","dashboard.indicator.delete.confirmTitle":"Confirmer la suppression","dashboard.indicator.delete.confirmContent":'Êtes-vous sûr de vouloir supprimer l\'indicateur "{name}" ? Cette opération est irréversible.',"dashboard.indicator.delete.confirmOk":"Supprimer","dashboard.indicator.delete.confirmCancel":"Annuler","dashboard.indicator.delete.success":"Supprimer avec succès","dashboard.indicator.delete.failed":"Échec de la suppression","dashboard.indicator.save.success":"Enregistré avec succès","dashboard.indicator.save.failed":"Échec de l'enregistrement","dashboard.indicator.error.loadWatchlistFailed":"Échec du chargement des stocks facultatifs","dashboard.indicator.error.chartNotReady":"Le composant graphique n'est pas initialisé. Veuillez d'abord sélectionner la cible et attendre que le graphique se charge.","dashboard.indicator.error.chartMethodNotReady":"La méthode du composant graphique n'est pas prête, veuillez réessayer plus tard","dashboard.indicator.error.chartExecuteNotReady":"La méthode d'exécution du composant graphique n'est pas prête, veuillez réessayer plus tard","dashboard.indicator.error.parseFailed":"Impossible d'analyser le code Python","dashboard.indicator.error.parseFailedCheck":"Impossible d'analyser le code Python, veuillez vérifier le format du code","dashboard.indicator.error.addIndicatorFailed":"Échec de l'ajout de l'indicateur","dashboard.indicator.error.runIndicatorFailed":"L'indicateur de fonctionnement a échoué","dashboard.indicator.error.pleaseLogin":"Veuillez d'abord vous connecter","dashboard.indicator.error.loadDataFailed":"Le chargement des données a échoué","dashboard.indicator.error.loadDataFailedDesc":"Veuillez vérifier la connexion réseau","dashboard.indicator.error.pythonEngineFailed":"Le moteur Python n'a pas pu se charger et la fonction d'indicateur peut ne pas être disponible.","dashboard.indicator.error.chartInitFailed":"L'initialisation du graphique a échoué","dashboard.indicator.warning.enterCode":"Veuillez d'abord saisir le code de l'indicateur","dashboard.indicator.warning.pyodideLoadFailed":"Le moteur Python n'a pas pu se charger","dashboard.indicator.warning.pyodideLoadFailedDesc":"Cette fonctionnalité n'est pas disponible dans votre région ou environnement réseau actuel","dashboard.indicator.warning.chartNotInitialized":"Le graphique n'est pas initialisé et l'outil de dessin au trait ne peut pas être utilisé.","dashboard.indicator.success.runIndicator":"L'indicateur s'exécute avec succès","dashboard.indicator.success.clearDrawings":"Tous les dessins au trait effacés","dashboard.indicator.sma":"SMA (combinaison de moyenne mobile)","dashboard.indicator.ema":"EMA (combinaison de moyennes mobiles exponentielles)","dashboard.indicator.rsi":"RSI (force relative)","dashboard.indicator.macd":"MACD","dashboard.indicator.bb":"Bandes de Bollinger","dashboard.indicator.atr":"ATR (plage réelle moyenne)","dashboard.indicator.cci":"CCI (indice des canaux de matières premières)","dashboard.indicator.williams":"Williams %R (indicateur Williams)","dashboard.indicator.mfi":"IMF (indice de flux monétaire)","dashboard.indicator.adx":"ADX (indice de tendance moyen)","dashboard.indicator.obv":"OBV (vague d'énergie)","dashboard.indicator.adosc":"ADOSC (oscillateur d'accumulation/répartition)","dashboard.indicator.ad":"AD (ligne d'accumulation/distribution)","dashboard.indicator.kdj":"KDJ (indicateur stochastique)","dashboard.indicator.signal.buy":"ACHETER","dashboard.indicator.signal.sell":"VENDRE","dashboard.indicator.signal.supertrendBuy":"Acheter SuperTrend","dashboard.indicator.signal.supertrendSell":"Vente SuperTrend","dashboard.indicator.chart.kline":"Ligne K","dashboard.indicator.chart.volume":"Volume","dashboard.indicator.chart.uptrend":"Tendance à la hausse","dashboard.indicator.chart.downtrend":"Tendance à la baisse","dashboard.indicator.tooltip.time":"temps","dashboard.indicator.tooltip.open":"ouvert","dashboard.indicator.tooltip.close":"recevoir","dashboard.indicator.tooltip.high":"haut","dashboard.indicator.tooltip.low":"faible","dashboard.indicator.tooltip.volume":"Volume","dashboard.indicator.drawing.line":"segment de ligne","dashboard.indicator.drawing.horizontalLine":"ligne horizontale","dashboard.indicator.drawing.verticalLine":"ligne verticale","dashboard.indicator.drawing.ray":"rayon","dashboard.indicator.drawing.straightLine":"ligne droite","dashboard.indicator.drawing.parallelLine":"lignes parallèles","dashboard.indicator.drawing.priceLine":"ligne de prix","dashboard.indicator.drawing.priceChannel":"canal de prix","dashboard.indicator.drawing.fibonacciLine":"Lignes de Fibonacci","dashboard.indicator.drawing.measure":"Mesure","dashboard.indicator.drawing.clearAll":"Effacer tous les dessins au trait","dashboard.indicator.market.USStock":"Actions américaines","dashboard.indicator.market.Crypto":"crypto-monnaie","dashboard.indicator.market.Forex":"Forex","dashboard.indicator.market.Futures":"Contrats à terme","dashboard.indicator.create":"Créer un indicateur","dashboard.indicator.editor.title":"Créer/modifier des indicateurs","dashboard.indicator.editor.name":"Nom de l'indicateur","dashboard.indicator.editor.nameRequired":"Veuillez saisir le nom de l'indicateur","dashboard.indicator.editor.namePlaceholder":"Veuillez saisir le nom de l'indicateur","dashboard.indicator.editor.description":"Description de l'indicateur","dashboard.indicator.editor.descriptionPlaceholder":"Veuillez saisir une description de l'indicateur (facultatif)","dashboard.indicator.editor.code":"Code Python","dashboard.indicator.editor.codeRequired":"Veuillez entrer le code de l'indicateur","dashboard.indicator.editor.codePlaceholder":"Veuillez saisir le code Python","dashboard.indicator.editor.run":"courir","dashboard.indicator.editor.runHint":"Cliquez sur le bouton Exécuter pour prévisualiser l'effet de l'indicateur sur le graphique K-line","dashboard.indicator.editor.guide":"Guide de développement","dashboard.indicator.editor.guideTitle":"Guide de développement d'indicateurs Python","dashboard.indicator.editor.save":"enregistrer","dashboard.indicator.editor.cancel":"Annuler","dashboard.indicator.editor.unnamed":"Indicateur sans nom","dashboard.indicator.editor.publishToCommunity":"Publier sur la communauté","dashboard.indicator.editor.publishToCommunityHint":"Une fois publié, les autres utilisateurs peuvent visualiser et utiliser votre indicateur dans la communauté","dashboard.indicator.editor.indicatorType":"Type d'indicateur","dashboard.indicator.editor.indicatorTypeRequired":"Veuillez sélectionner le type d'indicateur","dashboard.indicator.editor.indicatorTypePlaceholder":"Veuillez sélectionner le type d'indicateur","dashboard.indicator.editor.previewImage":"Aperçu","dashboard.indicator.editor.uploadImage":"Télécharger des photos","dashboard.indicator.editor.previewImageHint":"Taille recommandée : 800 x 400, pas plus de 2 Mo","dashboard.indicator.editor.pricing":"Prix de vente (QDT)","dashboard.indicator.editor.pricingType.free":"gratuit","dashboard.indicator.editor.pricingType.permanent":"permanent","dashboard.indicator.editor.pricingType.monthly":"paiement mensuel","dashboard.indicator.editor.price":"prix","dashboard.indicator.editor.priceRequired":"Veuillez entrer le prix","dashboard.indicator.editor.pricePlaceholder":"Veuillez entrer le prix","dashboard.indicator.editor.pricingHint":"Bien que le prix des indicateurs gratuits soit de 0, la plateforme vous récompensera (QDT) en fonction de votre utilisation de l'indicateur et de votre taux d'éloges.","dashboard.indicator.editor.aiGenerate":"Génération intelligente","dashboard.indicator.editor.aiPromptPlaceholder":"Dites-moi vos idées et je générerai le code de l'indicateur Python pour vous","dashboard.indicator.editor.aiGenerateBtn":"Code généré par l'IA","dashboard.indicator.editor.aiPromptRequired":"Veuillez entrer vos pensées","dashboard.indicator.editor.aiGenerateSuccess":"Génération de code réussie","dashboard.indicator.editor.aiGenerateError":"Échec de la génération du code, veuillez réessayer plus tard","dashboard.indicator.backtest.title":"Backtest des indicateurs","dashboard.indicator.backtest.config":"Paramètres de backtest","dashboard.indicator.backtest.startDate":"date de début","dashboard.indicator.backtest.endDate":"date de fin","dashboard.indicator.backtest.selectStartDate":"Sélectionnez la date de début","dashboard.indicator.backtest.selectEndDate":"Sélectionnez la date de fin","dashboard.indicator.backtest.startDateRequired":"Veuillez sélectionner une date de début","dashboard.indicator.backtest.endDateRequired":"Veuillez sélectionner une date de fin","dashboard.indicator.backtest.initialCapital":"Capital initial","dashboard.indicator.backtest.initialCapitalRequired":"Veuillez saisir les fonds initiaux","dashboard.indicator.backtest.commission":"Frais de traitement","dashboard.indicator.backtest.leverage":"Ratio de levier","dashboard.indicator.backtest.tradeDirection":"Orientation commerciale","dashboard.indicator.backtest.longOnly":"Allez-y longtemps","dashboard.indicator.backtest.shortOnly":"court","dashboard.indicator.backtest.both":"Bidirectionnel","dashboard.indicator.backtest.run":"Commencer le backtest","dashboard.indicator.backtest.rerun":"Backtester à nouveau","dashboard.indicator.backtest.close":"Fermer","dashboard.indicator.backtest.running":"Backtest des indicateurs en cours...","dashboard.indicator.backtest.results":"Résultats du backtest","dashboard.indicator.backtest.totalReturn":"rendement total","dashboard.indicator.backtest.annualReturn":"revenu annualisé","dashboard.indicator.backtest.maxDrawdown":"prélèvement maximum","dashboard.indicator.backtest.sharpeRatio":"Rapport de netteté","dashboard.indicator.backtest.winRate":"taux de réussite","dashboard.indicator.backtest.profitFactor":"ratio profits/pertes","dashboard.indicator.backtest.totalTrades":"Nombre de transactions","dashboard.indicator.totalReturn":"rendement total","dashboard.indicator.annualReturn":"taux de rendement annualisé","dashboard.indicator.maxDrawdown":"prélèvement maximum","dashboard.indicator.sharpeRatio":"Rapport de netteté","dashboard.indicator.winRate":"taux de réussite","dashboard.indicator.profitFactor":"ratio profits/pertes","dashboard.indicator.totalTrades":"nombre total de transactions","dashboard.indicator.backtest.totalCommission":"frais de traitement totaux","dashboard.indicator.backtest.equityCurve":"courbe des taux","dashboard.indicator.backtest.strategy":"Revenu de l'indicateur","dashboard.indicator.backtest.benchmark":"Rendement de référence","dashboard.indicator.backtest.tradeHistory":"historique des transactions","dashboard.indicator.backtest.tradeTime":"temps","dashboard.indicator.backtest.tradeType":"Tapez","dashboard.indicator.backtest.buy":"acheter","dashboard.indicator.backtest.sell":"vendre","dashboard.indicator.backtest.liquidation":"Liquidation","dashboard.indicator.backtest.openLong":"Ouvert longtemps","dashboard.indicator.backtest.closeLong":"Pinduo","dashboard.indicator.backtest.closeLongStop":"Près du long (stop loss)","dashboard.indicator.backtest.closeLongProfit":"Fermez davantage (prenez des bénéfices)","dashboard.indicator.backtest.addLong":"Ajouter une position longue","dashboard.indicator.backtest.openShort":"Ouvert court","dashboard.indicator.backtest.closeShort":"vide","dashboard.indicator.backtest.closeShortStop":"Fermer (stopper la perte)","dashboard.indicator.backtest.closeShortProfit":"Fermer (prendre des bénéfices)","dashboard.indicator.backtest.addShort":"Ajouter une position courte","dashboard.indicator.backtest.price":"prix","dashboard.indicator.backtest.amount":"Quantité","dashboard.indicator.backtest.balance":"Solde du compte","dashboard.indicator.backtest.profit":"Profits et pertes","dashboard.indicator.backtest.success":"Backtest terminé","dashboard.indicator.backtest.failed":"Échec du backtest, veuillez réessayer plus tard","dashboard.indicator.backtest.noIndicatorCode":"Il n'y a pas de code backtestable pour cet indicateur","dashboard.indicator.backtest.noSymbol":"Veuillez d'abord sélectionner la cible de la transaction","dashboard.indicator.backtest.dateRangeExceeded":"La plage de temps du backtest dépasse la limite : {timeframe} la période peut être backtestée au maximum {maxRange}","dashboard.indicator.backtest.dateRangeExceededDays":"Backtest range exceeds limit: {timeframe} max {maxRange} ({maxDays} days)","dashboard.indicator.backtest.metaLine":"Symbol: {symbol} | Market: {market} | Timeframe: {timeframe}","dashboard.indicator.backtest.savedRunId":"Backtest saved. Run ID: {id}","dashboard.indicator.backtest.prev":"Previous","dashboard.indicator.backtest.next":"Next","dashboard.indicator.backtest.steps.strategy.title":"Strategy","dashboard.indicator.backtest.steps.strategy.desc":"Position sizing & risk controls","dashboard.indicator.backtest.steps.trading.title":"Trading settings","dashboard.indicator.backtest.steps.trading.desc":"Time range, capital, fees, leverage","dashboard.indicator.backtest.steps.results.title":"Results","dashboard.indicator.backtest.steps.results.desc":"Backtest output","dashboard.indicator.backtest.panel.risk":"Risk management (SL/TP/Trailing)","dashboard.indicator.backtest.panel.scale":"Scale in / DCA (trend & mean-reversion)","dashboard.indicator.backtest.panel.reduce":"Reduce position (trend & adverse)","dashboard.indicator.backtest.panel.position":"Position sizing","dashboard.indicator.backtest.field.stopLossPct":"Stop Loss (%)","dashboard.indicator.backtest.field.takeProfitPct":"Take Profit (%)","dashboard.indicator.backtest.field.trailingEnabled":"Trailing stop / take profit","dashboard.indicator.backtest.field.trailingStopPct":"Trailing drawdown (%)","dashboard.indicator.backtest.field.trailingActivationPct":"Trailing activation (%)","dashboard.indicator.backtest.field.slippage":"Slippage (%)","dashboard.indicator.backtest.field.trendAddEnabled":"Trend-following scale-in","dashboard.indicator.backtest.field.dcaAddEnabled":"Mean-reversion DCA","dashboard.indicator.backtest.field.trendAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.dcaAddStepPct":"DCA trigger (%)","dashboard.indicator.backtest.field.trendAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.dcaAddSizePct":"DCA size (% of capital)","dashboard.indicator.backtest.field.trendAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.dcaAddMaxTimes":"Max DCA times","dashboard.indicator.backtest.field.trendReduceEnabled":"Trend reduce","dashboard.indicator.backtest.field.adverseReduceEnabled":"Adverse reduce","dashboard.indicator.backtest.field.trendReduceStepPct":"Trend trigger (%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"Adverse trigger (%)","dashboard.indicator.backtest.field.trendReduceSizePct":"Reduce size (% of position)","dashboard.indicator.backtest.field.adverseReduceSizePct":"Adverse reduce size (% of position)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"Max trend reduce times","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"Max adverse reduce times","dashboard.indicator.backtest.field.entryPct":"Entry size (% of capital)","dashboard.indicator.backtest.field.minOrderPct":"Min order size (% of capital) (optional)","dashboard.indicator.backtest.closeLongTrailing":"Close Long (Trailing)","dashboard.indicator.backtest.reduceLong":"Reduce Long","dashboard.indicator.backtest.closeShortTrailing":"Close Short (Trailing)","dashboard.indicator.backtest.reduceShort":"Reduce Short","dashboard.docs.title":"Centre de documentation","dashboard.docs.search.placeholder":"Rechercher des documents...","dashboard.docs.category.all":"Tout","dashboard.docs.category.guide":"Guide de développement","dashboard.docs.category.api":"Documentation API","dashboard.docs.category.tutorial":"Tutoriel","dashboard.docs.category.faq":"FAQ","dashboard.docs.featured.title":"Documentation recommandée","dashboard.docs.featured.tag":"Recommandé","dashboard.docs.list.views":"Parcourir","dashboard.docs.list.author":"Auteur","dashboard.docs.list.empty":"Aucun document pour l'instant","dashboard.docs.list.backToAll":"Retour à tous les documents","dashboard.docs.list.total":"{count} documents au total","dashboard.docs.detail.back":"Retour à la liste des documents","dashboard.docs.detail.updatedAt":"mis à jour sur","dashboard.docs.detail.related":"Documents associés","dashboard.docs.detail.notFound":"Le document n'existe pas","dashboard.docs.detail.error":"Le document n'existe pas ou a été supprimé","dashboard.docs.search.result":"Résultats de la recherche","dashboard.docs.search.keyword":"mots-clés","community.filter.indicatorType":"Type d'indicateur","community.filter.all":"Tout","community.filter.other":"Autres options","community.filter.pricing":"Type de prix","community.filter.allPricing":"Tous les tarifs","community.filter.sortBy":"Trier par","community.filter.search":"Rechercher","community.filter.searchPlaceholder":"Rechercher le nom de la métrique","community.indicatorType.trend":"Type de tendance","community.indicatorType.momentum":"type d'élan","community.indicatorType.volatility":"Volatilité","community.indicatorType.volume":"Volume","community.indicatorType.custom":"Personnaliser","community.pricing.free":"gratuit","community.pricing.paid":"Payer","community.sort.downloads":"Téléchargements","community.sort.rating":"Note","community.sort.newest":"Dernières versions","community.pagination.total":"{total} indicateurs au total","community.noDescription":"Pas encore de description","community.detail.type":"Tapez","community.detail.pricing":"Tarifs","community.detail.rating":"Note","community.detail.downloads":"Téléchargements","community.detail.author":"Auteur","community.detail.description":"Présentation","community.detail.detailContent":"Description détaillée","community.detail.backtestStats":"Statistiques de backtest","community.action.purchase":"indicateur d'achat","community.action.addToMyIndicators":"Ajouter à mes indicateurs","community.action.favorite":"Collecte","community.action.unfavorite":"Annuler les favoris","community.action.buyNow":"Acheter maintenant","community.action.renew":"Renouvellement","community.purchase.price":"prix","community.purchase.permanent":"permanent","community.purchase.monthly":"mois","community.purchase.confirmBuy":"Confirmer pour acheter cet indicateur ({price} QDT) ?","community.purchase.confirmRenew":"Confirmer le renouvellement de cet indicateur ({price} QDT/mois) ?","community.purchase.confirmFree":"Confirmer pour ajouter cet indicateur gratuit ?","community.purchase.confirmTitle":"Confirmer l'action","community.purchase.owned":"Vous avez acheté cet indicateur (valable en permanence)","community.purchase.ownIndicator":"Il s'agit de la métrique que vous avez publiée","community.purchase.expired":"Votre abonnement a expiré","community.purchase.expiresOn":"Heure d'expiration : {date}","community.tabs.detail":"Détails de l'indicateur","community.tabs.backtest":"Données de backtest","community.tabs.ratings":"Avis d'utilisateurs","community.rating.myRating":"Ma note","community.rating.stars":"{count} étoiles","community.rating.commentPlaceholder":"Partagez votre expérience...","community.rating.submit":"Soumettre une note","community.rating.modify":"Modifier","community.rating.saveModify":"Enregistrer les modifications","community.rating.cancel":"Annuler","community.rating.selectRating":"Veuillez sélectionner une note","community.rating.success":"Évaluation réussie","community.rating.modifySuccess":"Avis modifié avec succès","community.rating.failed":"Échec de la notation","community.rating.noRatings":"Pas encore de commentaires","community.backtest.note":"Les données ci-dessus sont des résultats de backtest historiques et sont fournies à titre de référence uniquement et ne représentent pas les bénéfices futurs.","community.backtest.noData":"Aucune donnée de backtest pour l'instant","community.backtest.uploadHint":"L'auteur n'a pas encore téléchargé les données de backtest","community.message.loadFailed":"Échec du chargement de la liste des indicateurs","community.message.purchaseProcessing":"Traitement de la demande d'achat...","community.message.downloadSuccess":"La métrique a été ajoutée à ma liste de métriques","community.message.favoriteSuccess":"Collecte réussie","community.message.unfavoriteSuccess":"Annuler la collecte avec succès","community.message.operationSuccess":"Opération réussie","community.message.operationFailed":"L'opération a échoué","community.banner.readOnly":"Lecture seule","community.banner.loginHint":"Pour vous connecter ou vous inscrire, veuillez cliquer sur le bouton pour accéder à une page indépendante afin d'éviter les problèmes CSRF","community.banner.jumpButton":"Aller à Connexion/Inscription","dashboard.totalEquity":"capitaux propres totaux","dashboard.totalPnL":"Total des profits et pertes","dashboard.aiStrategies":"Stratégie d'IA","dashboard.indicatorStrategies":"Stratégie des indicateurs","dashboard.running":"Courir","dashboard.pnlHistory":"profits et pertes historiques","dashboard.strategyPerformance":"Ratio de profits et pertes de la stratégie","dashboard.recentTrades":"transactions récentes","dashboard.currentPositions":"Poste actuel","dashboard.table.time":"temps","dashboard.table.strategy":"Nom de la stratégie","dashboard.table.symbol":"Cible","dashboard.table.type":"Tapez","dashboard.table.side":"direction","dashboard.table.size":"Intérêt ouvert","dashboard.table.entryPrice":"cours d'ouverture moyen","dashboard.table.price":"prix","dashboard.table.amount":"Quantité","dashboard.table.profit":"Profits et pertes","dashboard.pendingOrders":"Historique d'exécution des ordres","dashboard.totalOrders":"Total {total} ordres","dashboard.viewError":"Voir l'erreur","dashboard.filled":"Rempli","dashboard.orderTable.time":"Heure de création","dashboard.orderTable.strategy":"Stratégie","dashboard.orderTable.symbol":"Paire de trading","dashboard.orderTable.signalType":"Type de signal","dashboard.orderTable.amount":"Quantité","dashboard.orderTable.price":"Prix de remplissage","dashboard.orderTable.status":"Statut","dashboard.orderTable.executedAt":"Heure d'exécution","dashboard.signalType.openLong":"Ouvrir Long","dashboard.signalType.openShort":"Ouvrir Short","dashboard.signalType.closeLong":"Fermer Long","dashboard.signalType.closeShort":"Fermer Short","dashboard.signalType.addLong":"Ajouter Long","dashboard.signalType.addShort":"Ajouter Short","dashboard.status.pending":"En attente","dashboard.status.processing":"En cours","dashboard.status.completed":"Terminé","dashboard.status.failed":"Échoué","dashboard.status.cancelled":"Annulé","dashboard.table.pnl":"profit ou perte non réalisé","form.basic-form.basic.title":"forme de base","form.basic-form.basic.description":"Les pages de formulaire sont utilisées pour collecter ou vérifier les informations des utilisateurs. Les formulaires de base sont couramment utilisés dans des scénarios de formulaire comportant peu d'éléments de données.","form.basic-form.title.label":"Titre","form.basic-form.title.placeholder":"Donnez un nom à l'objectif","form.basic-form.title.required":"Veuillez entrer un titre","form.basic-form.date.label":"Date de début et de fin","form.basic-form.placeholder.start":"date de début","form.basic-form.placeholder.end":"date de fin","form.basic-form.date.required":"Veuillez sélectionner les dates de début et de fin","form.basic-form.goal.label":"Description de l'objectif","form.basic-form.goal.placeholder":"Veuillez saisir vos objectifs de travail par étapes","form.basic-form.goal.required":"Veuillez saisir une description de l'objectif","form.basic-form.standard.label":"mesurer","form.basic-form.standard.placeholder":"Veuillez saisir des statistiques","form.basic-form.standard.required":"Veuillez saisir des statistiques","form.basic-form.client.label":"Client","form.basic-form.client.required":"Veuillez décrire les clients que vous servez","form.basic-form.label.tooltip":"destinataires de services cibles","form.basic-form.client.placeholder":"Veuillez décrire les clients que vous servez, les clients internes directement @nom/numéro de poste","form.basic-form.invites.label":"Inviter des réviseurs","form.basic-form.invites.placeholder":"Veuillez directement @nom/numéro d'employé, vous pouvez inviter jusqu'à 5 personnes","form.basic-form.weight.label":"poids","form.basic-form.weight.placeholder":"Veuillez entrer","form.basic-form.public.label":"public cible","form.basic-form.label.help":"Les clients et les évaluateurs sont partagés par défaut","form.basic-form.radio.public":"publique","form.basic-form.radio.partially-public":"Partiellement public","form.basic-form.radio.private":"privé","form.basic-form.publicUsers.placeholder":"ouvert à","form.basic-form.option.A":"Collègue 1","form.basic-form.option.B":"Collègue 2","form.basic-form.option.C":"Collègue trois","form.basic-form.email.required":"Veuillez entrer votre adresse e-mail !","form.basic-form.email.wrong-format":"Le format de l'adresse e-mail est incorrect !","form.basic-form.userName.required":"Veuillez entrer votre nom d'utilisateur !","form.basic-form.password.required":"Veuillez entrer votre mot de passe !","form.basic-form.password.twice":"Les mots de passe saisis deux fois ne correspondent pas !","form.basic-form.strength.msg":"Veuillez saisir au moins 6 caractères. Veuillez ne pas utiliser de mots de passe faciles à deviner.","form.basic-form.strength.strong":"Force : Forte","form.basic-form.strength.medium":"Force : moyenne","form.basic-form.strength.short":"Force : trop courte","form.basic-form.confirm-password.required":"Veuillez confirmer votre mot de passe !","form.basic-form.phone-number.required":"Veuillez entrer votre numéro de téléphone portable !","form.basic-form.phone-number.wrong-format":"Le format du numéro de téléphone portable est erroné !","form.basic-form.verification-code.required":"Veuillez entrer le code de vérification !","form.basic-form.form.get-captcha":"Obtenir le code de vérification","form.basic-form.captcha.second":"secondes","form.basic-form.form.optional":"(facultatif)","form.basic-form.form.submit":"Soumettre","form.basic-form.form.save":"enregistrer","form.basic-form.email.placeholder":"Courriel","form.basic-form.password.placeholder":"Mot de passe d'au moins 6 caractères, sensible à la casse","form.basic-form.confirm-password.placeholder":"Confirmer le mot de passe","form.basic-form.phone-number.placeholder":"Numéro de téléphone portable","form.basic-form.verification-code.placeholder":"Code de vérification","result.success.title":"Soumission réussie","result.success.description":"La page de résultats de soumission est utilisée pour renvoyer les résultats de traitement d'une série de tâches opérationnelles. S'il ne s'agit que d'une opération simple, utilisez le retour d'invite global du message. Cette zone de texte peut afficher des instructions supplémentaires simples. S'il est nécessaire d'afficher des « documents », la zone grise ci-dessous peut afficher des contenus plus complexes.","result.success.operate-title":"Nom du projet","result.success.operate-id":"ID du projet","result.success.principal":"responsable","result.success.operate-time":"Temps effectif","result.success.step1-title":"Créer un projet","result.success.step1-operator":"Qu Lili","result.success.step2-title":"Examen préliminaire du ministère","result.success.step2-operator":"Zhou Maomao","result.success.step2-extra":"Urgent","result.success.step3-title":"examen financier","result.success.step4-title":"Terminé","result.success.btn-return":"Retour à la liste","result.success.btn-project":"Afficher les articles","result.success.btn-print":"Imprimer","result.fail.error.title":"Échec de la soumission","result.fail.error.description":"Veuillez vérifier et modifier les informations suivantes avant de soumettre à nouveau.","result.fail.error.hint-title":"Le contenu que vous avez soumis contient les erreurs suivantes :","result.fail.error.hint-text1":"Votre compte a été gelé","result.fail.error.hint-btn1":"Décongeler immédiatement","result.fail.error.hint-text2":"Votre compte n'est pas encore éligible pour postuler","result.fail.error.hint-btn2":"Mettre à niveau maintenant","result.fail.error.btn-text":"Retour à la modification","account.settings.menuMap.custom":"personnalisation","account.settings.menuMap.binding":"Liaison de compte","account.settings.basic.avatar":"avatar","account.settings.basic.change-avatar":"Changer d'avatar","account.settings.basic.email":"Courriel","account.settings.basic.email-message":"Veuillez entrer votre email!","account.settings.basic.nickname":"Surnom","account.settings.basic.nickname-message":"Veuillez entrer votre pseudo !","account.settings.basic.profile":"Profil","account.settings.basic.profile-message":"Veuillez entrer votre profil personnel !","account.settings.basic.profile-placeholder":"Profil","account.settings.basic.country":"Pays/Région","account.settings.basic.country-message":"Veuillez entrer votre pays ou région !","account.settings.basic.geographic":"Province et ville","account.settings.basic.geographic-message":"Veuillez entrer votre province et votre ville !","account.settings.basic.address":"adresse postale","account.settings.basic.address-message":"Veuillez entrer votre adresse postale !","account.settings.basic.phone":"Numéro de contact","account.settings.basic.phone-message":"Veuillez entrer votre numéro de contact !","account.settings.basic.update":"Mettre à jour les informations de base","account.settings.basic.update.success":"Mettre à jour les informations de base avec succès","account.settings.security.strong":"Fort","account.settings.security.medium":"dans","account.settings.security.weak":"faible","account.settings.security.password":"Mot de passe du compte","account.settings.security.password-description":"Force actuelle du mot de passe :","account.settings.security.phone":"Téléphone mobile de sécurité","account.settings.security.phone-description":"Téléphone mobile déjà lié :","account.settings.security.question":"Problèmes de sécurité","account.settings.security.question-description":"Aucune question de sécurité n'est définie, ce qui peut protéger efficacement la sécurité du compte.","account.settings.security.email":"Lier un e-mail","account.settings.security.email-description":"Adresse e-mail déjà liée :","account.settings.security.mfa":"Appareil MFA","account.settings.security.mfa-description":"Le périphérique MFA n’est pas lié. Après la liaison, vous pouvez confirmer à nouveau.","account.settings.security.modify":"Modifier","account.settings.security.set":"paramètres","account.settings.security.bind":"reliure","account.settings.binding.taobao":"Lier Taobao","account.settings.binding.taobao-description":"Le compte Taobao n'est actuellement pas lié","account.settings.binding.alipay":"Lier Alipay","account.settings.binding.alipay-description":"Le compte Alipay n'est actuellement pas lié","account.settings.binding.dingding":"Liaison DingTalk","account.settings.binding.dingding-description":"Aucun compte DingTalk n'est actuellement lié","account.settings.binding.bind":"reliure","account.settings.notification.password":"Mot de passe du compte","account.settings.notification.password-description":"Les messages des autres utilisateurs seront notifiés sous forme de messages du site.","account.settings.notification.messages":"Messages système","account.settings.notification.messages-description":"Les messages système seront notifiés sous forme de messages de site.","account.settings.notification.todo":"Tâches à faire","account.settings.notification.todo-description":"Les tâches à effectuer seront notifiées sous forme de messages sur site","account.settings.settings.open":"ouvert","account.settings.settings.close":"fermer","trading-assistant.title":"Assistante commerciale","trading-assistant.strategyList":"Liste de stratégies","trading-assistant.createStrategy":"Créer une politique","trading-assistant.noStrategy":"Pas encore de stratégie","trading-assistant.selectStrategy":"Veuillez sélectionner une stratégie à gauche pour afficher les détails","trading-assistant.startStrategy":"stratégie de lancement","trading-assistant.stopStrategy":"stratégie d'arrêt","trading-assistant.editStrategy":"Stratégie éditoriale","trading-assistant.deleteStrategy":"Supprimer la stratégie","trading-assistant.status.running":"Courir","trading-assistant.status.stopped":"Arrêté","trading-assistant.status.error":"Erreur","trading-assistant.strategyType.IndicatorStrategy":"Stratégie d'indicateurs techniques","trading-assistant.strategyType.PromptBasedStrategy":"stratégie de mots indicateurs","trading-assistant.strategyType.GridStrategy":"stratégie de grille","trading-assistant.tabs.tradingRecords":"historique des transactions","trading-assistant.tabs.positions":"Enregistrement de poste","trading-assistant.tabs.equityCurve":"courbe des actions","trading-assistant.form.step1":"Sélectionner des indicateurs","trading-assistant.form.step2":"Configuration d'échange","trading-assistant.form.step3":"Paramètres de stratégie","trading-assistant.form.indicator":"Sélectionner des indicateurs","trading-assistant.form.indicatorHint":"Vous ne pouvez sélectionner que les indicateurs techniques que vous avez achetés ou créés","trading-assistant.form.qdtCostHints":"L'utilisation de la stratégie consommera du QDT, veuillez vous assurer que le compte dispose d'un solde QDT suffisant","trading-assistant.form.indicatorDescription":"Description de l'indicateur","trading-assistant.form.noDescription":"Pas encore de description","trading-assistant.form.exchange":"Sélectionnez un échange","trading-assistant.form.apiKey":"Clé API","trading-assistant.form.secretKey":"Clé secrète","trading-assistant.form.passphrase":"Phrase secrète","trading-assistant.form.testConnection":"tester la connexion","trading-assistant.form.strategyName":"Nom de la stratégie","trading-assistant.form.symbol":"paire de trading","trading-assistant.form.symbolHint":"Actuellement, seules les paires de trading de cryptomonnaies sont prises en charge","trading-assistant.form.initialCapital":"Montant de l'investissement","trading-assistant.form.marketType":"type de marché","trading-assistant.form.marketTypeFutures":"contrat","trading-assistant.form.marketTypeSpot":"Spot","trading-assistant.form.marketTypeHint":"Le contrat prend en charge le trading bidirectionnel et l'effet de levier, tandis que le spot ne prend en charge que les positions longues et l'effet de levier est fixé à 1x.","trading-assistant.form.leverage":"Tirer parti de plusieurs","trading-assistant.form.leverageHint":"Contrat : 1-125 fois, spot : fixe 1 fois","trading-assistant.form.spotLeverageFixed":"L'effet de levier du trading au comptant est fixé à 1x","trading-assistant.form.spotOnlyLongHint":"Le trading au comptant ne prend en charge que les positions longues","trading-assistant.form.tradeDirection":"Orientation commerciale","trading-assistant.form.tradeDirectionLong":"Seulement longtemps","trading-assistant.form.tradeDirectionShort":"Seulement court","trading-assistant.form.tradeDirectionBoth":"transaction bidirectionnelle","trading-assistant.form.timeframe":"période","trading-assistant.form.klinePeriod":"Période K-Line","trading-assistant.form.timeframe1m":"1 minute","trading-assistant.form.timeframe5m":"5 minutes","trading-assistant.form.timeframe15m":"15 minutes","trading-assistant.form.timeframe30m":"30 minutes","trading-assistant.form.timeframe1H":"1 heure","trading-assistant.form.timeframe4H":"4 heures","trading-assistant.form.timeframe1D":"1 jour","trading-assistant.form.selectStrategyType":"Sélectionner le type de stratégie","trading-assistant.form.indicatorStrategy":"Stratégie d'indicateur","trading-assistant.form.indicatorStrategyDesc":"Stratégie de trading automatisée basée sur des indicateurs techniques","trading-assistant.form.aiStrategy":"Stratégie IA","trading-assistant.form.aiStrategyDesc":"Stratégie de trading automatisée basée sur la prise de décision intelligente IA","trading-assistant.form.enableAiFilter":"Activer le filtre de décision intelligente IA","trading-assistant.form.enableAiFilterHint":"Lorsqu'il est activé, les signaux d'indicateur seront filtrés par l'IA pour améliorer la qualité des transactions","trading-assistant.form.aiFilterPrompt":"Invite personnalisée","trading-assistant.form.aiFilterPromptHint":"Fournir des instructions personnalisées pour le filtrage IA, laisser vide pour utiliser la valeur par défaut du système","trading-assistant.validation.strategyTypeRequired":"Veuillez sélectionner un type de stratégie","trading-assistant.form.advancedSettings":"Paramètres avancés","trading-assistant.form.orderMode":"Mode de commande","trading-assistant.form.orderModeMaker":"Créateur","trading-assistant.form.orderModeTaker":"Prix du marché (Preneur)","trading-assistant.form.orderModeHint":"Le mode d'ordre en attente utilise des ordres limités et les frais de traitement sont inférieurs ; le mode prix du marché est exécuté immédiatement et les frais de traitement sont plus élevés.","trading-assistant.form.makerWaitSec":"Temps d'attente pour les commandes en attente (secondes)","trading-assistant.form.makerWaitSecHint":"Le temps d'attente pour la transaction après avoir passé une commande. Annulez et réessayez après l'expiration du délai.","trading-assistant.form.makerRetries":"Nombre de tentatives pour les commandes en attente","trading-assistant.form.makerRetriesHint":"Le nombre maximum de tentatives lorsqu'un ordre en attente n'est pas exécuté","trading-assistant.form.fallbackToMarket":"L'ordre en attente échoue et le prix du marché est dégradé.","trading-assistant.form.fallbackToMarketHint":"Lorsque l'ordre en attente d'ouverture/de clôture n'a pas été exécuté, s'il doit être rétrogradé en ordre au marché pour garantir que la transaction soit terminée.","trading-assistant.form.marginMode":"Mode marge","trading-assistant.form.marginModeCross":"Entrepôt complet","trading-assistant.form.marginModeIsolated":"Position isolée","trading-assistant.form.stopLossPct":"Taux d'arrêt des pertes (%)","trading-assistant.form.stopLossPctHint":"Définissez le pourcentage de stop loss, 0 signifie que le stop loss n'est pas activé","trading-assistant.form.takeProfitPct":"Ratio de profit (%)","trading-assistant.form.takeProfitPctHint":"Définissez le pourcentage de profit, 0 signifie désactiver le profit","trading-assistant.form.signalMode":"Mode signal","trading-assistant.form.signalModeConfirmed":"Mode de confirmation","trading-assistant.form.signalModeAggressive":"Mode agressif","trading-assistant.form.signalModeHint":"Mode de confirmation : vérifie uniquement les lignes K terminées ; Mode agressif : vérifie également la formation de lignes K","trading-assistant.form.cancel":"Annuler","trading-assistant.form.prev":"Étape précédente","trading-assistant.form.next":"Étape suivante","trading-assistant.form.confirmCreate":"Confirmer la création","trading-assistant.form.confirmEdit":"Confirmer les modifications","trading-assistant.messages.createSuccess":"Stratégie créée avec succès","trading-assistant.messages.createFailed":"Échec de la création de la stratégie","trading-assistant.messages.updateSuccess":"Mise à jour de la stratégie réussie","trading-assistant.messages.updateFailed":"Échec de la mise à jour de la stratégie","trading-assistant.messages.deleteSuccess":"Suppression de la stratégie réussie","trading-assistant.messages.deleteFailed":"Échec de la suppression de la stratégie","trading-assistant.messages.startSuccess":"La stratégie a démarré avec succès","trading-assistant.messages.startFailed":"Échec du démarrage de la stratégie","trading-assistant.messages.stopSuccess":"La stratégie s'est arrêtée avec succès","trading-assistant.messages.stopFailed":"La stratégie d'arrêt a échoué","trading-assistant.messages.loadFailed":"Échec de l'obtention de la liste des règles","trading-assistant.messages.runningWarning":"La stratégie est en marche. Veuillez arrêter la stratégie avant de la modifier.","trading-assistant.messages.deleteConfirmWithName":"Êtes-vous sûr de vouloir supprimer la stratégie « {name} » ? Cette opération est irréversible.","trading-assistant.messages.deleteConfirm":"Êtes-vous sûr de vouloir supprimer cette stratégie ? Cette opération est irréversible.","trading-assistant.messages.loadTradesFailed":"Échec de l'obtention des enregistrements de transaction","trading-assistant.messages.loadPositionsFailed":"Impossible d'obtenir l'enregistrement de position","trading-assistant.messages.loadEquityFailed":"Impossible d'obtenir la courbe des capitaux propres","trading-assistant.messages.loadIndicatorsFailed":"Échec du chargement de la liste des indicateurs, veuillez réessayer plus tard","trading-assistant.messages.spotLimitations":"Le trading au comptant a été automatiquement réglé sur position longue uniquement, effet de levier 1x","trading-assistant.messages.autoFillApiConfig":"La configuration historique de l'API de l'échange a été automatiquement renseignée","trading-assistant.placeholders.selectIndicator":"Veuillez sélectionner un indicateur","trading-assistant.placeholders.selectExchange":"Veuillez sélectionner un échange","trading-assistant.placeholders.inputApiKey":"Veuillez saisir la clé API","trading-assistant.placeholders.inputSecretKey":"Veuillez entrer la clé secrète","trading-assistant.placeholders.inputPassphrase":"Veuillez saisir la phrase secrète","trading-assistant.placeholders.inputStrategyName":"Veuillez saisir un nom de stratégie","trading-assistant.placeholders.selectSymbol":"Veuillez sélectionner une paire de trading","trading-assistant.placeholders.selectTimeframe":"Veuillez sélectionner une période","trading-assistant.placeholders.selectKlinePeriod":"Veuillez sélectionner une période K-Line","trading-assistant.placeholders.inputAiFilterPrompt":"Veuillez entrer une invite personnalisée (optionnel)","trading-assistant.validation.indicatorRequired":"Veuillez sélectionner un indicateur","trading-assistant.validation.exchangeRequired":"Veuillez sélectionner un échange","trading-assistant.validation.apiKeyRequired":"Veuillez saisir la clé API","trading-assistant.validation.secretKeyRequired":"Veuillez entrer la clé secrète","trading-assistant.validation.passphraseRequired":"Veuillez saisir la phrase secrète","trading-assistant.validation.exchangeConfigIncomplete":"Veuillez remplir les informations complètes de configuration de l'échange","trading-assistant.validation.testConnectionRequired":'Veuillez d\'abord cliquer sur le bouton "Tester la connexion" et vous assurer que la connexion est réussie',"trading-assistant.validation.testConnectionFailed":"Le test de connexion a échoué, veuillez vérifier la configuration et réessayer","trading-assistant.validation.credentialRequired":"Veuillez d'abord ajouter et tester les identifiants de l'échange dans le Centre personnel","trading-assistant.validation.strategyNameRequired":"Veuillez saisir un nom de stratégie","trading-assistant.validation.symbolRequired":"Veuillez sélectionner une paire de trading","trading-assistant.validation.initialCapitalRequired":"Veuillez saisir le montant de l'investissement","trading-assistant.validation.leverageRequired":"Veuillez saisir le ratio de levier","trading-assistant.table.time":"temps","trading-assistant.table.type":"Tapez","trading-assistant.table.price":"prix","trading-assistant.table.amount":"Quantité","trading-assistant.table.value":"Montant","trading-assistant.table.commission":"frais de traitement","trading-assistant.table.symbol":"paire de trading","trading-assistant.table.side":"direction","trading-assistant.table.size":"Quantité de position","trading-assistant.table.entryPrice":"Prix d'ouverture","trading-assistant.table.currentPrice":"prix actuel","trading-assistant.table.unrealizedPnl":"profit ou perte non réalisé","trading-assistant.table.pnlPercent":"Ratio de profits et pertes","trading-assistant.table.buy":"acheter","trading-assistant.table.sell":"vendre","trading-assistant.table.long":"Allez-y longtemps","trading-assistant.table.short":"court","trading-assistant.table.noPositions":"Aucun poste pour l'instant","trading-assistant.detail.title":"Détails de la stratégie","trading-assistant.detail.strategyName":"Nom de la stratégie","trading-assistant.detail.strategyType":"Type de stratégie","trading-assistant.detail.status":"Statut","trading-assistant.detail.tradingMode":"modèle commercial","trading-assistant.detail.exchange":"échange","trading-assistant.detail.initialCapital":"Capital initial","trading-assistant.detail.totalInvestment":"montant total de l'investissement","trading-assistant.detail.currentEquity":"Valeur nette actuelle","trading-assistant.detail.totalPnl":"Total des profits et pertes","trading-assistant.detail.indicatorName":"Nom de l'indicateur","trading-assistant.detail.maxLeverage":"Effet de levier maximal","trading-assistant.detail.decideInterval":"intervalle de décision","trading-assistant.detail.symbols":"Objet de transaction","trading-assistant.detail.createdAt":"temps de création","trading-assistant.detail.updatedAt":"Heure de mise à jour","trading-assistant.detail.llmConfig":"Configuration du modèle d'IA","trading-assistant.detail.exchangeConfig":"Configuration d'échange","trading-assistant.detail.provider":"fournisseur","trading-assistant.detail.modelId":"ID du modèle","trading-assistant.detail.close":"Fermer","trading-assistant.detail.loadFailed":"Échec de l'obtention des détails de la stratégie","trading-assistant.equity.noData":"Aucune donnée sur la valeur nette pour l'instant","trading-assistant.equity.equity":"valeur nette","trading-assistant.exchange.tradingMode":"modèle commercial","trading-assistant.exchange.virtual":"trading simulé","trading-assistant.exchange.live":"Transaction réelle","trading-assistant.exchange.selectExchange":"Sélectionnez un échange","trading-assistant.exchange.walletAddress":"adresse du portefeuille","trading-assistant.exchange.walletAddressPlaceholder":"Veuillez saisir l'adresse de votre portefeuille (en commençant par 0x)","trading-assistant.exchange.privateKey":"clé privée","trading-assistant.exchange.privateKeyPlaceholder":"Veuillez saisir la clé privée (64 caractères)","trading-assistant.exchange.testConnection":"tester la connexion","trading-assistant.exchange.connectionSuccess":"Connexion réussie","trading-assistant.exchange.connectionFailed":"La connexion a échoué","trading-assistant.exchange.testFailed":"Le test de connexion a échoué","trading-assistant.exchange.fillComplete":"Veuillez remplir les informations complètes de configuration de l'échange","trading-assistant.strategyTypeOptions.ai":"Stratégie basée sur l'IA","trading-assistant.strategyTypeOptions.indicator":"Stratégie d'indicateurs techniques","trading-assistant.strategyTypeOptions.aiDeveloping":"La fonction de stratégie basée sur l'IA est en cours de développement, alors restez à l'écoute","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"Des fonctionnalités de stratégie basées sur l'IA sont en cours de développement","trading-assistant.indicatorType.trend":"Tendance","trading-assistant.indicatorType.momentum":"élan","trading-assistant.indicatorType.volatility":"Fluctuations","trading-assistant.indicatorType.volume":"Volume","trading-assistant.indicatorType.custom":"Personnaliser","trading-assistant.exchangeNames":{okx:"OKX",binance:"Binance",hyperliquid:"Hyperliquide",blockchaincom:"Blockchain.com",coinbaseexchange:"Coinbase",gate:"Porte.io",mexc:"MEXIQUE",kraken:"Kraken",bitfinex:"Bitfinex",bybit:"Bybit",kucoin:"KuCoin",huobi:"Huobi",bitget:"Bitget",bitmex:"BitMEX",deribit:"Déribuer",phemex:"Phemex",bitmart:"BitMart",bitstamp:"Timbre de bits",bittrex:"Bittrex",poloniex:"Poloniex",gemini:"Gémeaux",cryptocom:"Crypto.com",bitflyer:"bitFlyer",upbit:"Débit ascendant",bithumb:"Bithumb",coinone:"Coinone",zb:"ZB",lbank:"LBanque",bibox:"Bibox",bigone:"BigONE",bitrue:"Bitrue",coinex:"CoinEx",digifinex:"DigiFinex",ftx:"FTX",ftxus:"FTX États-Unis",binanceus:"Binance États-Unis",binancecoinm:"Binance COIN-M",binanceusdm:"Binance USDⓈ-M",deepcoin:"Deepcoin"},"ai-trading-assistant.title":"Assistant de trading IA","ai-trading-assistant.strategyList":"Liste de stratégies","ai-trading-assistant.createStrategy":"Créer une politique","ai-trading-assistant.noStrategy":"Pas encore de stratégie","ai-trading-assistant.selectStrategy":"Veuillez sélectionner une stratégie à gauche pour afficher les détails","ai-trading-assistant.startStrategy":"stratégie de lancement","ai-trading-assistant.stopStrategy":"stratégie d'arrêt","ai-trading-assistant.editStrategy":"Stratégie éditoriale","ai-trading-assistant.deleteStrategy":"Supprimer la stratégie","ai-trading-assistant.status.running":"Courir","ai-trading-assistant.status.stopped":"Arrêté","ai-trading-assistant.status.error":"Erreur","ai-trading-assistant.tabs.tradingRecords":"historique des transactions","ai-trading-assistant.tabs.positions":"Enregistrement de poste","ai-trading-assistant.tabs.aiDecisions":"Enregistrement de décision IA","ai-trading-assistant.tabs.equityCurve":"courbe des actions","ai-trading-assistant.form.createTitle":"Créer des stratégies de trading IA","ai-trading-assistant.form.editTitle":"Modifier la stratégie de trading de l'IA","ai-trading-assistant.form.strategyName":"Nom de la stratégie","ai-trading-assistant.form.modelId":"Modèle d'IA","ai-trading-assistant.form.modelIdHint":"Utilisez le service système OpenRouter sans configurer la clé API","ai-trading-assistant.form.decideInterval":"intervalle de décision","ai-trading-assistant.form.decideInterval5m":"5 minutes","ai-trading-assistant.form.decideInterval10m":"10 minutes","ai-trading-assistant.form.decideInterval30m":"30 minutes","ai-trading-assistant.form.decideInterval1h":"1 heure","ai-trading-assistant.form.decideInterval4h":"4 heures","ai-trading-assistant.form.decideInterval1d":"1 jour","ai-trading-assistant.form.decideInterval1w":"1 semaine","ai-trading-assistant.form.decideIntervalHint":"L’intervalle de temps nécessaire à l’IA pour prendre des décisions","ai-trading-assistant.form.runPeriod":"Cycle d'exécution","ai-trading-assistant.form.runPeriodHint":"L'heure de début et l'heure de fin de l'exécution de la stratégie","ai-trading-assistant.form.startDate":"date de début","ai-trading-assistant.form.endDate":"date de fin","ai-trading-assistant.form.qdtCostTitle":"Instructions de déduction QDT","ai-trading-assistant.form.qdtCostHint":"{cost} QDT sera déduit pour chaque décision de l'IA. Veuillez vous assurer que votre compte dispose d'un solde QDT suffisant. Lors de l'exécution de la stratégie, des frais seront déduits en temps réel pour chaque décision.","ai-trading-assistant.form.apiKey":"Clé API","ai-trading-assistant.form.exchange":"Sélectionnez un échange","ai-trading-assistant.form.secretKey":"Clé secrète","ai-trading-assistant.form.passphrase":"Phrase secrète","ai-trading-assistant.form.testConnection":"tester la connexion","ai-trading-assistant.form.symbol":"paire de trading","ai-trading-assistant.form.symbolHint":"Sélectionnez la paire de trading à trader","ai-trading-assistant.form.initialCapital":"Montant investi (marge)","ai-trading-assistant.form.leverage":"Tirer parti de plusieurs","ai-trading-assistant.form.timeframe":"période","ai-trading-assistant.form.timeframe1m":"1 minute","ai-trading-assistant.form.timeframe5m":"5 minutes","ai-trading-assistant.form.timeframe15m":"15 minutes","ai-trading-assistant.form.timeframe30m":"30 minutes","ai-trading-assistant.form.timeframe1H":"1 heure","ai-trading-assistant.form.timeframe4H":"4 heures","ai-trading-assistant.form.timeframe1D":"1 jour","ai-trading-assistant.form.marketType":"type de marché","ai-trading-assistant.form.marketTypeFutures":"contrat","ai-trading-assistant.form.marketTypeSpot":"Spot","ai-trading-assistant.form.totalPnl":"Total des profits et pertes","ai-trading-assistant.form.customPrompt":"Mots d'invite personnalisés","ai-trading-assistant.form.customPromptHint":"Facultatif, utilisé pour personnaliser les stratégies de trading de l'IA et la logique de prise de décision","ai-trading-assistant.form.cancel":"Annuler","ai-trading-assistant.form.prev":"Étape précédente","ai-trading-assistant.form.next":"Étape suivante","ai-trading-assistant.form.confirmCreate":"Confirmer la création","ai-trading-assistant.form.confirmEdit":"Confirmer les modifications","ai-trading-assistant.messages.createSuccess":"Stratégie créée avec succès","ai-trading-assistant.messages.createFailed":"Échec de la création de la stratégie","ai-trading-assistant.messages.updateSuccess":"Mise à jour de la stratégie réussie","ai-trading-assistant.messages.updateFailed":"Échec de la mise à jour de la stratégie","ai-trading-assistant.messages.deleteSuccess":"Suppression de la stratégie réussie","ai-trading-assistant.messages.deleteFailed":"Échec de la suppression de la stratégie","ai-trading-assistant.messages.startSuccess":"La stratégie a démarré avec succès","ai-trading-assistant.messages.startFailed":"Échec du démarrage de la stratégie","ai-trading-assistant.messages.stopSuccess":"La stratégie s'est arrêtée avec succès","ai-trading-assistant.messages.stopFailed":"La stratégie d'arrêt a échoué","ai-trading-assistant.messages.loadFailed":"Échec de l'obtention de la liste des règles","ai-trading-assistant.messages.loadDecisionsFailed":"Échec de l'obtention du dossier de décision de l'IA","ai-trading-assistant.messages.deleteConfirm":"Êtes-vous sûr de vouloir supprimer cette stratégie ? Cette opération est irréversible.","ai-trading-assistant.placeholders.inputStrategyName":"Veuillez saisir un nom de stratégie","ai-trading-assistant.placeholders.selectModelId":"Veuillez sélectionner un modèle d'IA","ai-trading-assistant.placeholders.selectDecideInterval":"Veuillez sélectionner un intervalle de décision","ai-trading-assistant.placeholders.startTime":"heure de début","ai-trading-assistant.placeholders.endTime":"heure de fin","ai-trading-assistant.placeholders.inputApiKey":"Veuillez saisir la clé API","ai-trading-assistant.placeholders.selectExchange":"Veuillez sélectionner un échange","ai-trading-assistant.placeholders.inputSecretKey":"Veuillez entrer la clé secrète","ai-trading-assistant.placeholders.inputPassphrase":"Veuillez saisir la phrase secrète","ai-trading-assistant.placeholders.selectSymbol":"Veuillez sélectionner une paire de trading, telle que : BTC/USDT","ai-trading-assistant.placeholders.selectTimeframe":"Veuillez sélectionner une période","ai-trading-assistant.placeholders.inputCustomPrompt":"Veuillez saisir un mot d'invite personnalisé (facultatif)","ai-trading-assistant.validation.strategyNameRequired":"Veuillez saisir un nom de stratégie","ai-trading-assistant.validation.modelIdRequired":"Veuillez sélectionner un modèle d'IA","ai-trading-assistant.validation.runPeriodRequired":"Veuillez sélectionner un cycle d'exécution","ai-trading-assistant.validation.apiKeyRequired":"Veuillez saisir la clé API","ai-trading-assistant.validation.exchangeRequired":"Veuillez sélectionner un échange","ai-trading-assistant.validation.secretKeyRequired":"Veuillez entrer la clé secrète","ai-trading-assistant.validation.symbolRequired":"Veuillez sélectionner une paire de trading","ai-trading-assistant.validation.initialCapitalRequired":"Veuillez saisir le montant de l'investissement","ai-trading-assistant.table.time":"temps","ai-trading-assistant.table.type":"Tapez","ai-trading-assistant.table.price":"prix","ai-trading-assistant.table.amount":"Quantité","ai-trading-assistant.table.value":"Montant","ai-trading-assistant.table.symbol":"paire de trading","ai-trading-assistant.table.side":"direction","ai-trading-assistant.table.size":"Quantité de position","ai-trading-assistant.table.entryPrice":"Prix d'ouverture","ai-trading-assistant.table.currentPrice":"prix actuel","ai-trading-assistant.table.unrealizedPnl":"profit ou perte non réalisé","ai-trading-assistant.table.profit":"Profits et pertes","ai-trading-assistant.table.openLong":"Ouvert longtemps","ai-trading-assistant.table.closeLong":"Pinduo","ai-trading-assistant.table.openShort":"Ouvert court","ai-trading-assistant.table.closeShort":"vide","ai-trading-assistant.table.addLong":"Gadot","ai-trading-assistant.table.addShort":"ajouter un court","ai-trading-assistant.table.closeShortProfit":"Prendre des bénéfices sur une position courte","ai-trading-assistant.table.closeShortStop":"Arrêter la perte","ai-trading-assistant.table.closeLongProfit":"Arrêtez-vous longtemps et profitez","ai-trading-assistant.table.closeLongStop":"Arrêter la perte","ai-trading-assistant.table.buy":"acheter","ai-trading-assistant.table.sell":"vendre","ai-trading-assistant.table.long":"Allez-y longtemps","ai-trading-assistant.table.short":"court","ai-trading-assistant.table.hold":"tenir","ai-trading-assistant.table.reasoning":"Raison de l'analyse","ai-trading-assistant.table.decisions":"prise de décision","ai-trading-assistant.table.riskAssessment":"évaluation des risques","ai-trading-assistant.table.confidence":"Confiance","ai-trading-assistant.table.totalRecords":"{total} enregistrements au total","ai-trading-assistant.table.noPositions":"Aucun poste pour l'instant","ai-trading-assistant.detail.title":"Détails de la stratégie","ai-trading-assistant.equity.noData":"Aucune donnée sur la valeur nette pour l'instant","ai-trading-assistant.equity.equity":"valeur nette","ai-trading-assistant.exchange.testFailed":"Le test de connexion a échoué","ai-trading-assistant.exchange.connectionSuccess":"Connexion réussie","ai-trading-assistant.exchange.connectionFailed":"La connexion a échoué","ai-trading-assistant.form.advancedSettings":"Paramètres avancés","ai-trading-assistant.form.orderMode":"Mode de commande","ai-trading-assistant.form.orderModeMaker":"Créateur","ai-trading-assistant.form.orderModeTaker":"Prix du marché (Preneur)","ai-trading-assistant.form.orderModeHint":"Le mode d'ordre en attente utilise des ordres limités et les frais de traitement sont inférieurs ; le mode prix du marché est exécuté immédiatement et les frais de traitement sont plus élevés.","ai-trading-assistant.form.makerWaitSec":"Temps d'attente pour les commandes en attente (secondes)","ai-trading-assistant.form.makerWaitSecHint":"Le temps d'attente pour la transaction après avoir passé une commande. Annulez et réessayez après l'expiration du délai.","ai-trading-assistant.form.makerRetries":"Nombre de tentatives pour les commandes en attente","ai-trading-assistant.form.makerRetriesHint":"Le nombre maximum de tentatives lorsqu'un ordre en attente n'est pas exécuté","ai-trading-assistant.form.fallbackToMarket":"L'ordre en attente échoue et le prix du marché est dégradé.","ai-trading-assistant.form.fallbackToMarketHint":"Lorsque l'ordre en attente d'ouverture/de clôture n'a pas été exécuté, s'il doit être rétrogradé en ordre au marché pour garantir que la transaction soit terminée.","ai-trading-assistant.form.marginMode":"Mode marge","ai-trading-assistant.form.marginModeCross":"Entrepôt complet","ai-trading-assistant.form.marginModeIsolated":"Position isolée","ai-analysis.title":"Moteur de trading quantique","ai-analysis.system.online":"en ligne","ai-analysis.system.agents":"agent","ai-analysis.system.active":"actif","ai-analysis.system.stage":"scène","ai-analysis.panel.roster":"Composition des agents","ai-analysis.panel.thinking":"En pensant...","ai-analysis.panel.done":"Terminé","ai-analysis.panel.standby":"veille","ai-analysis.input.title":"Moteur de trading quantique","ai-analysis.input.placeholder":"Sélectionnez l'actif cible (par exemple BTC/USDT)","ai-analysis.input.watchlist":"Stocks optionnels","ai-analysis.input.start":"Démarrer l'analyse","ai-analysis.input.recent":"Tâches récentes :","ai-analysis.vis.stage":"étape","ai-analysis.vis.processing":"Traitement","ai-analysis.result.complete":"Analyse terminée","ai-analysis.result.signal":"signal final","ai-analysis.result.confidence":"Confiance :","ai-analysis.result.new":"nouvelle analyse","ai-analysis.result.full":"Voir le rapport complet","ai-analysis.logs.title":"Journal système","ai-analysis.modal.title":"rapport confidentiel","ai-analysis.modal.fundamental":"analyse fondamentale","ai-analysis.modal.technical":"Analyse technique","ai-analysis.modal.sentiment":"Analyse émotionnelle","ai-analysis.modal.risk":"évaluation des risques","ai-analysis.stage.idle":"veille","ai-analysis.stage.1":"Première phase : analyse multidimensionnelle","ai-analysis.stage.2":"Phase deux : débat long-court","ai-analysis.stage.3":"Phase trois : planification stratégique","ai-analysis.stage.4":"La quatrième étape : la revue du contrôle des risques","ai-analysis.stage.complete":"Terminé","ai-analysis.agent.investment_director":"Directeur des investissements","ai-analysis.agent.role.investment_director":"Analyse complète et conclusion finale","ai-analysis.agent.market":"analyste de marché","ai-analysis.agent.role.market":"Données technologiques et de marché","ai-analysis.agent.fundamental":"analyste fondamental","ai-analysis.agent.role.fundamental":"Finances et valorisation","ai-analysis.agent.technical":"analyste technique","ai-analysis.agent.role.technical":"Indicateurs et graphiques techniques","ai-analysis.agent.news":"analyste de nouvelles","ai-analysis.agent.role.news":"Filtre d'actualités mondiales","ai-analysis.agent.sentiment":"analyste des sentiments","ai-analysis.agent.role.sentiment":"Social et émotionnel","ai-analysis.agent.risk":"analyste des risques","ai-analysis.agent.role.risk":"Vérification des risques de base","ai-analysis.agent.bull":"chercheur optimiste","ai-analysis.agent.role.bull":"Extraction de catalyseurs de croissance","ai-analysis.agent.bear":"chercheur baissier","ai-analysis.agent.role.bear":"Recherche de risques et de défauts","ai-analysis.agent.manager":"directeur de recherche","ai-analysis.agent.role.manager":"modérateur du débat","ai-analysis.agent.trader":"commerçant","ai-analysis.agent.role.trader":"Stratège exécutif","ai-analysis.agent.risky":"analyste activiste","ai-analysis.agent.role.risky":"stratégie agressive","ai-analysis.agent.neutral":"analyste d'équilibre","ai-analysis.agent.role.neutral":"stratégie d'équilibrage","ai-analysis.agent.safe":"analyste conservateur","ai-analysis.agent.role.safe":"stratégie conservatrice","ai-analysis.agent.cro":"Responsable du contrôle des risques (CRO)","ai-analysis.agent.role.cro":"autorité décisionnelle finale","ai-analysis.script.market":"Récupération des données OHLCV des principaux échanges...","ai-analysis.script.fundamental":"Récupération des rapports financiers trimestriels...","ai-analysis.script.technical":"Analyser les indicateurs techniques et les modèles de graphiques...","ai-analysis.script.news":"Analyse de l'actualité financière mondiale...","ai-analysis.script.sentiment":"Analyser les tendances des réseaux sociaux...","ai-analysis.script.risk":"Calcul de la volatilité historique...","invite.inviteLink":"Lien d'invitation","invite.copy":"Copier le lien","invite.copySuccess":"Copiez avec succès !","invite.copyFailed":"Échec de la copie, veuillez copier manuellement","invite.noInviteLink":"Lien d'invitation non généré","invite.totalInvites":"Invitations cumulées","invite.totalReward":"Récompenses cumulées","invite.rules":"Règles d'invitation","invite.rule1":"Chaque fois que vous invitez avec succès un ami à s'inscrire, vous recevrez une récompense","invite.rule2":"Si l'ami invité termine la première transaction, vous recevrez des récompenses supplémentaires","invite.rule3":"Les récompenses d'invitation seront envoyées directement sur votre compte","invite.inviteList":"Liste d'invitations","invite.tasks":"centre de mission","invite.inviteeName":"Invité","invite.inviteTime":"Heure d'invitation","invite.status":"Statut","invite.reward":"récompense","invite.active":"actif","invite.inactive":"Non activé","invite.completed":"Terminé","invite.claimed":"Reçu","invite.pending":"A compléter","invite.goToTask":"compléter","invite.claimReward":"réclamer des récompenses","invite.verify":"Vérification terminée","invite.verifySuccess":"Vérification réussie ! Tâche terminée","invite.verifyNotCompleted":"La tâche n'est pas encore terminée, veuillez d'abord la terminer","invite.verifyFailed":"La vérification a échoué, veuillez réessayer plus tard","invite.claimSuccess":"Vous avez reçu avec succès {reward} QDT !","invite.claimFailed":"Échec de la collecte, veuillez réessayer plus tard","invite.totalRecords":"{total} enregistrements au total","invite.task.twitter.title":"Retweeter sur X (Twitter)","invite.task.twitter.desc":"Partagez nos tweets officiels sur votre compte X (Twitter)","invite.task.youtube.title":"Suivez notre chaîne YouTube","invite.task.youtube.desc":"Abonnez-vous et suivez notre chaîne YouTube officielle","invite.task.telegram.title":"Rejoindre le groupe Telegram","invite.task.telegram.desc":"Rejoignez notre groupe communautaire officiel Telegram","invite.task.discord.title":"Rejoignez un serveur Discord","invite.task.discord.desc":"Rejoignez notre serveur communautaire Discord",message:"-","layouts.usermenu.dialog.title":"informations","layouts.usermenu.dialog.content":"Êtes-vous sûr de vouloir vous déconnecter ?","layouts.userLayout.title":"Trouver la vérité dans l'incertitude","dashboard.indicator.boundary.message":"Note: The indicator script only computes plots + buy/sell signals. Position sizing, risk, scaling, fees/slippage belong to execution config.","dashboard.indicator.boundary.indicatorRule":"Keep the script to buy/sell only (and set df['buy']/df['sell']). Do NOT implement position management, TP/SL, scaling in the script.","dashboard.indicator.boundary.backtestRule":"Rule: If a bar has a main signal (buy/sell → open/close/reverse), scaling in/out is skipped on the same bar.","dashboard.indicator.guide.title":"Python Indicator & Strategy Development Guide","dashboard.indicator.guide.intro":"This platform supports writing custom technical indicators and trading signals using Python. The system includes built-in pandas and numpy data analysis libraries. You can use standard DataFrame operations to process K-line data and draw charts or mark buy/sell signals.","dashboard.indicator.guide.section1.title":"1. Runtime Environment & Predefined Variables","dashboard.indicator.guide.section1.env":"Your code runs in a browser-based Python environment (Pyodide).","dashboard.indicator.guide.section1.libs":"Pre-installed Libraries","dashboard.indicator.guide.section1.libsDesc":"The following libraries are imported by default, no need to import again:","dashboard.indicator.guide.section1.libsList":"pandas (pd), numpy (np), math, json","dashboard.indicator.guide.section1.data":"Input Data: df","dashboard.indicator.guide.section1.dataDesc":"The system automatically converts current K-line data into a Pandas DataFrame object, variable name is df.","dashboard.indicator.guide.section1.dataColumns":"df contains the following columns (all float type):","dashboard.indicator.guide.section1.dataColumnsList":"time (timestamp, seconds), open, high, low, close, volume","dashboard.indicator.guide.section1.dataNote":"Data index is arranged from old to new (0 is the earliest data, last row is the latest data).","dashboard.indicator.guide.section1.dataIndex":"Important: df index is timestamp (DatetimeIndex), please preserve the index, avoid using .values which loses the index.","dashboard.indicator.guide.section2.title":"2. Parameter Definition","dashboard.indicator.guide.section2.desc":"You can define variables as parameters at the beginning of your code. The system will try to parse statements like variable = value as adjustable parameters.","dashboard.indicator.guide.section2.example":"Parameter Example","dashboard.indicator.guide.section2.exampleCode":"span = 20 or multiplier = 2.0","dashboard.indicator.guide.section3.title":"3. Backtest Signal Setup (Important!)","dashboard.indicator.guide.section3.desc":"If you want your indicator to support backtesting, you must set the following two columns in your code:","dashboard.indicator.guide.section3.backtestRequired":"Required for Backtesting:","dashboard.indicator.guide.section3.backtestBuySignal":"df['buy_signal'] - Boolean Series, True indicates buy signal","dashboard.indicator.guide.section3.backtestSellSignal":"df['sell_signal'] - Boolean Series, True indicates sell signal","dashboard.indicator.guide.section3.backtestExample":"Example:","dashboard.indicator.guide.section3.backtestExampleCode":"df['buy_signal'] = condition_buy
df['sell_signal'] = condition_sell","dashboard.indicator.guide.section3.backtestNote":"Note: Even if you only set output.signals for chart display, you must set these two columns to enable backtesting.","dashboard.indicator.guide.section4.title":"4. Output Requirements: output","dashboard.indicator.guide.section4.desc":"At the end of code execution, you must define a dictionary named output to tell the chart how to display results.","dashboard.indicator.guide.section4.fields":"The output dictionary contains the following fields:","dashboard.indicator.guide.section4.plots":"plots - For drawing lines (e.g., moving averages, RSI)","dashboard.indicator.guide.section4.signals":"signals - For marking buy/sell signals (e.g., arrows, labels)","dashboard.indicator.guide.section4.name":"name - Indicator name (optional)","dashboard.indicator.guide.section4.calculatedVars":"calculatedVars - Calculated variables (optional, for displaying additional information)","dashboard.indicator.guide.section5.title":"5. Plot Configuration (Plots)","dashboard.indicator.guide.section5.desc":"Each object in the plots list represents a line.","dashboard.indicator.guide.section5.table.field":"Field","dashboard.indicator.guide.section5.table.type":"Type","dashboard.indicator.guide.section5.table.required":"Required","dashboard.indicator.guide.section5.table.requiredYes":"Yes","dashboard.indicator.guide.section5.table.requiredNo":"No","dashboard.indicator.guide.section5.table.desc":"Description","dashboard.indicator.guide.section5.table.name":"The name of the indicator line, displayed in the legend","dashboard.indicator.guide.section5.table.data":"Data list, length must match the number of rows in df. Recommended to use series.tolist()","dashboard.indicator.guide.section5.table.color":"Line color (Hex format, e.g. '#ff0000'). If not filled, the system will automatically assign","dashboard.indicator.guide.section5.table.typeDesc":"Chart type, default is 'line'","dashboard.indicator.guide.section5.table.overlay":"Important. True means display on main chart (with K-line), False means display on sub-chart (independent area)","dashboard.indicator.guide.section5.example":"Example: Draw Simple Moving Average (SMA)","dashboard.indicator.guide.section5.exampleCalc":"Calculate SMA","dashboard.indicator.guide.section5.exampleOutput":"Construct Output","dashboard.indicator.guide.section5.exampleOverlay":"Display on main chart","dashboard.indicator.guide.section6.title":"6. Signal Markers (Signals)","dashboard.indicator.guide.section6.desc":"signals are used to mark buy/sell points on specific K-lines through icons or text. Note: This is only for chart display. The backtest system uses df['buy_signal'] and df['sell_signal'].","dashboard.indicator.guide.section6.table.type":"Signal type: 'buy' (buy, marked below K-line) or 'sell' (sell, marked above K-line)","dashboard.indicator.guide.section6.table.data":"Signal data list. Fill price value at signal positions, fill None (or np.nan) at non-signal positions","dashboard.indicator.guide.section6.table.text":'Text displayed on the label (e.g. "B", "S", "Buy", "Sell")',"dashboard.indicator.guide.section6.table.color":"Marker color","dashboard.indicator.guide.section6.hint":"The system automatically handles positioning.","dashboard.indicator.guide.section6.buy":"Markers will be automatically positioned below the Low of the current K-line","dashboard.indicator.guide.section6.sell":"Markers will be automatically positioned above the High of the current K-line","dashboard.indicator.guide.section6.example":"Example: Draw Buy/Sell Signals","dashboard.indicator.guide.section6.exampleInit":"Initialize signal list, fill all with None","dashboard.indicator.guide.section6.exampleLogic":"Simple logic: mark buy when close price is greater than open price","dashboard.indicator.guide.section6.exampleNote":"In actual logic, please use loops or vectorized operations","dashboard.indicator.guide.section6.examplePrice":"Record price","dashboard.indicator.guide.section6.exampleText":"Buy","dashboard.indicator.guide.section7.title":"7. Complete Code Examples","dashboard.indicator.guide.section7.exampleA":"Example A: Dual EMA Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleACode":'# 1. Calculate indicators
df[\'ema_fast\'] = df[\'close\'].ewm(span=5, adjust=False).mean()
df[\'ema_slow\'] = df[\'close\'].ewm(span=13, adjust=False).mean()

# 2. Calculate crossover signals
cross_up = (df[\'ema_fast\'] > df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) <= df[\'ema_slow\'].shift(1))
cross_down = (df[\'ema_fast\'] < df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) >= df[\'ema_slow\'].shift(1))

# 3. 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = cross_up
df[\'close_long\'] = cross_down
df[\'open_short\'] = cross_down
df[\'close_short\'] = cross_up

# 4. Generate signal data for chart display
buy_signals = [df[\'low\'].iloc[i] * 0.995 if cross_up.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if cross_down.iloc[i] else None for i in range(len(df))]

# 5. Build output
output = {
"name": "Dual EMA Strategy",
"plots": [
{"name": "EMA 5", "data": df[\'ema_fast\'].tolist(), "color": "#FF6B6B", "overlay": True},
{"name": "EMA 13", "data": df[\'ema_slow\'].tolist(), "color": "#4ECDC4", "overlay": True}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section7.exampleB":"Example B: Bollinger Bands - Chart Display Only","dashboard.indicator.guide.section7.exampleBCode":'# Calculate Bollinger Bands (chart display only, no backtesting)
length = 20
mult = 2.0
df[\'sma\'] = df[\'close\'].rolling(length).mean()
df[\'std\'] = df[\'close\'].rolling(length).std()
df[\'upper\'] = df[\'sma\'] + mult * df[\'std\']
df[\'lower\'] = df[\'sma\'] - mult * df[\'std\']

output = {
"name": "Bollinger Bands",
"plots": [
{"name": "Upper", "data": df[\'upper\'].tolist(), "color": "#FF5252", "overlay": True},
{"name": "Middle", "data": df[\'sma\'].tolist(), "color": "#2196F3", "overlay": True},
{"name": "Lower", "data": df[\'lower\'].tolist(), "color": "#00E676", "overlay": True}
]
}',"dashboard.indicator.guide.section7.exampleC":"Example C: RSI Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleCCode":'# Calculate RSI
delta = df[\'close\'].diff()
up = delta.clip(lower=0)
down = -1 * delta.clip(upper=0)
ema_up = up.ewm(com=13, adjust=False).mean()
ema_down = down.ewm(com=13, adjust=False).mean()
rs = ema_up / ema_down
df[\'rsi\'] = 100 - (100 / (1 + rs))

# Generate trading signals
buy_condition = df[\'rsi\'] < 30 # Oversold buy
sell_condition = df[\'rsi\'] > 70 # Overbought sell

# 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = buy_condition
df[\'close_long\'] = sell_condition
df[\'open_short\'] = sell_condition
df[\'close_short\'] = buy_condition

# Generate chart signals
buy_signals = [df[\'low\'].iloc[i] * 0.995 if buy_condition.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if sell_condition.iloc[i] else None for i in range(len(df))]

output = {
"name": "RSI Strategy",
"plots": [
{"name": "RSI", "data": df[\'rsi\'].tolist(), "color": "#9C27B0", "overlay": False},
{"name": "Overbought", "data": [70] * len(df), "color": "#FF5252", "style": "dashed", "overlay": False},
{"name": "Oversold", "data": [30] * len(df), "color": "#00E676", "style": "dashed", "overlay": False}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section6.param":"Parameters","dashboard.indicator.guide.section6.calc":"Calculate","dashboard.indicator.guide.section6.output":"Output","dashboard.indicator.guide.section6.generate":"Generate signal data (initialize with None)","dashboard.indicator.guide.section6.subchart":"Display on sub-chart","dashboard.indicator.guide.section8.title":"8. Frequently Asked Questions (FAQ)","dashboard.indicator.guide.section8.q1":"Q: Why can't my indicator be backtested?","dashboard.indicator.guide.section8.a1":"A: The backtest system requires NEW signal columns: df['open_long'], df['close_long'], df['open_short'], df['close_short'] (boolean). Even if you set output.signals for chart display, you must set these columns to enable backtesting.","dashboard.indicator.guide.section8.q2":"Q: Data length mismatch?","dashboard.indicator.guide.section8.a2":"A: The data list in plots and signals must have exactly the same length as the K-line data. If you use df['xxx'].tolist(), there is usually no problem.","dashboard.indicator.guide.section8.q3":"Q: How to handle NaN (empty values)?","dashboard.indicator.guide.section8.a3":"A: Pandas calculations (such as rolling mean) will produce NaN at the beginning. The system will automatically convert NaN to null for chart rendering. You don't need to manually clean it, but if you need specific logic, you can use df.fillna(0) or other methods.","dashboard.indicator.guide.section8.q4":"Q: Index mismatch causing all signals to be NaN?","dashboard.indicator.guide.section8.a4":"A: Please ensure you preserve the original df index (timestamp). Avoid using .values to create new Series. Use columns directly like df['close'] for operations.","dashboard.indicator.guide.section8.q5":"Q: Can I use third-party network libraries?","dashboard.indicator.guide.section8.a5":"A: No. The runtime environment is a browser sandbox and cannot use libraries like requests to request external APIs, nor can it install additional pip packages. Limited to built-in libraries such as pandas, numpy, math, json.","dashboard.indicator.guide.section8.q6":"Q: How to debug code?","dashboard.indicator.guide.section8.a6":"A: If the chart does not display indicators, it is usually because the Python code has an error. Please check for syntax errors or array index out of bounds. It is recommended to debug the algorithm logic in a local Python environment first, then copy it in.","dashboard.indicator.guide.section8.q7":"Q: Backtest shows 0 signals?","dashboard.indicator.guide.section8.a7":"A: Please check the data type of df['open_long']/df['close_long']/df['open_short']/df['close_short']. They should be boolean (True/False), not numeric. Use condition.fillna(False).astype(bool) to ensure correct type.","dashboard.indicator.backtest.commissionHint":"Charged on notional value (incl. leverage) per trade; both entry & exit are deducted from balance.","dashboard.indicator.backtest.historyTitle":"Backtest History","dashboard.indicator.backtest.historyRefresh":"Refresh","dashboard.indicator.backtest.historyView":"View","dashboard.indicator.backtest.historyNoData":"No backtest history","dashboard.indicator.backtest.historyUseCurrent":"Only current symbol/timeframe","dashboard.indicator.backtest.historyFilterSymbol":"Symbol","dashboard.indicator.backtest.historyFilterTimeframe":"Timeframe","dashboard.indicator.backtest.historyApply":"Apply filters","dashboard.indicator.backtest.historyAIAnalyze":"AI Analyze","dashboard.indicator.backtest.historyAIAnalyzeTitle":"AI Suggestions","dashboard.indicator.backtest.historyNoAIResult":"No AI analysis result","dashboard.indicator.backtest.historyRunId":"Run ID","dashboard.indicator.backtest.historyCreatedAt":"Time","dashboard.indicator.backtest.historyRange":"Range","dashboard.indicator.backtest.historyStatus":"Status","dashboard.indicator.backtest.historyStatusSuccess":"Success","dashboard.indicator.backtest.historyStatusFailed":"Failed","dashboard.indicator.backtest.historyActions":"Actions","dashboard.indicator.backtest.hint.entryPctMax":"Max entry: {maxPct}% (reserve budget for future scale-ins)","trading-assistant.exchange.ipWhitelistTip":"Please add the following IPs to the whitelist in your exchange API settings:","signal-robot.title":"Signal Robot Console","signal-robot.createBot":"Create New Bot","signal-robot.search.nameOrSymbol":"Name/Symbol","signal-robot.search.placeholder":"Search bot name or symbol","signal-robot.search.status":"Status","signal-robot.search.statusAll":"All","signal-robot.search.statusRunning":"Running","signal-robot.search.statusPaused":"Paused","signal-robot.search.query":"Query","signal-robot.search.reset":"Reset","signal-robot.table.botName":"Bot Name","signal-robot.table.symbolTimeframe":"Symbol/Timeframe","signal-robot.table.triggerStrategy":"Trigger Strategy","signal-robot.table.notificationChannels":"Notification Channels","signal-robot.table.status":"Status","signal-robot.table.action":"Action","signal-robot.table.triggerConditions":"{count} trigger conditions","signal-robot.table.monitoring":"Monitoring","signal-robot.table.paused":"Paused","signal-robot.table.edit":"Edit","signal-robot.table.pause":"Pause","signal-robot.table.start":"Start","signal-robot.table.delete":"Delete","signal-robot.table.deleteConfirm":"Are you sure you want to delete this bot?","signal-robot.table.deleteSuccess":"Deleted successfully","signal-robot.table.startSuccess":"Bot started","signal-robot.table.pauseSuccess":"Bot paused","signal-robot.channel.telegram":"Telegram","signal-robot.channel.discord":"Discord","signal-robot.channel.email":"Email","signal-robot.channel.webhook":"Webhook","signal-robot.channel.browser":"Browser Push","signal-robot.modal.createTitle":"Create New Signal Robot","signal-robot.modal.editTitle":"Edit Signal Robot","signal-robot.modal.step.basic":"Basic Settings","signal-robot.modal.step.entry":"Entry Strategy","signal-robot.modal.step.position":"Position Management","signal-robot.modal.step.risk":"Risk Control","signal-robot.modal.step.notify":"Notification Config","signal-robot.modal.prev":"Previous","signal-robot.modal.next":"Next","signal-robot.modal.preview":"Preview Backtest","signal-robot.modal.complete":"Complete & Run","signal-robot.modal.saveSuccess":"Saved successfully","signal-robot.modal.previewDeveloping":"Preview feature is under development...","signal-robot.modal.basicInfoRequired":"Please complete basic information","signal-robot.basic.alert":"Set basic information for the bot","signal-robot.basic.title":"Basic Information","signal-robot.basic.botName":"Bot Name","signal-robot.basic.botNamePlaceholder":"e.g.: BTC SuperTrend Strategy","signal-robot.basic.symbol":"Trading Pair","signal-robot.basic.symbolPlaceholder":"Select from watchlist","signal-robot.basic.noWatchlist":"No watchlist items, please add in market page first","signal-robot.basic.timeframe":"K-Line Period","signal-robot.basic.timeframe15m":"15 Minutes","signal-robot.basic.timeframe30m":"30 Minutes","signal-robot.basic.timeframe1h":"1 Hour","signal-robot.basic.timeframe4h":"4 Hours","signal-robot.basic.timeframe1d":"1 Day","signal-robot.basic.autoNameSuggestion":"{symbol} Signal Robot","signal-robot.entry.alert":"Trigger entry signal when all conditions below are met","signal-robot.entry.condition":"Condition {index}","signal-robot.entry.indicator":"Indicator","signal-robot.entry.indicatorSupertrend":"SuperTrend","signal-robot.entry.indicatorEma":"EMA (Exponential Moving Average)","signal-robot.entry.indicatorRsi":"RSI (Relative Strength Index)","signal-robot.entry.indicatorMacd":"MACD","signal-robot.entry.indicatorBollinger":"Bollinger Bands","signal-robot.entry.atrPeriod":"ATR Period","signal-robot.entry.multiplier":"Multiplier","signal-robot.entry.triggerSignal":"Trigger Signal","signal-robot.entry.signalTrendBullish":"Trend Bullish","signal-robot.entry.signalTrendBearish":"Trend Bearish","signal-robot.entry.signalIsUptrend":"Is Uptrend","signal-robot.entry.signalIsDowntrend":"Is Downtrend","signal-robot.entry.period":"Period","signal-robot.entry.compareCondition":"Compare Condition","signal-robot.entry.priceAbove":"Price > EMA (Price Above)","signal-robot.entry.priceBelow":"Price < EMA (Price Below)","signal-robot.entry.crossUp":"Price Crosses Above EMA (Golden Cross)","signal-robot.entry.crossDown":"Price Crosses Below EMA (Death Cross)","signal-robot.entry.compare":"Compare","signal-robot.entry.greaterThan":"Greater Than","signal-robot.entry.lessThan":"Less Than","signal-robot.entry.crossUpShort":"Cross Up","signal-robot.entry.crossDownShort":"Cross Down","signal-robot.entry.threshold":"Threshold","signal-robot.entry.selectIndicator":"Please select an indicator to configure parameters","signal-robot.entry.addCondition":"Add Condition","signal-robot.position.alert":"Configure initial position size, leverage and pyramiding rules","signal-robot.position.basicTitle":"Basic Position Management","signal-robot.position.initialSize":"Initial Size (Capital %)","signal-robot.position.initialSizeHint":"Recommended 5% - 20%","signal-robot.position.leverage":"Leverage","signal-robot.position.leverageHint":"Please ensure your exchange account supports this leverage","signal-robot.position.maxPyramiding":"Max Pyramiding Times","signal-robot.position.maxPyramidingHint":"0 means no pyramiding","signal-robot.position.pyramidingTitle":"Pyramiding Rules","signal-robot.position.pyramidingEnabled":"Enabled","signal-robot.position.pyramidingDisabled":"Disabled","signal-robot.position.pyramidingCondition":"Pyramiding Trigger Condition","signal-robot.position.priceRisePct":"Price Rises (Long) / Falls (Short)","signal-robot.position.profitPct":"Profit Reaches","signal-robot.position.triggerThreshold":"Trigger Threshold (%)","signal-robot.position.triggerThresholdHint":"e.g. 3%: add position once every 3% rise","signal-robot.position.addSize":"Single Add Size (Capital %)","signal-robot.position.pyramidingDisabledHint":"Pyramiding disabled, only initial position will be executed","signal-robot.risk.alert":"Configure take profit, stop loss and exit rules","signal-robot.risk.stopLossTitle":"Stop Loss","signal-robot.risk.stopLossEnabled":"Enabled","signal-robot.risk.stopLossDisabled":"Disabled","signal-robot.risk.stopLossType":"Stop Loss Type","signal-robot.risk.stopLossFixedPct":"Fixed Percentage","signal-robot.risk.stopLossAtrMultiplier":"ATR Multiplier","signal-robot.risk.stopLossValue":"Value","signal-robot.risk.stopLossFixedHint":"e.g. 2%: stop loss when loss reaches 2%","signal-robot.risk.stopLossAtrHint":"e.g. 2.0: stop loss when price touches ATR*2.0","signal-robot.risk.stopLossDisabledHint":"Stop loss disabled (high risk)","signal-robot.risk.trailingStopTitle":"Trailing Stop","signal-robot.risk.activationProfit":"Activation Profit (%)","signal-robot.risk.activationProfitHint":"Start trailing when profit reaches this level","signal-robot.risk.callbackPct":"Callback (%)","signal-robot.risk.callbackPctHint":"Trigger take profit when price falls from peak by this percentage","signal-robot.risk.trailingStopDisabledHint":"Trailing stop disabled","signal-robot.risk.otherExitTitle":"Other Exit Rules","signal-robot.risk.signalExit":"Allow Signal Exit","signal-robot.risk.signalExitHint":"Close position immediately when reverse signal appears (e.g. close long when short signal appears)","signal-robot.notify.alert":"Configure notification methods when signal is triggered","signal-robot.notify.channelTitle":"Notification Channels","signal-robot.notify.discordWebhook":"Discord Webhook","signal-robot.notify.genericWebhook":"Generic Webhook","signal-robot.notify.webhookUrl":"Webhook URL","signal-robot.notify.webhookUrlPlaceholder":"https://example.com/webhook","signal-robot.notify.discordUrl":"Discord URL","signal-robot.notify.discordUrlPlaceholder":"https://discord.com/api/webhooks/...","signal-robot.operator.greaterThan":"Greater Than","signal-robot.operator.lessThan":"Less Than","signal-robot.operator.equal":"Equal","signal-robot.operator.goldenCross":"Golden Cross","signal-robot.operator.deathCross":"Death Cross","signal-robot.operator.increaseBy":"Increase By","signal-robot.operator.decreaseBy":"Decrease By","signal-robot.indicator.price":"Price","signal-robot.indicator.rsi":"RSI","signal-robot.indicator.kdjK":"KDJ(K)","signal-robot.indicator.kdjJ":"KDJ(J)","signal-robot.indicator.macd":"MACD","signal-robot.indicator.macdHist":"MACD Histogram","signal-robot.indicator.bollingerUp":"Bollinger Upper","signal-robot.indicator.bollingerLow":"Bollinger Lower","signal-robot.indicator.volume":"Volume","signal-robot.indicator.changePct1h":"1H Change %","signal-robot.indicator.changePct24h":"24H Change %","signal-robot.indicator.signalLine":"Signal Line","settings.group.agent_memory":"Mémoire/Réflexion","settings.group.reflection_worker":"Worker de vérification de réflexion automatique","settings.field.ENABLE_AGENT_MEMORY":"Activer la mémoire de l’agent","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"Activer la recherche vectorielle (local)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"Dimension d’embedding","settings.field.AGENT_MEMORY_TOP_K":"Nombre Top-K","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"Taille de la fenêtre de candidats","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"Demi-vie de décroissance temporelle (jours)","settings.field.AGENT_MEMORY_W_SIM":"Poids de similarité","settings.field.AGENT_MEMORY_W_RECENCY":"Poids de récence","settings.field.AGENT_MEMORY_W_RETURNS":"Poids des rendements","settings.field.ENABLE_REFLECTION_WORKER":"Activer la vérification automatique","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"Intervalle de vérification (s)","profile.notifications.title":"Paramètres de notification","profile.notifications.hint":"Configurez vos méthodes de notification par défaut, utilisées automatiquement lors de la création de surveillances et alertes","profile.notifications.defaultChannels":"Canaux de notification par défaut","profile.notifications.browser":"Notification dans l'app","profile.notifications.email":"E-mail","profile.notifications.phone":"SMS","profile.notifications.telegramBotToken":"Token du Bot Telegram","profile.notifications.telegramBotTokenPlaceholder":"Entrez votre Token Bot Telegram","profile.notifications.telegramBotTokenHint":"Créez un bot via @BotFather pour obtenir le Token","profile.notifications.telegramChatId":"Chat ID Telegram","profile.notifications.telegramPlaceholder":"Entrez votre Chat ID Telegram (ex: 123456789)","profile.notifications.telegramHint":"Envoyez /start à @userinfobot pour obtenir votre Chat ID","profile.notifications.notifyEmail":"E-mail de notification","profile.notifications.emailPlaceholder":"Adresse e-mail pour recevoir les notifications","profile.notifications.emailHint":"Utilise l'e-mail du compte par défaut, vous pouvez en définir un autre","profile.notifications.phonePlaceholder":"Entrez le numéro de téléphone (ex: +33612345678)","profile.notifications.phoneHint":"L'administrateur doit configurer le service Twilio","profile.notifications.discordWebhook":"Webhook Discord","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"Créez un Webhook dans les paramètres du serveur Discord","profile.notifications.webhookUrl":"URL Webhook","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"URL Webhook personnalisée, notifications envoyées via POST JSON","profile.notifications.webhookToken":"Token Webhook (Optionnel)","profile.notifications.webhookTokenPlaceholder":"Bearer Token pour l'authentification","profile.notifications.webhookTokenHint":"Envoyé comme Authorization: Bearer Token au Webhook","profile.notifications.testBtn":"Envoyer une notification test","profile.notifications.saveSuccess":"Paramètres de notification enregistrés","profile.notifications.selectChannel":"Veuillez sélectionner au moins un canal de notification","profile.notifications.fillTelegramToken":"Veuillez remplir le Token Bot Telegram","profile.notifications.fillTelegram":"Veuillez remplir le Chat ID Telegram","profile.notifications.fillEmail":"Veuillez remplir l'e-mail de notification","profile.notifications.testSent":"Notification test envoyée, vérifiez vos canaux de notification"},y=(0,i.A)((0,i.A)({},h),f)}}]); \ No newline at end of file +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[969],{92556:function(e,a,t){t.d(a,{default:function(){return y}});var i=t(76338),s={items_per_page:"/ page",jump_to:"Aller à",jump_to_confirm:"confirmer",page:"",prev_page:"Page précédente",next_page:"Page suivante",prev_5:"5 Pages précédentes",next_5:"5 Pages suivantes",prev_3:"3 Pages précédentes",next_3:"3 Pages suivantes"},r=t(85505),n={today:"Aujourd'hui",now:"Maintenant",backToToday:"Aujourd'hui",ok:"Ok",clear:"Rétablir",month:"Mois",year:"Année",timeSelect:"Sélectionner l'heure",dateSelect:"Sélectionner la date",monthSelect:"Choisissez un mois",yearSelect:"Choisissez une année",decadeSelect:"Choisissez une décennie",yearFormat:"YYYY",dateFormat:"DD/MM/YYYY",dayFormat:"DD",dateTimeFormat:"DD/MM/YYYY HH:mm:ss",monthBeforeYear:!0,previousMonth:"Mois précédent (PageUp)",nextMonth:"Mois suivant (PageDown)",previousYear:"Année précédente (Ctrl + gauche)",nextYear:"Année prochaine (Ctrl + droite)",previousDecade:"Décennie précédente",nextDecade:"Décennie suivante",previousCentury:"Siècle précédent",nextCentury:"Siècle suivant"},o={placeholder:"Sélectionner l'heure"},d=o,l={lang:(0,r.A)({placeholder:"Sélectionner une date",rangePlaceholder:["Date de début","Date de fin"]},n),timePickerLocale:(0,r.A)({},d)},c=l,u=c,m={locale:"fr",Pagination:s,DatePicker:c,TimePicker:d,Calendar:u,Table:{filterTitle:"Filtrer",filterConfirm:"OK",filterReset:"Réinitialiser"},Modal:{okText:"OK",cancelText:"Annuler",justOkText:"OK"},Popconfirm:{okText:"OK",cancelText:"Annuler"},Transfer:{searchPlaceholder:"Recherche",itemUnit:"élément",itemsUnit:"éléments"},Empty:{description:"Aucune donnée"},Upload:{uploading:"Téléchargement...",removeFile:"Effacer le fichier",uploadError:"Erreur de téléchargement",previewFile:"Fichier de prévisualisation",downloadFile:"Télécharger un fichier"},Text:{edit:"éditer",copy:"copier",copied:"copie effectuée",expand:"développer"}},g=m,p=t(85498),b=t.n(p),h={antLocale:g,momentName:"fr",momentLocale:b()},f={submit:"Soumettre",save:"enregistrer","submit.ok":"Soumission réussie","save.ok":"Enregistré avec succès","menu.welcome":"bienvenue","menu.home":"Page d'accueil","menu.dashboard":"Tableau de bord","menu.dashboard.indicator":"Analyse des indicateurs","menu.dashboard.community":"communauté des indicateurs","menu.dashboard.analysis":"Analyse de l'IA","menu.dashboard.tradingAssistant":"Assistante commerciale","menu.dashboard.aiTradingAssistant":"Assistant de trading IA","menu.dashboard.signalRobot":"Robot de signal","menu.dashboard.monitor":"Page de surveillance","menu.dashboard.workplace":"établi","menu.form":"page de formulaire","menu.form.basic-form":"forme de base","menu.form.step-form":"formulaire étape par étape","menu.form.step-form.info":"Formulaire étape par étape (remplir les informations de transfert)","menu.form.step-form.confirm":"Formulaire étape par étape (confirmer les informations de transfert)","menu.form.step-form.result":"Formulaire étape par étape (à compléter)","menu.form.advanced-form":"Formulaires avancés","menu.list":"Page de liste","menu.list.table-list":"Formulaire de demande","menu.list.basic-list":"Liste standard","menu.list.card-list":"liste de cartes","menu.list.search-list":"liste de recherche","menu.list.search-list.articles":"Liste de recherche (articles)","menu.list.search-list.projects":"Liste de recherche (projet)","menu.list.search-list.applications":"Liste de recherche (application)","menu.profile":"Page de détails","menu.profile.basic":"Page de détails de base","menu.profile.advanced":"Page de détails avancés","menu.result":"Page de résultats","menu.result.success":"page de réussite","menu.result.fail":"page d'échec","menu.exception":"Page d'exceptions","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"erreur de déclenchement","menu.account":"Page personnelle","menu.account.center":"Centre personnel","menu.account.settings":"paramètres personnels","menu.account.trigger":"Erreur de déclenchement","menu.account.logout":"Se déconnecter","menu.wallet":"mon portefeuille","menu.docs":"Centre de documentation","menu.docs.detail":"Détails du document","menu.header.refreshPage":"actualiser la page","menu.invite.friends":"Inviter des amis","app.setting.pagestyle":"paramètres de style généraux","app.setting.pagestyle.light":"Style de menu lumineux","app.setting.pagestyle.dark":"style de menu sombre","app.setting.pagestyle.realdark":"mode sombre","app.setting.themecolor":"couleur du thème","app.setting.navigationmode":"Mode navigation","app.setting.sidemenu.nav":"Navigation dans la barre latérale","app.setting.topmenu.nav":"Navigation dans la barre supérieure","app.setting.content-width":"largeur de la zone de contenu","app.setting.content-width.tooltip":"Ce paramètre n'est efficace que lorsque [Navigation dans la barre supérieure]","app.setting.content-width.fixed":"Corrigé","app.setting.content-width.fluid":"diffusion en continu","app.setting.fixedheader":"En-tête fixe","app.setting.fixedheader.tooltip":"Configurable lorsqu'il est fixe","app.setting.autoHideHeader":"Masquer l'en-tête lors du défilement","app.setting.fixedsidebar":"Menu latéral fixe","app.setting.sidemenu":"Disposition du menu latéral","app.setting.topmenu":"Disposition du menu supérieur","app.setting.othersettings":"Autres paramètres","app.setting.weakmode":"Mode de faiblesse des couleurs","app.setting.multitab":"Mode multi-onglets","app.setting.copy":"Paramètres de copie","app.setting.loading":"Chargement du thème","app.setting.copyinfo":"Copiez les paramètres avec succès src/config/defaultSettings.js","app.setting.copy.success":"Copie terminée","app.setting.copy.fail":"Échec de la copie","app.setting.theme.switching":"Changer de thème !","app.setting.production.hint":"La barre de configuration est uniquement utilisée pour l'aperçu dans l'environnement de développement et ne sera pas affichée dans l'environnement de production. Veuillez copier et modifier le fichier de configuration manuellement.","app.setting.themecolor.daybreak":"Bleu aube (par défaut)","app.setting.themecolor.dust":"crépuscule","app.setting.themecolor.volcano":"volcan","app.setting.themecolor.sunset":"coucher de soleil","app.setting.themecolor.cyan":"Mingqing","app.setting.themecolor.green":"aurore verte","app.setting.themecolor.geekblue":"bleu geek","app.setting.themecolor.purple":"Jiang Zi","app.setting.tooltip":"Paramètres des pages","user.login.userName":"Nom d'utilisateur","user.login.password":"Mot de passe","user.login.username.placeholder":"Compte : administrateur","user.login.password.placeholder":"Mot de passe : admin ou ant.design","user.login.message-invalid-credentials":"La connexion a échoué, veuillez vérifier votre e-mail et votre code de vérification","user.login.message-invalid-verification-code":"Erreur de code de vérification","user.login.tab-login-credentials":"Connexion par mot de passe du compte","user.login.tab-login-email":"Connexion par e-mail","user.login.tab-login-mobile":"Connexion au numéro de téléphone portable","user.login.captcha.placeholder":"Veuillez saisir le code de vérification graphique","user.login.mobile.placeholder":"Numéro de téléphone portable","user.login.mobile.verification-code.placeholder":"Code de vérification","user.login.email.placeholder":"Veuillez entrer votre adresse e-mail","user.login.email.verification-code.placeholder":"Veuillez entrer le code de vérification","user.login.email.sending":"Le code de vérification est en cours d'envoi...","user.login.email.send-success-title":"Conseils","user.login.email.send-success":"Code de vérification envoyé avec succès, veuillez vérifier votre email","user.login.sms.send-success":"Code de vérification envoyé avec succès, veuillez vérifier le message texte","user.login.remember-me":"Connexion automatique","user.login.forgot-password":"Mot de passe oublié","user.login.sign-in-with":"Autres méthodes de connexion","user.login.signup":"Créer un compte","user.login.login":"Connexion","user.register.register":"S'inscrire","user.register.email.placeholder":"Courriel","user.register.password.placeholder":"Veuillez saisir au moins 6 caractères. Veuillez ne pas utiliser de mots de passe faciles à deviner.","user.register.password.popover-message":"Veuillez saisir au moins 6 caractères. Veuillez ne pas utiliser de mots de passe faciles à deviner.","user.register.confirm-password.placeholder":"Confirmer le mot de passe","user.register.get-verification-code":"Obtenir le code de vérification","user.register.sign-in":"Connectez-vous en utilisant un compte existant","user.register-result.msg":"Votre compte : {email} Inscription réussie","user.register-result.activation-email":"L'e-mail d'activation a été envoyé dans votre boîte mail et est valable 24 heures. Veuillez vous connecter rapidement à votre messagerie et cliquer sur le lien contenu dans l'e-mail pour activer votre compte.","user.register-result.back-home":"Retour à la page d'accueil","user.register-result.view-mailbox":"Vérifiez votre boîte aux lettres","user.email.required":"Veuillez entrer votre adresse e-mail !","user.email.wrong-format":"Le format de l'adresse e-mail est incorrect !","user.userName.required":"Veuillez saisir votre nom de compte ou votre adresse e-mail","user.password.required":"Veuillez entrer votre mot de passe !","user.password.twice.msg":"Les mots de passe saisis deux fois ne correspondent pas !","user.password.strength.msg":"Le mot de passe n'est pas assez fort","user.password.strength.strong":"Force : Forte","user.password.strength.medium":"Force : moyenne","user.password.strength.low":"Force : faible","user.password.strength.short":"Force : trop courte","user.confirm-password.required":"Veuillez confirmer votre mot de passe !","user.phone-number.required":"Veuillez saisir le bon numéro de téléphone portable","user.phone-number.wrong-format":"Le format du numéro de téléphone portable est erroné !","user.verification-code.required":"Veuillez entrer le code de vérification !","user.captcha.required":"Veuillez saisir le code de vérification graphique !","user.login.infos":"QuantDinger est un outil auxiliaire d'analyse boursière multi-agents d'IA et n'a pas de qualifications en conseil en investissement en valeurs mobilières. Tous les résultats d'analyse, scores et avis de référence de la plateforme sont automatiquement générés par l'IA sur la base de données historiques et sont utilisés uniquement à des fins d'apprentissage, de recherche et d'échange technique, et ne constituent aucun conseil d'investissement ou base de prise de décision. L'investissement en actions implique divers risques tels que le risque de marché, le risque de liquidité, le risque politique, etc., qui peuvent entraîner une perte du principal. Les utilisateurs doivent prendre des décisions indépendantes en fonction de leur propre tolérance au risque, et tout comportement d'investissement et conséquences découlant de l'utilisation de cet outil seront à la charge de l'utilisateur. Le marché est risqué et les investissements doivent être prudents.","user.login.tab-login-web3":"Connexion Web3","user.login.web3.tip":"Connexion par signature à l'aide du portefeuille","user.login.web3.connect":"Connectez le portefeuille et connectez-vous","user.login.web3.no-wallet":"Portefeuille non détecté","user.login.web3.no-address":"Adresse du portefeuille non obtenue","user.login.web3.nonce-failed":"Impossible d'obtenir un nombre aléatoire","user.login.web3.verify-failed":"La vérification de la signature a échoué","user.login.web3.success":"Connexion réussie","user.login.web3.failed":"Échec de la connexion au portefeuille","nav.no_wallet":"Portefeuille non détecté","nav.copy":"Copier","nav.copy_success":"Copié avec succès","user.login.oauth.google":"Connectez-vous avec Google","user.login.oauth.github":"Connectez-vous avec GitHub","user.login.oauth.loading":"Redirection vers la page d'autorisation...","user.login.oauth.failed":"Échec de la connexion OAuth","user.login.oauth.get-url-failed":"Échec de l'obtention du lien d'autorisation","user.login.subtitle":"Informations quantitatives sur les marchés mondiaux","user.login.legal.title":"Mentions légales","user.login.legal.view":"Voir les mentions légales","user.login.legal.collapse":"Réduire les mentions légales","user.login.legal.agree":"J'ai lu et j'accepte les mentions légales","user.login.legal.required":"Veuillez d'abord lire et vérifier les mentions légales","user.login.legal.content":"QuantDinger est un outil auxiliaire d'analyse boursière multi-agents d'IA et n'a pas de qualifications en conseil en investissement en valeurs mobilières. Tous les résultats d'analyse, notes et avis de référence de la plateforme sont automatiquement générés par l'IA sur la base de données historiques et sont utilisés uniquement à des fins d'apprentissage, de recherche et d'échange technique, et ne constituent aucun conseil d'investissement ou base de prise de décision. L'investissement en actions implique divers risques tels que le risque de marché, le risque de liquidité, le risque politique, etc., qui peuvent entraîner une perte du principal. Les utilisateurs doivent prendre des décisions indépendantes en fonction de leur propre tolérance au risque, et tout comportement d'investissement et conséquences découlant de l'utilisation de cet outil seront à la charge de l'utilisateur. Le marché est risqué et les investissements doivent être prudents.","user.login.privacy.title":"Politique de confidentialité des utilisateurs","user.login.privacy.view":"Afficher la politique de confidentialité des utilisateurs","user.login.privacy.collapse":"Fermer les conditions de confidentialité des utilisateurs","user.login.privacy.content":"Nous accordons une grande importance à votre vie privée et à la protection de vos données. 1) Portée de la collecte : seules les informations nécessaires à la mise en œuvre de la fonction (telles que l'e-mail, le numéro de téléphone mobile, l'indicatif régional, l'adresse du portefeuille Web3) ainsi que les journaux et informations sur l'appareil nécessaires sont collectés. 2) Objectif d'utilisation : Pour la connexion au compte et la vérification de la sécurité, la fourniture de fonctions de service, le dépannage et les exigences de conformité. 3) Stockage et sécurité : les données sont cryptées et stockées, et les autorisations et mesures de contrôle d'accès nécessaires sont prises pour tenter d'empêcher tout accès non autorisé, toute divulgation ou toute perte. 4) Partage avec des tiers : sauf si les lois et réglementations l'exigent ou si cela est nécessaire à l'exécution des services, vos informations personnelles ne seront pas partagées avec des tiers ; si des services tiers (tels que des portefeuilles, des fournisseurs de services SMS) sont impliqués, ils ne seront traités que dans la mesure minimale nécessaire à la mise en œuvre de la fonction. 5) Cookies/stockage local : utilisés pour le statut de connexion et la maintenance de session nécessaire (tels que les jetons, PHPSESSID), vous pouvez les effacer ou les restreindre dans le navigateur. 6) Droits personnels : Vous pouvez exercer vos droits d'information, de rectification, de suppression, de retrait de consentement, etc. conformément aux lois et règlements. 7) Modifications et avis : lorsque ces conditions seront mises à jour, elles seront affichées bien en évidence sur la page. En continuant à utiliser ce service, vous êtes réputé avoir lu et accepté le contenu mis à jour. Si vous n'acceptez pas ces Conditions ou toute mise à jour de celles-ci, veuillez cesser d'utiliser le Service et nous contacter.","account.basicInfo":"Informations de base","account.id":"Identifiant utilisateur","account.username":"Nom d'utilisateur","account.nickname":"Surnom","account.email":"Courriel","account.mobile":"Numéro de téléphone portable","account.web3address":"adresse du portefeuille","account.pid":"Identifiant du référent","account.level":"Niveau utilisateur","account.money":"équilibre","account.qdtBalance":"Solde QDT","account.score":"Points","account.createtime":"Heure d'inscription","account.inviteLink":"Lien d'invitation","account.recharge":"Recharger","account.rechargeTip":"Veuillez utiliser WeChat ou Alipay pour scanner le code QR ci-dessous pour recharger.","account.qrCodePlaceholder":"Espace réservé au code QR (émulation)","account.rechargeAmount":"Montant de la recharge","account.enterAmount":"Veuillez saisir le montant de la recharge","account.rechargeHint":"Montant minimum du dépôt : 1 QDT","account.confirmRecharge":"Confirmer la recharge","account.enterValidAmount":"Veuillez saisir un montant de recharge valide","account.rechargeSuccess":"Recharge réussie ! Déposé {montant} QDT","account.settings.menuMap.basic":"Paramètres de base","account.settings.menuMap.security":"Paramètres de sécurité","account.settings.menuMap.notification":"Notification de nouveau message","account.settings.menuMap.moneyLog":"Détails du fonds","account.moneyLog.empty":"Aucun détail sur le fonds pour l'instant","account.moneyLog.total":"{total} enregistrements au total","account.moneyLog.type.purchase":"indicateur d'achat","account.moneyLog.type.recharge":"Recharger","account.moneyLog.type.refund":"Remboursement","account.moneyLog.type.reward":"récompense","account.moneyLog.type.income":"Revenu de l'indicateur","account.moneyLog.type.commission":"Frais de gestion de la plateforme","wallet.balance":"Solde QDT","wallet.recharge":"Recharger","wallet.withdraw":"Retirer de l'argent","wallet.filter":"Filtrer","wallet.reset":"réinitialiser","wallet.totalRecharge":"Recharge accumulée","wallet.totalWithdraw":"Retraits cumulés","wallet.totalIncome":"Revenu cumulé","wallet.records":"Enregistrements de transactions et détails des fonds","wallet.tradingRecords":"historique des transactions","wallet.moneyLog":"Détails du fonds","wallet.rechargeTip":"Veuillez utiliser WeChat ou Alipay pour scanner le code QR ci-dessous pour recharger.","wallet.qrCodePlaceholder":"Espace réservé au code QR (émulation)","wallet.rechargeAmount":"Montant de la recharge","wallet.enterAmount":"Veuillez saisir le montant de la recharge","wallet.rechargeHint":"Montant minimum du dépôt : 1 QDT","wallet.confirmRecharge":"Confirmer la recharge","wallet.enterValidAmount":"Veuillez saisir un montant de recharge valide","wallet.rechargeSuccess":"Recharge réussie ! Déposé {montant} QDT","wallet.rechargeFailed":"La recharge a échoué","wallet.withdrawTip":"Veuillez saisir le montant du retrait et l'adresse de retrait","wallet.withdrawAmount":"Montant du retrait","wallet.enterWithdrawAmount":"Veuillez saisir le montant du retrait","wallet.withdrawHint":"Montant minimum de retrait : 1 QDT","wallet.withdrawAddress":"Adresse de retrait (facultatif)","wallet.enterWithdrawAddress":"Veuillez saisir l'adresse de retrait","wallet.confirmWithdraw":"Confirmer le retrait","wallet.enterValidWithdrawAmount":"Veuillez saisir un montant de retrait valide","wallet.insufficientBalance":"Solde insuffisant","wallet.withdrawSuccess":"Retrait réussi ! Retiré {montant} QDT","wallet.withdrawFailed":"Échec du retrait","wallet.noTradingRecords":"Aucun enregistrement de transaction pour l'instant","wallet.noMoneyLog":"Aucun détail sur le fonds pour l'instant","wallet.loadTradingRecordsFailed":"Échec du chargement des enregistrements de transaction","wallet.loadMoneyLogFailed":"Échec du chargement des détails du fonds","wallet.moneyLogTotal":"{total} enregistrements au total","wallet.moneyLogTypeTitle":"Tapez","wallet.moneyLogType.all":"Tous types","wallet.table.time":"temps","wallet.table.type":"Tapez","wallet.table.price":"prix","wallet.table.amount":"Quantité","wallet.table.money":"Montant","wallet.table.balance":"équilibre","wallet.table.memo":"Remarques","wallet.table.value":"valeur","wallet.table.profit":"Profits et pertes","wallet.table.commission":"frais de traitement","wallet.table.total":"{total} enregistrements au total","wallet.tradeType.buy":"acheter","wallet.tradeType.sell":"vendre","wallet.tradeType.liquidation":"liquidation forcée","wallet.tradeType.openLong":"Ouvert longtemps","wallet.tradeType.addLong":"Gadot","wallet.tradeType.closeLong":"Pinduo","wallet.tradeType.closeLongStop":"Stop loss et long","wallet.tradeType.closeLongProfit":"Prenez des bénéfices et gagnez plus de niveaux","wallet.tradeType.openShort":"Ouvert court","wallet.tradeType.addShort":"ajouter un court","wallet.tradeType.closeShort":"vide","wallet.tradeType.closeShortStop":"Arrêter la perte","wallet.tradeType.closeShortProfit":"Prenez des bénéfices et clôturez à découvert","wallet.moneyLogType.purchase":"indicateur d'achat","wallet.moneyLogType.recharge":"Recharger","wallet.moneyLogType.withdraw":"Retirer de l'argent","wallet.moneyLogType.refund":"Remboursement","wallet.moneyLogType.reward":"récompense","wallet.moneyLogType.income":"revenu","wallet.moneyLogType.commission":"frais de traitement","wallet.web3Address.required":"Veuillez d'abord remplir l'adresse du portefeuille Web3","wallet.web3Address.requiredDescription":"Avant de recharger, vous devez lier l'adresse de votre portefeuille Web3 pour recevoir la recharge.","wallet.web3Address.placeholder":"Veuillez saisir l'adresse de votre portefeuille Web3 (en commençant par 0x)","wallet.web3Address.save":"Enregistrer l'adresse du portefeuille","wallet.web3Address.saveSuccess":"Adresse du portefeuille enregistrée avec succès","wallet.web3Address.saveFailed":"Échec de l'enregistrement de l'adresse du portefeuille","wallet.web3Address.invalidFormat":"Veuillez saisir une adresse de portefeuille Web3 valide (format Ethereum : 42 caractères commençant par 0x, ou format TRC20 : 34 caractères commençant par T)","wallet.selectCoin":"Sélectionnez la devise","wallet.selectChain":"chaîne de sélection","wallet.chain.eth":"ETH(ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"BSC","wallet.targetQdtAmount":"Le montant de QDT que vous souhaitez échanger (facultatif)","wallet.targetQdtAmount.placeholder":"Veuillez saisir la quantité de QDT que vous souhaitez utiliser, le prix actuel du QDT : {price} USDT","wallet.targetQdtAmount.requiredUsdt":"Besoin de recharge : {amount} USDT","wallet.rechargeAddress":"Adresse de recharge","wallet.copyAddress":"Copier","wallet.copySuccess":"Copiez avec succès !","wallet.copyFailed":"Échec de la copie, veuillez copier manuellement","wallet.rechargeAddressHint":"Veuillez vous assurer d'utiliser {chain} pour déposer {coin} à cette adresse","wallet.qdtPrice.loading":"Chargement...","wallet.rechargeTip.new":"Veuillez sélectionner la devise et la chaîne, puis scannez le code QR ci-dessous pour recharger","wallet.exchangeRate":"1 QDT ≈ {taux} USDT","wallet.withdrawableAmount":"Montant des liquidités disponibles","wallet.totalBalance":"solde total","wallet.insufficientWithdrawable":"Le montant en espèces pouvant être retiré est insuffisant. Le montant actuel qui peut être retiré est : {amount} QDT","wallet.withdrawAddressRequired":"Veuillez saisir l'adresse de retrait","wallet.withdrawAddressHint":"Veuillez vous assurer que l'adresse est correcte. Après le retrait, il ne peut être révoqué.","wallet.withdrawSubmitSuccess":"Demande de retrait soumise avec succès, veuillez attendre l'examen","menu.footer.contactUs":"Contactez-nous","menu.footer.getSupport":"Obtenir de l'aide","menu.footer.socialAccounts":"compte social","menu.footer.userAgreement":"Contrat d'utilisation","menu.footer.privacyPolicy":"politique de confidentialité","menu.footer.support":"Assistance","menu.footer.featureRequest":"Demande de fonctionnalité","menu.footer.email":"Courriel","menu.footer.liveChat":"Chat en direct 24h/24 et 7j/7","dashboard.analysis.title":"Analyse multidimensionnelle","dashboard.analysis.subtitle":"Plateforme d'analyse financière complète basée sur l'IA","dashboard.analysis.selectSymbol":"Sélectionnez ou saisissez le code sous-jacent","dashboard.analysis.selectModel":"Sélectionnez le modèle","dashboard.analysis.startAnalysis":"Démarrer l'analyse","dashboard.analysis.history":"Histoire","dashboard.analysis.tab.overview":"analyse complète","dashboard.analysis.tab.fundamental":"Fondamentaux","dashboard.analysis.tab.technical":"technologie","dashboard.analysis.tab.news":"Actualités","dashboard.analysis.tab.sentiment":"émotions","dashboard.analysis.tab.risk":"risque","dashboard.analysis.tab.debate":"Le débat long-court","dashboard.analysis.tab.decision":"décision finale","dashboard.analysis.empty.selectSymbol":"Sélectionnez une cible pour démarrer l'analyse","dashboard.analysis.empty.selectSymbolDesc":"Sélectionnez dans la liste d'actions auto-sélectionnée ou entrez le code sous-jacent pour obtenir un rapport d'analyse IA multidimensionnel","dashboard.analysis.empty.startAnalysis":'Cliquez sur le bouton "Démarrer l\'analyse" pour effectuer une analyse multidimensionnelle',"dashboard.analysis.empty.startAnalysisDesc":"Nous vous fournirons une analyse complète portant sur plusieurs dimensions telles que les fondamentaux, la technologie, l'actualité, le sentiment et le risque.","dashboard.analysis.empty.noData":"Il n'y a actuellement aucune donnée d'analyse {type}, veuillez d'abord effectuer une analyse complète","dashboard.analysis.empty.noWatchlist":"Il n'y a actuellement aucun titre auto-sélectionné","dashboard.analysis.empty.noHistory":"Pas encore d'historique","dashboard.analysis.empty.watchlistHint":"Il n'y a actuellement aucun stock auto-sélectionné, veuillez d'abord","dashboard.analysis.empty.noDebateData":"Aucune donnée de débat pour l'instant","dashboard.analysis.empty.noDecisionData":"Aucune donnée de décision pour l'instant","dashboard.analysis.empty.selectAgent":"Veuillez sélectionner un agent pour afficher les résultats de l'analyse","dashboard.analysis.loading.analyzing":"Analyse, veuillez patienter...","dashboard.analysis.loading.fundamental":"Analyser les données fondamentales...","dashboard.analysis.loading.technical":"Analyse des indicateurs techniques...","dashboard.analysis.loading.news":"Analyser les données d'actualité...","dashboard.analysis.loading.sentiment":"Analyser le sentiment du marché...","dashboard.analysis.loading.risk":"Évaluer le risque...","dashboard.analysis.loading.debate":"Le débat long-court est en cours...","dashboard.analysis.loading.decision":"Générer la décision finale...","dashboard.analysis.score.overall":"Note globale","dashboard.analysis.score.recommendation":"conseil en investissement","dashboard.analysis.score.confidence":"Confiance","dashboard.analysis.dimension.fundamental":"Fondamentaux","dashboard.analysis.dimension.technical":"technologie","dashboard.analysis.dimension.news":"Actualités","dashboard.analysis.dimension.sentiment":"émotions","dashboard.analysis.dimension.risk":"risque","dashboard.analysis.card.dimensionScores":"Notes pour chaque dimension","dashboard.analysis.card.overviewReport":"Rapport d'analyse complet","dashboard.analysis.card.financialMetrics":"indicateurs financiers","dashboard.analysis.card.fundamentalReport":"Rapport d'analyse fondamentale","dashboard.analysis.card.technicalIndicators":"Indicateurs techniques","dashboard.analysis.card.technicalReport":"rapport d'analyse technique","dashboard.analysis.card.newsList":"Actualités connexes","dashboard.analysis.card.newsReport":"Rapport d'analyse de l'actualité","dashboard.analysis.card.sentimentIndicators":"indicateur de sentiment","dashboard.analysis.card.sentimentReport":"Rapport d'analyse des sentiments","dashboard.analysis.card.riskMetrics":"indicateurs de risque","dashboard.analysis.card.riskReport":"rapport d'évaluation des risques","dashboard.analysis.card.bullView":"Vue haussière (Taureau)","dashboard.analysis.card.bearView":"Vue baissière (ours)","dashboard.analysis.card.researchConclusion":"Conclusion du chercheur","dashboard.analysis.card.traderPlan":"plan de commerçant","dashboard.analysis.card.riskDebate":"Débat en commission des risques","dashboard.analysis.card.finalDecision":"Décision finale","dashboard.analysis.card.tradePlanDetail":"Détails du plan de trading","dashboard.analysis.tradingPlan.entry_price":"Prix d'entrée","dashboard.analysis.tradingPlan.position_size":"Taille du poste","dashboard.analysis.tradingPlan.stop_loss":"arrêter les pertes","dashboard.analysis.tradingPlan.take_profit":"Profiter","dashboard.analysis.label.confidence":"Confiance","dashboard.analysis.label.keyPoints":"points essentiels","dashboard.analysis.label.riskWarning":"Avertissement de risque","dashboard.analysis.risk.risky":"Risqué","dashboard.analysis.risk.neutral":"Point de vue neutre (Neutre)","dashboard.analysis.risk.safe":"Vue conservatrice (sûr)","dashboard.analysis.risk.conclusion":"Conclusion","dashboard.analysis.feature.fundamental":"analyse fondamentale","dashboard.analysis.feature.technical":"analyse technique","dashboard.analysis.feature.news":"analyse de l'actualité","dashboard.analysis.feature.sentiment":"analyse des sentiments","dashboard.analysis.feature.risk":"évaluation des risques","dashboard.analysis.watchlist.title":"Ma sélection de titres","dashboard.analysis.watchlist.add":"ajouter","dashboard.analysis.watchlist.addStock":"ajouter du stock","dashboard.analysis.modal.addStock.title":"Ajouter des actions facultatives","dashboard.analysis.modal.addStock.confirm":"D'accord","dashboard.analysis.modal.addStock.cancel":"Annuler","dashboard.analysis.modal.addStock.market":"type de marché","dashboard.analysis.modal.addStock.marketPlaceholder":"Veuillez sélectionner un marché","dashboard.analysis.modal.addStock.marketRequired":"Veuillez sélectionner le type de marché","dashboard.analysis.modal.addStock.symbol":"Code de stock","dashboard.analysis.modal.addStock.symbolPlaceholder":"Par exemple : AAPL, TSLA, GOOGL, 000001, BTC","dashboard.analysis.modal.addStock.symbolRequired":"Veuillez entrer le code de stock","dashboard.analysis.modal.addStock.searchPlaceholder":"Rechercher le code ou le nom de la cible","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"Recherchez ou saisissez le code sous-jacent (par exemple : AAPL, BTC/USDT, EUR/USD)","dashboard.analysis.modal.addStock.searchOrInputHint":"Prend en charge la recherche d'objets dans la base de données ou la saisie directe du code (le système obtiendra automatiquement le nom)","dashboard.analysis.modal.addStock.search":"Rechercher","dashboard.analysis.modal.addStock.searchResults":"Résultats de la recherche","dashboard.analysis.modal.addStock.hotSymbols":"Cibles populaires","dashboard.analysis.modal.addStock.noHotSymbols":"Aucune cible populaire pour l'instant","dashboard.analysis.modal.addStock.selectedSymbol":"Sélectionné","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"Veuillez d'abord sélectionner une cible","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"Veuillez sélectionner une cible ou saisir d'abord le code cible","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"Veuillez entrer le code cible","dashboard.analysis.modal.addStock.pleaseSelectMarket":"Veuillez d'abord sélectionner le type de marché","dashboard.analysis.modal.addStock.searchFailed":"La recherche a échoué, veuillez réessayer plus tard","dashboard.analysis.modal.addStock.noSearchResults":"Aucune cible correspondante trouvée","dashboard.analysis.modal.addStock.willAutoFetchName":"Le système obtiendra automatiquement le nom","dashboard.analysis.modal.addStock.addDirectly":"Ajouter directement","dashboard.analysis.modal.addStock.nameWillBeFetched":"Le nom sera récupéré automatiquement une fois ajouté","dashboard.analysis.market.USStock":"Actions américaines","dashboard.analysis.market.Crypto":"crypto-monnaie","dashboard.analysis.market.Forex":"Forex","dashboard.analysis.market.Futures":"Contrats à terme","dashboard.analysis.modal.history.title":"Enregistrements d'analyse historique","dashboard.analysis.modal.history.viewResult":"Afficher les résultats","dashboard.analysis.modal.history.completeTime":"temps d'achèvement","dashboard.analysis.modal.history.error":"Erreur","dashboard.analysis.status.pending":"En attente","dashboard.analysis.status.processing":"Traitement","dashboard.analysis.status.completed":"Terminé","dashboard.analysis.status.failed":"échoué","dashboard.analysis.message.selectSymbol":"Veuillez d'abord sélectionner la cible","dashboard.analysis.message.taskCreated":"La tâche d'analyse a été créée et est exécutée en arrière-plan...","dashboard.analysis.message.analysisComplete":"Analyse terminée","dashboard.analysis.message.analysisCompleteCache":"Analyse terminée (à l'aide des données mises en cache)","dashboard.analysis.message.analysisFailed":"L'analyse a échoué, veuillez réessayer plus tard","dashboard.analysis.message.addStockSuccess":"Ajouté avec succès","dashboard.analysis.message.addStockFailed":"L'ajout a échoué","dashboard.analysis.message.removeStockSuccess":"Supprimé avec succès","dashboard.analysis.message.removeStockFailed":"Échec de la suppression","dashboard.analysis.message.resumingAnalysis":"Reprise de la tâche d'analyse...","dashboard.analysis.message.deleteSuccess":"Supprimé avec succès","dashboard.analysis.message.deleteFailed":"Échec de la suppression","dashboard.analysis.modal.history.delete":"Supprimer","dashboard.analysis.modal.history.deleteConfirm":"Êtes-vous sûr de vouloir supprimer cet enregistrement d'analyse ?","dashboard.analysis.test":"Magasin n° {no}, route Gongzhuan","dashboard.analysis.introduce":"Description de l'indicateur","dashboard.analysis.total-sales":"ventes totales","dashboard.analysis.day-sales":"Ventes quotidiennes moyennes¥","dashboard.analysis.visits":"Visites","dashboard.analysis.visits-trend":"Tendances du trafic","dashboard.analysis.visits-ranking":"Classement des visites en magasin","dashboard.analysis.day-visits":"Visites quotidiennes","dashboard.analysis.week":"Hebdomadaire, année sur année","dashboard.analysis.day":"Année après année","dashboard.analysis.payments":"Nombre de paiements","dashboard.analysis.conversion-rate":"taux de conversion","dashboard.analysis.operational-effect":"Effets sur l'activité opérationnelle","dashboard.analysis.sales-trend":"tendances des ventes","dashboard.analysis.sales-ranking":"Classement des ventes en magasin","dashboard.analysis.all-year":"Toute l'année","dashboard.analysis.all-month":"ce mois-ci","dashboard.analysis.all-week":"cette semaine","dashboard.analysis.all-day":"aujourd'hui","dashboard.analysis.search-users":"Nombre d'utilisateurs de recherche","dashboard.analysis.per-capita-search":"Recherches par habitant","dashboard.analysis.online-top-search":"Recherches populaires en ligne","dashboard.analysis.the-proportion-of-sales":"Proportion de la catégorie de ventes","dashboard.analysis.dropdown-option-one":"Première opération","dashboard.analysis.dropdown-option-two":"Opération 2","dashboard.analysis.channel.all":"Toutes les chaînes","dashboard.analysis.channel.online":"en ligne","dashboard.analysis.channel.stores":"magasin","dashboard.analysis.sales":"ventes","dashboard.analysis.traffic":"flux de passagers","dashboard.analysis.table.rank":"Classement","dashboard.analysis.table.search-keyword":"Rechercher des mots-clés","dashboard.analysis.table.users":"Nombre d'utilisateurs","dashboard.analysis.table.weekly-range":"Augmentation hebdomadaire","dashboard.indicator.selectSymbol":"Sélectionnez ou saisissez le code sous-jacent","dashboard.indicator.emptyWatchlistHint":"Il n'y a actuellement aucun titre auto-sélectionné, veuillez d'abord les ajouter","dashboard.indicator.hint.selectSymbol":"Veuillez sélectionner une cible pour démarrer l'analyse","dashboard.indicator.hint.selectSymbolDesc":"Sélectionnez ou entrez un code boursier dans la zone de recherche ci-dessus pour afficher les graphiques K-line et les indicateurs techniques.","dashboard.indicator.retry":"Réessayez","dashboard.indicator.panel.title":"Indicateurs techniques","dashboard.indicator.panel.realtimeOn":"Désactivez les mises à jour en temps réel","dashboard.indicator.panel.realtimeOff":"Activer les mises à jour en temps réel","dashboard.indicator.panel.themeLight":"Passer au thème sombre","dashboard.indicator.panel.themeDark":"Passer au thème clair","dashboard.indicator.section.enabled":"Activé","dashboard.indicator.section.added":"Indicateurs que j'ai ajoutés","dashboard.indicator.section.custom":"Indicateurs créés par vous-même","dashboard.indicator.section.bought":"Indicateurs que j'ai achetés","dashboard.indicator.section.myCreated":"Indicateurs que j'ai créés","dashboard.indicator.empty":"Il n'y a pas encore d'indicateur, veuillez d'abord ajouter ou créer un indicateur","dashboard.indicator.buy":"indicateur d'achat","dashboard.indicator.action.start":"commencer","dashboard.indicator.action.stop":"Fermer","dashboard.indicator.action.edit":"Modifier","dashboard.indicator.action.delete":"Supprimer","dashboard.indicator.action.backtest":"backtest","dashboard.indicator.status.normal":"normal","dashboard.indicator.status.normalPermanent":"Normal (valable en permanence)","dashboard.indicator.status.expired":"Expiré","dashboard.indicator.expiry.permanent":"Valable en permanence","dashboard.indicator.expiry.noExpiry":"Pas de délai d'expiration","dashboard.indicator.expiry.expired":"Expiré : {date}","dashboard.indicator.expiry.expiresOn":"Heure d'expiration : {date}","dashboard.indicator.delete.confirmTitle":"Confirmer la suppression","dashboard.indicator.delete.confirmContent":'Êtes-vous sûr de vouloir supprimer l\'indicateur "{name}" ? Cette opération est irréversible.',"dashboard.indicator.delete.confirmOk":"Supprimer","dashboard.indicator.delete.confirmCancel":"Annuler","dashboard.indicator.delete.success":"Supprimer avec succès","dashboard.indicator.delete.failed":"Échec de la suppression","dashboard.indicator.save.success":"Enregistré avec succès","dashboard.indicator.save.failed":"Échec de l'enregistrement","dashboard.indicator.error.loadWatchlistFailed":"Échec du chargement des stocks facultatifs","dashboard.indicator.error.chartNotReady":"Le composant graphique n'est pas initialisé. Veuillez d'abord sélectionner la cible et attendre que le graphique se charge.","dashboard.indicator.error.chartMethodNotReady":"La méthode du composant graphique n'est pas prête, veuillez réessayer plus tard","dashboard.indicator.error.chartExecuteNotReady":"La méthode d'exécution du composant graphique n'est pas prête, veuillez réessayer plus tard","dashboard.indicator.error.parseFailed":"Impossible d'analyser le code Python","dashboard.indicator.error.parseFailedCheck":"Impossible d'analyser le code Python, veuillez vérifier le format du code","dashboard.indicator.error.addIndicatorFailed":"Échec de l'ajout de l'indicateur","dashboard.indicator.error.runIndicatorFailed":"L'indicateur de fonctionnement a échoué","dashboard.indicator.error.pleaseLogin":"Veuillez d'abord vous connecter","dashboard.indicator.error.loadDataFailed":"Le chargement des données a échoué","dashboard.indicator.error.loadDataFailedDesc":"Veuillez vérifier la connexion réseau","dashboard.indicator.error.pythonEngineFailed":"Le moteur Python n'a pas pu se charger et la fonction d'indicateur peut ne pas être disponible.","dashboard.indicator.error.chartInitFailed":"L'initialisation du graphique a échoué","dashboard.indicator.warning.enterCode":"Veuillez d'abord saisir le code de l'indicateur","dashboard.indicator.warning.pyodideLoadFailed":"Le moteur Python n'a pas pu se charger","dashboard.indicator.warning.pyodideLoadFailedDesc":"Cette fonctionnalité n'est pas disponible dans votre région ou environnement réseau actuel","dashboard.indicator.warning.chartNotInitialized":"Le graphique n'est pas initialisé et l'outil de dessin au trait ne peut pas être utilisé.","dashboard.indicator.success.runIndicator":"L'indicateur s'exécute avec succès","dashboard.indicator.success.clearDrawings":"Tous les dessins au trait effacés","dashboard.indicator.sma":"SMA (combinaison de moyenne mobile)","dashboard.indicator.ema":"EMA (combinaison de moyennes mobiles exponentielles)","dashboard.indicator.rsi":"RSI (force relative)","dashboard.indicator.macd":"MACD","dashboard.indicator.bb":"Bandes de Bollinger","dashboard.indicator.atr":"ATR (plage réelle moyenne)","dashboard.indicator.cci":"CCI (indice des canaux de matières premières)","dashboard.indicator.williams":"Williams %R (indicateur Williams)","dashboard.indicator.mfi":"IMF (indice de flux monétaire)","dashboard.indicator.adx":"ADX (indice de tendance moyen)","dashboard.indicator.obv":"OBV (vague d'énergie)","dashboard.indicator.adosc":"ADOSC (oscillateur d'accumulation/répartition)","dashboard.indicator.ad":"AD (ligne d'accumulation/distribution)","dashboard.indicator.kdj":"KDJ (indicateur stochastique)","dashboard.indicator.signal.buy":"ACHETER","dashboard.indicator.signal.sell":"VENDRE","dashboard.indicator.signal.supertrendBuy":"Acheter SuperTrend","dashboard.indicator.signal.supertrendSell":"Vente SuperTrend","dashboard.indicator.chart.kline":"Ligne K","dashboard.indicator.chart.volume":"Volume","dashboard.indicator.chart.uptrend":"Tendance à la hausse","dashboard.indicator.chart.downtrend":"Tendance à la baisse","dashboard.indicator.tooltip.time":"temps","dashboard.indicator.tooltip.open":"ouvert","dashboard.indicator.tooltip.close":"recevoir","dashboard.indicator.tooltip.high":"haut","dashboard.indicator.tooltip.low":"faible","dashboard.indicator.tooltip.volume":"Volume","dashboard.indicator.drawing.line":"segment de ligne","dashboard.indicator.drawing.horizontalLine":"ligne horizontale","dashboard.indicator.drawing.verticalLine":"ligne verticale","dashboard.indicator.drawing.ray":"rayon","dashboard.indicator.drawing.straightLine":"ligne droite","dashboard.indicator.drawing.parallelLine":"lignes parallèles","dashboard.indicator.drawing.priceLine":"ligne de prix","dashboard.indicator.drawing.priceChannel":"canal de prix","dashboard.indicator.drawing.fibonacciLine":"Lignes de Fibonacci","dashboard.indicator.drawing.measure":"Mesure","dashboard.indicator.drawing.clearAll":"Effacer tous les dessins au trait","dashboard.indicator.market.USStock":"Actions américaines","dashboard.indicator.market.Crypto":"crypto-monnaie","dashboard.indicator.market.Forex":"Forex","dashboard.indicator.market.Futures":"Contrats à terme","dashboard.indicator.create":"Créer un indicateur","dashboard.indicator.editor.title":"Créer/modifier des indicateurs","dashboard.indicator.editor.name":"Nom de l'indicateur","dashboard.indicator.editor.nameRequired":"Veuillez saisir le nom de l'indicateur","dashboard.indicator.editor.namePlaceholder":"Veuillez saisir le nom de l'indicateur","dashboard.indicator.editor.description":"Description de l'indicateur","dashboard.indicator.editor.descriptionPlaceholder":"Veuillez saisir une description de l'indicateur (facultatif)","dashboard.indicator.editor.code":"Code Python","dashboard.indicator.editor.codeRequired":"Veuillez entrer le code de l'indicateur","dashboard.indicator.editor.codePlaceholder":"Veuillez saisir le code Python","dashboard.indicator.editor.run":"courir","dashboard.indicator.editor.runHint":"Cliquez sur le bouton Exécuter pour prévisualiser l'effet de l'indicateur sur le graphique K-line","dashboard.indicator.editor.guide":"Guide de développement","dashboard.indicator.editor.guideTitle":"Guide de développement d'indicateurs Python","dashboard.indicator.editor.save":"enregistrer","dashboard.indicator.editor.cancel":"Annuler","dashboard.indicator.editor.unnamed":"Indicateur sans nom","dashboard.indicator.editor.publishToCommunity":"Publier sur la communauté","dashboard.indicator.editor.publishToCommunityHint":"Une fois publié, les autres utilisateurs peuvent visualiser et utiliser votre indicateur dans la communauté","dashboard.indicator.editor.indicatorType":"Type d'indicateur","dashboard.indicator.editor.indicatorTypeRequired":"Veuillez sélectionner le type d'indicateur","dashboard.indicator.editor.indicatorTypePlaceholder":"Veuillez sélectionner le type d'indicateur","dashboard.indicator.editor.previewImage":"Aperçu","dashboard.indicator.editor.uploadImage":"Télécharger des photos","dashboard.indicator.editor.previewImageHint":"Taille recommandée : 800 x 400, pas plus de 2 Mo","dashboard.indicator.editor.pricing":"Prix de vente (QDT)","dashboard.indicator.editor.pricingType.free":"gratuit","dashboard.indicator.editor.pricingType.permanent":"permanent","dashboard.indicator.editor.pricingType.monthly":"paiement mensuel","dashboard.indicator.editor.price":"prix","dashboard.indicator.editor.priceRequired":"Veuillez entrer le prix","dashboard.indicator.editor.pricePlaceholder":"Veuillez entrer le prix","dashboard.indicator.editor.pricingHint":"Bien que le prix des indicateurs gratuits soit de 0, la plateforme vous récompensera (QDT) en fonction de votre utilisation de l'indicateur et de votre taux d'éloges.","dashboard.indicator.editor.aiGenerate":"Génération intelligente","dashboard.indicator.editor.aiPromptPlaceholder":"Dites-moi vos idées et je générerai le code de l'indicateur Python pour vous","dashboard.indicator.editor.aiGenerateBtn":"Code généré par l'IA","dashboard.indicator.editor.aiPromptRequired":"Veuillez entrer vos pensées","dashboard.indicator.editor.aiGenerateSuccess":"Génération de code réussie","dashboard.indicator.editor.aiGenerateError":"Échec de la génération du code, veuillez réessayer plus tard","dashboard.indicator.backtest.title":"Backtest des indicateurs","dashboard.indicator.backtest.config":"Paramètres de backtest","dashboard.indicator.backtest.startDate":"date de début","dashboard.indicator.backtest.endDate":"date de fin","dashboard.indicator.backtest.selectStartDate":"Sélectionnez la date de début","dashboard.indicator.backtest.selectEndDate":"Sélectionnez la date de fin","dashboard.indicator.backtest.startDateRequired":"Veuillez sélectionner une date de début","dashboard.indicator.backtest.endDateRequired":"Veuillez sélectionner une date de fin","dashboard.indicator.backtest.initialCapital":"Capital initial","dashboard.indicator.backtest.initialCapitalRequired":"Veuillez saisir les fonds initiaux","dashboard.indicator.backtest.commission":"Frais de traitement","dashboard.indicator.backtest.leverage":"Ratio de levier","dashboard.indicator.backtest.tradeDirection":"Orientation commerciale","dashboard.indicator.backtest.longOnly":"Allez-y longtemps","dashboard.indicator.backtest.shortOnly":"court","dashboard.indicator.backtest.both":"Bidirectionnel","dashboard.indicator.backtest.run":"Commencer le backtest","dashboard.indicator.backtest.rerun":"Backtester à nouveau","dashboard.indicator.backtest.close":"Fermer","dashboard.indicator.backtest.running":"Backtest des indicateurs en cours...","dashboard.indicator.backtest.results":"Résultats du backtest","dashboard.indicator.backtest.totalReturn":"rendement total","dashboard.indicator.backtest.annualReturn":"revenu annualisé","dashboard.indicator.backtest.maxDrawdown":"prélèvement maximum","dashboard.indicator.backtest.sharpeRatio":"Rapport de netteté","dashboard.indicator.backtest.winRate":"taux de réussite","dashboard.indicator.backtest.profitFactor":"ratio profits/pertes","dashboard.indicator.backtest.totalTrades":"Nombre de transactions","dashboard.indicator.totalReturn":"rendement total","dashboard.indicator.annualReturn":"taux de rendement annualisé","dashboard.indicator.maxDrawdown":"prélèvement maximum","dashboard.indicator.sharpeRatio":"Rapport de netteté","dashboard.indicator.winRate":"taux de réussite","dashboard.indicator.profitFactor":"ratio profits/pertes","dashboard.indicator.totalTrades":"nombre total de transactions","dashboard.indicator.backtest.totalCommission":"frais de traitement totaux","dashboard.indicator.backtest.equityCurve":"courbe des taux","dashboard.indicator.backtest.strategy":"Revenu de l'indicateur","dashboard.indicator.backtest.benchmark":"Rendement de référence","dashboard.indicator.backtest.tradeHistory":"historique des transactions","dashboard.indicator.backtest.tradeTime":"temps","dashboard.indicator.backtest.tradeType":"Tapez","dashboard.indicator.backtest.buy":"acheter","dashboard.indicator.backtest.sell":"vendre","dashboard.indicator.backtest.liquidation":"Liquidation","dashboard.indicator.backtest.openLong":"Ouvert longtemps","dashboard.indicator.backtest.closeLong":"Pinduo","dashboard.indicator.backtest.closeLongStop":"Près du long (stop loss)","dashboard.indicator.backtest.closeLongProfit":"Fermez davantage (prenez des bénéfices)","dashboard.indicator.backtest.addLong":"Ajouter une position longue","dashboard.indicator.backtest.openShort":"Ouvert court","dashboard.indicator.backtest.closeShort":"vide","dashboard.indicator.backtest.closeShortStop":"Fermer (stopper la perte)","dashboard.indicator.backtest.closeShortProfit":"Fermer (prendre des bénéfices)","dashboard.indicator.backtest.addShort":"Ajouter une position courte","dashboard.indicator.backtest.price":"prix","dashboard.indicator.backtest.amount":"Quantité","dashboard.indicator.backtest.balance":"Solde du compte","dashboard.indicator.backtest.profit":"Profits et pertes","dashboard.indicator.backtest.success":"Backtest terminé","dashboard.indicator.backtest.failed":"Échec du backtest, veuillez réessayer plus tard","dashboard.indicator.backtest.noIndicatorCode":"Il n'y a pas de code backtestable pour cet indicateur","dashboard.indicator.backtest.noSymbol":"Veuillez d'abord sélectionner la cible de la transaction","dashboard.indicator.backtest.dateRangeExceeded":"La plage de temps du backtest dépasse la limite : {timeframe} la période peut être backtestée au maximum {maxRange}","dashboard.indicator.backtest.dateRangeExceededDays":"Backtest range exceeds limit: {timeframe} max {maxRange} ({maxDays} days)","dashboard.indicator.backtest.metaLine":"Symbol: {symbol} | Market: {market} | Timeframe: {timeframe}","dashboard.indicator.backtest.savedRunId":"Backtest saved. Run ID: {id}","dashboard.indicator.backtest.prev":"Previous","dashboard.indicator.backtest.next":"Next","dashboard.indicator.backtest.steps.strategy.title":"Strategy","dashboard.indicator.backtest.steps.strategy.desc":"Position sizing & risk controls","dashboard.indicator.backtest.steps.trading.title":"Trading settings","dashboard.indicator.backtest.steps.trading.desc":"Time range, capital, fees, leverage","dashboard.indicator.backtest.steps.results.title":"Results","dashboard.indicator.backtest.steps.results.desc":"Backtest output","dashboard.indicator.backtest.panel.risk":"Risk management (SL/TP/Trailing)","dashboard.indicator.backtest.panel.scale":"Scale in / DCA (trend & mean-reversion)","dashboard.indicator.backtest.panel.reduce":"Reduce position (trend & adverse)","dashboard.indicator.backtest.panel.position":"Position sizing","dashboard.indicator.backtest.field.stopLossPct":"Stop Loss (%)","dashboard.indicator.backtest.field.takeProfitPct":"Take Profit (%)","dashboard.indicator.backtest.field.trailingEnabled":"Trailing stop / take profit","dashboard.indicator.backtest.field.trailingStopPct":"Trailing drawdown (%)","dashboard.indicator.backtest.field.trailingActivationPct":"Trailing activation (%)","dashboard.indicator.backtest.field.slippage":"Slippage (%)","dashboard.indicator.backtest.field.trendAddEnabled":"Trend-following scale-in","dashboard.indicator.backtest.field.dcaAddEnabled":"Mean-reversion DCA","dashboard.indicator.backtest.field.trendAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.dcaAddStepPct":"DCA trigger (%)","dashboard.indicator.backtest.field.trendAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.dcaAddSizePct":"DCA size (% of capital)","dashboard.indicator.backtest.field.trendAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.dcaAddMaxTimes":"Max DCA times","dashboard.indicator.backtest.field.trendReduceEnabled":"Trend reduce","dashboard.indicator.backtest.field.adverseReduceEnabled":"Adverse reduce","dashboard.indicator.backtest.field.trendReduceStepPct":"Trend trigger (%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"Adverse trigger (%)","dashboard.indicator.backtest.field.trendReduceSizePct":"Reduce size (% of position)","dashboard.indicator.backtest.field.adverseReduceSizePct":"Adverse reduce size (% of position)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"Max trend reduce times","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"Max adverse reduce times","dashboard.indicator.backtest.field.entryPct":"Entry size (% of capital)","dashboard.indicator.backtest.field.minOrderPct":"Min order size (% of capital) (optional)","dashboard.indicator.backtest.closeLongTrailing":"Close Long (Trailing)","dashboard.indicator.backtest.reduceLong":"Reduce Long","dashboard.indicator.backtest.closeShortTrailing":"Close Short (Trailing)","dashboard.indicator.backtest.reduceShort":"Reduce Short","dashboard.docs.title":"Centre de documentation","dashboard.docs.search.placeholder":"Rechercher des documents...","dashboard.docs.category.all":"Tout","dashboard.docs.category.guide":"Guide de développement","dashboard.docs.category.api":"Documentation API","dashboard.docs.category.tutorial":"Tutoriel","dashboard.docs.category.faq":"FAQ","dashboard.docs.featured.title":"Documentation recommandée","dashboard.docs.featured.tag":"Recommandé","dashboard.docs.list.views":"Parcourir","dashboard.docs.list.author":"Auteur","dashboard.docs.list.empty":"Aucun document pour l'instant","dashboard.docs.list.backToAll":"Retour à tous les documents","dashboard.docs.list.total":"{count} documents au total","dashboard.docs.detail.back":"Retour à la liste des documents","dashboard.docs.detail.updatedAt":"mis à jour sur","dashboard.docs.detail.related":"Documents associés","dashboard.docs.detail.notFound":"Le document n'existe pas","dashboard.docs.detail.error":"Le document n'existe pas ou a été supprimé","dashboard.docs.search.result":"Résultats de la recherche","dashboard.docs.search.keyword":"mots-clés","community.filter.indicatorType":"Type d'indicateur","community.filter.all":"Tout","community.filter.other":"Autres options","community.filter.pricing":"Type de prix","community.filter.allPricing":"Tous les tarifs","community.filter.sortBy":"Trier par","community.filter.search":"Rechercher","community.filter.searchPlaceholder":"Rechercher le nom de la métrique","community.indicatorType.trend":"Type de tendance","community.indicatorType.momentum":"type d'élan","community.indicatorType.volatility":"Volatilité","community.indicatorType.volume":"Volume","community.indicatorType.custom":"Personnaliser","community.pricing.free":"gratuit","community.pricing.paid":"Payer","community.sort.downloads":"Téléchargements","community.sort.rating":"Note","community.sort.newest":"Dernières versions","community.pagination.total":"{total} indicateurs au total","community.noDescription":"Pas encore de description","community.detail.type":"Tapez","community.detail.pricing":"Tarifs","community.detail.rating":"Note","community.detail.downloads":"Téléchargements","community.detail.author":"Auteur","community.detail.description":"Présentation","community.detail.detailContent":"Description détaillée","community.detail.backtestStats":"Statistiques de backtest","community.action.purchase":"indicateur d'achat","community.action.addToMyIndicators":"Ajouter à mes indicateurs","community.action.favorite":"Collecte","community.action.unfavorite":"Annuler les favoris","community.action.buyNow":"Acheter maintenant","community.action.renew":"Renouvellement","community.purchase.price":"prix","community.purchase.permanent":"permanent","community.purchase.monthly":"mois","community.purchase.confirmBuy":"Confirmer pour acheter cet indicateur ({price} QDT) ?","community.purchase.confirmRenew":"Confirmer le renouvellement de cet indicateur ({price} QDT/mois) ?","community.purchase.confirmFree":"Confirmer pour ajouter cet indicateur gratuit ?","community.purchase.confirmTitle":"Confirmer l'action","community.purchase.owned":"Vous avez acheté cet indicateur (valable en permanence)","community.purchase.ownIndicator":"Il s'agit de la métrique que vous avez publiée","community.purchase.expired":"Votre abonnement a expiré","community.purchase.expiresOn":"Heure d'expiration : {date}","community.tabs.detail":"Détails de l'indicateur","community.tabs.backtest":"Données de backtest","community.tabs.ratings":"Avis d'utilisateurs","community.rating.myRating":"Ma note","community.rating.stars":"{count} étoiles","community.rating.commentPlaceholder":"Partagez votre expérience...","community.rating.submit":"Soumettre une note","community.rating.modify":"Modifier","community.rating.saveModify":"Enregistrer les modifications","community.rating.cancel":"Annuler","community.rating.selectRating":"Veuillez sélectionner une note","community.rating.success":"Évaluation réussie","community.rating.modifySuccess":"Avis modifié avec succès","community.rating.failed":"Échec de la notation","community.rating.noRatings":"Pas encore de commentaires","community.backtest.note":"Les données ci-dessus sont des résultats de backtest historiques et sont fournies à titre de référence uniquement et ne représentent pas les bénéfices futurs.","community.backtest.noData":"Aucune donnée de backtest pour l'instant","community.backtest.uploadHint":"L'auteur n'a pas encore téléchargé les données de backtest","community.message.loadFailed":"Échec du chargement de la liste des indicateurs","community.message.purchaseProcessing":"Traitement de la demande d'achat...","community.message.downloadSuccess":"La métrique a été ajoutée à ma liste de métriques","community.message.favoriteSuccess":"Collecte réussie","community.message.unfavoriteSuccess":"Annuler la collecte avec succès","community.message.operationSuccess":"Opération réussie","community.message.operationFailed":"L'opération a échoué","community.banner.readOnly":"Lecture seule","community.banner.loginHint":"Pour vous connecter ou vous inscrire, veuillez cliquer sur le bouton pour accéder à une page indépendante afin d'éviter les problèmes CSRF","community.banner.jumpButton":"Aller à Connexion/Inscription","dashboard.totalEquity":"capitaux propres totaux","dashboard.totalPnL":"Total des profits et pertes","dashboard.aiStrategies":"Stratégie d'IA","dashboard.indicatorStrategies":"Stratégie des indicateurs","dashboard.running":"Courir","dashboard.pnlHistory":"profits et pertes historiques","dashboard.strategyPerformance":"Ratio de profits et pertes de la stratégie","dashboard.recentTrades":"transactions récentes","dashboard.currentPositions":"Poste actuel","dashboard.table.time":"temps","dashboard.table.strategy":"Nom de la stratégie","dashboard.table.symbol":"Cible","dashboard.table.type":"Tapez","dashboard.table.side":"direction","dashboard.table.size":"Intérêt ouvert","dashboard.table.entryPrice":"cours d'ouverture moyen","dashboard.table.price":"prix","dashboard.table.amount":"Quantité","dashboard.table.profit":"Profits et pertes","dashboard.pendingOrders":"Historique d'exécution des ordres","dashboard.totalOrders":"Total {total} ordres","dashboard.viewError":"Voir l'erreur","dashboard.filled":"Rempli","dashboard.orderTable.time":"Heure de création","dashboard.orderTable.strategy":"Stratégie","dashboard.orderTable.symbol":"Paire de trading","dashboard.orderTable.signalType":"Type de signal","dashboard.orderTable.amount":"Quantité","dashboard.orderTable.price":"Prix de remplissage","dashboard.orderTable.status":"Statut","dashboard.orderTable.executedAt":"Heure d'exécution","dashboard.signalType.openLong":"Ouvrir Long","dashboard.signalType.openShort":"Ouvrir Short","dashboard.signalType.closeLong":"Fermer Long","dashboard.signalType.closeShort":"Fermer Short","dashboard.signalType.addLong":"Ajouter Long","dashboard.signalType.addShort":"Ajouter Short","dashboard.status.pending":"En attente","dashboard.status.processing":"En cours","dashboard.status.completed":"Terminé","dashboard.status.failed":"Échoué","dashboard.status.cancelled":"Annulé","dashboard.table.pnl":"profit ou perte non réalisé","form.basic-form.basic.title":"forme de base","form.basic-form.basic.description":"Les pages de formulaire sont utilisées pour collecter ou vérifier les informations des utilisateurs. Les formulaires de base sont couramment utilisés dans des scénarios de formulaire comportant peu d'éléments de données.","form.basic-form.title.label":"Titre","form.basic-form.title.placeholder":"Donnez un nom à l'objectif","form.basic-form.title.required":"Veuillez entrer un titre","form.basic-form.date.label":"Date de début et de fin","form.basic-form.placeholder.start":"date de début","form.basic-form.placeholder.end":"date de fin","form.basic-form.date.required":"Veuillez sélectionner les dates de début et de fin","form.basic-form.goal.label":"Description de l'objectif","form.basic-form.goal.placeholder":"Veuillez saisir vos objectifs de travail par étapes","form.basic-form.goal.required":"Veuillez saisir une description de l'objectif","form.basic-form.standard.label":"mesurer","form.basic-form.standard.placeholder":"Veuillez saisir des statistiques","form.basic-form.standard.required":"Veuillez saisir des statistiques","form.basic-form.client.label":"Client","form.basic-form.client.required":"Veuillez décrire les clients que vous servez","form.basic-form.label.tooltip":"destinataires de services cibles","form.basic-form.client.placeholder":"Veuillez décrire les clients que vous servez, les clients internes directement @nom/numéro de poste","form.basic-form.invites.label":"Inviter des réviseurs","form.basic-form.invites.placeholder":"Veuillez directement @nom/numéro d'employé, vous pouvez inviter jusqu'à 5 personnes","form.basic-form.weight.label":"poids","form.basic-form.weight.placeholder":"Veuillez entrer","form.basic-form.public.label":"public cible","form.basic-form.label.help":"Les clients et les évaluateurs sont partagés par défaut","form.basic-form.radio.public":"publique","form.basic-form.radio.partially-public":"Partiellement public","form.basic-form.radio.private":"privé","form.basic-form.publicUsers.placeholder":"ouvert à","form.basic-form.option.A":"Collègue 1","form.basic-form.option.B":"Collègue 2","form.basic-form.option.C":"Collègue trois","form.basic-form.email.required":"Veuillez entrer votre adresse e-mail !","form.basic-form.email.wrong-format":"Le format de l'adresse e-mail est incorrect !","form.basic-form.userName.required":"Veuillez entrer votre nom d'utilisateur !","form.basic-form.password.required":"Veuillez entrer votre mot de passe !","form.basic-form.password.twice":"Les mots de passe saisis deux fois ne correspondent pas !","form.basic-form.strength.msg":"Veuillez saisir au moins 6 caractères. Veuillez ne pas utiliser de mots de passe faciles à deviner.","form.basic-form.strength.strong":"Force : Forte","form.basic-form.strength.medium":"Force : moyenne","form.basic-form.strength.short":"Force : trop courte","form.basic-form.confirm-password.required":"Veuillez confirmer votre mot de passe !","form.basic-form.phone-number.required":"Veuillez entrer votre numéro de téléphone portable !","form.basic-form.phone-number.wrong-format":"Le format du numéro de téléphone portable est erroné !","form.basic-form.verification-code.required":"Veuillez entrer le code de vérification !","form.basic-form.form.get-captcha":"Obtenir le code de vérification","form.basic-form.captcha.second":"secondes","form.basic-form.form.optional":"(facultatif)","form.basic-form.form.submit":"Soumettre","form.basic-form.form.save":"enregistrer","form.basic-form.email.placeholder":"Courriel","form.basic-form.password.placeholder":"Mot de passe d'au moins 6 caractères, sensible à la casse","form.basic-form.confirm-password.placeholder":"Confirmer le mot de passe","form.basic-form.phone-number.placeholder":"Numéro de téléphone portable","form.basic-form.verification-code.placeholder":"Code de vérification","result.success.title":"Soumission réussie","result.success.description":"La page de résultats de soumission est utilisée pour renvoyer les résultats de traitement d'une série de tâches opérationnelles. S'il ne s'agit que d'une opération simple, utilisez le retour d'invite global du message. Cette zone de texte peut afficher des instructions supplémentaires simples. S'il est nécessaire d'afficher des « documents », la zone grise ci-dessous peut afficher des contenus plus complexes.","result.success.operate-title":"Nom du projet","result.success.operate-id":"ID du projet","result.success.principal":"responsable","result.success.operate-time":"Temps effectif","result.success.step1-title":"Créer un projet","result.success.step1-operator":"Qu Lili","result.success.step2-title":"Examen préliminaire du ministère","result.success.step2-operator":"Zhou Maomao","result.success.step2-extra":"Urgent","result.success.step3-title":"examen financier","result.success.step4-title":"Terminé","result.success.btn-return":"Retour à la liste","result.success.btn-project":"Afficher les articles","result.success.btn-print":"Imprimer","result.fail.error.title":"Échec de la soumission","result.fail.error.description":"Veuillez vérifier et modifier les informations suivantes avant de soumettre à nouveau.","result.fail.error.hint-title":"Le contenu que vous avez soumis contient les erreurs suivantes :","result.fail.error.hint-text1":"Votre compte a été gelé","result.fail.error.hint-btn1":"Décongeler immédiatement","result.fail.error.hint-text2":"Votre compte n'est pas encore éligible pour postuler","result.fail.error.hint-btn2":"Mettre à niveau maintenant","result.fail.error.btn-text":"Retour à la modification","account.settings.menuMap.custom":"personnalisation","account.settings.menuMap.binding":"Liaison de compte","account.settings.basic.avatar":"avatar","account.settings.basic.change-avatar":"Changer d'avatar","account.settings.basic.email":"Courriel","account.settings.basic.email-message":"Veuillez entrer votre email!","account.settings.basic.nickname":"Surnom","account.settings.basic.nickname-message":"Veuillez entrer votre pseudo !","account.settings.basic.profile":"Profil","account.settings.basic.profile-message":"Veuillez entrer votre profil personnel !","account.settings.basic.profile-placeholder":"Profil","account.settings.basic.country":"Pays/Région","account.settings.basic.country-message":"Veuillez entrer votre pays ou région !","account.settings.basic.geographic":"Province et ville","account.settings.basic.geographic-message":"Veuillez entrer votre province et votre ville !","account.settings.basic.address":"adresse postale","account.settings.basic.address-message":"Veuillez entrer votre adresse postale !","account.settings.basic.phone":"Numéro de contact","account.settings.basic.phone-message":"Veuillez entrer votre numéro de contact !","account.settings.basic.update":"Mettre à jour les informations de base","account.settings.basic.update.success":"Mettre à jour les informations de base avec succès","account.settings.security.strong":"Fort","account.settings.security.medium":"dans","account.settings.security.weak":"faible","account.settings.security.password":"Mot de passe du compte","account.settings.security.password-description":"Force actuelle du mot de passe :","account.settings.security.phone":"Téléphone mobile de sécurité","account.settings.security.phone-description":"Téléphone mobile déjà lié :","account.settings.security.question":"Problèmes de sécurité","account.settings.security.question-description":"Aucune question de sécurité n'est définie, ce qui peut protéger efficacement la sécurité du compte.","account.settings.security.email":"Lier un e-mail","account.settings.security.email-description":"Adresse e-mail déjà liée :","account.settings.security.mfa":"Appareil MFA","account.settings.security.mfa-description":"Le périphérique MFA n’est pas lié. Après la liaison, vous pouvez confirmer à nouveau.","account.settings.security.modify":"Modifier","account.settings.security.set":"paramètres","account.settings.security.bind":"reliure","account.settings.binding.taobao":"Lier Taobao","account.settings.binding.taobao-description":"Le compte Taobao n'est actuellement pas lié","account.settings.binding.alipay":"Lier Alipay","account.settings.binding.alipay-description":"Le compte Alipay n'est actuellement pas lié","account.settings.binding.dingding":"Liaison DingTalk","account.settings.binding.dingding-description":"Aucun compte DingTalk n'est actuellement lié","account.settings.binding.bind":"reliure","account.settings.notification.password":"Mot de passe du compte","account.settings.notification.password-description":"Les messages des autres utilisateurs seront notifiés sous forme de messages du site.","account.settings.notification.messages":"Messages système","account.settings.notification.messages-description":"Les messages système seront notifiés sous forme de messages de site.","account.settings.notification.todo":"Tâches à faire","account.settings.notification.todo-description":"Les tâches à effectuer seront notifiées sous forme de messages sur site","account.settings.settings.open":"ouvert","account.settings.settings.close":"fermer","trading-assistant.title":"Assistante commerciale","trading-assistant.strategyList":"Liste de stratégies","trading-assistant.createStrategy":"Créer une politique","trading-assistant.noStrategy":"Pas encore de stratégie","trading-assistant.selectStrategy":"Veuillez sélectionner une stratégie à gauche pour afficher les détails","trading-assistant.startStrategy":"stratégie de lancement","trading-assistant.stopStrategy":"stratégie d'arrêt","trading-assistant.editStrategy":"Stratégie éditoriale","trading-assistant.deleteStrategy":"Supprimer la stratégie","trading-assistant.status.running":"Courir","trading-assistant.status.stopped":"Arrêté","trading-assistant.status.error":"Erreur","trading-assistant.strategyType.IndicatorStrategy":"Stratégie d'indicateurs techniques","trading-assistant.strategyType.PromptBasedStrategy":"stratégie de mots indicateurs","trading-assistant.strategyType.GridStrategy":"stratégie de grille","trading-assistant.tabs.tradingRecords":"historique des transactions","trading-assistant.tabs.positions":"Enregistrement de poste","trading-assistant.tabs.equityCurve":"courbe des actions","trading-assistant.form.step1":"Sélectionner des indicateurs","trading-assistant.form.step2":"Configuration d'échange","trading-assistant.form.step3":"Paramètres de stratégie","trading-assistant.form.indicator":"Sélectionner des indicateurs","trading-assistant.form.indicatorHint":"Vous ne pouvez sélectionner que les indicateurs techniques que vous avez achetés ou créés","trading-assistant.form.qdtCostHints":"L'utilisation de la stratégie consommera du QDT, veuillez vous assurer que le compte dispose d'un solde QDT suffisant","trading-assistant.form.indicatorDescription":"Description de l'indicateur","trading-assistant.form.noDescription":"Pas encore de description","trading-assistant.form.exchange":"Sélectionnez un échange","trading-assistant.form.apiKey":"Clé API","trading-assistant.form.secretKey":"Clé secrète","trading-assistant.form.passphrase":"Phrase secrète","trading-assistant.form.testConnection":"tester la connexion","trading-assistant.form.strategyName":"Nom de la stratégie","trading-assistant.form.symbol":"paire de trading","trading-assistant.form.symbolHint":"Actuellement, seules les paires de trading de cryptomonnaies sont prises en charge","trading-assistant.form.initialCapital":"Montant de l'investissement","trading-assistant.form.marketType":"type de marché","trading-assistant.form.marketTypeFutures":"contrat","trading-assistant.form.marketTypeSpot":"Spot","trading-assistant.form.marketTypeHint":"Le contrat prend en charge le trading bidirectionnel et l'effet de levier, tandis que le spot ne prend en charge que les positions longues et l'effet de levier est fixé à 1x.","trading-assistant.form.leverage":"Tirer parti de plusieurs","trading-assistant.form.leverageHint":"Contrat : 1-125 fois, spot : fixe 1 fois","trading-assistant.form.spotLeverageFixed":"L'effet de levier du trading au comptant est fixé à 1x","trading-assistant.form.spotOnlyLongHint":"Le trading au comptant ne prend en charge que les positions longues","trading-assistant.form.tradeDirection":"Orientation commerciale","trading-assistant.form.tradeDirectionLong":"Seulement longtemps","trading-assistant.form.tradeDirectionShort":"Seulement court","trading-assistant.form.tradeDirectionBoth":"transaction bidirectionnelle","trading-assistant.form.timeframe":"période","trading-assistant.form.klinePeriod":"Période K-Line","trading-assistant.form.timeframe1m":"1 minute","trading-assistant.form.timeframe5m":"5 minutes","trading-assistant.form.timeframe15m":"15 minutes","trading-assistant.form.timeframe30m":"30 minutes","trading-assistant.form.timeframe1H":"1 heure","trading-assistant.form.timeframe4H":"4 heures","trading-assistant.form.timeframe1D":"1 jour","trading-assistant.form.selectStrategyType":"Sélectionner le type de stratégie","trading-assistant.form.indicatorStrategy":"Stratégie d'indicateur","trading-assistant.form.indicatorStrategyDesc":"Stratégie de trading automatisée basée sur des indicateurs techniques","trading-assistant.form.aiStrategy":"Stratégie IA","trading-assistant.form.aiStrategyDesc":"Stratégie de trading automatisée basée sur la prise de décision intelligente IA","trading-assistant.form.enableAiFilter":"Activer le filtre de décision intelligente IA","trading-assistant.form.enableAiFilterHint":"Lorsqu'il est activé, les signaux d'indicateur seront filtrés par l'IA pour améliorer la qualité des transactions","trading-assistant.form.aiFilterPrompt":"Invite personnalisée","trading-assistant.form.aiFilterPromptHint":"Fournir des instructions personnalisées pour le filtrage IA, laisser vide pour utiliser la valeur par défaut du système","trading-assistant.validation.strategyTypeRequired":"Veuillez sélectionner un type de stratégie","trading-assistant.form.advancedSettings":"Paramètres avancés","trading-assistant.form.orderMode":"Mode de commande","trading-assistant.form.orderModeMaker":"Créateur","trading-assistant.form.orderModeTaker":"Prix du marché (Preneur)","trading-assistant.form.orderModeHint":"Le mode d'ordre en attente utilise des ordres limités et les frais de traitement sont inférieurs ; le mode prix du marché est exécuté immédiatement et les frais de traitement sont plus élevés.","trading-assistant.form.makerWaitSec":"Temps d'attente pour les commandes en attente (secondes)","trading-assistant.form.makerWaitSecHint":"Le temps d'attente pour la transaction après avoir passé une commande. Annulez et réessayez après l'expiration du délai.","trading-assistant.form.makerRetries":"Nombre de tentatives pour les commandes en attente","trading-assistant.form.makerRetriesHint":"Le nombre maximum de tentatives lorsqu'un ordre en attente n'est pas exécuté","trading-assistant.form.fallbackToMarket":"L'ordre en attente échoue et le prix du marché est dégradé.","trading-assistant.form.fallbackToMarketHint":"Lorsque l'ordre en attente d'ouverture/de clôture n'a pas été exécuté, s'il doit être rétrogradé en ordre au marché pour garantir que la transaction soit terminée.","trading-assistant.form.marginMode":"Mode marge","trading-assistant.form.marginModeCross":"Entrepôt complet","trading-assistant.form.marginModeIsolated":"Position isolée","trading-assistant.form.stopLossPct":"Taux d'arrêt des pertes (%)","trading-assistant.form.stopLossPctHint":"Définissez le pourcentage de stop loss, 0 signifie que le stop loss n'est pas activé","trading-assistant.form.takeProfitPct":"Ratio de profit (%)","trading-assistant.form.takeProfitPctHint":"Définissez le pourcentage de profit, 0 signifie désactiver le profit","trading-assistant.form.signalMode":"Mode signal","trading-assistant.form.signalModeConfirmed":"Mode de confirmation","trading-assistant.form.signalModeAggressive":"Mode agressif","trading-assistant.form.signalModeHint":"Mode de confirmation : vérifie uniquement les lignes K terminées ; Mode agressif : vérifie également la formation de lignes K","trading-assistant.form.cancel":"Annuler","trading-assistant.form.prev":"Étape précédente","trading-assistant.form.next":"Étape suivante","trading-assistant.form.confirmCreate":"Confirmer la création","trading-assistant.form.confirmEdit":"Confirmer les modifications","trading-assistant.messages.createSuccess":"Stratégie créée avec succès","trading-assistant.messages.createFailed":"Échec de la création de la stratégie","trading-assistant.messages.updateSuccess":"Mise à jour de la stratégie réussie","trading-assistant.messages.updateFailed":"Échec de la mise à jour de la stratégie","trading-assistant.messages.deleteSuccess":"Suppression de la stratégie réussie","trading-assistant.messages.deleteFailed":"Échec de la suppression de la stratégie","trading-assistant.messages.startSuccess":"La stratégie a démarré avec succès","trading-assistant.messages.startFailed":"Échec du démarrage de la stratégie","trading-assistant.messages.stopSuccess":"La stratégie s'est arrêtée avec succès","trading-assistant.messages.stopFailed":"La stratégie d'arrêt a échoué","trading-assistant.messages.loadFailed":"Échec de l'obtention de la liste des règles","trading-assistant.messages.runningWarning":"La stratégie est en marche. Veuillez arrêter la stratégie avant de la modifier.","trading-assistant.messages.deleteConfirmWithName":"Êtes-vous sûr de vouloir supprimer la stratégie « {name} » ? Cette opération est irréversible.","trading-assistant.messages.deleteConfirm":"Êtes-vous sûr de vouloir supprimer cette stratégie ? Cette opération est irréversible.","trading-assistant.messages.loadTradesFailed":"Échec de l'obtention des enregistrements de transaction","trading-assistant.messages.loadPositionsFailed":"Impossible d'obtenir l'enregistrement de position","trading-assistant.messages.loadEquityFailed":"Impossible d'obtenir la courbe des capitaux propres","trading-assistant.messages.loadIndicatorsFailed":"Échec du chargement de la liste des indicateurs, veuillez réessayer plus tard","trading-assistant.messages.spotLimitations":"Le trading au comptant a été automatiquement réglé sur position longue uniquement, effet de levier 1x","trading-assistant.messages.autoFillApiConfig":"La configuration historique de l'API de l'échange a été automatiquement renseignée","trading-assistant.placeholders.selectIndicator":"Veuillez sélectionner un indicateur","trading-assistant.placeholders.selectExchange":"Veuillez sélectionner un échange","trading-assistant.placeholders.inputApiKey":"Veuillez saisir la clé API","trading-assistant.placeholders.inputSecretKey":"Veuillez entrer la clé secrète","trading-assistant.placeholders.inputPassphrase":"Veuillez saisir la phrase secrète","trading-assistant.placeholders.inputStrategyName":"Veuillez saisir un nom de stratégie","trading-assistant.placeholders.selectSymbol":"Veuillez sélectionner une paire de trading","trading-assistant.placeholders.selectTimeframe":"Veuillez sélectionner une période","trading-assistant.placeholders.selectKlinePeriod":"Veuillez sélectionner une période K-Line","trading-assistant.placeholders.inputAiFilterPrompt":"Veuillez entrer une invite personnalisée (optionnel)","trading-assistant.validation.indicatorRequired":"Veuillez sélectionner un indicateur","trading-assistant.validation.exchangeRequired":"Veuillez sélectionner un échange","trading-assistant.validation.apiKeyRequired":"Veuillez saisir la clé API","trading-assistant.validation.secretKeyRequired":"Veuillez entrer la clé secrète","trading-assistant.validation.passphraseRequired":"Veuillez saisir la phrase secrète","trading-assistant.validation.exchangeConfigIncomplete":"Veuillez remplir les informations complètes de configuration de l'échange","trading-assistant.validation.testConnectionRequired":'Veuillez d\'abord cliquer sur le bouton "Tester la connexion" et vous assurer que la connexion est réussie',"trading-assistant.validation.testConnectionFailed":"Le test de connexion a échoué, veuillez vérifier la configuration et réessayer","trading-assistant.validation.credentialRequired":"Veuillez d'abord ajouter et tester les identifiants de l'échange dans le Centre personnel","trading-assistant.validation.strategyNameRequired":"Veuillez saisir un nom de stratégie","trading-assistant.validation.symbolRequired":"Veuillez sélectionner une paire de trading","trading-assistant.validation.initialCapitalRequired":"Veuillez saisir le montant de l'investissement","trading-assistant.validation.leverageRequired":"Veuillez saisir le ratio de levier","trading-assistant.table.time":"temps","trading-assistant.table.type":"Tapez","trading-assistant.table.price":"prix","trading-assistant.table.amount":"Quantité","trading-assistant.table.value":"Montant","trading-assistant.table.commission":"frais de traitement","trading-assistant.table.symbol":"paire de trading","trading-assistant.table.side":"direction","trading-assistant.table.size":"Quantité de position","trading-assistant.table.entryPrice":"Prix d'ouverture","trading-assistant.table.currentPrice":"prix actuel","trading-assistant.table.unrealizedPnl":"profit ou perte non réalisé","trading-assistant.table.pnlPercent":"Ratio de profits et pertes","trading-assistant.table.buy":"acheter","trading-assistant.table.sell":"vendre","trading-assistant.table.long":"Allez-y longtemps","trading-assistant.table.short":"court","trading-assistant.table.noPositions":"Aucun poste pour l'instant","trading-assistant.detail.title":"Détails de la stratégie","trading-assistant.detail.strategyName":"Nom de la stratégie","trading-assistant.detail.strategyType":"Type de stratégie","trading-assistant.detail.status":"Statut","trading-assistant.detail.tradingMode":"modèle commercial","trading-assistant.detail.exchange":"échange","trading-assistant.detail.initialCapital":"Capital initial","trading-assistant.detail.totalInvestment":"montant total de l'investissement","trading-assistant.detail.currentEquity":"Valeur nette actuelle","trading-assistant.detail.totalPnl":"Total des profits et pertes","trading-assistant.detail.indicatorName":"Nom de l'indicateur","trading-assistant.detail.maxLeverage":"Effet de levier maximal","trading-assistant.detail.decideInterval":"intervalle de décision","trading-assistant.detail.symbols":"Objet de transaction","trading-assistant.detail.createdAt":"temps de création","trading-assistant.detail.updatedAt":"Heure de mise à jour","trading-assistant.detail.llmConfig":"Configuration du modèle d'IA","trading-assistant.detail.exchangeConfig":"Configuration d'échange","trading-assistant.detail.provider":"fournisseur","trading-assistant.detail.modelId":"ID du modèle","trading-assistant.detail.close":"Fermer","trading-assistant.detail.loadFailed":"Échec de l'obtention des détails de la stratégie","trading-assistant.equity.noData":"Aucune donnée sur la valeur nette pour l'instant","trading-assistant.equity.equity":"valeur nette","trading-assistant.exchange.tradingMode":"modèle commercial","trading-assistant.exchange.virtual":"trading simulé","trading-assistant.exchange.live":"Transaction réelle","trading-assistant.exchange.selectExchange":"Sélectionnez un échange","trading-assistant.exchange.walletAddress":"adresse du portefeuille","trading-assistant.exchange.walletAddressPlaceholder":"Veuillez saisir l'adresse de votre portefeuille (en commençant par 0x)","trading-assistant.exchange.privateKey":"clé privée","trading-assistant.exchange.privateKeyPlaceholder":"Veuillez saisir la clé privée (64 caractères)","trading-assistant.exchange.testConnection":"tester la connexion","trading-assistant.exchange.connectionSuccess":"Connexion réussie","trading-assistant.exchange.connectionFailed":"La connexion a échoué","trading-assistant.exchange.testFailed":"Le test de connexion a échoué","trading-assistant.exchange.fillComplete":"Veuillez remplir les informations complètes de configuration de l'échange","trading-assistant.strategyTypeOptions.ai":"Stratégie basée sur l'IA","trading-assistant.strategyTypeOptions.indicator":"Stratégie d'indicateurs techniques","trading-assistant.strategyTypeOptions.aiDeveloping":"La fonction de stratégie basée sur l'IA est en cours de développement, alors restez à l'écoute","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"Des fonctionnalités de stratégie basées sur l'IA sont en cours de développement","trading-assistant.indicatorType.trend":"Tendance","trading-assistant.indicatorType.momentum":"élan","trading-assistant.indicatorType.volatility":"Fluctuations","trading-assistant.indicatorType.volume":"Volume","trading-assistant.indicatorType.custom":"Personnaliser","trading-assistant.exchangeNames":{okx:"OKX",binance:"Binance",hyperliquid:"Hyperliquide",blockchaincom:"Blockchain.com",coinbaseexchange:"Coinbase",gate:"Porte.io",mexc:"MEXIQUE",kraken:"Kraken",bitfinex:"Bitfinex",bybit:"Bybit",kucoin:"KuCoin",huobi:"Huobi",bitget:"Bitget",bitmex:"BitMEX",deribit:"Déribuer",phemex:"Phemex",bitmart:"BitMart",bitstamp:"Timbre de bits",bittrex:"Bittrex",poloniex:"Poloniex",gemini:"Gémeaux",cryptocom:"Crypto.com",bitflyer:"bitFlyer",upbit:"Débit ascendant",bithumb:"Bithumb",coinone:"Coinone",zb:"ZB",lbank:"LBanque",bibox:"Bibox",bigone:"BigONE",bitrue:"Bitrue",coinex:"CoinEx",digifinex:"DigiFinex",ftx:"FTX",ftxus:"FTX États-Unis",binanceus:"Binance États-Unis",binancecoinm:"Binance COIN-M",binanceusdm:"Binance USDⓈ-M",deepcoin:"Deepcoin"},"ai-trading-assistant.title":"Assistant de trading IA","ai-trading-assistant.strategyList":"Liste de stratégies","ai-trading-assistant.createStrategy":"Créer une politique","ai-trading-assistant.noStrategy":"Pas encore de stratégie","ai-trading-assistant.selectStrategy":"Veuillez sélectionner une stratégie à gauche pour afficher les détails","ai-trading-assistant.startStrategy":"stratégie de lancement","ai-trading-assistant.stopStrategy":"stratégie d'arrêt","ai-trading-assistant.editStrategy":"Stratégie éditoriale","ai-trading-assistant.deleteStrategy":"Supprimer la stratégie","ai-trading-assistant.status.running":"Courir","ai-trading-assistant.status.stopped":"Arrêté","ai-trading-assistant.status.error":"Erreur","ai-trading-assistant.tabs.tradingRecords":"historique des transactions","ai-trading-assistant.tabs.positions":"Enregistrement de poste","ai-trading-assistant.tabs.aiDecisions":"Enregistrement de décision IA","ai-trading-assistant.tabs.equityCurve":"courbe des actions","ai-trading-assistant.form.createTitle":"Créer des stratégies de trading IA","ai-trading-assistant.form.editTitle":"Modifier la stratégie de trading de l'IA","ai-trading-assistant.form.strategyName":"Nom de la stratégie","ai-trading-assistant.form.modelId":"Modèle d'IA","ai-trading-assistant.form.modelIdHint":"Utilisez le service système OpenRouter sans configurer la clé API","ai-trading-assistant.form.decideInterval":"intervalle de décision","ai-trading-assistant.form.decideInterval5m":"5 minutes","ai-trading-assistant.form.decideInterval10m":"10 minutes","ai-trading-assistant.form.decideInterval30m":"30 minutes","ai-trading-assistant.form.decideInterval1h":"1 heure","ai-trading-assistant.form.decideInterval4h":"4 heures","ai-trading-assistant.form.decideInterval1d":"1 jour","ai-trading-assistant.form.decideInterval1w":"1 semaine","ai-trading-assistant.form.decideIntervalHint":"L’intervalle de temps nécessaire à l’IA pour prendre des décisions","ai-trading-assistant.form.runPeriod":"Cycle d'exécution","ai-trading-assistant.form.runPeriodHint":"L'heure de début et l'heure de fin de l'exécution de la stratégie","ai-trading-assistant.form.startDate":"date de début","ai-trading-assistant.form.endDate":"date de fin","ai-trading-assistant.form.qdtCostTitle":"Instructions de déduction QDT","ai-trading-assistant.form.qdtCostHint":"{cost} QDT sera déduit pour chaque décision de l'IA. Veuillez vous assurer que votre compte dispose d'un solde QDT suffisant. Lors de l'exécution de la stratégie, des frais seront déduits en temps réel pour chaque décision.","ai-trading-assistant.form.apiKey":"Clé API","ai-trading-assistant.form.exchange":"Sélectionnez un échange","ai-trading-assistant.form.secretKey":"Clé secrète","ai-trading-assistant.form.passphrase":"Phrase secrète","ai-trading-assistant.form.testConnection":"tester la connexion","ai-trading-assistant.form.symbol":"paire de trading","ai-trading-assistant.form.symbolHint":"Sélectionnez la paire de trading à trader","ai-trading-assistant.form.initialCapital":"Montant investi (marge)","ai-trading-assistant.form.leverage":"Tirer parti de plusieurs","ai-trading-assistant.form.timeframe":"période","ai-trading-assistant.form.timeframe1m":"1 minute","ai-trading-assistant.form.timeframe5m":"5 minutes","ai-trading-assistant.form.timeframe15m":"15 minutes","ai-trading-assistant.form.timeframe30m":"30 minutes","ai-trading-assistant.form.timeframe1H":"1 heure","ai-trading-assistant.form.timeframe4H":"4 heures","ai-trading-assistant.form.timeframe1D":"1 jour","ai-trading-assistant.form.marketType":"type de marché","ai-trading-assistant.form.marketTypeFutures":"contrat","ai-trading-assistant.form.marketTypeSpot":"Spot","ai-trading-assistant.form.totalPnl":"Total des profits et pertes","ai-trading-assistant.form.customPrompt":"Mots d'invite personnalisés","ai-trading-assistant.form.customPromptHint":"Facultatif, utilisé pour personnaliser les stratégies de trading de l'IA et la logique de prise de décision","ai-trading-assistant.form.cancel":"Annuler","ai-trading-assistant.form.prev":"Étape précédente","ai-trading-assistant.form.next":"Étape suivante","ai-trading-assistant.form.confirmCreate":"Confirmer la création","ai-trading-assistant.form.confirmEdit":"Confirmer les modifications","ai-trading-assistant.messages.createSuccess":"Stratégie créée avec succès","ai-trading-assistant.messages.createFailed":"Échec de la création de la stratégie","ai-trading-assistant.messages.updateSuccess":"Mise à jour de la stratégie réussie","ai-trading-assistant.messages.updateFailed":"Échec de la mise à jour de la stratégie","ai-trading-assistant.messages.deleteSuccess":"Suppression de la stratégie réussie","ai-trading-assistant.messages.deleteFailed":"Échec de la suppression de la stratégie","ai-trading-assistant.messages.startSuccess":"La stratégie a démarré avec succès","ai-trading-assistant.messages.startFailed":"Échec du démarrage de la stratégie","ai-trading-assistant.messages.stopSuccess":"La stratégie s'est arrêtée avec succès","ai-trading-assistant.messages.stopFailed":"La stratégie d'arrêt a échoué","ai-trading-assistant.messages.loadFailed":"Échec de l'obtention de la liste des règles","ai-trading-assistant.messages.loadDecisionsFailed":"Échec de l'obtention du dossier de décision de l'IA","ai-trading-assistant.messages.deleteConfirm":"Êtes-vous sûr de vouloir supprimer cette stratégie ? Cette opération est irréversible.","ai-trading-assistant.placeholders.inputStrategyName":"Veuillez saisir un nom de stratégie","ai-trading-assistant.placeholders.selectModelId":"Veuillez sélectionner un modèle d'IA","ai-trading-assistant.placeholders.selectDecideInterval":"Veuillez sélectionner un intervalle de décision","ai-trading-assistant.placeholders.startTime":"heure de début","ai-trading-assistant.placeholders.endTime":"heure de fin","ai-trading-assistant.placeholders.inputApiKey":"Veuillez saisir la clé API","ai-trading-assistant.placeholders.selectExchange":"Veuillez sélectionner un échange","ai-trading-assistant.placeholders.inputSecretKey":"Veuillez entrer la clé secrète","ai-trading-assistant.placeholders.inputPassphrase":"Veuillez saisir la phrase secrète","ai-trading-assistant.placeholders.selectSymbol":"Veuillez sélectionner une paire de trading, telle que : BTC/USDT","ai-trading-assistant.placeholders.selectTimeframe":"Veuillez sélectionner une période","ai-trading-assistant.placeholders.inputCustomPrompt":"Veuillez saisir un mot d'invite personnalisé (facultatif)","ai-trading-assistant.validation.strategyNameRequired":"Veuillez saisir un nom de stratégie","ai-trading-assistant.validation.modelIdRequired":"Veuillez sélectionner un modèle d'IA","ai-trading-assistant.validation.runPeriodRequired":"Veuillez sélectionner un cycle d'exécution","ai-trading-assistant.validation.apiKeyRequired":"Veuillez saisir la clé API","ai-trading-assistant.validation.exchangeRequired":"Veuillez sélectionner un échange","ai-trading-assistant.validation.secretKeyRequired":"Veuillez entrer la clé secrète","ai-trading-assistant.validation.symbolRequired":"Veuillez sélectionner une paire de trading","ai-trading-assistant.validation.initialCapitalRequired":"Veuillez saisir le montant de l'investissement","ai-trading-assistant.table.time":"temps","ai-trading-assistant.table.type":"Tapez","ai-trading-assistant.table.price":"prix","ai-trading-assistant.table.amount":"Quantité","ai-trading-assistant.table.value":"Montant","ai-trading-assistant.table.symbol":"paire de trading","ai-trading-assistant.table.side":"direction","ai-trading-assistant.table.size":"Quantité de position","ai-trading-assistant.table.entryPrice":"Prix d'ouverture","ai-trading-assistant.table.currentPrice":"prix actuel","ai-trading-assistant.table.unrealizedPnl":"profit ou perte non réalisé","ai-trading-assistant.table.profit":"Profits et pertes","ai-trading-assistant.table.openLong":"Ouvert longtemps","ai-trading-assistant.table.closeLong":"Pinduo","ai-trading-assistant.table.openShort":"Ouvert court","ai-trading-assistant.table.closeShort":"vide","ai-trading-assistant.table.addLong":"Gadot","ai-trading-assistant.table.addShort":"ajouter un court","ai-trading-assistant.table.closeShortProfit":"Prendre des bénéfices sur une position courte","ai-trading-assistant.table.closeShortStop":"Arrêter la perte","ai-trading-assistant.table.closeLongProfit":"Arrêtez-vous longtemps et profitez","ai-trading-assistant.table.closeLongStop":"Arrêter la perte","ai-trading-assistant.table.buy":"acheter","ai-trading-assistant.table.sell":"vendre","ai-trading-assistant.table.long":"Allez-y longtemps","ai-trading-assistant.table.short":"court","ai-trading-assistant.table.hold":"tenir","ai-trading-assistant.table.reasoning":"Raison de l'analyse","ai-trading-assistant.table.decisions":"prise de décision","ai-trading-assistant.table.riskAssessment":"évaluation des risques","ai-trading-assistant.table.confidence":"Confiance","ai-trading-assistant.table.totalRecords":"{total} enregistrements au total","ai-trading-assistant.table.noPositions":"Aucun poste pour l'instant","ai-trading-assistant.detail.title":"Détails de la stratégie","ai-trading-assistant.equity.noData":"Aucune donnée sur la valeur nette pour l'instant","ai-trading-assistant.equity.equity":"valeur nette","ai-trading-assistant.exchange.testFailed":"Le test de connexion a échoué","ai-trading-assistant.exchange.connectionSuccess":"Connexion réussie","ai-trading-assistant.exchange.connectionFailed":"La connexion a échoué","ai-trading-assistant.form.advancedSettings":"Paramètres avancés","ai-trading-assistant.form.orderMode":"Mode de commande","ai-trading-assistant.form.orderModeMaker":"Créateur","ai-trading-assistant.form.orderModeTaker":"Prix du marché (Preneur)","ai-trading-assistant.form.orderModeHint":"Le mode d'ordre en attente utilise des ordres limités et les frais de traitement sont inférieurs ; le mode prix du marché est exécuté immédiatement et les frais de traitement sont plus élevés.","ai-trading-assistant.form.makerWaitSec":"Temps d'attente pour les commandes en attente (secondes)","ai-trading-assistant.form.makerWaitSecHint":"Le temps d'attente pour la transaction après avoir passé une commande. Annulez et réessayez après l'expiration du délai.","ai-trading-assistant.form.makerRetries":"Nombre de tentatives pour les commandes en attente","ai-trading-assistant.form.makerRetriesHint":"Le nombre maximum de tentatives lorsqu'un ordre en attente n'est pas exécuté","ai-trading-assistant.form.fallbackToMarket":"L'ordre en attente échoue et le prix du marché est dégradé.","ai-trading-assistant.form.fallbackToMarketHint":"Lorsque l'ordre en attente d'ouverture/de clôture n'a pas été exécuté, s'il doit être rétrogradé en ordre au marché pour garantir que la transaction soit terminée.","ai-trading-assistant.form.marginMode":"Mode marge","ai-trading-assistant.form.marginModeCross":"Entrepôt complet","ai-trading-assistant.form.marginModeIsolated":"Position isolée","ai-analysis.title":"Moteur de trading quantique","ai-analysis.system.online":"en ligne","ai-analysis.system.agents":"agent","ai-analysis.system.active":"actif","ai-analysis.system.stage":"scène","ai-analysis.panel.roster":"Composition des agents","ai-analysis.panel.thinking":"En pensant...","ai-analysis.panel.done":"Terminé","ai-analysis.panel.standby":"veille","ai-analysis.input.title":"Moteur de trading quantique","ai-analysis.input.placeholder":"Sélectionnez l'actif cible (par exemple BTC/USDT)","ai-analysis.input.watchlist":"Stocks optionnels","ai-analysis.input.start":"Démarrer l'analyse","ai-analysis.input.recent":"Tâches récentes :","ai-analysis.vis.stage":"étape","ai-analysis.vis.processing":"Traitement","ai-analysis.result.complete":"Analyse terminée","ai-analysis.result.signal":"signal final","ai-analysis.result.confidence":"Confiance :","ai-analysis.result.new":"nouvelle analyse","ai-analysis.result.full":"Voir le rapport complet","ai-analysis.logs.title":"Journal système","ai-analysis.modal.title":"rapport confidentiel","ai-analysis.modal.fundamental":"analyse fondamentale","ai-analysis.modal.technical":"Analyse technique","ai-analysis.modal.sentiment":"Analyse émotionnelle","ai-analysis.modal.risk":"évaluation des risques","ai-analysis.stage.idle":"veille","ai-analysis.stage.1":"Première phase : analyse multidimensionnelle","ai-analysis.stage.2":"Phase deux : débat long-court","ai-analysis.stage.3":"Phase trois : planification stratégique","ai-analysis.stage.4":"La quatrième étape : la revue du contrôle des risques","ai-analysis.stage.complete":"Terminé","ai-analysis.agent.investment_director":"Directeur des investissements","ai-analysis.agent.role.investment_director":"Analyse complète et conclusion finale","ai-analysis.agent.market":"analyste de marché","ai-analysis.agent.role.market":"Données technologiques et de marché","ai-analysis.agent.fundamental":"analyste fondamental","ai-analysis.agent.role.fundamental":"Finances et valorisation","ai-analysis.agent.technical":"analyste technique","ai-analysis.agent.role.technical":"Indicateurs et graphiques techniques","ai-analysis.agent.news":"analyste de nouvelles","ai-analysis.agent.role.news":"Filtre d'actualités mondiales","ai-analysis.agent.sentiment":"analyste des sentiments","ai-analysis.agent.role.sentiment":"Social et émotionnel","ai-analysis.agent.risk":"analyste des risques","ai-analysis.agent.role.risk":"Vérification des risques de base","ai-analysis.agent.bull":"chercheur optimiste","ai-analysis.agent.role.bull":"Extraction de catalyseurs de croissance","ai-analysis.agent.bear":"chercheur baissier","ai-analysis.agent.role.bear":"Recherche de risques et de défauts","ai-analysis.agent.manager":"directeur de recherche","ai-analysis.agent.role.manager":"modérateur du débat","ai-analysis.agent.trader":"commerçant","ai-analysis.agent.role.trader":"Stratège exécutif","ai-analysis.agent.risky":"analyste activiste","ai-analysis.agent.role.risky":"stratégie agressive","ai-analysis.agent.neutral":"analyste d'équilibre","ai-analysis.agent.role.neutral":"stratégie d'équilibrage","ai-analysis.agent.safe":"analyste conservateur","ai-analysis.agent.role.safe":"stratégie conservatrice","ai-analysis.agent.cro":"Responsable du contrôle des risques (CRO)","ai-analysis.agent.role.cro":"autorité décisionnelle finale","ai-analysis.script.market":"Récupération des données OHLCV des principaux échanges...","ai-analysis.script.fundamental":"Récupération des rapports financiers trimestriels...","ai-analysis.script.technical":"Analyser les indicateurs techniques et les modèles de graphiques...","ai-analysis.script.news":"Analyse de l'actualité financière mondiale...","ai-analysis.script.sentiment":"Analyser les tendances des réseaux sociaux...","ai-analysis.script.risk":"Calcul de la volatilité historique...","invite.inviteLink":"Lien d'invitation","invite.copy":"Copier le lien","invite.copySuccess":"Copiez avec succès !","invite.copyFailed":"Échec de la copie, veuillez copier manuellement","invite.noInviteLink":"Lien d'invitation non généré","invite.totalInvites":"Invitations cumulées","invite.totalReward":"Récompenses cumulées","invite.rules":"Règles d'invitation","invite.rule1":"Chaque fois que vous invitez avec succès un ami à s'inscrire, vous recevrez une récompense","invite.rule2":"Si l'ami invité termine la première transaction, vous recevrez des récompenses supplémentaires","invite.rule3":"Les récompenses d'invitation seront envoyées directement sur votre compte","invite.inviteList":"Liste d'invitations","invite.tasks":"centre de mission","invite.inviteeName":"Invité","invite.inviteTime":"Heure d'invitation","invite.status":"Statut","invite.reward":"récompense","invite.active":"actif","invite.inactive":"Non activé","invite.completed":"Terminé","invite.claimed":"Reçu","invite.pending":"A compléter","invite.goToTask":"compléter","invite.claimReward":"réclamer des récompenses","invite.verify":"Vérification terminée","invite.verifySuccess":"Vérification réussie ! Tâche terminée","invite.verifyNotCompleted":"La tâche n'est pas encore terminée, veuillez d'abord la terminer","invite.verifyFailed":"La vérification a échoué, veuillez réessayer plus tard","invite.claimSuccess":"Vous avez reçu avec succès {reward} QDT !","invite.claimFailed":"Échec de la collecte, veuillez réessayer plus tard","invite.totalRecords":"{total} enregistrements au total","invite.task.twitter.title":"Retweeter sur X (Twitter)","invite.task.twitter.desc":"Partagez nos tweets officiels sur votre compte X (Twitter)","invite.task.youtube.title":"Suivez notre chaîne YouTube","invite.task.youtube.desc":"Abonnez-vous et suivez notre chaîne YouTube officielle","invite.task.telegram.title":"Rejoindre le groupe Telegram","invite.task.telegram.desc":"Rejoignez notre groupe communautaire officiel Telegram","invite.task.discord.title":"Rejoignez un serveur Discord","invite.task.discord.desc":"Rejoignez notre serveur communautaire Discord",message:"-","layouts.usermenu.dialog.title":"informations","layouts.usermenu.dialog.content":"Êtes-vous sûr de vouloir vous déconnecter ?","layouts.userLayout.title":"Trouver la vérité dans l'incertitude","dashboard.indicator.boundary.message":"Note: The indicator script only computes plots + buy/sell signals. Position sizing, risk, scaling, fees/slippage belong to execution config.","dashboard.indicator.boundary.indicatorRule":"Keep the script to buy/sell only (and set df['buy']/df['sell']). Do NOT implement position management, TP/SL, scaling in the script.","dashboard.indicator.boundary.backtestRule":"Rule: If a bar has a main signal (buy/sell → open/close/reverse), scaling in/out is skipped on the same bar.","dashboard.indicator.guide.title":"Python Indicator & Strategy Development Guide","dashboard.indicator.guide.intro":"This platform supports writing custom technical indicators and trading signals using Python. The system includes built-in pandas and numpy data analysis libraries. You can use standard DataFrame operations to process K-line data and draw charts or mark buy/sell signals.","dashboard.indicator.guide.section1.title":"1. Runtime Environment & Predefined Variables","dashboard.indicator.guide.section1.env":"Your code runs in a browser-based Python environment (Pyodide).","dashboard.indicator.guide.section1.libs":"Pre-installed Libraries","dashboard.indicator.guide.section1.libsDesc":"The following libraries are imported by default, no need to import again:","dashboard.indicator.guide.section1.libsList":"pandas (pd), numpy (np), math, json","dashboard.indicator.guide.section1.data":"Input Data: df","dashboard.indicator.guide.section1.dataDesc":"The system automatically converts current K-line data into a Pandas DataFrame object, variable name is df.","dashboard.indicator.guide.section1.dataColumns":"df contains the following columns (all float type):","dashboard.indicator.guide.section1.dataColumnsList":"time (timestamp, seconds), open, high, low, close, volume","dashboard.indicator.guide.section1.dataNote":"Data index is arranged from old to new (0 is the earliest data, last row is the latest data).","dashboard.indicator.guide.section1.dataIndex":"Important: df index is timestamp (DatetimeIndex), please preserve the index, avoid using .values which loses the index.","dashboard.indicator.guide.section2.title":"2. Parameter Definition","dashboard.indicator.guide.section2.desc":"You can define variables as parameters at the beginning of your code. The system will try to parse statements like variable = value as adjustable parameters.","dashboard.indicator.guide.section2.example":"Parameter Example","dashboard.indicator.guide.section2.exampleCode":"span = 20 or multiplier = 2.0","dashboard.indicator.guide.section3.title":"3. Backtest Signal Setup (Important!)","dashboard.indicator.guide.section3.desc":"If you want your indicator to support backtesting, you must set the following two columns in your code:","dashboard.indicator.guide.section3.backtestRequired":"Required for Backtesting:","dashboard.indicator.guide.section3.backtestBuySignal":"df['buy_signal'] - Boolean Series, True indicates buy signal","dashboard.indicator.guide.section3.backtestSellSignal":"df['sell_signal'] - Boolean Series, True indicates sell signal","dashboard.indicator.guide.section3.backtestExample":"Example:","dashboard.indicator.guide.section3.backtestExampleCode":"df['buy_signal'] = condition_buy
df['sell_signal'] = condition_sell","dashboard.indicator.guide.section3.backtestNote":"Note: Even if you only set output.signals for chart display, you must set these two columns to enable backtesting.","dashboard.indicator.guide.section4.title":"4. Output Requirements: output","dashboard.indicator.guide.section4.desc":"At the end of code execution, you must define a dictionary named output to tell the chart how to display results.","dashboard.indicator.guide.section4.fields":"The output dictionary contains the following fields:","dashboard.indicator.guide.section4.plots":"plots - For drawing lines (e.g., moving averages, RSI)","dashboard.indicator.guide.section4.signals":"signals - For marking buy/sell signals (e.g., arrows, labels)","dashboard.indicator.guide.section4.name":"name - Indicator name (optional)","dashboard.indicator.guide.section4.calculatedVars":"calculatedVars - Calculated variables (optional, for displaying additional information)","dashboard.indicator.guide.section5.title":"5. Plot Configuration (Plots)","dashboard.indicator.guide.section5.desc":"Each object in the plots list represents a line.","dashboard.indicator.guide.section5.table.field":"Field","dashboard.indicator.guide.section5.table.type":"Type","dashboard.indicator.guide.section5.table.required":"Required","dashboard.indicator.guide.section5.table.requiredYes":"Yes","dashboard.indicator.guide.section5.table.requiredNo":"No","dashboard.indicator.guide.section5.table.desc":"Description","dashboard.indicator.guide.section5.table.name":"The name of the indicator line, displayed in the legend","dashboard.indicator.guide.section5.table.data":"Data list, length must match the number of rows in df. Recommended to use series.tolist()","dashboard.indicator.guide.section5.table.color":"Line color (Hex format, e.g. '#ff0000'). If not filled, the system will automatically assign","dashboard.indicator.guide.section5.table.typeDesc":"Chart type, default is 'line'","dashboard.indicator.guide.section5.table.overlay":"Important. True means display on main chart (with K-line), False means display on sub-chart (independent area)","dashboard.indicator.guide.section5.example":"Example: Draw Simple Moving Average (SMA)","dashboard.indicator.guide.section5.exampleCalc":"Calculate SMA","dashboard.indicator.guide.section5.exampleOutput":"Construct Output","dashboard.indicator.guide.section5.exampleOverlay":"Display on main chart","dashboard.indicator.guide.section6.title":"6. Signal Markers (Signals)","dashboard.indicator.guide.section6.desc":"signals are used to mark buy/sell points on specific K-lines through icons or text. Note: This is only for chart display. The backtest system uses df['buy_signal'] and df['sell_signal'].","dashboard.indicator.guide.section6.table.type":"Signal type: 'buy' (buy, marked below K-line) or 'sell' (sell, marked above K-line)","dashboard.indicator.guide.section6.table.data":"Signal data list. Fill price value at signal positions, fill None (or np.nan) at non-signal positions","dashboard.indicator.guide.section6.table.text":'Text displayed on the label (e.g. "B", "S", "Buy", "Sell")',"dashboard.indicator.guide.section6.table.color":"Marker color","dashboard.indicator.guide.section6.hint":"The system automatically handles positioning.","dashboard.indicator.guide.section6.buy":"Markers will be automatically positioned below the Low of the current K-line","dashboard.indicator.guide.section6.sell":"Markers will be automatically positioned above the High of the current K-line","dashboard.indicator.guide.section6.example":"Example: Draw Buy/Sell Signals","dashboard.indicator.guide.section6.exampleInit":"Initialize signal list, fill all with None","dashboard.indicator.guide.section6.exampleLogic":"Simple logic: mark buy when close price is greater than open price","dashboard.indicator.guide.section6.exampleNote":"In actual logic, please use loops or vectorized operations","dashboard.indicator.guide.section6.examplePrice":"Record price","dashboard.indicator.guide.section6.exampleText":"Buy","dashboard.indicator.guide.section7.title":"7. Complete Code Examples","dashboard.indicator.guide.section7.exampleA":"Example A: Dual EMA Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleACode":'# 1. Calculate indicators
df[\'ema_fast\'] = df[\'close\'].ewm(span=5, adjust=False).mean()
df[\'ema_slow\'] = df[\'close\'].ewm(span=13, adjust=False).mean()

# 2. Calculate crossover signals
cross_up = (df[\'ema_fast\'] > df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) <= df[\'ema_slow\'].shift(1))
cross_down = (df[\'ema_fast\'] < df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) >= df[\'ema_slow\'].shift(1))

# 3. 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = cross_up
df[\'close_long\'] = cross_down
df[\'open_short\'] = cross_down
df[\'close_short\'] = cross_up

# 4. Generate signal data for chart display
buy_signals = [df[\'low\'].iloc[i] * 0.995 if cross_up.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if cross_down.iloc[i] else None for i in range(len(df))]

# 5. Build output
output = {
"name": "Dual EMA Strategy",
"plots": [
{"name": "EMA 5", "data": df[\'ema_fast\'].tolist(), "color": "#FF6B6B", "overlay": True},
{"name": "EMA 13", "data": df[\'ema_slow\'].tolist(), "color": "#4ECDC4", "overlay": True}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section7.exampleB":"Example B: Bollinger Bands - Chart Display Only","dashboard.indicator.guide.section7.exampleBCode":'# Calculate Bollinger Bands (chart display only, no backtesting)
length = 20
mult = 2.0
df[\'sma\'] = df[\'close\'].rolling(length).mean()
df[\'std\'] = df[\'close\'].rolling(length).std()
df[\'upper\'] = df[\'sma\'] + mult * df[\'std\']
df[\'lower\'] = df[\'sma\'] - mult * df[\'std\']

output = {
"name": "Bollinger Bands",
"plots": [
{"name": "Upper", "data": df[\'upper\'].tolist(), "color": "#FF5252", "overlay": True},
{"name": "Middle", "data": df[\'sma\'].tolist(), "color": "#2196F3", "overlay": True},
{"name": "Lower", "data": df[\'lower\'].tolist(), "color": "#00E676", "overlay": True}
]
}',"dashboard.indicator.guide.section7.exampleC":"Example C: RSI Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleCCode":'# Calculate RSI
delta = df[\'close\'].diff()
up = delta.clip(lower=0)
down = -1 * delta.clip(upper=0)
ema_up = up.ewm(com=13, adjust=False).mean()
ema_down = down.ewm(com=13, adjust=False).mean()
rs = ema_up / ema_down
df[\'rsi\'] = 100 - (100 / (1 + rs))

# Generate trading signals
buy_condition = df[\'rsi\'] < 30 # Oversold buy
sell_condition = df[\'rsi\'] > 70 # Overbought sell

# 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = buy_condition
df[\'close_long\'] = sell_condition
df[\'open_short\'] = sell_condition
df[\'close_short\'] = buy_condition

# Generate chart signals
buy_signals = [df[\'low\'].iloc[i] * 0.995 if buy_condition.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if sell_condition.iloc[i] else None for i in range(len(df))]

output = {
"name": "RSI Strategy",
"plots": [
{"name": "RSI", "data": df[\'rsi\'].tolist(), "color": "#9C27B0", "overlay": False},
{"name": "Overbought", "data": [70] * len(df), "color": "#FF5252", "style": "dashed", "overlay": False},
{"name": "Oversold", "data": [30] * len(df), "color": "#00E676", "style": "dashed", "overlay": False}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section6.param":"Parameters","dashboard.indicator.guide.section6.calc":"Calculate","dashboard.indicator.guide.section6.output":"Output","dashboard.indicator.guide.section6.generate":"Generate signal data (initialize with None)","dashboard.indicator.guide.section6.subchart":"Display on sub-chart","dashboard.indicator.guide.section8.title":"8. Frequently Asked Questions (FAQ)","dashboard.indicator.guide.section8.q1":"Q: Why can't my indicator be backtested?","dashboard.indicator.guide.section8.a1":"A: The backtest system requires NEW signal columns: df['open_long'], df['close_long'], df['open_short'], df['close_short'] (boolean). Even if you set output.signals for chart display, you must set these columns to enable backtesting.","dashboard.indicator.guide.section8.q2":"Q: Data length mismatch?","dashboard.indicator.guide.section8.a2":"A: The data list in plots and signals must have exactly the same length as the K-line data. If you use df['xxx'].tolist(), there is usually no problem.","dashboard.indicator.guide.section8.q3":"Q: How to handle NaN (empty values)?","dashboard.indicator.guide.section8.a3":"A: Pandas calculations (such as rolling mean) will produce NaN at the beginning. The system will automatically convert NaN to null for chart rendering. You don't need to manually clean it, but if you need specific logic, you can use df.fillna(0) or other methods.","dashboard.indicator.guide.section8.q4":"Q: Index mismatch causing all signals to be NaN?","dashboard.indicator.guide.section8.a4":"A: Please ensure you preserve the original df index (timestamp). Avoid using .values to create new Series. Use columns directly like df['close'] for operations.","dashboard.indicator.guide.section8.q5":"Q: Can I use third-party network libraries?","dashboard.indicator.guide.section8.a5":"A: No. The runtime environment is a browser sandbox and cannot use libraries like requests to request external APIs, nor can it install additional pip packages. Limited to built-in libraries such as pandas, numpy, math, json.","dashboard.indicator.guide.section8.q6":"Q: How to debug code?","dashboard.indicator.guide.section8.a6":"A: If the chart does not display indicators, it is usually because the Python code has an error. Please check for syntax errors or array index out of bounds. It is recommended to debug the algorithm logic in a local Python environment first, then copy it in.","dashboard.indicator.guide.section8.q7":"Q: Backtest shows 0 signals?","dashboard.indicator.guide.section8.a7":"A: Please check the data type of df['open_long']/df['close_long']/df['open_short']/df['close_short']. They should be boolean (True/False), not numeric. Use condition.fillna(False).astype(bool) to ensure correct type.","dashboard.indicator.backtest.commissionHint":"Charged on notional value (incl. leverage) per trade; both entry & exit are deducted from balance.","dashboard.indicator.backtest.historyTitle":"Backtest History","dashboard.indicator.backtest.historyRefresh":"Refresh","dashboard.indicator.backtest.historyView":"View","dashboard.indicator.backtest.historyNoData":"No backtest history","dashboard.indicator.backtest.historyUseCurrent":"Only current symbol/timeframe","dashboard.indicator.backtest.historyFilterSymbol":"Symbol","dashboard.indicator.backtest.historyFilterTimeframe":"Timeframe","dashboard.indicator.backtest.historyApply":"Apply filters","dashboard.indicator.backtest.historyAIAnalyze":"AI Analyze","dashboard.indicator.backtest.historyAIAnalyzeTitle":"AI Suggestions","dashboard.indicator.backtest.historyNoAIResult":"No AI analysis result","dashboard.indicator.backtest.historyRunId":"Run ID","dashboard.indicator.backtest.historyCreatedAt":"Time","dashboard.indicator.backtest.historyRange":"Range","dashboard.indicator.backtest.historyStatus":"Status","dashboard.indicator.backtest.historyStatusSuccess":"Success","dashboard.indicator.backtest.historyStatusFailed":"Failed","dashboard.indicator.backtest.historyActions":"Actions","dashboard.indicator.backtest.hint.entryPctMax":"Max entry: {maxPct}% (reserve budget for future scale-ins)","trading-assistant.exchange.ipWhitelistTip":"Please add the following IPs to the whitelist in your exchange API settings:","signal-robot.title":"Signal Robot Console","signal-robot.createBot":"Create New Bot","signal-robot.search.nameOrSymbol":"Name/Symbol","signal-robot.search.placeholder":"Search bot name or symbol","signal-robot.search.status":"Status","signal-robot.search.statusAll":"All","signal-robot.search.statusRunning":"Running","signal-robot.search.statusPaused":"Paused","signal-robot.search.query":"Query","signal-robot.search.reset":"Reset","signal-robot.table.botName":"Bot Name","signal-robot.table.symbolTimeframe":"Symbol/Timeframe","signal-robot.table.triggerStrategy":"Trigger Strategy","signal-robot.table.notificationChannels":"Notification Channels","signal-robot.table.status":"Status","signal-robot.table.action":"Action","signal-robot.table.triggerConditions":"{count} trigger conditions","signal-robot.table.monitoring":"Monitoring","signal-robot.table.paused":"Paused","signal-robot.table.edit":"Edit","signal-robot.table.pause":"Pause","signal-robot.table.start":"Start","signal-robot.table.delete":"Delete","signal-robot.table.deleteConfirm":"Are you sure you want to delete this bot?","signal-robot.table.deleteSuccess":"Deleted successfully","signal-robot.table.startSuccess":"Bot started","signal-robot.table.pauseSuccess":"Bot paused","signal-robot.channel.telegram":"Telegram","signal-robot.channel.discord":"Discord","signal-robot.channel.email":"Email","signal-robot.channel.webhook":"Webhook","signal-robot.channel.browser":"Browser Push","signal-robot.modal.createTitle":"Create New Signal Robot","signal-robot.modal.editTitle":"Edit Signal Robot","signal-robot.modal.step.basic":"Basic Settings","signal-robot.modal.step.entry":"Entry Strategy","signal-robot.modal.step.position":"Position Management","signal-robot.modal.step.risk":"Risk Control","signal-robot.modal.step.notify":"Notification Config","signal-robot.modal.prev":"Previous","signal-robot.modal.next":"Next","signal-robot.modal.preview":"Preview Backtest","signal-robot.modal.complete":"Complete & Run","signal-robot.modal.saveSuccess":"Saved successfully","signal-robot.modal.previewDeveloping":"Preview feature is under development...","signal-robot.modal.basicInfoRequired":"Please complete basic information","signal-robot.basic.alert":"Set basic information for the bot","signal-robot.basic.title":"Basic Information","signal-robot.basic.botName":"Bot Name","signal-robot.basic.botNamePlaceholder":"e.g.: BTC SuperTrend Strategy","signal-robot.basic.symbol":"Trading Pair","signal-robot.basic.symbolPlaceholder":"Select from watchlist","signal-robot.basic.noWatchlist":"No watchlist items, please add in market page first","signal-robot.basic.timeframe":"K-Line Period","signal-robot.basic.timeframe15m":"15 Minutes","signal-robot.basic.timeframe30m":"30 Minutes","signal-robot.basic.timeframe1h":"1 Hour","signal-robot.basic.timeframe4h":"4 Hours","signal-robot.basic.timeframe1d":"1 Day","signal-robot.basic.autoNameSuggestion":"{symbol} Signal Robot","signal-robot.entry.alert":"Trigger entry signal when all conditions below are met","signal-robot.entry.condition":"Condition {index}","signal-robot.entry.indicator":"Indicator","signal-robot.entry.indicatorSupertrend":"SuperTrend","signal-robot.entry.indicatorEma":"EMA (Exponential Moving Average)","signal-robot.entry.indicatorRsi":"RSI (Relative Strength Index)","signal-robot.entry.indicatorMacd":"MACD","signal-robot.entry.indicatorBollinger":"Bollinger Bands","signal-robot.entry.atrPeriod":"ATR Period","signal-robot.entry.multiplier":"Multiplier","signal-robot.entry.triggerSignal":"Trigger Signal","signal-robot.entry.signalTrendBullish":"Trend Bullish","signal-robot.entry.signalTrendBearish":"Trend Bearish","signal-robot.entry.signalIsUptrend":"Is Uptrend","signal-robot.entry.signalIsDowntrend":"Is Downtrend","signal-robot.entry.period":"Period","signal-robot.entry.compareCondition":"Compare Condition","signal-robot.entry.priceAbove":"Price > EMA (Price Above)","signal-robot.entry.priceBelow":"Price < EMA (Price Below)","signal-robot.entry.crossUp":"Price Crosses Above EMA (Golden Cross)","signal-robot.entry.crossDown":"Price Crosses Below EMA (Death Cross)","signal-robot.entry.compare":"Compare","signal-robot.entry.greaterThan":"Greater Than","signal-robot.entry.lessThan":"Less Than","signal-robot.entry.crossUpShort":"Cross Up","signal-robot.entry.crossDownShort":"Cross Down","signal-robot.entry.threshold":"Threshold","signal-robot.entry.selectIndicator":"Please select an indicator to configure parameters","signal-robot.entry.addCondition":"Add Condition","signal-robot.position.alert":"Configure initial position size, leverage and pyramiding rules","signal-robot.position.basicTitle":"Basic Position Management","signal-robot.position.initialSize":"Initial Size (Capital %)","signal-robot.position.initialSizeHint":"Recommended 5% - 20%","signal-robot.position.leverage":"Leverage","signal-robot.position.leverageHint":"Please ensure your exchange account supports this leverage","signal-robot.position.maxPyramiding":"Max Pyramiding Times","signal-robot.position.maxPyramidingHint":"0 means no pyramiding","signal-robot.position.pyramidingTitle":"Pyramiding Rules","signal-robot.position.pyramidingEnabled":"Enabled","signal-robot.position.pyramidingDisabled":"Disabled","signal-robot.position.pyramidingCondition":"Pyramiding Trigger Condition","signal-robot.position.priceRisePct":"Price Rises (Long) / Falls (Short)","signal-robot.position.profitPct":"Profit Reaches","signal-robot.position.triggerThreshold":"Trigger Threshold (%)","signal-robot.position.triggerThresholdHint":"e.g. 3%: add position once every 3% rise","signal-robot.position.addSize":"Single Add Size (Capital %)","signal-robot.position.pyramidingDisabledHint":"Pyramiding disabled, only initial position will be executed","signal-robot.risk.alert":"Configure take profit, stop loss and exit rules","signal-robot.risk.stopLossTitle":"Stop Loss","signal-robot.risk.stopLossEnabled":"Enabled","signal-robot.risk.stopLossDisabled":"Disabled","signal-robot.risk.stopLossType":"Stop Loss Type","signal-robot.risk.stopLossFixedPct":"Fixed Percentage","signal-robot.risk.stopLossAtrMultiplier":"ATR Multiplier","signal-robot.risk.stopLossValue":"Value","signal-robot.risk.stopLossFixedHint":"e.g. 2%: stop loss when loss reaches 2%","signal-robot.risk.stopLossAtrHint":"e.g. 2.0: stop loss when price touches ATR*2.0","signal-robot.risk.stopLossDisabledHint":"Stop loss disabled (high risk)","signal-robot.risk.trailingStopTitle":"Trailing Stop","signal-robot.risk.activationProfit":"Activation Profit (%)","signal-robot.risk.activationProfitHint":"Start trailing when profit reaches this level","signal-robot.risk.callbackPct":"Callback (%)","signal-robot.risk.callbackPctHint":"Trigger take profit when price falls from peak by this percentage","signal-robot.risk.trailingStopDisabledHint":"Trailing stop disabled","signal-robot.risk.otherExitTitle":"Other Exit Rules","signal-robot.risk.signalExit":"Allow Signal Exit","signal-robot.risk.signalExitHint":"Close position immediately when reverse signal appears (e.g. close long when short signal appears)","signal-robot.notify.alert":"Configure notification methods when signal is triggered","signal-robot.notify.channelTitle":"Notification Channels","signal-robot.notify.discordWebhook":"Discord Webhook","signal-robot.notify.genericWebhook":"Generic Webhook","signal-robot.notify.webhookUrl":"Webhook URL","signal-robot.notify.webhookUrlPlaceholder":"https://example.com/webhook","signal-robot.notify.discordUrl":"Discord URL","signal-robot.notify.discordUrlPlaceholder":"https://discord.com/api/webhooks/...","signal-robot.operator.greaterThan":"Greater Than","signal-robot.operator.lessThan":"Less Than","signal-robot.operator.equal":"Equal","signal-robot.operator.goldenCross":"Golden Cross","signal-robot.operator.deathCross":"Death Cross","signal-robot.operator.increaseBy":"Increase By","signal-robot.operator.decreaseBy":"Decrease By","signal-robot.indicator.price":"Price","signal-robot.indicator.rsi":"RSI","signal-robot.indicator.kdjK":"KDJ(K)","signal-robot.indicator.kdjJ":"KDJ(J)","signal-robot.indicator.macd":"MACD","signal-robot.indicator.macdHist":"MACD Histogram","signal-robot.indicator.bollingerUp":"Bollinger Upper","signal-robot.indicator.bollingerLow":"Bollinger Lower","signal-robot.indicator.volume":"Volume","signal-robot.indicator.changePct1h":"1H Change %","signal-robot.indicator.changePct24h":"24H Change %","signal-robot.indicator.signalLine":"Signal Line","settings.group.agent_memory":"Mémoire/Réflexion","settings.group.reflection_worker":"Worker de vérification de réflexion automatique","settings.field.ENABLE_AGENT_MEMORY":"Activer la mémoire de l’agent","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"Activer la recherche vectorielle (local)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"Dimension d’embedding","settings.field.AGENT_MEMORY_TOP_K":"Nombre Top-K","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"Taille de la fenêtre de candidats","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"Demi-vie de décroissance temporelle (jours)","settings.field.AGENT_MEMORY_W_SIM":"Poids de similarité","settings.field.AGENT_MEMORY_W_RECENCY":"Poids de récence","settings.field.AGENT_MEMORY_W_RETURNS":"Poids des rendements","settings.field.ENABLE_REFLECTION_WORKER":"Activer la vérification automatique","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"Intervalle de vérification (s)","profile.notifications.title":"Paramètres de notification","profile.notifications.hint":"Configurez vos méthodes de notification par défaut, utilisées automatiquement lors de la création de surveillances et alertes","profile.notifications.defaultChannels":"Canaux de notification par défaut","profile.notifications.browser":"Notification dans l'app","profile.notifications.email":"E-mail","profile.notifications.phone":"SMS","profile.notifications.telegramBotToken":"Token du Bot Telegram","profile.notifications.telegramBotTokenPlaceholder":"Entrez votre Token Bot Telegram","profile.notifications.telegramBotTokenHint":"Créez un bot via @BotFather pour obtenir le Token","profile.notifications.telegramChatId":"Chat ID Telegram","profile.notifications.telegramPlaceholder":"Entrez votre Chat ID Telegram (ex: 123456789)","profile.notifications.telegramHint":"Envoyez /start à @userinfobot pour obtenir votre Chat ID","profile.notifications.notifyEmail":"E-mail de notification","profile.notifications.emailPlaceholder":"Adresse e-mail pour recevoir les notifications","profile.notifications.emailHint":"Utilise l'e-mail du compte par défaut, vous pouvez en définir un autre","profile.notifications.phonePlaceholder":"Entrez le numéro de téléphone (ex: +33612345678)","profile.notifications.phoneHint":"L'administrateur doit configurer le service Twilio","profile.notifications.discordWebhook":"Webhook Discord","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"Créez un Webhook dans les paramètres du serveur Discord","profile.notifications.webhookUrl":"URL Webhook","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"URL Webhook personnalisée, notifications envoyées via POST JSON","profile.notifications.webhookToken":"Token Webhook (Optionnel)","profile.notifications.webhookTokenPlaceholder":"Bearer Token pour l'authentification","profile.notifications.webhookTokenHint":"Envoyé comme Authorization: Bearer Token au Webhook","profile.notifications.testBtn":"Envoyer une notification test","profile.notifications.saveSuccess":"Paramètres de notification enregistrés","profile.notifications.selectChannel":"Veuillez sélectionner au moins un canal de notification","profile.notifications.fillTelegramToken":"Veuillez remplir le Token Bot Telegram","profile.notifications.fillTelegram":"Veuillez remplir le Chat ID Telegram","profile.notifications.fillEmail":"Veuillez remplir l'e-mail de notification","profile.notifications.testSent":"Notification test envoyée, vérifiez vos canaux de notification"},y=(0,i.A)((0,i.A)({},h),f)}}]); \ No newline at end of file diff --git a/frontend/dist/js/lang-fr-FR.ca1972fa.js b/frontend/dist/js/lang-fr-FR.f9343e28.js similarity index 99% rename from frontend/dist/js/lang-fr-FR.ca1972fa.js rename to frontend/dist/js/lang-fr-FR.f9343e28.js index eb572bf..4a152bb 100644 --- a/frontend/dist/js/lang-fr-FR.ca1972fa.js +++ b/frontend/dist/js/lang-fr-FR.f9343e28.js @@ -1 +1 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[969],{49243:function(e,a,t){t.d(a,{default:function(){return y}});var i=t(57888),s={items_per_page:"/ page",jump_to:"Aller à",jump_to_confirm:"confirmer",page:"",prev_page:"Page précédente",next_page:"Page suivante",prev_5:"5 Pages précédentes",next_5:"5 Pages suivantes",prev_3:"3 Pages précédentes",next_3:"3 Pages suivantes"},r=t(85505),n={today:"Aujourd'hui",now:"Maintenant",backToToday:"Aujourd'hui",ok:"Ok",clear:"Rétablir",month:"Mois",year:"Année",timeSelect:"Sélectionner l'heure",dateSelect:"Sélectionner la date",monthSelect:"Choisissez un mois",yearSelect:"Choisissez une année",decadeSelect:"Choisissez une décennie",yearFormat:"YYYY",dateFormat:"DD/MM/YYYY",dayFormat:"DD",dateTimeFormat:"DD/MM/YYYY HH:mm:ss",monthBeforeYear:!0,previousMonth:"Mois précédent (PageUp)",nextMonth:"Mois suivant (PageDown)",previousYear:"Année précédente (Ctrl + gauche)",nextYear:"Année prochaine (Ctrl + droite)",previousDecade:"Décennie précédente",nextDecade:"Décennie suivante",previousCentury:"Siècle précédent",nextCentury:"Siècle suivant"},o={placeholder:"Sélectionner l'heure"},d=o,l={lang:(0,r.A)({placeholder:"Sélectionner une date",rangePlaceholder:["Date de début","Date de fin"]},n),timePickerLocale:(0,r.A)({},d)},c=l,u=c,m={locale:"fr",Pagination:s,DatePicker:c,TimePicker:d,Calendar:u,Table:{filterTitle:"Filtrer",filterConfirm:"OK",filterReset:"Réinitialiser"},Modal:{okText:"OK",cancelText:"Annuler",justOkText:"OK"},Popconfirm:{okText:"OK",cancelText:"Annuler"},Transfer:{searchPlaceholder:"Recherche",itemUnit:"élément",itemsUnit:"éléments"},Empty:{description:"Aucune donnée"},Upload:{uploading:"Téléchargement...",removeFile:"Effacer le fichier",uploadError:"Erreur de téléchargement",previewFile:"Fichier de prévisualisation",downloadFile:"Télécharger un fichier"},Text:{edit:"éditer",copy:"copier",copied:"copie effectuée",expand:"développer"}},g=m,p=t(85498),b=t.n(p),h={antLocale:g,momentName:"fr",momentLocale:b()},f={submit:"Soumettre",save:"enregistrer","submit.ok":"Soumission réussie","save.ok":"Enregistré avec succès","menu.welcome":"bienvenue","menu.home":"Page d'accueil","menu.dashboard":"Tableau de bord","menu.dashboard.indicator":"Analyse des indicateurs","menu.dashboard.community":"communauté des indicateurs","menu.dashboard.analysis":"Analyse de l'IA","menu.dashboard.tradingAssistant":"Assistante commerciale","menu.dashboard.aiTradingAssistant":"Assistant de trading IA","menu.dashboard.signalRobot":"Robot de signal","menu.dashboard.monitor":"Page de surveillance","menu.dashboard.workplace":"établi","menu.form":"page de formulaire","menu.form.basic-form":"forme de base","menu.form.step-form":"formulaire étape par étape","menu.form.step-form.info":"Formulaire étape par étape (remplir les informations de transfert)","menu.form.step-form.confirm":"Formulaire étape par étape (confirmer les informations de transfert)","menu.form.step-form.result":"Formulaire étape par étape (à compléter)","menu.form.advanced-form":"Formulaires avancés","menu.list":"Page de liste","menu.list.table-list":"Formulaire de demande","menu.list.basic-list":"Liste standard","menu.list.card-list":"liste de cartes","menu.list.search-list":"liste de recherche","menu.list.search-list.articles":"Liste de recherche (articles)","menu.list.search-list.projects":"Liste de recherche (projet)","menu.list.search-list.applications":"Liste de recherche (application)","menu.profile":"Page de détails","menu.profile.basic":"Page de détails de base","menu.profile.advanced":"Page de détails avancés","menu.result":"Page de résultats","menu.result.success":"page de réussite","menu.result.fail":"page d'échec","menu.exception":"Page d'exceptions","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"erreur de déclenchement","menu.account":"Page personnelle","menu.account.center":"Centre personnel","menu.account.settings":"paramètres personnels","menu.account.trigger":"Erreur de déclenchement","menu.account.logout":"Se déconnecter","menu.wallet":"mon portefeuille","menu.docs":"Centre de documentation","menu.docs.detail":"Détails du document","menu.header.refreshPage":"actualiser la page","menu.invite.friends":"Inviter des amis","app.setting.pagestyle":"paramètres de style généraux","app.setting.pagestyle.light":"Style de menu lumineux","app.setting.pagestyle.dark":"style de menu sombre","app.setting.pagestyle.realdark":"mode sombre","app.setting.themecolor":"couleur du thème","app.setting.navigationmode":"Mode navigation","app.setting.sidemenu.nav":"Navigation dans la barre latérale","app.setting.topmenu.nav":"Navigation dans la barre supérieure","app.setting.content-width":"largeur de la zone de contenu","app.setting.content-width.tooltip":"Ce paramètre n'est efficace que lorsque [Navigation dans la barre supérieure]","app.setting.content-width.fixed":"Corrigé","app.setting.content-width.fluid":"diffusion en continu","app.setting.fixedheader":"En-tête fixe","app.setting.fixedheader.tooltip":"Configurable lorsqu'il est fixe","app.setting.autoHideHeader":"Masquer l'en-tête lors du défilement","app.setting.fixedsidebar":"Menu latéral fixe","app.setting.sidemenu":"Disposition du menu latéral","app.setting.topmenu":"Disposition du menu supérieur","app.setting.othersettings":"Autres paramètres","app.setting.weakmode":"Mode de faiblesse des couleurs","app.setting.multitab":"Mode multi-onglets","app.setting.copy":"Paramètres de copie","app.setting.loading":"Chargement du thème","app.setting.copyinfo":"Copiez les paramètres avec succès src/config/defaultSettings.js","app.setting.copy.success":"Copie terminée","app.setting.copy.fail":"Échec de la copie","app.setting.theme.switching":"Changer de thème !","app.setting.production.hint":"La barre de configuration est uniquement utilisée pour l'aperçu dans l'environnement de développement et ne sera pas affichée dans l'environnement de production. Veuillez copier et modifier le fichier de configuration manuellement.","app.setting.themecolor.daybreak":"Bleu aube (par défaut)","app.setting.themecolor.dust":"crépuscule","app.setting.themecolor.volcano":"volcan","app.setting.themecolor.sunset":"coucher de soleil","app.setting.themecolor.cyan":"Mingqing","app.setting.themecolor.green":"aurore verte","app.setting.themecolor.geekblue":"bleu geek","app.setting.themecolor.purple":"Jiang Zi","app.setting.tooltip":"Paramètres des pages","user.login.userName":"Nom d'utilisateur","user.login.password":"Mot de passe","user.login.username.placeholder":"Compte : administrateur","user.login.password.placeholder":"Mot de passe : admin ou ant.design","user.login.message-invalid-credentials":"La connexion a échoué, veuillez vérifier votre e-mail et votre code de vérification","user.login.message-invalid-verification-code":"Erreur de code de vérification","user.login.tab-login-credentials":"Connexion par mot de passe du compte","user.login.tab-login-email":"Connexion par e-mail","user.login.tab-login-mobile":"Connexion au numéro de téléphone portable","user.login.captcha.placeholder":"Veuillez saisir le code de vérification graphique","user.login.mobile.placeholder":"Numéro de téléphone portable","user.login.mobile.verification-code.placeholder":"Code de vérification","user.login.email.placeholder":"Veuillez entrer votre adresse e-mail","user.login.email.verification-code.placeholder":"Veuillez entrer le code de vérification","user.login.email.sending":"Le code de vérification est en cours d'envoi...","user.login.email.send-success-title":"Conseils","user.login.email.send-success":"Code de vérification envoyé avec succès, veuillez vérifier votre email","user.login.sms.send-success":"Code de vérification envoyé avec succès, veuillez vérifier le message texte","user.login.remember-me":"Connexion automatique","user.login.forgot-password":"Mot de passe oublié","user.login.sign-in-with":"Autres méthodes de connexion","user.login.signup":"Créer un compte","user.login.login":"Connexion","user.register.register":"S'inscrire","user.register.email.placeholder":"Courriel","user.register.password.placeholder":"Veuillez saisir au moins 6 caractères. Veuillez ne pas utiliser de mots de passe faciles à deviner.","user.register.password.popover-message":"Veuillez saisir au moins 6 caractères. Veuillez ne pas utiliser de mots de passe faciles à deviner.","user.register.confirm-password.placeholder":"Confirmer le mot de passe","user.register.get-verification-code":"Obtenir le code de vérification","user.register.sign-in":"Connectez-vous en utilisant un compte existant","user.register-result.msg":"Votre compte : {email} Inscription réussie","user.register-result.activation-email":"L'e-mail d'activation a été envoyé dans votre boîte mail et est valable 24 heures. Veuillez vous connecter rapidement à votre messagerie et cliquer sur le lien contenu dans l'e-mail pour activer votre compte.","user.register-result.back-home":"Retour à la page d'accueil","user.register-result.view-mailbox":"Vérifiez votre boîte aux lettres","user.email.required":"Veuillez entrer votre adresse e-mail !","user.email.wrong-format":"Le format de l'adresse e-mail est incorrect !","user.userName.required":"Veuillez saisir votre nom de compte ou votre adresse e-mail","user.password.required":"Veuillez entrer votre mot de passe !","user.password.twice.msg":"Les mots de passe saisis deux fois ne correspondent pas !","user.password.strength.msg":"Le mot de passe n'est pas assez fort","user.password.strength.strong":"Force : Forte","user.password.strength.medium":"Force : moyenne","user.password.strength.low":"Force : faible","user.password.strength.short":"Force : trop courte","user.confirm-password.required":"Veuillez confirmer votre mot de passe !","user.phone-number.required":"Veuillez saisir le bon numéro de téléphone portable","user.phone-number.wrong-format":"Le format du numéro de téléphone portable est erroné !","user.verification-code.required":"Veuillez entrer le code de vérification !","user.captcha.required":"Veuillez saisir le code de vérification graphique !","user.login.infos":"QuantDinger est un outil auxiliaire d'analyse boursière multi-agents d'IA et n'a pas de qualifications en conseil en investissement en valeurs mobilières. Tous les résultats d'analyse, scores et avis de référence de la plateforme sont automatiquement générés par l'IA sur la base de données historiques et sont utilisés uniquement à des fins d'apprentissage, de recherche et d'échange technique, et ne constituent aucun conseil d'investissement ou base de prise de décision. L'investissement en actions implique divers risques tels que le risque de marché, le risque de liquidité, le risque politique, etc., qui peuvent entraîner une perte du principal. Les utilisateurs doivent prendre des décisions indépendantes en fonction de leur propre tolérance au risque, et tout comportement d'investissement et conséquences découlant de l'utilisation de cet outil seront à la charge de l'utilisateur. Le marché est risqué et les investissements doivent être prudents.","user.login.tab-login-web3":"Connexion Web3","user.login.web3.tip":"Connexion par signature à l'aide du portefeuille","user.login.web3.connect":"Connectez le portefeuille et connectez-vous","user.login.web3.no-wallet":"Portefeuille non détecté","user.login.web3.no-address":"Adresse du portefeuille non obtenue","user.login.web3.nonce-failed":"Impossible d'obtenir un nombre aléatoire","user.login.web3.verify-failed":"La vérification de la signature a échoué","user.login.web3.success":"Connexion réussie","user.login.web3.failed":"Échec de la connexion au portefeuille","nav.no_wallet":"Portefeuille non détecté","nav.copy":"Copier","nav.copy_success":"Copié avec succès","user.login.oauth.google":"Connectez-vous avec Google","user.login.oauth.github":"Connectez-vous avec GitHub","user.login.oauth.loading":"Redirection vers la page d'autorisation...","user.login.oauth.failed":"Échec de la connexion OAuth","user.login.oauth.get-url-failed":"Échec de l'obtention du lien d'autorisation","user.login.subtitle":"Informations quantitatives sur les marchés mondiaux","user.login.legal.title":"Mentions légales","user.login.legal.view":"Voir les mentions légales","user.login.legal.collapse":"Réduire les mentions légales","user.login.legal.agree":"J'ai lu et j'accepte les mentions légales","user.login.legal.required":"Veuillez d'abord lire et vérifier les mentions légales","user.login.legal.content":"QuantDinger est un outil auxiliaire d'analyse boursière multi-agents d'IA et n'a pas de qualifications en conseil en investissement en valeurs mobilières. Tous les résultats d'analyse, notes et avis de référence de la plateforme sont automatiquement générés par l'IA sur la base de données historiques et sont utilisés uniquement à des fins d'apprentissage, de recherche et d'échange technique, et ne constituent aucun conseil d'investissement ou base de prise de décision. L'investissement en actions implique divers risques tels que le risque de marché, le risque de liquidité, le risque politique, etc., qui peuvent entraîner une perte du principal. Les utilisateurs doivent prendre des décisions indépendantes en fonction de leur propre tolérance au risque, et tout comportement d'investissement et conséquences découlant de l'utilisation de cet outil seront à la charge de l'utilisateur. Le marché est risqué et les investissements doivent être prudents.","user.login.privacy.title":"Politique de confidentialité des utilisateurs","user.login.privacy.view":"Afficher la politique de confidentialité des utilisateurs","user.login.privacy.collapse":"Fermer les conditions de confidentialité des utilisateurs","user.login.privacy.content":"Nous accordons une grande importance à votre vie privée et à la protection de vos données. 1) Portée de la collecte : seules les informations nécessaires à la mise en œuvre de la fonction (telles que l'e-mail, le numéro de téléphone mobile, l'indicatif régional, l'adresse du portefeuille Web3) ainsi que les journaux et informations sur l'appareil nécessaires sont collectés. 2) Objectif d'utilisation : Pour la connexion au compte et la vérification de la sécurité, la fourniture de fonctions de service, le dépannage et les exigences de conformité. 3) Stockage et sécurité : les données sont cryptées et stockées, et les autorisations et mesures de contrôle d'accès nécessaires sont prises pour tenter d'empêcher tout accès non autorisé, toute divulgation ou toute perte. 4) Partage avec des tiers : sauf si les lois et réglementations l'exigent ou si cela est nécessaire à l'exécution des services, vos informations personnelles ne seront pas partagées avec des tiers ; si des services tiers (tels que des portefeuilles, des fournisseurs de services SMS) sont impliqués, ils ne seront traités que dans la mesure minimale nécessaire à la mise en œuvre de la fonction. 5) Cookies/stockage local : utilisés pour le statut de connexion et la maintenance de session nécessaire (tels que les jetons, PHPSESSID), vous pouvez les effacer ou les restreindre dans le navigateur. 6) Droits personnels : Vous pouvez exercer vos droits d'information, de rectification, de suppression, de retrait de consentement, etc. conformément aux lois et règlements. 7) Modifications et avis : lorsque ces conditions seront mises à jour, elles seront affichées bien en évidence sur la page. En continuant à utiliser ce service, vous êtes réputé avoir lu et accepté le contenu mis à jour. Si vous n'acceptez pas ces Conditions ou toute mise à jour de celles-ci, veuillez cesser d'utiliser le Service et nous contacter.","account.basicInfo":"Informations de base","account.id":"Identifiant utilisateur","account.username":"Nom d'utilisateur","account.nickname":"Surnom","account.email":"Courriel","account.mobile":"Numéro de téléphone portable","account.web3address":"adresse du portefeuille","account.pid":"Identifiant du référent","account.level":"Niveau utilisateur","account.money":"équilibre","account.qdtBalance":"Solde QDT","account.score":"Points","account.createtime":"Heure d'inscription","account.inviteLink":"Lien d'invitation","account.recharge":"Recharger","account.rechargeTip":"Veuillez utiliser WeChat ou Alipay pour scanner le code QR ci-dessous pour recharger.","account.qrCodePlaceholder":"Espace réservé au code QR (émulation)","account.rechargeAmount":"Montant de la recharge","account.enterAmount":"Veuillez saisir le montant de la recharge","account.rechargeHint":"Montant minimum du dépôt : 1 QDT","account.confirmRecharge":"Confirmer la recharge","account.enterValidAmount":"Veuillez saisir un montant de recharge valide","account.rechargeSuccess":"Recharge réussie ! Déposé {montant} QDT","account.settings.menuMap.basic":"Paramètres de base","account.settings.menuMap.security":"Paramètres de sécurité","account.settings.menuMap.notification":"Notification de nouveau message","account.settings.menuMap.moneyLog":"Détails du fonds","account.moneyLog.empty":"Aucun détail sur le fonds pour l'instant","account.moneyLog.total":"{total} enregistrements au total","account.moneyLog.type.purchase":"indicateur d'achat","account.moneyLog.type.recharge":"Recharger","account.moneyLog.type.refund":"Remboursement","account.moneyLog.type.reward":"récompense","account.moneyLog.type.income":"Revenu de l'indicateur","account.moneyLog.type.commission":"Frais de gestion de la plateforme","wallet.balance":"Solde QDT","wallet.recharge":"Recharger","wallet.withdraw":"Retirer de l'argent","wallet.filter":"Filtrer","wallet.reset":"réinitialiser","wallet.totalRecharge":"Recharge accumulée","wallet.totalWithdraw":"Retraits cumulés","wallet.totalIncome":"Revenu cumulé","wallet.records":"Enregistrements de transactions et détails des fonds","wallet.tradingRecords":"historique des transactions","wallet.moneyLog":"Détails du fonds","wallet.rechargeTip":"Veuillez utiliser WeChat ou Alipay pour scanner le code QR ci-dessous pour recharger.","wallet.qrCodePlaceholder":"Espace réservé au code QR (émulation)","wallet.rechargeAmount":"Montant de la recharge","wallet.enterAmount":"Veuillez saisir le montant de la recharge","wallet.rechargeHint":"Montant minimum du dépôt : 1 QDT","wallet.confirmRecharge":"Confirmer la recharge","wallet.enterValidAmount":"Veuillez saisir un montant de recharge valide","wallet.rechargeSuccess":"Recharge réussie ! Déposé {montant} QDT","wallet.rechargeFailed":"La recharge a échoué","wallet.withdrawTip":"Veuillez saisir le montant du retrait et l'adresse de retrait","wallet.withdrawAmount":"Montant du retrait","wallet.enterWithdrawAmount":"Veuillez saisir le montant du retrait","wallet.withdrawHint":"Montant minimum de retrait : 1 QDT","wallet.withdrawAddress":"Adresse de retrait (facultatif)","wallet.enterWithdrawAddress":"Veuillez saisir l'adresse de retrait","wallet.confirmWithdraw":"Confirmer le retrait","wallet.enterValidWithdrawAmount":"Veuillez saisir un montant de retrait valide","wallet.insufficientBalance":"Solde insuffisant","wallet.withdrawSuccess":"Retrait réussi ! Retiré {montant} QDT","wallet.withdrawFailed":"Échec du retrait","wallet.noTradingRecords":"Aucun enregistrement de transaction pour l'instant","wallet.noMoneyLog":"Aucun détail sur le fonds pour l'instant","wallet.loadTradingRecordsFailed":"Échec du chargement des enregistrements de transaction","wallet.loadMoneyLogFailed":"Échec du chargement des détails du fonds","wallet.moneyLogTotal":"{total} enregistrements au total","wallet.moneyLogTypeTitle":"Tapez","wallet.moneyLogType.all":"Tous types","wallet.table.time":"temps","wallet.table.type":"Tapez","wallet.table.price":"prix","wallet.table.amount":"Quantité","wallet.table.money":"Montant","wallet.table.balance":"équilibre","wallet.table.memo":"Remarques","wallet.table.value":"valeur","wallet.table.profit":"Profits et pertes","wallet.table.commission":"frais de traitement","wallet.table.total":"{total} enregistrements au total","wallet.tradeType.buy":"acheter","wallet.tradeType.sell":"vendre","wallet.tradeType.liquidation":"liquidation forcée","wallet.tradeType.openLong":"Ouvert longtemps","wallet.tradeType.addLong":"Gadot","wallet.tradeType.closeLong":"Pinduo","wallet.tradeType.closeLongStop":"Stop loss et long","wallet.tradeType.closeLongProfit":"Prenez des bénéfices et gagnez plus de niveaux","wallet.tradeType.openShort":"Ouvert court","wallet.tradeType.addShort":"ajouter un court","wallet.tradeType.closeShort":"vide","wallet.tradeType.closeShortStop":"Arrêter la perte","wallet.tradeType.closeShortProfit":"Prenez des bénéfices et clôturez à découvert","wallet.moneyLogType.purchase":"indicateur d'achat","wallet.moneyLogType.recharge":"Recharger","wallet.moneyLogType.withdraw":"Retirer de l'argent","wallet.moneyLogType.refund":"Remboursement","wallet.moneyLogType.reward":"récompense","wallet.moneyLogType.income":"revenu","wallet.moneyLogType.commission":"frais de traitement","wallet.web3Address.required":"Veuillez d'abord remplir l'adresse du portefeuille Web3","wallet.web3Address.requiredDescription":"Avant de recharger, vous devez lier l'adresse de votre portefeuille Web3 pour recevoir la recharge.","wallet.web3Address.placeholder":"Veuillez saisir l'adresse de votre portefeuille Web3 (en commençant par 0x)","wallet.web3Address.save":"Enregistrer l'adresse du portefeuille","wallet.web3Address.saveSuccess":"Adresse du portefeuille enregistrée avec succès","wallet.web3Address.saveFailed":"Échec de l'enregistrement de l'adresse du portefeuille","wallet.web3Address.invalidFormat":"Veuillez saisir une adresse de portefeuille Web3 valide (format Ethereum : 42 caractères commençant par 0x, ou format TRC20 : 34 caractères commençant par T)","wallet.selectCoin":"Sélectionnez la devise","wallet.selectChain":"chaîne de sélection","wallet.chain.eth":"ETH(ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"BSC","wallet.targetQdtAmount":"Le montant de QDT que vous souhaitez échanger (facultatif)","wallet.targetQdtAmount.placeholder":"Veuillez saisir la quantité de QDT que vous souhaitez utiliser, le prix actuel du QDT : {price} USDT","wallet.targetQdtAmount.requiredUsdt":"Besoin de recharge : {amount} USDT","wallet.rechargeAddress":"Adresse de recharge","wallet.copyAddress":"Copier","wallet.copySuccess":"Copiez avec succès !","wallet.copyFailed":"Échec de la copie, veuillez copier manuellement","wallet.rechargeAddressHint":"Veuillez vous assurer d'utiliser {chain} pour déposer {coin} à cette adresse","wallet.qdtPrice.loading":"Chargement...","wallet.rechargeTip.new":"Veuillez sélectionner la devise et la chaîne, puis scannez le code QR ci-dessous pour recharger","wallet.exchangeRate":"1 QDT ≈ {taux} USDT","wallet.withdrawableAmount":"Montant des liquidités disponibles","wallet.totalBalance":"solde total","wallet.insufficientWithdrawable":"Le montant en espèces pouvant être retiré est insuffisant. Le montant actuel qui peut être retiré est : {amount} QDT","wallet.withdrawAddressRequired":"Veuillez saisir l'adresse de retrait","wallet.withdrawAddressHint":"Veuillez vous assurer que l'adresse est correcte. Après le retrait, il ne peut être révoqué.","wallet.withdrawSubmitSuccess":"Demande de retrait soumise avec succès, veuillez attendre l'examen","menu.footer.contactUs":"Contactez-nous","menu.footer.getSupport":"Obtenir de l'aide","menu.footer.socialAccounts":"compte social","menu.footer.userAgreement":"Contrat d'utilisation","menu.footer.privacyPolicy":"politique de confidentialité","menu.footer.support":"Assistance","menu.footer.featureRequest":"Demande de fonctionnalité","menu.footer.email":"Courriel","menu.footer.liveChat":"Chat en direct 24h/24 et 7j/7","dashboard.analysis.title":"Analyse multidimensionnelle","dashboard.analysis.subtitle":"Plateforme d'analyse financière complète basée sur l'IA","dashboard.analysis.selectSymbol":"Sélectionnez ou saisissez le code sous-jacent","dashboard.analysis.selectModel":"Sélectionnez le modèle","dashboard.analysis.startAnalysis":"Démarrer l'analyse","dashboard.analysis.history":"Histoire","dashboard.analysis.tab.overview":"analyse complète","dashboard.analysis.tab.fundamental":"Fondamentaux","dashboard.analysis.tab.technical":"technologie","dashboard.analysis.tab.news":"Actualités","dashboard.analysis.tab.sentiment":"émotions","dashboard.analysis.tab.risk":"risque","dashboard.analysis.tab.debate":"Le débat long-court","dashboard.analysis.tab.decision":"décision finale","dashboard.analysis.empty.selectSymbol":"Sélectionnez une cible pour démarrer l'analyse","dashboard.analysis.empty.selectSymbolDesc":"Sélectionnez dans la liste d'actions auto-sélectionnée ou entrez le code sous-jacent pour obtenir un rapport d'analyse IA multidimensionnel","dashboard.analysis.empty.startAnalysis":'Cliquez sur le bouton "Démarrer l\'analyse" pour effectuer une analyse multidimensionnelle',"dashboard.analysis.empty.startAnalysisDesc":"Nous vous fournirons une analyse complète portant sur plusieurs dimensions telles que les fondamentaux, la technologie, l'actualité, le sentiment et le risque.","dashboard.analysis.empty.noData":"Il n'y a actuellement aucune donnée d'analyse {type}, veuillez d'abord effectuer une analyse complète","dashboard.analysis.empty.noWatchlist":"Il n'y a actuellement aucun titre auto-sélectionné","dashboard.analysis.empty.noHistory":"Pas encore d'historique","dashboard.analysis.empty.watchlistHint":"Il n'y a actuellement aucun stock auto-sélectionné, veuillez d'abord","dashboard.analysis.empty.noDebateData":"Aucune donnée de débat pour l'instant","dashboard.analysis.empty.noDecisionData":"Aucune donnée de décision pour l'instant","dashboard.analysis.empty.selectAgent":"Veuillez sélectionner un agent pour afficher les résultats de l'analyse","dashboard.analysis.loading.analyzing":"Analyse, veuillez patienter...","dashboard.analysis.loading.fundamental":"Analyser les données fondamentales...","dashboard.analysis.loading.technical":"Analyse des indicateurs techniques...","dashboard.analysis.loading.news":"Analyser les données d'actualité...","dashboard.analysis.loading.sentiment":"Analyser le sentiment du marché...","dashboard.analysis.loading.risk":"Évaluer le risque...","dashboard.analysis.loading.debate":"Le débat long-court est en cours...","dashboard.analysis.loading.decision":"Générer la décision finale...","dashboard.analysis.score.overall":"Note globale","dashboard.analysis.score.recommendation":"conseil en investissement","dashboard.analysis.score.confidence":"Confiance","dashboard.analysis.dimension.fundamental":"Fondamentaux","dashboard.analysis.dimension.technical":"technologie","dashboard.analysis.dimension.news":"Actualités","dashboard.analysis.dimension.sentiment":"émotions","dashboard.analysis.dimension.risk":"risque","dashboard.analysis.card.dimensionScores":"Notes pour chaque dimension","dashboard.analysis.card.overviewReport":"Rapport d'analyse complet","dashboard.analysis.card.financialMetrics":"indicateurs financiers","dashboard.analysis.card.fundamentalReport":"Rapport d'analyse fondamentale","dashboard.analysis.card.technicalIndicators":"Indicateurs techniques","dashboard.analysis.card.technicalReport":"rapport d'analyse technique","dashboard.analysis.card.newsList":"Actualités connexes","dashboard.analysis.card.newsReport":"Rapport d'analyse de l'actualité","dashboard.analysis.card.sentimentIndicators":"indicateur de sentiment","dashboard.analysis.card.sentimentReport":"Rapport d'analyse des sentiments","dashboard.analysis.card.riskMetrics":"indicateurs de risque","dashboard.analysis.card.riskReport":"rapport d'évaluation des risques","dashboard.analysis.card.bullView":"Vue haussière (Taureau)","dashboard.analysis.card.bearView":"Vue baissière (ours)","dashboard.analysis.card.researchConclusion":"Conclusion du chercheur","dashboard.analysis.card.traderPlan":"plan de commerçant","dashboard.analysis.card.riskDebate":"Débat en commission des risques","dashboard.analysis.card.finalDecision":"Décision finale","dashboard.analysis.card.tradePlanDetail":"Détails du plan de trading","dashboard.analysis.tradingPlan.entry_price":"Prix d'entrée","dashboard.analysis.tradingPlan.position_size":"Taille du poste","dashboard.analysis.tradingPlan.stop_loss":"arrêter les pertes","dashboard.analysis.tradingPlan.take_profit":"Profiter","dashboard.analysis.label.confidence":"Confiance","dashboard.analysis.label.keyPoints":"points essentiels","dashboard.analysis.label.riskWarning":"Avertissement de risque","dashboard.analysis.risk.risky":"Risqué","dashboard.analysis.risk.neutral":"Point de vue neutre (Neutre)","dashboard.analysis.risk.safe":"Vue conservatrice (sûr)","dashboard.analysis.risk.conclusion":"Conclusion","dashboard.analysis.feature.fundamental":"analyse fondamentale","dashboard.analysis.feature.technical":"analyse technique","dashboard.analysis.feature.news":"analyse de l'actualité","dashboard.analysis.feature.sentiment":"analyse des sentiments","dashboard.analysis.feature.risk":"évaluation des risques","dashboard.analysis.watchlist.title":"Ma sélection de titres","dashboard.analysis.watchlist.add":"ajouter","dashboard.analysis.watchlist.addStock":"ajouter du stock","dashboard.analysis.modal.addStock.title":"Ajouter des actions facultatives","dashboard.analysis.modal.addStock.confirm":"D'accord","dashboard.analysis.modal.addStock.cancel":"Annuler","dashboard.analysis.modal.addStock.market":"type de marché","dashboard.analysis.modal.addStock.marketPlaceholder":"Veuillez sélectionner un marché","dashboard.analysis.modal.addStock.marketRequired":"Veuillez sélectionner le type de marché","dashboard.analysis.modal.addStock.symbol":"Code de stock","dashboard.analysis.modal.addStock.symbolPlaceholder":"Par exemple : AAPL, TSLA, GOOGL, 000001, BTC","dashboard.analysis.modal.addStock.symbolRequired":"Veuillez entrer le code de stock","dashboard.analysis.modal.addStock.searchPlaceholder":"Rechercher le code ou le nom de la cible","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"Recherchez ou saisissez le code sous-jacent (par exemple : AAPL, BTC/USDT, EUR/USD)","dashboard.analysis.modal.addStock.searchOrInputHint":"Prend en charge la recherche d'objets dans la base de données ou la saisie directe du code (le système obtiendra automatiquement le nom)","dashboard.analysis.modal.addStock.search":"Rechercher","dashboard.analysis.modal.addStock.searchResults":"Résultats de la recherche","dashboard.analysis.modal.addStock.hotSymbols":"Cibles populaires","dashboard.analysis.modal.addStock.noHotSymbols":"Aucune cible populaire pour l'instant","dashboard.analysis.modal.addStock.selectedSymbol":"Sélectionné","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"Veuillez d'abord sélectionner une cible","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"Veuillez sélectionner une cible ou saisir d'abord le code cible","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"Veuillez entrer le code cible","dashboard.analysis.modal.addStock.pleaseSelectMarket":"Veuillez d'abord sélectionner le type de marché","dashboard.analysis.modal.addStock.searchFailed":"La recherche a échoué, veuillez réessayer plus tard","dashboard.analysis.modal.addStock.noSearchResults":"Aucune cible correspondante trouvée","dashboard.analysis.modal.addStock.willAutoFetchName":"Le système obtiendra automatiquement le nom","dashboard.analysis.modal.addStock.addDirectly":"Ajouter directement","dashboard.analysis.modal.addStock.nameWillBeFetched":"Le nom sera récupéré automatiquement une fois ajouté","dashboard.analysis.market.USStock":"Actions américaines","dashboard.analysis.market.Crypto":"crypto-monnaie","dashboard.analysis.market.Forex":"Forex","dashboard.analysis.market.Futures":"Contrats à terme","dashboard.analysis.modal.history.title":"Enregistrements d'analyse historique","dashboard.analysis.modal.history.viewResult":"Afficher les résultats","dashboard.analysis.modal.history.completeTime":"temps d'achèvement","dashboard.analysis.modal.history.error":"Erreur","dashboard.analysis.status.pending":"En attente","dashboard.analysis.status.processing":"Traitement","dashboard.analysis.status.completed":"Terminé","dashboard.analysis.status.failed":"échoué","dashboard.analysis.message.selectSymbol":"Veuillez d'abord sélectionner la cible","dashboard.analysis.message.taskCreated":"La tâche d'analyse a été créée et est exécutée en arrière-plan...","dashboard.analysis.message.analysisComplete":"Analyse terminée","dashboard.analysis.message.analysisCompleteCache":"Analyse terminée (à l'aide des données mises en cache)","dashboard.analysis.message.analysisFailed":"L'analyse a échoué, veuillez réessayer plus tard","dashboard.analysis.message.addStockSuccess":"Ajouté avec succès","dashboard.analysis.message.addStockFailed":"L'ajout a échoué","dashboard.analysis.message.removeStockSuccess":"Supprimé avec succès","dashboard.analysis.message.removeStockFailed":"Échec de la suppression","dashboard.analysis.message.resumingAnalysis":"Reprise de la tâche d'analyse...","dashboard.analysis.message.deleteSuccess":"Supprimé avec succès","dashboard.analysis.message.deleteFailed":"Échec de la suppression","dashboard.analysis.modal.history.delete":"Supprimer","dashboard.analysis.modal.history.deleteConfirm":"Êtes-vous sûr de vouloir supprimer cet enregistrement d'analyse ?","dashboard.analysis.test":"Magasin n° {no}, route Gongzhuan","dashboard.analysis.introduce":"Description de l'indicateur","dashboard.analysis.total-sales":"ventes totales","dashboard.analysis.day-sales":"Ventes quotidiennes moyennes¥","dashboard.analysis.visits":"Visites","dashboard.analysis.visits-trend":"Tendances du trafic","dashboard.analysis.visits-ranking":"Classement des visites en magasin","dashboard.analysis.day-visits":"Visites quotidiennes","dashboard.analysis.week":"Hebdomadaire, année sur année","dashboard.analysis.day":"Année après année","dashboard.analysis.payments":"Nombre de paiements","dashboard.analysis.conversion-rate":"taux de conversion","dashboard.analysis.operational-effect":"Effets sur l'activité opérationnelle","dashboard.analysis.sales-trend":"tendances des ventes","dashboard.analysis.sales-ranking":"Classement des ventes en magasin","dashboard.analysis.all-year":"Toute l'année","dashboard.analysis.all-month":"ce mois-ci","dashboard.analysis.all-week":"cette semaine","dashboard.analysis.all-day":"aujourd'hui","dashboard.analysis.search-users":"Nombre d'utilisateurs de recherche","dashboard.analysis.per-capita-search":"Recherches par habitant","dashboard.analysis.online-top-search":"Recherches populaires en ligne","dashboard.analysis.the-proportion-of-sales":"Proportion de la catégorie de ventes","dashboard.analysis.dropdown-option-one":"Première opération","dashboard.analysis.dropdown-option-two":"Opération 2","dashboard.analysis.channel.all":"Toutes les chaînes","dashboard.analysis.channel.online":"en ligne","dashboard.analysis.channel.stores":"magasin","dashboard.analysis.sales":"ventes","dashboard.analysis.traffic":"flux de passagers","dashboard.analysis.table.rank":"Classement","dashboard.analysis.table.search-keyword":"Rechercher des mots-clés","dashboard.analysis.table.users":"Nombre d'utilisateurs","dashboard.analysis.table.weekly-range":"Augmentation hebdomadaire","dashboard.indicator.selectSymbol":"Sélectionnez ou saisissez le code sous-jacent","dashboard.indicator.emptyWatchlistHint":"Il n'y a actuellement aucun titre auto-sélectionné, veuillez d'abord les ajouter","dashboard.indicator.hint.selectSymbol":"Veuillez sélectionner une cible pour démarrer l'analyse","dashboard.indicator.hint.selectSymbolDesc":"Sélectionnez ou entrez un code boursier dans la zone de recherche ci-dessus pour afficher les graphiques K-line et les indicateurs techniques.","dashboard.indicator.retry":"Réessayez","dashboard.indicator.panel.title":"Indicateurs techniques","dashboard.indicator.panel.realtimeOn":"Désactivez les mises à jour en temps réel","dashboard.indicator.panel.realtimeOff":"Activer les mises à jour en temps réel","dashboard.indicator.panel.themeLight":"Passer au thème sombre","dashboard.indicator.panel.themeDark":"Passer au thème clair","dashboard.indicator.section.enabled":"Activé","dashboard.indicator.section.added":"Indicateurs que j'ai ajoutés","dashboard.indicator.section.custom":"Indicateurs créés par vous-même","dashboard.indicator.section.bought":"Indicateurs que j'ai achetés","dashboard.indicator.section.myCreated":"Indicateurs que j'ai créés","dashboard.indicator.empty":"Il n'y a pas encore d'indicateur, veuillez d'abord ajouter ou créer un indicateur","dashboard.indicator.buy":"indicateur d'achat","dashboard.indicator.action.start":"commencer","dashboard.indicator.action.stop":"Fermer","dashboard.indicator.action.edit":"Modifier","dashboard.indicator.action.delete":"Supprimer","dashboard.indicator.action.backtest":"backtest","dashboard.indicator.status.normal":"normal","dashboard.indicator.status.normalPermanent":"Normal (valable en permanence)","dashboard.indicator.status.expired":"Expiré","dashboard.indicator.expiry.permanent":"Valable en permanence","dashboard.indicator.expiry.noExpiry":"Pas de délai d'expiration","dashboard.indicator.expiry.expired":"Expiré : {date}","dashboard.indicator.expiry.expiresOn":"Heure d'expiration : {date}","dashboard.indicator.delete.confirmTitle":"Confirmer la suppression","dashboard.indicator.delete.confirmContent":'Êtes-vous sûr de vouloir supprimer l\'indicateur "{name}" ? Cette opération est irréversible.',"dashboard.indicator.delete.confirmOk":"Supprimer","dashboard.indicator.delete.confirmCancel":"Annuler","dashboard.indicator.delete.success":"Supprimer avec succès","dashboard.indicator.delete.failed":"Échec de la suppression","dashboard.indicator.save.success":"Enregistré avec succès","dashboard.indicator.save.failed":"Échec de l'enregistrement","dashboard.indicator.error.loadWatchlistFailed":"Échec du chargement des stocks facultatifs","dashboard.indicator.error.chartNotReady":"Le composant graphique n'est pas initialisé. Veuillez d'abord sélectionner la cible et attendre que le graphique se charge.","dashboard.indicator.error.chartMethodNotReady":"La méthode du composant graphique n'est pas prête, veuillez réessayer plus tard","dashboard.indicator.error.chartExecuteNotReady":"La méthode d'exécution du composant graphique n'est pas prête, veuillez réessayer plus tard","dashboard.indicator.error.parseFailed":"Impossible d'analyser le code Python","dashboard.indicator.error.parseFailedCheck":"Impossible d'analyser le code Python, veuillez vérifier le format du code","dashboard.indicator.error.addIndicatorFailed":"Échec de l'ajout de l'indicateur","dashboard.indicator.error.runIndicatorFailed":"L'indicateur de fonctionnement a échoué","dashboard.indicator.error.pleaseLogin":"Veuillez d'abord vous connecter","dashboard.indicator.error.loadDataFailed":"Le chargement des données a échoué","dashboard.indicator.error.loadDataFailedDesc":"Veuillez vérifier la connexion réseau","dashboard.indicator.error.pythonEngineFailed":"Le moteur Python n'a pas pu se charger et la fonction d'indicateur peut ne pas être disponible.","dashboard.indicator.error.chartInitFailed":"L'initialisation du graphique a échoué","dashboard.indicator.warning.enterCode":"Veuillez d'abord saisir le code de l'indicateur","dashboard.indicator.warning.pyodideLoadFailed":"Le moteur Python n'a pas pu se charger","dashboard.indicator.warning.pyodideLoadFailedDesc":"Cette fonctionnalité n'est pas disponible dans votre région ou environnement réseau actuel","dashboard.indicator.warning.chartNotInitialized":"Le graphique n'est pas initialisé et l'outil de dessin au trait ne peut pas être utilisé.","dashboard.indicator.success.runIndicator":"L'indicateur s'exécute avec succès","dashboard.indicator.success.clearDrawings":"Tous les dessins au trait effacés","dashboard.indicator.sma":"SMA (combinaison de moyenne mobile)","dashboard.indicator.ema":"EMA (combinaison de moyennes mobiles exponentielles)","dashboard.indicator.rsi":"RSI (force relative)","dashboard.indicator.macd":"MACD","dashboard.indicator.bb":"Bandes de Bollinger","dashboard.indicator.atr":"ATR (plage réelle moyenne)","dashboard.indicator.cci":"CCI (indice des canaux de matières premières)","dashboard.indicator.williams":"Williams %R (indicateur Williams)","dashboard.indicator.mfi":"IMF (indice de flux monétaire)","dashboard.indicator.adx":"ADX (indice de tendance moyen)","dashboard.indicator.obv":"OBV (vague d'énergie)","dashboard.indicator.adosc":"ADOSC (oscillateur d'accumulation/répartition)","dashboard.indicator.ad":"AD (ligne d'accumulation/distribution)","dashboard.indicator.kdj":"KDJ (indicateur stochastique)","dashboard.indicator.signal.buy":"ACHETER","dashboard.indicator.signal.sell":"VENDRE","dashboard.indicator.signal.supertrendBuy":"Acheter SuperTrend","dashboard.indicator.signal.supertrendSell":"Vente SuperTrend","dashboard.indicator.chart.kline":"Ligne K","dashboard.indicator.chart.volume":"Volume","dashboard.indicator.chart.uptrend":"Tendance à la hausse","dashboard.indicator.chart.downtrend":"Tendance à la baisse","dashboard.indicator.tooltip.time":"temps","dashboard.indicator.tooltip.open":"ouvert","dashboard.indicator.tooltip.close":"recevoir","dashboard.indicator.tooltip.high":"haut","dashboard.indicator.tooltip.low":"faible","dashboard.indicator.tooltip.volume":"Volume","dashboard.indicator.drawing.line":"segment de ligne","dashboard.indicator.drawing.horizontalLine":"ligne horizontale","dashboard.indicator.drawing.verticalLine":"ligne verticale","dashboard.indicator.drawing.ray":"rayon","dashboard.indicator.drawing.straightLine":"ligne droite","dashboard.indicator.drawing.parallelLine":"lignes parallèles","dashboard.indicator.drawing.priceLine":"ligne de prix","dashboard.indicator.drawing.priceChannel":"canal de prix","dashboard.indicator.drawing.fibonacciLine":"Lignes de Fibonacci","dashboard.indicator.drawing.measure":"Mesure","dashboard.indicator.drawing.clearAll":"Effacer tous les dessins au trait","dashboard.indicator.market.USStock":"Actions américaines","dashboard.indicator.market.Crypto":"crypto-monnaie","dashboard.indicator.market.Forex":"Forex","dashboard.indicator.market.Futures":"Contrats à terme","dashboard.indicator.create":"Créer un indicateur","dashboard.indicator.editor.title":"Créer/modifier des indicateurs","dashboard.indicator.editor.name":"Nom de l'indicateur","dashboard.indicator.editor.nameRequired":"Veuillez saisir le nom de l'indicateur","dashboard.indicator.editor.namePlaceholder":"Veuillez saisir le nom de l'indicateur","dashboard.indicator.editor.description":"Description de l'indicateur","dashboard.indicator.editor.descriptionPlaceholder":"Veuillez saisir une description de l'indicateur (facultatif)","dashboard.indicator.editor.code":"Code Python","dashboard.indicator.editor.codeRequired":"Veuillez entrer le code de l'indicateur","dashboard.indicator.editor.codePlaceholder":"Veuillez saisir le code Python","dashboard.indicator.editor.run":"courir","dashboard.indicator.editor.runHint":"Cliquez sur le bouton Exécuter pour prévisualiser l'effet de l'indicateur sur le graphique K-line","dashboard.indicator.editor.guide":"Guide de développement","dashboard.indicator.editor.guideTitle":"Guide de développement d'indicateurs Python","dashboard.indicator.editor.save":"enregistrer","dashboard.indicator.editor.cancel":"Annuler","dashboard.indicator.editor.unnamed":"Indicateur sans nom","dashboard.indicator.editor.publishToCommunity":"Publier sur la communauté","dashboard.indicator.editor.publishToCommunityHint":"Une fois publié, les autres utilisateurs peuvent visualiser et utiliser votre indicateur dans la communauté","dashboard.indicator.editor.indicatorType":"Type d'indicateur","dashboard.indicator.editor.indicatorTypeRequired":"Veuillez sélectionner le type d'indicateur","dashboard.indicator.editor.indicatorTypePlaceholder":"Veuillez sélectionner le type d'indicateur","dashboard.indicator.editor.previewImage":"Aperçu","dashboard.indicator.editor.uploadImage":"Télécharger des photos","dashboard.indicator.editor.previewImageHint":"Taille recommandée : 800 x 400, pas plus de 2 Mo","dashboard.indicator.editor.pricing":"Prix de vente (QDT)","dashboard.indicator.editor.pricingType.free":"gratuit","dashboard.indicator.editor.pricingType.permanent":"permanent","dashboard.indicator.editor.pricingType.monthly":"paiement mensuel","dashboard.indicator.editor.price":"prix","dashboard.indicator.editor.priceRequired":"Veuillez entrer le prix","dashboard.indicator.editor.pricePlaceholder":"Veuillez entrer le prix","dashboard.indicator.editor.pricingHint":"Bien que le prix des indicateurs gratuits soit de 0, la plateforme vous récompensera (QDT) en fonction de votre utilisation de l'indicateur et de votre taux d'éloges.","dashboard.indicator.editor.aiGenerate":"Génération intelligente","dashboard.indicator.editor.aiPromptPlaceholder":"Dites-moi vos idées et je générerai le code de l'indicateur Python pour vous","dashboard.indicator.editor.aiGenerateBtn":"Code généré par l'IA","dashboard.indicator.editor.aiPromptRequired":"Veuillez entrer vos pensées","dashboard.indicator.editor.aiGenerateSuccess":"Génération de code réussie","dashboard.indicator.editor.aiGenerateError":"Échec de la génération du code, veuillez réessayer plus tard","dashboard.indicator.backtest.title":"Backtest des indicateurs","dashboard.indicator.backtest.config":"Paramètres de backtest","dashboard.indicator.backtest.startDate":"date de début","dashboard.indicator.backtest.endDate":"date de fin","dashboard.indicator.backtest.selectStartDate":"Sélectionnez la date de début","dashboard.indicator.backtest.selectEndDate":"Sélectionnez la date de fin","dashboard.indicator.backtest.startDateRequired":"Veuillez sélectionner une date de début","dashboard.indicator.backtest.endDateRequired":"Veuillez sélectionner une date de fin","dashboard.indicator.backtest.initialCapital":"Capital initial","dashboard.indicator.backtest.initialCapitalRequired":"Veuillez saisir les fonds initiaux","dashboard.indicator.backtest.commission":"Frais de traitement","dashboard.indicator.backtest.leverage":"Ratio de levier","dashboard.indicator.backtest.tradeDirection":"Orientation commerciale","dashboard.indicator.backtest.longOnly":"Allez-y longtemps","dashboard.indicator.backtest.shortOnly":"court","dashboard.indicator.backtest.both":"Bidirectionnel","dashboard.indicator.backtest.run":"Commencer le backtest","dashboard.indicator.backtest.rerun":"Backtester à nouveau","dashboard.indicator.backtest.close":"Fermer","dashboard.indicator.backtest.running":"Backtest des indicateurs en cours...","dashboard.indicator.backtest.results":"Résultats du backtest","dashboard.indicator.backtest.totalReturn":"rendement total","dashboard.indicator.backtest.annualReturn":"revenu annualisé","dashboard.indicator.backtest.maxDrawdown":"prélèvement maximum","dashboard.indicator.backtest.sharpeRatio":"Rapport de netteté","dashboard.indicator.backtest.winRate":"taux de réussite","dashboard.indicator.backtest.profitFactor":"ratio profits/pertes","dashboard.indicator.backtest.totalTrades":"Nombre de transactions","dashboard.indicator.totalReturn":"rendement total","dashboard.indicator.annualReturn":"taux de rendement annualisé","dashboard.indicator.maxDrawdown":"prélèvement maximum","dashboard.indicator.sharpeRatio":"Rapport de netteté","dashboard.indicator.winRate":"taux de réussite","dashboard.indicator.profitFactor":"ratio profits/pertes","dashboard.indicator.totalTrades":"nombre total de transactions","dashboard.indicator.backtest.totalCommission":"frais de traitement totaux","dashboard.indicator.backtest.equityCurve":"courbe des taux","dashboard.indicator.backtest.strategy":"Revenu de l'indicateur","dashboard.indicator.backtest.benchmark":"Rendement de référence","dashboard.indicator.backtest.tradeHistory":"historique des transactions","dashboard.indicator.backtest.tradeTime":"temps","dashboard.indicator.backtest.tradeType":"Tapez","dashboard.indicator.backtest.buy":"acheter","dashboard.indicator.backtest.sell":"vendre","dashboard.indicator.backtest.liquidation":"Liquidation","dashboard.indicator.backtest.openLong":"Ouvert longtemps","dashboard.indicator.backtest.closeLong":"Pinduo","dashboard.indicator.backtest.closeLongStop":"Près du long (stop loss)","dashboard.indicator.backtest.closeLongProfit":"Fermez davantage (prenez des bénéfices)","dashboard.indicator.backtest.addLong":"Ajouter une position longue","dashboard.indicator.backtest.openShort":"Ouvert court","dashboard.indicator.backtest.closeShort":"vide","dashboard.indicator.backtest.closeShortStop":"Fermer (stopper la perte)","dashboard.indicator.backtest.closeShortProfit":"Fermer (prendre des bénéfices)","dashboard.indicator.backtest.addShort":"Ajouter une position courte","dashboard.indicator.backtest.price":"prix","dashboard.indicator.backtest.amount":"Quantité","dashboard.indicator.backtest.balance":"Solde du compte","dashboard.indicator.backtest.profit":"Profits et pertes","dashboard.indicator.backtest.success":"Backtest terminé","dashboard.indicator.backtest.failed":"Échec du backtest, veuillez réessayer plus tard","dashboard.indicator.backtest.noIndicatorCode":"Il n'y a pas de code backtestable pour cet indicateur","dashboard.indicator.backtest.noSymbol":"Veuillez d'abord sélectionner la cible de la transaction","dashboard.indicator.backtest.dateRangeExceeded":"La plage de temps du backtest dépasse la limite : {timeframe} la période peut être backtestée au maximum {maxRange}","dashboard.indicator.backtest.dateRangeExceededDays":"Backtest range exceeds limit: {timeframe} max {maxRange} ({maxDays} days)","dashboard.indicator.backtest.metaLine":"Symbol: {symbol} | Market: {market} | Timeframe: {timeframe}","dashboard.indicator.backtest.savedRunId":"Backtest saved. Run ID: {id}","dashboard.indicator.backtest.prev":"Previous","dashboard.indicator.backtest.next":"Next","dashboard.indicator.backtest.steps.strategy.title":"Strategy","dashboard.indicator.backtest.steps.strategy.desc":"Position sizing & risk controls","dashboard.indicator.backtest.steps.trading.title":"Trading settings","dashboard.indicator.backtest.steps.trading.desc":"Time range, capital, fees, leverage","dashboard.indicator.backtest.steps.results.title":"Results","dashboard.indicator.backtest.steps.results.desc":"Backtest output","dashboard.indicator.backtest.panel.risk":"Risk management (SL/TP/Trailing)","dashboard.indicator.backtest.panel.scale":"Scale in / DCA (trend & mean-reversion)","dashboard.indicator.backtest.panel.reduce":"Reduce position (trend & adverse)","dashboard.indicator.backtest.panel.position":"Position sizing","dashboard.indicator.backtest.field.stopLossPct":"Stop Loss (%)","dashboard.indicator.backtest.field.takeProfitPct":"Take Profit (%)","dashboard.indicator.backtest.field.trailingEnabled":"Trailing stop / take profit","dashboard.indicator.backtest.field.trailingStopPct":"Trailing drawdown (%)","dashboard.indicator.backtest.field.trailingActivationPct":"Trailing activation (%)","dashboard.indicator.backtest.field.slippage":"Slippage (%)","dashboard.indicator.backtest.field.trendAddEnabled":"Trend-following scale-in","dashboard.indicator.backtest.field.dcaAddEnabled":"Mean-reversion DCA","dashboard.indicator.backtest.field.trendAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.dcaAddStepPct":"DCA trigger (%)","dashboard.indicator.backtest.field.trendAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.dcaAddSizePct":"DCA size (% of capital)","dashboard.indicator.backtest.field.trendAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.dcaAddMaxTimes":"Max DCA times","dashboard.indicator.backtest.field.trendReduceEnabled":"Trend reduce","dashboard.indicator.backtest.field.adverseReduceEnabled":"Adverse reduce","dashboard.indicator.backtest.field.trendReduceStepPct":"Trend trigger (%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"Adverse trigger (%)","dashboard.indicator.backtest.field.trendReduceSizePct":"Reduce size (% of position)","dashboard.indicator.backtest.field.adverseReduceSizePct":"Adverse reduce size (% of position)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"Max trend reduce times","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"Max adverse reduce times","dashboard.indicator.backtest.field.entryPct":"Entry size (% of capital)","dashboard.indicator.backtest.field.minOrderPct":"Min order size (% of capital) (optional)","dashboard.indicator.backtest.closeLongTrailing":"Close Long (Trailing)","dashboard.indicator.backtest.reduceLong":"Reduce Long","dashboard.indicator.backtest.closeShortTrailing":"Close Short (Trailing)","dashboard.indicator.backtest.reduceShort":"Reduce Short","dashboard.docs.title":"Centre de documentation","dashboard.docs.search.placeholder":"Rechercher des documents...","dashboard.docs.category.all":"Tout","dashboard.docs.category.guide":"Guide de développement","dashboard.docs.category.api":"Documentation API","dashboard.docs.category.tutorial":"Tutoriel","dashboard.docs.category.faq":"FAQ","dashboard.docs.featured.title":"Documentation recommandée","dashboard.docs.featured.tag":"Recommandé","dashboard.docs.list.views":"Parcourir","dashboard.docs.list.author":"Auteur","dashboard.docs.list.empty":"Aucun document pour l'instant","dashboard.docs.list.backToAll":"Retour à tous les documents","dashboard.docs.list.total":"{count} documents au total","dashboard.docs.detail.back":"Retour à la liste des documents","dashboard.docs.detail.updatedAt":"mis à jour sur","dashboard.docs.detail.related":"Documents associés","dashboard.docs.detail.notFound":"Le document n'existe pas","dashboard.docs.detail.error":"Le document n'existe pas ou a été supprimé","dashboard.docs.search.result":"Résultats de la recherche","dashboard.docs.search.keyword":"mots-clés","community.filter.indicatorType":"Type d'indicateur","community.filter.all":"Tout","community.filter.other":"Autres options","community.filter.pricing":"Type de prix","community.filter.allPricing":"Tous les tarifs","community.filter.sortBy":"Trier par","community.filter.search":"Rechercher","community.filter.searchPlaceholder":"Rechercher le nom de la métrique","community.indicatorType.trend":"Type de tendance","community.indicatorType.momentum":"type d'élan","community.indicatorType.volatility":"Volatilité","community.indicatorType.volume":"Volume","community.indicatorType.custom":"Personnaliser","community.pricing.free":"gratuit","community.pricing.paid":"Payer","community.sort.downloads":"Téléchargements","community.sort.rating":"Note","community.sort.newest":"Dernières versions","community.pagination.total":"{total} indicateurs au total","community.noDescription":"Pas encore de description","community.detail.type":"Tapez","community.detail.pricing":"Tarifs","community.detail.rating":"Note","community.detail.downloads":"Téléchargements","community.detail.author":"Auteur","community.detail.description":"Présentation","community.detail.detailContent":"Description détaillée","community.detail.backtestStats":"Statistiques de backtest","community.action.purchase":"indicateur d'achat","community.action.addToMyIndicators":"Ajouter à mes indicateurs","community.action.favorite":"Collecte","community.action.unfavorite":"Annuler les favoris","community.action.buyNow":"Acheter maintenant","community.action.renew":"Renouvellement","community.purchase.price":"prix","community.purchase.permanent":"permanent","community.purchase.monthly":"mois","community.purchase.confirmBuy":"Confirmer pour acheter cet indicateur ({price} QDT) ?","community.purchase.confirmRenew":"Confirmer le renouvellement de cet indicateur ({price} QDT/mois) ?","community.purchase.confirmFree":"Confirmer pour ajouter cet indicateur gratuit ?","community.purchase.confirmTitle":"Confirmer l'action","community.purchase.owned":"Vous avez acheté cet indicateur (valable en permanence)","community.purchase.ownIndicator":"Il s'agit de la métrique que vous avez publiée","community.purchase.expired":"Votre abonnement a expiré","community.purchase.expiresOn":"Heure d'expiration : {date}","community.tabs.detail":"Détails de l'indicateur","community.tabs.backtest":"Données de backtest","community.tabs.ratings":"Avis d'utilisateurs","community.rating.myRating":"Ma note","community.rating.stars":"{count} étoiles","community.rating.commentPlaceholder":"Partagez votre expérience...","community.rating.submit":"Soumettre une note","community.rating.modify":"Modifier","community.rating.saveModify":"Enregistrer les modifications","community.rating.cancel":"Annuler","community.rating.selectRating":"Veuillez sélectionner une note","community.rating.success":"Évaluation réussie","community.rating.modifySuccess":"Avis modifié avec succès","community.rating.failed":"Échec de la notation","community.rating.noRatings":"Pas encore de commentaires","community.backtest.note":"Les données ci-dessus sont des résultats de backtest historiques et sont fournies à titre de référence uniquement et ne représentent pas les bénéfices futurs.","community.backtest.noData":"Aucune donnée de backtest pour l'instant","community.backtest.uploadHint":"L'auteur n'a pas encore téléchargé les données de backtest","community.message.loadFailed":"Échec du chargement de la liste des indicateurs","community.message.purchaseProcessing":"Traitement de la demande d'achat...","community.message.downloadSuccess":"La métrique a été ajoutée à ma liste de métriques","community.message.favoriteSuccess":"Collecte réussie","community.message.unfavoriteSuccess":"Annuler la collecte avec succès","community.message.operationSuccess":"Opération réussie","community.message.operationFailed":"L'opération a échoué","community.banner.readOnly":"Lecture seule","community.banner.loginHint":"Pour vous connecter ou vous inscrire, veuillez cliquer sur le bouton pour accéder à une page indépendante afin d'éviter les problèmes CSRF","community.banner.jumpButton":"Aller à Connexion/Inscription","dashboard.totalEquity":"capitaux propres totaux","dashboard.totalPnL":"Total des profits et pertes","dashboard.aiStrategies":"Stratégie d'IA","dashboard.indicatorStrategies":"Stratégie des indicateurs","dashboard.running":"Courir","dashboard.pnlHistory":"profits et pertes historiques","dashboard.strategyPerformance":"Ratio de profits et pertes de la stratégie","dashboard.recentTrades":"transactions récentes","dashboard.currentPositions":"Poste actuel","dashboard.table.time":"temps","dashboard.table.strategy":"Nom de la stratégie","dashboard.table.symbol":"Cible","dashboard.table.type":"Tapez","dashboard.table.side":"direction","dashboard.table.size":"Intérêt ouvert","dashboard.table.entryPrice":"cours d'ouverture moyen","dashboard.table.price":"prix","dashboard.table.amount":"Quantité","dashboard.table.profit":"Profits et pertes","dashboard.pendingOrders":"Historique d'exécution des ordres","dashboard.totalOrders":"Total {total} ordres","dashboard.viewError":"Voir l'erreur","dashboard.filled":"Rempli","dashboard.orderTable.time":"Heure de création","dashboard.orderTable.strategy":"Stratégie","dashboard.orderTable.symbol":"Paire de trading","dashboard.orderTable.signalType":"Type de signal","dashboard.orderTable.amount":"Quantité","dashboard.orderTable.price":"Prix de remplissage","dashboard.orderTable.status":"Statut","dashboard.orderTable.executedAt":"Heure d'exécution","dashboard.signalType.openLong":"Ouvrir Long","dashboard.signalType.openShort":"Ouvrir Short","dashboard.signalType.closeLong":"Fermer Long","dashboard.signalType.closeShort":"Fermer Short","dashboard.signalType.addLong":"Ajouter Long","dashboard.signalType.addShort":"Ajouter Short","dashboard.status.pending":"En attente","dashboard.status.processing":"En cours","dashboard.status.completed":"Terminé","dashboard.status.failed":"Échoué","dashboard.status.cancelled":"Annulé","dashboard.table.pnl":"profit ou perte non réalisé","form.basic-form.basic.title":"forme de base","form.basic-form.basic.description":"Les pages de formulaire sont utilisées pour collecter ou vérifier les informations des utilisateurs. Les formulaires de base sont couramment utilisés dans des scénarios de formulaire comportant peu d'éléments de données.","form.basic-form.title.label":"Titre","form.basic-form.title.placeholder":"Donnez un nom à l'objectif","form.basic-form.title.required":"Veuillez entrer un titre","form.basic-form.date.label":"Date de début et de fin","form.basic-form.placeholder.start":"date de début","form.basic-form.placeholder.end":"date de fin","form.basic-form.date.required":"Veuillez sélectionner les dates de début et de fin","form.basic-form.goal.label":"Description de l'objectif","form.basic-form.goal.placeholder":"Veuillez saisir vos objectifs de travail par étapes","form.basic-form.goal.required":"Veuillez saisir une description de l'objectif","form.basic-form.standard.label":"mesurer","form.basic-form.standard.placeholder":"Veuillez saisir des statistiques","form.basic-form.standard.required":"Veuillez saisir des statistiques","form.basic-form.client.label":"Client","form.basic-form.client.required":"Veuillez décrire les clients que vous servez","form.basic-form.label.tooltip":"destinataires de services cibles","form.basic-form.client.placeholder":"Veuillez décrire les clients que vous servez, les clients internes directement @nom/numéro de poste","form.basic-form.invites.label":"Inviter des réviseurs","form.basic-form.invites.placeholder":"Veuillez directement @nom/numéro d'employé, vous pouvez inviter jusqu'à 5 personnes","form.basic-form.weight.label":"poids","form.basic-form.weight.placeholder":"Veuillez entrer","form.basic-form.public.label":"public cible","form.basic-form.label.help":"Les clients et les évaluateurs sont partagés par défaut","form.basic-form.radio.public":"publique","form.basic-form.radio.partially-public":"Partiellement public","form.basic-form.radio.private":"privé","form.basic-form.publicUsers.placeholder":"ouvert à","form.basic-form.option.A":"Collègue 1","form.basic-form.option.B":"Collègue 2","form.basic-form.option.C":"Collègue trois","form.basic-form.email.required":"Veuillez entrer votre adresse e-mail !","form.basic-form.email.wrong-format":"Le format de l'adresse e-mail est incorrect !","form.basic-form.userName.required":"Veuillez entrer votre nom d'utilisateur !","form.basic-form.password.required":"Veuillez entrer votre mot de passe !","form.basic-form.password.twice":"Les mots de passe saisis deux fois ne correspondent pas !","form.basic-form.strength.msg":"Veuillez saisir au moins 6 caractères. Veuillez ne pas utiliser de mots de passe faciles à deviner.","form.basic-form.strength.strong":"Force : Forte","form.basic-form.strength.medium":"Force : moyenne","form.basic-form.strength.short":"Force : trop courte","form.basic-form.confirm-password.required":"Veuillez confirmer votre mot de passe !","form.basic-form.phone-number.required":"Veuillez entrer votre numéro de téléphone portable !","form.basic-form.phone-number.wrong-format":"Le format du numéro de téléphone portable est erroné !","form.basic-form.verification-code.required":"Veuillez entrer le code de vérification !","form.basic-form.form.get-captcha":"Obtenir le code de vérification","form.basic-form.captcha.second":"secondes","form.basic-form.form.optional":"(facultatif)","form.basic-form.form.submit":"Soumettre","form.basic-form.form.save":"enregistrer","form.basic-form.email.placeholder":"Courriel","form.basic-form.password.placeholder":"Mot de passe d'au moins 6 caractères, sensible à la casse","form.basic-form.confirm-password.placeholder":"Confirmer le mot de passe","form.basic-form.phone-number.placeholder":"Numéro de téléphone portable","form.basic-form.verification-code.placeholder":"Code de vérification","result.success.title":"Soumission réussie","result.success.description":"La page de résultats de soumission est utilisée pour renvoyer les résultats de traitement d'une série de tâches opérationnelles. S'il ne s'agit que d'une opération simple, utilisez le retour d'invite global du message. Cette zone de texte peut afficher des instructions supplémentaires simples. S'il est nécessaire d'afficher des « documents », la zone grise ci-dessous peut afficher des contenus plus complexes.","result.success.operate-title":"Nom du projet","result.success.operate-id":"ID du projet","result.success.principal":"responsable","result.success.operate-time":"Temps effectif","result.success.step1-title":"Créer un projet","result.success.step1-operator":"Qu Lili","result.success.step2-title":"Examen préliminaire du ministère","result.success.step2-operator":"Zhou Maomao","result.success.step2-extra":"Urgent","result.success.step3-title":"examen financier","result.success.step4-title":"Terminé","result.success.btn-return":"Retour à la liste","result.success.btn-project":"Afficher les articles","result.success.btn-print":"Imprimer","result.fail.error.title":"Échec de la soumission","result.fail.error.description":"Veuillez vérifier et modifier les informations suivantes avant de soumettre à nouveau.","result.fail.error.hint-title":"Le contenu que vous avez soumis contient les erreurs suivantes :","result.fail.error.hint-text1":"Votre compte a été gelé","result.fail.error.hint-btn1":"Décongeler immédiatement","result.fail.error.hint-text2":"Votre compte n'est pas encore éligible pour postuler","result.fail.error.hint-btn2":"Mettre à niveau maintenant","result.fail.error.btn-text":"Retour à la modification","account.settings.menuMap.custom":"personnalisation","account.settings.menuMap.binding":"Liaison de compte","account.settings.basic.avatar":"avatar","account.settings.basic.change-avatar":"Changer d'avatar","account.settings.basic.email":"Courriel","account.settings.basic.email-message":"Veuillez entrer votre email!","account.settings.basic.nickname":"Surnom","account.settings.basic.nickname-message":"Veuillez entrer votre pseudo !","account.settings.basic.profile":"Profil","account.settings.basic.profile-message":"Veuillez entrer votre profil personnel !","account.settings.basic.profile-placeholder":"Profil","account.settings.basic.country":"Pays/Région","account.settings.basic.country-message":"Veuillez entrer votre pays ou région !","account.settings.basic.geographic":"Province et ville","account.settings.basic.geographic-message":"Veuillez entrer votre province et votre ville !","account.settings.basic.address":"adresse postale","account.settings.basic.address-message":"Veuillez entrer votre adresse postale !","account.settings.basic.phone":"Numéro de contact","account.settings.basic.phone-message":"Veuillez entrer votre numéro de contact !","account.settings.basic.update":"Mettre à jour les informations de base","account.settings.basic.update.success":"Mettre à jour les informations de base avec succès","account.settings.security.strong":"Fort","account.settings.security.medium":"dans","account.settings.security.weak":"faible","account.settings.security.password":"Mot de passe du compte","account.settings.security.password-description":"Force actuelle du mot de passe :","account.settings.security.phone":"Téléphone mobile de sécurité","account.settings.security.phone-description":"Téléphone mobile déjà lié :","account.settings.security.question":"Problèmes de sécurité","account.settings.security.question-description":"Aucune question de sécurité n'est définie, ce qui peut protéger efficacement la sécurité du compte.","account.settings.security.email":"Lier un e-mail","account.settings.security.email-description":"Adresse e-mail déjà liée :","account.settings.security.mfa":"Appareil MFA","account.settings.security.mfa-description":"Le périphérique MFA n’est pas lié. Après la liaison, vous pouvez confirmer à nouveau.","account.settings.security.modify":"Modifier","account.settings.security.set":"paramètres","account.settings.security.bind":"reliure","account.settings.binding.taobao":"Lier Taobao","account.settings.binding.taobao-description":"Le compte Taobao n'est actuellement pas lié","account.settings.binding.alipay":"Lier Alipay","account.settings.binding.alipay-description":"Le compte Alipay n'est actuellement pas lié","account.settings.binding.dingding":"Liaison DingTalk","account.settings.binding.dingding-description":"Aucun compte DingTalk n'est actuellement lié","account.settings.binding.bind":"reliure","account.settings.notification.password":"Mot de passe du compte","account.settings.notification.password-description":"Les messages des autres utilisateurs seront notifiés sous forme de messages du site.","account.settings.notification.messages":"Messages système","account.settings.notification.messages-description":"Les messages système seront notifiés sous forme de messages de site.","account.settings.notification.todo":"Tâches à faire","account.settings.notification.todo-description":"Les tâches à effectuer seront notifiées sous forme de messages sur site","account.settings.settings.open":"ouvert","account.settings.settings.close":"fermer","trading-assistant.title":"Assistante commerciale","trading-assistant.strategyList":"Liste de stratégies","trading-assistant.createStrategy":"Créer une politique","trading-assistant.noStrategy":"Pas encore de stratégie","trading-assistant.selectStrategy":"Veuillez sélectionner une stratégie à gauche pour afficher les détails","trading-assistant.startStrategy":"stratégie de lancement","trading-assistant.stopStrategy":"stratégie d'arrêt","trading-assistant.editStrategy":"Stratégie éditoriale","trading-assistant.deleteStrategy":"Supprimer la stratégie","trading-assistant.status.running":"Courir","trading-assistant.status.stopped":"Arrêté","trading-assistant.status.error":"Erreur","trading-assistant.strategyType.IndicatorStrategy":"Stratégie d'indicateurs techniques","trading-assistant.strategyType.PromptBasedStrategy":"stratégie de mots indicateurs","trading-assistant.strategyType.GridStrategy":"stratégie de grille","trading-assistant.tabs.tradingRecords":"historique des transactions","trading-assistant.tabs.positions":"Enregistrement de poste","trading-assistant.tabs.equityCurve":"courbe des actions","trading-assistant.form.step1":"Sélectionner des indicateurs","trading-assistant.form.step2":"Configuration d'échange","trading-assistant.form.step3":"Paramètres de stratégie","trading-assistant.form.indicator":"Sélectionner des indicateurs","trading-assistant.form.indicatorHint":"Vous ne pouvez sélectionner que les indicateurs techniques que vous avez achetés ou créés","trading-assistant.form.qdtCostHints":"L'utilisation de la stratégie consommera du QDT, veuillez vous assurer que le compte dispose d'un solde QDT suffisant","trading-assistant.form.indicatorDescription":"Description de l'indicateur","trading-assistant.form.noDescription":"Pas encore de description","trading-assistant.form.exchange":"Sélectionnez un échange","trading-assistant.form.apiKey":"Clé API","trading-assistant.form.secretKey":"Clé secrète","trading-assistant.form.passphrase":"Phrase secrète","trading-assistant.form.testConnection":"tester la connexion","trading-assistant.form.strategyName":"Nom de la stratégie","trading-assistant.form.symbol":"paire de trading","trading-assistant.form.symbolHint":"Actuellement, seules les paires de trading de cryptomonnaies sont prises en charge","trading-assistant.form.initialCapital":"Montant de l'investissement","trading-assistant.form.marketType":"type de marché","trading-assistant.form.marketTypeFutures":"contrat","trading-assistant.form.marketTypeSpot":"Spot","trading-assistant.form.marketTypeHint":"Le contrat prend en charge le trading bidirectionnel et l'effet de levier, tandis que le spot ne prend en charge que les positions longues et l'effet de levier est fixé à 1x.","trading-assistant.form.leverage":"Tirer parti de plusieurs","trading-assistant.form.leverageHint":"Contrat : 1-125 fois, spot : fixe 1 fois","trading-assistant.form.spotLeverageFixed":"L'effet de levier du trading au comptant est fixé à 1x","trading-assistant.form.spotOnlyLongHint":"Le trading au comptant ne prend en charge que les positions longues","trading-assistant.form.tradeDirection":"Orientation commerciale","trading-assistant.form.tradeDirectionLong":"Seulement longtemps","trading-assistant.form.tradeDirectionShort":"Seulement court","trading-assistant.form.tradeDirectionBoth":"transaction bidirectionnelle","trading-assistant.form.timeframe":"période","trading-assistant.form.klinePeriod":"Période K-Line","trading-assistant.form.timeframe1m":"1 minute","trading-assistant.form.timeframe5m":"5 minutes","trading-assistant.form.timeframe15m":"15 minutes","trading-assistant.form.timeframe30m":"30 minutes","trading-assistant.form.timeframe1H":"1 heure","trading-assistant.form.timeframe4H":"4 heures","trading-assistant.form.timeframe1D":"1 jour","trading-assistant.form.selectStrategyType":"Sélectionner le type de stratégie","trading-assistant.form.indicatorStrategy":"Stratégie d'indicateur","trading-assistant.form.indicatorStrategyDesc":"Stratégie de trading automatisée basée sur des indicateurs techniques","trading-assistant.form.aiStrategy":"Stratégie IA","trading-assistant.form.aiStrategyDesc":"Stratégie de trading automatisée basée sur la prise de décision intelligente IA","trading-assistant.form.enableAiFilter":"Activer le filtre de décision intelligente IA","trading-assistant.form.enableAiFilterHint":"Lorsqu'il est activé, les signaux d'indicateur seront filtrés par l'IA pour améliorer la qualité des transactions","trading-assistant.form.aiFilterPrompt":"Invite personnalisée","trading-assistant.form.aiFilterPromptHint":"Fournir des instructions personnalisées pour le filtrage IA, laisser vide pour utiliser la valeur par défaut du système","trading-assistant.validation.strategyTypeRequired":"Veuillez sélectionner un type de stratégie","trading-assistant.form.advancedSettings":"Paramètres avancés","trading-assistant.form.orderMode":"Mode de commande","trading-assistant.form.orderModeMaker":"Créateur","trading-assistant.form.orderModeTaker":"Prix du marché (Preneur)","trading-assistant.form.orderModeHint":"Le mode d'ordre en attente utilise des ordres limités et les frais de traitement sont inférieurs ; le mode prix du marché est exécuté immédiatement et les frais de traitement sont plus élevés.","trading-assistant.form.makerWaitSec":"Temps d'attente pour les commandes en attente (secondes)","trading-assistant.form.makerWaitSecHint":"Le temps d'attente pour la transaction après avoir passé une commande. Annulez et réessayez après l'expiration du délai.","trading-assistant.form.makerRetries":"Nombre de tentatives pour les commandes en attente","trading-assistant.form.makerRetriesHint":"Le nombre maximum de tentatives lorsqu'un ordre en attente n'est pas exécuté","trading-assistant.form.fallbackToMarket":"L'ordre en attente échoue et le prix du marché est dégradé.","trading-assistant.form.fallbackToMarketHint":"Lorsque l'ordre en attente d'ouverture/de clôture n'a pas été exécuté, s'il doit être rétrogradé en ordre au marché pour garantir que la transaction soit terminée.","trading-assistant.form.marginMode":"Mode marge","trading-assistant.form.marginModeCross":"Entrepôt complet","trading-assistant.form.marginModeIsolated":"Position isolée","trading-assistant.form.stopLossPct":"Taux d'arrêt des pertes (%)","trading-assistant.form.stopLossPctHint":"Définissez le pourcentage de stop loss, 0 signifie que le stop loss n'est pas activé","trading-assistant.form.takeProfitPct":"Ratio de profit (%)","trading-assistant.form.takeProfitPctHint":"Définissez le pourcentage de profit, 0 signifie désactiver le profit","trading-assistant.form.signalMode":"Mode signal","trading-assistant.form.signalModeConfirmed":"Mode de confirmation","trading-assistant.form.signalModeAggressive":"Mode agressif","trading-assistant.form.signalModeHint":"Mode de confirmation : vérifie uniquement les lignes K terminées ; Mode agressif : vérifie également la formation de lignes K","trading-assistant.form.cancel":"Annuler","trading-assistant.form.prev":"Étape précédente","trading-assistant.form.next":"Étape suivante","trading-assistant.form.confirmCreate":"Confirmer la création","trading-assistant.form.confirmEdit":"Confirmer les modifications","trading-assistant.messages.createSuccess":"Stratégie créée avec succès","trading-assistant.messages.createFailed":"Échec de la création de la stratégie","trading-assistant.messages.updateSuccess":"Mise à jour de la stratégie réussie","trading-assistant.messages.updateFailed":"Échec de la mise à jour de la stratégie","trading-assistant.messages.deleteSuccess":"Suppression de la stratégie réussie","trading-assistant.messages.deleteFailed":"Échec de la suppression de la stratégie","trading-assistant.messages.startSuccess":"La stratégie a démarré avec succès","trading-assistant.messages.startFailed":"Échec du démarrage de la stratégie","trading-assistant.messages.stopSuccess":"La stratégie s'est arrêtée avec succès","trading-assistant.messages.stopFailed":"La stratégie d'arrêt a échoué","trading-assistant.messages.loadFailed":"Échec de l'obtention de la liste des règles","trading-assistant.messages.runningWarning":"La stratégie est en marche. Veuillez arrêter la stratégie avant de la modifier.","trading-assistant.messages.deleteConfirmWithName":"Êtes-vous sûr de vouloir supprimer la stratégie « {name} » ? Cette opération est irréversible.","trading-assistant.messages.deleteConfirm":"Êtes-vous sûr de vouloir supprimer cette stratégie ? Cette opération est irréversible.","trading-assistant.messages.loadTradesFailed":"Échec de l'obtention des enregistrements de transaction","trading-assistant.messages.loadPositionsFailed":"Impossible d'obtenir l'enregistrement de position","trading-assistant.messages.loadEquityFailed":"Impossible d'obtenir la courbe des capitaux propres","trading-assistant.messages.loadIndicatorsFailed":"Échec du chargement de la liste des indicateurs, veuillez réessayer plus tard","trading-assistant.messages.spotLimitations":"Le trading au comptant a été automatiquement réglé sur position longue uniquement, effet de levier 1x","trading-assistant.messages.autoFillApiConfig":"La configuration historique de l'API de l'échange a été automatiquement renseignée","trading-assistant.placeholders.selectIndicator":"Veuillez sélectionner un indicateur","trading-assistant.placeholders.selectExchange":"Veuillez sélectionner un échange","trading-assistant.placeholders.inputApiKey":"Veuillez saisir la clé API","trading-assistant.placeholders.inputSecretKey":"Veuillez entrer la clé secrète","trading-assistant.placeholders.inputPassphrase":"Veuillez saisir la phrase secrète","trading-assistant.placeholders.inputStrategyName":"Veuillez saisir un nom de stratégie","trading-assistant.placeholders.selectSymbol":"Veuillez sélectionner une paire de trading","trading-assistant.placeholders.selectTimeframe":"Veuillez sélectionner une période","trading-assistant.placeholders.selectKlinePeriod":"Veuillez sélectionner une période K-Line","trading-assistant.placeholders.inputAiFilterPrompt":"Veuillez entrer une invite personnalisée (optionnel)","trading-assistant.validation.indicatorRequired":"Veuillez sélectionner un indicateur","trading-assistant.validation.exchangeRequired":"Veuillez sélectionner un échange","trading-assistant.validation.apiKeyRequired":"Veuillez saisir la clé API","trading-assistant.validation.secretKeyRequired":"Veuillez entrer la clé secrète","trading-assistant.validation.passphraseRequired":"Veuillez saisir la phrase secrète","trading-assistant.validation.exchangeConfigIncomplete":"Veuillez remplir les informations complètes de configuration de l'échange","trading-assistant.validation.testConnectionRequired":'Veuillez d\'abord cliquer sur le bouton "Tester la connexion" et vous assurer que la connexion est réussie',"trading-assistant.validation.testConnectionFailed":"Le test de connexion a échoué, veuillez vérifier la configuration et réessayer","trading-assistant.validation.credentialRequired":"Veuillez d'abord ajouter et tester les identifiants de l'échange dans le Centre personnel","trading-assistant.validation.strategyNameRequired":"Veuillez saisir un nom de stratégie","trading-assistant.validation.symbolRequired":"Veuillez sélectionner une paire de trading","trading-assistant.validation.initialCapitalRequired":"Veuillez saisir le montant de l'investissement","trading-assistant.validation.leverageRequired":"Veuillez saisir le ratio de levier","trading-assistant.table.time":"temps","trading-assistant.table.type":"Tapez","trading-assistant.table.price":"prix","trading-assistant.table.amount":"Quantité","trading-assistant.table.value":"Montant","trading-assistant.table.commission":"frais de traitement","trading-assistant.table.symbol":"paire de trading","trading-assistant.table.side":"direction","trading-assistant.table.size":"Quantité de position","trading-assistant.table.entryPrice":"Prix d'ouverture","trading-assistant.table.currentPrice":"prix actuel","trading-assistant.table.unrealizedPnl":"profit ou perte non réalisé","trading-assistant.table.pnlPercent":"Ratio de profits et pertes","trading-assistant.table.buy":"acheter","trading-assistant.table.sell":"vendre","trading-assistant.table.long":"Allez-y longtemps","trading-assistant.table.short":"court","trading-assistant.table.noPositions":"Aucun poste pour l'instant","trading-assistant.detail.title":"Détails de la stratégie","trading-assistant.detail.strategyName":"Nom de la stratégie","trading-assistant.detail.strategyType":"Type de stratégie","trading-assistant.detail.status":"Statut","trading-assistant.detail.tradingMode":"modèle commercial","trading-assistant.detail.exchange":"échange","trading-assistant.detail.initialCapital":"Capital initial","trading-assistant.detail.totalInvestment":"montant total de l'investissement","trading-assistant.detail.currentEquity":"Valeur nette actuelle","trading-assistant.detail.totalPnl":"Total des profits et pertes","trading-assistant.detail.indicatorName":"Nom de l'indicateur","trading-assistant.detail.maxLeverage":"Effet de levier maximal","trading-assistant.detail.decideInterval":"intervalle de décision","trading-assistant.detail.symbols":"Objet de transaction","trading-assistant.detail.createdAt":"temps de création","trading-assistant.detail.updatedAt":"Heure de mise à jour","trading-assistant.detail.llmConfig":"Configuration du modèle d'IA","trading-assistant.detail.exchangeConfig":"Configuration d'échange","trading-assistant.detail.provider":"fournisseur","trading-assistant.detail.modelId":"ID du modèle","trading-assistant.detail.close":"Fermer","trading-assistant.detail.loadFailed":"Échec de l'obtention des détails de la stratégie","trading-assistant.equity.noData":"Aucune donnée sur la valeur nette pour l'instant","trading-assistant.equity.equity":"valeur nette","trading-assistant.exchange.tradingMode":"modèle commercial","trading-assistant.exchange.virtual":"trading simulé","trading-assistant.exchange.live":"Transaction réelle","trading-assistant.exchange.selectExchange":"Sélectionnez un échange","trading-assistant.exchange.walletAddress":"adresse du portefeuille","trading-assistant.exchange.walletAddressPlaceholder":"Veuillez saisir l'adresse de votre portefeuille (en commençant par 0x)","trading-assistant.exchange.privateKey":"clé privée","trading-assistant.exchange.privateKeyPlaceholder":"Veuillez saisir la clé privée (64 caractères)","trading-assistant.exchange.testConnection":"tester la connexion","trading-assistant.exchange.connectionSuccess":"Connexion réussie","trading-assistant.exchange.connectionFailed":"La connexion a échoué","trading-assistant.exchange.testFailed":"Le test de connexion a échoué","trading-assistant.exchange.fillComplete":"Veuillez remplir les informations complètes de configuration de l'échange","trading-assistant.strategyTypeOptions.ai":"Stratégie basée sur l'IA","trading-assistant.strategyTypeOptions.indicator":"Stratégie d'indicateurs techniques","trading-assistant.strategyTypeOptions.aiDeveloping":"La fonction de stratégie basée sur l'IA est en cours de développement, alors restez à l'écoute","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"Des fonctionnalités de stratégie basées sur l'IA sont en cours de développement","trading-assistant.indicatorType.trend":"Tendance","trading-assistant.indicatorType.momentum":"élan","trading-assistant.indicatorType.volatility":"Fluctuations","trading-assistant.indicatorType.volume":"Volume","trading-assistant.indicatorType.custom":"Personnaliser","trading-assistant.exchangeNames":{okx:"OKX",binance:"Binance",hyperliquid:"Hyperliquide",blockchaincom:"Blockchain.com",coinbaseexchange:"Coinbase",gate:"Porte.io",mexc:"MEXIQUE",kraken:"Kraken",bitfinex:"Bitfinex",bybit:"Bybit",kucoin:"KuCoin",huobi:"Huobi",bitget:"Bitget",bitmex:"BitMEX",deribit:"Déribuer",phemex:"Phemex",bitmart:"BitMart",bitstamp:"Timbre de bits",bittrex:"Bittrex",poloniex:"Poloniex",gemini:"Gémeaux",cryptocom:"Crypto.com",bitflyer:"bitFlyer",upbit:"Débit ascendant",bithumb:"Bithumb",coinone:"Coinone",zb:"ZB",lbank:"LBanque",bibox:"Bibox",bigone:"BigONE",bitrue:"Bitrue",coinex:"CoinEx",digifinex:"DigiFinex",ftx:"FTX",ftxus:"FTX États-Unis",binanceus:"Binance États-Unis",binancecoinm:"Binance COIN-M",binanceusdm:"Binance USDⓈ-M",deepcoin:"Deepcoin"},"ai-trading-assistant.title":"Assistant de trading IA","ai-trading-assistant.strategyList":"Liste de stratégies","ai-trading-assistant.createStrategy":"Créer une politique","ai-trading-assistant.noStrategy":"Pas encore de stratégie","ai-trading-assistant.selectStrategy":"Veuillez sélectionner une stratégie à gauche pour afficher les détails","ai-trading-assistant.startStrategy":"stratégie de lancement","ai-trading-assistant.stopStrategy":"stratégie d'arrêt","ai-trading-assistant.editStrategy":"Stratégie éditoriale","ai-trading-assistant.deleteStrategy":"Supprimer la stratégie","ai-trading-assistant.status.running":"Courir","ai-trading-assistant.status.stopped":"Arrêté","ai-trading-assistant.status.error":"Erreur","ai-trading-assistant.tabs.tradingRecords":"historique des transactions","ai-trading-assistant.tabs.positions":"Enregistrement de poste","ai-trading-assistant.tabs.aiDecisions":"Enregistrement de décision IA","ai-trading-assistant.tabs.equityCurve":"courbe des actions","ai-trading-assistant.form.createTitle":"Créer des stratégies de trading IA","ai-trading-assistant.form.editTitle":"Modifier la stratégie de trading de l'IA","ai-trading-assistant.form.strategyName":"Nom de la stratégie","ai-trading-assistant.form.modelId":"Modèle d'IA","ai-trading-assistant.form.modelIdHint":"Utilisez le service système OpenRouter sans configurer la clé API","ai-trading-assistant.form.decideInterval":"intervalle de décision","ai-trading-assistant.form.decideInterval5m":"5 minutes","ai-trading-assistant.form.decideInterval10m":"10 minutes","ai-trading-assistant.form.decideInterval30m":"30 minutes","ai-trading-assistant.form.decideInterval1h":"1 heure","ai-trading-assistant.form.decideInterval4h":"4 heures","ai-trading-assistant.form.decideInterval1d":"1 jour","ai-trading-assistant.form.decideInterval1w":"1 semaine","ai-trading-assistant.form.decideIntervalHint":"L’intervalle de temps nécessaire à l’IA pour prendre des décisions","ai-trading-assistant.form.runPeriod":"Cycle d'exécution","ai-trading-assistant.form.runPeriodHint":"L'heure de début et l'heure de fin de l'exécution de la stratégie","ai-trading-assistant.form.startDate":"date de début","ai-trading-assistant.form.endDate":"date de fin","ai-trading-assistant.form.qdtCostTitle":"Instructions de déduction QDT","ai-trading-assistant.form.qdtCostHint":"{cost} QDT sera déduit pour chaque décision de l'IA. Veuillez vous assurer que votre compte dispose d'un solde QDT suffisant. Lors de l'exécution de la stratégie, des frais seront déduits en temps réel pour chaque décision.","ai-trading-assistant.form.apiKey":"Clé API","ai-trading-assistant.form.exchange":"Sélectionnez un échange","ai-trading-assistant.form.secretKey":"Clé secrète","ai-trading-assistant.form.passphrase":"Phrase secrète","ai-trading-assistant.form.testConnection":"tester la connexion","ai-trading-assistant.form.symbol":"paire de trading","ai-trading-assistant.form.symbolHint":"Sélectionnez la paire de trading à trader","ai-trading-assistant.form.initialCapital":"Montant investi (marge)","ai-trading-assistant.form.leverage":"Tirer parti de plusieurs","ai-trading-assistant.form.timeframe":"période","ai-trading-assistant.form.timeframe1m":"1 minute","ai-trading-assistant.form.timeframe5m":"5 minutes","ai-trading-assistant.form.timeframe15m":"15 minutes","ai-trading-assistant.form.timeframe30m":"30 minutes","ai-trading-assistant.form.timeframe1H":"1 heure","ai-trading-assistant.form.timeframe4H":"4 heures","ai-trading-assistant.form.timeframe1D":"1 jour","ai-trading-assistant.form.marketType":"type de marché","ai-trading-assistant.form.marketTypeFutures":"contrat","ai-trading-assistant.form.marketTypeSpot":"Spot","ai-trading-assistant.form.totalPnl":"Total des profits et pertes","ai-trading-assistant.form.customPrompt":"Mots d'invite personnalisés","ai-trading-assistant.form.customPromptHint":"Facultatif, utilisé pour personnaliser les stratégies de trading de l'IA et la logique de prise de décision","ai-trading-assistant.form.cancel":"Annuler","ai-trading-assistant.form.prev":"Étape précédente","ai-trading-assistant.form.next":"Étape suivante","ai-trading-assistant.form.confirmCreate":"Confirmer la création","ai-trading-assistant.form.confirmEdit":"Confirmer les modifications","ai-trading-assistant.messages.createSuccess":"Stratégie créée avec succès","ai-trading-assistant.messages.createFailed":"Échec de la création de la stratégie","ai-trading-assistant.messages.updateSuccess":"Mise à jour de la stratégie réussie","ai-trading-assistant.messages.updateFailed":"Échec de la mise à jour de la stratégie","ai-trading-assistant.messages.deleteSuccess":"Suppression de la stratégie réussie","ai-trading-assistant.messages.deleteFailed":"Échec de la suppression de la stratégie","ai-trading-assistant.messages.startSuccess":"La stratégie a démarré avec succès","ai-trading-assistant.messages.startFailed":"Échec du démarrage de la stratégie","ai-trading-assistant.messages.stopSuccess":"La stratégie s'est arrêtée avec succès","ai-trading-assistant.messages.stopFailed":"La stratégie d'arrêt a échoué","ai-trading-assistant.messages.loadFailed":"Échec de l'obtention de la liste des règles","ai-trading-assistant.messages.loadDecisionsFailed":"Échec de l'obtention du dossier de décision de l'IA","ai-trading-assistant.messages.deleteConfirm":"Êtes-vous sûr de vouloir supprimer cette stratégie ? Cette opération est irréversible.","ai-trading-assistant.placeholders.inputStrategyName":"Veuillez saisir un nom de stratégie","ai-trading-assistant.placeholders.selectModelId":"Veuillez sélectionner un modèle d'IA","ai-trading-assistant.placeholders.selectDecideInterval":"Veuillez sélectionner un intervalle de décision","ai-trading-assistant.placeholders.startTime":"heure de début","ai-trading-assistant.placeholders.endTime":"heure de fin","ai-trading-assistant.placeholders.inputApiKey":"Veuillez saisir la clé API","ai-trading-assistant.placeholders.selectExchange":"Veuillez sélectionner un échange","ai-trading-assistant.placeholders.inputSecretKey":"Veuillez entrer la clé secrète","ai-trading-assistant.placeholders.inputPassphrase":"Veuillez saisir la phrase secrète","ai-trading-assistant.placeholders.selectSymbol":"Veuillez sélectionner une paire de trading, telle que : BTC/USDT","ai-trading-assistant.placeholders.selectTimeframe":"Veuillez sélectionner une période","ai-trading-assistant.placeholders.inputCustomPrompt":"Veuillez saisir un mot d'invite personnalisé (facultatif)","ai-trading-assistant.validation.strategyNameRequired":"Veuillez saisir un nom de stratégie","ai-trading-assistant.validation.modelIdRequired":"Veuillez sélectionner un modèle d'IA","ai-trading-assistant.validation.runPeriodRequired":"Veuillez sélectionner un cycle d'exécution","ai-trading-assistant.validation.apiKeyRequired":"Veuillez saisir la clé API","ai-trading-assistant.validation.exchangeRequired":"Veuillez sélectionner un échange","ai-trading-assistant.validation.secretKeyRequired":"Veuillez entrer la clé secrète","ai-trading-assistant.validation.symbolRequired":"Veuillez sélectionner une paire de trading","ai-trading-assistant.validation.initialCapitalRequired":"Veuillez saisir le montant de l'investissement","ai-trading-assistant.table.time":"temps","ai-trading-assistant.table.type":"Tapez","ai-trading-assistant.table.price":"prix","ai-trading-assistant.table.amount":"Quantité","ai-trading-assistant.table.value":"Montant","ai-trading-assistant.table.symbol":"paire de trading","ai-trading-assistant.table.side":"direction","ai-trading-assistant.table.size":"Quantité de position","ai-trading-assistant.table.entryPrice":"Prix d'ouverture","ai-trading-assistant.table.currentPrice":"prix actuel","ai-trading-assistant.table.unrealizedPnl":"profit ou perte non réalisé","ai-trading-assistant.table.profit":"Profits et pertes","ai-trading-assistant.table.openLong":"Ouvert longtemps","ai-trading-assistant.table.closeLong":"Pinduo","ai-trading-assistant.table.openShort":"Ouvert court","ai-trading-assistant.table.closeShort":"vide","ai-trading-assistant.table.addLong":"Gadot","ai-trading-assistant.table.addShort":"ajouter un court","ai-trading-assistant.table.closeShortProfit":"Prendre des bénéfices sur une position courte","ai-trading-assistant.table.closeShortStop":"Arrêter la perte","ai-trading-assistant.table.closeLongProfit":"Arrêtez-vous longtemps et profitez","ai-trading-assistant.table.closeLongStop":"Arrêter la perte","ai-trading-assistant.table.buy":"acheter","ai-trading-assistant.table.sell":"vendre","ai-trading-assistant.table.long":"Allez-y longtemps","ai-trading-assistant.table.short":"court","ai-trading-assistant.table.hold":"tenir","ai-trading-assistant.table.reasoning":"Raison de l'analyse","ai-trading-assistant.table.decisions":"prise de décision","ai-trading-assistant.table.riskAssessment":"évaluation des risques","ai-trading-assistant.table.confidence":"Confiance","ai-trading-assistant.table.totalRecords":"{total} enregistrements au total","ai-trading-assistant.table.noPositions":"Aucun poste pour l'instant","ai-trading-assistant.detail.title":"Détails de la stratégie","ai-trading-assistant.equity.noData":"Aucune donnée sur la valeur nette pour l'instant","ai-trading-assistant.equity.equity":"valeur nette","ai-trading-assistant.exchange.testFailed":"Le test de connexion a échoué","ai-trading-assistant.exchange.connectionSuccess":"Connexion réussie","ai-trading-assistant.exchange.connectionFailed":"La connexion a échoué","ai-trading-assistant.form.advancedSettings":"Paramètres avancés","ai-trading-assistant.form.orderMode":"Mode de commande","ai-trading-assistant.form.orderModeMaker":"Créateur","ai-trading-assistant.form.orderModeTaker":"Prix du marché (Preneur)","ai-trading-assistant.form.orderModeHint":"Le mode d'ordre en attente utilise des ordres limités et les frais de traitement sont inférieurs ; le mode prix du marché est exécuté immédiatement et les frais de traitement sont plus élevés.","ai-trading-assistant.form.makerWaitSec":"Temps d'attente pour les commandes en attente (secondes)","ai-trading-assistant.form.makerWaitSecHint":"Le temps d'attente pour la transaction après avoir passé une commande. Annulez et réessayez après l'expiration du délai.","ai-trading-assistant.form.makerRetries":"Nombre de tentatives pour les commandes en attente","ai-trading-assistant.form.makerRetriesHint":"Le nombre maximum de tentatives lorsqu'un ordre en attente n'est pas exécuté","ai-trading-assistant.form.fallbackToMarket":"L'ordre en attente échoue et le prix du marché est dégradé.","ai-trading-assistant.form.fallbackToMarketHint":"Lorsque l'ordre en attente d'ouverture/de clôture n'a pas été exécuté, s'il doit être rétrogradé en ordre au marché pour garantir que la transaction soit terminée.","ai-trading-assistant.form.marginMode":"Mode marge","ai-trading-assistant.form.marginModeCross":"Entrepôt complet","ai-trading-assistant.form.marginModeIsolated":"Position isolée","ai-analysis.title":"Moteur de trading quantique","ai-analysis.system.online":"en ligne","ai-analysis.system.agents":"agent","ai-analysis.system.active":"actif","ai-analysis.system.stage":"scène","ai-analysis.panel.roster":"Composition des agents","ai-analysis.panel.thinking":"En pensant...","ai-analysis.panel.done":"Terminé","ai-analysis.panel.standby":"veille","ai-analysis.input.title":"Moteur de trading quantique","ai-analysis.input.placeholder":"Sélectionnez l'actif cible (par exemple BTC/USDT)","ai-analysis.input.watchlist":"Stocks optionnels","ai-analysis.input.start":"Démarrer l'analyse","ai-analysis.input.recent":"Tâches récentes :","ai-analysis.vis.stage":"étape","ai-analysis.vis.processing":"Traitement","ai-analysis.result.complete":"Analyse terminée","ai-analysis.result.signal":"signal final","ai-analysis.result.confidence":"Confiance :","ai-analysis.result.new":"nouvelle analyse","ai-analysis.result.full":"Voir le rapport complet","ai-analysis.logs.title":"Journal système","ai-analysis.modal.title":"rapport confidentiel","ai-analysis.modal.fundamental":"analyse fondamentale","ai-analysis.modal.technical":"Analyse technique","ai-analysis.modal.sentiment":"Analyse émotionnelle","ai-analysis.modal.risk":"évaluation des risques","ai-analysis.stage.idle":"veille","ai-analysis.stage.1":"Première phase : analyse multidimensionnelle","ai-analysis.stage.2":"Phase deux : débat long-court","ai-analysis.stage.3":"Phase trois : planification stratégique","ai-analysis.stage.4":"La quatrième étape : la revue du contrôle des risques","ai-analysis.stage.complete":"Terminé","ai-analysis.agent.investment_director":"Directeur des investissements","ai-analysis.agent.role.investment_director":"Analyse complète et conclusion finale","ai-analysis.agent.market":"analyste de marché","ai-analysis.agent.role.market":"Données technologiques et de marché","ai-analysis.agent.fundamental":"analyste fondamental","ai-analysis.agent.role.fundamental":"Finances et valorisation","ai-analysis.agent.technical":"analyste technique","ai-analysis.agent.role.technical":"Indicateurs et graphiques techniques","ai-analysis.agent.news":"analyste de nouvelles","ai-analysis.agent.role.news":"Filtre d'actualités mondiales","ai-analysis.agent.sentiment":"analyste des sentiments","ai-analysis.agent.role.sentiment":"Social et émotionnel","ai-analysis.agent.risk":"analyste des risques","ai-analysis.agent.role.risk":"Vérification des risques de base","ai-analysis.agent.bull":"chercheur optimiste","ai-analysis.agent.role.bull":"Extraction de catalyseurs de croissance","ai-analysis.agent.bear":"chercheur baissier","ai-analysis.agent.role.bear":"Recherche de risques et de défauts","ai-analysis.agent.manager":"directeur de recherche","ai-analysis.agent.role.manager":"modérateur du débat","ai-analysis.agent.trader":"commerçant","ai-analysis.agent.role.trader":"Stratège exécutif","ai-analysis.agent.risky":"analyste activiste","ai-analysis.agent.role.risky":"stratégie agressive","ai-analysis.agent.neutral":"analyste d'équilibre","ai-analysis.agent.role.neutral":"stratégie d'équilibrage","ai-analysis.agent.safe":"analyste conservateur","ai-analysis.agent.role.safe":"stratégie conservatrice","ai-analysis.agent.cro":"Responsable du contrôle des risques (CRO)","ai-analysis.agent.role.cro":"autorité décisionnelle finale","ai-analysis.script.market":"Récupération des données OHLCV des principaux échanges...","ai-analysis.script.fundamental":"Récupération des rapports financiers trimestriels...","ai-analysis.script.technical":"Analyser les indicateurs techniques et les modèles de graphiques...","ai-analysis.script.news":"Analyse de l'actualité financière mondiale...","ai-analysis.script.sentiment":"Analyser les tendances des réseaux sociaux...","ai-analysis.script.risk":"Calcul de la volatilité historique...","invite.inviteLink":"Lien d'invitation","invite.copy":"Copier le lien","invite.copySuccess":"Copiez avec succès !","invite.copyFailed":"Échec de la copie, veuillez copier manuellement","invite.noInviteLink":"Lien d'invitation non généré","invite.totalInvites":"Invitations cumulées","invite.totalReward":"Récompenses cumulées","invite.rules":"Règles d'invitation","invite.rule1":"Chaque fois que vous invitez avec succès un ami à s'inscrire, vous recevrez une récompense","invite.rule2":"Si l'ami invité termine la première transaction, vous recevrez des récompenses supplémentaires","invite.rule3":"Les récompenses d'invitation seront envoyées directement sur votre compte","invite.inviteList":"Liste d'invitations","invite.tasks":"centre de mission","invite.inviteeName":"Invité","invite.inviteTime":"Heure d'invitation","invite.status":"Statut","invite.reward":"récompense","invite.active":"actif","invite.inactive":"Non activé","invite.completed":"Terminé","invite.claimed":"Reçu","invite.pending":"A compléter","invite.goToTask":"compléter","invite.claimReward":"réclamer des récompenses","invite.verify":"Vérification terminée","invite.verifySuccess":"Vérification réussie ! Tâche terminée","invite.verifyNotCompleted":"La tâche n'est pas encore terminée, veuillez d'abord la terminer","invite.verifyFailed":"La vérification a échoué, veuillez réessayer plus tard","invite.claimSuccess":"Vous avez reçu avec succès {reward} QDT !","invite.claimFailed":"Échec de la collecte, veuillez réessayer plus tard","invite.totalRecords":"{total} enregistrements au total","invite.task.twitter.title":"Retweeter sur X (Twitter)","invite.task.twitter.desc":"Partagez nos tweets officiels sur votre compte X (Twitter)","invite.task.youtube.title":"Suivez notre chaîne YouTube","invite.task.youtube.desc":"Abonnez-vous et suivez notre chaîne YouTube officielle","invite.task.telegram.title":"Rejoindre le groupe Telegram","invite.task.telegram.desc":"Rejoignez notre groupe communautaire officiel Telegram","invite.task.discord.title":"Rejoignez un serveur Discord","invite.task.discord.desc":"Rejoignez notre serveur communautaire Discord",message:"-","layouts.usermenu.dialog.title":"informations","layouts.usermenu.dialog.content":"Êtes-vous sûr de vouloir vous déconnecter ?","layouts.userLayout.title":"Trouver la vérité dans l'incertitude","dashboard.indicator.boundary.message":"Note: The indicator script only computes plots + buy/sell signals. Position sizing, risk, scaling, fees/slippage belong to execution config.","dashboard.indicator.boundary.indicatorRule":"Keep the script to buy/sell only (and set df['buy']/df['sell']). Do NOT implement position management, TP/SL, scaling in the script.","dashboard.indicator.boundary.backtestRule":"Rule: If a bar has a main signal (buy/sell → open/close/reverse), scaling in/out is skipped on the same bar.","dashboard.indicator.guide.title":"Python Indicator & Strategy Development Guide","dashboard.indicator.guide.intro":"This platform supports writing custom technical indicators and trading signals using Python. The system includes built-in pandas and numpy data analysis libraries. You can use standard DataFrame operations to process K-line data and draw charts or mark buy/sell signals.","dashboard.indicator.guide.section1.title":"1. Runtime Environment & Predefined Variables","dashboard.indicator.guide.section1.env":"Your code runs in a browser-based Python environment (Pyodide).","dashboard.indicator.guide.section1.libs":"Pre-installed Libraries","dashboard.indicator.guide.section1.libsDesc":"The following libraries are imported by default, no need to import again:","dashboard.indicator.guide.section1.libsList":"pandas (pd), numpy (np), math, json","dashboard.indicator.guide.section1.data":"Input Data: df","dashboard.indicator.guide.section1.dataDesc":"The system automatically converts current K-line data into a Pandas DataFrame object, variable name is df.","dashboard.indicator.guide.section1.dataColumns":"df contains the following columns (all float type):","dashboard.indicator.guide.section1.dataColumnsList":"time (timestamp, seconds), open, high, low, close, volume","dashboard.indicator.guide.section1.dataNote":"Data index is arranged from old to new (0 is the earliest data, last row is the latest data).","dashboard.indicator.guide.section1.dataIndex":"Important: df index is timestamp (DatetimeIndex), please preserve the index, avoid using .values which loses the index.","dashboard.indicator.guide.section2.title":"2. Parameter Definition","dashboard.indicator.guide.section2.desc":"You can define variables as parameters at the beginning of your code. The system will try to parse statements like variable = value as adjustable parameters.","dashboard.indicator.guide.section2.example":"Parameter Example","dashboard.indicator.guide.section2.exampleCode":"span = 20 or multiplier = 2.0","dashboard.indicator.guide.section3.title":"3. Backtest Signal Setup (Important!)","dashboard.indicator.guide.section3.desc":"If you want your indicator to support backtesting, you must set the following two columns in your code:","dashboard.indicator.guide.section3.backtestRequired":"Required for Backtesting:","dashboard.indicator.guide.section3.backtestBuySignal":"df['buy_signal'] - Boolean Series, True indicates buy signal","dashboard.indicator.guide.section3.backtestSellSignal":"df['sell_signal'] - Boolean Series, True indicates sell signal","dashboard.indicator.guide.section3.backtestExample":"Example:","dashboard.indicator.guide.section3.backtestExampleCode":"df['buy_signal'] = condition_buy
df['sell_signal'] = condition_sell","dashboard.indicator.guide.section3.backtestNote":"Note: Even if you only set output.signals for chart display, you must set these two columns to enable backtesting.","dashboard.indicator.guide.section4.title":"4. Output Requirements: output","dashboard.indicator.guide.section4.desc":"At the end of code execution, you must define a dictionary named output to tell the chart how to display results.","dashboard.indicator.guide.section4.fields":"The output dictionary contains the following fields:","dashboard.indicator.guide.section4.plots":"plots - For drawing lines (e.g., moving averages, RSI)","dashboard.indicator.guide.section4.signals":"signals - For marking buy/sell signals (e.g., arrows, labels)","dashboard.indicator.guide.section4.name":"name - Indicator name (optional)","dashboard.indicator.guide.section4.calculatedVars":"calculatedVars - Calculated variables (optional, for displaying additional information)","dashboard.indicator.guide.section5.title":"5. Plot Configuration (Plots)","dashboard.indicator.guide.section5.desc":"Each object in the plots list represents a line.","dashboard.indicator.guide.section5.table.field":"Field","dashboard.indicator.guide.section5.table.type":"Type","dashboard.indicator.guide.section5.table.required":"Required","dashboard.indicator.guide.section5.table.requiredYes":"Yes","dashboard.indicator.guide.section5.table.requiredNo":"No","dashboard.indicator.guide.section5.table.desc":"Description","dashboard.indicator.guide.section5.table.name":"The name of the indicator line, displayed in the legend","dashboard.indicator.guide.section5.table.data":"Data list, length must match the number of rows in df. Recommended to use series.tolist()","dashboard.indicator.guide.section5.table.color":"Line color (Hex format, e.g. '#ff0000'). If not filled, the system will automatically assign","dashboard.indicator.guide.section5.table.typeDesc":"Chart type, default is 'line'","dashboard.indicator.guide.section5.table.overlay":"Important. True means display on main chart (with K-line), False means display on sub-chart (independent area)","dashboard.indicator.guide.section5.example":"Example: Draw Simple Moving Average (SMA)","dashboard.indicator.guide.section5.exampleCalc":"Calculate SMA","dashboard.indicator.guide.section5.exampleOutput":"Construct Output","dashboard.indicator.guide.section5.exampleOverlay":"Display on main chart","dashboard.indicator.guide.section6.title":"6. Signal Markers (Signals)","dashboard.indicator.guide.section6.desc":"signals are used to mark buy/sell points on specific K-lines through icons or text. Note: This is only for chart display. The backtest system uses df['buy_signal'] and df['sell_signal'].","dashboard.indicator.guide.section6.table.type":"Signal type: 'buy' (buy, marked below K-line) or 'sell' (sell, marked above K-line)","dashboard.indicator.guide.section6.table.data":"Signal data list. Fill price value at signal positions, fill None (or np.nan) at non-signal positions","dashboard.indicator.guide.section6.table.text":'Text displayed on the label (e.g. "B", "S", "Buy", "Sell")',"dashboard.indicator.guide.section6.table.color":"Marker color","dashboard.indicator.guide.section6.hint":"The system automatically handles positioning.","dashboard.indicator.guide.section6.buy":"Markers will be automatically positioned below the Low of the current K-line","dashboard.indicator.guide.section6.sell":"Markers will be automatically positioned above the High of the current K-line","dashboard.indicator.guide.section6.example":"Example: Draw Buy/Sell Signals","dashboard.indicator.guide.section6.exampleInit":"Initialize signal list, fill all with None","dashboard.indicator.guide.section6.exampleLogic":"Simple logic: mark buy when close price is greater than open price","dashboard.indicator.guide.section6.exampleNote":"In actual logic, please use loops or vectorized operations","dashboard.indicator.guide.section6.examplePrice":"Record price","dashboard.indicator.guide.section6.exampleText":"Buy","dashboard.indicator.guide.section7.title":"7. Complete Code Examples","dashboard.indicator.guide.section7.exampleA":"Example A: Dual EMA Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleACode":'# 1. Calculate indicators
df[\'ema_fast\'] = df[\'close\'].ewm(span=5, adjust=False).mean()
df[\'ema_slow\'] = df[\'close\'].ewm(span=13, adjust=False).mean()

# 2. Calculate crossover signals
cross_up = (df[\'ema_fast\'] > df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) <= df[\'ema_slow\'].shift(1))
cross_down = (df[\'ema_fast\'] < df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) >= df[\'ema_slow\'].shift(1))

# 3. 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = cross_up
df[\'close_long\'] = cross_down
df[\'open_short\'] = cross_down
df[\'close_short\'] = cross_up

# 4. Generate signal data for chart display
buy_signals = [df[\'low\'].iloc[i] * 0.995 if cross_up.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if cross_down.iloc[i] else None for i in range(len(df))]

# 5. Build output
output = {
"name": "Dual EMA Strategy",
"plots": [
{"name": "EMA 5", "data": df[\'ema_fast\'].tolist(), "color": "#FF6B6B", "overlay": True},
{"name": "EMA 13", "data": df[\'ema_slow\'].tolist(), "color": "#4ECDC4", "overlay": True}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section7.exampleB":"Example B: Bollinger Bands - Chart Display Only","dashboard.indicator.guide.section7.exampleBCode":'# Calculate Bollinger Bands (chart display only, no backtesting)
length = 20
mult = 2.0
df[\'sma\'] = df[\'close\'].rolling(length).mean()
df[\'std\'] = df[\'close\'].rolling(length).std()
df[\'upper\'] = df[\'sma\'] + mult * df[\'std\']
df[\'lower\'] = df[\'sma\'] - mult * df[\'std\']

output = {
"name": "Bollinger Bands",
"plots": [
{"name": "Upper", "data": df[\'upper\'].tolist(), "color": "#FF5252", "overlay": True},
{"name": "Middle", "data": df[\'sma\'].tolist(), "color": "#2196F3", "overlay": True},
{"name": "Lower", "data": df[\'lower\'].tolist(), "color": "#00E676", "overlay": True}
]
}',"dashboard.indicator.guide.section7.exampleC":"Example C: RSI Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleCCode":'# Calculate RSI
delta = df[\'close\'].diff()
up = delta.clip(lower=0)
down = -1 * delta.clip(upper=0)
ema_up = up.ewm(com=13, adjust=False).mean()
ema_down = down.ewm(com=13, adjust=False).mean()
rs = ema_up / ema_down
df[\'rsi\'] = 100 - (100 / (1 + rs))

# Generate trading signals
buy_condition = df[\'rsi\'] < 30 # Oversold buy
sell_condition = df[\'rsi\'] > 70 # Overbought sell

# 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = buy_condition
df[\'close_long\'] = sell_condition
df[\'open_short\'] = sell_condition
df[\'close_short\'] = buy_condition

# Generate chart signals
buy_signals = [df[\'low\'].iloc[i] * 0.995 if buy_condition.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if sell_condition.iloc[i] else None for i in range(len(df))]

output = {
"name": "RSI Strategy",
"plots": [
{"name": "RSI", "data": df[\'rsi\'].tolist(), "color": "#9C27B0", "overlay": False},
{"name": "Overbought", "data": [70] * len(df), "color": "#FF5252", "style": "dashed", "overlay": False},
{"name": "Oversold", "data": [30] * len(df), "color": "#00E676", "style": "dashed", "overlay": False}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section6.param":"Parameters","dashboard.indicator.guide.section6.calc":"Calculate","dashboard.indicator.guide.section6.output":"Output","dashboard.indicator.guide.section6.generate":"Generate signal data (initialize with None)","dashboard.indicator.guide.section6.subchart":"Display on sub-chart","dashboard.indicator.guide.section8.title":"8. Frequently Asked Questions (FAQ)","dashboard.indicator.guide.section8.q1":"Q: Why can't my indicator be backtested?","dashboard.indicator.guide.section8.a1":"A: The backtest system requires NEW signal columns: df['open_long'], df['close_long'], df['open_short'], df['close_short'] (boolean). Even if you set output.signals for chart display, you must set these columns to enable backtesting.","dashboard.indicator.guide.section8.q2":"Q: Data length mismatch?","dashboard.indicator.guide.section8.a2":"A: The data list in plots and signals must have exactly the same length as the K-line data. If you use df['xxx'].tolist(), there is usually no problem.","dashboard.indicator.guide.section8.q3":"Q: How to handle NaN (empty values)?","dashboard.indicator.guide.section8.a3":"A: Pandas calculations (such as rolling mean) will produce NaN at the beginning. The system will automatically convert NaN to null for chart rendering. You don't need to manually clean it, but if you need specific logic, you can use df.fillna(0) or other methods.","dashboard.indicator.guide.section8.q4":"Q: Index mismatch causing all signals to be NaN?","dashboard.indicator.guide.section8.a4":"A: Please ensure you preserve the original df index (timestamp). Avoid using .values to create new Series. Use columns directly like df['close'] for operations.","dashboard.indicator.guide.section8.q5":"Q: Can I use third-party network libraries?","dashboard.indicator.guide.section8.a5":"A: No. The runtime environment is a browser sandbox and cannot use libraries like requests to request external APIs, nor can it install additional pip packages. Limited to built-in libraries such as pandas, numpy, math, json.","dashboard.indicator.guide.section8.q6":"Q: How to debug code?","dashboard.indicator.guide.section8.a6":"A: If the chart does not display indicators, it is usually because the Python code has an error. Please check for syntax errors or array index out of bounds. It is recommended to debug the algorithm logic in a local Python environment first, then copy it in.","dashboard.indicator.guide.section8.q7":"Q: Backtest shows 0 signals?","dashboard.indicator.guide.section8.a7":"A: Please check the data type of df['open_long']/df['close_long']/df['open_short']/df['close_short']. They should be boolean (True/False), not numeric. Use condition.fillna(False).astype(bool) to ensure correct type.","dashboard.indicator.backtest.commissionHint":"Charged on notional value (incl. leverage) per trade; both entry & exit are deducted from balance.","dashboard.indicator.backtest.historyTitle":"Backtest History","dashboard.indicator.backtest.historyRefresh":"Refresh","dashboard.indicator.backtest.historyView":"View","dashboard.indicator.backtest.historyNoData":"No backtest history","dashboard.indicator.backtest.historyUseCurrent":"Only current symbol/timeframe","dashboard.indicator.backtest.historyFilterSymbol":"Symbol","dashboard.indicator.backtest.historyFilterTimeframe":"Timeframe","dashboard.indicator.backtest.historyApply":"Apply filters","dashboard.indicator.backtest.historyAIAnalyze":"AI Analyze","dashboard.indicator.backtest.historyAIAnalyzeTitle":"AI Suggestions","dashboard.indicator.backtest.historyNoAIResult":"No AI analysis result","dashboard.indicator.backtest.historyRunId":"Run ID","dashboard.indicator.backtest.historyCreatedAt":"Time","dashboard.indicator.backtest.historyRange":"Range","dashboard.indicator.backtest.historyStatus":"Status","dashboard.indicator.backtest.historyStatusSuccess":"Success","dashboard.indicator.backtest.historyStatusFailed":"Failed","dashboard.indicator.backtest.historyActions":"Actions","dashboard.indicator.backtest.hint.entryPctMax":"Max entry: {maxPct}% (reserve budget for future scale-ins)","trading-assistant.exchange.ipWhitelistTip":"Please add the following IPs to the whitelist in your exchange API settings:","signal-robot.title":"Signal Robot Console","signal-robot.createBot":"Create New Bot","signal-robot.search.nameOrSymbol":"Name/Symbol","signal-robot.search.placeholder":"Search bot name or symbol","signal-robot.search.status":"Status","signal-robot.search.statusAll":"All","signal-robot.search.statusRunning":"Running","signal-robot.search.statusPaused":"Paused","signal-robot.search.query":"Query","signal-robot.search.reset":"Reset","signal-robot.table.botName":"Bot Name","signal-robot.table.symbolTimeframe":"Symbol/Timeframe","signal-robot.table.triggerStrategy":"Trigger Strategy","signal-robot.table.notificationChannels":"Notification Channels","signal-robot.table.status":"Status","signal-robot.table.action":"Action","signal-robot.table.triggerConditions":"{count} trigger conditions","signal-robot.table.monitoring":"Monitoring","signal-robot.table.paused":"Paused","signal-robot.table.edit":"Edit","signal-robot.table.pause":"Pause","signal-robot.table.start":"Start","signal-robot.table.delete":"Delete","signal-robot.table.deleteConfirm":"Are you sure you want to delete this bot?","signal-robot.table.deleteSuccess":"Deleted successfully","signal-robot.table.startSuccess":"Bot started","signal-robot.table.pauseSuccess":"Bot paused","signal-robot.channel.telegram":"Telegram","signal-robot.channel.discord":"Discord","signal-robot.channel.email":"Email","signal-robot.channel.webhook":"Webhook","signal-robot.channel.browser":"Browser Push","signal-robot.modal.createTitle":"Create New Signal Robot","signal-robot.modal.editTitle":"Edit Signal Robot","signal-robot.modal.step.basic":"Basic Settings","signal-robot.modal.step.entry":"Entry Strategy","signal-robot.modal.step.position":"Position Management","signal-robot.modal.step.risk":"Risk Control","signal-robot.modal.step.notify":"Notification Config","signal-robot.modal.prev":"Previous","signal-robot.modal.next":"Next","signal-robot.modal.preview":"Preview Backtest","signal-robot.modal.complete":"Complete & Run","signal-robot.modal.saveSuccess":"Saved successfully","signal-robot.modal.previewDeveloping":"Preview feature is under development...","signal-robot.modal.basicInfoRequired":"Please complete basic information","signal-robot.basic.alert":"Set basic information for the bot","signal-robot.basic.title":"Basic Information","signal-robot.basic.botName":"Bot Name","signal-robot.basic.botNamePlaceholder":"e.g.: BTC SuperTrend Strategy","signal-robot.basic.symbol":"Trading Pair","signal-robot.basic.symbolPlaceholder":"Select from watchlist","signal-robot.basic.noWatchlist":"No watchlist items, please add in market page first","signal-robot.basic.timeframe":"K-Line Period","signal-robot.basic.timeframe15m":"15 Minutes","signal-robot.basic.timeframe30m":"30 Minutes","signal-robot.basic.timeframe1h":"1 Hour","signal-robot.basic.timeframe4h":"4 Hours","signal-robot.basic.timeframe1d":"1 Day","signal-robot.basic.autoNameSuggestion":"{symbol} Signal Robot","signal-robot.entry.alert":"Trigger entry signal when all conditions below are met","signal-robot.entry.condition":"Condition {index}","signal-robot.entry.indicator":"Indicator","signal-robot.entry.indicatorSupertrend":"SuperTrend","signal-robot.entry.indicatorEma":"EMA (Exponential Moving Average)","signal-robot.entry.indicatorRsi":"RSI (Relative Strength Index)","signal-robot.entry.indicatorMacd":"MACD","signal-robot.entry.indicatorBollinger":"Bollinger Bands","signal-robot.entry.atrPeriod":"ATR Period","signal-robot.entry.multiplier":"Multiplier","signal-robot.entry.triggerSignal":"Trigger Signal","signal-robot.entry.signalTrendBullish":"Trend Bullish","signal-robot.entry.signalTrendBearish":"Trend Bearish","signal-robot.entry.signalIsUptrend":"Is Uptrend","signal-robot.entry.signalIsDowntrend":"Is Downtrend","signal-robot.entry.period":"Period","signal-robot.entry.compareCondition":"Compare Condition","signal-robot.entry.priceAbove":"Price > EMA (Price Above)","signal-robot.entry.priceBelow":"Price < EMA (Price Below)","signal-robot.entry.crossUp":"Price Crosses Above EMA (Golden Cross)","signal-robot.entry.crossDown":"Price Crosses Below EMA (Death Cross)","signal-robot.entry.compare":"Compare","signal-robot.entry.greaterThan":"Greater Than","signal-robot.entry.lessThan":"Less Than","signal-robot.entry.crossUpShort":"Cross Up","signal-robot.entry.crossDownShort":"Cross Down","signal-robot.entry.threshold":"Threshold","signal-robot.entry.selectIndicator":"Please select an indicator to configure parameters","signal-robot.entry.addCondition":"Add Condition","signal-robot.position.alert":"Configure initial position size, leverage and pyramiding rules","signal-robot.position.basicTitle":"Basic Position Management","signal-robot.position.initialSize":"Initial Size (Capital %)","signal-robot.position.initialSizeHint":"Recommended 5% - 20%","signal-robot.position.leverage":"Leverage","signal-robot.position.leverageHint":"Please ensure your exchange account supports this leverage","signal-robot.position.maxPyramiding":"Max Pyramiding Times","signal-robot.position.maxPyramidingHint":"0 means no pyramiding","signal-robot.position.pyramidingTitle":"Pyramiding Rules","signal-robot.position.pyramidingEnabled":"Enabled","signal-robot.position.pyramidingDisabled":"Disabled","signal-robot.position.pyramidingCondition":"Pyramiding Trigger Condition","signal-robot.position.priceRisePct":"Price Rises (Long) / Falls (Short)","signal-robot.position.profitPct":"Profit Reaches","signal-robot.position.triggerThreshold":"Trigger Threshold (%)","signal-robot.position.triggerThresholdHint":"e.g. 3%: add position once every 3% rise","signal-robot.position.addSize":"Single Add Size (Capital %)","signal-robot.position.pyramidingDisabledHint":"Pyramiding disabled, only initial position will be executed","signal-robot.risk.alert":"Configure take profit, stop loss and exit rules","signal-robot.risk.stopLossTitle":"Stop Loss","signal-robot.risk.stopLossEnabled":"Enabled","signal-robot.risk.stopLossDisabled":"Disabled","signal-robot.risk.stopLossType":"Stop Loss Type","signal-robot.risk.stopLossFixedPct":"Fixed Percentage","signal-robot.risk.stopLossAtrMultiplier":"ATR Multiplier","signal-robot.risk.stopLossValue":"Value","signal-robot.risk.stopLossFixedHint":"e.g. 2%: stop loss when loss reaches 2%","signal-robot.risk.stopLossAtrHint":"e.g. 2.0: stop loss when price touches ATR*2.0","signal-robot.risk.stopLossDisabledHint":"Stop loss disabled (high risk)","signal-robot.risk.trailingStopTitle":"Trailing Stop","signal-robot.risk.activationProfit":"Activation Profit (%)","signal-robot.risk.activationProfitHint":"Start trailing when profit reaches this level","signal-robot.risk.callbackPct":"Callback (%)","signal-robot.risk.callbackPctHint":"Trigger take profit when price falls from peak by this percentage","signal-robot.risk.trailingStopDisabledHint":"Trailing stop disabled","signal-robot.risk.otherExitTitle":"Other Exit Rules","signal-robot.risk.signalExit":"Allow Signal Exit","signal-robot.risk.signalExitHint":"Close position immediately when reverse signal appears (e.g. close long when short signal appears)","signal-robot.notify.alert":"Configure notification methods when signal is triggered","signal-robot.notify.channelTitle":"Notification Channels","signal-robot.notify.discordWebhook":"Discord Webhook","signal-robot.notify.genericWebhook":"Generic Webhook","signal-robot.notify.webhookUrl":"Webhook URL","signal-robot.notify.webhookUrlPlaceholder":"https://example.com/webhook","signal-robot.notify.discordUrl":"Discord URL","signal-robot.notify.discordUrlPlaceholder":"https://discord.com/api/webhooks/...","signal-robot.operator.greaterThan":"Greater Than","signal-robot.operator.lessThan":"Less Than","signal-robot.operator.equal":"Equal","signal-robot.operator.goldenCross":"Golden Cross","signal-robot.operator.deathCross":"Death Cross","signal-robot.operator.increaseBy":"Increase By","signal-robot.operator.decreaseBy":"Decrease By","signal-robot.indicator.price":"Price","signal-robot.indicator.rsi":"RSI","signal-robot.indicator.kdjK":"KDJ(K)","signal-robot.indicator.kdjJ":"KDJ(J)","signal-robot.indicator.macd":"MACD","signal-robot.indicator.macdHist":"MACD Histogram","signal-robot.indicator.bollingerUp":"Bollinger Upper","signal-robot.indicator.bollingerLow":"Bollinger Lower","signal-robot.indicator.volume":"Volume","signal-robot.indicator.changePct1h":"1H Change %","signal-robot.indicator.changePct24h":"24H Change %","signal-robot.indicator.signalLine":"Signal Line","settings.group.agent_memory":"Mémoire/Réflexion","settings.group.reflection_worker":"Worker de vérification de réflexion automatique","settings.field.ENABLE_AGENT_MEMORY":"Activer la mémoire de l’agent","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"Activer la recherche vectorielle (local)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"Dimension d’embedding","settings.field.AGENT_MEMORY_TOP_K":"Nombre Top-K","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"Taille de la fenêtre de candidats","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"Demi-vie de décroissance temporelle (jours)","settings.field.AGENT_MEMORY_W_SIM":"Poids de similarité","settings.field.AGENT_MEMORY_W_RECENCY":"Poids de récence","settings.field.AGENT_MEMORY_W_RETURNS":"Poids des rendements","settings.field.ENABLE_REFLECTION_WORKER":"Activer la vérification automatique","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"Intervalle de vérification (s)","profile.notifications.title":"Paramètres de notification","profile.notifications.hint":"Configurez vos méthodes de notification par défaut, utilisées automatiquement lors de la création de surveillances et alertes","profile.notifications.defaultChannels":"Canaux de notification par défaut","profile.notifications.browser":"Notification dans l'app","profile.notifications.email":"E-mail","profile.notifications.phone":"SMS","profile.notifications.telegramBotToken":"Token du Bot Telegram","profile.notifications.telegramBotTokenPlaceholder":"Entrez votre Token Bot Telegram","profile.notifications.telegramBotTokenHint":"Créez un bot via @BotFather pour obtenir le Token","profile.notifications.telegramChatId":"Chat ID Telegram","profile.notifications.telegramPlaceholder":"Entrez votre Chat ID Telegram (ex: 123456789)","profile.notifications.telegramHint":"Envoyez /start à @userinfobot pour obtenir votre Chat ID","profile.notifications.notifyEmail":"E-mail de notification","profile.notifications.emailPlaceholder":"Adresse e-mail pour recevoir les notifications","profile.notifications.emailHint":"Utilise l'e-mail du compte par défaut, vous pouvez en définir un autre","profile.notifications.phonePlaceholder":"Entrez le numéro de téléphone (ex: +33612345678)","profile.notifications.phoneHint":"L'administrateur doit configurer le service Twilio","profile.notifications.discordWebhook":"Webhook Discord","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"Créez un Webhook dans les paramètres du serveur Discord","profile.notifications.webhookUrl":"URL Webhook","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"URL Webhook personnalisée, notifications envoyées via POST JSON","profile.notifications.webhookToken":"Token Webhook (Optionnel)","profile.notifications.webhookTokenPlaceholder":"Bearer Token pour l'authentification","profile.notifications.webhookTokenHint":"Envoyé comme Authorization: Bearer Token au Webhook","profile.notifications.testBtn":"Envoyer une notification test","profile.notifications.saveSuccess":"Paramètres de notification enregistrés","profile.notifications.selectChannel":"Veuillez sélectionner au moins un canal de notification","profile.notifications.fillTelegramToken":"Veuillez remplir le Token Bot Telegram","profile.notifications.fillTelegram":"Veuillez remplir le Chat ID Telegram","profile.notifications.fillEmail":"Veuillez remplir l'e-mail de notification","profile.notifications.testSent":"Notification test envoyée, vérifiez vos canaux de notification"},y=(0,i.A)((0,i.A)({},h),f)}}]); \ No newline at end of file +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[969],{92556:function(e,a,t){t.d(a,{default:function(){return y}});var i=t(76338),s={items_per_page:"/ page",jump_to:"Aller à",jump_to_confirm:"confirmer",page:"",prev_page:"Page précédente",next_page:"Page suivante",prev_5:"5 Pages précédentes",next_5:"5 Pages suivantes",prev_3:"3 Pages précédentes",next_3:"3 Pages suivantes"},r=t(85505),n={today:"Aujourd'hui",now:"Maintenant",backToToday:"Aujourd'hui",ok:"Ok",clear:"Rétablir",month:"Mois",year:"Année",timeSelect:"Sélectionner l'heure",dateSelect:"Sélectionner la date",monthSelect:"Choisissez un mois",yearSelect:"Choisissez une année",decadeSelect:"Choisissez une décennie",yearFormat:"YYYY",dateFormat:"DD/MM/YYYY",dayFormat:"DD",dateTimeFormat:"DD/MM/YYYY HH:mm:ss",monthBeforeYear:!0,previousMonth:"Mois précédent (PageUp)",nextMonth:"Mois suivant (PageDown)",previousYear:"Année précédente (Ctrl + gauche)",nextYear:"Année prochaine (Ctrl + droite)",previousDecade:"Décennie précédente",nextDecade:"Décennie suivante",previousCentury:"Siècle précédent",nextCentury:"Siècle suivant"},o={placeholder:"Sélectionner l'heure"},d=o,l={lang:(0,r.A)({placeholder:"Sélectionner une date",rangePlaceholder:["Date de début","Date de fin"]},n),timePickerLocale:(0,r.A)({},d)},c=l,u=c,m={locale:"fr",Pagination:s,DatePicker:c,TimePicker:d,Calendar:u,Table:{filterTitle:"Filtrer",filterConfirm:"OK",filterReset:"Réinitialiser"},Modal:{okText:"OK",cancelText:"Annuler",justOkText:"OK"},Popconfirm:{okText:"OK",cancelText:"Annuler"},Transfer:{searchPlaceholder:"Recherche",itemUnit:"élément",itemsUnit:"éléments"},Empty:{description:"Aucune donnée"},Upload:{uploading:"Téléchargement...",removeFile:"Effacer le fichier",uploadError:"Erreur de téléchargement",previewFile:"Fichier de prévisualisation",downloadFile:"Télécharger un fichier"},Text:{edit:"éditer",copy:"copier",copied:"copie effectuée",expand:"développer"}},g=m,p=t(85498),b=t.n(p),h={antLocale:g,momentName:"fr",momentLocale:b()},f={submit:"Soumettre",save:"enregistrer","submit.ok":"Soumission réussie","save.ok":"Enregistré avec succès","menu.welcome":"bienvenue","menu.home":"Page d'accueil","menu.dashboard":"Tableau de bord","menu.dashboard.indicator":"Analyse des indicateurs","menu.dashboard.community":"communauté des indicateurs","menu.dashboard.analysis":"Analyse de l'IA","menu.dashboard.tradingAssistant":"Assistante commerciale","menu.dashboard.aiTradingAssistant":"Assistant de trading IA","menu.dashboard.signalRobot":"Robot de signal","menu.dashboard.monitor":"Page de surveillance","menu.dashboard.workplace":"établi","menu.form":"page de formulaire","menu.form.basic-form":"forme de base","menu.form.step-form":"formulaire étape par étape","menu.form.step-form.info":"Formulaire étape par étape (remplir les informations de transfert)","menu.form.step-form.confirm":"Formulaire étape par étape (confirmer les informations de transfert)","menu.form.step-form.result":"Formulaire étape par étape (à compléter)","menu.form.advanced-form":"Formulaires avancés","menu.list":"Page de liste","menu.list.table-list":"Formulaire de demande","menu.list.basic-list":"Liste standard","menu.list.card-list":"liste de cartes","menu.list.search-list":"liste de recherche","menu.list.search-list.articles":"Liste de recherche (articles)","menu.list.search-list.projects":"Liste de recherche (projet)","menu.list.search-list.applications":"Liste de recherche (application)","menu.profile":"Page de détails","menu.profile.basic":"Page de détails de base","menu.profile.advanced":"Page de détails avancés","menu.result":"Page de résultats","menu.result.success":"page de réussite","menu.result.fail":"page d'échec","menu.exception":"Page d'exceptions","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"erreur de déclenchement","menu.account":"Page personnelle","menu.account.center":"Centre personnel","menu.account.settings":"paramètres personnels","menu.account.trigger":"Erreur de déclenchement","menu.account.logout":"Se déconnecter","menu.wallet":"mon portefeuille","menu.docs":"Centre de documentation","menu.docs.detail":"Détails du document","menu.header.refreshPage":"actualiser la page","menu.invite.friends":"Inviter des amis","app.setting.pagestyle":"paramètres de style généraux","app.setting.pagestyle.light":"Style de menu lumineux","app.setting.pagestyle.dark":"style de menu sombre","app.setting.pagestyle.realdark":"mode sombre","app.setting.themecolor":"couleur du thème","app.setting.navigationmode":"Mode navigation","app.setting.sidemenu.nav":"Navigation dans la barre latérale","app.setting.topmenu.nav":"Navigation dans la barre supérieure","app.setting.content-width":"largeur de la zone de contenu","app.setting.content-width.tooltip":"Ce paramètre n'est efficace que lorsque [Navigation dans la barre supérieure]","app.setting.content-width.fixed":"Corrigé","app.setting.content-width.fluid":"diffusion en continu","app.setting.fixedheader":"En-tête fixe","app.setting.fixedheader.tooltip":"Configurable lorsqu'il est fixe","app.setting.autoHideHeader":"Masquer l'en-tête lors du défilement","app.setting.fixedsidebar":"Menu latéral fixe","app.setting.sidemenu":"Disposition du menu latéral","app.setting.topmenu":"Disposition du menu supérieur","app.setting.othersettings":"Autres paramètres","app.setting.weakmode":"Mode de faiblesse des couleurs","app.setting.multitab":"Mode multi-onglets","app.setting.copy":"Paramètres de copie","app.setting.loading":"Chargement du thème","app.setting.copyinfo":"Copiez les paramètres avec succès src/config/defaultSettings.js","app.setting.copy.success":"Copie terminée","app.setting.copy.fail":"Échec de la copie","app.setting.theme.switching":"Changer de thème !","app.setting.production.hint":"La barre de configuration est uniquement utilisée pour l'aperçu dans l'environnement de développement et ne sera pas affichée dans l'environnement de production. Veuillez copier et modifier le fichier de configuration manuellement.","app.setting.themecolor.daybreak":"Bleu aube (par défaut)","app.setting.themecolor.dust":"crépuscule","app.setting.themecolor.volcano":"volcan","app.setting.themecolor.sunset":"coucher de soleil","app.setting.themecolor.cyan":"Mingqing","app.setting.themecolor.green":"aurore verte","app.setting.themecolor.geekblue":"bleu geek","app.setting.themecolor.purple":"Jiang Zi","app.setting.tooltip":"Paramètres des pages","user.login.userName":"Nom d'utilisateur","user.login.password":"Mot de passe","user.login.username.placeholder":"Compte : administrateur","user.login.password.placeholder":"Mot de passe : admin ou ant.design","user.login.message-invalid-credentials":"La connexion a échoué, veuillez vérifier votre e-mail et votre code de vérification","user.login.message-invalid-verification-code":"Erreur de code de vérification","user.login.tab-login-credentials":"Connexion par mot de passe du compte","user.login.tab-login-email":"Connexion par e-mail","user.login.tab-login-mobile":"Connexion au numéro de téléphone portable","user.login.captcha.placeholder":"Veuillez saisir le code de vérification graphique","user.login.mobile.placeholder":"Numéro de téléphone portable","user.login.mobile.verification-code.placeholder":"Code de vérification","user.login.email.placeholder":"Veuillez entrer votre adresse e-mail","user.login.email.verification-code.placeholder":"Veuillez entrer le code de vérification","user.login.email.sending":"Le code de vérification est en cours d'envoi...","user.login.email.send-success-title":"Conseils","user.login.email.send-success":"Code de vérification envoyé avec succès, veuillez vérifier votre email","user.login.sms.send-success":"Code de vérification envoyé avec succès, veuillez vérifier le message texte","user.login.remember-me":"Connexion automatique","user.login.forgot-password":"Mot de passe oublié","user.login.sign-in-with":"Autres méthodes de connexion","user.login.signup":"Créer un compte","user.login.login":"Connexion","user.register.register":"S'inscrire","user.register.email.placeholder":"Courriel","user.register.password.placeholder":"Veuillez saisir au moins 6 caractères. Veuillez ne pas utiliser de mots de passe faciles à deviner.","user.register.password.popover-message":"Veuillez saisir au moins 6 caractères. Veuillez ne pas utiliser de mots de passe faciles à deviner.","user.register.confirm-password.placeholder":"Confirmer le mot de passe","user.register.get-verification-code":"Obtenir le code de vérification","user.register.sign-in":"Connectez-vous en utilisant un compte existant","user.register-result.msg":"Votre compte : {email} Inscription réussie","user.register-result.activation-email":"L'e-mail d'activation a été envoyé dans votre boîte mail et est valable 24 heures. Veuillez vous connecter rapidement à votre messagerie et cliquer sur le lien contenu dans l'e-mail pour activer votre compte.","user.register-result.back-home":"Retour à la page d'accueil","user.register-result.view-mailbox":"Vérifiez votre boîte aux lettres","user.email.required":"Veuillez entrer votre adresse e-mail !","user.email.wrong-format":"Le format de l'adresse e-mail est incorrect !","user.userName.required":"Veuillez saisir votre nom de compte ou votre adresse e-mail","user.password.required":"Veuillez entrer votre mot de passe !","user.password.twice.msg":"Les mots de passe saisis deux fois ne correspondent pas !","user.password.strength.msg":"Le mot de passe n'est pas assez fort","user.password.strength.strong":"Force : Forte","user.password.strength.medium":"Force : moyenne","user.password.strength.low":"Force : faible","user.password.strength.short":"Force : trop courte","user.confirm-password.required":"Veuillez confirmer votre mot de passe !","user.phone-number.required":"Veuillez saisir le bon numéro de téléphone portable","user.phone-number.wrong-format":"Le format du numéro de téléphone portable est erroné !","user.verification-code.required":"Veuillez entrer le code de vérification !","user.captcha.required":"Veuillez saisir le code de vérification graphique !","user.login.infos":"QuantDinger est un outil auxiliaire d'analyse boursière multi-agents d'IA et n'a pas de qualifications en conseil en investissement en valeurs mobilières. Tous les résultats d'analyse, scores et avis de référence de la plateforme sont automatiquement générés par l'IA sur la base de données historiques et sont utilisés uniquement à des fins d'apprentissage, de recherche et d'échange technique, et ne constituent aucun conseil d'investissement ou base de prise de décision. L'investissement en actions implique divers risques tels que le risque de marché, le risque de liquidité, le risque politique, etc., qui peuvent entraîner une perte du principal. Les utilisateurs doivent prendre des décisions indépendantes en fonction de leur propre tolérance au risque, et tout comportement d'investissement et conséquences découlant de l'utilisation de cet outil seront à la charge de l'utilisateur. Le marché est risqué et les investissements doivent être prudents.","user.login.tab-login-web3":"Connexion Web3","user.login.web3.tip":"Connexion par signature à l'aide du portefeuille","user.login.web3.connect":"Connectez le portefeuille et connectez-vous","user.login.web3.no-wallet":"Portefeuille non détecté","user.login.web3.no-address":"Adresse du portefeuille non obtenue","user.login.web3.nonce-failed":"Impossible d'obtenir un nombre aléatoire","user.login.web3.verify-failed":"La vérification de la signature a échoué","user.login.web3.success":"Connexion réussie","user.login.web3.failed":"Échec de la connexion au portefeuille","nav.no_wallet":"Portefeuille non détecté","nav.copy":"Copier","nav.copy_success":"Copié avec succès","user.login.oauth.google":"Connectez-vous avec Google","user.login.oauth.github":"Connectez-vous avec GitHub","user.login.oauth.loading":"Redirection vers la page d'autorisation...","user.login.oauth.failed":"Échec de la connexion OAuth","user.login.oauth.get-url-failed":"Échec de l'obtention du lien d'autorisation","user.login.subtitle":"Informations quantitatives sur les marchés mondiaux","user.login.legal.title":"Mentions légales","user.login.legal.view":"Voir les mentions légales","user.login.legal.collapse":"Réduire les mentions légales","user.login.legal.agree":"J'ai lu et j'accepte les mentions légales","user.login.legal.required":"Veuillez d'abord lire et vérifier les mentions légales","user.login.legal.content":"QuantDinger est un outil auxiliaire d'analyse boursière multi-agents d'IA et n'a pas de qualifications en conseil en investissement en valeurs mobilières. Tous les résultats d'analyse, notes et avis de référence de la plateforme sont automatiquement générés par l'IA sur la base de données historiques et sont utilisés uniquement à des fins d'apprentissage, de recherche et d'échange technique, et ne constituent aucun conseil d'investissement ou base de prise de décision. L'investissement en actions implique divers risques tels que le risque de marché, le risque de liquidité, le risque politique, etc., qui peuvent entraîner une perte du principal. Les utilisateurs doivent prendre des décisions indépendantes en fonction de leur propre tolérance au risque, et tout comportement d'investissement et conséquences découlant de l'utilisation de cet outil seront à la charge de l'utilisateur. Le marché est risqué et les investissements doivent être prudents.","user.login.privacy.title":"Politique de confidentialité des utilisateurs","user.login.privacy.view":"Afficher la politique de confidentialité des utilisateurs","user.login.privacy.collapse":"Fermer les conditions de confidentialité des utilisateurs","user.login.privacy.content":"Nous accordons une grande importance à votre vie privée et à la protection de vos données. 1) Portée de la collecte : seules les informations nécessaires à la mise en œuvre de la fonction (telles que l'e-mail, le numéro de téléphone mobile, l'indicatif régional, l'adresse du portefeuille Web3) ainsi que les journaux et informations sur l'appareil nécessaires sont collectés. 2) Objectif d'utilisation : Pour la connexion au compte et la vérification de la sécurité, la fourniture de fonctions de service, le dépannage et les exigences de conformité. 3) Stockage et sécurité : les données sont cryptées et stockées, et les autorisations et mesures de contrôle d'accès nécessaires sont prises pour tenter d'empêcher tout accès non autorisé, toute divulgation ou toute perte. 4) Partage avec des tiers : sauf si les lois et réglementations l'exigent ou si cela est nécessaire à l'exécution des services, vos informations personnelles ne seront pas partagées avec des tiers ; si des services tiers (tels que des portefeuilles, des fournisseurs de services SMS) sont impliqués, ils ne seront traités que dans la mesure minimale nécessaire à la mise en œuvre de la fonction. 5) Cookies/stockage local : utilisés pour le statut de connexion et la maintenance de session nécessaire (tels que les jetons, PHPSESSID), vous pouvez les effacer ou les restreindre dans le navigateur. 6) Droits personnels : Vous pouvez exercer vos droits d'information, de rectification, de suppression, de retrait de consentement, etc. conformément aux lois et règlements. 7) Modifications et avis : lorsque ces conditions seront mises à jour, elles seront affichées bien en évidence sur la page. En continuant à utiliser ce service, vous êtes réputé avoir lu et accepté le contenu mis à jour. Si vous n'acceptez pas ces Conditions ou toute mise à jour de celles-ci, veuillez cesser d'utiliser le Service et nous contacter.","account.basicInfo":"Informations de base","account.id":"Identifiant utilisateur","account.username":"Nom d'utilisateur","account.nickname":"Surnom","account.email":"Courriel","account.mobile":"Numéro de téléphone portable","account.web3address":"adresse du portefeuille","account.pid":"Identifiant du référent","account.level":"Niveau utilisateur","account.money":"équilibre","account.qdtBalance":"Solde QDT","account.score":"Points","account.createtime":"Heure d'inscription","account.inviteLink":"Lien d'invitation","account.recharge":"Recharger","account.rechargeTip":"Veuillez utiliser WeChat ou Alipay pour scanner le code QR ci-dessous pour recharger.","account.qrCodePlaceholder":"Espace réservé au code QR (émulation)","account.rechargeAmount":"Montant de la recharge","account.enterAmount":"Veuillez saisir le montant de la recharge","account.rechargeHint":"Montant minimum du dépôt : 1 QDT","account.confirmRecharge":"Confirmer la recharge","account.enterValidAmount":"Veuillez saisir un montant de recharge valide","account.rechargeSuccess":"Recharge réussie ! Déposé {montant} QDT","account.settings.menuMap.basic":"Paramètres de base","account.settings.menuMap.security":"Paramètres de sécurité","account.settings.menuMap.notification":"Notification de nouveau message","account.settings.menuMap.moneyLog":"Détails du fonds","account.moneyLog.empty":"Aucun détail sur le fonds pour l'instant","account.moneyLog.total":"{total} enregistrements au total","account.moneyLog.type.purchase":"indicateur d'achat","account.moneyLog.type.recharge":"Recharger","account.moneyLog.type.refund":"Remboursement","account.moneyLog.type.reward":"récompense","account.moneyLog.type.income":"Revenu de l'indicateur","account.moneyLog.type.commission":"Frais de gestion de la plateforme","wallet.balance":"Solde QDT","wallet.recharge":"Recharger","wallet.withdraw":"Retirer de l'argent","wallet.filter":"Filtrer","wallet.reset":"réinitialiser","wallet.totalRecharge":"Recharge accumulée","wallet.totalWithdraw":"Retraits cumulés","wallet.totalIncome":"Revenu cumulé","wallet.records":"Enregistrements de transactions et détails des fonds","wallet.tradingRecords":"historique des transactions","wallet.moneyLog":"Détails du fonds","wallet.rechargeTip":"Veuillez utiliser WeChat ou Alipay pour scanner le code QR ci-dessous pour recharger.","wallet.qrCodePlaceholder":"Espace réservé au code QR (émulation)","wallet.rechargeAmount":"Montant de la recharge","wallet.enterAmount":"Veuillez saisir le montant de la recharge","wallet.rechargeHint":"Montant minimum du dépôt : 1 QDT","wallet.confirmRecharge":"Confirmer la recharge","wallet.enterValidAmount":"Veuillez saisir un montant de recharge valide","wallet.rechargeSuccess":"Recharge réussie ! Déposé {montant} QDT","wallet.rechargeFailed":"La recharge a échoué","wallet.withdrawTip":"Veuillez saisir le montant du retrait et l'adresse de retrait","wallet.withdrawAmount":"Montant du retrait","wallet.enterWithdrawAmount":"Veuillez saisir le montant du retrait","wallet.withdrawHint":"Montant minimum de retrait : 1 QDT","wallet.withdrawAddress":"Adresse de retrait (facultatif)","wallet.enterWithdrawAddress":"Veuillez saisir l'adresse de retrait","wallet.confirmWithdraw":"Confirmer le retrait","wallet.enterValidWithdrawAmount":"Veuillez saisir un montant de retrait valide","wallet.insufficientBalance":"Solde insuffisant","wallet.withdrawSuccess":"Retrait réussi ! Retiré {montant} QDT","wallet.withdrawFailed":"Échec du retrait","wallet.noTradingRecords":"Aucun enregistrement de transaction pour l'instant","wallet.noMoneyLog":"Aucun détail sur le fonds pour l'instant","wallet.loadTradingRecordsFailed":"Échec du chargement des enregistrements de transaction","wallet.loadMoneyLogFailed":"Échec du chargement des détails du fonds","wallet.moneyLogTotal":"{total} enregistrements au total","wallet.moneyLogTypeTitle":"Tapez","wallet.moneyLogType.all":"Tous types","wallet.table.time":"temps","wallet.table.type":"Tapez","wallet.table.price":"prix","wallet.table.amount":"Quantité","wallet.table.money":"Montant","wallet.table.balance":"équilibre","wallet.table.memo":"Remarques","wallet.table.value":"valeur","wallet.table.profit":"Profits et pertes","wallet.table.commission":"frais de traitement","wallet.table.total":"{total} enregistrements au total","wallet.tradeType.buy":"acheter","wallet.tradeType.sell":"vendre","wallet.tradeType.liquidation":"liquidation forcée","wallet.tradeType.openLong":"Ouvert longtemps","wallet.tradeType.addLong":"Gadot","wallet.tradeType.closeLong":"Pinduo","wallet.tradeType.closeLongStop":"Stop loss et long","wallet.tradeType.closeLongProfit":"Prenez des bénéfices et gagnez plus de niveaux","wallet.tradeType.openShort":"Ouvert court","wallet.tradeType.addShort":"ajouter un court","wallet.tradeType.closeShort":"vide","wallet.tradeType.closeShortStop":"Arrêter la perte","wallet.tradeType.closeShortProfit":"Prenez des bénéfices et clôturez à découvert","wallet.moneyLogType.purchase":"indicateur d'achat","wallet.moneyLogType.recharge":"Recharger","wallet.moneyLogType.withdraw":"Retirer de l'argent","wallet.moneyLogType.refund":"Remboursement","wallet.moneyLogType.reward":"récompense","wallet.moneyLogType.income":"revenu","wallet.moneyLogType.commission":"frais de traitement","wallet.web3Address.required":"Veuillez d'abord remplir l'adresse du portefeuille Web3","wallet.web3Address.requiredDescription":"Avant de recharger, vous devez lier l'adresse de votre portefeuille Web3 pour recevoir la recharge.","wallet.web3Address.placeholder":"Veuillez saisir l'adresse de votre portefeuille Web3 (en commençant par 0x)","wallet.web3Address.save":"Enregistrer l'adresse du portefeuille","wallet.web3Address.saveSuccess":"Adresse du portefeuille enregistrée avec succès","wallet.web3Address.saveFailed":"Échec de l'enregistrement de l'adresse du portefeuille","wallet.web3Address.invalidFormat":"Veuillez saisir une adresse de portefeuille Web3 valide (format Ethereum : 42 caractères commençant par 0x, ou format TRC20 : 34 caractères commençant par T)","wallet.selectCoin":"Sélectionnez la devise","wallet.selectChain":"chaîne de sélection","wallet.chain.eth":"ETH(ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"BSC","wallet.targetQdtAmount":"Le montant de QDT que vous souhaitez échanger (facultatif)","wallet.targetQdtAmount.placeholder":"Veuillez saisir la quantité de QDT que vous souhaitez utiliser, le prix actuel du QDT : {price} USDT","wallet.targetQdtAmount.requiredUsdt":"Besoin de recharge : {amount} USDT","wallet.rechargeAddress":"Adresse de recharge","wallet.copyAddress":"Copier","wallet.copySuccess":"Copiez avec succès !","wallet.copyFailed":"Échec de la copie, veuillez copier manuellement","wallet.rechargeAddressHint":"Veuillez vous assurer d'utiliser {chain} pour déposer {coin} à cette adresse","wallet.qdtPrice.loading":"Chargement...","wallet.rechargeTip.new":"Veuillez sélectionner la devise et la chaîne, puis scannez le code QR ci-dessous pour recharger","wallet.exchangeRate":"1 QDT ≈ {taux} USDT","wallet.withdrawableAmount":"Montant des liquidités disponibles","wallet.totalBalance":"solde total","wallet.insufficientWithdrawable":"Le montant en espèces pouvant être retiré est insuffisant. Le montant actuel qui peut être retiré est : {amount} QDT","wallet.withdrawAddressRequired":"Veuillez saisir l'adresse de retrait","wallet.withdrawAddressHint":"Veuillez vous assurer que l'adresse est correcte. Après le retrait, il ne peut être révoqué.","wallet.withdrawSubmitSuccess":"Demande de retrait soumise avec succès, veuillez attendre l'examen","menu.footer.contactUs":"Contactez-nous","menu.footer.getSupport":"Obtenir de l'aide","menu.footer.socialAccounts":"compte social","menu.footer.userAgreement":"Contrat d'utilisation","menu.footer.privacyPolicy":"politique de confidentialité","menu.footer.support":"Assistance","menu.footer.featureRequest":"Demande de fonctionnalité","menu.footer.email":"Courriel","menu.footer.liveChat":"Chat en direct 24h/24 et 7j/7","dashboard.analysis.title":"Analyse multidimensionnelle","dashboard.analysis.subtitle":"Plateforme d'analyse financière complète basée sur l'IA","dashboard.analysis.selectSymbol":"Sélectionnez ou saisissez le code sous-jacent","dashboard.analysis.selectModel":"Sélectionnez le modèle","dashboard.analysis.startAnalysis":"Démarrer l'analyse","dashboard.analysis.history":"Histoire","dashboard.analysis.tab.overview":"analyse complète","dashboard.analysis.tab.fundamental":"Fondamentaux","dashboard.analysis.tab.technical":"technologie","dashboard.analysis.tab.news":"Actualités","dashboard.analysis.tab.sentiment":"émotions","dashboard.analysis.tab.risk":"risque","dashboard.analysis.tab.debate":"Le débat long-court","dashboard.analysis.tab.decision":"décision finale","dashboard.analysis.empty.selectSymbol":"Sélectionnez une cible pour démarrer l'analyse","dashboard.analysis.empty.selectSymbolDesc":"Sélectionnez dans la liste d'actions auto-sélectionnée ou entrez le code sous-jacent pour obtenir un rapport d'analyse IA multidimensionnel","dashboard.analysis.empty.startAnalysis":'Cliquez sur le bouton "Démarrer l\'analyse" pour effectuer une analyse multidimensionnelle',"dashboard.analysis.empty.startAnalysisDesc":"Nous vous fournirons une analyse complète portant sur plusieurs dimensions telles que les fondamentaux, la technologie, l'actualité, le sentiment et le risque.","dashboard.analysis.empty.noData":"Il n'y a actuellement aucune donnée d'analyse {type}, veuillez d'abord effectuer une analyse complète","dashboard.analysis.empty.noWatchlist":"Il n'y a actuellement aucun titre auto-sélectionné","dashboard.analysis.empty.noHistory":"Pas encore d'historique","dashboard.analysis.empty.watchlistHint":"Il n'y a actuellement aucun stock auto-sélectionné, veuillez d'abord","dashboard.analysis.empty.noDebateData":"Aucune donnée de débat pour l'instant","dashboard.analysis.empty.noDecisionData":"Aucune donnée de décision pour l'instant","dashboard.analysis.empty.selectAgent":"Veuillez sélectionner un agent pour afficher les résultats de l'analyse","dashboard.analysis.loading.analyzing":"Analyse, veuillez patienter...","dashboard.analysis.loading.fundamental":"Analyser les données fondamentales...","dashboard.analysis.loading.technical":"Analyse des indicateurs techniques...","dashboard.analysis.loading.news":"Analyser les données d'actualité...","dashboard.analysis.loading.sentiment":"Analyser le sentiment du marché...","dashboard.analysis.loading.risk":"Évaluer le risque...","dashboard.analysis.loading.debate":"Le débat long-court est en cours...","dashboard.analysis.loading.decision":"Générer la décision finale...","dashboard.analysis.score.overall":"Note globale","dashboard.analysis.score.recommendation":"conseil en investissement","dashboard.analysis.score.confidence":"Confiance","dashboard.analysis.dimension.fundamental":"Fondamentaux","dashboard.analysis.dimension.technical":"technologie","dashboard.analysis.dimension.news":"Actualités","dashboard.analysis.dimension.sentiment":"émotions","dashboard.analysis.dimension.risk":"risque","dashboard.analysis.card.dimensionScores":"Notes pour chaque dimension","dashboard.analysis.card.overviewReport":"Rapport d'analyse complet","dashboard.analysis.card.financialMetrics":"indicateurs financiers","dashboard.analysis.card.fundamentalReport":"Rapport d'analyse fondamentale","dashboard.analysis.card.technicalIndicators":"Indicateurs techniques","dashboard.analysis.card.technicalReport":"rapport d'analyse technique","dashboard.analysis.card.newsList":"Actualités connexes","dashboard.analysis.card.newsReport":"Rapport d'analyse de l'actualité","dashboard.analysis.card.sentimentIndicators":"indicateur de sentiment","dashboard.analysis.card.sentimentReport":"Rapport d'analyse des sentiments","dashboard.analysis.card.riskMetrics":"indicateurs de risque","dashboard.analysis.card.riskReport":"rapport d'évaluation des risques","dashboard.analysis.card.bullView":"Vue haussière (Taureau)","dashboard.analysis.card.bearView":"Vue baissière (ours)","dashboard.analysis.card.researchConclusion":"Conclusion du chercheur","dashboard.analysis.card.traderPlan":"plan de commerçant","dashboard.analysis.card.riskDebate":"Débat en commission des risques","dashboard.analysis.card.finalDecision":"Décision finale","dashboard.analysis.card.tradePlanDetail":"Détails du plan de trading","dashboard.analysis.tradingPlan.entry_price":"Prix d'entrée","dashboard.analysis.tradingPlan.position_size":"Taille du poste","dashboard.analysis.tradingPlan.stop_loss":"arrêter les pertes","dashboard.analysis.tradingPlan.take_profit":"Profiter","dashboard.analysis.label.confidence":"Confiance","dashboard.analysis.label.keyPoints":"points essentiels","dashboard.analysis.label.riskWarning":"Avertissement de risque","dashboard.analysis.risk.risky":"Risqué","dashboard.analysis.risk.neutral":"Point de vue neutre (Neutre)","dashboard.analysis.risk.safe":"Vue conservatrice (sûr)","dashboard.analysis.risk.conclusion":"Conclusion","dashboard.analysis.feature.fundamental":"analyse fondamentale","dashboard.analysis.feature.technical":"analyse technique","dashboard.analysis.feature.news":"analyse de l'actualité","dashboard.analysis.feature.sentiment":"analyse des sentiments","dashboard.analysis.feature.risk":"évaluation des risques","dashboard.analysis.watchlist.title":"Ma sélection de titres","dashboard.analysis.watchlist.add":"ajouter","dashboard.analysis.watchlist.addStock":"ajouter du stock","dashboard.analysis.modal.addStock.title":"Ajouter des actions facultatives","dashboard.analysis.modal.addStock.confirm":"D'accord","dashboard.analysis.modal.addStock.cancel":"Annuler","dashboard.analysis.modal.addStock.market":"type de marché","dashboard.analysis.modal.addStock.marketPlaceholder":"Veuillez sélectionner un marché","dashboard.analysis.modal.addStock.marketRequired":"Veuillez sélectionner le type de marché","dashboard.analysis.modal.addStock.symbol":"Code de stock","dashboard.analysis.modal.addStock.symbolPlaceholder":"Par exemple : AAPL, TSLA, GOOGL, 000001, BTC","dashboard.analysis.modal.addStock.symbolRequired":"Veuillez entrer le code de stock","dashboard.analysis.modal.addStock.searchPlaceholder":"Rechercher le code ou le nom de la cible","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"Recherchez ou saisissez le code sous-jacent (par exemple : AAPL, BTC/USDT, EUR/USD)","dashboard.analysis.modal.addStock.searchOrInputHint":"Prend en charge la recherche d'objets dans la base de données ou la saisie directe du code (le système obtiendra automatiquement le nom)","dashboard.analysis.modal.addStock.search":"Rechercher","dashboard.analysis.modal.addStock.searchResults":"Résultats de la recherche","dashboard.analysis.modal.addStock.hotSymbols":"Cibles populaires","dashboard.analysis.modal.addStock.noHotSymbols":"Aucune cible populaire pour l'instant","dashboard.analysis.modal.addStock.selectedSymbol":"Sélectionné","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"Veuillez d'abord sélectionner une cible","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"Veuillez sélectionner une cible ou saisir d'abord le code cible","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"Veuillez entrer le code cible","dashboard.analysis.modal.addStock.pleaseSelectMarket":"Veuillez d'abord sélectionner le type de marché","dashboard.analysis.modal.addStock.searchFailed":"La recherche a échoué, veuillez réessayer plus tard","dashboard.analysis.modal.addStock.noSearchResults":"Aucune cible correspondante trouvée","dashboard.analysis.modal.addStock.willAutoFetchName":"Le système obtiendra automatiquement le nom","dashboard.analysis.modal.addStock.addDirectly":"Ajouter directement","dashboard.analysis.modal.addStock.nameWillBeFetched":"Le nom sera récupéré automatiquement une fois ajouté","dashboard.analysis.market.USStock":"Actions américaines","dashboard.analysis.market.Crypto":"crypto-monnaie","dashboard.analysis.market.Forex":"Forex","dashboard.analysis.market.Futures":"Contrats à terme","dashboard.analysis.modal.history.title":"Enregistrements d'analyse historique","dashboard.analysis.modal.history.viewResult":"Afficher les résultats","dashboard.analysis.modal.history.completeTime":"temps d'achèvement","dashboard.analysis.modal.history.error":"Erreur","dashboard.analysis.status.pending":"En attente","dashboard.analysis.status.processing":"Traitement","dashboard.analysis.status.completed":"Terminé","dashboard.analysis.status.failed":"échoué","dashboard.analysis.message.selectSymbol":"Veuillez d'abord sélectionner la cible","dashboard.analysis.message.taskCreated":"La tâche d'analyse a été créée et est exécutée en arrière-plan...","dashboard.analysis.message.analysisComplete":"Analyse terminée","dashboard.analysis.message.analysisCompleteCache":"Analyse terminée (à l'aide des données mises en cache)","dashboard.analysis.message.analysisFailed":"L'analyse a échoué, veuillez réessayer plus tard","dashboard.analysis.message.addStockSuccess":"Ajouté avec succès","dashboard.analysis.message.addStockFailed":"L'ajout a échoué","dashboard.analysis.message.removeStockSuccess":"Supprimé avec succès","dashboard.analysis.message.removeStockFailed":"Échec de la suppression","dashboard.analysis.message.resumingAnalysis":"Reprise de la tâche d'analyse...","dashboard.analysis.message.deleteSuccess":"Supprimé avec succès","dashboard.analysis.message.deleteFailed":"Échec de la suppression","dashboard.analysis.modal.history.delete":"Supprimer","dashboard.analysis.modal.history.deleteConfirm":"Êtes-vous sûr de vouloir supprimer cet enregistrement d'analyse ?","dashboard.analysis.test":"Magasin n° {no}, route Gongzhuan","dashboard.analysis.introduce":"Description de l'indicateur","dashboard.analysis.total-sales":"ventes totales","dashboard.analysis.day-sales":"Ventes quotidiennes moyennes¥","dashboard.analysis.visits":"Visites","dashboard.analysis.visits-trend":"Tendances du trafic","dashboard.analysis.visits-ranking":"Classement des visites en magasin","dashboard.analysis.day-visits":"Visites quotidiennes","dashboard.analysis.week":"Hebdomadaire, année sur année","dashboard.analysis.day":"Année après année","dashboard.analysis.payments":"Nombre de paiements","dashboard.analysis.conversion-rate":"taux de conversion","dashboard.analysis.operational-effect":"Effets sur l'activité opérationnelle","dashboard.analysis.sales-trend":"tendances des ventes","dashboard.analysis.sales-ranking":"Classement des ventes en magasin","dashboard.analysis.all-year":"Toute l'année","dashboard.analysis.all-month":"ce mois-ci","dashboard.analysis.all-week":"cette semaine","dashboard.analysis.all-day":"aujourd'hui","dashboard.analysis.search-users":"Nombre d'utilisateurs de recherche","dashboard.analysis.per-capita-search":"Recherches par habitant","dashboard.analysis.online-top-search":"Recherches populaires en ligne","dashboard.analysis.the-proportion-of-sales":"Proportion de la catégorie de ventes","dashboard.analysis.dropdown-option-one":"Première opération","dashboard.analysis.dropdown-option-two":"Opération 2","dashboard.analysis.channel.all":"Toutes les chaînes","dashboard.analysis.channel.online":"en ligne","dashboard.analysis.channel.stores":"magasin","dashboard.analysis.sales":"ventes","dashboard.analysis.traffic":"flux de passagers","dashboard.analysis.table.rank":"Classement","dashboard.analysis.table.search-keyword":"Rechercher des mots-clés","dashboard.analysis.table.users":"Nombre d'utilisateurs","dashboard.analysis.table.weekly-range":"Augmentation hebdomadaire","dashboard.indicator.selectSymbol":"Sélectionnez ou saisissez le code sous-jacent","dashboard.indicator.emptyWatchlistHint":"Il n'y a actuellement aucun titre auto-sélectionné, veuillez d'abord les ajouter","dashboard.indicator.hint.selectSymbol":"Veuillez sélectionner une cible pour démarrer l'analyse","dashboard.indicator.hint.selectSymbolDesc":"Sélectionnez ou entrez un code boursier dans la zone de recherche ci-dessus pour afficher les graphiques K-line et les indicateurs techniques.","dashboard.indicator.retry":"Réessayez","dashboard.indicator.panel.title":"Indicateurs techniques","dashboard.indicator.panel.realtimeOn":"Désactivez les mises à jour en temps réel","dashboard.indicator.panel.realtimeOff":"Activer les mises à jour en temps réel","dashboard.indicator.panel.themeLight":"Passer au thème sombre","dashboard.indicator.panel.themeDark":"Passer au thème clair","dashboard.indicator.section.enabled":"Activé","dashboard.indicator.section.added":"Indicateurs que j'ai ajoutés","dashboard.indicator.section.custom":"Indicateurs créés par vous-même","dashboard.indicator.section.bought":"Indicateurs que j'ai achetés","dashboard.indicator.section.myCreated":"Indicateurs que j'ai créés","dashboard.indicator.empty":"Il n'y a pas encore d'indicateur, veuillez d'abord ajouter ou créer un indicateur","dashboard.indicator.buy":"indicateur d'achat","dashboard.indicator.action.start":"commencer","dashboard.indicator.action.stop":"Fermer","dashboard.indicator.action.edit":"Modifier","dashboard.indicator.action.delete":"Supprimer","dashboard.indicator.action.backtest":"backtest","dashboard.indicator.status.normal":"normal","dashboard.indicator.status.normalPermanent":"Normal (valable en permanence)","dashboard.indicator.status.expired":"Expiré","dashboard.indicator.expiry.permanent":"Valable en permanence","dashboard.indicator.expiry.noExpiry":"Pas de délai d'expiration","dashboard.indicator.expiry.expired":"Expiré : {date}","dashboard.indicator.expiry.expiresOn":"Heure d'expiration : {date}","dashboard.indicator.delete.confirmTitle":"Confirmer la suppression","dashboard.indicator.delete.confirmContent":'Êtes-vous sûr de vouloir supprimer l\'indicateur "{name}" ? Cette opération est irréversible.',"dashboard.indicator.delete.confirmOk":"Supprimer","dashboard.indicator.delete.confirmCancel":"Annuler","dashboard.indicator.delete.success":"Supprimer avec succès","dashboard.indicator.delete.failed":"Échec de la suppression","dashboard.indicator.save.success":"Enregistré avec succès","dashboard.indicator.save.failed":"Échec de l'enregistrement","dashboard.indicator.error.loadWatchlistFailed":"Échec du chargement des stocks facultatifs","dashboard.indicator.error.chartNotReady":"Le composant graphique n'est pas initialisé. Veuillez d'abord sélectionner la cible et attendre que le graphique se charge.","dashboard.indicator.error.chartMethodNotReady":"La méthode du composant graphique n'est pas prête, veuillez réessayer plus tard","dashboard.indicator.error.chartExecuteNotReady":"La méthode d'exécution du composant graphique n'est pas prête, veuillez réessayer plus tard","dashboard.indicator.error.parseFailed":"Impossible d'analyser le code Python","dashboard.indicator.error.parseFailedCheck":"Impossible d'analyser le code Python, veuillez vérifier le format du code","dashboard.indicator.error.addIndicatorFailed":"Échec de l'ajout de l'indicateur","dashboard.indicator.error.runIndicatorFailed":"L'indicateur de fonctionnement a échoué","dashboard.indicator.error.pleaseLogin":"Veuillez d'abord vous connecter","dashboard.indicator.error.loadDataFailed":"Le chargement des données a échoué","dashboard.indicator.error.loadDataFailedDesc":"Veuillez vérifier la connexion réseau","dashboard.indicator.error.pythonEngineFailed":"Le moteur Python n'a pas pu se charger et la fonction d'indicateur peut ne pas être disponible.","dashboard.indicator.error.chartInitFailed":"L'initialisation du graphique a échoué","dashboard.indicator.warning.enterCode":"Veuillez d'abord saisir le code de l'indicateur","dashboard.indicator.warning.pyodideLoadFailed":"Le moteur Python n'a pas pu se charger","dashboard.indicator.warning.pyodideLoadFailedDesc":"Cette fonctionnalité n'est pas disponible dans votre région ou environnement réseau actuel","dashboard.indicator.warning.chartNotInitialized":"Le graphique n'est pas initialisé et l'outil de dessin au trait ne peut pas être utilisé.","dashboard.indicator.success.runIndicator":"L'indicateur s'exécute avec succès","dashboard.indicator.success.clearDrawings":"Tous les dessins au trait effacés","dashboard.indicator.sma":"SMA (combinaison de moyenne mobile)","dashboard.indicator.ema":"EMA (combinaison de moyennes mobiles exponentielles)","dashboard.indicator.rsi":"RSI (force relative)","dashboard.indicator.macd":"MACD","dashboard.indicator.bb":"Bandes de Bollinger","dashboard.indicator.atr":"ATR (plage réelle moyenne)","dashboard.indicator.cci":"CCI (indice des canaux de matières premières)","dashboard.indicator.williams":"Williams %R (indicateur Williams)","dashboard.indicator.mfi":"IMF (indice de flux monétaire)","dashboard.indicator.adx":"ADX (indice de tendance moyen)","dashboard.indicator.obv":"OBV (vague d'énergie)","dashboard.indicator.adosc":"ADOSC (oscillateur d'accumulation/répartition)","dashboard.indicator.ad":"AD (ligne d'accumulation/distribution)","dashboard.indicator.kdj":"KDJ (indicateur stochastique)","dashboard.indicator.signal.buy":"ACHETER","dashboard.indicator.signal.sell":"VENDRE","dashboard.indicator.signal.supertrendBuy":"Acheter SuperTrend","dashboard.indicator.signal.supertrendSell":"Vente SuperTrend","dashboard.indicator.chart.kline":"Ligne K","dashboard.indicator.chart.volume":"Volume","dashboard.indicator.chart.uptrend":"Tendance à la hausse","dashboard.indicator.chart.downtrend":"Tendance à la baisse","dashboard.indicator.tooltip.time":"temps","dashboard.indicator.tooltip.open":"ouvert","dashboard.indicator.tooltip.close":"recevoir","dashboard.indicator.tooltip.high":"haut","dashboard.indicator.tooltip.low":"faible","dashboard.indicator.tooltip.volume":"Volume","dashboard.indicator.drawing.line":"segment de ligne","dashboard.indicator.drawing.horizontalLine":"ligne horizontale","dashboard.indicator.drawing.verticalLine":"ligne verticale","dashboard.indicator.drawing.ray":"rayon","dashboard.indicator.drawing.straightLine":"ligne droite","dashboard.indicator.drawing.parallelLine":"lignes parallèles","dashboard.indicator.drawing.priceLine":"ligne de prix","dashboard.indicator.drawing.priceChannel":"canal de prix","dashboard.indicator.drawing.fibonacciLine":"Lignes de Fibonacci","dashboard.indicator.drawing.measure":"Mesure","dashboard.indicator.drawing.clearAll":"Effacer tous les dessins au trait","dashboard.indicator.market.USStock":"Actions américaines","dashboard.indicator.market.Crypto":"crypto-monnaie","dashboard.indicator.market.Forex":"Forex","dashboard.indicator.market.Futures":"Contrats à terme","dashboard.indicator.create":"Créer un indicateur","dashboard.indicator.editor.title":"Créer/modifier des indicateurs","dashboard.indicator.editor.name":"Nom de l'indicateur","dashboard.indicator.editor.nameRequired":"Veuillez saisir le nom de l'indicateur","dashboard.indicator.editor.namePlaceholder":"Veuillez saisir le nom de l'indicateur","dashboard.indicator.editor.description":"Description de l'indicateur","dashboard.indicator.editor.descriptionPlaceholder":"Veuillez saisir une description de l'indicateur (facultatif)","dashboard.indicator.editor.code":"Code Python","dashboard.indicator.editor.codeRequired":"Veuillez entrer le code de l'indicateur","dashboard.indicator.editor.codePlaceholder":"Veuillez saisir le code Python","dashboard.indicator.editor.run":"courir","dashboard.indicator.editor.runHint":"Cliquez sur le bouton Exécuter pour prévisualiser l'effet de l'indicateur sur le graphique K-line","dashboard.indicator.editor.guide":"Guide de développement","dashboard.indicator.editor.guideTitle":"Guide de développement d'indicateurs Python","dashboard.indicator.editor.save":"enregistrer","dashboard.indicator.editor.cancel":"Annuler","dashboard.indicator.editor.unnamed":"Indicateur sans nom","dashboard.indicator.editor.publishToCommunity":"Publier sur la communauté","dashboard.indicator.editor.publishToCommunityHint":"Une fois publié, les autres utilisateurs peuvent visualiser et utiliser votre indicateur dans la communauté","dashboard.indicator.editor.indicatorType":"Type d'indicateur","dashboard.indicator.editor.indicatorTypeRequired":"Veuillez sélectionner le type d'indicateur","dashboard.indicator.editor.indicatorTypePlaceholder":"Veuillez sélectionner le type d'indicateur","dashboard.indicator.editor.previewImage":"Aperçu","dashboard.indicator.editor.uploadImage":"Télécharger des photos","dashboard.indicator.editor.previewImageHint":"Taille recommandée : 800 x 400, pas plus de 2 Mo","dashboard.indicator.editor.pricing":"Prix de vente (QDT)","dashboard.indicator.editor.pricingType.free":"gratuit","dashboard.indicator.editor.pricingType.permanent":"permanent","dashboard.indicator.editor.pricingType.monthly":"paiement mensuel","dashboard.indicator.editor.price":"prix","dashboard.indicator.editor.priceRequired":"Veuillez entrer le prix","dashboard.indicator.editor.pricePlaceholder":"Veuillez entrer le prix","dashboard.indicator.editor.pricingHint":"Bien que le prix des indicateurs gratuits soit de 0, la plateforme vous récompensera (QDT) en fonction de votre utilisation de l'indicateur et de votre taux d'éloges.","dashboard.indicator.editor.aiGenerate":"Génération intelligente","dashboard.indicator.editor.aiPromptPlaceholder":"Dites-moi vos idées et je générerai le code de l'indicateur Python pour vous","dashboard.indicator.editor.aiGenerateBtn":"Code généré par l'IA","dashboard.indicator.editor.aiPromptRequired":"Veuillez entrer vos pensées","dashboard.indicator.editor.aiGenerateSuccess":"Génération de code réussie","dashboard.indicator.editor.aiGenerateError":"Échec de la génération du code, veuillez réessayer plus tard","dashboard.indicator.backtest.title":"Backtest des indicateurs","dashboard.indicator.backtest.config":"Paramètres de backtest","dashboard.indicator.backtest.startDate":"date de début","dashboard.indicator.backtest.endDate":"date de fin","dashboard.indicator.backtest.selectStartDate":"Sélectionnez la date de début","dashboard.indicator.backtest.selectEndDate":"Sélectionnez la date de fin","dashboard.indicator.backtest.startDateRequired":"Veuillez sélectionner une date de début","dashboard.indicator.backtest.endDateRequired":"Veuillez sélectionner une date de fin","dashboard.indicator.backtest.initialCapital":"Capital initial","dashboard.indicator.backtest.initialCapitalRequired":"Veuillez saisir les fonds initiaux","dashboard.indicator.backtest.commission":"Frais de traitement","dashboard.indicator.backtest.leverage":"Ratio de levier","dashboard.indicator.backtest.tradeDirection":"Orientation commerciale","dashboard.indicator.backtest.longOnly":"Allez-y longtemps","dashboard.indicator.backtest.shortOnly":"court","dashboard.indicator.backtest.both":"Bidirectionnel","dashboard.indicator.backtest.run":"Commencer le backtest","dashboard.indicator.backtest.rerun":"Backtester à nouveau","dashboard.indicator.backtest.close":"Fermer","dashboard.indicator.backtest.running":"Backtest des indicateurs en cours...","dashboard.indicator.backtest.results":"Résultats du backtest","dashboard.indicator.backtest.totalReturn":"rendement total","dashboard.indicator.backtest.annualReturn":"revenu annualisé","dashboard.indicator.backtest.maxDrawdown":"prélèvement maximum","dashboard.indicator.backtest.sharpeRatio":"Rapport de netteté","dashboard.indicator.backtest.winRate":"taux de réussite","dashboard.indicator.backtest.profitFactor":"ratio profits/pertes","dashboard.indicator.backtest.totalTrades":"Nombre de transactions","dashboard.indicator.totalReturn":"rendement total","dashboard.indicator.annualReturn":"taux de rendement annualisé","dashboard.indicator.maxDrawdown":"prélèvement maximum","dashboard.indicator.sharpeRatio":"Rapport de netteté","dashboard.indicator.winRate":"taux de réussite","dashboard.indicator.profitFactor":"ratio profits/pertes","dashboard.indicator.totalTrades":"nombre total de transactions","dashboard.indicator.backtest.totalCommission":"frais de traitement totaux","dashboard.indicator.backtest.equityCurve":"courbe des taux","dashboard.indicator.backtest.strategy":"Revenu de l'indicateur","dashboard.indicator.backtest.benchmark":"Rendement de référence","dashboard.indicator.backtest.tradeHistory":"historique des transactions","dashboard.indicator.backtest.tradeTime":"temps","dashboard.indicator.backtest.tradeType":"Tapez","dashboard.indicator.backtest.buy":"acheter","dashboard.indicator.backtest.sell":"vendre","dashboard.indicator.backtest.liquidation":"Liquidation","dashboard.indicator.backtest.openLong":"Ouvert longtemps","dashboard.indicator.backtest.closeLong":"Pinduo","dashboard.indicator.backtest.closeLongStop":"Près du long (stop loss)","dashboard.indicator.backtest.closeLongProfit":"Fermez davantage (prenez des bénéfices)","dashboard.indicator.backtest.addLong":"Ajouter une position longue","dashboard.indicator.backtest.openShort":"Ouvert court","dashboard.indicator.backtest.closeShort":"vide","dashboard.indicator.backtest.closeShortStop":"Fermer (stopper la perte)","dashboard.indicator.backtest.closeShortProfit":"Fermer (prendre des bénéfices)","dashboard.indicator.backtest.addShort":"Ajouter une position courte","dashboard.indicator.backtest.price":"prix","dashboard.indicator.backtest.amount":"Quantité","dashboard.indicator.backtest.balance":"Solde du compte","dashboard.indicator.backtest.profit":"Profits et pertes","dashboard.indicator.backtest.success":"Backtest terminé","dashboard.indicator.backtest.failed":"Échec du backtest, veuillez réessayer plus tard","dashboard.indicator.backtest.noIndicatorCode":"Il n'y a pas de code backtestable pour cet indicateur","dashboard.indicator.backtest.noSymbol":"Veuillez d'abord sélectionner la cible de la transaction","dashboard.indicator.backtest.dateRangeExceeded":"La plage de temps du backtest dépasse la limite : {timeframe} la période peut être backtestée au maximum {maxRange}","dashboard.indicator.backtest.dateRangeExceededDays":"Backtest range exceeds limit: {timeframe} max {maxRange} ({maxDays} days)","dashboard.indicator.backtest.metaLine":"Symbol: {symbol} | Market: {market} | Timeframe: {timeframe}","dashboard.indicator.backtest.savedRunId":"Backtest saved. Run ID: {id}","dashboard.indicator.backtest.prev":"Previous","dashboard.indicator.backtest.next":"Next","dashboard.indicator.backtest.steps.strategy.title":"Strategy","dashboard.indicator.backtest.steps.strategy.desc":"Position sizing & risk controls","dashboard.indicator.backtest.steps.trading.title":"Trading settings","dashboard.indicator.backtest.steps.trading.desc":"Time range, capital, fees, leverage","dashboard.indicator.backtest.steps.results.title":"Results","dashboard.indicator.backtest.steps.results.desc":"Backtest output","dashboard.indicator.backtest.panel.risk":"Risk management (SL/TP/Trailing)","dashboard.indicator.backtest.panel.scale":"Scale in / DCA (trend & mean-reversion)","dashboard.indicator.backtest.panel.reduce":"Reduce position (trend & adverse)","dashboard.indicator.backtest.panel.position":"Position sizing","dashboard.indicator.backtest.field.stopLossPct":"Stop Loss (%)","dashboard.indicator.backtest.field.takeProfitPct":"Take Profit (%)","dashboard.indicator.backtest.field.trailingEnabled":"Trailing stop / take profit","dashboard.indicator.backtest.field.trailingStopPct":"Trailing drawdown (%)","dashboard.indicator.backtest.field.trailingActivationPct":"Trailing activation (%)","dashboard.indicator.backtest.field.slippage":"Slippage (%)","dashboard.indicator.backtest.field.trendAddEnabled":"Trend-following scale-in","dashboard.indicator.backtest.field.dcaAddEnabled":"Mean-reversion DCA","dashboard.indicator.backtest.field.trendAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.dcaAddStepPct":"DCA trigger (%)","dashboard.indicator.backtest.field.trendAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.dcaAddSizePct":"DCA size (% of capital)","dashboard.indicator.backtest.field.trendAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.dcaAddMaxTimes":"Max DCA times","dashboard.indicator.backtest.field.trendReduceEnabled":"Trend reduce","dashboard.indicator.backtest.field.adverseReduceEnabled":"Adverse reduce","dashboard.indicator.backtest.field.trendReduceStepPct":"Trend trigger (%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"Adverse trigger (%)","dashboard.indicator.backtest.field.trendReduceSizePct":"Reduce size (% of position)","dashboard.indicator.backtest.field.adverseReduceSizePct":"Adverse reduce size (% of position)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"Max trend reduce times","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"Max adverse reduce times","dashboard.indicator.backtest.field.entryPct":"Entry size (% of capital)","dashboard.indicator.backtest.field.minOrderPct":"Min order size (% of capital) (optional)","dashboard.indicator.backtest.closeLongTrailing":"Close Long (Trailing)","dashboard.indicator.backtest.reduceLong":"Reduce Long","dashboard.indicator.backtest.closeShortTrailing":"Close Short (Trailing)","dashboard.indicator.backtest.reduceShort":"Reduce Short","dashboard.docs.title":"Centre de documentation","dashboard.docs.search.placeholder":"Rechercher des documents...","dashboard.docs.category.all":"Tout","dashboard.docs.category.guide":"Guide de développement","dashboard.docs.category.api":"Documentation API","dashboard.docs.category.tutorial":"Tutoriel","dashboard.docs.category.faq":"FAQ","dashboard.docs.featured.title":"Documentation recommandée","dashboard.docs.featured.tag":"Recommandé","dashboard.docs.list.views":"Parcourir","dashboard.docs.list.author":"Auteur","dashboard.docs.list.empty":"Aucun document pour l'instant","dashboard.docs.list.backToAll":"Retour à tous les documents","dashboard.docs.list.total":"{count} documents au total","dashboard.docs.detail.back":"Retour à la liste des documents","dashboard.docs.detail.updatedAt":"mis à jour sur","dashboard.docs.detail.related":"Documents associés","dashboard.docs.detail.notFound":"Le document n'existe pas","dashboard.docs.detail.error":"Le document n'existe pas ou a été supprimé","dashboard.docs.search.result":"Résultats de la recherche","dashboard.docs.search.keyword":"mots-clés","community.filter.indicatorType":"Type d'indicateur","community.filter.all":"Tout","community.filter.other":"Autres options","community.filter.pricing":"Type de prix","community.filter.allPricing":"Tous les tarifs","community.filter.sortBy":"Trier par","community.filter.search":"Rechercher","community.filter.searchPlaceholder":"Rechercher le nom de la métrique","community.indicatorType.trend":"Type de tendance","community.indicatorType.momentum":"type d'élan","community.indicatorType.volatility":"Volatilité","community.indicatorType.volume":"Volume","community.indicatorType.custom":"Personnaliser","community.pricing.free":"gratuit","community.pricing.paid":"Payer","community.sort.downloads":"Téléchargements","community.sort.rating":"Note","community.sort.newest":"Dernières versions","community.pagination.total":"{total} indicateurs au total","community.noDescription":"Pas encore de description","community.detail.type":"Tapez","community.detail.pricing":"Tarifs","community.detail.rating":"Note","community.detail.downloads":"Téléchargements","community.detail.author":"Auteur","community.detail.description":"Présentation","community.detail.detailContent":"Description détaillée","community.detail.backtestStats":"Statistiques de backtest","community.action.purchase":"indicateur d'achat","community.action.addToMyIndicators":"Ajouter à mes indicateurs","community.action.favorite":"Collecte","community.action.unfavorite":"Annuler les favoris","community.action.buyNow":"Acheter maintenant","community.action.renew":"Renouvellement","community.purchase.price":"prix","community.purchase.permanent":"permanent","community.purchase.monthly":"mois","community.purchase.confirmBuy":"Confirmer pour acheter cet indicateur ({price} QDT) ?","community.purchase.confirmRenew":"Confirmer le renouvellement de cet indicateur ({price} QDT/mois) ?","community.purchase.confirmFree":"Confirmer pour ajouter cet indicateur gratuit ?","community.purchase.confirmTitle":"Confirmer l'action","community.purchase.owned":"Vous avez acheté cet indicateur (valable en permanence)","community.purchase.ownIndicator":"Il s'agit de la métrique que vous avez publiée","community.purchase.expired":"Votre abonnement a expiré","community.purchase.expiresOn":"Heure d'expiration : {date}","community.tabs.detail":"Détails de l'indicateur","community.tabs.backtest":"Données de backtest","community.tabs.ratings":"Avis d'utilisateurs","community.rating.myRating":"Ma note","community.rating.stars":"{count} étoiles","community.rating.commentPlaceholder":"Partagez votre expérience...","community.rating.submit":"Soumettre une note","community.rating.modify":"Modifier","community.rating.saveModify":"Enregistrer les modifications","community.rating.cancel":"Annuler","community.rating.selectRating":"Veuillez sélectionner une note","community.rating.success":"Évaluation réussie","community.rating.modifySuccess":"Avis modifié avec succès","community.rating.failed":"Échec de la notation","community.rating.noRatings":"Pas encore de commentaires","community.backtest.note":"Les données ci-dessus sont des résultats de backtest historiques et sont fournies à titre de référence uniquement et ne représentent pas les bénéfices futurs.","community.backtest.noData":"Aucune donnée de backtest pour l'instant","community.backtest.uploadHint":"L'auteur n'a pas encore téléchargé les données de backtest","community.message.loadFailed":"Échec du chargement de la liste des indicateurs","community.message.purchaseProcessing":"Traitement de la demande d'achat...","community.message.downloadSuccess":"La métrique a été ajoutée à ma liste de métriques","community.message.favoriteSuccess":"Collecte réussie","community.message.unfavoriteSuccess":"Annuler la collecte avec succès","community.message.operationSuccess":"Opération réussie","community.message.operationFailed":"L'opération a échoué","community.banner.readOnly":"Lecture seule","community.banner.loginHint":"Pour vous connecter ou vous inscrire, veuillez cliquer sur le bouton pour accéder à une page indépendante afin d'éviter les problèmes CSRF","community.banner.jumpButton":"Aller à Connexion/Inscription","dashboard.totalEquity":"capitaux propres totaux","dashboard.totalPnL":"Total des profits et pertes","dashboard.aiStrategies":"Stratégie d'IA","dashboard.indicatorStrategies":"Stratégie des indicateurs","dashboard.running":"Courir","dashboard.pnlHistory":"profits et pertes historiques","dashboard.strategyPerformance":"Ratio de profits et pertes de la stratégie","dashboard.recentTrades":"transactions récentes","dashboard.currentPositions":"Poste actuel","dashboard.table.time":"temps","dashboard.table.strategy":"Nom de la stratégie","dashboard.table.symbol":"Cible","dashboard.table.type":"Tapez","dashboard.table.side":"direction","dashboard.table.size":"Intérêt ouvert","dashboard.table.entryPrice":"cours d'ouverture moyen","dashboard.table.price":"prix","dashboard.table.amount":"Quantité","dashboard.table.profit":"Profits et pertes","dashboard.pendingOrders":"Historique d'exécution des ordres","dashboard.totalOrders":"Total {total} ordres","dashboard.viewError":"Voir l'erreur","dashboard.filled":"Rempli","dashboard.orderTable.time":"Heure de création","dashboard.orderTable.strategy":"Stratégie","dashboard.orderTable.symbol":"Paire de trading","dashboard.orderTable.signalType":"Type de signal","dashboard.orderTable.amount":"Quantité","dashboard.orderTable.price":"Prix de remplissage","dashboard.orderTable.status":"Statut","dashboard.orderTable.executedAt":"Heure d'exécution","dashboard.signalType.openLong":"Ouvrir Long","dashboard.signalType.openShort":"Ouvrir Short","dashboard.signalType.closeLong":"Fermer Long","dashboard.signalType.closeShort":"Fermer Short","dashboard.signalType.addLong":"Ajouter Long","dashboard.signalType.addShort":"Ajouter Short","dashboard.status.pending":"En attente","dashboard.status.processing":"En cours","dashboard.status.completed":"Terminé","dashboard.status.failed":"Échoué","dashboard.status.cancelled":"Annulé","dashboard.table.pnl":"profit ou perte non réalisé","form.basic-form.basic.title":"forme de base","form.basic-form.basic.description":"Les pages de formulaire sont utilisées pour collecter ou vérifier les informations des utilisateurs. Les formulaires de base sont couramment utilisés dans des scénarios de formulaire comportant peu d'éléments de données.","form.basic-form.title.label":"Titre","form.basic-form.title.placeholder":"Donnez un nom à l'objectif","form.basic-form.title.required":"Veuillez entrer un titre","form.basic-form.date.label":"Date de début et de fin","form.basic-form.placeholder.start":"date de début","form.basic-form.placeholder.end":"date de fin","form.basic-form.date.required":"Veuillez sélectionner les dates de début et de fin","form.basic-form.goal.label":"Description de l'objectif","form.basic-form.goal.placeholder":"Veuillez saisir vos objectifs de travail par étapes","form.basic-form.goal.required":"Veuillez saisir une description de l'objectif","form.basic-form.standard.label":"mesurer","form.basic-form.standard.placeholder":"Veuillez saisir des statistiques","form.basic-form.standard.required":"Veuillez saisir des statistiques","form.basic-form.client.label":"Client","form.basic-form.client.required":"Veuillez décrire les clients que vous servez","form.basic-form.label.tooltip":"destinataires de services cibles","form.basic-form.client.placeholder":"Veuillez décrire les clients que vous servez, les clients internes directement @nom/numéro de poste","form.basic-form.invites.label":"Inviter des réviseurs","form.basic-form.invites.placeholder":"Veuillez directement @nom/numéro d'employé, vous pouvez inviter jusqu'à 5 personnes","form.basic-form.weight.label":"poids","form.basic-form.weight.placeholder":"Veuillez entrer","form.basic-form.public.label":"public cible","form.basic-form.label.help":"Les clients et les évaluateurs sont partagés par défaut","form.basic-form.radio.public":"publique","form.basic-form.radio.partially-public":"Partiellement public","form.basic-form.radio.private":"privé","form.basic-form.publicUsers.placeholder":"ouvert à","form.basic-form.option.A":"Collègue 1","form.basic-form.option.B":"Collègue 2","form.basic-form.option.C":"Collègue trois","form.basic-form.email.required":"Veuillez entrer votre adresse e-mail !","form.basic-form.email.wrong-format":"Le format de l'adresse e-mail est incorrect !","form.basic-form.userName.required":"Veuillez entrer votre nom d'utilisateur !","form.basic-form.password.required":"Veuillez entrer votre mot de passe !","form.basic-form.password.twice":"Les mots de passe saisis deux fois ne correspondent pas !","form.basic-form.strength.msg":"Veuillez saisir au moins 6 caractères. Veuillez ne pas utiliser de mots de passe faciles à deviner.","form.basic-form.strength.strong":"Force : Forte","form.basic-form.strength.medium":"Force : moyenne","form.basic-form.strength.short":"Force : trop courte","form.basic-form.confirm-password.required":"Veuillez confirmer votre mot de passe !","form.basic-form.phone-number.required":"Veuillez entrer votre numéro de téléphone portable !","form.basic-form.phone-number.wrong-format":"Le format du numéro de téléphone portable est erroné !","form.basic-form.verification-code.required":"Veuillez entrer le code de vérification !","form.basic-form.form.get-captcha":"Obtenir le code de vérification","form.basic-form.captcha.second":"secondes","form.basic-form.form.optional":"(facultatif)","form.basic-form.form.submit":"Soumettre","form.basic-form.form.save":"enregistrer","form.basic-form.email.placeholder":"Courriel","form.basic-form.password.placeholder":"Mot de passe d'au moins 6 caractères, sensible à la casse","form.basic-form.confirm-password.placeholder":"Confirmer le mot de passe","form.basic-form.phone-number.placeholder":"Numéro de téléphone portable","form.basic-form.verification-code.placeholder":"Code de vérification","result.success.title":"Soumission réussie","result.success.description":"La page de résultats de soumission est utilisée pour renvoyer les résultats de traitement d'une série de tâches opérationnelles. S'il ne s'agit que d'une opération simple, utilisez le retour d'invite global du message. Cette zone de texte peut afficher des instructions supplémentaires simples. S'il est nécessaire d'afficher des « documents », la zone grise ci-dessous peut afficher des contenus plus complexes.","result.success.operate-title":"Nom du projet","result.success.operate-id":"ID du projet","result.success.principal":"responsable","result.success.operate-time":"Temps effectif","result.success.step1-title":"Créer un projet","result.success.step1-operator":"Qu Lili","result.success.step2-title":"Examen préliminaire du ministère","result.success.step2-operator":"Zhou Maomao","result.success.step2-extra":"Urgent","result.success.step3-title":"examen financier","result.success.step4-title":"Terminé","result.success.btn-return":"Retour à la liste","result.success.btn-project":"Afficher les articles","result.success.btn-print":"Imprimer","result.fail.error.title":"Échec de la soumission","result.fail.error.description":"Veuillez vérifier et modifier les informations suivantes avant de soumettre à nouveau.","result.fail.error.hint-title":"Le contenu que vous avez soumis contient les erreurs suivantes :","result.fail.error.hint-text1":"Votre compte a été gelé","result.fail.error.hint-btn1":"Décongeler immédiatement","result.fail.error.hint-text2":"Votre compte n'est pas encore éligible pour postuler","result.fail.error.hint-btn2":"Mettre à niveau maintenant","result.fail.error.btn-text":"Retour à la modification","account.settings.menuMap.custom":"personnalisation","account.settings.menuMap.binding":"Liaison de compte","account.settings.basic.avatar":"avatar","account.settings.basic.change-avatar":"Changer d'avatar","account.settings.basic.email":"Courriel","account.settings.basic.email-message":"Veuillez entrer votre email!","account.settings.basic.nickname":"Surnom","account.settings.basic.nickname-message":"Veuillez entrer votre pseudo !","account.settings.basic.profile":"Profil","account.settings.basic.profile-message":"Veuillez entrer votre profil personnel !","account.settings.basic.profile-placeholder":"Profil","account.settings.basic.country":"Pays/Région","account.settings.basic.country-message":"Veuillez entrer votre pays ou région !","account.settings.basic.geographic":"Province et ville","account.settings.basic.geographic-message":"Veuillez entrer votre province et votre ville !","account.settings.basic.address":"adresse postale","account.settings.basic.address-message":"Veuillez entrer votre adresse postale !","account.settings.basic.phone":"Numéro de contact","account.settings.basic.phone-message":"Veuillez entrer votre numéro de contact !","account.settings.basic.update":"Mettre à jour les informations de base","account.settings.basic.update.success":"Mettre à jour les informations de base avec succès","account.settings.security.strong":"Fort","account.settings.security.medium":"dans","account.settings.security.weak":"faible","account.settings.security.password":"Mot de passe du compte","account.settings.security.password-description":"Force actuelle du mot de passe :","account.settings.security.phone":"Téléphone mobile de sécurité","account.settings.security.phone-description":"Téléphone mobile déjà lié :","account.settings.security.question":"Problèmes de sécurité","account.settings.security.question-description":"Aucune question de sécurité n'est définie, ce qui peut protéger efficacement la sécurité du compte.","account.settings.security.email":"Lier un e-mail","account.settings.security.email-description":"Adresse e-mail déjà liée :","account.settings.security.mfa":"Appareil MFA","account.settings.security.mfa-description":"Le périphérique MFA n’est pas lié. Après la liaison, vous pouvez confirmer à nouveau.","account.settings.security.modify":"Modifier","account.settings.security.set":"paramètres","account.settings.security.bind":"reliure","account.settings.binding.taobao":"Lier Taobao","account.settings.binding.taobao-description":"Le compte Taobao n'est actuellement pas lié","account.settings.binding.alipay":"Lier Alipay","account.settings.binding.alipay-description":"Le compte Alipay n'est actuellement pas lié","account.settings.binding.dingding":"Liaison DingTalk","account.settings.binding.dingding-description":"Aucun compte DingTalk n'est actuellement lié","account.settings.binding.bind":"reliure","account.settings.notification.password":"Mot de passe du compte","account.settings.notification.password-description":"Les messages des autres utilisateurs seront notifiés sous forme de messages du site.","account.settings.notification.messages":"Messages système","account.settings.notification.messages-description":"Les messages système seront notifiés sous forme de messages de site.","account.settings.notification.todo":"Tâches à faire","account.settings.notification.todo-description":"Les tâches à effectuer seront notifiées sous forme de messages sur site","account.settings.settings.open":"ouvert","account.settings.settings.close":"fermer","trading-assistant.title":"Assistante commerciale","trading-assistant.strategyList":"Liste de stratégies","trading-assistant.createStrategy":"Créer une politique","trading-assistant.noStrategy":"Pas encore de stratégie","trading-assistant.selectStrategy":"Veuillez sélectionner une stratégie à gauche pour afficher les détails","trading-assistant.startStrategy":"stratégie de lancement","trading-assistant.stopStrategy":"stratégie d'arrêt","trading-assistant.editStrategy":"Stratégie éditoriale","trading-assistant.deleteStrategy":"Supprimer la stratégie","trading-assistant.status.running":"Courir","trading-assistant.status.stopped":"Arrêté","trading-assistant.status.error":"Erreur","trading-assistant.strategyType.IndicatorStrategy":"Stratégie d'indicateurs techniques","trading-assistant.strategyType.PromptBasedStrategy":"stratégie de mots indicateurs","trading-assistant.strategyType.GridStrategy":"stratégie de grille","trading-assistant.tabs.tradingRecords":"historique des transactions","trading-assistant.tabs.positions":"Enregistrement de poste","trading-assistant.tabs.equityCurve":"courbe des actions","trading-assistant.form.step1":"Sélectionner des indicateurs","trading-assistant.form.step2":"Configuration d'échange","trading-assistant.form.step3":"Paramètres de stratégie","trading-assistant.form.indicator":"Sélectionner des indicateurs","trading-assistant.form.indicatorHint":"Vous ne pouvez sélectionner que les indicateurs techniques que vous avez achetés ou créés","trading-assistant.form.qdtCostHints":"L'utilisation de la stratégie consommera du QDT, veuillez vous assurer que le compte dispose d'un solde QDT suffisant","trading-assistant.form.indicatorDescription":"Description de l'indicateur","trading-assistant.form.noDescription":"Pas encore de description","trading-assistant.form.exchange":"Sélectionnez un échange","trading-assistant.form.apiKey":"Clé API","trading-assistant.form.secretKey":"Clé secrète","trading-assistant.form.passphrase":"Phrase secrète","trading-assistant.form.testConnection":"tester la connexion","trading-assistant.form.strategyName":"Nom de la stratégie","trading-assistant.form.symbol":"paire de trading","trading-assistant.form.symbolHint":"Actuellement, seules les paires de trading de cryptomonnaies sont prises en charge","trading-assistant.form.initialCapital":"Montant de l'investissement","trading-assistant.form.marketType":"type de marché","trading-assistant.form.marketTypeFutures":"contrat","trading-assistant.form.marketTypeSpot":"Spot","trading-assistant.form.marketTypeHint":"Le contrat prend en charge le trading bidirectionnel et l'effet de levier, tandis que le spot ne prend en charge que les positions longues et l'effet de levier est fixé à 1x.","trading-assistant.form.leverage":"Tirer parti de plusieurs","trading-assistant.form.leverageHint":"Contrat : 1-125 fois, spot : fixe 1 fois","trading-assistant.form.spotLeverageFixed":"L'effet de levier du trading au comptant est fixé à 1x","trading-assistant.form.spotOnlyLongHint":"Le trading au comptant ne prend en charge que les positions longues","trading-assistant.form.tradeDirection":"Orientation commerciale","trading-assistant.form.tradeDirectionLong":"Seulement longtemps","trading-assistant.form.tradeDirectionShort":"Seulement court","trading-assistant.form.tradeDirectionBoth":"transaction bidirectionnelle","trading-assistant.form.timeframe":"période","trading-assistant.form.klinePeriod":"Période K-Line","trading-assistant.form.timeframe1m":"1 minute","trading-assistant.form.timeframe5m":"5 minutes","trading-assistant.form.timeframe15m":"15 minutes","trading-assistant.form.timeframe30m":"30 minutes","trading-assistant.form.timeframe1H":"1 heure","trading-assistant.form.timeframe4H":"4 heures","trading-assistant.form.timeframe1D":"1 jour","trading-assistant.form.selectStrategyType":"Sélectionner le type de stratégie","trading-assistant.form.indicatorStrategy":"Stratégie d'indicateur","trading-assistant.form.indicatorStrategyDesc":"Stratégie de trading automatisée basée sur des indicateurs techniques","trading-assistant.form.aiStrategy":"Stratégie IA","trading-assistant.form.aiStrategyDesc":"Stratégie de trading automatisée basée sur la prise de décision intelligente IA","trading-assistant.form.enableAiFilter":"Activer le filtre de décision intelligente IA","trading-assistant.form.enableAiFilterHint":"Lorsqu'il est activé, les signaux d'indicateur seront filtrés par l'IA pour améliorer la qualité des transactions","trading-assistant.form.aiFilterPrompt":"Invite personnalisée","trading-assistant.form.aiFilterPromptHint":"Fournir des instructions personnalisées pour le filtrage IA, laisser vide pour utiliser la valeur par défaut du système","trading-assistant.validation.strategyTypeRequired":"Veuillez sélectionner un type de stratégie","trading-assistant.form.advancedSettings":"Paramètres avancés","trading-assistant.form.orderMode":"Mode de commande","trading-assistant.form.orderModeMaker":"Créateur","trading-assistant.form.orderModeTaker":"Prix du marché (Preneur)","trading-assistant.form.orderModeHint":"Le mode d'ordre en attente utilise des ordres limités et les frais de traitement sont inférieurs ; le mode prix du marché est exécuté immédiatement et les frais de traitement sont plus élevés.","trading-assistant.form.makerWaitSec":"Temps d'attente pour les commandes en attente (secondes)","trading-assistant.form.makerWaitSecHint":"Le temps d'attente pour la transaction après avoir passé une commande. Annulez et réessayez après l'expiration du délai.","trading-assistant.form.makerRetries":"Nombre de tentatives pour les commandes en attente","trading-assistant.form.makerRetriesHint":"Le nombre maximum de tentatives lorsqu'un ordre en attente n'est pas exécuté","trading-assistant.form.fallbackToMarket":"L'ordre en attente échoue et le prix du marché est dégradé.","trading-assistant.form.fallbackToMarketHint":"Lorsque l'ordre en attente d'ouverture/de clôture n'a pas été exécuté, s'il doit être rétrogradé en ordre au marché pour garantir que la transaction soit terminée.","trading-assistant.form.marginMode":"Mode marge","trading-assistant.form.marginModeCross":"Entrepôt complet","trading-assistant.form.marginModeIsolated":"Position isolée","trading-assistant.form.stopLossPct":"Taux d'arrêt des pertes (%)","trading-assistant.form.stopLossPctHint":"Définissez le pourcentage de stop loss, 0 signifie que le stop loss n'est pas activé","trading-assistant.form.takeProfitPct":"Ratio de profit (%)","trading-assistant.form.takeProfitPctHint":"Définissez le pourcentage de profit, 0 signifie désactiver le profit","trading-assistant.form.signalMode":"Mode signal","trading-assistant.form.signalModeConfirmed":"Mode de confirmation","trading-assistant.form.signalModeAggressive":"Mode agressif","trading-assistant.form.signalModeHint":"Mode de confirmation : vérifie uniquement les lignes K terminées ; Mode agressif : vérifie également la formation de lignes K","trading-assistant.form.cancel":"Annuler","trading-assistant.form.prev":"Étape précédente","trading-assistant.form.next":"Étape suivante","trading-assistant.form.confirmCreate":"Confirmer la création","trading-assistant.form.confirmEdit":"Confirmer les modifications","trading-assistant.messages.createSuccess":"Stratégie créée avec succès","trading-assistant.messages.createFailed":"Échec de la création de la stratégie","trading-assistant.messages.updateSuccess":"Mise à jour de la stratégie réussie","trading-assistant.messages.updateFailed":"Échec de la mise à jour de la stratégie","trading-assistant.messages.deleteSuccess":"Suppression de la stratégie réussie","trading-assistant.messages.deleteFailed":"Échec de la suppression de la stratégie","trading-assistant.messages.startSuccess":"La stratégie a démarré avec succès","trading-assistant.messages.startFailed":"Échec du démarrage de la stratégie","trading-assistant.messages.stopSuccess":"La stratégie s'est arrêtée avec succès","trading-assistant.messages.stopFailed":"La stratégie d'arrêt a échoué","trading-assistant.messages.loadFailed":"Échec de l'obtention de la liste des règles","trading-assistant.messages.runningWarning":"La stratégie est en marche. Veuillez arrêter la stratégie avant de la modifier.","trading-assistant.messages.deleteConfirmWithName":"Êtes-vous sûr de vouloir supprimer la stratégie « {name} » ? Cette opération est irréversible.","trading-assistant.messages.deleteConfirm":"Êtes-vous sûr de vouloir supprimer cette stratégie ? Cette opération est irréversible.","trading-assistant.messages.loadTradesFailed":"Échec de l'obtention des enregistrements de transaction","trading-assistant.messages.loadPositionsFailed":"Impossible d'obtenir l'enregistrement de position","trading-assistant.messages.loadEquityFailed":"Impossible d'obtenir la courbe des capitaux propres","trading-assistant.messages.loadIndicatorsFailed":"Échec du chargement de la liste des indicateurs, veuillez réessayer plus tard","trading-assistant.messages.spotLimitations":"Le trading au comptant a été automatiquement réglé sur position longue uniquement, effet de levier 1x","trading-assistant.messages.autoFillApiConfig":"La configuration historique de l'API de l'échange a été automatiquement renseignée","trading-assistant.placeholders.selectIndicator":"Veuillez sélectionner un indicateur","trading-assistant.placeholders.selectExchange":"Veuillez sélectionner un échange","trading-assistant.placeholders.inputApiKey":"Veuillez saisir la clé API","trading-assistant.placeholders.inputSecretKey":"Veuillez entrer la clé secrète","trading-assistant.placeholders.inputPassphrase":"Veuillez saisir la phrase secrète","trading-assistant.placeholders.inputStrategyName":"Veuillez saisir un nom de stratégie","trading-assistant.placeholders.selectSymbol":"Veuillez sélectionner une paire de trading","trading-assistant.placeholders.selectTimeframe":"Veuillez sélectionner une période","trading-assistant.placeholders.selectKlinePeriod":"Veuillez sélectionner une période K-Line","trading-assistant.placeholders.inputAiFilterPrompt":"Veuillez entrer une invite personnalisée (optionnel)","trading-assistant.validation.indicatorRequired":"Veuillez sélectionner un indicateur","trading-assistant.validation.exchangeRequired":"Veuillez sélectionner un échange","trading-assistant.validation.apiKeyRequired":"Veuillez saisir la clé API","trading-assistant.validation.secretKeyRequired":"Veuillez entrer la clé secrète","trading-assistant.validation.passphraseRequired":"Veuillez saisir la phrase secrète","trading-assistant.validation.exchangeConfigIncomplete":"Veuillez remplir les informations complètes de configuration de l'échange","trading-assistant.validation.testConnectionRequired":'Veuillez d\'abord cliquer sur le bouton "Tester la connexion" et vous assurer que la connexion est réussie',"trading-assistant.validation.testConnectionFailed":"Le test de connexion a échoué, veuillez vérifier la configuration et réessayer","trading-assistant.validation.credentialRequired":"Veuillez d'abord ajouter et tester les identifiants de l'échange dans le Centre personnel","trading-assistant.validation.strategyNameRequired":"Veuillez saisir un nom de stratégie","trading-assistant.validation.symbolRequired":"Veuillez sélectionner une paire de trading","trading-assistant.validation.initialCapitalRequired":"Veuillez saisir le montant de l'investissement","trading-assistant.validation.leverageRequired":"Veuillez saisir le ratio de levier","trading-assistant.table.time":"temps","trading-assistant.table.type":"Tapez","trading-assistant.table.price":"prix","trading-assistant.table.amount":"Quantité","trading-assistant.table.value":"Montant","trading-assistant.table.commission":"frais de traitement","trading-assistant.table.symbol":"paire de trading","trading-assistant.table.side":"direction","trading-assistant.table.size":"Quantité de position","trading-assistant.table.entryPrice":"Prix d'ouverture","trading-assistant.table.currentPrice":"prix actuel","trading-assistant.table.unrealizedPnl":"profit ou perte non réalisé","trading-assistant.table.pnlPercent":"Ratio de profits et pertes","trading-assistant.table.buy":"acheter","trading-assistant.table.sell":"vendre","trading-assistant.table.long":"Allez-y longtemps","trading-assistant.table.short":"court","trading-assistant.table.noPositions":"Aucun poste pour l'instant","trading-assistant.detail.title":"Détails de la stratégie","trading-assistant.detail.strategyName":"Nom de la stratégie","trading-assistant.detail.strategyType":"Type de stratégie","trading-assistant.detail.status":"Statut","trading-assistant.detail.tradingMode":"modèle commercial","trading-assistant.detail.exchange":"échange","trading-assistant.detail.initialCapital":"Capital initial","trading-assistant.detail.totalInvestment":"montant total de l'investissement","trading-assistant.detail.currentEquity":"Valeur nette actuelle","trading-assistant.detail.totalPnl":"Total des profits et pertes","trading-assistant.detail.indicatorName":"Nom de l'indicateur","trading-assistant.detail.maxLeverage":"Effet de levier maximal","trading-assistant.detail.decideInterval":"intervalle de décision","trading-assistant.detail.symbols":"Objet de transaction","trading-assistant.detail.createdAt":"temps de création","trading-assistant.detail.updatedAt":"Heure de mise à jour","trading-assistant.detail.llmConfig":"Configuration du modèle d'IA","trading-assistant.detail.exchangeConfig":"Configuration d'échange","trading-assistant.detail.provider":"fournisseur","trading-assistant.detail.modelId":"ID du modèle","trading-assistant.detail.close":"Fermer","trading-assistant.detail.loadFailed":"Échec de l'obtention des détails de la stratégie","trading-assistant.equity.noData":"Aucune donnée sur la valeur nette pour l'instant","trading-assistant.equity.equity":"valeur nette","trading-assistant.exchange.tradingMode":"modèle commercial","trading-assistant.exchange.virtual":"trading simulé","trading-assistant.exchange.live":"Transaction réelle","trading-assistant.exchange.selectExchange":"Sélectionnez un échange","trading-assistant.exchange.walletAddress":"adresse du portefeuille","trading-assistant.exchange.walletAddressPlaceholder":"Veuillez saisir l'adresse de votre portefeuille (en commençant par 0x)","trading-assistant.exchange.privateKey":"clé privée","trading-assistant.exchange.privateKeyPlaceholder":"Veuillez saisir la clé privée (64 caractères)","trading-assistant.exchange.testConnection":"tester la connexion","trading-assistant.exchange.connectionSuccess":"Connexion réussie","trading-assistant.exchange.connectionFailed":"La connexion a échoué","trading-assistant.exchange.testFailed":"Le test de connexion a échoué","trading-assistant.exchange.fillComplete":"Veuillez remplir les informations complètes de configuration de l'échange","trading-assistant.strategyTypeOptions.ai":"Stratégie basée sur l'IA","trading-assistant.strategyTypeOptions.indicator":"Stratégie d'indicateurs techniques","trading-assistant.strategyTypeOptions.aiDeveloping":"La fonction de stratégie basée sur l'IA est en cours de développement, alors restez à l'écoute","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"Des fonctionnalités de stratégie basées sur l'IA sont en cours de développement","trading-assistant.indicatorType.trend":"Tendance","trading-assistant.indicatorType.momentum":"élan","trading-assistant.indicatorType.volatility":"Fluctuations","trading-assistant.indicatorType.volume":"Volume","trading-assistant.indicatorType.custom":"Personnaliser","trading-assistant.exchangeNames":{okx:"OKX",binance:"Binance",hyperliquid:"Hyperliquide",blockchaincom:"Blockchain.com",coinbaseexchange:"Coinbase",gate:"Porte.io",mexc:"MEXIQUE",kraken:"Kraken",bitfinex:"Bitfinex",bybit:"Bybit",kucoin:"KuCoin",huobi:"Huobi",bitget:"Bitget",bitmex:"BitMEX",deribit:"Déribuer",phemex:"Phemex",bitmart:"BitMart",bitstamp:"Timbre de bits",bittrex:"Bittrex",poloniex:"Poloniex",gemini:"Gémeaux",cryptocom:"Crypto.com",bitflyer:"bitFlyer",upbit:"Débit ascendant",bithumb:"Bithumb",coinone:"Coinone",zb:"ZB",lbank:"LBanque",bibox:"Bibox",bigone:"BigONE",bitrue:"Bitrue",coinex:"CoinEx",digifinex:"DigiFinex",ftx:"FTX",ftxus:"FTX États-Unis",binanceus:"Binance États-Unis",binancecoinm:"Binance COIN-M",binanceusdm:"Binance USDⓈ-M",deepcoin:"Deepcoin"},"ai-trading-assistant.title":"Assistant de trading IA","ai-trading-assistant.strategyList":"Liste de stratégies","ai-trading-assistant.createStrategy":"Créer une politique","ai-trading-assistant.noStrategy":"Pas encore de stratégie","ai-trading-assistant.selectStrategy":"Veuillez sélectionner une stratégie à gauche pour afficher les détails","ai-trading-assistant.startStrategy":"stratégie de lancement","ai-trading-assistant.stopStrategy":"stratégie d'arrêt","ai-trading-assistant.editStrategy":"Stratégie éditoriale","ai-trading-assistant.deleteStrategy":"Supprimer la stratégie","ai-trading-assistant.status.running":"Courir","ai-trading-assistant.status.stopped":"Arrêté","ai-trading-assistant.status.error":"Erreur","ai-trading-assistant.tabs.tradingRecords":"historique des transactions","ai-trading-assistant.tabs.positions":"Enregistrement de poste","ai-trading-assistant.tabs.aiDecisions":"Enregistrement de décision IA","ai-trading-assistant.tabs.equityCurve":"courbe des actions","ai-trading-assistant.form.createTitle":"Créer des stratégies de trading IA","ai-trading-assistant.form.editTitle":"Modifier la stratégie de trading de l'IA","ai-trading-assistant.form.strategyName":"Nom de la stratégie","ai-trading-assistant.form.modelId":"Modèle d'IA","ai-trading-assistant.form.modelIdHint":"Utilisez le service système OpenRouter sans configurer la clé API","ai-trading-assistant.form.decideInterval":"intervalle de décision","ai-trading-assistant.form.decideInterval5m":"5 minutes","ai-trading-assistant.form.decideInterval10m":"10 minutes","ai-trading-assistant.form.decideInterval30m":"30 minutes","ai-trading-assistant.form.decideInterval1h":"1 heure","ai-trading-assistant.form.decideInterval4h":"4 heures","ai-trading-assistant.form.decideInterval1d":"1 jour","ai-trading-assistant.form.decideInterval1w":"1 semaine","ai-trading-assistant.form.decideIntervalHint":"L’intervalle de temps nécessaire à l’IA pour prendre des décisions","ai-trading-assistant.form.runPeriod":"Cycle d'exécution","ai-trading-assistant.form.runPeriodHint":"L'heure de début et l'heure de fin de l'exécution de la stratégie","ai-trading-assistant.form.startDate":"date de début","ai-trading-assistant.form.endDate":"date de fin","ai-trading-assistant.form.qdtCostTitle":"Instructions de déduction QDT","ai-trading-assistant.form.qdtCostHint":"{cost} QDT sera déduit pour chaque décision de l'IA. Veuillez vous assurer que votre compte dispose d'un solde QDT suffisant. Lors de l'exécution de la stratégie, des frais seront déduits en temps réel pour chaque décision.","ai-trading-assistant.form.apiKey":"Clé API","ai-trading-assistant.form.exchange":"Sélectionnez un échange","ai-trading-assistant.form.secretKey":"Clé secrète","ai-trading-assistant.form.passphrase":"Phrase secrète","ai-trading-assistant.form.testConnection":"tester la connexion","ai-trading-assistant.form.symbol":"paire de trading","ai-trading-assistant.form.symbolHint":"Sélectionnez la paire de trading à trader","ai-trading-assistant.form.initialCapital":"Montant investi (marge)","ai-trading-assistant.form.leverage":"Tirer parti de plusieurs","ai-trading-assistant.form.timeframe":"période","ai-trading-assistant.form.timeframe1m":"1 minute","ai-trading-assistant.form.timeframe5m":"5 minutes","ai-trading-assistant.form.timeframe15m":"15 minutes","ai-trading-assistant.form.timeframe30m":"30 minutes","ai-trading-assistant.form.timeframe1H":"1 heure","ai-trading-assistant.form.timeframe4H":"4 heures","ai-trading-assistant.form.timeframe1D":"1 jour","ai-trading-assistant.form.marketType":"type de marché","ai-trading-assistant.form.marketTypeFutures":"contrat","ai-trading-assistant.form.marketTypeSpot":"Spot","ai-trading-assistant.form.totalPnl":"Total des profits et pertes","ai-trading-assistant.form.customPrompt":"Mots d'invite personnalisés","ai-trading-assistant.form.customPromptHint":"Facultatif, utilisé pour personnaliser les stratégies de trading de l'IA et la logique de prise de décision","ai-trading-assistant.form.cancel":"Annuler","ai-trading-assistant.form.prev":"Étape précédente","ai-trading-assistant.form.next":"Étape suivante","ai-trading-assistant.form.confirmCreate":"Confirmer la création","ai-trading-assistant.form.confirmEdit":"Confirmer les modifications","ai-trading-assistant.messages.createSuccess":"Stratégie créée avec succès","ai-trading-assistant.messages.createFailed":"Échec de la création de la stratégie","ai-trading-assistant.messages.updateSuccess":"Mise à jour de la stratégie réussie","ai-trading-assistant.messages.updateFailed":"Échec de la mise à jour de la stratégie","ai-trading-assistant.messages.deleteSuccess":"Suppression de la stratégie réussie","ai-trading-assistant.messages.deleteFailed":"Échec de la suppression de la stratégie","ai-trading-assistant.messages.startSuccess":"La stratégie a démarré avec succès","ai-trading-assistant.messages.startFailed":"Échec du démarrage de la stratégie","ai-trading-assistant.messages.stopSuccess":"La stratégie s'est arrêtée avec succès","ai-trading-assistant.messages.stopFailed":"La stratégie d'arrêt a échoué","ai-trading-assistant.messages.loadFailed":"Échec de l'obtention de la liste des règles","ai-trading-assistant.messages.loadDecisionsFailed":"Échec de l'obtention du dossier de décision de l'IA","ai-trading-assistant.messages.deleteConfirm":"Êtes-vous sûr de vouloir supprimer cette stratégie ? Cette opération est irréversible.","ai-trading-assistant.placeholders.inputStrategyName":"Veuillez saisir un nom de stratégie","ai-trading-assistant.placeholders.selectModelId":"Veuillez sélectionner un modèle d'IA","ai-trading-assistant.placeholders.selectDecideInterval":"Veuillez sélectionner un intervalle de décision","ai-trading-assistant.placeholders.startTime":"heure de début","ai-trading-assistant.placeholders.endTime":"heure de fin","ai-trading-assistant.placeholders.inputApiKey":"Veuillez saisir la clé API","ai-trading-assistant.placeholders.selectExchange":"Veuillez sélectionner un échange","ai-trading-assistant.placeholders.inputSecretKey":"Veuillez entrer la clé secrète","ai-trading-assistant.placeholders.inputPassphrase":"Veuillez saisir la phrase secrète","ai-trading-assistant.placeholders.selectSymbol":"Veuillez sélectionner une paire de trading, telle que : BTC/USDT","ai-trading-assistant.placeholders.selectTimeframe":"Veuillez sélectionner une période","ai-trading-assistant.placeholders.inputCustomPrompt":"Veuillez saisir un mot d'invite personnalisé (facultatif)","ai-trading-assistant.validation.strategyNameRequired":"Veuillez saisir un nom de stratégie","ai-trading-assistant.validation.modelIdRequired":"Veuillez sélectionner un modèle d'IA","ai-trading-assistant.validation.runPeriodRequired":"Veuillez sélectionner un cycle d'exécution","ai-trading-assistant.validation.apiKeyRequired":"Veuillez saisir la clé API","ai-trading-assistant.validation.exchangeRequired":"Veuillez sélectionner un échange","ai-trading-assistant.validation.secretKeyRequired":"Veuillez entrer la clé secrète","ai-trading-assistant.validation.symbolRequired":"Veuillez sélectionner une paire de trading","ai-trading-assistant.validation.initialCapitalRequired":"Veuillez saisir le montant de l'investissement","ai-trading-assistant.table.time":"temps","ai-trading-assistant.table.type":"Tapez","ai-trading-assistant.table.price":"prix","ai-trading-assistant.table.amount":"Quantité","ai-trading-assistant.table.value":"Montant","ai-trading-assistant.table.symbol":"paire de trading","ai-trading-assistant.table.side":"direction","ai-trading-assistant.table.size":"Quantité de position","ai-trading-assistant.table.entryPrice":"Prix d'ouverture","ai-trading-assistant.table.currentPrice":"prix actuel","ai-trading-assistant.table.unrealizedPnl":"profit ou perte non réalisé","ai-trading-assistant.table.profit":"Profits et pertes","ai-trading-assistant.table.openLong":"Ouvert longtemps","ai-trading-assistant.table.closeLong":"Pinduo","ai-trading-assistant.table.openShort":"Ouvert court","ai-trading-assistant.table.closeShort":"vide","ai-trading-assistant.table.addLong":"Gadot","ai-trading-assistant.table.addShort":"ajouter un court","ai-trading-assistant.table.closeShortProfit":"Prendre des bénéfices sur une position courte","ai-trading-assistant.table.closeShortStop":"Arrêter la perte","ai-trading-assistant.table.closeLongProfit":"Arrêtez-vous longtemps et profitez","ai-trading-assistant.table.closeLongStop":"Arrêter la perte","ai-trading-assistant.table.buy":"acheter","ai-trading-assistant.table.sell":"vendre","ai-trading-assistant.table.long":"Allez-y longtemps","ai-trading-assistant.table.short":"court","ai-trading-assistant.table.hold":"tenir","ai-trading-assistant.table.reasoning":"Raison de l'analyse","ai-trading-assistant.table.decisions":"prise de décision","ai-trading-assistant.table.riskAssessment":"évaluation des risques","ai-trading-assistant.table.confidence":"Confiance","ai-trading-assistant.table.totalRecords":"{total} enregistrements au total","ai-trading-assistant.table.noPositions":"Aucun poste pour l'instant","ai-trading-assistant.detail.title":"Détails de la stratégie","ai-trading-assistant.equity.noData":"Aucune donnée sur la valeur nette pour l'instant","ai-trading-assistant.equity.equity":"valeur nette","ai-trading-assistant.exchange.testFailed":"Le test de connexion a échoué","ai-trading-assistant.exchange.connectionSuccess":"Connexion réussie","ai-trading-assistant.exchange.connectionFailed":"La connexion a échoué","ai-trading-assistant.form.advancedSettings":"Paramètres avancés","ai-trading-assistant.form.orderMode":"Mode de commande","ai-trading-assistant.form.orderModeMaker":"Créateur","ai-trading-assistant.form.orderModeTaker":"Prix du marché (Preneur)","ai-trading-assistant.form.orderModeHint":"Le mode d'ordre en attente utilise des ordres limités et les frais de traitement sont inférieurs ; le mode prix du marché est exécuté immédiatement et les frais de traitement sont plus élevés.","ai-trading-assistant.form.makerWaitSec":"Temps d'attente pour les commandes en attente (secondes)","ai-trading-assistant.form.makerWaitSecHint":"Le temps d'attente pour la transaction après avoir passé une commande. Annulez et réessayez après l'expiration du délai.","ai-trading-assistant.form.makerRetries":"Nombre de tentatives pour les commandes en attente","ai-trading-assistant.form.makerRetriesHint":"Le nombre maximum de tentatives lorsqu'un ordre en attente n'est pas exécuté","ai-trading-assistant.form.fallbackToMarket":"L'ordre en attente échoue et le prix du marché est dégradé.","ai-trading-assistant.form.fallbackToMarketHint":"Lorsque l'ordre en attente d'ouverture/de clôture n'a pas été exécuté, s'il doit être rétrogradé en ordre au marché pour garantir que la transaction soit terminée.","ai-trading-assistant.form.marginMode":"Mode marge","ai-trading-assistant.form.marginModeCross":"Entrepôt complet","ai-trading-assistant.form.marginModeIsolated":"Position isolée","ai-analysis.title":"Moteur de trading quantique","ai-analysis.system.online":"en ligne","ai-analysis.system.agents":"agent","ai-analysis.system.active":"actif","ai-analysis.system.stage":"scène","ai-analysis.panel.roster":"Composition des agents","ai-analysis.panel.thinking":"En pensant...","ai-analysis.panel.done":"Terminé","ai-analysis.panel.standby":"veille","ai-analysis.input.title":"Moteur de trading quantique","ai-analysis.input.placeholder":"Sélectionnez l'actif cible (par exemple BTC/USDT)","ai-analysis.input.watchlist":"Stocks optionnels","ai-analysis.input.start":"Démarrer l'analyse","ai-analysis.input.recent":"Tâches récentes :","ai-analysis.vis.stage":"étape","ai-analysis.vis.processing":"Traitement","ai-analysis.result.complete":"Analyse terminée","ai-analysis.result.signal":"signal final","ai-analysis.result.confidence":"Confiance :","ai-analysis.result.new":"nouvelle analyse","ai-analysis.result.full":"Voir le rapport complet","ai-analysis.logs.title":"Journal système","ai-analysis.modal.title":"rapport confidentiel","ai-analysis.modal.fundamental":"analyse fondamentale","ai-analysis.modal.technical":"Analyse technique","ai-analysis.modal.sentiment":"Analyse émotionnelle","ai-analysis.modal.risk":"évaluation des risques","ai-analysis.stage.idle":"veille","ai-analysis.stage.1":"Première phase : analyse multidimensionnelle","ai-analysis.stage.2":"Phase deux : débat long-court","ai-analysis.stage.3":"Phase trois : planification stratégique","ai-analysis.stage.4":"La quatrième étape : la revue du contrôle des risques","ai-analysis.stage.complete":"Terminé","ai-analysis.agent.investment_director":"Directeur des investissements","ai-analysis.agent.role.investment_director":"Analyse complète et conclusion finale","ai-analysis.agent.market":"analyste de marché","ai-analysis.agent.role.market":"Données technologiques et de marché","ai-analysis.agent.fundamental":"analyste fondamental","ai-analysis.agent.role.fundamental":"Finances et valorisation","ai-analysis.agent.technical":"analyste technique","ai-analysis.agent.role.technical":"Indicateurs et graphiques techniques","ai-analysis.agent.news":"analyste de nouvelles","ai-analysis.agent.role.news":"Filtre d'actualités mondiales","ai-analysis.agent.sentiment":"analyste des sentiments","ai-analysis.agent.role.sentiment":"Social et émotionnel","ai-analysis.agent.risk":"analyste des risques","ai-analysis.agent.role.risk":"Vérification des risques de base","ai-analysis.agent.bull":"chercheur optimiste","ai-analysis.agent.role.bull":"Extraction de catalyseurs de croissance","ai-analysis.agent.bear":"chercheur baissier","ai-analysis.agent.role.bear":"Recherche de risques et de défauts","ai-analysis.agent.manager":"directeur de recherche","ai-analysis.agent.role.manager":"modérateur du débat","ai-analysis.agent.trader":"commerçant","ai-analysis.agent.role.trader":"Stratège exécutif","ai-analysis.agent.risky":"analyste activiste","ai-analysis.agent.role.risky":"stratégie agressive","ai-analysis.agent.neutral":"analyste d'équilibre","ai-analysis.agent.role.neutral":"stratégie d'équilibrage","ai-analysis.agent.safe":"analyste conservateur","ai-analysis.agent.role.safe":"stratégie conservatrice","ai-analysis.agent.cro":"Responsable du contrôle des risques (CRO)","ai-analysis.agent.role.cro":"autorité décisionnelle finale","ai-analysis.script.market":"Récupération des données OHLCV des principaux échanges...","ai-analysis.script.fundamental":"Récupération des rapports financiers trimestriels...","ai-analysis.script.technical":"Analyser les indicateurs techniques et les modèles de graphiques...","ai-analysis.script.news":"Analyse de l'actualité financière mondiale...","ai-analysis.script.sentiment":"Analyser les tendances des réseaux sociaux...","ai-analysis.script.risk":"Calcul de la volatilité historique...","invite.inviteLink":"Lien d'invitation","invite.copy":"Copier le lien","invite.copySuccess":"Copiez avec succès !","invite.copyFailed":"Échec de la copie, veuillez copier manuellement","invite.noInviteLink":"Lien d'invitation non généré","invite.totalInvites":"Invitations cumulées","invite.totalReward":"Récompenses cumulées","invite.rules":"Règles d'invitation","invite.rule1":"Chaque fois que vous invitez avec succès un ami à s'inscrire, vous recevrez une récompense","invite.rule2":"Si l'ami invité termine la première transaction, vous recevrez des récompenses supplémentaires","invite.rule3":"Les récompenses d'invitation seront envoyées directement sur votre compte","invite.inviteList":"Liste d'invitations","invite.tasks":"centre de mission","invite.inviteeName":"Invité","invite.inviteTime":"Heure d'invitation","invite.status":"Statut","invite.reward":"récompense","invite.active":"actif","invite.inactive":"Non activé","invite.completed":"Terminé","invite.claimed":"Reçu","invite.pending":"A compléter","invite.goToTask":"compléter","invite.claimReward":"réclamer des récompenses","invite.verify":"Vérification terminée","invite.verifySuccess":"Vérification réussie ! Tâche terminée","invite.verifyNotCompleted":"La tâche n'est pas encore terminée, veuillez d'abord la terminer","invite.verifyFailed":"La vérification a échoué, veuillez réessayer plus tard","invite.claimSuccess":"Vous avez reçu avec succès {reward} QDT !","invite.claimFailed":"Échec de la collecte, veuillez réessayer plus tard","invite.totalRecords":"{total} enregistrements au total","invite.task.twitter.title":"Retweeter sur X (Twitter)","invite.task.twitter.desc":"Partagez nos tweets officiels sur votre compte X (Twitter)","invite.task.youtube.title":"Suivez notre chaîne YouTube","invite.task.youtube.desc":"Abonnez-vous et suivez notre chaîne YouTube officielle","invite.task.telegram.title":"Rejoindre le groupe Telegram","invite.task.telegram.desc":"Rejoignez notre groupe communautaire officiel Telegram","invite.task.discord.title":"Rejoignez un serveur Discord","invite.task.discord.desc":"Rejoignez notre serveur communautaire Discord",message:"-","layouts.usermenu.dialog.title":"informations","layouts.usermenu.dialog.content":"Êtes-vous sûr de vouloir vous déconnecter ?","layouts.userLayout.title":"Trouver la vérité dans l'incertitude","dashboard.indicator.boundary.message":"Note: The indicator script only computes plots + buy/sell signals. Position sizing, risk, scaling, fees/slippage belong to execution config.","dashboard.indicator.boundary.indicatorRule":"Keep the script to buy/sell only (and set df['buy']/df['sell']). Do NOT implement position management, TP/SL, scaling in the script.","dashboard.indicator.boundary.backtestRule":"Rule: If a bar has a main signal (buy/sell → open/close/reverse), scaling in/out is skipped on the same bar.","dashboard.indicator.guide.title":"Python Indicator & Strategy Development Guide","dashboard.indicator.guide.intro":"This platform supports writing custom technical indicators and trading signals using Python. The system includes built-in pandas and numpy data analysis libraries. You can use standard DataFrame operations to process K-line data and draw charts or mark buy/sell signals.","dashboard.indicator.guide.section1.title":"1. Runtime Environment & Predefined Variables","dashboard.indicator.guide.section1.env":"Your code runs in a browser-based Python environment (Pyodide).","dashboard.indicator.guide.section1.libs":"Pre-installed Libraries","dashboard.indicator.guide.section1.libsDesc":"The following libraries are imported by default, no need to import again:","dashboard.indicator.guide.section1.libsList":"pandas (pd), numpy (np), math, json","dashboard.indicator.guide.section1.data":"Input Data: df","dashboard.indicator.guide.section1.dataDesc":"The system automatically converts current K-line data into a Pandas DataFrame object, variable name is df.","dashboard.indicator.guide.section1.dataColumns":"df contains the following columns (all float type):","dashboard.indicator.guide.section1.dataColumnsList":"time (timestamp, seconds), open, high, low, close, volume","dashboard.indicator.guide.section1.dataNote":"Data index is arranged from old to new (0 is the earliest data, last row is the latest data).","dashboard.indicator.guide.section1.dataIndex":"Important: df index is timestamp (DatetimeIndex), please preserve the index, avoid using .values which loses the index.","dashboard.indicator.guide.section2.title":"2. Parameter Definition","dashboard.indicator.guide.section2.desc":"You can define variables as parameters at the beginning of your code. The system will try to parse statements like variable = value as adjustable parameters.","dashboard.indicator.guide.section2.example":"Parameter Example","dashboard.indicator.guide.section2.exampleCode":"span = 20 or multiplier = 2.0","dashboard.indicator.guide.section3.title":"3. Backtest Signal Setup (Important!)","dashboard.indicator.guide.section3.desc":"If you want your indicator to support backtesting, you must set the following two columns in your code:","dashboard.indicator.guide.section3.backtestRequired":"Required for Backtesting:","dashboard.indicator.guide.section3.backtestBuySignal":"df['buy_signal'] - Boolean Series, True indicates buy signal","dashboard.indicator.guide.section3.backtestSellSignal":"df['sell_signal'] - Boolean Series, True indicates sell signal","dashboard.indicator.guide.section3.backtestExample":"Example:","dashboard.indicator.guide.section3.backtestExampleCode":"df['buy_signal'] = condition_buy
df['sell_signal'] = condition_sell","dashboard.indicator.guide.section3.backtestNote":"Note: Even if you only set output.signals for chart display, you must set these two columns to enable backtesting.","dashboard.indicator.guide.section4.title":"4. Output Requirements: output","dashboard.indicator.guide.section4.desc":"At the end of code execution, you must define a dictionary named output to tell the chart how to display results.","dashboard.indicator.guide.section4.fields":"The output dictionary contains the following fields:","dashboard.indicator.guide.section4.plots":"plots - For drawing lines (e.g., moving averages, RSI)","dashboard.indicator.guide.section4.signals":"signals - For marking buy/sell signals (e.g., arrows, labels)","dashboard.indicator.guide.section4.name":"name - Indicator name (optional)","dashboard.indicator.guide.section4.calculatedVars":"calculatedVars - Calculated variables (optional, for displaying additional information)","dashboard.indicator.guide.section5.title":"5. Plot Configuration (Plots)","dashboard.indicator.guide.section5.desc":"Each object in the plots list represents a line.","dashboard.indicator.guide.section5.table.field":"Field","dashboard.indicator.guide.section5.table.type":"Type","dashboard.indicator.guide.section5.table.required":"Required","dashboard.indicator.guide.section5.table.requiredYes":"Yes","dashboard.indicator.guide.section5.table.requiredNo":"No","dashboard.indicator.guide.section5.table.desc":"Description","dashboard.indicator.guide.section5.table.name":"The name of the indicator line, displayed in the legend","dashboard.indicator.guide.section5.table.data":"Data list, length must match the number of rows in df. Recommended to use series.tolist()","dashboard.indicator.guide.section5.table.color":"Line color (Hex format, e.g. '#ff0000'). If not filled, the system will automatically assign","dashboard.indicator.guide.section5.table.typeDesc":"Chart type, default is 'line'","dashboard.indicator.guide.section5.table.overlay":"Important. True means display on main chart (with K-line), False means display on sub-chart (independent area)","dashboard.indicator.guide.section5.example":"Example: Draw Simple Moving Average (SMA)","dashboard.indicator.guide.section5.exampleCalc":"Calculate SMA","dashboard.indicator.guide.section5.exampleOutput":"Construct Output","dashboard.indicator.guide.section5.exampleOverlay":"Display on main chart","dashboard.indicator.guide.section6.title":"6. Signal Markers (Signals)","dashboard.indicator.guide.section6.desc":"signals are used to mark buy/sell points on specific K-lines through icons or text. Note: This is only for chart display. The backtest system uses df['buy_signal'] and df['sell_signal'].","dashboard.indicator.guide.section6.table.type":"Signal type: 'buy' (buy, marked below K-line) or 'sell' (sell, marked above K-line)","dashboard.indicator.guide.section6.table.data":"Signal data list. Fill price value at signal positions, fill None (or np.nan) at non-signal positions","dashboard.indicator.guide.section6.table.text":'Text displayed on the label (e.g. "B", "S", "Buy", "Sell")',"dashboard.indicator.guide.section6.table.color":"Marker color","dashboard.indicator.guide.section6.hint":"The system automatically handles positioning.","dashboard.indicator.guide.section6.buy":"Markers will be automatically positioned below the Low of the current K-line","dashboard.indicator.guide.section6.sell":"Markers will be automatically positioned above the High of the current K-line","dashboard.indicator.guide.section6.example":"Example: Draw Buy/Sell Signals","dashboard.indicator.guide.section6.exampleInit":"Initialize signal list, fill all with None","dashboard.indicator.guide.section6.exampleLogic":"Simple logic: mark buy when close price is greater than open price","dashboard.indicator.guide.section6.exampleNote":"In actual logic, please use loops or vectorized operations","dashboard.indicator.guide.section6.examplePrice":"Record price","dashboard.indicator.guide.section6.exampleText":"Buy","dashboard.indicator.guide.section7.title":"7. Complete Code Examples","dashboard.indicator.guide.section7.exampleA":"Example A: Dual EMA Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleACode":'# 1. Calculate indicators
df[\'ema_fast\'] = df[\'close\'].ewm(span=5, adjust=False).mean()
df[\'ema_slow\'] = df[\'close\'].ewm(span=13, adjust=False).mean()

# 2. Calculate crossover signals
cross_up = (df[\'ema_fast\'] > df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) <= df[\'ema_slow\'].shift(1))
cross_down = (df[\'ema_fast\'] < df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) >= df[\'ema_slow\'].shift(1))

# 3. 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = cross_up
df[\'close_long\'] = cross_down
df[\'open_short\'] = cross_down
df[\'close_short\'] = cross_up

# 4. Generate signal data for chart display
buy_signals = [df[\'low\'].iloc[i] * 0.995 if cross_up.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if cross_down.iloc[i] else None for i in range(len(df))]

# 5. Build output
output = {
"name": "Dual EMA Strategy",
"plots": [
{"name": "EMA 5", "data": df[\'ema_fast\'].tolist(), "color": "#FF6B6B", "overlay": True},
{"name": "EMA 13", "data": df[\'ema_slow\'].tolist(), "color": "#4ECDC4", "overlay": True}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section7.exampleB":"Example B: Bollinger Bands - Chart Display Only","dashboard.indicator.guide.section7.exampleBCode":'# Calculate Bollinger Bands (chart display only, no backtesting)
length = 20
mult = 2.0
df[\'sma\'] = df[\'close\'].rolling(length).mean()
df[\'std\'] = df[\'close\'].rolling(length).std()
df[\'upper\'] = df[\'sma\'] + mult * df[\'std\']
df[\'lower\'] = df[\'sma\'] - mult * df[\'std\']

output = {
"name": "Bollinger Bands",
"plots": [
{"name": "Upper", "data": df[\'upper\'].tolist(), "color": "#FF5252", "overlay": True},
{"name": "Middle", "data": df[\'sma\'].tolist(), "color": "#2196F3", "overlay": True},
{"name": "Lower", "data": df[\'lower\'].tolist(), "color": "#00E676", "overlay": True}
]
}',"dashboard.indicator.guide.section7.exampleC":"Example C: RSI Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleCCode":'# Calculate RSI
delta = df[\'close\'].diff()
up = delta.clip(lower=0)
down = -1 * delta.clip(upper=0)
ema_up = up.ewm(com=13, adjust=False).mean()
ema_down = down.ewm(com=13, adjust=False).mean()
rs = ema_up / ema_down
df[\'rsi\'] = 100 - (100 / (1 + rs))

# Generate trading signals
buy_condition = df[\'rsi\'] < 30 # Oversold buy
sell_condition = df[\'rsi\'] > 70 # Overbought sell

# 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = buy_condition
df[\'close_long\'] = sell_condition
df[\'open_short\'] = sell_condition
df[\'close_short\'] = buy_condition

# Generate chart signals
buy_signals = [df[\'low\'].iloc[i] * 0.995 if buy_condition.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if sell_condition.iloc[i] else None for i in range(len(df))]

output = {
"name": "RSI Strategy",
"plots": [
{"name": "RSI", "data": df[\'rsi\'].tolist(), "color": "#9C27B0", "overlay": False},
{"name": "Overbought", "data": [70] * len(df), "color": "#FF5252", "style": "dashed", "overlay": False},
{"name": "Oversold", "data": [30] * len(df), "color": "#00E676", "style": "dashed", "overlay": False}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section6.param":"Parameters","dashboard.indicator.guide.section6.calc":"Calculate","dashboard.indicator.guide.section6.output":"Output","dashboard.indicator.guide.section6.generate":"Generate signal data (initialize with None)","dashboard.indicator.guide.section6.subchart":"Display on sub-chart","dashboard.indicator.guide.section8.title":"8. Frequently Asked Questions (FAQ)","dashboard.indicator.guide.section8.q1":"Q: Why can't my indicator be backtested?","dashboard.indicator.guide.section8.a1":"A: The backtest system requires NEW signal columns: df['open_long'], df['close_long'], df['open_short'], df['close_short'] (boolean). Even if you set output.signals for chart display, you must set these columns to enable backtesting.","dashboard.indicator.guide.section8.q2":"Q: Data length mismatch?","dashboard.indicator.guide.section8.a2":"A: The data list in plots and signals must have exactly the same length as the K-line data. If you use df['xxx'].tolist(), there is usually no problem.","dashboard.indicator.guide.section8.q3":"Q: How to handle NaN (empty values)?","dashboard.indicator.guide.section8.a3":"A: Pandas calculations (such as rolling mean) will produce NaN at the beginning. The system will automatically convert NaN to null for chart rendering. You don't need to manually clean it, but if you need specific logic, you can use df.fillna(0) or other methods.","dashboard.indicator.guide.section8.q4":"Q: Index mismatch causing all signals to be NaN?","dashboard.indicator.guide.section8.a4":"A: Please ensure you preserve the original df index (timestamp). Avoid using .values to create new Series. Use columns directly like df['close'] for operations.","dashboard.indicator.guide.section8.q5":"Q: Can I use third-party network libraries?","dashboard.indicator.guide.section8.a5":"A: No. The runtime environment is a browser sandbox and cannot use libraries like requests to request external APIs, nor can it install additional pip packages. Limited to built-in libraries such as pandas, numpy, math, json.","dashboard.indicator.guide.section8.q6":"Q: How to debug code?","dashboard.indicator.guide.section8.a6":"A: If the chart does not display indicators, it is usually because the Python code has an error. Please check for syntax errors or array index out of bounds. It is recommended to debug the algorithm logic in a local Python environment first, then copy it in.","dashboard.indicator.guide.section8.q7":"Q: Backtest shows 0 signals?","dashboard.indicator.guide.section8.a7":"A: Please check the data type of df['open_long']/df['close_long']/df['open_short']/df['close_short']. They should be boolean (True/False), not numeric. Use condition.fillna(False).astype(bool) to ensure correct type.","dashboard.indicator.backtest.commissionHint":"Charged on notional value (incl. leverage) per trade; both entry & exit are deducted from balance.","dashboard.indicator.backtest.historyTitle":"Backtest History","dashboard.indicator.backtest.historyRefresh":"Refresh","dashboard.indicator.backtest.historyView":"View","dashboard.indicator.backtest.historyNoData":"No backtest history","dashboard.indicator.backtest.historyUseCurrent":"Only current symbol/timeframe","dashboard.indicator.backtest.historyFilterSymbol":"Symbol","dashboard.indicator.backtest.historyFilterTimeframe":"Timeframe","dashboard.indicator.backtest.historyApply":"Apply filters","dashboard.indicator.backtest.historyAIAnalyze":"AI Analyze","dashboard.indicator.backtest.historyAIAnalyzeTitle":"AI Suggestions","dashboard.indicator.backtest.historyNoAIResult":"No AI analysis result","dashboard.indicator.backtest.historyRunId":"Run ID","dashboard.indicator.backtest.historyCreatedAt":"Time","dashboard.indicator.backtest.historyRange":"Range","dashboard.indicator.backtest.historyStatus":"Status","dashboard.indicator.backtest.historyStatusSuccess":"Success","dashboard.indicator.backtest.historyStatusFailed":"Failed","dashboard.indicator.backtest.historyActions":"Actions","dashboard.indicator.backtest.hint.entryPctMax":"Max entry: {maxPct}% (reserve budget for future scale-ins)","trading-assistant.exchange.ipWhitelistTip":"Please add the following IPs to the whitelist in your exchange API settings:","signal-robot.title":"Signal Robot Console","signal-robot.createBot":"Create New Bot","signal-robot.search.nameOrSymbol":"Name/Symbol","signal-robot.search.placeholder":"Search bot name or symbol","signal-robot.search.status":"Status","signal-robot.search.statusAll":"All","signal-robot.search.statusRunning":"Running","signal-robot.search.statusPaused":"Paused","signal-robot.search.query":"Query","signal-robot.search.reset":"Reset","signal-robot.table.botName":"Bot Name","signal-robot.table.symbolTimeframe":"Symbol/Timeframe","signal-robot.table.triggerStrategy":"Trigger Strategy","signal-robot.table.notificationChannels":"Notification Channels","signal-robot.table.status":"Status","signal-robot.table.action":"Action","signal-robot.table.triggerConditions":"{count} trigger conditions","signal-robot.table.monitoring":"Monitoring","signal-robot.table.paused":"Paused","signal-robot.table.edit":"Edit","signal-robot.table.pause":"Pause","signal-robot.table.start":"Start","signal-robot.table.delete":"Delete","signal-robot.table.deleteConfirm":"Are you sure you want to delete this bot?","signal-robot.table.deleteSuccess":"Deleted successfully","signal-robot.table.startSuccess":"Bot started","signal-robot.table.pauseSuccess":"Bot paused","signal-robot.channel.telegram":"Telegram","signal-robot.channel.discord":"Discord","signal-robot.channel.email":"Email","signal-robot.channel.webhook":"Webhook","signal-robot.channel.browser":"Browser Push","signal-robot.modal.createTitle":"Create New Signal Robot","signal-robot.modal.editTitle":"Edit Signal Robot","signal-robot.modal.step.basic":"Basic Settings","signal-robot.modal.step.entry":"Entry Strategy","signal-robot.modal.step.position":"Position Management","signal-robot.modal.step.risk":"Risk Control","signal-robot.modal.step.notify":"Notification Config","signal-robot.modal.prev":"Previous","signal-robot.modal.next":"Next","signal-robot.modal.preview":"Preview Backtest","signal-robot.modal.complete":"Complete & Run","signal-robot.modal.saveSuccess":"Saved successfully","signal-robot.modal.previewDeveloping":"Preview feature is under development...","signal-robot.modal.basicInfoRequired":"Please complete basic information","signal-robot.basic.alert":"Set basic information for the bot","signal-robot.basic.title":"Basic Information","signal-robot.basic.botName":"Bot Name","signal-robot.basic.botNamePlaceholder":"e.g.: BTC SuperTrend Strategy","signal-robot.basic.symbol":"Trading Pair","signal-robot.basic.symbolPlaceholder":"Select from watchlist","signal-robot.basic.noWatchlist":"No watchlist items, please add in market page first","signal-robot.basic.timeframe":"K-Line Period","signal-robot.basic.timeframe15m":"15 Minutes","signal-robot.basic.timeframe30m":"30 Minutes","signal-robot.basic.timeframe1h":"1 Hour","signal-robot.basic.timeframe4h":"4 Hours","signal-robot.basic.timeframe1d":"1 Day","signal-robot.basic.autoNameSuggestion":"{symbol} Signal Robot","signal-robot.entry.alert":"Trigger entry signal when all conditions below are met","signal-robot.entry.condition":"Condition {index}","signal-robot.entry.indicator":"Indicator","signal-robot.entry.indicatorSupertrend":"SuperTrend","signal-robot.entry.indicatorEma":"EMA (Exponential Moving Average)","signal-robot.entry.indicatorRsi":"RSI (Relative Strength Index)","signal-robot.entry.indicatorMacd":"MACD","signal-robot.entry.indicatorBollinger":"Bollinger Bands","signal-robot.entry.atrPeriod":"ATR Period","signal-robot.entry.multiplier":"Multiplier","signal-robot.entry.triggerSignal":"Trigger Signal","signal-robot.entry.signalTrendBullish":"Trend Bullish","signal-robot.entry.signalTrendBearish":"Trend Bearish","signal-robot.entry.signalIsUptrend":"Is Uptrend","signal-robot.entry.signalIsDowntrend":"Is Downtrend","signal-robot.entry.period":"Period","signal-robot.entry.compareCondition":"Compare Condition","signal-robot.entry.priceAbove":"Price > EMA (Price Above)","signal-robot.entry.priceBelow":"Price < EMA (Price Below)","signal-robot.entry.crossUp":"Price Crosses Above EMA (Golden Cross)","signal-robot.entry.crossDown":"Price Crosses Below EMA (Death Cross)","signal-robot.entry.compare":"Compare","signal-robot.entry.greaterThan":"Greater Than","signal-robot.entry.lessThan":"Less Than","signal-robot.entry.crossUpShort":"Cross Up","signal-robot.entry.crossDownShort":"Cross Down","signal-robot.entry.threshold":"Threshold","signal-robot.entry.selectIndicator":"Please select an indicator to configure parameters","signal-robot.entry.addCondition":"Add Condition","signal-robot.position.alert":"Configure initial position size, leverage and pyramiding rules","signal-robot.position.basicTitle":"Basic Position Management","signal-robot.position.initialSize":"Initial Size (Capital %)","signal-robot.position.initialSizeHint":"Recommended 5% - 20%","signal-robot.position.leverage":"Leverage","signal-robot.position.leverageHint":"Please ensure your exchange account supports this leverage","signal-robot.position.maxPyramiding":"Max Pyramiding Times","signal-robot.position.maxPyramidingHint":"0 means no pyramiding","signal-robot.position.pyramidingTitle":"Pyramiding Rules","signal-robot.position.pyramidingEnabled":"Enabled","signal-robot.position.pyramidingDisabled":"Disabled","signal-robot.position.pyramidingCondition":"Pyramiding Trigger Condition","signal-robot.position.priceRisePct":"Price Rises (Long) / Falls (Short)","signal-robot.position.profitPct":"Profit Reaches","signal-robot.position.triggerThreshold":"Trigger Threshold (%)","signal-robot.position.triggerThresholdHint":"e.g. 3%: add position once every 3% rise","signal-robot.position.addSize":"Single Add Size (Capital %)","signal-robot.position.pyramidingDisabledHint":"Pyramiding disabled, only initial position will be executed","signal-robot.risk.alert":"Configure take profit, stop loss and exit rules","signal-robot.risk.stopLossTitle":"Stop Loss","signal-robot.risk.stopLossEnabled":"Enabled","signal-robot.risk.stopLossDisabled":"Disabled","signal-robot.risk.stopLossType":"Stop Loss Type","signal-robot.risk.stopLossFixedPct":"Fixed Percentage","signal-robot.risk.stopLossAtrMultiplier":"ATR Multiplier","signal-robot.risk.stopLossValue":"Value","signal-robot.risk.stopLossFixedHint":"e.g. 2%: stop loss when loss reaches 2%","signal-robot.risk.stopLossAtrHint":"e.g. 2.0: stop loss when price touches ATR*2.0","signal-robot.risk.stopLossDisabledHint":"Stop loss disabled (high risk)","signal-robot.risk.trailingStopTitle":"Trailing Stop","signal-robot.risk.activationProfit":"Activation Profit (%)","signal-robot.risk.activationProfitHint":"Start trailing when profit reaches this level","signal-robot.risk.callbackPct":"Callback (%)","signal-robot.risk.callbackPctHint":"Trigger take profit when price falls from peak by this percentage","signal-robot.risk.trailingStopDisabledHint":"Trailing stop disabled","signal-robot.risk.otherExitTitle":"Other Exit Rules","signal-robot.risk.signalExit":"Allow Signal Exit","signal-robot.risk.signalExitHint":"Close position immediately when reverse signal appears (e.g. close long when short signal appears)","signal-robot.notify.alert":"Configure notification methods when signal is triggered","signal-robot.notify.channelTitle":"Notification Channels","signal-robot.notify.discordWebhook":"Discord Webhook","signal-robot.notify.genericWebhook":"Generic Webhook","signal-robot.notify.webhookUrl":"Webhook URL","signal-robot.notify.webhookUrlPlaceholder":"https://example.com/webhook","signal-robot.notify.discordUrl":"Discord URL","signal-robot.notify.discordUrlPlaceholder":"https://discord.com/api/webhooks/...","signal-robot.operator.greaterThan":"Greater Than","signal-robot.operator.lessThan":"Less Than","signal-robot.operator.equal":"Equal","signal-robot.operator.goldenCross":"Golden Cross","signal-robot.operator.deathCross":"Death Cross","signal-robot.operator.increaseBy":"Increase By","signal-robot.operator.decreaseBy":"Decrease By","signal-robot.indicator.price":"Price","signal-robot.indicator.rsi":"RSI","signal-robot.indicator.kdjK":"KDJ(K)","signal-robot.indicator.kdjJ":"KDJ(J)","signal-robot.indicator.macd":"MACD","signal-robot.indicator.macdHist":"MACD Histogram","signal-robot.indicator.bollingerUp":"Bollinger Upper","signal-robot.indicator.bollingerLow":"Bollinger Lower","signal-robot.indicator.volume":"Volume","signal-robot.indicator.changePct1h":"1H Change %","signal-robot.indicator.changePct24h":"24H Change %","signal-robot.indicator.signalLine":"Signal Line","settings.group.agent_memory":"Mémoire/Réflexion","settings.group.reflection_worker":"Worker de vérification de réflexion automatique","settings.field.ENABLE_AGENT_MEMORY":"Activer la mémoire de l’agent","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"Activer la recherche vectorielle (local)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"Dimension d’embedding","settings.field.AGENT_MEMORY_TOP_K":"Nombre Top-K","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"Taille de la fenêtre de candidats","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"Demi-vie de décroissance temporelle (jours)","settings.field.AGENT_MEMORY_W_SIM":"Poids de similarité","settings.field.AGENT_MEMORY_W_RECENCY":"Poids de récence","settings.field.AGENT_MEMORY_W_RETURNS":"Poids des rendements","settings.field.ENABLE_REFLECTION_WORKER":"Activer la vérification automatique","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"Intervalle de vérification (s)","profile.notifications.title":"Paramètres de notification","profile.notifications.hint":"Configurez vos méthodes de notification par défaut, utilisées automatiquement lors de la création de surveillances et alertes","profile.notifications.defaultChannels":"Canaux de notification par défaut","profile.notifications.browser":"Notification dans l'app","profile.notifications.email":"E-mail","profile.notifications.phone":"SMS","profile.notifications.telegramBotToken":"Token du Bot Telegram","profile.notifications.telegramBotTokenPlaceholder":"Entrez votre Token Bot Telegram","profile.notifications.telegramBotTokenHint":"Créez un bot via @BotFather pour obtenir le Token","profile.notifications.telegramChatId":"Chat ID Telegram","profile.notifications.telegramPlaceholder":"Entrez votre Chat ID Telegram (ex: 123456789)","profile.notifications.telegramHint":"Envoyez /start à @userinfobot pour obtenir votre Chat ID","profile.notifications.notifyEmail":"E-mail de notification","profile.notifications.emailPlaceholder":"Adresse e-mail pour recevoir les notifications","profile.notifications.emailHint":"Utilise l'e-mail du compte par défaut, vous pouvez en définir un autre","profile.notifications.phonePlaceholder":"Entrez le numéro de téléphone (ex: +33612345678)","profile.notifications.phoneHint":"L'administrateur doit configurer le service Twilio","profile.notifications.discordWebhook":"Webhook Discord","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"Créez un Webhook dans les paramètres du serveur Discord","profile.notifications.webhookUrl":"URL Webhook","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"URL Webhook personnalisée, notifications envoyées via POST JSON","profile.notifications.webhookToken":"Token Webhook (Optionnel)","profile.notifications.webhookTokenPlaceholder":"Bearer Token pour l'authentification","profile.notifications.webhookTokenHint":"Envoyé comme Authorization: Bearer Token au Webhook","profile.notifications.testBtn":"Envoyer une notification test","profile.notifications.saveSuccess":"Paramètres de notification enregistrés","profile.notifications.selectChannel":"Veuillez sélectionner au moins un canal de notification","profile.notifications.fillTelegramToken":"Veuillez remplir le Token Bot Telegram","profile.notifications.fillTelegram":"Veuillez remplir le Chat ID Telegram","profile.notifications.fillEmail":"Veuillez remplir l'e-mail de notification","profile.notifications.testSent":"Notification test envoyée, vérifiez vos canaux de notification"},y=(0,i.A)((0,i.A)({},h),f)}}]); \ No newline at end of file diff --git a/frontend/dist/js/lang-ja-JP-legacy.083df589.js b/frontend/dist/js/lang-ja-JP-legacy.083df589.js deleted file mode 100644 index f688fdc..0000000 --- a/frontend/dist/js/lang-ja-JP-legacy.083df589.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[638],{33644:function(a,t,i){i.d(t,{default:function(){return f}});var e=i(57888),s={items_per_page:"/ ページ",jump_to:"移動",jump_to_confirm:"確認する",page:"ページ",prev_page:"前のページ",next_page:"次のページ",prev_5:"前 5ページ",next_5:"次 5ページ",prev_3:"前 3ページ",next_3:"次 3ページ"},o=i(85505),r={today:"今日",now:"現在時刻",backToToday:"今日に戻る",ok:"決定",timeSelect:"時間を選択",dateSelect:"日時を選択",clear:"クリア",month:"月",year:"年",previousMonth:"前月 (ページアップキー)",nextMonth:"翌月 (ページダウンキー)",monthSelect:"月を選択",yearSelect:"年を選択",decadeSelect:"年代を選択",yearFormat:"YYYY年",dayFormat:"D日",dateFormat:"YYYY年M月D日",dateTimeFormat:"YYYY年M月D日 HH時mm分ss秒",previousYear:"前年 (Controlを押しながら左キー)",nextYear:"翌年 (Controlを押しながら右キー)",previousDecade:"前の年代",nextDecade:"次の年代",previousCentury:"前の世紀",nextCentury:"次の世紀"},n={placeholder:"時刻を選択"},d=n,l={lang:(0,o.A)({placeholder:"日付を選択",rangePlaceholder:["開始日付","終了日付"]},r),timePickerLocale:(0,o.A)({},d)},c=l,g=c,b={locale:"ja",Pagination:s,DatePicker:c,TimePicker:d,Calendar:g,Table:{filterTitle:"メニューをフィルター",filterConfirm:"OK",filterReset:"リセット",selectAll:"すべてを選択",selectInvert:"選択を反転"},Modal:{okText:"OK",cancelText:"キャンセル",justOkText:"OK"},Popconfirm:{okText:"OK",cancelText:"キャンセル"},Transfer:{searchPlaceholder:"ここを検索",itemUnit:"アイテム",itemsUnit:"アイテム"},Upload:{uploading:"アップロード中...",removeFile:"ファイルを削除",uploadError:"アップロードエラー",previewFile:"ファイルをプレビュー",downloadFile:"ダウンロードファイル"},Empty:{description:"データがありません"}},m=b,h=i(23827),u=i.n(h),p={antLocale:m,momentName:"ja",momentLocale:u()},y={submit:"送信する",save:"保存する","submit.ok":"送信成功","save.ok":"正常に保存されました","menu.welcome":"ようこそ","menu.home":"ホームページ","menu.dashboard":"ダッシュボード","menu.dashboard.indicator":"指標分析","menu.dashboard.community":"インジケーターコミュニティ","menu.dashboard.analysis":"AI分析","menu.dashboard.tradingAssistant":"取引アシスタント","menu.dashboard.aiTradingAssistant":"AI取引アシスタント","menu.dashboard.signalRobot":"シグナルロボット","menu.dashboard.monitor":"モニタリングページ","menu.dashboard.workplace":"作業台","menu.form":"フォームページ","menu.form.basic-form":"基本形","menu.form.step-form":"ステップバイステップフォーム","menu.form.step-form.info":"ステップバイステップフォーム(転送情報を記入)","menu.form.step-form.confirm":"ステップバイステップフォーム(振込情報の確認)","menu.form.step-form.result":"ステップバイステップのフォーム(完了)","menu.form.advanced-form":"高度なフォーム","menu.list":"一覧ページ","menu.list.table-list":"お問い合わせフォーム","menu.list.basic-list":"規格一覧","menu.list.card-list":"カードリスト","menu.list.search-list":"検索リスト","menu.list.search-list.articles":"検索リスト(記事)","menu.list.search-list.projects":"検索リスト(プロジェクト)","menu.list.search-list.applications":"検索リスト(アプリ)","menu.profile":"詳細ページ","menu.profile.basic":"基本詳細ページ","menu.profile.advanced":"詳細ページ","menu.result":"結果ページ","menu.result.success":"成功ページ","menu.result.fail":"失敗ページ","menu.exception":"例外ページ","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"トリガーエラー","menu.account":"個人ページ","menu.account.center":"パーソナルセンター","menu.account.settings":"個人設定","menu.account.trigger":"トリガーエラー","menu.account.logout":"ログアウト","menu.wallet":"私の財布","menu.docs":"ドキュメントセンター","menu.docs.detail":"文書の詳細","menu.header.refreshPage":"ページを更新する","menu.invite.friends":"友達を招待する","app.setting.pagestyle":"全体的なスタイル設定","app.setting.pagestyle.light":"明るいメニュースタイル","app.setting.pagestyle.dark":"ダークメニュースタイル","app.setting.pagestyle.realdark":"ダークモード","app.setting.themecolor":"テーマカラー","app.setting.navigationmode":"ナビゲーションモード","app.setting.sidemenu.nav":"サイドバーのナビゲーション","app.setting.topmenu.nav":"トップバーのナビゲーション","app.setting.content-width":"コンテンツ領域の幅","app.setting.content-width.tooltip":"この設定は、[トップバーナビゲーション]時のみ有効です。","app.setting.content-width.fixed":"修正済み","app.setting.content-width.fluid":"ストリーミング","app.setting.fixedheader":"固定ヘッダー","app.setting.fixedheader.tooltip":"固定ヘッダー時に設定可能","app.setting.autoHideHeader":"スクロール時にヘッダーを非表示にする","app.setting.fixedsidebar":"サイドメニューを修正","app.setting.sidemenu":"サイドメニューのレイアウト","app.setting.topmenu":"トップメニューのレイアウト","app.setting.othersettings":"その他の設定","app.setting.weakmode":"カラーウィークネスモード","app.setting.multitab":"マルチタブモード","app.setting.copy":"設定をコピーする","app.setting.loading":"テーマを読み込み中","app.setting.copyinfo":"設定が正常にコピーされました src/config/defaultSettings.js","app.setting.copy.success":"コピー完了","app.setting.copy.fail":"コピーに失敗しました","app.setting.theme.switching":"テーマ変更!","app.setting.production.hint":"構成バーは開発環境でのプレビューにのみ使用され、運用環境では表示されません。 構成ファイルを手動でコピーして変更してください。","app.setting.themecolor.daybreak":"ドーンブルー(デフォルト)","app.setting.themecolor.dust":"夕暮れ","app.setting.themecolor.volcano":"火山","app.setting.themecolor.sunset":"日没","app.setting.themecolor.cyan":"明清","app.setting.themecolor.green":"オーロラグリーン","app.setting.themecolor.geekblue":"オタクブルー","app.setting.themecolor.purple":"ジャン・ジー","app.setting.tooltip":"ページ設定","user.login.userName":"ユーザー名","user.login.password":"パスワード","user.login.username.placeholder":"アカウント: 管理者","user.login.password.placeholder":"パスワード: admin または ant.design","user.login.message-invalid-credentials":"ログインに失敗しました。メールアドレスと確認コードを確認してください","user.login.message-invalid-verification-code":"認証コードエラー","user.login.tab-login-credentials":"アカウントパスワードログイン","user.login.tab-login-email":"メールログイン","user.login.tab-login-mobile":"携帯電話番号ログイン","user.login.captcha.placeholder":"グラフィック認証コードを入力してください","user.login.mobile.placeholder":"携帯電話番号","user.login.mobile.verification-code.placeholder":"認証コード","user.login.email.placeholder":"メールアドレスを入力してください","user.login.email.verification-code.placeholder":"確認コードを入力してください","user.login.email.sending":"認証コードが送信されています...","user.login.email.send-success-title":"ヒント","user.login.email.send-success":"確認コードは正常に送信されました。メールを確認してください","user.login.sms.send-success":"確認コードが正常に送信されました。テキスト メッセージを確認してください。","user.login.remember-me":"自動ログイン","user.login.forgot-password":"パスワードを忘れた場合","user.login.sign-in-with":"その他のログイン方法","user.login.signup":"アカウントを登録する","user.login.login":"ログイン","user.register.register":"登録する","user.register.email.placeholder":"電子メール","user.register.password.placeholder":"6文字以上を入力してください。 推測されやすいパスワードは使用しないでください。","user.register.password.popover-message":"6文字以上を入力してください。 推測されやすいパスワードは使用しないでください。","user.register.confirm-password.placeholder":"パスワードの確認","user.register.get-verification-code":"確認コードを取得する","user.register.sign-in":"既存のアカウントを使用してログインする","user.register-result.msg":"あなたのアカウント: {email} 登録が成功しました","user.register-result.activation-email":"アクティベーション電子メールはメールボックスに送信され、24 時間有効です。 すぐにメールにログインし、メール内のリンクをクリックしてアカウントをアクティブにしてください。","user.register-result.back-home":"ホームページに戻る","user.register-result.view-mailbox":"メールボックスを確認してください","user.email.required":"メールアドレスを入力してください!","user.email.wrong-format":"メールアドレスの形式が間違っています!","user.userName.required":"アカウント名またはメールアドレスを入力してください","user.password.required":"パスワードを入力してください。","user.password.twice.msg":"2 回入力したパスワードが一致しません。","user.password.strength.msg":"パスワードの強度が十分ではありません","user.password.strength.strong":"強さ: 強い","user.password.strength.medium":"強さ: 中","user.password.strength.low":"強度: 低い","user.password.strength.short":"強さ:短すぎる","user.confirm-password.required":"パスワードを確認してください。","user.phone-number.required":"正しい携帯電話番号を入力してください","user.phone-number.wrong-format":"携帯電話番号の形式が間違っています。","user.verification-code.required":"確認コードを入力してください。","user.captcha.required":"グラフィック認証コードを入力してください。","user.login.infos":"QuantDingerはAIマルチエージェント株分析補助ツールであり、証券投資コンサルティング資格はございません。 プラットフォーム内のすべての分析結果、スコア、参考意見は過去のデータに基づいてAIによって自動的に生成され、学習、研究、技術交流のみに使用され、投資アドバイスや意思決定の基礎を構成するものではありません。 株式投資には市場リスク、流動性リスク、政策リスク等の様々なリスクが伴い、元本を割り込む可能性があります。 ユーザーは自身のリスク許容度に基づいて独立した決定を行う必要があり、本ツールの使用から生じる投資行動および結果はユーザーが負担するものとします。 市場にはリスクがあり、投資は慎重になる必要があります。","user.login.tab-login-web3":"Web3ログイン","user.login.web3.tip":"ウォレットを使用した署名ログイン","user.login.web3.connect":"ウォレットに接続してログインする","user.login.web3.no-wallet":"ウォレットが検出されない","user.login.web3.no-address":"ウォレットアドレスが取得できませんでした","user.login.web3.nonce-failed":"乱数の取得に失敗しました","user.login.web3.verify-failed":"署名検証に失敗しました","user.login.web3.success":"ログイン成功","user.login.web3.failed":"ウォレットへのログインに失敗しました","nav.no_wallet":"ウォレットが検出されない","nav.copy":"コピー","nav.copy_success":"正常にコピーされました","user.login.oauth.google":"Googleでサインイン","user.login.oauth.github":"GitHub でサインインする","user.login.oauth.loading":"認証ページにリダイレクトしています...","user.login.oauth.failed":"OAuthログインに失敗しました","user.login.oauth.get-url-failed":"認証リンクの取得に失敗しました","user.login.subtitle":"世界市場に対する定量的な洞察を推進","user.login.legal.title":"法的免責事項","user.login.legal.view":"法的免責事項を表示","user.login.legal.collapse":"法的免責事項を折りたたむ","user.login.legal.agree":"法的免責事項を読み、同意します","user.login.legal.required":"まず法的免責事項を読んで確認してください","user.login.legal.content":"QuantDingerはAIマルチエージェント株分析補助ツールであり、証券投資コンサルティング資格はございません。 プラットフォーム内のすべての分析結果、評価、参考意見は過去のデータに基づいてAIによって自動的に生成され、学習、研究、技術交流のみに使用され、投資アドバイスや意思決定の基礎を構成するものではありません。 株式投資には市場リスク、流動性リスク、政策リスク等の様々なリスクが伴い、元本を割り込む可能性があります。 ユーザーは自身のリスク許容度に基づいて独立した決定を行う必要があり、本ツールの使用から生じる投資行動および結果はユーザーが負担するものとします。 市場にはリスクがあり、投資は慎重になる必要があります。","user.login.privacy.title":"ユーザープライバシーポリシー","user.login.privacy.view":"ユーザーのプライバシー ポリシーを表示する","user.login.privacy.collapse":"ユーザーのプライバシー規約を閉じる","user.login.privacy.content":"私たちはあなたのプライバシーとデータ保護を大切にしています。 1) 収集範囲:機能の実現に必要な情報(メールアドレス、携帯電話番号、市外局番、Web3ウォレットアドレスなど)と必要なログ、端末情報のみを収集します。 2) 利用目的:アカウントへのログインおよびセキュリティ確認、サービス機能の提供、トラブルシューティングおよびコンプライアンス要件のため。 3) 保管とセキュリティ: データは暗号化されて保管され、不正なアクセス、開示、損失を防ぐために必要な許可とアクセス制御手段が講じられます。 4) 第三者との共有: 法令で義務付けられている場合、またはサービスの実行に必要な場合を除き、お客様の個人情報は第三者と共有されることはありません。サードパーティのサービス (ウォレット、SMS サービスプロバイダーなど) が関与する場合、機能の実装に必要な最小限の範囲でのみ処理されます。 5) Cookie/ローカル ストレージ: ログイン ステータスと必要なセッション維持 (トークン、PHPSESSID など) に使用され、ブラウザーでクリアまたは制限できます。 6) 個人の権利:法令に基づき、照会、訂正、削除、同意の撤回等を行う権利を行使することができます。 7) 変更と通知: これらの条件が更新されると、ページ上で目立つように表示されます。 このサービスを継続して使用することにより、更新された内容を読み、同意したものとみなされます。 本規約またはその更新に同意できない場合は、サービスの使用を中止し、当社までご連絡ください。","account.basicInfo":"基本情報","account.id":"ユーザーID","account.username":"ユーザー名","account.nickname":"ニックネーム","account.email":"電子メール","account.mobile":"携帯電話番号","account.web3address":"ウォレットアドレス","account.pid":"紹介者ID","account.level":"ユーザーレベル","account.money":"バランス","account.qdtBalance":"QDTバランス","account.score":"ポイント","account.createtime":"登録時間","account.inviteLink":"招待リンク","account.recharge":"リチャージ","account.rechargeTip":"WeChat または Alipay を使用して、以下の QR コードをスキャンしてチャージしてください。","account.qrCodePlaceholder":"QR コード プレースホルダー (エミュレーション)","account.rechargeAmount":"チャージ金額","account.enterAmount":"チャージ金額を入力してください","account.rechargeHint":"最低入金額: 1 QDT","account.confirmRecharge":"リチャージを確認する","account.enterValidAmount":"有効なリチャージ金額を入力してください","account.rechargeSuccess":"リチャージ成功! {金額} QDT を入金しました","account.settings.menuMap.basic":"基本設定","account.settings.menuMap.security":"セキュリティ設定","account.settings.menuMap.notification":"新着メッセージ通知","account.settings.menuMap.moneyLog":"ファンドの詳細","account.moneyLog.empty":"ファンドの詳細はまだありません","account.moneyLog.total":"合計 {total} レコード","account.moneyLog.type.purchase":"購入インジケーター","account.moneyLog.type.recharge":"リチャージ","account.moneyLog.type.refund":"払い戻し","account.moneyLog.type.reward":"報酬","account.moneyLog.type.income":"指標収入","account.moneyLog.type.commission":"プラットフォーム手数料","wallet.balance":"QDTバランス","wallet.recharge":"リチャージ","wallet.withdraw":"現金を引き出す","wallet.filter":"フィルター","wallet.reset":"リセット","wallet.totalRecharge":"累積リチャージ","wallet.totalWithdraw":"累積引き出し額","wallet.totalIncome":"累計収入","wallet.records":"取引記録と資金の詳細","wallet.tradingRecords":"取引履歴","wallet.moneyLog":"ファンドの詳細","wallet.rechargeTip":"WeChat または Alipay を使用して、以下の QR コードをスキャンしてチャージしてください。","wallet.qrCodePlaceholder":"QR コード プレースホルダー (エミュレーション)","wallet.rechargeAmount":"チャージ金額","wallet.enterAmount":"チャージ金額を入力してください","wallet.rechargeHint":"最低入金額: 1 QDT","wallet.confirmRecharge":"リチャージを確認する","wallet.enterValidAmount":"有効なリチャージ金額を入力してください","wallet.rechargeSuccess":"リチャージ成功! {金額} QDT を入金しました","wallet.rechargeFailed":"再充電に失敗しました","wallet.withdrawTip":"出金金額と出金アドレスを入力してください","wallet.withdrawAmount":"出金額","wallet.enterWithdrawAmount":"出金額を入力してください","wallet.withdrawHint":"最低出金額: 1 QDT","wallet.withdrawAddress":"出金アドレス (オプション)","wallet.enterWithdrawAddress":"出金アドレスを入力してください","wallet.confirmWithdraw":"出金の確認","wallet.enterValidWithdrawAmount":"有効な出金額を入力してください","wallet.insufficientBalance":"残高不足","wallet.withdrawSuccess":"引き出し成功! {金額} QDT を引き出しました","wallet.withdrawFailed":"出金に失敗しました","wallet.noTradingRecords":"まだ取引記録がありません","wallet.noMoneyLog":"ファンドの詳細はまだありません","wallet.loadTradingRecordsFailed":"トランザクションレコードのロードに失敗しました","wallet.loadMoneyLogFailed":"ファンドの詳細をロードできませんでした","wallet.moneyLogTotal":"合計 {total} レコード","wallet.moneyLogTypeTitle":"タイプ","wallet.moneyLogType.all":"全種類","wallet.table.time":"時間","wallet.table.type":"タイプ","wallet.table.price":"価格","wallet.table.amount":"数量","wallet.table.money":"金額","wallet.table.balance":"バランス","wallet.table.memo":"備考","wallet.table.value":"値","wallet.table.profit":"損益","wallet.table.commission":"手数料","wallet.table.total":"合計 {total} レコード","wallet.tradeType.buy":"買う","wallet.tradeType.sell":"売る","wallet.tradeType.liquidation":"強制清算","wallet.tradeType.openLong":"長く開く","wallet.tradeType.addLong":"ガドット","wallet.tradeType.closeLong":"ピンドゥオ","wallet.tradeType.closeLongStop":"ストップロスとロング","wallet.tradeType.closeLongProfit":"利益を得てさらに平準化する","wallet.tradeType.openShort":"オープンショート","wallet.tradeType.addShort":"短く追加する","wallet.tradeType.closeShort":"空の","wallet.tradeType.closeShortStop":"ストップロス","wallet.tradeType.closeShortProfit":"利益を確定して空売りを終了する","wallet.moneyLogType.purchase":"購入インジケーター","wallet.moneyLogType.recharge":"リチャージ","wallet.moneyLogType.withdraw":"現金を引き出す","wallet.moneyLogType.refund":"払い戻し","wallet.moneyLogType.reward":"報酬","wallet.moneyLogType.income":"収入","wallet.moneyLogType.commission":"手数料","wallet.web3Address.required":"最初に Web3 ウォレットのアドレスを入力してください","wallet.web3Address.requiredDescription":"リチャージする前に、リチャージを受け取るために Web3 ウォレット アドレスをバインドする必要があります。","wallet.web3Address.placeholder":"Web3 ウォレットのアドレスを入力してください (0x で始まる)","wallet.web3Address.save":"ウォレットアドレスを保存する","wallet.web3Address.saveSuccess":"ウォレットアドレスが正常に保存されました","wallet.web3Address.saveFailed":"ウォレットアドレスの保存に失敗しました","wallet.web3Address.invalidFormat":"有効な Web3 ウォレット アドレスを入力してください (イーサリアム形式: 0x で始まる 42 文字、または TRC20 形式: T で始まる 34 文字)","wallet.selectCoin":"通貨を選択してください","wallet.selectChain":"選択チェーン","wallet.chain.eth":"イーサリアム(ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"BSC","wallet.targetQdtAmount":"引き換えたいQDTの量(オプション)","wallet.targetQdtAmount.placeholder":"引き換えたい QDT の数量、現在の QDT 価格を入力してください: {price} USDT","wallet.targetQdtAmount.requiredUsdt":"リチャージが必要: {amount} USDT","wallet.rechargeAddress":"リチャージアドレス","wallet.copyAddress":"コピー","wallet.copySuccess":"コピー成功!","wallet.copyFailed":"コピーに失敗しました。手動でコピーしてください","wallet.rechargeAddressHint":"このアドレスに {coin} を入金するには、必ず {chain} を使用してください。","wallet.qdtPrice.loading":"読み込み中...","wallet.rechargeTip.new":"通貨とチェーンを選択し、下の QR コードをスキャンしてリチャージしてください","wallet.exchangeRate":"1 QDT ≈ {レート} USDT","wallet.withdrawableAmount":"利用可能な現金の量","wallet.totalBalance":"合計残高","wallet.insufficientWithdrawable":"引き出すことができる現金の量が不足しています。現在出金できる金額は次のとおりです: {amount} QDT","wallet.withdrawAddressRequired":"出金アドレスを入力してください","wallet.withdrawAddressHint":"アドレスが正しいことを確認してください。退会後は取り消すことはできません。","wallet.withdrawSubmitSuccess":"出金申請が正常に送信されました。審査をお待ちください","menu.footer.contactUs":"お問い合わせ","menu.footer.getSupport":"サポートを受ける","menu.footer.socialAccounts":"ソーシャルアカウント","menu.footer.userAgreement":"ユーザー同意書","menu.footer.privacyPolicy":"プライバシーポリシー","menu.footer.support":"サポート","menu.footer.featureRequest":"機能リクエスト","menu.footer.email":"電子メール","menu.footer.liveChat":"24時間年中無休のライブチャット","dashboard.analysis.title":"多次元分析","dashboard.analysis.subtitle":"AIを活用した総合財務分析プラットフォーム","dashboard.analysis.selectSymbol":"基礎となるコードを選択または入力します","dashboard.analysis.selectModel":"モデルを選択してください","dashboard.analysis.startAnalysis":"分析を開始する","dashboard.analysis.history":"歴史","dashboard.analysis.tab.overview":"総合的な分析","dashboard.analysis.tab.fundamental":"基本","dashboard.analysis.tab.technical":"テクノロジー","dashboard.analysis.tab.news":"ニュース","dashboard.analysis.tab.sentiment":"感情","dashboard.analysis.tab.risk":"リスク","dashboard.analysis.tab.debate":"長短の議論","dashboard.analysis.tab.decision":"最終決定","dashboard.analysis.empty.selectSymbol":"分析を開始するターゲットを選択してください","dashboard.analysis.empty.selectSymbolDesc":"独自に選択した銘柄リストから選択するか、基礎となるコードを入力して多次元 AI 分析レポートを取得します","dashboard.analysis.empty.startAnalysis":"「分析開始」ボタンをクリックすると、多次元分析が実行されます。","dashboard.analysis.empty.startAnalysisDesc":"ファンダメンタルズ、テクノロジー、ニュース、センチメント、リスクなどの多次元から総合的な分析を提供します。","dashboard.analysis.empty.noData":"現在、{type} の分析データはありません。最初に包括的な分析を行ってください。","dashboard.analysis.empty.noWatchlist":"現在、自主選定銘柄はありません","dashboard.analysis.empty.noHistory":"まだ履歴がありません","dashboard.analysis.empty.watchlistHint":"現在、独自に選択した銘柄はありません。まずご確認ください。","dashboard.analysis.empty.noDebateData":"議論のデータはまだありません","dashboard.analysis.empty.noDecisionData":"決定データはまだありません","dashboard.analysis.empty.selectAgent":"分析結果を表示するにはエージェントを選択してください","dashboard.analysis.loading.analyzing":"分析中です、お待ちください...","dashboard.analysis.loading.fundamental":"基本データを分析中...","dashboard.analysis.loading.technical":"テクニカル指標を分析中...","dashboard.analysis.loading.news":"ニュースデータを分析中...","dashboard.analysis.loading.sentiment":"市場センチメントを分析中...","dashboard.analysis.loading.risk":"リスクを評価中...","dashboard.analysis.loading.debate":"長短の議論は続いています...","dashboard.analysis.loading.decision":"最終決定を生成中...","dashboard.analysis.score.overall":"総合評価","dashboard.analysis.score.recommendation":"投資アドバイス","dashboard.analysis.score.confidence":"自信","dashboard.analysis.dimension.fundamental":"基本","dashboard.analysis.dimension.technical":"テクノロジー","dashboard.analysis.dimension.news":"ニュース","dashboard.analysis.dimension.sentiment":"感情","dashboard.analysis.dimension.risk":"リスク","dashboard.analysis.card.dimensionScores":"各次元の評価","dashboard.analysis.card.overviewReport":"総合分析レポート","dashboard.analysis.card.financialMetrics":"財務指標","dashboard.analysis.card.fundamentalReport":"ファンダメンタルズ分析レポート","dashboard.analysis.card.technicalIndicators":"テクニカル指標","dashboard.analysis.card.technicalReport":"テクニカル分析レポート","dashboard.analysis.card.newsList":"関連ニュース","dashboard.analysis.card.newsReport":"ニュース分析レポート","dashboard.analysis.card.sentimentIndicators":"感情指標","dashboard.analysis.card.sentimentReport":"センチメント分析レポート","dashboard.analysis.card.riskMetrics":"リスク指標","dashboard.analysis.card.riskReport":"リスク評価レポート","dashboard.analysis.card.bullView":"強気の見方(強気)","dashboard.analysis.card.bearView":"弱気の見方(ベア)","dashboard.analysis.card.researchConclusion":"研究者の結論","dashboard.analysis.card.traderPlan":"トレーダープラン","dashboard.analysis.card.riskDebate":"リスク委員会の議論","dashboard.analysis.card.finalDecision":"最終決定","dashboard.analysis.card.tradePlanDetail":"取引プランの詳細","dashboard.analysis.tradingPlan.entry_price":"入場料","dashboard.analysis.tradingPlan.position_size":"ポジションサイズ","dashboard.analysis.tradingPlan.stop_loss":"ストップロス","dashboard.analysis.tradingPlan.take_profit":"利益確定","dashboard.analysis.label.confidence":"自信","dashboard.analysis.label.keyPoints":"コアポイント","dashboard.analysis.label.riskWarning":"リスク警告","dashboard.analysis.risk.risky":"危険な","dashboard.analysis.risk.neutral":"中立的な視点(ニュートラル)","dashboard.analysis.risk.safe":"保守的な見解(安全)","dashboard.analysis.risk.conclusion":"結論","dashboard.analysis.feature.fundamental":"ファンダメンタルズ分析","dashboard.analysis.feature.technical":"テクニカル分析","dashboard.analysis.feature.news":"ニュース分析","dashboard.analysis.feature.sentiment":"感情分析","dashboard.analysis.feature.risk":"リスク評価","dashboard.analysis.watchlist.title":"私の銘柄選択","dashboard.analysis.watchlist.add":"追加する","dashboard.analysis.watchlist.addStock":"在庫を追加する","dashboard.analysis.modal.addStock.title":"オプションのストックを追加する","dashboard.analysis.modal.addStock.confirm":"OK","dashboard.analysis.modal.addStock.cancel":"キャンセル","dashboard.analysis.modal.addStock.market":"市場タイプ","dashboard.analysis.modal.addStock.marketPlaceholder":"マーケットを選択してください","dashboard.analysis.modal.addStock.marketRequired":"マーケットタイプを選択してください","dashboard.analysis.modal.addStock.symbol":"証券コード","dashboard.analysis.modal.addStock.symbolPlaceholder":"例: AAPL、TSLA、GOOGL、000001、BTC","dashboard.analysis.modal.addStock.symbolRequired":"証券コードを入力してください","dashboard.analysis.modal.addStock.searchPlaceholder":"検索対象のコードまたは名前","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"基礎となるコードを検索または入力します (例: AAPL、BTC/USDT、EUR/USD)","dashboard.analysis.modal.addStock.searchOrInputHint":"データベース内のオブジェクトの検索、またはコードの直接入力をサポート (システムが自動的に名前を取得します)","dashboard.analysis.modal.addStock.search":"検索","dashboard.analysis.modal.addStock.searchResults":"検索結果","dashboard.analysis.modal.addStock.hotSymbols":"人気のターゲット","dashboard.analysis.modal.addStock.noHotSymbols":"人気のあるターゲットはまだありません","dashboard.analysis.modal.addStock.selectedSymbol":"選択済み","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"最初にターゲットを選択してください","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"ターゲットを選択するか、最初にターゲット コードを入力してください","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"ターゲットコードを入力してください","dashboard.analysis.modal.addStock.pleaseSelectMarket":"最初にマーケットタイプを選択してください","dashboard.analysis.modal.addStock.searchFailed":"検索に失敗しました。後でもう一度お試しください","dashboard.analysis.modal.addStock.noSearchResults":"一致するターゲットが見つかりません","dashboard.analysis.modal.addStock.willAutoFetchName":"システムが自動的に名前を取得します","dashboard.analysis.modal.addStock.addDirectly":"直接追加","dashboard.analysis.modal.addStock.nameWillBeFetched":"名前は追加時に自動的に取得されます","dashboard.analysis.market.USStock":"米国株","dashboard.analysis.market.Crypto":"暗号通貨","dashboard.analysis.market.Forex":"外国為替","dashboard.analysis.market.Futures":"先物","dashboard.analysis.modal.history.title":"過去の分析記録","dashboard.analysis.modal.history.viewResult":"結果を見る","dashboard.analysis.modal.history.completeTime":"完了時間","dashboard.analysis.modal.history.error":"エラー","dashboard.analysis.status.pending":"保留中","dashboard.analysis.status.processing":"処理中","dashboard.analysis.status.completed":"完了","dashboard.analysis.status.failed":"失敗しました","dashboard.analysis.message.selectSymbol":"最初にターゲットを選択してください","dashboard.analysis.message.taskCreated":"分析タスクが作成され、バックグラウンドで実行されています...","dashboard.analysis.message.analysisComplete":"分析完了","dashboard.analysis.message.analysisCompleteCache":"分析完了(キャッシュされたデータを使用)","dashboard.analysis.message.analysisFailed":"分析に失敗しました。後でもう一度お試しください。","dashboard.analysis.message.addStockSuccess":"正常に追加されました","dashboard.analysis.message.addStockFailed":"追加に失敗しました","dashboard.analysis.message.removeStockSuccess":"正常に削除されました","dashboard.analysis.message.removeStockFailed":"削除に失敗しました","dashboard.analysis.message.resumingAnalysis":"分析タスクを再開しています...","dashboard.analysis.message.deleteSuccess":"正常に削除されました","dashboard.analysis.message.deleteFailed":"削除に失敗しました","dashboard.analysis.modal.history.delete":"削除","dashboard.analysis.modal.history.deleteConfirm":"この分析記録を削除してもよろしいですか?","dashboard.analysis.test":"ショップ番号 {no}、公庄路","dashboard.analysis.introduce":"インジケーターの説明","dashboard.analysis.total-sales":"総売上高","dashboard.analysis.day-sales":"平均日販¥","dashboard.analysis.visits":"訪問","dashboard.analysis.visits-trend":"トラフィックの傾向","dashboard.analysis.visits-ranking":"来店ランキング","dashboard.analysis.day-visits":"毎日の訪問","dashboard.analysis.week":"毎週前年比","dashboard.analysis.day":"前年比","dashboard.analysis.payments":"支払い回数","dashboard.analysis.conversion-rate":"コンバージョン率","dashboard.analysis.operational-effect":"運営活動への影響","dashboard.analysis.sales-trend":"販売動向","dashboard.analysis.sales-ranking":"店舗売上ランキング","dashboard.analysis.all-year":"一年中","dashboard.analysis.all-month":"今月","dashboard.analysis.all-week":"今週","dashboard.analysis.all-day":"今日","dashboard.analysis.search-users":"検索ユーザー数","dashboard.analysis.per-capita-search":"一人当たりの検索数","dashboard.analysis.online-top-search":"オンラインで人気の検索","dashboard.analysis.the-proportion-of-sales":"売上カテゴリー比率","dashboard.analysis.dropdown-option-one":"作戦1","dashboard.analysis.dropdown-option-two":"操作 2","dashboard.analysis.channel.all":"すべてのチャンネル","dashboard.analysis.channel.online":"オンライン","dashboard.analysis.channel.stores":"店","dashboard.analysis.sales":"販売","dashboard.analysis.traffic":"乗客の流れ","dashboard.analysis.table.rank":"ランキング","dashboard.analysis.table.search-keyword":"検索キーワード","dashboard.analysis.table.users":"ユーザー数","dashboard.analysis.table.weekly-range":"毎週の増加","dashboard.indicator.selectSymbol":"基礎となるコードを選択または入力します","dashboard.indicator.emptyWatchlistHint":"現在、独自に選択した銘柄はありません。最初に追加してください。","dashboard.indicator.hint.selectSymbol":"分析を開始するにはターゲットを選択してください","dashboard.indicator.hint.selectSymbolDesc":"K ライン チャートとテクニカル指標を表示するには、上の検索ボックスに銘柄コードを選択または入力します。","dashboard.indicator.retry":"もう一度試してください","dashboard.indicator.panel.title":"テクニカル指標","dashboard.indicator.panel.realtimeOn":"リアルタイム更新をオフにする","dashboard.indicator.panel.realtimeOff":"リアルタイム更新を有効にする","dashboard.indicator.panel.themeLight":"ダークテーマに切り替える","dashboard.indicator.panel.themeDark":"ライトテーマに切り替える","dashboard.indicator.section.enabled":"有効","dashboard.indicator.section.added":"私が追加したインジケーター","dashboard.indicator.section.custom":"自分で作成したインジケーター","dashboard.indicator.section.bought":"購入したインジケーター","dashboard.indicator.section.myCreated":"私が作成したインジケーター","dashboard.indicator.empty":"まだインジケーターがありません。最初にインジケーターを追加または作成してください","dashboard.indicator.buy":"購入インジケーター","dashboard.indicator.action.start":"始める","dashboard.indicator.action.stop":"閉じる","dashboard.indicator.action.edit":"編集","dashboard.indicator.action.delete":"削除","dashboard.indicator.action.backtest":"バックテスト","dashboard.indicator.status.normal":"普通の","dashboard.indicator.status.normalPermanent":"通常(永続的に有効)","dashboard.indicator.status.expired":"期限切れ","dashboard.indicator.expiry.permanent":"永久に有効","dashboard.indicator.expiry.noExpiry":"有効期限なし","dashboard.indicator.expiry.expired":"期限切れ: {日付}","dashboard.indicator.expiry.expiresOn":"有効期限: {日付}","dashboard.indicator.delete.confirmTitle":"削除の確認","dashboard.indicator.delete.confirmContent":"インジケーター「{name}」を削除してもよろしいですか?この操作は元に戻すことができません。","dashboard.indicator.delete.confirmOk":"削除","dashboard.indicator.delete.confirmCancel":"キャンセル","dashboard.indicator.delete.success":"正常に削除されました","dashboard.indicator.delete.failed":"削除に失敗しました","dashboard.indicator.save.success":"正常に保存されました","dashboard.indicator.save.failed":"保存に失敗しました","dashboard.indicator.error.loadWatchlistFailed":"オプションのストックをロードできませんでした","dashboard.indicator.error.chartNotReady":"チャートコンポーネントは初期化されていません。最初にターゲットを選択し、チャートがロードされるまで待ってください。","dashboard.indicator.error.chartMethodNotReady":"グラフ コンポーネント メソッドの準備ができていません。後でもう一度お試しください。","dashboard.indicator.error.chartExecuteNotReady":"チャートコンポーネントの実行メソッドの準備ができていません。後でもう一度試してください。","dashboard.indicator.error.parseFailed":"Pythonコードを解析できません","dashboard.indicator.error.parseFailedCheck":"Python コードを解析できません。コード形式を確認してください。","dashboard.indicator.error.addIndicatorFailed":"インジケーターの追加に失敗しました","dashboard.indicator.error.runIndicatorFailed":"インジケーターの実行に失敗しました","dashboard.indicator.error.pleaseLogin":"まずログインしてください","dashboard.indicator.error.loadDataFailed":"データのロードに失敗しました","dashboard.indicator.error.loadDataFailedDesc":"ネットワーク接続を確認してください","dashboard.indicator.error.pythonEngineFailed":"Python エンジンのロードに失敗したため、インジケーター機能が使用できない可能性があります。","dashboard.indicator.error.chartInitFailed":"チャートの初期化に失敗しました","dashboard.indicator.warning.enterCode":"最初にインジケーターコードを入力してください","dashboard.indicator.warning.pyodideLoadFailed":"Python エンジンのロードに失敗しました","dashboard.indicator.warning.pyodideLoadFailedDesc":"この機能は、現在の地域またはネットワーク環境では利用できません","dashboard.indicator.warning.chartNotInitialized":"グラフが初期化されていないため、線描画ツールが使用できません。","dashboard.indicator.success.runIndicator":"インジケーターは正常に実行されます","dashboard.indicator.success.clearDrawings":"線画をすべてクリアしました","dashboard.indicator.sma":"SMA(移動平均結合)","dashboard.indicator.ema":"EMA (指数移動平均結合)","dashboard.indicator.rsi":"RSI (相対強度)","dashboard.indicator.macd":"MACD","dashboard.indicator.bb":"ボリンジャーバンド","dashboard.indicator.atr":"ATR (平均トゥルーレンジ)","dashboard.indicator.cci":"CCI (商品チャネル指数)","dashboard.indicator.williams":"ウィリアムズ %R (ウィリアムズ指標)","dashboard.indicator.mfi":"MFI(マネーフローインデックス)","dashboard.indicator.adx":"ADX(平均トレンド指数)","dashboard.indicator.obv":"OBV(エネルギー波)","dashboard.indicator.adosc":"ADOSC (アキュムレート/ディスパッチオシレーター)","dashboard.indicator.ad":"AD(蓄電・配電線)","dashboard.indicator.kdj":"KDJ (確率的指標)","dashboard.indicator.signal.buy":"買う","dashboard.indicator.signal.sell":"売る","dashboard.indicator.signal.supertrendBuy":"スーパートレンド購入","dashboard.indicator.signal.supertrendSell":"スーパートレンドセル","dashboard.indicator.chart.kline":"Kライン","dashboard.indicator.chart.volume":"ボリューム","dashboard.indicator.chart.uptrend":"上昇傾向","dashboard.indicator.chart.downtrend":"下降傾向","dashboard.indicator.tooltip.time":"時間","dashboard.indicator.tooltip.open":"開く","dashboard.indicator.tooltip.close":"受け取る","dashboard.indicator.tooltip.high":"高い","dashboard.indicator.tooltip.low":"低い","dashboard.indicator.tooltip.volume":"ボリューム","dashboard.indicator.drawing.line":"線分","dashboard.indicator.drawing.horizontalLine":"水平線","dashboard.indicator.drawing.verticalLine":"縦線","dashboard.indicator.drawing.ray":"光線","dashboard.indicator.drawing.straightLine":"直線","dashboard.indicator.drawing.parallelLine":"平行線","dashboard.indicator.drawing.priceLine":"価格ライン","dashboard.indicator.drawing.priceChannel":"価格チャネル","dashboard.indicator.drawing.fibonacciLine":"フィボナッチライン","dashboard.indicator.drawing.measure":"測定","dashboard.indicator.drawing.clearAll":"線画をすべてクリアする","dashboard.indicator.market.USStock":"米国株","dashboard.indicator.market.Crypto":"暗号通貨","dashboard.indicator.market.Forex":"外国為替","dashboard.indicator.market.Futures":"先物","dashboard.indicator.create":"インジケーターの作成","dashboard.indicator.editor.title":"インジケーターの作成/編集","dashboard.indicator.editor.name":"インジケーター名","dashboard.indicator.editor.nameRequired":"インジケーター名を入力してください","dashboard.indicator.editor.namePlaceholder":"インジケーター名を入力してください","dashboard.indicator.editor.description":"インジケーターの説明","dashboard.indicator.editor.descriptionPlaceholder":"インジケーターの説明を入力してください (オプション)","dashboard.indicator.editor.code":"Pythonコード","dashboard.indicator.editor.codeRequired":"インジケーターコードを入力してください","dashboard.indicator.editor.codePlaceholder":"Python コードを入力してください","dashboard.indicator.editor.run":"走る","dashboard.indicator.editor.runHint":"実行ボタンをクリックして、K ライン チャート上のインジケーターの効果をプレビューします。","dashboard.indicator.editor.guide":"開発ガイド","dashboard.indicator.editor.guideTitle":"Python インジケーター開発ガイド","dashboard.indicator.editor.save":"保存する","dashboard.indicator.editor.cancel":"キャンセル","dashboard.indicator.editor.unnamed":"名前のないインジケーター","dashboard.indicator.editor.publishToCommunity":"コミュニティに投稿する","dashboard.indicator.editor.publishToCommunityHint":"公開されると、他のユーザーがコミュニティでインジケーターを表示して使用できるようになります","dashboard.indicator.editor.indicatorType":"インジケーターの種類","dashboard.indicator.editor.indicatorTypeRequired":"インジケーターのタイプを選択してください","dashboard.indicator.editor.indicatorTypePlaceholder":"インジケーターのタイプを選択してください","dashboard.indicator.editor.previewImage":"プレビュー","dashboard.indicator.editor.uploadImage":"写真をアップロードする","dashboard.indicator.editor.previewImageHint":"推奨サイズ: 800x400、2MB 以下","dashboard.indicator.editor.pricing":"販売価格(QDT)","dashboard.indicator.editor.pricingType.free":"無料","dashboard.indicator.editor.pricingType.permanent":"永久的な","dashboard.indicator.editor.pricingType.monthly":"月々の支払い","dashboard.indicator.editor.price":"価格","dashboard.indicator.editor.priceRequired":"価格を入力してください","dashboard.indicator.editor.pricePlaceholder":"価格を入力してください","dashboard.indicator.editor.pricingHint":"無料のインジケーターの価格は 0 ですが、プラットフォームはインジケーターの使用量と賞賛率に基づいて報酬 (QDT) を与えます。","dashboard.indicator.editor.aiGenerate":"インテリジェントな世代","dashboard.indicator.editor.aiPromptPlaceholder":"あなたのアイデアを教えてください。Python インジケーター コードを生成します。","dashboard.indicator.editor.aiGenerateBtn":"AIが生成したコード","dashboard.indicator.editor.aiPromptRequired":"あなたの考えを入力してください","dashboard.indicator.editor.aiGenerateSuccess":"コード生成が成功しました","dashboard.indicator.editor.aiGenerateError":"コード生成に失敗しました。後でもう一度お試しください。","dashboard.indicator.editor.verifyCode":"コード検証","dashboard.indicator.editor.verifyCodeSuccess":"検証合格","dashboard.indicator.editor.verifyCodeFailed":"検証失敗","dashboard.indicator.editor.verifyCodeEmpty":"コードは空にできません","dashboard.indicator.backtest.title":"インジケーターのバックテスト","dashboard.indicator.backtest.config":"バックテストパラメータ","dashboard.indicator.backtest.startDate":"開始日","dashboard.indicator.backtest.endDate":"終了日","dashboard.indicator.backtest.selectStartDate":"開始日を選択してください","dashboard.indicator.backtest.selectEndDate":"終了日を選択してください","dashboard.indicator.backtest.startDateRequired":"開始日を選択してください","dashboard.indicator.backtest.endDateRequired":"終了日を選択してください","dashboard.indicator.backtest.initialCapital":"初期資本","dashboard.indicator.backtest.initialCapitalRequired":"初期資金を入力してください","dashboard.indicator.backtest.commission":"手数料","dashboard.indicator.backtest.leverage":"レバレッジ比率","dashboard.indicator.backtest.tradeDirection":"取引の方向性","dashboard.indicator.backtest.longOnly":"長く続けてください","dashboard.indicator.backtest.shortOnly":"短い","dashboard.indicator.backtest.both":"双方向","dashboard.indicator.backtest.run":"バックテストを開始する","dashboard.indicator.backtest.rerun":"もう一度バックテスト","dashboard.indicator.backtest.close":"閉じる","dashboard.indicator.backtest.running":"インジケーターのバックテストが進行中です...","dashboard.indicator.backtest.results":"バックテスト結果","dashboard.indicator.backtest.totalReturn":"トータルリターン","dashboard.indicator.backtest.annualReturn":"年収","dashboard.indicator.backtest.maxDrawdown":"最大ドローダウン","dashboard.indicator.backtest.sharpeRatio":"シャープレシオ","dashboard.indicator.backtest.winRate":"勝率","dashboard.indicator.backtest.profitFactor":"損益率","dashboard.indicator.backtest.totalTrades":"トランザクション数","dashboard.indicator.totalReturn":"トータルリターン","dashboard.indicator.annualReturn":"年換算収益率","dashboard.indicator.maxDrawdown":"最大ドローダウン","dashboard.indicator.sharpeRatio":"シャープレシオ","dashboard.indicator.winRate":"勝率","dashboard.indicator.profitFactor":"損益率","dashboard.indicator.totalTrades":"総トランザクション数","dashboard.indicator.backtest.totalCommission":"合計手数料","dashboard.indicator.backtest.equityCurve":"イールドカーブ","dashboard.indicator.backtest.strategy":"指標収入","dashboard.indicator.backtest.benchmark":"ベンチマークリターン","dashboard.indicator.backtest.tradeHistory":"取引履歴","dashboard.indicator.backtest.tradeTime":"時間","dashboard.indicator.backtest.tradeType":"タイプ","dashboard.indicator.backtest.buy":"買う","dashboard.indicator.backtest.sell":"売る","dashboard.indicator.backtest.liquidation":"清算","dashboard.indicator.backtest.openLong":"長く開く","dashboard.indicator.backtest.closeLong":"ピンドゥオ","dashboard.indicator.backtest.closeLongStop":"ロングに近い(ストップロス)","dashboard.indicator.backtest.closeLongProfit":"さらに閉じる(利益確定)","dashboard.indicator.backtest.addLong":"ロングポジションを追加","dashboard.indicator.backtest.openShort":"オープンショート","dashboard.indicator.backtest.closeShort":"空の","dashboard.indicator.backtest.closeShortStop":"クローズ(ストップロス)","dashboard.indicator.backtest.closeShortProfit":"クローズ(利益確定)","dashboard.indicator.backtest.addShort":"ショートポジションを追加","dashboard.indicator.backtest.price":"価格","dashboard.indicator.backtest.amount":"数量","dashboard.indicator.backtest.balance":"口座残高","dashboard.indicator.backtest.profit":"損益","dashboard.indicator.backtest.success":"バックテスト完了","dashboard.indicator.backtest.failed":"バックテストに失敗しました。後でもう一度お試しください","dashboard.indicator.backtest.noIndicatorCode":"このインジケーターにはバックテスト可能なコードはありません","dashboard.indicator.backtest.noSymbol":"最初に取引対象を選択してください","dashboard.indicator.backtest.dateRangeExceeded":"バックテストの時間範囲が制限を超えています: {timeframe} 期間は最大でも {maxRange} までバックテストできます","dashboard.indicator.backtest.dateRangeExceededDays":"Backtest range exceeds limit: {timeframe} max {maxRange} ({maxDays} days)","dashboard.indicator.backtest.metaLine":"Symbol: {symbol} | Market: {market} | Timeframe: {timeframe}","dashboard.indicator.backtest.savedRunId":"Backtest saved. Run ID: {id}","dashboard.indicator.backtest.prev":"Previous","dashboard.indicator.backtest.next":"Next","dashboard.indicator.backtest.steps.strategy.title":"Strategy","dashboard.indicator.backtest.steps.strategy.desc":"Position sizing & risk controls","dashboard.indicator.backtest.steps.trading.title":"Trading settings","dashboard.indicator.backtest.steps.trading.desc":"Time range, capital, fees, leverage","dashboard.indicator.backtest.steps.results.title":"Results","dashboard.indicator.backtest.steps.results.desc":"Backtest output","dashboard.indicator.backtest.panel.risk":"Risk management (SL/TP/Trailing)","dashboard.indicator.backtest.panel.scale":"Scale in / DCA (trend & mean-reversion)","dashboard.indicator.backtest.panel.reduce":"Reduce position (trend & adverse)","dashboard.indicator.backtest.panel.position":"Position sizing","dashboard.indicator.backtest.field.stopLossPct":"Stop Loss (%)","dashboard.indicator.backtest.field.takeProfitPct":"Take Profit (%)","dashboard.indicator.backtest.field.trailingEnabled":"Trailing stop / take profit","dashboard.indicator.backtest.field.trailingStopPct":"Trailing drawdown (%)","dashboard.indicator.backtest.field.trailingActivationPct":"Trailing activation (%)","dashboard.indicator.backtest.field.slippage":"Slippage (%)","dashboard.indicator.backtest.field.trendAddEnabled":"Trend-following scale-in","dashboard.indicator.backtest.field.dcaAddEnabled":"Mean-reversion DCA","dashboard.indicator.backtest.field.trendAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.dcaAddStepPct":"DCA trigger (%)","dashboard.indicator.backtest.field.trendAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.dcaAddSizePct":"DCA size (% of capital)","dashboard.indicator.backtest.field.trendAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.dcaAddMaxTimes":"Max DCA times","dashboard.indicator.backtest.field.trendReduceEnabled":"Trend reduce","dashboard.indicator.backtest.field.adverseReduceEnabled":"Adverse reduce","dashboard.indicator.backtest.field.trendReduceStepPct":"Trend trigger (%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"Adverse trigger (%)","dashboard.indicator.backtest.field.trendReduceSizePct":"Reduce size (% of position)","dashboard.indicator.backtest.field.adverseReduceSizePct":"Adverse reduce size (% of position)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"Max trend reduce times","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"Max adverse reduce times","dashboard.indicator.backtest.field.entryPct":"Entry size (% of capital)","dashboard.indicator.backtest.field.minOrderPct":"Min order size (% of capital) (optional)","dashboard.indicator.backtest.closeLongTrailing":"Close Long (Trailing)","dashboard.indicator.backtest.reduceLong":"Reduce Long","dashboard.indicator.backtest.closeShortTrailing":"Close Short (Trailing)","dashboard.indicator.backtest.reduceShort":"Reduce Short","dashboard.docs.title":"ドキュメントセンター","dashboard.docs.search.placeholder":"ドキュメントを検索...","dashboard.docs.category.all":"すべて","dashboard.docs.category.guide":"開発ガイド","dashboard.docs.category.api":"APIドキュメント","dashboard.docs.category.tutorial":"チュートリアル","dashboard.docs.category.faq":"よくある質問","dashboard.docs.featured.title":"推奨ドキュメント","dashboard.docs.featured.tag":"おすすめ","dashboard.docs.list.views":"閲覧する","dashboard.docs.list.author":"著者","dashboard.docs.list.empty":"まだ文書がありません","dashboard.docs.list.backToAll":"すべてのドキュメントに戻る","dashboard.docs.list.total":"合計 {count} 個のドキュメント","dashboard.docs.detail.back":"ドキュメントリストに戻る","dashboard.docs.detail.updatedAt":"に更新されました","dashboard.docs.detail.related":"関連資料","dashboard.docs.detail.notFound":"ドキュメントが存在しません","dashboard.docs.detail.error":"ドキュメントが存在しないか削除されています","dashboard.docs.search.result":"検索結果","dashboard.docs.search.keyword":"キーワード","community.filter.indicatorType":"インジケーターの種類","community.filter.all":"すべて","community.filter.other":"その他のオプション","community.filter.pricing":"価格タイプ","community.filter.allPricing":"すべての価格設定","community.filter.sortBy":"並べ替え順","community.filter.search":"検索","community.filter.searchPlaceholder":"検索メトリクス名","community.indicatorType.trend":"トレンドタイプ","community.indicatorType.momentum":"勢いタイプ","community.indicatorType.volatility":"ボラティリティ","community.indicatorType.volume":"ボリューム","community.indicatorType.custom":"カスタマイズ","community.pricing.free":"無料","community.pricing.paid":"支払う","community.sort.downloads":"ダウンロード","community.sort.rating":"評価","community.sort.newest":"最新リリース","community.pagination.total":"合計 {total} 個のインジケーター","community.noDescription":"まだ説明がありません","community.detail.type":"タイプ","community.detail.pricing":"価格設定","community.detail.rating":"評価","community.detail.downloads":"ダウンロード","community.detail.author":"著者","community.detail.description":"はじめに","community.detail.detailContent":"詳細な説明","community.detail.backtestStats":"バックテスト統計","community.action.purchase":"購入インジケーター","community.action.addToMyIndicators":"私のインジケーターに追加","community.action.favorite":"コレクション","community.action.unfavorite":"お気に入りをキャンセルする","community.action.buyNow":"今すぐ購入","community.action.renew":"リニューアル","community.purchase.price":"価格","community.purchase.permanent":"永久的な","community.purchase.monthly":"月","community.purchase.confirmBuy":"このインジケーター ({price} QDT) を購入することを確認しますか?","community.purchase.confirmRenew":"このインジケーター ({price} QDT/月) を更新することを確認しますか?","community.purchase.confirmFree":"この無料インジケーターを追加することを確認しますか?","community.purchase.confirmTitle":"アクションの確認","community.purchase.owned":"このインジケーターを購入しました (永久に有効です)","community.purchase.ownIndicator":"これはあなたが公開した指標です","community.purchase.expired":"サブスクリプションの有効期限が切れました","community.purchase.expiresOn":"有効期限: {日付}","community.tabs.detail":"インジケーターの詳細","community.tabs.backtest":"バックテストデータ","community.tabs.ratings":"ユーザーレビュー","community.rating.myRating":"私の評価","community.rating.stars":"{count} 個の星","community.rating.commentPlaceholder":"あなたの経験を共有してください...","community.rating.submit":"評価を送信する","community.rating.modify":"変更","community.rating.saveModify":"変更を保存する","community.rating.cancel":"キャンセル","community.rating.selectRating":"評価を選択してください","community.rating.success":"評価が成功しました","community.rating.modifySuccess":"レビューが正常に変更されました","community.rating.failed":"評価に失敗しました","community.rating.noRatings":"まだコメントはありません","community.backtest.note":"上記のデータは過去のバックテスト結果であり、参考のみを目的としており、将来の収益を示すものではありません。","community.backtest.noData":"バックテストデータはまだありません","community.backtest.uploadHint":"作者はまだバックテストデータをアップロードしていません","community.message.loadFailed":"インジケーターリストのロードに失敗しました","community.message.purchaseProcessing":"購入リクエストを処理しています...","community.message.downloadSuccess":"メトリックがメトリック リストに追加されました","community.message.favoriteSuccess":"収集に成功しました","community.message.unfavoriteSuccess":"収集を正常にキャンセルしました","community.message.operationSuccess":"操作は成功しました","community.message.operationFailed":"操作が失敗しました","community.banner.readOnly":"閲覧のみ","community.banner.loginHint":"ログインまたは登録が必要な場合は、ボタンをクリックして独立したページに移動し、CSRFの問題を回避してください","community.banner.jumpButton":"ログイン/登録へ","dashboard.totalEquity":"総資本","dashboard.totalPnL":"損益通算","dashboard.aiStrategies":"AI戦略","dashboard.indicatorStrategies":"指標戦略","dashboard.running":"ランニング","dashboard.pnlHistory":"過去の損益","dashboard.strategyPerformance":"戦略損益率","dashboard.recentTrades":"最近の取引","dashboard.currentPositions":"現在位置","dashboard.table.time":"時間","dashboard.table.strategy":"ポリシー名","dashboard.table.symbol":"ターゲット","dashboard.table.type":"タイプ","dashboard.table.side":"方向","dashboard.table.size":"建玉","dashboard.table.entryPrice":"平均始値","dashboard.table.price":"価格","dashboard.table.amount":"数量","dashboard.table.profit":"損益","dashboard.pendingOrders":"注文実行記録","dashboard.totalOrders":"合計 {total} 件","dashboard.viewError":"エラーを表示","dashboard.filled":"約定済み","dashboard.orderTable.time":"作成時間","dashboard.orderTable.strategy":"戦略","dashboard.orderTable.symbol":"取引ペア","dashboard.orderTable.signalType":"シグナルタイプ","dashboard.orderTable.amount":"数量","dashboard.orderTable.price":"約定価格","dashboard.orderTable.status":"ステータス","dashboard.orderTable.executedAt":"実行時間","dashboard.signalType.openLong":"ロング開始","dashboard.signalType.openShort":"ショート開始","dashboard.signalType.closeLong":"ロング決済","dashboard.signalType.closeShort":"ショート決済","dashboard.signalType.addLong":"ロング追加","dashboard.signalType.addShort":"ショート追加","dashboard.status.pending":"保留中","dashboard.status.processing":"処理中","dashboard.status.completed":"完了","dashboard.status.failed":"失敗","dashboard.status.cancelled":"キャンセル済み","dashboard.table.pnl":"未実現損益","form.basic-form.basic.title":"基本形","form.basic-form.basic.description":"フォーム ページは、ユーザーからの情報を収集または確認するために使用されます。 基本フォームは、データ項目が少ないフォーム シナリオでよく使用されます。","form.basic-form.title.label":"タイトル","form.basic-form.title.placeholder":"目標に名前を付けます","form.basic-form.title.required":"タイトルを入力してください","form.basic-form.date.label":"開始日と終了日","form.basic-form.placeholder.start":"開始日","form.basic-form.placeholder.end":"終了日","form.basic-form.date.required":"開始日と終了日を選択してください","form.basic-form.goal.label":"目標の説明","form.basic-form.goal.placeholder":"段階的な作業目標を入力してください","form.basic-form.goal.required":"目標の説明を入力してください","form.basic-form.standard.label":"測る","form.basic-form.standard.placeholder":"指標を入力してください","form.basic-form.standard.required":"指標を入力してください","form.basic-form.client.label":"お客様","form.basic-form.client.required":"あなたがサービスを提供しているクライアントについて説明してください","form.basic-form.label.tooltip":"対象サービス受信者","form.basic-form.client.placeholder":"あなたがサービスを提供している顧客、内部顧客について直接説明してください @名前/役職番号","form.basic-form.invites.label":"査読者を招待する","form.basic-form.invites.placeholder":"@名前/従業員番号を直接送信してください。最大 5 人まで招待できます","form.basic-form.weight.label":"重量","form.basic-form.weight.placeholder":"入力してください","form.basic-form.public.label":"ターゲットパブリック","form.basic-form.label.help":"顧客とレビュー担当者はデフォルトで共有されます","form.basic-form.radio.public":"公共の","form.basic-form.radio.partially-public":"部分的に公開","form.basic-form.radio.private":"プライベート","form.basic-form.publicUsers.placeholder":"にオープン","form.basic-form.option.A":"同僚1","form.basic-form.option.B":"同僚2","form.basic-form.option.C":"同僚3人","form.basic-form.email.required":"メールアドレスを入力してください!","form.basic-form.email.wrong-format":"メールアドレスの形式が間違っています!","form.basic-form.userName.required":"ユーザー名を入力してください!","form.basic-form.password.required":"パスワードを入力してください。","form.basic-form.password.twice":"2 回入力したパスワードが一致しません。","form.basic-form.strength.msg":"6文字以上を入力してください。 推測されやすいパスワードは使用しないでください。","form.basic-form.strength.strong":"強さ: 強い","form.basic-form.strength.medium":"強さ: 中","form.basic-form.strength.short":"強さ:短すぎる","form.basic-form.confirm-password.required":"パスワードを確認してください。","form.basic-form.phone-number.required":"携帯電話番号を入力してください!","form.basic-form.phone-number.wrong-format":"携帯電話番号の形式が間違っています。","form.basic-form.verification-code.required":"確認コードを入力してください。","form.basic-form.form.get-captcha":"確認コードを取得する","form.basic-form.captcha.second":"秒","form.basic-form.form.optional":"(オプション)","form.basic-form.form.submit":"送信する","form.basic-form.form.save":"保存する","form.basic-form.email.placeholder":"電子メール","form.basic-form.password.placeholder":"パスワードは 6 文字以上、大文字と小文字は区別されます","form.basic-form.confirm-password.placeholder":"パスワードの確認","form.basic-form.phone-number.placeholder":"携帯電話番号","form.basic-form.verification-code.placeholder":"認証コード","result.success.title":"送信成功","result.success.description":"投入結果ページは、一連の運用タスクの処理結果をフィードバックするために使用されます。単純な操作のみの場合は、メッセージ グローバル プロンプト フィードバックを使用します。このテキストエリアには簡単な補足説明を表示できます。 「ドキュメント」を表示する必要がある場合は、下の灰色の領域にさらに複雑なコンテンツを表示できます。","result.success.operate-title":"プロジェクト名","result.success.operate-id":"プロジェクトID","result.success.principal":"担当者","result.success.operate-time":"効果時間","result.success.step1-title":"プロジェクトの作成","result.success.step1-operator":"ク・リリ","result.success.step2-title":"部門の事前審査","result.success.step2-operator":"周猫猫","result.success.step2-extra":"緊急","result.success.step3-title":"財務レビュー","result.success.step4-title":"完了","result.success.btn-return":"リストに戻る","result.success.btn-project":"アイテムを見る","result.success.btn-print":"印刷する","result.fail.error.title":"送信に失敗しました","result.fail.error.description":"再送信する前に、次の情報を確認して変更してください。","result.fail.error.hint-title":"送信したコンテンツには次のエラーが含まれています。","result.fail.error.hint-text1":"あなたのアカウントは凍結されました","result.fail.error.hint-btn1":"すぐに解凍してください","result.fail.error.hint-text2":"あなたのアカウントはまだ申請する資格がありません","result.fail.error.hint-btn2":"今すぐアップグレードしてください","result.fail.error.btn-text":"修正に戻る","account.settings.menuMap.custom":"パーソナライゼーション","account.settings.menuMap.binding":"アカウントバインディング","account.settings.basic.avatar":"アバター","account.settings.basic.change-avatar":"アバターの変更","account.settings.basic.email":"電子メール","account.settings.basic.email-message":"メールアドレスを入力してください。","account.settings.basic.nickname":"ニックネーム","account.settings.basic.nickname-message":"ニックネームを入力してください!","account.settings.basic.profile":"プロフィール","account.settings.basic.profile-message":"あなたの個人プロフィールを入力してください!","account.settings.basic.profile-placeholder":"プロフィール","account.settings.basic.country":"国/地域","account.settings.basic.country-message":"あなたの国または地域を入力してください。","account.settings.basic.geographic":"県と市","account.settings.basic.geographic-message":"あなたの都道府県と市区町村を入力してください。","account.settings.basic.address":"住所","account.settings.basic.address-message":"住所を入力してください。","account.settings.basic.phone":"連絡先番号","account.settings.basic.phone-message":"連絡先番号を入力してください。","account.settings.basic.update":"基本情報を更新","account.settings.basic.update.success":"基本情報が正常に更新されました","account.settings.security.strong":"強い","account.settings.security.medium":"で","account.settings.security.weak":"弱い","account.settings.security.password":"アカウントのパスワード","account.settings.security.password-description":"現在のパスワードの強度:","account.settings.security.phone":"セキュリティ携帯電話","account.settings.security.phone-description":"すでにバインドされている携帯電話:","account.settings.security.question":"セキュリティの問題","account.settings.security.question-description":"秘密の質問は設定されていないため、アカウントのセキュリティを効果的に保護できます。","account.settings.security.email":"電子メールをバインドする","account.settings.security.email-description":"すでにバインドされている電子メール アドレス:","account.settings.security.mfa":"MFAデバイス","account.settings.security.mfa-description":"MFA デバイスはバインドされていません。バインド後、再度確認できます。","account.settings.security.modify":"変更","account.settings.security.set":"設定","account.settings.security.bind":"バインディング","account.settings.binding.taobao":"タオバオをバインドする","account.settings.binding.taobao-description":"タオバオアカウントは現在バインドされていません","account.settings.binding.alipay":"Alipayをバインドする","account.settings.binding.alipay-description":"Alipay アカウントは現在バインドされていません","account.settings.binding.dingding":"バインディングディントーク","account.settings.binding.dingding-description":"現在バインドされている DingTalk アカウントはありません","account.settings.binding.bind":"バインディング","account.settings.notification.password":"アカウントのパスワード","account.settings.notification.password-description":"他のユーザーからのメッセージは、サイトメッセージの形式で通知されます。","account.settings.notification.messages":"システムメッセージ","account.settings.notification.messages-description":"システム メッセージはサイト メッセージの形式で通知されます。","account.settings.notification.todo":"ToDoタスク","account.settings.notification.todo-description":"To Do タスクはサイト内メッセージの形式で通知されます","account.settings.settings.open":"開く","account.settings.settings.close":"閉じる","trading-assistant.title":"取引アシスタント","trading-assistant.strategyList":"戦略一覧","trading-assistant.createStrategy":"ポリシーの作成","trading-assistant.noStrategy":"まだ戦略はありません","trading-assistant.selectStrategy":"詳細を表示するには、左側から戦略を選択してください","trading-assistant.startStrategy":"戦略を立ち上げる","trading-assistant.stopStrategy":"戦略を停止する","trading-assistant.editStrategy":"編集戦略","trading-assistant.deleteStrategy":"ポリシーの削除","trading-assistant.status.running":"ランニング","trading-assistant.status.stopped":"停止しました","trading-assistant.status.error":"エラー","trading-assistant.strategyType.IndicatorStrategy":"テクニカル指標戦略","trading-assistant.strategyType.PromptBasedStrategy":"合言葉戦略","trading-assistant.strategyType.GridStrategy":"グリッド戦略","trading-assistant.tabs.tradingRecords":"取引履歴","trading-assistant.tabs.positions":"位置記録","trading-assistant.tabs.equityCurve":"資本曲線","trading-assistant.form.step1":"インジケーターの選択","trading-assistant.form.step2":"Exchangeの構成","trading-assistant.form.step3":"戦略パラメータ","trading-assistant.form.indicator":"インジケーターの選択","trading-assistant.form.indicatorHint":"購入または作成したテクニカル指標のみを選択できます","trading-assistant.form.qdtCostHints":"戦略を使用すると QDT が消費されます。アカウントに十分な QDT 残高があることを確認してください。","trading-assistant.form.indicatorDescription":"インジケーターの説明","trading-assistant.form.noDescription":"まだ説明がありません","trading-assistant.form.exchange":"交換を選択","trading-assistant.form.apiKey":"APIキー","trading-assistant.form.secretKey":"秘密鍵","trading-assistant.form.passphrase":"パスフレーズ","trading-assistant.form.testConnection":"テスト接続","trading-assistant.form.strategyName":"ポリシー名","trading-assistant.form.symbol":"取引ペア","trading-assistant.form.symbolHint":"現在、暗号通貨取引ペアのみがサポートされています","trading-assistant.form.initialCapital":"投資額","trading-assistant.form.marketType":"市場タイプ","trading-assistant.form.marketTypeFutures":"契約","trading-assistant.form.marketTypeSpot":"スポット","trading-assistant.form.marketTypeHint":"この契約は双方向の取引とレバレッジをサポートしますが、スポットはロングポジションのみをサポートし、レバレッジは 1 倍に固定されます。","trading-assistant.form.leverage":"複数を活用する","trading-assistant.form.leverageHint":"契約:1~125回、スポット:固定1回","trading-assistant.form.spotLeverageFixed":"現物取引のレバレッジは1倍に固定されます","trading-assistant.form.spotOnlyLongHint":"スポット取引はロングポジションのみをサポートします","trading-assistant.form.tradeDirection":"取引の方向性","trading-assistant.form.tradeDirectionLong":"ただ長いだけ","trading-assistant.form.tradeDirectionShort":"短いだけ","trading-assistant.form.tradeDirectionBoth":"双方向取引","trading-assistant.form.timeframe":"期間","trading-assistant.form.klinePeriod":"K線期間","trading-assistant.form.timeframe1m":"1分","trading-assistant.form.timeframe5m":"5分","trading-assistant.form.timeframe15m":"15分","trading-assistant.form.timeframe30m":"30分","trading-assistant.form.timeframe1H":"1時間","trading-assistant.form.timeframe4H":"4時間","trading-assistant.form.timeframe1D":"1日","trading-assistant.form.selectStrategyType":"戦略タイプを選択","trading-assistant.form.indicatorStrategy":"インジケーター戦略","trading-assistant.form.indicatorStrategyDesc":"テクニカルインジケーターに基づく自動取引戦略","trading-assistant.form.aiStrategy":"AI戦略","trading-assistant.form.aiStrategyDesc":"AIインテリジェント意思決定に基づく自動取引戦略","trading-assistant.form.enableAiFilter":"AIインテリジェント意思決定フィルターを有効化","trading-assistant.form.enableAiFilterHint":"有効にすると、インジケーターシグナルがAIによってフィルタリングされ、取引品質が向上します","trading-assistant.form.aiFilterPrompt":"カスタムプロンプト","trading-assistant.form.aiFilterPromptHint":"AIフィルタリングにカスタム指示を提供し、空白のままにするとシステムデフォルトを使用します","trading-assistant.validation.strategyTypeRequired":"戦略タイプを選択してください","trading-assistant.form.advancedSettings":"詳細設定","trading-assistant.form.orderMode":"オーダーモード","trading-assistant.form.orderModeMaker":"メーカー","trading-assistant.form.orderModeTaker":"市場価格(テイカー)","trading-assistant.form.orderModeHint":"未決注文モードでは指値注文が使用され、手数料が安くなります。市場価格モードはすぐに実行され、手数料が高くなります。","trading-assistant.form.makerWaitSec":"未決注文の待ち時間 (秒)","trading-assistant.form.makerWaitSecHint":"注文後の取引を待つ時間。キャンセルして、タイムアウト後に再試行してください。","trading-assistant.form.makerRetries":"未決注文の再試行回数","trading-assistant.form.makerRetriesHint":"未決注文が約定しない場合の最大リトライ回数","trading-assistant.form.fallbackToMarket":"未決注文は失敗し、市場価格は引き下げられます。","trading-assistant.form.fallbackToMarketHint":"開始/終了未決注文が完了していない場合、トランザクションを確実に完了させるために成行注文にダウングレードする必要があるかどうか。","trading-assistant.form.marginMode":"マージンモード","trading-assistant.form.marginModeCross":"倉庫がいっぱい","trading-assistant.form.marginModeIsolated":"孤立した位置","trading-assistant.form.stopLossPct":"ストップロス率(%)","trading-assistant.form.stopLossPctHint":"ストップロスのパーセンテージを設定します。0 はストップロスが有効になっていないことを意味します","trading-assistant.form.takeProfitPct":"テイクプロフィット率(%)","trading-assistant.form.takeProfitPctHint":"テイクプロフィットのパーセンテージを設定します。0 はテイクプロフィットを無効にすることを意味します","trading-assistant.form.signalMode":"信号モード","trading-assistant.form.signalModeConfirmed":"確認モード","trading-assistant.form.signalModeAggressive":"アグレッシブモード","trading-assistant.form.signalModeHint":"確認モード: 完了した K 行のみをチェックします。アグレッシブ モード: K ラインの形成もチェックします","trading-assistant.form.cancel":"キャンセル","trading-assistant.form.prev":"前のステップ","trading-assistant.form.next":"次のステップ","trading-assistant.form.confirmCreate":"作成の確認","trading-assistant.form.confirmEdit":"変更を確認する","trading-assistant.messages.createSuccess":"戦略が正常に作成されました","trading-assistant.messages.createFailed":"ポリシーの作成に失敗しました","trading-assistant.messages.updateSuccess":"ポリシーの更新が成功しました","trading-assistant.messages.updateFailed":"ポリシーの更新に失敗しました","trading-assistant.messages.deleteSuccess":"ポリシーの削除が成功しました","trading-assistant.messages.deleteFailed":"ポリシーの削除に失敗しました","trading-assistant.messages.startSuccess":"戦略は無事に開始されました","trading-assistant.messages.startFailed":"ポリシーの開始に失敗しました","trading-assistant.messages.stopSuccess":"戦略は正常に停止されました","trading-assistant.messages.stopFailed":"停止戦略は失敗しました","trading-assistant.messages.loadFailed":"ポリシーリストの取得に失敗しました","trading-assistant.messages.runningWarning":"戦略は実行されています。 戦略を変更する前に戦略を停止してください。","trading-assistant.messages.deleteConfirmWithName":"ポリシー「{name}」を削除してもよろしいですか?この操作は元に戻すことができません。","trading-assistant.messages.deleteConfirm":"このポリシーを削除してもよろしいですか?この操作は元に戻すことができません。","trading-assistant.messages.loadTradesFailed":"取引記録の取得に失敗しました","trading-assistant.messages.loadPositionsFailed":"位置レコードの取得に失敗しました","trading-assistant.messages.loadEquityFailed":"資本曲線の取得に失敗しました","trading-assistant.messages.loadIndicatorsFailed":"インジケーター リストの読み込みに失敗しました。後でもう一度お試しください。","trading-assistant.messages.spotLimitations":"スポット取引は自動的にロングのみ、レバレッジ1倍に設定されています","trading-assistant.messages.autoFillApiConfig":"取引所の過去の API 設定が自動的に入力されます","trading-assistant.placeholders.selectIndicator":"インジケーターを選択してください","trading-assistant.placeholders.selectExchange":"交換を選択してください","trading-assistant.placeholders.inputApiKey":"APIキーを入力してください","trading-assistant.placeholders.inputSecretKey":"秘密キーを入力してください","trading-assistant.placeholders.inputPassphrase":"パスフレーズを入力してください","trading-assistant.placeholders.inputStrategyName":"ポリシー名を入力してください","trading-assistant.placeholders.selectSymbol":"取引ペアを選択してください","trading-assistant.placeholders.selectTimeframe":"期間を選択してください","trading-assistant.placeholders.selectKlinePeriod":"K線期間を選択してください","trading-assistant.placeholders.inputAiFilterPrompt":"カスタムプロンプトを入力してください(オプション)","trading-assistant.validation.indicatorRequired":"インジケーターを選択してください","trading-assistant.validation.exchangeRequired":"交換を選択してください","trading-assistant.validation.apiKeyRequired":"APIキーを入力してください","trading-assistant.validation.secretKeyRequired":"秘密キーを入力してください","trading-assistant.validation.passphraseRequired":"パスフレーズを入力してください","trading-assistant.validation.exchangeConfigIncomplete":"完全な交換構成情報を入力してください","trading-assistant.validation.testConnectionRequired":"まず「テスト接続」ボタンをクリックし、接続が成功することを確認してください","trading-assistant.validation.testConnectionFailed":"接続テストに失敗しました。設定を確認して再度テストしてください","trading-assistant.validation.credentialRequired":"まず個人センターで取引所の認証情報を追加してテストしてください","trading-assistant.validation.strategyNameRequired":"ポリシー名を入力してください","trading-assistant.validation.symbolRequired":"取引ペアを選択してください","trading-assistant.validation.initialCapitalRequired":"投資額を入力してください","trading-assistant.validation.leverageRequired":"レバレッジ比率を入力してください","trading-assistant.table.time":"時間","trading-assistant.table.type":"タイプ","trading-assistant.table.price":"価格","trading-assistant.table.amount":"数量","trading-assistant.table.value":"金額","trading-assistant.table.commission":"手数料","trading-assistant.table.symbol":"取引ペア","trading-assistant.table.side":"方向","trading-assistant.table.size":"ポジション数量","trading-assistant.table.entryPrice":"オープン価格","trading-assistant.table.currentPrice":"現在の価格","trading-assistant.table.unrealizedPnl":"未実現損益","trading-assistant.table.pnlPercent":"損益率","trading-assistant.table.buy":"買う","trading-assistant.table.sell":"売る","trading-assistant.table.long":"長く続けてください","trading-assistant.table.short":"短い","trading-assistant.table.noPositions":"まだポジションがありません","trading-assistant.detail.title":"戦略の詳細","trading-assistant.detail.strategyName":"ポリシー名","trading-assistant.detail.strategyType":"戦略タイプ","trading-assistant.detail.status":"ステータス","trading-assistant.detail.tradingMode":"取引モデル","trading-assistant.detail.exchange":"交換","trading-assistant.detail.initialCapital":"初期資本","trading-assistant.detail.totalInvestment":"投資総額","trading-assistant.detail.currentEquity":"現在の純資産","trading-assistant.detail.totalPnl":"損益通算","trading-assistant.detail.indicatorName":"インジケーター名","trading-assistant.detail.maxLeverage":"最大レバレッジ","trading-assistant.detail.decideInterval":"決定間隔","trading-assistant.detail.symbols":"トランザクションオブジェクト","trading-assistant.detail.createdAt":"作成時間","trading-assistant.detail.updatedAt":"更新時間","trading-assistant.detail.llmConfig":"AIモデル構成","trading-assistant.detail.exchangeConfig":"Exchangeの構成","trading-assistant.detail.provider":"プロバイダー","trading-assistant.detail.modelId":"モデルID","trading-assistant.detail.close":"閉じる","trading-assistant.detail.loadFailed":"ポリシーの詳細を取得できませんでした","trading-assistant.equity.noData":"純資産データはまだありません","trading-assistant.equity.equity":"純資産","trading-assistant.exchange.tradingMode":"取引モデル","trading-assistant.exchange.virtual":"模擬取引","trading-assistant.exchange.live":"実際のトランザクション","trading-assistant.exchange.selectExchange":"交換を選択","trading-assistant.exchange.walletAddress":"ウォレットアドレス","trading-assistant.exchange.walletAddressPlaceholder":"ウォレットアドレスを入力してください(0xで始まる)","trading-assistant.exchange.privateKey":"秘密鍵","trading-assistant.exchange.privateKeyPlaceholder":"秘密キーを入力してください(64文字)","trading-assistant.exchange.testConnection":"テスト接続","trading-assistant.exchange.connectionSuccess":"接続成功","trading-assistant.exchange.connectionFailed":"接続に失敗しました","trading-assistant.exchange.testFailed":"接続テストに失敗しました","trading-assistant.exchange.fillComplete":"完全な交換構成情報を入力してください","trading-assistant.strategyTypeOptions.ai":"AI主導の戦略","trading-assistant.strategyTypeOptions.indicator":"テクニカル指標戦略","trading-assistant.strategyTypeOptions.aiDeveloping":"AIを活用した戦略機能は開発中ですのでご期待ください","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"AI主導の戦略機能は開発中です","trading-assistant.indicatorType.trend":"トレンド","trading-assistant.indicatorType.momentum":"勢い","trading-assistant.indicatorType.volatility":"変動","trading-assistant.indicatorType.volume":"ボリューム","trading-assistant.indicatorType.custom":"カスタマイズ","trading-assistant.exchangeNames":{okx:"OKX",binance:"バイナンス",hyperliquid:"超流動性",blockchaincom:"Blockchain.com",coinbaseexchange:"コインベース",gate:"Gate.io",mexc:"メキシコ",kraken:"クラーケン",bitfinex:"ビットフィネックス",bybit:"バイビット",kucoin:"クーコイン",huobi:"フォビ",bitget:"ビゲット",bitmex:"ビットメックス",deribit:"デリビット",phemex:"フェメックス",bitmart:"ビットマート",bitstamp:"ビットスタンプ",bittrex:"ビットレックス",poloniex:"ポロニエックス",gemini:"ジェミニ",cryptocom:"Crypto.com",bitflyer:"ビットフライヤー",upbit:"アップビット",bithumb:"ビサム",coinone:"コイノン",zb:"ZB",lbank:"Lバンク",bibox:"ビボックス",bigone:"ビッグワン",bitrue:"ビトゥルー",coinex:"CoinEx",digifinex:"デジフィネックス",ftx:"FTX",ftxus:"FTX米国",binanceus:"バイナンスUS",binancecoinm:"バイナンス COIN-M",binanceusdm:"バイナンスUSDⓈ-M",deepcoin:"ディープコイン"},"ai-trading-assistant.title":"AI取引アシスタント","ai-trading-assistant.strategyList":"戦略一覧","ai-trading-assistant.createStrategy":"ポリシーの作成","ai-trading-assistant.noStrategy":"まだ戦略はありません","ai-trading-assistant.selectStrategy":"詳細を表示するには、左側から戦略を選択してください","ai-trading-assistant.startStrategy":"戦略を立ち上げる","ai-trading-assistant.stopStrategy":"戦略を停止する","ai-trading-assistant.editStrategy":"編集戦略","ai-trading-assistant.deleteStrategy":"ポリシーの削除","ai-trading-assistant.status.running":"ランニング","ai-trading-assistant.status.stopped":"停止しました","ai-trading-assistant.status.error":"エラー","ai-trading-assistant.tabs.tradingRecords":"取引履歴","ai-trading-assistant.tabs.positions":"位置記録","ai-trading-assistant.tabs.aiDecisions":"AI判定記録","ai-trading-assistant.tabs.equityCurve":"資本曲線","ai-trading-assistant.form.createTitle":"AI取引戦略を作成する","ai-trading-assistant.form.editTitle":"AI取引戦略を編集する","ai-trading-assistant.form.strategyName":"ポリシー名","ai-trading-assistant.form.modelId":"AIモデル","ai-trading-assistant.form.modelIdHint":"API キーを設定せずにシステム OpenRouter サービスを使用する","ai-trading-assistant.form.decideInterval":"決定間隔","ai-trading-assistant.form.decideInterval5m":"5分","ai-trading-assistant.form.decideInterval10m":"10分","ai-trading-assistant.form.decideInterval30m":"30分","ai-trading-assistant.form.decideInterval1h":"1時間","ai-trading-assistant.form.decideInterval4h":"4時間","ai-trading-assistant.form.decideInterval1d":"1日","ai-trading-assistant.form.decideInterval1w":"1週間","ai-trading-assistant.form.decideIntervalHint":"AIが意思決定を行うまでの時間間隔","ai-trading-assistant.form.runPeriod":"実行サイクル","ai-trading-assistant.form.runPeriodHint":"戦略実行の開始時刻と終了時刻","ai-trading-assistant.form.startDate":"開始日","ai-trading-assistant.form.endDate":"終了日","ai-trading-assistant.form.qdtCostTitle":"QDT 控除の指示","ai-trading-assistant.form.qdtCostHint":"AI の決定ごとに {cost} QDT が差し引かれます。アカウントに十分な QDT 残高があることを確認してください。戦略の実行中、決定ごとに料金がリアルタイムで差し引かれます。","ai-trading-assistant.form.apiKey":"APIキー","ai-trading-assistant.form.exchange":"交換を選択","ai-trading-assistant.form.secretKey":"秘密鍵","ai-trading-assistant.form.passphrase":"パスフレーズ","ai-trading-assistant.form.testConnection":"テスト接続","ai-trading-assistant.form.symbol":"取引ペア","ai-trading-assistant.form.symbolHint":"取引する取引ペアを選択してください","ai-trading-assistant.form.initialCapital":"投資額(証拠金)","ai-trading-assistant.form.leverage":"複数を活用する","ai-trading-assistant.form.timeframe":"期間","ai-trading-assistant.form.timeframe1m":"1分","ai-trading-assistant.form.timeframe5m":"5分","ai-trading-assistant.form.timeframe15m":"15分","ai-trading-assistant.form.timeframe30m":"30分","ai-trading-assistant.form.timeframe1H":"1時間","ai-trading-assistant.form.timeframe4H":"4時間","ai-trading-assistant.form.timeframe1D":"1日","ai-trading-assistant.form.marketType":"市場タイプ","ai-trading-assistant.form.marketTypeFutures":"契約","ai-trading-assistant.form.marketTypeSpot":"スポット","ai-trading-assistant.form.totalPnl":"損益通算","ai-trading-assistant.form.customPrompt":"カスタムのプロンプト単語","ai-trading-assistant.form.customPromptHint":"オプション。 AI 取引戦略と意思決定ロジックをカスタマイズするために使用されます。","ai-trading-assistant.form.cancel":"キャンセル","ai-trading-assistant.form.prev":"前のステップ","ai-trading-assistant.form.next":"次のステップ","ai-trading-assistant.form.confirmCreate":"作成の確認","ai-trading-assistant.form.confirmEdit":"変更を確認する","ai-trading-assistant.messages.createSuccess":"戦略が正常に作成されました","ai-trading-assistant.messages.createFailed":"ポリシーの作成に失敗しました","ai-trading-assistant.messages.updateSuccess":"ポリシーの更新が成功しました","ai-trading-assistant.messages.updateFailed":"ポリシーの更新に失敗しました","ai-trading-assistant.messages.deleteSuccess":"ポリシーの削除が成功しました","ai-trading-assistant.messages.deleteFailed":"ポリシーの削除に失敗しました","ai-trading-assistant.messages.startSuccess":"戦略は無事に開始されました","ai-trading-assistant.messages.startFailed":"ポリシーの開始に失敗しました","ai-trading-assistant.messages.stopSuccess":"戦略は正常に停止されました","ai-trading-assistant.messages.stopFailed":"停止戦略は失敗しました","ai-trading-assistant.messages.loadFailed":"ポリシーリストの取得に失敗しました","ai-trading-assistant.messages.loadDecisionsFailed":"AI判定記録の取得に失敗しました","ai-trading-assistant.messages.deleteConfirm":"このポリシーを削除してもよろしいですか?この操作は元に戻すことができません。","ai-trading-assistant.placeholders.inputStrategyName":"ポリシー名を入力してください","ai-trading-assistant.placeholders.selectModelId":"AI モデルを選択してください","ai-trading-assistant.placeholders.selectDecideInterval":"決定間隔を選択してください","ai-trading-assistant.placeholders.startTime":"開始時間","ai-trading-assistant.placeholders.endTime":"終了時間","ai-trading-assistant.placeholders.inputApiKey":"APIキーを入力してください","ai-trading-assistant.placeholders.selectExchange":"交換を選択してください","ai-trading-assistant.placeholders.inputSecretKey":"秘密キーを入力してください","ai-trading-assistant.placeholders.inputPassphrase":"パスフレーズを入力してください","ai-trading-assistant.placeholders.selectSymbol":"BTC/USDT などの取引ペアを選択してください。","ai-trading-assistant.placeholders.selectTimeframe":"期間を選択してください","ai-trading-assistant.placeholders.inputCustomPrompt":"カスタムのプロンプト単語を入力してください (オプション)","ai-trading-assistant.validation.strategyNameRequired":"ポリシー名を入力してください","ai-trading-assistant.validation.modelIdRequired":"AI モデルを選択してください","ai-trading-assistant.validation.runPeriodRequired":"実行サイクルを選択してください","ai-trading-assistant.validation.apiKeyRequired":"APIキーを入力してください","ai-trading-assistant.validation.exchangeRequired":"交換を選択してください","ai-trading-assistant.validation.secretKeyRequired":"秘密キーを入力してください","ai-trading-assistant.validation.symbolRequired":"取引ペアを選択してください","ai-trading-assistant.validation.initialCapitalRequired":"投資額を入力してください","ai-trading-assistant.table.time":"時間","ai-trading-assistant.table.type":"タイプ","ai-trading-assistant.table.price":"価格","ai-trading-assistant.table.amount":"数量","ai-trading-assistant.table.value":"金額","ai-trading-assistant.table.symbol":"取引ペア","ai-trading-assistant.table.side":"方向","ai-trading-assistant.table.size":"ポジション数量","ai-trading-assistant.table.entryPrice":"オープン価格","ai-trading-assistant.table.currentPrice":"現在の価格","ai-trading-assistant.table.unrealizedPnl":"未実現損益","ai-trading-assistant.table.profit":"損益","ai-trading-assistant.table.openLong":"長く開く","ai-trading-assistant.table.closeLong":"ピンドゥオ","ai-trading-assistant.table.openShort":"オープンショート","ai-trading-assistant.table.closeShort":"空の","ai-trading-assistant.table.addLong":"ガドット","ai-trading-assistant.table.addShort":"短く追加する","ai-trading-assistant.table.closeShortProfit":"ショートポジションで利益確定","ai-trading-assistant.table.closeShortStop":"ストップロス","ai-trading-assistant.table.closeLongProfit":"長く停止して利益を得る","ai-trading-assistant.table.closeLongStop":"ストップロス","ai-trading-assistant.table.buy":"買う","ai-trading-assistant.table.sell":"売る","ai-trading-assistant.table.long":"長く続けてください","ai-trading-assistant.table.short":"短い","ai-trading-assistant.table.hold":"ホールド","ai-trading-assistant.table.reasoning":"分析理由","ai-trading-assistant.table.decisions":"意思決定","ai-trading-assistant.table.riskAssessment":"リスク評価","ai-trading-assistant.table.confidence":"自信","ai-trading-assistant.table.totalRecords":"合計 {total} レコード","ai-trading-assistant.table.noPositions":"まだポジションがありません","ai-trading-assistant.detail.title":"戦略の詳細","ai-trading-assistant.equity.noData":"純資産データはまだありません","ai-trading-assistant.equity.equity":"純資産","ai-trading-assistant.exchange.testFailed":"接続テストに失敗しました","ai-trading-assistant.exchange.connectionSuccess":"接続成功","ai-trading-assistant.exchange.connectionFailed":"接続に失敗しました","ai-trading-assistant.form.advancedSettings":"詳細設定","ai-trading-assistant.form.orderMode":"オーダーモード","ai-trading-assistant.form.orderModeMaker":"メーカー","ai-trading-assistant.form.orderModeTaker":"市場価格(テイカー)","ai-trading-assistant.form.orderModeHint":"未決注文モードでは指値注文が使用され、手数料が安くなります。市場価格モードはすぐに実行され、手数料が高くなります。","ai-trading-assistant.form.makerWaitSec":"未決注文の待ち時間 (秒)","ai-trading-assistant.form.makerWaitSecHint":"注文後の取引を待つ時間。キャンセルして、タイムアウト後に再試行してください。","ai-trading-assistant.form.makerRetries":"未決注文の再試行回数","ai-trading-assistant.form.makerRetriesHint":"未決注文が約定しない場合の最大リトライ回数","ai-trading-assistant.form.fallbackToMarket":"未決注文は失敗し、市場価格は引き下げられます。","ai-trading-assistant.form.fallbackToMarketHint":"開始/終了未決注文が完了していない場合、トランザクションを確実に完了させるために成行注文にダウングレードする必要があるかどうか。","ai-trading-assistant.form.marginMode":"マージンモード","ai-trading-assistant.form.marginModeCross":"倉庫がいっぱい","ai-trading-assistant.form.marginModeIsolated":"孤立した位置","ai-analysis.title":"クォンタムトレーディングエンジン","ai-analysis.system.online":"オンライン","ai-analysis.system.agents":"エージェント","ai-analysis.system.active":"アクティブな","ai-analysis.system.stage":"ステージ","ai-analysis.panel.roster":"エージェントラインナップ","ai-analysis.panel.thinking":"考え中...","ai-analysis.panel.done":"完了","ai-analysis.panel.standby":"スタンバイ","ai-analysis.input.title":"クォンタムトレーディングエンジン","ai-analysis.input.placeholder":"ターゲット資産を選択します (例: BTC/USDT)","ai-analysis.input.watchlist":"オプションストック","ai-analysis.input.start":"分析を開始する","ai-analysis.input.recent":"最近のタスク:","ai-analysis.vis.stage":"ステージ","ai-analysis.vis.processing":"処理中","ai-analysis.result.complete":"分析完了","ai-analysis.result.signal":"最終信号","ai-analysis.result.confidence":"自信:","ai-analysis.result.new":"新しい分析","ai-analysis.result.full":"レポート全体を表示","ai-analysis.logs.title":"システムログ","ai-analysis.modal.title":"機密報告書","ai-analysis.modal.fundamental":"ファンダメンタルズ分析","ai-analysis.modal.technical":"テクニカル分析","ai-analysis.modal.sentiment":"感情分析","ai-analysis.modal.risk":"リスク評価","ai-analysis.stage.idle":"スタンバイ","ai-analysis.stage.1":"フェーズ 1: 多次元分析","ai-analysis.stage.2":"フェーズ 2: 長短討論","ai-analysis.stage.3":"フェーズ 3: 戦略計画","ai-analysis.stage.4":"第 4 段階: リスク管理のレビュー","ai-analysis.stage.complete":"完了","ai-analysis.agent.investment_director":"投資ディレクター","ai-analysis.agent.role.investment_director":"包括的な分析と最終結論","ai-analysis.agent.market":"市場アナリスト","ai-analysis.agent.role.market":"テクノロジーと市場データ","ai-analysis.agent.fundamental":"ファンダメンタルズアナリスト","ai-analysis.agent.role.fundamental":"財務と評価","ai-analysis.agent.technical":"テクニカルアナリスト","ai-analysis.agent.role.technical":"テクニカル指標とチャート","ai-analysis.agent.news":"ニュースアナリスト","ai-analysis.agent.role.news":"グローバルニュースフィルター","ai-analysis.agent.sentiment":"センチメントアナリスト","ai-analysis.agent.role.sentiment":"社会的&感情的","ai-analysis.agent.risk":"リスクアナリスト","ai-analysis.agent.role.risk":"基本的なリスクチェック","ai-analysis.agent.bull":"強気な研究者","ai-analysis.agent.role.bull":"成長触媒の採掘","ai-analysis.agent.bear":"弱気な研究者","ai-analysis.agent.role.bear":"リスクと欠陥の掘り下げ","ai-analysis.agent.manager":"研究マネージャー","ai-analysis.agent.role.manager":"ディベートモデレーター","ai-analysis.agent.trader":"トレーダー","ai-analysis.agent.role.trader":"エグゼクティブ・ストラテジスト","ai-analysis.agent.risky":"活動家アナリスト","ai-analysis.agent.role.risky":"積極的な戦略","ai-analysis.agent.neutral":"バランスアナリスト","ai-analysis.agent.role.neutral":"バランス戦略","ai-analysis.agent.safe":"保守的なアナリスト","ai-analysis.agent.role.safe":"保守的な戦略","ai-analysis.agent.cro":"リスクコントロールマネージャー (CRO)","ai-analysis.agent.role.cro":"最終的な意思決定権限","ai-analysis.script.market":"主要な取引所から OHLCV データを取得しています...","ai-analysis.script.fundamental":"四半期財務報告書を取得しています...","ai-analysis.script.technical":"テクニカル指標とチャートパターンを分析しています...","ai-analysis.script.news":"世界的な金融ニュースを調べています...","ai-analysis.script.sentiment":"ソーシャルメディアのトレンドを分析中...","ai-analysis.script.risk":"過去のボラティリティを計算しています...","invite.inviteLink":"招待リンク","invite.copy":"リンクをコピー","invite.copySuccess":"コピー成功!","invite.copyFailed":"コピーに失敗しました。 手動でコピーしてください","invite.noInviteLink":"招待リンクが生成されませんでした","invite.totalInvites":"累積招待状","invite.totalReward":"累計報酬","invite.rules":"招待ルール","invite.rule1":"友達の登録に成功するたびに、報酬を受け取ります","invite.rule2":"招待された友達が最初のトランザクションを完了すると、追加の報酬を受け取ります","invite.rule3":"招待特典はアカウントに直接送信されます","invite.inviteList":"招待リスト","invite.tasks":"ミッションセンター","invite.inviteeName":"招待者","invite.inviteTime":"招待時間","invite.status":"ステータス","invite.reward":"報酬","invite.active":"アクティブな","invite.inactive":"アクティブ化されていません","invite.completed":"完了","invite.claimed":"受け取りました","invite.pending":"完成予定","invite.goToTask":"完了する","invite.claimReward":"報酬を請求する","invite.verify":"検証完了","invite.verifySuccess":"検証成功!タスクが完了しました","invite.verifyNotCompleted":"タスクはまだ完了していません。 最初にタスクを完了してください","invite.verifyFailed":"検証に失敗しました。後でもう一度お試しください","invite.claimSuccess":"{reward} QDT を正常に受け取りました!","invite.claimFailed":"収集に失敗しました。 後でもう一度お試しください","invite.totalRecords":"合計 {total} レコード","invite.task.twitter.title":"X(Twitter)にリツイート","invite.task.twitter.desc":"公式ツイートを X (Twitter) アカウントに共有します","invite.task.youtube.title":"YouTube チャンネルをフォローしてください","invite.task.youtube.desc":"公式 YouTube チャンネルを購読してフォローしてください","invite.task.telegram.title":"テレグラムグループに参加する","invite.task.telegram.desc":"公式 Telegram コミュニティ グループに参加してください","invite.task.discord.title":"Discordサーバーに参加する","invite.task.discord.desc":"Discordコミュニティサーバーに参加してください",message:"-","layouts.usermenu.dialog.title":"情報","layouts.usermenu.dialog.content":"ログアウトしてもよろしいですか?","layouts.userLayout.title":"不確実性の中で真実を見つける","dashboard.indicator.boundary.message":"Note: The indicator script only computes plots + buy/sell signals. Position sizing, risk, scaling, fees/slippage belong to execution config.","dashboard.indicator.boundary.indicatorRule":"Keep the script to buy/sell only (and set df['buy']/df['sell']). Do NOT implement position management, TP/SL, scaling in the script.","dashboard.indicator.boundary.backtestRule":"Rule: If a bar has a main signal (buy/sell → open/close/reverse), scaling in/out is skipped on the same bar.","dashboard.indicator.guide.title":"Python Indicator & Strategy Development Guide","dashboard.indicator.guide.intro":"This platform supports writing custom technical indicators and trading signals using Python. The system includes built-in pandas and numpy data analysis libraries. You can use standard DataFrame operations to process K-line data and draw charts or mark buy/sell signals.","dashboard.indicator.guide.section1.title":"1. Runtime Environment & Predefined Variables","dashboard.indicator.guide.section1.env":"Your code runs in a browser-based Python environment (Pyodide).","dashboard.indicator.guide.section1.libs":"Pre-installed Libraries","dashboard.indicator.guide.section1.libsDesc":"The following libraries are imported by default, no need to import again:","dashboard.indicator.guide.section1.libsList":"pandas (pd), numpy (np), math, json","dashboard.indicator.guide.section1.data":"Input Data: df","dashboard.indicator.guide.section1.dataDesc":"The system automatically converts current K-line data into a Pandas DataFrame object, variable name is df.","dashboard.indicator.guide.section1.dataColumns":"df contains the following columns (all float type):","dashboard.indicator.guide.section1.dataColumnsList":"time (timestamp, seconds), open, high, low, close, volume","dashboard.indicator.guide.section1.dataNote":"Data index is arranged from old to new (0 is the earliest data, last row is the latest data).","dashboard.indicator.guide.section1.dataIndex":"Important: df index is timestamp (DatetimeIndex), please preserve the index, avoid using .values which loses the index.","dashboard.indicator.guide.section2.title":"2. Parameter Definition","dashboard.indicator.guide.section2.desc":"You can define variables as parameters at the beginning of your code. The system will try to parse statements like variable = value as adjustable parameters.","dashboard.indicator.guide.section2.example":"Parameter Example","dashboard.indicator.guide.section2.exampleCode":"span = 20 or multiplier = 2.0","dashboard.indicator.guide.section3.title":"3. Backtest Signal Setup (Important!)","dashboard.indicator.guide.section3.desc":"If you want your indicator to support backtesting, you must set the following two columns in your code:","dashboard.indicator.guide.section3.backtestRequired":"Required for Backtesting:","dashboard.indicator.guide.section3.backtestBuySignal":"df['buy_signal'] - Boolean Series, True indicates buy signal","dashboard.indicator.guide.section3.backtestSellSignal":"df['sell_signal'] - Boolean Series, True indicates sell signal","dashboard.indicator.guide.section3.backtestExample":"Example:","dashboard.indicator.guide.section3.backtestExampleCode":"df['buy_signal'] = condition_buy
df['sell_signal'] = condition_sell","dashboard.indicator.guide.section3.backtestNote":"Note: Even if you only set output.signals for chart display, you must set these two columns to enable backtesting.","dashboard.indicator.guide.section4.title":"4. Output Requirements: output","dashboard.indicator.guide.section4.desc":"At the end of code execution, you must define a dictionary named output to tell the chart how to display results.","dashboard.indicator.guide.section4.fields":"The output dictionary contains the following fields:","dashboard.indicator.guide.section4.plots":"plots - For drawing lines (e.g., moving averages, RSI)","dashboard.indicator.guide.section4.signals":"signals - For marking buy/sell signals (e.g., arrows, labels)","dashboard.indicator.guide.section4.name":"name - Indicator name (optional)","dashboard.indicator.guide.section4.calculatedVars":"calculatedVars - Calculated variables (optional, for displaying additional information)","dashboard.indicator.guide.section5.title":"5. Plot Configuration (Plots)","dashboard.indicator.guide.section5.desc":"Each object in the plots list represents a line.","dashboard.indicator.guide.section5.table.field":"Field","dashboard.indicator.guide.section5.table.type":"Type","dashboard.indicator.guide.section5.table.required":"Required","dashboard.indicator.guide.section5.table.requiredYes":"Yes","dashboard.indicator.guide.section5.table.requiredNo":"No","dashboard.indicator.guide.section5.table.desc":"Description","dashboard.indicator.guide.section5.table.name":"The name of the indicator line, displayed in the legend","dashboard.indicator.guide.section5.table.data":"Data list, length must match the number of rows in df. Recommended to use series.tolist()","dashboard.indicator.guide.section5.table.color":"Line color (Hex format, e.g. '#ff0000'). If not filled, the system will automatically assign","dashboard.indicator.guide.section5.table.typeDesc":"Chart type, default is 'line'","dashboard.indicator.guide.section5.table.overlay":"Important. True means display on main chart (with K-line), False means display on sub-chart (independent area)","dashboard.indicator.guide.section5.example":"Example: Draw Simple Moving Average (SMA)","dashboard.indicator.guide.section5.exampleCalc":"Calculate SMA","dashboard.indicator.guide.section5.exampleOutput":"Construct Output","dashboard.indicator.guide.section5.exampleOverlay":"Display on main chart","dashboard.indicator.guide.section6.title":"6. Signal Markers (Signals)","dashboard.indicator.guide.section6.desc":"signals are used to mark buy/sell points on specific K-lines through icons or text. Note: This is only for chart display. The backtest system uses df['buy_signal'] and df['sell_signal'].","dashboard.indicator.guide.section6.table.type":"Signal type: 'buy' (buy, marked below K-line) or 'sell' (sell, marked above K-line)","dashboard.indicator.guide.section6.table.data":"Signal data list. Fill price value at signal positions, fill None (or np.nan) at non-signal positions","dashboard.indicator.guide.section6.table.text":'Text displayed on the label (e.g. "B", "S", "Buy", "Sell")',"dashboard.indicator.guide.section6.table.color":"Marker color","dashboard.indicator.guide.section6.hint":"The system automatically handles positioning.","dashboard.indicator.guide.section6.buy":"Markers will be automatically positioned below the Low of the current K-line","dashboard.indicator.guide.section6.sell":"Markers will be automatically positioned above the High of the current K-line","dashboard.indicator.guide.section6.example":"Example: Draw Buy/Sell Signals","dashboard.indicator.guide.section6.exampleInit":"Initialize signal list, fill all with None","dashboard.indicator.guide.section6.exampleLogic":"Simple logic: mark buy when close price is greater than open price","dashboard.indicator.guide.section6.exampleNote":"In actual logic, please use loops or vectorized operations","dashboard.indicator.guide.section6.examplePrice":"Record price","dashboard.indicator.guide.section6.exampleText":"Buy","dashboard.indicator.guide.section7.title":"7. Complete Code Examples","dashboard.indicator.guide.section7.exampleA":"Example A: Dual EMA Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleACode":'# 1. Calculate indicators
df[\'ema_fast\'] = df[\'close\'].ewm(span=5, adjust=False).mean()
df[\'ema_slow\'] = df[\'close\'].ewm(span=13, adjust=False).mean()

# 2. Calculate crossover signals
cross_up = (df[\'ema_fast\'] > df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) <= df[\'ema_slow\'].shift(1))
cross_down = (df[\'ema_fast\'] < df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) >= df[\'ema_slow\'].shift(1))

# 3. 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = cross_up
df[\'close_long\'] = cross_down
df[\'open_short\'] = cross_down
df[\'close_short\'] = cross_up

# 4. Generate signal data for chart display
buy_signals = [df[\'low\'].iloc[i] * 0.995 if cross_up.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if cross_down.iloc[i] else None for i in range(len(df))]

# 5. Build output
output = {
"name": "Dual EMA Strategy",
"plots": [
{"name": "EMA 5", "data": df[\'ema_fast\'].tolist(), "color": "#FF6B6B", "overlay": True},
{"name": "EMA 13", "data": df[\'ema_slow\'].tolist(), "color": "#4ECDC4", "overlay": True}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section7.exampleB":"Example B: Bollinger Bands - Chart Display Only","dashboard.indicator.guide.section7.exampleBCode":'# Calculate Bollinger Bands (chart display only, no backtesting)
length = 20
mult = 2.0
df[\'sma\'] = df[\'close\'].rolling(length).mean()
df[\'std\'] = df[\'close\'].rolling(length).std()
df[\'upper\'] = df[\'sma\'] + mult * df[\'std\']
df[\'lower\'] = df[\'sma\'] - mult * df[\'std\']

output = {
"name": "Bollinger Bands",
"plots": [
{"name": "Upper", "data": df[\'upper\'].tolist(), "color": "#FF5252", "overlay": True},
{"name": "Middle", "data": df[\'sma\'].tolist(), "color": "#2196F3", "overlay": True},
{"name": "Lower", "data": df[\'lower\'].tolist(), "color": "#00E676", "overlay": True}
]
}',"dashboard.indicator.guide.section7.exampleC":"Example C: RSI Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleCCode":'# Calculate RSI
delta = df[\'close\'].diff()
up = delta.clip(lower=0)
down = -1 * delta.clip(upper=0)
ema_up = up.ewm(com=13, adjust=False).mean()
ema_down = down.ewm(com=13, adjust=False).mean()
rs = ema_up / ema_down
df[\'rsi\'] = 100 - (100 / (1 + rs))

# Generate trading signals
buy_condition = df[\'rsi\'] < 30 # Oversold buy
sell_condition = df[\'rsi\'] > 70 # Overbought sell

# 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = buy_condition
df[\'close_long\'] = sell_condition
df[\'open_short\'] = sell_condition
df[\'close_short\'] = buy_condition

# Generate chart signals
buy_signals = [df[\'low\'].iloc[i] * 0.995 if buy_condition.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if sell_condition.iloc[i] else None for i in range(len(df))]

output = {
"name": "RSI Strategy",
"plots": [
{"name": "RSI", "data": df[\'rsi\'].tolist(), "color": "#9C27B0", "overlay": False},
{"name": "Overbought", "data": [70] * len(df), "color": "#FF5252", "style": "dashed", "overlay": False},
{"name": "Oversold", "data": [30] * len(df), "color": "#00E676", "style": "dashed", "overlay": False}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section6.param":"Parameters","dashboard.indicator.guide.section6.calc":"Calculate","dashboard.indicator.guide.section6.output":"Output","dashboard.indicator.guide.section6.generate":"Generate signal data (initialize with None)","dashboard.indicator.guide.section6.subchart":"Display on sub-chart","dashboard.indicator.guide.section8.title":"8. Frequently Asked Questions (FAQ)","dashboard.indicator.guide.section8.q1":"Q: Why can't my indicator be backtested?","dashboard.indicator.guide.section8.a1":"A: The backtest system requires NEW signal columns: df['open_long'], df['close_long'], df['open_short'], df['close_short'] (boolean). Even if you set output.signals for chart display, you must set these columns to enable backtesting.","dashboard.indicator.guide.section8.q2":"Q: Data length mismatch?","dashboard.indicator.guide.section8.a2":"A: The data list in plots and signals must have exactly the same length as the K-line data. If you use df['xxx'].tolist(), there is usually no problem.","dashboard.indicator.guide.section8.q3":"Q: How to handle NaN (empty values)?","dashboard.indicator.guide.section8.a3":"A: Pandas calculations (such as rolling mean) will produce NaN at the beginning. The system will automatically convert NaN to null for chart rendering. You don't need to manually clean it, but if you need specific logic, you can use df.fillna(0) or other methods.","dashboard.indicator.guide.section8.q4":"Q: Index mismatch causing all signals to be NaN?","dashboard.indicator.guide.section8.a4":"A: Please ensure you preserve the original df index (timestamp). Avoid using .values to create new Series. Use columns directly like df['close'] for operations.","dashboard.indicator.guide.section8.q5":"Q: Can I use third-party network libraries?","dashboard.indicator.guide.section8.a5":"A: No. The runtime environment is a browser sandbox and cannot use libraries like requests to request external APIs, nor can it install additional pip packages. Limited to built-in libraries such as pandas, numpy, math, json.","dashboard.indicator.guide.section8.q6":"Q: How to debug code?","dashboard.indicator.guide.section8.a6":"A: If the chart does not display indicators, it is usually because the Python code has an error. Please check for syntax errors or array index out of bounds. It is recommended to debug the algorithm logic in a local Python environment first, then copy it in.","dashboard.indicator.guide.section8.q7":"Q: Backtest shows 0 signals?","dashboard.indicator.guide.section8.a7":"A: Please check the data type of df['open_long']/df['close_long']/df['open_short']/df['close_short']. They should be boolean (True/False), not numeric. Use condition.fillna(False).astype(bool) to ensure correct type.","dashboard.indicator.backtest.commissionHint":"Charged on notional value (incl. leverage) per trade; both entry & exit are deducted from balance.","dashboard.indicator.backtest.historyTitle":"Backtest History","dashboard.indicator.backtest.historyRefresh":"Refresh","dashboard.indicator.backtest.historyView":"View","dashboard.indicator.backtest.historyNoData":"No backtest history","dashboard.indicator.backtest.historyUseCurrent":"Only current symbol/timeframe","dashboard.indicator.backtest.historyFilterSymbol":"Symbol","dashboard.indicator.backtest.historyFilterTimeframe":"Timeframe","dashboard.indicator.backtest.historyApply":"Apply filters","dashboard.indicator.backtest.historyAIAnalyze":"AI Analyze","dashboard.indicator.backtest.historyAIAnalyzeTitle":"AI Suggestions","dashboard.indicator.backtest.historyNoAIResult":"No AI analysis result","dashboard.indicator.backtest.historyRunId":"Run ID","dashboard.indicator.backtest.historyCreatedAt":"Time","dashboard.indicator.backtest.historyRange":"Range","dashboard.indicator.backtest.historyStatus":"Status","dashboard.indicator.backtest.historyStatusSuccess":"Success","dashboard.indicator.backtest.historyStatusFailed":"Failed","dashboard.indicator.backtest.historyActions":"Actions","dashboard.indicator.backtest.hint.entryPctMax":"Max entry: {maxPct}% (reserve budget for future scale-ins)","trading-assistant.exchange.ipWhitelistTip":"Please add the following IPs to the whitelist in your exchange API settings:","signal-robot.title":"Signal Robot Console","signal-robot.createBot":"Create New Bot","signal-robot.search.nameOrSymbol":"Name/Symbol","signal-robot.search.placeholder":"Search bot name or symbol","signal-robot.search.status":"Status","signal-robot.search.statusAll":"All","signal-robot.search.statusRunning":"Running","signal-robot.search.statusPaused":"Paused","signal-robot.search.query":"Query","signal-robot.search.reset":"Reset","signal-robot.table.botName":"Bot Name","signal-robot.table.symbolTimeframe":"Symbol/Timeframe","signal-robot.table.triggerStrategy":"Trigger Strategy","signal-robot.table.notificationChannels":"Notification Channels","signal-robot.table.status":"Status","signal-robot.table.action":"Action","signal-robot.table.triggerConditions":"{count} trigger conditions","signal-robot.table.monitoring":"Monitoring","signal-robot.table.paused":"Paused","signal-robot.table.edit":"Edit","signal-robot.table.pause":"Pause","signal-robot.table.start":"Start","signal-robot.table.delete":"Delete","signal-robot.table.deleteConfirm":"Are you sure you want to delete this bot?","signal-robot.table.deleteSuccess":"Deleted successfully","signal-robot.table.startSuccess":"Bot started","signal-robot.table.pauseSuccess":"Bot paused","signal-robot.channel.telegram":"Telegram","signal-robot.channel.discord":"Discord","signal-robot.channel.email":"Email","signal-robot.channel.webhook":"Webhook","signal-robot.channel.browser":"Browser Push","signal-robot.modal.createTitle":"Create New Signal Robot","signal-robot.modal.editTitle":"Edit Signal Robot","signal-robot.modal.step.basic":"Basic Settings","signal-robot.modal.step.entry":"Entry Strategy","signal-robot.modal.step.position":"Position Management","signal-robot.modal.step.risk":"Risk Control","signal-robot.modal.step.notify":"Notification Config","signal-robot.modal.prev":"Previous","signal-robot.modal.next":"Next","signal-robot.modal.preview":"Preview Backtest","signal-robot.modal.complete":"Complete & Run","signal-robot.modal.saveSuccess":"Saved successfully","signal-robot.modal.previewDeveloping":"Preview feature is under development...","signal-robot.modal.basicInfoRequired":"Please complete basic information","signal-robot.basic.alert":"Set basic information for the bot","signal-robot.basic.title":"Basic Information","signal-robot.basic.botName":"Bot Name","signal-robot.basic.botNamePlaceholder":"e.g.: BTC SuperTrend Strategy","signal-robot.basic.symbol":"Trading Pair","signal-robot.basic.symbolPlaceholder":"Select from watchlist","signal-robot.basic.noWatchlist":"No watchlist items, please add in market page first","signal-robot.basic.timeframe":"K-Line Period","signal-robot.basic.timeframe15m":"15 Minutes","signal-robot.basic.timeframe30m":"30 Minutes","signal-robot.basic.timeframe1h":"1 Hour","signal-robot.basic.timeframe4h":"4 Hours","signal-robot.basic.timeframe1d":"1 Day","signal-robot.basic.autoNameSuggestion":"{symbol} Signal Robot","signal-robot.entry.alert":"Trigger entry signal when all conditions below are met","signal-robot.entry.condition":"Condition {index}","signal-robot.entry.indicator":"Indicator","signal-robot.entry.indicatorSupertrend":"SuperTrend","signal-robot.entry.indicatorEma":"EMA (Exponential Moving Average)","signal-robot.entry.indicatorRsi":"RSI (Relative Strength Index)","signal-robot.entry.indicatorMacd":"MACD","signal-robot.entry.indicatorBollinger":"Bollinger Bands","signal-robot.entry.atrPeriod":"ATR Period","signal-robot.entry.multiplier":"Multiplier","signal-robot.entry.triggerSignal":"Trigger Signal","signal-robot.entry.signalTrendBullish":"Trend Bullish","signal-robot.entry.signalTrendBearish":"Trend Bearish","signal-robot.entry.signalIsUptrend":"Is Uptrend","signal-robot.entry.signalIsDowntrend":"Is Downtrend","signal-robot.entry.period":"Period","signal-robot.entry.compareCondition":"Compare Condition","signal-robot.entry.priceAbove":"Price > EMA (Price Above)","signal-robot.entry.priceBelow":"Price < EMA (Price Below)","signal-robot.entry.crossUp":"Price Crosses Above EMA (Golden Cross)","signal-robot.entry.crossDown":"Price Crosses Below EMA (Death Cross)","signal-robot.entry.compare":"Compare","signal-robot.entry.greaterThan":"Greater Than","signal-robot.entry.lessThan":"Less Than","signal-robot.entry.crossUpShort":"Cross Up","signal-robot.entry.crossDownShort":"Cross Down","signal-robot.entry.threshold":"Threshold","signal-robot.entry.selectIndicator":"Please select an indicator to configure parameters","signal-robot.entry.addCondition":"Add Condition","signal-robot.position.alert":"Configure initial position size, leverage and pyramiding rules","signal-robot.position.basicTitle":"Basic Position Management","signal-robot.position.initialSize":"Initial Size (Capital %)","signal-robot.position.initialSizeHint":"Recommended 5% - 20%","signal-robot.position.leverage":"Leverage","signal-robot.position.leverageHint":"Please ensure your exchange account supports this leverage","signal-robot.position.maxPyramiding":"Max Pyramiding Times","signal-robot.position.maxPyramidingHint":"0 means no pyramiding","signal-robot.position.pyramidingTitle":"Pyramiding Rules","signal-robot.position.pyramidingEnabled":"Enabled","signal-robot.position.pyramidingDisabled":"Disabled","signal-robot.position.pyramidingCondition":"Pyramiding Trigger Condition","signal-robot.position.priceRisePct":"Price Rises (Long) / Falls (Short)","signal-robot.position.profitPct":"Profit Reaches","signal-robot.position.triggerThreshold":"Trigger Threshold (%)","signal-robot.position.triggerThresholdHint":"e.g. 3%: add position once every 3% rise","signal-robot.position.addSize":"Single Add Size (Capital %)","signal-robot.position.pyramidingDisabledHint":"Pyramiding disabled, only initial position will be executed","signal-robot.risk.alert":"Configure take profit, stop loss and exit rules","signal-robot.risk.stopLossTitle":"Stop Loss","signal-robot.risk.stopLossEnabled":"Enabled","signal-robot.risk.stopLossDisabled":"Disabled","signal-robot.risk.stopLossType":"Stop Loss Type","signal-robot.risk.stopLossFixedPct":"Fixed Percentage","signal-robot.risk.stopLossAtrMultiplier":"ATR Multiplier","signal-robot.risk.stopLossValue":"Value","signal-robot.risk.stopLossFixedHint":"e.g. 2%: stop loss when loss reaches 2%","signal-robot.risk.stopLossAtrHint":"e.g. 2.0: stop loss when price touches ATR*2.0","signal-robot.risk.stopLossDisabledHint":"Stop loss disabled (high risk)","signal-robot.risk.trailingStopTitle":"Trailing Stop","signal-robot.risk.activationProfit":"Activation Profit (%)","signal-robot.risk.activationProfitHint":"Start trailing when profit reaches this level","signal-robot.risk.callbackPct":"Callback (%)","signal-robot.risk.callbackPctHint":"Trigger take profit when price falls from peak by this percentage","signal-robot.risk.trailingStopDisabledHint":"Trailing stop disabled","signal-robot.risk.otherExitTitle":"Other Exit Rules","signal-robot.risk.signalExit":"Allow Signal Exit","signal-robot.risk.signalExitHint":"Close position immediately when reverse signal appears (e.g. close long when short signal appears)","signal-robot.notify.alert":"Configure notification methods when signal is triggered","signal-robot.notify.channelTitle":"Notification Channels","signal-robot.notify.discordWebhook":"Discord Webhook","signal-robot.notify.genericWebhook":"Generic Webhook","signal-robot.notify.webhookUrl":"Webhook URL","signal-robot.notify.webhookUrlPlaceholder":"https://example.com/webhook","signal-robot.notify.discordUrl":"Discord URL","signal-robot.notify.discordUrlPlaceholder":"https://discord.com/api/webhooks/...","signal-robot.operator.greaterThan":"Greater Than","signal-robot.operator.lessThan":"Less Than","signal-robot.operator.equal":"Equal","signal-robot.operator.goldenCross":"Golden Cross","signal-robot.operator.deathCross":"Death Cross","signal-robot.operator.increaseBy":"Increase By","signal-robot.operator.decreaseBy":"Decrease By","signal-robot.indicator.price":"Price","signal-robot.indicator.rsi":"RSI","signal-robot.indicator.kdjK":"KDJ(K)","signal-robot.indicator.kdjJ":"KDJ(J)","signal-robot.indicator.macd":"MACD","signal-robot.indicator.macdHist":"MACD Histogram","signal-robot.indicator.bollingerUp":"Bollinger Upper","signal-robot.indicator.bollingerLow":"Bollinger Lower","signal-robot.indicator.volume":"Volume","signal-robot.indicator.changePct1h":"1H Change %","signal-robot.indicator.changePct24h":"24H Change %","signal-robot.indicator.signalLine":"Signal Line","settings.group.agent_memory":"記憶/反省設定","settings.group.reflection_worker":"自動反省検証ワーカー","settings.field.ENABLE_AGENT_MEMORY":"エージェント記憶を有効化","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"ベクトル検索を有効化(ローカル)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"埋め込み次元","settings.field.AGENT_MEMORY_TOP_K":"Top-K 取得数","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"候補ウィンドウサイズ","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"時間減衰の半減期(日)","settings.field.AGENT_MEMORY_W_SIM":"類似度重み","settings.field.AGENT_MEMORY_W_RECENCY":"新しさ重み","settings.field.AGENT_MEMORY_W_RETURNS":"収益重み","settings.field.ENABLE_REFLECTION_WORKER":"自動検証を有効化","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"検証間隔(秒)","profile.notifications.title":"通知設定","profile.notifications.hint":"デフォルトの通知方法を設定します。資産モニターやアラート作成時に自動的に使用されます","profile.notifications.defaultChannels":"デフォルト通知チャンネル","profile.notifications.browser":"アプリ内通知","profile.notifications.email":"メール","profile.notifications.phone":"SMS","profile.notifications.telegramBotToken":"Telegram Bot Token","profile.notifications.telegramBotTokenPlaceholder":"Telegram Bot Tokenを入力してください","profile.notifications.telegramBotTokenHint":"@BotFatherでボットを作成してTokenを取得してください","profile.notifications.telegramChatId":"Telegram Chat ID","profile.notifications.telegramPlaceholder":"Telegram Chat IDを入力してください(例:123456789)","profile.notifications.telegramHint":"@userinfobot に /start を送信してChat IDを取得してください","profile.notifications.notifyEmail":"通知メール","profile.notifications.emailPlaceholder":"通知を受け取るメールアドレス","profile.notifications.emailHint":"デフォルトはアカウントメール、別のメールも設定可能","profile.notifications.phonePlaceholder":"電話番号を入力してください(例:+81901234567)","profile.notifications.phoneHint":"管理者がTwilioサービスを設定する必要があります","profile.notifications.discordWebhook":"Discord Webhook","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"Discordサーバー設定でWebhookを作成してください","profile.notifications.webhookUrl":"Webhook URL","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"カスタムWebhook URL、POST JSONで通知を送信","profile.notifications.webhookToken":"Webhook Token(任意)","profile.notifications.webhookTokenPlaceholder":"リクエスト認証用Bearer Token","profile.notifications.webhookTokenHint":"Authorization: Bearer TokenとしてWebhookに送信","profile.notifications.testBtn":"テスト通知を送信","profile.notifications.saveSuccess":"通知設定を保存しました","profile.notifications.selectChannel":"少なくとも1つの通知チャンネルを選択してください","profile.notifications.fillTelegramToken":"Telegram Bot Tokenを入力してください","profile.notifications.fillTelegram":"Telegram Chat IDを入力してください","profile.notifications.fillEmail":"通知メールを入力してください","profile.notifications.testSent":"テスト通知を送信しました。通知チャンネルを確認してください"},f=(0,e.A)((0,e.A)({},p),y)}}]); \ No newline at end of file diff --git a/frontend/dist/js/lang-ja-JP-legacy.37e6a161.js b/frontend/dist/js/lang-ja-JP-legacy.37e6a161.js new file mode 100644 index 0000000..b91113e --- /dev/null +++ b/frontend/dist/js/lang-ja-JP-legacy.37e6a161.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[638],{7392:function(a,t,i){i.d(t,{default:function(){return f}});var e=i(76338),s={items_per_page:"/ ページ",jump_to:"移動",jump_to_confirm:"確認する",page:"ページ",prev_page:"前のページ",next_page:"次のページ",prev_5:"前 5ページ",next_5:"次 5ページ",prev_3:"前 3ページ",next_3:"次 3ページ"},o=i(85505),r={today:"今日",now:"現在時刻",backToToday:"今日に戻る",ok:"決定",timeSelect:"時間を選択",dateSelect:"日時を選択",clear:"クリア",month:"月",year:"年",previousMonth:"前月 (ページアップキー)",nextMonth:"翌月 (ページダウンキー)",monthSelect:"月を選択",yearSelect:"年を選択",decadeSelect:"年代を選択",yearFormat:"YYYY年",dayFormat:"D日",dateFormat:"YYYY年M月D日",dateTimeFormat:"YYYY年M月D日 HH時mm分ss秒",previousYear:"前年 (Controlを押しながら左キー)",nextYear:"翌年 (Controlを押しながら右キー)",previousDecade:"前の年代",nextDecade:"次の年代",previousCentury:"前の世紀",nextCentury:"次の世紀"},n={placeholder:"時刻を選択"},d=n,l={lang:(0,o.A)({placeholder:"日付を選択",rangePlaceholder:["開始日付","終了日付"]},r),timePickerLocale:(0,o.A)({},d)},c=l,g=c,b={locale:"ja",Pagination:s,DatePicker:c,TimePicker:d,Calendar:g,Table:{filterTitle:"メニューをフィルター",filterConfirm:"OK",filterReset:"リセット",selectAll:"すべてを選択",selectInvert:"選択を反転"},Modal:{okText:"OK",cancelText:"キャンセル",justOkText:"OK"},Popconfirm:{okText:"OK",cancelText:"キャンセル"},Transfer:{searchPlaceholder:"ここを検索",itemUnit:"アイテム",itemsUnit:"アイテム"},Upload:{uploading:"アップロード中...",removeFile:"ファイルを削除",uploadError:"アップロードエラー",previewFile:"ファイルをプレビュー",downloadFile:"ダウンロードファイル"},Empty:{description:"データがありません"}},m=b,h=i(23827),u=i.n(h),p={antLocale:m,momentName:"ja",momentLocale:u()},y={submit:"送信する",save:"保存する","submit.ok":"送信成功","save.ok":"正常に保存されました","menu.welcome":"ようこそ","menu.home":"ホームページ","menu.dashboard":"ダッシュボード","menu.dashboard.indicator":"指標分析","menu.dashboard.community":"インジケーターコミュニティ","menu.dashboard.analysis":"AI分析","menu.dashboard.tradingAssistant":"取引アシスタント","menu.dashboard.aiTradingAssistant":"AI取引アシスタント","menu.dashboard.signalRobot":"シグナルロボット","menu.dashboard.monitor":"モニタリングページ","menu.dashboard.workplace":"作業台","menu.form":"フォームページ","menu.form.basic-form":"基本形","menu.form.step-form":"ステップバイステップフォーム","menu.form.step-form.info":"ステップバイステップフォーム(転送情報を記入)","menu.form.step-form.confirm":"ステップバイステップフォーム(振込情報の確認)","menu.form.step-form.result":"ステップバイステップのフォーム(完了)","menu.form.advanced-form":"高度なフォーム","menu.list":"一覧ページ","menu.list.table-list":"お問い合わせフォーム","menu.list.basic-list":"規格一覧","menu.list.card-list":"カードリスト","menu.list.search-list":"検索リスト","menu.list.search-list.articles":"検索リスト(記事)","menu.list.search-list.projects":"検索リスト(プロジェクト)","menu.list.search-list.applications":"検索リスト(アプリ)","menu.profile":"詳細ページ","menu.profile.basic":"基本詳細ページ","menu.profile.advanced":"詳細ページ","menu.result":"結果ページ","menu.result.success":"成功ページ","menu.result.fail":"失敗ページ","menu.exception":"例外ページ","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"トリガーエラー","menu.account":"個人ページ","menu.account.center":"パーソナルセンター","menu.account.settings":"個人設定","menu.account.trigger":"トリガーエラー","menu.account.logout":"ログアウト","menu.wallet":"私の財布","menu.docs":"ドキュメントセンター","menu.docs.detail":"文書の詳細","menu.header.refreshPage":"ページを更新する","menu.invite.friends":"友達を招待する","app.setting.pagestyle":"全体的なスタイル設定","app.setting.pagestyle.light":"明るいメニュースタイル","app.setting.pagestyle.dark":"ダークメニュースタイル","app.setting.pagestyle.realdark":"ダークモード","app.setting.themecolor":"テーマカラー","app.setting.navigationmode":"ナビゲーションモード","app.setting.sidemenu.nav":"サイドバーのナビゲーション","app.setting.topmenu.nav":"トップバーのナビゲーション","app.setting.content-width":"コンテンツ領域の幅","app.setting.content-width.tooltip":"この設定は、[トップバーナビゲーション]時のみ有効です。","app.setting.content-width.fixed":"修正済み","app.setting.content-width.fluid":"ストリーミング","app.setting.fixedheader":"固定ヘッダー","app.setting.fixedheader.tooltip":"固定ヘッダー時に設定可能","app.setting.autoHideHeader":"スクロール時にヘッダーを非表示にする","app.setting.fixedsidebar":"サイドメニューを修正","app.setting.sidemenu":"サイドメニューのレイアウト","app.setting.topmenu":"トップメニューのレイアウト","app.setting.othersettings":"その他の設定","app.setting.weakmode":"カラーウィークネスモード","app.setting.multitab":"マルチタブモード","app.setting.copy":"設定をコピーする","app.setting.loading":"テーマを読み込み中","app.setting.copyinfo":"設定が正常にコピーされました src/config/defaultSettings.js","app.setting.copy.success":"コピー完了","app.setting.copy.fail":"コピーに失敗しました","app.setting.theme.switching":"テーマ変更!","app.setting.production.hint":"構成バーは開発環境でのプレビューにのみ使用され、運用環境では表示されません。 構成ファイルを手動でコピーして変更してください。","app.setting.themecolor.daybreak":"ドーンブルー(デフォルト)","app.setting.themecolor.dust":"夕暮れ","app.setting.themecolor.volcano":"火山","app.setting.themecolor.sunset":"日没","app.setting.themecolor.cyan":"明清","app.setting.themecolor.green":"オーロラグリーン","app.setting.themecolor.geekblue":"オタクブルー","app.setting.themecolor.purple":"ジャン・ジー","app.setting.tooltip":"ページ設定","user.login.userName":"ユーザー名","user.login.password":"パスワード","user.login.username.placeholder":"アカウント: 管理者","user.login.password.placeholder":"パスワード: admin または ant.design","user.login.message-invalid-credentials":"ログインに失敗しました。メールアドレスと確認コードを確認してください","user.login.message-invalid-verification-code":"認証コードエラー","user.login.tab-login-credentials":"アカウントパスワードログイン","user.login.tab-login-email":"メールログイン","user.login.tab-login-mobile":"携帯電話番号ログイン","user.login.captcha.placeholder":"グラフィック認証コードを入力してください","user.login.mobile.placeholder":"携帯電話番号","user.login.mobile.verification-code.placeholder":"認証コード","user.login.email.placeholder":"メールアドレスを入力してください","user.login.email.verification-code.placeholder":"確認コードを入力してください","user.login.email.sending":"認証コードが送信されています...","user.login.email.send-success-title":"ヒント","user.login.email.send-success":"確認コードは正常に送信されました。メールを確認してください","user.login.sms.send-success":"確認コードが正常に送信されました。テキスト メッセージを確認してください。","user.login.remember-me":"自動ログイン","user.login.forgot-password":"パスワードを忘れた場合","user.login.sign-in-with":"その他のログイン方法","user.login.signup":"アカウントを登録する","user.login.login":"ログイン","user.register.register":"登録する","user.register.email.placeholder":"電子メール","user.register.password.placeholder":"6文字以上を入力してください。 推測されやすいパスワードは使用しないでください。","user.register.password.popover-message":"6文字以上を入力してください。 推測されやすいパスワードは使用しないでください。","user.register.confirm-password.placeholder":"パスワードの確認","user.register.get-verification-code":"確認コードを取得する","user.register.sign-in":"既存のアカウントを使用してログインする","user.register-result.msg":"あなたのアカウント: {email} 登録が成功しました","user.register-result.activation-email":"アクティベーション電子メールはメールボックスに送信され、24 時間有効です。 すぐにメールにログインし、メール内のリンクをクリックしてアカウントをアクティブにしてください。","user.register-result.back-home":"ホームページに戻る","user.register-result.view-mailbox":"メールボックスを確認してください","user.email.required":"メールアドレスを入力してください!","user.email.wrong-format":"メールアドレスの形式が間違っています!","user.userName.required":"アカウント名またはメールアドレスを入力してください","user.password.required":"パスワードを入力してください。","user.password.twice.msg":"2 回入力したパスワードが一致しません。","user.password.strength.msg":"パスワードの強度が十分ではありません","user.password.strength.strong":"強さ: 強い","user.password.strength.medium":"強さ: 中","user.password.strength.low":"強度: 低い","user.password.strength.short":"強さ:短すぎる","user.confirm-password.required":"パスワードを確認してください。","user.phone-number.required":"正しい携帯電話番号を入力してください","user.phone-number.wrong-format":"携帯電話番号の形式が間違っています。","user.verification-code.required":"確認コードを入力してください。","user.captcha.required":"グラフィック認証コードを入力してください。","user.login.infos":"QuantDingerはAIマルチエージェント株分析補助ツールであり、証券投資コンサルティング資格はございません。 プラットフォーム内のすべての分析結果、スコア、参考意見は過去のデータに基づいてAIによって自動的に生成され、学習、研究、技術交流のみに使用され、投資アドバイスや意思決定の基礎を構成するものではありません。 株式投資には市場リスク、流動性リスク、政策リスク等の様々なリスクが伴い、元本を割り込む可能性があります。 ユーザーは自身のリスク許容度に基づいて独立した決定を行う必要があり、本ツールの使用から生じる投資行動および結果はユーザーが負担するものとします。 市場にはリスクがあり、投資は慎重になる必要があります。","user.login.tab-login-web3":"Web3ログイン","user.login.web3.tip":"ウォレットを使用した署名ログイン","user.login.web3.connect":"ウォレットに接続してログインする","user.login.web3.no-wallet":"ウォレットが検出されない","user.login.web3.no-address":"ウォレットアドレスが取得できませんでした","user.login.web3.nonce-failed":"乱数の取得に失敗しました","user.login.web3.verify-failed":"署名検証に失敗しました","user.login.web3.success":"ログイン成功","user.login.web3.failed":"ウォレットへのログインに失敗しました","nav.no_wallet":"ウォレットが検出されない","nav.copy":"コピー","nav.copy_success":"正常にコピーされました","user.login.oauth.google":"Googleでサインイン","user.login.oauth.github":"GitHub でサインインする","user.login.oauth.loading":"認証ページにリダイレクトしています...","user.login.oauth.failed":"OAuthログインに失敗しました","user.login.oauth.get-url-failed":"認証リンクの取得に失敗しました","user.login.subtitle":"世界市場に対する定量的な洞察を推進","user.login.legal.title":"法的免責事項","user.login.legal.view":"法的免責事項を表示","user.login.legal.collapse":"法的免責事項を折りたたむ","user.login.legal.agree":"法的免責事項を読み、同意します","user.login.legal.required":"まず法的免責事項を読んで確認してください","user.login.legal.content":"QuantDingerはAIマルチエージェント株分析補助ツールであり、証券投資コンサルティング資格はございません。 プラットフォーム内のすべての分析結果、評価、参考意見は過去のデータに基づいてAIによって自動的に生成され、学習、研究、技術交流のみに使用され、投資アドバイスや意思決定の基礎を構成するものではありません。 株式投資には市場リスク、流動性リスク、政策リスク等の様々なリスクが伴い、元本を割り込む可能性があります。 ユーザーは自身のリスク許容度に基づいて独立した決定を行う必要があり、本ツールの使用から生じる投資行動および結果はユーザーが負担するものとします。 市場にはリスクがあり、投資は慎重になる必要があります。","user.login.privacy.title":"ユーザープライバシーポリシー","user.login.privacy.view":"ユーザーのプライバシー ポリシーを表示する","user.login.privacy.collapse":"ユーザーのプライバシー規約を閉じる","user.login.privacy.content":"私たちはあなたのプライバシーとデータ保護を大切にしています。 1) 収集範囲:機能の実現に必要な情報(メールアドレス、携帯電話番号、市外局番、Web3ウォレットアドレスなど)と必要なログ、端末情報のみを収集します。 2) 利用目的:アカウントへのログインおよびセキュリティ確認、サービス機能の提供、トラブルシューティングおよびコンプライアンス要件のため。 3) 保管とセキュリティ: データは暗号化されて保管され、不正なアクセス、開示、損失を防ぐために必要な許可とアクセス制御手段が講じられます。 4) 第三者との共有: 法令で義務付けられている場合、またはサービスの実行に必要な場合を除き、お客様の個人情報は第三者と共有されることはありません。サードパーティのサービス (ウォレット、SMS サービスプロバイダーなど) が関与する場合、機能の実装に必要な最小限の範囲でのみ処理されます。 5) Cookie/ローカル ストレージ: ログイン ステータスと必要なセッション維持 (トークン、PHPSESSID など) に使用され、ブラウザーでクリアまたは制限できます。 6) 個人の権利:法令に基づき、照会、訂正、削除、同意の撤回等を行う権利を行使することができます。 7) 変更と通知: これらの条件が更新されると、ページ上で目立つように表示されます。 このサービスを継続して使用することにより、更新された内容を読み、同意したものとみなされます。 本規約またはその更新に同意できない場合は、サービスの使用を中止し、当社までご連絡ください。","account.basicInfo":"基本情報","account.id":"ユーザーID","account.username":"ユーザー名","account.nickname":"ニックネーム","account.email":"電子メール","account.mobile":"携帯電話番号","account.web3address":"ウォレットアドレス","account.pid":"紹介者ID","account.level":"ユーザーレベル","account.money":"バランス","account.qdtBalance":"QDTバランス","account.score":"ポイント","account.createtime":"登録時間","account.inviteLink":"招待リンク","account.recharge":"リチャージ","account.rechargeTip":"WeChat または Alipay を使用して、以下の QR コードをスキャンしてチャージしてください。","account.qrCodePlaceholder":"QR コード プレースホルダー (エミュレーション)","account.rechargeAmount":"チャージ金額","account.enterAmount":"チャージ金額を入力してください","account.rechargeHint":"最低入金額: 1 QDT","account.confirmRecharge":"リチャージを確認する","account.enterValidAmount":"有効なリチャージ金額を入力してください","account.rechargeSuccess":"リチャージ成功! {金額} QDT を入金しました","account.settings.menuMap.basic":"基本設定","account.settings.menuMap.security":"セキュリティ設定","account.settings.menuMap.notification":"新着メッセージ通知","account.settings.menuMap.moneyLog":"ファンドの詳細","account.moneyLog.empty":"ファンドの詳細はまだありません","account.moneyLog.total":"合計 {total} レコード","account.moneyLog.type.purchase":"購入インジケーター","account.moneyLog.type.recharge":"リチャージ","account.moneyLog.type.refund":"払い戻し","account.moneyLog.type.reward":"報酬","account.moneyLog.type.income":"指標収入","account.moneyLog.type.commission":"プラットフォーム手数料","wallet.balance":"QDTバランス","wallet.recharge":"リチャージ","wallet.withdraw":"現金を引き出す","wallet.filter":"フィルター","wallet.reset":"リセット","wallet.totalRecharge":"累積リチャージ","wallet.totalWithdraw":"累積引き出し額","wallet.totalIncome":"累計収入","wallet.records":"取引記録と資金の詳細","wallet.tradingRecords":"取引履歴","wallet.moneyLog":"ファンドの詳細","wallet.rechargeTip":"WeChat または Alipay を使用して、以下の QR コードをスキャンしてチャージしてください。","wallet.qrCodePlaceholder":"QR コード プレースホルダー (エミュレーション)","wallet.rechargeAmount":"チャージ金額","wallet.enterAmount":"チャージ金額を入力してください","wallet.rechargeHint":"最低入金額: 1 QDT","wallet.confirmRecharge":"リチャージを確認する","wallet.enterValidAmount":"有効なリチャージ金額を入力してください","wallet.rechargeSuccess":"リチャージ成功! {金額} QDT を入金しました","wallet.rechargeFailed":"再充電に失敗しました","wallet.withdrawTip":"出金金額と出金アドレスを入力してください","wallet.withdrawAmount":"出金額","wallet.enterWithdrawAmount":"出金額を入力してください","wallet.withdrawHint":"最低出金額: 1 QDT","wallet.withdrawAddress":"出金アドレス (オプション)","wallet.enterWithdrawAddress":"出金アドレスを入力してください","wallet.confirmWithdraw":"出金の確認","wallet.enterValidWithdrawAmount":"有効な出金額を入力してください","wallet.insufficientBalance":"残高不足","wallet.withdrawSuccess":"引き出し成功! {金額} QDT を引き出しました","wallet.withdrawFailed":"出金に失敗しました","wallet.noTradingRecords":"まだ取引記録がありません","wallet.noMoneyLog":"ファンドの詳細はまだありません","wallet.loadTradingRecordsFailed":"トランザクションレコードのロードに失敗しました","wallet.loadMoneyLogFailed":"ファンドの詳細をロードできませんでした","wallet.moneyLogTotal":"合計 {total} レコード","wallet.moneyLogTypeTitle":"タイプ","wallet.moneyLogType.all":"全種類","wallet.table.time":"時間","wallet.table.type":"タイプ","wallet.table.price":"価格","wallet.table.amount":"数量","wallet.table.money":"金額","wallet.table.balance":"バランス","wallet.table.memo":"備考","wallet.table.value":"値","wallet.table.profit":"損益","wallet.table.commission":"手数料","wallet.table.total":"合計 {total} レコード","wallet.tradeType.buy":"買う","wallet.tradeType.sell":"売る","wallet.tradeType.liquidation":"強制清算","wallet.tradeType.openLong":"長く開く","wallet.tradeType.addLong":"ガドット","wallet.tradeType.closeLong":"ピンドゥオ","wallet.tradeType.closeLongStop":"ストップロスとロング","wallet.tradeType.closeLongProfit":"利益を得てさらに平準化する","wallet.tradeType.openShort":"オープンショート","wallet.tradeType.addShort":"短く追加する","wallet.tradeType.closeShort":"空の","wallet.tradeType.closeShortStop":"ストップロス","wallet.tradeType.closeShortProfit":"利益を確定して空売りを終了する","wallet.moneyLogType.purchase":"購入インジケーター","wallet.moneyLogType.recharge":"リチャージ","wallet.moneyLogType.withdraw":"現金を引き出す","wallet.moneyLogType.refund":"払い戻し","wallet.moneyLogType.reward":"報酬","wallet.moneyLogType.income":"収入","wallet.moneyLogType.commission":"手数料","wallet.web3Address.required":"最初に Web3 ウォレットのアドレスを入力してください","wallet.web3Address.requiredDescription":"リチャージする前に、リチャージを受け取るために Web3 ウォレット アドレスをバインドする必要があります。","wallet.web3Address.placeholder":"Web3 ウォレットのアドレスを入力してください (0x で始まる)","wallet.web3Address.save":"ウォレットアドレスを保存する","wallet.web3Address.saveSuccess":"ウォレットアドレスが正常に保存されました","wallet.web3Address.saveFailed":"ウォレットアドレスの保存に失敗しました","wallet.web3Address.invalidFormat":"有効な Web3 ウォレット アドレスを入力してください (イーサリアム形式: 0x で始まる 42 文字、または TRC20 形式: T で始まる 34 文字)","wallet.selectCoin":"通貨を選択してください","wallet.selectChain":"選択チェーン","wallet.chain.eth":"イーサリアム(ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"BSC","wallet.targetQdtAmount":"引き換えたいQDTの量(オプション)","wallet.targetQdtAmount.placeholder":"引き換えたい QDT の数量、現在の QDT 価格を入力してください: {price} USDT","wallet.targetQdtAmount.requiredUsdt":"リチャージが必要: {amount} USDT","wallet.rechargeAddress":"リチャージアドレス","wallet.copyAddress":"コピー","wallet.copySuccess":"コピー成功!","wallet.copyFailed":"コピーに失敗しました。手動でコピーしてください","wallet.rechargeAddressHint":"このアドレスに {coin} を入金するには、必ず {chain} を使用してください。","wallet.qdtPrice.loading":"読み込み中...","wallet.rechargeTip.new":"通貨とチェーンを選択し、下の QR コードをスキャンしてリチャージしてください","wallet.exchangeRate":"1 QDT ≈ {レート} USDT","wallet.withdrawableAmount":"利用可能な現金の量","wallet.totalBalance":"合計残高","wallet.insufficientWithdrawable":"引き出すことができる現金の量が不足しています。現在出金できる金額は次のとおりです: {amount} QDT","wallet.withdrawAddressRequired":"出金アドレスを入力してください","wallet.withdrawAddressHint":"アドレスが正しいことを確認してください。退会後は取り消すことはできません。","wallet.withdrawSubmitSuccess":"出金申請が正常に送信されました。審査をお待ちください","menu.footer.contactUs":"お問い合わせ","menu.footer.getSupport":"サポートを受ける","menu.footer.socialAccounts":"ソーシャルアカウント","menu.footer.userAgreement":"ユーザー同意書","menu.footer.privacyPolicy":"プライバシーポリシー","menu.footer.support":"サポート","menu.footer.featureRequest":"機能リクエスト","menu.footer.email":"電子メール","menu.footer.liveChat":"24時間年中無休のライブチャット","dashboard.analysis.title":"多次元分析","dashboard.analysis.subtitle":"AIを活用した総合財務分析プラットフォーム","dashboard.analysis.selectSymbol":"基礎となるコードを選択または入力します","dashboard.analysis.selectModel":"モデルを選択してください","dashboard.analysis.startAnalysis":"分析を開始する","dashboard.analysis.history":"歴史","dashboard.analysis.tab.overview":"総合的な分析","dashboard.analysis.tab.fundamental":"基本","dashboard.analysis.tab.technical":"テクノロジー","dashboard.analysis.tab.news":"ニュース","dashboard.analysis.tab.sentiment":"感情","dashboard.analysis.tab.risk":"リスク","dashboard.analysis.tab.debate":"長短の議論","dashboard.analysis.tab.decision":"最終決定","dashboard.analysis.empty.selectSymbol":"分析を開始するターゲットを選択してください","dashboard.analysis.empty.selectSymbolDesc":"独自に選択した銘柄リストから選択するか、基礎となるコードを入力して多次元 AI 分析レポートを取得します","dashboard.analysis.empty.startAnalysis":"「分析開始」ボタンをクリックすると、多次元分析が実行されます。","dashboard.analysis.empty.startAnalysisDesc":"ファンダメンタルズ、テクノロジー、ニュース、センチメント、リスクなどの多次元から総合的な分析を提供します。","dashboard.analysis.empty.noData":"現在、{type} の分析データはありません。最初に包括的な分析を行ってください。","dashboard.analysis.empty.noWatchlist":"現在、自主選定銘柄はありません","dashboard.analysis.empty.noHistory":"まだ履歴がありません","dashboard.analysis.empty.watchlistHint":"現在、独自に選択した銘柄はありません。まずご確認ください。","dashboard.analysis.empty.noDebateData":"議論のデータはまだありません","dashboard.analysis.empty.noDecisionData":"決定データはまだありません","dashboard.analysis.empty.selectAgent":"分析結果を表示するにはエージェントを選択してください","dashboard.analysis.loading.analyzing":"分析中です、お待ちください...","dashboard.analysis.loading.fundamental":"基本データを分析中...","dashboard.analysis.loading.technical":"テクニカル指標を分析中...","dashboard.analysis.loading.news":"ニュースデータを分析中...","dashboard.analysis.loading.sentiment":"市場センチメントを分析中...","dashboard.analysis.loading.risk":"リスクを評価中...","dashboard.analysis.loading.debate":"長短の議論は続いています...","dashboard.analysis.loading.decision":"最終決定を生成中...","dashboard.analysis.score.overall":"総合評価","dashboard.analysis.score.recommendation":"投資アドバイス","dashboard.analysis.score.confidence":"自信","dashboard.analysis.dimension.fundamental":"基本","dashboard.analysis.dimension.technical":"テクノロジー","dashboard.analysis.dimension.news":"ニュース","dashboard.analysis.dimension.sentiment":"感情","dashboard.analysis.dimension.risk":"リスク","dashboard.analysis.card.dimensionScores":"各次元の評価","dashboard.analysis.card.overviewReport":"総合分析レポート","dashboard.analysis.card.financialMetrics":"財務指標","dashboard.analysis.card.fundamentalReport":"ファンダメンタルズ分析レポート","dashboard.analysis.card.technicalIndicators":"テクニカル指標","dashboard.analysis.card.technicalReport":"テクニカル分析レポート","dashboard.analysis.card.newsList":"関連ニュース","dashboard.analysis.card.newsReport":"ニュース分析レポート","dashboard.analysis.card.sentimentIndicators":"感情指標","dashboard.analysis.card.sentimentReport":"センチメント分析レポート","dashboard.analysis.card.riskMetrics":"リスク指標","dashboard.analysis.card.riskReport":"リスク評価レポート","dashboard.analysis.card.bullView":"強気の見方(強気)","dashboard.analysis.card.bearView":"弱気の見方(ベア)","dashboard.analysis.card.researchConclusion":"研究者の結論","dashboard.analysis.card.traderPlan":"トレーダープラン","dashboard.analysis.card.riskDebate":"リスク委員会の議論","dashboard.analysis.card.finalDecision":"最終決定","dashboard.analysis.card.tradePlanDetail":"取引プランの詳細","dashboard.analysis.tradingPlan.entry_price":"入場料","dashboard.analysis.tradingPlan.position_size":"ポジションサイズ","dashboard.analysis.tradingPlan.stop_loss":"ストップロス","dashboard.analysis.tradingPlan.take_profit":"利益確定","dashboard.analysis.label.confidence":"自信","dashboard.analysis.label.keyPoints":"コアポイント","dashboard.analysis.label.riskWarning":"リスク警告","dashboard.analysis.risk.risky":"危険な","dashboard.analysis.risk.neutral":"中立的な視点(ニュートラル)","dashboard.analysis.risk.safe":"保守的な見解(安全)","dashboard.analysis.risk.conclusion":"結論","dashboard.analysis.feature.fundamental":"ファンダメンタルズ分析","dashboard.analysis.feature.technical":"テクニカル分析","dashboard.analysis.feature.news":"ニュース分析","dashboard.analysis.feature.sentiment":"感情分析","dashboard.analysis.feature.risk":"リスク評価","dashboard.analysis.watchlist.title":"私の銘柄選択","dashboard.analysis.watchlist.add":"追加する","dashboard.analysis.watchlist.addStock":"在庫を追加する","dashboard.analysis.modal.addStock.title":"オプションのストックを追加する","dashboard.analysis.modal.addStock.confirm":"OK","dashboard.analysis.modal.addStock.cancel":"キャンセル","dashboard.analysis.modal.addStock.market":"市場タイプ","dashboard.analysis.modal.addStock.marketPlaceholder":"マーケットを選択してください","dashboard.analysis.modal.addStock.marketRequired":"マーケットタイプを選択してください","dashboard.analysis.modal.addStock.symbol":"証券コード","dashboard.analysis.modal.addStock.symbolPlaceholder":"例: AAPL、TSLA、GOOGL、000001、BTC","dashboard.analysis.modal.addStock.symbolRequired":"証券コードを入力してください","dashboard.analysis.modal.addStock.searchPlaceholder":"検索対象のコードまたは名前","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"基礎となるコードを検索または入力します (例: AAPL、BTC/USDT、EUR/USD)","dashboard.analysis.modal.addStock.searchOrInputHint":"データベース内のオブジェクトの検索、またはコードの直接入力をサポート (システムが自動的に名前を取得します)","dashboard.analysis.modal.addStock.search":"検索","dashboard.analysis.modal.addStock.searchResults":"検索結果","dashboard.analysis.modal.addStock.hotSymbols":"人気のターゲット","dashboard.analysis.modal.addStock.noHotSymbols":"人気のあるターゲットはまだありません","dashboard.analysis.modal.addStock.selectedSymbol":"選択済み","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"最初にターゲットを選択してください","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"ターゲットを選択するか、最初にターゲット コードを入力してください","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"ターゲットコードを入力してください","dashboard.analysis.modal.addStock.pleaseSelectMarket":"最初にマーケットタイプを選択してください","dashboard.analysis.modal.addStock.searchFailed":"検索に失敗しました。後でもう一度お試しください","dashboard.analysis.modal.addStock.noSearchResults":"一致するターゲットが見つかりません","dashboard.analysis.modal.addStock.willAutoFetchName":"システムが自動的に名前を取得します","dashboard.analysis.modal.addStock.addDirectly":"直接追加","dashboard.analysis.modal.addStock.nameWillBeFetched":"名前は追加時に自動的に取得されます","dashboard.analysis.market.USStock":"米国株","dashboard.analysis.market.Crypto":"暗号通貨","dashboard.analysis.market.Forex":"外国為替","dashboard.analysis.market.Futures":"先物","dashboard.analysis.modal.history.title":"過去の分析記録","dashboard.analysis.modal.history.viewResult":"結果を見る","dashboard.analysis.modal.history.completeTime":"完了時間","dashboard.analysis.modal.history.error":"エラー","dashboard.analysis.status.pending":"保留中","dashboard.analysis.status.processing":"処理中","dashboard.analysis.status.completed":"完了","dashboard.analysis.status.failed":"失敗しました","dashboard.analysis.message.selectSymbol":"最初にターゲットを選択してください","dashboard.analysis.message.taskCreated":"分析タスクが作成され、バックグラウンドで実行されています...","dashboard.analysis.message.analysisComplete":"分析完了","dashboard.analysis.message.analysisCompleteCache":"分析完了(キャッシュされたデータを使用)","dashboard.analysis.message.analysisFailed":"分析に失敗しました。後でもう一度お試しください。","dashboard.analysis.message.addStockSuccess":"正常に追加されました","dashboard.analysis.message.addStockFailed":"追加に失敗しました","dashboard.analysis.message.removeStockSuccess":"正常に削除されました","dashboard.analysis.message.removeStockFailed":"削除に失敗しました","dashboard.analysis.message.resumingAnalysis":"分析タスクを再開しています...","dashboard.analysis.message.deleteSuccess":"正常に削除されました","dashboard.analysis.message.deleteFailed":"削除に失敗しました","dashboard.analysis.modal.history.delete":"削除","dashboard.analysis.modal.history.deleteConfirm":"この分析記録を削除してもよろしいですか?","dashboard.analysis.test":"ショップ番号 {no}、公庄路","dashboard.analysis.introduce":"インジケーターの説明","dashboard.analysis.total-sales":"総売上高","dashboard.analysis.day-sales":"平均日販¥","dashboard.analysis.visits":"訪問","dashboard.analysis.visits-trend":"トラフィックの傾向","dashboard.analysis.visits-ranking":"来店ランキング","dashboard.analysis.day-visits":"毎日の訪問","dashboard.analysis.week":"毎週前年比","dashboard.analysis.day":"前年比","dashboard.analysis.payments":"支払い回数","dashboard.analysis.conversion-rate":"コンバージョン率","dashboard.analysis.operational-effect":"運営活動への影響","dashboard.analysis.sales-trend":"販売動向","dashboard.analysis.sales-ranking":"店舗売上ランキング","dashboard.analysis.all-year":"一年中","dashboard.analysis.all-month":"今月","dashboard.analysis.all-week":"今週","dashboard.analysis.all-day":"今日","dashboard.analysis.search-users":"検索ユーザー数","dashboard.analysis.per-capita-search":"一人当たりの検索数","dashboard.analysis.online-top-search":"オンラインで人気の検索","dashboard.analysis.the-proportion-of-sales":"売上カテゴリー比率","dashboard.analysis.dropdown-option-one":"作戦1","dashboard.analysis.dropdown-option-two":"操作 2","dashboard.analysis.channel.all":"すべてのチャンネル","dashboard.analysis.channel.online":"オンライン","dashboard.analysis.channel.stores":"店","dashboard.analysis.sales":"販売","dashboard.analysis.traffic":"乗客の流れ","dashboard.analysis.table.rank":"ランキング","dashboard.analysis.table.search-keyword":"検索キーワード","dashboard.analysis.table.users":"ユーザー数","dashboard.analysis.table.weekly-range":"毎週の増加","dashboard.indicator.selectSymbol":"基礎となるコードを選択または入力します","dashboard.indicator.emptyWatchlistHint":"現在、独自に選択した銘柄はありません。最初に追加してください。","dashboard.indicator.hint.selectSymbol":"分析を開始するにはターゲットを選択してください","dashboard.indicator.hint.selectSymbolDesc":"K ライン チャートとテクニカル指標を表示するには、上の検索ボックスに銘柄コードを選択または入力します。","dashboard.indicator.retry":"もう一度試してください","dashboard.indicator.panel.title":"テクニカル指標","dashboard.indicator.panel.realtimeOn":"リアルタイム更新をオフにする","dashboard.indicator.panel.realtimeOff":"リアルタイム更新を有効にする","dashboard.indicator.panel.themeLight":"ダークテーマに切り替える","dashboard.indicator.panel.themeDark":"ライトテーマに切り替える","dashboard.indicator.section.enabled":"有効","dashboard.indicator.section.added":"私が追加したインジケーター","dashboard.indicator.section.custom":"自分で作成したインジケーター","dashboard.indicator.section.bought":"購入したインジケーター","dashboard.indicator.section.myCreated":"私が作成したインジケーター","dashboard.indicator.empty":"まだインジケーターがありません。最初にインジケーターを追加または作成してください","dashboard.indicator.buy":"購入インジケーター","dashboard.indicator.action.start":"始める","dashboard.indicator.action.stop":"閉じる","dashboard.indicator.action.edit":"編集","dashboard.indicator.action.delete":"削除","dashboard.indicator.action.backtest":"バックテスト","dashboard.indicator.status.normal":"普通の","dashboard.indicator.status.normalPermanent":"通常(永続的に有効)","dashboard.indicator.status.expired":"期限切れ","dashboard.indicator.expiry.permanent":"永久に有効","dashboard.indicator.expiry.noExpiry":"有効期限なし","dashboard.indicator.expiry.expired":"期限切れ: {日付}","dashboard.indicator.expiry.expiresOn":"有効期限: {日付}","dashboard.indicator.delete.confirmTitle":"削除の確認","dashboard.indicator.delete.confirmContent":"インジケーター「{name}」を削除してもよろしいですか?この操作は元に戻すことができません。","dashboard.indicator.delete.confirmOk":"削除","dashboard.indicator.delete.confirmCancel":"キャンセル","dashboard.indicator.delete.success":"正常に削除されました","dashboard.indicator.delete.failed":"削除に失敗しました","dashboard.indicator.save.success":"正常に保存されました","dashboard.indicator.save.failed":"保存に失敗しました","dashboard.indicator.error.loadWatchlistFailed":"オプションのストックをロードできませんでした","dashboard.indicator.error.chartNotReady":"チャートコンポーネントは初期化されていません。最初にターゲットを選択し、チャートがロードされるまで待ってください。","dashboard.indicator.error.chartMethodNotReady":"グラフ コンポーネント メソッドの準備ができていません。後でもう一度お試しください。","dashboard.indicator.error.chartExecuteNotReady":"チャートコンポーネントの実行メソッドの準備ができていません。後でもう一度試してください。","dashboard.indicator.error.parseFailed":"Pythonコードを解析できません","dashboard.indicator.error.parseFailedCheck":"Python コードを解析できません。コード形式を確認してください。","dashboard.indicator.error.addIndicatorFailed":"インジケーターの追加に失敗しました","dashboard.indicator.error.runIndicatorFailed":"インジケーターの実行に失敗しました","dashboard.indicator.error.pleaseLogin":"まずログインしてください","dashboard.indicator.error.loadDataFailed":"データのロードに失敗しました","dashboard.indicator.error.loadDataFailedDesc":"ネットワーク接続を確認してください","dashboard.indicator.error.pythonEngineFailed":"Python エンジンのロードに失敗したため、インジケーター機能が使用できない可能性があります。","dashboard.indicator.error.chartInitFailed":"チャートの初期化に失敗しました","dashboard.indicator.warning.enterCode":"最初にインジケーターコードを入力してください","dashboard.indicator.warning.pyodideLoadFailed":"Python エンジンのロードに失敗しました","dashboard.indicator.warning.pyodideLoadFailedDesc":"この機能は、現在の地域またはネットワーク環境では利用できません","dashboard.indicator.warning.chartNotInitialized":"グラフが初期化されていないため、線描画ツールが使用できません。","dashboard.indicator.success.runIndicator":"インジケーターは正常に実行されます","dashboard.indicator.success.clearDrawings":"線画をすべてクリアしました","dashboard.indicator.sma":"SMA(移動平均結合)","dashboard.indicator.ema":"EMA (指数移動平均結合)","dashboard.indicator.rsi":"RSI (相対強度)","dashboard.indicator.macd":"MACD","dashboard.indicator.bb":"ボリンジャーバンド","dashboard.indicator.atr":"ATR (平均トゥルーレンジ)","dashboard.indicator.cci":"CCI (商品チャネル指数)","dashboard.indicator.williams":"ウィリアムズ %R (ウィリアムズ指標)","dashboard.indicator.mfi":"MFI(マネーフローインデックス)","dashboard.indicator.adx":"ADX(平均トレンド指数)","dashboard.indicator.obv":"OBV(エネルギー波)","dashboard.indicator.adosc":"ADOSC (アキュムレート/ディスパッチオシレーター)","dashboard.indicator.ad":"AD(蓄電・配電線)","dashboard.indicator.kdj":"KDJ (確率的指標)","dashboard.indicator.signal.buy":"買う","dashboard.indicator.signal.sell":"売る","dashboard.indicator.signal.supertrendBuy":"スーパートレンド購入","dashboard.indicator.signal.supertrendSell":"スーパートレンドセル","dashboard.indicator.chart.kline":"Kライン","dashboard.indicator.chart.volume":"ボリューム","dashboard.indicator.chart.uptrend":"上昇傾向","dashboard.indicator.chart.downtrend":"下降傾向","dashboard.indicator.tooltip.time":"時間","dashboard.indicator.tooltip.open":"開く","dashboard.indicator.tooltip.close":"受け取る","dashboard.indicator.tooltip.high":"高い","dashboard.indicator.tooltip.low":"低い","dashboard.indicator.tooltip.volume":"ボリューム","dashboard.indicator.drawing.line":"線分","dashboard.indicator.drawing.horizontalLine":"水平線","dashboard.indicator.drawing.verticalLine":"縦線","dashboard.indicator.drawing.ray":"光線","dashboard.indicator.drawing.straightLine":"直線","dashboard.indicator.drawing.parallelLine":"平行線","dashboard.indicator.drawing.priceLine":"価格ライン","dashboard.indicator.drawing.priceChannel":"価格チャネル","dashboard.indicator.drawing.fibonacciLine":"フィボナッチライン","dashboard.indicator.drawing.measure":"測定","dashboard.indicator.drawing.clearAll":"線画をすべてクリアする","dashboard.indicator.market.USStock":"米国株","dashboard.indicator.market.Crypto":"暗号通貨","dashboard.indicator.market.Forex":"外国為替","dashboard.indicator.market.Futures":"先物","dashboard.indicator.create":"インジケーターの作成","dashboard.indicator.editor.title":"インジケーターの作成/編集","dashboard.indicator.editor.name":"インジケーター名","dashboard.indicator.editor.nameRequired":"インジケーター名を入力してください","dashboard.indicator.editor.namePlaceholder":"インジケーター名を入力してください","dashboard.indicator.editor.description":"インジケーターの説明","dashboard.indicator.editor.descriptionPlaceholder":"インジケーターの説明を入力してください (オプション)","dashboard.indicator.editor.code":"Pythonコード","dashboard.indicator.editor.codeRequired":"インジケーターコードを入力してください","dashboard.indicator.editor.codePlaceholder":"Python コードを入力してください","dashboard.indicator.editor.run":"走る","dashboard.indicator.editor.runHint":"実行ボタンをクリックして、K ライン チャート上のインジケーターの効果をプレビューします。","dashboard.indicator.editor.guide":"開発ガイド","dashboard.indicator.editor.guideTitle":"Python インジケーター開発ガイド","dashboard.indicator.editor.save":"保存する","dashboard.indicator.editor.cancel":"キャンセル","dashboard.indicator.editor.unnamed":"名前のないインジケーター","dashboard.indicator.editor.publishToCommunity":"コミュニティに投稿する","dashboard.indicator.editor.publishToCommunityHint":"公開されると、他のユーザーがコミュニティでインジケーターを表示して使用できるようになります","dashboard.indicator.editor.indicatorType":"インジケーターの種類","dashboard.indicator.editor.indicatorTypeRequired":"インジケーターのタイプを選択してください","dashboard.indicator.editor.indicatorTypePlaceholder":"インジケーターのタイプを選択してください","dashboard.indicator.editor.previewImage":"プレビュー","dashboard.indicator.editor.uploadImage":"写真をアップロードする","dashboard.indicator.editor.previewImageHint":"推奨サイズ: 800x400、2MB 以下","dashboard.indicator.editor.pricing":"販売価格(QDT)","dashboard.indicator.editor.pricingType.free":"無料","dashboard.indicator.editor.pricingType.permanent":"永久的な","dashboard.indicator.editor.pricingType.monthly":"月々の支払い","dashboard.indicator.editor.price":"価格","dashboard.indicator.editor.priceRequired":"価格を入力してください","dashboard.indicator.editor.pricePlaceholder":"価格を入力してください","dashboard.indicator.editor.pricingHint":"無料のインジケーターの価格は 0 ですが、プラットフォームはインジケーターの使用量と賞賛率に基づいて報酬 (QDT) を与えます。","dashboard.indicator.editor.aiGenerate":"インテリジェントな世代","dashboard.indicator.editor.aiPromptPlaceholder":"あなたのアイデアを教えてください。Python インジケーター コードを生成します。","dashboard.indicator.editor.aiGenerateBtn":"AIが生成したコード","dashboard.indicator.editor.aiPromptRequired":"あなたの考えを入力してください","dashboard.indicator.editor.aiGenerateSuccess":"コード生成が成功しました","dashboard.indicator.editor.aiGenerateError":"コード生成に失敗しました。後でもう一度お試しください。","dashboard.indicator.editor.verifyCode":"コード検証","dashboard.indicator.editor.verifyCodeSuccess":"検証合格","dashboard.indicator.editor.verifyCodeFailed":"検証失敗","dashboard.indicator.editor.verifyCodeEmpty":"コードは空にできません","dashboard.indicator.backtest.title":"インジケーターのバックテスト","dashboard.indicator.backtest.config":"バックテストパラメータ","dashboard.indicator.backtest.startDate":"開始日","dashboard.indicator.backtest.endDate":"終了日","dashboard.indicator.backtest.selectStartDate":"開始日を選択してください","dashboard.indicator.backtest.selectEndDate":"終了日を選択してください","dashboard.indicator.backtest.startDateRequired":"開始日を選択してください","dashboard.indicator.backtest.endDateRequired":"終了日を選択してください","dashboard.indicator.backtest.initialCapital":"初期資本","dashboard.indicator.backtest.initialCapitalRequired":"初期資金を入力してください","dashboard.indicator.backtest.commission":"手数料","dashboard.indicator.backtest.leverage":"レバレッジ比率","dashboard.indicator.backtest.tradeDirection":"取引の方向性","dashboard.indicator.backtest.longOnly":"長く続けてください","dashboard.indicator.backtest.shortOnly":"短い","dashboard.indicator.backtest.both":"双方向","dashboard.indicator.backtest.run":"バックテストを開始する","dashboard.indicator.backtest.rerun":"もう一度バックテスト","dashboard.indicator.backtest.close":"閉じる","dashboard.indicator.backtest.running":"インジケーターのバックテストが進行中です...","dashboard.indicator.backtest.results":"バックテスト結果","dashboard.indicator.backtest.totalReturn":"トータルリターン","dashboard.indicator.backtest.annualReturn":"年収","dashboard.indicator.backtest.maxDrawdown":"最大ドローダウン","dashboard.indicator.backtest.sharpeRatio":"シャープレシオ","dashboard.indicator.backtest.winRate":"勝率","dashboard.indicator.backtest.profitFactor":"損益率","dashboard.indicator.backtest.totalTrades":"トランザクション数","dashboard.indicator.totalReturn":"トータルリターン","dashboard.indicator.annualReturn":"年換算収益率","dashboard.indicator.maxDrawdown":"最大ドローダウン","dashboard.indicator.sharpeRatio":"シャープレシオ","dashboard.indicator.winRate":"勝率","dashboard.indicator.profitFactor":"損益率","dashboard.indicator.totalTrades":"総トランザクション数","dashboard.indicator.backtest.totalCommission":"合計手数料","dashboard.indicator.backtest.equityCurve":"イールドカーブ","dashboard.indicator.backtest.strategy":"指標収入","dashboard.indicator.backtest.benchmark":"ベンチマークリターン","dashboard.indicator.backtest.tradeHistory":"取引履歴","dashboard.indicator.backtest.tradeTime":"時間","dashboard.indicator.backtest.tradeType":"タイプ","dashboard.indicator.backtest.buy":"買う","dashboard.indicator.backtest.sell":"売る","dashboard.indicator.backtest.liquidation":"清算","dashboard.indicator.backtest.openLong":"長く開く","dashboard.indicator.backtest.closeLong":"ピンドゥオ","dashboard.indicator.backtest.closeLongStop":"ロングに近い(ストップロス)","dashboard.indicator.backtest.closeLongProfit":"さらに閉じる(利益確定)","dashboard.indicator.backtest.addLong":"ロングポジションを追加","dashboard.indicator.backtest.openShort":"オープンショート","dashboard.indicator.backtest.closeShort":"空の","dashboard.indicator.backtest.closeShortStop":"クローズ(ストップロス)","dashboard.indicator.backtest.closeShortProfit":"クローズ(利益確定)","dashboard.indicator.backtest.addShort":"ショートポジションを追加","dashboard.indicator.backtest.price":"価格","dashboard.indicator.backtest.amount":"数量","dashboard.indicator.backtest.balance":"口座残高","dashboard.indicator.backtest.profit":"損益","dashboard.indicator.backtest.success":"バックテスト完了","dashboard.indicator.backtest.failed":"バックテストに失敗しました。後でもう一度お試しください","dashboard.indicator.backtest.noIndicatorCode":"このインジケーターにはバックテスト可能なコードはありません","dashboard.indicator.backtest.noSymbol":"最初に取引対象を選択してください","dashboard.indicator.backtest.dateRangeExceeded":"バックテストの時間範囲が制限を超えています: {timeframe} 期間は最大でも {maxRange} までバックテストできます","dashboard.indicator.backtest.dateRangeExceededDays":"Backtest range exceeds limit: {timeframe} max {maxRange} ({maxDays} days)","dashboard.indicator.backtest.metaLine":"Symbol: {symbol} | Market: {market} | Timeframe: {timeframe}","dashboard.indicator.backtest.savedRunId":"Backtest saved. Run ID: {id}","dashboard.indicator.backtest.prev":"Previous","dashboard.indicator.backtest.next":"Next","dashboard.indicator.backtest.steps.strategy.title":"Strategy","dashboard.indicator.backtest.steps.strategy.desc":"Position sizing & risk controls","dashboard.indicator.backtest.steps.trading.title":"Trading settings","dashboard.indicator.backtest.steps.trading.desc":"Time range, capital, fees, leverage","dashboard.indicator.backtest.steps.results.title":"Results","dashboard.indicator.backtest.steps.results.desc":"Backtest output","dashboard.indicator.backtest.panel.risk":"Risk management (SL/TP/Trailing)","dashboard.indicator.backtest.panel.scale":"Scale in / DCA (trend & mean-reversion)","dashboard.indicator.backtest.panel.reduce":"Reduce position (trend & adverse)","dashboard.indicator.backtest.panel.position":"Position sizing","dashboard.indicator.backtest.field.stopLossPct":"Stop Loss (%)","dashboard.indicator.backtest.field.takeProfitPct":"Take Profit (%)","dashboard.indicator.backtest.field.trailingEnabled":"Trailing stop / take profit","dashboard.indicator.backtest.field.trailingStopPct":"Trailing drawdown (%)","dashboard.indicator.backtest.field.trailingActivationPct":"Trailing activation (%)","dashboard.indicator.backtest.field.slippage":"Slippage (%)","dashboard.indicator.backtest.field.trendAddEnabled":"Trend-following scale-in","dashboard.indicator.backtest.field.dcaAddEnabled":"Mean-reversion DCA","dashboard.indicator.backtest.field.trendAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.dcaAddStepPct":"DCA trigger (%)","dashboard.indicator.backtest.field.trendAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.dcaAddSizePct":"DCA size (% of capital)","dashboard.indicator.backtest.field.trendAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.dcaAddMaxTimes":"Max DCA times","dashboard.indicator.backtest.field.trendReduceEnabled":"Trend reduce","dashboard.indicator.backtest.field.adverseReduceEnabled":"Adverse reduce","dashboard.indicator.backtest.field.trendReduceStepPct":"Trend trigger (%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"Adverse trigger (%)","dashboard.indicator.backtest.field.trendReduceSizePct":"Reduce size (% of position)","dashboard.indicator.backtest.field.adverseReduceSizePct":"Adverse reduce size (% of position)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"Max trend reduce times","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"Max adverse reduce times","dashboard.indicator.backtest.field.entryPct":"Entry size (% of capital)","dashboard.indicator.backtest.field.minOrderPct":"Min order size (% of capital) (optional)","dashboard.indicator.backtest.closeLongTrailing":"Close Long (Trailing)","dashboard.indicator.backtest.reduceLong":"Reduce Long","dashboard.indicator.backtest.closeShortTrailing":"Close Short (Trailing)","dashboard.indicator.backtest.reduceShort":"Reduce Short","dashboard.docs.title":"ドキュメントセンター","dashboard.docs.search.placeholder":"ドキュメントを検索...","dashboard.docs.category.all":"すべて","dashboard.docs.category.guide":"開発ガイド","dashboard.docs.category.api":"APIドキュメント","dashboard.docs.category.tutorial":"チュートリアル","dashboard.docs.category.faq":"よくある質問","dashboard.docs.featured.title":"推奨ドキュメント","dashboard.docs.featured.tag":"おすすめ","dashboard.docs.list.views":"閲覧する","dashboard.docs.list.author":"著者","dashboard.docs.list.empty":"まだ文書がありません","dashboard.docs.list.backToAll":"すべてのドキュメントに戻る","dashboard.docs.list.total":"合計 {count} 個のドキュメント","dashboard.docs.detail.back":"ドキュメントリストに戻る","dashboard.docs.detail.updatedAt":"に更新されました","dashboard.docs.detail.related":"関連資料","dashboard.docs.detail.notFound":"ドキュメントが存在しません","dashboard.docs.detail.error":"ドキュメントが存在しないか削除されています","dashboard.docs.search.result":"検索結果","dashboard.docs.search.keyword":"キーワード","community.filter.indicatorType":"インジケーターの種類","community.filter.all":"すべて","community.filter.other":"その他のオプション","community.filter.pricing":"価格タイプ","community.filter.allPricing":"すべての価格設定","community.filter.sortBy":"並べ替え順","community.filter.search":"検索","community.filter.searchPlaceholder":"検索メトリクス名","community.indicatorType.trend":"トレンドタイプ","community.indicatorType.momentum":"勢いタイプ","community.indicatorType.volatility":"ボラティリティ","community.indicatorType.volume":"ボリューム","community.indicatorType.custom":"カスタマイズ","community.pricing.free":"無料","community.pricing.paid":"支払う","community.sort.downloads":"ダウンロード","community.sort.rating":"評価","community.sort.newest":"最新リリース","community.pagination.total":"合計 {total} 個のインジケーター","community.noDescription":"まだ説明がありません","community.detail.type":"タイプ","community.detail.pricing":"価格設定","community.detail.rating":"評価","community.detail.downloads":"ダウンロード","community.detail.author":"著者","community.detail.description":"はじめに","community.detail.detailContent":"詳細な説明","community.detail.backtestStats":"バックテスト統計","community.action.purchase":"購入インジケーター","community.action.addToMyIndicators":"私のインジケーターに追加","community.action.favorite":"コレクション","community.action.unfavorite":"お気に入りをキャンセルする","community.action.buyNow":"今すぐ購入","community.action.renew":"リニューアル","community.purchase.price":"価格","community.purchase.permanent":"永久的な","community.purchase.monthly":"月","community.purchase.confirmBuy":"このインジケーター ({price} QDT) を購入することを確認しますか?","community.purchase.confirmRenew":"このインジケーター ({price} QDT/月) を更新することを確認しますか?","community.purchase.confirmFree":"この無料インジケーターを追加することを確認しますか?","community.purchase.confirmTitle":"アクションの確認","community.purchase.owned":"このインジケーターを購入しました (永久に有効です)","community.purchase.ownIndicator":"これはあなたが公開した指標です","community.purchase.expired":"サブスクリプションの有効期限が切れました","community.purchase.expiresOn":"有効期限: {日付}","community.tabs.detail":"インジケーターの詳細","community.tabs.backtest":"バックテストデータ","community.tabs.ratings":"ユーザーレビュー","community.rating.myRating":"私の評価","community.rating.stars":"{count} 個の星","community.rating.commentPlaceholder":"あなたの経験を共有してください...","community.rating.submit":"評価を送信する","community.rating.modify":"変更","community.rating.saveModify":"変更を保存する","community.rating.cancel":"キャンセル","community.rating.selectRating":"評価を選択してください","community.rating.success":"評価が成功しました","community.rating.modifySuccess":"レビューが正常に変更されました","community.rating.failed":"評価に失敗しました","community.rating.noRatings":"まだコメントはありません","community.backtest.note":"上記のデータは過去のバックテスト結果であり、参考のみを目的としており、将来の収益を示すものではありません。","community.backtest.noData":"バックテストデータはまだありません","community.backtest.uploadHint":"作者はまだバックテストデータをアップロードしていません","community.message.loadFailed":"インジケーターリストのロードに失敗しました","community.message.purchaseProcessing":"購入リクエストを処理しています...","community.message.downloadSuccess":"メトリックがメトリック リストに追加されました","community.message.favoriteSuccess":"収集に成功しました","community.message.unfavoriteSuccess":"収集を正常にキャンセルしました","community.message.operationSuccess":"操作は成功しました","community.message.operationFailed":"操作が失敗しました","community.banner.readOnly":"閲覧のみ","community.banner.loginHint":"ログインまたは登録が必要な場合は、ボタンをクリックして独立したページに移動し、CSRFの問題を回避してください","community.banner.jumpButton":"ログイン/登録へ","dashboard.totalEquity":"総資本","dashboard.totalPnL":"損益通算","dashboard.aiStrategies":"AI戦略","dashboard.indicatorStrategies":"指標戦略","dashboard.running":"ランニング","dashboard.pnlHistory":"過去の損益","dashboard.strategyPerformance":"戦略損益率","dashboard.recentTrades":"最近の取引","dashboard.currentPositions":"現在位置","dashboard.table.time":"時間","dashboard.table.strategy":"ポリシー名","dashboard.table.symbol":"ターゲット","dashboard.table.type":"タイプ","dashboard.table.side":"方向","dashboard.table.size":"建玉","dashboard.table.entryPrice":"平均始値","dashboard.table.price":"価格","dashboard.table.amount":"数量","dashboard.table.profit":"損益","dashboard.pendingOrders":"注文実行記録","dashboard.totalOrders":"合計 {total} 件","dashboard.viewError":"エラーを表示","dashboard.filled":"約定済み","dashboard.orderTable.time":"作成時間","dashboard.orderTable.strategy":"戦略","dashboard.orderTable.symbol":"取引ペア","dashboard.orderTable.signalType":"シグナルタイプ","dashboard.orderTable.amount":"数量","dashboard.orderTable.price":"約定価格","dashboard.orderTable.status":"ステータス","dashboard.orderTable.executedAt":"実行時間","dashboard.signalType.openLong":"ロング開始","dashboard.signalType.openShort":"ショート開始","dashboard.signalType.closeLong":"ロング決済","dashboard.signalType.closeShort":"ショート決済","dashboard.signalType.addLong":"ロング追加","dashboard.signalType.addShort":"ショート追加","dashboard.status.pending":"保留中","dashboard.status.processing":"処理中","dashboard.status.completed":"完了","dashboard.status.failed":"失敗","dashboard.status.cancelled":"キャンセル済み","dashboard.table.pnl":"未実現損益","form.basic-form.basic.title":"基本形","form.basic-form.basic.description":"フォーム ページは、ユーザーからの情報を収集または確認するために使用されます。 基本フォームは、データ項目が少ないフォーム シナリオでよく使用されます。","form.basic-form.title.label":"タイトル","form.basic-form.title.placeholder":"目標に名前を付けます","form.basic-form.title.required":"タイトルを入力してください","form.basic-form.date.label":"開始日と終了日","form.basic-form.placeholder.start":"開始日","form.basic-form.placeholder.end":"終了日","form.basic-form.date.required":"開始日と終了日を選択してください","form.basic-form.goal.label":"目標の説明","form.basic-form.goal.placeholder":"段階的な作業目標を入力してください","form.basic-form.goal.required":"目標の説明を入力してください","form.basic-form.standard.label":"測る","form.basic-form.standard.placeholder":"指標を入力してください","form.basic-form.standard.required":"指標を入力してください","form.basic-form.client.label":"お客様","form.basic-form.client.required":"あなたがサービスを提供しているクライアントについて説明してください","form.basic-form.label.tooltip":"対象サービス受信者","form.basic-form.client.placeholder":"あなたがサービスを提供している顧客、内部顧客について直接説明してください @名前/役職番号","form.basic-form.invites.label":"査読者を招待する","form.basic-form.invites.placeholder":"@名前/従業員番号を直接送信してください。最大 5 人まで招待できます","form.basic-form.weight.label":"重量","form.basic-form.weight.placeholder":"入力してください","form.basic-form.public.label":"ターゲットパブリック","form.basic-form.label.help":"顧客とレビュー担当者はデフォルトで共有されます","form.basic-form.radio.public":"公共の","form.basic-form.radio.partially-public":"部分的に公開","form.basic-form.radio.private":"プライベート","form.basic-form.publicUsers.placeholder":"にオープン","form.basic-form.option.A":"同僚1","form.basic-form.option.B":"同僚2","form.basic-form.option.C":"同僚3人","form.basic-form.email.required":"メールアドレスを入力してください!","form.basic-form.email.wrong-format":"メールアドレスの形式が間違っています!","form.basic-form.userName.required":"ユーザー名を入力してください!","form.basic-form.password.required":"パスワードを入力してください。","form.basic-form.password.twice":"2 回入力したパスワードが一致しません。","form.basic-form.strength.msg":"6文字以上を入力してください。 推測されやすいパスワードは使用しないでください。","form.basic-form.strength.strong":"強さ: 強い","form.basic-form.strength.medium":"強さ: 中","form.basic-form.strength.short":"強さ:短すぎる","form.basic-form.confirm-password.required":"パスワードを確認してください。","form.basic-form.phone-number.required":"携帯電話番号を入力してください!","form.basic-form.phone-number.wrong-format":"携帯電話番号の形式が間違っています。","form.basic-form.verification-code.required":"確認コードを入力してください。","form.basic-form.form.get-captcha":"確認コードを取得する","form.basic-form.captcha.second":"秒","form.basic-form.form.optional":"(オプション)","form.basic-form.form.submit":"送信する","form.basic-form.form.save":"保存する","form.basic-form.email.placeholder":"電子メール","form.basic-form.password.placeholder":"パスワードは 6 文字以上、大文字と小文字は区別されます","form.basic-form.confirm-password.placeholder":"パスワードの確認","form.basic-form.phone-number.placeholder":"携帯電話番号","form.basic-form.verification-code.placeholder":"認証コード","result.success.title":"送信成功","result.success.description":"投入結果ページは、一連の運用タスクの処理結果をフィードバックするために使用されます。単純な操作のみの場合は、メッセージ グローバル プロンプト フィードバックを使用します。このテキストエリアには簡単な補足説明を表示できます。 「ドキュメント」を表示する必要がある場合は、下の灰色の領域にさらに複雑なコンテンツを表示できます。","result.success.operate-title":"プロジェクト名","result.success.operate-id":"プロジェクトID","result.success.principal":"担当者","result.success.operate-time":"効果時間","result.success.step1-title":"プロジェクトの作成","result.success.step1-operator":"ク・リリ","result.success.step2-title":"部門の事前審査","result.success.step2-operator":"周猫猫","result.success.step2-extra":"緊急","result.success.step3-title":"財務レビュー","result.success.step4-title":"完了","result.success.btn-return":"リストに戻る","result.success.btn-project":"アイテムを見る","result.success.btn-print":"印刷する","result.fail.error.title":"送信に失敗しました","result.fail.error.description":"再送信する前に、次の情報を確認して変更してください。","result.fail.error.hint-title":"送信したコンテンツには次のエラーが含まれています。","result.fail.error.hint-text1":"あなたのアカウントは凍結されました","result.fail.error.hint-btn1":"すぐに解凍してください","result.fail.error.hint-text2":"あなたのアカウントはまだ申請する資格がありません","result.fail.error.hint-btn2":"今すぐアップグレードしてください","result.fail.error.btn-text":"修正に戻る","account.settings.menuMap.custom":"パーソナライゼーション","account.settings.menuMap.binding":"アカウントバインディング","account.settings.basic.avatar":"アバター","account.settings.basic.change-avatar":"アバターの変更","account.settings.basic.email":"電子メール","account.settings.basic.email-message":"メールアドレスを入力してください。","account.settings.basic.nickname":"ニックネーム","account.settings.basic.nickname-message":"ニックネームを入力してください!","account.settings.basic.profile":"プロフィール","account.settings.basic.profile-message":"あなたの個人プロフィールを入力してください!","account.settings.basic.profile-placeholder":"プロフィール","account.settings.basic.country":"国/地域","account.settings.basic.country-message":"あなたの国または地域を入力してください。","account.settings.basic.geographic":"県と市","account.settings.basic.geographic-message":"あなたの都道府県と市区町村を入力してください。","account.settings.basic.address":"住所","account.settings.basic.address-message":"住所を入力してください。","account.settings.basic.phone":"連絡先番号","account.settings.basic.phone-message":"連絡先番号を入力してください。","account.settings.basic.update":"基本情報を更新","account.settings.basic.update.success":"基本情報が正常に更新されました","account.settings.security.strong":"強い","account.settings.security.medium":"で","account.settings.security.weak":"弱い","account.settings.security.password":"アカウントのパスワード","account.settings.security.password-description":"現在のパスワードの強度:","account.settings.security.phone":"セキュリティ携帯電話","account.settings.security.phone-description":"すでにバインドされている携帯電話:","account.settings.security.question":"セキュリティの問題","account.settings.security.question-description":"秘密の質問は設定されていないため、アカウントのセキュリティを効果的に保護できます。","account.settings.security.email":"電子メールをバインドする","account.settings.security.email-description":"すでにバインドされている電子メール アドレス:","account.settings.security.mfa":"MFAデバイス","account.settings.security.mfa-description":"MFA デバイスはバインドされていません。バインド後、再度確認できます。","account.settings.security.modify":"変更","account.settings.security.set":"設定","account.settings.security.bind":"バインディング","account.settings.binding.taobao":"タオバオをバインドする","account.settings.binding.taobao-description":"タオバオアカウントは現在バインドされていません","account.settings.binding.alipay":"Alipayをバインドする","account.settings.binding.alipay-description":"Alipay アカウントは現在バインドされていません","account.settings.binding.dingding":"バインディングディントーク","account.settings.binding.dingding-description":"現在バインドされている DingTalk アカウントはありません","account.settings.binding.bind":"バインディング","account.settings.notification.password":"アカウントのパスワード","account.settings.notification.password-description":"他のユーザーからのメッセージは、サイトメッセージの形式で通知されます。","account.settings.notification.messages":"システムメッセージ","account.settings.notification.messages-description":"システム メッセージはサイト メッセージの形式で通知されます。","account.settings.notification.todo":"ToDoタスク","account.settings.notification.todo-description":"To Do タスクはサイト内メッセージの形式で通知されます","account.settings.settings.open":"開く","account.settings.settings.close":"閉じる","trading-assistant.title":"取引アシスタント","trading-assistant.strategyList":"戦略一覧","trading-assistant.createStrategy":"ポリシーの作成","trading-assistant.noStrategy":"まだ戦略はありません","trading-assistant.selectStrategy":"詳細を表示するには、左側から戦略を選択してください","trading-assistant.startStrategy":"戦略を立ち上げる","trading-assistant.stopStrategy":"戦略を停止する","trading-assistant.editStrategy":"編集戦略","trading-assistant.deleteStrategy":"ポリシーの削除","trading-assistant.status.running":"ランニング","trading-assistant.status.stopped":"停止しました","trading-assistant.status.error":"エラー","trading-assistant.strategyType.IndicatorStrategy":"テクニカル指標戦略","trading-assistant.strategyType.PromptBasedStrategy":"合言葉戦略","trading-assistant.strategyType.GridStrategy":"グリッド戦略","trading-assistant.tabs.tradingRecords":"取引履歴","trading-assistant.tabs.positions":"位置記録","trading-assistant.tabs.equityCurve":"資本曲線","trading-assistant.form.step1":"インジケーターの選択","trading-assistant.form.step2":"Exchangeの構成","trading-assistant.form.step3":"戦略パラメータ","trading-assistant.form.indicator":"インジケーターの選択","trading-assistant.form.indicatorHint":"購入または作成したテクニカル指標のみを選択できます","trading-assistant.form.qdtCostHints":"戦略を使用すると QDT が消費されます。アカウントに十分な QDT 残高があることを確認してください。","trading-assistant.form.indicatorDescription":"インジケーターの説明","trading-assistant.form.noDescription":"まだ説明がありません","trading-assistant.form.exchange":"交換を選択","trading-assistant.form.apiKey":"APIキー","trading-assistant.form.secretKey":"秘密鍵","trading-assistant.form.passphrase":"パスフレーズ","trading-assistant.form.testConnection":"テスト接続","trading-assistant.form.strategyName":"ポリシー名","trading-assistant.form.symbol":"取引ペア","trading-assistant.form.symbolHint":"現在、暗号通貨取引ペアのみがサポートされています","trading-assistant.form.initialCapital":"投資額","trading-assistant.form.marketType":"市場タイプ","trading-assistant.form.marketTypeFutures":"契約","trading-assistant.form.marketTypeSpot":"スポット","trading-assistant.form.marketTypeHint":"この契約は双方向の取引とレバレッジをサポートしますが、スポットはロングポジションのみをサポートし、レバレッジは 1 倍に固定されます。","trading-assistant.form.leverage":"複数を活用する","trading-assistant.form.leverageHint":"契約:1~125回、スポット:固定1回","trading-assistant.form.spotLeverageFixed":"現物取引のレバレッジは1倍に固定されます","trading-assistant.form.spotOnlyLongHint":"スポット取引はロングポジションのみをサポートします","trading-assistant.form.tradeDirection":"取引の方向性","trading-assistant.form.tradeDirectionLong":"ただ長いだけ","trading-assistant.form.tradeDirectionShort":"短いだけ","trading-assistant.form.tradeDirectionBoth":"双方向取引","trading-assistant.form.timeframe":"期間","trading-assistant.form.klinePeriod":"K線期間","trading-assistant.form.timeframe1m":"1分","trading-assistant.form.timeframe5m":"5分","trading-assistant.form.timeframe15m":"15分","trading-assistant.form.timeframe30m":"30分","trading-assistant.form.timeframe1H":"1時間","trading-assistant.form.timeframe4H":"4時間","trading-assistant.form.timeframe1D":"1日","trading-assistant.form.selectStrategyType":"戦略タイプを選択","trading-assistant.form.indicatorStrategy":"インジケーター戦略","trading-assistant.form.indicatorStrategyDesc":"テクニカルインジケーターに基づく自動取引戦略","trading-assistant.form.aiStrategy":"AI戦略","trading-assistant.form.aiStrategyDesc":"AIインテリジェント意思決定に基づく自動取引戦略","trading-assistant.form.enableAiFilter":"AIインテリジェント意思決定フィルターを有効化","trading-assistant.form.enableAiFilterHint":"有効にすると、インジケーターシグナルがAIによってフィルタリングされ、取引品質が向上します","trading-assistant.form.aiFilterPrompt":"カスタムプロンプト","trading-assistant.form.aiFilterPromptHint":"AIフィルタリングにカスタム指示を提供し、空白のままにするとシステムデフォルトを使用します","trading-assistant.validation.strategyTypeRequired":"戦略タイプを選択してください","trading-assistant.form.advancedSettings":"詳細設定","trading-assistant.form.orderMode":"オーダーモード","trading-assistant.form.orderModeMaker":"メーカー","trading-assistant.form.orderModeTaker":"市場価格(テイカー)","trading-assistant.form.orderModeHint":"未決注文モードでは指値注文が使用され、手数料が安くなります。市場価格モードはすぐに実行され、手数料が高くなります。","trading-assistant.form.makerWaitSec":"未決注文の待ち時間 (秒)","trading-assistant.form.makerWaitSecHint":"注文後の取引を待つ時間。キャンセルして、タイムアウト後に再試行してください。","trading-assistant.form.makerRetries":"未決注文の再試行回数","trading-assistant.form.makerRetriesHint":"未決注文が約定しない場合の最大リトライ回数","trading-assistant.form.fallbackToMarket":"未決注文は失敗し、市場価格は引き下げられます。","trading-assistant.form.fallbackToMarketHint":"開始/終了未決注文が完了していない場合、トランザクションを確実に完了させるために成行注文にダウングレードする必要があるかどうか。","trading-assistant.form.marginMode":"マージンモード","trading-assistant.form.marginModeCross":"倉庫がいっぱい","trading-assistant.form.marginModeIsolated":"孤立した位置","trading-assistant.form.stopLossPct":"ストップロス率(%)","trading-assistant.form.stopLossPctHint":"ストップロスのパーセンテージを設定します。0 はストップロスが有効になっていないことを意味します","trading-assistant.form.takeProfitPct":"テイクプロフィット率(%)","trading-assistant.form.takeProfitPctHint":"テイクプロフィットのパーセンテージを設定します。0 はテイクプロフィットを無効にすることを意味します","trading-assistant.form.signalMode":"信号モード","trading-assistant.form.signalModeConfirmed":"確認モード","trading-assistant.form.signalModeAggressive":"アグレッシブモード","trading-assistant.form.signalModeHint":"確認モード: 完了した K 行のみをチェックします。アグレッシブ モード: K ラインの形成もチェックします","trading-assistant.form.cancel":"キャンセル","trading-assistant.form.prev":"前のステップ","trading-assistant.form.next":"次のステップ","trading-assistant.form.confirmCreate":"作成の確認","trading-assistant.form.confirmEdit":"変更を確認する","trading-assistant.messages.createSuccess":"戦略が正常に作成されました","trading-assistant.messages.createFailed":"ポリシーの作成に失敗しました","trading-assistant.messages.updateSuccess":"ポリシーの更新が成功しました","trading-assistant.messages.updateFailed":"ポリシーの更新に失敗しました","trading-assistant.messages.deleteSuccess":"ポリシーの削除が成功しました","trading-assistant.messages.deleteFailed":"ポリシーの削除に失敗しました","trading-assistant.messages.startSuccess":"戦略は無事に開始されました","trading-assistant.messages.startFailed":"ポリシーの開始に失敗しました","trading-assistant.messages.stopSuccess":"戦略は正常に停止されました","trading-assistant.messages.stopFailed":"停止戦略は失敗しました","trading-assistant.messages.loadFailed":"ポリシーリストの取得に失敗しました","trading-assistant.messages.runningWarning":"戦略は実行されています。 戦略を変更する前に戦略を停止してください。","trading-assistant.messages.deleteConfirmWithName":"ポリシー「{name}」を削除してもよろしいですか?この操作は元に戻すことができません。","trading-assistant.messages.deleteConfirm":"このポリシーを削除してもよろしいですか?この操作は元に戻すことができません。","trading-assistant.messages.loadTradesFailed":"取引記録の取得に失敗しました","trading-assistant.messages.loadPositionsFailed":"位置レコードの取得に失敗しました","trading-assistant.messages.loadEquityFailed":"資本曲線の取得に失敗しました","trading-assistant.messages.loadIndicatorsFailed":"インジケーター リストの読み込みに失敗しました。後でもう一度お試しください。","trading-assistant.messages.spotLimitations":"スポット取引は自動的にロングのみ、レバレッジ1倍に設定されています","trading-assistant.messages.autoFillApiConfig":"取引所の過去の API 設定が自動的に入力されます","trading-assistant.placeholders.selectIndicator":"インジケーターを選択してください","trading-assistant.placeholders.selectExchange":"交換を選択してください","trading-assistant.placeholders.inputApiKey":"APIキーを入力してください","trading-assistant.placeholders.inputSecretKey":"秘密キーを入力してください","trading-assistant.placeholders.inputPassphrase":"パスフレーズを入力してください","trading-assistant.placeholders.inputStrategyName":"ポリシー名を入力してください","trading-assistant.placeholders.selectSymbol":"取引ペアを選択してください","trading-assistant.placeholders.selectTimeframe":"期間を選択してください","trading-assistant.placeholders.selectKlinePeriod":"K線期間を選択してください","trading-assistant.placeholders.inputAiFilterPrompt":"カスタムプロンプトを入力してください(オプション)","trading-assistant.validation.indicatorRequired":"インジケーターを選択してください","trading-assistant.validation.exchangeRequired":"交換を選択してください","trading-assistant.validation.apiKeyRequired":"APIキーを入力してください","trading-assistant.validation.secretKeyRequired":"秘密キーを入力してください","trading-assistant.validation.passphraseRequired":"パスフレーズを入力してください","trading-assistant.validation.exchangeConfigIncomplete":"完全な交換構成情報を入力してください","trading-assistant.validation.testConnectionRequired":"まず「テスト接続」ボタンをクリックし、接続が成功することを確認してください","trading-assistant.validation.testConnectionFailed":"接続テストに失敗しました。設定を確認して再度テストしてください","trading-assistant.validation.credentialRequired":"まず個人センターで取引所の認証情報を追加してテストしてください","trading-assistant.validation.strategyNameRequired":"ポリシー名を入力してください","trading-assistant.validation.symbolRequired":"取引ペアを選択してください","trading-assistant.validation.initialCapitalRequired":"投資額を入力してください","trading-assistant.validation.leverageRequired":"レバレッジ比率を入力してください","trading-assistant.table.time":"時間","trading-assistant.table.type":"タイプ","trading-assistant.table.price":"価格","trading-assistant.table.amount":"数量","trading-assistant.table.value":"金額","trading-assistant.table.commission":"手数料","trading-assistant.table.symbol":"取引ペア","trading-assistant.table.side":"方向","trading-assistant.table.size":"ポジション数量","trading-assistant.table.entryPrice":"オープン価格","trading-assistant.table.currentPrice":"現在の価格","trading-assistant.table.unrealizedPnl":"未実現損益","trading-assistant.table.pnlPercent":"損益率","trading-assistant.table.buy":"買う","trading-assistant.table.sell":"売る","trading-assistant.table.long":"長く続けてください","trading-assistant.table.short":"短い","trading-assistant.table.noPositions":"まだポジションがありません","trading-assistant.detail.title":"戦略の詳細","trading-assistant.detail.strategyName":"ポリシー名","trading-assistant.detail.strategyType":"戦略タイプ","trading-assistant.detail.status":"ステータス","trading-assistant.detail.tradingMode":"取引モデル","trading-assistant.detail.exchange":"交換","trading-assistant.detail.initialCapital":"初期資本","trading-assistant.detail.totalInvestment":"投資総額","trading-assistant.detail.currentEquity":"現在の純資産","trading-assistant.detail.totalPnl":"損益通算","trading-assistant.detail.indicatorName":"インジケーター名","trading-assistant.detail.maxLeverage":"最大レバレッジ","trading-assistant.detail.decideInterval":"決定間隔","trading-assistant.detail.symbols":"トランザクションオブジェクト","trading-assistant.detail.createdAt":"作成時間","trading-assistant.detail.updatedAt":"更新時間","trading-assistant.detail.llmConfig":"AIモデル構成","trading-assistant.detail.exchangeConfig":"Exchangeの構成","trading-assistant.detail.provider":"プロバイダー","trading-assistant.detail.modelId":"モデルID","trading-assistant.detail.close":"閉じる","trading-assistant.detail.loadFailed":"ポリシーの詳細を取得できませんでした","trading-assistant.equity.noData":"純資産データはまだありません","trading-assistant.equity.equity":"純資産","trading-assistant.exchange.tradingMode":"取引モデル","trading-assistant.exchange.virtual":"模擬取引","trading-assistant.exchange.live":"実際のトランザクション","trading-assistant.exchange.selectExchange":"交換を選択","trading-assistant.exchange.walletAddress":"ウォレットアドレス","trading-assistant.exchange.walletAddressPlaceholder":"ウォレットアドレスを入力してください(0xで始まる)","trading-assistant.exchange.privateKey":"秘密鍵","trading-assistant.exchange.privateKeyPlaceholder":"秘密キーを入力してください(64文字)","trading-assistant.exchange.testConnection":"テスト接続","trading-assistant.exchange.connectionSuccess":"接続成功","trading-assistant.exchange.connectionFailed":"接続に失敗しました","trading-assistant.exchange.testFailed":"接続テストに失敗しました","trading-assistant.exchange.fillComplete":"完全な交換構成情報を入力してください","trading-assistant.strategyTypeOptions.ai":"AI主導の戦略","trading-assistant.strategyTypeOptions.indicator":"テクニカル指標戦略","trading-assistant.strategyTypeOptions.aiDeveloping":"AIを活用した戦略機能は開発中ですのでご期待ください","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"AI主導の戦略機能は開発中です","trading-assistant.indicatorType.trend":"トレンド","trading-assistant.indicatorType.momentum":"勢い","trading-assistant.indicatorType.volatility":"変動","trading-assistant.indicatorType.volume":"ボリューム","trading-assistant.indicatorType.custom":"カスタマイズ","trading-assistant.exchangeNames":{okx:"OKX",binance:"バイナンス",hyperliquid:"超流動性",blockchaincom:"Blockchain.com",coinbaseexchange:"コインベース",gate:"Gate.io",mexc:"メキシコ",kraken:"クラーケン",bitfinex:"ビットフィネックス",bybit:"バイビット",kucoin:"クーコイン",huobi:"フォビ",bitget:"ビゲット",bitmex:"ビットメックス",deribit:"デリビット",phemex:"フェメックス",bitmart:"ビットマート",bitstamp:"ビットスタンプ",bittrex:"ビットレックス",poloniex:"ポロニエックス",gemini:"ジェミニ",cryptocom:"Crypto.com",bitflyer:"ビットフライヤー",upbit:"アップビット",bithumb:"ビサム",coinone:"コイノン",zb:"ZB",lbank:"Lバンク",bibox:"ビボックス",bigone:"ビッグワン",bitrue:"ビトゥルー",coinex:"CoinEx",digifinex:"デジフィネックス",ftx:"FTX",ftxus:"FTX米国",binanceus:"バイナンスUS",binancecoinm:"バイナンス COIN-M",binanceusdm:"バイナンスUSDⓈ-M",deepcoin:"ディープコイン"},"ai-trading-assistant.title":"AI取引アシスタント","ai-trading-assistant.strategyList":"戦略一覧","ai-trading-assistant.createStrategy":"ポリシーの作成","ai-trading-assistant.noStrategy":"まだ戦略はありません","ai-trading-assistant.selectStrategy":"詳細を表示するには、左側から戦略を選択してください","ai-trading-assistant.startStrategy":"戦略を立ち上げる","ai-trading-assistant.stopStrategy":"戦略を停止する","ai-trading-assistant.editStrategy":"編集戦略","ai-trading-assistant.deleteStrategy":"ポリシーの削除","ai-trading-assistant.status.running":"ランニング","ai-trading-assistant.status.stopped":"停止しました","ai-trading-assistant.status.error":"エラー","ai-trading-assistant.tabs.tradingRecords":"取引履歴","ai-trading-assistant.tabs.positions":"位置記録","ai-trading-assistant.tabs.aiDecisions":"AI判定記録","ai-trading-assistant.tabs.equityCurve":"資本曲線","ai-trading-assistant.form.createTitle":"AI取引戦略を作成する","ai-trading-assistant.form.editTitle":"AI取引戦略を編集する","ai-trading-assistant.form.strategyName":"ポリシー名","ai-trading-assistant.form.modelId":"AIモデル","ai-trading-assistant.form.modelIdHint":"API キーを設定せずにシステム OpenRouter サービスを使用する","ai-trading-assistant.form.decideInterval":"決定間隔","ai-trading-assistant.form.decideInterval5m":"5分","ai-trading-assistant.form.decideInterval10m":"10分","ai-trading-assistant.form.decideInterval30m":"30分","ai-trading-assistant.form.decideInterval1h":"1時間","ai-trading-assistant.form.decideInterval4h":"4時間","ai-trading-assistant.form.decideInterval1d":"1日","ai-trading-assistant.form.decideInterval1w":"1週間","ai-trading-assistant.form.decideIntervalHint":"AIが意思決定を行うまでの時間間隔","ai-trading-assistant.form.runPeriod":"実行サイクル","ai-trading-assistant.form.runPeriodHint":"戦略実行の開始時刻と終了時刻","ai-trading-assistant.form.startDate":"開始日","ai-trading-assistant.form.endDate":"終了日","ai-trading-assistant.form.qdtCostTitle":"QDT 控除の指示","ai-trading-assistant.form.qdtCostHint":"AI の決定ごとに {cost} QDT が差し引かれます。アカウントに十分な QDT 残高があることを確認してください。戦略の実行中、決定ごとに料金がリアルタイムで差し引かれます。","ai-trading-assistant.form.apiKey":"APIキー","ai-trading-assistant.form.exchange":"交換を選択","ai-trading-assistant.form.secretKey":"秘密鍵","ai-trading-assistant.form.passphrase":"パスフレーズ","ai-trading-assistant.form.testConnection":"テスト接続","ai-trading-assistant.form.symbol":"取引ペア","ai-trading-assistant.form.symbolHint":"取引する取引ペアを選択してください","ai-trading-assistant.form.initialCapital":"投資額(証拠金)","ai-trading-assistant.form.leverage":"複数を活用する","ai-trading-assistant.form.timeframe":"期間","ai-trading-assistant.form.timeframe1m":"1分","ai-trading-assistant.form.timeframe5m":"5分","ai-trading-assistant.form.timeframe15m":"15分","ai-trading-assistant.form.timeframe30m":"30分","ai-trading-assistant.form.timeframe1H":"1時間","ai-trading-assistant.form.timeframe4H":"4時間","ai-trading-assistant.form.timeframe1D":"1日","ai-trading-assistant.form.marketType":"市場タイプ","ai-trading-assistant.form.marketTypeFutures":"契約","ai-trading-assistant.form.marketTypeSpot":"スポット","ai-trading-assistant.form.totalPnl":"損益通算","ai-trading-assistant.form.customPrompt":"カスタムのプロンプト単語","ai-trading-assistant.form.customPromptHint":"オプション。 AI 取引戦略と意思決定ロジックをカスタマイズするために使用されます。","ai-trading-assistant.form.cancel":"キャンセル","ai-trading-assistant.form.prev":"前のステップ","ai-trading-assistant.form.next":"次のステップ","ai-trading-assistant.form.confirmCreate":"作成の確認","ai-trading-assistant.form.confirmEdit":"変更を確認する","ai-trading-assistant.messages.createSuccess":"戦略が正常に作成されました","ai-trading-assistant.messages.createFailed":"ポリシーの作成に失敗しました","ai-trading-assistant.messages.updateSuccess":"ポリシーの更新が成功しました","ai-trading-assistant.messages.updateFailed":"ポリシーの更新に失敗しました","ai-trading-assistant.messages.deleteSuccess":"ポリシーの削除が成功しました","ai-trading-assistant.messages.deleteFailed":"ポリシーの削除に失敗しました","ai-trading-assistant.messages.startSuccess":"戦略は無事に開始されました","ai-trading-assistant.messages.startFailed":"ポリシーの開始に失敗しました","ai-trading-assistant.messages.stopSuccess":"戦略は正常に停止されました","ai-trading-assistant.messages.stopFailed":"停止戦略は失敗しました","ai-trading-assistant.messages.loadFailed":"ポリシーリストの取得に失敗しました","ai-trading-assistant.messages.loadDecisionsFailed":"AI判定記録の取得に失敗しました","ai-trading-assistant.messages.deleteConfirm":"このポリシーを削除してもよろしいですか?この操作は元に戻すことができません。","ai-trading-assistant.placeholders.inputStrategyName":"ポリシー名を入力してください","ai-trading-assistant.placeholders.selectModelId":"AI モデルを選択してください","ai-trading-assistant.placeholders.selectDecideInterval":"決定間隔を選択してください","ai-trading-assistant.placeholders.startTime":"開始時間","ai-trading-assistant.placeholders.endTime":"終了時間","ai-trading-assistant.placeholders.inputApiKey":"APIキーを入力してください","ai-trading-assistant.placeholders.selectExchange":"交換を選択してください","ai-trading-assistant.placeholders.inputSecretKey":"秘密キーを入力してください","ai-trading-assistant.placeholders.inputPassphrase":"パスフレーズを入力してください","ai-trading-assistant.placeholders.selectSymbol":"BTC/USDT などの取引ペアを選択してください。","ai-trading-assistant.placeholders.selectTimeframe":"期間を選択してください","ai-trading-assistant.placeholders.inputCustomPrompt":"カスタムのプロンプト単語を入力してください (オプション)","ai-trading-assistant.validation.strategyNameRequired":"ポリシー名を入力してください","ai-trading-assistant.validation.modelIdRequired":"AI モデルを選択してください","ai-trading-assistant.validation.runPeriodRequired":"実行サイクルを選択してください","ai-trading-assistant.validation.apiKeyRequired":"APIキーを入力してください","ai-trading-assistant.validation.exchangeRequired":"交換を選択してください","ai-trading-assistant.validation.secretKeyRequired":"秘密キーを入力してください","ai-trading-assistant.validation.symbolRequired":"取引ペアを選択してください","ai-trading-assistant.validation.initialCapitalRequired":"投資額を入力してください","ai-trading-assistant.table.time":"時間","ai-trading-assistant.table.type":"タイプ","ai-trading-assistant.table.price":"価格","ai-trading-assistant.table.amount":"数量","ai-trading-assistant.table.value":"金額","ai-trading-assistant.table.symbol":"取引ペア","ai-trading-assistant.table.side":"方向","ai-trading-assistant.table.size":"ポジション数量","ai-trading-assistant.table.entryPrice":"オープン価格","ai-trading-assistant.table.currentPrice":"現在の価格","ai-trading-assistant.table.unrealizedPnl":"未実現損益","ai-trading-assistant.table.profit":"損益","ai-trading-assistant.table.openLong":"長く開く","ai-trading-assistant.table.closeLong":"ピンドゥオ","ai-trading-assistant.table.openShort":"オープンショート","ai-trading-assistant.table.closeShort":"空の","ai-trading-assistant.table.addLong":"ガドット","ai-trading-assistant.table.addShort":"短く追加する","ai-trading-assistant.table.closeShortProfit":"ショートポジションで利益確定","ai-trading-assistant.table.closeShortStop":"ストップロス","ai-trading-assistant.table.closeLongProfit":"長く停止して利益を得る","ai-trading-assistant.table.closeLongStop":"ストップロス","ai-trading-assistant.table.buy":"買う","ai-trading-assistant.table.sell":"売る","ai-trading-assistant.table.long":"長く続けてください","ai-trading-assistant.table.short":"短い","ai-trading-assistant.table.hold":"ホールド","ai-trading-assistant.table.reasoning":"分析理由","ai-trading-assistant.table.decisions":"意思決定","ai-trading-assistant.table.riskAssessment":"リスク評価","ai-trading-assistant.table.confidence":"自信","ai-trading-assistant.table.totalRecords":"合計 {total} レコード","ai-trading-assistant.table.noPositions":"まだポジションがありません","ai-trading-assistant.detail.title":"戦略の詳細","ai-trading-assistant.equity.noData":"純資産データはまだありません","ai-trading-assistant.equity.equity":"純資産","ai-trading-assistant.exchange.testFailed":"接続テストに失敗しました","ai-trading-assistant.exchange.connectionSuccess":"接続成功","ai-trading-assistant.exchange.connectionFailed":"接続に失敗しました","ai-trading-assistant.form.advancedSettings":"詳細設定","ai-trading-assistant.form.orderMode":"オーダーモード","ai-trading-assistant.form.orderModeMaker":"メーカー","ai-trading-assistant.form.orderModeTaker":"市場価格(テイカー)","ai-trading-assistant.form.orderModeHint":"未決注文モードでは指値注文が使用され、手数料が安くなります。市場価格モードはすぐに実行され、手数料が高くなります。","ai-trading-assistant.form.makerWaitSec":"未決注文の待ち時間 (秒)","ai-trading-assistant.form.makerWaitSecHint":"注文後の取引を待つ時間。キャンセルして、タイムアウト後に再試行してください。","ai-trading-assistant.form.makerRetries":"未決注文の再試行回数","ai-trading-assistant.form.makerRetriesHint":"未決注文が約定しない場合の最大リトライ回数","ai-trading-assistant.form.fallbackToMarket":"未決注文は失敗し、市場価格は引き下げられます。","ai-trading-assistant.form.fallbackToMarketHint":"開始/終了未決注文が完了していない場合、トランザクションを確実に完了させるために成行注文にダウングレードする必要があるかどうか。","ai-trading-assistant.form.marginMode":"マージンモード","ai-trading-assistant.form.marginModeCross":"倉庫がいっぱい","ai-trading-assistant.form.marginModeIsolated":"孤立した位置","ai-analysis.title":"クォンタムトレーディングエンジン","ai-analysis.system.online":"オンライン","ai-analysis.system.agents":"エージェント","ai-analysis.system.active":"アクティブな","ai-analysis.system.stage":"ステージ","ai-analysis.panel.roster":"エージェントラインナップ","ai-analysis.panel.thinking":"考え中...","ai-analysis.panel.done":"完了","ai-analysis.panel.standby":"スタンバイ","ai-analysis.input.title":"クォンタムトレーディングエンジン","ai-analysis.input.placeholder":"ターゲット資産を選択します (例: BTC/USDT)","ai-analysis.input.watchlist":"オプションストック","ai-analysis.input.start":"分析を開始する","ai-analysis.input.recent":"最近のタスク:","ai-analysis.vis.stage":"ステージ","ai-analysis.vis.processing":"処理中","ai-analysis.result.complete":"分析完了","ai-analysis.result.signal":"最終信号","ai-analysis.result.confidence":"自信:","ai-analysis.result.new":"新しい分析","ai-analysis.result.full":"レポート全体を表示","ai-analysis.logs.title":"システムログ","ai-analysis.modal.title":"機密報告書","ai-analysis.modal.fundamental":"ファンダメンタルズ分析","ai-analysis.modal.technical":"テクニカル分析","ai-analysis.modal.sentiment":"感情分析","ai-analysis.modal.risk":"リスク評価","ai-analysis.stage.idle":"スタンバイ","ai-analysis.stage.1":"フェーズ 1: 多次元分析","ai-analysis.stage.2":"フェーズ 2: 長短討論","ai-analysis.stage.3":"フェーズ 3: 戦略計画","ai-analysis.stage.4":"第 4 段階: リスク管理のレビュー","ai-analysis.stage.complete":"完了","ai-analysis.agent.investment_director":"投資ディレクター","ai-analysis.agent.role.investment_director":"包括的な分析と最終結論","ai-analysis.agent.market":"市場アナリスト","ai-analysis.agent.role.market":"テクノロジーと市場データ","ai-analysis.agent.fundamental":"ファンダメンタルズアナリスト","ai-analysis.agent.role.fundamental":"財務と評価","ai-analysis.agent.technical":"テクニカルアナリスト","ai-analysis.agent.role.technical":"テクニカル指標とチャート","ai-analysis.agent.news":"ニュースアナリスト","ai-analysis.agent.role.news":"グローバルニュースフィルター","ai-analysis.agent.sentiment":"センチメントアナリスト","ai-analysis.agent.role.sentiment":"社会的&感情的","ai-analysis.agent.risk":"リスクアナリスト","ai-analysis.agent.role.risk":"基本的なリスクチェック","ai-analysis.agent.bull":"強気な研究者","ai-analysis.agent.role.bull":"成長触媒の採掘","ai-analysis.agent.bear":"弱気な研究者","ai-analysis.agent.role.bear":"リスクと欠陥の掘り下げ","ai-analysis.agent.manager":"研究マネージャー","ai-analysis.agent.role.manager":"ディベートモデレーター","ai-analysis.agent.trader":"トレーダー","ai-analysis.agent.role.trader":"エグゼクティブ・ストラテジスト","ai-analysis.agent.risky":"活動家アナリスト","ai-analysis.agent.role.risky":"積極的な戦略","ai-analysis.agent.neutral":"バランスアナリスト","ai-analysis.agent.role.neutral":"バランス戦略","ai-analysis.agent.safe":"保守的なアナリスト","ai-analysis.agent.role.safe":"保守的な戦略","ai-analysis.agent.cro":"リスクコントロールマネージャー (CRO)","ai-analysis.agent.role.cro":"最終的な意思決定権限","ai-analysis.script.market":"主要な取引所から OHLCV データを取得しています...","ai-analysis.script.fundamental":"四半期財務報告書を取得しています...","ai-analysis.script.technical":"テクニカル指標とチャートパターンを分析しています...","ai-analysis.script.news":"世界的な金融ニュースを調べています...","ai-analysis.script.sentiment":"ソーシャルメディアのトレンドを分析中...","ai-analysis.script.risk":"過去のボラティリティを計算しています...","invite.inviteLink":"招待リンク","invite.copy":"リンクをコピー","invite.copySuccess":"コピー成功!","invite.copyFailed":"コピーに失敗しました。 手動でコピーしてください","invite.noInviteLink":"招待リンクが生成されませんでした","invite.totalInvites":"累積招待状","invite.totalReward":"累計報酬","invite.rules":"招待ルール","invite.rule1":"友達の登録に成功するたびに、報酬を受け取ります","invite.rule2":"招待された友達が最初のトランザクションを完了すると、追加の報酬を受け取ります","invite.rule3":"招待特典はアカウントに直接送信されます","invite.inviteList":"招待リスト","invite.tasks":"ミッションセンター","invite.inviteeName":"招待者","invite.inviteTime":"招待時間","invite.status":"ステータス","invite.reward":"報酬","invite.active":"アクティブな","invite.inactive":"アクティブ化されていません","invite.completed":"完了","invite.claimed":"受け取りました","invite.pending":"完成予定","invite.goToTask":"完了する","invite.claimReward":"報酬を請求する","invite.verify":"検証完了","invite.verifySuccess":"検証成功!タスクが完了しました","invite.verifyNotCompleted":"タスクはまだ完了していません。 最初にタスクを完了してください","invite.verifyFailed":"検証に失敗しました。後でもう一度お試しください","invite.claimSuccess":"{reward} QDT を正常に受け取りました!","invite.claimFailed":"収集に失敗しました。 後でもう一度お試しください","invite.totalRecords":"合計 {total} レコード","invite.task.twitter.title":"X(Twitter)にリツイート","invite.task.twitter.desc":"公式ツイートを X (Twitter) アカウントに共有します","invite.task.youtube.title":"YouTube チャンネルをフォローしてください","invite.task.youtube.desc":"公式 YouTube チャンネルを購読してフォローしてください","invite.task.telegram.title":"テレグラムグループに参加する","invite.task.telegram.desc":"公式 Telegram コミュニティ グループに参加してください","invite.task.discord.title":"Discordサーバーに参加する","invite.task.discord.desc":"Discordコミュニティサーバーに参加してください",message:"-","layouts.usermenu.dialog.title":"情報","layouts.usermenu.dialog.content":"ログアウトしてもよろしいですか?","layouts.userLayout.title":"不確実性の中で真実を見つける","dashboard.indicator.boundary.message":"Note: The indicator script only computes plots + buy/sell signals. Position sizing, risk, scaling, fees/slippage belong to execution config.","dashboard.indicator.boundary.indicatorRule":"Keep the script to buy/sell only (and set df['buy']/df['sell']). Do NOT implement position management, TP/SL, scaling in the script.","dashboard.indicator.boundary.backtestRule":"Rule: If a bar has a main signal (buy/sell → open/close/reverse), scaling in/out is skipped on the same bar.","dashboard.indicator.guide.title":"Python Indicator & Strategy Development Guide","dashboard.indicator.guide.intro":"This platform supports writing custom technical indicators and trading signals using Python. The system includes built-in pandas and numpy data analysis libraries. You can use standard DataFrame operations to process K-line data and draw charts or mark buy/sell signals.","dashboard.indicator.guide.section1.title":"1. Runtime Environment & Predefined Variables","dashboard.indicator.guide.section1.env":"Your code runs in a browser-based Python environment (Pyodide).","dashboard.indicator.guide.section1.libs":"Pre-installed Libraries","dashboard.indicator.guide.section1.libsDesc":"The following libraries are imported by default, no need to import again:","dashboard.indicator.guide.section1.libsList":"pandas (pd), numpy (np), math, json","dashboard.indicator.guide.section1.data":"Input Data: df","dashboard.indicator.guide.section1.dataDesc":"The system automatically converts current K-line data into a Pandas DataFrame object, variable name is df.","dashboard.indicator.guide.section1.dataColumns":"df contains the following columns (all float type):","dashboard.indicator.guide.section1.dataColumnsList":"time (timestamp, seconds), open, high, low, close, volume","dashboard.indicator.guide.section1.dataNote":"Data index is arranged from old to new (0 is the earliest data, last row is the latest data).","dashboard.indicator.guide.section1.dataIndex":"Important: df index is timestamp (DatetimeIndex), please preserve the index, avoid using .values which loses the index.","dashboard.indicator.guide.section2.title":"2. Parameter Definition","dashboard.indicator.guide.section2.desc":"You can define variables as parameters at the beginning of your code. The system will try to parse statements like variable = value as adjustable parameters.","dashboard.indicator.guide.section2.example":"Parameter Example","dashboard.indicator.guide.section2.exampleCode":"span = 20 or multiplier = 2.0","dashboard.indicator.guide.section3.title":"3. Backtest Signal Setup (Important!)","dashboard.indicator.guide.section3.desc":"If you want your indicator to support backtesting, you must set the following two columns in your code:","dashboard.indicator.guide.section3.backtestRequired":"Required for Backtesting:","dashboard.indicator.guide.section3.backtestBuySignal":"df['buy_signal'] - Boolean Series, True indicates buy signal","dashboard.indicator.guide.section3.backtestSellSignal":"df['sell_signal'] - Boolean Series, True indicates sell signal","dashboard.indicator.guide.section3.backtestExample":"Example:","dashboard.indicator.guide.section3.backtestExampleCode":"df['buy_signal'] = condition_buy
df['sell_signal'] = condition_sell","dashboard.indicator.guide.section3.backtestNote":"Note: Even if you only set output.signals for chart display, you must set these two columns to enable backtesting.","dashboard.indicator.guide.section4.title":"4. Output Requirements: output","dashboard.indicator.guide.section4.desc":"At the end of code execution, you must define a dictionary named output to tell the chart how to display results.","dashboard.indicator.guide.section4.fields":"The output dictionary contains the following fields:","dashboard.indicator.guide.section4.plots":"plots - For drawing lines (e.g., moving averages, RSI)","dashboard.indicator.guide.section4.signals":"signals - For marking buy/sell signals (e.g., arrows, labels)","dashboard.indicator.guide.section4.name":"name - Indicator name (optional)","dashboard.indicator.guide.section4.calculatedVars":"calculatedVars - Calculated variables (optional, for displaying additional information)","dashboard.indicator.guide.section5.title":"5. Plot Configuration (Plots)","dashboard.indicator.guide.section5.desc":"Each object in the plots list represents a line.","dashboard.indicator.guide.section5.table.field":"Field","dashboard.indicator.guide.section5.table.type":"Type","dashboard.indicator.guide.section5.table.required":"Required","dashboard.indicator.guide.section5.table.requiredYes":"Yes","dashboard.indicator.guide.section5.table.requiredNo":"No","dashboard.indicator.guide.section5.table.desc":"Description","dashboard.indicator.guide.section5.table.name":"The name of the indicator line, displayed in the legend","dashboard.indicator.guide.section5.table.data":"Data list, length must match the number of rows in df. Recommended to use series.tolist()","dashboard.indicator.guide.section5.table.color":"Line color (Hex format, e.g. '#ff0000'). If not filled, the system will automatically assign","dashboard.indicator.guide.section5.table.typeDesc":"Chart type, default is 'line'","dashboard.indicator.guide.section5.table.overlay":"Important. True means display on main chart (with K-line), False means display on sub-chart (independent area)","dashboard.indicator.guide.section5.example":"Example: Draw Simple Moving Average (SMA)","dashboard.indicator.guide.section5.exampleCalc":"Calculate SMA","dashboard.indicator.guide.section5.exampleOutput":"Construct Output","dashboard.indicator.guide.section5.exampleOverlay":"Display on main chart","dashboard.indicator.guide.section6.title":"6. Signal Markers (Signals)","dashboard.indicator.guide.section6.desc":"signals are used to mark buy/sell points on specific K-lines through icons or text. Note: This is only for chart display. The backtest system uses df['buy_signal'] and df['sell_signal'].","dashboard.indicator.guide.section6.table.type":"Signal type: 'buy' (buy, marked below K-line) or 'sell' (sell, marked above K-line)","dashboard.indicator.guide.section6.table.data":"Signal data list. Fill price value at signal positions, fill None (or np.nan) at non-signal positions","dashboard.indicator.guide.section6.table.text":'Text displayed on the label (e.g. "B", "S", "Buy", "Sell")',"dashboard.indicator.guide.section6.table.color":"Marker color","dashboard.indicator.guide.section6.hint":"The system automatically handles positioning.","dashboard.indicator.guide.section6.buy":"Markers will be automatically positioned below the Low of the current K-line","dashboard.indicator.guide.section6.sell":"Markers will be automatically positioned above the High of the current K-line","dashboard.indicator.guide.section6.example":"Example: Draw Buy/Sell Signals","dashboard.indicator.guide.section6.exampleInit":"Initialize signal list, fill all with None","dashboard.indicator.guide.section6.exampleLogic":"Simple logic: mark buy when close price is greater than open price","dashboard.indicator.guide.section6.exampleNote":"In actual logic, please use loops or vectorized operations","dashboard.indicator.guide.section6.examplePrice":"Record price","dashboard.indicator.guide.section6.exampleText":"Buy","dashboard.indicator.guide.section7.title":"7. Complete Code Examples","dashboard.indicator.guide.section7.exampleA":"Example A: Dual EMA Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleACode":'# 1. Calculate indicators
df[\'ema_fast\'] = df[\'close\'].ewm(span=5, adjust=False).mean()
df[\'ema_slow\'] = df[\'close\'].ewm(span=13, adjust=False).mean()

# 2. Calculate crossover signals
cross_up = (df[\'ema_fast\'] > df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) <= df[\'ema_slow\'].shift(1))
cross_down = (df[\'ema_fast\'] < df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) >= df[\'ema_slow\'].shift(1))

# 3. 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = cross_up
df[\'close_long\'] = cross_down
df[\'open_short\'] = cross_down
df[\'close_short\'] = cross_up

# 4. Generate signal data for chart display
buy_signals = [df[\'low\'].iloc[i] * 0.995 if cross_up.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if cross_down.iloc[i] else None for i in range(len(df))]

# 5. Build output
output = {
"name": "Dual EMA Strategy",
"plots": [
{"name": "EMA 5", "data": df[\'ema_fast\'].tolist(), "color": "#FF6B6B", "overlay": True},
{"name": "EMA 13", "data": df[\'ema_slow\'].tolist(), "color": "#4ECDC4", "overlay": True}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section7.exampleB":"Example B: Bollinger Bands - Chart Display Only","dashboard.indicator.guide.section7.exampleBCode":'# Calculate Bollinger Bands (chart display only, no backtesting)
length = 20
mult = 2.0
df[\'sma\'] = df[\'close\'].rolling(length).mean()
df[\'std\'] = df[\'close\'].rolling(length).std()
df[\'upper\'] = df[\'sma\'] + mult * df[\'std\']
df[\'lower\'] = df[\'sma\'] - mult * df[\'std\']

output = {
"name": "Bollinger Bands",
"plots": [
{"name": "Upper", "data": df[\'upper\'].tolist(), "color": "#FF5252", "overlay": True},
{"name": "Middle", "data": df[\'sma\'].tolist(), "color": "#2196F3", "overlay": True},
{"name": "Lower", "data": df[\'lower\'].tolist(), "color": "#00E676", "overlay": True}
]
}',"dashboard.indicator.guide.section7.exampleC":"Example C: RSI Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleCCode":'# Calculate RSI
delta = df[\'close\'].diff()
up = delta.clip(lower=0)
down = -1 * delta.clip(upper=0)
ema_up = up.ewm(com=13, adjust=False).mean()
ema_down = down.ewm(com=13, adjust=False).mean()
rs = ema_up / ema_down
df[\'rsi\'] = 100 - (100 / (1 + rs))

# Generate trading signals
buy_condition = df[\'rsi\'] < 30 # Oversold buy
sell_condition = df[\'rsi\'] > 70 # Overbought sell

# 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = buy_condition
df[\'close_long\'] = sell_condition
df[\'open_short\'] = sell_condition
df[\'close_short\'] = buy_condition

# Generate chart signals
buy_signals = [df[\'low\'].iloc[i] * 0.995 if buy_condition.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if sell_condition.iloc[i] else None for i in range(len(df))]

output = {
"name": "RSI Strategy",
"plots": [
{"name": "RSI", "data": df[\'rsi\'].tolist(), "color": "#9C27B0", "overlay": False},
{"name": "Overbought", "data": [70] * len(df), "color": "#FF5252", "style": "dashed", "overlay": False},
{"name": "Oversold", "data": [30] * len(df), "color": "#00E676", "style": "dashed", "overlay": False}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section6.param":"Parameters","dashboard.indicator.guide.section6.calc":"Calculate","dashboard.indicator.guide.section6.output":"Output","dashboard.indicator.guide.section6.generate":"Generate signal data (initialize with None)","dashboard.indicator.guide.section6.subchart":"Display on sub-chart","dashboard.indicator.guide.section8.title":"8. Frequently Asked Questions (FAQ)","dashboard.indicator.guide.section8.q1":"Q: Why can't my indicator be backtested?","dashboard.indicator.guide.section8.a1":"A: The backtest system requires NEW signal columns: df['open_long'], df['close_long'], df['open_short'], df['close_short'] (boolean). Even if you set output.signals for chart display, you must set these columns to enable backtesting.","dashboard.indicator.guide.section8.q2":"Q: Data length mismatch?","dashboard.indicator.guide.section8.a2":"A: The data list in plots and signals must have exactly the same length as the K-line data. If you use df['xxx'].tolist(), there is usually no problem.","dashboard.indicator.guide.section8.q3":"Q: How to handle NaN (empty values)?","dashboard.indicator.guide.section8.a3":"A: Pandas calculations (such as rolling mean) will produce NaN at the beginning. The system will automatically convert NaN to null for chart rendering. You don't need to manually clean it, but if you need specific logic, you can use df.fillna(0) or other methods.","dashboard.indicator.guide.section8.q4":"Q: Index mismatch causing all signals to be NaN?","dashboard.indicator.guide.section8.a4":"A: Please ensure you preserve the original df index (timestamp). Avoid using .values to create new Series. Use columns directly like df['close'] for operations.","dashboard.indicator.guide.section8.q5":"Q: Can I use third-party network libraries?","dashboard.indicator.guide.section8.a5":"A: No. The runtime environment is a browser sandbox and cannot use libraries like requests to request external APIs, nor can it install additional pip packages. Limited to built-in libraries such as pandas, numpy, math, json.","dashboard.indicator.guide.section8.q6":"Q: How to debug code?","dashboard.indicator.guide.section8.a6":"A: If the chart does not display indicators, it is usually because the Python code has an error. Please check for syntax errors or array index out of bounds. It is recommended to debug the algorithm logic in a local Python environment first, then copy it in.","dashboard.indicator.guide.section8.q7":"Q: Backtest shows 0 signals?","dashboard.indicator.guide.section8.a7":"A: Please check the data type of df['open_long']/df['close_long']/df['open_short']/df['close_short']. They should be boolean (True/False), not numeric. Use condition.fillna(False).astype(bool) to ensure correct type.","dashboard.indicator.backtest.commissionHint":"Charged on notional value (incl. leverage) per trade; both entry & exit are deducted from balance.","dashboard.indicator.backtest.historyTitle":"Backtest History","dashboard.indicator.backtest.historyRefresh":"Refresh","dashboard.indicator.backtest.historyView":"View","dashboard.indicator.backtest.historyNoData":"No backtest history","dashboard.indicator.backtest.historyUseCurrent":"Only current symbol/timeframe","dashboard.indicator.backtest.historyFilterSymbol":"Symbol","dashboard.indicator.backtest.historyFilterTimeframe":"Timeframe","dashboard.indicator.backtest.historyApply":"Apply filters","dashboard.indicator.backtest.historyAIAnalyze":"AI Analyze","dashboard.indicator.backtest.historyAIAnalyzeTitle":"AI Suggestions","dashboard.indicator.backtest.historyNoAIResult":"No AI analysis result","dashboard.indicator.backtest.historyRunId":"Run ID","dashboard.indicator.backtest.historyCreatedAt":"Time","dashboard.indicator.backtest.historyRange":"Range","dashboard.indicator.backtest.historyStatus":"Status","dashboard.indicator.backtest.historyStatusSuccess":"Success","dashboard.indicator.backtest.historyStatusFailed":"Failed","dashboard.indicator.backtest.historyActions":"Actions","dashboard.indicator.backtest.hint.entryPctMax":"Max entry: {maxPct}% (reserve budget for future scale-ins)","trading-assistant.exchange.ipWhitelistTip":"Please add the following IPs to the whitelist in your exchange API settings:","signal-robot.title":"Signal Robot Console","signal-robot.createBot":"Create New Bot","signal-robot.search.nameOrSymbol":"Name/Symbol","signal-robot.search.placeholder":"Search bot name or symbol","signal-robot.search.status":"Status","signal-robot.search.statusAll":"All","signal-robot.search.statusRunning":"Running","signal-robot.search.statusPaused":"Paused","signal-robot.search.query":"Query","signal-robot.search.reset":"Reset","signal-robot.table.botName":"Bot Name","signal-robot.table.symbolTimeframe":"Symbol/Timeframe","signal-robot.table.triggerStrategy":"Trigger Strategy","signal-robot.table.notificationChannels":"Notification Channels","signal-robot.table.status":"Status","signal-robot.table.action":"Action","signal-robot.table.triggerConditions":"{count} trigger conditions","signal-robot.table.monitoring":"Monitoring","signal-robot.table.paused":"Paused","signal-robot.table.edit":"Edit","signal-robot.table.pause":"Pause","signal-robot.table.start":"Start","signal-robot.table.delete":"Delete","signal-robot.table.deleteConfirm":"Are you sure you want to delete this bot?","signal-robot.table.deleteSuccess":"Deleted successfully","signal-robot.table.startSuccess":"Bot started","signal-robot.table.pauseSuccess":"Bot paused","signal-robot.channel.telegram":"Telegram","signal-robot.channel.discord":"Discord","signal-robot.channel.email":"Email","signal-robot.channel.webhook":"Webhook","signal-robot.channel.browser":"Browser Push","signal-robot.modal.createTitle":"Create New Signal Robot","signal-robot.modal.editTitle":"Edit Signal Robot","signal-robot.modal.step.basic":"Basic Settings","signal-robot.modal.step.entry":"Entry Strategy","signal-robot.modal.step.position":"Position Management","signal-robot.modal.step.risk":"Risk Control","signal-robot.modal.step.notify":"Notification Config","signal-robot.modal.prev":"Previous","signal-robot.modal.next":"Next","signal-robot.modal.preview":"Preview Backtest","signal-robot.modal.complete":"Complete & Run","signal-robot.modal.saveSuccess":"Saved successfully","signal-robot.modal.previewDeveloping":"Preview feature is under development...","signal-robot.modal.basicInfoRequired":"Please complete basic information","signal-robot.basic.alert":"Set basic information for the bot","signal-robot.basic.title":"Basic Information","signal-robot.basic.botName":"Bot Name","signal-robot.basic.botNamePlaceholder":"e.g.: BTC SuperTrend Strategy","signal-robot.basic.symbol":"Trading Pair","signal-robot.basic.symbolPlaceholder":"Select from watchlist","signal-robot.basic.noWatchlist":"No watchlist items, please add in market page first","signal-robot.basic.timeframe":"K-Line Period","signal-robot.basic.timeframe15m":"15 Minutes","signal-robot.basic.timeframe30m":"30 Minutes","signal-robot.basic.timeframe1h":"1 Hour","signal-robot.basic.timeframe4h":"4 Hours","signal-robot.basic.timeframe1d":"1 Day","signal-robot.basic.autoNameSuggestion":"{symbol} Signal Robot","signal-robot.entry.alert":"Trigger entry signal when all conditions below are met","signal-robot.entry.condition":"Condition {index}","signal-robot.entry.indicator":"Indicator","signal-robot.entry.indicatorSupertrend":"SuperTrend","signal-robot.entry.indicatorEma":"EMA (Exponential Moving Average)","signal-robot.entry.indicatorRsi":"RSI (Relative Strength Index)","signal-robot.entry.indicatorMacd":"MACD","signal-robot.entry.indicatorBollinger":"Bollinger Bands","signal-robot.entry.atrPeriod":"ATR Period","signal-robot.entry.multiplier":"Multiplier","signal-robot.entry.triggerSignal":"Trigger Signal","signal-robot.entry.signalTrendBullish":"Trend Bullish","signal-robot.entry.signalTrendBearish":"Trend Bearish","signal-robot.entry.signalIsUptrend":"Is Uptrend","signal-robot.entry.signalIsDowntrend":"Is Downtrend","signal-robot.entry.period":"Period","signal-robot.entry.compareCondition":"Compare Condition","signal-robot.entry.priceAbove":"Price > EMA (Price Above)","signal-robot.entry.priceBelow":"Price < EMA (Price Below)","signal-robot.entry.crossUp":"Price Crosses Above EMA (Golden Cross)","signal-robot.entry.crossDown":"Price Crosses Below EMA (Death Cross)","signal-robot.entry.compare":"Compare","signal-robot.entry.greaterThan":"Greater Than","signal-robot.entry.lessThan":"Less Than","signal-robot.entry.crossUpShort":"Cross Up","signal-robot.entry.crossDownShort":"Cross Down","signal-robot.entry.threshold":"Threshold","signal-robot.entry.selectIndicator":"Please select an indicator to configure parameters","signal-robot.entry.addCondition":"Add Condition","signal-robot.position.alert":"Configure initial position size, leverage and pyramiding rules","signal-robot.position.basicTitle":"Basic Position Management","signal-robot.position.initialSize":"Initial Size (Capital %)","signal-robot.position.initialSizeHint":"Recommended 5% - 20%","signal-robot.position.leverage":"Leverage","signal-robot.position.leverageHint":"Please ensure your exchange account supports this leverage","signal-robot.position.maxPyramiding":"Max Pyramiding Times","signal-robot.position.maxPyramidingHint":"0 means no pyramiding","signal-robot.position.pyramidingTitle":"Pyramiding Rules","signal-robot.position.pyramidingEnabled":"Enabled","signal-robot.position.pyramidingDisabled":"Disabled","signal-robot.position.pyramidingCondition":"Pyramiding Trigger Condition","signal-robot.position.priceRisePct":"Price Rises (Long) / Falls (Short)","signal-robot.position.profitPct":"Profit Reaches","signal-robot.position.triggerThreshold":"Trigger Threshold (%)","signal-robot.position.triggerThresholdHint":"e.g. 3%: add position once every 3% rise","signal-robot.position.addSize":"Single Add Size (Capital %)","signal-robot.position.pyramidingDisabledHint":"Pyramiding disabled, only initial position will be executed","signal-robot.risk.alert":"Configure take profit, stop loss and exit rules","signal-robot.risk.stopLossTitle":"Stop Loss","signal-robot.risk.stopLossEnabled":"Enabled","signal-robot.risk.stopLossDisabled":"Disabled","signal-robot.risk.stopLossType":"Stop Loss Type","signal-robot.risk.stopLossFixedPct":"Fixed Percentage","signal-robot.risk.stopLossAtrMultiplier":"ATR Multiplier","signal-robot.risk.stopLossValue":"Value","signal-robot.risk.stopLossFixedHint":"e.g. 2%: stop loss when loss reaches 2%","signal-robot.risk.stopLossAtrHint":"e.g. 2.0: stop loss when price touches ATR*2.0","signal-robot.risk.stopLossDisabledHint":"Stop loss disabled (high risk)","signal-robot.risk.trailingStopTitle":"Trailing Stop","signal-robot.risk.activationProfit":"Activation Profit (%)","signal-robot.risk.activationProfitHint":"Start trailing when profit reaches this level","signal-robot.risk.callbackPct":"Callback (%)","signal-robot.risk.callbackPctHint":"Trigger take profit when price falls from peak by this percentage","signal-robot.risk.trailingStopDisabledHint":"Trailing stop disabled","signal-robot.risk.otherExitTitle":"Other Exit Rules","signal-robot.risk.signalExit":"Allow Signal Exit","signal-robot.risk.signalExitHint":"Close position immediately when reverse signal appears (e.g. close long when short signal appears)","signal-robot.notify.alert":"Configure notification methods when signal is triggered","signal-robot.notify.channelTitle":"Notification Channels","signal-robot.notify.discordWebhook":"Discord Webhook","signal-robot.notify.genericWebhook":"Generic Webhook","signal-robot.notify.webhookUrl":"Webhook URL","signal-robot.notify.webhookUrlPlaceholder":"https://example.com/webhook","signal-robot.notify.discordUrl":"Discord URL","signal-robot.notify.discordUrlPlaceholder":"https://discord.com/api/webhooks/...","signal-robot.operator.greaterThan":"Greater Than","signal-robot.operator.lessThan":"Less Than","signal-robot.operator.equal":"Equal","signal-robot.operator.goldenCross":"Golden Cross","signal-robot.operator.deathCross":"Death Cross","signal-robot.operator.increaseBy":"Increase By","signal-robot.operator.decreaseBy":"Decrease By","signal-robot.indicator.price":"Price","signal-robot.indicator.rsi":"RSI","signal-robot.indicator.kdjK":"KDJ(K)","signal-robot.indicator.kdjJ":"KDJ(J)","signal-robot.indicator.macd":"MACD","signal-robot.indicator.macdHist":"MACD Histogram","signal-robot.indicator.bollingerUp":"Bollinger Upper","signal-robot.indicator.bollingerLow":"Bollinger Lower","signal-robot.indicator.volume":"Volume","signal-robot.indicator.changePct1h":"1H Change %","signal-robot.indicator.changePct24h":"24H Change %","signal-robot.indicator.signalLine":"Signal Line","settings.group.agent_memory":"記憶/反省設定","settings.group.reflection_worker":"自動反省検証ワーカー","settings.field.ENABLE_AGENT_MEMORY":"エージェント記憶を有効化","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"ベクトル検索を有効化(ローカル)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"埋め込み次元","settings.field.AGENT_MEMORY_TOP_K":"Top-K 取得数","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"候補ウィンドウサイズ","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"時間減衰の半減期(日)","settings.field.AGENT_MEMORY_W_SIM":"類似度重み","settings.field.AGENT_MEMORY_W_RECENCY":"新しさ重み","settings.field.AGENT_MEMORY_W_RETURNS":"収益重み","settings.field.ENABLE_REFLECTION_WORKER":"自動検証を有効化","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"検証間隔(秒)","profile.notifications.title":"通知設定","profile.notifications.hint":"デフォルトの通知方法を設定します。資産モニターやアラート作成時に自動的に使用されます","profile.notifications.defaultChannels":"デフォルト通知チャンネル","profile.notifications.browser":"アプリ内通知","profile.notifications.email":"メール","profile.notifications.phone":"SMS","profile.notifications.telegramBotToken":"Telegram Bot Token","profile.notifications.telegramBotTokenPlaceholder":"Telegram Bot Tokenを入力してください","profile.notifications.telegramBotTokenHint":"@BotFatherでボットを作成してTokenを取得してください","profile.notifications.telegramChatId":"Telegram Chat ID","profile.notifications.telegramPlaceholder":"Telegram Chat IDを入力してください(例:123456789)","profile.notifications.telegramHint":"@userinfobot に /start を送信してChat IDを取得してください","profile.notifications.notifyEmail":"通知メール","profile.notifications.emailPlaceholder":"通知を受け取るメールアドレス","profile.notifications.emailHint":"デフォルトはアカウントメール、別のメールも設定可能","profile.notifications.phonePlaceholder":"電話番号を入力してください(例:+81901234567)","profile.notifications.phoneHint":"管理者がTwilioサービスを設定する必要があります","profile.notifications.discordWebhook":"Discord Webhook","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"Discordサーバー設定でWebhookを作成してください","profile.notifications.webhookUrl":"Webhook URL","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"カスタムWebhook URL、POST JSONで通知を送信","profile.notifications.webhookToken":"Webhook Token(任意)","profile.notifications.webhookTokenPlaceholder":"リクエスト認証用Bearer Token","profile.notifications.webhookTokenHint":"Authorization: Bearer TokenとしてWebhookに送信","profile.notifications.testBtn":"テスト通知を送信","profile.notifications.saveSuccess":"通知設定を保存しました","profile.notifications.selectChannel":"少なくとも1つの通知チャンネルを選択してください","profile.notifications.fillTelegramToken":"Telegram Bot Tokenを入力してください","profile.notifications.fillTelegram":"Telegram Chat IDを入力してください","profile.notifications.fillEmail":"通知メールを入力してください","profile.notifications.testSent":"テスト通知を送信しました。通知チャンネルを確認してください"},f=(0,e.A)((0,e.A)({},p),y)}}]); \ No newline at end of file diff --git a/frontend/dist/js/lang-ja-JP.3d6a8327.js b/frontend/dist/js/lang-ja-JP.3d6a8327.js new file mode 100644 index 0000000..b91113e --- /dev/null +++ b/frontend/dist/js/lang-ja-JP.3d6a8327.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[638],{7392:function(a,t,i){i.d(t,{default:function(){return f}});var e=i(76338),s={items_per_page:"/ ページ",jump_to:"移動",jump_to_confirm:"確認する",page:"ページ",prev_page:"前のページ",next_page:"次のページ",prev_5:"前 5ページ",next_5:"次 5ページ",prev_3:"前 3ページ",next_3:"次 3ページ"},o=i(85505),r={today:"今日",now:"現在時刻",backToToday:"今日に戻る",ok:"決定",timeSelect:"時間を選択",dateSelect:"日時を選択",clear:"クリア",month:"月",year:"年",previousMonth:"前月 (ページアップキー)",nextMonth:"翌月 (ページダウンキー)",monthSelect:"月を選択",yearSelect:"年を選択",decadeSelect:"年代を選択",yearFormat:"YYYY年",dayFormat:"D日",dateFormat:"YYYY年M月D日",dateTimeFormat:"YYYY年M月D日 HH時mm分ss秒",previousYear:"前年 (Controlを押しながら左キー)",nextYear:"翌年 (Controlを押しながら右キー)",previousDecade:"前の年代",nextDecade:"次の年代",previousCentury:"前の世紀",nextCentury:"次の世紀"},n={placeholder:"時刻を選択"},d=n,l={lang:(0,o.A)({placeholder:"日付を選択",rangePlaceholder:["開始日付","終了日付"]},r),timePickerLocale:(0,o.A)({},d)},c=l,g=c,b={locale:"ja",Pagination:s,DatePicker:c,TimePicker:d,Calendar:g,Table:{filterTitle:"メニューをフィルター",filterConfirm:"OK",filterReset:"リセット",selectAll:"すべてを選択",selectInvert:"選択を反転"},Modal:{okText:"OK",cancelText:"キャンセル",justOkText:"OK"},Popconfirm:{okText:"OK",cancelText:"キャンセル"},Transfer:{searchPlaceholder:"ここを検索",itemUnit:"アイテム",itemsUnit:"アイテム"},Upload:{uploading:"アップロード中...",removeFile:"ファイルを削除",uploadError:"アップロードエラー",previewFile:"ファイルをプレビュー",downloadFile:"ダウンロードファイル"},Empty:{description:"データがありません"}},m=b,h=i(23827),u=i.n(h),p={antLocale:m,momentName:"ja",momentLocale:u()},y={submit:"送信する",save:"保存する","submit.ok":"送信成功","save.ok":"正常に保存されました","menu.welcome":"ようこそ","menu.home":"ホームページ","menu.dashboard":"ダッシュボード","menu.dashboard.indicator":"指標分析","menu.dashboard.community":"インジケーターコミュニティ","menu.dashboard.analysis":"AI分析","menu.dashboard.tradingAssistant":"取引アシスタント","menu.dashboard.aiTradingAssistant":"AI取引アシスタント","menu.dashboard.signalRobot":"シグナルロボット","menu.dashboard.monitor":"モニタリングページ","menu.dashboard.workplace":"作業台","menu.form":"フォームページ","menu.form.basic-form":"基本形","menu.form.step-form":"ステップバイステップフォーム","menu.form.step-form.info":"ステップバイステップフォーム(転送情報を記入)","menu.form.step-form.confirm":"ステップバイステップフォーム(振込情報の確認)","menu.form.step-form.result":"ステップバイステップのフォーム(完了)","menu.form.advanced-form":"高度なフォーム","menu.list":"一覧ページ","menu.list.table-list":"お問い合わせフォーム","menu.list.basic-list":"規格一覧","menu.list.card-list":"カードリスト","menu.list.search-list":"検索リスト","menu.list.search-list.articles":"検索リスト(記事)","menu.list.search-list.projects":"検索リスト(プロジェクト)","menu.list.search-list.applications":"検索リスト(アプリ)","menu.profile":"詳細ページ","menu.profile.basic":"基本詳細ページ","menu.profile.advanced":"詳細ページ","menu.result":"結果ページ","menu.result.success":"成功ページ","menu.result.fail":"失敗ページ","menu.exception":"例外ページ","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"トリガーエラー","menu.account":"個人ページ","menu.account.center":"パーソナルセンター","menu.account.settings":"個人設定","menu.account.trigger":"トリガーエラー","menu.account.logout":"ログアウト","menu.wallet":"私の財布","menu.docs":"ドキュメントセンター","menu.docs.detail":"文書の詳細","menu.header.refreshPage":"ページを更新する","menu.invite.friends":"友達を招待する","app.setting.pagestyle":"全体的なスタイル設定","app.setting.pagestyle.light":"明るいメニュースタイル","app.setting.pagestyle.dark":"ダークメニュースタイル","app.setting.pagestyle.realdark":"ダークモード","app.setting.themecolor":"テーマカラー","app.setting.navigationmode":"ナビゲーションモード","app.setting.sidemenu.nav":"サイドバーのナビゲーション","app.setting.topmenu.nav":"トップバーのナビゲーション","app.setting.content-width":"コンテンツ領域の幅","app.setting.content-width.tooltip":"この設定は、[トップバーナビゲーション]時のみ有効です。","app.setting.content-width.fixed":"修正済み","app.setting.content-width.fluid":"ストリーミング","app.setting.fixedheader":"固定ヘッダー","app.setting.fixedheader.tooltip":"固定ヘッダー時に設定可能","app.setting.autoHideHeader":"スクロール時にヘッダーを非表示にする","app.setting.fixedsidebar":"サイドメニューを修正","app.setting.sidemenu":"サイドメニューのレイアウト","app.setting.topmenu":"トップメニューのレイアウト","app.setting.othersettings":"その他の設定","app.setting.weakmode":"カラーウィークネスモード","app.setting.multitab":"マルチタブモード","app.setting.copy":"設定をコピーする","app.setting.loading":"テーマを読み込み中","app.setting.copyinfo":"設定が正常にコピーされました src/config/defaultSettings.js","app.setting.copy.success":"コピー完了","app.setting.copy.fail":"コピーに失敗しました","app.setting.theme.switching":"テーマ変更!","app.setting.production.hint":"構成バーは開発環境でのプレビューにのみ使用され、運用環境では表示されません。 構成ファイルを手動でコピーして変更してください。","app.setting.themecolor.daybreak":"ドーンブルー(デフォルト)","app.setting.themecolor.dust":"夕暮れ","app.setting.themecolor.volcano":"火山","app.setting.themecolor.sunset":"日没","app.setting.themecolor.cyan":"明清","app.setting.themecolor.green":"オーロラグリーン","app.setting.themecolor.geekblue":"オタクブルー","app.setting.themecolor.purple":"ジャン・ジー","app.setting.tooltip":"ページ設定","user.login.userName":"ユーザー名","user.login.password":"パスワード","user.login.username.placeholder":"アカウント: 管理者","user.login.password.placeholder":"パスワード: admin または ant.design","user.login.message-invalid-credentials":"ログインに失敗しました。メールアドレスと確認コードを確認してください","user.login.message-invalid-verification-code":"認証コードエラー","user.login.tab-login-credentials":"アカウントパスワードログイン","user.login.tab-login-email":"メールログイン","user.login.tab-login-mobile":"携帯電話番号ログイン","user.login.captcha.placeholder":"グラフィック認証コードを入力してください","user.login.mobile.placeholder":"携帯電話番号","user.login.mobile.verification-code.placeholder":"認証コード","user.login.email.placeholder":"メールアドレスを入力してください","user.login.email.verification-code.placeholder":"確認コードを入力してください","user.login.email.sending":"認証コードが送信されています...","user.login.email.send-success-title":"ヒント","user.login.email.send-success":"確認コードは正常に送信されました。メールを確認してください","user.login.sms.send-success":"確認コードが正常に送信されました。テキスト メッセージを確認してください。","user.login.remember-me":"自動ログイン","user.login.forgot-password":"パスワードを忘れた場合","user.login.sign-in-with":"その他のログイン方法","user.login.signup":"アカウントを登録する","user.login.login":"ログイン","user.register.register":"登録する","user.register.email.placeholder":"電子メール","user.register.password.placeholder":"6文字以上を入力してください。 推測されやすいパスワードは使用しないでください。","user.register.password.popover-message":"6文字以上を入力してください。 推測されやすいパスワードは使用しないでください。","user.register.confirm-password.placeholder":"パスワードの確認","user.register.get-verification-code":"確認コードを取得する","user.register.sign-in":"既存のアカウントを使用してログインする","user.register-result.msg":"あなたのアカウント: {email} 登録が成功しました","user.register-result.activation-email":"アクティベーション電子メールはメールボックスに送信され、24 時間有効です。 すぐにメールにログインし、メール内のリンクをクリックしてアカウントをアクティブにしてください。","user.register-result.back-home":"ホームページに戻る","user.register-result.view-mailbox":"メールボックスを確認してください","user.email.required":"メールアドレスを入力してください!","user.email.wrong-format":"メールアドレスの形式が間違っています!","user.userName.required":"アカウント名またはメールアドレスを入力してください","user.password.required":"パスワードを入力してください。","user.password.twice.msg":"2 回入力したパスワードが一致しません。","user.password.strength.msg":"パスワードの強度が十分ではありません","user.password.strength.strong":"強さ: 強い","user.password.strength.medium":"強さ: 中","user.password.strength.low":"強度: 低い","user.password.strength.short":"強さ:短すぎる","user.confirm-password.required":"パスワードを確認してください。","user.phone-number.required":"正しい携帯電話番号を入力してください","user.phone-number.wrong-format":"携帯電話番号の形式が間違っています。","user.verification-code.required":"確認コードを入力してください。","user.captcha.required":"グラフィック認証コードを入力してください。","user.login.infos":"QuantDingerはAIマルチエージェント株分析補助ツールであり、証券投資コンサルティング資格はございません。 プラットフォーム内のすべての分析結果、スコア、参考意見は過去のデータに基づいてAIによって自動的に生成され、学習、研究、技術交流のみに使用され、投資アドバイスや意思決定の基礎を構成するものではありません。 株式投資には市場リスク、流動性リスク、政策リスク等の様々なリスクが伴い、元本を割り込む可能性があります。 ユーザーは自身のリスク許容度に基づいて独立した決定を行う必要があり、本ツールの使用から生じる投資行動および結果はユーザーが負担するものとします。 市場にはリスクがあり、投資は慎重になる必要があります。","user.login.tab-login-web3":"Web3ログイン","user.login.web3.tip":"ウォレットを使用した署名ログイン","user.login.web3.connect":"ウォレットに接続してログインする","user.login.web3.no-wallet":"ウォレットが検出されない","user.login.web3.no-address":"ウォレットアドレスが取得できませんでした","user.login.web3.nonce-failed":"乱数の取得に失敗しました","user.login.web3.verify-failed":"署名検証に失敗しました","user.login.web3.success":"ログイン成功","user.login.web3.failed":"ウォレットへのログインに失敗しました","nav.no_wallet":"ウォレットが検出されない","nav.copy":"コピー","nav.copy_success":"正常にコピーされました","user.login.oauth.google":"Googleでサインイン","user.login.oauth.github":"GitHub でサインインする","user.login.oauth.loading":"認証ページにリダイレクトしています...","user.login.oauth.failed":"OAuthログインに失敗しました","user.login.oauth.get-url-failed":"認証リンクの取得に失敗しました","user.login.subtitle":"世界市場に対する定量的な洞察を推進","user.login.legal.title":"法的免責事項","user.login.legal.view":"法的免責事項を表示","user.login.legal.collapse":"法的免責事項を折りたたむ","user.login.legal.agree":"法的免責事項を読み、同意します","user.login.legal.required":"まず法的免責事項を読んで確認してください","user.login.legal.content":"QuantDingerはAIマルチエージェント株分析補助ツールであり、証券投資コンサルティング資格はございません。 プラットフォーム内のすべての分析結果、評価、参考意見は過去のデータに基づいてAIによって自動的に生成され、学習、研究、技術交流のみに使用され、投資アドバイスや意思決定の基礎を構成するものではありません。 株式投資には市場リスク、流動性リスク、政策リスク等の様々なリスクが伴い、元本を割り込む可能性があります。 ユーザーは自身のリスク許容度に基づいて独立した決定を行う必要があり、本ツールの使用から生じる投資行動および結果はユーザーが負担するものとします。 市場にはリスクがあり、投資は慎重になる必要があります。","user.login.privacy.title":"ユーザープライバシーポリシー","user.login.privacy.view":"ユーザーのプライバシー ポリシーを表示する","user.login.privacy.collapse":"ユーザーのプライバシー規約を閉じる","user.login.privacy.content":"私たちはあなたのプライバシーとデータ保護を大切にしています。 1) 収集範囲:機能の実現に必要な情報(メールアドレス、携帯電話番号、市外局番、Web3ウォレットアドレスなど)と必要なログ、端末情報のみを収集します。 2) 利用目的:アカウントへのログインおよびセキュリティ確認、サービス機能の提供、トラブルシューティングおよびコンプライアンス要件のため。 3) 保管とセキュリティ: データは暗号化されて保管され、不正なアクセス、開示、損失を防ぐために必要な許可とアクセス制御手段が講じられます。 4) 第三者との共有: 法令で義務付けられている場合、またはサービスの実行に必要な場合を除き、お客様の個人情報は第三者と共有されることはありません。サードパーティのサービス (ウォレット、SMS サービスプロバイダーなど) が関与する場合、機能の実装に必要な最小限の範囲でのみ処理されます。 5) Cookie/ローカル ストレージ: ログイン ステータスと必要なセッション維持 (トークン、PHPSESSID など) に使用され、ブラウザーでクリアまたは制限できます。 6) 個人の権利:法令に基づき、照会、訂正、削除、同意の撤回等を行う権利を行使することができます。 7) 変更と通知: これらの条件が更新されると、ページ上で目立つように表示されます。 このサービスを継続して使用することにより、更新された内容を読み、同意したものとみなされます。 本規約またはその更新に同意できない場合は、サービスの使用を中止し、当社までご連絡ください。","account.basicInfo":"基本情報","account.id":"ユーザーID","account.username":"ユーザー名","account.nickname":"ニックネーム","account.email":"電子メール","account.mobile":"携帯電話番号","account.web3address":"ウォレットアドレス","account.pid":"紹介者ID","account.level":"ユーザーレベル","account.money":"バランス","account.qdtBalance":"QDTバランス","account.score":"ポイント","account.createtime":"登録時間","account.inviteLink":"招待リンク","account.recharge":"リチャージ","account.rechargeTip":"WeChat または Alipay を使用して、以下の QR コードをスキャンしてチャージしてください。","account.qrCodePlaceholder":"QR コード プレースホルダー (エミュレーション)","account.rechargeAmount":"チャージ金額","account.enterAmount":"チャージ金額を入力してください","account.rechargeHint":"最低入金額: 1 QDT","account.confirmRecharge":"リチャージを確認する","account.enterValidAmount":"有効なリチャージ金額を入力してください","account.rechargeSuccess":"リチャージ成功! {金額} QDT を入金しました","account.settings.menuMap.basic":"基本設定","account.settings.menuMap.security":"セキュリティ設定","account.settings.menuMap.notification":"新着メッセージ通知","account.settings.menuMap.moneyLog":"ファンドの詳細","account.moneyLog.empty":"ファンドの詳細はまだありません","account.moneyLog.total":"合計 {total} レコード","account.moneyLog.type.purchase":"購入インジケーター","account.moneyLog.type.recharge":"リチャージ","account.moneyLog.type.refund":"払い戻し","account.moneyLog.type.reward":"報酬","account.moneyLog.type.income":"指標収入","account.moneyLog.type.commission":"プラットフォーム手数料","wallet.balance":"QDTバランス","wallet.recharge":"リチャージ","wallet.withdraw":"現金を引き出す","wallet.filter":"フィルター","wallet.reset":"リセット","wallet.totalRecharge":"累積リチャージ","wallet.totalWithdraw":"累積引き出し額","wallet.totalIncome":"累計収入","wallet.records":"取引記録と資金の詳細","wallet.tradingRecords":"取引履歴","wallet.moneyLog":"ファンドの詳細","wallet.rechargeTip":"WeChat または Alipay を使用して、以下の QR コードをスキャンしてチャージしてください。","wallet.qrCodePlaceholder":"QR コード プレースホルダー (エミュレーション)","wallet.rechargeAmount":"チャージ金額","wallet.enterAmount":"チャージ金額を入力してください","wallet.rechargeHint":"最低入金額: 1 QDT","wallet.confirmRecharge":"リチャージを確認する","wallet.enterValidAmount":"有効なリチャージ金額を入力してください","wallet.rechargeSuccess":"リチャージ成功! {金額} QDT を入金しました","wallet.rechargeFailed":"再充電に失敗しました","wallet.withdrawTip":"出金金額と出金アドレスを入力してください","wallet.withdrawAmount":"出金額","wallet.enterWithdrawAmount":"出金額を入力してください","wallet.withdrawHint":"最低出金額: 1 QDT","wallet.withdrawAddress":"出金アドレス (オプション)","wallet.enterWithdrawAddress":"出金アドレスを入力してください","wallet.confirmWithdraw":"出金の確認","wallet.enterValidWithdrawAmount":"有効な出金額を入力してください","wallet.insufficientBalance":"残高不足","wallet.withdrawSuccess":"引き出し成功! {金額} QDT を引き出しました","wallet.withdrawFailed":"出金に失敗しました","wallet.noTradingRecords":"まだ取引記録がありません","wallet.noMoneyLog":"ファンドの詳細はまだありません","wallet.loadTradingRecordsFailed":"トランザクションレコードのロードに失敗しました","wallet.loadMoneyLogFailed":"ファンドの詳細をロードできませんでした","wallet.moneyLogTotal":"合計 {total} レコード","wallet.moneyLogTypeTitle":"タイプ","wallet.moneyLogType.all":"全種類","wallet.table.time":"時間","wallet.table.type":"タイプ","wallet.table.price":"価格","wallet.table.amount":"数量","wallet.table.money":"金額","wallet.table.balance":"バランス","wallet.table.memo":"備考","wallet.table.value":"値","wallet.table.profit":"損益","wallet.table.commission":"手数料","wallet.table.total":"合計 {total} レコード","wallet.tradeType.buy":"買う","wallet.tradeType.sell":"売る","wallet.tradeType.liquidation":"強制清算","wallet.tradeType.openLong":"長く開く","wallet.tradeType.addLong":"ガドット","wallet.tradeType.closeLong":"ピンドゥオ","wallet.tradeType.closeLongStop":"ストップロスとロング","wallet.tradeType.closeLongProfit":"利益を得てさらに平準化する","wallet.tradeType.openShort":"オープンショート","wallet.tradeType.addShort":"短く追加する","wallet.tradeType.closeShort":"空の","wallet.tradeType.closeShortStop":"ストップロス","wallet.tradeType.closeShortProfit":"利益を確定して空売りを終了する","wallet.moneyLogType.purchase":"購入インジケーター","wallet.moneyLogType.recharge":"リチャージ","wallet.moneyLogType.withdraw":"現金を引き出す","wallet.moneyLogType.refund":"払い戻し","wallet.moneyLogType.reward":"報酬","wallet.moneyLogType.income":"収入","wallet.moneyLogType.commission":"手数料","wallet.web3Address.required":"最初に Web3 ウォレットのアドレスを入力してください","wallet.web3Address.requiredDescription":"リチャージする前に、リチャージを受け取るために Web3 ウォレット アドレスをバインドする必要があります。","wallet.web3Address.placeholder":"Web3 ウォレットのアドレスを入力してください (0x で始まる)","wallet.web3Address.save":"ウォレットアドレスを保存する","wallet.web3Address.saveSuccess":"ウォレットアドレスが正常に保存されました","wallet.web3Address.saveFailed":"ウォレットアドレスの保存に失敗しました","wallet.web3Address.invalidFormat":"有効な Web3 ウォレット アドレスを入力してください (イーサリアム形式: 0x で始まる 42 文字、または TRC20 形式: T で始まる 34 文字)","wallet.selectCoin":"通貨を選択してください","wallet.selectChain":"選択チェーン","wallet.chain.eth":"イーサリアム(ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"BSC","wallet.targetQdtAmount":"引き換えたいQDTの量(オプション)","wallet.targetQdtAmount.placeholder":"引き換えたい QDT の数量、現在の QDT 価格を入力してください: {price} USDT","wallet.targetQdtAmount.requiredUsdt":"リチャージが必要: {amount} USDT","wallet.rechargeAddress":"リチャージアドレス","wallet.copyAddress":"コピー","wallet.copySuccess":"コピー成功!","wallet.copyFailed":"コピーに失敗しました。手動でコピーしてください","wallet.rechargeAddressHint":"このアドレスに {coin} を入金するには、必ず {chain} を使用してください。","wallet.qdtPrice.loading":"読み込み中...","wallet.rechargeTip.new":"通貨とチェーンを選択し、下の QR コードをスキャンしてリチャージしてください","wallet.exchangeRate":"1 QDT ≈ {レート} USDT","wallet.withdrawableAmount":"利用可能な現金の量","wallet.totalBalance":"合計残高","wallet.insufficientWithdrawable":"引き出すことができる現金の量が不足しています。現在出金できる金額は次のとおりです: {amount} QDT","wallet.withdrawAddressRequired":"出金アドレスを入力してください","wallet.withdrawAddressHint":"アドレスが正しいことを確認してください。退会後は取り消すことはできません。","wallet.withdrawSubmitSuccess":"出金申請が正常に送信されました。審査をお待ちください","menu.footer.contactUs":"お問い合わせ","menu.footer.getSupport":"サポートを受ける","menu.footer.socialAccounts":"ソーシャルアカウント","menu.footer.userAgreement":"ユーザー同意書","menu.footer.privacyPolicy":"プライバシーポリシー","menu.footer.support":"サポート","menu.footer.featureRequest":"機能リクエスト","menu.footer.email":"電子メール","menu.footer.liveChat":"24時間年中無休のライブチャット","dashboard.analysis.title":"多次元分析","dashboard.analysis.subtitle":"AIを活用した総合財務分析プラットフォーム","dashboard.analysis.selectSymbol":"基礎となるコードを選択または入力します","dashboard.analysis.selectModel":"モデルを選択してください","dashboard.analysis.startAnalysis":"分析を開始する","dashboard.analysis.history":"歴史","dashboard.analysis.tab.overview":"総合的な分析","dashboard.analysis.tab.fundamental":"基本","dashboard.analysis.tab.technical":"テクノロジー","dashboard.analysis.tab.news":"ニュース","dashboard.analysis.tab.sentiment":"感情","dashboard.analysis.tab.risk":"リスク","dashboard.analysis.tab.debate":"長短の議論","dashboard.analysis.tab.decision":"最終決定","dashboard.analysis.empty.selectSymbol":"分析を開始するターゲットを選択してください","dashboard.analysis.empty.selectSymbolDesc":"独自に選択した銘柄リストから選択するか、基礎となるコードを入力して多次元 AI 分析レポートを取得します","dashboard.analysis.empty.startAnalysis":"「分析開始」ボタンをクリックすると、多次元分析が実行されます。","dashboard.analysis.empty.startAnalysisDesc":"ファンダメンタルズ、テクノロジー、ニュース、センチメント、リスクなどの多次元から総合的な分析を提供します。","dashboard.analysis.empty.noData":"現在、{type} の分析データはありません。最初に包括的な分析を行ってください。","dashboard.analysis.empty.noWatchlist":"現在、自主選定銘柄はありません","dashboard.analysis.empty.noHistory":"まだ履歴がありません","dashboard.analysis.empty.watchlistHint":"現在、独自に選択した銘柄はありません。まずご確認ください。","dashboard.analysis.empty.noDebateData":"議論のデータはまだありません","dashboard.analysis.empty.noDecisionData":"決定データはまだありません","dashboard.analysis.empty.selectAgent":"分析結果を表示するにはエージェントを選択してください","dashboard.analysis.loading.analyzing":"分析中です、お待ちください...","dashboard.analysis.loading.fundamental":"基本データを分析中...","dashboard.analysis.loading.technical":"テクニカル指標を分析中...","dashboard.analysis.loading.news":"ニュースデータを分析中...","dashboard.analysis.loading.sentiment":"市場センチメントを分析中...","dashboard.analysis.loading.risk":"リスクを評価中...","dashboard.analysis.loading.debate":"長短の議論は続いています...","dashboard.analysis.loading.decision":"最終決定を生成中...","dashboard.analysis.score.overall":"総合評価","dashboard.analysis.score.recommendation":"投資アドバイス","dashboard.analysis.score.confidence":"自信","dashboard.analysis.dimension.fundamental":"基本","dashboard.analysis.dimension.technical":"テクノロジー","dashboard.analysis.dimension.news":"ニュース","dashboard.analysis.dimension.sentiment":"感情","dashboard.analysis.dimension.risk":"リスク","dashboard.analysis.card.dimensionScores":"各次元の評価","dashboard.analysis.card.overviewReport":"総合分析レポート","dashboard.analysis.card.financialMetrics":"財務指標","dashboard.analysis.card.fundamentalReport":"ファンダメンタルズ分析レポート","dashboard.analysis.card.technicalIndicators":"テクニカル指標","dashboard.analysis.card.technicalReport":"テクニカル分析レポート","dashboard.analysis.card.newsList":"関連ニュース","dashboard.analysis.card.newsReport":"ニュース分析レポート","dashboard.analysis.card.sentimentIndicators":"感情指標","dashboard.analysis.card.sentimentReport":"センチメント分析レポート","dashboard.analysis.card.riskMetrics":"リスク指標","dashboard.analysis.card.riskReport":"リスク評価レポート","dashboard.analysis.card.bullView":"強気の見方(強気)","dashboard.analysis.card.bearView":"弱気の見方(ベア)","dashboard.analysis.card.researchConclusion":"研究者の結論","dashboard.analysis.card.traderPlan":"トレーダープラン","dashboard.analysis.card.riskDebate":"リスク委員会の議論","dashboard.analysis.card.finalDecision":"最終決定","dashboard.analysis.card.tradePlanDetail":"取引プランの詳細","dashboard.analysis.tradingPlan.entry_price":"入場料","dashboard.analysis.tradingPlan.position_size":"ポジションサイズ","dashboard.analysis.tradingPlan.stop_loss":"ストップロス","dashboard.analysis.tradingPlan.take_profit":"利益確定","dashboard.analysis.label.confidence":"自信","dashboard.analysis.label.keyPoints":"コアポイント","dashboard.analysis.label.riskWarning":"リスク警告","dashboard.analysis.risk.risky":"危険な","dashboard.analysis.risk.neutral":"中立的な視点(ニュートラル)","dashboard.analysis.risk.safe":"保守的な見解(安全)","dashboard.analysis.risk.conclusion":"結論","dashboard.analysis.feature.fundamental":"ファンダメンタルズ分析","dashboard.analysis.feature.technical":"テクニカル分析","dashboard.analysis.feature.news":"ニュース分析","dashboard.analysis.feature.sentiment":"感情分析","dashboard.analysis.feature.risk":"リスク評価","dashboard.analysis.watchlist.title":"私の銘柄選択","dashboard.analysis.watchlist.add":"追加する","dashboard.analysis.watchlist.addStock":"在庫を追加する","dashboard.analysis.modal.addStock.title":"オプションのストックを追加する","dashboard.analysis.modal.addStock.confirm":"OK","dashboard.analysis.modal.addStock.cancel":"キャンセル","dashboard.analysis.modal.addStock.market":"市場タイプ","dashboard.analysis.modal.addStock.marketPlaceholder":"マーケットを選択してください","dashboard.analysis.modal.addStock.marketRequired":"マーケットタイプを選択してください","dashboard.analysis.modal.addStock.symbol":"証券コード","dashboard.analysis.modal.addStock.symbolPlaceholder":"例: AAPL、TSLA、GOOGL、000001、BTC","dashboard.analysis.modal.addStock.symbolRequired":"証券コードを入力してください","dashboard.analysis.modal.addStock.searchPlaceholder":"検索対象のコードまたは名前","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"基礎となるコードを検索または入力します (例: AAPL、BTC/USDT、EUR/USD)","dashboard.analysis.modal.addStock.searchOrInputHint":"データベース内のオブジェクトの検索、またはコードの直接入力をサポート (システムが自動的に名前を取得します)","dashboard.analysis.modal.addStock.search":"検索","dashboard.analysis.modal.addStock.searchResults":"検索結果","dashboard.analysis.modal.addStock.hotSymbols":"人気のターゲット","dashboard.analysis.modal.addStock.noHotSymbols":"人気のあるターゲットはまだありません","dashboard.analysis.modal.addStock.selectedSymbol":"選択済み","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"最初にターゲットを選択してください","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"ターゲットを選択するか、最初にターゲット コードを入力してください","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"ターゲットコードを入力してください","dashboard.analysis.modal.addStock.pleaseSelectMarket":"最初にマーケットタイプを選択してください","dashboard.analysis.modal.addStock.searchFailed":"検索に失敗しました。後でもう一度お試しください","dashboard.analysis.modal.addStock.noSearchResults":"一致するターゲットが見つかりません","dashboard.analysis.modal.addStock.willAutoFetchName":"システムが自動的に名前を取得します","dashboard.analysis.modal.addStock.addDirectly":"直接追加","dashboard.analysis.modal.addStock.nameWillBeFetched":"名前は追加時に自動的に取得されます","dashboard.analysis.market.USStock":"米国株","dashboard.analysis.market.Crypto":"暗号通貨","dashboard.analysis.market.Forex":"外国為替","dashboard.analysis.market.Futures":"先物","dashboard.analysis.modal.history.title":"過去の分析記録","dashboard.analysis.modal.history.viewResult":"結果を見る","dashboard.analysis.modal.history.completeTime":"完了時間","dashboard.analysis.modal.history.error":"エラー","dashboard.analysis.status.pending":"保留中","dashboard.analysis.status.processing":"処理中","dashboard.analysis.status.completed":"完了","dashboard.analysis.status.failed":"失敗しました","dashboard.analysis.message.selectSymbol":"最初にターゲットを選択してください","dashboard.analysis.message.taskCreated":"分析タスクが作成され、バックグラウンドで実行されています...","dashboard.analysis.message.analysisComplete":"分析完了","dashboard.analysis.message.analysisCompleteCache":"分析完了(キャッシュされたデータを使用)","dashboard.analysis.message.analysisFailed":"分析に失敗しました。後でもう一度お試しください。","dashboard.analysis.message.addStockSuccess":"正常に追加されました","dashboard.analysis.message.addStockFailed":"追加に失敗しました","dashboard.analysis.message.removeStockSuccess":"正常に削除されました","dashboard.analysis.message.removeStockFailed":"削除に失敗しました","dashboard.analysis.message.resumingAnalysis":"分析タスクを再開しています...","dashboard.analysis.message.deleteSuccess":"正常に削除されました","dashboard.analysis.message.deleteFailed":"削除に失敗しました","dashboard.analysis.modal.history.delete":"削除","dashboard.analysis.modal.history.deleteConfirm":"この分析記録を削除してもよろしいですか?","dashboard.analysis.test":"ショップ番号 {no}、公庄路","dashboard.analysis.introduce":"インジケーターの説明","dashboard.analysis.total-sales":"総売上高","dashboard.analysis.day-sales":"平均日販¥","dashboard.analysis.visits":"訪問","dashboard.analysis.visits-trend":"トラフィックの傾向","dashboard.analysis.visits-ranking":"来店ランキング","dashboard.analysis.day-visits":"毎日の訪問","dashboard.analysis.week":"毎週前年比","dashboard.analysis.day":"前年比","dashboard.analysis.payments":"支払い回数","dashboard.analysis.conversion-rate":"コンバージョン率","dashboard.analysis.operational-effect":"運営活動への影響","dashboard.analysis.sales-trend":"販売動向","dashboard.analysis.sales-ranking":"店舗売上ランキング","dashboard.analysis.all-year":"一年中","dashboard.analysis.all-month":"今月","dashboard.analysis.all-week":"今週","dashboard.analysis.all-day":"今日","dashboard.analysis.search-users":"検索ユーザー数","dashboard.analysis.per-capita-search":"一人当たりの検索数","dashboard.analysis.online-top-search":"オンラインで人気の検索","dashboard.analysis.the-proportion-of-sales":"売上カテゴリー比率","dashboard.analysis.dropdown-option-one":"作戦1","dashboard.analysis.dropdown-option-two":"操作 2","dashboard.analysis.channel.all":"すべてのチャンネル","dashboard.analysis.channel.online":"オンライン","dashboard.analysis.channel.stores":"店","dashboard.analysis.sales":"販売","dashboard.analysis.traffic":"乗客の流れ","dashboard.analysis.table.rank":"ランキング","dashboard.analysis.table.search-keyword":"検索キーワード","dashboard.analysis.table.users":"ユーザー数","dashboard.analysis.table.weekly-range":"毎週の増加","dashboard.indicator.selectSymbol":"基礎となるコードを選択または入力します","dashboard.indicator.emptyWatchlistHint":"現在、独自に選択した銘柄はありません。最初に追加してください。","dashboard.indicator.hint.selectSymbol":"分析を開始するにはターゲットを選択してください","dashboard.indicator.hint.selectSymbolDesc":"K ライン チャートとテクニカル指標を表示するには、上の検索ボックスに銘柄コードを選択または入力します。","dashboard.indicator.retry":"もう一度試してください","dashboard.indicator.panel.title":"テクニカル指標","dashboard.indicator.panel.realtimeOn":"リアルタイム更新をオフにする","dashboard.indicator.panel.realtimeOff":"リアルタイム更新を有効にする","dashboard.indicator.panel.themeLight":"ダークテーマに切り替える","dashboard.indicator.panel.themeDark":"ライトテーマに切り替える","dashboard.indicator.section.enabled":"有効","dashboard.indicator.section.added":"私が追加したインジケーター","dashboard.indicator.section.custom":"自分で作成したインジケーター","dashboard.indicator.section.bought":"購入したインジケーター","dashboard.indicator.section.myCreated":"私が作成したインジケーター","dashboard.indicator.empty":"まだインジケーターがありません。最初にインジケーターを追加または作成してください","dashboard.indicator.buy":"購入インジケーター","dashboard.indicator.action.start":"始める","dashboard.indicator.action.stop":"閉じる","dashboard.indicator.action.edit":"編集","dashboard.indicator.action.delete":"削除","dashboard.indicator.action.backtest":"バックテスト","dashboard.indicator.status.normal":"普通の","dashboard.indicator.status.normalPermanent":"通常(永続的に有効)","dashboard.indicator.status.expired":"期限切れ","dashboard.indicator.expiry.permanent":"永久に有効","dashboard.indicator.expiry.noExpiry":"有効期限なし","dashboard.indicator.expiry.expired":"期限切れ: {日付}","dashboard.indicator.expiry.expiresOn":"有効期限: {日付}","dashboard.indicator.delete.confirmTitle":"削除の確認","dashboard.indicator.delete.confirmContent":"インジケーター「{name}」を削除してもよろしいですか?この操作は元に戻すことができません。","dashboard.indicator.delete.confirmOk":"削除","dashboard.indicator.delete.confirmCancel":"キャンセル","dashboard.indicator.delete.success":"正常に削除されました","dashboard.indicator.delete.failed":"削除に失敗しました","dashboard.indicator.save.success":"正常に保存されました","dashboard.indicator.save.failed":"保存に失敗しました","dashboard.indicator.error.loadWatchlistFailed":"オプションのストックをロードできませんでした","dashboard.indicator.error.chartNotReady":"チャートコンポーネントは初期化されていません。最初にターゲットを選択し、チャートがロードされるまで待ってください。","dashboard.indicator.error.chartMethodNotReady":"グラフ コンポーネント メソッドの準備ができていません。後でもう一度お試しください。","dashboard.indicator.error.chartExecuteNotReady":"チャートコンポーネントの実行メソッドの準備ができていません。後でもう一度試してください。","dashboard.indicator.error.parseFailed":"Pythonコードを解析できません","dashboard.indicator.error.parseFailedCheck":"Python コードを解析できません。コード形式を確認してください。","dashboard.indicator.error.addIndicatorFailed":"インジケーターの追加に失敗しました","dashboard.indicator.error.runIndicatorFailed":"インジケーターの実行に失敗しました","dashboard.indicator.error.pleaseLogin":"まずログインしてください","dashboard.indicator.error.loadDataFailed":"データのロードに失敗しました","dashboard.indicator.error.loadDataFailedDesc":"ネットワーク接続を確認してください","dashboard.indicator.error.pythonEngineFailed":"Python エンジンのロードに失敗したため、インジケーター機能が使用できない可能性があります。","dashboard.indicator.error.chartInitFailed":"チャートの初期化に失敗しました","dashboard.indicator.warning.enterCode":"最初にインジケーターコードを入力してください","dashboard.indicator.warning.pyodideLoadFailed":"Python エンジンのロードに失敗しました","dashboard.indicator.warning.pyodideLoadFailedDesc":"この機能は、現在の地域またはネットワーク環境では利用できません","dashboard.indicator.warning.chartNotInitialized":"グラフが初期化されていないため、線描画ツールが使用できません。","dashboard.indicator.success.runIndicator":"インジケーターは正常に実行されます","dashboard.indicator.success.clearDrawings":"線画をすべてクリアしました","dashboard.indicator.sma":"SMA(移動平均結合)","dashboard.indicator.ema":"EMA (指数移動平均結合)","dashboard.indicator.rsi":"RSI (相対強度)","dashboard.indicator.macd":"MACD","dashboard.indicator.bb":"ボリンジャーバンド","dashboard.indicator.atr":"ATR (平均トゥルーレンジ)","dashboard.indicator.cci":"CCI (商品チャネル指数)","dashboard.indicator.williams":"ウィリアムズ %R (ウィリアムズ指標)","dashboard.indicator.mfi":"MFI(マネーフローインデックス)","dashboard.indicator.adx":"ADX(平均トレンド指数)","dashboard.indicator.obv":"OBV(エネルギー波)","dashboard.indicator.adosc":"ADOSC (アキュムレート/ディスパッチオシレーター)","dashboard.indicator.ad":"AD(蓄電・配電線)","dashboard.indicator.kdj":"KDJ (確率的指標)","dashboard.indicator.signal.buy":"買う","dashboard.indicator.signal.sell":"売る","dashboard.indicator.signal.supertrendBuy":"スーパートレンド購入","dashboard.indicator.signal.supertrendSell":"スーパートレンドセル","dashboard.indicator.chart.kline":"Kライン","dashboard.indicator.chart.volume":"ボリューム","dashboard.indicator.chart.uptrend":"上昇傾向","dashboard.indicator.chart.downtrend":"下降傾向","dashboard.indicator.tooltip.time":"時間","dashboard.indicator.tooltip.open":"開く","dashboard.indicator.tooltip.close":"受け取る","dashboard.indicator.tooltip.high":"高い","dashboard.indicator.tooltip.low":"低い","dashboard.indicator.tooltip.volume":"ボリューム","dashboard.indicator.drawing.line":"線分","dashboard.indicator.drawing.horizontalLine":"水平線","dashboard.indicator.drawing.verticalLine":"縦線","dashboard.indicator.drawing.ray":"光線","dashboard.indicator.drawing.straightLine":"直線","dashboard.indicator.drawing.parallelLine":"平行線","dashboard.indicator.drawing.priceLine":"価格ライン","dashboard.indicator.drawing.priceChannel":"価格チャネル","dashboard.indicator.drawing.fibonacciLine":"フィボナッチライン","dashboard.indicator.drawing.measure":"測定","dashboard.indicator.drawing.clearAll":"線画をすべてクリアする","dashboard.indicator.market.USStock":"米国株","dashboard.indicator.market.Crypto":"暗号通貨","dashboard.indicator.market.Forex":"外国為替","dashboard.indicator.market.Futures":"先物","dashboard.indicator.create":"インジケーターの作成","dashboard.indicator.editor.title":"インジケーターの作成/編集","dashboard.indicator.editor.name":"インジケーター名","dashboard.indicator.editor.nameRequired":"インジケーター名を入力してください","dashboard.indicator.editor.namePlaceholder":"インジケーター名を入力してください","dashboard.indicator.editor.description":"インジケーターの説明","dashboard.indicator.editor.descriptionPlaceholder":"インジケーターの説明を入力してください (オプション)","dashboard.indicator.editor.code":"Pythonコード","dashboard.indicator.editor.codeRequired":"インジケーターコードを入力してください","dashboard.indicator.editor.codePlaceholder":"Python コードを入力してください","dashboard.indicator.editor.run":"走る","dashboard.indicator.editor.runHint":"実行ボタンをクリックして、K ライン チャート上のインジケーターの効果をプレビューします。","dashboard.indicator.editor.guide":"開発ガイド","dashboard.indicator.editor.guideTitle":"Python インジケーター開発ガイド","dashboard.indicator.editor.save":"保存する","dashboard.indicator.editor.cancel":"キャンセル","dashboard.indicator.editor.unnamed":"名前のないインジケーター","dashboard.indicator.editor.publishToCommunity":"コミュニティに投稿する","dashboard.indicator.editor.publishToCommunityHint":"公開されると、他のユーザーがコミュニティでインジケーターを表示して使用できるようになります","dashboard.indicator.editor.indicatorType":"インジケーターの種類","dashboard.indicator.editor.indicatorTypeRequired":"インジケーターのタイプを選択してください","dashboard.indicator.editor.indicatorTypePlaceholder":"インジケーターのタイプを選択してください","dashboard.indicator.editor.previewImage":"プレビュー","dashboard.indicator.editor.uploadImage":"写真をアップロードする","dashboard.indicator.editor.previewImageHint":"推奨サイズ: 800x400、2MB 以下","dashboard.indicator.editor.pricing":"販売価格(QDT)","dashboard.indicator.editor.pricingType.free":"無料","dashboard.indicator.editor.pricingType.permanent":"永久的な","dashboard.indicator.editor.pricingType.monthly":"月々の支払い","dashboard.indicator.editor.price":"価格","dashboard.indicator.editor.priceRequired":"価格を入力してください","dashboard.indicator.editor.pricePlaceholder":"価格を入力してください","dashboard.indicator.editor.pricingHint":"無料のインジケーターの価格は 0 ですが、プラットフォームはインジケーターの使用量と賞賛率に基づいて報酬 (QDT) を与えます。","dashboard.indicator.editor.aiGenerate":"インテリジェントな世代","dashboard.indicator.editor.aiPromptPlaceholder":"あなたのアイデアを教えてください。Python インジケーター コードを生成します。","dashboard.indicator.editor.aiGenerateBtn":"AIが生成したコード","dashboard.indicator.editor.aiPromptRequired":"あなたの考えを入力してください","dashboard.indicator.editor.aiGenerateSuccess":"コード生成が成功しました","dashboard.indicator.editor.aiGenerateError":"コード生成に失敗しました。後でもう一度お試しください。","dashboard.indicator.editor.verifyCode":"コード検証","dashboard.indicator.editor.verifyCodeSuccess":"検証合格","dashboard.indicator.editor.verifyCodeFailed":"検証失敗","dashboard.indicator.editor.verifyCodeEmpty":"コードは空にできません","dashboard.indicator.backtest.title":"インジケーターのバックテスト","dashboard.indicator.backtest.config":"バックテストパラメータ","dashboard.indicator.backtest.startDate":"開始日","dashboard.indicator.backtest.endDate":"終了日","dashboard.indicator.backtest.selectStartDate":"開始日を選択してください","dashboard.indicator.backtest.selectEndDate":"終了日を選択してください","dashboard.indicator.backtest.startDateRequired":"開始日を選択してください","dashboard.indicator.backtest.endDateRequired":"終了日を選択してください","dashboard.indicator.backtest.initialCapital":"初期資本","dashboard.indicator.backtest.initialCapitalRequired":"初期資金を入力してください","dashboard.indicator.backtest.commission":"手数料","dashboard.indicator.backtest.leverage":"レバレッジ比率","dashboard.indicator.backtest.tradeDirection":"取引の方向性","dashboard.indicator.backtest.longOnly":"長く続けてください","dashboard.indicator.backtest.shortOnly":"短い","dashboard.indicator.backtest.both":"双方向","dashboard.indicator.backtest.run":"バックテストを開始する","dashboard.indicator.backtest.rerun":"もう一度バックテスト","dashboard.indicator.backtest.close":"閉じる","dashboard.indicator.backtest.running":"インジケーターのバックテストが進行中です...","dashboard.indicator.backtest.results":"バックテスト結果","dashboard.indicator.backtest.totalReturn":"トータルリターン","dashboard.indicator.backtest.annualReturn":"年収","dashboard.indicator.backtest.maxDrawdown":"最大ドローダウン","dashboard.indicator.backtest.sharpeRatio":"シャープレシオ","dashboard.indicator.backtest.winRate":"勝率","dashboard.indicator.backtest.profitFactor":"損益率","dashboard.indicator.backtest.totalTrades":"トランザクション数","dashboard.indicator.totalReturn":"トータルリターン","dashboard.indicator.annualReturn":"年換算収益率","dashboard.indicator.maxDrawdown":"最大ドローダウン","dashboard.indicator.sharpeRatio":"シャープレシオ","dashboard.indicator.winRate":"勝率","dashboard.indicator.profitFactor":"損益率","dashboard.indicator.totalTrades":"総トランザクション数","dashboard.indicator.backtest.totalCommission":"合計手数料","dashboard.indicator.backtest.equityCurve":"イールドカーブ","dashboard.indicator.backtest.strategy":"指標収入","dashboard.indicator.backtest.benchmark":"ベンチマークリターン","dashboard.indicator.backtest.tradeHistory":"取引履歴","dashboard.indicator.backtest.tradeTime":"時間","dashboard.indicator.backtest.tradeType":"タイプ","dashboard.indicator.backtest.buy":"買う","dashboard.indicator.backtest.sell":"売る","dashboard.indicator.backtest.liquidation":"清算","dashboard.indicator.backtest.openLong":"長く開く","dashboard.indicator.backtest.closeLong":"ピンドゥオ","dashboard.indicator.backtest.closeLongStop":"ロングに近い(ストップロス)","dashboard.indicator.backtest.closeLongProfit":"さらに閉じる(利益確定)","dashboard.indicator.backtest.addLong":"ロングポジションを追加","dashboard.indicator.backtest.openShort":"オープンショート","dashboard.indicator.backtest.closeShort":"空の","dashboard.indicator.backtest.closeShortStop":"クローズ(ストップロス)","dashboard.indicator.backtest.closeShortProfit":"クローズ(利益確定)","dashboard.indicator.backtest.addShort":"ショートポジションを追加","dashboard.indicator.backtest.price":"価格","dashboard.indicator.backtest.amount":"数量","dashboard.indicator.backtest.balance":"口座残高","dashboard.indicator.backtest.profit":"損益","dashboard.indicator.backtest.success":"バックテスト完了","dashboard.indicator.backtest.failed":"バックテストに失敗しました。後でもう一度お試しください","dashboard.indicator.backtest.noIndicatorCode":"このインジケーターにはバックテスト可能なコードはありません","dashboard.indicator.backtest.noSymbol":"最初に取引対象を選択してください","dashboard.indicator.backtest.dateRangeExceeded":"バックテストの時間範囲が制限を超えています: {timeframe} 期間は最大でも {maxRange} までバックテストできます","dashboard.indicator.backtest.dateRangeExceededDays":"Backtest range exceeds limit: {timeframe} max {maxRange} ({maxDays} days)","dashboard.indicator.backtest.metaLine":"Symbol: {symbol} | Market: {market} | Timeframe: {timeframe}","dashboard.indicator.backtest.savedRunId":"Backtest saved. Run ID: {id}","dashboard.indicator.backtest.prev":"Previous","dashboard.indicator.backtest.next":"Next","dashboard.indicator.backtest.steps.strategy.title":"Strategy","dashboard.indicator.backtest.steps.strategy.desc":"Position sizing & risk controls","dashboard.indicator.backtest.steps.trading.title":"Trading settings","dashboard.indicator.backtest.steps.trading.desc":"Time range, capital, fees, leverage","dashboard.indicator.backtest.steps.results.title":"Results","dashboard.indicator.backtest.steps.results.desc":"Backtest output","dashboard.indicator.backtest.panel.risk":"Risk management (SL/TP/Trailing)","dashboard.indicator.backtest.panel.scale":"Scale in / DCA (trend & mean-reversion)","dashboard.indicator.backtest.panel.reduce":"Reduce position (trend & adverse)","dashboard.indicator.backtest.panel.position":"Position sizing","dashboard.indicator.backtest.field.stopLossPct":"Stop Loss (%)","dashboard.indicator.backtest.field.takeProfitPct":"Take Profit (%)","dashboard.indicator.backtest.field.trailingEnabled":"Trailing stop / take profit","dashboard.indicator.backtest.field.trailingStopPct":"Trailing drawdown (%)","dashboard.indicator.backtest.field.trailingActivationPct":"Trailing activation (%)","dashboard.indicator.backtest.field.slippage":"Slippage (%)","dashboard.indicator.backtest.field.trendAddEnabled":"Trend-following scale-in","dashboard.indicator.backtest.field.dcaAddEnabled":"Mean-reversion DCA","dashboard.indicator.backtest.field.trendAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.dcaAddStepPct":"DCA trigger (%)","dashboard.indicator.backtest.field.trendAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.dcaAddSizePct":"DCA size (% of capital)","dashboard.indicator.backtest.field.trendAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.dcaAddMaxTimes":"Max DCA times","dashboard.indicator.backtest.field.trendReduceEnabled":"Trend reduce","dashboard.indicator.backtest.field.adverseReduceEnabled":"Adverse reduce","dashboard.indicator.backtest.field.trendReduceStepPct":"Trend trigger (%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"Adverse trigger (%)","dashboard.indicator.backtest.field.trendReduceSizePct":"Reduce size (% of position)","dashboard.indicator.backtest.field.adverseReduceSizePct":"Adverse reduce size (% of position)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"Max trend reduce times","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"Max adverse reduce times","dashboard.indicator.backtest.field.entryPct":"Entry size (% of capital)","dashboard.indicator.backtest.field.minOrderPct":"Min order size (% of capital) (optional)","dashboard.indicator.backtest.closeLongTrailing":"Close Long (Trailing)","dashboard.indicator.backtest.reduceLong":"Reduce Long","dashboard.indicator.backtest.closeShortTrailing":"Close Short (Trailing)","dashboard.indicator.backtest.reduceShort":"Reduce Short","dashboard.docs.title":"ドキュメントセンター","dashboard.docs.search.placeholder":"ドキュメントを検索...","dashboard.docs.category.all":"すべて","dashboard.docs.category.guide":"開発ガイド","dashboard.docs.category.api":"APIドキュメント","dashboard.docs.category.tutorial":"チュートリアル","dashboard.docs.category.faq":"よくある質問","dashboard.docs.featured.title":"推奨ドキュメント","dashboard.docs.featured.tag":"おすすめ","dashboard.docs.list.views":"閲覧する","dashboard.docs.list.author":"著者","dashboard.docs.list.empty":"まだ文書がありません","dashboard.docs.list.backToAll":"すべてのドキュメントに戻る","dashboard.docs.list.total":"合計 {count} 個のドキュメント","dashboard.docs.detail.back":"ドキュメントリストに戻る","dashboard.docs.detail.updatedAt":"に更新されました","dashboard.docs.detail.related":"関連資料","dashboard.docs.detail.notFound":"ドキュメントが存在しません","dashboard.docs.detail.error":"ドキュメントが存在しないか削除されています","dashboard.docs.search.result":"検索結果","dashboard.docs.search.keyword":"キーワード","community.filter.indicatorType":"インジケーターの種類","community.filter.all":"すべて","community.filter.other":"その他のオプション","community.filter.pricing":"価格タイプ","community.filter.allPricing":"すべての価格設定","community.filter.sortBy":"並べ替え順","community.filter.search":"検索","community.filter.searchPlaceholder":"検索メトリクス名","community.indicatorType.trend":"トレンドタイプ","community.indicatorType.momentum":"勢いタイプ","community.indicatorType.volatility":"ボラティリティ","community.indicatorType.volume":"ボリューム","community.indicatorType.custom":"カスタマイズ","community.pricing.free":"無料","community.pricing.paid":"支払う","community.sort.downloads":"ダウンロード","community.sort.rating":"評価","community.sort.newest":"最新リリース","community.pagination.total":"合計 {total} 個のインジケーター","community.noDescription":"まだ説明がありません","community.detail.type":"タイプ","community.detail.pricing":"価格設定","community.detail.rating":"評価","community.detail.downloads":"ダウンロード","community.detail.author":"著者","community.detail.description":"はじめに","community.detail.detailContent":"詳細な説明","community.detail.backtestStats":"バックテスト統計","community.action.purchase":"購入インジケーター","community.action.addToMyIndicators":"私のインジケーターに追加","community.action.favorite":"コレクション","community.action.unfavorite":"お気に入りをキャンセルする","community.action.buyNow":"今すぐ購入","community.action.renew":"リニューアル","community.purchase.price":"価格","community.purchase.permanent":"永久的な","community.purchase.monthly":"月","community.purchase.confirmBuy":"このインジケーター ({price} QDT) を購入することを確認しますか?","community.purchase.confirmRenew":"このインジケーター ({price} QDT/月) を更新することを確認しますか?","community.purchase.confirmFree":"この無料インジケーターを追加することを確認しますか?","community.purchase.confirmTitle":"アクションの確認","community.purchase.owned":"このインジケーターを購入しました (永久に有効です)","community.purchase.ownIndicator":"これはあなたが公開した指標です","community.purchase.expired":"サブスクリプションの有効期限が切れました","community.purchase.expiresOn":"有効期限: {日付}","community.tabs.detail":"インジケーターの詳細","community.tabs.backtest":"バックテストデータ","community.tabs.ratings":"ユーザーレビュー","community.rating.myRating":"私の評価","community.rating.stars":"{count} 個の星","community.rating.commentPlaceholder":"あなたの経験を共有してください...","community.rating.submit":"評価を送信する","community.rating.modify":"変更","community.rating.saveModify":"変更を保存する","community.rating.cancel":"キャンセル","community.rating.selectRating":"評価を選択してください","community.rating.success":"評価が成功しました","community.rating.modifySuccess":"レビューが正常に変更されました","community.rating.failed":"評価に失敗しました","community.rating.noRatings":"まだコメントはありません","community.backtest.note":"上記のデータは過去のバックテスト結果であり、参考のみを目的としており、将来の収益を示すものではありません。","community.backtest.noData":"バックテストデータはまだありません","community.backtest.uploadHint":"作者はまだバックテストデータをアップロードしていません","community.message.loadFailed":"インジケーターリストのロードに失敗しました","community.message.purchaseProcessing":"購入リクエストを処理しています...","community.message.downloadSuccess":"メトリックがメトリック リストに追加されました","community.message.favoriteSuccess":"収集に成功しました","community.message.unfavoriteSuccess":"収集を正常にキャンセルしました","community.message.operationSuccess":"操作は成功しました","community.message.operationFailed":"操作が失敗しました","community.banner.readOnly":"閲覧のみ","community.banner.loginHint":"ログインまたは登録が必要な場合は、ボタンをクリックして独立したページに移動し、CSRFの問題を回避してください","community.banner.jumpButton":"ログイン/登録へ","dashboard.totalEquity":"総資本","dashboard.totalPnL":"損益通算","dashboard.aiStrategies":"AI戦略","dashboard.indicatorStrategies":"指標戦略","dashboard.running":"ランニング","dashboard.pnlHistory":"過去の損益","dashboard.strategyPerformance":"戦略損益率","dashboard.recentTrades":"最近の取引","dashboard.currentPositions":"現在位置","dashboard.table.time":"時間","dashboard.table.strategy":"ポリシー名","dashboard.table.symbol":"ターゲット","dashboard.table.type":"タイプ","dashboard.table.side":"方向","dashboard.table.size":"建玉","dashboard.table.entryPrice":"平均始値","dashboard.table.price":"価格","dashboard.table.amount":"数量","dashboard.table.profit":"損益","dashboard.pendingOrders":"注文実行記録","dashboard.totalOrders":"合計 {total} 件","dashboard.viewError":"エラーを表示","dashboard.filled":"約定済み","dashboard.orderTable.time":"作成時間","dashboard.orderTable.strategy":"戦略","dashboard.orderTable.symbol":"取引ペア","dashboard.orderTable.signalType":"シグナルタイプ","dashboard.orderTable.amount":"数量","dashboard.orderTable.price":"約定価格","dashboard.orderTable.status":"ステータス","dashboard.orderTable.executedAt":"実行時間","dashboard.signalType.openLong":"ロング開始","dashboard.signalType.openShort":"ショート開始","dashboard.signalType.closeLong":"ロング決済","dashboard.signalType.closeShort":"ショート決済","dashboard.signalType.addLong":"ロング追加","dashboard.signalType.addShort":"ショート追加","dashboard.status.pending":"保留中","dashboard.status.processing":"処理中","dashboard.status.completed":"完了","dashboard.status.failed":"失敗","dashboard.status.cancelled":"キャンセル済み","dashboard.table.pnl":"未実現損益","form.basic-form.basic.title":"基本形","form.basic-form.basic.description":"フォーム ページは、ユーザーからの情報を収集または確認するために使用されます。 基本フォームは、データ項目が少ないフォーム シナリオでよく使用されます。","form.basic-form.title.label":"タイトル","form.basic-form.title.placeholder":"目標に名前を付けます","form.basic-form.title.required":"タイトルを入力してください","form.basic-form.date.label":"開始日と終了日","form.basic-form.placeholder.start":"開始日","form.basic-form.placeholder.end":"終了日","form.basic-form.date.required":"開始日と終了日を選択してください","form.basic-form.goal.label":"目標の説明","form.basic-form.goal.placeholder":"段階的な作業目標を入力してください","form.basic-form.goal.required":"目標の説明を入力してください","form.basic-form.standard.label":"測る","form.basic-form.standard.placeholder":"指標を入力してください","form.basic-form.standard.required":"指標を入力してください","form.basic-form.client.label":"お客様","form.basic-form.client.required":"あなたがサービスを提供しているクライアントについて説明してください","form.basic-form.label.tooltip":"対象サービス受信者","form.basic-form.client.placeholder":"あなたがサービスを提供している顧客、内部顧客について直接説明してください @名前/役職番号","form.basic-form.invites.label":"査読者を招待する","form.basic-form.invites.placeholder":"@名前/従業員番号を直接送信してください。最大 5 人まで招待できます","form.basic-form.weight.label":"重量","form.basic-form.weight.placeholder":"入力してください","form.basic-form.public.label":"ターゲットパブリック","form.basic-form.label.help":"顧客とレビュー担当者はデフォルトで共有されます","form.basic-form.radio.public":"公共の","form.basic-form.radio.partially-public":"部分的に公開","form.basic-form.radio.private":"プライベート","form.basic-form.publicUsers.placeholder":"にオープン","form.basic-form.option.A":"同僚1","form.basic-form.option.B":"同僚2","form.basic-form.option.C":"同僚3人","form.basic-form.email.required":"メールアドレスを入力してください!","form.basic-form.email.wrong-format":"メールアドレスの形式が間違っています!","form.basic-form.userName.required":"ユーザー名を入力してください!","form.basic-form.password.required":"パスワードを入力してください。","form.basic-form.password.twice":"2 回入力したパスワードが一致しません。","form.basic-form.strength.msg":"6文字以上を入力してください。 推測されやすいパスワードは使用しないでください。","form.basic-form.strength.strong":"強さ: 強い","form.basic-form.strength.medium":"強さ: 中","form.basic-form.strength.short":"強さ:短すぎる","form.basic-form.confirm-password.required":"パスワードを確認してください。","form.basic-form.phone-number.required":"携帯電話番号を入力してください!","form.basic-form.phone-number.wrong-format":"携帯電話番号の形式が間違っています。","form.basic-form.verification-code.required":"確認コードを入力してください。","form.basic-form.form.get-captcha":"確認コードを取得する","form.basic-form.captcha.second":"秒","form.basic-form.form.optional":"(オプション)","form.basic-form.form.submit":"送信する","form.basic-form.form.save":"保存する","form.basic-form.email.placeholder":"電子メール","form.basic-form.password.placeholder":"パスワードは 6 文字以上、大文字と小文字は区別されます","form.basic-form.confirm-password.placeholder":"パスワードの確認","form.basic-form.phone-number.placeholder":"携帯電話番号","form.basic-form.verification-code.placeholder":"認証コード","result.success.title":"送信成功","result.success.description":"投入結果ページは、一連の運用タスクの処理結果をフィードバックするために使用されます。単純な操作のみの場合は、メッセージ グローバル プロンプト フィードバックを使用します。このテキストエリアには簡単な補足説明を表示できます。 「ドキュメント」を表示する必要がある場合は、下の灰色の領域にさらに複雑なコンテンツを表示できます。","result.success.operate-title":"プロジェクト名","result.success.operate-id":"プロジェクトID","result.success.principal":"担当者","result.success.operate-time":"効果時間","result.success.step1-title":"プロジェクトの作成","result.success.step1-operator":"ク・リリ","result.success.step2-title":"部門の事前審査","result.success.step2-operator":"周猫猫","result.success.step2-extra":"緊急","result.success.step3-title":"財務レビュー","result.success.step4-title":"完了","result.success.btn-return":"リストに戻る","result.success.btn-project":"アイテムを見る","result.success.btn-print":"印刷する","result.fail.error.title":"送信に失敗しました","result.fail.error.description":"再送信する前に、次の情報を確認して変更してください。","result.fail.error.hint-title":"送信したコンテンツには次のエラーが含まれています。","result.fail.error.hint-text1":"あなたのアカウントは凍結されました","result.fail.error.hint-btn1":"すぐに解凍してください","result.fail.error.hint-text2":"あなたのアカウントはまだ申請する資格がありません","result.fail.error.hint-btn2":"今すぐアップグレードしてください","result.fail.error.btn-text":"修正に戻る","account.settings.menuMap.custom":"パーソナライゼーション","account.settings.menuMap.binding":"アカウントバインディング","account.settings.basic.avatar":"アバター","account.settings.basic.change-avatar":"アバターの変更","account.settings.basic.email":"電子メール","account.settings.basic.email-message":"メールアドレスを入力してください。","account.settings.basic.nickname":"ニックネーム","account.settings.basic.nickname-message":"ニックネームを入力してください!","account.settings.basic.profile":"プロフィール","account.settings.basic.profile-message":"あなたの個人プロフィールを入力してください!","account.settings.basic.profile-placeholder":"プロフィール","account.settings.basic.country":"国/地域","account.settings.basic.country-message":"あなたの国または地域を入力してください。","account.settings.basic.geographic":"県と市","account.settings.basic.geographic-message":"あなたの都道府県と市区町村を入力してください。","account.settings.basic.address":"住所","account.settings.basic.address-message":"住所を入力してください。","account.settings.basic.phone":"連絡先番号","account.settings.basic.phone-message":"連絡先番号を入力してください。","account.settings.basic.update":"基本情報を更新","account.settings.basic.update.success":"基本情報が正常に更新されました","account.settings.security.strong":"強い","account.settings.security.medium":"で","account.settings.security.weak":"弱い","account.settings.security.password":"アカウントのパスワード","account.settings.security.password-description":"現在のパスワードの強度:","account.settings.security.phone":"セキュリティ携帯電話","account.settings.security.phone-description":"すでにバインドされている携帯電話:","account.settings.security.question":"セキュリティの問題","account.settings.security.question-description":"秘密の質問は設定されていないため、アカウントのセキュリティを効果的に保護できます。","account.settings.security.email":"電子メールをバインドする","account.settings.security.email-description":"すでにバインドされている電子メール アドレス:","account.settings.security.mfa":"MFAデバイス","account.settings.security.mfa-description":"MFA デバイスはバインドされていません。バインド後、再度確認できます。","account.settings.security.modify":"変更","account.settings.security.set":"設定","account.settings.security.bind":"バインディング","account.settings.binding.taobao":"タオバオをバインドする","account.settings.binding.taobao-description":"タオバオアカウントは現在バインドされていません","account.settings.binding.alipay":"Alipayをバインドする","account.settings.binding.alipay-description":"Alipay アカウントは現在バインドされていません","account.settings.binding.dingding":"バインディングディントーク","account.settings.binding.dingding-description":"現在バインドされている DingTalk アカウントはありません","account.settings.binding.bind":"バインディング","account.settings.notification.password":"アカウントのパスワード","account.settings.notification.password-description":"他のユーザーからのメッセージは、サイトメッセージの形式で通知されます。","account.settings.notification.messages":"システムメッセージ","account.settings.notification.messages-description":"システム メッセージはサイト メッセージの形式で通知されます。","account.settings.notification.todo":"ToDoタスク","account.settings.notification.todo-description":"To Do タスクはサイト内メッセージの形式で通知されます","account.settings.settings.open":"開く","account.settings.settings.close":"閉じる","trading-assistant.title":"取引アシスタント","trading-assistant.strategyList":"戦略一覧","trading-assistant.createStrategy":"ポリシーの作成","trading-assistant.noStrategy":"まだ戦略はありません","trading-assistant.selectStrategy":"詳細を表示するには、左側から戦略を選択してください","trading-assistant.startStrategy":"戦略を立ち上げる","trading-assistant.stopStrategy":"戦略を停止する","trading-assistant.editStrategy":"編集戦略","trading-assistant.deleteStrategy":"ポリシーの削除","trading-assistant.status.running":"ランニング","trading-assistant.status.stopped":"停止しました","trading-assistant.status.error":"エラー","trading-assistant.strategyType.IndicatorStrategy":"テクニカル指標戦略","trading-assistant.strategyType.PromptBasedStrategy":"合言葉戦略","trading-assistant.strategyType.GridStrategy":"グリッド戦略","trading-assistant.tabs.tradingRecords":"取引履歴","trading-assistant.tabs.positions":"位置記録","trading-assistant.tabs.equityCurve":"資本曲線","trading-assistant.form.step1":"インジケーターの選択","trading-assistant.form.step2":"Exchangeの構成","trading-assistant.form.step3":"戦略パラメータ","trading-assistant.form.indicator":"インジケーターの選択","trading-assistant.form.indicatorHint":"購入または作成したテクニカル指標のみを選択できます","trading-assistant.form.qdtCostHints":"戦略を使用すると QDT が消費されます。アカウントに十分な QDT 残高があることを確認してください。","trading-assistant.form.indicatorDescription":"インジケーターの説明","trading-assistant.form.noDescription":"まだ説明がありません","trading-assistant.form.exchange":"交換を選択","trading-assistant.form.apiKey":"APIキー","trading-assistant.form.secretKey":"秘密鍵","trading-assistant.form.passphrase":"パスフレーズ","trading-assistant.form.testConnection":"テスト接続","trading-assistant.form.strategyName":"ポリシー名","trading-assistant.form.symbol":"取引ペア","trading-assistant.form.symbolHint":"現在、暗号通貨取引ペアのみがサポートされています","trading-assistant.form.initialCapital":"投資額","trading-assistant.form.marketType":"市場タイプ","trading-assistant.form.marketTypeFutures":"契約","trading-assistant.form.marketTypeSpot":"スポット","trading-assistant.form.marketTypeHint":"この契約は双方向の取引とレバレッジをサポートしますが、スポットはロングポジションのみをサポートし、レバレッジは 1 倍に固定されます。","trading-assistant.form.leverage":"複数を活用する","trading-assistant.form.leverageHint":"契約:1~125回、スポット:固定1回","trading-assistant.form.spotLeverageFixed":"現物取引のレバレッジは1倍に固定されます","trading-assistant.form.spotOnlyLongHint":"スポット取引はロングポジションのみをサポートします","trading-assistant.form.tradeDirection":"取引の方向性","trading-assistant.form.tradeDirectionLong":"ただ長いだけ","trading-assistant.form.tradeDirectionShort":"短いだけ","trading-assistant.form.tradeDirectionBoth":"双方向取引","trading-assistant.form.timeframe":"期間","trading-assistant.form.klinePeriod":"K線期間","trading-assistant.form.timeframe1m":"1分","trading-assistant.form.timeframe5m":"5分","trading-assistant.form.timeframe15m":"15分","trading-assistant.form.timeframe30m":"30分","trading-assistant.form.timeframe1H":"1時間","trading-assistant.form.timeframe4H":"4時間","trading-assistant.form.timeframe1D":"1日","trading-assistant.form.selectStrategyType":"戦略タイプを選択","trading-assistant.form.indicatorStrategy":"インジケーター戦略","trading-assistant.form.indicatorStrategyDesc":"テクニカルインジケーターに基づく自動取引戦略","trading-assistant.form.aiStrategy":"AI戦略","trading-assistant.form.aiStrategyDesc":"AIインテリジェント意思決定に基づく自動取引戦略","trading-assistant.form.enableAiFilter":"AIインテリジェント意思決定フィルターを有効化","trading-assistant.form.enableAiFilterHint":"有効にすると、インジケーターシグナルがAIによってフィルタリングされ、取引品質が向上します","trading-assistant.form.aiFilterPrompt":"カスタムプロンプト","trading-assistant.form.aiFilterPromptHint":"AIフィルタリングにカスタム指示を提供し、空白のままにするとシステムデフォルトを使用します","trading-assistant.validation.strategyTypeRequired":"戦略タイプを選択してください","trading-assistant.form.advancedSettings":"詳細設定","trading-assistant.form.orderMode":"オーダーモード","trading-assistant.form.orderModeMaker":"メーカー","trading-assistant.form.orderModeTaker":"市場価格(テイカー)","trading-assistant.form.orderModeHint":"未決注文モードでは指値注文が使用され、手数料が安くなります。市場価格モードはすぐに実行され、手数料が高くなります。","trading-assistant.form.makerWaitSec":"未決注文の待ち時間 (秒)","trading-assistant.form.makerWaitSecHint":"注文後の取引を待つ時間。キャンセルして、タイムアウト後に再試行してください。","trading-assistant.form.makerRetries":"未決注文の再試行回数","trading-assistant.form.makerRetriesHint":"未決注文が約定しない場合の最大リトライ回数","trading-assistant.form.fallbackToMarket":"未決注文は失敗し、市場価格は引き下げられます。","trading-assistant.form.fallbackToMarketHint":"開始/終了未決注文が完了していない場合、トランザクションを確実に完了させるために成行注文にダウングレードする必要があるかどうか。","trading-assistant.form.marginMode":"マージンモード","trading-assistant.form.marginModeCross":"倉庫がいっぱい","trading-assistant.form.marginModeIsolated":"孤立した位置","trading-assistant.form.stopLossPct":"ストップロス率(%)","trading-assistant.form.stopLossPctHint":"ストップロスのパーセンテージを設定します。0 はストップロスが有効になっていないことを意味します","trading-assistant.form.takeProfitPct":"テイクプロフィット率(%)","trading-assistant.form.takeProfitPctHint":"テイクプロフィットのパーセンテージを設定します。0 はテイクプロフィットを無効にすることを意味します","trading-assistant.form.signalMode":"信号モード","trading-assistant.form.signalModeConfirmed":"確認モード","trading-assistant.form.signalModeAggressive":"アグレッシブモード","trading-assistant.form.signalModeHint":"確認モード: 完了した K 行のみをチェックします。アグレッシブ モード: K ラインの形成もチェックします","trading-assistant.form.cancel":"キャンセル","trading-assistant.form.prev":"前のステップ","trading-assistant.form.next":"次のステップ","trading-assistant.form.confirmCreate":"作成の確認","trading-assistant.form.confirmEdit":"変更を確認する","trading-assistant.messages.createSuccess":"戦略が正常に作成されました","trading-assistant.messages.createFailed":"ポリシーの作成に失敗しました","trading-assistant.messages.updateSuccess":"ポリシーの更新が成功しました","trading-assistant.messages.updateFailed":"ポリシーの更新に失敗しました","trading-assistant.messages.deleteSuccess":"ポリシーの削除が成功しました","trading-assistant.messages.deleteFailed":"ポリシーの削除に失敗しました","trading-assistant.messages.startSuccess":"戦略は無事に開始されました","trading-assistant.messages.startFailed":"ポリシーの開始に失敗しました","trading-assistant.messages.stopSuccess":"戦略は正常に停止されました","trading-assistant.messages.stopFailed":"停止戦略は失敗しました","trading-assistant.messages.loadFailed":"ポリシーリストの取得に失敗しました","trading-assistant.messages.runningWarning":"戦略は実行されています。 戦略を変更する前に戦略を停止してください。","trading-assistant.messages.deleteConfirmWithName":"ポリシー「{name}」を削除してもよろしいですか?この操作は元に戻すことができません。","trading-assistant.messages.deleteConfirm":"このポリシーを削除してもよろしいですか?この操作は元に戻すことができません。","trading-assistant.messages.loadTradesFailed":"取引記録の取得に失敗しました","trading-assistant.messages.loadPositionsFailed":"位置レコードの取得に失敗しました","trading-assistant.messages.loadEquityFailed":"資本曲線の取得に失敗しました","trading-assistant.messages.loadIndicatorsFailed":"インジケーター リストの読み込みに失敗しました。後でもう一度お試しください。","trading-assistant.messages.spotLimitations":"スポット取引は自動的にロングのみ、レバレッジ1倍に設定されています","trading-assistant.messages.autoFillApiConfig":"取引所の過去の API 設定が自動的に入力されます","trading-assistant.placeholders.selectIndicator":"インジケーターを選択してください","trading-assistant.placeholders.selectExchange":"交換を選択してください","trading-assistant.placeholders.inputApiKey":"APIキーを入力してください","trading-assistant.placeholders.inputSecretKey":"秘密キーを入力してください","trading-assistant.placeholders.inputPassphrase":"パスフレーズを入力してください","trading-assistant.placeholders.inputStrategyName":"ポリシー名を入力してください","trading-assistant.placeholders.selectSymbol":"取引ペアを選択してください","trading-assistant.placeholders.selectTimeframe":"期間を選択してください","trading-assistant.placeholders.selectKlinePeriod":"K線期間を選択してください","trading-assistant.placeholders.inputAiFilterPrompt":"カスタムプロンプトを入力してください(オプション)","trading-assistant.validation.indicatorRequired":"インジケーターを選択してください","trading-assistant.validation.exchangeRequired":"交換を選択してください","trading-assistant.validation.apiKeyRequired":"APIキーを入力してください","trading-assistant.validation.secretKeyRequired":"秘密キーを入力してください","trading-assistant.validation.passphraseRequired":"パスフレーズを入力してください","trading-assistant.validation.exchangeConfigIncomplete":"完全な交換構成情報を入力してください","trading-assistant.validation.testConnectionRequired":"まず「テスト接続」ボタンをクリックし、接続が成功することを確認してください","trading-assistant.validation.testConnectionFailed":"接続テストに失敗しました。設定を確認して再度テストしてください","trading-assistant.validation.credentialRequired":"まず個人センターで取引所の認証情報を追加してテストしてください","trading-assistant.validation.strategyNameRequired":"ポリシー名を入力してください","trading-assistant.validation.symbolRequired":"取引ペアを選択してください","trading-assistant.validation.initialCapitalRequired":"投資額を入力してください","trading-assistant.validation.leverageRequired":"レバレッジ比率を入力してください","trading-assistant.table.time":"時間","trading-assistant.table.type":"タイプ","trading-assistant.table.price":"価格","trading-assistant.table.amount":"数量","trading-assistant.table.value":"金額","trading-assistant.table.commission":"手数料","trading-assistant.table.symbol":"取引ペア","trading-assistant.table.side":"方向","trading-assistant.table.size":"ポジション数量","trading-assistant.table.entryPrice":"オープン価格","trading-assistant.table.currentPrice":"現在の価格","trading-assistant.table.unrealizedPnl":"未実現損益","trading-assistant.table.pnlPercent":"損益率","trading-assistant.table.buy":"買う","trading-assistant.table.sell":"売る","trading-assistant.table.long":"長く続けてください","trading-assistant.table.short":"短い","trading-assistant.table.noPositions":"まだポジションがありません","trading-assistant.detail.title":"戦略の詳細","trading-assistant.detail.strategyName":"ポリシー名","trading-assistant.detail.strategyType":"戦略タイプ","trading-assistant.detail.status":"ステータス","trading-assistant.detail.tradingMode":"取引モデル","trading-assistant.detail.exchange":"交換","trading-assistant.detail.initialCapital":"初期資本","trading-assistant.detail.totalInvestment":"投資総額","trading-assistant.detail.currentEquity":"現在の純資産","trading-assistant.detail.totalPnl":"損益通算","trading-assistant.detail.indicatorName":"インジケーター名","trading-assistant.detail.maxLeverage":"最大レバレッジ","trading-assistant.detail.decideInterval":"決定間隔","trading-assistant.detail.symbols":"トランザクションオブジェクト","trading-assistant.detail.createdAt":"作成時間","trading-assistant.detail.updatedAt":"更新時間","trading-assistant.detail.llmConfig":"AIモデル構成","trading-assistant.detail.exchangeConfig":"Exchangeの構成","trading-assistant.detail.provider":"プロバイダー","trading-assistant.detail.modelId":"モデルID","trading-assistant.detail.close":"閉じる","trading-assistant.detail.loadFailed":"ポリシーの詳細を取得できませんでした","trading-assistant.equity.noData":"純資産データはまだありません","trading-assistant.equity.equity":"純資産","trading-assistant.exchange.tradingMode":"取引モデル","trading-assistant.exchange.virtual":"模擬取引","trading-assistant.exchange.live":"実際のトランザクション","trading-assistant.exchange.selectExchange":"交換を選択","trading-assistant.exchange.walletAddress":"ウォレットアドレス","trading-assistant.exchange.walletAddressPlaceholder":"ウォレットアドレスを入力してください(0xで始まる)","trading-assistant.exchange.privateKey":"秘密鍵","trading-assistant.exchange.privateKeyPlaceholder":"秘密キーを入力してください(64文字)","trading-assistant.exchange.testConnection":"テスト接続","trading-assistant.exchange.connectionSuccess":"接続成功","trading-assistant.exchange.connectionFailed":"接続に失敗しました","trading-assistant.exchange.testFailed":"接続テストに失敗しました","trading-assistant.exchange.fillComplete":"完全な交換構成情報を入力してください","trading-assistant.strategyTypeOptions.ai":"AI主導の戦略","trading-assistant.strategyTypeOptions.indicator":"テクニカル指標戦略","trading-assistant.strategyTypeOptions.aiDeveloping":"AIを活用した戦略機能は開発中ですのでご期待ください","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"AI主導の戦略機能は開発中です","trading-assistant.indicatorType.trend":"トレンド","trading-assistant.indicatorType.momentum":"勢い","trading-assistant.indicatorType.volatility":"変動","trading-assistant.indicatorType.volume":"ボリューム","trading-assistant.indicatorType.custom":"カスタマイズ","trading-assistant.exchangeNames":{okx:"OKX",binance:"バイナンス",hyperliquid:"超流動性",blockchaincom:"Blockchain.com",coinbaseexchange:"コインベース",gate:"Gate.io",mexc:"メキシコ",kraken:"クラーケン",bitfinex:"ビットフィネックス",bybit:"バイビット",kucoin:"クーコイン",huobi:"フォビ",bitget:"ビゲット",bitmex:"ビットメックス",deribit:"デリビット",phemex:"フェメックス",bitmart:"ビットマート",bitstamp:"ビットスタンプ",bittrex:"ビットレックス",poloniex:"ポロニエックス",gemini:"ジェミニ",cryptocom:"Crypto.com",bitflyer:"ビットフライヤー",upbit:"アップビット",bithumb:"ビサム",coinone:"コイノン",zb:"ZB",lbank:"Lバンク",bibox:"ビボックス",bigone:"ビッグワン",bitrue:"ビトゥルー",coinex:"CoinEx",digifinex:"デジフィネックス",ftx:"FTX",ftxus:"FTX米国",binanceus:"バイナンスUS",binancecoinm:"バイナンス COIN-M",binanceusdm:"バイナンスUSDⓈ-M",deepcoin:"ディープコイン"},"ai-trading-assistant.title":"AI取引アシスタント","ai-trading-assistant.strategyList":"戦略一覧","ai-trading-assistant.createStrategy":"ポリシーの作成","ai-trading-assistant.noStrategy":"まだ戦略はありません","ai-trading-assistant.selectStrategy":"詳細を表示するには、左側から戦略を選択してください","ai-trading-assistant.startStrategy":"戦略を立ち上げる","ai-trading-assistant.stopStrategy":"戦略を停止する","ai-trading-assistant.editStrategy":"編集戦略","ai-trading-assistant.deleteStrategy":"ポリシーの削除","ai-trading-assistant.status.running":"ランニング","ai-trading-assistant.status.stopped":"停止しました","ai-trading-assistant.status.error":"エラー","ai-trading-assistant.tabs.tradingRecords":"取引履歴","ai-trading-assistant.tabs.positions":"位置記録","ai-trading-assistant.tabs.aiDecisions":"AI判定記録","ai-trading-assistant.tabs.equityCurve":"資本曲線","ai-trading-assistant.form.createTitle":"AI取引戦略を作成する","ai-trading-assistant.form.editTitle":"AI取引戦略を編集する","ai-trading-assistant.form.strategyName":"ポリシー名","ai-trading-assistant.form.modelId":"AIモデル","ai-trading-assistant.form.modelIdHint":"API キーを設定せずにシステム OpenRouter サービスを使用する","ai-trading-assistant.form.decideInterval":"決定間隔","ai-trading-assistant.form.decideInterval5m":"5分","ai-trading-assistant.form.decideInterval10m":"10分","ai-trading-assistant.form.decideInterval30m":"30分","ai-trading-assistant.form.decideInterval1h":"1時間","ai-trading-assistant.form.decideInterval4h":"4時間","ai-trading-assistant.form.decideInterval1d":"1日","ai-trading-assistant.form.decideInterval1w":"1週間","ai-trading-assistant.form.decideIntervalHint":"AIが意思決定を行うまでの時間間隔","ai-trading-assistant.form.runPeriod":"実行サイクル","ai-trading-assistant.form.runPeriodHint":"戦略実行の開始時刻と終了時刻","ai-trading-assistant.form.startDate":"開始日","ai-trading-assistant.form.endDate":"終了日","ai-trading-assistant.form.qdtCostTitle":"QDT 控除の指示","ai-trading-assistant.form.qdtCostHint":"AI の決定ごとに {cost} QDT が差し引かれます。アカウントに十分な QDT 残高があることを確認してください。戦略の実行中、決定ごとに料金がリアルタイムで差し引かれます。","ai-trading-assistant.form.apiKey":"APIキー","ai-trading-assistant.form.exchange":"交換を選択","ai-trading-assistant.form.secretKey":"秘密鍵","ai-trading-assistant.form.passphrase":"パスフレーズ","ai-trading-assistant.form.testConnection":"テスト接続","ai-trading-assistant.form.symbol":"取引ペア","ai-trading-assistant.form.symbolHint":"取引する取引ペアを選択してください","ai-trading-assistant.form.initialCapital":"投資額(証拠金)","ai-trading-assistant.form.leverage":"複数を活用する","ai-trading-assistant.form.timeframe":"期間","ai-trading-assistant.form.timeframe1m":"1分","ai-trading-assistant.form.timeframe5m":"5分","ai-trading-assistant.form.timeframe15m":"15分","ai-trading-assistant.form.timeframe30m":"30分","ai-trading-assistant.form.timeframe1H":"1時間","ai-trading-assistant.form.timeframe4H":"4時間","ai-trading-assistant.form.timeframe1D":"1日","ai-trading-assistant.form.marketType":"市場タイプ","ai-trading-assistant.form.marketTypeFutures":"契約","ai-trading-assistant.form.marketTypeSpot":"スポット","ai-trading-assistant.form.totalPnl":"損益通算","ai-trading-assistant.form.customPrompt":"カスタムのプロンプト単語","ai-trading-assistant.form.customPromptHint":"オプション。 AI 取引戦略と意思決定ロジックをカスタマイズするために使用されます。","ai-trading-assistant.form.cancel":"キャンセル","ai-trading-assistant.form.prev":"前のステップ","ai-trading-assistant.form.next":"次のステップ","ai-trading-assistant.form.confirmCreate":"作成の確認","ai-trading-assistant.form.confirmEdit":"変更を確認する","ai-trading-assistant.messages.createSuccess":"戦略が正常に作成されました","ai-trading-assistant.messages.createFailed":"ポリシーの作成に失敗しました","ai-trading-assistant.messages.updateSuccess":"ポリシーの更新が成功しました","ai-trading-assistant.messages.updateFailed":"ポリシーの更新に失敗しました","ai-trading-assistant.messages.deleteSuccess":"ポリシーの削除が成功しました","ai-trading-assistant.messages.deleteFailed":"ポリシーの削除に失敗しました","ai-trading-assistant.messages.startSuccess":"戦略は無事に開始されました","ai-trading-assistant.messages.startFailed":"ポリシーの開始に失敗しました","ai-trading-assistant.messages.stopSuccess":"戦略は正常に停止されました","ai-trading-assistant.messages.stopFailed":"停止戦略は失敗しました","ai-trading-assistant.messages.loadFailed":"ポリシーリストの取得に失敗しました","ai-trading-assistant.messages.loadDecisionsFailed":"AI判定記録の取得に失敗しました","ai-trading-assistant.messages.deleteConfirm":"このポリシーを削除してもよろしいですか?この操作は元に戻すことができません。","ai-trading-assistant.placeholders.inputStrategyName":"ポリシー名を入力してください","ai-trading-assistant.placeholders.selectModelId":"AI モデルを選択してください","ai-trading-assistant.placeholders.selectDecideInterval":"決定間隔を選択してください","ai-trading-assistant.placeholders.startTime":"開始時間","ai-trading-assistant.placeholders.endTime":"終了時間","ai-trading-assistant.placeholders.inputApiKey":"APIキーを入力してください","ai-trading-assistant.placeholders.selectExchange":"交換を選択してください","ai-trading-assistant.placeholders.inputSecretKey":"秘密キーを入力してください","ai-trading-assistant.placeholders.inputPassphrase":"パスフレーズを入力してください","ai-trading-assistant.placeholders.selectSymbol":"BTC/USDT などの取引ペアを選択してください。","ai-trading-assistant.placeholders.selectTimeframe":"期間を選択してください","ai-trading-assistant.placeholders.inputCustomPrompt":"カスタムのプロンプト単語を入力してください (オプション)","ai-trading-assistant.validation.strategyNameRequired":"ポリシー名を入力してください","ai-trading-assistant.validation.modelIdRequired":"AI モデルを選択してください","ai-trading-assistant.validation.runPeriodRequired":"実行サイクルを選択してください","ai-trading-assistant.validation.apiKeyRequired":"APIキーを入力してください","ai-trading-assistant.validation.exchangeRequired":"交換を選択してください","ai-trading-assistant.validation.secretKeyRequired":"秘密キーを入力してください","ai-trading-assistant.validation.symbolRequired":"取引ペアを選択してください","ai-trading-assistant.validation.initialCapitalRequired":"投資額を入力してください","ai-trading-assistant.table.time":"時間","ai-trading-assistant.table.type":"タイプ","ai-trading-assistant.table.price":"価格","ai-trading-assistant.table.amount":"数量","ai-trading-assistant.table.value":"金額","ai-trading-assistant.table.symbol":"取引ペア","ai-trading-assistant.table.side":"方向","ai-trading-assistant.table.size":"ポジション数量","ai-trading-assistant.table.entryPrice":"オープン価格","ai-trading-assistant.table.currentPrice":"現在の価格","ai-trading-assistant.table.unrealizedPnl":"未実現損益","ai-trading-assistant.table.profit":"損益","ai-trading-assistant.table.openLong":"長く開く","ai-trading-assistant.table.closeLong":"ピンドゥオ","ai-trading-assistant.table.openShort":"オープンショート","ai-trading-assistant.table.closeShort":"空の","ai-trading-assistant.table.addLong":"ガドット","ai-trading-assistant.table.addShort":"短く追加する","ai-trading-assistant.table.closeShortProfit":"ショートポジションで利益確定","ai-trading-assistant.table.closeShortStop":"ストップロス","ai-trading-assistant.table.closeLongProfit":"長く停止して利益を得る","ai-trading-assistant.table.closeLongStop":"ストップロス","ai-trading-assistant.table.buy":"買う","ai-trading-assistant.table.sell":"売る","ai-trading-assistant.table.long":"長く続けてください","ai-trading-assistant.table.short":"短い","ai-trading-assistant.table.hold":"ホールド","ai-trading-assistant.table.reasoning":"分析理由","ai-trading-assistant.table.decisions":"意思決定","ai-trading-assistant.table.riskAssessment":"リスク評価","ai-trading-assistant.table.confidence":"自信","ai-trading-assistant.table.totalRecords":"合計 {total} レコード","ai-trading-assistant.table.noPositions":"まだポジションがありません","ai-trading-assistant.detail.title":"戦略の詳細","ai-trading-assistant.equity.noData":"純資産データはまだありません","ai-trading-assistant.equity.equity":"純資産","ai-trading-assistant.exchange.testFailed":"接続テストに失敗しました","ai-trading-assistant.exchange.connectionSuccess":"接続成功","ai-trading-assistant.exchange.connectionFailed":"接続に失敗しました","ai-trading-assistant.form.advancedSettings":"詳細設定","ai-trading-assistant.form.orderMode":"オーダーモード","ai-trading-assistant.form.orderModeMaker":"メーカー","ai-trading-assistant.form.orderModeTaker":"市場価格(テイカー)","ai-trading-assistant.form.orderModeHint":"未決注文モードでは指値注文が使用され、手数料が安くなります。市場価格モードはすぐに実行され、手数料が高くなります。","ai-trading-assistant.form.makerWaitSec":"未決注文の待ち時間 (秒)","ai-trading-assistant.form.makerWaitSecHint":"注文後の取引を待つ時間。キャンセルして、タイムアウト後に再試行してください。","ai-trading-assistant.form.makerRetries":"未決注文の再試行回数","ai-trading-assistant.form.makerRetriesHint":"未決注文が約定しない場合の最大リトライ回数","ai-trading-assistant.form.fallbackToMarket":"未決注文は失敗し、市場価格は引き下げられます。","ai-trading-assistant.form.fallbackToMarketHint":"開始/終了未決注文が完了していない場合、トランザクションを確実に完了させるために成行注文にダウングレードする必要があるかどうか。","ai-trading-assistant.form.marginMode":"マージンモード","ai-trading-assistant.form.marginModeCross":"倉庫がいっぱい","ai-trading-assistant.form.marginModeIsolated":"孤立した位置","ai-analysis.title":"クォンタムトレーディングエンジン","ai-analysis.system.online":"オンライン","ai-analysis.system.agents":"エージェント","ai-analysis.system.active":"アクティブな","ai-analysis.system.stage":"ステージ","ai-analysis.panel.roster":"エージェントラインナップ","ai-analysis.panel.thinking":"考え中...","ai-analysis.panel.done":"完了","ai-analysis.panel.standby":"スタンバイ","ai-analysis.input.title":"クォンタムトレーディングエンジン","ai-analysis.input.placeholder":"ターゲット資産を選択します (例: BTC/USDT)","ai-analysis.input.watchlist":"オプションストック","ai-analysis.input.start":"分析を開始する","ai-analysis.input.recent":"最近のタスク:","ai-analysis.vis.stage":"ステージ","ai-analysis.vis.processing":"処理中","ai-analysis.result.complete":"分析完了","ai-analysis.result.signal":"最終信号","ai-analysis.result.confidence":"自信:","ai-analysis.result.new":"新しい分析","ai-analysis.result.full":"レポート全体を表示","ai-analysis.logs.title":"システムログ","ai-analysis.modal.title":"機密報告書","ai-analysis.modal.fundamental":"ファンダメンタルズ分析","ai-analysis.modal.technical":"テクニカル分析","ai-analysis.modal.sentiment":"感情分析","ai-analysis.modal.risk":"リスク評価","ai-analysis.stage.idle":"スタンバイ","ai-analysis.stage.1":"フェーズ 1: 多次元分析","ai-analysis.stage.2":"フェーズ 2: 長短討論","ai-analysis.stage.3":"フェーズ 3: 戦略計画","ai-analysis.stage.4":"第 4 段階: リスク管理のレビュー","ai-analysis.stage.complete":"完了","ai-analysis.agent.investment_director":"投資ディレクター","ai-analysis.agent.role.investment_director":"包括的な分析と最終結論","ai-analysis.agent.market":"市場アナリスト","ai-analysis.agent.role.market":"テクノロジーと市場データ","ai-analysis.agent.fundamental":"ファンダメンタルズアナリスト","ai-analysis.agent.role.fundamental":"財務と評価","ai-analysis.agent.technical":"テクニカルアナリスト","ai-analysis.agent.role.technical":"テクニカル指標とチャート","ai-analysis.agent.news":"ニュースアナリスト","ai-analysis.agent.role.news":"グローバルニュースフィルター","ai-analysis.agent.sentiment":"センチメントアナリスト","ai-analysis.agent.role.sentiment":"社会的&感情的","ai-analysis.agent.risk":"リスクアナリスト","ai-analysis.agent.role.risk":"基本的なリスクチェック","ai-analysis.agent.bull":"強気な研究者","ai-analysis.agent.role.bull":"成長触媒の採掘","ai-analysis.agent.bear":"弱気な研究者","ai-analysis.agent.role.bear":"リスクと欠陥の掘り下げ","ai-analysis.agent.manager":"研究マネージャー","ai-analysis.agent.role.manager":"ディベートモデレーター","ai-analysis.agent.trader":"トレーダー","ai-analysis.agent.role.trader":"エグゼクティブ・ストラテジスト","ai-analysis.agent.risky":"活動家アナリスト","ai-analysis.agent.role.risky":"積極的な戦略","ai-analysis.agent.neutral":"バランスアナリスト","ai-analysis.agent.role.neutral":"バランス戦略","ai-analysis.agent.safe":"保守的なアナリスト","ai-analysis.agent.role.safe":"保守的な戦略","ai-analysis.agent.cro":"リスクコントロールマネージャー (CRO)","ai-analysis.agent.role.cro":"最終的な意思決定権限","ai-analysis.script.market":"主要な取引所から OHLCV データを取得しています...","ai-analysis.script.fundamental":"四半期財務報告書を取得しています...","ai-analysis.script.technical":"テクニカル指標とチャートパターンを分析しています...","ai-analysis.script.news":"世界的な金融ニュースを調べています...","ai-analysis.script.sentiment":"ソーシャルメディアのトレンドを分析中...","ai-analysis.script.risk":"過去のボラティリティを計算しています...","invite.inviteLink":"招待リンク","invite.copy":"リンクをコピー","invite.copySuccess":"コピー成功!","invite.copyFailed":"コピーに失敗しました。 手動でコピーしてください","invite.noInviteLink":"招待リンクが生成されませんでした","invite.totalInvites":"累積招待状","invite.totalReward":"累計報酬","invite.rules":"招待ルール","invite.rule1":"友達の登録に成功するたびに、報酬を受け取ります","invite.rule2":"招待された友達が最初のトランザクションを完了すると、追加の報酬を受け取ります","invite.rule3":"招待特典はアカウントに直接送信されます","invite.inviteList":"招待リスト","invite.tasks":"ミッションセンター","invite.inviteeName":"招待者","invite.inviteTime":"招待時間","invite.status":"ステータス","invite.reward":"報酬","invite.active":"アクティブな","invite.inactive":"アクティブ化されていません","invite.completed":"完了","invite.claimed":"受け取りました","invite.pending":"完成予定","invite.goToTask":"完了する","invite.claimReward":"報酬を請求する","invite.verify":"検証完了","invite.verifySuccess":"検証成功!タスクが完了しました","invite.verifyNotCompleted":"タスクはまだ完了していません。 最初にタスクを完了してください","invite.verifyFailed":"検証に失敗しました。後でもう一度お試しください","invite.claimSuccess":"{reward} QDT を正常に受け取りました!","invite.claimFailed":"収集に失敗しました。 後でもう一度お試しください","invite.totalRecords":"合計 {total} レコード","invite.task.twitter.title":"X(Twitter)にリツイート","invite.task.twitter.desc":"公式ツイートを X (Twitter) アカウントに共有します","invite.task.youtube.title":"YouTube チャンネルをフォローしてください","invite.task.youtube.desc":"公式 YouTube チャンネルを購読してフォローしてください","invite.task.telegram.title":"テレグラムグループに参加する","invite.task.telegram.desc":"公式 Telegram コミュニティ グループに参加してください","invite.task.discord.title":"Discordサーバーに参加する","invite.task.discord.desc":"Discordコミュニティサーバーに参加してください",message:"-","layouts.usermenu.dialog.title":"情報","layouts.usermenu.dialog.content":"ログアウトしてもよろしいですか?","layouts.userLayout.title":"不確実性の中で真実を見つける","dashboard.indicator.boundary.message":"Note: The indicator script only computes plots + buy/sell signals. Position sizing, risk, scaling, fees/slippage belong to execution config.","dashboard.indicator.boundary.indicatorRule":"Keep the script to buy/sell only (and set df['buy']/df['sell']). Do NOT implement position management, TP/SL, scaling in the script.","dashboard.indicator.boundary.backtestRule":"Rule: If a bar has a main signal (buy/sell → open/close/reverse), scaling in/out is skipped on the same bar.","dashboard.indicator.guide.title":"Python Indicator & Strategy Development Guide","dashboard.indicator.guide.intro":"This platform supports writing custom technical indicators and trading signals using Python. The system includes built-in pandas and numpy data analysis libraries. You can use standard DataFrame operations to process K-line data and draw charts or mark buy/sell signals.","dashboard.indicator.guide.section1.title":"1. Runtime Environment & Predefined Variables","dashboard.indicator.guide.section1.env":"Your code runs in a browser-based Python environment (Pyodide).","dashboard.indicator.guide.section1.libs":"Pre-installed Libraries","dashboard.indicator.guide.section1.libsDesc":"The following libraries are imported by default, no need to import again:","dashboard.indicator.guide.section1.libsList":"pandas (pd), numpy (np), math, json","dashboard.indicator.guide.section1.data":"Input Data: df","dashboard.indicator.guide.section1.dataDesc":"The system automatically converts current K-line data into a Pandas DataFrame object, variable name is df.","dashboard.indicator.guide.section1.dataColumns":"df contains the following columns (all float type):","dashboard.indicator.guide.section1.dataColumnsList":"time (timestamp, seconds), open, high, low, close, volume","dashboard.indicator.guide.section1.dataNote":"Data index is arranged from old to new (0 is the earliest data, last row is the latest data).","dashboard.indicator.guide.section1.dataIndex":"Important: df index is timestamp (DatetimeIndex), please preserve the index, avoid using .values which loses the index.","dashboard.indicator.guide.section2.title":"2. Parameter Definition","dashboard.indicator.guide.section2.desc":"You can define variables as parameters at the beginning of your code. The system will try to parse statements like variable = value as adjustable parameters.","dashboard.indicator.guide.section2.example":"Parameter Example","dashboard.indicator.guide.section2.exampleCode":"span = 20 or multiplier = 2.0","dashboard.indicator.guide.section3.title":"3. Backtest Signal Setup (Important!)","dashboard.indicator.guide.section3.desc":"If you want your indicator to support backtesting, you must set the following two columns in your code:","dashboard.indicator.guide.section3.backtestRequired":"Required for Backtesting:","dashboard.indicator.guide.section3.backtestBuySignal":"df['buy_signal'] - Boolean Series, True indicates buy signal","dashboard.indicator.guide.section3.backtestSellSignal":"df['sell_signal'] - Boolean Series, True indicates sell signal","dashboard.indicator.guide.section3.backtestExample":"Example:","dashboard.indicator.guide.section3.backtestExampleCode":"df['buy_signal'] = condition_buy
df['sell_signal'] = condition_sell","dashboard.indicator.guide.section3.backtestNote":"Note: Even if you only set output.signals for chart display, you must set these two columns to enable backtesting.","dashboard.indicator.guide.section4.title":"4. Output Requirements: output","dashboard.indicator.guide.section4.desc":"At the end of code execution, you must define a dictionary named output to tell the chart how to display results.","dashboard.indicator.guide.section4.fields":"The output dictionary contains the following fields:","dashboard.indicator.guide.section4.plots":"plots - For drawing lines (e.g., moving averages, RSI)","dashboard.indicator.guide.section4.signals":"signals - For marking buy/sell signals (e.g., arrows, labels)","dashboard.indicator.guide.section4.name":"name - Indicator name (optional)","dashboard.indicator.guide.section4.calculatedVars":"calculatedVars - Calculated variables (optional, for displaying additional information)","dashboard.indicator.guide.section5.title":"5. Plot Configuration (Plots)","dashboard.indicator.guide.section5.desc":"Each object in the plots list represents a line.","dashboard.indicator.guide.section5.table.field":"Field","dashboard.indicator.guide.section5.table.type":"Type","dashboard.indicator.guide.section5.table.required":"Required","dashboard.indicator.guide.section5.table.requiredYes":"Yes","dashboard.indicator.guide.section5.table.requiredNo":"No","dashboard.indicator.guide.section5.table.desc":"Description","dashboard.indicator.guide.section5.table.name":"The name of the indicator line, displayed in the legend","dashboard.indicator.guide.section5.table.data":"Data list, length must match the number of rows in df. Recommended to use series.tolist()","dashboard.indicator.guide.section5.table.color":"Line color (Hex format, e.g. '#ff0000'). If not filled, the system will automatically assign","dashboard.indicator.guide.section5.table.typeDesc":"Chart type, default is 'line'","dashboard.indicator.guide.section5.table.overlay":"Important. True means display on main chart (with K-line), False means display on sub-chart (independent area)","dashboard.indicator.guide.section5.example":"Example: Draw Simple Moving Average (SMA)","dashboard.indicator.guide.section5.exampleCalc":"Calculate SMA","dashboard.indicator.guide.section5.exampleOutput":"Construct Output","dashboard.indicator.guide.section5.exampleOverlay":"Display on main chart","dashboard.indicator.guide.section6.title":"6. Signal Markers (Signals)","dashboard.indicator.guide.section6.desc":"signals are used to mark buy/sell points on specific K-lines through icons or text. Note: This is only for chart display. The backtest system uses df['buy_signal'] and df['sell_signal'].","dashboard.indicator.guide.section6.table.type":"Signal type: 'buy' (buy, marked below K-line) or 'sell' (sell, marked above K-line)","dashboard.indicator.guide.section6.table.data":"Signal data list. Fill price value at signal positions, fill None (or np.nan) at non-signal positions","dashboard.indicator.guide.section6.table.text":'Text displayed on the label (e.g. "B", "S", "Buy", "Sell")',"dashboard.indicator.guide.section6.table.color":"Marker color","dashboard.indicator.guide.section6.hint":"The system automatically handles positioning.","dashboard.indicator.guide.section6.buy":"Markers will be automatically positioned below the Low of the current K-line","dashboard.indicator.guide.section6.sell":"Markers will be automatically positioned above the High of the current K-line","dashboard.indicator.guide.section6.example":"Example: Draw Buy/Sell Signals","dashboard.indicator.guide.section6.exampleInit":"Initialize signal list, fill all with None","dashboard.indicator.guide.section6.exampleLogic":"Simple logic: mark buy when close price is greater than open price","dashboard.indicator.guide.section6.exampleNote":"In actual logic, please use loops or vectorized operations","dashboard.indicator.guide.section6.examplePrice":"Record price","dashboard.indicator.guide.section6.exampleText":"Buy","dashboard.indicator.guide.section7.title":"7. Complete Code Examples","dashboard.indicator.guide.section7.exampleA":"Example A: Dual EMA Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleACode":'# 1. Calculate indicators
df[\'ema_fast\'] = df[\'close\'].ewm(span=5, adjust=False).mean()
df[\'ema_slow\'] = df[\'close\'].ewm(span=13, adjust=False).mean()

# 2. Calculate crossover signals
cross_up = (df[\'ema_fast\'] > df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) <= df[\'ema_slow\'].shift(1))
cross_down = (df[\'ema_fast\'] < df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) >= df[\'ema_slow\'].shift(1))

# 3. 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = cross_up
df[\'close_long\'] = cross_down
df[\'open_short\'] = cross_down
df[\'close_short\'] = cross_up

# 4. Generate signal data for chart display
buy_signals = [df[\'low\'].iloc[i] * 0.995 if cross_up.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if cross_down.iloc[i] else None for i in range(len(df))]

# 5. Build output
output = {
"name": "Dual EMA Strategy",
"plots": [
{"name": "EMA 5", "data": df[\'ema_fast\'].tolist(), "color": "#FF6B6B", "overlay": True},
{"name": "EMA 13", "data": df[\'ema_slow\'].tolist(), "color": "#4ECDC4", "overlay": True}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section7.exampleB":"Example B: Bollinger Bands - Chart Display Only","dashboard.indicator.guide.section7.exampleBCode":'# Calculate Bollinger Bands (chart display only, no backtesting)
length = 20
mult = 2.0
df[\'sma\'] = df[\'close\'].rolling(length).mean()
df[\'std\'] = df[\'close\'].rolling(length).std()
df[\'upper\'] = df[\'sma\'] + mult * df[\'std\']
df[\'lower\'] = df[\'sma\'] - mult * df[\'std\']

output = {
"name": "Bollinger Bands",
"plots": [
{"name": "Upper", "data": df[\'upper\'].tolist(), "color": "#FF5252", "overlay": True},
{"name": "Middle", "data": df[\'sma\'].tolist(), "color": "#2196F3", "overlay": True},
{"name": "Lower", "data": df[\'lower\'].tolist(), "color": "#00E676", "overlay": True}
]
}',"dashboard.indicator.guide.section7.exampleC":"Example C: RSI Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleCCode":'# Calculate RSI
delta = df[\'close\'].diff()
up = delta.clip(lower=0)
down = -1 * delta.clip(upper=0)
ema_up = up.ewm(com=13, adjust=False).mean()
ema_down = down.ewm(com=13, adjust=False).mean()
rs = ema_up / ema_down
df[\'rsi\'] = 100 - (100 / (1 + rs))

# Generate trading signals
buy_condition = df[\'rsi\'] < 30 # Oversold buy
sell_condition = df[\'rsi\'] > 70 # Overbought sell

# 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = buy_condition
df[\'close_long\'] = sell_condition
df[\'open_short\'] = sell_condition
df[\'close_short\'] = buy_condition

# Generate chart signals
buy_signals = [df[\'low\'].iloc[i] * 0.995 if buy_condition.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if sell_condition.iloc[i] else None for i in range(len(df))]

output = {
"name": "RSI Strategy",
"plots": [
{"name": "RSI", "data": df[\'rsi\'].tolist(), "color": "#9C27B0", "overlay": False},
{"name": "Overbought", "data": [70] * len(df), "color": "#FF5252", "style": "dashed", "overlay": False},
{"name": "Oversold", "data": [30] * len(df), "color": "#00E676", "style": "dashed", "overlay": False}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section6.param":"Parameters","dashboard.indicator.guide.section6.calc":"Calculate","dashboard.indicator.guide.section6.output":"Output","dashboard.indicator.guide.section6.generate":"Generate signal data (initialize with None)","dashboard.indicator.guide.section6.subchart":"Display on sub-chart","dashboard.indicator.guide.section8.title":"8. Frequently Asked Questions (FAQ)","dashboard.indicator.guide.section8.q1":"Q: Why can't my indicator be backtested?","dashboard.indicator.guide.section8.a1":"A: The backtest system requires NEW signal columns: df['open_long'], df['close_long'], df['open_short'], df['close_short'] (boolean). Even if you set output.signals for chart display, you must set these columns to enable backtesting.","dashboard.indicator.guide.section8.q2":"Q: Data length mismatch?","dashboard.indicator.guide.section8.a2":"A: The data list in plots and signals must have exactly the same length as the K-line data. If you use df['xxx'].tolist(), there is usually no problem.","dashboard.indicator.guide.section8.q3":"Q: How to handle NaN (empty values)?","dashboard.indicator.guide.section8.a3":"A: Pandas calculations (such as rolling mean) will produce NaN at the beginning. The system will automatically convert NaN to null for chart rendering. You don't need to manually clean it, but if you need specific logic, you can use df.fillna(0) or other methods.","dashboard.indicator.guide.section8.q4":"Q: Index mismatch causing all signals to be NaN?","dashboard.indicator.guide.section8.a4":"A: Please ensure you preserve the original df index (timestamp). Avoid using .values to create new Series. Use columns directly like df['close'] for operations.","dashboard.indicator.guide.section8.q5":"Q: Can I use third-party network libraries?","dashboard.indicator.guide.section8.a5":"A: No. The runtime environment is a browser sandbox and cannot use libraries like requests to request external APIs, nor can it install additional pip packages. Limited to built-in libraries such as pandas, numpy, math, json.","dashboard.indicator.guide.section8.q6":"Q: How to debug code?","dashboard.indicator.guide.section8.a6":"A: If the chart does not display indicators, it is usually because the Python code has an error. Please check for syntax errors or array index out of bounds. It is recommended to debug the algorithm logic in a local Python environment first, then copy it in.","dashboard.indicator.guide.section8.q7":"Q: Backtest shows 0 signals?","dashboard.indicator.guide.section8.a7":"A: Please check the data type of df['open_long']/df['close_long']/df['open_short']/df['close_short']. They should be boolean (True/False), not numeric. Use condition.fillna(False).astype(bool) to ensure correct type.","dashboard.indicator.backtest.commissionHint":"Charged on notional value (incl. leverage) per trade; both entry & exit are deducted from balance.","dashboard.indicator.backtest.historyTitle":"Backtest History","dashboard.indicator.backtest.historyRefresh":"Refresh","dashboard.indicator.backtest.historyView":"View","dashboard.indicator.backtest.historyNoData":"No backtest history","dashboard.indicator.backtest.historyUseCurrent":"Only current symbol/timeframe","dashboard.indicator.backtest.historyFilterSymbol":"Symbol","dashboard.indicator.backtest.historyFilterTimeframe":"Timeframe","dashboard.indicator.backtest.historyApply":"Apply filters","dashboard.indicator.backtest.historyAIAnalyze":"AI Analyze","dashboard.indicator.backtest.historyAIAnalyzeTitle":"AI Suggestions","dashboard.indicator.backtest.historyNoAIResult":"No AI analysis result","dashboard.indicator.backtest.historyRunId":"Run ID","dashboard.indicator.backtest.historyCreatedAt":"Time","dashboard.indicator.backtest.historyRange":"Range","dashboard.indicator.backtest.historyStatus":"Status","dashboard.indicator.backtest.historyStatusSuccess":"Success","dashboard.indicator.backtest.historyStatusFailed":"Failed","dashboard.indicator.backtest.historyActions":"Actions","dashboard.indicator.backtest.hint.entryPctMax":"Max entry: {maxPct}% (reserve budget for future scale-ins)","trading-assistant.exchange.ipWhitelistTip":"Please add the following IPs to the whitelist in your exchange API settings:","signal-robot.title":"Signal Robot Console","signal-robot.createBot":"Create New Bot","signal-robot.search.nameOrSymbol":"Name/Symbol","signal-robot.search.placeholder":"Search bot name or symbol","signal-robot.search.status":"Status","signal-robot.search.statusAll":"All","signal-robot.search.statusRunning":"Running","signal-robot.search.statusPaused":"Paused","signal-robot.search.query":"Query","signal-robot.search.reset":"Reset","signal-robot.table.botName":"Bot Name","signal-robot.table.symbolTimeframe":"Symbol/Timeframe","signal-robot.table.triggerStrategy":"Trigger Strategy","signal-robot.table.notificationChannels":"Notification Channels","signal-robot.table.status":"Status","signal-robot.table.action":"Action","signal-robot.table.triggerConditions":"{count} trigger conditions","signal-robot.table.monitoring":"Monitoring","signal-robot.table.paused":"Paused","signal-robot.table.edit":"Edit","signal-robot.table.pause":"Pause","signal-robot.table.start":"Start","signal-robot.table.delete":"Delete","signal-robot.table.deleteConfirm":"Are you sure you want to delete this bot?","signal-robot.table.deleteSuccess":"Deleted successfully","signal-robot.table.startSuccess":"Bot started","signal-robot.table.pauseSuccess":"Bot paused","signal-robot.channel.telegram":"Telegram","signal-robot.channel.discord":"Discord","signal-robot.channel.email":"Email","signal-robot.channel.webhook":"Webhook","signal-robot.channel.browser":"Browser Push","signal-robot.modal.createTitle":"Create New Signal Robot","signal-robot.modal.editTitle":"Edit Signal Robot","signal-robot.modal.step.basic":"Basic Settings","signal-robot.modal.step.entry":"Entry Strategy","signal-robot.modal.step.position":"Position Management","signal-robot.modal.step.risk":"Risk Control","signal-robot.modal.step.notify":"Notification Config","signal-robot.modal.prev":"Previous","signal-robot.modal.next":"Next","signal-robot.modal.preview":"Preview Backtest","signal-robot.modal.complete":"Complete & Run","signal-robot.modal.saveSuccess":"Saved successfully","signal-robot.modal.previewDeveloping":"Preview feature is under development...","signal-robot.modal.basicInfoRequired":"Please complete basic information","signal-robot.basic.alert":"Set basic information for the bot","signal-robot.basic.title":"Basic Information","signal-robot.basic.botName":"Bot Name","signal-robot.basic.botNamePlaceholder":"e.g.: BTC SuperTrend Strategy","signal-robot.basic.symbol":"Trading Pair","signal-robot.basic.symbolPlaceholder":"Select from watchlist","signal-robot.basic.noWatchlist":"No watchlist items, please add in market page first","signal-robot.basic.timeframe":"K-Line Period","signal-robot.basic.timeframe15m":"15 Minutes","signal-robot.basic.timeframe30m":"30 Minutes","signal-robot.basic.timeframe1h":"1 Hour","signal-robot.basic.timeframe4h":"4 Hours","signal-robot.basic.timeframe1d":"1 Day","signal-robot.basic.autoNameSuggestion":"{symbol} Signal Robot","signal-robot.entry.alert":"Trigger entry signal when all conditions below are met","signal-robot.entry.condition":"Condition {index}","signal-robot.entry.indicator":"Indicator","signal-robot.entry.indicatorSupertrend":"SuperTrend","signal-robot.entry.indicatorEma":"EMA (Exponential Moving Average)","signal-robot.entry.indicatorRsi":"RSI (Relative Strength Index)","signal-robot.entry.indicatorMacd":"MACD","signal-robot.entry.indicatorBollinger":"Bollinger Bands","signal-robot.entry.atrPeriod":"ATR Period","signal-robot.entry.multiplier":"Multiplier","signal-robot.entry.triggerSignal":"Trigger Signal","signal-robot.entry.signalTrendBullish":"Trend Bullish","signal-robot.entry.signalTrendBearish":"Trend Bearish","signal-robot.entry.signalIsUptrend":"Is Uptrend","signal-robot.entry.signalIsDowntrend":"Is Downtrend","signal-robot.entry.period":"Period","signal-robot.entry.compareCondition":"Compare Condition","signal-robot.entry.priceAbove":"Price > EMA (Price Above)","signal-robot.entry.priceBelow":"Price < EMA (Price Below)","signal-robot.entry.crossUp":"Price Crosses Above EMA (Golden Cross)","signal-robot.entry.crossDown":"Price Crosses Below EMA (Death Cross)","signal-robot.entry.compare":"Compare","signal-robot.entry.greaterThan":"Greater Than","signal-robot.entry.lessThan":"Less Than","signal-robot.entry.crossUpShort":"Cross Up","signal-robot.entry.crossDownShort":"Cross Down","signal-robot.entry.threshold":"Threshold","signal-robot.entry.selectIndicator":"Please select an indicator to configure parameters","signal-robot.entry.addCondition":"Add Condition","signal-robot.position.alert":"Configure initial position size, leverage and pyramiding rules","signal-robot.position.basicTitle":"Basic Position Management","signal-robot.position.initialSize":"Initial Size (Capital %)","signal-robot.position.initialSizeHint":"Recommended 5% - 20%","signal-robot.position.leverage":"Leverage","signal-robot.position.leverageHint":"Please ensure your exchange account supports this leverage","signal-robot.position.maxPyramiding":"Max Pyramiding Times","signal-robot.position.maxPyramidingHint":"0 means no pyramiding","signal-robot.position.pyramidingTitle":"Pyramiding Rules","signal-robot.position.pyramidingEnabled":"Enabled","signal-robot.position.pyramidingDisabled":"Disabled","signal-robot.position.pyramidingCondition":"Pyramiding Trigger Condition","signal-robot.position.priceRisePct":"Price Rises (Long) / Falls (Short)","signal-robot.position.profitPct":"Profit Reaches","signal-robot.position.triggerThreshold":"Trigger Threshold (%)","signal-robot.position.triggerThresholdHint":"e.g. 3%: add position once every 3% rise","signal-robot.position.addSize":"Single Add Size (Capital %)","signal-robot.position.pyramidingDisabledHint":"Pyramiding disabled, only initial position will be executed","signal-robot.risk.alert":"Configure take profit, stop loss and exit rules","signal-robot.risk.stopLossTitle":"Stop Loss","signal-robot.risk.stopLossEnabled":"Enabled","signal-robot.risk.stopLossDisabled":"Disabled","signal-robot.risk.stopLossType":"Stop Loss Type","signal-robot.risk.stopLossFixedPct":"Fixed Percentage","signal-robot.risk.stopLossAtrMultiplier":"ATR Multiplier","signal-robot.risk.stopLossValue":"Value","signal-robot.risk.stopLossFixedHint":"e.g. 2%: stop loss when loss reaches 2%","signal-robot.risk.stopLossAtrHint":"e.g. 2.0: stop loss when price touches ATR*2.0","signal-robot.risk.stopLossDisabledHint":"Stop loss disabled (high risk)","signal-robot.risk.trailingStopTitle":"Trailing Stop","signal-robot.risk.activationProfit":"Activation Profit (%)","signal-robot.risk.activationProfitHint":"Start trailing when profit reaches this level","signal-robot.risk.callbackPct":"Callback (%)","signal-robot.risk.callbackPctHint":"Trigger take profit when price falls from peak by this percentage","signal-robot.risk.trailingStopDisabledHint":"Trailing stop disabled","signal-robot.risk.otherExitTitle":"Other Exit Rules","signal-robot.risk.signalExit":"Allow Signal Exit","signal-robot.risk.signalExitHint":"Close position immediately when reverse signal appears (e.g. close long when short signal appears)","signal-robot.notify.alert":"Configure notification methods when signal is triggered","signal-robot.notify.channelTitle":"Notification Channels","signal-robot.notify.discordWebhook":"Discord Webhook","signal-robot.notify.genericWebhook":"Generic Webhook","signal-robot.notify.webhookUrl":"Webhook URL","signal-robot.notify.webhookUrlPlaceholder":"https://example.com/webhook","signal-robot.notify.discordUrl":"Discord URL","signal-robot.notify.discordUrlPlaceholder":"https://discord.com/api/webhooks/...","signal-robot.operator.greaterThan":"Greater Than","signal-robot.operator.lessThan":"Less Than","signal-robot.operator.equal":"Equal","signal-robot.operator.goldenCross":"Golden Cross","signal-robot.operator.deathCross":"Death Cross","signal-robot.operator.increaseBy":"Increase By","signal-robot.operator.decreaseBy":"Decrease By","signal-robot.indicator.price":"Price","signal-robot.indicator.rsi":"RSI","signal-robot.indicator.kdjK":"KDJ(K)","signal-robot.indicator.kdjJ":"KDJ(J)","signal-robot.indicator.macd":"MACD","signal-robot.indicator.macdHist":"MACD Histogram","signal-robot.indicator.bollingerUp":"Bollinger Upper","signal-robot.indicator.bollingerLow":"Bollinger Lower","signal-robot.indicator.volume":"Volume","signal-robot.indicator.changePct1h":"1H Change %","signal-robot.indicator.changePct24h":"24H Change %","signal-robot.indicator.signalLine":"Signal Line","settings.group.agent_memory":"記憶/反省設定","settings.group.reflection_worker":"自動反省検証ワーカー","settings.field.ENABLE_AGENT_MEMORY":"エージェント記憶を有効化","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"ベクトル検索を有効化(ローカル)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"埋め込み次元","settings.field.AGENT_MEMORY_TOP_K":"Top-K 取得数","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"候補ウィンドウサイズ","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"時間減衰の半減期(日)","settings.field.AGENT_MEMORY_W_SIM":"類似度重み","settings.field.AGENT_MEMORY_W_RECENCY":"新しさ重み","settings.field.AGENT_MEMORY_W_RETURNS":"収益重み","settings.field.ENABLE_REFLECTION_WORKER":"自動検証を有効化","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"検証間隔(秒)","profile.notifications.title":"通知設定","profile.notifications.hint":"デフォルトの通知方法を設定します。資産モニターやアラート作成時に自動的に使用されます","profile.notifications.defaultChannels":"デフォルト通知チャンネル","profile.notifications.browser":"アプリ内通知","profile.notifications.email":"メール","profile.notifications.phone":"SMS","profile.notifications.telegramBotToken":"Telegram Bot Token","profile.notifications.telegramBotTokenPlaceholder":"Telegram Bot Tokenを入力してください","profile.notifications.telegramBotTokenHint":"@BotFatherでボットを作成してTokenを取得してください","profile.notifications.telegramChatId":"Telegram Chat ID","profile.notifications.telegramPlaceholder":"Telegram Chat IDを入力してください(例:123456789)","profile.notifications.telegramHint":"@userinfobot に /start を送信してChat IDを取得してください","profile.notifications.notifyEmail":"通知メール","profile.notifications.emailPlaceholder":"通知を受け取るメールアドレス","profile.notifications.emailHint":"デフォルトはアカウントメール、別のメールも設定可能","profile.notifications.phonePlaceholder":"電話番号を入力してください(例:+81901234567)","profile.notifications.phoneHint":"管理者がTwilioサービスを設定する必要があります","profile.notifications.discordWebhook":"Discord Webhook","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"Discordサーバー設定でWebhookを作成してください","profile.notifications.webhookUrl":"Webhook URL","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"カスタムWebhook URL、POST JSONで通知を送信","profile.notifications.webhookToken":"Webhook Token(任意)","profile.notifications.webhookTokenPlaceholder":"リクエスト認証用Bearer Token","profile.notifications.webhookTokenHint":"Authorization: Bearer TokenとしてWebhookに送信","profile.notifications.testBtn":"テスト通知を送信","profile.notifications.saveSuccess":"通知設定を保存しました","profile.notifications.selectChannel":"少なくとも1つの通知チャンネルを選択してください","profile.notifications.fillTelegramToken":"Telegram Bot Tokenを入力してください","profile.notifications.fillTelegram":"Telegram Chat IDを入力してください","profile.notifications.fillEmail":"通知メールを入力してください","profile.notifications.testSent":"テスト通知を送信しました。通知チャンネルを確認してください"},f=(0,e.A)((0,e.A)({},p),y)}}]); \ No newline at end of file diff --git a/frontend/dist/js/lang-ja-JP.41d8caa7.js b/frontend/dist/js/lang-ja-JP.41d8caa7.js deleted file mode 100644 index f688fdc..0000000 --- a/frontend/dist/js/lang-ja-JP.41d8caa7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[638],{33644:function(a,t,i){i.d(t,{default:function(){return f}});var e=i(57888),s={items_per_page:"/ ページ",jump_to:"移動",jump_to_confirm:"確認する",page:"ページ",prev_page:"前のページ",next_page:"次のページ",prev_5:"前 5ページ",next_5:"次 5ページ",prev_3:"前 3ページ",next_3:"次 3ページ"},o=i(85505),r={today:"今日",now:"現在時刻",backToToday:"今日に戻る",ok:"決定",timeSelect:"時間を選択",dateSelect:"日時を選択",clear:"クリア",month:"月",year:"年",previousMonth:"前月 (ページアップキー)",nextMonth:"翌月 (ページダウンキー)",monthSelect:"月を選択",yearSelect:"年を選択",decadeSelect:"年代を選択",yearFormat:"YYYY年",dayFormat:"D日",dateFormat:"YYYY年M月D日",dateTimeFormat:"YYYY年M月D日 HH時mm分ss秒",previousYear:"前年 (Controlを押しながら左キー)",nextYear:"翌年 (Controlを押しながら右キー)",previousDecade:"前の年代",nextDecade:"次の年代",previousCentury:"前の世紀",nextCentury:"次の世紀"},n={placeholder:"時刻を選択"},d=n,l={lang:(0,o.A)({placeholder:"日付を選択",rangePlaceholder:["開始日付","終了日付"]},r),timePickerLocale:(0,o.A)({},d)},c=l,g=c,b={locale:"ja",Pagination:s,DatePicker:c,TimePicker:d,Calendar:g,Table:{filterTitle:"メニューをフィルター",filterConfirm:"OK",filterReset:"リセット",selectAll:"すべてを選択",selectInvert:"選択を反転"},Modal:{okText:"OK",cancelText:"キャンセル",justOkText:"OK"},Popconfirm:{okText:"OK",cancelText:"キャンセル"},Transfer:{searchPlaceholder:"ここを検索",itemUnit:"アイテム",itemsUnit:"アイテム"},Upload:{uploading:"アップロード中...",removeFile:"ファイルを削除",uploadError:"アップロードエラー",previewFile:"ファイルをプレビュー",downloadFile:"ダウンロードファイル"},Empty:{description:"データがありません"}},m=b,h=i(23827),u=i.n(h),p={antLocale:m,momentName:"ja",momentLocale:u()},y={submit:"送信する",save:"保存する","submit.ok":"送信成功","save.ok":"正常に保存されました","menu.welcome":"ようこそ","menu.home":"ホームページ","menu.dashboard":"ダッシュボード","menu.dashboard.indicator":"指標分析","menu.dashboard.community":"インジケーターコミュニティ","menu.dashboard.analysis":"AI分析","menu.dashboard.tradingAssistant":"取引アシスタント","menu.dashboard.aiTradingAssistant":"AI取引アシスタント","menu.dashboard.signalRobot":"シグナルロボット","menu.dashboard.monitor":"モニタリングページ","menu.dashboard.workplace":"作業台","menu.form":"フォームページ","menu.form.basic-form":"基本形","menu.form.step-form":"ステップバイステップフォーム","menu.form.step-form.info":"ステップバイステップフォーム(転送情報を記入)","menu.form.step-form.confirm":"ステップバイステップフォーム(振込情報の確認)","menu.form.step-form.result":"ステップバイステップのフォーム(完了)","menu.form.advanced-form":"高度なフォーム","menu.list":"一覧ページ","menu.list.table-list":"お問い合わせフォーム","menu.list.basic-list":"規格一覧","menu.list.card-list":"カードリスト","menu.list.search-list":"検索リスト","menu.list.search-list.articles":"検索リスト(記事)","menu.list.search-list.projects":"検索リスト(プロジェクト)","menu.list.search-list.applications":"検索リスト(アプリ)","menu.profile":"詳細ページ","menu.profile.basic":"基本詳細ページ","menu.profile.advanced":"詳細ページ","menu.result":"結果ページ","menu.result.success":"成功ページ","menu.result.fail":"失敗ページ","menu.exception":"例外ページ","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"トリガーエラー","menu.account":"個人ページ","menu.account.center":"パーソナルセンター","menu.account.settings":"個人設定","menu.account.trigger":"トリガーエラー","menu.account.logout":"ログアウト","menu.wallet":"私の財布","menu.docs":"ドキュメントセンター","menu.docs.detail":"文書の詳細","menu.header.refreshPage":"ページを更新する","menu.invite.friends":"友達を招待する","app.setting.pagestyle":"全体的なスタイル設定","app.setting.pagestyle.light":"明るいメニュースタイル","app.setting.pagestyle.dark":"ダークメニュースタイル","app.setting.pagestyle.realdark":"ダークモード","app.setting.themecolor":"テーマカラー","app.setting.navigationmode":"ナビゲーションモード","app.setting.sidemenu.nav":"サイドバーのナビゲーション","app.setting.topmenu.nav":"トップバーのナビゲーション","app.setting.content-width":"コンテンツ領域の幅","app.setting.content-width.tooltip":"この設定は、[トップバーナビゲーション]時のみ有効です。","app.setting.content-width.fixed":"修正済み","app.setting.content-width.fluid":"ストリーミング","app.setting.fixedheader":"固定ヘッダー","app.setting.fixedheader.tooltip":"固定ヘッダー時に設定可能","app.setting.autoHideHeader":"スクロール時にヘッダーを非表示にする","app.setting.fixedsidebar":"サイドメニューを修正","app.setting.sidemenu":"サイドメニューのレイアウト","app.setting.topmenu":"トップメニューのレイアウト","app.setting.othersettings":"その他の設定","app.setting.weakmode":"カラーウィークネスモード","app.setting.multitab":"マルチタブモード","app.setting.copy":"設定をコピーする","app.setting.loading":"テーマを読み込み中","app.setting.copyinfo":"設定が正常にコピーされました src/config/defaultSettings.js","app.setting.copy.success":"コピー完了","app.setting.copy.fail":"コピーに失敗しました","app.setting.theme.switching":"テーマ変更!","app.setting.production.hint":"構成バーは開発環境でのプレビューにのみ使用され、運用環境では表示されません。 構成ファイルを手動でコピーして変更してください。","app.setting.themecolor.daybreak":"ドーンブルー(デフォルト)","app.setting.themecolor.dust":"夕暮れ","app.setting.themecolor.volcano":"火山","app.setting.themecolor.sunset":"日没","app.setting.themecolor.cyan":"明清","app.setting.themecolor.green":"オーロラグリーン","app.setting.themecolor.geekblue":"オタクブルー","app.setting.themecolor.purple":"ジャン・ジー","app.setting.tooltip":"ページ設定","user.login.userName":"ユーザー名","user.login.password":"パスワード","user.login.username.placeholder":"アカウント: 管理者","user.login.password.placeholder":"パスワード: admin または ant.design","user.login.message-invalid-credentials":"ログインに失敗しました。メールアドレスと確認コードを確認してください","user.login.message-invalid-verification-code":"認証コードエラー","user.login.tab-login-credentials":"アカウントパスワードログイン","user.login.tab-login-email":"メールログイン","user.login.tab-login-mobile":"携帯電話番号ログイン","user.login.captcha.placeholder":"グラフィック認証コードを入力してください","user.login.mobile.placeholder":"携帯電話番号","user.login.mobile.verification-code.placeholder":"認証コード","user.login.email.placeholder":"メールアドレスを入力してください","user.login.email.verification-code.placeholder":"確認コードを入力してください","user.login.email.sending":"認証コードが送信されています...","user.login.email.send-success-title":"ヒント","user.login.email.send-success":"確認コードは正常に送信されました。メールを確認してください","user.login.sms.send-success":"確認コードが正常に送信されました。テキスト メッセージを確認してください。","user.login.remember-me":"自動ログイン","user.login.forgot-password":"パスワードを忘れた場合","user.login.sign-in-with":"その他のログイン方法","user.login.signup":"アカウントを登録する","user.login.login":"ログイン","user.register.register":"登録する","user.register.email.placeholder":"電子メール","user.register.password.placeholder":"6文字以上を入力してください。 推測されやすいパスワードは使用しないでください。","user.register.password.popover-message":"6文字以上を入力してください。 推測されやすいパスワードは使用しないでください。","user.register.confirm-password.placeholder":"パスワードの確認","user.register.get-verification-code":"確認コードを取得する","user.register.sign-in":"既存のアカウントを使用してログインする","user.register-result.msg":"あなたのアカウント: {email} 登録が成功しました","user.register-result.activation-email":"アクティベーション電子メールはメールボックスに送信され、24 時間有効です。 すぐにメールにログインし、メール内のリンクをクリックしてアカウントをアクティブにしてください。","user.register-result.back-home":"ホームページに戻る","user.register-result.view-mailbox":"メールボックスを確認してください","user.email.required":"メールアドレスを入力してください!","user.email.wrong-format":"メールアドレスの形式が間違っています!","user.userName.required":"アカウント名またはメールアドレスを入力してください","user.password.required":"パスワードを入力してください。","user.password.twice.msg":"2 回入力したパスワードが一致しません。","user.password.strength.msg":"パスワードの強度が十分ではありません","user.password.strength.strong":"強さ: 強い","user.password.strength.medium":"強さ: 中","user.password.strength.low":"強度: 低い","user.password.strength.short":"強さ:短すぎる","user.confirm-password.required":"パスワードを確認してください。","user.phone-number.required":"正しい携帯電話番号を入力してください","user.phone-number.wrong-format":"携帯電話番号の形式が間違っています。","user.verification-code.required":"確認コードを入力してください。","user.captcha.required":"グラフィック認証コードを入力してください。","user.login.infos":"QuantDingerはAIマルチエージェント株分析補助ツールであり、証券投資コンサルティング資格はございません。 プラットフォーム内のすべての分析結果、スコア、参考意見は過去のデータに基づいてAIによって自動的に生成され、学習、研究、技術交流のみに使用され、投資アドバイスや意思決定の基礎を構成するものではありません。 株式投資には市場リスク、流動性リスク、政策リスク等の様々なリスクが伴い、元本を割り込む可能性があります。 ユーザーは自身のリスク許容度に基づいて独立した決定を行う必要があり、本ツールの使用から生じる投資行動および結果はユーザーが負担するものとします。 市場にはリスクがあり、投資は慎重になる必要があります。","user.login.tab-login-web3":"Web3ログイン","user.login.web3.tip":"ウォレットを使用した署名ログイン","user.login.web3.connect":"ウォレットに接続してログインする","user.login.web3.no-wallet":"ウォレットが検出されない","user.login.web3.no-address":"ウォレットアドレスが取得できませんでした","user.login.web3.nonce-failed":"乱数の取得に失敗しました","user.login.web3.verify-failed":"署名検証に失敗しました","user.login.web3.success":"ログイン成功","user.login.web3.failed":"ウォレットへのログインに失敗しました","nav.no_wallet":"ウォレットが検出されない","nav.copy":"コピー","nav.copy_success":"正常にコピーされました","user.login.oauth.google":"Googleでサインイン","user.login.oauth.github":"GitHub でサインインする","user.login.oauth.loading":"認証ページにリダイレクトしています...","user.login.oauth.failed":"OAuthログインに失敗しました","user.login.oauth.get-url-failed":"認証リンクの取得に失敗しました","user.login.subtitle":"世界市場に対する定量的な洞察を推進","user.login.legal.title":"法的免責事項","user.login.legal.view":"法的免責事項を表示","user.login.legal.collapse":"法的免責事項を折りたたむ","user.login.legal.agree":"法的免責事項を読み、同意します","user.login.legal.required":"まず法的免責事項を読んで確認してください","user.login.legal.content":"QuantDingerはAIマルチエージェント株分析補助ツールであり、証券投資コンサルティング資格はございません。 プラットフォーム内のすべての分析結果、評価、参考意見は過去のデータに基づいてAIによって自動的に生成され、学習、研究、技術交流のみに使用され、投資アドバイスや意思決定の基礎を構成するものではありません。 株式投資には市場リスク、流動性リスク、政策リスク等の様々なリスクが伴い、元本を割り込む可能性があります。 ユーザーは自身のリスク許容度に基づいて独立した決定を行う必要があり、本ツールの使用から生じる投資行動および結果はユーザーが負担するものとします。 市場にはリスクがあり、投資は慎重になる必要があります。","user.login.privacy.title":"ユーザープライバシーポリシー","user.login.privacy.view":"ユーザーのプライバシー ポリシーを表示する","user.login.privacy.collapse":"ユーザーのプライバシー規約を閉じる","user.login.privacy.content":"私たちはあなたのプライバシーとデータ保護を大切にしています。 1) 収集範囲:機能の実現に必要な情報(メールアドレス、携帯電話番号、市外局番、Web3ウォレットアドレスなど)と必要なログ、端末情報のみを収集します。 2) 利用目的:アカウントへのログインおよびセキュリティ確認、サービス機能の提供、トラブルシューティングおよびコンプライアンス要件のため。 3) 保管とセキュリティ: データは暗号化されて保管され、不正なアクセス、開示、損失を防ぐために必要な許可とアクセス制御手段が講じられます。 4) 第三者との共有: 法令で義務付けられている場合、またはサービスの実行に必要な場合を除き、お客様の個人情報は第三者と共有されることはありません。サードパーティのサービス (ウォレット、SMS サービスプロバイダーなど) が関与する場合、機能の実装に必要な最小限の範囲でのみ処理されます。 5) Cookie/ローカル ストレージ: ログイン ステータスと必要なセッション維持 (トークン、PHPSESSID など) に使用され、ブラウザーでクリアまたは制限できます。 6) 個人の権利:法令に基づき、照会、訂正、削除、同意の撤回等を行う権利を行使することができます。 7) 変更と通知: これらの条件が更新されると、ページ上で目立つように表示されます。 このサービスを継続して使用することにより、更新された内容を読み、同意したものとみなされます。 本規約またはその更新に同意できない場合は、サービスの使用を中止し、当社までご連絡ください。","account.basicInfo":"基本情報","account.id":"ユーザーID","account.username":"ユーザー名","account.nickname":"ニックネーム","account.email":"電子メール","account.mobile":"携帯電話番号","account.web3address":"ウォレットアドレス","account.pid":"紹介者ID","account.level":"ユーザーレベル","account.money":"バランス","account.qdtBalance":"QDTバランス","account.score":"ポイント","account.createtime":"登録時間","account.inviteLink":"招待リンク","account.recharge":"リチャージ","account.rechargeTip":"WeChat または Alipay を使用して、以下の QR コードをスキャンしてチャージしてください。","account.qrCodePlaceholder":"QR コード プレースホルダー (エミュレーション)","account.rechargeAmount":"チャージ金額","account.enterAmount":"チャージ金額を入力してください","account.rechargeHint":"最低入金額: 1 QDT","account.confirmRecharge":"リチャージを確認する","account.enterValidAmount":"有効なリチャージ金額を入力してください","account.rechargeSuccess":"リチャージ成功! {金額} QDT を入金しました","account.settings.menuMap.basic":"基本設定","account.settings.menuMap.security":"セキュリティ設定","account.settings.menuMap.notification":"新着メッセージ通知","account.settings.menuMap.moneyLog":"ファンドの詳細","account.moneyLog.empty":"ファンドの詳細はまだありません","account.moneyLog.total":"合計 {total} レコード","account.moneyLog.type.purchase":"購入インジケーター","account.moneyLog.type.recharge":"リチャージ","account.moneyLog.type.refund":"払い戻し","account.moneyLog.type.reward":"報酬","account.moneyLog.type.income":"指標収入","account.moneyLog.type.commission":"プラットフォーム手数料","wallet.balance":"QDTバランス","wallet.recharge":"リチャージ","wallet.withdraw":"現金を引き出す","wallet.filter":"フィルター","wallet.reset":"リセット","wallet.totalRecharge":"累積リチャージ","wallet.totalWithdraw":"累積引き出し額","wallet.totalIncome":"累計収入","wallet.records":"取引記録と資金の詳細","wallet.tradingRecords":"取引履歴","wallet.moneyLog":"ファンドの詳細","wallet.rechargeTip":"WeChat または Alipay を使用して、以下の QR コードをスキャンしてチャージしてください。","wallet.qrCodePlaceholder":"QR コード プレースホルダー (エミュレーション)","wallet.rechargeAmount":"チャージ金額","wallet.enterAmount":"チャージ金額を入力してください","wallet.rechargeHint":"最低入金額: 1 QDT","wallet.confirmRecharge":"リチャージを確認する","wallet.enterValidAmount":"有効なリチャージ金額を入力してください","wallet.rechargeSuccess":"リチャージ成功! {金額} QDT を入金しました","wallet.rechargeFailed":"再充電に失敗しました","wallet.withdrawTip":"出金金額と出金アドレスを入力してください","wallet.withdrawAmount":"出金額","wallet.enterWithdrawAmount":"出金額を入力してください","wallet.withdrawHint":"最低出金額: 1 QDT","wallet.withdrawAddress":"出金アドレス (オプション)","wallet.enterWithdrawAddress":"出金アドレスを入力してください","wallet.confirmWithdraw":"出金の確認","wallet.enterValidWithdrawAmount":"有効な出金額を入力してください","wallet.insufficientBalance":"残高不足","wallet.withdrawSuccess":"引き出し成功! {金額} QDT を引き出しました","wallet.withdrawFailed":"出金に失敗しました","wallet.noTradingRecords":"まだ取引記録がありません","wallet.noMoneyLog":"ファンドの詳細はまだありません","wallet.loadTradingRecordsFailed":"トランザクションレコードのロードに失敗しました","wallet.loadMoneyLogFailed":"ファンドの詳細をロードできませんでした","wallet.moneyLogTotal":"合計 {total} レコード","wallet.moneyLogTypeTitle":"タイプ","wallet.moneyLogType.all":"全種類","wallet.table.time":"時間","wallet.table.type":"タイプ","wallet.table.price":"価格","wallet.table.amount":"数量","wallet.table.money":"金額","wallet.table.balance":"バランス","wallet.table.memo":"備考","wallet.table.value":"値","wallet.table.profit":"損益","wallet.table.commission":"手数料","wallet.table.total":"合計 {total} レコード","wallet.tradeType.buy":"買う","wallet.tradeType.sell":"売る","wallet.tradeType.liquidation":"強制清算","wallet.tradeType.openLong":"長く開く","wallet.tradeType.addLong":"ガドット","wallet.tradeType.closeLong":"ピンドゥオ","wallet.tradeType.closeLongStop":"ストップロスとロング","wallet.tradeType.closeLongProfit":"利益を得てさらに平準化する","wallet.tradeType.openShort":"オープンショート","wallet.tradeType.addShort":"短く追加する","wallet.tradeType.closeShort":"空の","wallet.tradeType.closeShortStop":"ストップロス","wallet.tradeType.closeShortProfit":"利益を確定して空売りを終了する","wallet.moneyLogType.purchase":"購入インジケーター","wallet.moneyLogType.recharge":"リチャージ","wallet.moneyLogType.withdraw":"現金を引き出す","wallet.moneyLogType.refund":"払い戻し","wallet.moneyLogType.reward":"報酬","wallet.moneyLogType.income":"収入","wallet.moneyLogType.commission":"手数料","wallet.web3Address.required":"最初に Web3 ウォレットのアドレスを入力してください","wallet.web3Address.requiredDescription":"リチャージする前に、リチャージを受け取るために Web3 ウォレット アドレスをバインドする必要があります。","wallet.web3Address.placeholder":"Web3 ウォレットのアドレスを入力してください (0x で始まる)","wallet.web3Address.save":"ウォレットアドレスを保存する","wallet.web3Address.saveSuccess":"ウォレットアドレスが正常に保存されました","wallet.web3Address.saveFailed":"ウォレットアドレスの保存に失敗しました","wallet.web3Address.invalidFormat":"有効な Web3 ウォレット アドレスを入力してください (イーサリアム形式: 0x で始まる 42 文字、または TRC20 形式: T で始まる 34 文字)","wallet.selectCoin":"通貨を選択してください","wallet.selectChain":"選択チェーン","wallet.chain.eth":"イーサリアム(ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"BSC","wallet.targetQdtAmount":"引き換えたいQDTの量(オプション)","wallet.targetQdtAmount.placeholder":"引き換えたい QDT の数量、現在の QDT 価格を入力してください: {price} USDT","wallet.targetQdtAmount.requiredUsdt":"リチャージが必要: {amount} USDT","wallet.rechargeAddress":"リチャージアドレス","wallet.copyAddress":"コピー","wallet.copySuccess":"コピー成功!","wallet.copyFailed":"コピーに失敗しました。手動でコピーしてください","wallet.rechargeAddressHint":"このアドレスに {coin} を入金するには、必ず {chain} を使用してください。","wallet.qdtPrice.loading":"読み込み中...","wallet.rechargeTip.new":"通貨とチェーンを選択し、下の QR コードをスキャンしてリチャージしてください","wallet.exchangeRate":"1 QDT ≈ {レート} USDT","wallet.withdrawableAmount":"利用可能な現金の量","wallet.totalBalance":"合計残高","wallet.insufficientWithdrawable":"引き出すことができる現金の量が不足しています。現在出金できる金額は次のとおりです: {amount} QDT","wallet.withdrawAddressRequired":"出金アドレスを入力してください","wallet.withdrawAddressHint":"アドレスが正しいことを確認してください。退会後は取り消すことはできません。","wallet.withdrawSubmitSuccess":"出金申請が正常に送信されました。審査をお待ちください","menu.footer.contactUs":"お問い合わせ","menu.footer.getSupport":"サポートを受ける","menu.footer.socialAccounts":"ソーシャルアカウント","menu.footer.userAgreement":"ユーザー同意書","menu.footer.privacyPolicy":"プライバシーポリシー","menu.footer.support":"サポート","menu.footer.featureRequest":"機能リクエスト","menu.footer.email":"電子メール","menu.footer.liveChat":"24時間年中無休のライブチャット","dashboard.analysis.title":"多次元分析","dashboard.analysis.subtitle":"AIを活用した総合財務分析プラットフォーム","dashboard.analysis.selectSymbol":"基礎となるコードを選択または入力します","dashboard.analysis.selectModel":"モデルを選択してください","dashboard.analysis.startAnalysis":"分析を開始する","dashboard.analysis.history":"歴史","dashboard.analysis.tab.overview":"総合的な分析","dashboard.analysis.tab.fundamental":"基本","dashboard.analysis.tab.technical":"テクノロジー","dashboard.analysis.tab.news":"ニュース","dashboard.analysis.tab.sentiment":"感情","dashboard.analysis.tab.risk":"リスク","dashboard.analysis.tab.debate":"長短の議論","dashboard.analysis.tab.decision":"最終決定","dashboard.analysis.empty.selectSymbol":"分析を開始するターゲットを選択してください","dashboard.analysis.empty.selectSymbolDesc":"独自に選択した銘柄リストから選択するか、基礎となるコードを入力して多次元 AI 分析レポートを取得します","dashboard.analysis.empty.startAnalysis":"「分析開始」ボタンをクリックすると、多次元分析が実行されます。","dashboard.analysis.empty.startAnalysisDesc":"ファンダメンタルズ、テクノロジー、ニュース、センチメント、リスクなどの多次元から総合的な分析を提供します。","dashboard.analysis.empty.noData":"現在、{type} の分析データはありません。最初に包括的な分析を行ってください。","dashboard.analysis.empty.noWatchlist":"現在、自主選定銘柄はありません","dashboard.analysis.empty.noHistory":"まだ履歴がありません","dashboard.analysis.empty.watchlistHint":"現在、独自に選択した銘柄はありません。まずご確認ください。","dashboard.analysis.empty.noDebateData":"議論のデータはまだありません","dashboard.analysis.empty.noDecisionData":"決定データはまだありません","dashboard.analysis.empty.selectAgent":"分析結果を表示するにはエージェントを選択してください","dashboard.analysis.loading.analyzing":"分析中です、お待ちください...","dashboard.analysis.loading.fundamental":"基本データを分析中...","dashboard.analysis.loading.technical":"テクニカル指標を分析中...","dashboard.analysis.loading.news":"ニュースデータを分析中...","dashboard.analysis.loading.sentiment":"市場センチメントを分析中...","dashboard.analysis.loading.risk":"リスクを評価中...","dashboard.analysis.loading.debate":"長短の議論は続いています...","dashboard.analysis.loading.decision":"最終決定を生成中...","dashboard.analysis.score.overall":"総合評価","dashboard.analysis.score.recommendation":"投資アドバイス","dashboard.analysis.score.confidence":"自信","dashboard.analysis.dimension.fundamental":"基本","dashboard.analysis.dimension.technical":"テクノロジー","dashboard.analysis.dimension.news":"ニュース","dashboard.analysis.dimension.sentiment":"感情","dashboard.analysis.dimension.risk":"リスク","dashboard.analysis.card.dimensionScores":"各次元の評価","dashboard.analysis.card.overviewReport":"総合分析レポート","dashboard.analysis.card.financialMetrics":"財務指標","dashboard.analysis.card.fundamentalReport":"ファンダメンタルズ分析レポート","dashboard.analysis.card.technicalIndicators":"テクニカル指標","dashboard.analysis.card.technicalReport":"テクニカル分析レポート","dashboard.analysis.card.newsList":"関連ニュース","dashboard.analysis.card.newsReport":"ニュース分析レポート","dashboard.analysis.card.sentimentIndicators":"感情指標","dashboard.analysis.card.sentimentReport":"センチメント分析レポート","dashboard.analysis.card.riskMetrics":"リスク指標","dashboard.analysis.card.riskReport":"リスク評価レポート","dashboard.analysis.card.bullView":"強気の見方(強気)","dashboard.analysis.card.bearView":"弱気の見方(ベア)","dashboard.analysis.card.researchConclusion":"研究者の結論","dashboard.analysis.card.traderPlan":"トレーダープラン","dashboard.analysis.card.riskDebate":"リスク委員会の議論","dashboard.analysis.card.finalDecision":"最終決定","dashboard.analysis.card.tradePlanDetail":"取引プランの詳細","dashboard.analysis.tradingPlan.entry_price":"入場料","dashboard.analysis.tradingPlan.position_size":"ポジションサイズ","dashboard.analysis.tradingPlan.stop_loss":"ストップロス","dashboard.analysis.tradingPlan.take_profit":"利益確定","dashboard.analysis.label.confidence":"自信","dashboard.analysis.label.keyPoints":"コアポイント","dashboard.analysis.label.riskWarning":"リスク警告","dashboard.analysis.risk.risky":"危険な","dashboard.analysis.risk.neutral":"中立的な視点(ニュートラル)","dashboard.analysis.risk.safe":"保守的な見解(安全)","dashboard.analysis.risk.conclusion":"結論","dashboard.analysis.feature.fundamental":"ファンダメンタルズ分析","dashboard.analysis.feature.technical":"テクニカル分析","dashboard.analysis.feature.news":"ニュース分析","dashboard.analysis.feature.sentiment":"感情分析","dashboard.analysis.feature.risk":"リスク評価","dashboard.analysis.watchlist.title":"私の銘柄選択","dashboard.analysis.watchlist.add":"追加する","dashboard.analysis.watchlist.addStock":"在庫を追加する","dashboard.analysis.modal.addStock.title":"オプションのストックを追加する","dashboard.analysis.modal.addStock.confirm":"OK","dashboard.analysis.modal.addStock.cancel":"キャンセル","dashboard.analysis.modal.addStock.market":"市場タイプ","dashboard.analysis.modal.addStock.marketPlaceholder":"マーケットを選択してください","dashboard.analysis.modal.addStock.marketRequired":"マーケットタイプを選択してください","dashboard.analysis.modal.addStock.symbol":"証券コード","dashboard.analysis.modal.addStock.symbolPlaceholder":"例: AAPL、TSLA、GOOGL、000001、BTC","dashboard.analysis.modal.addStock.symbolRequired":"証券コードを入力してください","dashboard.analysis.modal.addStock.searchPlaceholder":"検索対象のコードまたは名前","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"基礎となるコードを検索または入力します (例: AAPL、BTC/USDT、EUR/USD)","dashboard.analysis.modal.addStock.searchOrInputHint":"データベース内のオブジェクトの検索、またはコードの直接入力をサポート (システムが自動的に名前を取得します)","dashboard.analysis.modal.addStock.search":"検索","dashboard.analysis.modal.addStock.searchResults":"検索結果","dashboard.analysis.modal.addStock.hotSymbols":"人気のターゲット","dashboard.analysis.modal.addStock.noHotSymbols":"人気のあるターゲットはまだありません","dashboard.analysis.modal.addStock.selectedSymbol":"選択済み","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"最初にターゲットを選択してください","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"ターゲットを選択するか、最初にターゲット コードを入力してください","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"ターゲットコードを入力してください","dashboard.analysis.modal.addStock.pleaseSelectMarket":"最初にマーケットタイプを選択してください","dashboard.analysis.modal.addStock.searchFailed":"検索に失敗しました。後でもう一度お試しください","dashboard.analysis.modal.addStock.noSearchResults":"一致するターゲットが見つかりません","dashboard.analysis.modal.addStock.willAutoFetchName":"システムが自動的に名前を取得します","dashboard.analysis.modal.addStock.addDirectly":"直接追加","dashboard.analysis.modal.addStock.nameWillBeFetched":"名前は追加時に自動的に取得されます","dashboard.analysis.market.USStock":"米国株","dashboard.analysis.market.Crypto":"暗号通貨","dashboard.analysis.market.Forex":"外国為替","dashboard.analysis.market.Futures":"先物","dashboard.analysis.modal.history.title":"過去の分析記録","dashboard.analysis.modal.history.viewResult":"結果を見る","dashboard.analysis.modal.history.completeTime":"完了時間","dashboard.analysis.modal.history.error":"エラー","dashboard.analysis.status.pending":"保留中","dashboard.analysis.status.processing":"処理中","dashboard.analysis.status.completed":"完了","dashboard.analysis.status.failed":"失敗しました","dashboard.analysis.message.selectSymbol":"最初にターゲットを選択してください","dashboard.analysis.message.taskCreated":"分析タスクが作成され、バックグラウンドで実行されています...","dashboard.analysis.message.analysisComplete":"分析完了","dashboard.analysis.message.analysisCompleteCache":"分析完了(キャッシュされたデータを使用)","dashboard.analysis.message.analysisFailed":"分析に失敗しました。後でもう一度お試しください。","dashboard.analysis.message.addStockSuccess":"正常に追加されました","dashboard.analysis.message.addStockFailed":"追加に失敗しました","dashboard.analysis.message.removeStockSuccess":"正常に削除されました","dashboard.analysis.message.removeStockFailed":"削除に失敗しました","dashboard.analysis.message.resumingAnalysis":"分析タスクを再開しています...","dashboard.analysis.message.deleteSuccess":"正常に削除されました","dashboard.analysis.message.deleteFailed":"削除に失敗しました","dashboard.analysis.modal.history.delete":"削除","dashboard.analysis.modal.history.deleteConfirm":"この分析記録を削除してもよろしいですか?","dashboard.analysis.test":"ショップ番号 {no}、公庄路","dashboard.analysis.introduce":"インジケーターの説明","dashboard.analysis.total-sales":"総売上高","dashboard.analysis.day-sales":"平均日販¥","dashboard.analysis.visits":"訪問","dashboard.analysis.visits-trend":"トラフィックの傾向","dashboard.analysis.visits-ranking":"来店ランキング","dashboard.analysis.day-visits":"毎日の訪問","dashboard.analysis.week":"毎週前年比","dashboard.analysis.day":"前年比","dashboard.analysis.payments":"支払い回数","dashboard.analysis.conversion-rate":"コンバージョン率","dashboard.analysis.operational-effect":"運営活動への影響","dashboard.analysis.sales-trend":"販売動向","dashboard.analysis.sales-ranking":"店舗売上ランキング","dashboard.analysis.all-year":"一年中","dashboard.analysis.all-month":"今月","dashboard.analysis.all-week":"今週","dashboard.analysis.all-day":"今日","dashboard.analysis.search-users":"検索ユーザー数","dashboard.analysis.per-capita-search":"一人当たりの検索数","dashboard.analysis.online-top-search":"オンラインで人気の検索","dashboard.analysis.the-proportion-of-sales":"売上カテゴリー比率","dashboard.analysis.dropdown-option-one":"作戦1","dashboard.analysis.dropdown-option-two":"操作 2","dashboard.analysis.channel.all":"すべてのチャンネル","dashboard.analysis.channel.online":"オンライン","dashboard.analysis.channel.stores":"店","dashboard.analysis.sales":"販売","dashboard.analysis.traffic":"乗客の流れ","dashboard.analysis.table.rank":"ランキング","dashboard.analysis.table.search-keyword":"検索キーワード","dashboard.analysis.table.users":"ユーザー数","dashboard.analysis.table.weekly-range":"毎週の増加","dashboard.indicator.selectSymbol":"基礎となるコードを選択または入力します","dashboard.indicator.emptyWatchlistHint":"現在、独自に選択した銘柄はありません。最初に追加してください。","dashboard.indicator.hint.selectSymbol":"分析を開始するにはターゲットを選択してください","dashboard.indicator.hint.selectSymbolDesc":"K ライン チャートとテクニカル指標を表示するには、上の検索ボックスに銘柄コードを選択または入力します。","dashboard.indicator.retry":"もう一度試してください","dashboard.indicator.panel.title":"テクニカル指標","dashboard.indicator.panel.realtimeOn":"リアルタイム更新をオフにする","dashboard.indicator.panel.realtimeOff":"リアルタイム更新を有効にする","dashboard.indicator.panel.themeLight":"ダークテーマに切り替える","dashboard.indicator.panel.themeDark":"ライトテーマに切り替える","dashboard.indicator.section.enabled":"有効","dashboard.indicator.section.added":"私が追加したインジケーター","dashboard.indicator.section.custom":"自分で作成したインジケーター","dashboard.indicator.section.bought":"購入したインジケーター","dashboard.indicator.section.myCreated":"私が作成したインジケーター","dashboard.indicator.empty":"まだインジケーターがありません。最初にインジケーターを追加または作成してください","dashboard.indicator.buy":"購入インジケーター","dashboard.indicator.action.start":"始める","dashboard.indicator.action.stop":"閉じる","dashboard.indicator.action.edit":"編集","dashboard.indicator.action.delete":"削除","dashboard.indicator.action.backtest":"バックテスト","dashboard.indicator.status.normal":"普通の","dashboard.indicator.status.normalPermanent":"通常(永続的に有効)","dashboard.indicator.status.expired":"期限切れ","dashboard.indicator.expiry.permanent":"永久に有効","dashboard.indicator.expiry.noExpiry":"有効期限なし","dashboard.indicator.expiry.expired":"期限切れ: {日付}","dashboard.indicator.expiry.expiresOn":"有効期限: {日付}","dashboard.indicator.delete.confirmTitle":"削除の確認","dashboard.indicator.delete.confirmContent":"インジケーター「{name}」を削除してもよろしいですか?この操作は元に戻すことができません。","dashboard.indicator.delete.confirmOk":"削除","dashboard.indicator.delete.confirmCancel":"キャンセル","dashboard.indicator.delete.success":"正常に削除されました","dashboard.indicator.delete.failed":"削除に失敗しました","dashboard.indicator.save.success":"正常に保存されました","dashboard.indicator.save.failed":"保存に失敗しました","dashboard.indicator.error.loadWatchlistFailed":"オプションのストックをロードできませんでした","dashboard.indicator.error.chartNotReady":"チャートコンポーネントは初期化されていません。最初にターゲットを選択し、チャートがロードされるまで待ってください。","dashboard.indicator.error.chartMethodNotReady":"グラフ コンポーネント メソッドの準備ができていません。後でもう一度お試しください。","dashboard.indicator.error.chartExecuteNotReady":"チャートコンポーネントの実行メソッドの準備ができていません。後でもう一度試してください。","dashboard.indicator.error.parseFailed":"Pythonコードを解析できません","dashboard.indicator.error.parseFailedCheck":"Python コードを解析できません。コード形式を確認してください。","dashboard.indicator.error.addIndicatorFailed":"インジケーターの追加に失敗しました","dashboard.indicator.error.runIndicatorFailed":"インジケーターの実行に失敗しました","dashboard.indicator.error.pleaseLogin":"まずログインしてください","dashboard.indicator.error.loadDataFailed":"データのロードに失敗しました","dashboard.indicator.error.loadDataFailedDesc":"ネットワーク接続を確認してください","dashboard.indicator.error.pythonEngineFailed":"Python エンジンのロードに失敗したため、インジケーター機能が使用できない可能性があります。","dashboard.indicator.error.chartInitFailed":"チャートの初期化に失敗しました","dashboard.indicator.warning.enterCode":"最初にインジケーターコードを入力してください","dashboard.indicator.warning.pyodideLoadFailed":"Python エンジンのロードに失敗しました","dashboard.indicator.warning.pyodideLoadFailedDesc":"この機能は、現在の地域またはネットワーク環境では利用できません","dashboard.indicator.warning.chartNotInitialized":"グラフが初期化されていないため、線描画ツールが使用できません。","dashboard.indicator.success.runIndicator":"インジケーターは正常に実行されます","dashboard.indicator.success.clearDrawings":"線画をすべてクリアしました","dashboard.indicator.sma":"SMA(移動平均結合)","dashboard.indicator.ema":"EMA (指数移動平均結合)","dashboard.indicator.rsi":"RSI (相対強度)","dashboard.indicator.macd":"MACD","dashboard.indicator.bb":"ボリンジャーバンド","dashboard.indicator.atr":"ATR (平均トゥルーレンジ)","dashboard.indicator.cci":"CCI (商品チャネル指数)","dashboard.indicator.williams":"ウィリアムズ %R (ウィリアムズ指標)","dashboard.indicator.mfi":"MFI(マネーフローインデックス)","dashboard.indicator.adx":"ADX(平均トレンド指数)","dashboard.indicator.obv":"OBV(エネルギー波)","dashboard.indicator.adosc":"ADOSC (アキュムレート/ディスパッチオシレーター)","dashboard.indicator.ad":"AD(蓄電・配電線)","dashboard.indicator.kdj":"KDJ (確率的指標)","dashboard.indicator.signal.buy":"買う","dashboard.indicator.signal.sell":"売る","dashboard.indicator.signal.supertrendBuy":"スーパートレンド購入","dashboard.indicator.signal.supertrendSell":"スーパートレンドセル","dashboard.indicator.chart.kline":"Kライン","dashboard.indicator.chart.volume":"ボリューム","dashboard.indicator.chart.uptrend":"上昇傾向","dashboard.indicator.chart.downtrend":"下降傾向","dashboard.indicator.tooltip.time":"時間","dashboard.indicator.tooltip.open":"開く","dashboard.indicator.tooltip.close":"受け取る","dashboard.indicator.tooltip.high":"高い","dashboard.indicator.tooltip.low":"低い","dashboard.indicator.tooltip.volume":"ボリューム","dashboard.indicator.drawing.line":"線分","dashboard.indicator.drawing.horizontalLine":"水平線","dashboard.indicator.drawing.verticalLine":"縦線","dashboard.indicator.drawing.ray":"光線","dashboard.indicator.drawing.straightLine":"直線","dashboard.indicator.drawing.parallelLine":"平行線","dashboard.indicator.drawing.priceLine":"価格ライン","dashboard.indicator.drawing.priceChannel":"価格チャネル","dashboard.indicator.drawing.fibonacciLine":"フィボナッチライン","dashboard.indicator.drawing.measure":"測定","dashboard.indicator.drawing.clearAll":"線画をすべてクリアする","dashboard.indicator.market.USStock":"米国株","dashboard.indicator.market.Crypto":"暗号通貨","dashboard.indicator.market.Forex":"外国為替","dashboard.indicator.market.Futures":"先物","dashboard.indicator.create":"インジケーターの作成","dashboard.indicator.editor.title":"インジケーターの作成/編集","dashboard.indicator.editor.name":"インジケーター名","dashboard.indicator.editor.nameRequired":"インジケーター名を入力してください","dashboard.indicator.editor.namePlaceholder":"インジケーター名を入力してください","dashboard.indicator.editor.description":"インジケーターの説明","dashboard.indicator.editor.descriptionPlaceholder":"インジケーターの説明を入力してください (オプション)","dashboard.indicator.editor.code":"Pythonコード","dashboard.indicator.editor.codeRequired":"インジケーターコードを入力してください","dashboard.indicator.editor.codePlaceholder":"Python コードを入力してください","dashboard.indicator.editor.run":"走る","dashboard.indicator.editor.runHint":"実行ボタンをクリックして、K ライン チャート上のインジケーターの効果をプレビューします。","dashboard.indicator.editor.guide":"開発ガイド","dashboard.indicator.editor.guideTitle":"Python インジケーター開発ガイド","dashboard.indicator.editor.save":"保存する","dashboard.indicator.editor.cancel":"キャンセル","dashboard.indicator.editor.unnamed":"名前のないインジケーター","dashboard.indicator.editor.publishToCommunity":"コミュニティに投稿する","dashboard.indicator.editor.publishToCommunityHint":"公開されると、他のユーザーがコミュニティでインジケーターを表示して使用できるようになります","dashboard.indicator.editor.indicatorType":"インジケーターの種類","dashboard.indicator.editor.indicatorTypeRequired":"インジケーターのタイプを選択してください","dashboard.indicator.editor.indicatorTypePlaceholder":"インジケーターのタイプを選択してください","dashboard.indicator.editor.previewImage":"プレビュー","dashboard.indicator.editor.uploadImage":"写真をアップロードする","dashboard.indicator.editor.previewImageHint":"推奨サイズ: 800x400、2MB 以下","dashboard.indicator.editor.pricing":"販売価格(QDT)","dashboard.indicator.editor.pricingType.free":"無料","dashboard.indicator.editor.pricingType.permanent":"永久的な","dashboard.indicator.editor.pricingType.monthly":"月々の支払い","dashboard.indicator.editor.price":"価格","dashboard.indicator.editor.priceRequired":"価格を入力してください","dashboard.indicator.editor.pricePlaceholder":"価格を入力してください","dashboard.indicator.editor.pricingHint":"無料のインジケーターの価格は 0 ですが、プラットフォームはインジケーターの使用量と賞賛率に基づいて報酬 (QDT) を与えます。","dashboard.indicator.editor.aiGenerate":"インテリジェントな世代","dashboard.indicator.editor.aiPromptPlaceholder":"あなたのアイデアを教えてください。Python インジケーター コードを生成します。","dashboard.indicator.editor.aiGenerateBtn":"AIが生成したコード","dashboard.indicator.editor.aiPromptRequired":"あなたの考えを入力してください","dashboard.indicator.editor.aiGenerateSuccess":"コード生成が成功しました","dashboard.indicator.editor.aiGenerateError":"コード生成に失敗しました。後でもう一度お試しください。","dashboard.indicator.editor.verifyCode":"コード検証","dashboard.indicator.editor.verifyCodeSuccess":"検証合格","dashboard.indicator.editor.verifyCodeFailed":"検証失敗","dashboard.indicator.editor.verifyCodeEmpty":"コードは空にできません","dashboard.indicator.backtest.title":"インジケーターのバックテスト","dashboard.indicator.backtest.config":"バックテストパラメータ","dashboard.indicator.backtest.startDate":"開始日","dashboard.indicator.backtest.endDate":"終了日","dashboard.indicator.backtest.selectStartDate":"開始日を選択してください","dashboard.indicator.backtest.selectEndDate":"終了日を選択してください","dashboard.indicator.backtest.startDateRequired":"開始日を選択してください","dashboard.indicator.backtest.endDateRequired":"終了日を選択してください","dashboard.indicator.backtest.initialCapital":"初期資本","dashboard.indicator.backtest.initialCapitalRequired":"初期資金を入力してください","dashboard.indicator.backtest.commission":"手数料","dashboard.indicator.backtest.leverage":"レバレッジ比率","dashboard.indicator.backtest.tradeDirection":"取引の方向性","dashboard.indicator.backtest.longOnly":"長く続けてください","dashboard.indicator.backtest.shortOnly":"短い","dashboard.indicator.backtest.both":"双方向","dashboard.indicator.backtest.run":"バックテストを開始する","dashboard.indicator.backtest.rerun":"もう一度バックテスト","dashboard.indicator.backtest.close":"閉じる","dashboard.indicator.backtest.running":"インジケーターのバックテストが進行中です...","dashboard.indicator.backtest.results":"バックテスト結果","dashboard.indicator.backtest.totalReturn":"トータルリターン","dashboard.indicator.backtest.annualReturn":"年収","dashboard.indicator.backtest.maxDrawdown":"最大ドローダウン","dashboard.indicator.backtest.sharpeRatio":"シャープレシオ","dashboard.indicator.backtest.winRate":"勝率","dashboard.indicator.backtest.profitFactor":"損益率","dashboard.indicator.backtest.totalTrades":"トランザクション数","dashboard.indicator.totalReturn":"トータルリターン","dashboard.indicator.annualReturn":"年換算収益率","dashboard.indicator.maxDrawdown":"最大ドローダウン","dashboard.indicator.sharpeRatio":"シャープレシオ","dashboard.indicator.winRate":"勝率","dashboard.indicator.profitFactor":"損益率","dashboard.indicator.totalTrades":"総トランザクション数","dashboard.indicator.backtest.totalCommission":"合計手数料","dashboard.indicator.backtest.equityCurve":"イールドカーブ","dashboard.indicator.backtest.strategy":"指標収入","dashboard.indicator.backtest.benchmark":"ベンチマークリターン","dashboard.indicator.backtest.tradeHistory":"取引履歴","dashboard.indicator.backtest.tradeTime":"時間","dashboard.indicator.backtest.tradeType":"タイプ","dashboard.indicator.backtest.buy":"買う","dashboard.indicator.backtest.sell":"売る","dashboard.indicator.backtest.liquidation":"清算","dashboard.indicator.backtest.openLong":"長く開く","dashboard.indicator.backtest.closeLong":"ピンドゥオ","dashboard.indicator.backtest.closeLongStop":"ロングに近い(ストップロス)","dashboard.indicator.backtest.closeLongProfit":"さらに閉じる(利益確定)","dashboard.indicator.backtest.addLong":"ロングポジションを追加","dashboard.indicator.backtest.openShort":"オープンショート","dashboard.indicator.backtest.closeShort":"空の","dashboard.indicator.backtest.closeShortStop":"クローズ(ストップロス)","dashboard.indicator.backtest.closeShortProfit":"クローズ(利益確定)","dashboard.indicator.backtest.addShort":"ショートポジションを追加","dashboard.indicator.backtest.price":"価格","dashboard.indicator.backtest.amount":"数量","dashboard.indicator.backtest.balance":"口座残高","dashboard.indicator.backtest.profit":"損益","dashboard.indicator.backtest.success":"バックテスト完了","dashboard.indicator.backtest.failed":"バックテストに失敗しました。後でもう一度お試しください","dashboard.indicator.backtest.noIndicatorCode":"このインジケーターにはバックテスト可能なコードはありません","dashboard.indicator.backtest.noSymbol":"最初に取引対象を選択してください","dashboard.indicator.backtest.dateRangeExceeded":"バックテストの時間範囲が制限を超えています: {timeframe} 期間は最大でも {maxRange} までバックテストできます","dashboard.indicator.backtest.dateRangeExceededDays":"Backtest range exceeds limit: {timeframe} max {maxRange} ({maxDays} days)","dashboard.indicator.backtest.metaLine":"Symbol: {symbol} | Market: {market} | Timeframe: {timeframe}","dashboard.indicator.backtest.savedRunId":"Backtest saved. Run ID: {id}","dashboard.indicator.backtest.prev":"Previous","dashboard.indicator.backtest.next":"Next","dashboard.indicator.backtest.steps.strategy.title":"Strategy","dashboard.indicator.backtest.steps.strategy.desc":"Position sizing & risk controls","dashboard.indicator.backtest.steps.trading.title":"Trading settings","dashboard.indicator.backtest.steps.trading.desc":"Time range, capital, fees, leverage","dashboard.indicator.backtest.steps.results.title":"Results","dashboard.indicator.backtest.steps.results.desc":"Backtest output","dashboard.indicator.backtest.panel.risk":"Risk management (SL/TP/Trailing)","dashboard.indicator.backtest.panel.scale":"Scale in / DCA (trend & mean-reversion)","dashboard.indicator.backtest.panel.reduce":"Reduce position (trend & adverse)","dashboard.indicator.backtest.panel.position":"Position sizing","dashboard.indicator.backtest.field.stopLossPct":"Stop Loss (%)","dashboard.indicator.backtest.field.takeProfitPct":"Take Profit (%)","dashboard.indicator.backtest.field.trailingEnabled":"Trailing stop / take profit","dashboard.indicator.backtest.field.trailingStopPct":"Trailing drawdown (%)","dashboard.indicator.backtest.field.trailingActivationPct":"Trailing activation (%)","dashboard.indicator.backtest.field.slippage":"Slippage (%)","dashboard.indicator.backtest.field.trendAddEnabled":"Trend-following scale-in","dashboard.indicator.backtest.field.dcaAddEnabled":"Mean-reversion DCA","dashboard.indicator.backtest.field.trendAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.dcaAddStepPct":"DCA trigger (%)","dashboard.indicator.backtest.field.trendAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.dcaAddSizePct":"DCA size (% of capital)","dashboard.indicator.backtest.field.trendAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.dcaAddMaxTimes":"Max DCA times","dashboard.indicator.backtest.field.trendReduceEnabled":"Trend reduce","dashboard.indicator.backtest.field.adverseReduceEnabled":"Adverse reduce","dashboard.indicator.backtest.field.trendReduceStepPct":"Trend trigger (%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"Adverse trigger (%)","dashboard.indicator.backtest.field.trendReduceSizePct":"Reduce size (% of position)","dashboard.indicator.backtest.field.adverseReduceSizePct":"Adverse reduce size (% of position)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"Max trend reduce times","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"Max adverse reduce times","dashboard.indicator.backtest.field.entryPct":"Entry size (% of capital)","dashboard.indicator.backtest.field.minOrderPct":"Min order size (% of capital) (optional)","dashboard.indicator.backtest.closeLongTrailing":"Close Long (Trailing)","dashboard.indicator.backtest.reduceLong":"Reduce Long","dashboard.indicator.backtest.closeShortTrailing":"Close Short (Trailing)","dashboard.indicator.backtest.reduceShort":"Reduce Short","dashboard.docs.title":"ドキュメントセンター","dashboard.docs.search.placeholder":"ドキュメントを検索...","dashboard.docs.category.all":"すべて","dashboard.docs.category.guide":"開発ガイド","dashboard.docs.category.api":"APIドキュメント","dashboard.docs.category.tutorial":"チュートリアル","dashboard.docs.category.faq":"よくある質問","dashboard.docs.featured.title":"推奨ドキュメント","dashboard.docs.featured.tag":"おすすめ","dashboard.docs.list.views":"閲覧する","dashboard.docs.list.author":"著者","dashboard.docs.list.empty":"まだ文書がありません","dashboard.docs.list.backToAll":"すべてのドキュメントに戻る","dashboard.docs.list.total":"合計 {count} 個のドキュメント","dashboard.docs.detail.back":"ドキュメントリストに戻る","dashboard.docs.detail.updatedAt":"に更新されました","dashboard.docs.detail.related":"関連資料","dashboard.docs.detail.notFound":"ドキュメントが存在しません","dashboard.docs.detail.error":"ドキュメントが存在しないか削除されています","dashboard.docs.search.result":"検索結果","dashboard.docs.search.keyword":"キーワード","community.filter.indicatorType":"インジケーターの種類","community.filter.all":"すべて","community.filter.other":"その他のオプション","community.filter.pricing":"価格タイプ","community.filter.allPricing":"すべての価格設定","community.filter.sortBy":"並べ替え順","community.filter.search":"検索","community.filter.searchPlaceholder":"検索メトリクス名","community.indicatorType.trend":"トレンドタイプ","community.indicatorType.momentum":"勢いタイプ","community.indicatorType.volatility":"ボラティリティ","community.indicatorType.volume":"ボリューム","community.indicatorType.custom":"カスタマイズ","community.pricing.free":"無料","community.pricing.paid":"支払う","community.sort.downloads":"ダウンロード","community.sort.rating":"評価","community.sort.newest":"最新リリース","community.pagination.total":"合計 {total} 個のインジケーター","community.noDescription":"まだ説明がありません","community.detail.type":"タイプ","community.detail.pricing":"価格設定","community.detail.rating":"評価","community.detail.downloads":"ダウンロード","community.detail.author":"著者","community.detail.description":"はじめに","community.detail.detailContent":"詳細な説明","community.detail.backtestStats":"バックテスト統計","community.action.purchase":"購入インジケーター","community.action.addToMyIndicators":"私のインジケーターに追加","community.action.favorite":"コレクション","community.action.unfavorite":"お気に入りをキャンセルする","community.action.buyNow":"今すぐ購入","community.action.renew":"リニューアル","community.purchase.price":"価格","community.purchase.permanent":"永久的な","community.purchase.monthly":"月","community.purchase.confirmBuy":"このインジケーター ({price} QDT) を購入することを確認しますか?","community.purchase.confirmRenew":"このインジケーター ({price} QDT/月) を更新することを確認しますか?","community.purchase.confirmFree":"この無料インジケーターを追加することを確認しますか?","community.purchase.confirmTitle":"アクションの確認","community.purchase.owned":"このインジケーターを購入しました (永久に有効です)","community.purchase.ownIndicator":"これはあなたが公開した指標です","community.purchase.expired":"サブスクリプションの有効期限が切れました","community.purchase.expiresOn":"有効期限: {日付}","community.tabs.detail":"インジケーターの詳細","community.tabs.backtest":"バックテストデータ","community.tabs.ratings":"ユーザーレビュー","community.rating.myRating":"私の評価","community.rating.stars":"{count} 個の星","community.rating.commentPlaceholder":"あなたの経験を共有してください...","community.rating.submit":"評価を送信する","community.rating.modify":"変更","community.rating.saveModify":"変更を保存する","community.rating.cancel":"キャンセル","community.rating.selectRating":"評価を選択してください","community.rating.success":"評価が成功しました","community.rating.modifySuccess":"レビューが正常に変更されました","community.rating.failed":"評価に失敗しました","community.rating.noRatings":"まだコメントはありません","community.backtest.note":"上記のデータは過去のバックテスト結果であり、参考のみを目的としており、将来の収益を示すものではありません。","community.backtest.noData":"バックテストデータはまだありません","community.backtest.uploadHint":"作者はまだバックテストデータをアップロードしていません","community.message.loadFailed":"インジケーターリストのロードに失敗しました","community.message.purchaseProcessing":"購入リクエストを処理しています...","community.message.downloadSuccess":"メトリックがメトリック リストに追加されました","community.message.favoriteSuccess":"収集に成功しました","community.message.unfavoriteSuccess":"収集を正常にキャンセルしました","community.message.operationSuccess":"操作は成功しました","community.message.operationFailed":"操作が失敗しました","community.banner.readOnly":"閲覧のみ","community.banner.loginHint":"ログインまたは登録が必要な場合は、ボタンをクリックして独立したページに移動し、CSRFの問題を回避してください","community.banner.jumpButton":"ログイン/登録へ","dashboard.totalEquity":"総資本","dashboard.totalPnL":"損益通算","dashboard.aiStrategies":"AI戦略","dashboard.indicatorStrategies":"指標戦略","dashboard.running":"ランニング","dashboard.pnlHistory":"過去の損益","dashboard.strategyPerformance":"戦略損益率","dashboard.recentTrades":"最近の取引","dashboard.currentPositions":"現在位置","dashboard.table.time":"時間","dashboard.table.strategy":"ポリシー名","dashboard.table.symbol":"ターゲット","dashboard.table.type":"タイプ","dashboard.table.side":"方向","dashboard.table.size":"建玉","dashboard.table.entryPrice":"平均始値","dashboard.table.price":"価格","dashboard.table.amount":"数量","dashboard.table.profit":"損益","dashboard.pendingOrders":"注文実行記録","dashboard.totalOrders":"合計 {total} 件","dashboard.viewError":"エラーを表示","dashboard.filled":"約定済み","dashboard.orderTable.time":"作成時間","dashboard.orderTable.strategy":"戦略","dashboard.orderTable.symbol":"取引ペア","dashboard.orderTable.signalType":"シグナルタイプ","dashboard.orderTable.amount":"数量","dashboard.orderTable.price":"約定価格","dashboard.orderTable.status":"ステータス","dashboard.orderTable.executedAt":"実行時間","dashboard.signalType.openLong":"ロング開始","dashboard.signalType.openShort":"ショート開始","dashboard.signalType.closeLong":"ロング決済","dashboard.signalType.closeShort":"ショート決済","dashboard.signalType.addLong":"ロング追加","dashboard.signalType.addShort":"ショート追加","dashboard.status.pending":"保留中","dashboard.status.processing":"処理中","dashboard.status.completed":"完了","dashboard.status.failed":"失敗","dashboard.status.cancelled":"キャンセル済み","dashboard.table.pnl":"未実現損益","form.basic-form.basic.title":"基本形","form.basic-form.basic.description":"フォーム ページは、ユーザーからの情報を収集または確認するために使用されます。 基本フォームは、データ項目が少ないフォーム シナリオでよく使用されます。","form.basic-form.title.label":"タイトル","form.basic-form.title.placeholder":"目標に名前を付けます","form.basic-form.title.required":"タイトルを入力してください","form.basic-form.date.label":"開始日と終了日","form.basic-form.placeholder.start":"開始日","form.basic-form.placeholder.end":"終了日","form.basic-form.date.required":"開始日と終了日を選択してください","form.basic-form.goal.label":"目標の説明","form.basic-form.goal.placeholder":"段階的な作業目標を入力してください","form.basic-form.goal.required":"目標の説明を入力してください","form.basic-form.standard.label":"測る","form.basic-form.standard.placeholder":"指標を入力してください","form.basic-form.standard.required":"指標を入力してください","form.basic-form.client.label":"お客様","form.basic-form.client.required":"あなたがサービスを提供しているクライアントについて説明してください","form.basic-form.label.tooltip":"対象サービス受信者","form.basic-form.client.placeholder":"あなたがサービスを提供している顧客、内部顧客について直接説明してください @名前/役職番号","form.basic-form.invites.label":"査読者を招待する","form.basic-form.invites.placeholder":"@名前/従業員番号を直接送信してください。最大 5 人まで招待できます","form.basic-form.weight.label":"重量","form.basic-form.weight.placeholder":"入力してください","form.basic-form.public.label":"ターゲットパブリック","form.basic-form.label.help":"顧客とレビュー担当者はデフォルトで共有されます","form.basic-form.radio.public":"公共の","form.basic-form.radio.partially-public":"部分的に公開","form.basic-form.radio.private":"プライベート","form.basic-form.publicUsers.placeholder":"にオープン","form.basic-form.option.A":"同僚1","form.basic-form.option.B":"同僚2","form.basic-form.option.C":"同僚3人","form.basic-form.email.required":"メールアドレスを入力してください!","form.basic-form.email.wrong-format":"メールアドレスの形式が間違っています!","form.basic-form.userName.required":"ユーザー名を入力してください!","form.basic-form.password.required":"パスワードを入力してください。","form.basic-form.password.twice":"2 回入力したパスワードが一致しません。","form.basic-form.strength.msg":"6文字以上を入力してください。 推測されやすいパスワードは使用しないでください。","form.basic-form.strength.strong":"強さ: 強い","form.basic-form.strength.medium":"強さ: 中","form.basic-form.strength.short":"強さ:短すぎる","form.basic-form.confirm-password.required":"パスワードを確認してください。","form.basic-form.phone-number.required":"携帯電話番号を入力してください!","form.basic-form.phone-number.wrong-format":"携帯電話番号の形式が間違っています。","form.basic-form.verification-code.required":"確認コードを入力してください。","form.basic-form.form.get-captcha":"確認コードを取得する","form.basic-form.captcha.second":"秒","form.basic-form.form.optional":"(オプション)","form.basic-form.form.submit":"送信する","form.basic-form.form.save":"保存する","form.basic-form.email.placeholder":"電子メール","form.basic-form.password.placeholder":"パスワードは 6 文字以上、大文字と小文字は区別されます","form.basic-form.confirm-password.placeholder":"パスワードの確認","form.basic-form.phone-number.placeholder":"携帯電話番号","form.basic-form.verification-code.placeholder":"認証コード","result.success.title":"送信成功","result.success.description":"投入結果ページは、一連の運用タスクの処理結果をフィードバックするために使用されます。単純な操作のみの場合は、メッセージ グローバル プロンプト フィードバックを使用します。このテキストエリアには簡単な補足説明を表示できます。 「ドキュメント」を表示する必要がある場合は、下の灰色の領域にさらに複雑なコンテンツを表示できます。","result.success.operate-title":"プロジェクト名","result.success.operate-id":"プロジェクトID","result.success.principal":"担当者","result.success.operate-time":"効果時間","result.success.step1-title":"プロジェクトの作成","result.success.step1-operator":"ク・リリ","result.success.step2-title":"部門の事前審査","result.success.step2-operator":"周猫猫","result.success.step2-extra":"緊急","result.success.step3-title":"財務レビュー","result.success.step4-title":"完了","result.success.btn-return":"リストに戻る","result.success.btn-project":"アイテムを見る","result.success.btn-print":"印刷する","result.fail.error.title":"送信に失敗しました","result.fail.error.description":"再送信する前に、次の情報を確認して変更してください。","result.fail.error.hint-title":"送信したコンテンツには次のエラーが含まれています。","result.fail.error.hint-text1":"あなたのアカウントは凍結されました","result.fail.error.hint-btn1":"すぐに解凍してください","result.fail.error.hint-text2":"あなたのアカウントはまだ申請する資格がありません","result.fail.error.hint-btn2":"今すぐアップグレードしてください","result.fail.error.btn-text":"修正に戻る","account.settings.menuMap.custom":"パーソナライゼーション","account.settings.menuMap.binding":"アカウントバインディング","account.settings.basic.avatar":"アバター","account.settings.basic.change-avatar":"アバターの変更","account.settings.basic.email":"電子メール","account.settings.basic.email-message":"メールアドレスを入力してください。","account.settings.basic.nickname":"ニックネーム","account.settings.basic.nickname-message":"ニックネームを入力してください!","account.settings.basic.profile":"プロフィール","account.settings.basic.profile-message":"あなたの個人プロフィールを入力してください!","account.settings.basic.profile-placeholder":"プロフィール","account.settings.basic.country":"国/地域","account.settings.basic.country-message":"あなたの国または地域を入力してください。","account.settings.basic.geographic":"県と市","account.settings.basic.geographic-message":"あなたの都道府県と市区町村を入力してください。","account.settings.basic.address":"住所","account.settings.basic.address-message":"住所を入力してください。","account.settings.basic.phone":"連絡先番号","account.settings.basic.phone-message":"連絡先番号を入力してください。","account.settings.basic.update":"基本情報を更新","account.settings.basic.update.success":"基本情報が正常に更新されました","account.settings.security.strong":"強い","account.settings.security.medium":"で","account.settings.security.weak":"弱い","account.settings.security.password":"アカウントのパスワード","account.settings.security.password-description":"現在のパスワードの強度:","account.settings.security.phone":"セキュリティ携帯電話","account.settings.security.phone-description":"すでにバインドされている携帯電話:","account.settings.security.question":"セキュリティの問題","account.settings.security.question-description":"秘密の質問は設定されていないため、アカウントのセキュリティを効果的に保護できます。","account.settings.security.email":"電子メールをバインドする","account.settings.security.email-description":"すでにバインドされている電子メール アドレス:","account.settings.security.mfa":"MFAデバイス","account.settings.security.mfa-description":"MFA デバイスはバインドされていません。バインド後、再度確認できます。","account.settings.security.modify":"変更","account.settings.security.set":"設定","account.settings.security.bind":"バインディング","account.settings.binding.taobao":"タオバオをバインドする","account.settings.binding.taobao-description":"タオバオアカウントは現在バインドされていません","account.settings.binding.alipay":"Alipayをバインドする","account.settings.binding.alipay-description":"Alipay アカウントは現在バインドされていません","account.settings.binding.dingding":"バインディングディントーク","account.settings.binding.dingding-description":"現在バインドされている DingTalk アカウントはありません","account.settings.binding.bind":"バインディング","account.settings.notification.password":"アカウントのパスワード","account.settings.notification.password-description":"他のユーザーからのメッセージは、サイトメッセージの形式で通知されます。","account.settings.notification.messages":"システムメッセージ","account.settings.notification.messages-description":"システム メッセージはサイト メッセージの形式で通知されます。","account.settings.notification.todo":"ToDoタスク","account.settings.notification.todo-description":"To Do タスクはサイト内メッセージの形式で通知されます","account.settings.settings.open":"開く","account.settings.settings.close":"閉じる","trading-assistant.title":"取引アシスタント","trading-assistant.strategyList":"戦略一覧","trading-assistant.createStrategy":"ポリシーの作成","trading-assistant.noStrategy":"まだ戦略はありません","trading-assistant.selectStrategy":"詳細を表示するには、左側から戦略を選択してください","trading-assistant.startStrategy":"戦略を立ち上げる","trading-assistant.stopStrategy":"戦略を停止する","trading-assistant.editStrategy":"編集戦略","trading-assistant.deleteStrategy":"ポリシーの削除","trading-assistant.status.running":"ランニング","trading-assistant.status.stopped":"停止しました","trading-assistant.status.error":"エラー","trading-assistant.strategyType.IndicatorStrategy":"テクニカル指標戦略","trading-assistant.strategyType.PromptBasedStrategy":"合言葉戦略","trading-assistant.strategyType.GridStrategy":"グリッド戦略","trading-assistant.tabs.tradingRecords":"取引履歴","trading-assistant.tabs.positions":"位置記録","trading-assistant.tabs.equityCurve":"資本曲線","trading-assistant.form.step1":"インジケーターの選択","trading-assistant.form.step2":"Exchangeの構成","trading-assistant.form.step3":"戦略パラメータ","trading-assistant.form.indicator":"インジケーターの選択","trading-assistant.form.indicatorHint":"購入または作成したテクニカル指標のみを選択できます","trading-assistant.form.qdtCostHints":"戦略を使用すると QDT が消費されます。アカウントに十分な QDT 残高があることを確認してください。","trading-assistant.form.indicatorDescription":"インジケーターの説明","trading-assistant.form.noDescription":"まだ説明がありません","trading-assistant.form.exchange":"交換を選択","trading-assistant.form.apiKey":"APIキー","trading-assistant.form.secretKey":"秘密鍵","trading-assistant.form.passphrase":"パスフレーズ","trading-assistant.form.testConnection":"テスト接続","trading-assistant.form.strategyName":"ポリシー名","trading-assistant.form.symbol":"取引ペア","trading-assistant.form.symbolHint":"現在、暗号通貨取引ペアのみがサポートされています","trading-assistant.form.initialCapital":"投資額","trading-assistant.form.marketType":"市場タイプ","trading-assistant.form.marketTypeFutures":"契約","trading-assistant.form.marketTypeSpot":"スポット","trading-assistant.form.marketTypeHint":"この契約は双方向の取引とレバレッジをサポートしますが、スポットはロングポジションのみをサポートし、レバレッジは 1 倍に固定されます。","trading-assistant.form.leverage":"複数を活用する","trading-assistant.form.leverageHint":"契約:1~125回、スポット:固定1回","trading-assistant.form.spotLeverageFixed":"現物取引のレバレッジは1倍に固定されます","trading-assistant.form.spotOnlyLongHint":"スポット取引はロングポジションのみをサポートします","trading-assistant.form.tradeDirection":"取引の方向性","trading-assistant.form.tradeDirectionLong":"ただ長いだけ","trading-assistant.form.tradeDirectionShort":"短いだけ","trading-assistant.form.tradeDirectionBoth":"双方向取引","trading-assistant.form.timeframe":"期間","trading-assistant.form.klinePeriod":"K線期間","trading-assistant.form.timeframe1m":"1分","trading-assistant.form.timeframe5m":"5分","trading-assistant.form.timeframe15m":"15分","trading-assistant.form.timeframe30m":"30分","trading-assistant.form.timeframe1H":"1時間","trading-assistant.form.timeframe4H":"4時間","trading-assistant.form.timeframe1D":"1日","trading-assistant.form.selectStrategyType":"戦略タイプを選択","trading-assistant.form.indicatorStrategy":"インジケーター戦略","trading-assistant.form.indicatorStrategyDesc":"テクニカルインジケーターに基づく自動取引戦略","trading-assistant.form.aiStrategy":"AI戦略","trading-assistant.form.aiStrategyDesc":"AIインテリジェント意思決定に基づく自動取引戦略","trading-assistant.form.enableAiFilter":"AIインテリジェント意思決定フィルターを有効化","trading-assistant.form.enableAiFilterHint":"有効にすると、インジケーターシグナルがAIによってフィルタリングされ、取引品質が向上します","trading-assistant.form.aiFilterPrompt":"カスタムプロンプト","trading-assistant.form.aiFilterPromptHint":"AIフィルタリングにカスタム指示を提供し、空白のままにするとシステムデフォルトを使用します","trading-assistant.validation.strategyTypeRequired":"戦略タイプを選択してください","trading-assistant.form.advancedSettings":"詳細設定","trading-assistant.form.orderMode":"オーダーモード","trading-assistant.form.orderModeMaker":"メーカー","trading-assistant.form.orderModeTaker":"市場価格(テイカー)","trading-assistant.form.orderModeHint":"未決注文モードでは指値注文が使用され、手数料が安くなります。市場価格モードはすぐに実行され、手数料が高くなります。","trading-assistant.form.makerWaitSec":"未決注文の待ち時間 (秒)","trading-assistant.form.makerWaitSecHint":"注文後の取引を待つ時間。キャンセルして、タイムアウト後に再試行してください。","trading-assistant.form.makerRetries":"未決注文の再試行回数","trading-assistant.form.makerRetriesHint":"未決注文が約定しない場合の最大リトライ回数","trading-assistant.form.fallbackToMarket":"未決注文は失敗し、市場価格は引き下げられます。","trading-assistant.form.fallbackToMarketHint":"開始/終了未決注文が完了していない場合、トランザクションを確実に完了させるために成行注文にダウングレードする必要があるかどうか。","trading-assistant.form.marginMode":"マージンモード","trading-assistant.form.marginModeCross":"倉庫がいっぱい","trading-assistant.form.marginModeIsolated":"孤立した位置","trading-assistant.form.stopLossPct":"ストップロス率(%)","trading-assistant.form.stopLossPctHint":"ストップロスのパーセンテージを設定します。0 はストップロスが有効になっていないことを意味します","trading-assistant.form.takeProfitPct":"テイクプロフィット率(%)","trading-assistant.form.takeProfitPctHint":"テイクプロフィットのパーセンテージを設定します。0 はテイクプロフィットを無効にすることを意味します","trading-assistant.form.signalMode":"信号モード","trading-assistant.form.signalModeConfirmed":"確認モード","trading-assistant.form.signalModeAggressive":"アグレッシブモード","trading-assistant.form.signalModeHint":"確認モード: 完了した K 行のみをチェックします。アグレッシブ モード: K ラインの形成もチェックします","trading-assistant.form.cancel":"キャンセル","trading-assistant.form.prev":"前のステップ","trading-assistant.form.next":"次のステップ","trading-assistant.form.confirmCreate":"作成の確認","trading-assistant.form.confirmEdit":"変更を確認する","trading-assistant.messages.createSuccess":"戦略が正常に作成されました","trading-assistant.messages.createFailed":"ポリシーの作成に失敗しました","trading-assistant.messages.updateSuccess":"ポリシーの更新が成功しました","trading-assistant.messages.updateFailed":"ポリシーの更新に失敗しました","trading-assistant.messages.deleteSuccess":"ポリシーの削除が成功しました","trading-assistant.messages.deleteFailed":"ポリシーの削除に失敗しました","trading-assistant.messages.startSuccess":"戦略は無事に開始されました","trading-assistant.messages.startFailed":"ポリシーの開始に失敗しました","trading-assistant.messages.stopSuccess":"戦略は正常に停止されました","trading-assistant.messages.stopFailed":"停止戦略は失敗しました","trading-assistant.messages.loadFailed":"ポリシーリストの取得に失敗しました","trading-assistant.messages.runningWarning":"戦略は実行されています。 戦略を変更する前に戦略を停止してください。","trading-assistant.messages.deleteConfirmWithName":"ポリシー「{name}」を削除してもよろしいですか?この操作は元に戻すことができません。","trading-assistant.messages.deleteConfirm":"このポリシーを削除してもよろしいですか?この操作は元に戻すことができません。","trading-assistant.messages.loadTradesFailed":"取引記録の取得に失敗しました","trading-assistant.messages.loadPositionsFailed":"位置レコードの取得に失敗しました","trading-assistant.messages.loadEquityFailed":"資本曲線の取得に失敗しました","trading-assistant.messages.loadIndicatorsFailed":"インジケーター リストの読み込みに失敗しました。後でもう一度お試しください。","trading-assistant.messages.spotLimitations":"スポット取引は自動的にロングのみ、レバレッジ1倍に設定されています","trading-assistant.messages.autoFillApiConfig":"取引所の過去の API 設定が自動的に入力されます","trading-assistant.placeholders.selectIndicator":"インジケーターを選択してください","trading-assistant.placeholders.selectExchange":"交換を選択してください","trading-assistant.placeholders.inputApiKey":"APIキーを入力してください","trading-assistant.placeholders.inputSecretKey":"秘密キーを入力してください","trading-assistant.placeholders.inputPassphrase":"パスフレーズを入力してください","trading-assistant.placeholders.inputStrategyName":"ポリシー名を入力してください","trading-assistant.placeholders.selectSymbol":"取引ペアを選択してください","trading-assistant.placeholders.selectTimeframe":"期間を選択してください","trading-assistant.placeholders.selectKlinePeriod":"K線期間を選択してください","trading-assistant.placeholders.inputAiFilterPrompt":"カスタムプロンプトを入力してください(オプション)","trading-assistant.validation.indicatorRequired":"インジケーターを選択してください","trading-assistant.validation.exchangeRequired":"交換を選択してください","trading-assistant.validation.apiKeyRequired":"APIキーを入力してください","trading-assistant.validation.secretKeyRequired":"秘密キーを入力してください","trading-assistant.validation.passphraseRequired":"パスフレーズを入力してください","trading-assistant.validation.exchangeConfigIncomplete":"完全な交換構成情報を入力してください","trading-assistant.validation.testConnectionRequired":"まず「テスト接続」ボタンをクリックし、接続が成功することを確認してください","trading-assistant.validation.testConnectionFailed":"接続テストに失敗しました。設定を確認して再度テストしてください","trading-assistant.validation.credentialRequired":"まず個人センターで取引所の認証情報を追加してテストしてください","trading-assistant.validation.strategyNameRequired":"ポリシー名を入力してください","trading-assistant.validation.symbolRequired":"取引ペアを選択してください","trading-assistant.validation.initialCapitalRequired":"投資額を入力してください","trading-assistant.validation.leverageRequired":"レバレッジ比率を入力してください","trading-assistant.table.time":"時間","trading-assistant.table.type":"タイプ","trading-assistant.table.price":"価格","trading-assistant.table.amount":"数量","trading-assistant.table.value":"金額","trading-assistant.table.commission":"手数料","trading-assistant.table.symbol":"取引ペア","trading-assistant.table.side":"方向","trading-assistant.table.size":"ポジション数量","trading-assistant.table.entryPrice":"オープン価格","trading-assistant.table.currentPrice":"現在の価格","trading-assistant.table.unrealizedPnl":"未実現損益","trading-assistant.table.pnlPercent":"損益率","trading-assistant.table.buy":"買う","trading-assistant.table.sell":"売る","trading-assistant.table.long":"長く続けてください","trading-assistant.table.short":"短い","trading-assistant.table.noPositions":"まだポジションがありません","trading-assistant.detail.title":"戦略の詳細","trading-assistant.detail.strategyName":"ポリシー名","trading-assistant.detail.strategyType":"戦略タイプ","trading-assistant.detail.status":"ステータス","trading-assistant.detail.tradingMode":"取引モデル","trading-assistant.detail.exchange":"交換","trading-assistant.detail.initialCapital":"初期資本","trading-assistant.detail.totalInvestment":"投資総額","trading-assistant.detail.currentEquity":"現在の純資産","trading-assistant.detail.totalPnl":"損益通算","trading-assistant.detail.indicatorName":"インジケーター名","trading-assistant.detail.maxLeverage":"最大レバレッジ","trading-assistant.detail.decideInterval":"決定間隔","trading-assistant.detail.symbols":"トランザクションオブジェクト","trading-assistant.detail.createdAt":"作成時間","trading-assistant.detail.updatedAt":"更新時間","trading-assistant.detail.llmConfig":"AIモデル構成","trading-assistant.detail.exchangeConfig":"Exchangeの構成","trading-assistant.detail.provider":"プロバイダー","trading-assistant.detail.modelId":"モデルID","trading-assistant.detail.close":"閉じる","trading-assistant.detail.loadFailed":"ポリシーの詳細を取得できませんでした","trading-assistant.equity.noData":"純資産データはまだありません","trading-assistant.equity.equity":"純資産","trading-assistant.exchange.tradingMode":"取引モデル","trading-assistant.exchange.virtual":"模擬取引","trading-assistant.exchange.live":"実際のトランザクション","trading-assistant.exchange.selectExchange":"交換を選択","trading-assistant.exchange.walletAddress":"ウォレットアドレス","trading-assistant.exchange.walletAddressPlaceholder":"ウォレットアドレスを入力してください(0xで始まる)","trading-assistant.exchange.privateKey":"秘密鍵","trading-assistant.exchange.privateKeyPlaceholder":"秘密キーを入力してください(64文字)","trading-assistant.exchange.testConnection":"テスト接続","trading-assistant.exchange.connectionSuccess":"接続成功","trading-assistant.exchange.connectionFailed":"接続に失敗しました","trading-assistant.exchange.testFailed":"接続テストに失敗しました","trading-assistant.exchange.fillComplete":"完全な交換構成情報を入力してください","trading-assistant.strategyTypeOptions.ai":"AI主導の戦略","trading-assistant.strategyTypeOptions.indicator":"テクニカル指標戦略","trading-assistant.strategyTypeOptions.aiDeveloping":"AIを活用した戦略機能は開発中ですのでご期待ください","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"AI主導の戦略機能は開発中です","trading-assistant.indicatorType.trend":"トレンド","trading-assistant.indicatorType.momentum":"勢い","trading-assistant.indicatorType.volatility":"変動","trading-assistant.indicatorType.volume":"ボリューム","trading-assistant.indicatorType.custom":"カスタマイズ","trading-assistant.exchangeNames":{okx:"OKX",binance:"バイナンス",hyperliquid:"超流動性",blockchaincom:"Blockchain.com",coinbaseexchange:"コインベース",gate:"Gate.io",mexc:"メキシコ",kraken:"クラーケン",bitfinex:"ビットフィネックス",bybit:"バイビット",kucoin:"クーコイン",huobi:"フォビ",bitget:"ビゲット",bitmex:"ビットメックス",deribit:"デリビット",phemex:"フェメックス",bitmart:"ビットマート",bitstamp:"ビットスタンプ",bittrex:"ビットレックス",poloniex:"ポロニエックス",gemini:"ジェミニ",cryptocom:"Crypto.com",bitflyer:"ビットフライヤー",upbit:"アップビット",bithumb:"ビサム",coinone:"コイノン",zb:"ZB",lbank:"Lバンク",bibox:"ビボックス",bigone:"ビッグワン",bitrue:"ビトゥルー",coinex:"CoinEx",digifinex:"デジフィネックス",ftx:"FTX",ftxus:"FTX米国",binanceus:"バイナンスUS",binancecoinm:"バイナンス COIN-M",binanceusdm:"バイナンスUSDⓈ-M",deepcoin:"ディープコイン"},"ai-trading-assistant.title":"AI取引アシスタント","ai-trading-assistant.strategyList":"戦略一覧","ai-trading-assistant.createStrategy":"ポリシーの作成","ai-trading-assistant.noStrategy":"まだ戦略はありません","ai-trading-assistant.selectStrategy":"詳細を表示するには、左側から戦略を選択してください","ai-trading-assistant.startStrategy":"戦略を立ち上げる","ai-trading-assistant.stopStrategy":"戦略を停止する","ai-trading-assistant.editStrategy":"編集戦略","ai-trading-assistant.deleteStrategy":"ポリシーの削除","ai-trading-assistant.status.running":"ランニング","ai-trading-assistant.status.stopped":"停止しました","ai-trading-assistant.status.error":"エラー","ai-trading-assistant.tabs.tradingRecords":"取引履歴","ai-trading-assistant.tabs.positions":"位置記録","ai-trading-assistant.tabs.aiDecisions":"AI判定記録","ai-trading-assistant.tabs.equityCurve":"資本曲線","ai-trading-assistant.form.createTitle":"AI取引戦略を作成する","ai-trading-assistant.form.editTitle":"AI取引戦略を編集する","ai-trading-assistant.form.strategyName":"ポリシー名","ai-trading-assistant.form.modelId":"AIモデル","ai-trading-assistant.form.modelIdHint":"API キーを設定せずにシステム OpenRouter サービスを使用する","ai-trading-assistant.form.decideInterval":"決定間隔","ai-trading-assistant.form.decideInterval5m":"5分","ai-trading-assistant.form.decideInterval10m":"10分","ai-trading-assistant.form.decideInterval30m":"30分","ai-trading-assistant.form.decideInterval1h":"1時間","ai-trading-assistant.form.decideInterval4h":"4時間","ai-trading-assistant.form.decideInterval1d":"1日","ai-trading-assistant.form.decideInterval1w":"1週間","ai-trading-assistant.form.decideIntervalHint":"AIが意思決定を行うまでの時間間隔","ai-trading-assistant.form.runPeriod":"実行サイクル","ai-trading-assistant.form.runPeriodHint":"戦略実行の開始時刻と終了時刻","ai-trading-assistant.form.startDate":"開始日","ai-trading-assistant.form.endDate":"終了日","ai-trading-assistant.form.qdtCostTitle":"QDT 控除の指示","ai-trading-assistant.form.qdtCostHint":"AI の決定ごとに {cost} QDT が差し引かれます。アカウントに十分な QDT 残高があることを確認してください。戦略の実行中、決定ごとに料金がリアルタイムで差し引かれます。","ai-trading-assistant.form.apiKey":"APIキー","ai-trading-assistant.form.exchange":"交換を選択","ai-trading-assistant.form.secretKey":"秘密鍵","ai-trading-assistant.form.passphrase":"パスフレーズ","ai-trading-assistant.form.testConnection":"テスト接続","ai-trading-assistant.form.symbol":"取引ペア","ai-trading-assistant.form.symbolHint":"取引する取引ペアを選択してください","ai-trading-assistant.form.initialCapital":"投資額(証拠金)","ai-trading-assistant.form.leverage":"複数を活用する","ai-trading-assistant.form.timeframe":"期間","ai-trading-assistant.form.timeframe1m":"1分","ai-trading-assistant.form.timeframe5m":"5分","ai-trading-assistant.form.timeframe15m":"15分","ai-trading-assistant.form.timeframe30m":"30分","ai-trading-assistant.form.timeframe1H":"1時間","ai-trading-assistant.form.timeframe4H":"4時間","ai-trading-assistant.form.timeframe1D":"1日","ai-trading-assistant.form.marketType":"市場タイプ","ai-trading-assistant.form.marketTypeFutures":"契約","ai-trading-assistant.form.marketTypeSpot":"スポット","ai-trading-assistant.form.totalPnl":"損益通算","ai-trading-assistant.form.customPrompt":"カスタムのプロンプト単語","ai-trading-assistant.form.customPromptHint":"オプション。 AI 取引戦略と意思決定ロジックをカスタマイズするために使用されます。","ai-trading-assistant.form.cancel":"キャンセル","ai-trading-assistant.form.prev":"前のステップ","ai-trading-assistant.form.next":"次のステップ","ai-trading-assistant.form.confirmCreate":"作成の確認","ai-trading-assistant.form.confirmEdit":"変更を確認する","ai-trading-assistant.messages.createSuccess":"戦略が正常に作成されました","ai-trading-assistant.messages.createFailed":"ポリシーの作成に失敗しました","ai-trading-assistant.messages.updateSuccess":"ポリシーの更新が成功しました","ai-trading-assistant.messages.updateFailed":"ポリシーの更新に失敗しました","ai-trading-assistant.messages.deleteSuccess":"ポリシーの削除が成功しました","ai-trading-assistant.messages.deleteFailed":"ポリシーの削除に失敗しました","ai-trading-assistant.messages.startSuccess":"戦略は無事に開始されました","ai-trading-assistant.messages.startFailed":"ポリシーの開始に失敗しました","ai-trading-assistant.messages.stopSuccess":"戦略は正常に停止されました","ai-trading-assistant.messages.stopFailed":"停止戦略は失敗しました","ai-trading-assistant.messages.loadFailed":"ポリシーリストの取得に失敗しました","ai-trading-assistant.messages.loadDecisionsFailed":"AI判定記録の取得に失敗しました","ai-trading-assistant.messages.deleteConfirm":"このポリシーを削除してもよろしいですか?この操作は元に戻すことができません。","ai-trading-assistant.placeholders.inputStrategyName":"ポリシー名を入力してください","ai-trading-assistant.placeholders.selectModelId":"AI モデルを選択してください","ai-trading-assistant.placeholders.selectDecideInterval":"決定間隔を選択してください","ai-trading-assistant.placeholders.startTime":"開始時間","ai-trading-assistant.placeholders.endTime":"終了時間","ai-trading-assistant.placeholders.inputApiKey":"APIキーを入力してください","ai-trading-assistant.placeholders.selectExchange":"交換を選択してください","ai-trading-assistant.placeholders.inputSecretKey":"秘密キーを入力してください","ai-trading-assistant.placeholders.inputPassphrase":"パスフレーズを入力してください","ai-trading-assistant.placeholders.selectSymbol":"BTC/USDT などの取引ペアを選択してください。","ai-trading-assistant.placeholders.selectTimeframe":"期間を選択してください","ai-trading-assistant.placeholders.inputCustomPrompt":"カスタムのプロンプト単語を入力してください (オプション)","ai-trading-assistant.validation.strategyNameRequired":"ポリシー名を入力してください","ai-trading-assistant.validation.modelIdRequired":"AI モデルを選択してください","ai-trading-assistant.validation.runPeriodRequired":"実行サイクルを選択してください","ai-trading-assistant.validation.apiKeyRequired":"APIキーを入力してください","ai-trading-assistant.validation.exchangeRequired":"交換を選択してください","ai-trading-assistant.validation.secretKeyRequired":"秘密キーを入力してください","ai-trading-assistant.validation.symbolRequired":"取引ペアを選択してください","ai-trading-assistant.validation.initialCapitalRequired":"投資額を入力してください","ai-trading-assistant.table.time":"時間","ai-trading-assistant.table.type":"タイプ","ai-trading-assistant.table.price":"価格","ai-trading-assistant.table.amount":"数量","ai-trading-assistant.table.value":"金額","ai-trading-assistant.table.symbol":"取引ペア","ai-trading-assistant.table.side":"方向","ai-trading-assistant.table.size":"ポジション数量","ai-trading-assistant.table.entryPrice":"オープン価格","ai-trading-assistant.table.currentPrice":"現在の価格","ai-trading-assistant.table.unrealizedPnl":"未実現損益","ai-trading-assistant.table.profit":"損益","ai-trading-assistant.table.openLong":"長く開く","ai-trading-assistant.table.closeLong":"ピンドゥオ","ai-trading-assistant.table.openShort":"オープンショート","ai-trading-assistant.table.closeShort":"空の","ai-trading-assistant.table.addLong":"ガドット","ai-trading-assistant.table.addShort":"短く追加する","ai-trading-assistant.table.closeShortProfit":"ショートポジションで利益確定","ai-trading-assistant.table.closeShortStop":"ストップロス","ai-trading-assistant.table.closeLongProfit":"長く停止して利益を得る","ai-trading-assistant.table.closeLongStop":"ストップロス","ai-trading-assistant.table.buy":"買う","ai-trading-assistant.table.sell":"売る","ai-trading-assistant.table.long":"長く続けてください","ai-trading-assistant.table.short":"短い","ai-trading-assistant.table.hold":"ホールド","ai-trading-assistant.table.reasoning":"分析理由","ai-trading-assistant.table.decisions":"意思決定","ai-trading-assistant.table.riskAssessment":"リスク評価","ai-trading-assistant.table.confidence":"自信","ai-trading-assistant.table.totalRecords":"合計 {total} レコード","ai-trading-assistant.table.noPositions":"まだポジションがありません","ai-trading-assistant.detail.title":"戦略の詳細","ai-trading-assistant.equity.noData":"純資産データはまだありません","ai-trading-assistant.equity.equity":"純資産","ai-trading-assistant.exchange.testFailed":"接続テストに失敗しました","ai-trading-assistant.exchange.connectionSuccess":"接続成功","ai-trading-assistant.exchange.connectionFailed":"接続に失敗しました","ai-trading-assistant.form.advancedSettings":"詳細設定","ai-trading-assistant.form.orderMode":"オーダーモード","ai-trading-assistant.form.orderModeMaker":"メーカー","ai-trading-assistant.form.orderModeTaker":"市場価格(テイカー)","ai-trading-assistant.form.orderModeHint":"未決注文モードでは指値注文が使用され、手数料が安くなります。市場価格モードはすぐに実行され、手数料が高くなります。","ai-trading-assistant.form.makerWaitSec":"未決注文の待ち時間 (秒)","ai-trading-assistant.form.makerWaitSecHint":"注文後の取引を待つ時間。キャンセルして、タイムアウト後に再試行してください。","ai-trading-assistant.form.makerRetries":"未決注文の再試行回数","ai-trading-assistant.form.makerRetriesHint":"未決注文が約定しない場合の最大リトライ回数","ai-trading-assistant.form.fallbackToMarket":"未決注文は失敗し、市場価格は引き下げられます。","ai-trading-assistant.form.fallbackToMarketHint":"開始/終了未決注文が完了していない場合、トランザクションを確実に完了させるために成行注文にダウングレードする必要があるかどうか。","ai-trading-assistant.form.marginMode":"マージンモード","ai-trading-assistant.form.marginModeCross":"倉庫がいっぱい","ai-trading-assistant.form.marginModeIsolated":"孤立した位置","ai-analysis.title":"クォンタムトレーディングエンジン","ai-analysis.system.online":"オンライン","ai-analysis.system.agents":"エージェント","ai-analysis.system.active":"アクティブな","ai-analysis.system.stage":"ステージ","ai-analysis.panel.roster":"エージェントラインナップ","ai-analysis.panel.thinking":"考え中...","ai-analysis.panel.done":"完了","ai-analysis.panel.standby":"スタンバイ","ai-analysis.input.title":"クォンタムトレーディングエンジン","ai-analysis.input.placeholder":"ターゲット資産を選択します (例: BTC/USDT)","ai-analysis.input.watchlist":"オプションストック","ai-analysis.input.start":"分析を開始する","ai-analysis.input.recent":"最近のタスク:","ai-analysis.vis.stage":"ステージ","ai-analysis.vis.processing":"処理中","ai-analysis.result.complete":"分析完了","ai-analysis.result.signal":"最終信号","ai-analysis.result.confidence":"自信:","ai-analysis.result.new":"新しい分析","ai-analysis.result.full":"レポート全体を表示","ai-analysis.logs.title":"システムログ","ai-analysis.modal.title":"機密報告書","ai-analysis.modal.fundamental":"ファンダメンタルズ分析","ai-analysis.modal.technical":"テクニカル分析","ai-analysis.modal.sentiment":"感情分析","ai-analysis.modal.risk":"リスク評価","ai-analysis.stage.idle":"スタンバイ","ai-analysis.stage.1":"フェーズ 1: 多次元分析","ai-analysis.stage.2":"フェーズ 2: 長短討論","ai-analysis.stage.3":"フェーズ 3: 戦略計画","ai-analysis.stage.4":"第 4 段階: リスク管理のレビュー","ai-analysis.stage.complete":"完了","ai-analysis.agent.investment_director":"投資ディレクター","ai-analysis.agent.role.investment_director":"包括的な分析と最終結論","ai-analysis.agent.market":"市場アナリスト","ai-analysis.agent.role.market":"テクノロジーと市場データ","ai-analysis.agent.fundamental":"ファンダメンタルズアナリスト","ai-analysis.agent.role.fundamental":"財務と評価","ai-analysis.agent.technical":"テクニカルアナリスト","ai-analysis.agent.role.technical":"テクニカル指標とチャート","ai-analysis.agent.news":"ニュースアナリスト","ai-analysis.agent.role.news":"グローバルニュースフィルター","ai-analysis.agent.sentiment":"センチメントアナリスト","ai-analysis.agent.role.sentiment":"社会的&感情的","ai-analysis.agent.risk":"リスクアナリスト","ai-analysis.agent.role.risk":"基本的なリスクチェック","ai-analysis.agent.bull":"強気な研究者","ai-analysis.agent.role.bull":"成長触媒の採掘","ai-analysis.agent.bear":"弱気な研究者","ai-analysis.agent.role.bear":"リスクと欠陥の掘り下げ","ai-analysis.agent.manager":"研究マネージャー","ai-analysis.agent.role.manager":"ディベートモデレーター","ai-analysis.agent.trader":"トレーダー","ai-analysis.agent.role.trader":"エグゼクティブ・ストラテジスト","ai-analysis.agent.risky":"活動家アナリスト","ai-analysis.agent.role.risky":"積極的な戦略","ai-analysis.agent.neutral":"バランスアナリスト","ai-analysis.agent.role.neutral":"バランス戦略","ai-analysis.agent.safe":"保守的なアナリスト","ai-analysis.agent.role.safe":"保守的な戦略","ai-analysis.agent.cro":"リスクコントロールマネージャー (CRO)","ai-analysis.agent.role.cro":"最終的な意思決定権限","ai-analysis.script.market":"主要な取引所から OHLCV データを取得しています...","ai-analysis.script.fundamental":"四半期財務報告書を取得しています...","ai-analysis.script.technical":"テクニカル指標とチャートパターンを分析しています...","ai-analysis.script.news":"世界的な金融ニュースを調べています...","ai-analysis.script.sentiment":"ソーシャルメディアのトレンドを分析中...","ai-analysis.script.risk":"過去のボラティリティを計算しています...","invite.inviteLink":"招待リンク","invite.copy":"リンクをコピー","invite.copySuccess":"コピー成功!","invite.copyFailed":"コピーに失敗しました。 手動でコピーしてください","invite.noInviteLink":"招待リンクが生成されませんでした","invite.totalInvites":"累積招待状","invite.totalReward":"累計報酬","invite.rules":"招待ルール","invite.rule1":"友達の登録に成功するたびに、報酬を受け取ります","invite.rule2":"招待された友達が最初のトランザクションを完了すると、追加の報酬を受け取ります","invite.rule3":"招待特典はアカウントに直接送信されます","invite.inviteList":"招待リスト","invite.tasks":"ミッションセンター","invite.inviteeName":"招待者","invite.inviteTime":"招待時間","invite.status":"ステータス","invite.reward":"報酬","invite.active":"アクティブな","invite.inactive":"アクティブ化されていません","invite.completed":"完了","invite.claimed":"受け取りました","invite.pending":"完成予定","invite.goToTask":"完了する","invite.claimReward":"報酬を請求する","invite.verify":"検証完了","invite.verifySuccess":"検証成功!タスクが完了しました","invite.verifyNotCompleted":"タスクはまだ完了していません。 最初にタスクを完了してください","invite.verifyFailed":"検証に失敗しました。後でもう一度お試しください","invite.claimSuccess":"{reward} QDT を正常に受け取りました!","invite.claimFailed":"収集に失敗しました。 後でもう一度お試しください","invite.totalRecords":"合計 {total} レコード","invite.task.twitter.title":"X(Twitter)にリツイート","invite.task.twitter.desc":"公式ツイートを X (Twitter) アカウントに共有します","invite.task.youtube.title":"YouTube チャンネルをフォローしてください","invite.task.youtube.desc":"公式 YouTube チャンネルを購読してフォローしてください","invite.task.telegram.title":"テレグラムグループに参加する","invite.task.telegram.desc":"公式 Telegram コミュニティ グループに参加してください","invite.task.discord.title":"Discordサーバーに参加する","invite.task.discord.desc":"Discordコミュニティサーバーに参加してください",message:"-","layouts.usermenu.dialog.title":"情報","layouts.usermenu.dialog.content":"ログアウトしてもよろしいですか?","layouts.userLayout.title":"不確実性の中で真実を見つける","dashboard.indicator.boundary.message":"Note: The indicator script only computes plots + buy/sell signals. Position sizing, risk, scaling, fees/slippage belong to execution config.","dashboard.indicator.boundary.indicatorRule":"Keep the script to buy/sell only (and set df['buy']/df['sell']). Do NOT implement position management, TP/SL, scaling in the script.","dashboard.indicator.boundary.backtestRule":"Rule: If a bar has a main signal (buy/sell → open/close/reverse), scaling in/out is skipped on the same bar.","dashboard.indicator.guide.title":"Python Indicator & Strategy Development Guide","dashboard.indicator.guide.intro":"This platform supports writing custom technical indicators and trading signals using Python. The system includes built-in pandas and numpy data analysis libraries. You can use standard DataFrame operations to process K-line data and draw charts or mark buy/sell signals.","dashboard.indicator.guide.section1.title":"1. Runtime Environment & Predefined Variables","dashboard.indicator.guide.section1.env":"Your code runs in a browser-based Python environment (Pyodide).","dashboard.indicator.guide.section1.libs":"Pre-installed Libraries","dashboard.indicator.guide.section1.libsDesc":"The following libraries are imported by default, no need to import again:","dashboard.indicator.guide.section1.libsList":"pandas (pd), numpy (np), math, json","dashboard.indicator.guide.section1.data":"Input Data: df","dashboard.indicator.guide.section1.dataDesc":"The system automatically converts current K-line data into a Pandas DataFrame object, variable name is df.","dashboard.indicator.guide.section1.dataColumns":"df contains the following columns (all float type):","dashboard.indicator.guide.section1.dataColumnsList":"time (timestamp, seconds), open, high, low, close, volume","dashboard.indicator.guide.section1.dataNote":"Data index is arranged from old to new (0 is the earliest data, last row is the latest data).","dashboard.indicator.guide.section1.dataIndex":"Important: df index is timestamp (DatetimeIndex), please preserve the index, avoid using .values which loses the index.","dashboard.indicator.guide.section2.title":"2. Parameter Definition","dashboard.indicator.guide.section2.desc":"You can define variables as parameters at the beginning of your code. The system will try to parse statements like variable = value as adjustable parameters.","dashboard.indicator.guide.section2.example":"Parameter Example","dashboard.indicator.guide.section2.exampleCode":"span = 20 or multiplier = 2.0","dashboard.indicator.guide.section3.title":"3. Backtest Signal Setup (Important!)","dashboard.indicator.guide.section3.desc":"If you want your indicator to support backtesting, you must set the following two columns in your code:","dashboard.indicator.guide.section3.backtestRequired":"Required for Backtesting:","dashboard.indicator.guide.section3.backtestBuySignal":"df['buy_signal'] - Boolean Series, True indicates buy signal","dashboard.indicator.guide.section3.backtestSellSignal":"df['sell_signal'] - Boolean Series, True indicates sell signal","dashboard.indicator.guide.section3.backtestExample":"Example:","dashboard.indicator.guide.section3.backtestExampleCode":"df['buy_signal'] = condition_buy
df['sell_signal'] = condition_sell","dashboard.indicator.guide.section3.backtestNote":"Note: Even if you only set output.signals for chart display, you must set these two columns to enable backtesting.","dashboard.indicator.guide.section4.title":"4. Output Requirements: output","dashboard.indicator.guide.section4.desc":"At the end of code execution, you must define a dictionary named output to tell the chart how to display results.","dashboard.indicator.guide.section4.fields":"The output dictionary contains the following fields:","dashboard.indicator.guide.section4.plots":"plots - For drawing lines (e.g., moving averages, RSI)","dashboard.indicator.guide.section4.signals":"signals - For marking buy/sell signals (e.g., arrows, labels)","dashboard.indicator.guide.section4.name":"name - Indicator name (optional)","dashboard.indicator.guide.section4.calculatedVars":"calculatedVars - Calculated variables (optional, for displaying additional information)","dashboard.indicator.guide.section5.title":"5. Plot Configuration (Plots)","dashboard.indicator.guide.section5.desc":"Each object in the plots list represents a line.","dashboard.indicator.guide.section5.table.field":"Field","dashboard.indicator.guide.section5.table.type":"Type","dashboard.indicator.guide.section5.table.required":"Required","dashboard.indicator.guide.section5.table.requiredYes":"Yes","dashboard.indicator.guide.section5.table.requiredNo":"No","dashboard.indicator.guide.section5.table.desc":"Description","dashboard.indicator.guide.section5.table.name":"The name of the indicator line, displayed in the legend","dashboard.indicator.guide.section5.table.data":"Data list, length must match the number of rows in df. Recommended to use series.tolist()","dashboard.indicator.guide.section5.table.color":"Line color (Hex format, e.g. '#ff0000'). If not filled, the system will automatically assign","dashboard.indicator.guide.section5.table.typeDesc":"Chart type, default is 'line'","dashboard.indicator.guide.section5.table.overlay":"Important. True means display on main chart (with K-line), False means display on sub-chart (independent area)","dashboard.indicator.guide.section5.example":"Example: Draw Simple Moving Average (SMA)","dashboard.indicator.guide.section5.exampleCalc":"Calculate SMA","dashboard.indicator.guide.section5.exampleOutput":"Construct Output","dashboard.indicator.guide.section5.exampleOverlay":"Display on main chart","dashboard.indicator.guide.section6.title":"6. Signal Markers (Signals)","dashboard.indicator.guide.section6.desc":"signals are used to mark buy/sell points on specific K-lines through icons or text. Note: This is only for chart display. The backtest system uses df['buy_signal'] and df['sell_signal'].","dashboard.indicator.guide.section6.table.type":"Signal type: 'buy' (buy, marked below K-line) or 'sell' (sell, marked above K-line)","dashboard.indicator.guide.section6.table.data":"Signal data list. Fill price value at signal positions, fill None (or np.nan) at non-signal positions","dashboard.indicator.guide.section6.table.text":'Text displayed on the label (e.g. "B", "S", "Buy", "Sell")',"dashboard.indicator.guide.section6.table.color":"Marker color","dashboard.indicator.guide.section6.hint":"The system automatically handles positioning.","dashboard.indicator.guide.section6.buy":"Markers will be automatically positioned below the Low of the current K-line","dashboard.indicator.guide.section6.sell":"Markers will be automatically positioned above the High of the current K-line","dashboard.indicator.guide.section6.example":"Example: Draw Buy/Sell Signals","dashboard.indicator.guide.section6.exampleInit":"Initialize signal list, fill all with None","dashboard.indicator.guide.section6.exampleLogic":"Simple logic: mark buy when close price is greater than open price","dashboard.indicator.guide.section6.exampleNote":"In actual logic, please use loops or vectorized operations","dashboard.indicator.guide.section6.examplePrice":"Record price","dashboard.indicator.guide.section6.exampleText":"Buy","dashboard.indicator.guide.section7.title":"7. Complete Code Examples","dashboard.indicator.guide.section7.exampleA":"Example A: Dual EMA Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleACode":'# 1. Calculate indicators
df[\'ema_fast\'] = df[\'close\'].ewm(span=5, adjust=False).mean()
df[\'ema_slow\'] = df[\'close\'].ewm(span=13, adjust=False).mean()

# 2. Calculate crossover signals
cross_up = (df[\'ema_fast\'] > df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) <= df[\'ema_slow\'].shift(1))
cross_down = (df[\'ema_fast\'] < df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) >= df[\'ema_slow\'].shift(1))

# 3. 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = cross_up
df[\'close_long\'] = cross_down
df[\'open_short\'] = cross_down
df[\'close_short\'] = cross_up

# 4. Generate signal data for chart display
buy_signals = [df[\'low\'].iloc[i] * 0.995 if cross_up.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if cross_down.iloc[i] else None for i in range(len(df))]

# 5. Build output
output = {
"name": "Dual EMA Strategy",
"plots": [
{"name": "EMA 5", "data": df[\'ema_fast\'].tolist(), "color": "#FF6B6B", "overlay": True},
{"name": "EMA 13", "data": df[\'ema_slow\'].tolist(), "color": "#4ECDC4", "overlay": True}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section7.exampleB":"Example B: Bollinger Bands - Chart Display Only","dashboard.indicator.guide.section7.exampleBCode":'# Calculate Bollinger Bands (chart display only, no backtesting)
length = 20
mult = 2.0
df[\'sma\'] = df[\'close\'].rolling(length).mean()
df[\'std\'] = df[\'close\'].rolling(length).std()
df[\'upper\'] = df[\'sma\'] + mult * df[\'std\']
df[\'lower\'] = df[\'sma\'] - mult * df[\'std\']

output = {
"name": "Bollinger Bands",
"plots": [
{"name": "Upper", "data": df[\'upper\'].tolist(), "color": "#FF5252", "overlay": True},
{"name": "Middle", "data": df[\'sma\'].tolist(), "color": "#2196F3", "overlay": True},
{"name": "Lower", "data": df[\'lower\'].tolist(), "color": "#00E676", "overlay": True}
]
}',"dashboard.indicator.guide.section7.exampleC":"Example C: RSI Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleCCode":'# Calculate RSI
delta = df[\'close\'].diff()
up = delta.clip(lower=0)
down = -1 * delta.clip(upper=0)
ema_up = up.ewm(com=13, adjust=False).mean()
ema_down = down.ewm(com=13, adjust=False).mean()
rs = ema_up / ema_down
df[\'rsi\'] = 100 - (100 / (1 + rs))

# Generate trading signals
buy_condition = df[\'rsi\'] < 30 # Oversold buy
sell_condition = df[\'rsi\'] > 70 # Overbought sell

# 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = buy_condition
df[\'close_long\'] = sell_condition
df[\'open_short\'] = sell_condition
df[\'close_short\'] = buy_condition

# Generate chart signals
buy_signals = [df[\'low\'].iloc[i] * 0.995 if buy_condition.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if sell_condition.iloc[i] else None for i in range(len(df))]

output = {
"name": "RSI Strategy",
"plots": [
{"name": "RSI", "data": df[\'rsi\'].tolist(), "color": "#9C27B0", "overlay": False},
{"name": "Overbought", "data": [70] * len(df), "color": "#FF5252", "style": "dashed", "overlay": False},
{"name": "Oversold", "data": [30] * len(df), "color": "#00E676", "style": "dashed", "overlay": False}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section6.param":"Parameters","dashboard.indicator.guide.section6.calc":"Calculate","dashboard.indicator.guide.section6.output":"Output","dashboard.indicator.guide.section6.generate":"Generate signal data (initialize with None)","dashboard.indicator.guide.section6.subchart":"Display on sub-chart","dashboard.indicator.guide.section8.title":"8. Frequently Asked Questions (FAQ)","dashboard.indicator.guide.section8.q1":"Q: Why can't my indicator be backtested?","dashboard.indicator.guide.section8.a1":"A: The backtest system requires NEW signal columns: df['open_long'], df['close_long'], df['open_short'], df['close_short'] (boolean). Even if you set output.signals for chart display, you must set these columns to enable backtesting.","dashboard.indicator.guide.section8.q2":"Q: Data length mismatch?","dashboard.indicator.guide.section8.a2":"A: The data list in plots and signals must have exactly the same length as the K-line data. If you use df['xxx'].tolist(), there is usually no problem.","dashboard.indicator.guide.section8.q3":"Q: How to handle NaN (empty values)?","dashboard.indicator.guide.section8.a3":"A: Pandas calculations (such as rolling mean) will produce NaN at the beginning. The system will automatically convert NaN to null for chart rendering. You don't need to manually clean it, but if you need specific logic, you can use df.fillna(0) or other methods.","dashboard.indicator.guide.section8.q4":"Q: Index mismatch causing all signals to be NaN?","dashboard.indicator.guide.section8.a4":"A: Please ensure you preserve the original df index (timestamp). Avoid using .values to create new Series. Use columns directly like df['close'] for operations.","dashboard.indicator.guide.section8.q5":"Q: Can I use third-party network libraries?","dashboard.indicator.guide.section8.a5":"A: No. The runtime environment is a browser sandbox and cannot use libraries like requests to request external APIs, nor can it install additional pip packages. Limited to built-in libraries such as pandas, numpy, math, json.","dashboard.indicator.guide.section8.q6":"Q: How to debug code?","dashboard.indicator.guide.section8.a6":"A: If the chart does not display indicators, it is usually because the Python code has an error. Please check for syntax errors or array index out of bounds. It is recommended to debug the algorithm logic in a local Python environment first, then copy it in.","dashboard.indicator.guide.section8.q7":"Q: Backtest shows 0 signals?","dashboard.indicator.guide.section8.a7":"A: Please check the data type of df['open_long']/df['close_long']/df['open_short']/df['close_short']. They should be boolean (True/False), not numeric. Use condition.fillna(False).astype(bool) to ensure correct type.","dashboard.indicator.backtest.commissionHint":"Charged on notional value (incl. leverage) per trade; both entry & exit are deducted from balance.","dashboard.indicator.backtest.historyTitle":"Backtest History","dashboard.indicator.backtest.historyRefresh":"Refresh","dashboard.indicator.backtest.historyView":"View","dashboard.indicator.backtest.historyNoData":"No backtest history","dashboard.indicator.backtest.historyUseCurrent":"Only current symbol/timeframe","dashboard.indicator.backtest.historyFilterSymbol":"Symbol","dashboard.indicator.backtest.historyFilterTimeframe":"Timeframe","dashboard.indicator.backtest.historyApply":"Apply filters","dashboard.indicator.backtest.historyAIAnalyze":"AI Analyze","dashboard.indicator.backtest.historyAIAnalyzeTitle":"AI Suggestions","dashboard.indicator.backtest.historyNoAIResult":"No AI analysis result","dashboard.indicator.backtest.historyRunId":"Run ID","dashboard.indicator.backtest.historyCreatedAt":"Time","dashboard.indicator.backtest.historyRange":"Range","dashboard.indicator.backtest.historyStatus":"Status","dashboard.indicator.backtest.historyStatusSuccess":"Success","dashboard.indicator.backtest.historyStatusFailed":"Failed","dashboard.indicator.backtest.historyActions":"Actions","dashboard.indicator.backtest.hint.entryPctMax":"Max entry: {maxPct}% (reserve budget for future scale-ins)","trading-assistant.exchange.ipWhitelistTip":"Please add the following IPs to the whitelist in your exchange API settings:","signal-robot.title":"Signal Robot Console","signal-robot.createBot":"Create New Bot","signal-robot.search.nameOrSymbol":"Name/Symbol","signal-robot.search.placeholder":"Search bot name or symbol","signal-robot.search.status":"Status","signal-robot.search.statusAll":"All","signal-robot.search.statusRunning":"Running","signal-robot.search.statusPaused":"Paused","signal-robot.search.query":"Query","signal-robot.search.reset":"Reset","signal-robot.table.botName":"Bot Name","signal-robot.table.symbolTimeframe":"Symbol/Timeframe","signal-robot.table.triggerStrategy":"Trigger Strategy","signal-robot.table.notificationChannels":"Notification Channels","signal-robot.table.status":"Status","signal-robot.table.action":"Action","signal-robot.table.triggerConditions":"{count} trigger conditions","signal-robot.table.monitoring":"Monitoring","signal-robot.table.paused":"Paused","signal-robot.table.edit":"Edit","signal-robot.table.pause":"Pause","signal-robot.table.start":"Start","signal-robot.table.delete":"Delete","signal-robot.table.deleteConfirm":"Are you sure you want to delete this bot?","signal-robot.table.deleteSuccess":"Deleted successfully","signal-robot.table.startSuccess":"Bot started","signal-robot.table.pauseSuccess":"Bot paused","signal-robot.channel.telegram":"Telegram","signal-robot.channel.discord":"Discord","signal-robot.channel.email":"Email","signal-robot.channel.webhook":"Webhook","signal-robot.channel.browser":"Browser Push","signal-robot.modal.createTitle":"Create New Signal Robot","signal-robot.modal.editTitle":"Edit Signal Robot","signal-robot.modal.step.basic":"Basic Settings","signal-robot.modal.step.entry":"Entry Strategy","signal-robot.modal.step.position":"Position Management","signal-robot.modal.step.risk":"Risk Control","signal-robot.modal.step.notify":"Notification Config","signal-robot.modal.prev":"Previous","signal-robot.modal.next":"Next","signal-robot.modal.preview":"Preview Backtest","signal-robot.modal.complete":"Complete & Run","signal-robot.modal.saveSuccess":"Saved successfully","signal-robot.modal.previewDeveloping":"Preview feature is under development...","signal-robot.modal.basicInfoRequired":"Please complete basic information","signal-robot.basic.alert":"Set basic information for the bot","signal-robot.basic.title":"Basic Information","signal-robot.basic.botName":"Bot Name","signal-robot.basic.botNamePlaceholder":"e.g.: BTC SuperTrend Strategy","signal-robot.basic.symbol":"Trading Pair","signal-robot.basic.symbolPlaceholder":"Select from watchlist","signal-robot.basic.noWatchlist":"No watchlist items, please add in market page first","signal-robot.basic.timeframe":"K-Line Period","signal-robot.basic.timeframe15m":"15 Minutes","signal-robot.basic.timeframe30m":"30 Minutes","signal-robot.basic.timeframe1h":"1 Hour","signal-robot.basic.timeframe4h":"4 Hours","signal-robot.basic.timeframe1d":"1 Day","signal-robot.basic.autoNameSuggestion":"{symbol} Signal Robot","signal-robot.entry.alert":"Trigger entry signal when all conditions below are met","signal-robot.entry.condition":"Condition {index}","signal-robot.entry.indicator":"Indicator","signal-robot.entry.indicatorSupertrend":"SuperTrend","signal-robot.entry.indicatorEma":"EMA (Exponential Moving Average)","signal-robot.entry.indicatorRsi":"RSI (Relative Strength Index)","signal-robot.entry.indicatorMacd":"MACD","signal-robot.entry.indicatorBollinger":"Bollinger Bands","signal-robot.entry.atrPeriod":"ATR Period","signal-robot.entry.multiplier":"Multiplier","signal-robot.entry.triggerSignal":"Trigger Signal","signal-robot.entry.signalTrendBullish":"Trend Bullish","signal-robot.entry.signalTrendBearish":"Trend Bearish","signal-robot.entry.signalIsUptrend":"Is Uptrend","signal-robot.entry.signalIsDowntrend":"Is Downtrend","signal-robot.entry.period":"Period","signal-robot.entry.compareCondition":"Compare Condition","signal-robot.entry.priceAbove":"Price > EMA (Price Above)","signal-robot.entry.priceBelow":"Price < EMA (Price Below)","signal-robot.entry.crossUp":"Price Crosses Above EMA (Golden Cross)","signal-robot.entry.crossDown":"Price Crosses Below EMA (Death Cross)","signal-robot.entry.compare":"Compare","signal-robot.entry.greaterThan":"Greater Than","signal-robot.entry.lessThan":"Less Than","signal-robot.entry.crossUpShort":"Cross Up","signal-robot.entry.crossDownShort":"Cross Down","signal-robot.entry.threshold":"Threshold","signal-robot.entry.selectIndicator":"Please select an indicator to configure parameters","signal-robot.entry.addCondition":"Add Condition","signal-robot.position.alert":"Configure initial position size, leverage and pyramiding rules","signal-robot.position.basicTitle":"Basic Position Management","signal-robot.position.initialSize":"Initial Size (Capital %)","signal-robot.position.initialSizeHint":"Recommended 5% - 20%","signal-robot.position.leverage":"Leverage","signal-robot.position.leverageHint":"Please ensure your exchange account supports this leverage","signal-robot.position.maxPyramiding":"Max Pyramiding Times","signal-robot.position.maxPyramidingHint":"0 means no pyramiding","signal-robot.position.pyramidingTitle":"Pyramiding Rules","signal-robot.position.pyramidingEnabled":"Enabled","signal-robot.position.pyramidingDisabled":"Disabled","signal-robot.position.pyramidingCondition":"Pyramiding Trigger Condition","signal-robot.position.priceRisePct":"Price Rises (Long) / Falls (Short)","signal-robot.position.profitPct":"Profit Reaches","signal-robot.position.triggerThreshold":"Trigger Threshold (%)","signal-robot.position.triggerThresholdHint":"e.g. 3%: add position once every 3% rise","signal-robot.position.addSize":"Single Add Size (Capital %)","signal-robot.position.pyramidingDisabledHint":"Pyramiding disabled, only initial position will be executed","signal-robot.risk.alert":"Configure take profit, stop loss and exit rules","signal-robot.risk.stopLossTitle":"Stop Loss","signal-robot.risk.stopLossEnabled":"Enabled","signal-robot.risk.stopLossDisabled":"Disabled","signal-robot.risk.stopLossType":"Stop Loss Type","signal-robot.risk.stopLossFixedPct":"Fixed Percentage","signal-robot.risk.stopLossAtrMultiplier":"ATR Multiplier","signal-robot.risk.stopLossValue":"Value","signal-robot.risk.stopLossFixedHint":"e.g. 2%: stop loss when loss reaches 2%","signal-robot.risk.stopLossAtrHint":"e.g. 2.0: stop loss when price touches ATR*2.0","signal-robot.risk.stopLossDisabledHint":"Stop loss disabled (high risk)","signal-robot.risk.trailingStopTitle":"Trailing Stop","signal-robot.risk.activationProfit":"Activation Profit (%)","signal-robot.risk.activationProfitHint":"Start trailing when profit reaches this level","signal-robot.risk.callbackPct":"Callback (%)","signal-robot.risk.callbackPctHint":"Trigger take profit when price falls from peak by this percentage","signal-robot.risk.trailingStopDisabledHint":"Trailing stop disabled","signal-robot.risk.otherExitTitle":"Other Exit Rules","signal-robot.risk.signalExit":"Allow Signal Exit","signal-robot.risk.signalExitHint":"Close position immediately when reverse signal appears (e.g. close long when short signal appears)","signal-robot.notify.alert":"Configure notification methods when signal is triggered","signal-robot.notify.channelTitle":"Notification Channels","signal-robot.notify.discordWebhook":"Discord Webhook","signal-robot.notify.genericWebhook":"Generic Webhook","signal-robot.notify.webhookUrl":"Webhook URL","signal-robot.notify.webhookUrlPlaceholder":"https://example.com/webhook","signal-robot.notify.discordUrl":"Discord URL","signal-robot.notify.discordUrlPlaceholder":"https://discord.com/api/webhooks/...","signal-robot.operator.greaterThan":"Greater Than","signal-robot.operator.lessThan":"Less Than","signal-robot.operator.equal":"Equal","signal-robot.operator.goldenCross":"Golden Cross","signal-robot.operator.deathCross":"Death Cross","signal-robot.operator.increaseBy":"Increase By","signal-robot.operator.decreaseBy":"Decrease By","signal-robot.indicator.price":"Price","signal-robot.indicator.rsi":"RSI","signal-robot.indicator.kdjK":"KDJ(K)","signal-robot.indicator.kdjJ":"KDJ(J)","signal-robot.indicator.macd":"MACD","signal-robot.indicator.macdHist":"MACD Histogram","signal-robot.indicator.bollingerUp":"Bollinger Upper","signal-robot.indicator.bollingerLow":"Bollinger Lower","signal-robot.indicator.volume":"Volume","signal-robot.indicator.changePct1h":"1H Change %","signal-robot.indicator.changePct24h":"24H Change %","signal-robot.indicator.signalLine":"Signal Line","settings.group.agent_memory":"記憶/反省設定","settings.group.reflection_worker":"自動反省検証ワーカー","settings.field.ENABLE_AGENT_MEMORY":"エージェント記憶を有効化","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"ベクトル検索を有効化(ローカル)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"埋め込み次元","settings.field.AGENT_MEMORY_TOP_K":"Top-K 取得数","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"候補ウィンドウサイズ","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"時間減衰の半減期(日)","settings.field.AGENT_MEMORY_W_SIM":"類似度重み","settings.field.AGENT_MEMORY_W_RECENCY":"新しさ重み","settings.field.AGENT_MEMORY_W_RETURNS":"収益重み","settings.field.ENABLE_REFLECTION_WORKER":"自動検証を有効化","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"検証間隔(秒)","profile.notifications.title":"通知設定","profile.notifications.hint":"デフォルトの通知方法を設定します。資産モニターやアラート作成時に自動的に使用されます","profile.notifications.defaultChannels":"デフォルト通知チャンネル","profile.notifications.browser":"アプリ内通知","profile.notifications.email":"メール","profile.notifications.phone":"SMS","profile.notifications.telegramBotToken":"Telegram Bot Token","profile.notifications.telegramBotTokenPlaceholder":"Telegram Bot Tokenを入力してください","profile.notifications.telegramBotTokenHint":"@BotFatherでボットを作成してTokenを取得してください","profile.notifications.telegramChatId":"Telegram Chat ID","profile.notifications.telegramPlaceholder":"Telegram Chat IDを入力してください(例:123456789)","profile.notifications.telegramHint":"@userinfobot に /start を送信してChat IDを取得してください","profile.notifications.notifyEmail":"通知メール","profile.notifications.emailPlaceholder":"通知を受け取るメールアドレス","profile.notifications.emailHint":"デフォルトはアカウントメール、別のメールも設定可能","profile.notifications.phonePlaceholder":"電話番号を入力してください(例:+81901234567)","profile.notifications.phoneHint":"管理者がTwilioサービスを設定する必要があります","profile.notifications.discordWebhook":"Discord Webhook","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"Discordサーバー設定でWebhookを作成してください","profile.notifications.webhookUrl":"Webhook URL","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"カスタムWebhook URL、POST JSONで通知を送信","profile.notifications.webhookToken":"Webhook Token(任意)","profile.notifications.webhookTokenPlaceholder":"リクエスト認証用Bearer Token","profile.notifications.webhookTokenHint":"Authorization: Bearer TokenとしてWebhookに送信","profile.notifications.testBtn":"テスト通知を送信","profile.notifications.saveSuccess":"通知設定を保存しました","profile.notifications.selectChannel":"少なくとも1つの通知チャンネルを選択してください","profile.notifications.fillTelegramToken":"Telegram Bot Tokenを入力してください","profile.notifications.fillTelegram":"Telegram Chat IDを入力してください","profile.notifications.fillEmail":"通知メールを入力してください","profile.notifications.testSent":"テスト通知を送信しました。通知チャンネルを確認してください"},f=(0,e.A)((0,e.A)({},p),y)}}]); \ No newline at end of file diff --git a/frontend/dist/js/lang-ko-KR-legacy.b147f4fc.js b/frontend/dist/js/lang-ko-KR-legacy.b147f4fc.js new file mode 100644 index 0000000..fcc6c7c --- /dev/null +++ b/frontend/dist/js/lang-ko-KR-legacy.b147f4fc.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[840],{20729:function(a,t,i){i.d(t,{default:function(){return f}});var e=i(76338),s={items_per_page:"/ 쪽",jump_to:"이동하기",jump_to_confirm:"확인하다",page:"",prev_page:"이전 페이지",next_page:"다음 페이지",prev_5:"이전 5 페이지",next_5:"다음 5 페이지",prev_3:"이전 3 페이지",next_3:"다음 3 페이지"},o=i(85505),r={today:"오늘",now:"현재 시각",backToToday:"오늘로 돌아가기",ok:"확인",clear:"지우기",month:"월",year:"년",timeSelect:"시간 선택",dateSelect:"날짜 선택",monthSelect:"달 선택",yearSelect:"연 선택",decadeSelect:"연대 선택",yearFormat:"YYYY년",dateFormat:"YYYY-MM-DD",dayFormat:"Do",dateTimeFormat:"YYYY-MM-DD HH:mm:ss",monthBeforeYear:!1,previousMonth:"이전 달 (PageUp)",nextMonth:"다음 달 (PageDown)",previousYear:"이전 해 (Control + left)",nextYear:"다음 해 (Control + right)",previousDecade:"이전 연대",nextDecade:"다음 연대",previousCentury:"이전 세기",nextCentury:"다음 세기"},n={placeholder:"날짜 선택"},d=n,l={lang:(0,o.A)({placeholder:"날짜 선택",rangePlaceholder:["시작일","종료일"]},r),timePickerLocale:(0,o.A)({},d)},c=l,g=c,b={locale:"ko",Pagination:s,DatePicker:c,TimePicker:d,Calendar:g,Table:{filterTitle:"필터 메뉴",filterConfirm:"확인",filterReset:"초기화",selectAll:"모두 선택",selectInvert:"선택 반전"},Modal:{okText:"확인",cancelText:"취소",justOkText:"확인"},Popconfirm:{okText:"확인",cancelText:"취소"},Transfer:{searchPlaceholder:"여기에 검색하세요",itemUnit:"개",itemsUnit:"개"},Upload:{uploading:"업로드 중...",removeFile:"파일 삭제",uploadError:"업로드 실패",previewFile:"파일 미리보기",downloadFile:"파일 다운로드"},Empty:{description:"데이터 없음"}},m=b,h=i(63164),u=i.n(h),p={antLocale:m,momentName:"ko",momentLocale:u()},y={submit:"제출",save:"저장","submit.ok":"제출 성공","save.ok":"성공적으로 저장되었습니다","menu.welcome":"환영합니다","menu.home":"홈페이지","menu.dashboard":"대시보드","menu.dashboard.indicator":"지표분석","menu.dashboard.community":"지표 커뮤니티","menu.dashboard.analysis":"AI 분석","menu.dashboard.tradingAssistant":"트레이딩 어시스턴트","menu.dashboard.aiTradingAssistant":"AI 트레이딩 도우미","menu.dashboard.signalRobot":"시그널 로봇","menu.dashboard.monitor":"모니터링 페이지","menu.dashboard.workplace":"작업대","menu.form":"양식 페이지","menu.form.basic-form":"기본 형태","menu.form.step-form":"단계별 양식","menu.form.step-form.info":"단계별 양식(이체 정보 입력)","menu.form.step-form.confirm":"단계별 양식(이체정보 확인)","menu.form.step-form.result":"단계별 양식(완료)","menu.form.advanced-form":"고급 양식","menu.list":"목록 페이지","menu.list.table-list":"문의 양식","menu.list.basic-list":"표준 목록","menu.list.card-list":"카드 목록","menu.list.search-list":"검색 목록","menu.list.search-list.articles":"검색 목록(기사)","menu.list.search-list.projects":"검색 목록(프로젝트)","menu.list.search-list.applications":"검색 목록(앱)","menu.profile":"세부정보 페이지","menu.profile.basic":"기본 세부정보 페이지","menu.profile.advanced":"고급 세부정보 페이지","menu.result":"결과 페이지","menu.result.success":"성공 페이지","menu.result.fail":"실패 페이지","menu.exception":"예외 페이지","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"트리거 오류","menu.account":"개인 페이지","menu.account.center":"개인 센터","menu.account.settings":"개인 설정","menu.account.trigger":"트리거 오류","menu.account.logout":"로그아웃","menu.wallet":"내 지갑","menu.docs":"문서 센터","menu.docs.detail":"문서 세부정보","menu.header.refreshPage":"페이지 새로 고침","menu.invite.friends":"친구 초대","app.setting.pagestyle":"전반적인 스타일 설정","app.setting.pagestyle.light":"밝은 메뉴 스타일","app.setting.pagestyle.dark":"어두운 메뉴 스타일","app.setting.pagestyle.realdark":"다크 모드","app.setting.themecolor":"테마 색상","app.setting.navigationmode":"탐색 모드","app.setting.sidemenu.nav":"사이드바 탐색","app.setting.topmenu.nav":"상단 표시줄 탐색","app.setting.content-width":"콘텐츠 영역 너비","app.setting.content-width.tooltip":"이 설정은 [상단 표시줄 탐색]인 경우에만 유효합니다.","app.setting.content-width.fixed":"고정","app.setting.content-width.fluid":"스트리밍","app.setting.fixedheader":"고정 헤더","app.setting.fixedheader.tooltip":"헤더 고정 시 구성 가능","app.setting.autoHideHeader":"스크롤할 때 헤더 숨기기","app.setting.fixedsidebar":"사이드 메뉴 고정","app.setting.sidemenu":"사이드 메뉴 레이아웃","app.setting.topmenu":"상단 메뉴 레이아웃","app.setting.othersettings":"기타 설정","app.setting.weakmode":"색약 모드","app.setting.multitab":"멀티탭 모드","app.setting.copy":"설정 복사","app.setting.loading":"테마 로드 중","app.setting.copyinfo":"설정을 성공적으로 복사했습니다. src/config/defaultSettings.js","app.setting.copy.success":"복사 완료","app.setting.copy.fail":"복사 실패","app.setting.theme.switching":"테마 변경!","app.setting.production.hint":"구성 표시줄은 개발 환경에서 미리 보기에만 사용되며 프로덕션 환경에서는 표시되지 않습니다. 구성 파일을 수동으로 복사하고 수정하십시오.","app.setting.themecolor.daybreak":"새벽 파란색(기본값)","app.setting.themecolor.dust":"황혼","app.setting.themecolor.volcano":"화산","app.setting.themecolor.sunset":"일몰","app.setting.themecolor.cyan":"밍칭","app.setting.themecolor.green":"오로라 그린","app.setting.themecolor.geekblue":"긱 블루","app.setting.themecolor.purple":"장쯔(Jiang Zi)","app.setting.tooltip":"페이지 설정","user.login.userName":"사용자 이름","user.login.password":"비밀번호","user.login.username.placeholder":"계정: 관리자","user.login.password.placeholder":"비밀번호: admin 또는 ant.design","user.login.message-invalid-credentials":"로그인에 실패했습니다. 이메일과 인증 코드를 확인하세요.","user.login.message-invalid-verification-code":"인증코드 오류","user.login.tab-login-credentials":"계정 비밀번호 로그인","user.login.tab-login-email":"이메일 로그인","user.login.tab-login-mobile":"휴대폰번호 로그인","user.login.captcha.placeholder":"그래픽 인증 코드를 입력하세요.","user.login.mobile.placeholder":"휴대전화번호","user.login.mobile.verification-code.placeholder":"인증코드","user.login.email.placeholder":"이메일 주소를 입력해주세요","user.login.email.verification-code.placeholder":"인증번호를 입력해주세요","user.login.email.sending":"인증코드가 전송되는 중입니다...","user.login.email.send-success-title":"팁","user.login.email.send-success":"인증코드가 성공적으로 전송되었습니다. 이메일을 확인해 주세요.","user.login.sms.send-success":"인증번호가 성공적으로 전송되었습니다. 문자 메시지를 확인하세요.","user.login.remember-me":"자동 로그인","user.login.forgot-password":"비밀번호를 잊으셨나요?","user.login.sign-in-with":"기타 로그인 방법","user.login.signup":"계정 등록","user.login.login":"로그인","user.register.register":"등록","user.register.email.placeholder":"이메일","user.register.password.placeholder":"6자 이상 입력해주세요. 쉽게 추측할 수 있는 비밀번호는 사용하지 마세요.","user.register.password.popover-message":"6자 이상 입력해주세요. 쉽게 추측할 수 있는 비밀번호는 사용하지 마세요.","user.register.confirm-password.placeholder":"비밀번호 확인","user.register.get-verification-code":"인증 코드 받기","user.register.sign-in":"기존 계정을 사용하여 로그인","user.register-result.msg":"귀하의 계정: {email} 등록이 완료되었습니다.","user.register-result.activation-email":"활성화 이메일이 귀하의 사서함으로 전송되었으며 24시간 동안 유효합니다. 귀하의 이메일에 즉시 로그인하고 이메일에 있는 링크를 클릭하여 계정을 활성화하십시오.","user.register-result.back-home":"홈페이지로 돌아가기","user.register-result.view-mailbox":"우편함을 확인하세요","user.email.required":"이메일 주소를 입력해주세요!","user.email.wrong-format":"이메일 주소 형식이 잘못되었습니다!","user.userName.required":"계정 이름이나 이메일 주소를 입력하세요","user.password.required":"비밀번호를 입력해주세요!","user.password.twice.msg":"두 번 입력한 비밀번호가 일치하지 않습니다!","user.password.strength.msg":"비밀번호가 충분히 강력하지 않습니다.","user.password.strength.strong":"힘: 강한","user.password.strength.medium":"강도: 중간","user.password.strength.low":"강도: 낮음","user.password.strength.short":"강도: 너무 짧음","user.confirm-password.required":"비밀번호를 확인해 주세요!","user.phone-number.required":"정확한 휴대폰번호를 입력해주세요","user.phone-number.wrong-format":"휴대폰 번호 형식이 잘못되었습니다!","user.verification-code.required":"인증번호를 입력해주세요!","user.captcha.required":"그래픽 인증코드를 입력해주세요!","user.login.infos":"QuantDinger는 AI 멀티에이전트 주식 분석 보조 도구로 증권 투자 컨설팅 자격이 없습니다. 플랫폼 내 모든 분석 결과, 점수, 참고 의견은 과거 데이터를 기반으로 AI에 의해 자동으로 생성되며 학습, 연구 및 기술 교류에만 사용되며 투자 조언이나 의사 결정 기반을 구성하지 않습니다. 주식투자에는 시장리스크, 유동성리스크, 정책리스크 등 다양한 리스크가 수반되며, 이로 인해 원금 손실이 발생할 수 있습니다. 사용자는 자신의 위험 허용 범위에 따라 독립적인 결정을 내려야 하며, 이 도구의 사용으로 인해 발생하는 모든 투자 행위 및 결과는 사용자가 부담해야 합니다. 시장은 위험하므로 투자에 신중해야 합니다.","user.login.tab-login-web3":"Web3 로그인","user.login.web3.tip":"지갑을 이용한 서명 로그인","user.login.web3.connect":"지갑을 연결하고 로그인하세요","user.login.web3.no-wallet":"지갑이 감지되지 않음","user.login.web3.no-address":"지갑 주소를 가져오지 못했습니다.","user.login.web3.nonce-failed":"난수를 가져오지 못했습니다.","user.login.web3.verify-failed":"서명 확인 실패","user.login.web3.success":"로그인 성공","user.login.web3.failed":"지갑 로그인 실패","nav.no_wallet":"지갑이 감지되지 않음","nav.copy":"복사","nav.copy_success":"성공적으로 복사되었습니다","user.login.oauth.google":"Google로 로그인","user.login.oauth.github":"GitHub로 로그인","user.login.oauth.loading":"승인 페이지로 리디렉션 중...","user.login.oauth.failed":"OAuth 로그인 실패","user.login.oauth.get-url-failed":"승인 링크를 얻지 못했습니다.","user.login.subtitle":"글로벌 시장에 대한 정량적 통찰력 확보","user.login.legal.title":"법적 고지 사항","user.login.legal.view":"법적 고지사항 보기","user.login.legal.collapse":"법적 면책조항 접기","user.login.legal.agree":"법적 고지 사항을 읽었으며 이에 동의합니다.","user.login.legal.required":"먼저 법적 고지 사항을 읽고 확인하십시오.","user.login.legal.content":"QuantDinger는 AI 멀티에이전트 주식 분석 보조 도구로 증권 투자 컨설팅 자격이 없습니다. 플랫폼 내 모든 분석 결과, 등급, 참고 의견은 과거 데이터를 기반으로 AI에 의해 자동으로 생성되며 학습, 연구 및 기술 교류에만 사용되며 투자 조언이나 의사 결정 기반을 구성하지 않습니다. 주식투자에는 시장리스크, 유동성리스크, 정책리스크 등 다양한 리스크가 수반되며, 이로 인해 원금 손실이 발생할 수 있습니다. 사용자는 자신의 위험 허용 범위에 따라 독립적인 결정을 내려야 하며, 이 도구의 사용으로 인해 발생하는 모든 투자 행위 및 결과는 사용자가 부담해야 합니다. 시장은 위험하므로 투자에 신중해야 합니다.","user.login.privacy.title":"사용자 개인 정보 보호 정책","user.login.privacy.view":"사용자 개인 정보 보호 정책 보기","user.login.privacy.collapse":"사용자 개인정보 보호 약관 닫기","user.login.privacy.content":"우리는 귀하의 개인 정보 보호와 데이터 보호를 중요하게 생각합니다. 1) 수집 범위 : 기능 구현에 꼭 필요한 정보(이메일, 휴대전화번호, 지역번호, Web3 지갑 주소 등)와 필수 로그, 기기정보만 수집합니다. 2) 이용 목적: 계정 로그인 및 보안 확인, 서비스 기능 제공, 문제 해결 및 규정 준수 요구 사항. 3) 저장 및 보안: 데이터는 암호화되어 저장되며, 무단 접근, 공개 또는 손실을 방지하기 위해 필요한 권한 및 접근 제어 조치가 취해집니다. 4) 제3자와의 공유: 법률 및 규정에 의해 요구되거나 서비스 수행에 필요한 경우를 제외하고, 귀하의 개인정보는 제3자와 공유되지 않습니다. 제3자 서비스(예: 지갑, SMS 서비스 제공업체)가 관련된 경우 해당 기능을 구현하는 데 필요한 최소한의 범위에서만 처리됩니다. 5) 쿠키/로컬 저장소: 로그인 상태 및 필요한 세션 유지 관리(예: 토큰, PHPSESSID)에 사용되며 브라우저에서 이를 삭제하거나 제한할 수 있습니다. 6) 개인권리 : 귀하는 법령에 따른 조회, 정정, 삭제, 동의철회 등의 권리를 행사할 수 있습니다. 7) 변경 및 공지: 본 약관이 업데이트되면 페이지에 눈에 띄게 표시됩니다. 본 서비스를 계속 이용하시면 업데이트된 내용을 읽고 동의하신 것으로 간주됩니다. 본 약관 또는 그에 대한 업데이트에 동의하지 않는 경우 서비스 사용을 중단하고 당사에 문의하십시오.","account.basicInfo":"기본정보","account.id":"사용자 ID","account.username":"사용자 이름","account.nickname":"닉네임","account.email":"이메일","account.mobile":"휴대전화번호","account.web3address":"지갑 주소","account.pid":"추천인 ID","account.level":"사용자 수준","account.money":"균형","account.qdtBalance":"QDT 잔액","account.score":"포인트","account.createtime":"등록 시간","account.inviteLink":"초대링크","account.recharge":"재충전","account.rechargeTip":"충전하려면 WeChat 또는 Alipay를 사용하여 아래 QR 코드를 스캔하세요.","account.qrCodePlaceholder":"QR 코드 자리 표시자(에뮬레이션)","account.rechargeAmount":"충전금액","account.enterAmount":"충전금액을 입력해주세요","account.rechargeHint":"최소 입금액: 1 QDT","account.confirmRecharge":"충전 확인","account.enterValidAmount":"유효한 충전 금액을 입력하세요.","account.rechargeSuccess":"재충전 성공! {amount} QDT 입금","account.settings.menuMap.basic":"기본 설정","account.settings.menuMap.security":"보안 설정","account.settings.menuMap.notification":"새 메시지 알림","account.settings.menuMap.moneyLog":"기금 세부정보","account.moneyLog.empty":"아직 펀드 세부정보가 없습니다.","account.moneyLog.total":"총 {total}개 기록","account.moneyLog.type.purchase":"매수 지표","account.moneyLog.type.recharge":"재충전","account.moneyLog.type.refund":"환불","account.moneyLog.type.reward":"보상","account.moneyLog.type.income":"지표소득","account.moneyLog.type.commission":"플랫폼 취급 수수료","wallet.balance":"QDT 잔액","wallet.recharge":"재충전","wallet.withdraw":"현금 인출","wallet.filter":"필터","wallet.reset":"재설정","wallet.totalRecharge":"누적 충전","wallet.totalWithdraw":"누적 출금","wallet.totalIncome":"누적 수입","wallet.records":"거래기록 및 자금내역","wallet.tradingRecords":"거래 내역","wallet.moneyLog":"기금 세부정보","wallet.rechargeTip":"충전하려면 WeChat 또는 Alipay를 사용하여 아래 QR 코드를 스캔하세요.","wallet.qrCodePlaceholder":"QR 코드 자리 표시자(에뮬레이션)","wallet.rechargeAmount":"충전금액","wallet.enterAmount":"충전금액을 입력해주세요","wallet.rechargeHint":"최소 입금액: 1 QDT","wallet.confirmRecharge":"충전 확인","wallet.enterValidAmount":"유효한 충전 금액을 입력하세요.","wallet.rechargeSuccess":"재충전 성공! {amount} QDT 입금","wallet.rechargeFailed":"재충전 실패","wallet.withdrawTip":"출금금액과 출금주소를 입력해주세요","wallet.withdrawAmount":"출금금액","wallet.enterWithdrawAmount":"출금금액을 입력해주세요","wallet.withdrawHint":"최소 출금 금액: 1 QDT","wallet.withdrawAddress":"출금주소(선택)","wallet.enterWithdrawAddress":"출금주소를 입력해주세요","wallet.confirmWithdraw":"출금 확인","wallet.enterValidWithdrawAmount":"유효한 인출 금액을 입력하세요.","wallet.insufficientBalance":"잔액 부족","wallet.withdrawSuccess":"출금 성공! 인출된 {금액} QDT","wallet.withdrawFailed":"출금 실패","wallet.noTradingRecords":"아직 거래기록이 없습니다","wallet.noMoneyLog":"아직 펀드 세부정보가 없습니다.","wallet.loadTradingRecordsFailed":"거래 기록을 로드하지 못했습니다.","wallet.loadMoneyLogFailed":"자금 세부정보를 로드하지 못했습니다.","wallet.moneyLogTotal":"총 {total}개 기록","wallet.moneyLogTypeTitle":"유형","wallet.moneyLogType.all":"모든 유형","wallet.table.time":"시간","wallet.table.type":"유형","wallet.table.price":"가격","wallet.table.amount":"수량","wallet.table.money":"금액","wallet.table.balance":"균형","wallet.table.memo":"비고","wallet.table.value":"가치","wallet.table.profit":"이익과 손실","wallet.table.commission":"취급 수수료","wallet.table.total":"총 {total}개 기록","wallet.tradeType.buy":"사다","wallet.tradeType.sell":"팔다","wallet.tradeType.liquidation":"강제청산","wallet.tradeType.openLong":"길게 열다","wallet.tradeType.addLong":"가돗","wallet.tradeType.closeLong":"핀듀오","wallet.tradeType.closeLongStop":"손실을 멈추고 오랫동안","wallet.tradeType.closeLongProfit":"이익을 얻고 더 많은 레벨을 올리세요","wallet.tradeType.openShort":"오픈 쇼트","wallet.tradeType.addShort":"짧게 추가하다","wallet.tradeType.closeShort":"비어 있음","wallet.tradeType.closeShortStop":"손실 중지","wallet.tradeType.closeShortProfit":"이익을 얻고 공매도 마감","wallet.moneyLogType.purchase":"매수 지표","wallet.moneyLogType.recharge":"재충전","wallet.moneyLogType.withdraw":"현금 인출","wallet.moneyLogType.refund":"환불","wallet.moneyLogType.reward":"보상","wallet.moneyLogType.income":"소득","wallet.moneyLogType.commission":"취급 수수료","wallet.web3Address.required":"먼저 Web3 지갑 주소를 입력해주세요","wallet.web3Address.requiredDescription":"충전하기 전에 Web3 지갑 주소를 바인딩해야 충전을 받을 수 있습니다.","wallet.web3Address.placeholder":"Web3 지갑 주소(0x로 시작)를 입력하세요.","wallet.web3Address.save":"지갑 주소 저장","wallet.web3Address.saveSuccess":"지갑 주소가 성공적으로 저장되었습니다","wallet.web3Address.saveFailed":"지갑 주소 저장 실패","wallet.web3Address.invalidFormat":"유효한 Web3 지갑 주소를 입력하세요. (이더리움 형식: 0x로 시작하는 42자 또는 TRC20 형식: T로 시작하는 34자)","wallet.selectCoin":"통화 선택","wallet.selectChain":"선택 체인","wallet.chain.eth":"ETH(ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"BSC","wallet.targetQdtAmount":"상환하려는 QDT 금액(선택 사항)","wallet.targetQdtAmount.placeholder":"상환하려는 QDT 수량, 현재 QDT 가격을 입력하세요: {price} USDT","wallet.targetQdtAmount.requiredUsdt":"재충전 필요: {amount} USDT","wallet.rechargeAddress":"충전 주소","wallet.copyAddress":"복사","wallet.copySuccess":"성공적으로 복사되었습니다!","wallet.copyFailed":"복사하지 못했습니다. 수동으로 복사하세요.","wallet.rechargeAddressHint":"이 주소에 {coin}을 입금하려면 반드시 {chain}을 사용하세요.","wallet.qdtPrice.loading":"로드 중...","wallet.rechargeTip.new":"통화와 체인을 선택한 후 아래 QR 코드를 스캔하여 충전하세요.","wallet.exchangeRate":"1 QDT ≒ {rate} USDT","wallet.withdrawableAmount":"사용 가능한 현금 금액","wallet.totalBalance":"총 잔액","wallet.insufficientWithdrawable":"출금 가능한 현금 금액이 부족합니다. 현재 인출할 수 있는 금액은 다음과 같습니다: {amount} QDT","wallet.withdrawAddressRequired":"출금주소를 입력해주세요","wallet.withdrawAddressHint":"주소가 올바른지 확인하십시오. 탈퇴 후에는 취소가 불가능합니다.","wallet.withdrawSubmitSuccess":"철회 신청서가 성공적으로 제출되었습니다. 검토를 기다려 주세요.","menu.footer.contactUs":"문의하기","menu.footer.getSupport":"지원 받기","menu.footer.socialAccounts":"소셜 계정","menu.footer.userAgreement":"사용자 계약","menu.footer.privacyPolicy":"개인 정보 보호 정책","menu.footer.support":"지원","menu.footer.featureRequest":"기능 요청","menu.footer.email":"이메일","menu.footer.liveChat":"연중무휴 라이브 채팅","dashboard.analysis.title":"다차원 분석","dashboard.analysis.subtitle":"AI 기반 종합재무분석 플랫폼","dashboard.analysis.selectSymbol":"기본 코드 선택 또는 입력","dashboard.analysis.selectModel":"모델 선택","dashboard.analysis.startAnalysis":"분석 시작","dashboard.analysis.history":"역사","dashboard.analysis.tab.overview":"종합적인 분석","dashboard.analysis.tab.fundamental":"기초","dashboard.analysis.tab.technical":"기술","dashboard.analysis.tab.news":"뉴스","dashboard.analysis.tab.sentiment":"감정","dashboard.analysis.tab.risk":"위험","dashboard.analysis.tab.debate":"길고 짧은 논쟁","dashboard.analysis.tab.decision":"최종 결정","dashboard.analysis.empty.selectSymbol":"분석을 시작하려면 대상을 선택하세요.","dashboard.analysis.empty.selectSymbolDesc":"자체 선택한 주식 목록에서 선택하거나 기본 코드를 입력하여 다차원 AI 분석 보고서를 얻습니다.","dashboard.analysis.empty.startAnalysis":'다차원 분석을 수행하려면 "분석 시작" 버튼을 클릭하세요.',"dashboard.analysis.empty.startAnalysisDesc":"펀더멘털, 기술, 뉴스, 정서, 리스크 등 다차원에서 종합적인 분석을 제공해드립니다.","dashboard.analysis.empty.noData":"현재 {type} 분석 데이터가 없습니다. 먼저 종합적인 분석을 수행해 주세요.","dashboard.analysis.empty.noWatchlist":"현재 자체선택한 종목이 없습니다.","dashboard.analysis.empty.noHistory":"아직 기록이 없습니다.","dashboard.analysis.empty.watchlistHint":"현재 자체 선택한 주식이 없습니다. 먼저 문의해 주세요.","dashboard.analysis.empty.noDebateData":"아직 토론 데이터가 없습니다.","dashboard.analysis.empty.noDecisionData":"아직 결정 데이터가 없습니다.","dashboard.analysis.empty.selectAgent":"분석 결과를 보려면 에이전트를 선택하세요.","dashboard.analysis.loading.analyzing":"분석 중입니다. 잠시 기다려 주세요...","dashboard.analysis.loading.fundamental":"기본 데이터 분석 중...","dashboard.analysis.loading.technical":"기술 지표 분석 중...","dashboard.analysis.loading.news":"뉴스 데이터 분석 중...","dashboard.analysis.loading.sentiment":"시장 심리 분석 중…","dashboard.analysis.loading.risk":"위험 평가 중...","dashboard.analysis.loading.debate":"롱숏 논쟁이 진행중인데..","dashboard.analysis.loading.decision":"최종 결정을 내리는 중...","dashboard.analysis.score.overall":"종합평가","dashboard.analysis.score.recommendation":"투자 조언","dashboard.analysis.score.confidence":"자신감","dashboard.analysis.dimension.fundamental":"기초","dashboard.analysis.dimension.technical":"기술","dashboard.analysis.dimension.news":"뉴스","dashboard.analysis.dimension.sentiment":"감정","dashboard.analysis.dimension.risk":"위험","dashboard.analysis.card.dimensionScores":"각 차원에 대한 평가","dashboard.analysis.card.overviewReport":"종합분석보고서","dashboard.analysis.card.financialMetrics":"재무 지표","dashboard.analysis.card.fundamentalReport":"기초분석 보고서","dashboard.analysis.card.technicalIndicators":"기술 지표","dashboard.analysis.card.technicalReport":"기술적 분석 보고서","dashboard.analysis.card.newsList":"관련 뉴스","dashboard.analysis.card.newsReport":"뉴스 분석 보고서","dashboard.analysis.card.sentimentIndicators":"감정 지표","dashboard.analysis.card.sentimentReport":"감정 분석 보고서","dashboard.analysis.card.riskMetrics":"위험 지표","dashboard.analysis.card.riskReport":"위험 평가 보고서","dashboard.analysis.card.bullView":"강세 전망(강세)","dashboard.analysis.card.bearView":"약세 전망 (곰)","dashboard.analysis.card.researchConclusion":"연구원의 결론","dashboard.analysis.card.traderPlan":"상인 계획","dashboard.analysis.card.riskDebate":"위험위원회 토론","dashboard.analysis.card.finalDecision":"최종 결정","dashboard.analysis.card.tradePlanDetail":"거래 계획 세부정보","dashboard.analysis.tradingPlan.entry_price":"입장료","dashboard.analysis.tradingPlan.position_size":"위치 크기","dashboard.analysis.tradingPlan.stop_loss":"손실을 막다","dashboard.analysis.tradingPlan.take_profit":"이익을 얻으세요","dashboard.analysis.label.confidence":"자신감","dashboard.analysis.label.keyPoints":"핵심 포인트","dashboard.analysis.label.riskWarning":"위험 경고","dashboard.analysis.risk.risky":"위험하다","dashboard.analysis.risk.neutral":"중립적 관점 (Neutral)","dashboard.analysis.risk.safe":"보수적 관점(안전)","dashboard.analysis.risk.conclusion":"결론","dashboard.analysis.feature.fundamental":"기본적 분석","dashboard.analysis.feature.technical":"기술적 분석","dashboard.analysis.feature.news":"뉴스 분석","dashboard.analysis.feature.sentiment":"감정 분석","dashboard.analysis.feature.risk":"위험 평가","dashboard.analysis.watchlist.title":"나의 주식 선택","dashboard.analysis.watchlist.add":"추가하다","dashboard.analysis.watchlist.addStock":"재고 추가","dashboard.analysis.modal.addStock.title":"옵션 재고 추가","dashboard.analysis.modal.addStock.confirm":"알았어","dashboard.analysis.modal.addStock.cancel":"취소","dashboard.analysis.modal.addStock.market":"시장 유형","dashboard.analysis.modal.addStock.marketPlaceholder":"시장을 선택해주세요","dashboard.analysis.modal.addStock.marketRequired":"시장 유형을 선택하세요.","dashboard.analysis.modal.addStock.symbol":"주식 코드","dashboard.analysis.modal.addStock.symbolPlaceholder":"예: AAPL, TSLA, GOOGL, 000001, BTC","dashboard.analysis.modal.addStock.symbolRequired":"주식코드를 입력해주세요","dashboard.analysis.modal.addStock.searchPlaceholder":"대상 코드 또는 이름 검색","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"기본 코드를 검색하거나 입력하세요(예: AAPL, BTC/USDT, EUR/USD)","dashboard.analysis.modal.addStock.searchOrInputHint":"데이터베이스에서 객체 검색 또는 코드 직접 입력 지원(시스템이 자동으로 이름을 얻음)","dashboard.analysis.modal.addStock.search":"검색","dashboard.analysis.modal.addStock.searchResults":"검색결과","dashboard.analysis.modal.addStock.hotSymbols":"인기 있는 타겟","dashboard.analysis.modal.addStock.noHotSymbols":"아직 인기 있는 타겟이 없습니다.","dashboard.analysis.modal.addStock.selectedSymbol":"선택됨","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"먼저 대상을 선택하세요.","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"대상을 선택하거나 대상 코드를 먼저 입력하세요","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"타겟코드를 입력해주세요","dashboard.analysis.modal.addStock.pleaseSelectMarket":"먼저 시장 유형을 선택하세요.","dashboard.analysis.modal.addStock.searchFailed":"검색에 실패했습니다. 나중에 다시 시도해 주세요.","dashboard.analysis.modal.addStock.noSearchResults":"일치하는 대상이 없습니다.","dashboard.analysis.modal.addStock.willAutoFetchName":"시스템에서 자동으로 이름을 가져옵니다.","dashboard.analysis.modal.addStock.addDirectly":"직접 추가","dashboard.analysis.modal.addStock.nameWillBeFetched":"추가되면 이름이 자동으로 선택됩니다.","dashboard.analysis.market.USStock":"미국 주식","dashboard.analysis.market.Crypto":"암호화폐","dashboard.analysis.market.Forex":"외환","dashboard.analysis.market.Futures":"선물","dashboard.analysis.modal.history.title":"역사적 분석 기록","dashboard.analysis.modal.history.viewResult":"결과 보기","dashboard.analysis.modal.history.completeTime":"완료 시간","dashboard.analysis.modal.history.error":"오류","dashboard.analysis.status.pending":"보류 중","dashboard.analysis.status.processing":"처리","dashboard.analysis.status.completed":"완료됨","dashboard.analysis.status.failed":"실패했다","dashboard.analysis.message.selectSymbol":"대상을 먼저 선택해주세요","dashboard.analysis.message.taskCreated":"분석 작업이 생성되어 백그라운드에서 실행 중입니다...","dashboard.analysis.message.analysisComplete":"분석 완료","dashboard.analysis.message.analysisCompleteCache":"분석 완료(캐시된 데이터 활용)","dashboard.analysis.message.analysisFailed":"분석에 실패했습니다. 나중에 다시 시도해 주세요.","dashboard.analysis.message.addStockSuccess":"성공적으로 추가되었습니다","dashboard.analysis.message.addStockFailed":"추가 실패","dashboard.analysis.message.removeStockSuccess":"성공적으로 제거되었습니다","dashboard.analysis.message.removeStockFailed":"제거 실패","dashboard.analysis.message.resumingAnalysis":"분석 작업을 재개하는 중...","dashboard.analysis.message.deleteSuccess":"성공적으로 삭제되었습니다","dashboard.analysis.message.deleteFailed":"삭제 실패","dashboard.analysis.modal.history.delete":"삭제","dashboard.analysis.modal.history.deleteConfirm":"이 분석 기록을 삭제하시겠습니까?","dashboard.analysis.test":"상점 번호 {no}, Gongzhuan Road","dashboard.analysis.introduce":"표시기 설명","dashboard.analysis.total-sales":"총매출","dashboard.analysis.day-sales":"일평균 매출엔엔","dashboard.analysis.visits":"방문","dashboard.analysis.visits-trend":"트래픽 동향","dashboard.analysis.visits-ranking":"매장 방문 순위","dashboard.analysis.day-visits":"일일 방문","dashboard.analysis.week":"매주 전년 대비","dashboard.analysis.day":"전년 대비","dashboard.analysis.payments":"결제 횟수","dashboard.analysis.conversion-rate":"전환율","dashboard.analysis.operational-effect":"운영활동 효과","dashboard.analysis.sales-trend":"판매 동향","dashboard.analysis.sales-ranking":"매장판매순위","dashboard.analysis.all-year":"일년 내내","dashboard.analysis.all-month":"이번 달","dashboard.analysis.all-week":"이번 주","dashboard.analysis.all-day":"오늘","dashboard.analysis.search-users":"검색 사용자 수","dashboard.analysis.per-capita-search":"1인당 검색량","dashboard.analysis.online-top-search":"온라인 인기 검색어","dashboard.analysis.the-proportion-of-sales":"판매 카테고리 비율","dashboard.analysis.dropdown-option-one":"첫 번째 작전","dashboard.analysis.dropdown-option-two":"작전 2","dashboard.analysis.channel.all":"모든 채널","dashboard.analysis.channel.online":"온라인","dashboard.analysis.channel.stores":"저장","dashboard.analysis.sales":"판매","dashboard.analysis.traffic":"승객 흐름","dashboard.analysis.table.rank":"순위","dashboard.analysis.table.search-keyword":"키워드 검색","dashboard.analysis.table.users":"사용자 수","dashboard.analysis.table.weekly-range":"주간 증가","dashboard.indicator.selectSymbol":"기본 코드 선택 또는 입력","dashboard.indicator.emptyWatchlistHint":"현재 자체 선택한 주식이 없습니다. 먼저 추가해 주세요.","dashboard.indicator.hint.selectSymbol":"분석을 시작하려면 대상을 선택하세요.","dashboard.indicator.hint.selectSymbolDesc":"K-라인 차트 및 기술 지표를 보려면 위 검색창에서 주식 코드를 선택하거나 입력하세요.","dashboard.indicator.retry":"다시 시도하세요","dashboard.indicator.panel.title":"기술 지표","dashboard.indicator.panel.realtimeOn":"실시간 업데이트 끄기","dashboard.indicator.panel.realtimeOff":"실시간 업데이트 활성화","dashboard.indicator.panel.themeLight":"어두운 테마로 전환","dashboard.indicator.panel.themeDark":"밝은 테마로 전환","dashboard.indicator.section.enabled":"활성화됨","dashboard.indicator.section.added":"내가 추가한 지표","dashboard.indicator.section.custom":"직접 만든 지표","dashboard.indicator.section.bought":"내가 구매한 지표","dashboard.indicator.section.myCreated":"내가 만든 지표","dashboard.indicator.empty":"아직 표시기가 없습니다. 먼저 표시기를 추가하거나 생성하세요.","dashboard.indicator.buy":"매수 지표","dashboard.indicator.action.start":"시작","dashboard.indicator.action.stop":"닫기","dashboard.indicator.action.edit":"편집","dashboard.indicator.action.delete":"삭제","dashboard.indicator.action.backtest":"백테스트","dashboard.indicator.status.normal":"정상","dashboard.indicator.status.normalPermanent":"일반(영구적으로 유효)","dashboard.indicator.status.expired":"만료됨","dashboard.indicator.expiry.permanent":"영구적으로 유효함","dashboard.indicator.expiry.noExpiry":"만료 시간 없음","dashboard.indicator.expiry.expired":"만료됨: {date}","dashboard.indicator.expiry.expiresOn":"만료 시간: {date}","dashboard.indicator.delete.confirmTitle":"삭제 확인","dashboard.indicator.delete.confirmContent":'"{name}" 표시기를 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.',"dashboard.indicator.delete.confirmOk":"삭제","dashboard.indicator.delete.confirmCancel":"취소","dashboard.indicator.delete.success":"성공적으로 삭제되었습니다","dashboard.indicator.delete.failed":"삭제 실패","dashboard.indicator.save.success":"성공적으로 저장되었습니다","dashboard.indicator.save.failed":"저장 실패","dashboard.indicator.error.loadWatchlistFailed":"옵션 재고를 로드하지 못했습니다.","dashboard.indicator.error.chartNotReady":"차트 구성 요소가 초기화되지 않았습니다. 먼저 대상을 선택하고 차트가 로드될 때까지 기다려 주세요.","dashboard.indicator.error.chartMethodNotReady":"차트 구성 요소 메서드가 준비되지 않았습니다. 나중에 다시 시도해 주세요.","dashboard.indicator.error.chartExecuteNotReady":"차트 구성요소 실행 방법이 준비되지 않았습니다. 나중에 다시 시도해 주세요.","dashboard.indicator.error.parseFailed":"Python 코드를 구문 분석할 수 없습니다.","dashboard.indicator.error.parseFailedCheck":"Python 코드를 구문 분석할 수 없습니다. 코드 형식을 확인하세요.","dashboard.indicator.error.addIndicatorFailed":"표시기를 추가하지 못했습니다.","dashboard.indicator.error.runIndicatorFailed":"실행 표시기 실패","dashboard.indicator.error.pleaseLogin":"먼저 로그인해주세요","dashboard.indicator.error.loadDataFailed":"데이터 로딩 실패","dashboard.indicator.error.loadDataFailedDesc":"네트워크 연결을 확인해주세요","dashboard.indicator.error.pythonEngineFailed":"Python 엔진을 로드하지 못했고 표시기 기능을 사용하지 못할 수 있습니다.","dashboard.indicator.error.chartInitFailed":"차트 초기화 실패","dashboard.indicator.warning.enterCode":"표시기 코드를 먼저 입력하세요.","dashboard.indicator.warning.pyodideLoadFailed":"Python 엔진을 로드하지 못했습니다.","dashboard.indicator.warning.pyodideLoadFailedDesc":"현재 지역 또는 네트워크 환경에서는 이 기능을 사용할 수 없습니다.","dashboard.indicator.warning.chartNotInitialized":"차트가 초기화되지 않아 선 그리기 도구를 사용할 수 없습니다.","dashboard.indicator.success.runIndicator":"표시기가 성공적으로 실행됩니다.","dashboard.indicator.success.clearDrawings":"모든 선화 삭제됨","dashboard.indicator.sma":"SMA(이동 평균 조합)","dashboard.indicator.ema":"EMA(지수 이동 평균 조합)","dashboard.indicator.rsi":"RSI(상대강도)","dashboard.indicator.macd":"MACD","dashboard.indicator.bb":"볼린저 밴드","dashboard.indicator.atr":"ATR(평균 실제 범위)","dashboard.indicator.cci":"CCI(상품 채널 지수)","dashboard.indicator.williams":"Williams %R(윌리엄스 지표)","dashboard.indicator.mfi":"MFI(자금 흐름 지수)","dashboard.indicator.adx":"ADX(평균 추세 지수)","dashboard.indicator.obv":"OBV(에너지파)","dashboard.indicator.adosc":"ADOSC(누적/디스패치 오실레이터)","dashboard.indicator.ad":"AD(집적/분배선)","dashboard.indicator.kdj":"KDJ(확률적 지표)","dashboard.indicator.signal.buy":"구매","dashboard.indicator.signal.sell":"판매","dashboard.indicator.signal.supertrendBuy":"슈퍼트렌드 구매","dashboard.indicator.signal.supertrendSell":"슈퍼트렌드 매도","dashboard.indicator.chart.kline":"K라인","dashboard.indicator.chart.volume":"볼륨","dashboard.indicator.chart.uptrend":"상승 추세","dashboard.indicator.chart.downtrend":"하락 추세","dashboard.indicator.tooltip.time":"시간","dashboard.indicator.tooltip.open":"열다","dashboard.indicator.tooltip.close":"받다","dashboard.indicator.tooltip.high":"높다","dashboard.indicator.tooltip.low":"낮음","dashboard.indicator.tooltip.volume":"볼륨","dashboard.indicator.drawing.line":"선분","dashboard.indicator.drawing.horizontalLine":"수평선","dashboard.indicator.drawing.verticalLine":"수직선","dashboard.indicator.drawing.ray":"레이","dashboard.indicator.drawing.straightLine":"직선","dashboard.indicator.drawing.parallelLine":"평행선","dashboard.indicator.drawing.priceLine":"가격선","dashboard.indicator.drawing.priceChannel":"가격 채널","dashboard.indicator.drawing.fibonacciLine":"피보나치 라인","dashboard.indicator.drawing.measure":"측정","dashboard.indicator.drawing.clearAll":"모든 선화 지우기","dashboard.indicator.market.USStock":"미국 주식","dashboard.indicator.market.Crypto":"암호화폐","dashboard.indicator.market.Forex":"외환","dashboard.indicator.market.Futures":"선물","dashboard.indicator.create":"지표 생성","dashboard.indicator.editor.title":"지표 생성/편집","dashboard.indicator.editor.name":"지표 이름","dashboard.indicator.editor.nameRequired":"지표 이름을 입력하세요.","dashboard.indicator.editor.namePlaceholder":"지표 이름을 입력하세요.","dashboard.indicator.editor.description":"표시기 설명","dashboard.indicator.editor.descriptionPlaceholder":"표시기에 대한 설명을 입력하세요(선택 사항).","dashboard.indicator.editor.code":"파이썬 코드","dashboard.indicator.editor.codeRequired":"표시 코드를 입력하세요","dashboard.indicator.editor.codePlaceholder":"Python 코드를 입력하세요.","dashboard.indicator.editor.run":"달리다","dashboard.indicator.editor.runHint":"실행 버튼을 클릭하면 K-라인 차트의 지표 효과를 미리 볼 수 있습니다.","dashboard.indicator.editor.guide":"개발 가이드","dashboard.indicator.editor.guideTitle":"Python 지표 개발 가이드","dashboard.indicator.editor.save":"저장","dashboard.indicator.editor.cancel":"취소","dashboard.indicator.editor.unnamed":"이름 없는 표시기","dashboard.indicator.editor.publishToCommunity":"커뮤니티에 게시","dashboard.indicator.editor.publishToCommunityHint":"게시되면 다른 사용자가 커뮤니티에서 귀하의 지표를 보고 사용할 수 있습니다.","dashboard.indicator.editor.indicatorType":"표시기 유형","dashboard.indicator.editor.indicatorTypeRequired":"지표 유형을 선택하세요.","dashboard.indicator.editor.indicatorTypePlaceholder":"지표 유형을 선택하세요.","dashboard.indicator.editor.previewImage":"미리보기","dashboard.indicator.editor.uploadImage":"사진 업로드","dashboard.indicator.editor.previewImageHint":"권장 크기: 800x400, 2MB 이하","dashboard.indicator.editor.pricing":"판매가(QDT)","dashboard.indicator.editor.pricingType.free":"무료","dashboard.indicator.editor.pricingType.permanent":"영구","dashboard.indicator.editor.pricingType.monthly":"월별 결제","dashboard.indicator.editor.price":"가격","dashboard.indicator.editor.priceRequired":"가격을 입력해주세요","dashboard.indicator.editor.pricePlaceholder":"가격을 입력해주세요","dashboard.indicator.editor.pricingHint":"무료 지표의 가격은 0이지만 플랫폼은 지표 사용량과 칭찬률에 따라 보상(QDT)을 제공합니다.","dashboard.indicator.editor.aiGenerate":"지능형 세대","dashboard.indicator.editor.aiPromptPlaceholder":"당신의 아이디어를 알려주시면 Python 표시기 코드를 생성해 드리겠습니다.","dashboard.indicator.editor.aiGenerateBtn":"AI 생성 코드","dashboard.indicator.editor.aiPromptRequired":"당신의 생각을 입력해주세요","dashboard.indicator.editor.aiGenerateSuccess":"코드 생성 성공","dashboard.indicator.editor.aiGenerateError":"코드 생성에 실패했습니다. 나중에 다시 시도해 주세요.","dashboard.indicator.editor.verifyCode":"코드 검증","dashboard.indicator.editor.verifyCodeSuccess":"검증 통과","dashboard.indicator.editor.verifyCodeFailed":"검증 실패","dashboard.indicator.editor.verifyCodeEmpty":"코드는 비워둘 수 없습니다","dashboard.indicator.backtest.title":"지표 백테스트","dashboard.indicator.backtest.config":"백테스트 매개변수","dashboard.indicator.backtest.startDate":"시작일","dashboard.indicator.backtest.endDate":"종료일","dashboard.indicator.backtest.selectStartDate":"시작일 선택","dashboard.indicator.backtest.selectEndDate":"종료일 선택","dashboard.indicator.backtest.startDateRequired":"시작일을 선택하세요.","dashboard.indicator.backtest.endDateRequired":"종료일을 선택하세요.","dashboard.indicator.backtest.initialCapital":"초기자본금","dashboard.indicator.backtest.initialCapitalRequired":"초기자금을 입력해주세요","dashboard.indicator.backtest.commission":"수수료","dashboard.indicator.backtest.leverage":"레버리지 비율","dashboard.indicator.backtest.tradeDirection":"거래 방향","dashboard.indicator.backtest.longOnly":"오래 가세요","dashboard.indicator.backtest.shortOnly":"짧은","dashboard.indicator.backtest.both":"양방향","dashboard.indicator.backtest.run":"백테스팅 시작","dashboard.indicator.backtest.rerun":"다시 백테스트","dashboard.indicator.backtest.close":"닫기","dashboard.indicator.backtest.running":"지표 백테스트 진행 중...","dashboard.indicator.backtest.results":"백테스트 결과","dashboard.indicator.backtest.totalReturn":"총 수익","dashboard.indicator.backtest.annualReturn":"연간 소득","dashboard.indicator.backtest.maxDrawdown":"최대 감소","dashboard.indicator.backtest.sharpeRatio":"샤프비율","dashboard.indicator.backtest.winRate":"승률","dashboard.indicator.backtest.profitFactor":"손익 비율","dashboard.indicator.backtest.totalTrades":"거래수","dashboard.indicator.totalReturn":"총 수익","dashboard.indicator.annualReturn":"연간 수익률","dashboard.indicator.maxDrawdown":"최대 감소","dashboard.indicator.sharpeRatio":"샤프비율","dashboard.indicator.winRate":"승률","dashboard.indicator.profitFactor":"손익 비율","dashboard.indicator.totalTrades":"총 거래 수","dashboard.indicator.backtest.totalCommission":"총 취급 수수료","dashboard.indicator.backtest.equityCurve":"수익률 곡선","dashboard.indicator.backtest.strategy":"지표소득","dashboard.indicator.backtest.benchmark":"벤치마크 수익률","dashboard.indicator.backtest.tradeHistory":"거래 내역","dashboard.indicator.backtest.tradeTime":"시간","dashboard.indicator.backtest.tradeType":"유형","dashboard.indicator.backtest.buy":"사다","dashboard.indicator.backtest.sell":"팔다","dashboard.indicator.backtest.liquidation":"청산","dashboard.indicator.backtest.openLong":"길게 열다","dashboard.indicator.backtest.closeLong":"핀듀오","dashboard.indicator.backtest.closeLongStop":"매수에 가까움(손절매)","dashboard.indicator.backtest.closeLongProfit":"더 닫기 (이익 실현)","dashboard.indicator.backtest.addLong":"롱 포지션 추가","dashboard.indicator.backtest.openShort":"오픈 쇼트","dashboard.indicator.backtest.closeShort":"비어 있음","dashboard.indicator.backtest.closeShortStop":"청산(손절매)","dashboard.indicator.backtest.closeShortProfit":"마감(이익실현)","dashboard.indicator.backtest.addShort":"숏 포지션 추가","dashboard.indicator.backtest.price":"가격","dashboard.indicator.backtest.amount":"수량","dashboard.indicator.backtest.balance":"계좌잔고","dashboard.indicator.backtest.profit":"이익과 손실","dashboard.indicator.backtest.success":"백테스트 완료","dashboard.indicator.backtest.failed":"백테스트에 실패했습니다. 나중에 다시 시도해 주세요.","dashboard.indicator.backtest.noIndicatorCode":"이 지표에 대한 백테스트 가능한 코드가 없습니다.","dashboard.indicator.backtest.noSymbol":"거래대상을 먼저 선택해주세요","dashboard.indicator.backtest.dateRangeExceeded":"백테스트 시간 범위가 한도를 초과합니다. {timeframe} 기간은 최대 {maxRange}까지 백테스트할 수 있습니다.","dashboard.indicator.backtest.dateRangeExceededDays":"Backtest range exceeds limit: {timeframe} max {maxRange} ({maxDays} days)","dashboard.indicator.backtest.metaLine":"Symbol: {symbol} | Market: {market} | Timeframe: {timeframe}","dashboard.indicator.backtest.savedRunId":"Backtest saved. Run ID: {id}","dashboard.indicator.backtest.prev":"Previous","dashboard.indicator.backtest.next":"Next","dashboard.indicator.backtest.hint.entryPctMax":"Max entry: {maxPct}% (reserve budget for future scale-ins)","dashboard.indicator.backtest.steps.strategy.title":"Strategy","dashboard.indicator.backtest.steps.strategy.desc":"Position sizing & risk controls","dashboard.indicator.backtest.steps.trading.title":"Trading settings","dashboard.indicator.backtest.steps.trading.desc":"Time range, capital, fees, leverage","dashboard.indicator.backtest.steps.results.title":"Results","dashboard.indicator.backtest.steps.results.desc":"Backtest output","dashboard.indicator.backtest.panel.risk":"Risk management (SL/TP/Trailing)","dashboard.indicator.backtest.panel.scale":"Scale in / DCA (trend & mean-reversion)","dashboard.indicator.backtest.panel.reduce":"Reduce position (trend & adverse)","dashboard.indicator.backtest.panel.position":"Position sizing","dashboard.indicator.backtest.field.stopLossPct":"Stop Loss (%)","dashboard.indicator.backtest.field.takeProfitPct":"Take Profit (%)","dashboard.indicator.backtest.field.trailingEnabled":"Trailing stop / take profit","dashboard.indicator.backtest.field.trailingStopPct":"Trailing drawdown (%)","dashboard.indicator.backtest.field.trailingActivationPct":"Trailing activation (%)","dashboard.indicator.backtest.field.slippage":"Slippage (%)","dashboard.indicator.backtest.field.trendAddEnabled":"Trend-following scale-in","dashboard.indicator.backtest.field.dcaAddEnabled":"Mean-reversion scale-in","dashboard.indicator.backtest.field.trendAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.dcaAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.trendAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.dcaAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.trendAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.dcaAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.trendReduceEnabled":"Trend reduce","dashboard.indicator.backtest.field.adverseReduceEnabled":"Adverse reduce","dashboard.indicator.backtest.field.trendReduceStepPct":"Trend trigger (%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"Adverse trigger (%)","dashboard.indicator.backtest.field.trendReduceSizePct":"Reduce size (% of position)","dashboard.indicator.backtest.field.adverseReduceSizePct":"Adverse reduce size (% of position)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"Max trend reduce times","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"Max adverse reduce times","dashboard.indicator.backtest.field.entryPct":"Entry size (% of capital)","dashboard.indicator.backtest.field.minOrderPct":"Min order size (% of capital) (optional)","dashboard.indicator.backtest.closeLongTrailing":"Close Long (Trailing)","dashboard.indicator.backtest.reduceLong":"Reduce Long","dashboard.indicator.backtest.closeShortTrailing":"Close Short (Trailing)","dashboard.indicator.backtest.reduceShort":"Reduce Short","dashboard.docs.title":"문서 센터","dashboard.docs.search.placeholder":"문서 검색...","dashboard.docs.category.all":"모두","dashboard.docs.category.guide":"개발 가이드","dashboard.docs.category.api":"API 문서","dashboard.docs.category.tutorial":"튜토리얼","dashboard.docs.category.faq":"FAQ","dashboard.docs.featured.title":"권장 문서","dashboard.docs.featured.tag":"추천","dashboard.docs.list.views":"찾아보기","dashboard.docs.list.author":"작성자","dashboard.docs.list.empty":"아직 문서가 없습니다.","dashboard.docs.list.backToAll":"모든 문서로 돌아가기","dashboard.docs.list.total":"총 {count}개의 문서","dashboard.docs.detail.back":"문서 목록으로 돌아가기","dashboard.docs.detail.updatedAt":"업데이트 날짜","dashboard.docs.detail.related":"관련 문서","dashboard.docs.detail.notFound":"문서가 존재하지 않습니다","dashboard.docs.detail.error":"문서가 존재하지 않거나 삭제되었습니다.","dashboard.docs.search.result":"검색결과","dashboard.docs.search.keyword":"키워드","community.filter.indicatorType":"표시기 유형","community.filter.all":"모두","community.filter.other":"기타 옵션","community.filter.pricing":"가격 유형","community.filter.allPricing":"모든 가격","community.filter.sortBy":"정렬 기준","community.filter.search":"검색","community.filter.searchPlaceholder":"측정항목 이름 검색","community.indicatorType.trend":"트렌드 유형","community.indicatorType.momentum":"모멘텀형","community.indicatorType.volatility":"변동성","community.indicatorType.volume":"볼륨","community.indicatorType.custom":"사용자 정의","community.pricing.free":"무료","community.pricing.paid":"지불","community.sort.downloads":"다운로드","community.sort.rating":"등급","community.sort.newest":"최신 릴리스","community.pagination.total":"총 {total} 지표","community.noDescription":"아직 설명이 없습니다","community.detail.type":"유형","community.detail.pricing":"가격","community.detail.rating":"등급","community.detail.downloads":"다운로드","community.detail.author":"작성자","community.detail.description":"소개","community.detail.detailContent":"자세한 설명","community.detail.backtestStats":"백테스트 통계","community.action.purchase":"매수 지표","community.action.addToMyIndicators":"내 지표에 추가","community.action.favorite":"컬렉션","community.action.unfavorite":"즐겨찾기 취소","community.action.buyNow":"지금 구매","community.action.renew":"갱신","community.purchase.price":"가격","community.purchase.permanent":"영구","community.purchase.monthly":"달","community.purchase.confirmBuy":"이 지표({price} QDT) 구매를 확인하시겠습니까?","community.purchase.confirmRenew":"이 지표({price} QDT/월)를 갱신하시겠습니까?","community.purchase.confirmFree":"이 무료 표시기를 추가하시겠습니까?","community.purchase.confirmTitle":"조치 확인","community.purchase.owned":"이 표시기를 구입하셨습니다(영구적으로 유효함).","community.purchase.ownIndicator":"귀하가 게시한 측정항목입니다.","community.purchase.expired":"구독이 만료되었습니다","community.purchase.expiresOn":"만료 시간: {date}","community.tabs.detail":"지표 세부정보","community.tabs.backtest":"백테스트 데이터","community.tabs.ratings":"사용자 리뷰","community.rating.myRating":"내 평가","community.rating.stars":"별 {count}개","community.rating.commentPlaceholder":"당신의 경험을 공유하세요...","community.rating.submit":"평가 제출","community.rating.modify":"수정","community.rating.saveModify":"변경사항 저장","community.rating.cancel":"취소","community.rating.selectRating":"등급을 선택해 주세요","community.rating.success":"평가 성공","community.rating.modifySuccess":"리뷰가 수정되었습니다.","community.rating.failed":"평가 실패","community.rating.noRatings":"아직 댓글이 없습니다","community.backtest.note":"위 데이터는 과거 백테스트 결과이며 참고용일 뿐 미래 수익을 나타내지는 않습니다.","community.backtest.noData":"아직 백테스트 데이터가 없습니다.","community.backtest.uploadHint":"작성자는 아직 백테스트 데이터를 업로드하지 않았습니다.","community.message.loadFailed":"표시기 목록을 로드하지 못했습니다.","community.message.purchaseProcessing":"구매 요청 처리 중...","community.message.downloadSuccess":"내 측정항목 목록에 측정항목이 추가되었습니다.","community.message.favoriteSuccess":"수집 성공","community.message.unfavoriteSuccess":"수집을 취소했습니다.","community.message.operationSuccess":"작업 성공","community.message.operationFailed":"작업 실패","community.banner.readOnly":"읽기 전용","community.banner.loginHint":"로그인 또는 등록이 필요한 경우 버튼을 클릭하여 독립 페이지로 이동하여 CSRF 문제를 방지하세요","community.banner.jumpButton":"로그인/등록으로 이동","dashboard.totalEquity":"총자본","dashboard.totalPnL":"총손익","dashboard.aiStrategies":"AI 전략","dashboard.indicatorStrategies":"지표 전략","dashboard.running":"달리기","dashboard.pnlHistory":"역사적 손익","dashboard.strategyPerformance":"전략 손익비율","dashboard.recentTrades":"최근 거래","dashboard.currentPositions":"현재 위치","dashboard.table.time":"시간","dashboard.table.strategy":"정책 이름","dashboard.table.symbol":"대상","dashboard.table.type":"유형","dashboard.table.side":"방향","dashboard.table.size":"미결제약정","dashboard.table.entryPrice":"평균 개장가","dashboard.table.price":"가격","dashboard.table.amount":"수량","dashboard.table.profit":"이익과 손실","dashboard.pendingOrders":"주문 실행 기록","dashboard.totalOrders":"총 {total}건","dashboard.viewError":"오류 보기","dashboard.filled":"체결됨","dashboard.orderTable.time":"생성 시간","dashboard.orderTable.strategy":"전략","dashboard.orderTable.symbol":"거래 쌍","dashboard.orderTable.signalType":"신호 유형","dashboard.orderTable.amount":"수량","dashboard.orderTable.price":"체결 가격","dashboard.orderTable.status":"상태","dashboard.orderTable.executedAt":"실행 시간","dashboard.signalType.openLong":"롱 오픈","dashboard.signalType.openShort":"숏 오픈","dashboard.signalType.closeLong":"롱 청산","dashboard.signalType.closeShort":"숏 청산","dashboard.signalType.addLong":"롱 추가","dashboard.signalType.addShort":"숏 추가","dashboard.status.pending":"대기 중","dashboard.status.processing":"처리 중","dashboard.status.completed":"완료","dashboard.status.failed":"실패","dashboard.status.cancelled":"취소됨","dashboard.table.pnl":"미실현 손익","form.basic-form.basic.title":"기본 형태","form.basic-form.basic.description":"양식 페이지는 사용자로부터 정보를 수집하거나 확인하는 데 사용됩니다. 기본 양식은 데이터 항목이 거의 없는 양식 시나리오에서 일반적으로 사용됩니다.","form.basic-form.title.label":"제목","form.basic-form.title.placeholder":"목표에 이름을 지어주세요","form.basic-form.title.required":"제목을 입력하세요","form.basic-form.date.label":"시작일 및 종료일","form.basic-form.placeholder.start":"시작일","form.basic-form.placeholder.end":"종료일","form.basic-form.date.required":"시작일과 종료일을 선택하세요.","form.basic-form.goal.label":"목표 설명","form.basic-form.goal.placeholder":"단계별 업무 목표를 입력하세요.","form.basic-form.goal.required":"목표 설명을 입력하세요.","form.basic-form.standard.label":"측정하다","form.basic-form.standard.placeholder":"측정항목을 입력하세요.","form.basic-form.standard.required":"측정항목을 입력하세요.","form.basic-form.client.label":"고객","form.basic-form.client.required":"귀하가 서비스를 제공하는 고객에 대해 설명해주세요.","form.basic-form.label.tooltip":"대상 서비스 대상자","form.basic-form.client.placeholder":"귀하가 서비스를 제공하는 고객, 내부 고객을 직접 @이름/직위 번호로 설명하십시오.","form.basic-form.invites.label":"리뷰어 초대","form.basic-form.invites.placeholder":"@이름/사원번호로 직접 보내주세요. 최대 5명까지 초대 가능합니다.","form.basic-form.weight.label":"무게","form.basic-form.weight.placeholder":"입력해주세요","form.basic-form.public.label":"대중을 대상으로","form.basic-form.label.help":"고객과 검토자는 기본적으로 공유됩니다.","form.basic-form.radio.public":"대중","form.basic-form.radio.partially-public":"부분적으로 공개","form.basic-form.radio.private":"비공개","form.basic-form.publicUsers.placeholder":"열려 있다","form.basic-form.option.A":"동료 1","form.basic-form.option.B":"동료 2","form.basic-form.option.C":"동료 3","form.basic-form.email.required":"이메일 주소를 입력해주세요!","form.basic-form.email.wrong-format":"이메일 주소 형식이 잘못되었습니다!","form.basic-form.userName.required":"사용자 이름을 입력해주세요!","form.basic-form.password.required":"비밀번호를 입력해주세요!","form.basic-form.password.twice":"두 번 입력한 비밀번호가 일치하지 않습니다!","form.basic-form.strength.msg":"6자 이상 입력해주세요. 쉽게 추측할 수 있는 비밀번호는 사용하지 마세요.","form.basic-form.strength.strong":"힘: 강한","form.basic-form.strength.medium":"강도: 중간","form.basic-form.strength.short":"강도: 너무 짧음","form.basic-form.confirm-password.required":"비밀번호를 확인해 주세요!","form.basic-form.phone-number.required":"휴대폰번호를 입력해주세요!","form.basic-form.phone-number.wrong-format":"휴대폰 번호 형식이 잘못되었습니다!","form.basic-form.verification-code.required":"인증번호를 입력해주세요!","form.basic-form.form.get-captcha":"인증 코드 받기","form.basic-form.captcha.second":"초","form.basic-form.form.optional":"(선택사항)","form.basic-form.form.submit":"제출","form.basic-form.form.save":"저장","form.basic-form.email.placeholder":"이메일","form.basic-form.password.placeholder":"비밀번호는 6자 이상, 대소문자 구분","form.basic-form.confirm-password.placeholder":"비밀번호 확인","form.basic-form.phone-number.placeholder":"휴대전화번호","form.basic-form.verification-code.placeholder":"인증코드","result.success.title":"제출 성공","result.success.description":'제출 결과 페이지는 일련의 작업 작업의 처리 결과를 피드백하는 데 사용됩니다. 간단한 작업인 경우 메시지 전역 프롬프트 피드백을 사용하세요. 이 텍스트 영역에는 간단한 보충 지침이 표시될 수 있습니다. "문서"를 표시해야 하는 경우 아래 회색 영역에 더 복잡한 내용이 표시될 수 있습니다.',"result.success.operate-title":"프로젝트 이름","result.success.operate-id":"프로젝트 ID","result.success.principal":"담당자","result.success.operate-time":"유효시간","result.success.step1-title":"프로젝트 생성","result.success.step1-operator":"쿠 릴리","result.success.step2-title":"학과 사전 검토","result.success.step2-operator":"저우 마오마오","result.success.step2-extra":"긴급","result.success.step3-title":"재무 검토","result.success.step4-title":"완료","result.success.btn-return":"목록으로 돌아가기","result.success.btn-project":"항목 보기","result.success.btn-print":"인쇄","result.fail.error.title":"제출 실패","result.fail.error.description":"다시 제출하기 전에 다음 정보를 확인하고 수정하시기 바랍니다.","result.fail.error.hint-title":"제출한 콘텐츠에 다음 오류가 포함되어 있습니다.","result.fail.error.hint-text1":"귀하의 계정이 동결되었습니다","result.fail.error.hint-btn1":"즉시 해동","result.fail.error.hint-text2":"귀하의 계정은 아직 신청할 수 없습니다","result.fail.error.hint-btn2":"지금 업그레이드","result.fail.error.btn-text":"수정으로 돌아가기","account.settings.menuMap.custom":"개인화","account.settings.menuMap.binding":"계정 바인딩","account.settings.basic.avatar":"아바타","account.settings.basic.change-avatar":"아바타 변경","account.settings.basic.email":"이메일","account.settings.basic.email-message":"이메일을 입력해주세요!","account.settings.basic.nickname":"닉네임","account.settings.basic.nickname-message":"닉네임을 입력해주세요!","account.settings.basic.profile":"프로필","account.settings.basic.profile-message":"개인 프로필을 입력해주세요!","account.settings.basic.profile-placeholder":"프로필","account.settings.basic.country":"국가/지역","account.settings.basic.country-message":"국가나 지역을 입력해주세요!","account.settings.basic.geographic":"지방 및 도시","account.settings.basic.geographic-message":"귀하의 시/도를 입력해주세요!","account.settings.basic.address":"거리 주소","account.settings.basic.address-message":"주소를 입력해주세요!","account.settings.basic.phone":"연락처","account.settings.basic.phone-message":"연락처를 입력해주세요!","account.settings.basic.update":"기본정보 업데이트","account.settings.basic.update.success":"기본 정보를 성공적으로 업데이트했습니다.","account.settings.security.strong":"강한","account.settings.security.medium":"안으로","account.settings.security.weak":"약한","account.settings.security.password":"계정 비밀번호","account.settings.security.password-description":"현재 비밀번호 강도:","account.settings.security.phone":"보안 휴대폰","account.settings.security.phone-description":"이미 바인딩된 휴대폰:","account.settings.security.question":"보안 문제","account.settings.security.question-description":"보안 질문이 설정되지 않아 계정 보안을 효과적으로 보호할 수 있습니다.","account.settings.security.email":"이메일 바인딩","account.settings.security.email-description":"이미 바인딩된 이메일 주소:","account.settings.security.mfa":"MFA 장치","account.settings.security.mfa-description":"MFA 디바이스가 바인딩되지 않았습니다. 바인딩 후 다시 확인할 수 있습니다.","account.settings.security.modify":"수정","account.settings.security.set":"설정","account.settings.security.bind":"바인딩","account.settings.binding.taobao":"타오바오 바인딩","account.settings.binding.taobao-description":"현재 타오바오 계정이 연결되어 있지 않습니다","account.settings.binding.alipay":"알리페이 바인딩","account.settings.binding.alipay-description":"Alipay 계정이 현재 연결되어 있지 않습니다.","account.settings.binding.dingding":"바인딩 딩톡","account.settings.binding.dingding-description":"현재 바인딩된 DingTalk 계정이 없습니다.","account.settings.binding.bind":"바인딩","account.settings.notification.password":"계정 비밀번호","account.settings.notification.password-description":"다른 사용자의 메시지는 사이트 메시지 형식으로 통보됩니다.","account.settings.notification.messages":"시스템 메시지","account.settings.notification.messages-description":"시스템 메시지는 사이트 메시지 형식으로 통보됩니다.","account.settings.notification.todo":"해야 할 일","account.settings.notification.todo-description":"할일은 사이트 내 메시지로 알려드립니다.","account.settings.settings.open":"열다","account.settings.settings.close":"닫기","trading-assistant.title":"트레이딩 어시스턴트","trading-assistant.strategyList":"전략 목록","trading-assistant.createStrategy":"정책 만들기","trading-assistant.noStrategy":"아직 전략이 없습니다.","trading-assistant.selectStrategy":"세부정보를 보려면 왼쪽에서 전략을 선택하세요.","trading-assistant.startStrategy":"출시 전략","trading-assistant.stopStrategy":"중지 전략","trading-assistant.editStrategy":"편집 전략","trading-assistant.deleteStrategy":"정책 삭제","trading-assistant.status.running":"달리기","trading-assistant.status.stopped":"중지됨","trading-assistant.status.error":"오류","trading-assistant.strategyType.IndicatorStrategy":"기술 지표 전략","trading-assistant.strategyType.PromptBasedStrategy":"단서 전략","trading-assistant.strategyType.GridStrategy":"그리드 전략","trading-assistant.tabs.tradingRecords":"거래 내역","trading-assistant.tabs.positions":"직위기록","trading-assistant.tabs.equityCurve":"주식곡선","trading-assistant.form.step1":"지표 선택","trading-assistant.form.step2":"교환 구성","trading-assistant.form.step3":"전략 매개변수","trading-assistant.form.indicator":"지표 선택","trading-assistant.form.indicatorHint":"자신이 구매했거나 생성한 기술 지표만 선택할 수 있습니다.","trading-assistant.form.qdtCostHints":"전략을 사용하면 QDT가 소모됩니다. 계정에 QDT 잔액이 충분한지 확인하세요.","trading-assistant.form.indicatorDescription":"표시기 설명","trading-assistant.form.noDescription":"아직 설명이 없습니다","trading-assistant.form.exchange":"교환 선택","trading-assistant.form.apiKey":"API 키","trading-assistant.form.secretKey":"비밀키","trading-assistant.form.passphrase":"암호","trading-assistant.form.testConnection":"연결 테스트","trading-assistant.form.strategyName":"정책 이름","trading-assistant.form.symbol":"거래 쌍","trading-assistant.form.symbolHint":"현재는 암호화폐 거래쌍만 지원됩니다","trading-assistant.form.initialCapital":"투자금액","trading-assistant.form.marketType":"시장 유형","trading-assistant.form.marketTypeFutures":"계약","trading-assistant.form.marketTypeSpot":"스팟","trading-assistant.form.marketTypeHint":"계약은 양방향 거래와 레버리지를 지원하는 반면 현물은 롱 포지션만 지원하고 레버리지는 1x로 고정됩니다.","trading-assistant.form.leverage":"여러 가지 활용","trading-assistant.form.leverageHint":"계약 : 1~125회, 현물 : 고정 1회","trading-assistant.form.spotLeverageFixed":"현물 거래 레버리지는 1x로 고정됩니다.","trading-assistant.form.spotOnlyLongHint":"현물 거래는 매수 포지션만 지원합니다","trading-assistant.form.tradeDirection":"거래 방향","trading-assistant.form.tradeDirectionLong":"오직 길다","trading-assistant.form.tradeDirectionShort":"단지 짧다","trading-assistant.form.tradeDirectionBoth":"양방향 거래","trading-assistant.form.timeframe":"기간","trading-assistant.form.klinePeriod":"K선 기간","trading-assistant.form.timeframe1m":"1분","trading-assistant.form.timeframe5m":"5분","trading-assistant.form.timeframe15m":"15분","trading-assistant.form.timeframe30m":"30분","trading-assistant.form.timeframe1H":"1시간","trading-assistant.form.timeframe4H":"4시간","trading-assistant.form.timeframe1D":"1일","trading-assistant.form.selectStrategyType":"전략 유형 선택","trading-assistant.form.indicatorStrategy":"지표 전략","trading-assistant.form.indicatorStrategyDesc":"기술 지표 기반 자동 거래 전략","trading-assistant.form.aiStrategy":"AI 전략","trading-assistant.form.aiStrategyDesc":"AI 지능형 의사결정 기반 자동 거래 전략","trading-assistant.form.enableAiFilter":"AI 지능형 의사결정 필터 활성화","trading-assistant.form.enableAiFilterHint":"활성화하면 지표 신호가 AI에 의해 필터링되어 거래 품질이 향상됩니다","trading-assistant.form.aiFilterPrompt":"사용자 정의 프롬프트","trading-assistant.form.aiFilterPromptHint":"AI 필터링을 위한 사용자 정의 지침을 제공하고, 비워두면 시스템 기본값을 사용합니다","trading-assistant.validation.strategyTypeRequired":"전략 유형을 선택하세요","trading-assistant.form.advancedSettings":"고급 설정","trading-assistant.form.orderMode":"주문 모드","trading-assistant.form.orderModeMaker":"메이커","trading-assistant.form.orderModeTaker":"시장가(테이커)","trading-assistant.form.orderModeHint":"지정가 주문 모드는 지정가 주문을 사용하며 처리 수수료가 더 낮습니다. 시장 가격 모드는 즉시 실행되며 처리 수수료가 더 높습니다.","trading-assistant.form.makerWaitSec":"지정가 주문 대기 시간(초)","trading-assistant.form.makerWaitSecHint":"주문 후 거래가 완료될 때까지 기다리는 시간입니다. 취소하고 시간 초과 후 다시 시도하세요.","trading-assistant.form.makerRetries":"보류 중인 주문에 대한 재시도 횟수","trading-assistant.form.makerRetriesHint":"보류 중인 주문이 실행되지 않을 때 최대 재시도 횟수","trading-assistant.form.fallbackToMarket":"지정가 주문이 실패하고 시장 가격이 하락합니다.","trading-assistant.form.fallbackToMarketHint":"개시/청산 보류 주문이 완료되지 않은 경우 거래가 완료되었는지 확인하기 위해 시장가 주문으로 다운그레이드해야 하는지 여부.","trading-assistant.form.marginMode":"마진 모드","trading-assistant.form.marginModeCross":"전체 창고","trading-assistant.form.marginModeIsolated":"고립된 위치","trading-assistant.form.stopLossPct":"정지손해율(%)","trading-assistant.form.stopLossPctHint":"정지 손실 비율을 설정합니다. 0은 정지 손실이 활성화되지 않았음을 의미합니다.","trading-assistant.form.takeProfitPct":"이익 실현 비율(%)","trading-assistant.form.takeProfitPctHint":"이익실현 비율을 설정합니다. 0은 이익실현을 비활성화함을 의미합니다.","trading-assistant.form.signalMode":"신호 모드","trading-assistant.form.signalModeConfirmed":"모드 확인","trading-assistant.form.signalModeAggressive":"공격적 모드","trading-assistant.form.signalModeHint":"확인 모드: 완료된 K 라인만 확인합니다. 공격적 모드: K 라인 형성도 확인합니다.","trading-assistant.form.cancel":"취소","trading-assistant.form.prev":"이전 단계","trading-assistant.form.next":"다음 단계","trading-assistant.form.confirmCreate":"생성 확인","trading-assistant.form.confirmEdit":"변경사항 확인","trading-assistant.messages.createSuccess":"전략이 성공적으로 생성되었습니다.","trading-assistant.messages.createFailed":"정책을 생성하지 못했습니다.","trading-assistant.messages.updateSuccess":"정책 업데이트 성공","trading-assistant.messages.updateFailed":"정책 업데이트 실패","trading-assistant.messages.deleteSuccess":"정책 삭제 성공","trading-assistant.messages.deleteFailed":"정책 삭제 실패","trading-assistant.messages.startSuccess":"전략이 성공적으로 시작되었습니다","trading-assistant.messages.startFailed":"정책을 시작하지 못했습니다.","trading-assistant.messages.stopSuccess":"전략이 성공적으로 중지되었습니다.","trading-assistant.messages.stopFailed":"중지 전략이 실패했습니다.","trading-assistant.messages.loadFailed":"정책 목록을 가져오지 못했습니다.","trading-assistant.messages.runningWarning":"전략이 실행되고 있습니다. 전략을 수정하기 전에 전략을 중지하세요.","trading-assistant.messages.deleteConfirmWithName":'"{name}" 정책을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.',"trading-assistant.messages.deleteConfirm":"이 정책을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.","trading-assistant.messages.loadTradesFailed":"거래 기록을 가져오지 못했습니다.","trading-assistant.messages.loadPositionsFailed":"위치 기록을 가져오지 못했습니다.","trading-assistant.messages.loadEquityFailed":"자기자본곡선 획득 실패","trading-assistant.messages.loadIndicatorsFailed":"표시기 목록을 로드하지 못했습니다. 나중에 다시 시도해 주세요.","trading-assistant.messages.spotLimitations":"현물 거래는 자동으로 매수, 1배 레버리지로 설정되었습니다.","trading-assistant.messages.autoFillApiConfig":"거래소의 과거 API 구성이 자동으로 채워졌습니다.","trading-assistant.placeholders.selectIndicator":"지표를 선택하세요","trading-assistant.placeholders.selectExchange":"교환을 선택해주세요","trading-assistant.placeholders.inputApiKey":"API 키를 입력하세요","trading-assistant.placeholders.inputSecretKey":"비밀키를 입력해주세요","trading-assistant.placeholders.inputPassphrase":"암호를 입력하세요","trading-assistant.placeholders.inputStrategyName":"정책 이름을 입력하세요.","trading-assistant.placeholders.selectSymbol":"거래쌍을 선택해주세요","trading-assistant.placeholders.selectTimeframe":"기간을 선택하세요.","trading-assistant.placeholders.selectKlinePeriod":"K선 기간을 선택하세요","trading-assistant.placeholders.inputAiFilterPrompt":"사용자 정의 프롬프트를 입력하세요(선택사항)","trading-assistant.validation.indicatorRequired":"지표를 선택하세요","trading-assistant.validation.exchangeRequired":"교환을 선택해주세요","trading-assistant.validation.apiKeyRequired":"API 키를 입력하세요","trading-assistant.validation.secretKeyRequired":"비밀키를 입력해주세요","trading-assistant.validation.passphraseRequired":"암호를 입력하세요","trading-assistant.validation.exchangeConfigIncomplete":"전체 교환 구성 정보를 입력하세요.","trading-assistant.validation.testConnectionRequired":'먼저 "연결 테스트" 버튼을 클릭하고 연결이 성공했는지 확인하세요',"trading-assistant.validation.testConnectionFailed":"연결 테스트에 실패했습니다. 구성을 확인하고 다시 테스트하세요","trading-assistant.validation.credentialRequired":"먼저 개인 센터에서 거래소 자격 증명을 추가하고 테스트하세요","trading-assistant.validation.strategyNameRequired":"정책 이름을 입력하세요.","trading-assistant.validation.symbolRequired":"거래쌍을 선택해주세요","trading-assistant.validation.initialCapitalRequired":"투자금액을 입력해주세요.","trading-assistant.validation.leverageRequired":"레버리지 비율을 입력하세요.","trading-assistant.table.time":"시간","trading-assistant.table.type":"유형","trading-assistant.table.price":"가격","trading-assistant.table.amount":"수량","trading-assistant.table.value":"금액","trading-assistant.table.commission":"취급 수수료","trading-assistant.table.symbol":"거래쌍","trading-assistant.table.side":"방향","trading-assistant.table.size":"포지션 수량","trading-assistant.table.entryPrice":"개장 가격","trading-assistant.table.currentPrice":"현재 가격","trading-assistant.table.unrealizedPnl":"미실현 손익","trading-assistant.table.pnlPercent":"손익비율","trading-assistant.table.buy":"사다","trading-assistant.table.sell":"팔다","trading-assistant.table.long":"오래 가세요","trading-assistant.table.short":"짧은","trading-assistant.table.noPositions":"아직 직책이 없습니다.","trading-assistant.detail.title":"전략 세부정보","trading-assistant.detail.strategyName":"정책 이름","trading-assistant.detail.strategyType":"전략 유형","trading-assistant.detail.status":"상태","trading-assistant.detail.tradingMode":"거래 모델","trading-assistant.detail.exchange":"교환","trading-assistant.detail.initialCapital":"초기자본금","trading-assistant.detail.totalInvestment":"총투자금액","trading-assistant.detail.currentEquity":"현재 순자산","trading-assistant.detail.totalPnl":"총손익","trading-assistant.detail.indicatorName":"지표 이름","trading-assistant.detail.maxLeverage":"최대 레버리지","trading-assistant.detail.decideInterval":"결정 간격","trading-assistant.detail.symbols":"거래개체","trading-assistant.detail.createdAt":"생성 시간","trading-assistant.detail.updatedAt":"업데이트 시간","trading-assistant.detail.llmConfig":"AI 모델 구성","trading-assistant.detail.exchangeConfig":"교환 구성","trading-assistant.detail.provider":"공급자","trading-assistant.detail.modelId":"모델 ID","trading-assistant.detail.close":"닫기","trading-assistant.detail.loadFailed":"정책 세부정보를 가져오지 못했습니다.","trading-assistant.equity.noData":"아직 순자산 데이터가 없습니다.","trading-assistant.equity.equity":"순자산","trading-assistant.exchange.tradingMode":"거래 모델","trading-assistant.exchange.virtual":"모의거래","trading-assistant.exchange.live":"실제 거래","trading-assistant.exchange.selectExchange":"교환 선택","trading-assistant.exchange.walletAddress":"지갑 주소","trading-assistant.exchange.walletAddressPlaceholder":"지갑 주소(0x로 시작)를 입력하세요.","trading-assistant.exchange.privateKey":"개인 키","trading-assistant.exchange.privateKeyPlaceholder":"개인키(64자)를 입력해주세요.","trading-assistant.exchange.testConnection":"연결 테스트","trading-assistant.exchange.connectionSuccess":"연결 성공","trading-assistant.exchange.connectionFailed":"연결 실패","trading-assistant.exchange.testFailed":"연결 테스트 실패","trading-assistant.exchange.fillComplete":"전체 교환 구성 정보를 입력하세요.","trading-assistant.strategyTypeOptions.ai":"AI 중심 전략","trading-assistant.strategyTypeOptions.indicator":"기술 지표 전략","trading-assistant.strategyTypeOptions.aiDeveloping":"AI 기반 전략 기능은 개발 중이므로 계속 지켜봐 주시기 바랍니다","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"AI 기반 전략 기능 개발 중","trading-assistant.indicatorType.trend":"추세","trading-assistant.indicatorType.momentum":"추진력","trading-assistant.indicatorType.volatility":"변동","trading-assistant.indicatorType.volume":"볼륨","trading-assistant.indicatorType.custom":"사용자 정의","trading-assistant.exchangeNames":{okx:"OKX",binance:"바이낸스",hyperliquid:"초액체",blockchaincom:"블록체인닷컴",coinbaseexchange:"코인베이스",gate:"Gate.io",mexc:"멕시코",kraken:"크라켄",bitfinex:"비트파이넥스",bybit:"바이비트",kucoin:"쿠코인",huobi:"후오비",bitget:"비트겟",bitmex:"비트멕스",deribit:"데리비트",phemex:"페멕스",bitmart:"비트마트",bitstamp:"비트스탬프",bittrex:"비트렉스",poloniex:"폴로닉스",gemini:"쌍둥이자리",cryptocom:"크립토닷컴",bitflyer:"비트플라이어",upbit:"업비트",bithumb:"빗썸",coinone:"코인원",zb:"ZB",lbank:"L은행",bibox:"비박스",bigone:"빅원",bitrue:"바이트루",coinex:"코인엑스",digifinex:"디지파이넥스",ftx:"FTX",ftxus:"FTX 미국",binanceus:"바이낸스 미국",binancecoinm:"바이낸스 코인-M",binanceusdm:"바이낸스 USDⓈ-M",deepcoin:"딥코인"},"ai-trading-assistant.title":"AI 트레이딩 도우미","ai-trading-assistant.strategyList":"전략 목록","ai-trading-assistant.createStrategy":"정책 만들기","ai-trading-assistant.noStrategy":"아직 전략이 없습니다.","ai-trading-assistant.selectStrategy":"세부정보를 보려면 왼쪽에서 전략을 선택하세요.","ai-trading-assistant.startStrategy":"출시 전략","ai-trading-assistant.stopStrategy":"중지 전략","ai-trading-assistant.editStrategy":"편집 전략","ai-trading-assistant.deleteStrategy":"정책 삭제","ai-trading-assistant.status.running":"달리기","ai-trading-assistant.status.stopped":"중지됨","ai-trading-assistant.status.error":"오류","ai-trading-assistant.tabs.tradingRecords":"거래 내역","ai-trading-assistant.tabs.positions":"직위기록","ai-trading-assistant.tabs.aiDecisions":"AI 의사결정 기록","ai-trading-assistant.tabs.equityCurve":"주식곡선","ai-trading-assistant.form.createTitle":"AI 거래 전략 수립","ai-trading-assistant.form.editTitle":"AI 거래 전략 편집","ai-trading-assistant.form.strategyName":"정책 이름","ai-trading-assistant.form.modelId":"AI 모델","ai-trading-assistant.form.modelIdHint":"API 키를 구성하지 않고 시스템 OpenRouter 서비스 사용","ai-trading-assistant.form.decideInterval":"결정 간격","ai-trading-assistant.form.decideInterval5m":"5분","ai-trading-assistant.form.decideInterval10m":"10분","ai-trading-assistant.form.decideInterval30m":"30분","ai-trading-assistant.form.decideInterval1h":"1시간","ai-trading-assistant.form.decideInterval4h":"4시간","ai-trading-assistant.form.decideInterval1d":"1일","ai-trading-assistant.form.decideInterval1w":"1주","ai-trading-assistant.form.decideIntervalHint":"AI가 결정을 내리는 시간 간격","ai-trading-assistant.form.runPeriod":"실행 주기","ai-trading-assistant.form.runPeriodHint":"전략 실행의 시작 시간과 종료 시간","ai-trading-assistant.form.startDate":"시작일","ai-trading-assistant.form.endDate":"종료일","ai-trading-assistant.form.qdtCostTitle":"QDT 공제 지침","ai-trading-assistant.form.qdtCostHint":"각 AI 결정에 대해 {cost} QDT가 차감됩니다. 귀하의 계정에 충분한 QDT 잔액이 있는지 확인하십시오. 전략을 실행하는 동안 각 결정에 대해 수수료가 실시간으로 차감됩니다.","ai-trading-assistant.form.apiKey":"API 키","ai-trading-assistant.form.exchange":"교환 선택","ai-trading-assistant.form.secretKey":"비밀키","ai-trading-assistant.form.passphrase":"암호","ai-trading-assistant.form.testConnection":"연결 테스트","ai-trading-assistant.form.symbol":"거래 쌍","ai-trading-assistant.form.symbolHint":"거래할 거래쌍을 선택하세요","ai-trading-assistant.form.initialCapital":"투자금액(마진)","ai-trading-assistant.form.leverage":"여러 가지 활용","ai-trading-assistant.form.timeframe":"기간","ai-trading-assistant.form.timeframe1m":"1분","ai-trading-assistant.form.timeframe5m":"5분","ai-trading-assistant.form.timeframe15m":"15분","ai-trading-assistant.form.timeframe30m":"30분","ai-trading-assistant.form.timeframe1H":"1시간","ai-trading-assistant.form.timeframe4H":"4시간","ai-trading-assistant.form.timeframe1D":"1일","ai-trading-assistant.form.marketType":"시장 유형","ai-trading-assistant.form.marketTypeFutures":"계약","ai-trading-assistant.form.marketTypeSpot":"스팟","ai-trading-assistant.form.totalPnl":"총손익","ai-trading-assistant.form.customPrompt":"맞춤 프롬프트 단어","ai-trading-assistant.form.customPromptHint":"선택 사항, AI 거래 전략 및 의사 결정 논리를 사용자 정의하는 데 사용됩니다.","ai-trading-assistant.form.cancel":"취소","ai-trading-assistant.form.prev":"이전 단계","ai-trading-assistant.form.next":"다음 단계","ai-trading-assistant.form.confirmCreate":"생성 확인","ai-trading-assistant.form.confirmEdit":"변경사항 확인","ai-trading-assistant.messages.createSuccess":"전략이 성공적으로 생성되었습니다.","ai-trading-assistant.messages.createFailed":"정책을 생성하지 못했습니다.","ai-trading-assistant.messages.updateSuccess":"정책 업데이트 성공","ai-trading-assistant.messages.updateFailed":"정책 업데이트 실패","ai-trading-assistant.messages.deleteSuccess":"정책 삭제 성공","ai-trading-assistant.messages.deleteFailed":"정책 삭제 실패","ai-trading-assistant.messages.startSuccess":"전략이 성공적으로 시작되었습니다","ai-trading-assistant.messages.startFailed":"정책을 시작하지 못했습니다.","ai-trading-assistant.messages.stopSuccess":"전략이 성공적으로 중지되었습니다.","ai-trading-assistant.messages.stopFailed":"중지 전략이 실패했습니다.","ai-trading-assistant.messages.loadFailed":"정책 목록을 가져오지 못했습니다.","ai-trading-assistant.messages.loadDecisionsFailed":"AI 결정 기록을 가져오지 못했습니다.","ai-trading-assistant.messages.deleteConfirm":"이 정책을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.","ai-trading-assistant.placeholders.inputStrategyName":"정책 이름을 입력하세요.","ai-trading-assistant.placeholders.selectModelId":"AI 모델을 선택해 주세요","ai-trading-assistant.placeholders.selectDecideInterval":"결정 간격을 선택하세요.","ai-trading-assistant.placeholders.startTime":"시작 시간","ai-trading-assistant.placeholders.endTime":"종료 시간","ai-trading-assistant.placeholders.inputApiKey":"API 키를 입력하세요","ai-trading-assistant.placeholders.selectExchange":"교환을 선택해주세요","ai-trading-assistant.placeholders.inputSecretKey":"비밀키를 입력해주세요","ai-trading-assistant.placeholders.inputPassphrase":"암호를 입력하세요","ai-trading-assistant.placeholders.selectSymbol":"다음과 같은 거래쌍을 선택하세요: BTC/USDT","ai-trading-assistant.placeholders.selectTimeframe":"기간을 선택하세요.","ai-trading-assistant.placeholders.inputCustomPrompt":"맞춤 프롬프트 단어를 입력하세요(선택사항).","ai-trading-assistant.validation.strategyNameRequired":"정책 이름을 입력하세요.","ai-trading-assistant.validation.modelIdRequired":"AI 모델을 선택해 주세요","ai-trading-assistant.validation.runPeriodRequired":"실행 주기를 선택하세요.","ai-trading-assistant.validation.apiKeyRequired":"API 키를 입력하세요","ai-trading-assistant.validation.exchangeRequired":"교환을 선택해주세요","ai-trading-assistant.validation.secretKeyRequired":"비밀키를 입력해주세요","ai-trading-assistant.validation.symbolRequired":"거래쌍을 선택해주세요","ai-trading-assistant.validation.initialCapitalRequired":"투자금액을 입력해주세요.","ai-trading-assistant.table.time":"시간","ai-trading-assistant.table.type":"유형","ai-trading-assistant.table.price":"가격","ai-trading-assistant.table.amount":"수량","ai-trading-assistant.table.value":"금액","ai-trading-assistant.table.symbol":"거래 쌍","ai-trading-assistant.table.side":"방향","ai-trading-assistant.table.size":"포지션 수량","ai-trading-assistant.table.entryPrice":"개장 가격","ai-trading-assistant.table.currentPrice":"현재 가격","ai-trading-assistant.table.unrealizedPnl":"미실현 손익","ai-trading-assistant.table.profit":"이익과 손실","ai-trading-assistant.table.openLong":"길게 열다","ai-trading-assistant.table.closeLong":"핀듀오","ai-trading-assistant.table.openShort":"오픈 쇼트","ai-trading-assistant.table.closeShort":"비어 있음","ai-trading-assistant.table.addLong":"가돗","ai-trading-assistant.table.addShort":"짧게 추가하다","ai-trading-assistant.table.closeShortProfit":"숏 포지션에서 이익을 얻으세요","ai-trading-assistant.table.closeShortStop":"손실 중지","ai-trading-assistant.table.closeLongProfit":"오래 멈추고 이익을 얻으십시오","ai-trading-assistant.table.closeLongStop":"손실 중지","ai-trading-assistant.table.buy":"사다","ai-trading-assistant.table.sell":"팔다","ai-trading-assistant.table.long":"오래 가세요","ai-trading-assistant.table.short":"짧은","ai-trading-assistant.table.hold":"보류","ai-trading-assistant.table.reasoning":"분석 이유","ai-trading-assistant.table.decisions":"의사결정","ai-trading-assistant.table.riskAssessment":"위험 평가","ai-trading-assistant.table.confidence":"자신감","ai-trading-assistant.table.totalRecords":"총 {total}개 기록","ai-trading-assistant.table.noPositions":"아직 직책이 없습니다.","ai-trading-assistant.detail.title":"전략 세부정보","ai-trading-assistant.equity.noData":"아직 순자산 데이터가 없습니다.","ai-trading-assistant.equity.equity":"순자산","ai-trading-assistant.exchange.testFailed":"연결 테스트 실패","ai-trading-assistant.exchange.connectionSuccess":"연결 성공","ai-trading-assistant.exchange.connectionFailed":"연결 실패","ai-trading-assistant.form.advancedSettings":"고급 설정","ai-trading-assistant.form.orderMode":"주문 모드","ai-trading-assistant.form.orderModeMaker":"메이커","ai-trading-assistant.form.orderModeTaker":"시장가(테이커)","ai-trading-assistant.form.orderModeHint":"지정가 주문 모드는 지정가 주문을 사용하며 처리 수수료가 더 낮습니다. 시장 가격 모드는 즉시 실행되며 처리 수수료가 더 높습니다.","ai-trading-assistant.form.makerWaitSec":"지정가 주문 대기 시간(초)","ai-trading-assistant.form.makerWaitSecHint":"주문 후 거래가 완료될 때까지 기다리는 시간입니다. 취소하고 시간 초과 후 다시 시도하세요.","ai-trading-assistant.form.makerRetries":"보류 중인 주문에 대한 재시도 횟수","ai-trading-assistant.form.makerRetriesHint":"보류 중인 주문이 실행되지 않을 때 최대 재시도 횟수","ai-trading-assistant.form.fallbackToMarket":"지정가 주문이 실패하고 시장 가격이 하락합니다.","ai-trading-assistant.form.fallbackToMarketHint":"개시/청산 보류 주문이 완료되지 않은 경우 거래가 완료되었는지 확인하기 위해 시장가 주문으로 다운그레이드해야 하는지 여부.","ai-trading-assistant.form.marginMode":"마진 모드","ai-trading-assistant.form.marginModeCross":"전체 창고","ai-trading-assistant.form.marginModeIsolated":"고립된 위치","ai-analysis.title":"퀀트 트레이딩 엔진","ai-analysis.system.online":"온라인","ai-analysis.system.agents":"대리인","ai-analysis.system.active":"활성","ai-analysis.system.stage":"무대","ai-analysis.panel.roster":"에이전트 라인업","ai-analysis.panel.thinking":"생각하다...","ai-analysis.panel.done":"완료","ai-analysis.panel.standby":"대기","ai-analysis.input.title":"퀀트 트레이딩 엔진","ai-analysis.input.placeholder":"대상 자산 선택(예: BTC/USDT)","ai-analysis.input.watchlist":"옵션 주식","ai-analysis.input.start":"분석 시작","ai-analysis.input.recent":"최근 작업:","ai-analysis.vis.stage":"무대","ai-analysis.vis.processing":"처리","ai-analysis.result.complete":"분석 완료","ai-analysis.result.signal":"최종 신호","ai-analysis.result.confidence":"자신감:","ai-analysis.result.new":"새로운 분석","ai-analysis.result.full":"전체 보고서 보기","ai-analysis.logs.title":"시스템 로그","ai-analysis.modal.title":"기밀 보고서","ai-analysis.modal.fundamental":"기본적 분석","ai-analysis.modal.technical":"기술적 분석","ai-analysis.modal.sentiment":"감정 분석","ai-analysis.modal.risk":"위험 평가","ai-analysis.stage.idle":"대기","ai-analysis.stage.1":"1단계: 다차원 분석","ai-analysis.stage.2":"2단계: 장단기 토론","ai-analysis.stage.3":"3단계: 전략적 계획","ai-analysis.stage.4":"네 번째 단계: 위험 통제 검토","ai-analysis.stage.complete":"완료","ai-analysis.agent.investment_director":"투자 이사","ai-analysis.agent.role.investment_director":"종합 분석 및 최종 결론","ai-analysis.agent.market":"시장 분석가","ai-analysis.agent.role.market":"기술 및 시장 데이터","ai-analysis.agent.fundamental":"기본 분석가","ai-analysis.agent.role.fundamental":"재무 및 평가","ai-analysis.agent.technical":"기술 분석가","ai-analysis.agent.role.technical":"기술 지표 및 차트","ai-analysis.agent.news":"뉴스 분석가","ai-analysis.agent.role.news":"글로벌 뉴스 필터","ai-analysis.agent.sentiment":"감정 분석가","ai-analysis.agent.role.sentiment":"사회적 및 정서적","ai-analysis.agent.risk":"위험 분석가","ai-analysis.agent.role.risk":"기본 리스크 점검","ai-analysis.agent.bull":"낙관적인 연구원","ai-analysis.agent.role.bull":"성장촉매 채굴","ai-analysis.agent.bear":"약세 연구원","ai-analysis.agent.role.bear":"위험 및 결함 조사","ai-analysis.agent.manager":"연구 관리자","ai-analysis.agent.role.manager":"토론 진행자","ai-analysis.agent.trader":"상인","ai-analysis.agent.role.trader":"경영 전략가","ai-analysis.agent.risky":"활동가 분석가","ai-analysis.agent.role.risky":"공격적인 전략","ai-analysis.agent.neutral":"균형 분석가","ai-analysis.agent.role.neutral":"균형 전략","ai-analysis.agent.safe":"보수적인 분석가","ai-analysis.agent.role.safe":"보수적 전략","ai-analysis.agent.cro":"위험 통제 관리자(CRO)","ai-analysis.agent.role.cro":"최종 의사결정 권한","ai-analysis.script.market":"주요 거래소에서 OHLCV 데이터를 가져오는 중...","ai-analysis.script.fundamental":"분기별 재무 보고서를 검색하는 중...","ai-analysis.script.technical":"기술지표 및 차트 패턴 분석 중...","ai-analysis.script.news":"글로벌 금융 뉴스를 스캔하는 중...","ai-analysis.script.sentiment":"소셜미디어 트렌드 분석…","ai-analysis.script.risk":"역사적 변동성을 계산하는 중...","invite.inviteLink":"초대링크","invite.copy":"링크 복사","invite.copySuccess":"성공적으로 복사되었습니다!","invite.copyFailed":"복사하지 못했습니다. 수동으로 복사하세요.","invite.noInviteLink":"초대 링크가 생성되지 않았습니다.","invite.totalInvites":"누적 초대","invite.totalReward":"누적 보상","invite.rules":"초대 규칙","invite.rule1":"친구를 등록하도록 성공적으로 초대할 때마다 보상을 받게 됩니다.","invite.rule2":"초대한 친구가 첫 번째 거래를 완료하면 추가 보상을 받을 수 있습니다.","invite.rule3":"초대 보상은 귀하의 계정으로 직접 전송됩니다","invite.inviteList":"초대 목록","invite.tasks":"선교 센터","invite.inviteeName":"초대받은 사람","invite.inviteTime":"초대 시간","invite.status":"상태","invite.reward":"보상","invite.active":"활성","invite.inactive":"활성화되지 않음","invite.completed":"완료됨","invite.claimed":"접수됨","invite.pending":"완료 예정","invite.goToTask":"완료하다","invite.claimReward":"보상 청구","invite.verify":"확인 완료","invite.verifySuccess":"확인에 성공했습니다. 작업 완료","invite.verifyNotCompleted":"작업이 아직 완료되지 않았습니다. 먼저 작업을 완료하세요.","invite.verifyFailed":"확인에 실패했습니다. 나중에 다시 시도해 주세요.","invite.claimSuccess":"{reward} QDT를 성공적으로 받았습니다!","invite.claimFailed":"수집하지 못했습니다. 나중에 다시 시도해 주세요.","invite.totalRecords":"총 {total}개 기록","invite.task.twitter.title":"X(트위터)로 리트윗","invite.task.twitter.desc":"공식 트윗을 X(트위터) 계정에 공유하세요","invite.task.youtube.title":"YouTube 채널을 팔로우하세요","invite.task.youtube.desc":"공식 YouTube 채널을 구독하고 팔로우하세요.","invite.task.telegram.title":"텔레그램 그룹에 가입하세요","invite.task.telegram.desc":"공식 텔레그램 커뮤니티 그룹에 가입하세요","invite.task.discord.title":"Discord 서버에 가입하세요","invite.task.discord.desc":"Discord 커뮤니티 서버에 가입하세요",message:"-","layouts.usermenu.dialog.title":"정보","layouts.usermenu.dialog.content":"정말로 로그아웃하시겠습니까?","layouts.userLayout.title":"불확실성 속에서 진실을 찾아라","dashboard.indicator.boundary.message":"Note: The indicator script only computes plots + buy/sell signals. Position sizing, risk, scaling, fees/slippage belong to execution config.","dashboard.indicator.boundary.indicatorRule":"Keep the script to buy/sell only (and set df['buy']/df['sell']). Do NOT implement position management, TP/SL, scaling in the script.","dashboard.indicator.boundary.backtestRule":"Rule: If a bar has a main signal (buy/sell → open/close/reverse), scaling in/out is skipped on the same bar.","dashboard.indicator.guide.title":"Python Indicator & Strategy Development Guide","dashboard.indicator.guide.intro":"This platform supports writing custom technical indicators and trading signals using Python. The system includes built-in pandas and numpy data analysis libraries. You can use standard DataFrame operations to process K-line data and draw charts or mark buy/sell signals.","dashboard.indicator.guide.section1.title":"1. Runtime Environment & Predefined Variables","dashboard.indicator.guide.section1.env":"Your code runs in a browser-based Python environment (Pyodide).","dashboard.indicator.guide.section1.libs":"Pre-installed Libraries","dashboard.indicator.guide.section1.libsDesc":"The following libraries are imported by default, no need to import again:","dashboard.indicator.guide.section1.libsList":"pandas (pd), numpy (np), math, json","dashboard.indicator.guide.section1.data":"Input Data: df","dashboard.indicator.guide.section1.dataDesc":"The system automatically converts current K-line data into a Pandas DataFrame object, variable name is df.","dashboard.indicator.guide.section1.dataColumns":"df contains the following columns (all float type):","dashboard.indicator.guide.section1.dataColumnsList":"time (timestamp, seconds), open, high, low, close, volume","dashboard.indicator.guide.section1.dataNote":"Data index is arranged from old to new (0 is the earliest data, last row is the latest data).","dashboard.indicator.guide.section1.dataIndex":"Important: df index is timestamp (DatetimeIndex), please preserve the index, avoid using .values which loses the index.","dashboard.indicator.guide.section2.title":"2. Parameter Definition","dashboard.indicator.guide.section2.desc":"You can define variables as parameters at the beginning of your code. The system will try to parse statements like variable = value as adjustable parameters.","dashboard.indicator.guide.section2.example":"Parameter Example","dashboard.indicator.guide.section2.exampleCode":"span = 20 or multiplier = 2.0","dashboard.indicator.guide.section3.title":"3. Backtest Signal Setup (Important!)","dashboard.indicator.guide.section3.desc":"If you want your indicator to support backtesting, you must set the following two columns in your code:","dashboard.indicator.guide.section3.backtestRequired":"Required for Backtesting:","dashboard.indicator.guide.section3.backtestBuySignal":"df['buy_signal'] - Boolean Series, True indicates buy signal","dashboard.indicator.guide.section3.backtestSellSignal":"df['sell_signal'] - Boolean Series, True indicates sell signal","dashboard.indicator.guide.section3.backtestExample":"Example:","dashboard.indicator.guide.section3.backtestExampleCode":"df['buy_signal'] = condition_buy
df['sell_signal'] = condition_sell","dashboard.indicator.guide.section3.backtestNote":"Note: Even if you only set output.signals for chart display, you must set these two columns to enable backtesting.","dashboard.indicator.guide.section4.title":"4. Output Requirements: output","dashboard.indicator.guide.section4.desc":"At the end of code execution, you must define a dictionary named output to tell the chart how to display results.","dashboard.indicator.guide.section4.fields":"The output dictionary contains the following fields:","dashboard.indicator.guide.section4.plots":"plots - For drawing lines (e.g., moving averages, RSI)","dashboard.indicator.guide.section4.signals":"signals - For marking buy/sell signals (e.g., arrows, labels)","dashboard.indicator.guide.section4.name":"name - Indicator name (optional)","dashboard.indicator.guide.section4.calculatedVars":"calculatedVars - Calculated variables (optional, for displaying additional information)","dashboard.indicator.guide.section5.title":"5. Plot Configuration (Plots)","dashboard.indicator.guide.section5.desc":"Each object in the plots list represents a line.","dashboard.indicator.guide.section5.table.field":"Field","dashboard.indicator.guide.section5.table.type":"Type","dashboard.indicator.guide.section5.table.required":"Required","dashboard.indicator.guide.section5.table.requiredYes":"Yes","dashboard.indicator.guide.section5.table.requiredNo":"No","dashboard.indicator.guide.section5.table.desc":"Description","dashboard.indicator.guide.section5.table.name":"The name of the indicator line, displayed in the legend","dashboard.indicator.guide.section5.table.data":"Data list, length must match the number of rows in df. Recommended to use series.tolist()","dashboard.indicator.guide.section5.table.color":"Line color (Hex format, e.g. '#ff0000'). If not filled, the system will automatically assign","dashboard.indicator.guide.section5.table.typeDesc":"Chart type, default is 'line'","dashboard.indicator.guide.section5.table.overlay":"Important. True means display on main chart (with K-line), False means display on sub-chart (independent area)","dashboard.indicator.guide.section5.example":"Example: Draw Simple Moving Average (SMA)","dashboard.indicator.guide.section5.exampleCalc":"Calculate SMA","dashboard.indicator.guide.section5.exampleOutput":"Construct Output","dashboard.indicator.guide.section5.exampleOverlay":"Display on main chart","dashboard.indicator.guide.section6.title":"6. Signal Markers (Signals)","dashboard.indicator.guide.section6.desc":"signals are used to mark buy/sell points on specific K-lines through icons or text. Note: This is only for chart display. The backtest system uses df['buy_signal'] and df['sell_signal'].","dashboard.indicator.guide.section6.table.type":"Signal type: 'buy' (buy, marked below K-line) or 'sell' (sell, marked above K-line)","dashboard.indicator.guide.section6.table.data":"Signal data list. Fill price value at signal positions, fill None (or np.nan) at non-signal positions","dashboard.indicator.guide.section6.table.text":'Text displayed on the label (e.g. "B", "S", "Buy", "Sell")',"dashboard.indicator.guide.section6.table.color":"Marker color","dashboard.indicator.guide.section6.hint":"The system automatically handles positioning.","dashboard.indicator.guide.section6.buy":"Markers will be automatically positioned below the Low of the current K-line","dashboard.indicator.guide.section6.sell":"Markers will be automatically positioned above the High of the current K-line","dashboard.indicator.guide.section6.example":"Example: Draw Buy/Sell Signals","dashboard.indicator.guide.section6.exampleInit":"Initialize signal list, fill all with None","dashboard.indicator.guide.section6.exampleLogic":"Simple logic: mark buy when close price is greater than open price","dashboard.indicator.guide.section6.exampleNote":"In actual logic, please use loops or vectorized operations","dashboard.indicator.guide.section6.examplePrice":"Record price","dashboard.indicator.guide.section6.exampleText":"Buy","dashboard.indicator.guide.section7.title":"7. Complete Code Examples","dashboard.indicator.guide.section7.exampleA":"Example A: Dual EMA Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleACode":'# 1. Calculate indicators
df[\'ema_fast\'] = df[\'close\'].ewm(span=5, adjust=False).mean()
df[\'ema_slow\'] = df[\'close\'].ewm(span=13, adjust=False).mean()

# 2. Calculate crossover signals
cross_up = (df[\'ema_fast\'] > df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) <= df[\'ema_slow\'].shift(1))
cross_down = (df[\'ema_fast\'] < df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) >= df[\'ema_slow\'].shift(1))

# 3. 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = cross_up
df[\'close_long\'] = cross_down
df[\'open_short\'] = cross_down
df[\'close_short\'] = cross_up

# 4. Generate signal data for chart display
buy_signals = [df[\'low\'].iloc[i] * 0.995 if cross_up.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if cross_down.iloc[i] else None for i in range(len(df))]

# 5. Build output
output = {
"name": "Dual EMA Strategy",
"plots": [
{"name": "EMA 5", "data": df[\'ema_fast\'].tolist(), "color": "#FF6B6B", "overlay": True},
{"name": "EMA 13", "data": df[\'ema_slow\'].tolist(), "color": "#4ECDC4", "overlay": True}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section7.exampleB":"Example B: Bollinger Bands - Chart Display Only","dashboard.indicator.guide.section7.exampleBCode":'# Calculate Bollinger Bands (chart display only, no backtesting)
length = 20
mult = 2.0
df[\'sma\'] = df[\'close\'].rolling(length).mean()
df[\'std\'] = df[\'close\'].rolling(length).std()
df[\'upper\'] = df[\'sma\'] + mult * df[\'std\']
df[\'lower\'] = df[\'sma\'] - mult * df[\'std\']

output = {
"name": "Bollinger Bands",
"plots": [
{"name": "Upper", "data": df[\'upper\'].tolist(), "color": "#FF5252", "overlay": True},
{"name": "Middle", "data": df[\'sma\'].tolist(), "color": "#2196F3", "overlay": True},
{"name": "Lower", "data": df[\'lower\'].tolist(), "color": "#00E676", "overlay": True}
]
}',"dashboard.indicator.guide.section7.exampleC":"Example C: RSI Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleCCode":'# Calculate RSI
delta = df[\'close\'].diff()
up = delta.clip(lower=0)
down = -1 * delta.clip(upper=0)
ema_up = up.ewm(com=13, adjust=False).mean()
ema_down = down.ewm(com=13, adjust=False).mean()
rs = ema_up / ema_down
df[\'rsi\'] = 100 - (100 / (1 + rs))

# Generate trading signals
buy_condition = df[\'rsi\'] < 30 # Oversold buy
sell_condition = df[\'rsi\'] > 70 # Overbought sell

# 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = buy_condition
df[\'close_long\'] = sell_condition
df[\'open_short\'] = sell_condition
df[\'close_short\'] = buy_condition

# Generate chart signals
buy_signals = [df[\'low\'].iloc[i] * 0.995 if buy_condition.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if sell_condition.iloc[i] else None for i in range(len(df))]

output = {
"name": "RSI Strategy",
"plots": [
{"name": "RSI", "data": df[\'rsi\'].tolist(), "color": "#9C27B0", "overlay": False},
{"name": "Overbought", "data": [70] * len(df), "color": "#FF5252", "style": "dashed", "overlay": False},
{"name": "Oversold", "data": [30] * len(df), "color": "#00E676", "style": "dashed", "overlay": False}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section6.param":"Parameters","dashboard.indicator.guide.section6.calc":"Calculate","dashboard.indicator.guide.section6.output":"Output","dashboard.indicator.guide.section6.generate":"Generate signal data (initialize with None)","dashboard.indicator.guide.section6.subchart":"Display on sub-chart","dashboard.indicator.guide.section8.title":"8. Frequently Asked Questions (FAQ)","dashboard.indicator.guide.section8.q1":"Q: Why can't my indicator be backtested?","dashboard.indicator.guide.section8.a1":"A: The backtest system requires NEW signal columns: df['open_long'], df['close_long'], df['open_short'], df['close_short'] (boolean). Even if you set output.signals for chart display, you must set these columns to enable backtesting.","dashboard.indicator.guide.section8.q2":"Q: Data length mismatch?","dashboard.indicator.guide.section8.a2":"A: The data list in plots and signals must have exactly the same length as the K-line data. If you use df['xxx'].tolist(), there is usually no problem.","dashboard.indicator.guide.section8.q3":"Q: How to handle NaN (empty values)?","dashboard.indicator.guide.section8.a3":"A: Pandas calculations (such as rolling mean) will produce NaN at the beginning. The system will automatically convert NaN to null for chart rendering. You don't need to manually clean it, but if you need specific logic, you can use df.fillna(0) or other methods.","dashboard.indicator.guide.section8.q4":"Q: Index mismatch causing all signals to be NaN?","dashboard.indicator.guide.section8.a4":"A: Please ensure you preserve the original df index (timestamp). Avoid using .values to create new Series. Use columns directly like df['close'] for operations.","dashboard.indicator.guide.section8.q5":"Q: Can I use third-party network libraries?","dashboard.indicator.guide.section8.a5":"A: No. The runtime environment is a browser sandbox and cannot use libraries like requests to request external APIs, nor can it install additional pip packages. Limited to built-in libraries such as pandas, numpy, math, json.","dashboard.indicator.guide.section8.q6":"Q: How to debug code?","dashboard.indicator.guide.section8.a6":"A: If the chart does not display indicators, it is usually because the Python code has an error. Please check for syntax errors or array index out of bounds. It is recommended to debug the algorithm logic in a local Python environment first, then copy it in.","dashboard.indicator.guide.section8.q7":"Q: Backtest shows 0 signals?","dashboard.indicator.guide.section8.a7":"A: Please check the data type of df['open_long']/df['close_long']/df['open_short']/df['close_short']. They should be boolean (True/False), not numeric. Use condition.fillna(False).astype(bool) to ensure correct type.","dashboard.indicator.backtest.commissionHint":"Charged on notional value (incl. leverage) per trade; both entry & exit are deducted from balance.","dashboard.indicator.backtest.historyTitle":"Backtest History","dashboard.indicator.backtest.historyRefresh":"Refresh","dashboard.indicator.backtest.historyView":"View","dashboard.indicator.backtest.historyNoData":"No backtest history","dashboard.indicator.backtest.historyUseCurrent":"Only current symbol/timeframe","dashboard.indicator.backtest.historyFilterSymbol":"Symbol","dashboard.indicator.backtest.historyFilterTimeframe":"Timeframe","dashboard.indicator.backtest.historyApply":"Apply filters","dashboard.indicator.backtest.historyAIAnalyze":"AI Analyze","dashboard.indicator.backtest.historyAIAnalyzeTitle":"AI Suggestions","dashboard.indicator.backtest.historyNoAIResult":"No AI analysis result","dashboard.indicator.backtest.historyRunId":"Run ID","dashboard.indicator.backtest.historyCreatedAt":"Time","dashboard.indicator.backtest.historyRange":"Range","dashboard.indicator.backtest.historyStatus":"Status","dashboard.indicator.backtest.historyStatusSuccess":"Success","dashboard.indicator.backtest.historyStatusFailed":"Failed","dashboard.indicator.backtest.historyActions":"Actions","trading-assistant.exchange.ipWhitelistTip":"Please add the following IPs to the whitelist in your exchange API settings:","signal-robot.title":"Signal Robot Console","signal-robot.createBot":"Create New Bot","signal-robot.search.nameOrSymbol":"Name/Symbol","signal-robot.search.placeholder":"Search bot name or symbol","signal-robot.search.status":"Status","signal-robot.search.statusAll":"All","signal-robot.search.statusRunning":"Running","signal-robot.search.statusPaused":"Paused","signal-robot.search.query":"Query","signal-robot.search.reset":"Reset","signal-robot.table.botName":"Bot Name","signal-robot.table.symbolTimeframe":"Symbol/Timeframe","signal-robot.table.triggerStrategy":"Trigger Strategy","signal-robot.table.notificationChannels":"Notification Channels","signal-robot.table.status":"Status","signal-robot.table.action":"Action","signal-robot.table.triggerConditions":"{count} trigger conditions","signal-robot.table.monitoring":"Monitoring","signal-robot.table.paused":"Paused","signal-robot.table.edit":"Edit","signal-robot.table.pause":"Pause","signal-robot.table.start":"Start","signal-robot.table.delete":"Delete","signal-robot.table.deleteConfirm":"Are you sure you want to delete this bot?","signal-robot.table.deleteSuccess":"Deleted successfully","signal-robot.table.startSuccess":"Bot started","signal-robot.table.pauseSuccess":"Bot paused","signal-robot.channel.telegram":"Telegram","signal-robot.channel.discord":"Discord","signal-robot.channel.email":"Email","signal-robot.channel.webhook":"Webhook","signal-robot.channel.browser":"Browser Push","signal-robot.modal.createTitle":"Create New Signal Robot","signal-robot.modal.editTitle":"Edit Signal Robot","signal-robot.modal.step.basic":"Basic Settings","signal-robot.modal.step.entry":"Entry Strategy","signal-robot.modal.step.position":"Position Management","signal-robot.modal.step.risk":"Risk Control","signal-robot.modal.step.notify":"Notification Config","signal-robot.modal.prev":"Previous","signal-robot.modal.next":"Next","signal-robot.modal.preview":"Preview Backtest","signal-robot.modal.complete":"Complete & Run","signal-robot.modal.saveSuccess":"Saved successfully","signal-robot.modal.previewDeveloping":"Preview feature is under development...","signal-robot.modal.basicInfoRequired":"Please complete basic information","signal-robot.basic.alert":"Set basic information for the bot","signal-robot.basic.title":"Basic Information","signal-robot.basic.botName":"Bot Name","signal-robot.basic.botNamePlaceholder":"e.g.: BTC SuperTrend Strategy","signal-robot.basic.symbol":"Trading Pair","signal-robot.basic.symbolPlaceholder":"Select from watchlist","signal-robot.basic.noWatchlist":"No watchlist items, please add in market page first","signal-robot.basic.timeframe":"K-Line Period","signal-robot.basic.timeframe15m":"15 Minutes","signal-robot.basic.timeframe30m":"30 Minutes","signal-robot.basic.timeframe1h":"1 Hour","signal-robot.basic.timeframe4h":"4 Hours","signal-robot.basic.timeframe1d":"1 Day","signal-robot.basic.autoNameSuggestion":"{symbol} Signal Robot","signal-robot.entry.alert":"Trigger entry signal when all conditions below are met","signal-robot.entry.condition":"Condition {index}","signal-robot.entry.indicator":"Indicator","signal-robot.entry.indicatorSupertrend":"SuperTrend","signal-robot.entry.indicatorEma":"EMA (Exponential Moving Average)","signal-robot.entry.indicatorRsi":"RSI (Relative Strength Index)","signal-robot.entry.indicatorMacd":"MACD","signal-robot.entry.indicatorBollinger":"Bollinger Bands","signal-robot.entry.atrPeriod":"ATR Period","signal-robot.entry.multiplier":"Multiplier","signal-robot.entry.triggerSignal":"Trigger Signal","signal-robot.entry.signalTrendBullish":"Trend Bullish","signal-robot.entry.signalTrendBearish":"Trend Bearish","signal-robot.entry.signalIsUptrend":"Is Uptrend","signal-robot.entry.signalIsDowntrend":"Is Downtrend","signal-robot.entry.period":"Period","signal-robot.entry.compareCondition":"Compare Condition","signal-robot.entry.priceAbove":"Price > EMA (Price Above)","signal-robot.entry.priceBelow":"Price < EMA (Price Below)","signal-robot.entry.crossUp":"Price Crosses Above EMA (Golden Cross)","signal-robot.entry.crossDown":"Price Crosses Below EMA (Death Cross)","signal-robot.entry.compare":"Compare","signal-robot.entry.greaterThan":"Greater Than","signal-robot.entry.lessThan":"Less Than","signal-robot.entry.crossUpShort":"Cross Up","signal-robot.entry.crossDownShort":"Cross Down","signal-robot.entry.threshold":"Threshold","signal-robot.entry.selectIndicator":"Please select an indicator to configure parameters","signal-robot.entry.addCondition":"Add Condition","signal-robot.position.alert":"Configure initial position size, leverage and pyramiding rules","signal-robot.position.basicTitle":"Basic Position Management","signal-robot.position.initialSize":"Initial Size (Capital %)","signal-robot.position.initialSizeHint":"Recommended 5% - 20%","signal-robot.position.leverage":"Leverage","signal-robot.position.leverageHint":"Please ensure your exchange account supports this leverage","signal-robot.position.maxPyramiding":"Max Pyramiding Times","signal-robot.position.maxPyramidingHint":"0 means no pyramiding","signal-robot.position.pyramidingTitle":"Pyramiding Rules","signal-robot.position.pyramidingEnabled":"Enabled","signal-robot.position.pyramidingDisabled":"Disabled","signal-robot.position.pyramidingCondition":"Pyramiding Trigger Condition","signal-robot.position.priceRisePct":"Price Rises (Long) / Falls (Short)","signal-robot.position.profitPct":"Profit Reaches","signal-robot.position.triggerThreshold":"Trigger Threshold (%)","signal-robot.position.triggerThresholdHint":"e.g. 3%: add position once every 3% rise","signal-robot.position.addSize":"Single Add Size (Capital %)","signal-robot.position.pyramidingDisabledHint":"Pyramiding disabled, only initial position will be executed","signal-robot.risk.alert":"Configure take profit, stop loss and exit rules","signal-robot.risk.stopLossTitle":"Stop Loss","signal-robot.risk.stopLossEnabled":"Enabled","signal-robot.risk.stopLossDisabled":"Disabled","signal-robot.risk.stopLossType":"Stop Loss Type","signal-robot.risk.stopLossFixedPct":"Fixed Percentage","signal-robot.risk.stopLossAtrMultiplier":"ATR Multiplier","signal-robot.risk.stopLossValue":"Value","signal-robot.risk.stopLossFixedHint":"e.g. 2%: stop loss when loss reaches 2%","signal-robot.risk.stopLossAtrHint":"e.g. 2.0: stop loss when price touches ATR*2.0","signal-robot.risk.stopLossDisabledHint":"Stop loss disabled (high risk)","signal-robot.risk.trailingStopTitle":"Trailing Stop","signal-robot.risk.activationProfit":"Activation Profit (%)","signal-robot.risk.activationProfitHint":"Start trailing when profit reaches this level","signal-robot.risk.callbackPct":"Callback (%)","signal-robot.risk.callbackPctHint":"Trigger take profit when price falls from peak by this percentage","signal-robot.risk.trailingStopDisabledHint":"Trailing stop disabled","signal-robot.risk.otherExitTitle":"Other Exit Rules","signal-robot.risk.signalExit":"Allow Signal Exit","signal-robot.risk.signalExitHint":"Close position immediately when reverse signal appears (e.g. close long when short signal appears)","signal-robot.notify.alert":"Configure notification methods when signal is triggered","signal-robot.notify.channelTitle":"Notification Channels","signal-robot.notify.discordWebhook":"Discord Webhook","signal-robot.notify.genericWebhook":"Generic Webhook","signal-robot.notify.webhookUrl":"Webhook URL","signal-robot.notify.webhookUrlPlaceholder":"https://example.com/webhook","signal-robot.notify.discordUrl":"Discord URL","signal-robot.notify.discordUrlPlaceholder":"https://discord.com/api/webhooks/...","signal-robot.operator.greaterThan":"Greater Than","signal-robot.operator.lessThan":"Less Than","signal-robot.operator.equal":"Equal","signal-robot.operator.goldenCross":"Golden Cross","signal-robot.operator.deathCross":"Death Cross","signal-robot.operator.increaseBy":"Increase By","signal-robot.operator.decreaseBy":"Decrease By","signal-robot.indicator.price":"Price","signal-robot.indicator.rsi":"RSI","signal-robot.indicator.kdjK":"KDJ(K)","signal-robot.indicator.kdjJ":"KDJ(J)","signal-robot.indicator.macd":"MACD","signal-robot.indicator.macdHist":"MACD Histogram","signal-robot.indicator.bollingerUp":"Bollinger Upper","signal-robot.indicator.bollingerLow":"Bollinger Lower","signal-robot.indicator.volume":"Volume","signal-robot.indicator.changePct1h":"1H Change %","signal-robot.indicator.changePct24h":"24H Change %","signal-robot.indicator.signalLine":"Signal Line","settings.group.agent_memory":"메모리/리플렉션 설정","settings.group.reflection_worker":"자동 리플렉션 검증 워커","settings.field.ENABLE_AGENT_MEMORY":"에이전트 메모리 사용","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"벡터 검색 사용(로컬)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"임베딩 차원","settings.field.AGENT_MEMORY_TOP_K":"Top-K 조회 개수","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"후보 윈도우 크기","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"시간 감쇠 반감기(일)","settings.field.AGENT_MEMORY_W_SIM":"유사도 가중치","settings.field.AGENT_MEMORY_W_RECENCY":"시간 가중치","settings.field.AGENT_MEMORY_W_RETURNS":"수익 가중치","settings.field.ENABLE_REFLECTION_WORKER":"자동 검증 사용","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"검증 주기(초)","profile.notifications.title":"알림 설정","profile.notifications.hint":"기본 알림 방법을 설정하세요. 자산 모니터링 및 알림 생성 시 자동으로 사용됩니다","profile.notifications.defaultChannels":"기본 알림 채널","profile.notifications.browser":"앱 내 알림","profile.notifications.email":"이메일","profile.notifications.phone":"SMS","profile.notifications.telegramBotToken":"Telegram Bot Token","profile.notifications.telegramBotTokenPlaceholder":"Telegram Bot Token을 입력하세요","profile.notifications.telegramBotTokenHint":"@BotFather에서 봇을 만들어 Token을 받으세요","profile.notifications.telegramChatId":"Telegram Chat ID","profile.notifications.telegramPlaceholder":"Telegram Chat ID를 입력하세요 (예: 123456789)","profile.notifications.telegramHint":"@userinfobot에 /start를 보내 Chat ID를 받으세요","profile.notifications.notifyEmail":"알림 이메일","profile.notifications.emailPlaceholder":"알림을 받을 이메일 주소","profile.notifications.emailHint":"기본값은 계정 이메일이며 다른 이메일도 설정 가능","profile.notifications.phonePlaceholder":"전화번호를 입력하세요 (예: +821012345678)","profile.notifications.phoneHint":"관리자가 Twilio 서비스를 설정해야 합니다","profile.notifications.discordWebhook":"Discord Webhook","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"Discord 서버 설정에서 Webhook을 생성하세요","profile.notifications.webhookUrl":"Webhook URL","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"커스텀 Webhook URL, POST JSON으로 알림 전송","profile.notifications.webhookToken":"Webhook Token (선택)","profile.notifications.webhookTokenPlaceholder":"요청 인증용 Bearer Token","profile.notifications.webhookTokenHint":"Authorization: Bearer Token으로 Webhook에 전송","profile.notifications.testBtn":"테스트 알림 보내기","profile.notifications.saveSuccess":"알림 설정이 저장되었습니다","profile.notifications.selectChannel":"최소 하나의 알림 채널을 선택하세요","profile.notifications.fillTelegramToken":"Telegram Bot Token을 입력하세요","profile.notifications.fillTelegram":"Telegram Chat ID를 입력하세요","profile.notifications.fillEmail":"알림 이메일을 입력하세요","profile.notifications.testSent":"테스트 알림이 전송되었습니다. 알림 채널을 확인하세요"},f=(0,e.A)((0,e.A)({},p),y)}}]); \ No newline at end of file diff --git a/frontend/dist/js/lang-ko-KR-legacy.f534f0aa.js b/frontend/dist/js/lang-ko-KR-legacy.f534f0aa.js deleted file mode 100644 index 08dfafd..0000000 --- a/frontend/dist/js/lang-ko-KR-legacy.f534f0aa.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[840],{5505:function(a,t,i){i.d(t,{default:function(){return f}});var e=i(57888),s={items_per_page:"/ 쪽",jump_to:"이동하기",jump_to_confirm:"확인하다",page:"",prev_page:"이전 페이지",next_page:"다음 페이지",prev_5:"이전 5 페이지",next_5:"다음 5 페이지",prev_3:"이전 3 페이지",next_3:"다음 3 페이지"},o=i(85505),r={today:"오늘",now:"현재 시각",backToToday:"오늘로 돌아가기",ok:"확인",clear:"지우기",month:"월",year:"년",timeSelect:"시간 선택",dateSelect:"날짜 선택",monthSelect:"달 선택",yearSelect:"연 선택",decadeSelect:"연대 선택",yearFormat:"YYYY년",dateFormat:"YYYY-MM-DD",dayFormat:"Do",dateTimeFormat:"YYYY-MM-DD HH:mm:ss",monthBeforeYear:!1,previousMonth:"이전 달 (PageUp)",nextMonth:"다음 달 (PageDown)",previousYear:"이전 해 (Control + left)",nextYear:"다음 해 (Control + right)",previousDecade:"이전 연대",nextDecade:"다음 연대",previousCentury:"이전 세기",nextCentury:"다음 세기"},n={placeholder:"날짜 선택"},d=n,l={lang:(0,o.A)({placeholder:"날짜 선택",rangePlaceholder:["시작일","종료일"]},r),timePickerLocale:(0,o.A)({},d)},c=l,g=c,b={locale:"ko",Pagination:s,DatePicker:c,TimePicker:d,Calendar:g,Table:{filterTitle:"필터 메뉴",filterConfirm:"확인",filterReset:"초기화",selectAll:"모두 선택",selectInvert:"선택 반전"},Modal:{okText:"확인",cancelText:"취소",justOkText:"확인"},Popconfirm:{okText:"확인",cancelText:"취소"},Transfer:{searchPlaceholder:"여기에 검색하세요",itemUnit:"개",itemsUnit:"개"},Upload:{uploading:"업로드 중...",removeFile:"파일 삭제",uploadError:"업로드 실패",previewFile:"파일 미리보기",downloadFile:"파일 다운로드"},Empty:{description:"데이터 없음"}},m=b,h=i(63164),u=i.n(h),p={antLocale:m,momentName:"ko",momentLocale:u()},y={submit:"제출",save:"저장","submit.ok":"제출 성공","save.ok":"성공적으로 저장되었습니다","menu.welcome":"환영합니다","menu.home":"홈페이지","menu.dashboard":"대시보드","menu.dashboard.indicator":"지표분석","menu.dashboard.community":"지표 커뮤니티","menu.dashboard.analysis":"AI 분석","menu.dashboard.tradingAssistant":"트레이딩 어시스턴트","menu.dashboard.aiTradingAssistant":"AI 트레이딩 도우미","menu.dashboard.signalRobot":"시그널 로봇","menu.dashboard.monitor":"모니터링 페이지","menu.dashboard.workplace":"작업대","menu.form":"양식 페이지","menu.form.basic-form":"기본 형태","menu.form.step-form":"단계별 양식","menu.form.step-form.info":"단계별 양식(이체 정보 입력)","menu.form.step-form.confirm":"단계별 양식(이체정보 확인)","menu.form.step-form.result":"단계별 양식(완료)","menu.form.advanced-form":"고급 양식","menu.list":"목록 페이지","menu.list.table-list":"문의 양식","menu.list.basic-list":"표준 목록","menu.list.card-list":"카드 목록","menu.list.search-list":"검색 목록","menu.list.search-list.articles":"검색 목록(기사)","menu.list.search-list.projects":"검색 목록(프로젝트)","menu.list.search-list.applications":"검색 목록(앱)","menu.profile":"세부정보 페이지","menu.profile.basic":"기본 세부정보 페이지","menu.profile.advanced":"고급 세부정보 페이지","menu.result":"결과 페이지","menu.result.success":"성공 페이지","menu.result.fail":"실패 페이지","menu.exception":"예외 페이지","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"트리거 오류","menu.account":"개인 페이지","menu.account.center":"개인 센터","menu.account.settings":"개인 설정","menu.account.trigger":"트리거 오류","menu.account.logout":"로그아웃","menu.wallet":"내 지갑","menu.docs":"문서 센터","menu.docs.detail":"문서 세부정보","menu.header.refreshPage":"페이지 새로 고침","menu.invite.friends":"친구 초대","app.setting.pagestyle":"전반적인 스타일 설정","app.setting.pagestyle.light":"밝은 메뉴 스타일","app.setting.pagestyle.dark":"어두운 메뉴 스타일","app.setting.pagestyle.realdark":"다크 모드","app.setting.themecolor":"테마 색상","app.setting.navigationmode":"탐색 모드","app.setting.sidemenu.nav":"사이드바 탐색","app.setting.topmenu.nav":"상단 표시줄 탐색","app.setting.content-width":"콘텐츠 영역 너비","app.setting.content-width.tooltip":"이 설정은 [상단 표시줄 탐색]인 경우에만 유효합니다.","app.setting.content-width.fixed":"고정","app.setting.content-width.fluid":"스트리밍","app.setting.fixedheader":"고정 헤더","app.setting.fixedheader.tooltip":"헤더 고정 시 구성 가능","app.setting.autoHideHeader":"스크롤할 때 헤더 숨기기","app.setting.fixedsidebar":"사이드 메뉴 고정","app.setting.sidemenu":"사이드 메뉴 레이아웃","app.setting.topmenu":"상단 메뉴 레이아웃","app.setting.othersettings":"기타 설정","app.setting.weakmode":"색약 모드","app.setting.multitab":"멀티탭 모드","app.setting.copy":"설정 복사","app.setting.loading":"테마 로드 중","app.setting.copyinfo":"설정을 성공적으로 복사했습니다. src/config/defaultSettings.js","app.setting.copy.success":"복사 완료","app.setting.copy.fail":"복사 실패","app.setting.theme.switching":"테마 변경!","app.setting.production.hint":"구성 표시줄은 개발 환경에서 미리 보기에만 사용되며 프로덕션 환경에서는 표시되지 않습니다. 구성 파일을 수동으로 복사하고 수정하십시오.","app.setting.themecolor.daybreak":"새벽 파란색(기본값)","app.setting.themecolor.dust":"황혼","app.setting.themecolor.volcano":"화산","app.setting.themecolor.sunset":"일몰","app.setting.themecolor.cyan":"밍칭","app.setting.themecolor.green":"오로라 그린","app.setting.themecolor.geekblue":"긱 블루","app.setting.themecolor.purple":"장쯔(Jiang Zi)","app.setting.tooltip":"페이지 설정","user.login.userName":"사용자 이름","user.login.password":"비밀번호","user.login.username.placeholder":"계정: 관리자","user.login.password.placeholder":"비밀번호: admin 또는 ant.design","user.login.message-invalid-credentials":"로그인에 실패했습니다. 이메일과 인증 코드를 확인하세요.","user.login.message-invalid-verification-code":"인증코드 오류","user.login.tab-login-credentials":"계정 비밀번호 로그인","user.login.tab-login-email":"이메일 로그인","user.login.tab-login-mobile":"휴대폰번호 로그인","user.login.captcha.placeholder":"그래픽 인증 코드를 입력하세요.","user.login.mobile.placeholder":"휴대전화번호","user.login.mobile.verification-code.placeholder":"인증코드","user.login.email.placeholder":"이메일 주소를 입력해주세요","user.login.email.verification-code.placeholder":"인증번호를 입력해주세요","user.login.email.sending":"인증코드가 전송되는 중입니다...","user.login.email.send-success-title":"팁","user.login.email.send-success":"인증코드가 성공적으로 전송되었습니다. 이메일을 확인해 주세요.","user.login.sms.send-success":"인증번호가 성공적으로 전송되었습니다. 문자 메시지를 확인하세요.","user.login.remember-me":"자동 로그인","user.login.forgot-password":"비밀번호를 잊으셨나요?","user.login.sign-in-with":"기타 로그인 방법","user.login.signup":"계정 등록","user.login.login":"로그인","user.register.register":"등록","user.register.email.placeholder":"이메일","user.register.password.placeholder":"6자 이상 입력해주세요. 쉽게 추측할 수 있는 비밀번호는 사용하지 마세요.","user.register.password.popover-message":"6자 이상 입력해주세요. 쉽게 추측할 수 있는 비밀번호는 사용하지 마세요.","user.register.confirm-password.placeholder":"비밀번호 확인","user.register.get-verification-code":"인증 코드 받기","user.register.sign-in":"기존 계정을 사용하여 로그인","user.register-result.msg":"귀하의 계정: {email} 등록이 완료되었습니다.","user.register-result.activation-email":"활성화 이메일이 귀하의 사서함으로 전송되었으며 24시간 동안 유효합니다. 귀하의 이메일에 즉시 로그인하고 이메일에 있는 링크를 클릭하여 계정을 활성화하십시오.","user.register-result.back-home":"홈페이지로 돌아가기","user.register-result.view-mailbox":"우편함을 확인하세요","user.email.required":"이메일 주소를 입력해주세요!","user.email.wrong-format":"이메일 주소 형식이 잘못되었습니다!","user.userName.required":"계정 이름이나 이메일 주소를 입력하세요","user.password.required":"비밀번호를 입력해주세요!","user.password.twice.msg":"두 번 입력한 비밀번호가 일치하지 않습니다!","user.password.strength.msg":"비밀번호가 충분히 강력하지 않습니다.","user.password.strength.strong":"힘: 강한","user.password.strength.medium":"강도: 중간","user.password.strength.low":"강도: 낮음","user.password.strength.short":"강도: 너무 짧음","user.confirm-password.required":"비밀번호를 확인해 주세요!","user.phone-number.required":"정확한 휴대폰번호를 입력해주세요","user.phone-number.wrong-format":"휴대폰 번호 형식이 잘못되었습니다!","user.verification-code.required":"인증번호를 입력해주세요!","user.captcha.required":"그래픽 인증코드를 입력해주세요!","user.login.infos":"QuantDinger는 AI 멀티에이전트 주식 분석 보조 도구로 증권 투자 컨설팅 자격이 없습니다. 플랫폼 내 모든 분석 결과, 점수, 참고 의견은 과거 데이터를 기반으로 AI에 의해 자동으로 생성되며 학습, 연구 및 기술 교류에만 사용되며 투자 조언이나 의사 결정 기반을 구성하지 않습니다. 주식투자에는 시장리스크, 유동성리스크, 정책리스크 등 다양한 리스크가 수반되며, 이로 인해 원금 손실이 발생할 수 있습니다. 사용자는 자신의 위험 허용 범위에 따라 독립적인 결정을 내려야 하며, 이 도구의 사용으로 인해 발생하는 모든 투자 행위 및 결과는 사용자가 부담해야 합니다. 시장은 위험하므로 투자에 신중해야 합니다.","user.login.tab-login-web3":"Web3 로그인","user.login.web3.tip":"지갑을 이용한 서명 로그인","user.login.web3.connect":"지갑을 연결하고 로그인하세요","user.login.web3.no-wallet":"지갑이 감지되지 않음","user.login.web3.no-address":"지갑 주소를 가져오지 못했습니다.","user.login.web3.nonce-failed":"난수를 가져오지 못했습니다.","user.login.web3.verify-failed":"서명 확인 실패","user.login.web3.success":"로그인 성공","user.login.web3.failed":"지갑 로그인 실패","nav.no_wallet":"지갑이 감지되지 않음","nav.copy":"복사","nav.copy_success":"성공적으로 복사되었습니다","user.login.oauth.google":"Google로 로그인","user.login.oauth.github":"GitHub로 로그인","user.login.oauth.loading":"승인 페이지로 리디렉션 중...","user.login.oauth.failed":"OAuth 로그인 실패","user.login.oauth.get-url-failed":"승인 링크를 얻지 못했습니다.","user.login.subtitle":"글로벌 시장에 대한 정량적 통찰력 확보","user.login.legal.title":"법적 고지 사항","user.login.legal.view":"법적 고지사항 보기","user.login.legal.collapse":"법적 면책조항 접기","user.login.legal.agree":"법적 고지 사항을 읽었으며 이에 동의합니다.","user.login.legal.required":"먼저 법적 고지 사항을 읽고 확인하십시오.","user.login.legal.content":"QuantDinger는 AI 멀티에이전트 주식 분석 보조 도구로 증권 투자 컨설팅 자격이 없습니다. 플랫폼 내 모든 분석 결과, 등급, 참고 의견은 과거 데이터를 기반으로 AI에 의해 자동으로 생성되며 학습, 연구 및 기술 교류에만 사용되며 투자 조언이나 의사 결정 기반을 구성하지 않습니다. 주식투자에는 시장리스크, 유동성리스크, 정책리스크 등 다양한 리스크가 수반되며, 이로 인해 원금 손실이 발생할 수 있습니다. 사용자는 자신의 위험 허용 범위에 따라 독립적인 결정을 내려야 하며, 이 도구의 사용으로 인해 발생하는 모든 투자 행위 및 결과는 사용자가 부담해야 합니다. 시장은 위험하므로 투자에 신중해야 합니다.","user.login.privacy.title":"사용자 개인 정보 보호 정책","user.login.privacy.view":"사용자 개인 정보 보호 정책 보기","user.login.privacy.collapse":"사용자 개인정보 보호 약관 닫기","user.login.privacy.content":"우리는 귀하의 개인 정보 보호와 데이터 보호를 중요하게 생각합니다. 1) 수집 범위 : 기능 구현에 꼭 필요한 정보(이메일, 휴대전화번호, 지역번호, Web3 지갑 주소 등)와 필수 로그, 기기정보만 수집합니다. 2) 이용 목적: 계정 로그인 및 보안 확인, 서비스 기능 제공, 문제 해결 및 규정 준수 요구 사항. 3) 저장 및 보안: 데이터는 암호화되어 저장되며, 무단 접근, 공개 또는 손실을 방지하기 위해 필요한 권한 및 접근 제어 조치가 취해집니다. 4) 제3자와의 공유: 법률 및 규정에 의해 요구되거나 서비스 수행에 필요한 경우를 제외하고, 귀하의 개인정보는 제3자와 공유되지 않습니다. 제3자 서비스(예: 지갑, SMS 서비스 제공업체)가 관련된 경우 해당 기능을 구현하는 데 필요한 최소한의 범위에서만 처리됩니다. 5) 쿠키/로컬 저장소: 로그인 상태 및 필요한 세션 유지 관리(예: 토큰, PHPSESSID)에 사용되며 브라우저에서 이를 삭제하거나 제한할 수 있습니다. 6) 개인권리 : 귀하는 법령에 따른 조회, 정정, 삭제, 동의철회 등의 권리를 행사할 수 있습니다. 7) 변경 및 공지: 본 약관이 업데이트되면 페이지에 눈에 띄게 표시됩니다. 본 서비스를 계속 이용하시면 업데이트된 내용을 읽고 동의하신 것으로 간주됩니다. 본 약관 또는 그에 대한 업데이트에 동의하지 않는 경우 서비스 사용을 중단하고 당사에 문의하십시오.","account.basicInfo":"기본정보","account.id":"사용자 ID","account.username":"사용자 이름","account.nickname":"닉네임","account.email":"이메일","account.mobile":"휴대전화번호","account.web3address":"지갑 주소","account.pid":"추천인 ID","account.level":"사용자 수준","account.money":"균형","account.qdtBalance":"QDT 잔액","account.score":"포인트","account.createtime":"등록 시간","account.inviteLink":"초대링크","account.recharge":"재충전","account.rechargeTip":"충전하려면 WeChat 또는 Alipay를 사용하여 아래 QR 코드를 스캔하세요.","account.qrCodePlaceholder":"QR 코드 자리 표시자(에뮬레이션)","account.rechargeAmount":"충전금액","account.enterAmount":"충전금액을 입력해주세요","account.rechargeHint":"최소 입금액: 1 QDT","account.confirmRecharge":"충전 확인","account.enterValidAmount":"유효한 충전 금액을 입력하세요.","account.rechargeSuccess":"재충전 성공! {amount} QDT 입금","account.settings.menuMap.basic":"기본 설정","account.settings.menuMap.security":"보안 설정","account.settings.menuMap.notification":"새 메시지 알림","account.settings.menuMap.moneyLog":"기금 세부정보","account.moneyLog.empty":"아직 펀드 세부정보가 없습니다.","account.moneyLog.total":"총 {total}개 기록","account.moneyLog.type.purchase":"매수 지표","account.moneyLog.type.recharge":"재충전","account.moneyLog.type.refund":"환불","account.moneyLog.type.reward":"보상","account.moneyLog.type.income":"지표소득","account.moneyLog.type.commission":"플랫폼 취급 수수료","wallet.balance":"QDT 잔액","wallet.recharge":"재충전","wallet.withdraw":"현금 인출","wallet.filter":"필터","wallet.reset":"재설정","wallet.totalRecharge":"누적 충전","wallet.totalWithdraw":"누적 출금","wallet.totalIncome":"누적 수입","wallet.records":"거래기록 및 자금내역","wallet.tradingRecords":"거래 내역","wallet.moneyLog":"기금 세부정보","wallet.rechargeTip":"충전하려면 WeChat 또는 Alipay를 사용하여 아래 QR 코드를 스캔하세요.","wallet.qrCodePlaceholder":"QR 코드 자리 표시자(에뮬레이션)","wallet.rechargeAmount":"충전금액","wallet.enterAmount":"충전금액을 입력해주세요","wallet.rechargeHint":"최소 입금액: 1 QDT","wallet.confirmRecharge":"충전 확인","wallet.enterValidAmount":"유효한 충전 금액을 입력하세요.","wallet.rechargeSuccess":"재충전 성공! {amount} QDT 입금","wallet.rechargeFailed":"재충전 실패","wallet.withdrawTip":"출금금액과 출금주소를 입력해주세요","wallet.withdrawAmount":"출금금액","wallet.enterWithdrawAmount":"출금금액을 입력해주세요","wallet.withdrawHint":"최소 출금 금액: 1 QDT","wallet.withdrawAddress":"출금주소(선택)","wallet.enterWithdrawAddress":"출금주소를 입력해주세요","wallet.confirmWithdraw":"출금 확인","wallet.enterValidWithdrawAmount":"유효한 인출 금액을 입력하세요.","wallet.insufficientBalance":"잔액 부족","wallet.withdrawSuccess":"출금 성공! 인출된 {금액} QDT","wallet.withdrawFailed":"출금 실패","wallet.noTradingRecords":"아직 거래기록이 없습니다","wallet.noMoneyLog":"아직 펀드 세부정보가 없습니다.","wallet.loadTradingRecordsFailed":"거래 기록을 로드하지 못했습니다.","wallet.loadMoneyLogFailed":"자금 세부정보를 로드하지 못했습니다.","wallet.moneyLogTotal":"총 {total}개 기록","wallet.moneyLogTypeTitle":"유형","wallet.moneyLogType.all":"모든 유형","wallet.table.time":"시간","wallet.table.type":"유형","wallet.table.price":"가격","wallet.table.amount":"수량","wallet.table.money":"금액","wallet.table.balance":"균형","wallet.table.memo":"비고","wallet.table.value":"가치","wallet.table.profit":"이익과 손실","wallet.table.commission":"취급 수수료","wallet.table.total":"총 {total}개 기록","wallet.tradeType.buy":"사다","wallet.tradeType.sell":"팔다","wallet.tradeType.liquidation":"강제청산","wallet.tradeType.openLong":"길게 열다","wallet.tradeType.addLong":"가돗","wallet.tradeType.closeLong":"핀듀오","wallet.tradeType.closeLongStop":"손실을 멈추고 오랫동안","wallet.tradeType.closeLongProfit":"이익을 얻고 더 많은 레벨을 올리세요","wallet.tradeType.openShort":"오픈 쇼트","wallet.tradeType.addShort":"짧게 추가하다","wallet.tradeType.closeShort":"비어 있음","wallet.tradeType.closeShortStop":"손실 중지","wallet.tradeType.closeShortProfit":"이익을 얻고 공매도 마감","wallet.moneyLogType.purchase":"매수 지표","wallet.moneyLogType.recharge":"재충전","wallet.moneyLogType.withdraw":"현금 인출","wallet.moneyLogType.refund":"환불","wallet.moneyLogType.reward":"보상","wallet.moneyLogType.income":"소득","wallet.moneyLogType.commission":"취급 수수료","wallet.web3Address.required":"먼저 Web3 지갑 주소를 입력해주세요","wallet.web3Address.requiredDescription":"충전하기 전에 Web3 지갑 주소를 바인딩해야 충전을 받을 수 있습니다.","wallet.web3Address.placeholder":"Web3 지갑 주소(0x로 시작)를 입력하세요.","wallet.web3Address.save":"지갑 주소 저장","wallet.web3Address.saveSuccess":"지갑 주소가 성공적으로 저장되었습니다","wallet.web3Address.saveFailed":"지갑 주소 저장 실패","wallet.web3Address.invalidFormat":"유효한 Web3 지갑 주소를 입력하세요. (이더리움 형식: 0x로 시작하는 42자 또는 TRC20 형식: T로 시작하는 34자)","wallet.selectCoin":"통화 선택","wallet.selectChain":"선택 체인","wallet.chain.eth":"ETH(ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"BSC","wallet.targetQdtAmount":"상환하려는 QDT 금액(선택 사항)","wallet.targetQdtAmount.placeholder":"상환하려는 QDT 수량, 현재 QDT 가격을 입력하세요: {price} USDT","wallet.targetQdtAmount.requiredUsdt":"재충전 필요: {amount} USDT","wallet.rechargeAddress":"충전 주소","wallet.copyAddress":"복사","wallet.copySuccess":"성공적으로 복사되었습니다!","wallet.copyFailed":"복사하지 못했습니다. 수동으로 복사하세요.","wallet.rechargeAddressHint":"이 주소에 {coin}을 입금하려면 반드시 {chain}을 사용하세요.","wallet.qdtPrice.loading":"로드 중...","wallet.rechargeTip.new":"통화와 체인을 선택한 후 아래 QR 코드를 스캔하여 충전하세요.","wallet.exchangeRate":"1 QDT ≒ {rate} USDT","wallet.withdrawableAmount":"사용 가능한 현금 금액","wallet.totalBalance":"총 잔액","wallet.insufficientWithdrawable":"출금 가능한 현금 금액이 부족합니다. 현재 인출할 수 있는 금액은 다음과 같습니다: {amount} QDT","wallet.withdrawAddressRequired":"출금주소를 입력해주세요","wallet.withdrawAddressHint":"주소가 올바른지 확인하십시오. 탈퇴 후에는 취소가 불가능합니다.","wallet.withdrawSubmitSuccess":"철회 신청서가 성공적으로 제출되었습니다. 검토를 기다려 주세요.","menu.footer.contactUs":"문의하기","menu.footer.getSupport":"지원 받기","menu.footer.socialAccounts":"소셜 계정","menu.footer.userAgreement":"사용자 계약","menu.footer.privacyPolicy":"개인 정보 보호 정책","menu.footer.support":"지원","menu.footer.featureRequest":"기능 요청","menu.footer.email":"이메일","menu.footer.liveChat":"연중무휴 라이브 채팅","dashboard.analysis.title":"다차원 분석","dashboard.analysis.subtitle":"AI 기반 종합재무분석 플랫폼","dashboard.analysis.selectSymbol":"기본 코드 선택 또는 입력","dashboard.analysis.selectModel":"모델 선택","dashboard.analysis.startAnalysis":"분석 시작","dashboard.analysis.history":"역사","dashboard.analysis.tab.overview":"종합적인 분석","dashboard.analysis.tab.fundamental":"기초","dashboard.analysis.tab.technical":"기술","dashboard.analysis.tab.news":"뉴스","dashboard.analysis.tab.sentiment":"감정","dashboard.analysis.tab.risk":"위험","dashboard.analysis.tab.debate":"길고 짧은 논쟁","dashboard.analysis.tab.decision":"최종 결정","dashboard.analysis.empty.selectSymbol":"분석을 시작하려면 대상을 선택하세요.","dashboard.analysis.empty.selectSymbolDesc":"자체 선택한 주식 목록에서 선택하거나 기본 코드를 입력하여 다차원 AI 분석 보고서를 얻습니다.","dashboard.analysis.empty.startAnalysis":'다차원 분석을 수행하려면 "분석 시작" 버튼을 클릭하세요.',"dashboard.analysis.empty.startAnalysisDesc":"펀더멘털, 기술, 뉴스, 정서, 리스크 등 다차원에서 종합적인 분석을 제공해드립니다.","dashboard.analysis.empty.noData":"현재 {type} 분석 데이터가 없습니다. 먼저 종합적인 분석을 수행해 주세요.","dashboard.analysis.empty.noWatchlist":"현재 자체선택한 종목이 없습니다.","dashboard.analysis.empty.noHistory":"아직 기록이 없습니다.","dashboard.analysis.empty.watchlistHint":"현재 자체 선택한 주식이 없습니다. 먼저 문의해 주세요.","dashboard.analysis.empty.noDebateData":"아직 토론 데이터가 없습니다.","dashboard.analysis.empty.noDecisionData":"아직 결정 데이터가 없습니다.","dashboard.analysis.empty.selectAgent":"분석 결과를 보려면 에이전트를 선택하세요.","dashboard.analysis.loading.analyzing":"분석 중입니다. 잠시 기다려 주세요...","dashboard.analysis.loading.fundamental":"기본 데이터 분석 중...","dashboard.analysis.loading.technical":"기술 지표 분석 중...","dashboard.analysis.loading.news":"뉴스 데이터 분석 중...","dashboard.analysis.loading.sentiment":"시장 심리 분석 중…","dashboard.analysis.loading.risk":"위험 평가 중...","dashboard.analysis.loading.debate":"롱숏 논쟁이 진행중인데..","dashboard.analysis.loading.decision":"최종 결정을 내리는 중...","dashboard.analysis.score.overall":"종합평가","dashboard.analysis.score.recommendation":"투자 조언","dashboard.analysis.score.confidence":"자신감","dashboard.analysis.dimension.fundamental":"기초","dashboard.analysis.dimension.technical":"기술","dashboard.analysis.dimension.news":"뉴스","dashboard.analysis.dimension.sentiment":"감정","dashboard.analysis.dimension.risk":"위험","dashboard.analysis.card.dimensionScores":"각 차원에 대한 평가","dashboard.analysis.card.overviewReport":"종합분석보고서","dashboard.analysis.card.financialMetrics":"재무 지표","dashboard.analysis.card.fundamentalReport":"기초분석 보고서","dashboard.analysis.card.technicalIndicators":"기술 지표","dashboard.analysis.card.technicalReport":"기술적 분석 보고서","dashboard.analysis.card.newsList":"관련 뉴스","dashboard.analysis.card.newsReport":"뉴스 분석 보고서","dashboard.analysis.card.sentimentIndicators":"감정 지표","dashboard.analysis.card.sentimentReport":"감정 분석 보고서","dashboard.analysis.card.riskMetrics":"위험 지표","dashboard.analysis.card.riskReport":"위험 평가 보고서","dashboard.analysis.card.bullView":"강세 전망(강세)","dashboard.analysis.card.bearView":"약세 전망 (곰)","dashboard.analysis.card.researchConclusion":"연구원의 결론","dashboard.analysis.card.traderPlan":"상인 계획","dashboard.analysis.card.riskDebate":"위험위원회 토론","dashboard.analysis.card.finalDecision":"최종 결정","dashboard.analysis.card.tradePlanDetail":"거래 계획 세부정보","dashboard.analysis.tradingPlan.entry_price":"입장료","dashboard.analysis.tradingPlan.position_size":"위치 크기","dashboard.analysis.tradingPlan.stop_loss":"손실을 막다","dashboard.analysis.tradingPlan.take_profit":"이익을 얻으세요","dashboard.analysis.label.confidence":"자신감","dashboard.analysis.label.keyPoints":"핵심 포인트","dashboard.analysis.label.riskWarning":"위험 경고","dashboard.analysis.risk.risky":"위험하다","dashboard.analysis.risk.neutral":"중립적 관점 (Neutral)","dashboard.analysis.risk.safe":"보수적 관점(안전)","dashboard.analysis.risk.conclusion":"결론","dashboard.analysis.feature.fundamental":"기본적 분석","dashboard.analysis.feature.technical":"기술적 분석","dashboard.analysis.feature.news":"뉴스 분석","dashboard.analysis.feature.sentiment":"감정 분석","dashboard.analysis.feature.risk":"위험 평가","dashboard.analysis.watchlist.title":"나의 주식 선택","dashboard.analysis.watchlist.add":"추가하다","dashboard.analysis.watchlist.addStock":"재고 추가","dashboard.analysis.modal.addStock.title":"옵션 재고 추가","dashboard.analysis.modal.addStock.confirm":"알았어","dashboard.analysis.modal.addStock.cancel":"취소","dashboard.analysis.modal.addStock.market":"시장 유형","dashboard.analysis.modal.addStock.marketPlaceholder":"시장을 선택해주세요","dashboard.analysis.modal.addStock.marketRequired":"시장 유형을 선택하세요.","dashboard.analysis.modal.addStock.symbol":"주식 코드","dashboard.analysis.modal.addStock.symbolPlaceholder":"예: AAPL, TSLA, GOOGL, 000001, BTC","dashboard.analysis.modal.addStock.symbolRequired":"주식코드를 입력해주세요","dashboard.analysis.modal.addStock.searchPlaceholder":"대상 코드 또는 이름 검색","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"기본 코드를 검색하거나 입력하세요(예: AAPL, BTC/USDT, EUR/USD)","dashboard.analysis.modal.addStock.searchOrInputHint":"데이터베이스에서 객체 검색 또는 코드 직접 입력 지원(시스템이 자동으로 이름을 얻음)","dashboard.analysis.modal.addStock.search":"검색","dashboard.analysis.modal.addStock.searchResults":"검색결과","dashboard.analysis.modal.addStock.hotSymbols":"인기 있는 타겟","dashboard.analysis.modal.addStock.noHotSymbols":"아직 인기 있는 타겟이 없습니다.","dashboard.analysis.modal.addStock.selectedSymbol":"선택됨","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"먼저 대상을 선택하세요.","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"대상을 선택하거나 대상 코드를 먼저 입력하세요","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"타겟코드를 입력해주세요","dashboard.analysis.modal.addStock.pleaseSelectMarket":"먼저 시장 유형을 선택하세요.","dashboard.analysis.modal.addStock.searchFailed":"검색에 실패했습니다. 나중에 다시 시도해 주세요.","dashboard.analysis.modal.addStock.noSearchResults":"일치하는 대상이 없습니다.","dashboard.analysis.modal.addStock.willAutoFetchName":"시스템에서 자동으로 이름을 가져옵니다.","dashboard.analysis.modal.addStock.addDirectly":"직접 추가","dashboard.analysis.modal.addStock.nameWillBeFetched":"추가되면 이름이 자동으로 선택됩니다.","dashboard.analysis.market.USStock":"미국 주식","dashboard.analysis.market.Crypto":"암호화폐","dashboard.analysis.market.Forex":"외환","dashboard.analysis.market.Futures":"선물","dashboard.analysis.modal.history.title":"역사적 분석 기록","dashboard.analysis.modal.history.viewResult":"결과 보기","dashboard.analysis.modal.history.completeTime":"완료 시간","dashboard.analysis.modal.history.error":"오류","dashboard.analysis.status.pending":"보류 중","dashboard.analysis.status.processing":"처리","dashboard.analysis.status.completed":"완료됨","dashboard.analysis.status.failed":"실패했다","dashboard.analysis.message.selectSymbol":"대상을 먼저 선택해주세요","dashboard.analysis.message.taskCreated":"분석 작업이 생성되어 백그라운드에서 실행 중입니다...","dashboard.analysis.message.analysisComplete":"분석 완료","dashboard.analysis.message.analysisCompleteCache":"분석 완료(캐시된 데이터 활용)","dashboard.analysis.message.analysisFailed":"분석에 실패했습니다. 나중에 다시 시도해 주세요.","dashboard.analysis.message.addStockSuccess":"성공적으로 추가되었습니다","dashboard.analysis.message.addStockFailed":"추가 실패","dashboard.analysis.message.removeStockSuccess":"성공적으로 제거되었습니다","dashboard.analysis.message.removeStockFailed":"제거 실패","dashboard.analysis.message.resumingAnalysis":"분석 작업을 재개하는 중...","dashboard.analysis.message.deleteSuccess":"성공적으로 삭제되었습니다","dashboard.analysis.message.deleteFailed":"삭제 실패","dashboard.analysis.modal.history.delete":"삭제","dashboard.analysis.modal.history.deleteConfirm":"이 분석 기록을 삭제하시겠습니까?","dashboard.analysis.test":"상점 번호 {no}, Gongzhuan Road","dashboard.analysis.introduce":"표시기 설명","dashboard.analysis.total-sales":"총매출","dashboard.analysis.day-sales":"일평균 매출엔엔","dashboard.analysis.visits":"방문","dashboard.analysis.visits-trend":"트래픽 동향","dashboard.analysis.visits-ranking":"매장 방문 순위","dashboard.analysis.day-visits":"일일 방문","dashboard.analysis.week":"매주 전년 대비","dashboard.analysis.day":"전년 대비","dashboard.analysis.payments":"결제 횟수","dashboard.analysis.conversion-rate":"전환율","dashboard.analysis.operational-effect":"운영활동 효과","dashboard.analysis.sales-trend":"판매 동향","dashboard.analysis.sales-ranking":"매장판매순위","dashboard.analysis.all-year":"일년 내내","dashboard.analysis.all-month":"이번 달","dashboard.analysis.all-week":"이번 주","dashboard.analysis.all-day":"오늘","dashboard.analysis.search-users":"검색 사용자 수","dashboard.analysis.per-capita-search":"1인당 검색량","dashboard.analysis.online-top-search":"온라인 인기 검색어","dashboard.analysis.the-proportion-of-sales":"판매 카테고리 비율","dashboard.analysis.dropdown-option-one":"첫 번째 작전","dashboard.analysis.dropdown-option-two":"작전 2","dashboard.analysis.channel.all":"모든 채널","dashboard.analysis.channel.online":"온라인","dashboard.analysis.channel.stores":"저장","dashboard.analysis.sales":"판매","dashboard.analysis.traffic":"승객 흐름","dashboard.analysis.table.rank":"순위","dashboard.analysis.table.search-keyword":"키워드 검색","dashboard.analysis.table.users":"사용자 수","dashboard.analysis.table.weekly-range":"주간 증가","dashboard.indicator.selectSymbol":"기본 코드 선택 또는 입력","dashboard.indicator.emptyWatchlistHint":"현재 자체 선택한 주식이 없습니다. 먼저 추가해 주세요.","dashboard.indicator.hint.selectSymbol":"분석을 시작하려면 대상을 선택하세요.","dashboard.indicator.hint.selectSymbolDesc":"K-라인 차트 및 기술 지표를 보려면 위 검색창에서 주식 코드를 선택하거나 입력하세요.","dashboard.indicator.retry":"다시 시도하세요","dashboard.indicator.panel.title":"기술 지표","dashboard.indicator.panel.realtimeOn":"실시간 업데이트 끄기","dashboard.indicator.panel.realtimeOff":"실시간 업데이트 활성화","dashboard.indicator.panel.themeLight":"어두운 테마로 전환","dashboard.indicator.panel.themeDark":"밝은 테마로 전환","dashboard.indicator.section.enabled":"활성화됨","dashboard.indicator.section.added":"내가 추가한 지표","dashboard.indicator.section.custom":"직접 만든 지표","dashboard.indicator.section.bought":"내가 구매한 지표","dashboard.indicator.section.myCreated":"내가 만든 지표","dashboard.indicator.empty":"아직 표시기가 없습니다. 먼저 표시기를 추가하거나 생성하세요.","dashboard.indicator.buy":"매수 지표","dashboard.indicator.action.start":"시작","dashboard.indicator.action.stop":"닫기","dashboard.indicator.action.edit":"편집","dashboard.indicator.action.delete":"삭제","dashboard.indicator.action.backtest":"백테스트","dashboard.indicator.status.normal":"정상","dashboard.indicator.status.normalPermanent":"일반(영구적으로 유효)","dashboard.indicator.status.expired":"만료됨","dashboard.indicator.expiry.permanent":"영구적으로 유효함","dashboard.indicator.expiry.noExpiry":"만료 시간 없음","dashboard.indicator.expiry.expired":"만료됨: {date}","dashboard.indicator.expiry.expiresOn":"만료 시간: {date}","dashboard.indicator.delete.confirmTitle":"삭제 확인","dashboard.indicator.delete.confirmContent":'"{name}" 표시기를 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.',"dashboard.indicator.delete.confirmOk":"삭제","dashboard.indicator.delete.confirmCancel":"취소","dashboard.indicator.delete.success":"성공적으로 삭제되었습니다","dashboard.indicator.delete.failed":"삭제 실패","dashboard.indicator.save.success":"성공적으로 저장되었습니다","dashboard.indicator.save.failed":"저장 실패","dashboard.indicator.error.loadWatchlistFailed":"옵션 재고를 로드하지 못했습니다.","dashboard.indicator.error.chartNotReady":"차트 구성 요소가 초기화되지 않았습니다. 먼저 대상을 선택하고 차트가 로드될 때까지 기다려 주세요.","dashboard.indicator.error.chartMethodNotReady":"차트 구성 요소 메서드가 준비되지 않았습니다. 나중에 다시 시도해 주세요.","dashboard.indicator.error.chartExecuteNotReady":"차트 구성요소 실행 방법이 준비되지 않았습니다. 나중에 다시 시도해 주세요.","dashboard.indicator.error.parseFailed":"Python 코드를 구문 분석할 수 없습니다.","dashboard.indicator.error.parseFailedCheck":"Python 코드를 구문 분석할 수 없습니다. 코드 형식을 확인하세요.","dashboard.indicator.error.addIndicatorFailed":"표시기를 추가하지 못했습니다.","dashboard.indicator.error.runIndicatorFailed":"실행 표시기 실패","dashboard.indicator.error.pleaseLogin":"먼저 로그인해주세요","dashboard.indicator.error.loadDataFailed":"데이터 로딩 실패","dashboard.indicator.error.loadDataFailedDesc":"네트워크 연결을 확인해주세요","dashboard.indicator.error.pythonEngineFailed":"Python 엔진을 로드하지 못했고 표시기 기능을 사용하지 못할 수 있습니다.","dashboard.indicator.error.chartInitFailed":"차트 초기화 실패","dashboard.indicator.warning.enterCode":"표시기 코드를 먼저 입력하세요.","dashboard.indicator.warning.pyodideLoadFailed":"Python 엔진을 로드하지 못했습니다.","dashboard.indicator.warning.pyodideLoadFailedDesc":"현재 지역 또는 네트워크 환경에서는 이 기능을 사용할 수 없습니다.","dashboard.indicator.warning.chartNotInitialized":"차트가 초기화되지 않아 선 그리기 도구를 사용할 수 없습니다.","dashboard.indicator.success.runIndicator":"표시기가 성공적으로 실행됩니다.","dashboard.indicator.success.clearDrawings":"모든 선화 삭제됨","dashboard.indicator.sma":"SMA(이동 평균 조합)","dashboard.indicator.ema":"EMA(지수 이동 평균 조합)","dashboard.indicator.rsi":"RSI(상대강도)","dashboard.indicator.macd":"MACD","dashboard.indicator.bb":"볼린저 밴드","dashboard.indicator.atr":"ATR(평균 실제 범위)","dashboard.indicator.cci":"CCI(상품 채널 지수)","dashboard.indicator.williams":"Williams %R(윌리엄스 지표)","dashboard.indicator.mfi":"MFI(자금 흐름 지수)","dashboard.indicator.adx":"ADX(평균 추세 지수)","dashboard.indicator.obv":"OBV(에너지파)","dashboard.indicator.adosc":"ADOSC(누적/디스패치 오실레이터)","dashboard.indicator.ad":"AD(집적/분배선)","dashboard.indicator.kdj":"KDJ(확률적 지표)","dashboard.indicator.signal.buy":"구매","dashboard.indicator.signal.sell":"판매","dashboard.indicator.signal.supertrendBuy":"슈퍼트렌드 구매","dashboard.indicator.signal.supertrendSell":"슈퍼트렌드 매도","dashboard.indicator.chart.kline":"K라인","dashboard.indicator.chart.volume":"볼륨","dashboard.indicator.chart.uptrend":"상승 추세","dashboard.indicator.chart.downtrend":"하락 추세","dashboard.indicator.tooltip.time":"시간","dashboard.indicator.tooltip.open":"열다","dashboard.indicator.tooltip.close":"받다","dashboard.indicator.tooltip.high":"높다","dashboard.indicator.tooltip.low":"낮음","dashboard.indicator.tooltip.volume":"볼륨","dashboard.indicator.drawing.line":"선분","dashboard.indicator.drawing.horizontalLine":"수평선","dashboard.indicator.drawing.verticalLine":"수직선","dashboard.indicator.drawing.ray":"레이","dashboard.indicator.drawing.straightLine":"직선","dashboard.indicator.drawing.parallelLine":"평행선","dashboard.indicator.drawing.priceLine":"가격선","dashboard.indicator.drawing.priceChannel":"가격 채널","dashboard.indicator.drawing.fibonacciLine":"피보나치 라인","dashboard.indicator.drawing.measure":"측정","dashboard.indicator.drawing.clearAll":"모든 선화 지우기","dashboard.indicator.market.USStock":"미국 주식","dashboard.indicator.market.Crypto":"암호화폐","dashboard.indicator.market.Forex":"외환","dashboard.indicator.market.Futures":"선물","dashboard.indicator.create":"지표 생성","dashboard.indicator.editor.title":"지표 생성/편집","dashboard.indicator.editor.name":"지표 이름","dashboard.indicator.editor.nameRequired":"지표 이름을 입력하세요.","dashboard.indicator.editor.namePlaceholder":"지표 이름을 입력하세요.","dashboard.indicator.editor.description":"표시기 설명","dashboard.indicator.editor.descriptionPlaceholder":"표시기에 대한 설명을 입력하세요(선택 사항).","dashboard.indicator.editor.code":"파이썬 코드","dashboard.indicator.editor.codeRequired":"표시 코드를 입력하세요","dashboard.indicator.editor.codePlaceholder":"Python 코드를 입력하세요.","dashboard.indicator.editor.run":"달리다","dashboard.indicator.editor.runHint":"실행 버튼을 클릭하면 K-라인 차트의 지표 효과를 미리 볼 수 있습니다.","dashboard.indicator.editor.guide":"개발 가이드","dashboard.indicator.editor.guideTitle":"Python 지표 개발 가이드","dashboard.indicator.editor.save":"저장","dashboard.indicator.editor.cancel":"취소","dashboard.indicator.editor.unnamed":"이름 없는 표시기","dashboard.indicator.editor.publishToCommunity":"커뮤니티에 게시","dashboard.indicator.editor.publishToCommunityHint":"게시되면 다른 사용자가 커뮤니티에서 귀하의 지표를 보고 사용할 수 있습니다.","dashboard.indicator.editor.indicatorType":"표시기 유형","dashboard.indicator.editor.indicatorTypeRequired":"지표 유형을 선택하세요.","dashboard.indicator.editor.indicatorTypePlaceholder":"지표 유형을 선택하세요.","dashboard.indicator.editor.previewImage":"미리보기","dashboard.indicator.editor.uploadImage":"사진 업로드","dashboard.indicator.editor.previewImageHint":"권장 크기: 800x400, 2MB 이하","dashboard.indicator.editor.pricing":"판매가(QDT)","dashboard.indicator.editor.pricingType.free":"무료","dashboard.indicator.editor.pricingType.permanent":"영구","dashboard.indicator.editor.pricingType.monthly":"월별 결제","dashboard.indicator.editor.price":"가격","dashboard.indicator.editor.priceRequired":"가격을 입력해주세요","dashboard.indicator.editor.pricePlaceholder":"가격을 입력해주세요","dashboard.indicator.editor.pricingHint":"무료 지표의 가격은 0이지만 플랫폼은 지표 사용량과 칭찬률에 따라 보상(QDT)을 제공합니다.","dashboard.indicator.editor.aiGenerate":"지능형 세대","dashboard.indicator.editor.aiPromptPlaceholder":"당신의 아이디어를 알려주시면 Python 표시기 코드를 생성해 드리겠습니다.","dashboard.indicator.editor.aiGenerateBtn":"AI 생성 코드","dashboard.indicator.editor.aiPromptRequired":"당신의 생각을 입력해주세요","dashboard.indicator.editor.aiGenerateSuccess":"코드 생성 성공","dashboard.indicator.editor.aiGenerateError":"코드 생성에 실패했습니다. 나중에 다시 시도해 주세요.","dashboard.indicator.editor.verifyCode":"코드 검증","dashboard.indicator.editor.verifyCodeSuccess":"검증 통과","dashboard.indicator.editor.verifyCodeFailed":"검증 실패","dashboard.indicator.editor.verifyCodeEmpty":"코드는 비워둘 수 없습니다","dashboard.indicator.backtest.title":"지표 백테스트","dashboard.indicator.backtest.config":"백테스트 매개변수","dashboard.indicator.backtest.startDate":"시작일","dashboard.indicator.backtest.endDate":"종료일","dashboard.indicator.backtest.selectStartDate":"시작일 선택","dashboard.indicator.backtest.selectEndDate":"종료일 선택","dashboard.indicator.backtest.startDateRequired":"시작일을 선택하세요.","dashboard.indicator.backtest.endDateRequired":"종료일을 선택하세요.","dashboard.indicator.backtest.initialCapital":"초기자본금","dashboard.indicator.backtest.initialCapitalRequired":"초기자금을 입력해주세요","dashboard.indicator.backtest.commission":"수수료","dashboard.indicator.backtest.leverage":"레버리지 비율","dashboard.indicator.backtest.tradeDirection":"거래 방향","dashboard.indicator.backtest.longOnly":"오래 가세요","dashboard.indicator.backtest.shortOnly":"짧은","dashboard.indicator.backtest.both":"양방향","dashboard.indicator.backtest.run":"백테스팅 시작","dashboard.indicator.backtest.rerun":"다시 백테스트","dashboard.indicator.backtest.close":"닫기","dashboard.indicator.backtest.running":"지표 백테스트 진행 중...","dashboard.indicator.backtest.results":"백테스트 결과","dashboard.indicator.backtest.totalReturn":"총 수익","dashboard.indicator.backtest.annualReturn":"연간 소득","dashboard.indicator.backtest.maxDrawdown":"최대 감소","dashboard.indicator.backtest.sharpeRatio":"샤프비율","dashboard.indicator.backtest.winRate":"승률","dashboard.indicator.backtest.profitFactor":"손익 비율","dashboard.indicator.backtest.totalTrades":"거래수","dashboard.indicator.totalReturn":"총 수익","dashboard.indicator.annualReturn":"연간 수익률","dashboard.indicator.maxDrawdown":"최대 감소","dashboard.indicator.sharpeRatio":"샤프비율","dashboard.indicator.winRate":"승률","dashboard.indicator.profitFactor":"손익 비율","dashboard.indicator.totalTrades":"총 거래 수","dashboard.indicator.backtest.totalCommission":"총 취급 수수료","dashboard.indicator.backtest.equityCurve":"수익률 곡선","dashboard.indicator.backtest.strategy":"지표소득","dashboard.indicator.backtest.benchmark":"벤치마크 수익률","dashboard.indicator.backtest.tradeHistory":"거래 내역","dashboard.indicator.backtest.tradeTime":"시간","dashboard.indicator.backtest.tradeType":"유형","dashboard.indicator.backtest.buy":"사다","dashboard.indicator.backtest.sell":"팔다","dashboard.indicator.backtest.liquidation":"청산","dashboard.indicator.backtest.openLong":"길게 열다","dashboard.indicator.backtest.closeLong":"핀듀오","dashboard.indicator.backtest.closeLongStop":"매수에 가까움(손절매)","dashboard.indicator.backtest.closeLongProfit":"더 닫기 (이익 실현)","dashboard.indicator.backtest.addLong":"롱 포지션 추가","dashboard.indicator.backtest.openShort":"오픈 쇼트","dashboard.indicator.backtest.closeShort":"비어 있음","dashboard.indicator.backtest.closeShortStop":"청산(손절매)","dashboard.indicator.backtest.closeShortProfit":"마감(이익실현)","dashboard.indicator.backtest.addShort":"숏 포지션 추가","dashboard.indicator.backtest.price":"가격","dashboard.indicator.backtest.amount":"수량","dashboard.indicator.backtest.balance":"계좌잔고","dashboard.indicator.backtest.profit":"이익과 손실","dashboard.indicator.backtest.success":"백테스트 완료","dashboard.indicator.backtest.failed":"백테스트에 실패했습니다. 나중에 다시 시도해 주세요.","dashboard.indicator.backtest.noIndicatorCode":"이 지표에 대한 백테스트 가능한 코드가 없습니다.","dashboard.indicator.backtest.noSymbol":"거래대상을 먼저 선택해주세요","dashboard.indicator.backtest.dateRangeExceeded":"백테스트 시간 범위가 한도를 초과합니다. {timeframe} 기간은 최대 {maxRange}까지 백테스트할 수 있습니다.","dashboard.indicator.backtest.dateRangeExceededDays":"Backtest range exceeds limit: {timeframe} max {maxRange} ({maxDays} days)","dashboard.indicator.backtest.metaLine":"Symbol: {symbol} | Market: {market} | Timeframe: {timeframe}","dashboard.indicator.backtest.savedRunId":"Backtest saved. Run ID: {id}","dashboard.indicator.backtest.prev":"Previous","dashboard.indicator.backtest.next":"Next","dashboard.indicator.backtest.hint.entryPctMax":"Max entry: {maxPct}% (reserve budget for future scale-ins)","dashboard.indicator.backtest.steps.strategy.title":"Strategy","dashboard.indicator.backtest.steps.strategy.desc":"Position sizing & risk controls","dashboard.indicator.backtest.steps.trading.title":"Trading settings","dashboard.indicator.backtest.steps.trading.desc":"Time range, capital, fees, leverage","dashboard.indicator.backtest.steps.results.title":"Results","dashboard.indicator.backtest.steps.results.desc":"Backtest output","dashboard.indicator.backtest.panel.risk":"Risk management (SL/TP/Trailing)","dashboard.indicator.backtest.panel.scale":"Scale in / DCA (trend & mean-reversion)","dashboard.indicator.backtest.panel.reduce":"Reduce position (trend & adverse)","dashboard.indicator.backtest.panel.position":"Position sizing","dashboard.indicator.backtest.field.stopLossPct":"Stop Loss (%)","dashboard.indicator.backtest.field.takeProfitPct":"Take Profit (%)","dashboard.indicator.backtest.field.trailingEnabled":"Trailing stop / take profit","dashboard.indicator.backtest.field.trailingStopPct":"Trailing drawdown (%)","dashboard.indicator.backtest.field.trailingActivationPct":"Trailing activation (%)","dashboard.indicator.backtest.field.slippage":"Slippage (%)","dashboard.indicator.backtest.field.trendAddEnabled":"Trend-following scale-in","dashboard.indicator.backtest.field.dcaAddEnabled":"Mean-reversion scale-in","dashboard.indicator.backtest.field.trendAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.dcaAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.trendAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.dcaAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.trendAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.dcaAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.trendReduceEnabled":"Trend reduce","dashboard.indicator.backtest.field.adverseReduceEnabled":"Adverse reduce","dashboard.indicator.backtest.field.trendReduceStepPct":"Trend trigger (%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"Adverse trigger (%)","dashboard.indicator.backtest.field.trendReduceSizePct":"Reduce size (% of position)","dashboard.indicator.backtest.field.adverseReduceSizePct":"Adverse reduce size (% of position)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"Max trend reduce times","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"Max adverse reduce times","dashboard.indicator.backtest.field.entryPct":"Entry size (% of capital)","dashboard.indicator.backtest.field.minOrderPct":"Min order size (% of capital) (optional)","dashboard.indicator.backtest.closeLongTrailing":"Close Long (Trailing)","dashboard.indicator.backtest.reduceLong":"Reduce Long","dashboard.indicator.backtest.closeShortTrailing":"Close Short (Trailing)","dashboard.indicator.backtest.reduceShort":"Reduce Short","dashboard.docs.title":"문서 센터","dashboard.docs.search.placeholder":"문서 검색...","dashboard.docs.category.all":"모두","dashboard.docs.category.guide":"개발 가이드","dashboard.docs.category.api":"API 문서","dashboard.docs.category.tutorial":"튜토리얼","dashboard.docs.category.faq":"FAQ","dashboard.docs.featured.title":"권장 문서","dashboard.docs.featured.tag":"추천","dashboard.docs.list.views":"찾아보기","dashboard.docs.list.author":"작성자","dashboard.docs.list.empty":"아직 문서가 없습니다.","dashboard.docs.list.backToAll":"모든 문서로 돌아가기","dashboard.docs.list.total":"총 {count}개의 문서","dashboard.docs.detail.back":"문서 목록으로 돌아가기","dashboard.docs.detail.updatedAt":"업데이트 날짜","dashboard.docs.detail.related":"관련 문서","dashboard.docs.detail.notFound":"문서가 존재하지 않습니다","dashboard.docs.detail.error":"문서가 존재하지 않거나 삭제되었습니다.","dashboard.docs.search.result":"검색결과","dashboard.docs.search.keyword":"키워드","community.filter.indicatorType":"표시기 유형","community.filter.all":"모두","community.filter.other":"기타 옵션","community.filter.pricing":"가격 유형","community.filter.allPricing":"모든 가격","community.filter.sortBy":"정렬 기준","community.filter.search":"검색","community.filter.searchPlaceholder":"측정항목 이름 검색","community.indicatorType.trend":"트렌드 유형","community.indicatorType.momentum":"모멘텀형","community.indicatorType.volatility":"변동성","community.indicatorType.volume":"볼륨","community.indicatorType.custom":"사용자 정의","community.pricing.free":"무료","community.pricing.paid":"지불","community.sort.downloads":"다운로드","community.sort.rating":"등급","community.sort.newest":"최신 릴리스","community.pagination.total":"총 {total} 지표","community.noDescription":"아직 설명이 없습니다","community.detail.type":"유형","community.detail.pricing":"가격","community.detail.rating":"등급","community.detail.downloads":"다운로드","community.detail.author":"작성자","community.detail.description":"소개","community.detail.detailContent":"자세한 설명","community.detail.backtestStats":"백테스트 통계","community.action.purchase":"매수 지표","community.action.addToMyIndicators":"내 지표에 추가","community.action.favorite":"컬렉션","community.action.unfavorite":"즐겨찾기 취소","community.action.buyNow":"지금 구매","community.action.renew":"갱신","community.purchase.price":"가격","community.purchase.permanent":"영구","community.purchase.monthly":"달","community.purchase.confirmBuy":"이 지표({price} QDT) 구매를 확인하시겠습니까?","community.purchase.confirmRenew":"이 지표({price} QDT/월)를 갱신하시겠습니까?","community.purchase.confirmFree":"이 무료 표시기를 추가하시겠습니까?","community.purchase.confirmTitle":"조치 확인","community.purchase.owned":"이 표시기를 구입하셨습니다(영구적으로 유효함).","community.purchase.ownIndicator":"귀하가 게시한 측정항목입니다.","community.purchase.expired":"구독이 만료되었습니다","community.purchase.expiresOn":"만료 시간: {date}","community.tabs.detail":"지표 세부정보","community.tabs.backtest":"백테스트 데이터","community.tabs.ratings":"사용자 리뷰","community.rating.myRating":"내 평가","community.rating.stars":"별 {count}개","community.rating.commentPlaceholder":"당신의 경험을 공유하세요...","community.rating.submit":"평가 제출","community.rating.modify":"수정","community.rating.saveModify":"변경사항 저장","community.rating.cancel":"취소","community.rating.selectRating":"등급을 선택해 주세요","community.rating.success":"평가 성공","community.rating.modifySuccess":"리뷰가 수정되었습니다.","community.rating.failed":"평가 실패","community.rating.noRatings":"아직 댓글이 없습니다","community.backtest.note":"위 데이터는 과거 백테스트 결과이며 참고용일 뿐 미래 수익을 나타내지는 않습니다.","community.backtest.noData":"아직 백테스트 데이터가 없습니다.","community.backtest.uploadHint":"작성자는 아직 백테스트 데이터를 업로드하지 않았습니다.","community.message.loadFailed":"표시기 목록을 로드하지 못했습니다.","community.message.purchaseProcessing":"구매 요청 처리 중...","community.message.downloadSuccess":"내 측정항목 목록에 측정항목이 추가되었습니다.","community.message.favoriteSuccess":"수집 성공","community.message.unfavoriteSuccess":"수집을 취소했습니다.","community.message.operationSuccess":"작업 성공","community.message.operationFailed":"작업 실패","community.banner.readOnly":"읽기 전용","community.banner.loginHint":"로그인 또는 등록이 필요한 경우 버튼을 클릭하여 독립 페이지로 이동하여 CSRF 문제를 방지하세요","community.banner.jumpButton":"로그인/등록으로 이동","dashboard.totalEquity":"총자본","dashboard.totalPnL":"총손익","dashboard.aiStrategies":"AI 전략","dashboard.indicatorStrategies":"지표 전략","dashboard.running":"달리기","dashboard.pnlHistory":"역사적 손익","dashboard.strategyPerformance":"전략 손익비율","dashboard.recentTrades":"최근 거래","dashboard.currentPositions":"현재 위치","dashboard.table.time":"시간","dashboard.table.strategy":"정책 이름","dashboard.table.symbol":"대상","dashboard.table.type":"유형","dashboard.table.side":"방향","dashboard.table.size":"미결제약정","dashboard.table.entryPrice":"평균 개장가","dashboard.table.price":"가격","dashboard.table.amount":"수량","dashboard.table.profit":"이익과 손실","dashboard.pendingOrders":"주문 실행 기록","dashboard.totalOrders":"총 {total}건","dashboard.viewError":"오류 보기","dashboard.filled":"체결됨","dashboard.orderTable.time":"생성 시간","dashboard.orderTable.strategy":"전략","dashboard.orderTable.symbol":"거래 쌍","dashboard.orderTable.signalType":"신호 유형","dashboard.orderTable.amount":"수량","dashboard.orderTable.price":"체결 가격","dashboard.orderTable.status":"상태","dashboard.orderTable.executedAt":"실행 시간","dashboard.signalType.openLong":"롱 오픈","dashboard.signalType.openShort":"숏 오픈","dashboard.signalType.closeLong":"롱 청산","dashboard.signalType.closeShort":"숏 청산","dashboard.signalType.addLong":"롱 추가","dashboard.signalType.addShort":"숏 추가","dashboard.status.pending":"대기 중","dashboard.status.processing":"처리 중","dashboard.status.completed":"완료","dashboard.status.failed":"실패","dashboard.status.cancelled":"취소됨","dashboard.table.pnl":"미실현 손익","form.basic-form.basic.title":"기본 형태","form.basic-form.basic.description":"양식 페이지는 사용자로부터 정보를 수집하거나 확인하는 데 사용됩니다. 기본 양식은 데이터 항목이 거의 없는 양식 시나리오에서 일반적으로 사용됩니다.","form.basic-form.title.label":"제목","form.basic-form.title.placeholder":"목표에 이름을 지어주세요","form.basic-form.title.required":"제목을 입력하세요","form.basic-form.date.label":"시작일 및 종료일","form.basic-form.placeholder.start":"시작일","form.basic-form.placeholder.end":"종료일","form.basic-form.date.required":"시작일과 종료일을 선택하세요.","form.basic-form.goal.label":"목표 설명","form.basic-form.goal.placeholder":"단계별 업무 목표를 입력하세요.","form.basic-form.goal.required":"목표 설명을 입력하세요.","form.basic-form.standard.label":"측정하다","form.basic-form.standard.placeholder":"측정항목을 입력하세요.","form.basic-form.standard.required":"측정항목을 입력하세요.","form.basic-form.client.label":"고객","form.basic-form.client.required":"귀하가 서비스를 제공하는 고객에 대해 설명해주세요.","form.basic-form.label.tooltip":"대상 서비스 대상자","form.basic-form.client.placeholder":"귀하가 서비스를 제공하는 고객, 내부 고객을 직접 @이름/직위 번호로 설명하십시오.","form.basic-form.invites.label":"리뷰어 초대","form.basic-form.invites.placeholder":"@이름/사원번호로 직접 보내주세요. 최대 5명까지 초대 가능합니다.","form.basic-form.weight.label":"무게","form.basic-form.weight.placeholder":"입력해주세요","form.basic-form.public.label":"대중을 대상으로","form.basic-form.label.help":"고객과 검토자는 기본적으로 공유됩니다.","form.basic-form.radio.public":"대중","form.basic-form.radio.partially-public":"부분적으로 공개","form.basic-form.radio.private":"비공개","form.basic-form.publicUsers.placeholder":"열려 있다","form.basic-form.option.A":"동료 1","form.basic-form.option.B":"동료 2","form.basic-form.option.C":"동료 3","form.basic-form.email.required":"이메일 주소를 입력해주세요!","form.basic-form.email.wrong-format":"이메일 주소 형식이 잘못되었습니다!","form.basic-form.userName.required":"사용자 이름을 입력해주세요!","form.basic-form.password.required":"비밀번호를 입력해주세요!","form.basic-form.password.twice":"두 번 입력한 비밀번호가 일치하지 않습니다!","form.basic-form.strength.msg":"6자 이상 입력해주세요. 쉽게 추측할 수 있는 비밀번호는 사용하지 마세요.","form.basic-form.strength.strong":"힘: 강한","form.basic-form.strength.medium":"강도: 중간","form.basic-form.strength.short":"강도: 너무 짧음","form.basic-form.confirm-password.required":"비밀번호를 확인해 주세요!","form.basic-form.phone-number.required":"휴대폰번호를 입력해주세요!","form.basic-form.phone-number.wrong-format":"휴대폰 번호 형식이 잘못되었습니다!","form.basic-form.verification-code.required":"인증번호를 입력해주세요!","form.basic-form.form.get-captcha":"인증 코드 받기","form.basic-form.captcha.second":"초","form.basic-form.form.optional":"(선택사항)","form.basic-form.form.submit":"제출","form.basic-form.form.save":"저장","form.basic-form.email.placeholder":"이메일","form.basic-form.password.placeholder":"비밀번호는 6자 이상, 대소문자 구분","form.basic-form.confirm-password.placeholder":"비밀번호 확인","form.basic-form.phone-number.placeholder":"휴대전화번호","form.basic-form.verification-code.placeholder":"인증코드","result.success.title":"제출 성공","result.success.description":'제출 결과 페이지는 일련의 작업 작업의 처리 결과를 피드백하는 데 사용됩니다. 간단한 작업인 경우 메시지 전역 프롬프트 피드백을 사용하세요. 이 텍스트 영역에는 간단한 보충 지침이 표시될 수 있습니다. "문서"를 표시해야 하는 경우 아래 회색 영역에 더 복잡한 내용이 표시될 수 있습니다.',"result.success.operate-title":"프로젝트 이름","result.success.operate-id":"프로젝트 ID","result.success.principal":"담당자","result.success.operate-time":"유효시간","result.success.step1-title":"프로젝트 생성","result.success.step1-operator":"쿠 릴리","result.success.step2-title":"학과 사전 검토","result.success.step2-operator":"저우 마오마오","result.success.step2-extra":"긴급","result.success.step3-title":"재무 검토","result.success.step4-title":"완료","result.success.btn-return":"목록으로 돌아가기","result.success.btn-project":"항목 보기","result.success.btn-print":"인쇄","result.fail.error.title":"제출 실패","result.fail.error.description":"다시 제출하기 전에 다음 정보를 확인하고 수정하시기 바랍니다.","result.fail.error.hint-title":"제출한 콘텐츠에 다음 오류가 포함되어 있습니다.","result.fail.error.hint-text1":"귀하의 계정이 동결되었습니다","result.fail.error.hint-btn1":"즉시 해동","result.fail.error.hint-text2":"귀하의 계정은 아직 신청할 수 없습니다","result.fail.error.hint-btn2":"지금 업그레이드","result.fail.error.btn-text":"수정으로 돌아가기","account.settings.menuMap.custom":"개인화","account.settings.menuMap.binding":"계정 바인딩","account.settings.basic.avatar":"아바타","account.settings.basic.change-avatar":"아바타 변경","account.settings.basic.email":"이메일","account.settings.basic.email-message":"이메일을 입력해주세요!","account.settings.basic.nickname":"닉네임","account.settings.basic.nickname-message":"닉네임을 입력해주세요!","account.settings.basic.profile":"프로필","account.settings.basic.profile-message":"개인 프로필을 입력해주세요!","account.settings.basic.profile-placeholder":"프로필","account.settings.basic.country":"국가/지역","account.settings.basic.country-message":"국가나 지역을 입력해주세요!","account.settings.basic.geographic":"지방 및 도시","account.settings.basic.geographic-message":"귀하의 시/도를 입력해주세요!","account.settings.basic.address":"거리 주소","account.settings.basic.address-message":"주소를 입력해주세요!","account.settings.basic.phone":"연락처","account.settings.basic.phone-message":"연락처를 입력해주세요!","account.settings.basic.update":"기본정보 업데이트","account.settings.basic.update.success":"기본 정보를 성공적으로 업데이트했습니다.","account.settings.security.strong":"강한","account.settings.security.medium":"안으로","account.settings.security.weak":"약한","account.settings.security.password":"계정 비밀번호","account.settings.security.password-description":"현재 비밀번호 강도:","account.settings.security.phone":"보안 휴대폰","account.settings.security.phone-description":"이미 바인딩된 휴대폰:","account.settings.security.question":"보안 문제","account.settings.security.question-description":"보안 질문이 설정되지 않아 계정 보안을 효과적으로 보호할 수 있습니다.","account.settings.security.email":"이메일 바인딩","account.settings.security.email-description":"이미 바인딩된 이메일 주소:","account.settings.security.mfa":"MFA 장치","account.settings.security.mfa-description":"MFA 디바이스가 바인딩되지 않았습니다. 바인딩 후 다시 확인할 수 있습니다.","account.settings.security.modify":"수정","account.settings.security.set":"설정","account.settings.security.bind":"바인딩","account.settings.binding.taobao":"타오바오 바인딩","account.settings.binding.taobao-description":"현재 타오바오 계정이 연결되어 있지 않습니다","account.settings.binding.alipay":"알리페이 바인딩","account.settings.binding.alipay-description":"Alipay 계정이 현재 연결되어 있지 않습니다.","account.settings.binding.dingding":"바인딩 딩톡","account.settings.binding.dingding-description":"현재 바인딩된 DingTalk 계정이 없습니다.","account.settings.binding.bind":"바인딩","account.settings.notification.password":"계정 비밀번호","account.settings.notification.password-description":"다른 사용자의 메시지는 사이트 메시지 형식으로 통보됩니다.","account.settings.notification.messages":"시스템 메시지","account.settings.notification.messages-description":"시스템 메시지는 사이트 메시지 형식으로 통보됩니다.","account.settings.notification.todo":"해야 할 일","account.settings.notification.todo-description":"할일은 사이트 내 메시지로 알려드립니다.","account.settings.settings.open":"열다","account.settings.settings.close":"닫기","trading-assistant.title":"트레이딩 어시스턴트","trading-assistant.strategyList":"전략 목록","trading-assistant.createStrategy":"정책 만들기","trading-assistant.noStrategy":"아직 전략이 없습니다.","trading-assistant.selectStrategy":"세부정보를 보려면 왼쪽에서 전략을 선택하세요.","trading-assistant.startStrategy":"출시 전략","trading-assistant.stopStrategy":"중지 전략","trading-assistant.editStrategy":"편집 전략","trading-assistant.deleteStrategy":"정책 삭제","trading-assistant.status.running":"달리기","trading-assistant.status.stopped":"중지됨","trading-assistant.status.error":"오류","trading-assistant.strategyType.IndicatorStrategy":"기술 지표 전략","trading-assistant.strategyType.PromptBasedStrategy":"단서 전략","trading-assistant.strategyType.GridStrategy":"그리드 전략","trading-assistant.tabs.tradingRecords":"거래 내역","trading-assistant.tabs.positions":"직위기록","trading-assistant.tabs.equityCurve":"주식곡선","trading-assistant.form.step1":"지표 선택","trading-assistant.form.step2":"교환 구성","trading-assistant.form.step3":"전략 매개변수","trading-assistant.form.indicator":"지표 선택","trading-assistant.form.indicatorHint":"자신이 구매했거나 생성한 기술 지표만 선택할 수 있습니다.","trading-assistant.form.qdtCostHints":"전략을 사용하면 QDT가 소모됩니다. 계정에 QDT 잔액이 충분한지 확인하세요.","trading-assistant.form.indicatorDescription":"표시기 설명","trading-assistant.form.noDescription":"아직 설명이 없습니다","trading-assistant.form.exchange":"교환 선택","trading-assistant.form.apiKey":"API 키","trading-assistant.form.secretKey":"비밀키","trading-assistant.form.passphrase":"암호","trading-assistant.form.testConnection":"연결 테스트","trading-assistant.form.strategyName":"정책 이름","trading-assistant.form.symbol":"거래 쌍","trading-assistant.form.symbolHint":"현재는 암호화폐 거래쌍만 지원됩니다","trading-assistant.form.initialCapital":"투자금액","trading-assistant.form.marketType":"시장 유형","trading-assistant.form.marketTypeFutures":"계약","trading-assistant.form.marketTypeSpot":"스팟","trading-assistant.form.marketTypeHint":"계약은 양방향 거래와 레버리지를 지원하는 반면 현물은 롱 포지션만 지원하고 레버리지는 1x로 고정됩니다.","trading-assistant.form.leverage":"여러 가지 활용","trading-assistant.form.leverageHint":"계약 : 1~125회, 현물 : 고정 1회","trading-assistant.form.spotLeverageFixed":"현물 거래 레버리지는 1x로 고정됩니다.","trading-assistant.form.spotOnlyLongHint":"현물 거래는 매수 포지션만 지원합니다","trading-assistant.form.tradeDirection":"거래 방향","trading-assistant.form.tradeDirectionLong":"오직 길다","trading-assistant.form.tradeDirectionShort":"단지 짧다","trading-assistant.form.tradeDirectionBoth":"양방향 거래","trading-assistant.form.timeframe":"기간","trading-assistant.form.klinePeriod":"K선 기간","trading-assistant.form.timeframe1m":"1분","trading-assistant.form.timeframe5m":"5분","trading-assistant.form.timeframe15m":"15분","trading-assistant.form.timeframe30m":"30분","trading-assistant.form.timeframe1H":"1시간","trading-assistant.form.timeframe4H":"4시간","trading-assistant.form.timeframe1D":"1일","trading-assistant.form.selectStrategyType":"전략 유형 선택","trading-assistant.form.indicatorStrategy":"지표 전략","trading-assistant.form.indicatorStrategyDesc":"기술 지표 기반 자동 거래 전략","trading-assistant.form.aiStrategy":"AI 전략","trading-assistant.form.aiStrategyDesc":"AI 지능형 의사결정 기반 자동 거래 전략","trading-assistant.form.enableAiFilter":"AI 지능형 의사결정 필터 활성화","trading-assistant.form.enableAiFilterHint":"활성화하면 지표 신호가 AI에 의해 필터링되어 거래 품질이 향상됩니다","trading-assistant.form.aiFilterPrompt":"사용자 정의 프롬프트","trading-assistant.form.aiFilterPromptHint":"AI 필터링을 위한 사용자 정의 지침을 제공하고, 비워두면 시스템 기본값을 사용합니다","trading-assistant.validation.strategyTypeRequired":"전략 유형을 선택하세요","trading-assistant.form.advancedSettings":"고급 설정","trading-assistant.form.orderMode":"주문 모드","trading-assistant.form.orderModeMaker":"메이커","trading-assistant.form.orderModeTaker":"시장가(테이커)","trading-assistant.form.orderModeHint":"지정가 주문 모드는 지정가 주문을 사용하며 처리 수수료가 더 낮습니다. 시장 가격 모드는 즉시 실행되며 처리 수수료가 더 높습니다.","trading-assistant.form.makerWaitSec":"지정가 주문 대기 시간(초)","trading-assistant.form.makerWaitSecHint":"주문 후 거래가 완료될 때까지 기다리는 시간입니다. 취소하고 시간 초과 후 다시 시도하세요.","trading-assistant.form.makerRetries":"보류 중인 주문에 대한 재시도 횟수","trading-assistant.form.makerRetriesHint":"보류 중인 주문이 실행되지 않을 때 최대 재시도 횟수","trading-assistant.form.fallbackToMarket":"지정가 주문이 실패하고 시장 가격이 하락합니다.","trading-assistant.form.fallbackToMarketHint":"개시/청산 보류 주문이 완료되지 않은 경우 거래가 완료되었는지 확인하기 위해 시장가 주문으로 다운그레이드해야 하는지 여부.","trading-assistant.form.marginMode":"마진 모드","trading-assistant.form.marginModeCross":"전체 창고","trading-assistant.form.marginModeIsolated":"고립된 위치","trading-assistant.form.stopLossPct":"정지손해율(%)","trading-assistant.form.stopLossPctHint":"정지 손실 비율을 설정합니다. 0은 정지 손실이 활성화되지 않았음을 의미합니다.","trading-assistant.form.takeProfitPct":"이익 실현 비율(%)","trading-assistant.form.takeProfitPctHint":"이익실현 비율을 설정합니다. 0은 이익실현을 비활성화함을 의미합니다.","trading-assistant.form.signalMode":"신호 모드","trading-assistant.form.signalModeConfirmed":"모드 확인","trading-assistant.form.signalModeAggressive":"공격적 모드","trading-assistant.form.signalModeHint":"확인 모드: 완료된 K 라인만 확인합니다. 공격적 모드: K 라인 형성도 확인합니다.","trading-assistant.form.cancel":"취소","trading-assistant.form.prev":"이전 단계","trading-assistant.form.next":"다음 단계","trading-assistant.form.confirmCreate":"생성 확인","trading-assistant.form.confirmEdit":"변경사항 확인","trading-assistant.messages.createSuccess":"전략이 성공적으로 생성되었습니다.","trading-assistant.messages.createFailed":"정책을 생성하지 못했습니다.","trading-assistant.messages.updateSuccess":"정책 업데이트 성공","trading-assistant.messages.updateFailed":"정책 업데이트 실패","trading-assistant.messages.deleteSuccess":"정책 삭제 성공","trading-assistant.messages.deleteFailed":"정책 삭제 실패","trading-assistant.messages.startSuccess":"전략이 성공적으로 시작되었습니다","trading-assistant.messages.startFailed":"정책을 시작하지 못했습니다.","trading-assistant.messages.stopSuccess":"전략이 성공적으로 중지되었습니다.","trading-assistant.messages.stopFailed":"중지 전략이 실패했습니다.","trading-assistant.messages.loadFailed":"정책 목록을 가져오지 못했습니다.","trading-assistant.messages.runningWarning":"전략이 실행되고 있습니다. 전략을 수정하기 전에 전략을 중지하세요.","trading-assistant.messages.deleteConfirmWithName":'"{name}" 정책을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.',"trading-assistant.messages.deleteConfirm":"이 정책을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.","trading-assistant.messages.loadTradesFailed":"거래 기록을 가져오지 못했습니다.","trading-assistant.messages.loadPositionsFailed":"위치 기록을 가져오지 못했습니다.","trading-assistant.messages.loadEquityFailed":"자기자본곡선 획득 실패","trading-assistant.messages.loadIndicatorsFailed":"표시기 목록을 로드하지 못했습니다. 나중에 다시 시도해 주세요.","trading-assistant.messages.spotLimitations":"현물 거래는 자동으로 매수, 1배 레버리지로 설정되었습니다.","trading-assistant.messages.autoFillApiConfig":"거래소의 과거 API 구성이 자동으로 채워졌습니다.","trading-assistant.placeholders.selectIndicator":"지표를 선택하세요","trading-assistant.placeholders.selectExchange":"교환을 선택해주세요","trading-assistant.placeholders.inputApiKey":"API 키를 입력하세요","trading-assistant.placeholders.inputSecretKey":"비밀키를 입력해주세요","trading-assistant.placeholders.inputPassphrase":"암호를 입력하세요","trading-assistant.placeholders.inputStrategyName":"정책 이름을 입력하세요.","trading-assistant.placeholders.selectSymbol":"거래쌍을 선택해주세요","trading-assistant.placeholders.selectTimeframe":"기간을 선택하세요.","trading-assistant.placeholders.selectKlinePeriod":"K선 기간을 선택하세요","trading-assistant.placeholders.inputAiFilterPrompt":"사용자 정의 프롬프트를 입력하세요(선택사항)","trading-assistant.validation.indicatorRequired":"지표를 선택하세요","trading-assistant.validation.exchangeRequired":"교환을 선택해주세요","trading-assistant.validation.apiKeyRequired":"API 키를 입력하세요","trading-assistant.validation.secretKeyRequired":"비밀키를 입력해주세요","trading-assistant.validation.passphraseRequired":"암호를 입력하세요","trading-assistant.validation.exchangeConfigIncomplete":"전체 교환 구성 정보를 입력하세요.","trading-assistant.validation.testConnectionRequired":'먼저 "연결 테스트" 버튼을 클릭하고 연결이 성공했는지 확인하세요',"trading-assistant.validation.testConnectionFailed":"연결 테스트에 실패했습니다. 구성을 확인하고 다시 테스트하세요","trading-assistant.validation.credentialRequired":"먼저 개인 센터에서 거래소 자격 증명을 추가하고 테스트하세요","trading-assistant.validation.strategyNameRequired":"정책 이름을 입력하세요.","trading-assistant.validation.symbolRequired":"거래쌍을 선택해주세요","trading-assistant.validation.initialCapitalRequired":"투자금액을 입력해주세요.","trading-assistant.validation.leverageRequired":"레버리지 비율을 입력하세요.","trading-assistant.table.time":"시간","trading-assistant.table.type":"유형","trading-assistant.table.price":"가격","trading-assistant.table.amount":"수량","trading-assistant.table.value":"금액","trading-assistant.table.commission":"취급 수수료","trading-assistant.table.symbol":"거래쌍","trading-assistant.table.side":"방향","trading-assistant.table.size":"포지션 수량","trading-assistant.table.entryPrice":"개장 가격","trading-assistant.table.currentPrice":"현재 가격","trading-assistant.table.unrealizedPnl":"미실현 손익","trading-assistant.table.pnlPercent":"손익비율","trading-assistant.table.buy":"사다","trading-assistant.table.sell":"팔다","trading-assistant.table.long":"오래 가세요","trading-assistant.table.short":"짧은","trading-assistant.table.noPositions":"아직 직책이 없습니다.","trading-assistant.detail.title":"전략 세부정보","trading-assistant.detail.strategyName":"정책 이름","trading-assistant.detail.strategyType":"전략 유형","trading-assistant.detail.status":"상태","trading-assistant.detail.tradingMode":"거래 모델","trading-assistant.detail.exchange":"교환","trading-assistant.detail.initialCapital":"초기자본금","trading-assistant.detail.totalInvestment":"총투자금액","trading-assistant.detail.currentEquity":"현재 순자산","trading-assistant.detail.totalPnl":"총손익","trading-assistant.detail.indicatorName":"지표 이름","trading-assistant.detail.maxLeverage":"최대 레버리지","trading-assistant.detail.decideInterval":"결정 간격","trading-assistant.detail.symbols":"거래개체","trading-assistant.detail.createdAt":"생성 시간","trading-assistant.detail.updatedAt":"업데이트 시간","trading-assistant.detail.llmConfig":"AI 모델 구성","trading-assistant.detail.exchangeConfig":"교환 구성","trading-assistant.detail.provider":"공급자","trading-assistant.detail.modelId":"모델 ID","trading-assistant.detail.close":"닫기","trading-assistant.detail.loadFailed":"정책 세부정보를 가져오지 못했습니다.","trading-assistant.equity.noData":"아직 순자산 데이터가 없습니다.","trading-assistant.equity.equity":"순자산","trading-assistant.exchange.tradingMode":"거래 모델","trading-assistant.exchange.virtual":"모의거래","trading-assistant.exchange.live":"실제 거래","trading-assistant.exchange.selectExchange":"교환 선택","trading-assistant.exchange.walletAddress":"지갑 주소","trading-assistant.exchange.walletAddressPlaceholder":"지갑 주소(0x로 시작)를 입력하세요.","trading-assistant.exchange.privateKey":"개인 키","trading-assistant.exchange.privateKeyPlaceholder":"개인키(64자)를 입력해주세요.","trading-assistant.exchange.testConnection":"연결 테스트","trading-assistant.exchange.connectionSuccess":"연결 성공","trading-assistant.exchange.connectionFailed":"연결 실패","trading-assistant.exchange.testFailed":"연결 테스트 실패","trading-assistant.exchange.fillComplete":"전체 교환 구성 정보를 입력하세요.","trading-assistant.strategyTypeOptions.ai":"AI 중심 전략","trading-assistant.strategyTypeOptions.indicator":"기술 지표 전략","trading-assistant.strategyTypeOptions.aiDeveloping":"AI 기반 전략 기능은 개발 중이므로 계속 지켜봐 주시기 바랍니다","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"AI 기반 전략 기능 개발 중","trading-assistant.indicatorType.trend":"추세","trading-assistant.indicatorType.momentum":"추진력","trading-assistant.indicatorType.volatility":"변동","trading-assistant.indicatorType.volume":"볼륨","trading-assistant.indicatorType.custom":"사용자 정의","trading-assistant.exchangeNames":{okx:"OKX",binance:"바이낸스",hyperliquid:"초액체",blockchaincom:"블록체인닷컴",coinbaseexchange:"코인베이스",gate:"Gate.io",mexc:"멕시코",kraken:"크라켄",bitfinex:"비트파이넥스",bybit:"바이비트",kucoin:"쿠코인",huobi:"후오비",bitget:"비트겟",bitmex:"비트멕스",deribit:"데리비트",phemex:"페멕스",bitmart:"비트마트",bitstamp:"비트스탬프",bittrex:"비트렉스",poloniex:"폴로닉스",gemini:"쌍둥이자리",cryptocom:"크립토닷컴",bitflyer:"비트플라이어",upbit:"업비트",bithumb:"빗썸",coinone:"코인원",zb:"ZB",lbank:"L은행",bibox:"비박스",bigone:"빅원",bitrue:"바이트루",coinex:"코인엑스",digifinex:"디지파이넥스",ftx:"FTX",ftxus:"FTX 미국",binanceus:"바이낸스 미국",binancecoinm:"바이낸스 코인-M",binanceusdm:"바이낸스 USDⓈ-M",deepcoin:"딥코인"},"ai-trading-assistant.title":"AI 트레이딩 도우미","ai-trading-assistant.strategyList":"전략 목록","ai-trading-assistant.createStrategy":"정책 만들기","ai-trading-assistant.noStrategy":"아직 전략이 없습니다.","ai-trading-assistant.selectStrategy":"세부정보를 보려면 왼쪽에서 전략을 선택하세요.","ai-trading-assistant.startStrategy":"출시 전략","ai-trading-assistant.stopStrategy":"중지 전략","ai-trading-assistant.editStrategy":"편집 전략","ai-trading-assistant.deleteStrategy":"정책 삭제","ai-trading-assistant.status.running":"달리기","ai-trading-assistant.status.stopped":"중지됨","ai-trading-assistant.status.error":"오류","ai-trading-assistant.tabs.tradingRecords":"거래 내역","ai-trading-assistant.tabs.positions":"직위기록","ai-trading-assistant.tabs.aiDecisions":"AI 의사결정 기록","ai-trading-assistant.tabs.equityCurve":"주식곡선","ai-trading-assistant.form.createTitle":"AI 거래 전략 수립","ai-trading-assistant.form.editTitle":"AI 거래 전략 편집","ai-trading-assistant.form.strategyName":"정책 이름","ai-trading-assistant.form.modelId":"AI 모델","ai-trading-assistant.form.modelIdHint":"API 키를 구성하지 않고 시스템 OpenRouter 서비스 사용","ai-trading-assistant.form.decideInterval":"결정 간격","ai-trading-assistant.form.decideInterval5m":"5분","ai-trading-assistant.form.decideInterval10m":"10분","ai-trading-assistant.form.decideInterval30m":"30분","ai-trading-assistant.form.decideInterval1h":"1시간","ai-trading-assistant.form.decideInterval4h":"4시간","ai-trading-assistant.form.decideInterval1d":"1일","ai-trading-assistant.form.decideInterval1w":"1주","ai-trading-assistant.form.decideIntervalHint":"AI가 결정을 내리는 시간 간격","ai-trading-assistant.form.runPeriod":"실행 주기","ai-trading-assistant.form.runPeriodHint":"전략 실행의 시작 시간과 종료 시간","ai-trading-assistant.form.startDate":"시작일","ai-trading-assistant.form.endDate":"종료일","ai-trading-assistant.form.qdtCostTitle":"QDT 공제 지침","ai-trading-assistant.form.qdtCostHint":"각 AI 결정에 대해 {cost} QDT가 차감됩니다. 귀하의 계정에 충분한 QDT 잔액이 있는지 확인하십시오. 전략을 실행하는 동안 각 결정에 대해 수수료가 실시간으로 차감됩니다.","ai-trading-assistant.form.apiKey":"API 키","ai-trading-assistant.form.exchange":"교환 선택","ai-trading-assistant.form.secretKey":"비밀키","ai-trading-assistant.form.passphrase":"암호","ai-trading-assistant.form.testConnection":"연결 테스트","ai-trading-assistant.form.symbol":"거래 쌍","ai-trading-assistant.form.symbolHint":"거래할 거래쌍을 선택하세요","ai-trading-assistant.form.initialCapital":"투자금액(마진)","ai-trading-assistant.form.leverage":"여러 가지 활용","ai-trading-assistant.form.timeframe":"기간","ai-trading-assistant.form.timeframe1m":"1분","ai-trading-assistant.form.timeframe5m":"5분","ai-trading-assistant.form.timeframe15m":"15분","ai-trading-assistant.form.timeframe30m":"30분","ai-trading-assistant.form.timeframe1H":"1시간","ai-trading-assistant.form.timeframe4H":"4시간","ai-trading-assistant.form.timeframe1D":"1일","ai-trading-assistant.form.marketType":"시장 유형","ai-trading-assistant.form.marketTypeFutures":"계약","ai-trading-assistant.form.marketTypeSpot":"스팟","ai-trading-assistant.form.totalPnl":"총손익","ai-trading-assistant.form.customPrompt":"맞춤 프롬프트 단어","ai-trading-assistant.form.customPromptHint":"선택 사항, AI 거래 전략 및 의사 결정 논리를 사용자 정의하는 데 사용됩니다.","ai-trading-assistant.form.cancel":"취소","ai-trading-assistant.form.prev":"이전 단계","ai-trading-assistant.form.next":"다음 단계","ai-trading-assistant.form.confirmCreate":"생성 확인","ai-trading-assistant.form.confirmEdit":"변경사항 확인","ai-trading-assistant.messages.createSuccess":"전략이 성공적으로 생성되었습니다.","ai-trading-assistant.messages.createFailed":"정책을 생성하지 못했습니다.","ai-trading-assistant.messages.updateSuccess":"정책 업데이트 성공","ai-trading-assistant.messages.updateFailed":"정책 업데이트 실패","ai-trading-assistant.messages.deleteSuccess":"정책 삭제 성공","ai-trading-assistant.messages.deleteFailed":"정책 삭제 실패","ai-trading-assistant.messages.startSuccess":"전략이 성공적으로 시작되었습니다","ai-trading-assistant.messages.startFailed":"정책을 시작하지 못했습니다.","ai-trading-assistant.messages.stopSuccess":"전략이 성공적으로 중지되었습니다.","ai-trading-assistant.messages.stopFailed":"중지 전략이 실패했습니다.","ai-trading-assistant.messages.loadFailed":"정책 목록을 가져오지 못했습니다.","ai-trading-assistant.messages.loadDecisionsFailed":"AI 결정 기록을 가져오지 못했습니다.","ai-trading-assistant.messages.deleteConfirm":"이 정책을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.","ai-trading-assistant.placeholders.inputStrategyName":"정책 이름을 입력하세요.","ai-trading-assistant.placeholders.selectModelId":"AI 모델을 선택해 주세요","ai-trading-assistant.placeholders.selectDecideInterval":"결정 간격을 선택하세요.","ai-trading-assistant.placeholders.startTime":"시작 시간","ai-trading-assistant.placeholders.endTime":"종료 시간","ai-trading-assistant.placeholders.inputApiKey":"API 키를 입력하세요","ai-trading-assistant.placeholders.selectExchange":"교환을 선택해주세요","ai-trading-assistant.placeholders.inputSecretKey":"비밀키를 입력해주세요","ai-trading-assistant.placeholders.inputPassphrase":"암호를 입력하세요","ai-trading-assistant.placeholders.selectSymbol":"다음과 같은 거래쌍을 선택하세요: BTC/USDT","ai-trading-assistant.placeholders.selectTimeframe":"기간을 선택하세요.","ai-trading-assistant.placeholders.inputCustomPrompt":"맞춤 프롬프트 단어를 입력하세요(선택사항).","ai-trading-assistant.validation.strategyNameRequired":"정책 이름을 입력하세요.","ai-trading-assistant.validation.modelIdRequired":"AI 모델을 선택해 주세요","ai-trading-assistant.validation.runPeriodRequired":"실행 주기를 선택하세요.","ai-trading-assistant.validation.apiKeyRequired":"API 키를 입력하세요","ai-trading-assistant.validation.exchangeRequired":"교환을 선택해주세요","ai-trading-assistant.validation.secretKeyRequired":"비밀키를 입력해주세요","ai-trading-assistant.validation.symbolRequired":"거래쌍을 선택해주세요","ai-trading-assistant.validation.initialCapitalRequired":"투자금액을 입력해주세요.","ai-trading-assistant.table.time":"시간","ai-trading-assistant.table.type":"유형","ai-trading-assistant.table.price":"가격","ai-trading-assistant.table.amount":"수량","ai-trading-assistant.table.value":"금액","ai-trading-assistant.table.symbol":"거래 쌍","ai-trading-assistant.table.side":"방향","ai-trading-assistant.table.size":"포지션 수량","ai-trading-assistant.table.entryPrice":"개장 가격","ai-trading-assistant.table.currentPrice":"현재 가격","ai-trading-assistant.table.unrealizedPnl":"미실현 손익","ai-trading-assistant.table.profit":"이익과 손실","ai-trading-assistant.table.openLong":"길게 열다","ai-trading-assistant.table.closeLong":"핀듀오","ai-trading-assistant.table.openShort":"오픈 쇼트","ai-trading-assistant.table.closeShort":"비어 있음","ai-trading-assistant.table.addLong":"가돗","ai-trading-assistant.table.addShort":"짧게 추가하다","ai-trading-assistant.table.closeShortProfit":"숏 포지션에서 이익을 얻으세요","ai-trading-assistant.table.closeShortStop":"손실 중지","ai-trading-assistant.table.closeLongProfit":"오래 멈추고 이익을 얻으십시오","ai-trading-assistant.table.closeLongStop":"손실 중지","ai-trading-assistant.table.buy":"사다","ai-trading-assistant.table.sell":"팔다","ai-trading-assistant.table.long":"오래 가세요","ai-trading-assistant.table.short":"짧은","ai-trading-assistant.table.hold":"보류","ai-trading-assistant.table.reasoning":"분석 이유","ai-trading-assistant.table.decisions":"의사결정","ai-trading-assistant.table.riskAssessment":"위험 평가","ai-trading-assistant.table.confidence":"자신감","ai-trading-assistant.table.totalRecords":"총 {total}개 기록","ai-trading-assistant.table.noPositions":"아직 직책이 없습니다.","ai-trading-assistant.detail.title":"전략 세부정보","ai-trading-assistant.equity.noData":"아직 순자산 데이터가 없습니다.","ai-trading-assistant.equity.equity":"순자산","ai-trading-assistant.exchange.testFailed":"연결 테스트 실패","ai-trading-assistant.exchange.connectionSuccess":"연결 성공","ai-trading-assistant.exchange.connectionFailed":"연결 실패","ai-trading-assistant.form.advancedSettings":"고급 설정","ai-trading-assistant.form.orderMode":"주문 모드","ai-trading-assistant.form.orderModeMaker":"메이커","ai-trading-assistant.form.orderModeTaker":"시장가(테이커)","ai-trading-assistant.form.orderModeHint":"지정가 주문 모드는 지정가 주문을 사용하며 처리 수수료가 더 낮습니다. 시장 가격 모드는 즉시 실행되며 처리 수수료가 더 높습니다.","ai-trading-assistant.form.makerWaitSec":"지정가 주문 대기 시간(초)","ai-trading-assistant.form.makerWaitSecHint":"주문 후 거래가 완료될 때까지 기다리는 시간입니다. 취소하고 시간 초과 후 다시 시도하세요.","ai-trading-assistant.form.makerRetries":"보류 중인 주문에 대한 재시도 횟수","ai-trading-assistant.form.makerRetriesHint":"보류 중인 주문이 실행되지 않을 때 최대 재시도 횟수","ai-trading-assistant.form.fallbackToMarket":"지정가 주문이 실패하고 시장 가격이 하락합니다.","ai-trading-assistant.form.fallbackToMarketHint":"개시/청산 보류 주문이 완료되지 않은 경우 거래가 완료되었는지 확인하기 위해 시장가 주문으로 다운그레이드해야 하는지 여부.","ai-trading-assistant.form.marginMode":"마진 모드","ai-trading-assistant.form.marginModeCross":"전체 창고","ai-trading-assistant.form.marginModeIsolated":"고립된 위치","ai-analysis.title":"퀀트 트레이딩 엔진","ai-analysis.system.online":"온라인","ai-analysis.system.agents":"대리인","ai-analysis.system.active":"활성","ai-analysis.system.stage":"무대","ai-analysis.panel.roster":"에이전트 라인업","ai-analysis.panel.thinking":"생각하다...","ai-analysis.panel.done":"완료","ai-analysis.panel.standby":"대기","ai-analysis.input.title":"퀀트 트레이딩 엔진","ai-analysis.input.placeholder":"대상 자산 선택(예: BTC/USDT)","ai-analysis.input.watchlist":"옵션 주식","ai-analysis.input.start":"분석 시작","ai-analysis.input.recent":"최근 작업:","ai-analysis.vis.stage":"무대","ai-analysis.vis.processing":"처리","ai-analysis.result.complete":"분석 완료","ai-analysis.result.signal":"최종 신호","ai-analysis.result.confidence":"자신감:","ai-analysis.result.new":"새로운 분석","ai-analysis.result.full":"전체 보고서 보기","ai-analysis.logs.title":"시스템 로그","ai-analysis.modal.title":"기밀 보고서","ai-analysis.modal.fundamental":"기본적 분석","ai-analysis.modal.technical":"기술적 분석","ai-analysis.modal.sentiment":"감정 분석","ai-analysis.modal.risk":"위험 평가","ai-analysis.stage.idle":"대기","ai-analysis.stage.1":"1단계: 다차원 분석","ai-analysis.stage.2":"2단계: 장단기 토론","ai-analysis.stage.3":"3단계: 전략적 계획","ai-analysis.stage.4":"네 번째 단계: 위험 통제 검토","ai-analysis.stage.complete":"완료","ai-analysis.agent.investment_director":"투자 이사","ai-analysis.agent.role.investment_director":"종합 분석 및 최종 결론","ai-analysis.agent.market":"시장 분석가","ai-analysis.agent.role.market":"기술 및 시장 데이터","ai-analysis.agent.fundamental":"기본 분석가","ai-analysis.agent.role.fundamental":"재무 및 평가","ai-analysis.agent.technical":"기술 분석가","ai-analysis.agent.role.technical":"기술 지표 및 차트","ai-analysis.agent.news":"뉴스 분석가","ai-analysis.agent.role.news":"글로벌 뉴스 필터","ai-analysis.agent.sentiment":"감정 분석가","ai-analysis.agent.role.sentiment":"사회적 및 정서적","ai-analysis.agent.risk":"위험 분석가","ai-analysis.agent.role.risk":"기본 리스크 점검","ai-analysis.agent.bull":"낙관적인 연구원","ai-analysis.agent.role.bull":"성장촉매 채굴","ai-analysis.agent.bear":"약세 연구원","ai-analysis.agent.role.bear":"위험 및 결함 조사","ai-analysis.agent.manager":"연구 관리자","ai-analysis.agent.role.manager":"토론 진행자","ai-analysis.agent.trader":"상인","ai-analysis.agent.role.trader":"경영 전략가","ai-analysis.agent.risky":"활동가 분석가","ai-analysis.agent.role.risky":"공격적인 전략","ai-analysis.agent.neutral":"균형 분석가","ai-analysis.agent.role.neutral":"균형 전략","ai-analysis.agent.safe":"보수적인 분석가","ai-analysis.agent.role.safe":"보수적 전략","ai-analysis.agent.cro":"위험 통제 관리자(CRO)","ai-analysis.agent.role.cro":"최종 의사결정 권한","ai-analysis.script.market":"주요 거래소에서 OHLCV 데이터를 가져오는 중...","ai-analysis.script.fundamental":"분기별 재무 보고서를 검색하는 중...","ai-analysis.script.technical":"기술지표 및 차트 패턴 분석 중...","ai-analysis.script.news":"글로벌 금융 뉴스를 스캔하는 중...","ai-analysis.script.sentiment":"소셜미디어 트렌드 분석…","ai-analysis.script.risk":"역사적 변동성을 계산하는 중...","invite.inviteLink":"초대링크","invite.copy":"링크 복사","invite.copySuccess":"성공적으로 복사되었습니다!","invite.copyFailed":"복사하지 못했습니다. 수동으로 복사하세요.","invite.noInviteLink":"초대 링크가 생성되지 않았습니다.","invite.totalInvites":"누적 초대","invite.totalReward":"누적 보상","invite.rules":"초대 규칙","invite.rule1":"친구를 등록하도록 성공적으로 초대할 때마다 보상을 받게 됩니다.","invite.rule2":"초대한 친구가 첫 번째 거래를 완료하면 추가 보상을 받을 수 있습니다.","invite.rule3":"초대 보상은 귀하의 계정으로 직접 전송됩니다","invite.inviteList":"초대 목록","invite.tasks":"선교 센터","invite.inviteeName":"초대받은 사람","invite.inviteTime":"초대 시간","invite.status":"상태","invite.reward":"보상","invite.active":"활성","invite.inactive":"활성화되지 않음","invite.completed":"완료됨","invite.claimed":"접수됨","invite.pending":"완료 예정","invite.goToTask":"완료하다","invite.claimReward":"보상 청구","invite.verify":"확인 완료","invite.verifySuccess":"확인에 성공했습니다. 작업 완료","invite.verifyNotCompleted":"작업이 아직 완료되지 않았습니다. 먼저 작업을 완료하세요.","invite.verifyFailed":"확인에 실패했습니다. 나중에 다시 시도해 주세요.","invite.claimSuccess":"{reward} QDT를 성공적으로 받았습니다!","invite.claimFailed":"수집하지 못했습니다. 나중에 다시 시도해 주세요.","invite.totalRecords":"총 {total}개 기록","invite.task.twitter.title":"X(트위터)로 리트윗","invite.task.twitter.desc":"공식 트윗을 X(트위터) 계정에 공유하세요","invite.task.youtube.title":"YouTube 채널을 팔로우하세요","invite.task.youtube.desc":"공식 YouTube 채널을 구독하고 팔로우하세요.","invite.task.telegram.title":"텔레그램 그룹에 가입하세요","invite.task.telegram.desc":"공식 텔레그램 커뮤니티 그룹에 가입하세요","invite.task.discord.title":"Discord 서버에 가입하세요","invite.task.discord.desc":"Discord 커뮤니티 서버에 가입하세요",message:"-","layouts.usermenu.dialog.title":"정보","layouts.usermenu.dialog.content":"정말로 로그아웃하시겠습니까?","layouts.userLayout.title":"불확실성 속에서 진실을 찾아라","dashboard.indicator.boundary.message":"Note: The indicator script only computes plots + buy/sell signals. Position sizing, risk, scaling, fees/slippage belong to execution config.","dashboard.indicator.boundary.indicatorRule":"Keep the script to buy/sell only (and set df['buy']/df['sell']). Do NOT implement position management, TP/SL, scaling in the script.","dashboard.indicator.boundary.backtestRule":"Rule: If a bar has a main signal (buy/sell → open/close/reverse), scaling in/out is skipped on the same bar.","dashboard.indicator.guide.title":"Python Indicator & Strategy Development Guide","dashboard.indicator.guide.intro":"This platform supports writing custom technical indicators and trading signals using Python. The system includes built-in pandas and numpy data analysis libraries. You can use standard DataFrame operations to process K-line data and draw charts or mark buy/sell signals.","dashboard.indicator.guide.section1.title":"1. Runtime Environment & Predefined Variables","dashboard.indicator.guide.section1.env":"Your code runs in a browser-based Python environment (Pyodide).","dashboard.indicator.guide.section1.libs":"Pre-installed Libraries","dashboard.indicator.guide.section1.libsDesc":"The following libraries are imported by default, no need to import again:","dashboard.indicator.guide.section1.libsList":"pandas (pd), numpy (np), math, json","dashboard.indicator.guide.section1.data":"Input Data: df","dashboard.indicator.guide.section1.dataDesc":"The system automatically converts current K-line data into a Pandas DataFrame object, variable name is df.","dashboard.indicator.guide.section1.dataColumns":"df contains the following columns (all float type):","dashboard.indicator.guide.section1.dataColumnsList":"time (timestamp, seconds), open, high, low, close, volume","dashboard.indicator.guide.section1.dataNote":"Data index is arranged from old to new (0 is the earliest data, last row is the latest data).","dashboard.indicator.guide.section1.dataIndex":"Important: df index is timestamp (DatetimeIndex), please preserve the index, avoid using .values which loses the index.","dashboard.indicator.guide.section2.title":"2. Parameter Definition","dashboard.indicator.guide.section2.desc":"You can define variables as parameters at the beginning of your code. The system will try to parse statements like variable = value as adjustable parameters.","dashboard.indicator.guide.section2.example":"Parameter Example","dashboard.indicator.guide.section2.exampleCode":"span = 20 or multiplier = 2.0","dashboard.indicator.guide.section3.title":"3. Backtest Signal Setup (Important!)","dashboard.indicator.guide.section3.desc":"If you want your indicator to support backtesting, you must set the following two columns in your code:","dashboard.indicator.guide.section3.backtestRequired":"Required for Backtesting:","dashboard.indicator.guide.section3.backtestBuySignal":"df['buy_signal'] - Boolean Series, True indicates buy signal","dashboard.indicator.guide.section3.backtestSellSignal":"df['sell_signal'] - Boolean Series, True indicates sell signal","dashboard.indicator.guide.section3.backtestExample":"Example:","dashboard.indicator.guide.section3.backtestExampleCode":"df['buy_signal'] = condition_buy
df['sell_signal'] = condition_sell","dashboard.indicator.guide.section3.backtestNote":"Note: Even if you only set output.signals for chart display, you must set these two columns to enable backtesting.","dashboard.indicator.guide.section4.title":"4. Output Requirements: output","dashboard.indicator.guide.section4.desc":"At the end of code execution, you must define a dictionary named output to tell the chart how to display results.","dashboard.indicator.guide.section4.fields":"The output dictionary contains the following fields:","dashboard.indicator.guide.section4.plots":"plots - For drawing lines (e.g., moving averages, RSI)","dashboard.indicator.guide.section4.signals":"signals - For marking buy/sell signals (e.g., arrows, labels)","dashboard.indicator.guide.section4.name":"name - Indicator name (optional)","dashboard.indicator.guide.section4.calculatedVars":"calculatedVars - Calculated variables (optional, for displaying additional information)","dashboard.indicator.guide.section5.title":"5. Plot Configuration (Plots)","dashboard.indicator.guide.section5.desc":"Each object in the plots list represents a line.","dashboard.indicator.guide.section5.table.field":"Field","dashboard.indicator.guide.section5.table.type":"Type","dashboard.indicator.guide.section5.table.required":"Required","dashboard.indicator.guide.section5.table.requiredYes":"Yes","dashboard.indicator.guide.section5.table.requiredNo":"No","dashboard.indicator.guide.section5.table.desc":"Description","dashboard.indicator.guide.section5.table.name":"The name of the indicator line, displayed in the legend","dashboard.indicator.guide.section5.table.data":"Data list, length must match the number of rows in df. Recommended to use series.tolist()","dashboard.indicator.guide.section5.table.color":"Line color (Hex format, e.g. '#ff0000'). If not filled, the system will automatically assign","dashboard.indicator.guide.section5.table.typeDesc":"Chart type, default is 'line'","dashboard.indicator.guide.section5.table.overlay":"Important. True means display on main chart (with K-line), False means display on sub-chart (independent area)","dashboard.indicator.guide.section5.example":"Example: Draw Simple Moving Average (SMA)","dashboard.indicator.guide.section5.exampleCalc":"Calculate SMA","dashboard.indicator.guide.section5.exampleOutput":"Construct Output","dashboard.indicator.guide.section5.exampleOverlay":"Display on main chart","dashboard.indicator.guide.section6.title":"6. Signal Markers (Signals)","dashboard.indicator.guide.section6.desc":"signals are used to mark buy/sell points on specific K-lines through icons or text. Note: This is only for chart display. The backtest system uses df['buy_signal'] and df['sell_signal'].","dashboard.indicator.guide.section6.table.type":"Signal type: 'buy' (buy, marked below K-line) or 'sell' (sell, marked above K-line)","dashboard.indicator.guide.section6.table.data":"Signal data list. Fill price value at signal positions, fill None (or np.nan) at non-signal positions","dashboard.indicator.guide.section6.table.text":'Text displayed on the label (e.g. "B", "S", "Buy", "Sell")',"dashboard.indicator.guide.section6.table.color":"Marker color","dashboard.indicator.guide.section6.hint":"The system automatically handles positioning.","dashboard.indicator.guide.section6.buy":"Markers will be automatically positioned below the Low of the current K-line","dashboard.indicator.guide.section6.sell":"Markers will be automatically positioned above the High of the current K-line","dashboard.indicator.guide.section6.example":"Example: Draw Buy/Sell Signals","dashboard.indicator.guide.section6.exampleInit":"Initialize signal list, fill all with None","dashboard.indicator.guide.section6.exampleLogic":"Simple logic: mark buy when close price is greater than open price","dashboard.indicator.guide.section6.exampleNote":"In actual logic, please use loops or vectorized operations","dashboard.indicator.guide.section6.examplePrice":"Record price","dashboard.indicator.guide.section6.exampleText":"Buy","dashboard.indicator.guide.section7.title":"7. Complete Code Examples","dashboard.indicator.guide.section7.exampleA":"Example A: Dual EMA Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleACode":'# 1. Calculate indicators
df[\'ema_fast\'] = df[\'close\'].ewm(span=5, adjust=False).mean()
df[\'ema_slow\'] = df[\'close\'].ewm(span=13, adjust=False).mean()

# 2. Calculate crossover signals
cross_up = (df[\'ema_fast\'] > df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) <= df[\'ema_slow\'].shift(1))
cross_down = (df[\'ema_fast\'] < df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) >= df[\'ema_slow\'].shift(1))

# 3. 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = cross_up
df[\'close_long\'] = cross_down
df[\'open_short\'] = cross_down
df[\'close_short\'] = cross_up

# 4. Generate signal data for chart display
buy_signals = [df[\'low\'].iloc[i] * 0.995 if cross_up.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if cross_down.iloc[i] else None for i in range(len(df))]

# 5. Build output
output = {
"name": "Dual EMA Strategy",
"plots": [
{"name": "EMA 5", "data": df[\'ema_fast\'].tolist(), "color": "#FF6B6B", "overlay": True},
{"name": "EMA 13", "data": df[\'ema_slow\'].tolist(), "color": "#4ECDC4", "overlay": True}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section7.exampleB":"Example B: Bollinger Bands - Chart Display Only","dashboard.indicator.guide.section7.exampleBCode":'# Calculate Bollinger Bands (chart display only, no backtesting)
length = 20
mult = 2.0
df[\'sma\'] = df[\'close\'].rolling(length).mean()
df[\'std\'] = df[\'close\'].rolling(length).std()
df[\'upper\'] = df[\'sma\'] + mult * df[\'std\']
df[\'lower\'] = df[\'sma\'] - mult * df[\'std\']

output = {
"name": "Bollinger Bands",
"plots": [
{"name": "Upper", "data": df[\'upper\'].tolist(), "color": "#FF5252", "overlay": True},
{"name": "Middle", "data": df[\'sma\'].tolist(), "color": "#2196F3", "overlay": True},
{"name": "Lower", "data": df[\'lower\'].tolist(), "color": "#00E676", "overlay": True}
]
}',"dashboard.indicator.guide.section7.exampleC":"Example C: RSI Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleCCode":'# Calculate RSI
delta = df[\'close\'].diff()
up = delta.clip(lower=0)
down = -1 * delta.clip(upper=0)
ema_up = up.ewm(com=13, adjust=False).mean()
ema_down = down.ewm(com=13, adjust=False).mean()
rs = ema_up / ema_down
df[\'rsi\'] = 100 - (100 / (1 + rs))

# Generate trading signals
buy_condition = df[\'rsi\'] < 30 # Oversold buy
sell_condition = df[\'rsi\'] > 70 # Overbought sell

# 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = buy_condition
df[\'close_long\'] = sell_condition
df[\'open_short\'] = sell_condition
df[\'close_short\'] = buy_condition

# Generate chart signals
buy_signals = [df[\'low\'].iloc[i] * 0.995 if buy_condition.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if sell_condition.iloc[i] else None for i in range(len(df))]

output = {
"name": "RSI Strategy",
"plots": [
{"name": "RSI", "data": df[\'rsi\'].tolist(), "color": "#9C27B0", "overlay": False},
{"name": "Overbought", "data": [70] * len(df), "color": "#FF5252", "style": "dashed", "overlay": False},
{"name": "Oversold", "data": [30] * len(df), "color": "#00E676", "style": "dashed", "overlay": False}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section6.param":"Parameters","dashboard.indicator.guide.section6.calc":"Calculate","dashboard.indicator.guide.section6.output":"Output","dashboard.indicator.guide.section6.generate":"Generate signal data (initialize with None)","dashboard.indicator.guide.section6.subchart":"Display on sub-chart","dashboard.indicator.guide.section8.title":"8. Frequently Asked Questions (FAQ)","dashboard.indicator.guide.section8.q1":"Q: Why can't my indicator be backtested?","dashboard.indicator.guide.section8.a1":"A: The backtest system requires NEW signal columns: df['open_long'], df['close_long'], df['open_short'], df['close_short'] (boolean). Even if you set output.signals for chart display, you must set these columns to enable backtesting.","dashboard.indicator.guide.section8.q2":"Q: Data length mismatch?","dashboard.indicator.guide.section8.a2":"A: The data list in plots and signals must have exactly the same length as the K-line data. If you use df['xxx'].tolist(), there is usually no problem.","dashboard.indicator.guide.section8.q3":"Q: How to handle NaN (empty values)?","dashboard.indicator.guide.section8.a3":"A: Pandas calculations (such as rolling mean) will produce NaN at the beginning. The system will automatically convert NaN to null for chart rendering. You don't need to manually clean it, but if you need specific logic, you can use df.fillna(0) or other methods.","dashboard.indicator.guide.section8.q4":"Q: Index mismatch causing all signals to be NaN?","dashboard.indicator.guide.section8.a4":"A: Please ensure you preserve the original df index (timestamp). Avoid using .values to create new Series. Use columns directly like df['close'] for operations.","dashboard.indicator.guide.section8.q5":"Q: Can I use third-party network libraries?","dashboard.indicator.guide.section8.a5":"A: No. The runtime environment is a browser sandbox and cannot use libraries like requests to request external APIs, nor can it install additional pip packages. Limited to built-in libraries such as pandas, numpy, math, json.","dashboard.indicator.guide.section8.q6":"Q: How to debug code?","dashboard.indicator.guide.section8.a6":"A: If the chart does not display indicators, it is usually because the Python code has an error. Please check for syntax errors or array index out of bounds. It is recommended to debug the algorithm logic in a local Python environment first, then copy it in.","dashboard.indicator.guide.section8.q7":"Q: Backtest shows 0 signals?","dashboard.indicator.guide.section8.a7":"A: Please check the data type of df['open_long']/df['close_long']/df['open_short']/df['close_short']. They should be boolean (True/False), not numeric. Use condition.fillna(False).astype(bool) to ensure correct type.","dashboard.indicator.backtest.commissionHint":"Charged on notional value (incl. leverage) per trade; both entry & exit are deducted from balance.","dashboard.indicator.backtest.historyTitle":"Backtest History","dashboard.indicator.backtest.historyRefresh":"Refresh","dashboard.indicator.backtest.historyView":"View","dashboard.indicator.backtest.historyNoData":"No backtest history","dashboard.indicator.backtest.historyUseCurrent":"Only current symbol/timeframe","dashboard.indicator.backtest.historyFilterSymbol":"Symbol","dashboard.indicator.backtest.historyFilterTimeframe":"Timeframe","dashboard.indicator.backtest.historyApply":"Apply filters","dashboard.indicator.backtest.historyAIAnalyze":"AI Analyze","dashboard.indicator.backtest.historyAIAnalyzeTitle":"AI Suggestions","dashboard.indicator.backtest.historyNoAIResult":"No AI analysis result","dashboard.indicator.backtest.historyRunId":"Run ID","dashboard.indicator.backtest.historyCreatedAt":"Time","dashboard.indicator.backtest.historyRange":"Range","dashboard.indicator.backtest.historyStatus":"Status","dashboard.indicator.backtest.historyStatusSuccess":"Success","dashboard.indicator.backtest.historyStatusFailed":"Failed","dashboard.indicator.backtest.historyActions":"Actions","trading-assistant.exchange.ipWhitelistTip":"Please add the following IPs to the whitelist in your exchange API settings:","signal-robot.title":"Signal Robot Console","signal-robot.createBot":"Create New Bot","signal-robot.search.nameOrSymbol":"Name/Symbol","signal-robot.search.placeholder":"Search bot name or symbol","signal-robot.search.status":"Status","signal-robot.search.statusAll":"All","signal-robot.search.statusRunning":"Running","signal-robot.search.statusPaused":"Paused","signal-robot.search.query":"Query","signal-robot.search.reset":"Reset","signal-robot.table.botName":"Bot Name","signal-robot.table.symbolTimeframe":"Symbol/Timeframe","signal-robot.table.triggerStrategy":"Trigger Strategy","signal-robot.table.notificationChannels":"Notification Channels","signal-robot.table.status":"Status","signal-robot.table.action":"Action","signal-robot.table.triggerConditions":"{count} trigger conditions","signal-robot.table.monitoring":"Monitoring","signal-robot.table.paused":"Paused","signal-robot.table.edit":"Edit","signal-robot.table.pause":"Pause","signal-robot.table.start":"Start","signal-robot.table.delete":"Delete","signal-robot.table.deleteConfirm":"Are you sure you want to delete this bot?","signal-robot.table.deleteSuccess":"Deleted successfully","signal-robot.table.startSuccess":"Bot started","signal-robot.table.pauseSuccess":"Bot paused","signal-robot.channel.telegram":"Telegram","signal-robot.channel.discord":"Discord","signal-robot.channel.email":"Email","signal-robot.channel.webhook":"Webhook","signal-robot.channel.browser":"Browser Push","signal-robot.modal.createTitle":"Create New Signal Robot","signal-robot.modal.editTitle":"Edit Signal Robot","signal-robot.modal.step.basic":"Basic Settings","signal-robot.modal.step.entry":"Entry Strategy","signal-robot.modal.step.position":"Position Management","signal-robot.modal.step.risk":"Risk Control","signal-robot.modal.step.notify":"Notification Config","signal-robot.modal.prev":"Previous","signal-robot.modal.next":"Next","signal-robot.modal.preview":"Preview Backtest","signal-robot.modal.complete":"Complete & Run","signal-robot.modal.saveSuccess":"Saved successfully","signal-robot.modal.previewDeveloping":"Preview feature is under development...","signal-robot.modal.basicInfoRequired":"Please complete basic information","signal-robot.basic.alert":"Set basic information for the bot","signal-robot.basic.title":"Basic Information","signal-robot.basic.botName":"Bot Name","signal-robot.basic.botNamePlaceholder":"e.g.: BTC SuperTrend Strategy","signal-robot.basic.symbol":"Trading Pair","signal-robot.basic.symbolPlaceholder":"Select from watchlist","signal-robot.basic.noWatchlist":"No watchlist items, please add in market page first","signal-robot.basic.timeframe":"K-Line Period","signal-robot.basic.timeframe15m":"15 Minutes","signal-robot.basic.timeframe30m":"30 Minutes","signal-robot.basic.timeframe1h":"1 Hour","signal-robot.basic.timeframe4h":"4 Hours","signal-robot.basic.timeframe1d":"1 Day","signal-robot.basic.autoNameSuggestion":"{symbol} Signal Robot","signal-robot.entry.alert":"Trigger entry signal when all conditions below are met","signal-robot.entry.condition":"Condition {index}","signal-robot.entry.indicator":"Indicator","signal-robot.entry.indicatorSupertrend":"SuperTrend","signal-robot.entry.indicatorEma":"EMA (Exponential Moving Average)","signal-robot.entry.indicatorRsi":"RSI (Relative Strength Index)","signal-robot.entry.indicatorMacd":"MACD","signal-robot.entry.indicatorBollinger":"Bollinger Bands","signal-robot.entry.atrPeriod":"ATR Period","signal-robot.entry.multiplier":"Multiplier","signal-robot.entry.triggerSignal":"Trigger Signal","signal-robot.entry.signalTrendBullish":"Trend Bullish","signal-robot.entry.signalTrendBearish":"Trend Bearish","signal-robot.entry.signalIsUptrend":"Is Uptrend","signal-robot.entry.signalIsDowntrend":"Is Downtrend","signal-robot.entry.period":"Period","signal-robot.entry.compareCondition":"Compare Condition","signal-robot.entry.priceAbove":"Price > EMA (Price Above)","signal-robot.entry.priceBelow":"Price < EMA (Price Below)","signal-robot.entry.crossUp":"Price Crosses Above EMA (Golden Cross)","signal-robot.entry.crossDown":"Price Crosses Below EMA (Death Cross)","signal-robot.entry.compare":"Compare","signal-robot.entry.greaterThan":"Greater Than","signal-robot.entry.lessThan":"Less Than","signal-robot.entry.crossUpShort":"Cross Up","signal-robot.entry.crossDownShort":"Cross Down","signal-robot.entry.threshold":"Threshold","signal-robot.entry.selectIndicator":"Please select an indicator to configure parameters","signal-robot.entry.addCondition":"Add Condition","signal-robot.position.alert":"Configure initial position size, leverage and pyramiding rules","signal-robot.position.basicTitle":"Basic Position Management","signal-robot.position.initialSize":"Initial Size (Capital %)","signal-robot.position.initialSizeHint":"Recommended 5% - 20%","signal-robot.position.leverage":"Leverage","signal-robot.position.leverageHint":"Please ensure your exchange account supports this leverage","signal-robot.position.maxPyramiding":"Max Pyramiding Times","signal-robot.position.maxPyramidingHint":"0 means no pyramiding","signal-robot.position.pyramidingTitle":"Pyramiding Rules","signal-robot.position.pyramidingEnabled":"Enabled","signal-robot.position.pyramidingDisabled":"Disabled","signal-robot.position.pyramidingCondition":"Pyramiding Trigger Condition","signal-robot.position.priceRisePct":"Price Rises (Long) / Falls (Short)","signal-robot.position.profitPct":"Profit Reaches","signal-robot.position.triggerThreshold":"Trigger Threshold (%)","signal-robot.position.triggerThresholdHint":"e.g. 3%: add position once every 3% rise","signal-robot.position.addSize":"Single Add Size (Capital %)","signal-robot.position.pyramidingDisabledHint":"Pyramiding disabled, only initial position will be executed","signal-robot.risk.alert":"Configure take profit, stop loss and exit rules","signal-robot.risk.stopLossTitle":"Stop Loss","signal-robot.risk.stopLossEnabled":"Enabled","signal-robot.risk.stopLossDisabled":"Disabled","signal-robot.risk.stopLossType":"Stop Loss Type","signal-robot.risk.stopLossFixedPct":"Fixed Percentage","signal-robot.risk.stopLossAtrMultiplier":"ATR Multiplier","signal-robot.risk.stopLossValue":"Value","signal-robot.risk.stopLossFixedHint":"e.g. 2%: stop loss when loss reaches 2%","signal-robot.risk.stopLossAtrHint":"e.g. 2.0: stop loss when price touches ATR*2.0","signal-robot.risk.stopLossDisabledHint":"Stop loss disabled (high risk)","signal-robot.risk.trailingStopTitle":"Trailing Stop","signal-robot.risk.activationProfit":"Activation Profit (%)","signal-robot.risk.activationProfitHint":"Start trailing when profit reaches this level","signal-robot.risk.callbackPct":"Callback (%)","signal-robot.risk.callbackPctHint":"Trigger take profit when price falls from peak by this percentage","signal-robot.risk.trailingStopDisabledHint":"Trailing stop disabled","signal-robot.risk.otherExitTitle":"Other Exit Rules","signal-robot.risk.signalExit":"Allow Signal Exit","signal-robot.risk.signalExitHint":"Close position immediately when reverse signal appears (e.g. close long when short signal appears)","signal-robot.notify.alert":"Configure notification methods when signal is triggered","signal-robot.notify.channelTitle":"Notification Channels","signal-robot.notify.discordWebhook":"Discord Webhook","signal-robot.notify.genericWebhook":"Generic Webhook","signal-robot.notify.webhookUrl":"Webhook URL","signal-robot.notify.webhookUrlPlaceholder":"https://example.com/webhook","signal-robot.notify.discordUrl":"Discord URL","signal-robot.notify.discordUrlPlaceholder":"https://discord.com/api/webhooks/...","signal-robot.operator.greaterThan":"Greater Than","signal-robot.operator.lessThan":"Less Than","signal-robot.operator.equal":"Equal","signal-robot.operator.goldenCross":"Golden Cross","signal-robot.operator.deathCross":"Death Cross","signal-robot.operator.increaseBy":"Increase By","signal-robot.operator.decreaseBy":"Decrease By","signal-robot.indicator.price":"Price","signal-robot.indicator.rsi":"RSI","signal-robot.indicator.kdjK":"KDJ(K)","signal-robot.indicator.kdjJ":"KDJ(J)","signal-robot.indicator.macd":"MACD","signal-robot.indicator.macdHist":"MACD Histogram","signal-robot.indicator.bollingerUp":"Bollinger Upper","signal-robot.indicator.bollingerLow":"Bollinger Lower","signal-robot.indicator.volume":"Volume","signal-robot.indicator.changePct1h":"1H Change %","signal-robot.indicator.changePct24h":"24H Change %","signal-robot.indicator.signalLine":"Signal Line","settings.group.agent_memory":"메모리/리플렉션 설정","settings.group.reflection_worker":"자동 리플렉션 검증 워커","settings.field.ENABLE_AGENT_MEMORY":"에이전트 메모리 사용","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"벡터 검색 사용(로컬)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"임베딩 차원","settings.field.AGENT_MEMORY_TOP_K":"Top-K 조회 개수","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"후보 윈도우 크기","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"시간 감쇠 반감기(일)","settings.field.AGENT_MEMORY_W_SIM":"유사도 가중치","settings.field.AGENT_MEMORY_W_RECENCY":"시간 가중치","settings.field.AGENT_MEMORY_W_RETURNS":"수익 가중치","settings.field.ENABLE_REFLECTION_WORKER":"자동 검증 사용","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"검증 주기(초)","profile.notifications.title":"알림 설정","profile.notifications.hint":"기본 알림 방법을 설정하세요. 자산 모니터링 및 알림 생성 시 자동으로 사용됩니다","profile.notifications.defaultChannels":"기본 알림 채널","profile.notifications.browser":"앱 내 알림","profile.notifications.email":"이메일","profile.notifications.phone":"SMS","profile.notifications.telegramBotToken":"Telegram Bot Token","profile.notifications.telegramBotTokenPlaceholder":"Telegram Bot Token을 입력하세요","profile.notifications.telegramBotTokenHint":"@BotFather에서 봇을 만들어 Token을 받으세요","profile.notifications.telegramChatId":"Telegram Chat ID","profile.notifications.telegramPlaceholder":"Telegram Chat ID를 입력하세요 (예: 123456789)","profile.notifications.telegramHint":"@userinfobot에 /start를 보내 Chat ID를 받으세요","profile.notifications.notifyEmail":"알림 이메일","profile.notifications.emailPlaceholder":"알림을 받을 이메일 주소","profile.notifications.emailHint":"기본값은 계정 이메일이며 다른 이메일도 설정 가능","profile.notifications.phonePlaceholder":"전화번호를 입력하세요 (예: +821012345678)","profile.notifications.phoneHint":"관리자가 Twilio 서비스를 설정해야 합니다","profile.notifications.discordWebhook":"Discord Webhook","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"Discord 서버 설정에서 Webhook을 생성하세요","profile.notifications.webhookUrl":"Webhook URL","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"커스텀 Webhook URL, POST JSON으로 알림 전송","profile.notifications.webhookToken":"Webhook Token (선택)","profile.notifications.webhookTokenPlaceholder":"요청 인증용 Bearer Token","profile.notifications.webhookTokenHint":"Authorization: Bearer Token으로 Webhook에 전송","profile.notifications.testBtn":"테스트 알림 보내기","profile.notifications.saveSuccess":"알림 설정이 저장되었습니다","profile.notifications.selectChannel":"최소 하나의 알림 채널을 선택하세요","profile.notifications.fillTelegramToken":"Telegram Bot Token을 입력하세요","profile.notifications.fillTelegram":"Telegram Chat ID를 입력하세요","profile.notifications.fillEmail":"알림 이메일을 입력하세요","profile.notifications.testSent":"테스트 알림이 전송되었습니다. 알림 채널을 확인하세요"},f=(0,e.A)((0,e.A)({},p),y)}}]); \ No newline at end of file diff --git a/frontend/dist/js/lang-ko-KR.051aebbc.js b/frontend/dist/js/lang-ko-KR.051aebbc.js deleted file mode 100644 index 08dfafd..0000000 --- a/frontend/dist/js/lang-ko-KR.051aebbc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[840],{5505:function(a,t,i){i.d(t,{default:function(){return f}});var e=i(57888),s={items_per_page:"/ 쪽",jump_to:"이동하기",jump_to_confirm:"확인하다",page:"",prev_page:"이전 페이지",next_page:"다음 페이지",prev_5:"이전 5 페이지",next_5:"다음 5 페이지",prev_3:"이전 3 페이지",next_3:"다음 3 페이지"},o=i(85505),r={today:"오늘",now:"현재 시각",backToToday:"오늘로 돌아가기",ok:"확인",clear:"지우기",month:"월",year:"년",timeSelect:"시간 선택",dateSelect:"날짜 선택",monthSelect:"달 선택",yearSelect:"연 선택",decadeSelect:"연대 선택",yearFormat:"YYYY년",dateFormat:"YYYY-MM-DD",dayFormat:"Do",dateTimeFormat:"YYYY-MM-DD HH:mm:ss",monthBeforeYear:!1,previousMonth:"이전 달 (PageUp)",nextMonth:"다음 달 (PageDown)",previousYear:"이전 해 (Control + left)",nextYear:"다음 해 (Control + right)",previousDecade:"이전 연대",nextDecade:"다음 연대",previousCentury:"이전 세기",nextCentury:"다음 세기"},n={placeholder:"날짜 선택"},d=n,l={lang:(0,o.A)({placeholder:"날짜 선택",rangePlaceholder:["시작일","종료일"]},r),timePickerLocale:(0,o.A)({},d)},c=l,g=c,b={locale:"ko",Pagination:s,DatePicker:c,TimePicker:d,Calendar:g,Table:{filterTitle:"필터 메뉴",filterConfirm:"확인",filterReset:"초기화",selectAll:"모두 선택",selectInvert:"선택 반전"},Modal:{okText:"확인",cancelText:"취소",justOkText:"확인"},Popconfirm:{okText:"확인",cancelText:"취소"},Transfer:{searchPlaceholder:"여기에 검색하세요",itemUnit:"개",itemsUnit:"개"},Upload:{uploading:"업로드 중...",removeFile:"파일 삭제",uploadError:"업로드 실패",previewFile:"파일 미리보기",downloadFile:"파일 다운로드"},Empty:{description:"데이터 없음"}},m=b,h=i(63164),u=i.n(h),p={antLocale:m,momentName:"ko",momentLocale:u()},y={submit:"제출",save:"저장","submit.ok":"제출 성공","save.ok":"성공적으로 저장되었습니다","menu.welcome":"환영합니다","menu.home":"홈페이지","menu.dashboard":"대시보드","menu.dashboard.indicator":"지표분석","menu.dashboard.community":"지표 커뮤니티","menu.dashboard.analysis":"AI 분석","menu.dashboard.tradingAssistant":"트레이딩 어시스턴트","menu.dashboard.aiTradingAssistant":"AI 트레이딩 도우미","menu.dashboard.signalRobot":"시그널 로봇","menu.dashboard.monitor":"모니터링 페이지","menu.dashboard.workplace":"작업대","menu.form":"양식 페이지","menu.form.basic-form":"기본 형태","menu.form.step-form":"단계별 양식","menu.form.step-form.info":"단계별 양식(이체 정보 입력)","menu.form.step-form.confirm":"단계별 양식(이체정보 확인)","menu.form.step-form.result":"단계별 양식(완료)","menu.form.advanced-form":"고급 양식","menu.list":"목록 페이지","menu.list.table-list":"문의 양식","menu.list.basic-list":"표준 목록","menu.list.card-list":"카드 목록","menu.list.search-list":"검색 목록","menu.list.search-list.articles":"검색 목록(기사)","menu.list.search-list.projects":"검색 목록(프로젝트)","menu.list.search-list.applications":"검색 목록(앱)","menu.profile":"세부정보 페이지","menu.profile.basic":"기본 세부정보 페이지","menu.profile.advanced":"고급 세부정보 페이지","menu.result":"결과 페이지","menu.result.success":"성공 페이지","menu.result.fail":"실패 페이지","menu.exception":"예외 페이지","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"트리거 오류","menu.account":"개인 페이지","menu.account.center":"개인 센터","menu.account.settings":"개인 설정","menu.account.trigger":"트리거 오류","menu.account.logout":"로그아웃","menu.wallet":"내 지갑","menu.docs":"문서 센터","menu.docs.detail":"문서 세부정보","menu.header.refreshPage":"페이지 새로 고침","menu.invite.friends":"친구 초대","app.setting.pagestyle":"전반적인 스타일 설정","app.setting.pagestyle.light":"밝은 메뉴 스타일","app.setting.pagestyle.dark":"어두운 메뉴 스타일","app.setting.pagestyle.realdark":"다크 모드","app.setting.themecolor":"테마 색상","app.setting.navigationmode":"탐색 모드","app.setting.sidemenu.nav":"사이드바 탐색","app.setting.topmenu.nav":"상단 표시줄 탐색","app.setting.content-width":"콘텐츠 영역 너비","app.setting.content-width.tooltip":"이 설정은 [상단 표시줄 탐색]인 경우에만 유효합니다.","app.setting.content-width.fixed":"고정","app.setting.content-width.fluid":"스트리밍","app.setting.fixedheader":"고정 헤더","app.setting.fixedheader.tooltip":"헤더 고정 시 구성 가능","app.setting.autoHideHeader":"스크롤할 때 헤더 숨기기","app.setting.fixedsidebar":"사이드 메뉴 고정","app.setting.sidemenu":"사이드 메뉴 레이아웃","app.setting.topmenu":"상단 메뉴 레이아웃","app.setting.othersettings":"기타 설정","app.setting.weakmode":"색약 모드","app.setting.multitab":"멀티탭 모드","app.setting.copy":"설정 복사","app.setting.loading":"테마 로드 중","app.setting.copyinfo":"설정을 성공적으로 복사했습니다. src/config/defaultSettings.js","app.setting.copy.success":"복사 완료","app.setting.copy.fail":"복사 실패","app.setting.theme.switching":"테마 변경!","app.setting.production.hint":"구성 표시줄은 개발 환경에서 미리 보기에만 사용되며 프로덕션 환경에서는 표시되지 않습니다. 구성 파일을 수동으로 복사하고 수정하십시오.","app.setting.themecolor.daybreak":"새벽 파란색(기본값)","app.setting.themecolor.dust":"황혼","app.setting.themecolor.volcano":"화산","app.setting.themecolor.sunset":"일몰","app.setting.themecolor.cyan":"밍칭","app.setting.themecolor.green":"오로라 그린","app.setting.themecolor.geekblue":"긱 블루","app.setting.themecolor.purple":"장쯔(Jiang Zi)","app.setting.tooltip":"페이지 설정","user.login.userName":"사용자 이름","user.login.password":"비밀번호","user.login.username.placeholder":"계정: 관리자","user.login.password.placeholder":"비밀번호: admin 또는 ant.design","user.login.message-invalid-credentials":"로그인에 실패했습니다. 이메일과 인증 코드를 확인하세요.","user.login.message-invalid-verification-code":"인증코드 오류","user.login.tab-login-credentials":"계정 비밀번호 로그인","user.login.tab-login-email":"이메일 로그인","user.login.tab-login-mobile":"휴대폰번호 로그인","user.login.captcha.placeholder":"그래픽 인증 코드를 입력하세요.","user.login.mobile.placeholder":"휴대전화번호","user.login.mobile.verification-code.placeholder":"인증코드","user.login.email.placeholder":"이메일 주소를 입력해주세요","user.login.email.verification-code.placeholder":"인증번호를 입력해주세요","user.login.email.sending":"인증코드가 전송되는 중입니다...","user.login.email.send-success-title":"팁","user.login.email.send-success":"인증코드가 성공적으로 전송되었습니다. 이메일을 확인해 주세요.","user.login.sms.send-success":"인증번호가 성공적으로 전송되었습니다. 문자 메시지를 확인하세요.","user.login.remember-me":"자동 로그인","user.login.forgot-password":"비밀번호를 잊으셨나요?","user.login.sign-in-with":"기타 로그인 방법","user.login.signup":"계정 등록","user.login.login":"로그인","user.register.register":"등록","user.register.email.placeholder":"이메일","user.register.password.placeholder":"6자 이상 입력해주세요. 쉽게 추측할 수 있는 비밀번호는 사용하지 마세요.","user.register.password.popover-message":"6자 이상 입력해주세요. 쉽게 추측할 수 있는 비밀번호는 사용하지 마세요.","user.register.confirm-password.placeholder":"비밀번호 확인","user.register.get-verification-code":"인증 코드 받기","user.register.sign-in":"기존 계정을 사용하여 로그인","user.register-result.msg":"귀하의 계정: {email} 등록이 완료되었습니다.","user.register-result.activation-email":"활성화 이메일이 귀하의 사서함으로 전송되었으며 24시간 동안 유효합니다. 귀하의 이메일에 즉시 로그인하고 이메일에 있는 링크를 클릭하여 계정을 활성화하십시오.","user.register-result.back-home":"홈페이지로 돌아가기","user.register-result.view-mailbox":"우편함을 확인하세요","user.email.required":"이메일 주소를 입력해주세요!","user.email.wrong-format":"이메일 주소 형식이 잘못되었습니다!","user.userName.required":"계정 이름이나 이메일 주소를 입력하세요","user.password.required":"비밀번호를 입력해주세요!","user.password.twice.msg":"두 번 입력한 비밀번호가 일치하지 않습니다!","user.password.strength.msg":"비밀번호가 충분히 강력하지 않습니다.","user.password.strength.strong":"힘: 강한","user.password.strength.medium":"강도: 중간","user.password.strength.low":"강도: 낮음","user.password.strength.short":"강도: 너무 짧음","user.confirm-password.required":"비밀번호를 확인해 주세요!","user.phone-number.required":"정확한 휴대폰번호를 입력해주세요","user.phone-number.wrong-format":"휴대폰 번호 형식이 잘못되었습니다!","user.verification-code.required":"인증번호를 입력해주세요!","user.captcha.required":"그래픽 인증코드를 입력해주세요!","user.login.infos":"QuantDinger는 AI 멀티에이전트 주식 분석 보조 도구로 증권 투자 컨설팅 자격이 없습니다. 플랫폼 내 모든 분석 결과, 점수, 참고 의견은 과거 데이터를 기반으로 AI에 의해 자동으로 생성되며 학습, 연구 및 기술 교류에만 사용되며 투자 조언이나 의사 결정 기반을 구성하지 않습니다. 주식투자에는 시장리스크, 유동성리스크, 정책리스크 등 다양한 리스크가 수반되며, 이로 인해 원금 손실이 발생할 수 있습니다. 사용자는 자신의 위험 허용 범위에 따라 독립적인 결정을 내려야 하며, 이 도구의 사용으로 인해 발생하는 모든 투자 행위 및 결과는 사용자가 부담해야 합니다. 시장은 위험하므로 투자에 신중해야 합니다.","user.login.tab-login-web3":"Web3 로그인","user.login.web3.tip":"지갑을 이용한 서명 로그인","user.login.web3.connect":"지갑을 연결하고 로그인하세요","user.login.web3.no-wallet":"지갑이 감지되지 않음","user.login.web3.no-address":"지갑 주소를 가져오지 못했습니다.","user.login.web3.nonce-failed":"난수를 가져오지 못했습니다.","user.login.web3.verify-failed":"서명 확인 실패","user.login.web3.success":"로그인 성공","user.login.web3.failed":"지갑 로그인 실패","nav.no_wallet":"지갑이 감지되지 않음","nav.copy":"복사","nav.copy_success":"성공적으로 복사되었습니다","user.login.oauth.google":"Google로 로그인","user.login.oauth.github":"GitHub로 로그인","user.login.oauth.loading":"승인 페이지로 리디렉션 중...","user.login.oauth.failed":"OAuth 로그인 실패","user.login.oauth.get-url-failed":"승인 링크를 얻지 못했습니다.","user.login.subtitle":"글로벌 시장에 대한 정량적 통찰력 확보","user.login.legal.title":"법적 고지 사항","user.login.legal.view":"법적 고지사항 보기","user.login.legal.collapse":"법적 면책조항 접기","user.login.legal.agree":"법적 고지 사항을 읽었으며 이에 동의합니다.","user.login.legal.required":"먼저 법적 고지 사항을 읽고 확인하십시오.","user.login.legal.content":"QuantDinger는 AI 멀티에이전트 주식 분석 보조 도구로 증권 투자 컨설팅 자격이 없습니다. 플랫폼 내 모든 분석 결과, 등급, 참고 의견은 과거 데이터를 기반으로 AI에 의해 자동으로 생성되며 학습, 연구 및 기술 교류에만 사용되며 투자 조언이나 의사 결정 기반을 구성하지 않습니다. 주식투자에는 시장리스크, 유동성리스크, 정책리스크 등 다양한 리스크가 수반되며, 이로 인해 원금 손실이 발생할 수 있습니다. 사용자는 자신의 위험 허용 범위에 따라 독립적인 결정을 내려야 하며, 이 도구의 사용으로 인해 발생하는 모든 투자 행위 및 결과는 사용자가 부담해야 합니다. 시장은 위험하므로 투자에 신중해야 합니다.","user.login.privacy.title":"사용자 개인 정보 보호 정책","user.login.privacy.view":"사용자 개인 정보 보호 정책 보기","user.login.privacy.collapse":"사용자 개인정보 보호 약관 닫기","user.login.privacy.content":"우리는 귀하의 개인 정보 보호와 데이터 보호를 중요하게 생각합니다. 1) 수집 범위 : 기능 구현에 꼭 필요한 정보(이메일, 휴대전화번호, 지역번호, Web3 지갑 주소 등)와 필수 로그, 기기정보만 수집합니다. 2) 이용 목적: 계정 로그인 및 보안 확인, 서비스 기능 제공, 문제 해결 및 규정 준수 요구 사항. 3) 저장 및 보안: 데이터는 암호화되어 저장되며, 무단 접근, 공개 또는 손실을 방지하기 위해 필요한 권한 및 접근 제어 조치가 취해집니다. 4) 제3자와의 공유: 법률 및 규정에 의해 요구되거나 서비스 수행에 필요한 경우를 제외하고, 귀하의 개인정보는 제3자와 공유되지 않습니다. 제3자 서비스(예: 지갑, SMS 서비스 제공업체)가 관련된 경우 해당 기능을 구현하는 데 필요한 최소한의 범위에서만 처리됩니다. 5) 쿠키/로컬 저장소: 로그인 상태 및 필요한 세션 유지 관리(예: 토큰, PHPSESSID)에 사용되며 브라우저에서 이를 삭제하거나 제한할 수 있습니다. 6) 개인권리 : 귀하는 법령에 따른 조회, 정정, 삭제, 동의철회 등의 권리를 행사할 수 있습니다. 7) 변경 및 공지: 본 약관이 업데이트되면 페이지에 눈에 띄게 표시됩니다. 본 서비스를 계속 이용하시면 업데이트된 내용을 읽고 동의하신 것으로 간주됩니다. 본 약관 또는 그에 대한 업데이트에 동의하지 않는 경우 서비스 사용을 중단하고 당사에 문의하십시오.","account.basicInfo":"기본정보","account.id":"사용자 ID","account.username":"사용자 이름","account.nickname":"닉네임","account.email":"이메일","account.mobile":"휴대전화번호","account.web3address":"지갑 주소","account.pid":"추천인 ID","account.level":"사용자 수준","account.money":"균형","account.qdtBalance":"QDT 잔액","account.score":"포인트","account.createtime":"등록 시간","account.inviteLink":"초대링크","account.recharge":"재충전","account.rechargeTip":"충전하려면 WeChat 또는 Alipay를 사용하여 아래 QR 코드를 스캔하세요.","account.qrCodePlaceholder":"QR 코드 자리 표시자(에뮬레이션)","account.rechargeAmount":"충전금액","account.enterAmount":"충전금액을 입력해주세요","account.rechargeHint":"최소 입금액: 1 QDT","account.confirmRecharge":"충전 확인","account.enterValidAmount":"유효한 충전 금액을 입력하세요.","account.rechargeSuccess":"재충전 성공! {amount} QDT 입금","account.settings.menuMap.basic":"기본 설정","account.settings.menuMap.security":"보안 설정","account.settings.menuMap.notification":"새 메시지 알림","account.settings.menuMap.moneyLog":"기금 세부정보","account.moneyLog.empty":"아직 펀드 세부정보가 없습니다.","account.moneyLog.total":"총 {total}개 기록","account.moneyLog.type.purchase":"매수 지표","account.moneyLog.type.recharge":"재충전","account.moneyLog.type.refund":"환불","account.moneyLog.type.reward":"보상","account.moneyLog.type.income":"지표소득","account.moneyLog.type.commission":"플랫폼 취급 수수료","wallet.balance":"QDT 잔액","wallet.recharge":"재충전","wallet.withdraw":"현금 인출","wallet.filter":"필터","wallet.reset":"재설정","wallet.totalRecharge":"누적 충전","wallet.totalWithdraw":"누적 출금","wallet.totalIncome":"누적 수입","wallet.records":"거래기록 및 자금내역","wallet.tradingRecords":"거래 내역","wallet.moneyLog":"기금 세부정보","wallet.rechargeTip":"충전하려면 WeChat 또는 Alipay를 사용하여 아래 QR 코드를 스캔하세요.","wallet.qrCodePlaceholder":"QR 코드 자리 표시자(에뮬레이션)","wallet.rechargeAmount":"충전금액","wallet.enterAmount":"충전금액을 입력해주세요","wallet.rechargeHint":"최소 입금액: 1 QDT","wallet.confirmRecharge":"충전 확인","wallet.enterValidAmount":"유효한 충전 금액을 입력하세요.","wallet.rechargeSuccess":"재충전 성공! {amount} QDT 입금","wallet.rechargeFailed":"재충전 실패","wallet.withdrawTip":"출금금액과 출금주소를 입력해주세요","wallet.withdrawAmount":"출금금액","wallet.enterWithdrawAmount":"출금금액을 입력해주세요","wallet.withdrawHint":"최소 출금 금액: 1 QDT","wallet.withdrawAddress":"출금주소(선택)","wallet.enterWithdrawAddress":"출금주소를 입력해주세요","wallet.confirmWithdraw":"출금 확인","wallet.enterValidWithdrawAmount":"유효한 인출 금액을 입력하세요.","wallet.insufficientBalance":"잔액 부족","wallet.withdrawSuccess":"출금 성공! 인출된 {금액} QDT","wallet.withdrawFailed":"출금 실패","wallet.noTradingRecords":"아직 거래기록이 없습니다","wallet.noMoneyLog":"아직 펀드 세부정보가 없습니다.","wallet.loadTradingRecordsFailed":"거래 기록을 로드하지 못했습니다.","wallet.loadMoneyLogFailed":"자금 세부정보를 로드하지 못했습니다.","wallet.moneyLogTotal":"총 {total}개 기록","wallet.moneyLogTypeTitle":"유형","wallet.moneyLogType.all":"모든 유형","wallet.table.time":"시간","wallet.table.type":"유형","wallet.table.price":"가격","wallet.table.amount":"수량","wallet.table.money":"금액","wallet.table.balance":"균형","wallet.table.memo":"비고","wallet.table.value":"가치","wallet.table.profit":"이익과 손실","wallet.table.commission":"취급 수수료","wallet.table.total":"총 {total}개 기록","wallet.tradeType.buy":"사다","wallet.tradeType.sell":"팔다","wallet.tradeType.liquidation":"강제청산","wallet.tradeType.openLong":"길게 열다","wallet.tradeType.addLong":"가돗","wallet.tradeType.closeLong":"핀듀오","wallet.tradeType.closeLongStop":"손실을 멈추고 오랫동안","wallet.tradeType.closeLongProfit":"이익을 얻고 더 많은 레벨을 올리세요","wallet.tradeType.openShort":"오픈 쇼트","wallet.tradeType.addShort":"짧게 추가하다","wallet.tradeType.closeShort":"비어 있음","wallet.tradeType.closeShortStop":"손실 중지","wallet.tradeType.closeShortProfit":"이익을 얻고 공매도 마감","wallet.moneyLogType.purchase":"매수 지표","wallet.moneyLogType.recharge":"재충전","wallet.moneyLogType.withdraw":"현금 인출","wallet.moneyLogType.refund":"환불","wallet.moneyLogType.reward":"보상","wallet.moneyLogType.income":"소득","wallet.moneyLogType.commission":"취급 수수료","wallet.web3Address.required":"먼저 Web3 지갑 주소를 입력해주세요","wallet.web3Address.requiredDescription":"충전하기 전에 Web3 지갑 주소를 바인딩해야 충전을 받을 수 있습니다.","wallet.web3Address.placeholder":"Web3 지갑 주소(0x로 시작)를 입력하세요.","wallet.web3Address.save":"지갑 주소 저장","wallet.web3Address.saveSuccess":"지갑 주소가 성공적으로 저장되었습니다","wallet.web3Address.saveFailed":"지갑 주소 저장 실패","wallet.web3Address.invalidFormat":"유효한 Web3 지갑 주소를 입력하세요. (이더리움 형식: 0x로 시작하는 42자 또는 TRC20 형식: T로 시작하는 34자)","wallet.selectCoin":"통화 선택","wallet.selectChain":"선택 체인","wallet.chain.eth":"ETH(ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"BSC","wallet.targetQdtAmount":"상환하려는 QDT 금액(선택 사항)","wallet.targetQdtAmount.placeholder":"상환하려는 QDT 수량, 현재 QDT 가격을 입력하세요: {price} USDT","wallet.targetQdtAmount.requiredUsdt":"재충전 필요: {amount} USDT","wallet.rechargeAddress":"충전 주소","wallet.copyAddress":"복사","wallet.copySuccess":"성공적으로 복사되었습니다!","wallet.copyFailed":"복사하지 못했습니다. 수동으로 복사하세요.","wallet.rechargeAddressHint":"이 주소에 {coin}을 입금하려면 반드시 {chain}을 사용하세요.","wallet.qdtPrice.loading":"로드 중...","wallet.rechargeTip.new":"통화와 체인을 선택한 후 아래 QR 코드를 스캔하여 충전하세요.","wallet.exchangeRate":"1 QDT ≒ {rate} USDT","wallet.withdrawableAmount":"사용 가능한 현금 금액","wallet.totalBalance":"총 잔액","wallet.insufficientWithdrawable":"출금 가능한 현금 금액이 부족합니다. 현재 인출할 수 있는 금액은 다음과 같습니다: {amount} QDT","wallet.withdrawAddressRequired":"출금주소를 입력해주세요","wallet.withdrawAddressHint":"주소가 올바른지 확인하십시오. 탈퇴 후에는 취소가 불가능합니다.","wallet.withdrawSubmitSuccess":"철회 신청서가 성공적으로 제출되었습니다. 검토를 기다려 주세요.","menu.footer.contactUs":"문의하기","menu.footer.getSupport":"지원 받기","menu.footer.socialAccounts":"소셜 계정","menu.footer.userAgreement":"사용자 계약","menu.footer.privacyPolicy":"개인 정보 보호 정책","menu.footer.support":"지원","menu.footer.featureRequest":"기능 요청","menu.footer.email":"이메일","menu.footer.liveChat":"연중무휴 라이브 채팅","dashboard.analysis.title":"다차원 분석","dashboard.analysis.subtitle":"AI 기반 종합재무분석 플랫폼","dashboard.analysis.selectSymbol":"기본 코드 선택 또는 입력","dashboard.analysis.selectModel":"모델 선택","dashboard.analysis.startAnalysis":"분석 시작","dashboard.analysis.history":"역사","dashboard.analysis.tab.overview":"종합적인 분석","dashboard.analysis.tab.fundamental":"기초","dashboard.analysis.tab.technical":"기술","dashboard.analysis.tab.news":"뉴스","dashboard.analysis.tab.sentiment":"감정","dashboard.analysis.tab.risk":"위험","dashboard.analysis.tab.debate":"길고 짧은 논쟁","dashboard.analysis.tab.decision":"최종 결정","dashboard.analysis.empty.selectSymbol":"분석을 시작하려면 대상을 선택하세요.","dashboard.analysis.empty.selectSymbolDesc":"자체 선택한 주식 목록에서 선택하거나 기본 코드를 입력하여 다차원 AI 분석 보고서를 얻습니다.","dashboard.analysis.empty.startAnalysis":'다차원 분석을 수행하려면 "분석 시작" 버튼을 클릭하세요.',"dashboard.analysis.empty.startAnalysisDesc":"펀더멘털, 기술, 뉴스, 정서, 리스크 등 다차원에서 종합적인 분석을 제공해드립니다.","dashboard.analysis.empty.noData":"현재 {type} 분석 데이터가 없습니다. 먼저 종합적인 분석을 수행해 주세요.","dashboard.analysis.empty.noWatchlist":"현재 자체선택한 종목이 없습니다.","dashboard.analysis.empty.noHistory":"아직 기록이 없습니다.","dashboard.analysis.empty.watchlistHint":"현재 자체 선택한 주식이 없습니다. 먼저 문의해 주세요.","dashboard.analysis.empty.noDebateData":"아직 토론 데이터가 없습니다.","dashboard.analysis.empty.noDecisionData":"아직 결정 데이터가 없습니다.","dashboard.analysis.empty.selectAgent":"분석 결과를 보려면 에이전트를 선택하세요.","dashboard.analysis.loading.analyzing":"분석 중입니다. 잠시 기다려 주세요...","dashboard.analysis.loading.fundamental":"기본 데이터 분석 중...","dashboard.analysis.loading.technical":"기술 지표 분석 중...","dashboard.analysis.loading.news":"뉴스 데이터 분석 중...","dashboard.analysis.loading.sentiment":"시장 심리 분석 중…","dashboard.analysis.loading.risk":"위험 평가 중...","dashboard.analysis.loading.debate":"롱숏 논쟁이 진행중인데..","dashboard.analysis.loading.decision":"최종 결정을 내리는 중...","dashboard.analysis.score.overall":"종합평가","dashboard.analysis.score.recommendation":"투자 조언","dashboard.analysis.score.confidence":"자신감","dashboard.analysis.dimension.fundamental":"기초","dashboard.analysis.dimension.technical":"기술","dashboard.analysis.dimension.news":"뉴스","dashboard.analysis.dimension.sentiment":"감정","dashboard.analysis.dimension.risk":"위험","dashboard.analysis.card.dimensionScores":"각 차원에 대한 평가","dashboard.analysis.card.overviewReport":"종합분석보고서","dashboard.analysis.card.financialMetrics":"재무 지표","dashboard.analysis.card.fundamentalReport":"기초분석 보고서","dashboard.analysis.card.technicalIndicators":"기술 지표","dashboard.analysis.card.technicalReport":"기술적 분석 보고서","dashboard.analysis.card.newsList":"관련 뉴스","dashboard.analysis.card.newsReport":"뉴스 분석 보고서","dashboard.analysis.card.sentimentIndicators":"감정 지표","dashboard.analysis.card.sentimentReport":"감정 분석 보고서","dashboard.analysis.card.riskMetrics":"위험 지표","dashboard.analysis.card.riskReport":"위험 평가 보고서","dashboard.analysis.card.bullView":"강세 전망(강세)","dashboard.analysis.card.bearView":"약세 전망 (곰)","dashboard.analysis.card.researchConclusion":"연구원의 결론","dashboard.analysis.card.traderPlan":"상인 계획","dashboard.analysis.card.riskDebate":"위험위원회 토론","dashboard.analysis.card.finalDecision":"최종 결정","dashboard.analysis.card.tradePlanDetail":"거래 계획 세부정보","dashboard.analysis.tradingPlan.entry_price":"입장료","dashboard.analysis.tradingPlan.position_size":"위치 크기","dashboard.analysis.tradingPlan.stop_loss":"손실을 막다","dashboard.analysis.tradingPlan.take_profit":"이익을 얻으세요","dashboard.analysis.label.confidence":"자신감","dashboard.analysis.label.keyPoints":"핵심 포인트","dashboard.analysis.label.riskWarning":"위험 경고","dashboard.analysis.risk.risky":"위험하다","dashboard.analysis.risk.neutral":"중립적 관점 (Neutral)","dashboard.analysis.risk.safe":"보수적 관점(안전)","dashboard.analysis.risk.conclusion":"결론","dashboard.analysis.feature.fundamental":"기본적 분석","dashboard.analysis.feature.technical":"기술적 분석","dashboard.analysis.feature.news":"뉴스 분석","dashboard.analysis.feature.sentiment":"감정 분석","dashboard.analysis.feature.risk":"위험 평가","dashboard.analysis.watchlist.title":"나의 주식 선택","dashboard.analysis.watchlist.add":"추가하다","dashboard.analysis.watchlist.addStock":"재고 추가","dashboard.analysis.modal.addStock.title":"옵션 재고 추가","dashboard.analysis.modal.addStock.confirm":"알았어","dashboard.analysis.modal.addStock.cancel":"취소","dashboard.analysis.modal.addStock.market":"시장 유형","dashboard.analysis.modal.addStock.marketPlaceholder":"시장을 선택해주세요","dashboard.analysis.modal.addStock.marketRequired":"시장 유형을 선택하세요.","dashboard.analysis.modal.addStock.symbol":"주식 코드","dashboard.analysis.modal.addStock.symbolPlaceholder":"예: AAPL, TSLA, GOOGL, 000001, BTC","dashboard.analysis.modal.addStock.symbolRequired":"주식코드를 입력해주세요","dashboard.analysis.modal.addStock.searchPlaceholder":"대상 코드 또는 이름 검색","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"기본 코드를 검색하거나 입력하세요(예: AAPL, BTC/USDT, EUR/USD)","dashboard.analysis.modal.addStock.searchOrInputHint":"데이터베이스에서 객체 검색 또는 코드 직접 입력 지원(시스템이 자동으로 이름을 얻음)","dashboard.analysis.modal.addStock.search":"검색","dashboard.analysis.modal.addStock.searchResults":"검색결과","dashboard.analysis.modal.addStock.hotSymbols":"인기 있는 타겟","dashboard.analysis.modal.addStock.noHotSymbols":"아직 인기 있는 타겟이 없습니다.","dashboard.analysis.modal.addStock.selectedSymbol":"선택됨","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"먼저 대상을 선택하세요.","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"대상을 선택하거나 대상 코드를 먼저 입력하세요","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"타겟코드를 입력해주세요","dashboard.analysis.modal.addStock.pleaseSelectMarket":"먼저 시장 유형을 선택하세요.","dashboard.analysis.modal.addStock.searchFailed":"검색에 실패했습니다. 나중에 다시 시도해 주세요.","dashboard.analysis.modal.addStock.noSearchResults":"일치하는 대상이 없습니다.","dashboard.analysis.modal.addStock.willAutoFetchName":"시스템에서 자동으로 이름을 가져옵니다.","dashboard.analysis.modal.addStock.addDirectly":"직접 추가","dashboard.analysis.modal.addStock.nameWillBeFetched":"추가되면 이름이 자동으로 선택됩니다.","dashboard.analysis.market.USStock":"미국 주식","dashboard.analysis.market.Crypto":"암호화폐","dashboard.analysis.market.Forex":"외환","dashboard.analysis.market.Futures":"선물","dashboard.analysis.modal.history.title":"역사적 분석 기록","dashboard.analysis.modal.history.viewResult":"결과 보기","dashboard.analysis.modal.history.completeTime":"완료 시간","dashboard.analysis.modal.history.error":"오류","dashboard.analysis.status.pending":"보류 중","dashboard.analysis.status.processing":"처리","dashboard.analysis.status.completed":"완료됨","dashboard.analysis.status.failed":"실패했다","dashboard.analysis.message.selectSymbol":"대상을 먼저 선택해주세요","dashboard.analysis.message.taskCreated":"분석 작업이 생성되어 백그라운드에서 실행 중입니다...","dashboard.analysis.message.analysisComplete":"분석 완료","dashboard.analysis.message.analysisCompleteCache":"분석 완료(캐시된 데이터 활용)","dashboard.analysis.message.analysisFailed":"분석에 실패했습니다. 나중에 다시 시도해 주세요.","dashboard.analysis.message.addStockSuccess":"성공적으로 추가되었습니다","dashboard.analysis.message.addStockFailed":"추가 실패","dashboard.analysis.message.removeStockSuccess":"성공적으로 제거되었습니다","dashboard.analysis.message.removeStockFailed":"제거 실패","dashboard.analysis.message.resumingAnalysis":"분석 작업을 재개하는 중...","dashboard.analysis.message.deleteSuccess":"성공적으로 삭제되었습니다","dashboard.analysis.message.deleteFailed":"삭제 실패","dashboard.analysis.modal.history.delete":"삭제","dashboard.analysis.modal.history.deleteConfirm":"이 분석 기록을 삭제하시겠습니까?","dashboard.analysis.test":"상점 번호 {no}, Gongzhuan Road","dashboard.analysis.introduce":"표시기 설명","dashboard.analysis.total-sales":"총매출","dashboard.analysis.day-sales":"일평균 매출엔엔","dashboard.analysis.visits":"방문","dashboard.analysis.visits-trend":"트래픽 동향","dashboard.analysis.visits-ranking":"매장 방문 순위","dashboard.analysis.day-visits":"일일 방문","dashboard.analysis.week":"매주 전년 대비","dashboard.analysis.day":"전년 대비","dashboard.analysis.payments":"결제 횟수","dashboard.analysis.conversion-rate":"전환율","dashboard.analysis.operational-effect":"운영활동 효과","dashboard.analysis.sales-trend":"판매 동향","dashboard.analysis.sales-ranking":"매장판매순위","dashboard.analysis.all-year":"일년 내내","dashboard.analysis.all-month":"이번 달","dashboard.analysis.all-week":"이번 주","dashboard.analysis.all-day":"오늘","dashboard.analysis.search-users":"검색 사용자 수","dashboard.analysis.per-capita-search":"1인당 검색량","dashboard.analysis.online-top-search":"온라인 인기 검색어","dashboard.analysis.the-proportion-of-sales":"판매 카테고리 비율","dashboard.analysis.dropdown-option-one":"첫 번째 작전","dashboard.analysis.dropdown-option-two":"작전 2","dashboard.analysis.channel.all":"모든 채널","dashboard.analysis.channel.online":"온라인","dashboard.analysis.channel.stores":"저장","dashboard.analysis.sales":"판매","dashboard.analysis.traffic":"승객 흐름","dashboard.analysis.table.rank":"순위","dashboard.analysis.table.search-keyword":"키워드 검색","dashboard.analysis.table.users":"사용자 수","dashboard.analysis.table.weekly-range":"주간 증가","dashboard.indicator.selectSymbol":"기본 코드 선택 또는 입력","dashboard.indicator.emptyWatchlistHint":"현재 자체 선택한 주식이 없습니다. 먼저 추가해 주세요.","dashboard.indicator.hint.selectSymbol":"분석을 시작하려면 대상을 선택하세요.","dashboard.indicator.hint.selectSymbolDesc":"K-라인 차트 및 기술 지표를 보려면 위 검색창에서 주식 코드를 선택하거나 입력하세요.","dashboard.indicator.retry":"다시 시도하세요","dashboard.indicator.panel.title":"기술 지표","dashboard.indicator.panel.realtimeOn":"실시간 업데이트 끄기","dashboard.indicator.panel.realtimeOff":"실시간 업데이트 활성화","dashboard.indicator.panel.themeLight":"어두운 테마로 전환","dashboard.indicator.panel.themeDark":"밝은 테마로 전환","dashboard.indicator.section.enabled":"활성화됨","dashboard.indicator.section.added":"내가 추가한 지표","dashboard.indicator.section.custom":"직접 만든 지표","dashboard.indicator.section.bought":"내가 구매한 지표","dashboard.indicator.section.myCreated":"내가 만든 지표","dashboard.indicator.empty":"아직 표시기가 없습니다. 먼저 표시기를 추가하거나 생성하세요.","dashboard.indicator.buy":"매수 지표","dashboard.indicator.action.start":"시작","dashboard.indicator.action.stop":"닫기","dashboard.indicator.action.edit":"편집","dashboard.indicator.action.delete":"삭제","dashboard.indicator.action.backtest":"백테스트","dashboard.indicator.status.normal":"정상","dashboard.indicator.status.normalPermanent":"일반(영구적으로 유효)","dashboard.indicator.status.expired":"만료됨","dashboard.indicator.expiry.permanent":"영구적으로 유효함","dashboard.indicator.expiry.noExpiry":"만료 시간 없음","dashboard.indicator.expiry.expired":"만료됨: {date}","dashboard.indicator.expiry.expiresOn":"만료 시간: {date}","dashboard.indicator.delete.confirmTitle":"삭제 확인","dashboard.indicator.delete.confirmContent":'"{name}" 표시기를 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.',"dashboard.indicator.delete.confirmOk":"삭제","dashboard.indicator.delete.confirmCancel":"취소","dashboard.indicator.delete.success":"성공적으로 삭제되었습니다","dashboard.indicator.delete.failed":"삭제 실패","dashboard.indicator.save.success":"성공적으로 저장되었습니다","dashboard.indicator.save.failed":"저장 실패","dashboard.indicator.error.loadWatchlistFailed":"옵션 재고를 로드하지 못했습니다.","dashboard.indicator.error.chartNotReady":"차트 구성 요소가 초기화되지 않았습니다. 먼저 대상을 선택하고 차트가 로드될 때까지 기다려 주세요.","dashboard.indicator.error.chartMethodNotReady":"차트 구성 요소 메서드가 준비되지 않았습니다. 나중에 다시 시도해 주세요.","dashboard.indicator.error.chartExecuteNotReady":"차트 구성요소 실행 방법이 준비되지 않았습니다. 나중에 다시 시도해 주세요.","dashboard.indicator.error.parseFailed":"Python 코드를 구문 분석할 수 없습니다.","dashboard.indicator.error.parseFailedCheck":"Python 코드를 구문 분석할 수 없습니다. 코드 형식을 확인하세요.","dashboard.indicator.error.addIndicatorFailed":"표시기를 추가하지 못했습니다.","dashboard.indicator.error.runIndicatorFailed":"실행 표시기 실패","dashboard.indicator.error.pleaseLogin":"먼저 로그인해주세요","dashboard.indicator.error.loadDataFailed":"데이터 로딩 실패","dashboard.indicator.error.loadDataFailedDesc":"네트워크 연결을 확인해주세요","dashboard.indicator.error.pythonEngineFailed":"Python 엔진을 로드하지 못했고 표시기 기능을 사용하지 못할 수 있습니다.","dashboard.indicator.error.chartInitFailed":"차트 초기화 실패","dashboard.indicator.warning.enterCode":"표시기 코드를 먼저 입력하세요.","dashboard.indicator.warning.pyodideLoadFailed":"Python 엔진을 로드하지 못했습니다.","dashboard.indicator.warning.pyodideLoadFailedDesc":"현재 지역 또는 네트워크 환경에서는 이 기능을 사용할 수 없습니다.","dashboard.indicator.warning.chartNotInitialized":"차트가 초기화되지 않아 선 그리기 도구를 사용할 수 없습니다.","dashboard.indicator.success.runIndicator":"표시기가 성공적으로 실행됩니다.","dashboard.indicator.success.clearDrawings":"모든 선화 삭제됨","dashboard.indicator.sma":"SMA(이동 평균 조합)","dashboard.indicator.ema":"EMA(지수 이동 평균 조합)","dashboard.indicator.rsi":"RSI(상대강도)","dashboard.indicator.macd":"MACD","dashboard.indicator.bb":"볼린저 밴드","dashboard.indicator.atr":"ATR(평균 실제 범위)","dashboard.indicator.cci":"CCI(상품 채널 지수)","dashboard.indicator.williams":"Williams %R(윌리엄스 지표)","dashboard.indicator.mfi":"MFI(자금 흐름 지수)","dashboard.indicator.adx":"ADX(평균 추세 지수)","dashboard.indicator.obv":"OBV(에너지파)","dashboard.indicator.adosc":"ADOSC(누적/디스패치 오실레이터)","dashboard.indicator.ad":"AD(집적/분배선)","dashboard.indicator.kdj":"KDJ(확률적 지표)","dashboard.indicator.signal.buy":"구매","dashboard.indicator.signal.sell":"판매","dashboard.indicator.signal.supertrendBuy":"슈퍼트렌드 구매","dashboard.indicator.signal.supertrendSell":"슈퍼트렌드 매도","dashboard.indicator.chart.kline":"K라인","dashboard.indicator.chart.volume":"볼륨","dashboard.indicator.chart.uptrend":"상승 추세","dashboard.indicator.chart.downtrend":"하락 추세","dashboard.indicator.tooltip.time":"시간","dashboard.indicator.tooltip.open":"열다","dashboard.indicator.tooltip.close":"받다","dashboard.indicator.tooltip.high":"높다","dashboard.indicator.tooltip.low":"낮음","dashboard.indicator.tooltip.volume":"볼륨","dashboard.indicator.drawing.line":"선분","dashboard.indicator.drawing.horizontalLine":"수평선","dashboard.indicator.drawing.verticalLine":"수직선","dashboard.indicator.drawing.ray":"레이","dashboard.indicator.drawing.straightLine":"직선","dashboard.indicator.drawing.parallelLine":"평행선","dashboard.indicator.drawing.priceLine":"가격선","dashboard.indicator.drawing.priceChannel":"가격 채널","dashboard.indicator.drawing.fibonacciLine":"피보나치 라인","dashboard.indicator.drawing.measure":"측정","dashboard.indicator.drawing.clearAll":"모든 선화 지우기","dashboard.indicator.market.USStock":"미국 주식","dashboard.indicator.market.Crypto":"암호화폐","dashboard.indicator.market.Forex":"외환","dashboard.indicator.market.Futures":"선물","dashboard.indicator.create":"지표 생성","dashboard.indicator.editor.title":"지표 생성/편집","dashboard.indicator.editor.name":"지표 이름","dashboard.indicator.editor.nameRequired":"지표 이름을 입력하세요.","dashboard.indicator.editor.namePlaceholder":"지표 이름을 입력하세요.","dashboard.indicator.editor.description":"표시기 설명","dashboard.indicator.editor.descriptionPlaceholder":"표시기에 대한 설명을 입력하세요(선택 사항).","dashboard.indicator.editor.code":"파이썬 코드","dashboard.indicator.editor.codeRequired":"표시 코드를 입력하세요","dashboard.indicator.editor.codePlaceholder":"Python 코드를 입력하세요.","dashboard.indicator.editor.run":"달리다","dashboard.indicator.editor.runHint":"실행 버튼을 클릭하면 K-라인 차트의 지표 효과를 미리 볼 수 있습니다.","dashboard.indicator.editor.guide":"개발 가이드","dashboard.indicator.editor.guideTitle":"Python 지표 개발 가이드","dashboard.indicator.editor.save":"저장","dashboard.indicator.editor.cancel":"취소","dashboard.indicator.editor.unnamed":"이름 없는 표시기","dashboard.indicator.editor.publishToCommunity":"커뮤니티에 게시","dashboard.indicator.editor.publishToCommunityHint":"게시되면 다른 사용자가 커뮤니티에서 귀하의 지표를 보고 사용할 수 있습니다.","dashboard.indicator.editor.indicatorType":"표시기 유형","dashboard.indicator.editor.indicatorTypeRequired":"지표 유형을 선택하세요.","dashboard.indicator.editor.indicatorTypePlaceholder":"지표 유형을 선택하세요.","dashboard.indicator.editor.previewImage":"미리보기","dashboard.indicator.editor.uploadImage":"사진 업로드","dashboard.indicator.editor.previewImageHint":"권장 크기: 800x400, 2MB 이하","dashboard.indicator.editor.pricing":"판매가(QDT)","dashboard.indicator.editor.pricingType.free":"무료","dashboard.indicator.editor.pricingType.permanent":"영구","dashboard.indicator.editor.pricingType.monthly":"월별 결제","dashboard.indicator.editor.price":"가격","dashboard.indicator.editor.priceRequired":"가격을 입력해주세요","dashboard.indicator.editor.pricePlaceholder":"가격을 입력해주세요","dashboard.indicator.editor.pricingHint":"무료 지표의 가격은 0이지만 플랫폼은 지표 사용량과 칭찬률에 따라 보상(QDT)을 제공합니다.","dashboard.indicator.editor.aiGenerate":"지능형 세대","dashboard.indicator.editor.aiPromptPlaceholder":"당신의 아이디어를 알려주시면 Python 표시기 코드를 생성해 드리겠습니다.","dashboard.indicator.editor.aiGenerateBtn":"AI 생성 코드","dashboard.indicator.editor.aiPromptRequired":"당신의 생각을 입력해주세요","dashboard.indicator.editor.aiGenerateSuccess":"코드 생성 성공","dashboard.indicator.editor.aiGenerateError":"코드 생성에 실패했습니다. 나중에 다시 시도해 주세요.","dashboard.indicator.editor.verifyCode":"코드 검증","dashboard.indicator.editor.verifyCodeSuccess":"검증 통과","dashboard.indicator.editor.verifyCodeFailed":"검증 실패","dashboard.indicator.editor.verifyCodeEmpty":"코드는 비워둘 수 없습니다","dashboard.indicator.backtest.title":"지표 백테스트","dashboard.indicator.backtest.config":"백테스트 매개변수","dashboard.indicator.backtest.startDate":"시작일","dashboard.indicator.backtest.endDate":"종료일","dashboard.indicator.backtest.selectStartDate":"시작일 선택","dashboard.indicator.backtest.selectEndDate":"종료일 선택","dashboard.indicator.backtest.startDateRequired":"시작일을 선택하세요.","dashboard.indicator.backtest.endDateRequired":"종료일을 선택하세요.","dashboard.indicator.backtest.initialCapital":"초기자본금","dashboard.indicator.backtest.initialCapitalRequired":"초기자금을 입력해주세요","dashboard.indicator.backtest.commission":"수수료","dashboard.indicator.backtest.leverage":"레버리지 비율","dashboard.indicator.backtest.tradeDirection":"거래 방향","dashboard.indicator.backtest.longOnly":"오래 가세요","dashboard.indicator.backtest.shortOnly":"짧은","dashboard.indicator.backtest.both":"양방향","dashboard.indicator.backtest.run":"백테스팅 시작","dashboard.indicator.backtest.rerun":"다시 백테스트","dashboard.indicator.backtest.close":"닫기","dashboard.indicator.backtest.running":"지표 백테스트 진행 중...","dashboard.indicator.backtest.results":"백테스트 결과","dashboard.indicator.backtest.totalReturn":"총 수익","dashboard.indicator.backtest.annualReturn":"연간 소득","dashboard.indicator.backtest.maxDrawdown":"최대 감소","dashboard.indicator.backtest.sharpeRatio":"샤프비율","dashboard.indicator.backtest.winRate":"승률","dashboard.indicator.backtest.profitFactor":"손익 비율","dashboard.indicator.backtest.totalTrades":"거래수","dashboard.indicator.totalReturn":"총 수익","dashboard.indicator.annualReturn":"연간 수익률","dashboard.indicator.maxDrawdown":"최대 감소","dashboard.indicator.sharpeRatio":"샤프비율","dashboard.indicator.winRate":"승률","dashboard.indicator.profitFactor":"손익 비율","dashboard.indicator.totalTrades":"총 거래 수","dashboard.indicator.backtest.totalCommission":"총 취급 수수료","dashboard.indicator.backtest.equityCurve":"수익률 곡선","dashboard.indicator.backtest.strategy":"지표소득","dashboard.indicator.backtest.benchmark":"벤치마크 수익률","dashboard.indicator.backtest.tradeHistory":"거래 내역","dashboard.indicator.backtest.tradeTime":"시간","dashboard.indicator.backtest.tradeType":"유형","dashboard.indicator.backtest.buy":"사다","dashboard.indicator.backtest.sell":"팔다","dashboard.indicator.backtest.liquidation":"청산","dashboard.indicator.backtest.openLong":"길게 열다","dashboard.indicator.backtest.closeLong":"핀듀오","dashboard.indicator.backtest.closeLongStop":"매수에 가까움(손절매)","dashboard.indicator.backtest.closeLongProfit":"더 닫기 (이익 실현)","dashboard.indicator.backtest.addLong":"롱 포지션 추가","dashboard.indicator.backtest.openShort":"오픈 쇼트","dashboard.indicator.backtest.closeShort":"비어 있음","dashboard.indicator.backtest.closeShortStop":"청산(손절매)","dashboard.indicator.backtest.closeShortProfit":"마감(이익실현)","dashboard.indicator.backtest.addShort":"숏 포지션 추가","dashboard.indicator.backtest.price":"가격","dashboard.indicator.backtest.amount":"수량","dashboard.indicator.backtest.balance":"계좌잔고","dashboard.indicator.backtest.profit":"이익과 손실","dashboard.indicator.backtest.success":"백테스트 완료","dashboard.indicator.backtest.failed":"백테스트에 실패했습니다. 나중에 다시 시도해 주세요.","dashboard.indicator.backtest.noIndicatorCode":"이 지표에 대한 백테스트 가능한 코드가 없습니다.","dashboard.indicator.backtest.noSymbol":"거래대상을 먼저 선택해주세요","dashboard.indicator.backtest.dateRangeExceeded":"백테스트 시간 범위가 한도를 초과합니다. {timeframe} 기간은 최대 {maxRange}까지 백테스트할 수 있습니다.","dashboard.indicator.backtest.dateRangeExceededDays":"Backtest range exceeds limit: {timeframe} max {maxRange} ({maxDays} days)","dashboard.indicator.backtest.metaLine":"Symbol: {symbol} | Market: {market} | Timeframe: {timeframe}","dashboard.indicator.backtest.savedRunId":"Backtest saved. Run ID: {id}","dashboard.indicator.backtest.prev":"Previous","dashboard.indicator.backtest.next":"Next","dashboard.indicator.backtest.hint.entryPctMax":"Max entry: {maxPct}% (reserve budget for future scale-ins)","dashboard.indicator.backtest.steps.strategy.title":"Strategy","dashboard.indicator.backtest.steps.strategy.desc":"Position sizing & risk controls","dashboard.indicator.backtest.steps.trading.title":"Trading settings","dashboard.indicator.backtest.steps.trading.desc":"Time range, capital, fees, leverage","dashboard.indicator.backtest.steps.results.title":"Results","dashboard.indicator.backtest.steps.results.desc":"Backtest output","dashboard.indicator.backtest.panel.risk":"Risk management (SL/TP/Trailing)","dashboard.indicator.backtest.panel.scale":"Scale in / DCA (trend & mean-reversion)","dashboard.indicator.backtest.panel.reduce":"Reduce position (trend & adverse)","dashboard.indicator.backtest.panel.position":"Position sizing","dashboard.indicator.backtest.field.stopLossPct":"Stop Loss (%)","dashboard.indicator.backtest.field.takeProfitPct":"Take Profit (%)","dashboard.indicator.backtest.field.trailingEnabled":"Trailing stop / take profit","dashboard.indicator.backtest.field.trailingStopPct":"Trailing drawdown (%)","dashboard.indicator.backtest.field.trailingActivationPct":"Trailing activation (%)","dashboard.indicator.backtest.field.slippage":"Slippage (%)","dashboard.indicator.backtest.field.trendAddEnabled":"Trend-following scale-in","dashboard.indicator.backtest.field.dcaAddEnabled":"Mean-reversion scale-in","dashboard.indicator.backtest.field.trendAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.dcaAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.trendAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.dcaAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.trendAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.dcaAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.trendReduceEnabled":"Trend reduce","dashboard.indicator.backtest.field.adverseReduceEnabled":"Adverse reduce","dashboard.indicator.backtest.field.trendReduceStepPct":"Trend trigger (%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"Adverse trigger (%)","dashboard.indicator.backtest.field.trendReduceSizePct":"Reduce size (% of position)","dashboard.indicator.backtest.field.adverseReduceSizePct":"Adverse reduce size (% of position)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"Max trend reduce times","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"Max adverse reduce times","dashboard.indicator.backtest.field.entryPct":"Entry size (% of capital)","dashboard.indicator.backtest.field.minOrderPct":"Min order size (% of capital) (optional)","dashboard.indicator.backtest.closeLongTrailing":"Close Long (Trailing)","dashboard.indicator.backtest.reduceLong":"Reduce Long","dashboard.indicator.backtest.closeShortTrailing":"Close Short (Trailing)","dashboard.indicator.backtest.reduceShort":"Reduce Short","dashboard.docs.title":"문서 센터","dashboard.docs.search.placeholder":"문서 검색...","dashboard.docs.category.all":"모두","dashboard.docs.category.guide":"개발 가이드","dashboard.docs.category.api":"API 문서","dashboard.docs.category.tutorial":"튜토리얼","dashboard.docs.category.faq":"FAQ","dashboard.docs.featured.title":"권장 문서","dashboard.docs.featured.tag":"추천","dashboard.docs.list.views":"찾아보기","dashboard.docs.list.author":"작성자","dashboard.docs.list.empty":"아직 문서가 없습니다.","dashboard.docs.list.backToAll":"모든 문서로 돌아가기","dashboard.docs.list.total":"총 {count}개의 문서","dashboard.docs.detail.back":"문서 목록으로 돌아가기","dashboard.docs.detail.updatedAt":"업데이트 날짜","dashboard.docs.detail.related":"관련 문서","dashboard.docs.detail.notFound":"문서가 존재하지 않습니다","dashboard.docs.detail.error":"문서가 존재하지 않거나 삭제되었습니다.","dashboard.docs.search.result":"검색결과","dashboard.docs.search.keyword":"키워드","community.filter.indicatorType":"표시기 유형","community.filter.all":"모두","community.filter.other":"기타 옵션","community.filter.pricing":"가격 유형","community.filter.allPricing":"모든 가격","community.filter.sortBy":"정렬 기준","community.filter.search":"검색","community.filter.searchPlaceholder":"측정항목 이름 검색","community.indicatorType.trend":"트렌드 유형","community.indicatorType.momentum":"모멘텀형","community.indicatorType.volatility":"변동성","community.indicatorType.volume":"볼륨","community.indicatorType.custom":"사용자 정의","community.pricing.free":"무료","community.pricing.paid":"지불","community.sort.downloads":"다운로드","community.sort.rating":"등급","community.sort.newest":"최신 릴리스","community.pagination.total":"총 {total} 지표","community.noDescription":"아직 설명이 없습니다","community.detail.type":"유형","community.detail.pricing":"가격","community.detail.rating":"등급","community.detail.downloads":"다운로드","community.detail.author":"작성자","community.detail.description":"소개","community.detail.detailContent":"자세한 설명","community.detail.backtestStats":"백테스트 통계","community.action.purchase":"매수 지표","community.action.addToMyIndicators":"내 지표에 추가","community.action.favorite":"컬렉션","community.action.unfavorite":"즐겨찾기 취소","community.action.buyNow":"지금 구매","community.action.renew":"갱신","community.purchase.price":"가격","community.purchase.permanent":"영구","community.purchase.monthly":"달","community.purchase.confirmBuy":"이 지표({price} QDT) 구매를 확인하시겠습니까?","community.purchase.confirmRenew":"이 지표({price} QDT/월)를 갱신하시겠습니까?","community.purchase.confirmFree":"이 무료 표시기를 추가하시겠습니까?","community.purchase.confirmTitle":"조치 확인","community.purchase.owned":"이 표시기를 구입하셨습니다(영구적으로 유효함).","community.purchase.ownIndicator":"귀하가 게시한 측정항목입니다.","community.purchase.expired":"구독이 만료되었습니다","community.purchase.expiresOn":"만료 시간: {date}","community.tabs.detail":"지표 세부정보","community.tabs.backtest":"백테스트 데이터","community.tabs.ratings":"사용자 리뷰","community.rating.myRating":"내 평가","community.rating.stars":"별 {count}개","community.rating.commentPlaceholder":"당신의 경험을 공유하세요...","community.rating.submit":"평가 제출","community.rating.modify":"수정","community.rating.saveModify":"변경사항 저장","community.rating.cancel":"취소","community.rating.selectRating":"등급을 선택해 주세요","community.rating.success":"평가 성공","community.rating.modifySuccess":"리뷰가 수정되었습니다.","community.rating.failed":"평가 실패","community.rating.noRatings":"아직 댓글이 없습니다","community.backtest.note":"위 데이터는 과거 백테스트 결과이며 참고용일 뿐 미래 수익을 나타내지는 않습니다.","community.backtest.noData":"아직 백테스트 데이터가 없습니다.","community.backtest.uploadHint":"작성자는 아직 백테스트 데이터를 업로드하지 않았습니다.","community.message.loadFailed":"표시기 목록을 로드하지 못했습니다.","community.message.purchaseProcessing":"구매 요청 처리 중...","community.message.downloadSuccess":"내 측정항목 목록에 측정항목이 추가되었습니다.","community.message.favoriteSuccess":"수집 성공","community.message.unfavoriteSuccess":"수집을 취소했습니다.","community.message.operationSuccess":"작업 성공","community.message.operationFailed":"작업 실패","community.banner.readOnly":"읽기 전용","community.banner.loginHint":"로그인 또는 등록이 필요한 경우 버튼을 클릭하여 독립 페이지로 이동하여 CSRF 문제를 방지하세요","community.banner.jumpButton":"로그인/등록으로 이동","dashboard.totalEquity":"총자본","dashboard.totalPnL":"총손익","dashboard.aiStrategies":"AI 전략","dashboard.indicatorStrategies":"지표 전략","dashboard.running":"달리기","dashboard.pnlHistory":"역사적 손익","dashboard.strategyPerformance":"전략 손익비율","dashboard.recentTrades":"최근 거래","dashboard.currentPositions":"현재 위치","dashboard.table.time":"시간","dashboard.table.strategy":"정책 이름","dashboard.table.symbol":"대상","dashboard.table.type":"유형","dashboard.table.side":"방향","dashboard.table.size":"미결제약정","dashboard.table.entryPrice":"평균 개장가","dashboard.table.price":"가격","dashboard.table.amount":"수량","dashboard.table.profit":"이익과 손실","dashboard.pendingOrders":"주문 실행 기록","dashboard.totalOrders":"총 {total}건","dashboard.viewError":"오류 보기","dashboard.filled":"체결됨","dashboard.orderTable.time":"생성 시간","dashboard.orderTable.strategy":"전략","dashboard.orderTable.symbol":"거래 쌍","dashboard.orderTable.signalType":"신호 유형","dashboard.orderTable.amount":"수량","dashboard.orderTable.price":"체결 가격","dashboard.orderTable.status":"상태","dashboard.orderTable.executedAt":"실행 시간","dashboard.signalType.openLong":"롱 오픈","dashboard.signalType.openShort":"숏 오픈","dashboard.signalType.closeLong":"롱 청산","dashboard.signalType.closeShort":"숏 청산","dashboard.signalType.addLong":"롱 추가","dashboard.signalType.addShort":"숏 추가","dashboard.status.pending":"대기 중","dashboard.status.processing":"처리 중","dashboard.status.completed":"완료","dashboard.status.failed":"실패","dashboard.status.cancelled":"취소됨","dashboard.table.pnl":"미실현 손익","form.basic-form.basic.title":"기본 형태","form.basic-form.basic.description":"양식 페이지는 사용자로부터 정보를 수집하거나 확인하는 데 사용됩니다. 기본 양식은 데이터 항목이 거의 없는 양식 시나리오에서 일반적으로 사용됩니다.","form.basic-form.title.label":"제목","form.basic-form.title.placeholder":"목표에 이름을 지어주세요","form.basic-form.title.required":"제목을 입력하세요","form.basic-form.date.label":"시작일 및 종료일","form.basic-form.placeholder.start":"시작일","form.basic-form.placeholder.end":"종료일","form.basic-form.date.required":"시작일과 종료일을 선택하세요.","form.basic-form.goal.label":"목표 설명","form.basic-form.goal.placeholder":"단계별 업무 목표를 입력하세요.","form.basic-form.goal.required":"목표 설명을 입력하세요.","form.basic-form.standard.label":"측정하다","form.basic-form.standard.placeholder":"측정항목을 입력하세요.","form.basic-form.standard.required":"측정항목을 입력하세요.","form.basic-form.client.label":"고객","form.basic-form.client.required":"귀하가 서비스를 제공하는 고객에 대해 설명해주세요.","form.basic-form.label.tooltip":"대상 서비스 대상자","form.basic-form.client.placeholder":"귀하가 서비스를 제공하는 고객, 내부 고객을 직접 @이름/직위 번호로 설명하십시오.","form.basic-form.invites.label":"리뷰어 초대","form.basic-form.invites.placeholder":"@이름/사원번호로 직접 보내주세요. 최대 5명까지 초대 가능합니다.","form.basic-form.weight.label":"무게","form.basic-form.weight.placeholder":"입력해주세요","form.basic-form.public.label":"대중을 대상으로","form.basic-form.label.help":"고객과 검토자는 기본적으로 공유됩니다.","form.basic-form.radio.public":"대중","form.basic-form.radio.partially-public":"부분적으로 공개","form.basic-form.radio.private":"비공개","form.basic-form.publicUsers.placeholder":"열려 있다","form.basic-form.option.A":"동료 1","form.basic-form.option.B":"동료 2","form.basic-form.option.C":"동료 3","form.basic-form.email.required":"이메일 주소를 입력해주세요!","form.basic-form.email.wrong-format":"이메일 주소 형식이 잘못되었습니다!","form.basic-form.userName.required":"사용자 이름을 입력해주세요!","form.basic-form.password.required":"비밀번호를 입력해주세요!","form.basic-form.password.twice":"두 번 입력한 비밀번호가 일치하지 않습니다!","form.basic-form.strength.msg":"6자 이상 입력해주세요. 쉽게 추측할 수 있는 비밀번호는 사용하지 마세요.","form.basic-form.strength.strong":"힘: 강한","form.basic-form.strength.medium":"강도: 중간","form.basic-form.strength.short":"강도: 너무 짧음","form.basic-form.confirm-password.required":"비밀번호를 확인해 주세요!","form.basic-form.phone-number.required":"휴대폰번호를 입력해주세요!","form.basic-form.phone-number.wrong-format":"휴대폰 번호 형식이 잘못되었습니다!","form.basic-form.verification-code.required":"인증번호를 입력해주세요!","form.basic-form.form.get-captcha":"인증 코드 받기","form.basic-form.captcha.second":"초","form.basic-form.form.optional":"(선택사항)","form.basic-form.form.submit":"제출","form.basic-form.form.save":"저장","form.basic-form.email.placeholder":"이메일","form.basic-form.password.placeholder":"비밀번호는 6자 이상, 대소문자 구분","form.basic-form.confirm-password.placeholder":"비밀번호 확인","form.basic-form.phone-number.placeholder":"휴대전화번호","form.basic-form.verification-code.placeholder":"인증코드","result.success.title":"제출 성공","result.success.description":'제출 결과 페이지는 일련의 작업 작업의 처리 결과를 피드백하는 데 사용됩니다. 간단한 작업인 경우 메시지 전역 프롬프트 피드백을 사용하세요. 이 텍스트 영역에는 간단한 보충 지침이 표시될 수 있습니다. "문서"를 표시해야 하는 경우 아래 회색 영역에 더 복잡한 내용이 표시될 수 있습니다.',"result.success.operate-title":"프로젝트 이름","result.success.operate-id":"프로젝트 ID","result.success.principal":"담당자","result.success.operate-time":"유효시간","result.success.step1-title":"프로젝트 생성","result.success.step1-operator":"쿠 릴리","result.success.step2-title":"학과 사전 검토","result.success.step2-operator":"저우 마오마오","result.success.step2-extra":"긴급","result.success.step3-title":"재무 검토","result.success.step4-title":"완료","result.success.btn-return":"목록으로 돌아가기","result.success.btn-project":"항목 보기","result.success.btn-print":"인쇄","result.fail.error.title":"제출 실패","result.fail.error.description":"다시 제출하기 전에 다음 정보를 확인하고 수정하시기 바랍니다.","result.fail.error.hint-title":"제출한 콘텐츠에 다음 오류가 포함되어 있습니다.","result.fail.error.hint-text1":"귀하의 계정이 동결되었습니다","result.fail.error.hint-btn1":"즉시 해동","result.fail.error.hint-text2":"귀하의 계정은 아직 신청할 수 없습니다","result.fail.error.hint-btn2":"지금 업그레이드","result.fail.error.btn-text":"수정으로 돌아가기","account.settings.menuMap.custom":"개인화","account.settings.menuMap.binding":"계정 바인딩","account.settings.basic.avatar":"아바타","account.settings.basic.change-avatar":"아바타 변경","account.settings.basic.email":"이메일","account.settings.basic.email-message":"이메일을 입력해주세요!","account.settings.basic.nickname":"닉네임","account.settings.basic.nickname-message":"닉네임을 입력해주세요!","account.settings.basic.profile":"프로필","account.settings.basic.profile-message":"개인 프로필을 입력해주세요!","account.settings.basic.profile-placeholder":"프로필","account.settings.basic.country":"국가/지역","account.settings.basic.country-message":"국가나 지역을 입력해주세요!","account.settings.basic.geographic":"지방 및 도시","account.settings.basic.geographic-message":"귀하의 시/도를 입력해주세요!","account.settings.basic.address":"거리 주소","account.settings.basic.address-message":"주소를 입력해주세요!","account.settings.basic.phone":"연락처","account.settings.basic.phone-message":"연락처를 입력해주세요!","account.settings.basic.update":"기본정보 업데이트","account.settings.basic.update.success":"기본 정보를 성공적으로 업데이트했습니다.","account.settings.security.strong":"강한","account.settings.security.medium":"안으로","account.settings.security.weak":"약한","account.settings.security.password":"계정 비밀번호","account.settings.security.password-description":"현재 비밀번호 강도:","account.settings.security.phone":"보안 휴대폰","account.settings.security.phone-description":"이미 바인딩된 휴대폰:","account.settings.security.question":"보안 문제","account.settings.security.question-description":"보안 질문이 설정되지 않아 계정 보안을 효과적으로 보호할 수 있습니다.","account.settings.security.email":"이메일 바인딩","account.settings.security.email-description":"이미 바인딩된 이메일 주소:","account.settings.security.mfa":"MFA 장치","account.settings.security.mfa-description":"MFA 디바이스가 바인딩되지 않았습니다. 바인딩 후 다시 확인할 수 있습니다.","account.settings.security.modify":"수정","account.settings.security.set":"설정","account.settings.security.bind":"바인딩","account.settings.binding.taobao":"타오바오 바인딩","account.settings.binding.taobao-description":"현재 타오바오 계정이 연결되어 있지 않습니다","account.settings.binding.alipay":"알리페이 바인딩","account.settings.binding.alipay-description":"Alipay 계정이 현재 연결되어 있지 않습니다.","account.settings.binding.dingding":"바인딩 딩톡","account.settings.binding.dingding-description":"현재 바인딩된 DingTalk 계정이 없습니다.","account.settings.binding.bind":"바인딩","account.settings.notification.password":"계정 비밀번호","account.settings.notification.password-description":"다른 사용자의 메시지는 사이트 메시지 형식으로 통보됩니다.","account.settings.notification.messages":"시스템 메시지","account.settings.notification.messages-description":"시스템 메시지는 사이트 메시지 형식으로 통보됩니다.","account.settings.notification.todo":"해야 할 일","account.settings.notification.todo-description":"할일은 사이트 내 메시지로 알려드립니다.","account.settings.settings.open":"열다","account.settings.settings.close":"닫기","trading-assistant.title":"트레이딩 어시스턴트","trading-assistant.strategyList":"전략 목록","trading-assistant.createStrategy":"정책 만들기","trading-assistant.noStrategy":"아직 전략이 없습니다.","trading-assistant.selectStrategy":"세부정보를 보려면 왼쪽에서 전략을 선택하세요.","trading-assistant.startStrategy":"출시 전략","trading-assistant.stopStrategy":"중지 전략","trading-assistant.editStrategy":"편집 전략","trading-assistant.deleteStrategy":"정책 삭제","trading-assistant.status.running":"달리기","trading-assistant.status.stopped":"중지됨","trading-assistant.status.error":"오류","trading-assistant.strategyType.IndicatorStrategy":"기술 지표 전략","trading-assistant.strategyType.PromptBasedStrategy":"단서 전략","trading-assistant.strategyType.GridStrategy":"그리드 전략","trading-assistant.tabs.tradingRecords":"거래 내역","trading-assistant.tabs.positions":"직위기록","trading-assistant.tabs.equityCurve":"주식곡선","trading-assistant.form.step1":"지표 선택","trading-assistant.form.step2":"교환 구성","trading-assistant.form.step3":"전략 매개변수","trading-assistant.form.indicator":"지표 선택","trading-assistant.form.indicatorHint":"자신이 구매했거나 생성한 기술 지표만 선택할 수 있습니다.","trading-assistant.form.qdtCostHints":"전략을 사용하면 QDT가 소모됩니다. 계정에 QDT 잔액이 충분한지 확인하세요.","trading-assistant.form.indicatorDescription":"표시기 설명","trading-assistant.form.noDescription":"아직 설명이 없습니다","trading-assistant.form.exchange":"교환 선택","trading-assistant.form.apiKey":"API 키","trading-assistant.form.secretKey":"비밀키","trading-assistant.form.passphrase":"암호","trading-assistant.form.testConnection":"연결 테스트","trading-assistant.form.strategyName":"정책 이름","trading-assistant.form.symbol":"거래 쌍","trading-assistant.form.symbolHint":"현재는 암호화폐 거래쌍만 지원됩니다","trading-assistant.form.initialCapital":"투자금액","trading-assistant.form.marketType":"시장 유형","trading-assistant.form.marketTypeFutures":"계약","trading-assistant.form.marketTypeSpot":"스팟","trading-assistant.form.marketTypeHint":"계약은 양방향 거래와 레버리지를 지원하는 반면 현물은 롱 포지션만 지원하고 레버리지는 1x로 고정됩니다.","trading-assistant.form.leverage":"여러 가지 활용","trading-assistant.form.leverageHint":"계약 : 1~125회, 현물 : 고정 1회","trading-assistant.form.spotLeverageFixed":"현물 거래 레버리지는 1x로 고정됩니다.","trading-assistant.form.spotOnlyLongHint":"현물 거래는 매수 포지션만 지원합니다","trading-assistant.form.tradeDirection":"거래 방향","trading-assistant.form.tradeDirectionLong":"오직 길다","trading-assistant.form.tradeDirectionShort":"단지 짧다","trading-assistant.form.tradeDirectionBoth":"양방향 거래","trading-assistant.form.timeframe":"기간","trading-assistant.form.klinePeriod":"K선 기간","trading-assistant.form.timeframe1m":"1분","trading-assistant.form.timeframe5m":"5분","trading-assistant.form.timeframe15m":"15분","trading-assistant.form.timeframe30m":"30분","trading-assistant.form.timeframe1H":"1시간","trading-assistant.form.timeframe4H":"4시간","trading-assistant.form.timeframe1D":"1일","trading-assistant.form.selectStrategyType":"전략 유형 선택","trading-assistant.form.indicatorStrategy":"지표 전략","trading-assistant.form.indicatorStrategyDesc":"기술 지표 기반 자동 거래 전략","trading-assistant.form.aiStrategy":"AI 전략","trading-assistant.form.aiStrategyDesc":"AI 지능형 의사결정 기반 자동 거래 전략","trading-assistant.form.enableAiFilter":"AI 지능형 의사결정 필터 활성화","trading-assistant.form.enableAiFilterHint":"활성화하면 지표 신호가 AI에 의해 필터링되어 거래 품질이 향상됩니다","trading-assistant.form.aiFilterPrompt":"사용자 정의 프롬프트","trading-assistant.form.aiFilterPromptHint":"AI 필터링을 위한 사용자 정의 지침을 제공하고, 비워두면 시스템 기본값을 사용합니다","trading-assistant.validation.strategyTypeRequired":"전략 유형을 선택하세요","trading-assistant.form.advancedSettings":"고급 설정","trading-assistant.form.orderMode":"주문 모드","trading-assistant.form.orderModeMaker":"메이커","trading-assistant.form.orderModeTaker":"시장가(테이커)","trading-assistant.form.orderModeHint":"지정가 주문 모드는 지정가 주문을 사용하며 처리 수수료가 더 낮습니다. 시장 가격 모드는 즉시 실행되며 처리 수수료가 더 높습니다.","trading-assistant.form.makerWaitSec":"지정가 주문 대기 시간(초)","trading-assistant.form.makerWaitSecHint":"주문 후 거래가 완료될 때까지 기다리는 시간입니다. 취소하고 시간 초과 후 다시 시도하세요.","trading-assistant.form.makerRetries":"보류 중인 주문에 대한 재시도 횟수","trading-assistant.form.makerRetriesHint":"보류 중인 주문이 실행되지 않을 때 최대 재시도 횟수","trading-assistant.form.fallbackToMarket":"지정가 주문이 실패하고 시장 가격이 하락합니다.","trading-assistant.form.fallbackToMarketHint":"개시/청산 보류 주문이 완료되지 않은 경우 거래가 완료되었는지 확인하기 위해 시장가 주문으로 다운그레이드해야 하는지 여부.","trading-assistant.form.marginMode":"마진 모드","trading-assistant.form.marginModeCross":"전체 창고","trading-assistant.form.marginModeIsolated":"고립된 위치","trading-assistant.form.stopLossPct":"정지손해율(%)","trading-assistant.form.stopLossPctHint":"정지 손실 비율을 설정합니다. 0은 정지 손실이 활성화되지 않았음을 의미합니다.","trading-assistant.form.takeProfitPct":"이익 실현 비율(%)","trading-assistant.form.takeProfitPctHint":"이익실현 비율을 설정합니다. 0은 이익실현을 비활성화함을 의미합니다.","trading-assistant.form.signalMode":"신호 모드","trading-assistant.form.signalModeConfirmed":"모드 확인","trading-assistant.form.signalModeAggressive":"공격적 모드","trading-assistant.form.signalModeHint":"확인 모드: 완료된 K 라인만 확인합니다. 공격적 모드: K 라인 형성도 확인합니다.","trading-assistant.form.cancel":"취소","trading-assistant.form.prev":"이전 단계","trading-assistant.form.next":"다음 단계","trading-assistant.form.confirmCreate":"생성 확인","trading-assistant.form.confirmEdit":"변경사항 확인","trading-assistant.messages.createSuccess":"전략이 성공적으로 생성되었습니다.","trading-assistant.messages.createFailed":"정책을 생성하지 못했습니다.","trading-assistant.messages.updateSuccess":"정책 업데이트 성공","trading-assistant.messages.updateFailed":"정책 업데이트 실패","trading-assistant.messages.deleteSuccess":"정책 삭제 성공","trading-assistant.messages.deleteFailed":"정책 삭제 실패","trading-assistant.messages.startSuccess":"전략이 성공적으로 시작되었습니다","trading-assistant.messages.startFailed":"정책을 시작하지 못했습니다.","trading-assistant.messages.stopSuccess":"전략이 성공적으로 중지되었습니다.","trading-assistant.messages.stopFailed":"중지 전략이 실패했습니다.","trading-assistant.messages.loadFailed":"정책 목록을 가져오지 못했습니다.","trading-assistant.messages.runningWarning":"전략이 실행되고 있습니다. 전략을 수정하기 전에 전략을 중지하세요.","trading-assistant.messages.deleteConfirmWithName":'"{name}" 정책을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.',"trading-assistant.messages.deleteConfirm":"이 정책을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.","trading-assistant.messages.loadTradesFailed":"거래 기록을 가져오지 못했습니다.","trading-assistant.messages.loadPositionsFailed":"위치 기록을 가져오지 못했습니다.","trading-assistant.messages.loadEquityFailed":"자기자본곡선 획득 실패","trading-assistant.messages.loadIndicatorsFailed":"표시기 목록을 로드하지 못했습니다. 나중에 다시 시도해 주세요.","trading-assistant.messages.spotLimitations":"현물 거래는 자동으로 매수, 1배 레버리지로 설정되었습니다.","trading-assistant.messages.autoFillApiConfig":"거래소의 과거 API 구성이 자동으로 채워졌습니다.","trading-assistant.placeholders.selectIndicator":"지표를 선택하세요","trading-assistant.placeholders.selectExchange":"교환을 선택해주세요","trading-assistant.placeholders.inputApiKey":"API 키를 입력하세요","trading-assistant.placeholders.inputSecretKey":"비밀키를 입력해주세요","trading-assistant.placeholders.inputPassphrase":"암호를 입력하세요","trading-assistant.placeholders.inputStrategyName":"정책 이름을 입력하세요.","trading-assistant.placeholders.selectSymbol":"거래쌍을 선택해주세요","trading-assistant.placeholders.selectTimeframe":"기간을 선택하세요.","trading-assistant.placeholders.selectKlinePeriod":"K선 기간을 선택하세요","trading-assistant.placeholders.inputAiFilterPrompt":"사용자 정의 프롬프트를 입력하세요(선택사항)","trading-assistant.validation.indicatorRequired":"지표를 선택하세요","trading-assistant.validation.exchangeRequired":"교환을 선택해주세요","trading-assistant.validation.apiKeyRequired":"API 키를 입력하세요","trading-assistant.validation.secretKeyRequired":"비밀키를 입력해주세요","trading-assistant.validation.passphraseRequired":"암호를 입력하세요","trading-assistant.validation.exchangeConfigIncomplete":"전체 교환 구성 정보를 입력하세요.","trading-assistant.validation.testConnectionRequired":'먼저 "연결 테스트" 버튼을 클릭하고 연결이 성공했는지 확인하세요',"trading-assistant.validation.testConnectionFailed":"연결 테스트에 실패했습니다. 구성을 확인하고 다시 테스트하세요","trading-assistant.validation.credentialRequired":"먼저 개인 센터에서 거래소 자격 증명을 추가하고 테스트하세요","trading-assistant.validation.strategyNameRequired":"정책 이름을 입력하세요.","trading-assistant.validation.symbolRequired":"거래쌍을 선택해주세요","trading-assistant.validation.initialCapitalRequired":"투자금액을 입력해주세요.","trading-assistant.validation.leverageRequired":"레버리지 비율을 입력하세요.","trading-assistant.table.time":"시간","trading-assistant.table.type":"유형","trading-assistant.table.price":"가격","trading-assistant.table.amount":"수량","trading-assistant.table.value":"금액","trading-assistant.table.commission":"취급 수수료","trading-assistant.table.symbol":"거래쌍","trading-assistant.table.side":"방향","trading-assistant.table.size":"포지션 수량","trading-assistant.table.entryPrice":"개장 가격","trading-assistant.table.currentPrice":"현재 가격","trading-assistant.table.unrealizedPnl":"미실현 손익","trading-assistant.table.pnlPercent":"손익비율","trading-assistant.table.buy":"사다","trading-assistant.table.sell":"팔다","trading-assistant.table.long":"오래 가세요","trading-assistant.table.short":"짧은","trading-assistant.table.noPositions":"아직 직책이 없습니다.","trading-assistant.detail.title":"전략 세부정보","trading-assistant.detail.strategyName":"정책 이름","trading-assistant.detail.strategyType":"전략 유형","trading-assistant.detail.status":"상태","trading-assistant.detail.tradingMode":"거래 모델","trading-assistant.detail.exchange":"교환","trading-assistant.detail.initialCapital":"초기자본금","trading-assistant.detail.totalInvestment":"총투자금액","trading-assistant.detail.currentEquity":"현재 순자산","trading-assistant.detail.totalPnl":"총손익","trading-assistant.detail.indicatorName":"지표 이름","trading-assistant.detail.maxLeverage":"최대 레버리지","trading-assistant.detail.decideInterval":"결정 간격","trading-assistant.detail.symbols":"거래개체","trading-assistant.detail.createdAt":"생성 시간","trading-assistant.detail.updatedAt":"업데이트 시간","trading-assistant.detail.llmConfig":"AI 모델 구성","trading-assistant.detail.exchangeConfig":"교환 구성","trading-assistant.detail.provider":"공급자","trading-assistant.detail.modelId":"모델 ID","trading-assistant.detail.close":"닫기","trading-assistant.detail.loadFailed":"정책 세부정보를 가져오지 못했습니다.","trading-assistant.equity.noData":"아직 순자산 데이터가 없습니다.","trading-assistant.equity.equity":"순자산","trading-assistant.exchange.tradingMode":"거래 모델","trading-assistant.exchange.virtual":"모의거래","trading-assistant.exchange.live":"실제 거래","trading-assistant.exchange.selectExchange":"교환 선택","trading-assistant.exchange.walletAddress":"지갑 주소","trading-assistant.exchange.walletAddressPlaceholder":"지갑 주소(0x로 시작)를 입력하세요.","trading-assistant.exchange.privateKey":"개인 키","trading-assistant.exchange.privateKeyPlaceholder":"개인키(64자)를 입력해주세요.","trading-assistant.exchange.testConnection":"연결 테스트","trading-assistant.exchange.connectionSuccess":"연결 성공","trading-assistant.exchange.connectionFailed":"연결 실패","trading-assistant.exchange.testFailed":"연결 테스트 실패","trading-assistant.exchange.fillComplete":"전체 교환 구성 정보를 입력하세요.","trading-assistant.strategyTypeOptions.ai":"AI 중심 전략","trading-assistant.strategyTypeOptions.indicator":"기술 지표 전략","trading-assistant.strategyTypeOptions.aiDeveloping":"AI 기반 전략 기능은 개발 중이므로 계속 지켜봐 주시기 바랍니다","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"AI 기반 전략 기능 개발 중","trading-assistant.indicatorType.trend":"추세","trading-assistant.indicatorType.momentum":"추진력","trading-assistant.indicatorType.volatility":"변동","trading-assistant.indicatorType.volume":"볼륨","trading-assistant.indicatorType.custom":"사용자 정의","trading-assistant.exchangeNames":{okx:"OKX",binance:"바이낸스",hyperliquid:"초액체",blockchaincom:"블록체인닷컴",coinbaseexchange:"코인베이스",gate:"Gate.io",mexc:"멕시코",kraken:"크라켄",bitfinex:"비트파이넥스",bybit:"바이비트",kucoin:"쿠코인",huobi:"후오비",bitget:"비트겟",bitmex:"비트멕스",deribit:"데리비트",phemex:"페멕스",bitmart:"비트마트",bitstamp:"비트스탬프",bittrex:"비트렉스",poloniex:"폴로닉스",gemini:"쌍둥이자리",cryptocom:"크립토닷컴",bitflyer:"비트플라이어",upbit:"업비트",bithumb:"빗썸",coinone:"코인원",zb:"ZB",lbank:"L은행",bibox:"비박스",bigone:"빅원",bitrue:"바이트루",coinex:"코인엑스",digifinex:"디지파이넥스",ftx:"FTX",ftxus:"FTX 미국",binanceus:"바이낸스 미국",binancecoinm:"바이낸스 코인-M",binanceusdm:"바이낸스 USDⓈ-M",deepcoin:"딥코인"},"ai-trading-assistant.title":"AI 트레이딩 도우미","ai-trading-assistant.strategyList":"전략 목록","ai-trading-assistant.createStrategy":"정책 만들기","ai-trading-assistant.noStrategy":"아직 전략이 없습니다.","ai-trading-assistant.selectStrategy":"세부정보를 보려면 왼쪽에서 전략을 선택하세요.","ai-trading-assistant.startStrategy":"출시 전략","ai-trading-assistant.stopStrategy":"중지 전략","ai-trading-assistant.editStrategy":"편집 전략","ai-trading-assistant.deleteStrategy":"정책 삭제","ai-trading-assistant.status.running":"달리기","ai-trading-assistant.status.stopped":"중지됨","ai-trading-assistant.status.error":"오류","ai-trading-assistant.tabs.tradingRecords":"거래 내역","ai-trading-assistant.tabs.positions":"직위기록","ai-trading-assistant.tabs.aiDecisions":"AI 의사결정 기록","ai-trading-assistant.tabs.equityCurve":"주식곡선","ai-trading-assistant.form.createTitle":"AI 거래 전략 수립","ai-trading-assistant.form.editTitle":"AI 거래 전략 편집","ai-trading-assistant.form.strategyName":"정책 이름","ai-trading-assistant.form.modelId":"AI 모델","ai-trading-assistant.form.modelIdHint":"API 키를 구성하지 않고 시스템 OpenRouter 서비스 사용","ai-trading-assistant.form.decideInterval":"결정 간격","ai-trading-assistant.form.decideInterval5m":"5분","ai-trading-assistant.form.decideInterval10m":"10분","ai-trading-assistant.form.decideInterval30m":"30분","ai-trading-assistant.form.decideInterval1h":"1시간","ai-trading-assistant.form.decideInterval4h":"4시간","ai-trading-assistant.form.decideInterval1d":"1일","ai-trading-assistant.form.decideInterval1w":"1주","ai-trading-assistant.form.decideIntervalHint":"AI가 결정을 내리는 시간 간격","ai-trading-assistant.form.runPeriod":"실행 주기","ai-trading-assistant.form.runPeriodHint":"전략 실행의 시작 시간과 종료 시간","ai-trading-assistant.form.startDate":"시작일","ai-trading-assistant.form.endDate":"종료일","ai-trading-assistant.form.qdtCostTitle":"QDT 공제 지침","ai-trading-assistant.form.qdtCostHint":"각 AI 결정에 대해 {cost} QDT가 차감됩니다. 귀하의 계정에 충분한 QDT 잔액이 있는지 확인하십시오. 전략을 실행하는 동안 각 결정에 대해 수수료가 실시간으로 차감됩니다.","ai-trading-assistant.form.apiKey":"API 키","ai-trading-assistant.form.exchange":"교환 선택","ai-trading-assistant.form.secretKey":"비밀키","ai-trading-assistant.form.passphrase":"암호","ai-trading-assistant.form.testConnection":"연결 테스트","ai-trading-assistant.form.symbol":"거래 쌍","ai-trading-assistant.form.symbolHint":"거래할 거래쌍을 선택하세요","ai-trading-assistant.form.initialCapital":"투자금액(마진)","ai-trading-assistant.form.leverage":"여러 가지 활용","ai-trading-assistant.form.timeframe":"기간","ai-trading-assistant.form.timeframe1m":"1분","ai-trading-assistant.form.timeframe5m":"5분","ai-trading-assistant.form.timeframe15m":"15분","ai-trading-assistant.form.timeframe30m":"30분","ai-trading-assistant.form.timeframe1H":"1시간","ai-trading-assistant.form.timeframe4H":"4시간","ai-trading-assistant.form.timeframe1D":"1일","ai-trading-assistant.form.marketType":"시장 유형","ai-trading-assistant.form.marketTypeFutures":"계약","ai-trading-assistant.form.marketTypeSpot":"스팟","ai-trading-assistant.form.totalPnl":"총손익","ai-trading-assistant.form.customPrompt":"맞춤 프롬프트 단어","ai-trading-assistant.form.customPromptHint":"선택 사항, AI 거래 전략 및 의사 결정 논리를 사용자 정의하는 데 사용됩니다.","ai-trading-assistant.form.cancel":"취소","ai-trading-assistant.form.prev":"이전 단계","ai-trading-assistant.form.next":"다음 단계","ai-trading-assistant.form.confirmCreate":"생성 확인","ai-trading-assistant.form.confirmEdit":"변경사항 확인","ai-trading-assistant.messages.createSuccess":"전략이 성공적으로 생성되었습니다.","ai-trading-assistant.messages.createFailed":"정책을 생성하지 못했습니다.","ai-trading-assistant.messages.updateSuccess":"정책 업데이트 성공","ai-trading-assistant.messages.updateFailed":"정책 업데이트 실패","ai-trading-assistant.messages.deleteSuccess":"정책 삭제 성공","ai-trading-assistant.messages.deleteFailed":"정책 삭제 실패","ai-trading-assistant.messages.startSuccess":"전략이 성공적으로 시작되었습니다","ai-trading-assistant.messages.startFailed":"정책을 시작하지 못했습니다.","ai-trading-assistant.messages.stopSuccess":"전략이 성공적으로 중지되었습니다.","ai-trading-assistant.messages.stopFailed":"중지 전략이 실패했습니다.","ai-trading-assistant.messages.loadFailed":"정책 목록을 가져오지 못했습니다.","ai-trading-assistant.messages.loadDecisionsFailed":"AI 결정 기록을 가져오지 못했습니다.","ai-trading-assistant.messages.deleteConfirm":"이 정책을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.","ai-trading-assistant.placeholders.inputStrategyName":"정책 이름을 입력하세요.","ai-trading-assistant.placeholders.selectModelId":"AI 모델을 선택해 주세요","ai-trading-assistant.placeholders.selectDecideInterval":"결정 간격을 선택하세요.","ai-trading-assistant.placeholders.startTime":"시작 시간","ai-trading-assistant.placeholders.endTime":"종료 시간","ai-trading-assistant.placeholders.inputApiKey":"API 키를 입력하세요","ai-trading-assistant.placeholders.selectExchange":"교환을 선택해주세요","ai-trading-assistant.placeholders.inputSecretKey":"비밀키를 입력해주세요","ai-trading-assistant.placeholders.inputPassphrase":"암호를 입력하세요","ai-trading-assistant.placeholders.selectSymbol":"다음과 같은 거래쌍을 선택하세요: BTC/USDT","ai-trading-assistant.placeholders.selectTimeframe":"기간을 선택하세요.","ai-trading-assistant.placeholders.inputCustomPrompt":"맞춤 프롬프트 단어를 입력하세요(선택사항).","ai-trading-assistant.validation.strategyNameRequired":"정책 이름을 입력하세요.","ai-trading-assistant.validation.modelIdRequired":"AI 모델을 선택해 주세요","ai-trading-assistant.validation.runPeriodRequired":"실행 주기를 선택하세요.","ai-trading-assistant.validation.apiKeyRequired":"API 키를 입력하세요","ai-trading-assistant.validation.exchangeRequired":"교환을 선택해주세요","ai-trading-assistant.validation.secretKeyRequired":"비밀키를 입력해주세요","ai-trading-assistant.validation.symbolRequired":"거래쌍을 선택해주세요","ai-trading-assistant.validation.initialCapitalRequired":"투자금액을 입력해주세요.","ai-trading-assistant.table.time":"시간","ai-trading-assistant.table.type":"유형","ai-trading-assistant.table.price":"가격","ai-trading-assistant.table.amount":"수량","ai-trading-assistant.table.value":"금액","ai-trading-assistant.table.symbol":"거래 쌍","ai-trading-assistant.table.side":"방향","ai-trading-assistant.table.size":"포지션 수량","ai-trading-assistant.table.entryPrice":"개장 가격","ai-trading-assistant.table.currentPrice":"현재 가격","ai-trading-assistant.table.unrealizedPnl":"미실현 손익","ai-trading-assistant.table.profit":"이익과 손실","ai-trading-assistant.table.openLong":"길게 열다","ai-trading-assistant.table.closeLong":"핀듀오","ai-trading-assistant.table.openShort":"오픈 쇼트","ai-trading-assistant.table.closeShort":"비어 있음","ai-trading-assistant.table.addLong":"가돗","ai-trading-assistant.table.addShort":"짧게 추가하다","ai-trading-assistant.table.closeShortProfit":"숏 포지션에서 이익을 얻으세요","ai-trading-assistant.table.closeShortStop":"손실 중지","ai-trading-assistant.table.closeLongProfit":"오래 멈추고 이익을 얻으십시오","ai-trading-assistant.table.closeLongStop":"손실 중지","ai-trading-assistant.table.buy":"사다","ai-trading-assistant.table.sell":"팔다","ai-trading-assistant.table.long":"오래 가세요","ai-trading-assistant.table.short":"짧은","ai-trading-assistant.table.hold":"보류","ai-trading-assistant.table.reasoning":"분석 이유","ai-trading-assistant.table.decisions":"의사결정","ai-trading-assistant.table.riskAssessment":"위험 평가","ai-trading-assistant.table.confidence":"자신감","ai-trading-assistant.table.totalRecords":"총 {total}개 기록","ai-trading-assistant.table.noPositions":"아직 직책이 없습니다.","ai-trading-assistant.detail.title":"전략 세부정보","ai-trading-assistant.equity.noData":"아직 순자산 데이터가 없습니다.","ai-trading-assistant.equity.equity":"순자산","ai-trading-assistant.exchange.testFailed":"연결 테스트 실패","ai-trading-assistant.exchange.connectionSuccess":"연결 성공","ai-trading-assistant.exchange.connectionFailed":"연결 실패","ai-trading-assistant.form.advancedSettings":"고급 설정","ai-trading-assistant.form.orderMode":"주문 모드","ai-trading-assistant.form.orderModeMaker":"메이커","ai-trading-assistant.form.orderModeTaker":"시장가(테이커)","ai-trading-assistant.form.orderModeHint":"지정가 주문 모드는 지정가 주문을 사용하며 처리 수수료가 더 낮습니다. 시장 가격 모드는 즉시 실행되며 처리 수수료가 더 높습니다.","ai-trading-assistant.form.makerWaitSec":"지정가 주문 대기 시간(초)","ai-trading-assistant.form.makerWaitSecHint":"주문 후 거래가 완료될 때까지 기다리는 시간입니다. 취소하고 시간 초과 후 다시 시도하세요.","ai-trading-assistant.form.makerRetries":"보류 중인 주문에 대한 재시도 횟수","ai-trading-assistant.form.makerRetriesHint":"보류 중인 주문이 실행되지 않을 때 최대 재시도 횟수","ai-trading-assistant.form.fallbackToMarket":"지정가 주문이 실패하고 시장 가격이 하락합니다.","ai-trading-assistant.form.fallbackToMarketHint":"개시/청산 보류 주문이 완료되지 않은 경우 거래가 완료되었는지 확인하기 위해 시장가 주문으로 다운그레이드해야 하는지 여부.","ai-trading-assistant.form.marginMode":"마진 모드","ai-trading-assistant.form.marginModeCross":"전체 창고","ai-trading-assistant.form.marginModeIsolated":"고립된 위치","ai-analysis.title":"퀀트 트레이딩 엔진","ai-analysis.system.online":"온라인","ai-analysis.system.agents":"대리인","ai-analysis.system.active":"활성","ai-analysis.system.stage":"무대","ai-analysis.panel.roster":"에이전트 라인업","ai-analysis.panel.thinking":"생각하다...","ai-analysis.panel.done":"완료","ai-analysis.panel.standby":"대기","ai-analysis.input.title":"퀀트 트레이딩 엔진","ai-analysis.input.placeholder":"대상 자산 선택(예: BTC/USDT)","ai-analysis.input.watchlist":"옵션 주식","ai-analysis.input.start":"분석 시작","ai-analysis.input.recent":"최근 작업:","ai-analysis.vis.stage":"무대","ai-analysis.vis.processing":"처리","ai-analysis.result.complete":"분석 완료","ai-analysis.result.signal":"최종 신호","ai-analysis.result.confidence":"자신감:","ai-analysis.result.new":"새로운 분석","ai-analysis.result.full":"전체 보고서 보기","ai-analysis.logs.title":"시스템 로그","ai-analysis.modal.title":"기밀 보고서","ai-analysis.modal.fundamental":"기본적 분석","ai-analysis.modal.technical":"기술적 분석","ai-analysis.modal.sentiment":"감정 분석","ai-analysis.modal.risk":"위험 평가","ai-analysis.stage.idle":"대기","ai-analysis.stage.1":"1단계: 다차원 분석","ai-analysis.stage.2":"2단계: 장단기 토론","ai-analysis.stage.3":"3단계: 전략적 계획","ai-analysis.stage.4":"네 번째 단계: 위험 통제 검토","ai-analysis.stage.complete":"완료","ai-analysis.agent.investment_director":"투자 이사","ai-analysis.agent.role.investment_director":"종합 분석 및 최종 결론","ai-analysis.agent.market":"시장 분석가","ai-analysis.agent.role.market":"기술 및 시장 데이터","ai-analysis.agent.fundamental":"기본 분석가","ai-analysis.agent.role.fundamental":"재무 및 평가","ai-analysis.agent.technical":"기술 분석가","ai-analysis.agent.role.technical":"기술 지표 및 차트","ai-analysis.agent.news":"뉴스 분석가","ai-analysis.agent.role.news":"글로벌 뉴스 필터","ai-analysis.agent.sentiment":"감정 분석가","ai-analysis.agent.role.sentiment":"사회적 및 정서적","ai-analysis.agent.risk":"위험 분석가","ai-analysis.agent.role.risk":"기본 리스크 점검","ai-analysis.agent.bull":"낙관적인 연구원","ai-analysis.agent.role.bull":"성장촉매 채굴","ai-analysis.agent.bear":"약세 연구원","ai-analysis.agent.role.bear":"위험 및 결함 조사","ai-analysis.agent.manager":"연구 관리자","ai-analysis.agent.role.manager":"토론 진행자","ai-analysis.agent.trader":"상인","ai-analysis.agent.role.trader":"경영 전략가","ai-analysis.agent.risky":"활동가 분석가","ai-analysis.agent.role.risky":"공격적인 전략","ai-analysis.agent.neutral":"균형 분석가","ai-analysis.agent.role.neutral":"균형 전략","ai-analysis.agent.safe":"보수적인 분석가","ai-analysis.agent.role.safe":"보수적 전략","ai-analysis.agent.cro":"위험 통제 관리자(CRO)","ai-analysis.agent.role.cro":"최종 의사결정 권한","ai-analysis.script.market":"주요 거래소에서 OHLCV 데이터를 가져오는 중...","ai-analysis.script.fundamental":"분기별 재무 보고서를 검색하는 중...","ai-analysis.script.technical":"기술지표 및 차트 패턴 분석 중...","ai-analysis.script.news":"글로벌 금융 뉴스를 스캔하는 중...","ai-analysis.script.sentiment":"소셜미디어 트렌드 분석…","ai-analysis.script.risk":"역사적 변동성을 계산하는 중...","invite.inviteLink":"초대링크","invite.copy":"링크 복사","invite.copySuccess":"성공적으로 복사되었습니다!","invite.copyFailed":"복사하지 못했습니다. 수동으로 복사하세요.","invite.noInviteLink":"초대 링크가 생성되지 않았습니다.","invite.totalInvites":"누적 초대","invite.totalReward":"누적 보상","invite.rules":"초대 규칙","invite.rule1":"친구를 등록하도록 성공적으로 초대할 때마다 보상을 받게 됩니다.","invite.rule2":"초대한 친구가 첫 번째 거래를 완료하면 추가 보상을 받을 수 있습니다.","invite.rule3":"초대 보상은 귀하의 계정으로 직접 전송됩니다","invite.inviteList":"초대 목록","invite.tasks":"선교 센터","invite.inviteeName":"초대받은 사람","invite.inviteTime":"초대 시간","invite.status":"상태","invite.reward":"보상","invite.active":"활성","invite.inactive":"활성화되지 않음","invite.completed":"완료됨","invite.claimed":"접수됨","invite.pending":"완료 예정","invite.goToTask":"완료하다","invite.claimReward":"보상 청구","invite.verify":"확인 완료","invite.verifySuccess":"확인에 성공했습니다. 작업 완료","invite.verifyNotCompleted":"작업이 아직 완료되지 않았습니다. 먼저 작업을 완료하세요.","invite.verifyFailed":"확인에 실패했습니다. 나중에 다시 시도해 주세요.","invite.claimSuccess":"{reward} QDT를 성공적으로 받았습니다!","invite.claimFailed":"수집하지 못했습니다. 나중에 다시 시도해 주세요.","invite.totalRecords":"총 {total}개 기록","invite.task.twitter.title":"X(트위터)로 리트윗","invite.task.twitter.desc":"공식 트윗을 X(트위터) 계정에 공유하세요","invite.task.youtube.title":"YouTube 채널을 팔로우하세요","invite.task.youtube.desc":"공식 YouTube 채널을 구독하고 팔로우하세요.","invite.task.telegram.title":"텔레그램 그룹에 가입하세요","invite.task.telegram.desc":"공식 텔레그램 커뮤니티 그룹에 가입하세요","invite.task.discord.title":"Discord 서버에 가입하세요","invite.task.discord.desc":"Discord 커뮤니티 서버에 가입하세요",message:"-","layouts.usermenu.dialog.title":"정보","layouts.usermenu.dialog.content":"정말로 로그아웃하시겠습니까?","layouts.userLayout.title":"불확실성 속에서 진실을 찾아라","dashboard.indicator.boundary.message":"Note: The indicator script only computes plots + buy/sell signals. Position sizing, risk, scaling, fees/slippage belong to execution config.","dashboard.indicator.boundary.indicatorRule":"Keep the script to buy/sell only (and set df['buy']/df['sell']). Do NOT implement position management, TP/SL, scaling in the script.","dashboard.indicator.boundary.backtestRule":"Rule: If a bar has a main signal (buy/sell → open/close/reverse), scaling in/out is skipped on the same bar.","dashboard.indicator.guide.title":"Python Indicator & Strategy Development Guide","dashboard.indicator.guide.intro":"This platform supports writing custom technical indicators and trading signals using Python. The system includes built-in pandas and numpy data analysis libraries. You can use standard DataFrame operations to process K-line data and draw charts or mark buy/sell signals.","dashboard.indicator.guide.section1.title":"1. Runtime Environment & Predefined Variables","dashboard.indicator.guide.section1.env":"Your code runs in a browser-based Python environment (Pyodide).","dashboard.indicator.guide.section1.libs":"Pre-installed Libraries","dashboard.indicator.guide.section1.libsDesc":"The following libraries are imported by default, no need to import again:","dashboard.indicator.guide.section1.libsList":"pandas (pd), numpy (np), math, json","dashboard.indicator.guide.section1.data":"Input Data: df","dashboard.indicator.guide.section1.dataDesc":"The system automatically converts current K-line data into a Pandas DataFrame object, variable name is df.","dashboard.indicator.guide.section1.dataColumns":"df contains the following columns (all float type):","dashboard.indicator.guide.section1.dataColumnsList":"time (timestamp, seconds), open, high, low, close, volume","dashboard.indicator.guide.section1.dataNote":"Data index is arranged from old to new (0 is the earliest data, last row is the latest data).","dashboard.indicator.guide.section1.dataIndex":"Important: df index is timestamp (DatetimeIndex), please preserve the index, avoid using .values which loses the index.","dashboard.indicator.guide.section2.title":"2. Parameter Definition","dashboard.indicator.guide.section2.desc":"You can define variables as parameters at the beginning of your code. The system will try to parse statements like variable = value as adjustable parameters.","dashboard.indicator.guide.section2.example":"Parameter Example","dashboard.indicator.guide.section2.exampleCode":"span = 20 or multiplier = 2.0","dashboard.indicator.guide.section3.title":"3. Backtest Signal Setup (Important!)","dashboard.indicator.guide.section3.desc":"If you want your indicator to support backtesting, you must set the following two columns in your code:","dashboard.indicator.guide.section3.backtestRequired":"Required for Backtesting:","dashboard.indicator.guide.section3.backtestBuySignal":"df['buy_signal'] - Boolean Series, True indicates buy signal","dashboard.indicator.guide.section3.backtestSellSignal":"df['sell_signal'] - Boolean Series, True indicates sell signal","dashboard.indicator.guide.section3.backtestExample":"Example:","dashboard.indicator.guide.section3.backtestExampleCode":"df['buy_signal'] = condition_buy
df['sell_signal'] = condition_sell","dashboard.indicator.guide.section3.backtestNote":"Note: Even if you only set output.signals for chart display, you must set these two columns to enable backtesting.","dashboard.indicator.guide.section4.title":"4. Output Requirements: output","dashboard.indicator.guide.section4.desc":"At the end of code execution, you must define a dictionary named output to tell the chart how to display results.","dashboard.indicator.guide.section4.fields":"The output dictionary contains the following fields:","dashboard.indicator.guide.section4.plots":"plots - For drawing lines (e.g., moving averages, RSI)","dashboard.indicator.guide.section4.signals":"signals - For marking buy/sell signals (e.g., arrows, labels)","dashboard.indicator.guide.section4.name":"name - Indicator name (optional)","dashboard.indicator.guide.section4.calculatedVars":"calculatedVars - Calculated variables (optional, for displaying additional information)","dashboard.indicator.guide.section5.title":"5. Plot Configuration (Plots)","dashboard.indicator.guide.section5.desc":"Each object in the plots list represents a line.","dashboard.indicator.guide.section5.table.field":"Field","dashboard.indicator.guide.section5.table.type":"Type","dashboard.indicator.guide.section5.table.required":"Required","dashboard.indicator.guide.section5.table.requiredYes":"Yes","dashboard.indicator.guide.section5.table.requiredNo":"No","dashboard.indicator.guide.section5.table.desc":"Description","dashboard.indicator.guide.section5.table.name":"The name of the indicator line, displayed in the legend","dashboard.indicator.guide.section5.table.data":"Data list, length must match the number of rows in df. Recommended to use series.tolist()","dashboard.indicator.guide.section5.table.color":"Line color (Hex format, e.g. '#ff0000'). If not filled, the system will automatically assign","dashboard.indicator.guide.section5.table.typeDesc":"Chart type, default is 'line'","dashboard.indicator.guide.section5.table.overlay":"Important. True means display on main chart (with K-line), False means display on sub-chart (independent area)","dashboard.indicator.guide.section5.example":"Example: Draw Simple Moving Average (SMA)","dashboard.indicator.guide.section5.exampleCalc":"Calculate SMA","dashboard.indicator.guide.section5.exampleOutput":"Construct Output","dashboard.indicator.guide.section5.exampleOverlay":"Display on main chart","dashboard.indicator.guide.section6.title":"6. Signal Markers (Signals)","dashboard.indicator.guide.section6.desc":"signals are used to mark buy/sell points on specific K-lines through icons or text. Note: This is only for chart display. The backtest system uses df['buy_signal'] and df['sell_signal'].","dashboard.indicator.guide.section6.table.type":"Signal type: 'buy' (buy, marked below K-line) or 'sell' (sell, marked above K-line)","dashboard.indicator.guide.section6.table.data":"Signal data list. Fill price value at signal positions, fill None (or np.nan) at non-signal positions","dashboard.indicator.guide.section6.table.text":'Text displayed on the label (e.g. "B", "S", "Buy", "Sell")',"dashboard.indicator.guide.section6.table.color":"Marker color","dashboard.indicator.guide.section6.hint":"The system automatically handles positioning.","dashboard.indicator.guide.section6.buy":"Markers will be automatically positioned below the Low of the current K-line","dashboard.indicator.guide.section6.sell":"Markers will be automatically positioned above the High of the current K-line","dashboard.indicator.guide.section6.example":"Example: Draw Buy/Sell Signals","dashboard.indicator.guide.section6.exampleInit":"Initialize signal list, fill all with None","dashboard.indicator.guide.section6.exampleLogic":"Simple logic: mark buy when close price is greater than open price","dashboard.indicator.guide.section6.exampleNote":"In actual logic, please use loops or vectorized operations","dashboard.indicator.guide.section6.examplePrice":"Record price","dashboard.indicator.guide.section6.exampleText":"Buy","dashboard.indicator.guide.section7.title":"7. Complete Code Examples","dashboard.indicator.guide.section7.exampleA":"Example A: Dual EMA Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleACode":'# 1. Calculate indicators
df[\'ema_fast\'] = df[\'close\'].ewm(span=5, adjust=False).mean()
df[\'ema_slow\'] = df[\'close\'].ewm(span=13, adjust=False).mean()

# 2. Calculate crossover signals
cross_up = (df[\'ema_fast\'] > df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) <= df[\'ema_slow\'].shift(1))
cross_down = (df[\'ema_fast\'] < df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) >= df[\'ema_slow\'].shift(1))

# 3. 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = cross_up
df[\'close_long\'] = cross_down
df[\'open_short\'] = cross_down
df[\'close_short\'] = cross_up

# 4. Generate signal data for chart display
buy_signals = [df[\'low\'].iloc[i] * 0.995 if cross_up.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if cross_down.iloc[i] else None for i in range(len(df))]

# 5. Build output
output = {
"name": "Dual EMA Strategy",
"plots": [
{"name": "EMA 5", "data": df[\'ema_fast\'].tolist(), "color": "#FF6B6B", "overlay": True},
{"name": "EMA 13", "data": df[\'ema_slow\'].tolist(), "color": "#4ECDC4", "overlay": True}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section7.exampleB":"Example B: Bollinger Bands - Chart Display Only","dashboard.indicator.guide.section7.exampleBCode":'# Calculate Bollinger Bands (chart display only, no backtesting)
length = 20
mult = 2.0
df[\'sma\'] = df[\'close\'].rolling(length).mean()
df[\'std\'] = df[\'close\'].rolling(length).std()
df[\'upper\'] = df[\'sma\'] + mult * df[\'std\']
df[\'lower\'] = df[\'sma\'] - mult * df[\'std\']

output = {
"name": "Bollinger Bands",
"plots": [
{"name": "Upper", "data": df[\'upper\'].tolist(), "color": "#FF5252", "overlay": True},
{"name": "Middle", "data": df[\'sma\'].tolist(), "color": "#2196F3", "overlay": True},
{"name": "Lower", "data": df[\'lower\'].tolist(), "color": "#00E676", "overlay": True}
]
}',"dashboard.indicator.guide.section7.exampleC":"Example C: RSI Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleCCode":'# Calculate RSI
delta = df[\'close\'].diff()
up = delta.clip(lower=0)
down = -1 * delta.clip(upper=0)
ema_up = up.ewm(com=13, adjust=False).mean()
ema_down = down.ewm(com=13, adjust=False).mean()
rs = ema_up / ema_down
df[\'rsi\'] = 100 - (100 / (1 + rs))

# Generate trading signals
buy_condition = df[\'rsi\'] < 30 # Oversold buy
sell_condition = df[\'rsi\'] > 70 # Overbought sell

# 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = buy_condition
df[\'close_long\'] = sell_condition
df[\'open_short\'] = sell_condition
df[\'close_short\'] = buy_condition

# Generate chart signals
buy_signals = [df[\'low\'].iloc[i] * 0.995 if buy_condition.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if sell_condition.iloc[i] else None for i in range(len(df))]

output = {
"name": "RSI Strategy",
"plots": [
{"name": "RSI", "data": df[\'rsi\'].tolist(), "color": "#9C27B0", "overlay": False},
{"name": "Overbought", "data": [70] * len(df), "color": "#FF5252", "style": "dashed", "overlay": False},
{"name": "Oversold", "data": [30] * len(df), "color": "#00E676", "style": "dashed", "overlay": False}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section6.param":"Parameters","dashboard.indicator.guide.section6.calc":"Calculate","dashboard.indicator.guide.section6.output":"Output","dashboard.indicator.guide.section6.generate":"Generate signal data (initialize with None)","dashboard.indicator.guide.section6.subchart":"Display on sub-chart","dashboard.indicator.guide.section8.title":"8. Frequently Asked Questions (FAQ)","dashboard.indicator.guide.section8.q1":"Q: Why can't my indicator be backtested?","dashboard.indicator.guide.section8.a1":"A: The backtest system requires NEW signal columns: df['open_long'], df['close_long'], df['open_short'], df['close_short'] (boolean). Even if you set output.signals for chart display, you must set these columns to enable backtesting.","dashboard.indicator.guide.section8.q2":"Q: Data length mismatch?","dashboard.indicator.guide.section8.a2":"A: The data list in plots and signals must have exactly the same length as the K-line data. If you use df['xxx'].tolist(), there is usually no problem.","dashboard.indicator.guide.section8.q3":"Q: How to handle NaN (empty values)?","dashboard.indicator.guide.section8.a3":"A: Pandas calculations (such as rolling mean) will produce NaN at the beginning. The system will automatically convert NaN to null for chart rendering. You don't need to manually clean it, but if you need specific logic, you can use df.fillna(0) or other methods.","dashboard.indicator.guide.section8.q4":"Q: Index mismatch causing all signals to be NaN?","dashboard.indicator.guide.section8.a4":"A: Please ensure you preserve the original df index (timestamp). Avoid using .values to create new Series. Use columns directly like df['close'] for operations.","dashboard.indicator.guide.section8.q5":"Q: Can I use third-party network libraries?","dashboard.indicator.guide.section8.a5":"A: No. The runtime environment is a browser sandbox and cannot use libraries like requests to request external APIs, nor can it install additional pip packages. Limited to built-in libraries such as pandas, numpy, math, json.","dashboard.indicator.guide.section8.q6":"Q: How to debug code?","dashboard.indicator.guide.section8.a6":"A: If the chart does not display indicators, it is usually because the Python code has an error. Please check for syntax errors or array index out of bounds. It is recommended to debug the algorithm logic in a local Python environment first, then copy it in.","dashboard.indicator.guide.section8.q7":"Q: Backtest shows 0 signals?","dashboard.indicator.guide.section8.a7":"A: Please check the data type of df['open_long']/df['close_long']/df['open_short']/df['close_short']. They should be boolean (True/False), not numeric. Use condition.fillna(False).astype(bool) to ensure correct type.","dashboard.indicator.backtest.commissionHint":"Charged on notional value (incl. leverage) per trade; both entry & exit are deducted from balance.","dashboard.indicator.backtest.historyTitle":"Backtest History","dashboard.indicator.backtest.historyRefresh":"Refresh","dashboard.indicator.backtest.historyView":"View","dashboard.indicator.backtest.historyNoData":"No backtest history","dashboard.indicator.backtest.historyUseCurrent":"Only current symbol/timeframe","dashboard.indicator.backtest.historyFilterSymbol":"Symbol","dashboard.indicator.backtest.historyFilterTimeframe":"Timeframe","dashboard.indicator.backtest.historyApply":"Apply filters","dashboard.indicator.backtest.historyAIAnalyze":"AI Analyze","dashboard.indicator.backtest.historyAIAnalyzeTitle":"AI Suggestions","dashboard.indicator.backtest.historyNoAIResult":"No AI analysis result","dashboard.indicator.backtest.historyRunId":"Run ID","dashboard.indicator.backtest.historyCreatedAt":"Time","dashboard.indicator.backtest.historyRange":"Range","dashboard.indicator.backtest.historyStatus":"Status","dashboard.indicator.backtest.historyStatusSuccess":"Success","dashboard.indicator.backtest.historyStatusFailed":"Failed","dashboard.indicator.backtest.historyActions":"Actions","trading-assistant.exchange.ipWhitelistTip":"Please add the following IPs to the whitelist in your exchange API settings:","signal-robot.title":"Signal Robot Console","signal-robot.createBot":"Create New Bot","signal-robot.search.nameOrSymbol":"Name/Symbol","signal-robot.search.placeholder":"Search bot name or symbol","signal-robot.search.status":"Status","signal-robot.search.statusAll":"All","signal-robot.search.statusRunning":"Running","signal-robot.search.statusPaused":"Paused","signal-robot.search.query":"Query","signal-robot.search.reset":"Reset","signal-robot.table.botName":"Bot Name","signal-robot.table.symbolTimeframe":"Symbol/Timeframe","signal-robot.table.triggerStrategy":"Trigger Strategy","signal-robot.table.notificationChannels":"Notification Channels","signal-robot.table.status":"Status","signal-robot.table.action":"Action","signal-robot.table.triggerConditions":"{count} trigger conditions","signal-robot.table.monitoring":"Monitoring","signal-robot.table.paused":"Paused","signal-robot.table.edit":"Edit","signal-robot.table.pause":"Pause","signal-robot.table.start":"Start","signal-robot.table.delete":"Delete","signal-robot.table.deleteConfirm":"Are you sure you want to delete this bot?","signal-robot.table.deleteSuccess":"Deleted successfully","signal-robot.table.startSuccess":"Bot started","signal-robot.table.pauseSuccess":"Bot paused","signal-robot.channel.telegram":"Telegram","signal-robot.channel.discord":"Discord","signal-robot.channel.email":"Email","signal-robot.channel.webhook":"Webhook","signal-robot.channel.browser":"Browser Push","signal-robot.modal.createTitle":"Create New Signal Robot","signal-robot.modal.editTitle":"Edit Signal Robot","signal-robot.modal.step.basic":"Basic Settings","signal-robot.modal.step.entry":"Entry Strategy","signal-robot.modal.step.position":"Position Management","signal-robot.modal.step.risk":"Risk Control","signal-robot.modal.step.notify":"Notification Config","signal-robot.modal.prev":"Previous","signal-robot.modal.next":"Next","signal-robot.modal.preview":"Preview Backtest","signal-robot.modal.complete":"Complete & Run","signal-robot.modal.saveSuccess":"Saved successfully","signal-robot.modal.previewDeveloping":"Preview feature is under development...","signal-robot.modal.basicInfoRequired":"Please complete basic information","signal-robot.basic.alert":"Set basic information for the bot","signal-robot.basic.title":"Basic Information","signal-robot.basic.botName":"Bot Name","signal-robot.basic.botNamePlaceholder":"e.g.: BTC SuperTrend Strategy","signal-robot.basic.symbol":"Trading Pair","signal-robot.basic.symbolPlaceholder":"Select from watchlist","signal-robot.basic.noWatchlist":"No watchlist items, please add in market page first","signal-robot.basic.timeframe":"K-Line Period","signal-robot.basic.timeframe15m":"15 Minutes","signal-robot.basic.timeframe30m":"30 Minutes","signal-robot.basic.timeframe1h":"1 Hour","signal-robot.basic.timeframe4h":"4 Hours","signal-robot.basic.timeframe1d":"1 Day","signal-robot.basic.autoNameSuggestion":"{symbol} Signal Robot","signal-robot.entry.alert":"Trigger entry signal when all conditions below are met","signal-robot.entry.condition":"Condition {index}","signal-robot.entry.indicator":"Indicator","signal-robot.entry.indicatorSupertrend":"SuperTrend","signal-robot.entry.indicatorEma":"EMA (Exponential Moving Average)","signal-robot.entry.indicatorRsi":"RSI (Relative Strength Index)","signal-robot.entry.indicatorMacd":"MACD","signal-robot.entry.indicatorBollinger":"Bollinger Bands","signal-robot.entry.atrPeriod":"ATR Period","signal-robot.entry.multiplier":"Multiplier","signal-robot.entry.triggerSignal":"Trigger Signal","signal-robot.entry.signalTrendBullish":"Trend Bullish","signal-robot.entry.signalTrendBearish":"Trend Bearish","signal-robot.entry.signalIsUptrend":"Is Uptrend","signal-robot.entry.signalIsDowntrend":"Is Downtrend","signal-robot.entry.period":"Period","signal-robot.entry.compareCondition":"Compare Condition","signal-robot.entry.priceAbove":"Price > EMA (Price Above)","signal-robot.entry.priceBelow":"Price < EMA (Price Below)","signal-robot.entry.crossUp":"Price Crosses Above EMA (Golden Cross)","signal-robot.entry.crossDown":"Price Crosses Below EMA (Death Cross)","signal-robot.entry.compare":"Compare","signal-robot.entry.greaterThan":"Greater Than","signal-robot.entry.lessThan":"Less Than","signal-robot.entry.crossUpShort":"Cross Up","signal-robot.entry.crossDownShort":"Cross Down","signal-robot.entry.threshold":"Threshold","signal-robot.entry.selectIndicator":"Please select an indicator to configure parameters","signal-robot.entry.addCondition":"Add Condition","signal-robot.position.alert":"Configure initial position size, leverage and pyramiding rules","signal-robot.position.basicTitle":"Basic Position Management","signal-robot.position.initialSize":"Initial Size (Capital %)","signal-robot.position.initialSizeHint":"Recommended 5% - 20%","signal-robot.position.leverage":"Leverage","signal-robot.position.leverageHint":"Please ensure your exchange account supports this leverage","signal-robot.position.maxPyramiding":"Max Pyramiding Times","signal-robot.position.maxPyramidingHint":"0 means no pyramiding","signal-robot.position.pyramidingTitle":"Pyramiding Rules","signal-robot.position.pyramidingEnabled":"Enabled","signal-robot.position.pyramidingDisabled":"Disabled","signal-robot.position.pyramidingCondition":"Pyramiding Trigger Condition","signal-robot.position.priceRisePct":"Price Rises (Long) / Falls (Short)","signal-robot.position.profitPct":"Profit Reaches","signal-robot.position.triggerThreshold":"Trigger Threshold (%)","signal-robot.position.triggerThresholdHint":"e.g. 3%: add position once every 3% rise","signal-robot.position.addSize":"Single Add Size (Capital %)","signal-robot.position.pyramidingDisabledHint":"Pyramiding disabled, only initial position will be executed","signal-robot.risk.alert":"Configure take profit, stop loss and exit rules","signal-robot.risk.stopLossTitle":"Stop Loss","signal-robot.risk.stopLossEnabled":"Enabled","signal-robot.risk.stopLossDisabled":"Disabled","signal-robot.risk.stopLossType":"Stop Loss Type","signal-robot.risk.stopLossFixedPct":"Fixed Percentage","signal-robot.risk.stopLossAtrMultiplier":"ATR Multiplier","signal-robot.risk.stopLossValue":"Value","signal-robot.risk.stopLossFixedHint":"e.g. 2%: stop loss when loss reaches 2%","signal-robot.risk.stopLossAtrHint":"e.g. 2.0: stop loss when price touches ATR*2.0","signal-robot.risk.stopLossDisabledHint":"Stop loss disabled (high risk)","signal-robot.risk.trailingStopTitle":"Trailing Stop","signal-robot.risk.activationProfit":"Activation Profit (%)","signal-robot.risk.activationProfitHint":"Start trailing when profit reaches this level","signal-robot.risk.callbackPct":"Callback (%)","signal-robot.risk.callbackPctHint":"Trigger take profit when price falls from peak by this percentage","signal-robot.risk.trailingStopDisabledHint":"Trailing stop disabled","signal-robot.risk.otherExitTitle":"Other Exit Rules","signal-robot.risk.signalExit":"Allow Signal Exit","signal-robot.risk.signalExitHint":"Close position immediately when reverse signal appears (e.g. close long when short signal appears)","signal-robot.notify.alert":"Configure notification methods when signal is triggered","signal-robot.notify.channelTitle":"Notification Channels","signal-robot.notify.discordWebhook":"Discord Webhook","signal-robot.notify.genericWebhook":"Generic Webhook","signal-robot.notify.webhookUrl":"Webhook URL","signal-robot.notify.webhookUrlPlaceholder":"https://example.com/webhook","signal-robot.notify.discordUrl":"Discord URL","signal-robot.notify.discordUrlPlaceholder":"https://discord.com/api/webhooks/...","signal-robot.operator.greaterThan":"Greater Than","signal-robot.operator.lessThan":"Less Than","signal-robot.operator.equal":"Equal","signal-robot.operator.goldenCross":"Golden Cross","signal-robot.operator.deathCross":"Death Cross","signal-robot.operator.increaseBy":"Increase By","signal-robot.operator.decreaseBy":"Decrease By","signal-robot.indicator.price":"Price","signal-robot.indicator.rsi":"RSI","signal-robot.indicator.kdjK":"KDJ(K)","signal-robot.indicator.kdjJ":"KDJ(J)","signal-robot.indicator.macd":"MACD","signal-robot.indicator.macdHist":"MACD Histogram","signal-robot.indicator.bollingerUp":"Bollinger Upper","signal-robot.indicator.bollingerLow":"Bollinger Lower","signal-robot.indicator.volume":"Volume","signal-robot.indicator.changePct1h":"1H Change %","signal-robot.indicator.changePct24h":"24H Change %","signal-robot.indicator.signalLine":"Signal Line","settings.group.agent_memory":"메모리/리플렉션 설정","settings.group.reflection_worker":"자동 리플렉션 검증 워커","settings.field.ENABLE_AGENT_MEMORY":"에이전트 메모리 사용","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"벡터 검색 사용(로컬)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"임베딩 차원","settings.field.AGENT_MEMORY_TOP_K":"Top-K 조회 개수","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"후보 윈도우 크기","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"시간 감쇠 반감기(일)","settings.field.AGENT_MEMORY_W_SIM":"유사도 가중치","settings.field.AGENT_MEMORY_W_RECENCY":"시간 가중치","settings.field.AGENT_MEMORY_W_RETURNS":"수익 가중치","settings.field.ENABLE_REFLECTION_WORKER":"자동 검증 사용","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"검증 주기(초)","profile.notifications.title":"알림 설정","profile.notifications.hint":"기본 알림 방법을 설정하세요. 자산 모니터링 및 알림 생성 시 자동으로 사용됩니다","profile.notifications.defaultChannels":"기본 알림 채널","profile.notifications.browser":"앱 내 알림","profile.notifications.email":"이메일","profile.notifications.phone":"SMS","profile.notifications.telegramBotToken":"Telegram Bot Token","profile.notifications.telegramBotTokenPlaceholder":"Telegram Bot Token을 입력하세요","profile.notifications.telegramBotTokenHint":"@BotFather에서 봇을 만들어 Token을 받으세요","profile.notifications.telegramChatId":"Telegram Chat ID","profile.notifications.telegramPlaceholder":"Telegram Chat ID를 입력하세요 (예: 123456789)","profile.notifications.telegramHint":"@userinfobot에 /start를 보내 Chat ID를 받으세요","profile.notifications.notifyEmail":"알림 이메일","profile.notifications.emailPlaceholder":"알림을 받을 이메일 주소","profile.notifications.emailHint":"기본값은 계정 이메일이며 다른 이메일도 설정 가능","profile.notifications.phonePlaceholder":"전화번호를 입력하세요 (예: +821012345678)","profile.notifications.phoneHint":"관리자가 Twilio 서비스를 설정해야 합니다","profile.notifications.discordWebhook":"Discord Webhook","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"Discord 서버 설정에서 Webhook을 생성하세요","profile.notifications.webhookUrl":"Webhook URL","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"커스텀 Webhook URL, POST JSON으로 알림 전송","profile.notifications.webhookToken":"Webhook Token (선택)","profile.notifications.webhookTokenPlaceholder":"요청 인증용 Bearer Token","profile.notifications.webhookTokenHint":"Authorization: Bearer Token으로 Webhook에 전송","profile.notifications.testBtn":"테스트 알림 보내기","profile.notifications.saveSuccess":"알림 설정이 저장되었습니다","profile.notifications.selectChannel":"최소 하나의 알림 채널을 선택하세요","profile.notifications.fillTelegramToken":"Telegram Bot Token을 입력하세요","profile.notifications.fillTelegram":"Telegram Chat ID를 입력하세요","profile.notifications.fillEmail":"알림 이메일을 입력하세요","profile.notifications.testSent":"테스트 알림이 전송되었습니다. 알림 채널을 확인하세요"},f=(0,e.A)((0,e.A)({},p),y)}}]); \ No newline at end of file diff --git a/frontend/dist/js/lang-ko-KR.8d3a2097.js b/frontend/dist/js/lang-ko-KR.8d3a2097.js new file mode 100644 index 0000000..fcc6c7c --- /dev/null +++ b/frontend/dist/js/lang-ko-KR.8d3a2097.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[840],{20729:function(a,t,i){i.d(t,{default:function(){return f}});var e=i(76338),s={items_per_page:"/ 쪽",jump_to:"이동하기",jump_to_confirm:"확인하다",page:"",prev_page:"이전 페이지",next_page:"다음 페이지",prev_5:"이전 5 페이지",next_5:"다음 5 페이지",prev_3:"이전 3 페이지",next_3:"다음 3 페이지"},o=i(85505),r={today:"오늘",now:"현재 시각",backToToday:"오늘로 돌아가기",ok:"확인",clear:"지우기",month:"월",year:"년",timeSelect:"시간 선택",dateSelect:"날짜 선택",monthSelect:"달 선택",yearSelect:"연 선택",decadeSelect:"연대 선택",yearFormat:"YYYY년",dateFormat:"YYYY-MM-DD",dayFormat:"Do",dateTimeFormat:"YYYY-MM-DD HH:mm:ss",monthBeforeYear:!1,previousMonth:"이전 달 (PageUp)",nextMonth:"다음 달 (PageDown)",previousYear:"이전 해 (Control + left)",nextYear:"다음 해 (Control + right)",previousDecade:"이전 연대",nextDecade:"다음 연대",previousCentury:"이전 세기",nextCentury:"다음 세기"},n={placeholder:"날짜 선택"},d=n,l={lang:(0,o.A)({placeholder:"날짜 선택",rangePlaceholder:["시작일","종료일"]},r),timePickerLocale:(0,o.A)({},d)},c=l,g=c,b={locale:"ko",Pagination:s,DatePicker:c,TimePicker:d,Calendar:g,Table:{filterTitle:"필터 메뉴",filterConfirm:"확인",filterReset:"초기화",selectAll:"모두 선택",selectInvert:"선택 반전"},Modal:{okText:"확인",cancelText:"취소",justOkText:"확인"},Popconfirm:{okText:"확인",cancelText:"취소"},Transfer:{searchPlaceholder:"여기에 검색하세요",itemUnit:"개",itemsUnit:"개"},Upload:{uploading:"업로드 중...",removeFile:"파일 삭제",uploadError:"업로드 실패",previewFile:"파일 미리보기",downloadFile:"파일 다운로드"},Empty:{description:"데이터 없음"}},m=b,h=i(63164),u=i.n(h),p={antLocale:m,momentName:"ko",momentLocale:u()},y={submit:"제출",save:"저장","submit.ok":"제출 성공","save.ok":"성공적으로 저장되었습니다","menu.welcome":"환영합니다","menu.home":"홈페이지","menu.dashboard":"대시보드","menu.dashboard.indicator":"지표분석","menu.dashboard.community":"지표 커뮤니티","menu.dashboard.analysis":"AI 분석","menu.dashboard.tradingAssistant":"트레이딩 어시스턴트","menu.dashboard.aiTradingAssistant":"AI 트레이딩 도우미","menu.dashboard.signalRobot":"시그널 로봇","menu.dashboard.monitor":"모니터링 페이지","menu.dashboard.workplace":"작업대","menu.form":"양식 페이지","menu.form.basic-form":"기본 형태","menu.form.step-form":"단계별 양식","menu.form.step-form.info":"단계별 양식(이체 정보 입력)","menu.form.step-form.confirm":"단계별 양식(이체정보 확인)","menu.form.step-form.result":"단계별 양식(완료)","menu.form.advanced-form":"고급 양식","menu.list":"목록 페이지","menu.list.table-list":"문의 양식","menu.list.basic-list":"표준 목록","menu.list.card-list":"카드 목록","menu.list.search-list":"검색 목록","menu.list.search-list.articles":"검색 목록(기사)","menu.list.search-list.projects":"검색 목록(프로젝트)","menu.list.search-list.applications":"검색 목록(앱)","menu.profile":"세부정보 페이지","menu.profile.basic":"기본 세부정보 페이지","menu.profile.advanced":"고급 세부정보 페이지","menu.result":"결과 페이지","menu.result.success":"성공 페이지","menu.result.fail":"실패 페이지","menu.exception":"예외 페이지","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"트리거 오류","menu.account":"개인 페이지","menu.account.center":"개인 센터","menu.account.settings":"개인 설정","menu.account.trigger":"트리거 오류","menu.account.logout":"로그아웃","menu.wallet":"내 지갑","menu.docs":"문서 센터","menu.docs.detail":"문서 세부정보","menu.header.refreshPage":"페이지 새로 고침","menu.invite.friends":"친구 초대","app.setting.pagestyle":"전반적인 스타일 설정","app.setting.pagestyle.light":"밝은 메뉴 스타일","app.setting.pagestyle.dark":"어두운 메뉴 스타일","app.setting.pagestyle.realdark":"다크 모드","app.setting.themecolor":"테마 색상","app.setting.navigationmode":"탐색 모드","app.setting.sidemenu.nav":"사이드바 탐색","app.setting.topmenu.nav":"상단 표시줄 탐색","app.setting.content-width":"콘텐츠 영역 너비","app.setting.content-width.tooltip":"이 설정은 [상단 표시줄 탐색]인 경우에만 유효합니다.","app.setting.content-width.fixed":"고정","app.setting.content-width.fluid":"스트리밍","app.setting.fixedheader":"고정 헤더","app.setting.fixedheader.tooltip":"헤더 고정 시 구성 가능","app.setting.autoHideHeader":"스크롤할 때 헤더 숨기기","app.setting.fixedsidebar":"사이드 메뉴 고정","app.setting.sidemenu":"사이드 메뉴 레이아웃","app.setting.topmenu":"상단 메뉴 레이아웃","app.setting.othersettings":"기타 설정","app.setting.weakmode":"색약 모드","app.setting.multitab":"멀티탭 모드","app.setting.copy":"설정 복사","app.setting.loading":"테마 로드 중","app.setting.copyinfo":"설정을 성공적으로 복사했습니다. src/config/defaultSettings.js","app.setting.copy.success":"복사 완료","app.setting.copy.fail":"복사 실패","app.setting.theme.switching":"테마 변경!","app.setting.production.hint":"구성 표시줄은 개발 환경에서 미리 보기에만 사용되며 프로덕션 환경에서는 표시되지 않습니다. 구성 파일을 수동으로 복사하고 수정하십시오.","app.setting.themecolor.daybreak":"새벽 파란색(기본값)","app.setting.themecolor.dust":"황혼","app.setting.themecolor.volcano":"화산","app.setting.themecolor.sunset":"일몰","app.setting.themecolor.cyan":"밍칭","app.setting.themecolor.green":"오로라 그린","app.setting.themecolor.geekblue":"긱 블루","app.setting.themecolor.purple":"장쯔(Jiang Zi)","app.setting.tooltip":"페이지 설정","user.login.userName":"사용자 이름","user.login.password":"비밀번호","user.login.username.placeholder":"계정: 관리자","user.login.password.placeholder":"비밀번호: admin 또는 ant.design","user.login.message-invalid-credentials":"로그인에 실패했습니다. 이메일과 인증 코드를 확인하세요.","user.login.message-invalid-verification-code":"인증코드 오류","user.login.tab-login-credentials":"계정 비밀번호 로그인","user.login.tab-login-email":"이메일 로그인","user.login.tab-login-mobile":"휴대폰번호 로그인","user.login.captcha.placeholder":"그래픽 인증 코드를 입력하세요.","user.login.mobile.placeholder":"휴대전화번호","user.login.mobile.verification-code.placeholder":"인증코드","user.login.email.placeholder":"이메일 주소를 입력해주세요","user.login.email.verification-code.placeholder":"인증번호를 입력해주세요","user.login.email.sending":"인증코드가 전송되는 중입니다...","user.login.email.send-success-title":"팁","user.login.email.send-success":"인증코드가 성공적으로 전송되었습니다. 이메일을 확인해 주세요.","user.login.sms.send-success":"인증번호가 성공적으로 전송되었습니다. 문자 메시지를 확인하세요.","user.login.remember-me":"자동 로그인","user.login.forgot-password":"비밀번호를 잊으셨나요?","user.login.sign-in-with":"기타 로그인 방법","user.login.signup":"계정 등록","user.login.login":"로그인","user.register.register":"등록","user.register.email.placeholder":"이메일","user.register.password.placeholder":"6자 이상 입력해주세요. 쉽게 추측할 수 있는 비밀번호는 사용하지 마세요.","user.register.password.popover-message":"6자 이상 입력해주세요. 쉽게 추측할 수 있는 비밀번호는 사용하지 마세요.","user.register.confirm-password.placeholder":"비밀번호 확인","user.register.get-verification-code":"인증 코드 받기","user.register.sign-in":"기존 계정을 사용하여 로그인","user.register-result.msg":"귀하의 계정: {email} 등록이 완료되었습니다.","user.register-result.activation-email":"활성화 이메일이 귀하의 사서함으로 전송되었으며 24시간 동안 유효합니다. 귀하의 이메일에 즉시 로그인하고 이메일에 있는 링크를 클릭하여 계정을 활성화하십시오.","user.register-result.back-home":"홈페이지로 돌아가기","user.register-result.view-mailbox":"우편함을 확인하세요","user.email.required":"이메일 주소를 입력해주세요!","user.email.wrong-format":"이메일 주소 형식이 잘못되었습니다!","user.userName.required":"계정 이름이나 이메일 주소를 입력하세요","user.password.required":"비밀번호를 입력해주세요!","user.password.twice.msg":"두 번 입력한 비밀번호가 일치하지 않습니다!","user.password.strength.msg":"비밀번호가 충분히 강력하지 않습니다.","user.password.strength.strong":"힘: 강한","user.password.strength.medium":"강도: 중간","user.password.strength.low":"강도: 낮음","user.password.strength.short":"강도: 너무 짧음","user.confirm-password.required":"비밀번호를 확인해 주세요!","user.phone-number.required":"정확한 휴대폰번호를 입력해주세요","user.phone-number.wrong-format":"휴대폰 번호 형식이 잘못되었습니다!","user.verification-code.required":"인증번호를 입력해주세요!","user.captcha.required":"그래픽 인증코드를 입력해주세요!","user.login.infos":"QuantDinger는 AI 멀티에이전트 주식 분석 보조 도구로 증권 투자 컨설팅 자격이 없습니다. 플랫폼 내 모든 분석 결과, 점수, 참고 의견은 과거 데이터를 기반으로 AI에 의해 자동으로 생성되며 학습, 연구 및 기술 교류에만 사용되며 투자 조언이나 의사 결정 기반을 구성하지 않습니다. 주식투자에는 시장리스크, 유동성리스크, 정책리스크 등 다양한 리스크가 수반되며, 이로 인해 원금 손실이 발생할 수 있습니다. 사용자는 자신의 위험 허용 범위에 따라 독립적인 결정을 내려야 하며, 이 도구의 사용으로 인해 발생하는 모든 투자 행위 및 결과는 사용자가 부담해야 합니다. 시장은 위험하므로 투자에 신중해야 합니다.","user.login.tab-login-web3":"Web3 로그인","user.login.web3.tip":"지갑을 이용한 서명 로그인","user.login.web3.connect":"지갑을 연결하고 로그인하세요","user.login.web3.no-wallet":"지갑이 감지되지 않음","user.login.web3.no-address":"지갑 주소를 가져오지 못했습니다.","user.login.web3.nonce-failed":"난수를 가져오지 못했습니다.","user.login.web3.verify-failed":"서명 확인 실패","user.login.web3.success":"로그인 성공","user.login.web3.failed":"지갑 로그인 실패","nav.no_wallet":"지갑이 감지되지 않음","nav.copy":"복사","nav.copy_success":"성공적으로 복사되었습니다","user.login.oauth.google":"Google로 로그인","user.login.oauth.github":"GitHub로 로그인","user.login.oauth.loading":"승인 페이지로 리디렉션 중...","user.login.oauth.failed":"OAuth 로그인 실패","user.login.oauth.get-url-failed":"승인 링크를 얻지 못했습니다.","user.login.subtitle":"글로벌 시장에 대한 정량적 통찰력 확보","user.login.legal.title":"법적 고지 사항","user.login.legal.view":"법적 고지사항 보기","user.login.legal.collapse":"법적 면책조항 접기","user.login.legal.agree":"법적 고지 사항을 읽었으며 이에 동의합니다.","user.login.legal.required":"먼저 법적 고지 사항을 읽고 확인하십시오.","user.login.legal.content":"QuantDinger는 AI 멀티에이전트 주식 분석 보조 도구로 증권 투자 컨설팅 자격이 없습니다. 플랫폼 내 모든 분석 결과, 등급, 참고 의견은 과거 데이터를 기반으로 AI에 의해 자동으로 생성되며 학습, 연구 및 기술 교류에만 사용되며 투자 조언이나 의사 결정 기반을 구성하지 않습니다. 주식투자에는 시장리스크, 유동성리스크, 정책리스크 등 다양한 리스크가 수반되며, 이로 인해 원금 손실이 발생할 수 있습니다. 사용자는 자신의 위험 허용 범위에 따라 독립적인 결정을 내려야 하며, 이 도구의 사용으로 인해 발생하는 모든 투자 행위 및 결과는 사용자가 부담해야 합니다. 시장은 위험하므로 투자에 신중해야 합니다.","user.login.privacy.title":"사용자 개인 정보 보호 정책","user.login.privacy.view":"사용자 개인 정보 보호 정책 보기","user.login.privacy.collapse":"사용자 개인정보 보호 약관 닫기","user.login.privacy.content":"우리는 귀하의 개인 정보 보호와 데이터 보호를 중요하게 생각합니다. 1) 수집 범위 : 기능 구현에 꼭 필요한 정보(이메일, 휴대전화번호, 지역번호, Web3 지갑 주소 등)와 필수 로그, 기기정보만 수집합니다. 2) 이용 목적: 계정 로그인 및 보안 확인, 서비스 기능 제공, 문제 해결 및 규정 준수 요구 사항. 3) 저장 및 보안: 데이터는 암호화되어 저장되며, 무단 접근, 공개 또는 손실을 방지하기 위해 필요한 권한 및 접근 제어 조치가 취해집니다. 4) 제3자와의 공유: 법률 및 규정에 의해 요구되거나 서비스 수행에 필요한 경우를 제외하고, 귀하의 개인정보는 제3자와 공유되지 않습니다. 제3자 서비스(예: 지갑, SMS 서비스 제공업체)가 관련된 경우 해당 기능을 구현하는 데 필요한 최소한의 범위에서만 처리됩니다. 5) 쿠키/로컬 저장소: 로그인 상태 및 필요한 세션 유지 관리(예: 토큰, PHPSESSID)에 사용되며 브라우저에서 이를 삭제하거나 제한할 수 있습니다. 6) 개인권리 : 귀하는 법령에 따른 조회, 정정, 삭제, 동의철회 등의 권리를 행사할 수 있습니다. 7) 변경 및 공지: 본 약관이 업데이트되면 페이지에 눈에 띄게 표시됩니다. 본 서비스를 계속 이용하시면 업데이트된 내용을 읽고 동의하신 것으로 간주됩니다. 본 약관 또는 그에 대한 업데이트에 동의하지 않는 경우 서비스 사용을 중단하고 당사에 문의하십시오.","account.basicInfo":"기본정보","account.id":"사용자 ID","account.username":"사용자 이름","account.nickname":"닉네임","account.email":"이메일","account.mobile":"휴대전화번호","account.web3address":"지갑 주소","account.pid":"추천인 ID","account.level":"사용자 수준","account.money":"균형","account.qdtBalance":"QDT 잔액","account.score":"포인트","account.createtime":"등록 시간","account.inviteLink":"초대링크","account.recharge":"재충전","account.rechargeTip":"충전하려면 WeChat 또는 Alipay를 사용하여 아래 QR 코드를 스캔하세요.","account.qrCodePlaceholder":"QR 코드 자리 표시자(에뮬레이션)","account.rechargeAmount":"충전금액","account.enterAmount":"충전금액을 입력해주세요","account.rechargeHint":"최소 입금액: 1 QDT","account.confirmRecharge":"충전 확인","account.enterValidAmount":"유효한 충전 금액을 입력하세요.","account.rechargeSuccess":"재충전 성공! {amount} QDT 입금","account.settings.menuMap.basic":"기본 설정","account.settings.menuMap.security":"보안 설정","account.settings.menuMap.notification":"새 메시지 알림","account.settings.menuMap.moneyLog":"기금 세부정보","account.moneyLog.empty":"아직 펀드 세부정보가 없습니다.","account.moneyLog.total":"총 {total}개 기록","account.moneyLog.type.purchase":"매수 지표","account.moneyLog.type.recharge":"재충전","account.moneyLog.type.refund":"환불","account.moneyLog.type.reward":"보상","account.moneyLog.type.income":"지표소득","account.moneyLog.type.commission":"플랫폼 취급 수수료","wallet.balance":"QDT 잔액","wallet.recharge":"재충전","wallet.withdraw":"현금 인출","wallet.filter":"필터","wallet.reset":"재설정","wallet.totalRecharge":"누적 충전","wallet.totalWithdraw":"누적 출금","wallet.totalIncome":"누적 수입","wallet.records":"거래기록 및 자금내역","wallet.tradingRecords":"거래 내역","wallet.moneyLog":"기금 세부정보","wallet.rechargeTip":"충전하려면 WeChat 또는 Alipay를 사용하여 아래 QR 코드를 스캔하세요.","wallet.qrCodePlaceholder":"QR 코드 자리 표시자(에뮬레이션)","wallet.rechargeAmount":"충전금액","wallet.enterAmount":"충전금액을 입력해주세요","wallet.rechargeHint":"최소 입금액: 1 QDT","wallet.confirmRecharge":"충전 확인","wallet.enterValidAmount":"유효한 충전 금액을 입력하세요.","wallet.rechargeSuccess":"재충전 성공! {amount} QDT 입금","wallet.rechargeFailed":"재충전 실패","wallet.withdrawTip":"출금금액과 출금주소를 입력해주세요","wallet.withdrawAmount":"출금금액","wallet.enterWithdrawAmount":"출금금액을 입력해주세요","wallet.withdrawHint":"최소 출금 금액: 1 QDT","wallet.withdrawAddress":"출금주소(선택)","wallet.enterWithdrawAddress":"출금주소를 입력해주세요","wallet.confirmWithdraw":"출금 확인","wallet.enterValidWithdrawAmount":"유효한 인출 금액을 입력하세요.","wallet.insufficientBalance":"잔액 부족","wallet.withdrawSuccess":"출금 성공! 인출된 {금액} QDT","wallet.withdrawFailed":"출금 실패","wallet.noTradingRecords":"아직 거래기록이 없습니다","wallet.noMoneyLog":"아직 펀드 세부정보가 없습니다.","wallet.loadTradingRecordsFailed":"거래 기록을 로드하지 못했습니다.","wallet.loadMoneyLogFailed":"자금 세부정보를 로드하지 못했습니다.","wallet.moneyLogTotal":"총 {total}개 기록","wallet.moneyLogTypeTitle":"유형","wallet.moneyLogType.all":"모든 유형","wallet.table.time":"시간","wallet.table.type":"유형","wallet.table.price":"가격","wallet.table.amount":"수량","wallet.table.money":"금액","wallet.table.balance":"균형","wallet.table.memo":"비고","wallet.table.value":"가치","wallet.table.profit":"이익과 손실","wallet.table.commission":"취급 수수료","wallet.table.total":"총 {total}개 기록","wallet.tradeType.buy":"사다","wallet.tradeType.sell":"팔다","wallet.tradeType.liquidation":"강제청산","wallet.tradeType.openLong":"길게 열다","wallet.tradeType.addLong":"가돗","wallet.tradeType.closeLong":"핀듀오","wallet.tradeType.closeLongStop":"손실을 멈추고 오랫동안","wallet.tradeType.closeLongProfit":"이익을 얻고 더 많은 레벨을 올리세요","wallet.tradeType.openShort":"오픈 쇼트","wallet.tradeType.addShort":"짧게 추가하다","wallet.tradeType.closeShort":"비어 있음","wallet.tradeType.closeShortStop":"손실 중지","wallet.tradeType.closeShortProfit":"이익을 얻고 공매도 마감","wallet.moneyLogType.purchase":"매수 지표","wallet.moneyLogType.recharge":"재충전","wallet.moneyLogType.withdraw":"현금 인출","wallet.moneyLogType.refund":"환불","wallet.moneyLogType.reward":"보상","wallet.moneyLogType.income":"소득","wallet.moneyLogType.commission":"취급 수수료","wallet.web3Address.required":"먼저 Web3 지갑 주소를 입력해주세요","wallet.web3Address.requiredDescription":"충전하기 전에 Web3 지갑 주소를 바인딩해야 충전을 받을 수 있습니다.","wallet.web3Address.placeholder":"Web3 지갑 주소(0x로 시작)를 입력하세요.","wallet.web3Address.save":"지갑 주소 저장","wallet.web3Address.saveSuccess":"지갑 주소가 성공적으로 저장되었습니다","wallet.web3Address.saveFailed":"지갑 주소 저장 실패","wallet.web3Address.invalidFormat":"유효한 Web3 지갑 주소를 입력하세요. (이더리움 형식: 0x로 시작하는 42자 또는 TRC20 형식: T로 시작하는 34자)","wallet.selectCoin":"통화 선택","wallet.selectChain":"선택 체인","wallet.chain.eth":"ETH(ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"BSC","wallet.targetQdtAmount":"상환하려는 QDT 금액(선택 사항)","wallet.targetQdtAmount.placeholder":"상환하려는 QDT 수량, 현재 QDT 가격을 입력하세요: {price} USDT","wallet.targetQdtAmount.requiredUsdt":"재충전 필요: {amount} USDT","wallet.rechargeAddress":"충전 주소","wallet.copyAddress":"복사","wallet.copySuccess":"성공적으로 복사되었습니다!","wallet.copyFailed":"복사하지 못했습니다. 수동으로 복사하세요.","wallet.rechargeAddressHint":"이 주소에 {coin}을 입금하려면 반드시 {chain}을 사용하세요.","wallet.qdtPrice.loading":"로드 중...","wallet.rechargeTip.new":"통화와 체인을 선택한 후 아래 QR 코드를 스캔하여 충전하세요.","wallet.exchangeRate":"1 QDT ≒ {rate} USDT","wallet.withdrawableAmount":"사용 가능한 현금 금액","wallet.totalBalance":"총 잔액","wallet.insufficientWithdrawable":"출금 가능한 현금 금액이 부족합니다. 현재 인출할 수 있는 금액은 다음과 같습니다: {amount} QDT","wallet.withdrawAddressRequired":"출금주소를 입력해주세요","wallet.withdrawAddressHint":"주소가 올바른지 확인하십시오. 탈퇴 후에는 취소가 불가능합니다.","wallet.withdrawSubmitSuccess":"철회 신청서가 성공적으로 제출되었습니다. 검토를 기다려 주세요.","menu.footer.contactUs":"문의하기","menu.footer.getSupport":"지원 받기","menu.footer.socialAccounts":"소셜 계정","menu.footer.userAgreement":"사용자 계약","menu.footer.privacyPolicy":"개인 정보 보호 정책","menu.footer.support":"지원","menu.footer.featureRequest":"기능 요청","menu.footer.email":"이메일","menu.footer.liveChat":"연중무휴 라이브 채팅","dashboard.analysis.title":"다차원 분석","dashboard.analysis.subtitle":"AI 기반 종합재무분석 플랫폼","dashboard.analysis.selectSymbol":"기본 코드 선택 또는 입력","dashboard.analysis.selectModel":"모델 선택","dashboard.analysis.startAnalysis":"분석 시작","dashboard.analysis.history":"역사","dashboard.analysis.tab.overview":"종합적인 분석","dashboard.analysis.tab.fundamental":"기초","dashboard.analysis.tab.technical":"기술","dashboard.analysis.tab.news":"뉴스","dashboard.analysis.tab.sentiment":"감정","dashboard.analysis.tab.risk":"위험","dashboard.analysis.tab.debate":"길고 짧은 논쟁","dashboard.analysis.tab.decision":"최종 결정","dashboard.analysis.empty.selectSymbol":"분석을 시작하려면 대상을 선택하세요.","dashboard.analysis.empty.selectSymbolDesc":"자체 선택한 주식 목록에서 선택하거나 기본 코드를 입력하여 다차원 AI 분석 보고서를 얻습니다.","dashboard.analysis.empty.startAnalysis":'다차원 분석을 수행하려면 "분석 시작" 버튼을 클릭하세요.',"dashboard.analysis.empty.startAnalysisDesc":"펀더멘털, 기술, 뉴스, 정서, 리스크 등 다차원에서 종합적인 분석을 제공해드립니다.","dashboard.analysis.empty.noData":"현재 {type} 분석 데이터가 없습니다. 먼저 종합적인 분석을 수행해 주세요.","dashboard.analysis.empty.noWatchlist":"현재 자체선택한 종목이 없습니다.","dashboard.analysis.empty.noHistory":"아직 기록이 없습니다.","dashboard.analysis.empty.watchlistHint":"현재 자체 선택한 주식이 없습니다. 먼저 문의해 주세요.","dashboard.analysis.empty.noDebateData":"아직 토론 데이터가 없습니다.","dashboard.analysis.empty.noDecisionData":"아직 결정 데이터가 없습니다.","dashboard.analysis.empty.selectAgent":"분석 결과를 보려면 에이전트를 선택하세요.","dashboard.analysis.loading.analyzing":"분석 중입니다. 잠시 기다려 주세요...","dashboard.analysis.loading.fundamental":"기본 데이터 분석 중...","dashboard.analysis.loading.technical":"기술 지표 분석 중...","dashboard.analysis.loading.news":"뉴스 데이터 분석 중...","dashboard.analysis.loading.sentiment":"시장 심리 분석 중…","dashboard.analysis.loading.risk":"위험 평가 중...","dashboard.analysis.loading.debate":"롱숏 논쟁이 진행중인데..","dashboard.analysis.loading.decision":"최종 결정을 내리는 중...","dashboard.analysis.score.overall":"종합평가","dashboard.analysis.score.recommendation":"투자 조언","dashboard.analysis.score.confidence":"자신감","dashboard.analysis.dimension.fundamental":"기초","dashboard.analysis.dimension.technical":"기술","dashboard.analysis.dimension.news":"뉴스","dashboard.analysis.dimension.sentiment":"감정","dashboard.analysis.dimension.risk":"위험","dashboard.analysis.card.dimensionScores":"각 차원에 대한 평가","dashboard.analysis.card.overviewReport":"종합분석보고서","dashboard.analysis.card.financialMetrics":"재무 지표","dashboard.analysis.card.fundamentalReport":"기초분석 보고서","dashboard.analysis.card.technicalIndicators":"기술 지표","dashboard.analysis.card.technicalReport":"기술적 분석 보고서","dashboard.analysis.card.newsList":"관련 뉴스","dashboard.analysis.card.newsReport":"뉴스 분석 보고서","dashboard.analysis.card.sentimentIndicators":"감정 지표","dashboard.analysis.card.sentimentReport":"감정 분석 보고서","dashboard.analysis.card.riskMetrics":"위험 지표","dashboard.analysis.card.riskReport":"위험 평가 보고서","dashboard.analysis.card.bullView":"강세 전망(강세)","dashboard.analysis.card.bearView":"약세 전망 (곰)","dashboard.analysis.card.researchConclusion":"연구원의 결론","dashboard.analysis.card.traderPlan":"상인 계획","dashboard.analysis.card.riskDebate":"위험위원회 토론","dashboard.analysis.card.finalDecision":"최종 결정","dashboard.analysis.card.tradePlanDetail":"거래 계획 세부정보","dashboard.analysis.tradingPlan.entry_price":"입장료","dashboard.analysis.tradingPlan.position_size":"위치 크기","dashboard.analysis.tradingPlan.stop_loss":"손실을 막다","dashboard.analysis.tradingPlan.take_profit":"이익을 얻으세요","dashboard.analysis.label.confidence":"자신감","dashboard.analysis.label.keyPoints":"핵심 포인트","dashboard.analysis.label.riskWarning":"위험 경고","dashboard.analysis.risk.risky":"위험하다","dashboard.analysis.risk.neutral":"중립적 관점 (Neutral)","dashboard.analysis.risk.safe":"보수적 관점(안전)","dashboard.analysis.risk.conclusion":"결론","dashboard.analysis.feature.fundamental":"기본적 분석","dashboard.analysis.feature.technical":"기술적 분석","dashboard.analysis.feature.news":"뉴스 분석","dashboard.analysis.feature.sentiment":"감정 분석","dashboard.analysis.feature.risk":"위험 평가","dashboard.analysis.watchlist.title":"나의 주식 선택","dashboard.analysis.watchlist.add":"추가하다","dashboard.analysis.watchlist.addStock":"재고 추가","dashboard.analysis.modal.addStock.title":"옵션 재고 추가","dashboard.analysis.modal.addStock.confirm":"알았어","dashboard.analysis.modal.addStock.cancel":"취소","dashboard.analysis.modal.addStock.market":"시장 유형","dashboard.analysis.modal.addStock.marketPlaceholder":"시장을 선택해주세요","dashboard.analysis.modal.addStock.marketRequired":"시장 유형을 선택하세요.","dashboard.analysis.modal.addStock.symbol":"주식 코드","dashboard.analysis.modal.addStock.symbolPlaceholder":"예: AAPL, TSLA, GOOGL, 000001, BTC","dashboard.analysis.modal.addStock.symbolRequired":"주식코드를 입력해주세요","dashboard.analysis.modal.addStock.searchPlaceholder":"대상 코드 또는 이름 검색","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"기본 코드를 검색하거나 입력하세요(예: AAPL, BTC/USDT, EUR/USD)","dashboard.analysis.modal.addStock.searchOrInputHint":"데이터베이스에서 객체 검색 또는 코드 직접 입력 지원(시스템이 자동으로 이름을 얻음)","dashboard.analysis.modal.addStock.search":"검색","dashboard.analysis.modal.addStock.searchResults":"검색결과","dashboard.analysis.modal.addStock.hotSymbols":"인기 있는 타겟","dashboard.analysis.modal.addStock.noHotSymbols":"아직 인기 있는 타겟이 없습니다.","dashboard.analysis.modal.addStock.selectedSymbol":"선택됨","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"먼저 대상을 선택하세요.","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"대상을 선택하거나 대상 코드를 먼저 입력하세요","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"타겟코드를 입력해주세요","dashboard.analysis.modal.addStock.pleaseSelectMarket":"먼저 시장 유형을 선택하세요.","dashboard.analysis.modal.addStock.searchFailed":"검색에 실패했습니다. 나중에 다시 시도해 주세요.","dashboard.analysis.modal.addStock.noSearchResults":"일치하는 대상이 없습니다.","dashboard.analysis.modal.addStock.willAutoFetchName":"시스템에서 자동으로 이름을 가져옵니다.","dashboard.analysis.modal.addStock.addDirectly":"직접 추가","dashboard.analysis.modal.addStock.nameWillBeFetched":"추가되면 이름이 자동으로 선택됩니다.","dashboard.analysis.market.USStock":"미국 주식","dashboard.analysis.market.Crypto":"암호화폐","dashboard.analysis.market.Forex":"외환","dashboard.analysis.market.Futures":"선물","dashboard.analysis.modal.history.title":"역사적 분석 기록","dashboard.analysis.modal.history.viewResult":"결과 보기","dashboard.analysis.modal.history.completeTime":"완료 시간","dashboard.analysis.modal.history.error":"오류","dashboard.analysis.status.pending":"보류 중","dashboard.analysis.status.processing":"처리","dashboard.analysis.status.completed":"완료됨","dashboard.analysis.status.failed":"실패했다","dashboard.analysis.message.selectSymbol":"대상을 먼저 선택해주세요","dashboard.analysis.message.taskCreated":"분석 작업이 생성되어 백그라운드에서 실행 중입니다...","dashboard.analysis.message.analysisComplete":"분석 완료","dashboard.analysis.message.analysisCompleteCache":"분석 완료(캐시된 데이터 활용)","dashboard.analysis.message.analysisFailed":"분석에 실패했습니다. 나중에 다시 시도해 주세요.","dashboard.analysis.message.addStockSuccess":"성공적으로 추가되었습니다","dashboard.analysis.message.addStockFailed":"추가 실패","dashboard.analysis.message.removeStockSuccess":"성공적으로 제거되었습니다","dashboard.analysis.message.removeStockFailed":"제거 실패","dashboard.analysis.message.resumingAnalysis":"분석 작업을 재개하는 중...","dashboard.analysis.message.deleteSuccess":"성공적으로 삭제되었습니다","dashboard.analysis.message.deleteFailed":"삭제 실패","dashboard.analysis.modal.history.delete":"삭제","dashboard.analysis.modal.history.deleteConfirm":"이 분석 기록을 삭제하시겠습니까?","dashboard.analysis.test":"상점 번호 {no}, Gongzhuan Road","dashboard.analysis.introduce":"표시기 설명","dashboard.analysis.total-sales":"총매출","dashboard.analysis.day-sales":"일평균 매출엔엔","dashboard.analysis.visits":"방문","dashboard.analysis.visits-trend":"트래픽 동향","dashboard.analysis.visits-ranking":"매장 방문 순위","dashboard.analysis.day-visits":"일일 방문","dashboard.analysis.week":"매주 전년 대비","dashboard.analysis.day":"전년 대비","dashboard.analysis.payments":"결제 횟수","dashboard.analysis.conversion-rate":"전환율","dashboard.analysis.operational-effect":"운영활동 효과","dashboard.analysis.sales-trend":"판매 동향","dashboard.analysis.sales-ranking":"매장판매순위","dashboard.analysis.all-year":"일년 내내","dashboard.analysis.all-month":"이번 달","dashboard.analysis.all-week":"이번 주","dashboard.analysis.all-day":"오늘","dashboard.analysis.search-users":"검색 사용자 수","dashboard.analysis.per-capita-search":"1인당 검색량","dashboard.analysis.online-top-search":"온라인 인기 검색어","dashboard.analysis.the-proportion-of-sales":"판매 카테고리 비율","dashboard.analysis.dropdown-option-one":"첫 번째 작전","dashboard.analysis.dropdown-option-two":"작전 2","dashboard.analysis.channel.all":"모든 채널","dashboard.analysis.channel.online":"온라인","dashboard.analysis.channel.stores":"저장","dashboard.analysis.sales":"판매","dashboard.analysis.traffic":"승객 흐름","dashboard.analysis.table.rank":"순위","dashboard.analysis.table.search-keyword":"키워드 검색","dashboard.analysis.table.users":"사용자 수","dashboard.analysis.table.weekly-range":"주간 증가","dashboard.indicator.selectSymbol":"기본 코드 선택 또는 입력","dashboard.indicator.emptyWatchlistHint":"현재 자체 선택한 주식이 없습니다. 먼저 추가해 주세요.","dashboard.indicator.hint.selectSymbol":"분석을 시작하려면 대상을 선택하세요.","dashboard.indicator.hint.selectSymbolDesc":"K-라인 차트 및 기술 지표를 보려면 위 검색창에서 주식 코드를 선택하거나 입력하세요.","dashboard.indicator.retry":"다시 시도하세요","dashboard.indicator.panel.title":"기술 지표","dashboard.indicator.panel.realtimeOn":"실시간 업데이트 끄기","dashboard.indicator.panel.realtimeOff":"실시간 업데이트 활성화","dashboard.indicator.panel.themeLight":"어두운 테마로 전환","dashboard.indicator.panel.themeDark":"밝은 테마로 전환","dashboard.indicator.section.enabled":"활성화됨","dashboard.indicator.section.added":"내가 추가한 지표","dashboard.indicator.section.custom":"직접 만든 지표","dashboard.indicator.section.bought":"내가 구매한 지표","dashboard.indicator.section.myCreated":"내가 만든 지표","dashboard.indicator.empty":"아직 표시기가 없습니다. 먼저 표시기를 추가하거나 생성하세요.","dashboard.indicator.buy":"매수 지표","dashboard.indicator.action.start":"시작","dashboard.indicator.action.stop":"닫기","dashboard.indicator.action.edit":"편집","dashboard.indicator.action.delete":"삭제","dashboard.indicator.action.backtest":"백테스트","dashboard.indicator.status.normal":"정상","dashboard.indicator.status.normalPermanent":"일반(영구적으로 유효)","dashboard.indicator.status.expired":"만료됨","dashboard.indicator.expiry.permanent":"영구적으로 유효함","dashboard.indicator.expiry.noExpiry":"만료 시간 없음","dashboard.indicator.expiry.expired":"만료됨: {date}","dashboard.indicator.expiry.expiresOn":"만료 시간: {date}","dashboard.indicator.delete.confirmTitle":"삭제 확인","dashboard.indicator.delete.confirmContent":'"{name}" 표시기를 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.',"dashboard.indicator.delete.confirmOk":"삭제","dashboard.indicator.delete.confirmCancel":"취소","dashboard.indicator.delete.success":"성공적으로 삭제되었습니다","dashboard.indicator.delete.failed":"삭제 실패","dashboard.indicator.save.success":"성공적으로 저장되었습니다","dashboard.indicator.save.failed":"저장 실패","dashboard.indicator.error.loadWatchlistFailed":"옵션 재고를 로드하지 못했습니다.","dashboard.indicator.error.chartNotReady":"차트 구성 요소가 초기화되지 않았습니다. 먼저 대상을 선택하고 차트가 로드될 때까지 기다려 주세요.","dashboard.indicator.error.chartMethodNotReady":"차트 구성 요소 메서드가 준비되지 않았습니다. 나중에 다시 시도해 주세요.","dashboard.indicator.error.chartExecuteNotReady":"차트 구성요소 실행 방법이 준비되지 않았습니다. 나중에 다시 시도해 주세요.","dashboard.indicator.error.parseFailed":"Python 코드를 구문 분석할 수 없습니다.","dashboard.indicator.error.parseFailedCheck":"Python 코드를 구문 분석할 수 없습니다. 코드 형식을 확인하세요.","dashboard.indicator.error.addIndicatorFailed":"표시기를 추가하지 못했습니다.","dashboard.indicator.error.runIndicatorFailed":"실행 표시기 실패","dashboard.indicator.error.pleaseLogin":"먼저 로그인해주세요","dashboard.indicator.error.loadDataFailed":"데이터 로딩 실패","dashboard.indicator.error.loadDataFailedDesc":"네트워크 연결을 확인해주세요","dashboard.indicator.error.pythonEngineFailed":"Python 엔진을 로드하지 못했고 표시기 기능을 사용하지 못할 수 있습니다.","dashboard.indicator.error.chartInitFailed":"차트 초기화 실패","dashboard.indicator.warning.enterCode":"표시기 코드를 먼저 입력하세요.","dashboard.indicator.warning.pyodideLoadFailed":"Python 엔진을 로드하지 못했습니다.","dashboard.indicator.warning.pyodideLoadFailedDesc":"현재 지역 또는 네트워크 환경에서는 이 기능을 사용할 수 없습니다.","dashboard.indicator.warning.chartNotInitialized":"차트가 초기화되지 않아 선 그리기 도구를 사용할 수 없습니다.","dashboard.indicator.success.runIndicator":"표시기가 성공적으로 실행됩니다.","dashboard.indicator.success.clearDrawings":"모든 선화 삭제됨","dashboard.indicator.sma":"SMA(이동 평균 조합)","dashboard.indicator.ema":"EMA(지수 이동 평균 조합)","dashboard.indicator.rsi":"RSI(상대강도)","dashboard.indicator.macd":"MACD","dashboard.indicator.bb":"볼린저 밴드","dashboard.indicator.atr":"ATR(평균 실제 범위)","dashboard.indicator.cci":"CCI(상품 채널 지수)","dashboard.indicator.williams":"Williams %R(윌리엄스 지표)","dashboard.indicator.mfi":"MFI(자금 흐름 지수)","dashboard.indicator.adx":"ADX(평균 추세 지수)","dashboard.indicator.obv":"OBV(에너지파)","dashboard.indicator.adosc":"ADOSC(누적/디스패치 오실레이터)","dashboard.indicator.ad":"AD(집적/분배선)","dashboard.indicator.kdj":"KDJ(확률적 지표)","dashboard.indicator.signal.buy":"구매","dashboard.indicator.signal.sell":"판매","dashboard.indicator.signal.supertrendBuy":"슈퍼트렌드 구매","dashboard.indicator.signal.supertrendSell":"슈퍼트렌드 매도","dashboard.indicator.chart.kline":"K라인","dashboard.indicator.chart.volume":"볼륨","dashboard.indicator.chart.uptrend":"상승 추세","dashboard.indicator.chart.downtrend":"하락 추세","dashboard.indicator.tooltip.time":"시간","dashboard.indicator.tooltip.open":"열다","dashboard.indicator.tooltip.close":"받다","dashboard.indicator.tooltip.high":"높다","dashboard.indicator.tooltip.low":"낮음","dashboard.indicator.tooltip.volume":"볼륨","dashboard.indicator.drawing.line":"선분","dashboard.indicator.drawing.horizontalLine":"수평선","dashboard.indicator.drawing.verticalLine":"수직선","dashboard.indicator.drawing.ray":"레이","dashboard.indicator.drawing.straightLine":"직선","dashboard.indicator.drawing.parallelLine":"평행선","dashboard.indicator.drawing.priceLine":"가격선","dashboard.indicator.drawing.priceChannel":"가격 채널","dashboard.indicator.drawing.fibonacciLine":"피보나치 라인","dashboard.indicator.drawing.measure":"측정","dashboard.indicator.drawing.clearAll":"모든 선화 지우기","dashboard.indicator.market.USStock":"미국 주식","dashboard.indicator.market.Crypto":"암호화폐","dashboard.indicator.market.Forex":"외환","dashboard.indicator.market.Futures":"선물","dashboard.indicator.create":"지표 생성","dashboard.indicator.editor.title":"지표 생성/편집","dashboard.indicator.editor.name":"지표 이름","dashboard.indicator.editor.nameRequired":"지표 이름을 입력하세요.","dashboard.indicator.editor.namePlaceholder":"지표 이름을 입력하세요.","dashboard.indicator.editor.description":"표시기 설명","dashboard.indicator.editor.descriptionPlaceholder":"표시기에 대한 설명을 입력하세요(선택 사항).","dashboard.indicator.editor.code":"파이썬 코드","dashboard.indicator.editor.codeRequired":"표시 코드를 입력하세요","dashboard.indicator.editor.codePlaceholder":"Python 코드를 입력하세요.","dashboard.indicator.editor.run":"달리다","dashboard.indicator.editor.runHint":"실행 버튼을 클릭하면 K-라인 차트의 지표 효과를 미리 볼 수 있습니다.","dashboard.indicator.editor.guide":"개발 가이드","dashboard.indicator.editor.guideTitle":"Python 지표 개발 가이드","dashboard.indicator.editor.save":"저장","dashboard.indicator.editor.cancel":"취소","dashboard.indicator.editor.unnamed":"이름 없는 표시기","dashboard.indicator.editor.publishToCommunity":"커뮤니티에 게시","dashboard.indicator.editor.publishToCommunityHint":"게시되면 다른 사용자가 커뮤니티에서 귀하의 지표를 보고 사용할 수 있습니다.","dashboard.indicator.editor.indicatorType":"표시기 유형","dashboard.indicator.editor.indicatorTypeRequired":"지표 유형을 선택하세요.","dashboard.indicator.editor.indicatorTypePlaceholder":"지표 유형을 선택하세요.","dashboard.indicator.editor.previewImage":"미리보기","dashboard.indicator.editor.uploadImage":"사진 업로드","dashboard.indicator.editor.previewImageHint":"권장 크기: 800x400, 2MB 이하","dashboard.indicator.editor.pricing":"판매가(QDT)","dashboard.indicator.editor.pricingType.free":"무료","dashboard.indicator.editor.pricingType.permanent":"영구","dashboard.indicator.editor.pricingType.monthly":"월별 결제","dashboard.indicator.editor.price":"가격","dashboard.indicator.editor.priceRequired":"가격을 입력해주세요","dashboard.indicator.editor.pricePlaceholder":"가격을 입력해주세요","dashboard.indicator.editor.pricingHint":"무료 지표의 가격은 0이지만 플랫폼은 지표 사용량과 칭찬률에 따라 보상(QDT)을 제공합니다.","dashboard.indicator.editor.aiGenerate":"지능형 세대","dashboard.indicator.editor.aiPromptPlaceholder":"당신의 아이디어를 알려주시면 Python 표시기 코드를 생성해 드리겠습니다.","dashboard.indicator.editor.aiGenerateBtn":"AI 생성 코드","dashboard.indicator.editor.aiPromptRequired":"당신의 생각을 입력해주세요","dashboard.indicator.editor.aiGenerateSuccess":"코드 생성 성공","dashboard.indicator.editor.aiGenerateError":"코드 생성에 실패했습니다. 나중에 다시 시도해 주세요.","dashboard.indicator.editor.verifyCode":"코드 검증","dashboard.indicator.editor.verifyCodeSuccess":"검증 통과","dashboard.indicator.editor.verifyCodeFailed":"검증 실패","dashboard.indicator.editor.verifyCodeEmpty":"코드는 비워둘 수 없습니다","dashboard.indicator.backtest.title":"지표 백테스트","dashboard.indicator.backtest.config":"백테스트 매개변수","dashboard.indicator.backtest.startDate":"시작일","dashboard.indicator.backtest.endDate":"종료일","dashboard.indicator.backtest.selectStartDate":"시작일 선택","dashboard.indicator.backtest.selectEndDate":"종료일 선택","dashboard.indicator.backtest.startDateRequired":"시작일을 선택하세요.","dashboard.indicator.backtest.endDateRequired":"종료일을 선택하세요.","dashboard.indicator.backtest.initialCapital":"초기자본금","dashboard.indicator.backtest.initialCapitalRequired":"초기자금을 입력해주세요","dashboard.indicator.backtest.commission":"수수료","dashboard.indicator.backtest.leverage":"레버리지 비율","dashboard.indicator.backtest.tradeDirection":"거래 방향","dashboard.indicator.backtest.longOnly":"오래 가세요","dashboard.indicator.backtest.shortOnly":"짧은","dashboard.indicator.backtest.both":"양방향","dashboard.indicator.backtest.run":"백테스팅 시작","dashboard.indicator.backtest.rerun":"다시 백테스트","dashboard.indicator.backtest.close":"닫기","dashboard.indicator.backtest.running":"지표 백테스트 진행 중...","dashboard.indicator.backtest.results":"백테스트 결과","dashboard.indicator.backtest.totalReturn":"총 수익","dashboard.indicator.backtest.annualReturn":"연간 소득","dashboard.indicator.backtest.maxDrawdown":"최대 감소","dashboard.indicator.backtest.sharpeRatio":"샤프비율","dashboard.indicator.backtest.winRate":"승률","dashboard.indicator.backtest.profitFactor":"손익 비율","dashboard.indicator.backtest.totalTrades":"거래수","dashboard.indicator.totalReturn":"총 수익","dashboard.indicator.annualReturn":"연간 수익률","dashboard.indicator.maxDrawdown":"최대 감소","dashboard.indicator.sharpeRatio":"샤프비율","dashboard.indicator.winRate":"승률","dashboard.indicator.profitFactor":"손익 비율","dashboard.indicator.totalTrades":"총 거래 수","dashboard.indicator.backtest.totalCommission":"총 취급 수수료","dashboard.indicator.backtest.equityCurve":"수익률 곡선","dashboard.indicator.backtest.strategy":"지표소득","dashboard.indicator.backtest.benchmark":"벤치마크 수익률","dashboard.indicator.backtest.tradeHistory":"거래 내역","dashboard.indicator.backtest.tradeTime":"시간","dashboard.indicator.backtest.tradeType":"유형","dashboard.indicator.backtest.buy":"사다","dashboard.indicator.backtest.sell":"팔다","dashboard.indicator.backtest.liquidation":"청산","dashboard.indicator.backtest.openLong":"길게 열다","dashboard.indicator.backtest.closeLong":"핀듀오","dashboard.indicator.backtest.closeLongStop":"매수에 가까움(손절매)","dashboard.indicator.backtest.closeLongProfit":"더 닫기 (이익 실현)","dashboard.indicator.backtest.addLong":"롱 포지션 추가","dashboard.indicator.backtest.openShort":"오픈 쇼트","dashboard.indicator.backtest.closeShort":"비어 있음","dashboard.indicator.backtest.closeShortStop":"청산(손절매)","dashboard.indicator.backtest.closeShortProfit":"마감(이익실현)","dashboard.indicator.backtest.addShort":"숏 포지션 추가","dashboard.indicator.backtest.price":"가격","dashboard.indicator.backtest.amount":"수량","dashboard.indicator.backtest.balance":"계좌잔고","dashboard.indicator.backtest.profit":"이익과 손실","dashboard.indicator.backtest.success":"백테스트 완료","dashboard.indicator.backtest.failed":"백테스트에 실패했습니다. 나중에 다시 시도해 주세요.","dashboard.indicator.backtest.noIndicatorCode":"이 지표에 대한 백테스트 가능한 코드가 없습니다.","dashboard.indicator.backtest.noSymbol":"거래대상을 먼저 선택해주세요","dashboard.indicator.backtest.dateRangeExceeded":"백테스트 시간 범위가 한도를 초과합니다. {timeframe} 기간은 최대 {maxRange}까지 백테스트할 수 있습니다.","dashboard.indicator.backtest.dateRangeExceededDays":"Backtest range exceeds limit: {timeframe} max {maxRange} ({maxDays} days)","dashboard.indicator.backtest.metaLine":"Symbol: {symbol} | Market: {market} | Timeframe: {timeframe}","dashboard.indicator.backtest.savedRunId":"Backtest saved. Run ID: {id}","dashboard.indicator.backtest.prev":"Previous","dashboard.indicator.backtest.next":"Next","dashboard.indicator.backtest.hint.entryPctMax":"Max entry: {maxPct}% (reserve budget for future scale-ins)","dashboard.indicator.backtest.steps.strategy.title":"Strategy","dashboard.indicator.backtest.steps.strategy.desc":"Position sizing & risk controls","dashboard.indicator.backtest.steps.trading.title":"Trading settings","dashboard.indicator.backtest.steps.trading.desc":"Time range, capital, fees, leverage","dashboard.indicator.backtest.steps.results.title":"Results","dashboard.indicator.backtest.steps.results.desc":"Backtest output","dashboard.indicator.backtest.panel.risk":"Risk management (SL/TP/Trailing)","dashboard.indicator.backtest.panel.scale":"Scale in / DCA (trend & mean-reversion)","dashboard.indicator.backtest.panel.reduce":"Reduce position (trend & adverse)","dashboard.indicator.backtest.panel.position":"Position sizing","dashboard.indicator.backtest.field.stopLossPct":"Stop Loss (%)","dashboard.indicator.backtest.field.takeProfitPct":"Take Profit (%)","dashboard.indicator.backtest.field.trailingEnabled":"Trailing stop / take profit","dashboard.indicator.backtest.field.trailingStopPct":"Trailing drawdown (%)","dashboard.indicator.backtest.field.trailingActivationPct":"Trailing activation (%)","dashboard.indicator.backtest.field.slippage":"Slippage (%)","dashboard.indicator.backtest.field.trendAddEnabled":"Trend-following scale-in","dashboard.indicator.backtest.field.dcaAddEnabled":"Mean-reversion scale-in","dashboard.indicator.backtest.field.trendAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.dcaAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.trendAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.dcaAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.trendAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.dcaAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.trendReduceEnabled":"Trend reduce","dashboard.indicator.backtest.field.adverseReduceEnabled":"Adverse reduce","dashboard.indicator.backtest.field.trendReduceStepPct":"Trend trigger (%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"Adverse trigger (%)","dashboard.indicator.backtest.field.trendReduceSizePct":"Reduce size (% of position)","dashboard.indicator.backtest.field.adverseReduceSizePct":"Adverse reduce size (% of position)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"Max trend reduce times","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"Max adverse reduce times","dashboard.indicator.backtest.field.entryPct":"Entry size (% of capital)","dashboard.indicator.backtest.field.minOrderPct":"Min order size (% of capital) (optional)","dashboard.indicator.backtest.closeLongTrailing":"Close Long (Trailing)","dashboard.indicator.backtest.reduceLong":"Reduce Long","dashboard.indicator.backtest.closeShortTrailing":"Close Short (Trailing)","dashboard.indicator.backtest.reduceShort":"Reduce Short","dashboard.docs.title":"문서 센터","dashboard.docs.search.placeholder":"문서 검색...","dashboard.docs.category.all":"모두","dashboard.docs.category.guide":"개발 가이드","dashboard.docs.category.api":"API 문서","dashboard.docs.category.tutorial":"튜토리얼","dashboard.docs.category.faq":"FAQ","dashboard.docs.featured.title":"권장 문서","dashboard.docs.featured.tag":"추천","dashboard.docs.list.views":"찾아보기","dashboard.docs.list.author":"작성자","dashboard.docs.list.empty":"아직 문서가 없습니다.","dashboard.docs.list.backToAll":"모든 문서로 돌아가기","dashboard.docs.list.total":"총 {count}개의 문서","dashboard.docs.detail.back":"문서 목록으로 돌아가기","dashboard.docs.detail.updatedAt":"업데이트 날짜","dashboard.docs.detail.related":"관련 문서","dashboard.docs.detail.notFound":"문서가 존재하지 않습니다","dashboard.docs.detail.error":"문서가 존재하지 않거나 삭제되었습니다.","dashboard.docs.search.result":"검색결과","dashboard.docs.search.keyword":"키워드","community.filter.indicatorType":"표시기 유형","community.filter.all":"모두","community.filter.other":"기타 옵션","community.filter.pricing":"가격 유형","community.filter.allPricing":"모든 가격","community.filter.sortBy":"정렬 기준","community.filter.search":"검색","community.filter.searchPlaceholder":"측정항목 이름 검색","community.indicatorType.trend":"트렌드 유형","community.indicatorType.momentum":"모멘텀형","community.indicatorType.volatility":"변동성","community.indicatorType.volume":"볼륨","community.indicatorType.custom":"사용자 정의","community.pricing.free":"무료","community.pricing.paid":"지불","community.sort.downloads":"다운로드","community.sort.rating":"등급","community.sort.newest":"최신 릴리스","community.pagination.total":"총 {total} 지표","community.noDescription":"아직 설명이 없습니다","community.detail.type":"유형","community.detail.pricing":"가격","community.detail.rating":"등급","community.detail.downloads":"다운로드","community.detail.author":"작성자","community.detail.description":"소개","community.detail.detailContent":"자세한 설명","community.detail.backtestStats":"백테스트 통계","community.action.purchase":"매수 지표","community.action.addToMyIndicators":"내 지표에 추가","community.action.favorite":"컬렉션","community.action.unfavorite":"즐겨찾기 취소","community.action.buyNow":"지금 구매","community.action.renew":"갱신","community.purchase.price":"가격","community.purchase.permanent":"영구","community.purchase.monthly":"달","community.purchase.confirmBuy":"이 지표({price} QDT) 구매를 확인하시겠습니까?","community.purchase.confirmRenew":"이 지표({price} QDT/월)를 갱신하시겠습니까?","community.purchase.confirmFree":"이 무료 표시기를 추가하시겠습니까?","community.purchase.confirmTitle":"조치 확인","community.purchase.owned":"이 표시기를 구입하셨습니다(영구적으로 유효함).","community.purchase.ownIndicator":"귀하가 게시한 측정항목입니다.","community.purchase.expired":"구독이 만료되었습니다","community.purchase.expiresOn":"만료 시간: {date}","community.tabs.detail":"지표 세부정보","community.tabs.backtest":"백테스트 데이터","community.tabs.ratings":"사용자 리뷰","community.rating.myRating":"내 평가","community.rating.stars":"별 {count}개","community.rating.commentPlaceholder":"당신의 경험을 공유하세요...","community.rating.submit":"평가 제출","community.rating.modify":"수정","community.rating.saveModify":"변경사항 저장","community.rating.cancel":"취소","community.rating.selectRating":"등급을 선택해 주세요","community.rating.success":"평가 성공","community.rating.modifySuccess":"리뷰가 수정되었습니다.","community.rating.failed":"평가 실패","community.rating.noRatings":"아직 댓글이 없습니다","community.backtest.note":"위 데이터는 과거 백테스트 결과이며 참고용일 뿐 미래 수익을 나타내지는 않습니다.","community.backtest.noData":"아직 백테스트 데이터가 없습니다.","community.backtest.uploadHint":"작성자는 아직 백테스트 데이터를 업로드하지 않았습니다.","community.message.loadFailed":"표시기 목록을 로드하지 못했습니다.","community.message.purchaseProcessing":"구매 요청 처리 중...","community.message.downloadSuccess":"내 측정항목 목록에 측정항목이 추가되었습니다.","community.message.favoriteSuccess":"수집 성공","community.message.unfavoriteSuccess":"수집을 취소했습니다.","community.message.operationSuccess":"작업 성공","community.message.operationFailed":"작업 실패","community.banner.readOnly":"읽기 전용","community.banner.loginHint":"로그인 또는 등록이 필요한 경우 버튼을 클릭하여 독립 페이지로 이동하여 CSRF 문제를 방지하세요","community.banner.jumpButton":"로그인/등록으로 이동","dashboard.totalEquity":"총자본","dashboard.totalPnL":"총손익","dashboard.aiStrategies":"AI 전략","dashboard.indicatorStrategies":"지표 전략","dashboard.running":"달리기","dashboard.pnlHistory":"역사적 손익","dashboard.strategyPerformance":"전략 손익비율","dashboard.recentTrades":"최근 거래","dashboard.currentPositions":"현재 위치","dashboard.table.time":"시간","dashboard.table.strategy":"정책 이름","dashboard.table.symbol":"대상","dashboard.table.type":"유형","dashboard.table.side":"방향","dashboard.table.size":"미결제약정","dashboard.table.entryPrice":"평균 개장가","dashboard.table.price":"가격","dashboard.table.amount":"수량","dashboard.table.profit":"이익과 손실","dashboard.pendingOrders":"주문 실행 기록","dashboard.totalOrders":"총 {total}건","dashboard.viewError":"오류 보기","dashboard.filled":"체결됨","dashboard.orderTable.time":"생성 시간","dashboard.orderTable.strategy":"전략","dashboard.orderTable.symbol":"거래 쌍","dashboard.orderTable.signalType":"신호 유형","dashboard.orderTable.amount":"수량","dashboard.orderTable.price":"체결 가격","dashboard.orderTable.status":"상태","dashboard.orderTable.executedAt":"실행 시간","dashboard.signalType.openLong":"롱 오픈","dashboard.signalType.openShort":"숏 오픈","dashboard.signalType.closeLong":"롱 청산","dashboard.signalType.closeShort":"숏 청산","dashboard.signalType.addLong":"롱 추가","dashboard.signalType.addShort":"숏 추가","dashboard.status.pending":"대기 중","dashboard.status.processing":"처리 중","dashboard.status.completed":"완료","dashboard.status.failed":"실패","dashboard.status.cancelled":"취소됨","dashboard.table.pnl":"미실현 손익","form.basic-form.basic.title":"기본 형태","form.basic-form.basic.description":"양식 페이지는 사용자로부터 정보를 수집하거나 확인하는 데 사용됩니다. 기본 양식은 데이터 항목이 거의 없는 양식 시나리오에서 일반적으로 사용됩니다.","form.basic-form.title.label":"제목","form.basic-form.title.placeholder":"목표에 이름을 지어주세요","form.basic-form.title.required":"제목을 입력하세요","form.basic-form.date.label":"시작일 및 종료일","form.basic-form.placeholder.start":"시작일","form.basic-form.placeholder.end":"종료일","form.basic-form.date.required":"시작일과 종료일을 선택하세요.","form.basic-form.goal.label":"목표 설명","form.basic-form.goal.placeholder":"단계별 업무 목표를 입력하세요.","form.basic-form.goal.required":"목표 설명을 입력하세요.","form.basic-form.standard.label":"측정하다","form.basic-form.standard.placeholder":"측정항목을 입력하세요.","form.basic-form.standard.required":"측정항목을 입력하세요.","form.basic-form.client.label":"고객","form.basic-form.client.required":"귀하가 서비스를 제공하는 고객에 대해 설명해주세요.","form.basic-form.label.tooltip":"대상 서비스 대상자","form.basic-form.client.placeholder":"귀하가 서비스를 제공하는 고객, 내부 고객을 직접 @이름/직위 번호로 설명하십시오.","form.basic-form.invites.label":"리뷰어 초대","form.basic-form.invites.placeholder":"@이름/사원번호로 직접 보내주세요. 최대 5명까지 초대 가능합니다.","form.basic-form.weight.label":"무게","form.basic-form.weight.placeholder":"입력해주세요","form.basic-form.public.label":"대중을 대상으로","form.basic-form.label.help":"고객과 검토자는 기본적으로 공유됩니다.","form.basic-form.radio.public":"대중","form.basic-form.radio.partially-public":"부분적으로 공개","form.basic-form.radio.private":"비공개","form.basic-form.publicUsers.placeholder":"열려 있다","form.basic-form.option.A":"동료 1","form.basic-form.option.B":"동료 2","form.basic-form.option.C":"동료 3","form.basic-form.email.required":"이메일 주소를 입력해주세요!","form.basic-form.email.wrong-format":"이메일 주소 형식이 잘못되었습니다!","form.basic-form.userName.required":"사용자 이름을 입력해주세요!","form.basic-form.password.required":"비밀번호를 입력해주세요!","form.basic-form.password.twice":"두 번 입력한 비밀번호가 일치하지 않습니다!","form.basic-form.strength.msg":"6자 이상 입력해주세요. 쉽게 추측할 수 있는 비밀번호는 사용하지 마세요.","form.basic-form.strength.strong":"힘: 강한","form.basic-form.strength.medium":"강도: 중간","form.basic-form.strength.short":"강도: 너무 짧음","form.basic-form.confirm-password.required":"비밀번호를 확인해 주세요!","form.basic-form.phone-number.required":"휴대폰번호를 입력해주세요!","form.basic-form.phone-number.wrong-format":"휴대폰 번호 형식이 잘못되었습니다!","form.basic-form.verification-code.required":"인증번호를 입력해주세요!","form.basic-form.form.get-captcha":"인증 코드 받기","form.basic-form.captcha.second":"초","form.basic-form.form.optional":"(선택사항)","form.basic-form.form.submit":"제출","form.basic-form.form.save":"저장","form.basic-form.email.placeholder":"이메일","form.basic-form.password.placeholder":"비밀번호는 6자 이상, 대소문자 구분","form.basic-form.confirm-password.placeholder":"비밀번호 확인","form.basic-form.phone-number.placeholder":"휴대전화번호","form.basic-form.verification-code.placeholder":"인증코드","result.success.title":"제출 성공","result.success.description":'제출 결과 페이지는 일련의 작업 작업의 처리 결과를 피드백하는 데 사용됩니다. 간단한 작업인 경우 메시지 전역 프롬프트 피드백을 사용하세요. 이 텍스트 영역에는 간단한 보충 지침이 표시될 수 있습니다. "문서"를 표시해야 하는 경우 아래 회색 영역에 더 복잡한 내용이 표시될 수 있습니다.',"result.success.operate-title":"프로젝트 이름","result.success.operate-id":"프로젝트 ID","result.success.principal":"담당자","result.success.operate-time":"유효시간","result.success.step1-title":"프로젝트 생성","result.success.step1-operator":"쿠 릴리","result.success.step2-title":"학과 사전 검토","result.success.step2-operator":"저우 마오마오","result.success.step2-extra":"긴급","result.success.step3-title":"재무 검토","result.success.step4-title":"완료","result.success.btn-return":"목록으로 돌아가기","result.success.btn-project":"항목 보기","result.success.btn-print":"인쇄","result.fail.error.title":"제출 실패","result.fail.error.description":"다시 제출하기 전에 다음 정보를 확인하고 수정하시기 바랍니다.","result.fail.error.hint-title":"제출한 콘텐츠에 다음 오류가 포함되어 있습니다.","result.fail.error.hint-text1":"귀하의 계정이 동결되었습니다","result.fail.error.hint-btn1":"즉시 해동","result.fail.error.hint-text2":"귀하의 계정은 아직 신청할 수 없습니다","result.fail.error.hint-btn2":"지금 업그레이드","result.fail.error.btn-text":"수정으로 돌아가기","account.settings.menuMap.custom":"개인화","account.settings.menuMap.binding":"계정 바인딩","account.settings.basic.avatar":"아바타","account.settings.basic.change-avatar":"아바타 변경","account.settings.basic.email":"이메일","account.settings.basic.email-message":"이메일을 입력해주세요!","account.settings.basic.nickname":"닉네임","account.settings.basic.nickname-message":"닉네임을 입력해주세요!","account.settings.basic.profile":"프로필","account.settings.basic.profile-message":"개인 프로필을 입력해주세요!","account.settings.basic.profile-placeholder":"프로필","account.settings.basic.country":"국가/지역","account.settings.basic.country-message":"국가나 지역을 입력해주세요!","account.settings.basic.geographic":"지방 및 도시","account.settings.basic.geographic-message":"귀하의 시/도를 입력해주세요!","account.settings.basic.address":"거리 주소","account.settings.basic.address-message":"주소를 입력해주세요!","account.settings.basic.phone":"연락처","account.settings.basic.phone-message":"연락처를 입력해주세요!","account.settings.basic.update":"기본정보 업데이트","account.settings.basic.update.success":"기본 정보를 성공적으로 업데이트했습니다.","account.settings.security.strong":"강한","account.settings.security.medium":"안으로","account.settings.security.weak":"약한","account.settings.security.password":"계정 비밀번호","account.settings.security.password-description":"현재 비밀번호 강도:","account.settings.security.phone":"보안 휴대폰","account.settings.security.phone-description":"이미 바인딩된 휴대폰:","account.settings.security.question":"보안 문제","account.settings.security.question-description":"보안 질문이 설정되지 않아 계정 보안을 효과적으로 보호할 수 있습니다.","account.settings.security.email":"이메일 바인딩","account.settings.security.email-description":"이미 바인딩된 이메일 주소:","account.settings.security.mfa":"MFA 장치","account.settings.security.mfa-description":"MFA 디바이스가 바인딩되지 않았습니다. 바인딩 후 다시 확인할 수 있습니다.","account.settings.security.modify":"수정","account.settings.security.set":"설정","account.settings.security.bind":"바인딩","account.settings.binding.taobao":"타오바오 바인딩","account.settings.binding.taobao-description":"현재 타오바오 계정이 연결되어 있지 않습니다","account.settings.binding.alipay":"알리페이 바인딩","account.settings.binding.alipay-description":"Alipay 계정이 현재 연결되어 있지 않습니다.","account.settings.binding.dingding":"바인딩 딩톡","account.settings.binding.dingding-description":"현재 바인딩된 DingTalk 계정이 없습니다.","account.settings.binding.bind":"바인딩","account.settings.notification.password":"계정 비밀번호","account.settings.notification.password-description":"다른 사용자의 메시지는 사이트 메시지 형식으로 통보됩니다.","account.settings.notification.messages":"시스템 메시지","account.settings.notification.messages-description":"시스템 메시지는 사이트 메시지 형식으로 통보됩니다.","account.settings.notification.todo":"해야 할 일","account.settings.notification.todo-description":"할일은 사이트 내 메시지로 알려드립니다.","account.settings.settings.open":"열다","account.settings.settings.close":"닫기","trading-assistant.title":"트레이딩 어시스턴트","trading-assistant.strategyList":"전략 목록","trading-assistant.createStrategy":"정책 만들기","trading-assistant.noStrategy":"아직 전략이 없습니다.","trading-assistant.selectStrategy":"세부정보를 보려면 왼쪽에서 전략을 선택하세요.","trading-assistant.startStrategy":"출시 전략","trading-assistant.stopStrategy":"중지 전략","trading-assistant.editStrategy":"편집 전략","trading-assistant.deleteStrategy":"정책 삭제","trading-assistant.status.running":"달리기","trading-assistant.status.stopped":"중지됨","trading-assistant.status.error":"오류","trading-assistant.strategyType.IndicatorStrategy":"기술 지표 전략","trading-assistant.strategyType.PromptBasedStrategy":"단서 전략","trading-assistant.strategyType.GridStrategy":"그리드 전략","trading-assistant.tabs.tradingRecords":"거래 내역","trading-assistant.tabs.positions":"직위기록","trading-assistant.tabs.equityCurve":"주식곡선","trading-assistant.form.step1":"지표 선택","trading-assistant.form.step2":"교환 구성","trading-assistant.form.step3":"전략 매개변수","trading-assistant.form.indicator":"지표 선택","trading-assistant.form.indicatorHint":"자신이 구매했거나 생성한 기술 지표만 선택할 수 있습니다.","trading-assistant.form.qdtCostHints":"전략을 사용하면 QDT가 소모됩니다. 계정에 QDT 잔액이 충분한지 확인하세요.","trading-assistant.form.indicatorDescription":"표시기 설명","trading-assistant.form.noDescription":"아직 설명이 없습니다","trading-assistant.form.exchange":"교환 선택","trading-assistant.form.apiKey":"API 키","trading-assistant.form.secretKey":"비밀키","trading-assistant.form.passphrase":"암호","trading-assistant.form.testConnection":"연결 테스트","trading-assistant.form.strategyName":"정책 이름","trading-assistant.form.symbol":"거래 쌍","trading-assistant.form.symbolHint":"현재는 암호화폐 거래쌍만 지원됩니다","trading-assistant.form.initialCapital":"투자금액","trading-assistant.form.marketType":"시장 유형","trading-assistant.form.marketTypeFutures":"계약","trading-assistant.form.marketTypeSpot":"스팟","trading-assistant.form.marketTypeHint":"계약은 양방향 거래와 레버리지를 지원하는 반면 현물은 롱 포지션만 지원하고 레버리지는 1x로 고정됩니다.","trading-assistant.form.leverage":"여러 가지 활용","trading-assistant.form.leverageHint":"계약 : 1~125회, 현물 : 고정 1회","trading-assistant.form.spotLeverageFixed":"현물 거래 레버리지는 1x로 고정됩니다.","trading-assistant.form.spotOnlyLongHint":"현물 거래는 매수 포지션만 지원합니다","trading-assistant.form.tradeDirection":"거래 방향","trading-assistant.form.tradeDirectionLong":"오직 길다","trading-assistant.form.tradeDirectionShort":"단지 짧다","trading-assistant.form.tradeDirectionBoth":"양방향 거래","trading-assistant.form.timeframe":"기간","trading-assistant.form.klinePeriod":"K선 기간","trading-assistant.form.timeframe1m":"1분","trading-assistant.form.timeframe5m":"5분","trading-assistant.form.timeframe15m":"15분","trading-assistant.form.timeframe30m":"30분","trading-assistant.form.timeframe1H":"1시간","trading-assistant.form.timeframe4H":"4시간","trading-assistant.form.timeframe1D":"1일","trading-assistant.form.selectStrategyType":"전략 유형 선택","trading-assistant.form.indicatorStrategy":"지표 전략","trading-assistant.form.indicatorStrategyDesc":"기술 지표 기반 자동 거래 전략","trading-assistant.form.aiStrategy":"AI 전략","trading-assistant.form.aiStrategyDesc":"AI 지능형 의사결정 기반 자동 거래 전략","trading-assistant.form.enableAiFilter":"AI 지능형 의사결정 필터 활성화","trading-assistant.form.enableAiFilterHint":"활성화하면 지표 신호가 AI에 의해 필터링되어 거래 품질이 향상됩니다","trading-assistant.form.aiFilterPrompt":"사용자 정의 프롬프트","trading-assistant.form.aiFilterPromptHint":"AI 필터링을 위한 사용자 정의 지침을 제공하고, 비워두면 시스템 기본값을 사용합니다","trading-assistant.validation.strategyTypeRequired":"전략 유형을 선택하세요","trading-assistant.form.advancedSettings":"고급 설정","trading-assistant.form.orderMode":"주문 모드","trading-assistant.form.orderModeMaker":"메이커","trading-assistant.form.orderModeTaker":"시장가(테이커)","trading-assistant.form.orderModeHint":"지정가 주문 모드는 지정가 주문을 사용하며 처리 수수료가 더 낮습니다. 시장 가격 모드는 즉시 실행되며 처리 수수료가 더 높습니다.","trading-assistant.form.makerWaitSec":"지정가 주문 대기 시간(초)","trading-assistant.form.makerWaitSecHint":"주문 후 거래가 완료될 때까지 기다리는 시간입니다. 취소하고 시간 초과 후 다시 시도하세요.","trading-assistant.form.makerRetries":"보류 중인 주문에 대한 재시도 횟수","trading-assistant.form.makerRetriesHint":"보류 중인 주문이 실행되지 않을 때 최대 재시도 횟수","trading-assistant.form.fallbackToMarket":"지정가 주문이 실패하고 시장 가격이 하락합니다.","trading-assistant.form.fallbackToMarketHint":"개시/청산 보류 주문이 완료되지 않은 경우 거래가 완료되었는지 확인하기 위해 시장가 주문으로 다운그레이드해야 하는지 여부.","trading-assistant.form.marginMode":"마진 모드","trading-assistant.form.marginModeCross":"전체 창고","trading-assistant.form.marginModeIsolated":"고립된 위치","trading-assistant.form.stopLossPct":"정지손해율(%)","trading-assistant.form.stopLossPctHint":"정지 손실 비율을 설정합니다. 0은 정지 손실이 활성화되지 않았음을 의미합니다.","trading-assistant.form.takeProfitPct":"이익 실현 비율(%)","trading-assistant.form.takeProfitPctHint":"이익실현 비율을 설정합니다. 0은 이익실현을 비활성화함을 의미합니다.","trading-assistant.form.signalMode":"신호 모드","trading-assistant.form.signalModeConfirmed":"모드 확인","trading-assistant.form.signalModeAggressive":"공격적 모드","trading-assistant.form.signalModeHint":"확인 모드: 완료된 K 라인만 확인합니다. 공격적 모드: K 라인 형성도 확인합니다.","trading-assistant.form.cancel":"취소","trading-assistant.form.prev":"이전 단계","trading-assistant.form.next":"다음 단계","trading-assistant.form.confirmCreate":"생성 확인","trading-assistant.form.confirmEdit":"변경사항 확인","trading-assistant.messages.createSuccess":"전략이 성공적으로 생성되었습니다.","trading-assistant.messages.createFailed":"정책을 생성하지 못했습니다.","trading-assistant.messages.updateSuccess":"정책 업데이트 성공","trading-assistant.messages.updateFailed":"정책 업데이트 실패","trading-assistant.messages.deleteSuccess":"정책 삭제 성공","trading-assistant.messages.deleteFailed":"정책 삭제 실패","trading-assistant.messages.startSuccess":"전략이 성공적으로 시작되었습니다","trading-assistant.messages.startFailed":"정책을 시작하지 못했습니다.","trading-assistant.messages.stopSuccess":"전략이 성공적으로 중지되었습니다.","trading-assistant.messages.stopFailed":"중지 전략이 실패했습니다.","trading-assistant.messages.loadFailed":"정책 목록을 가져오지 못했습니다.","trading-assistant.messages.runningWarning":"전략이 실행되고 있습니다. 전략을 수정하기 전에 전략을 중지하세요.","trading-assistant.messages.deleteConfirmWithName":'"{name}" 정책을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.',"trading-assistant.messages.deleteConfirm":"이 정책을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.","trading-assistant.messages.loadTradesFailed":"거래 기록을 가져오지 못했습니다.","trading-assistant.messages.loadPositionsFailed":"위치 기록을 가져오지 못했습니다.","trading-assistant.messages.loadEquityFailed":"자기자본곡선 획득 실패","trading-assistant.messages.loadIndicatorsFailed":"표시기 목록을 로드하지 못했습니다. 나중에 다시 시도해 주세요.","trading-assistant.messages.spotLimitations":"현물 거래는 자동으로 매수, 1배 레버리지로 설정되었습니다.","trading-assistant.messages.autoFillApiConfig":"거래소의 과거 API 구성이 자동으로 채워졌습니다.","trading-assistant.placeholders.selectIndicator":"지표를 선택하세요","trading-assistant.placeholders.selectExchange":"교환을 선택해주세요","trading-assistant.placeholders.inputApiKey":"API 키를 입력하세요","trading-assistant.placeholders.inputSecretKey":"비밀키를 입력해주세요","trading-assistant.placeholders.inputPassphrase":"암호를 입력하세요","trading-assistant.placeholders.inputStrategyName":"정책 이름을 입력하세요.","trading-assistant.placeholders.selectSymbol":"거래쌍을 선택해주세요","trading-assistant.placeholders.selectTimeframe":"기간을 선택하세요.","trading-assistant.placeholders.selectKlinePeriod":"K선 기간을 선택하세요","trading-assistant.placeholders.inputAiFilterPrompt":"사용자 정의 프롬프트를 입력하세요(선택사항)","trading-assistant.validation.indicatorRequired":"지표를 선택하세요","trading-assistant.validation.exchangeRequired":"교환을 선택해주세요","trading-assistant.validation.apiKeyRequired":"API 키를 입력하세요","trading-assistant.validation.secretKeyRequired":"비밀키를 입력해주세요","trading-assistant.validation.passphraseRequired":"암호를 입력하세요","trading-assistant.validation.exchangeConfigIncomplete":"전체 교환 구성 정보를 입력하세요.","trading-assistant.validation.testConnectionRequired":'먼저 "연결 테스트" 버튼을 클릭하고 연결이 성공했는지 확인하세요',"trading-assistant.validation.testConnectionFailed":"연결 테스트에 실패했습니다. 구성을 확인하고 다시 테스트하세요","trading-assistant.validation.credentialRequired":"먼저 개인 센터에서 거래소 자격 증명을 추가하고 테스트하세요","trading-assistant.validation.strategyNameRequired":"정책 이름을 입력하세요.","trading-assistant.validation.symbolRequired":"거래쌍을 선택해주세요","trading-assistant.validation.initialCapitalRequired":"투자금액을 입력해주세요.","trading-assistant.validation.leverageRequired":"레버리지 비율을 입력하세요.","trading-assistant.table.time":"시간","trading-assistant.table.type":"유형","trading-assistant.table.price":"가격","trading-assistant.table.amount":"수량","trading-assistant.table.value":"금액","trading-assistant.table.commission":"취급 수수료","trading-assistant.table.symbol":"거래쌍","trading-assistant.table.side":"방향","trading-assistant.table.size":"포지션 수량","trading-assistant.table.entryPrice":"개장 가격","trading-assistant.table.currentPrice":"현재 가격","trading-assistant.table.unrealizedPnl":"미실현 손익","trading-assistant.table.pnlPercent":"손익비율","trading-assistant.table.buy":"사다","trading-assistant.table.sell":"팔다","trading-assistant.table.long":"오래 가세요","trading-assistant.table.short":"짧은","trading-assistant.table.noPositions":"아직 직책이 없습니다.","trading-assistant.detail.title":"전략 세부정보","trading-assistant.detail.strategyName":"정책 이름","trading-assistant.detail.strategyType":"전략 유형","trading-assistant.detail.status":"상태","trading-assistant.detail.tradingMode":"거래 모델","trading-assistant.detail.exchange":"교환","trading-assistant.detail.initialCapital":"초기자본금","trading-assistant.detail.totalInvestment":"총투자금액","trading-assistant.detail.currentEquity":"현재 순자산","trading-assistant.detail.totalPnl":"총손익","trading-assistant.detail.indicatorName":"지표 이름","trading-assistant.detail.maxLeverage":"최대 레버리지","trading-assistant.detail.decideInterval":"결정 간격","trading-assistant.detail.symbols":"거래개체","trading-assistant.detail.createdAt":"생성 시간","trading-assistant.detail.updatedAt":"업데이트 시간","trading-assistant.detail.llmConfig":"AI 모델 구성","trading-assistant.detail.exchangeConfig":"교환 구성","trading-assistant.detail.provider":"공급자","trading-assistant.detail.modelId":"모델 ID","trading-assistant.detail.close":"닫기","trading-assistant.detail.loadFailed":"정책 세부정보를 가져오지 못했습니다.","trading-assistant.equity.noData":"아직 순자산 데이터가 없습니다.","trading-assistant.equity.equity":"순자산","trading-assistant.exchange.tradingMode":"거래 모델","trading-assistant.exchange.virtual":"모의거래","trading-assistant.exchange.live":"실제 거래","trading-assistant.exchange.selectExchange":"교환 선택","trading-assistant.exchange.walletAddress":"지갑 주소","trading-assistant.exchange.walletAddressPlaceholder":"지갑 주소(0x로 시작)를 입력하세요.","trading-assistant.exchange.privateKey":"개인 키","trading-assistant.exchange.privateKeyPlaceholder":"개인키(64자)를 입력해주세요.","trading-assistant.exchange.testConnection":"연결 테스트","trading-assistant.exchange.connectionSuccess":"연결 성공","trading-assistant.exchange.connectionFailed":"연결 실패","trading-assistant.exchange.testFailed":"연결 테스트 실패","trading-assistant.exchange.fillComplete":"전체 교환 구성 정보를 입력하세요.","trading-assistant.strategyTypeOptions.ai":"AI 중심 전략","trading-assistant.strategyTypeOptions.indicator":"기술 지표 전략","trading-assistant.strategyTypeOptions.aiDeveloping":"AI 기반 전략 기능은 개발 중이므로 계속 지켜봐 주시기 바랍니다","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"AI 기반 전략 기능 개발 중","trading-assistant.indicatorType.trend":"추세","trading-assistant.indicatorType.momentum":"추진력","trading-assistant.indicatorType.volatility":"변동","trading-assistant.indicatorType.volume":"볼륨","trading-assistant.indicatorType.custom":"사용자 정의","trading-assistant.exchangeNames":{okx:"OKX",binance:"바이낸스",hyperliquid:"초액체",blockchaincom:"블록체인닷컴",coinbaseexchange:"코인베이스",gate:"Gate.io",mexc:"멕시코",kraken:"크라켄",bitfinex:"비트파이넥스",bybit:"바이비트",kucoin:"쿠코인",huobi:"후오비",bitget:"비트겟",bitmex:"비트멕스",deribit:"데리비트",phemex:"페멕스",bitmart:"비트마트",bitstamp:"비트스탬프",bittrex:"비트렉스",poloniex:"폴로닉스",gemini:"쌍둥이자리",cryptocom:"크립토닷컴",bitflyer:"비트플라이어",upbit:"업비트",bithumb:"빗썸",coinone:"코인원",zb:"ZB",lbank:"L은행",bibox:"비박스",bigone:"빅원",bitrue:"바이트루",coinex:"코인엑스",digifinex:"디지파이넥스",ftx:"FTX",ftxus:"FTX 미국",binanceus:"바이낸스 미국",binancecoinm:"바이낸스 코인-M",binanceusdm:"바이낸스 USDⓈ-M",deepcoin:"딥코인"},"ai-trading-assistant.title":"AI 트레이딩 도우미","ai-trading-assistant.strategyList":"전략 목록","ai-trading-assistant.createStrategy":"정책 만들기","ai-trading-assistant.noStrategy":"아직 전략이 없습니다.","ai-trading-assistant.selectStrategy":"세부정보를 보려면 왼쪽에서 전략을 선택하세요.","ai-trading-assistant.startStrategy":"출시 전략","ai-trading-assistant.stopStrategy":"중지 전략","ai-trading-assistant.editStrategy":"편집 전략","ai-trading-assistant.deleteStrategy":"정책 삭제","ai-trading-assistant.status.running":"달리기","ai-trading-assistant.status.stopped":"중지됨","ai-trading-assistant.status.error":"오류","ai-trading-assistant.tabs.tradingRecords":"거래 내역","ai-trading-assistant.tabs.positions":"직위기록","ai-trading-assistant.tabs.aiDecisions":"AI 의사결정 기록","ai-trading-assistant.tabs.equityCurve":"주식곡선","ai-trading-assistant.form.createTitle":"AI 거래 전략 수립","ai-trading-assistant.form.editTitle":"AI 거래 전략 편집","ai-trading-assistant.form.strategyName":"정책 이름","ai-trading-assistant.form.modelId":"AI 모델","ai-trading-assistant.form.modelIdHint":"API 키를 구성하지 않고 시스템 OpenRouter 서비스 사용","ai-trading-assistant.form.decideInterval":"결정 간격","ai-trading-assistant.form.decideInterval5m":"5분","ai-trading-assistant.form.decideInterval10m":"10분","ai-trading-assistant.form.decideInterval30m":"30분","ai-trading-assistant.form.decideInterval1h":"1시간","ai-trading-assistant.form.decideInterval4h":"4시간","ai-trading-assistant.form.decideInterval1d":"1일","ai-trading-assistant.form.decideInterval1w":"1주","ai-trading-assistant.form.decideIntervalHint":"AI가 결정을 내리는 시간 간격","ai-trading-assistant.form.runPeriod":"실행 주기","ai-trading-assistant.form.runPeriodHint":"전략 실행의 시작 시간과 종료 시간","ai-trading-assistant.form.startDate":"시작일","ai-trading-assistant.form.endDate":"종료일","ai-trading-assistant.form.qdtCostTitle":"QDT 공제 지침","ai-trading-assistant.form.qdtCostHint":"각 AI 결정에 대해 {cost} QDT가 차감됩니다. 귀하의 계정에 충분한 QDT 잔액이 있는지 확인하십시오. 전략을 실행하는 동안 각 결정에 대해 수수료가 실시간으로 차감됩니다.","ai-trading-assistant.form.apiKey":"API 키","ai-trading-assistant.form.exchange":"교환 선택","ai-trading-assistant.form.secretKey":"비밀키","ai-trading-assistant.form.passphrase":"암호","ai-trading-assistant.form.testConnection":"연결 테스트","ai-trading-assistant.form.symbol":"거래 쌍","ai-trading-assistant.form.symbolHint":"거래할 거래쌍을 선택하세요","ai-trading-assistant.form.initialCapital":"투자금액(마진)","ai-trading-assistant.form.leverage":"여러 가지 활용","ai-trading-assistant.form.timeframe":"기간","ai-trading-assistant.form.timeframe1m":"1분","ai-trading-assistant.form.timeframe5m":"5분","ai-trading-assistant.form.timeframe15m":"15분","ai-trading-assistant.form.timeframe30m":"30분","ai-trading-assistant.form.timeframe1H":"1시간","ai-trading-assistant.form.timeframe4H":"4시간","ai-trading-assistant.form.timeframe1D":"1일","ai-trading-assistant.form.marketType":"시장 유형","ai-trading-assistant.form.marketTypeFutures":"계약","ai-trading-assistant.form.marketTypeSpot":"스팟","ai-trading-assistant.form.totalPnl":"총손익","ai-trading-assistant.form.customPrompt":"맞춤 프롬프트 단어","ai-trading-assistant.form.customPromptHint":"선택 사항, AI 거래 전략 및 의사 결정 논리를 사용자 정의하는 데 사용됩니다.","ai-trading-assistant.form.cancel":"취소","ai-trading-assistant.form.prev":"이전 단계","ai-trading-assistant.form.next":"다음 단계","ai-trading-assistant.form.confirmCreate":"생성 확인","ai-trading-assistant.form.confirmEdit":"변경사항 확인","ai-trading-assistant.messages.createSuccess":"전략이 성공적으로 생성되었습니다.","ai-trading-assistant.messages.createFailed":"정책을 생성하지 못했습니다.","ai-trading-assistant.messages.updateSuccess":"정책 업데이트 성공","ai-trading-assistant.messages.updateFailed":"정책 업데이트 실패","ai-trading-assistant.messages.deleteSuccess":"정책 삭제 성공","ai-trading-assistant.messages.deleteFailed":"정책 삭제 실패","ai-trading-assistant.messages.startSuccess":"전략이 성공적으로 시작되었습니다","ai-trading-assistant.messages.startFailed":"정책을 시작하지 못했습니다.","ai-trading-assistant.messages.stopSuccess":"전략이 성공적으로 중지되었습니다.","ai-trading-assistant.messages.stopFailed":"중지 전략이 실패했습니다.","ai-trading-assistant.messages.loadFailed":"정책 목록을 가져오지 못했습니다.","ai-trading-assistant.messages.loadDecisionsFailed":"AI 결정 기록을 가져오지 못했습니다.","ai-trading-assistant.messages.deleteConfirm":"이 정책을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.","ai-trading-assistant.placeholders.inputStrategyName":"정책 이름을 입력하세요.","ai-trading-assistant.placeholders.selectModelId":"AI 모델을 선택해 주세요","ai-trading-assistant.placeholders.selectDecideInterval":"결정 간격을 선택하세요.","ai-trading-assistant.placeholders.startTime":"시작 시간","ai-trading-assistant.placeholders.endTime":"종료 시간","ai-trading-assistant.placeholders.inputApiKey":"API 키를 입력하세요","ai-trading-assistant.placeholders.selectExchange":"교환을 선택해주세요","ai-trading-assistant.placeholders.inputSecretKey":"비밀키를 입력해주세요","ai-trading-assistant.placeholders.inputPassphrase":"암호를 입력하세요","ai-trading-assistant.placeholders.selectSymbol":"다음과 같은 거래쌍을 선택하세요: BTC/USDT","ai-trading-assistant.placeholders.selectTimeframe":"기간을 선택하세요.","ai-trading-assistant.placeholders.inputCustomPrompt":"맞춤 프롬프트 단어를 입력하세요(선택사항).","ai-trading-assistant.validation.strategyNameRequired":"정책 이름을 입력하세요.","ai-trading-assistant.validation.modelIdRequired":"AI 모델을 선택해 주세요","ai-trading-assistant.validation.runPeriodRequired":"실행 주기를 선택하세요.","ai-trading-assistant.validation.apiKeyRequired":"API 키를 입력하세요","ai-trading-assistant.validation.exchangeRequired":"교환을 선택해주세요","ai-trading-assistant.validation.secretKeyRequired":"비밀키를 입력해주세요","ai-trading-assistant.validation.symbolRequired":"거래쌍을 선택해주세요","ai-trading-assistant.validation.initialCapitalRequired":"투자금액을 입력해주세요.","ai-trading-assistant.table.time":"시간","ai-trading-assistant.table.type":"유형","ai-trading-assistant.table.price":"가격","ai-trading-assistant.table.amount":"수량","ai-trading-assistant.table.value":"금액","ai-trading-assistant.table.symbol":"거래 쌍","ai-trading-assistant.table.side":"방향","ai-trading-assistant.table.size":"포지션 수량","ai-trading-assistant.table.entryPrice":"개장 가격","ai-trading-assistant.table.currentPrice":"현재 가격","ai-trading-assistant.table.unrealizedPnl":"미실현 손익","ai-trading-assistant.table.profit":"이익과 손실","ai-trading-assistant.table.openLong":"길게 열다","ai-trading-assistant.table.closeLong":"핀듀오","ai-trading-assistant.table.openShort":"오픈 쇼트","ai-trading-assistant.table.closeShort":"비어 있음","ai-trading-assistant.table.addLong":"가돗","ai-trading-assistant.table.addShort":"짧게 추가하다","ai-trading-assistant.table.closeShortProfit":"숏 포지션에서 이익을 얻으세요","ai-trading-assistant.table.closeShortStop":"손실 중지","ai-trading-assistant.table.closeLongProfit":"오래 멈추고 이익을 얻으십시오","ai-trading-assistant.table.closeLongStop":"손실 중지","ai-trading-assistant.table.buy":"사다","ai-trading-assistant.table.sell":"팔다","ai-trading-assistant.table.long":"오래 가세요","ai-trading-assistant.table.short":"짧은","ai-trading-assistant.table.hold":"보류","ai-trading-assistant.table.reasoning":"분석 이유","ai-trading-assistant.table.decisions":"의사결정","ai-trading-assistant.table.riskAssessment":"위험 평가","ai-trading-assistant.table.confidence":"자신감","ai-trading-assistant.table.totalRecords":"총 {total}개 기록","ai-trading-assistant.table.noPositions":"아직 직책이 없습니다.","ai-trading-assistant.detail.title":"전략 세부정보","ai-trading-assistant.equity.noData":"아직 순자산 데이터가 없습니다.","ai-trading-assistant.equity.equity":"순자산","ai-trading-assistant.exchange.testFailed":"연결 테스트 실패","ai-trading-assistant.exchange.connectionSuccess":"연결 성공","ai-trading-assistant.exchange.connectionFailed":"연결 실패","ai-trading-assistant.form.advancedSettings":"고급 설정","ai-trading-assistant.form.orderMode":"주문 모드","ai-trading-assistant.form.orderModeMaker":"메이커","ai-trading-assistant.form.orderModeTaker":"시장가(테이커)","ai-trading-assistant.form.orderModeHint":"지정가 주문 모드는 지정가 주문을 사용하며 처리 수수료가 더 낮습니다. 시장 가격 모드는 즉시 실행되며 처리 수수료가 더 높습니다.","ai-trading-assistant.form.makerWaitSec":"지정가 주문 대기 시간(초)","ai-trading-assistant.form.makerWaitSecHint":"주문 후 거래가 완료될 때까지 기다리는 시간입니다. 취소하고 시간 초과 후 다시 시도하세요.","ai-trading-assistant.form.makerRetries":"보류 중인 주문에 대한 재시도 횟수","ai-trading-assistant.form.makerRetriesHint":"보류 중인 주문이 실행되지 않을 때 최대 재시도 횟수","ai-trading-assistant.form.fallbackToMarket":"지정가 주문이 실패하고 시장 가격이 하락합니다.","ai-trading-assistant.form.fallbackToMarketHint":"개시/청산 보류 주문이 완료되지 않은 경우 거래가 완료되었는지 확인하기 위해 시장가 주문으로 다운그레이드해야 하는지 여부.","ai-trading-assistant.form.marginMode":"마진 모드","ai-trading-assistant.form.marginModeCross":"전체 창고","ai-trading-assistant.form.marginModeIsolated":"고립된 위치","ai-analysis.title":"퀀트 트레이딩 엔진","ai-analysis.system.online":"온라인","ai-analysis.system.agents":"대리인","ai-analysis.system.active":"활성","ai-analysis.system.stage":"무대","ai-analysis.panel.roster":"에이전트 라인업","ai-analysis.panel.thinking":"생각하다...","ai-analysis.panel.done":"완료","ai-analysis.panel.standby":"대기","ai-analysis.input.title":"퀀트 트레이딩 엔진","ai-analysis.input.placeholder":"대상 자산 선택(예: BTC/USDT)","ai-analysis.input.watchlist":"옵션 주식","ai-analysis.input.start":"분석 시작","ai-analysis.input.recent":"최근 작업:","ai-analysis.vis.stage":"무대","ai-analysis.vis.processing":"처리","ai-analysis.result.complete":"분석 완료","ai-analysis.result.signal":"최종 신호","ai-analysis.result.confidence":"자신감:","ai-analysis.result.new":"새로운 분석","ai-analysis.result.full":"전체 보고서 보기","ai-analysis.logs.title":"시스템 로그","ai-analysis.modal.title":"기밀 보고서","ai-analysis.modal.fundamental":"기본적 분석","ai-analysis.modal.technical":"기술적 분석","ai-analysis.modal.sentiment":"감정 분석","ai-analysis.modal.risk":"위험 평가","ai-analysis.stage.idle":"대기","ai-analysis.stage.1":"1단계: 다차원 분석","ai-analysis.stage.2":"2단계: 장단기 토론","ai-analysis.stage.3":"3단계: 전략적 계획","ai-analysis.stage.4":"네 번째 단계: 위험 통제 검토","ai-analysis.stage.complete":"완료","ai-analysis.agent.investment_director":"투자 이사","ai-analysis.agent.role.investment_director":"종합 분석 및 최종 결론","ai-analysis.agent.market":"시장 분석가","ai-analysis.agent.role.market":"기술 및 시장 데이터","ai-analysis.agent.fundamental":"기본 분석가","ai-analysis.agent.role.fundamental":"재무 및 평가","ai-analysis.agent.technical":"기술 분석가","ai-analysis.agent.role.technical":"기술 지표 및 차트","ai-analysis.agent.news":"뉴스 분석가","ai-analysis.agent.role.news":"글로벌 뉴스 필터","ai-analysis.agent.sentiment":"감정 분석가","ai-analysis.agent.role.sentiment":"사회적 및 정서적","ai-analysis.agent.risk":"위험 분석가","ai-analysis.agent.role.risk":"기본 리스크 점검","ai-analysis.agent.bull":"낙관적인 연구원","ai-analysis.agent.role.bull":"성장촉매 채굴","ai-analysis.agent.bear":"약세 연구원","ai-analysis.agent.role.bear":"위험 및 결함 조사","ai-analysis.agent.manager":"연구 관리자","ai-analysis.agent.role.manager":"토론 진행자","ai-analysis.agent.trader":"상인","ai-analysis.agent.role.trader":"경영 전략가","ai-analysis.agent.risky":"활동가 분석가","ai-analysis.agent.role.risky":"공격적인 전략","ai-analysis.agent.neutral":"균형 분석가","ai-analysis.agent.role.neutral":"균형 전략","ai-analysis.agent.safe":"보수적인 분석가","ai-analysis.agent.role.safe":"보수적 전략","ai-analysis.agent.cro":"위험 통제 관리자(CRO)","ai-analysis.agent.role.cro":"최종 의사결정 권한","ai-analysis.script.market":"주요 거래소에서 OHLCV 데이터를 가져오는 중...","ai-analysis.script.fundamental":"분기별 재무 보고서를 검색하는 중...","ai-analysis.script.technical":"기술지표 및 차트 패턴 분석 중...","ai-analysis.script.news":"글로벌 금융 뉴스를 스캔하는 중...","ai-analysis.script.sentiment":"소셜미디어 트렌드 분석…","ai-analysis.script.risk":"역사적 변동성을 계산하는 중...","invite.inviteLink":"초대링크","invite.copy":"링크 복사","invite.copySuccess":"성공적으로 복사되었습니다!","invite.copyFailed":"복사하지 못했습니다. 수동으로 복사하세요.","invite.noInviteLink":"초대 링크가 생성되지 않았습니다.","invite.totalInvites":"누적 초대","invite.totalReward":"누적 보상","invite.rules":"초대 규칙","invite.rule1":"친구를 등록하도록 성공적으로 초대할 때마다 보상을 받게 됩니다.","invite.rule2":"초대한 친구가 첫 번째 거래를 완료하면 추가 보상을 받을 수 있습니다.","invite.rule3":"초대 보상은 귀하의 계정으로 직접 전송됩니다","invite.inviteList":"초대 목록","invite.tasks":"선교 센터","invite.inviteeName":"초대받은 사람","invite.inviteTime":"초대 시간","invite.status":"상태","invite.reward":"보상","invite.active":"활성","invite.inactive":"활성화되지 않음","invite.completed":"완료됨","invite.claimed":"접수됨","invite.pending":"완료 예정","invite.goToTask":"완료하다","invite.claimReward":"보상 청구","invite.verify":"확인 완료","invite.verifySuccess":"확인에 성공했습니다. 작업 완료","invite.verifyNotCompleted":"작업이 아직 완료되지 않았습니다. 먼저 작업을 완료하세요.","invite.verifyFailed":"확인에 실패했습니다. 나중에 다시 시도해 주세요.","invite.claimSuccess":"{reward} QDT를 성공적으로 받았습니다!","invite.claimFailed":"수집하지 못했습니다. 나중에 다시 시도해 주세요.","invite.totalRecords":"총 {total}개 기록","invite.task.twitter.title":"X(트위터)로 리트윗","invite.task.twitter.desc":"공식 트윗을 X(트위터) 계정에 공유하세요","invite.task.youtube.title":"YouTube 채널을 팔로우하세요","invite.task.youtube.desc":"공식 YouTube 채널을 구독하고 팔로우하세요.","invite.task.telegram.title":"텔레그램 그룹에 가입하세요","invite.task.telegram.desc":"공식 텔레그램 커뮤니티 그룹에 가입하세요","invite.task.discord.title":"Discord 서버에 가입하세요","invite.task.discord.desc":"Discord 커뮤니티 서버에 가입하세요",message:"-","layouts.usermenu.dialog.title":"정보","layouts.usermenu.dialog.content":"정말로 로그아웃하시겠습니까?","layouts.userLayout.title":"불확실성 속에서 진실을 찾아라","dashboard.indicator.boundary.message":"Note: The indicator script only computes plots + buy/sell signals. Position sizing, risk, scaling, fees/slippage belong to execution config.","dashboard.indicator.boundary.indicatorRule":"Keep the script to buy/sell only (and set df['buy']/df['sell']). Do NOT implement position management, TP/SL, scaling in the script.","dashboard.indicator.boundary.backtestRule":"Rule: If a bar has a main signal (buy/sell → open/close/reverse), scaling in/out is skipped on the same bar.","dashboard.indicator.guide.title":"Python Indicator & Strategy Development Guide","dashboard.indicator.guide.intro":"This platform supports writing custom technical indicators and trading signals using Python. The system includes built-in pandas and numpy data analysis libraries. You can use standard DataFrame operations to process K-line data and draw charts or mark buy/sell signals.","dashboard.indicator.guide.section1.title":"1. Runtime Environment & Predefined Variables","dashboard.indicator.guide.section1.env":"Your code runs in a browser-based Python environment (Pyodide).","dashboard.indicator.guide.section1.libs":"Pre-installed Libraries","dashboard.indicator.guide.section1.libsDesc":"The following libraries are imported by default, no need to import again:","dashboard.indicator.guide.section1.libsList":"pandas (pd), numpy (np), math, json","dashboard.indicator.guide.section1.data":"Input Data: df","dashboard.indicator.guide.section1.dataDesc":"The system automatically converts current K-line data into a Pandas DataFrame object, variable name is df.","dashboard.indicator.guide.section1.dataColumns":"df contains the following columns (all float type):","dashboard.indicator.guide.section1.dataColumnsList":"time (timestamp, seconds), open, high, low, close, volume","dashboard.indicator.guide.section1.dataNote":"Data index is arranged from old to new (0 is the earliest data, last row is the latest data).","dashboard.indicator.guide.section1.dataIndex":"Important: df index is timestamp (DatetimeIndex), please preserve the index, avoid using .values which loses the index.","dashboard.indicator.guide.section2.title":"2. Parameter Definition","dashboard.indicator.guide.section2.desc":"You can define variables as parameters at the beginning of your code. The system will try to parse statements like variable = value as adjustable parameters.","dashboard.indicator.guide.section2.example":"Parameter Example","dashboard.indicator.guide.section2.exampleCode":"span = 20 or multiplier = 2.0","dashboard.indicator.guide.section3.title":"3. Backtest Signal Setup (Important!)","dashboard.indicator.guide.section3.desc":"If you want your indicator to support backtesting, you must set the following two columns in your code:","dashboard.indicator.guide.section3.backtestRequired":"Required for Backtesting:","dashboard.indicator.guide.section3.backtestBuySignal":"df['buy_signal'] - Boolean Series, True indicates buy signal","dashboard.indicator.guide.section3.backtestSellSignal":"df['sell_signal'] - Boolean Series, True indicates sell signal","dashboard.indicator.guide.section3.backtestExample":"Example:","dashboard.indicator.guide.section3.backtestExampleCode":"df['buy_signal'] = condition_buy
df['sell_signal'] = condition_sell","dashboard.indicator.guide.section3.backtestNote":"Note: Even if you only set output.signals for chart display, you must set these two columns to enable backtesting.","dashboard.indicator.guide.section4.title":"4. Output Requirements: output","dashboard.indicator.guide.section4.desc":"At the end of code execution, you must define a dictionary named output to tell the chart how to display results.","dashboard.indicator.guide.section4.fields":"The output dictionary contains the following fields:","dashboard.indicator.guide.section4.plots":"plots - For drawing lines (e.g., moving averages, RSI)","dashboard.indicator.guide.section4.signals":"signals - For marking buy/sell signals (e.g., arrows, labels)","dashboard.indicator.guide.section4.name":"name - Indicator name (optional)","dashboard.indicator.guide.section4.calculatedVars":"calculatedVars - Calculated variables (optional, for displaying additional information)","dashboard.indicator.guide.section5.title":"5. Plot Configuration (Plots)","dashboard.indicator.guide.section5.desc":"Each object in the plots list represents a line.","dashboard.indicator.guide.section5.table.field":"Field","dashboard.indicator.guide.section5.table.type":"Type","dashboard.indicator.guide.section5.table.required":"Required","dashboard.indicator.guide.section5.table.requiredYes":"Yes","dashboard.indicator.guide.section5.table.requiredNo":"No","dashboard.indicator.guide.section5.table.desc":"Description","dashboard.indicator.guide.section5.table.name":"The name of the indicator line, displayed in the legend","dashboard.indicator.guide.section5.table.data":"Data list, length must match the number of rows in df. Recommended to use series.tolist()","dashboard.indicator.guide.section5.table.color":"Line color (Hex format, e.g. '#ff0000'). If not filled, the system will automatically assign","dashboard.indicator.guide.section5.table.typeDesc":"Chart type, default is 'line'","dashboard.indicator.guide.section5.table.overlay":"Important. True means display on main chart (with K-line), False means display on sub-chart (independent area)","dashboard.indicator.guide.section5.example":"Example: Draw Simple Moving Average (SMA)","dashboard.indicator.guide.section5.exampleCalc":"Calculate SMA","dashboard.indicator.guide.section5.exampleOutput":"Construct Output","dashboard.indicator.guide.section5.exampleOverlay":"Display on main chart","dashboard.indicator.guide.section6.title":"6. Signal Markers (Signals)","dashboard.indicator.guide.section6.desc":"signals are used to mark buy/sell points on specific K-lines through icons or text. Note: This is only for chart display. The backtest system uses df['buy_signal'] and df['sell_signal'].","dashboard.indicator.guide.section6.table.type":"Signal type: 'buy' (buy, marked below K-line) or 'sell' (sell, marked above K-line)","dashboard.indicator.guide.section6.table.data":"Signal data list. Fill price value at signal positions, fill None (or np.nan) at non-signal positions","dashboard.indicator.guide.section6.table.text":'Text displayed on the label (e.g. "B", "S", "Buy", "Sell")',"dashboard.indicator.guide.section6.table.color":"Marker color","dashboard.indicator.guide.section6.hint":"The system automatically handles positioning.","dashboard.indicator.guide.section6.buy":"Markers will be automatically positioned below the Low of the current K-line","dashboard.indicator.guide.section6.sell":"Markers will be automatically positioned above the High of the current K-line","dashboard.indicator.guide.section6.example":"Example: Draw Buy/Sell Signals","dashboard.indicator.guide.section6.exampleInit":"Initialize signal list, fill all with None","dashboard.indicator.guide.section6.exampleLogic":"Simple logic: mark buy when close price is greater than open price","dashboard.indicator.guide.section6.exampleNote":"In actual logic, please use loops or vectorized operations","dashboard.indicator.guide.section6.examplePrice":"Record price","dashboard.indicator.guide.section6.exampleText":"Buy","dashboard.indicator.guide.section7.title":"7. Complete Code Examples","dashboard.indicator.guide.section7.exampleA":"Example A: Dual EMA Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleACode":'# 1. Calculate indicators
df[\'ema_fast\'] = df[\'close\'].ewm(span=5, adjust=False).mean()
df[\'ema_slow\'] = df[\'close\'].ewm(span=13, adjust=False).mean()

# 2. Calculate crossover signals
cross_up = (df[\'ema_fast\'] > df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) <= df[\'ema_slow\'].shift(1))
cross_down = (df[\'ema_fast\'] < df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) >= df[\'ema_slow\'].shift(1))

# 3. 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = cross_up
df[\'close_long\'] = cross_down
df[\'open_short\'] = cross_down
df[\'close_short\'] = cross_up

# 4. Generate signal data for chart display
buy_signals = [df[\'low\'].iloc[i] * 0.995 if cross_up.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if cross_down.iloc[i] else None for i in range(len(df))]

# 5. Build output
output = {
"name": "Dual EMA Strategy",
"plots": [
{"name": "EMA 5", "data": df[\'ema_fast\'].tolist(), "color": "#FF6B6B", "overlay": True},
{"name": "EMA 13", "data": df[\'ema_slow\'].tolist(), "color": "#4ECDC4", "overlay": True}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section7.exampleB":"Example B: Bollinger Bands - Chart Display Only","dashboard.indicator.guide.section7.exampleBCode":'# Calculate Bollinger Bands (chart display only, no backtesting)
length = 20
mult = 2.0
df[\'sma\'] = df[\'close\'].rolling(length).mean()
df[\'std\'] = df[\'close\'].rolling(length).std()
df[\'upper\'] = df[\'sma\'] + mult * df[\'std\']
df[\'lower\'] = df[\'sma\'] - mult * df[\'std\']

output = {
"name": "Bollinger Bands",
"plots": [
{"name": "Upper", "data": df[\'upper\'].tolist(), "color": "#FF5252", "overlay": True},
{"name": "Middle", "data": df[\'sma\'].tolist(), "color": "#2196F3", "overlay": True},
{"name": "Lower", "data": df[\'lower\'].tolist(), "color": "#00E676", "overlay": True}
]
}',"dashboard.indicator.guide.section7.exampleC":"Example C: RSI Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleCCode":'# Calculate RSI
delta = df[\'close\'].diff()
up = delta.clip(lower=0)
down = -1 * delta.clip(upper=0)
ema_up = up.ewm(com=13, adjust=False).mean()
ema_down = down.ewm(com=13, adjust=False).mean()
rs = ema_up / ema_down
df[\'rsi\'] = 100 - (100 / (1 + rs))

# Generate trading signals
buy_condition = df[\'rsi\'] < 30 # Oversold buy
sell_condition = df[\'rsi\'] > 70 # Overbought sell

# 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = buy_condition
df[\'close_long\'] = sell_condition
df[\'open_short\'] = sell_condition
df[\'close_short\'] = buy_condition

# Generate chart signals
buy_signals = [df[\'low\'].iloc[i] * 0.995 if buy_condition.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if sell_condition.iloc[i] else None for i in range(len(df))]

output = {
"name": "RSI Strategy",
"plots": [
{"name": "RSI", "data": df[\'rsi\'].tolist(), "color": "#9C27B0", "overlay": False},
{"name": "Overbought", "data": [70] * len(df), "color": "#FF5252", "style": "dashed", "overlay": False},
{"name": "Oversold", "data": [30] * len(df), "color": "#00E676", "style": "dashed", "overlay": False}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section6.param":"Parameters","dashboard.indicator.guide.section6.calc":"Calculate","dashboard.indicator.guide.section6.output":"Output","dashboard.indicator.guide.section6.generate":"Generate signal data (initialize with None)","dashboard.indicator.guide.section6.subchart":"Display on sub-chart","dashboard.indicator.guide.section8.title":"8. Frequently Asked Questions (FAQ)","dashboard.indicator.guide.section8.q1":"Q: Why can't my indicator be backtested?","dashboard.indicator.guide.section8.a1":"A: The backtest system requires NEW signal columns: df['open_long'], df['close_long'], df['open_short'], df['close_short'] (boolean). Even if you set output.signals for chart display, you must set these columns to enable backtesting.","dashboard.indicator.guide.section8.q2":"Q: Data length mismatch?","dashboard.indicator.guide.section8.a2":"A: The data list in plots and signals must have exactly the same length as the K-line data. If you use df['xxx'].tolist(), there is usually no problem.","dashboard.indicator.guide.section8.q3":"Q: How to handle NaN (empty values)?","dashboard.indicator.guide.section8.a3":"A: Pandas calculations (such as rolling mean) will produce NaN at the beginning. The system will automatically convert NaN to null for chart rendering. You don't need to manually clean it, but if you need specific logic, you can use df.fillna(0) or other methods.","dashboard.indicator.guide.section8.q4":"Q: Index mismatch causing all signals to be NaN?","dashboard.indicator.guide.section8.a4":"A: Please ensure you preserve the original df index (timestamp). Avoid using .values to create new Series. Use columns directly like df['close'] for operations.","dashboard.indicator.guide.section8.q5":"Q: Can I use third-party network libraries?","dashboard.indicator.guide.section8.a5":"A: No. The runtime environment is a browser sandbox and cannot use libraries like requests to request external APIs, nor can it install additional pip packages. Limited to built-in libraries such as pandas, numpy, math, json.","dashboard.indicator.guide.section8.q6":"Q: How to debug code?","dashboard.indicator.guide.section8.a6":"A: If the chart does not display indicators, it is usually because the Python code has an error. Please check for syntax errors or array index out of bounds. It is recommended to debug the algorithm logic in a local Python environment first, then copy it in.","dashboard.indicator.guide.section8.q7":"Q: Backtest shows 0 signals?","dashboard.indicator.guide.section8.a7":"A: Please check the data type of df['open_long']/df['close_long']/df['open_short']/df['close_short']. They should be boolean (True/False), not numeric. Use condition.fillna(False).astype(bool) to ensure correct type.","dashboard.indicator.backtest.commissionHint":"Charged on notional value (incl. leverage) per trade; both entry & exit are deducted from balance.","dashboard.indicator.backtest.historyTitle":"Backtest History","dashboard.indicator.backtest.historyRefresh":"Refresh","dashboard.indicator.backtest.historyView":"View","dashboard.indicator.backtest.historyNoData":"No backtest history","dashboard.indicator.backtest.historyUseCurrent":"Only current symbol/timeframe","dashboard.indicator.backtest.historyFilterSymbol":"Symbol","dashboard.indicator.backtest.historyFilterTimeframe":"Timeframe","dashboard.indicator.backtest.historyApply":"Apply filters","dashboard.indicator.backtest.historyAIAnalyze":"AI Analyze","dashboard.indicator.backtest.historyAIAnalyzeTitle":"AI Suggestions","dashboard.indicator.backtest.historyNoAIResult":"No AI analysis result","dashboard.indicator.backtest.historyRunId":"Run ID","dashboard.indicator.backtest.historyCreatedAt":"Time","dashboard.indicator.backtest.historyRange":"Range","dashboard.indicator.backtest.historyStatus":"Status","dashboard.indicator.backtest.historyStatusSuccess":"Success","dashboard.indicator.backtest.historyStatusFailed":"Failed","dashboard.indicator.backtest.historyActions":"Actions","trading-assistant.exchange.ipWhitelistTip":"Please add the following IPs to the whitelist in your exchange API settings:","signal-robot.title":"Signal Robot Console","signal-robot.createBot":"Create New Bot","signal-robot.search.nameOrSymbol":"Name/Symbol","signal-robot.search.placeholder":"Search bot name or symbol","signal-robot.search.status":"Status","signal-robot.search.statusAll":"All","signal-robot.search.statusRunning":"Running","signal-robot.search.statusPaused":"Paused","signal-robot.search.query":"Query","signal-robot.search.reset":"Reset","signal-robot.table.botName":"Bot Name","signal-robot.table.symbolTimeframe":"Symbol/Timeframe","signal-robot.table.triggerStrategy":"Trigger Strategy","signal-robot.table.notificationChannels":"Notification Channels","signal-robot.table.status":"Status","signal-robot.table.action":"Action","signal-robot.table.triggerConditions":"{count} trigger conditions","signal-robot.table.monitoring":"Monitoring","signal-robot.table.paused":"Paused","signal-robot.table.edit":"Edit","signal-robot.table.pause":"Pause","signal-robot.table.start":"Start","signal-robot.table.delete":"Delete","signal-robot.table.deleteConfirm":"Are you sure you want to delete this bot?","signal-robot.table.deleteSuccess":"Deleted successfully","signal-robot.table.startSuccess":"Bot started","signal-robot.table.pauseSuccess":"Bot paused","signal-robot.channel.telegram":"Telegram","signal-robot.channel.discord":"Discord","signal-robot.channel.email":"Email","signal-robot.channel.webhook":"Webhook","signal-robot.channel.browser":"Browser Push","signal-robot.modal.createTitle":"Create New Signal Robot","signal-robot.modal.editTitle":"Edit Signal Robot","signal-robot.modal.step.basic":"Basic Settings","signal-robot.modal.step.entry":"Entry Strategy","signal-robot.modal.step.position":"Position Management","signal-robot.modal.step.risk":"Risk Control","signal-robot.modal.step.notify":"Notification Config","signal-robot.modal.prev":"Previous","signal-robot.modal.next":"Next","signal-robot.modal.preview":"Preview Backtest","signal-robot.modal.complete":"Complete & Run","signal-robot.modal.saveSuccess":"Saved successfully","signal-robot.modal.previewDeveloping":"Preview feature is under development...","signal-robot.modal.basicInfoRequired":"Please complete basic information","signal-robot.basic.alert":"Set basic information for the bot","signal-robot.basic.title":"Basic Information","signal-robot.basic.botName":"Bot Name","signal-robot.basic.botNamePlaceholder":"e.g.: BTC SuperTrend Strategy","signal-robot.basic.symbol":"Trading Pair","signal-robot.basic.symbolPlaceholder":"Select from watchlist","signal-robot.basic.noWatchlist":"No watchlist items, please add in market page first","signal-robot.basic.timeframe":"K-Line Period","signal-robot.basic.timeframe15m":"15 Minutes","signal-robot.basic.timeframe30m":"30 Minutes","signal-robot.basic.timeframe1h":"1 Hour","signal-robot.basic.timeframe4h":"4 Hours","signal-robot.basic.timeframe1d":"1 Day","signal-robot.basic.autoNameSuggestion":"{symbol} Signal Robot","signal-robot.entry.alert":"Trigger entry signal when all conditions below are met","signal-robot.entry.condition":"Condition {index}","signal-robot.entry.indicator":"Indicator","signal-robot.entry.indicatorSupertrend":"SuperTrend","signal-robot.entry.indicatorEma":"EMA (Exponential Moving Average)","signal-robot.entry.indicatorRsi":"RSI (Relative Strength Index)","signal-robot.entry.indicatorMacd":"MACD","signal-robot.entry.indicatorBollinger":"Bollinger Bands","signal-robot.entry.atrPeriod":"ATR Period","signal-robot.entry.multiplier":"Multiplier","signal-robot.entry.triggerSignal":"Trigger Signal","signal-robot.entry.signalTrendBullish":"Trend Bullish","signal-robot.entry.signalTrendBearish":"Trend Bearish","signal-robot.entry.signalIsUptrend":"Is Uptrend","signal-robot.entry.signalIsDowntrend":"Is Downtrend","signal-robot.entry.period":"Period","signal-robot.entry.compareCondition":"Compare Condition","signal-robot.entry.priceAbove":"Price > EMA (Price Above)","signal-robot.entry.priceBelow":"Price < EMA (Price Below)","signal-robot.entry.crossUp":"Price Crosses Above EMA (Golden Cross)","signal-robot.entry.crossDown":"Price Crosses Below EMA (Death Cross)","signal-robot.entry.compare":"Compare","signal-robot.entry.greaterThan":"Greater Than","signal-robot.entry.lessThan":"Less Than","signal-robot.entry.crossUpShort":"Cross Up","signal-robot.entry.crossDownShort":"Cross Down","signal-robot.entry.threshold":"Threshold","signal-robot.entry.selectIndicator":"Please select an indicator to configure parameters","signal-robot.entry.addCondition":"Add Condition","signal-robot.position.alert":"Configure initial position size, leverage and pyramiding rules","signal-robot.position.basicTitle":"Basic Position Management","signal-robot.position.initialSize":"Initial Size (Capital %)","signal-robot.position.initialSizeHint":"Recommended 5% - 20%","signal-robot.position.leverage":"Leverage","signal-robot.position.leverageHint":"Please ensure your exchange account supports this leverage","signal-robot.position.maxPyramiding":"Max Pyramiding Times","signal-robot.position.maxPyramidingHint":"0 means no pyramiding","signal-robot.position.pyramidingTitle":"Pyramiding Rules","signal-robot.position.pyramidingEnabled":"Enabled","signal-robot.position.pyramidingDisabled":"Disabled","signal-robot.position.pyramidingCondition":"Pyramiding Trigger Condition","signal-robot.position.priceRisePct":"Price Rises (Long) / Falls (Short)","signal-robot.position.profitPct":"Profit Reaches","signal-robot.position.triggerThreshold":"Trigger Threshold (%)","signal-robot.position.triggerThresholdHint":"e.g. 3%: add position once every 3% rise","signal-robot.position.addSize":"Single Add Size (Capital %)","signal-robot.position.pyramidingDisabledHint":"Pyramiding disabled, only initial position will be executed","signal-robot.risk.alert":"Configure take profit, stop loss and exit rules","signal-robot.risk.stopLossTitle":"Stop Loss","signal-robot.risk.stopLossEnabled":"Enabled","signal-robot.risk.stopLossDisabled":"Disabled","signal-robot.risk.stopLossType":"Stop Loss Type","signal-robot.risk.stopLossFixedPct":"Fixed Percentage","signal-robot.risk.stopLossAtrMultiplier":"ATR Multiplier","signal-robot.risk.stopLossValue":"Value","signal-robot.risk.stopLossFixedHint":"e.g. 2%: stop loss when loss reaches 2%","signal-robot.risk.stopLossAtrHint":"e.g. 2.0: stop loss when price touches ATR*2.0","signal-robot.risk.stopLossDisabledHint":"Stop loss disabled (high risk)","signal-robot.risk.trailingStopTitle":"Trailing Stop","signal-robot.risk.activationProfit":"Activation Profit (%)","signal-robot.risk.activationProfitHint":"Start trailing when profit reaches this level","signal-robot.risk.callbackPct":"Callback (%)","signal-robot.risk.callbackPctHint":"Trigger take profit when price falls from peak by this percentage","signal-robot.risk.trailingStopDisabledHint":"Trailing stop disabled","signal-robot.risk.otherExitTitle":"Other Exit Rules","signal-robot.risk.signalExit":"Allow Signal Exit","signal-robot.risk.signalExitHint":"Close position immediately when reverse signal appears (e.g. close long when short signal appears)","signal-robot.notify.alert":"Configure notification methods when signal is triggered","signal-robot.notify.channelTitle":"Notification Channels","signal-robot.notify.discordWebhook":"Discord Webhook","signal-robot.notify.genericWebhook":"Generic Webhook","signal-robot.notify.webhookUrl":"Webhook URL","signal-robot.notify.webhookUrlPlaceholder":"https://example.com/webhook","signal-robot.notify.discordUrl":"Discord URL","signal-robot.notify.discordUrlPlaceholder":"https://discord.com/api/webhooks/...","signal-robot.operator.greaterThan":"Greater Than","signal-robot.operator.lessThan":"Less Than","signal-robot.operator.equal":"Equal","signal-robot.operator.goldenCross":"Golden Cross","signal-robot.operator.deathCross":"Death Cross","signal-robot.operator.increaseBy":"Increase By","signal-robot.operator.decreaseBy":"Decrease By","signal-robot.indicator.price":"Price","signal-robot.indicator.rsi":"RSI","signal-robot.indicator.kdjK":"KDJ(K)","signal-robot.indicator.kdjJ":"KDJ(J)","signal-robot.indicator.macd":"MACD","signal-robot.indicator.macdHist":"MACD Histogram","signal-robot.indicator.bollingerUp":"Bollinger Upper","signal-robot.indicator.bollingerLow":"Bollinger Lower","signal-robot.indicator.volume":"Volume","signal-robot.indicator.changePct1h":"1H Change %","signal-robot.indicator.changePct24h":"24H Change %","signal-robot.indicator.signalLine":"Signal Line","settings.group.agent_memory":"메모리/리플렉션 설정","settings.group.reflection_worker":"자동 리플렉션 검증 워커","settings.field.ENABLE_AGENT_MEMORY":"에이전트 메모리 사용","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"벡터 검색 사용(로컬)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"임베딩 차원","settings.field.AGENT_MEMORY_TOP_K":"Top-K 조회 개수","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"후보 윈도우 크기","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"시간 감쇠 반감기(일)","settings.field.AGENT_MEMORY_W_SIM":"유사도 가중치","settings.field.AGENT_MEMORY_W_RECENCY":"시간 가중치","settings.field.AGENT_MEMORY_W_RETURNS":"수익 가중치","settings.field.ENABLE_REFLECTION_WORKER":"자동 검증 사용","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"검증 주기(초)","profile.notifications.title":"알림 설정","profile.notifications.hint":"기본 알림 방법을 설정하세요. 자산 모니터링 및 알림 생성 시 자동으로 사용됩니다","profile.notifications.defaultChannels":"기본 알림 채널","profile.notifications.browser":"앱 내 알림","profile.notifications.email":"이메일","profile.notifications.phone":"SMS","profile.notifications.telegramBotToken":"Telegram Bot Token","profile.notifications.telegramBotTokenPlaceholder":"Telegram Bot Token을 입력하세요","profile.notifications.telegramBotTokenHint":"@BotFather에서 봇을 만들어 Token을 받으세요","profile.notifications.telegramChatId":"Telegram Chat ID","profile.notifications.telegramPlaceholder":"Telegram Chat ID를 입력하세요 (예: 123456789)","profile.notifications.telegramHint":"@userinfobot에 /start를 보내 Chat ID를 받으세요","profile.notifications.notifyEmail":"알림 이메일","profile.notifications.emailPlaceholder":"알림을 받을 이메일 주소","profile.notifications.emailHint":"기본값은 계정 이메일이며 다른 이메일도 설정 가능","profile.notifications.phonePlaceholder":"전화번호를 입력하세요 (예: +821012345678)","profile.notifications.phoneHint":"관리자가 Twilio 서비스를 설정해야 합니다","profile.notifications.discordWebhook":"Discord Webhook","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"Discord 서버 설정에서 Webhook을 생성하세요","profile.notifications.webhookUrl":"Webhook URL","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"커스텀 Webhook URL, POST JSON으로 알림 전송","profile.notifications.webhookToken":"Webhook Token (선택)","profile.notifications.webhookTokenPlaceholder":"요청 인증용 Bearer Token","profile.notifications.webhookTokenHint":"Authorization: Bearer Token으로 Webhook에 전송","profile.notifications.testBtn":"테스트 알림 보내기","profile.notifications.saveSuccess":"알림 설정이 저장되었습니다","profile.notifications.selectChannel":"최소 하나의 알림 채널을 선택하세요","profile.notifications.fillTelegramToken":"Telegram Bot Token을 입력하세요","profile.notifications.fillTelegram":"Telegram Chat ID를 입력하세요","profile.notifications.fillEmail":"알림 이메일을 입력하세요","profile.notifications.testSent":"테스트 알림이 전송되었습니다. 알림 채널을 확인하세요"},f=(0,e.A)((0,e.A)({},p),y)}}]); \ No newline at end of file diff --git a/frontend/dist/js/lang-th-TH.2763f536.js b/frontend/dist/js/lang-th-TH-legacy.a6ad07e2.js similarity index 99% rename from frontend/dist/js/lang-th-TH.2763f536.js rename to frontend/dist/js/lang-th-TH-legacy.a6ad07e2.js index 50c02cd..a185739 100644 --- a/frontend/dist/js/lang-th-TH.2763f536.js +++ b/frontend/dist/js/lang-th-TH-legacy.a6ad07e2.js @@ -1 +1 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[301],{21462:function(a,t,i){i.d(t,{default:function(){return f}});var e=i(57888),s={items_per_page:"/ หน้า",jump_to:"ไปยัง",jump_to_confirm:"ยืนยัน",page:"",prev_page:"หน้าก่อนหน้า",next_page:"หน้าถัดไป",prev_5:"ย้อนกลับ 5 หน้า",next_5:"ถัดไป 5 หน้า",prev_3:"ย้อนกลับ 3 หน้า",next_3:"ถัดไป 3 หน้า"},o=i(85505),r={today:"วันนี้",now:"ตอนนี้",backToToday:"กลับไปยังวันนี้",ok:"ตกลง",clear:"ลบล้าง",month:"เดือน",year:"ปี",timeSelect:"เลือกเวลา",dateSelect:"เลือกวัน",monthSelect:"เลือกเดือน",yearSelect:"เลือกปี",decadeSelect:"เลือกทศวรรษ",yearFormat:"YYYY",dateFormat:"D/M/YYYY",dayFormat:"D",dateTimeFormat:"D/M/YYYY HH:mm:ss",monthBeforeYear:!0,previousMonth:"เดือนก่อนหน้า (PageUp)",nextMonth:"เดือนถัดไป (PageDown)",previousYear:"ปีก่อนหน้า (Control + left)",nextYear:"ปีถัดไป (Control + right)",previousDecade:"ทศวรรษก่อนหน้า",nextDecade:"ทศวรรษถัดไป",previousCentury:"ศตวรรษก่อนหน้า",nextCentury:"ศตวรรษถัดไป"},n={placeholder:"เลือกเวลา"},d=n,l={lang:(0,o.A)({placeholder:"เลือกวันที่",rangePlaceholder:["วันเริ่มต้น","วันสิ้นสุด"]},r),timePickerLocale:(0,o.A)({},d)},c=l,g=c,b={locale:"th",Pagination:s,DatePicker:c,TimePicker:d,Calendar:g,global:{placeholder:"กรุณาเลือก"},Table:{filterTitle:"ตัวกรอง",filterConfirm:"ยืนยัน",filterReset:"รีเซ็ต",selectAll:"เลือกทั้งหมดในหน้านี้",selectInvert:"เลือกสถานะตรงกันข้าม",sortTitle:"เรียง",expand:"แสดงแถวข้อมูล",collapse:"ย่อแถวข้อมูล"},Modal:{okText:"ตกลง",cancelText:"ยกเลิก",justOkText:"ตกลง"},Popconfirm:{okText:"ตกลง",cancelText:"ยกเลิก"},Transfer:{titles:["",""],searchPlaceholder:"ค้นหา",itemUnit:"ชิ้น",itemsUnit:"ชิ้น"},Upload:{uploading:"กำลังอัปโหลด...",removeFile:"ลบไฟล์",uploadError:"เกิดข้อผิดพลาดในการอัปโหลด",previewFile:"ดูตัวอย่างไฟล์",downloadFile:"ดาวน์โหลดไฟล์"},Empty:{description:"ไม่มีข้อมูล"},Icon:{icon:"ไอคอน"},Text:{edit:"แก้ไข",copy:"คัดลอก",copied:"คัดลอกแล้ว",expand:"ขยาย"},PageHeader:{back:"ย้อนกลับ"}},m=b,h=i(55802),u=i.n(h),p={antLocale:m,momentName:"th",momentLocale:u()},y={submit:"ส่ง",save:"บันทึก","submit.ok":"ส่งสำเร็จ","save.ok":"บันทึกเรียบร้อยแล้ว","menu.welcome":"ยินดีต้อนรับ","menu.home":"หน้าแรก","menu.dashboard":"แดชบอร์ด","menu.dashboard.indicator":"การวิเคราะห์ตัวบ่งชี้","menu.dashboard.community":"ชุมชนตัวบ่งชี้","menu.dashboard.analysis":"การวิเคราะห์เอไอ","menu.dashboard.tradingAssistant":"ผู้ช่วยการซื้อขาย","menu.dashboard.aiTradingAssistant":"ผู้ช่วยการซื้อขาย AI","menu.dashboard.signalRobot":"หุ่นยนต์สัญญาณ","menu.dashboard.monitor":"หน้าติดตาม","menu.dashboard.workplace":"โต๊ะทำงาน","menu.form":"หน้าแบบฟอร์ม","menu.form.basic-form":"แบบฟอร์มพื้นฐาน","menu.form.step-form":"แบบฟอร์มทีละขั้นตอน","menu.form.step-form.info":"แบบฟอร์มทีละขั้นตอน (กรอกข้อมูลการโอน)","menu.form.step-form.confirm":"แบบฟอร์มทีละขั้นตอน (ยืนยันข้อมูลการโอน)","menu.form.step-form.result":"แบบฟอร์มทีละขั้นตอน (สมบูรณ์)","menu.form.advanced-form":"แบบฟอร์มขั้นสูง","menu.list":"หน้ารายการ","menu.list.table-list":"แบบฟอร์มสอบถาม","menu.list.basic-list":"รายการมาตรฐาน","menu.list.card-list":"รายการการ์ด","menu.list.search-list":"รายการค้นหา","menu.list.search-list.articles":"รายการค้นหา (บทความ)","menu.list.search-list.projects":"รายการค้นหา (โครงการ)","menu.list.search-list.applications":"รายการค้นหา (แอป)","menu.profile":"หน้ารายละเอียด","menu.profile.basic":"หน้ารายละเอียดเบื้องต้น","menu.profile.advanced":"หน้ารายละเอียดขั้นสูง","menu.result":"หน้าผลลัพธ์","menu.result.success":"หน้าความสำเร็จ","menu.result.fail":"หน้าความล้มเหลว","menu.exception":"หน้าข้อยกเว้น","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"ข้อผิดพลาดของทริกเกอร์","menu.account":"หน้าส่วนตัว","menu.account.center":"ศูนย์ส่วนบุคคล","menu.account.settings":"การตั้งค่าส่วนบุคคล","menu.account.trigger":"ข้อผิดพลาดของทริกเกอร์","menu.account.logout":"ออกจากระบบ","menu.wallet":"กระเป๋าเงินของฉัน","menu.docs":"ศูนย์เอกสาร","menu.docs.detail":"รายละเอียดเอกสาร","menu.header.refreshPage":"รีเฟรชหน้า","menu.invite.friends":"ชวนเพื่อน","app.setting.pagestyle":"การตั้งค่าสไตล์โดยรวม","app.setting.pagestyle.light":"เมนูสไตล์สดใส","app.setting.pagestyle.dark":"สไตล์เมนูสีเข้ม","app.setting.pagestyle.realdark":"โหมดมืด","app.setting.themecolor":"สีของธีม","app.setting.navigationmode":"โหมดการนำทาง","app.setting.sidemenu.nav":"การนำทางแถบด้านข้าง","app.setting.topmenu.nav":"การนำทางแถบด้านบน","app.setting.content-width":"ความกว้างของพื้นที่เนื้อหา","app.setting.content-width.tooltip":"การตั้งค่านี้จะมีผลเฉพาะเมื่อ [การนำทางแถบด้านบน]","app.setting.content-width.fixed":"ที่ตายตัว","app.setting.content-width.fluid":"สตรีมมิ่ง","app.setting.fixedheader":"ส่วนหัวคงที่","app.setting.fixedheader.tooltip":"กำหนดค่าได้เมื่อแก้ไขส่วนหัว","app.setting.autoHideHeader":"ซ่อนส่วนหัวเมื่อเลื่อน","app.setting.fixedsidebar":"เมนูด้านข้างคงที่","app.setting.sidemenu":"เค้าโครงเมนูด้านข้าง","app.setting.topmenu":"เค้าโครงเมนูด้านบน","app.setting.othersettings":"การตั้งค่าอื่นๆ","app.setting.weakmode":"โหมดความอ่อนแอของสี","app.setting.multitab":"โหมดหลายแท็บ","app.setting.copy":"การตั้งค่าการทำสำเนา","app.setting.loading":"กำลังโหลดธีม","app.setting.copyinfo":"คัดลอกการตั้งค่าสำเร็จ src/config/defaultSettings.js","app.setting.copy.success":"คัดลอกเสร็จแล้ว","app.setting.copy.fail":"การคัดลอกล้มเหลว","app.setting.theme.switching":"เปลี่ยนธีม!","app.setting.production.hint":"แถบการกำหนดค่าใช้สำหรับการดูตัวอย่างในสภาพแวดล้อมการพัฒนาเท่านั้น และจะไม่แสดงในสภาพแวดล้อมการใช้งานจริง โปรดคัดลอกและแก้ไขไฟล์การกำหนดค่าด้วยตนเอง","app.setting.themecolor.daybreak":"รุ่งอรุณสีฟ้า (ค่าเริ่มต้น)","app.setting.themecolor.dust":"พลบค่ำ","app.setting.themecolor.volcano":"ภูเขาไฟ","app.setting.themecolor.sunset":"พระอาทิตย์ตก","app.setting.themecolor.cyan":"หมิงชิง","app.setting.themecolor.green":"ออโรร่าสีเขียว","app.setting.themecolor.geekblue":"เกินบรรยายสีฟ้า","app.setting.themecolor.purple":"เจียงซี","app.setting.tooltip":"การตั้งค่าหน้า","user.login.userName":"ชื่อผู้ใช้","user.login.password":"รหัสผ่าน","user.login.username.placeholder":"บัญชี: ผู้ดูแลระบบ","user.login.password.placeholder":"รหัสผ่าน: admin หรือ ant.design","user.login.message-invalid-credentials":"การเข้าสู่ระบบล้มเหลว โปรดตรวจสอบอีเมลและรหัสยืนยันของคุณ","user.login.message-invalid-verification-code":"รหัสยืนยันผิดพลาด","user.login.tab-login-credentials":"เข้าสู่ระบบรหัสผ่านบัญชี","user.login.tab-login-email":"เข้าสู่ระบบอีเมล","user.login.tab-login-mobile":"เข้าสู่ระบบหมายเลขโทรศัพท์มือถือ","user.login.captcha.placeholder":"กรุณากรอกรหัสยืนยันกราฟิก","user.login.mobile.placeholder":"หมายเลขโทรศัพท์","user.login.mobile.verification-code.placeholder":"รหัสยืนยัน","user.login.email.placeholder":"กรุณากรอกที่อยู่อีเมลของคุณ","user.login.email.verification-code.placeholder":"กรุณากรอกรหัสยืนยัน","user.login.email.sending":"กำลังส่งรหัสยืนยัน...","user.login.email.send-success-title":"คำใบ้","user.login.email.send-success":"ส่งรหัสยืนยันสำเร็จแล้ว โปรดตรวจสอบอีเมลของคุณ","user.login.sms.send-success":"ส่งรหัสยืนยันสำเร็จแล้ว โปรดตรวจสอบข้อความ","user.login.remember-me":"เข้าสู่ระบบอัตโนมัติ","user.login.forgot-password":"ลืมรหัสผ่าน","user.login.sign-in-with":"วิธีการเข้าสู่ระบบอื่น ๆ","user.login.signup":"ลงทะเบียนบัญชี","user.login.login":"เข้าสู่ระบบ","user.register.register":"ลงทะเบียน","user.register.email.placeholder":"จดหมาย","user.register.password.placeholder":"กรุณากรอกอย่างน้อย 6 ตัวอักษร กรุณาอย่าใช้รหัสผ่านที่คาดเดาได้ง่าย","user.register.password.popover-message":"กรุณากรอกอย่างน้อย 6 ตัวอักษร กรุณาอย่าใช้รหัสผ่านที่คาดเดาได้ง่าย","user.register.confirm-password.placeholder":"ยืนยันรหัสผ่าน","user.register.get-verification-code":"รับรหัสยืนยัน","user.register.sign-in":"เข้าสู่ระบบโดยใช้บัญชีที่มีอยู่","user.register-result.msg":"บัญชีของคุณ: {email} การลงทะเบียนสำเร็จ","user.register-result.activation-email":"อีเมลเปิดใช้งานได้ถูกส่งไปยังกล่องจดหมายของคุณแล้ว และมีอายุ 24 ชั่วโมง โปรดเข้าสู่ระบบอีเมลของคุณทันทีและคลิกลิงก์ในอีเมลเพื่อเปิดใช้งานบัญชีของคุณ","user.register-result.back-home":"กลับไปที่หน้าแรก","user.register-result.view-mailbox":"ตรวจสอบกล่องจดหมายของคุณ","user.email.required":"กรุณากรอกที่อยู่อีเมลของคุณ!","user.email.wrong-format":"รูปแบบที่อยู่อีเมลไม่ถูกต้อง!","user.userName.required":"กรุณากรอกชื่อบัญชีหรือที่อยู่อีเมลของคุณ","user.password.required":"กรุณากรอกรหัสผ่านของคุณ!","user.password.twice.msg":"รหัสผ่านที่ป้อนสองครั้งไม่ตรงกัน!","user.password.strength.msg":"รหัสผ่านไม่แข็งแกร่งพอ","user.password.strength.strong":"ความแข็งแกร่ง: แข็งแกร่ง","user.password.strength.medium":"ความแข็งแกร่ง: ปานกลาง","user.password.strength.low":"ความแรง: ต่ำ","user.password.strength.short":"ความแรง: สั้นเกินไป","user.confirm-password.required":"กรุณายืนยันรหัสผ่านของคุณ!","user.phone-number.required":"กรุณากรอกหมายเลขโทรศัพท์มือถือที่ถูกต้อง","user.phone-number.wrong-format":"รูปแบบหมายเลขโทรศัพท์มือถือผิด!","user.verification-code.required":"กรุณากรอกรหัสยืนยัน!","user.captcha.required":"กรุณากรอกรหัสยืนยันกราฟิก!","user.login.infos":"QuantDinger เป็นเครื่องมือเสริมการวิเคราะห์หุ้นแบบหลายตัวแทนด้วย AI และไม่มีคุณสมบัติในการให้คำปรึกษาด้านการลงทุนในหลักทรัพย์ผลการวิเคราะห์ คะแนน และความคิดเห็นอ้างอิงทั้งหมดในแพลตฟอร์มถูกสร้างขึ้นโดยอัตโนมัติโดย AI ตามข้อมูลในอดีต และใช้เพื่อการเรียนรู้ การวิจัย และการแลกเปลี่ยนทางเทคนิคเท่านั้น และไม่ถือเป็นคำแนะนำในการลงทุนหรือพื้นฐานการตัดสินใจใดๆการลงทุนในหุ้นเกี่ยวข้องกับความเสี่ยงต่างๆ เช่น ความเสี่ยงด้านตลาด ความเสี่ยงด้านสภาพคล่อง ความเสี่ยงด้านนโยบาย ฯลฯ ซึ่งอาจนำไปสู่การสูญเสียเงินต้นได้ผู้ใช้ควรตัดสินใจอย่างอิสระโดยพิจารณาจากการยอมรับความเสี่ยงของตนเอง และพฤติกรรมการลงทุนและผลที่ตามมาที่เกิดจากการใช้เครื่องมือนี้จะต้องตกเป็นภาระของผู้ใช้ตลาดมีความเสี่ยงและการลงทุนต้องระมัดระวัง","user.login.tab-login-web3":"เข้าสู่ระบบ Web3","user.login.web3.tip":"เข้าสู่ระบบโดยใช้กระเป๋าเงิน","user.login.web3.connect":"เชื่อมต่อกระเป๋าเงินและเข้าสู่ระบบ","user.login.web3.no-wallet":"ตรวจไม่พบกระเป๋าเงิน","user.login.web3.no-address":"ไม่ได้รับที่อยู่กระเป๋าเงิน","user.login.web3.nonce-failed":"ไม่สามารถรับหมายเลขสุ่มได้","user.login.web3.verify-failed":"การตรวจสอบลายเซ็นล้มเหลว","user.login.web3.success":"เข้าสู่ระบบสำเร็จ","user.login.web3.failed":"การเข้าสู่ระบบ Wallet ล้มเหลว","nav.no_wallet":"ตรวจไม่พบกระเป๋าเงิน","nav.copy":"สำเนา","nav.copy_success":"คัดลอกเรียบร้อยแล้ว","user.login.oauth.google":"ลงชื่อเข้าใช้งานด้วย Google","user.login.oauth.github":"ลงชื่อเข้าใช้ด้วย GitHub","user.login.oauth.loading":"กำลังเปลี่ยนเส้นทางไปยังหน้าการอนุญาต...","user.login.oauth.failed":"การเข้าสู่ระบบ OAuth ล้มเหลว","user.login.oauth.get-url-failed":"ไม่สามารถรับลิงก์การอนุญาตได้","user.login.subtitle":"ขับเคลื่อนข้อมูลเชิงลึกเชิงปริมาณสู่ตลาดโลก","user.login.legal.title":"ข้อสงวนสิทธิ์ทางกฎหมาย","user.login.legal.view":"ดูข้อจำกัดความรับผิดชอบทางกฎหมาย","user.login.legal.collapse":"ยุบข้อจำกัดความรับผิดชอบทางกฎหมาย","user.login.legal.agree":"ฉันได้อ่านและยอมรับข้อจำกัดความรับผิดชอบทางกฎหมาย","user.login.legal.required":"โปรดอ่านและตรวจสอบข้อจำกัดความรับผิดชอบทางกฎหมายก่อน","user.login.legal.content":"QuantDinger เป็นเครื่องมือเสริมการวิเคราะห์หุ้นแบบหลายตัวแทนด้วย AI และไม่มีคุณสมบัติในการให้คำปรึกษาด้านการลงทุนในหลักทรัพย์ผลการวิเคราะห์ การให้คะแนน และความคิดเห็นอ้างอิงทั้งหมดในแพลตฟอร์มถูกสร้างขึ้นโดยอัตโนมัติโดย AI ตามข้อมูลในอดีต และใช้สำหรับการเรียนรู้ การวิจัย และการแลกเปลี่ยนทางเทคนิคเท่านั้น และไม่ถือเป็นคำแนะนำในการลงทุนหรือพื้นฐานการตัดสินใจใดๆการลงทุนในหุ้นเกี่ยวข้องกับความเสี่ยงต่างๆ เช่น ความเสี่ยงด้านตลาด ความเสี่ยงด้านสภาพคล่อง ความเสี่ยงด้านนโยบาย ฯลฯ ซึ่งอาจนำไปสู่การสูญเสียเงินต้นได้ผู้ใช้ควรตัดสินใจอย่างอิสระโดยพิจารณาจากการยอมรับความเสี่ยงของตนเอง และพฤติกรรมการลงทุนและผลที่ตามมาที่เกิดจากการใช้เครื่องมือนี้จะต้องตกเป็นภาระของผู้ใช้ตลาดมีความเสี่ยงและการลงทุนต้องระมัดระวัง","user.login.privacy.title":"นโยบายความเป็นส่วนตัวของผู้ใช้","user.login.privacy.view":"ดูนโยบายความเป็นส่วนตัวของผู้ใช้","user.login.privacy.collapse":"ปิดข้อกำหนดความเป็นส่วนตัวของผู้ใช้","user.login.privacy.content":"เราให้ความสำคัญกับความเป็นส่วนตัวและการปกป้องข้อมูลของคุณ 1) ขอบเขตของการรวบรวม: เฉพาะข้อมูลที่จำเป็นในการใช้งานฟังก์ชัน (เช่น อีเมล หมายเลขโทรศัพท์มือถือ รหัสพื้นที่ ที่อยู่กระเป๋าสตางค์ของ Web3) และบันทึกและข้อมูลอุปกรณ์ที่จำเป็นเท่านั้นที่จะถูกรวบรวม 2) วัตถุประสงค์การใช้งาน: สำหรับการเข้าสู่ระบบบัญชีและการตรวจสอบความปลอดภัยการให้บริการฟังก์ชั่น การแก้ไขปัญหาและข้อกำหนดการปฏิบัติตาม 3) การจัดเก็บและความปลอดภัย: ข้อมูลได้รับการเข้ารหัสและจัดเก็บและมีการใช้สิทธิ์ที่จำเป็นและมาตรการควบคุมการเข้าถึงเพื่อป้องกันการเข้าถึง การเปิดเผย หรือการสูญหายโดยไม่ได้รับอนุญาต 4) การแบ่งปันกับบุคคลที่สาม: เว้นแต่กฎหมายและข้อบังคับกำหนดไว้หรือจำเป็นในการให้บริการ ข้อมูลส่วนบุคคลของคุณจะไม่ถูกแบ่งปันกับบุคคลที่สามหากเกี่ยวข้องกับบริการของบุคคลที่สาม (เช่น กระเป๋าเงิน ผู้ให้บริการ SMS) จะถูกประมวลผลในขอบเขตขั้นต่ำที่จำเป็นเพื่อใช้งานฟังก์ชันนี้เท่านั้น 5) คุกกี้/ที่เก็บข้อมูลในเครื่อง: ใช้สำหรับสถานะการเข้าสู่ระบบและการบำรุงรักษาเซสชันที่จำเป็น (เช่น โทเค็น PHPSESSID) คุณสามารถล้างหรือจำกัดได้ในเบราว์เซอร์ 6) สิทธิ์ส่วนบุคคล: คุณสามารถใช้สิทธิ์ของคุณในการสอบถาม แก้ไข ลบ เพิกถอนความยินยอม ฯลฯ ตามกฎหมายและข้อบังคับ 7) การเปลี่ยนแปลงและประกาศ: เมื่อมีการอัปเดตข้อกำหนดเหล่านี้จะแสดงอย่างเด่นชัดบนหน้าเว็บการใช้บริการนี้ต่อไปจะถือว่าคุณได้อ่านและยอมรับเนื้อหาที่อัปเดตแล้วหากคุณไม่ยอมรับข้อกำหนดเหล่านี้หรือการปรับปรุงใด ๆ โปรดหยุดใช้บริการและติดต่อเรา","account.basicInfo":"ข้อมูลพื้นฐาน","account.id":"รหัสผู้ใช้","account.username":"ชื่อผู้ใช้","account.nickname":"ชื่อนิค","account.email":"จดหมาย","account.mobile":"หมายเลขโทรศัพท์","account.web3address":"ที่อยู่กระเป๋าเงิน","account.pid":"รหัสผู้อ้างอิง","account.level":"ระดับผู้ใช้","account.money":"สมดุล","account.qdtBalance":"ยอดคงเหลือ QDT","account.score":"บูรณาการ","account.createtime":"เวลาลงทะเบียน","account.inviteLink":"ลิงค์คำเชิญ","account.recharge":"เติมเงิน","account.rechargeTip":"โปรดใช้ WeChat หรือ Alipay เพื่อสแกนโค้ด QR ด้านล่างเพื่อเติมเงิน","account.qrCodePlaceholder":"ตัวยึดรหัส QR (การจำลอง)","account.rechargeAmount":"จำนวนการเติมเงิน","account.enterAmount":"กรุณากรอกจำนวนเงินที่เติม","account.rechargeHint":"จำนวนเงินฝากขั้นต่ำ: 1 QDT","account.confirmRecharge":"ยืนยันการเติมเงิน","account.enterValidAmount":"กรุณากรอกจำนวนเงินที่เติมให้ถูกต้อง","account.rechargeSuccess":"เติมเงินสำเร็จ!ฝากแล้ว {amount} QDT","account.settings.menuMap.basic":"การตั้งค่าพื้นฐาน","account.settings.menuMap.security":"การตั้งค่าความปลอดภัย","account.settings.menuMap.notification":"การแจ้งเตือนข้อความใหม่","account.settings.menuMap.moneyLog":"รายละเอียดกองทุน","account.moneyLog.empty":"ยังไม่มีรายละเอียดกองทุน","account.moneyLog.total":"รวม {total} บันทึก","account.moneyLog.type.purchase":"ตัวบ่งชี้การซื้อ","account.moneyLog.type.recharge":"เติมเงิน","account.moneyLog.type.refund":"คืนเงิน","account.moneyLog.type.reward":"รางวัล","account.moneyLog.type.income":"ตัวชี้วัดรายได้","account.moneyLog.type.commission":"ค่าธรรมเนียมการจัดการแพลตฟอร์ม","wallet.balance":"ยอดคงเหลือ QDT","wallet.recharge":"เติมเงิน","wallet.withdraw":"ถอนเงินสด","wallet.filter":"กรอง","wallet.reset":"รีเซ็ต","wallet.totalRecharge":"การเติมเงินสะสม","wallet.totalWithdraw":"การถอนเงินสะสม","wallet.totalIncome":"รายได้สะสม","wallet.records":"บันทึกการทำธุรกรรมและรายละเอียดกองทุน","wallet.tradingRecords":"ประวัติการทำธุรกรรม","wallet.moneyLog":"รายละเอียดกองทุน","wallet.rechargeTip":"โปรดใช้ WeChat หรือ Alipay เพื่อสแกนโค้ด QR ด้านล่างเพื่อเติมเงิน","wallet.qrCodePlaceholder":"ตัวยึดรหัส QR (การจำลอง)","wallet.rechargeAmount":"จำนวนการเติมเงิน","wallet.enterAmount":"กรุณากรอกจำนวนเงินที่เติม","wallet.rechargeHint":"จำนวนเงินฝากขั้นต่ำ: 1 QDT","wallet.confirmRecharge":"ยืนยันการเติมเงิน","wallet.enterValidAmount":"กรุณากรอกจำนวนเงินที่เติมให้ถูกต้อง","wallet.rechargeSuccess":"เติมเงินสำเร็จ!ฝากแล้ว {amount} QDT","wallet.rechargeFailed":"การเติมเงินล้มเหลว","wallet.withdrawTip":"กรุณากรอกจำนวนเงินที่ถอนและที่อยู่การถอน","wallet.withdrawAmount":"ถอนจำนวนเงิน","wallet.enterWithdrawAmount":"กรุณากรอกจำนวนเงินที่ถอน","wallet.withdrawHint":"จำนวนถอนขั้นต่ำ: 1 QDT","wallet.withdrawAddress":"ที่อยู่การถอนเงิน (ไม่บังคับ)","wallet.enterWithdrawAddress":"กรุณากรอกที่อยู่การถอนเงิน","wallet.confirmWithdraw":"ยืนยันการถอนเงิน","wallet.enterValidWithdrawAmount":"กรุณากรอกจำนวนเงินที่ถอนให้ถูกต้อง","wallet.insufficientBalance":"ยอดคงเหลือไม่เพียงพอ","wallet.withdrawSuccess":"การถอนเงินสำเร็จ!ถอนออก {amount} QDT","wallet.withdrawFailed":"การถอนเงินล้มเหลว","wallet.noTradingRecords":"ยังไม่มีบันทึกการทำธุรกรรม","wallet.noMoneyLog":"ยังไม่มีรายละเอียดกองทุน","wallet.loadTradingRecordsFailed":"โหลดบันทึกธุรกรรมไม่สำเร็จ","wallet.loadMoneyLogFailed":"โหลดรายละเอียดกองทุนไม่สำเร็จ","wallet.moneyLogTotal":"รวม {total} บันทึก","wallet.moneyLogTypeTitle":"พิมพ์","wallet.moneyLogType.all":"ทุกประเภท","wallet.table.time":"เวลา","wallet.table.type":"พิมพ์","wallet.table.price":"ราคา","wallet.table.amount":"ปริมาณ","wallet.table.money":"จำนวน","wallet.table.balance":"สมดุล","wallet.table.memo":"หมายเหตุ","wallet.table.value":"ค่า","wallet.table.profit":"กำไรและขาดทุน","wallet.table.commission":"ค่าธรรมเนียมการจัดการ","wallet.table.total":"รวม {total} บันทึก","wallet.tradeType.buy":"ซื้อ","wallet.tradeType.sell":"ขาย","wallet.tradeType.liquidation":"บังคับให้เลิกกิจการ","wallet.tradeType.openLong":"เปิดยาวๆ","wallet.tradeType.addLong":"กาดอต","wallet.tradeType.closeLong":"ปินตัว","wallet.tradeType.closeLongStop":"หยุดขาดทุนและยาว","wallet.tradeType.closeLongProfit":"ขายทำกำไรและระดับมากขึ้น","wallet.tradeType.openShort":"เปิดสั้น","wallet.tradeType.addShort":"เพิ่มสั้น","wallet.tradeType.closeShort":"ว่างเปล่า","wallet.tradeType.closeShortStop":"หยุดการสูญเสีย","wallet.tradeType.closeShortProfit":"ขายทำกำไรและปิดการขาย","wallet.moneyLogType.purchase":"ตัวบ่งชี้การซื้อ","wallet.moneyLogType.recharge":"เติมเงิน","wallet.moneyLogType.withdraw":"ถอนเงินสด","wallet.moneyLogType.refund":"คืนเงิน","wallet.moneyLogType.reward":"รางวัล","wallet.moneyLogType.income":"รายได้","wallet.moneyLogType.commission":"ค่าธรรมเนียมการจัดการ","wallet.web3Address.required":"กรุณากรอกที่อยู่กระเป๋าเงิน Web3 ก่อน","wallet.web3Address.requiredDescription":"ก่อนที่จะเติมเงิน คุณต้องผูกที่อยู่กระเป๋าเงิน Web3 ของคุณเพื่อรับการเติมเงิน","wallet.web3Address.placeholder":"โปรดป้อนที่อยู่กระเป๋าเงิน Web3 ของคุณ (เริ่มต้นด้วย 0x)","wallet.web3Address.save":"บันทึกที่อยู่กระเป๋าเงิน","wallet.web3Address.saveSuccess":"บันทึกที่อยู่ Wallet เรียบร้อยแล้ว","wallet.web3Address.saveFailed":"ไม่สามารถบันทึกที่อยู่กระเป๋าสตางค์ได้","wallet.web3Address.invalidFormat":"โปรดป้อนที่อยู่กระเป๋าเงิน Web3 ที่ถูกต้อง (รูปแบบ Ethereum: 42 ตัวอักษรเริ่มต้นด้วย 0x หรือรูปแบบ TRC20: 34 ตัวอักษรเริ่มต้นด้วย T)","wallet.selectCoin":"เลือกสกุลเงิน","wallet.selectChain":"ห่วงโซ่การคัดเลือก","wallet.chain.eth":"ผลประโยชน์ทับซ้อน (ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"บีเอสซี","wallet.targetQdtAmount":"จำนวน QDT ที่คุณต้องการแลก (ไม่บังคับ)","wallet.targetQdtAmount.placeholder":"กรุณากรอกจำนวน QDT ที่คุณต้องการแลกเปลี่ยน ราคา QDT ปัจจุบันคือ: {price} USDT","wallet.targetQdtAmount.requiredUsdt":"ต้องเติมเงิน: {amount} USDT","wallet.rechargeAddress":"ที่อยู่เติมเงิน","wallet.copyAddress":"สำเนา","wallet.copySuccess":"คัดลอกสำเร็จ!","wallet.copyFailed":"การคัดลอกล้มเหลว โปรดคัดลอกด้วยตนเอง","wallet.rechargeAddressHint":"โปรดตรวจสอบให้แน่ใจว่าได้ใช้เครือข่าย {chain} เพื่อฝาก {coin} ไปยังที่อยู่นี้","wallet.qdtPrice.loading":"กำลังโหลด...","wallet.rechargeTip.new":"โปรดเลือกสกุลเงินและห่วงโซ่ จากนั้นสแกนโค้ด QR ด้านล่างเพื่อเติมเงิน","wallet.exchangeRate":"1 คิวดีที กลับไปยัง {rate} ดอลลาร์สหรัฐ","wallet.withdrawableAmount":"จำนวนเงินสดที่มีอยู่","wallet.totalBalance":"ยอดรวม","wallet.insufficientWithdrawable":"จำนวนเงินสดที่สามารถถอนออกได้ไม่เพียงพอ เงินสดที่มีอยู่ในปัจจุบันคือ: {amount} QDT","wallet.withdrawAddressRequired":"กรุณากรอกที่อยู่การถอนเงิน","wallet.withdrawAddressHint":"โปรดตรวจสอบให้แน่ใจว่าที่อยู่ถูกต้อง หลังจากถอนแล้วไม่สามารถเพิกถอนได้","wallet.withdrawSubmitSuccess":"ส่งใบสมัครถอนเรียบร้อยแล้ว โปรดรอการตรวจสอบ","menu.footer.contactUs":"ติดต่อเรา","menu.footer.getSupport":"รับการสนับสนุน","menu.footer.socialAccounts":"บัญชีโซเชียล","menu.footer.userAgreement":"ข้อตกลงผู้ใช้","menu.footer.privacyPolicy":"นโยบายความเป็นส่วนตัว","menu.footer.support":"สนับสนุน","menu.footer.featureRequest":"คำขอคุณสมบัติ","menu.footer.email":"อีเมล","menu.footer.liveChat":"แชทสดทุกวันตลอด 24 ชั่วโมง","dashboard.analysis.title":"การวิเคราะห์หลายมิติ","dashboard.analysis.subtitle":"แพลตฟอร์มการวิเคราะห์ทางการเงินที่ครอบคลุมที่ขับเคลื่อนด้วย AI","dashboard.analysis.selectSymbol":"เลือกหรือป้อนรหัสพื้นฐาน","dashboard.analysis.selectModel":"เลือกรุ่น","dashboard.analysis.startAnalysis":"เริ่มการวิเคราะห์","dashboard.analysis.history":"ประวัติศาสตร์","dashboard.analysis.tab.overview":"การวิเคราะห์ที่ครอบคลุม","dashboard.analysis.tab.fundamental":"ความรู้พื้นฐาน","dashboard.analysis.tab.technical":"เทคโนโลยี","dashboard.analysis.tab.news":"ข่าว","dashboard.analysis.tab.sentiment":"อารมณ์","dashboard.analysis.tab.risk":"เสี่ยง","dashboard.analysis.tab.debate":"การอภิปรายระยะสั้นยาว","dashboard.analysis.tab.decision":"การตัดสินใจขั้นสุดท้าย","dashboard.analysis.empty.selectSymbol":"เลือกเป้าหมายเพื่อเริ่มการวิเคราะห์","dashboard.analysis.empty.selectSymbolDesc":"เลือกจากรายการหุ้นที่เลือกเองหรือป้อนรหัสที่เกี่ยวข้องเพื่อรับรายงานการวิเคราะห์ AI หลายมิติ","dashboard.analysis.empty.startAnalysis":'คลิกปุ่ม "เริ่มการวิเคราะห์" เพื่อทำการวิเคราะห์หลายมิติ',"dashboard.analysis.empty.startAnalysisDesc":"เราจะให้การวิเคราะห์ที่ครอบคลุมจากหลายมิติ เช่น ปัจจัยพื้นฐาน เทคโนโลยี ข่าวสาร ความรู้สึก และความเสี่ยง","dashboard.analysis.empty.noData":"ขณะนี้ไม่มีข้อมูลการวิเคราะห์ {type} โปรดดำเนินการวิเคราะห์ที่ครอบคลุมก่อน","dashboard.analysis.empty.noWatchlist":"ขณะนี้ไม่มีหุ้นที่เลือกเอง","dashboard.analysis.empty.noHistory":"ยังไม่มีประวัติ","dashboard.analysis.empty.watchlistHint":"ขณะนี้ไม่มีหุ้นที่เลือกเองกรุณาก่อน","dashboard.analysis.empty.noDebateData":"ยังไม่มีข้อมูลการอภิปราย","dashboard.analysis.empty.noDecisionData":"ยังไม่มีข้อมูลการตัดสินใจ","dashboard.analysis.empty.selectAgent":"โปรดเลือกตัวแทนเพื่อดูผลการวิเคราะห์","dashboard.analysis.loading.analyzing":"กำลังวิเคราะห์ กรุณารอสักครู่...","dashboard.analysis.loading.fundamental":"กำลังวิเคราะห์ข้อมูลพื้นฐาน...","dashboard.analysis.loading.technical":"กำลังวิเคราะห์ตัวชี้วัดทางเทคนิค...","dashboard.analysis.loading.news":"กำลังวิเคราะห์ข้อมูลข่าว...","dashboard.analysis.loading.sentiment":"วิเคราะห์อารมณ์ตลาด...","dashboard.analysis.loading.risk":"กำลังประเมินความเสี่ยง...","dashboard.analysis.loading.debate":"การอภิปรายระยะสั้นระยะสั้นกำลังดำเนินอยู่...","dashboard.analysis.loading.decision":"กำลังสร้างการตัดสินใจขั้นสุดท้าย...","dashboard.analysis.score.overall":"คะแนนโดยรวม","dashboard.analysis.score.recommendation":"คำแนะนำการลงทุน","dashboard.analysis.score.confidence":"ความมั่นใจ","dashboard.analysis.dimension.fundamental":"ความรู้พื้นฐาน","dashboard.analysis.dimension.technical":"เทคโนโลยี","dashboard.analysis.dimension.news":"ข่าว","dashboard.analysis.dimension.sentiment":"อารมณ์","dashboard.analysis.dimension.risk":"เสี่ยง","dashboard.analysis.card.dimensionScores":"การให้คะแนนสำหรับแต่ละมิติ","dashboard.analysis.card.overviewReport":"รายงานการวิเคราะห์ที่ครอบคลุม","dashboard.analysis.card.financialMetrics":"ตัวชี้วัดทางการเงิน","dashboard.analysis.card.fundamentalReport":"รายงานการวิเคราะห์ปัจจัยพื้นฐาน","dashboard.analysis.card.technicalIndicators":"ตัวชี้วัดทางเทคนิค","dashboard.analysis.card.technicalReport":"รายงานการวิเคราะห์ทางเทคนิค","dashboard.analysis.card.newsList":"ข่าวที่เกี่ยวข้อง","dashboard.analysis.card.newsReport":"รายงานการวิเคราะห์ข่าว","dashboard.analysis.card.sentimentIndicators":"ตัวบ่งชี้ความรู้สึก","dashboard.analysis.card.sentimentReport":"รายงานการวิเคราะห์ความรู้สึก","dashboard.analysis.card.riskMetrics":"ตัวชี้วัดความเสี่ยง","dashboard.analysis.card.riskReport":"รายงานการประเมินความเสี่ยง","dashboard.analysis.card.bullView":"มุมมองรั้น (กระทิง)","dashboard.analysis.card.bearView":"มุมมองหยาบคาย (หมี)","dashboard.analysis.card.researchConclusion":"ข้อสรุปของผู้วิจัย","dashboard.analysis.card.traderPlan":"แผนผู้ค้า","dashboard.analysis.card.riskDebate":"การอภิปรายคณะกรรมการความเสี่ยง","dashboard.analysis.card.finalDecision":"การตัดสินใจครั้งสุดท้าย","dashboard.analysis.card.tradePlanDetail":"รายละเอียดแผนการเทรด","dashboard.analysis.tradingPlan.entry_price":"ราคาค่าเข้าชม","dashboard.analysis.tradingPlan.position_size":"ขนาดตำแหน่ง","dashboard.analysis.tradingPlan.stop_loss":"หยุดการสูญเสีย","dashboard.analysis.tradingPlan.take_profit":"ขายทำกำไร","dashboard.analysis.label.confidence":"ความมั่นใจ","dashboard.analysis.label.keyPoints":"จุดหลัก","dashboard.analysis.label.riskWarning":"คำเตือนความเสี่ยง","dashboard.analysis.risk.risky":"เสี่ยง","dashboard.analysis.risk.neutral":"มุมมองที่เป็นกลาง (เป็นกลาง)","dashboard.analysis.risk.safe":"มุมมองแบบอนุรักษ์นิยม (ปลอดภัย)","dashboard.analysis.risk.conclusion":"สรุปแล้ว","dashboard.analysis.feature.fundamental":"การวิเคราะห์พื้นฐาน","dashboard.analysis.feature.technical":"การวิเคราะห์ทางเทคนิค","dashboard.analysis.feature.news":"การวิเคราะห์ข่าว","dashboard.analysis.feature.sentiment":"การวิเคราะห์ความรู้สึก","dashboard.analysis.feature.risk":"การประเมินความเสี่ยง","dashboard.analysis.watchlist.title":"การเลือกหุ้นของฉัน","dashboard.analysis.watchlist.add":"เพิ่มไปที่","dashboard.analysis.watchlist.addStock":"เพิ่มสต็อก","dashboard.analysis.modal.addStock.title":"เพิ่มหุ้นเสริม","dashboard.analysis.modal.addStock.confirm":"แน่นอน","dashboard.analysis.modal.addStock.cancel":"ยกเลิก","dashboard.analysis.modal.addStock.market":"ประเภทตลาด","dashboard.analysis.modal.addStock.marketPlaceholder":"กรุณาเลือกตลาด","dashboard.analysis.modal.addStock.marketRequired":"กรุณาเลือกประเภทตลาด","dashboard.analysis.modal.addStock.symbol":"รหัสสต๊อกสินค้า","dashboard.analysis.modal.addStock.symbolPlaceholder":"ตัวอย่างเช่น: AAPL, TSLA, GOOGL, 000001, BTC","dashboard.analysis.modal.addStock.symbolRequired":"กรุณากรอกรหัสสต๊อกสินค้า","dashboard.analysis.modal.addStock.searchPlaceholder":"ค้นหารหัสหรือชื่อเป้าหมาย","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"ค้นหาหรือป้อนรหัสอ้างอิง (เช่น AAPL, BTC/USDT, EUR/USD)","dashboard.analysis.modal.addStock.searchOrInputHint":"รองรับการค้นหาวัตถุในฐานข้อมูลหรือป้อนรหัสโดยตรง (ระบบจะรับชื่อโดยอัตโนมัติ)","dashboard.analysis.modal.addStock.search":"ค้นหา","dashboard.analysis.modal.addStock.searchResults":"ผลการค้นหา","dashboard.analysis.modal.addStock.hotSymbols":"เป้าหมายยอดนิยม","dashboard.analysis.modal.addStock.noHotSymbols":"ยังไม่มีเป้าหมายยอดนิยม","dashboard.analysis.modal.addStock.selectedSymbol":"เลือกแล้ว","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"โปรดเลือกเป้าหมายก่อน","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"โปรดเลือกเป้าหมายหรือป้อนรหัสเป้าหมายก่อน","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"กรุณากรอกรหัสเป้าหมาย","dashboard.analysis.modal.addStock.pleaseSelectMarket":"โปรดเลือกประเภทตลาดก่อน","dashboard.analysis.modal.addStock.searchFailed":"การค้นหาล้มเหลว โปรดลองอีกครั้งในภายหลัง","dashboard.analysis.modal.addStock.noSearchResults":"ไม่พบเป้าหมายที่ตรงกัน","dashboard.analysis.modal.addStock.willAutoFetchName":"ระบบจะรับชื่อให้อัตโนมัติ","dashboard.analysis.modal.addStock.addDirectly":"เพิ่มโดยตรง","dashboard.analysis.modal.addStock.nameWillBeFetched":"ชื่อจะถูกหยิบขึ้นมาโดยอัตโนมัติเมื่อเพิ่ม","dashboard.analysis.market.USStock":"หุ้นสหรัฐ","dashboard.analysis.market.Crypto":"สกุลเงินดิจิทัล","dashboard.analysis.market.Forex":"ฟอเร็กซ์","dashboard.analysis.market.Futures":"ฟิวเจอร์ส","dashboard.analysis.modal.history.title":"บันทึกการวิเคราะห์ทางประวัติศาสตร์","dashboard.analysis.modal.history.viewResult":"ดูผลลัพธ์","dashboard.analysis.modal.history.completeTime":"เวลาเสร็จสิ้น","dashboard.analysis.modal.history.error":"ความผิดพลาด","dashboard.analysis.status.pending":"รอดำเนินการ","dashboard.analysis.status.processing":"กำลังประมวลผล","dashboard.analysis.status.completed":"สมบูรณ์","dashboard.analysis.status.failed":"ล้มเหลว","dashboard.analysis.message.selectSymbol":"โปรดเลือกเป้าหมายก่อน","dashboard.analysis.message.taskCreated":"งานการวิเคราะห์ได้ถูกสร้างขึ้นแล้วและกำลังดำเนินการอยู่เบื้องหลัง...","dashboard.analysis.message.analysisComplete":"การวิเคราะห์เสร็จสมบูรณ์","dashboard.analysis.message.analysisCompleteCache":"การวิเคราะห์เสร็จสมบูรณ์ (ใช้ข้อมูลที่แคชไว้)","dashboard.analysis.message.analysisFailed":"การวิเคราะห์ล้มเหลว โปรดลองอีกครั้งในภายหลัง","dashboard.analysis.message.addStockSuccess":"เพิ่มเรียบร้อยแล้ว","dashboard.analysis.message.addStockFailed":"เพิ่มล้มเหลว","dashboard.analysis.message.removeStockSuccess":"ลบสำเร็จแล้ว","dashboard.analysis.message.removeStockFailed":"การลบล้มเหลว","dashboard.analysis.message.resumingAnalysis":"กำลังดำเนินการงานวิเคราะห์ต่อ...","dashboard.analysis.message.deleteSuccess":"ลบสำเร็จแล้ว","dashboard.analysis.message.deleteFailed":"การลบล้มเหลว","dashboard.analysis.modal.history.delete":"ลบ","dashboard.analysis.modal.history.deleteConfirm":"คุณแน่ใจหรือไม่ว่าต้องการลบบันทึกการวิเคราะห์นี้?","dashboard.analysis.test":"ร้านค้าเลขที่ {no} ถนน Gongzhan","dashboard.analysis.introduce":"คำอธิบายตัวบ่งชี้","dashboard.analysis.total-sales":"ยอดขายรวม","dashboard.analysis.day-sales":"ยอดขายเฉลี่ยต่อวัน¥","dashboard.analysis.visits":"การเข้าชม","dashboard.analysis.visits-trend":"แนวโน้มการเข้าชม","dashboard.analysis.visits-ranking":"อันดับการเข้าชมร้านค้า","dashboard.analysis.day-visits":"การเข้าชมรายวัน","dashboard.analysis.week":"รายสัปดาห์ปีต่อปี","dashboard.analysis.day":"ปีต่อปี","dashboard.analysis.payments":"จำนวนการชำระเงิน","dashboard.analysis.conversion-rate":"อัตราการแปลง","dashboard.analysis.operational-effect":"ผลกระทบจากกิจกรรมการดำเนินงาน","dashboard.analysis.sales-trend":"แนวโน้มการขาย","dashboard.analysis.sales-ranking":"อันดับยอดขายของร้าน","dashboard.analysis.all-year":"ประจำปี","dashboard.analysis.all-month":"เดือนนี้","dashboard.analysis.all-week":"สัปดาห์นี้","dashboard.analysis.all-day":"วันนี้","dashboard.analysis.search-users":"จำนวนผู้ใช้การค้นหา","dashboard.analysis.per-capita-search":"การค้นหาต่อหัว","dashboard.analysis.online-top-search":"การค้นหายอดนิยมออนไลน์","dashboard.analysis.the-proportion-of-sales":"สัดส่วนประเภทการขาย","dashboard.analysis.dropdown-option-one":"ปฏิบัติการที่หนึ่ง","dashboard.analysis.dropdown-option-two":"ปฏิบัติการ 2","dashboard.analysis.channel.all":"ทุกช่อง","dashboard.analysis.channel.online":"ออนไลน์","dashboard.analysis.channel.stores":"เก็บ","dashboard.analysis.sales":"ฝ่ายขาย","dashboard.analysis.traffic":"การไหลของผู้โดยสาร","dashboard.analysis.table.rank":"การจัดอันดับ","dashboard.analysis.table.search-keyword":"ค้นหาคำสำคัญ","dashboard.analysis.table.users":"จำนวนผู้ใช้","dashboard.analysis.table.weekly-range":"เพิ่มขึ้นรายสัปดาห์","dashboard.indicator.selectSymbol":"เลือกหรือป้อนรหัสพื้นฐาน","dashboard.indicator.emptyWatchlistHint":"ขณะนี้ไม่มีหุ้นที่เลือกเอง กรุณาเพิ่มก่อน","dashboard.indicator.hint.selectSymbol":"โปรดเลือกเป้าหมายเพื่อเริ่มการวิเคราะห์","dashboard.indicator.hint.selectSymbolDesc":"เลือกหรือป้อนรหัสหุ้นในช่องค้นหาด้านบนเพื่อดูกราฟ K-line และตัวชี้วัดทางเทคนิค","dashboard.indicator.retry":"ลองอีกครั้ง","dashboard.indicator.panel.title":"ตัวชี้วัดทางเทคนิค","dashboard.indicator.panel.realtimeOn":"ปิดการอัพเดตแบบเรียลไทม์","dashboard.indicator.panel.realtimeOff":"เปิดใช้งานการอัปเดตแบบเรียลไทม์","dashboard.indicator.panel.themeLight":"เปลี่ยนเป็นธีมสีเข้ม","dashboard.indicator.panel.themeDark":"เปลี่ยนเป็นธีมสว่าง","dashboard.indicator.section.enabled":"เปิดใช้งานแล้ว","dashboard.indicator.section.added":"ตัวบ่งชี้ที่ฉันเพิ่ม","dashboard.indicator.section.custom":"ตัวชี้วัดที่สร้างขึ้นด้วยตัวเอง","dashboard.indicator.section.bought":"ตัวบ่งชี้ที่ฉันซื้อ","dashboard.indicator.section.myCreated":"ตัวบ่งชี้ที่ฉันสร้างขึ้น","dashboard.indicator.empty":"ยังไม่มีตัวบ่งชี้ โปรดเพิ่มหรือสร้างตัวบ่งชี้ก่อน","dashboard.indicator.buy":"ตัวบ่งชี้การซื้อ","dashboard.indicator.action.start":"เริ่มต้นขึ้น","dashboard.indicator.action.stop":"ปิด","dashboard.indicator.action.edit":"แก้ไข","dashboard.indicator.action.delete":"ลบ","dashboard.indicator.action.backtest":"การทดสอบย้อนหลัง","dashboard.indicator.status.normal":"ปกติ","dashboard.indicator.status.normalPermanent":"ปกติ (ใช้ได้ถาวร)","dashboard.indicator.status.expired":"หมดอายุแล้ว","dashboard.indicator.expiry.permanent":"มีผลถาวร","dashboard.indicator.expiry.noExpiry":"ไม่มีเวลาหมดอายุ","dashboard.indicator.expiry.expired":"หมดอายุ: {date}","dashboard.indicator.expiry.expiresOn":"เวลาหมดอายุ: {date}","dashboard.indicator.delete.confirmTitle":"ยืนยันการลบ","dashboard.indicator.delete.confirmContent":'คุณแน่ใจหรือไม่ว่าต้องการลบตัวบ่งชี้ "{name}"?การดำเนินการนี้ไม่สามารถย้อนกลับได้',"dashboard.indicator.delete.confirmOk":"ลบ","dashboard.indicator.delete.confirmCancel":"ยกเลิก","dashboard.indicator.delete.success":"ลบสำเร็จ","dashboard.indicator.delete.failed":"ลบไม่สำเร็จ","dashboard.indicator.save.success":"บันทึกเรียบร้อยแล้ว","dashboard.indicator.save.failed":"บันทึกล้มเหลว","dashboard.indicator.error.loadWatchlistFailed":"ไม่สามารถโหลดหุ้นเสริมได้","dashboard.indicator.error.chartNotReady":"ส่วนประกอบแผนภูมิไม่ได้เตรียมใช้งาน โปรดเลือกเป้าหมายก่อนแล้วรอให้แผนภูมิโหลด","dashboard.indicator.error.chartMethodNotReady":"วิธีส่วนประกอบแผนภูมิไม่พร้อม โปรดลองอีกครั้งในภายหลัง","dashboard.indicator.error.chartExecuteNotReady":"วิธีดำเนินการส่วนประกอบแผนภูมิไม่พร้อม โปรดลองอีกครั้งในภายหลัง","dashboard.indicator.error.parseFailed":"ไม่สามารถแยกวิเคราะห์โค้ด Python","dashboard.indicator.error.parseFailedCheck":"ไม่สามารถแยกวิเคราะห์โค้ด Python ได้ โปรดตรวจสอบรูปแบบโค้ด","dashboard.indicator.error.addIndicatorFailed":"ไม่สามารถเพิ่มตัวบ่งชี้ได้","dashboard.indicator.error.runIndicatorFailed":"ตัวบ่งชี้การทำงานล้มเหลว","dashboard.indicator.error.pleaseLogin":"กรุณาเข้าสู่ระบบก่อน","dashboard.indicator.error.loadDataFailed":"การโหลดข้อมูลล้มเหลว","dashboard.indicator.error.loadDataFailedDesc":"โปรดตรวจสอบการเชื่อมต่อเครือข่าย","dashboard.indicator.error.pythonEngineFailed":"โหลดกลไก Python ล้มเหลวและฟังก์ชันตัวบ่งชี้อาจไม่พร้อมใช้งาน","dashboard.indicator.error.chartInitFailed":"การเริ่มต้นแผนภูมิล้มเหลว","dashboard.indicator.warning.enterCode":"กรุณากรอกรหัสตัวบ่งชี้ก่อน","dashboard.indicator.warning.pyodideLoadFailed":"โปรแกรม Python ไม่สามารถโหลดได้","dashboard.indicator.warning.pyodideLoadFailedDesc":"คุณสมบัตินี้ไม่สามารถใช้ได้ในภูมิภาคหรือสภาพแวดล้อมเครือข่ายปัจจุบันของคุณ","dashboard.indicator.warning.chartNotInitialized":"แผนภูมิไม่ได้เตรียมใช้งานและไม่สามารถใช้เครื่องมือวาดเส้นได้","dashboard.indicator.success.runIndicator":"ตัวบ่งชี้ทำงานสำเร็จ","dashboard.indicator.success.clearDrawings":"ล้างภาพวาดเส้นทั้งหมดแล้ว","dashboard.indicator.sma":"SMA (ชุดค่าผสมค่าเฉลี่ยเคลื่อนที่)","dashboard.indicator.ema":"EMA (ชุดค่าผสมค่าเฉลี่ยเคลื่อนที่เอ็กซ์โปเนนเชียล)","dashboard.indicator.rsi":"RSI (ความแรงสัมพัทธ์)","dashboard.indicator.macd":"MACD","dashboard.indicator.bb":"โบลินเจอร์ แบนด์","dashboard.indicator.atr":"ATR (ช่วงที่แท้จริงเฉลี่ย)","dashboard.indicator.cci":"CCI (ดัชนีช่องสินค้าโภคภัณฑ์)","dashboard.indicator.williams":"วิลเลียมส์ %R (ตัวบ่งชี้วิลเลียมส์)","dashboard.indicator.mfi":"MFI (ดัชนีการไหลของเงิน)","dashboard.indicator.adx":"ADX (ดัชนีแนวโน้มเฉลี่ย)","dashboard.indicator.obv":"OBV (คลื่นพลังงาน)","dashboard.indicator.adosc":"ADOSC (ออสซิลเลเตอร์สะสม/ส่ง)","dashboard.indicator.ad":"AD (เส้นการสะสม/การกระจาย)","dashboard.indicator.kdj":"KDJ (ตัวบ่งชี้สุ่ม)","dashboard.indicator.signal.buy":"ซื้อ","dashboard.indicator.signal.sell":"ขาย","dashboard.indicator.signal.supertrendBuy":"ซื้อ SuperTrend","dashboard.indicator.signal.supertrendSell":"ขาย SuperTrend","dashboard.indicator.chart.kline":"เคไลน์","dashboard.indicator.chart.volume":"ปริมาณ","dashboard.indicator.chart.uptrend":"อัพเทรนด์","dashboard.indicator.chart.downtrend":"เทรนด์ขาลง","dashboard.indicator.tooltip.time":"เวลา","dashboard.indicator.tooltip.open":"เปิด","dashboard.indicator.tooltip.close":"รับ","dashboard.indicator.tooltip.high":"สูง","dashboard.indicator.tooltip.low":"ต่ำ","dashboard.indicator.tooltip.volume":"ปริมาณ","dashboard.indicator.drawing.line":"ส่วนของเส้น","dashboard.indicator.drawing.horizontalLine":"เส้นแนวนอน","dashboard.indicator.drawing.verticalLine":"เส้นแนวตั้ง","dashboard.indicator.drawing.ray":"รังสี","dashboard.indicator.drawing.straightLine":"เส้นตรง","dashboard.indicator.drawing.parallelLine":"เส้นขนาน","dashboard.indicator.drawing.priceLine":"เส้นราคา","dashboard.indicator.drawing.priceChannel":"ช่องราคา","dashboard.indicator.drawing.fibonacciLine":"เส้นฟีโบนักชี","dashboard.indicator.drawing.measure":"วัด","dashboard.indicator.drawing.clearAll":"ล้างภาพวาดเส้นทั้งหมด","dashboard.indicator.market.USStock":"หุ้นสหรัฐ","dashboard.indicator.market.Crypto":"สกุลเงินดิจิทัล","dashboard.indicator.market.Forex":"ฟอเร็กซ์","dashboard.indicator.market.Futures":"ฟิวเจอร์ส","dashboard.indicator.create":"สร้างตัวบ่งชี้","dashboard.indicator.editor.title":"สร้าง/แก้ไขตัวบ่งชี้","dashboard.indicator.editor.name":"ชื่อตัวบ่งชี้","dashboard.indicator.editor.nameRequired":"กรุณากรอกชื่อตัวบ่งชี้","dashboard.indicator.editor.namePlaceholder":"กรุณากรอกชื่อตัวบ่งชี้","dashboard.indicator.editor.description":"คำอธิบายตัวบ่งชี้","dashboard.indicator.editor.descriptionPlaceholder":"โปรดป้อนคำอธิบายของตัวบ่งชี้ (ตัวเลือก)","dashboard.indicator.editor.code":"รหัสหลาม","dashboard.indicator.editor.codeRequired":"กรุณากรอกรหัสตัวบ่งชี้","dashboard.indicator.editor.codePlaceholder":"กรุณากรอกรหัสไพธอน","dashboard.indicator.editor.run":"วิ่ง","dashboard.indicator.editor.runHint":"คลิกปุ่มเรียกใช้เพื่อดูตัวอย่างเอฟเฟกต์ตัวบ่งชี้บนแผนภูมิเส้น K","dashboard.indicator.editor.guide":"คู่มือการพัฒนา","dashboard.indicator.editor.guideTitle":"คู่มือการพัฒนาตัวบ่งชี้ Python","dashboard.indicator.editor.save":"บันทึก","dashboard.indicator.editor.cancel":"ยกเลิก","dashboard.indicator.editor.unnamed":"ตัวบ่งชี้ที่ไม่มีชื่อ","dashboard.indicator.editor.publishToCommunity":"โพสต์ไปที่ชุมชน","dashboard.indicator.editor.publishToCommunityHint":"เมื่อเผยแพร่แล้ว ผู้ใช้รายอื่นจะสามารถดูและใช้ตัวบ่งชี้ของคุณในชุมชนได้","dashboard.indicator.editor.indicatorType":"ประเภทตัวบ่งชี้","dashboard.indicator.editor.indicatorTypeRequired":"โปรดเลือกประเภทตัวบ่งชี้","dashboard.indicator.editor.indicatorTypePlaceholder":"โปรดเลือกประเภทตัวบ่งชี้","dashboard.indicator.editor.previewImage":"ดูตัวอย่าง","dashboard.indicator.editor.uploadImage":"อัพโหลดรูปภาพ","dashboard.indicator.editor.previewImageHint":"ขนาดที่แนะนำ: 800x400 ไม่เกิน 2MB","dashboard.indicator.editor.pricing":"ราคาขาย (QDT)","dashboard.indicator.editor.pricingType.free":"ฟรี","dashboard.indicator.editor.pricingType.permanent":"ถาวร","dashboard.indicator.editor.pricingType.monthly":"การชำระเงินรายเดือน","dashboard.indicator.editor.price":"ราคา","dashboard.indicator.editor.priceRequired":"กรุณากรอกราคา","dashboard.indicator.editor.pricePlaceholder":"กรุณากรอกราคา","dashboard.indicator.editor.pricingHint":"แม้ว่าราคาของตัวบ่งชี้ฟรีจะเป็น 0 แต่แพลตฟอร์มจะให้รางวัลแก่คุณ (QDT) ตามการใช้ตัวบ่งชี้และอัตราการชมเชยของคุณ","dashboard.indicator.editor.aiGenerate":"รุ่นอัจฉริยะ","dashboard.indicator.editor.aiPromptPlaceholder":"บอกความคิดของคุณมาให้ฉัน แล้วฉันจะสร้างโค้ดตัวบ่งชี้ Python ให้กับคุณ","dashboard.indicator.editor.aiGenerateBtn":"AI สร้างโค้ด","dashboard.indicator.editor.aiPromptRequired":"กรุณากรอกความคิดของคุณ","dashboard.indicator.editor.aiGenerateSuccess":"การสร้างรหัสสำเร็จ","dashboard.indicator.editor.aiGenerateError":"การสร้างโค้ดล้มเหลว โปรดลองอีกครั้งในภายหลัง","dashboard.indicator.backtest.title":"ตัวบ่งชี้ย้อนกลับ","dashboard.indicator.backtest.config":"พารามิเตอร์การทดสอบย้อนกลับ","dashboard.indicator.backtest.startDate":"วันที่เริ่มต้น","dashboard.indicator.backtest.endDate":"วันที่สิ้นสุด","dashboard.indicator.backtest.selectStartDate":"เลือกวันที่เริ่มต้น","dashboard.indicator.backtest.selectEndDate":"เลือกวันที่สิ้นสุด","dashboard.indicator.backtest.startDateRequired":"โปรดเลือกวันที่เริ่มต้น","dashboard.indicator.backtest.endDateRequired":"โปรดเลือกวันที่สิ้นสุด","dashboard.indicator.backtest.initialCapital":"ทุนเริ่มต้น","dashboard.indicator.backtest.initialCapitalRequired":"กรุณากรอกเงินทุนเริ่มต้น","dashboard.indicator.backtest.commission":"ค่าธรรมเนียมการจัดการ","dashboard.indicator.backtest.leverage":"อัตราส่วนเลเวอเรจ","dashboard.indicator.backtest.tradeDirection":"ทิศทางการซื้อขาย","dashboard.indicator.backtest.longOnly":"ยาวไป","dashboard.indicator.backtest.shortOnly":"สั้น","dashboard.indicator.backtest.both":"สองทาง","dashboard.indicator.backtest.run":"เริ่มการทดสอบย้อนหลัง","dashboard.indicator.backtest.rerun":"ทดสอบย้อนหลังอีกครั้ง","dashboard.indicator.backtest.close":"ปิด","dashboard.indicator.backtest.running":"อยู่ระหว่างการทดสอบตัวบ่งชี้ย้อนกลับ...","dashboard.indicator.backtest.results":"ผลการทดสอบย้อนหลัง","dashboard.indicator.backtest.totalReturn":"ผลตอบแทนรวม","dashboard.indicator.backtest.annualReturn":"รายได้ต่อปี","dashboard.indicator.backtest.maxDrawdown":"การเบิกถอนสูงสุด","dashboard.indicator.backtest.sharpeRatio":"อัตราส่วนความคมชัด","dashboard.indicator.backtest.winRate":"อัตราการชนะ","dashboard.indicator.backtest.profitFactor":"อัตราส่วนกำไร-ขาดทุน","dashboard.indicator.backtest.totalTrades":"จำนวนธุรกรรม","dashboard.indicator.totalReturn":"ผลตอบแทนรวม","dashboard.indicator.annualReturn":"อัตราผลตอบแทนต่อปี","dashboard.indicator.maxDrawdown":"การเบิกถอนสูงสุด","dashboard.indicator.sharpeRatio":"อัตราส่วนความคมชัด","dashboard.indicator.winRate":"อัตราการชนะ","dashboard.indicator.profitFactor":"อัตราส่วนกำไร-ขาดทุน","dashboard.indicator.totalTrades":"จำนวนธุรกรรมทั้งหมด","dashboard.indicator.backtest.totalCommission":"ค่าธรรมเนียมการจัดการทั้งหมด","dashboard.indicator.backtest.equityCurve":"เส้นอัตราผลตอบแทน","dashboard.indicator.backtest.strategy":"ตัวชี้วัดรายได้","dashboard.indicator.backtest.benchmark":"ผลตอบแทนมาตรฐาน","dashboard.indicator.backtest.tradeHistory":"ประวัติการทำธุรกรรม","dashboard.indicator.backtest.tradeTime":"เวลา","dashboard.indicator.backtest.tradeType":"พิมพ์","dashboard.indicator.backtest.buy":"ซื้อ","dashboard.indicator.backtest.sell":"ขาย","dashboard.indicator.backtest.liquidation":"การชำระบัญชี","dashboard.indicator.backtest.openLong":"เปิดยาวๆ","dashboard.indicator.backtest.closeLong":"ปินตัว","dashboard.indicator.backtest.closeLongStop":"ใกล้ถึงระยะยาว (หยุดการสูญเสีย)","dashboard.indicator.backtest.closeLongProfit":"ปิดมากขึ้น (ทำกำไร)","dashboard.indicator.backtest.addLong":"เพิ่มตำแหน่งยาว","dashboard.indicator.backtest.openShort":"เปิดสั้น","dashboard.indicator.backtest.closeShort":"ว่างเปล่า","dashboard.indicator.backtest.closeShortStop":"ปิด (หยุดการสูญเสีย)","dashboard.indicator.backtest.closeShortProfit":"ปิด (ทำกำไร)","dashboard.indicator.backtest.addShort":"เพิ่มตำแหน่งสั้น","dashboard.indicator.backtest.price":"ราคา","dashboard.indicator.backtest.amount":"ปริมาณ","dashboard.indicator.backtest.balance":"ยอดเงินในบัญชี","dashboard.indicator.backtest.profit":"กำไรและขาดทุน","dashboard.indicator.backtest.success":"การทดสอบย้อนกลับเสร็จสมบูรณ์","dashboard.indicator.backtest.failed":"การทดสอบย้อนกลับล้มเหลว โปรดลองอีกครั้งในภายหลัง","dashboard.indicator.backtest.noIndicatorCode":"ไม่มีรหัสที่ทดสอบย้อนกลับได้สำหรับตัวบ่งชี้นี้","dashboard.indicator.backtest.noSymbol":"โปรดเลือกเป้าหมายการทำธุรกรรมก่อน","dashboard.indicator.backtest.dateRangeExceeded":"ช่วงเวลาการทดสอบย้อนหลังเกินขีดจำกัด: {timeframe} รอบสามารถทดสอบย้อนหลังได้สูงสุด {maxRange}","dashboard.indicator.backtest.dateRangeExceededDays":"Backtest range exceeds limit: {timeframe} max {maxRange} ({maxDays} days)","dashboard.indicator.backtest.metaLine":"Symbol: {symbol} | Market: {market} | Timeframe: {timeframe}","dashboard.indicator.backtest.savedRunId":"Backtest saved. Run ID: {id}","dashboard.indicator.backtest.prev":"Previous","dashboard.indicator.backtest.next":"Next","dashboard.indicator.backtest.hint.entryPctMax":"Max entry: {maxPct}% (reserve budget for future scale-ins)","dashboard.indicator.backtest.steps.strategy.title":"Strategy","dashboard.indicator.backtest.steps.strategy.desc":"Position sizing & risk controls","dashboard.indicator.backtest.steps.trading.title":"Trading settings","dashboard.indicator.backtest.steps.trading.desc":"Time range, capital, fees, leverage","dashboard.indicator.backtest.steps.results.title":"Results","dashboard.indicator.backtest.steps.results.desc":"Backtest output","dashboard.indicator.backtest.panel.risk":"Risk management (SL/TP/Trailing)","dashboard.indicator.backtest.panel.scale":"Scale in / DCA (trend & mean-reversion)","dashboard.indicator.backtest.panel.reduce":"Reduce position (trend & adverse)","dashboard.indicator.backtest.panel.position":"Position sizing","dashboard.indicator.backtest.field.stopLossPct":"Stop Loss (%)","dashboard.indicator.backtest.field.takeProfitPct":"Take Profit (%)","dashboard.indicator.backtest.field.trailingEnabled":"Trailing stop / take profit","dashboard.indicator.backtest.field.trailingStopPct":"Trailing drawdown (%)","dashboard.indicator.backtest.field.trailingActivationPct":"Trailing activation (%)","dashboard.indicator.backtest.field.slippage":"Slippage (%)","dashboard.indicator.backtest.field.trendAddEnabled":"Trend-following scale-in","dashboard.indicator.backtest.field.dcaAddEnabled":"Mean-reversion scale-in","dashboard.indicator.backtest.field.trendAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.dcaAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.trendAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.dcaAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.trendAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.dcaAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.trendReduceEnabled":"Trend reduce","dashboard.indicator.backtest.field.adverseReduceEnabled":"Adverse reduce","dashboard.indicator.backtest.field.trendReduceStepPct":"Trend trigger (%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"Adverse trigger (%)","dashboard.indicator.backtest.field.trendReduceSizePct":"Reduce size (% of position)","dashboard.indicator.backtest.field.adverseReduceSizePct":"Adverse reduce size (% of position)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"Max trend reduce times","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"Max adverse reduce times","dashboard.indicator.backtest.field.entryPct":"Entry size (% of capital)","dashboard.indicator.backtest.field.minOrderPct":"Min order size (% of capital) (optional)","dashboard.indicator.backtest.closeLongTrailing":"Close Long (Trailing)","dashboard.indicator.backtest.reduceLong":"Reduce Long","dashboard.indicator.backtest.closeShortTrailing":"Close Short (Trailing)","dashboard.indicator.backtest.reduceShort":"Reduce Short","dashboard.docs.title":"ศูนย์เอกสาร","dashboard.docs.search.placeholder":"ค้นหาเอกสาร...","dashboard.docs.category.all":"ทั้งหมด","dashboard.docs.category.guide":"คู่มือการพัฒนา","dashboard.docs.category.api":"เอกสารประกอบ API","dashboard.docs.category.tutorial":"บทช่วยสอน","dashboard.docs.category.faq":"คำถามที่พบบ่อย","dashboard.docs.featured.title":"เอกสารแนะนำ","dashboard.docs.featured.tag":"แนะนำ","dashboard.docs.list.views":"เรียกดู","dashboard.docs.list.author":"ผู้เขียน","dashboard.docs.list.empty":"ยังไม่มีเอกสาร","dashboard.docs.list.backToAll":"กลับไปที่เอกสารทั้งหมด","dashboard.docs.list.total":"เอกสารทั้งหมด {count}","dashboard.docs.detail.back":"กลับไปยังรายการเอกสาร","dashboard.docs.detail.updatedAt":"อัปเดตเมื่อ","dashboard.docs.detail.related":"เอกสารที่เกี่ยวข้อง","dashboard.docs.detail.notFound":"ไม่มีเอกสารอยู่","dashboard.docs.detail.error":"เอกสารไม่มีอยู่หรือถูกลบไปแล้ว","dashboard.docs.search.result":"ผลการค้นหา","dashboard.docs.search.keyword":"คำหลัก","community.filter.indicatorType":"ประเภทตัวบ่งชี้","community.filter.all":"ทั้งหมด","community.filter.other":"ตัวเลือกอื่นๆ","community.filter.pricing":"ประเภทการกำหนดราคา","community.filter.allPricing":"ราคาทั้งหมด","community.filter.sortBy":"จัดเรียงตาม","community.filter.search":"ค้นหา","community.filter.searchPlaceholder":"ค้นหาชื่อเมตริก","community.indicatorType.trend":"ประเภทเทรนด์","community.indicatorType.momentum":"ประเภทโมเมนตัม","community.indicatorType.volatility":"ความผันผวน","community.indicatorType.volume":"ปริมาณ","community.indicatorType.custom":"ปรับแต่ง","community.pricing.free":"ฟรี","community.pricing.paid":"จ่าย","community.sort.downloads":"ดาวน์โหลด","community.sort.rating":"คะแนน","community.sort.newest":"รุ่นล่าสุด","community.pagination.total":"ตัวชี้วัดทั้งหมด {total}","community.noDescription":"ยังไม่มีคำอธิบาย","community.detail.type":"พิมพ์","community.detail.pricing":"ราคา","community.detail.rating":"คะแนน","community.detail.downloads":"ดาวน์โหลด","community.detail.author":"ผู้เขียน","community.detail.description":"การแนะนำ","community.detail.detailContent":"คำอธิบายโดยละเอียด","community.detail.backtestStats":"สถิติการทดสอบย้อนหลัง","community.action.purchase":"ตัวบ่งชี้การซื้อ","community.action.addToMyIndicators":"เพิ่มไปยังตัวบ่งชี้ของฉัน","community.action.favorite":"เก็บรวบรวม","community.action.unfavorite":"ยกเลิกรายการโปรด","community.action.buyNow":"ซื้อเลย","community.action.renew":"ต่ออายุ","community.purchase.price":"ราคา","community.purchase.permanent":"ถาวร","community.purchase.monthly":"ดวงจันทร์","community.purchase.confirmBuy":"ยืนยันที่จะซื้อตัวบ่งชี้นี้ ({price} QDT)?","community.purchase.confirmRenew":"ยืนยันที่จะต่ออายุตัวบ่งชี้นี้ ({price} QDT/เดือน) หรือไม่","community.purchase.confirmFree":"ยืนยันเพื่อเพิ่มตัวบ่งชี้ฟรีนี้หรือไม่","community.purchase.confirmTitle":"ยืนยันการดำเนินการ","community.purchase.owned":"คุณได้ซื้อตัวบ่งชี้นี้ (ใช้ได้ถาวร)","community.purchase.ownIndicator":"นี่คือเมตริกที่คุณเผยแพร่","community.purchase.expired":"การสมัครของคุณหมดอายุแล้ว","community.purchase.expiresOn":"เวลาหมดอายุ: {date}","community.tabs.detail":"รายละเอียดตัวบ่งชี้","community.tabs.backtest":"ข้อมูลการทดสอบย้อนหลัง","community.tabs.ratings":"ความคิดเห็นของผู้ใช้","community.rating.myRating":"คะแนนของฉัน","community.rating.stars":"{count} ดาว","community.rating.commentPlaceholder":"แบ่งปันประสบการณ์ของคุณ...","community.rating.submit":"ส่งเรตติ้ง.","community.rating.modify":"ปรับปรุงใหม่","community.rating.saveModify":"บันทึกการเปลี่ยนแปลง","community.rating.cancel":"ยกเลิก","community.rating.selectRating":"โปรดเลือกการให้คะแนน","community.rating.success":"เรตติ้งสำเร็จ","community.rating.modifySuccess":"แก้ไขการตรวจสอบเรียบร้อยแล้ว","community.rating.failed":"การให้คะแนนล้มเหลว","community.rating.noRatings":"ยังไม่มีความคิดเห็น","community.backtest.note":"ข้อมูลข้างต้นเป็นผลการทดสอบย้อนกลับในอดีตและมีไว้เพื่อการอ้างอิงเท่านั้น และไม่ได้แสดงถึงรายได้ในอนาคต","community.backtest.noData":"ยังไม่มีข้อมูลย้อนหลัง","community.backtest.uploadHint":"ผู้เขียนยังไม่ได้อัพโหลดข้อมูล backtest","community.message.loadFailed":"ไม่สามารถโหลดรายการตัวบ่งชี้","community.message.purchaseProcessing":"กำลังประมวลผลคำขอซื้อ...","community.message.downloadSuccess":"เพิ่มเมตริกลงในรายการเมตริกของฉันแล้ว","community.message.favoriteSuccess":"รวบรวมสำเร็จ","community.message.unfavoriteSuccess":"ยกเลิกการรวบรวมเรียบร้อยแล้ว","community.message.operationSuccess":"การดำเนินงานประสบความสำเร็จ","community.message.operationFailed":"การดำเนินการล้มเหลว","community.banner.readOnly":"อ่านอย่างเดียว","community.banner.loginHint":"สำหรับการเข้าสู่ระบบหรือการลงทะเบียน กรุณาคลิกปุ่มเพื่อไปยังหน้าอิสระเพื่อหลีกเลี่ยงปัญหา CSRF","community.banner.jumpButton":"ไปที่เข้าสู่ระบบ/ลงทะเบียน","dashboard.totalEquity":"ส่วนของผู้ถือหุ้นทั้งหมด","dashboard.totalPnL":"กำไรและขาดทุนทั้งหมด","dashboard.aiStrategies":"กลยุทธ์เอไอ","dashboard.indicatorStrategies":"กลยุทธ์ตัวบ่งชี้","dashboard.running":"วิ่ง","dashboard.pnlHistory":"กำไรและขาดทุนในอดีต","dashboard.strategyPerformance":"อัตราส่วนกำไรและขาดทุนของกลยุทธ์","dashboard.recentTrades":"การทำธุรกรรมล่าสุด","dashboard.currentPositions":"ตำแหน่งปัจจุบัน","dashboard.table.time":"เวลา","dashboard.table.strategy":"ชื่อกรมธรรม์","dashboard.table.symbol":"เป้า","dashboard.table.type":"พิมพ์","dashboard.table.side":"ทิศทาง","dashboard.table.size":"เปิดดอกเบี้ย","dashboard.table.entryPrice":"ราคาเปิดเฉลี่ย","dashboard.table.price":"ราคา","dashboard.table.amount":"ปริมาณ","dashboard.table.profit":"กำไรและขาดทุน","dashboard.pendingOrders":"บันทึกการดำเนินการคำสั่งซื้อ","dashboard.totalOrders":"รวม {total} รายการ","dashboard.viewError":"ดูข้อผิดพลาด","dashboard.filled":"ดำเนินการแล้ว","dashboard.orderTable.time":"เวลาที่สร้าง","dashboard.orderTable.strategy":"กลยุทธ์","dashboard.orderTable.symbol":"คู่เทรด","dashboard.orderTable.signalType":"ประเภทสัญญาณ","dashboard.orderTable.amount":"จำนวน","dashboard.orderTable.price":"ราคาที่ดำเนินการ","dashboard.orderTable.status":"สถานะ","dashboard.orderTable.executedAt":"เวลาที่ดำเนินการ","dashboard.signalType.openLong":"เปิด Long","dashboard.signalType.openShort":"เปิด Short","dashboard.signalType.closeLong":"ปิด Long","dashboard.signalType.closeShort":"ปิด Short","dashboard.signalType.addLong":"เพิ่ม Long","dashboard.signalType.addShort":"เพิ่ม Short","dashboard.status.pending":"รอดำเนินการ","dashboard.status.processing":"กำลังดำเนินการ","dashboard.status.completed":"เสร็จสิ้น","dashboard.status.failed":"ล้มเหลว","dashboard.status.cancelled":"ยกเลิกแล้ว","dashboard.table.pnl":"กำไรหรือขาดทุนที่ยังไม่เกิดขึ้นจริง","form.basic-form.basic.title":"แบบฟอร์มพื้นฐาน","form.basic-form.basic.description":"หน้าแบบฟอร์มใช้เพื่อรวบรวมหรือตรวจสอบข้อมูลจากผู้ใช้ โดยทั่วไปจะใช้แบบฟอร์มพื้นฐานในสถานการณ์จำลองที่มีรายการข้อมูลน้อย","form.basic-form.title.label":"ชื่อ","form.basic-form.title.placeholder":"ตั้งชื่อให้เป้าหมาย","form.basic-form.title.required":"กรุณากรอกชื่อ","form.basic-form.date.label":"วันที่เริ่มต้นและสิ้นสุด","form.basic-form.placeholder.start":"วันที่เริ่มต้น","form.basic-form.placeholder.end":"วันที่สิ้นสุด","form.basic-form.date.required":"กรุณาเลือกวันที่เริ่มต้นและสิ้นสุด","form.basic-form.goal.label":"คำอธิบายเป้าหมาย","form.basic-form.goal.placeholder":"กรุณาป้อนเป้าหมายการทำงานแบบเป็นขั้นตอนของคุณ","form.basic-form.goal.required":"กรุณากรอกคำอธิบายเป้าหมาย","form.basic-form.standard.label":"วัด","form.basic-form.standard.placeholder":"กรุณากรอกตัวชี้วัด","form.basic-form.standard.required":"กรุณากรอกตัวชี้วัด","form.basic-form.client.label":"ลูกค้า","form.basic-form.client.required":"โปรดอธิบายลูกค้าที่คุณให้บริการ","form.basic-form.label.tooltip":"ผู้รับบริการเป้าหมาย","form.basic-form.client.placeholder":"โปรดอธิบายลูกค้าที่คุณให้บริการ ลูกค้าภายในโดยตรง @ชื่อ/หมายเลขงาน","form.basic-form.invites.label":"เชิญผู้วิจารณ์","form.basic-form.invites.placeholder":"กรุณา @name/หมายเลขพนักงาน โดยตรง คุณสามารถเชิญได้สูงสุด 5 คน","form.basic-form.weight.label":"น้ำหนัก","form.basic-form.weight.placeholder":"กรุณาเข้า","form.basic-form.public.label":"กำหนดเป้าหมายสาธารณะ","form.basic-form.label.help":"ลูกค้าและผู้ตรวจสอบจะถูกแชร์โดยค่าเริ่มต้น","form.basic-form.radio.public":"สาธารณะ","form.basic-form.radio.partially-public":"เปิดเผยต่อสาธารณะบางส่วน","form.basic-form.radio.private":"ส่วนตัว","form.basic-form.publicUsers.placeholder":"เปิดให้","form.basic-form.option.A":"เพื่อนร่วมงาน 1","form.basic-form.option.B":"เพื่อนร่วมงาน 2","form.basic-form.option.C":"เพื่อนร่วมงานสามคน","form.basic-form.email.required":"กรุณากรอกที่อยู่อีเมลของคุณ!","form.basic-form.email.wrong-format":"รูปแบบที่อยู่อีเมลไม่ถูกต้อง!","form.basic-form.userName.required":"กรุณากรอกชื่อผู้ใช้!","form.basic-form.password.required":"กรุณากรอกรหัสผ่านของคุณ!","form.basic-form.password.twice":"รหัสผ่านที่ป้อนสองครั้งไม่ตรงกัน!","form.basic-form.strength.msg":"กรุณากรอกอย่างน้อย 6 ตัวอักษร กรุณาอย่าใช้รหัสผ่านที่คาดเดาได้ง่าย","form.basic-form.strength.strong":"ความแข็งแกร่ง: แข็งแกร่ง","form.basic-form.strength.medium":"ความแข็งแกร่ง: ปานกลาง","form.basic-form.strength.short":"ความแรง: สั้นเกินไป","form.basic-form.confirm-password.required":"กรุณายืนยันรหัสผ่านของคุณ!","form.basic-form.phone-number.required":"กรุณากรอกหมายเลขโทรศัพท์มือถือของคุณ!","form.basic-form.phone-number.wrong-format":"รูปแบบหมายเลขโทรศัพท์มือถือผิด!","form.basic-form.verification-code.required":"กรุณากรอกรหัสยืนยัน!","form.basic-form.form.get-captcha":"รับรหัสยืนยัน","form.basic-form.captcha.second":"ที่สอง","form.basic-form.form.optional":"(ไม่จำเป็น)","form.basic-form.form.submit":"ส่ง","form.basic-form.form.save":"บันทึก","form.basic-form.email.placeholder":"จดหมาย","form.basic-form.password.placeholder":"รหัสผ่านอย่างน้อย 6 ตัวอักษร คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่","form.basic-form.confirm-password.placeholder":"ยืนยันรหัสผ่าน","form.basic-form.phone-number.placeholder":"หมายเลขโทรศัพท์","form.basic-form.verification-code.placeholder":"รหัสยืนยัน","result.success.title":"ส่งสำเร็จ","result.success.description":'หน้าผลลัพธ์การส่งใช้เพื่อตอบกลับผลการประมวลผลของชุดงานการดำเนินงาน หากเป็นเพียงการดำเนินการง่ายๆ ให้ใช้ข้อความตอบรับพร้อมท์ทั่วโลกพื้นที่ข้อความนี้สามารถแสดงคำแนะนำเสริมง่ายๆ หากจำเป็นต้องแสดง "เอกสาร" พื้นที่สีเทาด้านล่างสามารถแสดงเนื้อหาที่ซับซ้อนมากขึ้นได้',"result.success.operate-title":"ชื่อโครงการ","result.success.operate-id":"รหัสโครงการ","result.success.principal":"บุคคลที่รับผิดชอบ","result.success.operate-time":"เวลาที่มีประสิทธิภาพ","result.success.step1-title":"สร้างโครงการ","result.success.step1-operator":"คู ลิลี่","result.success.step2-title":"การทบทวนเบื้องต้นของแผนก","result.success.step2-operator":"โจว เหมาเหมา","result.success.step2-extra":"ด่วน","result.success.step3-title":"การตรวจสอบทางการเงิน","result.success.step4-title":"เสร็จ","result.success.btn-return":"กลับไปที่รายการ","result.success.btn-project":"ดูรายการ","result.success.btn-print":"พิมพ์","result.fail.error.title":"การส่งล้มเหลว","result.fail.error.description":"โปรดตรวจสอบและแก้ไขข้อมูลต่อไปนี้ก่อนที่จะส่งอีกครั้ง","result.fail.error.hint-title":"เนื้อหาที่คุณส่งมีข้อผิดพลาดต่อไปนี้:","result.fail.error.hint-text1":"บัญชีของคุณถูกระงับ","result.fail.error.hint-btn1":"ละลายทันที","result.fail.error.hint-text2":"บัญชีของคุณยังไม่มีสิทธิ์สมัคร","result.fail.error.hint-btn2":"อัพเกรดตอนนี้","result.fail.error.btn-text":"กลับไปแก้ไข","account.settings.menuMap.custom":"การปรับเปลี่ยนในแบบของคุณ","account.settings.menuMap.binding":"การผูกบัญชี","account.settings.basic.avatar":"อวตาร","account.settings.basic.change-avatar":"เปลี่ยนอวตาร","account.settings.basic.email":"จดหมาย","account.settings.basic.email-message":"กรุณากรอกอีเมล์ของคุณ!","account.settings.basic.nickname":"ชื่อนิค","account.settings.basic.nickname-message":"กรุณากรอกชื่อเล่นของคุณ!","account.settings.basic.profile":"ประวัติโดยย่อ","account.settings.basic.profile-message":"กรุณากรอกรายละเอียดส่วนตัวของคุณ!","account.settings.basic.profile-placeholder":"ประวัติโดยย่อ","account.settings.basic.country":"ประเทศ/ภูมิภาค","account.settings.basic.country-message":"กรุณากรอกประเทศหรือภูมิภาคของคุณ!","account.settings.basic.geographic":"จังหวัดและเมือง","account.settings.basic.geographic-message":"กรุณากรอกจังหวัดและเมืองของคุณ!","account.settings.basic.address":"ที่อยู่ถนน","account.settings.basic.address-message":"กรุณากรอกที่อยู่ของคุณ!","account.settings.basic.phone":"เบอร์ติดต่อ","account.settings.basic.phone-message":"กรุณากรอกหมายเลขติดต่อของคุณ!","account.settings.basic.update":"อัพเดตข้อมูลพื้นฐาน","account.settings.basic.update.success":"อัปเดตข้อมูลพื้นฐานสำเร็จ","account.settings.security.strong":"ทรงพลัง","account.settings.security.medium":"กลาง","account.settings.security.weak":"อ่อนแอ","account.settings.security.password":"รหัสผ่านบัญชี","account.settings.security.password-description":"ความยากของรหัสผ่านปัจจุบัน:","account.settings.security.phone":"การรักษาความปลอดภัยโทรศัพท์มือถือ","account.settings.security.phone-description":"โทรศัพท์มือถือที่ผูกไว้แล้ว:","account.settings.security.question":"ปัญหาด้านความปลอดภัย","account.settings.security.question-description":"ไม่มีการตั้งค่าคำถามเพื่อความปลอดภัย ซึ่งสามารถปกป้องความปลอดภัยของบัญชีได้อย่างมีประสิทธิภาพ","account.settings.security.email":"ผูกอีเมล","account.settings.security.email-description":"ที่อยู่อีเมลที่ถูกผูกไว้แล้ว:","account.settings.security.mfa":"อุปกรณ์เอ็มเอฟเอ","account.settings.security.mfa-description":"อุปกรณ์ MFA ไม่ได้ถูกผูกไว้ หลังจากผูกแล้วสามารถยืนยันอีกครั้งได้","account.settings.security.modify":"ปรับปรุงใหม่","account.settings.security.set":"ตั้งค่า","account.settings.security.bind":"ผูกพัน","account.settings.binding.taobao":"ผูก Taobao","account.settings.binding.taobao-description":"บัญชี Taobao ไม่ได้ถูกผูกไว้ในขณะนี้","account.settings.binding.alipay":"ผูกอาลีเพย์","account.settings.binding.alipay-description":"บัญชี Alipay ไม่ได้ถูกผูกไว้ในขณะนี้","account.settings.binding.dingding":"การผูกมัด DingTalk","account.settings.binding.dingding-description":"ขณะนี้ไม่มีบัญชี DingTalk ถูกผูกไว้","account.settings.binding.bind":"ผูกพัน","account.settings.notification.password":"รหัสผ่านบัญชี","account.settings.notification.password-description":"ข้อความจากผู้ใช้รายอื่นจะได้รับแจ้งในรูปแบบของข้อความไซต์","account.settings.notification.messages":"ข้อความของระบบ","account.settings.notification.messages-description":"ข้อความของระบบจะได้รับแจ้งในรูปแบบของข้อความไซต์","account.settings.notification.todo":"งานที่ต้องทำ","account.settings.notification.todo-description":"งานที่ต้องทำจะได้รับแจ้งในรูปแบบของข้อความในไซต์","account.settings.settings.open":"เปิด","account.settings.settings.close":"ปิด","trading-assistant.title":"ผู้ช่วยการซื้อขาย","trading-assistant.strategyList":"รายการกลยุทธ์","trading-assistant.createStrategy":"สร้างนโยบาย","trading-assistant.noStrategy":"ยังไม่มีกลยุทธ์","trading-assistant.selectStrategy":"โปรดเลือกกลยุทธ์จากด้านซ้ายเพื่อดูรายละเอียด","trading-assistant.startStrategy":"กลยุทธ์การเปิดตัว","trading-assistant.stopStrategy":"กลยุทธ์การหยุด","trading-assistant.editStrategy":"กลยุทธ์ด้านบรรณาธิการ","trading-assistant.deleteStrategy":"ลบนโยบาย","trading-assistant.status.running":"วิ่ง","trading-assistant.status.stopped":"หยุดแล้ว","trading-assistant.status.error":"ความผิดพลาด","trading-assistant.strategyType.IndicatorStrategy":"กลยุทธ์ตัวบ่งชี้ทางเทคนิค","trading-assistant.strategyType.PromptBasedStrategy":"กลยุทธ์คำคิว","trading-assistant.strategyType.GridStrategy":"กลยุทธ์กริด","trading-assistant.tabs.tradingRecords":"ประวัติการทำธุรกรรม","trading-assistant.tabs.positions":"บันทึกตำแหน่ง","trading-assistant.tabs.equityCurve":"เส้นส่วนของผู้ถือหุ้น","trading-assistant.form.step1":"เลือกตัวบ่งชี้","trading-assistant.form.step2":"การกำหนดค่าการแลกเปลี่ยน","trading-assistant.form.step3":"พารามิเตอร์กลยุทธ์","trading-assistant.form.indicator":"เลือกตัวบ่งชี้","trading-assistant.form.indicatorHint":"คุณสามารถเลือกได้เฉพาะตัวบ่งชี้ทางเทคนิคที่คุณซื้อหรือสร้างขึ้นเท่านั้น","trading-assistant.form.qdtCostHints":"การใช้กลยุทธ์จะใช้ QDT โปรดตรวจสอบให้แน่ใจว่าบัญชีมียอดคงเหลือ QDT เพียงพอ","trading-assistant.form.indicatorDescription":"คำอธิบายตัวบ่งชี้","trading-assistant.form.noDescription":"ยังไม่มีคำอธิบาย","trading-assistant.form.exchange":"เลือกการแลกเปลี่ยน","trading-assistant.form.apiKey":"คีย์ API","trading-assistant.form.secretKey":"รหัสลับ","trading-assistant.form.passphrase":"ข้อความรหัสผ่าน","trading-assistant.form.testConnection":"ทดสอบการเชื่อมต่อ","trading-assistant.form.strategyName":"ชื่อกรมธรรม์","trading-assistant.form.symbol":"คู่การซื้อขาย","trading-assistant.form.symbolHint":"ขณะนี้รองรับเฉพาะคู่การซื้อขายสกุลเงินดิจิทัลเท่านั้น","trading-assistant.form.initialCapital":"จำนวนเงินลงทุน","trading-assistant.form.marketType":"ประเภทตลาด","trading-assistant.form.marketTypeFutures":"สัญญา","trading-assistant.form.marketTypeSpot":"จุดสินค้า","trading-assistant.form.marketTypeHint":"สัญญารองรับการซื้อขายสองทางและเลเวอเรจ ในขณะที่สปอตรองรับเฉพาะตำแหน่งซื้อและเลเวอเรจคงที่ที่ 1x","trading-assistant.form.leverage":"ใช้ประโยชน์หลายอย่าง","trading-assistant.form.leverageHint":"สัญญา: 1-125 ครั้ง, จุด: แก้ไข 1 ครั้ง","trading-assistant.form.spotLeverageFixed":"เลเวอเรจการซื้อขายสปอตคงที่ที่ 1x","trading-assistant.form.spotOnlyLongHint":"การซื้อขายแบบสปอตรองรับเฉพาะตำแหน่งซื้อเท่านั้น","trading-assistant.form.tradeDirection":"ทิศทางการซื้อขาย","trading-assistant.form.tradeDirectionLong":"ยาวเท่านั้น","trading-assistant.form.tradeDirectionShort":"สั้นเท่านั้น","trading-assistant.form.tradeDirectionBoth":"ธุรกรรมสองทาง","trading-assistant.form.timeframe":"ช่วงเวลา","trading-assistant.form.klinePeriod":"ช่วงเวลา K-Line","trading-assistant.form.timeframe1m":"1 นาที","trading-assistant.form.timeframe5m":"5 นาที","trading-assistant.form.timeframe15m":"15 นาที","trading-assistant.form.timeframe30m":"30 นาที","trading-assistant.form.timeframe1H":"1 ชั่วโมง","trading-assistant.form.timeframe4H":"4 ชั่วโมง","trading-assistant.form.timeframe1D":"1 วัน","trading-assistant.form.selectStrategyType":"เลือกประเภทกลยุทธ์","trading-assistant.form.indicatorStrategy":"กลยุทธ์ตัวบ่งชี้","trading-assistant.form.indicatorStrategyDesc":"กลยุทธ์การซื้อขายอัตโนมัติตามตัวบ่งชี้ทางเทคนิค","trading-assistant.form.aiStrategy":"กลยุทธ์ AI","trading-assistant.form.aiStrategyDesc":"กลยุทธ์การซื้อขายอัตโนมัติตามการตัดสินใจอัจฉริยะของ AI","trading-assistant.form.enableAiFilter":"เปิดใช้งานตัวกรองการตัดสินใจอัจฉริยะ AI","trading-assistant.form.enableAiFilterHint":"เมื่อเปิดใช้งาน สัญญาณตัวบ่งชี้จะถูกกรองโดย AI เพื่อปรับปรุงคุณภาพการซื้อขาย","trading-assistant.form.aiFilterPrompt":"ข้อความแจ้งแบบกำหนดเอง","trading-assistant.form.aiFilterPromptHint":"ให้คำแนะนำแบบกำหนดเองสำหรับการกรอง AI เว้นว่างไว้เพื่อใช้ค่าเริ่มต้นของระบบ","trading-assistant.validation.strategyTypeRequired":"กรุณาเลือกประเภทกลยุทธ์","trading-assistant.form.advancedSettings":"การตั้งค่าขั้นสูง","trading-assistant.form.orderMode":"โหมดการสั่งซื้อ","trading-assistant.form.orderModeMaker":"ผู้สร้าง","trading-assistant.form.orderModeTaker":"ราคาตลาด (เทคเกอร์)","trading-assistant.form.orderModeHint":"โหมดคำสั่งซื้อที่รอดำเนินการใช้คำสั่งซื้อแบบจำกัดและค่าธรรมเนียมการจัดการต่ำกว่า โหมดราคาตลาดจะดำเนินการทันทีและค่าธรรมเนียมการจัดการจะสูงขึ้น","trading-assistant.form.makerWaitSec":"เวลารอสำหรับคำสั่งซื้อที่รอดำเนินการ (วินาที)","trading-assistant.form.makerWaitSecHint":"เวลาที่ต้องรอการทำธุรกรรมหลังจากทำการสั่งซื้อ ยกเลิกและลองอีกครั้งหลังจากหมดเวลา","trading-assistant.form.makerRetries":"จำนวนการลองใหม่สำหรับคำสั่งซื้อที่รอดำเนินการ","trading-assistant.form.makerRetriesHint":"จำนวนครั้งสูงสุดในการลองใหม่เมื่อไม่ได้ดำเนินการคำสั่งซื้อที่รอดำเนินการ","trading-assistant.form.fallbackToMarket":"คำสั่งซื้อที่รอดำเนินการล้มเหลวและราคาตลาดถูกลดระดับลง","trading-assistant.form.fallbackToMarketHint":"เมื่อการเปิด/ปิดคำสั่งซื้อที่รอดำเนินการไม่เสร็จสมบูรณ์ ควรดาวน์เกรดเป็นคำสั่งซื้อในตลาดเพื่อให้แน่ใจว่าธุรกรรมจะเสร็จสมบูรณ์หรือไม่","trading-assistant.form.marginMode":"โหมดระยะขอบ","trading-assistant.form.marginModeCross":"โกดังเต็ม","trading-assistant.form.marginModeIsolated":"ตำแหน่งที่โดดเดี่ยว","trading-assistant.form.stopLossPct":"อัตราการสูญเสียหยุด (%)","trading-assistant.form.stopLossPctHint":"ตั้งค่าเปอร์เซ็นต์การหยุดการขาดทุน 0 หมายถึงไม่ได้เปิดใช้งานการหยุดการขาดทุน","trading-assistant.form.takeProfitPct":"อัตราส่วนการทำกำไร (%)","trading-assistant.form.takeProfitPctHint":"ตั้งค่าเปอร์เซ็นต์การทำกำไร 0 หมายถึงปิดการใช้งานการทำกำไร","trading-assistant.form.signalMode":"โหมดสัญญาณ","trading-assistant.form.signalModeConfirmed":"ยืนยันโหมด","trading-assistant.form.signalModeAggressive":"โหมดก้าวร้าว","trading-assistant.form.signalModeHint":"โหมดการยืนยัน: ตรวจสอบเฉพาะเส้น K ที่เสร็จสมบูรณ์เท่านั้น โหมดก้าวร้าว: ตรวจสอบการสร้างเส้น K ด้วย","trading-assistant.form.cancel":"ยกเลิก","trading-assistant.form.prev":"ขั้นตอนก่อนหน้า","trading-assistant.form.next":"ขั้นตอนต่อไป","trading-assistant.form.confirmCreate":"ยืนยันการสร้าง","trading-assistant.form.confirmEdit":"ยืนยันการเปลี่ยนแปลง","trading-assistant.messages.createSuccess":"สร้างกลยุทธ์สำเร็จแล้ว","trading-assistant.messages.createFailed":"ไม่สามารถสร้างนโยบายได้","trading-assistant.messages.updateSuccess":"อัปเดตนโยบายสำเร็จแล้ว","trading-assistant.messages.updateFailed":"อัปเดตนโยบายไม่สำเร็จ","trading-assistant.messages.deleteSuccess":"ลบนโยบายสำเร็จแล้ว","trading-assistant.messages.deleteFailed":"ลบนโยบายล้มเหลว","trading-assistant.messages.startSuccess":"กลยุทธ์เริ่มต้นได้สำเร็จ","trading-assistant.messages.startFailed":"ไม่สามารถเริ่มนโยบายได้","trading-assistant.messages.stopSuccess":"กลยุทธ์หยุดสำเร็จ","trading-assistant.messages.stopFailed":"กลยุทธ์หยุดล้มเหลว","trading-assistant.messages.loadFailed":"ไม่สามารถรับรายการนโยบาย","trading-assistant.messages.runningWarning":"กลยุทธ์กำลังทำงานอยู่ โปรดหยุดกลยุทธ์ก่อนที่จะแก้ไข","trading-assistant.messages.deleteConfirmWithName":'คุณแน่ใจหรือไม่ว่าต้องการลบนโยบาย "{name}" การดำเนินการนี้ไม่สามารถย้อนกลับได้',"trading-assistant.messages.deleteConfirm":"คุณแน่ใจหรือไม่ว่าต้องการลบนโยบายนี้การดำเนินการนี้ไม่สามารถย้อนกลับได้","trading-assistant.messages.loadTradesFailed":"ไม่สามารถรับบันทึกธุรกรรมได้","trading-assistant.messages.loadPositionsFailed":"ไม่สามารถรับบันทึกตำแหน่งได้","trading-assistant.messages.loadEquityFailed":"ไม่สามารถรับเส้นโค้งส่วนของผู้ถือหุ้นได้","trading-assistant.messages.loadIndicatorsFailed":"ไม่สามารถโหลดรายการตัวบ่งชี้ โปรดลองอีกครั้งในภายหลัง","trading-assistant.messages.spotLimitations":"การซื้อขายแบบสปอตได้รับการตั้งค่าโดยอัตโนมัติเป็นระยะยาวเท่านั้น เลเวอเรจ 1 เท่า","trading-assistant.messages.autoFillApiConfig":"การกำหนดค่า API ในอดีตของการแลกเปลี่ยนได้รับการเติมข้อมูลโดยอัตโนมัติ","trading-assistant.placeholders.selectIndicator":"โปรดเลือกตัวบ่งชี้","trading-assistant.placeholders.selectExchange":"กรุณาเลือกการแลกเปลี่ยน","trading-assistant.placeholders.inputApiKey":"กรุณากรอกคีย์ API","trading-assistant.placeholders.inputSecretKey":"กรุณากรอกรหัสลับ","trading-assistant.placeholders.inputPassphrase":"กรุณากรอกรหัสผ่าน","trading-assistant.placeholders.inputStrategyName":"โปรดป้อนชื่อนโยบาย","trading-assistant.placeholders.selectSymbol":"กรุณาเลือกคู่การซื้อขาย","trading-assistant.placeholders.selectTimeframe":"โปรดเลือกช่วงเวลา","trading-assistant.placeholders.selectKlinePeriod":"โปรดเลือกช่วงเวลา K-Line","trading-assistant.placeholders.inputAiFilterPrompt":"กรุณาใส่ข้อความแจ้งแบบกำหนดเอง (ไม่บังคับ)","trading-assistant.validation.indicatorRequired":"โปรดเลือกตัวบ่งชี้","trading-assistant.validation.exchangeRequired":"กรุณาเลือกการแลกเปลี่ยน","trading-assistant.validation.apiKeyRequired":"กรุณากรอกคีย์ API","trading-assistant.validation.secretKeyRequired":"กรุณากรอกรหัสลับ","trading-assistant.validation.passphraseRequired":"กรุณากรอกรหัสผ่าน","trading-assistant.validation.exchangeConfigIncomplete":"กรุณากรอกข้อมูลการกำหนดค่าการแลกเปลี่ยนให้ครบถ้วน","trading-assistant.validation.testConnectionRequired":'กรุณาคลิกปุ่ม "ทดสอบการเชื่อมต่อ" และตรวจสอบให้แน่ใจว่าการเชื่อมต่อสำเร็จ',"trading-assistant.validation.testConnectionFailed":"การทดสอบการเชื่อมต่อล้มเหลว กรุณาตรวจสอบการกำหนดค่าและทดสอบอีกครั้ง","trading-assistant.validation.credentialRequired":"กรุณาเพิ่มและทดสอบข้อมูลประจำตัวของตลาดแลกเปลี่ยนในศูนย์ส่วนตัวก่อน","trading-assistant.validation.strategyNameRequired":"โปรดป้อนชื่อนโยบาย","trading-assistant.validation.symbolRequired":"กรุณาเลือกคู่การซื้อขาย","trading-assistant.validation.initialCapitalRequired":"กรุณากรอกจำนวนเงินลงทุน","trading-assistant.validation.leverageRequired":"กรุณากรอกอัตราส่วนเลเวอเรจ","trading-assistant.table.time":"เวลา","trading-assistant.table.type":"พิมพ์","trading-assistant.table.price":"ราคา","trading-assistant.table.amount":"ปริมาณ","trading-assistant.table.value":"จำนวน","trading-assistant.table.commission":"ค่าธรรมเนียมการจัดการ","trading-assistant.table.symbol":"คู่การซื้อขาย","trading-assistant.table.side":"ทิศทาง","trading-assistant.table.size":"ปริมาณตำแหน่ง","trading-assistant.table.entryPrice":"ราคาเปิด","trading-assistant.table.currentPrice":"ราคาปัจจุบัน","trading-assistant.table.unrealizedPnl":"กำไรหรือขาดทุนที่ยังไม่เกิดขึ้นจริง","trading-assistant.table.pnlPercent":"อัตราส่วนกำไรและขาดทุน","trading-assistant.table.buy":"ซื้อ","trading-assistant.table.sell":"ขาย","trading-assistant.table.long":"ยาวไป","trading-assistant.table.short":"สั้น","trading-assistant.table.noPositions":"ยังไม่มีตำแหน่ง","trading-assistant.detail.title":"รายละเอียดกลยุทธ์","trading-assistant.detail.strategyName":"ชื่อกรมธรรม์","trading-assistant.detail.strategyType":"ประเภทกลยุทธ์","trading-assistant.detail.status":"สถานะ","trading-assistant.detail.tradingMode":"รูปแบบการซื้อขาย","trading-assistant.detail.exchange":"แลกเปลี่ยน","trading-assistant.detail.initialCapital":"ทุนเริ่มต้น","trading-assistant.detail.totalInvestment":"จำนวนเงินลงทุนทั้งหมด","trading-assistant.detail.currentEquity":"มูลค่าสุทธิในปัจจุบัน","trading-assistant.detail.totalPnl":"กำไรและขาดทุนทั้งหมด","trading-assistant.detail.indicatorName":"ชื่อตัวบ่งชี้","trading-assistant.detail.maxLeverage":"เลเวอเรจสูงสุด","trading-assistant.detail.decideInterval":"ช่วงการตัดสินใจ","trading-assistant.detail.symbols":"วัตถุธุรกรรม","trading-assistant.detail.createdAt":"เวลาสร้าง","trading-assistant.detail.updatedAt":"เวลาอัปเดต","trading-assistant.detail.llmConfig":"การกำหนดค่าโมเดล AI","trading-assistant.detail.exchangeConfig":"การกำหนดค่าการแลกเปลี่ยน","trading-assistant.detail.provider":"ผู้ให้บริการ","trading-assistant.detail.modelId":"รหัสรุ่น","trading-assistant.detail.close":"ปิด","trading-assistant.detail.loadFailed":"ไม่สามารถรับรายละเอียดนโยบายได้","trading-assistant.equity.noData":"ยังไม่มีข้อมูลมูลค่าสุทธิ","trading-assistant.equity.equity":"มูลค่าสุทธิ","trading-assistant.exchange.tradingMode":"รูปแบบการซื้อขาย","trading-assistant.exchange.virtual":"การซื้อขายจำลอง","trading-assistant.exchange.live":"การทำธุรกรรมจริง","trading-assistant.exchange.selectExchange":"เลือกการแลกเปลี่ยน","trading-assistant.exchange.walletAddress":"ที่อยู่กระเป๋าเงิน","trading-assistant.exchange.walletAddressPlaceholder":"กรุณากรอกที่อยู่กระเป๋าเงินของคุณ (เริ่มต้นด้วย 0x)","trading-assistant.exchange.privateKey":"รหัสส่วนตัว","trading-assistant.exchange.privateKeyPlaceholder":"กรุณากรอกรหัสส่วนตัว (64 ตัวอักษร)","trading-assistant.exchange.testConnection":"ทดสอบการเชื่อมต่อ","trading-assistant.exchange.connectionSuccess":"การเชื่อมต่อสำเร็จ","trading-assistant.exchange.connectionFailed":"การเชื่อมต่อล้มเหลว","trading-assistant.exchange.testFailed":"การทดสอบการเชื่อมต่อล้มเหลว","trading-assistant.exchange.fillComplete":"กรุณากรอกข้อมูลการกำหนดค่าการแลกเปลี่ยนให้ครบถ้วน","trading-assistant.strategyTypeOptions.ai":"กลยุทธ์ที่ขับเคลื่อนด้วย AI","trading-assistant.strategyTypeOptions.indicator":"กลยุทธ์ตัวบ่งชี้ทางเทคนิค","trading-assistant.strategyTypeOptions.aiDeveloping":"ฟังก์ชันกลยุทธ์ที่ขับเคลื่อนด้วย AI อยู่ระหว่างการพัฒนา ดังนั้นโปรดคอยติดตาม","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"คุณสมบัติกลยุทธ์ที่ขับเคลื่อนด้วย AI กำลังอยู่ในการพัฒนา","trading-assistant.indicatorType.trend":"แนวโน้ม","trading-assistant.indicatorType.momentum":"โมเมนตัม","trading-assistant.indicatorType.volatility":"ความผันผวน","trading-assistant.indicatorType.volume":"ปริมาณ","trading-assistant.indicatorType.custom":"ปรับแต่ง","trading-assistant.exchangeNames":{okx:"โอเคเอ็กซ์",binance:"ไบแนนซ์",hyperliquid:"ไฮเปอร์ลิควิด",blockchaincom:"Blockchain.com",coinbaseexchange:"คอยน์เบส",gate:"Gate.io",mexc:"เม็กซิโก",kraken:"คราเคน",bitfinex:"Bitfinex",bybit:"บายบิต",kucoin:"คูคอยน์",huobi:"หั่วปี้",bitget:"บิทเก็ต",bitmex:"BitMEX",deribit:"อนุมาน",phemex:"ฟีเม็กซ์",bitmart:"บิตมาร์ท",bitstamp:"บิตสแตมป์",bittrex:"บิทเทร็กซ์",poloniex:"โปโลนีกซ์",gemini:"ราศีเมถุน",cryptocom:"Crypto.com",bitflyer:"บิตฟลายเออร์",upbit:"อัพบิต",bithumb:"บิธัมบ์",coinone:"โคโนเน่",zb:"ซีบี",lbank:"แอลแบงค์",bibox:"ไบบ็อกซ์",bigone:"บิ๊กวัน",bitrue:"บิตทรู",coinex:"คอยน์เอ็กซ์",digifinex:"DigiFinex",ftx:"เอฟทีเอ็กซ์",ftxus:"FTX สหรัฐอเมริกา",binanceus:"Binance สหรัฐอเมริกา",binancecoinm:"Binance COIN-M",binanceusdm:"Binance USDⓈ-M",deepcoin:"ดีพคอยน์"},"ai-trading-assistant.title":"ผู้ช่วยการซื้อขาย AI","ai-trading-assistant.strategyList":"รายการกลยุทธ์","ai-trading-assistant.createStrategy":"สร้างนโยบาย","ai-trading-assistant.noStrategy":"ยังไม่มีกลยุทธ์","ai-trading-assistant.selectStrategy":"โปรดเลือกกลยุทธ์จากด้านซ้ายเพื่อดูรายละเอียด","ai-trading-assistant.startStrategy":"กลยุทธ์การเปิดตัว","ai-trading-assistant.stopStrategy":"กลยุทธ์การหยุด","ai-trading-assistant.editStrategy":"กลยุทธ์ด้านบรรณาธิการ","ai-trading-assistant.deleteStrategy":"ลบนโยบาย","ai-trading-assistant.status.running":"วิ่ง","ai-trading-assistant.status.stopped":"หยุดแล้ว","ai-trading-assistant.status.error":"ความผิดพลาด","ai-trading-assistant.tabs.tradingRecords":"ประวัติการทำธุรกรรม","ai-trading-assistant.tabs.positions":"บันทึกตำแหน่ง","ai-trading-assistant.tabs.aiDecisions":"บันทึกการตัดสินใจของ AI","ai-trading-assistant.tabs.equityCurve":"เส้นส่วนของผู้ถือหุ้น","ai-trading-assistant.form.createTitle":"สร้างกลยุทธ์การซื้อขายด้วย AI","ai-trading-assistant.form.editTitle":"แก้ไขกลยุทธ์การซื้อขาย AI","ai-trading-assistant.form.strategyName":"ชื่อกรมธรรม์","ai-trading-assistant.form.modelId":"โมเดลเอไอ","ai-trading-assistant.form.modelIdHint":"ใช้บริการระบบ OpenRouter โดยไม่ต้องกำหนดค่า API Key","ai-trading-assistant.form.decideInterval":"ช่วงการตัดสินใจ","ai-trading-assistant.form.decideInterval5m":"5 นาที","ai-trading-assistant.form.decideInterval10m":"10 นาที","ai-trading-assistant.form.decideInterval30m":"30 นาที","ai-trading-assistant.form.decideInterval1h":"1 ชั่วโมง","ai-trading-assistant.form.decideInterval4h":"4 ชั่วโมง","ai-trading-assistant.form.decideInterval1d":"1 วัน","ai-trading-assistant.form.decideInterval1w":"1 สัปดาห์","ai-trading-assistant.form.decideIntervalHint":"ช่วงเวลาที่ AI ในการตัดสินใจ","ai-trading-assistant.form.runPeriod":"วิ่งรอบ","ai-trading-assistant.form.runPeriodHint":"เวลาเริ่มต้นและเวลาสิ้นสุดของการดำเนินกลยุทธ์","ai-trading-assistant.form.startDate":"วันที่เริ่มต้น","ai-trading-assistant.form.endDate":"วันที่สิ้นสุด","ai-trading-assistant.form.qdtCostTitle":"คำแนะนำการหักเงินของ QDT","ai-trading-assistant.form.qdtCostHint":"การตัดสินใจของ AI แต่ละครั้งจะถูกหักออก {cost} QDT โปรดตรวจสอบให้แน่ใจว่าบัญชีของคุณมียอดคงเหลือ QDT เพียงพอ ในระหว่างการดำเนินการตามกลยุทธ์ค่าธรรมเนียมจะถูกหักแบบเรียลไทม์สำหรับการตัดสินใจแต่ละครั้ง","ai-trading-assistant.form.apiKey":"คีย์ API","ai-trading-assistant.form.exchange":"เลือกการแลกเปลี่ยน","ai-trading-assistant.form.secretKey":"รหัสลับ","ai-trading-assistant.form.passphrase":"ข้อความรหัสผ่าน","ai-trading-assistant.form.testConnection":"ทดสอบการเชื่อมต่อ","ai-trading-assistant.form.symbol":"คู่การซื้อขาย","ai-trading-assistant.form.symbolHint":"เลือกคู่การซื้อขายที่จะซื้อขาย","ai-trading-assistant.form.initialCapital":"จำนวนเงินที่ลงทุน (มาร์จิ้น)","ai-trading-assistant.form.leverage":"ใช้ประโยชน์หลายอย่าง","ai-trading-assistant.form.timeframe":"ช่วงเวลา","ai-trading-assistant.form.timeframe1m":"1 นาที","ai-trading-assistant.form.timeframe5m":"5 นาที","ai-trading-assistant.form.timeframe15m":"15 นาที","ai-trading-assistant.form.timeframe30m":"30 นาที","ai-trading-assistant.form.timeframe1H":"1 ชั่วโมง","ai-trading-assistant.form.timeframe4H":"4 ชั่วโมง","ai-trading-assistant.form.timeframe1D":"1 วัน","ai-trading-assistant.form.marketType":"ประเภทตลาด","ai-trading-assistant.form.marketTypeFutures":"สัญญา","ai-trading-assistant.form.marketTypeSpot":"จุดสินค้า","ai-trading-assistant.form.totalPnl":"กำไรและขาดทุนทั้งหมด","ai-trading-assistant.form.customPrompt":"คำแจ้งที่กำหนดเอง","ai-trading-assistant.form.customPromptHint":"ตัวเลือกเสริม ใช้เพื่อปรับแต่งกลยุทธ์การซื้อขาย AI และตรรกะในการตัดสินใจ","ai-trading-assistant.form.cancel":"ยกเลิก","ai-trading-assistant.form.prev":"ขั้นตอนก่อนหน้า","ai-trading-assistant.form.next":"ขั้นตอนต่อไป","ai-trading-assistant.form.confirmCreate":"ยืนยันการสร้าง","ai-trading-assistant.form.confirmEdit":"ยืนยันการเปลี่ยนแปลง","ai-trading-assistant.messages.createSuccess":"สร้างกลยุทธ์สำเร็จแล้ว","ai-trading-assistant.messages.createFailed":"ไม่สามารถสร้างนโยบายได้","ai-trading-assistant.messages.updateSuccess":"อัปเดตนโยบายสำเร็จแล้ว","ai-trading-assistant.messages.updateFailed":"อัปเดตนโยบายไม่สำเร็จ","ai-trading-assistant.messages.deleteSuccess":"ลบนโยบายสำเร็จแล้ว","ai-trading-assistant.messages.deleteFailed":"ลบนโยบายล้มเหลว","ai-trading-assistant.messages.startSuccess":"กลยุทธ์เริ่มต้นได้สำเร็จ","ai-trading-assistant.messages.startFailed":"ไม่สามารถเริ่มนโยบายได้","ai-trading-assistant.messages.stopSuccess":"กลยุทธ์หยุดสำเร็จ","ai-trading-assistant.messages.stopFailed":"กลยุทธ์หยุดล้มเหลว","ai-trading-assistant.messages.loadFailed":"ไม่สามารถรับรายการนโยบาย","ai-trading-assistant.messages.loadDecisionsFailed":"ไม่สามารถรับบันทึกการตัดสินใจของ AI","ai-trading-assistant.messages.deleteConfirm":"คุณแน่ใจหรือไม่ว่าต้องการลบนโยบายนี้การดำเนินการนี้ไม่สามารถย้อนกลับได้","ai-trading-assistant.placeholders.inputStrategyName":"โปรดป้อนชื่อนโยบาย","ai-trading-assistant.placeholders.selectModelId":"โปรดเลือกโมเดล AI","ai-trading-assistant.placeholders.selectDecideInterval":"โปรดเลือกช่วงการตัดสินใจ","ai-trading-assistant.placeholders.startTime":"เวลาเริ่มต้น","ai-trading-assistant.placeholders.endTime":"เวลาสิ้นสุด","ai-trading-assistant.placeholders.inputApiKey":"กรุณากรอกคีย์ API","ai-trading-assistant.placeholders.selectExchange":"กรุณาเลือกการแลกเปลี่ยน","ai-trading-assistant.placeholders.inputSecretKey":"กรุณากรอกรหัสลับ","ai-trading-assistant.placeholders.inputPassphrase":"กรุณากรอกรหัสผ่าน","ai-trading-assistant.placeholders.selectSymbol":"โปรดเลือกคู่การซื้อขาย เช่น BTC/USDT","ai-trading-assistant.placeholders.selectTimeframe":"โปรดเลือกช่วงเวลา","ai-trading-assistant.placeholders.inputCustomPrompt":"โปรดป้อนคำแจ้งที่กำหนดเอง (ไม่บังคับ)","ai-trading-assistant.validation.strategyNameRequired":"โปรดป้อนชื่อนโยบาย","ai-trading-assistant.validation.modelIdRequired":"โปรดเลือกโมเดล AI","ai-trading-assistant.validation.runPeriodRequired":"กรุณาเลือกรอบการทำงาน","ai-trading-assistant.validation.apiKeyRequired":"กรุณากรอกคีย์ API","ai-trading-assistant.validation.exchangeRequired":"กรุณาเลือกการแลกเปลี่ยน","ai-trading-assistant.validation.secretKeyRequired":"กรุณากรอกรหัสลับ","ai-trading-assistant.validation.symbolRequired":"กรุณาเลือกคู่การซื้อขาย","ai-trading-assistant.validation.initialCapitalRequired":"กรุณากรอกจำนวนเงินลงทุน","ai-trading-assistant.table.time":"เวลา","ai-trading-assistant.table.type":"พิมพ์","ai-trading-assistant.table.price":"ราคา","ai-trading-assistant.table.amount":"ปริมาณ","ai-trading-assistant.table.value":"จำนวน","ai-trading-assistant.table.symbol":"คู่การซื้อขาย","ai-trading-assistant.table.side":"ทิศทาง","ai-trading-assistant.table.size":"ปริมาณตำแหน่ง","ai-trading-assistant.table.entryPrice":"ราคาเปิด","ai-trading-assistant.table.currentPrice":"ราคาปัจจุบัน","ai-trading-assistant.table.unrealizedPnl":"กำไรหรือขาดทุนที่ยังไม่เกิดขึ้นจริง","ai-trading-assistant.table.profit":"กำไรและขาดทุน","ai-trading-assistant.table.openLong":"เปิดยาวๆ","ai-trading-assistant.table.closeLong":"ปินตัว","ai-trading-assistant.table.openShort":"เปิดสั้น","ai-trading-assistant.table.closeShort":"ว่างเปล่า","ai-trading-assistant.table.addLong":"กาดอต","ai-trading-assistant.table.addShort":"เพิ่มสั้น","ai-trading-assistant.table.closeShortProfit":"ขายทำกำไรจากสถานะขาย","ai-trading-assistant.table.closeShortStop":"หยุดการสูญเสีย","ai-trading-assistant.table.closeLongProfit":"หยุดยาวและทำกำไร","ai-trading-assistant.table.closeLongStop":"หยุดการสูญเสีย","ai-trading-assistant.table.buy":"ซื้อ","ai-trading-assistant.table.sell":"ขาย","ai-trading-assistant.table.long":"ยาวไป","ai-trading-assistant.table.short":"สั้น","ai-trading-assistant.table.hold":"ถือ","ai-trading-assistant.table.reasoning":"เหตุผลในการวิเคราะห์","ai-trading-assistant.table.decisions":"การตัดสินใจ","ai-trading-assistant.table.riskAssessment":"การประเมินความเสี่ยง","ai-trading-assistant.table.confidence":"ความมั่นใจ","ai-trading-assistant.table.totalRecords":"รวม {total} บันทึก","ai-trading-assistant.table.noPositions":"ยังไม่มีตำแหน่ง","ai-trading-assistant.detail.title":"รายละเอียดกลยุทธ์","ai-trading-assistant.equity.noData":"ยังไม่มีข้อมูลมูลค่าสุทธิ","ai-trading-assistant.equity.equity":"มูลค่าสุทธิ","ai-trading-assistant.exchange.testFailed":"การทดสอบการเชื่อมต่อล้มเหลว","ai-trading-assistant.exchange.connectionSuccess":"การเชื่อมต่อสำเร็จ","ai-trading-assistant.exchange.connectionFailed":"การเชื่อมต่อล้มเหลว","ai-trading-assistant.form.advancedSettings":"การตั้งค่าขั้นสูง","ai-trading-assistant.form.orderMode":"โหมดการสั่งซื้อ","ai-trading-assistant.form.orderModeMaker":"ผู้สร้าง","ai-trading-assistant.form.orderModeTaker":"ราคาตลาด (เทคเกอร์)","ai-trading-assistant.form.orderModeHint":"โหมดคำสั่งซื้อที่รอดำเนินการใช้คำสั่งซื้อแบบจำกัดและค่าธรรมเนียมการจัดการต่ำกว่า โหมดราคาตลาดจะดำเนินการทันทีและค่าธรรมเนียมการจัดการจะสูงขึ้น","ai-trading-assistant.form.makerWaitSec":"เวลารอสำหรับคำสั่งซื้อที่รอดำเนินการ (วินาที)","ai-trading-assistant.form.makerWaitSecHint":"เวลาที่ต้องรอการทำธุรกรรมหลังจากทำการสั่งซื้อ ยกเลิกและลองอีกครั้งหลังจากหมดเวลา","ai-trading-assistant.form.makerRetries":"จำนวนการลองใหม่สำหรับคำสั่งซื้อที่รอดำเนินการ","ai-trading-assistant.form.makerRetriesHint":"จำนวนครั้งสูงสุดในการลองใหม่เมื่อไม่ได้ดำเนินการคำสั่งซื้อที่รอดำเนินการ","ai-trading-assistant.form.fallbackToMarket":"คำสั่งซื้อที่รอดำเนินการล้มเหลวและราคาตลาดถูกลดระดับลง","ai-trading-assistant.form.fallbackToMarketHint":"เมื่อการเปิด/ปิดคำสั่งซื้อที่รอดำเนินการไม่เสร็จสมบูรณ์ ควรดาวน์เกรดเป็นคำสั่งซื้อในตลาดเพื่อให้แน่ใจว่าธุรกรรมจะเสร็จสมบูรณ์หรือไม่","ai-trading-assistant.form.marginMode":"โหมดระยะขอบ","ai-trading-assistant.form.marginModeCross":"โกดังเต็ม","ai-trading-assistant.form.marginModeIsolated":"ตำแหน่งที่โดดเดี่ยว","ai-analysis.title":"เครื่องมือการซื้อขายควอนตัม","ai-analysis.system.online":"ออนไลน์","ai-analysis.system.agents":"ตัวแทน","ai-analysis.system.active":"คล่องแคล่ว","ai-analysis.system.stage":"เวที","ai-analysis.panel.roster":"รายชื่อตัวแทน","ai-analysis.panel.thinking":"กำลังคิด...","ai-analysis.panel.done":"เสร็จ","ai-analysis.panel.standby":"สแตนด์บาย","ai-analysis.input.title":"เครื่องมือการซื้อขายควอนตัม","ai-analysis.input.placeholder":"เลือกสินทรัพย์เป้าหมาย (เช่น BTC/USDT)","ai-analysis.input.watchlist":"หุ้นทางเลือก","ai-analysis.input.start":"เริ่มการวิเคราะห์","ai-analysis.input.recent":"งานล่าสุด:","ai-analysis.vis.stage":"เวที","ai-analysis.vis.processing":"กำลังประมวลผล","ai-analysis.result.complete":"การวิเคราะห์เสร็จสมบูรณ์","ai-analysis.result.signal":"สัญญาณสุดท้าย","ai-analysis.result.confidence":"ความมั่นใจ:","ai-analysis.result.new":"การวิเคราะห์ใหม่","ai-analysis.result.full":"ดูรายงานฉบับเต็ม","ai-analysis.logs.title":"บันทึกของระบบ","ai-analysis.modal.title":"รายงานที่เป็นความลับ","ai-analysis.modal.fundamental":"การวิเคราะห์พื้นฐาน","ai-analysis.modal.technical":"การวิเคราะห์ทางเทคนิค","ai-analysis.modal.sentiment":"การวิเคราะห์อารมณ์","ai-analysis.modal.risk":"การประเมินความเสี่ยง","ai-analysis.stage.idle":"สแตนด์บาย","ai-analysis.stage.1":"ระยะที่หนึ่ง: การวิเคราะห์หลายมิติ","ai-analysis.stage.2":"ระยะที่สอง: การอภิปรายระยะยาว-ระยะสั้น","ai-analysis.stage.3":"ระยะที่สาม: การวางแผนเชิงกลยุทธ์","ai-analysis.stage.4":"ขั้นตอนที่สี่: การทบทวนการควบคุมความเสี่ยง","ai-analysis.stage.complete":"เสร็จ","ai-analysis.agent.investment_director":"ผู้อำนวยการฝ่ายการลงทุน","ai-analysis.agent.role.investment_director":"การวิเคราะห์ที่ครอบคลุมและข้อสรุปขั้นสุดท้าย","ai-analysis.agent.market":"นักวิเคราะห์ตลาด","ai-analysis.agent.role.market":"เทคโนโลยีและข้อมูลการตลาด","ai-analysis.agent.fundamental":"นักวิเคราะห์พื้นฐาน","ai-analysis.agent.role.fundamental":"การเงินและการประเมินค่า","ai-analysis.agent.technical":"นักวิเคราะห์ทางเทคนิค","ai-analysis.agent.role.technical":"ตัวชี้วัดและแผนภูมิทางเทคนิค","ai-analysis.agent.news":"นักวิเคราะห์ข่าว","ai-analysis.agent.role.news":"ตัวกรองข่าวทั่วโลก","ai-analysis.agent.sentiment":"นักวิเคราะห์ความรู้สึก","ai-analysis.agent.role.sentiment":"สังคมและอารมณ์","ai-analysis.agent.risk":"นักวิเคราะห์ความเสี่ยง","ai-analysis.agent.role.risk":"การตรวจสอบความเสี่ยงเบื้องต้น","ai-analysis.agent.bull":"นักวิจัยรั้น","ai-analysis.agent.role.bull":"การขุดตัวเร่งปฏิกิริยาการเติบโต","ai-analysis.agent.bear":"นักวิจัยขาลง","ai-analysis.agent.role.bear":"การขุดความเสี่ยงและข้อบกพร่อง","ai-analysis.agent.manager":"ผู้จัดการฝ่ายวิจัย","ai-analysis.agent.role.manager":"ผู้ดูแลการอภิปราย","ai-analysis.agent.trader":"พ่อค้า","ai-analysis.agent.role.trader":"นักยุทธศาสตร์บริหาร","ai-analysis.agent.risky":"นักวิเคราะห์กิจกรรม","ai-analysis.agent.role.risky":"กลยุทธ์เชิงรุก","ai-analysis.agent.neutral":"นักวิเคราะห์ความสมดุล","ai-analysis.agent.role.neutral":"กลยุทธ์การสร้างสมดุล","ai-analysis.agent.safe":"นักวิเคราะห์อนุรักษ์นิยม","ai-analysis.agent.role.safe":"กลยุทธ์อนุรักษ์นิยม","ai-analysis.agent.cro":"ผู้จัดการฝ่ายควบคุมความเสี่ยง (CRO)","ai-analysis.agent.role.cro":"อำนาจในการตัดสินใจขั้นสุดท้าย","ai-analysis.script.market":"กำลังดึงข้อมูล OHLCV จากการแลกเปลี่ยนหลัก...","ai-analysis.script.fundamental":"กำลังดึงรายงานทางการเงินรายไตรมาส...","ai-analysis.script.technical":"กำลังวิเคราะห์ตัวชี้วัดทางเทคนิคและรูปแบบกราฟ...","ai-analysis.script.news":"กำลังสแกนข่าวการเงินทั่วโลก...","ai-analysis.script.sentiment":"วิเคราะห์เทรนด์โซเชียลมีเดีย...","ai-analysis.script.risk":"กำลังคำนวณความผันผวนในอดีต...","invite.inviteLink":"ลิงค์คำเชิญ","invite.copy":"คัดลอกลิงก์","invite.copySuccess":"คัดลอกสำเร็จ!","invite.copyFailed":"การคัดลอกล้มเหลว โปรดคัดลอกด้วยตนเอง","invite.noInviteLink":"ไม่ได้สร้างลิงก์คำเชิญ","invite.totalInvites":"คำเชิญสะสม","invite.totalReward":"รางวัลสะสม","invite.rules":"กฎการเชิญชวน","invite.rule1":"ทุกครั้งที่คุณเชิญเพื่อนมาลงทะเบียนสำเร็จ คุณจะได้รับรางวัล","invite.rule2":"หากเพื่อนที่ได้รับเชิญทำธุรกรรมครั้งแรกสำเร็จ คุณจะได้รับรางวัลเพิ่มเติม","invite.rule3":"รางวัลคำเชิญจะถูกส่งไปยังบัญชีของคุณโดยตรง","invite.inviteList":"รายการเชิญ","invite.tasks":"ศูนย์ภารกิจ","invite.inviteeName":"ผู้ได้รับเชิญ","invite.inviteTime":"เวลาเชิญ","invite.status":"สถานะ","invite.reward":"รางวัล","invite.active":"คล่องแคล่ว","invite.inactive":"ไม่ได้เปิดใช้งาน","invite.completed":"สมบูรณ์","invite.claimed":"ได้รับ","invite.pending":"ให้แล้วเสร็จ","invite.goToTask":"เพื่อให้เสร็จสมบูรณ์","invite.claimReward":"รับรางวัล","invite.verify":"การยืนยันเสร็จสมบูรณ์","invite.verifySuccess":"การยืนยันสำเร็จ!งานเสร็จสมบูรณ์","invite.verifyNotCompleted":"งานยังไม่เสร็จสมบูรณ์ กรุณาทำงานให้เสร็จก่อน","invite.verifyFailed":"การยืนยันล้มเหลว โปรดลองอีกครั้งในภายหลัง","invite.claimSuccess":"รับ {reward} QDT สำเร็จแล้ว!","invite.claimFailed":"ไม่สามารถรวบรวมได้ โปรดลองอีกครั้งในภายหลัง","invite.totalRecords":"รวม {total} บันทึก","invite.task.twitter.title":"รีทวีตไปที่ X (Twitter)","invite.task.twitter.desc":"แบ่งปันทวีตอย่างเป็นทางการของเราไปยังบัญชี X (Twitter) ของคุณ","invite.task.youtube.title":"ติดตามช่อง YouTube ของเรา","invite.task.youtube.desc":"สมัครสมาชิกและติดตามช่อง YouTube อย่างเป็นทางการของเรา","invite.task.telegram.title":"เข้าร่วมกลุ่มโทรเลข","invite.task.telegram.desc":"เข้าร่วมกลุ่มชุมชนโทรเลขอย่างเป็นทางการของเรา","invite.task.discord.title":"เข้าร่วมเซิร์ฟเวอร์ Discord","invite.task.discord.desc":"เข้าร่วมเซิร์ฟเวอร์ชุมชน Discord ของเรา",message:"-","layouts.usermenu.dialog.title":"ข้อมูล","layouts.usermenu.dialog.content":"คุณแน่ใจหรือไม่ว่าต้องการออกจากระบบ?","layouts.userLayout.title":"ค้นหาความจริงในความไม่แน่นอน","dashboard.indicator.boundary.message":"Note: The indicator script only computes plots + buy/sell signals. Position sizing, risk, scaling, fees/slippage belong to execution config.","dashboard.indicator.boundary.indicatorRule":"Keep the script to buy/sell only (and set df['buy']/df['sell']). Do NOT implement position management, TP/SL, scaling in the script.","dashboard.indicator.boundary.backtestRule":"Rule: If a bar has a main signal (buy/sell → open/close/reverse), scaling in/out is skipped on the same bar.","dashboard.indicator.guide.title":"Python Indicator & Strategy Development Guide","dashboard.indicator.guide.intro":"This platform supports writing custom technical indicators and trading signals using Python. The system includes built-in pandas and numpy data analysis libraries. You can use standard DataFrame operations to process K-line data and draw charts or mark buy/sell signals.","dashboard.indicator.guide.section1.title":"1. Runtime Environment & Predefined Variables","dashboard.indicator.guide.section1.env":"Your code runs in a browser-based Python environment (Pyodide).","dashboard.indicator.guide.section1.libs":"Pre-installed Libraries","dashboard.indicator.guide.section1.libsDesc":"The following libraries are imported by default, no need to import again:","dashboard.indicator.guide.section1.libsList":"pandas (pd), numpy (np), math, json","dashboard.indicator.guide.section1.data":"Input Data: df","dashboard.indicator.guide.section1.dataDesc":"The system automatically converts current K-line data into a Pandas DataFrame object, variable name is df.","dashboard.indicator.guide.section1.dataColumns":"df contains the following columns (all float type):","dashboard.indicator.guide.section1.dataColumnsList":"time (timestamp, seconds), open, high, low, close, volume","dashboard.indicator.guide.section1.dataNote":"Data index is arranged from old to new (0 is the earliest data, last row is the latest data).","dashboard.indicator.guide.section1.dataIndex":"Important: df index is timestamp (DatetimeIndex), please preserve the index, avoid using .values which loses the index.","dashboard.indicator.guide.section2.title":"2. Parameter Definition","dashboard.indicator.guide.section2.desc":"You can define variables as parameters at the beginning of your code. The system will try to parse statements like variable = value as adjustable parameters.","dashboard.indicator.guide.section2.example":"Parameter Example","dashboard.indicator.guide.section2.exampleCode":"span = 20 or multiplier = 2.0","dashboard.indicator.guide.section3.title":"3. Backtest Signal Setup (Important!)","dashboard.indicator.guide.section3.desc":"If you want your indicator to support backtesting, you must set the following two columns in your code:","dashboard.indicator.guide.section3.backtestRequired":"Required for Backtesting:","dashboard.indicator.guide.section3.backtestBuySignal":"df['buy_signal'] - Boolean Series, True indicates buy signal","dashboard.indicator.guide.section3.backtestSellSignal":"df['sell_signal'] - Boolean Series, True indicates sell signal","dashboard.indicator.guide.section3.backtestExample":"Example:","dashboard.indicator.guide.section3.backtestExampleCode":"df['buy_signal'] = condition_buy
df['sell_signal'] = condition_sell","dashboard.indicator.guide.section3.backtestNote":"Note: Even if you only set output.signals for chart display, you must set these two columns to enable backtesting.","dashboard.indicator.guide.section4.title":"4. Output Requirements: output","dashboard.indicator.guide.section4.desc":"At the end of code execution, you must define a dictionary named output to tell the chart how to display results.","dashboard.indicator.guide.section4.fields":"The output dictionary contains the following fields:","dashboard.indicator.guide.section4.plots":"plots - For drawing lines (e.g., moving averages, RSI)","dashboard.indicator.guide.section4.signals":"signals - For marking buy/sell signals (e.g., arrows, labels)","dashboard.indicator.guide.section4.name":"name - Indicator name (optional)","dashboard.indicator.guide.section4.calculatedVars":"calculatedVars - Calculated variables (optional, for displaying additional information)","dashboard.indicator.guide.section5.title":"5. Plot Configuration (Plots)","dashboard.indicator.guide.section5.desc":"Each object in the plots list represents a line.","dashboard.indicator.guide.section5.table.field":"Field","dashboard.indicator.guide.section5.table.type":"Type","dashboard.indicator.guide.section5.table.required":"Required","dashboard.indicator.guide.section5.table.requiredYes":"Yes","dashboard.indicator.guide.section5.table.requiredNo":"No","dashboard.indicator.guide.section5.table.desc":"Description","dashboard.indicator.guide.section5.table.name":"The name of the indicator line, displayed in the legend","dashboard.indicator.guide.section5.table.data":"Data list, length must match the number of rows in df. Recommended to use series.tolist()","dashboard.indicator.guide.section5.table.color":"Line color (Hex format, e.g. '#ff0000'). If not filled, the system will automatically assign","dashboard.indicator.guide.section5.table.typeDesc":"Chart type, default is 'line'","dashboard.indicator.guide.section5.table.overlay":"Important. True means display on main chart (with K-line), False means display on sub-chart (independent area)","dashboard.indicator.guide.section5.example":"Example: Draw Simple Moving Average (SMA)","dashboard.indicator.guide.section5.exampleCalc":"Calculate SMA","dashboard.indicator.guide.section5.exampleOutput":"Construct Output","dashboard.indicator.guide.section5.exampleOverlay":"Display on main chart","dashboard.indicator.guide.section6.title":"6. Signal Markers (Signals)","dashboard.indicator.guide.section6.desc":"signals are used to mark buy/sell points on specific K-lines through icons or text. Note: This is only for chart display. The backtest system uses df['buy_signal'] and df['sell_signal'].","dashboard.indicator.guide.section6.table.type":"Signal type: 'buy' (buy, marked below K-line) or 'sell' (sell, marked above K-line)","dashboard.indicator.guide.section6.table.data":"Signal data list. Fill price value at signal positions, fill None (or np.nan) at non-signal positions","dashboard.indicator.guide.section6.table.text":'Text displayed on the label (e.g. "B", "S", "Buy", "Sell")',"dashboard.indicator.guide.section6.table.color":"Marker color","dashboard.indicator.guide.section6.hint":"The system automatically handles positioning.","dashboard.indicator.guide.section6.buy":"Markers will be automatically positioned below the Low of the current K-line","dashboard.indicator.guide.section6.sell":"Markers will be automatically positioned above the High of the current K-line","dashboard.indicator.guide.section6.example":"Example: Draw Buy/Sell Signals","dashboard.indicator.guide.section6.exampleInit":"Initialize signal list, fill all with None","dashboard.indicator.guide.section6.exampleLogic":"Simple logic: mark buy when close price is greater than open price","dashboard.indicator.guide.section6.exampleNote":"In actual logic, please use loops or vectorized operations","dashboard.indicator.guide.section6.examplePrice":"Record price","dashboard.indicator.guide.section6.exampleText":"Buy","dashboard.indicator.guide.section7.title":"7. Complete Code Examples","dashboard.indicator.guide.section7.exampleA":"Example A: Dual EMA Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleACode":'# 1. Calculate indicators
df[\'ema_fast\'] = df[\'close\'].ewm(span=5, adjust=False).mean()
df[\'ema_slow\'] = df[\'close\'].ewm(span=13, adjust=False).mean()

# 2. Calculate crossover signals
cross_up = (df[\'ema_fast\'] > df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) <= df[\'ema_slow\'].shift(1))
cross_down = (df[\'ema_fast\'] < df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) >= df[\'ema_slow\'].shift(1))

# 3. 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = cross_up
df[\'close_long\'] = cross_down
df[\'open_short\'] = cross_down
df[\'close_short\'] = cross_up

# 4. Generate signal data for chart display
buy_signals = [df[\'low\'].iloc[i] * 0.995 if cross_up.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if cross_down.iloc[i] else None for i in range(len(df))]

# 5. Build output
output = {
"name": "Dual EMA Strategy",
"plots": [
{"name": "EMA 5", "data": df[\'ema_fast\'].tolist(), "color": "#FF6B6B", "overlay": True},
{"name": "EMA 13", "data": df[\'ema_slow\'].tolist(), "color": "#4ECDC4", "overlay": True}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section7.exampleB":"Example B: Bollinger Bands - Chart Display Only","dashboard.indicator.guide.section7.exampleBCode":'# Calculate Bollinger Bands (chart display only, no backtesting)
length = 20
mult = 2.0
df[\'sma\'] = df[\'close\'].rolling(length).mean()
df[\'std\'] = df[\'close\'].rolling(length).std()
df[\'upper\'] = df[\'sma\'] + mult * df[\'std\']
df[\'lower\'] = df[\'sma\'] - mult * df[\'std\']

output = {
"name": "Bollinger Bands",
"plots": [
{"name": "Upper", "data": df[\'upper\'].tolist(), "color": "#FF5252", "overlay": True},
{"name": "Middle", "data": df[\'sma\'].tolist(), "color": "#2196F3", "overlay": True},
{"name": "Lower", "data": df[\'lower\'].tolist(), "color": "#00E676", "overlay": True}
]
}',"dashboard.indicator.guide.section7.exampleC":"Example C: RSI Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleCCode":'# Calculate RSI
delta = df[\'close\'].diff()
up = delta.clip(lower=0)
down = -1 * delta.clip(upper=0)
ema_up = up.ewm(com=13, adjust=False).mean()
ema_down = down.ewm(com=13, adjust=False).mean()
rs = ema_up / ema_down
df[\'rsi\'] = 100 - (100 / (1 + rs))

# Generate trading signals
buy_condition = df[\'rsi\'] < 30 # Oversold buy
sell_condition = df[\'rsi\'] > 70 # Overbought sell

# 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = buy_condition
df[\'close_long\'] = sell_condition
df[\'open_short\'] = sell_condition
df[\'close_short\'] = buy_condition

# Generate chart signals
buy_signals = [df[\'low\'].iloc[i] * 0.995 if buy_condition.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if sell_condition.iloc[i] else None for i in range(len(df))]

output = {
"name": "RSI Strategy",
"plots": [
{"name": "RSI", "data": df[\'rsi\'].tolist(), "color": "#9C27B0", "overlay": False},
{"name": "Overbought", "data": [70] * len(df), "color": "#FF5252", "style": "dashed", "overlay": False},
{"name": "Oversold", "data": [30] * len(df), "color": "#00E676", "style": "dashed", "overlay": False}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section6.param":"Parameters","dashboard.indicator.guide.section6.calc":"Calculate","dashboard.indicator.guide.section6.output":"Output","dashboard.indicator.guide.section6.generate":"Generate signal data (initialize with None)","dashboard.indicator.guide.section6.subchart":"Display on sub-chart","dashboard.indicator.guide.section8.title":"8. Frequently Asked Questions (FAQ)","dashboard.indicator.guide.section8.q1":"Q: Why can't my indicator be backtested?","dashboard.indicator.guide.section8.a1":"A: The backtest system requires NEW signal columns: df['open_long'], df['close_long'], df['open_short'], df['close_short'] (boolean). Even if you set output.signals for chart display, you must set these columns to enable backtesting.","dashboard.indicator.guide.section8.q2":"Q: Data length mismatch?","dashboard.indicator.guide.section8.a2":"A: The data list in plots and signals must have exactly the same length as the K-line data. If you use df['xxx'].tolist(), there is usually no problem.","dashboard.indicator.guide.section8.q3":"Q: How to handle NaN (empty values)?","dashboard.indicator.guide.section8.a3":"A: Pandas calculations (such as rolling mean) will produce NaN at the beginning. The system will automatically convert NaN to null for chart rendering. You don't need to manually clean it, but if you need specific logic, you can use df.fillna(0) or other methods.","dashboard.indicator.guide.section8.q4":"Q: Index mismatch causing all signals to be NaN?","dashboard.indicator.guide.section8.a4":"A: Please ensure you preserve the original df index (timestamp). Avoid using .values to create new Series. Use columns directly like df['close'] for operations.","dashboard.indicator.guide.section8.q5":"Q: Can I use third-party network libraries?","dashboard.indicator.guide.section8.a5":"A: No. The runtime environment is a browser sandbox and cannot use libraries like requests to request external APIs, nor can it install additional pip packages. Limited to built-in libraries such as pandas, numpy, math, json.","dashboard.indicator.guide.section8.q6":"Q: How to debug code?","dashboard.indicator.guide.section8.a6":"A: If the chart does not display indicators, it is usually because the Python code has an error. Please check for syntax errors or array index out of bounds. It is recommended to debug the algorithm logic in a local Python environment first, then copy it in.","dashboard.indicator.guide.section8.q7":"Q: Backtest shows 0 signals?","dashboard.indicator.guide.section8.a7":"A: Please check the data type of df['open_long']/df['close_long']/df['open_short']/df['close_short']. They should be boolean (True/False), not numeric. Use condition.fillna(False).astype(bool) to ensure correct type.","dashboard.indicator.backtest.commissionHint":"Charged on notional value (incl. leverage) per trade; both entry & exit are deducted from balance.","dashboard.indicator.backtest.historyTitle":"Backtest History","dashboard.indicator.backtest.historyRefresh":"Refresh","dashboard.indicator.backtest.historyView":"View","dashboard.indicator.backtest.historyNoData":"No backtest history","dashboard.indicator.backtest.historyUseCurrent":"Only current symbol/timeframe","dashboard.indicator.backtest.historyFilterSymbol":"Symbol","dashboard.indicator.backtest.historyFilterTimeframe":"Timeframe","dashboard.indicator.backtest.historyApply":"Apply filters","dashboard.indicator.backtest.historyAIAnalyze":"AI Analyze","dashboard.indicator.backtest.historyAIAnalyzeTitle":"AI Suggestions","dashboard.indicator.backtest.historyNoAIResult":"No AI analysis result","dashboard.indicator.backtest.historyRunId":"Run ID","dashboard.indicator.backtest.historyCreatedAt":"Time","dashboard.indicator.backtest.historyRange":"Range","dashboard.indicator.backtest.historyStatus":"Status","dashboard.indicator.backtest.historyStatusSuccess":"Success","dashboard.indicator.backtest.historyStatusFailed":"Failed","dashboard.indicator.backtest.historyActions":"Actions","trading-assistant.exchange.ipWhitelistTip":"Please add the following IPs to the whitelist in your exchange API settings:","signal-robot.title":"Signal Robot Console","signal-robot.createBot":"Create New Bot","signal-robot.search.nameOrSymbol":"Name/Symbol","signal-robot.search.placeholder":"Search bot name or symbol","signal-robot.search.status":"Status","signal-robot.search.statusAll":"All","signal-robot.search.statusRunning":"Running","signal-robot.search.statusPaused":"Paused","signal-robot.search.query":"Query","signal-robot.search.reset":"Reset","signal-robot.table.botName":"Bot Name","signal-robot.table.symbolTimeframe":"Symbol/Timeframe","signal-robot.table.triggerStrategy":"Trigger Strategy","signal-robot.table.notificationChannels":"Notification Channels","signal-robot.table.status":"Status","signal-robot.table.action":"Action","signal-robot.table.triggerConditions":"{count} trigger conditions","signal-robot.table.monitoring":"Monitoring","signal-robot.table.paused":"Paused","signal-robot.table.edit":"Edit","signal-robot.table.pause":"Pause","signal-robot.table.start":"Start","signal-robot.table.delete":"Delete","signal-robot.table.deleteConfirm":"Are you sure you want to delete this bot?","signal-robot.table.deleteSuccess":"Deleted successfully","signal-robot.table.startSuccess":"Bot started","signal-robot.table.pauseSuccess":"Bot paused","signal-robot.channel.telegram":"Telegram","signal-robot.channel.discord":"Discord","signal-robot.channel.email":"Email","signal-robot.channel.webhook":"Webhook","signal-robot.channel.browser":"Browser Push","signal-robot.modal.createTitle":"Create New Signal Robot","signal-robot.modal.editTitle":"Edit Signal Robot","signal-robot.modal.step.basic":"Basic Settings","signal-robot.modal.step.entry":"Entry Strategy","signal-robot.modal.step.position":"Position Management","signal-robot.modal.step.risk":"Risk Control","signal-robot.modal.step.notify":"Notification Config","signal-robot.modal.prev":"Previous","signal-robot.modal.next":"Next","signal-robot.modal.preview":"Preview Backtest","signal-robot.modal.complete":"Complete & Run","signal-robot.modal.saveSuccess":"Saved successfully","signal-robot.modal.previewDeveloping":"Preview feature is under development...","signal-robot.modal.basicInfoRequired":"Please complete basic information","signal-robot.basic.alert":"Set basic information for the bot","signal-robot.basic.title":"Basic Information","signal-robot.basic.botName":"Bot Name","signal-robot.basic.botNamePlaceholder":"e.g.: BTC SuperTrend Strategy","signal-robot.basic.symbol":"Trading Pair","signal-robot.basic.symbolPlaceholder":"Select from watchlist","signal-robot.basic.noWatchlist":"No watchlist items, please add in market page first","signal-robot.basic.timeframe":"K-Line Period","signal-robot.basic.timeframe15m":"15 Minutes","signal-robot.basic.timeframe30m":"30 Minutes","signal-robot.basic.timeframe1h":"1 Hour","signal-robot.basic.timeframe4h":"4 Hours","signal-robot.basic.timeframe1d":"1 Day","signal-robot.basic.autoNameSuggestion":"{symbol} Signal Robot","signal-robot.entry.alert":"Trigger entry signal when all conditions below are met","signal-robot.entry.condition":"Condition {index}","signal-robot.entry.indicator":"Indicator","signal-robot.entry.indicatorSupertrend":"SuperTrend","signal-robot.entry.indicatorEma":"EMA (Exponential Moving Average)","signal-robot.entry.indicatorRsi":"RSI (Relative Strength Index)","signal-robot.entry.indicatorMacd":"MACD","signal-robot.entry.indicatorBollinger":"Bollinger Bands","signal-robot.entry.atrPeriod":"ATR Period","signal-robot.entry.multiplier":"Multiplier","signal-robot.entry.triggerSignal":"Trigger Signal","signal-robot.entry.signalTrendBullish":"Trend Bullish","signal-robot.entry.signalTrendBearish":"Trend Bearish","signal-robot.entry.signalIsUptrend":"Is Uptrend","signal-robot.entry.signalIsDowntrend":"Is Downtrend","signal-robot.entry.period":"Period","signal-robot.entry.compareCondition":"Compare Condition","signal-robot.entry.priceAbove":"Price > EMA (Price Above)","signal-robot.entry.priceBelow":"Price < EMA (Price Below)","signal-robot.entry.crossUp":"Price Crosses Above EMA (Golden Cross)","signal-robot.entry.crossDown":"Price Crosses Below EMA (Death Cross)","signal-robot.entry.compare":"Compare","signal-robot.entry.greaterThan":"Greater Than","signal-robot.entry.lessThan":"Less Than","signal-robot.entry.crossUpShort":"Cross Up","signal-robot.entry.crossDownShort":"Cross Down","signal-robot.entry.threshold":"Threshold","signal-robot.entry.selectIndicator":"Please select an indicator to configure parameters","signal-robot.entry.addCondition":"Add Condition","signal-robot.position.alert":"Configure initial position size, leverage and pyramiding rules","signal-robot.position.basicTitle":"Basic Position Management","signal-robot.position.initialSize":"Initial Size (Capital %)","signal-robot.position.initialSizeHint":"Recommended 5% - 20%","signal-robot.position.leverage":"Leverage","signal-robot.position.leverageHint":"Please ensure your exchange account supports this leverage","signal-robot.position.maxPyramiding":"Max Pyramiding Times","signal-robot.position.maxPyramidingHint":"0 means no pyramiding","signal-robot.position.pyramidingTitle":"Pyramiding Rules","signal-robot.position.pyramidingEnabled":"Enabled","signal-robot.position.pyramidingDisabled":"Disabled","signal-robot.position.pyramidingCondition":"Pyramiding Trigger Condition","signal-robot.position.priceRisePct":"Price Rises (Long) / Falls (Short)","signal-robot.position.profitPct":"Profit Reaches","signal-robot.position.triggerThreshold":"Trigger Threshold (%)","signal-robot.position.triggerThresholdHint":"e.g. 3%: add position once every 3% rise","signal-robot.position.addSize":"Single Add Size (Capital %)","signal-robot.position.pyramidingDisabledHint":"Pyramiding disabled, only initial position will be executed","signal-robot.risk.alert":"Configure take profit, stop loss and exit rules","signal-robot.risk.stopLossTitle":"Stop Loss","signal-robot.risk.stopLossEnabled":"Enabled","signal-robot.risk.stopLossDisabled":"Disabled","signal-robot.risk.stopLossType":"Stop Loss Type","signal-robot.risk.stopLossFixedPct":"Fixed Percentage","signal-robot.risk.stopLossAtrMultiplier":"ATR Multiplier","signal-robot.risk.stopLossValue":"Value","signal-robot.risk.stopLossFixedHint":"e.g. 2%: stop loss when loss reaches 2%","signal-robot.risk.stopLossAtrHint":"e.g. 2.0: stop loss when price touches ATR*2.0","signal-robot.risk.stopLossDisabledHint":"Stop loss disabled (high risk)","signal-robot.risk.trailingStopTitle":"Trailing Stop","signal-robot.risk.activationProfit":"Activation Profit (%)","signal-robot.risk.activationProfitHint":"Start trailing when profit reaches this level","signal-robot.risk.callbackPct":"Callback (%)","signal-robot.risk.callbackPctHint":"Trigger take profit when price falls from peak by this percentage","signal-robot.risk.trailingStopDisabledHint":"Trailing stop disabled","signal-robot.risk.otherExitTitle":"Other Exit Rules","signal-robot.risk.signalExit":"Allow Signal Exit","signal-robot.risk.signalExitHint":"Close position immediately when reverse signal appears (e.g. close long when short signal appears)","signal-robot.notify.alert":"Configure notification methods when signal is triggered","signal-robot.notify.channelTitle":"Notification Channels","signal-robot.notify.discordWebhook":"Discord Webhook","signal-robot.notify.genericWebhook":"Generic Webhook","signal-robot.notify.webhookUrl":"Webhook URL","signal-robot.notify.webhookUrlPlaceholder":"https://example.com/webhook","signal-robot.notify.discordUrl":"Discord URL","signal-robot.notify.discordUrlPlaceholder":"https://discord.com/api/webhooks/...","signal-robot.operator.greaterThan":"Greater Than","signal-robot.operator.lessThan":"Less Than","signal-robot.operator.equal":"Equal","signal-robot.operator.goldenCross":"Golden Cross","signal-robot.operator.deathCross":"Death Cross","signal-robot.operator.increaseBy":"Increase By","signal-robot.operator.decreaseBy":"Decrease By","signal-robot.indicator.price":"Price","signal-robot.indicator.rsi":"RSI","signal-robot.indicator.kdjK":"KDJ(K)","signal-robot.indicator.kdjJ":"KDJ(J)","signal-robot.indicator.macd":"MACD","signal-robot.indicator.macdHist":"MACD Histogram","signal-robot.indicator.bollingerUp":"Bollinger Upper","signal-robot.indicator.bollingerLow":"Bollinger Lower","signal-robot.indicator.volume":"Volume","signal-robot.indicator.changePct1h":"1H Change %","signal-robot.indicator.changePct24h":"24H Change %","signal-robot.indicator.signalLine":"Signal Line","settings.group.agent_memory":"หน่วยความจำ/การสะท้อน","settings.group.reflection_worker":"ตัวทำงานตรวจสอบการสะท้อนอัตโนมัติ","settings.field.ENABLE_AGENT_MEMORY":"เปิดใช้หน่วยความจำเอเจนต์","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"เปิดใช้การค้นหาเวกเตอร์ (ในเครื่อง)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"มิติ Embedding","settings.field.AGENT_MEMORY_TOP_K":"จำนวนดึงข้อมูล Top-K","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"ขนาดหน้าต่างผู้สมัคร","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"ครึ่งชีวิตการลดทอนตามเวลา (วัน)","settings.field.AGENT_MEMORY_W_SIM":"ค่าน้ำหนักความคล้าย","settings.field.AGENT_MEMORY_W_RECENCY":"ค่าน้ำหนักเวลา","settings.field.AGENT_MEMORY_W_RETURNS":"ค่าน้ำหนักผลตอบแทน","settings.field.ENABLE_REFLECTION_WORKER":"เปิดใช้การตรวจสอบอัตโนมัติ","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"ช่วงเวลาตรวจสอบ (วินาที)","profile.notifications.title":"การตั้งค่าการแจ้งเตือน","profile.notifications.hint":"กำหนดค่าวิธีการแจ้งเตือนเริ่มต้น จะถูกใช้โดยอัตโนมัติเมื่อสร้างการติดตามสินทรัพย์และการแจ้งเตือน","profile.notifications.defaultChannels":"ช่องทางแจ้งเตือนเริ่มต้น","profile.notifications.browser":"การแจ้งเตือนในแอป","profile.notifications.email":"อีเมล","profile.notifications.phone":"SMS","profile.notifications.telegramBotToken":"Telegram Bot Token","profile.notifications.telegramBotTokenPlaceholder":"กรอก Telegram Bot Token ของคุณ","profile.notifications.telegramBotTokenHint":"สร้างบอทผ่าน @BotFather เพื่อรับ Token","profile.notifications.telegramChatId":"Telegram Chat ID","profile.notifications.telegramPlaceholder":"กรอก Telegram Chat ID ของคุณ (เช่น 123456789)","profile.notifications.telegramHint":"ส่ง /start ไปที่ @userinfobot เพื่อรับ Chat ID","profile.notifications.notifyEmail":"อีเมลแจ้งเตือน","profile.notifications.emailPlaceholder":"ที่อยู่อีเมลสำหรับรับการแจ้งเตือน","profile.notifications.emailHint":"ใช้อีเมลบัญชีเป็นค่าเริ่มต้น สามารถตั้งค่าอีเมลอื่นได้","profile.notifications.phonePlaceholder":"กรอกหมายเลขโทรศัพท์ (เช่น +66812345678)","profile.notifications.phoneHint":"ผู้ดูแลระบบต้องกำหนดค่าบริการ Twilio","profile.notifications.discordWebhook":"Discord Webhook","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"สร้าง Webhook ในการตั้งค่าเซิร์ฟเวอร์ Discord","profile.notifications.webhookUrl":"Webhook URL","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"URL Webhook แบบกำหนดเอง ส่งการแจ้งเตือนผ่าน POST JSON","profile.notifications.webhookToken":"Webhook Token (ไม่บังคับ)","profile.notifications.webhookTokenPlaceholder":"Bearer Token สำหรับยืนยันตัวตนคำขอ","profile.notifications.webhookTokenHint":"ส่งเป็น Authorization: Bearer Token ไปยัง Webhook","profile.notifications.testBtn":"ส่งการแจ้งเตือนทดสอบ","profile.notifications.saveSuccess":"บันทึกการตั้งค่าการแจ้งเตือนสำเร็จ","profile.notifications.selectChannel":"กรุณาเลือกอย่างน้อยหนึ่งช่องทางแจ้งเตือน","profile.notifications.fillTelegramToken":"กรุณากรอก Telegram Bot Token","profile.notifications.fillTelegram":"กรุณากรอก Telegram Chat ID","profile.notifications.fillEmail":"กรุณากรอกอีเมลแจ้งเตือน","profile.notifications.testSent":"ส่งการแจ้งเตือนทดสอบแล้ว กรุณาตรวจสอบช่องทางแจ้งเตือนของคุณ"},f=(0,e.A)((0,e.A)({},p),y)}}]); \ No newline at end of file +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[301],{11422:function(a,t,i){i.d(t,{default:function(){return f}});var e=i(76338),s={items_per_page:"/ หน้า",jump_to:"ไปยัง",jump_to_confirm:"ยืนยัน",page:"",prev_page:"หน้าก่อนหน้า",next_page:"หน้าถัดไป",prev_5:"ย้อนกลับ 5 หน้า",next_5:"ถัดไป 5 หน้า",prev_3:"ย้อนกลับ 3 หน้า",next_3:"ถัดไป 3 หน้า"},o=i(85505),r={today:"วันนี้",now:"ตอนนี้",backToToday:"กลับไปยังวันนี้",ok:"ตกลง",clear:"ลบล้าง",month:"เดือน",year:"ปี",timeSelect:"เลือกเวลา",dateSelect:"เลือกวัน",monthSelect:"เลือกเดือน",yearSelect:"เลือกปี",decadeSelect:"เลือกทศวรรษ",yearFormat:"YYYY",dateFormat:"D/M/YYYY",dayFormat:"D",dateTimeFormat:"D/M/YYYY HH:mm:ss",monthBeforeYear:!0,previousMonth:"เดือนก่อนหน้า (PageUp)",nextMonth:"เดือนถัดไป (PageDown)",previousYear:"ปีก่อนหน้า (Control + left)",nextYear:"ปีถัดไป (Control + right)",previousDecade:"ทศวรรษก่อนหน้า",nextDecade:"ทศวรรษถัดไป",previousCentury:"ศตวรรษก่อนหน้า",nextCentury:"ศตวรรษถัดไป"},n={placeholder:"เลือกเวลา"},d=n,l={lang:(0,o.A)({placeholder:"เลือกวันที่",rangePlaceholder:["วันเริ่มต้น","วันสิ้นสุด"]},r),timePickerLocale:(0,o.A)({},d)},c=l,g=c,b={locale:"th",Pagination:s,DatePicker:c,TimePicker:d,Calendar:g,global:{placeholder:"กรุณาเลือก"},Table:{filterTitle:"ตัวกรอง",filterConfirm:"ยืนยัน",filterReset:"รีเซ็ต",selectAll:"เลือกทั้งหมดในหน้านี้",selectInvert:"เลือกสถานะตรงกันข้าม",sortTitle:"เรียง",expand:"แสดงแถวข้อมูล",collapse:"ย่อแถวข้อมูล"},Modal:{okText:"ตกลง",cancelText:"ยกเลิก",justOkText:"ตกลง"},Popconfirm:{okText:"ตกลง",cancelText:"ยกเลิก"},Transfer:{titles:["",""],searchPlaceholder:"ค้นหา",itemUnit:"ชิ้น",itemsUnit:"ชิ้น"},Upload:{uploading:"กำลังอัปโหลด...",removeFile:"ลบไฟล์",uploadError:"เกิดข้อผิดพลาดในการอัปโหลด",previewFile:"ดูตัวอย่างไฟล์",downloadFile:"ดาวน์โหลดไฟล์"},Empty:{description:"ไม่มีข้อมูล"},Icon:{icon:"ไอคอน"},Text:{edit:"แก้ไข",copy:"คัดลอก",copied:"คัดลอกแล้ว",expand:"ขยาย"},PageHeader:{back:"ย้อนกลับ"}},m=b,h=i(55802),u=i.n(h),p={antLocale:m,momentName:"th",momentLocale:u()},y={submit:"ส่ง",save:"บันทึก","submit.ok":"ส่งสำเร็จ","save.ok":"บันทึกเรียบร้อยแล้ว","menu.welcome":"ยินดีต้อนรับ","menu.home":"หน้าแรก","menu.dashboard":"แดชบอร์ด","menu.dashboard.indicator":"การวิเคราะห์ตัวบ่งชี้","menu.dashboard.community":"ชุมชนตัวบ่งชี้","menu.dashboard.analysis":"การวิเคราะห์เอไอ","menu.dashboard.tradingAssistant":"ผู้ช่วยการซื้อขาย","menu.dashboard.aiTradingAssistant":"ผู้ช่วยการซื้อขาย AI","menu.dashboard.signalRobot":"หุ่นยนต์สัญญาณ","menu.dashboard.monitor":"หน้าติดตาม","menu.dashboard.workplace":"โต๊ะทำงาน","menu.form":"หน้าแบบฟอร์ม","menu.form.basic-form":"แบบฟอร์มพื้นฐาน","menu.form.step-form":"แบบฟอร์มทีละขั้นตอน","menu.form.step-form.info":"แบบฟอร์มทีละขั้นตอน (กรอกข้อมูลการโอน)","menu.form.step-form.confirm":"แบบฟอร์มทีละขั้นตอน (ยืนยันข้อมูลการโอน)","menu.form.step-form.result":"แบบฟอร์มทีละขั้นตอน (สมบูรณ์)","menu.form.advanced-form":"แบบฟอร์มขั้นสูง","menu.list":"หน้ารายการ","menu.list.table-list":"แบบฟอร์มสอบถาม","menu.list.basic-list":"รายการมาตรฐาน","menu.list.card-list":"รายการการ์ด","menu.list.search-list":"รายการค้นหา","menu.list.search-list.articles":"รายการค้นหา (บทความ)","menu.list.search-list.projects":"รายการค้นหา (โครงการ)","menu.list.search-list.applications":"รายการค้นหา (แอป)","menu.profile":"หน้ารายละเอียด","menu.profile.basic":"หน้ารายละเอียดเบื้องต้น","menu.profile.advanced":"หน้ารายละเอียดขั้นสูง","menu.result":"หน้าผลลัพธ์","menu.result.success":"หน้าความสำเร็จ","menu.result.fail":"หน้าความล้มเหลว","menu.exception":"หน้าข้อยกเว้น","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"ข้อผิดพลาดของทริกเกอร์","menu.account":"หน้าส่วนตัว","menu.account.center":"ศูนย์ส่วนบุคคล","menu.account.settings":"การตั้งค่าส่วนบุคคล","menu.account.trigger":"ข้อผิดพลาดของทริกเกอร์","menu.account.logout":"ออกจากระบบ","menu.wallet":"กระเป๋าเงินของฉัน","menu.docs":"ศูนย์เอกสาร","menu.docs.detail":"รายละเอียดเอกสาร","menu.header.refreshPage":"รีเฟรชหน้า","menu.invite.friends":"ชวนเพื่อน","app.setting.pagestyle":"การตั้งค่าสไตล์โดยรวม","app.setting.pagestyle.light":"เมนูสไตล์สดใส","app.setting.pagestyle.dark":"สไตล์เมนูสีเข้ม","app.setting.pagestyle.realdark":"โหมดมืด","app.setting.themecolor":"สีของธีม","app.setting.navigationmode":"โหมดการนำทาง","app.setting.sidemenu.nav":"การนำทางแถบด้านข้าง","app.setting.topmenu.nav":"การนำทางแถบด้านบน","app.setting.content-width":"ความกว้างของพื้นที่เนื้อหา","app.setting.content-width.tooltip":"การตั้งค่านี้จะมีผลเฉพาะเมื่อ [การนำทางแถบด้านบน]","app.setting.content-width.fixed":"ที่ตายตัว","app.setting.content-width.fluid":"สตรีมมิ่ง","app.setting.fixedheader":"ส่วนหัวคงที่","app.setting.fixedheader.tooltip":"กำหนดค่าได้เมื่อแก้ไขส่วนหัว","app.setting.autoHideHeader":"ซ่อนส่วนหัวเมื่อเลื่อน","app.setting.fixedsidebar":"เมนูด้านข้างคงที่","app.setting.sidemenu":"เค้าโครงเมนูด้านข้าง","app.setting.topmenu":"เค้าโครงเมนูด้านบน","app.setting.othersettings":"การตั้งค่าอื่นๆ","app.setting.weakmode":"โหมดความอ่อนแอของสี","app.setting.multitab":"โหมดหลายแท็บ","app.setting.copy":"การตั้งค่าการทำสำเนา","app.setting.loading":"กำลังโหลดธีม","app.setting.copyinfo":"คัดลอกการตั้งค่าสำเร็จ src/config/defaultSettings.js","app.setting.copy.success":"คัดลอกเสร็จแล้ว","app.setting.copy.fail":"การคัดลอกล้มเหลว","app.setting.theme.switching":"เปลี่ยนธีม!","app.setting.production.hint":"แถบการกำหนดค่าใช้สำหรับการดูตัวอย่างในสภาพแวดล้อมการพัฒนาเท่านั้น และจะไม่แสดงในสภาพแวดล้อมการใช้งานจริง โปรดคัดลอกและแก้ไขไฟล์การกำหนดค่าด้วยตนเอง","app.setting.themecolor.daybreak":"รุ่งอรุณสีฟ้า (ค่าเริ่มต้น)","app.setting.themecolor.dust":"พลบค่ำ","app.setting.themecolor.volcano":"ภูเขาไฟ","app.setting.themecolor.sunset":"พระอาทิตย์ตก","app.setting.themecolor.cyan":"หมิงชิง","app.setting.themecolor.green":"ออโรร่าสีเขียว","app.setting.themecolor.geekblue":"เกินบรรยายสีฟ้า","app.setting.themecolor.purple":"เจียงซี","app.setting.tooltip":"การตั้งค่าหน้า","user.login.userName":"ชื่อผู้ใช้","user.login.password":"รหัสผ่าน","user.login.username.placeholder":"บัญชี: ผู้ดูแลระบบ","user.login.password.placeholder":"รหัสผ่าน: admin หรือ ant.design","user.login.message-invalid-credentials":"การเข้าสู่ระบบล้มเหลว โปรดตรวจสอบอีเมลและรหัสยืนยันของคุณ","user.login.message-invalid-verification-code":"รหัสยืนยันผิดพลาด","user.login.tab-login-credentials":"เข้าสู่ระบบรหัสผ่านบัญชี","user.login.tab-login-email":"เข้าสู่ระบบอีเมล","user.login.tab-login-mobile":"เข้าสู่ระบบหมายเลขโทรศัพท์มือถือ","user.login.captcha.placeholder":"กรุณากรอกรหัสยืนยันกราฟิก","user.login.mobile.placeholder":"หมายเลขโทรศัพท์","user.login.mobile.verification-code.placeholder":"รหัสยืนยัน","user.login.email.placeholder":"กรุณากรอกที่อยู่อีเมลของคุณ","user.login.email.verification-code.placeholder":"กรุณากรอกรหัสยืนยัน","user.login.email.sending":"กำลังส่งรหัสยืนยัน...","user.login.email.send-success-title":"คำใบ้","user.login.email.send-success":"ส่งรหัสยืนยันสำเร็จแล้ว โปรดตรวจสอบอีเมลของคุณ","user.login.sms.send-success":"ส่งรหัสยืนยันสำเร็จแล้ว โปรดตรวจสอบข้อความ","user.login.remember-me":"เข้าสู่ระบบอัตโนมัติ","user.login.forgot-password":"ลืมรหัสผ่าน","user.login.sign-in-with":"วิธีการเข้าสู่ระบบอื่น ๆ","user.login.signup":"ลงทะเบียนบัญชี","user.login.login":"เข้าสู่ระบบ","user.register.register":"ลงทะเบียน","user.register.email.placeholder":"จดหมาย","user.register.password.placeholder":"กรุณากรอกอย่างน้อย 6 ตัวอักษร กรุณาอย่าใช้รหัสผ่านที่คาดเดาได้ง่าย","user.register.password.popover-message":"กรุณากรอกอย่างน้อย 6 ตัวอักษร กรุณาอย่าใช้รหัสผ่านที่คาดเดาได้ง่าย","user.register.confirm-password.placeholder":"ยืนยันรหัสผ่าน","user.register.get-verification-code":"รับรหัสยืนยัน","user.register.sign-in":"เข้าสู่ระบบโดยใช้บัญชีที่มีอยู่","user.register-result.msg":"บัญชีของคุณ: {email} การลงทะเบียนสำเร็จ","user.register-result.activation-email":"อีเมลเปิดใช้งานได้ถูกส่งไปยังกล่องจดหมายของคุณแล้ว และมีอายุ 24 ชั่วโมง โปรดเข้าสู่ระบบอีเมลของคุณทันทีและคลิกลิงก์ในอีเมลเพื่อเปิดใช้งานบัญชีของคุณ","user.register-result.back-home":"กลับไปที่หน้าแรก","user.register-result.view-mailbox":"ตรวจสอบกล่องจดหมายของคุณ","user.email.required":"กรุณากรอกที่อยู่อีเมลของคุณ!","user.email.wrong-format":"รูปแบบที่อยู่อีเมลไม่ถูกต้อง!","user.userName.required":"กรุณากรอกชื่อบัญชีหรือที่อยู่อีเมลของคุณ","user.password.required":"กรุณากรอกรหัสผ่านของคุณ!","user.password.twice.msg":"รหัสผ่านที่ป้อนสองครั้งไม่ตรงกัน!","user.password.strength.msg":"รหัสผ่านไม่แข็งแกร่งพอ","user.password.strength.strong":"ความแข็งแกร่ง: แข็งแกร่ง","user.password.strength.medium":"ความแข็งแกร่ง: ปานกลาง","user.password.strength.low":"ความแรง: ต่ำ","user.password.strength.short":"ความแรง: สั้นเกินไป","user.confirm-password.required":"กรุณายืนยันรหัสผ่านของคุณ!","user.phone-number.required":"กรุณากรอกหมายเลขโทรศัพท์มือถือที่ถูกต้อง","user.phone-number.wrong-format":"รูปแบบหมายเลขโทรศัพท์มือถือผิด!","user.verification-code.required":"กรุณากรอกรหัสยืนยัน!","user.captcha.required":"กรุณากรอกรหัสยืนยันกราฟิก!","user.login.infos":"QuantDinger เป็นเครื่องมือเสริมการวิเคราะห์หุ้นแบบหลายตัวแทนด้วย AI และไม่มีคุณสมบัติในการให้คำปรึกษาด้านการลงทุนในหลักทรัพย์ผลการวิเคราะห์ คะแนน และความคิดเห็นอ้างอิงทั้งหมดในแพลตฟอร์มถูกสร้างขึ้นโดยอัตโนมัติโดย AI ตามข้อมูลในอดีต และใช้เพื่อการเรียนรู้ การวิจัย และการแลกเปลี่ยนทางเทคนิคเท่านั้น และไม่ถือเป็นคำแนะนำในการลงทุนหรือพื้นฐานการตัดสินใจใดๆการลงทุนในหุ้นเกี่ยวข้องกับความเสี่ยงต่างๆ เช่น ความเสี่ยงด้านตลาด ความเสี่ยงด้านสภาพคล่อง ความเสี่ยงด้านนโยบาย ฯลฯ ซึ่งอาจนำไปสู่การสูญเสียเงินต้นได้ผู้ใช้ควรตัดสินใจอย่างอิสระโดยพิจารณาจากการยอมรับความเสี่ยงของตนเอง และพฤติกรรมการลงทุนและผลที่ตามมาที่เกิดจากการใช้เครื่องมือนี้จะต้องตกเป็นภาระของผู้ใช้ตลาดมีความเสี่ยงและการลงทุนต้องระมัดระวัง","user.login.tab-login-web3":"เข้าสู่ระบบ Web3","user.login.web3.tip":"เข้าสู่ระบบโดยใช้กระเป๋าเงิน","user.login.web3.connect":"เชื่อมต่อกระเป๋าเงินและเข้าสู่ระบบ","user.login.web3.no-wallet":"ตรวจไม่พบกระเป๋าเงิน","user.login.web3.no-address":"ไม่ได้รับที่อยู่กระเป๋าเงิน","user.login.web3.nonce-failed":"ไม่สามารถรับหมายเลขสุ่มได้","user.login.web3.verify-failed":"การตรวจสอบลายเซ็นล้มเหลว","user.login.web3.success":"เข้าสู่ระบบสำเร็จ","user.login.web3.failed":"การเข้าสู่ระบบ Wallet ล้มเหลว","nav.no_wallet":"ตรวจไม่พบกระเป๋าเงิน","nav.copy":"สำเนา","nav.copy_success":"คัดลอกเรียบร้อยแล้ว","user.login.oauth.google":"ลงชื่อเข้าใช้งานด้วย Google","user.login.oauth.github":"ลงชื่อเข้าใช้ด้วย GitHub","user.login.oauth.loading":"กำลังเปลี่ยนเส้นทางไปยังหน้าการอนุญาต...","user.login.oauth.failed":"การเข้าสู่ระบบ OAuth ล้มเหลว","user.login.oauth.get-url-failed":"ไม่สามารถรับลิงก์การอนุญาตได้","user.login.subtitle":"ขับเคลื่อนข้อมูลเชิงลึกเชิงปริมาณสู่ตลาดโลก","user.login.legal.title":"ข้อสงวนสิทธิ์ทางกฎหมาย","user.login.legal.view":"ดูข้อจำกัดความรับผิดชอบทางกฎหมาย","user.login.legal.collapse":"ยุบข้อจำกัดความรับผิดชอบทางกฎหมาย","user.login.legal.agree":"ฉันได้อ่านและยอมรับข้อจำกัดความรับผิดชอบทางกฎหมาย","user.login.legal.required":"โปรดอ่านและตรวจสอบข้อจำกัดความรับผิดชอบทางกฎหมายก่อน","user.login.legal.content":"QuantDinger เป็นเครื่องมือเสริมการวิเคราะห์หุ้นแบบหลายตัวแทนด้วย AI และไม่มีคุณสมบัติในการให้คำปรึกษาด้านการลงทุนในหลักทรัพย์ผลการวิเคราะห์ การให้คะแนน และความคิดเห็นอ้างอิงทั้งหมดในแพลตฟอร์มถูกสร้างขึ้นโดยอัตโนมัติโดย AI ตามข้อมูลในอดีต และใช้สำหรับการเรียนรู้ การวิจัย และการแลกเปลี่ยนทางเทคนิคเท่านั้น และไม่ถือเป็นคำแนะนำในการลงทุนหรือพื้นฐานการตัดสินใจใดๆการลงทุนในหุ้นเกี่ยวข้องกับความเสี่ยงต่างๆ เช่น ความเสี่ยงด้านตลาด ความเสี่ยงด้านสภาพคล่อง ความเสี่ยงด้านนโยบาย ฯลฯ ซึ่งอาจนำไปสู่การสูญเสียเงินต้นได้ผู้ใช้ควรตัดสินใจอย่างอิสระโดยพิจารณาจากการยอมรับความเสี่ยงของตนเอง และพฤติกรรมการลงทุนและผลที่ตามมาที่เกิดจากการใช้เครื่องมือนี้จะต้องตกเป็นภาระของผู้ใช้ตลาดมีความเสี่ยงและการลงทุนต้องระมัดระวัง","user.login.privacy.title":"นโยบายความเป็นส่วนตัวของผู้ใช้","user.login.privacy.view":"ดูนโยบายความเป็นส่วนตัวของผู้ใช้","user.login.privacy.collapse":"ปิดข้อกำหนดความเป็นส่วนตัวของผู้ใช้","user.login.privacy.content":"เราให้ความสำคัญกับความเป็นส่วนตัวและการปกป้องข้อมูลของคุณ 1) ขอบเขตของการรวบรวม: เฉพาะข้อมูลที่จำเป็นในการใช้งานฟังก์ชัน (เช่น อีเมล หมายเลขโทรศัพท์มือถือ รหัสพื้นที่ ที่อยู่กระเป๋าสตางค์ของ Web3) และบันทึกและข้อมูลอุปกรณ์ที่จำเป็นเท่านั้นที่จะถูกรวบรวม 2) วัตถุประสงค์การใช้งาน: สำหรับการเข้าสู่ระบบบัญชีและการตรวจสอบความปลอดภัยการให้บริการฟังก์ชั่น การแก้ไขปัญหาและข้อกำหนดการปฏิบัติตาม 3) การจัดเก็บและความปลอดภัย: ข้อมูลได้รับการเข้ารหัสและจัดเก็บและมีการใช้สิทธิ์ที่จำเป็นและมาตรการควบคุมการเข้าถึงเพื่อป้องกันการเข้าถึง การเปิดเผย หรือการสูญหายโดยไม่ได้รับอนุญาต 4) การแบ่งปันกับบุคคลที่สาม: เว้นแต่กฎหมายและข้อบังคับกำหนดไว้หรือจำเป็นในการให้บริการ ข้อมูลส่วนบุคคลของคุณจะไม่ถูกแบ่งปันกับบุคคลที่สามหากเกี่ยวข้องกับบริการของบุคคลที่สาม (เช่น กระเป๋าเงิน ผู้ให้บริการ SMS) จะถูกประมวลผลในขอบเขตขั้นต่ำที่จำเป็นเพื่อใช้งานฟังก์ชันนี้เท่านั้น 5) คุกกี้/ที่เก็บข้อมูลในเครื่อง: ใช้สำหรับสถานะการเข้าสู่ระบบและการบำรุงรักษาเซสชันที่จำเป็น (เช่น โทเค็น PHPSESSID) คุณสามารถล้างหรือจำกัดได้ในเบราว์เซอร์ 6) สิทธิ์ส่วนบุคคล: คุณสามารถใช้สิทธิ์ของคุณในการสอบถาม แก้ไข ลบ เพิกถอนความยินยอม ฯลฯ ตามกฎหมายและข้อบังคับ 7) การเปลี่ยนแปลงและประกาศ: เมื่อมีการอัปเดตข้อกำหนดเหล่านี้จะแสดงอย่างเด่นชัดบนหน้าเว็บการใช้บริการนี้ต่อไปจะถือว่าคุณได้อ่านและยอมรับเนื้อหาที่อัปเดตแล้วหากคุณไม่ยอมรับข้อกำหนดเหล่านี้หรือการปรับปรุงใด ๆ โปรดหยุดใช้บริการและติดต่อเรา","account.basicInfo":"ข้อมูลพื้นฐาน","account.id":"รหัสผู้ใช้","account.username":"ชื่อผู้ใช้","account.nickname":"ชื่อนิค","account.email":"จดหมาย","account.mobile":"หมายเลขโทรศัพท์","account.web3address":"ที่อยู่กระเป๋าเงิน","account.pid":"รหัสผู้อ้างอิง","account.level":"ระดับผู้ใช้","account.money":"สมดุล","account.qdtBalance":"ยอดคงเหลือ QDT","account.score":"บูรณาการ","account.createtime":"เวลาลงทะเบียน","account.inviteLink":"ลิงค์คำเชิญ","account.recharge":"เติมเงิน","account.rechargeTip":"โปรดใช้ WeChat หรือ Alipay เพื่อสแกนโค้ด QR ด้านล่างเพื่อเติมเงิน","account.qrCodePlaceholder":"ตัวยึดรหัส QR (การจำลอง)","account.rechargeAmount":"จำนวนการเติมเงิน","account.enterAmount":"กรุณากรอกจำนวนเงินที่เติม","account.rechargeHint":"จำนวนเงินฝากขั้นต่ำ: 1 QDT","account.confirmRecharge":"ยืนยันการเติมเงิน","account.enterValidAmount":"กรุณากรอกจำนวนเงินที่เติมให้ถูกต้อง","account.rechargeSuccess":"เติมเงินสำเร็จ!ฝากแล้ว {amount} QDT","account.settings.menuMap.basic":"การตั้งค่าพื้นฐาน","account.settings.menuMap.security":"การตั้งค่าความปลอดภัย","account.settings.menuMap.notification":"การแจ้งเตือนข้อความใหม่","account.settings.menuMap.moneyLog":"รายละเอียดกองทุน","account.moneyLog.empty":"ยังไม่มีรายละเอียดกองทุน","account.moneyLog.total":"รวม {total} บันทึก","account.moneyLog.type.purchase":"ตัวบ่งชี้การซื้อ","account.moneyLog.type.recharge":"เติมเงิน","account.moneyLog.type.refund":"คืนเงิน","account.moneyLog.type.reward":"รางวัล","account.moneyLog.type.income":"ตัวชี้วัดรายได้","account.moneyLog.type.commission":"ค่าธรรมเนียมการจัดการแพลตฟอร์ม","wallet.balance":"ยอดคงเหลือ QDT","wallet.recharge":"เติมเงิน","wallet.withdraw":"ถอนเงินสด","wallet.filter":"กรอง","wallet.reset":"รีเซ็ต","wallet.totalRecharge":"การเติมเงินสะสม","wallet.totalWithdraw":"การถอนเงินสะสม","wallet.totalIncome":"รายได้สะสม","wallet.records":"บันทึกการทำธุรกรรมและรายละเอียดกองทุน","wallet.tradingRecords":"ประวัติการทำธุรกรรม","wallet.moneyLog":"รายละเอียดกองทุน","wallet.rechargeTip":"โปรดใช้ WeChat หรือ Alipay เพื่อสแกนโค้ด QR ด้านล่างเพื่อเติมเงิน","wallet.qrCodePlaceholder":"ตัวยึดรหัส QR (การจำลอง)","wallet.rechargeAmount":"จำนวนการเติมเงิน","wallet.enterAmount":"กรุณากรอกจำนวนเงินที่เติม","wallet.rechargeHint":"จำนวนเงินฝากขั้นต่ำ: 1 QDT","wallet.confirmRecharge":"ยืนยันการเติมเงิน","wallet.enterValidAmount":"กรุณากรอกจำนวนเงินที่เติมให้ถูกต้อง","wallet.rechargeSuccess":"เติมเงินสำเร็จ!ฝากแล้ว {amount} QDT","wallet.rechargeFailed":"การเติมเงินล้มเหลว","wallet.withdrawTip":"กรุณากรอกจำนวนเงินที่ถอนและที่อยู่การถอน","wallet.withdrawAmount":"ถอนจำนวนเงิน","wallet.enterWithdrawAmount":"กรุณากรอกจำนวนเงินที่ถอน","wallet.withdrawHint":"จำนวนถอนขั้นต่ำ: 1 QDT","wallet.withdrawAddress":"ที่อยู่การถอนเงิน (ไม่บังคับ)","wallet.enterWithdrawAddress":"กรุณากรอกที่อยู่การถอนเงิน","wallet.confirmWithdraw":"ยืนยันการถอนเงิน","wallet.enterValidWithdrawAmount":"กรุณากรอกจำนวนเงินที่ถอนให้ถูกต้อง","wallet.insufficientBalance":"ยอดคงเหลือไม่เพียงพอ","wallet.withdrawSuccess":"การถอนเงินสำเร็จ!ถอนออก {amount} QDT","wallet.withdrawFailed":"การถอนเงินล้มเหลว","wallet.noTradingRecords":"ยังไม่มีบันทึกการทำธุรกรรม","wallet.noMoneyLog":"ยังไม่มีรายละเอียดกองทุน","wallet.loadTradingRecordsFailed":"โหลดบันทึกธุรกรรมไม่สำเร็จ","wallet.loadMoneyLogFailed":"โหลดรายละเอียดกองทุนไม่สำเร็จ","wallet.moneyLogTotal":"รวม {total} บันทึก","wallet.moneyLogTypeTitle":"พิมพ์","wallet.moneyLogType.all":"ทุกประเภท","wallet.table.time":"เวลา","wallet.table.type":"พิมพ์","wallet.table.price":"ราคา","wallet.table.amount":"ปริมาณ","wallet.table.money":"จำนวน","wallet.table.balance":"สมดุล","wallet.table.memo":"หมายเหตุ","wallet.table.value":"ค่า","wallet.table.profit":"กำไรและขาดทุน","wallet.table.commission":"ค่าธรรมเนียมการจัดการ","wallet.table.total":"รวม {total} บันทึก","wallet.tradeType.buy":"ซื้อ","wallet.tradeType.sell":"ขาย","wallet.tradeType.liquidation":"บังคับให้เลิกกิจการ","wallet.tradeType.openLong":"เปิดยาวๆ","wallet.tradeType.addLong":"กาดอต","wallet.tradeType.closeLong":"ปินตัว","wallet.tradeType.closeLongStop":"หยุดขาดทุนและยาว","wallet.tradeType.closeLongProfit":"ขายทำกำไรและระดับมากขึ้น","wallet.tradeType.openShort":"เปิดสั้น","wallet.tradeType.addShort":"เพิ่มสั้น","wallet.tradeType.closeShort":"ว่างเปล่า","wallet.tradeType.closeShortStop":"หยุดการสูญเสีย","wallet.tradeType.closeShortProfit":"ขายทำกำไรและปิดการขาย","wallet.moneyLogType.purchase":"ตัวบ่งชี้การซื้อ","wallet.moneyLogType.recharge":"เติมเงิน","wallet.moneyLogType.withdraw":"ถอนเงินสด","wallet.moneyLogType.refund":"คืนเงิน","wallet.moneyLogType.reward":"รางวัล","wallet.moneyLogType.income":"รายได้","wallet.moneyLogType.commission":"ค่าธรรมเนียมการจัดการ","wallet.web3Address.required":"กรุณากรอกที่อยู่กระเป๋าเงิน Web3 ก่อน","wallet.web3Address.requiredDescription":"ก่อนที่จะเติมเงิน คุณต้องผูกที่อยู่กระเป๋าเงิน Web3 ของคุณเพื่อรับการเติมเงิน","wallet.web3Address.placeholder":"โปรดป้อนที่อยู่กระเป๋าเงิน Web3 ของคุณ (เริ่มต้นด้วย 0x)","wallet.web3Address.save":"บันทึกที่อยู่กระเป๋าเงิน","wallet.web3Address.saveSuccess":"บันทึกที่อยู่ Wallet เรียบร้อยแล้ว","wallet.web3Address.saveFailed":"ไม่สามารถบันทึกที่อยู่กระเป๋าสตางค์ได้","wallet.web3Address.invalidFormat":"โปรดป้อนที่อยู่กระเป๋าเงิน Web3 ที่ถูกต้อง (รูปแบบ Ethereum: 42 ตัวอักษรเริ่มต้นด้วย 0x หรือรูปแบบ TRC20: 34 ตัวอักษรเริ่มต้นด้วย T)","wallet.selectCoin":"เลือกสกุลเงิน","wallet.selectChain":"ห่วงโซ่การคัดเลือก","wallet.chain.eth":"ผลประโยชน์ทับซ้อน (ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"บีเอสซี","wallet.targetQdtAmount":"จำนวน QDT ที่คุณต้องการแลก (ไม่บังคับ)","wallet.targetQdtAmount.placeholder":"กรุณากรอกจำนวน QDT ที่คุณต้องการแลกเปลี่ยน ราคา QDT ปัจจุบันคือ: {price} USDT","wallet.targetQdtAmount.requiredUsdt":"ต้องเติมเงิน: {amount} USDT","wallet.rechargeAddress":"ที่อยู่เติมเงิน","wallet.copyAddress":"สำเนา","wallet.copySuccess":"คัดลอกสำเร็จ!","wallet.copyFailed":"การคัดลอกล้มเหลว โปรดคัดลอกด้วยตนเอง","wallet.rechargeAddressHint":"โปรดตรวจสอบให้แน่ใจว่าได้ใช้เครือข่าย {chain} เพื่อฝาก {coin} ไปยังที่อยู่นี้","wallet.qdtPrice.loading":"กำลังโหลด...","wallet.rechargeTip.new":"โปรดเลือกสกุลเงินและห่วงโซ่ จากนั้นสแกนโค้ด QR ด้านล่างเพื่อเติมเงิน","wallet.exchangeRate":"1 คิวดีที กลับไปยัง {rate} ดอลลาร์สหรัฐ","wallet.withdrawableAmount":"จำนวนเงินสดที่มีอยู่","wallet.totalBalance":"ยอดรวม","wallet.insufficientWithdrawable":"จำนวนเงินสดที่สามารถถอนออกได้ไม่เพียงพอ เงินสดที่มีอยู่ในปัจจุบันคือ: {amount} QDT","wallet.withdrawAddressRequired":"กรุณากรอกที่อยู่การถอนเงิน","wallet.withdrawAddressHint":"โปรดตรวจสอบให้แน่ใจว่าที่อยู่ถูกต้อง หลังจากถอนแล้วไม่สามารถเพิกถอนได้","wallet.withdrawSubmitSuccess":"ส่งใบสมัครถอนเรียบร้อยแล้ว โปรดรอการตรวจสอบ","menu.footer.contactUs":"ติดต่อเรา","menu.footer.getSupport":"รับการสนับสนุน","menu.footer.socialAccounts":"บัญชีโซเชียล","menu.footer.userAgreement":"ข้อตกลงผู้ใช้","menu.footer.privacyPolicy":"นโยบายความเป็นส่วนตัว","menu.footer.support":"สนับสนุน","menu.footer.featureRequest":"คำขอคุณสมบัติ","menu.footer.email":"อีเมล","menu.footer.liveChat":"แชทสดทุกวันตลอด 24 ชั่วโมง","dashboard.analysis.title":"การวิเคราะห์หลายมิติ","dashboard.analysis.subtitle":"แพลตฟอร์มการวิเคราะห์ทางการเงินที่ครอบคลุมที่ขับเคลื่อนด้วย AI","dashboard.analysis.selectSymbol":"เลือกหรือป้อนรหัสพื้นฐาน","dashboard.analysis.selectModel":"เลือกรุ่น","dashboard.analysis.startAnalysis":"เริ่มการวิเคราะห์","dashboard.analysis.history":"ประวัติศาสตร์","dashboard.analysis.tab.overview":"การวิเคราะห์ที่ครอบคลุม","dashboard.analysis.tab.fundamental":"ความรู้พื้นฐาน","dashboard.analysis.tab.technical":"เทคโนโลยี","dashboard.analysis.tab.news":"ข่าว","dashboard.analysis.tab.sentiment":"อารมณ์","dashboard.analysis.tab.risk":"เสี่ยง","dashboard.analysis.tab.debate":"การอภิปรายระยะสั้นยาว","dashboard.analysis.tab.decision":"การตัดสินใจขั้นสุดท้าย","dashboard.analysis.empty.selectSymbol":"เลือกเป้าหมายเพื่อเริ่มการวิเคราะห์","dashboard.analysis.empty.selectSymbolDesc":"เลือกจากรายการหุ้นที่เลือกเองหรือป้อนรหัสที่เกี่ยวข้องเพื่อรับรายงานการวิเคราะห์ AI หลายมิติ","dashboard.analysis.empty.startAnalysis":'คลิกปุ่ม "เริ่มการวิเคราะห์" เพื่อทำการวิเคราะห์หลายมิติ',"dashboard.analysis.empty.startAnalysisDesc":"เราจะให้การวิเคราะห์ที่ครอบคลุมจากหลายมิติ เช่น ปัจจัยพื้นฐาน เทคโนโลยี ข่าวสาร ความรู้สึก และความเสี่ยง","dashboard.analysis.empty.noData":"ขณะนี้ไม่มีข้อมูลการวิเคราะห์ {type} โปรดดำเนินการวิเคราะห์ที่ครอบคลุมก่อน","dashboard.analysis.empty.noWatchlist":"ขณะนี้ไม่มีหุ้นที่เลือกเอง","dashboard.analysis.empty.noHistory":"ยังไม่มีประวัติ","dashboard.analysis.empty.watchlistHint":"ขณะนี้ไม่มีหุ้นที่เลือกเองกรุณาก่อน","dashboard.analysis.empty.noDebateData":"ยังไม่มีข้อมูลการอภิปราย","dashboard.analysis.empty.noDecisionData":"ยังไม่มีข้อมูลการตัดสินใจ","dashboard.analysis.empty.selectAgent":"โปรดเลือกตัวแทนเพื่อดูผลการวิเคราะห์","dashboard.analysis.loading.analyzing":"กำลังวิเคราะห์ กรุณารอสักครู่...","dashboard.analysis.loading.fundamental":"กำลังวิเคราะห์ข้อมูลพื้นฐาน...","dashboard.analysis.loading.technical":"กำลังวิเคราะห์ตัวชี้วัดทางเทคนิค...","dashboard.analysis.loading.news":"กำลังวิเคราะห์ข้อมูลข่าว...","dashboard.analysis.loading.sentiment":"วิเคราะห์อารมณ์ตลาด...","dashboard.analysis.loading.risk":"กำลังประเมินความเสี่ยง...","dashboard.analysis.loading.debate":"การอภิปรายระยะสั้นระยะสั้นกำลังดำเนินอยู่...","dashboard.analysis.loading.decision":"กำลังสร้างการตัดสินใจขั้นสุดท้าย...","dashboard.analysis.score.overall":"คะแนนโดยรวม","dashboard.analysis.score.recommendation":"คำแนะนำการลงทุน","dashboard.analysis.score.confidence":"ความมั่นใจ","dashboard.analysis.dimension.fundamental":"ความรู้พื้นฐาน","dashboard.analysis.dimension.technical":"เทคโนโลยี","dashboard.analysis.dimension.news":"ข่าว","dashboard.analysis.dimension.sentiment":"อารมณ์","dashboard.analysis.dimension.risk":"เสี่ยง","dashboard.analysis.card.dimensionScores":"การให้คะแนนสำหรับแต่ละมิติ","dashboard.analysis.card.overviewReport":"รายงานการวิเคราะห์ที่ครอบคลุม","dashboard.analysis.card.financialMetrics":"ตัวชี้วัดทางการเงิน","dashboard.analysis.card.fundamentalReport":"รายงานการวิเคราะห์ปัจจัยพื้นฐาน","dashboard.analysis.card.technicalIndicators":"ตัวชี้วัดทางเทคนิค","dashboard.analysis.card.technicalReport":"รายงานการวิเคราะห์ทางเทคนิค","dashboard.analysis.card.newsList":"ข่าวที่เกี่ยวข้อง","dashboard.analysis.card.newsReport":"รายงานการวิเคราะห์ข่าว","dashboard.analysis.card.sentimentIndicators":"ตัวบ่งชี้ความรู้สึก","dashboard.analysis.card.sentimentReport":"รายงานการวิเคราะห์ความรู้สึก","dashboard.analysis.card.riskMetrics":"ตัวชี้วัดความเสี่ยง","dashboard.analysis.card.riskReport":"รายงานการประเมินความเสี่ยง","dashboard.analysis.card.bullView":"มุมมองรั้น (กระทิง)","dashboard.analysis.card.bearView":"มุมมองหยาบคาย (หมี)","dashboard.analysis.card.researchConclusion":"ข้อสรุปของผู้วิจัย","dashboard.analysis.card.traderPlan":"แผนผู้ค้า","dashboard.analysis.card.riskDebate":"การอภิปรายคณะกรรมการความเสี่ยง","dashboard.analysis.card.finalDecision":"การตัดสินใจครั้งสุดท้าย","dashboard.analysis.card.tradePlanDetail":"รายละเอียดแผนการเทรด","dashboard.analysis.tradingPlan.entry_price":"ราคาค่าเข้าชม","dashboard.analysis.tradingPlan.position_size":"ขนาดตำแหน่ง","dashboard.analysis.tradingPlan.stop_loss":"หยุดการสูญเสีย","dashboard.analysis.tradingPlan.take_profit":"ขายทำกำไร","dashboard.analysis.label.confidence":"ความมั่นใจ","dashboard.analysis.label.keyPoints":"จุดหลัก","dashboard.analysis.label.riskWarning":"คำเตือนความเสี่ยง","dashboard.analysis.risk.risky":"เสี่ยง","dashboard.analysis.risk.neutral":"มุมมองที่เป็นกลาง (เป็นกลาง)","dashboard.analysis.risk.safe":"มุมมองแบบอนุรักษ์นิยม (ปลอดภัย)","dashboard.analysis.risk.conclusion":"สรุปแล้ว","dashboard.analysis.feature.fundamental":"การวิเคราะห์พื้นฐาน","dashboard.analysis.feature.technical":"การวิเคราะห์ทางเทคนิค","dashboard.analysis.feature.news":"การวิเคราะห์ข่าว","dashboard.analysis.feature.sentiment":"การวิเคราะห์ความรู้สึก","dashboard.analysis.feature.risk":"การประเมินความเสี่ยง","dashboard.analysis.watchlist.title":"การเลือกหุ้นของฉัน","dashboard.analysis.watchlist.add":"เพิ่มไปที่","dashboard.analysis.watchlist.addStock":"เพิ่มสต็อก","dashboard.analysis.modal.addStock.title":"เพิ่มหุ้นเสริม","dashboard.analysis.modal.addStock.confirm":"แน่นอน","dashboard.analysis.modal.addStock.cancel":"ยกเลิก","dashboard.analysis.modal.addStock.market":"ประเภทตลาด","dashboard.analysis.modal.addStock.marketPlaceholder":"กรุณาเลือกตลาด","dashboard.analysis.modal.addStock.marketRequired":"กรุณาเลือกประเภทตลาด","dashboard.analysis.modal.addStock.symbol":"รหัสสต๊อกสินค้า","dashboard.analysis.modal.addStock.symbolPlaceholder":"ตัวอย่างเช่น: AAPL, TSLA, GOOGL, 000001, BTC","dashboard.analysis.modal.addStock.symbolRequired":"กรุณากรอกรหัสสต๊อกสินค้า","dashboard.analysis.modal.addStock.searchPlaceholder":"ค้นหารหัสหรือชื่อเป้าหมาย","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"ค้นหาหรือป้อนรหัสอ้างอิง (เช่น AAPL, BTC/USDT, EUR/USD)","dashboard.analysis.modal.addStock.searchOrInputHint":"รองรับการค้นหาวัตถุในฐานข้อมูลหรือป้อนรหัสโดยตรง (ระบบจะรับชื่อโดยอัตโนมัติ)","dashboard.analysis.modal.addStock.search":"ค้นหา","dashboard.analysis.modal.addStock.searchResults":"ผลการค้นหา","dashboard.analysis.modal.addStock.hotSymbols":"เป้าหมายยอดนิยม","dashboard.analysis.modal.addStock.noHotSymbols":"ยังไม่มีเป้าหมายยอดนิยม","dashboard.analysis.modal.addStock.selectedSymbol":"เลือกแล้ว","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"โปรดเลือกเป้าหมายก่อน","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"โปรดเลือกเป้าหมายหรือป้อนรหัสเป้าหมายก่อน","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"กรุณากรอกรหัสเป้าหมาย","dashboard.analysis.modal.addStock.pleaseSelectMarket":"โปรดเลือกประเภทตลาดก่อน","dashboard.analysis.modal.addStock.searchFailed":"การค้นหาล้มเหลว โปรดลองอีกครั้งในภายหลัง","dashboard.analysis.modal.addStock.noSearchResults":"ไม่พบเป้าหมายที่ตรงกัน","dashboard.analysis.modal.addStock.willAutoFetchName":"ระบบจะรับชื่อให้อัตโนมัติ","dashboard.analysis.modal.addStock.addDirectly":"เพิ่มโดยตรง","dashboard.analysis.modal.addStock.nameWillBeFetched":"ชื่อจะถูกหยิบขึ้นมาโดยอัตโนมัติเมื่อเพิ่ม","dashboard.analysis.market.USStock":"หุ้นสหรัฐ","dashboard.analysis.market.Crypto":"สกุลเงินดิจิทัล","dashboard.analysis.market.Forex":"ฟอเร็กซ์","dashboard.analysis.market.Futures":"ฟิวเจอร์ส","dashboard.analysis.modal.history.title":"บันทึกการวิเคราะห์ทางประวัติศาสตร์","dashboard.analysis.modal.history.viewResult":"ดูผลลัพธ์","dashboard.analysis.modal.history.completeTime":"เวลาเสร็จสิ้น","dashboard.analysis.modal.history.error":"ความผิดพลาด","dashboard.analysis.status.pending":"รอดำเนินการ","dashboard.analysis.status.processing":"กำลังประมวลผล","dashboard.analysis.status.completed":"สมบูรณ์","dashboard.analysis.status.failed":"ล้มเหลว","dashboard.analysis.message.selectSymbol":"โปรดเลือกเป้าหมายก่อน","dashboard.analysis.message.taskCreated":"งานการวิเคราะห์ได้ถูกสร้างขึ้นแล้วและกำลังดำเนินการอยู่เบื้องหลัง...","dashboard.analysis.message.analysisComplete":"การวิเคราะห์เสร็จสมบูรณ์","dashboard.analysis.message.analysisCompleteCache":"การวิเคราะห์เสร็จสมบูรณ์ (ใช้ข้อมูลที่แคชไว้)","dashboard.analysis.message.analysisFailed":"การวิเคราะห์ล้มเหลว โปรดลองอีกครั้งในภายหลัง","dashboard.analysis.message.addStockSuccess":"เพิ่มเรียบร้อยแล้ว","dashboard.analysis.message.addStockFailed":"เพิ่มล้มเหลว","dashboard.analysis.message.removeStockSuccess":"ลบสำเร็จแล้ว","dashboard.analysis.message.removeStockFailed":"การลบล้มเหลว","dashboard.analysis.message.resumingAnalysis":"กำลังดำเนินการงานวิเคราะห์ต่อ...","dashboard.analysis.message.deleteSuccess":"ลบสำเร็จแล้ว","dashboard.analysis.message.deleteFailed":"การลบล้มเหลว","dashboard.analysis.modal.history.delete":"ลบ","dashboard.analysis.modal.history.deleteConfirm":"คุณแน่ใจหรือไม่ว่าต้องการลบบันทึกการวิเคราะห์นี้?","dashboard.analysis.test":"ร้านค้าเลขที่ {no} ถนน Gongzhan","dashboard.analysis.introduce":"คำอธิบายตัวบ่งชี้","dashboard.analysis.total-sales":"ยอดขายรวม","dashboard.analysis.day-sales":"ยอดขายเฉลี่ยต่อวัน¥","dashboard.analysis.visits":"การเข้าชม","dashboard.analysis.visits-trend":"แนวโน้มการเข้าชม","dashboard.analysis.visits-ranking":"อันดับการเข้าชมร้านค้า","dashboard.analysis.day-visits":"การเข้าชมรายวัน","dashboard.analysis.week":"รายสัปดาห์ปีต่อปี","dashboard.analysis.day":"ปีต่อปี","dashboard.analysis.payments":"จำนวนการชำระเงิน","dashboard.analysis.conversion-rate":"อัตราการแปลง","dashboard.analysis.operational-effect":"ผลกระทบจากกิจกรรมการดำเนินงาน","dashboard.analysis.sales-trend":"แนวโน้มการขาย","dashboard.analysis.sales-ranking":"อันดับยอดขายของร้าน","dashboard.analysis.all-year":"ประจำปี","dashboard.analysis.all-month":"เดือนนี้","dashboard.analysis.all-week":"สัปดาห์นี้","dashboard.analysis.all-day":"วันนี้","dashboard.analysis.search-users":"จำนวนผู้ใช้การค้นหา","dashboard.analysis.per-capita-search":"การค้นหาต่อหัว","dashboard.analysis.online-top-search":"การค้นหายอดนิยมออนไลน์","dashboard.analysis.the-proportion-of-sales":"สัดส่วนประเภทการขาย","dashboard.analysis.dropdown-option-one":"ปฏิบัติการที่หนึ่ง","dashboard.analysis.dropdown-option-two":"ปฏิบัติการ 2","dashboard.analysis.channel.all":"ทุกช่อง","dashboard.analysis.channel.online":"ออนไลน์","dashboard.analysis.channel.stores":"เก็บ","dashboard.analysis.sales":"ฝ่ายขาย","dashboard.analysis.traffic":"การไหลของผู้โดยสาร","dashboard.analysis.table.rank":"การจัดอันดับ","dashboard.analysis.table.search-keyword":"ค้นหาคำสำคัญ","dashboard.analysis.table.users":"จำนวนผู้ใช้","dashboard.analysis.table.weekly-range":"เพิ่มขึ้นรายสัปดาห์","dashboard.indicator.selectSymbol":"เลือกหรือป้อนรหัสพื้นฐาน","dashboard.indicator.emptyWatchlistHint":"ขณะนี้ไม่มีหุ้นที่เลือกเอง กรุณาเพิ่มก่อน","dashboard.indicator.hint.selectSymbol":"โปรดเลือกเป้าหมายเพื่อเริ่มการวิเคราะห์","dashboard.indicator.hint.selectSymbolDesc":"เลือกหรือป้อนรหัสหุ้นในช่องค้นหาด้านบนเพื่อดูกราฟ K-line และตัวชี้วัดทางเทคนิค","dashboard.indicator.retry":"ลองอีกครั้ง","dashboard.indicator.panel.title":"ตัวชี้วัดทางเทคนิค","dashboard.indicator.panel.realtimeOn":"ปิดการอัพเดตแบบเรียลไทม์","dashboard.indicator.panel.realtimeOff":"เปิดใช้งานการอัปเดตแบบเรียลไทม์","dashboard.indicator.panel.themeLight":"เปลี่ยนเป็นธีมสีเข้ม","dashboard.indicator.panel.themeDark":"เปลี่ยนเป็นธีมสว่าง","dashboard.indicator.section.enabled":"เปิดใช้งานแล้ว","dashboard.indicator.section.added":"ตัวบ่งชี้ที่ฉันเพิ่ม","dashboard.indicator.section.custom":"ตัวชี้วัดที่สร้างขึ้นด้วยตัวเอง","dashboard.indicator.section.bought":"ตัวบ่งชี้ที่ฉันซื้อ","dashboard.indicator.section.myCreated":"ตัวบ่งชี้ที่ฉันสร้างขึ้น","dashboard.indicator.empty":"ยังไม่มีตัวบ่งชี้ โปรดเพิ่มหรือสร้างตัวบ่งชี้ก่อน","dashboard.indicator.buy":"ตัวบ่งชี้การซื้อ","dashboard.indicator.action.start":"เริ่มต้นขึ้น","dashboard.indicator.action.stop":"ปิด","dashboard.indicator.action.edit":"แก้ไข","dashboard.indicator.action.delete":"ลบ","dashboard.indicator.action.backtest":"การทดสอบย้อนหลัง","dashboard.indicator.status.normal":"ปกติ","dashboard.indicator.status.normalPermanent":"ปกติ (ใช้ได้ถาวร)","dashboard.indicator.status.expired":"หมดอายุแล้ว","dashboard.indicator.expiry.permanent":"มีผลถาวร","dashboard.indicator.expiry.noExpiry":"ไม่มีเวลาหมดอายุ","dashboard.indicator.expiry.expired":"หมดอายุ: {date}","dashboard.indicator.expiry.expiresOn":"เวลาหมดอายุ: {date}","dashboard.indicator.delete.confirmTitle":"ยืนยันการลบ","dashboard.indicator.delete.confirmContent":'คุณแน่ใจหรือไม่ว่าต้องการลบตัวบ่งชี้ "{name}"?การดำเนินการนี้ไม่สามารถย้อนกลับได้',"dashboard.indicator.delete.confirmOk":"ลบ","dashboard.indicator.delete.confirmCancel":"ยกเลิก","dashboard.indicator.delete.success":"ลบสำเร็จ","dashboard.indicator.delete.failed":"ลบไม่สำเร็จ","dashboard.indicator.save.success":"บันทึกเรียบร้อยแล้ว","dashboard.indicator.save.failed":"บันทึกล้มเหลว","dashboard.indicator.error.loadWatchlistFailed":"ไม่สามารถโหลดหุ้นเสริมได้","dashboard.indicator.error.chartNotReady":"ส่วนประกอบแผนภูมิไม่ได้เตรียมใช้งาน โปรดเลือกเป้าหมายก่อนแล้วรอให้แผนภูมิโหลด","dashboard.indicator.error.chartMethodNotReady":"วิธีส่วนประกอบแผนภูมิไม่พร้อม โปรดลองอีกครั้งในภายหลัง","dashboard.indicator.error.chartExecuteNotReady":"วิธีดำเนินการส่วนประกอบแผนภูมิไม่พร้อม โปรดลองอีกครั้งในภายหลัง","dashboard.indicator.error.parseFailed":"ไม่สามารถแยกวิเคราะห์โค้ด Python","dashboard.indicator.error.parseFailedCheck":"ไม่สามารถแยกวิเคราะห์โค้ด Python ได้ โปรดตรวจสอบรูปแบบโค้ด","dashboard.indicator.error.addIndicatorFailed":"ไม่สามารถเพิ่มตัวบ่งชี้ได้","dashboard.indicator.error.runIndicatorFailed":"ตัวบ่งชี้การทำงานล้มเหลว","dashboard.indicator.error.pleaseLogin":"กรุณาเข้าสู่ระบบก่อน","dashboard.indicator.error.loadDataFailed":"การโหลดข้อมูลล้มเหลว","dashboard.indicator.error.loadDataFailedDesc":"โปรดตรวจสอบการเชื่อมต่อเครือข่าย","dashboard.indicator.error.pythonEngineFailed":"โหลดกลไก Python ล้มเหลวและฟังก์ชันตัวบ่งชี้อาจไม่พร้อมใช้งาน","dashboard.indicator.error.chartInitFailed":"การเริ่มต้นแผนภูมิล้มเหลว","dashboard.indicator.warning.enterCode":"กรุณากรอกรหัสตัวบ่งชี้ก่อน","dashboard.indicator.warning.pyodideLoadFailed":"โปรแกรม Python ไม่สามารถโหลดได้","dashboard.indicator.warning.pyodideLoadFailedDesc":"คุณสมบัตินี้ไม่สามารถใช้ได้ในภูมิภาคหรือสภาพแวดล้อมเครือข่ายปัจจุบันของคุณ","dashboard.indicator.warning.chartNotInitialized":"แผนภูมิไม่ได้เตรียมใช้งานและไม่สามารถใช้เครื่องมือวาดเส้นได้","dashboard.indicator.success.runIndicator":"ตัวบ่งชี้ทำงานสำเร็จ","dashboard.indicator.success.clearDrawings":"ล้างภาพวาดเส้นทั้งหมดแล้ว","dashboard.indicator.sma":"SMA (ชุดค่าผสมค่าเฉลี่ยเคลื่อนที่)","dashboard.indicator.ema":"EMA (ชุดค่าผสมค่าเฉลี่ยเคลื่อนที่เอ็กซ์โปเนนเชียล)","dashboard.indicator.rsi":"RSI (ความแรงสัมพัทธ์)","dashboard.indicator.macd":"MACD","dashboard.indicator.bb":"โบลินเจอร์ แบนด์","dashboard.indicator.atr":"ATR (ช่วงที่แท้จริงเฉลี่ย)","dashboard.indicator.cci":"CCI (ดัชนีช่องสินค้าโภคภัณฑ์)","dashboard.indicator.williams":"วิลเลียมส์ %R (ตัวบ่งชี้วิลเลียมส์)","dashboard.indicator.mfi":"MFI (ดัชนีการไหลของเงิน)","dashboard.indicator.adx":"ADX (ดัชนีแนวโน้มเฉลี่ย)","dashboard.indicator.obv":"OBV (คลื่นพลังงาน)","dashboard.indicator.adosc":"ADOSC (ออสซิลเลเตอร์สะสม/ส่ง)","dashboard.indicator.ad":"AD (เส้นการสะสม/การกระจาย)","dashboard.indicator.kdj":"KDJ (ตัวบ่งชี้สุ่ม)","dashboard.indicator.signal.buy":"ซื้อ","dashboard.indicator.signal.sell":"ขาย","dashboard.indicator.signal.supertrendBuy":"ซื้อ SuperTrend","dashboard.indicator.signal.supertrendSell":"ขาย SuperTrend","dashboard.indicator.chart.kline":"เคไลน์","dashboard.indicator.chart.volume":"ปริมาณ","dashboard.indicator.chart.uptrend":"อัพเทรนด์","dashboard.indicator.chart.downtrend":"เทรนด์ขาลง","dashboard.indicator.tooltip.time":"เวลา","dashboard.indicator.tooltip.open":"เปิด","dashboard.indicator.tooltip.close":"รับ","dashboard.indicator.tooltip.high":"สูง","dashboard.indicator.tooltip.low":"ต่ำ","dashboard.indicator.tooltip.volume":"ปริมาณ","dashboard.indicator.drawing.line":"ส่วนของเส้น","dashboard.indicator.drawing.horizontalLine":"เส้นแนวนอน","dashboard.indicator.drawing.verticalLine":"เส้นแนวตั้ง","dashboard.indicator.drawing.ray":"รังสี","dashboard.indicator.drawing.straightLine":"เส้นตรง","dashboard.indicator.drawing.parallelLine":"เส้นขนาน","dashboard.indicator.drawing.priceLine":"เส้นราคา","dashboard.indicator.drawing.priceChannel":"ช่องราคา","dashboard.indicator.drawing.fibonacciLine":"เส้นฟีโบนักชี","dashboard.indicator.drawing.measure":"วัด","dashboard.indicator.drawing.clearAll":"ล้างภาพวาดเส้นทั้งหมด","dashboard.indicator.market.USStock":"หุ้นสหรัฐ","dashboard.indicator.market.Crypto":"สกุลเงินดิจิทัล","dashboard.indicator.market.Forex":"ฟอเร็กซ์","dashboard.indicator.market.Futures":"ฟิวเจอร์ส","dashboard.indicator.create":"สร้างตัวบ่งชี้","dashboard.indicator.editor.title":"สร้าง/แก้ไขตัวบ่งชี้","dashboard.indicator.editor.name":"ชื่อตัวบ่งชี้","dashboard.indicator.editor.nameRequired":"กรุณากรอกชื่อตัวบ่งชี้","dashboard.indicator.editor.namePlaceholder":"กรุณากรอกชื่อตัวบ่งชี้","dashboard.indicator.editor.description":"คำอธิบายตัวบ่งชี้","dashboard.indicator.editor.descriptionPlaceholder":"โปรดป้อนคำอธิบายของตัวบ่งชี้ (ตัวเลือก)","dashboard.indicator.editor.code":"รหัสหลาม","dashboard.indicator.editor.codeRequired":"กรุณากรอกรหัสตัวบ่งชี้","dashboard.indicator.editor.codePlaceholder":"กรุณากรอกรหัสไพธอน","dashboard.indicator.editor.run":"วิ่ง","dashboard.indicator.editor.runHint":"คลิกปุ่มเรียกใช้เพื่อดูตัวอย่างเอฟเฟกต์ตัวบ่งชี้บนแผนภูมิเส้น K","dashboard.indicator.editor.guide":"คู่มือการพัฒนา","dashboard.indicator.editor.guideTitle":"คู่มือการพัฒนาตัวบ่งชี้ Python","dashboard.indicator.editor.save":"บันทึก","dashboard.indicator.editor.cancel":"ยกเลิก","dashboard.indicator.editor.unnamed":"ตัวบ่งชี้ที่ไม่มีชื่อ","dashboard.indicator.editor.publishToCommunity":"โพสต์ไปที่ชุมชน","dashboard.indicator.editor.publishToCommunityHint":"เมื่อเผยแพร่แล้ว ผู้ใช้รายอื่นจะสามารถดูและใช้ตัวบ่งชี้ของคุณในชุมชนได้","dashboard.indicator.editor.indicatorType":"ประเภทตัวบ่งชี้","dashboard.indicator.editor.indicatorTypeRequired":"โปรดเลือกประเภทตัวบ่งชี้","dashboard.indicator.editor.indicatorTypePlaceholder":"โปรดเลือกประเภทตัวบ่งชี้","dashboard.indicator.editor.previewImage":"ดูตัวอย่าง","dashboard.indicator.editor.uploadImage":"อัพโหลดรูปภาพ","dashboard.indicator.editor.previewImageHint":"ขนาดที่แนะนำ: 800x400 ไม่เกิน 2MB","dashboard.indicator.editor.pricing":"ราคาขาย (QDT)","dashboard.indicator.editor.pricingType.free":"ฟรี","dashboard.indicator.editor.pricingType.permanent":"ถาวร","dashboard.indicator.editor.pricingType.monthly":"การชำระเงินรายเดือน","dashboard.indicator.editor.price":"ราคา","dashboard.indicator.editor.priceRequired":"กรุณากรอกราคา","dashboard.indicator.editor.pricePlaceholder":"กรุณากรอกราคา","dashboard.indicator.editor.pricingHint":"แม้ว่าราคาของตัวบ่งชี้ฟรีจะเป็น 0 แต่แพลตฟอร์มจะให้รางวัลแก่คุณ (QDT) ตามการใช้ตัวบ่งชี้และอัตราการชมเชยของคุณ","dashboard.indicator.editor.aiGenerate":"รุ่นอัจฉริยะ","dashboard.indicator.editor.aiPromptPlaceholder":"บอกความคิดของคุณมาให้ฉัน แล้วฉันจะสร้างโค้ดตัวบ่งชี้ Python ให้กับคุณ","dashboard.indicator.editor.aiGenerateBtn":"AI สร้างโค้ด","dashboard.indicator.editor.aiPromptRequired":"กรุณากรอกความคิดของคุณ","dashboard.indicator.editor.aiGenerateSuccess":"การสร้างรหัสสำเร็จ","dashboard.indicator.editor.aiGenerateError":"การสร้างโค้ดล้มเหลว โปรดลองอีกครั้งในภายหลัง","dashboard.indicator.backtest.title":"ตัวบ่งชี้ย้อนกลับ","dashboard.indicator.backtest.config":"พารามิเตอร์การทดสอบย้อนกลับ","dashboard.indicator.backtest.startDate":"วันที่เริ่มต้น","dashboard.indicator.backtest.endDate":"วันที่สิ้นสุด","dashboard.indicator.backtest.selectStartDate":"เลือกวันที่เริ่มต้น","dashboard.indicator.backtest.selectEndDate":"เลือกวันที่สิ้นสุด","dashboard.indicator.backtest.startDateRequired":"โปรดเลือกวันที่เริ่มต้น","dashboard.indicator.backtest.endDateRequired":"โปรดเลือกวันที่สิ้นสุด","dashboard.indicator.backtest.initialCapital":"ทุนเริ่มต้น","dashboard.indicator.backtest.initialCapitalRequired":"กรุณากรอกเงินทุนเริ่มต้น","dashboard.indicator.backtest.commission":"ค่าธรรมเนียมการจัดการ","dashboard.indicator.backtest.leverage":"อัตราส่วนเลเวอเรจ","dashboard.indicator.backtest.tradeDirection":"ทิศทางการซื้อขาย","dashboard.indicator.backtest.longOnly":"ยาวไป","dashboard.indicator.backtest.shortOnly":"สั้น","dashboard.indicator.backtest.both":"สองทาง","dashboard.indicator.backtest.run":"เริ่มการทดสอบย้อนหลัง","dashboard.indicator.backtest.rerun":"ทดสอบย้อนหลังอีกครั้ง","dashboard.indicator.backtest.close":"ปิด","dashboard.indicator.backtest.running":"อยู่ระหว่างการทดสอบตัวบ่งชี้ย้อนกลับ...","dashboard.indicator.backtest.results":"ผลการทดสอบย้อนหลัง","dashboard.indicator.backtest.totalReturn":"ผลตอบแทนรวม","dashboard.indicator.backtest.annualReturn":"รายได้ต่อปี","dashboard.indicator.backtest.maxDrawdown":"การเบิกถอนสูงสุด","dashboard.indicator.backtest.sharpeRatio":"อัตราส่วนความคมชัด","dashboard.indicator.backtest.winRate":"อัตราการชนะ","dashboard.indicator.backtest.profitFactor":"อัตราส่วนกำไร-ขาดทุน","dashboard.indicator.backtest.totalTrades":"จำนวนธุรกรรม","dashboard.indicator.totalReturn":"ผลตอบแทนรวม","dashboard.indicator.annualReturn":"อัตราผลตอบแทนต่อปี","dashboard.indicator.maxDrawdown":"การเบิกถอนสูงสุด","dashboard.indicator.sharpeRatio":"อัตราส่วนความคมชัด","dashboard.indicator.winRate":"อัตราการชนะ","dashboard.indicator.profitFactor":"อัตราส่วนกำไร-ขาดทุน","dashboard.indicator.totalTrades":"จำนวนธุรกรรมทั้งหมด","dashboard.indicator.backtest.totalCommission":"ค่าธรรมเนียมการจัดการทั้งหมด","dashboard.indicator.backtest.equityCurve":"เส้นอัตราผลตอบแทน","dashboard.indicator.backtest.strategy":"ตัวชี้วัดรายได้","dashboard.indicator.backtest.benchmark":"ผลตอบแทนมาตรฐาน","dashboard.indicator.backtest.tradeHistory":"ประวัติการทำธุรกรรม","dashboard.indicator.backtest.tradeTime":"เวลา","dashboard.indicator.backtest.tradeType":"พิมพ์","dashboard.indicator.backtest.buy":"ซื้อ","dashboard.indicator.backtest.sell":"ขาย","dashboard.indicator.backtest.liquidation":"การชำระบัญชี","dashboard.indicator.backtest.openLong":"เปิดยาวๆ","dashboard.indicator.backtest.closeLong":"ปินตัว","dashboard.indicator.backtest.closeLongStop":"ใกล้ถึงระยะยาว (หยุดการสูญเสีย)","dashboard.indicator.backtest.closeLongProfit":"ปิดมากขึ้น (ทำกำไร)","dashboard.indicator.backtest.addLong":"เพิ่มตำแหน่งยาว","dashboard.indicator.backtest.openShort":"เปิดสั้น","dashboard.indicator.backtest.closeShort":"ว่างเปล่า","dashboard.indicator.backtest.closeShortStop":"ปิด (หยุดการสูญเสีย)","dashboard.indicator.backtest.closeShortProfit":"ปิด (ทำกำไร)","dashboard.indicator.backtest.addShort":"เพิ่มตำแหน่งสั้น","dashboard.indicator.backtest.price":"ราคา","dashboard.indicator.backtest.amount":"ปริมาณ","dashboard.indicator.backtest.balance":"ยอดเงินในบัญชี","dashboard.indicator.backtest.profit":"กำไรและขาดทุน","dashboard.indicator.backtest.success":"การทดสอบย้อนกลับเสร็จสมบูรณ์","dashboard.indicator.backtest.failed":"การทดสอบย้อนกลับล้มเหลว โปรดลองอีกครั้งในภายหลัง","dashboard.indicator.backtest.noIndicatorCode":"ไม่มีรหัสที่ทดสอบย้อนกลับได้สำหรับตัวบ่งชี้นี้","dashboard.indicator.backtest.noSymbol":"โปรดเลือกเป้าหมายการทำธุรกรรมก่อน","dashboard.indicator.backtest.dateRangeExceeded":"ช่วงเวลาการทดสอบย้อนหลังเกินขีดจำกัด: {timeframe} รอบสามารถทดสอบย้อนหลังได้สูงสุด {maxRange}","dashboard.indicator.backtest.dateRangeExceededDays":"Backtest range exceeds limit: {timeframe} max {maxRange} ({maxDays} days)","dashboard.indicator.backtest.metaLine":"Symbol: {symbol} | Market: {market} | Timeframe: {timeframe}","dashboard.indicator.backtest.savedRunId":"Backtest saved. Run ID: {id}","dashboard.indicator.backtest.prev":"Previous","dashboard.indicator.backtest.next":"Next","dashboard.indicator.backtest.hint.entryPctMax":"Max entry: {maxPct}% (reserve budget for future scale-ins)","dashboard.indicator.backtest.steps.strategy.title":"Strategy","dashboard.indicator.backtest.steps.strategy.desc":"Position sizing & risk controls","dashboard.indicator.backtest.steps.trading.title":"Trading settings","dashboard.indicator.backtest.steps.trading.desc":"Time range, capital, fees, leverage","dashboard.indicator.backtest.steps.results.title":"Results","dashboard.indicator.backtest.steps.results.desc":"Backtest output","dashboard.indicator.backtest.panel.risk":"Risk management (SL/TP/Trailing)","dashboard.indicator.backtest.panel.scale":"Scale in / DCA (trend & mean-reversion)","dashboard.indicator.backtest.panel.reduce":"Reduce position (trend & adverse)","dashboard.indicator.backtest.panel.position":"Position sizing","dashboard.indicator.backtest.field.stopLossPct":"Stop Loss (%)","dashboard.indicator.backtest.field.takeProfitPct":"Take Profit (%)","dashboard.indicator.backtest.field.trailingEnabled":"Trailing stop / take profit","dashboard.indicator.backtest.field.trailingStopPct":"Trailing drawdown (%)","dashboard.indicator.backtest.field.trailingActivationPct":"Trailing activation (%)","dashboard.indicator.backtest.field.slippage":"Slippage (%)","dashboard.indicator.backtest.field.trendAddEnabled":"Trend-following scale-in","dashboard.indicator.backtest.field.dcaAddEnabled":"Mean-reversion scale-in","dashboard.indicator.backtest.field.trendAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.dcaAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.trendAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.dcaAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.trendAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.dcaAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.trendReduceEnabled":"Trend reduce","dashboard.indicator.backtest.field.adverseReduceEnabled":"Adverse reduce","dashboard.indicator.backtest.field.trendReduceStepPct":"Trend trigger (%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"Adverse trigger (%)","dashboard.indicator.backtest.field.trendReduceSizePct":"Reduce size (% of position)","dashboard.indicator.backtest.field.adverseReduceSizePct":"Adverse reduce size (% of position)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"Max trend reduce times","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"Max adverse reduce times","dashboard.indicator.backtest.field.entryPct":"Entry size (% of capital)","dashboard.indicator.backtest.field.minOrderPct":"Min order size (% of capital) (optional)","dashboard.indicator.backtest.closeLongTrailing":"Close Long (Trailing)","dashboard.indicator.backtest.reduceLong":"Reduce Long","dashboard.indicator.backtest.closeShortTrailing":"Close Short (Trailing)","dashboard.indicator.backtest.reduceShort":"Reduce Short","dashboard.docs.title":"ศูนย์เอกสาร","dashboard.docs.search.placeholder":"ค้นหาเอกสาร...","dashboard.docs.category.all":"ทั้งหมด","dashboard.docs.category.guide":"คู่มือการพัฒนา","dashboard.docs.category.api":"เอกสารประกอบ API","dashboard.docs.category.tutorial":"บทช่วยสอน","dashboard.docs.category.faq":"คำถามที่พบบ่อย","dashboard.docs.featured.title":"เอกสารแนะนำ","dashboard.docs.featured.tag":"แนะนำ","dashboard.docs.list.views":"เรียกดู","dashboard.docs.list.author":"ผู้เขียน","dashboard.docs.list.empty":"ยังไม่มีเอกสาร","dashboard.docs.list.backToAll":"กลับไปที่เอกสารทั้งหมด","dashboard.docs.list.total":"เอกสารทั้งหมด {count}","dashboard.docs.detail.back":"กลับไปยังรายการเอกสาร","dashboard.docs.detail.updatedAt":"อัปเดตเมื่อ","dashboard.docs.detail.related":"เอกสารที่เกี่ยวข้อง","dashboard.docs.detail.notFound":"ไม่มีเอกสารอยู่","dashboard.docs.detail.error":"เอกสารไม่มีอยู่หรือถูกลบไปแล้ว","dashboard.docs.search.result":"ผลการค้นหา","dashboard.docs.search.keyword":"คำหลัก","community.filter.indicatorType":"ประเภทตัวบ่งชี้","community.filter.all":"ทั้งหมด","community.filter.other":"ตัวเลือกอื่นๆ","community.filter.pricing":"ประเภทการกำหนดราคา","community.filter.allPricing":"ราคาทั้งหมด","community.filter.sortBy":"จัดเรียงตาม","community.filter.search":"ค้นหา","community.filter.searchPlaceholder":"ค้นหาชื่อเมตริก","community.indicatorType.trend":"ประเภทเทรนด์","community.indicatorType.momentum":"ประเภทโมเมนตัม","community.indicatorType.volatility":"ความผันผวน","community.indicatorType.volume":"ปริมาณ","community.indicatorType.custom":"ปรับแต่ง","community.pricing.free":"ฟรี","community.pricing.paid":"จ่าย","community.sort.downloads":"ดาวน์โหลด","community.sort.rating":"คะแนน","community.sort.newest":"รุ่นล่าสุด","community.pagination.total":"ตัวชี้วัดทั้งหมด {total}","community.noDescription":"ยังไม่มีคำอธิบาย","community.detail.type":"พิมพ์","community.detail.pricing":"ราคา","community.detail.rating":"คะแนน","community.detail.downloads":"ดาวน์โหลด","community.detail.author":"ผู้เขียน","community.detail.description":"การแนะนำ","community.detail.detailContent":"คำอธิบายโดยละเอียด","community.detail.backtestStats":"สถิติการทดสอบย้อนหลัง","community.action.purchase":"ตัวบ่งชี้การซื้อ","community.action.addToMyIndicators":"เพิ่มไปยังตัวบ่งชี้ของฉัน","community.action.favorite":"เก็บรวบรวม","community.action.unfavorite":"ยกเลิกรายการโปรด","community.action.buyNow":"ซื้อเลย","community.action.renew":"ต่ออายุ","community.purchase.price":"ราคา","community.purchase.permanent":"ถาวร","community.purchase.monthly":"ดวงจันทร์","community.purchase.confirmBuy":"ยืนยันที่จะซื้อตัวบ่งชี้นี้ ({price} QDT)?","community.purchase.confirmRenew":"ยืนยันที่จะต่ออายุตัวบ่งชี้นี้ ({price} QDT/เดือน) หรือไม่","community.purchase.confirmFree":"ยืนยันเพื่อเพิ่มตัวบ่งชี้ฟรีนี้หรือไม่","community.purchase.confirmTitle":"ยืนยันการดำเนินการ","community.purchase.owned":"คุณได้ซื้อตัวบ่งชี้นี้ (ใช้ได้ถาวร)","community.purchase.ownIndicator":"นี่คือเมตริกที่คุณเผยแพร่","community.purchase.expired":"การสมัครของคุณหมดอายุแล้ว","community.purchase.expiresOn":"เวลาหมดอายุ: {date}","community.tabs.detail":"รายละเอียดตัวบ่งชี้","community.tabs.backtest":"ข้อมูลการทดสอบย้อนหลัง","community.tabs.ratings":"ความคิดเห็นของผู้ใช้","community.rating.myRating":"คะแนนของฉัน","community.rating.stars":"{count} ดาว","community.rating.commentPlaceholder":"แบ่งปันประสบการณ์ของคุณ...","community.rating.submit":"ส่งเรตติ้ง.","community.rating.modify":"ปรับปรุงใหม่","community.rating.saveModify":"บันทึกการเปลี่ยนแปลง","community.rating.cancel":"ยกเลิก","community.rating.selectRating":"โปรดเลือกการให้คะแนน","community.rating.success":"เรตติ้งสำเร็จ","community.rating.modifySuccess":"แก้ไขการตรวจสอบเรียบร้อยแล้ว","community.rating.failed":"การให้คะแนนล้มเหลว","community.rating.noRatings":"ยังไม่มีความคิดเห็น","community.backtest.note":"ข้อมูลข้างต้นเป็นผลการทดสอบย้อนกลับในอดีตและมีไว้เพื่อการอ้างอิงเท่านั้น และไม่ได้แสดงถึงรายได้ในอนาคต","community.backtest.noData":"ยังไม่มีข้อมูลย้อนหลัง","community.backtest.uploadHint":"ผู้เขียนยังไม่ได้อัพโหลดข้อมูล backtest","community.message.loadFailed":"ไม่สามารถโหลดรายการตัวบ่งชี้","community.message.purchaseProcessing":"กำลังประมวลผลคำขอซื้อ...","community.message.downloadSuccess":"เพิ่มเมตริกลงในรายการเมตริกของฉันแล้ว","community.message.favoriteSuccess":"รวบรวมสำเร็จ","community.message.unfavoriteSuccess":"ยกเลิกการรวบรวมเรียบร้อยแล้ว","community.message.operationSuccess":"การดำเนินงานประสบความสำเร็จ","community.message.operationFailed":"การดำเนินการล้มเหลว","community.banner.readOnly":"อ่านอย่างเดียว","community.banner.loginHint":"สำหรับการเข้าสู่ระบบหรือการลงทะเบียน กรุณาคลิกปุ่มเพื่อไปยังหน้าอิสระเพื่อหลีกเลี่ยงปัญหา CSRF","community.banner.jumpButton":"ไปที่เข้าสู่ระบบ/ลงทะเบียน","dashboard.totalEquity":"ส่วนของผู้ถือหุ้นทั้งหมด","dashboard.totalPnL":"กำไรและขาดทุนทั้งหมด","dashboard.aiStrategies":"กลยุทธ์เอไอ","dashboard.indicatorStrategies":"กลยุทธ์ตัวบ่งชี้","dashboard.running":"วิ่ง","dashboard.pnlHistory":"กำไรและขาดทุนในอดีต","dashboard.strategyPerformance":"อัตราส่วนกำไรและขาดทุนของกลยุทธ์","dashboard.recentTrades":"การทำธุรกรรมล่าสุด","dashboard.currentPositions":"ตำแหน่งปัจจุบัน","dashboard.table.time":"เวลา","dashboard.table.strategy":"ชื่อกรมธรรม์","dashboard.table.symbol":"เป้า","dashboard.table.type":"พิมพ์","dashboard.table.side":"ทิศทาง","dashboard.table.size":"เปิดดอกเบี้ย","dashboard.table.entryPrice":"ราคาเปิดเฉลี่ย","dashboard.table.price":"ราคา","dashboard.table.amount":"ปริมาณ","dashboard.table.profit":"กำไรและขาดทุน","dashboard.pendingOrders":"บันทึกการดำเนินการคำสั่งซื้อ","dashboard.totalOrders":"รวม {total} รายการ","dashboard.viewError":"ดูข้อผิดพลาด","dashboard.filled":"ดำเนินการแล้ว","dashboard.orderTable.time":"เวลาที่สร้าง","dashboard.orderTable.strategy":"กลยุทธ์","dashboard.orderTable.symbol":"คู่เทรด","dashboard.orderTable.signalType":"ประเภทสัญญาณ","dashboard.orderTable.amount":"จำนวน","dashboard.orderTable.price":"ราคาที่ดำเนินการ","dashboard.orderTable.status":"สถานะ","dashboard.orderTable.executedAt":"เวลาที่ดำเนินการ","dashboard.signalType.openLong":"เปิด Long","dashboard.signalType.openShort":"เปิด Short","dashboard.signalType.closeLong":"ปิด Long","dashboard.signalType.closeShort":"ปิด Short","dashboard.signalType.addLong":"เพิ่ม Long","dashboard.signalType.addShort":"เพิ่ม Short","dashboard.status.pending":"รอดำเนินการ","dashboard.status.processing":"กำลังดำเนินการ","dashboard.status.completed":"เสร็จสิ้น","dashboard.status.failed":"ล้มเหลว","dashboard.status.cancelled":"ยกเลิกแล้ว","dashboard.table.pnl":"กำไรหรือขาดทุนที่ยังไม่เกิดขึ้นจริง","form.basic-form.basic.title":"แบบฟอร์มพื้นฐาน","form.basic-form.basic.description":"หน้าแบบฟอร์มใช้เพื่อรวบรวมหรือตรวจสอบข้อมูลจากผู้ใช้ โดยทั่วไปจะใช้แบบฟอร์มพื้นฐานในสถานการณ์จำลองที่มีรายการข้อมูลน้อย","form.basic-form.title.label":"ชื่อ","form.basic-form.title.placeholder":"ตั้งชื่อให้เป้าหมาย","form.basic-form.title.required":"กรุณากรอกชื่อ","form.basic-form.date.label":"วันที่เริ่มต้นและสิ้นสุด","form.basic-form.placeholder.start":"วันที่เริ่มต้น","form.basic-form.placeholder.end":"วันที่สิ้นสุด","form.basic-form.date.required":"กรุณาเลือกวันที่เริ่มต้นและสิ้นสุด","form.basic-form.goal.label":"คำอธิบายเป้าหมาย","form.basic-form.goal.placeholder":"กรุณาป้อนเป้าหมายการทำงานแบบเป็นขั้นตอนของคุณ","form.basic-form.goal.required":"กรุณากรอกคำอธิบายเป้าหมาย","form.basic-form.standard.label":"วัด","form.basic-form.standard.placeholder":"กรุณากรอกตัวชี้วัด","form.basic-form.standard.required":"กรุณากรอกตัวชี้วัด","form.basic-form.client.label":"ลูกค้า","form.basic-form.client.required":"โปรดอธิบายลูกค้าที่คุณให้บริการ","form.basic-form.label.tooltip":"ผู้รับบริการเป้าหมาย","form.basic-form.client.placeholder":"โปรดอธิบายลูกค้าที่คุณให้บริการ ลูกค้าภายในโดยตรง @ชื่อ/หมายเลขงาน","form.basic-form.invites.label":"เชิญผู้วิจารณ์","form.basic-form.invites.placeholder":"กรุณา @name/หมายเลขพนักงาน โดยตรง คุณสามารถเชิญได้สูงสุด 5 คน","form.basic-form.weight.label":"น้ำหนัก","form.basic-form.weight.placeholder":"กรุณาเข้า","form.basic-form.public.label":"กำหนดเป้าหมายสาธารณะ","form.basic-form.label.help":"ลูกค้าและผู้ตรวจสอบจะถูกแชร์โดยค่าเริ่มต้น","form.basic-form.radio.public":"สาธารณะ","form.basic-form.radio.partially-public":"เปิดเผยต่อสาธารณะบางส่วน","form.basic-form.radio.private":"ส่วนตัว","form.basic-form.publicUsers.placeholder":"เปิดให้","form.basic-form.option.A":"เพื่อนร่วมงาน 1","form.basic-form.option.B":"เพื่อนร่วมงาน 2","form.basic-form.option.C":"เพื่อนร่วมงานสามคน","form.basic-form.email.required":"กรุณากรอกที่อยู่อีเมลของคุณ!","form.basic-form.email.wrong-format":"รูปแบบที่อยู่อีเมลไม่ถูกต้อง!","form.basic-form.userName.required":"กรุณากรอกชื่อผู้ใช้!","form.basic-form.password.required":"กรุณากรอกรหัสผ่านของคุณ!","form.basic-form.password.twice":"รหัสผ่านที่ป้อนสองครั้งไม่ตรงกัน!","form.basic-form.strength.msg":"กรุณากรอกอย่างน้อย 6 ตัวอักษร กรุณาอย่าใช้รหัสผ่านที่คาดเดาได้ง่าย","form.basic-form.strength.strong":"ความแข็งแกร่ง: แข็งแกร่ง","form.basic-form.strength.medium":"ความแข็งแกร่ง: ปานกลาง","form.basic-form.strength.short":"ความแรง: สั้นเกินไป","form.basic-form.confirm-password.required":"กรุณายืนยันรหัสผ่านของคุณ!","form.basic-form.phone-number.required":"กรุณากรอกหมายเลขโทรศัพท์มือถือของคุณ!","form.basic-form.phone-number.wrong-format":"รูปแบบหมายเลขโทรศัพท์มือถือผิด!","form.basic-form.verification-code.required":"กรุณากรอกรหัสยืนยัน!","form.basic-form.form.get-captcha":"รับรหัสยืนยัน","form.basic-form.captcha.second":"ที่สอง","form.basic-form.form.optional":"(ไม่จำเป็น)","form.basic-form.form.submit":"ส่ง","form.basic-form.form.save":"บันทึก","form.basic-form.email.placeholder":"จดหมาย","form.basic-form.password.placeholder":"รหัสผ่านอย่างน้อย 6 ตัวอักษร คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่","form.basic-form.confirm-password.placeholder":"ยืนยันรหัสผ่าน","form.basic-form.phone-number.placeholder":"หมายเลขโทรศัพท์","form.basic-form.verification-code.placeholder":"รหัสยืนยัน","result.success.title":"ส่งสำเร็จ","result.success.description":'หน้าผลลัพธ์การส่งใช้เพื่อตอบกลับผลการประมวลผลของชุดงานการดำเนินงาน หากเป็นเพียงการดำเนินการง่ายๆ ให้ใช้ข้อความตอบรับพร้อมท์ทั่วโลกพื้นที่ข้อความนี้สามารถแสดงคำแนะนำเสริมง่ายๆ หากจำเป็นต้องแสดง "เอกสาร" พื้นที่สีเทาด้านล่างสามารถแสดงเนื้อหาที่ซับซ้อนมากขึ้นได้',"result.success.operate-title":"ชื่อโครงการ","result.success.operate-id":"รหัสโครงการ","result.success.principal":"บุคคลที่รับผิดชอบ","result.success.operate-time":"เวลาที่มีประสิทธิภาพ","result.success.step1-title":"สร้างโครงการ","result.success.step1-operator":"คู ลิลี่","result.success.step2-title":"การทบทวนเบื้องต้นของแผนก","result.success.step2-operator":"โจว เหมาเหมา","result.success.step2-extra":"ด่วน","result.success.step3-title":"การตรวจสอบทางการเงิน","result.success.step4-title":"เสร็จ","result.success.btn-return":"กลับไปที่รายการ","result.success.btn-project":"ดูรายการ","result.success.btn-print":"พิมพ์","result.fail.error.title":"การส่งล้มเหลว","result.fail.error.description":"โปรดตรวจสอบและแก้ไขข้อมูลต่อไปนี้ก่อนที่จะส่งอีกครั้ง","result.fail.error.hint-title":"เนื้อหาที่คุณส่งมีข้อผิดพลาดต่อไปนี้:","result.fail.error.hint-text1":"บัญชีของคุณถูกระงับ","result.fail.error.hint-btn1":"ละลายทันที","result.fail.error.hint-text2":"บัญชีของคุณยังไม่มีสิทธิ์สมัคร","result.fail.error.hint-btn2":"อัพเกรดตอนนี้","result.fail.error.btn-text":"กลับไปแก้ไข","account.settings.menuMap.custom":"การปรับเปลี่ยนในแบบของคุณ","account.settings.menuMap.binding":"การผูกบัญชี","account.settings.basic.avatar":"อวตาร","account.settings.basic.change-avatar":"เปลี่ยนอวตาร","account.settings.basic.email":"จดหมาย","account.settings.basic.email-message":"กรุณากรอกอีเมล์ของคุณ!","account.settings.basic.nickname":"ชื่อนิค","account.settings.basic.nickname-message":"กรุณากรอกชื่อเล่นของคุณ!","account.settings.basic.profile":"ประวัติโดยย่อ","account.settings.basic.profile-message":"กรุณากรอกรายละเอียดส่วนตัวของคุณ!","account.settings.basic.profile-placeholder":"ประวัติโดยย่อ","account.settings.basic.country":"ประเทศ/ภูมิภาค","account.settings.basic.country-message":"กรุณากรอกประเทศหรือภูมิภาคของคุณ!","account.settings.basic.geographic":"จังหวัดและเมือง","account.settings.basic.geographic-message":"กรุณากรอกจังหวัดและเมืองของคุณ!","account.settings.basic.address":"ที่อยู่ถนน","account.settings.basic.address-message":"กรุณากรอกที่อยู่ของคุณ!","account.settings.basic.phone":"เบอร์ติดต่อ","account.settings.basic.phone-message":"กรุณากรอกหมายเลขติดต่อของคุณ!","account.settings.basic.update":"อัพเดตข้อมูลพื้นฐาน","account.settings.basic.update.success":"อัปเดตข้อมูลพื้นฐานสำเร็จ","account.settings.security.strong":"ทรงพลัง","account.settings.security.medium":"กลาง","account.settings.security.weak":"อ่อนแอ","account.settings.security.password":"รหัสผ่านบัญชี","account.settings.security.password-description":"ความยากของรหัสผ่านปัจจุบัน:","account.settings.security.phone":"การรักษาความปลอดภัยโทรศัพท์มือถือ","account.settings.security.phone-description":"โทรศัพท์มือถือที่ผูกไว้แล้ว:","account.settings.security.question":"ปัญหาด้านความปลอดภัย","account.settings.security.question-description":"ไม่มีการตั้งค่าคำถามเพื่อความปลอดภัย ซึ่งสามารถปกป้องความปลอดภัยของบัญชีได้อย่างมีประสิทธิภาพ","account.settings.security.email":"ผูกอีเมล","account.settings.security.email-description":"ที่อยู่อีเมลที่ถูกผูกไว้แล้ว:","account.settings.security.mfa":"อุปกรณ์เอ็มเอฟเอ","account.settings.security.mfa-description":"อุปกรณ์ MFA ไม่ได้ถูกผูกไว้ หลังจากผูกแล้วสามารถยืนยันอีกครั้งได้","account.settings.security.modify":"ปรับปรุงใหม่","account.settings.security.set":"ตั้งค่า","account.settings.security.bind":"ผูกพัน","account.settings.binding.taobao":"ผูก Taobao","account.settings.binding.taobao-description":"บัญชี Taobao ไม่ได้ถูกผูกไว้ในขณะนี้","account.settings.binding.alipay":"ผูกอาลีเพย์","account.settings.binding.alipay-description":"บัญชี Alipay ไม่ได้ถูกผูกไว้ในขณะนี้","account.settings.binding.dingding":"การผูกมัด DingTalk","account.settings.binding.dingding-description":"ขณะนี้ไม่มีบัญชี DingTalk ถูกผูกไว้","account.settings.binding.bind":"ผูกพัน","account.settings.notification.password":"รหัสผ่านบัญชี","account.settings.notification.password-description":"ข้อความจากผู้ใช้รายอื่นจะได้รับแจ้งในรูปแบบของข้อความไซต์","account.settings.notification.messages":"ข้อความของระบบ","account.settings.notification.messages-description":"ข้อความของระบบจะได้รับแจ้งในรูปแบบของข้อความไซต์","account.settings.notification.todo":"งานที่ต้องทำ","account.settings.notification.todo-description":"งานที่ต้องทำจะได้รับแจ้งในรูปแบบของข้อความในไซต์","account.settings.settings.open":"เปิด","account.settings.settings.close":"ปิด","trading-assistant.title":"ผู้ช่วยการซื้อขาย","trading-assistant.strategyList":"รายการกลยุทธ์","trading-assistant.createStrategy":"สร้างนโยบาย","trading-assistant.noStrategy":"ยังไม่มีกลยุทธ์","trading-assistant.selectStrategy":"โปรดเลือกกลยุทธ์จากด้านซ้ายเพื่อดูรายละเอียด","trading-assistant.startStrategy":"กลยุทธ์การเปิดตัว","trading-assistant.stopStrategy":"กลยุทธ์การหยุด","trading-assistant.editStrategy":"กลยุทธ์ด้านบรรณาธิการ","trading-assistant.deleteStrategy":"ลบนโยบาย","trading-assistant.status.running":"วิ่ง","trading-assistant.status.stopped":"หยุดแล้ว","trading-assistant.status.error":"ความผิดพลาด","trading-assistant.strategyType.IndicatorStrategy":"กลยุทธ์ตัวบ่งชี้ทางเทคนิค","trading-assistant.strategyType.PromptBasedStrategy":"กลยุทธ์คำคิว","trading-assistant.strategyType.GridStrategy":"กลยุทธ์กริด","trading-assistant.tabs.tradingRecords":"ประวัติการทำธุรกรรม","trading-assistant.tabs.positions":"บันทึกตำแหน่ง","trading-assistant.tabs.equityCurve":"เส้นส่วนของผู้ถือหุ้น","trading-assistant.form.step1":"เลือกตัวบ่งชี้","trading-assistant.form.step2":"การกำหนดค่าการแลกเปลี่ยน","trading-assistant.form.step3":"พารามิเตอร์กลยุทธ์","trading-assistant.form.indicator":"เลือกตัวบ่งชี้","trading-assistant.form.indicatorHint":"คุณสามารถเลือกได้เฉพาะตัวบ่งชี้ทางเทคนิคที่คุณซื้อหรือสร้างขึ้นเท่านั้น","trading-assistant.form.qdtCostHints":"การใช้กลยุทธ์จะใช้ QDT โปรดตรวจสอบให้แน่ใจว่าบัญชีมียอดคงเหลือ QDT เพียงพอ","trading-assistant.form.indicatorDescription":"คำอธิบายตัวบ่งชี้","trading-assistant.form.noDescription":"ยังไม่มีคำอธิบาย","trading-assistant.form.exchange":"เลือกการแลกเปลี่ยน","trading-assistant.form.apiKey":"คีย์ API","trading-assistant.form.secretKey":"รหัสลับ","trading-assistant.form.passphrase":"ข้อความรหัสผ่าน","trading-assistant.form.testConnection":"ทดสอบการเชื่อมต่อ","trading-assistant.form.strategyName":"ชื่อกรมธรรม์","trading-assistant.form.symbol":"คู่การซื้อขาย","trading-assistant.form.symbolHint":"ขณะนี้รองรับเฉพาะคู่การซื้อขายสกุลเงินดิจิทัลเท่านั้น","trading-assistant.form.initialCapital":"จำนวนเงินลงทุน","trading-assistant.form.marketType":"ประเภทตลาด","trading-assistant.form.marketTypeFutures":"สัญญา","trading-assistant.form.marketTypeSpot":"จุดสินค้า","trading-assistant.form.marketTypeHint":"สัญญารองรับการซื้อขายสองทางและเลเวอเรจ ในขณะที่สปอตรองรับเฉพาะตำแหน่งซื้อและเลเวอเรจคงที่ที่ 1x","trading-assistant.form.leverage":"ใช้ประโยชน์หลายอย่าง","trading-assistant.form.leverageHint":"สัญญา: 1-125 ครั้ง, จุด: แก้ไข 1 ครั้ง","trading-assistant.form.spotLeverageFixed":"เลเวอเรจการซื้อขายสปอตคงที่ที่ 1x","trading-assistant.form.spotOnlyLongHint":"การซื้อขายแบบสปอตรองรับเฉพาะตำแหน่งซื้อเท่านั้น","trading-assistant.form.tradeDirection":"ทิศทางการซื้อขาย","trading-assistant.form.tradeDirectionLong":"ยาวเท่านั้น","trading-assistant.form.tradeDirectionShort":"สั้นเท่านั้น","trading-assistant.form.tradeDirectionBoth":"ธุรกรรมสองทาง","trading-assistant.form.timeframe":"ช่วงเวลา","trading-assistant.form.klinePeriod":"ช่วงเวลา K-Line","trading-assistant.form.timeframe1m":"1 นาที","trading-assistant.form.timeframe5m":"5 นาที","trading-assistant.form.timeframe15m":"15 นาที","trading-assistant.form.timeframe30m":"30 นาที","trading-assistant.form.timeframe1H":"1 ชั่วโมง","trading-assistant.form.timeframe4H":"4 ชั่วโมง","trading-assistant.form.timeframe1D":"1 วัน","trading-assistant.form.selectStrategyType":"เลือกประเภทกลยุทธ์","trading-assistant.form.indicatorStrategy":"กลยุทธ์ตัวบ่งชี้","trading-assistant.form.indicatorStrategyDesc":"กลยุทธ์การซื้อขายอัตโนมัติตามตัวบ่งชี้ทางเทคนิค","trading-assistant.form.aiStrategy":"กลยุทธ์ AI","trading-assistant.form.aiStrategyDesc":"กลยุทธ์การซื้อขายอัตโนมัติตามการตัดสินใจอัจฉริยะของ AI","trading-assistant.form.enableAiFilter":"เปิดใช้งานตัวกรองการตัดสินใจอัจฉริยะ AI","trading-assistant.form.enableAiFilterHint":"เมื่อเปิดใช้งาน สัญญาณตัวบ่งชี้จะถูกกรองโดย AI เพื่อปรับปรุงคุณภาพการซื้อขาย","trading-assistant.form.aiFilterPrompt":"ข้อความแจ้งแบบกำหนดเอง","trading-assistant.form.aiFilterPromptHint":"ให้คำแนะนำแบบกำหนดเองสำหรับการกรอง AI เว้นว่างไว้เพื่อใช้ค่าเริ่มต้นของระบบ","trading-assistant.validation.strategyTypeRequired":"กรุณาเลือกประเภทกลยุทธ์","trading-assistant.form.advancedSettings":"การตั้งค่าขั้นสูง","trading-assistant.form.orderMode":"โหมดการสั่งซื้อ","trading-assistant.form.orderModeMaker":"ผู้สร้าง","trading-assistant.form.orderModeTaker":"ราคาตลาด (เทคเกอร์)","trading-assistant.form.orderModeHint":"โหมดคำสั่งซื้อที่รอดำเนินการใช้คำสั่งซื้อแบบจำกัดและค่าธรรมเนียมการจัดการต่ำกว่า โหมดราคาตลาดจะดำเนินการทันทีและค่าธรรมเนียมการจัดการจะสูงขึ้น","trading-assistant.form.makerWaitSec":"เวลารอสำหรับคำสั่งซื้อที่รอดำเนินการ (วินาที)","trading-assistant.form.makerWaitSecHint":"เวลาที่ต้องรอการทำธุรกรรมหลังจากทำการสั่งซื้อ ยกเลิกและลองอีกครั้งหลังจากหมดเวลา","trading-assistant.form.makerRetries":"จำนวนการลองใหม่สำหรับคำสั่งซื้อที่รอดำเนินการ","trading-assistant.form.makerRetriesHint":"จำนวนครั้งสูงสุดในการลองใหม่เมื่อไม่ได้ดำเนินการคำสั่งซื้อที่รอดำเนินการ","trading-assistant.form.fallbackToMarket":"คำสั่งซื้อที่รอดำเนินการล้มเหลวและราคาตลาดถูกลดระดับลง","trading-assistant.form.fallbackToMarketHint":"เมื่อการเปิด/ปิดคำสั่งซื้อที่รอดำเนินการไม่เสร็จสมบูรณ์ ควรดาวน์เกรดเป็นคำสั่งซื้อในตลาดเพื่อให้แน่ใจว่าธุรกรรมจะเสร็จสมบูรณ์หรือไม่","trading-assistant.form.marginMode":"โหมดระยะขอบ","trading-assistant.form.marginModeCross":"โกดังเต็ม","trading-assistant.form.marginModeIsolated":"ตำแหน่งที่โดดเดี่ยว","trading-assistant.form.stopLossPct":"อัตราการสูญเสียหยุด (%)","trading-assistant.form.stopLossPctHint":"ตั้งค่าเปอร์เซ็นต์การหยุดการขาดทุน 0 หมายถึงไม่ได้เปิดใช้งานการหยุดการขาดทุน","trading-assistant.form.takeProfitPct":"อัตราส่วนการทำกำไร (%)","trading-assistant.form.takeProfitPctHint":"ตั้งค่าเปอร์เซ็นต์การทำกำไร 0 หมายถึงปิดการใช้งานการทำกำไร","trading-assistant.form.signalMode":"โหมดสัญญาณ","trading-assistant.form.signalModeConfirmed":"ยืนยันโหมด","trading-assistant.form.signalModeAggressive":"โหมดก้าวร้าว","trading-assistant.form.signalModeHint":"โหมดการยืนยัน: ตรวจสอบเฉพาะเส้น K ที่เสร็จสมบูรณ์เท่านั้น โหมดก้าวร้าว: ตรวจสอบการสร้างเส้น K ด้วย","trading-assistant.form.cancel":"ยกเลิก","trading-assistant.form.prev":"ขั้นตอนก่อนหน้า","trading-assistant.form.next":"ขั้นตอนต่อไป","trading-assistant.form.confirmCreate":"ยืนยันการสร้าง","trading-assistant.form.confirmEdit":"ยืนยันการเปลี่ยนแปลง","trading-assistant.messages.createSuccess":"สร้างกลยุทธ์สำเร็จแล้ว","trading-assistant.messages.createFailed":"ไม่สามารถสร้างนโยบายได้","trading-assistant.messages.updateSuccess":"อัปเดตนโยบายสำเร็จแล้ว","trading-assistant.messages.updateFailed":"อัปเดตนโยบายไม่สำเร็จ","trading-assistant.messages.deleteSuccess":"ลบนโยบายสำเร็จแล้ว","trading-assistant.messages.deleteFailed":"ลบนโยบายล้มเหลว","trading-assistant.messages.startSuccess":"กลยุทธ์เริ่มต้นได้สำเร็จ","trading-assistant.messages.startFailed":"ไม่สามารถเริ่มนโยบายได้","trading-assistant.messages.stopSuccess":"กลยุทธ์หยุดสำเร็จ","trading-assistant.messages.stopFailed":"กลยุทธ์หยุดล้มเหลว","trading-assistant.messages.loadFailed":"ไม่สามารถรับรายการนโยบาย","trading-assistant.messages.runningWarning":"กลยุทธ์กำลังทำงานอยู่ โปรดหยุดกลยุทธ์ก่อนที่จะแก้ไข","trading-assistant.messages.deleteConfirmWithName":'คุณแน่ใจหรือไม่ว่าต้องการลบนโยบาย "{name}" การดำเนินการนี้ไม่สามารถย้อนกลับได้',"trading-assistant.messages.deleteConfirm":"คุณแน่ใจหรือไม่ว่าต้องการลบนโยบายนี้การดำเนินการนี้ไม่สามารถย้อนกลับได้","trading-assistant.messages.loadTradesFailed":"ไม่สามารถรับบันทึกธุรกรรมได้","trading-assistant.messages.loadPositionsFailed":"ไม่สามารถรับบันทึกตำแหน่งได้","trading-assistant.messages.loadEquityFailed":"ไม่สามารถรับเส้นโค้งส่วนของผู้ถือหุ้นได้","trading-assistant.messages.loadIndicatorsFailed":"ไม่สามารถโหลดรายการตัวบ่งชี้ โปรดลองอีกครั้งในภายหลัง","trading-assistant.messages.spotLimitations":"การซื้อขายแบบสปอตได้รับการตั้งค่าโดยอัตโนมัติเป็นระยะยาวเท่านั้น เลเวอเรจ 1 เท่า","trading-assistant.messages.autoFillApiConfig":"การกำหนดค่า API ในอดีตของการแลกเปลี่ยนได้รับการเติมข้อมูลโดยอัตโนมัติ","trading-assistant.placeholders.selectIndicator":"โปรดเลือกตัวบ่งชี้","trading-assistant.placeholders.selectExchange":"กรุณาเลือกการแลกเปลี่ยน","trading-assistant.placeholders.inputApiKey":"กรุณากรอกคีย์ API","trading-assistant.placeholders.inputSecretKey":"กรุณากรอกรหัสลับ","trading-assistant.placeholders.inputPassphrase":"กรุณากรอกรหัสผ่าน","trading-assistant.placeholders.inputStrategyName":"โปรดป้อนชื่อนโยบาย","trading-assistant.placeholders.selectSymbol":"กรุณาเลือกคู่การซื้อขาย","trading-assistant.placeholders.selectTimeframe":"โปรดเลือกช่วงเวลา","trading-assistant.placeholders.selectKlinePeriod":"โปรดเลือกช่วงเวลา K-Line","trading-assistant.placeholders.inputAiFilterPrompt":"กรุณาใส่ข้อความแจ้งแบบกำหนดเอง (ไม่บังคับ)","trading-assistant.validation.indicatorRequired":"โปรดเลือกตัวบ่งชี้","trading-assistant.validation.exchangeRequired":"กรุณาเลือกการแลกเปลี่ยน","trading-assistant.validation.apiKeyRequired":"กรุณากรอกคีย์ API","trading-assistant.validation.secretKeyRequired":"กรุณากรอกรหัสลับ","trading-assistant.validation.passphraseRequired":"กรุณากรอกรหัสผ่าน","trading-assistant.validation.exchangeConfigIncomplete":"กรุณากรอกข้อมูลการกำหนดค่าการแลกเปลี่ยนให้ครบถ้วน","trading-assistant.validation.testConnectionRequired":'กรุณาคลิกปุ่ม "ทดสอบการเชื่อมต่อ" และตรวจสอบให้แน่ใจว่าการเชื่อมต่อสำเร็จ',"trading-assistant.validation.testConnectionFailed":"การทดสอบการเชื่อมต่อล้มเหลว กรุณาตรวจสอบการกำหนดค่าและทดสอบอีกครั้ง","trading-assistant.validation.credentialRequired":"กรุณาเพิ่มและทดสอบข้อมูลประจำตัวของตลาดแลกเปลี่ยนในศูนย์ส่วนตัวก่อน","trading-assistant.validation.strategyNameRequired":"โปรดป้อนชื่อนโยบาย","trading-assistant.validation.symbolRequired":"กรุณาเลือกคู่การซื้อขาย","trading-assistant.validation.initialCapitalRequired":"กรุณากรอกจำนวนเงินลงทุน","trading-assistant.validation.leverageRequired":"กรุณากรอกอัตราส่วนเลเวอเรจ","trading-assistant.table.time":"เวลา","trading-assistant.table.type":"พิมพ์","trading-assistant.table.price":"ราคา","trading-assistant.table.amount":"ปริมาณ","trading-assistant.table.value":"จำนวน","trading-assistant.table.commission":"ค่าธรรมเนียมการจัดการ","trading-assistant.table.symbol":"คู่การซื้อขาย","trading-assistant.table.side":"ทิศทาง","trading-assistant.table.size":"ปริมาณตำแหน่ง","trading-assistant.table.entryPrice":"ราคาเปิด","trading-assistant.table.currentPrice":"ราคาปัจจุบัน","trading-assistant.table.unrealizedPnl":"กำไรหรือขาดทุนที่ยังไม่เกิดขึ้นจริง","trading-assistant.table.pnlPercent":"อัตราส่วนกำไรและขาดทุน","trading-assistant.table.buy":"ซื้อ","trading-assistant.table.sell":"ขาย","trading-assistant.table.long":"ยาวไป","trading-assistant.table.short":"สั้น","trading-assistant.table.noPositions":"ยังไม่มีตำแหน่ง","trading-assistant.detail.title":"รายละเอียดกลยุทธ์","trading-assistant.detail.strategyName":"ชื่อกรมธรรม์","trading-assistant.detail.strategyType":"ประเภทกลยุทธ์","trading-assistant.detail.status":"สถานะ","trading-assistant.detail.tradingMode":"รูปแบบการซื้อขาย","trading-assistant.detail.exchange":"แลกเปลี่ยน","trading-assistant.detail.initialCapital":"ทุนเริ่มต้น","trading-assistant.detail.totalInvestment":"จำนวนเงินลงทุนทั้งหมด","trading-assistant.detail.currentEquity":"มูลค่าสุทธิในปัจจุบัน","trading-assistant.detail.totalPnl":"กำไรและขาดทุนทั้งหมด","trading-assistant.detail.indicatorName":"ชื่อตัวบ่งชี้","trading-assistant.detail.maxLeverage":"เลเวอเรจสูงสุด","trading-assistant.detail.decideInterval":"ช่วงการตัดสินใจ","trading-assistant.detail.symbols":"วัตถุธุรกรรม","trading-assistant.detail.createdAt":"เวลาสร้าง","trading-assistant.detail.updatedAt":"เวลาอัปเดต","trading-assistant.detail.llmConfig":"การกำหนดค่าโมเดล AI","trading-assistant.detail.exchangeConfig":"การกำหนดค่าการแลกเปลี่ยน","trading-assistant.detail.provider":"ผู้ให้บริการ","trading-assistant.detail.modelId":"รหัสรุ่น","trading-assistant.detail.close":"ปิด","trading-assistant.detail.loadFailed":"ไม่สามารถรับรายละเอียดนโยบายได้","trading-assistant.equity.noData":"ยังไม่มีข้อมูลมูลค่าสุทธิ","trading-assistant.equity.equity":"มูลค่าสุทธิ","trading-assistant.exchange.tradingMode":"รูปแบบการซื้อขาย","trading-assistant.exchange.virtual":"การซื้อขายจำลอง","trading-assistant.exchange.live":"การทำธุรกรรมจริง","trading-assistant.exchange.selectExchange":"เลือกการแลกเปลี่ยน","trading-assistant.exchange.walletAddress":"ที่อยู่กระเป๋าเงิน","trading-assistant.exchange.walletAddressPlaceholder":"กรุณากรอกที่อยู่กระเป๋าเงินของคุณ (เริ่มต้นด้วย 0x)","trading-assistant.exchange.privateKey":"รหัสส่วนตัว","trading-assistant.exchange.privateKeyPlaceholder":"กรุณากรอกรหัสส่วนตัว (64 ตัวอักษร)","trading-assistant.exchange.testConnection":"ทดสอบการเชื่อมต่อ","trading-assistant.exchange.connectionSuccess":"การเชื่อมต่อสำเร็จ","trading-assistant.exchange.connectionFailed":"การเชื่อมต่อล้มเหลว","trading-assistant.exchange.testFailed":"การทดสอบการเชื่อมต่อล้มเหลว","trading-assistant.exchange.fillComplete":"กรุณากรอกข้อมูลการกำหนดค่าการแลกเปลี่ยนให้ครบถ้วน","trading-assistant.strategyTypeOptions.ai":"กลยุทธ์ที่ขับเคลื่อนด้วย AI","trading-assistant.strategyTypeOptions.indicator":"กลยุทธ์ตัวบ่งชี้ทางเทคนิค","trading-assistant.strategyTypeOptions.aiDeveloping":"ฟังก์ชันกลยุทธ์ที่ขับเคลื่อนด้วย AI อยู่ระหว่างการพัฒนา ดังนั้นโปรดคอยติดตาม","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"คุณสมบัติกลยุทธ์ที่ขับเคลื่อนด้วย AI กำลังอยู่ในการพัฒนา","trading-assistant.indicatorType.trend":"แนวโน้ม","trading-assistant.indicatorType.momentum":"โมเมนตัม","trading-assistant.indicatorType.volatility":"ความผันผวน","trading-assistant.indicatorType.volume":"ปริมาณ","trading-assistant.indicatorType.custom":"ปรับแต่ง","trading-assistant.exchangeNames":{okx:"โอเคเอ็กซ์",binance:"ไบแนนซ์",hyperliquid:"ไฮเปอร์ลิควิด",blockchaincom:"Blockchain.com",coinbaseexchange:"คอยน์เบส",gate:"Gate.io",mexc:"เม็กซิโก",kraken:"คราเคน",bitfinex:"Bitfinex",bybit:"บายบิต",kucoin:"คูคอยน์",huobi:"หั่วปี้",bitget:"บิทเก็ต",bitmex:"BitMEX",deribit:"อนุมาน",phemex:"ฟีเม็กซ์",bitmart:"บิตมาร์ท",bitstamp:"บิตสแตมป์",bittrex:"บิทเทร็กซ์",poloniex:"โปโลนีกซ์",gemini:"ราศีเมถุน",cryptocom:"Crypto.com",bitflyer:"บิตฟลายเออร์",upbit:"อัพบิต",bithumb:"บิธัมบ์",coinone:"โคโนเน่",zb:"ซีบี",lbank:"แอลแบงค์",bibox:"ไบบ็อกซ์",bigone:"บิ๊กวัน",bitrue:"บิตทรู",coinex:"คอยน์เอ็กซ์",digifinex:"DigiFinex",ftx:"เอฟทีเอ็กซ์",ftxus:"FTX สหรัฐอเมริกา",binanceus:"Binance สหรัฐอเมริกา",binancecoinm:"Binance COIN-M",binanceusdm:"Binance USDⓈ-M",deepcoin:"ดีพคอยน์"},"ai-trading-assistant.title":"ผู้ช่วยการซื้อขาย AI","ai-trading-assistant.strategyList":"รายการกลยุทธ์","ai-trading-assistant.createStrategy":"สร้างนโยบาย","ai-trading-assistant.noStrategy":"ยังไม่มีกลยุทธ์","ai-trading-assistant.selectStrategy":"โปรดเลือกกลยุทธ์จากด้านซ้ายเพื่อดูรายละเอียด","ai-trading-assistant.startStrategy":"กลยุทธ์การเปิดตัว","ai-trading-assistant.stopStrategy":"กลยุทธ์การหยุด","ai-trading-assistant.editStrategy":"กลยุทธ์ด้านบรรณาธิการ","ai-trading-assistant.deleteStrategy":"ลบนโยบาย","ai-trading-assistant.status.running":"วิ่ง","ai-trading-assistant.status.stopped":"หยุดแล้ว","ai-trading-assistant.status.error":"ความผิดพลาด","ai-trading-assistant.tabs.tradingRecords":"ประวัติการทำธุรกรรม","ai-trading-assistant.tabs.positions":"บันทึกตำแหน่ง","ai-trading-assistant.tabs.aiDecisions":"บันทึกการตัดสินใจของ AI","ai-trading-assistant.tabs.equityCurve":"เส้นส่วนของผู้ถือหุ้น","ai-trading-assistant.form.createTitle":"สร้างกลยุทธ์การซื้อขายด้วย AI","ai-trading-assistant.form.editTitle":"แก้ไขกลยุทธ์การซื้อขาย AI","ai-trading-assistant.form.strategyName":"ชื่อกรมธรรม์","ai-trading-assistant.form.modelId":"โมเดลเอไอ","ai-trading-assistant.form.modelIdHint":"ใช้บริการระบบ OpenRouter โดยไม่ต้องกำหนดค่า API Key","ai-trading-assistant.form.decideInterval":"ช่วงการตัดสินใจ","ai-trading-assistant.form.decideInterval5m":"5 นาที","ai-trading-assistant.form.decideInterval10m":"10 นาที","ai-trading-assistant.form.decideInterval30m":"30 นาที","ai-trading-assistant.form.decideInterval1h":"1 ชั่วโมง","ai-trading-assistant.form.decideInterval4h":"4 ชั่วโมง","ai-trading-assistant.form.decideInterval1d":"1 วัน","ai-trading-assistant.form.decideInterval1w":"1 สัปดาห์","ai-trading-assistant.form.decideIntervalHint":"ช่วงเวลาที่ AI ในการตัดสินใจ","ai-trading-assistant.form.runPeriod":"วิ่งรอบ","ai-trading-assistant.form.runPeriodHint":"เวลาเริ่มต้นและเวลาสิ้นสุดของการดำเนินกลยุทธ์","ai-trading-assistant.form.startDate":"วันที่เริ่มต้น","ai-trading-assistant.form.endDate":"วันที่สิ้นสุด","ai-trading-assistant.form.qdtCostTitle":"คำแนะนำการหักเงินของ QDT","ai-trading-assistant.form.qdtCostHint":"การตัดสินใจของ AI แต่ละครั้งจะถูกหักออก {cost} QDT โปรดตรวจสอบให้แน่ใจว่าบัญชีของคุณมียอดคงเหลือ QDT เพียงพอ ในระหว่างการดำเนินการตามกลยุทธ์ค่าธรรมเนียมจะถูกหักแบบเรียลไทม์สำหรับการตัดสินใจแต่ละครั้ง","ai-trading-assistant.form.apiKey":"คีย์ API","ai-trading-assistant.form.exchange":"เลือกการแลกเปลี่ยน","ai-trading-assistant.form.secretKey":"รหัสลับ","ai-trading-assistant.form.passphrase":"ข้อความรหัสผ่าน","ai-trading-assistant.form.testConnection":"ทดสอบการเชื่อมต่อ","ai-trading-assistant.form.symbol":"คู่การซื้อขาย","ai-trading-assistant.form.symbolHint":"เลือกคู่การซื้อขายที่จะซื้อขาย","ai-trading-assistant.form.initialCapital":"จำนวนเงินที่ลงทุน (มาร์จิ้น)","ai-trading-assistant.form.leverage":"ใช้ประโยชน์หลายอย่าง","ai-trading-assistant.form.timeframe":"ช่วงเวลา","ai-trading-assistant.form.timeframe1m":"1 นาที","ai-trading-assistant.form.timeframe5m":"5 นาที","ai-trading-assistant.form.timeframe15m":"15 นาที","ai-trading-assistant.form.timeframe30m":"30 นาที","ai-trading-assistant.form.timeframe1H":"1 ชั่วโมง","ai-trading-assistant.form.timeframe4H":"4 ชั่วโมง","ai-trading-assistant.form.timeframe1D":"1 วัน","ai-trading-assistant.form.marketType":"ประเภทตลาด","ai-trading-assistant.form.marketTypeFutures":"สัญญา","ai-trading-assistant.form.marketTypeSpot":"จุดสินค้า","ai-trading-assistant.form.totalPnl":"กำไรและขาดทุนทั้งหมด","ai-trading-assistant.form.customPrompt":"คำแจ้งที่กำหนดเอง","ai-trading-assistant.form.customPromptHint":"ตัวเลือกเสริม ใช้เพื่อปรับแต่งกลยุทธ์การซื้อขาย AI และตรรกะในการตัดสินใจ","ai-trading-assistant.form.cancel":"ยกเลิก","ai-trading-assistant.form.prev":"ขั้นตอนก่อนหน้า","ai-trading-assistant.form.next":"ขั้นตอนต่อไป","ai-trading-assistant.form.confirmCreate":"ยืนยันการสร้าง","ai-trading-assistant.form.confirmEdit":"ยืนยันการเปลี่ยนแปลง","ai-trading-assistant.messages.createSuccess":"สร้างกลยุทธ์สำเร็จแล้ว","ai-trading-assistant.messages.createFailed":"ไม่สามารถสร้างนโยบายได้","ai-trading-assistant.messages.updateSuccess":"อัปเดตนโยบายสำเร็จแล้ว","ai-trading-assistant.messages.updateFailed":"อัปเดตนโยบายไม่สำเร็จ","ai-trading-assistant.messages.deleteSuccess":"ลบนโยบายสำเร็จแล้ว","ai-trading-assistant.messages.deleteFailed":"ลบนโยบายล้มเหลว","ai-trading-assistant.messages.startSuccess":"กลยุทธ์เริ่มต้นได้สำเร็จ","ai-trading-assistant.messages.startFailed":"ไม่สามารถเริ่มนโยบายได้","ai-trading-assistant.messages.stopSuccess":"กลยุทธ์หยุดสำเร็จ","ai-trading-assistant.messages.stopFailed":"กลยุทธ์หยุดล้มเหลว","ai-trading-assistant.messages.loadFailed":"ไม่สามารถรับรายการนโยบาย","ai-trading-assistant.messages.loadDecisionsFailed":"ไม่สามารถรับบันทึกการตัดสินใจของ AI","ai-trading-assistant.messages.deleteConfirm":"คุณแน่ใจหรือไม่ว่าต้องการลบนโยบายนี้การดำเนินการนี้ไม่สามารถย้อนกลับได้","ai-trading-assistant.placeholders.inputStrategyName":"โปรดป้อนชื่อนโยบาย","ai-trading-assistant.placeholders.selectModelId":"โปรดเลือกโมเดล AI","ai-trading-assistant.placeholders.selectDecideInterval":"โปรดเลือกช่วงการตัดสินใจ","ai-trading-assistant.placeholders.startTime":"เวลาเริ่มต้น","ai-trading-assistant.placeholders.endTime":"เวลาสิ้นสุด","ai-trading-assistant.placeholders.inputApiKey":"กรุณากรอกคีย์ API","ai-trading-assistant.placeholders.selectExchange":"กรุณาเลือกการแลกเปลี่ยน","ai-trading-assistant.placeholders.inputSecretKey":"กรุณากรอกรหัสลับ","ai-trading-assistant.placeholders.inputPassphrase":"กรุณากรอกรหัสผ่าน","ai-trading-assistant.placeholders.selectSymbol":"โปรดเลือกคู่การซื้อขาย เช่น BTC/USDT","ai-trading-assistant.placeholders.selectTimeframe":"โปรดเลือกช่วงเวลา","ai-trading-assistant.placeholders.inputCustomPrompt":"โปรดป้อนคำแจ้งที่กำหนดเอง (ไม่บังคับ)","ai-trading-assistant.validation.strategyNameRequired":"โปรดป้อนชื่อนโยบาย","ai-trading-assistant.validation.modelIdRequired":"โปรดเลือกโมเดล AI","ai-trading-assistant.validation.runPeriodRequired":"กรุณาเลือกรอบการทำงาน","ai-trading-assistant.validation.apiKeyRequired":"กรุณากรอกคีย์ API","ai-trading-assistant.validation.exchangeRequired":"กรุณาเลือกการแลกเปลี่ยน","ai-trading-assistant.validation.secretKeyRequired":"กรุณากรอกรหัสลับ","ai-trading-assistant.validation.symbolRequired":"กรุณาเลือกคู่การซื้อขาย","ai-trading-assistant.validation.initialCapitalRequired":"กรุณากรอกจำนวนเงินลงทุน","ai-trading-assistant.table.time":"เวลา","ai-trading-assistant.table.type":"พิมพ์","ai-trading-assistant.table.price":"ราคา","ai-trading-assistant.table.amount":"ปริมาณ","ai-trading-assistant.table.value":"จำนวน","ai-trading-assistant.table.symbol":"คู่การซื้อขาย","ai-trading-assistant.table.side":"ทิศทาง","ai-trading-assistant.table.size":"ปริมาณตำแหน่ง","ai-trading-assistant.table.entryPrice":"ราคาเปิด","ai-trading-assistant.table.currentPrice":"ราคาปัจจุบัน","ai-trading-assistant.table.unrealizedPnl":"กำไรหรือขาดทุนที่ยังไม่เกิดขึ้นจริง","ai-trading-assistant.table.profit":"กำไรและขาดทุน","ai-trading-assistant.table.openLong":"เปิดยาวๆ","ai-trading-assistant.table.closeLong":"ปินตัว","ai-trading-assistant.table.openShort":"เปิดสั้น","ai-trading-assistant.table.closeShort":"ว่างเปล่า","ai-trading-assistant.table.addLong":"กาดอต","ai-trading-assistant.table.addShort":"เพิ่มสั้น","ai-trading-assistant.table.closeShortProfit":"ขายทำกำไรจากสถานะขาย","ai-trading-assistant.table.closeShortStop":"หยุดการสูญเสีย","ai-trading-assistant.table.closeLongProfit":"หยุดยาวและทำกำไร","ai-trading-assistant.table.closeLongStop":"หยุดการสูญเสีย","ai-trading-assistant.table.buy":"ซื้อ","ai-trading-assistant.table.sell":"ขาย","ai-trading-assistant.table.long":"ยาวไป","ai-trading-assistant.table.short":"สั้น","ai-trading-assistant.table.hold":"ถือ","ai-trading-assistant.table.reasoning":"เหตุผลในการวิเคราะห์","ai-trading-assistant.table.decisions":"การตัดสินใจ","ai-trading-assistant.table.riskAssessment":"การประเมินความเสี่ยง","ai-trading-assistant.table.confidence":"ความมั่นใจ","ai-trading-assistant.table.totalRecords":"รวม {total} บันทึก","ai-trading-assistant.table.noPositions":"ยังไม่มีตำแหน่ง","ai-trading-assistant.detail.title":"รายละเอียดกลยุทธ์","ai-trading-assistant.equity.noData":"ยังไม่มีข้อมูลมูลค่าสุทธิ","ai-trading-assistant.equity.equity":"มูลค่าสุทธิ","ai-trading-assistant.exchange.testFailed":"การทดสอบการเชื่อมต่อล้มเหลว","ai-trading-assistant.exchange.connectionSuccess":"การเชื่อมต่อสำเร็จ","ai-trading-assistant.exchange.connectionFailed":"การเชื่อมต่อล้มเหลว","ai-trading-assistant.form.advancedSettings":"การตั้งค่าขั้นสูง","ai-trading-assistant.form.orderMode":"โหมดการสั่งซื้อ","ai-trading-assistant.form.orderModeMaker":"ผู้สร้าง","ai-trading-assistant.form.orderModeTaker":"ราคาตลาด (เทคเกอร์)","ai-trading-assistant.form.orderModeHint":"โหมดคำสั่งซื้อที่รอดำเนินการใช้คำสั่งซื้อแบบจำกัดและค่าธรรมเนียมการจัดการต่ำกว่า โหมดราคาตลาดจะดำเนินการทันทีและค่าธรรมเนียมการจัดการจะสูงขึ้น","ai-trading-assistant.form.makerWaitSec":"เวลารอสำหรับคำสั่งซื้อที่รอดำเนินการ (วินาที)","ai-trading-assistant.form.makerWaitSecHint":"เวลาที่ต้องรอการทำธุรกรรมหลังจากทำการสั่งซื้อ ยกเลิกและลองอีกครั้งหลังจากหมดเวลา","ai-trading-assistant.form.makerRetries":"จำนวนการลองใหม่สำหรับคำสั่งซื้อที่รอดำเนินการ","ai-trading-assistant.form.makerRetriesHint":"จำนวนครั้งสูงสุดในการลองใหม่เมื่อไม่ได้ดำเนินการคำสั่งซื้อที่รอดำเนินการ","ai-trading-assistant.form.fallbackToMarket":"คำสั่งซื้อที่รอดำเนินการล้มเหลวและราคาตลาดถูกลดระดับลง","ai-trading-assistant.form.fallbackToMarketHint":"เมื่อการเปิด/ปิดคำสั่งซื้อที่รอดำเนินการไม่เสร็จสมบูรณ์ ควรดาวน์เกรดเป็นคำสั่งซื้อในตลาดเพื่อให้แน่ใจว่าธุรกรรมจะเสร็จสมบูรณ์หรือไม่","ai-trading-assistant.form.marginMode":"โหมดระยะขอบ","ai-trading-assistant.form.marginModeCross":"โกดังเต็ม","ai-trading-assistant.form.marginModeIsolated":"ตำแหน่งที่โดดเดี่ยว","ai-analysis.title":"เครื่องมือการซื้อขายควอนตัม","ai-analysis.system.online":"ออนไลน์","ai-analysis.system.agents":"ตัวแทน","ai-analysis.system.active":"คล่องแคล่ว","ai-analysis.system.stage":"เวที","ai-analysis.panel.roster":"รายชื่อตัวแทน","ai-analysis.panel.thinking":"กำลังคิด...","ai-analysis.panel.done":"เสร็จ","ai-analysis.panel.standby":"สแตนด์บาย","ai-analysis.input.title":"เครื่องมือการซื้อขายควอนตัม","ai-analysis.input.placeholder":"เลือกสินทรัพย์เป้าหมาย (เช่น BTC/USDT)","ai-analysis.input.watchlist":"หุ้นทางเลือก","ai-analysis.input.start":"เริ่มการวิเคราะห์","ai-analysis.input.recent":"งานล่าสุด:","ai-analysis.vis.stage":"เวที","ai-analysis.vis.processing":"กำลังประมวลผล","ai-analysis.result.complete":"การวิเคราะห์เสร็จสมบูรณ์","ai-analysis.result.signal":"สัญญาณสุดท้าย","ai-analysis.result.confidence":"ความมั่นใจ:","ai-analysis.result.new":"การวิเคราะห์ใหม่","ai-analysis.result.full":"ดูรายงานฉบับเต็ม","ai-analysis.logs.title":"บันทึกของระบบ","ai-analysis.modal.title":"รายงานที่เป็นความลับ","ai-analysis.modal.fundamental":"การวิเคราะห์พื้นฐาน","ai-analysis.modal.technical":"การวิเคราะห์ทางเทคนิค","ai-analysis.modal.sentiment":"การวิเคราะห์อารมณ์","ai-analysis.modal.risk":"การประเมินความเสี่ยง","ai-analysis.stage.idle":"สแตนด์บาย","ai-analysis.stage.1":"ระยะที่หนึ่ง: การวิเคราะห์หลายมิติ","ai-analysis.stage.2":"ระยะที่สอง: การอภิปรายระยะยาว-ระยะสั้น","ai-analysis.stage.3":"ระยะที่สาม: การวางแผนเชิงกลยุทธ์","ai-analysis.stage.4":"ขั้นตอนที่สี่: การทบทวนการควบคุมความเสี่ยง","ai-analysis.stage.complete":"เสร็จ","ai-analysis.agent.investment_director":"ผู้อำนวยการฝ่ายการลงทุน","ai-analysis.agent.role.investment_director":"การวิเคราะห์ที่ครอบคลุมและข้อสรุปขั้นสุดท้าย","ai-analysis.agent.market":"นักวิเคราะห์ตลาด","ai-analysis.agent.role.market":"เทคโนโลยีและข้อมูลการตลาด","ai-analysis.agent.fundamental":"นักวิเคราะห์พื้นฐาน","ai-analysis.agent.role.fundamental":"การเงินและการประเมินค่า","ai-analysis.agent.technical":"นักวิเคราะห์ทางเทคนิค","ai-analysis.agent.role.technical":"ตัวชี้วัดและแผนภูมิทางเทคนิค","ai-analysis.agent.news":"นักวิเคราะห์ข่าว","ai-analysis.agent.role.news":"ตัวกรองข่าวทั่วโลก","ai-analysis.agent.sentiment":"นักวิเคราะห์ความรู้สึก","ai-analysis.agent.role.sentiment":"สังคมและอารมณ์","ai-analysis.agent.risk":"นักวิเคราะห์ความเสี่ยง","ai-analysis.agent.role.risk":"การตรวจสอบความเสี่ยงเบื้องต้น","ai-analysis.agent.bull":"นักวิจัยรั้น","ai-analysis.agent.role.bull":"การขุดตัวเร่งปฏิกิริยาการเติบโต","ai-analysis.agent.bear":"นักวิจัยขาลง","ai-analysis.agent.role.bear":"การขุดความเสี่ยงและข้อบกพร่อง","ai-analysis.agent.manager":"ผู้จัดการฝ่ายวิจัย","ai-analysis.agent.role.manager":"ผู้ดูแลการอภิปราย","ai-analysis.agent.trader":"พ่อค้า","ai-analysis.agent.role.trader":"นักยุทธศาสตร์บริหาร","ai-analysis.agent.risky":"นักวิเคราะห์กิจกรรม","ai-analysis.agent.role.risky":"กลยุทธ์เชิงรุก","ai-analysis.agent.neutral":"นักวิเคราะห์ความสมดุล","ai-analysis.agent.role.neutral":"กลยุทธ์การสร้างสมดุล","ai-analysis.agent.safe":"นักวิเคราะห์อนุรักษ์นิยม","ai-analysis.agent.role.safe":"กลยุทธ์อนุรักษ์นิยม","ai-analysis.agent.cro":"ผู้จัดการฝ่ายควบคุมความเสี่ยง (CRO)","ai-analysis.agent.role.cro":"อำนาจในการตัดสินใจขั้นสุดท้าย","ai-analysis.script.market":"กำลังดึงข้อมูล OHLCV จากการแลกเปลี่ยนหลัก...","ai-analysis.script.fundamental":"กำลังดึงรายงานทางการเงินรายไตรมาส...","ai-analysis.script.technical":"กำลังวิเคราะห์ตัวชี้วัดทางเทคนิคและรูปแบบกราฟ...","ai-analysis.script.news":"กำลังสแกนข่าวการเงินทั่วโลก...","ai-analysis.script.sentiment":"วิเคราะห์เทรนด์โซเชียลมีเดีย...","ai-analysis.script.risk":"กำลังคำนวณความผันผวนในอดีต...","invite.inviteLink":"ลิงค์คำเชิญ","invite.copy":"คัดลอกลิงก์","invite.copySuccess":"คัดลอกสำเร็จ!","invite.copyFailed":"การคัดลอกล้มเหลว โปรดคัดลอกด้วยตนเอง","invite.noInviteLink":"ไม่ได้สร้างลิงก์คำเชิญ","invite.totalInvites":"คำเชิญสะสม","invite.totalReward":"รางวัลสะสม","invite.rules":"กฎการเชิญชวน","invite.rule1":"ทุกครั้งที่คุณเชิญเพื่อนมาลงทะเบียนสำเร็จ คุณจะได้รับรางวัล","invite.rule2":"หากเพื่อนที่ได้รับเชิญทำธุรกรรมครั้งแรกสำเร็จ คุณจะได้รับรางวัลเพิ่มเติม","invite.rule3":"รางวัลคำเชิญจะถูกส่งไปยังบัญชีของคุณโดยตรง","invite.inviteList":"รายการเชิญ","invite.tasks":"ศูนย์ภารกิจ","invite.inviteeName":"ผู้ได้รับเชิญ","invite.inviteTime":"เวลาเชิญ","invite.status":"สถานะ","invite.reward":"รางวัล","invite.active":"คล่องแคล่ว","invite.inactive":"ไม่ได้เปิดใช้งาน","invite.completed":"สมบูรณ์","invite.claimed":"ได้รับ","invite.pending":"ให้แล้วเสร็จ","invite.goToTask":"เพื่อให้เสร็จสมบูรณ์","invite.claimReward":"รับรางวัล","invite.verify":"การยืนยันเสร็จสมบูรณ์","invite.verifySuccess":"การยืนยันสำเร็จ!งานเสร็จสมบูรณ์","invite.verifyNotCompleted":"งานยังไม่เสร็จสมบูรณ์ กรุณาทำงานให้เสร็จก่อน","invite.verifyFailed":"การยืนยันล้มเหลว โปรดลองอีกครั้งในภายหลัง","invite.claimSuccess":"รับ {reward} QDT สำเร็จแล้ว!","invite.claimFailed":"ไม่สามารถรวบรวมได้ โปรดลองอีกครั้งในภายหลัง","invite.totalRecords":"รวม {total} บันทึก","invite.task.twitter.title":"รีทวีตไปที่ X (Twitter)","invite.task.twitter.desc":"แบ่งปันทวีตอย่างเป็นทางการของเราไปยังบัญชี X (Twitter) ของคุณ","invite.task.youtube.title":"ติดตามช่อง YouTube ของเรา","invite.task.youtube.desc":"สมัครสมาชิกและติดตามช่อง YouTube อย่างเป็นทางการของเรา","invite.task.telegram.title":"เข้าร่วมกลุ่มโทรเลข","invite.task.telegram.desc":"เข้าร่วมกลุ่มชุมชนโทรเลขอย่างเป็นทางการของเรา","invite.task.discord.title":"เข้าร่วมเซิร์ฟเวอร์ Discord","invite.task.discord.desc":"เข้าร่วมเซิร์ฟเวอร์ชุมชน Discord ของเรา",message:"-","layouts.usermenu.dialog.title":"ข้อมูล","layouts.usermenu.dialog.content":"คุณแน่ใจหรือไม่ว่าต้องการออกจากระบบ?","layouts.userLayout.title":"ค้นหาความจริงในความไม่แน่นอน","dashboard.indicator.boundary.message":"Note: The indicator script only computes plots + buy/sell signals. Position sizing, risk, scaling, fees/slippage belong to execution config.","dashboard.indicator.boundary.indicatorRule":"Keep the script to buy/sell only (and set df['buy']/df['sell']). Do NOT implement position management, TP/SL, scaling in the script.","dashboard.indicator.boundary.backtestRule":"Rule: If a bar has a main signal (buy/sell → open/close/reverse), scaling in/out is skipped on the same bar.","dashboard.indicator.guide.title":"Python Indicator & Strategy Development Guide","dashboard.indicator.guide.intro":"This platform supports writing custom technical indicators and trading signals using Python. The system includes built-in pandas and numpy data analysis libraries. You can use standard DataFrame operations to process K-line data and draw charts or mark buy/sell signals.","dashboard.indicator.guide.section1.title":"1. Runtime Environment & Predefined Variables","dashboard.indicator.guide.section1.env":"Your code runs in a browser-based Python environment (Pyodide).","dashboard.indicator.guide.section1.libs":"Pre-installed Libraries","dashboard.indicator.guide.section1.libsDesc":"The following libraries are imported by default, no need to import again:","dashboard.indicator.guide.section1.libsList":"pandas (pd), numpy (np), math, json","dashboard.indicator.guide.section1.data":"Input Data: df","dashboard.indicator.guide.section1.dataDesc":"The system automatically converts current K-line data into a Pandas DataFrame object, variable name is df.","dashboard.indicator.guide.section1.dataColumns":"df contains the following columns (all float type):","dashboard.indicator.guide.section1.dataColumnsList":"time (timestamp, seconds), open, high, low, close, volume","dashboard.indicator.guide.section1.dataNote":"Data index is arranged from old to new (0 is the earliest data, last row is the latest data).","dashboard.indicator.guide.section1.dataIndex":"Important: df index is timestamp (DatetimeIndex), please preserve the index, avoid using .values which loses the index.","dashboard.indicator.guide.section2.title":"2. Parameter Definition","dashboard.indicator.guide.section2.desc":"You can define variables as parameters at the beginning of your code. The system will try to parse statements like variable = value as adjustable parameters.","dashboard.indicator.guide.section2.example":"Parameter Example","dashboard.indicator.guide.section2.exampleCode":"span = 20 or multiplier = 2.0","dashboard.indicator.guide.section3.title":"3. Backtest Signal Setup (Important!)","dashboard.indicator.guide.section3.desc":"If you want your indicator to support backtesting, you must set the following two columns in your code:","dashboard.indicator.guide.section3.backtestRequired":"Required for Backtesting:","dashboard.indicator.guide.section3.backtestBuySignal":"df['buy_signal'] - Boolean Series, True indicates buy signal","dashboard.indicator.guide.section3.backtestSellSignal":"df['sell_signal'] - Boolean Series, True indicates sell signal","dashboard.indicator.guide.section3.backtestExample":"Example:","dashboard.indicator.guide.section3.backtestExampleCode":"df['buy_signal'] = condition_buy
df['sell_signal'] = condition_sell","dashboard.indicator.guide.section3.backtestNote":"Note: Even if you only set output.signals for chart display, you must set these two columns to enable backtesting.","dashboard.indicator.guide.section4.title":"4. Output Requirements: output","dashboard.indicator.guide.section4.desc":"At the end of code execution, you must define a dictionary named output to tell the chart how to display results.","dashboard.indicator.guide.section4.fields":"The output dictionary contains the following fields:","dashboard.indicator.guide.section4.plots":"plots - For drawing lines (e.g., moving averages, RSI)","dashboard.indicator.guide.section4.signals":"signals - For marking buy/sell signals (e.g., arrows, labels)","dashboard.indicator.guide.section4.name":"name - Indicator name (optional)","dashboard.indicator.guide.section4.calculatedVars":"calculatedVars - Calculated variables (optional, for displaying additional information)","dashboard.indicator.guide.section5.title":"5. Plot Configuration (Plots)","dashboard.indicator.guide.section5.desc":"Each object in the plots list represents a line.","dashboard.indicator.guide.section5.table.field":"Field","dashboard.indicator.guide.section5.table.type":"Type","dashboard.indicator.guide.section5.table.required":"Required","dashboard.indicator.guide.section5.table.requiredYes":"Yes","dashboard.indicator.guide.section5.table.requiredNo":"No","dashboard.indicator.guide.section5.table.desc":"Description","dashboard.indicator.guide.section5.table.name":"The name of the indicator line, displayed in the legend","dashboard.indicator.guide.section5.table.data":"Data list, length must match the number of rows in df. Recommended to use series.tolist()","dashboard.indicator.guide.section5.table.color":"Line color (Hex format, e.g. '#ff0000'). If not filled, the system will automatically assign","dashboard.indicator.guide.section5.table.typeDesc":"Chart type, default is 'line'","dashboard.indicator.guide.section5.table.overlay":"Important. True means display on main chart (with K-line), False means display on sub-chart (independent area)","dashboard.indicator.guide.section5.example":"Example: Draw Simple Moving Average (SMA)","dashboard.indicator.guide.section5.exampleCalc":"Calculate SMA","dashboard.indicator.guide.section5.exampleOutput":"Construct Output","dashboard.indicator.guide.section5.exampleOverlay":"Display on main chart","dashboard.indicator.guide.section6.title":"6. Signal Markers (Signals)","dashboard.indicator.guide.section6.desc":"signals are used to mark buy/sell points on specific K-lines through icons or text. Note: This is only for chart display. The backtest system uses df['buy_signal'] and df['sell_signal'].","dashboard.indicator.guide.section6.table.type":"Signal type: 'buy' (buy, marked below K-line) or 'sell' (sell, marked above K-line)","dashboard.indicator.guide.section6.table.data":"Signal data list. Fill price value at signal positions, fill None (or np.nan) at non-signal positions","dashboard.indicator.guide.section6.table.text":'Text displayed on the label (e.g. "B", "S", "Buy", "Sell")',"dashboard.indicator.guide.section6.table.color":"Marker color","dashboard.indicator.guide.section6.hint":"The system automatically handles positioning.","dashboard.indicator.guide.section6.buy":"Markers will be automatically positioned below the Low of the current K-line","dashboard.indicator.guide.section6.sell":"Markers will be automatically positioned above the High of the current K-line","dashboard.indicator.guide.section6.example":"Example: Draw Buy/Sell Signals","dashboard.indicator.guide.section6.exampleInit":"Initialize signal list, fill all with None","dashboard.indicator.guide.section6.exampleLogic":"Simple logic: mark buy when close price is greater than open price","dashboard.indicator.guide.section6.exampleNote":"In actual logic, please use loops or vectorized operations","dashboard.indicator.guide.section6.examplePrice":"Record price","dashboard.indicator.guide.section6.exampleText":"Buy","dashboard.indicator.guide.section7.title":"7. Complete Code Examples","dashboard.indicator.guide.section7.exampleA":"Example A: Dual EMA Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleACode":'# 1. Calculate indicators
df[\'ema_fast\'] = df[\'close\'].ewm(span=5, adjust=False).mean()
df[\'ema_slow\'] = df[\'close\'].ewm(span=13, adjust=False).mean()

# 2. Calculate crossover signals
cross_up = (df[\'ema_fast\'] > df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) <= df[\'ema_slow\'].shift(1))
cross_down = (df[\'ema_fast\'] < df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) >= df[\'ema_slow\'].shift(1))

# 3. 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = cross_up
df[\'close_long\'] = cross_down
df[\'open_short\'] = cross_down
df[\'close_short\'] = cross_up

# 4. Generate signal data for chart display
buy_signals = [df[\'low\'].iloc[i] * 0.995 if cross_up.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if cross_down.iloc[i] else None for i in range(len(df))]

# 5. Build output
output = {
"name": "Dual EMA Strategy",
"plots": [
{"name": "EMA 5", "data": df[\'ema_fast\'].tolist(), "color": "#FF6B6B", "overlay": True},
{"name": "EMA 13", "data": df[\'ema_slow\'].tolist(), "color": "#4ECDC4", "overlay": True}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section7.exampleB":"Example B: Bollinger Bands - Chart Display Only","dashboard.indicator.guide.section7.exampleBCode":'# Calculate Bollinger Bands (chart display only, no backtesting)
length = 20
mult = 2.0
df[\'sma\'] = df[\'close\'].rolling(length).mean()
df[\'std\'] = df[\'close\'].rolling(length).std()
df[\'upper\'] = df[\'sma\'] + mult * df[\'std\']
df[\'lower\'] = df[\'sma\'] - mult * df[\'std\']

output = {
"name": "Bollinger Bands",
"plots": [
{"name": "Upper", "data": df[\'upper\'].tolist(), "color": "#FF5252", "overlay": True},
{"name": "Middle", "data": df[\'sma\'].tolist(), "color": "#2196F3", "overlay": True},
{"name": "Lower", "data": df[\'lower\'].tolist(), "color": "#00E676", "overlay": True}
]
}',"dashboard.indicator.guide.section7.exampleC":"Example C: RSI Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleCCode":'# Calculate RSI
delta = df[\'close\'].diff()
up = delta.clip(lower=0)
down = -1 * delta.clip(upper=0)
ema_up = up.ewm(com=13, adjust=False).mean()
ema_down = down.ewm(com=13, adjust=False).mean()
rs = ema_up / ema_down
df[\'rsi\'] = 100 - (100 / (1 + rs))

# Generate trading signals
buy_condition = df[\'rsi\'] < 30 # Oversold buy
sell_condition = df[\'rsi\'] > 70 # Overbought sell

# 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = buy_condition
df[\'close_long\'] = sell_condition
df[\'open_short\'] = sell_condition
df[\'close_short\'] = buy_condition

# Generate chart signals
buy_signals = [df[\'low\'].iloc[i] * 0.995 if buy_condition.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if sell_condition.iloc[i] else None for i in range(len(df))]

output = {
"name": "RSI Strategy",
"plots": [
{"name": "RSI", "data": df[\'rsi\'].tolist(), "color": "#9C27B0", "overlay": False},
{"name": "Overbought", "data": [70] * len(df), "color": "#FF5252", "style": "dashed", "overlay": False},
{"name": "Oversold", "data": [30] * len(df), "color": "#00E676", "style": "dashed", "overlay": False}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section6.param":"Parameters","dashboard.indicator.guide.section6.calc":"Calculate","dashboard.indicator.guide.section6.output":"Output","dashboard.indicator.guide.section6.generate":"Generate signal data (initialize with None)","dashboard.indicator.guide.section6.subchart":"Display on sub-chart","dashboard.indicator.guide.section8.title":"8. Frequently Asked Questions (FAQ)","dashboard.indicator.guide.section8.q1":"Q: Why can't my indicator be backtested?","dashboard.indicator.guide.section8.a1":"A: The backtest system requires NEW signal columns: df['open_long'], df['close_long'], df['open_short'], df['close_short'] (boolean). Even if you set output.signals for chart display, you must set these columns to enable backtesting.","dashboard.indicator.guide.section8.q2":"Q: Data length mismatch?","dashboard.indicator.guide.section8.a2":"A: The data list in plots and signals must have exactly the same length as the K-line data. If you use df['xxx'].tolist(), there is usually no problem.","dashboard.indicator.guide.section8.q3":"Q: How to handle NaN (empty values)?","dashboard.indicator.guide.section8.a3":"A: Pandas calculations (such as rolling mean) will produce NaN at the beginning. The system will automatically convert NaN to null for chart rendering. You don't need to manually clean it, but if you need specific logic, you can use df.fillna(0) or other methods.","dashboard.indicator.guide.section8.q4":"Q: Index mismatch causing all signals to be NaN?","dashboard.indicator.guide.section8.a4":"A: Please ensure you preserve the original df index (timestamp). Avoid using .values to create new Series. Use columns directly like df['close'] for operations.","dashboard.indicator.guide.section8.q5":"Q: Can I use third-party network libraries?","dashboard.indicator.guide.section8.a5":"A: No. The runtime environment is a browser sandbox and cannot use libraries like requests to request external APIs, nor can it install additional pip packages. Limited to built-in libraries such as pandas, numpy, math, json.","dashboard.indicator.guide.section8.q6":"Q: How to debug code?","dashboard.indicator.guide.section8.a6":"A: If the chart does not display indicators, it is usually because the Python code has an error. Please check for syntax errors or array index out of bounds. It is recommended to debug the algorithm logic in a local Python environment first, then copy it in.","dashboard.indicator.guide.section8.q7":"Q: Backtest shows 0 signals?","dashboard.indicator.guide.section8.a7":"A: Please check the data type of df['open_long']/df['close_long']/df['open_short']/df['close_short']. They should be boolean (True/False), not numeric. Use condition.fillna(False).astype(bool) to ensure correct type.","dashboard.indicator.backtest.commissionHint":"Charged on notional value (incl. leverage) per trade; both entry & exit are deducted from balance.","dashboard.indicator.backtest.historyTitle":"Backtest History","dashboard.indicator.backtest.historyRefresh":"Refresh","dashboard.indicator.backtest.historyView":"View","dashboard.indicator.backtest.historyNoData":"No backtest history","dashboard.indicator.backtest.historyUseCurrent":"Only current symbol/timeframe","dashboard.indicator.backtest.historyFilterSymbol":"Symbol","dashboard.indicator.backtest.historyFilterTimeframe":"Timeframe","dashboard.indicator.backtest.historyApply":"Apply filters","dashboard.indicator.backtest.historyAIAnalyze":"AI Analyze","dashboard.indicator.backtest.historyAIAnalyzeTitle":"AI Suggestions","dashboard.indicator.backtest.historyNoAIResult":"No AI analysis result","dashboard.indicator.backtest.historyRunId":"Run ID","dashboard.indicator.backtest.historyCreatedAt":"Time","dashboard.indicator.backtest.historyRange":"Range","dashboard.indicator.backtest.historyStatus":"Status","dashboard.indicator.backtest.historyStatusSuccess":"Success","dashboard.indicator.backtest.historyStatusFailed":"Failed","dashboard.indicator.backtest.historyActions":"Actions","trading-assistant.exchange.ipWhitelistTip":"Please add the following IPs to the whitelist in your exchange API settings:","signal-robot.title":"Signal Robot Console","signal-robot.createBot":"Create New Bot","signal-robot.search.nameOrSymbol":"Name/Symbol","signal-robot.search.placeholder":"Search bot name or symbol","signal-robot.search.status":"Status","signal-robot.search.statusAll":"All","signal-robot.search.statusRunning":"Running","signal-robot.search.statusPaused":"Paused","signal-robot.search.query":"Query","signal-robot.search.reset":"Reset","signal-robot.table.botName":"Bot Name","signal-robot.table.symbolTimeframe":"Symbol/Timeframe","signal-robot.table.triggerStrategy":"Trigger Strategy","signal-robot.table.notificationChannels":"Notification Channels","signal-robot.table.status":"Status","signal-robot.table.action":"Action","signal-robot.table.triggerConditions":"{count} trigger conditions","signal-robot.table.monitoring":"Monitoring","signal-robot.table.paused":"Paused","signal-robot.table.edit":"Edit","signal-robot.table.pause":"Pause","signal-robot.table.start":"Start","signal-robot.table.delete":"Delete","signal-robot.table.deleteConfirm":"Are you sure you want to delete this bot?","signal-robot.table.deleteSuccess":"Deleted successfully","signal-robot.table.startSuccess":"Bot started","signal-robot.table.pauseSuccess":"Bot paused","signal-robot.channel.telegram":"Telegram","signal-robot.channel.discord":"Discord","signal-robot.channel.email":"Email","signal-robot.channel.webhook":"Webhook","signal-robot.channel.browser":"Browser Push","signal-robot.modal.createTitle":"Create New Signal Robot","signal-robot.modal.editTitle":"Edit Signal Robot","signal-robot.modal.step.basic":"Basic Settings","signal-robot.modal.step.entry":"Entry Strategy","signal-robot.modal.step.position":"Position Management","signal-robot.modal.step.risk":"Risk Control","signal-robot.modal.step.notify":"Notification Config","signal-robot.modal.prev":"Previous","signal-robot.modal.next":"Next","signal-robot.modal.preview":"Preview Backtest","signal-robot.modal.complete":"Complete & Run","signal-robot.modal.saveSuccess":"Saved successfully","signal-robot.modal.previewDeveloping":"Preview feature is under development...","signal-robot.modal.basicInfoRequired":"Please complete basic information","signal-robot.basic.alert":"Set basic information for the bot","signal-robot.basic.title":"Basic Information","signal-robot.basic.botName":"Bot Name","signal-robot.basic.botNamePlaceholder":"e.g.: BTC SuperTrend Strategy","signal-robot.basic.symbol":"Trading Pair","signal-robot.basic.symbolPlaceholder":"Select from watchlist","signal-robot.basic.noWatchlist":"No watchlist items, please add in market page first","signal-robot.basic.timeframe":"K-Line Period","signal-robot.basic.timeframe15m":"15 Minutes","signal-robot.basic.timeframe30m":"30 Minutes","signal-robot.basic.timeframe1h":"1 Hour","signal-robot.basic.timeframe4h":"4 Hours","signal-robot.basic.timeframe1d":"1 Day","signal-robot.basic.autoNameSuggestion":"{symbol} Signal Robot","signal-robot.entry.alert":"Trigger entry signal when all conditions below are met","signal-robot.entry.condition":"Condition {index}","signal-robot.entry.indicator":"Indicator","signal-robot.entry.indicatorSupertrend":"SuperTrend","signal-robot.entry.indicatorEma":"EMA (Exponential Moving Average)","signal-robot.entry.indicatorRsi":"RSI (Relative Strength Index)","signal-robot.entry.indicatorMacd":"MACD","signal-robot.entry.indicatorBollinger":"Bollinger Bands","signal-robot.entry.atrPeriod":"ATR Period","signal-robot.entry.multiplier":"Multiplier","signal-robot.entry.triggerSignal":"Trigger Signal","signal-robot.entry.signalTrendBullish":"Trend Bullish","signal-robot.entry.signalTrendBearish":"Trend Bearish","signal-robot.entry.signalIsUptrend":"Is Uptrend","signal-robot.entry.signalIsDowntrend":"Is Downtrend","signal-robot.entry.period":"Period","signal-robot.entry.compareCondition":"Compare Condition","signal-robot.entry.priceAbove":"Price > EMA (Price Above)","signal-robot.entry.priceBelow":"Price < EMA (Price Below)","signal-robot.entry.crossUp":"Price Crosses Above EMA (Golden Cross)","signal-robot.entry.crossDown":"Price Crosses Below EMA (Death Cross)","signal-robot.entry.compare":"Compare","signal-robot.entry.greaterThan":"Greater Than","signal-robot.entry.lessThan":"Less Than","signal-robot.entry.crossUpShort":"Cross Up","signal-robot.entry.crossDownShort":"Cross Down","signal-robot.entry.threshold":"Threshold","signal-robot.entry.selectIndicator":"Please select an indicator to configure parameters","signal-robot.entry.addCondition":"Add Condition","signal-robot.position.alert":"Configure initial position size, leverage and pyramiding rules","signal-robot.position.basicTitle":"Basic Position Management","signal-robot.position.initialSize":"Initial Size (Capital %)","signal-robot.position.initialSizeHint":"Recommended 5% - 20%","signal-robot.position.leverage":"Leverage","signal-robot.position.leverageHint":"Please ensure your exchange account supports this leverage","signal-robot.position.maxPyramiding":"Max Pyramiding Times","signal-robot.position.maxPyramidingHint":"0 means no pyramiding","signal-robot.position.pyramidingTitle":"Pyramiding Rules","signal-robot.position.pyramidingEnabled":"Enabled","signal-robot.position.pyramidingDisabled":"Disabled","signal-robot.position.pyramidingCondition":"Pyramiding Trigger Condition","signal-robot.position.priceRisePct":"Price Rises (Long) / Falls (Short)","signal-robot.position.profitPct":"Profit Reaches","signal-robot.position.triggerThreshold":"Trigger Threshold (%)","signal-robot.position.triggerThresholdHint":"e.g. 3%: add position once every 3% rise","signal-robot.position.addSize":"Single Add Size (Capital %)","signal-robot.position.pyramidingDisabledHint":"Pyramiding disabled, only initial position will be executed","signal-robot.risk.alert":"Configure take profit, stop loss and exit rules","signal-robot.risk.stopLossTitle":"Stop Loss","signal-robot.risk.stopLossEnabled":"Enabled","signal-robot.risk.stopLossDisabled":"Disabled","signal-robot.risk.stopLossType":"Stop Loss Type","signal-robot.risk.stopLossFixedPct":"Fixed Percentage","signal-robot.risk.stopLossAtrMultiplier":"ATR Multiplier","signal-robot.risk.stopLossValue":"Value","signal-robot.risk.stopLossFixedHint":"e.g. 2%: stop loss when loss reaches 2%","signal-robot.risk.stopLossAtrHint":"e.g. 2.0: stop loss when price touches ATR*2.0","signal-robot.risk.stopLossDisabledHint":"Stop loss disabled (high risk)","signal-robot.risk.trailingStopTitle":"Trailing Stop","signal-robot.risk.activationProfit":"Activation Profit (%)","signal-robot.risk.activationProfitHint":"Start trailing when profit reaches this level","signal-robot.risk.callbackPct":"Callback (%)","signal-robot.risk.callbackPctHint":"Trigger take profit when price falls from peak by this percentage","signal-robot.risk.trailingStopDisabledHint":"Trailing stop disabled","signal-robot.risk.otherExitTitle":"Other Exit Rules","signal-robot.risk.signalExit":"Allow Signal Exit","signal-robot.risk.signalExitHint":"Close position immediately when reverse signal appears (e.g. close long when short signal appears)","signal-robot.notify.alert":"Configure notification methods when signal is triggered","signal-robot.notify.channelTitle":"Notification Channels","signal-robot.notify.discordWebhook":"Discord Webhook","signal-robot.notify.genericWebhook":"Generic Webhook","signal-robot.notify.webhookUrl":"Webhook URL","signal-robot.notify.webhookUrlPlaceholder":"https://example.com/webhook","signal-robot.notify.discordUrl":"Discord URL","signal-robot.notify.discordUrlPlaceholder":"https://discord.com/api/webhooks/...","signal-robot.operator.greaterThan":"Greater Than","signal-robot.operator.lessThan":"Less Than","signal-robot.operator.equal":"Equal","signal-robot.operator.goldenCross":"Golden Cross","signal-robot.operator.deathCross":"Death Cross","signal-robot.operator.increaseBy":"Increase By","signal-robot.operator.decreaseBy":"Decrease By","signal-robot.indicator.price":"Price","signal-robot.indicator.rsi":"RSI","signal-robot.indicator.kdjK":"KDJ(K)","signal-robot.indicator.kdjJ":"KDJ(J)","signal-robot.indicator.macd":"MACD","signal-robot.indicator.macdHist":"MACD Histogram","signal-robot.indicator.bollingerUp":"Bollinger Upper","signal-robot.indicator.bollingerLow":"Bollinger Lower","signal-robot.indicator.volume":"Volume","signal-robot.indicator.changePct1h":"1H Change %","signal-robot.indicator.changePct24h":"24H Change %","signal-robot.indicator.signalLine":"Signal Line","settings.group.agent_memory":"หน่วยความจำ/การสะท้อน","settings.group.reflection_worker":"ตัวทำงานตรวจสอบการสะท้อนอัตโนมัติ","settings.field.ENABLE_AGENT_MEMORY":"เปิดใช้หน่วยความจำเอเจนต์","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"เปิดใช้การค้นหาเวกเตอร์ (ในเครื่อง)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"มิติ Embedding","settings.field.AGENT_MEMORY_TOP_K":"จำนวนดึงข้อมูล Top-K","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"ขนาดหน้าต่างผู้สมัคร","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"ครึ่งชีวิตการลดทอนตามเวลา (วัน)","settings.field.AGENT_MEMORY_W_SIM":"ค่าน้ำหนักความคล้าย","settings.field.AGENT_MEMORY_W_RECENCY":"ค่าน้ำหนักเวลา","settings.field.AGENT_MEMORY_W_RETURNS":"ค่าน้ำหนักผลตอบแทน","settings.field.ENABLE_REFLECTION_WORKER":"เปิดใช้การตรวจสอบอัตโนมัติ","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"ช่วงเวลาตรวจสอบ (วินาที)","profile.notifications.title":"การตั้งค่าการแจ้งเตือน","profile.notifications.hint":"กำหนดค่าวิธีการแจ้งเตือนเริ่มต้น จะถูกใช้โดยอัตโนมัติเมื่อสร้างการติดตามสินทรัพย์และการแจ้งเตือน","profile.notifications.defaultChannels":"ช่องทางแจ้งเตือนเริ่มต้น","profile.notifications.browser":"การแจ้งเตือนในแอป","profile.notifications.email":"อีเมล","profile.notifications.phone":"SMS","profile.notifications.telegramBotToken":"Telegram Bot Token","profile.notifications.telegramBotTokenPlaceholder":"กรอก Telegram Bot Token ของคุณ","profile.notifications.telegramBotTokenHint":"สร้างบอทผ่าน @BotFather เพื่อรับ Token","profile.notifications.telegramChatId":"Telegram Chat ID","profile.notifications.telegramPlaceholder":"กรอก Telegram Chat ID ของคุณ (เช่น 123456789)","profile.notifications.telegramHint":"ส่ง /start ไปที่ @userinfobot เพื่อรับ Chat ID","profile.notifications.notifyEmail":"อีเมลแจ้งเตือน","profile.notifications.emailPlaceholder":"ที่อยู่อีเมลสำหรับรับการแจ้งเตือน","profile.notifications.emailHint":"ใช้อีเมลบัญชีเป็นค่าเริ่มต้น สามารถตั้งค่าอีเมลอื่นได้","profile.notifications.phonePlaceholder":"กรอกหมายเลขโทรศัพท์ (เช่น +66812345678)","profile.notifications.phoneHint":"ผู้ดูแลระบบต้องกำหนดค่าบริการ Twilio","profile.notifications.discordWebhook":"Discord Webhook","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"สร้าง Webhook ในการตั้งค่าเซิร์ฟเวอร์ Discord","profile.notifications.webhookUrl":"Webhook URL","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"URL Webhook แบบกำหนดเอง ส่งการแจ้งเตือนผ่าน POST JSON","profile.notifications.webhookToken":"Webhook Token (ไม่บังคับ)","profile.notifications.webhookTokenPlaceholder":"Bearer Token สำหรับยืนยันตัวตนคำขอ","profile.notifications.webhookTokenHint":"ส่งเป็น Authorization: Bearer Token ไปยัง Webhook","profile.notifications.testBtn":"ส่งการแจ้งเตือนทดสอบ","profile.notifications.saveSuccess":"บันทึกการตั้งค่าการแจ้งเตือนสำเร็จ","profile.notifications.selectChannel":"กรุณาเลือกอย่างน้อยหนึ่งช่องทางแจ้งเตือน","profile.notifications.fillTelegramToken":"กรุณากรอก Telegram Bot Token","profile.notifications.fillTelegram":"กรุณากรอก Telegram Chat ID","profile.notifications.fillEmail":"กรุณากรอกอีเมลแจ้งเตือน","profile.notifications.testSent":"ส่งการแจ้งเตือนทดสอบแล้ว กรุณาตรวจสอบช่องทางแจ้งเตือนของคุณ"},f=(0,e.A)((0,e.A)({},p),y)}}]); \ No newline at end of file diff --git a/frontend/dist/js/lang-th-TH-legacy.8588b381.js b/frontend/dist/js/lang-th-TH.596d2e87.js similarity index 99% rename from frontend/dist/js/lang-th-TH-legacy.8588b381.js rename to frontend/dist/js/lang-th-TH.596d2e87.js index 50c02cd..a185739 100644 --- a/frontend/dist/js/lang-th-TH-legacy.8588b381.js +++ b/frontend/dist/js/lang-th-TH.596d2e87.js @@ -1 +1 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[301],{21462:function(a,t,i){i.d(t,{default:function(){return f}});var e=i(57888),s={items_per_page:"/ หน้า",jump_to:"ไปยัง",jump_to_confirm:"ยืนยัน",page:"",prev_page:"หน้าก่อนหน้า",next_page:"หน้าถัดไป",prev_5:"ย้อนกลับ 5 หน้า",next_5:"ถัดไป 5 หน้า",prev_3:"ย้อนกลับ 3 หน้า",next_3:"ถัดไป 3 หน้า"},o=i(85505),r={today:"วันนี้",now:"ตอนนี้",backToToday:"กลับไปยังวันนี้",ok:"ตกลง",clear:"ลบล้าง",month:"เดือน",year:"ปี",timeSelect:"เลือกเวลา",dateSelect:"เลือกวัน",monthSelect:"เลือกเดือน",yearSelect:"เลือกปี",decadeSelect:"เลือกทศวรรษ",yearFormat:"YYYY",dateFormat:"D/M/YYYY",dayFormat:"D",dateTimeFormat:"D/M/YYYY HH:mm:ss",monthBeforeYear:!0,previousMonth:"เดือนก่อนหน้า (PageUp)",nextMonth:"เดือนถัดไป (PageDown)",previousYear:"ปีก่อนหน้า (Control + left)",nextYear:"ปีถัดไป (Control + right)",previousDecade:"ทศวรรษก่อนหน้า",nextDecade:"ทศวรรษถัดไป",previousCentury:"ศตวรรษก่อนหน้า",nextCentury:"ศตวรรษถัดไป"},n={placeholder:"เลือกเวลา"},d=n,l={lang:(0,o.A)({placeholder:"เลือกวันที่",rangePlaceholder:["วันเริ่มต้น","วันสิ้นสุด"]},r),timePickerLocale:(0,o.A)({},d)},c=l,g=c,b={locale:"th",Pagination:s,DatePicker:c,TimePicker:d,Calendar:g,global:{placeholder:"กรุณาเลือก"},Table:{filterTitle:"ตัวกรอง",filterConfirm:"ยืนยัน",filterReset:"รีเซ็ต",selectAll:"เลือกทั้งหมดในหน้านี้",selectInvert:"เลือกสถานะตรงกันข้าม",sortTitle:"เรียง",expand:"แสดงแถวข้อมูล",collapse:"ย่อแถวข้อมูล"},Modal:{okText:"ตกลง",cancelText:"ยกเลิก",justOkText:"ตกลง"},Popconfirm:{okText:"ตกลง",cancelText:"ยกเลิก"},Transfer:{titles:["",""],searchPlaceholder:"ค้นหา",itemUnit:"ชิ้น",itemsUnit:"ชิ้น"},Upload:{uploading:"กำลังอัปโหลด...",removeFile:"ลบไฟล์",uploadError:"เกิดข้อผิดพลาดในการอัปโหลด",previewFile:"ดูตัวอย่างไฟล์",downloadFile:"ดาวน์โหลดไฟล์"},Empty:{description:"ไม่มีข้อมูล"},Icon:{icon:"ไอคอน"},Text:{edit:"แก้ไข",copy:"คัดลอก",copied:"คัดลอกแล้ว",expand:"ขยาย"},PageHeader:{back:"ย้อนกลับ"}},m=b,h=i(55802),u=i.n(h),p={antLocale:m,momentName:"th",momentLocale:u()},y={submit:"ส่ง",save:"บันทึก","submit.ok":"ส่งสำเร็จ","save.ok":"บันทึกเรียบร้อยแล้ว","menu.welcome":"ยินดีต้อนรับ","menu.home":"หน้าแรก","menu.dashboard":"แดชบอร์ด","menu.dashboard.indicator":"การวิเคราะห์ตัวบ่งชี้","menu.dashboard.community":"ชุมชนตัวบ่งชี้","menu.dashboard.analysis":"การวิเคราะห์เอไอ","menu.dashboard.tradingAssistant":"ผู้ช่วยการซื้อขาย","menu.dashboard.aiTradingAssistant":"ผู้ช่วยการซื้อขาย AI","menu.dashboard.signalRobot":"หุ่นยนต์สัญญาณ","menu.dashboard.monitor":"หน้าติดตาม","menu.dashboard.workplace":"โต๊ะทำงาน","menu.form":"หน้าแบบฟอร์ม","menu.form.basic-form":"แบบฟอร์มพื้นฐาน","menu.form.step-form":"แบบฟอร์มทีละขั้นตอน","menu.form.step-form.info":"แบบฟอร์มทีละขั้นตอน (กรอกข้อมูลการโอน)","menu.form.step-form.confirm":"แบบฟอร์มทีละขั้นตอน (ยืนยันข้อมูลการโอน)","menu.form.step-form.result":"แบบฟอร์มทีละขั้นตอน (สมบูรณ์)","menu.form.advanced-form":"แบบฟอร์มขั้นสูง","menu.list":"หน้ารายการ","menu.list.table-list":"แบบฟอร์มสอบถาม","menu.list.basic-list":"รายการมาตรฐาน","menu.list.card-list":"รายการการ์ด","menu.list.search-list":"รายการค้นหา","menu.list.search-list.articles":"รายการค้นหา (บทความ)","menu.list.search-list.projects":"รายการค้นหา (โครงการ)","menu.list.search-list.applications":"รายการค้นหา (แอป)","menu.profile":"หน้ารายละเอียด","menu.profile.basic":"หน้ารายละเอียดเบื้องต้น","menu.profile.advanced":"หน้ารายละเอียดขั้นสูง","menu.result":"หน้าผลลัพธ์","menu.result.success":"หน้าความสำเร็จ","menu.result.fail":"หน้าความล้มเหลว","menu.exception":"หน้าข้อยกเว้น","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"ข้อผิดพลาดของทริกเกอร์","menu.account":"หน้าส่วนตัว","menu.account.center":"ศูนย์ส่วนบุคคล","menu.account.settings":"การตั้งค่าส่วนบุคคล","menu.account.trigger":"ข้อผิดพลาดของทริกเกอร์","menu.account.logout":"ออกจากระบบ","menu.wallet":"กระเป๋าเงินของฉัน","menu.docs":"ศูนย์เอกสาร","menu.docs.detail":"รายละเอียดเอกสาร","menu.header.refreshPage":"รีเฟรชหน้า","menu.invite.friends":"ชวนเพื่อน","app.setting.pagestyle":"การตั้งค่าสไตล์โดยรวม","app.setting.pagestyle.light":"เมนูสไตล์สดใส","app.setting.pagestyle.dark":"สไตล์เมนูสีเข้ม","app.setting.pagestyle.realdark":"โหมดมืด","app.setting.themecolor":"สีของธีม","app.setting.navigationmode":"โหมดการนำทาง","app.setting.sidemenu.nav":"การนำทางแถบด้านข้าง","app.setting.topmenu.nav":"การนำทางแถบด้านบน","app.setting.content-width":"ความกว้างของพื้นที่เนื้อหา","app.setting.content-width.tooltip":"การตั้งค่านี้จะมีผลเฉพาะเมื่อ [การนำทางแถบด้านบน]","app.setting.content-width.fixed":"ที่ตายตัว","app.setting.content-width.fluid":"สตรีมมิ่ง","app.setting.fixedheader":"ส่วนหัวคงที่","app.setting.fixedheader.tooltip":"กำหนดค่าได้เมื่อแก้ไขส่วนหัว","app.setting.autoHideHeader":"ซ่อนส่วนหัวเมื่อเลื่อน","app.setting.fixedsidebar":"เมนูด้านข้างคงที่","app.setting.sidemenu":"เค้าโครงเมนูด้านข้าง","app.setting.topmenu":"เค้าโครงเมนูด้านบน","app.setting.othersettings":"การตั้งค่าอื่นๆ","app.setting.weakmode":"โหมดความอ่อนแอของสี","app.setting.multitab":"โหมดหลายแท็บ","app.setting.copy":"การตั้งค่าการทำสำเนา","app.setting.loading":"กำลังโหลดธีม","app.setting.copyinfo":"คัดลอกการตั้งค่าสำเร็จ src/config/defaultSettings.js","app.setting.copy.success":"คัดลอกเสร็จแล้ว","app.setting.copy.fail":"การคัดลอกล้มเหลว","app.setting.theme.switching":"เปลี่ยนธีม!","app.setting.production.hint":"แถบการกำหนดค่าใช้สำหรับการดูตัวอย่างในสภาพแวดล้อมการพัฒนาเท่านั้น และจะไม่แสดงในสภาพแวดล้อมการใช้งานจริง โปรดคัดลอกและแก้ไขไฟล์การกำหนดค่าด้วยตนเอง","app.setting.themecolor.daybreak":"รุ่งอรุณสีฟ้า (ค่าเริ่มต้น)","app.setting.themecolor.dust":"พลบค่ำ","app.setting.themecolor.volcano":"ภูเขาไฟ","app.setting.themecolor.sunset":"พระอาทิตย์ตก","app.setting.themecolor.cyan":"หมิงชิง","app.setting.themecolor.green":"ออโรร่าสีเขียว","app.setting.themecolor.geekblue":"เกินบรรยายสีฟ้า","app.setting.themecolor.purple":"เจียงซี","app.setting.tooltip":"การตั้งค่าหน้า","user.login.userName":"ชื่อผู้ใช้","user.login.password":"รหัสผ่าน","user.login.username.placeholder":"บัญชี: ผู้ดูแลระบบ","user.login.password.placeholder":"รหัสผ่าน: admin หรือ ant.design","user.login.message-invalid-credentials":"การเข้าสู่ระบบล้มเหลว โปรดตรวจสอบอีเมลและรหัสยืนยันของคุณ","user.login.message-invalid-verification-code":"รหัสยืนยันผิดพลาด","user.login.tab-login-credentials":"เข้าสู่ระบบรหัสผ่านบัญชี","user.login.tab-login-email":"เข้าสู่ระบบอีเมล","user.login.tab-login-mobile":"เข้าสู่ระบบหมายเลขโทรศัพท์มือถือ","user.login.captcha.placeholder":"กรุณากรอกรหัสยืนยันกราฟิก","user.login.mobile.placeholder":"หมายเลขโทรศัพท์","user.login.mobile.verification-code.placeholder":"รหัสยืนยัน","user.login.email.placeholder":"กรุณากรอกที่อยู่อีเมลของคุณ","user.login.email.verification-code.placeholder":"กรุณากรอกรหัสยืนยัน","user.login.email.sending":"กำลังส่งรหัสยืนยัน...","user.login.email.send-success-title":"คำใบ้","user.login.email.send-success":"ส่งรหัสยืนยันสำเร็จแล้ว โปรดตรวจสอบอีเมลของคุณ","user.login.sms.send-success":"ส่งรหัสยืนยันสำเร็จแล้ว โปรดตรวจสอบข้อความ","user.login.remember-me":"เข้าสู่ระบบอัตโนมัติ","user.login.forgot-password":"ลืมรหัสผ่าน","user.login.sign-in-with":"วิธีการเข้าสู่ระบบอื่น ๆ","user.login.signup":"ลงทะเบียนบัญชี","user.login.login":"เข้าสู่ระบบ","user.register.register":"ลงทะเบียน","user.register.email.placeholder":"จดหมาย","user.register.password.placeholder":"กรุณากรอกอย่างน้อย 6 ตัวอักษร กรุณาอย่าใช้รหัสผ่านที่คาดเดาได้ง่าย","user.register.password.popover-message":"กรุณากรอกอย่างน้อย 6 ตัวอักษร กรุณาอย่าใช้รหัสผ่านที่คาดเดาได้ง่าย","user.register.confirm-password.placeholder":"ยืนยันรหัสผ่าน","user.register.get-verification-code":"รับรหัสยืนยัน","user.register.sign-in":"เข้าสู่ระบบโดยใช้บัญชีที่มีอยู่","user.register-result.msg":"บัญชีของคุณ: {email} การลงทะเบียนสำเร็จ","user.register-result.activation-email":"อีเมลเปิดใช้งานได้ถูกส่งไปยังกล่องจดหมายของคุณแล้ว และมีอายุ 24 ชั่วโมง โปรดเข้าสู่ระบบอีเมลของคุณทันทีและคลิกลิงก์ในอีเมลเพื่อเปิดใช้งานบัญชีของคุณ","user.register-result.back-home":"กลับไปที่หน้าแรก","user.register-result.view-mailbox":"ตรวจสอบกล่องจดหมายของคุณ","user.email.required":"กรุณากรอกที่อยู่อีเมลของคุณ!","user.email.wrong-format":"รูปแบบที่อยู่อีเมลไม่ถูกต้อง!","user.userName.required":"กรุณากรอกชื่อบัญชีหรือที่อยู่อีเมลของคุณ","user.password.required":"กรุณากรอกรหัสผ่านของคุณ!","user.password.twice.msg":"รหัสผ่านที่ป้อนสองครั้งไม่ตรงกัน!","user.password.strength.msg":"รหัสผ่านไม่แข็งแกร่งพอ","user.password.strength.strong":"ความแข็งแกร่ง: แข็งแกร่ง","user.password.strength.medium":"ความแข็งแกร่ง: ปานกลาง","user.password.strength.low":"ความแรง: ต่ำ","user.password.strength.short":"ความแรง: สั้นเกินไป","user.confirm-password.required":"กรุณายืนยันรหัสผ่านของคุณ!","user.phone-number.required":"กรุณากรอกหมายเลขโทรศัพท์มือถือที่ถูกต้อง","user.phone-number.wrong-format":"รูปแบบหมายเลขโทรศัพท์มือถือผิด!","user.verification-code.required":"กรุณากรอกรหัสยืนยัน!","user.captcha.required":"กรุณากรอกรหัสยืนยันกราฟิก!","user.login.infos":"QuantDinger เป็นเครื่องมือเสริมการวิเคราะห์หุ้นแบบหลายตัวแทนด้วย AI และไม่มีคุณสมบัติในการให้คำปรึกษาด้านการลงทุนในหลักทรัพย์ผลการวิเคราะห์ คะแนน และความคิดเห็นอ้างอิงทั้งหมดในแพลตฟอร์มถูกสร้างขึ้นโดยอัตโนมัติโดย AI ตามข้อมูลในอดีต และใช้เพื่อการเรียนรู้ การวิจัย และการแลกเปลี่ยนทางเทคนิคเท่านั้น และไม่ถือเป็นคำแนะนำในการลงทุนหรือพื้นฐานการตัดสินใจใดๆการลงทุนในหุ้นเกี่ยวข้องกับความเสี่ยงต่างๆ เช่น ความเสี่ยงด้านตลาด ความเสี่ยงด้านสภาพคล่อง ความเสี่ยงด้านนโยบาย ฯลฯ ซึ่งอาจนำไปสู่การสูญเสียเงินต้นได้ผู้ใช้ควรตัดสินใจอย่างอิสระโดยพิจารณาจากการยอมรับความเสี่ยงของตนเอง และพฤติกรรมการลงทุนและผลที่ตามมาที่เกิดจากการใช้เครื่องมือนี้จะต้องตกเป็นภาระของผู้ใช้ตลาดมีความเสี่ยงและการลงทุนต้องระมัดระวัง","user.login.tab-login-web3":"เข้าสู่ระบบ Web3","user.login.web3.tip":"เข้าสู่ระบบโดยใช้กระเป๋าเงิน","user.login.web3.connect":"เชื่อมต่อกระเป๋าเงินและเข้าสู่ระบบ","user.login.web3.no-wallet":"ตรวจไม่พบกระเป๋าเงิน","user.login.web3.no-address":"ไม่ได้รับที่อยู่กระเป๋าเงิน","user.login.web3.nonce-failed":"ไม่สามารถรับหมายเลขสุ่มได้","user.login.web3.verify-failed":"การตรวจสอบลายเซ็นล้มเหลว","user.login.web3.success":"เข้าสู่ระบบสำเร็จ","user.login.web3.failed":"การเข้าสู่ระบบ Wallet ล้มเหลว","nav.no_wallet":"ตรวจไม่พบกระเป๋าเงิน","nav.copy":"สำเนา","nav.copy_success":"คัดลอกเรียบร้อยแล้ว","user.login.oauth.google":"ลงชื่อเข้าใช้งานด้วย Google","user.login.oauth.github":"ลงชื่อเข้าใช้ด้วย GitHub","user.login.oauth.loading":"กำลังเปลี่ยนเส้นทางไปยังหน้าการอนุญาต...","user.login.oauth.failed":"การเข้าสู่ระบบ OAuth ล้มเหลว","user.login.oauth.get-url-failed":"ไม่สามารถรับลิงก์การอนุญาตได้","user.login.subtitle":"ขับเคลื่อนข้อมูลเชิงลึกเชิงปริมาณสู่ตลาดโลก","user.login.legal.title":"ข้อสงวนสิทธิ์ทางกฎหมาย","user.login.legal.view":"ดูข้อจำกัดความรับผิดชอบทางกฎหมาย","user.login.legal.collapse":"ยุบข้อจำกัดความรับผิดชอบทางกฎหมาย","user.login.legal.agree":"ฉันได้อ่านและยอมรับข้อจำกัดความรับผิดชอบทางกฎหมาย","user.login.legal.required":"โปรดอ่านและตรวจสอบข้อจำกัดความรับผิดชอบทางกฎหมายก่อน","user.login.legal.content":"QuantDinger เป็นเครื่องมือเสริมการวิเคราะห์หุ้นแบบหลายตัวแทนด้วย AI และไม่มีคุณสมบัติในการให้คำปรึกษาด้านการลงทุนในหลักทรัพย์ผลการวิเคราะห์ การให้คะแนน และความคิดเห็นอ้างอิงทั้งหมดในแพลตฟอร์มถูกสร้างขึ้นโดยอัตโนมัติโดย AI ตามข้อมูลในอดีต และใช้สำหรับการเรียนรู้ การวิจัย และการแลกเปลี่ยนทางเทคนิคเท่านั้น และไม่ถือเป็นคำแนะนำในการลงทุนหรือพื้นฐานการตัดสินใจใดๆการลงทุนในหุ้นเกี่ยวข้องกับความเสี่ยงต่างๆ เช่น ความเสี่ยงด้านตลาด ความเสี่ยงด้านสภาพคล่อง ความเสี่ยงด้านนโยบาย ฯลฯ ซึ่งอาจนำไปสู่การสูญเสียเงินต้นได้ผู้ใช้ควรตัดสินใจอย่างอิสระโดยพิจารณาจากการยอมรับความเสี่ยงของตนเอง และพฤติกรรมการลงทุนและผลที่ตามมาที่เกิดจากการใช้เครื่องมือนี้จะต้องตกเป็นภาระของผู้ใช้ตลาดมีความเสี่ยงและการลงทุนต้องระมัดระวัง","user.login.privacy.title":"นโยบายความเป็นส่วนตัวของผู้ใช้","user.login.privacy.view":"ดูนโยบายความเป็นส่วนตัวของผู้ใช้","user.login.privacy.collapse":"ปิดข้อกำหนดความเป็นส่วนตัวของผู้ใช้","user.login.privacy.content":"เราให้ความสำคัญกับความเป็นส่วนตัวและการปกป้องข้อมูลของคุณ 1) ขอบเขตของการรวบรวม: เฉพาะข้อมูลที่จำเป็นในการใช้งานฟังก์ชัน (เช่น อีเมล หมายเลขโทรศัพท์มือถือ รหัสพื้นที่ ที่อยู่กระเป๋าสตางค์ของ Web3) และบันทึกและข้อมูลอุปกรณ์ที่จำเป็นเท่านั้นที่จะถูกรวบรวม 2) วัตถุประสงค์การใช้งาน: สำหรับการเข้าสู่ระบบบัญชีและการตรวจสอบความปลอดภัยการให้บริการฟังก์ชั่น การแก้ไขปัญหาและข้อกำหนดการปฏิบัติตาม 3) การจัดเก็บและความปลอดภัย: ข้อมูลได้รับการเข้ารหัสและจัดเก็บและมีการใช้สิทธิ์ที่จำเป็นและมาตรการควบคุมการเข้าถึงเพื่อป้องกันการเข้าถึง การเปิดเผย หรือการสูญหายโดยไม่ได้รับอนุญาต 4) การแบ่งปันกับบุคคลที่สาม: เว้นแต่กฎหมายและข้อบังคับกำหนดไว้หรือจำเป็นในการให้บริการ ข้อมูลส่วนบุคคลของคุณจะไม่ถูกแบ่งปันกับบุคคลที่สามหากเกี่ยวข้องกับบริการของบุคคลที่สาม (เช่น กระเป๋าเงิน ผู้ให้บริการ SMS) จะถูกประมวลผลในขอบเขตขั้นต่ำที่จำเป็นเพื่อใช้งานฟังก์ชันนี้เท่านั้น 5) คุกกี้/ที่เก็บข้อมูลในเครื่อง: ใช้สำหรับสถานะการเข้าสู่ระบบและการบำรุงรักษาเซสชันที่จำเป็น (เช่น โทเค็น PHPSESSID) คุณสามารถล้างหรือจำกัดได้ในเบราว์เซอร์ 6) สิทธิ์ส่วนบุคคล: คุณสามารถใช้สิทธิ์ของคุณในการสอบถาม แก้ไข ลบ เพิกถอนความยินยอม ฯลฯ ตามกฎหมายและข้อบังคับ 7) การเปลี่ยนแปลงและประกาศ: เมื่อมีการอัปเดตข้อกำหนดเหล่านี้จะแสดงอย่างเด่นชัดบนหน้าเว็บการใช้บริการนี้ต่อไปจะถือว่าคุณได้อ่านและยอมรับเนื้อหาที่อัปเดตแล้วหากคุณไม่ยอมรับข้อกำหนดเหล่านี้หรือการปรับปรุงใด ๆ โปรดหยุดใช้บริการและติดต่อเรา","account.basicInfo":"ข้อมูลพื้นฐาน","account.id":"รหัสผู้ใช้","account.username":"ชื่อผู้ใช้","account.nickname":"ชื่อนิค","account.email":"จดหมาย","account.mobile":"หมายเลขโทรศัพท์","account.web3address":"ที่อยู่กระเป๋าเงิน","account.pid":"รหัสผู้อ้างอิง","account.level":"ระดับผู้ใช้","account.money":"สมดุล","account.qdtBalance":"ยอดคงเหลือ QDT","account.score":"บูรณาการ","account.createtime":"เวลาลงทะเบียน","account.inviteLink":"ลิงค์คำเชิญ","account.recharge":"เติมเงิน","account.rechargeTip":"โปรดใช้ WeChat หรือ Alipay เพื่อสแกนโค้ด QR ด้านล่างเพื่อเติมเงิน","account.qrCodePlaceholder":"ตัวยึดรหัส QR (การจำลอง)","account.rechargeAmount":"จำนวนการเติมเงิน","account.enterAmount":"กรุณากรอกจำนวนเงินที่เติม","account.rechargeHint":"จำนวนเงินฝากขั้นต่ำ: 1 QDT","account.confirmRecharge":"ยืนยันการเติมเงิน","account.enterValidAmount":"กรุณากรอกจำนวนเงินที่เติมให้ถูกต้อง","account.rechargeSuccess":"เติมเงินสำเร็จ!ฝากแล้ว {amount} QDT","account.settings.menuMap.basic":"การตั้งค่าพื้นฐาน","account.settings.menuMap.security":"การตั้งค่าความปลอดภัย","account.settings.menuMap.notification":"การแจ้งเตือนข้อความใหม่","account.settings.menuMap.moneyLog":"รายละเอียดกองทุน","account.moneyLog.empty":"ยังไม่มีรายละเอียดกองทุน","account.moneyLog.total":"รวม {total} บันทึก","account.moneyLog.type.purchase":"ตัวบ่งชี้การซื้อ","account.moneyLog.type.recharge":"เติมเงิน","account.moneyLog.type.refund":"คืนเงิน","account.moneyLog.type.reward":"รางวัล","account.moneyLog.type.income":"ตัวชี้วัดรายได้","account.moneyLog.type.commission":"ค่าธรรมเนียมการจัดการแพลตฟอร์ม","wallet.balance":"ยอดคงเหลือ QDT","wallet.recharge":"เติมเงิน","wallet.withdraw":"ถอนเงินสด","wallet.filter":"กรอง","wallet.reset":"รีเซ็ต","wallet.totalRecharge":"การเติมเงินสะสม","wallet.totalWithdraw":"การถอนเงินสะสม","wallet.totalIncome":"รายได้สะสม","wallet.records":"บันทึกการทำธุรกรรมและรายละเอียดกองทุน","wallet.tradingRecords":"ประวัติการทำธุรกรรม","wallet.moneyLog":"รายละเอียดกองทุน","wallet.rechargeTip":"โปรดใช้ WeChat หรือ Alipay เพื่อสแกนโค้ด QR ด้านล่างเพื่อเติมเงิน","wallet.qrCodePlaceholder":"ตัวยึดรหัส QR (การจำลอง)","wallet.rechargeAmount":"จำนวนการเติมเงิน","wallet.enterAmount":"กรุณากรอกจำนวนเงินที่เติม","wallet.rechargeHint":"จำนวนเงินฝากขั้นต่ำ: 1 QDT","wallet.confirmRecharge":"ยืนยันการเติมเงิน","wallet.enterValidAmount":"กรุณากรอกจำนวนเงินที่เติมให้ถูกต้อง","wallet.rechargeSuccess":"เติมเงินสำเร็จ!ฝากแล้ว {amount} QDT","wallet.rechargeFailed":"การเติมเงินล้มเหลว","wallet.withdrawTip":"กรุณากรอกจำนวนเงินที่ถอนและที่อยู่การถอน","wallet.withdrawAmount":"ถอนจำนวนเงิน","wallet.enterWithdrawAmount":"กรุณากรอกจำนวนเงินที่ถอน","wallet.withdrawHint":"จำนวนถอนขั้นต่ำ: 1 QDT","wallet.withdrawAddress":"ที่อยู่การถอนเงิน (ไม่บังคับ)","wallet.enterWithdrawAddress":"กรุณากรอกที่อยู่การถอนเงิน","wallet.confirmWithdraw":"ยืนยันการถอนเงิน","wallet.enterValidWithdrawAmount":"กรุณากรอกจำนวนเงินที่ถอนให้ถูกต้อง","wallet.insufficientBalance":"ยอดคงเหลือไม่เพียงพอ","wallet.withdrawSuccess":"การถอนเงินสำเร็จ!ถอนออก {amount} QDT","wallet.withdrawFailed":"การถอนเงินล้มเหลว","wallet.noTradingRecords":"ยังไม่มีบันทึกการทำธุรกรรม","wallet.noMoneyLog":"ยังไม่มีรายละเอียดกองทุน","wallet.loadTradingRecordsFailed":"โหลดบันทึกธุรกรรมไม่สำเร็จ","wallet.loadMoneyLogFailed":"โหลดรายละเอียดกองทุนไม่สำเร็จ","wallet.moneyLogTotal":"รวม {total} บันทึก","wallet.moneyLogTypeTitle":"พิมพ์","wallet.moneyLogType.all":"ทุกประเภท","wallet.table.time":"เวลา","wallet.table.type":"พิมพ์","wallet.table.price":"ราคา","wallet.table.amount":"ปริมาณ","wallet.table.money":"จำนวน","wallet.table.balance":"สมดุล","wallet.table.memo":"หมายเหตุ","wallet.table.value":"ค่า","wallet.table.profit":"กำไรและขาดทุน","wallet.table.commission":"ค่าธรรมเนียมการจัดการ","wallet.table.total":"รวม {total} บันทึก","wallet.tradeType.buy":"ซื้อ","wallet.tradeType.sell":"ขาย","wallet.tradeType.liquidation":"บังคับให้เลิกกิจการ","wallet.tradeType.openLong":"เปิดยาวๆ","wallet.tradeType.addLong":"กาดอต","wallet.tradeType.closeLong":"ปินตัว","wallet.tradeType.closeLongStop":"หยุดขาดทุนและยาว","wallet.tradeType.closeLongProfit":"ขายทำกำไรและระดับมากขึ้น","wallet.tradeType.openShort":"เปิดสั้น","wallet.tradeType.addShort":"เพิ่มสั้น","wallet.tradeType.closeShort":"ว่างเปล่า","wallet.tradeType.closeShortStop":"หยุดการสูญเสีย","wallet.tradeType.closeShortProfit":"ขายทำกำไรและปิดการขาย","wallet.moneyLogType.purchase":"ตัวบ่งชี้การซื้อ","wallet.moneyLogType.recharge":"เติมเงิน","wallet.moneyLogType.withdraw":"ถอนเงินสด","wallet.moneyLogType.refund":"คืนเงิน","wallet.moneyLogType.reward":"รางวัล","wallet.moneyLogType.income":"รายได้","wallet.moneyLogType.commission":"ค่าธรรมเนียมการจัดการ","wallet.web3Address.required":"กรุณากรอกที่อยู่กระเป๋าเงิน Web3 ก่อน","wallet.web3Address.requiredDescription":"ก่อนที่จะเติมเงิน คุณต้องผูกที่อยู่กระเป๋าเงิน Web3 ของคุณเพื่อรับการเติมเงิน","wallet.web3Address.placeholder":"โปรดป้อนที่อยู่กระเป๋าเงิน Web3 ของคุณ (เริ่มต้นด้วย 0x)","wallet.web3Address.save":"บันทึกที่อยู่กระเป๋าเงิน","wallet.web3Address.saveSuccess":"บันทึกที่อยู่ Wallet เรียบร้อยแล้ว","wallet.web3Address.saveFailed":"ไม่สามารถบันทึกที่อยู่กระเป๋าสตางค์ได้","wallet.web3Address.invalidFormat":"โปรดป้อนที่อยู่กระเป๋าเงิน Web3 ที่ถูกต้อง (รูปแบบ Ethereum: 42 ตัวอักษรเริ่มต้นด้วย 0x หรือรูปแบบ TRC20: 34 ตัวอักษรเริ่มต้นด้วย T)","wallet.selectCoin":"เลือกสกุลเงิน","wallet.selectChain":"ห่วงโซ่การคัดเลือก","wallet.chain.eth":"ผลประโยชน์ทับซ้อน (ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"บีเอสซี","wallet.targetQdtAmount":"จำนวน QDT ที่คุณต้องการแลก (ไม่บังคับ)","wallet.targetQdtAmount.placeholder":"กรุณากรอกจำนวน QDT ที่คุณต้องการแลกเปลี่ยน ราคา QDT ปัจจุบันคือ: {price} USDT","wallet.targetQdtAmount.requiredUsdt":"ต้องเติมเงิน: {amount} USDT","wallet.rechargeAddress":"ที่อยู่เติมเงิน","wallet.copyAddress":"สำเนา","wallet.copySuccess":"คัดลอกสำเร็จ!","wallet.copyFailed":"การคัดลอกล้มเหลว โปรดคัดลอกด้วยตนเอง","wallet.rechargeAddressHint":"โปรดตรวจสอบให้แน่ใจว่าได้ใช้เครือข่าย {chain} เพื่อฝาก {coin} ไปยังที่อยู่นี้","wallet.qdtPrice.loading":"กำลังโหลด...","wallet.rechargeTip.new":"โปรดเลือกสกุลเงินและห่วงโซ่ จากนั้นสแกนโค้ด QR ด้านล่างเพื่อเติมเงิน","wallet.exchangeRate":"1 คิวดีที กลับไปยัง {rate} ดอลลาร์สหรัฐ","wallet.withdrawableAmount":"จำนวนเงินสดที่มีอยู่","wallet.totalBalance":"ยอดรวม","wallet.insufficientWithdrawable":"จำนวนเงินสดที่สามารถถอนออกได้ไม่เพียงพอ เงินสดที่มีอยู่ในปัจจุบันคือ: {amount} QDT","wallet.withdrawAddressRequired":"กรุณากรอกที่อยู่การถอนเงิน","wallet.withdrawAddressHint":"โปรดตรวจสอบให้แน่ใจว่าที่อยู่ถูกต้อง หลังจากถอนแล้วไม่สามารถเพิกถอนได้","wallet.withdrawSubmitSuccess":"ส่งใบสมัครถอนเรียบร้อยแล้ว โปรดรอการตรวจสอบ","menu.footer.contactUs":"ติดต่อเรา","menu.footer.getSupport":"รับการสนับสนุน","menu.footer.socialAccounts":"บัญชีโซเชียล","menu.footer.userAgreement":"ข้อตกลงผู้ใช้","menu.footer.privacyPolicy":"นโยบายความเป็นส่วนตัว","menu.footer.support":"สนับสนุน","menu.footer.featureRequest":"คำขอคุณสมบัติ","menu.footer.email":"อีเมล","menu.footer.liveChat":"แชทสดทุกวันตลอด 24 ชั่วโมง","dashboard.analysis.title":"การวิเคราะห์หลายมิติ","dashboard.analysis.subtitle":"แพลตฟอร์มการวิเคราะห์ทางการเงินที่ครอบคลุมที่ขับเคลื่อนด้วย AI","dashboard.analysis.selectSymbol":"เลือกหรือป้อนรหัสพื้นฐาน","dashboard.analysis.selectModel":"เลือกรุ่น","dashboard.analysis.startAnalysis":"เริ่มการวิเคราะห์","dashboard.analysis.history":"ประวัติศาสตร์","dashboard.analysis.tab.overview":"การวิเคราะห์ที่ครอบคลุม","dashboard.analysis.tab.fundamental":"ความรู้พื้นฐาน","dashboard.analysis.tab.technical":"เทคโนโลยี","dashboard.analysis.tab.news":"ข่าว","dashboard.analysis.tab.sentiment":"อารมณ์","dashboard.analysis.tab.risk":"เสี่ยง","dashboard.analysis.tab.debate":"การอภิปรายระยะสั้นยาว","dashboard.analysis.tab.decision":"การตัดสินใจขั้นสุดท้าย","dashboard.analysis.empty.selectSymbol":"เลือกเป้าหมายเพื่อเริ่มการวิเคราะห์","dashboard.analysis.empty.selectSymbolDesc":"เลือกจากรายการหุ้นที่เลือกเองหรือป้อนรหัสที่เกี่ยวข้องเพื่อรับรายงานการวิเคราะห์ AI หลายมิติ","dashboard.analysis.empty.startAnalysis":'คลิกปุ่ม "เริ่มการวิเคราะห์" เพื่อทำการวิเคราะห์หลายมิติ',"dashboard.analysis.empty.startAnalysisDesc":"เราจะให้การวิเคราะห์ที่ครอบคลุมจากหลายมิติ เช่น ปัจจัยพื้นฐาน เทคโนโลยี ข่าวสาร ความรู้สึก และความเสี่ยง","dashboard.analysis.empty.noData":"ขณะนี้ไม่มีข้อมูลการวิเคราะห์ {type} โปรดดำเนินการวิเคราะห์ที่ครอบคลุมก่อน","dashboard.analysis.empty.noWatchlist":"ขณะนี้ไม่มีหุ้นที่เลือกเอง","dashboard.analysis.empty.noHistory":"ยังไม่มีประวัติ","dashboard.analysis.empty.watchlistHint":"ขณะนี้ไม่มีหุ้นที่เลือกเองกรุณาก่อน","dashboard.analysis.empty.noDebateData":"ยังไม่มีข้อมูลการอภิปราย","dashboard.analysis.empty.noDecisionData":"ยังไม่มีข้อมูลการตัดสินใจ","dashboard.analysis.empty.selectAgent":"โปรดเลือกตัวแทนเพื่อดูผลการวิเคราะห์","dashboard.analysis.loading.analyzing":"กำลังวิเคราะห์ กรุณารอสักครู่...","dashboard.analysis.loading.fundamental":"กำลังวิเคราะห์ข้อมูลพื้นฐาน...","dashboard.analysis.loading.technical":"กำลังวิเคราะห์ตัวชี้วัดทางเทคนิค...","dashboard.analysis.loading.news":"กำลังวิเคราะห์ข้อมูลข่าว...","dashboard.analysis.loading.sentiment":"วิเคราะห์อารมณ์ตลาด...","dashboard.analysis.loading.risk":"กำลังประเมินความเสี่ยง...","dashboard.analysis.loading.debate":"การอภิปรายระยะสั้นระยะสั้นกำลังดำเนินอยู่...","dashboard.analysis.loading.decision":"กำลังสร้างการตัดสินใจขั้นสุดท้าย...","dashboard.analysis.score.overall":"คะแนนโดยรวม","dashboard.analysis.score.recommendation":"คำแนะนำการลงทุน","dashboard.analysis.score.confidence":"ความมั่นใจ","dashboard.analysis.dimension.fundamental":"ความรู้พื้นฐาน","dashboard.analysis.dimension.technical":"เทคโนโลยี","dashboard.analysis.dimension.news":"ข่าว","dashboard.analysis.dimension.sentiment":"อารมณ์","dashboard.analysis.dimension.risk":"เสี่ยง","dashboard.analysis.card.dimensionScores":"การให้คะแนนสำหรับแต่ละมิติ","dashboard.analysis.card.overviewReport":"รายงานการวิเคราะห์ที่ครอบคลุม","dashboard.analysis.card.financialMetrics":"ตัวชี้วัดทางการเงิน","dashboard.analysis.card.fundamentalReport":"รายงานการวิเคราะห์ปัจจัยพื้นฐาน","dashboard.analysis.card.technicalIndicators":"ตัวชี้วัดทางเทคนิค","dashboard.analysis.card.technicalReport":"รายงานการวิเคราะห์ทางเทคนิค","dashboard.analysis.card.newsList":"ข่าวที่เกี่ยวข้อง","dashboard.analysis.card.newsReport":"รายงานการวิเคราะห์ข่าว","dashboard.analysis.card.sentimentIndicators":"ตัวบ่งชี้ความรู้สึก","dashboard.analysis.card.sentimentReport":"รายงานการวิเคราะห์ความรู้สึก","dashboard.analysis.card.riskMetrics":"ตัวชี้วัดความเสี่ยง","dashboard.analysis.card.riskReport":"รายงานการประเมินความเสี่ยง","dashboard.analysis.card.bullView":"มุมมองรั้น (กระทิง)","dashboard.analysis.card.bearView":"มุมมองหยาบคาย (หมี)","dashboard.analysis.card.researchConclusion":"ข้อสรุปของผู้วิจัย","dashboard.analysis.card.traderPlan":"แผนผู้ค้า","dashboard.analysis.card.riskDebate":"การอภิปรายคณะกรรมการความเสี่ยง","dashboard.analysis.card.finalDecision":"การตัดสินใจครั้งสุดท้าย","dashboard.analysis.card.tradePlanDetail":"รายละเอียดแผนการเทรด","dashboard.analysis.tradingPlan.entry_price":"ราคาค่าเข้าชม","dashboard.analysis.tradingPlan.position_size":"ขนาดตำแหน่ง","dashboard.analysis.tradingPlan.stop_loss":"หยุดการสูญเสีย","dashboard.analysis.tradingPlan.take_profit":"ขายทำกำไร","dashboard.analysis.label.confidence":"ความมั่นใจ","dashboard.analysis.label.keyPoints":"จุดหลัก","dashboard.analysis.label.riskWarning":"คำเตือนความเสี่ยง","dashboard.analysis.risk.risky":"เสี่ยง","dashboard.analysis.risk.neutral":"มุมมองที่เป็นกลาง (เป็นกลาง)","dashboard.analysis.risk.safe":"มุมมองแบบอนุรักษ์นิยม (ปลอดภัย)","dashboard.analysis.risk.conclusion":"สรุปแล้ว","dashboard.analysis.feature.fundamental":"การวิเคราะห์พื้นฐาน","dashboard.analysis.feature.technical":"การวิเคราะห์ทางเทคนิค","dashboard.analysis.feature.news":"การวิเคราะห์ข่าว","dashboard.analysis.feature.sentiment":"การวิเคราะห์ความรู้สึก","dashboard.analysis.feature.risk":"การประเมินความเสี่ยง","dashboard.analysis.watchlist.title":"การเลือกหุ้นของฉัน","dashboard.analysis.watchlist.add":"เพิ่มไปที่","dashboard.analysis.watchlist.addStock":"เพิ่มสต็อก","dashboard.analysis.modal.addStock.title":"เพิ่มหุ้นเสริม","dashboard.analysis.modal.addStock.confirm":"แน่นอน","dashboard.analysis.modal.addStock.cancel":"ยกเลิก","dashboard.analysis.modal.addStock.market":"ประเภทตลาด","dashboard.analysis.modal.addStock.marketPlaceholder":"กรุณาเลือกตลาด","dashboard.analysis.modal.addStock.marketRequired":"กรุณาเลือกประเภทตลาด","dashboard.analysis.modal.addStock.symbol":"รหัสสต๊อกสินค้า","dashboard.analysis.modal.addStock.symbolPlaceholder":"ตัวอย่างเช่น: AAPL, TSLA, GOOGL, 000001, BTC","dashboard.analysis.modal.addStock.symbolRequired":"กรุณากรอกรหัสสต๊อกสินค้า","dashboard.analysis.modal.addStock.searchPlaceholder":"ค้นหารหัสหรือชื่อเป้าหมาย","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"ค้นหาหรือป้อนรหัสอ้างอิง (เช่น AAPL, BTC/USDT, EUR/USD)","dashboard.analysis.modal.addStock.searchOrInputHint":"รองรับการค้นหาวัตถุในฐานข้อมูลหรือป้อนรหัสโดยตรง (ระบบจะรับชื่อโดยอัตโนมัติ)","dashboard.analysis.modal.addStock.search":"ค้นหา","dashboard.analysis.modal.addStock.searchResults":"ผลการค้นหา","dashboard.analysis.modal.addStock.hotSymbols":"เป้าหมายยอดนิยม","dashboard.analysis.modal.addStock.noHotSymbols":"ยังไม่มีเป้าหมายยอดนิยม","dashboard.analysis.modal.addStock.selectedSymbol":"เลือกแล้ว","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"โปรดเลือกเป้าหมายก่อน","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"โปรดเลือกเป้าหมายหรือป้อนรหัสเป้าหมายก่อน","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"กรุณากรอกรหัสเป้าหมาย","dashboard.analysis.modal.addStock.pleaseSelectMarket":"โปรดเลือกประเภทตลาดก่อน","dashboard.analysis.modal.addStock.searchFailed":"การค้นหาล้มเหลว โปรดลองอีกครั้งในภายหลัง","dashboard.analysis.modal.addStock.noSearchResults":"ไม่พบเป้าหมายที่ตรงกัน","dashboard.analysis.modal.addStock.willAutoFetchName":"ระบบจะรับชื่อให้อัตโนมัติ","dashboard.analysis.modal.addStock.addDirectly":"เพิ่มโดยตรง","dashboard.analysis.modal.addStock.nameWillBeFetched":"ชื่อจะถูกหยิบขึ้นมาโดยอัตโนมัติเมื่อเพิ่ม","dashboard.analysis.market.USStock":"หุ้นสหรัฐ","dashboard.analysis.market.Crypto":"สกุลเงินดิจิทัล","dashboard.analysis.market.Forex":"ฟอเร็กซ์","dashboard.analysis.market.Futures":"ฟิวเจอร์ส","dashboard.analysis.modal.history.title":"บันทึกการวิเคราะห์ทางประวัติศาสตร์","dashboard.analysis.modal.history.viewResult":"ดูผลลัพธ์","dashboard.analysis.modal.history.completeTime":"เวลาเสร็จสิ้น","dashboard.analysis.modal.history.error":"ความผิดพลาด","dashboard.analysis.status.pending":"รอดำเนินการ","dashboard.analysis.status.processing":"กำลังประมวลผล","dashboard.analysis.status.completed":"สมบูรณ์","dashboard.analysis.status.failed":"ล้มเหลว","dashboard.analysis.message.selectSymbol":"โปรดเลือกเป้าหมายก่อน","dashboard.analysis.message.taskCreated":"งานการวิเคราะห์ได้ถูกสร้างขึ้นแล้วและกำลังดำเนินการอยู่เบื้องหลัง...","dashboard.analysis.message.analysisComplete":"การวิเคราะห์เสร็จสมบูรณ์","dashboard.analysis.message.analysisCompleteCache":"การวิเคราะห์เสร็จสมบูรณ์ (ใช้ข้อมูลที่แคชไว้)","dashboard.analysis.message.analysisFailed":"การวิเคราะห์ล้มเหลว โปรดลองอีกครั้งในภายหลัง","dashboard.analysis.message.addStockSuccess":"เพิ่มเรียบร้อยแล้ว","dashboard.analysis.message.addStockFailed":"เพิ่มล้มเหลว","dashboard.analysis.message.removeStockSuccess":"ลบสำเร็จแล้ว","dashboard.analysis.message.removeStockFailed":"การลบล้มเหลว","dashboard.analysis.message.resumingAnalysis":"กำลังดำเนินการงานวิเคราะห์ต่อ...","dashboard.analysis.message.deleteSuccess":"ลบสำเร็จแล้ว","dashboard.analysis.message.deleteFailed":"การลบล้มเหลว","dashboard.analysis.modal.history.delete":"ลบ","dashboard.analysis.modal.history.deleteConfirm":"คุณแน่ใจหรือไม่ว่าต้องการลบบันทึกการวิเคราะห์นี้?","dashboard.analysis.test":"ร้านค้าเลขที่ {no} ถนน Gongzhan","dashboard.analysis.introduce":"คำอธิบายตัวบ่งชี้","dashboard.analysis.total-sales":"ยอดขายรวม","dashboard.analysis.day-sales":"ยอดขายเฉลี่ยต่อวัน¥","dashboard.analysis.visits":"การเข้าชม","dashboard.analysis.visits-trend":"แนวโน้มการเข้าชม","dashboard.analysis.visits-ranking":"อันดับการเข้าชมร้านค้า","dashboard.analysis.day-visits":"การเข้าชมรายวัน","dashboard.analysis.week":"รายสัปดาห์ปีต่อปี","dashboard.analysis.day":"ปีต่อปี","dashboard.analysis.payments":"จำนวนการชำระเงิน","dashboard.analysis.conversion-rate":"อัตราการแปลง","dashboard.analysis.operational-effect":"ผลกระทบจากกิจกรรมการดำเนินงาน","dashboard.analysis.sales-trend":"แนวโน้มการขาย","dashboard.analysis.sales-ranking":"อันดับยอดขายของร้าน","dashboard.analysis.all-year":"ประจำปี","dashboard.analysis.all-month":"เดือนนี้","dashboard.analysis.all-week":"สัปดาห์นี้","dashboard.analysis.all-day":"วันนี้","dashboard.analysis.search-users":"จำนวนผู้ใช้การค้นหา","dashboard.analysis.per-capita-search":"การค้นหาต่อหัว","dashboard.analysis.online-top-search":"การค้นหายอดนิยมออนไลน์","dashboard.analysis.the-proportion-of-sales":"สัดส่วนประเภทการขาย","dashboard.analysis.dropdown-option-one":"ปฏิบัติการที่หนึ่ง","dashboard.analysis.dropdown-option-two":"ปฏิบัติการ 2","dashboard.analysis.channel.all":"ทุกช่อง","dashboard.analysis.channel.online":"ออนไลน์","dashboard.analysis.channel.stores":"เก็บ","dashboard.analysis.sales":"ฝ่ายขาย","dashboard.analysis.traffic":"การไหลของผู้โดยสาร","dashboard.analysis.table.rank":"การจัดอันดับ","dashboard.analysis.table.search-keyword":"ค้นหาคำสำคัญ","dashboard.analysis.table.users":"จำนวนผู้ใช้","dashboard.analysis.table.weekly-range":"เพิ่มขึ้นรายสัปดาห์","dashboard.indicator.selectSymbol":"เลือกหรือป้อนรหัสพื้นฐาน","dashboard.indicator.emptyWatchlistHint":"ขณะนี้ไม่มีหุ้นที่เลือกเอง กรุณาเพิ่มก่อน","dashboard.indicator.hint.selectSymbol":"โปรดเลือกเป้าหมายเพื่อเริ่มการวิเคราะห์","dashboard.indicator.hint.selectSymbolDesc":"เลือกหรือป้อนรหัสหุ้นในช่องค้นหาด้านบนเพื่อดูกราฟ K-line และตัวชี้วัดทางเทคนิค","dashboard.indicator.retry":"ลองอีกครั้ง","dashboard.indicator.panel.title":"ตัวชี้วัดทางเทคนิค","dashboard.indicator.panel.realtimeOn":"ปิดการอัพเดตแบบเรียลไทม์","dashboard.indicator.panel.realtimeOff":"เปิดใช้งานการอัปเดตแบบเรียลไทม์","dashboard.indicator.panel.themeLight":"เปลี่ยนเป็นธีมสีเข้ม","dashboard.indicator.panel.themeDark":"เปลี่ยนเป็นธีมสว่าง","dashboard.indicator.section.enabled":"เปิดใช้งานแล้ว","dashboard.indicator.section.added":"ตัวบ่งชี้ที่ฉันเพิ่ม","dashboard.indicator.section.custom":"ตัวชี้วัดที่สร้างขึ้นด้วยตัวเอง","dashboard.indicator.section.bought":"ตัวบ่งชี้ที่ฉันซื้อ","dashboard.indicator.section.myCreated":"ตัวบ่งชี้ที่ฉันสร้างขึ้น","dashboard.indicator.empty":"ยังไม่มีตัวบ่งชี้ โปรดเพิ่มหรือสร้างตัวบ่งชี้ก่อน","dashboard.indicator.buy":"ตัวบ่งชี้การซื้อ","dashboard.indicator.action.start":"เริ่มต้นขึ้น","dashboard.indicator.action.stop":"ปิด","dashboard.indicator.action.edit":"แก้ไข","dashboard.indicator.action.delete":"ลบ","dashboard.indicator.action.backtest":"การทดสอบย้อนหลัง","dashboard.indicator.status.normal":"ปกติ","dashboard.indicator.status.normalPermanent":"ปกติ (ใช้ได้ถาวร)","dashboard.indicator.status.expired":"หมดอายุแล้ว","dashboard.indicator.expiry.permanent":"มีผลถาวร","dashboard.indicator.expiry.noExpiry":"ไม่มีเวลาหมดอายุ","dashboard.indicator.expiry.expired":"หมดอายุ: {date}","dashboard.indicator.expiry.expiresOn":"เวลาหมดอายุ: {date}","dashboard.indicator.delete.confirmTitle":"ยืนยันการลบ","dashboard.indicator.delete.confirmContent":'คุณแน่ใจหรือไม่ว่าต้องการลบตัวบ่งชี้ "{name}"?การดำเนินการนี้ไม่สามารถย้อนกลับได้',"dashboard.indicator.delete.confirmOk":"ลบ","dashboard.indicator.delete.confirmCancel":"ยกเลิก","dashboard.indicator.delete.success":"ลบสำเร็จ","dashboard.indicator.delete.failed":"ลบไม่สำเร็จ","dashboard.indicator.save.success":"บันทึกเรียบร้อยแล้ว","dashboard.indicator.save.failed":"บันทึกล้มเหลว","dashboard.indicator.error.loadWatchlistFailed":"ไม่สามารถโหลดหุ้นเสริมได้","dashboard.indicator.error.chartNotReady":"ส่วนประกอบแผนภูมิไม่ได้เตรียมใช้งาน โปรดเลือกเป้าหมายก่อนแล้วรอให้แผนภูมิโหลด","dashboard.indicator.error.chartMethodNotReady":"วิธีส่วนประกอบแผนภูมิไม่พร้อม โปรดลองอีกครั้งในภายหลัง","dashboard.indicator.error.chartExecuteNotReady":"วิธีดำเนินการส่วนประกอบแผนภูมิไม่พร้อม โปรดลองอีกครั้งในภายหลัง","dashboard.indicator.error.parseFailed":"ไม่สามารถแยกวิเคราะห์โค้ด Python","dashboard.indicator.error.parseFailedCheck":"ไม่สามารถแยกวิเคราะห์โค้ด Python ได้ โปรดตรวจสอบรูปแบบโค้ด","dashboard.indicator.error.addIndicatorFailed":"ไม่สามารถเพิ่มตัวบ่งชี้ได้","dashboard.indicator.error.runIndicatorFailed":"ตัวบ่งชี้การทำงานล้มเหลว","dashboard.indicator.error.pleaseLogin":"กรุณาเข้าสู่ระบบก่อน","dashboard.indicator.error.loadDataFailed":"การโหลดข้อมูลล้มเหลว","dashboard.indicator.error.loadDataFailedDesc":"โปรดตรวจสอบการเชื่อมต่อเครือข่าย","dashboard.indicator.error.pythonEngineFailed":"โหลดกลไก Python ล้มเหลวและฟังก์ชันตัวบ่งชี้อาจไม่พร้อมใช้งาน","dashboard.indicator.error.chartInitFailed":"การเริ่มต้นแผนภูมิล้มเหลว","dashboard.indicator.warning.enterCode":"กรุณากรอกรหัสตัวบ่งชี้ก่อน","dashboard.indicator.warning.pyodideLoadFailed":"โปรแกรม Python ไม่สามารถโหลดได้","dashboard.indicator.warning.pyodideLoadFailedDesc":"คุณสมบัตินี้ไม่สามารถใช้ได้ในภูมิภาคหรือสภาพแวดล้อมเครือข่ายปัจจุบันของคุณ","dashboard.indicator.warning.chartNotInitialized":"แผนภูมิไม่ได้เตรียมใช้งานและไม่สามารถใช้เครื่องมือวาดเส้นได้","dashboard.indicator.success.runIndicator":"ตัวบ่งชี้ทำงานสำเร็จ","dashboard.indicator.success.clearDrawings":"ล้างภาพวาดเส้นทั้งหมดแล้ว","dashboard.indicator.sma":"SMA (ชุดค่าผสมค่าเฉลี่ยเคลื่อนที่)","dashboard.indicator.ema":"EMA (ชุดค่าผสมค่าเฉลี่ยเคลื่อนที่เอ็กซ์โปเนนเชียล)","dashboard.indicator.rsi":"RSI (ความแรงสัมพัทธ์)","dashboard.indicator.macd":"MACD","dashboard.indicator.bb":"โบลินเจอร์ แบนด์","dashboard.indicator.atr":"ATR (ช่วงที่แท้จริงเฉลี่ย)","dashboard.indicator.cci":"CCI (ดัชนีช่องสินค้าโภคภัณฑ์)","dashboard.indicator.williams":"วิลเลียมส์ %R (ตัวบ่งชี้วิลเลียมส์)","dashboard.indicator.mfi":"MFI (ดัชนีการไหลของเงิน)","dashboard.indicator.adx":"ADX (ดัชนีแนวโน้มเฉลี่ย)","dashboard.indicator.obv":"OBV (คลื่นพลังงาน)","dashboard.indicator.adosc":"ADOSC (ออสซิลเลเตอร์สะสม/ส่ง)","dashboard.indicator.ad":"AD (เส้นการสะสม/การกระจาย)","dashboard.indicator.kdj":"KDJ (ตัวบ่งชี้สุ่ม)","dashboard.indicator.signal.buy":"ซื้อ","dashboard.indicator.signal.sell":"ขาย","dashboard.indicator.signal.supertrendBuy":"ซื้อ SuperTrend","dashboard.indicator.signal.supertrendSell":"ขาย SuperTrend","dashboard.indicator.chart.kline":"เคไลน์","dashboard.indicator.chart.volume":"ปริมาณ","dashboard.indicator.chart.uptrend":"อัพเทรนด์","dashboard.indicator.chart.downtrend":"เทรนด์ขาลง","dashboard.indicator.tooltip.time":"เวลา","dashboard.indicator.tooltip.open":"เปิด","dashboard.indicator.tooltip.close":"รับ","dashboard.indicator.tooltip.high":"สูง","dashboard.indicator.tooltip.low":"ต่ำ","dashboard.indicator.tooltip.volume":"ปริมาณ","dashboard.indicator.drawing.line":"ส่วนของเส้น","dashboard.indicator.drawing.horizontalLine":"เส้นแนวนอน","dashboard.indicator.drawing.verticalLine":"เส้นแนวตั้ง","dashboard.indicator.drawing.ray":"รังสี","dashboard.indicator.drawing.straightLine":"เส้นตรง","dashboard.indicator.drawing.parallelLine":"เส้นขนาน","dashboard.indicator.drawing.priceLine":"เส้นราคา","dashboard.indicator.drawing.priceChannel":"ช่องราคา","dashboard.indicator.drawing.fibonacciLine":"เส้นฟีโบนักชี","dashboard.indicator.drawing.measure":"วัด","dashboard.indicator.drawing.clearAll":"ล้างภาพวาดเส้นทั้งหมด","dashboard.indicator.market.USStock":"หุ้นสหรัฐ","dashboard.indicator.market.Crypto":"สกุลเงินดิจิทัล","dashboard.indicator.market.Forex":"ฟอเร็กซ์","dashboard.indicator.market.Futures":"ฟิวเจอร์ส","dashboard.indicator.create":"สร้างตัวบ่งชี้","dashboard.indicator.editor.title":"สร้าง/แก้ไขตัวบ่งชี้","dashboard.indicator.editor.name":"ชื่อตัวบ่งชี้","dashboard.indicator.editor.nameRequired":"กรุณากรอกชื่อตัวบ่งชี้","dashboard.indicator.editor.namePlaceholder":"กรุณากรอกชื่อตัวบ่งชี้","dashboard.indicator.editor.description":"คำอธิบายตัวบ่งชี้","dashboard.indicator.editor.descriptionPlaceholder":"โปรดป้อนคำอธิบายของตัวบ่งชี้ (ตัวเลือก)","dashboard.indicator.editor.code":"รหัสหลาม","dashboard.indicator.editor.codeRequired":"กรุณากรอกรหัสตัวบ่งชี้","dashboard.indicator.editor.codePlaceholder":"กรุณากรอกรหัสไพธอน","dashboard.indicator.editor.run":"วิ่ง","dashboard.indicator.editor.runHint":"คลิกปุ่มเรียกใช้เพื่อดูตัวอย่างเอฟเฟกต์ตัวบ่งชี้บนแผนภูมิเส้น K","dashboard.indicator.editor.guide":"คู่มือการพัฒนา","dashboard.indicator.editor.guideTitle":"คู่มือการพัฒนาตัวบ่งชี้ Python","dashboard.indicator.editor.save":"บันทึก","dashboard.indicator.editor.cancel":"ยกเลิก","dashboard.indicator.editor.unnamed":"ตัวบ่งชี้ที่ไม่มีชื่อ","dashboard.indicator.editor.publishToCommunity":"โพสต์ไปที่ชุมชน","dashboard.indicator.editor.publishToCommunityHint":"เมื่อเผยแพร่แล้ว ผู้ใช้รายอื่นจะสามารถดูและใช้ตัวบ่งชี้ของคุณในชุมชนได้","dashboard.indicator.editor.indicatorType":"ประเภทตัวบ่งชี้","dashboard.indicator.editor.indicatorTypeRequired":"โปรดเลือกประเภทตัวบ่งชี้","dashboard.indicator.editor.indicatorTypePlaceholder":"โปรดเลือกประเภทตัวบ่งชี้","dashboard.indicator.editor.previewImage":"ดูตัวอย่าง","dashboard.indicator.editor.uploadImage":"อัพโหลดรูปภาพ","dashboard.indicator.editor.previewImageHint":"ขนาดที่แนะนำ: 800x400 ไม่เกิน 2MB","dashboard.indicator.editor.pricing":"ราคาขาย (QDT)","dashboard.indicator.editor.pricingType.free":"ฟรี","dashboard.indicator.editor.pricingType.permanent":"ถาวร","dashboard.indicator.editor.pricingType.monthly":"การชำระเงินรายเดือน","dashboard.indicator.editor.price":"ราคา","dashboard.indicator.editor.priceRequired":"กรุณากรอกราคา","dashboard.indicator.editor.pricePlaceholder":"กรุณากรอกราคา","dashboard.indicator.editor.pricingHint":"แม้ว่าราคาของตัวบ่งชี้ฟรีจะเป็น 0 แต่แพลตฟอร์มจะให้รางวัลแก่คุณ (QDT) ตามการใช้ตัวบ่งชี้และอัตราการชมเชยของคุณ","dashboard.indicator.editor.aiGenerate":"รุ่นอัจฉริยะ","dashboard.indicator.editor.aiPromptPlaceholder":"บอกความคิดของคุณมาให้ฉัน แล้วฉันจะสร้างโค้ดตัวบ่งชี้ Python ให้กับคุณ","dashboard.indicator.editor.aiGenerateBtn":"AI สร้างโค้ด","dashboard.indicator.editor.aiPromptRequired":"กรุณากรอกความคิดของคุณ","dashboard.indicator.editor.aiGenerateSuccess":"การสร้างรหัสสำเร็จ","dashboard.indicator.editor.aiGenerateError":"การสร้างโค้ดล้มเหลว โปรดลองอีกครั้งในภายหลัง","dashboard.indicator.backtest.title":"ตัวบ่งชี้ย้อนกลับ","dashboard.indicator.backtest.config":"พารามิเตอร์การทดสอบย้อนกลับ","dashboard.indicator.backtest.startDate":"วันที่เริ่มต้น","dashboard.indicator.backtest.endDate":"วันที่สิ้นสุด","dashboard.indicator.backtest.selectStartDate":"เลือกวันที่เริ่มต้น","dashboard.indicator.backtest.selectEndDate":"เลือกวันที่สิ้นสุด","dashboard.indicator.backtest.startDateRequired":"โปรดเลือกวันที่เริ่มต้น","dashboard.indicator.backtest.endDateRequired":"โปรดเลือกวันที่สิ้นสุด","dashboard.indicator.backtest.initialCapital":"ทุนเริ่มต้น","dashboard.indicator.backtest.initialCapitalRequired":"กรุณากรอกเงินทุนเริ่มต้น","dashboard.indicator.backtest.commission":"ค่าธรรมเนียมการจัดการ","dashboard.indicator.backtest.leverage":"อัตราส่วนเลเวอเรจ","dashboard.indicator.backtest.tradeDirection":"ทิศทางการซื้อขาย","dashboard.indicator.backtest.longOnly":"ยาวไป","dashboard.indicator.backtest.shortOnly":"สั้น","dashboard.indicator.backtest.both":"สองทาง","dashboard.indicator.backtest.run":"เริ่มการทดสอบย้อนหลัง","dashboard.indicator.backtest.rerun":"ทดสอบย้อนหลังอีกครั้ง","dashboard.indicator.backtest.close":"ปิด","dashboard.indicator.backtest.running":"อยู่ระหว่างการทดสอบตัวบ่งชี้ย้อนกลับ...","dashboard.indicator.backtest.results":"ผลการทดสอบย้อนหลัง","dashboard.indicator.backtest.totalReturn":"ผลตอบแทนรวม","dashboard.indicator.backtest.annualReturn":"รายได้ต่อปี","dashboard.indicator.backtest.maxDrawdown":"การเบิกถอนสูงสุด","dashboard.indicator.backtest.sharpeRatio":"อัตราส่วนความคมชัด","dashboard.indicator.backtest.winRate":"อัตราการชนะ","dashboard.indicator.backtest.profitFactor":"อัตราส่วนกำไร-ขาดทุน","dashboard.indicator.backtest.totalTrades":"จำนวนธุรกรรม","dashboard.indicator.totalReturn":"ผลตอบแทนรวม","dashboard.indicator.annualReturn":"อัตราผลตอบแทนต่อปี","dashboard.indicator.maxDrawdown":"การเบิกถอนสูงสุด","dashboard.indicator.sharpeRatio":"อัตราส่วนความคมชัด","dashboard.indicator.winRate":"อัตราการชนะ","dashboard.indicator.profitFactor":"อัตราส่วนกำไร-ขาดทุน","dashboard.indicator.totalTrades":"จำนวนธุรกรรมทั้งหมด","dashboard.indicator.backtest.totalCommission":"ค่าธรรมเนียมการจัดการทั้งหมด","dashboard.indicator.backtest.equityCurve":"เส้นอัตราผลตอบแทน","dashboard.indicator.backtest.strategy":"ตัวชี้วัดรายได้","dashboard.indicator.backtest.benchmark":"ผลตอบแทนมาตรฐาน","dashboard.indicator.backtest.tradeHistory":"ประวัติการทำธุรกรรม","dashboard.indicator.backtest.tradeTime":"เวลา","dashboard.indicator.backtest.tradeType":"พิมพ์","dashboard.indicator.backtest.buy":"ซื้อ","dashboard.indicator.backtest.sell":"ขาย","dashboard.indicator.backtest.liquidation":"การชำระบัญชี","dashboard.indicator.backtest.openLong":"เปิดยาวๆ","dashboard.indicator.backtest.closeLong":"ปินตัว","dashboard.indicator.backtest.closeLongStop":"ใกล้ถึงระยะยาว (หยุดการสูญเสีย)","dashboard.indicator.backtest.closeLongProfit":"ปิดมากขึ้น (ทำกำไร)","dashboard.indicator.backtest.addLong":"เพิ่มตำแหน่งยาว","dashboard.indicator.backtest.openShort":"เปิดสั้น","dashboard.indicator.backtest.closeShort":"ว่างเปล่า","dashboard.indicator.backtest.closeShortStop":"ปิด (หยุดการสูญเสีย)","dashboard.indicator.backtest.closeShortProfit":"ปิด (ทำกำไร)","dashboard.indicator.backtest.addShort":"เพิ่มตำแหน่งสั้น","dashboard.indicator.backtest.price":"ราคา","dashboard.indicator.backtest.amount":"ปริมาณ","dashboard.indicator.backtest.balance":"ยอดเงินในบัญชี","dashboard.indicator.backtest.profit":"กำไรและขาดทุน","dashboard.indicator.backtest.success":"การทดสอบย้อนกลับเสร็จสมบูรณ์","dashboard.indicator.backtest.failed":"การทดสอบย้อนกลับล้มเหลว โปรดลองอีกครั้งในภายหลัง","dashboard.indicator.backtest.noIndicatorCode":"ไม่มีรหัสที่ทดสอบย้อนกลับได้สำหรับตัวบ่งชี้นี้","dashboard.indicator.backtest.noSymbol":"โปรดเลือกเป้าหมายการทำธุรกรรมก่อน","dashboard.indicator.backtest.dateRangeExceeded":"ช่วงเวลาการทดสอบย้อนหลังเกินขีดจำกัด: {timeframe} รอบสามารถทดสอบย้อนหลังได้สูงสุด {maxRange}","dashboard.indicator.backtest.dateRangeExceededDays":"Backtest range exceeds limit: {timeframe} max {maxRange} ({maxDays} days)","dashboard.indicator.backtest.metaLine":"Symbol: {symbol} | Market: {market} | Timeframe: {timeframe}","dashboard.indicator.backtest.savedRunId":"Backtest saved. Run ID: {id}","dashboard.indicator.backtest.prev":"Previous","dashboard.indicator.backtest.next":"Next","dashboard.indicator.backtest.hint.entryPctMax":"Max entry: {maxPct}% (reserve budget for future scale-ins)","dashboard.indicator.backtest.steps.strategy.title":"Strategy","dashboard.indicator.backtest.steps.strategy.desc":"Position sizing & risk controls","dashboard.indicator.backtest.steps.trading.title":"Trading settings","dashboard.indicator.backtest.steps.trading.desc":"Time range, capital, fees, leverage","dashboard.indicator.backtest.steps.results.title":"Results","dashboard.indicator.backtest.steps.results.desc":"Backtest output","dashboard.indicator.backtest.panel.risk":"Risk management (SL/TP/Trailing)","dashboard.indicator.backtest.panel.scale":"Scale in / DCA (trend & mean-reversion)","dashboard.indicator.backtest.panel.reduce":"Reduce position (trend & adverse)","dashboard.indicator.backtest.panel.position":"Position sizing","dashboard.indicator.backtest.field.stopLossPct":"Stop Loss (%)","dashboard.indicator.backtest.field.takeProfitPct":"Take Profit (%)","dashboard.indicator.backtest.field.trailingEnabled":"Trailing stop / take profit","dashboard.indicator.backtest.field.trailingStopPct":"Trailing drawdown (%)","dashboard.indicator.backtest.field.trailingActivationPct":"Trailing activation (%)","dashboard.indicator.backtest.field.slippage":"Slippage (%)","dashboard.indicator.backtest.field.trendAddEnabled":"Trend-following scale-in","dashboard.indicator.backtest.field.dcaAddEnabled":"Mean-reversion scale-in","dashboard.indicator.backtest.field.trendAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.dcaAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.trendAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.dcaAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.trendAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.dcaAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.trendReduceEnabled":"Trend reduce","dashboard.indicator.backtest.field.adverseReduceEnabled":"Adverse reduce","dashboard.indicator.backtest.field.trendReduceStepPct":"Trend trigger (%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"Adverse trigger (%)","dashboard.indicator.backtest.field.trendReduceSizePct":"Reduce size (% of position)","dashboard.indicator.backtest.field.adverseReduceSizePct":"Adverse reduce size (% of position)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"Max trend reduce times","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"Max adverse reduce times","dashboard.indicator.backtest.field.entryPct":"Entry size (% of capital)","dashboard.indicator.backtest.field.minOrderPct":"Min order size (% of capital) (optional)","dashboard.indicator.backtest.closeLongTrailing":"Close Long (Trailing)","dashboard.indicator.backtest.reduceLong":"Reduce Long","dashboard.indicator.backtest.closeShortTrailing":"Close Short (Trailing)","dashboard.indicator.backtest.reduceShort":"Reduce Short","dashboard.docs.title":"ศูนย์เอกสาร","dashboard.docs.search.placeholder":"ค้นหาเอกสาร...","dashboard.docs.category.all":"ทั้งหมด","dashboard.docs.category.guide":"คู่มือการพัฒนา","dashboard.docs.category.api":"เอกสารประกอบ API","dashboard.docs.category.tutorial":"บทช่วยสอน","dashboard.docs.category.faq":"คำถามที่พบบ่อย","dashboard.docs.featured.title":"เอกสารแนะนำ","dashboard.docs.featured.tag":"แนะนำ","dashboard.docs.list.views":"เรียกดู","dashboard.docs.list.author":"ผู้เขียน","dashboard.docs.list.empty":"ยังไม่มีเอกสาร","dashboard.docs.list.backToAll":"กลับไปที่เอกสารทั้งหมด","dashboard.docs.list.total":"เอกสารทั้งหมด {count}","dashboard.docs.detail.back":"กลับไปยังรายการเอกสาร","dashboard.docs.detail.updatedAt":"อัปเดตเมื่อ","dashboard.docs.detail.related":"เอกสารที่เกี่ยวข้อง","dashboard.docs.detail.notFound":"ไม่มีเอกสารอยู่","dashboard.docs.detail.error":"เอกสารไม่มีอยู่หรือถูกลบไปแล้ว","dashboard.docs.search.result":"ผลการค้นหา","dashboard.docs.search.keyword":"คำหลัก","community.filter.indicatorType":"ประเภทตัวบ่งชี้","community.filter.all":"ทั้งหมด","community.filter.other":"ตัวเลือกอื่นๆ","community.filter.pricing":"ประเภทการกำหนดราคา","community.filter.allPricing":"ราคาทั้งหมด","community.filter.sortBy":"จัดเรียงตาม","community.filter.search":"ค้นหา","community.filter.searchPlaceholder":"ค้นหาชื่อเมตริก","community.indicatorType.trend":"ประเภทเทรนด์","community.indicatorType.momentum":"ประเภทโมเมนตัม","community.indicatorType.volatility":"ความผันผวน","community.indicatorType.volume":"ปริมาณ","community.indicatorType.custom":"ปรับแต่ง","community.pricing.free":"ฟรี","community.pricing.paid":"จ่าย","community.sort.downloads":"ดาวน์โหลด","community.sort.rating":"คะแนน","community.sort.newest":"รุ่นล่าสุด","community.pagination.total":"ตัวชี้วัดทั้งหมด {total}","community.noDescription":"ยังไม่มีคำอธิบาย","community.detail.type":"พิมพ์","community.detail.pricing":"ราคา","community.detail.rating":"คะแนน","community.detail.downloads":"ดาวน์โหลด","community.detail.author":"ผู้เขียน","community.detail.description":"การแนะนำ","community.detail.detailContent":"คำอธิบายโดยละเอียด","community.detail.backtestStats":"สถิติการทดสอบย้อนหลัง","community.action.purchase":"ตัวบ่งชี้การซื้อ","community.action.addToMyIndicators":"เพิ่มไปยังตัวบ่งชี้ของฉัน","community.action.favorite":"เก็บรวบรวม","community.action.unfavorite":"ยกเลิกรายการโปรด","community.action.buyNow":"ซื้อเลย","community.action.renew":"ต่ออายุ","community.purchase.price":"ราคา","community.purchase.permanent":"ถาวร","community.purchase.monthly":"ดวงจันทร์","community.purchase.confirmBuy":"ยืนยันที่จะซื้อตัวบ่งชี้นี้ ({price} QDT)?","community.purchase.confirmRenew":"ยืนยันที่จะต่ออายุตัวบ่งชี้นี้ ({price} QDT/เดือน) หรือไม่","community.purchase.confirmFree":"ยืนยันเพื่อเพิ่มตัวบ่งชี้ฟรีนี้หรือไม่","community.purchase.confirmTitle":"ยืนยันการดำเนินการ","community.purchase.owned":"คุณได้ซื้อตัวบ่งชี้นี้ (ใช้ได้ถาวร)","community.purchase.ownIndicator":"นี่คือเมตริกที่คุณเผยแพร่","community.purchase.expired":"การสมัครของคุณหมดอายุแล้ว","community.purchase.expiresOn":"เวลาหมดอายุ: {date}","community.tabs.detail":"รายละเอียดตัวบ่งชี้","community.tabs.backtest":"ข้อมูลการทดสอบย้อนหลัง","community.tabs.ratings":"ความคิดเห็นของผู้ใช้","community.rating.myRating":"คะแนนของฉัน","community.rating.stars":"{count} ดาว","community.rating.commentPlaceholder":"แบ่งปันประสบการณ์ของคุณ...","community.rating.submit":"ส่งเรตติ้ง.","community.rating.modify":"ปรับปรุงใหม่","community.rating.saveModify":"บันทึกการเปลี่ยนแปลง","community.rating.cancel":"ยกเลิก","community.rating.selectRating":"โปรดเลือกการให้คะแนน","community.rating.success":"เรตติ้งสำเร็จ","community.rating.modifySuccess":"แก้ไขการตรวจสอบเรียบร้อยแล้ว","community.rating.failed":"การให้คะแนนล้มเหลว","community.rating.noRatings":"ยังไม่มีความคิดเห็น","community.backtest.note":"ข้อมูลข้างต้นเป็นผลการทดสอบย้อนกลับในอดีตและมีไว้เพื่อการอ้างอิงเท่านั้น และไม่ได้แสดงถึงรายได้ในอนาคต","community.backtest.noData":"ยังไม่มีข้อมูลย้อนหลัง","community.backtest.uploadHint":"ผู้เขียนยังไม่ได้อัพโหลดข้อมูล backtest","community.message.loadFailed":"ไม่สามารถโหลดรายการตัวบ่งชี้","community.message.purchaseProcessing":"กำลังประมวลผลคำขอซื้อ...","community.message.downloadSuccess":"เพิ่มเมตริกลงในรายการเมตริกของฉันแล้ว","community.message.favoriteSuccess":"รวบรวมสำเร็จ","community.message.unfavoriteSuccess":"ยกเลิกการรวบรวมเรียบร้อยแล้ว","community.message.operationSuccess":"การดำเนินงานประสบความสำเร็จ","community.message.operationFailed":"การดำเนินการล้มเหลว","community.banner.readOnly":"อ่านอย่างเดียว","community.banner.loginHint":"สำหรับการเข้าสู่ระบบหรือการลงทะเบียน กรุณาคลิกปุ่มเพื่อไปยังหน้าอิสระเพื่อหลีกเลี่ยงปัญหา CSRF","community.banner.jumpButton":"ไปที่เข้าสู่ระบบ/ลงทะเบียน","dashboard.totalEquity":"ส่วนของผู้ถือหุ้นทั้งหมด","dashboard.totalPnL":"กำไรและขาดทุนทั้งหมด","dashboard.aiStrategies":"กลยุทธ์เอไอ","dashboard.indicatorStrategies":"กลยุทธ์ตัวบ่งชี้","dashboard.running":"วิ่ง","dashboard.pnlHistory":"กำไรและขาดทุนในอดีต","dashboard.strategyPerformance":"อัตราส่วนกำไรและขาดทุนของกลยุทธ์","dashboard.recentTrades":"การทำธุรกรรมล่าสุด","dashboard.currentPositions":"ตำแหน่งปัจจุบัน","dashboard.table.time":"เวลา","dashboard.table.strategy":"ชื่อกรมธรรม์","dashboard.table.symbol":"เป้า","dashboard.table.type":"พิมพ์","dashboard.table.side":"ทิศทาง","dashboard.table.size":"เปิดดอกเบี้ย","dashboard.table.entryPrice":"ราคาเปิดเฉลี่ย","dashboard.table.price":"ราคา","dashboard.table.amount":"ปริมาณ","dashboard.table.profit":"กำไรและขาดทุน","dashboard.pendingOrders":"บันทึกการดำเนินการคำสั่งซื้อ","dashboard.totalOrders":"รวม {total} รายการ","dashboard.viewError":"ดูข้อผิดพลาด","dashboard.filled":"ดำเนินการแล้ว","dashboard.orderTable.time":"เวลาที่สร้าง","dashboard.orderTable.strategy":"กลยุทธ์","dashboard.orderTable.symbol":"คู่เทรด","dashboard.orderTable.signalType":"ประเภทสัญญาณ","dashboard.orderTable.amount":"จำนวน","dashboard.orderTable.price":"ราคาที่ดำเนินการ","dashboard.orderTable.status":"สถานะ","dashboard.orderTable.executedAt":"เวลาที่ดำเนินการ","dashboard.signalType.openLong":"เปิด Long","dashboard.signalType.openShort":"เปิด Short","dashboard.signalType.closeLong":"ปิด Long","dashboard.signalType.closeShort":"ปิด Short","dashboard.signalType.addLong":"เพิ่ม Long","dashboard.signalType.addShort":"เพิ่ม Short","dashboard.status.pending":"รอดำเนินการ","dashboard.status.processing":"กำลังดำเนินการ","dashboard.status.completed":"เสร็จสิ้น","dashboard.status.failed":"ล้มเหลว","dashboard.status.cancelled":"ยกเลิกแล้ว","dashboard.table.pnl":"กำไรหรือขาดทุนที่ยังไม่เกิดขึ้นจริง","form.basic-form.basic.title":"แบบฟอร์มพื้นฐาน","form.basic-form.basic.description":"หน้าแบบฟอร์มใช้เพื่อรวบรวมหรือตรวจสอบข้อมูลจากผู้ใช้ โดยทั่วไปจะใช้แบบฟอร์มพื้นฐานในสถานการณ์จำลองที่มีรายการข้อมูลน้อย","form.basic-form.title.label":"ชื่อ","form.basic-form.title.placeholder":"ตั้งชื่อให้เป้าหมาย","form.basic-form.title.required":"กรุณากรอกชื่อ","form.basic-form.date.label":"วันที่เริ่มต้นและสิ้นสุด","form.basic-form.placeholder.start":"วันที่เริ่มต้น","form.basic-form.placeholder.end":"วันที่สิ้นสุด","form.basic-form.date.required":"กรุณาเลือกวันที่เริ่มต้นและสิ้นสุด","form.basic-form.goal.label":"คำอธิบายเป้าหมาย","form.basic-form.goal.placeholder":"กรุณาป้อนเป้าหมายการทำงานแบบเป็นขั้นตอนของคุณ","form.basic-form.goal.required":"กรุณากรอกคำอธิบายเป้าหมาย","form.basic-form.standard.label":"วัด","form.basic-form.standard.placeholder":"กรุณากรอกตัวชี้วัด","form.basic-form.standard.required":"กรุณากรอกตัวชี้วัด","form.basic-form.client.label":"ลูกค้า","form.basic-form.client.required":"โปรดอธิบายลูกค้าที่คุณให้บริการ","form.basic-form.label.tooltip":"ผู้รับบริการเป้าหมาย","form.basic-form.client.placeholder":"โปรดอธิบายลูกค้าที่คุณให้บริการ ลูกค้าภายในโดยตรง @ชื่อ/หมายเลขงาน","form.basic-form.invites.label":"เชิญผู้วิจารณ์","form.basic-form.invites.placeholder":"กรุณา @name/หมายเลขพนักงาน โดยตรง คุณสามารถเชิญได้สูงสุด 5 คน","form.basic-form.weight.label":"น้ำหนัก","form.basic-form.weight.placeholder":"กรุณาเข้า","form.basic-form.public.label":"กำหนดเป้าหมายสาธารณะ","form.basic-form.label.help":"ลูกค้าและผู้ตรวจสอบจะถูกแชร์โดยค่าเริ่มต้น","form.basic-form.radio.public":"สาธารณะ","form.basic-form.radio.partially-public":"เปิดเผยต่อสาธารณะบางส่วน","form.basic-form.radio.private":"ส่วนตัว","form.basic-form.publicUsers.placeholder":"เปิดให้","form.basic-form.option.A":"เพื่อนร่วมงาน 1","form.basic-form.option.B":"เพื่อนร่วมงาน 2","form.basic-form.option.C":"เพื่อนร่วมงานสามคน","form.basic-form.email.required":"กรุณากรอกที่อยู่อีเมลของคุณ!","form.basic-form.email.wrong-format":"รูปแบบที่อยู่อีเมลไม่ถูกต้อง!","form.basic-form.userName.required":"กรุณากรอกชื่อผู้ใช้!","form.basic-form.password.required":"กรุณากรอกรหัสผ่านของคุณ!","form.basic-form.password.twice":"รหัสผ่านที่ป้อนสองครั้งไม่ตรงกัน!","form.basic-form.strength.msg":"กรุณากรอกอย่างน้อย 6 ตัวอักษร กรุณาอย่าใช้รหัสผ่านที่คาดเดาได้ง่าย","form.basic-form.strength.strong":"ความแข็งแกร่ง: แข็งแกร่ง","form.basic-form.strength.medium":"ความแข็งแกร่ง: ปานกลาง","form.basic-form.strength.short":"ความแรง: สั้นเกินไป","form.basic-form.confirm-password.required":"กรุณายืนยันรหัสผ่านของคุณ!","form.basic-form.phone-number.required":"กรุณากรอกหมายเลขโทรศัพท์มือถือของคุณ!","form.basic-form.phone-number.wrong-format":"รูปแบบหมายเลขโทรศัพท์มือถือผิด!","form.basic-form.verification-code.required":"กรุณากรอกรหัสยืนยัน!","form.basic-form.form.get-captcha":"รับรหัสยืนยัน","form.basic-form.captcha.second":"ที่สอง","form.basic-form.form.optional":"(ไม่จำเป็น)","form.basic-form.form.submit":"ส่ง","form.basic-form.form.save":"บันทึก","form.basic-form.email.placeholder":"จดหมาย","form.basic-form.password.placeholder":"รหัสผ่านอย่างน้อย 6 ตัวอักษร คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่","form.basic-form.confirm-password.placeholder":"ยืนยันรหัสผ่าน","form.basic-form.phone-number.placeholder":"หมายเลขโทรศัพท์","form.basic-form.verification-code.placeholder":"รหัสยืนยัน","result.success.title":"ส่งสำเร็จ","result.success.description":'หน้าผลลัพธ์การส่งใช้เพื่อตอบกลับผลการประมวลผลของชุดงานการดำเนินงาน หากเป็นเพียงการดำเนินการง่ายๆ ให้ใช้ข้อความตอบรับพร้อมท์ทั่วโลกพื้นที่ข้อความนี้สามารถแสดงคำแนะนำเสริมง่ายๆ หากจำเป็นต้องแสดง "เอกสาร" พื้นที่สีเทาด้านล่างสามารถแสดงเนื้อหาที่ซับซ้อนมากขึ้นได้',"result.success.operate-title":"ชื่อโครงการ","result.success.operate-id":"รหัสโครงการ","result.success.principal":"บุคคลที่รับผิดชอบ","result.success.operate-time":"เวลาที่มีประสิทธิภาพ","result.success.step1-title":"สร้างโครงการ","result.success.step1-operator":"คู ลิลี่","result.success.step2-title":"การทบทวนเบื้องต้นของแผนก","result.success.step2-operator":"โจว เหมาเหมา","result.success.step2-extra":"ด่วน","result.success.step3-title":"การตรวจสอบทางการเงิน","result.success.step4-title":"เสร็จ","result.success.btn-return":"กลับไปที่รายการ","result.success.btn-project":"ดูรายการ","result.success.btn-print":"พิมพ์","result.fail.error.title":"การส่งล้มเหลว","result.fail.error.description":"โปรดตรวจสอบและแก้ไขข้อมูลต่อไปนี้ก่อนที่จะส่งอีกครั้ง","result.fail.error.hint-title":"เนื้อหาที่คุณส่งมีข้อผิดพลาดต่อไปนี้:","result.fail.error.hint-text1":"บัญชีของคุณถูกระงับ","result.fail.error.hint-btn1":"ละลายทันที","result.fail.error.hint-text2":"บัญชีของคุณยังไม่มีสิทธิ์สมัคร","result.fail.error.hint-btn2":"อัพเกรดตอนนี้","result.fail.error.btn-text":"กลับไปแก้ไข","account.settings.menuMap.custom":"การปรับเปลี่ยนในแบบของคุณ","account.settings.menuMap.binding":"การผูกบัญชี","account.settings.basic.avatar":"อวตาร","account.settings.basic.change-avatar":"เปลี่ยนอวตาร","account.settings.basic.email":"จดหมาย","account.settings.basic.email-message":"กรุณากรอกอีเมล์ของคุณ!","account.settings.basic.nickname":"ชื่อนิค","account.settings.basic.nickname-message":"กรุณากรอกชื่อเล่นของคุณ!","account.settings.basic.profile":"ประวัติโดยย่อ","account.settings.basic.profile-message":"กรุณากรอกรายละเอียดส่วนตัวของคุณ!","account.settings.basic.profile-placeholder":"ประวัติโดยย่อ","account.settings.basic.country":"ประเทศ/ภูมิภาค","account.settings.basic.country-message":"กรุณากรอกประเทศหรือภูมิภาคของคุณ!","account.settings.basic.geographic":"จังหวัดและเมือง","account.settings.basic.geographic-message":"กรุณากรอกจังหวัดและเมืองของคุณ!","account.settings.basic.address":"ที่อยู่ถนน","account.settings.basic.address-message":"กรุณากรอกที่อยู่ของคุณ!","account.settings.basic.phone":"เบอร์ติดต่อ","account.settings.basic.phone-message":"กรุณากรอกหมายเลขติดต่อของคุณ!","account.settings.basic.update":"อัพเดตข้อมูลพื้นฐาน","account.settings.basic.update.success":"อัปเดตข้อมูลพื้นฐานสำเร็จ","account.settings.security.strong":"ทรงพลัง","account.settings.security.medium":"กลาง","account.settings.security.weak":"อ่อนแอ","account.settings.security.password":"รหัสผ่านบัญชี","account.settings.security.password-description":"ความยากของรหัสผ่านปัจจุบัน:","account.settings.security.phone":"การรักษาความปลอดภัยโทรศัพท์มือถือ","account.settings.security.phone-description":"โทรศัพท์มือถือที่ผูกไว้แล้ว:","account.settings.security.question":"ปัญหาด้านความปลอดภัย","account.settings.security.question-description":"ไม่มีการตั้งค่าคำถามเพื่อความปลอดภัย ซึ่งสามารถปกป้องความปลอดภัยของบัญชีได้อย่างมีประสิทธิภาพ","account.settings.security.email":"ผูกอีเมล","account.settings.security.email-description":"ที่อยู่อีเมลที่ถูกผูกไว้แล้ว:","account.settings.security.mfa":"อุปกรณ์เอ็มเอฟเอ","account.settings.security.mfa-description":"อุปกรณ์ MFA ไม่ได้ถูกผูกไว้ หลังจากผูกแล้วสามารถยืนยันอีกครั้งได้","account.settings.security.modify":"ปรับปรุงใหม่","account.settings.security.set":"ตั้งค่า","account.settings.security.bind":"ผูกพัน","account.settings.binding.taobao":"ผูก Taobao","account.settings.binding.taobao-description":"บัญชี Taobao ไม่ได้ถูกผูกไว้ในขณะนี้","account.settings.binding.alipay":"ผูกอาลีเพย์","account.settings.binding.alipay-description":"บัญชี Alipay ไม่ได้ถูกผูกไว้ในขณะนี้","account.settings.binding.dingding":"การผูกมัด DingTalk","account.settings.binding.dingding-description":"ขณะนี้ไม่มีบัญชี DingTalk ถูกผูกไว้","account.settings.binding.bind":"ผูกพัน","account.settings.notification.password":"รหัสผ่านบัญชี","account.settings.notification.password-description":"ข้อความจากผู้ใช้รายอื่นจะได้รับแจ้งในรูปแบบของข้อความไซต์","account.settings.notification.messages":"ข้อความของระบบ","account.settings.notification.messages-description":"ข้อความของระบบจะได้รับแจ้งในรูปแบบของข้อความไซต์","account.settings.notification.todo":"งานที่ต้องทำ","account.settings.notification.todo-description":"งานที่ต้องทำจะได้รับแจ้งในรูปแบบของข้อความในไซต์","account.settings.settings.open":"เปิด","account.settings.settings.close":"ปิด","trading-assistant.title":"ผู้ช่วยการซื้อขาย","trading-assistant.strategyList":"รายการกลยุทธ์","trading-assistant.createStrategy":"สร้างนโยบาย","trading-assistant.noStrategy":"ยังไม่มีกลยุทธ์","trading-assistant.selectStrategy":"โปรดเลือกกลยุทธ์จากด้านซ้ายเพื่อดูรายละเอียด","trading-assistant.startStrategy":"กลยุทธ์การเปิดตัว","trading-assistant.stopStrategy":"กลยุทธ์การหยุด","trading-assistant.editStrategy":"กลยุทธ์ด้านบรรณาธิการ","trading-assistant.deleteStrategy":"ลบนโยบาย","trading-assistant.status.running":"วิ่ง","trading-assistant.status.stopped":"หยุดแล้ว","trading-assistant.status.error":"ความผิดพลาด","trading-assistant.strategyType.IndicatorStrategy":"กลยุทธ์ตัวบ่งชี้ทางเทคนิค","trading-assistant.strategyType.PromptBasedStrategy":"กลยุทธ์คำคิว","trading-assistant.strategyType.GridStrategy":"กลยุทธ์กริด","trading-assistant.tabs.tradingRecords":"ประวัติการทำธุรกรรม","trading-assistant.tabs.positions":"บันทึกตำแหน่ง","trading-assistant.tabs.equityCurve":"เส้นส่วนของผู้ถือหุ้น","trading-assistant.form.step1":"เลือกตัวบ่งชี้","trading-assistant.form.step2":"การกำหนดค่าการแลกเปลี่ยน","trading-assistant.form.step3":"พารามิเตอร์กลยุทธ์","trading-assistant.form.indicator":"เลือกตัวบ่งชี้","trading-assistant.form.indicatorHint":"คุณสามารถเลือกได้เฉพาะตัวบ่งชี้ทางเทคนิคที่คุณซื้อหรือสร้างขึ้นเท่านั้น","trading-assistant.form.qdtCostHints":"การใช้กลยุทธ์จะใช้ QDT โปรดตรวจสอบให้แน่ใจว่าบัญชีมียอดคงเหลือ QDT เพียงพอ","trading-assistant.form.indicatorDescription":"คำอธิบายตัวบ่งชี้","trading-assistant.form.noDescription":"ยังไม่มีคำอธิบาย","trading-assistant.form.exchange":"เลือกการแลกเปลี่ยน","trading-assistant.form.apiKey":"คีย์ API","trading-assistant.form.secretKey":"รหัสลับ","trading-assistant.form.passphrase":"ข้อความรหัสผ่าน","trading-assistant.form.testConnection":"ทดสอบการเชื่อมต่อ","trading-assistant.form.strategyName":"ชื่อกรมธรรม์","trading-assistant.form.symbol":"คู่การซื้อขาย","trading-assistant.form.symbolHint":"ขณะนี้รองรับเฉพาะคู่การซื้อขายสกุลเงินดิจิทัลเท่านั้น","trading-assistant.form.initialCapital":"จำนวนเงินลงทุน","trading-assistant.form.marketType":"ประเภทตลาด","trading-assistant.form.marketTypeFutures":"สัญญา","trading-assistant.form.marketTypeSpot":"จุดสินค้า","trading-assistant.form.marketTypeHint":"สัญญารองรับการซื้อขายสองทางและเลเวอเรจ ในขณะที่สปอตรองรับเฉพาะตำแหน่งซื้อและเลเวอเรจคงที่ที่ 1x","trading-assistant.form.leverage":"ใช้ประโยชน์หลายอย่าง","trading-assistant.form.leverageHint":"สัญญา: 1-125 ครั้ง, จุด: แก้ไข 1 ครั้ง","trading-assistant.form.spotLeverageFixed":"เลเวอเรจการซื้อขายสปอตคงที่ที่ 1x","trading-assistant.form.spotOnlyLongHint":"การซื้อขายแบบสปอตรองรับเฉพาะตำแหน่งซื้อเท่านั้น","trading-assistant.form.tradeDirection":"ทิศทางการซื้อขาย","trading-assistant.form.tradeDirectionLong":"ยาวเท่านั้น","trading-assistant.form.tradeDirectionShort":"สั้นเท่านั้น","trading-assistant.form.tradeDirectionBoth":"ธุรกรรมสองทาง","trading-assistant.form.timeframe":"ช่วงเวลา","trading-assistant.form.klinePeriod":"ช่วงเวลา K-Line","trading-assistant.form.timeframe1m":"1 นาที","trading-assistant.form.timeframe5m":"5 นาที","trading-assistant.form.timeframe15m":"15 นาที","trading-assistant.form.timeframe30m":"30 นาที","trading-assistant.form.timeframe1H":"1 ชั่วโมง","trading-assistant.form.timeframe4H":"4 ชั่วโมง","trading-assistant.form.timeframe1D":"1 วัน","trading-assistant.form.selectStrategyType":"เลือกประเภทกลยุทธ์","trading-assistant.form.indicatorStrategy":"กลยุทธ์ตัวบ่งชี้","trading-assistant.form.indicatorStrategyDesc":"กลยุทธ์การซื้อขายอัตโนมัติตามตัวบ่งชี้ทางเทคนิค","trading-assistant.form.aiStrategy":"กลยุทธ์ AI","trading-assistant.form.aiStrategyDesc":"กลยุทธ์การซื้อขายอัตโนมัติตามการตัดสินใจอัจฉริยะของ AI","trading-assistant.form.enableAiFilter":"เปิดใช้งานตัวกรองการตัดสินใจอัจฉริยะ AI","trading-assistant.form.enableAiFilterHint":"เมื่อเปิดใช้งาน สัญญาณตัวบ่งชี้จะถูกกรองโดย AI เพื่อปรับปรุงคุณภาพการซื้อขาย","trading-assistant.form.aiFilterPrompt":"ข้อความแจ้งแบบกำหนดเอง","trading-assistant.form.aiFilterPromptHint":"ให้คำแนะนำแบบกำหนดเองสำหรับการกรอง AI เว้นว่างไว้เพื่อใช้ค่าเริ่มต้นของระบบ","trading-assistant.validation.strategyTypeRequired":"กรุณาเลือกประเภทกลยุทธ์","trading-assistant.form.advancedSettings":"การตั้งค่าขั้นสูง","trading-assistant.form.orderMode":"โหมดการสั่งซื้อ","trading-assistant.form.orderModeMaker":"ผู้สร้าง","trading-assistant.form.orderModeTaker":"ราคาตลาด (เทคเกอร์)","trading-assistant.form.orderModeHint":"โหมดคำสั่งซื้อที่รอดำเนินการใช้คำสั่งซื้อแบบจำกัดและค่าธรรมเนียมการจัดการต่ำกว่า โหมดราคาตลาดจะดำเนินการทันทีและค่าธรรมเนียมการจัดการจะสูงขึ้น","trading-assistant.form.makerWaitSec":"เวลารอสำหรับคำสั่งซื้อที่รอดำเนินการ (วินาที)","trading-assistant.form.makerWaitSecHint":"เวลาที่ต้องรอการทำธุรกรรมหลังจากทำการสั่งซื้อ ยกเลิกและลองอีกครั้งหลังจากหมดเวลา","trading-assistant.form.makerRetries":"จำนวนการลองใหม่สำหรับคำสั่งซื้อที่รอดำเนินการ","trading-assistant.form.makerRetriesHint":"จำนวนครั้งสูงสุดในการลองใหม่เมื่อไม่ได้ดำเนินการคำสั่งซื้อที่รอดำเนินการ","trading-assistant.form.fallbackToMarket":"คำสั่งซื้อที่รอดำเนินการล้มเหลวและราคาตลาดถูกลดระดับลง","trading-assistant.form.fallbackToMarketHint":"เมื่อการเปิด/ปิดคำสั่งซื้อที่รอดำเนินการไม่เสร็จสมบูรณ์ ควรดาวน์เกรดเป็นคำสั่งซื้อในตลาดเพื่อให้แน่ใจว่าธุรกรรมจะเสร็จสมบูรณ์หรือไม่","trading-assistant.form.marginMode":"โหมดระยะขอบ","trading-assistant.form.marginModeCross":"โกดังเต็ม","trading-assistant.form.marginModeIsolated":"ตำแหน่งที่โดดเดี่ยว","trading-assistant.form.stopLossPct":"อัตราการสูญเสียหยุด (%)","trading-assistant.form.stopLossPctHint":"ตั้งค่าเปอร์เซ็นต์การหยุดการขาดทุน 0 หมายถึงไม่ได้เปิดใช้งานการหยุดการขาดทุน","trading-assistant.form.takeProfitPct":"อัตราส่วนการทำกำไร (%)","trading-assistant.form.takeProfitPctHint":"ตั้งค่าเปอร์เซ็นต์การทำกำไร 0 หมายถึงปิดการใช้งานการทำกำไร","trading-assistant.form.signalMode":"โหมดสัญญาณ","trading-assistant.form.signalModeConfirmed":"ยืนยันโหมด","trading-assistant.form.signalModeAggressive":"โหมดก้าวร้าว","trading-assistant.form.signalModeHint":"โหมดการยืนยัน: ตรวจสอบเฉพาะเส้น K ที่เสร็จสมบูรณ์เท่านั้น โหมดก้าวร้าว: ตรวจสอบการสร้างเส้น K ด้วย","trading-assistant.form.cancel":"ยกเลิก","trading-assistant.form.prev":"ขั้นตอนก่อนหน้า","trading-assistant.form.next":"ขั้นตอนต่อไป","trading-assistant.form.confirmCreate":"ยืนยันการสร้าง","trading-assistant.form.confirmEdit":"ยืนยันการเปลี่ยนแปลง","trading-assistant.messages.createSuccess":"สร้างกลยุทธ์สำเร็จแล้ว","trading-assistant.messages.createFailed":"ไม่สามารถสร้างนโยบายได้","trading-assistant.messages.updateSuccess":"อัปเดตนโยบายสำเร็จแล้ว","trading-assistant.messages.updateFailed":"อัปเดตนโยบายไม่สำเร็จ","trading-assistant.messages.deleteSuccess":"ลบนโยบายสำเร็จแล้ว","trading-assistant.messages.deleteFailed":"ลบนโยบายล้มเหลว","trading-assistant.messages.startSuccess":"กลยุทธ์เริ่มต้นได้สำเร็จ","trading-assistant.messages.startFailed":"ไม่สามารถเริ่มนโยบายได้","trading-assistant.messages.stopSuccess":"กลยุทธ์หยุดสำเร็จ","trading-assistant.messages.stopFailed":"กลยุทธ์หยุดล้มเหลว","trading-assistant.messages.loadFailed":"ไม่สามารถรับรายการนโยบาย","trading-assistant.messages.runningWarning":"กลยุทธ์กำลังทำงานอยู่ โปรดหยุดกลยุทธ์ก่อนที่จะแก้ไข","trading-assistant.messages.deleteConfirmWithName":'คุณแน่ใจหรือไม่ว่าต้องการลบนโยบาย "{name}" การดำเนินการนี้ไม่สามารถย้อนกลับได้',"trading-assistant.messages.deleteConfirm":"คุณแน่ใจหรือไม่ว่าต้องการลบนโยบายนี้การดำเนินการนี้ไม่สามารถย้อนกลับได้","trading-assistant.messages.loadTradesFailed":"ไม่สามารถรับบันทึกธุรกรรมได้","trading-assistant.messages.loadPositionsFailed":"ไม่สามารถรับบันทึกตำแหน่งได้","trading-assistant.messages.loadEquityFailed":"ไม่สามารถรับเส้นโค้งส่วนของผู้ถือหุ้นได้","trading-assistant.messages.loadIndicatorsFailed":"ไม่สามารถโหลดรายการตัวบ่งชี้ โปรดลองอีกครั้งในภายหลัง","trading-assistant.messages.spotLimitations":"การซื้อขายแบบสปอตได้รับการตั้งค่าโดยอัตโนมัติเป็นระยะยาวเท่านั้น เลเวอเรจ 1 เท่า","trading-assistant.messages.autoFillApiConfig":"การกำหนดค่า API ในอดีตของการแลกเปลี่ยนได้รับการเติมข้อมูลโดยอัตโนมัติ","trading-assistant.placeholders.selectIndicator":"โปรดเลือกตัวบ่งชี้","trading-assistant.placeholders.selectExchange":"กรุณาเลือกการแลกเปลี่ยน","trading-assistant.placeholders.inputApiKey":"กรุณากรอกคีย์ API","trading-assistant.placeholders.inputSecretKey":"กรุณากรอกรหัสลับ","trading-assistant.placeholders.inputPassphrase":"กรุณากรอกรหัสผ่าน","trading-assistant.placeholders.inputStrategyName":"โปรดป้อนชื่อนโยบาย","trading-assistant.placeholders.selectSymbol":"กรุณาเลือกคู่การซื้อขาย","trading-assistant.placeholders.selectTimeframe":"โปรดเลือกช่วงเวลา","trading-assistant.placeholders.selectKlinePeriod":"โปรดเลือกช่วงเวลา K-Line","trading-assistant.placeholders.inputAiFilterPrompt":"กรุณาใส่ข้อความแจ้งแบบกำหนดเอง (ไม่บังคับ)","trading-assistant.validation.indicatorRequired":"โปรดเลือกตัวบ่งชี้","trading-assistant.validation.exchangeRequired":"กรุณาเลือกการแลกเปลี่ยน","trading-assistant.validation.apiKeyRequired":"กรุณากรอกคีย์ API","trading-assistant.validation.secretKeyRequired":"กรุณากรอกรหัสลับ","trading-assistant.validation.passphraseRequired":"กรุณากรอกรหัสผ่าน","trading-assistant.validation.exchangeConfigIncomplete":"กรุณากรอกข้อมูลการกำหนดค่าการแลกเปลี่ยนให้ครบถ้วน","trading-assistant.validation.testConnectionRequired":'กรุณาคลิกปุ่ม "ทดสอบการเชื่อมต่อ" และตรวจสอบให้แน่ใจว่าการเชื่อมต่อสำเร็จ',"trading-assistant.validation.testConnectionFailed":"การทดสอบการเชื่อมต่อล้มเหลว กรุณาตรวจสอบการกำหนดค่าและทดสอบอีกครั้ง","trading-assistant.validation.credentialRequired":"กรุณาเพิ่มและทดสอบข้อมูลประจำตัวของตลาดแลกเปลี่ยนในศูนย์ส่วนตัวก่อน","trading-assistant.validation.strategyNameRequired":"โปรดป้อนชื่อนโยบาย","trading-assistant.validation.symbolRequired":"กรุณาเลือกคู่การซื้อขาย","trading-assistant.validation.initialCapitalRequired":"กรุณากรอกจำนวนเงินลงทุน","trading-assistant.validation.leverageRequired":"กรุณากรอกอัตราส่วนเลเวอเรจ","trading-assistant.table.time":"เวลา","trading-assistant.table.type":"พิมพ์","trading-assistant.table.price":"ราคา","trading-assistant.table.amount":"ปริมาณ","trading-assistant.table.value":"จำนวน","trading-assistant.table.commission":"ค่าธรรมเนียมการจัดการ","trading-assistant.table.symbol":"คู่การซื้อขาย","trading-assistant.table.side":"ทิศทาง","trading-assistant.table.size":"ปริมาณตำแหน่ง","trading-assistant.table.entryPrice":"ราคาเปิด","trading-assistant.table.currentPrice":"ราคาปัจจุบัน","trading-assistant.table.unrealizedPnl":"กำไรหรือขาดทุนที่ยังไม่เกิดขึ้นจริง","trading-assistant.table.pnlPercent":"อัตราส่วนกำไรและขาดทุน","trading-assistant.table.buy":"ซื้อ","trading-assistant.table.sell":"ขาย","trading-assistant.table.long":"ยาวไป","trading-assistant.table.short":"สั้น","trading-assistant.table.noPositions":"ยังไม่มีตำแหน่ง","trading-assistant.detail.title":"รายละเอียดกลยุทธ์","trading-assistant.detail.strategyName":"ชื่อกรมธรรม์","trading-assistant.detail.strategyType":"ประเภทกลยุทธ์","trading-assistant.detail.status":"สถานะ","trading-assistant.detail.tradingMode":"รูปแบบการซื้อขาย","trading-assistant.detail.exchange":"แลกเปลี่ยน","trading-assistant.detail.initialCapital":"ทุนเริ่มต้น","trading-assistant.detail.totalInvestment":"จำนวนเงินลงทุนทั้งหมด","trading-assistant.detail.currentEquity":"มูลค่าสุทธิในปัจจุบัน","trading-assistant.detail.totalPnl":"กำไรและขาดทุนทั้งหมด","trading-assistant.detail.indicatorName":"ชื่อตัวบ่งชี้","trading-assistant.detail.maxLeverage":"เลเวอเรจสูงสุด","trading-assistant.detail.decideInterval":"ช่วงการตัดสินใจ","trading-assistant.detail.symbols":"วัตถุธุรกรรม","trading-assistant.detail.createdAt":"เวลาสร้าง","trading-assistant.detail.updatedAt":"เวลาอัปเดต","trading-assistant.detail.llmConfig":"การกำหนดค่าโมเดล AI","trading-assistant.detail.exchangeConfig":"การกำหนดค่าการแลกเปลี่ยน","trading-assistant.detail.provider":"ผู้ให้บริการ","trading-assistant.detail.modelId":"รหัสรุ่น","trading-assistant.detail.close":"ปิด","trading-assistant.detail.loadFailed":"ไม่สามารถรับรายละเอียดนโยบายได้","trading-assistant.equity.noData":"ยังไม่มีข้อมูลมูลค่าสุทธิ","trading-assistant.equity.equity":"มูลค่าสุทธิ","trading-assistant.exchange.tradingMode":"รูปแบบการซื้อขาย","trading-assistant.exchange.virtual":"การซื้อขายจำลอง","trading-assistant.exchange.live":"การทำธุรกรรมจริง","trading-assistant.exchange.selectExchange":"เลือกการแลกเปลี่ยน","trading-assistant.exchange.walletAddress":"ที่อยู่กระเป๋าเงิน","trading-assistant.exchange.walletAddressPlaceholder":"กรุณากรอกที่อยู่กระเป๋าเงินของคุณ (เริ่มต้นด้วย 0x)","trading-assistant.exchange.privateKey":"รหัสส่วนตัว","trading-assistant.exchange.privateKeyPlaceholder":"กรุณากรอกรหัสส่วนตัว (64 ตัวอักษร)","trading-assistant.exchange.testConnection":"ทดสอบการเชื่อมต่อ","trading-assistant.exchange.connectionSuccess":"การเชื่อมต่อสำเร็จ","trading-assistant.exchange.connectionFailed":"การเชื่อมต่อล้มเหลว","trading-assistant.exchange.testFailed":"การทดสอบการเชื่อมต่อล้มเหลว","trading-assistant.exchange.fillComplete":"กรุณากรอกข้อมูลการกำหนดค่าการแลกเปลี่ยนให้ครบถ้วน","trading-assistant.strategyTypeOptions.ai":"กลยุทธ์ที่ขับเคลื่อนด้วย AI","trading-assistant.strategyTypeOptions.indicator":"กลยุทธ์ตัวบ่งชี้ทางเทคนิค","trading-assistant.strategyTypeOptions.aiDeveloping":"ฟังก์ชันกลยุทธ์ที่ขับเคลื่อนด้วย AI อยู่ระหว่างการพัฒนา ดังนั้นโปรดคอยติดตาม","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"คุณสมบัติกลยุทธ์ที่ขับเคลื่อนด้วย AI กำลังอยู่ในการพัฒนา","trading-assistant.indicatorType.trend":"แนวโน้ม","trading-assistant.indicatorType.momentum":"โมเมนตัม","trading-assistant.indicatorType.volatility":"ความผันผวน","trading-assistant.indicatorType.volume":"ปริมาณ","trading-assistant.indicatorType.custom":"ปรับแต่ง","trading-assistant.exchangeNames":{okx:"โอเคเอ็กซ์",binance:"ไบแนนซ์",hyperliquid:"ไฮเปอร์ลิควิด",blockchaincom:"Blockchain.com",coinbaseexchange:"คอยน์เบส",gate:"Gate.io",mexc:"เม็กซิโก",kraken:"คราเคน",bitfinex:"Bitfinex",bybit:"บายบิต",kucoin:"คูคอยน์",huobi:"หั่วปี้",bitget:"บิทเก็ต",bitmex:"BitMEX",deribit:"อนุมาน",phemex:"ฟีเม็กซ์",bitmart:"บิตมาร์ท",bitstamp:"บิตสแตมป์",bittrex:"บิทเทร็กซ์",poloniex:"โปโลนีกซ์",gemini:"ราศีเมถุน",cryptocom:"Crypto.com",bitflyer:"บิตฟลายเออร์",upbit:"อัพบิต",bithumb:"บิธัมบ์",coinone:"โคโนเน่",zb:"ซีบี",lbank:"แอลแบงค์",bibox:"ไบบ็อกซ์",bigone:"บิ๊กวัน",bitrue:"บิตทรู",coinex:"คอยน์เอ็กซ์",digifinex:"DigiFinex",ftx:"เอฟทีเอ็กซ์",ftxus:"FTX สหรัฐอเมริกา",binanceus:"Binance สหรัฐอเมริกา",binancecoinm:"Binance COIN-M",binanceusdm:"Binance USDⓈ-M",deepcoin:"ดีพคอยน์"},"ai-trading-assistant.title":"ผู้ช่วยการซื้อขาย AI","ai-trading-assistant.strategyList":"รายการกลยุทธ์","ai-trading-assistant.createStrategy":"สร้างนโยบาย","ai-trading-assistant.noStrategy":"ยังไม่มีกลยุทธ์","ai-trading-assistant.selectStrategy":"โปรดเลือกกลยุทธ์จากด้านซ้ายเพื่อดูรายละเอียด","ai-trading-assistant.startStrategy":"กลยุทธ์การเปิดตัว","ai-trading-assistant.stopStrategy":"กลยุทธ์การหยุด","ai-trading-assistant.editStrategy":"กลยุทธ์ด้านบรรณาธิการ","ai-trading-assistant.deleteStrategy":"ลบนโยบาย","ai-trading-assistant.status.running":"วิ่ง","ai-trading-assistant.status.stopped":"หยุดแล้ว","ai-trading-assistant.status.error":"ความผิดพลาด","ai-trading-assistant.tabs.tradingRecords":"ประวัติการทำธุรกรรม","ai-trading-assistant.tabs.positions":"บันทึกตำแหน่ง","ai-trading-assistant.tabs.aiDecisions":"บันทึกการตัดสินใจของ AI","ai-trading-assistant.tabs.equityCurve":"เส้นส่วนของผู้ถือหุ้น","ai-trading-assistant.form.createTitle":"สร้างกลยุทธ์การซื้อขายด้วย AI","ai-trading-assistant.form.editTitle":"แก้ไขกลยุทธ์การซื้อขาย AI","ai-trading-assistant.form.strategyName":"ชื่อกรมธรรม์","ai-trading-assistant.form.modelId":"โมเดลเอไอ","ai-trading-assistant.form.modelIdHint":"ใช้บริการระบบ OpenRouter โดยไม่ต้องกำหนดค่า API Key","ai-trading-assistant.form.decideInterval":"ช่วงการตัดสินใจ","ai-trading-assistant.form.decideInterval5m":"5 นาที","ai-trading-assistant.form.decideInterval10m":"10 นาที","ai-trading-assistant.form.decideInterval30m":"30 นาที","ai-trading-assistant.form.decideInterval1h":"1 ชั่วโมง","ai-trading-assistant.form.decideInterval4h":"4 ชั่วโมง","ai-trading-assistant.form.decideInterval1d":"1 วัน","ai-trading-assistant.form.decideInterval1w":"1 สัปดาห์","ai-trading-assistant.form.decideIntervalHint":"ช่วงเวลาที่ AI ในการตัดสินใจ","ai-trading-assistant.form.runPeriod":"วิ่งรอบ","ai-trading-assistant.form.runPeriodHint":"เวลาเริ่มต้นและเวลาสิ้นสุดของการดำเนินกลยุทธ์","ai-trading-assistant.form.startDate":"วันที่เริ่มต้น","ai-trading-assistant.form.endDate":"วันที่สิ้นสุด","ai-trading-assistant.form.qdtCostTitle":"คำแนะนำการหักเงินของ QDT","ai-trading-assistant.form.qdtCostHint":"การตัดสินใจของ AI แต่ละครั้งจะถูกหักออก {cost} QDT โปรดตรวจสอบให้แน่ใจว่าบัญชีของคุณมียอดคงเหลือ QDT เพียงพอ ในระหว่างการดำเนินการตามกลยุทธ์ค่าธรรมเนียมจะถูกหักแบบเรียลไทม์สำหรับการตัดสินใจแต่ละครั้ง","ai-trading-assistant.form.apiKey":"คีย์ API","ai-trading-assistant.form.exchange":"เลือกการแลกเปลี่ยน","ai-trading-assistant.form.secretKey":"รหัสลับ","ai-trading-assistant.form.passphrase":"ข้อความรหัสผ่าน","ai-trading-assistant.form.testConnection":"ทดสอบการเชื่อมต่อ","ai-trading-assistant.form.symbol":"คู่การซื้อขาย","ai-trading-assistant.form.symbolHint":"เลือกคู่การซื้อขายที่จะซื้อขาย","ai-trading-assistant.form.initialCapital":"จำนวนเงินที่ลงทุน (มาร์จิ้น)","ai-trading-assistant.form.leverage":"ใช้ประโยชน์หลายอย่าง","ai-trading-assistant.form.timeframe":"ช่วงเวลา","ai-trading-assistant.form.timeframe1m":"1 นาที","ai-trading-assistant.form.timeframe5m":"5 นาที","ai-trading-assistant.form.timeframe15m":"15 นาที","ai-trading-assistant.form.timeframe30m":"30 นาที","ai-trading-assistant.form.timeframe1H":"1 ชั่วโมง","ai-trading-assistant.form.timeframe4H":"4 ชั่วโมง","ai-trading-assistant.form.timeframe1D":"1 วัน","ai-trading-assistant.form.marketType":"ประเภทตลาด","ai-trading-assistant.form.marketTypeFutures":"สัญญา","ai-trading-assistant.form.marketTypeSpot":"จุดสินค้า","ai-trading-assistant.form.totalPnl":"กำไรและขาดทุนทั้งหมด","ai-trading-assistant.form.customPrompt":"คำแจ้งที่กำหนดเอง","ai-trading-assistant.form.customPromptHint":"ตัวเลือกเสริม ใช้เพื่อปรับแต่งกลยุทธ์การซื้อขาย AI และตรรกะในการตัดสินใจ","ai-trading-assistant.form.cancel":"ยกเลิก","ai-trading-assistant.form.prev":"ขั้นตอนก่อนหน้า","ai-trading-assistant.form.next":"ขั้นตอนต่อไป","ai-trading-assistant.form.confirmCreate":"ยืนยันการสร้าง","ai-trading-assistant.form.confirmEdit":"ยืนยันการเปลี่ยนแปลง","ai-trading-assistant.messages.createSuccess":"สร้างกลยุทธ์สำเร็จแล้ว","ai-trading-assistant.messages.createFailed":"ไม่สามารถสร้างนโยบายได้","ai-trading-assistant.messages.updateSuccess":"อัปเดตนโยบายสำเร็จแล้ว","ai-trading-assistant.messages.updateFailed":"อัปเดตนโยบายไม่สำเร็จ","ai-trading-assistant.messages.deleteSuccess":"ลบนโยบายสำเร็จแล้ว","ai-trading-assistant.messages.deleteFailed":"ลบนโยบายล้มเหลว","ai-trading-assistant.messages.startSuccess":"กลยุทธ์เริ่มต้นได้สำเร็จ","ai-trading-assistant.messages.startFailed":"ไม่สามารถเริ่มนโยบายได้","ai-trading-assistant.messages.stopSuccess":"กลยุทธ์หยุดสำเร็จ","ai-trading-assistant.messages.stopFailed":"กลยุทธ์หยุดล้มเหลว","ai-trading-assistant.messages.loadFailed":"ไม่สามารถรับรายการนโยบาย","ai-trading-assistant.messages.loadDecisionsFailed":"ไม่สามารถรับบันทึกการตัดสินใจของ AI","ai-trading-assistant.messages.deleteConfirm":"คุณแน่ใจหรือไม่ว่าต้องการลบนโยบายนี้การดำเนินการนี้ไม่สามารถย้อนกลับได้","ai-trading-assistant.placeholders.inputStrategyName":"โปรดป้อนชื่อนโยบาย","ai-trading-assistant.placeholders.selectModelId":"โปรดเลือกโมเดล AI","ai-trading-assistant.placeholders.selectDecideInterval":"โปรดเลือกช่วงการตัดสินใจ","ai-trading-assistant.placeholders.startTime":"เวลาเริ่มต้น","ai-trading-assistant.placeholders.endTime":"เวลาสิ้นสุด","ai-trading-assistant.placeholders.inputApiKey":"กรุณากรอกคีย์ API","ai-trading-assistant.placeholders.selectExchange":"กรุณาเลือกการแลกเปลี่ยน","ai-trading-assistant.placeholders.inputSecretKey":"กรุณากรอกรหัสลับ","ai-trading-assistant.placeholders.inputPassphrase":"กรุณากรอกรหัสผ่าน","ai-trading-assistant.placeholders.selectSymbol":"โปรดเลือกคู่การซื้อขาย เช่น BTC/USDT","ai-trading-assistant.placeholders.selectTimeframe":"โปรดเลือกช่วงเวลา","ai-trading-assistant.placeholders.inputCustomPrompt":"โปรดป้อนคำแจ้งที่กำหนดเอง (ไม่บังคับ)","ai-trading-assistant.validation.strategyNameRequired":"โปรดป้อนชื่อนโยบาย","ai-trading-assistant.validation.modelIdRequired":"โปรดเลือกโมเดล AI","ai-trading-assistant.validation.runPeriodRequired":"กรุณาเลือกรอบการทำงาน","ai-trading-assistant.validation.apiKeyRequired":"กรุณากรอกคีย์ API","ai-trading-assistant.validation.exchangeRequired":"กรุณาเลือกการแลกเปลี่ยน","ai-trading-assistant.validation.secretKeyRequired":"กรุณากรอกรหัสลับ","ai-trading-assistant.validation.symbolRequired":"กรุณาเลือกคู่การซื้อขาย","ai-trading-assistant.validation.initialCapitalRequired":"กรุณากรอกจำนวนเงินลงทุน","ai-trading-assistant.table.time":"เวลา","ai-trading-assistant.table.type":"พิมพ์","ai-trading-assistant.table.price":"ราคา","ai-trading-assistant.table.amount":"ปริมาณ","ai-trading-assistant.table.value":"จำนวน","ai-trading-assistant.table.symbol":"คู่การซื้อขาย","ai-trading-assistant.table.side":"ทิศทาง","ai-trading-assistant.table.size":"ปริมาณตำแหน่ง","ai-trading-assistant.table.entryPrice":"ราคาเปิด","ai-trading-assistant.table.currentPrice":"ราคาปัจจุบัน","ai-trading-assistant.table.unrealizedPnl":"กำไรหรือขาดทุนที่ยังไม่เกิดขึ้นจริง","ai-trading-assistant.table.profit":"กำไรและขาดทุน","ai-trading-assistant.table.openLong":"เปิดยาวๆ","ai-trading-assistant.table.closeLong":"ปินตัว","ai-trading-assistant.table.openShort":"เปิดสั้น","ai-trading-assistant.table.closeShort":"ว่างเปล่า","ai-trading-assistant.table.addLong":"กาดอต","ai-trading-assistant.table.addShort":"เพิ่มสั้น","ai-trading-assistant.table.closeShortProfit":"ขายทำกำไรจากสถานะขาย","ai-trading-assistant.table.closeShortStop":"หยุดการสูญเสีย","ai-trading-assistant.table.closeLongProfit":"หยุดยาวและทำกำไร","ai-trading-assistant.table.closeLongStop":"หยุดการสูญเสีย","ai-trading-assistant.table.buy":"ซื้อ","ai-trading-assistant.table.sell":"ขาย","ai-trading-assistant.table.long":"ยาวไป","ai-trading-assistant.table.short":"สั้น","ai-trading-assistant.table.hold":"ถือ","ai-trading-assistant.table.reasoning":"เหตุผลในการวิเคราะห์","ai-trading-assistant.table.decisions":"การตัดสินใจ","ai-trading-assistant.table.riskAssessment":"การประเมินความเสี่ยง","ai-trading-assistant.table.confidence":"ความมั่นใจ","ai-trading-assistant.table.totalRecords":"รวม {total} บันทึก","ai-trading-assistant.table.noPositions":"ยังไม่มีตำแหน่ง","ai-trading-assistant.detail.title":"รายละเอียดกลยุทธ์","ai-trading-assistant.equity.noData":"ยังไม่มีข้อมูลมูลค่าสุทธิ","ai-trading-assistant.equity.equity":"มูลค่าสุทธิ","ai-trading-assistant.exchange.testFailed":"การทดสอบการเชื่อมต่อล้มเหลว","ai-trading-assistant.exchange.connectionSuccess":"การเชื่อมต่อสำเร็จ","ai-trading-assistant.exchange.connectionFailed":"การเชื่อมต่อล้มเหลว","ai-trading-assistant.form.advancedSettings":"การตั้งค่าขั้นสูง","ai-trading-assistant.form.orderMode":"โหมดการสั่งซื้อ","ai-trading-assistant.form.orderModeMaker":"ผู้สร้าง","ai-trading-assistant.form.orderModeTaker":"ราคาตลาด (เทคเกอร์)","ai-trading-assistant.form.orderModeHint":"โหมดคำสั่งซื้อที่รอดำเนินการใช้คำสั่งซื้อแบบจำกัดและค่าธรรมเนียมการจัดการต่ำกว่า โหมดราคาตลาดจะดำเนินการทันทีและค่าธรรมเนียมการจัดการจะสูงขึ้น","ai-trading-assistant.form.makerWaitSec":"เวลารอสำหรับคำสั่งซื้อที่รอดำเนินการ (วินาที)","ai-trading-assistant.form.makerWaitSecHint":"เวลาที่ต้องรอการทำธุรกรรมหลังจากทำการสั่งซื้อ ยกเลิกและลองอีกครั้งหลังจากหมดเวลา","ai-trading-assistant.form.makerRetries":"จำนวนการลองใหม่สำหรับคำสั่งซื้อที่รอดำเนินการ","ai-trading-assistant.form.makerRetriesHint":"จำนวนครั้งสูงสุดในการลองใหม่เมื่อไม่ได้ดำเนินการคำสั่งซื้อที่รอดำเนินการ","ai-trading-assistant.form.fallbackToMarket":"คำสั่งซื้อที่รอดำเนินการล้มเหลวและราคาตลาดถูกลดระดับลง","ai-trading-assistant.form.fallbackToMarketHint":"เมื่อการเปิด/ปิดคำสั่งซื้อที่รอดำเนินการไม่เสร็จสมบูรณ์ ควรดาวน์เกรดเป็นคำสั่งซื้อในตลาดเพื่อให้แน่ใจว่าธุรกรรมจะเสร็จสมบูรณ์หรือไม่","ai-trading-assistant.form.marginMode":"โหมดระยะขอบ","ai-trading-assistant.form.marginModeCross":"โกดังเต็ม","ai-trading-assistant.form.marginModeIsolated":"ตำแหน่งที่โดดเดี่ยว","ai-analysis.title":"เครื่องมือการซื้อขายควอนตัม","ai-analysis.system.online":"ออนไลน์","ai-analysis.system.agents":"ตัวแทน","ai-analysis.system.active":"คล่องแคล่ว","ai-analysis.system.stage":"เวที","ai-analysis.panel.roster":"รายชื่อตัวแทน","ai-analysis.panel.thinking":"กำลังคิด...","ai-analysis.panel.done":"เสร็จ","ai-analysis.panel.standby":"สแตนด์บาย","ai-analysis.input.title":"เครื่องมือการซื้อขายควอนตัม","ai-analysis.input.placeholder":"เลือกสินทรัพย์เป้าหมาย (เช่น BTC/USDT)","ai-analysis.input.watchlist":"หุ้นทางเลือก","ai-analysis.input.start":"เริ่มการวิเคราะห์","ai-analysis.input.recent":"งานล่าสุด:","ai-analysis.vis.stage":"เวที","ai-analysis.vis.processing":"กำลังประมวลผล","ai-analysis.result.complete":"การวิเคราะห์เสร็จสมบูรณ์","ai-analysis.result.signal":"สัญญาณสุดท้าย","ai-analysis.result.confidence":"ความมั่นใจ:","ai-analysis.result.new":"การวิเคราะห์ใหม่","ai-analysis.result.full":"ดูรายงานฉบับเต็ม","ai-analysis.logs.title":"บันทึกของระบบ","ai-analysis.modal.title":"รายงานที่เป็นความลับ","ai-analysis.modal.fundamental":"การวิเคราะห์พื้นฐาน","ai-analysis.modal.technical":"การวิเคราะห์ทางเทคนิค","ai-analysis.modal.sentiment":"การวิเคราะห์อารมณ์","ai-analysis.modal.risk":"การประเมินความเสี่ยง","ai-analysis.stage.idle":"สแตนด์บาย","ai-analysis.stage.1":"ระยะที่หนึ่ง: การวิเคราะห์หลายมิติ","ai-analysis.stage.2":"ระยะที่สอง: การอภิปรายระยะยาว-ระยะสั้น","ai-analysis.stage.3":"ระยะที่สาม: การวางแผนเชิงกลยุทธ์","ai-analysis.stage.4":"ขั้นตอนที่สี่: การทบทวนการควบคุมความเสี่ยง","ai-analysis.stage.complete":"เสร็จ","ai-analysis.agent.investment_director":"ผู้อำนวยการฝ่ายการลงทุน","ai-analysis.agent.role.investment_director":"การวิเคราะห์ที่ครอบคลุมและข้อสรุปขั้นสุดท้าย","ai-analysis.agent.market":"นักวิเคราะห์ตลาด","ai-analysis.agent.role.market":"เทคโนโลยีและข้อมูลการตลาด","ai-analysis.agent.fundamental":"นักวิเคราะห์พื้นฐาน","ai-analysis.agent.role.fundamental":"การเงินและการประเมินค่า","ai-analysis.agent.technical":"นักวิเคราะห์ทางเทคนิค","ai-analysis.agent.role.technical":"ตัวชี้วัดและแผนภูมิทางเทคนิค","ai-analysis.agent.news":"นักวิเคราะห์ข่าว","ai-analysis.agent.role.news":"ตัวกรองข่าวทั่วโลก","ai-analysis.agent.sentiment":"นักวิเคราะห์ความรู้สึก","ai-analysis.agent.role.sentiment":"สังคมและอารมณ์","ai-analysis.agent.risk":"นักวิเคราะห์ความเสี่ยง","ai-analysis.agent.role.risk":"การตรวจสอบความเสี่ยงเบื้องต้น","ai-analysis.agent.bull":"นักวิจัยรั้น","ai-analysis.agent.role.bull":"การขุดตัวเร่งปฏิกิริยาการเติบโต","ai-analysis.agent.bear":"นักวิจัยขาลง","ai-analysis.agent.role.bear":"การขุดความเสี่ยงและข้อบกพร่อง","ai-analysis.agent.manager":"ผู้จัดการฝ่ายวิจัย","ai-analysis.agent.role.manager":"ผู้ดูแลการอภิปราย","ai-analysis.agent.trader":"พ่อค้า","ai-analysis.agent.role.trader":"นักยุทธศาสตร์บริหาร","ai-analysis.agent.risky":"นักวิเคราะห์กิจกรรม","ai-analysis.agent.role.risky":"กลยุทธ์เชิงรุก","ai-analysis.agent.neutral":"นักวิเคราะห์ความสมดุล","ai-analysis.agent.role.neutral":"กลยุทธ์การสร้างสมดุล","ai-analysis.agent.safe":"นักวิเคราะห์อนุรักษ์นิยม","ai-analysis.agent.role.safe":"กลยุทธ์อนุรักษ์นิยม","ai-analysis.agent.cro":"ผู้จัดการฝ่ายควบคุมความเสี่ยง (CRO)","ai-analysis.agent.role.cro":"อำนาจในการตัดสินใจขั้นสุดท้าย","ai-analysis.script.market":"กำลังดึงข้อมูล OHLCV จากการแลกเปลี่ยนหลัก...","ai-analysis.script.fundamental":"กำลังดึงรายงานทางการเงินรายไตรมาส...","ai-analysis.script.technical":"กำลังวิเคราะห์ตัวชี้วัดทางเทคนิคและรูปแบบกราฟ...","ai-analysis.script.news":"กำลังสแกนข่าวการเงินทั่วโลก...","ai-analysis.script.sentiment":"วิเคราะห์เทรนด์โซเชียลมีเดีย...","ai-analysis.script.risk":"กำลังคำนวณความผันผวนในอดีต...","invite.inviteLink":"ลิงค์คำเชิญ","invite.copy":"คัดลอกลิงก์","invite.copySuccess":"คัดลอกสำเร็จ!","invite.copyFailed":"การคัดลอกล้มเหลว โปรดคัดลอกด้วยตนเอง","invite.noInviteLink":"ไม่ได้สร้างลิงก์คำเชิญ","invite.totalInvites":"คำเชิญสะสม","invite.totalReward":"รางวัลสะสม","invite.rules":"กฎการเชิญชวน","invite.rule1":"ทุกครั้งที่คุณเชิญเพื่อนมาลงทะเบียนสำเร็จ คุณจะได้รับรางวัล","invite.rule2":"หากเพื่อนที่ได้รับเชิญทำธุรกรรมครั้งแรกสำเร็จ คุณจะได้รับรางวัลเพิ่มเติม","invite.rule3":"รางวัลคำเชิญจะถูกส่งไปยังบัญชีของคุณโดยตรง","invite.inviteList":"รายการเชิญ","invite.tasks":"ศูนย์ภารกิจ","invite.inviteeName":"ผู้ได้รับเชิญ","invite.inviteTime":"เวลาเชิญ","invite.status":"สถานะ","invite.reward":"รางวัล","invite.active":"คล่องแคล่ว","invite.inactive":"ไม่ได้เปิดใช้งาน","invite.completed":"สมบูรณ์","invite.claimed":"ได้รับ","invite.pending":"ให้แล้วเสร็จ","invite.goToTask":"เพื่อให้เสร็จสมบูรณ์","invite.claimReward":"รับรางวัล","invite.verify":"การยืนยันเสร็จสมบูรณ์","invite.verifySuccess":"การยืนยันสำเร็จ!งานเสร็จสมบูรณ์","invite.verifyNotCompleted":"งานยังไม่เสร็จสมบูรณ์ กรุณาทำงานให้เสร็จก่อน","invite.verifyFailed":"การยืนยันล้มเหลว โปรดลองอีกครั้งในภายหลัง","invite.claimSuccess":"รับ {reward} QDT สำเร็จแล้ว!","invite.claimFailed":"ไม่สามารถรวบรวมได้ โปรดลองอีกครั้งในภายหลัง","invite.totalRecords":"รวม {total} บันทึก","invite.task.twitter.title":"รีทวีตไปที่ X (Twitter)","invite.task.twitter.desc":"แบ่งปันทวีตอย่างเป็นทางการของเราไปยังบัญชี X (Twitter) ของคุณ","invite.task.youtube.title":"ติดตามช่อง YouTube ของเรา","invite.task.youtube.desc":"สมัครสมาชิกและติดตามช่อง YouTube อย่างเป็นทางการของเรา","invite.task.telegram.title":"เข้าร่วมกลุ่มโทรเลข","invite.task.telegram.desc":"เข้าร่วมกลุ่มชุมชนโทรเลขอย่างเป็นทางการของเรา","invite.task.discord.title":"เข้าร่วมเซิร์ฟเวอร์ Discord","invite.task.discord.desc":"เข้าร่วมเซิร์ฟเวอร์ชุมชน Discord ของเรา",message:"-","layouts.usermenu.dialog.title":"ข้อมูล","layouts.usermenu.dialog.content":"คุณแน่ใจหรือไม่ว่าต้องการออกจากระบบ?","layouts.userLayout.title":"ค้นหาความจริงในความไม่แน่นอน","dashboard.indicator.boundary.message":"Note: The indicator script only computes plots + buy/sell signals. Position sizing, risk, scaling, fees/slippage belong to execution config.","dashboard.indicator.boundary.indicatorRule":"Keep the script to buy/sell only (and set df['buy']/df['sell']). Do NOT implement position management, TP/SL, scaling in the script.","dashboard.indicator.boundary.backtestRule":"Rule: If a bar has a main signal (buy/sell → open/close/reverse), scaling in/out is skipped on the same bar.","dashboard.indicator.guide.title":"Python Indicator & Strategy Development Guide","dashboard.indicator.guide.intro":"This platform supports writing custom technical indicators and trading signals using Python. The system includes built-in pandas and numpy data analysis libraries. You can use standard DataFrame operations to process K-line data and draw charts or mark buy/sell signals.","dashboard.indicator.guide.section1.title":"1. Runtime Environment & Predefined Variables","dashboard.indicator.guide.section1.env":"Your code runs in a browser-based Python environment (Pyodide).","dashboard.indicator.guide.section1.libs":"Pre-installed Libraries","dashboard.indicator.guide.section1.libsDesc":"The following libraries are imported by default, no need to import again:","dashboard.indicator.guide.section1.libsList":"pandas (pd), numpy (np), math, json","dashboard.indicator.guide.section1.data":"Input Data: df","dashboard.indicator.guide.section1.dataDesc":"The system automatically converts current K-line data into a Pandas DataFrame object, variable name is df.","dashboard.indicator.guide.section1.dataColumns":"df contains the following columns (all float type):","dashboard.indicator.guide.section1.dataColumnsList":"time (timestamp, seconds), open, high, low, close, volume","dashboard.indicator.guide.section1.dataNote":"Data index is arranged from old to new (0 is the earliest data, last row is the latest data).","dashboard.indicator.guide.section1.dataIndex":"Important: df index is timestamp (DatetimeIndex), please preserve the index, avoid using .values which loses the index.","dashboard.indicator.guide.section2.title":"2. Parameter Definition","dashboard.indicator.guide.section2.desc":"You can define variables as parameters at the beginning of your code. The system will try to parse statements like variable = value as adjustable parameters.","dashboard.indicator.guide.section2.example":"Parameter Example","dashboard.indicator.guide.section2.exampleCode":"span = 20 or multiplier = 2.0","dashboard.indicator.guide.section3.title":"3. Backtest Signal Setup (Important!)","dashboard.indicator.guide.section3.desc":"If you want your indicator to support backtesting, you must set the following two columns in your code:","dashboard.indicator.guide.section3.backtestRequired":"Required for Backtesting:","dashboard.indicator.guide.section3.backtestBuySignal":"df['buy_signal'] - Boolean Series, True indicates buy signal","dashboard.indicator.guide.section3.backtestSellSignal":"df['sell_signal'] - Boolean Series, True indicates sell signal","dashboard.indicator.guide.section3.backtestExample":"Example:","dashboard.indicator.guide.section3.backtestExampleCode":"df['buy_signal'] = condition_buy
df['sell_signal'] = condition_sell","dashboard.indicator.guide.section3.backtestNote":"Note: Even if you only set output.signals for chart display, you must set these two columns to enable backtesting.","dashboard.indicator.guide.section4.title":"4. Output Requirements: output","dashboard.indicator.guide.section4.desc":"At the end of code execution, you must define a dictionary named output to tell the chart how to display results.","dashboard.indicator.guide.section4.fields":"The output dictionary contains the following fields:","dashboard.indicator.guide.section4.plots":"plots - For drawing lines (e.g., moving averages, RSI)","dashboard.indicator.guide.section4.signals":"signals - For marking buy/sell signals (e.g., arrows, labels)","dashboard.indicator.guide.section4.name":"name - Indicator name (optional)","dashboard.indicator.guide.section4.calculatedVars":"calculatedVars - Calculated variables (optional, for displaying additional information)","dashboard.indicator.guide.section5.title":"5. Plot Configuration (Plots)","dashboard.indicator.guide.section5.desc":"Each object in the plots list represents a line.","dashboard.indicator.guide.section5.table.field":"Field","dashboard.indicator.guide.section5.table.type":"Type","dashboard.indicator.guide.section5.table.required":"Required","dashboard.indicator.guide.section5.table.requiredYes":"Yes","dashboard.indicator.guide.section5.table.requiredNo":"No","dashboard.indicator.guide.section5.table.desc":"Description","dashboard.indicator.guide.section5.table.name":"The name of the indicator line, displayed in the legend","dashboard.indicator.guide.section5.table.data":"Data list, length must match the number of rows in df. Recommended to use series.tolist()","dashboard.indicator.guide.section5.table.color":"Line color (Hex format, e.g. '#ff0000'). If not filled, the system will automatically assign","dashboard.indicator.guide.section5.table.typeDesc":"Chart type, default is 'line'","dashboard.indicator.guide.section5.table.overlay":"Important. True means display on main chart (with K-line), False means display on sub-chart (independent area)","dashboard.indicator.guide.section5.example":"Example: Draw Simple Moving Average (SMA)","dashboard.indicator.guide.section5.exampleCalc":"Calculate SMA","dashboard.indicator.guide.section5.exampleOutput":"Construct Output","dashboard.indicator.guide.section5.exampleOverlay":"Display on main chart","dashboard.indicator.guide.section6.title":"6. Signal Markers (Signals)","dashboard.indicator.guide.section6.desc":"signals are used to mark buy/sell points on specific K-lines through icons or text. Note: This is only for chart display. The backtest system uses df['buy_signal'] and df['sell_signal'].","dashboard.indicator.guide.section6.table.type":"Signal type: 'buy' (buy, marked below K-line) or 'sell' (sell, marked above K-line)","dashboard.indicator.guide.section6.table.data":"Signal data list. Fill price value at signal positions, fill None (or np.nan) at non-signal positions","dashboard.indicator.guide.section6.table.text":'Text displayed on the label (e.g. "B", "S", "Buy", "Sell")',"dashboard.indicator.guide.section6.table.color":"Marker color","dashboard.indicator.guide.section6.hint":"The system automatically handles positioning.","dashboard.indicator.guide.section6.buy":"Markers will be automatically positioned below the Low of the current K-line","dashboard.indicator.guide.section6.sell":"Markers will be automatically positioned above the High of the current K-line","dashboard.indicator.guide.section6.example":"Example: Draw Buy/Sell Signals","dashboard.indicator.guide.section6.exampleInit":"Initialize signal list, fill all with None","dashboard.indicator.guide.section6.exampleLogic":"Simple logic: mark buy when close price is greater than open price","dashboard.indicator.guide.section6.exampleNote":"In actual logic, please use loops or vectorized operations","dashboard.indicator.guide.section6.examplePrice":"Record price","dashboard.indicator.guide.section6.exampleText":"Buy","dashboard.indicator.guide.section7.title":"7. Complete Code Examples","dashboard.indicator.guide.section7.exampleA":"Example A: Dual EMA Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleACode":'# 1. Calculate indicators
df[\'ema_fast\'] = df[\'close\'].ewm(span=5, adjust=False).mean()
df[\'ema_slow\'] = df[\'close\'].ewm(span=13, adjust=False).mean()

# 2. Calculate crossover signals
cross_up = (df[\'ema_fast\'] > df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) <= df[\'ema_slow\'].shift(1))
cross_down = (df[\'ema_fast\'] < df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) >= df[\'ema_slow\'].shift(1))

# 3. 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = cross_up
df[\'close_long\'] = cross_down
df[\'open_short\'] = cross_down
df[\'close_short\'] = cross_up

# 4. Generate signal data for chart display
buy_signals = [df[\'low\'].iloc[i] * 0.995 if cross_up.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if cross_down.iloc[i] else None for i in range(len(df))]

# 5. Build output
output = {
"name": "Dual EMA Strategy",
"plots": [
{"name": "EMA 5", "data": df[\'ema_fast\'].tolist(), "color": "#FF6B6B", "overlay": True},
{"name": "EMA 13", "data": df[\'ema_slow\'].tolist(), "color": "#4ECDC4", "overlay": True}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section7.exampleB":"Example B: Bollinger Bands - Chart Display Only","dashboard.indicator.guide.section7.exampleBCode":'# Calculate Bollinger Bands (chart display only, no backtesting)
length = 20
mult = 2.0
df[\'sma\'] = df[\'close\'].rolling(length).mean()
df[\'std\'] = df[\'close\'].rolling(length).std()
df[\'upper\'] = df[\'sma\'] + mult * df[\'std\']
df[\'lower\'] = df[\'sma\'] - mult * df[\'std\']

output = {
"name": "Bollinger Bands",
"plots": [
{"name": "Upper", "data": df[\'upper\'].tolist(), "color": "#FF5252", "overlay": True},
{"name": "Middle", "data": df[\'sma\'].tolist(), "color": "#2196F3", "overlay": True},
{"name": "Lower", "data": df[\'lower\'].tolist(), "color": "#00E676", "overlay": True}
]
}',"dashboard.indicator.guide.section7.exampleC":"Example C: RSI Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleCCode":'# Calculate RSI
delta = df[\'close\'].diff()
up = delta.clip(lower=0)
down = -1 * delta.clip(upper=0)
ema_up = up.ewm(com=13, adjust=False).mean()
ema_down = down.ewm(com=13, adjust=False).mean()
rs = ema_up / ema_down
df[\'rsi\'] = 100 - (100 / (1 + rs))

# Generate trading signals
buy_condition = df[\'rsi\'] < 30 # Oversold buy
sell_condition = df[\'rsi\'] > 70 # Overbought sell

# 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = buy_condition
df[\'close_long\'] = sell_condition
df[\'open_short\'] = sell_condition
df[\'close_short\'] = buy_condition

# Generate chart signals
buy_signals = [df[\'low\'].iloc[i] * 0.995 if buy_condition.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if sell_condition.iloc[i] else None for i in range(len(df))]

output = {
"name": "RSI Strategy",
"plots": [
{"name": "RSI", "data": df[\'rsi\'].tolist(), "color": "#9C27B0", "overlay": False},
{"name": "Overbought", "data": [70] * len(df), "color": "#FF5252", "style": "dashed", "overlay": False},
{"name": "Oversold", "data": [30] * len(df), "color": "#00E676", "style": "dashed", "overlay": False}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section6.param":"Parameters","dashboard.indicator.guide.section6.calc":"Calculate","dashboard.indicator.guide.section6.output":"Output","dashboard.indicator.guide.section6.generate":"Generate signal data (initialize with None)","dashboard.indicator.guide.section6.subchart":"Display on sub-chart","dashboard.indicator.guide.section8.title":"8. Frequently Asked Questions (FAQ)","dashboard.indicator.guide.section8.q1":"Q: Why can't my indicator be backtested?","dashboard.indicator.guide.section8.a1":"A: The backtest system requires NEW signal columns: df['open_long'], df['close_long'], df['open_short'], df['close_short'] (boolean). Even if you set output.signals for chart display, you must set these columns to enable backtesting.","dashboard.indicator.guide.section8.q2":"Q: Data length mismatch?","dashboard.indicator.guide.section8.a2":"A: The data list in plots and signals must have exactly the same length as the K-line data. If you use df['xxx'].tolist(), there is usually no problem.","dashboard.indicator.guide.section8.q3":"Q: How to handle NaN (empty values)?","dashboard.indicator.guide.section8.a3":"A: Pandas calculations (such as rolling mean) will produce NaN at the beginning. The system will automatically convert NaN to null for chart rendering. You don't need to manually clean it, but if you need specific logic, you can use df.fillna(0) or other methods.","dashboard.indicator.guide.section8.q4":"Q: Index mismatch causing all signals to be NaN?","dashboard.indicator.guide.section8.a4":"A: Please ensure you preserve the original df index (timestamp). Avoid using .values to create new Series. Use columns directly like df['close'] for operations.","dashboard.indicator.guide.section8.q5":"Q: Can I use third-party network libraries?","dashboard.indicator.guide.section8.a5":"A: No. The runtime environment is a browser sandbox and cannot use libraries like requests to request external APIs, nor can it install additional pip packages. Limited to built-in libraries such as pandas, numpy, math, json.","dashboard.indicator.guide.section8.q6":"Q: How to debug code?","dashboard.indicator.guide.section8.a6":"A: If the chart does not display indicators, it is usually because the Python code has an error. Please check for syntax errors or array index out of bounds. It is recommended to debug the algorithm logic in a local Python environment first, then copy it in.","dashboard.indicator.guide.section8.q7":"Q: Backtest shows 0 signals?","dashboard.indicator.guide.section8.a7":"A: Please check the data type of df['open_long']/df['close_long']/df['open_short']/df['close_short']. They should be boolean (True/False), not numeric. Use condition.fillna(False).astype(bool) to ensure correct type.","dashboard.indicator.backtest.commissionHint":"Charged on notional value (incl. leverage) per trade; both entry & exit are deducted from balance.","dashboard.indicator.backtest.historyTitle":"Backtest History","dashboard.indicator.backtest.historyRefresh":"Refresh","dashboard.indicator.backtest.historyView":"View","dashboard.indicator.backtest.historyNoData":"No backtest history","dashboard.indicator.backtest.historyUseCurrent":"Only current symbol/timeframe","dashboard.indicator.backtest.historyFilterSymbol":"Symbol","dashboard.indicator.backtest.historyFilterTimeframe":"Timeframe","dashboard.indicator.backtest.historyApply":"Apply filters","dashboard.indicator.backtest.historyAIAnalyze":"AI Analyze","dashboard.indicator.backtest.historyAIAnalyzeTitle":"AI Suggestions","dashboard.indicator.backtest.historyNoAIResult":"No AI analysis result","dashboard.indicator.backtest.historyRunId":"Run ID","dashboard.indicator.backtest.historyCreatedAt":"Time","dashboard.indicator.backtest.historyRange":"Range","dashboard.indicator.backtest.historyStatus":"Status","dashboard.indicator.backtest.historyStatusSuccess":"Success","dashboard.indicator.backtest.historyStatusFailed":"Failed","dashboard.indicator.backtest.historyActions":"Actions","trading-assistant.exchange.ipWhitelistTip":"Please add the following IPs to the whitelist in your exchange API settings:","signal-robot.title":"Signal Robot Console","signal-robot.createBot":"Create New Bot","signal-robot.search.nameOrSymbol":"Name/Symbol","signal-robot.search.placeholder":"Search bot name or symbol","signal-robot.search.status":"Status","signal-robot.search.statusAll":"All","signal-robot.search.statusRunning":"Running","signal-robot.search.statusPaused":"Paused","signal-robot.search.query":"Query","signal-robot.search.reset":"Reset","signal-robot.table.botName":"Bot Name","signal-robot.table.symbolTimeframe":"Symbol/Timeframe","signal-robot.table.triggerStrategy":"Trigger Strategy","signal-robot.table.notificationChannels":"Notification Channels","signal-robot.table.status":"Status","signal-robot.table.action":"Action","signal-robot.table.triggerConditions":"{count} trigger conditions","signal-robot.table.monitoring":"Monitoring","signal-robot.table.paused":"Paused","signal-robot.table.edit":"Edit","signal-robot.table.pause":"Pause","signal-robot.table.start":"Start","signal-robot.table.delete":"Delete","signal-robot.table.deleteConfirm":"Are you sure you want to delete this bot?","signal-robot.table.deleteSuccess":"Deleted successfully","signal-robot.table.startSuccess":"Bot started","signal-robot.table.pauseSuccess":"Bot paused","signal-robot.channel.telegram":"Telegram","signal-robot.channel.discord":"Discord","signal-robot.channel.email":"Email","signal-robot.channel.webhook":"Webhook","signal-robot.channel.browser":"Browser Push","signal-robot.modal.createTitle":"Create New Signal Robot","signal-robot.modal.editTitle":"Edit Signal Robot","signal-robot.modal.step.basic":"Basic Settings","signal-robot.modal.step.entry":"Entry Strategy","signal-robot.modal.step.position":"Position Management","signal-robot.modal.step.risk":"Risk Control","signal-robot.modal.step.notify":"Notification Config","signal-robot.modal.prev":"Previous","signal-robot.modal.next":"Next","signal-robot.modal.preview":"Preview Backtest","signal-robot.modal.complete":"Complete & Run","signal-robot.modal.saveSuccess":"Saved successfully","signal-robot.modal.previewDeveloping":"Preview feature is under development...","signal-robot.modal.basicInfoRequired":"Please complete basic information","signal-robot.basic.alert":"Set basic information for the bot","signal-robot.basic.title":"Basic Information","signal-robot.basic.botName":"Bot Name","signal-robot.basic.botNamePlaceholder":"e.g.: BTC SuperTrend Strategy","signal-robot.basic.symbol":"Trading Pair","signal-robot.basic.symbolPlaceholder":"Select from watchlist","signal-robot.basic.noWatchlist":"No watchlist items, please add in market page first","signal-robot.basic.timeframe":"K-Line Period","signal-robot.basic.timeframe15m":"15 Minutes","signal-robot.basic.timeframe30m":"30 Minutes","signal-robot.basic.timeframe1h":"1 Hour","signal-robot.basic.timeframe4h":"4 Hours","signal-robot.basic.timeframe1d":"1 Day","signal-robot.basic.autoNameSuggestion":"{symbol} Signal Robot","signal-robot.entry.alert":"Trigger entry signal when all conditions below are met","signal-robot.entry.condition":"Condition {index}","signal-robot.entry.indicator":"Indicator","signal-robot.entry.indicatorSupertrend":"SuperTrend","signal-robot.entry.indicatorEma":"EMA (Exponential Moving Average)","signal-robot.entry.indicatorRsi":"RSI (Relative Strength Index)","signal-robot.entry.indicatorMacd":"MACD","signal-robot.entry.indicatorBollinger":"Bollinger Bands","signal-robot.entry.atrPeriod":"ATR Period","signal-robot.entry.multiplier":"Multiplier","signal-robot.entry.triggerSignal":"Trigger Signal","signal-robot.entry.signalTrendBullish":"Trend Bullish","signal-robot.entry.signalTrendBearish":"Trend Bearish","signal-robot.entry.signalIsUptrend":"Is Uptrend","signal-robot.entry.signalIsDowntrend":"Is Downtrend","signal-robot.entry.period":"Period","signal-robot.entry.compareCondition":"Compare Condition","signal-robot.entry.priceAbove":"Price > EMA (Price Above)","signal-robot.entry.priceBelow":"Price < EMA (Price Below)","signal-robot.entry.crossUp":"Price Crosses Above EMA (Golden Cross)","signal-robot.entry.crossDown":"Price Crosses Below EMA (Death Cross)","signal-robot.entry.compare":"Compare","signal-robot.entry.greaterThan":"Greater Than","signal-robot.entry.lessThan":"Less Than","signal-robot.entry.crossUpShort":"Cross Up","signal-robot.entry.crossDownShort":"Cross Down","signal-robot.entry.threshold":"Threshold","signal-robot.entry.selectIndicator":"Please select an indicator to configure parameters","signal-robot.entry.addCondition":"Add Condition","signal-robot.position.alert":"Configure initial position size, leverage and pyramiding rules","signal-robot.position.basicTitle":"Basic Position Management","signal-robot.position.initialSize":"Initial Size (Capital %)","signal-robot.position.initialSizeHint":"Recommended 5% - 20%","signal-robot.position.leverage":"Leverage","signal-robot.position.leverageHint":"Please ensure your exchange account supports this leverage","signal-robot.position.maxPyramiding":"Max Pyramiding Times","signal-robot.position.maxPyramidingHint":"0 means no pyramiding","signal-robot.position.pyramidingTitle":"Pyramiding Rules","signal-robot.position.pyramidingEnabled":"Enabled","signal-robot.position.pyramidingDisabled":"Disabled","signal-robot.position.pyramidingCondition":"Pyramiding Trigger Condition","signal-robot.position.priceRisePct":"Price Rises (Long) / Falls (Short)","signal-robot.position.profitPct":"Profit Reaches","signal-robot.position.triggerThreshold":"Trigger Threshold (%)","signal-robot.position.triggerThresholdHint":"e.g. 3%: add position once every 3% rise","signal-robot.position.addSize":"Single Add Size (Capital %)","signal-robot.position.pyramidingDisabledHint":"Pyramiding disabled, only initial position will be executed","signal-robot.risk.alert":"Configure take profit, stop loss and exit rules","signal-robot.risk.stopLossTitle":"Stop Loss","signal-robot.risk.stopLossEnabled":"Enabled","signal-robot.risk.stopLossDisabled":"Disabled","signal-robot.risk.stopLossType":"Stop Loss Type","signal-robot.risk.stopLossFixedPct":"Fixed Percentage","signal-robot.risk.stopLossAtrMultiplier":"ATR Multiplier","signal-robot.risk.stopLossValue":"Value","signal-robot.risk.stopLossFixedHint":"e.g. 2%: stop loss when loss reaches 2%","signal-robot.risk.stopLossAtrHint":"e.g. 2.0: stop loss when price touches ATR*2.0","signal-robot.risk.stopLossDisabledHint":"Stop loss disabled (high risk)","signal-robot.risk.trailingStopTitle":"Trailing Stop","signal-robot.risk.activationProfit":"Activation Profit (%)","signal-robot.risk.activationProfitHint":"Start trailing when profit reaches this level","signal-robot.risk.callbackPct":"Callback (%)","signal-robot.risk.callbackPctHint":"Trigger take profit when price falls from peak by this percentage","signal-robot.risk.trailingStopDisabledHint":"Trailing stop disabled","signal-robot.risk.otherExitTitle":"Other Exit Rules","signal-robot.risk.signalExit":"Allow Signal Exit","signal-robot.risk.signalExitHint":"Close position immediately when reverse signal appears (e.g. close long when short signal appears)","signal-robot.notify.alert":"Configure notification methods when signal is triggered","signal-robot.notify.channelTitle":"Notification Channels","signal-robot.notify.discordWebhook":"Discord Webhook","signal-robot.notify.genericWebhook":"Generic Webhook","signal-robot.notify.webhookUrl":"Webhook URL","signal-robot.notify.webhookUrlPlaceholder":"https://example.com/webhook","signal-robot.notify.discordUrl":"Discord URL","signal-robot.notify.discordUrlPlaceholder":"https://discord.com/api/webhooks/...","signal-robot.operator.greaterThan":"Greater Than","signal-robot.operator.lessThan":"Less Than","signal-robot.operator.equal":"Equal","signal-robot.operator.goldenCross":"Golden Cross","signal-robot.operator.deathCross":"Death Cross","signal-robot.operator.increaseBy":"Increase By","signal-robot.operator.decreaseBy":"Decrease By","signal-robot.indicator.price":"Price","signal-robot.indicator.rsi":"RSI","signal-robot.indicator.kdjK":"KDJ(K)","signal-robot.indicator.kdjJ":"KDJ(J)","signal-robot.indicator.macd":"MACD","signal-robot.indicator.macdHist":"MACD Histogram","signal-robot.indicator.bollingerUp":"Bollinger Upper","signal-robot.indicator.bollingerLow":"Bollinger Lower","signal-robot.indicator.volume":"Volume","signal-robot.indicator.changePct1h":"1H Change %","signal-robot.indicator.changePct24h":"24H Change %","signal-robot.indicator.signalLine":"Signal Line","settings.group.agent_memory":"หน่วยความจำ/การสะท้อน","settings.group.reflection_worker":"ตัวทำงานตรวจสอบการสะท้อนอัตโนมัติ","settings.field.ENABLE_AGENT_MEMORY":"เปิดใช้หน่วยความจำเอเจนต์","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"เปิดใช้การค้นหาเวกเตอร์ (ในเครื่อง)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"มิติ Embedding","settings.field.AGENT_MEMORY_TOP_K":"จำนวนดึงข้อมูล Top-K","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"ขนาดหน้าต่างผู้สมัคร","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"ครึ่งชีวิตการลดทอนตามเวลา (วัน)","settings.field.AGENT_MEMORY_W_SIM":"ค่าน้ำหนักความคล้าย","settings.field.AGENT_MEMORY_W_RECENCY":"ค่าน้ำหนักเวลา","settings.field.AGENT_MEMORY_W_RETURNS":"ค่าน้ำหนักผลตอบแทน","settings.field.ENABLE_REFLECTION_WORKER":"เปิดใช้การตรวจสอบอัตโนมัติ","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"ช่วงเวลาตรวจสอบ (วินาที)","profile.notifications.title":"การตั้งค่าการแจ้งเตือน","profile.notifications.hint":"กำหนดค่าวิธีการแจ้งเตือนเริ่มต้น จะถูกใช้โดยอัตโนมัติเมื่อสร้างการติดตามสินทรัพย์และการแจ้งเตือน","profile.notifications.defaultChannels":"ช่องทางแจ้งเตือนเริ่มต้น","profile.notifications.browser":"การแจ้งเตือนในแอป","profile.notifications.email":"อีเมล","profile.notifications.phone":"SMS","profile.notifications.telegramBotToken":"Telegram Bot Token","profile.notifications.telegramBotTokenPlaceholder":"กรอก Telegram Bot Token ของคุณ","profile.notifications.telegramBotTokenHint":"สร้างบอทผ่าน @BotFather เพื่อรับ Token","profile.notifications.telegramChatId":"Telegram Chat ID","profile.notifications.telegramPlaceholder":"กรอก Telegram Chat ID ของคุณ (เช่น 123456789)","profile.notifications.telegramHint":"ส่ง /start ไปที่ @userinfobot เพื่อรับ Chat ID","profile.notifications.notifyEmail":"อีเมลแจ้งเตือน","profile.notifications.emailPlaceholder":"ที่อยู่อีเมลสำหรับรับการแจ้งเตือน","profile.notifications.emailHint":"ใช้อีเมลบัญชีเป็นค่าเริ่มต้น สามารถตั้งค่าอีเมลอื่นได้","profile.notifications.phonePlaceholder":"กรอกหมายเลขโทรศัพท์ (เช่น +66812345678)","profile.notifications.phoneHint":"ผู้ดูแลระบบต้องกำหนดค่าบริการ Twilio","profile.notifications.discordWebhook":"Discord Webhook","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"สร้าง Webhook ในการตั้งค่าเซิร์ฟเวอร์ Discord","profile.notifications.webhookUrl":"Webhook URL","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"URL Webhook แบบกำหนดเอง ส่งการแจ้งเตือนผ่าน POST JSON","profile.notifications.webhookToken":"Webhook Token (ไม่บังคับ)","profile.notifications.webhookTokenPlaceholder":"Bearer Token สำหรับยืนยันตัวตนคำขอ","profile.notifications.webhookTokenHint":"ส่งเป็น Authorization: Bearer Token ไปยัง Webhook","profile.notifications.testBtn":"ส่งการแจ้งเตือนทดสอบ","profile.notifications.saveSuccess":"บันทึกการตั้งค่าการแจ้งเตือนสำเร็จ","profile.notifications.selectChannel":"กรุณาเลือกอย่างน้อยหนึ่งช่องทางแจ้งเตือน","profile.notifications.fillTelegramToken":"กรุณากรอก Telegram Bot Token","profile.notifications.fillTelegram":"กรุณากรอก Telegram Chat ID","profile.notifications.fillEmail":"กรุณากรอกอีเมลแจ้งเตือน","profile.notifications.testSent":"ส่งการแจ้งเตือนทดสอบแล้ว กรุณาตรวจสอบช่องทางแจ้งเตือนของคุณ"},f=(0,e.A)((0,e.A)({},p),y)}}]); \ No newline at end of file +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[301],{11422:function(a,t,i){i.d(t,{default:function(){return f}});var e=i(76338),s={items_per_page:"/ หน้า",jump_to:"ไปยัง",jump_to_confirm:"ยืนยัน",page:"",prev_page:"หน้าก่อนหน้า",next_page:"หน้าถัดไป",prev_5:"ย้อนกลับ 5 หน้า",next_5:"ถัดไป 5 หน้า",prev_3:"ย้อนกลับ 3 หน้า",next_3:"ถัดไป 3 หน้า"},o=i(85505),r={today:"วันนี้",now:"ตอนนี้",backToToday:"กลับไปยังวันนี้",ok:"ตกลง",clear:"ลบล้าง",month:"เดือน",year:"ปี",timeSelect:"เลือกเวลา",dateSelect:"เลือกวัน",monthSelect:"เลือกเดือน",yearSelect:"เลือกปี",decadeSelect:"เลือกทศวรรษ",yearFormat:"YYYY",dateFormat:"D/M/YYYY",dayFormat:"D",dateTimeFormat:"D/M/YYYY HH:mm:ss",monthBeforeYear:!0,previousMonth:"เดือนก่อนหน้า (PageUp)",nextMonth:"เดือนถัดไป (PageDown)",previousYear:"ปีก่อนหน้า (Control + left)",nextYear:"ปีถัดไป (Control + right)",previousDecade:"ทศวรรษก่อนหน้า",nextDecade:"ทศวรรษถัดไป",previousCentury:"ศตวรรษก่อนหน้า",nextCentury:"ศตวรรษถัดไป"},n={placeholder:"เลือกเวลา"},d=n,l={lang:(0,o.A)({placeholder:"เลือกวันที่",rangePlaceholder:["วันเริ่มต้น","วันสิ้นสุด"]},r),timePickerLocale:(0,o.A)({},d)},c=l,g=c,b={locale:"th",Pagination:s,DatePicker:c,TimePicker:d,Calendar:g,global:{placeholder:"กรุณาเลือก"},Table:{filterTitle:"ตัวกรอง",filterConfirm:"ยืนยัน",filterReset:"รีเซ็ต",selectAll:"เลือกทั้งหมดในหน้านี้",selectInvert:"เลือกสถานะตรงกันข้าม",sortTitle:"เรียง",expand:"แสดงแถวข้อมูล",collapse:"ย่อแถวข้อมูล"},Modal:{okText:"ตกลง",cancelText:"ยกเลิก",justOkText:"ตกลง"},Popconfirm:{okText:"ตกลง",cancelText:"ยกเลิก"},Transfer:{titles:["",""],searchPlaceholder:"ค้นหา",itemUnit:"ชิ้น",itemsUnit:"ชิ้น"},Upload:{uploading:"กำลังอัปโหลด...",removeFile:"ลบไฟล์",uploadError:"เกิดข้อผิดพลาดในการอัปโหลด",previewFile:"ดูตัวอย่างไฟล์",downloadFile:"ดาวน์โหลดไฟล์"},Empty:{description:"ไม่มีข้อมูล"},Icon:{icon:"ไอคอน"},Text:{edit:"แก้ไข",copy:"คัดลอก",copied:"คัดลอกแล้ว",expand:"ขยาย"},PageHeader:{back:"ย้อนกลับ"}},m=b,h=i(55802),u=i.n(h),p={antLocale:m,momentName:"th",momentLocale:u()},y={submit:"ส่ง",save:"บันทึก","submit.ok":"ส่งสำเร็จ","save.ok":"บันทึกเรียบร้อยแล้ว","menu.welcome":"ยินดีต้อนรับ","menu.home":"หน้าแรก","menu.dashboard":"แดชบอร์ด","menu.dashboard.indicator":"การวิเคราะห์ตัวบ่งชี้","menu.dashboard.community":"ชุมชนตัวบ่งชี้","menu.dashboard.analysis":"การวิเคราะห์เอไอ","menu.dashboard.tradingAssistant":"ผู้ช่วยการซื้อขาย","menu.dashboard.aiTradingAssistant":"ผู้ช่วยการซื้อขาย AI","menu.dashboard.signalRobot":"หุ่นยนต์สัญญาณ","menu.dashboard.monitor":"หน้าติดตาม","menu.dashboard.workplace":"โต๊ะทำงาน","menu.form":"หน้าแบบฟอร์ม","menu.form.basic-form":"แบบฟอร์มพื้นฐาน","menu.form.step-form":"แบบฟอร์มทีละขั้นตอน","menu.form.step-form.info":"แบบฟอร์มทีละขั้นตอน (กรอกข้อมูลการโอน)","menu.form.step-form.confirm":"แบบฟอร์มทีละขั้นตอน (ยืนยันข้อมูลการโอน)","menu.form.step-form.result":"แบบฟอร์มทีละขั้นตอน (สมบูรณ์)","menu.form.advanced-form":"แบบฟอร์มขั้นสูง","menu.list":"หน้ารายการ","menu.list.table-list":"แบบฟอร์มสอบถาม","menu.list.basic-list":"รายการมาตรฐาน","menu.list.card-list":"รายการการ์ด","menu.list.search-list":"รายการค้นหา","menu.list.search-list.articles":"รายการค้นหา (บทความ)","menu.list.search-list.projects":"รายการค้นหา (โครงการ)","menu.list.search-list.applications":"รายการค้นหา (แอป)","menu.profile":"หน้ารายละเอียด","menu.profile.basic":"หน้ารายละเอียดเบื้องต้น","menu.profile.advanced":"หน้ารายละเอียดขั้นสูง","menu.result":"หน้าผลลัพธ์","menu.result.success":"หน้าความสำเร็จ","menu.result.fail":"หน้าความล้มเหลว","menu.exception":"หน้าข้อยกเว้น","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"ข้อผิดพลาดของทริกเกอร์","menu.account":"หน้าส่วนตัว","menu.account.center":"ศูนย์ส่วนบุคคล","menu.account.settings":"การตั้งค่าส่วนบุคคล","menu.account.trigger":"ข้อผิดพลาดของทริกเกอร์","menu.account.logout":"ออกจากระบบ","menu.wallet":"กระเป๋าเงินของฉัน","menu.docs":"ศูนย์เอกสาร","menu.docs.detail":"รายละเอียดเอกสาร","menu.header.refreshPage":"รีเฟรชหน้า","menu.invite.friends":"ชวนเพื่อน","app.setting.pagestyle":"การตั้งค่าสไตล์โดยรวม","app.setting.pagestyle.light":"เมนูสไตล์สดใส","app.setting.pagestyle.dark":"สไตล์เมนูสีเข้ม","app.setting.pagestyle.realdark":"โหมดมืด","app.setting.themecolor":"สีของธีม","app.setting.navigationmode":"โหมดการนำทาง","app.setting.sidemenu.nav":"การนำทางแถบด้านข้าง","app.setting.topmenu.nav":"การนำทางแถบด้านบน","app.setting.content-width":"ความกว้างของพื้นที่เนื้อหา","app.setting.content-width.tooltip":"การตั้งค่านี้จะมีผลเฉพาะเมื่อ [การนำทางแถบด้านบน]","app.setting.content-width.fixed":"ที่ตายตัว","app.setting.content-width.fluid":"สตรีมมิ่ง","app.setting.fixedheader":"ส่วนหัวคงที่","app.setting.fixedheader.tooltip":"กำหนดค่าได้เมื่อแก้ไขส่วนหัว","app.setting.autoHideHeader":"ซ่อนส่วนหัวเมื่อเลื่อน","app.setting.fixedsidebar":"เมนูด้านข้างคงที่","app.setting.sidemenu":"เค้าโครงเมนูด้านข้าง","app.setting.topmenu":"เค้าโครงเมนูด้านบน","app.setting.othersettings":"การตั้งค่าอื่นๆ","app.setting.weakmode":"โหมดความอ่อนแอของสี","app.setting.multitab":"โหมดหลายแท็บ","app.setting.copy":"การตั้งค่าการทำสำเนา","app.setting.loading":"กำลังโหลดธีม","app.setting.copyinfo":"คัดลอกการตั้งค่าสำเร็จ src/config/defaultSettings.js","app.setting.copy.success":"คัดลอกเสร็จแล้ว","app.setting.copy.fail":"การคัดลอกล้มเหลว","app.setting.theme.switching":"เปลี่ยนธีม!","app.setting.production.hint":"แถบการกำหนดค่าใช้สำหรับการดูตัวอย่างในสภาพแวดล้อมการพัฒนาเท่านั้น และจะไม่แสดงในสภาพแวดล้อมการใช้งานจริง โปรดคัดลอกและแก้ไขไฟล์การกำหนดค่าด้วยตนเอง","app.setting.themecolor.daybreak":"รุ่งอรุณสีฟ้า (ค่าเริ่มต้น)","app.setting.themecolor.dust":"พลบค่ำ","app.setting.themecolor.volcano":"ภูเขาไฟ","app.setting.themecolor.sunset":"พระอาทิตย์ตก","app.setting.themecolor.cyan":"หมิงชิง","app.setting.themecolor.green":"ออโรร่าสีเขียว","app.setting.themecolor.geekblue":"เกินบรรยายสีฟ้า","app.setting.themecolor.purple":"เจียงซี","app.setting.tooltip":"การตั้งค่าหน้า","user.login.userName":"ชื่อผู้ใช้","user.login.password":"รหัสผ่าน","user.login.username.placeholder":"บัญชี: ผู้ดูแลระบบ","user.login.password.placeholder":"รหัสผ่าน: admin หรือ ant.design","user.login.message-invalid-credentials":"การเข้าสู่ระบบล้มเหลว โปรดตรวจสอบอีเมลและรหัสยืนยันของคุณ","user.login.message-invalid-verification-code":"รหัสยืนยันผิดพลาด","user.login.tab-login-credentials":"เข้าสู่ระบบรหัสผ่านบัญชี","user.login.tab-login-email":"เข้าสู่ระบบอีเมล","user.login.tab-login-mobile":"เข้าสู่ระบบหมายเลขโทรศัพท์มือถือ","user.login.captcha.placeholder":"กรุณากรอกรหัสยืนยันกราฟิก","user.login.mobile.placeholder":"หมายเลขโทรศัพท์","user.login.mobile.verification-code.placeholder":"รหัสยืนยัน","user.login.email.placeholder":"กรุณากรอกที่อยู่อีเมลของคุณ","user.login.email.verification-code.placeholder":"กรุณากรอกรหัสยืนยัน","user.login.email.sending":"กำลังส่งรหัสยืนยัน...","user.login.email.send-success-title":"คำใบ้","user.login.email.send-success":"ส่งรหัสยืนยันสำเร็จแล้ว โปรดตรวจสอบอีเมลของคุณ","user.login.sms.send-success":"ส่งรหัสยืนยันสำเร็จแล้ว โปรดตรวจสอบข้อความ","user.login.remember-me":"เข้าสู่ระบบอัตโนมัติ","user.login.forgot-password":"ลืมรหัสผ่าน","user.login.sign-in-with":"วิธีการเข้าสู่ระบบอื่น ๆ","user.login.signup":"ลงทะเบียนบัญชี","user.login.login":"เข้าสู่ระบบ","user.register.register":"ลงทะเบียน","user.register.email.placeholder":"จดหมาย","user.register.password.placeholder":"กรุณากรอกอย่างน้อย 6 ตัวอักษร กรุณาอย่าใช้รหัสผ่านที่คาดเดาได้ง่าย","user.register.password.popover-message":"กรุณากรอกอย่างน้อย 6 ตัวอักษร กรุณาอย่าใช้รหัสผ่านที่คาดเดาได้ง่าย","user.register.confirm-password.placeholder":"ยืนยันรหัสผ่าน","user.register.get-verification-code":"รับรหัสยืนยัน","user.register.sign-in":"เข้าสู่ระบบโดยใช้บัญชีที่มีอยู่","user.register-result.msg":"บัญชีของคุณ: {email} การลงทะเบียนสำเร็จ","user.register-result.activation-email":"อีเมลเปิดใช้งานได้ถูกส่งไปยังกล่องจดหมายของคุณแล้ว และมีอายุ 24 ชั่วโมง โปรดเข้าสู่ระบบอีเมลของคุณทันทีและคลิกลิงก์ในอีเมลเพื่อเปิดใช้งานบัญชีของคุณ","user.register-result.back-home":"กลับไปที่หน้าแรก","user.register-result.view-mailbox":"ตรวจสอบกล่องจดหมายของคุณ","user.email.required":"กรุณากรอกที่อยู่อีเมลของคุณ!","user.email.wrong-format":"รูปแบบที่อยู่อีเมลไม่ถูกต้อง!","user.userName.required":"กรุณากรอกชื่อบัญชีหรือที่อยู่อีเมลของคุณ","user.password.required":"กรุณากรอกรหัสผ่านของคุณ!","user.password.twice.msg":"รหัสผ่านที่ป้อนสองครั้งไม่ตรงกัน!","user.password.strength.msg":"รหัสผ่านไม่แข็งแกร่งพอ","user.password.strength.strong":"ความแข็งแกร่ง: แข็งแกร่ง","user.password.strength.medium":"ความแข็งแกร่ง: ปานกลาง","user.password.strength.low":"ความแรง: ต่ำ","user.password.strength.short":"ความแรง: สั้นเกินไป","user.confirm-password.required":"กรุณายืนยันรหัสผ่านของคุณ!","user.phone-number.required":"กรุณากรอกหมายเลขโทรศัพท์มือถือที่ถูกต้อง","user.phone-number.wrong-format":"รูปแบบหมายเลขโทรศัพท์มือถือผิด!","user.verification-code.required":"กรุณากรอกรหัสยืนยัน!","user.captcha.required":"กรุณากรอกรหัสยืนยันกราฟิก!","user.login.infos":"QuantDinger เป็นเครื่องมือเสริมการวิเคราะห์หุ้นแบบหลายตัวแทนด้วย AI และไม่มีคุณสมบัติในการให้คำปรึกษาด้านการลงทุนในหลักทรัพย์ผลการวิเคราะห์ คะแนน และความคิดเห็นอ้างอิงทั้งหมดในแพลตฟอร์มถูกสร้างขึ้นโดยอัตโนมัติโดย AI ตามข้อมูลในอดีต และใช้เพื่อการเรียนรู้ การวิจัย และการแลกเปลี่ยนทางเทคนิคเท่านั้น และไม่ถือเป็นคำแนะนำในการลงทุนหรือพื้นฐานการตัดสินใจใดๆการลงทุนในหุ้นเกี่ยวข้องกับความเสี่ยงต่างๆ เช่น ความเสี่ยงด้านตลาด ความเสี่ยงด้านสภาพคล่อง ความเสี่ยงด้านนโยบาย ฯลฯ ซึ่งอาจนำไปสู่การสูญเสียเงินต้นได้ผู้ใช้ควรตัดสินใจอย่างอิสระโดยพิจารณาจากการยอมรับความเสี่ยงของตนเอง และพฤติกรรมการลงทุนและผลที่ตามมาที่เกิดจากการใช้เครื่องมือนี้จะต้องตกเป็นภาระของผู้ใช้ตลาดมีความเสี่ยงและการลงทุนต้องระมัดระวัง","user.login.tab-login-web3":"เข้าสู่ระบบ Web3","user.login.web3.tip":"เข้าสู่ระบบโดยใช้กระเป๋าเงิน","user.login.web3.connect":"เชื่อมต่อกระเป๋าเงินและเข้าสู่ระบบ","user.login.web3.no-wallet":"ตรวจไม่พบกระเป๋าเงิน","user.login.web3.no-address":"ไม่ได้รับที่อยู่กระเป๋าเงิน","user.login.web3.nonce-failed":"ไม่สามารถรับหมายเลขสุ่มได้","user.login.web3.verify-failed":"การตรวจสอบลายเซ็นล้มเหลว","user.login.web3.success":"เข้าสู่ระบบสำเร็จ","user.login.web3.failed":"การเข้าสู่ระบบ Wallet ล้มเหลว","nav.no_wallet":"ตรวจไม่พบกระเป๋าเงิน","nav.copy":"สำเนา","nav.copy_success":"คัดลอกเรียบร้อยแล้ว","user.login.oauth.google":"ลงชื่อเข้าใช้งานด้วย Google","user.login.oauth.github":"ลงชื่อเข้าใช้ด้วย GitHub","user.login.oauth.loading":"กำลังเปลี่ยนเส้นทางไปยังหน้าการอนุญาต...","user.login.oauth.failed":"การเข้าสู่ระบบ OAuth ล้มเหลว","user.login.oauth.get-url-failed":"ไม่สามารถรับลิงก์การอนุญาตได้","user.login.subtitle":"ขับเคลื่อนข้อมูลเชิงลึกเชิงปริมาณสู่ตลาดโลก","user.login.legal.title":"ข้อสงวนสิทธิ์ทางกฎหมาย","user.login.legal.view":"ดูข้อจำกัดความรับผิดชอบทางกฎหมาย","user.login.legal.collapse":"ยุบข้อจำกัดความรับผิดชอบทางกฎหมาย","user.login.legal.agree":"ฉันได้อ่านและยอมรับข้อจำกัดความรับผิดชอบทางกฎหมาย","user.login.legal.required":"โปรดอ่านและตรวจสอบข้อจำกัดความรับผิดชอบทางกฎหมายก่อน","user.login.legal.content":"QuantDinger เป็นเครื่องมือเสริมการวิเคราะห์หุ้นแบบหลายตัวแทนด้วย AI และไม่มีคุณสมบัติในการให้คำปรึกษาด้านการลงทุนในหลักทรัพย์ผลการวิเคราะห์ การให้คะแนน และความคิดเห็นอ้างอิงทั้งหมดในแพลตฟอร์มถูกสร้างขึ้นโดยอัตโนมัติโดย AI ตามข้อมูลในอดีต และใช้สำหรับการเรียนรู้ การวิจัย และการแลกเปลี่ยนทางเทคนิคเท่านั้น และไม่ถือเป็นคำแนะนำในการลงทุนหรือพื้นฐานการตัดสินใจใดๆการลงทุนในหุ้นเกี่ยวข้องกับความเสี่ยงต่างๆ เช่น ความเสี่ยงด้านตลาด ความเสี่ยงด้านสภาพคล่อง ความเสี่ยงด้านนโยบาย ฯลฯ ซึ่งอาจนำไปสู่การสูญเสียเงินต้นได้ผู้ใช้ควรตัดสินใจอย่างอิสระโดยพิจารณาจากการยอมรับความเสี่ยงของตนเอง และพฤติกรรมการลงทุนและผลที่ตามมาที่เกิดจากการใช้เครื่องมือนี้จะต้องตกเป็นภาระของผู้ใช้ตลาดมีความเสี่ยงและการลงทุนต้องระมัดระวัง","user.login.privacy.title":"นโยบายความเป็นส่วนตัวของผู้ใช้","user.login.privacy.view":"ดูนโยบายความเป็นส่วนตัวของผู้ใช้","user.login.privacy.collapse":"ปิดข้อกำหนดความเป็นส่วนตัวของผู้ใช้","user.login.privacy.content":"เราให้ความสำคัญกับความเป็นส่วนตัวและการปกป้องข้อมูลของคุณ 1) ขอบเขตของการรวบรวม: เฉพาะข้อมูลที่จำเป็นในการใช้งานฟังก์ชัน (เช่น อีเมล หมายเลขโทรศัพท์มือถือ รหัสพื้นที่ ที่อยู่กระเป๋าสตางค์ของ Web3) และบันทึกและข้อมูลอุปกรณ์ที่จำเป็นเท่านั้นที่จะถูกรวบรวม 2) วัตถุประสงค์การใช้งาน: สำหรับการเข้าสู่ระบบบัญชีและการตรวจสอบความปลอดภัยการให้บริการฟังก์ชั่น การแก้ไขปัญหาและข้อกำหนดการปฏิบัติตาม 3) การจัดเก็บและความปลอดภัย: ข้อมูลได้รับการเข้ารหัสและจัดเก็บและมีการใช้สิทธิ์ที่จำเป็นและมาตรการควบคุมการเข้าถึงเพื่อป้องกันการเข้าถึง การเปิดเผย หรือการสูญหายโดยไม่ได้รับอนุญาต 4) การแบ่งปันกับบุคคลที่สาม: เว้นแต่กฎหมายและข้อบังคับกำหนดไว้หรือจำเป็นในการให้บริการ ข้อมูลส่วนบุคคลของคุณจะไม่ถูกแบ่งปันกับบุคคลที่สามหากเกี่ยวข้องกับบริการของบุคคลที่สาม (เช่น กระเป๋าเงิน ผู้ให้บริการ SMS) จะถูกประมวลผลในขอบเขตขั้นต่ำที่จำเป็นเพื่อใช้งานฟังก์ชันนี้เท่านั้น 5) คุกกี้/ที่เก็บข้อมูลในเครื่อง: ใช้สำหรับสถานะการเข้าสู่ระบบและการบำรุงรักษาเซสชันที่จำเป็น (เช่น โทเค็น PHPSESSID) คุณสามารถล้างหรือจำกัดได้ในเบราว์เซอร์ 6) สิทธิ์ส่วนบุคคล: คุณสามารถใช้สิทธิ์ของคุณในการสอบถาม แก้ไข ลบ เพิกถอนความยินยอม ฯลฯ ตามกฎหมายและข้อบังคับ 7) การเปลี่ยนแปลงและประกาศ: เมื่อมีการอัปเดตข้อกำหนดเหล่านี้จะแสดงอย่างเด่นชัดบนหน้าเว็บการใช้บริการนี้ต่อไปจะถือว่าคุณได้อ่านและยอมรับเนื้อหาที่อัปเดตแล้วหากคุณไม่ยอมรับข้อกำหนดเหล่านี้หรือการปรับปรุงใด ๆ โปรดหยุดใช้บริการและติดต่อเรา","account.basicInfo":"ข้อมูลพื้นฐาน","account.id":"รหัสผู้ใช้","account.username":"ชื่อผู้ใช้","account.nickname":"ชื่อนิค","account.email":"จดหมาย","account.mobile":"หมายเลขโทรศัพท์","account.web3address":"ที่อยู่กระเป๋าเงิน","account.pid":"รหัสผู้อ้างอิง","account.level":"ระดับผู้ใช้","account.money":"สมดุล","account.qdtBalance":"ยอดคงเหลือ QDT","account.score":"บูรณาการ","account.createtime":"เวลาลงทะเบียน","account.inviteLink":"ลิงค์คำเชิญ","account.recharge":"เติมเงิน","account.rechargeTip":"โปรดใช้ WeChat หรือ Alipay เพื่อสแกนโค้ด QR ด้านล่างเพื่อเติมเงิน","account.qrCodePlaceholder":"ตัวยึดรหัส QR (การจำลอง)","account.rechargeAmount":"จำนวนการเติมเงิน","account.enterAmount":"กรุณากรอกจำนวนเงินที่เติม","account.rechargeHint":"จำนวนเงินฝากขั้นต่ำ: 1 QDT","account.confirmRecharge":"ยืนยันการเติมเงิน","account.enterValidAmount":"กรุณากรอกจำนวนเงินที่เติมให้ถูกต้อง","account.rechargeSuccess":"เติมเงินสำเร็จ!ฝากแล้ว {amount} QDT","account.settings.menuMap.basic":"การตั้งค่าพื้นฐาน","account.settings.menuMap.security":"การตั้งค่าความปลอดภัย","account.settings.menuMap.notification":"การแจ้งเตือนข้อความใหม่","account.settings.menuMap.moneyLog":"รายละเอียดกองทุน","account.moneyLog.empty":"ยังไม่มีรายละเอียดกองทุน","account.moneyLog.total":"รวม {total} บันทึก","account.moneyLog.type.purchase":"ตัวบ่งชี้การซื้อ","account.moneyLog.type.recharge":"เติมเงิน","account.moneyLog.type.refund":"คืนเงิน","account.moneyLog.type.reward":"รางวัล","account.moneyLog.type.income":"ตัวชี้วัดรายได้","account.moneyLog.type.commission":"ค่าธรรมเนียมการจัดการแพลตฟอร์ม","wallet.balance":"ยอดคงเหลือ QDT","wallet.recharge":"เติมเงิน","wallet.withdraw":"ถอนเงินสด","wallet.filter":"กรอง","wallet.reset":"รีเซ็ต","wallet.totalRecharge":"การเติมเงินสะสม","wallet.totalWithdraw":"การถอนเงินสะสม","wallet.totalIncome":"รายได้สะสม","wallet.records":"บันทึกการทำธุรกรรมและรายละเอียดกองทุน","wallet.tradingRecords":"ประวัติการทำธุรกรรม","wallet.moneyLog":"รายละเอียดกองทุน","wallet.rechargeTip":"โปรดใช้ WeChat หรือ Alipay เพื่อสแกนโค้ด QR ด้านล่างเพื่อเติมเงิน","wallet.qrCodePlaceholder":"ตัวยึดรหัส QR (การจำลอง)","wallet.rechargeAmount":"จำนวนการเติมเงิน","wallet.enterAmount":"กรุณากรอกจำนวนเงินที่เติม","wallet.rechargeHint":"จำนวนเงินฝากขั้นต่ำ: 1 QDT","wallet.confirmRecharge":"ยืนยันการเติมเงิน","wallet.enterValidAmount":"กรุณากรอกจำนวนเงินที่เติมให้ถูกต้อง","wallet.rechargeSuccess":"เติมเงินสำเร็จ!ฝากแล้ว {amount} QDT","wallet.rechargeFailed":"การเติมเงินล้มเหลว","wallet.withdrawTip":"กรุณากรอกจำนวนเงินที่ถอนและที่อยู่การถอน","wallet.withdrawAmount":"ถอนจำนวนเงิน","wallet.enterWithdrawAmount":"กรุณากรอกจำนวนเงินที่ถอน","wallet.withdrawHint":"จำนวนถอนขั้นต่ำ: 1 QDT","wallet.withdrawAddress":"ที่อยู่การถอนเงิน (ไม่บังคับ)","wallet.enterWithdrawAddress":"กรุณากรอกที่อยู่การถอนเงิน","wallet.confirmWithdraw":"ยืนยันการถอนเงิน","wallet.enterValidWithdrawAmount":"กรุณากรอกจำนวนเงินที่ถอนให้ถูกต้อง","wallet.insufficientBalance":"ยอดคงเหลือไม่เพียงพอ","wallet.withdrawSuccess":"การถอนเงินสำเร็จ!ถอนออก {amount} QDT","wallet.withdrawFailed":"การถอนเงินล้มเหลว","wallet.noTradingRecords":"ยังไม่มีบันทึกการทำธุรกรรม","wallet.noMoneyLog":"ยังไม่มีรายละเอียดกองทุน","wallet.loadTradingRecordsFailed":"โหลดบันทึกธุรกรรมไม่สำเร็จ","wallet.loadMoneyLogFailed":"โหลดรายละเอียดกองทุนไม่สำเร็จ","wallet.moneyLogTotal":"รวม {total} บันทึก","wallet.moneyLogTypeTitle":"พิมพ์","wallet.moneyLogType.all":"ทุกประเภท","wallet.table.time":"เวลา","wallet.table.type":"พิมพ์","wallet.table.price":"ราคา","wallet.table.amount":"ปริมาณ","wallet.table.money":"จำนวน","wallet.table.balance":"สมดุล","wallet.table.memo":"หมายเหตุ","wallet.table.value":"ค่า","wallet.table.profit":"กำไรและขาดทุน","wallet.table.commission":"ค่าธรรมเนียมการจัดการ","wallet.table.total":"รวม {total} บันทึก","wallet.tradeType.buy":"ซื้อ","wallet.tradeType.sell":"ขาย","wallet.tradeType.liquidation":"บังคับให้เลิกกิจการ","wallet.tradeType.openLong":"เปิดยาวๆ","wallet.tradeType.addLong":"กาดอต","wallet.tradeType.closeLong":"ปินตัว","wallet.tradeType.closeLongStop":"หยุดขาดทุนและยาว","wallet.tradeType.closeLongProfit":"ขายทำกำไรและระดับมากขึ้น","wallet.tradeType.openShort":"เปิดสั้น","wallet.tradeType.addShort":"เพิ่มสั้น","wallet.tradeType.closeShort":"ว่างเปล่า","wallet.tradeType.closeShortStop":"หยุดการสูญเสีย","wallet.tradeType.closeShortProfit":"ขายทำกำไรและปิดการขาย","wallet.moneyLogType.purchase":"ตัวบ่งชี้การซื้อ","wallet.moneyLogType.recharge":"เติมเงิน","wallet.moneyLogType.withdraw":"ถอนเงินสด","wallet.moneyLogType.refund":"คืนเงิน","wallet.moneyLogType.reward":"รางวัล","wallet.moneyLogType.income":"รายได้","wallet.moneyLogType.commission":"ค่าธรรมเนียมการจัดการ","wallet.web3Address.required":"กรุณากรอกที่อยู่กระเป๋าเงิน Web3 ก่อน","wallet.web3Address.requiredDescription":"ก่อนที่จะเติมเงิน คุณต้องผูกที่อยู่กระเป๋าเงิน Web3 ของคุณเพื่อรับการเติมเงิน","wallet.web3Address.placeholder":"โปรดป้อนที่อยู่กระเป๋าเงิน Web3 ของคุณ (เริ่มต้นด้วย 0x)","wallet.web3Address.save":"บันทึกที่อยู่กระเป๋าเงิน","wallet.web3Address.saveSuccess":"บันทึกที่อยู่ Wallet เรียบร้อยแล้ว","wallet.web3Address.saveFailed":"ไม่สามารถบันทึกที่อยู่กระเป๋าสตางค์ได้","wallet.web3Address.invalidFormat":"โปรดป้อนที่อยู่กระเป๋าเงิน Web3 ที่ถูกต้อง (รูปแบบ Ethereum: 42 ตัวอักษรเริ่มต้นด้วย 0x หรือรูปแบบ TRC20: 34 ตัวอักษรเริ่มต้นด้วย T)","wallet.selectCoin":"เลือกสกุลเงิน","wallet.selectChain":"ห่วงโซ่การคัดเลือก","wallet.chain.eth":"ผลประโยชน์ทับซ้อน (ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"บีเอสซี","wallet.targetQdtAmount":"จำนวน QDT ที่คุณต้องการแลก (ไม่บังคับ)","wallet.targetQdtAmount.placeholder":"กรุณากรอกจำนวน QDT ที่คุณต้องการแลกเปลี่ยน ราคา QDT ปัจจุบันคือ: {price} USDT","wallet.targetQdtAmount.requiredUsdt":"ต้องเติมเงิน: {amount} USDT","wallet.rechargeAddress":"ที่อยู่เติมเงิน","wallet.copyAddress":"สำเนา","wallet.copySuccess":"คัดลอกสำเร็จ!","wallet.copyFailed":"การคัดลอกล้มเหลว โปรดคัดลอกด้วยตนเอง","wallet.rechargeAddressHint":"โปรดตรวจสอบให้แน่ใจว่าได้ใช้เครือข่าย {chain} เพื่อฝาก {coin} ไปยังที่อยู่นี้","wallet.qdtPrice.loading":"กำลังโหลด...","wallet.rechargeTip.new":"โปรดเลือกสกุลเงินและห่วงโซ่ จากนั้นสแกนโค้ด QR ด้านล่างเพื่อเติมเงิน","wallet.exchangeRate":"1 คิวดีที กลับไปยัง {rate} ดอลลาร์สหรัฐ","wallet.withdrawableAmount":"จำนวนเงินสดที่มีอยู่","wallet.totalBalance":"ยอดรวม","wallet.insufficientWithdrawable":"จำนวนเงินสดที่สามารถถอนออกได้ไม่เพียงพอ เงินสดที่มีอยู่ในปัจจุบันคือ: {amount} QDT","wallet.withdrawAddressRequired":"กรุณากรอกที่อยู่การถอนเงิน","wallet.withdrawAddressHint":"โปรดตรวจสอบให้แน่ใจว่าที่อยู่ถูกต้อง หลังจากถอนแล้วไม่สามารถเพิกถอนได้","wallet.withdrawSubmitSuccess":"ส่งใบสมัครถอนเรียบร้อยแล้ว โปรดรอการตรวจสอบ","menu.footer.contactUs":"ติดต่อเรา","menu.footer.getSupport":"รับการสนับสนุน","menu.footer.socialAccounts":"บัญชีโซเชียล","menu.footer.userAgreement":"ข้อตกลงผู้ใช้","menu.footer.privacyPolicy":"นโยบายความเป็นส่วนตัว","menu.footer.support":"สนับสนุน","menu.footer.featureRequest":"คำขอคุณสมบัติ","menu.footer.email":"อีเมล","menu.footer.liveChat":"แชทสดทุกวันตลอด 24 ชั่วโมง","dashboard.analysis.title":"การวิเคราะห์หลายมิติ","dashboard.analysis.subtitle":"แพลตฟอร์มการวิเคราะห์ทางการเงินที่ครอบคลุมที่ขับเคลื่อนด้วย AI","dashboard.analysis.selectSymbol":"เลือกหรือป้อนรหัสพื้นฐาน","dashboard.analysis.selectModel":"เลือกรุ่น","dashboard.analysis.startAnalysis":"เริ่มการวิเคราะห์","dashboard.analysis.history":"ประวัติศาสตร์","dashboard.analysis.tab.overview":"การวิเคราะห์ที่ครอบคลุม","dashboard.analysis.tab.fundamental":"ความรู้พื้นฐาน","dashboard.analysis.tab.technical":"เทคโนโลยี","dashboard.analysis.tab.news":"ข่าว","dashboard.analysis.tab.sentiment":"อารมณ์","dashboard.analysis.tab.risk":"เสี่ยง","dashboard.analysis.tab.debate":"การอภิปรายระยะสั้นยาว","dashboard.analysis.tab.decision":"การตัดสินใจขั้นสุดท้าย","dashboard.analysis.empty.selectSymbol":"เลือกเป้าหมายเพื่อเริ่มการวิเคราะห์","dashboard.analysis.empty.selectSymbolDesc":"เลือกจากรายการหุ้นที่เลือกเองหรือป้อนรหัสที่เกี่ยวข้องเพื่อรับรายงานการวิเคราะห์ AI หลายมิติ","dashboard.analysis.empty.startAnalysis":'คลิกปุ่ม "เริ่มการวิเคราะห์" เพื่อทำการวิเคราะห์หลายมิติ',"dashboard.analysis.empty.startAnalysisDesc":"เราจะให้การวิเคราะห์ที่ครอบคลุมจากหลายมิติ เช่น ปัจจัยพื้นฐาน เทคโนโลยี ข่าวสาร ความรู้สึก และความเสี่ยง","dashboard.analysis.empty.noData":"ขณะนี้ไม่มีข้อมูลการวิเคราะห์ {type} โปรดดำเนินการวิเคราะห์ที่ครอบคลุมก่อน","dashboard.analysis.empty.noWatchlist":"ขณะนี้ไม่มีหุ้นที่เลือกเอง","dashboard.analysis.empty.noHistory":"ยังไม่มีประวัติ","dashboard.analysis.empty.watchlistHint":"ขณะนี้ไม่มีหุ้นที่เลือกเองกรุณาก่อน","dashboard.analysis.empty.noDebateData":"ยังไม่มีข้อมูลการอภิปราย","dashboard.analysis.empty.noDecisionData":"ยังไม่มีข้อมูลการตัดสินใจ","dashboard.analysis.empty.selectAgent":"โปรดเลือกตัวแทนเพื่อดูผลการวิเคราะห์","dashboard.analysis.loading.analyzing":"กำลังวิเคราะห์ กรุณารอสักครู่...","dashboard.analysis.loading.fundamental":"กำลังวิเคราะห์ข้อมูลพื้นฐาน...","dashboard.analysis.loading.technical":"กำลังวิเคราะห์ตัวชี้วัดทางเทคนิค...","dashboard.analysis.loading.news":"กำลังวิเคราะห์ข้อมูลข่าว...","dashboard.analysis.loading.sentiment":"วิเคราะห์อารมณ์ตลาด...","dashboard.analysis.loading.risk":"กำลังประเมินความเสี่ยง...","dashboard.analysis.loading.debate":"การอภิปรายระยะสั้นระยะสั้นกำลังดำเนินอยู่...","dashboard.analysis.loading.decision":"กำลังสร้างการตัดสินใจขั้นสุดท้าย...","dashboard.analysis.score.overall":"คะแนนโดยรวม","dashboard.analysis.score.recommendation":"คำแนะนำการลงทุน","dashboard.analysis.score.confidence":"ความมั่นใจ","dashboard.analysis.dimension.fundamental":"ความรู้พื้นฐาน","dashboard.analysis.dimension.technical":"เทคโนโลยี","dashboard.analysis.dimension.news":"ข่าว","dashboard.analysis.dimension.sentiment":"อารมณ์","dashboard.analysis.dimension.risk":"เสี่ยง","dashboard.analysis.card.dimensionScores":"การให้คะแนนสำหรับแต่ละมิติ","dashboard.analysis.card.overviewReport":"รายงานการวิเคราะห์ที่ครอบคลุม","dashboard.analysis.card.financialMetrics":"ตัวชี้วัดทางการเงิน","dashboard.analysis.card.fundamentalReport":"รายงานการวิเคราะห์ปัจจัยพื้นฐาน","dashboard.analysis.card.technicalIndicators":"ตัวชี้วัดทางเทคนิค","dashboard.analysis.card.technicalReport":"รายงานการวิเคราะห์ทางเทคนิค","dashboard.analysis.card.newsList":"ข่าวที่เกี่ยวข้อง","dashboard.analysis.card.newsReport":"รายงานการวิเคราะห์ข่าว","dashboard.analysis.card.sentimentIndicators":"ตัวบ่งชี้ความรู้สึก","dashboard.analysis.card.sentimentReport":"รายงานการวิเคราะห์ความรู้สึก","dashboard.analysis.card.riskMetrics":"ตัวชี้วัดความเสี่ยง","dashboard.analysis.card.riskReport":"รายงานการประเมินความเสี่ยง","dashboard.analysis.card.bullView":"มุมมองรั้น (กระทิง)","dashboard.analysis.card.bearView":"มุมมองหยาบคาย (หมี)","dashboard.analysis.card.researchConclusion":"ข้อสรุปของผู้วิจัย","dashboard.analysis.card.traderPlan":"แผนผู้ค้า","dashboard.analysis.card.riskDebate":"การอภิปรายคณะกรรมการความเสี่ยง","dashboard.analysis.card.finalDecision":"การตัดสินใจครั้งสุดท้าย","dashboard.analysis.card.tradePlanDetail":"รายละเอียดแผนการเทรด","dashboard.analysis.tradingPlan.entry_price":"ราคาค่าเข้าชม","dashboard.analysis.tradingPlan.position_size":"ขนาดตำแหน่ง","dashboard.analysis.tradingPlan.stop_loss":"หยุดการสูญเสีย","dashboard.analysis.tradingPlan.take_profit":"ขายทำกำไร","dashboard.analysis.label.confidence":"ความมั่นใจ","dashboard.analysis.label.keyPoints":"จุดหลัก","dashboard.analysis.label.riskWarning":"คำเตือนความเสี่ยง","dashboard.analysis.risk.risky":"เสี่ยง","dashboard.analysis.risk.neutral":"มุมมองที่เป็นกลาง (เป็นกลาง)","dashboard.analysis.risk.safe":"มุมมองแบบอนุรักษ์นิยม (ปลอดภัย)","dashboard.analysis.risk.conclusion":"สรุปแล้ว","dashboard.analysis.feature.fundamental":"การวิเคราะห์พื้นฐาน","dashboard.analysis.feature.technical":"การวิเคราะห์ทางเทคนิค","dashboard.analysis.feature.news":"การวิเคราะห์ข่าว","dashboard.analysis.feature.sentiment":"การวิเคราะห์ความรู้สึก","dashboard.analysis.feature.risk":"การประเมินความเสี่ยง","dashboard.analysis.watchlist.title":"การเลือกหุ้นของฉัน","dashboard.analysis.watchlist.add":"เพิ่มไปที่","dashboard.analysis.watchlist.addStock":"เพิ่มสต็อก","dashboard.analysis.modal.addStock.title":"เพิ่มหุ้นเสริม","dashboard.analysis.modal.addStock.confirm":"แน่นอน","dashboard.analysis.modal.addStock.cancel":"ยกเลิก","dashboard.analysis.modal.addStock.market":"ประเภทตลาด","dashboard.analysis.modal.addStock.marketPlaceholder":"กรุณาเลือกตลาด","dashboard.analysis.modal.addStock.marketRequired":"กรุณาเลือกประเภทตลาด","dashboard.analysis.modal.addStock.symbol":"รหัสสต๊อกสินค้า","dashboard.analysis.modal.addStock.symbolPlaceholder":"ตัวอย่างเช่น: AAPL, TSLA, GOOGL, 000001, BTC","dashboard.analysis.modal.addStock.symbolRequired":"กรุณากรอกรหัสสต๊อกสินค้า","dashboard.analysis.modal.addStock.searchPlaceholder":"ค้นหารหัสหรือชื่อเป้าหมาย","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"ค้นหาหรือป้อนรหัสอ้างอิง (เช่น AAPL, BTC/USDT, EUR/USD)","dashboard.analysis.modal.addStock.searchOrInputHint":"รองรับการค้นหาวัตถุในฐานข้อมูลหรือป้อนรหัสโดยตรง (ระบบจะรับชื่อโดยอัตโนมัติ)","dashboard.analysis.modal.addStock.search":"ค้นหา","dashboard.analysis.modal.addStock.searchResults":"ผลการค้นหา","dashboard.analysis.modal.addStock.hotSymbols":"เป้าหมายยอดนิยม","dashboard.analysis.modal.addStock.noHotSymbols":"ยังไม่มีเป้าหมายยอดนิยม","dashboard.analysis.modal.addStock.selectedSymbol":"เลือกแล้ว","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"โปรดเลือกเป้าหมายก่อน","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"โปรดเลือกเป้าหมายหรือป้อนรหัสเป้าหมายก่อน","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"กรุณากรอกรหัสเป้าหมาย","dashboard.analysis.modal.addStock.pleaseSelectMarket":"โปรดเลือกประเภทตลาดก่อน","dashboard.analysis.modal.addStock.searchFailed":"การค้นหาล้มเหลว โปรดลองอีกครั้งในภายหลัง","dashboard.analysis.modal.addStock.noSearchResults":"ไม่พบเป้าหมายที่ตรงกัน","dashboard.analysis.modal.addStock.willAutoFetchName":"ระบบจะรับชื่อให้อัตโนมัติ","dashboard.analysis.modal.addStock.addDirectly":"เพิ่มโดยตรง","dashboard.analysis.modal.addStock.nameWillBeFetched":"ชื่อจะถูกหยิบขึ้นมาโดยอัตโนมัติเมื่อเพิ่ม","dashboard.analysis.market.USStock":"หุ้นสหรัฐ","dashboard.analysis.market.Crypto":"สกุลเงินดิจิทัล","dashboard.analysis.market.Forex":"ฟอเร็กซ์","dashboard.analysis.market.Futures":"ฟิวเจอร์ส","dashboard.analysis.modal.history.title":"บันทึกการวิเคราะห์ทางประวัติศาสตร์","dashboard.analysis.modal.history.viewResult":"ดูผลลัพธ์","dashboard.analysis.modal.history.completeTime":"เวลาเสร็จสิ้น","dashboard.analysis.modal.history.error":"ความผิดพลาด","dashboard.analysis.status.pending":"รอดำเนินการ","dashboard.analysis.status.processing":"กำลังประมวลผล","dashboard.analysis.status.completed":"สมบูรณ์","dashboard.analysis.status.failed":"ล้มเหลว","dashboard.analysis.message.selectSymbol":"โปรดเลือกเป้าหมายก่อน","dashboard.analysis.message.taskCreated":"งานการวิเคราะห์ได้ถูกสร้างขึ้นแล้วและกำลังดำเนินการอยู่เบื้องหลัง...","dashboard.analysis.message.analysisComplete":"การวิเคราะห์เสร็จสมบูรณ์","dashboard.analysis.message.analysisCompleteCache":"การวิเคราะห์เสร็จสมบูรณ์ (ใช้ข้อมูลที่แคชไว้)","dashboard.analysis.message.analysisFailed":"การวิเคราะห์ล้มเหลว โปรดลองอีกครั้งในภายหลัง","dashboard.analysis.message.addStockSuccess":"เพิ่มเรียบร้อยแล้ว","dashboard.analysis.message.addStockFailed":"เพิ่มล้มเหลว","dashboard.analysis.message.removeStockSuccess":"ลบสำเร็จแล้ว","dashboard.analysis.message.removeStockFailed":"การลบล้มเหลว","dashboard.analysis.message.resumingAnalysis":"กำลังดำเนินการงานวิเคราะห์ต่อ...","dashboard.analysis.message.deleteSuccess":"ลบสำเร็จแล้ว","dashboard.analysis.message.deleteFailed":"การลบล้มเหลว","dashboard.analysis.modal.history.delete":"ลบ","dashboard.analysis.modal.history.deleteConfirm":"คุณแน่ใจหรือไม่ว่าต้องการลบบันทึกการวิเคราะห์นี้?","dashboard.analysis.test":"ร้านค้าเลขที่ {no} ถนน Gongzhan","dashboard.analysis.introduce":"คำอธิบายตัวบ่งชี้","dashboard.analysis.total-sales":"ยอดขายรวม","dashboard.analysis.day-sales":"ยอดขายเฉลี่ยต่อวัน¥","dashboard.analysis.visits":"การเข้าชม","dashboard.analysis.visits-trend":"แนวโน้มการเข้าชม","dashboard.analysis.visits-ranking":"อันดับการเข้าชมร้านค้า","dashboard.analysis.day-visits":"การเข้าชมรายวัน","dashboard.analysis.week":"รายสัปดาห์ปีต่อปี","dashboard.analysis.day":"ปีต่อปี","dashboard.analysis.payments":"จำนวนการชำระเงิน","dashboard.analysis.conversion-rate":"อัตราการแปลง","dashboard.analysis.operational-effect":"ผลกระทบจากกิจกรรมการดำเนินงาน","dashboard.analysis.sales-trend":"แนวโน้มการขาย","dashboard.analysis.sales-ranking":"อันดับยอดขายของร้าน","dashboard.analysis.all-year":"ประจำปี","dashboard.analysis.all-month":"เดือนนี้","dashboard.analysis.all-week":"สัปดาห์นี้","dashboard.analysis.all-day":"วันนี้","dashboard.analysis.search-users":"จำนวนผู้ใช้การค้นหา","dashboard.analysis.per-capita-search":"การค้นหาต่อหัว","dashboard.analysis.online-top-search":"การค้นหายอดนิยมออนไลน์","dashboard.analysis.the-proportion-of-sales":"สัดส่วนประเภทการขาย","dashboard.analysis.dropdown-option-one":"ปฏิบัติการที่หนึ่ง","dashboard.analysis.dropdown-option-two":"ปฏิบัติการ 2","dashboard.analysis.channel.all":"ทุกช่อง","dashboard.analysis.channel.online":"ออนไลน์","dashboard.analysis.channel.stores":"เก็บ","dashboard.analysis.sales":"ฝ่ายขาย","dashboard.analysis.traffic":"การไหลของผู้โดยสาร","dashboard.analysis.table.rank":"การจัดอันดับ","dashboard.analysis.table.search-keyword":"ค้นหาคำสำคัญ","dashboard.analysis.table.users":"จำนวนผู้ใช้","dashboard.analysis.table.weekly-range":"เพิ่มขึ้นรายสัปดาห์","dashboard.indicator.selectSymbol":"เลือกหรือป้อนรหัสพื้นฐาน","dashboard.indicator.emptyWatchlistHint":"ขณะนี้ไม่มีหุ้นที่เลือกเอง กรุณาเพิ่มก่อน","dashboard.indicator.hint.selectSymbol":"โปรดเลือกเป้าหมายเพื่อเริ่มการวิเคราะห์","dashboard.indicator.hint.selectSymbolDesc":"เลือกหรือป้อนรหัสหุ้นในช่องค้นหาด้านบนเพื่อดูกราฟ K-line และตัวชี้วัดทางเทคนิค","dashboard.indicator.retry":"ลองอีกครั้ง","dashboard.indicator.panel.title":"ตัวชี้วัดทางเทคนิค","dashboard.indicator.panel.realtimeOn":"ปิดการอัพเดตแบบเรียลไทม์","dashboard.indicator.panel.realtimeOff":"เปิดใช้งานการอัปเดตแบบเรียลไทม์","dashboard.indicator.panel.themeLight":"เปลี่ยนเป็นธีมสีเข้ม","dashboard.indicator.panel.themeDark":"เปลี่ยนเป็นธีมสว่าง","dashboard.indicator.section.enabled":"เปิดใช้งานแล้ว","dashboard.indicator.section.added":"ตัวบ่งชี้ที่ฉันเพิ่ม","dashboard.indicator.section.custom":"ตัวชี้วัดที่สร้างขึ้นด้วยตัวเอง","dashboard.indicator.section.bought":"ตัวบ่งชี้ที่ฉันซื้อ","dashboard.indicator.section.myCreated":"ตัวบ่งชี้ที่ฉันสร้างขึ้น","dashboard.indicator.empty":"ยังไม่มีตัวบ่งชี้ โปรดเพิ่มหรือสร้างตัวบ่งชี้ก่อน","dashboard.indicator.buy":"ตัวบ่งชี้การซื้อ","dashboard.indicator.action.start":"เริ่มต้นขึ้น","dashboard.indicator.action.stop":"ปิด","dashboard.indicator.action.edit":"แก้ไข","dashboard.indicator.action.delete":"ลบ","dashboard.indicator.action.backtest":"การทดสอบย้อนหลัง","dashboard.indicator.status.normal":"ปกติ","dashboard.indicator.status.normalPermanent":"ปกติ (ใช้ได้ถาวร)","dashboard.indicator.status.expired":"หมดอายุแล้ว","dashboard.indicator.expiry.permanent":"มีผลถาวร","dashboard.indicator.expiry.noExpiry":"ไม่มีเวลาหมดอายุ","dashboard.indicator.expiry.expired":"หมดอายุ: {date}","dashboard.indicator.expiry.expiresOn":"เวลาหมดอายุ: {date}","dashboard.indicator.delete.confirmTitle":"ยืนยันการลบ","dashboard.indicator.delete.confirmContent":'คุณแน่ใจหรือไม่ว่าต้องการลบตัวบ่งชี้ "{name}"?การดำเนินการนี้ไม่สามารถย้อนกลับได้',"dashboard.indicator.delete.confirmOk":"ลบ","dashboard.indicator.delete.confirmCancel":"ยกเลิก","dashboard.indicator.delete.success":"ลบสำเร็จ","dashboard.indicator.delete.failed":"ลบไม่สำเร็จ","dashboard.indicator.save.success":"บันทึกเรียบร้อยแล้ว","dashboard.indicator.save.failed":"บันทึกล้มเหลว","dashboard.indicator.error.loadWatchlistFailed":"ไม่สามารถโหลดหุ้นเสริมได้","dashboard.indicator.error.chartNotReady":"ส่วนประกอบแผนภูมิไม่ได้เตรียมใช้งาน โปรดเลือกเป้าหมายก่อนแล้วรอให้แผนภูมิโหลด","dashboard.indicator.error.chartMethodNotReady":"วิธีส่วนประกอบแผนภูมิไม่พร้อม โปรดลองอีกครั้งในภายหลัง","dashboard.indicator.error.chartExecuteNotReady":"วิธีดำเนินการส่วนประกอบแผนภูมิไม่พร้อม โปรดลองอีกครั้งในภายหลัง","dashboard.indicator.error.parseFailed":"ไม่สามารถแยกวิเคราะห์โค้ด Python","dashboard.indicator.error.parseFailedCheck":"ไม่สามารถแยกวิเคราะห์โค้ด Python ได้ โปรดตรวจสอบรูปแบบโค้ด","dashboard.indicator.error.addIndicatorFailed":"ไม่สามารถเพิ่มตัวบ่งชี้ได้","dashboard.indicator.error.runIndicatorFailed":"ตัวบ่งชี้การทำงานล้มเหลว","dashboard.indicator.error.pleaseLogin":"กรุณาเข้าสู่ระบบก่อน","dashboard.indicator.error.loadDataFailed":"การโหลดข้อมูลล้มเหลว","dashboard.indicator.error.loadDataFailedDesc":"โปรดตรวจสอบการเชื่อมต่อเครือข่าย","dashboard.indicator.error.pythonEngineFailed":"โหลดกลไก Python ล้มเหลวและฟังก์ชันตัวบ่งชี้อาจไม่พร้อมใช้งาน","dashboard.indicator.error.chartInitFailed":"การเริ่มต้นแผนภูมิล้มเหลว","dashboard.indicator.warning.enterCode":"กรุณากรอกรหัสตัวบ่งชี้ก่อน","dashboard.indicator.warning.pyodideLoadFailed":"โปรแกรม Python ไม่สามารถโหลดได้","dashboard.indicator.warning.pyodideLoadFailedDesc":"คุณสมบัตินี้ไม่สามารถใช้ได้ในภูมิภาคหรือสภาพแวดล้อมเครือข่ายปัจจุบันของคุณ","dashboard.indicator.warning.chartNotInitialized":"แผนภูมิไม่ได้เตรียมใช้งานและไม่สามารถใช้เครื่องมือวาดเส้นได้","dashboard.indicator.success.runIndicator":"ตัวบ่งชี้ทำงานสำเร็จ","dashboard.indicator.success.clearDrawings":"ล้างภาพวาดเส้นทั้งหมดแล้ว","dashboard.indicator.sma":"SMA (ชุดค่าผสมค่าเฉลี่ยเคลื่อนที่)","dashboard.indicator.ema":"EMA (ชุดค่าผสมค่าเฉลี่ยเคลื่อนที่เอ็กซ์โปเนนเชียล)","dashboard.indicator.rsi":"RSI (ความแรงสัมพัทธ์)","dashboard.indicator.macd":"MACD","dashboard.indicator.bb":"โบลินเจอร์ แบนด์","dashboard.indicator.atr":"ATR (ช่วงที่แท้จริงเฉลี่ย)","dashboard.indicator.cci":"CCI (ดัชนีช่องสินค้าโภคภัณฑ์)","dashboard.indicator.williams":"วิลเลียมส์ %R (ตัวบ่งชี้วิลเลียมส์)","dashboard.indicator.mfi":"MFI (ดัชนีการไหลของเงิน)","dashboard.indicator.adx":"ADX (ดัชนีแนวโน้มเฉลี่ย)","dashboard.indicator.obv":"OBV (คลื่นพลังงาน)","dashboard.indicator.adosc":"ADOSC (ออสซิลเลเตอร์สะสม/ส่ง)","dashboard.indicator.ad":"AD (เส้นการสะสม/การกระจาย)","dashboard.indicator.kdj":"KDJ (ตัวบ่งชี้สุ่ม)","dashboard.indicator.signal.buy":"ซื้อ","dashboard.indicator.signal.sell":"ขาย","dashboard.indicator.signal.supertrendBuy":"ซื้อ SuperTrend","dashboard.indicator.signal.supertrendSell":"ขาย SuperTrend","dashboard.indicator.chart.kline":"เคไลน์","dashboard.indicator.chart.volume":"ปริมาณ","dashboard.indicator.chart.uptrend":"อัพเทรนด์","dashboard.indicator.chart.downtrend":"เทรนด์ขาลง","dashboard.indicator.tooltip.time":"เวลา","dashboard.indicator.tooltip.open":"เปิด","dashboard.indicator.tooltip.close":"รับ","dashboard.indicator.tooltip.high":"สูง","dashboard.indicator.tooltip.low":"ต่ำ","dashboard.indicator.tooltip.volume":"ปริมาณ","dashboard.indicator.drawing.line":"ส่วนของเส้น","dashboard.indicator.drawing.horizontalLine":"เส้นแนวนอน","dashboard.indicator.drawing.verticalLine":"เส้นแนวตั้ง","dashboard.indicator.drawing.ray":"รังสี","dashboard.indicator.drawing.straightLine":"เส้นตรง","dashboard.indicator.drawing.parallelLine":"เส้นขนาน","dashboard.indicator.drawing.priceLine":"เส้นราคา","dashboard.indicator.drawing.priceChannel":"ช่องราคา","dashboard.indicator.drawing.fibonacciLine":"เส้นฟีโบนักชี","dashboard.indicator.drawing.measure":"วัด","dashboard.indicator.drawing.clearAll":"ล้างภาพวาดเส้นทั้งหมด","dashboard.indicator.market.USStock":"หุ้นสหรัฐ","dashboard.indicator.market.Crypto":"สกุลเงินดิจิทัล","dashboard.indicator.market.Forex":"ฟอเร็กซ์","dashboard.indicator.market.Futures":"ฟิวเจอร์ส","dashboard.indicator.create":"สร้างตัวบ่งชี้","dashboard.indicator.editor.title":"สร้าง/แก้ไขตัวบ่งชี้","dashboard.indicator.editor.name":"ชื่อตัวบ่งชี้","dashboard.indicator.editor.nameRequired":"กรุณากรอกชื่อตัวบ่งชี้","dashboard.indicator.editor.namePlaceholder":"กรุณากรอกชื่อตัวบ่งชี้","dashboard.indicator.editor.description":"คำอธิบายตัวบ่งชี้","dashboard.indicator.editor.descriptionPlaceholder":"โปรดป้อนคำอธิบายของตัวบ่งชี้ (ตัวเลือก)","dashboard.indicator.editor.code":"รหัสหลาม","dashboard.indicator.editor.codeRequired":"กรุณากรอกรหัสตัวบ่งชี้","dashboard.indicator.editor.codePlaceholder":"กรุณากรอกรหัสไพธอน","dashboard.indicator.editor.run":"วิ่ง","dashboard.indicator.editor.runHint":"คลิกปุ่มเรียกใช้เพื่อดูตัวอย่างเอฟเฟกต์ตัวบ่งชี้บนแผนภูมิเส้น K","dashboard.indicator.editor.guide":"คู่มือการพัฒนา","dashboard.indicator.editor.guideTitle":"คู่มือการพัฒนาตัวบ่งชี้ Python","dashboard.indicator.editor.save":"บันทึก","dashboard.indicator.editor.cancel":"ยกเลิก","dashboard.indicator.editor.unnamed":"ตัวบ่งชี้ที่ไม่มีชื่อ","dashboard.indicator.editor.publishToCommunity":"โพสต์ไปที่ชุมชน","dashboard.indicator.editor.publishToCommunityHint":"เมื่อเผยแพร่แล้ว ผู้ใช้รายอื่นจะสามารถดูและใช้ตัวบ่งชี้ของคุณในชุมชนได้","dashboard.indicator.editor.indicatorType":"ประเภทตัวบ่งชี้","dashboard.indicator.editor.indicatorTypeRequired":"โปรดเลือกประเภทตัวบ่งชี้","dashboard.indicator.editor.indicatorTypePlaceholder":"โปรดเลือกประเภทตัวบ่งชี้","dashboard.indicator.editor.previewImage":"ดูตัวอย่าง","dashboard.indicator.editor.uploadImage":"อัพโหลดรูปภาพ","dashboard.indicator.editor.previewImageHint":"ขนาดที่แนะนำ: 800x400 ไม่เกิน 2MB","dashboard.indicator.editor.pricing":"ราคาขาย (QDT)","dashboard.indicator.editor.pricingType.free":"ฟรี","dashboard.indicator.editor.pricingType.permanent":"ถาวร","dashboard.indicator.editor.pricingType.monthly":"การชำระเงินรายเดือน","dashboard.indicator.editor.price":"ราคา","dashboard.indicator.editor.priceRequired":"กรุณากรอกราคา","dashboard.indicator.editor.pricePlaceholder":"กรุณากรอกราคา","dashboard.indicator.editor.pricingHint":"แม้ว่าราคาของตัวบ่งชี้ฟรีจะเป็น 0 แต่แพลตฟอร์มจะให้รางวัลแก่คุณ (QDT) ตามการใช้ตัวบ่งชี้และอัตราการชมเชยของคุณ","dashboard.indicator.editor.aiGenerate":"รุ่นอัจฉริยะ","dashboard.indicator.editor.aiPromptPlaceholder":"บอกความคิดของคุณมาให้ฉัน แล้วฉันจะสร้างโค้ดตัวบ่งชี้ Python ให้กับคุณ","dashboard.indicator.editor.aiGenerateBtn":"AI สร้างโค้ด","dashboard.indicator.editor.aiPromptRequired":"กรุณากรอกความคิดของคุณ","dashboard.indicator.editor.aiGenerateSuccess":"การสร้างรหัสสำเร็จ","dashboard.indicator.editor.aiGenerateError":"การสร้างโค้ดล้มเหลว โปรดลองอีกครั้งในภายหลัง","dashboard.indicator.backtest.title":"ตัวบ่งชี้ย้อนกลับ","dashboard.indicator.backtest.config":"พารามิเตอร์การทดสอบย้อนกลับ","dashboard.indicator.backtest.startDate":"วันที่เริ่มต้น","dashboard.indicator.backtest.endDate":"วันที่สิ้นสุด","dashboard.indicator.backtest.selectStartDate":"เลือกวันที่เริ่มต้น","dashboard.indicator.backtest.selectEndDate":"เลือกวันที่สิ้นสุด","dashboard.indicator.backtest.startDateRequired":"โปรดเลือกวันที่เริ่มต้น","dashboard.indicator.backtest.endDateRequired":"โปรดเลือกวันที่สิ้นสุด","dashboard.indicator.backtest.initialCapital":"ทุนเริ่มต้น","dashboard.indicator.backtest.initialCapitalRequired":"กรุณากรอกเงินทุนเริ่มต้น","dashboard.indicator.backtest.commission":"ค่าธรรมเนียมการจัดการ","dashboard.indicator.backtest.leverage":"อัตราส่วนเลเวอเรจ","dashboard.indicator.backtest.tradeDirection":"ทิศทางการซื้อขาย","dashboard.indicator.backtest.longOnly":"ยาวไป","dashboard.indicator.backtest.shortOnly":"สั้น","dashboard.indicator.backtest.both":"สองทาง","dashboard.indicator.backtest.run":"เริ่มการทดสอบย้อนหลัง","dashboard.indicator.backtest.rerun":"ทดสอบย้อนหลังอีกครั้ง","dashboard.indicator.backtest.close":"ปิด","dashboard.indicator.backtest.running":"อยู่ระหว่างการทดสอบตัวบ่งชี้ย้อนกลับ...","dashboard.indicator.backtest.results":"ผลการทดสอบย้อนหลัง","dashboard.indicator.backtest.totalReturn":"ผลตอบแทนรวม","dashboard.indicator.backtest.annualReturn":"รายได้ต่อปี","dashboard.indicator.backtest.maxDrawdown":"การเบิกถอนสูงสุด","dashboard.indicator.backtest.sharpeRatio":"อัตราส่วนความคมชัด","dashboard.indicator.backtest.winRate":"อัตราการชนะ","dashboard.indicator.backtest.profitFactor":"อัตราส่วนกำไร-ขาดทุน","dashboard.indicator.backtest.totalTrades":"จำนวนธุรกรรม","dashboard.indicator.totalReturn":"ผลตอบแทนรวม","dashboard.indicator.annualReturn":"อัตราผลตอบแทนต่อปี","dashboard.indicator.maxDrawdown":"การเบิกถอนสูงสุด","dashboard.indicator.sharpeRatio":"อัตราส่วนความคมชัด","dashboard.indicator.winRate":"อัตราการชนะ","dashboard.indicator.profitFactor":"อัตราส่วนกำไร-ขาดทุน","dashboard.indicator.totalTrades":"จำนวนธุรกรรมทั้งหมด","dashboard.indicator.backtest.totalCommission":"ค่าธรรมเนียมการจัดการทั้งหมด","dashboard.indicator.backtest.equityCurve":"เส้นอัตราผลตอบแทน","dashboard.indicator.backtest.strategy":"ตัวชี้วัดรายได้","dashboard.indicator.backtest.benchmark":"ผลตอบแทนมาตรฐาน","dashboard.indicator.backtest.tradeHistory":"ประวัติการทำธุรกรรม","dashboard.indicator.backtest.tradeTime":"เวลา","dashboard.indicator.backtest.tradeType":"พิมพ์","dashboard.indicator.backtest.buy":"ซื้อ","dashboard.indicator.backtest.sell":"ขาย","dashboard.indicator.backtest.liquidation":"การชำระบัญชี","dashboard.indicator.backtest.openLong":"เปิดยาวๆ","dashboard.indicator.backtest.closeLong":"ปินตัว","dashboard.indicator.backtest.closeLongStop":"ใกล้ถึงระยะยาว (หยุดการสูญเสีย)","dashboard.indicator.backtest.closeLongProfit":"ปิดมากขึ้น (ทำกำไร)","dashboard.indicator.backtest.addLong":"เพิ่มตำแหน่งยาว","dashboard.indicator.backtest.openShort":"เปิดสั้น","dashboard.indicator.backtest.closeShort":"ว่างเปล่า","dashboard.indicator.backtest.closeShortStop":"ปิด (หยุดการสูญเสีย)","dashboard.indicator.backtest.closeShortProfit":"ปิด (ทำกำไร)","dashboard.indicator.backtest.addShort":"เพิ่มตำแหน่งสั้น","dashboard.indicator.backtest.price":"ราคา","dashboard.indicator.backtest.amount":"ปริมาณ","dashboard.indicator.backtest.balance":"ยอดเงินในบัญชี","dashboard.indicator.backtest.profit":"กำไรและขาดทุน","dashboard.indicator.backtest.success":"การทดสอบย้อนกลับเสร็จสมบูรณ์","dashboard.indicator.backtest.failed":"การทดสอบย้อนกลับล้มเหลว โปรดลองอีกครั้งในภายหลัง","dashboard.indicator.backtest.noIndicatorCode":"ไม่มีรหัสที่ทดสอบย้อนกลับได้สำหรับตัวบ่งชี้นี้","dashboard.indicator.backtest.noSymbol":"โปรดเลือกเป้าหมายการทำธุรกรรมก่อน","dashboard.indicator.backtest.dateRangeExceeded":"ช่วงเวลาการทดสอบย้อนหลังเกินขีดจำกัด: {timeframe} รอบสามารถทดสอบย้อนหลังได้สูงสุด {maxRange}","dashboard.indicator.backtest.dateRangeExceededDays":"Backtest range exceeds limit: {timeframe} max {maxRange} ({maxDays} days)","dashboard.indicator.backtest.metaLine":"Symbol: {symbol} | Market: {market} | Timeframe: {timeframe}","dashboard.indicator.backtest.savedRunId":"Backtest saved. Run ID: {id}","dashboard.indicator.backtest.prev":"Previous","dashboard.indicator.backtest.next":"Next","dashboard.indicator.backtest.hint.entryPctMax":"Max entry: {maxPct}% (reserve budget for future scale-ins)","dashboard.indicator.backtest.steps.strategy.title":"Strategy","dashboard.indicator.backtest.steps.strategy.desc":"Position sizing & risk controls","dashboard.indicator.backtest.steps.trading.title":"Trading settings","dashboard.indicator.backtest.steps.trading.desc":"Time range, capital, fees, leverage","dashboard.indicator.backtest.steps.results.title":"Results","dashboard.indicator.backtest.steps.results.desc":"Backtest output","dashboard.indicator.backtest.panel.risk":"Risk management (SL/TP/Trailing)","dashboard.indicator.backtest.panel.scale":"Scale in / DCA (trend & mean-reversion)","dashboard.indicator.backtest.panel.reduce":"Reduce position (trend & adverse)","dashboard.indicator.backtest.panel.position":"Position sizing","dashboard.indicator.backtest.field.stopLossPct":"Stop Loss (%)","dashboard.indicator.backtest.field.takeProfitPct":"Take Profit (%)","dashboard.indicator.backtest.field.trailingEnabled":"Trailing stop / take profit","dashboard.indicator.backtest.field.trailingStopPct":"Trailing drawdown (%)","dashboard.indicator.backtest.field.trailingActivationPct":"Trailing activation (%)","dashboard.indicator.backtest.field.slippage":"Slippage (%)","dashboard.indicator.backtest.field.trendAddEnabled":"Trend-following scale-in","dashboard.indicator.backtest.field.dcaAddEnabled":"Mean-reversion scale-in","dashboard.indicator.backtest.field.trendAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.dcaAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.trendAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.dcaAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.trendAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.dcaAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.trendReduceEnabled":"Trend reduce","dashboard.indicator.backtest.field.adverseReduceEnabled":"Adverse reduce","dashboard.indicator.backtest.field.trendReduceStepPct":"Trend trigger (%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"Adverse trigger (%)","dashboard.indicator.backtest.field.trendReduceSizePct":"Reduce size (% of position)","dashboard.indicator.backtest.field.adverseReduceSizePct":"Adverse reduce size (% of position)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"Max trend reduce times","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"Max adverse reduce times","dashboard.indicator.backtest.field.entryPct":"Entry size (% of capital)","dashboard.indicator.backtest.field.minOrderPct":"Min order size (% of capital) (optional)","dashboard.indicator.backtest.closeLongTrailing":"Close Long (Trailing)","dashboard.indicator.backtest.reduceLong":"Reduce Long","dashboard.indicator.backtest.closeShortTrailing":"Close Short (Trailing)","dashboard.indicator.backtest.reduceShort":"Reduce Short","dashboard.docs.title":"ศูนย์เอกสาร","dashboard.docs.search.placeholder":"ค้นหาเอกสาร...","dashboard.docs.category.all":"ทั้งหมด","dashboard.docs.category.guide":"คู่มือการพัฒนา","dashboard.docs.category.api":"เอกสารประกอบ API","dashboard.docs.category.tutorial":"บทช่วยสอน","dashboard.docs.category.faq":"คำถามที่พบบ่อย","dashboard.docs.featured.title":"เอกสารแนะนำ","dashboard.docs.featured.tag":"แนะนำ","dashboard.docs.list.views":"เรียกดู","dashboard.docs.list.author":"ผู้เขียน","dashboard.docs.list.empty":"ยังไม่มีเอกสาร","dashboard.docs.list.backToAll":"กลับไปที่เอกสารทั้งหมด","dashboard.docs.list.total":"เอกสารทั้งหมด {count}","dashboard.docs.detail.back":"กลับไปยังรายการเอกสาร","dashboard.docs.detail.updatedAt":"อัปเดตเมื่อ","dashboard.docs.detail.related":"เอกสารที่เกี่ยวข้อง","dashboard.docs.detail.notFound":"ไม่มีเอกสารอยู่","dashboard.docs.detail.error":"เอกสารไม่มีอยู่หรือถูกลบไปแล้ว","dashboard.docs.search.result":"ผลการค้นหา","dashboard.docs.search.keyword":"คำหลัก","community.filter.indicatorType":"ประเภทตัวบ่งชี้","community.filter.all":"ทั้งหมด","community.filter.other":"ตัวเลือกอื่นๆ","community.filter.pricing":"ประเภทการกำหนดราคา","community.filter.allPricing":"ราคาทั้งหมด","community.filter.sortBy":"จัดเรียงตาม","community.filter.search":"ค้นหา","community.filter.searchPlaceholder":"ค้นหาชื่อเมตริก","community.indicatorType.trend":"ประเภทเทรนด์","community.indicatorType.momentum":"ประเภทโมเมนตัม","community.indicatorType.volatility":"ความผันผวน","community.indicatorType.volume":"ปริมาณ","community.indicatorType.custom":"ปรับแต่ง","community.pricing.free":"ฟรี","community.pricing.paid":"จ่าย","community.sort.downloads":"ดาวน์โหลด","community.sort.rating":"คะแนน","community.sort.newest":"รุ่นล่าสุด","community.pagination.total":"ตัวชี้วัดทั้งหมด {total}","community.noDescription":"ยังไม่มีคำอธิบาย","community.detail.type":"พิมพ์","community.detail.pricing":"ราคา","community.detail.rating":"คะแนน","community.detail.downloads":"ดาวน์โหลด","community.detail.author":"ผู้เขียน","community.detail.description":"การแนะนำ","community.detail.detailContent":"คำอธิบายโดยละเอียด","community.detail.backtestStats":"สถิติการทดสอบย้อนหลัง","community.action.purchase":"ตัวบ่งชี้การซื้อ","community.action.addToMyIndicators":"เพิ่มไปยังตัวบ่งชี้ของฉัน","community.action.favorite":"เก็บรวบรวม","community.action.unfavorite":"ยกเลิกรายการโปรด","community.action.buyNow":"ซื้อเลย","community.action.renew":"ต่ออายุ","community.purchase.price":"ราคา","community.purchase.permanent":"ถาวร","community.purchase.monthly":"ดวงจันทร์","community.purchase.confirmBuy":"ยืนยันที่จะซื้อตัวบ่งชี้นี้ ({price} QDT)?","community.purchase.confirmRenew":"ยืนยันที่จะต่ออายุตัวบ่งชี้นี้ ({price} QDT/เดือน) หรือไม่","community.purchase.confirmFree":"ยืนยันเพื่อเพิ่มตัวบ่งชี้ฟรีนี้หรือไม่","community.purchase.confirmTitle":"ยืนยันการดำเนินการ","community.purchase.owned":"คุณได้ซื้อตัวบ่งชี้นี้ (ใช้ได้ถาวร)","community.purchase.ownIndicator":"นี่คือเมตริกที่คุณเผยแพร่","community.purchase.expired":"การสมัครของคุณหมดอายุแล้ว","community.purchase.expiresOn":"เวลาหมดอายุ: {date}","community.tabs.detail":"รายละเอียดตัวบ่งชี้","community.tabs.backtest":"ข้อมูลการทดสอบย้อนหลัง","community.tabs.ratings":"ความคิดเห็นของผู้ใช้","community.rating.myRating":"คะแนนของฉัน","community.rating.stars":"{count} ดาว","community.rating.commentPlaceholder":"แบ่งปันประสบการณ์ของคุณ...","community.rating.submit":"ส่งเรตติ้ง.","community.rating.modify":"ปรับปรุงใหม่","community.rating.saveModify":"บันทึกการเปลี่ยนแปลง","community.rating.cancel":"ยกเลิก","community.rating.selectRating":"โปรดเลือกการให้คะแนน","community.rating.success":"เรตติ้งสำเร็จ","community.rating.modifySuccess":"แก้ไขการตรวจสอบเรียบร้อยแล้ว","community.rating.failed":"การให้คะแนนล้มเหลว","community.rating.noRatings":"ยังไม่มีความคิดเห็น","community.backtest.note":"ข้อมูลข้างต้นเป็นผลการทดสอบย้อนกลับในอดีตและมีไว้เพื่อการอ้างอิงเท่านั้น และไม่ได้แสดงถึงรายได้ในอนาคต","community.backtest.noData":"ยังไม่มีข้อมูลย้อนหลัง","community.backtest.uploadHint":"ผู้เขียนยังไม่ได้อัพโหลดข้อมูล backtest","community.message.loadFailed":"ไม่สามารถโหลดรายการตัวบ่งชี้","community.message.purchaseProcessing":"กำลังประมวลผลคำขอซื้อ...","community.message.downloadSuccess":"เพิ่มเมตริกลงในรายการเมตริกของฉันแล้ว","community.message.favoriteSuccess":"รวบรวมสำเร็จ","community.message.unfavoriteSuccess":"ยกเลิกการรวบรวมเรียบร้อยแล้ว","community.message.operationSuccess":"การดำเนินงานประสบความสำเร็จ","community.message.operationFailed":"การดำเนินการล้มเหลว","community.banner.readOnly":"อ่านอย่างเดียว","community.banner.loginHint":"สำหรับการเข้าสู่ระบบหรือการลงทะเบียน กรุณาคลิกปุ่มเพื่อไปยังหน้าอิสระเพื่อหลีกเลี่ยงปัญหา CSRF","community.banner.jumpButton":"ไปที่เข้าสู่ระบบ/ลงทะเบียน","dashboard.totalEquity":"ส่วนของผู้ถือหุ้นทั้งหมด","dashboard.totalPnL":"กำไรและขาดทุนทั้งหมด","dashboard.aiStrategies":"กลยุทธ์เอไอ","dashboard.indicatorStrategies":"กลยุทธ์ตัวบ่งชี้","dashboard.running":"วิ่ง","dashboard.pnlHistory":"กำไรและขาดทุนในอดีต","dashboard.strategyPerformance":"อัตราส่วนกำไรและขาดทุนของกลยุทธ์","dashboard.recentTrades":"การทำธุรกรรมล่าสุด","dashboard.currentPositions":"ตำแหน่งปัจจุบัน","dashboard.table.time":"เวลา","dashboard.table.strategy":"ชื่อกรมธรรม์","dashboard.table.symbol":"เป้า","dashboard.table.type":"พิมพ์","dashboard.table.side":"ทิศทาง","dashboard.table.size":"เปิดดอกเบี้ย","dashboard.table.entryPrice":"ราคาเปิดเฉลี่ย","dashboard.table.price":"ราคา","dashboard.table.amount":"ปริมาณ","dashboard.table.profit":"กำไรและขาดทุน","dashboard.pendingOrders":"บันทึกการดำเนินการคำสั่งซื้อ","dashboard.totalOrders":"รวม {total} รายการ","dashboard.viewError":"ดูข้อผิดพลาด","dashboard.filled":"ดำเนินการแล้ว","dashboard.orderTable.time":"เวลาที่สร้าง","dashboard.orderTable.strategy":"กลยุทธ์","dashboard.orderTable.symbol":"คู่เทรด","dashboard.orderTable.signalType":"ประเภทสัญญาณ","dashboard.orderTable.amount":"จำนวน","dashboard.orderTable.price":"ราคาที่ดำเนินการ","dashboard.orderTable.status":"สถานะ","dashboard.orderTable.executedAt":"เวลาที่ดำเนินการ","dashboard.signalType.openLong":"เปิด Long","dashboard.signalType.openShort":"เปิด Short","dashboard.signalType.closeLong":"ปิด Long","dashboard.signalType.closeShort":"ปิด Short","dashboard.signalType.addLong":"เพิ่ม Long","dashboard.signalType.addShort":"เพิ่ม Short","dashboard.status.pending":"รอดำเนินการ","dashboard.status.processing":"กำลังดำเนินการ","dashboard.status.completed":"เสร็จสิ้น","dashboard.status.failed":"ล้มเหลว","dashboard.status.cancelled":"ยกเลิกแล้ว","dashboard.table.pnl":"กำไรหรือขาดทุนที่ยังไม่เกิดขึ้นจริง","form.basic-form.basic.title":"แบบฟอร์มพื้นฐาน","form.basic-form.basic.description":"หน้าแบบฟอร์มใช้เพื่อรวบรวมหรือตรวจสอบข้อมูลจากผู้ใช้ โดยทั่วไปจะใช้แบบฟอร์มพื้นฐานในสถานการณ์จำลองที่มีรายการข้อมูลน้อย","form.basic-form.title.label":"ชื่อ","form.basic-form.title.placeholder":"ตั้งชื่อให้เป้าหมาย","form.basic-form.title.required":"กรุณากรอกชื่อ","form.basic-form.date.label":"วันที่เริ่มต้นและสิ้นสุด","form.basic-form.placeholder.start":"วันที่เริ่มต้น","form.basic-form.placeholder.end":"วันที่สิ้นสุด","form.basic-form.date.required":"กรุณาเลือกวันที่เริ่มต้นและสิ้นสุด","form.basic-form.goal.label":"คำอธิบายเป้าหมาย","form.basic-form.goal.placeholder":"กรุณาป้อนเป้าหมายการทำงานแบบเป็นขั้นตอนของคุณ","form.basic-form.goal.required":"กรุณากรอกคำอธิบายเป้าหมาย","form.basic-form.standard.label":"วัด","form.basic-form.standard.placeholder":"กรุณากรอกตัวชี้วัด","form.basic-form.standard.required":"กรุณากรอกตัวชี้วัด","form.basic-form.client.label":"ลูกค้า","form.basic-form.client.required":"โปรดอธิบายลูกค้าที่คุณให้บริการ","form.basic-form.label.tooltip":"ผู้รับบริการเป้าหมาย","form.basic-form.client.placeholder":"โปรดอธิบายลูกค้าที่คุณให้บริการ ลูกค้าภายในโดยตรง @ชื่อ/หมายเลขงาน","form.basic-form.invites.label":"เชิญผู้วิจารณ์","form.basic-form.invites.placeholder":"กรุณา @name/หมายเลขพนักงาน โดยตรง คุณสามารถเชิญได้สูงสุด 5 คน","form.basic-form.weight.label":"น้ำหนัก","form.basic-form.weight.placeholder":"กรุณาเข้า","form.basic-form.public.label":"กำหนดเป้าหมายสาธารณะ","form.basic-form.label.help":"ลูกค้าและผู้ตรวจสอบจะถูกแชร์โดยค่าเริ่มต้น","form.basic-form.radio.public":"สาธารณะ","form.basic-form.radio.partially-public":"เปิดเผยต่อสาธารณะบางส่วน","form.basic-form.radio.private":"ส่วนตัว","form.basic-form.publicUsers.placeholder":"เปิดให้","form.basic-form.option.A":"เพื่อนร่วมงาน 1","form.basic-form.option.B":"เพื่อนร่วมงาน 2","form.basic-form.option.C":"เพื่อนร่วมงานสามคน","form.basic-form.email.required":"กรุณากรอกที่อยู่อีเมลของคุณ!","form.basic-form.email.wrong-format":"รูปแบบที่อยู่อีเมลไม่ถูกต้อง!","form.basic-form.userName.required":"กรุณากรอกชื่อผู้ใช้!","form.basic-form.password.required":"กรุณากรอกรหัสผ่านของคุณ!","form.basic-form.password.twice":"รหัสผ่านที่ป้อนสองครั้งไม่ตรงกัน!","form.basic-form.strength.msg":"กรุณากรอกอย่างน้อย 6 ตัวอักษร กรุณาอย่าใช้รหัสผ่านที่คาดเดาได้ง่าย","form.basic-form.strength.strong":"ความแข็งแกร่ง: แข็งแกร่ง","form.basic-form.strength.medium":"ความแข็งแกร่ง: ปานกลาง","form.basic-form.strength.short":"ความแรง: สั้นเกินไป","form.basic-form.confirm-password.required":"กรุณายืนยันรหัสผ่านของคุณ!","form.basic-form.phone-number.required":"กรุณากรอกหมายเลขโทรศัพท์มือถือของคุณ!","form.basic-form.phone-number.wrong-format":"รูปแบบหมายเลขโทรศัพท์มือถือผิด!","form.basic-form.verification-code.required":"กรุณากรอกรหัสยืนยัน!","form.basic-form.form.get-captcha":"รับรหัสยืนยัน","form.basic-form.captcha.second":"ที่สอง","form.basic-form.form.optional":"(ไม่จำเป็น)","form.basic-form.form.submit":"ส่ง","form.basic-form.form.save":"บันทึก","form.basic-form.email.placeholder":"จดหมาย","form.basic-form.password.placeholder":"รหัสผ่านอย่างน้อย 6 ตัวอักษร คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่","form.basic-form.confirm-password.placeholder":"ยืนยันรหัสผ่าน","form.basic-form.phone-number.placeholder":"หมายเลขโทรศัพท์","form.basic-form.verification-code.placeholder":"รหัสยืนยัน","result.success.title":"ส่งสำเร็จ","result.success.description":'หน้าผลลัพธ์การส่งใช้เพื่อตอบกลับผลการประมวลผลของชุดงานการดำเนินงาน หากเป็นเพียงการดำเนินการง่ายๆ ให้ใช้ข้อความตอบรับพร้อมท์ทั่วโลกพื้นที่ข้อความนี้สามารถแสดงคำแนะนำเสริมง่ายๆ หากจำเป็นต้องแสดง "เอกสาร" พื้นที่สีเทาด้านล่างสามารถแสดงเนื้อหาที่ซับซ้อนมากขึ้นได้',"result.success.operate-title":"ชื่อโครงการ","result.success.operate-id":"รหัสโครงการ","result.success.principal":"บุคคลที่รับผิดชอบ","result.success.operate-time":"เวลาที่มีประสิทธิภาพ","result.success.step1-title":"สร้างโครงการ","result.success.step1-operator":"คู ลิลี่","result.success.step2-title":"การทบทวนเบื้องต้นของแผนก","result.success.step2-operator":"โจว เหมาเหมา","result.success.step2-extra":"ด่วน","result.success.step3-title":"การตรวจสอบทางการเงิน","result.success.step4-title":"เสร็จ","result.success.btn-return":"กลับไปที่รายการ","result.success.btn-project":"ดูรายการ","result.success.btn-print":"พิมพ์","result.fail.error.title":"การส่งล้มเหลว","result.fail.error.description":"โปรดตรวจสอบและแก้ไขข้อมูลต่อไปนี้ก่อนที่จะส่งอีกครั้ง","result.fail.error.hint-title":"เนื้อหาที่คุณส่งมีข้อผิดพลาดต่อไปนี้:","result.fail.error.hint-text1":"บัญชีของคุณถูกระงับ","result.fail.error.hint-btn1":"ละลายทันที","result.fail.error.hint-text2":"บัญชีของคุณยังไม่มีสิทธิ์สมัคร","result.fail.error.hint-btn2":"อัพเกรดตอนนี้","result.fail.error.btn-text":"กลับไปแก้ไข","account.settings.menuMap.custom":"การปรับเปลี่ยนในแบบของคุณ","account.settings.menuMap.binding":"การผูกบัญชี","account.settings.basic.avatar":"อวตาร","account.settings.basic.change-avatar":"เปลี่ยนอวตาร","account.settings.basic.email":"จดหมาย","account.settings.basic.email-message":"กรุณากรอกอีเมล์ของคุณ!","account.settings.basic.nickname":"ชื่อนิค","account.settings.basic.nickname-message":"กรุณากรอกชื่อเล่นของคุณ!","account.settings.basic.profile":"ประวัติโดยย่อ","account.settings.basic.profile-message":"กรุณากรอกรายละเอียดส่วนตัวของคุณ!","account.settings.basic.profile-placeholder":"ประวัติโดยย่อ","account.settings.basic.country":"ประเทศ/ภูมิภาค","account.settings.basic.country-message":"กรุณากรอกประเทศหรือภูมิภาคของคุณ!","account.settings.basic.geographic":"จังหวัดและเมือง","account.settings.basic.geographic-message":"กรุณากรอกจังหวัดและเมืองของคุณ!","account.settings.basic.address":"ที่อยู่ถนน","account.settings.basic.address-message":"กรุณากรอกที่อยู่ของคุณ!","account.settings.basic.phone":"เบอร์ติดต่อ","account.settings.basic.phone-message":"กรุณากรอกหมายเลขติดต่อของคุณ!","account.settings.basic.update":"อัพเดตข้อมูลพื้นฐาน","account.settings.basic.update.success":"อัปเดตข้อมูลพื้นฐานสำเร็จ","account.settings.security.strong":"ทรงพลัง","account.settings.security.medium":"กลาง","account.settings.security.weak":"อ่อนแอ","account.settings.security.password":"รหัสผ่านบัญชี","account.settings.security.password-description":"ความยากของรหัสผ่านปัจจุบัน:","account.settings.security.phone":"การรักษาความปลอดภัยโทรศัพท์มือถือ","account.settings.security.phone-description":"โทรศัพท์มือถือที่ผูกไว้แล้ว:","account.settings.security.question":"ปัญหาด้านความปลอดภัย","account.settings.security.question-description":"ไม่มีการตั้งค่าคำถามเพื่อความปลอดภัย ซึ่งสามารถปกป้องความปลอดภัยของบัญชีได้อย่างมีประสิทธิภาพ","account.settings.security.email":"ผูกอีเมล","account.settings.security.email-description":"ที่อยู่อีเมลที่ถูกผูกไว้แล้ว:","account.settings.security.mfa":"อุปกรณ์เอ็มเอฟเอ","account.settings.security.mfa-description":"อุปกรณ์ MFA ไม่ได้ถูกผูกไว้ หลังจากผูกแล้วสามารถยืนยันอีกครั้งได้","account.settings.security.modify":"ปรับปรุงใหม่","account.settings.security.set":"ตั้งค่า","account.settings.security.bind":"ผูกพัน","account.settings.binding.taobao":"ผูก Taobao","account.settings.binding.taobao-description":"บัญชี Taobao ไม่ได้ถูกผูกไว้ในขณะนี้","account.settings.binding.alipay":"ผูกอาลีเพย์","account.settings.binding.alipay-description":"บัญชี Alipay ไม่ได้ถูกผูกไว้ในขณะนี้","account.settings.binding.dingding":"การผูกมัด DingTalk","account.settings.binding.dingding-description":"ขณะนี้ไม่มีบัญชี DingTalk ถูกผูกไว้","account.settings.binding.bind":"ผูกพัน","account.settings.notification.password":"รหัสผ่านบัญชี","account.settings.notification.password-description":"ข้อความจากผู้ใช้รายอื่นจะได้รับแจ้งในรูปแบบของข้อความไซต์","account.settings.notification.messages":"ข้อความของระบบ","account.settings.notification.messages-description":"ข้อความของระบบจะได้รับแจ้งในรูปแบบของข้อความไซต์","account.settings.notification.todo":"งานที่ต้องทำ","account.settings.notification.todo-description":"งานที่ต้องทำจะได้รับแจ้งในรูปแบบของข้อความในไซต์","account.settings.settings.open":"เปิด","account.settings.settings.close":"ปิด","trading-assistant.title":"ผู้ช่วยการซื้อขาย","trading-assistant.strategyList":"รายการกลยุทธ์","trading-assistant.createStrategy":"สร้างนโยบาย","trading-assistant.noStrategy":"ยังไม่มีกลยุทธ์","trading-assistant.selectStrategy":"โปรดเลือกกลยุทธ์จากด้านซ้ายเพื่อดูรายละเอียด","trading-assistant.startStrategy":"กลยุทธ์การเปิดตัว","trading-assistant.stopStrategy":"กลยุทธ์การหยุด","trading-assistant.editStrategy":"กลยุทธ์ด้านบรรณาธิการ","trading-assistant.deleteStrategy":"ลบนโยบาย","trading-assistant.status.running":"วิ่ง","trading-assistant.status.stopped":"หยุดแล้ว","trading-assistant.status.error":"ความผิดพลาด","trading-assistant.strategyType.IndicatorStrategy":"กลยุทธ์ตัวบ่งชี้ทางเทคนิค","trading-assistant.strategyType.PromptBasedStrategy":"กลยุทธ์คำคิว","trading-assistant.strategyType.GridStrategy":"กลยุทธ์กริด","trading-assistant.tabs.tradingRecords":"ประวัติการทำธุรกรรม","trading-assistant.tabs.positions":"บันทึกตำแหน่ง","trading-assistant.tabs.equityCurve":"เส้นส่วนของผู้ถือหุ้น","trading-assistant.form.step1":"เลือกตัวบ่งชี้","trading-assistant.form.step2":"การกำหนดค่าการแลกเปลี่ยน","trading-assistant.form.step3":"พารามิเตอร์กลยุทธ์","trading-assistant.form.indicator":"เลือกตัวบ่งชี้","trading-assistant.form.indicatorHint":"คุณสามารถเลือกได้เฉพาะตัวบ่งชี้ทางเทคนิคที่คุณซื้อหรือสร้างขึ้นเท่านั้น","trading-assistant.form.qdtCostHints":"การใช้กลยุทธ์จะใช้ QDT โปรดตรวจสอบให้แน่ใจว่าบัญชีมียอดคงเหลือ QDT เพียงพอ","trading-assistant.form.indicatorDescription":"คำอธิบายตัวบ่งชี้","trading-assistant.form.noDescription":"ยังไม่มีคำอธิบาย","trading-assistant.form.exchange":"เลือกการแลกเปลี่ยน","trading-assistant.form.apiKey":"คีย์ API","trading-assistant.form.secretKey":"รหัสลับ","trading-assistant.form.passphrase":"ข้อความรหัสผ่าน","trading-assistant.form.testConnection":"ทดสอบการเชื่อมต่อ","trading-assistant.form.strategyName":"ชื่อกรมธรรม์","trading-assistant.form.symbol":"คู่การซื้อขาย","trading-assistant.form.symbolHint":"ขณะนี้รองรับเฉพาะคู่การซื้อขายสกุลเงินดิจิทัลเท่านั้น","trading-assistant.form.initialCapital":"จำนวนเงินลงทุน","trading-assistant.form.marketType":"ประเภทตลาด","trading-assistant.form.marketTypeFutures":"สัญญา","trading-assistant.form.marketTypeSpot":"จุดสินค้า","trading-assistant.form.marketTypeHint":"สัญญารองรับการซื้อขายสองทางและเลเวอเรจ ในขณะที่สปอตรองรับเฉพาะตำแหน่งซื้อและเลเวอเรจคงที่ที่ 1x","trading-assistant.form.leverage":"ใช้ประโยชน์หลายอย่าง","trading-assistant.form.leverageHint":"สัญญา: 1-125 ครั้ง, จุด: แก้ไข 1 ครั้ง","trading-assistant.form.spotLeverageFixed":"เลเวอเรจการซื้อขายสปอตคงที่ที่ 1x","trading-assistant.form.spotOnlyLongHint":"การซื้อขายแบบสปอตรองรับเฉพาะตำแหน่งซื้อเท่านั้น","trading-assistant.form.tradeDirection":"ทิศทางการซื้อขาย","trading-assistant.form.tradeDirectionLong":"ยาวเท่านั้น","trading-assistant.form.tradeDirectionShort":"สั้นเท่านั้น","trading-assistant.form.tradeDirectionBoth":"ธุรกรรมสองทาง","trading-assistant.form.timeframe":"ช่วงเวลา","trading-assistant.form.klinePeriod":"ช่วงเวลา K-Line","trading-assistant.form.timeframe1m":"1 นาที","trading-assistant.form.timeframe5m":"5 นาที","trading-assistant.form.timeframe15m":"15 นาที","trading-assistant.form.timeframe30m":"30 นาที","trading-assistant.form.timeframe1H":"1 ชั่วโมง","trading-assistant.form.timeframe4H":"4 ชั่วโมง","trading-assistant.form.timeframe1D":"1 วัน","trading-assistant.form.selectStrategyType":"เลือกประเภทกลยุทธ์","trading-assistant.form.indicatorStrategy":"กลยุทธ์ตัวบ่งชี้","trading-assistant.form.indicatorStrategyDesc":"กลยุทธ์การซื้อขายอัตโนมัติตามตัวบ่งชี้ทางเทคนิค","trading-assistant.form.aiStrategy":"กลยุทธ์ AI","trading-assistant.form.aiStrategyDesc":"กลยุทธ์การซื้อขายอัตโนมัติตามการตัดสินใจอัจฉริยะของ AI","trading-assistant.form.enableAiFilter":"เปิดใช้งานตัวกรองการตัดสินใจอัจฉริยะ AI","trading-assistant.form.enableAiFilterHint":"เมื่อเปิดใช้งาน สัญญาณตัวบ่งชี้จะถูกกรองโดย AI เพื่อปรับปรุงคุณภาพการซื้อขาย","trading-assistant.form.aiFilterPrompt":"ข้อความแจ้งแบบกำหนดเอง","trading-assistant.form.aiFilterPromptHint":"ให้คำแนะนำแบบกำหนดเองสำหรับการกรอง AI เว้นว่างไว้เพื่อใช้ค่าเริ่มต้นของระบบ","trading-assistant.validation.strategyTypeRequired":"กรุณาเลือกประเภทกลยุทธ์","trading-assistant.form.advancedSettings":"การตั้งค่าขั้นสูง","trading-assistant.form.orderMode":"โหมดการสั่งซื้อ","trading-assistant.form.orderModeMaker":"ผู้สร้าง","trading-assistant.form.orderModeTaker":"ราคาตลาด (เทคเกอร์)","trading-assistant.form.orderModeHint":"โหมดคำสั่งซื้อที่รอดำเนินการใช้คำสั่งซื้อแบบจำกัดและค่าธรรมเนียมการจัดการต่ำกว่า โหมดราคาตลาดจะดำเนินการทันทีและค่าธรรมเนียมการจัดการจะสูงขึ้น","trading-assistant.form.makerWaitSec":"เวลารอสำหรับคำสั่งซื้อที่รอดำเนินการ (วินาที)","trading-assistant.form.makerWaitSecHint":"เวลาที่ต้องรอการทำธุรกรรมหลังจากทำการสั่งซื้อ ยกเลิกและลองอีกครั้งหลังจากหมดเวลา","trading-assistant.form.makerRetries":"จำนวนการลองใหม่สำหรับคำสั่งซื้อที่รอดำเนินการ","trading-assistant.form.makerRetriesHint":"จำนวนครั้งสูงสุดในการลองใหม่เมื่อไม่ได้ดำเนินการคำสั่งซื้อที่รอดำเนินการ","trading-assistant.form.fallbackToMarket":"คำสั่งซื้อที่รอดำเนินการล้มเหลวและราคาตลาดถูกลดระดับลง","trading-assistant.form.fallbackToMarketHint":"เมื่อการเปิด/ปิดคำสั่งซื้อที่รอดำเนินการไม่เสร็จสมบูรณ์ ควรดาวน์เกรดเป็นคำสั่งซื้อในตลาดเพื่อให้แน่ใจว่าธุรกรรมจะเสร็จสมบูรณ์หรือไม่","trading-assistant.form.marginMode":"โหมดระยะขอบ","trading-assistant.form.marginModeCross":"โกดังเต็ม","trading-assistant.form.marginModeIsolated":"ตำแหน่งที่โดดเดี่ยว","trading-assistant.form.stopLossPct":"อัตราการสูญเสียหยุด (%)","trading-assistant.form.stopLossPctHint":"ตั้งค่าเปอร์เซ็นต์การหยุดการขาดทุน 0 หมายถึงไม่ได้เปิดใช้งานการหยุดการขาดทุน","trading-assistant.form.takeProfitPct":"อัตราส่วนการทำกำไร (%)","trading-assistant.form.takeProfitPctHint":"ตั้งค่าเปอร์เซ็นต์การทำกำไร 0 หมายถึงปิดการใช้งานการทำกำไร","trading-assistant.form.signalMode":"โหมดสัญญาณ","trading-assistant.form.signalModeConfirmed":"ยืนยันโหมด","trading-assistant.form.signalModeAggressive":"โหมดก้าวร้าว","trading-assistant.form.signalModeHint":"โหมดการยืนยัน: ตรวจสอบเฉพาะเส้น K ที่เสร็จสมบูรณ์เท่านั้น โหมดก้าวร้าว: ตรวจสอบการสร้างเส้น K ด้วย","trading-assistant.form.cancel":"ยกเลิก","trading-assistant.form.prev":"ขั้นตอนก่อนหน้า","trading-assistant.form.next":"ขั้นตอนต่อไป","trading-assistant.form.confirmCreate":"ยืนยันการสร้าง","trading-assistant.form.confirmEdit":"ยืนยันการเปลี่ยนแปลง","trading-assistant.messages.createSuccess":"สร้างกลยุทธ์สำเร็จแล้ว","trading-assistant.messages.createFailed":"ไม่สามารถสร้างนโยบายได้","trading-assistant.messages.updateSuccess":"อัปเดตนโยบายสำเร็จแล้ว","trading-assistant.messages.updateFailed":"อัปเดตนโยบายไม่สำเร็จ","trading-assistant.messages.deleteSuccess":"ลบนโยบายสำเร็จแล้ว","trading-assistant.messages.deleteFailed":"ลบนโยบายล้มเหลว","trading-assistant.messages.startSuccess":"กลยุทธ์เริ่มต้นได้สำเร็จ","trading-assistant.messages.startFailed":"ไม่สามารถเริ่มนโยบายได้","trading-assistant.messages.stopSuccess":"กลยุทธ์หยุดสำเร็จ","trading-assistant.messages.stopFailed":"กลยุทธ์หยุดล้มเหลว","trading-assistant.messages.loadFailed":"ไม่สามารถรับรายการนโยบาย","trading-assistant.messages.runningWarning":"กลยุทธ์กำลังทำงานอยู่ โปรดหยุดกลยุทธ์ก่อนที่จะแก้ไข","trading-assistant.messages.deleteConfirmWithName":'คุณแน่ใจหรือไม่ว่าต้องการลบนโยบาย "{name}" การดำเนินการนี้ไม่สามารถย้อนกลับได้',"trading-assistant.messages.deleteConfirm":"คุณแน่ใจหรือไม่ว่าต้องการลบนโยบายนี้การดำเนินการนี้ไม่สามารถย้อนกลับได้","trading-assistant.messages.loadTradesFailed":"ไม่สามารถรับบันทึกธุรกรรมได้","trading-assistant.messages.loadPositionsFailed":"ไม่สามารถรับบันทึกตำแหน่งได้","trading-assistant.messages.loadEquityFailed":"ไม่สามารถรับเส้นโค้งส่วนของผู้ถือหุ้นได้","trading-assistant.messages.loadIndicatorsFailed":"ไม่สามารถโหลดรายการตัวบ่งชี้ โปรดลองอีกครั้งในภายหลัง","trading-assistant.messages.spotLimitations":"การซื้อขายแบบสปอตได้รับการตั้งค่าโดยอัตโนมัติเป็นระยะยาวเท่านั้น เลเวอเรจ 1 เท่า","trading-assistant.messages.autoFillApiConfig":"การกำหนดค่า API ในอดีตของการแลกเปลี่ยนได้รับการเติมข้อมูลโดยอัตโนมัติ","trading-assistant.placeholders.selectIndicator":"โปรดเลือกตัวบ่งชี้","trading-assistant.placeholders.selectExchange":"กรุณาเลือกการแลกเปลี่ยน","trading-assistant.placeholders.inputApiKey":"กรุณากรอกคีย์ API","trading-assistant.placeholders.inputSecretKey":"กรุณากรอกรหัสลับ","trading-assistant.placeholders.inputPassphrase":"กรุณากรอกรหัสผ่าน","trading-assistant.placeholders.inputStrategyName":"โปรดป้อนชื่อนโยบาย","trading-assistant.placeholders.selectSymbol":"กรุณาเลือกคู่การซื้อขาย","trading-assistant.placeholders.selectTimeframe":"โปรดเลือกช่วงเวลา","trading-assistant.placeholders.selectKlinePeriod":"โปรดเลือกช่วงเวลา K-Line","trading-assistant.placeholders.inputAiFilterPrompt":"กรุณาใส่ข้อความแจ้งแบบกำหนดเอง (ไม่บังคับ)","trading-assistant.validation.indicatorRequired":"โปรดเลือกตัวบ่งชี้","trading-assistant.validation.exchangeRequired":"กรุณาเลือกการแลกเปลี่ยน","trading-assistant.validation.apiKeyRequired":"กรุณากรอกคีย์ API","trading-assistant.validation.secretKeyRequired":"กรุณากรอกรหัสลับ","trading-assistant.validation.passphraseRequired":"กรุณากรอกรหัสผ่าน","trading-assistant.validation.exchangeConfigIncomplete":"กรุณากรอกข้อมูลการกำหนดค่าการแลกเปลี่ยนให้ครบถ้วน","trading-assistant.validation.testConnectionRequired":'กรุณาคลิกปุ่ม "ทดสอบการเชื่อมต่อ" และตรวจสอบให้แน่ใจว่าการเชื่อมต่อสำเร็จ',"trading-assistant.validation.testConnectionFailed":"การทดสอบการเชื่อมต่อล้มเหลว กรุณาตรวจสอบการกำหนดค่าและทดสอบอีกครั้ง","trading-assistant.validation.credentialRequired":"กรุณาเพิ่มและทดสอบข้อมูลประจำตัวของตลาดแลกเปลี่ยนในศูนย์ส่วนตัวก่อน","trading-assistant.validation.strategyNameRequired":"โปรดป้อนชื่อนโยบาย","trading-assistant.validation.symbolRequired":"กรุณาเลือกคู่การซื้อขาย","trading-assistant.validation.initialCapitalRequired":"กรุณากรอกจำนวนเงินลงทุน","trading-assistant.validation.leverageRequired":"กรุณากรอกอัตราส่วนเลเวอเรจ","trading-assistant.table.time":"เวลา","trading-assistant.table.type":"พิมพ์","trading-assistant.table.price":"ราคา","trading-assistant.table.amount":"ปริมาณ","trading-assistant.table.value":"จำนวน","trading-assistant.table.commission":"ค่าธรรมเนียมการจัดการ","trading-assistant.table.symbol":"คู่การซื้อขาย","trading-assistant.table.side":"ทิศทาง","trading-assistant.table.size":"ปริมาณตำแหน่ง","trading-assistant.table.entryPrice":"ราคาเปิด","trading-assistant.table.currentPrice":"ราคาปัจจุบัน","trading-assistant.table.unrealizedPnl":"กำไรหรือขาดทุนที่ยังไม่เกิดขึ้นจริง","trading-assistant.table.pnlPercent":"อัตราส่วนกำไรและขาดทุน","trading-assistant.table.buy":"ซื้อ","trading-assistant.table.sell":"ขาย","trading-assistant.table.long":"ยาวไป","trading-assistant.table.short":"สั้น","trading-assistant.table.noPositions":"ยังไม่มีตำแหน่ง","trading-assistant.detail.title":"รายละเอียดกลยุทธ์","trading-assistant.detail.strategyName":"ชื่อกรมธรรม์","trading-assistant.detail.strategyType":"ประเภทกลยุทธ์","trading-assistant.detail.status":"สถานะ","trading-assistant.detail.tradingMode":"รูปแบบการซื้อขาย","trading-assistant.detail.exchange":"แลกเปลี่ยน","trading-assistant.detail.initialCapital":"ทุนเริ่มต้น","trading-assistant.detail.totalInvestment":"จำนวนเงินลงทุนทั้งหมด","trading-assistant.detail.currentEquity":"มูลค่าสุทธิในปัจจุบัน","trading-assistant.detail.totalPnl":"กำไรและขาดทุนทั้งหมด","trading-assistant.detail.indicatorName":"ชื่อตัวบ่งชี้","trading-assistant.detail.maxLeverage":"เลเวอเรจสูงสุด","trading-assistant.detail.decideInterval":"ช่วงการตัดสินใจ","trading-assistant.detail.symbols":"วัตถุธุรกรรม","trading-assistant.detail.createdAt":"เวลาสร้าง","trading-assistant.detail.updatedAt":"เวลาอัปเดต","trading-assistant.detail.llmConfig":"การกำหนดค่าโมเดล AI","trading-assistant.detail.exchangeConfig":"การกำหนดค่าการแลกเปลี่ยน","trading-assistant.detail.provider":"ผู้ให้บริการ","trading-assistant.detail.modelId":"รหัสรุ่น","trading-assistant.detail.close":"ปิด","trading-assistant.detail.loadFailed":"ไม่สามารถรับรายละเอียดนโยบายได้","trading-assistant.equity.noData":"ยังไม่มีข้อมูลมูลค่าสุทธิ","trading-assistant.equity.equity":"มูลค่าสุทธิ","trading-assistant.exchange.tradingMode":"รูปแบบการซื้อขาย","trading-assistant.exchange.virtual":"การซื้อขายจำลอง","trading-assistant.exchange.live":"การทำธุรกรรมจริง","trading-assistant.exchange.selectExchange":"เลือกการแลกเปลี่ยน","trading-assistant.exchange.walletAddress":"ที่อยู่กระเป๋าเงิน","trading-assistant.exchange.walletAddressPlaceholder":"กรุณากรอกที่อยู่กระเป๋าเงินของคุณ (เริ่มต้นด้วย 0x)","trading-assistant.exchange.privateKey":"รหัสส่วนตัว","trading-assistant.exchange.privateKeyPlaceholder":"กรุณากรอกรหัสส่วนตัว (64 ตัวอักษร)","trading-assistant.exchange.testConnection":"ทดสอบการเชื่อมต่อ","trading-assistant.exchange.connectionSuccess":"การเชื่อมต่อสำเร็จ","trading-assistant.exchange.connectionFailed":"การเชื่อมต่อล้มเหลว","trading-assistant.exchange.testFailed":"การทดสอบการเชื่อมต่อล้มเหลว","trading-assistant.exchange.fillComplete":"กรุณากรอกข้อมูลการกำหนดค่าการแลกเปลี่ยนให้ครบถ้วน","trading-assistant.strategyTypeOptions.ai":"กลยุทธ์ที่ขับเคลื่อนด้วย AI","trading-assistant.strategyTypeOptions.indicator":"กลยุทธ์ตัวบ่งชี้ทางเทคนิค","trading-assistant.strategyTypeOptions.aiDeveloping":"ฟังก์ชันกลยุทธ์ที่ขับเคลื่อนด้วย AI อยู่ระหว่างการพัฒนา ดังนั้นโปรดคอยติดตาม","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"คุณสมบัติกลยุทธ์ที่ขับเคลื่อนด้วย AI กำลังอยู่ในการพัฒนา","trading-assistant.indicatorType.trend":"แนวโน้ม","trading-assistant.indicatorType.momentum":"โมเมนตัม","trading-assistant.indicatorType.volatility":"ความผันผวน","trading-assistant.indicatorType.volume":"ปริมาณ","trading-assistant.indicatorType.custom":"ปรับแต่ง","trading-assistant.exchangeNames":{okx:"โอเคเอ็กซ์",binance:"ไบแนนซ์",hyperliquid:"ไฮเปอร์ลิควิด",blockchaincom:"Blockchain.com",coinbaseexchange:"คอยน์เบส",gate:"Gate.io",mexc:"เม็กซิโก",kraken:"คราเคน",bitfinex:"Bitfinex",bybit:"บายบิต",kucoin:"คูคอยน์",huobi:"หั่วปี้",bitget:"บิทเก็ต",bitmex:"BitMEX",deribit:"อนุมาน",phemex:"ฟีเม็กซ์",bitmart:"บิตมาร์ท",bitstamp:"บิตสแตมป์",bittrex:"บิทเทร็กซ์",poloniex:"โปโลนีกซ์",gemini:"ราศีเมถุน",cryptocom:"Crypto.com",bitflyer:"บิตฟลายเออร์",upbit:"อัพบิต",bithumb:"บิธัมบ์",coinone:"โคโนเน่",zb:"ซีบี",lbank:"แอลแบงค์",bibox:"ไบบ็อกซ์",bigone:"บิ๊กวัน",bitrue:"บิตทรู",coinex:"คอยน์เอ็กซ์",digifinex:"DigiFinex",ftx:"เอฟทีเอ็กซ์",ftxus:"FTX สหรัฐอเมริกา",binanceus:"Binance สหรัฐอเมริกา",binancecoinm:"Binance COIN-M",binanceusdm:"Binance USDⓈ-M",deepcoin:"ดีพคอยน์"},"ai-trading-assistant.title":"ผู้ช่วยการซื้อขาย AI","ai-trading-assistant.strategyList":"รายการกลยุทธ์","ai-trading-assistant.createStrategy":"สร้างนโยบาย","ai-trading-assistant.noStrategy":"ยังไม่มีกลยุทธ์","ai-trading-assistant.selectStrategy":"โปรดเลือกกลยุทธ์จากด้านซ้ายเพื่อดูรายละเอียด","ai-trading-assistant.startStrategy":"กลยุทธ์การเปิดตัว","ai-trading-assistant.stopStrategy":"กลยุทธ์การหยุด","ai-trading-assistant.editStrategy":"กลยุทธ์ด้านบรรณาธิการ","ai-trading-assistant.deleteStrategy":"ลบนโยบาย","ai-trading-assistant.status.running":"วิ่ง","ai-trading-assistant.status.stopped":"หยุดแล้ว","ai-trading-assistant.status.error":"ความผิดพลาด","ai-trading-assistant.tabs.tradingRecords":"ประวัติการทำธุรกรรม","ai-trading-assistant.tabs.positions":"บันทึกตำแหน่ง","ai-trading-assistant.tabs.aiDecisions":"บันทึกการตัดสินใจของ AI","ai-trading-assistant.tabs.equityCurve":"เส้นส่วนของผู้ถือหุ้น","ai-trading-assistant.form.createTitle":"สร้างกลยุทธ์การซื้อขายด้วย AI","ai-trading-assistant.form.editTitle":"แก้ไขกลยุทธ์การซื้อขาย AI","ai-trading-assistant.form.strategyName":"ชื่อกรมธรรม์","ai-trading-assistant.form.modelId":"โมเดลเอไอ","ai-trading-assistant.form.modelIdHint":"ใช้บริการระบบ OpenRouter โดยไม่ต้องกำหนดค่า API Key","ai-trading-assistant.form.decideInterval":"ช่วงการตัดสินใจ","ai-trading-assistant.form.decideInterval5m":"5 นาที","ai-trading-assistant.form.decideInterval10m":"10 นาที","ai-trading-assistant.form.decideInterval30m":"30 นาที","ai-trading-assistant.form.decideInterval1h":"1 ชั่วโมง","ai-trading-assistant.form.decideInterval4h":"4 ชั่วโมง","ai-trading-assistant.form.decideInterval1d":"1 วัน","ai-trading-assistant.form.decideInterval1w":"1 สัปดาห์","ai-trading-assistant.form.decideIntervalHint":"ช่วงเวลาที่ AI ในการตัดสินใจ","ai-trading-assistant.form.runPeriod":"วิ่งรอบ","ai-trading-assistant.form.runPeriodHint":"เวลาเริ่มต้นและเวลาสิ้นสุดของการดำเนินกลยุทธ์","ai-trading-assistant.form.startDate":"วันที่เริ่มต้น","ai-trading-assistant.form.endDate":"วันที่สิ้นสุด","ai-trading-assistant.form.qdtCostTitle":"คำแนะนำการหักเงินของ QDT","ai-trading-assistant.form.qdtCostHint":"การตัดสินใจของ AI แต่ละครั้งจะถูกหักออก {cost} QDT โปรดตรวจสอบให้แน่ใจว่าบัญชีของคุณมียอดคงเหลือ QDT เพียงพอ ในระหว่างการดำเนินการตามกลยุทธ์ค่าธรรมเนียมจะถูกหักแบบเรียลไทม์สำหรับการตัดสินใจแต่ละครั้ง","ai-trading-assistant.form.apiKey":"คีย์ API","ai-trading-assistant.form.exchange":"เลือกการแลกเปลี่ยน","ai-trading-assistant.form.secretKey":"รหัสลับ","ai-trading-assistant.form.passphrase":"ข้อความรหัสผ่าน","ai-trading-assistant.form.testConnection":"ทดสอบการเชื่อมต่อ","ai-trading-assistant.form.symbol":"คู่การซื้อขาย","ai-trading-assistant.form.symbolHint":"เลือกคู่การซื้อขายที่จะซื้อขาย","ai-trading-assistant.form.initialCapital":"จำนวนเงินที่ลงทุน (มาร์จิ้น)","ai-trading-assistant.form.leverage":"ใช้ประโยชน์หลายอย่าง","ai-trading-assistant.form.timeframe":"ช่วงเวลา","ai-trading-assistant.form.timeframe1m":"1 นาที","ai-trading-assistant.form.timeframe5m":"5 นาที","ai-trading-assistant.form.timeframe15m":"15 นาที","ai-trading-assistant.form.timeframe30m":"30 นาที","ai-trading-assistant.form.timeframe1H":"1 ชั่วโมง","ai-trading-assistant.form.timeframe4H":"4 ชั่วโมง","ai-trading-assistant.form.timeframe1D":"1 วัน","ai-trading-assistant.form.marketType":"ประเภทตลาด","ai-trading-assistant.form.marketTypeFutures":"สัญญา","ai-trading-assistant.form.marketTypeSpot":"จุดสินค้า","ai-trading-assistant.form.totalPnl":"กำไรและขาดทุนทั้งหมด","ai-trading-assistant.form.customPrompt":"คำแจ้งที่กำหนดเอง","ai-trading-assistant.form.customPromptHint":"ตัวเลือกเสริม ใช้เพื่อปรับแต่งกลยุทธ์การซื้อขาย AI และตรรกะในการตัดสินใจ","ai-trading-assistant.form.cancel":"ยกเลิก","ai-trading-assistant.form.prev":"ขั้นตอนก่อนหน้า","ai-trading-assistant.form.next":"ขั้นตอนต่อไป","ai-trading-assistant.form.confirmCreate":"ยืนยันการสร้าง","ai-trading-assistant.form.confirmEdit":"ยืนยันการเปลี่ยนแปลง","ai-trading-assistant.messages.createSuccess":"สร้างกลยุทธ์สำเร็จแล้ว","ai-trading-assistant.messages.createFailed":"ไม่สามารถสร้างนโยบายได้","ai-trading-assistant.messages.updateSuccess":"อัปเดตนโยบายสำเร็จแล้ว","ai-trading-assistant.messages.updateFailed":"อัปเดตนโยบายไม่สำเร็จ","ai-trading-assistant.messages.deleteSuccess":"ลบนโยบายสำเร็จแล้ว","ai-trading-assistant.messages.deleteFailed":"ลบนโยบายล้มเหลว","ai-trading-assistant.messages.startSuccess":"กลยุทธ์เริ่มต้นได้สำเร็จ","ai-trading-assistant.messages.startFailed":"ไม่สามารถเริ่มนโยบายได้","ai-trading-assistant.messages.stopSuccess":"กลยุทธ์หยุดสำเร็จ","ai-trading-assistant.messages.stopFailed":"กลยุทธ์หยุดล้มเหลว","ai-trading-assistant.messages.loadFailed":"ไม่สามารถรับรายการนโยบาย","ai-trading-assistant.messages.loadDecisionsFailed":"ไม่สามารถรับบันทึกการตัดสินใจของ AI","ai-trading-assistant.messages.deleteConfirm":"คุณแน่ใจหรือไม่ว่าต้องการลบนโยบายนี้การดำเนินการนี้ไม่สามารถย้อนกลับได้","ai-trading-assistant.placeholders.inputStrategyName":"โปรดป้อนชื่อนโยบาย","ai-trading-assistant.placeholders.selectModelId":"โปรดเลือกโมเดล AI","ai-trading-assistant.placeholders.selectDecideInterval":"โปรดเลือกช่วงการตัดสินใจ","ai-trading-assistant.placeholders.startTime":"เวลาเริ่มต้น","ai-trading-assistant.placeholders.endTime":"เวลาสิ้นสุด","ai-trading-assistant.placeholders.inputApiKey":"กรุณากรอกคีย์ API","ai-trading-assistant.placeholders.selectExchange":"กรุณาเลือกการแลกเปลี่ยน","ai-trading-assistant.placeholders.inputSecretKey":"กรุณากรอกรหัสลับ","ai-trading-assistant.placeholders.inputPassphrase":"กรุณากรอกรหัสผ่าน","ai-trading-assistant.placeholders.selectSymbol":"โปรดเลือกคู่การซื้อขาย เช่น BTC/USDT","ai-trading-assistant.placeholders.selectTimeframe":"โปรดเลือกช่วงเวลา","ai-trading-assistant.placeholders.inputCustomPrompt":"โปรดป้อนคำแจ้งที่กำหนดเอง (ไม่บังคับ)","ai-trading-assistant.validation.strategyNameRequired":"โปรดป้อนชื่อนโยบาย","ai-trading-assistant.validation.modelIdRequired":"โปรดเลือกโมเดล AI","ai-trading-assistant.validation.runPeriodRequired":"กรุณาเลือกรอบการทำงาน","ai-trading-assistant.validation.apiKeyRequired":"กรุณากรอกคีย์ API","ai-trading-assistant.validation.exchangeRequired":"กรุณาเลือกการแลกเปลี่ยน","ai-trading-assistant.validation.secretKeyRequired":"กรุณากรอกรหัสลับ","ai-trading-assistant.validation.symbolRequired":"กรุณาเลือกคู่การซื้อขาย","ai-trading-assistant.validation.initialCapitalRequired":"กรุณากรอกจำนวนเงินลงทุน","ai-trading-assistant.table.time":"เวลา","ai-trading-assistant.table.type":"พิมพ์","ai-trading-assistant.table.price":"ราคา","ai-trading-assistant.table.amount":"ปริมาณ","ai-trading-assistant.table.value":"จำนวน","ai-trading-assistant.table.symbol":"คู่การซื้อขาย","ai-trading-assistant.table.side":"ทิศทาง","ai-trading-assistant.table.size":"ปริมาณตำแหน่ง","ai-trading-assistant.table.entryPrice":"ราคาเปิด","ai-trading-assistant.table.currentPrice":"ราคาปัจจุบัน","ai-trading-assistant.table.unrealizedPnl":"กำไรหรือขาดทุนที่ยังไม่เกิดขึ้นจริง","ai-trading-assistant.table.profit":"กำไรและขาดทุน","ai-trading-assistant.table.openLong":"เปิดยาวๆ","ai-trading-assistant.table.closeLong":"ปินตัว","ai-trading-assistant.table.openShort":"เปิดสั้น","ai-trading-assistant.table.closeShort":"ว่างเปล่า","ai-trading-assistant.table.addLong":"กาดอต","ai-trading-assistant.table.addShort":"เพิ่มสั้น","ai-trading-assistant.table.closeShortProfit":"ขายทำกำไรจากสถานะขาย","ai-trading-assistant.table.closeShortStop":"หยุดการสูญเสีย","ai-trading-assistant.table.closeLongProfit":"หยุดยาวและทำกำไร","ai-trading-assistant.table.closeLongStop":"หยุดการสูญเสีย","ai-trading-assistant.table.buy":"ซื้อ","ai-trading-assistant.table.sell":"ขาย","ai-trading-assistant.table.long":"ยาวไป","ai-trading-assistant.table.short":"สั้น","ai-trading-assistant.table.hold":"ถือ","ai-trading-assistant.table.reasoning":"เหตุผลในการวิเคราะห์","ai-trading-assistant.table.decisions":"การตัดสินใจ","ai-trading-assistant.table.riskAssessment":"การประเมินความเสี่ยง","ai-trading-assistant.table.confidence":"ความมั่นใจ","ai-trading-assistant.table.totalRecords":"รวม {total} บันทึก","ai-trading-assistant.table.noPositions":"ยังไม่มีตำแหน่ง","ai-trading-assistant.detail.title":"รายละเอียดกลยุทธ์","ai-trading-assistant.equity.noData":"ยังไม่มีข้อมูลมูลค่าสุทธิ","ai-trading-assistant.equity.equity":"มูลค่าสุทธิ","ai-trading-assistant.exchange.testFailed":"การทดสอบการเชื่อมต่อล้มเหลว","ai-trading-assistant.exchange.connectionSuccess":"การเชื่อมต่อสำเร็จ","ai-trading-assistant.exchange.connectionFailed":"การเชื่อมต่อล้มเหลว","ai-trading-assistant.form.advancedSettings":"การตั้งค่าขั้นสูง","ai-trading-assistant.form.orderMode":"โหมดการสั่งซื้อ","ai-trading-assistant.form.orderModeMaker":"ผู้สร้าง","ai-trading-assistant.form.orderModeTaker":"ราคาตลาด (เทคเกอร์)","ai-trading-assistant.form.orderModeHint":"โหมดคำสั่งซื้อที่รอดำเนินการใช้คำสั่งซื้อแบบจำกัดและค่าธรรมเนียมการจัดการต่ำกว่า โหมดราคาตลาดจะดำเนินการทันทีและค่าธรรมเนียมการจัดการจะสูงขึ้น","ai-trading-assistant.form.makerWaitSec":"เวลารอสำหรับคำสั่งซื้อที่รอดำเนินการ (วินาที)","ai-trading-assistant.form.makerWaitSecHint":"เวลาที่ต้องรอการทำธุรกรรมหลังจากทำการสั่งซื้อ ยกเลิกและลองอีกครั้งหลังจากหมดเวลา","ai-trading-assistant.form.makerRetries":"จำนวนการลองใหม่สำหรับคำสั่งซื้อที่รอดำเนินการ","ai-trading-assistant.form.makerRetriesHint":"จำนวนครั้งสูงสุดในการลองใหม่เมื่อไม่ได้ดำเนินการคำสั่งซื้อที่รอดำเนินการ","ai-trading-assistant.form.fallbackToMarket":"คำสั่งซื้อที่รอดำเนินการล้มเหลวและราคาตลาดถูกลดระดับลง","ai-trading-assistant.form.fallbackToMarketHint":"เมื่อการเปิด/ปิดคำสั่งซื้อที่รอดำเนินการไม่เสร็จสมบูรณ์ ควรดาวน์เกรดเป็นคำสั่งซื้อในตลาดเพื่อให้แน่ใจว่าธุรกรรมจะเสร็จสมบูรณ์หรือไม่","ai-trading-assistant.form.marginMode":"โหมดระยะขอบ","ai-trading-assistant.form.marginModeCross":"โกดังเต็ม","ai-trading-assistant.form.marginModeIsolated":"ตำแหน่งที่โดดเดี่ยว","ai-analysis.title":"เครื่องมือการซื้อขายควอนตัม","ai-analysis.system.online":"ออนไลน์","ai-analysis.system.agents":"ตัวแทน","ai-analysis.system.active":"คล่องแคล่ว","ai-analysis.system.stage":"เวที","ai-analysis.panel.roster":"รายชื่อตัวแทน","ai-analysis.panel.thinking":"กำลังคิด...","ai-analysis.panel.done":"เสร็จ","ai-analysis.panel.standby":"สแตนด์บาย","ai-analysis.input.title":"เครื่องมือการซื้อขายควอนตัม","ai-analysis.input.placeholder":"เลือกสินทรัพย์เป้าหมาย (เช่น BTC/USDT)","ai-analysis.input.watchlist":"หุ้นทางเลือก","ai-analysis.input.start":"เริ่มการวิเคราะห์","ai-analysis.input.recent":"งานล่าสุด:","ai-analysis.vis.stage":"เวที","ai-analysis.vis.processing":"กำลังประมวลผล","ai-analysis.result.complete":"การวิเคราะห์เสร็จสมบูรณ์","ai-analysis.result.signal":"สัญญาณสุดท้าย","ai-analysis.result.confidence":"ความมั่นใจ:","ai-analysis.result.new":"การวิเคราะห์ใหม่","ai-analysis.result.full":"ดูรายงานฉบับเต็ม","ai-analysis.logs.title":"บันทึกของระบบ","ai-analysis.modal.title":"รายงานที่เป็นความลับ","ai-analysis.modal.fundamental":"การวิเคราะห์พื้นฐาน","ai-analysis.modal.technical":"การวิเคราะห์ทางเทคนิค","ai-analysis.modal.sentiment":"การวิเคราะห์อารมณ์","ai-analysis.modal.risk":"การประเมินความเสี่ยง","ai-analysis.stage.idle":"สแตนด์บาย","ai-analysis.stage.1":"ระยะที่หนึ่ง: การวิเคราะห์หลายมิติ","ai-analysis.stage.2":"ระยะที่สอง: การอภิปรายระยะยาว-ระยะสั้น","ai-analysis.stage.3":"ระยะที่สาม: การวางแผนเชิงกลยุทธ์","ai-analysis.stage.4":"ขั้นตอนที่สี่: การทบทวนการควบคุมความเสี่ยง","ai-analysis.stage.complete":"เสร็จ","ai-analysis.agent.investment_director":"ผู้อำนวยการฝ่ายการลงทุน","ai-analysis.agent.role.investment_director":"การวิเคราะห์ที่ครอบคลุมและข้อสรุปขั้นสุดท้าย","ai-analysis.agent.market":"นักวิเคราะห์ตลาด","ai-analysis.agent.role.market":"เทคโนโลยีและข้อมูลการตลาด","ai-analysis.agent.fundamental":"นักวิเคราะห์พื้นฐาน","ai-analysis.agent.role.fundamental":"การเงินและการประเมินค่า","ai-analysis.agent.technical":"นักวิเคราะห์ทางเทคนิค","ai-analysis.agent.role.technical":"ตัวชี้วัดและแผนภูมิทางเทคนิค","ai-analysis.agent.news":"นักวิเคราะห์ข่าว","ai-analysis.agent.role.news":"ตัวกรองข่าวทั่วโลก","ai-analysis.agent.sentiment":"นักวิเคราะห์ความรู้สึก","ai-analysis.agent.role.sentiment":"สังคมและอารมณ์","ai-analysis.agent.risk":"นักวิเคราะห์ความเสี่ยง","ai-analysis.agent.role.risk":"การตรวจสอบความเสี่ยงเบื้องต้น","ai-analysis.agent.bull":"นักวิจัยรั้น","ai-analysis.agent.role.bull":"การขุดตัวเร่งปฏิกิริยาการเติบโต","ai-analysis.agent.bear":"นักวิจัยขาลง","ai-analysis.agent.role.bear":"การขุดความเสี่ยงและข้อบกพร่อง","ai-analysis.agent.manager":"ผู้จัดการฝ่ายวิจัย","ai-analysis.agent.role.manager":"ผู้ดูแลการอภิปราย","ai-analysis.agent.trader":"พ่อค้า","ai-analysis.agent.role.trader":"นักยุทธศาสตร์บริหาร","ai-analysis.agent.risky":"นักวิเคราะห์กิจกรรม","ai-analysis.agent.role.risky":"กลยุทธ์เชิงรุก","ai-analysis.agent.neutral":"นักวิเคราะห์ความสมดุล","ai-analysis.agent.role.neutral":"กลยุทธ์การสร้างสมดุล","ai-analysis.agent.safe":"นักวิเคราะห์อนุรักษ์นิยม","ai-analysis.agent.role.safe":"กลยุทธ์อนุรักษ์นิยม","ai-analysis.agent.cro":"ผู้จัดการฝ่ายควบคุมความเสี่ยง (CRO)","ai-analysis.agent.role.cro":"อำนาจในการตัดสินใจขั้นสุดท้าย","ai-analysis.script.market":"กำลังดึงข้อมูล OHLCV จากการแลกเปลี่ยนหลัก...","ai-analysis.script.fundamental":"กำลังดึงรายงานทางการเงินรายไตรมาส...","ai-analysis.script.technical":"กำลังวิเคราะห์ตัวชี้วัดทางเทคนิคและรูปแบบกราฟ...","ai-analysis.script.news":"กำลังสแกนข่าวการเงินทั่วโลก...","ai-analysis.script.sentiment":"วิเคราะห์เทรนด์โซเชียลมีเดีย...","ai-analysis.script.risk":"กำลังคำนวณความผันผวนในอดีต...","invite.inviteLink":"ลิงค์คำเชิญ","invite.copy":"คัดลอกลิงก์","invite.copySuccess":"คัดลอกสำเร็จ!","invite.copyFailed":"การคัดลอกล้มเหลว โปรดคัดลอกด้วยตนเอง","invite.noInviteLink":"ไม่ได้สร้างลิงก์คำเชิญ","invite.totalInvites":"คำเชิญสะสม","invite.totalReward":"รางวัลสะสม","invite.rules":"กฎการเชิญชวน","invite.rule1":"ทุกครั้งที่คุณเชิญเพื่อนมาลงทะเบียนสำเร็จ คุณจะได้รับรางวัล","invite.rule2":"หากเพื่อนที่ได้รับเชิญทำธุรกรรมครั้งแรกสำเร็จ คุณจะได้รับรางวัลเพิ่มเติม","invite.rule3":"รางวัลคำเชิญจะถูกส่งไปยังบัญชีของคุณโดยตรง","invite.inviteList":"รายการเชิญ","invite.tasks":"ศูนย์ภารกิจ","invite.inviteeName":"ผู้ได้รับเชิญ","invite.inviteTime":"เวลาเชิญ","invite.status":"สถานะ","invite.reward":"รางวัล","invite.active":"คล่องแคล่ว","invite.inactive":"ไม่ได้เปิดใช้งาน","invite.completed":"สมบูรณ์","invite.claimed":"ได้รับ","invite.pending":"ให้แล้วเสร็จ","invite.goToTask":"เพื่อให้เสร็จสมบูรณ์","invite.claimReward":"รับรางวัล","invite.verify":"การยืนยันเสร็จสมบูรณ์","invite.verifySuccess":"การยืนยันสำเร็จ!งานเสร็จสมบูรณ์","invite.verifyNotCompleted":"งานยังไม่เสร็จสมบูรณ์ กรุณาทำงานให้เสร็จก่อน","invite.verifyFailed":"การยืนยันล้มเหลว โปรดลองอีกครั้งในภายหลัง","invite.claimSuccess":"รับ {reward} QDT สำเร็จแล้ว!","invite.claimFailed":"ไม่สามารถรวบรวมได้ โปรดลองอีกครั้งในภายหลัง","invite.totalRecords":"รวม {total} บันทึก","invite.task.twitter.title":"รีทวีตไปที่ X (Twitter)","invite.task.twitter.desc":"แบ่งปันทวีตอย่างเป็นทางการของเราไปยังบัญชี X (Twitter) ของคุณ","invite.task.youtube.title":"ติดตามช่อง YouTube ของเรา","invite.task.youtube.desc":"สมัครสมาชิกและติดตามช่อง YouTube อย่างเป็นทางการของเรา","invite.task.telegram.title":"เข้าร่วมกลุ่มโทรเลข","invite.task.telegram.desc":"เข้าร่วมกลุ่มชุมชนโทรเลขอย่างเป็นทางการของเรา","invite.task.discord.title":"เข้าร่วมเซิร์ฟเวอร์ Discord","invite.task.discord.desc":"เข้าร่วมเซิร์ฟเวอร์ชุมชน Discord ของเรา",message:"-","layouts.usermenu.dialog.title":"ข้อมูล","layouts.usermenu.dialog.content":"คุณแน่ใจหรือไม่ว่าต้องการออกจากระบบ?","layouts.userLayout.title":"ค้นหาความจริงในความไม่แน่นอน","dashboard.indicator.boundary.message":"Note: The indicator script only computes plots + buy/sell signals. Position sizing, risk, scaling, fees/slippage belong to execution config.","dashboard.indicator.boundary.indicatorRule":"Keep the script to buy/sell only (and set df['buy']/df['sell']). Do NOT implement position management, TP/SL, scaling in the script.","dashboard.indicator.boundary.backtestRule":"Rule: If a bar has a main signal (buy/sell → open/close/reverse), scaling in/out is skipped on the same bar.","dashboard.indicator.guide.title":"Python Indicator & Strategy Development Guide","dashboard.indicator.guide.intro":"This platform supports writing custom technical indicators and trading signals using Python. The system includes built-in pandas and numpy data analysis libraries. You can use standard DataFrame operations to process K-line data and draw charts or mark buy/sell signals.","dashboard.indicator.guide.section1.title":"1. Runtime Environment & Predefined Variables","dashboard.indicator.guide.section1.env":"Your code runs in a browser-based Python environment (Pyodide).","dashboard.indicator.guide.section1.libs":"Pre-installed Libraries","dashboard.indicator.guide.section1.libsDesc":"The following libraries are imported by default, no need to import again:","dashboard.indicator.guide.section1.libsList":"pandas (pd), numpy (np), math, json","dashboard.indicator.guide.section1.data":"Input Data: df","dashboard.indicator.guide.section1.dataDesc":"The system automatically converts current K-line data into a Pandas DataFrame object, variable name is df.","dashboard.indicator.guide.section1.dataColumns":"df contains the following columns (all float type):","dashboard.indicator.guide.section1.dataColumnsList":"time (timestamp, seconds), open, high, low, close, volume","dashboard.indicator.guide.section1.dataNote":"Data index is arranged from old to new (0 is the earliest data, last row is the latest data).","dashboard.indicator.guide.section1.dataIndex":"Important: df index is timestamp (DatetimeIndex), please preserve the index, avoid using .values which loses the index.","dashboard.indicator.guide.section2.title":"2. Parameter Definition","dashboard.indicator.guide.section2.desc":"You can define variables as parameters at the beginning of your code. The system will try to parse statements like variable = value as adjustable parameters.","dashboard.indicator.guide.section2.example":"Parameter Example","dashboard.indicator.guide.section2.exampleCode":"span = 20 or multiplier = 2.0","dashboard.indicator.guide.section3.title":"3. Backtest Signal Setup (Important!)","dashboard.indicator.guide.section3.desc":"If you want your indicator to support backtesting, you must set the following two columns in your code:","dashboard.indicator.guide.section3.backtestRequired":"Required for Backtesting:","dashboard.indicator.guide.section3.backtestBuySignal":"df['buy_signal'] - Boolean Series, True indicates buy signal","dashboard.indicator.guide.section3.backtestSellSignal":"df['sell_signal'] - Boolean Series, True indicates sell signal","dashboard.indicator.guide.section3.backtestExample":"Example:","dashboard.indicator.guide.section3.backtestExampleCode":"df['buy_signal'] = condition_buy
df['sell_signal'] = condition_sell","dashboard.indicator.guide.section3.backtestNote":"Note: Even if you only set output.signals for chart display, you must set these two columns to enable backtesting.","dashboard.indicator.guide.section4.title":"4. Output Requirements: output","dashboard.indicator.guide.section4.desc":"At the end of code execution, you must define a dictionary named output to tell the chart how to display results.","dashboard.indicator.guide.section4.fields":"The output dictionary contains the following fields:","dashboard.indicator.guide.section4.plots":"plots - For drawing lines (e.g., moving averages, RSI)","dashboard.indicator.guide.section4.signals":"signals - For marking buy/sell signals (e.g., arrows, labels)","dashboard.indicator.guide.section4.name":"name - Indicator name (optional)","dashboard.indicator.guide.section4.calculatedVars":"calculatedVars - Calculated variables (optional, for displaying additional information)","dashboard.indicator.guide.section5.title":"5. Plot Configuration (Plots)","dashboard.indicator.guide.section5.desc":"Each object in the plots list represents a line.","dashboard.indicator.guide.section5.table.field":"Field","dashboard.indicator.guide.section5.table.type":"Type","dashboard.indicator.guide.section5.table.required":"Required","dashboard.indicator.guide.section5.table.requiredYes":"Yes","dashboard.indicator.guide.section5.table.requiredNo":"No","dashboard.indicator.guide.section5.table.desc":"Description","dashboard.indicator.guide.section5.table.name":"The name of the indicator line, displayed in the legend","dashboard.indicator.guide.section5.table.data":"Data list, length must match the number of rows in df. Recommended to use series.tolist()","dashboard.indicator.guide.section5.table.color":"Line color (Hex format, e.g. '#ff0000'). If not filled, the system will automatically assign","dashboard.indicator.guide.section5.table.typeDesc":"Chart type, default is 'line'","dashboard.indicator.guide.section5.table.overlay":"Important. True means display on main chart (with K-line), False means display on sub-chart (independent area)","dashboard.indicator.guide.section5.example":"Example: Draw Simple Moving Average (SMA)","dashboard.indicator.guide.section5.exampleCalc":"Calculate SMA","dashboard.indicator.guide.section5.exampleOutput":"Construct Output","dashboard.indicator.guide.section5.exampleOverlay":"Display on main chart","dashboard.indicator.guide.section6.title":"6. Signal Markers (Signals)","dashboard.indicator.guide.section6.desc":"signals are used to mark buy/sell points on specific K-lines through icons or text. Note: This is only for chart display. The backtest system uses df['buy_signal'] and df['sell_signal'].","dashboard.indicator.guide.section6.table.type":"Signal type: 'buy' (buy, marked below K-line) or 'sell' (sell, marked above K-line)","dashboard.indicator.guide.section6.table.data":"Signal data list. Fill price value at signal positions, fill None (or np.nan) at non-signal positions","dashboard.indicator.guide.section6.table.text":'Text displayed on the label (e.g. "B", "S", "Buy", "Sell")',"dashboard.indicator.guide.section6.table.color":"Marker color","dashboard.indicator.guide.section6.hint":"The system automatically handles positioning.","dashboard.indicator.guide.section6.buy":"Markers will be automatically positioned below the Low of the current K-line","dashboard.indicator.guide.section6.sell":"Markers will be automatically positioned above the High of the current K-line","dashboard.indicator.guide.section6.example":"Example: Draw Buy/Sell Signals","dashboard.indicator.guide.section6.exampleInit":"Initialize signal list, fill all with None","dashboard.indicator.guide.section6.exampleLogic":"Simple logic: mark buy when close price is greater than open price","dashboard.indicator.guide.section6.exampleNote":"In actual logic, please use loops or vectorized operations","dashboard.indicator.guide.section6.examplePrice":"Record price","dashboard.indicator.guide.section6.exampleText":"Buy","dashboard.indicator.guide.section7.title":"7. Complete Code Examples","dashboard.indicator.guide.section7.exampleA":"Example A: Dual EMA Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleACode":'# 1. Calculate indicators
df[\'ema_fast\'] = df[\'close\'].ewm(span=5, adjust=False).mean()
df[\'ema_slow\'] = df[\'close\'].ewm(span=13, adjust=False).mean()

# 2. Calculate crossover signals
cross_up = (df[\'ema_fast\'] > df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) <= df[\'ema_slow\'].shift(1))
cross_down = (df[\'ema_fast\'] < df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) >= df[\'ema_slow\'].shift(1))

# 3. 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = cross_up
df[\'close_long\'] = cross_down
df[\'open_short\'] = cross_down
df[\'close_short\'] = cross_up

# 4. Generate signal data for chart display
buy_signals = [df[\'low\'].iloc[i] * 0.995 if cross_up.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if cross_down.iloc[i] else None for i in range(len(df))]

# 5. Build output
output = {
"name": "Dual EMA Strategy",
"plots": [
{"name": "EMA 5", "data": df[\'ema_fast\'].tolist(), "color": "#FF6B6B", "overlay": True},
{"name": "EMA 13", "data": df[\'ema_slow\'].tolist(), "color": "#4ECDC4", "overlay": True}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section7.exampleB":"Example B: Bollinger Bands - Chart Display Only","dashboard.indicator.guide.section7.exampleBCode":'# Calculate Bollinger Bands (chart display only, no backtesting)
length = 20
mult = 2.0
df[\'sma\'] = df[\'close\'].rolling(length).mean()
df[\'std\'] = df[\'close\'].rolling(length).std()
df[\'upper\'] = df[\'sma\'] + mult * df[\'std\']
df[\'lower\'] = df[\'sma\'] - mult * df[\'std\']

output = {
"name": "Bollinger Bands",
"plots": [
{"name": "Upper", "data": df[\'upper\'].tolist(), "color": "#FF5252", "overlay": True},
{"name": "Middle", "data": df[\'sma\'].tolist(), "color": "#2196F3", "overlay": True},
{"name": "Lower", "data": df[\'lower\'].tolist(), "color": "#00E676", "overlay": True}
]
}',"dashboard.indicator.guide.section7.exampleC":"Example C: RSI Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleCCode":'# Calculate RSI
delta = df[\'close\'].diff()
up = delta.clip(lower=0)
down = -1 * delta.clip(upper=0)
ema_up = up.ewm(com=13, adjust=False).mean()
ema_down = down.ewm(com=13, adjust=False).mean()
rs = ema_up / ema_down
df[\'rsi\'] = 100 - (100 / (1 + rs))

# Generate trading signals
buy_condition = df[\'rsi\'] < 30 # Oversold buy
sell_condition = df[\'rsi\'] > 70 # Overbought sell

# 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = buy_condition
df[\'close_long\'] = sell_condition
df[\'open_short\'] = sell_condition
df[\'close_short\'] = buy_condition

# Generate chart signals
buy_signals = [df[\'low\'].iloc[i] * 0.995 if buy_condition.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if sell_condition.iloc[i] else None for i in range(len(df))]

output = {
"name": "RSI Strategy",
"plots": [
{"name": "RSI", "data": df[\'rsi\'].tolist(), "color": "#9C27B0", "overlay": False},
{"name": "Overbought", "data": [70] * len(df), "color": "#FF5252", "style": "dashed", "overlay": False},
{"name": "Oversold", "data": [30] * len(df), "color": "#00E676", "style": "dashed", "overlay": False}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section6.param":"Parameters","dashboard.indicator.guide.section6.calc":"Calculate","dashboard.indicator.guide.section6.output":"Output","dashboard.indicator.guide.section6.generate":"Generate signal data (initialize with None)","dashboard.indicator.guide.section6.subchart":"Display on sub-chart","dashboard.indicator.guide.section8.title":"8. Frequently Asked Questions (FAQ)","dashboard.indicator.guide.section8.q1":"Q: Why can't my indicator be backtested?","dashboard.indicator.guide.section8.a1":"A: The backtest system requires NEW signal columns: df['open_long'], df['close_long'], df['open_short'], df['close_short'] (boolean). Even if you set output.signals for chart display, you must set these columns to enable backtesting.","dashboard.indicator.guide.section8.q2":"Q: Data length mismatch?","dashboard.indicator.guide.section8.a2":"A: The data list in plots and signals must have exactly the same length as the K-line data. If you use df['xxx'].tolist(), there is usually no problem.","dashboard.indicator.guide.section8.q3":"Q: How to handle NaN (empty values)?","dashboard.indicator.guide.section8.a3":"A: Pandas calculations (such as rolling mean) will produce NaN at the beginning. The system will automatically convert NaN to null for chart rendering. You don't need to manually clean it, but if you need specific logic, you can use df.fillna(0) or other methods.","dashboard.indicator.guide.section8.q4":"Q: Index mismatch causing all signals to be NaN?","dashboard.indicator.guide.section8.a4":"A: Please ensure you preserve the original df index (timestamp). Avoid using .values to create new Series. Use columns directly like df['close'] for operations.","dashboard.indicator.guide.section8.q5":"Q: Can I use third-party network libraries?","dashboard.indicator.guide.section8.a5":"A: No. The runtime environment is a browser sandbox and cannot use libraries like requests to request external APIs, nor can it install additional pip packages. Limited to built-in libraries such as pandas, numpy, math, json.","dashboard.indicator.guide.section8.q6":"Q: How to debug code?","dashboard.indicator.guide.section8.a6":"A: If the chart does not display indicators, it is usually because the Python code has an error. Please check for syntax errors or array index out of bounds. It is recommended to debug the algorithm logic in a local Python environment first, then copy it in.","dashboard.indicator.guide.section8.q7":"Q: Backtest shows 0 signals?","dashboard.indicator.guide.section8.a7":"A: Please check the data type of df['open_long']/df['close_long']/df['open_short']/df['close_short']. They should be boolean (True/False), not numeric. Use condition.fillna(False).astype(bool) to ensure correct type.","dashboard.indicator.backtest.commissionHint":"Charged on notional value (incl. leverage) per trade; both entry & exit are deducted from balance.","dashboard.indicator.backtest.historyTitle":"Backtest History","dashboard.indicator.backtest.historyRefresh":"Refresh","dashboard.indicator.backtest.historyView":"View","dashboard.indicator.backtest.historyNoData":"No backtest history","dashboard.indicator.backtest.historyUseCurrent":"Only current symbol/timeframe","dashboard.indicator.backtest.historyFilterSymbol":"Symbol","dashboard.indicator.backtest.historyFilterTimeframe":"Timeframe","dashboard.indicator.backtest.historyApply":"Apply filters","dashboard.indicator.backtest.historyAIAnalyze":"AI Analyze","dashboard.indicator.backtest.historyAIAnalyzeTitle":"AI Suggestions","dashboard.indicator.backtest.historyNoAIResult":"No AI analysis result","dashboard.indicator.backtest.historyRunId":"Run ID","dashboard.indicator.backtest.historyCreatedAt":"Time","dashboard.indicator.backtest.historyRange":"Range","dashboard.indicator.backtest.historyStatus":"Status","dashboard.indicator.backtest.historyStatusSuccess":"Success","dashboard.indicator.backtest.historyStatusFailed":"Failed","dashboard.indicator.backtest.historyActions":"Actions","trading-assistant.exchange.ipWhitelistTip":"Please add the following IPs to the whitelist in your exchange API settings:","signal-robot.title":"Signal Robot Console","signal-robot.createBot":"Create New Bot","signal-robot.search.nameOrSymbol":"Name/Symbol","signal-robot.search.placeholder":"Search bot name or symbol","signal-robot.search.status":"Status","signal-robot.search.statusAll":"All","signal-robot.search.statusRunning":"Running","signal-robot.search.statusPaused":"Paused","signal-robot.search.query":"Query","signal-robot.search.reset":"Reset","signal-robot.table.botName":"Bot Name","signal-robot.table.symbolTimeframe":"Symbol/Timeframe","signal-robot.table.triggerStrategy":"Trigger Strategy","signal-robot.table.notificationChannels":"Notification Channels","signal-robot.table.status":"Status","signal-robot.table.action":"Action","signal-robot.table.triggerConditions":"{count} trigger conditions","signal-robot.table.monitoring":"Monitoring","signal-robot.table.paused":"Paused","signal-robot.table.edit":"Edit","signal-robot.table.pause":"Pause","signal-robot.table.start":"Start","signal-robot.table.delete":"Delete","signal-robot.table.deleteConfirm":"Are you sure you want to delete this bot?","signal-robot.table.deleteSuccess":"Deleted successfully","signal-robot.table.startSuccess":"Bot started","signal-robot.table.pauseSuccess":"Bot paused","signal-robot.channel.telegram":"Telegram","signal-robot.channel.discord":"Discord","signal-robot.channel.email":"Email","signal-robot.channel.webhook":"Webhook","signal-robot.channel.browser":"Browser Push","signal-robot.modal.createTitle":"Create New Signal Robot","signal-robot.modal.editTitle":"Edit Signal Robot","signal-robot.modal.step.basic":"Basic Settings","signal-robot.modal.step.entry":"Entry Strategy","signal-robot.modal.step.position":"Position Management","signal-robot.modal.step.risk":"Risk Control","signal-robot.modal.step.notify":"Notification Config","signal-robot.modal.prev":"Previous","signal-robot.modal.next":"Next","signal-robot.modal.preview":"Preview Backtest","signal-robot.modal.complete":"Complete & Run","signal-robot.modal.saveSuccess":"Saved successfully","signal-robot.modal.previewDeveloping":"Preview feature is under development...","signal-robot.modal.basicInfoRequired":"Please complete basic information","signal-robot.basic.alert":"Set basic information for the bot","signal-robot.basic.title":"Basic Information","signal-robot.basic.botName":"Bot Name","signal-robot.basic.botNamePlaceholder":"e.g.: BTC SuperTrend Strategy","signal-robot.basic.symbol":"Trading Pair","signal-robot.basic.symbolPlaceholder":"Select from watchlist","signal-robot.basic.noWatchlist":"No watchlist items, please add in market page first","signal-robot.basic.timeframe":"K-Line Period","signal-robot.basic.timeframe15m":"15 Minutes","signal-robot.basic.timeframe30m":"30 Minutes","signal-robot.basic.timeframe1h":"1 Hour","signal-robot.basic.timeframe4h":"4 Hours","signal-robot.basic.timeframe1d":"1 Day","signal-robot.basic.autoNameSuggestion":"{symbol} Signal Robot","signal-robot.entry.alert":"Trigger entry signal when all conditions below are met","signal-robot.entry.condition":"Condition {index}","signal-robot.entry.indicator":"Indicator","signal-robot.entry.indicatorSupertrend":"SuperTrend","signal-robot.entry.indicatorEma":"EMA (Exponential Moving Average)","signal-robot.entry.indicatorRsi":"RSI (Relative Strength Index)","signal-robot.entry.indicatorMacd":"MACD","signal-robot.entry.indicatorBollinger":"Bollinger Bands","signal-robot.entry.atrPeriod":"ATR Period","signal-robot.entry.multiplier":"Multiplier","signal-robot.entry.triggerSignal":"Trigger Signal","signal-robot.entry.signalTrendBullish":"Trend Bullish","signal-robot.entry.signalTrendBearish":"Trend Bearish","signal-robot.entry.signalIsUptrend":"Is Uptrend","signal-robot.entry.signalIsDowntrend":"Is Downtrend","signal-robot.entry.period":"Period","signal-robot.entry.compareCondition":"Compare Condition","signal-robot.entry.priceAbove":"Price > EMA (Price Above)","signal-robot.entry.priceBelow":"Price < EMA (Price Below)","signal-robot.entry.crossUp":"Price Crosses Above EMA (Golden Cross)","signal-robot.entry.crossDown":"Price Crosses Below EMA (Death Cross)","signal-robot.entry.compare":"Compare","signal-robot.entry.greaterThan":"Greater Than","signal-robot.entry.lessThan":"Less Than","signal-robot.entry.crossUpShort":"Cross Up","signal-robot.entry.crossDownShort":"Cross Down","signal-robot.entry.threshold":"Threshold","signal-robot.entry.selectIndicator":"Please select an indicator to configure parameters","signal-robot.entry.addCondition":"Add Condition","signal-robot.position.alert":"Configure initial position size, leverage and pyramiding rules","signal-robot.position.basicTitle":"Basic Position Management","signal-robot.position.initialSize":"Initial Size (Capital %)","signal-robot.position.initialSizeHint":"Recommended 5% - 20%","signal-robot.position.leverage":"Leverage","signal-robot.position.leverageHint":"Please ensure your exchange account supports this leverage","signal-robot.position.maxPyramiding":"Max Pyramiding Times","signal-robot.position.maxPyramidingHint":"0 means no pyramiding","signal-robot.position.pyramidingTitle":"Pyramiding Rules","signal-robot.position.pyramidingEnabled":"Enabled","signal-robot.position.pyramidingDisabled":"Disabled","signal-robot.position.pyramidingCondition":"Pyramiding Trigger Condition","signal-robot.position.priceRisePct":"Price Rises (Long) / Falls (Short)","signal-robot.position.profitPct":"Profit Reaches","signal-robot.position.triggerThreshold":"Trigger Threshold (%)","signal-robot.position.triggerThresholdHint":"e.g. 3%: add position once every 3% rise","signal-robot.position.addSize":"Single Add Size (Capital %)","signal-robot.position.pyramidingDisabledHint":"Pyramiding disabled, only initial position will be executed","signal-robot.risk.alert":"Configure take profit, stop loss and exit rules","signal-robot.risk.stopLossTitle":"Stop Loss","signal-robot.risk.stopLossEnabled":"Enabled","signal-robot.risk.stopLossDisabled":"Disabled","signal-robot.risk.stopLossType":"Stop Loss Type","signal-robot.risk.stopLossFixedPct":"Fixed Percentage","signal-robot.risk.stopLossAtrMultiplier":"ATR Multiplier","signal-robot.risk.stopLossValue":"Value","signal-robot.risk.stopLossFixedHint":"e.g. 2%: stop loss when loss reaches 2%","signal-robot.risk.stopLossAtrHint":"e.g. 2.0: stop loss when price touches ATR*2.0","signal-robot.risk.stopLossDisabledHint":"Stop loss disabled (high risk)","signal-robot.risk.trailingStopTitle":"Trailing Stop","signal-robot.risk.activationProfit":"Activation Profit (%)","signal-robot.risk.activationProfitHint":"Start trailing when profit reaches this level","signal-robot.risk.callbackPct":"Callback (%)","signal-robot.risk.callbackPctHint":"Trigger take profit when price falls from peak by this percentage","signal-robot.risk.trailingStopDisabledHint":"Trailing stop disabled","signal-robot.risk.otherExitTitle":"Other Exit Rules","signal-robot.risk.signalExit":"Allow Signal Exit","signal-robot.risk.signalExitHint":"Close position immediately when reverse signal appears (e.g. close long when short signal appears)","signal-robot.notify.alert":"Configure notification methods when signal is triggered","signal-robot.notify.channelTitle":"Notification Channels","signal-robot.notify.discordWebhook":"Discord Webhook","signal-robot.notify.genericWebhook":"Generic Webhook","signal-robot.notify.webhookUrl":"Webhook URL","signal-robot.notify.webhookUrlPlaceholder":"https://example.com/webhook","signal-robot.notify.discordUrl":"Discord URL","signal-robot.notify.discordUrlPlaceholder":"https://discord.com/api/webhooks/...","signal-robot.operator.greaterThan":"Greater Than","signal-robot.operator.lessThan":"Less Than","signal-robot.operator.equal":"Equal","signal-robot.operator.goldenCross":"Golden Cross","signal-robot.operator.deathCross":"Death Cross","signal-robot.operator.increaseBy":"Increase By","signal-robot.operator.decreaseBy":"Decrease By","signal-robot.indicator.price":"Price","signal-robot.indicator.rsi":"RSI","signal-robot.indicator.kdjK":"KDJ(K)","signal-robot.indicator.kdjJ":"KDJ(J)","signal-robot.indicator.macd":"MACD","signal-robot.indicator.macdHist":"MACD Histogram","signal-robot.indicator.bollingerUp":"Bollinger Upper","signal-robot.indicator.bollingerLow":"Bollinger Lower","signal-robot.indicator.volume":"Volume","signal-robot.indicator.changePct1h":"1H Change %","signal-robot.indicator.changePct24h":"24H Change %","signal-robot.indicator.signalLine":"Signal Line","settings.group.agent_memory":"หน่วยความจำ/การสะท้อน","settings.group.reflection_worker":"ตัวทำงานตรวจสอบการสะท้อนอัตโนมัติ","settings.field.ENABLE_AGENT_MEMORY":"เปิดใช้หน่วยความจำเอเจนต์","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"เปิดใช้การค้นหาเวกเตอร์ (ในเครื่อง)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"มิติ Embedding","settings.field.AGENT_MEMORY_TOP_K":"จำนวนดึงข้อมูล Top-K","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"ขนาดหน้าต่างผู้สมัคร","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"ครึ่งชีวิตการลดทอนตามเวลา (วัน)","settings.field.AGENT_MEMORY_W_SIM":"ค่าน้ำหนักความคล้าย","settings.field.AGENT_MEMORY_W_RECENCY":"ค่าน้ำหนักเวลา","settings.field.AGENT_MEMORY_W_RETURNS":"ค่าน้ำหนักผลตอบแทน","settings.field.ENABLE_REFLECTION_WORKER":"เปิดใช้การตรวจสอบอัตโนมัติ","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"ช่วงเวลาตรวจสอบ (วินาที)","profile.notifications.title":"การตั้งค่าการแจ้งเตือน","profile.notifications.hint":"กำหนดค่าวิธีการแจ้งเตือนเริ่มต้น จะถูกใช้โดยอัตโนมัติเมื่อสร้างการติดตามสินทรัพย์และการแจ้งเตือน","profile.notifications.defaultChannels":"ช่องทางแจ้งเตือนเริ่มต้น","profile.notifications.browser":"การแจ้งเตือนในแอป","profile.notifications.email":"อีเมล","profile.notifications.phone":"SMS","profile.notifications.telegramBotToken":"Telegram Bot Token","profile.notifications.telegramBotTokenPlaceholder":"กรอก Telegram Bot Token ของคุณ","profile.notifications.telegramBotTokenHint":"สร้างบอทผ่าน @BotFather เพื่อรับ Token","profile.notifications.telegramChatId":"Telegram Chat ID","profile.notifications.telegramPlaceholder":"กรอก Telegram Chat ID ของคุณ (เช่น 123456789)","profile.notifications.telegramHint":"ส่ง /start ไปที่ @userinfobot เพื่อรับ Chat ID","profile.notifications.notifyEmail":"อีเมลแจ้งเตือน","profile.notifications.emailPlaceholder":"ที่อยู่อีเมลสำหรับรับการแจ้งเตือน","profile.notifications.emailHint":"ใช้อีเมลบัญชีเป็นค่าเริ่มต้น สามารถตั้งค่าอีเมลอื่นได้","profile.notifications.phonePlaceholder":"กรอกหมายเลขโทรศัพท์ (เช่น +66812345678)","profile.notifications.phoneHint":"ผู้ดูแลระบบต้องกำหนดค่าบริการ Twilio","profile.notifications.discordWebhook":"Discord Webhook","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"สร้าง Webhook ในการตั้งค่าเซิร์ฟเวอร์ Discord","profile.notifications.webhookUrl":"Webhook URL","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"URL Webhook แบบกำหนดเอง ส่งการแจ้งเตือนผ่าน POST JSON","profile.notifications.webhookToken":"Webhook Token (ไม่บังคับ)","profile.notifications.webhookTokenPlaceholder":"Bearer Token สำหรับยืนยันตัวตนคำขอ","profile.notifications.webhookTokenHint":"ส่งเป็น Authorization: Bearer Token ไปยัง Webhook","profile.notifications.testBtn":"ส่งการแจ้งเตือนทดสอบ","profile.notifications.saveSuccess":"บันทึกการตั้งค่าการแจ้งเตือนสำเร็จ","profile.notifications.selectChannel":"กรุณาเลือกอย่างน้อยหนึ่งช่องทางแจ้งเตือน","profile.notifications.fillTelegramToken":"กรุณากรอก Telegram Bot Token","profile.notifications.fillTelegram":"กรุณากรอก Telegram Chat ID","profile.notifications.fillEmail":"กรุณากรอกอีเมลแจ้งเตือน","profile.notifications.testSent":"ส่งการแจ้งเตือนทดสอบแล้ว กรุณาตรวจสอบช่องทางแจ้งเตือนของคุณ"},f=(0,e.A)((0,e.A)({},p),y)}}]); \ No newline at end of file diff --git a/frontend/dist/js/lang-vi-VN-legacy.abfef208.js b/frontend/dist/js/lang-vi-VN-legacy.5462fe86.js similarity index 99% rename from frontend/dist/js/lang-vi-VN-legacy.abfef208.js rename to frontend/dist/js/lang-vi-VN-legacy.5462fe86.js index e5c136f..23b4a5e 100644 --- a/frontend/dist/js/lang-vi-VN-legacy.abfef208.js +++ b/frontend/dist/js/lang-vi-VN-legacy.5462fe86.js @@ -1 +1 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[424],{18326:function(n,a,t){t.d(a,{default:function(){return k}});var i=t(57888),s={items_per_page:"/ trang",jump_to:"Đến",jump_to_confirm:"xác nhận",page:"",prev_page:"Trang Trước",next_page:"Trang Kế",prev_5:"Về 5 Trang Trước",next_5:"Đến 5 Trang Kế",prev_3:"Về 3 Trang Trước",next_3:"Đến 3 Trang Kế"},e=t(85505),h={today:"Hôm nay",now:"Bây giờ",backToToday:"Trở về hôm nay",ok:"Ok",clear:"Xóa",month:"Tháng",year:"Năm",timeSelect:"Chọn thời gian",dateSelect:"Chọn ngày",weekSelect:"Chọn tuần",monthSelect:"Chọn tháng",yearSelect:"Chọn năm",decadeSelect:"Chọn thập kỷ",yearFormat:"YYYY",dateFormat:"D/M/YYYY",dayFormat:"D",dateTimeFormat:"D/M/YYYY HH:mm:ss",monthBeforeYear:!0,previousMonth:"Tháng trước (PageUp)",nextMonth:"Tháng sau (PageDown)",previousYear:"Năm trước (Control + left)",nextYear:"Năm sau (Control + right)",previousDecade:"Thập kỷ trước",nextDecade:"Thập kỷ sau",previousCentury:"Thế kỷ trước",nextCentury:"Thế kỷ sau"},o={placeholder:"Chọn thời gian"},c=o,r={lang:(0,e.A)({placeholder:"Chọn thời điểm",rangePlaceholder:["Ngày bắt đầu","Ngày kết thúc"]},h),timePickerLocale:(0,e.A)({},c)},d=r,g=d,l={locale:"vi",Pagination:s,DatePicker:d,TimePicker:c,Calendar:g,Table:{filterTitle:"Bộ ",filterConfirm:"OK",filterReset:"Tạo Lại",selectAll:"Chọn Tất Cả",selectInvert:"Chọn Ngược Lại"},Modal:{okText:"OK",cancelText:"Huỷ",justOkText:"OK"},Popconfirm:{okText:"OK",cancelText:"Huỷ"},Transfer:{searchPlaceholder:"Tìm ở đây",itemUnit:"mục",itemsUnit:"mục"},Upload:{uploading:"Đang tải lên...",removeFile:"Gỡ bỏ tập tin",uploadError:"Lỗi tải lên",previewFile:"Xem thử tập tin",downloadFile:"Tải tập tin"},Empty:{description:"Trống"}},u=l,m=t(21135),b=t.n(m),p={antLocale:u,momentName:"vi",momentLocale:b()},y={submit:"Gửi",save:"Lưu","submit.ok":"Gửi thành công","save.ok":"Lưu thành công","menu.welcome":"Chào mừng","menu.home":"Trang chủ","menu.dashboard":"Bảng điều khiển","menu.dashboard.indicator":"Phân tích chỉ báo","menu.dashboard.community":"Cộng đồng chỉ báo","menu.dashboard.analysis":"Phân tích AI","menu.dashboard.tradingAssistant":"Trợ lý giao dịch","menu.dashboard.aiTradingAssistant":"Trợ lý giao dịch AI","menu.dashboard.signalRobot":"Robot tín hiệu","menu.dashboard.monitor":"Giám sát Trang","menu.dashboard.workplace":"Nơi làm việc","menu.form":"Trang biểu mẫu","menu.form.basic-form":"Biểu mẫu cơ bản","menu.form.step-form":"Biểu mẫu từng bước","menu.form.step-form.info":"Biểu mẫu từng bước (Điền thông tin chuyển khoản)","menu.form.step-form.confirm":"Biểu mẫu từng bước (Xác nhận thông tin chuyển khoản)","menu.form.step-form.result":"Biểu mẫu từng bước (Hoàn tất)","menu.form.advanced-form":"Biểu mẫu nâng cao","menu.list":"Trang danh sách","menu.list.table-list":"Bảng truy vấn","menu.list.basic-list":"Tiêu chuẩn Menu.list","menu.list.card-list":"Danh sách thẻ","menu.list.search-list":"Tìm kiếm danh sách","menu.list.search-list.articles":"Tìm kiếm danh sách (Bài viết)","menu.list.search-list.projects":"Tìm kiếm danh sách (Dự án)","menu.list.search-list.applications":"Tìm kiếm danh sách (Ứng dụng)","menu.profile":"Trang chi tiết","menu.profile.basic":"Trang chi tiết cơ bản","menu.profile.advanced":"Trang chi tiết nâng cao","menu.result":"Trang kết quả","menu.result.success":"Trang thành công","menu.result.fail":"Trang thất bại","menu.exception":"Ngoại lệ Trang","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"Đang gây ra lỗi","menu.account":"Trang cá nhân","menu.account.center":"Trung tâm cá nhân","menu.account.settings":"Cài đặt cá nhân","menu.account.trigger":"Đang gây ra lỗi","menu.account.logout":"Đăng xuất","menu.wallet":"Ví của tôi","menu.docs":"Trung tâm tài liệu","menu.docs.detail":"Chi tiết tài liệu","menu.header.refreshPage":"Làm mới Trang","menu.invite.friends":"Mời bạn bè","app.setting.pagestyle":"Cài đặt kiểu tổng thể","app.setting.pagestyle.light":"Kiểu menu sáng","app.setting.pagestyle.dark":"Kiểu menu tối","app.setting.pagestyle.realdark":"Chế độ tối","app.setting.themecolor":"Màu chủ đề","app.setting.navigationmode":"Chế độ điều hướng","app.setting.sidemenu.nav":"Điều hướng thanh bên","app.setting.topmenu.nav":"Điều hướng trên cùng","app.setting.content-width":"Chiều rộng vùng nội dung","app.setting.content-width.tooltip":"Cài đặt này chỉ có hiệu lực khi [Điều hướng trên cùng] được bật","app.setting.content-width.fixed":"Cố định","app.setting.content-width.fluid":"Linh hoạt","app.setting.fixedheader":"Tiêu đề cố định","app.setting.fixedheader.tooltip":"Có thể cấu hình khi tiêu đề cố định","app.setting.autoHideHeader":"Ẩn tiêu đề khi vuốt xuống","app.setting.fixedsidebar":"Menu thanh bên cố định","app.setting.sidemenu":"Bố cục menu thanh bên","app.setting.topmenu":"Bố cục menu trên cùng","app.setting.othersettings":"Các cài đặt khác","app.setting.weakmode":"Chế độ màu yếu","app.setting.multitab":"Chế độ nhiều tab","app.setting.copy":"Sao chép cài đặt","app.setting.loading":"Đang tải theme","app.setting.copyinfo":"Đã sao chép cài đặt thành công src/config/defaultSettings.js","app.setting.copy.success":"Sao chép hoàn tất","app.setting.copy.fail":"Sao chép thất bại","app.setting.theme.switching":"Đang chuyển đổi giao diện!","app.setting.production.hint":"Thanh cấu hình chỉ dùng để xem trước trong môi trường phát triển và sẽ không hiển thị trong môi trường sản xuất. Vui lòng sao chép và chỉnh sửa thủ công tệp cấu hình.","app.setting.themecolor.daybreak":"Xanh dương bình minh (mặc định)","app.setting.themecolor.dust":"Hoàng hôn","app.setting.themecolor.volcano":"Núi lửa","app.setting.themecolor.sunset":"Hoàng hôn","app.setting.themecolor.cyan":"Xanh lam sáng","app.setting.themecolor.green":"Xanh lục cực quang","app.setting.themecolor.geekblue":"Xanh dương công nghệ","app.setting.themecolor.purple":"Tím","app.setting.tooltip":"Cài đặt trang","user.login.userName":"Tên người dùng","user.login.password":"Mật khẩu","user.login.username.placeholder":"Tài khoản: admin","user.login.password.placeholder":"Mật khẩu: admin hoặc ant.design","user.login.message-invalid-credentials":"Đăng nhập thất bại, vui lòng kiểm tra email và mã xác minh của bạn","user.login.message-invalid-verification-code":"Mã xác minh không chính xác","user.login.tab-login-credentials":"Đăng nhập bằng tài khoản và mật khẩu","user.login.tab-login-email":"Đăng nhập bằng email","user.login.tab-login-mobile":"Đăng nhập bằng số điện thoại","user.login.captcha.placeholder":"Vui lòng nhập mã xác minh hình ảnh","user.login.mobile.placeholder":"Số điện thoại Số điện thoại","user.login.mobile.verification-code.placeholder":"Mã xác thực","user.login.email.placeholder":"Vui lòng nhập địa chỉ email","user.login.email.verification-code.placeholder":"Vui lòng nhập mã xác thực","user.login.email.sending":"Đang gửi mã xác thực...","user.login.email.send-success-title":"Thông báo","user.login.email.send-success":"Mã xác thực đã được gửi thành công, vui lòng kiểm tra email của bạn","user.login.sms.send-success":"Mã xác thực đã được gửi thành công, vui lòng kiểm tra tin nhắn SMS của bạn","user.login.remember-me":"Tự động đăng nhập","user.login.forgot-password":"Quên mật khẩu Mật khẩu","user.login.sign-in-with":"Các phương thức đăng nhập khác","user.login.signup":"Đăng ký tài khoản","user.login.login":"Đăng nhập","user.register.register":"Đăng ký","user.register.email.placeholder":"Email","user.register.password.placeholder":"Vui lòng nhập ít nhất 6 ký tự. Vui lòng không sử dụng mật khẩu dễ đoán.","user.register.password.popover-message":"Vui lòng nhập ít nhất 6 ký tự. Vui lòng không sử dụng mật khẩu dễ đoán.","user.register.confirm-password.placeholder":"Xác nhận mật khẩu","user.register.get-verification-code":"Lấy mã xác minh","user.register.sign-in":"Đăng nhập bằng tài khoản hiện có","user.register-result.msg":"Tài khoản của bạn: {email} đã được đăng ký thành công","user.register-result.activation-email":"Email kích hoạt đã được gửi đến hộp thư đến của bạn. Email có hiệu lực trong 24 giờ. Vui lòng đăng nhập vào email của bạn và nhấp vào liên kết trong email để kích hoạt tài khoản.","user.register-result.back-home":"Quay lại trang chủ","user.register-result.view-mailbox":"Xem email","user.email.required":"Vui lòng nhập địa chỉ email của bạn!","user.email.wrong-format":"Định dạng địa chỉ email không chính xác!","user.userName.required":"Vui lòng nhập tên người dùng hoặc địa chỉ email của bạn","user.password.required":"Vui lòng nhập mật khẩu của bạn!","user.password.twice.msg":"Hai mật khẩu không khớp!","user.password.strength.msg":"Mật khẩu không đủ mạnh","user.password.strength.strong":"Độ mạnh: Mạnh","user.password.strength.medium":"Độ mạnh: Trung bình","user.password.strength.low":"Độ mạnh: Yếu","user.password.strength.short":"Độ mạnh: Quá ngắn","user.confirm-password.required":"Vui lòng xác nhận mật khẩu của bạn!","user.phone-number.required":"Vui lòng nhập số điện thoại hợp lệ","user.phone-number.wrong-format":"Định dạng số điện thoại không chính xác!","user.verification-code.required":"Vui lòng nhập mã xác minh!","user.captcha.required":"Vui lòng nhập mã xác minh hình ảnh!","user.login.infos":"QuantDinger là công cụ phân tích cổ phiếu đa tác nhân AI và không có chứng chỉ tư vấn đầu tư chứng khoán. Tất cả kết quả phân tích, xếp hạng và ý kiến ​​tham khảo trên nền tảng đều được AI tự động tạo ra dựa trên dữ liệu lịch sử và chỉ dành cho mục đích học tập, nghiên cứu và trao đổi kỹ thuật. Chúng không cấu thành bất kỳ lời khuyên đầu tư hoặc cơ sở ra quyết định nào. Đầu tư cổ phiếu tiềm ẩn nhiều rủi ro như rủi ro thị trường, rủi ro thanh khoản và rủi ro chính sách, có thể dẫn đến mất vốn gốc. Người dùng nên đưa ra quyết định độc lập dựa trên khả năng chấp nhận rủi ro của mình, và mọi hành vi đầu tư và hậu quả phát sinh từ việc sử dụng công cụ này đều do người dùng chịu trách nhiệm. Thị trường đầy rủi ro, và đầu tư cần thận trọng.","user.login.tab-login-web3":"Đăng nhập Web3","user.login.web3.tip":"Đăng nhập bằng ví để xác thực chữ ký","user.login.web3.connect":"Kết nối ví và đăng nhập","user.login.web3.no-wallet":"Không phát hiện ví","user.login.web3.no-address":"Không lấy được địa chỉ ví","user.login.web3.nonce-failed":"Không thể lấy số ngẫu nhiên","user.login.web3.verify-failed":"Xác thực chữ ký thất bại","user.login.web3.success":"Đăng nhập thành công","user.login.web3.failed":"Đăng nhập ví thất bại","nav.no_wallet":"Ví không được tìm thấy đã phát hiện","nav.copy":"Sao chép","nav.copy_success":"Sao chép thành công","user.login.oauth.google":"Đăng nhập bằng Google","user.login.oauth.github":"Đăng nhập bằng GitHub","user.login.oauth.loading":"Đang chuyển hướng đến trang xác thực...","user.login.oauth.failed":"Đăng nhập OAuth thất bại","user.login.oauth.get-url-failed":"Không thể lấy liên kết xác thực","user.login.subtitle":"Thông tin chi tiết định lượng về thị trường toàn cầu","user.login.legal.title":"Tuyên bố pháp lý","user.login.legal.view":"Xem tuyên bố pháp lý","user.login.legal.collapse":"Thu gọn Tuyên bố pháp lý","user.login.legal.agree":"Tôi đã đọc và đồng ý với tuyên bố pháp lý","user.login.legal.required":"Vui lòng đọc và kiểm tra tuyên bố pháp lý trước","user.login.legal.content":"QuantDinger là công cụ phân tích cổ phiếu đa tác nhân AI và không có bằng cấp tư vấn đầu tư chứng khoán. Tất cả kết quả phân tích, xếp hạng và ý kiến ​​tham khảo trên nền tảng đều được AI tự động tạo ra dựa trên dữ liệu lịch sử và chỉ dành cho mục đích học tập, nghiên cứu và trao đổi kỹ thuật, và không cấu thành bất kỳ lời khuyên đầu tư hoặc cơ sở ra quyết định nào. Đầu tư cổ phiếu tiềm ẩn nhiều rủi ro như rủi ro thị trường, rủi ro thanh khoản và rủi ro chính sách, có thể dẫn đến mất vốn gốc. Người dùng nên đưa ra quyết định độc lập dựa trên khả năng chấp nhận rủi ro của mình, và mọi hành vi đầu tư và hậu quả phát sinh từ việc sử dụng công cụ này sẽ do người dùng chịu trách nhiệm. Thị trường đầy rủi ro, và đầu tư cần thận trọng.","user.login.privacy.title":"Điều khoản Quyền riêng tư Người dùng","user.login.privacy.view":"Xem Điều khoản Quyền riêng tư Người dùng","user.login.privacy.collapse":"Thu gọn Điều khoản Quyền riêng tư Người dùng","user.login.privacy.content":"Chúng tôi coi trọng quyền riêng tư và việc bảo vệ dữ liệu của bạn. 1) Phạm vi Thu thập: Chúng tôi chỉ thu thập thông tin cần thiết để thực hiện các chức năng (chẳng hạn như email, số điện thoại di động, mã vùng, địa chỉ ví Web3) và nhật ký cần thiết cũng như thông tin thiết bị. 2) Mục đích Sử dụng: Để đăng nhập tài khoản và xác minh bảo mật, cung cấp chức năng dịch vụ, khắc phục sự cố và tuân thủ các yêu cầu. 3) Lưu trữ và Bảo mật: Dữ liệu được lưu trữ mã hóa và các biện pháp kiểm soát quyền và truy cập cần thiết được thực hiện để ngăn chặn truy cập trái phép, tiết lộ hoặc mất mát. 4) Chia sẻ và Bên thứ ba: Ngoại trừ trường hợp được yêu cầu bởi luật và quy định hoặc cần thiết để thực hiện dịch vụ, chúng tôi sẽ không chia sẻ thông tin cá nhân của bạn với bên thứ ba; Nếu có sự tham gia của các dịch vụ bên thứ ba (chẳng hạn như ví điện tử, nhà cung cấp dịch vụ SMS), dữ liệu sẽ chỉ được xử lý ở mức tối thiểu cần thiết để thực hiện các chức năng. 5) Cookie/Bộ nhớ cục bộ: Được sử dụng để xác thực trạng thái đăng nhập và duy trì phiên làm việc cần thiết (chẳng hạn như mã thông báo, PHPSESSID). Bạn có thể xóa hoặc hạn chế chúng trong trình duyệt của mình. 6) Quyền cá nhân: Bạn có thể thực hiện các quyền của mình để yêu cầu, sửa đổi, xóa và rút lại sự đồng ý theo luật và quy định hiện hành. 7) Thay đổi và Thông báo: Các bản cập nhật cho các điều khoản này sẽ được hiển thị rõ ràng trên trang. Việc tiếp tục sử dụng dịch vụ này cho thấy bạn đã đọc và đồng ý với nội dung được cập nhật. Nếu bạn không đồng ý với các điều khoản này hoặc bất kỳ bản cập nhật nào trong đó, vui lòng ngừng sử dụng dịch vụ này và liên hệ với chúng tôi. ","account.basicInfo":"Thông tin cơ bản","account.id":"ID người dùng","account.username":"Tên người dùng","account.nickname":"Biệt danh","account.email":"Email","account.mobile":"Số điện thoại","account.web3address":"Địa chỉ ví","account.pid":"ID người giới thiệu","account.level":"Cấp độ người dùng","account.money":"Số dư","account.qdtBalance":"Số dư QDT","account.score":"Điểm","account.createtime":"Thời gian đăng ký","account.inviteLink":"Liên kết mời","account.recharge":"Nạp tiền","account.rechargeTip":"Mã QR bên dưới để nạp tiền bằng WeChat hoặc Alipay","account.qrCodePlaceholder":"Mã QR giả lập","account.rechargeAmount":"Số tiền cần nạp","account.enterAmount":"Vui lòng nhập số tiền cần nạp","account.rechargeHint":"Số tiền nạp tối thiểu: 1 QDT","account.confirmRecharge":"Xác nhận nạp tiền","account.enterValidAmount":"Vui lòng nhập số tiền hợp lệ","account.rechargeSuccess":"Nạp tiền thành công! Số tiền {amount} QDT đã được nạp","account.settings.menuMap.basic":"Cài đặt cơ bản","account.settings.menuMap.security":"Cài đặt bảo mật","account.settings.menuMap.notification":"Thông báo tin nhắn mới","account.settings.menuMap.moneyLog":"Chi tiết quỹ","account.moneyLog.empty":"Không có chi tiết quỹ","account.moneyLog.total":"Tổng số {total} giao dịch","account.moneyLog.type.purchase":"Hạn mức mua hàng","account.moneyLog.type.recharge":"Nạp tiền","account.moneyLog.type.refund":"Hoàn tiền","account.moneyLog.type.reward":"Thưởng","account.moneyLog.type.income":"Thu nhập Các chỉ báo","account.moneyLog.type.commission":"Phí nền tảng","wallet.balance":"Số dư QDT","wallet.recharge":"Nạp tiền","wallet.withdraw":"Rút tiền","wallet.filter":"Lọc","wallet.reset":"Đặt lại","wallet.totalRecharge":"Tổng số tiền nạp","wallet.totalWithdraw":"Tổng số tiền rút","wallet.totalIncome":"Tổng số tiền thu nhập","wallet.records":"Lịch sử giao dịch và chi tiết quỹ","wallet.tradingRecords":"Lịch sử giao dịch","wallet.moneyLog":"Chi tiết quỹ","wallet.rechargeTip":"Vui lòng quét mã QR bên dưới bằng WeChat hoặc Alipay để nạp tiền","wallet.qrCodePlaceholder":"Mã QR (mô phỏng)","wallet.rechargeAmount":"Số tiền cần nạp","wallet.enterAmount":"Vui lòng nhập số tiền cần nạp","wallet.rechargeHint":"Số tiền nạp tối thiểu: 1 QDT","wallet.confirmRecharge":"Xác nhận nạp tiền","wallet.enterValidAmount":"Vui lòng nhập số tiền hợp lệ","wallet.rechargeSuccess":"Nạp tiền thành công! Đã thanh toán {amount} QDT","wallet.rechargeFailed":"Giao dịch thất bại","wallet.withdrawTip":"Vui lòng nhập số tiền rút và địa chỉ rút tiền","wallet.withdrawAmount":"Số tiền rút","wallet.enterWithdrawAmount":"Vui lòng nhập số tiền rút","wallet.withdrawHint":"Số tiền rút tối thiểu: 1 QDT","wallet.withdrawAddress":"Địa chỉ rút tiền (tùy chọn)","wallet.enterWithdrawAddress":"Vui lòng nhập địa chỉ rút tiền","wallet.confirmWithdraw":"Xác nhận rút tiền","wallet.enterValidWithdrawAmount":"Vui lòng nhập số tiền rút hợp lệ","wallet.insufficientBalance":"Số dư không đủ","wallet.withdrawSuccess":"Rút tiền thành công! Số tiền {amount} QDT đã rút","wallet.withdrawFailed":"Giao dịch rút tiền thất bại","wallet.noTradingRecords":"Không có bản ghi giao dịch nào","wallet.noMoneyLog":"Không có chi tiết giao dịch","wallet.loadTradingRecordsFailed":"Không thể tải bản ghi giao dịch","wallet.loadMoneyLogFailed":"Không thể tải chi tiết giao dịch","wallet.moneyLogTotal":"Tổng số {total} bản ghi","wallet.moneyLogTypeTitle":"Loại","wallet.moneyLogType.all":"Tất cả các loại","wallet.table.time":"Thời gian","wallet.table.type":"Loại","wallet.table.price":"Giá","wallet.table.amount":"Số lượng","wallet.table.money":"Số tiền","wallet.table.balance":"Số dư","wallet.table.memo":"Ghi chú","wallet.table.value":"Giá trị","wallet.table.profit":"Lợi nhuận/Thua lỗ","wallet.table.commission":"Hoa hồng","wallet.table.total":"Tổng số {total} bản ghi","wallet.tradeType.buy":"Mua","wallet.tradeType.sell":"Bán","wallet.tradeType.liquidation":"Thanh lý","wallet.tradeType.openLong":"Mở lệnh mua","wallet.tradeType.addLong":"Thêm lệnh mua","wallet.tradeType.closeLong":"Đóng lệnh mua","wallet.tradeType.closeLongStop":"Đóng lệnh mua và cắt lỗ","wallet.tradeType.closeLongProfit":"Chốt lời và đóng lệnh mua","wallet.tradeType.openShort":"Mở vị thế bán khống","wallet.tradeType.addShort":"Thêm vị thế bán khống","wallet.tradeType.closeShort":"Đóng vị thế bán khống","wallet.tradeType.closeShortStop":"Đóng vị thế bán khống với lệnh dừng lỗ","wallet.tradeType.closeShortProfit":"Chốt lời và đóng vị thế bán khống","wallet.moneyLogType.purchase":"Chỉ báo mua","wallet.moneyLogType.recharge":"Nạp tiền","wallet.moneyLogType.withdraw":"Rút tiền mặt","wallet.moneyLogType.refund":"Hoàn tiền","wallet.moneyLogType.reward":"Thưởng","wallet.moneyLogType.income":"Thu nhập","wallet.moneyLogType.commission":"Phí giao dịch","wallet.web3Address.required":"Vui lòng nhập địa chỉ ví Web3 của bạn trước","wallet.web3Address.requiredDescription":"Bạn cần liên kết địa chỉ ví Web3 của mình trước khi gửi tiền để nhận tiền gửi","wallet.web3Address.placeholder":"Vui lòng nhập địa chỉ ví Web3 của bạn (bắt đầu bằng 0x)","wallet.web3Address.save":"Lưu địa chỉ ví","wallet.web3Address.saveSuccess":"Địa chỉ ví đã được lưu thành công","wallet.web3Address.saveFailed":"Không thể lưu địa chỉ ví","wallet.web3Address.invalidFormat":"Vui lòng nhập địa chỉ ví Web3 hợp lệ (định dạng Ethereum: 42 ký tự bắt đầu bằng 0x, hoặc TRC20) Định dạng: 34 ký tự bắt đầu bằng T)","wallet.selectCoin":"Chọn loại tiền điện tử","wallet.selectChain":"Chọn chuỗi khối","wallet.chain.eth":"ETH (ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"BSC","wallet.targetQdtAmount":"Số lượng QDT bạn muốn đổi (tùy chọn)","wallet.targetQdtAmount.placeholder":"Vui lòng nhập số lượng QDT bạn muốn đổi, giá QDT hiện tại: {price} USDT","wallet.targetQdtAmount.requiredUsdt":"Số tiền cần nạp: {amount} USDT","wallet.rechargeAddress":"Địa chỉ nạp tiền","wallet.copyAddress":"Sao chép","wallet.copySuccess":"Sao chép thành công!","wallet.copyFailed":"Sao chép thất bại, vui lòng sao chép thủ công","wallet.rechargeAddressHint":"Vui lòng đảm bảo bạn sử dụng chuỗi {chain} để gửi {coin} vào địa chỉ này","wallet.qdtPrice.loading":"Đang tải...","wallet.rechargeTip.new":"Vui lòng chọn loại tiền tệ và chuỗi, sau đó quét mã QR bên dưới để gửi tiền","wallet.exchangeRate":"1 QDT ≈ {rate} USDT","wallet.withdrawableAmount":"Số tiền có thể rút","wallet.totalBalance":"Tổng số dư","wallet.insufficientWithdrawable":"Số tiền có thể rút không đủ, hiện tại chỉ có thể rút: {amount} QDT","wallet.withdrawAddressRequired":"Vui lòng nhập địa chỉ rút tiền địa chỉ","wallet.withdrawAddressHint":"Vui lòng đảm bảo địa chỉ chính xác; không thể hủy bỏ giao dịch rút tiền sau khi đã gửi","wallet.withdrawSubmitSuccess":"Yêu cầu rút tiền đã được gửi thành công; Vui lòng chờ xem xét","menu.footer.contactUs":"Liên hệ với chúng tôi","menu.footer.getSupport":"Nhận hỗ trợ","menu.footer.socialAccounts":"Tài khoản mạng xã hội","menu.footer.userAgreement":"Thỏa thuận người dùng","menu.footer.privacyPolicy":"Chính sách bảo mật","menu.footer.support":"Hỗ trợ","menu.footer.featureRequest":"Yêu cầu tính năng","menu.footer.email":"Email","menu.footer.liveChat":"Trò chuyện trực tuyến 24/7","dashboard.analysis.title":"Phân tích đa chiều","dashboard.analysis.subtitle":"Phân tích tài chính toàn diện dựa trên AI Nền tảng","dashboard.analysis.selectSymbol":"Chọn hoặc nhập mã chứng khoán","dashboard.analysis.selectModel":"Chọn mô hình","dashboard.analysis.startAnalysis":"Bắt ​​đầu phân tích","dashboard.analysis.history":"Lịch sử","dashboard.analysis.tab.overview":"Phân tích toàn diện","dashboard.analysis.tab.fundamental":"Các yếu tố cơ bản","dashboard.analysis.tab.technical":"Phân tích kỹ thuật","dashboard.analysis.tab.news":"Tin tức","dashboard.analysis.tab.sentiment":"Tâm lý thị trường","dashboard.analysis.tab.risk":"Rủi ro","dashboard.analysis.tab.debate":"Tăng/Giảm giá","dashboard.analysis.tab.decision":"Quyết định cuối cùng","dashboard.analysis.empty.selectSymbol":"Chọn mục tiêu để bắt đầu phân tích","dashboard.analysis.empty.selectSymbolDesc":"Chọn mục tiêu từ danh sách theo dõi của bạn hoặc nhập mã của nó để nhận báo cáo phân tích AI đa chiều","dashboard.analysis.empty.startAnalysis":'Nhấp vào nút "Bắt đầu phân tích" để phân tích đa chiều',"dashboard.analysis.empty.startAnalysisDesc":"Chúng tôi sẽ cung cấp cho bạn phân tích toàn diện từ nhiều khía cạnh bao gồm cơ bản, kỹ thuật, tin tức, tâm lý và rủi ro","dashboard.analysis.empty.noData":"Không có dữ liệu phân tích cho {type}, vui lòng thực hiện phân tích toàn diện trước","dashboard.analysis.empty.noWatchlist":"Không có danh sách theo dõi có sẵn","dashboard.analysis.empty.noHistory":"Không có dữ liệu lịch sử","dashboard.analysis.empty.watchlistHint":"Không có danh sách theo dõi, vui lòng thực hiện phân tích toàn diện trước","dashboard.analysis.empty.noDebateData":"Không có dữ liệu tranh luận","dashboard.analysis.empty.noDecisionData":"Không có dữ liệu quyết định","dashboard.analysis.empty.selectAgent":"Vui lòng chọn một Đại lý để xem kết quả phân tích","dashboard.analysis.loading.analyzing":"Đang phân tích, vui lòng chờ...","dashboard.analysis.loading.fundamental":"Đang phân tích dữ liệu cơ bản...","dashboard.analysis.loading.technical":"Đang phân tích các chỉ báo kỹ thuật...","dashboard.analysis.loading.news":"Đang phân tích dữ liệu tin tức...","dashboard.analysis.loading.sentiment":"Phân tích tâm lý thị trường...","dashboard.analysis.loading.risk":"Đánh giá rủi ro...","dashboard.analysis.loading.debate":"Cuộc tranh luận đang diễn ra giữa phe tăng giá và phe giảm giá...","dashboard.analysis.loading.decision":"Đưa ra quyết định cuối cùng...","dashboard.analysis.score.overall":"Điểm tổng thể","dashboard.analysis.score.recommendation":"Lời khuyên đầu tư","dashboard.analysis.score.confidence":"Mức độ tin cậy","dashboard.analysis.dimension.fundamental":"các yếu tố cơ bản","dashboard.analysis.dimension.technical":"các yếu tố kỹ thuật","dashboard.analysis.dimension.news":"tin tức","dashboard.analysis.dimension.sentiment":"tâm lý","dashboard.analysis.dimension.risk":"rủi ro","dashboard.analysis.card.dimensionScores":"điểm số cho từng yếu tố","dashboard.analysis.card.overviewReport":"báo cáo tổng quan","dashboard.analysis.card.financialMetrics":"các chỉ số tài chính","dashboard.analysis.card.fundamentalReport":"báo cáo phân tích cơ bản","dashboard.analysis.card.technicalIndicators":"Các chỉ số kỹ thuật Các chỉ báo","dashboard.analysis.card.technicalReport":"Báo cáo phân tích kỹ thuật","dashboard.analysis.card.newsList":"Tin tức liên quan","dashboard.analysis.card.newsReport":"Báo cáo phân tích tin tức","dashboard.analysis.card.sentimentIndicators":"Các chỉ báo tâm lý","dashboard.analysis.card.sentimentReport":"Báo cáo phân tích tâm lý","dashboard.analysis.card.riskMetrics":"Các chỉ báo rủi ro","dashboard.analysis.card.riskReport":"Báo cáo đánh giá rủi ro","dashboard.analysis.card.bullView":"Quan điểm lạc quan","dashboard.analysis.card.bearView":"Quan điểm bi quan","dashboard.analysis.card.researchConclusion":"Kết luận của nhà nghiên cứu","dashboard.analysis.card.traderPlan":"Kế hoạch giao dịch","dashboard.analysis.card.riskDebate":"Thảo luận của Ủy ban Rủi ro","dashboard.analysis.card.finalDecision":"Quyết định cuối cùng","dashboard.analysis.card.tradePlanDetail":"Chi tiết kế hoạch giao dịch","dashboard.analysis.tradingPlan.entry_price":"Giá vào lệnh","dashboard.analysis.tradingPlan.position_size":"Quy mô vị thế","dashboard.analysis.tradingPlan.stop_loss":"Cắt lỗ","dashboard.analysis.tradingPlan.take_profit":"Chốt lời","dashboard.analysis.label.confidence":"Mức độ tự tin Mức độ","dashboard.analysis.label.keyPoints":"Điểm chính","dashboard.analysis.label.riskWarning":"Cảnh báo rủi ro","dashboard.analysis.risk.risky":"Quan điểm rủi ro","dashboard.analysis.risk.neutral":"Quan điểm trung lập","dashboard.analysis.risk.safe":"Quan điểm an toàn","dashboard.analysis.risk.conclusion":"Kết luận","dashboard.analysis.feature.fundamental":"Phân tích cơ bản","dashboard.analysis.feature.technical":"Phân tích kỹ thuật","dashboard.analysis.feature.news":"Phân tích tin tức","dashboard.analysis.feature.sentiment":"Phân tích cảm xúc","dashboard.analysis.feature.risk":"Rủi ro Đánh giá","dashboard.analysis.watchlist.title":"Danh sách theo dõi của tôi","dashboard.analysis.watchlist.add":"Thêm","dashboard.analysis.watchlist.addStock":"Thêm cổ phiếu","dashboard.analysis.modal.addStock.title":"Thêm vào danh sách theo dõi","dashboard.analysis.modal.addStock.confirm":"Xác nhận","dashboard.analysis.modal.addStock.cancel":"Hủy","dashboard.analysis.modal.addStock.market":"Loại thị trường","dashboard.analysis.modal.addStock.marketPlaceholder":"Vui lòng chọn thị trường","dashboard.analysis.modal.addStock.marketRequired":"Vui lòng chọn loại thị trường","dashboard.analysis.modal.addStock.symbol":"Mã chứng khoán","dashboard.analysis.modal.addStock.symbolPlaceholder":"Ví dụ: AAPL, TSLA, GOOGL, 000001, BTC","dashboard.analysis.modal.addStock.symbolRequired":"Vui lòng nhập mã chứng khoán","dashboard.analysis.modal.addStock.searchPlaceholder":"Tìm kiếm mã chứng khoán hoặc tên cổ phiếu","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"Tìm kiếm hoặc nhập mã chứng khoán (ví dụ: AAPL, BTC/USDT, EUR/USD)","dashboard.analysis.modal.addStock.searchOrInputHint":"Hỗ trợ tìm kiếm cổ phiếu trong cơ sở dữ liệu hoặc nhập trực tiếp mã (hệ thống sẽ tự động truy xuất tên)","dashboard.analysis.modal.addStock.search":"Tìm kiếm","dashboard.analysis.modal.addStock.searchResults":"Kết quả tìm kiếm","dashboard.analysis.modal.addStock.hotSymbols":"Cổ phiếu nóng","dashboard.analysis.modal.addStock.noHotSymbols":"Không có cổ phiếu nóng","dashboard.analysis.modal.addStock.selectedSymbol":"Cổ phiếu đã chọn","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"Vui lòng chọn cổ phiếu trước","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"Vui lòng chọn cổ phiếu hoặc nhập mã cổ phiếu","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"Vui lòng nhập mã cổ phiếu","dashboard.analysis.modal.addStock.pleaseSelectMarket":"Vui lòng chọn loại thị trường","dashboard.analysis.modal.addStock.searchFailed":"Tìm kiếm thất bại, vui lòng thử lại sau","dashboard.analysis.modal.addStock.noSearchResults":"Không tìm thấy cổ phiếu phù hợp","dashboard.analysis.modal.addStock.willAutoFetchName":"Hệ thống sẽ tự động lấy tên","dashboard.analysis.modal.addStock.addDirectly":"Thêm trực tiếp","dashboard.analysis.modal.addStock.nameWillBeFetched":"Tên sẽ được tự động lấy khi thêm","dashboard.analysis.market.USStock":"Cổ phiếu Mỹ","dashboard.analysis.market.Crypto":"Tiền điện tử","dashboard.analysis.market.Forex":"Ngoại hối","dashboard.analysis.market.Futures":"Hợp đồng tương lai","dashboard.analysis.modal.history.title":"Lịch sử phân tích","dashboard.analysis.modal.history.viewResult":"Xem kết quả","dashboard.analysis.modal.history.completeTime":"Thời gian hoàn thành","dashboard.analysis.modal.history.error":"Lỗi","dashboard.analysis.status.pending":"Đang chờ xử lý","dashboard.analysis.status.processing":"Đang xử lý","dashboard.analysis.status.completed":"Hoàn thành","dashboard.analysis.status.failed":"Thất bại","dashboard.analysis.message.selectSymbol":"Vui lòng chọn mục tiêu trước","dashboard.analysis.message.taskCreated":"Tác vụ phân tích đã được tạo, đang thực thi trong nền...","dashboard.analysis.message.analysisComplete":"Phân tích đã hoàn tất","dashboard.analysis.message.analysisCompleteCache":"Phân tích đã hoàn tất (sử dụng dữ liệu được lưu trong bộ nhớ cache)","dashboard.analysis.message.analysisFailed":"Phân tích thất bại, vui lòng thử lại sau","dashboard.analysis.message.addStockSuccess":"Đã thêm thành công","dashboard.analysis.message.addStockFailed":"Thêm thất bại","dashboard.analysis.message.removeStockSuccess":"Đã xóa thành công","dashboard.analysis.message.removeStockFailed":"Xóa thất bại","dashboard.analysis.message.resumingAnalysis":"Đang tiếp tục tác vụ phân tích...","dashboard.analysis.message.deleteSuccess":"Đã xóa thành công","dashboard.analysis.message.deleteFailed":"Xóa thất bại","dashboard.analysis.modal.history.delete":"Xóa","dashboard.analysis.modal.history.deleteConfirm":"Bạn có chắc chắn muốn xóa bản ghi phân tích này không?","dashboard.analysis.test":"Cửa hàng đường Gongzhuan {không}","dashboard.analysis.introduce":"Mô tả chỉ báo","dashboard.analysis.total-sales":"Tổng doanh thu","dashboard.analysis.day-sales":"Doanh thu trung bình hàng ngày","dashboard.analysis.visits":"Lượt truy cập","dashboard.analysis.visits-trend":"Lượt truy cập xu hướng","dashboard.analysis.visits-ranking":"Xếp hạng lượt truy cập cửa hàng","dashboard.analysis.day-visits":"Lượt truy cập hàng ngày","dashboard.analysis.week":"Lượt truy cập hàng tuần so với cùng kỳ năm trước","dashboard.analysis.day":"Lượt truy cập hàng ngày so với cùng kỳ năm trước","dashboard.analysis.payments":"Số lượng thanh toán","dashboard.analysis.conversion-rate":"Tỷ lệ chuyển đổi","dashboard.analysis.operational-effect":"Hiệu quả hoạt động","dashboard.analysis.sales-trend":"Xu hướng doanh số","dashboard.analysis.sales-ranking":"Xếp hạng doanh số cửa hàng","dashboard.analysis.all-year":"Quanh năm","dashboard.analysis.all-month":"Tháng này","dashboard.analysis.all-week":"Tuần này","dashboard.analysis.all-day":"Hôm nay","dashboard.analysis.search-users":"Số lượng người dùng tìm kiếm","dashboard.analysis.per-capita-search":"Số lượt tìm kiếm trung bình trên đầu người","dashboard.analysis.online-top-search":"Các từ khóa tìm kiếm trực tuyến phổ biến","dashboard.analysis.the-proportion-of-sales":"Doanh số theo danh mục","dashboard.analysis.dropdown-option-one":"Phương án một","dashboard.analysis.dropdown-option-two":"Phương án hai","dashboard.analysis.channel.all":"Tất cả Kênh","dashboard.analysis.channel.online":"Trực tuyến","dashboard.analysis.channel.stores":"Cửa hàng","dashboard.analysis.sales":"Doanh thu bán hàng","dashboard.analysis.traffic":"Lưu lượng truy cập","dashboard.analysis.table.rank":"Xếp hạng","dashboard.analysis.table.search-keyword":"Từ khóa tìm kiếm","dashboard.analysis.table.users":"Số lượng người dùng","dashboard.analysis.table.weekly-range":"Tăng trưởng hàng tuần","dashboard.indicator.selectSymbol":"Chọn hoặc nhập mã cổ phiếu","dashboard.indicator.emptyWatchlistHint":"Hiện không có cổ phiếu nào trong danh sách theo dõi, vui lòng thêm vào, Đầu tiên","dashboard.indicator.hint.selectSymbol":"Vui lòng chọn cổ phiếu để bắt đầu phân tích","dashboard.indicator.hint.selectSymbolDesc":"Chọn hoặc nhập mã cổ phiếu vào ô tìm kiếm phía trên để xem biểu đồ nến và các chỉ báo kỹ thuật","dashboard.indicator.retry":"Thử lại","dashboard.indicator.panel.title":"Các chỉ báo kỹ thuật","dashboard.indicator.panel.realtimeOn":"Tắt cập nhật thời gian thực","dashboard.indicator.panel.realtimeOff":"Bật cập nhật thời gian thực","dashboard.indicator.panel.themeLight":"Chuyển sang chủ đề tối","dashboard.indicator.panel.themeDark":"Chuyển sang chủ đề sáng theme","dashboard.indicator.section.enabled":"Đã bật","dashboard.indicator.section.added":"Các chỉ báo tôi đã thêm","dashboard.indicator.section.custom":"Chỉ báo do tôi tự tạo","dashboard.indicator.section.bought":"Các chỉ báo tôi đã mua","dashboard.indicator.section.myCreated":"Các chỉ báo tôi đã tạo","dashboard.indicator.empty":"Chưa có chỉ báo nào, vui lòng thêm hoặc tạo chỉ báo trước","dashboard.indicator.buy":"Mua chỉ báo","dashboard.indicator.action.start":"Bắt ​​đầu","dashboard.indicator.action.stop":"Dừng","dashboard.indicator.action.edit":"Chỉnh sửa","dashboard.indicator.action.delete":"Xóa","dashboard.indicator.action.backtest":"Kiểm tra lại","dashboard.indicator.status.normal":"Bình thường","dashboard.indicator.status.normalPermanent":"Bình thường (Có hiệu lực vĩnh viễn)","dashboard.indicator.status.expired":"Đã hết hạn","dashboard.indicator.expiry.permanent":"Có hiệu lực vĩnh viễn","dashboard.indicator.expiry.noExpiry":"Không có ngày hết hạn","dashboard.indicator.expiry.expired":"Đã hết hạn: {date}","dashboard.indicator.expiry.expiresOn":"Ngày hết hạn: {date}","dashboard.indicator.delete.confirmTitle":"Xác nhận xóa","dashboard.indicator.delete.confirmContent":'Bạn có chắc chắn muốn xóa chỉ báo "{name}" không? Thao tác này không thể đảo ngược.',"dashboard.indicator.delete.confirmOk":"Xóa","dashboard.indicator.delete.confirmCancel":"Hủy","dashboard.indicator.delete.success":"Xóa thành công","dashboard.indicator.delete.failed":"Xóa thất bại","dashboard.indicator.save.success":"Lưu thành công","dashboard.indicator.save.failed":"Lưu thất bại","dashboard.indicator.error.loadWatchlistFailed":"Không thể tải danh sách theo dõi","dashboard.indicator.error.chartNotReady":"Thành phần biểu đồ chưa được khởi tạo, vui lòng chọn mục tiêu và đợi biểu đồ tải xong , load","dashboard.indicator.error.chartMethodNotReady":"Phương thức của thành phần biểu đồ chưa sẵn sàng, vui lòng thử lại sau","dashboard.indicator.error.chartExecuteNotReady":"Phương thức thực thi của thành phần biểu đồ chưa sẵn sàng, vui lòng thử lại sau","dashboard.indicator.error.parseFailed":"Không thể phân tích cú pháp mã Python","dashboard.indicator.error.parseFailedCheck":"Không thể phân tích cú pháp mã Python, vui lòng kiểm tra định dạng mã","dashboard.indicator.error.addIndicatorFailed":"Không thể thêm chỉ báo","dashboard.indicator.error.runIndicatorFailed":"Không thể chạy chỉ báo","dashboard.indicator.error.pleaseLogin":"Vui lòng đăng nhập trước","dashboard.indicator.error.loadDataFailed":"Tải dữ liệu thất bại","dashboard.indicator.error.loadDataFailedDesc":"Vui lòng kiểm tra kết nối mạng của bạn","dashboard.indicator.error.pythonEngineFailed":"Không thể tải công cụ Python; chức năng chỉ báo có thể không khả dụng","dashboard.indicator.error.chartInitFailed":"Khởi tạo biểu đồ thất bại","dashboard.indicator.warning.enterCode":"Vui lòng nhập mã chỉ báo trước","dashboard.indicator.warning.pyodideLoadFailed":"Không thể tải công cụ Python","dashboard.indicator.warning.pyodideLoadFailedDesc":"Tính năng này không khả dụng trong khu vực hoặc môi trường mạng hiện tại của bạn","dashboard.indicator.warning.chartNotInitialized":"Biểu đồ chưa được khởi tạo; Công cụ vẽ không khả dụng","dashboard.indicator.success.runIndicator":"Chỉ báo đã chạy thành công","dashboard.indicator.success.clearDrawings":"Đã xóa tất cả các đường","dashboard.indicator.sma":"SMA (Trung bình động ngắn hạn)","dashboard.indicator.ema":"EMA (Trung bình động hàm mũ)","dashboard.indicator.rsi":"RSI (Chỉ số sức mạnh tương đối)","dashboard.indicator.macd":"MACD","dashboard.indicator.bb":"Dải Bollinger (...Dải Bollinger)","dashboard.indicator.atr":"ATR (Chỉ số phạm vi trung bình thực)","dashboard.indicator.cci":"CCI (Chỉ số kênh hàng hóa)","dashboard.indicator.williams":"Williams %R (Chỉ số Williams %R)","dashboard.indicator.mfi":"MFI (Chỉ số dòng tiền)","dashboard.indicator.adx":"ADX (Chỉ số hướng trung bình)","dashboard.indicator.obv":"OBV (Chỉ số khối lượng cân bằng)","dashboard.indicator.adosc":"ADOSC (Chỉ báo dao động tích lũy/phân phối)","dashboard.indicator.ad":"AD (Chỉ báo đường tích lũy/phân phối)","dashboard.indicator.kdj":"KDJ (Chỉ báo ngẫu nhiên)","dashboard.indicator.signal.buy":"MUA","dashboard.indicator.signal.sell":"BÁN","dashboard.indicator.signal.supertrendBuy":"Mua theo xu hướng siêu mạnh","dashboard.indicator.signal.supertrendSell":"Bán theo xu hướng siêu mạnh","dashboard.indicator.chart.kline":"Đường K","dashboard.indicator.chart.volume":"Khối lượng","dashboard.indicator.chart.uptrend":"Xu hướng tăng","dashboard.indicator.chart.downtrend":"Xu hướng giảm","dashboard.indicator.tooltip.time":"Thời gian","dashboard.indicator.tooltip.open":"Mở","dashboard.indicator.tooltip.close":"Đóng","dashboard.indicator.tooltip.high":"Cao","dashboard.indicator.tooltip.low":"Thấp","dashboard.indicator.tooltip.volume":"Khối lượng","dashboard.indicator.drawing.line":"Đoạn thẳng","dashboard.indicator.drawing.horizontalLine":"Đường ngang","dashboard.indicator.drawing.verticalLine":"Đường thẳng đứng","dashboard.indicator.drawing.ray":"Tia","dashboard.indicator.drawing.straightLine":"Đường thẳng","dashboard.indicator.drawing.parallelLine":"Đường song song","dashboard.indicator.drawing.priceLine":"Giá","dashboard.indicator.drawing.priceChannel":"kênh giá","dashboard.indicator.drawing.fibonacciLine":"đường Fibonacci","dashboard.indicator.drawing.measure":"Đo lường","dashboard.indicator.drawing.clearAll":"xóa tất cả các đường đã vẽ","dashboard.indicator.market.USStock":"cổ phiếu Mỹ","dashboard.indicator.market.Crypto":"tiền điện tử","dashboard.indicator.market.Forex":"ngoại hối","dashboard.indicator.market.Futures":"hợp đồng tương lai","dashboard.indicator.create":"Tạo Indicator","dashboard.indicator.editor.title":"Tạo/Chỉnh sửa chỉ báo","dashboard.indicator.editor.name":"Tên chỉ báo","dashboard.indicator.editor.nameRequired":"Vui lòng nhập tên chỉ báo","dashboard.indicator.editor.namePlaceholder":"Vui lòng nhập tên chỉ báo","dashboard.indicator.editor.description":"Mô tả chỉ báo","dashboard.indicator.editor.descriptionPlaceholder":"Vui lòng nhập mô tả chỉ báo (tùy chọn)","dashboard.indicator.editor.code":"Mã Python","dashboard.indicator.editor.codeRequired":"Vui lòng nhập mã chỉ báo","dashboard.indicator.editor.codePlaceholder":"Vui lòng nhập mã Python code","dashboard.indicator.editor.run":"Chạy","dashboard.indicator.editor.runHint":"Nhấp vào nút chạy để xem trước hiệu ứng của chỉ báo trên biểu đồ nến","dashboard.indicator.editor.guide":"Hướng dẫn phát triển","dashboard.indicator.editor.guideTitle":"Hướng dẫn phát triển chỉ báo Python","dashboard.indicator.editor.save":"Lưu","dashboard.indicator.editor.cancel":"Hủy","dashboard.indicator.editor.unnamed":"Chỉ báo chưa được đặt tên","dashboard.indicator.editor.publishToCommunity":"Chia sẻ lên cộng đồng","dashboard.indicator.editor.publishToCommunityHint":"Sau khi chia sẻ, người dùng khác có thể xem và sử dụng các chỉ số của bạn, trong cộng đồng","dashboard.indicator.editor.indicatorType":"Loại chỉ báo","dashboard.indicator.editor.indicatorTypeRequired":"Vui lòng chọn loại chỉ báo","dashboard.indicator.editor.indicatorTypePlaceholder":"Vui lòng chọn loại chỉ báo","dashboard.indicator.editor.previewImage":"Hình ảnh xem trước","dashboard.indicator.editor.uploadImage":"Tải lên hình ảnh","dashboard.indicator.editor.previewImageHint":"Kích thước đề xuất: 800x400, kích thước không vượt quá 2MB","dashboard.indicator.editor.pricing":"Giá (QDT)","dashboard.indicator.editor.pricingType.free":"Miễn phí","dashboard.indicator.editor.pricingType.permanent":"Vĩnh viễn","dashboard.indicator.editor.pricingType.monthly":"Hàng tháng","dashboard.indicator.editor.price":"Giá","dashboard.indicator.editor.priceRequired":"Vui lòng nhập giá","dashboard.indicator.editor.pricePlaceholder":"Vui lòng nhập giá","dashboard.indicator.editor.pricingHint":"Mặc dù chỉ báo miễn phí có giá 0, nền tảng sẽ thưởng cho bạn dựa trên việc sử dụng chỉ báo và tỷ lệ đánh giá tích cực (QDT)","dashboard.indicator.editor.aiGenerate":"Tạo thông minh","dashboard.indicator.editor.aiPromptPlaceholder":"Hãy cho tôi biết ý tưởng của bạn, và Tôi sẽ tạo mã chỉ báo Python cho bạn","dashboard.indicator.editor.aiGenerateBtn":"Mã được tạo bởi AI","dashboard.indicator.editor.aiPromptRequired":"Vui lòng nhập ý tưởng của bạn","dashboard.indicator.editor.aiGenerateSuccess":"Tạo mã thành công","dashboard.indicator.editor.aiGenerateError":"Tạo mã thất bại, vui lòng thử lại sau","dashboard.indicator.backtest.title":"Kiểm thử ngược chỉ báo","dashboard.indicator.backtest.config":"Tham số kiểm thử ngược","dashboard.indicator.backtest.startDate":"Ngày bắt đầu","dashboard.indicator.backtest.endDate":"Ngày kết thúc Ngày","dashboard.indicator.backtest.selectStartDate":"Chọn ngày bắt đầu","dashboard.indicator.backtest.selectEndDate":"Chọn ngày kết thúc","dashboard.indicator.backtest.startDateRequired":"Vui lòng chọn ngày bắt đầu","dashboard.indicator.backtest.endDateRequired":"Vui lòng chọn ngày kết thúc","dashboard.indicator.backtest.initialCapital":"Vốn ban đầu","dashboard.indicator.backtest.initialCapitalRequired":"Vui lòng nhập vốn ban đầu","dashboard.indicator.backtest.commission":"Tỷ lệ hoa hồng","dashboard.indicator.backtest.leverage":"Tỷ lệ đòn bẩy","dashboard.indicator.backtest.tradeDirection":"Hướng giao dịch Hướng","dashboard.indicator.backtest.longOnly":"Mua","dashboard.indicator.backtest.shortOnly":"Bán","dashboard.indicator.backtest.both":"Cả hai chiều","dashboard.indicator.backtest.run":"Bắt ​​đầu kiểm thử ngược","dashboard.indicator.backtest.rerun":"Chạy lại kiểm thử ngược","dashboard.indicator.backtest.close":"Đóng","dashboard.indicator.backtest.running":"Đang tiến hành kiểm thử ngược...","dashboard.indicator.backtest.results":"Kết quả kiểm thử ngược","dashboard.indicator.backtest.totalReturn":"Tổng lợi nhuận","dashboard.indicator.backtest.annualReturn":"Lợi nhuận hàng năm","dashboard.indicator.backtest.maxDrawdown":"Mức giảm tối đa","dashboard.indicator.backtest.sharpeRatio":"Tỷ lệ Sharpe ratio","dashboard.indicator.backtest.winRate":"Tỷ lệ thắng","dashboard.indicator.backtest.profitFactor":"Tỷ lệ lãi/lỗ","dashboard.indicator.backtest.totalTrades":"Số lượng giao dịch","dashboard.indicator.totalReturn":"Tổng lợi nhuận","dashboard.indicator.annualReturn":"Lợi nhuận hàng năm","dashboard.indicator.maxDrawdown":"Mức giảm tối đa","dashboard.indicator.sharpeRatio":"Tỷ lệ Sharpe","dashboard.indicator.winRate":"Tỷ lệ thắng","dashboard.indicator.profitFactor":"Tỷ lệ lãi/lỗ Tỷ lệ","dashboard.indicator.totalTrades":"Tổng số giao dịch","dashboard.indicator.backtest.totalCommission":"Tổng phí hoa hồng","dashboard.indicator.backtest.equityCurve":"Đường cong vốn chủ sở hữu","dashboard.indicator.backtest.strategy":"Lợi nhuận của chỉ báo","dashboard.indicator.backtest.benchmark":"Lợi nhuận chuẩn","dashboard.indicator.backtest.tradeHistory":"Lịch sử giao dịch","dashboard.indicator.backtest.tradeTime":"Thời gian","dashboard.indicator.backtest.tradeType":"Loại giao dịch","dashboard.indicator.backtest.buy":"Mua","dashboard.indicator.backtest.sell":"Bán","dashboard.indicator.backtest.liquidation":"Tài khoản đã bị thanh lý","dashboard.indicator.backtest.openLong":"Mở lệnh mua","dashboard.indicator.backtest.closeLong":"Đóng lệnh mua","dashboard.indicator.backtest.closeLongStop":"Đóng lệnh mua (Cắt lỗ)","dashboard.indicator.backtest.closeLongProfit":"Đóng lệnh mua (Chốt lời)","dashboard.indicator.backtest.addLong":"Thêm lệnh mua","dashboard.indicator.backtest.openShort":"Mở lệnh bán","dashboard.indicator.backtest.closeShort":"Đóng lệnh bán","dashboard.indicator.backtest.closeShortStop":"Đóng lệnh bán (Dừng lỗ) Lỗ","dashboard.indicator.backtest.closeShortProfit":"Đóng vị thế bán khống (chốt lời)","dashboard.indicator.backtest.addShort":"Thêm vị thế bán khống","dashboard.indicator.backtest.price":"Giá","dashboard.indicator.backtest.amount":"Số lượng","dashboard.indicator.backtest.balance":"Số dư tài khoản","dashboard.indicator.backtest.profit":"Lãi/Lỗ","dashboard.indicator.backtest.success":"Kiểm thử ngược thành công","dashboard.indicator.backtest.failed":"Kiểm thử ngược thất bại, vui lòng thử lại sau","dashboard.indicator.backtest.noIndicatorCode":"Không có mã nào để kiểm thử ngược này","dashboard.indicator.backtest.noSymbol":"Vui lòng chọn công cụ giao dịch trước","dashboard.indicator.backtest.dateRangeExceeded":"Thời gian kiểm thử ngược vượt quá giới hạn: chỉ có thể kiểm thử ngược trong khoảng thời gian {timeframe} là {maxRange}","dashboard.indicator.backtest.dateRangeExceededDays":"Backtest range exceeds limit: {timeframe} max {maxRange} ({maxDays} days)","dashboard.indicator.backtest.hint.entryPctMax":"Max entry: {maxPct}% (reserve budget for future scale-ins)","dashboard.indicator.backtest.metaLine":"Symbol: {symbol} | Market: {market} | Timeframe: {timeframe}","dashboard.indicator.backtest.savedRunId":"Backtest saved. Run ID: {id}","dashboard.indicator.backtest.prev":"Previous","dashboard.indicator.backtest.next":"Next","dashboard.indicator.backtest.steps.strategy.title":"Strategy","dashboard.indicator.backtest.steps.strategy.desc":"Position sizing & risk controls","dashboard.indicator.backtest.steps.trading.title":"Trading settings","dashboard.indicator.backtest.steps.trading.desc":"Time range, capital, fees, leverage","dashboard.indicator.backtest.steps.results.title":"Results","dashboard.indicator.backtest.steps.results.desc":"Backtest output","dashboard.indicator.backtest.panel.risk":"Risk management (SL/TP/Trailing)","dashboard.indicator.backtest.panel.scale":"Scale in / DCA (trend & mean-reversion)","dashboard.indicator.backtest.panel.reduce":"Reduce position (trend & adverse)","dashboard.indicator.backtest.panel.position":"Position sizing","dashboard.indicator.backtest.field.stopLossPct":"Stop Loss (%)","dashboard.indicator.backtest.field.takeProfitPct":"Take Profit (%)","dashboard.indicator.backtest.field.trailingEnabled":"Trailing stop / take profit","dashboard.indicator.backtest.field.trailingStopPct":"Trailing drawdown (%)","dashboard.indicator.backtest.field.trailingActivationPct":"Trailing activation (%)","dashboard.indicator.backtest.field.slippage":"Slippage (%)","dashboard.indicator.backtest.field.trendAddEnabled":"Trend-following scale-in","dashboard.indicator.backtest.field.dcaAddEnabled":"Mean-reversion DCA","dashboard.indicator.backtest.field.trendAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.dcaAddStepPct":"DCA trigger (%)","dashboard.indicator.backtest.field.trendAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.dcaAddSizePct":"DCA size (% of capital)","dashboard.indicator.backtest.field.trendAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.dcaAddMaxTimes":"Max DCA times","dashboard.indicator.backtest.field.trendReduceEnabled":"Trend reduce","dashboard.indicator.backtest.field.adverseReduceEnabled":"Adverse reduce","dashboard.indicator.backtest.field.trendReduceStepPct":"Trend trigger (%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"Adverse trigger (%)","dashboard.indicator.backtest.field.trendReduceSizePct":"Reduce size (% of position)","dashboard.indicator.backtest.field.adverseReduceSizePct":"Adverse reduce size (% of position)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"Max trend reduce times","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"Max adverse reduce times","dashboard.indicator.backtest.field.entryPct":"Entry size (% of capital)","dashboard.indicator.backtest.field.minOrderPct":"Min order size (% of capital) (optional)","dashboard.indicator.backtest.closeLongTrailing":"Close Long (Trailing)","dashboard.indicator.backtest.reduceLong":"Reduce Long","dashboard.indicator.backtest.closeShortTrailing":"Close Short (Trailing)","dashboard.indicator.backtest.reduceShort":"Reduce Short","dashboard.docs.title":"Trung tâm Tài liệu","dashboard.docs.search.placeholder":"Tìm kiếm Tài liệu...","dashboard.docs.category.all":"Tất cả","dashboard.docs.category.guide":"Hướng dẫn dành cho nhà phát triển","dashboard.docs.category.api":"Tài liệu API","dashboard.docs.category.tutorial":"Hướng dẫn","dashboard.docs.category.faq":"Câu hỏi thường gặp Câu hỏi","dashboard.docs.featured.title":"Tài liệu được đề xuất","dashboard.docs.featured.tag":"Được đề xuất","dashboard.docs.list.views":"Lượt xem","dashboard.docs.list.author":"Tác giả","dashboard.docs.list.empty":"Không có tài liệu nào","dashboard.docs.list.backToAll":"Trả về tất cả tài liệu","dashboard.docs.list.total":"Tổng số {count} tài liệu","dashboard.docs.detail.back":"Trả về danh sách tài liệu","dashboard.docs.detail.updatedAt":"Cập nhật lúc","dashboard.docs.detail.related":"Tài liệu liên quan","dashboard.docs.detail.notFound":"Không tìm thấy tài liệu tồn tại","dashboard.docs.detail.error":"Tài liệu không tồn tại hoặc đã bị xóa","dashboard.docs.search.result":"Kết quả tìm kiếm","dashboard.docs.search.keyword":"Từ khóa","community.filter.indicatorType":"Loại chỉ báo","community.filter.all":"Tất cả","community.filter.other":"Các tùy chọn khác","community.filter.pricing":"Loại giá","community.filter.allPricing":"Tất cả giá","community.filter.sortBy":"Phương thức sắp xếp","community.filter.search":"Tìm kiếm","community.filter.searchPlaceholder":"Tên chỉ báo tìm kiếm","community.indicatorType.trend":"Định hướng theo xu hướng","community.indicatorType.momentum":"Động lượng","community.indicatorType.volatility":"Biến động","community.indicatorType.volume":"Khối lượng","community.indicatorType.custom":"Tùy chỉnh","community.pricing.free":"Miễn phí","community.pricing.paid":"Trả phí","community.sort.downloads":"Lượt tải xuống","community.sort.rating":"Xếp hạng","community.sort.newest":"Phiên bản mới nhất","community.pagination.total":"Tổng số {total} chỉ báo","community.noDescription":"Không có mô tả","community.detail.type":"Loại","community.detail.pricing":"Giá cả","community.detail.rating":"Xếp hạng","community.detail.downloads":"Lượt tải xuống","community.detail.author":"Tác giả","community.detail.description":"Mô tả","community.detail.detailContent":"Mô tả chi tiết","community.detail.backtestStats":"Thống kê kiểm thử ngược","community.action.purchase":"Số liệu mua hàng","community.action.addToMyIndicators":"Thêm vào chỉ báo của tôi","community.action.favorite":"Yêu thích","community.action.unfavorite":"Bỏ yêu thích","community.action.buyNow":"Mua ngay Ngay bây giờ","community.action.renew":"Gia hạn","community.purchase.price":"Giá","community.purchase.permanent":"Vĩnh viễn","community.purchase.monthly":"Hàng tháng","community.purchase.confirmBuy":"Xác nhận mua chỉ số này ({price} QDT)?","community.purchase.confirmRenew":"Xác nhận gia hạn chỉ số này ({price} QDT/tháng)?","community.purchase.confirmFree":"Xác nhận thêm chỉ số miễn phí này?","community.purchase.confirmTitle":"Xác nhận thao tác","community.purchase.owned":"Bạn đã mua chỉ số này (có hiệu lực vĩnh viễn)","community.purchase.ownIndicator":"Đây là chỉ số bạn đã công bố","community.purchase.expired":"Gói đăng ký của bạn đã hết hạn","community.purchase.expiresOn":"Ngày hết hạn: {date}","community.tabs.detail":"Chi tiết chỉ số","community.tabs.backtest":"Dữ liệu kiểm thử ngược","community.tabs.ratings":"Xếp hạng người dùng","community.rating.myRating":"Xếp hạng của tôi","community.rating.stars":"{count} Stars","community.rating.commentPlaceholder":"Chia sẻ trải nghiệm người dùng của bạn...","community.rating.submit":"Gửi đánh giá","community.rating.modify":"Sửa đổi","community.rating.saveModify":"Lưu thay đổi","community.rating.cancel":"Hủy","community.rating.selectRating":"Vui lòng chọn đánh giá","community.rating.success":"Đánh giá thành công","community.rating.modifySuccess":"Đánh giá được sửa đổi thành công","community.rating.failed":"Đánh giá thất bại","community.rating.noRatings":"Chưa có đánh giá nào","community.backtest.note":"Dữ liệu trên là kết quả kiểm thử ngược trong quá khứ, chỉ để tham khảo và không đại diện cho hiệu suất trong tương lai","community.backtest.noData":"Không có dữ liệu kiểm thử ngược","community.backtest.uploadHint":"Tác giả chưa tải lên dữ liệu kiểm thử ngược","community.message.loadFailed":"Không thể tải danh sách chỉ báo","community.message.purchaseProcessing":"Đang xử lý yêu cầu mua hàng...","community.message.downloadSuccess":"Chỉ báo đã được thêm vào danh sách chỉ báo của tôi","community.message.favoriteSuccess":"Đã thêm vào mục yêu thích thành công","community.message.unfavoriteSuccess":"Đã xóa khỏi mục yêu thích thành công","community.message.operationSuccess":"Thao tác thành công","community.message.operationFailed":"Thao tác thất bại thất bại","community.banner.readOnly":"Chỉ xem","community.banner.loginHint":"Để đăng nhập hoặc đăng ký, vui lòng nhấp vào nút để chuyển đến trang độc lập nhằm tránh các vấn đề CSRF","community.banner.jumpButton":"Đi đến Đăng nhập/Đăng ký","dashboard.totalEquity":"Tổng vốn chủ sở hữu","dashboard.totalPnL":"Tổng lợi nhuận/thua lỗ","dashboard.aiStrategies":"Chiến lược AI","dashboard.indicatorStrategies":"Chiến lược chỉ báo","dashboard.running":"Đang chạy","dashboard.pnlHistory":"Lịch sử lợi nhuận/thua lỗ","dashboard.strategyPerformance":"Tỷ lệ lợi nhuận/thua lỗ của chiến lược","dashboard.recentTrades":"Các giao dịch gần đây","dashboard.currentPositions":"Vị thế hiện tại","dashboard.table.time":"Thời gian","dashboard.table.strategy":"Chiến lược Name","dashboard.table.symbol":"Tài sản cơ sở","dashboard.table.type":"Loại","dashboard.table.side":"Hướng","dashboard.table.size":"Số lượng","dashboard.table.entryPrice":"Giá mở cửa trung bình","dashboard.table.price":"Giá","dashboard.table.amount":"Số lượng","dashboard.table.profit":"Lợi nhuận/Thua lỗ","dashboard.pendingOrders":"Lịch sử thực hiện lệnh","dashboard.totalOrders":"Tổng {total} lệnh","dashboard.viewError":"Xem lỗi","dashboard.filled":"Đã khớp","dashboard.orderTable.time":"Thời gian tạo","dashboard.orderTable.strategy":"Chiến lược","dashboard.orderTable.symbol":"Cặp giao dịch","dashboard.orderTable.signalType":"Loại tín hiệu","dashboard.orderTable.amount":"Số lượng","dashboard.orderTable.price":"Giá khớp","dashboard.orderTable.status":"Trạng thái","dashboard.orderTable.executedAt":"Thời gian thực hiện","dashboard.signalType.openLong":"Mở Long","dashboard.signalType.openShort":"Mở Short","dashboard.signalType.closeLong":"Đóng Long","dashboard.signalType.closeShort":"Đóng Short","dashboard.signalType.addLong":"Thêm Long","dashboard.signalType.addShort":"Thêm Short","dashboard.status.pending":"Đang chờ","dashboard.status.processing":"Đang xử lý","dashboard.status.completed":"Hoàn thành","dashboard.status.failed":"Thất bại","dashboard.status.cancelled":"Đã hủy","dashboard.table.pnl":"Lợi nhuận/Thua lỗ chưa thực hiện","form.basic-form.basic.title":"Biểu mẫu cơ bản","form.basic-form.basic.description":"Các trang biểu mẫu được sử dụng để thu thập hoặc xác minh thông tin từ người dùng. Biểu mẫu cơ bản thường phổ biến trong các trường hợp có ít mục dữ liệu.","form.basic-form.title.label":"Tiêu đề","form.basic-form.title.placeholder":"Đặt tên cho mục tiêu","form.basic-form.title.required":"Vui lòng nhập tiêu đề","form.basic-form.date.label":"Ngày bắt đầu và ngày kết thúc","form.basic-form.placeholder.start":"Ngày bắt đầu","form.basic-form.placeholder.end":"Ngày kết thúc","form.basic-form.date.required":"Vui lòng chọn ngày bắt đầu và ngày kết thúc","form.basic-form.goal.label":"Mô tả mục tiêu","form.basic-form.goal.placeholder":"Vui lòng nhập mục tiêu công việc theo từng giai đoạn","form.basic-form.goal.required":"Vui lòng nhập mục tiêu Mô tả","form.basic-form.standard.label":"Số liệu","form.basic-form.standard.placeholder":"Vui lòng nhập số liệu","form.basic-form.standard.required":"Vui lòng nhập số liệu","form.basic-form.client.label":"Khách hàng","form.basic-form.client.required":"Vui lòng mô tả khách hàng bạn đang phục vụ","form.basic-form.label.tooltip":"Đối tượng mục tiêu","form.basic-form.client.placeholder":"Vui lòng mô tả khách hàng bạn đang phục vụ; khách hàng nội bộ có thể trực tiếp là @tên/ID nhân viên","form.basic-form.invites.label":"Người mời","form.basic-form.invites.placeholder":"Vui lòng trực tiếp là @tên/ID nhân viên; Có thể mời tối đa 5 người","form.basic-form.weight.label":"Trọng lượng","form.basic-form.weight.placeholder":"Vui lòng nhập","form.basic-form.public.label":"Mục tiêu công khai","form.basic-form.label.help":"Khách hàng và người đánh giá được chia sẻ theo mặc định","form.basic-form.radio.public":"Công khai","form.basic-form.radio.partially-public":"Công khai một phần","form.basic-form.radio.private":"Không công khai","form.basic-form.publicUsers.placeholder":"Công khai cho","form.basic-form.option.A":"Đồng nghiệp 1","form.basic-form.option.B":"Đồng nghiệp 2","form.basic-form.option.C":"Đồng nghiệp số Ba","form.basic-form.email.required":"Vui lòng nhập địa chỉ email của bạn!","form.basic-form.email.wrong-format":"Định dạng địa chỉ email không chính xác!","form.basic-form.userName.required":"Vui lòng nhập tên người dùng của bạn!","form.basic-form.password.required":"Vui lòng nhập mật khẩu của bạn!","form.basic-form.password.twice":"Hai mật khẩu không khớp!","form.basic-form.strength.msg":"Vui lòng nhập ít nhất 6 ký tự. Vui lòng không sử dụng mật khẩu dễ đoán.","form.basic-form.strength.strong":"Độ mạnh: Mạnh","form.basic-form.strength.medium":"Độ mạnh: Trung bình","form.basic-form.strength.short":"Độ mạnh: Quá ngắn","form.basic-form.confirm-password.required":"Vui lòng xác nhận mật khẩu!","form.basic-form.phone-number.required":"Vui lòng nhập số điện thoại của bạn!","form.basic-form.phone-number.wrong-format":"Định dạng số điện thoại không chính xác!","form.basic-form.verification-code.required":"Vui lòng nhập mã xác minh!","form.basic-form.form.get-captcha":"Lấy mã xác minh mã","form.basic-form.captcha.second":"giây","form.basic-form.form.optional":"(Tùy chọn)","form.basic-form.form.submit":"Gửi","form.basic-form.form.save":"Lưu","form.basic-form.email.placeholder":"Email","form.basic-form.password.placeholder":"Mật khẩu phải có ít nhất 6 ký tự, phân biệt chữ hoa chữ thường","form.basic-form.confirm-password.placeholder":"Xác nhận mật khẩu","form.basic-form.phone-number.placeholder":"Số điện thoại","form.basic-form.verification-code.placeholder":"Mã xác minh","result.success.title":"Đã gửi Thành công","result.success.description":'Trang kết quả nộp bài được sử dụng để cung cấp phản hồi về kết quả xử lý của một loạt các tác vụ vận hành. Nếu chỉ là một thao tác đơn giản, thông báo Tin nhắn toàn cục là đủ. Vùng văn bản này có thể hiển thị các giải thích bổ sung đơn giản. Nếu cần hiển thị nội dung như một "tài liệu", vùng màu xám bên dưới có thể hiển thị nội dung phức tạp hơn.',"result.success.operate-title":"Tên dự án","result.success.operate-id":"ID dự án","result.success.principal":"Người phụ trách","result.success.operate-time":"Thời gian hiệu quả","result.success.step1-title":"Tạo dự án","result.success.step1-operator":"Qu Lili","result.success.step2-title":"Đánh giá ban đầu của phòng ban","result.success.step2-operator":"Zhou Maomao","result.success.step2-extra":"Theo dõi","result.success.step3-title":"Đánh giá tài chính","result.success.step4-title":"Hoàn thành","result.success.btn-return":"Quay lại danh sách","result.success.btn-project":"Xem dự án","result.success.btn-print":"In","result.fail.error.title":"Gửi bài không thành công","result.fail.error.description":"Vui lòng kiểm tra và chỉnh sửa thông tin sau trước khi gửi lại.","result.fail.error.hint-title":"Nội dung bạn đã gửi có các lỗi sau:","result.fail.error.hint-text1":"Tài khoản của bạn đã bị đóng băng","result.fail.error.hint-btn1":"Mở khóa ngay lập tức","result.fail.error.hint-text2":"Tài khoản của bạn chưa đủ điều kiện để đăng ký","result.fail.error.hint-btn2":"Nâng cấp ngay lập tức","result.fail.error.btn-text":"Quay lại chỉnh sửa","account.settings.menuMap.custom":"Cá nhân hóa","account.settings.menuMap.binding":"Liên kết tài khoản","account.settings.basic.avatar":"Avatar","account.settings.basic.change-avatar":"Thay đổi ảnh đại diện","account.settings.basic.email":"Địa chỉ email","account.settings.basic.email-message":"Vui lòng nhập địa chỉ email của bạn!","account.settings.basic.nickname":"Biệt danh","account.settings.basic.nickname-message":"Vui lòng nhập biệt danh của bạn!","account.settings.basic.profile":"Hồ sơ","account.settings.basic.profile-message":"Vui lòng nhập thông tin hồ sơ của bạn!","account.settings.basic.profile-placeholder":"Hồ sơ","account.settings.basic.country":"Quốc gia/Vùng","account.settings.basic.country-message":"Vui lòng nhập quốc gia của bạn hoặc khu vực!","account.settings.basic.geographic":"Tỉnh và Thành phố","account.settings.basic.geographic-message":"Vui lòng nhập tỉnh và thành phố của bạn!","account.settings.basic.address":"Địa chỉ đường phố","account.settings.basic.address-message":"Vui lòng nhập địa chỉ đường phố của bạn!","account.settings.basic.phone":"Số điện thoại","account.settings.basic.phone-message":"Vui lòng nhập số điện thoại của bạn!","account.settings.basic.update":"Cập nhật thông tin cơ bản","account.settings.basic.update.success":"Đã cập nhật thông tin cơ bản thành công","account.settings.security.strong":"Mạnh","account.settings.security.medium":"Trung bình","account.settings.security.weak":"Yếu","account.settings.security.password":"Mật khẩu tài khoản","account.settings.security.password-description":"Độ mạnh mật khẩu hiện tại:","account.settings.security.phone":"Số điện thoại bảo mật","account.settings.security.phone-description":"Số điện thoại liên kết:","account.settings.security.question":"Câu hỏi bảo mật","account.settings.security.question-description":"Chưa thiết lập câu hỏi bảo mật nào. Câu hỏi bảo mật có thể bảo vệ hiệu quả tính bảo mật của tài khoản","account.settings.security.email":"Email liên kết","account.settings.security.email-description":"Số email liên kết:","account.settings.security.mfa":"Thiết bị MFA","account.settings.security.mfa-description":"Thiết bị MFA chưa liên kết. Việc liên kết sẽ cho phép xác nhận thứ cấp","account.settings.security.modify":"Sửa đổi","account.settings.security.set":"Cài đặt","account.settings.security.bind":"Liên kết","account.settings.binding.taobao":"Liên kết Taobao","account.settings.binding.taobao-description":"Hiện chưa được liên kết với tài khoản Taobao","account.settings.binding.alipay":"Liên kết Alipay","account.settings.binding.alipay-description":"Hiện chưa được liên kết với tài khoản Alipay","account.settings.binding.dingding":"Liên kết DingTalk","account.settings.binding.dingding-description":"Hiện chưa được liên kết với tài khoản DingTalk","account.settings.binding.bind":"Liên kết","account.settings.notification.password":"Mật khẩu tài khoản","account.settings.notification.password-description":"Tin nhắn từ người dùng khác sẽ được gửi qua thông báo trong ứng dụng","account.settings.notification.messages":"Tin nhắn hệ thống","account.settings.notification.messages-description":"Tin nhắn hệ thống sẽ được gửi qua thông báo trong ứng dụng","account.settings.notification.todo":"Việc cần làm","account.settings.notification.todo-description":"Việc cần làm sẽ được gửi qua thông báo trong ứng dụng","account.settings.settings.open":"Bật","account.settings.settings.close":"Tắt","trading-assistant.title":"Trợ lý giao dịch","trading-assistant.strategyList":"Chiến lược Danh sách","trading-assistant.createStrategy":"Tạo chiến lược","trading-assistant.noStrategy":"Không có chiến lược nào","trading-assistant.selectStrategy":"Chọn một chiến lược từ bên trái để xem chi tiết","trading-assistant.startStrategy":"Bắt ​​đầu chiến lược","trading-assistant.stopStrategy":"Dừng chiến lược","trading-assistant.editStrategy":"Chỉnh sửa chiến lược","trading-assistant.deleteStrategy":"Xóa chiến lược","trading-assistant.status.running":"Đang chạy","trading-assistant.status.stopped":"Đã dừng","trading-assistant.status.error":"Lỗi","trading-assistant.strategyType.IndicatorStrategy":"Chỉ báo kỹ thuật Chiến lược","trading-assistant.strategyType.PromptBasedStrategy":"Chiến lược dựa trên lời nhắc","trading-assistant.strategyType.GridStrategy":"Chiến lược lưới","trading-assistant.tabs.tradingRecords":"Hồ sơ giao dịch","trading-assistant.tabs.positions":"Vị thế","trading-assistant.tabs.equityCurve":"Đường cong vốn chủ sở hữu","trading-assistant.form.step1":"Chọn chỉ báo","trading-assistant.form.step2":"Cấu hình sàn giao dịch","trading-assistant.form.step3":"Tham số chiến lược","trading-assistant.form.indicator":"Chọn chỉ báo","trading-assistant.form.indicatorHint":"Chỉ chọn các chỉ báo kỹ thuật bạn muốn đã mua hoặc tạo","trading-assistant.form.qdtCostHints":"Việc sử dụng chiến lược này sẽ tiêu tốn QDT; vui lòng đảm bảo tài khoản của bạn có đủ số dư QDT","trading-assistant.form.indicatorDescription":"Mô tả chỉ báo","trading-assistant.form.noDescription":"Không có mô tả","trading-assistant.form.exchange":"Chọn sàn giao dịch","trading-assistant.form.apiKey":"Khóa API","trading-assistant.form.secretKey":"Khóa bí mật","trading-assistant.form.passphrase":"Mật khẩu","trading-assistant.form.testConnection":"Kiểm tra kết nối","trading-assistant.form.strategyName":"Tên chiến lược","trading-assistant.form.symbol":"Cặp giao dịch","trading-assistant.form.symbolHint":"Hiện tại chỉ hỗ trợ các cặp giao dịch tiền điện tử","trading-assistant.form.initialCapital":"Vốn ban đầu","trading-assistant.form.marketType":"Loại thị trường","trading-assistant.form.marketTypeFutures":"Hợp đồng tương lai","trading-assistant.form.marketTypeSpot":"Giao dịch giao ngay","trading-assistant.form.marketTypeHint":"Hợp đồng hỗ trợ giao dịch hai chiều và đòn bẩy; Giao dịch giao ngay chỉ hỗ trợ vị thế mua với đòn bẩy cố định là 1x","trading-assistant.form.leverage":"Tỷ lệ đòn bẩy","trading-assistant.form.leverageHint":"Hợp đồng: 1-125x, Giao ngay: Cố định 1x","trading-assistant.form.spotLeverageFixed":"Đòn bẩy giao dịch giao ngay được cố định ở mức 1x","trading-assistant.form.spotOnlyLongHint":"Giao dịch giao ngay chỉ hỗ trợ vị thế mua","trading-assistant.form.tradeDirection":"Hướng giao dịch","trading-assistant.form.tradeDirectionLong":"Chỉ mua","trading-assistant.form.tradeDirectionShort":"Chỉ bán","trading-assistant.form.tradeDirectionBoth":"Hai chiều giao dịch","trading-assistant.form.timeframe":"Khung thời gian","trading-assistant.form.klinePeriod":"Chu kỳ K-Line","trading-assistant.form.timeframe1m":"1 phút","trading-assistant.form.timeframe5m":"5 phút","trading-assistant.form.timeframe15m":"15 phút","trading-assistant.form.timeframe30m":"30 phút","trading-assistant.form.timeframe1H":"1 giờ","trading-assistant.form.timeframe4H":"4 giờ","trading-assistant.form.timeframe1D":"1 ngày","trading-assistant.form.selectStrategyType":"Chọn loại chiến lược","trading-assistant.form.indicatorStrategy":"Chiến lược chỉ báo","trading-assistant.form.indicatorStrategyDesc":"Chiến lược giao dịch tự động dựa trên chỉ báo kỹ thuật","trading-assistant.form.aiStrategy":"Chiến lược AI","trading-assistant.form.aiStrategyDesc":"Chiến lược giao dịch tự động dựa trên quyết định thông minh AI","trading-assistant.form.enableAiFilter":"Bật bộ lọc quyết định thông minh AI","trading-assistant.form.enableAiFilterHint":"Khi bật, tín hiệu chỉ báo sẽ được lọc bởi AI để cải thiện chất lượng giao dịch","trading-assistant.form.aiFilterPrompt":"Lời nhắc tùy chỉnh","trading-assistant.form.aiFilterPromptHint":"Cung cấp hướng dẫn tùy chỉnh cho bộ lọc AI, để trống để sử dụng mặc định hệ thống","trading-assistant.validation.strategyTypeRequired":"Vui lòng chọn loại chiến lược","trading-assistant.form.advancedSettings":"Cài đặt nâng cao","trading-assistant.form.orderMode":"Chế độ đặt lệnh","trading-assistant.form.orderModeMaker":"Maker","trading-assistant.form.orderModeTaker":"Giá thị trường","trading-assistant.form.orderModeHint":"Chế độ Maker sử dụng lệnh giới hạn, phí thấp hơn; chế độ Market thực hiện ngay lập tức, phí cao hơn","trading-assistant.form.makerWaitSec":"Thời gian chờ của Maker (giây)","trading-assistant.form.makerWaitSecHint":"Thời gian chờ sau khi đặt lệnh; ","trading-assistant.form.makerRetries":"Số lần thử lại cho lệnh maker","trading-assistant.form.makerRetriesHint":"Số lần thử lại tối đa nếu lệnh maker không được khớp","trading-assistant.form.fallbackToMarket":"Hạ cấp lệnh maker thất bại xuống giá thị trường","trading-assistant.form.fallbackToMarketHint":"Có nên hạ cấp các lệnh mở/đóng đang chờ xử lý thành lệnh thị trường để đảm bảo thực hiện khi chúng không được khớp hay không","trading-assistant.form.marginMode":"Chế độ ký quỹ","trading-assistant.form.marginModeCross":"Ký quỹ chéo","trading-assistant.form.marginModeIsolated":"Ký quỹ riêng biệt Ký quỹ","trading-assistant.form.stopLossPct":"Tỷ lệ cắt lỗ (%)","trading-assistant.form.stopLossPctHint":"Thiết lập tỷ lệ cắt lỗ; 0 cho biết lệnh dừng lỗ không được bật","trading-assistant.form.takeProfitPct":"Tỷ lệ chốt lời (%)","trading-assistant.form.takeProfitPctHint":"Thiết lập tỷ lệ chốt lời, 0 cho biết lệnh chốt lời không được bật","trading-assistant.form.signalMode":"Chế độ tín hiệu","trading-assistant.form.signalModeConfirmed":"Chế độ xác nhận","trading-assistant.form.signalModeAggressive":"Chế độ giao dịch tích cực","trading-assistant.form.signalModeHint":"Chế độ xác nhận: Chỉ kiểm tra các nến đã hoàn thành; Chế độ giao dịch tích cực: Kiểm tra cả việc hình thành nến","trading-assistant.form.cancel":"Hủy","trading-assistant.form.prev":"Bước trước","trading-assistant.form.next":"Bước tiếp theo","trading-assistant.form.confirmCreate":"Xác nhận tạo","trading-assistant.form.confirmEdit":"Xác nhận chỉnh sửa","trading-assistant.messages.createSuccess":"Tạo chiến lược thành công","trading-assistant.messages.createFailed":"Tạo chiến lược thất bại","trading-assistant.messages.updateSuccess":"Cập nhật chiến lược thành công","trading-assistant.messages.updateFailed":"Cập nhật chiến lược thất bại","trading-assistant.messages.deleteSuccess":"Xóa chiến lược thành công","trading-assistant.messages.deleteFailed":"Xóa chiến lược thất bại","trading-assistant.messages.startSuccess":"Khởi động chiến lược thành công","trading-assistant.messages.startFailed":"Khởi động chiến lược thất bại","trading-assistant.messages.stopSuccess":"Chính sách đã dừng thành công","trading-assistant.messages.stopFailed":"Dừng chính sách thất bại","trading-assistant.messages.loadFailed":"Không thể tải danh sách chính sách","trading-assistant.messages.runningWarning":"Chính sách đang chạy, vui lòng dừng chính sách trước khi sửa đổi","trading-assistant.messages.deleteConfirmWithName":'Bạn có chắc chắn muốn xóa chính sách "{name}" không? Thao tác này không thể đảo ngược.',"trading-assistant.messages.deleteConfirm":"Bạn có chắc chắn muốn xóa chính sách này không? Thao tác này không thể đảo ngược.","trading-assistant.messages.loadTradesFailed":"Không thể truy xuất hồ sơ giao dịch","trading-assistant.messages.loadPositionsFailed":"Không thể truy xuất hồ sơ vị thế","trading-assistant.messages.loadEquityFailed":"Không thể truy xuất đường cong vốn chủ sở hữu","trading-assistant.messages.loadIndicatorsFailed":"Không thể tải danh sách chỉ báo, vui lòng thử lại sau","trading-assistant.messages.spotLimitations":"Giao dịch giao ngay đã được tự động thiết lập chỉ mua, đòn bẩy 1x","trading-assistant.messages.autoFillApiConfig":"Cấu hình API lịch sử cho sàn giao dịch này đã được tự động điền","trading-assistant.placeholders.selectIndicator":"Vui lòng chọn một chỉ báo indicator","trading-assistant.placeholders.selectExchange":"Vui lòng chọn một sàn giao dịch","trading-assistant.placeholders.inputApiKey":"Vui lòng nhập Khóa API","trading-assistant.placeholders.inputSecretKey":"Vui lòng nhập Khóa bí mật","trading-assistant.placeholders.inputPassphrase":"Vui lòng nhập Mật khẩu","trading-assistant.placeholders.inputStrategyName":"Vui lòng nhập tên chiến lược","trading-assistant.placeholders.selectSymbol":"Vui lòng chọn một cặp giao dịch","trading-assistant.placeholders.selectTimeframe":"Vui lòng chọn một khung thời gian","trading-assistant.placeholders.selectKlinePeriod":"Vui lòng chọn chu kỳ K-Line","trading-assistant.placeholders.inputAiFilterPrompt":"Vui lòng nhập lời nhắc tùy chỉnh (tùy chọn)","trading-assistant.validation.indicatorRequired":"Vui lòng chọn một chỉ báo","trading-assistant.validation.exchangeRequired":"Vui lòng chọn một sàn giao dịch","trading-assistant.validation.apiKeyRequired":"Vui lòng nhập Khóa API","trading-assistant.validation.secretKeyRequired":"Vui lòng nhập Khóa bí mật","trading-assistant.validation.passphraseRequired":"Vui lòng nhập Mật khẩu","trading-assistant.validation.exchangeConfigIncomplete":"Vui lòng điền đầy đủ thông tin cấu hình sàn giao dịch","trading-assistant.validation.testConnectionRequired":'Vui lòng nhấp vào nút "Kiểm tra kết nối" và đảm bảo kết nối thành công',"trading-assistant.validation.testConnectionFailed":"Kiểm tra kết nối thất bại, vui lòng kiểm tra cấu hình và thử lại","trading-assistant.validation.credentialRequired":"Vui lòng thêm và kiểm tra thông tin đăng nhập sàn giao dịch trong Trung tâm Cá nhân trước","trading-assistant.validation.strategyNameRequired":"Vui lòng nhập tên chiến lược","trading-assistant.validation.symbolRequired":"Vui lòng chọn một cặp giao dịch ...apiKeyRequired","trading-assistant.apiKeyRequired":"Vui lòng Nhập khóa API","trading-assistant.validation.initialCapitalRequired":"Vui lòng nhập vốn ban đầu","trading-assistant.validation.leverageRequired":"Vui lòng nhập tỷ lệ đòn bẩy","trading-assistant.table.time":"Thời gian","trading-assistant.table.type":"Loại","trading-assistant.table.price":"Giá","trading-assistant.table.amount":"Số tiền","trading-assistant.table.value":"Số tiền","trading-assistant.table.commission":"Phí hoa hồng","trading-assistant.table.symbol":"Cặp giao dịch","trading-assistant.table.side":"Hướng","trading-assistant.table.size":"Vị thế kích thước","trading-assistant.table.entryPrice":"Giá vào lệnh","trading-assistant.table.currentPrice":"Giá hiện tại","trading-assistant.table.unrealizedPnl":"Lợi nhuận/Thua lỗ chưa thực hiện","trading-assistant.table.pnlPercent":"Tỷ lệ lợi nhuận/thua lỗ","trading-assistant.table.buy":"Mua","trading-assistant.table.sell":"Bán","trading-assistant.table.long":"Mua","trading-assistant.table.short":"Bán","trading-assistant.table.noPositions":"Không có vị thế","trading-assistant.detail.title":"Chi tiết chiến lược","trading-assistant.detail.strategyName":"Chiến lược Tên","trading-assistant.detail.strategyType":"Loại chiến lược","trading-assistant.detail.status":"Trạng thái","trading-assistant.detail.tradingMode":"Chế độ giao dịch","trading-assistant.detail.exchange":"Sàn giao dịch","trading-assistant.detail.initialCapital":"Vốn ban đầu","trading-assistant.detail.totalInvestment":"Tổng vốn đầu tư","trading-assistant.detail.currentEquity":"Vốn chủ sở hữu hiện tại","trading-assistant.detail.totalPnl":"Tổng lợi nhuận/thua lỗ","trading-assistant.detail.indicatorName":"Tên chỉ báo","trading-assistant.detail.maxLeverage":"Đòn bẩy tối đa Đòn bẩy","trading-assistant.detail.decideInterval":"Khoảng thời gian quyết định","trading-assistant.detail.symbols":"Công cụ giao dịch","trading-assistant.detail.createdAt":"Thời gian tạo","trading-assistant.detail.updatedAt":"Thời gian cập nhật","trading-assistant.detail.llmConfig":"Cấu hình mô hình AI","trading-assistant.detail.exchangeConfig":"Cấu hình sàn giao dịch","trading-assistant.detail.provider":"Nhà cung cấp","trading-assistant.detail.modelId":"ID mô hình","trading-assistant.detail.close":"Đóng","trading-assistant.detail.loadFailed":"Không thể truy xuất chiến lược chi tiết","trading-assistant.equity.noData":"Không có dữ liệu giá trị tài sản ròng","trading-assistant.equity.equity":"Giá trị tài sản ròng","trading-assistant.exchange.tradingMode":"Chế độ giao dịch","trading-assistant.exchange.virtual":"Giao dịch thử nghiệm","trading-assistant.exchange.live":"Giao dịch trực tiếp","trading-assistant.exchange.selectExchange":"Chọn sàn giao dịch","trading-assistant.exchange.walletAddress":"Địa chỉ ví","trading-assistant.exchange.walletAddressPlaceholder":"Vui lòng nhập địa chỉ ví của bạn (bắt đầu bằng 0x)","trading-assistant.exchange.privateKey":"Khóa riêng tư","trading-assistant.exchange.privateKeyPlaceholder":"Vui lòng nhập khóa riêng tư của bạn (64 ký tự)","trading-assistant.exchange.testConnection":"Kiểm tra kết nối","trading-assistant.exchange.connectionSuccess":"Kết nối thành công","trading-assistant.exchange.connectionFailed":"Kết nối thất bại","trading-assistant.exchange.testFailed":"Kiểm tra kết nối thất bại","trading-assistant.exchange.fillComplete":"Vui lòng điền đầy đủ thông tin cấu hình sàn giao dịch","trading-assistant.strategyTypeOptions.ai":"Chiến lược dựa trên AI","trading-assistant.strategyTypeOptions.indicator":"Chiến lược chỉ báo kỹ thuật","trading-assistant.strategyTypeOptions.aiDeveloping":"Chức năng chiến lược dựa trên AI đang được phát triển, hãy theo dõi","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"Chức năng chiến lược dựa trên AI đang được phát triển","trading-assistant.indicatorType.trend":"Xu hướng","trading-assistant.indicatorType.momentum":"Động lượng","trading-assistant.indicatorType.volatility":"Biến động","trading-assistant.indicatorType.volume":"Khối lượng","trading-assistant.indicatorType.custom":"Tùy chỉnh","trading-assistant.exchangeNames":{okx:"OKX",binance:"Binance",hyperliquid:"Hyperliquid",blockchaincom:"Blockchain.com",coinbaseexchange:"Coinbase",gate:"Gate.io",mexc:"MEXC",kraken:"Kraken",bitfinex:"Bitfinex",bybit:"Bybit",kucoin:"KuCoin",huobi:"Huobi",bitget:"Bitget",bitmex:"BitMEX","gạch từ":"Dựa trên",phemex:"Phemex",bitmart:"BitMart",bitstamp:"Bitstamp",bittrex:"Bittrex",poloniex:"Poloniex","song tử":"song tử","tiền điện tử":"Crypto.com",bitflyer:"bitFlyer",upbit:"Upbit",bithumb:"Bithumb",coinone:"Coinone",zb:"ZB","ngân hàng":"LBank",bibox:"Bibox",bigone:"BigONE",bitrue:"Bitrue",coinex:"CoinEx",digifinex:"DigiFinex",ftx:"FTX",ftxus:"FTX US",binanceus:"Binance US",binancecoinm:"Binance COIN-M",binanceusdm:"Binance USDⓈ-M",deepcoin:"Deepcoin"},"ai-trading-assistant.title":"Trợ lý giao dịch AI","ai-trading-assistant.strategyList":"Danh sách chiến lược","ai-trading-assistant.createStrategy":"Tạo chiến lược","ai-trading-assistant.noStrategy":"Không có chiến lược Có sẵn","ai-trading-assistant.selectStrategy":"Chọn chiến lược từ bên trái để xem chi tiết","ai-trading-assistant.startStrategy":"Bắt ​​đầu chiến lược","ai-trading-assistant.stopStrategy":"Dừng chiến lược","ai-trading-assistant.editStrategy":"Chỉnh sửa chiến lược","ai-trading-assistant.deleteStrategy":"Xóa chiến lược","ai-trading-assistant.status.running":"Đang chạy","ai-trading-assistant.status.stopped":"Đã dừng","ai-trading-assistant.status.error":"Lỗi","ai-trading-assistant.tabs.tradingRecords":"Hồ sơ giao dịch","ai-trading-assistant.tabs.positions":"Vị thế","ai-trading-assistant.tabs.aiDecisions":"Bản ghi quyết định của AI","ai-trading-assistant.tabs.equityCurve":"Đường cong vốn chủ sở hữu","ai-trading-assistant.form.createTitle":"Tạo chiến lược giao dịch AI","ai-trading-assistant.form.editTitle":"Chỉnh sửa chiến lược giao dịch AI","ai-trading-assistant.form.strategyName":"Tên chiến lược","ai-trading-assistant.form.modelId":"Mô hình AI","ai-trading-assistant.form.modelIdHint":"Sử dụng dịch vụ OpenRouter của hệ thống; Không cần cấu hình khóa API","ai-trading-assistant.form.decideInterval":"Khoảng thời gian quyết định","ai-trading-assistant.form.decideInterval5m":"5 phút","ai-trading-assistant.form.decideInterval10m":"10 phút","ai-trading-assistant.form.decideInterval30m":"30 phút","ai-trading-assistant.form.decideInterval1h":"1 giờ","ai-trading-assistant.form.decideInterval4h":"4 giờ","ai-trading-assistant.form.decideInterval1d":"1 ngày","ai-trading-assistant.form.decideInterval1w":"1 tuần","ai-trading-assistant.form.decideIntervalHint":"Khoảng thời gian cho AI để đưa ra quyết định","ai-trading-assistant.form.runPeriod":"Thời gian chạy","ai-trading-assistant.form.runPeriodHint":"Thời gian bắt đầu và kết thúc của chiến lược","ai-trading-assistant.form.startDate":"Ngày bắt đầu","ai-trading-assistant.form.endDate":"Ngày kết thúc","ai-trading-assistant.form.qdtCostTitle":"Mô tả chi phí QDT","ai-trading-assistant.form.qdtCostHint":"Mỗi quyết định của AI sẽ có giá {cost} QDT. Vui lòng đảm bảo tài khoản của bạn có đủ số dư QDT. Chi phí sẽ được trừ theo thời gian thực cho mỗi quyết định trong quá trình chạy chiến lược.","ai-trading-assistant.form.apiKey":"Khóa API","ai-trading-assistant.form.exchange":"Chọn sàn giao dịch","ai-trading-assistant.form.secretKey":"Khóa bí mật","ai-trading-assistant.form.passphrase":"Mật khẩu","ai-trading-assistant.form.testConnection":"Kiểm tra kết nối","ai-trading-assistant.form.symbol":"Cặp giao dịch","ai-trading-assistant.form.symbolHint":"Chọn cặp giao dịch","ai-trading-assistant.form.initialCapital":"Số vốn đầu tư (Ký quỹ)","ai-trading-assistant.form.leverage":"Tỷ lệ đòn bẩy","ai-trading-assistant.form.timeframe":"Khung thời gian","ai-trading-assistant.form.timeframe1m":"1 phút","ai-trading-assistant.form.timeframe5m":"5 phút","ai-trading-assistant.form.timeframe15m":"15 phút","ai-trading-assistant.form.timeframe30m":"30 phút","ai-trading-assistant.form.timeframe1H":"1 giờ","ai-trading-assistant.form.timeframe4H":"4 giờ","ai-trading-assistant.form.timeframe1D":"1 ngày","ai-trading-assistant.form.marketType":"Loại thị trường","ai-trading-assistant.form.marketTypeFutures":"Hợp đồng","ai-trading-assistant.form.marketTypeSpot":"Giao dịch tức thời","ai-trading-assistant.form.totalPnl":"Tổng lợi nhuận/thua lỗ","ai-trading-assistant.form.customPrompt":"Lời nhắc tùy chỉnh","ai-trading-assistant.form.customPromptHint":"Tùy chọn, để tùy chỉnh chiến lược giao dịch và logic quyết định của AI","ai-trading-assistant.form.cancel":"Hủy","ai-trading-assistant.form.prev":"Bước trước","ai-trading-assistant.form.next":"Bước tiếp theo","ai-trading-assistant.form.confirmCreate":"Xác nhận tạo","ai-trading-assistant.form.confirmEdit":"Xác nhận chỉnh sửa","ai-trading-assistant.messages.createSuccess":"Tạo chiến lược thành công","ai-trading-assistant.messages.createFailed":"Tạo chiến lược thất bại","ai-trading-assistant.messages.updateSuccess":"Cập nhật chiến lược thành công","ai-trading-assistant.messages.updateFailed":"Cập nhật chiến lược thất bại","ai-trading-assistant.messages.deleteSuccess":"Xóa chiến lược thành công","ai-trading-assistant.messages.deleteFailed":"Xóa chiến lược thất bại","ai-trading-assistant.messages.startSuccess":"Khởi động chiến lược thành công","ai-trading-assistant.messages.startFailed":"Không thể khởi động chính sách","ai-trading-assistant.messages.stopSuccess":"Đã dừng thành công chính sách","ai-trading-assistant.messages.stopFailed":"Không thể dừng chính sách","ai-trading-assistant.messages.loadFailed":"Không thể truy xuất danh sách chính sách","ai-trading-assistant.messages.loadDecisionsFailed":"Không thể truy xuất bản ghi quyết định của AI","ai-trading-assistant.messages.deleteConfirm":"Bạn có chắc chắn muốn xóa chính sách này không? Thao tác này không thể đảo ngược.","ai-trading-assistant.placeholders.inputStrategyName":"Vui lòng nhập tên chiến lược","ai-trading-assistant.placeholders.selectModelId":"Vui lòng chọn mô hình AI","ai-trading-assistant.placeholders.selectDecideInterval":"Vui lòng chọn khoảng thời gian quyết định","ai-trading-assistant.placeholders.startTime":"Thời gian bắt đầu","ai-trading-assistant.placeholders.endTime":"Thời gian kết thúc","ai-trading-assistant.placeholders.inputApiKey":"Vui lòng nhập khóa API","ai-trading-assistant.placeholders.selectExchange":"Vui lòng chọn sàn giao dịch","ai-trading-assistant.placeholders.inputSecretKey":"Vui lòng nhập mã bí mật Key","ai-trading-assistant.placeholders.inputPassphrase":"Vui lòng nhập mật khẩu của bạn","ai-trading-assistant.placeholders.selectSymbol":"Vui lòng chọn một cặp giao dịch, ví dụ như BTC/USDT","ai-trading-assistant.placeholders.selectTimeframe":"Vui lòng chọn khung thời gian","ai-trading-assistant.placeholders.inputCustomPrompt":"Vui lòng nhập lời nhắc tùy chỉnh (tùy chọn)","ai-trading-assistant.validation.strategyNameRequired":"Vui lòng nhập tên chiến lược","ai-trading-assistant.validation.modelIdRequired":"Vui lòng chọn một mô hình AI","ai-trading-assistant.validation.runPeriodRequired":"Vui lòng chọn khoảng thời gian chạy","ai-trading-assistant.validation.apiKeyRequired":"Vui lòng nhập API Key","ai-trading-assistant.validation.exchangeRequired":"Vui lòng chọn sàn giao dịch","ai-trading-assistant.validation.secretKeyRequired":"Vui lòng nhập Khóa bí mật","ai-trading-assistant.validation.symbolRequired":"Vui lòng chọn cặp giao dịch","ai-trading-assistant.validation.initialCapitalRequired":"Vui lòng nhập số vốn đầu tư","ai-trading-assistant.table.time":"Thời gian","ai-trading-assistant.table.type":"Loại","ai-trading-assistant.table.price":"Giá","ai-trading-assistant.table.amount":"Số lượng","ai-trading-assistant.table.value":"Giá trị","ai-trading-assistant.table.symbol":"Cặp giao dịch","ai-trading-assistant.table.side":"Hướng","ai-trading-assistant.table.size":"Số lượng vị thế","ai-trading-assistant.table.entryPrice":"Giá vào lệnh","ai-trading-assistant.table.currentPrice":"Giá hiện tại","ai-trading-assistant.table.unrealizedPnl":"Lợi nhuận/Thua lỗ chưa thực hiện","ai-trading-assistant.table.profit":"Lợi nhuận/Thua lỗ","ai-trading-assistant.table.openLong":"Mở lệnh mua","ai-trading-assistant.table.closeLong":"Đóng lệnh Long","ai-trading-assistant.table.openShort":"Mở lệnh bán","ai-trading-assistant.table.closeShort":"Đóng lệnh bán","ai-trading-assistant.table.addLong":"Thêm lệnh mua","ai-trading-assistant.table.addShort":"Thêm lệnh bán","ai-trading-assistant.table.closeShortProfit":"Đóng lệnh bán có lãi","ai-trading-assistant.table.closeShortStop":"Đóng lệnh cắt lỗ lệnh bán","ai-trading-assistant.table.closeLongProfit":"Đóng lệnh mua có lãi","ai-trading-assistant.table.closeLongStop":"Đóng lệnh cắt lỗ lệnh mua","ai-trading-assistant.table.buy":"Mua","ai-trading-assistant.table.sell":"售","ai-trading-assistant.table.long":"开长","ai-trading-assistant.table.short":"开短","ai-trading-assistant.table.hold":"控股","ai-trading-assistant.table.reasoning":"分析理理","ai-trading-assistant.table.decisions":"决定","ai-trading-assistant.table.riskAssessment":"风险考核","ai-trading-assistant.table.trust":"信信度","ai-trading-assistant.table.totalRecords":"{total} Không có bản ghi","ai-trading-assistant.table.noPositions":"Không có vị thế","ai-trading-assistant.detail.title":"Chi tiết chiến lược","ai-trading-assistant.equity.noData":"Không có dữ liệu giá trị tài sản ròng","ai-trading-assistant.equity.equity":"Giá trị tài sản ròng","ai-trading-assistant.exchange.testFailed":"Kiểm tra kết nối thất bại","ai-trading-assistant.exchange.connectionSuccess":"Kết nối thành công","ai-trading-assistant.exchange.connectionFailed":"Kết nối thất bại","ai-trading-assistant.form.advancedSettings":"Cài đặt nâng cao","ai-trading-assistant.form.orderMode":"Lệnh Mode","ai-trading-assistant.form.orderModeMaker":"Lệnh chờ (Người tạo lệnh)","ai-trading-assistant.form.orderModeTaker":"Lệnh thị trường (Người nhận lệnh)","ai-trading-assistant.form.orderModeHint":"Chế độ lệnh chờ sử dụng lệnh giới hạn, phí thấp hơn; chế độ lệnh thị trường thực hiện ngay lập tức, phí cao hơn","ai-trading-assistant.form.makerWaitSec":"Thời gian chờ lệnh (giây)","ai-trading-assistant.form.makerWaitSecHint":"Thời gian chờ sau khi đặt lệnh;","ai-trading-assistant.form.makerRetries":"Số lần thử lại cho lệnh đang chờ","ai-trading-assistant.form.makerRetriesHint":"Số lần thử lại tối đa khi lệnh đang chờ không được khớp","ai-trading-assistant.form.fallbackToMarket":"Hạ cấp lệnh đang chờ thất bại thành lệnh thị trường","ai-trading-assistant.form.fallbackToMarketHint":"Có nên hạ cấp lệnh đang chờ mở/đóng thành lệnh thị trường để đảm bảo thực hiện khi chúng không được khớp hay không","ai-trading-assistant.form.marginMode":"Chế độ ký quỹ","ai-trading-assistant.form.marginModeCross":"Ký quỹ chéo","ai-trading-assistant.form.marginModeIsolated":"Ký quỹ riêng biệt Margin","ai-analysis.title":"Hệ thống giao dịch lượng tử","ai-analysis.system.online":"Trực tuyến","ai-analysis.system.agents":"Nhân viên","ai-analysis.system.active":"Hoạt động","ai-analysis.system.stage":"Giai đoạn","ai-analysis.panel.roster":"Danh sách nhân viên","ai-analysis.panel.thinking":"Đang suy nghĩ...","ai-analysis.panel.done":"Hoàn tất","ai-analysis.panel.standby":"Chờ","ai-analysis.input.title":"Hệ thống giao dịch lượng tử","ai-analysis.input.placeholder":"Chọn tài sản mục tiêu (ví dụ: BTC/USDT)","ai-analysis.input.watchlist":"Danh sách theo dõi","ai-analysis.input.start":"Bắt ​​đầu phân tích","ai-analysis.input.recent":"Các tác vụ gần đây:","ai-analysis.vis.stage":"Giai đoạn","ai-analysis.vis.processing":"Đang xử lý","ai-analysis.result.complete":"Phân tích hoàn tất","ai-analysis.result.signal":"Tín hiệu cuối cùng","ai-analysis.result.confidence":"Mức độ tin cậy:","ai-analysis.result.new":"Phân tích mới","ai-analysis.result.full":"Xem báo cáo đầy đủ","ai-analysis.logs.title":"Nhật ký hệ thống","ai-analysis.modal.title":"Báo cáo bảo mật","ai-analysis.modal.fundamental":"Phân tích cơ bản","ai-analysis.modal.technical":"Phân tích kỹ thuật","ai-analysis.modal.sentiment":"Phân tích tâm lý","ai-analysis.modal.risk":"Đánh giá rủi ro","ai-analysis.stage.idle":"Chế độ chờ","ai-analysis.stage.1":"Giai đoạn 1: Phân tích đa chiều","ai-analysis.stage.2":"Giai đoạn 2: Thảo luận về xu hướng tăng/giảm","ai-analysis.stage.3":"Giai đoạn 3: Lập kế hoạch chiến lược","ai-analysis.stage.4":"Giai đoạn 4: Xem xét kiểm soát rủi ro","ai-analysis.stage.complete":"Đã hoàn thành","ai-analysis.agent.investment_director":"Giám đốc đầu tư Giám đốc","ai-analysis.agent.role.investment_director":"Phân tích toàn diện & Kết luận cuối cùng","ai-analysis.agent.market":"Nhà phân tích thị trường","ai-analysis.agent.role.market":"Dữ liệu kỹ thuật & thị trường","ai-analysis.agent.fundamental":"Nhà phân tích cơ bản","ai-analysis.agent.role.fundamental":"Tài chính & Định giá","ai-analysis.agent.technical":"Nhà phân tích kỹ thuật","ai-analysis.agent.role.technical":"Các chỉ báo & biểu đồ kỹ thuật","ai-analysis.agent.news":"Nhà phân tích tin tức","ai-analysis.agent.role.news":"Bộ lọc tin tức toàn cầu","ai-analysis.agent.sentiment":"Tâm lý thị trường Nhà phân tích","ai-analysis.agent.role.sentiment":"Phân tích xã hội & cảm xúc","ai-analysis.agent.risk":"Nhà phân tích rủi ro","ai-analysis.agent.role.risk":"Kiểm tra rủi ro cơ bản","ai-analysis.agent.bull":"Nhà phân tích lạc quan","ai-analysis.agent.role.bull":"Khám phá động lực tăng trưởng","ai-analysis.agent.bear":"Nhà phân tích bi quan","ai-analysis.agent.role.bear":"Khám phá rủi ro & điểm yếu","ai-analysis.agent.manager":"Quản lý nghiên cứu","ai-analysis.agent.role.manager":"Người điều phối tranh luận","ai-analysis.agent.trader":"Nhà giao dịch","ai-analysis.agent.role.trader":"Chiến lược gia điều hành","ai-analysis.agent.risky":"Nhà phân tích năng động","ai-analysis.agent.role.risky":"Chiến lược năng động","ai-analysis.agent.neutral":"Nhà phân tích cân bằng","ai-analysis.agent.role.neutral":"Chiến lược cân bằng","ai-analysis.agent.safe":"Nhà phân tích thận trọng","ai-analysis.agent.role.safe":"Chiến lược thận trọng","ai-analysis.agent.cro":"Cân nhắc Quản lý rủi ro (CRO)","ai-analysis.agent.role.cro":"Người có thẩm quyền quyết định cuối cùng","ai-analysis.script.market":"Đang truy xuất dữ liệu OHLCV từ các sàn giao dịch lớn...","ai-analysis.script.fundamental":"Đang truy xuất báo cáo tài chính hàng quý...","ai-analysis.script.technical":"Phân tích các chỉ báo kỹ thuật và mô hình biểu đồ...","ai-analysis.script.news":"Đang quét tin tức tài chính toàn cầu...","ai-analysis.script.sentiment":"Phân tích xu hướng mạng xã hội...","ai-analysis.script.risk":"Đang tính toán biến động lịch sử...","invite.inviteLink":"Liên kết mời","invite.copy":"Sao chép liên kết","invite.copySuccess":"Sao chép thành công!","invite.copyFailed":"Sao chép thất bại, vui lòng sao chép thủ công","invite.noInviteLink":"Không tạo được liên kết mời","invite.totalInvites":"Tổng số lời mời","invite.totalReward":"Tổng số phần thưởng","invite.rules":"Quy tắc mời","invite.rule1":"Bạn sẽ nhận được phần thưởng cho mỗi người bạn mời đăng ký thành công","invite.rule2":"Bạn sẽ nhận được phần thưởng bổ sung khi người bạn được mời hoàn tất giao dịch đầu tiên","invite.rule3":"Phần thưởng mời sẽ được cộng trực tiếp vào tài khoản của bạn","invite.inviteList":"Danh sách người được mời","invite.tasks":"Trung tâm nhiệm vụ","invite.inviteeName":"Người được mời","invite.inviteTime":"Thời gian mời","invite.status":"Trạng thái","invite.reward":"Phần thưởng","invite.active":"Đang hoạt động","invite.inactive":"Không hoạt động","invite.completed":"Đã hoàn thành","invite.claimed":"Đã nhận","invite.pending":"Đang chờ hoàn thành","invite.goToTask":"Chuyển đến hoàn thành","invite.claimReward":"Nhận phần thưởng","invite.verify":"Xác minh hoàn tất","invite.verifySuccess":"Xác minh thành công Nhiệm vụ hoàn thành","invite.verifyNotCompleted":"Nhiệm vụ chưa hoàn thành, vui lòng hoàn thành nhiệm vụ trước","invite.verifyFailed":"Xác minh thất bại, vui lòng thử lại sau","invite.claimSuccess":"Đã nhận thành công {reward} QDT!","invite.claimFailed":"Không thể xác nhận, vui lòng thử lại sau","invite.totalRecords":"Tổng số {total} bản ghi","invite.task.twitter.title":"Chia sẻ lại bài đăng trên Twitter của chúng tôi lên X (Twitter)","invite.task.twitter.desc":"Chia sẻ bài đăng chính thức của chúng tôi lên tài khoản Twitter của bạn (X)","invite.task.youtube.title":"Đăng ký kênh YouTube của chúng tôi","invite.task.youtube.desc":"Đăng ký và theo dõi kênh YouTube chính thức của chúng tôi","invite.task.telegram.title":"Tham gia nhóm Telegram của chúng tôi","invite.task.telegram.desc":"Tham gia nhóm cộng đồng Telegram chính thức của chúng tôi","invite.task.discord.title":"Tham gia Discord Máy chủ","invite.task.discord.desc":"Tham gia máy chủ cộng đồng Discord của chúng tôi",message:"-","layouts.usermenu.dialog.title":"Thông tin","layouts.usermenu.dialog.content":"Bạn có chắc chắn muốn đăng xuất không?","layouts.userLayout.title":"Tìm kiếm sự thật trong sự không chắc chắn","settings.group.agent_memory":"Bộ nhớ/Phản tư","settings.group.reflection_worker":"Worker xác minh phản tư tự động","settings.field.ENABLE_AGENT_MEMORY":"Bật bộ nhớ tác nhân","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"Bật truy vấn vector (cục bộ)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"Kích thước embedding","settings.field.AGENT_MEMORY_TOP_K":"Số lượng Top-K","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"Kích thước cửa sổ ứng viên","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"Chu kỳ bán rã theo thời gian (ngày)","settings.field.AGENT_MEMORY_W_SIM":"Trọng số tương đồng","settings.field.AGENT_MEMORY_W_RECENCY":"Trọng số thời gian","settings.field.AGENT_MEMORY_W_RETURNS":"Trọng số lợi nhuận","settings.field.ENABLE_REFLECTION_WORKER":"Bật xác minh tự động","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"Khoảng thời gian xác minh (giây)","profile.notifications.title":"Cài đặt thông báo","profile.notifications.hint":"Cấu hình phương thức thông báo mặc định, sẽ được sử dụng tự động khi tạo giám sát tài sản và cảnh báo","profile.notifications.defaultChannels":"Kênh thông báo mặc định","profile.notifications.browser":"Thông báo trong ứng dụng","profile.notifications.email":"Email","profile.notifications.phone":"SMS","profile.notifications.telegramBotToken":"Telegram Bot Token","profile.notifications.telegramBotTokenPlaceholder":"Nhập Telegram Bot Token của bạn","profile.notifications.telegramBotTokenHint":"Tạo bot qua @BotFather để lấy Token","profile.notifications.telegramChatId":"Telegram Chat ID","profile.notifications.telegramPlaceholder":"Nhập Telegram Chat ID của bạn (ví dụ: 123456789)","profile.notifications.telegramHint":"Gửi /start cho @userinfobot để lấy Chat ID","profile.notifications.notifyEmail":"Email thông báo","profile.notifications.emailPlaceholder":"Địa chỉ email nhận thông báo","profile.notifications.emailHint":"Mặc định sử dụng email tài khoản, có thể đặt email khác","profile.notifications.phonePlaceholder":"Nhập số điện thoại (ví dụ: +84123456789)","profile.notifications.phoneHint":"Cần quản trị viên cấu hình dịch vụ Twilio","profile.notifications.discordWebhook":"Discord Webhook","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"Tạo Webhook trong cài đặt máy chủ Discord","profile.notifications.webhookUrl":"Webhook URL","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"URL Webhook tùy chỉnh, gửi thông báo qua POST JSON","profile.notifications.webhookToken":"Webhook Token (Tùy chọn)","profile.notifications.webhookTokenPlaceholder":"Bearer Token để xác thực yêu cầu","profile.notifications.webhookTokenHint":"Gửi dưới dạng Authorization: Bearer Token đến Webhook","profile.notifications.testBtn":"Gửi thông báo thử nghiệm","profile.notifications.saveSuccess":"Đã lưu cài đặt thông báo thành công","profile.notifications.selectChannel":"Vui lòng chọn ít nhất một kênh thông báo","profile.notifications.fillTelegramToken":"Vui lòng điền Telegram Bot Token","profile.notifications.fillTelegram":"Vui lòng điền Telegram Chat ID","profile.notifications.fillEmail":"Vui lòng điền email thông báo","profile.notifications.testSent":"Đã gửi thông báo thử nghiệm, vui lòng kiểm tra các kênh thông báo"},k=(0,i.A)((0,i.A)({},p),y)}}]); \ No newline at end of file +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[424],{69654:function(n,a,t){t.d(a,{default:function(){return k}});var i=t(76338),s={items_per_page:"/ trang",jump_to:"Đến",jump_to_confirm:"xác nhận",page:"",prev_page:"Trang Trước",next_page:"Trang Kế",prev_5:"Về 5 Trang Trước",next_5:"Đến 5 Trang Kế",prev_3:"Về 3 Trang Trước",next_3:"Đến 3 Trang Kế"},e=t(85505),h={today:"Hôm nay",now:"Bây giờ",backToToday:"Trở về hôm nay",ok:"Ok",clear:"Xóa",month:"Tháng",year:"Năm",timeSelect:"Chọn thời gian",dateSelect:"Chọn ngày",weekSelect:"Chọn tuần",monthSelect:"Chọn tháng",yearSelect:"Chọn năm",decadeSelect:"Chọn thập kỷ",yearFormat:"YYYY",dateFormat:"D/M/YYYY",dayFormat:"D",dateTimeFormat:"D/M/YYYY HH:mm:ss",monthBeforeYear:!0,previousMonth:"Tháng trước (PageUp)",nextMonth:"Tháng sau (PageDown)",previousYear:"Năm trước (Control + left)",nextYear:"Năm sau (Control + right)",previousDecade:"Thập kỷ trước",nextDecade:"Thập kỷ sau",previousCentury:"Thế kỷ trước",nextCentury:"Thế kỷ sau"},o={placeholder:"Chọn thời gian"},c=o,r={lang:(0,e.A)({placeholder:"Chọn thời điểm",rangePlaceholder:["Ngày bắt đầu","Ngày kết thúc"]},h),timePickerLocale:(0,e.A)({},c)},d=r,g=d,l={locale:"vi",Pagination:s,DatePicker:d,TimePicker:c,Calendar:g,Table:{filterTitle:"Bộ ",filterConfirm:"OK",filterReset:"Tạo Lại",selectAll:"Chọn Tất Cả",selectInvert:"Chọn Ngược Lại"},Modal:{okText:"OK",cancelText:"Huỷ",justOkText:"OK"},Popconfirm:{okText:"OK",cancelText:"Huỷ"},Transfer:{searchPlaceholder:"Tìm ở đây",itemUnit:"mục",itemsUnit:"mục"},Upload:{uploading:"Đang tải lên...",removeFile:"Gỡ bỏ tập tin",uploadError:"Lỗi tải lên",previewFile:"Xem thử tập tin",downloadFile:"Tải tập tin"},Empty:{description:"Trống"}},u=l,m=t(21135),b=t.n(m),p={antLocale:u,momentName:"vi",momentLocale:b()},y={submit:"Gửi",save:"Lưu","submit.ok":"Gửi thành công","save.ok":"Lưu thành công","menu.welcome":"Chào mừng","menu.home":"Trang chủ","menu.dashboard":"Bảng điều khiển","menu.dashboard.indicator":"Phân tích chỉ báo","menu.dashboard.community":"Cộng đồng chỉ báo","menu.dashboard.analysis":"Phân tích AI","menu.dashboard.tradingAssistant":"Trợ lý giao dịch","menu.dashboard.aiTradingAssistant":"Trợ lý giao dịch AI","menu.dashboard.signalRobot":"Robot tín hiệu","menu.dashboard.monitor":"Giám sát Trang","menu.dashboard.workplace":"Nơi làm việc","menu.form":"Trang biểu mẫu","menu.form.basic-form":"Biểu mẫu cơ bản","menu.form.step-form":"Biểu mẫu từng bước","menu.form.step-form.info":"Biểu mẫu từng bước (Điền thông tin chuyển khoản)","menu.form.step-form.confirm":"Biểu mẫu từng bước (Xác nhận thông tin chuyển khoản)","menu.form.step-form.result":"Biểu mẫu từng bước (Hoàn tất)","menu.form.advanced-form":"Biểu mẫu nâng cao","menu.list":"Trang danh sách","menu.list.table-list":"Bảng truy vấn","menu.list.basic-list":"Tiêu chuẩn Menu.list","menu.list.card-list":"Danh sách thẻ","menu.list.search-list":"Tìm kiếm danh sách","menu.list.search-list.articles":"Tìm kiếm danh sách (Bài viết)","menu.list.search-list.projects":"Tìm kiếm danh sách (Dự án)","menu.list.search-list.applications":"Tìm kiếm danh sách (Ứng dụng)","menu.profile":"Trang chi tiết","menu.profile.basic":"Trang chi tiết cơ bản","menu.profile.advanced":"Trang chi tiết nâng cao","menu.result":"Trang kết quả","menu.result.success":"Trang thành công","menu.result.fail":"Trang thất bại","menu.exception":"Ngoại lệ Trang","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"Đang gây ra lỗi","menu.account":"Trang cá nhân","menu.account.center":"Trung tâm cá nhân","menu.account.settings":"Cài đặt cá nhân","menu.account.trigger":"Đang gây ra lỗi","menu.account.logout":"Đăng xuất","menu.wallet":"Ví của tôi","menu.docs":"Trung tâm tài liệu","menu.docs.detail":"Chi tiết tài liệu","menu.header.refreshPage":"Làm mới Trang","menu.invite.friends":"Mời bạn bè","app.setting.pagestyle":"Cài đặt kiểu tổng thể","app.setting.pagestyle.light":"Kiểu menu sáng","app.setting.pagestyle.dark":"Kiểu menu tối","app.setting.pagestyle.realdark":"Chế độ tối","app.setting.themecolor":"Màu chủ đề","app.setting.navigationmode":"Chế độ điều hướng","app.setting.sidemenu.nav":"Điều hướng thanh bên","app.setting.topmenu.nav":"Điều hướng trên cùng","app.setting.content-width":"Chiều rộng vùng nội dung","app.setting.content-width.tooltip":"Cài đặt này chỉ có hiệu lực khi [Điều hướng trên cùng] được bật","app.setting.content-width.fixed":"Cố định","app.setting.content-width.fluid":"Linh hoạt","app.setting.fixedheader":"Tiêu đề cố định","app.setting.fixedheader.tooltip":"Có thể cấu hình khi tiêu đề cố định","app.setting.autoHideHeader":"Ẩn tiêu đề khi vuốt xuống","app.setting.fixedsidebar":"Menu thanh bên cố định","app.setting.sidemenu":"Bố cục menu thanh bên","app.setting.topmenu":"Bố cục menu trên cùng","app.setting.othersettings":"Các cài đặt khác","app.setting.weakmode":"Chế độ màu yếu","app.setting.multitab":"Chế độ nhiều tab","app.setting.copy":"Sao chép cài đặt","app.setting.loading":"Đang tải theme","app.setting.copyinfo":"Đã sao chép cài đặt thành công src/config/defaultSettings.js","app.setting.copy.success":"Sao chép hoàn tất","app.setting.copy.fail":"Sao chép thất bại","app.setting.theme.switching":"Đang chuyển đổi giao diện!","app.setting.production.hint":"Thanh cấu hình chỉ dùng để xem trước trong môi trường phát triển và sẽ không hiển thị trong môi trường sản xuất. Vui lòng sao chép và chỉnh sửa thủ công tệp cấu hình.","app.setting.themecolor.daybreak":"Xanh dương bình minh (mặc định)","app.setting.themecolor.dust":"Hoàng hôn","app.setting.themecolor.volcano":"Núi lửa","app.setting.themecolor.sunset":"Hoàng hôn","app.setting.themecolor.cyan":"Xanh lam sáng","app.setting.themecolor.green":"Xanh lục cực quang","app.setting.themecolor.geekblue":"Xanh dương công nghệ","app.setting.themecolor.purple":"Tím","app.setting.tooltip":"Cài đặt trang","user.login.userName":"Tên người dùng","user.login.password":"Mật khẩu","user.login.username.placeholder":"Tài khoản: admin","user.login.password.placeholder":"Mật khẩu: admin hoặc ant.design","user.login.message-invalid-credentials":"Đăng nhập thất bại, vui lòng kiểm tra email và mã xác minh của bạn","user.login.message-invalid-verification-code":"Mã xác minh không chính xác","user.login.tab-login-credentials":"Đăng nhập bằng tài khoản và mật khẩu","user.login.tab-login-email":"Đăng nhập bằng email","user.login.tab-login-mobile":"Đăng nhập bằng số điện thoại","user.login.captcha.placeholder":"Vui lòng nhập mã xác minh hình ảnh","user.login.mobile.placeholder":"Số điện thoại Số điện thoại","user.login.mobile.verification-code.placeholder":"Mã xác thực","user.login.email.placeholder":"Vui lòng nhập địa chỉ email","user.login.email.verification-code.placeholder":"Vui lòng nhập mã xác thực","user.login.email.sending":"Đang gửi mã xác thực...","user.login.email.send-success-title":"Thông báo","user.login.email.send-success":"Mã xác thực đã được gửi thành công, vui lòng kiểm tra email của bạn","user.login.sms.send-success":"Mã xác thực đã được gửi thành công, vui lòng kiểm tra tin nhắn SMS của bạn","user.login.remember-me":"Tự động đăng nhập","user.login.forgot-password":"Quên mật khẩu Mật khẩu","user.login.sign-in-with":"Các phương thức đăng nhập khác","user.login.signup":"Đăng ký tài khoản","user.login.login":"Đăng nhập","user.register.register":"Đăng ký","user.register.email.placeholder":"Email","user.register.password.placeholder":"Vui lòng nhập ít nhất 6 ký tự. Vui lòng không sử dụng mật khẩu dễ đoán.","user.register.password.popover-message":"Vui lòng nhập ít nhất 6 ký tự. Vui lòng không sử dụng mật khẩu dễ đoán.","user.register.confirm-password.placeholder":"Xác nhận mật khẩu","user.register.get-verification-code":"Lấy mã xác minh","user.register.sign-in":"Đăng nhập bằng tài khoản hiện có","user.register-result.msg":"Tài khoản của bạn: {email} đã được đăng ký thành công","user.register-result.activation-email":"Email kích hoạt đã được gửi đến hộp thư đến của bạn. Email có hiệu lực trong 24 giờ. Vui lòng đăng nhập vào email của bạn và nhấp vào liên kết trong email để kích hoạt tài khoản.","user.register-result.back-home":"Quay lại trang chủ","user.register-result.view-mailbox":"Xem email","user.email.required":"Vui lòng nhập địa chỉ email của bạn!","user.email.wrong-format":"Định dạng địa chỉ email không chính xác!","user.userName.required":"Vui lòng nhập tên người dùng hoặc địa chỉ email của bạn","user.password.required":"Vui lòng nhập mật khẩu của bạn!","user.password.twice.msg":"Hai mật khẩu không khớp!","user.password.strength.msg":"Mật khẩu không đủ mạnh","user.password.strength.strong":"Độ mạnh: Mạnh","user.password.strength.medium":"Độ mạnh: Trung bình","user.password.strength.low":"Độ mạnh: Yếu","user.password.strength.short":"Độ mạnh: Quá ngắn","user.confirm-password.required":"Vui lòng xác nhận mật khẩu của bạn!","user.phone-number.required":"Vui lòng nhập số điện thoại hợp lệ","user.phone-number.wrong-format":"Định dạng số điện thoại không chính xác!","user.verification-code.required":"Vui lòng nhập mã xác minh!","user.captcha.required":"Vui lòng nhập mã xác minh hình ảnh!","user.login.infos":"QuantDinger là công cụ phân tích cổ phiếu đa tác nhân AI và không có chứng chỉ tư vấn đầu tư chứng khoán. Tất cả kết quả phân tích, xếp hạng và ý kiến ​​tham khảo trên nền tảng đều được AI tự động tạo ra dựa trên dữ liệu lịch sử và chỉ dành cho mục đích học tập, nghiên cứu và trao đổi kỹ thuật. Chúng không cấu thành bất kỳ lời khuyên đầu tư hoặc cơ sở ra quyết định nào. Đầu tư cổ phiếu tiềm ẩn nhiều rủi ro như rủi ro thị trường, rủi ro thanh khoản và rủi ro chính sách, có thể dẫn đến mất vốn gốc. Người dùng nên đưa ra quyết định độc lập dựa trên khả năng chấp nhận rủi ro của mình, và mọi hành vi đầu tư và hậu quả phát sinh từ việc sử dụng công cụ này đều do người dùng chịu trách nhiệm. Thị trường đầy rủi ro, và đầu tư cần thận trọng.","user.login.tab-login-web3":"Đăng nhập Web3","user.login.web3.tip":"Đăng nhập bằng ví để xác thực chữ ký","user.login.web3.connect":"Kết nối ví và đăng nhập","user.login.web3.no-wallet":"Không phát hiện ví","user.login.web3.no-address":"Không lấy được địa chỉ ví","user.login.web3.nonce-failed":"Không thể lấy số ngẫu nhiên","user.login.web3.verify-failed":"Xác thực chữ ký thất bại","user.login.web3.success":"Đăng nhập thành công","user.login.web3.failed":"Đăng nhập ví thất bại","nav.no_wallet":"Ví không được tìm thấy đã phát hiện","nav.copy":"Sao chép","nav.copy_success":"Sao chép thành công","user.login.oauth.google":"Đăng nhập bằng Google","user.login.oauth.github":"Đăng nhập bằng GitHub","user.login.oauth.loading":"Đang chuyển hướng đến trang xác thực...","user.login.oauth.failed":"Đăng nhập OAuth thất bại","user.login.oauth.get-url-failed":"Không thể lấy liên kết xác thực","user.login.subtitle":"Thông tin chi tiết định lượng về thị trường toàn cầu","user.login.legal.title":"Tuyên bố pháp lý","user.login.legal.view":"Xem tuyên bố pháp lý","user.login.legal.collapse":"Thu gọn Tuyên bố pháp lý","user.login.legal.agree":"Tôi đã đọc và đồng ý với tuyên bố pháp lý","user.login.legal.required":"Vui lòng đọc và kiểm tra tuyên bố pháp lý trước","user.login.legal.content":"QuantDinger là công cụ phân tích cổ phiếu đa tác nhân AI và không có bằng cấp tư vấn đầu tư chứng khoán. Tất cả kết quả phân tích, xếp hạng và ý kiến ​​tham khảo trên nền tảng đều được AI tự động tạo ra dựa trên dữ liệu lịch sử và chỉ dành cho mục đích học tập, nghiên cứu và trao đổi kỹ thuật, và không cấu thành bất kỳ lời khuyên đầu tư hoặc cơ sở ra quyết định nào. Đầu tư cổ phiếu tiềm ẩn nhiều rủi ro như rủi ro thị trường, rủi ro thanh khoản và rủi ro chính sách, có thể dẫn đến mất vốn gốc. Người dùng nên đưa ra quyết định độc lập dựa trên khả năng chấp nhận rủi ro của mình, và mọi hành vi đầu tư và hậu quả phát sinh từ việc sử dụng công cụ này sẽ do người dùng chịu trách nhiệm. Thị trường đầy rủi ro, và đầu tư cần thận trọng.","user.login.privacy.title":"Điều khoản Quyền riêng tư Người dùng","user.login.privacy.view":"Xem Điều khoản Quyền riêng tư Người dùng","user.login.privacy.collapse":"Thu gọn Điều khoản Quyền riêng tư Người dùng","user.login.privacy.content":"Chúng tôi coi trọng quyền riêng tư và việc bảo vệ dữ liệu của bạn. 1) Phạm vi Thu thập: Chúng tôi chỉ thu thập thông tin cần thiết để thực hiện các chức năng (chẳng hạn như email, số điện thoại di động, mã vùng, địa chỉ ví Web3) và nhật ký cần thiết cũng như thông tin thiết bị. 2) Mục đích Sử dụng: Để đăng nhập tài khoản và xác minh bảo mật, cung cấp chức năng dịch vụ, khắc phục sự cố và tuân thủ các yêu cầu. 3) Lưu trữ và Bảo mật: Dữ liệu được lưu trữ mã hóa và các biện pháp kiểm soát quyền và truy cập cần thiết được thực hiện để ngăn chặn truy cập trái phép, tiết lộ hoặc mất mát. 4) Chia sẻ và Bên thứ ba: Ngoại trừ trường hợp được yêu cầu bởi luật và quy định hoặc cần thiết để thực hiện dịch vụ, chúng tôi sẽ không chia sẻ thông tin cá nhân của bạn với bên thứ ba; Nếu có sự tham gia của các dịch vụ bên thứ ba (chẳng hạn như ví điện tử, nhà cung cấp dịch vụ SMS), dữ liệu sẽ chỉ được xử lý ở mức tối thiểu cần thiết để thực hiện các chức năng. 5) Cookie/Bộ nhớ cục bộ: Được sử dụng để xác thực trạng thái đăng nhập và duy trì phiên làm việc cần thiết (chẳng hạn như mã thông báo, PHPSESSID). Bạn có thể xóa hoặc hạn chế chúng trong trình duyệt của mình. 6) Quyền cá nhân: Bạn có thể thực hiện các quyền của mình để yêu cầu, sửa đổi, xóa và rút lại sự đồng ý theo luật và quy định hiện hành. 7) Thay đổi và Thông báo: Các bản cập nhật cho các điều khoản này sẽ được hiển thị rõ ràng trên trang. Việc tiếp tục sử dụng dịch vụ này cho thấy bạn đã đọc và đồng ý với nội dung được cập nhật. Nếu bạn không đồng ý với các điều khoản này hoặc bất kỳ bản cập nhật nào trong đó, vui lòng ngừng sử dụng dịch vụ này và liên hệ với chúng tôi. ","account.basicInfo":"Thông tin cơ bản","account.id":"ID người dùng","account.username":"Tên người dùng","account.nickname":"Biệt danh","account.email":"Email","account.mobile":"Số điện thoại","account.web3address":"Địa chỉ ví","account.pid":"ID người giới thiệu","account.level":"Cấp độ người dùng","account.money":"Số dư","account.qdtBalance":"Số dư QDT","account.score":"Điểm","account.createtime":"Thời gian đăng ký","account.inviteLink":"Liên kết mời","account.recharge":"Nạp tiền","account.rechargeTip":"Mã QR bên dưới để nạp tiền bằng WeChat hoặc Alipay","account.qrCodePlaceholder":"Mã QR giả lập","account.rechargeAmount":"Số tiền cần nạp","account.enterAmount":"Vui lòng nhập số tiền cần nạp","account.rechargeHint":"Số tiền nạp tối thiểu: 1 QDT","account.confirmRecharge":"Xác nhận nạp tiền","account.enterValidAmount":"Vui lòng nhập số tiền hợp lệ","account.rechargeSuccess":"Nạp tiền thành công! Số tiền {amount} QDT đã được nạp","account.settings.menuMap.basic":"Cài đặt cơ bản","account.settings.menuMap.security":"Cài đặt bảo mật","account.settings.menuMap.notification":"Thông báo tin nhắn mới","account.settings.menuMap.moneyLog":"Chi tiết quỹ","account.moneyLog.empty":"Không có chi tiết quỹ","account.moneyLog.total":"Tổng số {total} giao dịch","account.moneyLog.type.purchase":"Hạn mức mua hàng","account.moneyLog.type.recharge":"Nạp tiền","account.moneyLog.type.refund":"Hoàn tiền","account.moneyLog.type.reward":"Thưởng","account.moneyLog.type.income":"Thu nhập Các chỉ báo","account.moneyLog.type.commission":"Phí nền tảng","wallet.balance":"Số dư QDT","wallet.recharge":"Nạp tiền","wallet.withdraw":"Rút tiền","wallet.filter":"Lọc","wallet.reset":"Đặt lại","wallet.totalRecharge":"Tổng số tiền nạp","wallet.totalWithdraw":"Tổng số tiền rút","wallet.totalIncome":"Tổng số tiền thu nhập","wallet.records":"Lịch sử giao dịch và chi tiết quỹ","wallet.tradingRecords":"Lịch sử giao dịch","wallet.moneyLog":"Chi tiết quỹ","wallet.rechargeTip":"Vui lòng quét mã QR bên dưới bằng WeChat hoặc Alipay để nạp tiền","wallet.qrCodePlaceholder":"Mã QR (mô phỏng)","wallet.rechargeAmount":"Số tiền cần nạp","wallet.enterAmount":"Vui lòng nhập số tiền cần nạp","wallet.rechargeHint":"Số tiền nạp tối thiểu: 1 QDT","wallet.confirmRecharge":"Xác nhận nạp tiền","wallet.enterValidAmount":"Vui lòng nhập số tiền hợp lệ","wallet.rechargeSuccess":"Nạp tiền thành công! Đã thanh toán {amount} QDT","wallet.rechargeFailed":"Giao dịch thất bại","wallet.withdrawTip":"Vui lòng nhập số tiền rút và địa chỉ rút tiền","wallet.withdrawAmount":"Số tiền rút","wallet.enterWithdrawAmount":"Vui lòng nhập số tiền rút","wallet.withdrawHint":"Số tiền rút tối thiểu: 1 QDT","wallet.withdrawAddress":"Địa chỉ rút tiền (tùy chọn)","wallet.enterWithdrawAddress":"Vui lòng nhập địa chỉ rút tiền","wallet.confirmWithdraw":"Xác nhận rút tiền","wallet.enterValidWithdrawAmount":"Vui lòng nhập số tiền rút hợp lệ","wallet.insufficientBalance":"Số dư không đủ","wallet.withdrawSuccess":"Rút tiền thành công! Số tiền {amount} QDT đã rút","wallet.withdrawFailed":"Giao dịch rút tiền thất bại","wallet.noTradingRecords":"Không có bản ghi giao dịch nào","wallet.noMoneyLog":"Không có chi tiết giao dịch","wallet.loadTradingRecordsFailed":"Không thể tải bản ghi giao dịch","wallet.loadMoneyLogFailed":"Không thể tải chi tiết giao dịch","wallet.moneyLogTotal":"Tổng số {total} bản ghi","wallet.moneyLogTypeTitle":"Loại","wallet.moneyLogType.all":"Tất cả các loại","wallet.table.time":"Thời gian","wallet.table.type":"Loại","wallet.table.price":"Giá","wallet.table.amount":"Số lượng","wallet.table.money":"Số tiền","wallet.table.balance":"Số dư","wallet.table.memo":"Ghi chú","wallet.table.value":"Giá trị","wallet.table.profit":"Lợi nhuận/Thua lỗ","wallet.table.commission":"Hoa hồng","wallet.table.total":"Tổng số {total} bản ghi","wallet.tradeType.buy":"Mua","wallet.tradeType.sell":"Bán","wallet.tradeType.liquidation":"Thanh lý","wallet.tradeType.openLong":"Mở lệnh mua","wallet.tradeType.addLong":"Thêm lệnh mua","wallet.tradeType.closeLong":"Đóng lệnh mua","wallet.tradeType.closeLongStop":"Đóng lệnh mua và cắt lỗ","wallet.tradeType.closeLongProfit":"Chốt lời và đóng lệnh mua","wallet.tradeType.openShort":"Mở vị thế bán khống","wallet.tradeType.addShort":"Thêm vị thế bán khống","wallet.tradeType.closeShort":"Đóng vị thế bán khống","wallet.tradeType.closeShortStop":"Đóng vị thế bán khống với lệnh dừng lỗ","wallet.tradeType.closeShortProfit":"Chốt lời và đóng vị thế bán khống","wallet.moneyLogType.purchase":"Chỉ báo mua","wallet.moneyLogType.recharge":"Nạp tiền","wallet.moneyLogType.withdraw":"Rút tiền mặt","wallet.moneyLogType.refund":"Hoàn tiền","wallet.moneyLogType.reward":"Thưởng","wallet.moneyLogType.income":"Thu nhập","wallet.moneyLogType.commission":"Phí giao dịch","wallet.web3Address.required":"Vui lòng nhập địa chỉ ví Web3 của bạn trước","wallet.web3Address.requiredDescription":"Bạn cần liên kết địa chỉ ví Web3 của mình trước khi gửi tiền để nhận tiền gửi","wallet.web3Address.placeholder":"Vui lòng nhập địa chỉ ví Web3 của bạn (bắt đầu bằng 0x)","wallet.web3Address.save":"Lưu địa chỉ ví","wallet.web3Address.saveSuccess":"Địa chỉ ví đã được lưu thành công","wallet.web3Address.saveFailed":"Không thể lưu địa chỉ ví","wallet.web3Address.invalidFormat":"Vui lòng nhập địa chỉ ví Web3 hợp lệ (định dạng Ethereum: 42 ký tự bắt đầu bằng 0x, hoặc TRC20) Định dạng: 34 ký tự bắt đầu bằng T)","wallet.selectCoin":"Chọn loại tiền điện tử","wallet.selectChain":"Chọn chuỗi khối","wallet.chain.eth":"ETH (ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"BSC","wallet.targetQdtAmount":"Số lượng QDT bạn muốn đổi (tùy chọn)","wallet.targetQdtAmount.placeholder":"Vui lòng nhập số lượng QDT bạn muốn đổi, giá QDT hiện tại: {price} USDT","wallet.targetQdtAmount.requiredUsdt":"Số tiền cần nạp: {amount} USDT","wallet.rechargeAddress":"Địa chỉ nạp tiền","wallet.copyAddress":"Sao chép","wallet.copySuccess":"Sao chép thành công!","wallet.copyFailed":"Sao chép thất bại, vui lòng sao chép thủ công","wallet.rechargeAddressHint":"Vui lòng đảm bảo bạn sử dụng chuỗi {chain} để gửi {coin} vào địa chỉ này","wallet.qdtPrice.loading":"Đang tải...","wallet.rechargeTip.new":"Vui lòng chọn loại tiền tệ và chuỗi, sau đó quét mã QR bên dưới để gửi tiền","wallet.exchangeRate":"1 QDT ≈ {rate} USDT","wallet.withdrawableAmount":"Số tiền có thể rút","wallet.totalBalance":"Tổng số dư","wallet.insufficientWithdrawable":"Số tiền có thể rút không đủ, hiện tại chỉ có thể rút: {amount} QDT","wallet.withdrawAddressRequired":"Vui lòng nhập địa chỉ rút tiền địa chỉ","wallet.withdrawAddressHint":"Vui lòng đảm bảo địa chỉ chính xác; không thể hủy bỏ giao dịch rút tiền sau khi đã gửi","wallet.withdrawSubmitSuccess":"Yêu cầu rút tiền đã được gửi thành công; Vui lòng chờ xem xét","menu.footer.contactUs":"Liên hệ với chúng tôi","menu.footer.getSupport":"Nhận hỗ trợ","menu.footer.socialAccounts":"Tài khoản mạng xã hội","menu.footer.userAgreement":"Thỏa thuận người dùng","menu.footer.privacyPolicy":"Chính sách bảo mật","menu.footer.support":"Hỗ trợ","menu.footer.featureRequest":"Yêu cầu tính năng","menu.footer.email":"Email","menu.footer.liveChat":"Trò chuyện trực tuyến 24/7","dashboard.analysis.title":"Phân tích đa chiều","dashboard.analysis.subtitle":"Phân tích tài chính toàn diện dựa trên AI Nền tảng","dashboard.analysis.selectSymbol":"Chọn hoặc nhập mã chứng khoán","dashboard.analysis.selectModel":"Chọn mô hình","dashboard.analysis.startAnalysis":"Bắt ​​đầu phân tích","dashboard.analysis.history":"Lịch sử","dashboard.analysis.tab.overview":"Phân tích toàn diện","dashboard.analysis.tab.fundamental":"Các yếu tố cơ bản","dashboard.analysis.tab.technical":"Phân tích kỹ thuật","dashboard.analysis.tab.news":"Tin tức","dashboard.analysis.tab.sentiment":"Tâm lý thị trường","dashboard.analysis.tab.risk":"Rủi ro","dashboard.analysis.tab.debate":"Tăng/Giảm giá","dashboard.analysis.tab.decision":"Quyết định cuối cùng","dashboard.analysis.empty.selectSymbol":"Chọn mục tiêu để bắt đầu phân tích","dashboard.analysis.empty.selectSymbolDesc":"Chọn mục tiêu từ danh sách theo dõi của bạn hoặc nhập mã của nó để nhận báo cáo phân tích AI đa chiều","dashboard.analysis.empty.startAnalysis":'Nhấp vào nút "Bắt đầu phân tích" để phân tích đa chiều',"dashboard.analysis.empty.startAnalysisDesc":"Chúng tôi sẽ cung cấp cho bạn phân tích toàn diện từ nhiều khía cạnh bao gồm cơ bản, kỹ thuật, tin tức, tâm lý và rủi ro","dashboard.analysis.empty.noData":"Không có dữ liệu phân tích cho {type}, vui lòng thực hiện phân tích toàn diện trước","dashboard.analysis.empty.noWatchlist":"Không có danh sách theo dõi có sẵn","dashboard.analysis.empty.noHistory":"Không có dữ liệu lịch sử","dashboard.analysis.empty.watchlistHint":"Không có danh sách theo dõi, vui lòng thực hiện phân tích toàn diện trước","dashboard.analysis.empty.noDebateData":"Không có dữ liệu tranh luận","dashboard.analysis.empty.noDecisionData":"Không có dữ liệu quyết định","dashboard.analysis.empty.selectAgent":"Vui lòng chọn một Đại lý để xem kết quả phân tích","dashboard.analysis.loading.analyzing":"Đang phân tích, vui lòng chờ...","dashboard.analysis.loading.fundamental":"Đang phân tích dữ liệu cơ bản...","dashboard.analysis.loading.technical":"Đang phân tích các chỉ báo kỹ thuật...","dashboard.analysis.loading.news":"Đang phân tích dữ liệu tin tức...","dashboard.analysis.loading.sentiment":"Phân tích tâm lý thị trường...","dashboard.analysis.loading.risk":"Đánh giá rủi ro...","dashboard.analysis.loading.debate":"Cuộc tranh luận đang diễn ra giữa phe tăng giá và phe giảm giá...","dashboard.analysis.loading.decision":"Đưa ra quyết định cuối cùng...","dashboard.analysis.score.overall":"Điểm tổng thể","dashboard.analysis.score.recommendation":"Lời khuyên đầu tư","dashboard.analysis.score.confidence":"Mức độ tin cậy","dashboard.analysis.dimension.fundamental":"các yếu tố cơ bản","dashboard.analysis.dimension.technical":"các yếu tố kỹ thuật","dashboard.analysis.dimension.news":"tin tức","dashboard.analysis.dimension.sentiment":"tâm lý","dashboard.analysis.dimension.risk":"rủi ro","dashboard.analysis.card.dimensionScores":"điểm số cho từng yếu tố","dashboard.analysis.card.overviewReport":"báo cáo tổng quan","dashboard.analysis.card.financialMetrics":"các chỉ số tài chính","dashboard.analysis.card.fundamentalReport":"báo cáo phân tích cơ bản","dashboard.analysis.card.technicalIndicators":"Các chỉ số kỹ thuật Các chỉ báo","dashboard.analysis.card.technicalReport":"Báo cáo phân tích kỹ thuật","dashboard.analysis.card.newsList":"Tin tức liên quan","dashboard.analysis.card.newsReport":"Báo cáo phân tích tin tức","dashboard.analysis.card.sentimentIndicators":"Các chỉ báo tâm lý","dashboard.analysis.card.sentimentReport":"Báo cáo phân tích tâm lý","dashboard.analysis.card.riskMetrics":"Các chỉ báo rủi ro","dashboard.analysis.card.riskReport":"Báo cáo đánh giá rủi ro","dashboard.analysis.card.bullView":"Quan điểm lạc quan","dashboard.analysis.card.bearView":"Quan điểm bi quan","dashboard.analysis.card.researchConclusion":"Kết luận của nhà nghiên cứu","dashboard.analysis.card.traderPlan":"Kế hoạch giao dịch","dashboard.analysis.card.riskDebate":"Thảo luận của Ủy ban Rủi ro","dashboard.analysis.card.finalDecision":"Quyết định cuối cùng","dashboard.analysis.card.tradePlanDetail":"Chi tiết kế hoạch giao dịch","dashboard.analysis.tradingPlan.entry_price":"Giá vào lệnh","dashboard.analysis.tradingPlan.position_size":"Quy mô vị thế","dashboard.analysis.tradingPlan.stop_loss":"Cắt lỗ","dashboard.analysis.tradingPlan.take_profit":"Chốt lời","dashboard.analysis.label.confidence":"Mức độ tự tin Mức độ","dashboard.analysis.label.keyPoints":"Điểm chính","dashboard.analysis.label.riskWarning":"Cảnh báo rủi ro","dashboard.analysis.risk.risky":"Quan điểm rủi ro","dashboard.analysis.risk.neutral":"Quan điểm trung lập","dashboard.analysis.risk.safe":"Quan điểm an toàn","dashboard.analysis.risk.conclusion":"Kết luận","dashboard.analysis.feature.fundamental":"Phân tích cơ bản","dashboard.analysis.feature.technical":"Phân tích kỹ thuật","dashboard.analysis.feature.news":"Phân tích tin tức","dashboard.analysis.feature.sentiment":"Phân tích cảm xúc","dashboard.analysis.feature.risk":"Rủi ro Đánh giá","dashboard.analysis.watchlist.title":"Danh sách theo dõi của tôi","dashboard.analysis.watchlist.add":"Thêm","dashboard.analysis.watchlist.addStock":"Thêm cổ phiếu","dashboard.analysis.modal.addStock.title":"Thêm vào danh sách theo dõi","dashboard.analysis.modal.addStock.confirm":"Xác nhận","dashboard.analysis.modal.addStock.cancel":"Hủy","dashboard.analysis.modal.addStock.market":"Loại thị trường","dashboard.analysis.modal.addStock.marketPlaceholder":"Vui lòng chọn thị trường","dashboard.analysis.modal.addStock.marketRequired":"Vui lòng chọn loại thị trường","dashboard.analysis.modal.addStock.symbol":"Mã chứng khoán","dashboard.analysis.modal.addStock.symbolPlaceholder":"Ví dụ: AAPL, TSLA, GOOGL, 000001, BTC","dashboard.analysis.modal.addStock.symbolRequired":"Vui lòng nhập mã chứng khoán","dashboard.analysis.modal.addStock.searchPlaceholder":"Tìm kiếm mã chứng khoán hoặc tên cổ phiếu","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"Tìm kiếm hoặc nhập mã chứng khoán (ví dụ: AAPL, BTC/USDT, EUR/USD)","dashboard.analysis.modal.addStock.searchOrInputHint":"Hỗ trợ tìm kiếm cổ phiếu trong cơ sở dữ liệu hoặc nhập trực tiếp mã (hệ thống sẽ tự động truy xuất tên)","dashboard.analysis.modal.addStock.search":"Tìm kiếm","dashboard.analysis.modal.addStock.searchResults":"Kết quả tìm kiếm","dashboard.analysis.modal.addStock.hotSymbols":"Cổ phiếu nóng","dashboard.analysis.modal.addStock.noHotSymbols":"Không có cổ phiếu nóng","dashboard.analysis.modal.addStock.selectedSymbol":"Cổ phiếu đã chọn","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"Vui lòng chọn cổ phiếu trước","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"Vui lòng chọn cổ phiếu hoặc nhập mã cổ phiếu","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"Vui lòng nhập mã cổ phiếu","dashboard.analysis.modal.addStock.pleaseSelectMarket":"Vui lòng chọn loại thị trường","dashboard.analysis.modal.addStock.searchFailed":"Tìm kiếm thất bại, vui lòng thử lại sau","dashboard.analysis.modal.addStock.noSearchResults":"Không tìm thấy cổ phiếu phù hợp","dashboard.analysis.modal.addStock.willAutoFetchName":"Hệ thống sẽ tự động lấy tên","dashboard.analysis.modal.addStock.addDirectly":"Thêm trực tiếp","dashboard.analysis.modal.addStock.nameWillBeFetched":"Tên sẽ được tự động lấy khi thêm","dashboard.analysis.market.USStock":"Cổ phiếu Mỹ","dashboard.analysis.market.Crypto":"Tiền điện tử","dashboard.analysis.market.Forex":"Ngoại hối","dashboard.analysis.market.Futures":"Hợp đồng tương lai","dashboard.analysis.modal.history.title":"Lịch sử phân tích","dashboard.analysis.modal.history.viewResult":"Xem kết quả","dashboard.analysis.modal.history.completeTime":"Thời gian hoàn thành","dashboard.analysis.modal.history.error":"Lỗi","dashboard.analysis.status.pending":"Đang chờ xử lý","dashboard.analysis.status.processing":"Đang xử lý","dashboard.analysis.status.completed":"Hoàn thành","dashboard.analysis.status.failed":"Thất bại","dashboard.analysis.message.selectSymbol":"Vui lòng chọn mục tiêu trước","dashboard.analysis.message.taskCreated":"Tác vụ phân tích đã được tạo, đang thực thi trong nền...","dashboard.analysis.message.analysisComplete":"Phân tích đã hoàn tất","dashboard.analysis.message.analysisCompleteCache":"Phân tích đã hoàn tất (sử dụng dữ liệu được lưu trong bộ nhớ cache)","dashboard.analysis.message.analysisFailed":"Phân tích thất bại, vui lòng thử lại sau","dashboard.analysis.message.addStockSuccess":"Đã thêm thành công","dashboard.analysis.message.addStockFailed":"Thêm thất bại","dashboard.analysis.message.removeStockSuccess":"Đã xóa thành công","dashboard.analysis.message.removeStockFailed":"Xóa thất bại","dashboard.analysis.message.resumingAnalysis":"Đang tiếp tục tác vụ phân tích...","dashboard.analysis.message.deleteSuccess":"Đã xóa thành công","dashboard.analysis.message.deleteFailed":"Xóa thất bại","dashboard.analysis.modal.history.delete":"Xóa","dashboard.analysis.modal.history.deleteConfirm":"Bạn có chắc chắn muốn xóa bản ghi phân tích này không?","dashboard.analysis.test":"Cửa hàng đường Gongzhuan {không}","dashboard.analysis.introduce":"Mô tả chỉ báo","dashboard.analysis.total-sales":"Tổng doanh thu","dashboard.analysis.day-sales":"Doanh thu trung bình hàng ngày","dashboard.analysis.visits":"Lượt truy cập","dashboard.analysis.visits-trend":"Lượt truy cập xu hướng","dashboard.analysis.visits-ranking":"Xếp hạng lượt truy cập cửa hàng","dashboard.analysis.day-visits":"Lượt truy cập hàng ngày","dashboard.analysis.week":"Lượt truy cập hàng tuần so với cùng kỳ năm trước","dashboard.analysis.day":"Lượt truy cập hàng ngày so với cùng kỳ năm trước","dashboard.analysis.payments":"Số lượng thanh toán","dashboard.analysis.conversion-rate":"Tỷ lệ chuyển đổi","dashboard.analysis.operational-effect":"Hiệu quả hoạt động","dashboard.analysis.sales-trend":"Xu hướng doanh số","dashboard.analysis.sales-ranking":"Xếp hạng doanh số cửa hàng","dashboard.analysis.all-year":"Quanh năm","dashboard.analysis.all-month":"Tháng này","dashboard.analysis.all-week":"Tuần này","dashboard.analysis.all-day":"Hôm nay","dashboard.analysis.search-users":"Số lượng người dùng tìm kiếm","dashboard.analysis.per-capita-search":"Số lượt tìm kiếm trung bình trên đầu người","dashboard.analysis.online-top-search":"Các từ khóa tìm kiếm trực tuyến phổ biến","dashboard.analysis.the-proportion-of-sales":"Doanh số theo danh mục","dashboard.analysis.dropdown-option-one":"Phương án một","dashboard.analysis.dropdown-option-two":"Phương án hai","dashboard.analysis.channel.all":"Tất cả Kênh","dashboard.analysis.channel.online":"Trực tuyến","dashboard.analysis.channel.stores":"Cửa hàng","dashboard.analysis.sales":"Doanh thu bán hàng","dashboard.analysis.traffic":"Lưu lượng truy cập","dashboard.analysis.table.rank":"Xếp hạng","dashboard.analysis.table.search-keyword":"Từ khóa tìm kiếm","dashboard.analysis.table.users":"Số lượng người dùng","dashboard.analysis.table.weekly-range":"Tăng trưởng hàng tuần","dashboard.indicator.selectSymbol":"Chọn hoặc nhập mã cổ phiếu","dashboard.indicator.emptyWatchlistHint":"Hiện không có cổ phiếu nào trong danh sách theo dõi, vui lòng thêm vào, Đầu tiên","dashboard.indicator.hint.selectSymbol":"Vui lòng chọn cổ phiếu để bắt đầu phân tích","dashboard.indicator.hint.selectSymbolDesc":"Chọn hoặc nhập mã cổ phiếu vào ô tìm kiếm phía trên để xem biểu đồ nến và các chỉ báo kỹ thuật","dashboard.indicator.retry":"Thử lại","dashboard.indicator.panel.title":"Các chỉ báo kỹ thuật","dashboard.indicator.panel.realtimeOn":"Tắt cập nhật thời gian thực","dashboard.indicator.panel.realtimeOff":"Bật cập nhật thời gian thực","dashboard.indicator.panel.themeLight":"Chuyển sang chủ đề tối","dashboard.indicator.panel.themeDark":"Chuyển sang chủ đề sáng theme","dashboard.indicator.section.enabled":"Đã bật","dashboard.indicator.section.added":"Các chỉ báo tôi đã thêm","dashboard.indicator.section.custom":"Chỉ báo do tôi tự tạo","dashboard.indicator.section.bought":"Các chỉ báo tôi đã mua","dashboard.indicator.section.myCreated":"Các chỉ báo tôi đã tạo","dashboard.indicator.empty":"Chưa có chỉ báo nào, vui lòng thêm hoặc tạo chỉ báo trước","dashboard.indicator.buy":"Mua chỉ báo","dashboard.indicator.action.start":"Bắt ​​đầu","dashboard.indicator.action.stop":"Dừng","dashboard.indicator.action.edit":"Chỉnh sửa","dashboard.indicator.action.delete":"Xóa","dashboard.indicator.action.backtest":"Kiểm tra lại","dashboard.indicator.status.normal":"Bình thường","dashboard.indicator.status.normalPermanent":"Bình thường (Có hiệu lực vĩnh viễn)","dashboard.indicator.status.expired":"Đã hết hạn","dashboard.indicator.expiry.permanent":"Có hiệu lực vĩnh viễn","dashboard.indicator.expiry.noExpiry":"Không có ngày hết hạn","dashboard.indicator.expiry.expired":"Đã hết hạn: {date}","dashboard.indicator.expiry.expiresOn":"Ngày hết hạn: {date}","dashboard.indicator.delete.confirmTitle":"Xác nhận xóa","dashboard.indicator.delete.confirmContent":'Bạn có chắc chắn muốn xóa chỉ báo "{name}" không? Thao tác này không thể đảo ngược.',"dashboard.indicator.delete.confirmOk":"Xóa","dashboard.indicator.delete.confirmCancel":"Hủy","dashboard.indicator.delete.success":"Xóa thành công","dashboard.indicator.delete.failed":"Xóa thất bại","dashboard.indicator.save.success":"Lưu thành công","dashboard.indicator.save.failed":"Lưu thất bại","dashboard.indicator.error.loadWatchlistFailed":"Không thể tải danh sách theo dõi","dashboard.indicator.error.chartNotReady":"Thành phần biểu đồ chưa được khởi tạo, vui lòng chọn mục tiêu và đợi biểu đồ tải xong , load","dashboard.indicator.error.chartMethodNotReady":"Phương thức của thành phần biểu đồ chưa sẵn sàng, vui lòng thử lại sau","dashboard.indicator.error.chartExecuteNotReady":"Phương thức thực thi của thành phần biểu đồ chưa sẵn sàng, vui lòng thử lại sau","dashboard.indicator.error.parseFailed":"Không thể phân tích cú pháp mã Python","dashboard.indicator.error.parseFailedCheck":"Không thể phân tích cú pháp mã Python, vui lòng kiểm tra định dạng mã","dashboard.indicator.error.addIndicatorFailed":"Không thể thêm chỉ báo","dashboard.indicator.error.runIndicatorFailed":"Không thể chạy chỉ báo","dashboard.indicator.error.pleaseLogin":"Vui lòng đăng nhập trước","dashboard.indicator.error.loadDataFailed":"Tải dữ liệu thất bại","dashboard.indicator.error.loadDataFailedDesc":"Vui lòng kiểm tra kết nối mạng của bạn","dashboard.indicator.error.pythonEngineFailed":"Không thể tải công cụ Python; chức năng chỉ báo có thể không khả dụng","dashboard.indicator.error.chartInitFailed":"Khởi tạo biểu đồ thất bại","dashboard.indicator.warning.enterCode":"Vui lòng nhập mã chỉ báo trước","dashboard.indicator.warning.pyodideLoadFailed":"Không thể tải công cụ Python","dashboard.indicator.warning.pyodideLoadFailedDesc":"Tính năng này không khả dụng trong khu vực hoặc môi trường mạng hiện tại của bạn","dashboard.indicator.warning.chartNotInitialized":"Biểu đồ chưa được khởi tạo; Công cụ vẽ không khả dụng","dashboard.indicator.success.runIndicator":"Chỉ báo đã chạy thành công","dashboard.indicator.success.clearDrawings":"Đã xóa tất cả các đường","dashboard.indicator.sma":"SMA (Trung bình động ngắn hạn)","dashboard.indicator.ema":"EMA (Trung bình động hàm mũ)","dashboard.indicator.rsi":"RSI (Chỉ số sức mạnh tương đối)","dashboard.indicator.macd":"MACD","dashboard.indicator.bb":"Dải Bollinger (...Dải Bollinger)","dashboard.indicator.atr":"ATR (Chỉ số phạm vi trung bình thực)","dashboard.indicator.cci":"CCI (Chỉ số kênh hàng hóa)","dashboard.indicator.williams":"Williams %R (Chỉ số Williams %R)","dashboard.indicator.mfi":"MFI (Chỉ số dòng tiền)","dashboard.indicator.adx":"ADX (Chỉ số hướng trung bình)","dashboard.indicator.obv":"OBV (Chỉ số khối lượng cân bằng)","dashboard.indicator.adosc":"ADOSC (Chỉ báo dao động tích lũy/phân phối)","dashboard.indicator.ad":"AD (Chỉ báo đường tích lũy/phân phối)","dashboard.indicator.kdj":"KDJ (Chỉ báo ngẫu nhiên)","dashboard.indicator.signal.buy":"MUA","dashboard.indicator.signal.sell":"BÁN","dashboard.indicator.signal.supertrendBuy":"Mua theo xu hướng siêu mạnh","dashboard.indicator.signal.supertrendSell":"Bán theo xu hướng siêu mạnh","dashboard.indicator.chart.kline":"Đường K","dashboard.indicator.chart.volume":"Khối lượng","dashboard.indicator.chart.uptrend":"Xu hướng tăng","dashboard.indicator.chart.downtrend":"Xu hướng giảm","dashboard.indicator.tooltip.time":"Thời gian","dashboard.indicator.tooltip.open":"Mở","dashboard.indicator.tooltip.close":"Đóng","dashboard.indicator.tooltip.high":"Cao","dashboard.indicator.tooltip.low":"Thấp","dashboard.indicator.tooltip.volume":"Khối lượng","dashboard.indicator.drawing.line":"Đoạn thẳng","dashboard.indicator.drawing.horizontalLine":"Đường ngang","dashboard.indicator.drawing.verticalLine":"Đường thẳng đứng","dashboard.indicator.drawing.ray":"Tia","dashboard.indicator.drawing.straightLine":"Đường thẳng","dashboard.indicator.drawing.parallelLine":"Đường song song","dashboard.indicator.drawing.priceLine":"Giá","dashboard.indicator.drawing.priceChannel":"kênh giá","dashboard.indicator.drawing.fibonacciLine":"đường Fibonacci","dashboard.indicator.drawing.measure":"Đo lường","dashboard.indicator.drawing.clearAll":"xóa tất cả các đường đã vẽ","dashboard.indicator.market.USStock":"cổ phiếu Mỹ","dashboard.indicator.market.Crypto":"tiền điện tử","dashboard.indicator.market.Forex":"ngoại hối","dashboard.indicator.market.Futures":"hợp đồng tương lai","dashboard.indicator.create":"Tạo Indicator","dashboard.indicator.editor.title":"Tạo/Chỉnh sửa chỉ báo","dashboard.indicator.editor.name":"Tên chỉ báo","dashboard.indicator.editor.nameRequired":"Vui lòng nhập tên chỉ báo","dashboard.indicator.editor.namePlaceholder":"Vui lòng nhập tên chỉ báo","dashboard.indicator.editor.description":"Mô tả chỉ báo","dashboard.indicator.editor.descriptionPlaceholder":"Vui lòng nhập mô tả chỉ báo (tùy chọn)","dashboard.indicator.editor.code":"Mã Python","dashboard.indicator.editor.codeRequired":"Vui lòng nhập mã chỉ báo","dashboard.indicator.editor.codePlaceholder":"Vui lòng nhập mã Python code","dashboard.indicator.editor.run":"Chạy","dashboard.indicator.editor.runHint":"Nhấp vào nút chạy để xem trước hiệu ứng của chỉ báo trên biểu đồ nến","dashboard.indicator.editor.guide":"Hướng dẫn phát triển","dashboard.indicator.editor.guideTitle":"Hướng dẫn phát triển chỉ báo Python","dashboard.indicator.editor.save":"Lưu","dashboard.indicator.editor.cancel":"Hủy","dashboard.indicator.editor.unnamed":"Chỉ báo chưa được đặt tên","dashboard.indicator.editor.publishToCommunity":"Chia sẻ lên cộng đồng","dashboard.indicator.editor.publishToCommunityHint":"Sau khi chia sẻ, người dùng khác có thể xem và sử dụng các chỉ số của bạn, trong cộng đồng","dashboard.indicator.editor.indicatorType":"Loại chỉ báo","dashboard.indicator.editor.indicatorTypeRequired":"Vui lòng chọn loại chỉ báo","dashboard.indicator.editor.indicatorTypePlaceholder":"Vui lòng chọn loại chỉ báo","dashboard.indicator.editor.previewImage":"Hình ảnh xem trước","dashboard.indicator.editor.uploadImage":"Tải lên hình ảnh","dashboard.indicator.editor.previewImageHint":"Kích thước đề xuất: 800x400, kích thước không vượt quá 2MB","dashboard.indicator.editor.pricing":"Giá (QDT)","dashboard.indicator.editor.pricingType.free":"Miễn phí","dashboard.indicator.editor.pricingType.permanent":"Vĩnh viễn","dashboard.indicator.editor.pricingType.monthly":"Hàng tháng","dashboard.indicator.editor.price":"Giá","dashboard.indicator.editor.priceRequired":"Vui lòng nhập giá","dashboard.indicator.editor.pricePlaceholder":"Vui lòng nhập giá","dashboard.indicator.editor.pricingHint":"Mặc dù chỉ báo miễn phí có giá 0, nền tảng sẽ thưởng cho bạn dựa trên việc sử dụng chỉ báo và tỷ lệ đánh giá tích cực (QDT)","dashboard.indicator.editor.aiGenerate":"Tạo thông minh","dashboard.indicator.editor.aiPromptPlaceholder":"Hãy cho tôi biết ý tưởng của bạn, và Tôi sẽ tạo mã chỉ báo Python cho bạn","dashboard.indicator.editor.aiGenerateBtn":"Mã được tạo bởi AI","dashboard.indicator.editor.aiPromptRequired":"Vui lòng nhập ý tưởng của bạn","dashboard.indicator.editor.aiGenerateSuccess":"Tạo mã thành công","dashboard.indicator.editor.aiGenerateError":"Tạo mã thất bại, vui lòng thử lại sau","dashboard.indicator.backtest.title":"Kiểm thử ngược chỉ báo","dashboard.indicator.backtest.config":"Tham số kiểm thử ngược","dashboard.indicator.backtest.startDate":"Ngày bắt đầu","dashboard.indicator.backtest.endDate":"Ngày kết thúc Ngày","dashboard.indicator.backtest.selectStartDate":"Chọn ngày bắt đầu","dashboard.indicator.backtest.selectEndDate":"Chọn ngày kết thúc","dashboard.indicator.backtest.startDateRequired":"Vui lòng chọn ngày bắt đầu","dashboard.indicator.backtest.endDateRequired":"Vui lòng chọn ngày kết thúc","dashboard.indicator.backtest.initialCapital":"Vốn ban đầu","dashboard.indicator.backtest.initialCapitalRequired":"Vui lòng nhập vốn ban đầu","dashboard.indicator.backtest.commission":"Tỷ lệ hoa hồng","dashboard.indicator.backtest.leverage":"Tỷ lệ đòn bẩy","dashboard.indicator.backtest.tradeDirection":"Hướng giao dịch Hướng","dashboard.indicator.backtest.longOnly":"Mua","dashboard.indicator.backtest.shortOnly":"Bán","dashboard.indicator.backtest.both":"Cả hai chiều","dashboard.indicator.backtest.run":"Bắt ​​đầu kiểm thử ngược","dashboard.indicator.backtest.rerun":"Chạy lại kiểm thử ngược","dashboard.indicator.backtest.close":"Đóng","dashboard.indicator.backtest.running":"Đang tiến hành kiểm thử ngược...","dashboard.indicator.backtest.results":"Kết quả kiểm thử ngược","dashboard.indicator.backtest.totalReturn":"Tổng lợi nhuận","dashboard.indicator.backtest.annualReturn":"Lợi nhuận hàng năm","dashboard.indicator.backtest.maxDrawdown":"Mức giảm tối đa","dashboard.indicator.backtest.sharpeRatio":"Tỷ lệ Sharpe ratio","dashboard.indicator.backtest.winRate":"Tỷ lệ thắng","dashboard.indicator.backtest.profitFactor":"Tỷ lệ lãi/lỗ","dashboard.indicator.backtest.totalTrades":"Số lượng giao dịch","dashboard.indicator.totalReturn":"Tổng lợi nhuận","dashboard.indicator.annualReturn":"Lợi nhuận hàng năm","dashboard.indicator.maxDrawdown":"Mức giảm tối đa","dashboard.indicator.sharpeRatio":"Tỷ lệ Sharpe","dashboard.indicator.winRate":"Tỷ lệ thắng","dashboard.indicator.profitFactor":"Tỷ lệ lãi/lỗ Tỷ lệ","dashboard.indicator.totalTrades":"Tổng số giao dịch","dashboard.indicator.backtest.totalCommission":"Tổng phí hoa hồng","dashboard.indicator.backtest.equityCurve":"Đường cong vốn chủ sở hữu","dashboard.indicator.backtest.strategy":"Lợi nhuận của chỉ báo","dashboard.indicator.backtest.benchmark":"Lợi nhuận chuẩn","dashboard.indicator.backtest.tradeHistory":"Lịch sử giao dịch","dashboard.indicator.backtest.tradeTime":"Thời gian","dashboard.indicator.backtest.tradeType":"Loại giao dịch","dashboard.indicator.backtest.buy":"Mua","dashboard.indicator.backtest.sell":"Bán","dashboard.indicator.backtest.liquidation":"Tài khoản đã bị thanh lý","dashboard.indicator.backtest.openLong":"Mở lệnh mua","dashboard.indicator.backtest.closeLong":"Đóng lệnh mua","dashboard.indicator.backtest.closeLongStop":"Đóng lệnh mua (Cắt lỗ)","dashboard.indicator.backtest.closeLongProfit":"Đóng lệnh mua (Chốt lời)","dashboard.indicator.backtest.addLong":"Thêm lệnh mua","dashboard.indicator.backtest.openShort":"Mở lệnh bán","dashboard.indicator.backtest.closeShort":"Đóng lệnh bán","dashboard.indicator.backtest.closeShortStop":"Đóng lệnh bán (Dừng lỗ) Lỗ","dashboard.indicator.backtest.closeShortProfit":"Đóng vị thế bán khống (chốt lời)","dashboard.indicator.backtest.addShort":"Thêm vị thế bán khống","dashboard.indicator.backtest.price":"Giá","dashboard.indicator.backtest.amount":"Số lượng","dashboard.indicator.backtest.balance":"Số dư tài khoản","dashboard.indicator.backtest.profit":"Lãi/Lỗ","dashboard.indicator.backtest.success":"Kiểm thử ngược thành công","dashboard.indicator.backtest.failed":"Kiểm thử ngược thất bại, vui lòng thử lại sau","dashboard.indicator.backtest.noIndicatorCode":"Không có mã nào để kiểm thử ngược này","dashboard.indicator.backtest.noSymbol":"Vui lòng chọn công cụ giao dịch trước","dashboard.indicator.backtest.dateRangeExceeded":"Thời gian kiểm thử ngược vượt quá giới hạn: chỉ có thể kiểm thử ngược trong khoảng thời gian {timeframe} là {maxRange}","dashboard.indicator.backtest.dateRangeExceededDays":"Backtest range exceeds limit: {timeframe} max {maxRange} ({maxDays} days)","dashboard.indicator.backtest.hint.entryPctMax":"Max entry: {maxPct}% (reserve budget for future scale-ins)","dashboard.indicator.backtest.metaLine":"Symbol: {symbol} | Market: {market} | Timeframe: {timeframe}","dashboard.indicator.backtest.savedRunId":"Backtest saved. Run ID: {id}","dashboard.indicator.backtest.prev":"Previous","dashboard.indicator.backtest.next":"Next","dashboard.indicator.backtest.steps.strategy.title":"Strategy","dashboard.indicator.backtest.steps.strategy.desc":"Position sizing & risk controls","dashboard.indicator.backtest.steps.trading.title":"Trading settings","dashboard.indicator.backtest.steps.trading.desc":"Time range, capital, fees, leverage","dashboard.indicator.backtest.steps.results.title":"Results","dashboard.indicator.backtest.steps.results.desc":"Backtest output","dashboard.indicator.backtest.panel.risk":"Risk management (SL/TP/Trailing)","dashboard.indicator.backtest.panel.scale":"Scale in / DCA (trend & mean-reversion)","dashboard.indicator.backtest.panel.reduce":"Reduce position (trend & adverse)","dashboard.indicator.backtest.panel.position":"Position sizing","dashboard.indicator.backtest.field.stopLossPct":"Stop Loss (%)","dashboard.indicator.backtest.field.takeProfitPct":"Take Profit (%)","dashboard.indicator.backtest.field.trailingEnabled":"Trailing stop / take profit","dashboard.indicator.backtest.field.trailingStopPct":"Trailing drawdown (%)","dashboard.indicator.backtest.field.trailingActivationPct":"Trailing activation (%)","dashboard.indicator.backtest.field.slippage":"Slippage (%)","dashboard.indicator.backtest.field.trendAddEnabled":"Trend-following scale-in","dashboard.indicator.backtest.field.dcaAddEnabled":"Mean-reversion DCA","dashboard.indicator.backtest.field.trendAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.dcaAddStepPct":"DCA trigger (%)","dashboard.indicator.backtest.field.trendAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.dcaAddSizePct":"DCA size (% of capital)","dashboard.indicator.backtest.field.trendAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.dcaAddMaxTimes":"Max DCA times","dashboard.indicator.backtest.field.trendReduceEnabled":"Trend reduce","dashboard.indicator.backtest.field.adverseReduceEnabled":"Adverse reduce","dashboard.indicator.backtest.field.trendReduceStepPct":"Trend trigger (%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"Adverse trigger (%)","dashboard.indicator.backtest.field.trendReduceSizePct":"Reduce size (% of position)","dashboard.indicator.backtest.field.adverseReduceSizePct":"Adverse reduce size (% of position)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"Max trend reduce times","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"Max adverse reduce times","dashboard.indicator.backtest.field.entryPct":"Entry size (% of capital)","dashboard.indicator.backtest.field.minOrderPct":"Min order size (% of capital) (optional)","dashboard.indicator.backtest.closeLongTrailing":"Close Long (Trailing)","dashboard.indicator.backtest.reduceLong":"Reduce Long","dashboard.indicator.backtest.closeShortTrailing":"Close Short (Trailing)","dashboard.indicator.backtest.reduceShort":"Reduce Short","dashboard.docs.title":"Trung tâm Tài liệu","dashboard.docs.search.placeholder":"Tìm kiếm Tài liệu...","dashboard.docs.category.all":"Tất cả","dashboard.docs.category.guide":"Hướng dẫn dành cho nhà phát triển","dashboard.docs.category.api":"Tài liệu API","dashboard.docs.category.tutorial":"Hướng dẫn","dashboard.docs.category.faq":"Câu hỏi thường gặp Câu hỏi","dashboard.docs.featured.title":"Tài liệu được đề xuất","dashboard.docs.featured.tag":"Được đề xuất","dashboard.docs.list.views":"Lượt xem","dashboard.docs.list.author":"Tác giả","dashboard.docs.list.empty":"Không có tài liệu nào","dashboard.docs.list.backToAll":"Trả về tất cả tài liệu","dashboard.docs.list.total":"Tổng số {count} tài liệu","dashboard.docs.detail.back":"Trả về danh sách tài liệu","dashboard.docs.detail.updatedAt":"Cập nhật lúc","dashboard.docs.detail.related":"Tài liệu liên quan","dashboard.docs.detail.notFound":"Không tìm thấy tài liệu tồn tại","dashboard.docs.detail.error":"Tài liệu không tồn tại hoặc đã bị xóa","dashboard.docs.search.result":"Kết quả tìm kiếm","dashboard.docs.search.keyword":"Từ khóa","community.filter.indicatorType":"Loại chỉ báo","community.filter.all":"Tất cả","community.filter.other":"Các tùy chọn khác","community.filter.pricing":"Loại giá","community.filter.allPricing":"Tất cả giá","community.filter.sortBy":"Phương thức sắp xếp","community.filter.search":"Tìm kiếm","community.filter.searchPlaceholder":"Tên chỉ báo tìm kiếm","community.indicatorType.trend":"Định hướng theo xu hướng","community.indicatorType.momentum":"Động lượng","community.indicatorType.volatility":"Biến động","community.indicatorType.volume":"Khối lượng","community.indicatorType.custom":"Tùy chỉnh","community.pricing.free":"Miễn phí","community.pricing.paid":"Trả phí","community.sort.downloads":"Lượt tải xuống","community.sort.rating":"Xếp hạng","community.sort.newest":"Phiên bản mới nhất","community.pagination.total":"Tổng số {total} chỉ báo","community.noDescription":"Không có mô tả","community.detail.type":"Loại","community.detail.pricing":"Giá cả","community.detail.rating":"Xếp hạng","community.detail.downloads":"Lượt tải xuống","community.detail.author":"Tác giả","community.detail.description":"Mô tả","community.detail.detailContent":"Mô tả chi tiết","community.detail.backtestStats":"Thống kê kiểm thử ngược","community.action.purchase":"Số liệu mua hàng","community.action.addToMyIndicators":"Thêm vào chỉ báo của tôi","community.action.favorite":"Yêu thích","community.action.unfavorite":"Bỏ yêu thích","community.action.buyNow":"Mua ngay Ngay bây giờ","community.action.renew":"Gia hạn","community.purchase.price":"Giá","community.purchase.permanent":"Vĩnh viễn","community.purchase.monthly":"Hàng tháng","community.purchase.confirmBuy":"Xác nhận mua chỉ số này ({price} QDT)?","community.purchase.confirmRenew":"Xác nhận gia hạn chỉ số này ({price} QDT/tháng)?","community.purchase.confirmFree":"Xác nhận thêm chỉ số miễn phí này?","community.purchase.confirmTitle":"Xác nhận thao tác","community.purchase.owned":"Bạn đã mua chỉ số này (có hiệu lực vĩnh viễn)","community.purchase.ownIndicator":"Đây là chỉ số bạn đã công bố","community.purchase.expired":"Gói đăng ký của bạn đã hết hạn","community.purchase.expiresOn":"Ngày hết hạn: {date}","community.tabs.detail":"Chi tiết chỉ số","community.tabs.backtest":"Dữ liệu kiểm thử ngược","community.tabs.ratings":"Xếp hạng người dùng","community.rating.myRating":"Xếp hạng của tôi","community.rating.stars":"{count} Stars","community.rating.commentPlaceholder":"Chia sẻ trải nghiệm người dùng của bạn...","community.rating.submit":"Gửi đánh giá","community.rating.modify":"Sửa đổi","community.rating.saveModify":"Lưu thay đổi","community.rating.cancel":"Hủy","community.rating.selectRating":"Vui lòng chọn đánh giá","community.rating.success":"Đánh giá thành công","community.rating.modifySuccess":"Đánh giá được sửa đổi thành công","community.rating.failed":"Đánh giá thất bại","community.rating.noRatings":"Chưa có đánh giá nào","community.backtest.note":"Dữ liệu trên là kết quả kiểm thử ngược trong quá khứ, chỉ để tham khảo và không đại diện cho hiệu suất trong tương lai","community.backtest.noData":"Không có dữ liệu kiểm thử ngược","community.backtest.uploadHint":"Tác giả chưa tải lên dữ liệu kiểm thử ngược","community.message.loadFailed":"Không thể tải danh sách chỉ báo","community.message.purchaseProcessing":"Đang xử lý yêu cầu mua hàng...","community.message.downloadSuccess":"Chỉ báo đã được thêm vào danh sách chỉ báo của tôi","community.message.favoriteSuccess":"Đã thêm vào mục yêu thích thành công","community.message.unfavoriteSuccess":"Đã xóa khỏi mục yêu thích thành công","community.message.operationSuccess":"Thao tác thành công","community.message.operationFailed":"Thao tác thất bại thất bại","community.banner.readOnly":"Chỉ xem","community.banner.loginHint":"Để đăng nhập hoặc đăng ký, vui lòng nhấp vào nút để chuyển đến trang độc lập nhằm tránh các vấn đề CSRF","community.banner.jumpButton":"Đi đến Đăng nhập/Đăng ký","dashboard.totalEquity":"Tổng vốn chủ sở hữu","dashboard.totalPnL":"Tổng lợi nhuận/thua lỗ","dashboard.aiStrategies":"Chiến lược AI","dashboard.indicatorStrategies":"Chiến lược chỉ báo","dashboard.running":"Đang chạy","dashboard.pnlHistory":"Lịch sử lợi nhuận/thua lỗ","dashboard.strategyPerformance":"Tỷ lệ lợi nhuận/thua lỗ của chiến lược","dashboard.recentTrades":"Các giao dịch gần đây","dashboard.currentPositions":"Vị thế hiện tại","dashboard.table.time":"Thời gian","dashboard.table.strategy":"Chiến lược Name","dashboard.table.symbol":"Tài sản cơ sở","dashboard.table.type":"Loại","dashboard.table.side":"Hướng","dashboard.table.size":"Số lượng","dashboard.table.entryPrice":"Giá mở cửa trung bình","dashboard.table.price":"Giá","dashboard.table.amount":"Số lượng","dashboard.table.profit":"Lợi nhuận/Thua lỗ","dashboard.pendingOrders":"Lịch sử thực hiện lệnh","dashboard.totalOrders":"Tổng {total} lệnh","dashboard.viewError":"Xem lỗi","dashboard.filled":"Đã khớp","dashboard.orderTable.time":"Thời gian tạo","dashboard.orderTable.strategy":"Chiến lược","dashboard.orderTable.symbol":"Cặp giao dịch","dashboard.orderTable.signalType":"Loại tín hiệu","dashboard.orderTable.amount":"Số lượng","dashboard.orderTable.price":"Giá khớp","dashboard.orderTable.status":"Trạng thái","dashboard.orderTable.executedAt":"Thời gian thực hiện","dashboard.signalType.openLong":"Mở Long","dashboard.signalType.openShort":"Mở Short","dashboard.signalType.closeLong":"Đóng Long","dashboard.signalType.closeShort":"Đóng Short","dashboard.signalType.addLong":"Thêm Long","dashboard.signalType.addShort":"Thêm Short","dashboard.status.pending":"Đang chờ","dashboard.status.processing":"Đang xử lý","dashboard.status.completed":"Hoàn thành","dashboard.status.failed":"Thất bại","dashboard.status.cancelled":"Đã hủy","dashboard.table.pnl":"Lợi nhuận/Thua lỗ chưa thực hiện","form.basic-form.basic.title":"Biểu mẫu cơ bản","form.basic-form.basic.description":"Các trang biểu mẫu được sử dụng để thu thập hoặc xác minh thông tin từ người dùng. Biểu mẫu cơ bản thường phổ biến trong các trường hợp có ít mục dữ liệu.","form.basic-form.title.label":"Tiêu đề","form.basic-form.title.placeholder":"Đặt tên cho mục tiêu","form.basic-form.title.required":"Vui lòng nhập tiêu đề","form.basic-form.date.label":"Ngày bắt đầu và ngày kết thúc","form.basic-form.placeholder.start":"Ngày bắt đầu","form.basic-form.placeholder.end":"Ngày kết thúc","form.basic-form.date.required":"Vui lòng chọn ngày bắt đầu và ngày kết thúc","form.basic-form.goal.label":"Mô tả mục tiêu","form.basic-form.goal.placeholder":"Vui lòng nhập mục tiêu công việc theo từng giai đoạn","form.basic-form.goal.required":"Vui lòng nhập mục tiêu Mô tả","form.basic-form.standard.label":"Số liệu","form.basic-form.standard.placeholder":"Vui lòng nhập số liệu","form.basic-form.standard.required":"Vui lòng nhập số liệu","form.basic-form.client.label":"Khách hàng","form.basic-form.client.required":"Vui lòng mô tả khách hàng bạn đang phục vụ","form.basic-form.label.tooltip":"Đối tượng mục tiêu","form.basic-form.client.placeholder":"Vui lòng mô tả khách hàng bạn đang phục vụ; khách hàng nội bộ có thể trực tiếp là @tên/ID nhân viên","form.basic-form.invites.label":"Người mời","form.basic-form.invites.placeholder":"Vui lòng trực tiếp là @tên/ID nhân viên; Có thể mời tối đa 5 người","form.basic-form.weight.label":"Trọng lượng","form.basic-form.weight.placeholder":"Vui lòng nhập","form.basic-form.public.label":"Mục tiêu công khai","form.basic-form.label.help":"Khách hàng và người đánh giá được chia sẻ theo mặc định","form.basic-form.radio.public":"Công khai","form.basic-form.radio.partially-public":"Công khai một phần","form.basic-form.radio.private":"Không công khai","form.basic-form.publicUsers.placeholder":"Công khai cho","form.basic-form.option.A":"Đồng nghiệp 1","form.basic-form.option.B":"Đồng nghiệp 2","form.basic-form.option.C":"Đồng nghiệp số Ba","form.basic-form.email.required":"Vui lòng nhập địa chỉ email của bạn!","form.basic-form.email.wrong-format":"Định dạng địa chỉ email không chính xác!","form.basic-form.userName.required":"Vui lòng nhập tên người dùng của bạn!","form.basic-form.password.required":"Vui lòng nhập mật khẩu của bạn!","form.basic-form.password.twice":"Hai mật khẩu không khớp!","form.basic-form.strength.msg":"Vui lòng nhập ít nhất 6 ký tự. Vui lòng không sử dụng mật khẩu dễ đoán.","form.basic-form.strength.strong":"Độ mạnh: Mạnh","form.basic-form.strength.medium":"Độ mạnh: Trung bình","form.basic-form.strength.short":"Độ mạnh: Quá ngắn","form.basic-form.confirm-password.required":"Vui lòng xác nhận mật khẩu!","form.basic-form.phone-number.required":"Vui lòng nhập số điện thoại của bạn!","form.basic-form.phone-number.wrong-format":"Định dạng số điện thoại không chính xác!","form.basic-form.verification-code.required":"Vui lòng nhập mã xác minh!","form.basic-form.form.get-captcha":"Lấy mã xác minh mã","form.basic-form.captcha.second":"giây","form.basic-form.form.optional":"(Tùy chọn)","form.basic-form.form.submit":"Gửi","form.basic-form.form.save":"Lưu","form.basic-form.email.placeholder":"Email","form.basic-form.password.placeholder":"Mật khẩu phải có ít nhất 6 ký tự, phân biệt chữ hoa chữ thường","form.basic-form.confirm-password.placeholder":"Xác nhận mật khẩu","form.basic-form.phone-number.placeholder":"Số điện thoại","form.basic-form.verification-code.placeholder":"Mã xác minh","result.success.title":"Đã gửi Thành công","result.success.description":'Trang kết quả nộp bài được sử dụng để cung cấp phản hồi về kết quả xử lý của một loạt các tác vụ vận hành. Nếu chỉ là một thao tác đơn giản, thông báo Tin nhắn toàn cục là đủ. Vùng văn bản này có thể hiển thị các giải thích bổ sung đơn giản. Nếu cần hiển thị nội dung như một "tài liệu", vùng màu xám bên dưới có thể hiển thị nội dung phức tạp hơn.',"result.success.operate-title":"Tên dự án","result.success.operate-id":"ID dự án","result.success.principal":"Người phụ trách","result.success.operate-time":"Thời gian hiệu quả","result.success.step1-title":"Tạo dự án","result.success.step1-operator":"Qu Lili","result.success.step2-title":"Đánh giá ban đầu của phòng ban","result.success.step2-operator":"Zhou Maomao","result.success.step2-extra":"Theo dõi","result.success.step3-title":"Đánh giá tài chính","result.success.step4-title":"Hoàn thành","result.success.btn-return":"Quay lại danh sách","result.success.btn-project":"Xem dự án","result.success.btn-print":"In","result.fail.error.title":"Gửi bài không thành công","result.fail.error.description":"Vui lòng kiểm tra và chỉnh sửa thông tin sau trước khi gửi lại.","result.fail.error.hint-title":"Nội dung bạn đã gửi có các lỗi sau:","result.fail.error.hint-text1":"Tài khoản của bạn đã bị đóng băng","result.fail.error.hint-btn1":"Mở khóa ngay lập tức","result.fail.error.hint-text2":"Tài khoản của bạn chưa đủ điều kiện để đăng ký","result.fail.error.hint-btn2":"Nâng cấp ngay lập tức","result.fail.error.btn-text":"Quay lại chỉnh sửa","account.settings.menuMap.custom":"Cá nhân hóa","account.settings.menuMap.binding":"Liên kết tài khoản","account.settings.basic.avatar":"Avatar","account.settings.basic.change-avatar":"Thay đổi ảnh đại diện","account.settings.basic.email":"Địa chỉ email","account.settings.basic.email-message":"Vui lòng nhập địa chỉ email của bạn!","account.settings.basic.nickname":"Biệt danh","account.settings.basic.nickname-message":"Vui lòng nhập biệt danh của bạn!","account.settings.basic.profile":"Hồ sơ","account.settings.basic.profile-message":"Vui lòng nhập thông tin hồ sơ của bạn!","account.settings.basic.profile-placeholder":"Hồ sơ","account.settings.basic.country":"Quốc gia/Vùng","account.settings.basic.country-message":"Vui lòng nhập quốc gia của bạn hoặc khu vực!","account.settings.basic.geographic":"Tỉnh và Thành phố","account.settings.basic.geographic-message":"Vui lòng nhập tỉnh và thành phố của bạn!","account.settings.basic.address":"Địa chỉ đường phố","account.settings.basic.address-message":"Vui lòng nhập địa chỉ đường phố của bạn!","account.settings.basic.phone":"Số điện thoại","account.settings.basic.phone-message":"Vui lòng nhập số điện thoại của bạn!","account.settings.basic.update":"Cập nhật thông tin cơ bản","account.settings.basic.update.success":"Đã cập nhật thông tin cơ bản thành công","account.settings.security.strong":"Mạnh","account.settings.security.medium":"Trung bình","account.settings.security.weak":"Yếu","account.settings.security.password":"Mật khẩu tài khoản","account.settings.security.password-description":"Độ mạnh mật khẩu hiện tại:","account.settings.security.phone":"Số điện thoại bảo mật","account.settings.security.phone-description":"Số điện thoại liên kết:","account.settings.security.question":"Câu hỏi bảo mật","account.settings.security.question-description":"Chưa thiết lập câu hỏi bảo mật nào. Câu hỏi bảo mật có thể bảo vệ hiệu quả tính bảo mật của tài khoản","account.settings.security.email":"Email liên kết","account.settings.security.email-description":"Số email liên kết:","account.settings.security.mfa":"Thiết bị MFA","account.settings.security.mfa-description":"Thiết bị MFA chưa liên kết. Việc liên kết sẽ cho phép xác nhận thứ cấp","account.settings.security.modify":"Sửa đổi","account.settings.security.set":"Cài đặt","account.settings.security.bind":"Liên kết","account.settings.binding.taobao":"Liên kết Taobao","account.settings.binding.taobao-description":"Hiện chưa được liên kết với tài khoản Taobao","account.settings.binding.alipay":"Liên kết Alipay","account.settings.binding.alipay-description":"Hiện chưa được liên kết với tài khoản Alipay","account.settings.binding.dingding":"Liên kết DingTalk","account.settings.binding.dingding-description":"Hiện chưa được liên kết với tài khoản DingTalk","account.settings.binding.bind":"Liên kết","account.settings.notification.password":"Mật khẩu tài khoản","account.settings.notification.password-description":"Tin nhắn từ người dùng khác sẽ được gửi qua thông báo trong ứng dụng","account.settings.notification.messages":"Tin nhắn hệ thống","account.settings.notification.messages-description":"Tin nhắn hệ thống sẽ được gửi qua thông báo trong ứng dụng","account.settings.notification.todo":"Việc cần làm","account.settings.notification.todo-description":"Việc cần làm sẽ được gửi qua thông báo trong ứng dụng","account.settings.settings.open":"Bật","account.settings.settings.close":"Tắt","trading-assistant.title":"Trợ lý giao dịch","trading-assistant.strategyList":"Chiến lược Danh sách","trading-assistant.createStrategy":"Tạo chiến lược","trading-assistant.noStrategy":"Không có chiến lược nào","trading-assistant.selectStrategy":"Chọn một chiến lược từ bên trái để xem chi tiết","trading-assistant.startStrategy":"Bắt ​​đầu chiến lược","trading-assistant.stopStrategy":"Dừng chiến lược","trading-assistant.editStrategy":"Chỉnh sửa chiến lược","trading-assistant.deleteStrategy":"Xóa chiến lược","trading-assistant.status.running":"Đang chạy","trading-assistant.status.stopped":"Đã dừng","trading-assistant.status.error":"Lỗi","trading-assistant.strategyType.IndicatorStrategy":"Chỉ báo kỹ thuật Chiến lược","trading-assistant.strategyType.PromptBasedStrategy":"Chiến lược dựa trên lời nhắc","trading-assistant.strategyType.GridStrategy":"Chiến lược lưới","trading-assistant.tabs.tradingRecords":"Hồ sơ giao dịch","trading-assistant.tabs.positions":"Vị thế","trading-assistant.tabs.equityCurve":"Đường cong vốn chủ sở hữu","trading-assistant.form.step1":"Chọn chỉ báo","trading-assistant.form.step2":"Cấu hình sàn giao dịch","trading-assistant.form.step3":"Tham số chiến lược","trading-assistant.form.indicator":"Chọn chỉ báo","trading-assistant.form.indicatorHint":"Chỉ chọn các chỉ báo kỹ thuật bạn muốn đã mua hoặc tạo","trading-assistant.form.qdtCostHints":"Việc sử dụng chiến lược này sẽ tiêu tốn QDT; vui lòng đảm bảo tài khoản của bạn có đủ số dư QDT","trading-assistant.form.indicatorDescription":"Mô tả chỉ báo","trading-assistant.form.noDescription":"Không có mô tả","trading-assistant.form.exchange":"Chọn sàn giao dịch","trading-assistant.form.apiKey":"Khóa API","trading-assistant.form.secretKey":"Khóa bí mật","trading-assistant.form.passphrase":"Mật khẩu","trading-assistant.form.testConnection":"Kiểm tra kết nối","trading-assistant.form.strategyName":"Tên chiến lược","trading-assistant.form.symbol":"Cặp giao dịch","trading-assistant.form.symbolHint":"Hiện tại chỉ hỗ trợ các cặp giao dịch tiền điện tử","trading-assistant.form.initialCapital":"Vốn ban đầu","trading-assistant.form.marketType":"Loại thị trường","trading-assistant.form.marketTypeFutures":"Hợp đồng tương lai","trading-assistant.form.marketTypeSpot":"Giao dịch giao ngay","trading-assistant.form.marketTypeHint":"Hợp đồng hỗ trợ giao dịch hai chiều và đòn bẩy; Giao dịch giao ngay chỉ hỗ trợ vị thế mua với đòn bẩy cố định là 1x","trading-assistant.form.leverage":"Tỷ lệ đòn bẩy","trading-assistant.form.leverageHint":"Hợp đồng: 1-125x, Giao ngay: Cố định 1x","trading-assistant.form.spotLeverageFixed":"Đòn bẩy giao dịch giao ngay được cố định ở mức 1x","trading-assistant.form.spotOnlyLongHint":"Giao dịch giao ngay chỉ hỗ trợ vị thế mua","trading-assistant.form.tradeDirection":"Hướng giao dịch","trading-assistant.form.tradeDirectionLong":"Chỉ mua","trading-assistant.form.tradeDirectionShort":"Chỉ bán","trading-assistant.form.tradeDirectionBoth":"Hai chiều giao dịch","trading-assistant.form.timeframe":"Khung thời gian","trading-assistant.form.klinePeriod":"Chu kỳ K-Line","trading-assistant.form.timeframe1m":"1 phút","trading-assistant.form.timeframe5m":"5 phút","trading-assistant.form.timeframe15m":"15 phút","trading-assistant.form.timeframe30m":"30 phút","trading-assistant.form.timeframe1H":"1 giờ","trading-assistant.form.timeframe4H":"4 giờ","trading-assistant.form.timeframe1D":"1 ngày","trading-assistant.form.selectStrategyType":"Chọn loại chiến lược","trading-assistant.form.indicatorStrategy":"Chiến lược chỉ báo","trading-assistant.form.indicatorStrategyDesc":"Chiến lược giao dịch tự động dựa trên chỉ báo kỹ thuật","trading-assistant.form.aiStrategy":"Chiến lược AI","trading-assistant.form.aiStrategyDesc":"Chiến lược giao dịch tự động dựa trên quyết định thông minh AI","trading-assistant.form.enableAiFilter":"Bật bộ lọc quyết định thông minh AI","trading-assistant.form.enableAiFilterHint":"Khi bật, tín hiệu chỉ báo sẽ được lọc bởi AI để cải thiện chất lượng giao dịch","trading-assistant.form.aiFilterPrompt":"Lời nhắc tùy chỉnh","trading-assistant.form.aiFilterPromptHint":"Cung cấp hướng dẫn tùy chỉnh cho bộ lọc AI, để trống để sử dụng mặc định hệ thống","trading-assistant.validation.strategyTypeRequired":"Vui lòng chọn loại chiến lược","trading-assistant.form.advancedSettings":"Cài đặt nâng cao","trading-assistant.form.orderMode":"Chế độ đặt lệnh","trading-assistant.form.orderModeMaker":"Maker","trading-assistant.form.orderModeTaker":"Giá thị trường","trading-assistant.form.orderModeHint":"Chế độ Maker sử dụng lệnh giới hạn, phí thấp hơn; chế độ Market thực hiện ngay lập tức, phí cao hơn","trading-assistant.form.makerWaitSec":"Thời gian chờ của Maker (giây)","trading-assistant.form.makerWaitSecHint":"Thời gian chờ sau khi đặt lệnh; ","trading-assistant.form.makerRetries":"Số lần thử lại cho lệnh maker","trading-assistant.form.makerRetriesHint":"Số lần thử lại tối đa nếu lệnh maker không được khớp","trading-assistant.form.fallbackToMarket":"Hạ cấp lệnh maker thất bại xuống giá thị trường","trading-assistant.form.fallbackToMarketHint":"Có nên hạ cấp các lệnh mở/đóng đang chờ xử lý thành lệnh thị trường để đảm bảo thực hiện khi chúng không được khớp hay không","trading-assistant.form.marginMode":"Chế độ ký quỹ","trading-assistant.form.marginModeCross":"Ký quỹ chéo","trading-assistant.form.marginModeIsolated":"Ký quỹ riêng biệt Ký quỹ","trading-assistant.form.stopLossPct":"Tỷ lệ cắt lỗ (%)","trading-assistant.form.stopLossPctHint":"Thiết lập tỷ lệ cắt lỗ; 0 cho biết lệnh dừng lỗ không được bật","trading-assistant.form.takeProfitPct":"Tỷ lệ chốt lời (%)","trading-assistant.form.takeProfitPctHint":"Thiết lập tỷ lệ chốt lời, 0 cho biết lệnh chốt lời không được bật","trading-assistant.form.signalMode":"Chế độ tín hiệu","trading-assistant.form.signalModeConfirmed":"Chế độ xác nhận","trading-assistant.form.signalModeAggressive":"Chế độ giao dịch tích cực","trading-assistant.form.signalModeHint":"Chế độ xác nhận: Chỉ kiểm tra các nến đã hoàn thành; Chế độ giao dịch tích cực: Kiểm tra cả việc hình thành nến","trading-assistant.form.cancel":"Hủy","trading-assistant.form.prev":"Bước trước","trading-assistant.form.next":"Bước tiếp theo","trading-assistant.form.confirmCreate":"Xác nhận tạo","trading-assistant.form.confirmEdit":"Xác nhận chỉnh sửa","trading-assistant.messages.createSuccess":"Tạo chiến lược thành công","trading-assistant.messages.createFailed":"Tạo chiến lược thất bại","trading-assistant.messages.updateSuccess":"Cập nhật chiến lược thành công","trading-assistant.messages.updateFailed":"Cập nhật chiến lược thất bại","trading-assistant.messages.deleteSuccess":"Xóa chiến lược thành công","trading-assistant.messages.deleteFailed":"Xóa chiến lược thất bại","trading-assistant.messages.startSuccess":"Khởi động chiến lược thành công","trading-assistant.messages.startFailed":"Khởi động chiến lược thất bại","trading-assistant.messages.stopSuccess":"Chính sách đã dừng thành công","trading-assistant.messages.stopFailed":"Dừng chính sách thất bại","trading-assistant.messages.loadFailed":"Không thể tải danh sách chính sách","trading-assistant.messages.runningWarning":"Chính sách đang chạy, vui lòng dừng chính sách trước khi sửa đổi","trading-assistant.messages.deleteConfirmWithName":'Bạn có chắc chắn muốn xóa chính sách "{name}" không? Thao tác này không thể đảo ngược.',"trading-assistant.messages.deleteConfirm":"Bạn có chắc chắn muốn xóa chính sách này không? Thao tác này không thể đảo ngược.","trading-assistant.messages.loadTradesFailed":"Không thể truy xuất hồ sơ giao dịch","trading-assistant.messages.loadPositionsFailed":"Không thể truy xuất hồ sơ vị thế","trading-assistant.messages.loadEquityFailed":"Không thể truy xuất đường cong vốn chủ sở hữu","trading-assistant.messages.loadIndicatorsFailed":"Không thể tải danh sách chỉ báo, vui lòng thử lại sau","trading-assistant.messages.spotLimitations":"Giao dịch giao ngay đã được tự động thiết lập chỉ mua, đòn bẩy 1x","trading-assistant.messages.autoFillApiConfig":"Cấu hình API lịch sử cho sàn giao dịch này đã được tự động điền","trading-assistant.placeholders.selectIndicator":"Vui lòng chọn một chỉ báo indicator","trading-assistant.placeholders.selectExchange":"Vui lòng chọn một sàn giao dịch","trading-assistant.placeholders.inputApiKey":"Vui lòng nhập Khóa API","trading-assistant.placeholders.inputSecretKey":"Vui lòng nhập Khóa bí mật","trading-assistant.placeholders.inputPassphrase":"Vui lòng nhập Mật khẩu","trading-assistant.placeholders.inputStrategyName":"Vui lòng nhập tên chiến lược","trading-assistant.placeholders.selectSymbol":"Vui lòng chọn một cặp giao dịch","trading-assistant.placeholders.selectTimeframe":"Vui lòng chọn một khung thời gian","trading-assistant.placeholders.selectKlinePeriod":"Vui lòng chọn chu kỳ K-Line","trading-assistant.placeholders.inputAiFilterPrompt":"Vui lòng nhập lời nhắc tùy chỉnh (tùy chọn)","trading-assistant.validation.indicatorRequired":"Vui lòng chọn một chỉ báo","trading-assistant.validation.exchangeRequired":"Vui lòng chọn một sàn giao dịch","trading-assistant.validation.apiKeyRequired":"Vui lòng nhập Khóa API","trading-assistant.validation.secretKeyRequired":"Vui lòng nhập Khóa bí mật","trading-assistant.validation.passphraseRequired":"Vui lòng nhập Mật khẩu","trading-assistant.validation.exchangeConfigIncomplete":"Vui lòng điền đầy đủ thông tin cấu hình sàn giao dịch","trading-assistant.validation.testConnectionRequired":'Vui lòng nhấp vào nút "Kiểm tra kết nối" và đảm bảo kết nối thành công',"trading-assistant.validation.testConnectionFailed":"Kiểm tra kết nối thất bại, vui lòng kiểm tra cấu hình và thử lại","trading-assistant.validation.credentialRequired":"Vui lòng thêm và kiểm tra thông tin đăng nhập sàn giao dịch trong Trung tâm Cá nhân trước","trading-assistant.validation.strategyNameRequired":"Vui lòng nhập tên chiến lược","trading-assistant.validation.symbolRequired":"Vui lòng chọn một cặp giao dịch ...apiKeyRequired","trading-assistant.apiKeyRequired":"Vui lòng Nhập khóa API","trading-assistant.validation.initialCapitalRequired":"Vui lòng nhập vốn ban đầu","trading-assistant.validation.leverageRequired":"Vui lòng nhập tỷ lệ đòn bẩy","trading-assistant.table.time":"Thời gian","trading-assistant.table.type":"Loại","trading-assistant.table.price":"Giá","trading-assistant.table.amount":"Số tiền","trading-assistant.table.value":"Số tiền","trading-assistant.table.commission":"Phí hoa hồng","trading-assistant.table.symbol":"Cặp giao dịch","trading-assistant.table.side":"Hướng","trading-assistant.table.size":"Vị thế kích thước","trading-assistant.table.entryPrice":"Giá vào lệnh","trading-assistant.table.currentPrice":"Giá hiện tại","trading-assistant.table.unrealizedPnl":"Lợi nhuận/Thua lỗ chưa thực hiện","trading-assistant.table.pnlPercent":"Tỷ lệ lợi nhuận/thua lỗ","trading-assistant.table.buy":"Mua","trading-assistant.table.sell":"Bán","trading-assistant.table.long":"Mua","trading-assistant.table.short":"Bán","trading-assistant.table.noPositions":"Không có vị thế","trading-assistant.detail.title":"Chi tiết chiến lược","trading-assistant.detail.strategyName":"Chiến lược Tên","trading-assistant.detail.strategyType":"Loại chiến lược","trading-assistant.detail.status":"Trạng thái","trading-assistant.detail.tradingMode":"Chế độ giao dịch","trading-assistant.detail.exchange":"Sàn giao dịch","trading-assistant.detail.initialCapital":"Vốn ban đầu","trading-assistant.detail.totalInvestment":"Tổng vốn đầu tư","trading-assistant.detail.currentEquity":"Vốn chủ sở hữu hiện tại","trading-assistant.detail.totalPnl":"Tổng lợi nhuận/thua lỗ","trading-assistant.detail.indicatorName":"Tên chỉ báo","trading-assistant.detail.maxLeverage":"Đòn bẩy tối đa Đòn bẩy","trading-assistant.detail.decideInterval":"Khoảng thời gian quyết định","trading-assistant.detail.symbols":"Công cụ giao dịch","trading-assistant.detail.createdAt":"Thời gian tạo","trading-assistant.detail.updatedAt":"Thời gian cập nhật","trading-assistant.detail.llmConfig":"Cấu hình mô hình AI","trading-assistant.detail.exchangeConfig":"Cấu hình sàn giao dịch","trading-assistant.detail.provider":"Nhà cung cấp","trading-assistant.detail.modelId":"ID mô hình","trading-assistant.detail.close":"Đóng","trading-assistant.detail.loadFailed":"Không thể truy xuất chiến lược chi tiết","trading-assistant.equity.noData":"Không có dữ liệu giá trị tài sản ròng","trading-assistant.equity.equity":"Giá trị tài sản ròng","trading-assistant.exchange.tradingMode":"Chế độ giao dịch","trading-assistant.exchange.virtual":"Giao dịch thử nghiệm","trading-assistant.exchange.live":"Giao dịch trực tiếp","trading-assistant.exchange.selectExchange":"Chọn sàn giao dịch","trading-assistant.exchange.walletAddress":"Địa chỉ ví","trading-assistant.exchange.walletAddressPlaceholder":"Vui lòng nhập địa chỉ ví của bạn (bắt đầu bằng 0x)","trading-assistant.exchange.privateKey":"Khóa riêng tư","trading-assistant.exchange.privateKeyPlaceholder":"Vui lòng nhập khóa riêng tư của bạn (64 ký tự)","trading-assistant.exchange.testConnection":"Kiểm tra kết nối","trading-assistant.exchange.connectionSuccess":"Kết nối thành công","trading-assistant.exchange.connectionFailed":"Kết nối thất bại","trading-assistant.exchange.testFailed":"Kiểm tra kết nối thất bại","trading-assistant.exchange.fillComplete":"Vui lòng điền đầy đủ thông tin cấu hình sàn giao dịch","trading-assistant.strategyTypeOptions.ai":"Chiến lược dựa trên AI","trading-assistant.strategyTypeOptions.indicator":"Chiến lược chỉ báo kỹ thuật","trading-assistant.strategyTypeOptions.aiDeveloping":"Chức năng chiến lược dựa trên AI đang được phát triển, hãy theo dõi","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"Chức năng chiến lược dựa trên AI đang được phát triển","trading-assistant.indicatorType.trend":"Xu hướng","trading-assistant.indicatorType.momentum":"Động lượng","trading-assistant.indicatorType.volatility":"Biến động","trading-assistant.indicatorType.volume":"Khối lượng","trading-assistant.indicatorType.custom":"Tùy chỉnh","trading-assistant.exchangeNames":{okx:"OKX",binance:"Binance",hyperliquid:"Hyperliquid",blockchaincom:"Blockchain.com",coinbaseexchange:"Coinbase",gate:"Gate.io",mexc:"MEXC",kraken:"Kraken",bitfinex:"Bitfinex",bybit:"Bybit",kucoin:"KuCoin",huobi:"Huobi",bitget:"Bitget",bitmex:"BitMEX","gạch từ":"Dựa trên",phemex:"Phemex",bitmart:"BitMart",bitstamp:"Bitstamp",bittrex:"Bittrex",poloniex:"Poloniex","song tử":"song tử","tiền điện tử":"Crypto.com",bitflyer:"bitFlyer",upbit:"Upbit",bithumb:"Bithumb",coinone:"Coinone",zb:"ZB","ngân hàng":"LBank",bibox:"Bibox",bigone:"BigONE",bitrue:"Bitrue",coinex:"CoinEx",digifinex:"DigiFinex",ftx:"FTX",ftxus:"FTX US",binanceus:"Binance US",binancecoinm:"Binance COIN-M",binanceusdm:"Binance USDⓈ-M",deepcoin:"Deepcoin"},"ai-trading-assistant.title":"Trợ lý giao dịch AI","ai-trading-assistant.strategyList":"Danh sách chiến lược","ai-trading-assistant.createStrategy":"Tạo chiến lược","ai-trading-assistant.noStrategy":"Không có chiến lược Có sẵn","ai-trading-assistant.selectStrategy":"Chọn chiến lược từ bên trái để xem chi tiết","ai-trading-assistant.startStrategy":"Bắt ​​đầu chiến lược","ai-trading-assistant.stopStrategy":"Dừng chiến lược","ai-trading-assistant.editStrategy":"Chỉnh sửa chiến lược","ai-trading-assistant.deleteStrategy":"Xóa chiến lược","ai-trading-assistant.status.running":"Đang chạy","ai-trading-assistant.status.stopped":"Đã dừng","ai-trading-assistant.status.error":"Lỗi","ai-trading-assistant.tabs.tradingRecords":"Hồ sơ giao dịch","ai-trading-assistant.tabs.positions":"Vị thế","ai-trading-assistant.tabs.aiDecisions":"Bản ghi quyết định của AI","ai-trading-assistant.tabs.equityCurve":"Đường cong vốn chủ sở hữu","ai-trading-assistant.form.createTitle":"Tạo chiến lược giao dịch AI","ai-trading-assistant.form.editTitle":"Chỉnh sửa chiến lược giao dịch AI","ai-trading-assistant.form.strategyName":"Tên chiến lược","ai-trading-assistant.form.modelId":"Mô hình AI","ai-trading-assistant.form.modelIdHint":"Sử dụng dịch vụ OpenRouter của hệ thống; Không cần cấu hình khóa API","ai-trading-assistant.form.decideInterval":"Khoảng thời gian quyết định","ai-trading-assistant.form.decideInterval5m":"5 phút","ai-trading-assistant.form.decideInterval10m":"10 phút","ai-trading-assistant.form.decideInterval30m":"30 phút","ai-trading-assistant.form.decideInterval1h":"1 giờ","ai-trading-assistant.form.decideInterval4h":"4 giờ","ai-trading-assistant.form.decideInterval1d":"1 ngày","ai-trading-assistant.form.decideInterval1w":"1 tuần","ai-trading-assistant.form.decideIntervalHint":"Khoảng thời gian cho AI để đưa ra quyết định","ai-trading-assistant.form.runPeriod":"Thời gian chạy","ai-trading-assistant.form.runPeriodHint":"Thời gian bắt đầu và kết thúc của chiến lược","ai-trading-assistant.form.startDate":"Ngày bắt đầu","ai-trading-assistant.form.endDate":"Ngày kết thúc","ai-trading-assistant.form.qdtCostTitle":"Mô tả chi phí QDT","ai-trading-assistant.form.qdtCostHint":"Mỗi quyết định của AI sẽ có giá {cost} QDT. Vui lòng đảm bảo tài khoản của bạn có đủ số dư QDT. Chi phí sẽ được trừ theo thời gian thực cho mỗi quyết định trong quá trình chạy chiến lược.","ai-trading-assistant.form.apiKey":"Khóa API","ai-trading-assistant.form.exchange":"Chọn sàn giao dịch","ai-trading-assistant.form.secretKey":"Khóa bí mật","ai-trading-assistant.form.passphrase":"Mật khẩu","ai-trading-assistant.form.testConnection":"Kiểm tra kết nối","ai-trading-assistant.form.symbol":"Cặp giao dịch","ai-trading-assistant.form.symbolHint":"Chọn cặp giao dịch","ai-trading-assistant.form.initialCapital":"Số vốn đầu tư (Ký quỹ)","ai-trading-assistant.form.leverage":"Tỷ lệ đòn bẩy","ai-trading-assistant.form.timeframe":"Khung thời gian","ai-trading-assistant.form.timeframe1m":"1 phút","ai-trading-assistant.form.timeframe5m":"5 phút","ai-trading-assistant.form.timeframe15m":"15 phút","ai-trading-assistant.form.timeframe30m":"30 phút","ai-trading-assistant.form.timeframe1H":"1 giờ","ai-trading-assistant.form.timeframe4H":"4 giờ","ai-trading-assistant.form.timeframe1D":"1 ngày","ai-trading-assistant.form.marketType":"Loại thị trường","ai-trading-assistant.form.marketTypeFutures":"Hợp đồng","ai-trading-assistant.form.marketTypeSpot":"Giao dịch tức thời","ai-trading-assistant.form.totalPnl":"Tổng lợi nhuận/thua lỗ","ai-trading-assistant.form.customPrompt":"Lời nhắc tùy chỉnh","ai-trading-assistant.form.customPromptHint":"Tùy chọn, để tùy chỉnh chiến lược giao dịch và logic quyết định của AI","ai-trading-assistant.form.cancel":"Hủy","ai-trading-assistant.form.prev":"Bước trước","ai-trading-assistant.form.next":"Bước tiếp theo","ai-trading-assistant.form.confirmCreate":"Xác nhận tạo","ai-trading-assistant.form.confirmEdit":"Xác nhận chỉnh sửa","ai-trading-assistant.messages.createSuccess":"Tạo chiến lược thành công","ai-trading-assistant.messages.createFailed":"Tạo chiến lược thất bại","ai-trading-assistant.messages.updateSuccess":"Cập nhật chiến lược thành công","ai-trading-assistant.messages.updateFailed":"Cập nhật chiến lược thất bại","ai-trading-assistant.messages.deleteSuccess":"Xóa chiến lược thành công","ai-trading-assistant.messages.deleteFailed":"Xóa chiến lược thất bại","ai-trading-assistant.messages.startSuccess":"Khởi động chiến lược thành công","ai-trading-assistant.messages.startFailed":"Không thể khởi động chính sách","ai-trading-assistant.messages.stopSuccess":"Đã dừng thành công chính sách","ai-trading-assistant.messages.stopFailed":"Không thể dừng chính sách","ai-trading-assistant.messages.loadFailed":"Không thể truy xuất danh sách chính sách","ai-trading-assistant.messages.loadDecisionsFailed":"Không thể truy xuất bản ghi quyết định của AI","ai-trading-assistant.messages.deleteConfirm":"Bạn có chắc chắn muốn xóa chính sách này không? Thao tác này không thể đảo ngược.","ai-trading-assistant.placeholders.inputStrategyName":"Vui lòng nhập tên chiến lược","ai-trading-assistant.placeholders.selectModelId":"Vui lòng chọn mô hình AI","ai-trading-assistant.placeholders.selectDecideInterval":"Vui lòng chọn khoảng thời gian quyết định","ai-trading-assistant.placeholders.startTime":"Thời gian bắt đầu","ai-trading-assistant.placeholders.endTime":"Thời gian kết thúc","ai-trading-assistant.placeholders.inputApiKey":"Vui lòng nhập khóa API","ai-trading-assistant.placeholders.selectExchange":"Vui lòng chọn sàn giao dịch","ai-trading-assistant.placeholders.inputSecretKey":"Vui lòng nhập mã bí mật Key","ai-trading-assistant.placeholders.inputPassphrase":"Vui lòng nhập mật khẩu của bạn","ai-trading-assistant.placeholders.selectSymbol":"Vui lòng chọn một cặp giao dịch, ví dụ như BTC/USDT","ai-trading-assistant.placeholders.selectTimeframe":"Vui lòng chọn khung thời gian","ai-trading-assistant.placeholders.inputCustomPrompt":"Vui lòng nhập lời nhắc tùy chỉnh (tùy chọn)","ai-trading-assistant.validation.strategyNameRequired":"Vui lòng nhập tên chiến lược","ai-trading-assistant.validation.modelIdRequired":"Vui lòng chọn một mô hình AI","ai-trading-assistant.validation.runPeriodRequired":"Vui lòng chọn khoảng thời gian chạy","ai-trading-assistant.validation.apiKeyRequired":"Vui lòng nhập API Key","ai-trading-assistant.validation.exchangeRequired":"Vui lòng chọn sàn giao dịch","ai-trading-assistant.validation.secretKeyRequired":"Vui lòng nhập Khóa bí mật","ai-trading-assistant.validation.symbolRequired":"Vui lòng chọn cặp giao dịch","ai-trading-assistant.validation.initialCapitalRequired":"Vui lòng nhập số vốn đầu tư","ai-trading-assistant.table.time":"Thời gian","ai-trading-assistant.table.type":"Loại","ai-trading-assistant.table.price":"Giá","ai-trading-assistant.table.amount":"Số lượng","ai-trading-assistant.table.value":"Giá trị","ai-trading-assistant.table.symbol":"Cặp giao dịch","ai-trading-assistant.table.side":"Hướng","ai-trading-assistant.table.size":"Số lượng vị thế","ai-trading-assistant.table.entryPrice":"Giá vào lệnh","ai-trading-assistant.table.currentPrice":"Giá hiện tại","ai-trading-assistant.table.unrealizedPnl":"Lợi nhuận/Thua lỗ chưa thực hiện","ai-trading-assistant.table.profit":"Lợi nhuận/Thua lỗ","ai-trading-assistant.table.openLong":"Mở lệnh mua","ai-trading-assistant.table.closeLong":"Đóng lệnh Long","ai-trading-assistant.table.openShort":"Mở lệnh bán","ai-trading-assistant.table.closeShort":"Đóng lệnh bán","ai-trading-assistant.table.addLong":"Thêm lệnh mua","ai-trading-assistant.table.addShort":"Thêm lệnh bán","ai-trading-assistant.table.closeShortProfit":"Đóng lệnh bán có lãi","ai-trading-assistant.table.closeShortStop":"Đóng lệnh cắt lỗ lệnh bán","ai-trading-assistant.table.closeLongProfit":"Đóng lệnh mua có lãi","ai-trading-assistant.table.closeLongStop":"Đóng lệnh cắt lỗ lệnh mua","ai-trading-assistant.table.buy":"Mua","ai-trading-assistant.table.sell":"售","ai-trading-assistant.table.long":"开长","ai-trading-assistant.table.short":"开短","ai-trading-assistant.table.hold":"控股","ai-trading-assistant.table.reasoning":"分析理理","ai-trading-assistant.table.decisions":"决定","ai-trading-assistant.table.riskAssessment":"风险考核","ai-trading-assistant.table.trust":"信信度","ai-trading-assistant.table.totalRecords":"{total} Không có bản ghi","ai-trading-assistant.table.noPositions":"Không có vị thế","ai-trading-assistant.detail.title":"Chi tiết chiến lược","ai-trading-assistant.equity.noData":"Không có dữ liệu giá trị tài sản ròng","ai-trading-assistant.equity.equity":"Giá trị tài sản ròng","ai-trading-assistant.exchange.testFailed":"Kiểm tra kết nối thất bại","ai-trading-assistant.exchange.connectionSuccess":"Kết nối thành công","ai-trading-assistant.exchange.connectionFailed":"Kết nối thất bại","ai-trading-assistant.form.advancedSettings":"Cài đặt nâng cao","ai-trading-assistant.form.orderMode":"Lệnh Mode","ai-trading-assistant.form.orderModeMaker":"Lệnh chờ (Người tạo lệnh)","ai-trading-assistant.form.orderModeTaker":"Lệnh thị trường (Người nhận lệnh)","ai-trading-assistant.form.orderModeHint":"Chế độ lệnh chờ sử dụng lệnh giới hạn, phí thấp hơn; chế độ lệnh thị trường thực hiện ngay lập tức, phí cao hơn","ai-trading-assistant.form.makerWaitSec":"Thời gian chờ lệnh (giây)","ai-trading-assistant.form.makerWaitSecHint":"Thời gian chờ sau khi đặt lệnh;","ai-trading-assistant.form.makerRetries":"Số lần thử lại cho lệnh đang chờ","ai-trading-assistant.form.makerRetriesHint":"Số lần thử lại tối đa khi lệnh đang chờ không được khớp","ai-trading-assistant.form.fallbackToMarket":"Hạ cấp lệnh đang chờ thất bại thành lệnh thị trường","ai-trading-assistant.form.fallbackToMarketHint":"Có nên hạ cấp lệnh đang chờ mở/đóng thành lệnh thị trường để đảm bảo thực hiện khi chúng không được khớp hay không","ai-trading-assistant.form.marginMode":"Chế độ ký quỹ","ai-trading-assistant.form.marginModeCross":"Ký quỹ chéo","ai-trading-assistant.form.marginModeIsolated":"Ký quỹ riêng biệt Margin","ai-analysis.title":"Hệ thống giao dịch lượng tử","ai-analysis.system.online":"Trực tuyến","ai-analysis.system.agents":"Nhân viên","ai-analysis.system.active":"Hoạt động","ai-analysis.system.stage":"Giai đoạn","ai-analysis.panel.roster":"Danh sách nhân viên","ai-analysis.panel.thinking":"Đang suy nghĩ...","ai-analysis.panel.done":"Hoàn tất","ai-analysis.panel.standby":"Chờ","ai-analysis.input.title":"Hệ thống giao dịch lượng tử","ai-analysis.input.placeholder":"Chọn tài sản mục tiêu (ví dụ: BTC/USDT)","ai-analysis.input.watchlist":"Danh sách theo dõi","ai-analysis.input.start":"Bắt ​​đầu phân tích","ai-analysis.input.recent":"Các tác vụ gần đây:","ai-analysis.vis.stage":"Giai đoạn","ai-analysis.vis.processing":"Đang xử lý","ai-analysis.result.complete":"Phân tích hoàn tất","ai-analysis.result.signal":"Tín hiệu cuối cùng","ai-analysis.result.confidence":"Mức độ tin cậy:","ai-analysis.result.new":"Phân tích mới","ai-analysis.result.full":"Xem báo cáo đầy đủ","ai-analysis.logs.title":"Nhật ký hệ thống","ai-analysis.modal.title":"Báo cáo bảo mật","ai-analysis.modal.fundamental":"Phân tích cơ bản","ai-analysis.modal.technical":"Phân tích kỹ thuật","ai-analysis.modal.sentiment":"Phân tích tâm lý","ai-analysis.modal.risk":"Đánh giá rủi ro","ai-analysis.stage.idle":"Chế độ chờ","ai-analysis.stage.1":"Giai đoạn 1: Phân tích đa chiều","ai-analysis.stage.2":"Giai đoạn 2: Thảo luận về xu hướng tăng/giảm","ai-analysis.stage.3":"Giai đoạn 3: Lập kế hoạch chiến lược","ai-analysis.stage.4":"Giai đoạn 4: Xem xét kiểm soát rủi ro","ai-analysis.stage.complete":"Đã hoàn thành","ai-analysis.agent.investment_director":"Giám đốc đầu tư Giám đốc","ai-analysis.agent.role.investment_director":"Phân tích toàn diện & Kết luận cuối cùng","ai-analysis.agent.market":"Nhà phân tích thị trường","ai-analysis.agent.role.market":"Dữ liệu kỹ thuật & thị trường","ai-analysis.agent.fundamental":"Nhà phân tích cơ bản","ai-analysis.agent.role.fundamental":"Tài chính & Định giá","ai-analysis.agent.technical":"Nhà phân tích kỹ thuật","ai-analysis.agent.role.technical":"Các chỉ báo & biểu đồ kỹ thuật","ai-analysis.agent.news":"Nhà phân tích tin tức","ai-analysis.agent.role.news":"Bộ lọc tin tức toàn cầu","ai-analysis.agent.sentiment":"Tâm lý thị trường Nhà phân tích","ai-analysis.agent.role.sentiment":"Phân tích xã hội & cảm xúc","ai-analysis.agent.risk":"Nhà phân tích rủi ro","ai-analysis.agent.role.risk":"Kiểm tra rủi ro cơ bản","ai-analysis.agent.bull":"Nhà phân tích lạc quan","ai-analysis.agent.role.bull":"Khám phá động lực tăng trưởng","ai-analysis.agent.bear":"Nhà phân tích bi quan","ai-analysis.agent.role.bear":"Khám phá rủi ro & điểm yếu","ai-analysis.agent.manager":"Quản lý nghiên cứu","ai-analysis.agent.role.manager":"Người điều phối tranh luận","ai-analysis.agent.trader":"Nhà giao dịch","ai-analysis.agent.role.trader":"Chiến lược gia điều hành","ai-analysis.agent.risky":"Nhà phân tích năng động","ai-analysis.agent.role.risky":"Chiến lược năng động","ai-analysis.agent.neutral":"Nhà phân tích cân bằng","ai-analysis.agent.role.neutral":"Chiến lược cân bằng","ai-analysis.agent.safe":"Nhà phân tích thận trọng","ai-analysis.agent.role.safe":"Chiến lược thận trọng","ai-analysis.agent.cro":"Cân nhắc Quản lý rủi ro (CRO)","ai-analysis.agent.role.cro":"Người có thẩm quyền quyết định cuối cùng","ai-analysis.script.market":"Đang truy xuất dữ liệu OHLCV từ các sàn giao dịch lớn...","ai-analysis.script.fundamental":"Đang truy xuất báo cáo tài chính hàng quý...","ai-analysis.script.technical":"Phân tích các chỉ báo kỹ thuật và mô hình biểu đồ...","ai-analysis.script.news":"Đang quét tin tức tài chính toàn cầu...","ai-analysis.script.sentiment":"Phân tích xu hướng mạng xã hội...","ai-analysis.script.risk":"Đang tính toán biến động lịch sử...","invite.inviteLink":"Liên kết mời","invite.copy":"Sao chép liên kết","invite.copySuccess":"Sao chép thành công!","invite.copyFailed":"Sao chép thất bại, vui lòng sao chép thủ công","invite.noInviteLink":"Không tạo được liên kết mời","invite.totalInvites":"Tổng số lời mời","invite.totalReward":"Tổng số phần thưởng","invite.rules":"Quy tắc mời","invite.rule1":"Bạn sẽ nhận được phần thưởng cho mỗi người bạn mời đăng ký thành công","invite.rule2":"Bạn sẽ nhận được phần thưởng bổ sung khi người bạn được mời hoàn tất giao dịch đầu tiên","invite.rule3":"Phần thưởng mời sẽ được cộng trực tiếp vào tài khoản của bạn","invite.inviteList":"Danh sách người được mời","invite.tasks":"Trung tâm nhiệm vụ","invite.inviteeName":"Người được mời","invite.inviteTime":"Thời gian mời","invite.status":"Trạng thái","invite.reward":"Phần thưởng","invite.active":"Đang hoạt động","invite.inactive":"Không hoạt động","invite.completed":"Đã hoàn thành","invite.claimed":"Đã nhận","invite.pending":"Đang chờ hoàn thành","invite.goToTask":"Chuyển đến hoàn thành","invite.claimReward":"Nhận phần thưởng","invite.verify":"Xác minh hoàn tất","invite.verifySuccess":"Xác minh thành công Nhiệm vụ hoàn thành","invite.verifyNotCompleted":"Nhiệm vụ chưa hoàn thành, vui lòng hoàn thành nhiệm vụ trước","invite.verifyFailed":"Xác minh thất bại, vui lòng thử lại sau","invite.claimSuccess":"Đã nhận thành công {reward} QDT!","invite.claimFailed":"Không thể xác nhận, vui lòng thử lại sau","invite.totalRecords":"Tổng số {total} bản ghi","invite.task.twitter.title":"Chia sẻ lại bài đăng trên Twitter của chúng tôi lên X (Twitter)","invite.task.twitter.desc":"Chia sẻ bài đăng chính thức của chúng tôi lên tài khoản Twitter của bạn (X)","invite.task.youtube.title":"Đăng ký kênh YouTube của chúng tôi","invite.task.youtube.desc":"Đăng ký và theo dõi kênh YouTube chính thức của chúng tôi","invite.task.telegram.title":"Tham gia nhóm Telegram của chúng tôi","invite.task.telegram.desc":"Tham gia nhóm cộng đồng Telegram chính thức của chúng tôi","invite.task.discord.title":"Tham gia Discord Máy chủ","invite.task.discord.desc":"Tham gia máy chủ cộng đồng Discord của chúng tôi",message:"-","layouts.usermenu.dialog.title":"Thông tin","layouts.usermenu.dialog.content":"Bạn có chắc chắn muốn đăng xuất không?","layouts.userLayout.title":"Tìm kiếm sự thật trong sự không chắc chắn","settings.group.agent_memory":"Bộ nhớ/Phản tư","settings.group.reflection_worker":"Worker xác minh phản tư tự động","settings.field.ENABLE_AGENT_MEMORY":"Bật bộ nhớ tác nhân","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"Bật truy vấn vector (cục bộ)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"Kích thước embedding","settings.field.AGENT_MEMORY_TOP_K":"Số lượng Top-K","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"Kích thước cửa sổ ứng viên","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"Chu kỳ bán rã theo thời gian (ngày)","settings.field.AGENT_MEMORY_W_SIM":"Trọng số tương đồng","settings.field.AGENT_MEMORY_W_RECENCY":"Trọng số thời gian","settings.field.AGENT_MEMORY_W_RETURNS":"Trọng số lợi nhuận","settings.field.ENABLE_REFLECTION_WORKER":"Bật xác minh tự động","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"Khoảng thời gian xác minh (giây)","profile.notifications.title":"Cài đặt thông báo","profile.notifications.hint":"Cấu hình phương thức thông báo mặc định, sẽ được sử dụng tự động khi tạo giám sát tài sản và cảnh báo","profile.notifications.defaultChannels":"Kênh thông báo mặc định","profile.notifications.browser":"Thông báo trong ứng dụng","profile.notifications.email":"Email","profile.notifications.phone":"SMS","profile.notifications.telegramBotToken":"Telegram Bot Token","profile.notifications.telegramBotTokenPlaceholder":"Nhập Telegram Bot Token của bạn","profile.notifications.telegramBotTokenHint":"Tạo bot qua @BotFather để lấy Token","profile.notifications.telegramChatId":"Telegram Chat ID","profile.notifications.telegramPlaceholder":"Nhập Telegram Chat ID của bạn (ví dụ: 123456789)","profile.notifications.telegramHint":"Gửi /start cho @userinfobot để lấy Chat ID","profile.notifications.notifyEmail":"Email thông báo","profile.notifications.emailPlaceholder":"Địa chỉ email nhận thông báo","profile.notifications.emailHint":"Mặc định sử dụng email tài khoản, có thể đặt email khác","profile.notifications.phonePlaceholder":"Nhập số điện thoại (ví dụ: +84123456789)","profile.notifications.phoneHint":"Cần quản trị viên cấu hình dịch vụ Twilio","profile.notifications.discordWebhook":"Discord Webhook","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"Tạo Webhook trong cài đặt máy chủ Discord","profile.notifications.webhookUrl":"Webhook URL","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"URL Webhook tùy chỉnh, gửi thông báo qua POST JSON","profile.notifications.webhookToken":"Webhook Token (Tùy chọn)","profile.notifications.webhookTokenPlaceholder":"Bearer Token để xác thực yêu cầu","profile.notifications.webhookTokenHint":"Gửi dưới dạng Authorization: Bearer Token đến Webhook","profile.notifications.testBtn":"Gửi thông báo thử nghiệm","profile.notifications.saveSuccess":"Đã lưu cài đặt thông báo thành công","profile.notifications.selectChannel":"Vui lòng chọn ít nhất một kênh thông báo","profile.notifications.fillTelegramToken":"Vui lòng điền Telegram Bot Token","profile.notifications.fillTelegram":"Vui lòng điền Telegram Chat ID","profile.notifications.fillEmail":"Vui lòng điền email thông báo","profile.notifications.testSent":"Đã gửi thông báo thử nghiệm, vui lòng kiểm tra các kênh thông báo"},k=(0,i.A)((0,i.A)({},p),y)}}]); \ No newline at end of file diff --git a/frontend/dist/js/lang-vi-VN.490ff25a.js b/frontend/dist/js/lang-vi-VN.80f51f88.js similarity index 99% rename from frontend/dist/js/lang-vi-VN.490ff25a.js rename to frontend/dist/js/lang-vi-VN.80f51f88.js index e5c136f..23b4a5e 100644 --- a/frontend/dist/js/lang-vi-VN.490ff25a.js +++ b/frontend/dist/js/lang-vi-VN.80f51f88.js @@ -1 +1 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[424],{18326:function(n,a,t){t.d(a,{default:function(){return k}});var i=t(57888),s={items_per_page:"/ trang",jump_to:"Đến",jump_to_confirm:"xác nhận",page:"",prev_page:"Trang Trước",next_page:"Trang Kế",prev_5:"Về 5 Trang Trước",next_5:"Đến 5 Trang Kế",prev_3:"Về 3 Trang Trước",next_3:"Đến 3 Trang Kế"},e=t(85505),h={today:"Hôm nay",now:"Bây giờ",backToToday:"Trở về hôm nay",ok:"Ok",clear:"Xóa",month:"Tháng",year:"Năm",timeSelect:"Chọn thời gian",dateSelect:"Chọn ngày",weekSelect:"Chọn tuần",monthSelect:"Chọn tháng",yearSelect:"Chọn năm",decadeSelect:"Chọn thập kỷ",yearFormat:"YYYY",dateFormat:"D/M/YYYY",dayFormat:"D",dateTimeFormat:"D/M/YYYY HH:mm:ss",monthBeforeYear:!0,previousMonth:"Tháng trước (PageUp)",nextMonth:"Tháng sau (PageDown)",previousYear:"Năm trước (Control + left)",nextYear:"Năm sau (Control + right)",previousDecade:"Thập kỷ trước",nextDecade:"Thập kỷ sau",previousCentury:"Thế kỷ trước",nextCentury:"Thế kỷ sau"},o={placeholder:"Chọn thời gian"},c=o,r={lang:(0,e.A)({placeholder:"Chọn thời điểm",rangePlaceholder:["Ngày bắt đầu","Ngày kết thúc"]},h),timePickerLocale:(0,e.A)({},c)},d=r,g=d,l={locale:"vi",Pagination:s,DatePicker:d,TimePicker:c,Calendar:g,Table:{filterTitle:"Bộ ",filterConfirm:"OK",filterReset:"Tạo Lại",selectAll:"Chọn Tất Cả",selectInvert:"Chọn Ngược Lại"},Modal:{okText:"OK",cancelText:"Huỷ",justOkText:"OK"},Popconfirm:{okText:"OK",cancelText:"Huỷ"},Transfer:{searchPlaceholder:"Tìm ở đây",itemUnit:"mục",itemsUnit:"mục"},Upload:{uploading:"Đang tải lên...",removeFile:"Gỡ bỏ tập tin",uploadError:"Lỗi tải lên",previewFile:"Xem thử tập tin",downloadFile:"Tải tập tin"},Empty:{description:"Trống"}},u=l,m=t(21135),b=t.n(m),p={antLocale:u,momentName:"vi",momentLocale:b()},y={submit:"Gửi",save:"Lưu","submit.ok":"Gửi thành công","save.ok":"Lưu thành công","menu.welcome":"Chào mừng","menu.home":"Trang chủ","menu.dashboard":"Bảng điều khiển","menu.dashboard.indicator":"Phân tích chỉ báo","menu.dashboard.community":"Cộng đồng chỉ báo","menu.dashboard.analysis":"Phân tích AI","menu.dashboard.tradingAssistant":"Trợ lý giao dịch","menu.dashboard.aiTradingAssistant":"Trợ lý giao dịch AI","menu.dashboard.signalRobot":"Robot tín hiệu","menu.dashboard.monitor":"Giám sát Trang","menu.dashboard.workplace":"Nơi làm việc","menu.form":"Trang biểu mẫu","menu.form.basic-form":"Biểu mẫu cơ bản","menu.form.step-form":"Biểu mẫu từng bước","menu.form.step-form.info":"Biểu mẫu từng bước (Điền thông tin chuyển khoản)","menu.form.step-form.confirm":"Biểu mẫu từng bước (Xác nhận thông tin chuyển khoản)","menu.form.step-form.result":"Biểu mẫu từng bước (Hoàn tất)","menu.form.advanced-form":"Biểu mẫu nâng cao","menu.list":"Trang danh sách","menu.list.table-list":"Bảng truy vấn","menu.list.basic-list":"Tiêu chuẩn Menu.list","menu.list.card-list":"Danh sách thẻ","menu.list.search-list":"Tìm kiếm danh sách","menu.list.search-list.articles":"Tìm kiếm danh sách (Bài viết)","menu.list.search-list.projects":"Tìm kiếm danh sách (Dự án)","menu.list.search-list.applications":"Tìm kiếm danh sách (Ứng dụng)","menu.profile":"Trang chi tiết","menu.profile.basic":"Trang chi tiết cơ bản","menu.profile.advanced":"Trang chi tiết nâng cao","menu.result":"Trang kết quả","menu.result.success":"Trang thành công","menu.result.fail":"Trang thất bại","menu.exception":"Ngoại lệ Trang","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"Đang gây ra lỗi","menu.account":"Trang cá nhân","menu.account.center":"Trung tâm cá nhân","menu.account.settings":"Cài đặt cá nhân","menu.account.trigger":"Đang gây ra lỗi","menu.account.logout":"Đăng xuất","menu.wallet":"Ví của tôi","menu.docs":"Trung tâm tài liệu","menu.docs.detail":"Chi tiết tài liệu","menu.header.refreshPage":"Làm mới Trang","menu.invite.friends":"Mời bạn bè","app.setting.pagestyle":"Cài đặt kiểu tổng thể","app.setting.pagestyle.light":"Kiểu menu sáng","app.setting.pagestyle.dark":"Kiểu menu tối","app.setting.pagestyle.realdark":"Chế độ tối","app.setting.themecolor":"Màu chủ đề","app.setting.navigationmode":"Chế độ điều hướng","app.setting.sidemenu.nav":"Điều hướng thanh bên","app.setting.topmenu.nav":"Điều hướng trên cùng","app.setting.content-width":"Chiều rộng vùng nội dung","app.setting.content-width.tooltip":"Cài đặt này chỉ có hiệu lực khi [Điều hướng trên cùng] được bật","app.setting.content-width.fixed":"Cố định","app.setting.content-width.fluid":"Linh hoạt","app.setting.fixedheader":"Tiêu đề cố định","app.setting.fixedheader.tooltip":"Có thể cấu hình khi tiêu đề cố định","app.setting.autoHideHeader":"Ẩn tiêu đề khi vuốt xuống","app.setting.fixedsidebar":"Menu thanh bên cố định","app.setting.sidemenu":"Bố cục menu thanh bên","app.setting.topmenu":"Bố cục menu trên cùng","app.setting.othersettings":"Các cài đặt khác","app.setting.weakmode":"Chế độ màu yếu","app.setting.multitab":"Chế độ nhiều tab","app.setting.copy":"Sao chép cài đặt","app.setting.loading":"Đang tải theme","app.setting.copyinfo":"Đã sao chép cài đặt thành công src/config/defaultSettings.js","app.setting.copy.success":"Sao chép hoàn tất","app.setting.copy.fail":"Sao chép thất bại","app.setting.theme.switching":"Đang chuyển đổi giao diện!","app.setting.production.hint":"Thanh cấu hình chỉ dùng để xem trước trong môi trường phát triển và sẽ không hiển thị trong môi trường sản xuất. Vui lòng sao chép và chỉnh sửa thủ công tệp cấu hình.","app.setting.themecolor.daybreak":"Xanh dương bình minh (mặc định)","app.setting.themecolor.dust":"Hoàng hôn","app.setting.themecolor.volcano":"Núi lửa","app.setting.themecolor.sunset":"Hoàng hôn","app.setting.themecolor.cyan":"Xanh lam sáng","app.setting.themecolor.green":"Xanh lục cực quang","app.setting.themecolor.geekblue":"Xanh dương công nghệ","app.setting.themecolor.purple":"Tím","app.setting.tooltip":"Cài đặt trang","user.login.userName":"Tên người dùng","user.login.password":"Mật khẩu","user.login.username.placeholder":"Tài khoản: admin","user.login.password.placeholder":"Mật khẩu: admin hoặc ant.design","user.login.message-invalid-credentials":"Đăng nhập thất bại, vui lòng kiểm tra email và mã xác minh của bạn","user.login.message-invalid-verification-code":"Mã xác minh không chính xác","user.login.tab-login-credentials":"Đăng nhập bằng tài khoản và mật khẩu","user.login.tab-login-email":"Đăng nhập bằng email","user.login.tab-login-mobile":"Đăng nhập bằng số điện thoại","user.login.captcha.placeholder":"Vui lòng nhập mã xác minh hình ảnh","user.login.mobile.placeholder":"Số điện thoại Số điện thoại","user.login.mobile.verification-code.placeholder":"Mã xác thực","user.login.email.placeholder":"Vui lòng nhập địa chỉ email","user.login.email.verification-code.placeholder":"Vui lòng nhập mã xác thực","user.login.email.sending":"Đang gửi mã xác thực...","user.login.email.send-success-title":"Thông báo","user.login.email.send-success":"Mã xác thực đã được gửi thành công, vui lòng kiểm tra email của bạn","user.login.sms.send-success":"Mã xác thực đã được gửi thành công, vui lòng kiểm tra tin nhắn SMS của bạn","user.login.remember-me":"Tự động đăng nhập","user.login.forgot-password":"Quên mật khẩu Mật khẩu","user.login.sign-in-with":"Các phương thức đăng nhập khác","user.login.signup":"Đăng ký tài khoản","user.login.login":"Đăng nhập","user.register.register":"Đăng ký","user.register.email.placeholder":"Email","user.register.password.placeholder":"Vui lòng nhập ít nhất 6 ký tự. Vui lòng không sử dụng mật khẩu dễ đoán.","user.register.password.popover-message":"Vui lòng nhập ít nhất 6 ký tự. Vui lòng không sử dụng mật khẩu dễ đoán.","user.register.confirm-password.placeholder":"Xác nhận mật khẩu","user.register.get-verification-code":"Lấy mã xác minh","user.register.sign-in":"Đăng nhập bằng tài khoản hiện có","user.register-result.msg":"Tài khoản của bạn: {email} đã được đăng ký thành công","user.register-result.activation-email":"Email kích hoạt đã được gửi đến hộp thư đến của bạn. Email có hiệu lực trong 24 giờ. Vui lòng đăng nhập vào email của bạn và nhấp vào liên kết trong email để kích hoạt tài khoản.","user.register-result.back-home":"Quay lại trang chủ","user.register-result.view-mailbox":"Xem email","user.email.required":"Vui lòng nhập địa chỉ email của bạn!","user.email.wrong-format":"Định dạng địa chỉ email không chính xác!","user.userName.required":"Vui lòng nhập tên người dùng hoặc địa chỉ email của bạn","user.password.required":"Vui lòng nhập mật khẩu của bạn!","user.password.twice.msg":"Hai mật khẩu không khớp!","user.password.strength.msg":"Mật khẩu không đủ mạnh","user.password.strength.strong":"Độ mạnh: Mạnh","user.password.strength.medium":"Độ mạnh: Trung bình","user.password.strength.low":"Độ mạnh: Yếu","user.password.strength.short":"Độ mạnh: Quá ngắn","user.confirm-password.required":"Vui lòng xác nhận mật khẩu của bạn!","user.phone-number.required":"Vui lòng nhập số điện thoại hợp lệ","user.phone-number.wrong-format":"Định dạng số điện thoại không chính xác!","user.verification-code.required":"Vui lòng nhập mã xác minh!","user.captcha.required":"Vui lòng nhập mã xác minh hình ảnh!","user.login.infos":"QuantDinger là công cụ phân tích cổ phiếu đa tác nhân AI và không có chứng chỉ tư vấn đầu tư chứng khoán. Tất cả kết quả phân tích, xếp hạng và ý kiến ​​tham khảo trên nền tảng đều được AI tự động tạo ra dựa trên dữ liệu lịch sử và chỉ dành cho mục đích học tập, nghiên cứu và trao đổi kỹ thuật. Chúng không cấu thành bất kỳ lời khuyên đầu tư hoặc cơ sở ra quyết định nào. Đầu tư cổ phiếu tiềm ẩn nhiều rủi ro như rủi ro thị trường, rủi ro thanh khoản và rủi ro chính sách, có thể dẫn đến mất vốn gốc. Người dùng nên đưa ra quyết định độc lập dựa trên khả năng chấp nhận rủi ro của mình, và mọi hành vi đầu tư và hậu quả phát sinh từ việc sử dụng công cụ này đều do người dùng chịu trách nhiệm. Thị trường đầy rủi ro, và đầu tư cần thận trọng.","user.login.tab-login-web3":"Đăng nhập Web3","user.login.web3.tip":"Đăng nhập bằng ví để xác thực chữ ký","user.login.web3.connect":"Kết nối ví và đăng nhập","user.login.web3.no-wallet":"Không phát hiện ví","user.login.web3.no-address":"Không lấy được địa chỉ ví","user.login.web3.nonce-failed":"Không thể lấy số ngẫu nhiên","user.login.web3.verify-failed":"Xác thực chữ ký thất bại","user.login.web3.success":"Đăng nhập thành công","user.login.web3.failed":"Đăng nhập ví thất bại","nav.no_wallet":"Ví không được tìm thấy đã phát hiện","nav.copy":"Sao chép","nav.copy_success":"Sao chép thành công","user.login.oauth.google":"Đăng nhập bằng Google","user.login.oauth.github":"Đăng nhập bằng GitHub","user.login.oauth.loading":"Đang chuyển hướng đến trang xác thực...","user.login.oauth.failed":"Đăng nhập OAuth thất bại","user.login.oauth.get-url-failed":"Không thể lấy liên kết xác thực","user.login.subtitle":"Thông tin chi tiết định lượng về thị trường toàn cầu","user.login.legal.title":"Tuyên bố pháp lý","user.login.legal.view":"Xem tuyên bố pháp lý","user.login.legal.collapse":"Thu gọn Tuyên bố pháp lý","user.login.legal.agree":"Tôi đã đọc và đồng ý với tuyên bố pháp lý","user.login.legal.required":"Vui lòng đọc và kiểm tra tuyên bố pháp lý trước","user.login.legal.content":"QuantDinger là công cụ phân tích cổ phiếu đa tác nhân AI và không có bằng cấp tư vấn đầu tư chứng khoán. Tất cả kết quả phân tích, xếp hạng và ý kiến ​​tham khảo trên nền tảng đều được AI tự động tạo ra dựa trên dữ liệu lịch sử và chỉ dành cho mục đích học tập, nghiên cứu và trao đổi kỹ thuật, và không cấu thành bất kỳ lời khuyên đầu tư hoặc cơ sở ra quyết định nào. Đầu tư cổ phiếu tiềm ẩn nhiều rủi ro như rủi ro thị trường, rủi ro thanh khoản và rủi ro chính sách, có thể dẫn đến mất vốn gốc. Người dùng nên đưa ra quyết định độc lập dựa trên khả năng chấp nhận rủi ro của mình, và mọi hành vi đầu tư và hậu quả phát sinh từ việc sử dụng công cụ này sẽ do người dùng chịu trách nhiệm. Thị trường đầy rủi ro, và đầu tư cần thận trọng.","user.login.privacy.title":"Điều khoản Quyền riêng tư Người dùng","user.login.privacy.view":"Xem Điều khoản Quyền riêng tư Người dùng","user.login.privacy.collapse":"Thu gọn Điều khoản Quyền riêng tư Người dùng","user.login.privacy.content":"Chúng tôi coi trọng quyền riêng tư và việc bảo vệ dữ liệu của bạn. 1) Phạm vi Thu thập: Chúng tôi chỉ thu thập thông tin cần thiết để thực hiện các chức năng (chẳng hạn như email, số điện thoại di động, mã vùng, địa chỉ ví Web3) và nhật ký cần thiết cũng như thông tin thiết bị. 2) Mục đích Sử dụng: Để đăng nhập tài khoản và xác minh bảo mật, cung cấp chức năng dịch vụ, khắc phục sự cố và tuân thủ các yêu cầu. 3) Lưu trữ và Bảo mật: Dữ liệu được lưu trữ mã hóa và các biện pháp kiểm soát quyền và truy cập cần thiết được thực hiện để ngăn chặn truy cập trái phép, tiết lộ hoặc mất mát. 4) Chia sẻ và Bên thứ ba: Ngoại trừ trường hợp được yêu cầu bởi luật và quy định hoặc cần thiết để thực hiện dịch vụ, chúng tôi sẽ không chia sẻ thông tin cá nhân của bạn với bên thứ ba; Nếu có sự tham gia của các dịch vụ bên thứ ba (chẳng hạn như ví điện tử, nhà cung cấp dịch vụ SMS), dữ liệu sẽ chỉ được xử lý ở mức tối thiểu cần thiết để thực hiện các chức năng. 5) Cookie/Bộ nhớ cục bộ: Được sử dụng để xác thực trạng thái đăng nhập và duy trì phiên làm việc cần thiết (chẳng hạn như mã thông báo, PHPSESSID). Bạn có thể xóa hoặc hạn chế chúng trong trình duyệt của mình. 6) Quyền cá nhân: Bạn có thể thực hiện các quyền của mình để yêu cầu, sửa đổi, xóa và rút lại sự đồng ý theo luật và quy định hiện hành. 7) Thay đổi và Thông báo: Các bản cập nhật cho các điều khoản này sẽ được hiển thị rõ ràng trên trang. Việc tiếp tục sử dụng dịch vụ này cho thấy bạn đã đọc và đồng ý với nội dung được cập nhật. Nếu bạn không đồng ý với các điều khoản này hoặc bất kỳ bản cập nhật nào trong đó, vui lòng ngừng sử dụng dịch vụ này và liên hệ với chúng tôi. ","account.basicInfo":"Thông tin cơ bản","account.id":"ID người dùng","account.username":"Tên người dùng","account.nickname":"Biệt danh","account.email":"Email","account.mobile":"Số điện thoại","account.web3address":"Địa chỉ ví","account.pid":"ID người giới thiệu","account.level":"Cấp độ người dùng","account.money":"Số dư","account.qdtBalance":"Số dư QDT","account.score":"Điểm","account.createtime":"Thời gian đăng ký","account.inviteLink":"Liên kết mời","account.recharge":"Nạp tiền","account.rechargeTip":"Mã QR bên dưới để nạp tiền bằng WeChat hoặc Alipay","account.qrCodePlaceholder":"Mã QR giả lập","account.rechargeAmount":"Số tiền cần nạp","account.enterAmount":"Vui lòng nhập số tiền cần nạp","account.rechargeHint":"Số tiền nạp tối thiểu: 1 QDT","account.confirmRecharge":"Xác nhận nạp tiền","account.enterValidAmount":"Vui lòng nhập số tiền hợp lệ","account.rechargeSuccess":"Nạp tiền thành công! Số tiền {amount} QDT đã được nạp","account.settings.menuMap.basic":"Cài đặt cơ bản","account.settings.menuMap.security":"Cài đặt bảo mật","account.settings.menuMap.notification":"Thông báo tin nhắn mới","account.settings.menuMap.moneyLog":"Chi tiết quỹ","account.moneyLog.empty":"Không có chi tiết quỹ","account.moneyLog.total":"Tổng số {total} giao dịch","account.moneyLog.type.purchase":"Hạn mức mua hàng","account.moneyLog.type.recharge":"Nạp tiền","account.moneyLog.type.refund":"Hoàn tiền","account.moneyLog.type.reward":"Thưởng","account.moneyLog.type.income":"Thu nhập Các chỉ báo","account.moneyLog.type.commission":"Phí nền tảng","wallet.balance":"Số dư QDT","wallet.recharge":"Nạp tiền","wallet.withdraw":"Rút tiền","wallet.filter":"Lọc","wallet.reset":"Đặt lại","wallet.totalRecharge":"Tổng số tiền nạp","wallet.totalWithdraw":"Tổng số tiền rút","wallet.totalIncome":"Tổng số tiền thu nhập","wallet.records":"Lịch sử giao dịch và chi tiết quỹ","wallet.tradingRecords":"Lịch sử giao dịch","wallet.moneyLog":"Chi tiết quỹ","wallet.rechargeTip":"Vui lòng quét mã QR bên dưới bằng WeChat hoặc Alipay để nạp tiền","wallet.qrCodePlaceholder":"Mã QR (mô phỏng)","wallet.rechargeAmount":"Số tiền cần nạp","wallet.enterAmount":"Vui lòng nhập số tiền cần nạp","wallet.rechargeHint":"Số tiền nạp tối thiểu: 1 QDT","wallet.confirmRecharge":"Xác nhận nạp tiền","wallet.enterValidAmount":"Vui lòng nhập số tiền hợp lệ","wallet.rechargeSuccess":"Nạp tiền thành công! Đã thanh toán {amount} QDT","wallet.rechargeFailed":"Giao dịch thất bại","wallet.withdrawTip":"Vui lòng nhập số tiền rút và địa chỉ rút tiền","wallet.withdrawAmount":"Số tiền rút","wallet.enterWithdrawAmount":"Vui lòng nhập số tiền rút","wallet.withdrawHint":"Số tiền rút tối thiểu: 1 QDT","wallet.withdrawAddress":"Địa chỉ rút tiền (tùy chọn)","wallet.enterWithdrawAddress":"Vui lòng nhập địa chỉ rút tiền","wallet.confirmWithdraw":"Xác nhận rút tiền","wallet.enterValidWithdrawAmount":"Vui lòng nhập số tiền rút hợp lệ","wallet.insufficientBalance":"Số dư không đủ","wallet.withdrawSuccess":"Rút tiền thành công! Số tiền {amount} QDT đã rút","wallet.withdrawFailed":"Giao dịch rút tiền thất bại","wallet.noTradingRecords":"Không có bản ghi giao dịch nào","wallet.noMoneyLog":"Không có chi tiết giao dịch","wallet.loadTradingRecordsFailed":"Không thể tải bản ghi giao dịch","wallet.loadMoneyLogFailed":"Không thể tải chi tiết giao dịch","wallet.moneyLogTotal":"Tổng số {total} bản ghi","wallet.moneyLogTypeTitle":"Loại","wallet.moneyLogType.all":"Tất cả các loại","wallet.table.time":"Thời gian","wallet.table.type":"Loại","wallet.table.price":"Giá","wallet.table.amount":"Số lượng","wallet.table.money":"Số tiền","wallet.table.balance":"Số dư","wallet.table.memo":"Ghi chú","wallet.table.value":"Giá trị","wallet.table.profit":"Lợi nhuận/Thua lỗ","wallet.table.commission":"Hoa hồng","wallet.table.total":"Tổng số {total} bản ghi","wallet.tradeType.buy":"Mua","wallet.tradeType.sell":"Bán","wallet.tradeType.liquidation":"Thanh lý","wallet.tradeType.openLong":"Mở lệnh mua","wallet.tradeType.addLong":"Thêm lệnh mua","wallet.tradeType.closeLong":"Đóng lệnh mua","wallet.tradeType.closeLongStop":"Đóng lệnh mua và cắt lỗ","wallet.tradeType.closeLongProfit":"Chốt lời và đóng lệnh mua","wallet.tradeType.openShort":"Mở vị thế bán khống","wallet.tradeType.addShort":"Thêm vị thế bán khống","wallet.tradeType.closeShort":"Đóng vị thế bán khống","wallet.tradeType.closeShortStop":"Đóng vị thế bán khống với lệnh dừng lỗ","wallet.tradeType.closeShortProfit":"Chốt lời và đóng vị thế bán khống","wallet.moneyLogType.purchase":"Chỉ báo mua","wallet.moneyLogType.recharge":"Nạp tiền","wallet.moneyLogType.withdraw":"Rút tiền mặt","wallet.moneyLogType.refund":"Hoàn tiền","wallet.moneyLogType.reward":"Thưởng","wallet.moneyLogType.income":"Thu nhập","wallet.moneyLogType.commission":"Phí giao dịch","wallet.web3Address.required":"Vui lòng nhập địa chỉ ví Web3 của bạn trước","wallet.web3Address.requiredDescription":"Bạn cần liên kết địa chỉ ví Web3 của mình trước khi gửi tiền để nhận tiền gửi","wallet.web3Address.placeholder":"Vui lòng nhập địa chỉ ví Web3 của bạn (bắt đầu bằng 0x)","wallet.web3Address.save":"Lưu địa chỉ ví","wallet.web3Address.saveSuccess":"Địa chỉ ví đã được lưu thành công","wallet.web3Address.saveFailed":"Không thể lưu địa chỉ ví","wallet.web3Address.invalidFormat":"Vui lòng nhập địa chỉ ví Web3 hợp lệ (định dạng Ethereum: 42 ký tự bắt đầu bằng 0x, hoặc TRC20) Định dạng: 34 ký tự bắt đầu bằng T)","wallet.selectCoin":"Chọn loại tiền điện tử","wallet.selectChain":"Chọn chuỗi khối","wallet.chain.eth":"ETH (ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"BSC","wallet.targetQdtAmount":"Số lượng QDT bạn muốn đổi (tùy chọn)","wallet.targetQdtAmount.placeholder":"Vui lòng nhập số lượng QDT bạn muốn đổi, giá QDT hiện tại: {price} USDT","wallet.targetQdtAmount.requiredUsdt":"Số tiền cần nạp: {amount} USDT","wallet.rechargeAddress":"Địa chỉ nạp tiền","wallet.copyAddress":"Sao chép","wallet.copySuccess":"Sao chép thành công!","wallet.copyFailed":"Sao chép thất bại, vui lòng sao chép thủ công","wallet.rechargeAddressHint":"Vui lòng đảm bảo bạn sử dụng chuỗi {chain} để gửi {coin} vào địa chỉ này","wallet.qdtPrice.loading":"Đang tải...","wallet.rechargeTip.new":"Vui lòng chọn loại tiền tệ và chuỗi, sau đó quét mã QR bên dưới để gửi tiền","wallet.exchangeRate":"1 QDT ≈ {rate} USDT","wallet.withdrawableAmount":"Số tiền có thể rút","wallet.totalBalance":"Tổng số dư","wallet.insufficientWithdrawable":"Số tiền có thể rút không đủ, hiện tại chỉ có thể rút: {amount} QDT","wallet.withdrawAddressRequired":"Vui lòng nhập địa chỉ rút tiền địa chỉ","wallet.withdrawAddressHint":"Vui lòng đảm bảo địa chỉ chính xác; không thể hủy bỏ giao dịch rút tiền sau khi đã gửi","wallet.withdrawSubmitSuccess":"Yêu cầu rút tiền đã được gửi thành công; Vui lòng chờ xem xét","menu.footer.contactUs":"Liên hệ với chúng tôi","menu.footer.getSupport":"Nhận hỗ trợ","menu.footer.socialAccounts":"Tài khoản mạng xã hội","menu.footer.userAgreement":"Thỏa thuận người dùng","menu.footer.privacyPolicy":"Chính sách bảo mật","menu.footer.support":"Hỗ trợ","menu.footer.featureRequest":"Yêu cầu tính năng","menu.footer.email":"Email","menu.footer.liveChat":"Trò chuyện trực tuyến 24/7","dashboard.analysis.title":"Phân tích đa chiều","dashboard.analysis.subtitle":"Phân tích tài chính toàn diện dựa trên AI Nền tảng","dashboard.analysis.selectSymbol":"Chọn hoặc nhập mã chứng khoán","dashboard.analysis.selectModel":"Chọn mô hình","dashboard.analysis.startAnalysis":"Bắt ​​đầu phân tích","dashboard.analysis.history":"Lịch sử","dashboard.analysis.tab.overview":"Phân tích toàn diện","dashboard.analysis.tab.fundamental":"Các yếu tố cơ bản","dashboard.analysis.tab.technical":"Phân tích kỹ thuật","dashboard.analysis.tab.news":"Tin tức","dashboard.analysis.tab.sentiment":"Tâm lý thị trường","dashboard.analysis.tab.risk":"Rủi ro","dashboard.analysis.tab.debate":"Tăng/Giảm giá","dashboard.analysis.tab.decision":"Quyết định cuối cùng","dashboard.analysis.empty.selectSymbol":"Chọn mục tiêu để bắt đầu phân tích","dashboard.analysis.empty.selectSymbolDesc":"Chọn mục tiêu từ danh sách theo dõi của bạn hoặc nhập mã của nó để nhận báo cáo phân tích AI đa chiều","dashboard.analysis.empty.startAnalysis":'Nhấp vào nút "Bắt đầu phân tích" để phân tích đa chiều',"dashboard.analysis.empty.startAnalysisDesc":"Chúng tôi sẽ cung cấp cho bạn phân tích toàn diện từ nhiều khía cạnh bao gồm cơ bản, kỹ thuật, tin tức, tâm lý và rủi ro","dashboard.analysis.empty.noData":"Không có dữ liệu phân tích cho {type}, vui lòng thực hiện phân tích toàn diện trước","dashboard.analysis.empty.noWatchlist":"Không có danh sách theo dõi có sẵn","dashboard.analysis.empty.noHistory":"Không có dữ liệu lịch sử","dashboard.analysis.empty.watchlistHint":"Không có danh sách theo dõi, vui lòng thực hiện phân tích toàn diện trước","dashboard.analysis.empty.noDebateData":"Không có dữ liệu tranh luận","dashboard.analysis.empty.noDecisionData":"Không có dữ liệu quyết định","dashboard.analysis.empty.selectAgent":"Vui lòng chọn một Đại lý để xem kết quả phân tích","dashboard.analysis.loading.analyzing":"Đang phân tích, vui lòng chờ...","dashboard.analysis.loading.fundamental":"Đang phân tích dữ liệu cơ bản...","dashboard.analysis.loading.technical":"Đang phân tích các chỉ báo kỹ thuật...","dashboard.analysis.loading.news":"Đang phân tích dữ liệu tin tức...","dashboard.analysis.loading.sentiment":"Phân tích tâm lý thị trường...","dashboard.analysis.loading.risk":"Đánh giá rủi ro...","dashboard.analysis.loading.debate":"Cuộc tranh luận đang diễn ra giữa phe tăng giá và phe giảm giá...","dashboard.analysis.loading.decision":"Đưa ra quyết định cuối cùng...","dashboard.analysis.score.overall":"Điểm tổng thể","dashboard.analysis.score.recommendation":"Lời khuyên đầu tư","dashboard.analysis.score.confidence":"Mức độ tin cậy","dashboard.analysis.dimension.fundamental":"các yếu tố cơ bản","dashboard.analysis.dimension.technical":"các yếu tố kỹ thuật","dashboard.analysis.dimension.news":"tin tức","dashboard.analysis.dimension.sentiment":"tâm lý","dashboard.analysis.dimension.risk":"rủi ro","dashboard.analysis.card.dimensionScores":"điểm số cho từng yếu tố","dashboard.analysis.card.overviewReport":"báo cáo tổng quan","dashboard.analysis.card.financialMetrics":"các chỉ số tài chính","dashboard.analysis.card.fundamentalReport":"báo cáo phân tích cơ bản","dashboard.analysis.card.technicalIndicators":"Các chỉ số kỹ thuật Các chỉ báo","dashboard.analysis.card.technicalReport":"Báo cáo phân tích kỹ thuật","dashboard.analysis.card.newsList":"Tin tức liên quan","dashboard.analysis.card.newsReport":"Báo cáo phân tích tin tức","dashboard.analysis.card.sentimentIndicators":"Các chỉ báo tâm lý","dashboard.analysis.card.sentimentReport":"Báo cáo phân tích tâm lý","dashboard.analysis.card.riskMetrics":"Các chỉ báo rủi ro","dashboard.analysis.card.riskReport":"Báo cáo đánh giá rủi ro","dashboard.analysis.card.bullView":"Quan điểm lạc quan","dashboard.analysis.card.bearView":"Quan điểm bi quan","dashboard.analysis.card.researchConclusion":"Kết luận của nhà nghiên cứu","dashboard.analysis.card.traderPlan":"Kế hoạch giao dịch","dashboard.analysis.card.riskDebate":"Thảo luận của Ủy ban Rủi ro","dashboard.analysis.card.finalDecision":"Quyết định cuối cùng","dashboard.analysis.card.tradePlanDetail":"Chi tiết kế hoạch giao dịch","dashboard.analysis.tradingPlan.entry_price":"Giá vào lệnh","dashboard.analysis.tradingPlan.position_size":"Quy mô vị thế","dashboard.analysis.tradingPlan.stop_loss":"Cắt lỗ","dashboard.analysis.tradingPlan.take_profit":"Chốt lời","dashboard.analysis.label.confidence":"Mức độ tự tin Mức độ","dashboard.analysis.label.keyPoints":"Điểm chính","dashboard.analysis.label.riskWarning":"Cảnh báo rủi ro","dashboard.analysis.risk.risky":"Quan điểm rủi ro","dashboard.analysis.risk.neutral":"Quan điểm trung lập","dashboard.analysis.risk.safe":"Quan điểm an toàn","dashboard.analysis.risk.conclusion":"Kết luận","dashboard.analysis.feature.fundamental":"Phân tích cơ bản","dashboard.analysis.feature.technical":"Phân tích kỹ thuật","dashboard.analysis.feature.news":"Phân tích tin tức","dashboard.analysis.feature.sentiment":"Phân tích cảm xúc","dashboard.analysis.feature.risk":"Rủi ro Đánh giá","dashboard.analysis.watchlist.title":"Danh sách theo dõi của tôi","dashboard.analysis.watchlist.add":"Thêm","dashboard.analysis.watchlist.addStock":"Thêm cổ phiếu","dashboard.analysis.modal.addStock.title":"Thêm vào danh sách theo dõi","dashboard.analysis.modal.addStock.confirm":"Xác nhận","dashboard.analysis.modal.addStock.cancel":"Hủy","dashboard.analysis.modal.addStock.market":"Loại thị trường","dashboard.analysis.modal.addStock.marketPlaceholder":"Vui lòng chọn thị trường","dashboard.analysis.modal.addStock.marketRequired":"Vui lòng chọn loại thị trường","dashboard.analysis.modal.addStock.symbol":"Mã chứng khoán","dashboard.analysis.modal.addStock.symbolPlaceholder":"Ví dụ: AAPL, TSLA, GOOGL, 000001, BTC","dashboard.analysis.modal.addStock.symbolRequired":"Vui lòng nhập mã chứng khoán","dashboard.analysis.modal.addStock.searchPlaceholder":"Tìm kiếm mã chứng khoán hoặc tên cổ phiếu","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"Tìm kiếm hoặc nhập mã chứng khoán (ví dụ: AAPL, BTC/USDT, EUR/USD)","dashboard.analysis.modal.addStock.searchOrInputHint":"Hỗ trợ tìm kiếm cổ phiếu trong cơ sở dữ liệu hoặc nhập trực tiếp mã (hệ thống sẽ tự động truy xuất tên)","dashboard.analysis.modal.addStock.search":"Tìm kiếm","dashboard.analysis.modal.addStock.searchResults":"Kết quả tìm kiếm","dashboard.analysis.modal.addStock.hotSymbols":"Cổ phiếu nóng","dashboard.analysis.modal.addStock.noHotSymbols":"Không có cổ phiếu nóng","dashboard.analysis.modal.addStock.selectedSymbol":"Cổ phiếu đã chọn","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"Vui lòng chọn cổ phiếu trước","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"Vui lòng chọn cổ phiếu hoặc nhập mã cổ phiếu","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"Vui lòng nhập mã cổ phiếu","dashboard.analysis.modal.addStock.pleaseSelectMarket":"Vui lòng chọn loại thị trường","dashboard.analysis.modal.addStock.searchFailed":"Tìm kiếm thất bại, vui lòng thử lại sau","dashboard.analysis.modal.addStock.noSearchResults":"Không tìm thấy cổ phiếu phù hợp","dashboard.analysis.modal.addStock.willAutoFetchName":"Hệ thống sẽ tự động lấy tên","dashboard.analysis.modal.addStock.addDirectly":"Thêm trực tiếp","dashboard.analysis.modal.addStock.nameWillBeFetched":"Tên sẽ được tự động lấy khi thêm","dashboard.analysis.market.USStock":"Cổ phiếu Mỹ","dashboard.analysis.market.Crypto":"Tiền điện tử","dashboard.analysis.market.Forex":"Ngoại hối","dashboard.analysis.market.Futures":"Hợp đồng tương lai","dashboard.analysis.modal.history.title":"Lịch sử phân tích","dashboard.analysis.modal.history.viewResult":"Xem kết quả","dashboard.analysis.modal.history.completeTime":"Thời gian hoàn thành","dashboard.analysis.modal.history.error":"Lỗi","dashboard.analysis.status.pending":"Đang chờ xử lý","dashboard.analysis.status.processing":"Đang xử lý","dashboard.analysis.status.completed":"Hoàn thành","dashboard.analysis.status.failed":"Thất bại","dashboard.analysis.message.selectSymbol":"Vui lòng chọn mục tiêu trước","dashboard.analysis.message.taskCreated":"Tác vụ phân tích đã được tạo, đang thực thi trong nền...","dashboard.analysis.message.analysisComplete":"Phân tích đã hoàn tất","dashboard.analysis.message.analysisCompleteCache":"Phân tích đã hoàn tất (sử dụng dữ liệu được lưu trong bộ nhớ cache)","dashboard.analysis.message.analysisFailed":"Phân tích thất bại, vui lòng thử lại sau","dashboard.analysis.message.addStockSuccess":"Đã thêm thành công","dashboard.analysis.message.addStockFailed":"Thêm thất bại","dashboard.analysis.message.removeStockSuccess":"Đã xóa thành công","dashboard.analysis.message.removeStockFailed":"Xóa thất bại","dashboard.analysis.message.resumingAnalysis":"Đang tiếp tục tác vụ phân tích...","dashboard.analysis.message.deleteSuccess":"Đã xóa thành công","dashboard.analysis.message.deleteFailed":"Xóa thất bại","dashboard.analysis.modal.history.delete":"Xóa","dashboard.analysis.modal.history.deleteConfirm":"Bạn có chắc chắn muốn xóa bản ghi phân tích này không?","dashboard.analysis.test":"Cửa hàng đường Gongzhuan {không}","dashboard.analysis.introduce":"Mô tả chỉ báo","dashboard.analysis.total-sales":"Tổng doanh thu","dashboard.analysis.day-sales":"Doanh thu trung bình hàng ngày","dashboard.analysis.visits":"Lượt truy cập","dashboard.analysis.visits-trend":"Lượt truy cập xu hướng","dashboard.analysis.visits-ranking":"Xếp hạng lượt truy cập cửa hàng","dashboard.analysis.day-visits":"Lượt truy cập hàng ngày","dashboard.analysis.week":"Lượt truy cập hàng tuần so với cùng kỳ năm trước","dashboard.analysis.day":"Lượt truy cập hàng ngày so với cùng kỳ năm trước","dashboard.analysis.payments":"Số lượng thanh toán","dashboard.analysis.conversion-rate":"Tỷ lệ chuyển đổi","dashboard.analysis.operational-effect":"Hiệu quả hoạt động","dashboard.analysis.sales-trend":"Xu hướng doanh số","dashboard.analysis.sales-ranking":"Xếp hạng doanh số cửa hàng","dashboard.analysis.all-year":"Quanh năm","dashboard.analysis.all-month":"Tháng này","dashboard.analysis.all-week":"Tuần này","dashboard.analysis.all-day":"Hôm nay","dashboard.analysis.search-users":"Số lượng người dùng tìm kiếm","dashboard.analysis.per-capita-search":"Số lượt tìm kiếm trung bình trên đầu người","dashboard.analysis.online-top-search":"Các từ khóa tìm kiếm trực tuyến phổ biến","dashboard.analysis.the-proportion-of-sales":"Doanh số theo danh mục","dashboard.analysis.dropdown-option-one":"Phương án một","dashboard.analysis.dropdown-option-two":"Phương án hai","dashboard.analysis.channel.all":"Tất cả Kênh","dashboard.analysis.channel.online":"Trực tuyến","dashboard.analysis.channel.stores":"Cửa hàng","dashboard.analysis.sales":"Doanh thu bán hàng","dashboard.analysis.traffic":"Lưu lượng truy cập","dashboard.analysis.table.rank":"Xếp hạng","dashboard.analysis.table.search-keyword":"Từ khóa tìm kiếm","dashboard.analysis.table.users":"Số lượng người dùng","dashboard.analysis.table.weekly-range":"Tăng trưởng hàng tuần","dashboard.indicator.selectSymbol":"Chọn hoặc nhập mã cổ phiếu","dashboard.indicator.emptyWatchlistHint":"Hiện không có cổ phiếu nào trong danh sách theo dõi, vui lòng thêm vào, Đầu tiên","dashboard.indicator.hint.selectSymbol":"Vui lòng chọn cổ phiếu để bắt đầu phân tích","dashboard.indicator.hint.selectSymbolDesc":"Chọn hoặc nhập mã cổ phiếu vào ô tìm kiếm phía trên để xem biểu đồ nến và các chỉ báo kỹ thuật","dashboard.indicator.retry":"Thử lại","dashboard.indicator.panel.title":"Các chỉ báo kỹ thuật","dashboard.indicator.panel.realtimeOn":"Tắt cập nhật thời gian thực","dashboard.indicator.panel.realtimeOff":"Bật cập nhật thời gian thực","dashboard.indicator.panel.themeLight":"Chuyển sang chủ đề tối","dashboard.indicator.panel.themeDark":"Chuyển sang chủ đề sáng theme","dashboard.indicator.section.enabled":"Đã bật","dashboard.indicator.section.added":"Các chỉ báo tôi đã thêm","dashboard.indicator.section.custom":"Chỉ báo do tôi tự tạo","dashboard.indicator.section.bought":"Các chỉ báo tôi đã mua","dashboard.indicator.section.myCreated":"Các chỉ báo tôi đã tạo","dashboard.indicator.empty":"Chưa có chỉ báo nào, vui lòng thêm hoặc tạo chỉ báo trước","dashboard.indicator.buy":"Mua chỉ báo","dashboard.indicator.action.start":"Bắt ​​đầu","dashboard.indicator.action.stop":"Dừng","dashboard.indicator.action.edit":"Chỉnh sửa","dashboard.indicator.action.delete":"Xóa","dashboard.indicator.action.backtest":"Kiểm tra lại","dashboard.indicator.status.normal":"Bình thường","dashboard.indicator.status.normalPermanent":"Bình thường (Có hiệu lực vĩnh viễn)","dashboard.indicator.status.expired":"Đã hết hạn","dashboard.indicator.expiry.permanent":"Có hiệu lực vĩnh viễn","dashboard.indicator.expiry.noExpiry":"Không có ngày hết hạn","dashboard.indicator.expiry.expired":"Đã hết hạn: {date}","dashboard.indicator.expiry.expiresOn":"Ngày hết hạn: {date}","dashboard.indicator.delete.confirmTitle":"Xác nhận xóa","dashboard.indicator.delete.confirmContent":'Bạn có chắc chắn muốn xóa chỉ báo "{name}" không? Thao tác này không thể đảo ngược.',"dashboard.indicator.delete.confirmOk":"Xóa","dashboard.indicator.delete.confirmCancel":"Hủy","dashboard.indicator.delete.success":"Xóa thành công","dashboard.indicator.delete.failed":"Xóa thất bại","dashboard.indicator.save.success":"Lưu thành công","dashboard.indicator.save.failed":"Lưu thất bại","dashboard.indicator.error.loadWatchlistFailed":"Không thể tải danh sách theo dõi","dashboard.indicator.error.chartNotReady":"Thành phần biểu đồ chưa được khởi tạo, vui lòng chọn mục tiêu và đợi biểu đồ tải xong , load","dashboard.indicator.error.chartMethodNotReady":"Phương thức của thành phần biểu đồ chưa sẵn sàng, vui lòng thử lại sau","dashboard.indicator.error.chartExecuteNotReady":"Phương thức thực thi của thành phần biểu đồ chưa sẵn sàng, vui lòng thử lại sau","dashboard.indicator.error.parseFailed":"Không thể phân tích cú pháp mã Python","dashboard.indicator.error.parseFailedCheck":"Không thể phân tích cú pháp mã Python, vui lòng kiểm tra định dạng mã","dashboard.indicator.error.addIndicatorFailed":"Không thể thêm chỉ báo","dashboard.indicator.error.runIndicatorFailed":"Không thể chạy chỉ báo","dashboard.indicator.error.pleaseLogin":"Vui lòng đăng nhập trước","dashboard.indicator.error.loadDataFailed":"Tải dữ liệu thất bại","dashboard.indicator.error.loadDataFailedDesc":"Vui lòng kiểm tra kết nối mạng của bạn","dashboard.indicator.error.pythonEngineFailed":"Không thể tải công cụ Python; chức năng chỉ báo có thể không khả dụng","dashboard.indicator.error.chartInitFailed":"Khởi tạo biểu đồ thất bại","dashboard.indicator.warning.enterCode":"Vui lòng nhập mã chỉ báo trước","dashboard.indicator.warning.pyodideLoadFailed":"Không thể tải công cụ Python","dashboard.indicator.warning.pyodideLoadFailedDesc":"Tính năng này không khả dụng trong khu vực hoặc môi trường mạng hiện tại của bạn","dashboard.indicator.warning.chartNotInitialized":"Biểu đồ chưa được khởi tạo; Công cụ vẽ không khả dụng","dashboard.indicator.success.runIndicator":"Chỉ báo đã chạy thành công","dashboard.indicator.success.clearDrawings":"Đã xóa tất cả các đường","dashboard.indicator.sma":"SMA (Trung bình động ngắn hạn)","dashboard.indicator.ema":"EMA (Trung bình động hàm mũ)","dashboard.indicator.rsi":"RSI (Chỉ số sức mạnh tương đối)","dashboard.indicator.macd":"MACD","dashboard.indicator.bb":"Dải Bollinger (...Dải Bollinger)","dashboard.indicator.atr":"ATR (Chỉ số phạm vi trung bình thực)","dashboard.indicator.cci":"CCI (Chỉ số kênh hàng hóa)","dashboard.indicator.williams":"Williams %R (Chỉ số Williams %R)","dashboard.indicator.mfi":"MFI (Chỉ số dòng tiền)","dashboard.indicator.adx":"ADX (Chỉ số hướng trung bình)","dashboard.indicator.obv":"OBV (Chỉ số khối lượng cân bằng)","dashboard.indicator.adosc":"ADOSC (Chỉ báo dao động tích lũy/phân phối)","dashboard.indicator.ad":"AD (Chỉ báo đường tích lũy/phân phối)","dashboard.indicator.kdj":"KDJ (Chỉ báo ngẫu nhiên)","dashboard.indicator.signal.buy":"MUA","dashboard.indicator.signal.sell":"BÁN","dashboard.indicator.signal.supertrendBuy":"Mua theo xu hướng siêu mạnh","dashboard.indicator.signal.supertrendSell":"Bán theo xu hướng siêu mạnh","dashboard.indicator.chart.kline":"Đường K","dashboard.indicator.chart.volume":"Khối lượng","dashboard.indicator.chart.uptrend":"Xu hướng tăng","dashboard.indicator.chart.downtrend":"Xu hướng giảm","dashboard.indicator.tooltip.time":"Thời gian","dashboard.indicator.tooltip.open":"Mở","dashboard.indicator.tooltip.close":"Đóng","dashboard.indicator.tooltip.high":"Cao","dashboard.indicator.tooltip.low":"Thấp","dashboard.indicator.tooltip.volume":"Khối lượng","dashboard.indicator.drawing.line":"Đoạn thẳng","dashboard.indicator.drawing.horizontalLine":"Đường ngang","dashboard.indicator.drawing.verticalLine":"Đường thẳng đứng","dashboard.indicator.drawing.ray":"Tia","dashboard.indicator.drawing.straightLine":"Đường thẳng","dashboard.indicator.drawing.parallelLine":"Đường song song","dashboard.indicator.drawing.priceLine":"Giá","dashboard.indicator.drawing.priceChannel":"kênh giá","dashboard.indicator.drawing.fibonacciLine":"đường Fibonacci","dashboard.indicator.drawing.measure":"Đo lường","dashboard.indicator.drawing.clearAll":"xóa tất cả các đường đã vẽ","dashboard.indicator.market.USStock":"cổ phiếu Mỹ","dashboard.indicator.market.Crypto":"tiền điện tử","dashboard.indicator.market.Forex":"ngoại hối","dashboard.indicator.market.Futures":"hợp đồng tương lai","dashboard.indicator.create":"Tạo Indicator","dashboard.indicator.editor.title":"Tạo/Chỉnh sửa chỉ báo","dashboard.indicator.editor.name":"Tên chỉ báo","dashboard.indicator.editor.nameRequired":"Vui lòng nhập tên chỉ báo","dashboard.indicator.editor.namePlaceholder":"Vui lòng nhập tên chỉ báo","dashboard.indicator.editor.description":"Mô tả chỉ báo","dashboard.indicator.editor.descriptionPlaceholder":"Vui lòng nhập mô tả chỉ báo (tùy chọn)","dashboard.indicator.editor.code":"Mã Python","dashboard.indicator.editor.codeRequired":"Vui lòng nhập mã chỉ báo","dashboard.indicator.editor.codePlaceholder":"Vui lòng nhập mã Python code","dashboard.indicator.editor.run":"Chạy","dashboard.indicator.editor.runHint":"Nhấp vào nút chạy để xem trước hiệu ứng của chỉ báo trên biểu đồ nến","dashboard.indicator.editor.guide":"Hướng dẫn phát triển","dashboard.indicator.editor.guideTitle":"Hướng dẫn phát triển chỉ báo Python","dashboard.indicator.editor.save":"Lưu","dashboard.indicator.editor.cancel":"Hủy","dashboard.indicator.editor.unnamed":"Chỉ báo chưa được đặt tên","dashboard.indicator.editor.publishToCommunity":"Chia sẻ lên cộng đồng","dashboard.indicator.editor.publishToCommunityHint":"Sau khi chia sẻ, người dùng khác có thể xem và sử dụng các chỉ số của bạn, trong cộng đồng","dashboard.indicator.editor.indicatorType":"Loại chỉ báo","dashboard.indicator.editor.indicatorTypeRequired":"Vui lòng chọn loại chỉ báo","dashboard.indicator.editor.indicatorTypePlaceholder":"Vui lòng chọn loại chỉ báo","dashboard.indicator.editor.previewImage":"Hình ảnh xem trước","dashboard.indicator.editor.uploadImage":"Tải lên hình ảnh","dashboard.indicator.editor.previewImageHint":"Kích thước đề xuất: 800x400, kích thước không vượt quá 2MB","dashboard.indicator.editor.pricing":"Giá (QDT)","dashboard.indicator.editor.pricingType.free":"Miễn phí","dashboard.indicator.editor.pricingType.permanent":"Vĩnh viễn","dashboard.indicator.editor.pricingType.monthly":"Hàng tháng","dashboard.indicator.editor.price":"Giá","dashboard.indicator.editor.priceRequired":"Vui lòng nhập giá","dashboard.indicator.editor.pricePlaceholder":"Vui lòng nhập giá","dashboard.indicator.editor.pricingHint":"Mặc dù chỉ báo miễn phí có giá 0, nền tảng sẽ thưởng cho bạn dựa trên việc sử dụng chỉ báo và tỷ lệ đánh giá tích cực (QDT)","dashboard.indicator.editor.aiGenerate":"Tạo thông minh","dashboard.indicator.editor.aiPromptPlaceholder":"Hãy cho tôi biết ý tưởng của bạn, và Tôi sẽ tạo mã chỉ báo Python cho bạn","dashboard.indicator.editor.aiGenerateBtn":"Mã được tạo bởi AI","dashboard.indicator.editor.aiPromptRequired":"Vui lòng nhập ý tưởng của bạn","dashboard.indicator.editor.aiGenerateSuccess":"Tạo mã thành công","dashboard.indicator.editor.aiGenerateError":"Tạo mã thất bại, vui lòng thử lại sau","dashboard.indicator.backtest.title":"Kiểm thử ngược chỉ báo","dashboard.indicator.backtest.config":"Tham số kiểm thử ngược","dashboard.indicator.backtest.startDate":"Ngày bắt đầu","dashboard.indicator.backtest.endDate":"Ngày kết thúc Ngày","dashboard.indicator.backtest.selectStartDate":"Chọn ngày bắt đầu","dashboard.indicator.backtest.selectEndDate":"Chọn ngày kết thúc","dashboard.indicator.backtest.startDateRequired":"Vui lòng chọn ngày bắt đầu","dashboard.indicator.backtest.endDateRequired":"Vui lòng chọn ngày kết thúc","dashboard.indicator.backtest.initialCapital":"Vốn ban đầu","dashboard.indicator.backtest.initialCapitalRequired":"Vui lòng nhập vốn ban đầu","dashboard.indicator.backtest.commission":"Tỷ lệ hoa hồng","dashboard.indicator.backtest.leverage":"Tỷ lệ đòn bẩy","dashboard.indicator.backtest.tradeDirection":"Hướng giao dịch Hướng","dashboard.indicator.backtest.longOnly":"Mua","dashboard.indicator.backtest.shortOnly":"Bán","dashboard.indicator.backtest.both":"Cả hai chiều","dashboard.indicator.backtest.run":"Bắt ​​đầu kiểm thử ngược","dashboard.indicator.backtest.rerun":"Chạy lại kiểm thử ngược","dashboard.indicator.backtest.close":"Đóng","dashboard.indicator.backtest.running":"Đang tiến hành kiểm thử ngược...","dashboard.indicator.backtest.results":"Kết quả kiểm thử ngược","dashboard.indicator.backtest.totalReturn":"Tổng lợi nhuận","dashboard.indicator.backtest.annualReturn":"Lợi nhuận hàng năm","dashboard.indicator.backtest.maxDrawdown":"Mức giảm tối đa","dashboard.indicator.backtest.sharpeRatio":"Tỷ lệ Sharpe ratio","dashboard.indicator.backtest.winRate":"Tỷ lệ thắng","dashboard.indicator.backtest.profitFactor":"Tỷ lệ lãi/lỗ","dashboard.indicator.backtest.totalTrades":"Số lượng giao dịch","dashboard.indicator.totalReturn":"Tổng lợi nhuận","dashboard.indicator.annualReturn":"Lợi nhuận hàng năm","dashboard.indicator.maxDrawdown":"Mức giảm tối đa","dashboard.indicator.sharpeRatio":"Tỷ lệ Sharpe","dashboard.indicator.winRate":"Tỷ lệ thắng","dashboard.indicator.profitFactor":"Tỷ lệ lãi/lỗ Tỷ lệ","dashboard.indicator.totalTrades":"Tổng số giao dịch","dashboard.indicator.backtest.totalCommission":"Tổng phí hoa hồng","dashboard.indicator.backtest.equityCurve":"Đường cong vốn chủ sở hữu","dashboard.indicator.backtest.strategy":"Lợi nhuận của chỉ báo","dashboard.indicator.backtest.benchmark":"Lợi nhuận chuẩn","dashboard.indicator.backtest.tradeHistory":"Lịch sử giao dịch","dashboard.indicator.backtest.tradeTime":"Thời gian","dashboard.indicator.backtest.tradeType":"Loại giao dịch","dashboard.indicator.backtest.buy":"Mua","dashboard.indicator.backtest.sell":"Bán","dashboard.indicator.backtest.liquidation":"Tài khoản đã bị thanh lý","dashboard.indicator.backtest.openLong":"Mở lệnh mua","dashboard.indicator.backtest.closeLong":"Đóng lệnh mua","dashboard.indicator.backtest.closeLongStop":"Đóng lệnh mua (Cắt lỗ)","dashboard.indicator.backtest.closeLongProfit":"Đóng lệnh mua (Chốt lời)","dashboard.indicator.backtest.addLong":"Thêm lệnh mua","dashboard.indicator.backtest.openShort":"Mở lệnh bán","dashboard.indicator.backtest.closeShort":"Đóng lệnh bán","dashboard.indicator.backtest.closeShortStop":"Đóng lệnh bán (Dừng lỗ) Lỗ","dashboard.indicator.backtest.closeShortProfit":"Đóng vị thế bán khống (chốt lời)","dashboard.indicator.backtest.addShort":"Thêm vị thế bán khống","dashboard.indicator.backtest.price":"Giá","dashboard.indicator.backtest.amount":"Số lượng","dashboard.indicator.backtest.balance":"Số dư tài khoản","dashboard.indicator.backtest.profit":"Lãi/Lỗ","dashboard.indicator.backtest.success":"Kiểm thử ngược thành công","dashboard.indicator.backtest.failed":"Kiểm thử ngược thất bại, vui lòng thử lại sau","dashboard.indicator.backtest.noIndicatorCode":"Không có mã nào để kiểm thử ngược này","dashboard.indicator.backtest.noSymbol":"Vui lòng chọn công cụ giao dịch trước","dashboard.indicator.backtest.dateRangeExceeded":"Thời gian kiểm thử ngược vượt quá giới hạn: chỉ có thể kiểm thử ngược trong khoảng thời gian {timeframe} là {maxRange}","dashboard.indicator.backtest.dateRangeExceededDays":"Backtest range exceeds limit: {timeframe} max {maxRange} ({maxDays} days)","dashboard.indicator.backtest.hint.entryPctMax":"Max entry: {maxPct}% (reserve budget for future scale-ins)","dashboard.indicator.backtest.metaLine":"Symbol: {symbol} | Market: {market} | Timeframe: {timeframe}","dashboard.indicator.backtest.savedRunId":"Backtest saved. Run ID: {id}","dashboard.indicator.backtest.prev":"Previous","dashboard.indicator.backtest.next":"Next","dashboard.indicator.backtest.steps.strategy.title":"Strategy","dashboard.indicator.backtest.steps.strategy.desc":"Position sizing & risk controls","dashboard.indicator.backtest.steps.trading.title":"Trading settings","dashboard.indicator.backtest.steps.trading.desc":"Time range, capital, fees, leverage","dashboard.indicator.backtest.steps.results.title":"Results","dashboard.indicator.backtest.steps.results.desc":"Backtest output","dashboard.indicator.backtest.panel.risk":"Risk management (SL/TP/Trailing)","dashboard.indicator.backtest.panel.scale":"Scale in / DCA (trend & mean-reversion)","dashboard.indicator.backtest.panel.reduce":"Reduce position (trend & adverse)","dashboard.indicator.backtest.panel.position":"Position sizing","dashboard.indicator.backtest.field.stopLossPct":"Stop Loss (%)","dashboard.indicator.backtest.field.takeProfitPct":"Take Profit (%)","dashboard.indicator.backtest.field.trailingEnabled":"Trailing stop / take profit","dashboard.indicator.backtest.field.trailingStopPct":"Trailing drawdown (%)","dashboard.indicator.backtest.field.trailingActivationPct":"Trailing activation (%)","dashboard.indicator.backtest.field.slippage":"Slippage (%)","dashboard.indicator.backtest.field.trendAddEnabled":"Trend-following scale-in","dashboard.indicator.backtest.field.dcaAddEnabled":"Mean-reversion DCA","dashboard.indicator.backtest.field.trendAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.dcaAddStepPct":"DCA trigger (%)","dashboard.indicator.backtest.field.trendAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.dcaAddSizePct":"DCA size (% of capital)","dashboard.indicator.backtest.field.trendAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.dcaAddMaxTimes":"Max DCA times","dashboard.indicator.backtest.field.trendReduceEnabled":"Trend reduce","dashboard.indicator.backtest.field.adverseReduceEnabled":"Adverse reduce","dashboard.indicator.backtest.field.trendReduceStepPct":"Trend trigger (%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"Adverse trigger (%)","dashboard.indicator.backtest.field.trendReduceSizePct":"Reduce size (% of position)","dashboard.indicator.backtest.field.adverseReduceSizePct":"Adverse reduce size (% of position)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"Max trend reduce times","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"Max adverse reduce times","dashboard.indicator.backtest.field.entryPct":"Entry size (% of capital)","dashboard.indicator.backtest.field.minOrderPct":"Min order size (% of capital) (optional)","dashboard.indicator.backtest.closeLongTrailing":"Close Long (Trailing)","dashboard.indicator.backtest.reduceLong":"Reduce Long","dashboard.indicator.backtest.closeShortTrailing":"Close Short (Trailing)","dashboard.indicator.backtest.reduceShort":"Reduce Short","dashboard.docs.title":"Trung tâm Tài liệu","dashboard.docs.search.placeholder":"Tìm kiếm Tài liệu...","dashboard.docs.category.all":"Tất cả","dashboard.docs.category.guide":"Hướng dẫn dành cho nhà phát triển","dashboard.docs.category.api":"Tài liệu API","dashboard.docs.category.tutorial":"Hướng dẫn","dashboard.docs.category.faq":"Câu hỏi thường gặp Câu hỏi","dashboard.docs.featured.title":"Tài liệu được đề xuất","dashboard.docs.featured.tag":"Được đề xuất","dashboard.docs.list.views":"Lượt xem","dashboard.docs.list.author":"Tác giả","dashboard.docs.list.empty":"Không có tài liệu nào","dashboard.docs.list.backToAll":"Trả về tất cả tài liệu","dashboard.docs.list.total":"Tổng số {count} tài liệu","dashboard.docs.detail.back":"Trả về danh sách tài liệu","dashboard.docs.detail.updatedAt":"Cập nhật lúc","dashboard.docs.detail.related":"Tài liệu liên quan","dashboard.docs.detail.notFound":"Không tìm thấy tài liệu tồn tại","dashboard.docs.detail.error":"Tài liệu không tồn tại hoặc đã bị xóa","dashboard.docs.search.result":"Kết quả tìm kiếm","dashboard.docs.search.keyword":"Từ khóa","community.filter.indicatorType":"Loại chỉ báo","community.filter.all":"Tất cả","community.filter.other":"Các tùy chọn khác","community.filter.pricing":"Loại giá","community.filter.allPricing":"Tất cả giá","community.filter.sortBy":"Phương thức sắp xếp","community.filter.search":"Tìm kiếm","community.filter.searchPlaceholder":"Tên chỉ báo tìm kiếm","community.indicatorType.trend":"Định hướng theo xu hướng","community.indicatorType.momentum":"Động lượng","community.indicatorType.volatility":"Biến động","community.indicatorType.volume":"Khối lượng","community.indicatorType.custom":"Tùy chỉnh","community.pricing.free":"Miễn phí","community.pricing.paid":"Trả phí","community.sort.downloads":"Lượt tải xuống","community.sort.rating":"Xếp hạng","community.sort.newest":"Phiên bản mới nhất","community.pagination.total":"Tổng số {total} chỉ báo","community.noDescription":"Không có mô tả","community.detail.type":"Loại","community.detail.pricing":"Giá cả","community.detail.rating":"Xếp hạng","community.detail.downloads":"Lượt tải xuống","community.detail.author":"Tác giả","community.detail.description":"Mô tả","community.detail.detailContent":"Mô tả chi tiết","community.detail.backtestStats":"Thống kê kiểm thử ngược","community.action.purchase":"Số liệu mua hàng","community.action.addToMyIndicators":"Thêm vào chỉ báo của tôi","community.action.favorite":"Yêu thích","community.action.unfavorite":"Bỏ yêu thích","community.action.buyNow":"Mua ngay Ngay bây giờ","community.action.renew":"Gia hạn","community.purchase.price":"Giá","community.purchase.permanent":"Vĩnh viễn","community.purchase.monthly":"Hàng tháng","community.purchase.confirmBuy":"Xác nhận mua chỉ số này ({price} QDT)?","community.purchase.confirmRenew":"Xác nhận gia hạn chỉ số này ({price} QDT/tháng)?","community.purchase.confirmFree":"Xác nhận thêm chỉ số miễn phí này?","community.purchase.confirmTitle":"Xác nhận thao tác","community.purchase.owned":"Bạn đã mua chỉ số này (có hiệu lực vĩnh viễn)","community.purchase.ownIndicator":"Đây là chỉ số bạn đã công bố","community.purchase.expired":"Gói đăng ký của bạn đã hết hạn","community.purchase.expiresOn":"Ngày hết hạn: {date}","community.tabs.detail":"Chi tiết chỉ số","community.tabs.backtest":"Dữ liệu kiểm thử ngược","community.tabs.ratings":"Xếp hạng người dùng","community.rating.myRating":"Xếp hạng của tôi","community.rating.stars":"{count} Stars","community.rating.commentPlaceholder":"Chia sẻ trải nghiệm người dùng của bạn...","community.rating.submit":"Gửi đánh giá","community.rating.modify":"Sửa đổi","community.rating.saveModify":"Lưu thay đổi","community.rating.cancel":"Hủy","community.rating.selectRating":"Vui lòng chọn đánh giá","community.rating.success":"Đánh giá thành công","community.rating.modifySuccess":"Đánh giá được sửa đổi thành công","community.rating.failed":"Đánh giá thất bại","community.rating.noRatings":"Chưa có đánh giá nào","community.backtest.note":"Dữ liệu trên là kết quả kiểm thử ngược trong quá khứ, chỉ để tham khảo và không đại diện cho hiệu suất trong tương lai","community.backtest.noData":"Không có dữ liệu kiểm thử ngược","community.backtest.uploadHint":"Tác giả chưa tải lên dữ liệu kiểm thử ngược","community.message.loadFailed":"Không thể tải danh sách chỉ báo","community.message.purchaseProcessing":"Đang xử lý yêu cầu mua hàng...","community.message.downloadSuccess":"Chỉ báo đã được thêm vào danh sách chỉ báo của tôi","community.message.favoriteSuccess":"Đã thêm vào mục yêu thích thành công","community.message.unfavoriteSuccess":"Đã xóa khỏi mục yêu thích thành công","community.message.operationSuccess":"Thao tác thành công","community.message.operationFailed":"Thao tác thất bại thất bại","community.banner.readOnly":"Chỉ xem","community.banner.loginHint":"Để đăng nhập hoặc đăng ký, vui lòng nhấp vào nút để chuyển đến trang độc lập nhằm tránh các vấn đề CSRF","community.banner.jumpButton":"Đi đến Đăng nhập/Đăng ký","dashboard.totalEquity":"Tổng vốn chủ sở hữu","dashboard.totalPnL":"Tổng lợi nhuận/thua lỗ","dashboard.aiStrategies":"Chiến lược AI","dashboard.indicatorStrategies":"Chiến lược chỉ báo","dashboard.running":"Đang chạy","dashboard.pnlHistory":"Lịch sử lợi nhuận/thua lỗ","dashboard.strategyPerformance":"Tỷ lệ lợi nhuận/thua lỗ của chiến lược","dashboard.recentTrades":"Các giao dịch gần đây","dashboard.currentPositions":"Vị thế hiện tại","dashboard.table.time":"Thời gian","dashboard.table.strategy":"Chiến lược Name","dashboard.table.symbol":"Tài sản cơ sở","dashboard.table.type":"Loại","dashboard.table.side":"Hướng","dashboard.table.size":"Số lượng","dashboard.table.entryPrice":"Giá mở cửa trung bình","dashboard.table.price":"Giá","dashboard.table.amount":"Số lượng","dashboard.table.profit":"Lợi nhuận/Thua lỗ","dashboard.pendingOrders":"Lịch sử thực hiện lệnh","dashboard.totalOrders":"Tổng {total} lệnh","dashboard.viewError":"Xem lỗi","dashboard.filled":"Đã khớp","dashboard.orderTable.time":"Thời gian tạo","dashboard.orderTable.strategy":"Chiến lược","dashboard.orderTable.symbol":"Cặp giao dịch","dashboard.orderTable.signalType":"Loại tín hiệu","dashboard.orderTable.amount":"Số lượng","dashboard.orderTable.price":"Giá khớp","dashboard.orderTable.status":"Trạng thái","dashboard.orderTable.executedAt":"Thời gian thực hiện","dashboard.signalType.openLong":"Mở Long","dashboard.signalType.openShort":"Mở Short","dashboard.signalType.closeLong":"Đóng Long","dashboard.signalType.closeShort":"Đóng Short","dashboard.signalType.addLong":"Thêm Long","dashboard.signalType.addShort":"Thêm Short","dashboard.status.pending":"Đang chờ","dashboard.status.processing":"Đang xử lý","dashboard.status.completed":"Hoàn thành","dashboard.status.failed":"Thất bại","dashboard.status.cancelled":"Đã hủy","dashboard.table.pnl":"Lợi nhuận/Thua lỗ chưa thực hiện","form.basic-form.basic.title":"Biểu mẫu cơ bản","form.basic-form.basic.description":"Các trang biểu mẫu được sử dụng để thu thập hoặc xác minh thông tin từ người dùng. Biểu mẫu cơ bản thường phổ biến trong các trường hợp có ít mục dữ liệu.","form.basic-form.title.label":"Tiêu đề","form.basic-form.title.placeholder":"Đặt tên cho mục tiêu","form.basic-form.title.required":"Vui lòng nhập tiêu đề","form.basic-form.date.label":"Ngày bắt đầu và ngày kết thúc","form.basic-form.placeholder.start":"Ngày bắt đầu","form.basic-form.placeholder.end":"Ngày kết thúc","form.basic-form.date.required":"Vui lòng chọn ngày bắt đầu và ngày kết thúc","form.basic-form.goal.label":"Mô tả mục tiêu","form.basic-form.goal.placeholder":"Vui lòng nhập mục tiêu công việc theo từng giai đoạn","form.basic-form.goal.required":"Vui lòng nhập mục tiêu Mô tả","form.basic-form.standard.label":"Số liệu","form.basic-form.standard.placeholder":"Vui lòng nhập số liệu","form.basic-form.standard.required":"Vui lòng nhập số liệu","form.basic-form.client.label":"Khách hàng","form.basic-form.client.required":"Vui lòng mô tả khách hàng bạn đang phục vụ","form.basic-form.label.tooltip":"Đối tượng mục tiêu","form.basic-form.client.placeholder":"Vui lòng mô tả khách hàng bạn đang phục vụ; khách hàng nội bộ có thể trực tiếp là @tên/ID nhân viên","form.basic-form.invites.label":"Người mời","form.basic-form.invites.placeholder":"Vui lòng trực tiếp là @tên/ID nhân viên; Có thể mời tối đa 5 người","form.basic-form.weight.label":"Trọng lượng","form.basic-form.weight.placeholder":"Vui lòng nhập","form.basic-form.public.label":"Mục tiêu công khai","form.basic-form.label.help":"Khách hàng và người đánh giá được chia sẻ theo mặc định","form.basic-form.radio.public":"Công khai","form.basic-form.radio.partially-public":"Công khai một phần","form.basic-form.radio.private":"Không công khai","form.basic-form.publicUsers.placeholder":"Công khai cho","form.basic-form.option.A":"Đồng nghiệp 1","form.basic-form.option.B":"Đồng nghiệp 2","form.basic-form.option.C":"Đồng nghiệp số Ba","form.basic-form.email.required":"Vui lòng nhập địa chỉ email của bạn!","form.basic-form.email.wrong-format":"Định dạng địa chỉ email không chính xác!","form.basic-form.userName.required":"Vui lòng nhập tên người dùng của bạn!","form.basic-form.password.required":"Vui lòng nhập mật khẩu của bạn!","form.basic-form.password.twice":"Hai mật khẩu không khớp!","form.basic-form.strength.msg":"Vui lòng nhập ít nhất 6 ký tự. Vui lòng không sử dụng mật khẩu dễ đoán.","form.basic-form.strength.strong":"Độ mạnh: Mạnh","form.basic-form.strength.medium":"Độ mạnh: Trung bình","form.basic-form.strength.short":"Độ mạnh: Quá ngắn","form.basic-form.confirm-password.required":"Vui lòng xác nhận mật khẩu!","form.basic-form.phone-number.required":"Vui lòng nhập số điện thoại của bạn!","form.basic-form.phone-number.wrong-format":"Định dạng số điện thoại không chính xác!","form.basic-form.verification-code.required":"Vui lòng nhập mã xác minh!","form.basic-form.form.get-captcha":"Lấy mã xác minh mã","form.basic-form.captcha.second":"giây","form.basic-form.form.optional":"(Tùy chọn)","form.basic-form.form.submit":"Gửi","form.basic-form.form.save":"Lưu","form.basic-form.email.placeholder":"Email","form.basic-form.password.placeholder":"Mật khẩu phải có ít nhất 6 ký tự, phân biệt chữ hoa chữ thường","form.basic-form.confirm-password.placeholder":"Xác nhận mật khẩu","form.basic-form.phone-number.placeholder":"Số điện thoại","form.basic-form.verification-code.placeholder":"Mã xác minh","result.success.title":"Đã gửi Thành công","result.success.description":'Trang kết quả nộp bài được sử dụng để cung cấp phản hồi về kết quả xử lý của một loạt các tác vụ vận hành. Nếu chỉ là một thao tác đơn giản, thông báo Tin nhắn toàn cục là đủ. Vùng văn bản này có thể hiển thị các giải thích bổ sung đơn giản. Nếu cần hiển thị nội dung như một "tài liệu", vùng màu xám bên dưới có thể hiển thị nội dung phức tạp hơn.',"result.success.operate-title":"Tên dự án","result.success.operate-id":"ID dự án","result.success.principal":"Người phụ trách","result.success.operate-time":"Thời gian hiệu quả","result.success.step1-title":"Tạo dự án","result.success.step1-operator":"Qu Lili","result.success.step2-title":"Đánh giá ban đầu của phòng ban","result.success.step2-operator":"Zhou Maomao","result.success.step2-extra":"Theo dõi","result.success.step3-title":"Đánh giá tài chính","result.success.step4-title":"Hoàn thành","result.success.btn-return":"Quay lại danh sách","result.success.btn-project":"Xem dự án","result.success.btn-print":"In","result.fail.error.title":"Gửi bài không thành công","result.fail.error.description":"Vui lòng kiểm tra và chỉnh sửa thông tin sau trước khi gửi lại.","result.fail.error.hint-title":"Nội dung bạn đã gửi có các lỗi sau:","result.fail.error.hint-text1":"Tài khoản của bạn đã bị đóng băng","result.fail.error.hint-btn1":"Mở khóa ngay lập tức","result.fail.error.hint-text2":"Tài khoản của bạn chưa đủ điều kiện để đăng ký","result.fail.error.hint-btn2":"Nâng cấp ngay lập tức","result.fail.error.btn-text":"Quay lại chỉnh sửa","account.settings.menuMap.custom":"Cá nhân hóa","account.settings.menuMap.binding":"Liên kết tài khoản","account.settings.basic.avatar":"Avatar","account.settings.basic.change-avatar":"Thay đổi ảnh đại diện","account.settings.basic.email":"Địa chỉ email","account.settings.basic.email-message":"Vui lòng nhập địa chỉ email của bạn!","account.settings.basic.nickname":"Biệt danh","account.settings.basic.nickname-message":"Vui lòng nhập biệt danh của bạn!","account.settings.basic.profile":"Hồ sơ","account.settings.basic.profile-message":"Vui lòng nhập thông tin hồ sơ của bạn!","account.settings.basic.profile-placeholder":"Hồ sơ","account.settings.basic.country":"Quốc gia/Vùng","account.settings.basic.country-message":"Vui lòng nhập quốc gia của bạn hoặc khu vực!","account.settings.basic.geographic":"Tỉnh và Thành phố","account.settings.basic.geographic-message":"Vui lòng nhập tỉnh và thành phố của bạn!","account.settings.basic.address":"Địa chỉ đường phố","account.settings.basic.address-message":"Vui lòng nhập địa chỉ đường phố của bạn!","account.settings.basic.phone":"Số điện thoại","account.settings.basic.phone-message":"Vui lòng nhập số điện thoại của bạn!","account.settings.basic.update":"Cập nhật thông tin cơ bản","account.settings.basic.update.success":"Đã cập nhật thông tin cơ bản thành công","account.settings.security.strong":"Mạnh","account.settings.security.medium":"Trung bình","account.settings.security.weak":"Yếu","account.settings.security.password":"Mật khẩu tài khoản","account.settings.security.password-description":"Độ mạnh mật khẩu hiện tại:","account.settings.security.phone":"Số điện thoại bảo mật","account.settings.security.phone-description":"Số điện thoại liên kết:","account.settings.security.question":"Câu hỏi bảo mật","account.settings.security.question-description":"Chưa thiết lập câu hỏi bảo mật nào. Câu hỏi bảo mật có thể bảo vệ hiệu quả tính bảo mật của tài khoản","account.settings.security.email":"Email liên kết","account.settings.security.email-description":"Số email liên kết:","account.settings.security.mfa":"Thiết bị MFA","account.settings.security.mfa-description":"Thiết bị MFA chưa liên kết. Việc liên kết sẽ cho phép xác nhận thứ cấp","account.settings.security.modify":"Sửa đổi","account.settings.security.set":"Cài đặt","account.settings.security.bind":"Liên kết","account.settings.binding.taobao":"Liên kết Taobao","account.settings.binding.taobao-description":"Hiện chưa được liên kết với tài khoản Taobao","account.settings.binding.alipay":"Liên kết Alipay","account.settings.binding.alipay-description":"Hiện chưa được liên kết với tài khoản Alipay","account.settings.binding.dingding":"Liên kết DingTalk","account.settings.binding.dingding-description":"Hiện chưa được liên kết với tài khoản DingTalk","account.settings.binding.bind":"Liên kết","account.settings.notification.password":"Mật khẩu tài khoản","account.settings.notification.password-description":"Tin nhắn từ người dùng khác sẽ được gửi qua thông báo trong ứng dụng","account.settings.notification.messages":"Tin nhắn hệ thống","account.settings.notification.messages-description":"Tin nhắn hệ thống sẽ được gửi qua thông báo trong ứng dụng","account.settings.notification.todo":"Việc cần làm","account.settings.notification.todo-description":"Việc cần làm sẽ được gửi qua thông báo trong ứng dụng","account.settings.settings.open":"Bật","account.settings.settings.close":"Tắt","trading-assistant.title":"Trợ lý giao dịch","trading-assistant.strategyList":"Chiến lược Danh sách","trading-assistant.createStrategy":"Tạo chiến lược","trading-assistant.noStrategy":"Không có chiến lược nào","trading-assistant.selectStrategy":"Chọn một chiến lược từ bên trái để xem chi tiết","trading-assistant.startStrategy":"Bắt ​​đầu chiến lược","trading-assistant.stopStrategy":"Dừng chiến lược","trading-assistant.editStrategy":"Chỉnh sửa chiến lược","trading-assistant.deleteStrategy":"Xóa chiến lược","trading-assistant.status.running":"Đang chạy","trading-assistant.status.stopped":"Đã dừng","trading-assistant.status.error":"Lỗi","trading-assistant.strategyType.IndicatorStrategy":"Chỉ báo kỹ thuật Chiến lược","trading-assistant.strategyType.PromptBasedStrategy":"Chiến lược dựa trên lời nhắc","trading-assistant.strategyType.GridStrategy":"Chiến lược lưới","trading-assistant.tabs.tradingRecords":"Hồ sơ giao dịch","trading-assistant.tabs.positions":"Vị thế","trading-assistant.tabs.equityCurve":"Đường cong vốn chủ sở hữu","trading-assistant.form.step1":"Chọn chỉ báo","trading-assistant.form.step2":"Cấu hình sàn giao dịch","trading-assistant.form.step3":"Tham số chiến lược","trading-assistant.form.indicator":"Chọn chỉ báo","trading-assistant.form.indicatorHint":"Chỉ chọn các chỉ báo kỹ thuật bạn muốn đã mua hoặc tạo","trading-assistant.form.qdtCostHints":"Việc sử dụng chiến lược này sẽ tiêu tốn QDT; vui lòng đảm bảo tài khoản của bạn có đủ số dư QDT","trading-assistant.form.indicatorDescription":"Mô tả chỉ báo","trading-assistant.form.noDescription":"Không có mô tả","trading-assistant.form.exchange":"Chọn sàn giao dịch","trading-assistant.form.apiKey":"Khóa API","trading-assistant.form.secretKey":"Khóa bí mật","trading-assistant.form.passphrase":"Mật khẩu","trading-assistant.form.testConnection":"Kiểm tra kết nối","trading-assistant.form.strategyName":"Tên chiến lược","trading-assistant.form.symbol":"Cặp giao dịch","trading-assistant.form.symbolHint":"Hiện tại chỉ hỗ trợ các cặp giao dịch tiền điện tử","trading-assistant.form.initialCapital":"Vốn ban đầu","trading-assistant.form.marketType":"Loại thị trường","trading-assistant.form.marketTypeFutures":"Hợp đồng tương lai","trading-assistant.form.marketTypeSpot":"Giao dịch giao ngay","trading-assistant.form.marketTypeHint":"Hợp đồng hỗ trợ giao dịch hai chiều và đòn bẩy; Giao dịch giao ngay chỉ hỗ trợ vị thế mua với đòn bẩy cố định là 1x","trading-assistant.form.leverage":"Tỷ lệ đòn bẩy","trading-assistant.form.leverageHint":"Hợp đồng: 1-125x, Giao ngay: Cố định 1x","trading-assistant.form.spotLeverageFixed":"Đòn bẩy giao dịch giao ngay được cố định ở mức 1x","trading-assistant.form.spotOnlyLongHint":"Giao dịch giao ngay chỉ hỗ trợ vị thế mua","trading-assistant.form.tradeDirection":"Hướng giao dịch","trading-assistant.form.tradeDirectionLong":"Chỉ mua","trading-assistant.form.tradeDirectionShort":"Chỉ bán","trading-assistant.form.tradeDirectionBoth":"Hai chiều giao dịch","trading-assistant.form.timeframe":"Khung thời gian","trading-assistant.form.klinePeriod":"Chu kỳ K-Line","trading-assistant.form.timeframe1m":"1 phút","trading-assistant.form.timeframe5m":"5 phút","trading-assistant.form.timeframe15m":"15 phút","trading-assistant.form.timeframe30m":"30 phút","trading-assistant.form.timeframe1H":"1 giờ","trading-assistant.form.timeframe4H":"4 giờ","trading-assistant.form.timeframe1D":"1 ngày","trading-assistant.form.selectStrategyType":"Chọn loại chiến lược","trading-assistant.form.indicatorStrategy":"Chiến lược chỉ báo","trading-assistant.form.indicatorStrategyDesc":"Chiến lược giao dịch tự động dựa trên chỉ báo kỹ thuật","trading-assistant.form.aiStrategy":"Chiến lược AI","trading-assistant.form.aiStrategyDesc":"Chiến lược giao dịch tự động dựa trên quyết định thông minh AI","trading-assistant.form.enableAiFilter":"Bật bộ lọc quyết định thông minh AI","trading-assistant.form.enableAiFilterHint":"Khi bật, tín hiệu chỉ báo sẽ được lọc bởi AI để cải thiện chất lượng giao dịch","trading-assistant.form.aiFilterPrompt":"Lời nhắc tùy chỉnh","trading-assistant.form.aiFilterPromptHint":"Cung cấp hướng dẫn tùy chỉnh cho bộ lọc AI, để trống để sử dụng mặc định hệ thống","trading-assistant.validation.strategyTypeRequired":"Vui lòng chọn loại chiến lược","trading-assistant.form.advancedSettings":"Cài đặt nâng cao","trading-assistant.form.orderMode":"Chế độ đặt lệnh","trading-assistant.form.orderModeMaker":"Maker","trading-assistant.form.orderModeTaker":"Giá thị trường","trading-assistant.form.orderModeHint":"Chế độ Maker sử dụng lệnh giới hạn, phí thấp hơn; chế độ Market thực hiện ngay lập tức, phí cao hơn","trading-assistant.form.makerWaitSec":"Thời gian chờ của Maker (giây)","trading-assistant.form.makerWaitSecHint":"Thời gian chờ sau khi đặt lệnh; ","trading-assistant.form.makerRetries":"Số lần thử lại cho lệnh maker","trading-assistant.form.makerRetriesHint":"Số lần thử lại tối đa nếu lệnh maker không được khớp","trading-assistant.form.fallbackToMarket":"Hạ cấp lệnh maker thất bại xuống giá thị trường","trading-assistant.form.fallbackToMarketHint":"Có nên hạ cấp các lệnh mở/đóng đang chờ xử lý thành lệnh thị trường để đảm bảo thực hiện khi chúng không được khớp hay không","trading-assistant.form.marginMode":"Chế độ ký quỹ","trading-assistant.form.marginModeCross":"Ký quỹ chéo","trading-assistant.form.marginModeIsolated":"Ký quỹ riêng biệt Ký quỹ","trading-assistant.form.stopLossPct":"Tỷ lệ cắt lỗ (%)","trading-assistant.form.stopLossPctHint":"Thiết lập tỷ lệ cắt lỗ; 0 cho biết lệnh dừng lỗ không được bật","trading-assistant.form.takeProfitPct":"Tỷ lệ chốt lời (%)","trading-assistant.form.takeProfitPctHint":"Thiết lập tỷ lệ chốt lời, 0 cho biết lệnh chốt lời không được bật","trading-assistant.form.signalMode":"Chế độ tín hiệu","trading-assistant.form.signalModeConfirmed":"Chế độ xác nhận","trading-assistant.form.signalModeAggressive":"Chế độ giao dịch tích cực","trading-assistant.form.signalModeHint":"Chế độ xác nhận: Chỉ kiểm tra các nến đã hoàn thành; Chế độ giao dịch tích cực: Kiểm tra cả việc hình thành nến","trading-assistant.form.cancel":"Hủy","trading-assistant.form.prev":"Bước trước","trading-assistant.form.next":"Bước tiếp theo","trading-assistant.form.confirmCreate":"Xác nhận tạo","trading-assistant.form.confirmEdit":"Xác nhận chỉnh sửa","trading-assistant.messages.createSuccess":"Tạo chiến lược thành công","trading-assistant.messages.createFailed":"Tạo chiến lược thất bại","trading-assistant.messages.updateSuccess":"Cập nhật chiến lược thành công","trading-assistant.messages.updateFailed":"Cập nhật chiến lược thất bại","trading-assistant.messages.deleteSuccess":"Xóa chiến lược thành công","trading-assistant.messages.deleteFailed":"Xóa chiến lược thất bại","trading-assistant.messages.startSuccess":"Khởi động chiến lược thành công","trading-assistant.messages.startFailed":"Khởi động chiến lược thất bại","trading-assistant.messages.stopSuccess":"Chính sách đã dừng thành công","trading-assistant.messages.stopFailed":"Dừng chính sách thất bại","trading-assistant.messages.loadFailed":"Không thể tải danh sách chính sách","trading-assistant.messages.runningWarning":"Chính sách đang chạy, vui lòng dừng chính sách trước khi sửa đổi","trading-assistant.messages.deleteConfirmWithName":'Bạn có chắc chắn muốn xóa chính sách "{name}" không? Thao tác này không thể đảo ngược.',"trading-assistant.messages.deleteConfirm":"Bạn có chắc chắn muốn xóa chính sách này không? Thao tác này không thể đảo ngược.","trading-assistant.messages.loadTradesFailed":"Không thể truy xuất hồ sơ giao dịch","trading-assistant.messages.loadPositionsFailed":"Không thể truy xuất hồ sơ vị thế","trading-assistant.messages.loadEquityFailed":"Không thể truy xuất đường cong vốn chủ sở hữu","trading-assistant.messages.loadIndicatorsFailed":"Không thể tải danh sách chỉ báo, vui lòng thử lại sau","trading-assistant.messages.spotLimitations":"Giao dịch giao ngay đã được tự động thiết lập chỉ mua, đòn bẩy 1x","trading-assistant.messages.autoFillApiConfig":"Cấu hình API lịch sử cho sàn giao dịch này đã được tự động điền","trading-assistant.placeholders.selectIndicator":"Vui lòng chọn một chỉ báo indicator","trading-assistant.placeholders.selectExchange":"Vui lòng chọn một sàn giao dịch","trading-assistant.placeholders.inputApiKey":"Vui lòng nhập Khóa API","trading-assistant.placeholders.inputSecretKey":"Vui lòng nhập Khóa bí mật","trading-assistant.placeholders.inputPassphrase":"Vui lòng nhập Mật khẩu","trading-assistant.placeholders.inputStrategyName":"Vui lòng nhập tên chiến lược","trading-assistant.placeholders.selectSymbol":"Vui lòng chọn một cặp giao dịch","trading-assistant.placeholders.selectTimeframe":"Vui lòng chọn một khung thời gian","trading-assistant.placeholders.selectKlinePeriod":"Vui lòng chọn chu kỳ K-Line","trading-assistant.placeholders.inputAiFilterPrompt":"Vui lòng nhập lời nhắc tùy chỉnh (tùy chọn)","trading-assistant.validation.indicatorRequired":"Vui lòng chọn một chỉ báo","trading-assistant.validation.exchangeRequired":"Vui lòng chọn một sàn giao dịch","trading-assistant.validation.apiKeyRequired":"Vui lòng nhập Khóa API","trading-assistant.validation.secretKeyRequired":"Vui lòng nhập Khóa bí mật","trading-assistant.validation.passphraseRequired":"Vui lòng nhập Mật khẩu","trading-assistant.validation.exchangeConfigIncomplete":"Vui lòng điền đầy đủ thông tin cấu hình sàn giao dịch","trading-assistant.validation.testConnectionRequired":'Vui lòng nhấp vào nút "Kiểm tra kết nối" và đảm bảo kết nối thành công',"trading-assistant.validation.testConnectionFailed":"Kiểm tra kết nối thất bại, vui lòng kiểm tra cấu hình và thử lại","trading-assistant.validation.credentialRequired":"Vui lòng thêm và kiểm tra thông tin đăng nhập sàn giao dịch trong Trung tâm Cá nhân trước","trading-assistant.validation.strategyNameRequired":"Vui lòng nhập tên chiến lược","trading-assistant.validation.symbolRequired":"Vui lòng chọn một cặp giao dịch ...apiKeyRequired","trading-assistant.apiKeyRequired":"Vui lòng Nhập khóa API","trading-assistant.validation.initialCapitalRequired":"Vui lòng nhập vốn ban đầu","trading-assistant.validation.leverageRequired":"Vui lòng nhập tỷ lệ đòn bẩy","trading-assistant.table.time":"Thời gian","trading-assistant.table.type":"Loại","trading-assistant.table.price":"Giá","trading-assistant.table.amount":"Số tiền","trading-assistant.table.value":"Số tiền","trading-assistant.table.commission":"Phí hoa hồng","trading-assistant.table.symbol":"Cặp giao dịch","trading-assistant.table.side":"Hướng","trading-assistant.table.size":"Vị thế kích thước","trading-assistant.table.entryPrice":"Giá vào lệnh","trading-assistant.table.currentPrice":"Giá hiện tại","trading-assistant.table.unrealizedPnl":"Lợi nhuận/Thua lỗ chưa thực hiện","trading-assistant.table.pnlPercent":"Tỷ lệ lợi nhuận/thua lỗ","trading-assistant.table.buy":"Mua","trading-assistant.table.sell":"Bán","trading-assistant.table.long":"Mua","trading-assistant.table.short":"Bán","trading-assistant.table.noPositions":"Không có vị thế","trading-assistant.detail.title":"Chi tiết chiến lược","trading-assistant.detail.strategyName":"Chiến lược Tên","trading-assistant.detail.strategyType":"Loại chiến lược","trading-assistant.detail.status":"Trạng thái","trading-assistant.detail.tradingMode":"Chế độ giao dịch","trading-assistant.detail.exchange":"Sàn giao dịch","trading-assistant.detail.initialCapital":"Vốn ban đầu","trading-assistant.detail.totalInvestment":"Tổng vốn đầu tư","trading-assistant.detail.currentEquity":"Vốn chủ sở hữu hiện tại","trading-assistant.detail.totalPnl":"Tổng lợi nhuận/thua lỗ","trading-assistant.detail.indicatorName":"Tên chỉ báo","trading-assistant.detail.maxLeverage":"Đòn bẩy tối đa Đòn bẩy","trading-assistant.detail.decideInterval":"Khoảng thời gian quyết định","trading-assistant.detail.symbols":"Công cụ giao dịch","trading-assistant.detail.createdAt":"Thời gian tạo","trading-assistant.detail.updatedAt":"Thời gian cập nhật","trading-assistant.detail.llmConfig":"Cấu hình mô hình AI","trading-assistant.detail.exchangeConfig":"Cấu hình sàn giao dịch","trading-assistant.detail.provider":"Nhà cung cấp","trading-assistant.detail.modelId":"ID mô hình","trading-assistant.detail.close":"Đóng","trading-assistant.detail.loadFailed":"Không thể truy xuất chiến lược chi tiết","trading-assistant.equity.noData":"Không có dữ liệu giá trị tài sản ròng","trading-assistant.equity.equity":"Giá trị tài sản ròng","trading-assistant.exchange.tradingMode":"Chế độ giao dịch","trading-assistant.exchange.virtual":"Giao dịch thử nghiệm","trading-assistant.exchange.live":"Giao dịch trực tiếp","trading-assistant.exchange.selectExchange":"Chọn sàn giao dịch","trading-assistant.exchange.walletAddress":"Địa chỉ ví","trading-assistant.exchange.walletAddressPlaceholder":"Vui lòng nhập địa chỉ ví của bạn (bắt đầu bằng 0x)","trading-assistant.exchange.privateKey":"Khóa riêng tư","trading-assistant.exchange.privateKeyPlaceholder":"Vui lòng nhập khóa riêng tư của bạn (64 ký tự)","trading-assistant.exchange.testConnection":"Kiểm tra kết nối","trading-assistant.exchange.connectionSuccess":"Kết nối thành công","trading-assistant.exchange.connectionFailed":"Kết nối thất bại","trading-assistant.exchange.testFailed":"Kiểm tra kết nối thất bại","trading-assistant.exchange.fillComplete":"Vui lòng điền đầy đủ thông tin cấu hình sàn giao dịch","trading-assistant.strategyTypeOptions.ai":"Chiến lược dựa trên AI","trading-assistant.strategyTypeOptions.indicator":"Chiến lược chỉ báo kỹ thuật","trading-assistant.strategyTypeOptions.aiDeveloping":"Chức năng chiến lược dựa trên AI đang được phát triển, hãy theo dõi","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"Chức năng chiến lược dựa trên AI đang được phát triển","trading-assistant.indicatorType.trend":"Xu hướng","trading-assistant.indicatorType.momentum":"Động lượng","trading-assistant.indicatorType.volatility":"Biến động","trading-assistant.indicatorType.volume":"Khối lượng","trading-assistant.indicatorType.custom":"Tùy chỉnh","trading-assistant.exchangeNames":{okx:"OKX",binance:"Binance",hyperliquid:"Hyperliquid",blockchaincom:"Blockchain.com",coinbaseexchange:"Coinbase",gate:"Gate.io",mexc:"MEXC",kraken:"Kraken",bitfinex:"Bitfinex",bybit:"Bybit",kucoin:"KuCoin",huobi:"Huobi",bitget:"Bitget",bitmex:"BitMEX","gạch từ":"Dựa trên",phemex:"Phemex",bitmart:"BitMart",bitstamp:"Bitstamp",bittrex:"Bittrex",poloniex:"Poloniex","song tử":"song tử","tiền điện tử":"Crypto.com",bitflyer:"bitFlyer",upbit:"Upbit",bithumb:"Bithumb",coinone:"Coinone",zb:"ZB","ngân hàng":"LBank",bibox:"Bibox",bigone:"BigONE",bitrue:"Bitrue",coinex:"CoinEx",digifinex:"DigiFinex",ftx:"FTX",ftxus:"FTX US",binanceus:"Binance US",binancecoinm:"Binance COIN-M",binanceusdm:"Binance USDⓈ-M",deepcoin:"Deepcoin"},"ai-trading-assistant.title":"Trợ lý giao dịch AI","ai-trading-assistant.strategyList":"Danh sách chiến lược","ai-trading-assistant.createStrategy":"Tạo chiến lược","ai-trading-assistant.noStrategy":"Không có chiến lược Có sẵn","ai-trading-assistant.selectStrategy":"Chọn chiến lược từ bên trái để xem chi tiết","ai-trading-assistant.startStrategy":"Bắt ​​đầu chiến lược","ai-trading-assistant.stopStrategy":"Dừng chiến lược","ai-trading-assistant.editStrategy":"Chỉnh sửa chiến lược","ai-trading-assistant.deleteStrategy":"Xóa chiến lược","ai-trading-assistant.status.running":"Đang chạy","ai-trading-assistant.status.stopped":"Đã dừng","ai-trading-assistant.status.error":"Lỗi","ai-trading-assistant.tabs.tradingRecords":"Hồ sơ giao dịch","ai-trading-assistant.tabs.positions":"Vị thế","ai-trading-assistant.tabs.aiDecisions":"Bản ghi quyết định của AI","ai-trading-assistant.tabs.equityCurve":"Đường cong vốn chủ sở hữu","ai-trading-assistant.form.createTitle":"Tạo chiến lược giao dịch AI","ai-trading-assistant.form.editTitle":"Chỉnh sửa chiến lược giao dịch AI","ai-trading-assistant.form.strategyName":"Tên chiến lược","ai-trading-assistant.form.modelId":"Mô hình AI","ai-trading-assistant.form.modelIdHint":"Sử dụng dịch vụ OpenRouter của hệ thống; Không cần cấu hình khóa API","ai-trading-assistant.form.decideInterval":"Khoảng thời gian quyết định","ai-trading-assistant.form.decideInterval5m":"5 phút","ai-trading-assistant.form.decideInterval10m":"10 phút","ai-trading-assistant.form.decideInterval30m":"30 phút","ai-trading-assistant.form.decideInterval1h":"1 giờ","ai-trading-assistant.form.decideInterval4h":"4 giờ","ai-trading-assistant.form.decideInterval1d":"1 ngày","ai-trading-assistant.form.decideInterval1w":"1 tuần","ai-trading-assistant.form.decideIntervalHint":"Khoảng thời gian cho AI để đưa ra quyết định","ai-trading-assistant.form.runPeriod":"Thời gian chạy","ai-trading-assistant.form.runPeriodHint":"Thời gian bắt đầu và kết thúc của chiến lược","ai-trading-assistant.form.startDate":"Ngày bắt đầu","ai-trading-assistant.form.endDate":"Ngày kết thúc","ai-trading-assistant.form.qdtCostTitle":"Mô tả chi phí QDT","ai-trading-assistant.form.qdtCostHint":"Mỗi quyết định của AI sẽ có giá {cost} QDT. Vui lòng đảm bảo tài khoản của bạn có đủ số dư QDT. Chi phí sẽ được trừ theo thời gian thực cho mỗi quyết định trong quá trình chạy chiến lược.","ai-trading-assistant.form.apiKey":"Khóa API","ai-trading-assistant.form.exchange":"Chọn sàn giao dịch","ai-trading-assistant.form.secretKey":"Khóa bí mật","ai-trading-assistant.form.passphrase":"Mật khẩu","ai-trading-assistant.form.testConnection":"Kiểm tra kết nối","ai-trading-assistant.form.symbol":"Cặp giao dịch","ai-trading-assistant.form.symbolHint":"Chọn cặp giao dịch","ai-trading-assistant.form.initialCapital":"Số vốn đầu tư (Ký quỹ)","ai-trading-assistant.form.leverage":"Tỷ lệ đòn bẩy","ai-trading-assistant.form.timeframe":"Khung thời gian","ai-trading-assistant.form.timeframe1m":"1 phút","ai-trading-assistant.form.timeframe5m":"5 phút","ai-trading-assistant.form.timeframe15m":"15 phút","ai-trading-assistant.form.timeframe30m":"30 phút","ai-trading-assistant.form.timeframe1H":"1 giờ","ai-trading-assistant.form.timeframe4H":"4 giờ","ai-trading-assistant.form.timeframe1D":"1 ngày","ai-trading-assistant.form.marketType":"Loại thị trường","ai-trading-assistant.form.marketTypeFutures":"Hợp đồng","ai-trading-assistant.form.marketTypeSpot":"Giao dịch tức thời","ai-trading-assistant.form.totalPnl":"Tổng lợi nhuận/thua lỗ","ai-trading-assistant.form.customPrompt":"Lời nhắc tùy chỉnh","ai-trading-assistant.form.customPromptHint":"Tùy chọn, để tùy chỉnh chiến lược giao dịch và logic quyết định của AI","ai-trading-assistant.form.cancel":"Hủy","ai-trading-assistant.form.prev":"Bước trước","ai-trading-assistant.form.next":"Bước tiếp theo","ai-trading-assistant.form.confirmCreate":"Xác nhận tạo","ai-trading-assistant.form.confirmEdit":"Xác nhận chỉnh sửa","ai-trading-assistant.messages.createSuccess":"Tạo chiến lược thành công","ai-trading-assistant.messages.createFailed":"Tạo chiến lược thất bại","ai-trading-assistant.messages.updateSuccess":"Cập nhật chiến lược thành công","ai-trading-assistant.messages.updateFailed":"Cập nhật chiến lược thất bại","ai-trading-assistant.messages.deleteSuccess":"Xóa chiến lược thành công","ai-trading-assistant.messages.deleteFailed":"Xóa chiến lược thất bại","ai-trading-assistant.messages.startSuccess":"Khởi động chiến lược thành công","ai-trading-assistant.messages.startFailed":"Không thể khởi động chính sách","ai-trading-assistant.messages.stopSuccess":"Đã dừng thành công chính sách","ai-trading-assistant.messages.stopFailed":"Không thể dừng chính sách","ai-trading-assistant.messages.loadFailed":"Không thể truy xuất danh sách chính sách","ai-trading-assistant.messages.loadDecisionsFailed":"Không thể truy xuất bản ghi quyết định của AI","ai-trading-assistant.messages.deleteConfirm":"Bạn có chắc chắn muốn xóa chính sách này không? Thao tác này không thể đảo ngược.","ai-trading-assistant.placeholders.inputStrategyName":"Vui lòng nhập tên chiến lược","ai-trading-assistant.placeholders.selectModelId":"Vui lòng chọn mô hình AI","ai-trading-assistant.placeholders.selectDecideInterval":"Vui lòng chọn khoảng thời gian quyết định","ai-trading-assistant.placeholders.startTime":"Thời gian bắt đầu","ai-trading-assistant.placeholders.endTime":"Thời gian kết thúc","ai-trading-assistant.placeholders.inputApiKey":"Vui lòng nhập khóa API","ai-trading-assistant.placeholders.selectExchange":"Vui lòng chọn sàn giao dịch","ai-trading-assistant.placeholders.inputSecretKey":"Vui lòng nhập mã bí mật Key","ai-trading-assistant.placeholders.inputPassphrase":"Vui lòng nhập mật khẩu của bạn","ai-trading-assistant.placeholders.selectSymbol":"Vui lòng chọn một cặp giao dịch, ví dụ như BTC/USDT","ai-trading-assistant.placeholders.selectTimeframe":"Vui lòng chọn khung thời gian","ai-trading-assistant.placeholders.inputCustomPrompt":"Vui lòng nhập lời nhắc tùy chỉnh (tùy chọn)","ai-trading-assistant.validation.strategyNameRequired":"Vui lòng nhập tên chiến lược","ai-trading-assistant.validation.modelIdRequired":"Vui lòng chọn một mô hình AI","ai-trading-assistant.validation.runPeriodRequired":"Vui lòng chọn khoảng thời gian chạy","ai-trading-assistant.validation.apiKeyRequired":"Vui lòng nhập API Key","ai-trading-assistant.validation.exchangeRequired":"Vui lòng chọn sàn giao dịch","ai-trading-assistant.validation.secretKeyRequired":"Vui lòng nhập Khóa bí mật","ai-trading-assistant.validation.symbolRequired":"Vui lòng chọn cặp giao dịch","ai-trading-assistant.validation.initialCapitalRequired":"Vui lòng nhập số vốn đầu tư","ai-trading-assistant.table.time":"Thời gian","ai-trading-assistant.table.type":"Loại","ai-trading-assistant.table.price":"Giá","ai-trading-assistant.table.amount":"Số lượng","ai-trading-assistant.table.value":"Giá trị","ai-trading-assistant.table.symbol":"Cặp giao dịch","ai-trading-assistant.table.side":"Hướng","ai-trading-assistant.table.size":"Số lượng vị thế","ai-trading-assistant.table.entryPrice":"Giá vào lệnh","ai-trading-assistant.table.currentPrice":"Giá hiện tại","ai-trading-assistant.table.unrealizedPnl":"Lợi nhuận/Thua lỗ chưa thực hiện","ai-trading-assistant.table.profit":"Lợi nhuận/Thua lỗ","ai-trading-assistant.table.openLong":"Mở lệnh mua","ai-trading-assistant.table.closeLong":"Đóng lệnh Long","ai-trading-assistant.table.openShort":"Mở lệnh bán","ai-trading-assistant.table.closeShort":"Đóng lệnh bán","ai-trading-assistant.table.addLong":"Thêm lệnh mua","ai-trading-assistant.table.addShort":"Thêm lệnh bán","ai-trading-assistant.table.closeShortProfit":"Đóng lệnh bán có lãi","ai-trading-assistant.table.closeShortStop":"Đóng lệnh cắt lỗ lệnh bán","ai-trading-assistant.table.closeLongProfit":"Đóng lệnh mua có lãi","ai-trading-assistant.table.closeLongStop":"Đóng lệnh cắt lỗ lệnh mua","ai-trading-assistant.table.buy":"Mua","ai-trading-assistant.table.sell":"售","ai-trading-assistant.table.long":"开长","ai-trading-assistant.table.short":"开短","ai-trading-assistant.table.hold":"控股","ai-trading-assistant.table.reasoning":"分析理理","ai-trading-assistant.table.decisions":"决定","ai-trading-assistant.table.riskAssessment":"风险考核","ai-trading-assistant.table.trust":"信信度","ai-trading-assistant.table.totalRecords":"{total} Không có bản ghi","ai-trading-assistant.table.noPositions":"Không có vị thế","ai-trading-assistant.detail.title":"Chi tiết chiến lược","ai-trading-assistant.equity.noData":"Không có dữ liệu giá trị tài sản ròng","ai-trading-assistant.equity.equity":"Giá trị tài sản ròng","ai-trading-assistant.exchange.testFailed":"Kiểm tra kết nối thất bại","ai-trading-assistant.exchange.connectionSuccess":"Kết nối thành công","ai-trading-assistant.exchange.connectionFailed":"Kết nối thất bại","ai-trading-assistant.form.advancedSettings":"Cài đặt nâng cao","ai-trading-assistant.form.orderMode":"Lệnh Mode","ai-trading-assistant.form.orderModeMaker":"Lệnh chờ (Người tạo lệnh)","ai-trading-assistant.form.orderModeTaker":"Lệnh thị trường (Người nhận lệnh)","ai-trading-assistant.form.orderModeHint":"Chế độ lệnh chờ sử dụng lệnh giới hạn, phí thấp hơn; chế độ lệnh thị trường thực hiện ngay lập tức, phí cao hơn","ai-trading-assistant.form.makerWaitSec":"Thời gian chờ lệnh (giây)","ai-trading-assistant.form.makerWaitSecHint":"Thời gian chờ sau khi đặt lệnh;","ai-trading-assistant.form.makerRetries":"Số lần thử lại cho lệnh đang chờ","ai-trading-assistant.form.makerRetriesHint":"Số lần thử lại tối đa khi lệnh đang chờ không được khớp","ai-trading-assistant.form.fallbackToMarket":"Hạ cấp lệnh đang chờ thất bại thành lệnh thị trường","ai-trading-assistant.form.fallbackToMarketHint":"Có nên hạ cấp lệnh đang chờ mở/đóng thành lệnh thị trường để đảm bảo thực hiện khi chúng không được khớp hay không","ai-trading-assistant.form.marginMode":"Chế độ ký quỹ","ai-trading-assistant.form.marginModeCross":"Ký quỹ chéo","ai-trading-assistant.form.marginModeIsolated":"Ký quỹ riêng biệt Margin","ai-analysis.title":"Hệ thống giao dịch lượng tử","ai-analysis.system.online":"Trực tuyến","ai-analysis.system.agents":"Nhân viên","ai-analysis.system.active":"Hoạt động","ai-analysis.system.stage":"Giai đoạn","ai-analysis.panel.roster":"Danh sách nhân viên","ai-analysis.panel.thinking":"Đang suy nghĩ...","ai-analysis.panel.done":"Hoàn tất","ai-analysis.panel.standby":"Chờ","ai-analysis.input.title":"Hệ thống giao dịch lượng tử","ai-analysis.input.placeholder":"Chọn tài sản mục tiêu (ví dụ: BTC/USDT)","ai-analysis.input.watchlist":"Danh sách theo dõi","ai-analysis.input.start":"Bắt ​​đầu phân tích","ai-analysis.input.recent":"Các tác vụ gần đây:","ai-analysis.vis.stage":"Giai đoạn","ai-analysis.vis.processing":"Đang xử lý","ai-analysis.result.complete":"Phân tích hoàn tất","ai-analysis.result.signal":"Tín hiệu cuối cùng","ai-analysis.result.confidence":"Mức độ tin cậy:","ai-analysis.result.new":"Phân tích mới","ai-analysis.result.full":"Xem báo cáo đầy đủ","ai-analysis.logs.title":"Nhật ký hệ thống","ai-analysis.modal.title":"Báo cáo bảo mật","ai-analysis.modal.fundamental":"Phân tích cơ bản","ai-analysis.modal.technical":"Phân tích kỹ thuật","ai-analysis.modal.sentiment":"Phân tích tâm lý","ai-analysis.modal.risk":"Đánh giá rủi ro","ai-analysis.stage.idle":"Chế độ chờ","ai-analysis.stage.1":"Giai đoạn 1: Phân tích đa chiều","ai-analysis.stage.2":"Giai đoạn 2: Thảo luận về xu hướng tăng/giảm","ai-analysis.stage.3":"Giai đoạn 3: Lập kế hoạch chiến lược","ai-analysis.stage.4":"Giai đoạn 4: Xem xét kiểm soát rủi ro","ai-analysis.stage.complete":"Đã hoàn thành","ai-analysis.agent.investment_director":"Giám đốc đầu tư Giám đốc","ai-analysis.agent.role.investment_director":"Phân tích toàn diện & Kết luận cuối cùng","ai-analysis.agent.market":"Nhà phân tích thị trường","ai-analysis.agent.role.market":"Dữ liệu kỹ thuật & thị trường","ai-analysis.agent.fundamental":"Nhà phân tích cơ bản","ai-analysis.agent.role.fundamental":"Tài chính & Định giá","ai-analysis.agent.technical":"Nhà phân tích kỹ thuật","ai-analysis.agent.role.technical":"Các chỉ báo & biểu đồ kỹ thuật","ai-analysis.agent.news":"Nhà phân tích tin tức","ai-analysis.agent.role.news":"Bộ lọc tin tức toàn cầu","ai-analysis.agent.sentiment":"Tâm lý thị trường Nhà phân tích","ai-analysis.agent.role.sentiment":"Phân tích xã hội & cảm xúc","ai-analysis.agent.risk":"Nhà phân tích rủi ro","ai-analysis.agent.role.risk":"Kiểm tra rủi ro cơ bản","ai-analysis.agent.bull":"Nhà phân tích lạc quan","ai-analysis.agent.role.bull":"Khám phá động lực tăng trưởng","ai-analysis.agent.bear":"Nhà phân tích bi quan","ai-analysis.agent.role.bear":"Khám phá rủi ro & điểm yếu","ai-analysis.agent.manager":"Quản lý nghiên cứu","ai-analysis.agent.role.manager":"Người điều phối tranh luận","ai-analysis.agent.trader":"Nhà giao dịch","ai-analysis.agent.role.trader":"Chiến lược gia điều hành","ai-analysis.agent.risky":"Nhà phân tích năng động","ai-analysis.agent.role.risky":"Chiến lược năng động","ai-analysis.agent.neutral":"Nhà phân tích cân bằng","ai-analysis.agent.role.neutral":"Chiến lược cân bằng","ai-analysis.agent.safe":"Nhà phân tích thận trọng","ai-analysis.agent.role.safe":"Chiến lược thận trọng","ai-analysis.agent.cro":"Cân nhắc Quản lý rủi ro (CRO)","ai-analysis.agent.role.cro":"Người có thẩm quyền quyết định cuối cùng","ai-analysis.script.market":"Đang truy xuất dữ liệu OHLCV từ các sàn giao dịch lớn...","ai-analysis.script.fundamental":"Đang truy xuất báo cáo tài chính hàng quý...","ai-analysis.script.technical":"Phân tích các chỉ báo kỹ thuật và mô hình biểu đồ...","ai-analysis.script.news":"Đang quét tin tức tài chính toàn cầu...","ai-analysis.script.sentiment":"Phân tích xu hướng mạng xã hội...","ai-analysis.script.risk":"Đang tính toán biến động lịch sử...","invite.inviteLink":"Liên kết mời","invite.copy":"Sao chép liên kết","invite.copySuccess":"Sao chép thành công!","invite.copyFailed":"Sao chép thất bại, vui lòng sao chép thủ công","invite.noInviteLink":"Không tạo được liên kết mời","invite.totalInvites":"Tổng số lời mời","invite.totalReward":"Tổng số phần thưởng","invite.rules":"Quy tắc mời","invite.rule1":"Bạn sẽ nhận được phần thưởng cho mỗi người bạn mời đăng ký thành công","invite.rule2":"Bạn sẽ nhận được phần thưởng bổ sung khi người bạn được mời hoàn tất giao dịch đầu tiên","invite.rule3":"Phần thưởng mời sẽ được cộng trực tiếp vào tài khoản của bạn","invite.inviteList":"Danh sách người được mời","invite.tasks":"Trung tâm nhiệm vụ","invite.inviteeName":"Người được mời","invite.inviteTime":"Thời gian mời","invite.status":"Trạng thái","invite.reward":"Phần thưởng","invite.active":"Đang hoạt động","invite.inactive":"Không hoạt động","invite.completed":"Đã hoàn thành","invite.claimed":"Đã nhận","invite.pending":"Đang chờ hoàn thành","invite.goToTask":"Chuyển đến hoàn thành","invite.claimReward":"Nhận phần thưởng","invite.verify":"Xác minh hoàn tất","invite.verifySuccess":"Xác minh thành công Nhiệm vụ hoàn thành","invite.verifyNotCompleted":"Nhiệm vụ chưa hoàn thành, vui lòng hoàn thành nhiệm vụ trước","invite.verifyFailed":"Xác minh thất bại, vui lòng thử lại sau","invite.claimSuccess":"Đã nhận thành công {reward} QDT!","invite.claimFailed":"Không thể xác nhận, vui lòng thử lại sau","invite.totalRecords":"Tổng số {total} bản ghi","invite.task.twitter.title":"Chia sẻ lại bài đăng trên Twitter của chúng tôi lên X (Twitter)","invite.task.twitter.desc":"Chia sẻ bài đăng chính thức của chúng tôi lên tài khoản Twitter của bạn (X)","invite.task.youtube.title":"Đăng ký kênh YouTube của chúng tôi","invite.task.youtube.desc":"Đăng ký và theo dõi kênh YouTube chính thức của chúng tôi","invite.task.telegram.title":"Tham gia nhóm Telegram của chúng tôi","invite.task.telegram.desc":"Tham gia nhóm cộng đồng Telegram chính thức của chúng tôi","invite.task.discord.title":"Tham gia Discord Máy chủ","invite.task.discord.desc":"Tham gia máy chủ cộng đồng Discord của chúng tôi",message:"-","layouts.usermenu.dialog.title":"Thông tin","layouts.usermenu.dialog.content":"Bạn có chắc chắn muốn đăng xuất không?","layouts.userLayout.title":"Tìm kiếm sự thật trong sự không chắc chắn","settings.group.agent_memory":"Bộ nhớ/Phản tư","settings.group.reflection_worker":"Worker xác minh phản tư tự động","settings.field.ENABLE_AGENT_MEMORY":"Bật bộ nhớ tác nhân","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"Bật truy vấn vector (cục bộ)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"Kích thước embedding","settings.field.AGENT_MEMORY_TOP_K":"Số lượng Top-K","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"Kích thước cửa sổ ứng viên","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"Chu kỳ bán rã theo thời gian (ngày)","settings.field.AGENT_MEMORY_W_SIM":"Trọng số tương đồng","settings.field.AGENT_MEMORY_W_RECENCY":"Trọng số thời gian","settings.field.AGENT_MEMORY_W_RETURNS":"Trọng số lợi nhuận","settings.field.ENABLE_REFLECTION_WORKER":"Bật xác minh tự động","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"Khoảng thời gian xác minh (giây)","profile.notifications.title":"Cài đặt thông báo","profile.notifications.hint":"Cấu hình phương thức thông báo mặc định, sẽ được sử dụng tự động khi tạo giám sát tài sản và cảnh báo","profile.notifications.defaultChannels":"Kênh thông báo mặc định","profile.notifications.browser":"Thông báo trong ứng dụng","profile.notifications.email":"Email","profile.notifications.phone":"SMS","profile.notifications.telegramBotToken":"Telegram Bot Token","profile.notifications.telegramBotTokenPlaceholder":"Nhập Telegram Bot Token của bạn","profile.notifications.telegramBotTokenHint":"Tạo bot qua @BotFather để lấy Token","profile.notifications.telegramChatId":"Telegram Chat ID","profile.notifications.telegramPlaceholder":"Nhập Telegram Chat ID của bạn (ví dụ: 123456789)","profile.notifications.telegramHint":"Gửi /start cho @userinfobot để lấy Chat ID","profile.notifications.notifyEmail":"Email thông báo","profile.notifications.emailPlaceholder":"Địa chỉ email nhận thông báo","profile.notifications.emailHint":"Mặc định sử dụng email tài khoản, có thể đặt email khác","profile.notifications.phonePlaceholder":"Nhập số điện thoại (ví dụ: +84123456789)","profile.notifications.phoneHint":"Cần quản trị viên cấu hình dịch vụ Twilio","profile.notifications.discordWebhook":"Discord Webhook","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"Tạo Webhook trong cài đặt máy chủ Discord","profile.notifications.webhookUrl":"Webhook URL","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"URL Webhook tùy chỉnh, gửi thông báo qua POST JSON","profile.notifications.webhookToken":"Webhook Token (Tùy chọn)","profile.notifications.webhookTokenPlaceholder":"Bearer Token để xác thực yêu cầu","profile.notifications.webhookTokenHint":"Gửi dưới dạng Authorization: Bearer Token đến Webhook","profile.notifications.testBtn":"Gửi thông báo thử nghiệm","profile.notifications.saveSuccess":"Đã lưu cài đặt thông báo thành công","profile.notifications.selectChannel":"Vui lòng chọn ít nhất một kênh thông báo","profile.notifications.fillTelegramToken":"Vui lòng điền Telegram Bot Token","profile.notifications.fillTelegram":"Vui lòng điền Telegram Chat ID","profile.notifications.fillEmail":"Vui lòng điền email thông báo","profile.notifications.testSent":"Đã gửi thông báo thử nghiệm, vui lòng kiểm tra các kênh thông báo"},k=(0,i.A)((0,i.A)({},p),y)}}]); \ No newline at end of file +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[424],{69654:function(n,a,t){t.d(a,{default:function(){return k}});var i=t(76338),s={items_per_page:"/ trang",jump_to:"Đến",jump_to_confirm:"xác nhận",page:"",prev_page:"Trang Trước",next_page:"Trang Kế",prev_5:"Về 5 Trang Trước",next_5:"Đến 5 Trang Kế",prev_3:"Về 3 Trang Trước",next_3:"Đến 3 Trang Kế"},e=t(85505),h={today:"Hôm nay",now:"Bây giờ",backToToday:"Trở về hôm nay",ok:"Ok",clear:"Xóa",month:"Tháng",year:"Năm",timeSelect:"Chọn thời gian",dateSelect:"Chọn ngày",weekSelect:"Chọn tuần",monthSelect:"Chọn tháng",yearSelect:"Chọn năm",decadeSelect:"Chọn thập kỷ",yearFormat:"YYYY",dateFormat:"D/M/YYYY",dayFormat:"D",dateTimeFormat:"D/M/YYYY HH:mm:ss",monthBeforeYear:!0,previousMonth:"Tháng trước (PageUp)",nextMonth:"Tháng sau (PageDown)",previousYear:"Năm trước (Control + left)",nextYear:"Năm sau (Control + right)",previousDecade:"Thập kỷ trước",nextDecade:"Thập kỷ sau",previousCentury:"Thế kỷ trước",nextCentury:"Thế kỷ sau"},o={placeholder:"Chọn thời gian"},c=o,r={lang:(0,e.A)({placeholder:"Chọn thời điểm",rangePlaceholder:["Ngày bắt đầu","Ngày kết thúc"]},h),timePickerLocale:(0,e.A)({},c)},d=r,g=d,l={locale:"vi",Pagination:s,DatePicker:d,TimePicker:c,Calendar:g,Table:{filterTitle:"Bộ ",filterConfirm:"OK",filterReset:"Tạo Lại",selectAll:"Chọn Tất Cả",selectInvert:"Chọn Ngược Lại"},Modal:{okText:"OK",cancelText:"Huỷ",justOkText:"OK"},Popconfirm:{okText:"OK",cancelText:"Huỷ"},Transfer:{searchPlaceholder:"Tìm ở đây",itemUnit:"mục",itemsUnit:"mục"},Upload:{uploading:"Đang tải lên...",removeFile:"Gỡ bỏ tập tin",uploadError:"Lỗi tải lên",previewFile:"Xem thử tập tin",downloadFile:"Tải tập tin"},Empty:{description:"Trống"}},u=l,m=t(21135),b=t.n(m),p={antLocale:u,momentName:"vi",momentLocale:b()},y={submit:"Gửi",save:"Lưu","submit.ok":"Gửi thành công","save.ok":"Lưu thành công","menu.welcome":"Chào mừng","menu.home":"Trang chủ","menu.dashboard":"Bảng điều khiển","menu.dashboard.indicator":"Phân tích chỉ báo","menu.dashboard.community":"Cộng đồng chỉ báo","menu.dashboard.analysis":"Phân tích AI","menu.dashboard.tradingAssistant":"Trợ lý giao dịch","menu.dashboard.aiTradingAssistant":"Trợ lý giao dịch AI","menu.dashboard.signalRobot":"Robot tín hiệu","menu.dashboard.monitor":"Giám sát Trang","menu.dashboard.workplace":"Nơi làm việc","menu.form":"Trang biểu mẫu","menu.form.basic-form":"Biểu mẫu cơ bản","menu.form.step-form":"Biểu mẫu từng bước","menu.form.step-form.info":"Biểu mẫu từng bước (Điền thông tin chuyển khoản)","menu.form.step-form.confirm":"Biểu mẫu từng bước (Xác nhận thông tin chuyển khoản)","menu.form.step-form.result":"Biểu mẫu từng bước (Hoàn tất)","menu.form.advanced-form":"Biểu mẫu nâng cao","menu.list":"Trang danh sách","menu.list.table-list":"Bảng truy vấn","menu.list.basic-list":"Tiêu chuẩn Menu.list","menu.list.card-list":"Danh sách thẻ","menu.list.search-list":"Tìm kiếm danh sách","menu.list.search-list.articles":"Tìm kiếm danh sách (Bài viết)","menu.list.search-list.projects":"Tìm kiếm danh sách (Dự án)","menu.list.search-list.applications":"Tìm kiếm danh sách (Ứng dụng)","menu.profile":"Trang chi tiết","menu.profile.basic":"Trang chi tiết cơ bản","menu.profile.advanced":"Trang chi tiết nâng cao","menu.result":"Trang kết quả","menu.result.success":"Trang thành công","menu.result.fail":"Trang thất bại","menu.exception":"Ngoại lệ Trang","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"Đang gây ra lỗi","menu.account":"Trang cá nhân","menu.account.center":"Trung tâm cá nhân","menu.account.settings":"Cài đặt cá nhân","menu.account.trigger":"Đang gây ra lỗi","menu.account.logout":"Đăng xuất","menu.wallet":"Ví của tôi","menu.docs":"Trung tâm tài liệu","menu.docs.detail":"Chi tiết tài liệu","menu.header.refreshPage":"Làm mới Trang","menu.invite.friends":"Mời bạn bè","app.setting.pagestyle":"Cài đặt kiểu tổng thể","app.setting.pagestyle.light":"Kiểu menu sáng","app.setting.pagestyle.dark":"Kiểu menu tối","app.setting.pagestyle.realdark":"Chế độ tối","app.setting.themecolor":"Màu chủ đề","app.setting.navigationmode":"Chế độ điều hướng","app.setting.sidemenu.nav":"Điều hướng thanh bên","app.setting.topmenu.nav":"Điều hướng trên cùng","app.setting.content-width":"Chiều rộng vùng nội dung","app.setting.content-width.tooltip":"Cài đặt này chỉ có hiệu lực khi [Điều hướng trên cùng] được bật","app.setting.content-width.fixed":"Cố định","app.setting.content-width.fluid":"Linh hoạt","app.setting.fixedheader":"Tiêu đề cố định","app.setting.fixedheader.tooltip":"Có thể cấu hình khi tiêu đề cố định","app.setting.autoHideHeader":"Ẩn tiêu đề khi vuốt xuống","app.setting.fixedsidebar":"Menu thanh bên cố định","app.setting.sidemenu":"Bố cục menu thanh bên","app.setting.topmenu":"Bố cục menu trên cùng","app.setting.othersettings":"Các cài đặt khác","app.setting.weakmode":"Chế độ màu yếu","app.setting.multitab":"Chế độ nhiều tab","app.setting.copy":"Sao chép cài đặt","app.setting.loading":"Đang tải theme","app.setting.copyinfo":"Đã sao chép cài đặt thành công src/config/defaultSettings.js","app.setting.copy.success":"Sao chép hoàn tất","app.setting.copy.fail":"Sao chép thất bại","app.setting.theme.switching":"Đang chuyển đổi giao diện!","app.setting.production.hint":"Thanh cấu hình chỉ dùng để xem trước trong môi trường phát triển và sẽ không hiển thị trong môi trường sản xuất. Vui lòng sao chép và chỉnh sửa thủ công tệp cấu hình.","app.setting.themecolor.daybreak":"Xanh dương bình minh (mặc định)","app.setting.themecolor.dust":"Hoàng hôn","app.setting.themecolor.volcano":"Núi lửa","app.setting.themecolor.sunset":"Hoàng hôn","app.setting.themecolor.cyan":"Xanh lam sáng","app.setting.themecolor.green":"Xanh lục cực quang","app.setting.themecolor.geekblue":"Xanh dương công nghệ","app.setting.themecolor.purple":"Tím","app.setting.tooltip":"Cài đặt trang","user.login.userName":"Tên người dùng","user.login.password":"Mật khẩu","user.login.username.placeholder":"Tài khoản: admin","user.login.password.placeholder":"Mật khẩu: admin hoặc ant.design","user.login.message-invalid-credentials":"Đăng nhập thất bại, vui lòng kiểm tra email và mã xác minh của bạn","user.login.message-invalid-verification-code":"Mã xác minh không chính xác","user.login.tab-login-credentials":"Đăng nhập bằng tài khoản và mật khẩu","user.login.tab-login-email":"Đăng nhập bằng email","user.login.tab-login-mobile":"Đăng nhập bằng số điện thoại","user.login.captcha.placeholder":"Vui lòng nhập mã xác minh hình ảnh","user.login.mobile.placeholder":"Số điện thoại Số điện thoại","user.login.mobile.verification-code.placeholder":"Mã xác thực","user.login.email.placeholder":"Vui lòng nhập địa chỉ email","user.login.email.verification-code.placeholder":"Vui lòng nhập mã xác thực","user.login.email.sending":"Đang gửi mã xác thực...","user.login.email.send-success-title":"Thông báo","user.login.email.send-success":"Mã xác thực đã được gửi thành công, vui lòng kiểm tra email của bạn","user.login.sms.send-success":"Mã xác thực đã được gửi thành công, vui lòng kiểm tra tin nhắn SMS của bạn","user.login.remember-me":"Tự động đăng nhập","user.login.forgot-password":"Quên mật khẩu Mật khẩu","user.login.sign-in-with":"Các phương thức đăng nhập khác","user.login.signup":"Đăng ký tài khoản","user.login.login":"Đăng nhập","user.register.register":"Đăng ký","user.register.email.placeholder":"Email","user.register.password.placeholder":"Vui lòng nhập ít nhất 6 ký tự. Vui lòng không sử dụng mật khẩu dễ đoán.","user.register.password.popover-message":"Vui lòng nhập ít nhất 6 ký tự. Vui lòng không sử dụng mật khẩu dễ đoán.","user.register.confirm-password.placeholder":"Xác nhận mật khẩu","user.register.get-verification-code":"Lấy mã xác minh","user.register.sign-in":"Đăng nhập bằng tài khoản hiện có","user.register-result.msg":"Tài khoản của bạn: {email} đã được đăng ký thành công","user.register-result.activation-email":"Email kích hoạt đã được gửi đến hộp thư đến của bạn. Email có hiệu lực trong 24 giờ. Vui lòng đăng nhập vào email của bạn và nhấp vào liên kết trong email để kích hoạt tài khoản.","user.register-result.back-home":"Quay lại trang chủ","user.register-result.view-mailbox":"Xem email","user.email.required":"Vui lòng nhập địa chỉ email của bạn!","user.email.wrong-format":"Định dạng địa chỉ email không chính xác!","user.userName.required":"Vui lòng nhập tên người dùng hoặc địa chỉ email của bạn","user.password.required":"Vui lòng nhập mật khẩu của bạn!","user.password.twice.msg":"Hai mật khẩu không khớp!","user.password.strength.msg":"Mật khẩu không đủ mạnh","user.password.strength.strong":"Độ mạnh: Mạnh","user.password.strength.medium":"Độ mạnh: Trung bình","user.password.strength.low":"Độ mạnh: Yếu","user.password.strength.short":"Độ mạnh: Quá ngắn","user.confirm-password.required":"Vui lòng xác nhận mật khẩu của bạn!","user.phone-number.required":"Vui lòng nhập số điện thoại hợp lệ","user.phone-number.wrong-format":"Định dạng số điện thoại không chính xác!","user.verification-code.required":"Vui lòng nhập mã xác minh!","user.captcha.required":"Vui lòng nhập mã xác minh hình ảnh!","user.login.infos":"QuantDinger là công cụ phân tích cổ phiếu đa tác nhân AI và không có chứng chỉ tư vấn đầu tư chứng khoán. Tất cả kết quả phân tích, xếp hạng và ý kiến ​​tham khảo trên nền tảng đều được AI tự động tạo ra dựa trên dữ liệu lịch sử và chỉ dành cho mục đích học tập, nghiên cứu và trao đổi kỹ thuật. Chúng không cấu thành bất kỳ lời khuyên đầu tư hoặc cơ sở ra quyết định nào. Đầu tư cổ phiếu tiềm ẩn nhiều rủi ro như rủi ro thị trường, rủi ro thanh khoản và rủi ro chính sách, có thể dẫn đến mất vốn gốc. Người dùng nên đưa ra quyết định độc lập dựa trên khả năng chấp nhận rủi ro của mình, và mọi hành vi đầu tư và hậu quả phát sinh từ việc sử dụng công cụ này đều do người dùng chịu trách nhiệm. Thị trường đầy rủi ro, và đầu tư cần thận trọng.","user.login.tab-login-web3":"Đăng nhập Web3","user.login.web3.tip":"Đăng nhập bằng ví để xác thực chữ ký","user.login.web3.connect":"Kết nối ví và đăng nhập","user.login.web3.no-wallet":"Không phát hiện ví","user.login.web3.no-address":"Không lấy được địa chỉ ví","user.login.web3.nonce-failed":"Không thể lấy số ngẫu nhiên","user.login.web3.verify-failed":"Xác thực chữ ký thất bại","user.login.web3.success":"Đăng nhập thành công","user.login.web3.failed":"Đăng nhập ví thất bại","nav.no_wallet":"Ví không được tìm thấy đã phát hiện","nav.copy":"Sao chép","nav.copy_success":"Sao chép thành công","user.login.oauth.google":"Đăng nhập bằng Google","user.login.oauth.github":"Đăng nhập bằng GitHub","user.login.oauth.loading":"Đang chuyển hướng đến trang xác thực...","user.login.oauth.failed":"Đăng nhập OAuth thất bại","user.login.oauth.get-url-failed":"Không thể lấy liên kết xác thực","user.login.subtitle":"Thông tin chi tiết định lượng về thị trường toàn cầu","user.login.legal.title":"Tuyên bố pháp lý","user.login.legal.view":"Xem tuyên bố pháp lý","user.login.legal.collapse":"Thu gọn Tuyên bố pháp lý","user.login.legal.agree":"Tôi đã đọc và đồng ý với tuyên bố pháp lý","user.login.legal.required":"Vui lòng đọc và kiểm tra tuyên bố pháp lý trước","user.login.legal.content":"QuantDinger là công cụ phân tích cổ phiếu đa tác nhân AI và không có bằng cấp tư vấn đầu tư chứng khoán. Tất cả kết quả phân tích, xếp hạng và ý kiến ​​tham khảo trên nền tảng đều được AI tự động tạo ra dựa trên dữ liệu lịch sử và chỉ dành cho mục đích học tập, nghiên cứu và trao đổi kỹ thuật, và không cấu thành bất kỳ lời khuyên đầu tư hoặc cơ sở ra quyết định nào. Đầu tư cổ phiếu tiềm ẩn nhiều rủi ro như rủi ro thị trường, rủi ro thanh khoản và rủi ro chính sách, có thể dẫn đến mất vốn gốc. Người dùng nên đưa ra quyết định độc lập dựa trên khả năng chấp nhận rủi ro của mình, và mọi hành vi đầu tư và hậu quả phát sinh từ việc sử dụng công cụ này sẽ do người dùng chịu trách nhiệm. Thị trường đầy rủi ro, và đầu tư cần thận trọng.","user.login.privacy.title":"Điều khoản Quyền riêng tư Người dùng","user.login.privacy.view":"Xem Điều khoản Quyền riêng tư Người dùng","user.login.privacy.collapse":"Thu gọn Điều khoản Quyền riêng tư Người dùng","user.login.privacy.content":"Chúng tôi coi trọng quyền riêng tư và việc bảo vệ dữ liệu của bạn. 1) Phạm vi Thu thập: Chúng tôi chỉ thu thập thông tin cần thiết để thực hiện các chức năng (chẳng hạn như email, số điện thoại di động, mã vùng, địa chỉ ví Web3) và nhật ký cần thiết cũng như thông tin thiết bị. 2) Mục đích Sử dụng: Để đăng nhập tài khoản và xác minh bảo mật, cung cấp chức năng dịch vụ, khắc phục sự cố và tuân thủ các yêu cầu. 3) Lưu trữ và Bảo mật: Dữ liệu được lưu trữ mã hóa và các biện pháp kiểm soát quyền và truy cập cần thiết được thực hiện để ngăn chặn truy cập trái phép, tiết lộ hoặc mất mát. 4) Chia sẻ và Bên thứ ba: Ngoại trừ trường hợp được yêu cầu bởi luật và quy định hoặc cần thiết để thực hiện dịch vụ, chúng tôi sẽ không chia sẻ thông tin cá nhân của bạn với bên thứ ba; Nếu có sự tham gia của các dịch vụ bên thứ ba (chẳng hạn như ví điện tử, nhà cung cấp dịch vụ SMS), dữ liệu sẽ chỉ được xử lý ở mức tối thiểu cần thiết để thực hiện các chức năng. 5) Cookie/Bộ nhớ cục bộ: Được sử dụng để xác thực trạng thái đăng nhập và duy trì phiên làm việc cần thiết (chẳng hạn như mã thông báo, PHPSESSID). Bạn có thể xóa hoặc hạn chế chúng trong trình duyệt của mình. 6) Quyền cá nhân: Bạn có thể thực hiện các quyền của mình để yêu cầu, sửa đổi, xóa và rút lại sự đồng ý theo luật và quy định hiện hành. 7) Thay đổi và Thông báo: Các bản cập nhật cho các điều khoản này sẽ được hiển thị rõ ràng trên trang. Việc tiếp tục sử dụng dịch vụ này cho thấy bạn đã đọc và đồng ý với nội dung được cập nhật. Nếu bạn không đồng ý với các điều khoản này hoặc bất kỳ bản cập nhật nào trong đó, vui lòng ngừng sử dụng dịch vụ này và liên hệ với chúng tôi. ","account.basicInfo":"Thông tin cơ bản","account.id":"ID người dùng","account.username":"Tên người dùng","account.nickname":"Biệt danh","account.email":"Email","account.mobile":"Số điện thoại","account.web3address":"Địa chỉ ví","account.pid":"ID người giới thiệu","account.level":"Cấp độ người dùng","account.money":"Số dư","account.qdtBalance":"Số dư QDT","account.score":"Điểm","account.createtime":"Thời gian đăng ký","account.inviteLink":"Liên kết mời","account.recharge":"Nạp tiền","account.rechargeTip":"Mã QR bên dưới để nạp tiền bằng WeChat hoặc Alipay","account.qrCodePlaceholder":"Mã QR giả lập","account.rechargeAmount":"Số tiền cần nạp","account.enterAmount":"Vui lòng nhập số tiền cần nạp","account.rechargeHint":"Số tiền nạp tối thiểu: 1 QDT","account.confirmRecharge":"Xác nhận nạp tiền","account.enterValidAmount":"Vui lòng nhập số tiền hợp lệ","account.rechargeSuccess":"Nạp tiền thành công! Số tiền {amount} QDT đã được nạp","account.settings.menuMap.basic":"Cài đặt cơ bản","account.settings.menuMap.security":"Cài đặt bảo mật","account.settings.menuMap.notification":"Thông báo tin nhắn mới","account.settings.menuMap.moneyLog":"Chi tiết quỹ","account.moneyLog.empty":"Không có chi tiết quỹ","account.moneyLog.total":"Tổng số {total} giao dịch","account.moneyLog.type.purchase":"Hạn mức mua hàng","account.moneyLog.type.recharge":"Nạp tiền","account.moneyLog.type.refund":"Hoàn tiền","account.moneyLog.type.reward":"Thưởng","account.moneyLog.type.income":"Thu nhập Các chỉ báo","account.moneyLog.type.commission":"Phí nền tảng","wallet.balance":"Số dư QDT","wallet.recharge":"Nạp tiền","wallet.withdraw":"Rút tiền","wallet.filter":"Lọc","wallet.reset":"Đặt lại","wallet.totalRecharge":"Tổng số tiền nạp","wallet.totalWithdraw":"Tổng số tiền rút","wallet.totalIncome":"Tổng số tiền thu nhập","wallet.records":"Lịch sử giao dịch và chi tiết quỹ","wallet.tradingRecords":"Lịch sử giao dịch","wallet.moneyLog":"Chi tiết quỹ","wallet.rechargeTip":"Vui lòng quét mã QR bên dưới bằng WeChat hoặc Alipay để nạp tiền","wallet.qrCodePlaceholder":"Mã QR (mô phỏng)","wallet.rechargeAmount":"Số tiền cần nạp","wallet.enterAmount":"Vui lòng nhập số tiền cần nạp","wallet.rechargeHint":"Số tiền nạp tối thiểu: 1 QDT","wallet.confirmRecharge":"Xác nhận nạp tiền","wallet.enterValidAmount":"Vui lòng nhập số tiền hợp lệ","wallet.rechargeSuccess":"Nạp tiền thành công! Đã thanh toán {amount} QDT","wallet.rechargeFailed":"Giao dịch thất bại","wallet.withdrawTip":"Vui lòng nhập số tiền rút và địa chỉ rút tiền","wallet.withdrawAmount":"Số tiền rút","wallet.enterWithdrawAmount":"Vui lòng nhập số tiền rút","wallet.withdrawHint":"Số tiền rút tối thiểu: 1 QDT","wallet.withdrawAddress":"Địa chỉ rút tiền (tùy chọn)","wallet.enterWithdrawAddress":"Vui lòng nhập địa chỉ rút tiền","wallet.confirmWithdraw":"Xác nhận rút tiền","wallet.enterValidWithdrawAmount":"Vui lòng nhập số tiền rút hợp lệ","wallet.insufficientBalance":"Số dư không đủ","wallet.withdrawSuccess":"Rút tiền thành công! Số tiền {amount} QDT đã rút","wallet.withdrawFailed":"Giao dịch rút tiền thất bại","wallet.noTradingRecords":"Không có bản ghi giao dịch nào","wallet.noMoneyLog":"Không có chi tiết giao dịch","wallet.loadTradingRecordsFailed":"Không thể tải bản ghi giao dịch","wallet.loadMoneyLogFailed":"Không thể tải chi tiết giao dịch","wallet.moneyLogTotal":"Tổng số {total} bản ghi","wallet.moneyLogTypeTitle":"Loại","wallet.moneyLogType.all":"Tất cả các loại","wallet.table.time":"Thời gian","wallet.table.type":"Loại","wallet.table.price":"Giá","wallet.table.amount":"Số lượng","wallet.table.money":"Số tiền","wallet.table.balance":"Số dư","wallet.table.memo":"Ghi chú","wallet.table.value":"Giá trị","wallet.table.profit":"Lợi nhuận/Thua lỗ","wallet.table.commission":"Hoa hồng","wallet.table.total":"Tổng số {total} bản ghi","wallet.tradeType.buy":"Mua","wallet.tradeType.sell":"Bán","wallet.tradeType.liquidation":"Thanh lý","wallet.tradeType.openLong":"Mở lệnh mua","wallet.tradeType.addLong":"Thêm lệnh mua","wallet.tradeType.closeLong":"Đóng lệnh mua","wallet.tradeType.closeLongStop":"Đóng lệnh mua và cắt lỗ","wallet.tradeType.closeLongProfit":"Chốt lời và đóng lệnh mua","wallet.tradeType.openShort":"Mở vị thế bán khống","wallet.tradeType.addShort":"Thêm vị thế bán khống","wallet.tradeType.closeShort":"Đóng vị thế bán khống","wallet.tradeType.closeShortStop":"Đóng vị thế bán khống với lệnh dừng lỗ","wallet.tradeType.closeShortProfit":"Chốt lời và đóng vị thế bán khống","wallet.moneyLogType.purchase":"Chỉ báo mua","wallet.moneyLogType.recharge":"Nạp tiền","wallet.moneyLogType.withdraw":"Rút tiền mặt","wallet.moneyLogType.refund":"Hoàn tiền","wallet.moneyLogType.reward":"Thưởng","wallet.moneyLogType.income":"Thu nhập","wallet.moneyLogType.commission":"Phí giao dịch","wallet.web3Address.required":"Vui lòng nhập địa chỉ ví Web3 của bạn trước","wallet.web3Address.requiredDescription":"Bạn cần liên kết địa chỉ ví Web3 của mình trước khi gửi tiền để nhận tiền gửi","wallet.web3Address.placeholder":"Vui lòng nhập địa chỉ ví Web3 của bạn (bắt đầu bằng 0x)","wallet.web3Address.save":"Lưu địa chỉ ví","wallet.web3Address.saveSuccess":"Địa chỉ ví đã được lưu thành công","wallet.web3Address.saveFailed":"Không thể lưu địa chỉ ví","wallet.web3Address.invalidFormat":"Vui lòng nhập địa chỉ ví Web3 hợp lệ (định dạng Ethereum: 42 ký tự bắt đầu bằng 0x, hoặc TRC20) Định dạng: 34 ký tự bắt đầu bằng T)","wallet.selectCoin":"Chọn loại tiền điện tử","wallet.selectChain":"Chọn chuỗi khối","wallet.chain.eth":"ETH (ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"BSC","wallet.targetQdtAmount":"Số lượng QDT bạn muốn đổi (tùy chọn)","wallet.targetQdtAmount.placeholder":"Vui lòng nhập số lượng QDT bạn muốn đổi, giá QDT hiện tại: {price} USDT","wallet.targetQdtAmount.requiredUsdt":"Số tiền cần nạp: {amount} USDT","wallet.rechargeAddress":"Địa chỉ nạp tiền","wallet.copyAddress":"Sao chép","wallet.copySuccess":"Sao chép thành công!","wallet.copyFailed":"Sao chép thất bại, vui lòng sao chép thủ công","wallet.rechargeAddressHint":"Vui lòng đảm bảo bạn sử dụng chuỗi {chain} để gửi {coin} vào địa chỉ này","wallet.qdtPrice.loading":"Đang tải...","wallet.rechargeTip.new":"Vui lòng chọn loại tiền tệ và chuỗi, sau đó quét mã QR bên dưới để gửi tiền","wallet.exchangeRate":"1 QDT ≈ {rate} USDT","wallet.withdrawableAmount":"Số tiền có thể rút","wallet.totalBalance":"Tổng số dư","wallet.insufficientWithdrawable":"Số tiền có thể rút không đủ, hiện tại chỉ có thể rút: {amount} QDT","wallet.withdrawAddressRequired":"Vui lòng nhập địa chỉ rút tiền địa chỉ","wallet.withdrawAddressHint":"Vui lòng đảm bảo địa chỉ chính xác; không thể hủy bỏ giao dịch rút tiền sau khi đã gửi","wallet.withdrawSubmitSuccess":"Yêu cầu rút tiền đã được gửi thành công; Vui lòng chờ xem xét","menu.footer.contactUs":"Liên hệ với chúng tôi","menu.footer.getSupport":"Nhận hỗ trợ","menu.footer.socialAccounts":"Tài khoản mạng xã hội","menu.footer.userAgreement":"Thỏa thuận người dùng","menu.footer.privacyPolicy":"Chính sách bảo mật","menu.footer.support":"Hỗ trợ","menu.footer.featureRequest":"Yêu cầu tính năng","menu.footer.email":"Email","menu.footer.liveChat":"Trò chuyện trực tuyến 24/7","dashboard.analysis.title":"Phân tích đa chiều","dashboard.analysis.subtitle":"Phân tích tài chính toàn diện dựa trên AI Nền tảng","dashboard.analysis.selectSymbol":"Chọn hoặc nhập mã chứng khoán","dashboard.analysis.selectModel":"Chọn mô hình","dashboard.analysis.startAnalysis":"Bắt ​​đầu phân tích","dashboard.analysis.history":"Lịch sử","dashboard.analysis.tab.overview":"Phân tích toàn diện","dashboard.analysis.tab.fundamental":"Các yếu tố cơ bản","dashboard.analysis.tab.technical":"Phân tích kỹ thuật","dashboard.analysis.tab.news":"Tin tức","dashboard.analysis.tab.sentiment":"Tâm lý thị trường","dashboard.analysis.tab.risk":"Rủi ro","dashboard.analysis.tab.debate":"Tăng/Giảm giá","dashboard.analysis.tab.decision":"Quyết định cuối cùng","dashboard.analysis.empty.selectSymbol":"Chọn mục tiêu để bắt đầu phân tích","dashboard.analysis.empty.selectSymbolDesc":"Chọn mục tiêu từ danh sách theo dõi của bạn hoặc nhập mã của nó để nhận báo cáo phân tích AI đa chiều","dashboard.analysis.empty.startAnalysis":'Nhấp vào nút "Bắt đầu phân tích" để phân tích đa chiều',"dashboard.analysis.empty.startAnalysisDesc":"Chúng tôi sẽ cung cấp cho bạn phân tích toàn diện từ nhiều khía cạnh bao gồm cơ bản, kỹ thuật, tin tức, tâm lý và rủi ro","dashboard.analysis.empty.noData":"Không có dữ liệu phân tích cho {type}, vui lòng thực hiện phân tích toàn diện trước","dashboard.analysis.empty.noWatchlist":"Không có danh sách theo dõi có sẵn","dashboard.analysis.empty.noHistory":"Không có dữ liệu lịch sử","dashboard.analysis.empty.watchlistHint":"Không có danh sách theo dõi, vui lòng thực hiện phân tích toàn diện trước","dashboard.analysis.empty.noDebateData":"Không có dữ liệu tranh luận","dashboard.analysis.empty.noDecisionData":"Không có dữ liệu quyết định","dashboard.analysis.empty.selectAgent":"Vui lòng chọn một Đại lý để xem kết quả phân tích","dashboard.analysis.loading.analyzing":"Đang phân tích, vui lòng chờ...","dashboard.analysis.loading.fundamental":"Đang phân tích dữ liệu cơ bản...","dashboard.analysis.loading.technical":"Đang phân tích các chỉ báo kỹ thuật...","dashboard.analysis.loading.news":"Đang phân tích dữ liệu tin tức...","dashboard.analysis.loading.sentiment":"Phân tích tâm lý thị trường...","dashboard.analysis.loading.risk":"Đánh giá rủi ro...","dashboard.analysis.loading.debate":"Cuộc tranh luận đang diễn ra giữa phe tăng giá và phe giảm giá...","dashboard.analysis.loading.decision":"Đưa ra quyết định cuối cùng...","dashboard.analysis.score.overall":"Điểm tổng thể","dashboard.analysis.score.recommendation":"Lời khuyên đầu tư","dashboard.analysis.score.confidence":"Mức độ tin cậy","dashboard.analysis.dimension.fundamental":"các yếu tố cơ bản","dashboard.analysis.dimension.technical":"các yếu tố kỹ thuật","dashboard.analysis.dimension.news":"tin tức","dashboard.analysis.dimension.sentiment":"tâm lý","dashboard.analysis.dimension.risk":"rủi ro","dashboard.analysis.card.dimensionScores":"điểm số cho từng yếu tố","dashboard.analysis.card.overviewReport":"báo cáo tổng quan","dashboard.analysis.card.financialMetrics":"các chỉ số tài chính","dashboard.analysis.card.fundamentalReport":"báo cáo phân tích cơ bản","dashboard.analysis.card.technicalIndicators":"Các chỉ số kỹ thuật Các chỉ báo","dashboard.analysis.card.technicalReport":"Báo cáo phân tích kỹ thuật","dashboard.analysis.card.newsList":"Tin tức liên quan","dashboard.analysis.card.newsReport":"Báo cáo phân tích tin tức","dashboard.analysis.card.sentimentIndicators":"Các chỉ báo tâm lý","dashboard.analysis.card.sentimentReport":"Báo cáo phân tích tâm lý","dashboard.analysis.card.riskMetrics":"Các chỉ báo rủi ro","dashboard.analysis.card.riskReport":"Báo cáo đánh giá rủi ro","dashboard.analysis.card.bullView":"Quan điểm lạc quan","dashboard.analysis.card.bearView":"Quan điểm bi quan","dashboard.analysis.card.researchConclusion":"Kết luận của nhà nghiên cứu","dashboard.analysis.card.traderPlan":"Kế hoạch giao dịch","dashboard.analysis.card.riskDebate":"Thảo luận của Ủy ban Rủi ro","dashboard.analysis.card.finalDecision":"Quyết định cuối cùng","dashboard.analysis.card.tradePlanDetail":"Chi tiết kế hoạch giao dịch","dashboard.analysis.tradingPlan.entry_price":"Giá vào lệnh","dashboard.analysis.tradingPlan.position_size":"Quy mô vị thế","dashboard.analysis.tradingPlan.stop_loss":"Cắt lỗ","dashboard.analysis.tradingPlan.take_profit":"Chốt lời","dashboard.analysis.label.confidence":"Mức độ tự tin Mức độ","dashboard.analysis.label.keyPoints":"Điểm chính","dashboard.analysis.label.riskWarning":"Cảnh báo rủi ro","dashboard.analysis.risk.risky":"Quan điểm rủi ro","dashboard.analysis.risk.neutral":"Quan điểm trung lập","dashboard.analysis.risk.safe":"Quan điểm an toàn","dashboard.analysis.risk.conclusion":"Kết luận","dashboard.analysis.feature.fundamental":"Phân tích cơ bản","dashboard.analysis.feature.technical":"Phân tích kỹ thuật","dashboard.analysis.feature.news":"Phân tích tin tức","dashboard.analysis.feature.sentiment":"Phân tích cảm xúc","dashboard.analysis.feature.risk":"Rủi ro Đánh giá","dashboard.analysis.watchlist.title":"Danh sách theo dõi của tôi","dashboard.analysis.watchlist.add":"Thêm","dashboard.analysis.watchlist.addStock":"Thêm cổ phiếu","dashboard.analysis.modal.addStock.title":"Thêm vào danh sách theo dõi","dashboard.analysis.modal.addStock.confirm":"Xác nhận","dashboard.analysis.modal.addStock.cancel":"Hủy","dashboard.analysis.modal.addStock.market":"Loại thị trường","dashboard.analysis.modal.addStock.marketPlaceholder":"Vui lòng chọn thị trường","dashboard.analysis.modal.addStock.marketRequired":"Vui lòng chọn loại thị trường","dashboard.analysis.modal.addStock.symbol":"Mã chứng khoán","dashboard.analysis.modal.addStock.symbolPlaceholder":"Ví dụ: AAPL, TSLA, GOOGL, 000001, BTC","dashboard.analysis.modal.addStock.symbolRequired":"Vui lòng nhập mã chứng khoán","dashboard.analysis.modal.addStock.searchPlaceholder":"Tìm kiếm mã chứng khoán hoặc tên cổ phiếu","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"Tìm kiếm hoặc nhập mã chứng khoán (ví dụ: AAPL, BTC/USDT, EUR/USD)","dashboard.analysis.modal.addStock.searchOrInputHint":"Hỗ trợ tìm kiếm cổ phiếu trong cơ sở dữ liệu hoặc nhập trực tiếp mã (hệ thống sẽ tự động truy xuất tên)","dashboard.analysis.modal.addStock.search":"Tìm kiếm","dashboard.analysis.modal.addStock.searchResults":"Kết quả tìm kiếm","dashboard.analysis.modal.addStock.hotSymbols":"Cổ phiếu nóng","dashboard.analysis.modal.addStock.noHotSymbols":"Không có cổ phiếu nóng","dashboard.analysis.modal.addStock.selectedSymbol":"Cổ phiếu đã chọn","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"Vui lòng chọn cổ phiếu trước","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"Vui lòng chọn cổ phiếu hoặc nhập mã cổ phiếu","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"Vui lòng nhập mã cổ phiếu","dashboard.analysis.modal.addStock.pleaseSelectMarket":"Vui lòng chọn loại thị trường","dashboard.analysis.modal.addStock.searchFailed":"Tìm kiếm thất bại, vui lòng thử lại sau","dashboard.analysis.modal.addStock.noSearchResults":"Không tìm thấy cổ phiếu phù hợp","dashboard.analysis.modal.addStock.willAutoFetchName":"Hệ thống sẽ tự động lấy tên","dashboard.analysis.modal.addStock.addDirectly":"Thêm trực tiếp","dashboard.analysis.modal.addStock.nameWillBeFetched":"Tên sẽ được tự động lấy khi thêm","dashboard.analysis.market.USStock":"Cổ phiếu Mỹ","dashboard.analysis.market.Crypto":"Tiền điện tử","dashboard.analysis.market.Forex":"Ngoại hối","dashboard.analysis.market.Futures":"Hợp đồng tương lai","dashboard.analysis.modal.history.title":"Lịch sử phân tích","dashboard.analysis.modal.history.viewResult":"Xem kết quả","dashboard.analysis.modal.history.completeTime":"Thời gian hoàn thành","dashboard.analysis.modal.history.error":"Lỗi","dashboard.analysis.status.pending":"Đang chờ xử lý","dashboard.analysis.status.processing":"Đang xử lý","dashboard.analysis.status.completed":"Hoàn thành","dashboard.analysis.status.failed":"Thất bại","dashboard.analysis.message.selectSymbol":"Vui lòng chọn mục tiêu trước","dashboard.analysis.message.taskCreated":"Tác vụ phân tích đã được tạo, đang thực thi trong nền...","dashboard.analysis.message.analysisComplete":"Phân tích đã hoàn tất","dashboard.analysis.message.analysisCompleteCache":"Phân tích đã hoàn tất (sử dụng dữ liệu được lưu trong bộ nhớ cache)","dashboard.analysis.message.analysisFailed":"Phân tích thất bại, vui lòng thử lại sau","dashboard.analysis.message.addStockSuccess":"Đã thêm thành công","dashboard.analysis.message.addStockFailed":"Thêm thất bại","dashboard.analysis.message.removeStockSuccess":"Đã xóa thành công","dashboard.analysis.message.removeStockFailed":"Xóa thất bại","dashboard.analysis.message.resumingAnalysis":"Đang tiếp tục tác vụ phân tích...","dashboard.analysis.message.deleteSuccess":"Đã xóa thành công","dashboard.analysis.message.deleteFailed":"Xóa thất bại","dashboard.analysis.modal.history.delete":"Xóa","dashboard.analysis.modal.history.deleteConfirm":"Bạn có chắc chắn muốn xóa bản ghi phân tích này không?","dashboard.analysis.test":"Cửa hàng đường Gongzhuan {không}","dashboard.analysis.introduce":"Mô tả chỉ báo","dashboard.analysis.total-sales":"Tổng doanh thu","dashboard.analysis.day-sales":"Doanh thu trung bình hàng ngày","dashboard.analysis.visits":"Lượt truy cập","dashboard.analysis.visits-trend":"Lượt truy cập xu hướng","dashboard.analysis.visits-ranking":"Xếp hạng lượt truy cập cửa hàng","dashboard.analysis.day-visits":"Lượt truy cập hàng ngày","dashboard.analysis.week":"Lượt truy cập hàng tuần so với cùng kỳ năm trước","dashboard.analysis.day":"Lượt truy cập hàng ngày so với cùng kỳ năm trước","dashboard.analysis.payments":"Số lượng thanh toán","dashboard.analysis.conversion-rate":"Tỷ lệ chuyển đổi","dashboard.analysis.operational-effect":"Hiệu quả hoạt động","dashboard.analysis.sales-trend":"Xu hướng doanh số","dashboard.analysis.sales-ranking":"Xếp hạng doanh số cửa hàng","dashboard.analysis.all-year":"Quanh năm","dashboard.analysis.all-month":"Tháng này","dashboard.analysis.all-week":"Tuần này","dashboard.analysis.all-day":"Hôm nay","dashboard.analysis.search-users":"Số lượng người dùng tìm kiếm","dashboard.analysis.per-capita-search":"Số lượt tìm kiếm trung bình trên đầu người","dashboard.analysis.online-top-search":"Các từ khóa tìm kiếm trực tuyến phổ biến","dashboard.analysis.the-proportion-of-sales":"Doanh số theo danh mục","dashboard.analysis.dropdown-option-one":"Phương án một","dashboard.analysis.dropdown-option-two":"Phương án hai","dashboard.analysis.channel.all":"Tất cả Kênh","dashboard.analysis.channel.online":"Trực tuyến","dashboard.analysis.channel.stores":"Cửa hàng","dashboard.analysis.sales":"Doanh thu bán hàng","dashboard.analysis.traffic":"Lưu lượng truy cập","dashboard.analysis.table.rank":"Xếp hạng","dashboard.analysis.table.search-keyword":"Từ khóa tìm kiếm","dashboard.analysis.table.users":"Số lượng người dùng","dashboard.analysis.table.weekly-range":"Tăng trưởng hàng tuần","dashboard.indicator.selectSymbol":"Chọn hoặc nhập mã cổ phiếu","dashboard.indicator.emptyWatchlistHint":"Hiện không có cổ phiếu nào trong danh sách theo dõi, vui lòng thêm vào, Đầu tiên","dashboard.indicator.hint.selectSymbol":"Vui lòng chọn cổ phiếu để bắt đầu phân tích","dashboard.indicator.hint.selectSymbolDesc":"Chọn hoặc nhập mã cổ phiếu vào ô tìm kiếm phía trên để xem biểu đồ nến và các chỉ báo kỹ thuật","dashboard.indicator.retry":"Thử lại","dashboard.indicator.panel.title":"Các chỉ báo kỹ thuật","dashboard.indicator.panel.realtimeOn":"Tắt cập nhật thời gian thực","dashboard.indicator.panel.realtimeOff":"Bật cập nhật thời gian thực","dashboard.indicator.panel.themeLight":"Chuyển sang chủ đề tối","dashboard.indicator.panel.themeDark":"Chuyển sang chủ đề sáng theme","dashboard.indicator.section.enabled":"Đã bật","dashboard.indicator.section.added":"Các chỉ báo tôi đã thêm","dashboard.indicator.section.custom":"Chỉ báo do tôi tự tạo","dashboard.indicator.section.bought":"Các chỉ báo tôi đã mua","dashboard.indicator.section.myCreated":"Các chỉ báo tôi đã tạo","dashboard.indicator.empty":"Chưa có chỉ báo nào, vui lòng thêm hoặc tạo chỉ báo trước","dashboard.indicator.buy":"Mua chỉ báo","dashboard.indicator.action.start":"Bắt ​​đầu","dashboard.indicator.action.stop":"Dừng","dashboard.indicator.action.edit":"Chỉnh sửa","dashboard.indicator.action.delete":"Xóa","dashboard.indicator.action.backtest":"Kiểm tra lại","dashboard.indicator.status.normal":"Bình thường","dashboard.indicator.status.normalPermanent":"Bình thường (Có hiệu lực vĩnh viễn)","dashboard.indicator.status.expired":"Đã hết hạn","dashboard.indicator.expiry.permanent":"Có hiệu lực vĩnh viễn","dashboard.indicator.expiry.noExpiry":"Không có ngày hết hạn","dashboard.indicator.expiry.expired":"Đã hết hạn: {date}","dashboard.indicator.expiry.expiresOn":"Ngày hết hạn: {date}","dashboard.indicator.delete.confirmTitle":"Xác nhận xóa","dashboard.indicator.delete.confirmContent":'Bạn có chắc chắn muốn xóa chỉ báo "{name}" không? Thao tác này không thể đảo ngược.',"dashboard.indicator.delete.confirmOk":"Xóa","dashboard.indicator.delete.confirmCancel":"Hủy","dashboard.indicator.delete.success":"Xóa thành công","dashboard.indicator.delete.failed":"Xóa thất bại","dashboard.indicator.save.success":"Lưu thành công","dashboard.indicator.save.failed":"Lưu thất bại","dashboard.indicator.error.loadWatchlistFailed":"Không thể tải danh sách theo dõi","dashboard.indicator.error.chartNotReady":"Thành phần biểu đồ chưa được khởi tạo, vui lòng chọn mục tiêu và đợi biểu đồ tải xong , load","dashboard.indicator.error.chartMethodNotReady":"Phương thức của thành phần biểu đồ chưa sẵn sàng, vui lòng thử lại sau","dashboard.indicator.error.chartExecuteNotReady":"Phương thức thực thi của thành phần biểu đồ chưa sẵn sàng, vui lòng thử lại sau","dashboard.indicator.error.parseFailed":"Không thể phân tích cú pháp mã Python","dashboard.indicator.error.parseFailedCheck":"Không thể phân tích cú pháp mã Python, vui lòng kiểm tra định dạng mã","dashboard.indicator.error.addIndicatorFailed":"Không thể thêm chỉ báo","dashboard.indicator.error.runIndicatorFailed":"Không thể chạy chỉ báo","dashboard.indicator.error.pleaseLogin":"Vui lòng đăng nhập trước","dashboard.indicator.error.loadDataFailed":"Tải dữ liệu thất bại","dashboard.indicator.error.loadDataFailedDesc":"Vui lòng kiểm tra kết nối mạng của bạn","dashboard.indicator.error.pythonEngineFailed":"Không thể tải công cụ Python; chức năng chỉ báo có thể không khả dụng","dashboard.indicator.error.chartInitFailed":"Khởi tạo biểu đồ thất bại","dashboard.indicator.warning.enterCode":"Vui lòng nhập mã chỉ báo trước","dashboard.indicator.warning.pyodideLoadFailed":"Không thể tải công cụ Python","dashboard.indicator.warning.pyodideLoadFailedDesc":"Tính năng này không khả dụng trong khu vực hoặc môi trường mạng hiện tại của bạn","dashboard.indicator.warning.chartNotInitialized":"Biểu đồ chưa được khởi tạo; Công cụ vẽ không khả dụng","dashboard.indicator.success.runIndicator":"Chỉ báo đã chạy thành công","dashboard.indicator.success.clearDrawings":"Đã xóa tất cả các đường","dashboard.indicator.sma":"SMA (Trung bình động ngắn hạn)","dashboard.indicator.ema":"EMA (Trung bình động hàm mũ)","dashboard.indicator.rsi":"RSI (Chỉ số sức mạnh tương đối)","dashboard.indicator.macd":"MACD","dashboard.indicator.bb":"Dải Bollinger (...Dải Bollinger)","dashboard.indicator.atr":"ATR (Chỉ số phạm vi trung bình thực)","dashboard.indicator.cci":"CCI (Chỉ số kênh hàng hóa)","dashboard.indicator.williams":"Williams %R (Chỉ số Williams %R)","dashboard.indicator.mfi":"MFI (Chỉ số dòng tiền)","dashboard.indicator.adx":"ADX (Chỉ số hướng trung bình)","dashboard.indicator.obv":"OBV (Chỉ số khối lượng cân bằng)","dashboard.indicator.adosc":"ADOSC (Chỉ báo dao động tích lũy/phân phối)","dashboard.indicator.ad":"AD (Chỉ báo đường tích lũy/phân phối)","dashboard.indicator.kdj":"KDJ (Chỉ báo ngẫu nhiên)","dashboard.indicator.signal.buy":"MUA","dashboard.indicator.signal.sell":"BÁN","dashboard.indicator.signal.supertrendBuy":"Mua theo xu hướng siêu mạnh","dashboard.indicator.signal.supertrendSell":"Bán theo xu hướng siêu mạnh","dashboard.indicator.chart.kline":"Đường K","dashboard.indicator.chart.volume":"Khối lượng","dashboard.indicator.chart.uptrend":"Xu hướng tăng","dashboard.indicator.chart.downtrend":"Xu hướng giảm","dashboard.indicator.tooltip.time":"Thời gian","dashboard.indicator.tooltip.open":"Mở","dashboard.indicator.tooltip.close":"Đóng","dashboard.indicator.tooltip.high":"Cao","dashboard.indicator.tooltip.low":"Thấp","dashboard.indicator.tooltip.volume":"Khối lượng","dashboard.indicator.drawing.line":"Đoạn thẳng","dashboard.indicator.drawing.horizontalLine":"Đường ngang","dashboard.indicator.drawing.verticalLine":"Đường thẳng đứng","dashboard.indicator.drawing.ray":"Tia","dashboard.indicator.drawing.straightLine":"Đường thẳng","dashboard.indicator.drawing.parallelLine":"Đường song song","dashboard.indicator.drawing.priceLine":"Giá","dashboard.indicator.drawing.priceChannel":"kênh giá","dashboard.indicator.drawing.fibonacciLine":"đường Fibonacci","dashboard.indicator.drawing.measure":"Đo lường","dashboard.indicator.drawing.clearAll":"xóa tất cả các đường đã vẽ","dashboard.indicator.market.USStock":"cổ phiếu Mỹ","dashboard.indicator.market.Crypto":"tiền điện tử","dashboard.indicator.market.Forex":"ngoại hối","dashboard.indicator.market.Futures":"hợp đồng tương lai","dashboard.indicator.create":"Tạo Indicator","dashboard.indicator.editor.title":"Tạo/Chỉnh sửa chỉ báo","dashboard.indicator.editor.name":"Tên chỉ báo","dashboard.indicator.editor.nameRequired":"Vui lòng nhập tên chỉ báo","dashboard.indicator.editor.namePlaceholder":"Vui lòng nhập tên chỉ báo","dashboard.indicator.editor.description":"Mô tả chỉ báo","dashboard.indicator.editor.descriptionPlaceholder":"Vui lòng nhập mô tả chỉ báo (tùy chọn)","dashboard.indicator.editor.code":"Mã Python","dashboard.indicator.editor.codeRequired":"Vui lòng nhập mã chỉ báo","dashboard.indicator.editor.codePlaceholder":"Vui lòng nhập mã Python code","dashboard.indicator.editor.run":"Chạy","dashboard.indicator.editor.runHint":"Nhấp vào nút chạy để xem trước hiệu ứng của chỉ báo trên biểu đồ nến","dashboard.indicator.editor.guide":"Hướng dẫn phát triển","dashboard.indicator.editor.guideTitle":"Hướng dẫn phát triển chỉ báo Python","dashboard.indicator.editor.save":"Lưu","dashboard.indicator.editor.cancel":"Hủy","dashboard.indicator.editor.unnamed":"Chỉ báo chưa được đặt tên","dashboard.indicator.editor.publishToCommunity":"Chia sẻ lên cộng đồng","dashboard.indicator.editor.publishToCommunityHint":"Sau khi chia sẻ, người dùng khác có thể xem và sử dụng các chỉ số của bạn, trong cộng đồng","dashboard.indicator.editor.indicatorType":"Loại chỉ báo","dashboard.indicator.editor.indicatorTypeRequired":"Vui lòng chọn loại chỉ báo","dashboard.indicator.editor.indicatorTypePlaceholder":"Vui lòng chọn loại chỉ báo","dashboard.indicator.editor.previewImage":"Hình ảnh xem trước","dashboard.indicator.editor.uploadImage":"Tải lên hình ảnh","dashboard.indicator.editor.previewImageHint":"Kích thước đề xuất: 800x400, kích thước không vượt quá 2MB","dashboard.indicator.editor.pricing":"Giá (QDT)","dashboard.indicator.editor.pricingType.free":"Miễn phí","dashboard.indicator.editor.pricingType.permanent":"Vĩnh viễn","dashboard.indicator.editor.pricingType.monthly":"Hàng tháng","dashboard.indicator.editor.price":"Giá","dashboard.indicator.editor.priceRequired":"Vui lòng nhập giá","dashboard.indicator.editor.pricePlaceholder":"Vui lòng nhập giá","dashboard.indicator.editor.pricingHint":"Mặc dù chỉ báo miễn phí có giá 0, nền tảng sẽ thưởng cho bạn dựa trên việc sử dụng chỉ báo và tỷ lệ đánh giá tích cực (QDT)","dashboard.indicator.editor.aiGenerate":"Tạo thông minh","dashboard.indicator.editor.aiPromptPlaceholder":"Hãy cho tôi biết ý tưởng của bạn, và Tôi sẽ tạo mã chỉ báo Python cho bạn","dashboard.indicator.editor.aiGenerateBtn":"Mã được tạo bởi AI","dashboard.indicator.editor.aiPromptRequired":"Vui lòng nhập ý tưởng của bạn","dashboard.indicator.editor.aiGenerateSuccess":"Tạo mã thành công","dashboard.indicator.editor.aiGenerateError":"Tạo mã thất bại, vui lòng thử lại sau","dashboard.indicator.backtest.title":"Kiểm thử ngược chỉ báo","dashboard.indicator.backtest.config":"Tham số kiểm thử ngược","dashboard.indicator.backtest.startDate":"Ngày bắt đầu","dashboard.indicator.backtest.endDate":"Ngày kết thúc Ngày","dashboard.indicator.backtest.selectStartDate":"Chọn ngày bắt đầu","dashboard.indicator.backtest.selectEndDate":"Chọn ngày kết thúc","dashboard.indicator.backtest.startDateRequired":"Vui lòng chọn ngày bắt đầu","dashboard.indicator.backtest.endDateRequired":"Vui lòng chọn ngày kết thúc","dashboard.indicator.backtest.initialCapital":"Vốn ban đầu","dashboard.indicator.backtest.initialCapitalRequired":"Vui lòng nhập vốn ban đầu","dashboard.indicator.backtest.commission":"Tỷ lệ hoa hồng","dashboard.indicator.backtest.leverage":"Tỷ lệ đòn bẩy","dashboard.indicator.backtest.tradeDirection":"Hướng giao dịch Hướng","dashboard.indicator.backtest.longOnly":"Mua","dashboard.indicator.backtest.shortOnly":"Bán","dashboard.indicator.backtest.both":"Cả hai chiều","dashboard.indicator.backtest.run":"Bắt ​​đầu kiểm thử ngược","dashboard.indicator.backtest.rerun":"Chạy lại kiểm thử ngược","dashboard.indicator.backtest.close":"Đóng","dashboard.indicator.backtest.running":"Đang tiến hành kiểm thử ngược...","dashboard.indicator.backtest.results":"Kết quả kiểm thử ngược","dashboard.indicator.backtest.totalReturn":"Tổng lợi nhuận","dashboard.indicator.backtest.annualReturn":"Lợi nhuận hàng năm","dashboard.indicator.backtest.maxDrawdown":"Mức giảm tối đa","dashboard.indicator.backtest.sharpeRatio":"Tỷ lệ Sharpe ratio","dashboard.indicator.backtest.winRate":"Tỷ lệ thắng","dashboard.indicator.backtest.profitFactor":"Tỷ lệ lãi/lỗ","dashboard.indicator.backtest.totalTrades":"Số lượng giao dịch","dashboard.indicator.totalReturn":"Tổng lợi nhuận","dashboard.indicator.annualReturn":"Lợi nhuận hàng năm","dashboard.indicator.maxDrawdown":"Mức giảm tối đa","dashboard.indicator.sharpeRatio":"Tỷ lệ Sharpe","dashboard.indicator.winRate":"Tỷ lệ thắng","dashboard.indicator.profitFactor":"Tỷ lệ lãi/lỗ Tỷ lệ","dashboard.indicator.totalTrades":"Tổng số giao dịch","dashboard.indicator.backtest.totalCommission":"Tổng phí hoa hồng","dashboard.indicator.backtest.equityCurve":"Đường cong vốn chủ sở hữu","dashboard.indicator.backtest.strategy":"Lợi nhuận của chỉ báo","dashboard.indicator.backtest.benchmark":"Lợi nhuận chuẩn","dashboard.indicator.backtest.tradeHistory":"Lịch sử giao dịch","dashboard.indicator.backtest.tradeTime":"Thời gian","dashboard.indicator.backtest.tradeType":"Loại giao dịch","dashboard.indicator.backtest.buy":"Mua","dashboard.indicator.backtest.sell":"Bán","dashboard.indicator.backtest.liquidation":"Tài khoản đã bị thanh lý","dashboard.indicator.backtest.openLong":"Mở lệnh mua","dashboard.indicator.backtest.closeLong":"Đóng lệnh mua","dashboard.indicator.backtest.closeLongStop":"Đóng lệnh mua (Cắt lỗ)","dashboard.indicator.backtest.closeLongProfit":"Đóng lệnh mua (Chốt lời)","dashboard.indicator.backtest.addLong":"Thêm lệnh mua","dashboard.indicator.backtest.openShort":"Mở lệnh bán","dashboard.indicator.backtest.closeShort":"Đóng lệnh bán","dashboard.indicator.backtest.closeShortStop":"Đóng lệnh bán (Dừng lỗ) Lỗ","dashboard.indicator.backtest.closeShortProfit":"Đóng vị thế bán khống (chốt lời)","dashboard.indicator.backtest.addShort":"Thêm vị thế bán khống","dashboard.indicator.backtest.price":"Giá","dashboard.indicator.backtest.amount":"Số lượng","dashboard.indicator.backtest.balance":"Số dư tài khoản","dashboard.indicator.backtest.profit":"Lãi/Lỗ","dashboard.indicator.backtest.success":"Kiểm thử ngược thành công","dashboard.indicator.backtest.failed":"Kiểm thử ngược thất bại, vui lòng thử lại sau","dashboard.indicator.backtest.noIndicatorCode":"Không có mã nào để kiểm thử ngược này","dashboard.indicator.backtest.noSymbol":"Vui lòng chọn công cụ giao dịch trước","dashboard.indicator.backtest.dateRangeExceeded":"Thời gian kiểm thử ngược vượt quá giới hạn: chỉ có thể kiểm thử ngược trong khoảng thời gian {timeframe} là {maxRange}","dashboard.indicator.backtest.dateRangeExceededDays":"Backtest range exceeds limit: {timeframe} max {maxRange} ({maxDays} days)","dashboard.indicator.backtest.hint.entryPctMax":"Max entry: {maxPct}% (reserve budget for future scale-ins)","dashboard.indicator.backtest.metaLine":"Symbol: {symbol} | Market: {market} | Timeframe: {timeframe}","dashboard.indicator.backtest.savedRunId":"Backtest saved. Run ID: {id}","dashboard.indicator.backtest.prev":"Previous","dashboard.indicator.backtest.next":"Next","dashboard.indicator.backtest.steps.strategy.title":"Strategy","dashboard.indicator.backtest.steps.strategy.desc":"Position sizing & risk controls","dashboard.indicator.backtest.steps.trading.title":"Trading settings","dashboard.indicator.backtest.steps.trading.desc":"Time range, capital, fees, leverage","dashboard.indicator.backtest.steps.results.title":"Results","dashboard.indicator.backtest.steps.results.desc":"Backtest output","dashboard.indicator.backtest.panel.risk":"Risk management (SL/TP/Trailing)","dashboard.indicator.backtest.panel.scale":"Scale in / DCA (trend & mean-reversion)","dashboard.indicator.backtest.panel.reduce":"Reduce position (trend & adverse)","dashboard.indicator.backtest.panel.position":"Position sizing","dashboard.indicator.backtest.field.stopLossPct":"Stop Loss (%)","dashboard.indicator.backtest.field.takeProfitPct":"Take Profit (%)","dashboard.indicator.backtest.field.trailingEnabled":"Trailing stop / take profit","dashboard.indicator.backtest.field.trailingStopPct":"Trailing drawdown (%)","dashboard.indicator.backtest.field.trailingActivationPct":"Trailing activation (%)","dashboard.indicator.backtest.field.slippage":"Slippage (%)","dashboard.indicator.backtest.field.trendAddEnabled":"Trend-following scale-in","dashboard.indicator.backtest.field.dcaAddEnabled":"Mean-reversion DCA","dashboard.indicator.backtest.field.trendAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.dcaAddStepPct":"DCA trigger (%)","dashboard.indicator.backtest.field.trendAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.dcaAddSizePct":"DCA size (% of capital)","dashboard.indicator.backtest.field.trendAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.dcaAddMaxTimes":"Max DCA times","dashboard.indicator.backtest.field.trendReduceEnabled":"Trend reduce","dashboard.indicator.backtest.field.adverseReduceEnabled":"Adverse reduce","dashboard.indicator.backtest.field.trendReduceStepPct":"Trend trigger (%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"Adverse trigger (%)","dashboard.indicator.backtest.field.trendReduceSizePct":"Reduce size (% of position)","dashboard.indicator.backtest.field.adverseReduceSizePct":"Adverse reduce size (% of position)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"Max trend reduce times","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"Max adverse reduce times","dashboard.indicator.backtest.field.entryPct":"Entry size (% of capital)","dashboard.indicator.backtest.field.minOrderPct":"Min order size (% of capital) (optional)","dashboard.indicator.backtest.closeLongTrailing":"Close Long (Trailing)","dashboard.indicator.backtest.reduceLong":"Reduce Long","dashboard.indicator.backtest.closeShortTrailing":"Close Short (Trailing)","dashboard.indicator.backtest.reduceShort":"Reduce Short","dashboard.docs.title":"Trung tâm Tài liệu","dashboard.docs.search.placeholder":"Tìm kiếm Tài liệu...","dashboard.docs.category.all":"Tất cả","dashboard.docs.category.guide":"Hướng dẫn dành cho nhà phát triển","dashboard.docs.category.api":"Tài liệu API","dashboard.docs.category.tutorial":"Hướng dẫn","dashboard.docs.category.faq":"Câu hỏi thường gặp Câu hỏi","dashboard.docs.featured.title":"Tài liệu được đề xuất","dashboard.docs.featured.tag":"Được đề xuất","dashboard.docs.list.views":"Lượt xem","dashboard.docs.list.author":"Tác giả","dashboard.docs.list.empty":"Không có tài liệu nào","dashboard.docs.list.backToAll":"Trả về tất cả tài liệu","dashboard.docs.list.total":"Tổng số {count} tài liệu","dashboard.docs.detail.back":"Trả về danh sách tài liệu","dashboard.docs.detail.updatedAt":"Cập nhật lúc","dashboard.docs.detail.related":"Tài liệu liên quan","dashboard.docs.detail.notFound":"Không tìm thấy tài liệu tồn tại","dashboard.docs.detail.error":"Tài liệu không tồn tại hoặc đã bị xóa","dashboard.docs.search.result":"Kết quả tìm kiếm","dashboard.docs.search.keyword":"Từ khóa","community.filter.indicatorType":"Loại chỉ báo","community.filter.all":"Tất cả","community.filter.other":"Các tùy chọn khác","community.filter.pricing":"Loại giá","community.filter.allPricing":"Tất cả giá","community.filter.sortBy":"Phương thức sắp xếp","community.filter.search":"Tìm kiếm","community.filter.searchPlaceholder":"Tên chỉ báo tìm kiếm","community.indicatorType.trend":"Định hướng theo xu hướng","community.indicatorType.momentum":"Động lượng","community.indicatorType.volatility":"Biến động","community.indicatorType.volume":"Khối lượng","community.indicatorType.custom":"Tùy chỉnh","community.pricing.free":"Miễn phí","community.pricing.paid":"Trả phí","community.sort.downloads":"Lượt tải xuống","community.sort.rating":"Xếp hạng","community.sort.newest":"Phiên bản mới nhất","community.pagination.total":"Tổng số {total} chỉ báo","community.noDescription":"Không có mô tả","community.detail.type":"Loại","community.detail.pricing":"Giá cả","community.detail.rating":"Xếp hạng","community.detail.downloads":"Lượt tải xuống","community.detail.author":"Tác giả","community.detail.description":"Mô tả","community.detail.detailContent":"Mô tả chi tiết","community.detail.backtestStats":"Thống kê kiểm thử ngược","community.action.purchase":"Số liệu mua hàng","community.action.addToMyIndicators":"Thêm vào chỉ báo của tôi","community.action.favorite":"Yêu thích","community.action.unfavorite":"Bỏ yêu thích","community.action.buyNow":"Mua ngay Ngay bây giờ","community.action.renew":"Gia hạn","community.purchase.price":"Giá","community.purchase.permanent":"Vĩnh viễn","community.purchase.monthly":"Hàng tháng","community.purchase.confirmBuy":"Xác nhận mua chỉ số này ({price} QDT)?","community.purchase.confirmRenew":"Xác nhận gia hạn chỉ số này ({price} QDT/tháng)?","community.purchase.confirmFree":"Xác nhận thêm chỉ số miễn phí này?","community.purchase.confirmTitle":"Xác nhận thao tác","community.purchase.owned":"Bạn đã mua chỉ số này (có hiệu lực vĩnh viễn)","community.purchase.ownIndicator":"Đây là chỉ số bạn đã công bố","community.purchase.expired":"Gói đăng ký của bạn đã hết hạn","community.purchase.expiresOn":"Ngày hết hạn: {date}","community.tabs.detail":"Chi tiết chỉ số","community.tabs.backtest":"Dữ liệu kiểm thử ngược","community.tabs.ratings":"Xếp hạng người dùng","community.rating.myRating":"Xếp hạng của tôi","community.rating.stars":"{count} Stars","community.rating.commentPlaceholder":"Chia sẻ trải nghiệm người dùng của bạn...","community.rating.submit":"Gửi đánh giá","community.rating.modify":"Sửa đổi","community.rating.saveModify":"Lưu thay đổi","community.rating.cancel":"Hủy","community.rating.selectRating":"Vui lòng chọn đánh giá","community.rating.success":"Đánh giá thành công","community.rating.modifySuccess":"Đánh giá được sửa đổi thành công","community.rating.failed":"Đánh giá thất bại","community.rating.noRatings":"Chưa có đánh giá nào","community.backtest.note":"Dữ liệu trên là kết quả kiểm thử ngược trong quá khứ, chỉ để tham khảo và không đại diện cho hiệu suất trong tương lai","community.backtest.noData":"Không có dữ liệu kiểm thử ngược","community.backtest.uploadHint":"Tác giả chưa tải lên dữ liệu kiểm thử ngược","community.message.loadFailed":"Không thể tải danh sách chỉ báo","community.message.purchaseProcessing":"Đang xử lý yêu cầu mua hàng...","community.message.downloadSuccess":"Chỉ báo đã được thêm vào danh sách chỉ báo của tôi","community.message.favoriteSuccess":"Đã thêm vào mục yêu thích thành công","community.message.unfavoriteSuccess":"Đã xóa khỏi mục yêu thích thành công","community.message.operationSuccess":"Thao tác thành công","community.message.operationFailed":"Thao tác thất bại thất bại","community.banner.readOnly":"Chỉ xem","community.banner.loginHint":"Để đăng nhập hoặc đăng ký, vui lòng nhấp vào nút để chuyển đến trang độc lập nhằm tránh các vấn đề CSRF","community.banner.jumpButton":"Đi đến Đăng nhập/Đăng ký","dashboard.totalEquity":"Tổng vốn chủ sở hữu","dashboard.totalPnL":"Tổng lợi nhuận/thua lỗ","dashboard.aiStrategies":"Chiến lược AI","dashboard.indicatorStrategies":"Chiến lược chỉ báo","dashboard.running":"Đang chạy","dashboard.pnlHistory":"Lịch sử lợi nhuận/thua lỗ","dashboard.strategyPerformance":"Tỷ lệ lợi nhuận/thua lỗ của chiến lược","dashboard.recentTrades":"Các giao dịch gần đây","dashboard.currentPositions":"Vị thế hiện tại","dashboard.table.time":"Thời gian","dashboard.table.strategy":"Chiến lược Name","dashboard.table.symbol":"Tài sản cơ sở","dashboard.table.type":"Loại","dashboard.table.side":"Hướng","dashboard.table.size":"Số lượng","dashboard.table.entryPrice":"Giá mở cửa trung bình","dashboard.table.price":"Giá","dashboard.table.amount":"Số lượng","dashboard.table.profit":"Lợi nhuận/Thua lỗ","dashboard.pendingOrders":"Lịch sử thực hiện lệnh","dashboard.totalOrders":"Tổng {total} lệnh","dashboard.viewError":"Xem lỗi","dashboard.filled":"Đã khớp","dashboard.orderTable.time":"Thời gian tạo","dashboard.orderTable.strategy":"Chiến lược","dashboard.orderTable.symbol":"Cặp giao dịch","dashboard.orderTable.signalType":"Loại tín hiệu","dashboard.orderTable.amount":"Số lượng","dashboard.orderTable.price":"Giá khớp","dashboard.orderTable.status":"Trạng thái","dashboard.orderTable.executedAt":"Thời gian thực hiện","dashboard.signalType.openLong":"Mở Long","dashboard.signalType.openShort":"Mở Short","dashboard.signalType.closeLong":"Đóng Long","dashboard.signalType.closeShort":"Đóng Short","dashboard.signalType.addLong":"Thêm Long","dashboard.signalType.addShort":"Thêm Short","dashboard.status.pending":"Đang chờ","dashboard.status.processing":"Đang xử lý","dashboard.status.completed":"Hoàn thành","dashboard.status.failed":"Thất bại","dashboard.status.cancelled":"Đã hủy","dashboard.table.pnl":"Lợi nhuận/Thua lỗ chưa thực hiện","form.basic-form.basic.title":"Biểu mẫu cơ bản","form.basic-form.basic.description":"Các trang biểu mẫu được sử dụng để thu thập hoặc xác minh thông tin từ người dùng. Biểu mẫu cơ bản thường phổ biến trong các trường hợp có ít mục dữ liệu.","form.basic-form.title.label":"Tiêu đề","form.basic-form.title.placeholder":"Đặt tên cho mục tiêu","form.basic-form.title.required":"Vui lòng nhập tiêu đề","form.basic-form.date.label":"Ngày bắt đầu và ngày kết thúc","form.basic-form.placeholder.start":"Ngày bắt đầu","form.basic-form.placeholder.end":"Ngày kết thúc","form.basic-form.date.required":"Vui lòng chọn ngày bắt đầu và ngày kết thúc","form.basic-form.goal.label":"Mô tả mục tiêu","form.basic-form.goal.placeholder":"Vui lòng nhập mục tiêu công việc theo từng giai đoạn","form.basic-form.goal.required":"Vui lòng nhập mục tiêu Mô tả","form.basic-form.standard.label":"Số liệu","form.basic-form.standard.placeholder":"Vui lòng nhập số liệu","form.basic-form.standard.required":"Vui lòng nhập số liệu","form.basic-form.client.label":"Khách hàng","form.basic-form.client.required":"Vui lòng mô tả khách hàng bạn đang phục vụ","form.basic-form.label.tooltip":"Đối tượng mục tiêu","form.basic-form.client.placeholder":"Vui lòng mô tả khách hàng bạn đang phục vụ; khách hàng nội bộ có thể trực tiếp là @tên/ID nhân viên","form.basic-form.invites.label":"Người mời","form.basic-form.invites.placeholder":"Vui lòng trực tiếp là @tên/ID nhân viên; Có thể mời tối đa 5 người","form.basic-form.weight.label":"Trọng lượng","form.basic-form.weight.placeholder":"Vui lòng nhập","form.basic-form.public.label":"Mục tiêu công khai","form.basic-form.label.help":"Khách hàng và người đánh giá được chia sẻ theo mặc định","form.basic-form.radio.public":"Công khai","form.basic-form.radio.partially-public":"Công khai một phần","form.basic-form.radio.private":"Không công khai","form.basic-form.publicUsers.placeholder":"Công khai cho","form.basic-form.option.A":"Đồng nghiệp 1","form.basic-form.option.B":"Đồng nghiệp 2","form.basic-form.option.C":"Đồng nghiệp số Ba","form.basic-form.email.required":"Vui lòng nhập địa chỉ email của bạn!","form.basic-form.email.wrong-format":"Định dạng địa chỉ email không chính xác!","form.basic-form.userName.required":"Vui lòng nhập tên người dùng của bạn!","form.basic-form.password.required":"Vui lòng nhập mật khẩu của bạn!","form.basic-form.password.twice":"Hai mật khẩu không khớp!","form.basic-form.strength.msg":"Vui lòng nhập ít nhất 6 ký tự. Vui lòng không sử dụng mật khẩu dễ đoán.","form.basic-form.strength.strong":"Độ mạnh: Mạnh","form.basic-form.strength.medium":"Độ mạnh: Trung bình","form.basic-form.strength.short":"Độ mạnh: Quá ngắn","form.basic-form.confirm-password.required":"Vui lòng xác nhận mật khẩu!","form.basic-form.phone-number.required":"Vui lòng nhập số điện thoại của bạn!","form.basic-form.phone-number.wrong-format":"Định dạng số điện thoại không chính xác!","form.basic-form.verification-code.required":"Vui lòng nhập mã xác minh!","form.basic-form.form.get-captcha":"Lấy mã xác minh mã","form.basic-form.captcha.second":"giây","form.basic-form.form.optional":"(Tùy chọn)","form.basic-form.form.submit":"Gửi","form.basic-form.form.save":"Lưu","form.basic-form.email.placeholder":"Email","form.basic-form.password.placeholder":"Mật khẩu phải có ít nhất 6 ký tự, phân biệt chữ hoa chữ thường","form.basic-form.confirm-password.placeholder":"Xác nhận mật khẩu","form.basic-form.phone-number.placeholder":"Số điện thoại","form.basic-form.verification-code.placeholder":"Mã xác minh","result.success.title":"Đã gửi Thành công","result.success.description":'Trang kết quả nộp bài được sử dụng để cung cấp phản hồi về kết quả xử lý của một loạt các tác vụ vận hành. Nếu chỉ là một thao tác đơn giản, thông báo Tin nhắn toàn cục là đủ. Vùng văn bản này có thể hiển thị các giải thích bổ sung đơn giản. Nếu cần hiển thị nội dung như một "tài liệu", vùng màu xám bên dưới có thể hiển thị nội dung phức tạp hơn.',"result.success.operate-title":"Tên dự án","result.success.operate-id":"ID dự án","result.success.principal":"Người phụ trách","result.success.operate-time":"Thời gian hiệu quả","result.success.step1-title":"Tạo dự án","result.success.step1-operator":"Qu Lili","result.success.step2-title":"Đánh giá ban đầu của phòng ban","result.success.step2-operator":"Zhou Maomao","result.success.step2-extra":"Theo dõi","result.success.step3-title":"Đánh giá tài chính","result.success.step4-title":"Hoàn thành","result.success.btn-return":"Quay lại danh sách","result.success.btn-project":"Xem dự án","result.success.btn-print":"In","result.fail.error.title":"Gửi bài không thành công","result.fail.error.description":"Vui lòng kiểm tra và chỉnh sửa thông tin sau trước khi gửi lại.","result.fail.error.hint-title":"Nội dung bạn đã gửi có các lỗi sau:","result.fail.error.hint-text1":"Tài khoản của bạn đã bị đóng băng","result.fail.error.hint-btn1":"Mở khóa ngay lập tức","result.fail.error.hint-text2":"Tài khoản của bạn chưa đủ điều kiện để đăng ký","result.fail.error.hint-btn2":"Nâng cấp ngay lập tức","result.fail.error.btn-text":"Quay lại chỉnh sửa","account.settings.menuMap.custom":"Cá nhân hóa","account.settings.menuMap.binding":"Liên kết tài khoản","account.settings.basic.avatar":"Avatar","account.settings.basic.change-avatar":"Thay đổi ảnh đại diện","account.settings.basic.email":"Địa chỉ email","account.settings.basic.email-message":"Vui lòng nhập địa chỉ email của bạn!","account.settings.basic.nickname":"Biệt danh","account.settings.basic.nickname-message":"Vui lòng nhập biệt danh của bạn!","account.settings.basic.profile":"Hồ sơ","account.settings.basic.profile-message":"Vui lòng nhập thông tin hồ sơ của bạn!","account.settings.basic.profile-placeholder":"Hồ sơ","account.settings.basic.country":"Quốc gia/Vùng","account.settings.basic.country-message":"Vui lòng nhập quốc gia của bạn hoặc khu vực!","account.settings.basic.geographic":"Tỉnh và Thành phố","account.settings.basic.geographic-message":"Vui lòng nhập tỉnh và thành phố của bạn!","account.settings.basic.address":"Địa chỉ đường phố","account.settings.basic.address-message":"Vui lòng nhập địa chỉ đường phố của bạn!","account.settings.basic.phone":"Số điện thoại","account.settings.basic.phone-message":"Vui lòng nhập số điện thoại của bạn!","account.settings.basic.update":"Cập nhật thông tin cơ bản","account.settings.basic.update.success":"Đã cập nhật thông tin cơ bản thành công","account.settings.security.strong":"Mạnh","account.settings.security.medium":"Trung bình","account.settings.security.weak":"Yếu","account.settings.security.password":"Mật khẩu tài khoản","account.settings.security.password-description":"Độ mạnh mật khẩu hiện tại:","account.settings.security.phone":"Số điện thoại bảo mật","account.settings.security.phone-description":"Số điện thoại liên kết:","account.settings.security.question":"Câu hỏi bảo mật","account.settings.security.question-description":"Chưa thiết lập câu hỏi bảo mật nào. Câu hỏi bảo mật có thể bảo vệ hiệu quả tính bảo mật của tài khoản","account.settings.security.email":"Email liên kết","account.settings.security.email-description":"Số email liên kết:","account.settings.security.mfa":"Thiết bị MFA","account.settings.security.mfa-description":"Thiết bị MFA chưa liên kết. Việc liên kết sẽ cho phép xác nhận thứ cấp","account.settings.security.modify":"Sửa đổi","account.settings.security.set":"Cài đặt","account.settings.security.bind":"Liên kết","account.settings.binding.taobao":"Liên kết Taobao","account.settings.binding.taobao-description":"Hiện chưa được liên kết với tài khoản Taobao","account.settings.binding.alipay":"Liên kết Alipay","account.settings.binding.alipay-description":"Hiện chưa được liên kết với tài khoản Alipay","account.settings.binding.dingding":"Liên kết DingTalk","account.settings.binding.dingding-description":"Hiện chưa được liên kết với tài khoản DingTalk","account.settings.binding.bind":"Liên kết","account.settings.notification.password":"Mật khẩu tài khoản","account.settings.notification.password-description":"Tin nhắn từ người dùng khác sẽ được gửi qua thông báo trong ứng dụng","account.settings.notification.messages":"Tin nhắn hệ thống","account.settings.notification.messages-description":"Tin nhắn hệ thống sẽ được gửi qua thông báo trong ứng dụng","account.settings.notification.todo":"Việc cần làm","account.settings.notification.todo-description":"Việc cần làm sẽ được gửi qua thông báo trong ứng dụng","account.settings.settings.open":"Bật","account.settings.settings.close":"Tắt","trading-assistant.title":"Trợ lý giao dịch","trading-assistant.strategyList":"Chiến lược Danh sách","trading-assistant.createStrategy":"Tạo chiến lược","trading-assistant.noStrategy":"Không có chiến lược nào","trading-assistant.selectStrategy":"Chọn một chiến lược từ bên trái để xem chi tiết","trading-assistant.startStrategy":"Bắt ​​đầu chiến lược","trading-assistant.stopStrategy":"Dừng chiến lược","trading-assistant.editStrategy":"Chỉnh sửa chiến lược","trading-assistant.deleteStrategy":"Xóa chiến lược","trading-assistant.status.running":"Đang chạy","trading-assistant.status.stopped":"Đã dừng","trading-assistant.status.error":"Lỗi","trading-assistant.strategyType.IndicatorStrategy":"Chỉ báo kỹ thuật Chiến lược","trading-assistant.strategyType.PromptBasedStrategy":"Chiến lược dựa trên lời nhắc","trading-assistant.strategyType.GridStrategy":"Chiến lược lưới","trading-assistant.tabs.tradingRecords":"Hồ sơ giao dịch","trading-assistant.tabs.positions":"Vị thế","trading-assistant.tabs.equityCurve":"Đường cong vốn chủ sở hữu","trading-assistant.form.step1":"Chọn chỉ báo","trading-assistant.form.step2":"Cấu hình sàn giao dịch","trading-assistant.form.step3":"Tham số chiến lược","trading-assistant.form.indicator":"Chọn chỉ báo","trading-assistant.form.indicatorHint":"Chỉ chọn các chỉ báo kỹ thuật bạn muốn đã mua hoặc tạo","trading-assistant.form.qdtCostHints":"Việc sử dụng chiến lược này sẽ tiêu tốn QDT; vui lòng đảm bảo tài khoản của bạn có đủ số dư QDT","trading-assistant.form.indicatorDescription":"Mô tả chỉ báo","trading-assistant.form.noDescription":"Không có mô tả","trading-assistant.form.exchange":"Chọn sàn giao dịch","trading-assistant.form.apiKey":"Khóa API","trading-assistant.form.secretKey":"Khóa bí mật","trading-assistant.form.passphrase":"Mật khẩu","trading-assistant.form.testConnection":"Kiểm tra kết nối","trading-assistant.form.strategyName":"Tên chiến lược","trading-assistant.form.symbol":"Cặp giao dịch","trading-assistant.form.symbolHint":"Hiện tại chỉ hỗ trợ các cặp giao dịch tiền điện tử","trading-assistant.form.initialCapital":"Vốn ban đầu","trading-assistant.form.marketType":"Loại thị trường","trading-assistant.form.marketTypeFutures":"Hợp đồng tương lai","trading-assistant.form.marketTypeSpot":"Giao dịch giao ngay","trading-assistant.form.marketTypeHint":"Hợp đồng hỗ trợ giao dịch hai chiều và đòn bẩy; Giao dịch giao ngay chỉ hỗ trợ vị thế mua với đòn bẩy cố định là 1x","trading-assistant.form.leverage":"Tỷ lệ đòn bẩy","trading-assistant.form.leverageHint":"Hợp đồng: 1-125x, Giao ngay: Cố định 1x","trading-assistant.form.spotLeverageFixed":"Đòn bẩy giao dịch giao ngay được cố định ở mức 1x","trading-assistant.form.spotOnlyLongHint":"Giao dịch giao ngay chỉ hỗ trợ vị thế mua","trading-assistant.form.tradeDirection":"Hướng giao dịch","trading-assistant.form.tradeDirectionLong":"Chỉ mua","trading-assistant.form.tradeDirectionShort":"Chỉ bán","trading-assistant.form.tradeDirectionBoth":"Hai chiều giao dịch","trading-assistant.form.timeframe":"Khung thời gian","trading-assistant.form.klinePeriod":"Chu kỳ K-Line","trading-assistant.form.timeframe1m":"1 phút","trading-assistant.form.timeframe5m":"5 phút","trading-assistant.form.timeframe15m":"15 phút","trading-assistant.form.timeframe30m":"30 phút","trading-assistant.form.timeframe1H":"1 giờ","trading-assistant.form.timeframe4H":"4 giờ","trading-assistant.form.timeframe1D":"1 ngày","trading-assistant.form.selectStrategyType":"Chọn loại chiến lược","trading-assistant.form.indicatorStrategy":"Chiến lược chỉ báo","trading-assistant.form.indicatorStrategyDesc":"Chiến lược giao dịch tự động dựa trên chỉ báo kỹ thuật","trading-assistant.form.aiStrategy":"Chiến lược AI","trading-assistant.form.aiStrategyDesc":"Chiến lược giao dịch tự động dựa trên quyết định thông minh AI","trading-assistant.form.enableAiFilter":"Bật bộ lọc quyết định thông minh AI","trading-assistant.form.enableAiFilterHint":"Khi bật, tín hiệu chỉ báo sẽ được lọc bởi AI để cải thiện chất lượng giao dịch","trading-assistant.form.aiFilterPrompt":"Lời nhắc tùy chỉnh","trading-assistant.form.aiFilterPromptHint":"Cung cấp hướng dẫn tùy chỉnh cho bộ lọc AI, để trống để sử dụng mặc định hệ thống","trading-assistant.validation.strategyTypeRequired":"Vui lòng chọn loại chiến lược","trading-assistant.form.advancedSettings":"Cài đặt nâng cao","trading-assistant.form.orderMode":"Chế độ đặt lệnh","trading-assistant.form.orderModeMaker":"Maker","trading-assistant.form.orderModeTaker":"Giá thị trường","trading-assistant.form.orderModeHint":"Chế độ Maker sử dụng lệnh giới hạn, phí thấp hơn; chế độ Market thực hiện ngay lập tức, phí cao hơn","trading-assistant.form.makerWaitSec":"Thời gian chờ của Maker (giây)","trading-assistant.form.makerWaitSecHint":"Thời gian chờ sau khi đặt lệnh; ","trading-assistant.form.makerRetries":"Số lần thử lại cho lệnh maker","trading-assistant.form.makerRetriesHint":"Số lần thử lại tối đa nếu lệnh maker không được khớp","trading-assistant.form.fallbackToMarket":"Hạ cấp lệnh maker thất bại xuống giá thị trường","trading-assistant.form.fallbackToMarketHint":"Có nên hạ cấp các lệnh mở/đóng đang chờ xử lý thành lệnh thị trường để đảm bảo thực hiện khi chúng không được khớp hay không","trading-assistant.form.marginMode":"Chế độ ký quỹ","trading-assistant.form.marginModeCross":"Ký quỹ chéo","trading-assistant.form.marginModeIsolated":"Ký quỹ riêng biệt Ký quỹ","trading-assistant.form.stopLossPct":"Tỷ lệ cắt lỗ (%)","trading-assistant.form.stopLossPctHint":"Thiết lập tỷ lệ cắt lỗ; 0 cho biết lệnh dừng lỗ không được bật","trading-assistant.form.takeProfitPct":"Tỷ lệ chốt lời (%)","trading-assistant.form.takeProfitPctHint":"Thiết lập tỷ lệ chốt lời, 0 cho biết lệnh chốt lời không được bật","trading-assistant.form.signalMode":"Chế độ tín hiệu","trading-assistant.form.signalModeConfirmed":"Chế độ xác nhận","trading-assistant.form.signalModeAggressive":"Chế độ giao dịch tích cực","trading-assistant.form.signalModeHint":"Chế độ xác nhận: Chỉ kiểm tra các nến đã hoàn thành; Chế độ giao dịch tích cực: Kiểm tra cả việc hình thành nến","trading-assistant.form.cancel":"Hủy","trading-assistant.form.prev":"Bước trước","trading-assistant.form.next":"Bước tiếp theo","trading-assistant.form.confirmCreate":"Xác nhận tạo","trading-assistant.form.confirmEdit":"Xác nhận chỉnh sửa","trading-assistant.messages.createSuccess":"Tạo chiến lược thành công","trading-assistant.messages.createFailed":"Tạo chiến lược thất bại","trading-assistant.messages.updateSuccess":"Cập nhật chiến lược thành công","trading-assistant.messages.updateFailed":"Cập nhật chiến lược thất bại","trading-assistant.messages.deleteSuccess":"Xóa chiến lược thành công","trading-assistant.messages.deleteFailed":"Xóa chiến lược thất bại","trading-assistant.messages.startSuccess":"Khởi động chiến lược thành công","trading-assistant.messages.startFailed":"Khởi động chiến lược thất bại","trading-assistant.messages.stopSuccess":"Chính sách đã dừng thành công","trading-assistant.messages.stopFailed":"Dừng chính sách thất bại","trading-assistant.messages.loadFailed":"Không thể tải danh sách chính sách","trading-assistant.messages.runningWarning":"Chính sách đang chạy, vui lòng dừng chính sách trước khi sửa đổi","trading-assistant.messages.deleteConfirmWithName":'Bạn có chắc chắn muốn xóa chính sách "{name}" không? Thao tác này không thể đảo ngược.',"trading-assistant.messages.deleteConfirm":"Bạn có chắc chắn muốn xóa chính sách này không? Thao tác này không thể đảo ngược.","trading-assistant.messages.loadTradesFailed":"Không thể truy xuất hồ sơ giao dịch","trading-assistant.messages.loadPositionsFailed":"Không thể truy xuất hồ sơ vị thế","trading-assistant.messages.loadEquityFailed":"Không thể truy xuất đường cong vốn chủ sở hữu","trading-assistant.messages.loadIndicatorsFailed":"Không thể tải danh sách chỉ báo, vui lòng thử lại sau","trading-assistant.messages.spotLimitations":"Giao dịch giao ngay đã được tự động thiết lập chỉ mua, đòn bẩy 1x","trading-assistant.messages.autoFillApiConfig":"Cấu hình API lịch sử cho sàn giao dịch này đã được tự động điền","trading-assistant.placeholders.selectIndicator":"Vui lòng chọn một chỉ báo indicator","trading-assistant.placeholders.selectExchange":"Vui lòng chọn một sàn giao dịch","trading-assistant.placeholders.inputApiKey":"Vui lòng nhập Khóa API","trading-assistant.placeholders.inputSecretKey":"Vui lòng nhập Khóa bí mật","trading-assistant.placeholders.inputPassphrase":"Vui lòng nhập Mật khẩu","trading-assistant.placeholders.inputStrategyName":"Vui lòng nhập tên chiến lược","trading-assistant.placeholders.selectSymbol":"Vui lòng chọn một cặp giao dịch","trading-assistant.placeholders.selectTimeframe":"Vui lòng chọn một khung thời gian","trading-assistant.placeholders.selectKlinePeriod":"Vui lòng chọn chu kỳ K-Line","trading-assistant.placeholders.inputAiFilterPrompt":"Vui lòng nhập lời nhắc tùy chỉnh (tùy chọn)","trading-assistant.validation.indicatorRequired":"Vui lòng chọn một chỉ báo","trading-assistant.validation.exchangeRequired":"Vui lòng chọn một sàn giao dịch","trading-assistant.validation.apiKeyRequired":"Vui lòng nhập Khóa API","trading-assistant.validation.secretKeyRequired":"Vui lòng nhập Khóa bí mật","trading-assistant.validation.passphraseRequired":"Vui lòng nhập Mật khẩu","trading-assistant.validation.exchangeConfigIncomplete":"Vui lòng điền đầy đủ thông tin cấu hình sàn giao dịch","trading-assistant.validation.testConnectionRequired":'Vui lòng nhấp vào nút "Kiểm tra kết nối" và đảm bảo kết nối thành công',"trading-assistant.validation.testConnectionFailed":"Kiểm tra kết nối thất bại, vui lòng kiểm tra cấu hình và thử lại","trading-assistant.validation.credentialRequired":"Vui lòng thêm và kiểm tra thông tin đăng nhập sàn giao dịch trong Trung tâm Cá nhân trước","trading-assistant.validation.strategyNameRequired":"Vui lòng nhập tên chiến lược","trading-assistant.validation.symbolRequired":"Vui lòng chọn một cặp giao dịch ...apiKeyRequired","trading-assistant.apiKeyRequired":"Vui lòng Nhập khóa API","trading-assistant.validation.initialCapitalRequired":"Vui lòng nhập vốn ban đầu","trading-assistant.validation.leverageRequired":"Vui lòng nhập tỷ lệ đòn bẩy","trading-assistant.table.time":"Thời gian","trading-assistant.table.type":"Loại","trading-assistant.table.price":"Giá","trading-assistant.table.amount":"Số tiền","trading-assistant.table.value":"Số tiền","trading-assistant.table.commission":"Phí hoa hồng","trading-assistant.table.symbol":"Cặp giao dịch","trading-assistant.table.side":"Hướng","trading-assistant.table.size":"Vị thế kích thước","trading-assistant.table.entryPrice":"Giá vào lệnh","trading-assistant.table.currentPrice":"Giá hiện tại","trading-assistant.table.unrealizedPnl":"Lợi nhuận/Thua lỗ chưa thực hiện","trading-assistant.table.pnlPercent":"Tỷ lệ lợi nhuận/thua lỗ","trading-assistant.table.buy":"Mua","trading-assistant.table.sell":"Bán","trading-assistant.table.long":"Mua","trading-assistant.table.short":"Bán","trading-assistant.table.noPositions":"Không có vị thế","trading-assistant.detail.title":"Chi tiết chiến lược","trading-assistant.detail.strategyName":"Chiến lược Tên","trading-assistant.detail.strategyType":"Loại chiến lược","trading-assistant.detail.status":"Trạng thái","trading-assistant.detail.tradingMode":"Chế độ giao dịch","trading-assistant.detail.exchange":"Sàn giao dịch","trading-assistant.detail.initialCapital":"Vốn ban đầu","trading-assistant.detail.totalInvestment":"Tổng vốn đầu tư","trading-assistant.detail.currentEquity":"Vốn chủ sở hữu hiện tại","trading-assistant.detail.totalPnl":"Tổng lợi nhuận/thua lỗ","trading-assistant.detail.indicatorName":"Tên chỉ báo","trading-assistant.detail.maxLeverage":"Đòn bẩy tối đa Đòn bẩy","trading-assistant.detail.decideInterval":"Khoảng thời gian quyết định","trading-assistant.detail.symbols":"Công cụ giao dịch","trading-assistant.detail.createdAt":"Thời gian tạo","trading-assistant.detail.updatedAt":"Thời gian cập nhật","trading-assistant.detail.llmConfig":"Cấu hình mô hình AI","trading-assistant.detail.exchangeConfig":"Cấu hình sàn giao dịch","trading-assistant.detail.provider":"Nhà cung cấp","trading-assistant.detail.modelId":"ID mô hình","trading-assistant.detail.close":"Đóng","trading-assistant.detail.loadFailed":"Không thể truy xuất chiến lược chi tiết","trading-assistant.equity.noData":"Không có dữ liệu giá trị tài sản ròng","trading-assistant.equity.equity":"Giá trị tài sản ròng","trading-assistant.exchange.tradingMode":"Chế độ giao dịch","trading-assistant.exchange.virtual":"Giao dịch thử nghiệm","trading-assistant.exchange.live":"Giao dịch trực tiếp","trading-assistant.exchange.selectExchange":"Chọn sàn giao dịch","trading-assistant.exchange.walletAddress":"Địa chỉ ví","trading-assistant.exchange.walletAddressPlaceholder":"Vui lòng nhập địa chỉ ví của bạn (bắt đầu bằng 0x)","trading-assistant.exchange.privateKey":"Khóa riêng tư","trading-assistant.exchange.privateKeyPlaceholder":"Vui lòng nhập khóa riêng tư của bạn (64 ký tự)","trading-assistant.exchange.testConnection":"Kiểm tra kết nối","trading-assistant.exchange.connectionSuccess":"Kết nối thành công","trading-assistant.exchange.connectionFailed":"Kết nối thất bại","trading-assistant.exchange.testFailed":"Kiểm tra kết nối thất bại","trading-assistant.exchange.fillComplete":"Vui lòng điền đầy đủ thông tin cấu hình sàn giao dịch","trading-assistant.strategyTypeOptions.ai":"Chiến lược dựa trên AI","trading-assistant.strategyTypeOptions.indicator":"Chiến lược chỉ báo kỹ thuật","trading-assistant.strategyTypeOptions.aiDeveloping":"Chức năng chiến lược dựa trên AI đang được phát triển, hãy theo dõi","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"Chức năng chiến lược dựa trên AI đang được phát triển","trading-assistant.indicatorType.trend":"Xu hướng","trading-assistant.indicatorType.momentum":"Động lượng","trading-assistant.indicatorType.volatility":"Biến động","trading-assistant.indicatorType.volume":"Khối lượng","trading-assistant.indicatorType.custom":"Tùy chỉnh","trading-assistant.exchangeNames":{okx:"OKX",binance:"Binance",hyperliquid:"Hyperliquid",blockchaincom:"Blockchain.com",coinbaseexchange:"Coinbase",gate:"Gate.io",mexc:"MEXC",kraken:"Kraken",bitfinex:"Bitfinex",bybit:"Bybit",kucoin:"KuCoin",huobi:"Huobi",bitget:"Bitget",bitmex:"BitMEX","gạch từ":"Dựa trên",phemex:"Phemex",bitmart:"BitMart",bitstamp:"Bitstamp",bittrex:"Bittrex",poloniex:"Poloniex","song tử":"song tử","tiền điện tử":"Crypto.com",bitflyer:"bitFlyer",upbit:"Upbit",bithumb:"Bithumb",coinone:"Coinone",zb:"ZB","ngân hàng":"LBank",bibox:"Bibox",bigone:"BigONE",bitrue:"Bitrue",coinex:"CoinEx",digifinex:"DigiFinex",ftx:"FTX",ftxus:"FTX US",binanceus:"Binance US",binancecoinm:"Binance COIN-M",binanceusdm:"Binance USDⓈ-M",deepcoin:"Deepcoin"},"ai-trading-assistant.title":"Trợ lý giao dịch AI","ai-trading-assistant.strategyList":"Danh sách chiến lược","ai-trading-assistant.createStrategy":"Tạo chiến lược","ai-trading-assistant.noStrategy":"Không có chiến lược Có sẵn","ai-trading-assistant.selectStrategy":"Chọn chiến lược từ bên trái để xem chi tiết","ai-trading-assistant.startStrategy":"Bắt ​​đầu chiến lược","ai-trading-assistant.stopStrategy":"Dừng chiến lược","ai-trading-assistant.editStrategy":"Chỉnh sửa chiến lược","ai-trading-assistant.deleteStrategy":"Xóa chiến lược","ai-trading-assistant.status.running":"Đang chạy","ai-trading-assistant.status.stopped":"Đã dừng","ai-trading-assistant.status.error":"Lỗi","ai-trading-assistant.tabs.tradingRecords":"Hồ sơ giao dịch","ai-trading-assistant.tabs.positions":"Vị thế","ai-trading-assistant.tabs.aiDecisions":"Bản ghi quyết định của AI","ai-trading-assistant.tabs.equityCurve":"Đường cong vốn chủ sở hữu","ai-trading-assistant.form.createTitle":"Tạo chiến lược giao dịch AI","ai-trading-assistant.form.editTitle":"Chỉnh sửa chiến lược giao dịch AI","ai-trading-assistant.form.strategyName":"Tên chiến lược","ai-trading-assistant.form.modelId":"Mô hình AI","ai-trading-assistant.form.modelIdHint":"Sử dụng dịch vụ OpenRouter của hệ thống; Không cần cấu hình khóa API","ai-trading-assistant.form.decideInterval":"Khoảng thời gian quyết định","ai-trading-assistant.form.decideInterval5m":"5 phút","ai-trading-assistant.form.decideInterval10m":"10 phút","ai-trading-assistant.form.decideInterval30m":"30 phút","ai-trading-assistant.form.decideInterval1h":"1 giờ","ai-trading-assistant.form.decideInterval4h":"4 giờ","ai-trading-assistant.form.decideInterval1d":"1 ngày","ai-trading-assistant.form.decideInterval1w":"1 tuần","ai-trading-assistant.form.decideIntervalHint":"Khoảng thời gian cho AI để đưa ra quyết định","ai-trading-assistant.form.runPeriod":"Thời gian chạy","ai-trading-assistant.form.runPeriodHint":"Thời gian bắt đầu và kết thúc của chiến lược","ai-trading-assistant.form.startDate":"Ngày bắt đầu","ai-trading-assistant.form.endDate":"Ngày kết thúc","ai-trading-assistant.form.qdtCostTitle":"Mô tả chi phí QDT","ai-trading-assistant.form.qdtCostHint":"Mỗi quyết định của AI sẽ có giá {cost} QDT. Vui lòng đảm bảo tài khoản của bạn có đủ số dư QDT. Chi phí sẽ được trừ theo thời gian thực cho mỗi quyết định trong quá trình chạy chiến lược.","ai-trading-assistant.form.apiKey":"Khóa API","ai-trading-assistant.form.exchange":"Chọn sàn giao dịch","ai-trading-assistant.form.secretKey":"Khóa bí mật","ai-trading-assistant.form.passphrase":"Mật khẩu","ai-trading-assistant.form.testConnection":"Kiểm tra kết nối","ai-trading-assistant.form.symbol":"Cặp giao dịch","ai-trading-assistant.form.symbolHint":"Chọn cặp giao dịch","ai-trading-assistant.form.initialCapital":"Số vốn đầu tư (Ký quỹ)","ai-trading-assistant.form.leverage":"Tỷ lệ đòn bẩy","ai-trading-assistant.form.timeframe":"Khung thời gian","ai-trading-assistant.form.timeframe1m":"1 phút","ai-trading-assistant.form.timeframe5m":"5 phút","ai-trading-assistant.form.timeframe15m":"15 phút","ai-trading-assistant.form.timeframe30m":"30 phút","ai-trading-assistant.form.timeframe1H":"1 giờ","ai-trading-assistant.form.timeframe4H":"4 giờ","ai-trading-assistant.form.timeframe1D":"1 ngày","ai-trading-assistant.form.marketType":"Loại thị trường","ai-trading-assistant.form.marketTypeFutures":"Hợp đồng","ai-trading-assistant.form.marketTypeSpot":"Giao dịch tức thời","ai-trading-assistant.form.totalPnl":"Tổng lợi nhuận/thua lỗ","ai-trading-assistant.form.customPrompt":"Lời nhắc tùy chỉnh","ai-trading-assistant.form.customPromptHint":"Tùy chọn, để tùy chỉnh chiến lược giao dịch và logic quyết định của AI","ai-trading-assistant.form.cancel":"Hủy","ai-trading-assistant.form.prev":"Bước trước","ai-trading-assistant.form.next":"Bước tiếp theo","ai-trading-assistant.form.confirmCreate":"Xác nhận tạo","ai-trading-assistant.form.confirmEdit":"Xác nhận chỉnh sửa","ai-trading-assistant.messages.createSuccess":"Tạo chiến lược thành công","ai-trading-assistant.messages.createFailed":"Tạo chiến lược thất bại","ai-trading-assistant.messages.updateSuccess":"Cập nhật chiến lược thành công","ai-trading-assistant.messages.updateFailed":"Cập nhật chiến lược thất bại","ai-trading-assistant.messages.deleteSuccess":"Xóa chiến lược thành công","ai-trading-assistant.messages.deleteFailed":"Xóa chiến lược thất bại","ai-trading-assistant.messages.startSuccess":"Khởi động chiến lược thành công","ai-trading-assistant.messages.startFailed":"Không thể khởi động chính sách","ai-trading-assistant.messages.stopSuccess":"Đã dừng thành công chính sách","ai-trading-assistant.messages.stopFailed":"Không thể dừng chính sách","ai-trading-assistant.messages.loadFailed":"Không thể truy xuất danh sách chính sách","ai-trading-assistant.messages.loadDecisionsFailed":"Không thể truy xuất bản ghi quyết định của AI","ai-trading-assistant.messages.deleteConfirm":"Bạn có chắc chắn muốn xóa chính sách này không? Thao tác này không thể đảo ngược.","ai-trading-assistant.placeholders.inputStrategyName":"Vui lòng nhập tên chiến lược","ai-trading-assistant.placeholders.selectModelId":"Vui lòng chọn mô hình AI","ai-trading-assistant.placeholders.selectDecideInterval":"Vui lòng chọn khoảng thời gian quyết định","ai-trading-assistant.placeholders.startTime":"Thời gian bắt đầu","ai-trading-assistant.placeholders.endTime":"Thời gian kết thúc","ai-trading-assistant.placeholders.inputApiKey":"Vui lòng nhập khóa API","ai-trading-assistant.placeholders.selectExchange":"Vui lòng chọn sàn giao dịch","ai-trading-assistant.placeholders.inputSecretKey":"Vui lòng nhập mã bí mật Key","ai-trading-assistant.placeholders.inputPassphrase":"Vui lòng nhập mật khẩu của bạn","ai-trading-assistant.placeholders.selectSymbol":"Vui lòng chọn một cặp giao dịch, ví dụ như BTC/USDT","ai-trading-assistant.placeholders.selectTimeframe":"Vui lòng chọn khung thời gian","ai-trading-assistant.placeholders.inputCustomPrompt":"Vui lòng nhập lời nhắc tùy chỉnh (tùy chọn)","ai-trading-assistant.validation.strategyNameRequired":"Vui lòng nhập tên chiến lược","ai-trading-assistant.validation.modelIdRequired":"Vui lòng chọn một mô hình AI","ai-trading-assistant.validation.runPeriodRequired":"Vui lòng chọn khoảng thời gian chạy","ai-trading-assistant.validation.apiKeyRequired":"Vui lòng nhập API Key","ai-trading-assistant.validation.exchangeRequired":"Vui lòng chọn sàn giao dịch","ai-trading-assistant.validation.secretKeyRequired":"Vui lòng nhập Khóa bí mật","ai-trading-assistant.validation.symbolRequired":"Vui lòng chọn cặp giao dịch","ai-trading-assistant.validation.initialCapitalRequired":"Vui lòng nhập số vốn đầu tư","ai-trading-assistant.table.time":"Thời gian","ai-trading-assistant.table.type":"Loại","ai-trading-assistant.table.price":"Giá","ai-trading-assistant.table.amount":"Số lượng","ai-trading-assistant.table.value":"Giá trị","ai-trading-assistant.table.symbol":"Cặp giao dịch","ai-trading-assistant.table.side":"Hướng","ai-trading-assistant.table.size":"Số lượng vị thế","ai-trading-assistant.table.entryPrice":"Giá vào lệnh","ai-trading-assistant.table.currentPrice":"Giá hiện tại","ai-trading-assistant.table.unrealizedPnl":"Lợi nhuận/Thua lỗ chưa thực hiện","ai-trading-assistant.table.profit":"Lợi nhuận/Thua lỗ","ai-trading-assistant.table.openLong":"Mở lệnh mua","ai-trading-assistant.table.closeLong":"Đóng lệnh Long","ai-trading-assistant.table.openShort":"Mở lệnh bán","ai-trading-assistant.table.closeShort":"Đóng lệnh bán","ai-trading-assistant.table.addLong":"Thêm lệnh mua","ai-trading-assistant.table.addShort":"Thêm lệnh bán","ai-trading-assistant.table.closeShortProfit":"Đóng lệnh bán có lãi","ai-trading-assistant.table.closeShortStop":"Đóng lệnh cắt lỗ lệnh bán","ai-trading-assistant.table.closeLongProfit":"Đóng lệnh mua có lãi","ai-trading-assistant.table.closeLongStop":"Đóng lệnh cắt lỗ lệnh mua","ai-trading-assistant.table.buy":"Mua","ai-trading-assistant.table.sell":"售","ai-trading-assistant.table.long":"开长","ai-trading-assistant.table.short":"开短","ai-trading-assistant.table.hold":"控股","ai-trading-assistant.table.reasoning":"分析理理","ai-trading-assistant.table.decisions":"决定","ai-trading-assistant.table.riskAssessment":"风险考核","ai-trading-assistant.table.trust":"信信度","ai-trading-assistant.table.totalRecords":"{total} Không có bản ghi","ai-trading-assistant.table.noPositions":"Không có vị thế","ai-trading-assistant.detail.title":"Chi tiết chiến lược","ai-trading-assistant.equity.noData":"Không có dữ liệu giá trị tài sản ròng","ai-trading-assistant.equity.equity":"Giá trị tài sản ròng","ai-trading-assistant.exchange.testFailed":"Kiểm tra kết nối thất bại","ai-trading-assistant.exchange.connectionSuccess":"Kết nối thành công","ai-trading-assistant.exchange.connectionFailed":"Kết nối thất bại","ai-trading-assistant.form.advancedSettings":"Cài đặt nâng cao","ai-trading-assistant.form.orderMode":"Lệnh Mode","ai-trading-assistant.form.orderModeMaker":"Lệnh chờ (Người tạo lệnh)","ai-trading-assistant.form.orderModeTaker":"Lệnh thị trường (Người nhận lệnh)","ai-trading-assistant.form.orderModeHint":"Chế độ lệnh chờ sử dụng lệnh giới hạn, phí thấp hơn; chế độ lệnh thị trường thực hiện ngay lập tức, phí cao hơn","ai-trading-assistant.form.makerWaitSec":"Thời gian chờ lệnh (giây)","ai-trading-assistant.form.makerWaitSecHint":"Thời gian chờ sau khi đặt lệnh;","ai-trading-assistant.form.makerRetries":"Số lần thử lại cho lệnh đang chờ","ai-trading-assistant.form.makerRetriesHint":"Số lần thử lại tối đa khi lệnh đang chờ không được khớp","ai-trading-assistant.form.fallbackToMarket":"Hạ cấp lệnh đang chờ thất bại thành lệnh thị trường","ai-trading-assistant.form.fallbackToMarketHint":"Có nên hạ cấp lệnh đang chờ mở/đóng thành lệnh thị trường để đảm bảo thực hiện khi chúng không được khớp hay không","ai-trading-assistant.form.marginMode":"Chế độ ký quỹ","ai-trading-assistant.form.marginModeCross":"Ký quỹ chéo","ai-trading-assistant.form.marginModeIsolated":"Ký quỹ riêng biệt Margin","ai-analysis.title":"Hệ thống giao dịch lượng tử","ai-analysis.system.online":"Trực tuyến","ai-analysis.system.agents":"Nhân viên","ai-analysis.system.active":"Hoạt động","ai-analysis.system.stage":"Giai đoạn","ai-analysis.panel.roster":"Danh sách nhân viên","ai-analysis.panel.thinking":"Đang suy nghĩ...","ai-analysis.panel.done":"Hoàn tất","ai-analysis.panel.standby":"Chờ","ai-analysis.input.title":"Hệ thống giao dịch lượng tử","ai-analysis.input.placeholder":"Chọn tài sản mục tiêu (ví dụ: BTC/USDT)","ai-analysis.input.watchlist":"Danh sách theo dõi","ai-analysis.input.start":"Bắt ​​đầu phân tích","ai-analysis.input.recent":"Các tác vụ gần đây:","ai-analysis.vis.stage":"Giai đoạn","ai-analysis.vis.processing":"Đang xử lý","ai-analysis.result.complete":"Phân tích hoàn tất","ai-analysis.result.signal":"Tín hiệu cuối cùng","ai-analysis.result.confidence":"Mức độ tin cậy:","ai-analysis.result.new":"Phân tích mới","ai-analysis.result.full":"Xem báo cáo đầy đủ","ai-analysis.logs.title":"Nhật ký hệ thống","ai-analysis.modal.title":"Báo cáo bảo mật","ai-analysis.modal.fundamental":"Phân tích cơ bản","ai-analysis.modal.technical":"Phân tích kỹ thuật","ai-analysis.modal.sentiment":"Phân tích tâm lý","ai-analysis.modal.risk":"Đánh giá rủi ro","ai-analysis.stage.idle":"Chế độ chờ","ai-analysis.stage.1":"Giai đoạn 1: Phân tích đa chiều","ai-analysis.stage.2":"Giai đoạn 2: Thảo luận về xu hướng tăng/giảm","ai-analysis.stage.3":"Giai đoạn 3: Lập kế hoạch chiến lược","ai-analysis.stage.4":"Giai đoạn 4: Xem xét kiểm soát rủi ro","ai-analysis.stage.complete":"Đã hoàn thành","ai-analysis.agent.investment_director":"Giám đốc đầu tư Giám đốc","ai-analysis.agent.role.investment_director":"Phân tích toàn diện & Kết luận cuối cùng","ai-analysis.agent.market":"Nhà phân tích thị trường","ai-analysis.agent.role.market":"Dữ liệu kỹ thuật & thị trường","ai-analysis.agent.fundamental":"Nhà phân tích cơ bản","ai-analysis.agent.role.fundamental":"Tài chính & Định giá","ai-analysis.agent.technical":"Nhà phân tích kỹ thuật","ai-analysis.agent.role.technical":"Các chỉ báo & biểu đồ kỹ thuật","ai-analysis.agent.news":"Nhà phân tích tin tức","ai-analysis.agent.role.news":"Bộ lọc tin tức toàn cầu","ai-analysis.agent.sentiment":"Tâm lý thị trường Nhà phân tích","ai-analysis.agent.role.sentiment":"Phân tích xã hội & cảm xúc","ai-analysis.agent.risk":"Nhà phân tích rủi ro","ai-analysis.agent.role.risk":"Kiểm tra rủi ro cơ bản","ai-analysis.agent.bull":"Nhà phân tích lạc quan","ai-analysis.agent.role.bull":"Khám phá động lực tăng trưởng","ai-analysis.agent.bear":"Nhà phân tích bi quan","ai-analysis.agent.role.bear":"Khám phá rủi ro & điểm yếu","ai-analysis.agent.manager":"Quản lý nghiên cứu","ai-analysis.agent.role.manager":"Người điều phối tranh luận","ai-analysis.agent.trader":"Nhà giao dịch","ai-analysis.agent.role.trader":"Chiến lược gia điều hành","ai-analysis.agent.risky":"Nhà phân tích năng động","ai-analysis.agent.role.risky":"Chiến lược năng động","ai-analysis.agent.neutral":"Nhà phân tích cân bằng","ai-analysis.agent.role.neutral":"Chiến lược cân bằng","ai-analysis.agent.safe":"Nhà phân tích thận trọng","ai-analysis.agent.role.safe":"Chiến lược thận trọng","ai-analysis.agent.cro":"Cân nhắc Quản lý rủi ro (CRO)","ai-analysis.agent.role.cro":"Người có thẩm quyền quyết định cuối cùng","ai-analysis.script.market":"Đang truy xuất dữ liệu OHLCV từ các sàn giao dịch lớn...","ai-analysis.script.fundamental":"Đang truy xuất báo cáo tài chính hàng quý...","ai-analysis.script.technical":"Phân tích các chỉ báo kỹ thuật và mô hình biểu đồ...","ai-analysis.script.news":"Đang quét tin tức tài chính toàn cầu...","ai-analysis.script.sentiment":"Phân tích xu hướng mạng xã hội...","ai-analysis.script.risk":"Đang tính toán biến động lịch sử...","invite.inviteLink":"Liên kết mời","invite.copy":"Sao chép liên kết","invite.copySuccess":"Sao chép thành công!","invite.copyFailed":"Sao chép thất bại, vui lòng sao chép thủ công","invite.noInviteLink":"Không tạo được liên kết mời","invite.totalInvites":"Tổng số lời mời","invite.totalReward":"Tổng số phần thưởng","invite.rules":"Quy tắc mời","invite.rule1":"Bạn sẽ nhận được phần thưởng cho mỗi người bạn mời đăng ký thành công","invite.rule2":"Bạn sẽ nhận được phần thưởng bổ sung khi người bạn được mời hoàn tất giao dịch đầu tiên","invite.rule3":"Phần thưởng mời sẽ được cộng trực tiếp vào tài khoản của bạn","invite.inviteList":"Danh sách người được mời","invite.tasks":"Trung tâm nhiệm vụ","invite.inviteeName":"Người được mời","invite.inviteTime":"Thời gian mời","invite.status":"Trạng thái","invite.reward":"Phần thưởng","invite.active":"Đang hoạt động","invite.inactive":"Không hoạt động","invite.completed":"Đã hoàn thành","invite.claimed":"Đã nhận","invite.pending":"Đang chờ hoàn thành","invite.goToTask":"Chuyển đến hoàn thành","invite.claimReward":"Nhận phần thưởng","invite.verify":"Xác minh hoàn tất","invite.verifySuccess":"Xác minh thành công Nhiệm vụ hoàn thành","invite.verifyNotCompleted":"Nhiệm vụ chưa hoàn thành, vui lòng hoàn thành nhiệm vụ trước","invite.verifyFailed":"Xác minh thất bại, vui lòng thử lại sau","invite.claimSuccess":"Đã nhận thành công {reward} QDT!","invite.claimFailed":"Không thể xác nhận, vui lòng thử lại sau","invite.totalRecords":"Tổng số {total} bản ghi","invite.task.twitter.title":"Chia sẻ lại bài đăng trên Twitter của chúng tôi lên X (Twitter)","invite.task.twitter.desc":"Chia sẻ bài đăng chính thức của chúng tôi lên tài khoản Twitter của bạn (X)","invite.task.youtube.title":"Đăng ký kênh YouTube của chúng tôi","invite.task.youtube.desc":"Đăng ký và theo dõi kênh YouTube chính thức của chúng tôi","invite.task.telegram.title":"Tham gia nhóm Telegram của chúng tôi","invite.task.telegram.desc":"Tham gia nhóm cộng đồng Telegram chính thức của chúng tôi","invite.task.discord.title":"Tham gia Discord Máy chủ","invite.task.discord.desc":"Tham gia máy chủ cộng đồng Discord của chúng tôi",message:"-","layouts.usermenu.dialog.title":"Thông tin","layouts.usermenu.dialog.content":"Bạn có chắc chắn muốn đăng xuất không?","layouts.userLayout.title":"Tìm kiếm sự thật trong sự không chắc chắn","settings.group.agent_memory":"Bộ nhớ/Phản tư","settings.group.reflection_worker":"Worker xác minh phản tư tự động","settings.field.ENABLE_AGENT_MEMORY":"Bật bộ nhớ tác nhân","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"Bật truy vấn vector (cục bộ)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"Kích thước embedding","settings.field.AGENT_MEMORY_TOP_K":"Số lượng Top-K","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"Kích thước cửa sổ ứng viên","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"Chu kỳ bán rã theo thời gian (ngày)","settings.field.AGENT_MEMORY_W_SIM":"Trọng số tương đồng","settings.field.AGENT_MEMORY_W_RECENCY":"Trọng số thời gian","settings.field.AGENT_MEMORY_W_RETURNS":"Trọng số lợi nhuận","settings.field.ENABLE_REFLECTION_WORKER":"Bật xác minh tự động","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"Khoảng thời gian xác minh (giây)","profile.notifications.title":"Cài đặt thông báo","profile.notifications.hint":"Cấu hình phương thức thông báo mặc định, sẽ được sử dụng tự động khi tạo giám sát tài sản và cảnh báo","profile.notifications.defaultChannels":"Kênh thông báo mặc định","profile.notifications.browser":"Thông báo trong ứng dụng","profile.notifications.email":"Email","profile.notifications.phone":"SMS","profile.notifications.telegramBotToken":"Telegram Bot Token","profile.notifications.telegramBotTokenPlaceholder":"Nhập Telegram Bot Token của bạn","profile.notifications.telegramBotTokenHint":"Tạo bot qua @BotFather để lấy Token","profile.notifications.telegramChatId":"Telegram Chat ID","profile.notifications.telegramPlaceholder":"Nhập Telegram Chat ID của bạn (ví dụ: 123456789)","profile.notifications.telegramHint":"Gửi /start cho @userinfobot để lấy Chat ID","profile.notifications.notifyEmail":"Email thông báo","profile.notifications.emailPlaceholder":"Địa chỉ email nhận thông báo","profile.notifications.emailHint":"Mặc định sử dụng email tài khoản, có thể đặt email khác","profile.notifications.phonePlaceholder":"Nhập số điện thoại (ví dụ: +84123456789)","profile.notifications.phoneHint":"Cần quản trị viên cấu hình dịch vụ Twilio","profile.notifications.discordWebhook":"Discord Webhook","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"Tạo Webhook trong cài đặt máy chủ Discord","profile.notifications.webhookUrl":"Webhook URL","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"URL Webhook tùy chỉnh, gửi thông báo qua POST JSON","profile.notifications.webhookToken":"Webhook Token (Tùy chọn)","profile.notifications.webhookTokenPlaceholder":"Bearer Token để xác thực yêu cầu","profile.notifications.webhookTokenHint":"Gửi dưới dạng Authorization: Bearer Token đến Webhook","profile.notifications.testBtn":"Gửi thông báo thử nghiệm","profile.notifications.saveSuccess":"Đã lưu cài đặt thông báo thành công","profile.notifications.selectChannel":"Vui lòng chọn ít nhất một kênh thông báo","profile.notifications.fillTelegramToken":"Vui lòng điền Telegram Bot Token","profile.notifications.fillTelegram":"Vui lòng điền Telegram Chat ID","profile.notifications.fillEmail":"Vui lòng điền email thông báo","profile.notifications.testSent":"Đã gửi thông báo thử nghiệm, vui lòng kiểm tra các kênh thông báo"},k=(0,i.A)((0,i.A)({},p),y)}}]); \ No newline at end of file diff --git a/frontend/dist/js/lang-zh-CN-legacy.a4180ad8.js b/frontend/dist/js/lang-zh-CN-legacy.a4180ad8.js new file mode 100644 index 0000000..53a62b5 --- /dev/null +++ b/frontend/dist/js/lang-zh-CN-legacy.a4180ad8.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[644],{4070:function(a,t,e){e.d(t,{default:function(){return f}});var s=e(76338),i=e(48931),r=e(85505),n={today:"今天",now:"此刻",backToToday:"返回今天",ok:"确定",timeSelect:"选择时间",dateSelect:"选择日期",weekSelect:"选择周",clear:"清除",month:"月",year:"年",previousMonth:"上个月 (翻页上键)",nextMonth:"下个月 (翻页下键)",monthSelect:"选择月份",yearSelect:"选择年份",decadeSelect:"选择年代",yearFormat:"YYYY年",dayFormat:"D日",dateFormat:"YYYY年M月D日",dateTimeFormat:"YYYY年M月D日 HH时mm分ss秒",previousYear:"上一年 (Control键加左方向键)",nextYear:"下一年 (Control键加右方向键)",previousDecade:"上一年代",nextDecade:"下一年代",previousCentury:"上一世纪",nextCentury:"下一世纪"},o={placeholder:"请选择时间"},d=o,l={lang:(0,r.A)({placeholder:"请选择日期",rangePlaceholder:["开始日期","结束日期"]},n),timePickerLocale:(0,r.A)({},d)};l.lang.ok="确 定";var c=l,m=c,g={locale:"zh-cn",Pagination:i.A,DatePicker:c,TimePicker:d,Calendar:m,global:{placeholder:"请选择"},Table:{filterTitle:"筛选",filterConfirm:"确定",filterReset:"重置",selectAll:"全选当页",selectInvert:"反选当页",sortTitle:"排序",expand:"展开行",collapse:"关闭行"},Modal:{okText:"确定",cancelText:"取消",justOkText:"知道了"},Popconfirm:{cancelText:"取消",okText:"确定"},Transfer:{searchPlaceholder:"请输入搜索内容",itemUnit:"项",itemsUnit:"项"},Upload:{uploading:"文件上传中",removeFile:"删除文件",uploadError:"上传错误",previewFile:"预览文件",downloadFile:"下载文件"},Empty:{description:"暂无数据"},Icon:{icon:"图标"},Text:{edit:"编辑",copy:"复制",copied:"复制成功",expand:"展开"},PageHeader:{back:"返回"}},u=g,p=e(52648),b=e.n(p),y={antLocale:u,momentName:"zh-cn",momentLocale:b()},h={"common.confirm":"确定","common.cancel":"取消","common.save":"保存","common.delete":"删除","common.edit":"编辑","common.add":"添加","common.close":"关闭","common.done":"完成","common.ok":"确定","common.loading":"加载中...","common.noData":"暂无数据",submit:"提交",save:"保存","submit.ok":"提交成功","save.ok":"保存成功","menu.welcome":"欢迎","menu.home":"主页","menu.dashboard":"仪表盘","menu.dashboard.indicator":"指标分析","menu.dashboard.community":"指标市场","menu.dashboard.analysis":"AI 分析","menu.dashboard.aiAssetAnalysis":"AI资产分析","menu.dashboard.aiQuant":"AI 量化","menu.dashboard.tradingAssistant":"交易助手","menu.dashboard.portfolio":"资产监测","menu.dashboard.globalMarket":"全球金融","menu.dashboard.polymarket":"预测市场","menu.settings":"系统设置","menu.dashboard.aiTradingAssistant":"AI交易助手","menu.dashboard.signalRobot":"信号机器人","menu.dashboard.monitor":"监控页","menu.dashboard.workplace":"工作台","aiAssetAnalysis.title":"AI资产分析","aiAssetAnalysis.subtitle":"把资产监测、即时分析、定时任务放到一个工作流里,操作更直观、反馈更及时。","aiAssetAnalysis.actions.quickAnalysis":"立即开始分析","aiAssetAnalysis.actions.monitorTasks":"管理监控任务","aiAssetAnalysis.actions.openStandalone":"在独立页面打开","aiAssetAnalysis.quickBar.title":"快捷分析","aiAssetAnalysis.quickBar.placeholder":"从资产池选择标的","aiAssetAnalysis.quickBar.useInQuick":"带入即时分析","aiAssetAnalysis.quickBar.runNow":"一键分析","aiAssetAnalysis.history.title":"最近分析","aiAssetAnalysis.history.empty":"暂无分析记录","aiAssetAnalysis.actions.enterQuick":"进入即时分析","aiAssetAnalysis.actions.enterMonitor":"进入定时任务与资产池","aiAssetAnalysis.flow.poolTitle":"构建资产池","aiAssetAnalysis.flow.poolDesc":"先添加持仓与关注标的,形成统一分析对象池。","aiAssetAnalysis.flow.poolAction":"去管理资产池","aiAssetAnalysis.flow.quickTitle":"即时分析","aiAssetAnalysis.flow.quickDesc":"对任意标的一键发起 AI 分析,快速拿到决策建议。","aiAssetAnalysis.flow.quickAction":"去即时分析","aiAssetAnalysis.flow.autoTitle":"定时监控","aiAssetAnalysis.flow.autoDesc":"配置定时任务自动运行 AI 分析,并推送报告到通知渠道。","aiAssetAnalysis.flow.autoAction":"去配置任务","aiAssetAnalysis.tabs.quick":"即时分析","aiAssetAnalysis.tabs.monitor":"资产池与定时任务","aiAssetAnalysis.tabLead.quick":"适合临时判断:选择标的后立刻分析并查看历史结果。","aiAssetAnalysis.tabLead.monitor":"适合持续跟踪:维护持仓、设置监控范围与执行频率。","aiAssetAnalysis.stats.totalAnalyses":"分析总数","aiAssetAnalysis.stats.accuracy":"准确率","aiAssetAnalysis.stats.avgReturn":"平均回报","aiAssetAnalysis.stats.satisfaction":"用户满意度","aiAssetAnalysis.stats.decisions":"决策分布","aiAssetAnalysis.opportunities.title":"AI 交易机会雷达","aiAssetAnalysis.opportunities.empty":"暂无交易机会","aiAssetAnalysis.opportunities.analyze":"分析","aiAssetAnalysis.opportunities.updateHint":"每小时更新","aiAssetAnalysis.opportunities.signal.overbought":"超买","aiAssetAnalysis.opportunities.signal.oversold":"超卖","aiAssetAnalysis.opportunities.signal.bullish_momentum":"看涨","aiAssetAnalysis.opportunities.signal.bearish_momentum":"看跌","aiAssetAnalysis.opportunities.market.Crypto":"🪙 加密","aiAssetAnalysis.opportunities.market.USStock":"📈 美股","aiAssetAnalysis.opportunities.market.Forex":"💱 外汇","aiAssetAnalysis.opportunities.market.PredictionMarket":"🎯 预测市场","aiAssetAnalysis.opportunities.reason.crypto.overbought":"24h涨幅{change}%,7日涨幅{change7d}%,短期超买风险","aiAssetAnalysis.opportunities.reason.crypto.bullish_momentum":"24h涨幅{change}%,上涨动能强劲","aiAssetAnalysis.opportunities.reason.crypto.oversold":"24h跌幅{change}%,可能超卖反弹","aiAssetAnalysis.opportunities.reason.crypto.bearish_momentum":"24h跌幅{change}%,下跌趋势明显","aiAssetAnalysis.opportunities.reason.usstock.overbought":"日涨幅{change}%,短期涨幅较大,注意回调风险","aiAssetAnalysis.opportunities.reason.usstock.bullish_momentum":"日涨幅{change}%,上涨动能强劲","aiAssetAnalysis.opportunities.reason.usstock.oversold":"日跌幅{change}%,可能超卖反弹","aiAssetAnalysis.opportunities.reason.usstock.bearish_momentum":"日跌幅{change}%,下跌趋势明显","aiAssetAnalysis.opportunities.reason.forex.overbought":"日涨幅{change}%,汇率波动剧烈,注意回调","aiAssetAnalysis.opportunities.reason.forex.bullish_momentum":"日涨幅{change}%,上涨动能较强","aiAssetAnalysis.opportunities.reason.forex.oversold":"日跌幅{change}%,汇率波动剧烈,可能反弹","aiAssetAnalysis.opportunities.reason.forex.bearish_momentum":"日跌幅{change}%,下跌趋势明显","aiAssetAnalysis.checkup.title":"组合体检","aiAssetAnalysis.checkup.btn":"组合体检","aiAssetAnalysis.checkup.desc":"一键对您资产池中的所有持仓进行 AI 分析,快速了解每个标的的当前状态和操作建议。","aiAssetAnalysis.checkup.start":"开始体检","aiAssetAnalysis.checkup.progress":"正在分析 {current}/{total}...","aiAssetAnalysis.checkup.noPositions":"资产池中暂无持仓,请先添加资产。","aiAssetAnalysis.checkup.complete":"体检完成","aiAssetAnalysis.checkup.failed":"分析失败","aiAssetAnalysis.checkup.rerun":"重新体检","aiAssetAnalysis.search.hint":"搜索","aiAssetAnalysis.search.placeholder":"搜索任意标的... (Ctrl+K)","aiAssetAnalysis.search.noResults":"未找到匹配结果,请尝试其他关键词","menu.form":"表单页","menu.form.basic-form":"基础表单","menu.form.step-form":"分步表单","menu.form.step-form.info":"分步表单(填写转账信息)","menu.form.step-form.confirm":"分步表单(确认转账信息)","menu.form.step-form.result":"分步表单(完成)","menu.form.advanced-form":"高级表单","menu.list":"列表页","menu.list.table-list":"查询表格","menu.list.basic-list":"标准列表","menu.list.card-list":"卡片列表","menu.list.search-list":"搜索列表","menu.list.search-list.articles":"搜索列表(文章)","menu.list.search-list.projects":"搜索列表(项目)","menu.list.search-list.applications":"搜索列表(应用)","menu.profile":"详情页","menu.profile.basic":"基础详情页","menu.profile.advanced":"高级详情页","menu.result":"结果页","menu.result.success":"成功页","menu.result.fail":"失败页","menu.exception":"异常页","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"触发错误","menu.account":"个人页","menu.account.center":"个人中心","menu.account.settings":"个人设置","menu.account.trigger":"触发报错","menu.account.logout":"退出登录","menu.wallet":"我的钱包","menu.docs":"文档中心","menu.docs.detail":"文档详情","menu.header.refreshPage":"刷新页面","menu.invite.friends":"邀请好友","app.setting.pagestyle":"整体风格设置","app.setting.pagestyle.light":"亮色菜单风格","app.setting.pagestyle.dark":"暗色菜单风格","app.setting.pagestyle.realdark":"暗黑模式","app.setting.themecolor":"主题色","app.setting.navigationmode":"导航模式","app.setting.sidemenu.nav":"侧边栏导航","app.setting.topmenu.nav":"顶部栏导航","app.setting.content-width":"内容区域宽度","app.setting.content-width.tooltip":"该设定仅 [顶部栏导航] 时有效","app.setting.content-width.fixed":"固定","app.setting.content-width.fluid":"流式","app.setting.fixedheader":"固定 Header","app.setting.fixedheader.tooltip":"固定 Header 时可配置","app.setting.autoHideHeader":"下滑时隐藏 Header","app.setting.fixedsidebar":"固定侧边菜单","app.setting.sidemenu":"侧边菜单布局","app.setting.topmenu":"顶部菜单布局","app.setting.othersettings":"其他设置","app.setting.weakmode":"色弱模式","app.setting.multitab":"多页签模式","app.setting.copy":"拷贝设置","app.setting.loading":"加载主题中","app.setting.copyinfo":"拷贝设置成功 src/config/defaultSettings.js","app.setting.copy.success":"复制完毕","app.setting.copy.fail":"复制失败","app.setting.theme.switching":"正在切换主题!","app.setting.production.hint":"配置栏只在开发环境用于预览,生产环境不会展现,请拷贝后手动修改配置文件","app.setting.themecolor.daybreak":"拂晓蓝(默认)","app.setting.themecolor.dust":"薄暮","app.setting.themecolor.volcano":"火山","app.setting.themecolor.sunset":"日暮","app.setting.themecolor.cyan":"明青","app.setting.themecolor.green":"极光绿","app.setting.themecolor.geekblue":"极客蓝","app.setting.themecolor.purple":"酱紫","app.setting.tooltip":"页面设置","notice.title":"通知中心","notice.empty":"暂无通知","notice.markAllRead":"全部已读","notice.clear":"清空通知","notice.close":"关闭","notice.justNow":"刚刚","notice.minutesAgo":"分钟前","notice.hoursAgo":"小时前","notice.daysAgo":"天前","notice.detailInfo":"详细信息","notice.aiDecision":"AI决策","notice.confidence":"置信度","notice.reasoning":"分析理由","notice.symbol":"标的代码","notice.currentPrice":"当前价格","notice.triggerPrice":"触发价格","notice.action":"操作","notice.quantity":"数量","notice.viewPortfolio":"查看持仓","notice.type.aiMonitor":"AI监控","notice.type.priceAlert":"价格提醒","notice.type.signal":"交易信号","notice.type.buy":"买入信号","notice.type.sell":"卖出信号","notice.type.hold":"持有建议","notice.type.trade":"交易执行","notice.type.notification":"系统通知","user.login.userName":"用户名","user.login.password":"密码","user.login.username.placeholder":"账户: admin","user.login.password.placeholder":"密码: admin or ant.design","user.login.message-invalid-credentials":"登录失败,请检查邮箱和验证码","user.login.message-invalid-verification-code":"验证码错误","user.login.tab-login-credentials":"账户密码登录","user.login.tab-login-email":"邮箱登录","user.login.tab-login-mobile":"手机号登录","user.login.captcha.placeholder":"请输入图形验证码","user.login.mobile.placeholder":"手机号","user.login.mobile.verification-code.placeholder":"验证码","user.login.email.placeholder":"请输入邮箱地址","user.login.email.verification-code.placeholder":"请输入验证码","user.login.email.sending":"验证码发送中...","user.login.email.send-success-title":"提示","user.login.email.send-success":"验证码发送成功,请查收邮件","user.login.sms.send-success":"验证码发送成功,请查收短信","user.login.remember-me":"自动登录","user.login.forgot-password":"忘记密码","user.login.sign-in-with":"其他登录方式","user.login.signup":"注册账户","user.login.login":"登录","user.register.register":"注册","user.register.email.placeholder":"邮箱","user.register.password.placeholder":"请至少输入 6 个字符。请不要使用容易被猜到的密码。","user.register.password.popover-message":"请至少输入 6 个字符。请不要使用容易被猜到的密码。","user.register.confirm-password.placeholder":"确认密码","user.register.get-verification-code":"获取验证码","user.register.sign-in":"使用已有账户登录","user.register-result.msg":"你的账户:{email} 注册成功","user.register-result.activation-email":"激活邮件已发送到你的邮箱中,邮件有效期为24小时。请及时登录邮箱,点击邮件中的链接激活账户。","user.register-result.back-home":"返回首页","user.register-result.view-mailbox":"查看邮箱","user.email.required":"请输入邮箱地址!","user.email.wrong-format":"邮箱地址格式错误!","user.userName.required":"请输入账户名或邮箱地址","user.password.required":"请输入密码!","user.password.twice.msg":"两次输入的密码不匹配!","user.password.strength.msg":"密码强度不够 ","user.password.strength.strong":"强度:强","user.password.strength.medium":"强度:中","user.password.strength.low":"强度:低","user.password.strength.short":"强度:太短","user.confirm-password.required":"请确认密码!","user.phone-number.required":"请输入正确的手机号","user.phone-number.wrong-format":"手机号格式错误!","user.verification-code.required":"请输入验证码!","user.captcha.required":"请输入图形验证码!","user.login.infos":"QuantDinger 是一个 AI 多智能体股票分析辅助工具,不具备证券投资咨询资质。平台中的所有分析结果、评分、参考意见均由 AI 基于历史数据自动生成,仅供学习、研究与技术交流使用,不构成任何投资建议或决策依据。股票投资存在市场风险、流动性风险、政策风险等多种风险,可能导致本金损失。用户应基于自身风险承受能力独立决策,使用本工具产生的任何投资行为及其后果由用户自行承担。市场有风险,投资需谨慎。","user.login.tab-login-web3":"Web3 登录","user.login.web3.tip":"使用钱包进行签名登录","user.login.web3.connect":"连接钱包并登录","user.login.web3.no-wallet":"未检测到钱包","user.login.web3.no-address":"未获取到钱包地址","user.login.web3.nonce-failed":"获取随机数失败","user.login.web3.verify-failed":"签名验证失败","user.login.web3.success":"登录成功","user.login.web3.failed":"钱包登录失败","nav.no_wallet":"未检测到钱包","nav.copy":"复制","nav.copy_success":"复制成功","user.login.oauth.google":"使用 Google 登录","user.login.oauth.github":"使用 GitHub 登录","user.login.oauth.loading":"正在跳转到授权页面...","user.login.oauth.failed":"OAuth 登录失败","user.login.oauth.get-url-failed":"获取授权链接失败","user.login.subtitle":"驱动的全球市场量化洞察","user.login.legal.title":"法律免责声明","user.login.legal.view":"查看法律免责声明","user.login.legal.collapse":"收起法律免责声明","user.login.legal.agree":"我已阅读并同意法律免责声明","user.login.legal.required":"请先阅读并勾选法律免责声明","user.login.legal.content":"QuantDinger 是一个 AI 多智能体股票分析辅助工具,不具备证券投资咨询资质。平台中的所有分析结果、评分、参考意见均由 AI 基于历史数据自动生成,仅供学习、研究与技术交流使用,不构成任何投资建议或决策依据。股票投资存在市场风险、流动性风险、政策风险等多种风险,可能导致本金损失。用户应基于自身风险承受能力独立决策,使用本工具产生的任何投资行为及其后果由用户自行承担。市场有风险,投资需谨慎。","user.login.privacy.title":"用户隐私条款","user.login.privacy.view":"查看用户隐私条款","user.login.privacy.collapse":"收起用户隐私条款","user.login.privacy.content":"我们重视您的隐私与数据保护。1) 收集范围:仅收集实现功能所需的信息(如邮箱、手机号、区号、Web3 钱包地址)以及必要的日志与设备信息。2) 使用目的:用于账户登录与安全校验、服务功能提供、问题排查与合规要求。3) 存储与安全:数据加密存储,并采取必要的权限与访问控制措施,尽力防止未经授权的访问、披露或丢失。4) 共享与第三方:除法律法规要求或履行服务所必需外,不会与第三方共享您的个人信息;若涉及第三方服务(如钱包、短信服务商),仅在实现功能所需的最小范围内处理。5) Cookies/本地存储:用于登录态与必要的会话维持(如令牌、PHPSESSID),您可在浏览器中进行清理或限制。6) 个人权利:您可根据法律法规行使查询、更正、删除、撤回同意等权利。7) 变更与通知:本条款更新后将在页面显著位置提示。继续使用本服务即表示您已阅读并同意更新内容。若您不同意本条款或其中任何更新,请停止使用本服务并联系我们。","user.login.username":"用户名","user.login.usernameRequired":"请输入用户名","user.login.passwordRequired":"请输入密码","user.login.tab":"登录","user.login.submit":"登录","user.login.register":"注册账户","user.login.forgotPassword":"忘记密码?","user.login.orLoginWith":"或使用以下方式登录","user.login.methodPassword":"密码登录","user.login.methodCode":"验证码登录","user.login.email":"邮箱","user.login.emailRequired":"请输入邮箱","user.login.emailInvalid":"邮箱格式不正确","user.login.verificationCode":"验证码","user.login.codeRequired":"请输入验证码","user.login.sendCode":"发送","user.login.codeSent":"验证码已发送","user.login.codeLoginHint":"新用户将自动注册","user.login.welcomeNew":"欢迎!","user.login.accountCreated":"您的账户已创建成功","user.oauth.processing":"正在处理登录...","user.oauth.error.missing_params":"缺少必要参数","user.oauth.error.invalid_state":"无效的状态参数","user.oauth.error.user_creation_failed":"创建用户失败","user.oauth.error.server_error":"服务器错误","user.register.tab":"注册","user.register.title":"创建账户","user.register.email":"邮箱","user.register.emailRequired":"请输入邮箱","user.register.emailInvalid":"邮箱格式不正确","user.register.verificationCode":"验证码","user.register.codeRequired":"请输入验证码","user.register.sendCode":"发送验证码","user.register.codeSent":"验证码已发送","user.register.username":"用户名","user.register.usernameRequired":"请输入用户名","user.register.usernameLength":"用户名需要3-30个字符","user.register.usernamePattern":"以字母开头,只能包含字母、数字和下划线","user.register.password":"密码","user.register.passwordRequired":"请输入密码","user.register.confirmPassword":"确认密码","user.register.confirmPasswordRequired":"请确认密码","user.register.passwordMismatch":"两次输入的密码不一致","user.register.submit":"创建账户","user.register.haveAccount":"已有账户?","user.register.login":"登录","user.register.success":"注册成功","user.register.pleaseLogin":"请使用新账户登录","user.register.pwdMinLength":"至少8个字符","user.register.pwdUppercase":"至少包含一个大写字母","user.register.pwdLowercase":"至少包含一个小写字母","user.register.pwdNumber":"至少包含一个数字","user.resetPassword.title":"重置密码","user.resetPassword.email":"邮箱","user.resetPassword.emailRequired":"请输入邮箱","user.resetPassword.emailInvalid":"邮箱格式不正确","user.resetPassword.verificationCode":"验证码","user.resetPassword.codeRequired":"请输入验证码","user.resetPassword.sendCode":"发送验证码","user.resetPassword.codeSent":"验证码已发送","user.resetPassword.next":"下一步","user.resetPassword.backToLogin":"返回登录","user.resetPassword.resettingFor":"正在为以下邮箱重置密码","user.resetPassword.newPassword":"新密码","user.resetPassword.passwordRequired":"请输入新密码","user.resetPassword.confirmPassword":"确认新密码","user.resetPassword.confirmPasswordRequired":"请确认新密码","user.resetPassword.submit":"重置密码","user.resetPassword.back":"返回","user.resetPassword.successTitle":"密码重置成功","user.resetPassword.successSubtitle":"您现在可以使用新密码登录了","user.resetPassword.goToLogin":"前往登录","user.security.retry":"重试","profile.passwordHintNew":"为了安全,修改密码需要邮箱验证。密码至少8个字符,包含大小写字母和数字。","profile.verificationCode":"验证码","profile.codeRequired":"请输入验证码","profile.codePlaceholder":"输入验证码","profile.sendCode":"发送验证码","profile.codeSent":"验证码已发送","profile.codeWillSendTo":"验证码将发送至","profile.noEmailWarning":"请先在基本信息中设置邮箱","account.basicInfo":"基础信息","account.id":"用户ID","account.username":"用户名","account.nickname":"昵称","account.email":"邮箱","account.mobile":"手机号","account.web3address":"钱包地址","account.pid":"推荐人ID","account.level":"用户等级","account.money":"余额","account.qdtBalance":"QDT 余额","account.score":"积分","account.createtime":"注册时间","account.inviteLink":"邀请链接","account.recharge":"充值","account.rechargeTip":"请使用微信或支付宝扫描下方二维码进行充值","account.qrCodePlaceholder":"二维码占位符(模拟)","account.rechargeAmount":"充值金额","account.enterAmount":"请输入充值金额","account.rechargeHint":"最小充值金额:1 QDT","account.confirmRecharge":"确认充值","account.enterValidAmount":"请输入有效的充值金额","account.rechargeSuccess":"充值成功!已充值 {amount} QDT","account.settings.menuMap.basic":"基本设置","account.settings.menuMap.security":"安全设置","account.settings.menuMap.notification":"新消息通知","account.settings.menuMap.moneyLog":"资金明细","account.moneyLog.empty":"暂无资金明细","account.moneyLog.total":"共 {total} 条记录","account.moneyLog.type.purchase":"购买指标","account.moneyLog.type.recharge":"充值","account.moneyLog.type.refund":"退款","account.moneyLog.type.reward":"奖励","account.moneyLog.type.income":"指标收入","account.moneyLog.type.commission":"平台手续费","wallet.balance":"QDT 余额","wallet.recharge":"充值","wallet.withdraw":"提现","wallet.filter":"筛选","wallet.reset":"重置","wallet.totalRecharge":"累计充值","wallet.totalWithdraw":"累计提现","wallet.totalIncome":"累计收入","wallet.records":"交易记录与资金明细","wallet.tradingRecords":"交易记录","wallet.moneyLog":"资金明细","wallet.rechargeTip":"请使用微信或支付宝扫描下方二维码进行充值","wallet.qrCodePlaceholder":"二维码占位符(模拟)","wallet.rechargeAmount":"充值金额","wallet.enterAmount":"请输入充值金额","wallet.rechargeHint":"最小充值金额:1 QDT","wallet.confirmRecharge":"确认充值","wallet.enterValidAmount":"请输入有效的充值金额","wallet.rechargeSuccess":"充值成功!已充值 {amount} QDT","wallet.rechargeFailed":"充值失败","wallet.withdrawTip":"请输入提现金额和提现地址","wallet.withdrawAmount":"提现金额","wallet.enterWithdrawAmount":"请输入提现金额","wallet.withdrawHint":"最小提现金额:1 QDT","wallet.withdrawAddress":"提现地址(可选)","wallet.enterWithdrawAddress":"请输入提现地址","wallet.confirmWithdraw":"确认提现","wallet.enterValidWithdrawAmount":"请输入有效的提现金额","wallet.insufficientBalance":"余额不足","wallet.withdrawSuccess":"提现成功!已提现 {amount} QDT","wallet.withdrawFailed":"提现失败","wallet.noTradingRecords":"暂无交易记录","wallet.noMoneyLog":"暂无资金明细","wallet.loadTradingRecordsFailed":"加载交易记录失败","wallet.loadMoneyLogFailed":"加载资金明细失败","wallet.moneyLogTotal":"共 {total} 条记录","wallet.moneyLogTypeTitle":"类型","wallet.moneyLogType.all":"全部类型","wallet.table.time":"时间","wallet.table.type":"类型","wallet.table.price":"价格","wallet.table.amount":"数量","wallet.table.money":"金额","wallet.table.balance":"余额","wallet.table.memo":"备注","wallet.table.value":"价值","wallet.table.profit":"盈亏","wallet.table.commission":"手续费","wallet.table.total":"共 {total} 条记录","wallet.tradeType.buy":"买入","wallet.tradeType.sell":"卖出","wallet.tradeType.liquidation":"强平","wallet.tradeType.openLong":"开多","wallet.tradeType.addLong":"加多","wallet.tradeType.closeLong":"平多","wallet.tradeType.closeLongStop":"止损平多","wallet.tradeType.closeLongProfit":"止盈平多","wallet.tradeType.openShort":"开空","wallet.tradeType.addShort":"加空","wallet.tradeType.closeShort":"平空","wallet.tradeType.closeShortStop":"止损平空","wallet.tradeType.closeShortProfit":"止盈平空","wallet.moneyLogType.purchase":"购买指标","wallet.moneyLogType.recharge":"充值","wallet.moneyLogType.withdraw":"提现","wallet.moneyLogType.refund":"退款","wallet.moneyLogType.reward":"奖励","wallet.moneyLogType.income":"收入","wallet.moneyLogType.commission":"手续费","wallet.web3Address.required":"请先填写Web3钱包地址","wallet.web3Address.requiredDescription":"充值前需要先绑定您的Web3钱包地址,用于接收充值","wallet.web3Address.placeholder":"请输入您的Web3钱包地址(0x开头)","wallet.web3Address.save":"保存钱包地址","wallet.web3Address.saveSuccess":"钱包地址保存成功","wallet.web3Address.saveFailed":"保存钱包地址失败","wallet.web3Address.invalidFormat":"请输入有效的Web3钱包地址(以太坊格式:0x开头42位字符,或TRC20格式:T开头34位字符)","wallet.selectCoin":"选择币种","wallet.selectChain":"选择链","wallet.chain.eth":"ETH(ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"BSC","wallet.targetQdtAmount":"想要兑换的QDT数量(可选)","wallet.targetQdtAmount.placeholder":"请输入想要兑换的QDT数量,当前QDT价格:{price} USDT","wallet.targetQdtAmount.requiredUsdt":"需要充值:{amount} USDT","wallet.rechargeAddress":"充值地址","wallet.copyAddress":"复制","wallet.copySuccess":"复制成功!","wallet.copyFailed":"复制失败,请手动复制","wallet.rechargeAddressHint":"请确保使用{chain}链向此地址充值{coin}","wallet.qdtPrice.loading":"加载中...","wallet.rechargeTip.new":"请选择币种和链,然后扫描下方二维码进行充值","wallet.exchangeRate":"1 QDT ≈ {rate} USDT","wallet.withdrawableAmount":"可提现金额","wallet.totalBalance":"总余额","wallet.insufficientWithdrawable":"可提现金额不足,当前可提现:{amount} QDT","wallet.withdrawAddressRequired":"请输入提现地址","wallet.withdrawAddressHint":"请确保地址正确,提现后无法撤销","wallet.withdrawSubmitSuccess":"提现申请提交成功,请等待审核","menu.footer.contactUs":"联系我们","menu.footer.getSupport":"获取支持","menu.footer.socialAccounts":"社交账户","menu.footer.userAgreement":"用户协议","menu.footer.privacyPolicy":"隐私条例","menu.footer.support":"Support","menu.footer.featureRequest":"Feature request","menu.footer.email":"Email","menu.footer.liveChat":"24/7 live chat","dashboard.analysis.title":"Multi-Dimensional Analysis","dashboard.analysis.subtitle":"AI驱动的综合金融分析平台","dashboard.analysis.selectSymbol":"选择或输入标的代码","dashboard.analysis.selectModel":"选择模型","dashboard.analysis.startAnalysis":"开始分析","dashboard.analysis.history":"历史记录","dashboard.analysis.tab.overview":"综合分析","dashboard.analysis.tab.fundamental":"基本面","dashboard.analysis.tab.technical":"技术","dashboard.analysis.tab.news":"新闻","dashboard.analysis.tab.sentiment":"情绪","dashboard.analysis.tab.risk":"风险","dashboard.analysis.tab.debate":"多空辩论","dashboard.analysis.tab.decision":"最终决策","dashboard.analysis.empty.selectSymbol":"选择标的开始分析","dashboard.analysis.empty.selectSymbolDesc":"从自选股列表中选择或输入标的代码,获取多维度AI分析报告","dashboard.analysis.empty.startAnalysis":'点击"开始分析"按钮进行多维度分析',"dashboard.analysis.empty.startAnalysisDesc":"我们将从基本面、技术、新闻、情绪和风险等多个维度为您提供全面的分析","dashboard.analysis.empty.noData":"暂无{type}分析数据,请先进行综合分析","dashboard.analysis.empty.noWatchlist":"暂无自选股","dashboard.analysis.empty.noHistory":"暂无历史记录","dashboard.analysis.empty.watchlistHint":"暂无自选股,请先","dashboard.analysis.empty.noDebateData":"暂无辩论数据","dashboard.analysis.empty.noDecisionData":"暂无决策数据","dashboard.analysis.empty.selectAgent":"请选择一个 Agent 查看分析结果","dashboard.analysis.loading.analyzing":"正在分析中,请稍候...","dashboard.analysis.loading.fundamental":"正在分析基本面数据...","dashboard.analysis.loading.technical":"正在分析技术指标...","dashboard.analysis.loading.news":"正在分析新闻数据...","dashboard.analysis.loading.sentiment":"正在分析市场情绪...","dashboard.analysis.loading.risk":"正在评估风险...","dashboard.analysis.loading.debate":"正在进行多空辩论...","dashboard.analysis.loading.decision":"正在生成最终决策...","dashboard.analysis.score.overall":"综合评分","dashboard.analysis.score.recommendation":"投资建议","dashboard.analysis.score.confidence":"置信度","dashboard.analysis.dimension.fundamental":"基本面","dashboard.analysis.dimension.technical":"技术","dashboard.analysis.dimension.news":"新闻","dashboard.analysis.dimension.sentiment":"情绪","dashboard.analysis.dimension.risk":"风险","dashboard.analysis.card.dimensionScores":"各维度评分","dashboard.analysis.card.overviewReport":"综合分析报告","dashboard.analysis.card.financialMetrics":"财务指标","dashboard.analysis.card.fundamentalReport":"基本面分析报告","dashboard.analysis.card.technicalIndicators":"技术指标","dashboard.analysis.card.technicalReport":"技术分析报告","dashboard.analysis.card.newsList":"相关新闻","dashboard.analysis.card.newsReport":"新闻分析报告","dashboard.analysis.card.sentimentIndicators":"情绪指标","dashboard.analysis.card.sentimentReport":"情绪分析报告","dashboard.analysis.card.riskMetrics":"风险指标","dashboard.analysis.card.riskReport":"风险评估报告","dashboard.analysis.card.bullView":"看涨观点 (Bull)","dashboard.analysis.card.bearView":"看跌观点 (Bear)","dashboard.analysis.card.researchConclusion":"研究员结论","dashboard.analysis.card.traderPlan":"交易员计划","dashboard.analysis.card.riskDebate":"风险委员会辩论","dashboard.analysis.card.finalDecision":"最终决策 (Final Decision)","dashboard.analysis.card.tradePlanDetail":"交易计划详情","dashboard.analysis.tradingPlan.entry_price":"入场价格","dashboard.analysis.tradingPlan.position_size":"仓位大小","dashboard.analysis.tradingPlan.stop_loss":"止损","dashboard.analysis.tradingPlan.take_profit":"止盈","dashboard.analysis.label.confidence":"置信度","dashboard.analysis.label.keyPoints":"核心要点","dashboard.analysis.label.riskWarning":"风险提示","dashboard.analysis.risk.risky":"激进派观点 (Risky)","dashboard.analysis.risk.neutral":"中立派观点 (Neutral)","dashboard.analysis.risk.safe":"保守派观点 (Safe)","dashboard.analysis.risk.conclusion":"结论","dashboard.analysis.feature.fundamental":"基本面分析","dashboard.analysis.feature.technical":"技术分析","dashboard.analysis.feature.news":"新闻分析","dashboard.analysis.feature.sentiment":"情绪分析","dashboard.analysis.feature.risk":"风险评估","dashboard.analysis.watchlist.title":"我的自选股","dashboard.analysis.watchlist.add":"添加","dashboard.analysis.watchlist.addStock":"添加股票","dashboard.analysis.modal.addStock.title":"添加自选股","dashboard.analysis.modal.addStock.confirm":"确定","dashboard.analysis.modal.addStock.cancel":"取消","dashboard.analysis.modal.addStock.market":"市场类型","dashboard.analysis.modal.addStock.marketPlaceholder":"请选择市场","dashboard.analysis.modal.addStock.marketRequired":"请选择市场类型","dashboard.analysis.modal.addStock.symbol":"股票代码","dashboard.analysis.modal.addStock.symbolPlaceholder":"例如: AAPL, TSLA, GOOGL, 000001, BTC","dashboard.analysis.modal.addStock.symbolRequired":"请输入股票代码","dashboard.analysis.modal.addStock.searchPlaceholder":"搜索标的代码或名称","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"搜索或输入标的代码(如:AAPL、BTC/USDT、EUR/USD)","dashboard.analysis.modal.addStock.searchOrInputHint":"支持搜索数据库中的标的,或直接输入代码(系统将自动获取名称)","dashboard.analysis.modal.addStock.search":"搜索","dashboard.analysis.modal.addStock.searchResults":"搜索结果","dashboard.analysis.modal.addStock.hotSymbols":"热门标的","dashboard.analysis.modal.addStock.noHotSymbols":"暂无热门标的","dashboard.analysis.modal.addStock.selectedSymbol":"已选标的","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"请先选择一个标的","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"请先选择一个标的或输入标的代码","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"请输入标的代码","dashboard.analysis.modal.addStock.pleaseSelectMarket":"请先选择市场类型","dashboard.analysis.modal.addStock.searchFailed":"搜索失败,请稍后重试","dashboard.analysis.modal.addStock.noSearchResults":"未找到匹配的标的","dashboard.analysis.modal.addStock.willAutoFetchName":"系统将自动获取名称","dashboard.analysis.modal.addStock.addDirectly":"直接添加","dashboard.analysis.modal.addStock.nameWillBeFetched":"名称将在添加时自动获取","dashboard.analysis.market.USStock":"美股","dashboard.analysis.market.Crypto":"加密货币","dashboard.analysis.market.Forex":"外汇","dashboard.analysis.market.Futures":"期货","dashboard.analysis.modal.history.title":"历史分析记录","dashboard.analysis.modal.history.viewResult":"查看结果","dashboard.analysis.modal.history.completeTime":"完成时间","dashboard.analysis.modal.history.error":"错误","dashboard.analysis.status.pending":"待处理","dashboard.analysis.status.processing":"处理中","dashboard.analysis.status.completed":"已完成","dashboard.analysis.status.failed":"失败","dashboard.analysis.message.selectSymbol":"请先选择标的","dashboard.analysis.message.taskCreated":"分析任务已创建,正在后台执行...","dashboard.analysis.message.analysisComplete":"分析完成","dashboard.analysis.message.analysisCompleteCache":"分析完成(使用缓存数据)","dashboard.analysis.message.analysisFailed":"分析失败,请稍后重试","dashboard.analysis.message.addStockSuccess":"添加成功","dashboard.analysis.message.addStockFailed":"添加失败","dashboard.analysis.message.removeStockSuccess":"移除成功","dashboard.analysis.message.removeStockFailed":"移除失败","dashboard.analysis.message.resumingAnalysis":"正在恢复分析任务...","dashboard.analysis.message.deleteSuccess":"删除成功","dashboard.analysis.message.deleteFailed":"删除失败","dashboard.analysis.modal.history.delete":"删除","dashboard.analysis.modal.history.deleteConfirm":"确定要删除这条分析记录吗?","dashboard.analysis.test":"工专路 {no} 号店","dashboard.analysis.introduce":"指标说明","dashboard.analysis.total-sales":"总销售额","dashboard.analysis.day-sales":"日均销售额¥","dashboard.analysis.visits":"访问量","dashboard.analysis.visits-trend":"访问量趋势","dashboard.analysis.visits-ranking":"门店访问量排名","dashboard.analysis.day-visits":"日访问量","dashboard.analysis.week":"周同比","dashboard.analysis.day":"日同比","dashboard.analysis.payments":"支付笔数","dashboard.analysis.conversion-rate":"转化率","dashboard.analysis.operational-effect":"运营活动效果","dashboard.analysis.sales-trend":"销售趋势","dashboard.analysis.sales-ranking":"门店销售额排名","dashboard.analysis.all-year":"全年","dashboard.analysis.all-month":"本月","dashboard.analysis.all-week":"本周","dashboard.analysis.all-day":"今日","dashboard.analysis.search-users":"搜索用户数","dashboard.analysis.per-capita-search":"人均搜索次数","dashboard.analysis.online-top-search":"线上热门搜索","dashboard.analysis.the-proportion-of-sales":"销售额类别占比","dashboard.analysis.dropdown-option-one":"操作一","dashboard.analysis.dropdown-option-two":"操作二","dashboard.analysis.channel.all":"全部渠道","dashboard.analysis.channel.online":"线上","dashboard.analysis.channel.stores":"门店","dashboard.analysis.sales":"销售额","dashboard.analysis.traffic":"客流量","dashboard.analysis.table.rank":"排名","dashboard.analysis.table.search-keyword":"搜索关键词","dashboard.analysis.table.users":"用户数","dashboard.analysis.table.weekly-range":"周涨幅","dashboard.indicator.selectSymbol":"选择或输入标的代码","dashboard.indicator.emptyWatchlistHint":"暂无自选股,请先添加","dashboard.indicator.hint.selectSymbol":"请选择标的开始分析","dashboard.indicator.hint.selectSymbolDesc":"在上方搜索框中选择或输入股票代码,查看K线图表和技术指标","dashboard.indicator.retry":"重试","dashboard.indicator.panel.title":"技术指标","dashboard.indicator.panel.realtimeOn":"关闭实时更新","dashboard.indicator.panel.realtimeOff":"开启实时更新","dashboard.indicator.panel.themeLight":"切换到深色主题","dashboard.indicator.panel.themeDark":"切换到浅色主题","dashboard.indicator.section.enabled":"已启用","dashboard.indicator.section.added":"我添加的指标","dashboard.indicator.section.custom":"自己创建的指标","dashboard.indicator.section.bought":"我选购的指标","dashboard.indicator.section.myCreated":"我创建的指标","dashboard.indicator.section.purchased":"我购买的指标","dashboard.indicator.empty":"暂无指标,请先添加或创建指标","dashboard.indicator.emptyPurchased":"暂无购买的指标,去指标市场看看","dashboard.indicator.buy":"购买指标","dashboard.indicator.action.start":"启动","dashboard.indicator.action.stop":"关闭","dashboard.indicator.action.edit":"编辑","dashboard.indicator.action.delete":"删除","dashboard.indicator.action.backtest":"回测","dashboard.indicator.action.publish":"发布到社区","dashboard.indicator.action.unpublish":"已发布(点击管理)","dashboard.indicator.status.normal":"正常","dashboard.indicator.status.normalPermanent":"正常(永久有效)","dashboard.indicator.status.expired":"已过期","dashboard.indicator.expiry.permanent":"永久有效","dashboard.indicator.expiry.noExpiry":"无到期时间","dashboard.indicator.expiry.expired":"已过期:{date}","dashboard.indicator.expiry.expiresOn":"到期时间:{date}","dashboard.indicator.delete.confirmTitle":"确认删除","dashboard.indicator.delete.confirmContent":'确定要删除指标"{name}"吗?此操作不可恢复。',"dashboard.indicator.delete.confirmOk":"删除","dashboard.indicator.delete.confirmCancel":"取消","dashboard.indicator.delete.success":"删除成功","dashboard.indicator.delete.failed":"删除失败","dashboard.indicator.save.success":"保存成功","dashboard.indicator.save.failed":"保存失败","dashboard.indicator.publish.title":"发布到社区","dashboard.indicator.publish.editTitle":"管理发布","dashboard.indicator.publish.hint":'发布后,其他用户可以在"指标社区"中看到并购买您的指标',"dashboard.indicator.publish.pricingType":"定价方式","dashboard.indicator.publish.free":"免费","dashboard.indicator.publish.paid":"付费","dashboard.indicator.publish.price":"价格","dashboard.indicator.publish.description":"指标描述","dashboard.indicator.publish.descriptionPlaceholder":"请输入指标的详细描述,帮助其他用户了解指标功能...","dashboard.indicator.publish.confirm":"确认发布","dashboard.indicator.publish.update":"更新发布","dashboard.indicator.publish.unpublish":"取消发布","dashboard.indicator.publish.success":"发布成功","dashboard.indicator.publish.failed":"发布失败","dashboard.indicator.publish.unpublishSuccess":"已取消发布","dashboard.indicator.publish.unpublishFailed":"取消发布失败","dashboard.indicator.error.loadWatchlistFailed":"加载自选股失败","dashboard.indicator.error.chartNotReady":"图表组件未初始化,请先选择标的并等待图表加载完成","dashboard.indicator.error.chartMethodNotReady":"图表组件方法未就绪,请稍后重试","dashboard.indicator.error.chartExecuteNotReady":"图表组件执行方法未就绪,请稍后重试","dashboard.indicator.error.parseFailed":"无法解析Python代码","dashboard.indicator.error.parseFailedCheck":"无法解析Python代码,请检查代码格式","dashboard.indicator.error.addIndicatorFailed":"添加指标失败","dashboard.indicator.error.runIndicatorFailed":"运行指标失败","dashboard.indicator.error.pleaseLogin":"请先登录","dashboard.indicator.error.loadDataFailed":"数据加载失败","dashboard.indicator.error.loadDataFailedDesc":"请检查网络连接","dashboard.indicator.error.tiingoSubscription":"外汇1分钟数据需要 Tiingo 付费订阅,请使用其他时间周期或升级订阅","dashboard.indicator.error.pythonEngineFailed":"Python 引擎加载失败,指标功能可能无法使用","dashboard.indicator.error.chartInitFailed":"图表初始化失败","dashboard.indicator.warning.enterCode":"请先输入指标代码","dashboard.indicator.warning.pyodideLoadFailed":"Python 引擎加载失败","dashboard.indicator.warning.pyodideLoadFailedDesc":"您当前所在区域或网络环境无法使用该功能","dashboard.indicator.warning.chartNotInitialized":"图表未初始化,无法使用画线工具","dashboard.indicator.success.runIndicator":"指标运行成功","dashboard.indicator.success.clearDrawings":"已清除所有画线","dashboard.indicator.sma":"SMA (均线组合)","dashboard.indicator.ema":"EMA (指数均线组合)","dashboard.indicator.rsi":"RSI (相对强弱)","dashboard.indicator.macd":"MACD","dashboard.indicator.bb":"布林带 (Bollinger Bands)","dashboard.indicator.atr":"ATR (平均真实波幅)","dashboard.indicator.cci":"CCI (商品通道指数)","dashboard.indicator.williams":"Williams %R (威廉指标)","dashboard.indicator.mfi":"MFI (资金流量指标)","dashboard.indicator.adx":"ADX (平均趋向指数)","dashboard.indicator.obv":"OBV (能量潮)","dashboard.indicator.adosc":"ADOSC (积累/派发振荡器)","dashboard.indicator.ad":"AD (积累/派发线)","dashboard.indicator.kdj":"KDJ (随机指标)","dashboard.indicator.signal.buy":"BUY","dashboard.indicator.signal.sell":"SELL","dashboard.indicator.signal.supertrendBuy":"SuperTrend Buy","dashboard.indicator.signal.supertrendSell":"SuperTrend Sell","dashboard.indicator.chart.kline":"K线","dashboard.indicator.chart.volume":"成交量","dashboard.indicator.chart.uptrend":"Up Trend","dashboard.indicator.chart.downtrend":"Down Trend","dashboard.indicator.tooltip.time":"时间","dashboard.indicator.tooltip.open":"开","dashboard.indicator.tooltip.close":"收","dashboard.indicator.tooltip.high":"高","dashboard.indicator.tooltip.low":"低","dashboard.indicator.tooltip.volume":"成交量","dashboard.indicator.drawing.line":"线段","dashboard.indicator.drawing.horizontalLine":"水平线","dashboard.indicator.drawing.verticalLine":"垂直线","dashboard.indicator.drawing.ray":"射线","dashboard.indicator.drawing.straightLine":"直线","dashboard.indicator.drawing.parallelLine":"平行线","dashboard.indicator.drawing.priceLine":"价格线","dashboard.indicator.drawing.priceChannel":"价格通道","dashboard.indicator.drawing.fibonacciLine":"斐波那契线","dashboard.indicator.drawing.measure":"测量","dashboard.indicator.drawing.clearAll":"清除所有画线","dashboard.indicator.market.USStock":"美股","dashboard.indicator.market.Crypto":"加密货币","dashboard.indicator.market.Forex":"外汇","dashboard.indicator.market.Futures":"期货","dashboard.indicator.create":"创建指标","dashboard.indicator.editor.title":"创建/编辑指标","dashboard.indicator.editor.name":"指标名称","dashboard.indicator.editor.nameRequired":"请输入指标名称","dashboard.indicator.editor.namePlaceholder":"请输入指标名称","dashboard.indicator.editor.description":"指标描述","dashboard.indicator.editor.descriptionPlaceholder":"请输入指标描述(可选)","dashboard.indicator.editor.code":"指标脚本(Python)","dashboard.indicator.editor.codeRequired":"请输入指标代码","dashboard.indicator.editor.codePlaceholder":"请输入Python代码","dashboard.indicator.editor.run":"运行","dashboard.indicator.editor.runHint":"点击运行按钮可以在K线图上预览指标效果","dashboard.indicator.editor.guide":"开发指南","dashboard.indicator.editor.guideTitle":"Python 指标开发指南","dashboard.indicator.editor.save":"保存","dashboard.indicator.editor.cancel":"取消","dashboard.indicator.editor.unnamed":"未命名指标","dashboard.indicator.editor.publishToCommunity":"发布到社区","dashboard.indicator.editor.publishToCommunityHint":"发布后,其他用户可以在社区中查看和使用您的指标","dashboard.indicator.editor.indicatorType":"指标类型","dashboard.indicator.editor.indicatorTypeRequired":"请选择指标类型","dashboard.indicator.editor.indicatorTypePlaceholder":"请选择指标类型","dashboard.indicator.editor.previewImage":"预览图","dashboard.indicator.editor.uploadImage":"上传图片","dashboard.indicator.editor.previewImageHint":"建议尺寸:800x400,大小不超过2MB","dashboard.indicator.editor.pricing":"售价(QDT)","dashboard.indicator.editor.pricingType.free":"免费","dashboard.indicator.editor.pricingType.permanent":"永久","dashboard.indicator.editor.pricingType.monthly":"月付","dashboard.indicator.editor.price":"价格","dashboard.indicator.editor.priceRequired":"请输入价格","dashboard.indicator.editor.pricePlaceholder":"请输入价格","dashboard.indicator.editor.pricingHint":"免费指标虽然价格为0,但平台会根据您的指标使用量和好评率给予奖励(QDT)","dashboard.indicator.editor.aiGenerate":"智能生成","dashboard.indicator.editor.aiPromptPlaceholder":"请描述你的信号逻辑(只输出 buy/sell)与绘图(plots)。仓位/风控/加减仓请在回测配置中设定。","dashboard.indicator.editor.aiGenerateBtn":"AI生成代码","dashboard.indicator.editor.aiPromptRequired":"请输入您的想法","dashboard.indicator.editor.aiGenerateSuccess":"代码生成成功","dashboard.indicator.editor.aiGenerateError":"代码生成失败,请稍后重试","dashboard.indicator.editor.verifyCode":"代码检查","dashboard.indicator.editor.verifyCodeSuccess":"代码检查通过","dashboard.indicator.editor.verifyCodeFailed":"代码检查未通过","dashboard.indicator.editor.verifyCodeEmpty":"代码不能为空","dashboard.indicator.boundary.message":"提示:指标脚本只负责“计算 + 绘图 + buy/sell 信号”;仓位、风控、加减仓、手续费/滑点属于策略执行配置。","dashboard.indicator.boundary.indicatorRule":"指标脚本请只输出 buy/sell(并设定 df['buy']/df['sell'])。不要在脚本内撰写仓位管理、止盈止损、加减仓。","dashboard.indicator.boundary.backtestRule":"规则:同一根K线若出现主信号(buy/sell→开/平仓/反手),本K线将跳过所有加仓与减仓。","dashboard.indicator.paramsConfig.title":"指标参数配置","dashboard.indicator.paramsConfig.noParams":"该指标没有可配置的参数","dashboard.indicator.paramsConfig.hint":"设置参数后点击确定运行指标","dashboard.indicator.backtest.title":"指标回测","dashboard.indicator.backtest.config":"回测参数","dashboard.indicator.backtest.startDate":"开始日期","dashboard.indicator.backtest.endDate":"结束日期","dashboard.indicator.backtest.selectStartDate":"选择开始日期","dashboard.indicator.backtest.selectEndDate":"选择结束日期","dashboard.indicator.backtest.startDateRequired":"请选择开始日期","dashboard.indicator.backtest.endDateRequired":"请选择结束日期","dashboard.indicator.backtest.initialCapital":"初始资金","dashboard.indicator.backtest.initialCapitalRequired":"请输入初始资金","dashboard.indicator.backtest.commission":"手续费率(%)","dashboard.indicator.backtest.commissionHint":"按名义价值(含杠杆)收取;每笔成交(开/平仓)都会从余额扣除。","dashboard.indicator.backtest.leverage":"杠杆倍率","dashboard.indicator.backtest.timeframe":"K线周期","dashboard.indicator.backtest.tradeDirection":"交易方向","dashboard.indicator.backtest.longOnly":"做多","dashboard.indicator.backtest.shortOnly":"做空","dashboard.indicator.backtest.both":"双向","dashboard.indicator.backtest.run":"开始回测","dashboard.indicator.backtest.rerun":"重新回测","dashboard.indicator.backtest.close":"关闭","dashboard.indicator.backtest.running":"正在进行指标回测...","dashboard.indicator.backtest.loadingTip1":"正在获取历史K线数据...","dashboard.indicator.backtest.loadingTip2":"正在执行策略信号计算...","dashboard.indicator.backtest.loadingTip3":"正在模拟交易执行...","dashboard.indicator.backtest.loadingTip4":"正在计算回测指标...","dashboard.indicator.backtest.loadingTip5":"即将完成,请稍候...","dashboard.indicator.backtest.results":"回测结果","dashboard.indicator.backtest.totalReturn":"总收益率","dashboard.indicator.backtest.annualReturn":"年化收益","dashboard.indicator.backtest.maxDrawdown":"最大回撤","dashboard.indicator.backtest.sharpeRatio":"夏普比率","dashboard.indicator.backtest.winRate":"胜率","dashboard.indicator.backtest.profitFactor":"盈亏比","dashboard.indicator.backtest.totalTrades":"交易次数","dashboard.indicator.totalReturn":"总收益率","dashboard.indicator.annualReturn":"年化收益率","dashboard.indicator.maxDrawdown":"最大回撤","dashboard.indicator.sharpeRatio":"夏普比率","dashboard.indicator.winRate":"胜率","dashboard.indicator.profitFactor":"盈亏比","dashboard.indicator.totalTrades":"总交易次数","dashboard.indicator.backtest.totalCommission":"总手续费","dashboard.indicator.backtest.equityCurve":"收益曲线","dashboard.indicator.backtest.strategy":"指标收益","dashboard.indicator.backtest.benchmark":"基准收益","dashboard.indicator.backtest.tradeHistory":"交易记录","dashboard.indicator.backtest.tradeTime":"时间","dashboard.indicator.backtest.tradeType":"类型","dashboard.indicator.backtest.buy":"买入","dashboard.indicator.backtest.sell":"卖出","dashboard.indicator.backtest.liquidation":"爆仓","dashboard.indicator.backtest.openLong":"开多","dashboard.indicator.backtest.closeLong":"平多","dashboard.indicator.backtest.closeLongStop":"平多(止损)","dashboard.indicator.backtest.closeLongProfit":"平多(止盈)","dashboard.indicator.backtest.addLong":"加多仓","dashboard.indicator.backtest.openShort":"开空","dashboard.indicator.backtest.closeShort":"平空","dashboard.indicator.backtest.closeShortStop":"平空(止损)","dashboard.indicator.backtest.closeShortProfit":"平空(止盈)","dashboard.indicator.backtest.addShort":"加空仓","dashboard.indicator.backtest.price":"价格","dashboard.indicator.backtest.amount":"数量","dashboard.indicator.backtest.balance":"账户余额","dashboard.indicator.backtest.profit":"盈亏","dashboard.indicator.backtest.success":"回测完成","dashboard.indicator.backtest.failed":"回测失败,请稍后重试","dashboard.indicator.backtest.quickSelect":"快速选择","dashboard.indicator.backtest.precisionMode":"回测精度模式","dashboard.indicator.backtest.estimatedCandles":"预计处理约 {count} 根K线","dashboard.indicator.backtest.highPrecisionDesc":"使用1分钟级别K线进行高精度回测,止损止盈触发更精确","dashboard.indicator.backtest.mediumPrecisionDesc":"回测区间超过30天,使用5分钟级别K线以平衡精度与性能","dashboard.indicator.backtest.standardModeWarning":"使用标准回测模式","dashboard.indicator.backtest.standardModeDesc":"当前配置不支持高精度回测,将使用策略K线进行回测","dashboard.indicator.backtest.onlyCryptoSupported":"高精度回测仅支持加密货币市场","dashboard.indicator.backtest.noIndicatorCode":"该指标没有可回测的代码","dashboard.indicator.backtest.noSymbol":"请先选择交易标的","dashboard.indicator.backtest.dateRangeExceeded":"回测时间范围超出限制:{timeframe}周期最多可回测{maxRange}","dashboard.indicator.backtest.dateRangeExceededDays":"回测时间范围超出限制:{timeframe}周期最多可回测{maxRange}({maxDays}天)","dashboard.indicator.backtest.metaLine":"标的:{symbol} | 市场:{market} | 周期:{timeframe}","dashboard.indicator.backtest.savedRunId":"回测已保存,记录ID:{id}","dashboard.indicator.backtest.historyTitle":"回测记录","dashboard.indicator.backtest.historyRefresh":"刷新","dashboard.indicator.backtest.historyView":"查看","dashboard.indicator.backtest.historyNoData":"暂无回测记录","dashboard.indicator.backtest.historyUseCurrent":"仅目前币种/周期","dashboard.indicator.backtest.historyFilterSymbol":"币种(Symbol)","dashboard.indicator.backtest.historyFilterTimeframe":"周期(Timeframe)","dashboard.indicator.backtest.historyApply":"应用筛选","dashboard.indicator.backtest.historyAIAnalyze":"AI分析","dashboard.indicator.backtest.historyAIAnalyzeTitle":"AI 分析建议","dashboard.indicator.backtest.historyNoAIResult":"暂无 AI 分析结果","dashboard.indicator.backtest.historyRunId":"记录ID","dashboard.indicator.backtest.historyCreatedAt":"时间","dashboard.indicator.backtest.historyRange":"区间","dashboard.indicator.backtest.historyStatus":"状态","dashboard.indicator.backtest.historyStatusSuccess":"成功","dashboard.indicator.backtest.historyStatusFailed":"失败","dashboard.indicator.backtest.historyActions":"操作","dashboard.indicator.backtest.prev":"上一步","dashboard.indicator.backtest.next":"下一步","dashboard.indicator.backtest.steps.strategy.title":"执行配置","dashboard.indicator.backtest.steps.strategy.desc":"仓位/风控/加减仓(策略层)","dashboard.indicator.backtest.steps.trading.title":"回测环境","dashboard.indicator.backtest.steps.trading.desc":"时间/资金/费率/杠杆/滑点","dashboard.indicator.backtest.steps.results.title":"结果","dashboard.indicator.backtest.steps.results.desc":"统计与交易明细","dashboard.indicator.backtest.panel.risk":"执行配置:风控(止损/移动止盈)","dashboard.indicator.backtest.panel.scale":"执行配置:加仓(顺势/逆势)","dashboard.indicator.backtest.panel.reduce":"执行配置:减仓(顺势/逆势)","dashboard.indicator.backtest.panel.position":"执行配置:开仓仓位","dashboard.indicator.backtest.field.stopLossPct":"止损(%)","dashboard.indicator.backtest.field.takeProfitPct":"止盈(%)","dashboard.indicator.backtest.field.trailingEnabled":"移动止盈","dashboard.indicator.backtest.field.trailingStopPct":"移动回撤(%)","dashboard.indicator.backtest.field.trailingActivationPct":"移动止盈激活(%)","dashboard.indicator.backtest.field.slippage":"滑点(%)","dashboard.indicator.backtest.field.trendAddEnabled":"顺势加仓","dashboard.indicator.backtest.field.dcaAddEnabled":"逆势加仓","dashboard.indicator.backtest.field.trendAddStepPct":"加仓触发(%)","dashboard.indicator.backtest.field.dcaAddStepPct":"加仓触发(%)","dashboard.indicator.backtest.field.trendAddSizePct":"每次加仓资金占比(%)","dashboard.indicator.backtest.field.dcaAddSizePct":"每次加仓资金占比(%)","dashboard.indicator.backtest.field.trendAddMaxTimes":"最多加仓次数","dashboard.indicator.backtest.field.dcaAddMaxTimes":"最多加仓次数","dashboard.indicator.backtest.field.trendReduceEnabled":"顺势减仓","dashboard.indicator.backtest.field.adverseReduceEnabled":"逆势减仓","dashboard.indicator.backtest.field.trendReduceStepPct":"顺势触发(%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"逆势触发(%)","dashboard.indicator.backtest.field.trendReduceSizePct":"每次减仓比例(%)","dashboard.indicator.backtest.field.adverseReduceSizePct":"每次逆势减仓比例(%)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"最多顺势减仓次数","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"最多逆势减仓次数","dashboard.indicator.backtest.field.entryPct":"开仓资金占比(%)","dashboard.indicator.backtest.field.minOrderPct":"单次最小资金占比(%)(可选)","dashboard.indicator.backtest.hint.entryPctMax":"最大可开仓:{maxPct}%(为后续加仓预留资金)","dashboard.indicator.backtest.closeLongTrailing":"平多(移动止损/止盈)","dashboard.indicator.backtest.reduceLong":"多头减仓","dashboard.indicator.backtest.closeShortTrailing":"平空(移动止损/止盈)","dashboard.indicator.backtest.reduceShort":"空头减仓","dashboard.docs.title":"文档中心","dashboard.docs.search.placeholder":"搜索文档...","dashboard.docs.category.all":"全部","dashboard.docs.category.guide":"开发指南","dashboard.docs.category.api":"API文档","dashboard.docs.category.tutorial":"教程","dashboard.docs.category.faq":"常见问题","dashboard.docs.featured.title":"推荐文档","dashboard.docs.featured.tag":"推荐","dashboard.docs.list.views":"浏览","dashboard.docs.list.author":"作者","dashboard.docs.list.empty":"暂无文档","dashboard.docs.list.backToAll":"返回全部文档","dashboard.docs.list.total":"共 {count} 篇文档","dashboard.docs.detail.back":"返回文档列表","dashboard.docs.detail.updatedAt":"更新于","dashboard.docs.detail.related":"相关文档","dashboard.docs.detail.notFound":"文档不存在","dashboard.docs.detail.error":"文档不存在或已被删除","dashboard.docs.search.result":"搜索结果","dashboard.docs.search.keyword":"关键词","dashboard.totalEquity":"总权益","dashboard.totalPnL":"总盈亏","dashboard.aiStrategies":"AI 策略","dashboard.indicatorStrategies":"指标策略","dashboard.running":"运行中","dashboard.enabled":"已启用","dashboard.pnlHistory":"历史盈亏","dashboard.strategyPerformance":"策略盈亏占比","dashboard.drawdown":"回撤曲线","dashboard.strategyRanking":"策略排行榜","dashboard.winRate":"胜率","dashboard.profitFactor":"盈亏比","dashboard.maxDrawdown":"最大回撤","dashboard.totalTrades":"总交易","dashboard.runningStrategies":"运行中策略","dashboard.equityCurve":"权益曲线","dashboard.strategyAllocation":"策略分布","dashboard.drawdownCurve":"回撤曲线","dashboard.hourlyDistribution":"交易时段","dashboard.dailyPnl":"日盈亏","dashboard.cumulativePnl":"累计盈亏","dashboard.tradeCount":"交易次数","dashboard.profit":"盈亏","dashboard.noData":"暂无数据","dashboard.noStrategyData":"暂无策略数据","dashboard.ranking.totalProfit":"总收益","dashboard.ranking.roi":"收益率","dashboard.ranking.trades":"交易数","dashboard.unit.trades":"笔","dashboard.unit.strategies":"个","dashboard.label.avgDaily":"日均","dashboard.label.avgProfit":"平均盈利","dashboard.label.win":"胜","dashboard.label.lose":"负","dashboard.label.trade":"交易","dashboard.label.indicator":"指标","dashboard.label.totalPnl":"总盈亏","dashboard.label.maxDrawdownPoint":"最大回撤","dashboard.profitCalendar":"收益日历","dashboard.recentTrades":"最近交易","dashboard.currentPositions":"当前持仓","dashboard.table.time":"时间","dashboard.table.strategy":"策略名称","dashboard.table.symbol":"标的","dashboard.table.type":"类型","dashboard.table.side":"方向","dashboard.table.size":"持仓量","dashboard.table.entryPrice":"开仓均价","dashboard.table.price":"价格","dashboard.table.amount":"数量","dashboard.table.profit":"盈亏","dashboard.pendingOrders":"订单执行记录","dashboard.totalOrders":"共 {total} 条","dashboard.viewError":"查看错误","dashboard.filled":"已成交","dashboard.orderTable.time":"创建时间","dashboard.orderTable.strategy":"策略","dashboard.orderTable.symbol":"交易对","dashboard.orderTable.signalType":"信号类型","dashboard.orderTable.amount":"数量","dashboard.orderTable.price":"成交价","dashboard.orderTable.status":"状态","dashboard.orderTable.timeInfo":"时间","dashboard.orderTable.executedAt":"执行时间","dashboard.orderTable.exchange":"交易所","dashboard.orderTable.notify":"通知方式","dashboard.orderTable.actions":"操作","dashboard.orderTable.delete":"删除","dashboard.orderTable.deleteConfirm":"确认删除这条记录?","dashboard.orderTable.deleteSuccess":"删除成功","dashboard.orderTable.deleteFailed":"删除失败","dashboard.newOrderNotify":"新订单提醒","dashboard.newOrderDesc":"有新的订单执行记录","dashboard.soundEnabled":"声音提醒已开启","dashboard.soundDisabled":"声音提醒已关闭","dashboard.clickToMute":"点击关闭声音提醒","dashboard.clickToUnmute":"点击开启声音提醒","dashboard.signalType.openLong":"开多","dashboard.signalType.openShort":"开空","dashboard.signalType.closeLong":"平多","dashboard.signalType.closeShort":"平空","dashboard.signalType.addLong":"加多","dashboard.signalType.addShort":"加空","dashboard.status.pending":"待处理","dashboard.status.processing":"处理中","dashboard.status.completed":"已完成","dashboard.status.failed":"失败","dashboard.status.cancelled":"已取消","dashboard.table.pnl":"未实现盈亏","form.basic-form.basic.title":"基础表单","form.basic-form.basic.description":"表单页用于向用户收集或验证信息,基础表单常见于数据项较少的表单场景。","form.basic-form.title.label":"标题","form.basic-form.title.placeholder":"给目标起个名字","form.basic-form.title.required":"请输入标题","form.basic-form.date.label":"起止日期","form.basic-form.placeholder.start":"开始日期","form.basic-form.placeholder.end":"结束日期","form.basic-form.date.required":"请选择起止日期","form.basic-form.goal.label":"目标描述","form.basic-form.goal.placeholder":"请输入你的阶段性工作目标","form.basic-form.goal.required":"请输入目标描述","form.basic-form.standard.label":"衡量标准","form.basic-form.standard.placeholder":"请输入衡量标准","form.basic-form.standard.required":"请输入衡量标准","form.basic-form.client.label":"客户","form.basic-form.client.required":"请描述你服务的客户","form.basic-form.label.tooltip":"目标的服务对象","form.basic-form.client.placeholder":"请描述你服务的客户,内部客户直接 @姓名/工号","form.basic-form.invites.label":"邀评人","form.basic-form.invites.placeholder":"请直接 @姓名/工号,最多可邀请 5 人","form.basic-form.weight.label":"权重","form.basic-form.weight.placeholder":"请输入","form.basic-form.public.label":"目标公开","form.basic-form.label.help":"客户、邀评人默认被分享","form.basic-form.radio.public":"公开","form.basic-form.radio.partially-public":"部分公开","form.basic-form.radio.private":"不公开","form.basic-form.publicUsers.placeholder":"公开给","form.basic-form.option.A":"同事一","form.basic-form.option.B":"同事二","form.basic-form.option.C":"同事三","form.basic-form.email.required":"请输入邮箱地址!","form.basic-form.email.wrong-format":"邮箱地址格式错误!","form.basic-form.userName.required":"请输入用户名!","form.basic-form.password.required":"请输入密码!","form.basic-form.password.twice":"两次输入的密码不匹配!","form.basic-form.strength.msg":"请至少输入 6 个字符。请不要使用容易被猜到的密码。","form.basic-form.strength.strong":"强度:强","form.basic-form.strength.medium":"强度:中","form.basic-form.strength.short":"强度:太短","form.basic-form.confirm-password.required":"请确认密码!","form.basic-form.phone-number.required":"请输入手机号!","form.basic-form.phone-number.wrong-format":"手机号格式错误!","form.basic-form.verification-code.required":"请输入验证码!","form.basic-form.form.get-captcha":"获取验证码","form.basic-form.captcha.second":"秒","form.basic-form.form.optional":"(选填)","form.basic-form.form.submit":"提交","form.basic-form.form.save":"保存","form.basic-form.email.placeholder":"邮箱","form.basic-form.password.placeholder":"至少6位密码,区分大小写","form.basic-form.confirm-password.placeholder":"确认密码","form.basic-form.phone-number.placeholder":"手机号","form.basic-form.verification-code.placeholder":"验证码","result.success.title":"提交成功","result.success.description":"提交结果页用于反馈一系列操作任务的处理结果, 如果仅是简单操作,使用 Message 全局提示反馈即可。 本文字区域可以展示简单的补充说明,如果有类似展示 “单据”的需求,下面这个灰色区域可以呈现比较复杂的内容。","result.success.operate-title":"项目名称","result.success.operate-id":"项目 ID","result.success.principal":"负责人","result.success.operate-time":"生效时间","result.success.step1-title":"创建项目","result.success.step1-operator":"曲丽丽","result.success.step2-title":"部门初审","result.success.step2-operator":"周毛毛","result.success.step2-extra":"催一下","result.success.step3-title":"财务复核","result.success.step4-title":"完成","result.success.btn-return":"返回列表","result.success.btn-project":"查看项目","result.success.btn-print":"打印","result.fail.error.title":"提交失败","result.fail.error.description":"请核对并修改以下信息后,再重新提交。","result.fail.error.hint-title":"您提交的内容有如下错误:","result.fail.error.hint-text1":"您的账户已被冻结","result.fail.error.hint-btn1":"立即解冻","result.fail.error.hint-text2":"您的账户还不具备申请资格","result.fail.error.hint-btn2":"立即升级","result.fail.error.btn-text":"返回修改","account.settings.menuMap.custom":"个性化","account.settings.menuMap.binding":"账号绑定","account.settings.basic.avatar":"头像","account.settings.basic.change-avatar":"更换头像","account.settings.basic.email":"邮箱","account.settings.basic.email-message":"请输入您的邮箱!","account.settings.basic.nickname":"昵称","account.settings.basic.nickname-message":"请输入您的昵称!","account.settings.basic.profile":"个人简介","account.settings.basic.profile-message":"请输入个人简介!","account.settings.basic.profile-placeholder":"个人简介","account.settings.basic.country":"国家/地区","account.settings.basic.country-message":"请输入您的国家或地区!","account.settings.basic.geographic":"所在省市","account.settings.basic.geographic-message":"请输入您的所在省市!","account.settings.basic.address":"街道地址","account.settings.basic.address-message":"请输入您的街道地址!","account.settings.basic.phone":"联系电话","account.settings.basic.phone-message":"请输入您的联系电话!","account.settings.basic.update":"更新基本信息","account.settings.basic.update.success":"更新基本信息成功","account.settings.security.strong":"强","account.settings.security.medium":"中","account.settings.security.weak":"弱","account.settings.security.password":"账户密码","account.settings.security.password-description":"当前密码强度:","account.settings.security.phone":"密保手机","account.settings.security.phone-description":"已绑定手机:","account.settings.security.question":"密保问题","account.settings.security.question-description":"未设置密保问题,密保问题可有效保护账户安全","account.settings.security.email":"绑定邮箱","account.settings.security.email-description":"已绑定邮箱:","account.settings.security.mfa":"MFA 设备","account.settings.security.mfa-description":"未绑定 MFA 设备,绑定后,可以进行二次确认","account.settings.security.modify":"修改","account.settings.security.set":"设置","account.settings.security.bind":"绑定","account.settings.binding.taobao":"绑定淘宝","account.settings.binding.taobao-description":"当前未绑定淘宝账号","account.settings.binding.alipay":"绑定支付宝","account.settings.binding.alipay-description":"当前未绑定支付宝账号","account.settings.binding.dingding":"绑定钉钉","account.settings.binding.dingding-description":"当前未绑定钉钉账号","account.settings.binding.bind":"绑定","account.settings.notification.password":"账户密码","account.settings.notification.password-description":"其他用户的消息将以站内信的形式通知","account.settings.notification.messages":"系统消息","account.settings.notification.messages-description":"系统消息将以站内信的形式通知","account.settings.notification.todo":"待办任务","account.settings.notification.todo-description":"待办任务将以站内信的形式通知","account.settings.settings.open":"开","account.settings.settings.close":"关","trading-assistant.title":"交易助手","trading-assistant.strategyList":"策略列表","trading-assistant.createStrategy":"创建策略","trading-assistant.noStrategy":"暂无策略","trading-assistant.selectStrategy":"请从左侧选择一个策略查看详情","trading-assistant.startStrategy":"启动策略","trading-assistant.stopStrategy":"停止策略","trading-assistant.editStrategy":"编辑策略","trading-assistant.deleteStrategy":"删除策略","trading-assistant.startAll":"全部启动","trading-assistant.stopAll":"全部停止","trading-assistant.deleteAll":"全部删除","trading-assistant.symbolCount":"个币种","trading-assistant.strategyCount":"个策略","trading-assistant.groupBy":"分组方式","trading-assistant.groupByStrategy":"按策略","trading-assistant.groupBySymbol":"按标的","trading-assistant.timeframe":"周期","trading-assistant.indicator":"指标","trading-assistant.status.running":"运行中","trading-assistant.status.stopped":"已停止","trading-assistant.status.error":"错误","trading-assistant.strategyType.IndicatorStrategy":"技术指标策略","trading-assistant.strategyType.PromptBasedStrategy":"提示词策略","trading-assistant.strategyType.GridStrategy":"网格策略","trading-assistant.tabs.tradingRecords":"交易记录","trading-assistant.tabs.positions":"持仓记录","trading-assistant.tabs.equityCurve":"净值曲线","trading-assistant.form.step1":"选择指标","trading-assistant.form.step2":"交易所配置","trading-assistant.form.step3":"策略参数","trading-assistant.form.step2Params":"策略参数","trading-assistant.form.step3Signal":"信号通知","trading-assistant.form.simpleMode":"简易模式","trading-assistant.form.advancedMode":"高级模式","trading-assistant.form.simpleModeHint":"快速创建策略,使用推荐默认参数","trading-assistant.form.advancedModeHint":"自定义全部参数,适合专业用户","trading-assistant.form.simpleStep1":"选择指标 & 交易对","trading-assistant.form.simpleStep2":"启动方式","trading-assistant.form.simpleDefaultsHint":"默认参数(可展开修改)","trading-assistant.form.showAdvancedSettings":"展开高级设置","trading-assistant.form.hideAdvancedSettings":"收起高级设置","trading-assistant.form.indicator":"选择指标","trading-assistant.form.indicatorHint":"只能选择您已购买或创建的技术指标","trading-assistant.form.qdtCostHints":"使用策略将消耗QDT,请确保账户有足够的QDT余额","trading-assistant.form.indicatorDescription":"指标描述","trading-assistant.form.noDescription":"暂无描述","trading-assistant.form.indicatorParams":"指标参数","trading-assistant.form.indicatorParamsHint":"这些参数会传递给指标代码,不同策略可以使用不同的参数值","trading-assistant.form.exchange":"选择交易所","trading-assistant.form.apiKey":"API Key","trading-assistant.form.secretKey":"Secret Key","trading-assistant.form.passphrase":"Passphrase","trading-assistant.form.testConnection":"测试连接","trading-assistant.form.strategyName":"策略名称","trading-assistant.form.symbol":"交易对","trading-assistant.form.symbols":"交易对(多选)","trading-assistant.form.symbolHint":"目前仅支持加密货币交易对","trading-assistant.form.symbolHintCrypto":"加密货币:使用BTC/USDT等交易对格式","trading-assistant.form.symbolsHint":"选择多个交易对,将自动创建多个策略","trading-assistant.form.strategyType":"策略类型","trading-assistant.form.strategyTypeSingle":"单标的策略","trading-assistant.form.strategyTypeCrossSectional":"截面策略","trading-assistant.form.strategyTypeHint":"单标的策略:针对单个标的进行交易;截面策略:同时管理多个标的的组合","trading-assistant.form.symbolList":"标的列表","trading-assistant.form.symbolListHint":"选择多个标的,策略将根据指标评分进行排序和调仓","trading-assistant.form.portfolioSize":"持仓组合大小","trading-assistant.form.portfolioSizeHint":"策略同时持有的标的数量","trading-assistant.form.longRatio":"做多比例","trading-assistant.form.longRatioHint":"持仓中做多标的的比例(0-1),例如0.5表示50%做多,50%做空","trading-assistant.form.rebalanceFrequency":"调仓频率","trading-assistant.form.rebalanceDaily":"每日","trading-assistant.form.rebalanceWeekly":"每周","trading-assistant.form.rebalanceMonthly":"每月","trading-assistant.form.rebalanceFrequencyHint":"策略重新调整持仓组合的频率","trading-assistant.form.addSymbol":"添加交易对","trading-assistant.form.addSymbolTitle":"添加交易对到自选列表","trading-assistant.form.searchSymbolPlaceholder":"输入代码搜索,如 BTC、AAPL","trading-assistant.form.noSymbolFound":"未找到匹配的交易对","trading-assistant.form.canDirectAdd":"可以直接输入代码添加","trading-assistant.form.searchSymbolHint":"输入代码搜索交易对","trading-assistant.form.confirmAdd":"确认添加","trading-assistant.form.addSymbolSuccess":"交易对添加成功","trading-assistant.form.addSymbolFailed":"添加失败,请重试","trading-assistant.form.pleaseSelectSymbol":"请选择或输入交易对","trading-assistant.form.initialCapital":"投入金额","trading-assistant.form.marketType":"市场类型","trading-assistant.form.marketTypeFutures":"合约","trading-assistant.form.marketTypeSpot":"现货","trading-assistant.form.marketTypeHint":"合约支持双向交易和杠杆,现货仅支持做多且杠杆固定为1倍","trading-assistant.form.leverage":"杠杆倍数","trading-assistant.form.leverageHint":"合约:1-125倍,现货:固定1倍","trading-assistant.form.spotLeverageFixed":"现货交易杠杆固定为1倍","trading-assistant.form.spotOnlyLongHint":"现货交易仅支持做多","trading-assistant.form.tradeDirection":"交易方向","trading-assistant.form.tradeDirectionLong":"仅做多","trading-assistant.form.tradeDirectionShort":"仅做空","trading-assistant.form.tradeDirectionBoth":"双向交易","trading-assistant.form.timeframe":"时间周期","trading-assistant.form.klinePeriod":"K线周期","trading-assistant.form.timeframe1m":"1分钟","trading-assistant.form.timeframe5m":"5分钟","trading-assistant.form.timeframe15m":"15分钟","trading-assistant.form.timeframe30m":"30分钟","trading-assistant.form.timeframe1H":"1小时","trading-assistant.form.timeframe4H":"4小时","trading-assistant.form.timeframe1D":"1天","trading-assistant.form.selectStrategyType":"选择策略类型","trading-assistant.form.indicatorStrategy":"指标策略","trading-assistant.form.indicatorStrategyDesc":"基于技术指标的自动化交易策略","trading-assistant.form.aiStrategy":"AI策略","trading-assistant.form.aiStrategyDesc":"基于AI智能决策的自动化交易策略","trading-assistant.form.enableAiFilter":"启用AI智能决策过滤","trading-assistant.form.enableAiFilterHint":"启用后,指标信号将经过AI智能过滤,提高交易质量","trading-assistant.form.aiFilterPrompt":"自定义提示词","trading-assistant.form.aiFilterPromptHint":"为AI过滤提供自定义指令,留空则使用系统默认","trading-assistant.form.executionMode":"执行模式","trading-assistant.form.executionModeSignal":"仅信号通知","trading-assistant.form.executionModeLive":"实盘自动交易","trading-assistant.form.liveTradingCryptoOnlyHint":"实盘交易功能仅支持加密货币市场","trading-assistant.form.liveTradingNotSupportedHint":"当前市场不支持实盘交易","trading-assistant.form.broker":"券商","trading-assistant.form.localDeploymentRequired":"⚠️ 需要本地部署运行","trading-assistant.form.localDeploymentHint":"IBKR 和 MT5 属于外挂类实盘接口,需要本地部署运行 QuantDinger,不支持云端 SaaS 模式。请确保您已在本地安装并配置相关交易软件(TWS/IB Gateway 或 MT5 终端)。","trading-assistant.form.ibkrConnectionTitle":"盈透证券连接配置","trading-assistant.form.ibkrConnectionHint":"请确保 TWS 或 IB Gateway 已启动并启用 API 连接","trading-assistant.validation.brokerRequired":"请选择券商","trading-assistant.placeholders.selectBroker":"选择券商","trading-assistant.brokerNames":{ibkr:"盈透证券 (Interactive Brokers)",mt5:"MetaTrader 5 (MT5)",mt4:"MetaTrader 4 (MT4)",futu:"富途证券 (Futu)",tiger:"老虎证券 (Tiger Brokers)",td:"TD Ameritrade",schwab:"Charles Schwab"},"trading-assistant.form.ibkrHost":"主机地址","trading-assistant.form.ibkrPort":"端口","trading-assistant.form.ibkrPortHint":"TWS实盘:7497, TWS模拟:7496, Gateway实盘:4001, Gateway模拟:4002","trading-assistant.form.ibkrClientId":"客户端ID","trading-assistant.form.ibkrAccount":"账户号","trading-assistant.form.ibkrAccountHint":"留空自动选择第一个账户,多账户用户可指定账户号","trading-assistant.placeholders.ibkrAccount":"可选,如 U1234567","trading-assistant.exchange.ibkrConnectionSuccess":"盈透证券连接成功","trading-assistant.exchange.ibkrConnectionFailed":"盈透证券连接失败,请检查 TWS/Gateway 是否运行","trading-assistant.exchange.checkLocalDeployment":"请确认您已在本地部署运行,云端 SaaS 不支持此类外挂实盘","trading-assistant.form.forexBroker":"外汇券商","trading-assistant.form.mt5ConnectionTitle":"MetaTrader 5 连接配置","trading-assistant.form.mt5ConnectionHint":"请确保 MT5 终端已启动并登录(仅支持 Windows)","trading-assistant.form.mt5Server":"服务器","trading-assistant.form.mt5ServerHint":"券商服务器名称(如:ICMarkets-Demo)","trading-assistant.form.mt5Login":"账户号","trading-assistant.form.mt5Password":"密码","trading-assistant.form.mt5TerminalPath":"MT5 终端路径(可选)","trading-assistant.form.mt5TerminalPathHint":"如果 MT5 终端未安装在默认位置,请指定 terminal64.exe 的完整路径(例如:C:\\Program Files\\MetaTrader 5\\terminal64.exe)","trading-assistant.placeholders.mt5Server":"例如:ICMarkets-Demo","trading-assistant.placeholders.mt5Login":"例如:12345678","trading-assistant.placeholders.mt5Password":"您的 MT5 密码","trading-assistant.placeholders.mt5TerminalPath":"例如:C:\\Program Files\\MetaTrader 5\\terminal64.exe","trading-assistant.validation.mt5ServerRequired":"请输入 MT5 服务器","trading-assistant.validation.mt5LoginRequired":"请输入 MT5 账户号","trading-assistant.validation.mt5PasswordRequired":"请输入 MT5 密码","trading-assistant.validation.portfolioSizeRequired":"请输入持仓组合大小","trading-assistant.validation.longRatioRequired":"请输入做多比例","trading-assistant.exchange.mt5ConnectionSuccess":"MT5 连接成功","trading-assistant.exchange.mt5ConnectionFailed":"MT5 连接失败,请检查终端是否运行","trading-assistant.form.notifyChannels":"通知渠道","trading-assistant.form.notifyChannelsHint":"选择信号触发时的通知方式","trading-assistant.form.notifyEmail":"邮箱地址","trading-assistant.form.notifyPhone":"手机号码","trading-assistant.form.notifyTelegram":"Telegram ID","trading-assistant.form.notifyDiscord":"Discord Webhook","trading-assistant.form.notifyWebhook":"Webhook 地址","trading-assistant.form.liveTradingConfigTitle":"实盘交易配置","trading-assistant.form.liveTradingConfigHint":"请填写交易所API信息,实盘交易将使用您的API进行真实交易","trading-assistant.form.savedCredential":"已保存的凭证","trading-assistant.form.savedCredentialHint":"选择已保存的交易所凭证,自动填充API配置","trading-assistant.form.saveCredential":"保存此凭证以便下次使用","trading-assistant.form.credentialName":"凭证名称","trading-assistant.validation.strategyTypeRequired":"请选择策略类型","trading-assistant.form.advancedSettings":"高级设置","trading-assistant.form.orderMode":"下单模式","trading-assistant.form.orderModeMaker":"挂单(Maker)","trading-assistant.form.orderModeTaker":"市价(Taker)","trading-assistant.form.orderModeHint":"挂单模式使用限价单,手续费更低;市价模式立即成交,手续费较高","trading-assistant.form.makerWaitSec":"挂单等待时间(秒)","trading-assistant.form.makerWaitSecHint":"挂单后等待成交的时间,超时后取消并重试","trading-assistant.form.makerRetries":"挂单重试次数","trading-assistant.form.makerRetriesHint":"挂单未成交时的最大重试次数","trading-assistant.form.fallbackToMarket":"挂单失败降级市价","trading-assistant.form.fallbackToMarketHint":"开/平仓挂单未成交时,是否降级为市价单以确保成交","trading-assistant.form.marginMode":"保证金模式","trading-assistant.form.marginModeCross":"全仓","trading-assistant.form.marginModeIsolated":"逐仓","trading-assistant.form.stopLossPct":"止损比例(%)","trading-assistant.form.stopLossPctHint":"设置止损百分比,0表示不启用止损","trading-assistant.form.takeProfitPct":"止盈比例(%)","trading-assistant.form.takeProfitPctHint":"设置止盈百分比,0表示不启用止盈","trading-assistant.form.signalMode":"信号模式","trading-assistant.form.signalModeConfirmed":"确认模式","trading-assistant.form.signalModeAggressive":"激进模式","trading-assistant.form.signalModeHint":"确认模式:仅检查已完成的K线;激进模式:也检查正在形成的K线","trading-assistant.form.cancel":"取消","trading-assistant.form.prev":"上一步","trading-assistant.form.next":"下一步","trading-assistant.form.confirmCreate":"确认创建","trading-assistant.form.confirmEdit":"确认修改","trading-assistant.messages.createSuccess":"策略创建成功","trading-assistant.messages.createFailed":"创建策略失败","trading-assistant.messages.updateSuccess":"策略更新成功","trading-assistant.messages.updateFailed":"更新策略失败","trading-assistant.messages.deleteSuccess":"策略删除成功","trading-assistant.messages.deleteFailed":"删除策略失败","trading-assistant.messages.startSuccess":"策略启动成功","trading-assistant.messages.startFailed":"启动策略失败","trading-assistant.messages.stopSuccess":"策略停止成功","trading-assistant.messages.stopFailed":"停止策略失败","trading-assistant.messages.loadFailed":"获取策略列表失败","trading-assistant.messages.runningWarning":"策略运行中,请先停止策略后再修改","trading-assistant.messages.deleteConfirmWithName":"确定要删除策略“{name}”吗?此操作不可恢复。","trading-assistant.messages.deleteConfirm":"确定要删除该策略吗?此操作不可恢复。","trading-assistant.messages.loadTradesFailed":"获取交易记录失败","trading-assistant.messages.loadPositionsFailed":"获取持仓记录失败","trading-assistant.messages.loadEquityFailed":"获取净值曲线失败","trading-assistant.messages.loadIndicatorsFailed":"加载指标列表失败,请稍后重试","trading-assistant.messages.spotLimitations":"现货交易已自动设置为仅做多、1倍杠杆","trading-assistant.messages.autoFillApiConfig":"已自动填充该交易所的历史API配置","trading-assistant.messages.batchCreateSuccess":"成功创建 {count} 个策略","trading-assistant.messages.batchStartSuccess":"成功启动 {count} 个策略","trading-assistant.messages.batchStartFailed":"批量启动策略失败","trading-assistant.messages.batchStopSuccess":"成功停止 {count} 个策略","trading-assistant.messages.batchStopFailed":"批量停止策略失败","trading-assistant.messages.batchDeleteSuccess":"成功删除 {count} 个策略","trading-assistant.messages.batchDeleteFailed":"批量删除策略失败","trading-assistant.messages.batchDeleteConfirm":'确定要删除策略组"{name}"下的 {count} 个策略吗?此操作不可恢复。',"trading-assistant.notify.browser":"浏览器通知","trading-assistant.notify.email":"邮箱","trading-assistant.notify.phone":"短信","trading-assistant.notify.telegram":"Telegram","trading-assistant.notify.discord":"Discord","trading-assistant.notify.webhook":"Webhook","trading-assistant.placeholders.selectIndicator":"请选择指标","trading-assistant.placeholders.selectExchange":"请选择交易所","trading-assistant.placeholders.inputApiKey":"请输入API Key","trading-assistant.placeholders.inputSecretKey":"请输入Secret Key","trading-assistant.placeholders.inputPassphrase":"请输入Passphrase","trading-assistant.placeholders.inputStrategyName":"请输入策略名称","trading-assistant.placeholders.selectSymbol":"请选择交易对","trading-assistant.placeholders.selectSymbols":"请选择交易对(支持多选)","trading-assistant.placeholders.selectTimeframe":"请选择时间周期","trading-assistant.placeholders.selectKlinePeriod":"请选择K线周期","trading-assistant.placeholders.inputAiFilterPrompt":"请输入自定义提示词(可选)","trading-assistant.placeholders.selectSavedCredential":"请选择已保存的凭证","trading-assistant.placeholders.inputEmail":"请输入邮箱地址","trading-assistant.placeholders.inputPhone":"请输入手机号码","trading-assistant.placeholders.inputTelegram":"请输入Telegram ID或Chat ID","trading-assistant.placeholders.inputDiscord":"请输入Discord Webhook地址","trading-assistant.placeholders.inputWebhook":"请输入Webhook地址","trading-assistant.placeholders.inputCredentialName":"请输入凭证名称(如:我的OKX账户)","trading-assistant.validation.indicatorRequired":"请选择指标","trading-assistant.validation.exchangeRequired":"请选择交易所","trading-assistant.validation.apiKeyRequired":"请输入API Key","trading-assistant.validation.secretKeyRequired":"请输入Secret Key","trading-assistant.validation.passphraseRequired":"请输入Passphrase","trading-assistant.validation.exchangeConfigIncomplete":"请填写完整的交易所配置信息","trading-assistant.validation.testConnectionRequired":'请先点击"测试连接"按钮并确保连接成功',"trading-assistant.validation.testConnectionFailed":"连接测试失败,请检查配置后重新测试","trading-assistant.validation.credentialRequired":"请先在个人中心添加并测试交易所凭证","trading-assistant.validation.strategyNameRequired":"请输入策略名称","trading-assistant.validation.symbolRequired":"请选择交易对","trading-assistant.validation.symbolsRequired":"请至少选择一个交易对","trading-assistant.validation.emailInvalid":"请输入有效的邮箱地址","trading-assistant.validation.notifyChannelRequired":"请至少选择一个通知渠道","trading-assistant.validation.initialCapitalRequired":"请输入投入金额","trading-assistant.validation.leverageRequired":"请输入杠杆倍数","trading-assistant.table.time":"时间","trading-assistant.table.type":"类型","trading-assistant.table.price":"价格","trading-assistant.table.amount":"数量","trading-assistant.table.value":"金额","trading-assistant.table.commission":"手续费","trading-assistant.table.symbol":"交易对","trading-assistant.table.side":"方向","trading-assistant.table.size":"持仓数量","trading-assistant.table.entryPrice":"开仓价格","trading-assistant.table.currentPrice":"当前价格","trading-assistant.table.unrealizedPnl":"未实现盈亏","trading-assistant.table.pnlPercent":"盈亏比例","trading-assistant.table.buy":"买入","trading-assistant.table.sell":"卖出","trading-assistant.table.long":"做多","trading-assistant.table.short":"做空","trading-assistant.table.noPositions":"暂无持仓","trading-assistant.detail.title":"策略详情","trading-assistant.detail.strategyName":"策略名称","trading-assistant.detail.strategyType":"策略类型","trading-assistant.detail.status":"状态","trading-assistant.detail.tradingMode":"交易模式","trading-assistant.detail.exchange":"交易所","trading-assistant.detail.initialCapital":"初始资金","trading-assistant.detail.totalInvestment":"总投入金额","trading-assistant.detail.currentEquity":"当前净值","trading-assistant.detail.totalPnl":"总盈亏","trading-assistant.detail.indicatorName":"指标名称","trading-assistant.detail.maxLeverage":"最大杠杆","trading-assistant.detail.decideInterval":"决策间隔","trading-assistant.detail.symbols":"交易标的","trading-assistant.detail.createdAt":"创建时间","trading-assistant.detail.updatedAt":"更新时间","trading-assistant.detail.llmConfig":"AI模型配置","trading-assistant.detail.exchangeConfig":"交易所配置","trading-assistant.detail.provider":"提供商","trading-assistant.detail.modelId":"模型ID","trading-assistant.detail.close":"关闭","trading-assistant.detail.loadFailed":"获取策略详情失败","trading-assistant.equity.noData":"暂无净值数据","trading-assistant.equity.equity":"净值","trading-assistant.exchange.tradingMode":"交易模式","trading-assistant.exchange.virtual":"模拟交易","trading-assistant.exchange.live":"实盘交易","trading-assistant.exchange.selectExchange":"选择交易所","trading-assistant.exchange.walletAddress":"钱包地址","trading-assistant.exchange.walletAddressPlaceholder":"请输入钱包地址(以0x开头)","trading-assistant.exchange.privateKey":"私钥","trading-assistant.exchange.privateKeyPlaceholder":"请输入私钥(64字符)","trading-assistant.exchange.testConnection":"测试连接","trading-assistant.exchange.connectionSuccess":"连接成功","trading-assistant.exchange.connectionFailed":"连接失败","trading-assistant.exchange.testFailed":"连接测试失败","trading-assistant.exchange.fillComplete":"请填写完整的交易所配置信息","trading-assistant.exchange.ipWhitelistTip":"请在交易所API设置中将以下IP添加到白名单:","trading-assistant.strategyTypeOptions.ai":"AI驱动策略","trading-assistant.strategyTypeOptions.indicator":"技术指标策略","trading-assistant.strategyTypeOptions.aiDeveloping":"AI驱动策略功能开发中,敬请期待","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"AI驱动策略功能正在开发中","trading-assistant.indicatorType.trend":"趋势","trading-assistant.indicatorType.momentum":"动量","trading-assistant.indicatorType.volatility":"波动","trading-assistant.indicatorType.volume":"成交量","trading-assistant.indicatorType.custom":"自定义","trading-assistant.exchangeNames":{okx:"OKX",binance:"币安",hyperliquid:"Hyperliquid",blockchaincom:"Blockchain.com",coinbaseexchange:"Coinbase",gate:"Gate.io",mexc:"MEXC",kraken:"Kraken",bitfinex:"Bitfinex",bybit:"Bybit",kucoin:"KuCoin",huobi:"火币",bitget:"Bitget",bitmex:"BitMEX",deribit:"Deribit",phemex:"Phemex",bitmart:"BitMart",bitstamp:"Bitstamp",bittrex:"Bittrex",poloniex:"Poloniex",gemini:"Gemini",cryptocom:"Crypto.com",bitflyer:"bitFlyer",upbit:"Upbit",bithumb:"Bithumb",coinone:"Coinone",zb:"ZB",lbank:"LBank",bibox:"Bibox",bigone:"BigONE",bitrue:"Bitrue",coinex:"CoinEx",digifinex:"DigiFinex",ftx:"FTX",ftxus:"FTX US",binanceus:"Binance US",binancecoinm:"Binance COIN-M",binanceusdm:"Binance USDⓈ-M",ibkr:"盈透证券 (IBKR)",deepcoin:"Deepcoin"},"ai-trading-assistant.title":"AI交易助手","ai-trading-assistant.strategyList":"策略列表","ai-trading-assistant.createStrategy":"创建策略","ai-trading-assistant.noStrategy":"暂无策略","ai-trading-assistant.selectStrategy":"请从左侧选择一个策略查看详情","ai-trading-assistant.startStrategy":"启动策略","ai-trading-assistant.stopStrategy":"停止策略","ai-trading-assistant.editStrategy":"编辑策略","ai-trading-assistant.deleteStrategy":"删除策略","ai-trading-assistant.status.running":"运行中","ai-trading-assistant.status.stopped":"已停止","ai-trading-assistant.status.error":"错误","ai-trading-assistant.tabs.tradingRecords":"交易记录","ai-trading-assistant.tabs.positions":"持仓记录","ai-trading-assistant.tabs.aiDecisions":"AI决策记录","ai-trading-assistant.tabs.equityCurve":"净值曲线","ai-trading-assistant.form.createTitle":"创建AI交易策略","ai-trading-assistant.form.editTitle":"编辑AI交易策略","ai-trading-assistant.form.strategyName":"策略名称","ai-trading-assistant.form.modelId":"AI模型","ai-trading-assistant.form.modelIdHint":"使用系统OpenRouter服务,无需配置API Key","ai-trading-assistant.form.decideInterval":"决策间隔","ai-trading-assistant.form.decideInterval5m":"5分钟","ai-trading-assistant.form.decideInterval10m":"10分钟","ai-trading-assistant.form.decideInterval30m":"30分钟","ai-trading-assistant.form.decideInterval1h":"1小时","ai-trading-assistant.form.decideInterval4h":"4小时","ai-trading-assistant.form.decideInterval1d":"1天","ai-trading-assistant.form.decideInterval1w":"1周","ai-trading-assistant.form.decideIntervalHint":"AI做决策的时间间隔","ai-trading-assistant.form.runPeriod":"运行周期","ai-trading-assistant.form.runPeriodHint":"策略运行的开始时间和结束时间","ai-trading-assistant.form.startDate":"开始日期","ai-trading-assistant.form.endDate":"结束日期","ai-trading-assistant.form.qdtCostTitle":"QDT扣费说明","ai-trading-assistant.form.qdtCostHint":"每次AI决策将扣费 {cost} 个QDT,请确保账户有足够的QDT余额。策略运行期间,每次决策都会实时扣费。","ai-trading-assistant.form.apiKey":"API Key","ai-trading-assistant.form.exchange":"选择交易所","ai-trading-assistant.form.secretKey":"Secret Key","ai-trading-assistant.form.passphrase":"Passphrase","ai-trading-assistant.form.testConnection":"测试连接","ai-trading-assistant.form.symbol":"交易对","ai-trading-assistant.form.symbolHint":"选择要交易的交易对","ai-trading-assistant.form.initialCapital":"投入金额(保证金)","ai-trading-assistant.form.leverage":"杠杆倍数","ai-trading-assistant.form.timeframe":"时间周期","ai-trading-assistant.form.timeframe1m":"1分钟","ai-trading-assistant.form.timeframe5m":"5分钟","ai-trading-assistant.form.timeframe15m":"15分钟","ai-trading-assistant.form.timeframe30m":"30分钟","ai-trading-assistant.form.timeframe1H":"1小时","ai-trading-assistant.form.timeframe4H":"4小时","ai-trading-assistant.form.timeframe1D":"1天","ai-trading-assistant.form.marketType":"市场类型","ai-trading-assistant.form.marketTypeFutures":"合约","ai-trading-assistant.form.marketTypeSpot":"现货","ai-trading-assistant.form.totalPnl":"总盈亏","ai-trading-assistant.form.customPrompt":"自定义提示词","ai-trading-assistant.form.customPromptHint":"可选,用于自定义AI的交易策略和决策逻辑","ai-trading-assistant.form.cancel":"取消","ai-trading-assistant.form.prev":"上一步","ai-trading-assistant.form.next":"下一步","ai-trading-assistant.form.confirmCreate":"确认创建","ai-trading-assistant.form.confirmEdit":"确认修改","ai-trading-assistant.messages.createSuccess":"策略创建成功","ai-trading-assistant.messages.createFailed":"创建策略失败","ai-trading-assistant.messages.updateSuccess":"策略更新成功","ai-trading-assistant.messages.updateFailed":"更新策略失败","ai-trading-assistant.messages.deleteSuccess":"策略删除成功","ai-trading-assistant.messages.deleteFailed":"删除策略失败","ai-trading-assistant.messages.startSuccess":"策略启动成功","ai-trading-assistant.messages.startFailed":"启动策略失败","ai-trading-assistant.messages.stopSuccess":"策略停止成功","ai-trading-assistant.messages.stopFailed":"停止策略失败","ai-trading-assistant.messages.loadFailed":"获取策略列表失败","ai-trading-assistant.messages.loadDecisionsFailed":"获取AI决策记录失败","ai-trading-assistant.messages.deleteConfirm":"确定要删除该策略吗?此操作不可恢复。","ai-trading-assistant.placeholders.inputStrategyName":"请输入策略名称","ai-trading-assistant.placeholders.selectModelId":"请选择AI模型","ai-trading-assistant.placeholders.selectDecideInterval":"请选择决策间隔","ai-trading-assistant.placeholders.startTime":"开始时间","ai-trading-assistant.placeholders.endTime":"结束时间","ai-trading-assistant.placeholders.inputApiKey":"请输入API Key","ai-trading-assistant.placeholders.selectExchange":"请选择交易所","ai-trading-assistant.placeholders.inputSecretKey":"请输入Secret Key","ai-trading-assistant.placeholders.inputPassphrase":"请输入Passphrase","ai-trading-assistant.placeholders.selectSymbol":"请选择交易对,如:BTC/USDT","ai-trading-assistant.placeholders.selectTimeframe":"请选择时间周期","ai-trading-assistant.placeholders.inputCustomPrompt":"请输入自定义提示词(可选)","ai-trading-assistant.validation.strategyNameRequired":"请输入策略名称","ai-trading-assistant.validation.modelIdRequired":"请选择AI模型","ai-trading-assistant.validation.runPeriodRequired":"请选择运行周期","ai-trading-assistant.validation.apiKeyRequired":"请输入API Key","ai-trading-assistant.validation.exchangeRequired":"请选择交易所","ai-trading-assistant.validation.secretKeyRequired":"请输入Secret Key","ai-trading-assistant.validation.symbolRequired":"请选择交易对","ai-trading-assistant.validation.initialCapitalRequired":"请输入投入金额","ai-trading-assistant.table.time":"时间","ai-trading-assistant.table.type":"类型","ai-trading-assistant.table.price":"价格","ai-trading-assistant.table.amount":"数量","ai-trading-assistant.table.value":"金额","ai-trading-assistant.table.symbol":"交易对","ai-trading-assistant.table.side":"方向","ai-trading-assistant.table.size":"持仓数量","ai-trading-assistant.table.entryPrice":"开仓价格","ai-trading-assistant.table.currentPrice":"当前价格","ai-trading-assistant.table.unrealizedPnl":"未实现盈亏","ai-trading-assistant.table.profit":"盈亏","ai-trading-assistant.table.openLong":"开多","ai-trading-assistant.table.closeLong":"平多","ai-trading-assistant.table.openShort":"开空","ai-trading-assistant.table.closeShort":"平空","ai-trading-assistant.table.addLong":"加多","ai-trading-assistant.table.addShort":"加空","ai-trading-assistant.table.closeShortProfit":"平空止盈","ai-trading-assistant.table.closeShortStop":"平空止损","ai-trading-assistant.table.closeLongProfit":"平多止盈","ai-trading-assistant.table.closeLongStop":"平多止损","ai-trading-assistant.table.buy":"买入","ai-trading-assistant.table.sell":"卖出","ai-trading-assistant.table.long":"做多","ai-trading-assistant.table.short":"做空","ai-trading-assistant.table.hold":"持有","ai-trading-assistant.table.reasoning":"分析理由","ai-trading-assistant.table.decisions":"决策","ai-trading-assistant.table.riskAssessment":"风险评估","ai-trading-assistant.table.confidence":"置信度","ai-trading-assistant.table.totalRecords":"共 {total} 条记录","ai-trading-assistant.table.noPositions":"暂无持仓","ai-trading-assistant.detail.title":"策略详情","ai-trading-assistant.equity.noData":"暂无净值数据","ai-trading-assistant.equity.equity":"净值","ai-trading-assistant.exchange.testFailed":"连接测试失败","ai-trading-assistant.exchange.connectionSuccess":"连接成功","ai-trading-assistant.exchange.connectionFailed":"连接失败","ai-trading-assistant.form.advancedSettings":"高级设置","ai-trading-assistant.form.orderMode":"下单模式","ai-trading-assistant.form.orderModeMaker":"挂单(Maker)","ai-trading-assistant.form.orderModeTaker":"市价(Taker)","ai-trading-assistant.form.orderModeHint":"挂单模式使用限价单,手续费更低;市价模式立即成交,手续费较高","ai-trading-assistant.form.makerWaitSec":"挂单等待时间(秒)","ai-trading-assistant.form.makerWaitSecHint":"挂单后等待成交的时间,超时后取消并重试","ai-trading-assistant.form.makerRetries":"挂单重试次数","ai-trading-assistant.form.makerRetriesHint":"挂单未成交时的最大重试次数","ai-trading-assistant.form.fallbackToMarket":"挂单失败降级市价","ai-trading-assistant.form.fallbackToMarketHint":"开/平仓挂单未成交时,是否降级为市价单以确保成交","ai-trading-assistant.form.marginMode":"保证金模式","ai-trading-assistant.form.marginModeCross":"全仓","ai-trading-assistant.form.marginModeIsolated":"逐仓","ai-analysis.title":"量子交易引擎","ai-analysis.system.online":"在线","ai-analysis.system.agents":"智能体","ai-analysis.system.active":"活跃","ai-analysis.system.stage":"阶段","ai-analysis.panel.roster":"智能体阵容","ai-analysis.panel.thinking":"思考中...","ai-analysis.panel.done":"完成","ai-analysis.panel.standby":"待机","ai-analysis.input.title":"量子交易引擎","ai-analysis.input.placeholder":"选择目标资产 (如 BTC/USDT)","ai-analysis.input.watchlist":"自选股","ai-analysis.input.start":"开始分析","ai-analysis.input.recent":"最近任务:","ai-analysis.vis.stage":"阶段","ai-analysis.vis.processing":"处理中","ai-analysis.result.complete":"分析完成","ai-analysis.result.signal":"最终信号","ai-analysis.result.confidence":"置信度:","ai-analysis.result.new":"新分析","ai-analysis.result.full":"查看完整报告","ai-analysis.logs.title":"系统日志","ai-analysis.modal.title":"机密报告","ai-analysis.modal.fundamental":"基本面分析","ai-analysis.modal.technical":"技术面分析","ai-analysis.modal.sentiment":"情绪面分析","ai-analysis.modal.risk":"风险评估","ai-analysis.stage.idle":"待机","ai-analysis.stage.1":"第一阶段:多维分析","ai-analysis.stage.2":"第二阶段:多空辩论","ai-analysis.stage.3":"第三阶段:战略规划","ai-analysis.stage.4":"第四阶段:风控审查","ai-analysis.stage.complete":"完成","ai-analysis.agent.investment_director":"投资总监","ai-analysis.agent.role.investment_director":"综合分析 & 最终结论","ai-analysis.agent.market":"市场分析师","ai-analysis.agent.role.market":"技术 & 市场数据","ai-analysis.agent.fundamental":"基本面分析师","ai-analysis.agent.role.fundamental":"财务 & 估值","ai-analysis.agent.technical":"技术分析师","ai-analysis.agent.role.technical":"技术指标 & 图表","ai-analysis.agent.news":"新闻分析师","ai-analysis.agent.role.news":"全球新闻过滤","ai-analysis.agent.sentiment":"情绪分析师","ai-analysis.agent.role.sentiment":"社交 & 情绪","ai-analysis.agent.risk":"风险分析师","ai-analysis.agent.role.risk":"基础风险检查","ai-analysis.agent.bull":"看涨研究员","ai-analysis.agent.role.bull":"增长催化剂挖掘","ai-analysis.agent.bear":"看跌研究员","ai-analysis.agent.role.bear":"风险 & 缺陷挖掘","ai-analysis.agent.manager":"研究经理","ai-analysis.agent.role.manager":"辩论主持人","ai-analysis.agent.trader":"交易员","ai-analysis.agent.role.trader":"执行策略师","ai-analysis.agent.risky":"激进分析师","ai-analysis.agent.role.risky":"激进策略","ai-analysis.agent.neutral":"平衡分析师","ai-analysis.agent.role.neutral":"平衡策略","ai-analysis.agent.safe":"保守分析师","ai-analysis.agent.role.safe":"保守策略","ai-analysis.agent.cro":"风控经理 (CRO)","ai-analysis.agent.role.cro":"最终决策权威","ai-analysis.script.market":"正在从主要交易所获取 OHLCV 数据...","ai-analysis.script.fundamental":"正在检索季度财务报告...","ai-analysis.script.technical":"正在分析技术指标和图表形态...","ai-analysis.script.news":"正在扫描全球财经新闻...","ai-analysis.script.sentiment":"正在分析社交媒体趋势...","ai-analysis.script.risk":"正在计算历史波动率...","invite.inviteLink":"邀请链接","invite.copy":"复制链接","invite.copySuccess":"复制成功!","invite.copyFailed":"复制失败,请手动复制","invite.noInviteLink":"邀请链接未生成","invite.totalInvites":"累计邀请","invite.totalReward":"累计奖励","invite.rules":"邀请规则","invite.rule1":"每成功邀请一位好友注册,您将获得奖励","invite.rule2":"被邀请的好友完成首次交易,您将获得额外奖励","invite.rule3":"邀请奖励将直接发放到您的账户","invite.inviteList":"邀请列表","invite.tasks":"任务中心","invite.inviteeName":"被邀请人","invite.inviteTime":"邀请时间","invite.status":"状态","invite.reward":"奖励","invite.active":"活跃","invite.inactive":"未激活","invite.completed":"已完成","invite.claimed":"已领取","invite.pending":"待完成","invite.goToTask":"去完成","invite.claimReward":"领取奖励","invite.verify":"验证完成","invite.verifySuccess":"验证成功!任务已完成","invite.verifyNotCompleted":"任务尚未完成,请先完成任务","invite.verifyFailed":"验证失败,请稍后重试","invite.claimSuccess":"成功领取 {reward} QDT!","invite.claimFailed":"领取失败,请稍后重试","invite.totalRecords":"共 {total} 条记录","invite.task.twitter.title":"转发推文到 X (Twitter)","invite.task.twitter.desc":"分享我们的官方推文到您的 X (Twitter) 账号","invite.task.youtube.title":"关注我们的 YouTube 频道","invite.task.youtube.desc":"订阅并关注我们的 YouTube 官方频道","invite.task.telegram.title":"加入 Telegram 群组","invite.task.telegram.desc":"加入我们的官方 Telegram 社区群组","invite.task.discord.title":"加入 Discord 服务器","invite.task.discord.desc":"加入我们的 Discord 社区服务器",message:"-","layouts.usermenu.dialog.title":"信息","layouts.usermenu.dialog.content":"您确定要注销吗?","layouts.userLayout.title":"于不确定中,寻见真理","settings.title":"系统设置","settings.description":"配置应用设置、API密钥和系统偏好","settings.save":"保存设置","settings.reset":"重置","settings.saveSuccess":"设置保存成功","settings.saveFailed":"保存设置失败","settings.loadFailed":"加载配置失败","settings.openrouterBalance":"OpenRouter 账户余额","settings.queryBalance":"查询余额","settings.balanceUsage":"已使用","settings.balanceRemaining":"剩余额度","settings.balanceLimit":"总限额","settings.balanceQuerySuccess":"余额查询成功","settings.balanceQueryFailed":"余额查询失败","settings.balanceNotQueried":'点击"查询余额"获取账户信息',"settings.default":"默认","settings.pleaseSelect":"请选择","settings.inputApiKey":"请输入密钥","settings.getApi":"获取API","settings.link.getApi":"获取API","settings.link.getApiKey":"获取API Key","settings.link.getToken":"获取Token","settings.link.createBot":"创建Bot","settings.link.viewModels":"查看模型列表","settings.link.freeRegister":"免费注册","settings.link.supportedExchanges":"支持的交易所","settings.link.applyApi":"申请API","settings.link.createSearchEngine":"创建搜索引擎","settings.link.getTurnstileKey":"获取Turnstile密钥","settings.link.getGoogleCredentials":"获取Google凭据","settings.link.getGithubCredentials":"获取GitHub凭据","settings.restartRequired":"配置已保存,部分配置需要重启Python服务才能生效","settings.copyRestartCmd":"复制重启命令","settings.copySuccess":"复制成功","settings.copyFailed":"复制失败","settings.group.server":"服务配置","settings.group.auth":"安全认证","settings.group.ai":"AI/LLM配置","settings.group.trading":"实盘交易","settings.group.strategy":"策略执行","settings.group.data_source":"数据源","settings.group.notification":"通知推送","settings.group.email":"邮件配置","settings.group.sms":"短信配置","settings.group.agent":"AI Agent","settings.group.network":"网络代理","settings.group.search":"搜索配置","settings.group.security":"注册与安全","settings.group.app":"应用配置","settings.field.SECRET_KEY":"Secret Key","settings.field.ADMIN_USER":"管理员用户名","settings.field.ADMIN_PASSWORD":"管理员密码","settings.field.ADMIN_EMAIL":"管理员邮箱","settings.field.ENABLE_REGISTRATION":"允许注册","settings.field.TURNSTILE_SITE_KEY":"Turnstile Site Key","settings.field.TURNSTILE_SECRET_KEY":"Turnstile Secret Key","settings.field.FRONTEND_URL":"前端URL","settings.field.GOOGLE_CLIENT_ID":"Google Client ID","settings.field.GOOGLE_CLIENT_SECRET":"Google Client Secret","settings.field.GOOGLE_REDIRECT_URI":"Google回调URL","settings.field.GITHUB_CLIENT_ID":"GitHub Client ID","settings.field.GITHUB_CLIENT_SECRET":"GitHub Client Secret","settings.field.GITHUB_REDIRECT_URI":"GitHub回调URL","settings.field.SECURITY_IP_MAX_ATTEMPTS":"IP最大失败次数","settings.field.SECURITY_IP_WINDOW_MINUTES":"IP统计窗口(分钟)","settings.field.SECURITY_IP_BLOCK_MINUTES":"IP封禁时长(分钟)","settings.field.SECURITY_ACCOUNT_MAX_ATTEMPTS":"账户最大失败次数","settings.field.SECURITY_ACCOUNT_WINDOW_MINUTES":"账户统计窗口(分钟)","settings.field.SECURITY_ACCOUNT_BLOCK_MINUTES":"账户锁定时长(分钟)","settings.field.VERIFICATION_CODE_EXPIRE_MINUTES":"验证码有效期(分钟)","settings.field.VERIFICATION_CODE_RATE_LIMIT":"验证码发送间隔(秒)","settings.field.VERIFICATION_CODE_IP_HOURLY_LIMIT":"IP每小时验证码上限","settings.field.VERIFICATION_CODE_MAX_ATTEMPTS":"验证码最大尝试次数","settings.field.VERIFICATION_CODE_LOCK_MINUTES":"验证码锁定时长(分钟)","settings.field.PYTHON_API_HOST":"监听地址","settings.field.PYTHON_API_PORT":"端口","settings.field.PYTHON_API_DEBUG":"调试模式","settings.field.ENABLE_PENDING_ORDER_WORKER":"启用订单处理Worker","settings.field.PENDING_ORDER_STALE_SEC":"订单超时时间(秒)","settings.field.ORDER_MODE":"下单模式","settings.field.MAKER_WAIT_SEC":"限价单等待时间(秒)","settings.field.MAKER_OFFSET_BPS":"限价单价格偏移(基点)","settings.field.SIGNAL_WEBHOOK_URL":"Webhook URL","settings.field.SIGNAL_WEBHOOK_TOKEN":"Webhook Token","settings.field.SIGNAL_NOTIFY_TIMEOUT_SEC":"通知超时(秒)","settings.field.TELEGRAM_BOT_TOKEN":"Telegram Bot Token","settings.field.SMTP_HOST":"SMTP服务器","settings.field.SMTP_PORT":"SMTP端口","settings.field.SMTP_USER":"SMTP用户名","settings.field.SMTP_PASSWORD":"SMTP密码","settings.field.SMTP_FROM":"发件人地址","settings.field.SMTP_USE_TLS":"使用TLS","settings.field.SMTP_USE_SSL":"使用SSL","settings.field.TWILIO_ACCOUNT_SID":"Account SID","settings.field.TWILIO_AUTH_TOKEN":"Auth Token","settings.field.TWILIO_FROM_NUMBER":"发送号码","settings.field.DISABLE_RESTORE_RUNNING_STRATEGIES":"禁用自动恢复策略","settings.field.STRATEGY_TICK_INTERVAL_SEC":"策略Tick间隔(秒)","settings.field.PRICE_CACHE_TTL_SEC":"价格缓存TTL(秒)","settings.field.PROXY_URL":"完整代理URL","settings.field.RATE_LIMIT":"速率限制(每分钟)","settings.field.ENABLE_CACHE":"启用缓存","settings.field.ENABLE_REQUEST_LOG":"启用请求日志","settings.field.ENABLE_AGENT_MEMORY":"启用Agent记忆","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"启用向量检索(本地)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"Embedding维度","settings.field.AGENT_MEMORY_TOP_K":"召回数量TopK","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"候选窗口大小","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"时间衰减半衰期(天)","settings.field.AGENT_MEMORY_W_SIM":"相似度权重","settings.field.AGENT_MEMORY_W_RECENCY":"时间权重","settings.field.AGENT_MEMORY_W_RETURNS":"收益权重","settings.field.ENABLE_REFLECTION_WORKER":"启用自动验证","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"验证周期间隔(秒)","settings.field.OPENROUTER_API_KEY":"OpenRouter API Key","settings.field.OPENROUTER_API_URL":"OpenRouter API URL","settings.field.OPENROUTER_MODEL":"默认模型","settings.field.OPENROUTER_TEMPERATURE":"Temperature","settings.field.OPENROUTER_MAX_TOKENS":"Max Tokens","settings.field.OPENROUTER_TIMEOUT":"超时时间(秒)","settings.field.OPENROUTER_CONNECT_TIMEOUT":"连接超时(秒)","settings.field.MARKET_TYPES_JSON":"市场类型(JSON)","settings.field.TRADING_SUPPORTED_SYMBOLS_JSON":"支持的交易对(JSON)","settings.field.DATA_SOURCE_TIMEOUT":"数据源超时(秒)","settings.field.DATA_SOURCE_RETRY":"重试次数","settings.field.DATA_SOURCE_RETRY_BACKOFF":"重试退避(秒)","settings.field.FINNHUB_API_KEY":"Finnhub API Key","settings.field.FINNHUB_TIMEOUT":"Finnhub超时(秒)","settings.field.FINNHUB_RATE_LIMIT":"Finnhub速率限制","settings.field.CCXT_DEFAULT_EXCHANGE":"CCXT默认交易所","settings.field.CCXT_TIMEOUT":"CCXT超时(ms)","settings.field.CCXT_PROXY":"CCXT代理","settings.field.AKSHARE_TIMEOUT":"Akshare超时(秒)","settings.field.YFINANCE_TIMEOUT":"YFinance超时(秒)","settings.field.TIINGO_API_KEY":"Tiingo API Key","settings.field.TIINGO_TIMEOUT":"Tiingo超时(秒)","settings.field.SEARCH_PROVIDER":"搜索提供商","settings.field.SEARCH_MAX_RESULTS":"最大结果数","settings.field.TAVILY_API_KEYS":"Tavily API Keys","settings.field.SERPAPI_KEYS":"SerpAPI Keys","settings.field.SEARCH_GOOGLE_API_KEY":"Google API Key","settings.field.SEARCH_GOOGLE_CX":"Google CX","settings.field.SEARCH_BING_API_KEY":"Bing API Key","settings.field.INTERNAL_API_KEY":"内部API Key","settings.desc.PYTHON_API_HOST":"服务监听地址。0.0.0.0 允许外部访问,127.0.0.1 仅本地访问","settings.desc.PYTHON_API_PORT":"服务监听端口,默认5000","settings.desc.PYTHON_API_DEBUG":"启用调试模式,开发时使用。生产环境请关闭","settings.desc.SECRET_KEY":"JWT签名密钥。生产环境必须修改以确保安全","settings.desc.ADMIN_USER":"管理员登录用户名","settings.desc.ADMIN_PASSWORD":"管理员登录密码。生产环境必须修改","settings.desc.OPENROUTER_API_KEY":"OpenRouter API密钥,用于访问多种AI模型","settings.desc.OPENROUTER_API_URL":"OpenRouter API端点地址","settings.desc.OPENROUTER_MODEL":"默认使用的AI模型,如 openai/gpt-4o, anthropic/claude-3.5-sonnet","settings.desc.OPENROUTER_TEMPERATURE":"模型创造性(0-1)。越低越确定性,越高越有创意","settings.desc.OPENROUTER_MAX_TOKENS":"每次请求最大输出token数","settings.desc.OPENROUTER_TIMEOUT":"API请求超时时间(秒)","settings.desc.OPENROUTER_CONNECT_TIMEOUT":"连接建立超时时间(秒)","settings.desc.ENABLE_PENDING_ORDER_WORKER":"启用后台订单处理Worker,实盘交易必需","settings.desc.PENDING_ORDER_STALE_SEC":"等待订单超时时间,超时后标记为过期","settings.desc.ORDER_MODE":"maker: 限价单优先(手续费低),market: 市价单(立即成交)","settings.desc.MAKER_WAIT_SEC":"限价单等待成交时间,超时后自动切换为市价单","settings.desc.MAKER_OFFSET_BPS":"限价单价格偏移(基点)。买入价=市价*(1-偏移),卖出价=市价*(1+偏移)","settings.desc.DISABLE_RESTORE_RUNNING_STRATEGIES":"禁止服务重启时自动恢复运行中的策略","settings.desc.STRATEGY_TICK_INTERVAL_SEC":"策略主循环检查间隔(秒)","settings.desc.PRICE_CACHE_TTL_SEC":"价格数据缓存有效期(秒)","settings.desc.MARKET_TYPES_JSON":"自定义市场类型配置,JSON格式","settings.desc.TRADING_SUPPORTED_SYMBOLS_JSON":"支持的交易对列表,JSON格式","settings.desc.DATA_SOURCE_TIMEOUT":"数据源请求默认超时时间","settings.desc.DATA_SOURCE_RETRY":"数据源请求失败时的重试次数","settings.desc.DATA_SOURCE_RETRY_BACKOFF":"重试间隔时间(秒)","settings.desc.CCXT_DEFAULT_EXCHANGE":"CCXT默认交易所(binance, coinbase, okx等)","settings.desc.CCXT_TIMEOUT":"CCXT请求超时时间(毫秒)","settings.desc.CCXT_PROXY":"CCXT请求代理地址(如 socks5h://127.0.0.1:1080)","settings.desc.FINNHUB_API_KEY":"Finnhub API密钥,用于美股数据(有免费额度)","settings.desc.FINNHUB_TIMEOUT":"Finnhub API请求超时时间","settings.desc.FINNHUB_RATE_LIMIT":"Finnhub API速率限制(每分钟请求数)","settings.desc.TIINGO_API_KEY":"Tiingo API密钥,用于外汇/贵金属数据(免费版不支持1分钟数据)","settings.desc.TIINGO_TIMEOUT":"Tiingo API请求超时时间","settings.desc.AKSHARE_TIMEOUT":"Akshare API超时时间,用于A股数据","settings.desc.YFINANCE_TIMEOUT":"Yahoo Finance API超时时间","settings.desc.SIGNAL_WEBHOOK_URL":"信号通知Webhook地址(POST JSON)","settings.desc.SIGNAL_WEBHOOK_TOKEN":"Webhook认证令牌,通过请求头发送","settings.desc.SIGNAL_NOTIFY_TIMEOUT_SEC":"通知请求超时时间","settings.desc.TELEGRAM_BOT_TOKEN":"Telegram机器人Token,从@BotFather获取","settings.desc.SMTP_HOST":"SMTP邮件服务器地址(如 smtp.gmail.com)","settings.desc.SMTP_PORT":"SMTP端口(TLS用587,SSL用465,明文用25)","settings.desc.SMTP_USER":"SMTP认证用户名(通常是邮箱地址)","settings.desc.SMTP_PASSWORD":"SMTP认证密码或应用专用密码","settings.desc.SMTP_FROM":"邮件发件人地址","settings.desc.SMTP_USE_TLS":"启用STARTTLS加密(推荐端口587)","settings.desc.SMTP_USE_SSL":"启用SSL加密(端口465)","settings.desc.TWILIO_ACCOUNT_SID":"Twilio账户SID,从控制台获取","settings.desc.TWILIO_AUTH_TOKEN":"Twilio认证Token,从控制台获取","settings.desc.TWILIO_FROM_NUMBER":"Twilio发送短信的号码(如 +1234567890)","settings.desc.ENABLE_AGENT_MEMORY":"启用AI Agent记忆功能,用于学习历史交易","settings.desc.AGENT_MEMORY_ENABLE_VECTOR":"启用本地向量相似度搜索进行记忆检索","settings.desc.AGENT_MEMORY_EMBEDDING_DIM":"记忆向量嵌入维度","settings.desc.AGENT_MEMORY_TOP_K":"检索时返回的相似记忆数量","settings.desc.AGENT_MEMORY_CANDIDATE_LIMIT":"相似度搜索的候选记忆上限","settings.desc.AGENT_MEMORY_HALF_LIFE_DAYS":"记忆时间衰减的半衰期(天)","settings.desc.AGENT_MEMORY_W_SIM":"记忆排序中相似度分数的权重(0-1)","settings.desc.AGENT_MEMORY_W_RECENCY":"记忆排序中时间新近度的权重(0-1)","settings.desc.AGENT_MEMORY_W_RETURNS":"记忆排序中收益表现的权重(0-1)","settings.desc.ENABLE_REFLECTION_WORKER":"启用后台自动交易反思Worker","settings.desc.REFLECTION_WORKER_INTERVAL_SEC":"自动反思运行间隔(默认24小时)","settings.desc.PROXY_URL":"完整代理URL(设置后覆盖上面的配置)","settings.desc.SEARCH_PROVIDER":"网页搜索提供商,用于AI研究功能。博查(Bocha)推荐用于A股新闻","settings.desc.SEARCH_MAX_RESULTS":"搜索返回的最大结果数","settings.desc.TAVILY_API_KEYS":"Tavily搜索API密钥,多个用逗号分隔可轮换。免费1000次/月","settings.desc.SERPAPI_KEYS":"SerpAPI密钥,用于Google/Bing搜索,多个用逗号分隔可轮换","settings.desc.SEARCH_GOOGLE_API_KEY":"Google自定义搜索API密钥","settings.desc.SEARCH_GOOGLE_CX":"Google可编程搜索引擎ID (CX)","settings.desc.SEARCH_BING_API_KEY":"Microsoft Bing网页搜索API密钥","settings.desc.INTERNAL_API_KEY":"内部API认证密钥,用于服务间调用","settings.desc.RATE_LIMIT":"每IP每分钟的API请求限制","settings.desc.ENABLE_CACHE":"启用响应缓存以提高性能","settings.desc.ENABLE_REQUEST_LOG":"记录所有API请求日志,用于调试","portfolio.summary.totalValue":"总市值","portfolio.summary.totalCost":"总成本","portfolio.summary.totalPnl":"总盈亏","portfolio.summary.positionCount":"持仓数量","portfolio.summary.profitLossRatio":"盈利/亏损","portfolio.summary.today":"今日","portfolio.summary.todayPnl":"今日盈亏","portfolio.summary.bestPerformer":"最佳表现","portfolio.summary.worstPerformer":"最差表现","portfolio.summary.priceSync":"价格同步","portfolio.summary.syncInterval":"刷新间隔","portfolio.summary.justNow":"刚刚","portfolio.summary.ago":"前","portfolio.positions.title":"我的持仓","portfolio.positions.add":"添加持仓","portfolio.positions.addFirst":"添加第一笔持仓","portfolio.positions.empty":"暂无持仓记录","portfolio.positions.deleteConfirm":"确定删除这笔持仓吗?","portfolio.positions.currentPrice":"现价","portfolio.positions.entryPrice":"买入价","portfolio.positions.quantity":"数量","portfolio.positions.side":"方向","portfolio.positions.long":"做多","portfolio.positions.short":"做空","portfolio.positions.marketValue":"市值","portfolio.positions.pnl":"盈亏","portfolio.positions.items":"个持仓","portfolio.monitors.title":"AI 监控","portfolio.monitors.add":"添加监控","portfolio.monitors.addFirst":"添加 AI 监控","portfolio.monitors.empty":"暂无监控任务","portfolio.monitors.deleteConfirm":"确定删除这个监控任务吗?","portfolio.monitors.interval":"执行间隔","portfolio.monitors.lastRun":"上次执行","portfolio.monitors.nextRun":"下次执行","portfolio.monitors.channels":"通知渠道","portfolio.monitors.runNow":"立即执行","portfolio.monitors.analysisResult":"AI 分析结果","portfolio.monitors.runningTitle":"AI 分析已启动","portfolio.monitors.runningDesc":"分析正在后台运行,完成后会通过通知推送结果。分析多个持仓可能需要几分钟时间。","portfolio.monitors.timeoutTitle":"请求超时","portfolio.monitors.timeoutDesc":"分析可能正在后台运行中,请稍后查看通知获取结果。如果长时间没有收到通知,请重试。","portfolio.modal.addPosition":"添加持仓","portfolio.modal.editPosition":"编辑持仓","portfolio.modal.addMonitor":"添加监控","portfolio.modal.editMonitor":"编辑监控","portfolio.form.market":"市场","portfolio.form.marketRequired":"请选择市场","portfolio.form.selectMarket":"选择市场","portfolio.form.symbol":"标的代码","portfolio.form.symbolRequired":"请输入标的代码","portfolio.form.searchSymbol":"搜索或输入标的代码","portfolio.form.useAsSymbol":"使用","portfolio.form.asSymbolCode":"作为标的代码","portfolio.form.symbolHint":"可搜索标的库,或直接输入任意代码","portfolio.form.side":"方向","portfolio.form.quantity":"数量","portfolio.form.quantityRequired":"请输入数量","portfolio.form.enterQuantity":"输入持仓数量","portfolio.form.entryPrice":"买入价","portfolio.form.entryPriceRequired":"请输入买入价","portfolio.form.enterEntryPrice":"输入买入价格","portfolio.form.notes":"备注","portfolio.form.enterNotes":"可选:添加备注","portfolio.form.monitorName":"监控名称","portfolio.form.monitorNameRequired":"请输入监控名称","portfolio.form.enterMonitorName":"例如:每日组合分析","portfolio.form.interval":"执行间隔","portfolio.form.minutes":"分钟","portfolio.form.hour":"小时","portfolio.form.hours":"小时","portfolio.form.notifyChannels":"通知渠道","portfolio.form.browser":"浏览器通知","portfolio.form.email":"邮件","portfolio.form.telegramChatId":"Telegram Chat ID","portfolio.form.enterTelegramChatId":"输入 Telegram Chat ID","portfolio.form.telegramRequired":"请输入 Telegram Chat ID","portfolio.form.emailAddress":"邮箱地址","portfolio.form.enterEmail":"输入邮箱地址","portfolio.form.emailRequired":"请输入邮箱地址","portfolio.form.emailInvalid":"请输入有效的邮箱地址","portfolio.form.customPrompt":"自定义提示","portfolio.form.customPromptPlaceholder":'可选:添加特别关注点,例如"重点关注科技股风险"',"portfolio.form.monitorScope":"监控范围","portfolio.form.allPositions":"全部持仓","portfolio.form.selectedPositions":"指定持仓","portfolio.form.selectPositions":"选择持仓","portfolio.form.selectAll":"全选","portfolio.form.deselectAll":"全不选","portfolio.form.selectedCount":"已选 {count}/{total}","portfolio.form.pleaseSelectPositions":"请至少选择一个持仓进行监控","portfolio.form.notificationFromProfile":"通知将发送到您在个人中心配置的地址","portfolio.form.goToProfile":"前往配置","portfolio.message.loadFailed":"加载数据失败","portfolio.message.saveSuccess":"保存成功","portfolio.message.saveFailed":"保存失败","portfolio.message.deleteSuccess":"删除成功","portfolio.message.deleteFailed":"删除失败","portfolio.message.updateFailed":"更新失败","portfolio.message.monitorEnabled":"监控已启用","portfolio.message.monitorDisabled":"监控已暂停","portfolio.message.monitorRunSuccess":"分析完成","portfolio.message.monitorRunFailed":"分析失败","portfolio.message.monitorRunning":"AI 分析已启动,请等待通知","portfolio.groups.all":"全部持仓","portfolio.groups.ungrouped":"未分组","portfolio.form.group":"分组","portfolio.form.enterGroup":"输入或选择分组","portfolio.alerts.title":"价格/盈亏预警","portfolio.alerts.addAlert":"添加预警","portfolio.alerts.editAlert":"编辑预警","portfolio.alerts.alertType":"预警类型","portfolio.alerts.priceAbove":"价格高于","portfolio.alerts.priceBelow":"价格低于","portfolio.alerts.pnlAbove":"盈利高于 (%)","portfolio.alerts.pnlBelow":"亏损低于 (%)","portfolio.alerts.threshold":"阈值","portfolio.alerts.thresholdRequired":"请输入阈值","portfolio.alerts.enterPrice":"输入价格","portfolio.alerts.enterPercent":"输入百分比","portfolio.alerts.currentPrice":"当前价格","portfolio.alerts.currentPriceHint":"当前价格","portfolio.alerts.repeatInterval":"重复提醒","portfolio.alerts.noRepeat":"不重复 (触发一次)","portfolio.alerts.every5min":"每 5 分钟","portfolio.alerts.every15min":"每 15 分钟","portfolio.alerts.every30min":"每 30 分钟","portfolio.alerts.every1hour":"每 1 小时","portfolio.alerts.every4hours":"每 4 小时","portfolio.alerts.onceDaily":"每天一次","portfolio.alerts.enabled":"启用预警","portfolio.alerts.enabledDesc":"开启后将自动监测并触发通知","portfolio.alerts.delete":"删除","portfolio.alerts.deleteConfirm":"确定要删除此预警吗?","portfolio.modal.addAlert":"添加预警","portfolio.modal.editAlert":"编辑预警","menu.userManage":"用户管理","menu.myProfile":"个人中心","common.actions":"操作","common.refresh":"刷新","userManage.title":"用户管理","userManage.searchPlaceholder":"搜索用户名/邮箱/昵称","userManage.description":"管理系统用户、角色和权限","userManage.createUser":"创建用户","userManage.editUser":"编辑用户","userManage.username":"用户名","userManage.password":"密码","userManage.nickname":"昵称","userManage.email":"邮箱","userManage.role":"角色","userManage.status":"状态","userManage.lastLogin":"最后登录","userManage.active":"启用","userManage.disabled":"禁用","userManage.neverLogin":"从未登录","userManage.usernameRequired":"请输入用户名","userManage.usernamePlaceholder":"输入用户名","userManage.passwordRequired":"请输入密码","userManage.passwordPlaceholder":"输入密码(至少6位)","userManage.passwordMin":"密码至少6个字符","userManage.nicknamePlaceholder":"输入昵称","userManage.emailPlaceholder":"输入邮箱","userManage.emailInvalid":"邮箱格式不正确","userManage.rolePlaceholder":"选择角色","userManage.statusPlaceholder":"选择状态","userManage.resetPassword":"重置密码","userManage.resetPasswordWarning":"此操作将重置用户密码","userManage.newPassword":"新密码","userManage.newPasswordPlaceholder":"输入新密码","userManage.confirmDelete":"确定要删除此用户吗?","userManage.roleAdmin":"管理员","userManage.roleManager":"经理","userManage.roleUser":"普通用户","userManage.roleViewer":"访客","profile.title":"个人中心","profile.description":"管理您的账户设置和偏好","profile.basicInfo":"基本信息","profile.changePassword":"修改密码","profile.username":"用户名","profile.nickname":"昵称","profile.email":"邮箱","profile.lastLogin":"最后登录","profile.nicknamePlaceholder":"输入您的昵称","profile.emailPlaceholder":"输入您的邮箱","profile.emailInvalid":"邮箱格式不正确","profile.emailCannotChange":"注册后邮箱不可修改","profile.passwordHint":"密码至少需要6个字符","profile.oldPassword":"当前密码","profile.newPassword":"新密码","profile.confirmPassword":"确认密码","profile.oldPasswordRequired":"请输入当前密码","profile.oldPasswordPlaceholder":"输入当前密码","profile.newPasswordRequired":"请输入新密码","profile.newPasswordPlaceholder":"输入新密码","profile.confirmPasswordRequired":"请确认新密码","profile.confirmPasswordPlaceholder":"再次输入新密码","profile.passwordMin":"密码至少6个字符","profile.passwordMismatch":"两次输入的密码不一致","profile.credits.title":"我的积分","profile.credits.unit":"积分","profile.credits.recharge":"开通/充值","profile.credits.vipExpires":"VIP有效期至","profile.credits.vipExpired":"VIP已过期","profile.credits.noVip":"非VIP用户","profile.credits.hint":"使用AI分析/回测/监控等功能会消耗积分;VIP仅可免费使用VIP免费指标。","profile.creditsLog":"消费记录","profile.creditsLog.time":"时间","profile.creditsLog.action":"类型","profile.creditsLog.amount":"变动","profile.creditsLog.balance":"余额","profile.creditsLog.remark":"备注","profile.creditsLog.actionConsume":"消费","profile.creditsLog.actionRecharge":"充值","profile.creditsLog.actionAdjust":"调整","profile.creditsLog.actionRefund":"退款","profile.creditsLog.actionVipGrant":"VIP授予","profile.creditsLog.actionVipRevoke":"VIP取消","profile.creditsLog.actionRegisterBonus":"注册奖励","profile.creditsLog.actionReferralBonus":"邀请奖励","profile.creditsLog.actionIndicatorPurchase":"购买指标","profile.creditsLog.actionIndicatorSale":"出售指标","profile.referral.title":"邀请好友","profile.referral.listTab":"邀请列表","profile.referral.totalInvited":"已邀请","profile.referral.bonusPerInvite":"每邀请获得","profile.referral.yourLink":"您的邀请链接","profile.referral.copyLink":"复制链接","profile.referral.linkCopied":"邀请链接已复制","profile.referral.newUserBonus":"新用户注册获得","profile.referral.user":"用户","profile.referral.registerTime":"注册时间","profile.referral.noReferrals":"暂无邀请记录","profile.referral.shareNow":"立即分享邀请","profile.notifications.title":"通知设置","profile.notifications.hint":"配置您的默认通知方式,在创建资产监控和预警时将自动使用这些设置","profile.notifications.defaultChannels":"默认通知渠道","profile.notifications.browser":"站内通知","profile.notifications.email":"邮件","profile.notifications.phone":"短信","profile.notifications.telegramBotToken":"Telegram Bot Token","profile.notifications.telegramBotTokenPlaceholder":"请输入您的 Telegram Bot Token","profile.notifications.telegramBotTokenHint":"通过 @BotFather 创建机器人获取 Token","profile.notifications.telegramChatId":"Telegram Chat ID","profile.notifications.telegramPlaceholder":"请输入您的 Telegram Chat ID(如 123456789)","profile.notifications.telegramHint":"发送 /start 给 @userinfobot 可获取您的 Chat ID","profile.notifications.notifyEmail":"通知邮箱","profile.notifications.emailPlaceholder":"接收通知的邮箱地址","profile.notifications.emailHint":"默认使用账户邮箱,可设置其他邮箱接收通知","profile.notifications.phonePlaceholder":"请输入手机号(如 +8613800138000)","profile.notifications.phoneHint":"需要管理员配置 Twilio 服务后才能使用短信通知","profile.notifications.discordWebhook":"Discord Webhook","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"在 Discord 服务器设置中创建 Webhook","profile.notifications.webhookUrl":"Webhook URL","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"自定义 Webhook 地址,将以 POST JSON 方式推送通知","profile.notifications.webhookToken":"Webhook Token(可选)","profile.notifications.webhookTokenPlaceholder":"用于验证请求的 Bearer Token","profile.notifications.webhookTokenHint":"将作为 Authorization: Bearer Token 发送到 Webhook","profile.notifications.testBtn":"发送测试通知","profile.notifications.saveSuccess":"通知设置保存成功","profile.notifications.selectChannel":"请至少选择一个通知渠道","profile.notifications.fillTelegramToken":"请填写 Telegram Bot Token","profile.notifications.fillTelegram":"请填写 Telegram Chat ID","profile.notifications.fillEmail":"请填写通知邮箱","profile.notifications.testSent":"测试通知已发送,请检查您的通知渠道","profile.exchange.title":"交易所配置","profile.exchange.hint":"统一管理您的交易所API密钥和券商连接,在交易助手和快捷交易中可直接选择使用。","profile.exchange.addAccount":"添加交易所账户","profile.exchange.noAccounts":"暂无交易所账户,请点击上方按钮添加","profile.exchange.colExchange":"交易所","profile.exchange.colName":"名称","profile.exchange.colHint":"连接信息","profile.exchange.colCreatedAt":"创建时间","profile.exchange.colActions":"操作","profile.exchange.deleteConfirm":"确定要删除此交易所账户吗?删除后无法恢复。","profile.exchange.deleteSuccess":"交易所账户已删除","profile.exchange.addTitle":"添加交易所账户","profile.exchange.selectExchange":"选择交易所","profile.exchange.accountName":"账户名称(可选)","profile.exchange.accountNamePlaceholder":"如:主账户、测试账户","profile.exchange.apiKey":"API Key","profile.exchange.secretKey":"Secret Key","profile.exchange.passphrase":"Passphrase","profile.exchange.demoTrading":"模拟交易","profile.exchange.ibkrHost":"TWS/Gateway 主机地址","profile.exchange.ibkrPort":"TWS/Gateway 端口","profile.exchange.ibkrPortHint":"TWS纸交易:7497 | TWS实盘:7496 | Gateway纸交易:4002 | Gateway实盘:4001","profile.exchange.ibkrClientId":"客户端ID","profile.exchange.ibkrAccount":"账户号(可选)","profile.exchange.mt5Server":"服务器","profile.exchange.mt5Login":"登录账号","profile.exchange.mt5Password":"密码","profile.exchange.mt5TerminalPath":"终端路径(可选)","profile.exchange.mt5TerminalPathHint":"MT5终端安装路径,如 C:\\Program Files\\MetaTrader 5\\terminal64.exe","profile.exchange.testConnection":"测试连接","profile.exchange.testSuccess":"连接成功!","profile.exchange.testFailed":"连接失败","profile.exchange.saveSuccess":"交易所账户添加成功","profile.exchange.saveFailed":"添加失败","profile.exchange.typeCrypto":"加密货币交易所","profile.exchange.typeIBKR":"美股券商 (IBKR)","profile.exchange.typeMT5":"外汇 (MetaTrader 5)","profile.exchange.localDeploymentRequired":"需要本地部署","profile.exchange.localDeploymentHint":"此券商需要在本地部署QuantDinger才能使用。","profile.exchange.goToManage":"前往个人中心 → 交易所配置管理","profile.exchange.noCredentialHint":"请先在个人中心添加交易所账户","userManage.credits":"积分","userManage.adjustCredits":"调整积分","userManage.setVip":"设置VIP","userManage.currentCredits":"当前积分","userManage.newCredits":"新积分","userManage.enterCredits":"输入新的积分数量","userManage.creditsNonNegative":"积分不能为负数","userManage.currentVip":"当前VIP状态","userManage.vipActive":"有效","userManage.vipExpired":"已过期","userManage.vipDays":"VIP天数","userManage.vipExpiresAt":"VIP过期时间","userManage.cancelVip":"取消VIP","userManage.days":"天","userManage.customDate":"自定义日期","userManage.selectDate":"请选择日期","userManage.remark":"备注","userManage.remarkPlaceholder":"可选备注","userManage.tabUsers":"用户管理","systemOverview.tabTitle":"系统总览","systemOverview.totalStrategies":"策略总数","systemOverview.runningStrategies":"运行中","systemOverview.totalCapital":"总资金","systemOverview.totalPnl":"总盈亏","systemOverview.filterAll":"全部状态","systemOverview.filterRunning":"运行中","systemOverview.filterStopped":"已停止","systemOverview.searchPlaceholder":"搜索策略名/交易对/用户名","systemOverview.running":"运行中","systemOverview.stopped":"已停止","systemOverview.colUser":"用户","systemOverview.colStrategy":"策略名称","systemOverview.colStatus":"状态","systemOverview.colSymbol":"交易对","systemOverview.colCapital":"资金","systemOverview.colPnl":"盈亏 / ROI","systemOverview.colPositions":"持仓","systemOverview.colTrades":"交易次数","systemOverview.colIndicator":"指标","systemOverview.colExchange":"交易所","systemOverview.colTimeframe":"周期","systemOverview.colLeverage":"杠杆","systemOverview.colCreatedAt":"创建时间","systemOverview.realized":"已实现","systemOverview.unrealized":"未实现","systemOverview.symbols":"个交易对","systemOverview.live":"实盘","systemOverview.signal":"仅通知","settings.group.billing":"计费配置","settings.field.BILLING_ENABLED":"启用计费","settings.field.BILLING_COST_AI_ANALYSIS":"AI分析消耗","settings.field.BILLING_COST_STRATEGY_RUN":"策略运行消耗","settings.field.BILLING_COST_BACKTEST":"回测消耗","settings.field.BILLING_COST_PORTFOLIO_MONITOR":"Portfolio监控消耗","settings.field.CREDITS_REGISTER_BONUS":"注册奖励","settings.field.CREDITS_REFERRAL_BONUS":"邀请奖励","settings.field.RECHARGE_TELEGRAM_URL":"充值Telegram链接","settings.field.MEMBERSHIP_MONTHLY_PRICE_USD":"包月会员价格(USD)","settings.field.MEMBERSHIP_MONTHLY_CREDITS":"包月会员赠送积分","settings.field.MEMBERSHIP_YEARLY_PRICE_USD":"包年会员价格(USD)","settings.field.MEMBERSHIP_YEARLY_CREDITS":"包年会员赠送积分","settings.field.MEMBERSHIP_LIFETIME_PRICE_USD":"永久会员价格(USD)","settings.field.MEMBERSHIP_LIFETIME_MONTHLY_CREDITS":"永久会员每月赠送积分","settings.field.USDT_PAY_ENABLED":"启用USDT收款","settings.field.USDT_PAY_CHAIN":"USDT网络","settings.field.USDT_TRC20_XPUB":"TRC20 XPUB(仅观察)","settings.field.USDT_TRC20_CONTRACT":"USDT TRC20 合约地址","settings.field.TRONGRID_BASE_URL":"TronGrid Base URL","settings.field.TRONGRID_API_KEY":"TronGrid API Key","settings.field.USDT_PAY_CONFIRM_SECONDS":"确认延迟(秒)","settings.field.USDT_PAY_EXPIRE_MINUTES":"订单过期(分钟)","settings.desc.BILLING_ENABLED":"启用计费系统。启用后,用户使用某些功能需要消耗积分","settings.desc.BILLING_COST_AI_ANALYSIS":"每次AI分析消耗的积分数","settings.desc.BILLING_COST_STRATEGY_RUN":"启动策略时消耗的积分数","settings.desc.BILLING_COST_BACKTEST":"每次回测消耗的积分数","settings.desc.BILLING_COST_PORTFOLIO_MONITOR":"每次Portfolio AI监控消耗的积分数","settings.desc.CREDITS_REGISTER_BONUS":"新用户注册时获得的积分奖励","settings.desc.CREDITS_REFERRAL_BONUS":"用户通过邀请链接成功邀请新用户时,邀请人获得的积分奖励","settings.desc.VERIFICATION_CODE_MAX_ATTEMPTS":"验证码验证失败的最大尝试次数,超过后将锁定","settings.desc.VERIFICATION_CODE_LOCK_MINUTES":"验证码验证失败次数超过限制后的锁定时长(分钟)","settings.desc.RECHARGE_TELEGRAM_URL":"用户点击充值时跳转的Telegram客服链接","settings.desc.MEMBERSHIP_MONTHLY_PRICE_USD":"包月会员的价格(USD)。当前为模拟支付,后续可接入真实支付网关。","settings.desc.MEMBERSHIP_MONTHLY_CREDITS":"购买包月会员后立即赠送到账号的积分数量。","settings.desc.MEMBERSHIP_YEARLY_PRICE_USD":"包年会员的价格(USD)。当前为模拟支付,后续可接入真实支付网关。","settings.desc.MEMBERSHIP_YEARLY_CREDITS":"购买包年会员后立即赠送到账号的积分数量。","settings.desc.MEMBERSHIP_LIFETIME_PRICE_USD":"永久会员的价格(USD)。当前为模拟支付,后续可接入真实支付网关。","settings.desc.MEMBERSHIP_LIFETIME_MONTHLY_CREDITS":"永久会员每30天自动发放一次的积分数量(首次购买会立刻发放一次)。","settings.desc.USDT_PAY_ENABLED":"开启后,会员购买页会提供 USDT 扫码支付(每单独立地址 + 自动对账)。","settings.desc.USDT_PAY_CHAIN":"当前版本仅支持 TRC20。","settings.desc.USDT_TRC20_XPUB":"仅观察 xpub,用于派生每个订单的收款地址。不要填写私钥/助记词。","settings.desc.USDT_TRC20_CONTRACT":"TRON 链上 USDT 合约地址(默认已填写)。","settings.desc.TRONGRID_BASE_URL":"TronGrid API 基础地址(默认即可)。","settings.desc.TRONGRID_API_KEY":"可选。用于提高 TronGrid 调用额度/稳定性。","settings.desc.USDT_PAY_CONFIRM_SECONDS":"检测到到账后,等待指定秒数再标记“确认”,降低极端回滚风险。","settings.desc.USDT_PAY_EXPIRE_MINUTES":"用户扫码支付的订单有效期,过期后需重新生成订单。","globalMarket.title":"全球金融面板","globalMarket.fearGreedShort":"恐贪","globalMarket.calendar":"财经日历","globalMarket.lastUpdate":"最后更新","globalMarket.refresh":"刷新数据","globalMarket.name":"名称","globalMarket.price":"价格","globalMarket.change":"涨跌","globalMarket.trend":"走势","globalMarket.pair":"货币对","globalMarket.unit":"单位","globalMarket.refreshSuccess":"数据刷新成功","globalMarket.refreshError":"数据刷新失败","globalMarket.fetchError":"获取数据失败","globalMarket.loading":"加载中...","globalMarket.fearGreedIndex":"恐惧贪婪指数","globalMarket.fearGreedTip":"恐惧贪婪指数衡量市场情绪,0表示极度恐惧,100表示极度贪婪","globalMarket.volatilityIndex":"波动率指数","globalMarket.dollarIndex":"美元指数","globalMarket.majorIndices":"主要指数","globalMarket.vixTitle":"VIX 波动率指数","globalMarket.vixTip":"VIX指数衡量市场预期波动率,数值越高表示市场越恐慌","globalMarket.extremeFear":"极度恐惧","globalMarket.fear":"恐惧","globalMarket.neutral":"中性","globalMarket.greed":"贪婪","globalMarket.extremeGreed":"极度贪婪","globalMarket.marketOverview":"全球市场概览","globalMarket.indices":"主要指数","globalMarket.forex":"外汇市场","globalMarket.crypto":"加密货币","globalMarket.commodities":"大宗商品","globalMarket.heatmap":"市场热力图","globalMarket.cryptoHeatmap":"加密货币","globalMarket.commoditiesHeatmap":"大宗商品","globalMarket.sectorHeatmap":"板块","globalMarket.forexHeatmap":"外汇","globalMarket.opportunities":"交易机会","globalMarket.noOpportunities":"暂无明显交易机会","globalMarket.financialNews":"财经资讯","globalMarket.noNews":"暂无新闻","globalMarket.economicCalendar":"财经日历","globalMarket.noEvents":"暂无事件","globalMarket.actual":"实际","globalMarket.forecast":"预期","globalMarket.previous":"前值","globalMarket.signal.bullish":"看涨趋势","globalMarket.signal.bearish":"看跌趋势","globalMarket.signal.overbought":"超买警告","globalMarket.signal.oversold":"超卖机会","globalMarket.worldMap":"全球市场地图","globalMarket.rising":"上涨","globalMarket.falling":"下跌","globalMarket.bullish":"利多","globalMarket.bearish":"利空","globalMarket.expectedImpact":"预期影响","globalMarket.aboveForecast":"高于预期","globalMarket.belowForecast":"低于预期","globalMarket.upcomingEvents":"即将公布","globalMarket.releasedEvents":"已公布数据","trading-assistant.form.notificationFromProfile":"通知将发送到您在个人中心配置的地址。","trading-assistant.form.notificationConfigMissing":"您选中的渠道还未配置参数({channels}),将无法接收通知。请前往个人中心进行配置。","trading-assistant.form.goToProfile":"前往配置","community.title":"指标市场","community.searchPlaceholder":"搜索指标名称或描述...","community.all":"全部","community.freeOnly":"免费","community.paidOnly":"付费","community.sortNewest":"最新发布","community.sortHot":"最热门","community.sortRating":"评分最高","community.sortPriceLow":"价格从低到高","community.sortPriceHigh":"价格从高到低","community.myPurchases":"我的购买","community.noIndicators":"暂无指标","community.createFirst":"发布第一个指标","community.total":"共","community.items":"个","community.free":"免费","community.credits":"积分","community.myIndicator":"我的指标","community.purchased":"已购买","community.noDescription":"暂无描述","community.loadFailed":"加载失败","community.publishedAt":"发布于","community.downloads":"获取","community.rating":"评分","community.views":"浏览","community.description":"指标说明","community.performance":"实盘表现","community.strategyCount":"使用策略数","community.tradeCount":"交易次数","community.winRate":"胜率","community.totalProfit":"总收益","community.reviews":"用户评价","community.useNow":"立即使用","community.getFree":"免费获取","community.buyNow":"立即购买","community.purchaseSuccess":"购买成功!指标已添加到您的指标列表","community.purchaseFailed":"购买失败","community.indicator_not_found":"指标不存在或已下架","community.cannot_buy_own":"不能购买自己的指标","community.already_purchased":"您已购买过此指标","community.insufficient_credits":"积分不足","community.commentSuccess":"评论成功","community.commentFailed":"评论失败","community.commentUpdateSuccess":"评论修改成功","community.commentUpdateFailed":"评论修改失败,请重试","community.editComment":"编辑评论","community.cancelEdit":"取消","community.updateComment":"更新评论","community.alreadyCommented":"您已评论此指标","community.editMyComment":"修改评论","community.me":"我","community.edited":"已编辑","community.not_purchased":"请先购买/获取指标才能评论","community.cannot_comment_own":"不能评论自己的指标","community.already_commented":"您已经评论过此指标","community.noComments":"暂无评论","community.yourRating":"您的评分","community.commentPlaceholder":"分享您的使用体验...","community.submitComment":"提交评论","community.pleaseRate":"请先选择评分","community.loadMore":"加载更多","community.justNow":"刚刚","community.minutesAgo":"分钟前","community.hoursAgo":"小时前","community.daysAgo":"天前","community.noPurchases":"暂无购买记录","community.purchasedFrom":"卖家","community.purchaseTime":"购买时间","community.admin.reviewTab":"审核管理","community.admin.pending":"待审核","community.admin.approved":"已通过","community.admin.rejected":"已拒绝","community.admin.noItems":"暂无记录","community.admin.noDescription":"无描述","community.admin.viewCode":"查看代码","community.admin.note":"审核备注","community.admin.approve":"通过","community.admin.reject":"拒绝","community.admin.unpublish":"下架","community.admin.delete":"删除","community.admin.deleteConfirm":"确定要删除此指标吗?此操作不可撤销。","community.admin.unpublishConfirm":"确定要下架此指标吗?","community.admin.unpublishHint":"下架后该指标将不再在市场显示","community.admin.confirm":"确定","community.admin.cancel":"取消","community.admin.approveTitle":"通过审核","community.admin.rejectTitle":"拒绝审核","community.admin.noteLabel":"审核备注(可选)","community.admin.notePlaceholder":"请输入审核备注...","community.admin.loadFailed":"加载失败","community.admin.reviewSuccess":"审核成功","community.admin.reviewFailed":"审核失败","community.admin.unpublishSuccess":"下架成功","community.admin.unpublishFailed":"下架失败","community.admin.deleteSuccess":"删除成功","community.admin.deleteFailed":"删除失败","fastAnalysis.aiAnalysis":"AI 智能分析","fastAnalysis.analyzing":"AI 正在分析中...","fastAnalysis.pleaseWait":"请稍候,正在获取实时数据并生成专业报告","fastAnalysis.error":"分析失败","fastAnalysis.retry":"重试","fastAnalysis.selectSymbol":"选择标的开始分析","fastAnalysis.selectHint":"从左侧自选列表选择或添加新标的","fastAnalysis.confidence":"置信度","fastAnalysis.currentPrice":"当前价格","fastAnalysis.entryPrice":"建议入场","fastAnalysis.stopLoss":"止损价","fastAnalysis.takeProfit":"止盈目标","fastAnalysis.stopLossHint":"基于2倍ATR和支撑位计算","fastAnalysis.takeProfitHint":"基于3倍ATR和阻力位计算","fastAnalysis.atrBased":"基于ATR波动率","fastAnalysis.riskReward":"风险回报比","fastAnalysis.technical":"技术面","fastAnalysis.fundamental":"基本面","fastAnalysis.sentiment":"情绪面","fastAnalysis.overall":"综合评分","fastAnalysis.keyReasons":"核心理由","fastAnalysis.risks":"风险提示","fastAnalysis.indicators":"技术指标","fastAnalysis.maTrend":"均线趋势","fastAnalysis.support":"支撑位","fastAnalysis.resistance":"阻力位","fastAnalysis.volatility":"波动性","fastAnalysis.wasHelpful":"这次分析对您有帮助吗?","fastAnalysis.helpful":"有帮助","fastAnalysis.notHelpful":"需改进","fastAnalysis.feedbackThanks":"感谢您的反馈!","fastAnalysis.feedbackFailed":"反馈提交失败","fastAnalysis.feedbackUnavailable":"反馈功能暂不可用,请重新分析后重试","fastAnalysis.analysisTime":"分析耗时","fastAnalysis.startAnalysis":"开始分析","fastAnalysis.history":"历史记录","fastAnalysis.systemTitle":"QUANTDINGER AI","fastAnalysis.systemOnline":"系统在线","fastAnalysis.version":"快速版","fastAnalysis.preparing":"准备中...","fastAnalysis.step1":"获取实时数据","fastAnalysis.step2":"计算技术指标","fastAnalysis.step3":"AI深度分析","fastAnalysis.step4":"生成专业报告","fastAnalysis.technicalAnalysis":"技术面分析","fastAnalysis.fundamentalAnalysis":"基本面分析","fastAnalysis.sentimentAnalysis":"市场情绪分析","fastAnalysis.signal.bullish":"看涨","fastAnalysis.signal.bearish":"看跌","fastAnalysis.signal.neutral":"中性","fastAnalysis.signal.overbought":"超买","fastAnalysis.signal.oversold":"超卖","fastAnalysis.signal.strong_bullish":"强烈看涨","fastAnalysis.signal.strong_bearish":"强烈看跌","fastAnalysis.trend.uptrend":"上升趋势","fastAnalysis.trend.downtrend":"下降趋势","fastAnalysis.trend.sideways":"横盘整理","fastAnalysis.trend.consolidating":"盘整","fastAnalysis.trend.golden_cross":"金叉","fastAnalysis.trend.death_cross":"死叉","fastAnalysis.trend.strong_uptrend":"强势上涨","fastAnalysis.trend.strong_downtrend":"强势下跌","fastAnalysis.volatilityLevel.high":"高","fastAnalysis.volatilityLevel.medium":"中","fastAnalysis.volatilityLevel.low":"低","fastAnalysis.volatilityLevel.unknown":"未知","fastAnalysis.marketOverview":"市场概览","fastAnalysis.selectTip":"选择自选列表中的标的,开始 AI 智能分析","fastAnalysis.analysisInProgress":"该标的当前有分析正在进行,请稍候再试(请勿重复点击)。","fastAnalysis.analysisInProgressTitle":"分析进行中","fastAnalysis.insufficientCredits":"积分不足","fastAnalysis.insufficientCreditsDetail":"积分不足:需要 {required},当前 {current},还差 {shortage}。","fastAnalysis.analysisCompleteWithCredits":"分析完成,剩余积分:{remaining}","fastAnalysis.consensusTitle":"多周期客观共识","fastAnalysis.consensusDecision":"共识方向","fastAnalysis.consensusScore":"综合评分","fastAnalysis.consensusAgreement":"周期一致度","aiQuant.title":"AI 量化","aiQuant.strategyList":"策略列表","aiQuant.create":"创建","aiQuant.edit":"编辑","aiQuant.delete":"删除","aiQuant.start":"启动","aiQuant.stop":"停止","aiQuant.analyze":"立即分析","aiQuant.noStrategy":"暂无策略,点击创建开始","aiQuant.selectStrategy":"请从左侧选择一个策略","aiQuant.createFirst":"创建第一个策略","aiQuant.createStrategy":"创建策略","aiQuant.editStrategy":"编辑策略","aiQuant.confirmDelete":"确定要删除此策略吗?","aiQuant.latestAnalysis":"最新分析结果","aiQuant.analysisHistory":"分析历史","aiQuant.decision":"决策","aiQuant.confidence":"置信度","aiQuant.currentPrice":"当前价格","aiQuant.entryPrice":"建议入场","aiQuant.stopLoss":"止损价","aiQuant.takeProfit":"止盈价","aiQuant.reason":"理由","aiQuant.analyzedAt":"分析时间","aiQuant.tradeSettings":"交易设置","aiQuant.minutes":"分钟","aiQuant.hour":"小时","aiQuant.hours":"小时","aiQuant.stats.totalStrategies":"策略总数","aiQuant.stats.runningStrategies":"运行中","aiQuant.stats.totalAnalyses":"分析次数","aiQuant.stats.totalPnl":"总盈亏","aiQuant.status.running":"运行中","aiQuant.status.stopped":"已停止","aiQuant.status.paused":"已暂停","aiQuant.executionMode.signal":"仅信号","aiQuant.executionMode.live":"实盘交易","aiQuant.marketType.spot":"现货","aiQuant.marketType.futures":"合约","aiQuant.field.strategyName":"策略名称","aiQuant.field.market":"市场","aiQuant.field.symbol":"交易对","aiQuant.field.marketType":"市场类型","aiQuant.field.aiModel":"AI 模型","aiQuant.field.interval":"分析间隔","aiQuant.field.aiPrompt":"AI 提示词","aiQuant.field.executionMode":"执行模式","aiQuant.field.positionSize":"仓位大小","aiQuant.field.stopLoss":"止损比例","aiQuant.field.takeProfit":"止盈比例","aiQuant.field.totalAnalyses":"分析次数","aiQuant.field.totalTrades":"交易次数","aiQuant.field.totalPnl":"总盈亏","aiQuant.placeholder.strategyName":"请输入策略名称","aiQuant.placeholder.market":"请选择市场","aiQuant.placeholder.symbol":"例如: BTC/USDT","aiQuant.placeholder.aiModel":"默认使用系统配置","aiQuant.placeholder.aiPrompt":"输入您的交易策略提示词,例如:当RSI低于30时考虑买入...","aiQuant.validation.strategyName":"请输入策略名称","aiQuant.validation.market":"请选择市场","aiQuant.validation.symbol":"请输入交易对","aiQuant.table.decision":"决策","aiQuant.table.confidence":"置信度","aiQuant.table.entryPrice":"入场价","aiQuant.table.stopLoss":"止损价","aiQuant.table.takeProfit":"止盈价","aiQuant.table.time":"时间","aiQuant.msg.createSuccess":"策略创建成功","aiQuant.msg.updateSuccess":"策略更新成功","aiQuant.msg.deleteSuccess":"策略删除成功","aiQuant.msg.startSuccess":"策略已启动","aiQuant.msg.stopSuccess":"策略已停止","aiQuant.msg.analyzeSuccess":"分析完成","aiQuant.field.initialCapital":"投入资金","aiQuant.field.leverage":"杠杆倍数","aiQuant.field.tradeDirection":"交易方向","aiQuant.field.trailingStop":"移动止损","aiQuant.field.trailingStopPct":"移动止损比例","aiQuant.direction.long":"做多","aiQuant.direction.short":"做空","aiQuant.direction.both":"双向","aiQuant.riskControl":"风控设置","aiQuant.aiSettings":"AI设置","aiQuant.systemDefault":"系统默认","aiQuant.placeholder.selectSymbol":"从自选列表选择交易对","aiQuant.hint.symbolFromWatchlist":"从您的自选列表中选择,系统自动识别市场类型","aiQuant.hint.spotLeverageFixed":"现货市场杠杆固定为1x","aiQuant.hint.stopLossEnforced":"强制止损,AI不可修改","aiQuant.hint.takeProfitEnforced":"强制止盈,AI不可修改","aiQuant.hint.aiPromptOnly":"AI仅根据提示词判断方向,不会修改您设置的风控参数","aiQuant.aiLimitWarning":"AI权限限制","aiQuant.aiLimitDescription":"AI只能判断交易方向(买入/卖出/持有),杠杆倍数、下单金额、止盈止损等风控参数由您完全控制,AI无法修改。","aiQuant.userStopLoss":"您的止损","aiQuant.userTakeProfit":"您的止盈","aiQuant.userLeverage":"您的杠杆","aiQuant.validation.initialCapital":"请输入投入资金","aiQuant.table.currentPrice":"当前价格","aiQuant.field.promptTemplate":"策略模板","aiQuant.placeholder.selectTemplate":"选择预设策略模板","aiQuant.template.default":"📊 综合分析(推荐)","aiQuant.template.trend":"📈 趋势跟踪","aiQuant.template.swing":"🔄 波段交易","aiQuant.template.news":"📰 新闻驱动","aiQuant.template.custom":"✏️ 自定义","aiQuant.hint.dataProvided":"系统自动提供:实时价格、技术指标(RSI/MACD/均线)、最近新闻、宏观数据。AI将基于这些数据和您的提示词判断方向。","aiQuant.hint.liveWarning":"实盘模式将使用真实资金交易,请确保已配置交易所API并充分了解风险!","trading-assistant.liveDisclaimer.title":"实盘交易免责声明","trading-assistant.liveDisclaimer.content":"实盘交易存在较高风险,可能导致部分或全部资金损失。平台不保证收益、不承诺盈利。你需自行评估风险并对交易结果承担全部责任。","trading-assistant.liveDisclaimer.agree":"我已阅读并理解上述免责声明,仍选择开启实盘交易","trading-assistant.liveDisclaimer.required":"开启实盘前请先勾选免责声明确认","trading-assistant.liveDisclaimer.blockTitle":"请先确认免责声明","trading-assistant.liveDisclaimer.blockDesc":"勾选免责声明后才可继续配置实盘连接与下单参数。","menu.billing":"会员充值","billing.title":"开通会员 / 充值积分","billing.desc":"选择适合你的会员套餐,开通后会赠送积分。","billing.snapshot.credits":"当前积分","billing.snapshot.vip":"VIP 状态","billing.snapshot.notVip":"非VIP","billing.snapshot.expires":"到期时间","billing.vipRule.title":"VIP 权益说明","billing.vipRule.desc":"VIP 仅拥有一个特殊权限:可免费使用「VIP免费指标」。其它付费功能/指标仍会正常扣积分。","billing.plan.monthly":"包月会员","billing.plan.yearly":"包年会员","billing.plan.lifetime":"永久会员","billing.perMonth":"月","billing.perYear":"年","billing.once":"一次性","billing.credits":"积分","billing.lifetimeMonthly":"每月赠送","billing.buyNow":"立即购买","billing.purchaseSuccess":"购买成功","billing.purchaseFailed":"购买失败","billing.usdt.title":"USDT 扫码支付","billing.usdt.hintTitle":"请使用钱包扫码并完成转账","billing.usdt.hintDesc":"请确保网络与金额正确(当前仅支持 TRC20)。支付到账后系统会自动开通会员并发放积分。","billing.usdt.chain":"网络","billing.usdt.amount":"金额","billing.usdt.address":"收款地址","billing.usdt.copyAddress":"复制地址","billing.usdt.copyAmount":"复制金额","billing.usdt.refresh":"刷新状态","billing.usdt.expires":"过期时间","billing.usdt.paidSuccess":"支付确认成功,已开通会员","billing.usdt.status.pending":"等待支付","billing.usdt.status.paid":"已检测到账","billing.usdt.status.confirmed":"已确认","billing.usdt.status.expired":"已过期","billing.usdt.status.cancelled":"已取消","billing.usdt.status.failed":"失败","billing.usdt.expiredHint":"订单已过期。如您已完成付款但未到账,请联系客服处理(附订单截图和 TxHash)。","billing.usdt.confirmedHint":"支付已确认,会员已激活!感谢您的购买。","community.vipFree":"VIP免费","dashboard.indicator.publish.vipFree":"VIP免费","dashboard.indicator.publish.vipFreeHint":"开启后:VIP用户可免费使用该指标(非VIP仍需购买)。","quickTrade.title":"闪电交易","quickTrade.selectSymbol":"选择交易对","quickTrade.exchange":"交易所","quickTrade.selectExchange":"选择交易所账户","quickTrade.cryptoOnly":"仅支持加密货币","quickTrade.noExchange":"暂无加密交易所账户,请先在个人中心 → 交易所配置中添加","quickTrade.available":"可用余额","quickTrade.long":"做多","quickTrade.short":"做空","quickTrade.market":"市价","quickTrade.limit":"限价","quickTrade.limitPrice":"限价价格","quickTrade.enterPrice":"输入价格","quickTrade.amount":"下单金额","quickTrade.enterAmount":"输入金额","quickTrade.leverage":"杠杆倍数","quickTrade.tpsl":"止盈/止损价格 (可选)","quickTrade.tp":"止盈价格","quickTrade.sl":"止损价格","quickTrade.tpPlaceholder":"输入止盈价格","quickTrade.slPlaceholder":"输入止损价格","quickTrade.optional":"可选","quickTrade.buyLong":"买入/做多","quickTrade.sellShort":"卖出/做空","quickTrade.currentPosition":"当前持仓","quickTrade.side":"方向","quickTrade.posSize":"持仓数量","quickTrade.entryPrice":"开仓价格","quickTrade.markPrice":"标记价格","quickTrade.unrealizedPnl":"未实现盈亏","quickTrade.closePosition":"一键平仓","quickTrade.noPosition":"暂无持仓","quickTrade.noPositionHint":"当前交易对暂无持仓","quickTrade.recentTrades":"最近交易","quickTrade.orderSuccess":"下单成功!","quickTrade.orderFailed":"下单失败","quickTrade.positionClosed":"平仓成功!","quickTrade.openPanel":"闪电交易","quickTrade.tradeNow":"立即交易","adminOrders.tabTitle":"订单列表","adminOrders.totalOrders":"总订单数","adminOrders.paidOrders":"已付款","adminOrders.pendingOrders":"待付款","adminOrders.totalRevenue":"总收入","adminOrders.filterAll":"全部状态","adminOrders.filterPending":"待付款","adminOrders.filterPaid":"已付款","adminOrders.filterConfirmed":"已确认","adminOrders.filterExpired":"已过期","adminOrders.searchPlaceholder":"搜索用户名/邮箱","adminOrders.colUser":"用户","adminOrders.colType":"类型","adminOrders.colPlan":"套餐","adminOrders.colAmount":"金额","adminOrders.colStatus":"状态","adminOrders.colChain":"链","adminOrders.colAddress":"收款地址","adminOrders.colTxHash":"交易哈希","adminOrders.colCreatedAt":"下单时间","adminOrders.lifetime":"永久","adminOrders.yearly":"年付","adminOrders.monthly":"月付","adminOrders.statusPaid":"已付款","adminOrders.statusConfirmed":"已确认","adminOrders.statusPending":"待付款","adminOrders.statusExpired":"已过期","adminOrders.statusCancelled":"已取消","adminOrders.statusFailed":"失败","adminAiStats.tabTitle":"AI 分析记录","adminAiStats.totalAnalyses":"总分析次数","adminAiStats.activeUsers":"活跃用户","adminAiStats.uniqueSymbols":"分析品种数","adminAiStats.accuracy":"正确 / 已验证","adminAiStats.userStatsTitle":"用户使用统计","adminAiStats.recentTitle":"最近分析记录","adminAiStats.searchPlaceholder":"搜索用户名","adminAiStats.colUser":"用户","adminAiStats.colAnalysisCount":"分析次数","adminAiStats.colSymbols":"品种数","adminAiStats.colMarkets":"市场数","adminAiStats.colAccuracy":"正确 / 错误","adminAiStats.colFeedback":"用户反馈","adminAiStats.colLastAnalysis":"最近分析","adminAiStats.colMarket":"市场","adminAiStats.colSymbol":"品种","adminAiStats.colModel":"模型","adminAiStats.colStatus":"状态","adminAiStats.colCreatedAt":"时间","adminAiStats.helpful":"有用","adminAiStats.notHelpful":"没用","polymarket.title":"预测市场","polymarket.subtitle":"基于Polymarket预测市场数据的AI分析和交易机会推荐","polymarket.filter.category":"选择类别","polymarket.filter.sortBy":"排序方式","polymarket.sort.volume":"24小时交易量","polymarket.sort.aiScore":"AI机会评分","polymarket.sort.highProbability":"高概率机会","polymarket.sort.highReturn":"高回报比机会","polymarket.search.placeholder":"搜索预测市场...","polymarket.category.all":"全部","polymarket.category.crypto":"加密货币","polymarket.category.politics":"政治","polymarket.category.economics":"经济","polymarket.category.sports":"体育","polymarket.category.tech":"科技","polymarket.category.finance":"金融","polymarket.category.geopolitics":"地缘政治","polymarket.category.culture":"文化","polymarket.category.climate":"气候","polymarket.category.entertainment":"娱乐","polymarket.market.currentProbability":"当前概率","polymarket.ai.predicted":"AI预测概率","polymarket.ai.marketProbability":"市场概率","polymarket.ai.recommendation":"AI推荐","polymarket.ai.confidence":"置信度","polymarket.ai.opportunityScore":"机会评分","polymarket.ai.reasoning":"分析理由","polymarket.ai.keyFactors":"关键因素","polymarket.recommendation.YES":"YES(看涨)","polymarket.recommendation.NO":"NO(看跌)","polymarket.recommendation.HOLD":"HOLD(中性)","polymarket.status.active":"活跃","polymarket.status.closed":"已关闭","polymarket.status.resolved":"已结算","polymarket.action.viewDetail":"查看详情","polymarket.action.viewOnPolymarket":"在Polymarket查看","polymarket.detail.title":"预测市场详情","polymarket.detail.currentProbability":"当前概率","polymarket.detail.volume24h":"24小时交易量","polymarket.detail.liquidity":"流动性","polymarket.detail.aiAnalysis":"AI分析结果","polymarket.detail.assetOpportunities":"相关资产交易机会","polymarket.opportunity.confidence":"置信度","polymarket.opportunity.analyze":"分析资产","polymarket.signal.BUY":"买入","polymarket.signal.SELL":"卖出","polymarket.signal.HOLD":"持有","polymarket.error.loadFailed":"加载市场列表失败","polymarket.error.searchFailed":"搜索失败","polymarket.error.notFound":"未找到市场数据","polymarket.error.loadDetailFailed":"加载详情失败","polymarket.viewOnPolymarket":"在Polymarket查看","polymarket.filter.explanation.title":"筛选依据说明","polymarket.filter.explanation.volume":"按24小时交易量排序,显示最活跃的预测市场。","polymarket.filter.explanation.aiScore":"按AI机会评分排序,综合考虑AI与市场差异、置信度等因素,优先显示高价值机会。","polymarket.filter.explanation.highProbability":"按AI预测概率排序,优先显示AI认为发生概率较高的事件(AI预测概率 > 市场概率 + 10%)。","polymarket.filter.explanation.highReturn":"按高回报比排序,优先显示AI与市场差异大且置信度高的机会(差异 × 置信度),适合寻找被低估的预测。","polymarket.deepAnalysis.prompt":"当前显示的是基于规则的简单分析。点击下方按钮进行AI深度分析,获得更准确的预测和建议。","polymarket.deepAnalysis.button":"深度分析","polymarket.deepAnalysis.success":"深度分析完成!消耗积分 {credits},剩余积分 {remaining}","polymarket.deepAnalysis.successFree":"深度分析完成!","polymarket.deepAnalysis.failed":"深度分析失败,请稍后重试","polymarket.deepAnalysis.insufficientCredits":"积分不足!需要 {required} 积分,当前 {current} 积分,缺少 {shortage} 积分","polymarket.error.invalidMarketId":"无效的市场ID","polymarket.analysis.title":"Polymarket预测市场分析","polymarket.analysis.description":"输入Polymarket链接或市场标题,AI将为您分析预测市场的交易机会","polymarket.analysis.startAnalysis":"开始分析","polymarket.analysis.inputHint":"请输入Polymarket市场链接或市场标题","polymarket.analysis.inputPlaceholder":'例如:https://polymarket.com/event/xxx 或 "Bitcoin price above $100k in 2025?"',"polymarket.analysis.inputRequired":"请输入Polymarket链接或市场标题","polymarket.analysis.analyzeButton":"开始分析","polymarket.analysis.analyzing":"正在分析中,请稍候...","polymarket.analysis.success":"分析完成!","polymarket.analysis.failed":"分析失败,请稍后重试","polymarket.analysis.insufficientCredits":"积分不足,请先充值","polymarket.analysis.viewOnPolymarket":"在Polymarket查看","polymarket.analysis.aiAnalysis":"AI分析结果","polymarket.analysis.marketProbability":"市场概率","polymarket.analysis.aiPredictedProbability":"AI预测概率","polymarket.analysis.divergence":"差异","polymarket.analysis.recommendation":"推荐","polymarket.analysis.recommendationYes":"YES(看涨)","polymarket.analysis.recommendationNo":"NO(看跌)","polymarket.analysis.recommendationHold":"HOLD(中性)","polymarket.analysis.confidenceScore":"置信度","polymarket.analysis.opportunityScore":"机会评分","polymarket.analysis.reasoning":"分析理由","polymarket.analysis.keyFactors":"关键因素","polymarket.analysis.creditsCharged":"本次分析消耗积分:{credits}","polymarket.analysis.remainingCredits":"剩余积分:{credits}","polymarket.analysis.newAnalysis":"新分析","polymarket.analysis.tabAnalyze":"分析","polymarket.analysis.tabHistory":"历史记录","polymarket.analysis.historyMarket":"市场","polymarket.analysis.historyRecommendation":"推荐","polymarket.analysis.historyOpportunityScore":"机会评分","polymarket.analysis.historyCreatedAt":"分析时间","polymarket.analysis.historyTotal":"共 {total} 条记录","polymarket.analysis.loadHistoryFailed":"加载历史记录失败","aiAssetAnalysis.tabs.polymarket":"预测市场"},f=(0,s.A)((0,s.A)({},y),h)}}]); \ No newline at end of file diff --git a/frontend/dist/js/lang-zh-CN-legacy.ad21db13.js b/frontend/dist/js/lang-zh-CN-legacy.ad21db13.js deleted file mode 100644 index 01bd217..0000000 --- a/frontend/dist/js/lang-zh-CN-legacy.ad21db13.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[644],{13167:function(a,t,e){e.d(t,{default:function(){return f}});var s=e(57888),i=e(48931),r=e(85505),n={today:"今天",now:"此刻",backToToday:"返回今天",ok:"确定",timeSelect:"选择时间",dateSelect:"选择日期",weekSelect:"选择周",clear:"清除",month:"月",year:"年",previousMonth:"上个月 (翻页上键)",nextMonth:"下个月 (翻页下键)",monthSelect:"选择月份",yearSelect:"选择年份",decadeSelect:"选择年代",yearFormat:"YYYY年",dayFormat:"D日",dateFormat:"YYYY年M月D日",dateTimeFormat:"YYYY年M月D日 HH时mm分ss秒",previousYear:"上一年 (Control键加左方向键)",nextYear:"下一年 (Control键加右方向键)",previousDecade:"上一年代",nextDecade:"下一年代",previousCentury:"上一世纪",nextCentury:"下一世纪"},o={placeholder:"请选择时间"},d=o,l={lang:(0,r.A)({placeholder:"请选择日期",rangePlaceholder:["开始日期","结束日期"]},n),timePickerLocale:(0,r.A)({},d)};l.lang.ok="确 定";var c=l,m=c,g={locale:"zh-cn",Pagination:i.A,DatePicker:c,TimePicker:d,Calendar:m,global:{placeholder:"请选择"},Table:{filterTitle:"筛选",filterConfirm:"确定",filterReset:"重置",selectAll:"全选当页",selectInvert:"反选当页",sortTitle:"排序",expand:"展开行",collapse:"关闭行"},Modal:{okText:"确定",cancelText:"取消",justOkText:"知道了"},Popconfirm:{cancelText:"取消",okText:"确定"},Transfer:{searchPlaceholder:"请输入搜索内容",itemUnit:"项",itemsUnit:"项"},Upload:{uploading:"文件上传中",removeFile:"删除文件",uploadError:"上传错误",previewFile:"预览文件",downloadFile:"下载文件"},Empty:{description:"暂无数据"},Icon:{icon:"图标"},Text:{edit:"编辑",copy:"复制",copied:"复制成功",expand:"展开"},PageHeader:{back:"返回"}},u=g,p=e(52648),b=e.n(p),y={antLocale:u,momentName:"zh-cn",momentLocale:b()},h={"common.confirm":"确定","common.cancel":"取消","common.save":"保存","common.delete":"删除","common.edit":"编辑","common.add":"添加","common.close":"关闭","common.done":"完成","common.ok":"确定","common.loading":"加载中...","common.noData":"暂无数据",submit:"提交",save:"保存","submit.ok":"提交成功","save.ok":"保存成功","menu.welcome":"欢迎","menu.home":"主页","menu.dashboard":"仪表盘","menu.dashboard.indicator":"指标分析","menu.dashboard.community":"指标市场","menu.dashboard.analysis":"AI 分析","menu.dashboard.aiAssetAnalysis":"AI资产分析","menu.dashboard.aiQuant":"AI 量化","menu.dashboard.tradingAssistant":"交易助手","menu.dashboard.portfolio":"资产监测","menu.dashboard.globalMarket":"全球金融","menu.dashboard.polymarket":"预测市场","menu.settings":"系统设置","menu.dashboard.aiTradingAssistant":"AI交易助手","menu.dashboard.signalRobot":"信号机器人","menu.dashboard.monitor":"监控页","menu.dashboard.workplace":"工作台","aiAssetAnalysis.title":"AI资产分析","aiAssetAnalysis.subtitle":"把资产监测、即时分析、定时任务放到一个工作流里,操作更直观、反馈更及时。","aiAssetAnalysis.actions.quickAnalysis":"立即开始分析","aiAssetAnalysis.actions.monitorTasks":"管理监控任务","aiAssetAnalysis.actions.openStandalone":"在独立页面打开","aiAssetAnalysis.quickBar.title":"快捷分析","aiAssetAnalysis.quickBar.placeholder":"从资产池选择标的","aiAssetAnalysis.quickBar.useInQuick":"带入即时分析","aiAssetAnalysis.quickBar.runNow":"一键分析","aiAssetAnalysis.history.title":"最近分析","aiAssetAnalysis.history.empty":"暂无分析记录","aiAssetAnalysis.actions.enterQuick":"进入即时分析","aiAssetAnalysis.actions.enterMonitor":"进入定时任务与资产池","aiAssetAnalysis.flow.poolTitle":"构建资产池","aiAssetAnalysis.flow.poolDesc":"先添加持仓与关注标的,形成统一分析对象池。","aiAssetAnalysis.flow.poolAction":"去管理资产池","aiAssetAnalysis.flow.quickTitle":"即时分析","aiAssetAnalysis.flow.quickDesc":"对任意标的一键发起 AI 分析,快速拿到决策建议。","aiAssetAnalysis.flow.quickAction":"去即时分析","aiAssetAnalysis.flow.autoTitle":"定时监控","aiAssetAnalysis.flow.autoDesc":"配置定时任务自动运行 AI 分析,并推送报告到通知渠道。","aiAssetAnalysis.flow.autoAction":"去配置任务","aiAssetAnalysis.tabs.quick":"即时分析","aiAssetAnalysis.tabs.monitor":"资产池与定时任务","aiAssetAnalysis.tabLead.quick":"适合临时判断:选择标的后立刻分析并查看历史结果。","aiAssetAnalysis.tabLead.monitor":"适合持续跟踪:维护持仓、设置监控范围与执行频率。","aiAssetAnalysis.stats.totalAnalyses":"分析总数","aiAssetAnalysis.stats.accuracy":"准确率","aiAssetAnalysis.stats.avgReturn":"平均回报","aiAssetAnalysis.stats.satisfaction":"用户满意度","aiAssetAnalysis.stats.decisions":"决策分布","aiAssetAnalysis.opportunities.title":"AI 交易机会雷达","aiAssetAnalysis.opportunities.empty":"暂无交易机会","aiAssetAnalysis.opportunities.analyze":"分析","aiAssetAnalysis.opportunities.updateHint":"每小时更新","aiAssetAnalysis.opportunities.signal.overbought":"超买","aiAssetAnalysis.opportunities.signal.oversold":"超卖","aiAssetAnalysis.opportunities.signal.bullish_momentum":"看涨","aiAssetAnalysis.opportunities.signal.bearish_momentum":"看跌","aiAssetAnalysis.opportunities.market.Crypto":"🪙 加密","aiAssetAnalysis.opportunities.market.USStock":"📈 美股","aiAssetAnalysis.opportunities.market.Forex":"💱 外汇","aiAssetAnalysis.opportunities.market.PredictionMarket":"🎯 预测市场","aiAssetAnalysis.opportunities.reason.crypto.overbought":"24h涨幅{change}%,7日涨幅{change7d}%,短期超买风险","aiAssetAnalysis.opportunities.reason.crypto.bullish_momentum":"24h涨幅{change}%,上涨动能强劲","aiAssetAnalysis.opportunities.reason.crypto.oversold":"24h跌幅{change}%,可能超卖反弹","aiAssetAnalysis.opportunities.reason.crypto.bearish_momentum":"24h跌幅{change}%,下跌趋势明显","aiAssetAnalysis.opportunities.reason.usstock.overbought":"日涨幅{change}%,短期涨幅较大,注意回调风险","aiAssetAnalysis.opportunities.reason.usstock.bullish_momentum":"日涨幅{change}%,上涨动能强劲","aiAssetAnalysis.opportunities.reason.usstock.oversold":"日跌幅{change}%,可能超卖反弹","aiAssetAnalysis.opportunities.reason.usstock.bearish_momentum":"日跌幅{change}%,下跌趋势明显","aiAssetAnalysis.opportunities.reason.forex.overbought":"日涨幅{change}%,汇率波动剧烈,注意回调","aiAssetAnalysis.opportunities.reason.forex.bullish_momentum":"日涨幅{change}%,上涨动能较强","aiAssetAnalysis.opportunities.reason.forex.oversold":"日跌幅{change}%,汇率波动剧烈,可能反弹","aiAssetAnalysis.opportunities.reason.forex.bearish_momentum":"日跌幅{change}%,下跌趋势明显","aiAssetAnalysis.checkup.title":"组合体检","aiAssetAnalysis.checkup.btn":"组合体检","aiAssetAnalysis.checkup.desc":"一键对您资产池中的所有持仓进行 AI 分析,快速了解每个标的的当前状态和操作建议。","aiAssetAnalysis.checkup.start":"开始体检","aiAssetAnalysis.checkup.progress":"正在分析 {current}/{total}...","aiAssetAnalysis.checkup.noPositions":"资产池中暂无持仓,请先添加资产。","aiAssetAnalysis.checkup.complete":"体检完成","aiAssetAnalysis.checkup.failed":"分析失败","aiAssetAnalysis.checkup.rerun":"重新体检","aiAssetAnalysis.search.hint":"搜索","aiAssetAnalysis.search.placeholder":"搜索任意标的... (Ctrl+K)","aiAssetAnalysis.search.noResults":"未找到匹配结果,请尝试其他关键词","menu.form":"表单页","menu.form.basic-form":"基础表单","menu.form.step-form":"分步表单","menu.form.step-form.info":"分步表单(填写转账信息)","menu.form.step-form.confirm":"分步表单(确认转账信息)","menu.form.step-form.result":"分步表单(完成)","menu.form.advanced-form":"高级表单","menu.list":"列表页","menu.list.table-list":"查询表格","menu.list.basic-list":"标准列表","menu.list.card-list":"卡片列表","menu.list.search-list":"搜索列表","menu.list.search-list.articles":"搜索列表(文章)","menu.list.search-list.projects":"搜索列表(项目)","menu.list.search-list.applications":"搜索列表(应用)","menu.profile":"详情页","menu.profile.basic":"基础详情页","menu.profile.advanced":"高级详情页","menu.result":"结果页","menu.result.success":"成功页","menu.result.fail":"失败页","menu.exception":"异常页","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"触发错误","menu.account":"个人页","menu.account.center":"个人中心","menu.account.settings":"个人设置","menu.account.trigger":"触发报错","menu.account.logout":"退出登录","menu.wallet":"我的钱包","menu.docs":"文档中心","menu.docs.detail":"文档详情","menu.header.refreshPage":"刷新页面","menu.invite.friends":"邀请好友","app.setting.pagestyle":"整体风格设置","app.setting.pagestyle.light":"亮色菜单风格","app.setting.pagestyle.dark":"暗色菜单风格","app.setting.pagestyle.realdark":"暗黑模式","app.setting.themecolor":"主题色","app.setting.navigationmode":"导航模式","app.setting.sidemenu.nav":"侧边栏导航","app.setting.topmenu.nav":"顶部栏导航","app.setting.content-width":"内容区域宽度","app.setting.content-width.tooltip":"该设定仅 [顶部栏导航] 时有效","app.setting.content-width.fixed":"固定","app.setting.content-width.fluid":"流式","app.setting.fixedheader":"固定 Header","app.setting.fixedheader.tooltip":"固定 Header 时可配置","app.setting.autoHideHeader":"下滑时隐藏 Header","app.setting.fixedsidebar":"固定侧边菜单","app.setting.sidemenu":"侧边菜单布局","app.setting.topmenu":"顶部菜单布局","app.setting.othersettings":"其他设置","app.setting.weakmode":"色弱模式","app.setting.multitab":"多页签模式","app.setting.copy":"拷贝设置","app.setting.loading":"加载主题中","app.setting.copyinfo":"拷贝设置成功 src/config/defaultSettings.js","app.setting.copy.success":"复制完毕","app.setting.copy.fail":"复制失败","app.setting.theme.switching":"正在切换主题!","app.setting.production.hint":"配置栏只在开发环境用于预览,生产环境不会展现,请拷贝后手动修改配置文件","app.setting.themecolor.daybreak":"拂晓蓝(默认)","app.setting.themecolor.dust":"薄暮","app.setting.themecolor.volcano":"火山","app.setting.themecolor.sunset":"日暮","app.setting.themecolor.cyan":"明青","app.setting.themecolor.green":"极光绿","app.setting.themecolor.geekblue":"极客蓝","app.setting.themecolor.purple":"酱紫","app.setting.tooltip":"页面设置","notice.title":"通知中心","notice.empty":"暂无通知","notice.markAllRead":"全部已读","notice.clear":"清空通知","notice.close":"关闭","notice.justNow":"刚刚","notice.minutesAgo":"分钟前","notice.hoursAgo":"小时前","notice.daysAgo":"天前","notice.detailInfo":"详细信息","notice.aiDecision":"AI决策","notice.confidence":"置信度","notice.reasoning":"分析理由","notice.symbol":"标的代码","notice.currentPrice":"当前价格","notice.triggerPrice":"触发价格","notice.action":"操作","notice.quantity":"数量","notice.viewPortfolio":"查看持仓","notice.type.aiMonitor":"AI监控","notice.type.priceAlert":"价格提醒","notice.type.signal":"交易信号","notice.type.buy":"买入信号","notice.type.sell":"卖出信号","notice.type.hold":"持有建议","notice.type.trade":"交易执行","notice.type.notification":"系统通知","user.login.userName":"用户名","user.login.password":"密码","user.login.username.placeholder":"账户: admin","user.login.password.placeholder":"密码: admin or ant.design","user.login.message-invalid-credentials":"登录失败,请检查邮箱和验证码","user.login.message-invalid-verification-code":"验证码错误","user.login.tab-login-credentials":"账户密码登录","user.login.tab-login-email":"邮箱登录","user.login.tab-login-mobile":"手机号登录","user.login.captcha.placeholder":"请输入图形验证码","user.login.mobile.placeholder":"手机号","user.login.mobile.verification-code.placeholder":"验证码","user.login.email.placeholder":"请输入邮箱地址","user.login.email.verification-code.placeholder":"请输入验证码","user.login.email.sending":"验证码发送中...","user.login.email.send-success-title":"提示","user.login.email.send-success":"验证码发送成功,请查收邮件","user.login.sms.send-success":"验证码发送成功,请查收短信","user.login.remember-me":"自动登录","user.login.forgot-password":"忘记密码","user.login.sign-in-with":"其他登录方式","user.login.signup":"注册账户","user.login.login":"登录","user.register.register":"注册","user.register.email.placeholder":"邮箱","user.register.password.placeholder":"请至少输入 6 个字符。请不要使用容易被猜到的密码。","user.register.password.popover-message":"请至少输入 6 个字符。请不要使用容易被猜到的密码。","user.register.confirm-password.placeholder":"确认密码","user.register.get-verification-code":"获取验证码","user.register.sign-in":"使用已有账户登录","user.register-result.msg":"你的账户:{email} 注册成功","user.register-result.activation-email":"激活邮件已发送到你的邮箱中,邮件有效期为24小时。请及时登录邮箱,点击邮件中的链接激活账户。","user.register-result.back-home":"返回首页","user.register-result.view-mailbox":"查看邮箱","user.email.required":"请输入邮箱地址!","user.email.wrong-format":"邮箱地址格式错误!","user.userName.required":"请输入账户名或邮箱地址","user.password.required":"请输入密码!","user.password.twice.msg":"两次输入的密码不匹配!","user.password.strength.msg":"密码强度不够 ","user.password.strength.strong":"强度:强","user.password.strength.medium":"强度:中","user.password.strength.low":"强度:低","user.password.strength.short":"强度:太短","user.confirm-password.required":"请确认密码!","user.phone-number.required":"请输入正确的手机号","user.phone-number.wrong-format":"手机号格式错误!","user.verification-code.required":"请输入验证码!","user.captcha.required":"请输入图形验证码!","user.login.infos":"QuantDinger 是一个 AI 多智能体股票分析辅助工具,不具备证券投资咨询资质。平台中的所有分析结果、评分、参考意见均由 AI 基于历史数据自动生成,仅供学习、研究与技术交流使用,不构成任何投资建议或决策依据。股票投资存在市场风险、流动性风险、政策风险等多种风险,可能导致本金损失。用户应基于自身风险承受能力独立决策,使用本工具产生的任何投资行为及其后果由用户自行承担。市场有风险,投资需谨慎。","user.login.tab-login-web3":"Web3 登录","user.login.web3.tip":"使用钱包进行签名登录","user.login.web3.connect":"连接钱包并登录","user.login.web3.no-wallet":"未检测到钱包","user.login.web3.no-address":"未获取到钱包地址","user.login.web3.nonce-failed":"获取随机数失败","user.login.web3.verify-failed":"签名验证失败","user.login.web3.success":"登录成功","user.login.web3.failed":"钱包登录失败","nav.no_wallet":"未检测到钱包","nav.copy":"复制","nav.copy_success":"复制成功","user.login.oauth.google":"使用 Google 登录","user.login.oauth.github":"使用 GitHub 登录","user.login.oauth.loading":"正在跳转到授权页面...","user.login.oauth.failed":"OAuth 登录失败","user.login.oauth.get-url-failed":"获取授权链接失败","user.login.subtitle":"驱动的全球市场量化洞察","user.login.legal.title":"法律免责声明","user.login.legal.view":"查看法律免责声明","user.login.legal.collapse":"收起法律免责声明","user.login.legal.agree":"我已阅读并同意法律免责声明","user.login.legal.required":"请先阅读并勾选法律免责声明","user.login.legal.content":"QuantDinger 是一个 AI 多智能体股票分析辅助工具,不具备证券投资咨询资质。平台中的所有分析结果、评分、参考意见均由 AI 基于历史数据自动生成,仅供学习、研究与技术交流使用,不构成任何投资建议或决策依据。股票投资存在市场风险、流动性风险、政策风险等多种风险,可能导致本金损失。用户应基于自身风险承受能力独立决策,使用本工具产生的任何投资行为及其后果由用户自行承担。市场有风险,投资需谨慎。","user.login.privacy.title":"用户隐私条款","user.login.privacy.view":"查看用户隐私条款","user.login.privacy.collapse":"收起用户隐私条款","user.login.privacy.content":"我们重视您的隐私与数据保护。1) 收集范围:仅收集实现功能所需的信息(如邮箱、手机号、区号、Web3 钱包地址)以及必要的日志与设备信息。2) 使用目的:用于账户登录与安全校验、服务功能提供、问题排查与合规要求。3) 存储与安全:数据加密存储,并采取必要的权限与访问控制措施,尽力防止未经授权的访问、披露或丢失。4) 共享与第三方:除法律法规要求或履行服务所必需外,不会与第三方共享您的个人信息;若涉及第三方服务(如钱包、短信服务商),仅在实现功能所需的最小范围内处理。5) Cookies/本地存储:用于登录态与必要的会话维持(如令牌、PHPSESSID),您可在浏览器中进行清理或限制。6) 个人权利:您可根据法律法规行使查询、更正、删除、撤回同意等权利。7) 变更与通知:本条款更新后将在页面显著位置提示。继续使用本服务即表示您已阅读并同意更新内容。若您不同意本条款或其中任何更新,请停止使用本服务并联系我们。","user.login.username":"用户名","user.login.usernameRequired":"请输入用户名","user.login.passwordRequired":"请输入密码","user.login.tab":"登录","user.login.submit":"登录","user.login.register":"注册账户","user.login.forgotPassword":"忘记密码?","user.login.orLoginWith":"或使用以下方式登录","user.login.methodPassword":"密码登录","user.login.methodCode":"验证码登录","user.login.email":"邮箱","user.login.emailRequired":"请输入邮箱","user.login.emailInvalid":"邮箱格式不正确","user.login.verificationCode":"验证码","user.login.codeRequired":"请输入验证码","user.login.sendCode":"发送","user.login.codeSent":"验证码已发送","user.login.codeLoginHint":"新用户将自动注册","user.login.welcomeNew":"欢迎!","user.login.accountCreated":"您的账户已创建成功","user.oauth.processing":"正在处理登录...","user.oauth.error.missing_params":"缺少必要参数","user.oauth.error.invalid_state":"无效的状态参数","user.oauth.error.user_creation_failed":"创建用户失败","user.oauth.error.server_error":"服务器错误","user.register.tab":"注册","user.register.title":"创建账户","user.register.email":"邮箱","user.register.emailRequired":"请输入邮箱","user.register.emailInvalid":"邮箱格式不正确","user.register.verificationCode":"验证码","user.register.codeRequired":"请输入验证码","user.register.sendCode":"发送验证码","user.register.codeSent":"验证码已发送","user.register.username":"用户名","user.register.usernameRequired":"请输入用户名","user.register.usernameLength":"用户名需要3-30个字符","user.register.usernamePattern":"以字母开头,只能包含字母、数字和下划线","user.register.password":"密码","user.register.passwordRequired":"请输入密码","user.register.confirmPassword":"确认密码","user.register.confirmPasswordRequired":"请确认密码","user.register.passwordMismatch":"两次输入的密码不一致","user.register.submit":"创建账户","user.register.haveAccount":"已有账户?","user.register.login":"登录","user.register.success":"注册成功","user.register.pleaseLogin":"请使用新账户登录","user.register.pwdMinLength":"至少8个字符","user.register.pwdUppercase":"至少包含一个大写字母","user.register.pwdLowercase":"至少包含一个小写字母","user.register.pwdNumber":"至少包含一个数字","user.resetPassword.title":"重置密码","user.resetPassword.email":"邮箱","user.resetPassword.emailRequired":"请输入邮箱","user.resetPassword.emailInvalid":"邮箱格式不正确","user.resetPassword.verificationCode":"验证码","user.resetPassword.codeRequired":"请输入验证码","user.resetPassword.sendCode":"发送验证码","user.resetPassword.codeSent":"验证码已发送","user.resetPassword.next":"下一步","user.resetPassword.backToLogin":"返回登录","user.resetPassword.resettingFor":"正在为以下邮箱重置密码","user.resetPassword.newPassword":"新密码","user.resetPassword.passwordRequired":"请输入新密码","user.resetPassword.confirmPassword":"确认新密码","user.resetPassword.confirmPasswordRequired":"请确认新密码","user.resetPassword.submit":"重置密码","user.resetPassword.back":"返回","user.resetPassword.successTitle":"密码重置成功","user.resetPassword.successSubtitle":"您现在可以使用新密码登录了","user.resetPassword.goToLogin":"前往登录","user.security.retry":"重试","profile.passwordHintNew":"为了安全,修改密码需要邮箱验证。密码至少8个字符,包含大小写字母和数字。","profile.verificationCode":"验证码","profile.codeRequired":"请输入验证码","profile.codePlaceholder":"输入验证码","profile.sendCode":"发送验证码","profile.codeSent":"验证码已发送","profile.codeWillSendTo":"验证码将发送至","profile.noEmailWarning":"请先在基本信息中设置邮箱","account.basicInfo":"基础信息","account.id":"用户ID","account.username":"用户名","account.nickname":"昵称","account.email":"邮箱","account.mobile":"手机号","account.web3address":"钱包地址","account.pid":"推荐人ID","account.level":"用户等级","account.money":"余额","account.qdtBalance":"QDT 余额","account.score":"积分","account.createtime":"注册时间","account.inviteLink":"邀请链接","account.recharge":"充值","account.rechargeTip":"请使用微信或支付宝扫描下方二维码进行充值","account.qrCodePlaceholder":"二维码占位符(模拟)","account.rechargeAmount":"充值金额","account.enterAmount":"请输入充值金额","account.rechargeHint":"最小充值金额:1 QDT","account.confirmRecharge":"确认充值","account.enterValidAmount":"请输入有效的充值金额","account.rechargeSuccess":"充值成功!已充值 {amount} QDT","account.settings.menuMap.basic":"基本设置","account.settings.menuMap.security":"安全设置","account.settings.menuMap.notification":"新消息通知","account.settings.menuMap.moneyLog":"资金明细","account.moneyLog.empty":"暂无资金明细","account.moneyLog.total":"共 {total} 条记录","account.moneyLog.type.purchase":"购买指标","account.moneyLog.type.recharge":"充值","account.moneyLog.type.refund":"退款","account.moneyLog.type.reward":"奖励","account.moneyLog.type.income":"指标收入","account.moneyLog.type.commission":"平台手续费","wallet.balance":"QDT 余额","wallet.recharge":"充值","wallet.withdraw":"提现","wallet.filter":"筛选","wallet.reset":"重置","wallet.totalRecharge":"累计充值","wallet.totalWithdraw":"累计提现","wallet.totalIncome":"累计收入","wallet.records":"交易记录与资金明细","wallet.tradingRecords":"交易记录","wallet.moneyLog":"资金明细","wallet.rechargeTip":"请使用微信或支付宝扫描下方二维码进行充值","wallet.qrCodePlaceholder":"二维码占位符(模拟)","wallet.rechargeAmount":"充值金额","wallet.enterAmount":"请输入充值金额","wallet.rechargeHint":"最小充值金额:1 QDT","wallet.confirmRecharge":"确认充值","wallet.enterValidAmount":"请输入有效的充值金额","wallet.rechargeSuccess":"充值成功!已充值 {amount} QDT","wallet.rechargeFailed":"充值失败","wallet.withdrawTip":"请输入提现金额和提现地址","wallet.withdrawAmount":"提现金额","wallet.enterWithdrawAmount":"请输入提现金额","wallet.withdrawHint":"最小提现金额:1 QDT","wallet.withdrawAddress":"提现地址(可选)","wallet.enterWithdrawAddress":"请输入提现地址","wallet.confirmWithdraw":"确认提现","wallet.enterValidWithdrawAmount":"请输入有效的提现金额","wallet.insufficientBalance":"余额不足","wallet.withdrawSuccess":"提现成功!已提现 {amount} QDT","wallet.withdrawFailed":"提现失败","wallet.noTradingRecords":"暂无交易记录","wallet.noMoneyLog":"暂无资金明细","wallet.loadTradingRecordsFailed":"加载交易记录失败","wallet.loadMoneyLogFailed":"加载资金明细失败","wallet.moneyLogTotal":"共 {total} 条记录","wallet.moneyLogTypeTitle":"类型","wallet.moneyLogType.all":"全部类型","wallet.table.time":"时间","wallet.table.type":"类型","wallet.table.price":"价格","wallet.table.amount":"数量","wallet.table.money":"金额","wallet.table.balance":"余额","wallet.table.memo":"备注","wallet.table.value":"价值","wallet.table.profit":"盈亏","wallet.table.commission":"手续费","wallet.table.total":"共 {total} 条记录","wallet.tradeType.buy":"买入","wallet.tradeType.sell":"卖出","wallet.tradeType.liquidation":"强平","wallet.tradeType.openLong":"开多","wallet.tradeType.addLong":"加多","wallet.tradeType.closeLong":"平多","wallet.tradeType.closeLongStop":"止损平多","wallet.tradeType.closeLongProfit":"止盈平多","wallet.tradeType.openShort":"开空","wallet.tradeType.addShort":"加空","wallet.tradeType.closeShort":"平空","wallet.tradeType.closeShortStop":"止损平空","wallet.tradeType.closeShortProfit":"止盈平空","wallet.moneyLogType.purchase":"购买指标","wallet.moneyLogType.recharge":"充值","wallet.moneyLogType.withdraw":"提现","wallet.moneyLogType.refund":"退款","wallet.moneyLogType.reward":"奖励","wallet.moneyLogType.income":"收入","wallet.moneyLogType.commission":"手续费","wallet.web3Address.required":"请先填写Web3钱包地址","wallet.web3Address.requiredDescription":"充值前需要先绑定您的Web3钱包地址,用于接收充值","wallet.web3Address.placeholder":"请输入您的Web3钱包地址(0x开头)","wallet.web3Address.save":"保存钱包地址","wallet.web3Address.saveSuccess":"钱包地址保存成功","wallet.web3Address.saveFailed":"保存钱包地址失败","wallet.web3Address.invalidFormat":"请输入有效的Web3钱包地址(以太坊格式:0x开头42位字符,或TRC20格式:T开头34位字符)","wallet.selectCoin":"选择币种","wallet.selectChain":"选择链","wallet.chain.eth":"ETH(ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"BSC","wallet.targetQdtAmount":"想要兑换的QDT数量(可选)","wallet.targetQdtAmount.placeholder":"请输入想要兑换的QDT数量,当前QDT价格:{price} USDT","wallet.targetQdtAmount.requiredUsdt":"需要充值:{amount} USDT","wallet.rechargeAddress":"充值地址","wallet.copyAddress":"复制","wallet.copySuccess":"复制成功!","wallet.copyFailed":"复制失败,请手动复制","wallet.rechargeAddressHint":"请确保使用{chain}链向此地址充值{coin}","wallet.qdtPrice.loading":"加载中...","wallet.rechargeTip.new":"请选择币种和链,然后扫描下方二维码进行充值","wallet.exchangeRate":"1 QDT ≈ {rate} USDT","wallet.withdrawableAmount":"可提现金额","wallet.totalBalance":"总余额","wallet.insufficientWithdrawable":"可提现金额不足,当前可提现:{amount} QDT","wallet.withdrawAddressRequired":"请输入提现地址","wallet.withdrawAddressHint":"请确保地址正确,提现后无法撤销","wallet.withdrawSubmitSuccess":"提现申请提交成功,请等待审核","menu.footer.contactUs":"联系我们","menu.footer.getSupport":"获取支持","menu.footer.socialAccounts":"社交账户","menu.footer.userAgreement":"用户协议","menu.footer.privacyPolicy":"隐私条例","menu.footer.support":"Support","menu.footer.featureRequest":"Feature request","menu.footer.email":"Email","menu.footer.liveChat":"24/7 live chat","dashboard.analysis.title":"Multi-Dimensional Analysis","dashboard.analysis.subtitle":"AI驱动的综合金融分析平台","dashboard.analysis.selectSymbol":"选择或输入标的代码","dashboard.analysis.selectModel":"选择模型","dashboard.analysis.startAnalysis":"开始分析","dashboard.analysis.history":"历史记录","dashboard.analysis.tab.overview":"综合分析","dashboard.analysis.tab.fundamental":"基本面","dashboard.analysis.tab.technical":"技术","dashboard.analysis.tab.news":"新闻","dashboard.analysis.tab.sentiment":"情绪","dashboard.analysis.tab.risk":"风险","dashboard.analysis.tab.debate":"多空辩论","dashboard.analysis.tab.decision":"最终决策","dashboard.analysis.empty.selectSymbol":"选择标的开始分析","dashboard.analysis.empty.selectSymbolDesc":"从自选股列表中选择或输入标的代码,获取多维度AI分析报告","dashboard.analysis.empty.startAnalysis":'点击"开始分析"按钮进行多维度分析',"dashboard.analysis.empty.startAnalysisDesc":"我们将从基本面、技术、新闻、情绪和风险等多个维度为您提供全面的分析","dashboard.analysis.empty.noData":"暂无{type}分析数据,请先进行综合分析","dashboard.analysis.empty.noWatchlist":"暂无自选股","dashboard.analysis.empty.noHistory":"暂无历史记录","dashboard.analysis.empty.watchlistHint":"暂无自选股,请先","dashboard.analysis.empty.noDebateData":"暂无辩论数据","dashboard.analysis.empty.noDecisionData":"暂无决策数据","dashboard.analysis.empty.selectAgent":"请选择一个 Agent 查看分析结果","dashboard.analysis.loading.analyzing":"正在分析中,请稍候...","dashboard.analysis.loading.fundamental":"正在分析基本面数据...","dashboard.analysis.loading.technical":"正在分析技术指标...","dashboard.analysis.loading.news":"正在分析新闻数据...","dashboard.analysis.loading.sentiment":"正在分析市场情绪...","dashboard.analysis.loading.risk":"正在评估风险...","dashboard.analysis.loading.debate":"正在进行多空辩论...","dashboard.analysis.loading.decision":"正在生成最终决策...","dashboard.analysis.score.overall":"综合评分","dashboard.analysis.score.recommendation":"投资建议","dashboard.analysis.score.confidence":"置信度","dashboard.analysis.dimension.fundamental":"基本面","dashboard.analysis.dimension.technical":"技术","dashboard.analysis.dimension.news":"新闻","dashboard.analysis.dimension.sentiment":"情绪","dashboard.analysis.dimension.risk":"风险","dashboard.analysis.card.dimensionScores":"各维度评分","dashboard.analysis.card.overviewReport":"综合分析报告","dashboard.analysis.card.financialMetrics":"财务指标","dashboard.analysis.card.fundamentalReport":"基本面分析报告","dashboard.analysis.card.technicalIndicators":"技术指标","dashboard.analysis.card.technicalReport":"技术分析报告","dashboard.analysis.card.newsList":"相关新闻","dashboard.analysis.card.newsReport":"新闻分析报告","dashboard.analysis.card.sentimentIndicators":"情绪指标","dashboard.analysis.card.sentimentReport":"情绪分析报告","dashboard.analysis.card.riskMetrics":"风险指标","dashboard.analysis.card.riskReport":"风险评估报告","dashboard.analysis.card.bullView":"看涨观点 (Bull)","dashboard.analysis.card.bearView":"看跌观点 (Bear)","dashboard.analysis.card.researchConclusion":"研究员结论","dashboard.analysis.card.traderPlan":"交易员计划","dashboard.analysis.card.riskDebate":"风险委员会辩论","dashboard.analysis.card.finalDecision":"最终决策 (Final Decision)","dashboard.analysis.card.tradePlanDetail":"交易计划详情","dashboard.analysis.tradingPlan.entry_price":"入场价格","dashboard.analysis.tradingPlan.position_size":"仓位大小","dashboard.analysis.tradingPlan.stop_loss":"止损","dashboard.analysis.tradingPlan.take_profit":"止盈","dashboard.analysis.label.confidence":"置信度","dashboard.analysis.label.keyPoints":"核心要点","dashboard.analysis.label.riskWarning":"风险提示","dashboard.analysis.risk.risky":"激进派观点 (Risky)","dashboard.analysis.risk.neutral":"中立派观点 (Neutral)","dashboard.analysis.risk.safe":"保守派观点 (Safe)","dashboard.analysis.risk.conclusion":"结论","dashboard.analysis.feature.fundamental":"基本面分析","dashboard.analysis.feature.technical":"技术分析","dashboard.analysis.feature.news":"新闻分析","dashboard.analysis.feature.sentiment":"情绪分析","dashboard.analysis.feature.risk":"风险评估","dashboard.analysis.watchlist.title":"我的自选股","dashboard.analysis.watchlist.add":"添加","dashboard.analysis.watchlist.addStock":"添加股票","dashboard.analysis.modal.addStock.title":"添加自选股","dashboard.analysis.modal.addStock.confirm":"确定","dashboard.analysis.modal.addStock.cancel":"取消","dashboard.analysis.modal.addStock.market":"市场类型","dashboard.analysis.modal.addStock.marketPlaceholder":"请选择市场","dashboard.analysis.modal.addStock.marketRequired":"请选择市场类型","dashboard.analysis.modal.addStock.symbol":"股票代码","dashboard.analysis.modal.addStock.symbolPlaceholder":"例如: AAPL, TSLA, GOOGL, 000001, BTC","dashboard.analysis.modal.addStock.symbolRequired":"请输入股票代码","dashboard.analysis.modal.addStock.searchPlaceholder":"搜索标的代码或名称","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"搜索或输入标的代码(如:AAPL、BTC/USDT、EUR/USD)","dashboard.analysis.modal.addStock.searchOrInputHint":"支持搜索数据库中的标的,或直接输入代码(系统将自动获取名称)","dashboard.analysis.modal.addStock.search":"搜索","dashboard.analysis.modal.addStock.searchResults":"搜索结果","dashboard.analysis.modal.addStock.hotSymbols":"热门标的","dashboard.analysis.modal.addStock.noHotSymbols":"暂无热门标的","dashboard.analysis.modal.addStock.selectedSymbol":"已选标的","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"请先选择一个标的","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"请先选择一个标的或输入标的代码","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"请输入标的代码","dashboard.analysis.modal.addStock.pleaseSelectMarket":"请先选择市场类型","dashboard.analysis.modal.addStock.searchFailed":"搜索失败,请稍后重试","dashboard.analysis.modal.addStock.noSearchResults":"未找到匹配的标的","dashboard.analysis.modal.addStock.willAutoFetchName":"系统将自动获取名称","dashboard.analysis.modal.addStock.addDirectly":"直接添加","dashboard.analysis.modal.addStock.nameWillBeFetched":"名称将在添加时自动获取","dashboard.analysis.market.USStock":"美股","dashboard.analysis.market.Crypto":"加密货币","dashboard.analysis.market.Forex":"外汇","dashboard.analysis.market.Futures":"期货","dashboard.analysis.modal.history.title":"历史分析记录","dashboard.analysis.modal.history.viewResult":"查看结果","dashboard.analysis.modal.history.completeTime":"完成时间","dashboard.analysis.modal.history.error":"错误","dashboard.analysis.status.pending":"待处理","dashboard.analysis.status.processing":"处理中","dashboard.analysis.status.completed":"已完成","dashboard.analysis.status.failed":"失败","dashboard.analysis.message.selectSymbol":"请先选择标的","dashboard.analysis.message.taskCreated":"分析任务已创建,正在后台执行...","dashboard.analysis.message.analysisComplete":"分析完成","dashboard.analysis.message.analysisCompleteCache":"分析完成(使用缓存数据)","dashboard.analysis.message.analysisFailed":"分析失败,请稍后重试","dashboard.analysis.message.addStockSuccess":"添加成功","dashboard.analysis.message.addStockFailed":"添加失败","dashboard.analysis.message.removeStockSuccess":"移除成功","dashboard.analysis.message.removeStockFailed":"移除失败","dashboard.analysis.message.resumingAnalysis":"正在恢复分析任务...","dashboard.analysis.message.deleteSuccess":"删除成功","dashboard.analysis.message.deleteFailed":"删除失败","dashboard.analysis.modal.history.delete":"删除","dashboard.analysis.modal.history.deleteConfirm":"确定要删除这条分析记录吗?","dashboard.analysis.test":"工专路 {no} 号店","dashboard.analysis.introduce":"指标说明","dashboard.analysis.total-sales":"总销售额","dashboard.analysis.day-sales":"日均销售额¥","dashboard.analysis.visits":"访问量","dashboard.analysis.visits-trend":"访问量趋势","dashboard.analysis.visits-ranking":"门店访问量排名","dashboard.analysis.day-visits":"日访问量","dashboard.analysis.week":"周同比","dashboard.analysis.day":"日同比","dashboard.analysis.payments":"支付笔数","dashboard.analysis.conversion-rate":"转化率","dashboard.analysis.operational-effect":"运营活动效果","dashboard.analysis.sales-trend":"销售趋势","dashboard.analysis.sales-ranking":"门店销售额排名","dashboard.analysis.all-year":"全年","dashboard.analysis.all-month":"本月","dashboard.analysis.all-week":"本周","dashboard.analysis.all-day":"今日","dashboard.analysis.search-users":"搜索用户数","dashboard.analysis.per-capita-search":"人均搜索次数","dashboard.analysis.online-top-search":"线上热门搜索","dashboard.analysis.the-proportion-of-sales":"销售额类别占比","dashboard.analysis.dropdown-option-one":"操作一","dashboard.analysis.dropdown-option-two":"操作二","dashboard.analysis.channel.all":"全部渠道","dashboard.analysis.channel.online":"线上","dashboard.analysis.channel.stores":"门店","dashboard.analysis.sales":"销售额","dashboard.analysis.traffic":"客流量","dashboard.analysis.table.rank":"排名","dashboard.analysis.table.search-keyword":"搜索关键词","dashboard.analysis.table.users":"用户数","dashboard.analysis.table.weekly-range":"周涨幅","dashboard.indicator.selectSymbol":"选择或输入标的代码","dashboard.indicator.emptyWatchlistHint":"暂无自选股,请先添加","dashboard.indicator.hint.selectSymbol":"请选择标的开始分析","dashboard.indicator.hint.selectSymbolDesc":"在上方搜索框中选择或输入股票代码,查看K线图表和技术指标","dashboard.indicator.retry":"重试","dashboard.indicator.panel.title":"技术指标","dashboard.indicator.panel.realtimeOn":"关闭实时更新","dashboard.indicator.panel.realtimeOff":"开启实时更新","dashboard.indicator.panel.themeLight":"切换到深色主题","dashboard.indicator.panel.themeDark":"切换到浅色主题","dashboard.indicator.section.enabled":"已启用","dashboard.indicator.section.added":"我添加的指标","dashboard.indicator.section.custom":"自己创建的指标","dashboard.indicator.section.bought":"我选购的指标","dashboard.indicator.section.myCreated":"我创建的指标","dashboard.indicator.section.purchased":"我购买的指标","dashboard.indicator.empty":"暂无指标,请先添加或创建指标","dashboard.indicator.emptyPurchased":"暂无购买的指标,去指标市场看看","dashboard.indicator.buy":"购买指标","dashboard.indicator.action.start":"启动","dashboard.indicator.action.stop":"关闭","dashboard.indicator.action.edit":"编辑","dashboard.indicator.action.delete":"删除","dashboard.indicator.action.backtest":"回测","dashboard.indicator.action.publish":"发布到社区","dashboard.indicator.action.unpublish":"已发布(点击管理)","dashboard.indicator.status.normal":"正常","dashboard.indicator.status.normalPermanent":"正常(永久有效)","dashboard.indicator.status.expired":"已过期","dashboard.indicator.expiry.permanent":"永久有效","dashboard.indicator.expiry.noExpiry":"无到期时间","dashboard.indicator.expiry.expired":"已过期:{date}","dashboard.indicator.expiry.expiresOn":"到期时间:{date}","dashboard.indicator.delete.confirmTitle":"确认删除","dashboard.indicator.delete.confirmContent":'确定要删除指标"{name}"吗?此操作不可恢复。',"dashboard.indicator.delete.confirmOk":"删除","dashboard.indicator.delete.confirmCancel":"取消","dashboard.indicator.delete.success":"删除成功","dashboard.indicator.delete.failed":"删除失败","dashboard.indicator.save.success":"保存成功","dashboard.indicator.save.failed":"保存失败","dashboard.indicator.publish.title":"发布到社区","dashboard.indicator.publish.editTitle":"管理发布","dashboard.indicator.publish.hint":'发布后,其他用户可以在"指标社区"中看到并购买您的指标',"dashboard.indicator.publish.pricingType":"定价方式","dashboard.indicator.publish.free":"免费","dashboard.indicator.publish.paid":"付费","dashboard.indicator.publish.price":"价格","dashboard.indicator.publish.description":"指标描述","dashboard.indicator.publish.descriptionPlaceholder":"请输入指标的详细描述,帮助其他用户了解指标功能...","dashboard.indicator.publish.confirm":"确认发布","dashboard.indicator.publish.update":"更新发布","dashboard.indicator.publish.unpublish":"取消发布","dashboard.indicator.publish.success":"发布成功","dashboard.indicator.publish.failed":"发布失败","dashboard.indicator.publish.unpublishSuccess":"已取消发布","dashboard.indicator.publish.unpublishFailed":"取消发布失败","dashboard.indicator.error.loadWatchlistFailed":"加载自选股失败","dashboard.indicator.error.chartNotReady":"图表组件未初始化,请先选择标的并等待图表加载完成","dashboard.indicator.error.chartMethodNotReady":"图表组件方法未就绪,请稍后重试","dashboard.indicator.error.chartExecuteNotReady":"图表组件执行方法未就绪,请稍后重试","dashboard.indicator.error.parseFailed":"无法解析Python代码","dashboard.indicator.error.parseFailedCheck":"无法解析Python代码,请检查代码格式","dashboard.indicator.error.addIndicatorFailed":"添加指标失败","dashboard.indicator.error.runIndicatorFailed":"运行指标失败","dashboard.indicator.error.pleaseLogin":"请先登录","dashboard.indicator.error.loadDataFailed":"数据加载失败","dashboard.indicator.error.loadDataFailedDesc":"请检查网络连接","dashboard.indicator.error.tiingoSubscription":"外汇1分钟数据需要 Tiingo 付费订阅,请使用其他时间周期或升级订阅","dashboard.indicator.error.pythonEngineFailed":"Python 引擎加载失败,指标功能可能无法使用","dashboard.indicator.error.chartInitFailed":"图表初始化失败","dashboard.indicator.warning.enterCode":"请先输入指标代码","dashboard.indicator.warning.pyodideLoadFailed":"Python 引擎加载失败","dashboard.indicator.warning.pyodideLoadFailedDesc":"您当前所在区域或网络环境无法使用该功能","dashboard.indicator.warning.chartNotInitialized":"图表未初始化,无法使用画线工具","dashboard.indicator.success.runIndicator":"指标运行成功","dashboard.indicator.success.clearDrawings":"已清除所有画线","dashboard.indicator.sma":"SMA (均线组合)","dashboard.indicator.ema":"EMA (指数均线组合)","dashboard.indicator.rsi":"RSI (相对强弱)","dashboard.indicator.macd":"MACD","dashboard.indicator.bb":"布林带 (Bollinger Bands)","dashboard.indicator.atr":"ATR (平均真实波幅)","dashboard.indicator.cci":"CCI (商品通道指数)","dashboard.indicator.williams":"Williams %R (威廉指标)","dashboard.indicator.mfi":"MFI (资金流量指标)","dashboard.indicator.adx":"ADX (平均趋向指数)","dashboard.indicator.obv":"OBV (能量潮)","dashboard.indicator.adosc":"ADOSC (积累/派发振荡器)","dashboard.indicator.ad":"AD (积累/派发线)","dashboard.indicator.kdj":"KDJ (随机指标)","dashboard.indicator.signal.buy":"BUY","dashboard.indicator.signal.sell":"SELL","dashboard.indicator.signal.supertrendBuy":"SuperTrend Buy","dashboard.indicator.signal.supertrendSell":"SuperTrend Sell","dashboard.indicator.chart.kline":"K线","dashboard.indicator.chart.volume":"成交量","dashboard.indicator.chart.uptrend":"Up Trend","dashboard.indicator.chart.downtrend":"Down Trend","dashboard.indicator.tooltip.time":"时间","dashboard.indicator.tooltip.open":"开","dashboard.indicator.tooltip.close":"收","dashboard.indicator.tooltip.high":"高","dashboard.indicator.tooltip.low":"低","dashboard.indicator.tooltip.volume":"成交量","dashboard.indicator.drawing.line":"线段","dashboard.indicator.drawing.horizontalLine":"水平线","dashboard.indicator.drawing.verticalLine":"垂直线","dashboard.indicator.drawing.ray":"射线","dashboard.indicator.drawing.straightLine":"直线","dashboard.indicator.drawing.parallelLine":"平行线","dashboard.indicator.drawing.priceLine":"价格线","dashboard.indicator.drawing.priceChannel":"价格通道","dashboard.indicator.drawing.fibonacciLine":"斐波那契线","dashboard.indicator.drawing.measure":"测量","dashboard.indicator.drawing.clearAll":"清除所有画线","dashboard.indicator.market.USStock":"美股","dashboard.indicator.market.Crypto":"加密货币","dashboard.indicator.market.Forex":"外汇","dashboard.indicator.market.Futures":"期货","dashboard.indicator.create":"创建指标","dashboard.indicator.editor.title":"创建/编辑指标","dashboard.indicator.editor.name":"指标名称","dashboard.indicator.editor.nameRequired":"请输入指标名称","dashboard.indicator.editor.namePlaceholder":"请输入指标名称","dashboard.indicator.editor.description":"指标描述","dashboard.indicator.editor.descriptionPlaceholder":"请输入指标描述(可选)","dashboard.indicator.editor.code":"指标脚本(Python)","dashboard.indicator.editor.codeRequired":"请输入指标代码","dashboard.indicator.editor.codePlaceholder":"请输入Python代码","dashboard.indicator.editor.run":"运行","dashboard.indicator.editor.runHint":"点击运行按钮可以在K线图上预览指标效果","dashboard.indicator.editor.guide":"开发指南","dashboard.indicator.editor.guideTitle":"Python 指标开发指南","dashboard.indicator.editor.save":"保存","dashboard.indicator.editor.cancel":"取消","dashboard.indicator.editor.unnamed":"未命名指标","dashboard.indicator.editor.publishToCommunity":"发布到社区","dashboard.indicator.editor.publishToCommunityHint":"发布后,其他用户可以在社区中查看和使用您的指标","dashboard.indicator.editor.indicatorType":"指标类型","dashboard.indicator.editor.indicatorTypeRequired":"请选择指标类型","dashboard.indicator.editor.indicatorTypePlaceholder":"请选择指标类型","dashboard.indicator.editor.previewImage":"预览图","dashboard.indicator.editor.uploadImage":"上传图片","dashboard.indicator.editor.previewImageHint":"建议尺寸:800x400,大小不超过2MB","dashboard.indicator.editor.pricing":"售价(QDT)","dashboard.indicator.editor.pricingType.free":"免费","dashboard.indicator.editor.pricingType.permanent":"永久","dashboard.indicator.editor.pricingType.monthly":"月付","dashboard.indicator.editor.price":"价格","dashboard.indicator.editor.priceRequired":"请输入价格","dashboard.indicator.editor.pricePlaceholder":"请输入价格","dashboard.indicator.editor.pricingHint":"免费指标虽然价格为0,但平台会根据您的指标使用量和好评率给予奖励(QDT)","dashboard.indicator.editor.aiGenerate":"智能生成","dashboard.indicator.editor.aiPromptPlaceholder":"请描述你的信号逻辑(只输出 buy/sell)与绘图(plots)。仓位/风控/加减仓请在回测配置中设定。","dashboard.indicator.editor.aiGenerateBtn":"AI生成代码","dashboard.indicator.editor.aiPromptRequired":"请输入您的想法","dashboard.indicator.editor.aiGenerateSuccess":"代码生成成功","dashboard.indicator.editor.aiGenerateError":"代码生成失败,请稍后重试","dashboard.indicator.editor.verifyCode":"代码检查","dashboard.indicator.editor.verifyCodeSuccess":"代码检查通过","dashboard.indicator.editor.verifyCodeFailed":"代码检查未通过","dashboard.indicator.editor.verifyCodeEmpty":"代码不能为空","dashboard.indicator.boundary.message":"提示:指标脚本只负责“计算 + 绘图 + buy/sell 信号”;仓位、风控、加减仓、手续费/滑点属于策略执行配置。","dashboard.indicator.boundary.indicatorRule":"指标脚本请只输出 buy/sell(并设定 df['buy']/df['sell'])。不要在脚本内撰写仓位管理、止盈止损、加减仓。","dashboard.indicator.boundary.backtestRule":"规则:同一根K线若出现主信号(buy/sell→开/平仓/反手),本K线将跳过所有加仓与减仓。","dashboard.indicator.paramsConfig.title":"指标参数配置","dashboard.indicator.paramsConfig.noParams":"该指标没有可配置的参数","dashboard.indicator.paramsConfig.hint":"设置参数后点击确定运行指标","dashboard.indicator.backtest.title":"指标回测","dashboard.indicator.backtest.config":"回测参数","dashboard.indicator.backtest.startDate":"开始日期","dashboard.indicator.backtest.endDate":"结束日期","dashboard.indicator.backtest.selectStartDate":"选择开始日期","dashboard.indicator.backtest.selectEndDate":"选择结束日期","dashboard.indicator.backtest.startDateRequired":"请选择开始日期","dashboard.indicator.backtest.endDateRequired":"请选择结束日期","dashboard.indicator.backtest.initialCapital":"初始资金","dashboard.indicator.backtest.initialCapitalRequired":"请输入初始资金","dashboard.indicator.backtest.commission":"手续费率(%)","dashboard.indicator.backtest.commissionHint":"按名义价值(含杠杆)收取;每笔成交(开/平仓)都会从余额扣除。","dashboard.indicator.backtest.leverage":"杠杆倍率","dashboard.indicator.backtest.timeframe":"K线周期","dashboard.indicator.backtest.tradeDirection":"交易方向","dashboard.indicator.backtest.longOnly":"做多","dashboard.indicator.backtest.shortOnly":"做空","dashboard.indicator.backtest.both":"双向","dashboard.indicator.backtest.run":"开始回测","dashboard.indicator.backtest.rerun":"重新回测","dashboard.indicator.backtest.close":"关闭","dashboard.indicator.backtest.running":"正在进行指标回测...","dashboard.indicator.backtest.loadingTip1":"正在获取历史K线数据...","dashboard.indicator.backtest.loadingTip2":"正在执行策略信号计算...","dashboard.indicator.backtest.loadingTip3":"正在模拟交易执行...","dashboard.indicator.backtest.loadingTip4":"正在计算回测指标...","dashboard.indicator.backtest.loadingTip5":"即将完成,请稍候...","dashboard.indicator.backtest.results":"回测结果","dashboard.indicator.backtest.totalReturn":"总收益率","dashboard.indicator.backtest.annualReturn":"年化收益","dashboard.indicator.backtest.maxDrawdown":"最大回撤","dashboard.indicator.backtest.sharpeRatio":"夏普比率","dashboard.indicator.backtest.winRate":"胜率","dashboard.indicator.backtest.profitFactor":"盈亏比","dashboard.indicator.backtest.totalTrades":"交易次数","dashboard.indicator.totalReturn":"总收益率","dashboard.indicator.annualReturn":"年化收益率","dashboard.indicator.maxDrawdown":"最大回撤","dashboard.indicator.sharpeRatio":"夏普比率","dashboard.indicator.winRate":"胜率","dashboard.indicator.profitFactor":"盈亏比","dashboard.indicator.totalTrades":"总交易次数","dashboard.indicator.backtest.totalCommission":"总手续费","dashboard.indicator.backtest.equityCurve":"收益曲线","dashboard.indicator.backtest.strategy":"指标收益","dashboard.indicator.backtest.benchmark":"基准收益","dashboard.indicator.backtest.tradeHistory":"交易记录","dashboard.indicator.backtest.tradeTime":"时间","dashboard.indicator.backtest.tradeType":"类型","dashboard.indicator.backtest.buy":"买入","dashboard.indicator.backtest.sell":"卖出","dashboard.indicator.backtest.liquidation":"爆仓","dashboard.indicator.backtest.openLong":"开多","dashboard.indicator.backtest.closeLong":"平多","dashboard.indicator.backtest.closeLongStop":"平多(止损)","dashboard.indicator.backtest.closeLongProfit":"平多(止盈)","dashboard.indicator.backtest.addLong":"加多仓","dashboard.indicator.backtest.openShort":"开空","dashboard.indicator.backtest.closeShort":"平空","dashboard.indicator.backtest.closeShortStop":"平空(止损)","dashboard.indicator.backtest.closeShortProfit":"平空(止盈)","dashboard.indicator.backtest.addShort":"加空仓","dashboard.indicator.backtest.price":"价格","dashboard.indicator.backtest.amount":"数量","dashboard.indicator.backtest.balance":"账户余额","dashboard.indicator.backtest.profit":"盈亏","dashboard.indicator.backtest.success":"回测完成","dashboard.indicator.backtest.failed":"回测失败,请稍后重试","dashboard.indicator.backtest.quickSelect":"快速选择","dashboard.indicator.backtest.precisionMode":"回测精度模式","dashboard.indicator.backtest.estimatedCandles":"预计处理约 {count} 根K线","dashboard.indicator.backtest.highPrecisionDesc":"使用1分钟级别K线进行高精度回测,止损止盈触发更精确","dashboard.indicator.backtest.mediumPrecisionDesc":"回测区间超过30天,使用5分钟级别K线以平衡精度与性能","dashboard.indicator.backtest.standardModeWarning":"使用标准回测模式","dashboard.indicator.backtest.standardModeDesc":"当前配置不支持高精度回测,将使用策略K线进行回测","dashboard.indicator.backtest.onlyCryptoSupported":"高精度回测仅支持加密货币市场","dashboard.indicator.backtest.noIndicatorCode":"该指标没有可回测的代码","dashboard.indicator.backtest.noSymbol":"请先选择交易标的","dashboard.indicator.backtest.dateRangeExceeded":"回测时间范围超出限制:{timeframe}周期最多可回测{maxRange}","dashboard.indicator.backtest.dateRangeExceededDays":"回测时间范围超出限制:{timeframe}周期最多可回测{maxRange}({maxDays}天)","dashboard.indicator.backtest.metaLine":"标的:{symbol} | 市场:{market} | 周期:{timeframe}","dashboard.indicator.backtest.savedRunId":"回测已保存,记录ID:{id}","dashboard.indicator.backtest.historyTitle":"回测记录","dashboard.indicator.backtest.historyRefresh":"刷新","dashboard.indicator.backtest.historyView":"查看","dashboard.indicator.backtest.historyNoData":"暂无回测记录","dashboard.indicator.backtest.historyUseCurrent":"仅目前币种/周期","dashboard.indicator.backtest.historyFilterSymbol":"币种(Symbol)","dashboard.indicator.backtest.historyFilterTimeframe":"周期(Timeframe)","dashboard.indicator.backtest.historyApply":"应用筛选","dashboard.indicator.backtest.historyAIAnalyze":"AI分析","dashboard.indicator.backtest.historyAIAnalyzeTitle":"AI 分析建议","dashboard.indicator.backtest.historyNoAIResult":"暂无 AI 分析结果","dashboard.indicator.backtest.historyRunId":"记录ID","dashboard.indicator.backtest.historyCreatedAt":"时间","dashboard.indicator.backtest.historyRange":"区间","dashboard.indicator.backtest.historyStatus":"状态","dashboard.indicator.backtest.historyStatusSuccess":"成功","dashboard.indicator.backtest.historyStatusFailed":"失败","dashboard.indicator.backtest.historyActions":"操作","dashboard.indicator.backtest.prev":"上一步","dashboard.indicator.backtest.next":"下一步","dashboard.indicator.backtest.steps.strategy.title":"执行配置","dashboard.indicator.backtest.steps.strategy.desc":"仓位/风控/加减仓(策略层)","dashboard.indicator.backtest.steps.trading.title":"回测环境","dashboard.indicator.backtest.steps.trading.desc":"时间/资金/费率/杠杆/滑点","dashboard.indicator.backtest.steps.results.title":"结果","dashboard.indicator.backtest.steps.results.desc":"统计与交易明细","dashboard.indicator.backtest.panel.risk":"执行配置:风控(止损/移动止盈)","dashboard.indicator.backtest.panel.scale":"执行配置:加仓(顺势/逆势)","dashboard.indicator.backtest.panel.reduce":"执行配置:减仓(顺势/逆势)","dashboard.indicator.backtest.panel.position":"执行配置:开仓仓位","dashboard.indicator.backtest.field.stopLossPct":"止损(%)","dashboard.indicator.backtest.field.takeProfitPct":"止盈(%)","dashboard.indicator.backtest.field.trailingEnabled":"移动止盈","dashboard.indicator.backtest.field.trailingStopPct":"移动回撤(%)","dashboard.indicator.backtest.field.trailingActivationPct":"移动止盈激活(%)","dashboard.indicator.backtest.field.slippage":"滑点(%)","dashboard.indicator.backtest.field.trendAddEnabled":"顺势加仓","dashboard.indicator.backtest.field.dcaAddEnabled":"逆势加仓","dashboard.indicator.backtest.field.trendAddStepPct":"加仓触发(%)","dashboard.indicator.backtest.field.dcaAddStepPct":"加仓触发(%)","dashboard.indicator.backtest.field.trendAddSizePct":"每次加仓资金占比(%)","dashboard.indicator.backtest.field.dcaAddSizePct":"每次加仓资金占比(%)","dashboard.indicator.backtest.field.trendAddMaxTimes":"最多加仓次数","dashboard.indicator.backtest.field.dcaAddMaxTimes":"最多加仓次数","dashboard.indicator.backtest.field.trendReduceEnabled":"顺势减仓","dashboard.indicator.backtest.field.adverseReduceEnabled":"逆势减仓","dashboard.indicator.backtest.field.trendReduceStepPct":"顺势触发(%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"逆势触发(%)","dashboard.indicator.backtest.field.trendReduceSizePct":"每次减仓比例(%)","dashboard.indicator.backtest.field.adverseReduceSizePct":"每次逆势减仓比例(%)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"最多顺势减仓次数","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"最多逆势减仓次数","dashboard.indicator.backtest.field.entryPct":"开仓资金占比(%)","dashboard.indicator.backtest.field.minOrderPct":"单次最小资金占比(%)(可选)","dashboard.indicator.backtest.hint.entryPctMax":"最大可开仓:{maxPct}%(为后续加仓预留资金)","dashboard.indicator.backtest.closeLongTrailing":"平多(移动止损/止盈)","dashboard.indicator.backtest.reduceLong":"多头减仓","dashboard.indicator.backtest.closeShortTrailing":"平空(移动止损/止盈)","dashboard.indicator.backtest.reduceShort":"空头减仓","dashboard.docs.title":"文档中心","dashboard.docs.search.placeholder":"搜索文档...","dashboard.docs.category.all":"全部","dashboard.docs.category.guide":"开发指南","dashboard.docs.category.api":"API文档","dashboard.docs.category.tutorial":"教程","dashboard.docs.category.faq":"常见问题","dashboard.docs.featured.title":"推荐文档","dashboard.docs.featured.tag":"推荐","dashboard.docs.list.views":"浏览","dashboard.docs.list.author":"作者","dashboard.docs.list.empty":"暂无文档","dashboard.docs.list.backToAll":"返回全部文档","dashboard.docs.list.total":"共 {count} 篇文档","dashboard.docs.detail.back":"返回文档列表","dashboard.docs.detail.updatedAt":"更新于","dashboard.docs.detail.related":"相关文档","dashboard.docs.detail.notFound":"文档不存在","dashboard.docs.detail.error":"文档不存在或已被删除","dashboard.docs.search.result":"搜索结果","dashboard.docs.search.keyword":"关键词","dashboard.totalEquity":"总权益","dashboard.totalPnL":"总盈亏","dashboard.aiStrategies":"AI 策略","dashboard.indicatorStrategies":"指标策略","dashboard.running":"运行中","dashboard.enabled":"已启用","dashboard.pnlHistory":"历史盈亏","dashboard.strategyPerformance":"策略盈亏占比","dashboard.drawdown":"回撤曲线","dashboard.strategyRanking":"策略排行榜","dashboard.winRate":"胜率","dashboard.profitFactor":"盈亏比","dashboard.maxDrawdown":"最大回撤","dashboard.totalTrades":"总交易","dashboard.runningStrategies":"运行中策略","dashboard.equityCurve":"权益曲线","dashboard.strategyAllocation":"策略分布","dashboard.drawdownCurve":"回撤曲线","dashboard.hourlyDistribution":"交易时段","dashboard.dailyPnl":"日盈亏","dashboard.cumulativePnl":"累计盈亏","dashboard.tradeCount":"交易次数","dashboard.profit":"盈亏","dashboard.noData":"暂无数据","dashboard.noStrategyData":"暂无策略数据","dashboard.ranking.totalProfit":"总收益","dashboard.ranking.roi":"收益率","dashboard.ranking.trades":"交易数","dashboard.unit.trades":"笔","dashboard.unit.strategies":"个","dashboard.label.avgDaily":"日均","dashboard.label.avgProfit":"平均盈利","dashboard.label.win":"胜","dashboard.label.lose":"负","dashboard.label.trade":"交易","dashboard.label.indicator":"指标","dashboard.label.totalPnl":"总盈亏","dashboard.label.maxDrawdownPoint":"最大回撤","dashboard.profitCalendar":"收益日历","dashboard.recentTrades":"最近交易","dashboard.currentPositions":"当前持仓","dashboard.table.time":"时间","dashboard.table.strategy":"策略名称","dashboard.table.symbol":"标的","dashboard.table.type":"类型","dashboard.table.side":"方向","dashboard.table.size":"持仓量","dashboard.table.entryPrice":"开仓均价","dashboard.table.price":"价格","dashboard.table.amount":"数量","dashboard.table.profit":"盈亏","dashboard.pendingOrders":"订单执行记录","dashboard.totalOrders":"共 {total} 条","dashboard.viewError":"查看错误","dashboard.filled":"已成交","dashboard.orderTable.time":"创建时间","dashboard.orderTable.strategy":"策略","dashboard.orderTable.symbol":"交易对","dashboard.orderTable.signalType":"信号类型","dashboard.orderTable.amount":"数量","dashboard.orderTable.price":"成交价","dashboard.orderTable.status":"状态","dashboard.orderTable.timeInfo":"时间","dashboard.orderTable.executedAt":"执行时间","dashboard.orderTable.exchange":"交易所","dashboard.orderTable.notify":"通知方式","dashboard.orderTable.actions":"操作","dashboard.orderTable.delete":"删除","dashboard.orderTable.deleteConfirm":"确认删除这条记录?","dashboard.orderTable.deleteSuccess":"删除成功","dashboard.orderTable.deleteFailed":"删除失败","dashboard.newOrderNotify":"新订单提醒","dashboard.newOrderDesc":"有新的订单执行记录","dashboard.soundEnabled":"声音提醒已开启","dashboard.soundDisabled":"声音提醒已关闭","dashboard.clickToMute":"点击关闭声音提醒","dashboard.clickToUnmute":"点击开启声音提醒","dashboard.signalType.openLong":"开多","dashboard.signalType.openShort":"开空","dashboard.signalType.closeLong":"平多","dashboard.signalType.closeShort":"平空","dashboard.signalType.addLong":"加多","dashboard.signalType.addShort":"加空","dashboard.status.pending":"待处理","dashboard.status.processing":"处理中","dashboard.status.completed":"已完成","dashboard.status.failed":"失败","dashboard.status.cancelled":"已取消","dashboard.table.pnl":"未实现盈亏","form.basic-form.basic.title":"基础表单","form.basic-form.basic.description":"表单页用于向用户收集或验证信息,基础表单常见于数据项较少的表单场景。","form.basic-form.title.label":"标题","form.basic-form.title.placeholder":"给目标起个名字","form.basic-form.title.required":"请输入标题","form.basic-form.date.label":"起止日期","form.basic-form.placeholder.start":"开始日期","form.basic-form.placeholder.end":"结束日期","form.basic-form.date.required":"请选择起止日期","form.basic-form.goal.label":"目标描述","form.basic-form.goal.placeholder":"请输入你的阶段性工作目标","form.basic-form.goal.required":"请输入目标描述","form.basic-form.standard.label":"衡量标准","form.basic-form.standard.placeholder":"请输入衡量标准","form.basic-form.standard.required":"请输入衡量标准","form.basic-form.client.label":"客户","form.basic-form.client.required":"请描述你服务的客户","form.basic-form.label.tooltip":"目标的服务对象","form.basic-form.client.placeholder":"请描述你服务的客户,内部客户直接 @姓名/工号","form.basic-form.invites.label":"邀评人","form.basic-form.invites.placeholder":"请直接 @姓名/工号,最多可邀请 5 人","form.basic-form.weight.label":"权重","form.basic-form.weight.placeholder":"请输入","form.basic-form.public.label":"目标公开","form.basic-form.label.help":"客户、邀评人默认被分享","form.basic-form.radio.public":"公开","form.basic-form.radio.partially-public":"部分公开","form.basic-form.radio.private":"不公开","form.basic-form.publicUsers.placeholder":"公开给","form.basic-form.option.A":"同事一","form.basic-form.option.B":"同事二","form.basic-form.option.C":"同事三","form.basic-form.email.required":"请输入邮箱地址!","form.basic-form.email.wrong-format":"邮箱地址格式错误!","form.basic-form.userName.required":"请输入用户名!","form.basic-form.password.required":"请输入密码!","form.basic-form.password.twice":"两次输入的密码不匹配!","form.basic-form.strength.msg":"请至少输入 6 个字符。请不要使用容易被猜到的密码。","form.basic-form.strength.strong":"强度:强","form.basic-form.strength.medium":"强度:中","form.basic-form.strength.short":"强度:太短","form.basic-form.confirm-password.required":"请确认密码!","form.basic-form.phone-number.required":"请输入手机号!","form.basic-form.phone-number.wrong-format":"手机号格式错误!","form.basic-form.verification-code.required":"请输入验证码!","form.basic-form.form.get-captcha":"获取验证码","form.basic-form.captcha.second":"秒","form.basic-form.form.optional":"(选填)","form.basic-form.form.submit":"提交","form.basic-form.form.save":"保存","form.basic-form.email.placeholder":"邮箱","form.basic-form.password.placeholder":"至少6位密码,区分大小写","form.basic-form.confirm-password.placeholder":"确认密码","form.basic-form.phone-number.placeholder":"手机号","form.basic-form.verification-code.placeholder":"验证码","result.success.title":"提交成功","result.success.description":"提交结果页用于反馈一系列操作任务的处理结果, 如果仅是简单操作,使用 Message 全局提示反馈即可。 本文字区域可以展示简单的补充说明,如果有类似展示 “单据”的需求,下面这个灰色区域可以呈现比较复杂的内容。","result.success.operate-title":"项目名称","result.success.operate-id":"项目 ID","result.success.principal":"负责人","result.success.operate-time":"生效时间","result.success.step1-title":"创建项目","result.success.step1-operator":"曲丽丽","result.success.step2-title":"部门初审","result.success.step2-operator":"周毛毛","result.success.step2-extra":"催一下","result.success.step3-title":"财务复核","result.success.step4-title":"完成","result.success.btn-return":"返回列表","result.success.btn-project":"查看项目","result.success.btn-print":"打印","result.fail.error.title":"提交失败","result.fail.error.description":"请核对并修改以下信息后,再重新提交。","result.fail.error.hint-title":"您提交的内容有如下错误:","result.fail.error.hint-text1":"您的账户已被冻结","result.fail.error.hint-btn1":"立即解冻","result.fail.error.hint-text2":"您的账户还不具备申请资格","result.fail.error.hint-btn2":"立即升级","result.fail.error.btn-text":"返回修改","account.settings.menuMap.custom":"个性化","account.settings.menuMap.binding":"账号绑定","account.settings.basic.avatar":"头像","account.settings.basic.change-avatar":"更换头像","account.settings.basic.email":"邮箱","account.settings.basic.email-message":"请输入您的邮箱!","account.settings.basic.nickname":"昵称","account.settings.basic.nickname-message":"请输入您的昵称!","account.settings.basic.profile":"个人简介","account.settings.basic.profile-message":"请输入个人简介!","account.settings.basic.profile-placeholder":"个人简介","account.settings.basic.country":"国家/地区","account.settings.basic.country-message":"请输入您的国家或地区!","account.settings.basic.geographic":"所在省市","account.settings.basic.geographic-message":"请输入您的所在省市!","account.settings.basic.address":"街道地址","account.settings.basic.address-message":"请输入您的街道地址!","account.settings.basic.phone":"联系电话","account.settings.basic.phone-message":"请输入您的联系电话!","account.settings.basic.update":"更新基本信息","account.settings.basic.update.success":"更新基本信息成功","account.settings.security.strong":"强","account.settings.security.medium":"中","account.settings.security.weak":"弱","account.settings.security.password":"账户密码","account.settings.security.password-description":"当前密码强度:","account.settings.security.phone":"密保手机","account.settings.security.phone-description":"已绑定手机:","account.settings.security.question":"密保问题","account.settings.security.question-description":"未设置密保问题,密保问题可有效保护账户安全","account.settings.security.email":"绑定邮箱","account.settings.security.email-description":"已绑定邮箱:","account.settings.security.mfa":"MFA 设备","account.settings.security.mfa-description":"未绑定 MFA 设备,绑定后,可以进行二次确认","account.settings.security.modify":"修改","account.settings.security.set":"设置","account.settings.security.bind":"绑定","account.settings.binding.taobao":"绑定淘宝","account.settings.binding.taobao-description":"当前未绑定淘宝账号","account.settings.binding.alipay":"绑定支付宝","account.settings.binding.alipay-description":"当前未绑定支付宝账号","account.settings.binding.dingding":"绑定钉钉","account.settings.binding.dingding-description":"当前未绑定钉钉账号","account.settings.binding.bind":"绑定","account.settings.notification.password":"账户密码","account.settings.notification.password-description":"其他用户的消息将以站内信的形式通知","account.settings.notification.messages":"系统消息","account.settings.notification.messages-description":"系统消息将以站内信的形式通知","account.settings.notification.todo":"待办任务","account.settings.notification.todo-description":"待办任务将以站内信的形式通知","account.settings.settings.open":"开","account.settings.settings.close":"关","trading-assistant.title":"交易助手","trading-assistant.strategyList":"策略列表","trading-assistant.createStrategy":"创建策略","trading-assistant.noStrategy":"暂无策略","trading-assistant.selectStrategy":"请从左侧选择一个策略查看详情","trading-assistant.startStrategy":"启动策略","trading-assistant.stopStrategy":"停止策略","trading-assistant.editStrategy":"编辑策略","trading-assistant.deleteStrategy":"删除策略","trading-assistant.startAll":"全部启动","trading-assistant.stopAll":"全部停止","trading-assistant.deleteAll":"全部删除","trading-assistant.symbolCount":"个币种","trading-assistant.strategyCount":"个策略","trading-assistant.groupBy":"分组方式","trading-assistant.groupByStrategy":"按策略","trading-assistant.groupBySymbol":"按标的","trading-assistant.timeframe":"周期","trading-assistant.indicator":"指标","trading-assistant.status.running":"运行中","trading-assistant.status.stopped":"已停止","trading-assistant.status.error":"错误","trading-assistant.strategyType.IndicatorStrategy":"技术指标策略","trading-assistant.strategyType.PromptBasedStrategy":"提示词策略","trading-assistant.strategyType.GridStrategy":"网格策略","trading-assistant.tabs.tradingRecords":"交易记录","trading-assistant.tabs.positions":"持仓记录","trading-assistant.tabs.equityCurve":"净值曲线","trading-assistant.form.step1":"选择指标","trading-assistant.form.step2":"交易所配置","trading-assistant.form.step3":"策略参数","trading-assistant.form.step2Params":"策略参数","trading-assistant.form.step3Signal":"信号通知","trading-assistant.form.simpleMode":"简易模式","trading-assistant.form.advancedMode":"高级模式","trading-assistant.form.simpleModeHint":"快速创建策略,使用推荐默认参数","trading-assistant.form.advancedModeHint":"自定义全部参数,适合专业用户","trading-assistant.form.simpleStep1":"选择指标 & 交易对","trading-assistant.form.simpleStep2":"启动方式","trading-assistant.form.simpleDefaultsHint":"默认参数(可展开修改)","trading-assistant.form.showAdvancedSettings":"展开高级设置","trading-assistant.form.hideAdvancedSettings":"收起高级设置","trading-assistant.form.indicator":"选择指标","trading-assistant.form.indicatorHint":"只能选择您已购买或创建的技术指标","trading-assistant.form.qdtCostHints":"使用策略将消耗QDT,请确保账户有足够的QDT余额","trading-assistant.form.indicatorDescription":"指标描述","trading-assistant.form.noDescription":"暂无描述","trading-assistant.form.indicatorParams":"指标参数","trading-assistant.form.indicatorParamsHint":"这些参数会传递给指标代码,不同策略可以使用不同的参数值","trading-assistant.form.exchange":"选择交易所","trading-assistant.form.apiKey":"API Key","trading-assistant.form.secretKey":"Secret Key","trading-assistant.form.passphrase":"Passphrase","trading-assistant.form.testConnection":"测试连接","trading-assistant.form.strategyName":"策略名称","trading-assistant.form.symbol":"交易对","trading-assistant.form.symbols":"交易对(多选)","trading-assistant.form.symbolHint":"目前仅支持加密货币交易对","trading-assistant.form.symbolHintCrypto":"加密货币:使用BTC/USDT等交易对格式","trading-assistant.form.symbolsHint":"选择多个交易对,将自动创建多个策略","trading-assistant.form.strategyType":"策略类型","trading-assistant.form.strategyTypeSingle":"单标的策略","trading-assistant.form.strategyTypeCrossSectional":"截面策略","trading-assistant.form.strategyTypeHint":"单标的策略:针对单个标的进行交易;截面策略:同时管理多个标的的组合","trading-assistant.form.symbolList":"标的列表","trading-assistant.form.symbolListHint":"选择多个标的,策略将根据指标评分进行排序和调仓","trading-assistant.form.portfolioSize":"持仓组合大小","trading-assistant.form.portfolioSizeHint":"策略同时持有的标的数量","trading-assistant.form.longRatio":"做多比例","trading-assistant.form.longRatioHint":"持仓中做多标的的比例(0-1),例如0.5表示50%做多,50%做空","trading-assistant.form.rebalanceFrequency":"调仓频率","trading-assistant.form.rebalanceDaily":"每日","trading-assistant.form.rebalanceWeekly":"每周","trading-assistant.form.rebalanceMonthly":"每月","trading-assistant.form.rebalanceFrequencyHint":"策略重新调整持仓组合的频率","trading-assistant.form.addSymbol":"添加交易对","trading-assistant.form.addSymbolTitle":"添加交易对到自选列表","trading-assistant.form.searchSymbolPlaceholder":"输入代码搜索,如 BTC、AAPL","trading-assistant.form.noSymbolFound":"未找到匹配的交易对","trading-assistant.form.canDirectAdd":"可以直接输入代码添加","trading-assistant.form.searchSymbolHint":"输入代码搜索交易对","trading-assistant.form.confirmAdd":"确认添加","trading-assistant.form.addSymbolSuccess":"交易对添加成功","trading-assistant.form.addSymbolFailed":"添加失败,请重试","trading-assistant.form.pleaseSelectSymbol":"请选择或输入交易对","trading-assistant.form.initialCapital":"投入金额","trading-assistant.form.marketType":"市场类型","trading-assistant.form.marketTypeFutures":"合约","trading-assistant.form.marketTypeSpot":"现货","trading-assistant.form.marketTypeHint":"合约支持双向交易和杠杆,现货仅支持做多且杠杆固定为1倍","trading-assistant.form.leverage":"杠杆倍数","trading-assistant.form.leverageHint":"合约:1-125倍,现货:固定1倍","trading-assistant.form.spotLeverageFixed":"现货交易杠杆固定为1倍","trading-assistant.form.spotOnlyLongHint":"现货交易仅支持做多","trading-assistant.form.tradeDirection":"交易方向","trading-assistant.form.tradeDirectionLong":"仅做多","trading-assistant.form.tradeDirectionShort":"仅做空","trading-assistant.form.tradeDirectionBoth":"双向交易","trading-assistant.form.timeframe":"时间周期","trading-assistant.form.klinePeriod":"K线周期","trading-assistant.form.timeframe1m":"1分钟","trading-assistant.form.timeframe5m":"5分钟","trading-assistant.form.timeframe15m":"15分钟","trading-assistant.form.timeframe30m":"30分钟","trading-assistant.form.timeframe1H":"1小时","trading-assistant.form.timeframe4H":"4小时","trading-assistant.form.timeframe1D":"1天","trading-assistant.form.selectStrategyType":"选择策略类型","trading-assistant.form.indicatorStrategy":"指标策略","trading-assistant.form.indicatorStrategyDesc":"基于技术指标的自动化交易策略","trading-assistant.form.aiStrategy":"AI策略","trading-assistant.form.aiStrategyDesc":"基于AI智能决策的自动化交易策略","trading-assistant.form.enableAiFilter":"启用AI智能决策过滤","trading-assistant.form.enableAiFilterHint":"启用后,指标信号将经过AI智能过滤,提高交易质量","trading-assistant.form.aiFilterPrompt":"自定义提示词","trading-assistant.form.aiFilterPromptHint":"为AI过滤提供自定义指令,留空则使用系统默认","trading-assistant.form.executionMode":"执行模式","trading-assistant.form.executionModeSignal":"仅信号通知","trading-assistant.form.executionModeLive":"实盘自动交易","trading-assistant.form.liveTradingCryptoOnlyHint":"实盘交易功能仅支持加密货币市场","trading-assistant.form.liveTradingNotSupportedHint":"当前市场不支持实盘交易","trading-assistant.form.broker":"券商","trading-assistant.form.localDeploymentRequired":"⚠️ 需要本地部署运行","trading-assistant.form.localDeploymentHint":"IBKR 和 MT5 属于外挂类实盘接口,需要本地部署运行 QuantDinger,不支持云端 SaaS 模式。请确保您已在本地安装并配置相关交易软件(TWS/IB Gateway 或 MT5 终端)。","trading-assistant.form.ibkrConnectionTitle":"盈透证券连接配置","trading-assistant.form.ibkrConnectionHint":"请确保 TWS 或 IB Gateway 已启动并启用 API 连接","trading-assistant.validation.brokerRequired":"请选择券商","trading-assistant.placeholders.selectBroker":"选择券商","trading-assistant.brokerNames":{ibkr:"盈透证券 (Interactive Brokers)",mt5:"MetaTrader 5 (MT5)",mt4:"MetaTrader 4 (MT4)",futu:"富途证券 (Futu)",tiger:"老虎证券 (Tiger Brokers)",td:"TD Ameritrade",schwab:"Charles Schwab"},"trading-assistant.form.ibkrHost":"主机地址","trading-assistant.form.ibkrPort":"端口","trading-assistant.form.ibkrPortHint":"TWS实盘:7497, TWS模拟:7496, Gateway实盘:4001, Gateway模拟:4002","trading-assistant.form.ibkrClientId":"客户端ID","trading-assistant.form.ibkrAccount":"账户号","trading-assistant.form.ibkrAccountHint":"留空自动选择第一个账户,多账户用户可指定账户号","trading-assistant.placeholders.ibkrAccount":"可选,如 U1234567","trading-assistant.exchange.ibkrConnectionSuccess":"盈透证券连接成功","trading-assistant.exchange.ibkrConnectionFailed":"盈透证券连接失败,请检查 TWS/Gateway 是否运行","trading-assistant.exchange.checkLocalDeployment":"请确认您已在本地部署运行,云端 SaaS 不支持此类外挂实盘","trading-assistant.form.forexBroker":"外汇券商","trading-assistant.form.mt5ConnectionTitle":"MetaTrader 5 连接配置","trading-assistant.form.mt5ConnectionHint":"请确保 MT5 终端已启动并登录(仅支持 Windows)","trading-assistant.form.mt5Server":"服务器","trading-assistant.form.mt5ServerHint":"券商服务器名称(如:ICMarkets-Demo)","trading-assistant.form.mt5Login":"账户号","trading-assistant.form.mt5Password":"密码","trading-assistant.form.mt5TerminalPath":"MT5 终端路径(可选)","trading-assistant.form.mt5TerminalPathHint":"如果 MT5 终端未安装在默认位置,请指定 terminal64.exe 的完整路径(例如:C:\\Program Files\\MetaTrader 5\\terminal64.exe)","trading-assistant.placeholders.mt5Server":"例如:ICMarkets-Demo","trading-assistant.placeholders.mt5Login":"例如:12345678","trading-assistant.placeholders.mt5Password":"您的 MT5 密码","trading-assistant.placeholders.mt5TerminalPath":"例如:C:\\Program Files\\MetaTrader 5\\terminal64.exe","trading-assistant.validation.mt5ServerRequired":"请输入 MT5 服务器","trading-assistant.validation.mt5LoginRequired":"请输入 MT5 账户号","trading-assistant.validation.mt5PasswordRequired":"请输入 MT5 密码","trading-assistant.validation.portfolioSizeRequired":"请输入持仓组合大小","trading-assistant.validation.longRatioRequired":"请输入做多比例","trading-assistant.exchange.mt5ConnectionSuccess":"MT5 连接成功","trading-assistant.exchange.mt5ConnectionFailed":"MT5 连接失败,请检查终端是否运行","trading-assistant.form.notifyChannels":"通知渠道","trading-assistant.form.notifyChannelsHint":"选择信号触发时的通知方式","trading-assistant.form.notifyEmail":"邮箱地址","trading-assistant.form.notifyPhone":"手机号码","trading-assistant.form.notifyTelegram":"Telegram ID","trading-assistant.form.notifyDiscord":"Discord Webhook","trading-assistant.form.notifyWebhook":"Webhook 地址","trading-assistant.form.liveTradingConfigTitle":"实盘交易配置","trading-assistant.form.liveTradingConfigHint":"请填写交易所API信息,实盘交易将使用您的API进行真实交易","trading-assistant.form.savedCredential":"已保存的凭证","trading-assistant.form.savedCredentialHint":"选择已保存的交易所凭证,自动填充API配置","trading-assistant.form.saveCredential":"保存此凭证以便下次使用","trading-assistant.form.credentialName":"凭证名称","trading-assistant.validation.strategyTypeRequired":"请选择策略类型","trading-assistant.form.advancedSettings":"高级设置","trading-assistant.form.orderMode":"下单模式","trading-assistant.form.orderModeMaker":"挂单(Maker)","trading-assistant.form.orderModeTaker":"市价(Taker)","trading-assistant.form.orderModeHint":"挂单模式使用限价单,手续费更低;市价模式立即成交,手续费较高","trading-assistant.form.makerWaitSec":"挂单等待时间(秒)","trading-assistant.form.makerWaitSecHint":"挂单后等待成交的时间,超时后取消并重试","trading-assistant.form.makerRetries":"挂单重试次数","trading-assistant.form.makerRetriesHint":"挂单未成交时的最大重试次数","trading-assistant.form.fallbackToMarket":"挂单失败降级市价","trading-assistant.form.fallbackToMarketHint":"开/平仓挂单未成交时,是否降级为市价单以确保成交","trading-assistant.form.marginMode":"保证金模式","trading-assistant.form.marginModeCross":"全仓","trading-assistant.form.marginModeIsolated":"逐仓","trading-assistant.form.stopLossPct":"止损比例(%)","trading-assistant.form.stopLossPctHint":"设置止损百分比,0表示不启用止损","trading-assistant.form.takeProfitPct":"止盈比例(%)","trading-assistant.form.takeProfitPctHint":"设置止盈百分比,0表示不启用止盈","trading-assistant.form.signalMode":"信号模式","trading-assistant.form.signalModeConfirmed":"确认模式","trading-assistant.form.signalModeAggressive":"激进模式","trading-assistant.form.signalModeHint":"确认模式:仅检查已完成的K线;激进模式:也检查正在形成的K线","trading-assistant.form.cancel":"取消","trading-assistant.form.prev":"上一步","trading-assistant.form.next":"下一步","trading-assistant.form.confirmCreate":"确认创建","trading-assistant.form.confirmEdit":"确认修改","trading-assistant.messages.createSuccess":"策略创建成功","trading-assistant.messages.createFailed":"创建策略失败","trading-assistant.messages.updateSuccess":"策略更新成功","trading-assistant.messages.updateFailed":"更新策略失败","trading-assistant.messages.deleteSuccess":"策略删除成功","trading-assistant.messages.deleteFailed":"删除策略失败","trading-assistant.messages.startSuccess":"策略启动成功","trading-assistant.messages.startFailed":"启动策略失败","trading-assistant.messages.stopSuccess":"策略停止成功","trading-assistant.messages.stopFailed":"停止策略失败","trading-assistant.messages.loadFailed":"获取策略列表失败","trading-assistant.messages.runningWarning":"策略运行中,请先停止策略后再修改","trading-assistant.messages.deleteConfirmWithName":"确定要删除策略“{name}”吗?此操作不可恢复。","trading-assistant.messages.deleteConfirm":"确定要删除该策略吗?此操作不可恢复。","trading-assistant.messages.loadTradesFailed":"获取交易记录失败","trading-assistant.messages.loadPositionsFailed":"获取持仓记录失败","trading-assistant.messages.loadEquityFailed":"获取净值曲线失败","trading-assistant.messages.loadIndicatorsFailed":"加载指标列表失败,请稍后重试","trading-assistant.messages.spotLimitations":"现货交易已自动设置为仅做多、1倍杠杆","trading-assistant.messages.autoFillApiConfig":"已自动填充该交易所的历史API配置","trading-assistant.messages.batchCreateSuccess":"成功创建 {count} 个策略","trading-assistant.messages.batchStartSuccess":"成功启动 {count} 个策略","trading-assistant.messages.batchStartFailed":"批量启动策略失败","trading-assistant.messages.batchStopSuccess":"成功停止 {count} 个策略","trading-assistant.messages.batchStopFailed":"批量停止策略失败","trading-assistant.messages.batchDeleteSuccess":"成功删除 {count} 个策略","trading-assistant.messages.batchDeleteFailed":"批量删除策略失败","trading-assistant.messages.batchDeleteConfirm":'确定要删除策略组"{name}"下的 {count} 个策略吗?此操作不可恢复。',"trading-assistant.notify.browser":"浏览器通知","trading-assistant.notify.email":"邮箱","trading-assistant.notify.phone":"短信","trading-assistant.notify.telegram":"Telegram","trading-assistant.notify.discord":"Discord","trading-assistant.notify.webhook":"Webhook","trading-assistant.placeholders.selectIndicator":"请选择指标","trading-assistant.placeholders.selectExchange":"请选择交易所","trading-assistant.placeholders.inputApiKey":"请输入API Key","trading-assistant.placeholders.inputSecretKey":"请输入Secret Key","trading-assistant.placeholders.inputPassphrase":"请输入Passphrase","trading-assistant.placeholders.inputStrategyName":"请输入策略名称","trading-assistant.placeholders.selectSymbol":"请选择交易对","trading-assistant.placeholders.selectSymbols":"请选择交易对(支持多选)","trading-assistant.placeholders.selectTimeframe":"请选择时间周期","trading-assistant.placeholders.selectKlinePeriod":"请选择K线周期","trading-assistant.placeholders.inputAiFilterPrompt":"请输入自定义提示词(可选)","trading-assistant.placeholders.selectSavedCredential":"请选择已保存的凭证","trading-assistant.placeholders.inputEmail":"请输入邮箱地址","trading-assistant.placeholders.inputPhone":"请输入手机号码","trading-assistant.placeholders.inputTelegram":"请输入Telegram ID或Chat ID","trading-assistant.placeholders.inputDiscord":"请输入Discord Webhook地址","trading-assistant.placeholders.inputWebhook":"请输入Webhook地址","trading-assistant.placeholders.inputCredentialName":"请输入凭证名称(如:我的OKX账户)","trading-assistant.validation.indicatorRequired":"请选择指标","trading-assistant.validation.exchangeRequired":"请选择交易所","trading-assistant.validation.apiKeyRequired":"请输入API Key","trading-assistant.validation.secretKeyRequired":"请输入Secret Key","trading-assistant.validation.passphraseRequired":"请输入Passphrase","trading-assistant.validation.exchangeConfigIncomplete":"请填写完整的交易所配置信息","trading-assistant.validation.testConnectionRequired":'请先点击"测试连接"按钮并确保连接成功',"trading-assistant.validation.testConnectionFailed":"连接测试失败,请检查配置后重新测试","trading-assistant.validation.credentialRequired":"请先在个人中心添加并测试交易所凭证","trading-assistant.validation.strategyNameRequired":"请输入策略名称","trading-assistant.validation.symbolRequired":"请选择交易对","trading-assistant.validation.symbolsRequired":"请至少选择一个交易对","trading-assistant.validation.emailInvalid":"请输入有效的邮箱地址","trading-assistant.validation.notifyChannelRequired":"请至少选择一个通知渠道","trading-assistant.validation.initialCapitalRequired":"请输入投入金额","trading-assistant.validation.leverageRequired":"请输入杠杆倍数","trading-assistant.table.time":"时间","trading-assistant.table.type":"类型","trading-assistant.table.price":"价格","trading-assistant.table.amount":"数量","trading-assistant.table.value":"金额","trading-assistant.table.commission":"手续费","trading-assistant.table.symbol":"交易对","trading-assistant.table.side":"方向","trading-assistant.table.size":"持仓数量","trading-assistant.table.entryPrice":"开仓价格","trading-assistant.table.currentPrice":"当前价格","trading-assistant.table.unrealizedPnl":"未实现盈亏","trading-assistant.table.pnlPercent":"盈亏比例","trading-assistant.table.buy":"买入","trading-assistant.table.sell":"卖出","trading-assistant.table.long":"做多","trading-assistant.table.short":"做空","trading-assistant.table.noPositions":"暂无持仓","trading-assistant.detail.title":"策略详情","trading-assistant.detail.strategyName":"策略名称","trading-assistant.detail.strategyType":"策略类型","trading-assistant.detail.status":"状态","trading-assistant.detail.tradingMode":"交易模式","trading-assistant.detail.exchange":"交易所","trading-assistant.detail.initialCapital":"初始资金","trading-assistant.detail.totalInvestment":"总投入金额","trading-assistant.detail.currentEquity":"当前净值","trading-assistant.detail.totalPnl":"总盈亏","trading-assistant.detail.indicatorName":"指标名称","trading-assistant.detail.maxLeverage":"最大杠杆","trading-assistant.detail.decideInterval":"决策间隔","trading-assistant.detail.symbols":"交易标的","trading-assistant.detail.createdAt":"创建时间","trading-assistant.detail.updatedAt":"更新时间","trading-assistant.detail.llmConfig":"AI模型配置","trading-assistant.detail.exchangeConfig":"交易所配置","trading-assistant.detail.provider":"提供商","trading-assistant.detail.modelId":"模型ID","trading-assistant.detail.close":"关闭","trading-assistant.detail.loadFailed":"获取策略详情失败","trading-assistant.equity.noData":"暂无净值数据","trading-assistant.equity.equity":"净值","trading-assistant.exchange.tradingMode":"交易模式","trading-assistant.exchange.virtual":"模拟交易","trading-assistant.exchange.live":"实盘交易","trading-assistant.exchange.selectExchange":"选择交易所","trading-assistant.exchange.walletAddress":"钱包地址","trading-assistant.exchange.walletAddressPlaceholder":"请输入钱包地址(以0x开头)","trading-assistant.exchange.privateKey":"私钥","trading-assistant.exchange.privateKeyPlaceholder":"请输入私钥(64字符)","trading-assistant.exchange.testConnection":"测试连接","trading-assistant.exchange.connectionSuccess":"连接成功","trading-assistant.exchange.connectionFailed":"连接失败","trading-assistant.exchange.testFailed":"连接测试失败","trading-assistant.exchange.fillComplete":"请填写完整的交易所配置信息","trading-assistant.exchange.ipWhitelistTip":"请在交易所API设置中将以下IP添加到白名单:","trading-assistant.strategyTypeOptions.ai":"AI驱动策略","trading-assistant.strategyTypeOptions.indicator":"技术指标策略","trading-assistant.strategyTypeOptions.aiDeveloping":"AI驱动策略功能开发中,敬请期待","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"AI驱动策略功能正在开发中","trading-assistant.indicatorType.trend":"趋势","trading-assistant.indicatorType.momentum":"动量","trading-assistant.indicatorType.volatility":"波动","trading-assistant.indicatorType.volume":"成交量","trading-assistant.indicatorType.custom":"自定义","trading-assistant.exchangeNames":{okx:"OKX",binance:"币安",hyperliquid:"Hyperliquid",blockchaincom:"Blockchain.com",coinbaseexchange:"Coinbase",gate:"Gate.io",mexc:"MEXC",kraken:"Kraken",bitfinex:"Bitfinex",bybit:"Bybit",kucoin:"KuCoin",huobi:"火币",bitget:"Bitget",bitmex:"BitMEX",deribit:"Deribit",phemex:"Phemex",bitmart:"BitMart",bitstamp:"Bitstamp",bittrex:"Bittrex",poloniex:"Poloniex",gemini:"Gemini",cryptocom:"Crypto.com",bitflyer:"bitFlyer",upbit:"Upbit",bithumb:"Bithumb",coinone:"Coinone",zb:"ZB",lbank:"LBank",bibox:"Bibox",bigone:"BigONE",bitrue:"Bitrue",coinex:"CoinEx",digifinex:"DigiFinex",ftx:"FTX",ftxus:"FTX US",binanceus:"Binance US",binancecoinm:"Binance COIN-M",binanceusdm:"Binance USDⓈ-M",ibkr:"盈透证券 (IBKR)",deepcoin:"Deepcoin"},"ai-trading-assistant.title":"AI交易助手","ai-trading-assistant.strategyList":"策略列表","ai-trading-assistant.createStrategy":"创建策略","ai-trading-assistant.noStrategy":"暂无策略","ai-trading-assistant.selectStrategy":"请从左侧选择一个策略查看详情","ai-trading-assistant.startStrategy":"启动策略","ai-trading-assistant.stopStrategy":"停止策略","ai-trading-assistant.editStrategy":"编辑策略","ai-trading-assistant.deleteStrategy":"删除策略","ai-trading-assistant.status.running":"运行中","ai-trading-assistant.status.stopped":"已停止","ai-trading-assistant.status.error":"错误","ai-trading-assistant.tabs.tradingRecords":"交易记录","ai-trading-assistant.tabs.positions":"持仓记录","ai-trading-assistant.tabs.aiDecisions":"AI决策记录","ai-trading-assistant.tabs.equityCurve":"净值曲线","ai-trading-assistant.form.createTitle":"创建AI交易策略","ai-trading-assistant.form.editTitle":"编辑AI交易策略","ai-trading-assistant.form.strategyName":"策略名称","ai-trading-assistant.form.modelId":"AI模型","ai-trading-assistant.form.modelIdHint":"使用系统OpenRouter服务,无需配置API Key","ai-trading-assistant.form.decideInterval":"决策间隔","ai-trading-assistant.form.decideInterval5m":"5分钟","ai-trading-assistant.form.decideInterval10m":"10分钟","ai-trading-assistant.form.decideInterval30m":"30分钟","ai-trading-assistant.form.decideInterval1h":"1小时","ai-trading-assistant.form.decideInterval4h":"4小时","ai-trading-assistant.form.decideInterval1d":"1天","ai-trading-assistant.form.decideInterval1w":"1周","ai-trading-assistant.form.decideIntervalHint":"AI做决策的时间间隔","ai-trading-assistant.form.runPeriod":"运行周期","ai-trading-assistant.form.runPeriodHint":"策略运行的开始时间和结束时间","ai-trading-assistant.form.startDate":"开始日期","ai-trading-assistant.form.endDate":"结束日期","ai-trading-assistant.form.qdtCostTitle":"QDT扣费说明","ai-trading-assistant.form.qdtCostHint":"每次AI决策将扣费 {cost} 个QDT,请确保账户有足够的QDT余额。策略运行期间,每次决策都会实时扣费。","ai-trading-assistant.form.apiKey":"API Key","ai-trading-assistant.form.exchange":"选择交易所","ai-trading-assistant.form.secretKey":"Secret Key","ai-trading-assistant.form.passphrase":"Passphrase","ai-trading-assistant.form.testConnection":"测试连接","ai-trading-assistant.form.symbol":"交易对","ai-trading-assistant.form.symbolHint":"选择要交易的交易对","ai-trading-assistant.form.initialCapital":"投入金额(保证金)","ai-trading-assistant.form.leverage":"杠杆倍数","ai-trading-assistant.form.timeframe":"时间周期","ai-trading-assistant.form.timeframe1m":"1分钟","ai-trading-assistant.form.timeframe5m":"5分钟","ai-trading-assistant.form.timeframe15m":"15分钟","ai-trading-assistant.form.timeframe30m":"30分钟","ai-trading-assistant.form.timeframe1H":"1小时","ai-trading-assistant.form.timeframe4H":"4小时","ai-trading-assistant.form.timeframe1D":"1天","ai-trading-assistant.form.marketType":"市场类型","ai-trading-assistant.form.marketTypeFutures":"合约","ai-trading-assistant.form.marketTypeSpot":"现货","ai-trading-assistant.form.totalPnl":"总盈亏","ai-trading-assistant.form.customPrompt":"自定义提示词","ai-trading-assistant.form.customPromptHint":"可选,用于自定义AI的交易策略和决策逻辑","ai-trading-assistant.form.cancel":"取消","ai-trading-assistant.form.prev":"上一步","ai-trading-assistant.form.next":"下一步","ai-trading-assistant.form.confirmCreate":"确认创建","ai-trading-assistant.form.confirmEdit":"确认修改","ai-trading-assistant.messages.createSuccess":"策略创建成功","ai-trading-assistant.messages.createFailed":"创建策略失败","ai-trading-assistant.messages.updateSuccess":"策略更新成功","ai-trading-assistant.messages.updateFailed":"更新策略失败","ai-trading-assistant.messages.deleteSuccess":"策略删除成功","ai-trading-assistant.messages.deleteFailed":"删除策略失败","ai-trading-assistant.messages.startSuccess":"策略启动成功","ai-trading-assistant.messages.startFailed":"启动策略失败","ai-trading-assistant.messages.stopSuccess":"策略停止成功","ai-trading-assistant.messages.stopFailed":"停止策略失败","ai-trading-assistant.messages.loadFailed":"获取策略列表失败","ai-trading-assistant.messages.loadDecisionsFailed":"获取AI决策记录失败","ai-trading-assistant.messages.deleteConfirm":"确定要删除该策略吗?此操作不可恢复。","ai-trading-assistant.placeholders.inputStrategyName":"请输入策略名称","ai-trading-assistant.placeholders.selectModelId":"请选择AI模型","ai-trading-assistant.placeholders.selectDecideInterval":"请选择决策间隔","ai-trading-assistant.placeholders.startTime":"开始时间","ai-trading-assistant.placeholders.endTime":"结束时间","ai-trading-assistant.placeholders.inputApiKey":"请输入API Key","ai-trading-assistant.placeholders.selectExchange":"请选择交易所","ai-trading-assistant.placeholders.inputSecretKey":"请输入Secret Key","ai-trading-assistant.placeholders.inputPassphrase":"请输入Passphrase","ai-trading-assistant.placeholders.selectSymbol":"请选择交易对,如:BTC/USDT","ai-trading-assistant.placeholders.selectTimeframe":"请选择时间周期","ai-trading-assistant.placeholders.inputCustomPrompt":"请输入自定义提示词(可选)","ai-trading-assistant.validation.strategyNameRequired":"请输入策略名称","ai-trading-assistant.validation.modelIdRequired":"请选择AI模型","ai-trading-assistant.validation.runPeriodRequired":"请选择运行周期","ai-trading-assistant.validation.apiKeyRequired":"请输入API Key","ai-trading-assistant.validation.exchangeRequired":"请选择交易所","ai-trading-assistant.validation.secretKeyRequired":"请输入Secret Key","ai-trading-assistant.validation.symbolRequired":"请选择交易对","ai-trading-assistant.validation.initialCapitalRequired":"请输入投入金额","ai-trading-assistant.table.time":"时间","ai-trading-assistant.table.type":"类型","ai-trading-assistant.table.price":"价格","ai-trading-assistant.table.amount":"数量","ai-trading-assistant.table.value":"金额","ai-trading-assistant.table.symbol":"交易对","ai-trading-assistant.table.side":"方向","ai-trading-assistant.table.size":"持仓数量","ai-trading-assistant.table.entryPrice":"开仓价格","ai-trading-assistant.table.currentPrice":"当前价格","ai-trading-assistant.table.unrealizedPnl":"未实现盈亏","ai-trading-assistant.table.profit":"盈亏","ai-trading-assistant.table.openLong":"开多","ai-trading-assistant.table.closeLong":"平多","ai-trading-assistant.table.openShort":"开空","ai-trading-assistant.table.closeShort":"平空","ai-trading-assistant.table.addLong":"加多","ai-trading-assistant.table.addShort":"加空","ai-trading-assistant.table.closeShortProfit":"平空止盈","ai-trading-assistant.table.closeShortStop":"平空止损","ai-trading-assistant.table.closeLongProfit":"平多止盈","ai-trading-assistant.table.closeLongStop":"平多止损","ai-trading-assistant.table.buy":"买入","ai-trading-assistant.table.sell":"卖出","ai-trading-assistant.table.long":"做多","ai-trading-assistant.table.short":"做空","ai-trading-assistant.table.hold":"持有","ai-trading-assistant.table.reasoning":"分析理由","ai-trading-assistant.table.decisions":"决策","ai-trading-assistant.table.riskAssessment":"风险评估","ai-trading-assistant.table.confidence":"置信度","ai-trading-assistant.table.totalRecords":"共 {total} 条记录","ai-trading-assistant.table.noPositions":"暂无持仓","ai-trading-assistant.detail.title":"策略详情","ai-trading-assistant.equity.noData":"暂无净值数据","ai-trading-assistant.equity.equity":"净值","ai-trading-assistant.exchange.testFailed":"连接测试失败","ai-trading-assistant.exchange.connectionSuccess":"连接成功","ai-trading-assistant.exchange.connectionFailed":"连接失败","ai-trading-assistant.form.advancedSettings":"高级设置","ai-trading-assistant.form.orderMode":"下单模式","ai-trading-assistant.form.orderModeMaker":"挂单(Maker)","ai-trading-assistant.form.orderModeTaker":"市价(Taker)","ai-trading-assistant.form.orderModeHint":"挂单模式使用限价单,手续费更低;市价模式立即成交,手续费较高","ai-trading-assistant.form.makerWaitSec":"挂单等待时间(秒)","ai-trading-assistant.form.makerWaitSecHint":"挂单后等待成交的时间,超时后取消并重试","ai-trading-assistant.form.makerRetries":"挂单重试次数","ai-trading-assistant.form.makerRetriesHint":"挂单未成交时的最大重试次数","ai-trading-assistant.form.fallbackToMarket":"挂单失败降级市价","ai-trading-assistant.form.fallbackToMarketHint":"开/平仓挂单未成交时,是否降级为市价单以确保成交","ai-trading-assistant.form.marginMode":"保证金模式","ai-trading-assistant.form.marginModeCross":"全仓","ai-trading-assistant.form.marginModeIsolated":"逐仓","ai-analysis.title":"量子交易引擎","ai-analysis.system.online":"在线","ai-analysis.system.agents":"智能体","ai-analysis.system.active":"活跃","ai-analysis.system.stage":"阶段","ai-analysis.panel.roster":"智能体阵容","ai-analysis.panel.thinking":"思考中...","ai-analysis.panel.done":"完成","ai-analysis.panel.standby":"待机","ai-analysis.input.title":"量子交易引擎","ai-analysis.input.placeholder":"选择目标资产 (如 BTC/USDT)","ai-analysis.input.watchlist":"自选股","ai-analysis.input.start":"开始分析","ai-analysis.input.recent":"最近任务:","ai-analysis.vis.stage":"阶段","ai-analysis.vis.processing":"处理中","ai-analysis.result.complete":"分析完成","ai-analysis.result.signal":"最终信号","ai-analysis.result.confidence":"置信度:","ai-analysis.result.new":"新分析","ai-analysis.result.full":"查看完整报告","ai-analysis.logs.title":"系统日志","ai-analysis.modal.title":"机密报告","ai-analysis.modal.fundamental":"基本面分析","ai-analysis.modal.technical":"技术面分析","ai-analysis.modal.sentiment":"情绪面分析","ai-analysis.modal.risk":"风险评估","ai-analysis.stage.idle":"待机","ai-analysis.stage.1":"第一阶段:多维分析","ai-analysis.stage.2":"第二阶段:多空辩论","ai-analysis.stage.3":"第三阶段:战略规划","ai-analysis.stage.4":"第四阶段:风控审查","ai-analysis.stage.complete":"完成","ai-analysis.agent.investment_director":"投资总监","ai-analysis.agent.role.investment_director":"综合分析 & 最终结论","ai-analysis.agent.market":"市场分析师","ai-analysis.agent.role.market":"技术 & 市场数据","ai-analysis.agent.fundamental":"基本面分析师","ai-analysis.agent.role.fundamental":"财务 & 估值","ai-analysis.agent.technical":"技术分析师","ai-analysis.agent.role.technical":"技术指标 & 图表","ai-analysis.agent.news":"新闻分析师","ai-analysis.agent.role.news":"全球新闻过滤","ai-analysis.agent.sentiment":"情绪分析师","ai-analysis.agent.role.sentiment":"社交 & 情绪","ai-analysis.agent.risk":"风险分析师","ai-analysis.agent.role.risk":"基础风险检查","ai-analysis.agent.bull":"看涨研究员","ai-analysis.agent.role.bull":"增长催化剂挖掘","ai-analysis.agent.bear":"看跌研究员","ai-analysis.agent.role.bear":"风险 & 缺陷挖掘","ai-analysis.agent.manager":"研究经理","ai-analysis.agent.role.manager":"辩论主持人","ai-analysis.agent.trader":"交易员","ai-analysis.agent.role.trader":"执行策略师","ai-analysis.agent.risky":"激进分析师","ai-analysis.agent.role.risky":"激进策略","ai-analysis.agent.neutral":"平衡分析师","ai-analysis.agent.role.neutral":"平衡策略","ai-analysis.agent.safe":"保守分析师","ai-analysis.agent.role.safe":"保守策略","ai-analysis.agent.cro":"风控经理 (CRO)","ai-analysis.agent.role.cro":"最终决策权威","ai-analysis.script.market":"正在从主要交易所获取 OHLCV 数据...","ai-analysis.script.fundamental":"正在检索季度财务报告...","ai-analysis.script.technical":"正在分析技术指标和图表形态...","ai-analysis.script.news":"正在扫描全球财经新闻...","ai-analysis.script.sentiment":"正在分析社交媒体趋势...","ai-analysis.script.risk":"正在计算历史波动率...","invite.inviteLink":"邀请链接","invite.copy":"复制链接","invite.copySuccess":"复制成功!","invite.copyFailed":"复制失败,请手动复制","invite.noInviteLink":"邀请链接未生成","invite.totalInvites":"累计邀请","invite.totalReward":"累计奖励","invite.rules":"邀请规则","invite.rule1":"每成功邀请一位好友注册,您将获得奖励","invite.rule2":"被邀请的好友完成首次交易,您将获得额外奖励","invite.rule3":"邀请奖励将直接发放到您的账户","invite.inviteList":"邀请列表","invite.tasks":"任务中心","invite.inviteeName":"被邀请人","invite.inviteTime":"邀请时间","invite.status":"状态","invite.reward":"奖励","invite.active":"活跃","invite.inactive":"未激活","invite.completed":"已完成","invite.claimed":"已领取","invite.pending":"待完成","invite.goToTask":"去完成","invite.claimReward":"领取奖励","invite.verify":"验证完成","invite.verifySuccess":"验证成功!任务已完成","invite.verifyNotCompleted":"任务尚未完成,请先完成任务","invite.verifyFailed":"验证失败,请稍后重试","invite.claimSuccess":"成功领取 {reward} QDT!","invite.claimFailed":"领取失败,请稍后重试","invite.totalRecords":"共 {total} 条记录","invite.task.twitter.title":"转发推文到 X (Twitter)","invite.task.twitter.desc":"分享我们的官方推文到您的 X (Twitter) 账号","invite.task.youtube.title":"关注我们的 YouTube 频道","invite.task.youtube.desc":"订阅并关注我们的 YouTube 官方频道","invite.task.telegram.title":"加入 Telegram 群组","invite.task.telegram.desc":"加入我们的官方 Telegram 社区群组","invite.task.discord.title":"加入 Discord 服务器","invite.task.discord.desc":"加入我们的 Discord 社区服务器",message:"-","layouts.usermenu.dialog.title":"信息","layouts.usermenu.dialog.content":"您确定要注销吗?","layouts.userLayout.title":"于不确定中,寻见真理","settings.title":"系统设置","settings.description":"配置应用设置、API密钥和系统偏好","settings.save":"保存设置","settings.reset":"重置","settings.saveSuccess":"设置保存成功","settings.saveFailed":"保存设置失败","settings.loadFailed":"加载配置失败","settings.openrouterBalance":"OpenRouter 账户余额","settings.queryBalance":"查询余额","settings.balanceUsage":"已使用","settings.balanceRemaining":"剩余额度","settings.balanceLimit":"总限额","settings.balanceQuerySuccess":"余额查询成功","settings.balanceQueryFailed":"余额查询失败","settings.balanceNotQueried":'点击"查询余额"获取账户信息',"settings.default":"默认","settings.pleaseSelect":"请选择","settings.inputApiKey":"请输入密钥","settings.getApi":"获取API","settings.link.getApi":"获取API","settings.link.getApiKey":"获取API Key","settings.link.getToken":"获取Token","settings.link.createBot":"创建Bot","settings.link.viewModels":"查看模型列表","settings.link.freeRegister":"免费注册","settings.link.supportedExchanges":"支持的交易所","settings.link.applyApi":"申请API","settings.link.createSearchEngine":"创建搜索引擎","settings.link.getTurnstileKey":"获取Turnstile密钥","settings.link.getGoogleCredentials":"获取Google凭据","settings.link.getGithubCredentials":"获取GitHub凭据","settings.restartRequired":"配置已保存,部分配置需要重启Python服务才能生效","settings.copyRestartCmd":"复制重启命令","settings.copySuccess":"复制成功","settings.copyFailed":"复制失败","settings.group.server":"服务配置","settings.group.auth":"安全认证","settings.group.ai":"AI/LLM配置","settings.group.trading":"实盘交易","settings.group.strategy":"策略执行","settings.group.data_source":"数据源","settings.group.notification":"通知推送","settings.group.email":"邮件配置","settings.group.sms":"短信配置","settings.group.agent":"AI Agent","settings.group.network":"网络代理","settings.group.search":"搜索配置","settings.group.security":"注册与安全","settings.group.app":"应用配置","settings.field.SECRET_KEY":"Secret Key","settings.field.ADMIN_USER":"管理员用户名","settings.field.ADMIN_PASSWORD":"管理员密码","settings.field.ADMIN_EMAIL":"管理员邮箱","settings.field.ENABLE_REGISTRATION":"允许注册","settings.field.TURNSTILE_SITE_KEY":"Turnstile Site Key","settings.field.TURNSTILE_SECRET_KEY":"Turnstile Secret Key","settings.field.FRONTEND_URL":"前端URL","settings.field.GOOGLE_CLIENT_ID":"Google Client ID","settings.field.GOOGLE_CLIENT_SECRET":"Google Client Secret","settings.field.GOOGLE_REDIRECT_URI":"Google回调URL","settings.field.GITHUB_CLIENT_ID":"GitHub Client ID","settings.field.GITHUB_CLIENT_SECRET":"GitHub Client Secret","settings.field.GITHUB_REDIRECT_URI":"GitHub回调URL","settings.field.SECURITY_IP_MAX_ATTEMPTS":"IP最大失败次数","settings.field.SECURITY_IP_WINDOW_MINUTES":"IP统计窗口(分钟)","settings.field.SECURITY_IP_BLOCK_MINUTES":"IP封禁时长(分钟)","settings.field.SECURITY_ACCOUNT_MAX_ATTEMPTS":"账户最大失败次数","settings.field.SECURITY_ACCOUNT_WINDOW_MINUTES":"账户统计窗口(分钟)","settings.field.SECURITY_ACCOUNT_BLOCK_MINUTES":"账户锁定时长(分钟)","settings.field.VERIFICATION_CODE_EXPIRE_MINUTES":"验证码有效期(分钟)","settings.field.VERIFICATION_CODE_RATE_LIMIT":"验证码发送间隔(秒)","settings.field.VERIFICATION_CODE_IP_HOURLY_LIMIT":"IP每小时验证码上限","settings.field.VERIFICATION_CODE_MAX_ATTEMPTS":"验证码最大尝试次数","settings.field.VERIFICATION_CODE_LOCK_MINUTES":"验证码锁定时长(分钟)","settings.field.PYTHON_API_HOST":"监听地址","settings.field.PYTHON_API_PORT":"端口","settings.field.PYTHON_API_DEBUG":"调试模式","settings.field.ENABLE_PENDING_ORDER_WORKER":"启用订单处理Worker","settings.field.PENDING_ORDER_STALE_SEC":"订单超时时间(秒)","settings.field.ORDER_MODE":"下单模式","settings.field.MAKER_WAIT_SEC":"限价单等待时间(秒)","settings.field.MAKER_OFFSET_BPS":"限价单价格偏移(基点)","settings.field.SIGNAL_WEBHOOK_URL":"Webhook URL","settings.field.SIGNAL_WEBHOOK_TOKEN":"Webhook Token","settings.field.SIGNAL_NOTIFY_TIMEOUT_SEC":"通知超时(秒)","settings.field.TELEGRAM_BOT_TOKEN":"Telegram Bot Token","settings.field.SMTP_HOST":"SMTP服务器","settings.field.SMTP_PORT":"SMTP端口","settings.field.SMTP_USER":"SMTP用户名","settings.field.SMTP_PASSWORD":"SMTP密码","settings.field.SMTP_FROM":"发件人地址","settings.field.SMTP_USE_TLS":"使用TLS","settings.field.SMTP_USE_SSL":"使用SSL","settings.field.TWILIO_ACCOUNT_SID":"Account SID","settings.field.TWILIO_AUTH_TOKEN":"Auth Token","settings.field.TWILIO_FROM_NUMBER":"发送号码","settings.field.DISABLE_RESTORE_RUNNING_STRATEGIES":"禁用自动恢复策略","settings.field.STRATEGY_TICK_INTERVAL_SEC":"策略Tick间隔(秒)","settings.field.PRICE_CACHE_TTL_SEC":"价格缓存TTL(秒)","settings.field.PROXY_PORT":"代理端口","settings.field.PROXY_HOST":"代理主机","settings.field.PROXY_SCHEME":"代理协议","settings.field.PROXY_URL":"完整代理URL","settings.field.CORS_ORIGINS":"CORS来源","settings.field.RATE_LIMIT":"速率限制(每分钟)","settings.field.ENABLE_CACHE":"启用缓存","settings.field.ENABLE_REQUEST_LOG":"启用请求日志","settings.field.ENABLE_AI_ANALYSIS":"启用AI分析","settings.field.ENABLE_AGENT_MEMORY":"启用Agent记忆","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"启用向量检索(本地)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"Embedding维度","settings.field.AGENT_MEMORY_TOP_K":"召回数量TopK","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"候选窗口大小","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"时间衰减半衰期(天)","settings.field.AGENT_MEMORY_W_SIM":"相似度权重","settings.field.AGENT_MEMORY_W_RECENCY":"时间权重","settings.field.AGENT_MEMORY_W_RETURNS":"收益权重","settings.field.ENABLE_REFLECTION_WORKER":"启用自动验证","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"验证周期间隔(秒)","settings.field.OPENROUTER_API_KEY":"OpenRouter API Key","settings.field.OPENROUTER_API_URL":"OpenRouter API URL","settings.field.OPENROUTER_MODEL":"默认模型","settings.field.OPENROUTER_TEMPERATURE":"Temperature","settings.field.OPENROUTER_MAX_TOKENS":"Max Tokens","settings.field.OPENROUTER_TIMEOUT":"超时时间(秒)","settings.field.OPENROUTER_CONNECT_TIMEOUT":"连接超时(秒)","settings.field.AI_MODELS_JSON":"模型列表(JSON)","settings.field.MARKET_TYPES_JSON":"市场类型(JSON)","settings.field.TRADING_SUPPORTED_SYMBOLS_JSON":"支持的交易对(JSON)","settings.field.DATA_SOURCE_TIMEOUT":"数据源超时(秒)","settings.field.DATA_SOURCE_RETRY":"重试次数","settings.field.DATA_SOURCE_RETRY_BACKOFF":"重试退避(秒)","settings.field.FINNHUB_API_KEY":"Finnhub API Key","settings.field.FINNHUB_TIMEOUT":"Finnhub超时(秒)","settings.field.FINNHUB_RATE_LIMIT":"Finnhub速率限制","settings.field.CCXT_DEFAULT_EXCHANGE":"CCXT默认交易所","settings.field.CCXT_TIMEOUT":"CCXT超时(ms)","settings.field.CCXT_PROXY":"CCXT代理","settings.field.AKSHARE_TIMEOUT":"Akshare超时(秒)","settings.field.YFINANCE_TIMEOUT":"YFinance超时(秒)","settings.field.TIINGO_API_KEY":"Tiingo API Key","settings.field.TIINGO_TIMEOUT":"Tiingo超时(秒)","settings.field.SEARCH_PROVIDER":"搜索提供商","settings.field.SEARCH_MAX_RESULTS":"最大结果数","settings.field.TAVILY_API_KEYS":"Tavily API Keys","settings.field.BOCHA_API_KEYS":"博查 API Keys","settings.field.SERPAPI_KEYS":"SerpAPI Keys","settings.field.SEARCH_GOOGLE_API_KEY":"Google API Key","settings.field.SEARCH_GOOGLE_CX":"Google CX","settings.field.SEARCH_BING_API_KEY":"Bing API Key","settings.field.INTERNAL_API_KEY":"内部API Key","settings.desc.PYTHON_API_HOST":"服务监听地址。0.0.0.0 允许外部访问,127.0.0.1 仅本地访问","settings.desc.PYTHON_API_PORT":"服务监听端口,默认5000","settings.desc.PYTHON_API_DEBUG":"启用调试模式,开发时使用。生产环境请关闭","settings.desc.SECRET_KEY":"JWT签名密钥。生产环境必须修改以确保安全","settings.desc.ADMIN_USER":"管理员登录用户名","settings.desc.ADMIN_PASSWORD":"管理员登录密码。生产环境必须修改","settings.desc.OPENROUTER_API_KEY":"OpenRouter API密钥,用于访问多种AI模型","settings.desc.OPENROUTER_API_URL":"OpenRouter API端点地址","settings.desc.OPENROUTER_MODEL":"默认使用的AI模型,如 openai/gpt-4o, anthropic/claude-3.5-sonnet","settings.desc.OPENROUTER_TEMPERATURE":"模型创造性(0-1)。越低越确定性,越高越有创意","settings.desc.OPENROUTER_MAX_TOKENS":"每次请求最大输出token数","settings.desc.OPENROUTER_TIMEOUT":"API请求超时时间(秒)","settings.desc.OPENROUTER_CONNECT_TIMEOUT":"连接建立超时时间(秒)","settings.desc.AI_MODELS_JSON":"自定义模型列表,JSON格式,用于模型选择器","settings.desc.ENABLE_PENDING_ORDER_WORKER":"启用后台订单处理Worker,实盘交易必需","settings.desc.PENDING_ORDER_STALE_SEC":"等待订单超时时间,超时后标记为过期","settings.desc.ORDER_MODE":"maker: 限价单优先(手续费低),market: 市价单(立即成交)","settings.desc.MAKER_WAIT_SEC":"限价单等待成交时间,超时后自动切换为市价单","settings.desc.MAKER_OFFSET_BPS":"限价单价格偏移(基点)。买入价=市价*(1-偏移),卖出价=市价*(1+偏移)","settings.desc.DISABLE_RESTORE_RUNNING_STRATEGIES":"禁止服务重启时自动恢复运行中的策略","settings.desc.STRATEGY_TICK_INTERVAL_SEC":"策略主循环检查间隔(秒)","settings.desc.PRICE_CACHE_TTL_SEC":"价格数据缓存有效期(秒)","settings.desc.MARKET_TYPES_JSON":"自定义市场类型配置,JSON格式","settings.desc.TRADING_SUPPORTED_SYMBOLS_JSON":"支持的交易对列表,JSON格式","settings.desc.DATA_SOURCE_TIMEOUT":"数据源请求默认超时时间","settings.desc.DATA_SOURCE_RETRY":"数据源请求失败时的重试次数","settings.desc.DATA_SOURCE_RETRY_BACKOFF":"重试间隔时间(秒)","settings.desc.CCXT_DEFAULT_EXCHANGE":"CCXT默认交易所(binance, coinbase, okx等)","settings.desc.CCXT_TIMEOUT":"CCXT请求超时时间(毫秒)","settings.desc.CCXT_PROXY":"CCXT请求代理地址(如 socks5h://127.0.0.1:1080)","settings.desc.FINNHUB_API_KEY":"Finnhub API密钥,用于美股数据(有免费额度)","settings.desc.FINNHUB_TIMEOUT":"Finnhub API请求超时时间","settings.desc.FINNHUB_RATE_LIMIT":"Finnhub API速率限制(每分钟请求数)","settings.desc.TIINGO_API_KEY":"Tiingo API密钥,用于外汇/贵金属数据(免费版不支持1分钟数据)","settings.desc.TIINGO_TIMEOUT":"Tiingo API请求超时时间","settings.desc.AKSHARE_TIMEOUT":"Akshare API超时时间,用于A股数据","settings.desc.YFINANCE_TIMEOUT":"Yahoo Finance API超时时间","settings.desc.SIGNAL_WEBHOOK_URL":"信号通知Webhook地址(POST JSON)","settings.desc.SIGNAL_WEBHOOK_TOKEN":"Webhook认证令牌,通过请求头发送","settings.desc.SIGNAL_NOTIFY_TIMEOUT_SEC":"通知请求超时时间","settings.desc.TELEGRAM_BOT_TOKEN":"Telegram机器人Token,从@BotFather获取","settings.desc.SMTP_HOST":"SMTP邮件服务器地址(如 smtp.gmail.com)","settings.desc.SMTP_PORT":"SMTP端口(TLS用587,SSL用465,明文用25)","settings.desc.SMTP_USER":"SMTP认证用户名(通常是邮箱地址)","settings.desc.SMTP_PASSWORD":"SMTP认证密码或应用专用密码","settings.desc.SMTP_FROM":"邮件发件人地址","settings.desc.SMTP_USE_TLS":"启用STARTTLS加密(推荐端口587)","settings.desc.SMTP_USE_SSL":"启用SSL加密(端口465)","settings.desc.TWILIO_ACCOUNT_SID":"Twilio账户SID,从控制台获取","settings.desc.TWILIO_AUTH_TOKEN":"Twilio认证Token,从控制台获取","settings.desc.TWILIO_FROM_NUMBER":"Twilio发送短信的号码(如 +1234567890)","settings.desc.ENABLE_AGENT_MEMORY":"启用AI Agent记忆功能,用于学习历史交易","settings.desc.AGENT_MEMORY_ENABLE_VECTOR":"启用本地向量相似度搜索进行记忆检索","settings.desc.AGENT_MEMORY_EMBEDDING_DIM":"记忆向量嵌入维度","settings.desc.AGENT_MEMORY_TOP_K":"检索时返回的相似记忆数量","settings.desc.AGENT_MEMORY_CANDIDATE_LIMIT":"相似度搜索的候选记忆上限","settings.desc.AGENT_MEMORY_HALF_LIFE_DAYS":"记忆时间衰减的半衰期(天)","settings.desc.AGENT_MEMORY_W_SIM":"记忆排序中相似度分数的权重(0-1)","settings.desc.AGENT_MEMORY_W_RECENCY":"记忆排序中时间新近度的权重(0-1)","settings.desc.AGENT_MEMORY_W_RETURNS":"记忆排序中收益表现的权重(0-1)","settings.desc.ENABLE_REFLECTION_WORKER":"启用后台自动交易反思Worker","settings.desc.REFLECTION_WORKER_INTERVAL_SEC":"自动反思运行间隔(默认24小时)","settings.desc.PROXY_HOST":"代理服务器主机名或IP","settings.desc.PROXY_PORT":"代理服务器端口(留空则禁用代理)","settings.desc.PROXY_SCHEME":"代理协议类型。socks5h 表示DNS也走代理","settings.desc.PROXY_URL":"完整代理URL(设置后覆盖上面的配置)","settings.desc.SEARCH_PROVIDER":"网页搜索提供商,用于AI研究功能。博查(Bocha)推荐用于A股新闻","settings.desc.SEARCH_MAX_RESULTS":"搜索返回的最大结果数","settings.desc.TAVILY_API_KEYS":"Tavily搜索API密钥,多个用逗号分隔可轮换。免费1000次/月","settings.desc.BOCHA_API_KEYS":"博查搜索API密钥,多个用逗号分隔可轮换。A股新闻搜索效果最佳","settings.desc.SERPAPI_KEYS":"SerpAPI密钥,用于Google/Bing搜索,多个用逗号分隔可轮换","settings.desc.SEARCH_GOOGLE_API_KEY":"Google自定义搜索API密钥","settings.desc.SEARCH_GOOGLE_CX":"Google可编程搜索引擎ID (CX)","settings.desc.SEARCH_BING_API_KEY":"Microsoft Bing网页搜索API密钥","settings.desc.INTERNAL_API_KEY":"内部API认证密钥,用于服务间调用","settings.desc.CORS_ORIGINS":"允许的CORS来源(* 表示全部,或逗号分隔的列表)","settings.desc.RATE_LIMIT":"每IP每分钟的API请求限制","settings.desc.ENABLE_CACHE":"启用响应缓存以提高性能","settings.desc.ENABLE_REQUEST_LOG":"记录所有API请求日志,用于调试","settings.desc.ENABLE_AI_ANALYSIS":"启用AI驱动的市场分析功能","portfolio.summary.totalValue":"总市值","portfolio.summary.totalCost":"总成本","portfolio.summary.totalPnl":"总盈亏","portfolio.summary.positionCount":"持仓数量","portfolio.summary.profitLossRatio":"盈利/亏损","portfolio.summary.today":"今日","portfolio.summary.todayPnl":"今日盈亏","portfolio.summary.bestPerformer":"最佳表现","portfolio.summary.worstPerformer":"最差表现","portfolio.summary.priceSync":"价格同步","portfolio.summary.syncInterval":"刷新间隔","portfolio.summary.justNow":"刚刚","portfolio.summary.ago":"前","portfolio.positions.title":"我的持仓","portfolio.positions.add":"添加持仓","portfolio.positions.addFirst":"添加第一笔持仓","portfolio.positions.empty":"暂无持仓记录","portfolio.positions.deleteConfirm":"确定删除这笔持仓吗?","portfolio.positions.currentPrice":"现价","portfolio.positions.entryPrice":"买入价","portfolio.positions.quantity":"数量","portfolio.positions.side":"方向","portfolio.positions.long":"做多","portfolio.positions.short":"做空","portfolio.positions.marketValue":"市值","portfolio.positions.pnl":"盈亏","portfolio.positions.items":"个持仓","portfolio.monitors.title":"AI 监控","portfolio.monitors.add":"添加监控","portfolio.monitors.addFirst":"添加 AI 监控","portfolio.monitors.empty":"暂无监控任务","portfolio.monitors.deleteConfirm":"确定删除这个监控任务吗?","portfolio.monitors.interval":"执行间隔","portfolio.monitors.lastRun":"上次执行","portfolio.monitors.nextRun":"下次执行","portfolio.monitors.channels":"通知渠道","portfolio.monitors.runNow":"立即执行","portfolio.monitors.analysisResult":"AI 分析结果","portfolio.monitors.runningTitle":"AI 分析已启动","portfolio.monitors.runningDesc":"分析正在后台运行,完成后会通过通知推送结果。分析多个持仓可能需要几分钟时间。","portfolio.monitors.timeoutTitle":"请求超时","portfolio.monitors.timeoutDesc":"分析可能正在后台运行中,请稍后查看通知获取结果。如果长时间没有收到通知,请重试。","portfolio.modal.addPosition":"添加持仓","portfolio.modal.editPosition":"编辑持仓","portfolio.modal.addMonitor":"添加监控","portfolio.modal.editMonitor":"编辑监控","portfolio.form.market":"市场","portfolio.form.marketRequired":"请选择市场","portfolio.form.selectMarket":"选择市场","portfolio.form.symbol":"标的代码","portfolio.form.symbolRequired":"请输入标的代码","portfolio.form.searchSymbol":"搜索或输入标的代码","portfolio.form.useAsSymbol":"使用","portfolio.form.asSymbolCode":"作为标的代码","portfolio.form.symbolHint":"可搜索标的库,或直接输入任意代码","portfolio.form.side":"方向","portfolio.form.quantity":"数量","portfolio.form.quantityRequired":"请输入数量","portfolio.form.enterQuantity":"输入持仓数量","portfolio.form.entryPrice":"买入价","portfolio.form.entryPriceRequired":"请输入买入价","portfolio.form.enterEntryPrice":"输入买入价格","portfolio.form.notes":"备注","portfolio.form.enterNotes":"可选:添加备注","portfolio.form.monitorName":"监控名称","portfolio.form.monitorNameRequired":"请输入监控名称","portfolio.form.enterMonitorName":"例如:每日组合分析","portfolio.form.interval":"执行间隔","portfolio.form.minutes":"分钟","portfolio.form.hour":"小时","portfolio.form.hours":"小时","portfolio.form.notifyChannels":"通知渠道","portfolio.form.browser":"浏览器通知","portfolio.form.email":"邮件","portfolio.form.telegramChatId":"Telegram Chat ID","portfolio.form.enterTelegramChatId":"输入 Telegram Chat ID","portfolio.form.telegramRequired":"请输入 Telegram Chat ID","portfolio.form.emailAddress":"邮箱地址","portfolio.form.enterEmail":"输入邮箱地址","portfolio.form.emailRequired":"请输入邮箱地址","portfolio.form.emailInvalid":"请输入有效的邮箱地址","portfolio.form.customPrompt":"自定义提示","portfolio.form.customPromptPlaceholder":'可选:添加特别关注点,例如"重点关注科技股风险"',"portfolio.form.monitorScope":"监控范围","portfolio.form.allPositions":"全部持仓","portfolio.form.selectedPositions":"指定持仓","portfolio.form.selectPositions":"选择持仓","portfolio.form.selectAll":"全选","portfolio.form.deselectAll":"全不选","portfolio.form.selectedCount":"已选 {count}/{total}","portfolio.form.pleaseSelectPositions":"请至少选择一个持仓进行监控","portfolio.form.notificationFromProfile":"通知将发送到您在个人中心配置的地址","portfolio.form.goToProfile":"前往配置","portfolio.message.loadFailed":"加载数据失败","portfolio.message.saveSuccess":"保存成功","portfolio.message.saveFailed":"保存失败","portfolio.message.deleteSuccess":"删除成功","portfolio.message.deleteFailed":"删除失败","portfolio.message.updateFailed":"更新失败","portfolio.message.monitorEnabled":"监控已启用","portfolio.message.monitorDisabled":"监控已暂停","portfolio.message.monitorRunSuccess":"分析完成","portfolio.message.monitorRunFailed":"分析失败","portfolio.message.monitorRunning":"AI 分析已启动,请等待通知","portfolio.groups.all":"全部持仓","portfolio.groups.ungrouped":"未分组","portfolio.form.group":"分组","portfolio.form.enterGroup":"输入或选择分组","portfolio.alerts.title":"价格/盈亏预警","portfolio.alerts.addAlert":"添加预警","portfolio.alerts.editAlert":"编辑预警","portfolio.alerts.alertType":"预警类型","portfolio.alerts.priceAbove":"价格高于","portfolio.alerts.priceBelow":"价格低于","portfolio.alerts.pnlAbove":"盈利高于 (%)","portfolio.alerts.pnlBelow":"亏损低于 (%)","portfolio.alerts.threshold":"阈值","portfolio.alerts.thresholdRequired":"请输入阈值","portfolio.alerts.enterPrice":"输入价格","portfolio.alerts.enterPercent":"输入百分比","portfolio.alerts.currentPrice":"当前价格","portfolio.alerts.currentPriceHint":"当前价格","portfolio.alerts.repeatInterval":"重复提醒","portfolio.alerts.noRepeat":"不重复 (触发一次)","portfolio.alerts.every5min":"每 5 分钟","portfolio.alerts.every15min":"每 15 分钟","portfolio.alerts.every30min":"每 30 分钟","portfolio.alerts.every1hour":"每 1 小时","portfolio.alerts.every4hours":"每 4 小时","portfolio.alerts.onceDaily":"每天一次","portfolio.alerts.enabled":"启用预警","portfolio.alerts.enabledDesc":"开启后将自动监测并触发通知","portfolio.alerts.delete":"删除","portfolio.alerts.deleteConfirm":"确定要删除此预警吗?","portfolio.modal.addAlert":"添加预警","portfolio.modal.editAlert":"编辑预警","menu.userManage":"用户管理","menu.myProfile":"个人中心","common.actions":"操作","common.refresh":"刷新","userManage.title":"用户管理","userManage.searchPlaceholder":"搜索用户名/邮箱/昵称","userManage.description":"管理系统用户、角色和权限","userManage.createUser":"创建用户","userManage.editUser":"编辑用户","userManage.username":"用户名","userManage.password":"密码","userManage.nickname":"昵称","userManage.email":"邮箱","userManage.role":"角色","userManage.status":"状态","userManage.lastLogin":"最后登录","userManage.active":"启用","userManage.disabled":"禁用","userManage.neverLogin":"从未登录","userManage.usernameRequired":"请输入用户名","userManage.usernamePlaceholder":"输入用户名","userManage.passwordRequired":"请输入密码","userManage.passwordPlaceholder":"输入密码(至少6位)","userManage.passwordMin":"密码至少6个字符","userManage.nicknamePlaceholder":"输入昵称","userManage.emailPlaceholder":"输入邮箱","userManage.emailInvalid":"邮箱格式不正确","userManage.rolePlaceholder":"选择角色","userManage.statusPlaceholder":"选择状态","userManage.resetPassword":"重置密码","userManage.resetPasswordWarning":"此操作将重置用户密码","userManage.newPassword":"新密码","userManage.newPasswordPlaceholder":"输入新密码","userManage.confirmDelete":"确定要删除此用户吗?","userManage.roleAdmin":"管理员","userManage.roleManager":"经理","userManage.roleUser":"普通用户","userManage.roleViewer":"访客","profile.title":"个人中心","profile.description":"管理您的账户设置和偏好","profile.basicInfo":"基本信息","profile.changePassword":"修改密码","profile.username":"用户名","profile.nickname":"昵称","profile.email":"邮箱","profile.lastLogin":"最后登录","profile.nicknamePlaceholder":"输入您的昵称","profile.emailPlaceholder":"输入您的邮箱","profile.emailInvalid":"邮箱格式不正确","profile.emailCannotChange":"注册后邮箱不可修改","profile.passwordHint":"密码至少需要6个字符","profile.oldPassword":"当前密码","profile.newPassword":"新密码","profile.confirmPassword":"确认密码","profile.oldPasswordRequired":"请输入当前密码","profile.oldPasswordPlaceholder":"输入当前密码","profile.newPasswordRequired":"请输入新密码","profile.newPasswordPlaceholder":"输入新密码","profile.confirmPasswordRequired":"请确认新密码","profile.confirmPasswordPlaceholder":"再次输入新密码","profile.passwordMin":"密码至少6个字符","profile.passwordMismatch":"两次输入的密码不一致","profile.credits.title":"我的积分","profile.credits.unit":"积分","profile.credits.recharge":"开通/充值","profile.credits.vipExpires":"VIP有效期至","profile.credits.vipExpired":"VIP已过期","profile.credits.noVip":"非VIP用户","profile.credits.hint":"使用AI分析/回测/监控等功能会消耗积分;VIP仅可免费使用VIP免费指标。","profile.creditsLog":"消费记录","profile.creditsLog.time":"时间","profile.creditsLog.action":"类型","profile.creditsLog.amount":"变动","profile.creditsLog.balance":"余额","profile.creditsLog.remark":"备注","profile.creditsLog.actionConsume":"消费","profile.creditsLog.actionRecharge":"充值","profile.creditsLog.actionAdjust":"调整","profile.creditsLog.actionRefund":"退款","profile.creditsLog.actionVipGrant":"VIP授予","profile.creditsLog.actionVipRevoke":"VIP取消","profile.creditsLog.actionRegisterBonus":"注册奖励","profile.creditsLog.actionReferralBonus":"邀请奖励","profile.creditsLog.actionIndicatorPurchase":"购买指标","profile.creditsLog.actionIndicatorSale":"出售指标","profile.referral.title":"邀请好友","profile.referral.listTab":"邀请列表","profile.referral.totalInvited":"已邀请","profile.referral.bonusPerInvite":"每邀请获得","profile.referral.yourLink":"您的邀请链接","profile.referral.copyLink":"复制链接","profile.referral.linkCopied":"邀请链接已复制","profile.referral.newUserBonus":"新用户注册获得","profile.referral.user":"用户","profile.referral.registerTime":"注册时间","profile.referral.noReferrals":"暂无邀请记录","profile.referral.shareNow":"立即分享邀请","profile.notifications.title":"通知设置","profile.notifications.hint":"配置您的默认通知方式,在创建资产监控和预警时将自动使用这些设置","profile.notifications.defaultChannels":"默认通知渠道","profile.notifications.browser":"站内通知","profile.notifications.email":"邮件","profile.notifications.phone":"短信","profile.notifications.telegramBotToken":"Telegram Bot Token","profile.notifications.telegramBotTokenPlaceholder":"请输入您的 Telegram Bot Token","profile.notifications.telegramBotTokenHint":"通过 @BotFather 创建机器人获取 Token","profile.notifications.telegramChatId":"Telegram Chat ID","profile.notifications.telegramPlaceholder":"请输入您的 Telegram Chat ID(如 123456789)","profile.notifications.telegramHint":"发送 /start 给 @userinfobot 可获取您的 Chat ID","profile.notifications.notifyEmail":"通知邮箱","profile.notifications.emailPlaceholder":"接收通知的邮箱地址","profile.notifications.emailHint":"默认使用账户邮箱,可设置其他邮箱接收通知","profile.notifications.phonePlaceholder":"请输入手机号(如 +8613800138000)","profile.notifications.phoneHint":"需要管理员配置 Twilio 服务后才能使用短信通知","profile.notifications.discordWebhook":"Discord Webhook","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"在 Discord 服务器设置中创建 Webhook","profile.notifications.webhookUrl":"Webhook URL","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"自定义 Webhook 地址,将以 POST JSON 方式推送通知","profile.notifications.webhookToken":"Webhook Token(可选)","profile.notifications.webhookTokenPlaceholder":"用于验证请求的 Bearer Token","profile.notifications.webhookTokenHint":"将作为 Authorization: Bearer Token 发送到 Webhook","profile.notifications.testBtn":"发送测试通知","profile.notifications.saveSuccess":"通知设置保存成功","profile.notifications.selectChannel":"请至少选择一个通知渠道","profile.notifications.fillTelegramToken":"请填写 Telegram Bot Token","profile.notifications.fillTelegram":"请填写 Telegram Chat ID","profile.notifications.fillEmail":"请填写通知邮箱","profile.notifications.testSent":"测试通知已发送,请检查您的通知渠道","profile.exchange.title":"交易所配置","profile.exchange.hint":"统一管理您的交易所API密钥和券商连接,在交易助手和快捷交易中可直接选择使用。","profile.exchange.addAccount":"添加交易所账户","profile.exchange.noAccounts":"暂无交易所账户,请点击上方按钮添加","profile.exchange.colExchange":"交易所","profile.exchange.colName":"名称","profile.exchange.colHint":"连接信息","profile.exchange.colCreatedAt":"创建时间","profile.exchange.colActions":"操作","profile.exchange.deleteConfirm":"确定要删除此交易所账户吗?删除后无法恢复。","profile.exchange.deleteSuccess":"交易所账户已删除","profile.exchange.addTitle":"添加交易所账户","profile.exchange.selectExchange":"选择交易所","profile.exchange.accountName":"账户名称(可选)","profile.exchange.accountNamePlaceholder":"如:主账户、测试账户","profile.exchange.apiKey":"API Key","profile.exchange.secretKey":"Secret Key","profile.exchange.passphrase":"Passphrase","profile.exchange.demoTrading":"模拟交易","profile.exchange.ibkrHost":"TWS/Gateway 主机地址","profile.exchange.ibkrPort":"TWS/Gateway 端口","profile.exchange.ibkrPortHint":"TWS纸交易:7497 | TWS实盘:7496 | Gateway纸交易:4002 | Gateway实盘:4001","profile.exchange.ibkrClientId":"客户端ID","profile.exchange.ibkrAccount":"账户号(可选)","profile.exchange.mt5Server":"服务器","profile.exchange.mt5Login":"登录账号","profile.exchange.mt5Password":"密码","profile.exchange.mt5TerminalPath":"终端路径(可选)","profile.exchange.mt5TerminalPathHint":"MT5终端安装路径,如 C:\\Program Files\\MetaTrader 5\\terminal64.exe","profile.exchange.testConnection":"测试连接","profile.exchange.testSuccess":"连接成功!","profile.exchange.testFailed":"连接失败","profile.exchange.saveSuccess":"交易所账户添加成功","profile.exchange.saveFailed":"添加失败","profile.exchange.typeCrypto":"加密货币交易所","profile.exchange.typeIBKR":"美股券商 (IBKR)","profile.exchange.typeMT5":"外汇 (MetaTrader 5)","profile.exchange.localDeploymentRequired":"需要本地部署","profile.exchange.localDeploymentHint":"此券商需要在本地部署QuantDinger才能使用。","profile.exchange.goToManage":"前往个人中心 → 交易所配置管理","profile.exchange.noCredentialHint":"请先在个人中心添加交易所账户","userManage.credits":"积分","userManage.adjustCredits":"调整积分","userManage.setVip":"设置VIP","userManage.currentCredits":"当前积分","userManage.newCredits":"新积分","userManage.enterCredits":"输入新的积分数量","userManage.creditsNonNegative":"积分不能为负数","userManage.currentVip":"当前VIP状态","userManage.vipActive":"有效","userManage.vipExpired":"已过期","userManage.vipDays":"VIP天数","userManage.vipExpiresAt":"VIP过期时间","userManage.cancelVip":"取消VIP","userManage.days":"天","userManage.customDate":"自定义日期","userManage.selectDate":"请选择日期","userManage.remark":"备注","userManage.remarkPlaceholder":"可选备注","userManage.tabUsers":"用户管理","systemOverview.tabTitle":"系统总览","systemOverview.totalStrategies":"策略总数","systemOverview.runningStrategies":"运行中","systemOverview.totalCapital":"总资金","systemOverview.totalPnl":"总盈亏","systemOverview.filterAll":"全部状态","systemOverview.filterRunning":"运行中","systemOverview.filterStopped":"已停止","systemOverview.searchPlaceholder":"搜索策略名/交易对/用户名","systemOverview.running":"运行中","systemOverview.stopped":"已停止","systemOverview.colUser":"用户","systemOverview.colStrategy":"策略名称","systemOverview.colStatus":"状态","systemOverview.colSymbol":"交易对","systemOverview.colCapital":"资金","systemOverview.colPnl":"盈亏 / ROI","systemOverview.colPositions":"持仓","systemOverview.colTrades":"交易次数","systemOverview.colIndicator":"指标","systemOverview.colExchange":"交易所","systemOverview.colTimeframe":"周期","systemOverview.colLeverage":"杠杆","systemOverview.colCreatedAt":"创建时间","systemOverview.realized":"已实现","systemOverview.unrealized":"未实现","systemOverview.symbols":"个交易对","systemOverview.live":"实盘","systemOverview.signal":"仅通知","settings.group.billing":"计费配置","settings.field.BILLING_ENABLED":"启用计费","settings.field.BILLING_VIP_BYPASS":"VIP旁路(旧)","settings.field.BILLING_COST_AI_ANALYSIS":"AI分析消耗","settings.field.BILLING_COST_STRATEGY_RUN":"策略运行消耗","settings.field.BILLING_COST_BACKTEST":"回测消耗","settings.field.BILLING_COST_PORTFOLIO_MONITOR":"Portfolio监控消耗","settings.field.CREDITS_REGISTER_BONUS":"注册奖励","settings.field.CREDITS_REFERRAL_BONUS":"邀请奖励","settings.field.RECHARGE_TELEGRAM_URL":"充值Telegram链接","settings.field.MEMBERSHIP_MONTHLY_PRICE_USD":"包月会员价格(USD)","settings.field.MEMBERSHIP_MONTHLY_CREDITS":"包月会员赠送积分","settings.field.MEMBERSHIP_YEARLY_PRICE_USD":"包年会员价格(USD)","settings.field.MEMBERSHIP_YEARLY_CREDITS":"包年会员赠送积分","settings.field.MEMBERSHIP_LIFETIME_PRICE_USD":"永久会员价格(USD)","settings.field.MEMBERSHIP_LIFETIME_MONTHLY_CREDITS":"永久会员每月赠送积分","settings.field.USDT_PAY_ENABLED":"启用USDT收款","settings.field.USDT_PAY_CHAIN":"USDT网络","settings.field.USDT_TRC20_XPUB":"TRC20 XPUB(仅观察)","settings.field.USDT_TRC20_CONTRACT":"USDT TRC20 合约地址","settings.field.TRONGRID_BASE_URL":"TronGrid Base URL","settings.field.TRONGRID_API_KEY":"TronGrid API Key","settings.field.USDT_PAY_CONFIRM_SECONDS":"确认延迟(秒)","settings.field.USDT_PAY_EXPIRE_MINUTES":"订单过期(分钟)","settings.desc.BILLING_ENABLED":"启用计费系统。启用后,用户使用某些功能需要消耗积分","settings.desc.BILLING_VIP_BYPASS":"旧开关:开启后VIP将旁路所有功能扣积分(不推荐)。建议关闭,VIP仅用于“VIP免费指标”。","settings.desc.BILLING_COST_AI_ANALYSIS":"每次AI分析消耗的积分数","settings.desc.BILLING_COST_STRATEGY_RUN":"启动策略时消耗的积分数","settings.desc.BILLING_COST_BACKTEST":"每次回测消耗的积分数","settings.desc.BILLING_COST_PORTFOLIO_MONITOR":"每次Portfolio AI监控消耗的积分数","settings.desc.CREDITS_REGISTER_BONUS":"新用户注册时获得的积分奖励","settings.desc.CREDITS_REFERRAL_BONUS":"用户通过邀请链接成功邀请新用户时,邀请人获得的积分奖励","settings.desc.VERIFICATION_CODE_MAX_ATTEMPTS":"验证码验证失败的最大尝试次数,超过后将锁定","settings.desc.VERIFICATION_CODE_LOCK_MINUTES":"验证码验证失败次数超过限制后的锁定时长(分钟)","settings.desc.RECHARGE_TELEGRAM_URL":"用户点击充值时跳转的Telegram客服链接","settings.desc.MEMBERSHIP_MONTHLY_PRICE_USD":"包月会员的价格(USD)。当前为模拟支付,后续可接入真实支付网关。","settings.desc.MEMBERSHIP_MONTHLY_CREDITS":"购买包月会员后立即赠送到账号的积分数量。","settings.desc.MEMBERSHIP_YEARLY_PRICE_USD":"包年会员的价格(USD)。当前为模拟支付,后续可接入真实支付网关。","settings.desc.MEMBERSHIP_YEARLY_CREDITS":"购买包年会员后立即赠送到账号的积分数量。","settings.desc.MEMBERSHIP_LIFETIME_PRICE_USD":"永久会员的价格(USD)。当前为模拟支付,后续可接入真实支付网关。","settings.desc.MEMBERSHIP_LIFETIME_MONTHLY_CREDITS":"永久会员每30天自动发放一次的积分数量(首次购买会立刻发放一次)。","settings.desc.USDT_PAY_ENABLED":"开启后,会员购买页会提供 USDT 扫码支付(每单独立地址 + 自动对账)。","settings.desc.USDT_PAY_CHAIN":"当前版本仅支持 TRC20。","settings.desc.USDT_TRC20_XPUB":"仅观察 xpub,用于派生每个订单的收款地址。不要填写私钥/助记词。","settings.desc.USDT_TRC20_CONTRACT":"TRON 链上 USDT 合约地址(默认已填写)。","settings.desc.TRONGRID_BASE_URL":"TronGrid API 基础地址(默认即可)。","settings.desc.TRONGRID_API_KEY":"可选。用于提高 TronGrid 调用额度/稳定性。","settings.desc.USDT_PAY_CONFIRM_SECONDS":"检测到到账后,等待指定秒数再标记“确认”,降低极端回滚风险。","settings.desc.USDT_PAY_EXPIRE_MINUTES":"用户扫码支付的订单有效期,过期后需重新生成订单。","globalMarket.title":"全球金融面板","globalMarket.fearGreedShort":"恐贪","globalMarket.calendar":"财经日历","globalMarket.lastUpdate":"最后更新","globalMarket.refresh":"刷新数据","globalMarket.name":"名称","globalMarket.price":"价格","globalMarket.change":"涨跌","globalMarket.trend":"走势","globalMarket.pair":"货币对","globalMarket.unit":"单位","globalMarket.refreshSuccess":"数据刷新成功","globalMarket.refreshError":"数据刷新失败","globalMarket.fetchError":"获取数据失败","globalMarket.loading":"加载中...","globalMarket.fearGreedIndex":"恐惧贪婪指数","globalMarket.fearGreedTip":"恐惧贪婪指数衡量市场情绪,0表示极度恐惧,100表示极度贪婪","globalMarket.volatilityIndex":"波动率指数","globalMarket.dollarIndex":"美元指数","globalMarket.majorIndices":"主要指数","globalMarket.vixTitle":"VIX 波动率指数","globalMarket.vixTip":"VIX指数衡量市场预期波动率,数值越高表示市场越恐慌","globalMarket.extremeFear":"极度恐惧","globalMarket.fear":"恐惧","globalMarket.neutral":"中性","globalMarket.greed":"贪婪","globalMarket.extremeGreed":"极度贪婪","globalMarket.marketOverview":"全球市场概览","globalMarket.indices":"主要指数","globalMarket.forex":"外汇市场","globalMarket.crypto":"加密货币","globalMarket.commodities":"大宗商品","globalMarket.heatmap":"市场热力图","globalMarket.cryptoHeatmap":"加密货币","globalMarket.commoditiesHeatmap":"大宗商品","globalMarket.sectorHeatmap":"板块","globalMarket.forexHeatmap":"外汇","globalMarket.opportunities":"交易机会","globalMarket.noOpportunities":"暂无明显交易机会","globalMarket.financialNews":"财经资讯","globalMarket.noNews":"暂无新闻","globalMarket.economicCalendar":"财经日历","globalMarket.noEvents":"暂无事件","globalMarket.actual":"实际","globalMarket.forecast":"预期","globalMarket.previous":"前值","globalMarket.signal.bullish":"看涨趋势","globalMarket.signal.bearish":"看跌趋势","globalMarket.signal.overbought":"超买警告","globalMarket.signal.oversold":"超卖机会","globalMarket.worldMap":"全球市场地图","globalMarket.rising":"上涨","globalMarket.falling":"下跌","globalMarket.bullish":"利多","globalMarket.bearish":"利空","globalMarket.expectedImpact":"预期影响","globalMarket.aboveForecast":"高于预期","globalMarket.belowForecast":"低于预期","globalMarket.upcomingEvents":"即将公布","globalMarket.releasedEvents":"已公布数据","trading-assistant.form.notificationFromProfile":"通知将发送到您在个人中心配置的地址。","trading-assistant.form.notificationConfigMissing":"您选中的渠道还未配置参数({channels}),将无法接收通知。请前往个人中心进行配置。","trading-assistant.form.goToProfile":"前往配置","community.title":"指标市场","community.searchPlaceholder":"搜索指标名称或描述...","community.all":"全部","community.freeOnly":"免费","community.paidOnly":"付费","community.sortNewest":"最新发布","community.sortHot":"最热门","community.sortRating":"评分最高","community.sortPriceLow":"价格从低到高","community.sortPriceHigh":"价格从高到低","community.myPurchases":"我的购买","community.noIndicators":"暂无指标","community.createFirst":"发布第一个指标","community.total":"共","community.items":"个","community.free":"免费","community.credits":"积分","community.myIndicator":"我的指标","community.purchased":"已购买","community.noDescription":"暂无描述","community.loadFailed":"加载失败","community.publishedAt":"发布于","community.downloads":"获取","community.rating":"评分","community.views":"浏览","community.description":"指标说明","community.performance":"实盘表现","community.strategyCount":"使用策略数","community.tradeCount":"交易次数","community.winRate":"胜率","community.totalProfit":"总收益","community.reviews":"用户评价","community.useNow":"立即使用","community.getFree":"免费获取","community.buyNow":"立即购买","community.purchaseSuccess":"购买成功!指标已添加到您的指标列表","community.purchaseFailed":"购买失败","community.indicator_not_found":"指标不存在或已下架","community.cannot_buy_own":"不能购买自己的指标","community.already_purchased":"您已购买过此指标","community.insufficient_credits":"积分不足","community.commentSuccess":"评论成功","community.commentFailed":"评论失败","community.commentUpdateSuccess":"评论修改成功","community.commentUpdateFailed":"评论修改失败,请重试","community.editComment":"编辑评论","community.cancelEdit":"取消","community.updateComment":"更新评论","community.alreadyCommented":"您已评论此指标","community.editMyComment":"修改评论","community.me":"我","community.edited":"已编辑","community.not_purchased":"请先购买/获取指标才能评论","community.cannot_comment_own":"不能评论自己的指标","community.already_commented":"您已经评论过此指标","community.noComments":"暂无评论","community.yourRating":"您的评分","community.commentPlaceholder":"分享您的使用体验...","community.submitComment":"提交评论","community.pleaseRate":"请先选择评分","community.loadMore":"加载更多","community.justNow":"刚刚","community.minutesAgo":"分钟前","community.hoursAgo":"小时前","community.daysAgo":"天前","community.noPurchases":"暂无购买记录","community.purchasedFrom":"卖家","community.purchaseTime":"购买时间","community.admin.reviewTab":"审核管理","community.admin.pending":"待审核","community.admin.approved":"已通过","community.admin.rejected":"已拒绝","community.admin.noItems":"暂无记录","community.admin.noDescription":"无描述","community.admin.viewCode":"查看代码","community.admin.note":"审核备注","community.admin.approve":"通过","community.admin.reject":"拒绝","community.admin.unpublish":"下架","community.admin.delete":"删除","community.admin.deleteConfirm":"确定要删除此指标吗?此操作不可撤销。","community.admin.unpublishConfirm":"确定要下架此指标吗?","community.admin.unpublishHint":"下架后该指标将不再在市场显示","community.admin.confirm":"确定","community.admin.cancel":"取消","community.admin.approveTitle":"通过审核","community.admin.rejectTitle":"拒绝审核","community.admin.noteLabel":"审核备注(可选)","community.admin.notePlaceholder":"请输入审核备注...","community.admin.loadFailed":"加载失败","community.admin.reviewSuccess":"审核成功","community.admin.reviewFailed":"审核失败","community.admin.unpublishSuccess":"下架成功","community.admin.unpublishFailed":"下架失败","community.admin.deleteSuccess":"删除成功","community.admin.deleteFailed":"删除失败","fastAnalysis.aiAnalysis":"AI 智能分析","fastAnalysis.analyzing":"AI 正在分析中...","fastAnalysis.pleaseWait":"请稍候,正在获取实时数据并生成专业报告","fastAnalysis.error":"分析失败","fastAnalysis.retry":"重试","fastAnalysis.selectSymbol":"选择标的开始分析","fastAnalysis.selectHint":"从左侧自选列表选择或添加新标的","fastAnalysis.confidence":"置信度","fastAnalysis.currentPrice":"当前价格","fastAnalysis.entryPrice":"建议入场","fastAnalysis.stopLoss":"止损价","fastAnalysis.takeProfit":"止盈目标","fastAnalysis.stopLossHint":"基于2倍ATR和支撑位计算","fastAnalysis.takeProfitHint":"基于3倍ATR和阻力位计算","fastAnalysis.atrBased":"基于ATR波动率","fastAnalysis.riskReward":"风险回报比","fastAnalysis.technical":"技术面","fastAnalysis.fundamental":"基本面","fastAnalysis.sentiment":"情绪面","fastAnalysis.overall":"综合评分","fastAnalysis.keyReasons":"核心理由","fastAnalysis.risks":"风险提示","fastAnalysis.indicators":"技术指标","fastAnalysis.maTrend":"均线趋势","fastAnalysis.support":"支撑位","fastAnalysis.resistance":"阻力位","fastAnalysis.volatility":"波动性","fastAnalysis.wasHelpful":"这次分析对您有帮助吗?","fastAnalysis.helpful":"有帮助","fastAnalysis.notHelpful":"需改进","fastAnalysis.feedbackThanks":"感谢您的反馈!","fastAnalysis.feedbackFailed":"反馈提交失败","fastAnalysis.feedbackUnavailable":"反馈功能暂不可用,请重新分析后重试","fastAnalysis.analysisTime":"分析耗时","fastAnalysis.startAnalysis":"开始分析","fastAnalysis.history":"历史记录","fastAnalysis.systemTitle":"QUANTDINGER AI","fastAnalysis.systemOnline":"系统在线","fastAnalysis.version":"快速版","fastAnalysis.preparing":"准备中...","fastAnalysis.step1":"获取实时数据","fastAnalysis.step2":"计算技术指标","fastAnalysis.step3":"AI深度分析","fastAnalysis.step4":"生成专业报告","fastAnalysis.technicalAnalysis":"技术面分析","fastAnalysis.fundamentalAnalysis":"基本面分析","fastAnalysis.sentimentAnalysis":"市场情绪分析","fastAnalysis.signal.bullish":"看涨","fastAnalysis.signal.bearish":"看跌","fastAnalysis.signal.neutral":"中性","fastAnalysis.signal.overbought":"超买","fastAnalysis.signal.oversold":"超卖","fastAnalysis.signal.strong_bullish":"强烈看涨","fastAnalysis.signal.strong_bearish":"强烈看跌","fastAnalysis.trend.uptrend":"上升趋势","fastAnalysis.trend.downtrend":"下降趋势","fastAnalysis.trend.sideways":"横盘整理","fastAnalysis.trend.consolidating":"盘整","fastAnalysis.trend.golden_cross":"金叉","fastAnalysis.trend.death_cross":"死叉","fastAnalysis.trend.strong_uptrend":"强势上涨","fastAnalysis.trend.strong_downtrend":"强势下跌","fastAnalysis.volatilityLevel.high":"高","fastAnalysis.volatilityLevel.medium":"中","fastAnalysis.volatilityLevel.low":"低","fastAnalysis.volatilityLevel.unknown":"未知","fastAnalysis.marketOverview":"市场概览","fastAnalysis.selectTip":"选择自选列表中的标的,开始 AI 智能分析","fastAnalysis.analysisInProgress":"该标的当前有分析正在进行,请稍候再试(请勿重复点击)。","fastAnalysis.analysisInProgressTitle":"分析进行中","fastAnalysis.insufficientCredits":"积分不足","fastAnalysis.insufficientCreditsDetail":"积分不足:需要 {required},当前 {current},还差 {shortage}。","fastAnalysis.analysisCompleteWithCredits":"分析完成,剩余积分:{remaining}","fastAnalysis.consensusTitle":"多周期客观共识","fastAnalysis.consensusDecision":"共识方向","fastAnalysis.consensusScore":"综合评分","fastAnalysis.consensusAgreement":"周期一致度","aiQuant.title":"AI 量化","aiQuant.strategyList":"策略列表","aiQuant.create":"创建","aiQuant.edit":"编辑","aiQuant.delete":"删除","aiQuant.start":"启动","aiQuant.stop":"停止","aiQuant.analyze":"立即分析","aiQuant.noStrategy":"暂无策略,点击创建开始","aiQuant.selectStrategy":"请从左侧选择一个策略","aiQuant.createFirst":"创建第一个策略","aiQuant.createStrategy":"创建策略","aiQuant.editStrategy":"编辑策略","aiQuant.confirmDelete":"确定要删除此策略吗?","aiQuant.latestAnalysis":"最新分析结果","aiQuant.analysisHistory":"分析历史","aiQuant.decision":"决策","aiQuant.confidence":"置信度","aiQuant.currentPrice":"当前价格","aiQuant.entryPrice":"建议入场","aiQuant.stopLoss":"止损价","aiQuant.takeProfit":"止盈价","aiQuant.reason":"理由","aiQuant.analyzedAt":"分析时间","aiQuant.tradeSettings":"交易设置","aiQuant.minutes":"分钟","aiQuant.hour":"小时","aiQuant.hours":"小时","aiQuant.stats.totalStrategies":"策略总数","aiQuant.stats.runningStrategies":"运行中","aiQuant.stats.totalAnalyses":"分析次数","aiQuant.stats.totalPnl":"总盈亏","aiQuant.status.running":"运行中","aiQuant.status.stopped":"已停止","aiQuant.status.paused":"已暂停","aiQuant.executionMode.signal":"仅信号","aiQuant.executionMode.live":"实盘交易","aiQuant.marketType.spot":"现货","aiQuant.marketType.futures":"合约","aiQuant.field.strategyName":"策略名称","aiQuant.field.market":"市场","aiQuant.field.symbol":"交易对","aiQuant.field.marketType":"市场类型","aiQuant.field.aiModel":"AI 模型","aiQuant.field.interval":"分析间隔","aiQuant.field.aiPrompt":"AI 提示词","aiQuant.field.executionMode":"执行模式","aiQuant.field.positionSize":"仓位大小","aiQuant.field.stopLoss":"止损比例","aiQuant.field.takeProfit":"止盈比例","aiQuant.field.totalAnalyses":"分析次数","aiQuant.field.totalTrades":"交易次数","aiQuant.field.totalPnl":"总盈亏","aiQuant.placeholder.strategyName":"请输入策略名称","aiQuant.placeholder.market":"请选择市场","aiQuant.placeholder.symbol":"例如: BTC/USDT","aiQuant.placeholder.aiModel":"默认使用系统配置","aiQuant.placeholder.aiPrompt":"输入您的交易策略提示词,例如:当RSI低于30时考虑买入...","aiQuant.validation.strategyName":"请输入策略名称","aiQuant.validation.market":"请选择市场","aiQuant.validation.symbol":"请输入交易对","aiQuant.table.decision":"决策","aiQuant.table.confidence":"置信度","aiQuant.table.entryPrice":"入场价","aiQuant.table.stopLoss":"止损价","aiQuant.table.takeProfit":"止盈价","aiQuant.table.time":"时间","aiQuant.msg.createSuccess":"策略创建成功","aiQuant.msg.updateSuccess":"策略更新成功","aiQuant.msg.deleteSuccess":"策略删除成功","aiQuant.msg.startSuccess":"策略已启动","aiQuant.msg.stopSuccess":"策略已停止","aiQuant.msg.analyzeSuccess":"分析完成","aiQuant.field.initialCapital":"投入资金","aiQuant.field.leverage":"杠杆倍数","aiQuant.field.tradeDirection":"交易方向","aiQuant.field.trailingStop":"移动止损","aiQuant.field.trailingStopPct":"移动止损比例","aiQuant.direction.long":"做多","aiQuant.direction.short":"做空","aiQuant.direction.both":"双向","aiQuant.riskControl":"风控设置","aiQuant.aiSettings":"AI设置","aiQuant.systemDefault":"系统默认","aiQuant.placeholder.selectSymbol":"从自选列表选择交易对","aiQuant.hint.symbolFromWatchlist":"从您的自选列表中选择,系统自动识别市场类型","aiQuant.hint.spotLeverageFixed":"现货市场杠杆固定为1x","aiQuant.hint.stopLossEnforced":"强制止损,AI不可修改","aiQuant.hint.takeProfitEnforced":"强制止盈,AI不可修改","aiQuant.hint.aiPromptOnly":"AI仅根据提示词判断方向,不会修改您设置的风控参数","aiQuant.aiLimitWarning":"AI权限限制","aiQuant.aiLimitDescription":"AI只能判断交易方向(买入/卖出/持有),杠杆倍数、下单金额、止盈止损等风控参数由您完全控制,AI无法修改。","aiQuant.userStopLoss":"您的止损","aiQuant.userTakeProfit":"您的止盈","aiQuant.userLeverage":"您的杠杆","aiQuant.validation.initialCapital":"请输入投入资金","aiQuant.table.currentPrice":"当前价格","aiQuant.field.promptTemplate":"策略模板","aiQuant.placeholder.selectTemplate":"选择预设策略模板","aiQuant.template.default":"📊 综合分析(推荐)","aiQuant.template.trend":"📈 趋势跟踪","aiQuant.template.swing":"🔄 波段交易","aiQuant.template.news":"📰 新闻驱动","aiQuant.template.custom":"✏️ 自定义","aiQuant.hint.dataProvided":"系统自动提供:实时价格、技术指标(RSI/MACD/均线)、最近新闻、宏观数据。AI将基于这些数据和您的提示词判断方向。","aiQuant.hint.liveWarning":"实盘模式将使用真实资金交易,请确保已配置交易所API并充分了解风险!","trading-assistant.liveDisclaimer.title":"实盘交易免责声明","trading-assistant.liveDisclaimer.content":"实盘交易存在较高风险,可能导致部分或全部资金损失。平台不保证收益、不承诺盈利。你需自行评估风险并对交易结果承担全部责任。","trading-assistant.liveDisclaimer.agree":"我已阅读并理解上述免责声明,仍选择开启实盘交易","trading-assistant.liveDisclaimer.required":"开启实盘前请先勾选免责声明确认","trading-assistant.liveDisclaimer.blockTitle":"请先确认免责声明","trading-assistant.liveDisclaimer.blockDesc":"勾选免责声明后才可继续配置实盘连接与下单参数。","menu.billing":"会员充值","billing.title":"开通会员 / 充值积分","billing.desc":"选择适合你的会员套餐,开通后会赠送积分。","billing.snapshot.credits":"当前积分","billing.snapshot.vip":"VIP 状态","billing.snapshot.notVip":"非VIP","billing.snapshot.expires":"到期时间","billing.vipRule.title":"VIP 权益说明","billing.vipRule.desc":"VIP 仅拥有一个特殊权限:可免费使用「VIP免费指标」。其它付费功能/指标仍会正常扣积分。","billing.plan.monthly":"包月会员","billing.plan.yearly":"包年会员","billing.plan.lifetime":"永久会员","billing.perMonth":"月","billing.perYear":"年","billing.once":"一次性","billing.credits":"积分","billing.lifetimeMonthly":"每月赠送","billing.buyNow":"立即购买","billing.purchaseSuccess":"购买成功","billing.purchaseFailed":"购买失败","billing.usdt.title":"USDT 扫码支付","billing.usdt.hintTitle":"请使用钱包扫码并完成转账","billing.usdt.hintDesc":"请确保网络与金额正确(当前仅支持 TRC20)。支付到账后系统会自动开通会员并发放积分。","billing.usdt.chain":"网络","billing.usdt.amount":"金额","billing.usdt.address":"收款地址","billing.usdt.copyAddress":"复制地址","billing.usdt.copyAmount":"复制金额","billing.usdt.refresh":"刷新状态","billing.usdt.expires":"过期时间","billing.usdt.paidSuccess":"支付确认成功,已开通会员","billing.usdt.status.pending":"等待支付","billing.usdt.status.paid":"已检测到账","billing.usdt.status.confirmed":"已确认","billing.usdt.status.expired":"已过期","billing.usdt.status.cancelled":"已取消","billing.usdt.status.failed":"失败","billing.usdt.expiredHint":"订单已过期。如您已完成付款但未到账,请联系客服处理(附订单截图和 TxHash)。","billing.usdt.confirmedHint":"支付已确认,会员已激活!感谢您的购买。","community.vipFree":"VIP免费","dashboard.indicator.publish.vipFree":"VIP免费","dashboard.indicator.publish.vipFreeHint":"开启后:VIP用户可免费使用该指标(非VIP仍需购买)。","quickTrade.title":"闪电交易","quickTrade.selectSymbol":"选择交易对","quickTrade.exchange":"交易所","quickTrade.selectExchange":"选择交易所账户","quickTrade.cryptoOnly":"仅支持加密货币","quickTrade.noExchange":"暂无加密交易所账户,请先在个人中心 → 交易所配置中添加","quickTrade.available":"可用余额","quickTrade.long":"做多","quickTrade.short":"做空","quickTrade.market":"市价","quickTrade.limit":"限价","quickTrade.limitPrice":"限价价格","quickTrade.enterPrice":"输入价格","quickTrade.amount":"下单金额","quickTrade.enterAmount":"输入金额","quickTrade.leverage":"杠杆倍数","quickTrade.tpsl":"止盈/止损价格 (可选)","quickTrade.tp":"止盈价格","quickTrade.sl":"止损价格","quickTrade.tpPlaceholder":"输入止盈价格","quickTrade.slPlaceholder":"输入止损价格","quickTrade.optional":"可选","quickTrade.buyLong":"买入/做多","quickTrade.sellShort":"卖出/做空","quickTrade.currentPosition":"当前持仓","quickTrade.side":"方向","quickTrade.posSize":"持仓数量","quickTrade.entryPrice":"开仓价格","quickTrade.markPrice":"标记价格","quickTrade.unrealizedPnl":"未实现盈亏","quickTrade.closePosition":"一键平仓","quickTrade.noPosition":"暂无持仓","quickTrade.noPositionHint":"当前交易对暂无持仓","quickTrade.recentTrades":"最近交易","quickTrade.orderSuccess":"下单成功!","quickTrade.orderFailed":"下单失败","quickTrade.positionClosed":"平仓成功!","quickTrade.openPanel":"闪电交易","quickTrade.tradeNow":"立即交易","adminOrders.tabTitle":"订单列表","adminOrders.totalOrders":"总订单数","adminOrders.paidOrders":"已付款","adminOrders.pendingOrders":"待付款","adminOrders.totalRevenue":"总收入","adminOrders.filterAll":"全部状态","adminOrders.filterPending":"待付款","adminOrders.filterPaid":"已付款","adminOrders.filterConfirmed":"已确认","adminOrders.filterExpired":"已过期","adminOrders.searchPlaceholder":"搜索用户名/邮箱","adminOrders.colUser":"用户","adminOrders.colType":"类型","adminOrders.colPlan":"套餐","adminOrders.colAmount":"金额","adminOrders.colStatus":"状态","adminOrders.colChain":"链","adminOrders.colAddress":"收款地址","adminOrders.colTxHash":"交易哈希","adminOrders.colCreatedAt":"下单时间","adminOrders.lifetime":"永久","adminOrders.yearly":"年付","adminOrders.monthly":"月付","adminOrders.statusPaid":"已付款","adminOrders.statusConfirmed":"已确认","adminOrders.statusPending":"待付款","adminOrders.statusExpired":"已过期","adminOrders.statusCancelled":"已取消","adminOrders.statusFailed":"失败","adminAiStats.tabTitle":"AI 分析记录","adminAiStats.totalAnalyses":"总分析次数","adminAiStats.activeUsers":"活跃用户","adminAiStats.uniqueSymbols":"分析品种数","adminAiStats.accuracy":"正确 / 已验证","adminAiStats.userStatsTitle":"用户使用统计","adminAiStats.recentTitle":"最近分析记录","adminAiStats.searchPlaceholder":"搜索用户名","adminAiStats.colUser":"用户","adminAiStats.colAnalysisCount":"分析次数","adminAiStats.colSymbols":"品种数","adminAiStats.colMarkets":"市场数","adminAiStats.colAccuracy":"正确 / 错误","adminAiStats.colFeedback":"用户反馈","adminAiStats.colLastAnalysis":"最近分析","adminAiStats.colMarket":"市场","adminAiStats.colSymbol":"品种","adminAiStats.colModel":"模型","adminAiStats.colStatus":"状态","adminAiStats.colCreatedAt":"时间","adminAiStats.helpful":"有用","adminAiStats.notHelpful":"没用","polymarket.title":"预测市场","polymarket.subtitle":"基于Polymarket预测市场数据的AI分析和交易机会推荐","polymarket.filter.category":"选择类别","polymarket.filter.sortBy":"排序方式","polymarket.sort.volume":"24小时交易量","polymarket.sort.aiScore":"AI机会评分","polymarket.sort.highProbability":"高概率机会","polymarket.sort.highReturn":"高回报比机会","polymarket.search.placeholder":"搜索预测市场...","polymarket.category.all":"全部","polymarket.category.crypto":"加密货币","polymarket.category.politics":"政治","polymarket.category.economics":"经济","polymarket.category.sports":"体育","polymarket.category.tech":"科技","polymarket.category.finance":"金融","polymarket.category.geopolitics":"地缘政治","polymarket.category.culture":"文化","polymarket.category.climate":"气候","polymarket.category.entertainment":"娱乐","polymarket.market.currentProbability":"当前概率","polymarket.ai.predicted":"AI预测概率","polymarket.ai.marketProbability":"市场概率","polymarket.ai.recommendation":"AI推荐","polymarket.ai.confidence":"置信度","polymarket.ai.opportunityScore":"机会评分","polymarket.ai.reasoning":"分析理由","polymarket.ai.keyFactors":"关键因素","polymarket.recommendation.YES":"YES(看涨)","polymarket.recommendation.NO":"NO(看跌)","polymarket.recommendation.HOLD":"HOLD(中性)","polymarket.status.active":"活跃","polymarket.status.closed":"已关闭","polymarket.status.resolved":"已结算","polymarket.action.viewDetail":"查看详情","polymarket.action.viewOnPolymarket":"在Polymarket查看","polymarket.detail.title":"预测市场详情","polymarket.detail.currentProbability":"当前概率","polymarket.detail.volume24h":"24小时交易量","polymarket.detail.liquidity":"流动性","polymarket.detail.aiAnalysis":"AI分析结果","polymarket.detail.assetOpportunities":"相关资产交易机会","polymarket.opportunity.confidence":"置信度","polymarket.opportunity.analyze":"分析资产","polymarket.signal.BUY":"买入","polymarket.signal.SELL":"卖出","polymarket.signal.HOLD":"持有","polymarket.error.loadFailed":"加载市场列表失败","polymarket.error.searchFailed":"搜索失败","polymarket.error.notFound":"未找到市场数据","polymarket.error.loadDetailFailed":"加载详情失败","polymarket.viewOnPolymarket":"在Polymarket查看","polymarket.filter.explanation.title":"筛选依据说明","polymarket.filter.explanation.volume":"按24小时交易量排序,显示最活跃的预测市场。","polymarket.filter.explanation.aiScore":"按AI机会评分排序,综合考虑AI与市场差异、置信度等因素,优先显示高价值机会。","polymarket.filter.explanation.highProbability":"按AI预测概率排序,优先显示AI认为发生概率较高的事件(AI预测概率 > 市场概率 + 10%)。","polymarket.filter.explanation.highReturn":"按高回报比排序,优先显示AI与市场差异大且置信度高的机会(差异 × 置信度),适合寻找被低估的预测。","polymarket.deepAnalysis.prompt":"当前显示的是基于规则的简单分析。点击下方按钮进行AI深度分析,获得更准确的预测和建议。","polymarket.deepAnalysis.button":"深度分析","polymarket.deepAnalysis.success":"深度分析完成!消耗积分 {credits},剩余积分 {remaining}","polymarket.deepAnalysis.successFree":"深度分析完成!","polymarket.deepAnalysis.failed":"深度分析失败,请稍后重试","polymarket.deepAnalysis.insufficientCredits":"积分不足!需要 {required} 积分,当前 {current} 积分,缺少 {shortage} 积分","polymarket.error.invalidMarketId":"无效的市场ID","polymarket.analysis.title":"Polymarket预测市场分析","polymarket.analysis.description":"输入Polymarket链接或市场标题,AI将为您分析预测市场的交易机会","polymarket.analysis.startAnalysis":"开始分析","polymarket.analysis.inputHint":"请输入Polymarket市场链接或市场标题","polymarket.analysis.inputPlaceholder":'例如:https://polymarket.com/event/xxx 或 "Bitcoin price above $100k in 2025?"',"polymarket.analysis.inputRequired":"请输入Polymarket链接或市场标题","polymarket.analysis.analyzeButton":"开始分析","polymarket.analysis.analyzing":"正在分析中,请稍候...","polymarket.analysis.success":"分析完成!","polymarket.analysis.failed":"分析失败,请稍后重试","polymarket.analysis.insufficientCredits":"积分不足,请先充值","polymarket.analysis.viewOnPolymarket":"在Polymarket查看","polymarket.analysis.aiAnalysis":"AI分析结果","polymarket.analysis.marketProbability":"市场概率","polymarket.analysis.aiPredictedProbability":"AI预测概率","polymarket.analysis.divergence":"差异","polymarket.analysis.recommendation":"推荐","polymarket.analysis.recommendationYes":"YES(看涨)","polymarket.analysis.recommendationNo":"NO(看跌)","polymarket.analysis.recommendationHold":"HOLD(中性)","polymarket.analysis.confidenceScore":"置信度","polymarket.analysis.opportunityScore":"机会评分","polymarket.analysis.reasoning":"分析理由","polymarket.analysis.keyFactors":"关键因素","polymarket.analysis.creditsCharged":"本次分析消耗积分:{credits}","polymarket.analysis.remainingCredits":"剩余积分:{credits}","polymarket.analysis.newAnalysis":"新分析","polymarket.analysis.tabAnalyze":"分析","polymarket.analysis.tabHistory":"历史记录","polymarket.analysis.historyMarket":"市场","polymarket.analysis.historyRecommendation":"推荐","polymarket.analysis.historyOpportunityScore":"机会评分","polymarket.analysis.historyCreatedAt":"分析时间","polymarket.analysis.historyTotal":"共 {total} 条记录","polymarket.analysis.loadHistoryFailed":"加载历史记录失败","aiAssetAnalysis.tabs.polymarket":"预测市场"},f=(0,s.A)((0,s.A)({},y),h)}}]); \ No newline at end of file diff --git a/frontend/dist/js/lang-zh-CN.14105a16.js b/frontend/dist/js/lang-zh-CN.14105a16.js new file mode 100644 index 0000000..53a62b5 --- /dev/null +++ b/frontend/dist/js/lang-zh-CN.14105a16.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[644],{4070:function(a,t,e){e.d(t,{default:function(){return f}});var s=e(76338),i=e(48931),r=e(85505),n={today:"今天",now:"此刻",backToToday:"返回今天",ok:"确定",timeSelect:"选择时间",dateSelect:"选择日期",weekSelect:"选择周",clear:"清除",month:"月",year:"年",previousMonth:"上个月 (翻页上键)",nextMonth:"下个月 (翻页下键)",monthSelect:"选择月份",yearSelect:"选择年份",decadeSelect:"选择年代",yearFormat:"YYYY年",dayFormat:"D日",dateFormat:"YYYY年M月D日",dateTimeFormat:"YYYY年M月D日 HH时mm分ss秒",previousYear:"上一年 (Control键加左方向键)",nextYear:"下一年 (Control键加右方向键)",previousDecade:"上一年代",nextDecade:"下一年代",previousCentury:"上一世纪",nextCentury:"下一世纪"},o={placeholder:"请选择时间"},d=o,l={lang:(0,r.A)({placeholder:"请选择日期",rangePlaceholder:["开始日期","结束日期"]},n),timePickerLocale:(0,r.A)({},d)};l.lang.ok="确 定";var c=l,m=c,g={locale:"zh-cn",Pagination:i.A,DatePicker:c,TimePicker:d,Calendar:m,global:{placeholder:"请选择"},Table:{filterTitle:"筛选",filterConfirm:"确定",filterReset:"重置",selectAll:"全选当页",selectInvert:"反选当页",sortTitle:"排序",expand:"展开行",collapse:"关闭行"},Modal:{okText:"确定",cancelText:"取消",justOkText:"知道了"},Popconfirm:{cancelText:"取消",okText:"确定"},Transfer:{searchPlaceholder:"请输入搜索内容",itemUnit:"项",itemsUnit:"项"},Upload:{uploading:"文件上传中",removeFile:"删除文件",uploadError:"上传错误",previewFile:"预览文件",downloadFile:"下载文件"},Empty:{description:"暂无数据"},Icon:{icon:"图标"},Text:{edit:"编辑",copy:"复制",copied:"复制成功",expand:"展开"},PageHeader:{back:"返回"}},u=g,p=e(52648),b=e.n(p),y={antLocale:u,momentName:"zh-cn",momentLocale:b()},h={"common.confirm":"确定","common.cancel":"取消","common.save":"保存","common.delete":"删除","common.edit":"编辑","common.add":"添加","common.close":"关闭","common.done":"完成","common.ok":"确定","common.loading":"加载中...","common.noData":"暂无数据",submit:"提交",save:"保存","submit.ok":"提交成功","save.ok":"保存成功","menu.welcome":"欢迎","menu.home":"主页","menu.dashboard":"仪表盘","menu.dashboard.indicator":"指标分析","menu.dashboard.community":"指标市场","menu.dashboard.analysis":"AI 分析","menu.dashboard.aiAssetAnalysis":"AI资产分析","menu.dashboard.aiQuant":"AI 量化","menu.dashboard.tradingAssistant":"交易助手","menu.dashboard.portfolio":"资产监测","menu.dashboard.globalMarket":"全球金融","menu.dashboard.polymarket":"预测市场","menu.settings":"系统设置","menu.dashboard.aiTradingAssistant":"AI交易助手","menu.dashboard.signalRobot":"信号机器人","menu.dashboard.monitor":"监控页","menu.dashboard.workplace":"工作台","aiAssetAnalysis.title":"AI资产分析","aiAssetAnalysis.subtitle":"把资产监测、即时分析、定时任务放到一个工作流里,操作更直观、反馈更及时。","aiAssetAnalysis.actions.quickAnalysis":"立即开始分析","aiAssetAnalysis.actions.monitorTasks":"管理监控任务","aiAssetAnalysis.actions.openStandalone":"在独立页面打开","aiAssetAnalysis.quickBar.title":"快捷分析","aiAssetAnalysis.quickBar.placeholder":"从资产池选择标的","aiAssetAnalysis.quickBar.useInQuick":"带入即时分析","aiAssetAnalysis.quickBar.runNow":"一键分析","aiAssetAnalysis.history.title":"最近分析","aiAssetAnalysis.history.empty":"暂无分析记录","aiAssetAnalysis.actions.enterQuick":"进入即时分析","aiAssetAnalysis.actions.enterMonitor":"进入定时任务与资产池","aiAssetAnalysis.flow.poolTitle":"构建资产池","aiAssetAnalysis.flow.poolDesc":"先添加持仓与关注标的,形成统一分析对象池。","aiAssetAnalysis.flow.poolAction":"去管理资产池","aiAssetAnalysis.flow.quickTitle":"即时分析","aiAssetAnalysis.flow.quickDesc":"对任意标的一键发起 AI 分析,快速拿到决策建议。","aiAssetAnalysis.flow.quickAction":"去即时分析","aiAssetAnalysis.flow.autoTitle":"定时监控","aiAssetAnalysis.flow.autoDesc":"配置定时任务自动运行 AI 分析,并推送报告到通知渠道。","aiAssetAnalysis.flow.autoAction":"去配置任务","aiAssetAnalysis.tabs.quick":"即时分析","aiAssetAnalysis.tabs.monitor":"资产池与定时任务","aiAssetAnalysis.tabLead.quick":"适合临时判断:选择标的后立刻分析并查看历史结果。","aiAssetAnalysis.tabLead.monitor":"适合持续跟踪:维护持仓、设置监控范围与执行频率。","aiAssetAnalysis.stats.totalAnalyses":"分析总数","aiAssetAnalysis.stats.accuracy":"准确率","aiAssetAnalysis.stats.avgReturn":"平均回报","aiAssetAnalysis.stats.satisfaction":"用户满意度","aiAssetAnalysis.stats.decisions":"决策分布","aiAssetAnalysis.opportunities.title":"AI 交易机会雷达","aiAssetAnalysis.opportunities.empty":"暂无交易机会","aiAssetAnalysis.opportunities.analyze":"分析","aiAssetAnalysis.opportunities.updateHint":"每小时更新","aiAssetAnalysis.opportunities.signal.overbought":"超买","aiAssetAnalysis.opportunities.signal.oversold":"超卖","aiAssetAnalysis.opportunities.signal.bullish_momentum":"看涨","aiAssetAnalysis.opportunities.signal.bearish_momentum":"看跌","aiAssetAnalysis.opportunities.market.Crypto":"🪙 加密","aiAssetAnalysis.opportunities.market.USStock":"📈 美股","aiAssetAnalysis.opportunities.market.Forex":"💱 外汇","aiAssetAnalysis.opportunities.market.PredictionMarket":"🎯 预测市场","aiAssetAnalysis.opportunities.reason.crypto.overbought":"24h涨幅{change}%,7日涨幅{change7d}%,短期超买风险","aiAssetAnalysis.opportunities.reason.crypto.bullish_momentum":"24h涨幅{change}%,上涨动能强劲","aiAssetAnalysis.opportunities.reason.crypto.oversold":"24h跌幅{change}%,可能超卖反弹","aiAssetAnalysis.opportunities.reason.crypto.bearish_momentum":"24h跌幅{change}%,下跌趋势明显","aiAssetAnalysis.opportunities.reason.usstock.overbought":"日涨幅{change}%,短期涨幅较大,注意回调风险","aiAssetAnalysis.opportunities.reason.usstock.bullish_momentum":"日涨幅{change}%,上涨动能强劲","aiAssetAnalysis.opportunities.reason.usstock.oversold":"日跌幅{change}%,可能超卖反弹","aiAssetAnalysis.opportunities.reason.usstock.bearish_momentum":"日跌幅{change}%,下跌趋势明显","aiAssetAnalysis.opportunities.reason.forex.overbought":"日涨幅{change}%,汇率波动剧烈,注意回调","aiAssetAnalysis.opportunities.reason.forex.bullish_momentum":"日涨幅{change}%,上涨动能较强","aiAssetAnalysis.opportunities.reason.forex.oversold":"日跌幅{change}%,汇率波动剧烈,可能反弹","aiAssetAnalysis.opportunities.reason.forex.bearish_momentum":"日跌幅{change}%,下跌趋势明显","aiAssetAnalysis.checkup.title":"组合体检","aiAssetAnalysis.checkup.btn":"组合体检","aiAssetAnalysis.checkup.desc":"一键对您资产池中的所有持仓进行 AI 分析,快速了解每个标的的当前状态和操作建议。","aiAssetAnalysis.checkup.start":"开始体检","aiAssetAnalysis.checkup.progress":"正在分析 {current}/{total}...","aiAssetAnalysis.checkup.noPositions":"资产池中暂无持仓,请先添加资产。","aiAssetAnalysis.checkup.complete":"体检完成","aiAssetAnalysis.checkup.failed":"分析失败","aiAssetAnalysis.checkup.rerun":"重新体检","aiAssetAnalysis.search.hint":"搜索","aiAssetAnalysis.search.placeholder":"搜索任意标的... (Ctrl+K)","aiAssetAnalysis.search.noResults":"未找到匹配结果,请尝试其他关键词","menu.form":"表单页","menu.form.basic-form":"基础表单","menu.form.step-form":"分步表单","menu.form.step-form.info":"分步表单(填写转账信息)","menu.form.step-form.confirm":"分步表单(确认转账信息)","menu.form.step-form.result":"分步表单(完成)","menu.form.advanced-form":"高级表单","menu.list":"列表页","menu.list.table-list":"查询表格","menu.list.basic-list":"标准列表","menu.list.card-list":"卡片列表","menu.list.search-list":"搜索列表","menu.list.search-list.articles":"搜索列表(文章)","menu.list.search-list.projects":"搜索列表(项目)","menu.list.search-list.applications":"搜索列表(应用)","menu.profile":"详情页","menu.profile.basic":"基础详情页","menu.profile.advanced":"高级详情页","menu.result":"结果页","menu.result.success":"成功页","menu.result.fail":"失败页","menu.exception":"异常页","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"触发错误","menu.account":"个人页","menu.account.center":"个人中心","menu.account.settings":"个人设置","menu.account.trigger":"触发报错","menu.account.logout":"退出登录","menu.wallet":"我的钱包","menu.docs":"文档中心","menu.docs.detail":"文档详情","menu.header.refreshPage":"刷新页面","menu.invite.friends":"邀请好友","app.setting.pagestyle":"整体风格设置","app.setting.pagestyle.light":"亮色菜单风格","app.setting.pagestyle.dark":"暗色菜单风格","app.setting.pagestyle.realdark":"暗黑模式","app.setting.themecolor":"主题色","app.setting.navigationmode":"导航模式","app.setting.sidemenu.nav":"侧边栏导航","app.setting.topmenu.nav":"顶部栏导航","app.setting.content-width":"内容区域宽度","app.setting.content-width.tooltip":"该设定仅 [顶部栏导航] 时有效","app.setting.content-width.fixed":"固定","app.setting.content-width.fluid":"流式","app.setting.fixedheader":"固定 Header","app.setting.fixedheader.tooltip":"固定 Header 时可配置","app.setting.autoHideHeader":"下滑时隐藏 Header","app.setting.fixedsidebar":"固定侧边菜单","app.setting.sidemenu":"侧边菜单布局","app.setting.topmenu":"顶部菜单布局","app.setting.othersettings":"其他设置","app.setting.weakmode":"色弱模式","app.setting.multitab":"多页签模式","app.setting.copy":"拷贝设置","app.setting.loading":"加载主题中","app.setting.copyinfo":"拷贝设置成功 src/config/defaultSettings.js","app.setting.copy.success":"复制完毕","app.setting.copy.fail":"复制失败","app.setting.theme.switching":"正在切换主题!","app.setting.production.hint":"配置栏只在开发环境用于预览,生产环境不会展现,请拷贝后手动修改配置文件","app.setting.themecolor.daybreak":"拂晓蓝(默认)","app.setting.themecolor.dust":"薄暮","app.setting.themecolor.volcano":"火山","app.setting.themecolor.sunset":"日暮","app.setting.themecolor.cyan":"明青","app.setting.themecolor.green":"极光绿","app.setting.themecolor.geekblue":"极客蓝","app.setting.themecolor.purple":"酱紫","app.setting.tooltip":"页面设置","notice.title":"通知中心","notice.empty":"暂无通知","notice.markAllRead":"全部已读","notice.clear":"清空通知","notice.close":"关闭","notice.justNow":"刚刚","notice.minutesAgo":"分钟前","notice.hoursAgo":"小时前","notice.daysAgo":"天前","notice.detailInfo":"详细信息","notice.aiDecision":"AI决策","notice.confidence":"置信度","notice.reasoning":"分析理由","notice.symbol":"标的代码","notice.currentPrice":"当前价格","notice.triggerPrice":"触发价格","notice.action":"操作","notice.quantity":"数量","notice.viewPortfolio":"查看持仓","notice.type.aiMonitor":"AI监控","notice.type.priceAlert":"价格提醒","notice.type.signal":"交易信号","notice.type.buy":"买入信号","notice.type.sell":"卖出信号","notice.type.hold":"持有建议","notice.type.trade":"交易执行","notice.type.notification":"系统通知","user.login.userName":"用户名","user.login.password":"密码","user.login.username.placeholder":"账户: admin","user.login.password.placeholder":"密码: admin or ant.design","user.login.message-invalid-credentials":"登录失败,请检查邮箱和验证码","user.login.message-invalid-verification-code":"验证码错误","user.login.tab-login-credentials":"账户密码登录","user.login.tab-login-email":"邮箱登录","user.login.tab-login-mobile":"手机号登录","user.login.captcha.placeholder":"请输入图形验证码","user.login.mobile.placeholder":"手机号","user.login.mobile.verification-code.placeholder":"验证码","user.login.email.placeholder":"请输入邮箱地址","user.login.email.verification-code.placeholder":"请输入验证码","user.login.email.sending":"验证码发送中...","user.login.email.send-success-title":"提示","user.login.email.send-success":"验证码发送成功,请查收邮件","user.login.sms.send-success":"验证码发送成功,请查收短信","user.login.remember-me":"自动登录","user.login.forgot-password":"忘记密码","user.login.sign-in-with":"其他登录方式","user.login.signup":"注册账户","user.login.login":"登录","user.register.register":"注册","user.register.email.placeholder":"邮箱","user.register.password.placeholder":"请至少输入 6 个字符。请不要使用容易被猜到的密码。","user.register.password.popover-message":"请至少输入 6 个字符。请不要使用容易被猜到的密码。","user.register.confirm-password.placeholder":"确认密码","user.register.get-verification-code":"获取验证码","user.register.sign-in":"使用已有账户登录","user.register-result.msg":"你的账户:{email} 注册成功","user.register-result.activation-email":"激活邮件已发送到你的邮箱中,邮件有效期为24小时。请及时登录邮箱,点击邮件中的链接激活账户。","user.register-result.back-home":"返回首页","user.register-result.view-mailbox":"查看邮箱","user.email.required":"请输入邮箱地址!","user.email.wrong-format":"邮箱地址格式错误!","user.userName.required":"请输入账户名或邮箱地址","user.password.required":"请输入密码!","user.password.twice.msg":"两次输入的密码不匹配!","user.password.strength.msg":"密码强度不够 ","user.password.strength.strong":"强度:强","user.password.strength.medium":"强度:中","user.password.strength.low":"强度:低","user.password.strength.short":"强度:太短","user.confirm-password.required":"请确认密码!","user.phone-number.required":"请输入正确的手机号","user.phone-number.wrong-format":"手机号格式错误!","user.verification-code.required":"请输入验证码!","user.captcha.required":"请输入图形验证码!","user.login.infos":"QuantDinger 是一个 AI 多智能体股票分析辅助工具,不具备证券投资咨询资质。平台中的所有分析结果、评分、参考意见均由 AI 基于历史数据自动生成,仅供学习、研究与技术交流使用,不构成任何投资建议或决策依据。股票投资存在市场风险、流动性风险、政策风险等多种风险,可能导致本金损失。用户应基于自身风险承受能力独立决策,使用本工具产生的任何投资行为及其后果由用户自行承担。市场有风险,投资需谨慎。","user.login.tab-login-web3":"Web3 登录","user.login.web3.tip":"使用钱包进行签名登录","user.login.web3.connect":"连接钱包并登录","user.login.web3.no-wallet":"未检测到钱包","user.login.web3.no-address":"未获取到钱包地址","user.login.web3.nonce-failed":"获取随机数失败","user.login.web3.verify-failed":"签名验证失败","user.login.web3.success":"登录成功","user.login.web3.failed":"钱包登录失败","nav.no_wallet":"未检测到钱包","nav.copy":"复制","nav.copy_success":"复制成功","user.login.oauth.google":"使用 Google 登录","user.login.oauth.github":"使用 GitHub 登录","user.login.oauth.loading":"正在跳转到授权页面...","user.login.oauth.failed":"OAuth 登录失败","user.login.oauth.get-url-failed":"获取授权链接失败","user.login.subtitle":"驱动的全球市场量化洞察","user.login.legal.title":"法律免责声明","user.login.legal.view":"查看法律免责声明","user.login.legal.collapse":"收起法律免责声明","user.login.legal.agree":"我已阅读并同意法律免责声明","user.login.legal.required":"请先阅读并勾选法律免责声明","user.login.legal.content":"QuantDinger 是一个 AI 多智能体股票分析辅助工具,不具备证券投资咨询资质。平台中的所有分析结果、评分、参考意见均由 AI 基于历史数据自动生成,仅供学习、研究与技术交流使用,不构成任何投资建议或决策依据。股票投资存在市场风险、流动性风险、政策风险等多种风险,可能导致本金损失。用户应基于自身风险承受能力独立决策,使用本工具产生的任何投资行为及其后果由用户自行承担。市场有风险,投资需谨慎。","user.login.privacy.title":"用户隐私条款","user.login.privacy.view":"查看用户隐私条款","user.login.privacy.collapse":"收起用户隐私条款","user.login.privacy.content":"我们重视您的隐私与数据保护。1) 收集范围:仅收集实现功能所需的信息(如邮箱、手机号、区号、Web3 钱包地址)以及必要的日志与设备信息。2) 使用目的:用于账户登录与安全校验、服务功能提供、问题排查与合规要求。3) 存储与安全:数据加密存储,并采取必要的权限与访问控制措施,尽力防止未经授权的访问、披露或丢失。4) 共享与第三方:除法律法规要求或履行服务所必需外,不会与第三方共享您的个人信息;若涉及第三方服务(如钱包、短信服务商),仅在实现功能所需的最小范围内处理。5) Cookies/本地存储:用于登录态与必要的会话维持(如令牌、PHPSESSID),您可在浏览器中进行清理或限制。6) 个人权利:您可根据法律法规行使查询、更正、删除、撤回同意等权利。7) 变更与通知:本条款更新后将在页面显著位置提示。继续使用本服务即表示您已阅读并同意更新内容。若您不同意本条款或其中任何更新,请停止使用本服务并联系我们。","user.login.username":"用户名","user.login.usernameRequired":"请输入用户名","user.login.passwordRequired":"请输入密码","user.login.tab":"登录","user.login.submit":"登录","user.login.register":"注册账户","user.login.forgotPassword":"忘记密码?","user.login.orLoginWith":"或使用以下方式登录","user.login.methodPassword":"密码登录","user.login.methodCode":"验证码登录","user.login.email":"邮箱","user.login.emailRequired":"请输入邮箱","user.login.emailInvalid":"邮箱格式不正确","user.login.verificationCode":"验证码","user.login.codeRequired":"请输入验证码","user.login.sendCode":"发送","user.login.codeSent":"验证码已发送","user.login.codeLoginHint":"新用户将自动注册","user.login.welcomeNew":"欢迎!","user.login.accountCreated":"您的账户已创建成功","user.oauth.processing":"正在处理登录...","user.oauth.error.missing_params":"缺少必要参数","user.oauth.error.invalid_state":"无效的状态参数","user.oauth.error.user_creation_failed":"创建用户失败","user.oauth.error.server_error":"服务器错误","user.register.tab":"注册","user.register.title":"创建账户","user.register.email":"邮箱","user.register.emailRequired":"请输入邮箱","user.register.emailInvalid":"邮箱格式不正确","user.register.verificationCode":"验证码","user.register.codeRequired":"请输入验证码","user.register.sendCode":"发送验证码","user.register.codeSent":"验证码已发送","user.register.username":"用户名","user.register.usernameRequired":"请输入用户名","user.register.usernameLength":"用户名需要3-30个字符","user.register.usernamePattern":"以字母开头,只能包含字母、数字和下划线","user.register.password":"密码","user.register.passwordRequired":"请输入密码","user.register.confirmPassword":"确认密码","user.register.confirmPasswordRequired":"请确认密码","user.register.passwordMismatch":"两次输入的密码不一致","user.register.submit":"创建账户","user.register.haveAccount":"已有账户?","user.register.login":"登录","user.register.success":"注册成功","user.register.pleaseLogin":"请使用新账户登录","user.register.pwdMinLength":"至少8个字符","user.register.pwdUppercase":"至少包含一个大写字母","user.register.pwdLowercase":"至少包含一个小写字母","user.register.pwdNumber":"至少包含一个数字","user.resetPassword.title":"重置密码","user.resetPassword.email":"邮箱","user.resetPassword.emailRequired":"请输入邮箱","user.resetPassword.emailInvalid":"邮箱格式不正确","user.resetPassword.verificationCode":"验证码","user.resetPassword.codeRequired":"请输入验证码","user.resetPassword.sendCode":"发送验证码","user.resetPassword.codeSent":"验证码已发送","user.resetPassword.next":"下一步","user.resetPassword.backToLogin":"返回登录","user.resetPassword.resettingFor":"正在为以下邮箱重置密码","user.resetPassword.newPassword":"新密码","user.resetPassword.passwordRequired":"请输入新密码","user.resetPassword.confirmPassword":"确认新密码","user.resetPassword.confirmPasswordRequired":"请确认新密码","user.resetPassword.submit":"重置密码","user.resetPassword.back":"返回","user.resetPassword.successTitle":"密码重置成功","user.resetPassword.successSubtitle":"您现在可以使用新密码登录了","user.resetPassword.goToLogin":"前往登录","user.security.retry":"重试","profile.passwordHintNew":"为了安全,修改密码需要邮箱验证。密码至少8个字符,包含大小写字母和数字。","profile.verificationCode":"验证码","profile.codeRequired":"请输入验证码","profile.codePlaceholder":"输入验证码","profile.sendCode":"发送验证码","profile.codeSent":"验证码已发送","profile.codeWillSendTo":"验证码将发送至","profile.noEmailWarning":"请先在基本信息中设置邮箱","account.basicInfo":"基础信息","account.id":"用户ID","account.username":"用户名","account.nickname":"昵称","account.email":"邮箱","account.mobile":"手机号","account.web3address":"钱包地址","account.pid":"推荐人ID","account.level":"用户等级","account.money":"余额","account.qdtBalance":"QDT 余额","account.score":"积分","account.createtime":"注册时间","account.inviteLink":"邀请链接","account.recharge":"充值","account.rechargeTip":"请使用微信或支付宝扫描下方二维码进行充值","account.qrCodePlaceholder":"二维码占位符(模拟)","account.rechargeAmount":"充值金额","account.enterAmount":"请输入充值金额","account.rechargeHint":"最小充值金额:1 QDT","account.confirmRecharge":"确认充值","account.enterValidAmount":"请输入有效的充值金额","account.rechargeSuccess":"充值成功!已充值 {amount} QDT","account.settings.menuMap.basic":"基本设置","account.settings.menuMap.security":"安全设置","account.settings.menuMap.notification":"新消息通知","account.settings.menuMap.moneyLog":"资金明细","account.moneyLog.empty":"暂无资金明细","account.moneyLog.total":"共 {total} 条记录","account.moneyLog.type.purchase":"购买指标","account.moneyLog.type.recharge":"充值","account.moneyLog.type.refund":"退款","account.moneyLog.type.reward":"奖励","account.moneyLog.type.income":"指标收入","account.moneyLog.type.commission":"平台手续费","wallet.balance":"QDT 余额","wallet.recharge":"充值","wallet.withdraw":"提现","wallet.filter":"筛选","wallet.reset":"重置","wallet.totalRecharge":"累计充值","wallet.totalWithdraw":"累计提现","wallet.totalIncome":"累计收入","wallet.records":"交易记录与资金明细","wallet.tradingRecords":"交易记录","wallet.moneyLog":"资金明细","wallet.rechargeTip":"请使用微信或支付宝扫描下方二维码进行充值","wallet.qrCodePlaceholder":"二维码占位符(模拟)","wallet.rechargeAmount":"充值金额","wallet.enterAmount":"请输入充值金额","wallet.rechargeHint":"最小充值金额:1 QDT","wallet.confirmRecharge":"确认充值","wallet.enterValidAmount":"请输入有效的充值金额","wallet.rechargeSuccess":"充值成功!已充值 {amount} QDT","wallet.rechargeFailed":"充值失败","wallet.withdrawTip":"请输入提现金额和提现地址","wallet.withdrawAmount":"提现金额","wallet.enterWithdrawAmount":"请输入提现金额","wallet.withdrawHint":"最小提现金额:1 QDT","wallet.withdrawAddress":"提现地址(可选)","wallet.enterWithdrawAddress":"请输入提现地址","wallet.confirmWithdraw":"确认提现","wallet.enterValidWithdrawAmount":"请输入有效的提现金额","wallet.insufficientBalance":"余额不足","wallet.withdrawSuccess":"提现成功!已提现 {amount} QDT","wallet.withdrawFailed":"提现失败","wallet.noTradingRecords":"暂无交易记录","wallet.noMoneyLog":"暂无资金明细","wallet.loadTradingRecordsFailed":"加载交易记录失败","wallet.loadMoneyLogFailed":"加载资金明细失败","wallet.moneyLogTotal":"共 {total} 条记录","wallet.moneyLogTypeTitle":"类型","wallet.moneyLogType.all":"全部类型","wallet.table.time":"时间","wallet.table.type":"类型","wallet.table.price":"价格","wallet.table.amount":"数量","wallet.table.money":"金额","wallet.table.balance":"余额","wallet.table.memo":"备注","wallet.table.value":"价值","wallet.table.profit":"盈亏","wallet.table.commission":"手续费","wallet.table.total":"共 {total} 条记录","wallet.tradeType.buy":"买入","wallet.tradeType.sell":"卖出","wallet.tradeType.liquidation":"强平","wallet.tradeType.openLong":"开多","wallet.tradeType.addLong":"加多","wallet.tradeType.closeLong":"平多","wallet.tradeType.closeLongStop":"止损平多","wallet.tradeType.closeLongProfit":"止盈平多","wallet.tradeType.openShort":"开空","wallet.tradeType.addShort":"加空","wallet.tradeType.closeShort":"平空","wallet.tradeType.closeShortStop":"止损平空","wallet.tradeType.closeShortProfit":"止盈平空","wallet.moneyLogType.purchase":"购买指标","wallet.moneyLogType.recharge":"充值","wallet.moneyLogType.withdraw":"提现","wallet.moneyLogType.refund":"退款","wallet.moneyLogType.reward":"奖励","wallet.moneyLogType.income":"收入","wallet.moneyLogType.commission":"手续费","wallet.web3Address.required":"请先填写Web3钱包地址","wallet.web3Address.requiredDescription":"充值前需要先绑定您的Web3钱包地址,用于接收充值","wallet.web3Address.placeholder":"请输入您的Web3钱包地址(0x开头)","wallet.web3Address.save":"保存钱包地址","wallet.web3Address.saveSuccess":"钱包地址保存成功","wallet.web3Address.saveFailed":"保存钱包地址失败","wallet.web3Address.invalidFormat":"请输入有效的Web3钱包地址(以太坊格式:0x开头42位字符,或TRC20格式:T开头34位字符)","wallet.selectCoin":"选择币种","wallet.selectChain":"选择链","wallet.chain.eth":"ETH(ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"BSC","wallet.targetQdtAmount":"想要兑换的QDT数量(可选)","wallet.targetQdtAmount.placeholder":"请输入想要兑换的QDT数量,当前QDT价格:{price} USDT","wallet.targetQdtAmount.requiredUsdt":"需要充值:{amount} USDT","wallet.rechargeAddress":"充值地址","wallet.copyAddress":"复制","wallet.copySuccess":"复制成功!","wallet.copyFailed":"复制失败,请手动复制","wallet.rechargeAddressHint":"请确保使用{chain}链向此地址充值{coin}","wallet.qdtPrice.loading":"加载中...","wallet.rechargeTip.new":"请选择币种和链,然后扫描下方二维码进行充值","wallet.exchangeRate":"1 QDT ≈ {rate} USDT","wallet.withdrawableAmount":"可提现金额","wallet.totalBalance":"总余额","wallet.insufficientWithdrawable":"可提现金额不足,当前可提现:{amount} QDT","wallet.withdrawAddressRequired":"请输入提现地址","wallet.withdrawAddressHint":"请确保地址正确,提现后无法撤销","wallet.withdrawSubmitSuccess":"提现申请提交成功,请等待审核","menu.footer.contactUs":"联系我们","menu.footer.getSupport":"获取支持","menu.footer.socialAccounts":"社交账户","menu.footer.userAgreement":"用户协议","menu.footer.privacyPolicy":"隐私条例","menu.footer.support":"Support","menu.footer.featureRequest":"Feature request","menu.footer.email":"Email","menu.footer.liveChat":"24/7 live chat","dashboard.analysis.title":"Multi-Dimensional Analysis","dashboard.analysis.subtitle":"AI驱动的综合金融分析平台","dashboard.analysis.selectSymbol":"选择或输入标的代码","dashboard.analysis.selectModel":"选择模型","dashboard.analysis.startAnalysis":"开始分析","dashboard.analysis.history":"历史记录","dashboard.analysis.tab.overview":"综合分析","dashboard.analysis.tab.fundamental":"基本面","dashboard.analysis.tab.technical":"技术","dashboard.analysis.tab.news":"新闻","dashboard.analysis.tab.sentiment":"情绪","dashboard.analysis.tab.risk":"风险","dashboard.analysis.tab.debate":"多空辩论","dashboard.analysis.tab.decision":"最终决策","dashboard.analysis.empty.selectSymbol":"选择标的开始分析","dashboard.analysis.empty.selectSymbolDesc":"从自选股列表中选择或输入标的代码,获取多维度AI分析报告","dashboard.analysis.empty.startAnalysis":'点击"开始分析"按钮进行多维度分析',"dashboard.analysis.empty.startAnalysisDesc":"我们将从基本面、技术、新闻、情绪和风险等多个维度为您提供全面的分析","dashboard.analysis.empty.noData":"暂无{type}分析数据,请先进行综合分析","dashboard.analysis.empty.noWatchlist":"暂无自选股","dashboard.analysis.empty.noHistory":"暂无历史记录","dashboard.analysis.empty.watchlistHint":"暂无自选股,请先","dashboard.analysis.empty.noDebateData":"暂无辩论数据","dashboard.analysis.empty.noDecisionData":"暂无决策数据","dashboard.analysis.empty.selectAgent":"请选择一个 Agent 查看分析结果","dashboard.analysis.loading.analyzing":"正在分析中,请稍候...","dashboard.analysis.loading.fundamental":"正在分析基本面数据...","dashboard.analysis.loading.technical":"正在分析技术指标...","dashboard.analysis.loading.news":"正在分析新闻数据...","dashboard.analysis.loading.sentiment":"正在分析市场情绪...","dashboard.analysis.loading.risk":"正在评估风险...","dashboard.analysis.loading.debate":"正在进行多空辩论...","dashboard.analysis.loading.decision":"正在生成最终决策...","dashboard.analysis.score.overall":"综合评分","dashboard.analysis.score.recommendation":"投资建议","dashboard.analysis.score.confidence":"置信度","dashboard.analysis.dimension.fundamental":"基本面","dashboard.analysis.dimension.technical":"技术","dashboard.analysis.dimension.news":"新闻","dashboard.analysis.dimension.sentiment":"情绪","dashboard.analysis.dimension.risk":"风险","dashboard.analysis.card.dimensionScores":"各维度评分","dashboard.analysis.card.overviewReport":"综合分析报告","dashboard.analysis.card.financialMetrics":"财务指标","dashboard.analysis.card.fundamentalReport":"基本面分析报告","dashboard.analysis.card.technicalIndicators":"技术指标","dashboard.analysis.card.technicalReport":"技术分析报告","dashboard.analysis.card.newsList":"相关新闻","dashboard.analysis.card.newsReport":"新闻分析报告","dashboard.analysis.card.sentimentIndicators":"情绪指标","dashboard.analysis.card.sentimentReport":"情绪分析报告","dashboard.analysis.card.riskMetrics":"风险指标","dashboard.analysis.card.riskReport":"风险评估报告","dashboard.analysis.card.bullView":"看涨观点 (Bull)","dashboard.analysis.card.bearView":"看跌观点 (Bear)","dashboard.analysis.card.researchConclusion":"研究员结论","dashboard.analysis.card.traderPlan":"交易员计划","dashboard.analysis.card.riskDebate":"风险委员会辩论","dashboard.analysis.card.finalDecision":"最终决策 (Final Decision)","dashboard.analysis.card.tradePlanDetail":"交易计划详情","dashboard.analysis.tradingPlan.entry_price":"入场价格","dashboard.analysis.tradingPlan.position_size":"仓位大小","dashboard.analysis.tradingPlan.stop_loss":"止损","dashboard.analysis.tradingPlan.take_profit":"止盈","dashboard.analysis.label.confidence":"置信度","dashboard.analysis.label.keyPoints":"核心要点","dashboard.analysis.label.riskWarning":"风险提示","dashboard.analysis.risk.risky":"激进派观点 (Risky)","dashboard.analysis.risk.neutral":"中立派观点 (Neutral)","dashboard.analysis.risk.safe":"保守派观点 (Safe)","dashboard.analysis.risk.conclusion":"结论","dashboard.analysis.feature.fundamental":"基本面分析","dashboard.analysis.feature.technical":"技术分析","dashboard.analysis.feature.news":"新闻分析","dashboard.analysis.feature.sentiment":"情绪分析","dashboard.analysis.feature.risk":"风险评估","dashboard.analysis.watchlist.title":"我的自选股","dashboard.analysis.watchlist.add":"添加","dashboard.analysis.watchlist.addStock":"添加股票","dashboard.analysis.modal.addStock.title":"添加自选股","dashboard.analysis.modal.addStock.confirm":"确定","dashboard.analysis.modal.addStock.cancel":"取消","dashboard.analysis.modal.addStock.market":"市场类型","dashboard.analysis.modal.addStock.marketPlaceholder":"请选择市场","dashboard.analysis.modal.addStock.marketRequired":"请选择市场类型","dashboard.analysis.modal.addStock.symbol":"股票代码","dashboard.analysis.modal.addStock.symbolPlaceholder":"例如: AAPL, TSLA, GOOGL, 000001, BTC","dashboard.analysis.modal.addStock.symbolRequired":"请输入股票代码","dashboard.analysis.modal.addStock.searchPlaceholder":"搜索标的代码或名称","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"搜索或输入标的代码(如:AAPL、BTC/USDT、EUR/USD)","dashboard.analysis.modal.addStock.searchOrInputHint":"支持搜索数据库中的标的,或直接输入代码(系统将自动获取名称)","dashboard.analysis.modal.addStock.search":"搜索","dashboard.analysis.modal.addStock.searchResults":"搜索结果","dashboard.analysis.modal.addStock.hotSymbols":"热门标的","dashboard.analysis.modal.addStock.noHotSymbols":"暂无热门标的","dashboard.analysis.modal.addStock.selectedSymbol":"已选标的","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"请先选择一个标的","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"请先选择一个标的或输入标的代码","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"请输入标的代码","dashboard.analysis.modal.addStock.pleaseSelectMarket":"请先选择市场类型","dashboard.analysis.modal.addStock.searchFailed":"搜索失败,请稍后重试","dashboard.analysis.modal.addStock.noSearchResults":"未找到匹配的标的","dashboard.analysis.modal.addStock.willAutoFetchName":"系统将自动获取名称","dashboard.analysis.modal.addStock.addDirectly":"直接添加","dashboard.analysis.modal.addStock.nameWillBeFetched":"名称将在添加时自动获取","dashboard.analysis.market.USStock":"美股","dashboard.analysis.market.Crypto":"加密货币","dashboard.analysis.market.Forex":"外汇","dashboard.analysis.market.Futures":"期货","dashboard.analysis.modal.history.title":"历史分析记录","dashboard.analysis.modal.history.viewResult":"查看结果","dashboard.analysis.modal.history.completeTime":"完成时间","dashboard.analysis.modal.history.error":"错误","dashboard.analysis.status.pending":"待处理","dashboard.analysis.status.processing":"处理中","dashboard.analysis.status.completed":"已完成","dashboard.analysis.status.failed":"失败","dashboard.analysis.message.selectSymbol":"请先选择标的","dashboard.analysis.message.taskCreated":"分析任务已创建,正在后台执行...","dashboard.analysis.message.analysisComplete":"分析完成","dashboard.analysis.message.analysisCompleteCache":"分析完成(使用缓存数据)","dashboard.analysis.message.analysisFailed":"分析失败,请稍后重试","dashboard.analysis.message.addStockSuccess":"添加成功","dashboard.analysis.message.addStockFailed":"添加失败","dashboard.analysis.message.removeStockSuccess":"移除成功","dashboard.analysis.message.removeStockFailed":"移除失败","dashboard.analysis.message.resumingAnalysis":"正在恢复分析任务...","dashboard.analysis.message.deleteSuccess":"删除成功","dashboard.analysis.message.deleteFailed":"删除失败","dashboard.analysis.modal.history.delete":"删除","dashboard.analysis.modal.history.deleteConfirm":"确定要删除这条分析记录吗?","dashboard.analysis.test":"工专路 {no} 号店","dashboard.analysis.introduce":"指标说明","dashboard.analysis.total-sales":"总销售额","dashboard.analysis.day-sales":"日均销售额¥","dashboard.analysis.visits":"访问量","dashboard.analysis.visits-trend":"访问量趋势","dashboard.analysis.visits-ranking":"门店访问量排名","dashboard.analysis.day-visits":"日访问量","dashboard.analysis.week":"周同比","dashboard.analysis.day":"日同比","dashboard.analysis.payments":"支付笔数","dashboard.analysis.conversion-rate":"转化率","dashboard.analysis.operational-effect":"运营活动效果","dashboard.analysis.sales-trend":"销售趋势","dashboard.analysis.sales-ranking":"门店销售额排名","dashboard.analysis.all-year":"全年","dashboard.analysis.all-month":"本月","dashboard.analysis.all-week":"本周","dashboard.analysis.all-day":"今日","dashboard.analysis.search-users":"搜索用户数","dashboard.analysis.per-capita-search":"人均搜索次数","dashboard.analysis.online-top-search":"线上热门搜索","dashboard.analysis.the-proportion-of-sales":"销售额类别占比","dashboard.analysis.dropdown-option-one":"操作一","dashboard.analysis.dropdown-option-two":"操作二","dashboard.analysis.channel.all":"全部渠道","dashboard.analysis.channel.online":"线上","dashboard.analysis.channel.stores":"门店","dashboard.analysis.sales":"销售额","dashboard.analysis.traffic":"客流量","dashboard.analysis.table.rank":"排名","dashboard.analysis.table.search-keyword":"搜索关键词","dashboard.analysis.table.users":"用户数","dashboard.analysis.table.weekly-range":"周涨幅","dashboard.indicator.selectSymbol":"选择或输入标的代码","dashboard.indicator.emptyWatchlistHint":"暂无自选股,请先添加","dashboard.indicator.hint.selectSymbol":"请选择标的开始分析","dashboard.indicator.hint.selectSymbolDesc":"在上方搜索框中选择或输入股票代码,查看K线图表和技术指标","dashboard.indicator.retry":"重试","dashboard.indicator.panel.title":"技术指标","dashboard.indicator.panel.realtimeOn":"关闭实时更新","dashboard.indicator.panel.realtimeOff":"开启实时更新","dashboard.indicator.panel.themeLight":"切换到深色主题","dashboard.indicator.panel.themeDark":"切换到浅色主题","dashboard.indicator.section.enabled":"已启用","dashboard.indicator.section.added":"我添加的指标","dashboard.indicator.section.custom":"自己创建的指标","dashboard.indicator.section.bought":"我选购的指标","dashboard.indicator.section.myCreated":"我创建的指标","dashboard.indicator.section.purchased":"我购买的指标","dashboard.indicator.empty":"暂无指标,请先添加或创建指标","dashboard.indicator.emptyPurchased":"暂无购买的指标,去指标市场看看","dashboard.indicator.buy":"购买指标","dashboard.indicator.action.start":"启动","dashboard.indicator.action.stop":"关闭","dashboard.indicator.action.edit":"编辑","dashboard.indicator.action.delete":"删除","dashboard.indicator.action.backtest":"回测","dashboard.indicator.action.publish":"发布到社区","dashboard.indicator.action.unpublish":"已发布(点击管理)","dashboard.indicator.status.normal":"正常","dashboard.indicator.status.normalPermanent":"正常(永久有效)","dashboard.indicator.status.expired":"已过期","dashboard.indicator.expiry.permanent":"永久有效","dashboard.indicator.expiry.noExpiry":"无到期时间","dashboard.indicator.expiry.expired":"已过期:{date}","dashboard.indicator.expiry.expiresOn":"到期时间:{date}","dashboard.indicator.delete.confirmTitle":"确认删除","dashboard.indicator.delete.confirmContent":'确定要删除指标"{name}"吗?此操作不可恢复。',"dashboard.indicator.delete.confirmOk":"删除","dashboard.indicator.delete.confirmCancel":"取消","dashboard.indicator.delete.success":"删除成功","dashboard.indicator.delete.failed":"删除失败","dashboard.indicator.save.success":"保存成功","dashboard.indicator.save.failed":"保存失败","dashboard.indicator.publish.title":"发布到社区","dashboard.indicator.publish.editTitle":"管理发布","dashboard.indicator.publish.hint":'发布后,其他用户可以在"指标社区"中看到并购买您的指标',"dashboard.indicator.publish.pricingType":"定价方式","dashboard.indicator.publish.free":"免费","dashboard.indicator.publish.paid":"付费","dashboard.indicator.publish.price":"价格","dashboard.indicator.publish.description":"指标描述","dashboard.indicator.publish.descriptionPlaceholder":"请输入指标的详细描述,帮助其他用户了解指标功能...","dashboard.indicator.publish.confirm":"确认发布","dashboard.indicator.publish.update":"更新发布","dashboard.indicator.publish.unpublish":"取消发布","dashboard.indicator.publish.success":"发布成功","dashboard.indicator.publish.failed":"发布失败","dashboard.indicator.publish.unpublishSuccess":"已取消发布","dashboard.indicator.publish.unpublishFailed":"取消发布失败","dashboard.indicator.error.loadWatchlistFailed":"加载自选股失败","dashboard.indicator.error.chartNotReady":"图表组件未初始化,请先选择标的并等待图表加载完成","dashboard.indicator.error.chartMethodNotReady":"图表组件方法未就绪,请稍后重试","dashboard.indicator.error.chartExecuteNotReady":"图表组件执行方法未就绪,请稍后重试","dashboard.indicator.error.parseFailed":"无法解析Python代码","dashboard.indicator.error.parseFailedCheck":"无法解析Python代码,请检查代码格式","dashboard.indicator.error.addIndicatorFailed":"添加指标失败","dashboard.indicator.error.runIndicatorFailed":"运行指标失败","dashboard.indicator.error.pleaseLogin":"请先登录","dashboard.indicator.error.loadDataFailed":"数据加载失败","dashboard.indicator.error.loadDataFailedDesc":"请检查网络连接","dashboard.indicator.error.tiingoSubscription":"外汇1分钟数据需要 Tiingo 付费订阅,请使用其他时间周期或升级订阅","dashboard.indicator.error.pythonEngineFailed":"Python 引擎加载失败,指标功能可能无法使用","dashboard.indicator.error.chartInitFailed":"图表初始化失败","dashboard.indicator.warning.enterCode":"请先输入指标代码","dashboard.indicator.warning.pyodideLoadFailed":"Python 引擎加载失败","dashboard.indicator.warning.pyodideLoadFailedDesc":"您当前所在区域或网络环境无法使用该功能","dashboard.indicator.warning.chartNotInitialized":"图表未初始化,无法使用画线工具","dashboard.indicator.success.runIndicator":"指标运行成功","dashboard.indicator.success.clearDrawings":"已清除所有画线","dashboard.indicator.sma":"SMA (均线组合)","dashboard.indicator.ema":"EMA (指数均线组合)","dashboard.indicator.rsi":"RSI (相对强弱)","dashboard.indicator.macd":"MACD","dashboard.indicator.bb":"布林带 (Bollinger Bands)","dashboard.indicator.atr":"ATR (平均真实波幅)","dashboard.indicator.cci":"CCI (商品通道指数)","dashboard.indicator.williams":"Williams %R (威廉指标)","dashboard.indicator.mfi":"MFI (资金流量指标)","dashboard.indicator.adx":"ADX (平均趋向指数)","dashboard.indicator.obv":"OBV (能量潮)","dashboard.indicator.adosc":"ADOSC (积累/派发振荡器)","dashboard.indicator.ad":"AD (积累/派发线)","dashboard.indicator.kdj":"KDJ (随机指标)","dashboard.indicator.signal.buy":"BUY","dashboard.indicator.signal.sell":"SELL","dashboard.indicator.signal.supertrendBuy":"SuperTrend Buy","dashboard.indicator.signal.supertrendSell":"SuperTrend Sell","dashboard.indicator.chart.kline":"K线","dashboard.indicator.chart.volume":"成交量","dashboard.indicator.chart.uptrend":"Up Trend","dashboard.indicator.chart.downtrend":"Down Trend","dashboard.indicator.tooltip.time":"时间","dashboard.indicator.tooltip.open":"开","dashboard.indicator.tooltip.close":"收","dashboard.indicator.tooltip.high":"高","dashboard.indicator.tooltip.low":"低","dashboard.indicator.tooltip.volume":"成交量","dashboard.indicator.drawing.line":"线段","dashboard.indicator.drawing.horizontalLine":"水平线","dashboard.indicator.drawing.verticalLine":"垂直线","dashboard.indicator.drawing.ray":"射线","dashboard.indicator.drawing.straightLine":"直线","dashboard.indicator.drawing.parallelLine":"平行线","dashboard.indicator.drawing.priceLine":"价格线","dashboard.indicator.drawing.priceChannel":"价格通道","dashboard.indicator.drawing.fibonacciLine":"斐波那契线","dashboard.indicator.drawing.measure":"测量","dashboard.indicator.drawing.clearAll":"清除所有画线","dashboard.indicator.market.USStock":"美股","dashboard.indicator.market.Crypto":"加密货币","dashboard.indicator.market.Forex":"外汇","dashboard.indicator.market.Futures":"期货","dashboard.indicator.create":"创建指标","dashboard.indicator.editor.title":"创建/编辑指标","dashboard.indicator.editor.name":"指标名称","dashboard.indicator.editor.nameRequired":"请输入指标名称","dashboard.indicator.editor.namePlaceholder":"请输入指标名称","dashboard.indicator.editor.description":"指标描述","dashboard.indicator.editor.descriptionPlaceholder":"请输入指标描述(可选)","dashboard.indicator.editor.code":"指标脚本(Python)","dashboard.indicator.editor.codeRequired":"请输入指标代码","dashboard.indicator.editor.codePlaceholder":"请输入Python代码","dashboard.indicator.editor.run":"运行","dashboard.indicator.editor.runHint":"点击运行按钮可以在K线图上预览指标效果","dashboard.indicator.editor.guide":"开发指南","dashboard.indicator.editor.guideTitle":"Python 指标开发指南","dashboard.indicator.editor.save":"保存","dashboard.indicator.editor.cancel":"取消","dashboard.indicator.editor.unnamed":"未命名指标","dashboard.indicator.editor.publishToCommunity":"发布到社区","dashboard.indicator.editor.publishToCommunityHint":"发布后,其他用户可以在社区中查看和使用您的指标","dashboard.indicator.editor.indicatorType":"指标类型","dashboard.indicator.editor.indicatorTypeRequired":"请选择指标类型","dashboard.indicator.editor.indicatorTypePlaceholder":"请选择指标类型","dashboard.indicator.editor.previewImage":"预览图","dashboard.indicator.editor.uploadImage":"上传图片","dashboard.indicator.editor.previewImageHint":"建议尺寸:800x400,大小不超过2MB","dashboard.indicator.editor.pricing":"售价(QDT)","dashboard.indicator.editor.pricingType.free":"免费","dashboard.indicator.editor.pricingType.permanent":"永久","dashboard.indicator.editor.pricingType.monthly":"月付","dashboard.indicator.editor.price":"价格","dashboard.indicator.editor.priceRequired":"请输入价格","dashboard.indicator.editor.pricePlaceholder":"请输入价格","dashboard.indicator.editor.pricingHint":"免费指标虽然价格为0,但平台会根据您的指标使用量和好评率给予奖励(QDT)","dashboard.indicator.editor.aiGenerate":"智能生成","dashboard.indicator.editor.aiPromptPlaceholder":"请描述你的信号逻辑(只输出 buy/sell)与绘图(plots)。仓位/风控/加减仓请在回测配置中设定。","dashboard.indicator.editor.aiGenerateBtn":"AI生成代码","dashboard.indicator.editor.aiPromptRequired":"请输入您的想法","dashboard.indicator.editor.aiGenerateSuccess":"代码生成成功","dashboard.indicator.editor.aiGenerateError":"代码生成失败,请稍后重试","dashboard.indicator.editor.verifyCode":"代码检查","dashboard.indicator.editor.verifyCodeSuccess":"代码检查通过","dashboard.indicator.editor.verifyCodeFailed":"代码检查未通过","dashboard.indicator.editor.verifyCodeEmpty":"代码不能为空","dashboard.indicator.boundary.message":"提示:指标脚本只负责“计算 + 绘图 + buy/sell 信号”;仓位、风控、加减仓、手续费/滑点属于策略执行配置。","dashboard.indicator.boundary.indicatorRule":"指标脚本请只输出 buy/sell(并设定 df['buy']/df['sell'])。不要在脚本内撰写仓位管理、止盈止损、加减仓。","dashboard.indicator.boundary.backtestRule":"规则:同一根K线若出现主信号(buy/sell→开/平仓/反手),本K线将跳过所有加仓与减仓。","dashboard.indicator.paramsConfig.title":"指标参数配置","dashboard.indicator.paramsConfig.noParams":"该指标没有可配置的参数","dashboard.indicator.paramsConfig.hint":"设置参数后点击确定运行指标","dashboard.indicator.backtest.title":"指标回测","dashboard.indicator.backtest.config":"回测参数","dashboard.indicator.backtest.startDate":"开始日期","dashboard.indicator.backtest.endDate":"结束日期","dashboard.indicator.backtest.selectStartDate":"选择开始日期","dashboard.indicator.backtest.selectEndDate":"选择结束日期","dashboard.indicator.backtest.startDateRequired":"请选择开始日期","dashboard.indicator.backtest.endDateRequired":"请选择结束日期","dashboard.indicator.backtest.initialCapital":"初始资金","dashboard.indicator.backtest.initialCapitalRequired":"请输入初始资金","dashboard.indicator.backtest.commission":"手续费率(%)","dashboard.indicator.backtest.commissionHint":"按名义价值(含杠杆)收取;每笔成交(开/平仓)都会从余额扣除。","dashboard.indicator.backtest.leverage":"杠杆倍率","dashboard.indicator.backtest.timeframe":"K线周期","dashboard.indicator.backtest.tradeDirection":"交易方向","dashboard.indicator.backtest.longOnly":"做多","dashboard.indicator.backtest.shortOnly":"做空","dashboard.indicator.backtest.both":"双向","dashboard.indicator.backtest.run":"开始回测","dashboard.indicator.backtest.rerun":"重新回测","dashboard.indicator.backtest.close":"关闭","dashboard.indicator.backtest.running":"正在进行指标回测...","dashboard.indicator.backtest.loadingTip1":"正在获取历史K线数据...","dashboard.indicator.backtest.loadingTip2":"正在执行策略信号计算...","dashboard.indicator.backtest.loadingTip3":"正在模拟交易执行...","dashboard.indicator.backtest.loadingTip4":"正在计算回测指标...","dashboard.indicator.backtest.loadingTip5":"即将完成,请稍候...","dashboard.indicator.backtest.results":"回测结果","dashboard.indicator.backtest.totalReturn":"总收益率","dashboard.indicator.backtest.annualReturn":"年化收益","dashboard.indicator.backtest.maxDrawdown":"最大回撤","dashboard.indicator.backtest.sharpeRatio":"夏普比率","dashboard.indicator.backtest.winRate":"胜率","dashboard.indicator.backtest.profitFactor":"盈亏比","dashboard.indicator.backtest.totalTrades":"交易次数","dashboard.indicator.totalReturn":"总收益率","dashboard.indicator.annualReturn":"年化收益率","dashboard.indicator.maxDrawdown":"最大回撤","dashboard.indicator.sharpeRatio":"夏普比率","dashboard.indicator.winRate":"胜率","dashboard.indicator.profitFactor":"盈亏比","dashboard.indicator.totalTrades":"总交易次数","dashboard.indicator.backtest.totalCommission":"总手续费","dashboard.indicator.backtest.equityCurve":"收益曲线","dashboard.indicator.backtest.strategy":"指标收益","dashboard.indicator.backtest.benchmark":"基准收益","dashboard.indicator.backtest.tradeHistory":"交易记录","dashboard.indicator.backtest.tradeTime":"时间","dashboard.indicator.backtest.tradeType":"类型","dashboard.indicator.backtest.buy":"买入","dashboard.indicator.backtest.sell":"卖出","dashboard.indicator.backtest.liquidation":"爆仓","dashboard.indicator.backtest.openLong":"开多","dashboard.indicator.backtest.closeLong":"平多","dashboard.indicator.backtest.closeLongStop":"平多(止损)","dashboard.indicator.backtest.closeLongProfit":"平多(止盈)","dashboard.indicator.backtest.addLong":"加多仓","dashboard.indicator.backtest.openShort":"开空","dashboard.indicator.backtest.closeShort":"平空","dashboard.indicator.backtest.closeShortStop":"平空(止损)","dashboard.indicator.backtest.closeShortProfit":"平空(止盈)","dashboard.indicator.backtest.addShort":"加空仓","dashboard.indicator.backtest.price":"价格","dashboard.indicator.backtest.amount":"数量","dashboard.indicator.backtest.balance":"账户余额","dashboard.indicator.backtest.profit":"盈亏","dashboard.indicator.backtest.success":"回测完成","dashboard.indicator.backtest.failed":"回测失败,请稍后重试","dashboard.indicator.backtest.quickSelect":"快速选择","dashboard.indicator.backtest.precisionMode":"回测精度模式","dashboard.indicator.backtest.estimatedCandles":"预计处理约 {count} 根K线","dashboard.indicator.backtest.highPrecisionDesc":"使用1分钟级别K线进行高精度回测,止损止盈触发更精确","dashboard.indicator.backtest.mediumPrecisionDesc":"回测区间超过30天,使用5分钟级别K线以平衡精度与性能","dashboard.indicator.backtest.standardModeWarning":"使用标准回测模式","dashboard.indicator.backtest.standardModeDesc":"当前配置不支持高精度回测,将使用策略K线进行回测","dashboard.indicator.backtest.onlyCryptoSupported":"高精度回测仅支持加密货币市场","dashboard.indicator.backtest.noIndicatorCode":"该指标没有可回测的代码","dashboard.indicator.backtest.noSymbol":"请先选择交易标的","dashboard.indicator.backtest.dateRangeExceeded":"回测时间范围超出限制:{timeframe}周期最多可回测{maxRange}","dashboard.indicator.backtest.dateRangeExceededDays":"回测时间范围超出限制:{timeframe}周期最多可回测{maxRange}({maxDays}天)","dashboard.indicator.backtest.metaLine":"标的:{symbol} | 市场:{market} | 周期:{timeframe}","dashboard.indicator.backtest.savedRunId":"回测已保存,记录ID:{id}","dashboard.indicator.backtest.historyTitle":"回测记录","dashboard.indicator.backtest.historyRefresh":"刷新","dashboard.indicator.backtest.historyView":"查看","dashboard.indicator.backtest.historyNoData":"暂无回测记录","dashboard.indicator.backtest.historyUseCurrent":"仅目前币种/周期","dashboard.indicator.backtest.historyFilterSymbol":"币种(Symbol)","dashboard.indicator.backtest.historyFilterTimeframe":"周期(Timeframe)","dashboard.indicator.backtest.historyApply":"应用筛选","dashboard.indicator.backtest.historyAIAnalyze":"AI分析","dashboard.indicator.backtest.historyAIAnalyzeTitle":"AI 分析建议","dashboard.indicator.backtest.historyNoAIResult":"暂无 AI 分析结果","dashboard.indicator.backtest.historyRunId":"记录ID","dashboard.indicator.backtest.historyCreatedAt":"时间","dashboard.indicator.backtest.historyRange":"区间","dashboard.indicator.backtest.historyStatus":"状态","dashboard.indicator.backtest.historyStatusSuccess":"成功","dashboard.indicator.backtest.historyStatusFailed":"失败","dashboard.indicator.backtest.historyActions":"操作","dashboard.indicator.backtest.prev":"上一步","dashboard.indicator.backtest.next":"下一步","dashboard.indicator.backtest.steps.strategy.title":"执行配置","dashboard.indicator.backtest.steps.strategy.desc":"仓位/风控/加减仓(策略层)","dashboard.indicator.backtest.steps.trading.title":"回测环境","dashboard.indicator.backtest.steps.trading.desc":"时间/资金/费率/杠杆/滑点","dashboard.indicator.backtest.steps.results.title":"结果","dashboard.indicator.backtest.steps.results.desc":"统计与交易明细","dashboard.indicator.backtest.panel.risk":"执行配置:风控(止损/移动止盈)","dashboard.indicator.backtest.panel.scale":"执行配置:加仓(顺势/逆势)","dashboard.indicator.backtest.panel.reduce":"执行配置:减仓(顺势/逆势)","dashboard.indicator.backtest.panel.position":"执行配置:开仓仓位","dashboard.indicator.backtest.field.stopLossPct":"止损(%)","dashboard.indicator.backtest.field.takeProfitPct":"止盈(%)","dashboard.indicator.backtest.field.trailingEnabled":"移动止盈","dashboard.indicator.backtest.field.trailingStopPct":"移动回撤(%)","dashboard.indicator.backtest.field.trailingActivationPct":"移动止盈激活(%)","dashboard.indicator.backtest.field.slippage":"滑点(%)","dashboard.indicator.backtest.field.trendAddEnabled":"顺势加仓","dashboard.indicator.backtest.field.dcaAddEnabled":"逆势加仓","dashboard.indicator.backtest.field.trendAddStepPct":"加仓触发(%)","dashboard.indicator.backtest.field.dcaAddStepPct":"加仓触发(%)","dashboard.indicator.backtest.field.trendAddSizePct":"每次加仓资金占比(%)","dashboard.indicator.backtest.field.dcaAddSizePct":"每次加仓资金占比(%)","dashboard.indicator.backtest.field.trendAddMaxTimes":"最多加仓次数","dashboard.indicator.backtest.field.dcaAddMaxTimes":"最多加仓次数","dashboard.indicator.backtest.field.trendReduceEnabled":"顺势减仓","dashboard.indicator.backtest.field.adverseReduceEnabled":"逆势减仓","dashboard.indicator.backtest.field.trendReduceStepPct":"顺势触发(%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"逆势触发(%)","dashboard.indicator.backtest.field.trendReduceSizePct":"每次减仓比例(%)","dashboard.indicator.backtest.field.adverseReduceSizePct":"每次逆势减仓比例(%)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"最多顺势减仓次数","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"最多逆势减仓次数","dashboard.indicator.backtest.field.entryPct":"开仓资金占比(%)","dashboard.indicator.backtest.field.minOrderPct":"单次最小资金占比(%)(可选)","dashboard.indicator.backtest.hint.entryPctMax":"最大可开仓:{maxPct}%(为后续加仓预留资金)","dashboard.indicator.backtest.closeLongTrailing":"平多(移动止损/止盈)","dashboard.indicator.backtest.reduceLong":"多头减仓","dashboard.indicator.backtest.closeShortTrailing":"平空(移动止损/止盈)","dashboard.indicator.backtest.reduceShort":"空头减仓","dashboard.docs.title":"文档中心","dashboard.docs.search.placeholder":"搜索文档...","dashboard.docs.category.all":"全部","dashboard.docs.category.guide":"开发指南","dashboard.docs.category.api":"API文档","dashboard.docs.category.tutorial":"教程","dashboard.docs.category.faq":"常见问题","dashboard.docs.featured.title":"推荐文档","dashboard.docs.featured.tag":"推荐","dashboard.docs.list.views":"浏览","dashboard.docs.list.author":"作者","dashboard.docs.list.empty":"暂无文档","dashboard.docs.list.backToAll":"返回全部文档","dashboard.docs.list.total":"共 {count} 篇文档","dashboard.docs.detail.back":"返回文档列表","dashboard.docs.detail.updatedAt":"更新于","dashboard.docs.detail.related":"相关文档","dashboard.docs.detail.notFound":"文档不存在","dashboard.docs.detail.error":"文档不存在或已被删除","dashboard.docs.search.result":"搜索结果","dashboard.docs.search.keyword":"关键词","dashboard.totalEquity":"总权益","dashboard.totalPnL":"总盈亏","dashboard.aiStrategies":"AI 策略","dashboard.indicatorStrategies":"指标策略","dashboard.running":"运行中","dashboard.enabled":"已启用","dashboard.pnlHistory":"历史盈亏","dashboard.strategyPerformance":"策略盈亏占比","dashboard.drawdown":"回撤曲线","dashboard.strategyRanking":"策略排行榜","dashboard.winRate":"胜率","dashboard.profitFactor":"盈亏比","dashboard.maxDrawdown":"最大回撤","dashboard.totalTrades":"总交易","dashboard.runningStrategies":"运行中策略","dashboard.equityCurve":"权益曲线","dashboard.strategyAllocation":"策略分布","dashboard.drawdownCurve":"回撤曲线","dashboard.hourlyDistribution":"交易时段","dashboard.dailyPnl":"日盈亏","dashboard.cumulativePnl":"累计盈亏","dashboard.tradeCount":"交易次数","dashboard.profit":"盈亏","dashboard.noData":"暂无数据","dashboard.noStrategyData":"暂无策略数据","dashboard.ranking.totalProfit":"总收益","dashboard.ranking.roi":"收益率","dashboard.ranking.trades":"交易数","dashboard.unit.trades":"笔","dashboard.unit.strategies":"个","dashboard.label.avgDaily":"日均","dashboard.label.avgProfit":"平均盈利","dashboard.label.win":"胜","dashboard.label.lose":"负","dashboard.label.trade":"交易","dashboard.label.indicator":"指标","dashboard.label.totalPnl":"总盈亏","dashboard.label.maxDrawdownPoint":"最大回撤","dashboard.profitCalendar":"收益日历","dashboard.recentTrades":"最近交易","dashboard.currentPositions":"当前持仓","dashboard.table.time":"时间","dashboard.table.strategy":"策略名称","dashboard.table.symbol":"标的","dashboard.table.type":"类型","dashboard.table.side":"方向","dashboard.table.size":"持仓量","dashboard.table.entryPrice":"开仓均价","dashboard.table.price":"价格","dashboard.table.amount":"数量","dashboard.table.profit":"盈亏","dashboard.pendingOrders":"订单执行记录","dashboard.totalOrders":"共 {total} 条","dashboard.viewError":"查看错误","dashboard.filled":"已成交","dashboard.orderTable.time":"创建时间","dashboard.orderTable.strategy":"策略","dashboard.orderTable.symbol":"交易对","dashboard.orderTable.signalType":"信号类型","dashboard.orderTable.amount":"数量","dashboard.orderTable.price":"成交价","dashboard.orderTable.status":"状态","dashboard.orderTable.timeInfo":"时间","dashboard.orderTable.executedAt":"执行时间","dashboard.orderTable.exchange":"交易所","dashboard.orderTable.notify":"通知方式","dashboard.orderTable.actions":"操作","dashboard.orderTable.delete":"删除","dashboard.orderTable.deleteConfirm":"确认删除这条记录?","dashboard.orderTable.deleteSuccess":"删除成功","dashboard.orderTable.deleteFailed":"删除失败","dashboard.newOrderNotify":"新订单提醒","dashboard.newOrderDesc":"有新的订单执行记录","dashboard.soundEnabled":"声音提醒已开启","dashboard.soundDisabled":"声音提醒已关闭","dashboard.clickToMute":"点击关闭声音提醒","dashboard.clickToUnmute":"点击开启声音提醒","dashboard.signalType.openLong":"开多","dashboard.signalType.openShort":"开空","dashboard.signalType.closeLong":"平多","dashboard.signalType.closeShort":"平空","dashboard.signalType.addLong":"加多","dashboard.signalType.addShort":"加空","dashboard.status.pending":"待处理","dashboard.status.processing":"处理中","dashboard.status.completed":"已完成","dashboard.status.failed":"失败","dashboard.status.cancelled":"已取消","dashboard.table.pnl":"未实现盈亏","form.basic-form.basic.title":"基础表单","form.basic-form.basic.description":"表单页用于向用户收集或验证信息,基础表单常见于数据项较少的表单场景。","form.basic-form.title.label":"标题","form.basic-form.title.placeholder":"给目标起个名字","form.basic-form.title.required":"请输入标题","form.basic-form.date.label":"起止日期","form.basic-form.placeholder.start":"开始日期","form.basic-form.placeholder.end":"结束日期","form.basic-form.date.required":"请选择起止日期","form.basic-form.goal.label":"目标描述","form.basic-form.goal.placeholder":"请输入你的阶段性工作目标","form.basic-form.goal.required":"请输入目标描述","form.basic-form.standard.label":"衡量标准","form.basic-form.standard.placeholder":"请输入衡量标准","form.basic-form.standard.required":"请输入衡量标准","form.basic-form.client.label":"客户","form.basic-form.client.required":"请描述你服务的客户","form.basic-form.label.tooltip":"目标的服务对象","form.basic-form.client.placeholder":"请描述你服务的客户,内部客户直接 @姓名/工号","form.basic-form.invites.label":"邀评人","form.basic-form.invites.placeholder":"请直接 @姓名/工号,最多可邀请 5 人","form.basic-form.weight.label":"权重","form.basic-form.weight.placeholder":"请输入","form.basic-form.public.label":"目标公开","form.basic-form.label.help":"客户、邀评人默认被分享","form.basic-form.radio.public":"公开","form.basic-form.radio.partially-public":"部分公开","form.basic-form.radio.private":"不公开","form.basic-form.publicUsers.placeholder":"公开给","form.basic-form.option.A":"同事一","form.basic-form.option.B":"同事二","form.basic-form.option.C":"同事三","form.basic-form.email.required":"请输入邮箱地址!","form.basic-form.email.wrong-format":"邮箱地址格式错误!","form.basic-form.userName.required":"请输入用户名!","form.basic-form.password.required":"请输入密码!","form.basic-form.password.twice":"两次输入的密码不匹配!","form.basic-form.strength.msg":"请至少输入 6 个字符。请不要使用容易被猜到的密码。","form.basic-form.strength.strong":"强度:强","form.basic-form.strength.medium":"强度:中","form.basic-form.strength.short":"强度:太短","form.basic-form.confirm-password.required":"请确认密码!","form.basic-form.phone-number.required":"请输入手机号!","form.basic-form.phone-number.wrong-format":"手机号格式错误!","form.basic-form.verification-code.required":"请输入验证码!","form.basic-form.form.get-captcha":"获取验证码","form.basic-form.captcha.second":"秒","form.basic-form.form.optional":"(选填)","form.basic-form.form.submit":"提交","form.basic-form.form.save":"保存","form.basic-form.email.placeholder":"邮箱","form.basic-form.password.placeholder":"至少6位密码,区分大小写","form.basic-form.confirm-password.placeholder":"确认密码","form.basic-form.phone-number.placeholder":"手机号","form.basic-form.verification-code.placeholder":"验证码","result.success.title":"提交成功","result.success.description":"提交结果页用于反馈一系列操作任务的处理结果, 如果仅是简单操作,使用 Message 全局提示反馈即可。 本文字区域可以展示简单的补充说明,如果有类似展示 “单据”的需求,下面这个灰色区域可以呈现比较复杂的内容。","result.success.operate-title":"项目名称","result.success.operate-id":"项目 ID","result.success.principal":"负责人","result.success.operate-time":"生效时间","result.success.step1-title":"创建项目","result.success.step1-operator":"曲丽丽","result.success.step2-title":"部门初审","result.success.step2-operator":"周毛毛","result.success.step2-extra":"催一下","result.success.step3-title":"财务复核","result.success.step4-title":"完成","result.success.btn-return":"返回列表","result.success.btn-project":"查看项目","result.success.btn-print":"打印","result.fail.error.title":"提交失败","result.fail.error.description":"请核对并修改以下信息后,再重新提交。","result.fail.error.hint-title":"您提交的内容有如下错误:","result.fail.error.hint-text1":"您的账户已被冻结","result.fail.error.hint-btn1":"立即解冻","result.fail.error.hint-text2":"您的账户还不具备申请资格","result.fail.error.hint-btn2":"立即升级","result.fail.error.btn-text":"返回修改","account.settings.menuMap.custom":"个性化","account.settings.menuMap.binding":"账号绑定","account.settings.basic.avatar":"头像","account.settings.basic.change-avatar":"更换头像","account.settings.basic.email":"邮箱","account.settings.basic.email-message":"请输入您的邮箱!","account.settings.basic.nickname":"昵称","account.settings.basic.nickname-message":"请输入您的昵称!","account.settings.basic.profile":"个人简介","account.settings.basic.profile-message":"请输入个人简介!","account.settings.basic.profile-placeholder":"个人简介","account.settings.basic.country":"国家/地区","account.settings.basic.country-message":"请输入您的国家或地区!","account.settings.basic.geographic":"所在省市","account.settings.basic.geographic-message":"请输入您的所在省市!","account.settings.basic.address":"街道地址","account.settings.basic.address-message":"请输入您的街道地址!","account.settings.basic.phone":"联系电话","account.settings.basic.phone-message":"请输入您的联系电话!","account.settings.basic.update":"更新基本信息","account.settings.basic.update.success":"更新基本信息成功","account.settings.security.strong":"强","account.settings.security.medium":"中","account.settings.security.weak":"弱","account.settings.security.password":"账户密码","account.settings.security.password-description":"当前密码强度:","account.settings.security.phone":"密保手机","account.settings.security.phone-description":"已绑定手机:","account.settings.security.question":"密保问题","account.settings.security.question-description":"未设置密保问题,密保问题可有效保护账户安全","account.settings.security.email":"绑定邮箱","account.settings.security.email-description":"已绑定邮箱:","account.settings.security.mfa":"MFA 设备","account.settings.security.mfa-description":"未绑定 MFA 设备,绑定后,可以进行二次确认","account.settings.security.modify":"修改","account.settings.security.set":"设置","account.settings.security.bind":"绑定","account.settings.binding.taobao":"绑定淘宝","account.settings.binding.taobao-description":"当前未绑定淘宝账号","account.settings.binding.alipay":"绑定支付宝","account.settings.binding.alipay-description":"当前未绑定支付宝账号","account.settings.binding.dingding":"绑定钉钉","account.settings.binding.dingding-description":"当前未绑定钉钉账号","account.settings.binding.bind":"绑定","account.settings.notification.password":"账户密码","account.settings.notification.password-description":"其他用户的消息将以站内信的形式通知","account.settings.notification.messages":"系统消息","account.settings.notification.messages-description":"系统消息将以站内信的形式通知","account.settings.notification.todo":"待办任务","account.settings.notification.todo-description":"待办任务将以站内信的形式通知","account.settings.settings.open":"开","account.settings.settings.close":"关","trading-assistant.title":"交易助手","trading-assistant.strategyList":"策略列表","trading-assistant.createStrategy":"创建策略","trading-assistant.noStrategy":"暂无策略","trading-assistant.selectStrategy":"请从左侧选择一个策略查看详情","trading-assistant.startStrategy":"启动策略","trading-assistant.stopStrategy":"停止策略","trading-assistant.editStrategy":"编辑策略","trading-assistant.deleteStrategy":"删除策略","trading-assistant.startAll":"全部启动","trading-assistant.stopAll":"全部停止","trading-assistant.deleteAll":"全部删除","trading-assistant.symbolCount":"个币种","trading-assistant.strategyCount":"个策略","trading-assistant.groupBy":"分组方式","trading-assistant.groupByStrategy":"按策略","trading-assistant.groupBySymbol":"按标的","trading-assistant.timeframe":"周期","trading-assistant.indicator":"指标","trading-assistant.status.running":"运行中","trading-assistant.status.stopped":"已停止","trading-assistant.status.error":"错误","trading-assistant.strategyType.IndicatorStrategy":"技术指标策略","trading-assistant.strategyType.PromptBasedStrategy":"提示词策略","trading-assistant.strategyType.GridStrategy":"网格策略","trading-assistant.tabs.tradingRecords":"交易记录","trading-assistant.tabs.positions":"持仓记录","trading-assistant.tabs.equityCurve":"净值曲线","trading-assistant.form.step1":"选择指标","trading-assistant.form.step2":"交易所配置","trading-assistant.form.step3":"策略参数","trading-assistant.form.step2Params":"策略参数","trading-assistant.form.step3Signal":"信号通知","trading-assistant.form.simpleMode":"简易模式","trading-assistant.form.advancedMode":"高级模式","trading-assistant.form.simpleModeHint":"快速创建策略,使用推荐默认参数","trading-assistant.form.advancedModeHint":"自定义全部参数,适合专业用户","trading-assistant.form.simpleStep1":"选择指标 & 交易对","trading-assistant.form.simpleStep2":"启动方式","trading-assistant.form.simpleDefaultsHint":"默认参数(可展开修改)","trading-assistant.form.showAdvancedSettings":"展开高级设置","trading-assistant.form.hideAdvancedSettings":"收起高级设置","trading-assistant.form.indicator":"选择指标","trading-assistant.form.indicatorHint":"只能选择您已购买或创建的技术指标","trading-assistant.form.qdtCostHints":"使用策略将消耗QDT,请确保账户有足够的QDT余额","trading-assistant.form.indicatorDescription":"指标描述","trading-assistant.form.noDescription":"暂无描述","trading-assistant.form.indicatorParams":"指标参数","trading-assistant.form.indicatorParamsHint":"这些参数会传递给指标代码,不同策略可以使用不同的参数值","trading-assistant.form.exchange":"选择交易所","trading-assistant.form.apiKey":"API Key","trading-assistant.form.secretKey":"Secret Key","trading-assistant.form.passphrase":"Passphrase","trading-assistant.form.testConnection":"测试连接","trading-assistant.form.strategyName":"策略名称","trading-assistant.form.symbol":"交易对","trading-assistant.form.symbols":"交易对(多选)","trading-assistant.form.symbolHint":"目前仅支持加密货币交易对","trading-assistant.form.symbolHintCrypto":"加密货币:使用BTC/USDT等交易对格式","trading-assistant.form.symbolsHint":"选择多个交易对,将自动创建多个策略","trading-assistant.form.strategyType":"策略类型","trading-assistant.form.strategyTypeSingle":"单标的策略","trading-assistant.form.strategyTypeCrossSectional":"截面策略","trading-assistant.form.strategyTypeHint":"单标的策略:针对单个标的进行交易;截面策略:同时管理多个标的的组合","trading-assistant.form.symbolList":"标的列表","trading-assistant.form.symbolListHint":"选择多个标的,策略将根据指标评分进行排序和调仓","trading-assistant.form.portfolioSize":"持仓组合大小","trading-assistant.form.portfolioSizeHint":"策略同时持有的标的数量","trading-assistant.form.longRatio":"做多比例","trading-assistant.form.longRatioHint":"持仓中做多标的的比例(0-1),例如0.5表示50%做多,50%做空","trading-assistant.form.rebalanceFrequency":"调仓频率","trading-assistant.form.rebalanceDaily":"每日","trading-assistant.form.rebalanceWeekly":"每周","trading-assistant.form.rebalanceMonthly":"每月","trading-assistant.form.rebalanceFrequencyHint":"策略重新调整持仓组合的频率","trading-assistant.form.addSymbol":"添加交易对","trading-assistant.form.addSymbolTitle":"添加交易对到自选列表","trading-assistant.form.searchSymbolPlaceholder":"输入代码搜索,如 BTC、AAPL","trading-assistant.form.noSymbolFound":"未找到匹配的交易对","trading-assistant.form.canDirectAdd":"可以直接输入代码添加","trading-assistant.form.searchSymbolHint":"输入代码搜索交易对","trading-assistant.form.confirmAdd":"确认添加","trading-assistant.form.addSymbolSuccess":"交易对添加成功","trading-assistant.form.addSymbolFailed":"添加失败,请重试","trading-assistant.form.pleaseSelectSymbol":"请选择或输入交易对","trading-assistant.form.initialCapital":"投入金额","trading-assistant.form.marketType":"市场类型","trading-assistant.form.marketTypeFutures":"合约","trading-assistant.form.marketTypeSpot":"现货","trading-assistant.form.marketTypeHint":"合约支持双向交易和杠杆,现货仅支持做多且杠杆固定为1倍","trading-assistant.form.leverage":"杠杆倍数","trading-assistant.form.leverageHint":"合约:1-125倍,现货:固定1倍","trading-assistant.form.spotLeverageFixed":"现货交易杠杆固定为1倍","trading-assistant.form.spotOnlyLongHint":"现货交易仅支持做多","trading-assistant.form.tradeDirection":"交易方向","trading-assistant.form.tradeDirectionLong":"仅做多","trading-assistant.form.tradeDirectionShort":"仅做空","trading-assistant.form.tradeDirectionBoth":"双向交易","trading-assistant.form.timeframe":"时间周期","trading-assistant.form.klinePeriod":"K线周期","trading-assistant.form.timeframe1m":"1分钟","trading-assistant.form.timeframe5m":"5分钟","trading-assistant.form.timeframe15m":"15分钟","trading-assistant.form.timeframe30m":"30分钟","trading-assistant.form.timeframe1H":"1小时","trading-assistant.form.timeframe4H":"4小时","trading-assistant.form.timeframe1D":"1天","trading-assistant.form.selectStrategyType":"选择策略类型","trading-assistant.form.indicatorStrategy":"指标策略","trading-assistant.form.indicatorStrategyDesc":"基于技术指标的自动化交易策略","trading-assistant.form.aiStrategy":"AI策略","trading-assistant.form.aiStrategyDesc":"基于AI智能决策的自动化交易策略","trading-assistant.form.enableAiFilter":"启用AI智能决策过滤","trading-assistant.form.enableAiFilterHint":"启用后,指标信号将经过AI智能过滤,提高交易质量","trading-assistant.form.aiFilterPrompt":"自定义提示词","trading-assistant.form.aiFilterPromptHint":"为AI过滤提供自定义指令,留空则使用系统默认","trading-assistant.form.executionMode":"执行模式","trading-assistant.form.executionModeSignal":"仅信号通知","trading-assistant.form.executionModeLive":"实盘自动交易","trading-assistant.form.liveTradingCryptoOnlyHint":"实盘交易功能仅支持加密货币市场","trading-assistant.form.liveTradingNotSupportedHint":"当前市场不支持实盘交易","trading-assistant.form.broker":"券商","trading-assistant.form.localDeploymentRequired":"⚠️ 需要本地部署运行","trading-assistant.form.localDeploymentHint":"IBKR 和 MT5 属于外挂类实盘接口,需要本地部署运行 QuantDinger,不支持云端 SaaS 模式。请确保您已在本地安装并配置相关交易软件(TWS/IB Gateway 或 MT5 终端)。","trading-assistant.form.ibkrConnectionTitle":"盈透证券连接配置","trading-assistant.form.ibkrConnectionHint":"请确保 TWS 或 IB Gateway 已启动并启用 API 连接","trading-assistant.validation.brokerRequired":"请选择券商","trading-assistant.placeholders.selectBroker":"选择券商","trading-assistant.brokerNames":{ibkr:"盈透证券 (Interactive Brokers)",mt5:"MetaTrader 5 (MT5)",mt4:"MetaTrader 4 (MT4)",futu:"富途证券 (Futu)",tiger:"老虎证券 (Tiger Brokers)",td:"TD Ameritrade",schwab:"Charles Schwab"},"trading-assistant.form.ibkrHost":"主机地址","trading-assistant.form.ibkrPort":"端口","trading-assistant.form.ibkrPortHint":"TWS实盘:7497, TWS模拟:7496, Gateway实盘:4001, Gateway模拟:4002","trading-assistant.form.ibkrClientId":"客户端ID","trading-assistant.form.ibkrAccount":"账户号","trading-assistant.form.ibkrAccountHint":"留空自动选择第一个账户,多账户用户可指定账户号","trading-assistant.placeholders.ibkrAccount":"可选,如 U1234567","trading-assistant.exchange.ibkrConnectionSuccess":"盈透证券连接成功","trading-assistant.exchange.ibkrConnectionFailed":"盈透证券连接失败,请检查 TWS/Gateway 是否运行","trading-assistant.exchange.checkLocalDeployment":"请确认您已在本地部署运行,云端 SaaS 不支持此类外挂实盘","trading-assistant.form.forexBroker":"外汇券商","trading-assistant.form.mt5ConnectionTitle":"MetaTrader 5 连接配置","trading-assistant.form.mt5ConnectionHint":"请确保 MT5 终端已启动并登录(仅支持 Windows)","trading-assistant.form.mt5Server":"服务器","trading-assistant.form.mt5ServerHint":"券商服务器名称(如:ICMarkets-Demo)","trading-assistant.form.mt5Login":"账户号","trading-assistant.form.mt5Password":"密码","trading-assistant.form.mt5TerminalPath":"MT5 终端路径(可选)","trading-assistant.form.mt5TerminalPathHint":"如果 MT5 终端未安装在默认位置,请指定 terminal64.exe 的完整路径(例如:C:\\Program Files\\MetaTrader 5\\terminal64.exe)","trading-assistant.placeholders.mt5Server":"例如:ICMarkets-Demo","trading-assistant.placeholders.mt5Login":"例如:12345678","trading-assistant.placeholders.mt5Password":"您的 MT5 密码","trading-assistant.placeholders.mt5TerminalPath":"例如:C:\\Program Files\\MetaTrader 5\\terminal64.exe","trading-assistant.validation.mt5ServerRequired":"请输入 MT5 服务器","trading-assistant.validation.mt5LoginRequired":"请输入 MT5 账户号","trading-assistant.validation.mt5PasswordRequired":"请输入 MT5 密码","trading-assistant.validation.portfolioSizeRequired":"请输入持仓组合大小","trading-assistant.validation.longRatioRequired":"请输入做多比例","trading-assistant.exchange.mt5ConnectionSuccess":"MT5 连接成功","trading-assistant.exchange.mt5ConnectionFailed":"MT5 连接失败,请检查终端是否运行","trading-assistant.form.notifyChannels":"通知渠道","trading-assistant.form.notifyChannelsHint":"选择信号触发时的通知方式","trading-assistant.form.notifyEmail":"邮箱地址","trading-assistant.form.notifyPhone":"手机号码","trading-assistant.form.notifyTelegram":"Telegram ID","trading-assistant.form.notifyDiscord":"Discord Webhook","trading-assistant.form.notifyWebhook":"Webhook 地址","trading-assistant.form.liveTradingConfigTitle":"实盘交易配置","trading-assistant.form.liveTradingConfigHint":"请填写交易所API信息,实盘交易将使用您的API进行真实交易","trading-assistant.form.savedCredential":"已保存的凭证","trading-assistant.form.savedCredentialHint":"选择已保存的交易所凭证,自动填充API配置","trading-assistant.form.saveCredential":"保存此凭证以便下次使用","trading-assistant.form.credentialName":"凭证名称","trading-assistant.validation.strategyTypeRequired":"请选择策略类型","trading-assistant.form.advancedSettings":"高级设置","trading-assistant.form.orderMode":"下单模式","trading-assistant.form.orderModeMaker":"挂单(Maker)","trading-assistant.form.orderModeTaker":"市价(Taker)","trading-assistant.form.orderModeHint":"挂单模式使用限价单,手续费更低;市价模式立即成交,手续费较高","trading-assistant.form.makerWaitSec":"挂单等待时间(秒)","trading-assistant.form.makerWaitSecHint":"挂单后等待成交的时间,超时后取消并重试","trading-assistant.form.makerRetries":"挂单重试次数","trading-assistant.form.makerRetriesHint":"挂单未成交时的最大重试次数","trading-assistant.form.fallbackToMarket":"挂单失败降级市价","trading-assistant.form.fallbackToMarketHint":"开/平仓挂单未成交时,是否降级为市价单以确保成交","trading-assistant.form.marginMode":"保证金模式","trading-assistant.form.marginModeCross":"全仓","trading-assistant.form.marginModeIsolated":"逐仓","trading-assistant.form.stopLossPct":"止损比例(%)","trading-assistant.form.stopLossPctHint":"设置止损百分比,0表示不启用止损","trading-assistant.form.takeProfitPct":"止盈比例(%)","trading-assistant.form.takeProfitPctHint":"设置止盈百分比,0表示不启用止盈","trading-assistant.form.signalMode":"信号模式","trading-assistant.form.signalModeConfirmed":"确认模式","trading-assistant.form.signalModeAggressive":"激进模式","trading-assistant.form.signalModeHint":"确认模式:仅检查已完成的K线;激进模式:也检查正在形成的K线","trading-assistant.form.cancel":"取消","trading-assistant.form.prev":"上一步","trading-assistant.form.next":"下一步","trading-assistant.form.confirmCreate":"确认创建","trading-assistant.form.confirmEdit":"确认修改","trading-assistant.messages.createSuccess":"策略创建成功","trading-assistant.messages.createFailed":"创建策略失败","trading-assistant.messages.updateSuccess":"策略更新成功","trading-assistant.messages.updateFailed":"更新策略失败","trading-assistant.messages.deleteSuccess":"策略删除成功","trading-assistant.messages.deleteFailed":"删除策略失败","trading-assistant.messages.startSuccess":"策略启动成功","trading-assistant.messages.startFailed":"启动策略失败","trading-assistant.messages.stopSuccess":"策略停止成功","trading-assistant.messages.stopFailed":"停止策略失败","trading-assistant.messages.loadFailed":"获取策略列表失败","trading-assistant.messages.runningWarning":"策略运行中,请先停止策略后再修改","trading-assistant.messages.deleteConfirmWithName":"确定要删除策略“{name}”吗?此操作不可恢复。","trading-assistant.messages.deleteConfirm":"确定要删除该策略吗?此操作不可恢复。","trading-assistant.messages.loadTradesFailed":"获取交易记录失败","trading-assistant.messages.loadPositionsFailed":"获取持仓记录失败","trading-assistant.messages.loadEquityFailed":"获取净值曲线失败","trading-assistant.messages.loadIndicatorsFailed":"加载指标列表失败,请稍后重试","trading-assistant.messages.spotLimitations":"现货交易已自动设置为仅做多、1倍杠杆","trading-assistant.messages.autoFillApiConfig":"已自动填充该交易所的历史API配置","trading-assistant.messages.batchCreateSuccess":"成功创建 {count} 个策略","trading-assistant.messages.batchStartSuccess":"成功启动 {count} 个策略","trading-assistant.messages.batchStartFailed":"批量启动策略失败","trading-assistant.messages.batchStopSuccess":"成功停止 {count} 个策略","trading-assistant.messages.batchStopFailed":"批量停止策略失败","trading-assistant.messages.batchDeleteSuccess":"成功删除 {count} 个策略","trading-assistant.messages.batchDeleteFailed":"批量删除策略失败","trading-assistant.messages.batchDeleteConfirm":'确定要删除策略组"{name}"下的 {count} 个策略吗?此操作不可恢复。',"trading-assistant.notify.browser":"浏览器通知","trading-assistant.notify.email":"邮箱","trading-assistant.notify.phone":"短信","trading-assistant.notify.telegram":"Telegram","trading-assistant.notify.discord":"Discord","trading-assistant.notify.webhook":"Webhook","trading-assistant.placeholders.selectIndicator":"请选择指标","trading-assistant.placeholders.selectExchange":"请选择交易所","trading-assistant.placeholders.inputApiKey":"请输入API Key","trading-assistant.placeholders.inputSecretKey":"请输入Secret Key","trading-assistant.placeholders.inputPassphrase":"请输入Passphrase","trading-assistant.placeholders.inputStrategyName":"请输入策略名称","trading-assistant.placeholders.selectSymbol":"请选择交易对","trading-assistant.placeholders.selectSymbols":"请选择交易对(支持多选)","trading-assistant.placeholders.selectTimeframe":"请选择时间周期","trading-assistant.placeholders.selectKlinePeriod":"请选择K线周期","trading-assistant.placeholders.inputAiFilterPrompt":"请输入自定义提示词(可选)","trading-assistant.placeholders.selectSavedCredential":"请选择已保存的凭证","trading-assistant.placeholders.inputEmail":"请输入邮箱地址","trading-assistant.placeholders.inputPhone":"请输入手机号码","trading-assistant.placeholders.inputTelegram":"请输入Telegram ID或Chat ID","trading-assistant.placeholders.inputDiscord":"请输入Discord Webhook地址","trading-assistant.placeholders.inputWebhook":"请输入Webhook地址","trading-assistant.placeholders.inputCredentialName":"请输入凭证名称(如:我的OKX账户)","trading-assistant.validation.indicatorRequired":"请选择指标","trading-assistant.validation.exchangeRequired":"请选择交易所","trading-assistant.validation.apiKeyRequired":"请输入API Key","trading-assistant.validation.secretKeyRequired":"请输入Secret Key","trading-assistant.validation.passphraseRequired":"请输入Passphrase","trading-assistant.validation.exchangeConfigIncomplete":"请填写完整的交易所配置信息","trading-assistant.validation.testConnectionRequired":'请先点击"测试连接"按钮并确保连接成功',"trading-assistant.validation.testConnectionFailed":"连接测试失败,请检查配置后重新测试","trading-assistant.validation.credentialRequired":"请先在个人中心添加并测试交易所凭证","trading-assistant.validation.strategyNameRequired":"请输入策略名称","trading-assistant.validation.symbolRequired":"请选择交易对","trading-assistant.validation.symbolsRequired":"请至少选择一个交易对","trading-assistant.validation.emailInvalid":"请输入有效的邮箱地址","trading-assistant.validation.notifyChannelRequired":"请至少选择一个通知渠道","trading-assistant.validation.initialCapitalRequired":"请输入投入金额","trading-assistant.validation.leverageRequired":"请输入杠杆倍数","trading-assistant.table.time":"时间","trading-assistant.table.type":"类型","trading-assistant.table.price":"价格","trading-assistant.table.amount":"数量","trading-assistant.table.value":"金额","trading-assistant.table.commission":"手续费","trading-assistant.table.symbol":"交易对","trading-assistant.table.side":"方向","trading-assistant.table.size":"持仓数量","trading-assistant.table.entryPrice":"开仓价格","trading-assistant.table.currentPrice":"当前价格","trading-assistant.table.unrealizedPnl":"未实现盈亏","trading-assistant.table.pnlPercent":"盈亏比例","trading-assistant.table.buy":"买入","trading-assistant.table.sell":"卖出","trading-assistant.table.long":"做多","trading-assistant.table.short":"做空","trading-assistant.table.noPositions":"暂无持仓","trading-assistant.detail.title":"策略详情","trading-assistant.detail.strategyName":"策略名称","trading-assistant.detail.strategyType":"策略类型","trading-assistant.detail.status":"状态","trading-assistant.detail.tradingMode":"交易模式","trading-assistant.detail.exchange":"交易所","trading-assistant.detail.initialCapital":"初始资金","trading-assistant.detail.totalInvestment":"总投入金额","trading-assistant.detail.currentEquity":"当前净值","trading-assistant.detail.totalPnl":"总盈亏","trading-assistant.detail.indicatorName":"指标名称","trading-assistant.detail.maxLeverage":"最大杠杆","trading-assistant.detail.decideInterval":"决策间隔","trading-assistant.detail.symbols":"交易标的","trading-assistant.detail.createdAt":"创建时间","trading-assistant.detail.updatedAt":"更新时间","trading-assistant.detail.llmConfig":"AI模型配置","trading-assistant.detail.exchangeConfig":"交易所配置","trading-assistant.detail.provider":"提供商","trading-assistant.detail.modelId":"模型ID","trading-assistant.detail.close":"关闭","trading-assistant.detail.loadFailed":"获取策略详情失败","trading-assistant.equity.noData":"暂无净值数据","trading-assistant.equity.equity":"净值","trading-assistant.exchange.tradingMode":"交易模式","trading-assistant.exchange.virtual":"模拟交易","trading-assistant.exchange.live":"实盘交易","trading-assistant.exchange.selectExchange":"选择交易所","trading-assistant.exchange.walletAddress":"钱包地址","trading-assistant.exchange.walletAddressPlaceholder":"请输入钱包地址(以0x开头)","trading-assistant.exchange.privateKey":"私钥","trading-assistant.exchange.privateKeyPlaceholder":"请输入私钥(64字符)","trading-assistant.exchange.testConnection":"测试连接","trading-assistant.exchange.connectionSuccess":"连接成功","trading-assistant.exchange.connectionFailed":"连接失败","trading-assistant.exchange.testFailed":"连接测试失败","trading-assistant.exchange.fillComplete":"请填写完整的交易所配置信息","trading-assistant.exchange.ipWhitelistTip":"请在交易所API设置中将以下IP添加到白名单:","trading-assistant.strategyTypeOptions.ai":"AI驱动策略","trading-assistant.strategyTypeOptions.indicator":"技术指标策略","trading-assistant.strategyTypeOptions.aiDeveloping":"AI驱动策略功能开发中,敬请期待","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"AI驱动策略功能正在开发中","trading-assistant.indicatorType.trend":"趋势","trading-assistant.indicatorType.momentum":"动量","trading-assistant.indicatorType.volatility":"波动","trading-assistant.indicatorType.volume":"成交量","trading-assistant.indicatorType.custom":"自定义","trading-assistant.exchangeNames":{okx:"OKX",binance:"币安",hyperliquid:"Hyperliquid",blockchaincom:"Blockchain.com",coinbaseexchange:"Coinbase",gate:"Gate.io",mexc:"MEXC",kraken:"Kraken",bitfinex:"Bitfinex",bybit:"Bybit",kucoin:"KuCoin",huobi:"火币",bitget:"Bitget",bitmex:"BitMEX",deribit:"Deribit",phemex:"Phemex",bitmart:"BitMart",bitstamp:"Bitstamp",bittrex:"Bittrex",poloniex:"Poloniex",gemini:"Gemini",cryptocom:"Crypto.com",bitflyer:"bitFlyer",upbit:"Upbit",bithumb:"Bithumb",coinone:"Coinone",zb:"ZB",lbank:"LBank",bibox:"Bibox",bigone:"BigONE",bitrue:"Bitrue",coinex:"CoinEx",digifinex:"DigiFinex",ftx:"FTX",ftxus:"FTX US",binanceus:"Binance US",binancecoinm:"Binance COIN-M",binanceusdm:"Binance USDⓈ-M",ibkr:"盈透证券 (IBKR)",deepcoin:"Deepcoin"},"ai-trading-assistant.title":"AI交易助手","ai-trading-assistant.strategyList":"策略列表","ai-trading-assistant.createStrategy":"创建策略","ai-trading-assistant.noStrategy":"暂无策略","ai-trading-assistant.selectStrategy":"请从左侧选择一个策略查看详情","ai-trading-assistant.startStrategy":"启动策略","ai-trading-assistant.stopStrategy":"停止策略","ai-trading-assistant.editStrategy":"编辑策略","ai-trading-assistant.deleteStrategy":"删除策略","ai-trading-assistant.status.running":"运行中","ai-trading-assistant.status.stopped":"已停止","ai-trading-assistant.status.error":"错误","ai-trading-assistant.tabs.tradingRecords":"交易记录","ai-trading-assistant.tabs.positions":"持仓记录","ai-trading-assistant.tabs.aiDecisions":"AI决策记录","ai-trading-assistant.tabs.equityCurve":"净值曲线","ai-trading-assistant.form.createTitle":"创建AI交易策略","ai-trading-assistant.form.editTitle":"编辑AI交易策略","ai-trading-assistant.form.strategyName":"策略名称","ai-trading-assistant.form.modelId":"AI模型","ai-trading-assistant.form.modelIdHint":"使用系统OpenRouter服务,无需配置API Key","ai-trading-assistant.form.decideInterval":"决策间隔","ai-trading-assistant.form.decideInterval5m":"5分钟","ai-trading-assistant.form.decideInterval10m":"10分钟","ai-trading-assistant.form.decideInterval30m":"30分钟","ai-trading-assistant.form.decideInterval1h":"1小时","ai-trading-assistant.form.decideInterval4h":"4小时","ai-trading-assistant.form.decideInterval1d":"1天","ai-trading-assistant.form.decideInterval1w":"1周","ai-trading-assistant.form.decideIntervalHint":"AI做决策的时间间隔","ai-trading-assistant.form.runPeriod":"运行周期","ai-trading-assistant.form.runPeriodHint":"策略运行的开始时间和结束时间","ai-trading-assistant.form.startDate":"开始日期","ai-trading-assistant.form.endDate":"结束日期","ai-trading-assistant.form.qdtCostTitle":"QDT扣费说明","ai-trading-assistant.form.qdtCostHint":"每次AI决策将扣费 {cost} 个QDT,请确保账户有足够的QDT余额。策略运行期间,每次决策都会实时扣费。","ai-trading-assistant.form.apiKey":"API Key","ai-trading-assistant.form.exchange":"选择交易所","ai-trading-assistant.form.secretKey":"Secret Key","ai-trading-assistant.form.passphrase":"Passphrase","ai-trading-assistant.form.testConnection":"测试连接","ai-trading-assistant.form.symbol":"交易对","ai-trading-assistant.form.symbolHint":"选择要交易的交易对","ai-trading-assistant.form.initialCapital":"投入金额(保证金)","ai-trading-assistant.form.leverage":"杠杆倍数","ai-trading-assistant.form.timeframe":"时间周期","ai-trading-assistant.form.timeframe1m":"1分钟","ai-trading-assistant.form.timeframe5m":"5分钟","ai-trading-assistant.form.timeframe15m":"15分钟","ai-trading-assistant.form.timeframe30m":"30分钟","ai-trading-assistant.form.timeframe1H":"1小时","ai-trading-assistant.form.timeframe4H":"4小时","ai-trading-assistant.form.timeframe1D":"1天","ai-trading-assistant.form.marketType":"市场类型","ai-trading-assistant.form.marketTypeFutures":"合约","ai-trading-assistant.form.marketTypeSpot":"现货","ai-trading-assistant.form.totalPnl":"总盈亏","ai-trading-assistant.form.customPrompt":"自定义提示词","ai-trading-assistant.form.customPromptHint":"可选,用于自定义AI的交易策略和决策逻辑","ai-trading-assistant.form.cancel":"取消","ai-trading-assistant.form.prev":"上一步","ai-trading-assistant.form.next":"下一步","ai-trading-assistant.form.confirmCreate":"确认创建","ai-trading-assistant.form.confirmEdit":"确认修改","ai-trading-assistant.messages.createSuccess":"策略创建成功","ai-trading-assistant.messages.createFailed":"创建策略失败","ai-trading-assistant.messages.updateSuccess":"策略更新成功","ai-trading-assistant.messages.updateFailed":"更新策略失败","ai-trading-assistant.messages.deleteSuccess":"策略删除成功","ai-trading-assistant.messages.deleteFailed":"删除策略失败","ai-trading-assistant.messages.startSuccess":"策略启动成功","ai-trading-assistant.messages.startFailed":"启动策略失败","ai-trading-assistant.messages.stopSuccess":"策略停止成功","ai-trading-assistant.messages.stopFailed":"停止策略失败","ai-trading-assistant.messages.loadFailed":"获取策略列表失败","ai-trading-assistant.messages.loadDecisionsFailed":"获取AI决策记录失败","ai-trading-assistant.messages.deleteConfirm":"确定要删除该策略吗?此操作不可恢复。","ai-trading-assistant.placeholders.inputStrategyName":"请输入策略名称","ai-trading-assistant.placeholders.selectModelId":"请选择AI模型","ai-trading-assistant.placeholders.selectDecideInterval":"请选择决策间隔","ai-trading-assistant.placeholders.startTime":"开始时间","ai-trading-assistant.placeholders.endTime":"结束时间","ai-trading-assistant.placeholders.inputApiKey":"请输入API Key","ai-trading-assistant.placeholders.selectExchange":"请选择交易所","ai-trading-assistant.placeholders.inputSecretKey":"请输入Secret Key","ai-trading-assistant.placeholders.inputPassphrase":"请输入Passphrase","ai-trading-assistant.placeholders.selectSymbol":"请选择交易对,如:BTC/USDT","ai-trading-assistant.placeholders.selectTimeframe":"请选择时间周期","ai-trading-assistant.placeholders.inputCustomPrompt":"请输入自定义提示词(可选)","ai-trading-assistant.validation.strategyNameRequired":"请输入策略名称","ai-trading-assistant.validation.modelIdRequired":"请选择AI模型","ai-trading-assistant.validation.runPeriodRequired":"请选择运行周期","ai-trading-assistant.validation.apiKeyRequired":"请输入API Key","ai-trading-assistant.validation.exchangeRequired":"请选择交易所","ai-trading-assistant.validation.secretKeyRequired":"请输入Secret Key","ai-trading-assistant.validation.symbolRequired":"请选择交易对","ai-trading-assistant.validation.initialCapitalRequired":"请输入投入金额","ai-trading-assistant.table.time":"时间","ai-trading-assistant.table.type":"类型","ai-trading-assistant.table.price":"价格","ai-trading-assistant.table.amount":"数量","ai-trading-assistant.table.value":"金额","ai-trading-assistant.table.symbol":"交易对","ai-trading-assistant.table.side":"方向","ai-trading-assistant.table.size":"持仓数量","ai-trading-assistant.table.entryPrice":"开仓价格","ai-trading-assistant.table.currentPrice":"当前价格","ai-trading-assistant.table.unrealizedPnl":"未实现盈亏","ai-trading-assistant.table.profit":"盈亏","ai-trading-assistant.table.openLong":"开多","ai-trading-assistant.table.closeLong":"平多","ai-trading-assistant.table.openShort":"开空","ai-trading-assistant.table.closeShort":"平空","ai-trading-assistant.table.addLong":"加多","ai-trading-assistant.table.addShort":"加空","ai-trading-assistant.table.closeShortProfit":"平空止盈","ai-trading-assistant.table.closeShortStop":"平空止损","ai-trading-assistant.table.closeLongProfit":"平多止盈","ai-trading-assistant.table.closeLongStop":"平多止损","ai-trading-assistant.table.buy":"买入","ai-trading-assistant.table.sell":"卖出","ai-trading-assistant.table.long":"做多","ai-trading-assistant.table.short":"做空","ai-trading-assistant.table.hold":"持有","ai-trading-assistant.table.reasoning":"分析理由","ai-trading-assistant.table.decisions":"决策","ai-trading-assistant.table.riskAssessment":"风险评估","ai-trading-assistant.table.confidence":"置信度","ai-trading-assistant.table.totalRecords":"共 {total} 条记录","ai-trading-assistant.table.noPositions":"暂无持仓","ai-trading-assistant.detail.title":"策略详情","ai-trading-assistant.equity.noData":"暂无净值数据","ai-trading-assistant.equity.equity":"净值","ai-trading-assistant.exchange.testFailed":"连接测试失败","ai-trading-assistant.exchange.connectionSuccess":"连接成功","ai-trading-assistant.exchange.connectionFailed":"连接失败","ai-trading-assistant.form.advancedSettings":"高级设置","ai-trading-assistant.form.orderMode":"下单模式","ai-trading-assistant.form.orderModeMaker":"挂单(Maker)","ai-trading-assistant.form.orderModeTaker":"市价(Taker)","ai-trading-assistant.form.orderModeHint":"挂单模式使用限价单,手续费更低;市价模式立即成交,手续费较高","ai-trading-assistant.form.makerWaitSec":"挂单等待时间(秒)","ai-trading-assistant.form.makerWaitSecHint":"挂单后等待成交的时间,超时后取消并重试","ai-trading-assistant.form.makerRetries":"挂单重试次数","ai-trading-assistant.form.makerRetriesHint":"挂单未成交时的最大重试次数","ai-trading-assistant.form.fallbackToMarket":"挂单失败降级市价","ai-trading-assistant.form.fallbackToMarketHint":"开/平仓挂单未成交时,是否降级为市价单以确保成交","ai-trading-assistant.form.marginMode":"保证金模式","ai-trading-assistant.form.marginModeCross":"全仓","ai-trading-assistant.form.marginModeIsolated":"逐仓","ai-analysis.title":"量子交易引擎","ai-analysis.system.online":"在线","ai-analysis.system.agents":"智能体","ai-analysis.system.active":"活跃","ai-analysis.system.stage":"阶段","ai-analysis.panel.roster":"智能体阵容","ai-analysis.panel.thinking":"思考中...","ai-analysis.panel.done":"完成","ai-analysis.panel.standby":"待机","ai-analysis.input.title":"量子交易引擎","ai-analysis.input.placeholder":"选择目标资产 (如 BTC/USDT)","ai-analysis.input.watchlist":"自选股","ai-analysis.input.start":"开始分析","ai-analysis.input.recent":"最近任务:","ai-analysis.vis.stage":"阶段","ai-analysis.vis.processing":"处理中","ai-analysis.result.complete":"分析完成","ai-analysis.result.signal":"最终信号","ai-analysis.result.confidence":"置信度:","ai-analysis.result.new":"新分析","ai-analysis.result.full":"查看完整报告","ai-analysis.logs.title":"系统日志","ai-analysis.modal.title":"机密报告","ai-analysis.modal.fundamental":"基本面分析","ai-analysis.modal.technical":"技术面分析","ai-analysis.modal.sentiment":"情绪面分析","ai-analysis.modal.risk":"风险评估","ai-analysis.stage.idle":"待机","ai-analysis.stage.1":"第一阶段:多维分析","ai-analysis.stage.2":"第二阶段:多空辩论","ai-analysis.stage.3":"第三阶段:战略规划","ai-analysis.stage.4":"第四阶段:风控审查","ai-analysis.stage.complete":"完成","ai-analysis.agent.investment_director":"投资总监","ai-analysis.agent.role.investment_director":"综合分析 & 最终结论","ai-analysis.agent.market":"市场分析师","ai-analysis.agent.role.market":"技术 & 市场数据","ai-analysis.agent.fundamental":"基本面分析师","ai-analysis.agent.role.fundamental":"财务 & 估值","ai-analysis.agent.technical":"技术分析师","ai-analysis.agent.role.technical":"技术指标 & 图表","ai-analysis.agent.news":"新闻分析师","ai-analysis.agent.role.news":"全球新闻过滤","ai-analysis.agent.sentiment":"情绪分析师","ai-analysis.agent.role.sentiment":"社交 & 情绪","ai-analysis.agent.risk":"风险分析师","ai-analysis.agent.role.risk":"基础风险检查","ai-analysis.agent.bull":"看涨研究员","ai-analysis.agent.role.bull":"增长催化剂挖掘","ai-analysis.agent.bear":"看跌研究员","ai-analysis.agent.role.bear":"风险 & 缺陷挖掘","ai-analysis.agent.manager":"研究经理","ai-analysis.agent.role.manager":"辩论主持人","ai-analysis.agent.trader":"交易员","ai-analysis.agent.role.trader":"执行策略师","ai-analysis.agent.risky":"激进分析师","ai-analysis.agent.role.risky":"激进策略","ai-analysis.agent.neutral":"平衡分析师","ai-analysis.agent.role.neutral":"平衡策略","ai-analysis.agent.safe":"保守分析师","ai-analysis.agent.role.safe":"保守策略","ai-analysis.agent.cro":"风控经理 (CRO)","ai-analysis.agent.role.cro":"最终决策权威","ai-analysis.script.market":"正在从主要交易所获取 OHLCV 数据...","ai-analysis.script.fundamental":"正在检索季度财务报告...","ai-analysis.script.technical":"正在分析技术指标和图表形态...","ai-analysis.script.news":"正在扫描全球财经新闻...","ai-analysis.script.sentiment":"正在分析社交媒体趋势...","ai-analysis.script.risk":"正在计算历史波动率...","invite.inviteLink":"邀请链接","invite.copy":"复制链接","invite.copySuccess":"复制成功!","invite.copyFailed":"复制失败,请手动复制","invite.noInviteLink":"邀请链接未生成","invite.totalInvites":"累计邀请","invite.totalReward":"累计奖励","invite.rules":"邀请规则","invite.rule1":"每成功邀请一位好友注册,您将获得奖励","invite.rule2":"被邀请的好友完成首次交易,您将获得额外奖励","invite.rule3":"邀请奖励将直接发放到您的账户","invite.inviteList":"邀请列表","invite.tasks":"任务中心","invite.inviteeName":"被邀请人","invite.inviteTime":"邀请时间","invite.status":"状态","invite.reward":"奖励","invite.active":"活跃","invite.inactive":"未激活","invite.completed":"已完成","invite.claimed":"已领取","invite.pending":"待完成","invite.goToTask":"去完成","invite.claimReward":"领取奖励","invite.verify":"验证完成","invite.verifySuccess":"验证成功!任务已完成","invite.verifyNotCompleted":"任务尚未完成,请先完成任务","invite.verifyFailed":"验证失败,请稍后重试","invite.claimSuccess":"成功领取 {reward} QDT!","invite.claimFailed":"领取失败,请稍后重试","invite.totalRecords":"共 {total} 条记录","invite.task.twitter.title":"转发推文到 X (Twitter)","invite.task.twitter.desc":"分享我们的官方推文到您的 X (Twitter) 账号","invite.task.youtube.title":"关注我们的 YouTube 频道","invite.task.youtube.desc":"订阅并关注我们的 YouTube 官方频道","invite.task.telegram.title":"加入 Telegram 群组","invite.task.telegram.desc":"加入我们的官方 Telegram 社区群组","invite.task.discord.title":"加入 Discord 服务器","invite.task.discord.desc":"加入我们的 Discord 社区服务器",message:"-","layouts.usermenu.dialog.title":"信息","layouts.usermenu.dialog.content":"您确定要注销吗?","layouts.userLayout.title":"于不确定中,寻见真理","settings.title":"系统设置","settings.description":"配置应用设置、API密钥和系统偏好","settings.save":"保存设置","settings.reset":"重置","settings.saveSuccess":"设置保存成功","settings.saveFailed":"保存设置失败","settings.loadFailed":"加载配置失败","settings.openrouterBalance":"OpenRouter 账户余额","settings.queryBalance":"查询余额","settings.balanceUsage":"已使用","settings.balanceRemaining":"剩余额度","settings.balanceLimit":"总限额","settings.balanceQuerySuccess":"余额查询成功","settings.balanceQueryFailed":"余额查询失败","settings.balanceNotQueried":'点击"查询余额"获取账户信息',"settings.default":"默认","settings.pleaseSelect":"请选择","settings.inputApiKey":"请输入密钥","settings.getApi":"获取API","settings.link.getApi":"获取API","settings.link.getApiKey":"获取API Key","settings.link.getToken":"获取Token","settings.link.createBot":"创建Bot","settings.link.viewModels":"查看模型列表","settings.link.freeRegister":"免费注册","settings.link.supportedExchanges":"支持的交易所","settings.link.applyApi":"申请API","settings.link.createSearchEngine":"创建搜索引擎","settings.link.getTurnstileKey":"获取Turnstile密钥","settings.link.getGoogleCredentials":"获取Google凭据","settings.link.getGithubCredentials":"获取GitHub凭据","settings.restartRequired":"配置已保存,部分配置需要重启Python服务才能生效","settings.copyRestartCmd":"复制重启命令","settings.copySuccess":"复制成功","settings.copyFailed":"复制失败","settings.group.server":"服务配置","settings.group.auth":"安全认证","settings.group.ai":"AI/LLM配置","settings.group.trading":"实盘交易","settings.group.strategy":"策略执行","settings.group.data_source":"数据源","settings.group.notification":"通知推送","settings.group.email":"邮件配置","settings.group.sms":"短信配置","settings.group.agent":"AI Agent","settings.group.network":"网络代理","settings.group.search":"搜索配置","settings.group.security":"注册与安全","settings.group.app":"应用配置","settings.field.SECRET_KEY":"Secret Key","settings.field.ADMIN_USER":"管理员用户名","settings.field.ADMIN_PASSWORD":"管理员密码","settings.field.ADMIN_EMAIL":"管理员邮箱","settings.field.ENABLE_REGISTRATION":"允许注册","settings.field.TURNSTILE_SITE_KEY":"Turnstile Site Key","settings.field.TURNSTILE_SECRET_KEY":"Turnstile Secret Key","settings.field.FRONTEND_URL":"前端URL","settings.field.GOOGLE_CLIENT_ID":"Google Client ID","settings.field.GOOGLE_CLIENT_SECRET":"Google Client Secret","settings.field.GOOGLE_REDIRECT_URI":"Google回调URL","settings.field.GITHUB_CLIENT_ID":"GitHub Client ID","settings.field.GITHUB_CLIENT_SECRET":"GitHub Client Secret","settings.field.GITHUB_REDIRECT_URI":"GitHub回调URL","settings.field.SECURITY_IP_MAX_ATTEMPTS":"IP最大失败次数","settings.field.SECURITY_IP_WINDOW_MINUTES":"IP统计窗口(分钟)","settings.field.SECURITY_IP_BLOCK_MINUTES":"IP封禁时长(分钟)","settings.field.SECURITY_ACCOUNT_MAX_ATTEMPTS":"账户最大失败次数","settings.field.SECURITY_ACCOUNT_WINDOW_MINUTES":"账户统计窗口(分钟)","settings.field.SECURITY_ACCOUNT_BLOCK_MINUTES":"账户锁定时长(分钟)","settings.field.VERIFICATION_CODE_EXPIRE_MINUTES":"验证码有效期(分钟)","settings.field.VERIFICATION_CODE_RATE_LIMIT":"验证码发送间隔(秒)","settings.field.VERIFICATION_CODE_IP_HOURLY_LIMIT":"IP每小时验证码上限","settings.field.VERIFICATION_CODE_MAX_ATTEMPTS":"验证码最大尝试次数","settings.field.VERIFICATION_CODE_LOCK_MINUTES":"验证码锁定时长(分钟)","settings.field.PYTHON_API_HOST":"监听地址","settings.field.PYTHON_API_PORT":"端口","settings.field.PYTHON_API_DEBUG":"调试模式","settings.field.ENABLE_PENDING_ORDER_WORKER":"启用订单处理Worker","settings.field.PENDING_ORDER_STALE_SEC":"订单超时时间(秒)","settings.field.ORDER_MODE":"下单模式","settings.field.MAKER_WAIT_SEC":"限价单等待时间(秒)","settings.field.MAKER_OFFSET_BPS":"限价单价格偏移(基点)","settings.field.SIGNAL_WEBHOOK_URL":"Webhook URL","settings.field.SIGNAL_WEBHOOK_TOKEN":"Webhook Token","settings.field.SIGNAL_NOTIFY_TIMEOUT_SEC":"通知超时(秒)","settings.field.TELEGRAM_BOT_TOKEN":"Telegram Bot Token","settings.field.SMTP_HOST":"SMTP服务器","settings.field.SMTP_PORT":"SMTP端口","settings.field.SMTP_USER":"SMTP用户名","settings.field.SMTP_PASSWORD":"SMTP密码","settings.field.SMTP_FROM":"发件人地址","settings.field.SMTP_USE_TLS":"使用TLS","settings.field.SMTP_USE_SSL":"使用SSL","settings.field.TWILIO_ACCOUNT_SID":"Account SID","settings.field.TWILIO_AUTH_TOKEN":"Auth Token","settings.field.TWILIO_FROM_NUMBER":"发送号码","settings.field.DISABLE_RESTORE_RUNNING_STRATEGIES":"禁用自动恢复策略","settings.field.STRATEGY_TICK_INTERVAL_SEC":"策略Tick间隔(秒)","settings.field.PRICE_CACHE_TTL_SEC":"价格缓存TTL(秒)","settings.field.PROXY_URL":"完整代理URL","settings.field.RATE_LIMIT":"速率限制(每分钟)","settings.field.ENABLE_CACHE":"启用缓存","settings.field.ENABLE_REQUEST_LOG":"启用请求日志","settings.field.ENABLE_AGENT_MEMORY":"启用Agent记忆","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"启用向量检索(本地)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"Embedding维度","settings.field.AGENT_MEMORY_TOP_K":"召回数量TopK","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"候选窗口大小","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"时间衰减半衰期(天)","settings.field.AGENT_MEMORY_W_SIM":"相似度权重","settings.field.AGENT_MEMORY_W_RECENCY":"时间权重","settings.field.AGENT_MEMORY_W_RETURNS":"收益权重","settings.field.ENABLE_REFLECTION_WORKER":"启用自动验证","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"验证周期间隔(秒)","settings.field.OPENROUTER_API_KEY":"OpenRouter API Key","settings.field.OPENROUTER_API_URL":"OpenRouter API URL","settings.field.OPENROUTER_MODEL":"默认模型","settings.field.OPENROUTER_TEMPERATURE":"Temperature","settings.field.OPENROUTER_MAX_TOKENS":"Max Tokens","settings.field.OPENROUTER_TIMEOUT":"超时时间(秒)","settings.field.OPENROUTER_CONNECT_TIMEOUT":"连接超时(秒)","settings.field.MARKET_TYPES_JSON":"市场类型(JSON)","settings.field.TRADING_SUPPORTED_SYMBOLS_JSON":"支持的交易对(JSON)","settings.field.DATA_SOURCE_TIMEOUT":"数据源超时(秒)","settings.field.DATA_SOURCE_RETRY":"重试次数","settings.field.DATA_SOURCE_RETRY_BACKOFF":"重试退避(秒)","settings.field.FINNHUB_API_KEY":"Finnhub API Key","settings.field.FINNHUB_TIMEOUT":"Finnhub超时(秒)","settings.field.FINNHUB_RATE_LIMIT":"Finnhub速率限制","settings.field.CCXT_DEFAULT_EXCHANGE":"CCXT默认交易所","settings.field.CCXT_TIMEOUT":"CCXT超时(ms)","settings.field.CCXT_PROXY":"CCXT代理","settings.field.AKSHARE_TIMEOUT":"Akshare超时(秒)","settings.field.YFINANCE_TIMEOUT":"YFinance超时(秒)","settings.field.TIINGO_API_KEY":"Tiingo API Key","settings.field.TIINGO_TIMEOUT":"Tiingo超时(秒)","settings.field.SEARCH_PROVIDER":"搜索提供商","settings.field.SEARCH_MAX_RESULTS":"最大结果数","settings.field.TAVILY_API_KEYS":"Tavily API Keys","settings.field.SERPAPI_KEYS":"SerpAPI Keys","settings.field.SEARCH_GOOGLE_API_KEY":"Google API Key","settings.field.SEARCH_GOOGLE_CX":"Google CX","settings.field.SEARCH_BING_API_KEY":"Bing API Key","settings.field.INTERNAL_API_KEY":"内部API Key","settings.desc.PYTHON_API_HOST":"服务监听地址。0.0.0.0 允许外部访问,127.0.0.1 仅本地访问","settings.desc.PYTHON_API_PORT":"服务监听端口,默认5000","settings.desc.PYTHON_API_DEBUG":"启用调试模式,开发时使用。生产环境请关闭","settings.desc.SECRET_KEY":"JWT签名密钥。生产环境必须修改以确保安全","settings.desc.ADMIN_USER":"管理员登录用户名","settings.desc.ADMIN_PASSWORD":"管理员登录密码。生产环境必须修改","settings.desc.OPENROUTER_API_KEY":"OpenRouter API密钥,用于访问多种AI模型","settings.desc.OPENROUTER_API_URL":"OpenRouter API端点地址","settings.desc.OPENROUTER_MODEL":"默认使用的AI模型,如 openai/gpt-4o, anthropic/claude-3.5-sonnet","settings.desc.OPENROUTER_TEMPERATURE":"模型创造性(0-1)。越低越确定性,越高越有创意","settings.desc.OPENROUTER_MAX_TOKENS":"每次请求最大输出token数","settings.desc.OPENROUTER_TIMEOUT":"API请求超时时间(秒)","settings.desc.OPENROUTER_CONNECT_TIMEOUT":"连接建立超时时间(秒)","settings.desc.ENABLE_PENDING_ORDER_WORKER":"启用后台订单处理Worker,实盘交易必需","settings.desc.PENDING_ORDER_STALE_SEC":"等待订单超时时间,超时后标记为过期","settings.desc.ORDER_MODE":"maker: 限价单优先(手续费低),market: 市价单(立即成交)","settings.desc.MAKER_WAIT_SEC":"限价单等待成交时间,超时后自动切换为市价单","settings.desc.MAKER_OFFSET_BPS":"限价单价格偏移(基点)。买入价=市价*(1-偏移),卖出价=市价*(1+偏移)","settings.desc.DISABLE_RESTORE_RUNNING_STRATEGIES":"禁止服务重启时自动恢复运行中的策略","settings.desc.STRATEGY_TICK_INTERVAL_SEC":"策略主循环检查间隔(秒)","settings.desc.PRICE_CACHE_TTL_SEC":"价格数据缓存有效期(秒)","settings.desc.MARKET_TYPES_JSON":"自定义市场类型配置,JSON格式","settings.desc.TRADING_SUPPORTED_SYMBOLS_JSON":"支持的交易对列表,JSON格式","settings.desc.DATA_SOURCE_TIMEOUT":"数据源请求默认超时时间","settings.desc.DATA_SOURCE_RETRY":"数据源请求失败时的重试次数","settings.desc.DATA_SOURCE_RETRY_BACKOFF":"重试间隔时间(秒)","settings.desc.CCXT_DEFAULT_EXCHANGE":"CCXT默认交易所(binance, coinbase, okx等)","settings.desc.CCXT_TIMEOUT":"CCXT请求超时时间(毫秒)","settings.desc.CCXT_PROXY":"CCXT请求代理地址(如 socks5h://127.0.0.1:1080)","settings.desc.FINNHUB_API_KEY":"Finnhub API密钥,用于美股数据(有免费额度)","settings.desc.FINNHUB_TIMEOUT":"Finnhub API请求超时时间","settings.desc.FINNHUB_RATE_LIMIT":"Finnhub API速率限制(每分钟请求数)","settings.desc.TIINGO_API_KEY":"Tiingo API密钥,用于外汇/贵金属数据(免费版不支持1分钟数据)","settings.desc.TIINGO_TIMEOUT":"Tiingo API请求超时时间","settings.desc.AKSHARE_TIMEOUT":"Akshare API超时时间,用于A股数据","settings.desc.YFINANCE_TIMEOUT":"Yahoo Finance API超时时间","settings.desc.SIGNAL_WEBHOOK_URL":"信号通知Webhook地址(POST JSON)","settings.desc.SIGNAL_WEBHOOK_TOKEN":"Webhook认证令牌,通过请求头发送","settings.desc.SIGNAL_NOTIFY_TIMEOUT_SEC":"通知请求超时时间","settings.desc.TELEGRAM_BOT_TOKEN":"Telegram机器人Token,从@BotFather获取","settings.desc.SMTP_HOST":"SMTP邮件服务器地址(如 smtp.gmail.com)","settings.desc.SMTP_PORT":"SMTP端口(TLS用587,SSL用465,明文用25)","settings.desc.SMTP_USER":"SMTP认证用户名(通常是邮箱地址)","settings.desc.SMTP_PASSWORD":"SMTP认证密码或应用专用密码","settings.desc.SMTP_FROM":"邮件发件人地址","settings.desc.SMTP_USE_TLS":"启用STARTTLS加密(推荐端口587)","settings.desc.SMTP_USE_SSL":"启用SSL加密(端口465)","settings.desc.TWILIO_ACCOUNT_SID":"Twilio账户SID,从控制台获取","settings.desc.TWILIO_AUTH_TOKEN":"Twilio认证Token,从控制台获取","settings.desc.TWILIO_FROM_NUMBER":"Twilio发送短信的号码(如 +1234567890)","settings.desc.ENABLE_AGENT_MEMORY":"启用AI Agent记忆功能,用于学习历史交易","settings.desc.AGENT_MEMORY_ENABLE_VECTOR":"启用本地向量相似度搜索进行记忆检索","settings.desc.AGENT_MEMORY_EMBEDDING_DIM":"记忆向量嵌入维度","settings.desc.AGENT_MEMORY_TOP_K":"检索时返回的相似记忆数量","settings.desc.AGENT_MEMORY_CANDIDATE_LIMIT":"相似度搜索的候选记忆上限","settings.desc.AGENT_MEMORY_HALF_LIFE_DAYS":"记忆时间衰减的半衰期(天)","settings.desc.AGENT_MEMORY_W_SIM":"记忆排序中相似度分数的权重(0-1)","settings.desc.AGENT_MEMORY_W_RECENCY":"记忆排序中时间新近度的权重(0-1)","settings.desc.AGENT_MEMORY_W_RETURNS":"记忆排序中收益表现的权重(0-1)","settings.desc.ENABLE_REFLECTION_WORKER":"启用后台自动交易反思Worker","settings.desc.REFLECTION_WORKER_INTERVAL_SEC":"自动反思运行间隔(默认24小时)","settings.desc.PROXY_URL":"完整代理URL(设置后覆盖上面的配置)","settings.desc.SEARCH_PROVIDER":"网页搜索提供商,用于AI研究功能。博查(Bocha)推荐用于A股新闻","settings.desc.SEARCH_MAX_RESULTS":"搜索返回的最大结果数","settings.desc.TAVILY_API_KEYS":"Tavily搜索API密钥,多个用逗号分隔可轮换。免费1000次/月","settings.desc.SERPAPI_KEYS":"SerpAPI密钥,用于Google/Bing搜索,多个用逗号分隔可轮换","settings.desc.SEARCH_GOOGLE_API_KEY":"Google自定义搜索API密钥","settings.desc.SEARCH_GOOGLE_CX":"Google可编程搜索引擎ID (CX)","settings.desc.SEARCH_BING_API_KEY":"Microsoft Bing网页搜索API密钥","settings.desc.INTERNAL_API_KEY":"内部API认证密钥,用于服务间调用","settings.desc.RATE_LIMIT":"每IP每分钟的API请求限制","settings.desc.ENABLE_CACHE":"启用响应缓存以提高性能","settings.desc.ENABLE_REQUEST_LOG":"记录所有API请求日志,用于调试","portfolio.summary.totalValue":"总市值","portfolio.summary.totalCost":"总成本","portfolio.summary.totalPnl":"总盈亏","portfolio.summary.positionCount":"持仓数量","portfolio.summary.profitLossRatio":"盈利/亏损","portfolio.summary.today":"今日","portfolio.summary.todayPnl":"今日盈亏","portfolio.summary.bestPerformer":"最佳表现","portfolio.summary.worstPerformer":"最差表现","portfolio.summary.priceSync":"价格同步","portfolio.summary.syncInterval":"刷新间隔","portfolio.summary.justNow":"刚刚","portfolio.summary.ago":"前","portfolio.positions.title":"我的持仓","portfolio.positions.add":"添加持仓","portfolio.positions.addFirst":"添加第一笔持仓","portfolio.positions.empty":"暂无持仓记录","portfolio.positions.deleteConfirm":"确定删除这笔持仓吗?","portfolio.positions.currentPrice":"现价","portfolio.positions.entryPrice":"买入价","portfolio.positions.quantity":"数量","portfolio.positions.side":"方向","portfolio.positions.long":"做多","portfolio.positions.short":"做空","portfolio.positions.marketValue":"市值","portfolio.positions.pnl":"盈亏","portfolio.positions.items":"个持仓","portfolio.monitors.title":"AI 监控","portfolio.monitors.add":"添加监控","portfolio.monitors.addFirst":"添加 AI 监控","portfolio.monitors.empty":"暂无监控任务","portfolio.monitors.deleteConfirm":"确定删除这个监控任务吗?","portfolio.monitors.interval":"执行间隔","portfolio.monitors.lastRun":"上次执行","portfolio.monitors.nextRun":"下次执行","portfolio.monitors.channels":"通知渠道","portfolio.monitors.runNow":"立即执行","portfolio.monitors.analysisResult":"AI 分析结果","portfolio.monitors.runningTitle":"AI 分析已启动","portfolio.monitors.runningDesc":"分析正在后台运行,完成后会通过通知推送结果。分析多个持仓可能需要几分钟时间。","portfolio.monitors.timeoutTitle":"请求超时","portfolio.monitors.timeoutDesc":"分析可能正在后台运行中,请稍后查看通知获取结果。如果长时间没有收到通知,请重试。","portfolio.modal.addPosition":"添加持仓","portfolio.modal.editPosition":"编辑持仓","portfolio.modal.addMonitor":"添加监控","portfolio.modal.editMonitor":"编辑监控","portfolio.form.market":"市场","portfolio.form.marketRequired":"请选择市场","portfolio.form.selectMarket":"选择市场","portfolio.form.symbol":"标的代码","portfolio.form.symbolRequired":"请输入标的代码","portfolio.form.searchSymbol":"搜索或输入标的代码","portfolio.form.useAsSymbol":"使用","portfolio.form.asSymbolCode":"作为标的代码","portfolio.form.symbolHint":"可搜索标的库,或直接输入任意代码","portfolio.form.side":"方向","portfolio.form.quantity":"数量","portfolio.form.quantityRequired":"请输入数量","portfolio.form.enterQuantity":"输入持仓数量","portfolio.form.entryPrice":"买入价","portfolio.form.entryPriceRequired":"请输入买入价","portfolio.form.enterEntryPrice":"输入买入价格","portfolio.form.notes":"备注","portfolio.form.enterNotes":"可选:添加备注","portfolio.form.monitorName":"监控名称","portfolio.form.monitorNameRequired":"请输入监控名称","portfolio.form.enterMonitorName":"例如:每日组合分析","portfolio.form.interval":"执行间隔","portfolio.form.minutes":"分钟","portfolio.form.hour":"小时","portfolio.form.hours":"小时","portfolio.form.notifyChannels":"通知渠道","portfolio.form.browser":"浏览器通知","portfolio.form.email":"邮件","portfolio.form.telegramChatId":"Telegram Chat ID","portfolio.form.enterTelegramChatId":"输入 Telegram Chat ID","portfolio.form.telegramRequired":"请输入 Telegram Chat ID","portfolio.form.emailAddress":"邮箱地址","portfolio.form.enterEmail":"输入邮箱地址","portfolio.form.emailRequired":"请输入邮箱地址","portfolio.form.emailInvalid":"请输入有效的邮箱地址","portfolio.form.customPrompt":"自定义提示","portfolio.form.customPromptPlaceholder":'可选:添加特别关注点,例如"重点关注科技股风险"',"portfolio.form.monitorScope":"监控范围","portfolio.form.allPositions":"全部持仓","portfolio.form.selectedPositions":"指定持仓","portfolio.form.selectPositions":"选择持仓","portfolio.form.selectAll":"全选","portfolio.form.deselectAll":"全不选","portfolio.form.selectedCount":"已选 {count}/{total}","portfolio.form.pleaseSelectPositions":"请至少选择一个持仓进行监控","portfolio.form.notificationFromProfile":"通知将发送到您在个人中心配置的地址","portfolio.form.goToProfile":"前往配置","portfolio.message.loadFailed":"加载数据失败","portfolio.message.saveSuccess":"保存成功","portfolio.message.saveFailed":"保存失败","portfolio.message.deleteSuccess":"删除成功","portfolio.message.deleteFailed":"删除失败","portfolio.message.updateFailed":"更新失败","portfolio.message.monitorEnabled":"监控已启用","portfolio.message.monitorDisabled":"监控已暂停","portfolio.message.monitorRunSuccess":"分析完成","portfolio.message.monitorRunFailed":"分析失败","portfolio.message.monitorRunning":"AI 分析已启动,请等待通知","portfolio.groups.all":"全部持仓","portfolio.groups.ungrouped":"未分组","portfolio.form.group":"分组","portfolio.form.enterGroup":"输入或选择分组","portfolio.alerts.title":"价格/盈亏预警","portfolio.alerts.addAlert":"添加预警","portfolio.alerts.editAlert":"编辑预警","portfolio.alerts.alertType":"预警类型","portfolio.alerts.priceAbove":"价格高于","portfolio.alerts.priceBelow":"价格低于","portfolio.alerts.pnlAbove":"盈利高于 (%)","portfolio.alerts.pnlBelow":"亏损低于 (%)","portfolio.alerts.threshold":"阈值","portfolio.alerts.thresholdRequired":"请输入阈值","portfolio.alerts.enterPrice":"输入价格","portfolio.alerts.enterPercent":"输入百分比","portfolio.alerts.currentPrice":"当前价格","portfolio.alerts.currentPriceHint":"当前价格","portfolio.alerts.repeatInterval":"重复提醒","portfolio.alerts.noRepeat":"不重复 (触发一次)","portfolio.alerts.every5min":"每 5 分钟","portfolio.alerts.every15min":"每 15 分钟","portfolio.alerts.every30min":"每 30 分钟","portfolio.alerts.every1hour":"每 1 小时","portfolio.alerts.every4hours":"每 4 小时","portfolio.alerts.onceDaily":"每天一次","portfolio.alerts.enabled":"启用预警","portfolio.alerts.enabledDesc":"开启后将自动监测并触发通知","portfolio.alerts.delete":"删除","portfolio.alerts.deleteConfirm":"确定要删除此预警吗?","portfolio.modal.addAlert":"添加预警","portfolio.modal.editAlert":"编辑预警","menu.userManage":"用户管理","menu.myProfile":"个人中心","common.actions":"操作","common.refresh":"刷新","userManage.title":"用户管理","userManage.searchPlaceholder":"搜索用户名/邮箱/昵称","userManage.description":"管理系统用户、角色和权限","userManage.createUser":"创建用户","userManage.editUser":"编辑用户","userManage.username":"用户名","userManage.password":"密码","userManage.nickname":"昵称","userManage.email":"邮箱","userManage.role":"角色","userManage.status":"状态","userManage.lastLogin":"最后登录","userManage.active":"启用","userManage.disabled":"禁用","userManage.neverLogin":"从未登录","userManage.usernameRequired":"请输入用户名","userManage.usernamePlaceholder":"输入用户名","userManage.passwordRequired":"请输入密码","userManage.passwordPlaceholder":"输入密码(至少6位)","userManage.passwordMin":"密码至少6个字符","userManage.nicknamePlaceholder":"输入昵称","userManage.emailPlaceholder":"输入邮箱","userManage.emailInvalid":"邮箱格式不正确","userManage.rolePlaceholder":"选择角色","userManage.statusPlaceholder":"选择状态","userManage.resetPassword":"重置密码","userManage.resetPasswordWarning":"此操作将重置用户密码","userManage.newPassword":"新密码","userManage.newPasswordPlaceholder":"输入新密码","userManage.confirmDelete":"确定要删除此用户吗?","userManage.roleAdmin":"管理员","userManage.roleManager":"经理","userManage.roleUser":"普通用户","userManage.roleViewer":"访客","profile.title":"个人中心","profile.description":"管理您的账户设置和偏好","profile.basicInfo":"基本信息","profile.changePassword":"修改密码","profile.username":"用户名","profile.nickname":"昵称","profile.email":"邮箱","profile.lastLogin":"最后登录","profile.nicknamePlaceholder":"输入您的昵称","profile.emailPlaceholder":"输入您的邮箱","profile.emailInvalid":"邮箱格式不正确","profile.emailCannotChange":"注册后邮箱不可修改","profile.passwordHint":"密码至少需要6个字符","profile.oldPassword":"当前密码","profile.newPassword":"新密码","profile.confirmPassword":"确认密码","profile.oldPasswordRequired":"请输入当前密码","profile.oldPasswordPlaceholder":"输入当前密码","profile.newPasswordRequired":"请输入新密码","profile.newPasswordPlaceholder":"输入新密码","profile.confirmPasswordRequired":"请确认新密码","profile.confirmPasswordPlaceholder":"再次输入新密码","profile.passwordMin":"密码至少6个字符","profile.passwordMismatch":"两次输入的密码不一致","profile.credits.title":"我的积分","profile.credits.unit":"积分","profile.credits.recharge":"开通/充值","profile.credits.vipExpires":"VIP有效期至","profile.credits.vipExpired":"VIP已过期","profile.credits.noVip":"非VIP用户","profile.credits.hint":"使用AI分析/回测/监控等功能会消耗积分;VIP仅可免费使用VIP免费指标。","profile.creditsLog":"消费记录","profile.creditsLog.time":"时间","profile.creditsLog.action":"类型","profile.creditsLog.amount":"变动","profile.creditsLog.balance":"余额","profile.creditsLog.remark":"备注","profile.creditsLog.actionConsume":"消费","profile.creditsLog.actionRecharge":"充值","profile.creditsLog.actionAdjust":"调整","profile.creditsLog.actionRefund":"退款","profile.creditsLog.actionVipGrant":"VIP授予","profile.creditsLog.actionVipRevoke":"VIP取消","profile.creditsLog.actionRegisterBonus":"注册奖励","profile.creditsLog.actionReferralBonus":"邀请奖励","profile.creditsLog.actionIndicatorPurchase":"购买指标","profile.creditsLog.actionIndicatorSale":"出售指标","profile.referral.title":"邀请好友","profile.referral.listTab":"邀请列表","profile.referral.totalInvited":"已邀请","profile.referral.bonusPerInvite":"每邀请获得","profile.referral.yourLink":"您的邀请链接","profile.referral.copyLink":"复制链接","profile.referral.linkCopied":"邀请链接已复制","profile.referral.newUserBonus":"新用户注册获得","profile.referral.user":"用户","profile.referral.registerTime":"注册时间","profile.referral.noReferrals":"暂无邀请记录","profile.referral.shareNow":"立即分享邀请","profile.notifications.title":"通知设置","profile.notifications.hint":"配置您的默认通知方式,在创建资产监控和预警时将自动使用这些设置","profile.notifications.defaultChannels":"默认通知渠道","profile.notifications.browser":"站内通知","profile.notifications.email":"邮件","profile.notifications.phone":"短信","profile.notifications.telegramBotToken":"Telegram Bot Token","profile.notifications.telegramBotTokenPlaceholder":"请输入您的 Telegram Bot Token","profile.notifications.telegramBotTokenHint":"通过 @BotFather 创建机器人获取 Token","profile.notifications.telegramChatId":"Telegram Chat ID","profile.notifications.telegramPlaceholder":"请输入您的 Telegram Chat ID(如 123456789)","profile.notifications.telegramHint":"发送 /start 给 @userinfobot 可获取您的 Chat ID","profile.notifications.notifyEmail":"通知邮箱","profile.notifications.emailPlaceholder":"接收通知的邮箱地址","profile.notifications.emailHint":"默认使用账户邮箱,可设置其他邮箱接收通知","profile.notifications.phonePlaceholder":"请输入手机号(如 +8613800138000)","profile.notifications.phoneHint":"需要管理员配置 Twilio 服务后才能使用短信通知","profile.notifications.discordWebhook":"Discord Webhook","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"在 Discord 服务器设置中创建 Webhook","profile.notifications.webhookUrl":"Webhook URL","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"自定义 Webhook 地址,将以 POST JSON 方式推送通知","profile.notifications.webhookToken":"Webhook Token(可选)","profile.notifications.webhookTokenPlaceholder":"用于验证请求的 Bearer Token","profile.notifications.webhookTokenHint":"将作为 Authorization: Bearer Token 发送到 Webhook","profile.notifications.testBtn":"发送测试通知","profile.notifications.saveSuccess":"通知设置保存成功","profile.notifications.selectChannel":"请至少选择一个通知渠道","profile.notifications.fillTelegramToken":"请填写 Telegram Bot Token","profile.notifications.fillTelegram":"请填写 Telegram Chat ID","profile.notifications.fillEmail":"请填写通知邮箱","profile.notifications.testSent":"测试通知已发送,请检查您的通知渠道","profile.exchange.title":"交易所配置","profile.exchange.hint":"统一管理您的交易所API密钥和券商连接,在交易助手和快捷交易中可直接选择使用。","profile.exchange.addAccount":"添加交易所账户","profile.exchange.noAccounts":"暂无交易所账户,请点击上方按钮添加","profile.exchange.colExchange":"交易所","profile.exchange.colName":"名称","profile.exchange.colHint":"连接信息","profile.exchange.colCreatedAt":"创建时间","profile.exchange.colActions":"操作","profile.exchange.deleteConfirm":"确定要删除此交易所账户吗?删除后无法恢复。","profile.exchange.deleteSuccess":"交易所账户已删除","profile.exchange.addTitle":"添加交易所账户","profile.exchange.selectExchange":"选择交易所","profile.exchange.accountName":"账户名称(可选)","profile.exchange.accountNamePlaceholder":"如:主账户、测试账户","profile.exchange.apiKey":"API Key","profile.exchange.secretKey":"Secret Key","profile.exchange.passphrase":"Passphrase","profile.exchange.demoTrading":"模拟交易","profile.exchange.ibkrHost":"TWS/Gateway 主机地址","profile.exchange.ibkrPort":"TWS/Gateway 端口","profile.exchange.ibkrPortHint":"TWS纸交易:7497 | TWS实盘:7496 | Gateway纸交易:4002 | Gateway实盘:4001","profile.exchange.ibkrClientId":"客户端ID","profile.exchange.ibkrAccount":"账户号(可选)","profile.exchange.mt5Server":"服务器","profile.exchange.mt5Login":"登录账号","profile.exchange.mt5Password":"密码","profile.exchange.mt5TerminalPath":"终端路径(可选)","profile.exchange.mt5TerminalPathHint":"MT5终端安装路径,如 C:\\Program Files\\MetaTrader 5\\terminal64.exe","profile.exchange.testConnection":"测试连接","profile.exchange.testSuccess":"连接成功!","profile.exchange.testFailed":"连接失败","profile.exchange.saveSuccess":"交易所账户添加成功","profile.exchange.saveFailed":"添加失败","profile.exchange.typeCrypto":"加密货币交易所","profile.exchange.typeIBKR":"美股券商 (IBKR)","profile.exchange.typeMT5":"外汇 (MetaTrader 5)","profile.exchange.localDeploymentRequired":"需要本地部署","profile.exchange.localDeploymentHint":"此券商需要在本地部署QuantDinger才能使用。","profile.exchange.goToManage":"前往个人中心 → 交易所配置管理","profile.exchange.noCredentialHint":"请先在个人中心添加交易所账户","userManage.credits":"积分","userManage.adjustCredits":"调整积分","userManage.setVip":"设置VIP","userManage.currentCredits":"当前积分","userManage.newCredits":"新积分","userManage.enterCredits":"输入新的积分数量","userManage.creditsNonNegative":"积分不能为负数","userManage.currentVip":"当前VIP状态","userManage.vipActive":"有效","userManage.vipExpired":"已过期","userManage.vipDays":"VIP天数","userManage.vipExpiresAt":"VIP过期时间","userManage.cancelVip":"取消VIP","userManage.days":"天","userManage.customDate":"自定义日期","userManage.selectDate":"请选择日期","userManage.remark":"备注","userManage.remarkPlaceholder":"可选备注","userManage.tabUsers":"用户管理","systemOverview.tabTitle":"系统总览","systemOverview.totalStrategies":"策略总数","systemOverview.runningStrategies":"运行中","systemOverview.totalCapital":"总资金","systemOverview.totalPnl":"总盈亏","systemOverview.filterAll":"全部状态","systemOverview.filterRunning":"运行中","systemOverview.filterStopped":"已停止","systemOverview.searchPlaceholder":"搜索策略名/交易对/用户名","systemOverview.running":"运行中","systemOverview.stopped":"已停止","systemOverview.colUser":"用户","systemOverview.colStrategy":"策略名称","systemOverview.colStatus":"状态","systemOverview.colSymbol":"交易对","systemOverview.colCapital":"资金","systemOverview.colPnl":"盈亏 / ROI","systemOverview.colPositions":"持仓","systemOverview.colTrades":"交易次数","systemOverview.colIndicator":"指标","systemOverview.colExchange":"交易所","systemOverview.colTimeframe":"周期","systemOverview.colLeverage":"杠杆","systemOverview.colCreatedAt":"创建时间","systemOverview.realized":"已实现","systemOverview.unrealized":"未实现","systemOverview.symbols":"个交易对","systemOverview.live":"实盘","systemOverview.signal":"仅通知","settings.group.billing":"计费配置","settings.field.BILLING_ENABLED":"启用计费","settings.field.BILLING_COST_AI_ANALYSIS":"AI分析消耗","settings.field.BILLING_COST_STRATEGY_RUN":"策略运行消耗","settings.field.BILLING_COST_BACKTEST":"回测消耗","settings.field.BILLING_COST_PORTFOLIO_MONITOR":"Portfolio监控消耗","settings.field.CREDITS_REGISTER_BONUS":"注册奖励","settings.field.CREDITS_REFERRAL_BONUS":"邀请奖励","settings.field.RECHARGE_TELEGRAM_URL":"充值Telegram链接","settings.field.MEMBERSHIP_MONTHLY_PRICE_USD":"包月会员价格(USD)","settings.field.MEMBERSHIP_MONTHLY_CREDITS":"包月会员赠送积分","settings.field.MEMBERSHIP_YEARLY_PRICE_USD":"包年会员价格(USD)","settings.field.MEMBERSHIP_YEARLY_CREDITS":"包年会员赠送积分","settings.field.MEMBERSHIP_LIFETIME_PRICE_USD":"永久会员价格(USD)","settings.field.MEMBERSHIP_LIFETIME_MONTHLY_CREDITS":"永久会员每月赠送积分","settings.field.USDT_PAY_ENABLED":"启用USDT收款","settings.field.USDT_PAY_CHAIN":"USDT网络","settings.field.USDT_TRC20_XPUB":"TRC20 XPUB(仅观察)","settings.field.USDT_TRC20_CONTRACT":"USDT TRC20 合约地址","settings.field.TRONGRID_BASE_URL":"TronGrid Base URL","settings.field.TRONGRID_API_KEY":"TronGrid API Key","settings.field.USDT_PAY_CONFIRM_SECONDS":"确认延迟(秒)","settings.field.USDT_PAY_EXPIRE_MINUTES":"订单过期(分钟)","settings.desc.BILLING_ENABLED":"启用计费系统。启用后,用户使用某些功能需要消耗积分","settings.desc.BILLING_COST_AI_ANALYSIS":"每次AI分析消耗的积分数","settings.desc.BILLING_COST_STRATEGY_RUN":"启动策略时消耗的积分数","settings.desc.BILLING_COST_BACKTEST":"每次回测消耗的积分数","settings.desc.BILLING_COST_PORTFOLIO_MONITOR":"每次Portfolio AI监控消耗的积分数","settings.desc.CREDITS_REGISTER_BONUS":"新用户注册时获得的积分奖励","settings.desc.CREDITS_REFERRAL_BONUS":"用户通过邀请链接成功邀请新用户时,邀请人获得的积分奖励","settings.desc.VERIFICATION_CODE_MAX_ATTEMPTS":"验证码验证失败的最大尝试次数,超过后将锁定","settings.desc.VERIFICATION_CODE_LOCK_MINUTES":"验证码验证失败次数超过限制后的锁定时长(分钟)","settings.desc.RECHARGE_TELEGRAM_URL":"用户点击充值时跳转的Telegram客服链接","settings.desc.MEMBERSHIP_MONTHLY_PRICE_USD":"包月会员的价格(USD)。当前为模拟支付,后续可接入真实支付网关。","settings.desc.MEMBERSHIP_MONTHLY_CREDITS":"购买包月会员后立即赠送到账号的积分数量。","settings.desc.MEMBERSHIP_YEARLY_PRICE_USD":"包年会员的价格(USD)。当前为模拟支付,后续可接入真实支付网关。","settings.desc.MEMBERSHIP_YEARLY_CREDITS":"购买包年会员后立即赠送到账号的积分数量。","settings.desc.MEMBERSHIP_LIFETIME_PRICE_USD":"永久会员的价格(USD)。当前为模拟支付,后续可接入真实支付网关。","settings.desc.MEMBERSHIP_LIFETIME_MONTHLY_CREDITS":"永久会员每30天自动发放一次的积分数量(首次购买会立刻发放一次)。","settings.desc.USDT_PAY_ENABLED":"开启后,会员购买页会提供 USDT 扫码支付(每单独立地址 + 自动对账)。","settings.desc.USDT_PAY_CHAIN":"当前版本仅支持 TRC20。","settings.desc.USDT_TRC20_XPUB":"仅观察 xpub,用于派生每个订单的收款地址。不要填写私钥/助记词。","settings.desc.USDT_TRC20_CONTRACT":"TRON 链上 USDT 合约地址(默认已填写)。","settings.desc.TRONGRID_BASE_URL":"TronGrid API 基础地址(默认即可)。","settings.desc.TRONGRID_API_KEY":"可选。用于提高 TronGrid 调用额度/稳定性。","settings.desc.USDT_PAY_CONFIRM_SECONDS":"检测到到账后,等待指定秒数再标记“确认”,降低极端回滚风险。","settings.desc.USDT_PAY_EXPIRE_MINUTES":"用户扫码支付的订单有效期,过期后需重新生成订单。","globalMarket.title":"全球金融面板","globalMarket.fearGreedShort":"恐贪","globalMarket.calendar":"财经日历","globalMarket.lastUpdate":"最后更新","globalMarket.refresh":"刷新数据","globalMarket.name":"名称","globalMarket.price":"价格","globalMarket.change":"涨跌","globalMarket.trend":"走势","globalMarket.pair":"货币对","globalMarket.unit":"单位","globalMarket.refreshSuccess":"数据刷新成功","globalMarket.refreshError":"数据刷新失败","globalMarket.fetchError":"获取数据失败","globalMarket.loading":"加载中...","globalMarket.fearGreedIndex":"恐惧贪婪指数","globalMarket.fearGreedTip":"恐惧贪婪指数衡量市场情绪,0表示极度恐惧,100表示极度贪婪","globalMarket.volatilityIndex":"波动率指数","globalMarket.dollarIndex":"美元指数","globalMarket.majorIndices":"主要指数","globalMarket.vixTitle":"VIX 波动率指数","globalMarket.vixTip":"VIX指数衡量市场预期波动率,数值越高表示市场越恐慌","globalMarket.extremeFear":"极度恐惧","globalMarket.fear":"恐惧","globalMarket.neutral":"中性","globalMarket.greed":"贪婪","globalMarket.extremeGreed":"极度贪婪","globalMarket.marketOverview":"全球市场概览","globalMarket.indices":"主要指数","globalMarket.forex":"外汇市场","globalMarket.crypto":"加密货币","globalMarket.commodities":"大宗商品","globalMarket.heatmap":"市场热力图","globalMarket.cryptoHeatmap":"加密货币","globalMarket.commoditiesHeatmap":"大宗商品","globalMarket.sectorHeatmap":"板块","globalMarket.forexHeatmap":"外汇","globalMarket.opportunities":"交易机会","globalMarket.noOpportunities":"暂无明显交易机会","globalMarket.financialNews":"财经资讯","globalMarket.noNews":"暂无新闻","globalMarket.economicCalendar":"财经日历","globalMarket.noEvents":"暂无事件","globalMarket.actual":"实际","globalMarket.forecast":"预期","globalMarket.previous":"前值","globalMarket.signal.bullish":"看涨趋势","globalMarket.signal.bearish":"看跌趋势","globalMarket.signal.overbought":"超买警告","globalMarket.signal.oversold":"超卖机会","globalMarket.worldMap":"全球市场地图","globalMarket.rising":"上涨","globalMarket.falling":"下跌","globalMarket.bullish":"利多","globalMarket.bearish":"利空","globalMarket.expectedImpact":"预期影响","globalMarket.aboveForecast":"高于预期","globalMarket.belowForecast":"低于预期","globalMarket.upcomingEvents":"即将公布","globalMarket.releasedEvents":"已公布数据","trading-assistant.form.notificationFromProfile":"通知将发送到您在个人中心配置的地址。","trading-assistant.form.notificationConfigMissing":"您选中的渠道还未配置参数({channels}),将无法接收通知。请前往个人中心进行配置。","trading-assistant.form.goToProfile":"前往配置","community.title":"指标市场","community.searchPlaceholder":"搜索指标名称或描述...","community.all":"全部","community.freeOnly":"免费","community.paidOnly":"付费","community.sortNewest":"最新发布","community.sortHot":"最热门","community.sortRating":"评分最高","community.sortPriceLow":"价格从低到高","community.sortPriceHigh":"价格从高到低","community.myPurchases":"我的购买","community.noIndicators":"暂无指标","community.createFirst":"发布第一个指标","community.total":"共","community.items":"个","community.free":"免费","community.credits":"积分","community.myIndicator":"我的指标","community.purchased":"已购买","community.noDescription":"暂无描述","community.loadFailed":"加载失败","community.publishedAt":"发布于","community.downloads":"获取","community.rating":"评分","community.views":"浏览","community.description":"指标说明","community.performance":"实盘表现","community.strategyCount":"使用策略数","community.tradeCount":"交易次数","community.winRate":"胜率","community.totalProfit":"总收益","community.reviews":"用户评价","community.useNow":"立即使用","community.getFree":"免费获取","community.buyNow":"立即购买","community.purchaseSuccess":"购买成功!指标已添加到您的指标列表","community.purchaseFailed":"购买失败","community.indicator_not_found":"指标不存在或已下架","community.cannot_buy_own":"不能购买自己的指标","community.already_purchased":"您已购买过此指标","community.insufficient_credits":"积分不足","community.commentSuccess":"评论成功","community.commentFailed":"评论失败","community.commentUpdateSuccess":"评论修改成功","community.commentUpdateFailed":"评论修改失败,请重试","community.editComment":"编辑评论","community.cancelEdit":"取消","community.updateComment":"更新评论","community.alreadyCommented":"您已评论此指标","community.editMyComment":"修改评论","community.me":"我","community.edited":"已编辑","community.not_purchased":"请先购买/获取指标才能评论","community.cannot_comment_own":"不能评论自己的指标","community.already_commented":"您已经评论过此指标","community.noComments":"暂无评论","community.yourRating":"您的评分","community.commentPlaceholder":"分享您的使用体验...","community.submitComment":"提交评论","community.pleaseRate":"请先选择评分","community.loadMore":"加载更多","community.justNow":"刚刚","community.minutesAgo":"分钟前","community.hoursAgo":"小时前","community.daysAgo":"天前","community.noPurchases":"暂无购买记录","community.purchasedFrom":"卖家","community.purchaseTime":"购买时间","community.admin.reviewTab":"审核管理","community.admin.pending":"待审核","community.admin.approved":"已通过","community.admin.rejected":"已拒绝","community.admin.noItems":"暂无记录","community.admin.noDescription":"无描述","community.admin.viewCode":"查看代码","community.admin.note":"审核备注","community.admin.approve":"通过","community.admin.reject":"拒绝","community.admin.unpublish":"下架","community.admin.delete":"删除","community.admin.deleteConfirm":"确定要删除此指标吗?此操作不可撤销。","community.admin.unpublishConfirm":"确定要下架此指标吗?","community.admin.unpublishHint":"下架后该指标将不再在市场显示","community.admin.confirm":"确定","community.admin.cancel":"取消","community.admin.approveTitle":"通过审核","community.admin.rejectTitle":"拒绝审核","community.admin.noteLabel":"审核备注(可选)","community.admin.notePlaceholder":"请输入审核备注...","community.admin.loadFailed":"加载失败","community.admin.reviewSuccess":"审核成功","community.admin.reviewFailed":"审核失败","community.admin.unpublishSuccess":"下架成功","community.admin.unpublishFailed":"下架失败","community.admin.deleteSuccess":"删除成功","community.admin.deleteFailed":"删除失败","fastAnalysis.aiAnalysis":"AI 智能分析","fastAnalysis.analyzing":"AI 正在分析中...","fastAnalysis.pleaseWait":"请稍候,正在获取实时数据并生成专业报告","fastAnalysis.error":"分析失败","fastAnalysis.retry":"重试","fastAnalysis.selectSymbol":"选择标的开始分析","fastAnalysis.selectHint":"从左侧自选列表选择或添加新标的","fastAnalysis.confidence":"置信度","fastAnalysis.currentPrice":"当前价格","fastAnalysis.entryPrice":"建议入场","fastAnalysis.stopLoss":"止损价","fastAnalysis.takeProfit":"止盈目标","fastAnalysis.stopLossHint":"基于2倍ATR和支撑位计算","fastAnalysis.takeProfitHint":"基于3倍ATR和阻力位计算","fastAnalysis.atrBased":"基于ATR波动率","fastAnalysis.riskReward":"风险回报比","fastAnalysis.technical":"技术面","fastAnalysis.fundamental":"基本面","fastAnalysis.sentiment":"情绪面","fastAnalysis.overall":"综合评分","fastAnalysis.keyReasons":"核心理由","fastAnalysis.risks":"风险提示","fastAnalysis.indicators":"技术指标","fastAnalysis.maTrend":"均线趋势","fastAnalysis.support":"支撑位","fastAnalysis.resistance":"阻力位","fastAnalysis.volatility":"波动性","fastAnalysis.wasHelpful":"这次分析对您有帮助吗?","fastAnalysis.helpful":"有帮助","fastAnalysis.notHelpful":"需改进","fastAnalysis.feedbackThanks":"感谢您的反馈!","fastAnalysis.feedbackFailed":"反馈提交失败","fastAnalysis.feedbackUnavailable":"反馈功能暂不可用,请重新分析后重试","fastAnalysis.analysisTime":"分析耗时","fastAnalysis.startAnalysis":"开始分析","fastAnalysis.history":"历史记录","fastAnalysis.systemTitle":"QUANTDINGER AI","fastAnalysis.systemOnline":"系统在线","fastAnalysis.version":"快速版","fastAnalysis.preparing":"准备中...","fastAnalysis.step1":"获取实时数据","fastAnalysis.step2":"计算技术指标","fastAnalysis.step3":"AI深度分析","fastAnalysis.step4":"生成专业报告","fastAnalysis.technicalAnalysis":"技术面分析","fastAnalysis.fundamentalAnalysis":"基本面分析","fastAnalysis.sentimentAnalysis":"市场情绪分析","fastAnalysis.signal.bullish":"看涨","fastAnalysis.signal.bearish":"看跌","fastAnalysis.signal.neutral":"中性","fastAnalysis.signal.overbought":"超买","fastAnalysis.signal.oversold":"超卖","fastAnalysis.signal.strong_bullish":"强烈看涨","fastAnalysis.signal.strong_bearish":"强烈看跌","fastAnalysis.trend.uptrend":"上升趋势","fastAnalysis.trend.downtrend":"下降趋势","fastAnalysis.trend.sideways":"横盘整理","fastAnalysis.trend.consolidating":"盘整","fastAnalysis.trend.golden_cross":"金叉","fastAnalysis.trend.death_cross":"死叉","fastAnalysis.trend.strong_uptrend":"强势上涨","fastAnalysis.trend.strong_downtrend":"强势下跌","fastAnalysis.volatilityLevel.high":"高","fastAnalysis.volatilityLevel.medium":"中","fastAnalysis.volatilityLevel.low":"低","fastAnalysis.volatilityLevel.unknown":"未知","fastAnalysis.marketOverview":"市场概览","fastAnalysis.selectTip":"选择自选列表中的标的,开始 AI 智能分析","fastAnalysis.analysisInProgress":"该标的当前有分析正在进行,请稍候再试(请勿重复点击)。","fastAnalysis.analysisInProgressTitle":"分析进行中","fastAnalysis.insufficientCredits":"积分不足","fastAnalysis.insufficientCreditsDetail":"积分不足:需要 {required},当前 {current},还差 {shortage}。","fastAnalysis.analysisCompleteWithCredits":"分析完成,剩余积分:{remaining}","fastAnalysis.consensusTitle":"多周期客观共识","fastAnalysis.consensusDecision":"共识方向","fastAnalysis.consensusScore":"综合评分","fastAnalysis.consensusAgreement":"周期一致度","aiQuant.title":"AI 量化","aiQuant.strategyList":"策略列表","aiQuant.create":"创建","aiQuant.edit":"编辑","aiQuant.delete":"删除","aiQuant.start":"启动","aiQuant.stop":"停止","aiQuant.analyze":"立即分析","aiQuant.noStrategy":"暂无策略,点击创建开始","aiQuant.selectStrategy":"请从左侧选择一个策略","aiQuant.createFirst":"创建第一个策略","aiQuant.createStrategy":"创建策略","aiQuant.editStrategy":"编辑策略","aiQuant.confirmDelete":"确定要删除此策略吗?","aiQuant.latestAnalysis":"最新分析结果","aiQuant.analysisHistory":"分析历史","aiQuant.decision":"决策","aiQuant.confidence":"置信度","aiQuant.currentPrice":"当前价格","aiQuant.entryPrice":"建议入场","aiQuant.stopLoss":"止损价","aiQuant.takeProfit":"止盈价","aiQuant.reason":"理由","aiQuant.analyzedAt":"分析时间","aiQuant.tradeSettings":"交易设置","aiQuant.minutes":"分钟","aiQuant.hour":"小时","aiQuant.hours":"小时","aiQuant.stats.totalStrategies":"策略总数","aiQuant.stats.runningStrategies":"运行中","aiQuant.stats.totalAnalyses":"分析次数","aiQuant.stats.totalPnl":"总盈亏","aiQuant.status.running":"运行中","aiQuant.status.stopped":"已停止","aiQuant.status.paused":"已暂停","aiQuant.executionMode.signal":"仅信号","aiQuant.executionMode.live":"实盘交易","aiQuant.marketType.spot":"现货","aiQuant.marketType.futures":"合约","aiQuant.field.strategyName":"策略名称","aiQuant.field.market":"市场","aiQuant.field.symbol":"交易对","aiQuant.field.marketType":"市场类型","aiQuant.field.aiModel":"AI 模型","aiQuant.field.interval":"分析间隔","aiQuant.field.aiPrompt":"AI 提示词","aiQuant.field.executionMode":"执行模式","aiQuant.field.positionSize":"仓位大小","aiQuant.field.stopLoss":"止损比例","aiQuant.field.takeProfit":"止盈比例","aiQuant.field.totalAnalyses":"分析次数","aiQuant.field.totalTrades":"交易次数","aiQuant.field.totalPnl":"总盈亏","aiQuant.placeholder.strategyName":"请输入策略名称","aiQuant.placeholder.market":"请选择市场","aiQuant.placeholder.symbol":"例如: BTC/USDT","aiQuant.placeholder.aiModel":"默认使用系统配置","aiQuant.placeholder.aiPrompt":"输入您的交易策略提示词,例如:当RSI低于30时考虑买入...","aiQuant.validation.strategyName":"请输入策略名称","aiQuant.validation.market":"请选择市场","aiQuant.validation.symbol":"请输入交易对","aiQuant.table.decision":"决策","aiQuant.table.confidence":"置信度","aiQuant.table.entryPrice":"入场价","aiQuant.table.stopLoss":"止损价","aiQuant.table.takeProfit":"止盈价","aiQuant.table.time":"时间","aiQuant.msg.createSuccess":"策略创建成功","aiQuant.msg.updateSuccess":"策略更新成功","aiQuant.msg.deleteSuccess":"策略删除成功","aiQuant.msg.startSuccess":"策略已启动","aiQuant.msg.stopSuccess":"策略已停止","aiQuant.msg.analyzeSuccess":"分析完成","aiQuant.field.initialCapital":"投入资金","aiQuant.field.leverage":"杠杆倍数","aiQuant.field.tradeDirection":"交易方向","aiQuant.field.trailingStop":"移动止损","aiQuant.field.trailingStopPct":"移动止损比例","aiQuant.direction.long":"做多","aiQuant.direction.short":"做空","aiQuant.direction.both":"双向","aiQuant.riskControl":"风控设置","aiQuant.aiSettings":"AI设置","aiQuant.systemDefault":"系统默认","aiQuant.placeholder.selectSymbol":"从自选列表选择交易对","aiQuant.hint.symbolFromWatchlist":"从您的自选列表中选择,系统自动识别市场类型","aiQuant.hint.spotLeverageFixed":"现货市场杠杆固定为1x","aiQuant.hint.stopLossEnforced":"强制止损,AI不可修改","aiQuant.hint.takeProfitEnforced":"强制止盈,AI不可修改","aiQuant.hint.aiPromptOnly":"AI仅根据提示词判断方向,不会修改您设置的风控参数","aiQuant.aiLimitWarning":"AI权限限制","aiQuant.aiLimitDescription":"AI只能判断交易方向(买入/卖出/持有),杠杆倍数、下单金额、止盈止损等风控参数由您完全控制,AI无法修改。","aiQuant.userStopLoss":"您的止损","aiQuant.userTakeProfit":"您的止盈","aiQuant.userLeverage":"您的杠杆","aiQuant.validation.initialCapital":"请输入投入资金","aiQuant.table.currentPrice":"当前价格","aiQuant.field.promptTemplate":"策略模板","aiQuant.placeholder.selectTemplate":"选择预设策略模板","aiQuant.template.default":"📊 综合分析(推荐)","aiQuant.template.trend":"📈 趋势跟踪","aiQuant.template.swing":"🔄 波段交易","aiQuant.template.news":"📰 新闻驱动","aiQuant.template.custom":"✏️ 自定义","aiQuant.hint.dataProvided":"系统自动提供:实时价格、技术指标(RSI/MACD/均线)、最近新闻、宏观数据。AI将基于这些数据和您的提示词判断方向。","aiQuant.hint.liveWarning":"实盘模式将使用真实资金交易,请确保已配置交易所API并充分了解风险!","trading-assistant.liveDisclaimer.title":"实盘交易免责声明","trading-assistant.liveDisclaimer.content":"实盘交易存在较高风险,可能导致部分或全部资金损失。平台不保证收益、不承诺盈利。你需自行评估风险并对交易结果承担全部责任。","trading-assistant.liveDisclaimer.agree":"我已阅读并理解上述免责声明,仍选择开启实盘交易","trading-assistant.liveDisclaimer.required":"开启实盘前请先勾选免责声明确认","trading-assistant.liveDisclaimer.blockTitle":"请先确认免责声明","trading-assistant.liveDisclaimer.blockDesc":"勾选免责声明后才可继续配置实盘连接与下单参数。","menu.billing":"会员充值","billing.title":"开通会员 / 充值积分","billing.desc":"选择适合你的会员套餐,开通后会赠送积分。","billing.snapshot.credits":"当前积分","billing.snapshot.vip":"VIP 状态","billing.snapshot.notVip":"非VIP","billing.snapshot.expires":"到期时间","billing.vipRule.title":"VIP 权益说明","billing.vipRule.desc":"VIP 仅拥有一个特殊权限:可免费使用「VIP免费指标」。其它付费功能/指标仍会正常扣积分。","billing.plan.monthly":"包月会员","billing.plan.yearly":"包年会员","billing.plan.lifetime":"永久会员","billing.perMonth":"月","billing.perYear":"年","billing.once":"一次性","billing.credits":"积分","billing.lifetimeMonthly":"每月赠送","billing.buyNow":"立即购买","billing.purchaseSuccess":"购买成功","billing.purchaseFailed":"购买失败","billing.usdt.title":"USDT 扫码支付","billing.usdt.hintTitle":"请使用钱包扫码并完成转账","billing.usdt.hintDesc":"请确保网络与金额正确(当前仅支持 TRC20)。支付到账后系统会自动开通会员并发放积分。","billing.usdt.chain":"网络","billing.usdt.amount":"金额","billing.usdt.address":"收款地址","billing.usdt.copyAddress":"复制地址","billing.usdt.copyAmount":"复制金额","billing.usdt.refresh":"刷新状态","billing.usdt.expires":"过期时间","billing.usdt.paidSuccess":"支付确认成功,已开通会员","billing.usdt.status.pending":"等待支付","billing.usdt.status.paid":"已检测到账","billing.usdt.status.confirmed":"已确认","billing.usdt.status.expired":"已过期","billing.usdt.status.cancelled":"已取消","billing.usdt.status.failed":"失败","billing.usdt.expiredHint":"订单已过期。如您已完成付款但未到账,请联系客服处理(附订单截图和 TxHash)。","billing.usdt.confirmedHint":"支付已确认,会员已激活!感谢您的购买。","community.vipFree":"VIP免费","dashboard.indicator.publish.vipFree":"VIP免费","dashboard.indicator.publish.vipFreeHint":"开启后:VIP用户可免费使用该指标(非VIP仍需购买)。","quickTrade.title":"闪电交易","quickTrade.selectSymbol":"选择交易对","quickTrade.exchange":"交易所","quickTrade.selectExchange":"选择交易所账户","quickTrade.cryptoOnly":"仅支持加密货币","quickTrade.noExchange":"暂无加密交易所账户,请先在个人中心 → 交易所配置中添加","quickTrade.available":"可用余额","quickTrade.long":"做多","quickTrade.short":"做空","quickTrade.market":"市价","quickTrade.limit":"限价","quickTrade.limitPrice":"限价价格","quickTrade.enterPrice":"输入价格","quickTrade.amount":"下单金额","quickTrade.enterAmount":"输入金额","quickTrade.leverage":"杠杆倍数","quickTrade.tpsl":"止盈/止损价格 (可选)","quickTrade.tp":"止盈价格","quickTrade.sl":"止损价格","quickTrade.tpPlaceholder":"输入止盈价格","quickTrade.slPlaceholder":"输入止损价格","quickTrade.optional":"可选","quickTrade.buyLong":"买入/做多","quickTrade.sellShort":"卖出/做空","quickTrade.currentPosition":"当前持仓","quickTrade.side":"方向","quickTrade.posSize":"持仓数量","quickTrade.entryPrice":"开仓价格","quickTrade.markPrice":"标记价格","quickTrade.unrealizedPnl":"未实现盈亏","quickTrade.closePosition":"一键平仓","quickTrade.noPosition":"暂无持仓","quickTrade.noPositionHint":"当前交易对暂无持仓","quickTrade.recentTrades":"最近交易","quickTrade.orderSuccess":"下单成功!","quickTrade.orderFailed":"下单失败","quickTrade.positionClosed":"平仓成功!","quickTrade.openPanel":"闪电交易","quickTrade.tradeNow":"立即交易","adminOrders.tabTitle":"订单列表","adminOrders.totalOrders":"总订单数","adminOrders.paidOrders":"已付款","adminOrders.pendingOrders":"待付款","adminOrders.totalRevenue":"总收入","adminOrders.filterAll":"全部状态","adminOrders.filterPending":"待付款","adminOrders.filterPaid":"已付款","adminOrders.filterConfirmed":"已确认","adminOrders.filterExpired":"已过期","adminOrders.searchPlaceholder":"搜索用户名/邮箱","adminOrders.colUser":"用户","adminOrders.colType":"类型","adminOrders.colPlan":"套餐","adminOrders.colAmount":"金额","adminOrders.colStatus":"状态","adminOrders.colChain":"链","adminOrders.colAddress":"收款地址","adminOrders.colTxHash":"交易哈希","adminOrders.colCreatedAt":"下单时间","adminOrders.lifetime":"永久","adminOrders.yearly":"年付","adminOrders.monthly":"月付","adminOrders.statusPaid":"已付款","adminOrders.statusConfirmed":"已确认","adminOrders.statusPending":"待付款","adminOrders.statusExpired":"已过期","adminOrders.statusCancelled":"已取消","adminOrders.statusFailed":"失败","adminAiStats.tabTitle":"AI 分析记录","adminAiStats.totalAnalyses":"总分析次数","adminAiStats.activeUsers":"活跃用户","adminAiStats.uniqueSymbols":"分析品种数","adminAiStats.accuracy":"正确 / 已验证","adminAiStats.userStatsTitle":"用户使用统计","adminAiStats.recentTitle":"最近分析记录","adminAiStats.searchPlaceholder":"搜索用户名","adminAiStats.colUser":"用户","adminAiStats.colAnalysisCount":"分析次数","adminAiStats.colSymbols":"品种数","adminAiStats.colMarkets":"市场数","adminAiStats.colAccuracy":"正确 / 错误","adminAiStats.colFeedback":"用户反馈","adminAiStats.colLastAnalysis":"最近分析","adminAiStats.colMarket":"市场","adminAiStats.colSymbol":"品种","adminAiStats.colModel":"模型","adminAiStats.colStatus":"状态","adminAiStats.colCreatedAt":"时间","adminAiStats.helpful":"有用","adminAiStats.notHelpful":"没用","polymarket.title":"预测市场","polymarket.subtitle":"基于Polymarket预测市场数据的AI分析和交易机会推荐","polymarket.filter.category":"选择类别","polymarket.filter.sortBy":"排序方式","polymarket.sort.volume":"24小时交易量","polymarket.sort.aiScore":"AI机会评分","polymarket.sort.highProbability":"高概率机会","polymarket.sort.highReturn":"高回报比机会","polymarket.search.placeholder":"搜索预测市场...","polymarket.category.all":"全部","polymarket.category.crypto":"加密货币","polymarket.category.politics":"政治","polymarket.category.economics":"经济","polymarket.category.sports":"体育","polymarket.category.tech":"科技","polymarket.category.finance":"金融","polymarket.category.geopolitics":"地缘政治","polymarket.category.culture":"文化","polymarket.category.climate":"气候","polymarket.category.entertainment":"娱乐","polymarket.market.currentProbability":"当前概率","polymarket.ai.predicted":"AI预测概率","polymarket.ai.marketProbability":"市场概率","polymarket.ai.recommendation":"AI推荐","polymarket.ai.confidence":"置信度","polymarket.ai.opportunityScore":"机会评分","polymarket.ai.reasoning":"分析理由","polymarket.ai.keyFactors":"关键因素","polymarket.recommendation.YES":"YES(看涨)","polymarket.recommendation.NO":"NO(看跌)","polymarket.recommendation.HOLD":"HOLD(中性)","polymarket.status.active":"活跃","polymarket.status.closed":"已关闭","polymarket.status.resolved":"已结算","polymarket.action.viewDetail":"查看详情","polymarket.action.viewOnPolymarket":"在Polymarket查看","polymarket.detail.title":"预测市场详情","polymarket.detail.currentProbability":"当前概率","polymarket.detail.volume24h":"24小时交易量","polymarket.detail.liquidity":"流动性","polymarket.detail.aiAnalysis":"AI分析结果","polymarket.detail.assetOpportunities":"相关资产交易机会","polymarket.opportunity.confidence":"置信度","polymarket.opportunity.analyze":"分析资产","polymarket.signal.BUY":"买入","polymarket.signal.SELL":"卖出","polymarket.signal.HOLD":"持有","polymarket.error.loadFailed":"加载市场列表失败","polymarket.error.searchFailed":"搜索失败","polymarket.error.notFound":"未找到市场数据","polymarket.error.loadDetailFailed":"加载详情失败","polymarket.viewOnPolymarket":"在Polymarket查看","polymarket.filter.explanation.title":"筛选依据说明","polymarket.filter.explanation.volume":"按24小时交易量排序,显示最活跃的预测市场。","polymarket.filter.explanation.aiScore":"按AI机会评分排序,综合考虑AI与市场差异、置信度等因素,优先显示高价值机会。","polymarket.filter.explanation.highProbability":"按AI预测概率排序,优先显示AI认为发生概率较高的事件(AI预测概率 > 市场概率 + 10%)。","polymarket.filter.explanation.highReturn":"按高回报比排序,优先显示AI与市场差异大且置信度高的机会(差异 × 置信度),适合寻找被低估的预测。","polymarket.deepAnalysis.prompt":"当前显示的是基于规则的简单分析。点击下方按钮进行AI深度分析,获得更准确的预测和建议。","polymarket.deepAnalysis.button":"深度分析","polymarket.deepAnalysis.success":"深度分析完成!消耗积分 {credits},剩余积分 {remaining}","polymarket.deepAnalysis.successFree":"深度分析完成!","polymarket.deepAnalysis.failed":"深度分析失败,请稍后重试","polymarket.deepAnalysis.insufficientCredits":"积分不足!需要 {required} 积分,当前 {current} 积分,缺少 {shortage} 积分","polymarket.error.invalidMarketId":"无效的市场ID","polymarket.analysis.title":"Polymarket预测市场分析","polymarket.analysis.description":"输入Polymarket链接或市场标题,AI将为您分析预测市场的交易机会","polymarket.analysis.startAnalysis":"开始分析","polymarket.analysis.inputHint":"请输入Polymarket市场链接或市场标题","polymarket.analysis.inputPlaceholder":'例如:https://polymarket.com/event/xxx 或 "Bitcoin price above $100k in 2025?"',"polymarket.analysis.inputRequired":"请输入Polymarket链接或市场标题","polymarket.analysis.analyzeButton":"开始分析","polymarket.analysis.analyzing":"正在分析中,请稍候...","polymarket.analysis.success":"分析完成!","polymarket.analysis.failed":"分析失败,请稍后重试","polymarket.analysis.insufficientCredits":"积分不足,请先充值","polymarket.analysis.viewOnPolymarket":"在Polymarket查看","polymarket.analysis.aiAnalysis":"AI分析结果","polymarket.analysis.marketProbability":"市场概率","polymarket.analysis.aiPredictedProbability":"AI预测概率","polymarket.analysis.divergence":"差异","polymarket.analysis.recommendation":"推荐","polymarket.analysis.recommendationYes":"YES(看涨)","polymarket.analysis.recommendationNo":"NO(看跌)","polymarket.analysis.recommendationHold":"HOLD(中性)","polymarket.analysis.confidenceScore":"置信度","polymarket.analysis.opportunityScore":"机会评分","polymarket.analysis.reasoning":"分析理由","polymarket.analysis.keyFactors":"关键因素","polymarket.analysis.creditsCharged":"本次分析消耗积分:{credits}","polymarket.analysis.remainingCredits":"剩余积分:{credits}","polymarket.analysis.newAnalysis":"新分析","polymarket.analysis.tabAnalyze":"分析","polymarket.analysis.tabHistory":"历史记录","polymarket.analysis.historyMarket":"市场","polymarket.analysis.historyRecommendation":"推荐","polymarket.analysis.historyOpportunityScore":"机会评分","polymarket.analysis.historyCreatedAt":"分析时间","polymarket.analysis.historyTotal":"共 {total} 条记录","polymarket.analysis.loadHistoryFailed":"加载历史记录失败","aiAssetAnalysis.tabs.polymarket":"预测市场"},f=(0,s.A)((0,s.A)({},y),h)}}]); \ No newline at end of file diff --git a/frontend/dist/js/lang-zh-CN.d3e5651e.js b/frontend/dist/js/lang-zh-CN.d3e5651e.js deleted file mode 100644 index 01bd217..0000000 --- a/frontend/dist/js/lang-zh-CN.d3e5651e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[644],{13167:function(a,t,e){e.d(t,{default:function(){return f}});var s=e(57888),i=e(48931),r=e(85505),n={today:"今天",now:"此刻",backToToday:"返回今天",ok:"确定",timeSelect:"选择时间",dateSelect:"选择日期",weekSelect:"选择周",clear:"清除",month:"月",year:"年",previousMonth:"上个月 (翻页上键)",nextMonth:"下个月 (翻页下键)",monthSelect:"选择月份",yearSelect:"选择年份",decadeSelect:"选择年代",yearFormat:"YYYY年",dayFormat:"D日",dateFormat:"YYYY年M月D日",dateTimeFormat:"YYYY年M月D日 HH时mm分ss秒",previousYear:"上一年 (Control键加左方向键)",nextYear:"下一年 (Control键加右方向键)",previousDecade:"上一年代",nextDecade:"下一年代",previousCentury:"上一世纪",nextCentury:"下一世纪"},o={placeholder:"请选择时间"},d=o,l={lang:(0,r.A)({placeholder:"请选择日期",rangePlaceholder:["开始日期","结束日期"]},n),timePickerLocale:(0,r.A)({},d)};l.lang.ok="确 定";var c=l,m=c,g={locale:"zh-cn",Pagination:i.A,DatePicker:c,TimePicker:d,Calendar:m,global:{placeholder:"请选择"},Table:{filterTitle:"筛选",filterConfirm:"确定",filterReset:"重置",selectAll:"全选当页",selectInvert:"反选当页",sortTitle:"排序",expand:"展开行",collapse:"关闭行"},Modal:{okText:"确定",cancelText:"取消",justOkText:"知道了"},Popconfirm:{cancelText:"取消",okText:"确定"},Transfer:{searchPlaceholder:"请输入搜索内容",itemUnit:"项",itemsUnit:"项"},Upload:{uploading:"文件上传中",removeFile:"删除文件",uploadError:"上传错误",previewFile:"预览文件",downloadFile:"下载文件"},Empty:{description:"暂无数据"},Icon:{icon:"图标"},Text:{edit:"编辑",copy:"复制",copied:"复制成功",expand:"展开"},PageHeader:{back:"返回"}},u=g,p=e(52648),b=e.n(p),y={antLocale:u,momentName:"zh-cn",momentLocale:b()},h={"common.confirm":"确定","common.cancel":"取消","common.save":"保存","common.delete":"删除","common.edit":"编辑","common.add":"添加","common.close":"关闭","common.done":"完成","common.ok":"确定","common.loading":"加载中...","common.noData":"暂无数据",submit:"提交",save:"保存","submit.ok":"提交成功","save.ok":"保存成功","menu.welcome":"欢迎","menu.home":"主页","menu.dashboard":"仪表盘","menu.dashboard.indicator":"指标分析","menu.dashboard.community":"指标市场","menu.dashboard.analysis":"AI 分析","menu.dashboard.aiAssetAnalysis":"AI资产分析","menu.dashboard.aiQuant":"AI 量化","menu.dashboard.tradingAssistant":"交易助手","menu.dashboard.portfolio":"资产监测","menu.dashboard.globalMarket":"全球金融","menu.dashboard.polymarket":"预测市场","menu.settings":"系统设置","menu.dashboard.aiTradingAssistant":"AI交易助手","menu.dashboard.signalRobot":"信号机器人","menu.dashboard.monitor":"监控页","menu.dashboard.workplace":"工作台","aiAssetAnalysis.title":"AI资产分析","aiAssetAnalysis.subtitle":"把资产监测、即时分析、定时任务放到一个工作流里,操作更直观、反馈更及时。","aiAssetAnalysis.actions.quickAnalysis":"立即开始分析","aiAssetAnalysis.actions.monitorTasks":"管理监控任务","aiAssetAnalysis.actions.openStandalone":"在独立页面打开","aiAssetAnalysis.quickBar.title":"快捷分析","aiAssetAnalysis.quickBar.placeholder":"从资产池选择标的","aiAssetAnalysis.quickBar.useInQuick":"带入即时分析","aiAssetAnalysis.quickBar.runNow":"一键分析","aiAssetAnalysis.history.title":"最近分析","aiAssetAnalysis.history.empty":"暂无分析记录","aiAssetAnalysis.actions.enterQuick":"进入即时分析","aiAssetAnalysis.actions.enterMonitor":"进入定时任务与资产池","aiAssetAnalysis.flow.poolTitle":"构建资产池","aiAssetAnalysis.flow.poolDesc":"先添加持仓与关注标的,形成统一分析对象池。","aiAssetAnalysis.flow.poolAction":"去管理资产池","aiAssetAnalysis.flow.quickTitle":"即时分析","aiAssetAnalysis.flow.quickDesc":"对任意标的一键发起 AI 分析,快速拿到决策建议。","aiAssetAnalysis.flow.quickAction":"去即时分析","aiAssetAnalysis.flow.autoTitle":"定时监控","aiAssetAnalysis.flow.autoDesc":"配置定时任务自动运行 AI 分析,并推送报告到通知渠道。","aiAssetAnalysis.flow.autoAction":"去配置任务","aiAssetAnalysis.tabs.quick":"即时分析","aiAssetAnalysis.tabs.monitor":"资产池与定时任务","aiAssetAnalysis.tabLead.quick":"适合临时判断:选择标的后立刻分析并查看历史结果。","aiAssetAnalysis.tabLead.monitor":"适合持续跟踪:维护持仓、设置监控范围与执行频率。","aiAssetAnalysis.stats.totalAnalyses":"分析总数","aiAssetAnalysis.stats.accuracy":"准确率","aiAssetAnalysis.stats.avgReturn":"平均回报","aiAssetAnalysis.stats.satisfaction":"用户满意度","aiAssetAnalysis.stats.decisions":"决策分布","aiAssetAnalysis.opportunities.title":"AI 交易机会雷达","aiAssetAnalysis.opportunities.empty":"暂无交易机会","aiAssetAnalysis.opportunities.analyze":"分析","aiAssetAnalysis.opportunities.updateHint":"每小时更新","aiAssetAnalysis.opportunities.signal.overbought":"超买","aiAssetAnalysis.opportunities.signal.oversold":"超卖","aiAssetAnalysis.opportunities.signal.bullish_momentum":"看涨","aiAssetAnalysis.opportunities.signal.bearish_momentum":"看跌","aiAssetAnalysis.opportunities.market.Crypto":"🪙 加密","aiAssetAnalysis.opportunities.market.USStock":"📈 美股","aiAssetAnalysis.opportunities.market.Forex":"💱 外汇","aiAssetAnalysis.opportunities.market.PredictionMarket":"🎯 预测市场","aiAssetAnalysis.opportunities.reason.crypto.overbought":"24h涨幅{change}%,7日涨幅{change7d}%,短期超买风险","aiAssetAnalysis.opportunities.reason.crypto.bullish_momentum":"24h涨幅{change}%,上涨动能强劲","aiAssetAnalysis.opportunities.reason.crypto.oversold":"24h跌幅{change}%,可能超卖反弹","aiAssetAnalysis.opportunities.reason.crypto.bearish_momentum":"24h跌幅{change}%,下跌趋势明显","aiAssetAnalysis.opportunities.reason.usstock.overbought":"日涨幅{change}%,短期涨幅较大,注意回调风险","aiAssetAnalysis.opportunities.reason.usstock.bullish_momentum":"日涨幅{change}%,上涨动能强劲","aiAssetAnalysis.opportunities.reason.usstock.oversold":"日跌幅{change}%,可能超卖反弹","aiAssetAnalysis.opportunities.reason.usstock.bearish_momentum":"日跌幅{change}%,下跌趋势明显","aiAssetAnalysis.opportunities.reason.forex.overbought":"日涨幅{change}%,汇率波动剧烈,注意回调","aiAssetAnalysis.opportunities.reason.forex.bullish_momentum":"日涨幅{change}%,上涨动能较强","aiAssetAnalysis.opportunities.reason.forex.oversold":"日跌幅{change}%,汇率波动剧烈,可能反弹","aiAssetAnalysis.opportunities.reason.forex.bearish_momentum":"日跌幅{change}%,下跌趋势明显","aiAssetAnalysis.checkup.title":"组合体检","aiAssetAnalysis.checkup.btn":"组合体检","aiAssetAnalysis.checkup.desc":"一键对您资产池中的所有持仓进行 AI 分析,快速了解每个标的的当前状态和操作建议。","aiAssetAnalysis.checkup.start":"开始体检","aiAssetAnalysis.checkup.progress":"正在分析 {current}/{total}...","aiAssetAnalysis.checkup.noPositions":"资产池中暂无持仓,请先添加资产。","aiAssetAnalysis.checkup.complete":"体检完成","aiAssetAnalysis.checkup.failed":"分析失败","aiAssetAnalysis.checkup.rerun":"重新体检","aiAssetAnalysis.search.hint":"搜索","aiAssetAnalysis.search.placeholder":"搜索任意标的... (Ctrl+K)","aiAssetAnalysis.search.noResults":"未找到匹配结果,请尝试其他关键词","menu.form":"表单页","menu.form.basic-form":"基础表单","menu.form.step-form":"分步表单","menu.form.step-form.info":"分步表单(填写转账信息)","menu.form.step-form.confirm":"分步表单(确认转账信息)","menu.form.step-form.result":"分步表单(完成)","menu.form.advanced-form":"高级表单","menu.list":"列表页","menu.list.table-list":"查询表格","menu.list.basic-list":"标准列表","menu.list.card-list":"卡片列表","menu.list.search-list":"搜索列表","menu.list.search-list.articles":"搜索列表(文章)","menu.list.search-list.projects":"搜索列表(项目)","menu.list.search-list.applications":"搜索列表(应用)","menu.profile":"详情页","menu.profile.basic":"基础详情页","menu.profile.advanced":"高级详情页","menu.result":"结果页","menu.result.success":"成功页","menu.result.fail":"失败页","menu.exception":"异常页","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"触发错误","menu.account":"个人页","menu.account.center":"个人中心","menu.account.settings":"个人设置","menu.account.trigger":"触发报错","menu.account.logout":"退出登录","menu.wallet":"我的钱包","menu.docs":"文档中心","menu.docs.detail":"文档详情","menu.header.refreshPage":"刷新页面","menu.invite.friends":"邀请好友","app.setting.pagestyle":"整体风格设置","app.setting.pagestyle.light":"亮色菜单风格","app.setting.pagestyle.dark":"暗色菜单风格","app.setting.pagestyle.realdark":"暗黑模式","app.setting.themecolor":"主题色","app.setting.navigationmode":"导航模式","app.setting.sidemenu.nav":"侧边栏导航","app.setting.topmenu.nav":"顶部栏导航","app.setting.content-width":"内容区域宽度","app.setting.content-width.tooltip":"该设定仅 [顶部栏导航] 时有效","app.setting.content-width.fixed":"固定","app.setting.content-width.fluid":"流式","app.setting.fixedheader":"固定 Header","app.setting.fixedheader.tooltip":"固定 Header 时可配置","app.setting.autoHideHeader":"下滑时隐藏 Header","app.setting.fixedsidebar":"固定侧边菜单","app.setting.sidemenu":"侧边菜单布局","app.setting.topmenu":"顶部菜单布局","app.setting.othersettings":"其他设置","app.setting.weakmode":"色弱模式","app.setting.multitab":"多页签模式","app.setting.copy":"拷贝设置","app.setting.loading":"加载主题中","app.setting.copyinfo":"拷贝设置成功 src/config/defaultSettings.js","app.setting.copy.success":"复制完毕","app.setting.copy.fail":"复制失败","app.setting.theme.switching":"正在切换主题!","app.setting.production.hint":"配置栏只在开发环境用于预览,生产环境不会展现,请拷贝后手动修改配置文件","app.setting.themecolor.daybreak":"拂晓蓝(默认)","app.setting.themecolor.dust":"薄暮","app.setting.themecolor.volcano":"火山","app.setting.themecolor.sunset":"日暮","app.setting.themecolor.cyan":"明青","app.setting.themecolor.green":"极光绿","app.setting.themecolor.geekblue":"极客蓝","app.setting.themecolor.purple":"酱紫","app.setting.tooltip":"页面设置","notice.title":"通知中心","notice.empty":"暂无通知","notice.markAllRead":"全部已读","notice.clear":"清空通知","notice.close":"关闭","notice.justNow":"刚刚","notice.minutesAgo":"分钟前","notice.hoursAgo":"小时前","notice.daysAgo":"天前","notice.detailInfo":"详细信息","notice.aiDecision":"AI决策","notice.confidence":"置信度","notice.reasoning":"分析理由","notice.symbol":"标的代码","notice.currentPrice":"当前价格","notice.triggerPrice":"触发价格","notice.action":"操作","notice.quantity":"数量","notice.viewPortfolio":"查看持仓","notice.type.aiMonitor":"AI监控","notice.type.priceAlert":"价格提醒","notice.type.signal":"交易信号","notice.type.buy":"买入信号","notice.type.sell":"卖出信号","notice.type.hold":"持有建议","notice.type.trade":"交易执行","notice.type.notification":"系统通知","user.login.userName":"用户名","user.login.password":"密码","user.login.username.placeholder":"账户: admin","user.login.password.placeholder":"密码: admin or ant.design","user.login.message-invalid-credentials":"登录失败,请检查邮箱和验证码","user.login.message-invalid-verification-code":"验证码错误","user.login.tab-login-credentials":"账户密码登录","user.login.tab-login-email":"邮箱登录","user.login.tab-login-mobile":"手机号登录","user.login.captcha.placeholder":"请输入图形验证码","user.login.mobile.placeholder":"手机号","user.login.mobile.verification-code.placeholder":"验证码","user.login.email.placeholder":"请输入邮箱地址","user.login.email.verification-code.placeholder":"请输入验证码","user.login.email.sending":"验证码发送中...","user.login.email.send-success-title":"提示","user.login.email.send-success":"验证码发送成功,请查收邮件","user.login.sms.send-success":"验证码发送成功,请查收短信","user.login.remember-me":"自动登录","user.login.forgot-password":"忘记密码","user.login.sign-in-with":"其他登录方式","user.login.signup":"注册账户","user.login.login":"登录","user.register.register":"注册","user.register.email.placeholder":"邮箱","user.register.password.placeholder":"请至少输入 6 个字符。请不要使用容易被猜到的密码。","user.register.password.popover-message":"请至少输入 6 个字符。请不要使用容易被猜到的密码。","user.register.confirm-password.placeholder":"确认密码","user.register.get-verification-code":"获取验证码","user.register.sign-in":"使用已有账户登录","user.register-result.msg":"你的账户:{email} 注册成功","user.register-result.activation-email":"激活邮件已发送到你的邮箱中,邮件有效期为24小时。请及时登录邮箱,点击邮件中的链接激活账户。","user.register-result.back-home":"返回首页","user.register-result.view-mailbox":"查看邮箱","user.email.required":"请输入邮箱地址!","user.email.wrong-format":"邮箱地址格式错误!","user.userName.required":"请输入账户名或邮箱地址","user.password.required":"请输入密码!","user.password.twice.msg":"两次输入的密码不匹配!","user.password.strength.msg":"密码强度不够 ","user.password.strength.strong":"强度:强","user.password.strength.medium":"强度:中","user.password.strength.low":"强度:低","user.password.strength.short":"强度:太短","user.confirm-password.required":"请确认密码!","user.phone-number.required":"请输入正确的手机号","user.phone-number.wrong-format":"手机号格式错误!","user.verification-code.required":"请输入验证码!","user.captcha.required":"请输入图形验证码!","user.login.infos":"QuantDinger 是一个 AI 多智能体股票分析辅助工具,不具备证券投资咨询资质。平台中的所有分析结果、评分、参考意见均由 AI 基于历史数据自动生成,仅供学习、研究与技术交流使用,不构成任何投资建议或决策依据。股票投资存在市场风险、流动性风险、政策风险等多种风险,可能导致本金损失。用户应基于自身风险承受能力独立决策,使用本工具产生的任何投资行为及其后果由用户自行承担。市场有风险,投资需谨慎。","user.login.tab-login-web3":"Web3 登录","user.login.web3.tip":"使用钱包进行签名登录","user.login.web3.connect":"连接钱包并登录","user.login.web3.no-wallet":"未检测到钱包","user.login.web3.no-address":"未获取到钱包地址","user.login.web3.nonce-failed":"获取随机数失败","user.login.web3.verify-failed":"签名验证失败","user.login.web3.success":"登录成功","user.login.web3.failed":"钱包登录失败","nav.no_wallet":"未检测到钱包","nav.copy":"复制","nav.copy_success":"复制成功","user.login.oauth.google":"使用 Google 登录","user.login.oauth.github":"使用 GitHub 登录","user.login.oauth.loading":"正在跳转到授权页面...","user.login.oauth.failed":"OAuth 登录失败","user.login.oauth.get-url-failed":"获取授权链接失败","user.login.subtitle":"驱动的全球市场量化洞察","user.login.legal.title":"法律免责声明","user.login.legal.view":"查看法律免责声明","user.login.legal.collapse":"收起法律免责声明","user.login.legal.agree":"我已阅读并同意法律免责声明","user.login.legal.required":"请先阅读并勾选法律免责声明","user.login.legal.content":"QuantDinger 是一个 AI 多智能体股票分析辅助工具,不具备证券投资咨询资质。平台中的所有分析结果、评分、参考意见均由 AI 基于历史数据自动生成,仅供学习、研究与技术交流使用,不构成任何投资建议或决策依据。股票投资存在市场风险、流动性风险、政策风险等多种风险,可能导致本金损失。用户应基于自身风险承受能力独立决策,使用本工具产生的任何投资行为及其后果由用户自行承担。市场有风险,投资需谨慎。","user.login.privacy.title":"用户隐私条款","user.login.privacy.view":"查看用户隐私条款","user.login.privacy.collapse":"收起用户隐私条款","user.login.privacy.content":"我们重视您的隐私与数据保护。1) 收集范围:仅收集实现功能所需的信息(如邮箱、手机号、区号、Web3 钱包地址)以及必要的日志与设备信息。2) 使用目的:用于账户登录与安全校验、服务功能提供、问题排查与合规要求。3) 存储与安全:数据加密存储,并采取必要的权限与访问控制措施,尽力防止未经授权的访问、披露或丢失。4) 共享与第三方:除法律法规要求或履行服务所必需外,不会与第三方共享您的个人信息;若涉及第三方服务(如钱包、短信服务商),仅在实现功能所需的最小范围内处理。5) Cookies/本地存储:用于登录态与必要的会话维持(如令牌、PHPSESSID),您可在浏览器中进行清理或限制。6) 个人权利:您可根据法律法规行使查询、更正、删除、撤回同意等权利。7) 变更与通知:本条款更新后将在页面显著位置提示。继续使用本服务即表示您已阅读并同意更新内容。若您不同意本条款或其中任何更新,请停止使用本服务并联系我们。","user.login.username":"用户名","user.login.usernameRequired":"请输入用户名","user.login.passwordRequired":"请输入密码","user.login.tab":"登录","user.login.submit":"登录","user.login.register":"注册账户","user.login.forgotPassword":"忘记密码?","user.login.orLoginWith":"或使用以下方式登录","user.login.methodPassword":"密码登录","user.login.methodCode":"验证码登录","user.login.email":"邮箱","user.login.emailRequired":"请输入邮箱","user.login.emailInvalid":"邮箱格式不正确","user.login.verificationCode":"验证码","user.login.codeRequired":"请输入验证码","user.login.sendCode":"发送","user.login.codeSent":"验证码已发送","user.login.codeLoginHint":"新用户将自动注册","user.login.welcomeNew":"欢迎!","user.login.accountCreated":"您的账户已创建成功","user.oauth.processing":"正在处理登录...","user.oauth.error.missing_params":"缺少必要参数","user.oauth.error.invalid_state":"无效的状态参数","user.oauth.error.user_creation_failed":"创建用户失败","user.oauth.error.server_error":"服务器错误","user.register.tab":"注册","user.register.title":"创建账户","user.register.email":"邮箱","user.register.emailRequired":"请输入邮箱","user.register.emailInvalid":"邮箱格式不正确","user.register.verificationCode":"验证码","user.register.codeRequired":"请输入验证码","user.register.sendCode":"发送验证码","user.register.codeSent":"验证码已发送","user.register.username":"用户名","user.register.usernameRequired":"请输入用户名","user.register.usernameLength":"用户名需要3-30个字符","user.register.usernamePattern":"以字母开头,只能包含字母、数字和下划线","user.register.password":"密码","user.register.passwordRequired":"请输入密码","user.register.confirmPassword":"确认密码","user.register.confirmPasswordRequired":"请确认密码","user.register.passwordMismatch":"两次输入的密码不一致","user.register.submit":"创建账户","user.register.haveAccount":"已有账户?","user.register.login":"登录","user.register.success":"注册成功","user.register.pleaseLogin":"请使用新账户登录","user.register.pwdMinLength":"至少8个字符","user.register.pwdUppercase":"至少包含一个大写字母","user.register.pwdLowercase":"至少包含一个小写字母","user.register.pwdNumber":"至少包含一个数字","user.resetPassword.title":"重置密码","user.resetPassword.email":"邮箱","user.resetPassword.emailRequired":"请输入邮箱","user.resetPassword.emailInvalid":"邮箱格式不正确","user.resetPassword.verificationCode":"验证码","user.resetPassword.codeRequired":"请输入验证码","user.resetPassword.sendCode":"发送验证码","user.resetPassword.codeSent":"验证码已发送","user.resetPassword.next":"下一步","user.resetPassword.backToLogin":"返回登录","user.resetPassword.resettingFor":"正在为以下邮箱重置密码","user.resetPassword.newPassword":"新密码","user.resetPassword.passwordRequired":"请输入新密码","user.resetPassword.confirmPassword":"确认新密码","user.resetPassword.confirmPasswordRequired":"请确认新密码","user.resetPassword.submit":"重置密码","user.resetPassword.back":"返回","user.resetPassword.successTitle":"密码重置成功","user.resetPassword.successSubtitle":"您现在可以使用新密码登录了","user.resetPassword.goToLogin":"前往登录","user.security.retry":"重试","profile.passwordHintNew":"为了安全,修改密码需要邮箱验证。密码至少8个字符,包含大小写字母和数字。","profile.verificationCode":"验证码","profile.codeRequired":"请输入验证码","profile.codePlaceholder":"输入验证码","profile.sendCode":"发送验证码","profile.codeSent":"验证码已发送","profile.codeWillSendTo":"验证码将发送至","profile.noEmailWarning":"请先在基本信息中设置邮箱","account.basicInfo":"基础信息","account.id":"用户ID","account.username":"用户名","account.nickname":"昵称","account.email":"邮箱","account.mobile":"手机号","account.web3address":"钱包地址","account.pid":"推荐人ID","account.level":"用户等级","account.money":"余额","account.qdtBalance":"QDT 余额","account.score":"积分","account.createtime":"注册时间","account.inviteLink":"邀请链接","account.recharge":"充值","account.rechargeTip":"请使用微信或支付宝扫描下方二维码进行充值","account.qrCodePlaceholder":"二维码占位符(模拟)","account.rechargeAmount":"充值金额","account.enterAmount":"请输入充值金额","account.rechargeHint":"最小充值金额:1 QDT","account.confirmRecharge":"确认充值","account.enterValidAmount":"请输入有效的充值金额","account.rechargeSuccess":"充值成功!已充值 {amount} QDT","account.settings.menuMap.basic":"基本设置","account.settings.menuMap.security":"安全设置","account.settings.menuMap.notification":"新消息通知","account.settings.menuMap.moneyLog":"资金明细","account.moneyLog.empty":"暂无资金明细","account.moneyLog.total":"共 {total} 条记录","account.moneyLog.type.purchase":"购买指标","account.moneyLog.type.recharge":"充值","account.moneyLog.type.refund":"退款","account.moneyLog.type.reward":"奖励","account.moneyLog.type.income":"指标收入","account.moneyLog.type.commission":"平台手续费","wallet.balance":"QDT 余额","wallet.recharge":"充值","wallet.withdraw":"提现","wallet.filter":"筛选","wallet.reset":"重置","wallet.totalRecharge":"累计充值","wallet.totalWithdraw":"累计提现","wallet.totalIncome":"累计收入","wallet.records":"交易记录与资金明细","wallet.tradingRecords":"交易记录","wallet.moneyLog":"资金明细","wallet.rechargeTip":"请使用微信或支付宝扫描下方二维码进行充值","wallet.qrCodePlaceholder":"二维码占位符(模拟)","wallet.rechargeAmount":"充值金额","wallet.enterAmount":"请输入充值金额","wallet.rechargeHint":"最小充值金额:1 QDT","wallet.confirmRecharge":"确认充值","wallet.enterValidAmount":"请输入有效的充值金额","wallet.rechargeSuccess":"充值成功!已充值 {amount} QDT","wallet.rechargeFailed":"充值失败","wallet.withdrawTip":"请输入提现金额和提现地址","wallet.withdrawAmount":"提现金额","wallet.enterWithdrawAmount":"请输入提现金额","wallet.withdrawHint":"最小提现金额:1 QDT","wallet.withdrawAddress":"提现地址(可选)","wallet.enterWithdrawAddress":"请输入提现地址","wallet.confirmWithdraw":"确认提现","wallet.enterValidWithdrawAmount":"请输入有效的提现金额","wallet.insufficientBalance":"余额不足","wallet.withdrawSuccess":"提现成功!已提现 {amount} QDT","wallet.withdrawFailed":"提现失败","wallet.noTradingRecords":"暂无交易记录","wallet.noMoneyLog":"暂无资金明细","wallet.loadTradingRecordsFailed":"加载交易记录失败","wallet.loadMoneyLogFailed":"加载资金明细失败","wallet.moneyLogTotal":"共 {total} 条记录","wallet.moneyLogTypeTitle":"类型","wallet.moneyLogType.all":"全部类型","wallet.table.time":"时间","wallet.table.type":"类型","wallet.table.price":"价格","wallet.table.amount":"数量","wallet.table.money":"金额","wallet.table.balance":"余额","wallet.table.memo":"备注","wallet.table.value":"价值","wallet.table.profit":"盈亏","wallet.table.commission":"手续费","wallet.table.total":"共 {total} 条记录","wallet.tradeType.buy":"买入","wallet.tradeType.sell":"卖出","wallet.tradeType.liquidation":"强平","wallet.tradeType.openLong":"开多","wallet.tradeType.addLong":"加多","wallet.tradeType.closeLong":"平多","wallet.tradeType.closeLongStop":"止损平多","wallet.tradeType.closeLongProfit":"止盈平多","wallet.tradeType.openShort":"开空","wallet.tradeType.addShort":"加空","wallet.tradeType.closeShort":"平空","wallet.tradeType.closeShortStop":"止损平空","wallet.tradeType.closeShortProfit":"止盈平空","wallet.moneyLogType.purchase":"购买指标","wallet.moneyLogType.recharge":"充值","wallet.moneyLogType.withdraw":"提现","wallet.moneyLogType.refund":"退款","wallet.moneyLogType.reward":"奖励","wallet.moneyLogType.income":"收入","wallet.moneyLogType.commission":"手续费","wallet.web3Address.required":"请先填写Web3钱包地址","wallet.web3Address.requiredDescription":"充值前需要先绑定您的Web3钱包地址,用于接收充值","wallet.web3Address.placeholder":"请输入您的Web3钱包地址(0x开头)","wallet.web3Address.save":"保存钱包地址","wallet.web3Address.saveSuccess":"钱包地址保存成功","wallet.web3Address.saveFailed":"保存钱包地址失败","wallet.web3Address.invalidFormat":"请输入有效的Web3钱包地址(以太坊格式:0x开头42位字符,或TRC20格式:T开头34位字符)","wallet.selectCoin":"选择币种","wallet.selectChain":"选择链","wallet.chain.eth":"ETH(ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"BSC","wallet.targetQdtAmount":"想要兑换的QDT数量(可选)","wallet.targetQdtAmount.placeholder":"请输入想要兑换的QDT数量,当前QDT价格:{price} USDT","wallet.targetQdtAmount.requiredUsdt":"需要充值:{amount} USDT","wallet.rechargeAddress":"充值地址","wallet.copyAddress":"复制","wallet.copySuccess":"复制成功!","wallet.copyFailed":"复制失败,请手动复制","wallet.rechargeAddressHint":"请确保使用{chain}链向此地址充值{coin}","wallet.qdtPrice.loading":"加载中...","wallet.rechargeTip.new":"请选择币种和链,然后扫描下方二维码进行充值","wallet.exchangeRate":"1 QDT ≈ {rate} USDT","wallet.withdrawableAmount":"可提现金额","wallet.totalBalance":"总余额","wallet.insufficientWithdrawable":"可提现金额不足,当前可提现:{amount} QDT","wallet.withdrawAddressRequired":"请输入提现地址","wallet.withdrawAddressHint":"请确保地址正确,提现后无法撤销","wallet.withdrawSubmitSuccess":"提现申请提交成功,请等待审核","menu.footer.contactUs":"联系我们","menu.footer.getSupport":"获取支持","menu.footer.socialAccounts":"社交账户","menu.footer.userAgreement":"用户协议","menu.footer.privacyPolicy":"隐私条例","menu.footer.support":"Support","menu.footer.featureRequest":"Feature request","menu.footer.email":"Email","menu.footer.liveChat":"24/7 live chat","dashboard.analysis.title":"Multi-Dimensional Analysis","dashboard.analysis.subtitle":"AI驱动的综合金融分析平台","dashboard.analysis.selectSymbol":"选择或输入标的代码","dashboard.analysis.selectModel":"选择模型","dashboard.analysis.startAnalysis":"开始分析","dashboard.analysis.history":"历史记录","dashboard.analysis.tab.overview":"综合分析","dashboard.analysis.tab.fundamental":"基本面","dashboard.analysis.tab.technical":"技术","dashboard.analysis.tab.news":"新闻","dashboard.analysis.tab.sentiment":"情绪","dashboard.analysis.tab.risk":"风险","dashboard.analysis.tab.debate":"多空辩论","dashboard.analysis.tab.decision":"最终决策","dashboard.analysis.empty.selectSymbol":"选择标的开始分析","dashboard.analysis.empty.selectSymbolDesc":"从自选股列表中选择或输入标的代码,获取多维度AI分析报告","dashboard.analysis.empty.startAnalysis":'点击"开始分析"按钮进行多维度分析',"dashboard.analysis.empty.startAnalysisDesc":"我们将从基本面、技术、新闻、情绪和风险等多个维度为您提供全面的分析","dashboard.analysis.empty.noData":"暂无{type}分析数据,请先进行综合分析","dashboard.analysis.empty.noWatchlist":"暂无自选股","dashboard.analysis.empty.noHistory":"暂无历史记录","dashboard.analysis.empty.watchlistHint":"暂无自选股,请先","dashboard.analysis.empty.noDebateData":"暂无辩论数据","dashboard.analysis.empty.noDecisionData":"暂无决策数据","dashboard.analysis.empty.selectAgent":"请选择一个 Agent 查看分析结果","dashboard.analysis.loading.analyzing":"正在分析中,请稍候...","dashboard.analysis.loading.fundamental":"正在分析基本面数据...","dashboard.analysis.loading.technical":"正在分析技术指标...","dashboard.analysis.loading.news":"正在分析新闻数据...","dashboard.analysis.loading.sentiment":"正在分析市场情绪...","dashboard.analysis.loading.risk":"正在评估风险...","dashboard.analysis.loading.debate":"正在进行多空辩论...","dashboard.analysis.loading.decision":"正在生成最终决策...","dashboard.analysis.score.overall":"综合评分","dashboard.analysis.score.recommendation":"投资建议","dashboard.analysis.score.confidence":"置信度","dashboard.analysis.dimension.fundamental":"基本面","dashboard.analysis.dimension.technical":"技术","dashboard.analysis.dimension.news":"新闻","dashboard.analysis.dimension.sentiment":"情绪","dashboard.analysis.dimension.risk":"风险","dashboard.analysis.card.dimensionScores":"各维度评分","dashboard.analysis.card.overviewReport":"综合分析报告","dashboard.analysis.card.financialMetrics":"财务指标","dashboard.analysis.card.fundamentalReport":"基本面分析报告","dashboard.analysis.card.technicalIndicators":"技术指标","dashboard.analysis.card.technicalReport":"技术分析报告","dashboard.analysis.card.newsList":"相关新闻","dashboard.analysis.card.newsReport":"新闻分析报告","dashboard.analysis.card.sentimentIndicators":"情绪指标","dashboard.analysis.card.sentimentReport":"情绪分析报告","dashboard.analysis.card.riskMetrics":"风险指标","dashboard.analysis.card.riskReport":"风险评估报告","dashboard.analysis.card.bullView":"看涨观点 (Bull)","dashboard.analysis.card.bearView":"看跌观点 (Bear)","dashboard.analysis.card.researchConclusion":"研究员结论","dashboard.analysis.card.traderPlan":"交易员计划","dashboard.analysis.card.riskDebate":"风险委员会辩论","dashboard.analysis.card.finalDecision":"最终决策 (Final Decision)","dashboard.analysis.card.tradePlanDetail":"交易计划详情","dashboard.analysis.tradingPlan.entry_price":"入场价格","dashboard.analysis.tradingPlan.position_size":"仓位大小","dashboard.analysis.tradingPlan.stop_loss":"止损","dashboard.analysis.tradingPlan.take_profit":"止盈","dashboard.analysis.label.confidence":"置信度","dashboard.analysis.label.keyPoints":"核心要点","dashboard.analysis.label.riskWarning":"风险提示","dashboard.analysis.risk.risky":"激进派观点 (Risky)","dashboard.analysis.risk.neutral":"中立派观点 (Neutral)","dashboard.analysis.risk.safe":"保守派观点 (Safe)","dashboard.analysis.risk.conclusion":"结论","dashboard.analysis.feature.fundamental":"基本面分析","dashboard.analysis.feature.technical":"技术分析","dashboard.analysis.feature.news":"新闻分析","dashboard.analysis.feature.sentiment":"情绪分析","dashboard.analysis.feature.risk":"风险评估","dashboard.analysis.watchlist.title":"我的自选股","dashboard.analysis.watchlist.add":"添加","dashboard.analysis.watchlist.addStock":"添加股票","dashboard.analysis.modal.addStock.title":"添加自选股","dashboard.analysis.modal.addStock.confirm":"确定","dashboard.analysis.modal.addStock.cancel":"取消","dashboard.analysis.modal.addStock.market":"市场类型","dashboard.analysis.modal.addStock.marketPlaceholder":"请选择市场","dashboard.analysis.modal.addStock.marketRequired":"请选择市场类型","dashboard.analysis.modal.addStock.symbol":"股票代码","dashboard.analysis.modal.addStock.symbolPlaceholder":"例如: AAPL, TSLA, GOOGL, 000001, BTC","dashboard.analysis.modal.addStock.symbolRequired":"请输入股票代码","dashboard.analysis.modal.addStock.searchPlaceholder":"搜索标的代码或名称","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"搜索或输入标的代码(如:AAPL、BTC/USDT、EUR/USD)","dashboard.analysis.modal.addStock.searchOrInputHint":"支持搜索数据库中的标的,或直接输入代码(系统将自动获取名称)","dashboard.analysis.modal.addStock.search":"搜索","dashboard.analysis.modal.addStock.searchResults":"搜索结果","dashboard.analysis.modal.addStock.hotSymbols":"热门标的","dashboard.analysis.modal.addStock.noHotSymbols":"暂无热门标的","dashboard.analysis.modal.addStock.selectedSymbol":"已选标的","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"请先选择一个标的","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"请先选择一个标的或输入标的代码","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"请输入标的代码","dashboard.analysis.modal.addStock.pleaseSelectMarket":"请先选择市场类型","dashboard.analysis.modal.addStock.searchFailed":"搜索失败,请稍后重试","dashboard.analysis.modal.addStock.noSearchResults":"未找到匹配的标的","dashboard.analysis.modal.addStock.willAutoFetchName":"系统将自动获取名称","dashboard.analysis.modal.addStock.addDirectly":"直接添加","dashboard.analysis.modal.addStock.nameWillBeFetched":"名称将在添加时自动获取","dashboard.analysis.market.USStock":"美股","dashboard.analysis.market.Crypto":"加密货币","dashboard.analysis.market.Forex":"外汇","dashboard.analysis.market.Futures":"期货","dashboard.analysis.modal.history.title":"历史分析记录","dashboard.analysis.modal.history.viewResult":"查看结果","dashboard.analysis.modal.history.completeTime":"完成时间","dashboard.analysis.modal.history.error":"错误","dashboard.analysis.status.pending":"待处理","dashboard.analysis.status.processing":"处理中","dashboard.analysis.status.completed":"已完成","dashboard.analysis.status.failed":"失败","dashboard.analysis.message.selectSymbol":"请先选择标的","dashboard.analysis.message.taskCreated":"分析任务已创建,正在后台执行...","dashboard.analysis.message.analysisComplete":"分析完成","dashboard.analysis.message.analysisCompleteCache":"分析完成(使用缓存数据)","dashboard.analysis.message.analysisFailed":"分析失败,请稍后重试","dashboard.analysis.message.addStockSuccess":"添加成功","dashboard.analysis.message.addStockFailed":"添加失败","dashboard.analysis.message.removeStockSuccess":"移除成功","dashboard.analysis.message.removeStockFailed":"移除失败","dashboard.analysis.message.resumingAnalysis":"正在恢复分析任务...","dashboard.analysis.message.deleteSuccess":"删除成功","dashboard.analysis.message.deleteFailed":"删除失败","dashboard.analysis.modal.history.delete":"删除","dashboard.analysis.modal.history.deleteConfirm":"确定要删除这条分析记录吗?","dashboard.analysis.test":"工专路 {no} 号店","dashboard.analysis.introduce":"指标说明","dashboard.analysis.total-sales":"总销售额","dashboard.analysis.day-sales":"日均销售额¥","dashboard.analysis.visits":"访问量","dashboard.analysis.visits-trend":"访问量趋势","dashboard.analysis.visits-ranking":"门店访问量排名","dashboard.analysis.day-visits":"日访问量","dashboard.analysis.week":"周同比","dashboard.analysis.day":"日同比","dashboard.analysis.payments":"支付笔数","dashboard.analysis.conversion-rate":"转化率","dashboard.analysis.operational-effect":"运营活动效果","dashboard.analysis.sales-trend":"销售趋势","dashboard.analysis.sales-ranking":"门店销售额排名","dashboard.analysis.all-year":"全年","dashboard.analysis.all-month":"本月","dashboard.analysis.all-week":"本周","dashboard.analysis.all-day":"今日","dashboard.analysis.search-users":"搜索用户数","dashboard.analysis.per-capita-search":"人均搜索次数","dashboard.analysis.online-top-search":"线上热门搜索","dashboard.analysis.the-proportion-of-sales":"销售额类别占比","dashboard.analysis.dropdown-option-one":"操作一","dashboard.analysis.dropdown-option-two":"操作二","dashboard.analysis.channel.all":"全部渠道","dashboard.analysis.channel.online":"线上","dashboard.analysis.channel.stores":"门店","dashboard.analysis.sales":"销售额","dashboard.analysis.traffic":"客流量","dashboard.analysis.table.rank":"排名","dashboard.analysis.table.search-keyword":"搜索关键词","dashboard.analysis.table.users":"用户数","dashboard.analysis.table.weekly-range":"周涨幅","dashboard.indicator.selectSymbol":"选择或输入标的代码","dashboard.indicator.emptyWatchlistHint":"暂无自选股,请先添加","dashboard.indicator.hint.selectSymbol":"请选择标的开始分析","dashboard.indicator.hint.selectSymbolDesc":"在上方搜索框中选择或输入股票代码,查看K线图表和技术指标","dashboard.indicator.retry":"重试","dashboard.indicator.panel.title":"技术指标","dashboard.indicator.panel.realtimeOn":"关闭实时更新","dashboard.indicator.panel.realtimeOff":"开启实时更新","dashboard.indicator.panel.themeLight":"切换到深色主题","dashboard.indicator.panel.themeDark":"切换到浅色主题","dashboard.indicator.section.enabled":"已启用","dashboard.indicator.section.added":"我添加的指标","dashboard.indicator.section.custom":"自己创建的指标","dashboard.indicator.section.bought":"我选购的指标","dashboard.indicator.section.myCreated":"我创建的指标","dashboard.indicator.section.purchased":"我购买的指标","dashboard.indicator.empty":"暂无指标,请先添加或创建指标","dashboard.indicator.emptyPurchased":"暂无购买的指标,去指标市场看看","dashboard.indicator.buy":"购买指标","dashboard.indicator.action.start":"启动","dashboard.indicator.action.stop":"关闭","dashboard.indicator.action.edit":"编辑","dashboard.indicator.action.delete":"删除","dashboard.indicator.action.backtest":"回测","dashboard.indicator.action.publish":"发布到社区","dashboard.indicator.action.unpublish":"已发布(点击管理)","dashboard.indicator.status.normal":"正常","dashboard.indicator.status.normalPermanent":"正常(永久有效)","dashboard.indicator.status.expired":"已过期","dashboard.indicator.expiry.permanent":"永久有效","dashboard.indicator.expiry.noExpiry":"无到期时间","dashboard.indicator.expiry.expired":"已过期:{date}","dashboard.indicator.expiry.expiresOn":"到期时间:{date}","dashboard.indicator.delete.confirmTitle":"确认删除","dashboard.indicator.delete.confirmContent":'确定要删除指标"{name}"吗?此操作不可恢复。',"dashboard.indicator.delete.confirmOk":"删除","dashboard.indicator.delete.confirmCancel":"取消","dashboard.indicator.delete.success":"删除成功","dashboard.indicator.delete.failed":"删除失败","dashboard.indicator.save.success":"保存成功","dashboard.indicator.save.failed":"保存失败","dashboard.indicator.publish.title":"发布到社区","dashboard.indicator.publish.editTitle":"管理发布","dashboard.indicator.publish.hint":'发布后,其他用户可以在"指标社区"中看到并购买您的指标',"dashboard.indicator.publish.pricingType":"定价方式","dashboard.indicator.publish.free":"免费","dashboard.indicator.publish.paid":"付费","dashboard.indicator.publish.price":"价格","dashboard.indicator.publish.description":"指标描述","dashboard.indicator.publish.descriptionPlaceholder":"请输入指标的详细描述,帮助其他用户了解指标功能...","dashboard.indicator.publish.confirm":"确认发布","dashboard.indicator.publish.update":"更新发布","dashboard.indicator.publish.unpublish":"取消发布","dashboard.indicator.publish.success":"发布成功","dashboard.indicator.publish.failed":"发布失败","dashboard.indicator.publish.unpublishSuccess":"已取消发布","dashboard.indicator.publish.unpublishFailed":"取消发布失败","dashboard.indicator.error.loadWatchlistFailed":"加载自选股失败","dashboard.indicator.error.chartNotReady":"图表组件未初始化,请先选择标的并等待图表加载完成","dashboard.indicator.error.chartMethodNotReady":"图表组件方法未就绪,请稍后重试","dashboard.indicator.error.chartExecuteNotReady":"图表组件执行方法未就绪,请稍后重试","dashboard.indicator.error.parseFailed":"无法解析Python代码","dashboard.indicator.error.parseFailedCheck":"无法解析Python代码,请检查代码格式","dashboard.indicator.error.addIndicatorFailed":"添加指标失败","dashboard.indicator.error.runIndicatorFailed":"运行指标失败","dashboard.indicator.error.pleaseLogin":"请先登录","dashboard.indicator.error.loadDataFailed":"数据加载失败","dashboard.indicator.error.loadDataFailedDesc":"请检查网络连接","dashboard.indicator.error.tiingoSubscription":"外汇1分钟数据需要 Tiingo 付费订阅,请使用其他时间周期或升级订阅","dashboard.indicator.error.pythonEngineFailed":"Python 引擎加载失败,指标功能可能无法使用","dashboard.indicator.error.chartInitFailed":"图表初始化失败","dashboard.indicator.warning.enterCode":"请先输入指标代码","dashboard.indicator.warning.pyodideLoadFailed":"Python 引擎加载失败","dashboard.indicator.warning.pyodideLoadFailedDesc":"您当前所在区域或网络环境无法使用该功能","dashboard.indicator.warning.chartNotInitialized":"图表未初始化,无法使用画线工具","dashboard.indicator.success.runIndicator":"指标运行成功","dashboard.indicator.success.clearDrawings":"已清除所有画线","dashboard.indicator.sma":"SMA (均线组合)","dashboard.indicator.ema":"EMA (指数均线组合)","dashboard.indicator.rsi":"RSI (相对强弱)","dashboard.indicator.macd":"MACD","dashboard.indicator.bb":"布林带 (Bollinger Bands)","dashboard.indicator.atr":"ATR (平均真实波幅)","dashboard.indicator.cci":"CCI (商品通道指数)","dashboard.indicator.williams":"Williams %R (威廉指标)","dashboard.indicator.mfi":"MFI (资金流量指标)","dashboard.indicator.adx":"ADX (平均趋向指数)","dashboard.indicator.obv":"OBV (能量潮)","dashboard.indicator.adosc":"ADOSC (积累/派发振荡器)","dashboard.indicator.ad":"AD (积累/派发线)","dashboard.indicator.kdj":"KDJ (随机指标)","dashboard.indicator.signal.buy":"BUY","dashboard.indicator.signal.sell":"SELL","dashboard.indicator.signal.supertrendBuy":"SuperTrend Buy","dashboard.indicator.signal.supertrendSell":"SuperTrend Sell","dashboard.indicator.chart.kline":"K线","dashboard.indicator.chart.volume":"成交量","dashboard.indicator.chart.uptrend":"Up Trend","dashboard.indicator.chart.downtrend":"Down Trend","dashboard.indicator.tooltip.time":"时间","dashboard.indicator.tooltip.open":"开","dashboard.indicator.tooltip.close":"收","dashboard.indicator.tooltip.high":"高","dashboard.indicator.tooltip.low":"低","dashboard.indicator.tooltip.volume":"成交量","dashboard.indicator.drawing.line":"线段","dashboard.indicator.drawing.horizontalLine":"水平线","dashboard.indicator.drawing.verticalLine":"垂直线","dashboard.indicator.drawing.ray":"射线","dashboard.indicator.drawing.straightLine":"直线","dashboard.indicator.drawing.parallelLine":"平行线","dashboard.indicator.drawing.priceLine":"价格线","dashboard.indicator.drawing.priceChannel":"价格通道","dashboard.indicator.drawing.fibonacciLine":"斐波那契线","dashboard.indicator.drawing.measure":"测量","dashboard.indicator.drawing.clearAll":"清除所有画线","dashboard.indicator.market.USStock":"美股","dashboard.indicator.market.Crypto":"加密货币","dashboard.indicator.market.Forex":"外汇","dashboard.indicator.market.Futures":"期货","dashboard.indicator.create":"创建指标","dashboard.indicator.editor.title":"创建/编辑指标","dashboard.indicator.editor.name":"指标名称","dashboard.indicator.editor.nameRequired":"请输入指标名称","dashboard.indicator.editor.namePlaceholder":"请输入指标名称","dashboard.indicator.editor.description":"指标描述","dashboard.indicator.editor.descriptionPlaceholder":"请输入指标描述(可选)","dashboard.indicator.editor.code":"指标脚本(Python)","dashboard.indicator.editor.codeRequired":"请输入指标代码","dashboard.indicator.editor.codePlaceholder":"请输入Python代码","dashboard.indicator.editor.run":"运行","dashboard.indicator.editor.runHint":"点击运行按钮可以在K线图上预览指标效果","dashboard.indicator.editor.guide":"开发指南","dashboard.indicator.editor.guideTitle":"Python 指标开发指南","dashboard.indicator.editor.save":"保存","dashboard.indicator.editor.cancel":"取消","dashboard.indicator.editor.unnamed":"未命名指标","dashboard.indicator.editor.publishToCommunity":"发布到社区","dashboard.indicator.editor.publishToCommunityHint":"发布后,其他用户可以在社区中查看和使用您的指标","dashboard.indicator.editor.indicatorType":"指标类型","dashboard.indicator.editor.indicatorTypeRequired":"请选择指标类型","dashboard.indicator.editor.indicatorTypePlaceholder":"请选择指标类型","dashboard.indicator.editor.previewImage":"预览图","dashboard.indicator.editor.uploadImage":"上传图片","dashboard.indicator.editor.previewImageHint":"建议尺寸:800x400,大小不超过2MB","dashboard.indicator.editor.pricing":"售价(QDT)","dashboard.indicator.editor.pricingType.free":"免费","dashboard.indicator.editor.pricingType.permanent":"永久","dashboard.indicator.editor.pricingType.monthly":"月付","dashboard.indicator.editor.price":"价格","dashboard.indicator.editor.priceRequired":"请输入价格","dashboard.indicator.editor.pricePlaceholder":"请输入价格","dashboard.indicator.editor.pricingHint":"免费指标虽然价格为0,但平台会根据您的指标使用量和好评率给予奖励(QDT)","dashboard.indicator.editor.aiGenerate":"智能生成","dashboard.indicator.editor.aiPromptPlaceholder":"请描述你的信号逻辑(只输出 buy/sell)与绘图(plots)。仓位/风控/加减仓请在回测配置中设定。","dashboard.indicator.editor.aiGenerateBtn":"AI生成代码","dashboard.indicator.editor.aiPromptRequired":"请输入您的想法","dashboard.indicator.editor.aiGenerateSuccess":"代码生成成功","dashboard.indicator.editor.aiGenerateError":"代码生成失败,请稍后重试","dashboard.indicator.editor.verifyCode":"代码检查","dashboard.indicator.editor.verifyCodeSuccess":"代码检查通过","dashboard.indicator.editor.verifyCodeFailed":"代码检查未通过","dashboard.indicator.editor.verifyCodeEmpty":"代码不能为空","dashboard.indicator.boundary.message":"提示:指标脚本只负责“计算 + 绘图 + buy/sell 信号”;仓位、风控、加减仓、手续费/滑点属于策略执行配置。","dashboard.indicator.boundary.indicatorRule":"指标脚本请只输出 buy/sell(并设定 df['buy']/df['sell'])。不要在脚本内撰写仓位管理、止盈止损、加减仓。","dashboard.indicator.boundary.backtestRule":"规则:同一根K线若出现主信号(buy/sell→开/平仓/反手),本K线将跳过所有加仓与减仓。","dashboard.indicator.paramsConfig.title":"指标参数配置","dashboard.indicator.paramsConfig.noParams":"该指标没有可配置的参数","dashboard.indicator.paramsConfig.hint":"设置参数后点击确定运行指标","dashboard.indicator.backtest.title":"指标回测","dashboard.indicator.backtest.config":"回测参数","dashboard.indicator.backtest.startDate":"开始日期","dashboard.indicator.backtest.endDate":"结束日期","dashboard.indicator.backtest.selectStartDate":"选择开始日期","dashboard.indicator.backtest.selectEndDate":"选择结束日期","dashboard.indicator.backtest.startDateRequired":"请选择开始日期","dashboard.indicator.backtest.endDateRequired":"请选择结束日期","dashboard.indicator.backtest.initialCapital":"初始资金","dashboard.indicator.backtest.initialCapitalRequired":"请输入初始资金","dashboard.indicator.backtest.commission":"手续费率(%)","dashboard.indicator.backtest.commissionHint":"按名义价值(含杠杆)收取;每笔成交(开/平仓)都会从余额扣除。","dashboard.indicator.backtest.leverage":"杠杆倍率","dashboard.indicator.backtest.timeframe":"K线周期","dashboard.indicator.backtest.tradeDirection":"交易方向","dashboard.indicator.backtest.longOnly":"做多","dashboard.indicator.backtest.shortOnly":"做空","dashboard.indicator.backtest.both":"双向","dashboard.indicator.backtest.run":"开始回测","dashboard.indicator.backtest.rerun":"重新回测","dashboard.indicator.backtest.close":"关闭","dashboard.indicator.backtest.running":"正在进行指标回测...","dashboard.indicator.backtest.loadingTip1":"正在获取历史K线数据...","dashboard.indicator.backtest.loadingTip2":"正在执行策略信号计算...","dashboard.indicator.backtest.loadingTip3":"正在模拟交易执行...","dashboard.indicator.backtest.loadingTip4":"正在计算回测指标...","dashboard.indicator.backtest.loadingTip5":"即将完成,请稍候...","dashboard.indicator.backtest.results":"回测结果","dashboard.indicator.backtest.totalReturn":"总收益率","dashboard.indicator.backtest.annualReturn":"年化收益","dashboard.indicator.backtest.maxDrawdown":"最大回撤","dashboard.indicator.backtest.sharpeRatio":"夏普比率","dashboard.indicator.backtest.winRate":"胜率","dashboard.indicator.backtest.profitFactor":"盈亏比","dashboard.indicator.backtest.totalTrades":"交易次数","dashboard.indicator.totalReturn":"总收益率","dashboard.indicator.annualReturn":"年化收益率","dashboard.indicator.maxDrawdown":"最大回撤","dashboard.indicator.sharpeRatio":"夏普比率","dashboard.indicator.winRate":"胜率","dashboard.indicator.profitFactor":"盈亏比","dashboard.indicator.totalTrades":"总交易次数","dashboard.indicator.backtest.totalCommission":"总手续费","dashboard.indicator.backtest.equityCurve":"收益曲线","dashboard.indicator.backtest.strategy":"指标收益","dashboard.indicator.backtest.benchmark":"基准收益","dashboard.indicator.backtest.tradeHistory":"交易记录","dashboard.indicator.backtest.tradeTime":"时间","dashboard.indicator.backtest.tradeType":"类型","dashboard.indicator.backtest.buy":"买入","dashboard.indicator.backtest.sell":"卖出","dashboard.indicator.backtest.liquidation":"爆仓","dashboard.indicator.backtest.openLong":"开多","dashboard.indicator.backtest.closeLong":"平多","dashboard.indicator.backtest.closeLongStop":"平多(止损)","dashboard.indicator.backtest.closeLongProfit":"平多(止盈)","dashboard.indicator.backtest.addLong":"加多仓","dashboard.indicator.backtest.openShort":"开空","dashboard.indicator.backtest.closeShort":"平空","dashboard.indicator.backtest.closeShortStop":"平空(止损)","dashboard.indicator.backtest.closeShortProfit":"平空(止盈)","dashboard.indicator.backtest.addShort":"加空仓","dashboard.indicator.backtest.price":"价格","dashboard.indicator.backtest.amount":"数量","dashboard.indicator.backtest.balance":"账户余额","dashboard.indicator.backtest.profit":"盈亏","dashboard.indicator.backtest.success":"回测完成","dashboard.indicator.backtest.failed":"回测失败,请稍后重试","dashboard.indicator.backtest.quickSelect":"快速选择","dashboard.indicator.backtest.precisionMode":"回测精度模式","dashboard.indicator.backtest.estimatedCandles":"预计处理约 {count} 根K线","dashboard.indicator.backtest.highPrecisionDesc":"使用1分钟级别K线进行高精度回测,止损止盈触发更精确","dashboard.indicator.backtest.mediumPrecisionDesc":"回测区间超过30天,使用5分钟级别K线以平衡精度与性能","dashboard.indicator.backtest.standardModeWarning":"使用标准回测模式","dashboard.indicator.backtest.standardModeDesc":"当前配置不支持高精度回测,将使用策略K线进行回测","dashboard.indicator.backtest.onlyCryptoSupported":"高精度回测仅支持加密货币市场","dashboard.indicator.backtest.noIndicatorCode":"该指标没有可回测的代码","dashboard.indicator.backtest.noSymbol":"请先选择交易标的","dashboard.indicator.backtest.dateRangeExceeded":"回测时间范围超出限制:{timeframe}周期最多可回测{maxRange}","dashboard.indicator.backtest.dateRangeExceededDays":"回测时间范围超出限制:{timeframe}周期最多可回测{maxRange}({maxDays}天)","dashboard.indicator.backtest.metaLine":"标的:{symbol} | 市场:{market} | 周期:{timeframe}","dashboard.indicator.backtest.savedRunId":"回测已保存,记录ID:{id}","dashboard.indicator.backtest.historyTitle":"回测记录","dashboard.indicator.backtest.historyRefresh":"刷新","dashboard.indicator.backtest.historyView":"查看","dashboard.indicator.backtest.historyNoData":"暂无回测记录","dashboard.indicator.backtest.historyUseCurrent":"仅目前币种/周期","dashboard.indicator.backtest.historyFilterSymbol":"币种(Symbol)","dashboard.indicator.backtest.historyFilterTimeframe":"周期(Timeframe)","dashboard.indicator.backtest.historyApply":"应用筛选","dashboard.indicator.backtest.historyAIAnalyze":"AI分析","dashboard.indicator.backtest.historyAIAnalyzeTitle":"AI 分析建议","dashboard.indicator.backtest.historyNoAIResult":"暂无 AI 分析结果","dashboard.indicator.backtest.historyRunId":"记录ID","dashboard.indicator.backtest.historyCreatedAt":"时间","dashboard.indicator.backtest.historyRange":"区间","dashboard.indicator.backtest.historyStatus":"状态","dashboard.indicator.backtest.historyStatusSuccess":"成功","dashboard.indicator.backtest.historyStatusFailed":"失败","dashboard.indicator.backtest.historyActions":"操作","dashboard.indicator.backtest.prev":"上一步","dashboard.indicator.backtest.next":"下一步","dashboard.indicator.backtest.steps.strategy.title":"执行配置","dashboard.indicator.backtest.steps.strategy.desc":"仓位/风控/加减仓(策略层)","dashboard.indicator.backtest.steps.trading.title":"回测环境","dashboard.indicator.backtest.steps.trading.desc":"时间/资金/费率/杠杆/滑点","dashboard.indicator.backtest.steps.results.title":"结果","dashboard.indicator.backtest.steps.results.desc":"统计与交易明细","dashboard.indicator.backtest.panel.risk":"执行配置:风控(止损/移动止盈)","dashboard.indicator.backtest.panel.scale":"执行配置:加仓(顺势/逆势)","dashboard.indicator.backtest.panel.reduce":"执行配置:减仓(顺势/逆势)","dashboard.indicator.backtest.panel.position":"执行配置:开仓仓位","dashboard.indicator.backtest.field.stopLossPct":"止损(%)","dashboard.indicator.backtest.field.takeProfitPct":"止盈(%)","dashboard.indicator.backtest.field.trailingEnabled":"移动止盈","dashboard.indicator.backtest.field.trailingStopPct":"移动回撤(%)","dashboard.indicator.backtest.field.trailingActivationPct":"移动止盈激活(%)","dashboard.indicator.backtest.field.slippage":"滑点(%)","dashboard.indicator.backtest.field.trendAddEnabled":"顺势加仓","dashboard.indicator.backtest.field.dcaAddEnabled":"逆势加仓","dashboard.indicator.backtest.field.trendAddStepPct":"加仓触发(%)","dashboard.indicator.backtest.field.dcaAddStepPct":"加仓触发(%)","dashboard.indicator.backtest.field.trendAddSizePct":"每次加仓资金占比(%)","dashboard.indicator.backtest.field.dcaAddSizePct":"每次加仓资金占比(%)","dashboard.indicator.backtest.field.trendAddMaxTimes":"最多加仓次数","dashboard.indicator.backtest.field.dcaAddMaxTimes":"最多加仓次数","dashboard.indicator.backtest.field.trendReduceEnabled":"顺势减仓","dashboard.indicator.backtest.field.adverseReduceEnabled":"逆势减仓","dashboard.indicator.backtest.field.trendReduceStepPct":"顺势触发(%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"逆势触发(%)","dashboard.indicator.backtest.field.trendReduceSizePct":"每次减仓比例(%)","dashboard.indicator.backtest.field.adverseReduceSizePct":"每次逆势减仓比例(%)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"最多顺势减仓次数","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"最多逆势减仓次数","dashboard.indicator.backtest.field.entryPct":"开仓资金占比(%)","dashboard.indicator.backtest.field.minOrderPct":"单次最小资金占比(%)(可选)","dashboard.indicator.backtest.hint.entryPctMax":"最大可开仓:{maxPct}%(为后续加仓预留资金)","dashboard.indicator.backtest.closeLongTrailing":"平多(移动止损/止盈)","dashboard.indicator.backtest.reduceLong":"多头减仓","dashboard.indicator.backtest.closeShortTrailing":"平空(移动止损/止盈)","dashboard.indicator.backtest.reduceShort":"空头减仓","dashboard.docs.title":"文档中心","dashboard.docs.search.placeholder":"搜索文档...","dashboard.docs.category.all":"全部","dashboard.docs.category.guide":"开发指南","dashboard.docs.category.api":"API文档","dashboard.docs.category.tutorial":"教程","dashboard.docs.category.faq":"常见问题","dashboard.docs.featured.title":"推荐文档","dashboard.docs.featured.tag":"推荐","dashboard.docs.list.views":"浏览","dashboard.docs.list.author":"作者","dashboard.docs.list.empty":"暂无文档","dashboard.docs.list.backToAll":"返回全部文档","dashboard.docs.list.total":"共 {count} 篇文档","dashboard.docs.detail.back":"返回文档列表","dashboard.docs.detail.updatedAt":"更新于","dashboard.docs.detail.related":"相关文档","dashboard.docs.detail.notFound":"文档不存在","dashboard.docs.detail.error":"文档不存在或已被删除","dashboard.docs.search.result":"搜索结果","dashboard.docs.search.keyword":"关键词","dashboard.totalEquity":"总权益","dashboard.totalPnL":"总盈亏","dashboard.aiStrategies":"AI 策略","dashboard.indicatorStrategies":"指标策略","dashboard.running":"运行中","dashboard.enabled":"已启用","dashboard.pnlHistory":"历史盈亏","dashboard.strategyPerformance":"策略盈亏占比","dashboard.drawdown":"回撤曲线","dashboard.strategyRanking":"策略排行榜","dashboard.winRate":"胜率","dashboard.profitFactor":"盈亏比","dashboard.maxDrawdown":"最大回撤","dashboard.totalTrades":"总交易","dashboard.runningStrategies":"运行中策略","dashboard.equityCurve":"权益曲线","dashboard.strategyAllocation":"策略分布","dashboard.drawdownCurve":"回撤曲线","dashboard.hourlyDistribution":"交易时段","dashboard.dailyPnl":"日盈亏","dashboard.cumulativePnl":"累计盈亏","dashboard.tradeCount":"交易次数","dashboard.profit":"盈亏","dashboard.noData":"暂无数据","dashboard.noStrategyData":"暂无策略数据","dashboard.ranking.totalProfit":"总收益","dashboard.ranking.roi":"收益率","dashboard.ranking.trades":"交易数","dashboard.unit.trades":"笔","dashboard.unit.strategies":"个","dashboard.label.avgDaily":"日均","dashboard.label.avgProfit":"平均盈利","dashboard.label.win":"胜","dashboard.label.lose":"负","dashboard.label.trade":"交易","dashboard.label.indicator":"指标","dashboard.label.totalPnl":"总盈亏","dashboard.label.maxDrawdownPoint":"最大回撤","dashboard.profitCalendar":"收益日历","dashboard.recentTrades":"最近交易","dashboard.currentPositions":"当前持仓","dashboard.table.time":"时间","dashboard.table.strategy":"策略名称","dashboard.table.symbol":"标的","dashboard.table.type":"类型","dashboard.table.side":"方向","dashboard.table.size":"持仓量","dashboard.table.entryPrice":"开仓均价","dashboard.table.price":"价格","dashboard.table.amount":"数量","dashboard.table.profit":"盈亏","dashboard.pendingOrders":"订单执行记录","dashboard.totalOrders":"共 {total} 条","dashboard.viewError":"查看错误","dashboard.filled":"已成交","dashboard.orderTable.time":"创建时间","dashboard.orderTable.strategy":"策略","dashboard.orderTable.symbol":"交易对","dashboard.orderTable.signalType":"信号类型","dashboard.orderTable.amount":"数量","dashboard.orderTable.price":"成交价","dashboard.orderTable.status":"状态","dashboard.orderTable.timeInfo":"时间","dashboard.orderTable.executedAt":"执行时间","dashboard.orderTable.exchange":"交易所","dashboard.orderTable.notify":"通知方式","dashboard.orderTable.actions":"操作","dashboard.orderTable.delete":"删除","dashboard.orderTable.deleteConfirm":"确认删除这条记录?","dashboard.orderTable.deleteSuccess":"删除成功","dashboard.orderTable.deleteFailed":"删除失败","dashboard.newOrderNotify":"新订单提醒","dashboard.newOrderDesc":"有新的订单执行记录","dashboard.soundEnabled":"声音提醒已开启","dashboard.soundDisabled":"声音提醒已关闭","dashboard.clickToMute":"点击关闭声音提醒","dashboard.clickToUnmute":"点击开启声音提醒","dashboard.signalType.openLong":"开多","dashboard.signalType.openShort":"开空","dashboard.signalType.closeLong":"平多","dashboard.signalType.closeShort":"平空","dashboard.signalType.addLong":"加多","dashboard.signalType.addShort":"加空","dashboard.status.pending":"待处理","dashboard.status.processing":"处理中","dashboard.status.completed":"已完成","dashboard.status.failed":"失败","dashboard.status.cancelled":"已取消","dashboard.table.pnl":"未实现盈亏","form.basic-form.basic.title":"基础表单","form.basic-form.basic.description":"表单页用于向用户收集或验证信息,基础表单常见于数据项较少的表单场景。","form.basic-form.title.label":"标题","form.basic-form.title.placeholder":"给目标起个名字","form.basic-form.title.required":"请输入标题","form.basic-form.date.label":"起止日期","form.basic-form.placeholder.start":"开始日期","form.basic-form.placeholder.end":"结束日期","form.basic-form.date.required":"请选择起止日期","form.basic-form.goal.label":"目标描述","form.basic-form.goal.placeholder":"请输入你的阶段性工作目标","form.basic-form.goal.required":"请输入目标描述","form.basic-form.standard.label":"衡量标准","form.basic-form.standard.placeholder":"请输入衡量标准","form.basic-form.standard.required":"请输入衡量标准","form.basic-form.client.label":"客户","form.basic-form.client.required":"请描述你服务的客户","form.basic-form.label.tooltip":"目标的服务对象","form.basic-form.client.placeholder":"请描述你服务的客户,内部客户直接 @姓名/工号","form.basic-form.invites.label":"邀评人","form.basic-form.invites.placeholder":"请直接 @姓名/工号,最多可邀请 5 人","form.basic-form.weight.label":"权重","form.basic-form.weight.placeholder":"请输入","form.basic-form.public.label":"目标公开","form.basic-form.label.help":"客户、邀评人默认被分享","form.basic-form.radio.public":"公开","form.basic-form.radio.partially-public":"部分公开","form.basic-form.radio.private":"不公开","form.basic-form.publicUsers.placeholder":"公开给","form.basic-form.option.A":"同事一","form.basic-form.option.B":"同事二","form.basic-form.option.C":"同事三","form.basic-form.email.required":"请输入邮箱地址!","form.basic-form.email.wrong-format":"邮箱地址格式错误!","form.basic-form.userName.required":"请输入用户名!","form.basic-form.password.required":"请输入密码!","form.basic-form.password.twice":"两次输入的密码不匹配!","form.basic-form.strength.msg":"请至少输入 6 个字符。请不要使用容易被猜到的密码。","form.basic-form.strength.strong":"强度:强","form.basic-form.strength.medium":"强度:中","form.basic-form.strength.short":"强度:太短","form.basic-form.confirm-password.required":"请确认密码!","form.basic-form.phone-number.required":"请输入手机号!","form.basic-form.phone-number.wrong-format":"手机号格式错误!","form.basic-form.verification-code.required":"请输入验证码!","form.basic-form.form.get-captcha":"获取验证码","form.basic-form.captcha.second":"秒","form.basic-form.form.optional":"(选填)","form.basic-form.form.submit":"提交","form.basic-form.form.save":"保存","form.basic-form.email.placeholder":"邮箱","form.basic-form.password.placeholder":"至少6位密码,区分大小写","form.basic-form.confirm-password.placeholder":"确认密码","form.basic-form.phone-number.placeholder":"手机号","form.basic-form.verification-code.placeholder":"验证码","result.success.title":"提交成功","result.success.description":"提交结果页用于反馈一系列操作任务的处理结果, 如果仅是简单操作,使用 Message 全局提示反馈即可。 本文字区域可以展示简单的补充说明,如果有类似展示 “单据”的需求,下面这个灰色区域可以呈现比较复杂的内容。","result.success.operate-title":"项目名称","result.success.operate-id":"项目 ID","result.success.principal":"负责人","result.success.operate-time":"生效时间","result.success.step1-title":"创建项目","result.success.step1-operator":"曲丽丽","result.success.step2-title":"部门初审","result.success.step2-operator":"周毛毛","result.success.step2-extra":"催一下","result.success.step3-title":"财务复核","result.success.step4-title":"完成","result.success.btn-return":"返回列表","result.success.btn-project":"查看项目","result.success.btn-print":"打印","result.fail.error.title":"提交失败","result.fail.error.description":"请核对并修改以下信息后,再重新提交。","result.fail.error.hint-title":"您提交的内容有如下错误:","result.fail.error.hint-text1":"您的账户已被冻结","result.fail.error.hint-btn1":"立即解冻","result.fail.error.hint-text2":"您的账户还不具备申请资格","result.fail.error.hint-btn2":"立即升级","result.fail.error.btn-text":"返回修改","account.settings.menuMap.custom":"个性化","account.settings.menuMap.binding":"账号绑定","account.settings.basic.avatar":"头像","account.settings.basic.change-avatar":"更换头像","account.settings.basic.email":"邮箱","account.settings.basic.email-message":"请输入您的邮箱!","account.settings.basic.nickname":"昵称","account.settings.basic.nickname-message":"请输入您的昵称!","account.settings.basic.profile":"个人简介","account.settings.basic.profile-message":"请输入个人简介!","account.settings.basic.profile-placeholder":"个人简介","account.settings.basic.country":"国家/地区","account.settings.basic.country-message":"请输入您的国家或地区!","account.settings.basic.geographic":"所在省市","account.settings.basic.geographic-message":"请输入您的所在省市!","account.settings.basic.address":"街道地址","account.settings.basic.address-message":"请输入您的街道地址!","account.settings.basic.phone":"联系电话","account.settings.basic.phone-message":"请输入您的联系电话!","account.settings.basic.update":"更新基本信息","account.settings.basic.update.success":"更新基本信息成功","account.settings.security.strong":"强","account.settings.security.medium":"中","account.settings.security.weak":"弱","account.settings.security.password":"账户密码","account.settings.security.password-description":"当前密码强度:","account.settings.security.phone":"密保手机","account.settings.security.phone-description":"已绑定手机:","account.settings.security.question":"密保问题","account.settings.security.question-description":"未设置密保问题,密保问题可有效保护账户安全","account.settings.security.email":"绑定邮箱","account.settings.security.email-description":"已绑定邮箱:","account.settings.security.mfa":"MFA 设备","account.settings.security.mfa-description":"未绑定 MFA 设备,绑定后,可以进行二次确认","account.settings.security.modify":"修改","account.settings.security.set":"设置","account.settings.security.bind":"绑定","account.settings.binding.taobao":"绑定淘宝","account.settings.binding.taobao-description":"当前未绑定淘宝账号","account.settings.binding.alipay":"绑定支付宝","account.settings.binding.alipay-description":"当前未绑定支付宝账号","account.settings.binding.dingding":"绑定钉钉","account.settings.binding.dingding-description":"当前未绑定钉钉账号","account.settings.binding.bind":"绑定","account.settings.notification.password":"账户密码","account.settings.notification.password-description":"其他用户的消息将以站内信的形式通知","account.settings.notification.messages":"系统消息","account.settings.notification.messages-description":"系统消息将以站内信的形式通知","account.settings.notification.todo":"待办任务","account.settings.notification.todo-description":"待办任务将以站内信的形式通知","account.settings.settings.open":"开","account.settings.settings.close":"关","trading-assistant.title":"交易助手","trading-assistant.strategyList":"策略列表","trading-assistant.createStrategy":"创建策略","trading-assistant.noStrategy":"暂无策略","trading-assistant.selectStrategy":"请从左侧选择一个策略查看详情","trading-assistant.startStrategy":"启动策略","trading-assistant.stopStrategy":"停止策略","trading-assistant.editStrategy":"编辑策略","trading-assistant.deleteStrategy":"删除策略","trading-assistant.startAll":"全部启动","trading-assistant.stopAll":"全部停止","trading-assistant.deleteAll":"全部删除","trading-assistant.symbolCount":"个币种","trading-assistant.strategyCount":"个策略","trading-assistant.groupBy":"分组方式","trading-assistant.groupByStrategy":"按策略","trading-assistant.groupBySymbol":"按标的","trading-assistant.timeframe":"周期","trading-assistant.indicator":"指标","trading-assistant.status.running":"运行中","trading-assistant.status.stopped":"已停止","trading-assistant.status.error":"错误","trading-assistant.strategyType.IndicatorStrategy":"技术指标策略","trading-assistant.strategyType.PromptBasedStrategy":"提示词策略","trading-assistant.strategyType.GridStrategy":"网格策略","trading-assistant.tabs.tradingRecords":"交易记录","trading-assistant.tabs.positions":"持仓记录","trading-assistant.tabs.equityCurve":"净值曲线","trading-assistant.form.step1":"选择指标","trading-assistant.form.step2":"交易所配置","trading-assistant.form.step3":"策略参数","trading-assistant.form.step2Params":"策略参数","trading-assistant.form.step3Signal":"信号通知","trading-assistant.form.simpleMode":"简易模式","trading-assistant.form.advancedMode":"高级模式","trading-assistant.form.simpleModeHint":"快速创建策略,使用推荐默认参数","trading-assistant.form.advancedModeHint":"自定义全部参数,适合专业用户","trading-assistant.form.simpleStep1":"选择指标 & 交易对","trading-assistant.form.simpleStep2":"启动方式","trading-assistant.form.simpleDefaultsHint":"默认参数(可展开修改)","trading-assistant.form.showAdvancedSettings":"展开高级设置","trading-assistant.form.hideAdvancedSettings":"收起高级设置","trading-assistant.form.indicator":"选择指标","trading-assistant.form.indicatorHint":"只能选择您已购买或创建的技术指标","trading-assistant.form.qdtCostHints":"使用策略将消耗QDT,请确保账户有足够的QDT余额","trading-assistant.form.indicatorDescription":"指标描述","trading-assistant.form.noDescription":"暂无描述","trading-assistant.form.indicatorParams":"指标参数","trading-assistant.form.indicatorParamsHint":"这些参数会传递给指标代码,不同策略可以使用不同的参数值","trading-assistant.form.exchange":"选择交易所","trading-assistant.form.apiKey":"API Key","trading-assistant.form.secretKey":"Secret Key","trading-assistant.form.passphrase":"Passphrase","trading-assistant.form.testConnection":"测试连接","trading-assistant.form.strategyName":"策略名称","trading-assistant.form.symbol":"交易对","trading-assistant.form.symbols":"交易对(多选)","trading-assistant.form.symbolHint":"目前仅支持加密货币交易对","trading-assistant.form.symbolHintCrypto":"加密货币:使用BTC/USDT等交易对格式","trading-assistant.form.symbolsHint":"选择多个交易对,将自动创建多个策略","trading-assistant.form.strategyType":"策略类型","trading-assistant.form.strategyTypeSingle":"单标的策略","trading-assistant.form.strategyTypeCrossSectional":"截面策略","trading-assistant.form.strategyTypeHint":"单标的策略:针对单个标的进行交易;截面策略:同时管理多个标的的组合","trading-assistant.form.symbolList":"标的列表","trading-assistant.form.symbolListHint":"选择多个标的,策略将根据指标评分进行排序和调仓","trading-assistant.form.portfolioSize":"持仓组合大小","trading-assistant.form.portfolioSizeHint":"策略同时持有的标的数量","trading-assistant.form.longRatio":"做多比例","trading-assistant.form.longRatioHint":"持仓中做多标的的比例(0-1),例如0.5表示50%做多,50%做空","trading-assistant.form.rebalanceFrequency":"调仓频率","trading-assistant.form.rebalanceDaily":"每日","trading-assistant.form.rebalanceWeekly":"每周","trading-assistant.form.rebalanceMonthly":"每月","trading-assistant.form.rebalanceFrequencyHint":"策略重新调整持仓组合的频率","trading-assistant.form.addSymbol":"添加交易对","trading-assistant.form.addSymbolTitle":"添加交易对到自选列表","trading-assistant.form.searchSymbolPlaceholder":"输入代码搜索,如 BTC、AAPL","trading-assistant.form.noSymbolFound":"未找到匹配的交易对","trading-assistant.form.canDirectAdd":"可以直接输入代码添加","trading-assistant.form.searchSymbolHint":"输入代码搜索交易对","trading-assistant.form.confirmAdd":"确认添加","trading-assistant.form.addSymbolSuccess":"交易对添加成功","trading-assistant.form.addSymbolFailed":"添加失败,请重试","trading-assistant.form.pleaseSelectSymbol":"请选择或输入交易对","trading-assistant.form.initialCapital":"投入金额","trading-assistant.form.marketType":"市场类型","trading-assistant.form.marketTypeFutures":"合约","trading-assistant.form.marketTypeSpot":"现货","trading-assistant.form.marketTypeHint":"合约支持双向交易和杠杆,现货仅支持做多且杠杆固定为1倍","trading-assistant.form.leverage":"杠杆倍数","trading-assistant.form.leverageHint":"合约:1-125倍,现货:固定1倍","trading-assistant.form.spotLeverageFixed":"现货交易杠杆固定为1倍","trading-assistant.form.spotOnlyLongHint":"现货交易仅支持做多","trading-assistant.form.tradeDirection":"交易方向","trading-assistant.form.tradeDirectionLong":"仅做多","trading-assistant.form.tradeDirectionShort":"仅做空","trading-assistant.form.tradeDirectionBoth":"双向交易","trading-assistant.form.timeframe":"时间周期","trading-assistant.form.klinePeriod":"K线周期","trading-assistant.form.timeframe1m":"1分钟","trading-assistant.form.timeframe5m":"5分钟","trading-assistant.form.timeframe15m":"15分钟","trading-assistant.form.timeframe30m":"30分钟","trading-assistant.form.timeframe1H":"1小时","trading-assistant.form.timeframe4H":"4小时","trading-assistant.form.timeframe1D":"1天","trading-assistant.form.selectStrategyType":"选择策略类型","trading-assistant.form.indicatorStrategy":"指标策略","trading-assistant.form.indicatorStrategyDesc":"基于技术指标的自动化交易策略","trading-assistant.form.aiStrategy":"AI策略","trading-assistant.form.aiStrategyDesc":"基于AI智能决策的自动化交易策略","trading-assistant.form.enableAiFilter":"启用AI智能决策过滤","trading-assistant.form.enableAiFilterHint":"启用后,指标信号将经过AI智能过滤,提高交易质量","trading-assistant.form.aiFilterPrompt":"自定义提示词","trading-assistant.form.aiFilterPromptHint":"为AI过滤提供自定义指令,留空则使用系统默认","trading-assistant.form.executionMode":"执行模式","trading-assistant.form.executionModeSignal":"仅信号通知","trading-assistant.form.executionModeLive":"实盘自动交易","trading-assistant.form.liveTradingCryptoOnlyHint":"实盘交易功能仅支持加密货币市场","trading-assistant.form.liveTradingNotSupportedHint":"当前市场不支持实盘交易","trading-assistant.form.broker":"券商","trading-assistant.form.localDeploymentRequired":"⚠️ 需要本地部署运行","trading-assistant.form.localDeploymentHint":"IBKR 和 MT5 属于外挂类实盘接口,需要本地部署运行 QuantDinger,不支持云端 SaaS 模式。请确保您已在本地安装并配置相关交易软件(TWS/IB Gateway 或 MT5 终端)。","trading-assistant.form.ibkrConnectionTitle":"盈透证券连接配置","trading-assistant.form.ibkrConnectionHint":"请确保 TWS 或 IB Gateway 已启动并启用 API 连接","trading-assistant.validation.brokerRequired":"请选择券商","trading-assistant.placeholders.selectBroker":"选择券商","trading-assistant.brokerNames":{ibkr:"盈透证券 (Interactive Brokers)",mt5:"MetaTrader 5 (MT5)",mt4:"MetaTrader 4 (MT4)",futu:"富途证券 (Futu)",tiger:"老虎证券 (Tiger Brokers)",td:"TD Ameritrade",schwab:"Charles Schwab"},"trading-assistant.form.ibkrHost":"主机地址","trading-assistant.form.ibkrPort":"端口","trading-assistant.form.ibkrPortHint":"TWS实盘:7497, TWS模拟:7496, Gateway实盘:4001, Gateway模拟:4002","trading-assistant.form.ibkrClientId":"客户端ID","trading-assistant.form.ibkrAccount":"账户号","trading-assistant.form.ibkrAccountHint":"留空自动选择第一个账户,多账户用户可指定账户号","trading-assistant.placeholders.ibkrAccount":"可选,如 U1234567","trading-assistant.exchange.ibkrConnectionSuccess":"盈透证券连接成功","trading-assistant.exchange.ibkrConnectionFailed":"盈透证券连接失败,请检查 TWS/Gateway 是否运行","trading-assistant.exchange.checkLocalDeployment":"请确认您已在本地部署运行,云端 SaaS 不支持此类外挂实盘","trading-assistant.form.forexBroker":"外汇券商","trading-assistant.form.mt5ConnectionTitle":"MetaTrader 5 连接配置","trading-assistant.form.mt5ConnectionHint":"请确保 MT5 终端已启动并登录(仅支持 Windows)","trading-assistant.form.mt5Server":"服务器","trading-assistant.form.mt5ServerHint":"券商服务器名称(如:ICMarkets-Demo)","trading-assistant.form.mt5Login":"账户号","trading-assistant.form.mt5Password":"密码","trading-assistant.form.mt5TerminalPath":"MT5 终端路径(可选)","trading-assistant.form.mt5TerminalPathHint":"如果 MT5 终端未安装在默认位置,请指定 terminal64.exe 的完整路径(例如:C:\\Program Files\\MetaTrader 5\\terminal64.exe)","trading-assistant.placeholders.mt5Server":"例如:ICMarkets-Demo","trading-assistant.placeholders.mt5Login":"例如:12345678","trading-assistant.placeholders.mt5Password":"您的 MT5 密码","trading-assistant.placeholders.mt5TerminalPath":"例如:C:\\Program Files\\MetaTrader 5\\terminal64.exe","trading-assistant.validation.mt5ServerRequired":"请输入 MT5 服务器","trading-assistant.validation.mt5LoginRequired":"请输入 MT5 账户号","trading-assistant.validation.mt5PasswordRequired":"请输入 MT5 密码","trading-assistant.validation.portfolioSizeRequired":"请输入持仓组合大小","trading-assistant.validation.longRatioRequired":"请输入做多比例","trading-assistant.exchange.mt5ConnectionSuccess":"MT5 连接成功","trading-assistant.exchange.mt5ConnectionFailed":"MT5 连接失败,请检查终端是否运行","trading-assistant.form.notifyChannels":"通知渠道","trading-assistant.form.notifyChannelsHint":"选择信号触发时的通知方式","trading-assistant.form.notifyEmail":"邮箱地址","trading-assistant.form.notifyPhone":"手机号码","trading-assistant.form.notifyTelegram":"Telegram ID","trading-assistant.form.notifyDiscord":"Discord Webhook","trading-assistant.form.notifyWebhook":"Webhook 地址","trading-assistant.form.liveTradingConfigTitle":"实盘交易配置","trading-assistant.form.liveTradingConfigHint":"请填写交易所API信息,实盘交易将使用您的API进行真实交易","trading-assistant.form.savedCredential":"已保存的凭证","trading-assistant.form.savedCredentialHint":"选择已保存的交易所凭证,自动填充API配置","trading-assistant.form.saveCredential":"保存此凭证以便下次使用","trading-assistant.form.credentialName":"凭证名称","trading-assistant.validation.strategyTypeRequired":"请选择策略类型","trading-assistant.form.advancedSettings":"高级设置","trading-assistant.form.orderMode":"下单模式","trading-assistant.form.orderModeMaker":"挂单(Maker)","trading-assistant.form.orderModeTaker":"市价(Taker)","trading-assistant.form.orderModeHint":"挂单模式使用限价单,手续费更低;市价模式立即成交,手续费较高","trading-assistant.form.makerWaitSec":"挂单等待时间(秒)","trading-assistant.form.makerWaitSecHint":"挂单后等待成交的时间,超时后取消并重试","trading-assistant.form.makerRetries":"挂单重试次数","trading-assistant.form.makerRetriesHint":"挂单未成交时的最大重试次数","trading-assistant.form.fallbackToMarket":"挂单失败降级市价","trading-assistant.form.fallbackToMarketHint":"开/平仓挂单未成交时,是否降级为市价单以确保成交","trading-assistant.form.marginMode":"保证金模式","trading-assistant.form.marginModeCross":"全仓","trading-assistant.form.marginModeIsolated":"逐仓","trading-assistant.form.stopLossPct":"止损比例(%)","trading-assistant.form.stopLossPctHint":"设置止损百分比,0表示不启用止损","trading-assistant.form.takeProfitPct":"止盈比例(%)","trading-assistant.form.takeProfitPctHint":"设置止盈百分比,0表示不启用止盈","trading-assistant.form.signalMode":"信号模式","trading-assistant.form.signalModeConfirmed":"确认模式","trading-assistant.form.signalModeAggressive":"激进模式","trading-assistant.form.signalModeHint":"确认模式:仅检查已完成的K线;激进模式:也检查正在形成的K线","trading-assistant.form.cancel":"取消","trading-assistant.form.prev":"上一步","trading-assistant.form.next":"下一步","trading-assistant.form.confirmCreate":"确认创建","trading-assistant.form.confirmEdit":"确认修改","trading-assistant.messages.createSuccess":"策略创建成功","trading-assistant.messages.createFailed":"创建策略失败","trading-assistant.messages.updateSuccess":"策略更新成功","trading-assistant.messages.updateFailed":"更新策略失败","trading-assistant.messages.deleteSuccess":"策略删除成功","trading-assistant.messages.deleteFailed":"删除策略失败","trading-assistant.messages.startSuccess":"策略启动成功","trading-assistant.messages.startFailed":"启动策略失败","trading-assistant.messages.stopSuccess":"策略停止成功","trading-assistant.messages.stopFailed":"停止策略失败","trading-assistant.messages.loadFailed":"获取策略列表失败","trading-assistant.messages.runningWarning":"策略运行中,请先停止策略后再修改","trading-assistant.messages.deleteConfirmWithName":"确定要删除策略“{name}”吗?此操作不可恢复。","trading-assistant.messages.deleteConfirm":"确定要删除该策略吗?此操作不可恢复。","trading-assistant.messages.loadTradesFailed":"获取交易记录失败","trading-assistant.messages.loadPositionsFailed":"获取持仓记录失败","trading-assistant.messages.loadEquityFailed":"获取净值曲线失败","trading-assistant.messages.loadIndicatorsFailed":"加载指标列表失败,请稍后重试","trading-assistant.messages.spotLimitations":"现货交易已自动设置为仅做多、1倍杠杆","trading-assistant.messages.autoFillApiConfig":"已自动填充该交易所的历史API配置","trading-assistant.messages.batchCreateSuccess":"成功创建 {count} 个策略","trading-assistant.messages.batchStartSuccess":"成功启动 {count} 个策略","trading-assistant.messages.batchStartFailed":"批量启动策略失败","trading-assistant.messages.batchStopSuccess":"成功停止 {count} 个策略","trading-assistant.messages.batchStopFailed":"批量停止策略失败","trading-assistant.messages.batchDeleteSuccess":"成功删除 {count} 个策略","trading-assistant.messages.batchDeleteFailed":"批量删除策略失败","trading-assistant.messages.batchDeleteConfirm":'确定要删除策略组"{name}"下的 {count} 个策略吗?此操作不可恢复。',"trading-assistant.notify.browser":"浏览器通知","trading-assistant.notify.email":"邮箱","trading-assistant.notify.phone":"短信","trading-assistant.notify.telegram":"Telegram","trading-assistant.notify.discord":"Discord","trading-assistant.notify.webhook":"Webhook","trading-assistant.placeholders.selectIndicator":"请选择指标","trading-assistant.placeholders.selectExchange":"请选择交易所","trading-assistant.placeholders.inputApiKey":"请输入API Key","trading-assistant.placeholders.inputSecretKey":"请输入Secret Key","trading-assistant.placeholders.inputPassphrase":"请输入Passphrase","trading-assistant.placeholders.inputStrategyName":"请输入策略名称","trading-assistant.placeholders.selectSymbol":"请选择交易对","trading-assistant.placeholders.selectSymbols":"请选择交易对(支持多选)","trading-assistant.placeholders.selectTimeframe":"请选择时间周期","trading-assistant.placeholders.selectKlinePeriod":"请选择K线周期","trading-assistant.placeholders.inputAiFilterPrompt":"请输入自定义提示词(可选)","trading-assistant.placeholders.selectSavedCredential":"请选择已保存的凭证","trading-assistant.placeholders.inputEmail":"请输入邮箱地址","trading-assistant.placeholders.inputPhone":"请输入手机号码","trading-assistant.placeholders.inputTelegram":"请输入Telegram ID或Chat ID","trading-assistant.placeholders.inputDiscord":"请输入Discord Webhook地址","trading-assistant.placeholders.inputWebhook":"请输入Webhook地址","trading-assistant.placeholders.inputCredentialName":"请输入凭证名称(如:我的OKX账户)","trading-assistant.validation.indicatorRequired":"请选择指标","trading-assistant.validation.exchangeRequired":"请选择交易所","trading-assistant.validation.apiKeyRequired":"请输入API Key","trading-assistant.validation.secretKeyRequired":"请输入Secret Key","trading-assistant.validation.passphraseRequired":"请输入Passphrase","trading-assistant.validation.exchangeConfigIncomplete":"请填写完整的交易所配置信息","trading-assistant.validation.testConnectionRequired":'请先点击"测试连接"按钮并确保连接成功',"trading-assistant.validation.testConnectionFailed":"连接测试失败,请检查配置后重新测试","trading-assistant.validation.credentialRequired":"请先在个人中心添加并测试交易所凭证","trading-assistant.validation.strategyNameRequired":"请输入策略名称","trading-assistant.validation.symbolRequired":"请选择交易对","trading-assistant.validation.symbolsRequired":"请至少选择一个交易对","trading-assistant.validation.emailInvalid":"请输入有效的邮箱地址","trading-assistant.validation.notifyChannelRequired":"请至少选择一个通知渠道","trading-assistant.validation.initialCapitalRequired":"请输入投入金额","trading-assistant.validation.leverageRequired":"请输入杠杆倍数","trading-assistant.table.time":"时间","trading-assistant.table.type":"类型","trading-assistant.table.price":"价格","trading-assistant.table.amount":"数量","trading-assistant.table.value":"金额","trading-assistant.table.commission":"手续费","trading-assistant.table.symbol":"交易对","trading-assistant.table.side":"方向","trading-assistant.table.size":"持仓数量","trading-assistant.table.entryPrice":"开仓价格","trading-assistant.table.currentPrice":"当前价格","trading-assistant.table.unrealizedPnl":"未实现盈亏","trading-assistant.table.pnlPercent":"盈亏比例","trading-assistant.table.buy":"买入","trading-assistant.table.sell":"卖出","trading-assistant.table.long":"做多","trading-assistant.table.short":"做空","trading-assistant.table.noPositions":"暂无持仓","trading-assistant.detail.title":"策略详情","trading-assistant.detail.strategyName":"策略名称","trading-assistant.detail.strategyType":"策略类型","trading-assistant.detail.status":"状态","trading-assistant.detail.tradingMode":"交易模式","trading-assistant.detail.exchange":"交易所","trading-assistant.detail.initialCapital":"初始资金","trading-assistant.detail.totalInvestment":"总投入金额","trading-assistant.detail.currentEquity":"当前净值","trading-assistant.detail.totalPnl":"总盈亏","trading-assistant.detail.indicatorName":"指标名称","trading-assistant.detail.maxLeverage":"最大杠杆","trading-assistant.detail.decideInterval":"决策间隔","trading-assistant.detail.symbols":"交易标的","trading-assistant.detail.createdAt":"创建时间","trading-assistant.detail.updatedAt":"更新时间","trading-assistant.detail.llmConfig":"AI模型配置","trading-assistant.detail.exchangeConfig":"交易所配置","trading-assistant.detail.provider":"提供商","trading-assistant.detail.modelId":"模型ID","trading-assistant.detail.close":"关闭","trading-assistant.detail.loadFailed":"获取策略详情失败","trading-assistant.equity.noData":"暂无净值数据","trading-assistant.equity.equity":"净值","trading-assistant.exchange.tradingMode":"交易模式","trading-assistant.exchange.virtual":"模拟交易","trading-assistant.exchange.live":"实盘交易","trading-assistant.exchange.selectExchange":"选择交易所","trading-assistant.exchange.walletAddress":"钱包地址","trading-assistant.exchange.walletAddressPlaceholder":"请输入钱包地址(以0x开头)","trading-assistant.exchange.privateKey":"私钥","trading-assistant.exchange.privateKeyPlaceholder":"请输入私钥(64字符)","trading-assistant.exchange.testConnection":"测试连接","trading-assistant.exchange.connectionSuccess":"连接成功","trading-assistant.exchange.connectionFailed":"连接失败","trading-assistant.exchange.testFailed":"连接测试失败","trading-assistant.exchange.fillComplete":"请填写完整的交易所配置信息","trading-assistant.exchange.ipWhitelistTip":"请在交易所API设置中将以下IP添加到白名单:","trading-assistant.strategyTypeOptions.ai":"AI驱动策略","trading-assistant.strategyTypeOptions.indicator":"技术指标策略","trading-assistant.strategyTypeOptions.aiDeveloping":"AI驱动策略功能开发中,敬请期待","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"AI驱动策略功能正在开发中","trading-assistant.indicatorType.trend":"趋势","trading-assistant.indicatorType.momentum":"动量","trading-assistant.indicatorType.volatility":"波动","trading-assistant.indicatorType.volume":"成交量","trading-assistant.indicatorType.custom":"自定义","trading-assistant.exchangeNames":{okx:"OKX",binance:"币安",hyperliquid:"Hyperliquid",blockchaincom:"Blockchain.com",coinbaseexchange:"Coinbase",gate:"Gate.io",mexc:"MEXC",kraken:"Kraken",bitfinex:"Bitfinex",bybit:"Bybit",kucoin:"KuCoin",huobi:"火币",bitget:"Bitget",bitmex:"BitMEX",deribit:"Deribit",phemex:"Phemex",bitmart:"BitMart",bitstamp:"Bitstamp",bittrex:"Bittrex",poloniex:"Poloniex",gemini:"Gemini",cryptocom:"Crypto.com",bitflyer:"bitFlyer",upbit:"Upbit",bithumb:"Bithumb",coinone:"Coinone",zb:"ZB",lbank:"LBank",bibox:"Bibox",bigone:"BigONE",bitrue:"Bitrue",coinex:"CoinEx",digifinex:"DigiFinex",ftx:"FTX",ftxus:"FTX US",binanceus:"Binance US",binancecoinm:"Binance COIN-M",binanceusdm:"Binance USDⓈ-M",ibkr:"盈透证券 (IBKR)",deepcoin:"Deepcoin"},"ai-trading-assistant.title":"AI交易助手","ai-trading-assistant.strategyList":"策略列表","ai-trading-assistant.createStrategy":"创建策略","ai-trading-assistant.noStrategy":"暂无策略","ai-trading-assistant.selectStrategy":"请从左侧选择一个策略查看详情","ai-trading-assistant.startStrategy":"启动策略","ai-trading-assistant.stopStrategy":"停止策略","ai-trading-assistant.editStrategy":"编辑策略","ai-trading-assistant.deleteStrategy":"删除策略","ai-trading-assistant.status.running":"运行中","ai-trading-assistant.status.stopped":"已停止","ai-trading-assistant.status.error":"错误","ai-trading-assistant.tabs.tradingRecords":"交易记录","ai-trading-assistant.tabs.positions":"持仓记录","ai-trading-assistant.tabs.aiDecisions":"AI决策记录","ai-trading-assistant.tabs.equityCurve":"净值曲线","ai-trading-assistant.form.createTitle":"创建AI交易策略","ai-trading-assistant.form.editTitle":"编辑AI交易策略","ai-trading-assistant.form.strategyName":"策略名称","ai-trading-assistant.form.modelId":"AI模型","ai-trading-assistant.form.modelIdHint":"使用系统OpenRouter服务,无需配置API Key","ai-trading-assistant.form.decideInterval":"决策间隔","ai-trading-assistant.form.decideInterval5m":"5分钟","ai-trading-assistant.form.decideInterval10m":"10分钟","ai-trading-assistant.form.decideInterval30m":"30分钟","ai-trading-assistant.form.decideInterval1h":"1小时","ai-trading-assistant.form.decideInterval4h":"4小时","ai-trading-assistant.form.decideInterval1d":"1天","ai-trading-assistant.form.decideInterval1w":"1周","ai-trading-assistant.form.decideIntervalHint":"AI做决策的时间间隔","ai-trading-assistant.form.runPeriod":"运行周期","ai-trading-assistant.form.runPeriodHint":"策略运行的开始时间和结束时间","ai-trading-assistant.form.startDate":"开始日期","ai-trading-assistant.form.endDate":"结束日期","ai-trading-assistant.form.qdtCostTitle":"QDT扣费说明","ai-trading-assistant.form.qdtCostHint":"每次AI决策将扣费 {cost} 个QDT,请确保账户有足够的QDT余额。策略运行期间,每次决策都会实时扣费。","ai-trading-assistant.form.apiKey":"API Key","ai-trading-assistant.form.exchange":"选择交易所","ai-trading-assistant.form.secretKey":"Secret Key","ai-trading-assistant.form.passphrase":"Passphrase","ai-trading-assistant.form.testConnection":"测试连接","ai-trading-assistant.form.symbol":"交易对","ai-trading-assistant.form.symbolHint":"选择要交易的交易对","ai-trading-assistant.form.initialCapital":"投入金额(保证金)","ai-trading-assistant.form.leverage":"杠杆倍数","ai-trading-assistant.form.timeframe":"时间周期","ai-trading-assistant.form.timeframe1m":"1分钟","ai-trading-assistant.form.timeframe5m":"5分钟","ai-trading-assistant.form.timeframe15m":"15分钟","ai-trading-assistant.form.timeframe30m":"30分钟","ai-trading-assistant.form.timeframe1H":"1小时","ai-trading-assistant.form.timeframe4H":"4小时","ai-trading-assistant.form.timeframe1D":"1天","ai-trading-assistant.form.marketType":"市场类型","ai-trading-assistant.form.marketTypeFutures":"合约","ai-trading-assistant.form.marketTypeSpot":"现货","ai-trading-assistant.form.totalPnl":"总盈亏","ai-trading-assistant.form.customPrompt":"自定义提示词","ai-trading-assistant.form.customPromptHint":"可选,用于自定义AI的交易策略和决策逻辑","ai-trading-assistant.form.cancel":"取消","ai-trading-assistant.form.prev":"上一步","ai-trading-assistant.form.next":"下一步","ai-trading-assistant.form.confirmCreate":"确认创建","ai-trading-assistant.form.confirmEdit":"确认修改","ai-trading-assistant.messages.createSuccess":"策略创建成功","ai-trading-assistant.messages.createFailed":"创建策略失败","ai-trading-assistant.messages.updateSuccess":"策略更新成功","ai-trading-assistant.messages.updateFailed":"更新策略失败","ai-trading-assistant.messages.deleteSuccess":"策略删除成功","ai-trading-assistant.messages.deleteFailed":"删除策略失败","ai-trading-assistant.messages.startSuccess":"策略启动成功","ai-trading-assistant.messages.startFailed":"启动策略失败","ai-trading-assistant.messages.stopSuccess":"策略停止成功","ai-trading-assistant.messages.stopFailed":"停止策略失败","ai-trading-assistant.messages.loadFailed":"获取策略列表失败","ai-trading-assistant.messages.loadDecisionsFailed":"获取AI决策记录失败","ai-trading-assistant.messages.deleteConfirm":"确定要删除该策略吗?此操作不可恢复。","ai-trading-assistant.placeholders.inputStrategyName":"请输入策略名称","ai-trading-assistant.placeholders.selectModelId":"请选择AI模型","ai-trading-assistant.placeholders.selectDecideInterval":"请选择决策间隔","ai-trading-assistant.placeholders.startTime":"开始时间","ai-trading-assistant.placeholders.endTime":"结束时间","ai-trading-assistant.placeholders.inputApiKey":"请输入API Key","ai-trading-assistant.placeholders.selectExchange":"请选择交易所","ai-trading-assistant.placeholders.inputSecretKey":"请输入Secret Key","ai-trading-assistant.placeholders.inputPassphrase":"请输入Passphrase","ai-trading-assistant.placeholders.selectSymbol":"请选择交易对,如:BTC/USDT","ai-trading-assistant.placeholders.selectTimeframe":"请选择时间周期","ai-trading-assistant.placeholders.inputCustomPrompt":"请输入自定义提示词(可选)","ai-trading-assistant.validation.strategyNameRequired":"请输入策略名称","ai-trading-assistant.validation.modelIdRequired":"请选择AI模型","ai-trading-assistant.validation.runPeriodRequired":"请选择运行周期","ai-trading-assistant.validation.apiKeyRequired":"请输入API Key","ai-trading-assistant.validation.exchangeRequired":"请选择交易所","ai-trading-assistant.validation.secretKeyRequired":"请输入Secret Key","ai-trading-assistant.validation.symbolRequired":"请选择交易对","ai-trading-assistant.validation.initialCapitalRequired":"请输入投入金额","ai-trading-assistant.table.time":"时间","ai-trading-assistant.table.type":"类型","ai-trading-assistant.table.price":"价格","ai-trading-assistant.table.amount":"数量","ai-trading-assistant.table.value":"金额","ai-trading-assistant.table.symbol":"交易对","ai-trading-assistant.table.side":"方向","ai-trading-assistant.table.size":"持仓数量","ai-trading-assistant.table.entryPrice":"开仓价格","ai-trading-assistant.table.currentPrice":"当前价格","ai-trading-assistant.table.unrealizedPnl":"未实现盈亏","ai-trading-assistant.table.profit":"盈亏","ai-trading-assistant.table.openLong":"开多","ai-trading-assistant.table.closeLong":"平多","ai-trading-assistant.table.openShort":"开空","ai-trading-assistant.table.closeShort":"平空","ai-trading-assistant.table.addLong":"加多","ai-trading-assistant.table.addShort":"加空","ai-trading-assistant.table.closeShortProfit":"平空止盈","ai-trading-assistant.table.closeShortStop":"平空止损","ai-trading-assistant.table.closeLongProfit":"平多止盈","ai-trading-assistant.table.closeLongStop":"平多止损","ai-trading-assistant.table.buy":"买入","ai-trading-assistant.table.sell":"卖出","ai-trading-assistant.table.long":"做多","ai-trading-assistant.table.short":"做空","ai-trading-assistant.table.hold":"持有","ai-trading-assistant.table.reasoning":"分析理由","ai-trading-assistant.table.decisions":"决策","ai-trading-assistant.table.riskAssessment":"风险评估","ai-trading-assistant.table.confidence":"置信度","ai-trading-assistant.table.totalRecords":"共 {total} 条记录","ai-trading-assistant.table.noPositions":"暂无持仓","ai-trading-assistant.detail.title":"策略详情","ai-trading-assistant.equity.noData":"暂无净值数据","ai-trading-assistant.equity.equity":"净值","ai-trading-assistant.exchange.testFailed":"连接测试失败","ai-trading-assistant.exchange.connectionSuccess":"连接成功","ai-trading-assistant.exchange.connectionFailed":"连接失败","ai-trading-assistant.form.advancedSettings":"高级设置","ai-trading-assistant.form.orderMode":"下单模式","ai-trading-assistant.form.orderModeMaker":"挂单(Maker)","ai-trading-assistant.form.orderModeTaker":"市价(Taker)","ai-trading-assistant.form.orderModeHint":"挂单模式使用限价单,手续费更低;市价模式立即成交,手续费较高","ai-trading-assistant.form.makerWaitSec":"挂单等待时间(秒)","ai-trading-assistant.form.makerWaitSecHint":"挂单后等待成交的时间,超时后取消并重试","ai-trading-assistant.form.makerRetries":"挂单重试次数","ai-trading-assistant.form.makerRetriesHint":"挂单未成交时的最大重试次数","ai-trading-assistant.form.fallbackToMarket":"挂单失败降级市价","ai-trading-assistant.form.fallbackToMarketHint":"开/平仓挂单未成交时,是否降级为市价单以确保成交","ai-trading-assistant.form.marginMode":"保证金模式","ai-trading-assistant.form.marginModeCross":"全仓","ai-trading-assistant.form.marginModeIsolated":"逐仓","ai-analysis.title":"量子交易引擎","ai-analysis.system.online":"在线","ai-analysis.system.agents":"智能体","ai-analysis.system.active":"活跃","ai-analysis.system.stage":"阶段","ai-analysis.panel.roster":"智能体阵容","ai-analysis.panel.thinking":"思考中...","ai-analysis.panel.done":"完成","ai-analysis.panel.standby":"待机","ai-analysis.input.title":"量子交易引擎","ai-analysis.input.placeholder":"选择目标资产 (如 BTC/USDT)","ai-analysis.input.watchlist":"自选股","ai-analysis.input.start":"开始分析","ai-analysis.input.recent":"最近任务:","ai-analysis.vis.stage":"阶段","ai-analysis.vis.processing":"处理中","ai-analysis.result.complete":"分析完成","ai-analysis.result.signal":"最终信号","ai-analysis.result.confidence":"置信度:","ai-analysis.result.new":"新分析","ai-analysis.result.full":"查看完整报告","ai-analysis.logs.title":"系统日志","ai-analysis.modal.title":"机密报告","ai-analysis.modal.fundamental":"基本面分析","ai-analysis.modal.technical":"技术面分析","ai-analysis.modal.sentiment":"情绪面分析","ai-analysis.modal.risk":"风险评估","ai-analysis.stage.idle":"待机","ai-analysis.stage.1":"第一阶段:多维分析","ai-analysis.stage.2":"第二阶段:多空辩论","ai-analysis.stage.3":"第三阶段:战略规划","ai-analysis.stage.4":"第四阶段:风控审查","ai-analysis.stage.complete":"完成","ai-analysis.agent.investment_director":"投资总监","ai-analysis.agent.role.investment_director":"综合分析 & 最终结论","ai-analysis.agent.market":"市场分析师","ai-analysis.agent.role.market":"技术 & 市场数据","ai-analysis.agent.fundamental":"基本面分析师","ai-analysis.agent.role.fundamental":"财务 & 估值","ai-analysis.agent.technical":"技术分析师","ai-analysis.agent.role.technical":"技术指标 & 图表","ai-analysis.agent.news":"新闻分析师","ai-analysis.agent.role.news":"全球新闻过滤","ai-analysis.agent.sentiment":"情绪分析师","ai-analysis.agent.role.sentiment":"社交 & 情绪","ai-analysis.agent.risk":"风险分析师","ai-analysis.agent.role.risk":"基础风险检查","ai-analysis.agent.bull":"看涨研究员","ai-analysis.agent.role.bull":"增长催化剂挖掘","ai-analysis.agent.bear":"看跌研究员","ai-analysis.agent.role.bear":"风险 & 缺陷挖掘","ai-analysis.agent.manager":"研究经理","ai-analysis.agent.role.manager":"辩论主持人","ai-analysis.agent.trader":"交易员","ai-analysis.agent.role.trader":"执行策略师","ai-analysis.agent.risky":"激进分析师","ai-analysis.agent.role.risky":"激进策略","ai-analysis.agent.neutral":"平衡分析师","ai-analysis.agent.role.neutral":"平衡策略","ai-analysis.agent.safe":"保守分析师","ai-analysis.agent.role.safe":"保守策略","ai-analysis.agent.cro":"风控经理 (CRO)","ai-analysis.agent.role.cro":"最终决策权威","ai-analysis.script.market":"正在从主要交易所获取 OHLCV 数据...","ai-analysis.script.fundamental":"正在检索季度财务报告...","ai-analysis.script.technical":"正在分析技术指标和图表形态...","ai-analysis.script.news":"正在扫描全球财经新闻...","ai-analysis.script.sentiment":"正在分析社交媒体趋势...","ai-analysis.script.risk":"正在计算历史波动率...","invite.inviteLink":"邀请链接","invite.copy":"复制链接","invite.copySuccess":"复制成功!","invite.copyFailed":"复制失败,请手动复制","invite.noInviteLink":"邀请链接未生成","invite.totalInvites":"累计邀请","invite.totalReward":"累计奖励","invite.rules":"邀请规则","invite.rule1":"每成功邀请一位好友注册,您将获得奖励","invite.rule2":"被邀请的好友完成首次交易,您将获得额外奖励","invite.rule3":"邀请奖励将直接发放到您的账户","invite.inviteList":"邀请列表","invite.tasks":"任务中心","invite.inviteeName":"被邀请人","invite.inviteTime":"邀请时间","invite.status":"状态","invite.reward":"奖励","invite.active":"活跃","invite.inactive":"未激活","invite.completed":"已完成","invite.claimed":"已领取","invite.pending":"待完成","invite.goToTask":"去完成","invite.claimReward":"领取奖励","invite.verify":"验证完成","invite.verifySuccess":"验证成功!任务已完成","invite.verifyNotCompleted":"任务尚未完成,请先完成任务","invite.verifyFailed":"验证失败,请稍后重试","invite.claimSuccess":"成功领取 {reward} QDT!","invite.claimFailed":"领取失败,请稍后重试","invite.totalRecords":"共 {total} 条记录","invite.task.twitter.title":"转发推文到 X (Twitter)","invite.task.twitter.desc":"分享我们的官方推文到您的 X (Twitter) 账号","invite.task.youtube.title":"关注我们的 YouTube 频道","invite.task.youtube.desc":"订阅并关注我们的 YouTube 官方频道","invite.task.telegram.title":"加入 Telegram 群组","invite.task.telegram.desc":"加入我们的官方 Telegram 社区群组","invite.task.discord.title":"加入 Discord 服务器","invite.task.discord.desc":"加入我们的 Discord 社区服务器",message:"-","layouts.usermenu.dialog.title":"信息","layouts.usermenu.dialog.content":"您确定要注销吗?","layouts.userLayout.title":"于不确定中,寻见真理","settings.title":"系统设置","settings.description":"配置应用设置、API密钥和系统偏好","settings.save":"保存设置","settings.reset":"重置","settings.saveSuccess":"设置保存成功","settings.saveFailed":"保存设置失败","settings.loadFailed":"加载配置失败","settings.openrouterBalance":"OpenRouter 账户余额","settings.queryBalance":"查询余额","settings.balanceUsage":"已使用","settings.balanceRemaining":"剩余额度","settings.balanceLimit":"总限额","settings.balanceQuerySuccess":"余额查询成功","settings.balanceQueryFailed":"余额查询失败","settings.balanceNotQueried":'点击"查询余额"获取账户信息',"settings.default":"默认","settings.pleaseSelect":"请选择","settings.inputApiKey":"请输入密钥","settings.getApi":"获取API","settings.link.getApi":"获取API","settings.link.getApiKey":"获取API Key","settings.link.getToken":"获取Token","settings.link.createBot":"创建Bot","settings.link.viewModels":"查看模型列表","settings.link.freeRegister":"免费注册","settings.link.supportedExchanges":"支持的交易所","settings.link.applyApi":"申请API","settings.link.createSearchEngine":"创建搜索引擎","settings.link.getTurnstileKey":"获取Turnstile密钥","settings.link.getGoogleCredentials":"获取Google凭据","settings.link.getGithubCredentials":"获取GitHub凭据","settings.restartRequired":"配置已保存,部分配置需要重启Python服务才能生效","settings.copyRestartCmd":"复制重启命令","settings.copySuccess":"复制成功","settings.copyFailed":"复制失败","settings.group.server":"服务配置","settings.group.auth":"安全认证","settings.group.ai":"AI/LLM配置","settings.group.trading":"实盘交易","settings.group.strategy":"策略执行","settings.group.data_source":"数据源","settings.group.notification":"通知推送","settings.group.email":"邮件配置","settings.group.sms":"短信配置","settings.group.agent":"AI Agent","settings.group.network":"网络代理","settings.group.search":"搜索配置","settings.group.security":"注册与安全","settings.group.app":"应用配置","settings.field.SECRET_KEY":"Secret Key","settings.field.ADMIN_USER":"管理员用户名","settings.field.ADMIN_PASSWORD":"管理员密码","settings.field.ADMIN_EMAIL":"管理员邮箱","settings.field.ENABLE_REGISTRATION":"允许注册","settings.field.TURNSTILE_SITE_KEY":"Turnstile Site Key","settings.field.TURNSTILE_SECRET_KEY":"Turnstile Secret Key","settings.field.FRONTEND_URL":"前端URL","settings.field.GOOGLE_CLIENT_ID":"Google Client ID","settings.field.GOOGLE_CLIENT_SECRET":"Google Client Secret","settings.field.GOOGLE_REDIRECT_URI":"Google回调URL","settings.field.GITHUB_CLIENT_ID":"GitHub Client ID","settings.field.GITHUB_CLIENT_SECRET":"GitHub Client Secret","settings.field.GITHUB_REDIRECT_URI":"GitHub回调URL","settings.field.SECURITY_IP_MAX_ATTEMPTS":"IP最大失败次数","settings.field.SECURITY_IP_WINDOW_MINUTES":"IP统计窗口(分钟)","settings.field.SECURITY_IP_BLOCK_MINUTES":"IP封禁时长(分钟)","settings.field.SECURITY_ACCOUNT_MAX_ATTEMPTS":"账户最大失败次数","settings.field.SECURITY_ACCOUNT_WINDOW_MINUTES":"账户统计窗口(分钟)","settings.field.SECURITY_ACCOUNT_BLOCK_MINUTES":"账户锁定时长(分钟)","settings.field.VERIFICATION_CODE_EXPIRE_MINUTES":"验证码有效期(分钟)","settings.field.VERIFICATION_CODE_RATE_LIMIT":"验证码发送间隔(秒)","settings.field.VERIFICATION_CODE_IP_HOURLY_LIMIT":"IP每小时验证码上限","settings.field.VERIFICATION_CODE_MAX_ATTEMPTS":"验证码最大尝试次数","settings.field.VERIFICATION_CODE_LOCK_MINUTES":"验证码锁定时长(分钟)","settings.field.PYTHON_API_HOST":"监听地址","settings.field.PYTHON_API_PORT":"端口","settings.field.PYTHON_API_DEBUG":"调试模式","settings.field.ENABLE_PENDING_ORDER_WORKER":"启用订单处理Worker","settings.field.PENDING_ORDER_STALE_SEC":"订单超时时间(秒)","settings.field.ORDER_MODE":"下单模式","settings.field.MAKER_WAIT_SEC":"限价单等待时间(秒)","settings.field.MAKER_OFFSET_BPS":"限价单价格偏移(基点)","settings.field.SIGNAL_WEBHOOK_URL":"Webhook URL","settings.field.SIGNAL_WEBHOOK_TOKEN":"Webhook Token","settings.field.SIGNAL_NOTIFY_TIMEOUT_SEC":"通知超时(秒)","settings.field.TELEGRAM_BOT_TOKEN":"Telegram Bot Token","settings.field.SMTP_HOST":"SMTP服务器","settings.field.SMTP_PORT":"SMTP端口","settings.field.SMTP_USER":"SMTP用户名","settings.field.SMTP_PASSWORD":"SMTP密码","settings.field.SMTP_FROM":"发件人地址","settings.field.SMTP_USE_TLS":"使用TLS","settings.field.SMTP_USE_SSL":"使用SSL","settings.field.TWILIO_ACCOUNT_SID":"Account SID","settings.field.TWILIO_AUTH_TOKEN":"Auth Token","settings.field.TWILIO_FROM_NUMBER":"发送号码","settings.field.DISABLE_RESTORE_RUNNING_STRATEGIES":"禁用自动恢复策略","settings.field.STRATEGY_TICK_INTERVAL_SEC":"策略Tick间隔(秒)","settings.field.PRICE_CACHE_TTL_SEC":"价格缓存TTL(秒)","settings.field.PROXY_PORT":"代理端口","settings.field.PROXY_HOST":"代理主机","settings.field.PROXY_SCHEME":"代理协议","settings.field.PROXY_URL":"完整代理URL","settings.field.CORS_ORIGINS":"CORS来源","settings.field.RATE_LIMIT":"速率限制(每分钟)","settings.field.ENABLE_CACHE":"启用缓存","settings.field.ENABLE_REQUEST_LOG":"启用请求日志","settings.field.ENABLE_AI_ANALYSIS":"启用AI分析","settings.field.ENABLE_AGENT_MEMORY":"启用Agent记忆","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"启用向量检索(本地)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"Embedding维度","settings.field.AGENT_MEMORY_TOP_K":"召回数量TopK","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"候选窗口大小","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"时间衰减半衰期(天)","settings.field.AGENT_MEMORY_W_SIM":"相似度权重","settings.field.AGENT_MEMORY_W_RECENCY":"时间权重","settings.field.AGENT_MEMORY_W_RETURNS":"收益权重","settings.field.ENABLE_REFLECTION_WORKER":"启用自动验证","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"验证周期间隔(秒)","settings.field.OPENROUTER_API_KEY":"OpenRouter API Key","settings.field.OPENROUTER_API_URL":"OpenRouter API URL","settings.field.OPENROUTER_MODEL":"默认模型","settings.field.OPENROUTER_TEMPERATURE":"Temperature","settings.field.OPENROUTER_MAX_TOKENS":"Max Tokens","settings.field.OPENROUTER_TIMEOUT":"超时时间(秒)","settings.field.OPENROUTER_CONNECT_TIMEOUT":"连接超时(秒)","settings.field.AI_MODELS_JSON":"模型列表(JSON)","settings.field.MARKET_TYPES_JSON":"市场类型(JSON)","settings.field.TRADING_SUPPORTED_SYMBOLS_JSON":"支持的交易对(JSON)","settings.field.DATA_SOURCE_TIMEOUT":"数据源超时(秒)","settings.field.DATA_SOURCE_RETRY":"重试次数","settings.field.DATA_SOURCE_RETRY_BACKOFF":"重试退避(秒)","settings.field.FINNHUB_API_KEY":"Finnhub API Key","settings.field.FINNHUB_TIMEOUT":"Finnhub超时(秒)","settings.field.FINNHUB_RATE_LIMIT":"Finnhub速率限制","settings.field.CCXT_DEFAULT_EXCHANGE":"CCXT默认交易所","settings.field.CCXT_TIMEOUT":"CCXT超时(ms)","settings.field.CCXT_PROXY":"CCXT代理","settings.field.AKSHARE_TIMEOUT":"Akshare超时(秒)","settings.field.YFINANCE_TIMEOUT":"YFinance超时(秒)","settings.field.TIINGO_API_KEY":"Tiingo API Key","settings.field.TIINGO_TIMEOUT":"Tiingo超时(秒)","settings.field.SEARCH_PROVIDER":"搜索提供商","settings.field.SEARCH_MAX_RESULTS":"最大结果数","settings.field.TAVILY_API_KEYS":"Tavily API Keys","settings.field.BOCHA_API_KEYS":"博查 API Keys","settings.field.SERPAPI_KEYS":"SerpAPI Keys","settings.field.SEARCH_GOOGLE_API_KEY":"Google API Key","settings.field.SEARCH_GOOGLE_CX":"Google CX","settings.field.SEARCH_BING_API_KEY":"Bing API Key","settings.field.INTERNAL_API_KEY":"内部API Key","settings.desc.PYTHON_API_HOST":"服务监听地址。0.0.0.0 允许外部访问,127.0.0.1 仅本地访问","settings.desc.PYTHON_API_PORT":"服务监听端口,默认5000","settings.desc.PYTHON_API_DEBUG":"启用调试模式,开发时使用。生产环境请关闭","settings.desc.SECRET_KEY":"JWT签名密钥。生产环境必须修改以确保安全","settings.desc.ADMIN_USER":"管理员登录用户名","settings.desc.ADMIN_PASSWORD":"管理员登录密码。生产环境必须修改","settings.desc.OPENROUTER_API_KEY":"OpenRouter API密钥,用于访问多种AI模型","settings.desc.OPENROUTER_API_URL":"OpenRouter API端点地址","settings.desc.OPENROUTER_MODEL":"默认使用的AI模型,如 openai/gpt-4o, anthropic/claude-3.5-sonnet","settings.desc.OPENROUTER_TEMPERATURE":"模型创造性(0-1)。越低越确定性,越高越有创意","settings.desc.OPENROUTER_MAX_TOKENS":"每次请求最大输出token数","settings.desc.OPENROUTER_TIMEOUT":"API请求超时时间(秒)","settings.desc.OPENROUTER_CONNECT_TIMEOUT":"连接建立超时时间(秒)","settings.desc.AI_MODELS_JSON":"自定义模型列表,JSON格式,用于模型选择器","settings.desc.ENABLE_PENDING_ORDER_WORKER":"启用后台订单处理Worker,实盘交易必需","settings.desc.PENDING_ORDER_STALE_SEC":"等待订单超时时间,超时后标记为过期","settings.desc.ORDER_MODE":"maker: 限价单优先(手续费低),market: 市价单(立即成交)","settings.desc.MAKER_WAIT_SEC":"限价单等待成交时间,超时后自动切换为市价单","settings.desc.MAKER_OFFSET_BPS":"限价单价格偏移(基点)。买入价=市价*(1-偏移),卖出价=市价*(1+偏移)","settings.desc.DISABLE_RESTORE_RUNNING_STRATEGIES":"禁止服务重启时自动恢复运行中的策略","settings.desc.STRATEGY_TICK_INTERVAL_SEC":"策略主循环检查间隔(秒)","settings.desc.PRICE_CACHE_TTL_SEC":"价格数据缓存有效期(秒)","settings.desc.MARKET_TYPES_JSON":"自定义市场类型配置,JSON格式","settings.desc.TRADING_SUPPORTED_SYMBOLS_JSON":"支持的交易对列表,JSON格式","settings.desc.DATA_SOURCE_TIMEOUT":"数据源请求默认超时时间","settings.desc.DATA_SOURCE_RETRY":"数据源请求失败时的重试次数","settings.desc.DATA_SOURCE_RETRY_BACKOFF":"重试间隔时间(秒)","settings.desc.CCXT_DEFAULT_EXCHANGE":"CCXT默认交易所(binance, coinbase, okx等)","settings.desc.CCXT_TIMEOUT":"CCXT请求超时时间(毫秒)","settings.desc.CCXT_PROXY":"CCXT请求代理地址(如 socks5h://127.0.0.1:1080)","settings.desc.FINNHUB_API_KEY":"Finnhub API密钥,用于美股数据(有免费额度)","settings.desc.FINNHUB_TIMEOUT":"Finnhub API请求超时时间","settings.desc.FINNHUB_RATE_LIMIT":"Finnhub API速率限制(每分钟请求数)","settings.desc.TIINGO_API_KEY":"Tiingo API密钥,用于外汇/贵金属数据(免费版不支持1分钟数据)","settings.desc.TIINGO_TIMEOUT":"Tiingo API请求超时时间","settings.desc.AKSHARE_TIMEOUT":"Akshare API超时时间,用于A股数据","settings.desc.YFINANCE_TIMEOUT":"Yahoo Finance API超时时间","settings.desc.SIGNAL_WEBHOOK_URL":"信号通知Webhook地址(POST JSON)","settings.desc.SIGNAL_WEBHOOK_TOKEN":"Webhook认证令牌,通过请求头发送","settings.desc.SIGNAL_NOTIFY_TIMEOUT_SEC":"通知请求超时时间","settings.desc.TELEGRAM_BOT_TOKEN":"Telegram机器人Token,从@BotFather获取","settings.desc.SMTP_HOST":"SMTP邮件服务器地址(如 smtp.gmail.com)","settings.desc.SMTP_PORT":"SMTP端口(TLS用587,SSL用465,明文用25)","settings.desc.SMTP_USER":"SMTP认证用户名(通常是邮箱地址)","settings.desc.SMTP_PASSWORD":"SMTP认证密码或应用专用密码","settings.desc.SMTP_FROM":"邮件发件人地址","settings.desc.SMTP_USE_TLS":"启用STARTTLS加密(推荐端口587)","settings.desc.SMTP_USE_SSL":"启用SSL加密(端口465)","settings.desc.TWILIO_ACCOUNT_SID":"Twilio账户SID,从控制台获取","settings.desc.TWILIO_AUTH_TOKEN":"Twilio认证Token,从控制台获取","settings.desc.TWILIO_FROM_NUMBER":"Twilio发送短信的号码(如 +1234567890)","settings.desc.ENABLE_AGENT_MEMORY":"启用AI Agent记忆功能,用于学习历史交易","settings.desc.AGENT_MEMORY_ENABLE_VECTOR":"启用本地向量相似度搜索进行记忆检索","settings.desc.AGENT_MEMORY_EMBEDDING_DIM":"记忆向量嵌入维度","settings.desc.AGENT_MEMORY_TOP_K":"检索时返回的相似记忆数量","settings.desc.AGENT_MEMORY_CANDIDATE_LIMIT":"相似度搜索的候选记忆上限","settings.desc.AGENT_MEMORY_HALF_LIFE_DAYS":"记忆时间衰减的半衰期(天)","settings.desc.AGENT_MEMORY_W_SIM":"记忆排序中相似度分数的权重(0-1)","settings.desc.AGENT_MEMORY_W_RECENCY":"记忆排序中时间新近度的权重(0-1)","settings.desc.AGENT_MEMORY_W_RETURNS":"记忆排序中收益表现的权重(0-1)","settings.desc.ENABLE_REFLECTION_WORKER":"启用后台自动交易反思Worker","settings.desc.REFLECTION_WORKER_INTERVAL_SEC":"自动反思运行间隔(默认24小时)","settings.desc.PROXY_HOST":"代理服务器主机名或IP","settings.desc.PROXY_PORT":"代理服务器端口(留空则禁用代理)","settings.desc.PROXY_SCHEME":"代理协议类型。socks5h 表示DNS也走代理","settings.desc.PROXY_URL":"完整代理URL(设置后覆盖上面的配置)","settings.desc.SEARCH_PROVIDER":"网页搜索提供商,用于AI研究功能。博查(Bocha)推荐用于A股新闻","settings.desc.SEARCH_MAX_RESULTS":"搜索返回的最大结果数","settings.desc.TAVILY_API_KEYS":"Tavily搜索API密钥,多个用逗号分隔可轮换。免费1000次/月","settings.desc.BOCHA_API_KEYS":"博查搜索API密钥,多个用逗号分隔可轮换。A股新闻搜索效果最佳","settings.desc.SERPAPI_KEYS":"SerpAPI密钥,用于Google/Bing搜索,多个用逗号分隔可轮换","settings.desc.SEARCH_GOOGLE_API_KEY":"Google自定义搜索API密钥","settings.desc.SEARCH_GOOGLE_CX":"Google可编程搜索引擎ID (CX)","settings.desc.SEARCH_BING_API_KEY":"Microsoft Bing网页搜索API密钥","settings.desc.INTERNAL_API_KEY":"内部API认证密钥,用于服务间调用","settings.desc.CORS_ORIGINS":"允许的CORS来源(* 表示全部,或逗号分隔的列表)","settings.desc.RATE_LIMIT":"每IP每分钟的API请求限制","settings.desc.ENABLE_CACHE":"启用响应缓存以提高性能","settings.desc.ENABLE_REQUEST_LOG":"记录所有API请求日志,用于调试","settings.desc.ENABLE_AI_ANALYSIS":"启用AI驱动的市场分析功能","portfolio.summary.totalValue":"总市值","portfolio.summary.totalCost":"总成本","portfolio.summary.totalPnl":"总盈亏","portfolio.summary.positionCount":"持仓数量","portfolio.summary.profitLossRatio":"盈利/亏损","portfolio.summary.today":"今日","portfolio.summary.todayPnl":"今日盈亏","portfolio.summary.bestPerformer":"最佳表现","portfolio.summary.worstPerformer":"最差表现","portfolio.summary.priceSync":"价格同步","portfolio.summary.syncInterval":"刷新间隔","portfolio.summary.justNow":"刚刚","portfolio.summary.ago":"前","portfolio.positions.title":"我的持仓","portfolio.positions.add":"添加持仓","portfolio.positions.addFirst":"添加第一笔持仓","portfolio.positions.empty":"暂无持仓记录","portfolio.positions.deleteConfirm":"确定删除这笔持仓吗?","portfolio.positions.currentPrice":"现价","portfolio.positions.entryPrice":"买入价","portfolio.positions.quantity":"数量","portfolio.positions.side":"方向","portfolio.positions.long":"做多","portfolio.positions.short":"做空","portfolio.positions.marketValue":"市值","portfolio.positions.pnl":"盈亏","portfolio.positions.items":"个持仓","portfolio.monitors.title":"AI 监控","portfolio.monitors.add":"添加监控","portfolio.monitors.addFirst":"添加 AI 监控","portfolio.monitors.empty":"暂无监控任务","portfolio.monitors.deleteConfirm":"确定删除这个监控任务吗?","portfolio.monitors.interval":"执行间隔","portfolio.monitors.lastRun":"上次执行","portfolio.monitors.nextRun":"下次执行","portfolio.monitors.channels":"通知渠道","portfolio.monitors.runNow":"立即执行","portfolio.monitors.analysisResult":"AI 分析结果","portfolio.monitors.runningTitle":"AI 分析已启动","portfolio.monitors.runningDesc":"分析正在后台运行,完成后会通过通知推送结果。分析多个持仓可能需要几分钟时间。","portfolio.monitors.timeoutTitle":"请求超时","portfolio.monitors.timeoutDesc":"分析可能正在后台运行中,请稍后查看通知获取结果。如果长时间没有收到通知,请重试。","portfolio.modal.addPosition":"添加持仓","portfolio.modal.editPosition":"编辑持仓","portfolio.modal.addMonitor":"添加监控","portfolio.modal.editMonitor":"编辑监控","portfolio.form.market":"市场","portfolio.form.marketRequired":"请选择市场","portfolio.form.selectMarket":"选择市场","portfolio.form.symbol":"标的代码","portfolio.form.symbolRequired":"请输入标的代码","portfolio.form.searchSymbol":"搜索或输入标的代码","portfolio.form.useAsSymbol":"使用","portfolio.form.asSymbolCode":"作为标的代码","portfolio.form.symbolHint":"可搜索标的库,或直接输入任意代码","portfolio.form.side":"方向","portfolio.form.quantity":"数量","portfolio.form.quantityRequired":"请输入数量","portfolio.form.enterQuantity":"输入持仓数量","portfolio.form.entryPrice":"买入价","portfolio.form.entryPriceRequired":"请输入买入价","portfolio.form.enterEntryPrice":"输入买入价格","portfolio.form.notes":"备注","portfolio.form.enterNotes":"可选:添加备注","portfolio.form.monitorName":"监控名称","portfolio.form.monitorNameRequired":"请输入监控名称","portfolio.form.enterMonitorName":"例如:每日组合分析","portfolio.form.interval":"执行间隔","portfolio.form.minutes":"分钟","portfolio.form.hour":"小时","portfolio.form.hours":"小时","portfolio.form.notifyChannels":"通知渠道","portfolio.form.browser":"浏览器通知","portfolio.form.email":"邮件","portfolio.form.telegramChatId":"Telegram Chat ID","portfolio.form.enterTelegramChatId":"输入 Telegram Chat ID","portfolio.form.telegramRequired":"请输入 Telegram Chat ID","portfolio.form.emailAddress":"邮箱地址","portfolio.form.enterEmail":"输入邮箱地址","portfolio.form.emailRequired":"请输入邮箱地址","portfolio.form.emailInvalid":"请输入有效的邮箱地址","portfolio.form.customPrompt":"自定义提示","portfolio.form.customPromptPlaceholder":'可选:添加特别关注点,例如"重点关注科技股风险"',"portfolio.form.monitorScope":"监控范围","portfolio.form.allPositions":"全部持仓","portfolio.form.selectedPositions":"指定持仓","portfolio.form.selectPositions":"选择持仓","portfolio.form.selectAll":"全选","portfolio.form.deselectAll":"全不选","portfolio.form.selectedCount":"已选 {count}/{total}","portfolio.form.pleaseSelectPositions":"请至少选择一个持仓进行监控","portfolio.form.notificationFromProfile":"通知将发送到您在个人中心配置的地址","portfolio.form.goToProfile":"前往配置","portfolio.message.loadFailed":"加载数据失败","portfolio.message.saveSuccess":"保存成功","portfolio.message.saveFailed":"保存失败","portfolio.message.deleteSuccess":"删除成功","portfolio.message.deleteFailed":"删除失败","portfolio.message.updateFailed":"更新失败","portfolio.message.monitorEnabled":"监控已启用","portfolio.message.monitorDisabled":"监控已暂停","portfolio.message.monitorRunSuccess":"分析完成","portfolio.message.monitorRunFailed":"分析失败","portfolio.message.monitorRunning":"AI 分析已启动,请等待通知","portfolio.groups.all":"全部持仓","portfolio.groups.ungrouped":"未分组","portfolio.form.group":"分组","portfolio.form.enterGroup":"输入或选择分组","portfolio.alerts.title":"价格/盈亏预警","portfolio.alerts.addAlert":"添加预警","portfolio.alerts.editAlert":"编辑预警","portfolio.alerts.alertType":"预警类型","portfolio.alerts.priceAbove":"价格高于","portfolio.alerts.priceBelow":"价格低于","portfolio.alerts.pnlAbove":"盈利高于 (%)","portfolio.alerts.pnlBelow":"亏损低于 (%)","portfolio.alerts.threshold":"阈值","portfolio.alerts.thresholdRequired":"请输入阈值","portfolio.alerts.enterPrice":"输入价格","portfolio.alerts.enterPercent":"输入百分比","portfolio.alerts.currentPrice":"当前价格","portfolio.alerts.currentPriceHint":"当前价格","portfolio.alerts.repeatInterval":"重复提醒","portfolio.alerts.noRepeat":"不重复 (触发一次)","portfolio.alerts.every5min":"每 5 分钟","portfolio.alerts.every15min":"每 15 分钟","portfolio.alerts.every30min":"每 30 分钟","portfolio.alerts.every1hour":"每 1 小时","portfolio.alerts.every4hours":"每 4 小时","portfolio.alerts.onceDaily":"每天一次","portfolio.alerts.enabled":"启用预警","portfolio.alerts.enabledDesc":"开启后将自动监测并触发通知","portfolio.alerts.delete":"删除","portfolio.alerts.deleteConfirm":"确定要删除此预警吗?","portfolio.modal.addAlert":"添加预警","portfolio.modal.editAlert":"编辑预警","menu.userManage":"用户管理","menu.myProfile":"个人中心","common.actions":"操作","common.refresh":"刷新","userManage.title":"用户管理","userManage.searchPlaceholder":"搜索用户名/邮箱/昵称","userManage.description":"管理系统用户、角色和权限","userManage.createUser":"创建用户","userManage.editUser":"编辑用户","userManage.username":"用户名","userManage.password":"密码","userManage.nickname":"昵称","userManage.email":"邮箱","userManage.role":"角色","userManage.status":"状态","userManage.lastLogin":"最后登录","userManage.active":"启用","userManage.disabled":"禁用","userManage.neverLogin":"从未登录","userManage.usernameRequired":"请输入用户名","userManage.usernamePlaceholder":"输入用户名","userManage.passwordRequired":"请输入密码","userManage.passwordPlaceholder":"输入密码(至少6位)","userManage.passwordMin":"密码至少6个字符","userManage.nicknamePlaceholder":"输入昵称","userManage.emailPlaceholder":"输入邮箱","userManage.emailInvalid":"邮箱格式不正确","userManage.rolePlaceholder":"选择角色","userManage.statusPlaceholder":"选择状态","userManage.resetPassword":"重置密码","userManage.resetPasswordWarning":"此操作将重置用户密码","userManage.newPassword":"新密码","userManage.newPasswordPlaceholder":"输入新密码","userManage.confirmDelete":"确定要删除此用户吗?","userManage.roleAdmin":"管理员","userManage.roleManager":"经理","userManage.roleUser":"普通用户","userManage.roleViewer":"访客","profile.title":"个人中心","profile.description":"管理您的账户设置和偏好","profile.basicInfo":"基本信息","profile.changePassword":"修改密码","profile.username":"用户名","profile.nickname":"昵称","profile.email":"邮箱","profile.lastLogin":"最后登录","profile.nicknamePlaceholder":"输入您的昵称","profile.emailPlaceholder":"输入您的邮箱","profile.emailInvalid":"邮箱格式不正确","profile.emailCannotChange":"注册后邮箱不可修改","profile.passwordHint":"密码至少需要6个字符","profile.oldPassword":"当前密码","profile.newPassword":"新密码","profile.confirmPassword":"确认密码","profile.oldPasswordRequired":"请输入当前密码","profile.oldPasswordPlaceholder":"输入当前密码","profile.newPasswordRequired":"请输入新密码","profile.newPasswordPlaceholder":"输入新密码","profile.confirmPasswordRequired":"请确认新密码","profile.confirmPasswordPlaceholder":"再次输入新密码","profile.passwordMin":"密码至少6个字符","profile.passwordMismatch":"两次输入的密码不一致","profile.credits.title":"我的积分","profile.credits.unit":"积分","profile.credits.recharge":"开通/充值","profile.credits.vipExpires":"VIP有效期至","profile.credits.vipExpired":"VIP已过期","profile.credits.noVip":"非VIP用户","profile.credits.hint":"使用AI分析/回测/监控等功能会消耗积分;VIP仅可免费使用VIP免费指标。","profile.creditsLog":"消费记录","profile.creditsLog.time":"时间","profile.creditsLog.action":"类型","profile.creditsLog.amount":"变动","profile.creditsLog.balance":"余额","profile.creditsLog.remark":"备注","profile.creditsLog.actionConsume":"消费","profile.creditsLog.actionRecharge":"充值","profile.creditsLog.actionAdjust":"调整","profile.creditsLog.actionRefund":"退款","profile.creditsLog.actionVipGrant":"VIP授予","profile.creditsLog.actionVipRevoke":"VIP取消","profile.creditsLog.actionRegisterBonus":"注册奖励","profile.creditsLog.actionReferralBonus":"邀请奖励","profile.creditsLog.actionIndicatorPurchase":"购买指标","profile.creditsLog.actionIndicatorSale":"出售指标","profile.referral.title":"邀请好友","profile.referral.listTab":"邀请列表","profile.referral.totalInvited":"已邀请","profile.referral.bonusPerInvite":"每邀请获得","profile.referral.yourLink":"您的邀请链接","profile.referral.copyLink":"复制链接","profile.referral.linkCopied":"邀请链接已复制","profile.referral.newUserBonus":"新用户注册获得","profile.referral.user":"用户","profile.referral.registerTime":"注册时间","profile.referral.noReferrals":"暂无邀请记录","profile.referral.shareNow":"立即分享邀请","profile.notifications.title":"通知设置","profile.notifications.hint":"配置您的默认通知方式,在创建资产监控和预警时将自动使用这些设置","profile.notifications.defaultChannels":"默认通知渠道","profile.notifications.browser":"站内通知","profile.notifications.email":"邮件","profile.notifications.phone":"短信","profile.notifications.telegramBotToken":"Telegram Bot Token","profile.notifications.telegramBotTokenPlaceholder":"请输入您的 Telegram Bot Token","profile.notifications.telegramBotTokenHint":"通过 @BotFather 创建机器人获取 Token","profile.notifications.telegramChatId":"Telegram Chat ID","profile.notifications.telegramPlaceholder":"请输入您的 Telegram Chat ID(如 123456789)","profile.notifications.telegramHint":"发送 /start 给 @userinfobot 可获取您的 Chat ID","profile.notifications.notifyEmail":"通知邮箱","profile.notifications.emailPlaceholder":"接收通知的邮箱地址","profile.notifications.emailHint":"默认使用账户邮箱,可设置其他邮箱接收通知","profile.notifications.phonePlaceholder":"请输入手机号(如 +8613800138000)","profile.notifications.phoneHint":"需要管理员配置 Twilio 服务后才能使用短信通知","profile.notifications.discordWebhook":"Discord Webhook","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"在 Discord 服务器设置中创建 Webhook","profile.notifications.webhookUrl":"Webhook URL","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"自定义 Webhook 地址,将以 POST JSON 方式推送通知","profile.notifications.webhookToken":"Webhook Token(可选)","profile.notifications.webhookTokenPlaceholder":"用于验证请求的 Bearer Token","profile.notifications.webhookTokenHint":"将作为 Authorization: Bearer Token 发送到 Webhook","profile.notifications.testBtn":"发送测试通知","profile.notifications.saveSuccess":"通知设置保存成功","profile.notifications.selectChannel":"请至少选择一个通知渠道","profile.notifications.fillTelegramToken":"请填写 Telegram Bot Token","profile.notifications.fillTelegram":"请填写 Telegram Chat ID","profile.notifications.fillEmail":"请填写通知邮箱","profile.notifications.testSent":"测试通知已发送,请检查您的通知渠道","profile.exchange.title":"交易所配置","profile.exchange.hint":"统一管理您的交易所API密钥和券商连接,在交易助手和快捷交易中可直接选择使用。","profile.exchange.addAccount":"添加交易所账户","profile.exchange.noAccounts":"暂无交易所账户,请点击上方按钮添加","profile.exchange.colExchange":"交易所","profile.exchange.colName":"名称","profile.exchange.colHint":"连接信息","profile.exchange.colCreatedAt":"创建时间","profile.exchange.colActions":"操作","profile.exchange.deleteConfirm":"确定要删除此交易所账户吗?删除后无法恢复。","profile.exchange.deleteSuccess":"交易所账户已删除","profile.exchange.addTitle":"添加交易所账户","profile.exchange.selectExchange":"选择交易所","profile.exchange.accountName":"账户名称(可选)","profile.exchange.accountNamePlaceholder":"如:主账户、测试账户","profile.exchange.apiKey":"API Key","profile.exchange.secretKey":"Secret Key","profile.exchange.passphrase":"Passphrase","profile.exchange.demoTrading":"模拟交易","profile.exchange.ibkrHost":"TWS/Gateway 主机地址","profile.exchange.ibkrPort":"TWS/Gateway 端口","profile.exchange.ibkrPortHint":"TWS纸交易:7497 | TWS实盘:7496 | Gateway纸交易:4002 | Gateway实盘:4001","profile.exchange.ibkrClientId":"客户端ID","profile.exchange.ibkrAccount":"账户号(可选)","profile.exchange.mt5Server":"服务器","profile.exchange.mt5Login":"登录账号","profile.exchange.mt5Password":"密码","profile.exchange.mt5TerminalPath":"终端路径(可选)","profile.exchange.mt5TerminalPathHint":"MT5终端安装路径,如 C:\\Program Files\\MetaTrader 5\\terminal64.exe","profile.exchange.testConnection":"测试连接","profile.exchange.testSuccess":"连接成功!","profile.exchange.testFailed":"连接失败","profile.exchange.saveSuccess":"交易所账户添加成功","profile.exchange.saveFailed":"添加失败","profile.exchange.typeCrypto":"加密货币交易所","profile.exchange.typeIBKR":"美股券商 (IBKR)","profile.exchange.typeMT5":"外汇 (MetaTrader 5)","profile.exchange.localDeploymentRequired":"需要本地部署","profile.exchange.localDeploymentHint":"此券商需要在本地部署QuantDinger才能使用。","profile.exchange.goToManage":"前往个人中心 → 交易所配置管理","profile.exchange.noCredentialHint":"请先在个人中心添加交易所账户","userManage.credits":"积分","userManage.adjustCredits":"调整积分","userManage.setVip":"设置VIP","userManage.currentCredits":"当前积分","userManage.newCredits":"新积分","userManage.enterCredits":"输入新的积分数量","userManage.creditsNonNegative":"积分不能为负数","userManage.currentVip":"当前VIP状态","userManage.vipActive":"有效","userManage.vipExpired":"已过期","userManage.vipDays":"VIP天数","userManage.vipExpiresAt":"VIP过期时间","userManage.cancelVip":"取消VIP","userManage.days":"天","userManage.customDate":"自定义日期","userManage.selectDate":"请选择日期","userManage.remark":"备注","userManage.remarkPlaceholder":"可选备注","userManage.tabUsers":"用户管理","systemOverview.tabTitle":"系统总览","systemOverview.totalStrategies":"策略总数","systemOverview.runningStrategies":"运行中","systemOverview.totalCapital":"总资金","systemOverview.totalPnl":"总盈亏","systemOverview.filterAll":"全部状态","systemOverview.filterRunning":"运行中","systemOverview.filterStopped":"已停止","systemOverview.searchPlaceholder":"搜索策略名/交易对/用户名","systemOverview.running":"运行中","systemOverview.stopped":"已停止","systemOverview.colUser":"用户","systemOverview.colStrategy":"策略名称","systemOverview.colStatus":"状态","systemOverview.colSymbol":"交易对","systemOverview.colCapital":"资金","systemOverview.colPnl":"盈亏 / ROI","systemOverview.colPositions":"持仓","systemOverview.colTrades":"交易次数","systemOverview.colIndicator":"指标","systemOverview.colExchange":"交易所","systemOverview.colTimeframe":"周期","systemOverview.colLeverage":"杠杆","systemOverview.colCreatedAt":"创建时间","systemOverview.realized":"已实现","systemOverview.unrealized":"未实现","systemOverview.symbols":"个交易对","systemOverview.live":"实盘","systemOverview.signal":"仅通知","settings.group.billing":"计费配置","settings.field.BILLING_ENABLED":"启用计费","settings.field.BILLING_VIP_BYPASS":"VIP旁路(旧)","settings.field.BILLING_COST_AI_ANALYSIS":"AI分析消耗","settings.field.BILLING_COST_STRATEGY_RUN":"策略运行消耗","settings.field.BILLING_COST_BACKTEST":"回测消耗","settings.field.BILLING_COST_PORTFOLIO_MONITOR":"Portfolio监控消耗","settings.field.CREDITS_REGISTER_BONUS":"注册奖励","settings.field.CREDITS_REFERRAL_BONUS":"邀请奖励","settings.field.RECHARGE_TELEGRAM_URL":"充值Telegram链接","settings.field.MEMBERSHIP_MONTHLY_PRICE_USD":"包月会员价格(USD)","settings.field.MEMBERSHIP_MONTHLY_CREDITS":"包月会员赠送积分","settings.field.MEMBERSHIP_YEARLY_PRICE_USD":"包年会员价格(USD)","settings.field.MEMBERSHIP_YEARLY_CREDITS":"包年会员赠送积分","settings.field.MEMBERSHIP_LIFETIME_PRICE_USD":"永久会员价格(USD)","settings.field.MEMBERSHIP_LIFETIME_MONTHLY_CREDITS":"永久会员每月赠送积分","settings.field.USDT_PAY_ENABLED":"启用USDT收款","settings.field.USDT_PAY_CHAIN":"USDT网络","settings.field.USDT_TRC20_XPUB":"TRC20 XPUB(仅观察)","settings.field.USDT_TRC20_CONTRACT":"USDT TRC20 合约地址","settings.field.TRONGRID_BASE_URL":"TronGrid Base URL","settings.field.TRONGRID_API_KEY":"TronGrid API Key","settings.field.USDT_PAY_CONFIRM_SECONDS":"确认延迟(秒)","settings.field.USDT_PAY_EXPIRE_MINUTES":"订单过期(分钟)","settings.desc.BILLING_ENABLED":"启用计费系统。启用后,用户使用某些功能需要消耗积分","settings.desc.BILLING_VIP_BYPASS":"旧开关:开启后VIP将旁路所有功能扣积分(不推荐)。建议关闭,VIP仅用于“VIP免费指标”。","settings.desc.BILLING_COST_AI_ANALYSIS":"每次AI分析消耗的积分数","settings.desc.BILLING_COST_STRATEGY_RUN":"启动策略时消耗的积分数","settings.desc.BILLING_COST_BACKTEST":"每次回测消耗的积分数","settings.desc.BILLING_COST_PORTFOLIO_MONITOR":"每次Portfolio AI监控消耗的积分数","settings.desc.CREDITS_REGISTER_BONUS":"新用户注册时获得的积分奖励","settings.desc.CREDITS_REFERRAL_BONUS":"用户通过邀请链接成功邀请新用户时,邀请人获得的积分奖励","settings.desc.VERIFICATION_CODE_MAX_ATTEMPTS":"验证码验证失败的最大尝试次数,超过后将锁定","settings.desc.VERIFICATION_CODE_LOCK_MINUTES":"验证码验证失败次数超过限制后的锁定时长(分钟)","settings.desc.RECHARGE_TELEGRAM_URL":"用户点击充值时跳转的Telegram客服链接","settings.desc.MEMBERSHIP_MONTHLY_PRICE_USD":"包月会员的价格(USD)。当前为模拟支付,后续可接入真实支付网关。","settings.desc.MEMBERSHIP_MONTHLY_CREDITS":"购买包月会员后立即赠送到账号的积分数量。","settings.desc.MEMBERSHIP_YEARLY_PRICE_USD":"包年会员的价格(USD)。当前为模拟支付,后续可接入真实支付网关。","settings.desc.MEMBERSHIP_YEARLY_CREDITS":"购买包年会员后立即赠送到账号的积分数量。","settings.desc.MEMBERSHIP_LIFETIME_PRICE_USD":"永久会员的价格(USD)。当前为模拟支付,后续可接入真实支付网关。","settings.desc.MEMBERSHIP_LIFETIME_MONTHLY_CREDITS":"永久会员每30天自动发放一次的积分数量(首次购买会立刻发放一次)。","settings.desc.USDT_PAY_ENABLED":"开启后,会员购买页会提供 USDT 扫码支付(每单独立地址 + 自动对账)。","settings.desc.USDT_PAY_CHAIN":"当前版本仅支持 TRC20。","settings.desc.USDT_TRC20_XPUB":"仅观察 xpub,用于派生每个订单的收款地址。不要填写私钥/助记词。","settings.desc.USDT_TRC20_CONTRACT":"TRON 链上 USDT 合约地址(默认已填写)。","settings.desc.TRONGRID_BASE_URL":"TronGrid API 基础地址(默认即可)。","settings.desc.TRONGRID_API_KEY":"可选。用于提高 TronGrid 调用额度/稳定性。","settings.desc.USDT_PAY_CONFIRM_SECONDS":"检测到到账后,等待指定秒数再标记“确认”,降低极端回滚风险。","settings.desc.USDT_PAY_EXPIRE_MINUTES":"用户扫码支付的订单有效期,过期后需重新生成订单。","globalMarket.title":"全球金融面板","globalMarket.fearGreedShort":"恐贪","globalMarket.calendar":"财经日历","globalMarket.lastUpdate":"最后更新","globalMarket.refresh":"刷新数据","globalMarket.name":"名称","globalMarket.price":"价格","globalMarket.change":"涨跌","globalMarket.trend":"走势","globalMarket.pair":"货币对","globalMarket.unit":"单位","globalMarket.refreshSuccess":"数据刷新成功","globalMarket.refreshError":"数据刷新失败","globalMarket.fetchError":"获取数据失败","globalMarket.loading":"加载中...","globalMarket.fearGreedIndex":"恐惧贪婪指数","globalMarket.fearGreedTip":"恐惧贪婪指数衡量市场情绪,0表示极度恐惧,100表示极度贪婪","globalMarket.volatilityIndex":"波动率指数","globalMarket.dollarIndex":"美元指数","globalMarket.majorIndices":"主要指数","globalMarket.vixTitle":"VIX 波动率指数","globalMarket.vixTip":"VIX指数衡量市场预期波动率,数值越高表示市场越恐慌","globalMarket.extremeFear":"极度恐惧","globalMarket.fear":"恐惧","globalMarket.neutral":"中性","globalMarket.greed":"贪婪","globalMarket.extremeGreed":"极度贪婪","globalMarket.marketOverview":"全球市场概览","globalMarket.indices":"主要指数","globalMarket.forex":"外汇市场","globalMarket.crypto":"加密货币","globalMarket.commodities":"大宗商品","globalMarket.heatmap":"市场热力图","globalMarket.cryptoHeatmap":"加密货币","globalMarket.commoditiesHeatmap":"大宗商品","globalMarket.sectorHeatmap":"板块","globalMarket.forexHeatmap":"外汇","globalMarket.opportunities":"交易机会","globalMarket.noOpportunities":"暂无明显交易机会","globalMarket.financialNews":"财经资讯","globalMarket.noNews":"暂无新闻","globalMarket.economicCalendar":"财经日历","globalMarket.noEvents":"暂无事件","globalMarket.actual":"实际","globalMarket.forecast":"预期","globalMarket.previous":"前值","globalMarket.signal.bullish":"看涨趋势","globalMarket.signal.bearish":"看跌趋势","globalMarket.signal.overbought":"超买警告","globalMarket.signal.oversold":"超卖机会","globalMarket.worldMap":"全球市场地图","globalMarket.rising":"上涨","globalMarket.falling":"下跌","globalMarket.bullish":"利多","globalMarket.bearish":"利空","globalMarket.expectedImpact":"预期影响","globalMarket.aboveForecast":"高于预期","globalMarket.belowForecast":"低于预期","globalMarket.upcomingEvents":"即将公布","globalMarket.releasedEvents":"已公布数据","trading-assistant.form.notificationFromProfile":"通知将发送到您在个人中心配置的地址。","trading-assistant.form.notificationConfigMissing":"您选中的渠道还未配置参数({channels}),将无法接收通知。请前往个人中心进行配置。","trading-assistant.form.goToProfile":"前往配置","community.title":"指标市场","community.searchPlaceholder":"搜索指标名称或描述...","community.all":"全部","community.freeOnly":"免费","community.paidOnly":"付费","community.sortNewest":"最新发布","community.sortHot":"最热门","community.sortRating":"评分最高","community.sortPriceLow":"价格从低到高","community.sortPriceHigh":"价格从高到低","community.myPurchases":"我的购买","community.noIndicators":"暂无指标","community.createFirst":"发布第一个指标","community.total":"共","community.items":"个","community.free":"免费","community.credits":"积分","community.myIndicator":"我的指标","community.purchased":"已购买","community.noDescription":"暂无描述","community.loadFailed":"加载失败","community.publishedAt":"发布于","community.downloads":"获取","community.rating":"评分","community.views":"浏览","community.description":"指标说明","community.performance":"实盘表现","community.strategyCount":"使用策略数","community.tradeCount":"交易次数","community.winRate":"胜率","community.totalProfit":"总收益","community.reviews":"用户评价","community.useNow":"立即使用","community.getFree":"免费获取","community.buyNow":"立即购买","community.purchaseSuccess":"购买成功!指标已添加到您的指标列表","community.purchaseFailed":"购买失败","community.indicator_not_found":"指标不存在或已下架","community.cannot_buy_own":"不能购买自己的指标","community.already_purchased":"您已购买过此指标","community.insufficient_credits":"积分不足","community.commentSuccess":"评论成功","community.commentFailed":"评论失败","community.commentUpdateSuccess":"评论修改成功","community.commentUpdateFailed":"评论修改失败,请重试","community.editComment":"编辑评论","community.cancelEdit":"取消","community.updateComment":"更新评论","community.alreadyCommented":"您已评论此指标","community.editMyComment":"修改评论","community.me":"我","community.edited":"已编辑","community.not_purchased":"请先购买/获取指标才能评论","community.cannot_comment_own":"不能评论自己的指标","community.already_commented":"您已经评论过此指标","community.noComments":"暂无评论","community.yourRating":"您的评分","community.commentPlaceholder":"分享您的使用体验...","community.submitComment":"提交评论","community.pleaseRate":"请先选择评分","community.loadMore":"加载更多","community.justNow":"刚刚","community.minutesAgo":"分钟前","community.hoursAgo":"小时前","community.daysAgo":"天前","community.noPurchases":"暂无购买记录","community.purchasedFrom":"卖家","community.purchaseTime":"购买时间","community.admin.reviewTab":"审核管理","community.admin.pending":"待审核","community.admin.approved":"已通过","community.admin.rejected":"已拒绝","community.admin.noItems":"暂无记录","community.admin.noDescription":"无描述","community.admin.viewCode":"查看代码","community.admin.note":"审核备注","community.admin.approve":"通过","community.admin.reject":"拒绝","community.admin.unpublish":"下架","community.admin.delete":"删除","community.admin.deleteConfirm":"确定要删除此指标吗?此操作不可撤销。","community.admin.unpublishConfirm":"确定要下架此指标吗?","community.admin.unpublishHint":"下架后该指标将不再在市场显示","community.admin.confirm":"确定","community.admin.cancel":"取消","community.admin.approveTitle":"通过审核","community.admin.rejectTitle":"拒绝审核","community.admin.noteLabel":"审核备注(可选)","community.admin.notePlaceholder":"请输入审核备注...","community.admin.loadFailed":"加载失败","community.admin.reviewSuccess":"审核成功","community.admin.reviewFailed":"审核失败","community.admin.unpublishSuccess":"下架成功","community.admin.unpublishFailed":"下架失败","community.admin.deleteSuccess":"删除成功","community.admin.deleteFailed":"删除失败","fastAnalysis.aiAnalysis":"AI 智能分析","fastAnalysis.analyzing":"AI 正在分析中...","fastAnalysis.pleaseWait":"请稍候,正在获取实时数据并生成专业报告","fastAnalysis.error":"分析失败","fastAnalysis.retry":"重试","fastAnalysis.selectSymbol":"选择标的开始分析","fastAnalysis.selectHint":"从左侧自选列表选择或添加新标的","fastAnalysis.confidence":"置信度","fastAnalysis.currentPrice":"当前价格","fastAnalysis.entryPrice":"建议入场","fastAnalysis.stopLoss":"止损价","fastAnalysis.takeProfit":"止盈目标","fastAnalysis.stopLossHint":"基于2倍ATR和支撑位计算","fastAnalysis.takeProfitHint":"基于3倍ATR和阻力位计算","fastAnalysis.atrBased":"基于ATR波动率","fastAnalysis.riskReward":"风险回报比","fastAnalysis.technical":"技术面","fastAnalysis.fundamental":"基本面","fastAnalysis.sentiment":"情绪面","fastAnalysis.overall":"综合评分","fastAnalysis.keyReasons":"核心理由","fastAnalysis.risks":"风险提示","fastAnalysis.indicators":"技术指标","fastAnalysis.maTrend":"均线趋势","fastAnalysis.support":"支撑位","fastAnalysis.resistance":"阻力位","fastAnalysis.volatility":"波动性","fastAnalysis.wasHelpful":"这次分析对您有帮助吗?","fastAnalysis.helpful":"有帮助","fastAnalysis.notHelpful":"需改进","fastAnalysis.feedbackThanks":"感谢您的反馈!","fastAnalysis.feedbackFailed":"反馈提交失败","fastAnalysis.feedbackUnavailable":"反馈功能暂不可用,请重新分析后重试","fastAnalysis.analysisTime":"分析耗时","fastAnalysis.startAnalysis":"开始分析","fastAnalysis.history":"历史记录","fastAnalysis.systemTitle":"QUANTDINGER AI","fastAnalysis.systemOnline":"系统在线","fastAnalysis.version":"快速版","fastAnalysis.preparing":"准备中...","fastAnalysis.step1":"获取实时数据","fastAnalysis.step2":"计算技术指标","fastAnalysis.step3":"AI深度分析","fastAnalysis.step4":"生成专业报告","fastAnalysis.technicalAnalysis":"技术面分析","fastAnalysis.fundamentalAnalysis":"基本面分析","fastAnalysis.sentimentAnalysis":"市场情绪分析","fastAnalysis.signal.bullish":"看涨","fastAnalysis.signal.bearish":"看跌","fastAnalysis.signal.neutral":"中性","fastAnalysis.signal.overbought":"超买","fastAnalysis.signal.oversold":"超卖","fastAnalysis.signal.strong_bullish":"强烈看涨","fastAnalysis.signal.strong_bearish":"强烈看跌","fastAnalysis.trend.uptrend":"上升趋势","fastAnalysis.trend.downtrend":"下降趋势","fastAnalysis.trend.sideways":"横盘整理","fastAnalysis.trend.consolidating":"盘整","fastAnalysis.trend.golden_cross":"金叉","fastAnalysis.trend.death_cross":"死叉","fastAnalysis.trend.strong_uptrend":"强势上涨","fastAnalysis.trend.strong_downtrend":"强势下跌","fastAnalysis.volatilityLevel.high":"高","fastAnalysis.volatilityLevel.medium":"中","fastAnalysis.volatilityLevel.low":"低","fastAnalysis.volatilityLevel.unknown":"未知","fastAnalysis.marketOverview":"市场概览","fastAnalysis.selectTip":"选择自选列表中的标的,开始 AI 智能分析","fastAnalysis.analysisInProgress":"该标的当前有分析正在进行,请稍候再试(请勿重复点击)。","fastAnalysis.analysisInProgressTitle":"分析进行中","fastAnalysis.insufficientCredits":"积分不足","fastAnalysis.insufficientCreditsDetail":"积分不足:需要 {required},当前 {current},还差 {shortage}。","fastAnalysis.analysisCompleteWithCredits":"分析完成,剩余积分:{remaining}","fastAnalysis.consensusTitle":"多周期客观共识","fastAnalysis.consensusDecision":"共识方向","fastAnalysis.consensusScore":"综合评分","fastAnalysis.consensusAgreement":"周期一致度","aiQuant.title":"AI 量化","aiQuant.strategyList":"策略列表","aiQuant.create":"创建","aiQuant.edit":"编辑","aiQuant.delete":"删除","aiQuant.start":"启动","aiQuant.stop":"停止","aiQuant.analyze":"立即分析","aiQuant.noStrategy":"暂无策略,点击创建开始","aiQuant.selectStrategy":"请从左侧选择一个策略","aiQuant.createFirst":"创建第一个策略","aiQuant.createStrategy":"创建策略","aiQuant.editStrategy":"编辑策略","aiQuant.confirmDelete":"确定要删除此策略吗?","aiQuant.latestAnalysis":"最新分析结果","aiQuant.analysisHistory":"分析历史","aiQuant.decision":"决策","aiQuant.confidence":"置信度","aiQuant.currentPrice":"当前价格","aiQuant.entryPrice":"建议入场","aiQuant.stopLoss":"止损价","aiQuant.takeProfit":"止盈价","aiQuant.reason":"理由","aiQuant.analyzedAt":"分析时间","aiQuant.tradeSettings":"交易设置","aiQuant.minutes":"分钟","aiQuant.hour":"小时","aiQuant.hours":"小时","aiQuant.stats.totalStrategies":"策略总数","aiQuant.stats.runningStrategies":"运行中","aiQuant.stats.totalAnalyses":"分析次数","aiQuant.stats.totalPnl":"总盈亏","aiQuant.status.running":"运行中","aiQuant.status.stopped":"已停止","aiQuant.status.paused":"已暂停","aiQuant.executionMode.signal":"仅信号","aiQuant.executionMode.live":"实盘交易","aiQuant.marketType.spot":"现货","aiQuant.marketType.futures":"合约","aiQuant.field.strategyName":"策略名称","aiQuant.field.market":"市场","aiQuant.field.symbol":"交易对","aiQuant.field.marketType":"市场类型","aiQuant.field.aiModel":"AI 模型","aiQuant.field.interval":"分析间隔","aiQuant.field.aiPrompt":"AI 提示词","aiQuant.field.executionMode":"执行模式","aiQuant.field.positionSize":"仓位大小","aiQuant.field.stopLoss":"止损比例","aiQuant.field.takeProfit":"止盈比例","aiQuant.field.totalAnalyses":"分析次数","aiQuant.field.totalTrades":"交易次数","aiQuant.field.totalPnl":"总盈亏","aiQuant.placeholder.strategyName":"请输入策略名称","aiQuant.placeholder.market":"请选择市场","aiQuant.placeholder.symbol":"例如: BTC/USDT","aiQuant.placeholder.aiModel":"默认使用系统配置","aiQuant.placeholder.aiPrompt":"输入您的交易策略提示词,例如:当RSI低于30时考虑买入...","aiQuant.validation.strategyName":"请输入策略名称","aiQuant.validation.market":"请选择市场","aiQuant.validation.symbol":"请输入交易对","aiQuant.table.decision":"决策","aiQuant.table.confidence":"置信度","aiQuant.table.entryPrice":"入场价","aiQuant.table.stopLoss":"止损价","aiQuant.table.takeProfit":"止盈价","aiQuant.table.time":"时间","aiQuant.msg.createSuccess":"策略创建成功","aiQuant.msg.updateSuccess":"策略更新成功","aiQuant.msg.deleteSuccess":"策略删除成功","aiQuant.msg.startSuccess":"策略已启动","aiQuant.msg.stopSuccess":"策略已停止","aiQuant.msg.analyzeSuccess":"分析完成","aiQuant.field.initialCapital":"投入资金","aiQuant.field.leverage":"杠杆倍数","aiQuant.field.tradeDirection":"交易方向","aiQuant.field.trailingStop":"移动止损","aiQuant.field.trailingStopPct":"移动止损比例","aiQuant.direction.long":"做多","aiQuant.direction.short":"做空","aiQuant.direction.both":"双向","aiQuant.riskControl":"风控设置","aiQuant.aiSettings":"AI设置","aiQuant.systemDefault":"系统默认","aiQuant.placeholder.selectSymbol":"从自选列表选择交易对","aiQuant.hint.symbolFromWatchlist":"从您的自选列表中选择,系统自动识别市场类型","aiQuant.hint.spotLeverageFixed":"现货市场杠杆固定为1x","aiQuant.hint.stopLossEnforced":"强制止损,AI不可修改","aiQuant.hint.takeProfitEnforced":"强制止盈,AI不可修改","aiQuant.hint.aiPromptOnly":"AI仅根据提示词判断方向,不会修改您设置的风控参数","aiQuant.aiLimitWarning":"AI权限限制","aiQuant.aiLimitDescription":"AI只能判断交易方向(买入/卖出/持有),杠杆倍数、下单金额、止盈止损等风控参数由您完全控制,AI无法修改。","aiQuant.userStopLoss":"您的止损","aiQuant.userTakeProfit":"您的止盈","aiQuant.userLeverage":"您的杠杆","aiQuant.validation.initialCapital":"请输入投入资金","aiQuant.table.currentPrice":"当前价格","aiQuant.field.promptTemplate":"策略模板","aiQuant.placeholder.selectTemplate":"选择预设策略模板","aiQuant.template.default":"📊 综合分析(推荐)","aiQuant.template.trend":"📈 趋势跟踪","aiQuant.template.swing":"🔄 波段交易","aiQuant.template.news":"📰 新闻驱动","aiQuant.template.custom":"✏️ 自定义","aiQuant.hint.dataProvided":"系统自动提供:实时价格、技术指标(RSI/MACD/均线)、最近新闻、宏观数据。AI将基于这些数据和您的提示词判断方向。","aiQuant.hint.liveWarning":"实盘模式将使用真实资金交易,请确保已配置交易所API并充分了解风险!","trading-assistant.liveDisclaimer.title":"实盘交易免责声明","trading-assistant.liveDisclaimer.content":"实盘交易存在较高风险,可能导致部分或全部资金损失。平台不保证收益、不承诺盈利。你需自行评估风险并对交易结果承担全部责任。","trading-assistant.liveDisclaimer.agree":"我已阅读并理解上述免责声明,仍选择开启实盘交易","trading-assistant.liveDisclaimer.required":"开启实盘前请先勾选免责声明确认","trading-assistant.liveDisclaimer.blockTitle":"请先确认免责声明","trading-assistant.liveDisclaimer.blockDesc":"勾选免责声明后才可继续配置实盘连接与下单参数。","menu.billing":"会员充值","billing.title":"开通会员 / 充值积分","billing.desc":"选择适合你的会员套餐,开通后会赠送积分。","billing.snapshot.credits":"当前积分","billing.snapshot.vip":"VIP 状态","billing.snapshot.notVip":"非VIP","billing.snapshot.expires":"到期时间","billing.vipRule.title":"VIP 权益说明","billing.vipRule.desc":"VIP 仅拥有一个特殊权限:可免费使用「VIP免费指标」。其它付费功能/指标仍会正常扣积分。","billing.plan.monthly":"包月会员","billing.plan.yearly":"包年会员","billing.plan.lifetime":"永久会员","billing.perMonth":"月","billing.perYear":"年","billing.once":"一次性","billing.credits":"积分","billing.lifetimeMonthly":"每月赠送","billing.buyNow":"立即购买","billing.purchaseSuccess":"购买成功","billing.purchaseFailed":"购买失败","billing.usdt.title":"USDT 扫码支付","billing.usdt.hintTitle":"请使用钱包扫码并完成转账","billing.usdt.hintDesc":"请确保网络与金额正确(当前仅支持 TRC20)。支付到账后系统会自动开通会员并发放积分。","billing.usdt.chain":"网络","billing.usdt.amount":"金额","billing.usdt.address":"收款地址","billing.usdt.copyAddress":"复制地址","billing.usdt.copyAmount":"复制金额","billing.usdt.refresh":"刷新状态","billing.usdt.expires":"过期时间","billing.usdt.paidSuccess":"支付确认成功,已开通会员","billing.usdt.status.pending":"等待支付","billing.usdt.status.paid":"已检测到账","billing.usdt.status.confirmed":"已确认","billing.usdt.status.expired":"已过期","billing.usdt.status.cancelled":"已取消","billing.usdt.status.failed":"失败","billing.usdt.expiredHint":"订单已过期。如您已完成付款但未到账,请联系客服处理(附订单截图和 TxHash)。","billing.usdt.confirmedHint":"支付已确认,会员已激活!感谢您的购买。","community.vipFree":"VIP免费","dashboard.indicator.publish.vipFree":"VIP免费","dashboard.indicator.publish.vipFreeHint":"开启后:VIP用户可免费使用该指标(非VIP仍需购买)。","quickTrade.title":"闪电交易","quickTrade.selectSymbol":"选择交易对","quickTrade.exchange":"交易所","quickTrade.selectExchange":"选择交易所账户","quickTrade.cryptoOnly":"仅支持加密货币","quickTrade.noExchange":"暂无加密交易所账户,请先在个人中心 → 交易所配置中添加","quickTrade.available":"可用余额","quickTrade.long":"做多","quickTrade.short":"做空","quickTrade.market":"市价","quickTrade.limit":"限价","quickTrade.limitPrice":"限价价格","quickTrade.enterPrice":"输入价格","quickTrade.amount":"下单金额","quickTrade.enterAmount":"输入金额","quickTrade.leverage":"杠杆倍数","quickTrade.tpsl":"止盈/止损价格 (可选)","quickTrade.tp":"止盈价格","quickTrade.sl":"止损价格","quickTrade.tpPlaceholder":"输入止盈价格","quickTrade.slPlaceholder":"输入止损价格","quickTrade.optional":"可选","quickTrade.buyLong":"买入/做多","quickTrade.sellShort":"卖出/做空","quickTrade.currentPosition":"当前持仓","quickTrade.side":"方向","quickTrade.posSize":"持仓数量","quickTrade.entryPrice":"开仓价格","quickTrade.markPrice":"标记价格","quickTrade.unrealizedPnl":"未实现盈亏","quickTrade.closePosition":"一键平仓","quickTrade.noPosition":"暂无持仓","quickTrade.noPositionHint":"当前交易对暂无持仓","quickTrade.recentTrades":"最近交易","quickTrade.orderSuccess":"下单成功!","quickTrade.orderFailed":"下单失败","quickTrade.positionClosed":"平仓成功!","quickTrade.openPanel":"闪电交易","quickTrade.tradeNow":"立即交易","adminOrders.tabTitle":"订单列表","adminOrders.totalOrders":"总订单数","adminOrders.paidOrders":"已付款","adminOrders.pendingOrders":"待付款","adminOrders.totalRevenue":"总收入","adminOrders.filterAll":"全部状态","adminOrders.filterPending":"待付款","adminOrders.filterPaid":"已付款","adminOrders.filterConfirmed":"已确认","adminOrders.filterExpired":"已过期","adminOrders.searchPlaceholder":"搜索用户名/邮箱","adminOrders.colUser":"用户","adminOrders.colType":"类型","adminOrders.colPlan":"套餐","adminOrders.colAmount":"金额","adminOrders.colStatus":"状态","adminOrders.colChain":"链","adminOrders.colAddress":"收款地址","adminOrders.colTxHash":"交易哈希","adminOrders.colCreatedAt":"下单时间","adminOrders.lifetime":"永久","adminOrders.yearly":"年付","adminOrders.monthly":"月付","adminOrders.statusPaid":"已付款","adminOrders.statusConfirmed":"已确认","adminOrders.statusPending":"待付款","adminOrders.statusExpired":"已过期","adminOrders.statusCancelled":"已取消","adminOrders.statusFailed":"失败","adminAiStats.tabTitle":"AI 分析记录","adminAiStats.totalAnalyses":"总分析次数","adminAiStats.activeUsers":"活跃用户","adminAiStats.uniqueSymbols":"分析品种数","adminAiStats.accuracy":"正确 / 已验证","adminAiStats.userStatsTitle":"用户使用统计","adminAiStats.recentTitle":"最近分析记录","adminAiStats.searchPlaceholder":"搜索用户名","adminAiStats.colUser":"用户","adminAiStats.colAnalysisCount":"分析次数","adminAiStats.colSymbols":"品种数","adminAiStats.colMarkets":"市场数","adminAiStats.colAccuracy":"正确 / 错误","adminAiStats.colFeedback":"用户反馈","adminAiStats.colLastAnalysis":"最近分析","adminAiStats.colMarket":"市场","adminAiStats.colSymbol":"品种","adminAiStats.colModel":"模型","adminAiStats.colStatus":"状态","adminAiStats.colCreatedAt":"时间","adminAiStats.helpful":"有用","adminAiStats.notHelpful":"没用","polymarket.title":"预测市场","polymarket.subtitle":"基于Polymarket预测市场数据的AI分析和交易机会推荐","polymarket.filter.category":"选择类别","polymarket.filter.sortBy":"排序方式","polymarket.sort.volume":"24小时交易量","polymarket.sort.aiScore":"AI机会评分","polymarket.sort.highProbability":"高概率机会","polymarket.sort.highReturn":"高回报比机会","polymarket.search.placeholder":"搜索预测市场...","polymarket.category.all":"全部","polymarket.category.crypto":"加密货币","polymarket.category.politics":"政治","polymarket.category.economics":"经济","polymarket.category.sports":"体育","polymarket.category.tech":"科技","polymarket.category.finance":"金融","polymarket.category.geopolitics":"地缘政治","polymarket.category.culture":"文化","polymarket.category.climate":"气候","polymarket.category.entertainment":"娱乐","polymarket.market.currentProbability":"当前概率","polymarket.ai.predicted":"AI预测概率","polymarket.ai.marketProbability":"市场概率","polymarket.ai.recommendation":"AI推荐","polymarket.ai.confidence":"置信度","polymarket.ai.opportunityScore":"机会评分","polymarket.ai.reasoning":"分析理由","polymarket.ai.keyFactors":"关键因素","polymarket.recommendation.YES":"YES(看涨)","polymarket.recommendation.NO":"NO(看跌)","polymarket.recommendation.HOLD":"HOLD(中性)","polymarket.status.active":"活跃","polymarket.status.closed":"已关闭","polymarket.status.resolved":"已结算","polymarket.action.viewDetail":"查看详情","polymarket.action.viewOnPolymarket":"在Polymarket查看","polymarket.detail.title":"预测市场详情","polymarket.detail.currentProbability":"当前概率","polymarket.detail.volume24h":"24小时交易量","polymarket.detail.liquidity":"流动性","polymarket.detail.aiAnalysis":"AI分析结果","polymarket.detail.assetOpportunities":"相关资产交易机会","polymarket.opportunity.confidence":"置信度","polymarket.opportunity.analyze":"分析资产","polymarket.signal.BUY":"买入","polymarket.signal.SELL":"卖出","polymarket.signal.HOLD":"持有","polymarket.error.loadFailed":"加载市场列表失败","polymarket.error.searchFailed":"搜索失败","polymarket.error.notFound":"未找到市场数据","polymarket.error.loadDetailFailed":"加载详情失败","polymarket.viewOnPolymarket":"在Polymarket查看","polymarket.filter.explanation.title":"筛选依据说明","polymarket.filter.explanation.volume":"按24小时交易量排序,显示最活跃的预测市场。","polymarket.filter.explanation.aiScore":"按AI机会评分排序,综合考虑AI与市场差异、置信度等因素,优先显示高价值机会。","polymarket.filter.explanation.highProbability":"按AI预测概率排序,优先显示AI认为发生概率较高的事件(AI预测概率 > 市场概率 + 10%)。","polymarket.filter.explanation.highReturn":"按高回报比排序,优先显示AI与市场差异大且置信度高的机会(差异 × 置信度),适合寻找被低估的预测。","polymarket.deepAnalysis.prompt":"当前显示的是基于规则的简单分析。点击下方按钮进行AI深度分析,获得更准确的预测和建议。","polymarket.deepAnalysis.button":"深度分析","polymarket.deepAnalysis.success":"深度分析完成!消耗积分 {credits},剩余积分 {remaining}","polymarket.deepAnalysis.successFree":"深度分析完成!","polymarket.deepAnalysis.failed":"深度分析失败,请稍后重试","polymarket.deepAnalysis.insufficientCredits":"积分不足!需要 {required} 积分,当前 {current} 积分,缺少 {shortage} 积分","polymarket.error.invalidMarketId":"无效的市场ID","polymarket.analysis.title":"Polymarket预测市场分析","polymarket.analysis.description":"输入Polymarket链接或市场标题,AI将为您分析预测市场的交易机会","polymarket.analysis.startAnalysis":"开始分析","polymarket.analysis.inputHint":"请输入Polymarket市场链接或市场标题","polymarket.analysis.inputPlaceholder":'例如:https://polymarket.com/event/xxx 或 "Bitcoin price above $100k in 2025?"',"polymarket.analysis.inputRequired":"请输入Polymarket链接或市场标题","polymarket.analysis.analyzeButton":"开始分析","polymarket.analysis.analyzing":"正在分析中,请稍候...","polymarket.analysis.success":"分析完成!","polymarket.analysis.failed":"分析失败,请稍后重试","polymarket.analysis.insufficientCredits":"积分不足,请先充值","polymarket.analysis.viewOnPolymarket":"在Polymarket查看","polymarket.analysis.aiAnalysis":"AI分析结果","polymarket.analysis.marketProbability":"市场概率","polymarket.analysis.aiPredictedProbability":"AI预测概率","polymarket.analysis.divergence":"差异","polymarket.analysis.recommendation":"推荐","polymarket.analysis.recommendationYes":"YES(看涨)","polymarket.analysis.recommendationNo":"NO(看跌)","polymarket.analysis.recommendationHold":"HOLD(中性)","polymarket.analysis.confidenceScore":"置信度","polymarket.analysis.opportunityScore":"机会评分","polymarket.analysis.reasoning":"分析理由","polymarket.analysis.keyFactors":"关键因素","polymarket.analysis.creditsCharged":"本次分析消耗积分:{credits}","polymarket.analysis.remainingCredits":"剩余积分:{credits}","polymarket.analysis.newAnalysis":"新分析","polymarket.analysis.tabAnalyze":"分析","polymarket.analysis.tabHistory":"历史记录","polymarket.analysis.historyMarket":"市场","polymarket.analysis.historyRecommendation":"推荐","polymarket.analysis.historyOpportunityScore":"机会评分","polymarket.analysis.historyCreatedAt":"分析时间","polymarket.analysis.historyTotal":"共 {total} 条记录","polymarket.analysis.loadHistoryFailed":"加载历史记录失败","aiAssetAnalysis.tabs.polymarket":"预测市场"},f=(0,s.A)((0,s.A)({},y),h)}}]); \ No newline at end of file diff --git a/frontend/dist/js/lang-zh-TW-legacy.023eeb62.js b/frontend/dist/js/lang-zh-TW-legacy.ec96e609.js similarity index 80% rename from frontend/dist/js/lang-zh-TW-legacy.023eeb62.js rename to frontend/dist/js/lang-zh-TW-legacy.ec96e609.js index be58de1..40ad46b 100644 --- a/frontend/dist/js/lang-zh-TW-legacy.023eeb62.js +++ b/frontend/dist/js/lang-zh-TW-legacy.ec96e609.js @@ -1 +1 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[892],{33860:function(a,t,e){e.d(t,{default:function(){return y}});var s=e(57888),i={items_per_page:"條/頁",jump_to:"跳至",jump_to_confirm:"確定",page:"頁",prev_page:"上一頁",next_page:"下一頁",prev_5:"向前 5 頁",next_5:"向後 5 頁",prev_3:"向前 3 頁",next_3:"向後 3 頁"},r=e(85505),o={today:"今天",now:"此刻",backToToday:"返回今天",ok:"確定",timeSelect:"選擇時間",dateSelect:"選擇日期",clear:"清除",month:"月",year:"年",previousMonth:"上個月 (翻頁上鍵)",nextMonth:"下個月 (翻頁下鍵)",monthSelect:"選擇月份",yearSelect:"選擇年份",decadeSelect:"選擇年代",yearFormat:"YYYY年",dayFormat:"D日",dateFormat:"YYYY年M月D日",dateTimeFormat:"YYYY年M月D日 HH時mm分ss秒",previousYear:"上一年 (Control鍵加左方向鍵)",nextYear:"下一年 (Control鍵加右方向鍵)",previousDecade:"上一年代",nextDecade:"下一年代",previousCentury:"上一世紀",nextCentury:"下一世紀"},n={placeholder:"請選擇時間"},d=n,l={lang:(0,r.A)({placeholder:"請選擇日期",rangePlaceholder:["開始日期","結束日期"]},o),timePickerLocale:(0,r.A)({},d)};l.lang.ok="確 定";var c=l,g=c,m={locale:"zh-tw",Pagination:i,DatePicker:c,TimePicker:d,Calendar:g,Table:{filterTitle:"篩選器",filterConfirm:"確定",filterReset:"重置",selectAll:"全部選取",selectInvert:"反向選取",sortTitle:"排序",expand:"展開行",collapse:"關閉行"},Modal:{okText:"確定",cancelText:"取消",justOkText:"知道了"},Popconfirm:{okText:"確定",cancelText:"取消"},Transfer:{searchPlaceholder:"搜尋資料",itemUnit:"項目",itemsUnit:"項目"},Upload:{uploading:"正在上傳...",removeFile:"刪除檔案",uploadError:"上傳失敗",previewFile:"檔案預覽",downloadFile:"下载文件"},Empty:{description:"無此資料"},PageHeader:{back:"返回"}},b=m,h=e(50304),u=e.n(h),p={antLocale:b,momentName:"zh-tw",momentLocale:u()},f={"common.confirm":"確定","common.cancel":"取消","common.save":"保存","common.delete":"刪除","common.edit":"編輯","common.add":"添加","common.close":"關閉","common.ok":"確定","common.actions":"操作","common.refresh":"刷新",submit:"提交",save:"保存","submit.ok":"提交成功","save.ok":"保存成功","menu.welcome":"歡迎","menu.home":"主頁","menu.dashboard":"儀表盤","menu.dashboard.indicator":"指標分析","menu.dashboard.community":"指標社區","menu.dashboard.analysis":"AI 分析","menu.dashboard.tradingAssistant":"交易助手","menu.dashboard.portfolio":"資產監測","menu.settings":"系統設置","menu.dashboard.aiTradingAssistant":"AI交易助手","menu.dashboard.signalRobot":"信號機器人","menu.dashboard.monitor":"監控頁","menu.dashboard.workplace":"工作臺","menu.form":"表單頁","menu.form.basic-form":"基礎表單","menu.form.step-form":"分步表單","menu.form.step-form.info":"分步表單(填寫轉賬信息)","menu.form.step-form.confirm":"分步表單(確認轉賬信息)","menu.form.step-form.result":"分步表單(完成)","menu.form.advanced-form":"高級表單","menu.list":"列表頁","menu.list.table-list":"查詢表格","menu.list.basic-list":"標準列表","menu.list.card-list":"卡片列表","menu.list.search-list":"搜索列表","menu.list.search-list.articles":"搜索列表(文章)","menu.list.search-list.projects":"搜索列表(項目)","menu.list.search-list.applications":"搜索列表(應用)","menu.profile":"詳情頁","menu.profile.basic":"基礎詳情頁","menu.profile.advanced":"高級詳情頁","menu.result":"結果頁","menu.result.success":"成功頁","menu.result.fail":"失敗頁","menu.exception":"異常頁","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"觸發錯誤","menu.account":"個人頁","menu.account.center":"個人中心","menu.account.settings":"個人設置","menu.account.trigger":"觸發報錯","menu.account.logout":"退出登錄","menu.wallet":"我的錢包","menu.docs":"文檔中心","menu.docs.detail":"文檔詳情","menu.header.refreshPage":"刷新頁面","menu.invite.friends":"邀請好友","app.setting.pagestyle":"整體風格設置","app.setting.pagestyle.light":"亮色菜單風格","app.setting.pagestyle.dark":"暗色菜單風格","app.setting.pagestyle.realdark":"暗黑模式","app.setting.themecolor":"主題色","app.setting.navigationmode":"導航模式","app.setting.sidemenu.nav":"側邊欄導航","app.setting.topmenu.nav":"頂部欄導航","app.setting.content-width":"內容區域寬度","app.setting.content-width.tooltip":"該設定僅 [頂部欄導航] 時有效","app.setting.content-width.fixed":"固定","app.setting.content-width.fluid":"流式","app.setting.fixedheader":"固定 Header","app.setting.fixedheader.tooltip":"固定 Header 時可配置","app.setting.autoHideHeader":"下滑時隱藏 Header","app.setting.fixedsidebar":"固定側邊菜單","app.setting.sidemenu":"側邊菜單布局","app.setting.topmenu":"頂部菜單布局","app.setting.othersettings":"其他設置","app.setting.weakmode":"色弱模式","app.setting.multitab":"多頁籤模式","app.setting.copy":"拷貝設置","app.setting.loading":"加載主題中","app.setting.copyinfo":"拷貝設置成功 src/config/defaultSettings.js","app.setting.copy.success":"復制完畢","app.setting.copy.fail":"復制失敗","app.setting.theme.switching":"正在切換主題!","app.setting.production.hint":"配置欄只在開發環境用於預覽,生產環境不會展現,請拷貝後手動修改配置文件","app.setting.themecolor.daybreak":"拂曉藍(默認)","app.setting.themecolor.dust":"薄暮","app.setting.themecolor.volcano":"火山","app.setting.themecolor.sunset":"日暮","app.setting.themecolor.cyan":"明青","app.setting.themecolor.green":"極光綠","app.setting.themecolor.geekblue":"極客藍","app.setting.themecolor.purple":"醬紫","app.setting.tooltip":"頁面設置","notice.title":"通知中心","notice.empty":"暫無通知","notice.markAllRead":"全部已讀","notice.clear":"清空通知","notice.close":"關閉","notice.justNow":"剛剛","notice.minutesAgo":"分鐘前","notice.hoursAgo":"小時前","notice.daysAgo":"天前","notice.detailInfo":"詳細信息","notice.aiDecision":"AI決策","notice.confidence":"置信度","notice.reasoning":"分析理由","notice.symbol":"標的代碼","notice.currentPrice":"當前價格","notice.triggerPrice":"觸發價格","notice.action":"操作","notice.quantity":"數量","notice.viewPortfolio":"查看持倉","notice.type.aiMonitor":"AI監控","notice.type.priceAlert":"價格提醒","notice.type.signal":"交易信號","notice.type.buy":"買入信號","notice.type.sell":"賣出信號","notice.type.hold":"持有建議","notice.type.trade":"交易執行","notice.type.notification":"系統通知","user.login.userName":"用戶名","user.login.password":"密碼","user.login.username.placeholder":"賬戶: admin","user.login.password.placeholder":"密碼: admin or ant.design","user.login.message-invalid-credentials":"登錄失敗,請檢查郵箱和驗證碼","user.login.message-invalid-verification-code":"驗證碼錯誤","user.login.tab-login-credentials":"賬戶密碼登錄","user.login.tab-login-email":"郵箱登錄","user.login.tab-login-mobile":"手機號登錄","user.login.captcha.placeholder":"請輸入圖形驗證碼","user.login.mobile.placeholder":"手機號","user.login.mobile.verification-code.placeholder":"驗證碼","user.login.email.placeholder":"請輸入郵箱地址","user.login.email.verification-code.placeholder":"請輸入驗證碼","user.login.email.sending":"驗證碼發送中...","user.login.email.send-success-title":"提示","user.login.email.send-success":"驗證碼發送成功,請查收郵件","user.login.sms.send-success":"驗證碼發送成功,請查收短信","user.login.remember-me":"自動登錄","user.login.forgot-password":"忘記密碼","user.login.sign-in-with":"其他登錄方式","user.login.signup":"注冊賬戶","user.login.login":"登錄","user.register.register":"注冊","user.register.email.placeholder":"郵箱","user.register.password.placeholder":"請至少輸入 6 個字符。請不要使用容易被猜到的密碼。","user.register.password.popover-message":"請至少輸入 6 個字符。請不要使用容易被猜到的密碼。","user.register.confirm-password.placeholder":"確認密碼","user.register.get-verification-code":"獲取驗證碼","user.register.sign-in":"使用已有賬戶登錄","user.register-result.msg":"你的賬戶:{email} 注冊成功","user.register-result.activation-email":"激活郵件已發送到你的郵箱中,郵件有效期爲24小時。請及時登錄郵箱,點擊郵件中的鏈接激活帳戶。","user.register-result.back-home":"返回首頁","user.register-result.view-mailbox":"查看郵箱","user.email.required":"請輸入郵箱地址!","user.email.wrong-format":"郵箱地址格式錯誤!","user.userName.required":"請輸入帳戶名或郵箱地址","user.password.required":"請輸入密碼!","user.password.twice.msg":"兩次輸入的密碼不匹配!","user.password.strength.msg":"密碼強度不夠 ","user.password.strength.strong":"強度:強","user.password.strength.medium":"強度:中","user.password.strength.low":"強度:低","user.password.strength.short":"強度:太短","user.confirm-password.required":"請確認密碼!","user.phone-number.required":"請輸入正確的手機號","user.phone-number.wrong-format":"手機號格式錯誤!","user.verification-code.required":"請輸入驗證碼!","user.captcha.required":"請輸入圖形驗證碼!","user.login.infos":"QuantDinger 是一個 AI 多智能體股票分析輔助工具,不具備證券投資諮詢資質。平臺中的所有分析結果、評分、參考意見均由 AI 基於歷史數據自動生成,僅供學習、研究與技術交流使用,不構成任何投資建議或決策依據。股票投資存在市場風險、流動性風險、政策風險等多種風險,可能導致本金損失。用戶應基於自身風險承受能力獨立決策,使用本工具產生的任何投資行爲及其後果由用戶自行承擔。市場有風險,投資需謹慎。","user.login.tab-login-web3":"Web3 登錄","user.login.web3.tip":"使用錢包進行籤名登錄","user.login.web3.connect":"連接錢包並登錄","user.login.web3.no-wallet":"未檢測到錢包","user.login.web3.no-address":"未獲取到錢包地址","user.login.web3.nonce-failed":"獲取隨機數失敗","user.login.web3.verify-failed":"籤名驗證失敗","user.login.web3.success":"登錄成功","user.login.web3.failed":"錢包登錄失敗","nav.no_wallet":"未檢測到錢包","nav.copy":"復制","nav.copy_success":"復制成功","user.login.oauth.google":"使用 Google 登錄","user.login.oauth.github":"使用 GitHub 登錄","user.login.oauth.loading":"正在跳轉到授權頁面...","user.login.oauth.failed":"OAuth 登錄失敗","user.login.oauth.get-url-failed":"獲取授權鏈接失敗","user.login.subtitle":"驅動的全球市場量化洞察","user.login.legal.title":"法律免責聲明","user.login.legal.view":"查看法律免責聲明","user.login.legal.collapse":"收起法律免責聲明","user.login.legal.agree":"我已閱讀並同意法律免責聲明","user.login.legal.required":"請先閱讀並勾選法律免責聲明","user.login.legal.content":"QuantDinger 是一個 AI 多智能體股票分析輔助工具,不具備證券投資諮詢資質。平臺中的所有分析結果、評分、參考意見均由 AI 基於歷史數據自動生成,僅供學習、研究與技術交流使用,不構成任何投資建議或決策依據。股票投資存在市場風險、流動性風險、政策風險等多種風險,可能導致本金損失。用戶應基於自身風險承受能力獨立決策,使用本工具產生的任何投資行爲及其後果由用戶自行承擔。市場有風險,投資需謹慎。","user.login.privacy.title":"用戶隱私條款","user.login.privacy.view":"查看用戶隱私條款","user.login.privacy.collapse":"收起用戶隱私條款","user.login.privacy.content":"我們重視您的隱私與數據保護。1) 收集範圍:僅收集實現功能所需的信息(如郵箱、手機號、區號、Web3 錢包地址)以及必要的日志與設備信息。2) 使用目的:用於賬戶登錄與安全校驗、服務功能提供、問題排查與合規要求。3) 存儲與安全:數據加密存儲,並採取必要的權限與訪問控制措施,盡力防止未經授權的訪問、披露或丟失。4) 共享與第三方:除法律法規要求或履行服務所必需外,不會與第三方共享您的個人信息;若涉及第三方服務(如錢包、短信服務商),僅在實現功能所需的最小範圍內處理。5) Cookies/本地存儲:用於登錄態與必要的會話維持(如令牌、PHPSESSID),您可在瀏覽器中進行清理或限制。6) 個人權利:您可根據法律法規行使查詢、更正、刪除、撤回同意等權利。7) 變更與通知:本條款更新後將在頁面顯著位置提示。繼續使用本服務即表示您已閱讀並同意更新內容。若您不同意本條款或其中任何更新,請停止使用本服務並聯系我們。","account.basicInfo":"基礎信息","account.id":"用戶ID","account.username":"用戶名","account.nickname":"暱稱","account.email":"郵箱","account.mobile":"手機號","account.web3address":"錢包地址","account.pid":"推薦人ID","account.level":"用戶等級","account.money":"餘額","account.qdtBalance":"QDT 餘額","account.score":"積分","account.createtime":"注冊時間","account.inviteLink":"邀請鏈接","account.recharge":"充值","account.rechargeTip":"請使用微信或支付寶掃描下方二維碼進行充值","account.qrCodePlaceholder":"二維碼佔位符(模擬)","account.rechargeAmount":"充值金額","account.enterAmount":"請輸入充值金額","account.rechargeHint":"最小充值金額:1 QDT","account.confirmRecharge":"確認充值","account.enterValidAmount":"請輸入有效的充值金額","account.rechargeSuccess":"充值成功!已充值 {amount} QDT","account.settings.menuMap.basic":"基本設置","account.settings.menuMap.security":"安全設置","account.settings.menuMap.notification":"新消息通知","account.settings.menuMap.moneyLog":"資金明細","account.moneyLog.empty":"暫無資金明細","account.moneyLog.total":"共 {total} 條記錄","account.moneyLog.type.purchase":"購買指標","account.moneyLog.type.recharge":"充值","account.moneyLog.type.refund":"退款","account.moneyLog.type.reward":"獎勵","account.moneyLog.type.income":"指標收入","account.moneyLog.type.commission":"平臺手續費","wallet.balance":"QDT 餘額","wallet.recharge":"充值","wallet.withdraw":"提現","wallet.filter":"篩選","wallet.reset":"重置","wallet.totalRecharge":"累計充值","wallet.totalWithdraw":"累計提現","wallet.totalIncome":"累計收入","wallet.records":"交易記錄與資金明細","wallet.tradingRecords":"交易記錄","wallet.moneyLog":"資金明細","wallet.rechargeTip":"請使用微信或支付寶掃描下方二維碼進行充值","wallet.qrCodePlaceholder":"二維碼佔位符(模擬)","wallet.rechargeAmount":"充值金額","wallet.enterAmount":"請輸入充值金額","wallet.rechargeHint":"最小充值金額:1 QDT","wallet.confirmRecharge":"確認充值","wallet.enterValidAmount":"請輸入有效的充值金額","wallet.rechargeSuccess":"充值成功!已充值 {amount} QDT","wallet.rechargeFailed":"充值失敗","wallet.withdrawTip":"請輸入提現金額和提現地址","wallet.withdrawAmount":"提現金額","wallet.enterWithdrawAmount":"請輸入提現金額","wallet.withdrawHint":"最小提現金額:1 QDT","wallet.withdrawAddress":"提現地址(可選)","wallet.enterWithdrawAddress":"請輸入提現地址","wallet.confirmWithdraw":"確認提現","wallet.enterValidWithdrawAmount":"請輸入有效的提現金額","wallet.insufficientBalance":"餘額不足","wallet.withdrawSuccess":"提現成功!已提現 {amount} QDT","wallet.withdrawFailed":"提現失敗","wallet.noTradingRecords":"暫無交易記錄","wallet.noMoneyLog":"暫無資金明細","wallet.loadTradingRecordsFailed":"加載交易記錄失敗","wallet.loadMoneyLogFailed":"加載資金明細失敗","wallet.moneyLogTotal":"共 {total} 條記錄","wallet.moneyLogTypeTitle":"類型","wallet.moneyLogType.all":"全部類型","wallet.table.time":"時間","wallet.table.type":"類型","wallet.table.price":"價格","wallet.table.amount":"數量","wallet.table.money":"金額","wallet.table.balance":"餘額","wallet.table.memo":"備注","wallet.table.value":"價值","wallet.table.profit":"盈虧","wallet.table.commission":"手續費","wallet.table.total":"共 {total} 條記錄","wallet.tradeType.buy":"買入","wallet.tradeType.sell":"賣出","wallet.tradeType.liquidation":"強平","wallet.tradeType.openLong":"開多","wallet.tradeType.addLong":"加多","wallet.tradeType.closeLong":"平多","wallet.tradeType.closeLongStop":"止損平多","wallet.tradeType.closeLongProfit":"止盈平多","wallet.tradeType.openShort":"開空","wallet.tradeType.addShort":"加空","wallet.tradeType.closeShort":"平空","wallet.tradeType.closeShortStop":"止損平空","wallet.tradeType.closeShortProfit":"止盈平空","wallet.moneyLogType.purchase":"購買指標","wallet.moneyLogType.recharge":"充值","wallet.moneyLogType.withdraw":"提現","wallet.moneyLogType.refund":"退款","wallet.moneyLogType.reward":"獎勵","wallet.moneyLogType.income":"收入","wallet.moneyLogType.commission":"手續費","wallet.web3Address.required":"請先填寫Web3錢包地址","wallet.web3Address.requiredDescription":"充值前需要先綁定您的Web3錢包地址,用於接收充值","wallet.web3Address.placeholder":"請輸入您的Web3錢包地址(0x開頭)","wallet.web3Address.save":"保存錢包地址","wallet.web3Address.saveSuccess":"錢包地址保存成功","wallet.web3Address.saveFailed":"保存錢包地址失敗","wallet.web3Address.invalidFormat":"請輸入有效的Web3錢包地址(以太坊格式:0x開頭42位字符,或TRC20格式:T開頭34位字符)","wallet.selectCoin":"選擇幣種","wallet.selectChain":"選擇鏈","wallet.chain.eth":"ETH(ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"BSC","wallet.targetQdtAmount":"想要兌換的QDT數量(可選)","wallet.targetQdtAmount.placeholder":"請輸入想要兌換的QDT數量,當前QDT價格:{price} USDT","wallet.targetQdtAmount.requiredUsdt":"需要充值:{amount} USDT","wallet.rechargeAddress":"充值地址","wallet.copyAddress":"復制","wallet.copySuccess":"復制成功!","wallet.copyFailed":"復制失敗,請手動復制","wallet.rechargeAddressHint":"請確保使用{chain}鏈向此地址充值{coin}","wallet.qdtPrice.loading":"加載中...","wallet.rechargeTip.new":"請選擇幣種和鏈,然後掃描下方二維碼進行充值","wallet.exchangeRate":"1 QDT ≈ {rate} USDT","wallet.withdrawableAmount":"可提現金額","wallet.totalBalance":"總餘額","wallet.insufficientWithdrawable":"可提現金額不足,當前可提現:{amount} QDT","wallet.withdrawAddressRequired":"請輸入提現地址","wallet.withdrawAddressHint":"請確保地址正確,提現後無法撤銷","wallet.withdrawSubmitSuccess":"提現申請提交成功,請等待審核","menu.footer.contactUs":"聯系我們","menu.footer.getSupport":"獲取支持","menu.footer.socialAccounts":"社交賬戶","menu.footer.userAgreement":"用戶協議","menu.footer.privacyPolicy":"隱私條例","menu.footer.support":"Support","menu.footer.featureRequest":"Feature request","menu.footer.email":"Email","menu.footer.liveChat":"24/7 live chat","dashboard.analysis.title":"Multi-Dimensional Analysis","dashboard.analysis.subtitle":"AI驅動的綜合金融分析平臺","dashboard.analysis.selectSymbol":"選擇或輸入標的代碼","dashboard.analysis.selectModel":"選擇模型","dashboard.analysis.startAnalysis":"開始分析","dashboard.analysis.history":"歷史記錄","dashboard.analysis.tab.overview":"綜合分析","dashboard.analysis.tab.fundamental":"基本面","dashboard.analysis.tab.technical":"技術","dashboard.analysis.tab.news":"新聞","dashboard.analysis.tab.sentiment":"情緒","dashboard.analysis.tab.risk":"風險","dashboard.analysis.tab.debate":"多空辯論","dashboard.analysis.tab.decision":"最終決策","dashboard.analysis.empty.selectSymbol":"選擇標的開始分析","dashboard.analysis.empty.selectSymbolDesc":"從自選股列表中選擇或輸入標的代碼,獲取多維度AI分析報告","dashboard.analysis.empty.startAnalysis":'點擊"開始分析"按鈕進行多維度分析',"dashboard.analysis.empty.startAnalysisDesc":"我們將從基本面、技術、新聞、情緒和風險等多個維度爲您提供全面的分析","dashboard.analysis.empty.noData":"暫無{type}分析數據,請先進行綜合分析","dashboard.analysis.empty.noWatchlist":"暫無自選股","dashboard.analysis.empty.noHistory":"暫無歷史記錄","dashboard.analysis.empty.watchlistHint":"暫無自選股,請先","dashboard.analysis.empty.noDebateData":"暫無辯論數據","dashboard.analysis.empty.noDecisionData":"暫無決策數據","dashboard.analysis.empty.selectAgent":"請選擇一個 Agent 查看分析結果","dashboard.analysis.loading.analyzing":"正在分析中,請稍候...","dashboard.analysis.loading.fundamental":"正在分析基本面數據...","dashboard.analysis.loading.technical":"正在分析技術指標...","dashboard.analysis.loading.news":"正在分析新聞數據...","dashboard.analysis.loading.sentiment":"正在分析市場情緒...","dashboard.analysis.loading.risk":"正在評估風險...","dashboard.analysis.loading.debate":"正在進行多空辯論...","dashboard.analysis.loading.decision":"正在生成最終決策...","dashboard.analysis.score.overall":"綜合評分","dashboard.analysis.score.recommendation":"投資建議","dashboard.analysis.score.confidence":"置信度","dashboard.analysis.dimension.fundamental":"基本面","dashboard.analysis.dimension.technical":"技術","dashboard.analysis.dimension.news":"新聞","dashboard.analysis.dimension.sentiment":"情緒","dashboard.analysis.dimension.risk":"風險","dashboard.analysis.card.dimensionScores":"各維度評分","dashboard.analysis.card.overviewReport":"綜合分析報告","dashboard.analysis.card.financialMetrics":"財務指標","dashboard.analysis.card.fundamentalReport":"基本面分析報告","dashboard.analysis.card.technicalIndicators":"技術指標","dashboard.analysis.card.technicalReport":"技術分析報告","dashboard.analysis.card.newsList":"相關新聞","dashboard.analysis.card.newsReport":"新聞分析報告","dashboard.analysis.card.sentimentIndicators":"情緒指標","dashboard.analysis.card.sentimentReport":"情緒分析報告","dashboard.analysis.card.riskMetrics":"風險指標","dashboard.analysis.card.riskReport":"風險評估報告","dashboard.analysis.card.bullView":"看漲觀點 (Bull)","dashboard.analysis.card.bearView":"看跌觀點 (Bear)","dashboard.analysis.card.researchConclusion":"研究員結論","dashboard.analysis.card.traderPlan":"交易員計劃","dashboard.analysis.card.riskDebate":"風險委員會辯論","dashboard.analysis.card.finalDecision":"最終決策 (Final Decision)","dashboard.analysis.card.tradePlanDetail":"交易計劃詳情","dashboard.analysis.tradingPlan.entry_price":"入場價格","dashboard.analysis.tradingPlan.position_size":"倉位大小","dashboard.analysis.tradingPlan.stop_loss":"止損","dashboard.analysis.tradingPlan.take_profit":"止盈","dashboard.analysis.label.confidence":"置信度","dashboard.analysis.label.keyPoints":"核心要點","dashboard.analysis.label.riskWarning":"風險提示","dashboard.analysis.risk.risky":"激進派觀點 (Risky)","dashboard.analysis.risk.neutral":"中立派觀點 (Neutral)","dashboard.analysis.risk.safe":"保守派觀點 (Safe)","dashboard.analysis.risk.conclusion":"結論","dashboard.analysis.feature.fundamental":"基本面分析","dashboard.analysis.feature.technical":"技術分析","dashboard.analysis.feature.news":"新聞分析","dashboard.analysis.feature.sentiment":"情緒分析","dashboard.analysis.feature.risk":"風險評估","dashboard.analysis.watchlist.title":"我的自選股","dashboard.analysis.watchlist.add":"添加","dashboard.analysis.watchlist.addStock":"添加股票","dashboard.analysis.modal.addStock.title":"添加自選股","dashboard.analysis.modal.addStock.confirm":"確定","dashboard.analysis.modal.addStock.cancel":"取消","dashboard.analysis.modal.addStock.market":"市場類型","dashboard.analysis.modal.addStock.marketPlaceholder":"請選擇市場","dashboard.analysis.modal.addStock.marketRequired":"請選擇市場類型","dashboard.analysis.modal.addStock.symbol":"股票代碼","dashboard.analysis.modal.addStock.symbolPlaceholder":"例如: AAPL, TSLA, GOOGL, 000001, BTC","dashboard.analysis.modal.addStock.symbolRequired":"請輸入股票代碼","dashboard.analysis.modal.addStock.searchPlaceholder":"搜索標的代碼或名稱","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"搜索或輸入標的代碼(如:AAPL、BTC/USDT、EUR/USD)","dashboard.analysis.modal.addStock.searchOrInputHint":"支持搜索數據庫中的標的,或直接輸入代碼(系統將自動獲取名稱)","dashboard.analysis.modal.addStock.search":"搜索","dashboard.analysis.modal.addStock.searchResults":"搜索結果","dashboard.analysis.modal.addStock.hotSymbols":"熱門標的","dashboard.analysis.modal.addStock.noHotSymbols":"暫無熱門標的","dashboard.analysis.modal.addStock.selectedSymbol":"已選標的","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"請先選擇一個標的","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"請先選擇一個標的或輸入標的代碼","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"請輸入標的代碼","dashboard.analysis.modal.addStock.pleaseSelectMarket":"請先選擇市場類型","dashboard.analysis.modal.addStock.searchFailed":"搜索失敗,請稍後重試","dashboard.analysis.modal.addStock.noSearchResults":"未找到匹配的標的","dashboard.analysis.modal.addStock.willAutoFetchName":"系統將自動獲取名稱","dashboard.analysis.modal.addStock.addDirectly":"直接添加","dashboard.analysis.modal.addStock.nameWillBeFetched":"名稱將在添加時自動獲取","dashboard.analysis.market.USStock":"美股","dashboard.analysis.market.Crypto":"加密貨幣","dashboard.analysis.market.Forex":"外匯","dashboard.analysis.market.Futures":"期貨","dashboard.analysis.modal.history.title":"歷史分析記錄","dashboard.analysis.modal.history.viewResult":"查看結果","dashboard.analysis.modal.history.completeTime":"完成時間","dashboard.analysis.modal.history.error":"錯誤","dashboard.analysis.status.pending":"待處理","dashboard.analysis.status.processing":"處理中","dashboard.analysis.status.completed":"已完成","dashboard.analysis.status.failed":"失敗","dashboard.analysis.message.selectSymbol":"請先選擇標的","dashboard.analysis.message.taskCreated":"分析任務已創建,正在後臺執行...","dashboard.analysis.message.analysisComplete":"分析完成","dashboard.analysis.message.analysisCompleteCache":"分析完成(使用緩存數據)","dashboard.analysis.message.analysisFailed":"分析失敗,請稍後重試","dashboard.analysis.message.addStockSuccess":"添加成功","dashboard.analysis.message.addStockFailed":"添加失敗","dashboard.analysis.message.removeStockSuccess":"移除成功","dashboard.analysis.message.removeStockFailed":"移除失敗","dashboard.analysis.message.resumingAnalysis":"正在恢復分析任務...","dashboard.analysis.message.deleteSuccess":"刪除成功","dashboard.analysis.message.deleteFailed":"刪除失敗","dashboard.analysis.modal.history.delete":"刪除","dashboard.analysis.modal.history.deleteConfirm":"確定要刪除這條分析記錄嗎?","dashboard.analysis.test":"工專路 {no} 號店","dashboard.analysis.introduce":"指標說明","dashboard.analysis.total-sales":"總銷售額","dashboard.analysis.day-sales":"日均銷售額¥","dashboard.analysis.visits":"訪問量","dashboard.analysis.visits-trend":"訪問量趨勢","dashboard.analysis.visits-ranking":"門店訪問量排名","dashboard.analysis.day-visits":"日訪問量","dashboard.analysis.week":"周同比","dashboard.analysis.day":"日同比","dashboard.analysis.payments":"支付筆數","dashboard.analysis.conversion-rate":"轉化率","dashboard.analysis.operational-effect":"運營活動效果","dashboard.analysis.sales-trend":"銷售趨勢","dashboard.analysis.sales-ranking":"門店銷售額排名","dashboard.analysis.all-year":"全年","dashboard.analysis.all-month":"本月","dashboard.analysis.all-week":"本周","dashboard.analysis.all-day":"今日","dashboard.analysis.search-users":"搜索用戶數","dashboard.analysis.per-capita-search":"人均搜索次數","dashboard.analysis.online-top-search":"線上熱門搜索","dashboard.analysis.the-proportion-of-sales":"銷售額類別佔比","dashboard.analysis.dropdown-option-one":"操作一","dashboard.analysis.dropdown-option-two":"操作二","dashboard.analysis.channel.all":"全部渠道","dashboard.analysis.channel.online":"線上","dashboard.analysis.channel.stores":"門店","dashboard.analysis.sales":"銷售額","dashboard.analysis.traffic":"客流量","dashboard.analysis.table.rank":"排名","dashboard.analysis.table.search-keyword":"搜索關鍵詞","dashboard.analysis.table.users":"用戶數","dashboard.analysis.table.weekly-range":"周漲幅","dashboard.indicator.selectSymbol":"選擇或輸入標的代碼","dashboard.indicator.emptyWatchlistHint":"暫無自選股,請先添加","dashboard.indicator.hint.selectSymbol":"請選擇標的開始分析","dashboard.indicator.hint.selectSymbolDesc":"在上方搜索框中選擇或輸入股票代碼,查看K線圖表和技術指標","dashboard.indicator.retry":"重試","dashboard.indicator.panel.title":"技術指標","dashboard.indicator.panel.realtimeOn":"關閉實時更新","dashboard.indicator.panel.realtimeOff":"開啓實時更新","dashboard.indicator.panel.themeLight":"切換到深色主題","dashboard.indicator.panel.themeDark":"切換到淺色主題","dashboard.indicator.section.enabled":"已啓用","dashboard.indicator.section.added":"我添加的指標","dashboard.indicator.section.custom":"自己創建的指標","dashboard.indicator.section.bought":"我選購的指標","dashboard.indicator.section.myCreated":"我創建的指標","dashboard.indicator.empty":"暫無指標,請先添加或創建指標","dashboard.indicator.buy":"購買指標","dashboard.indicator.action.start":"啓動","dashboard.indicator.action.stop":"關閉","dashboard.indicator.action.edit":"編輯","dashboard.indicator.action.delete":"刪除","dashboard.indicator.action.backtest":"回測","dashboard.indicator.status.normal":"正常","dashboard.indicator.status.normalPermanent":"正常(永久有效)","dashboard.indicator.status.expired":"已過期","dashboard.indicator.expiry.permanent":"永久有效","dashboard.indicator.expiry.noExpiry":"無到期時間","dashboard.indicator.expiry.expired":"已過期:{date}","dashboard.indicator.expiry.expiresOn":"到期時間:{date}","dashboard.indicator.delete.confirmTitle":"確認刪除","dashboard.indicator.delete.confirmContent":'確定要刪除指標"{name}"嗎?此操作不可恢復。',"dashboard.indicator.delete.confirmOk":"刪除","dashboard.indicator.delete.confirmCancel":"取消","dashboard.indicator.delete.success":"刪除成功","dashboard.indicator.delete.failed":"刪除失敗","dashboard.indicator.save.success":"保存成功","dashboard.indicator.save.failed":"保存失敗","dashboard.indicator.error.loadWatchlistFailed":"加載自選股失敗","dashboard.indicator.error.chartNotReady":"圖表組件未初始化,請先選擇標的並等待圖表加載完成","dashboard.indicator.error.chartMethodNotReady":"圖表組件方法未就緒,請稍後重試","dashboard.indicator.error.chartExecuteNotReady":"圖表組件執行方法未就緒,請稍後重試","dashboard.indicator.error.parseFailed":"無法解析Python代碼","dashboard.indicator.error.parseFailedCheck":"無法解析Python代碼,請檢查代碼格式","dashboard.indicator.error.addIndicatorFailed":"添加指標失敗","dashboard.indicator.error.runIndicatorFailed":"運行指標失敗","dashboard.indicator.error.pleaseLogin":"請先登錄","dashboard.indicator.error.loadDataFailed":"數據加載失敗","dashboard.indicator.error.loadDataFailedDesc":"請檢查網絡連接","dashboard.indicator.error.tiingoSubscription":"外匯1分鐘數據需要 Tiingo 付費訂閱,請使用其他時間週期或升級訂閱","dashboard.indicator.error.pythonEngineFailed":"Python 引擎加載失敗,指標功能可能無法使用","dashboard.indicator.error.chartInitFailed":"圖表初始化失敗","dashboard.indicator.warning.enterCode":"請先輸入指標代碼","dashboard.indicator.warning.pyodideLoadFailed":"Python 引擎加載失敗","dashboard.indicator.warning.pyodideLoadFailedDesc":"您當前所在區域或網絡環境無法使用該功能","dashboard.indicator.warning.chartNotInitialized":"圖表未初始化,無法使用畫線工具","dashboard.indicator.success.runIndicator":"指標運行成功","dashboard.indicator.success.clearDrawings":"已清除所有畫線","dashboard.indicator.sma":"SMA (均線組合)","dashboard.indicator.ema":"EMA (指數均線組合)","dashboard.indicator.rsi":"RSI (相對強弱)","dashboard.indicator.macd":"MACD","dashboard.indicator.bb":"布林帶 (Bollinger Bands)","dashboard.indicator.atr":"ATR (平均真實波幅)","dashboard.indicator.cci":"CCI (商品通道指數)","dashboard.indicator.williams":"Williams %R (威廉指標)","dashboard.indicator.mfi":"MFI (資金流量指標)","dashboard.indicator.adx":"ADX (平均趨向指數)","dashboard.indicator.obv":"OBV (能量潮)","dashboard.indicator.adosc":"ADOSC (積累/派發振蕩器)","dashboard.indicator.ad":"AD (積累/派發線)","dashboard.indicator.kdj":"KDJ (隨機指標)","dashboard.indicator.signal.buy":"BUY","dashboard.indicator.signal.sell":"SELL","dashboard.indicator.signal.supertrendBuy":"SuperTrend Buy","dashboard.indicator.signal.supertrendSell":"SuperTrend Sell","dashboard.indicator.chart.kline":"K線","dashboard.indicator.chart.volume":"成交量","dashboard.indicator.chart.uptrend":"Up Trend","dashboard.indicator.chart.downtrend":"Down Trend","dashboard.indicator.tooltip.time":"時間","dashboard.indicator.tooltip.open":"開","dashboard.indicator.tooltip.close":"收","dashboard.indicator.tooltip.high":"高","dashboard.indicator.tooltip.low":"低","dashboard.indicator.tooltip.volume":"成交量","dashboard.indicator.drawing.line":"線段","dashboard.indicator.drawing.horizontalLine":"水平線","dashboard.indicator.drawing.verticalLine":"垂直線","dashboard.indicator.drawing.ray":"射線","dashboard.indicator.drawing.straightLine":"直線","dashboard.indicator.drawing.parallelLine":"平行線","dashboard.indicator.drawing.priceLine":"價格線","dashboard.indicator.drawing.priceChannel":"價格通道","dashboard.indicator.drawing.fibonacciLine":"斐波那契線","dashboard.indicator.drawing.measure":"測量","dashboard.indicator.drawing.clearAll":"清除所有畫線","dashboard.indicator.market.USStock":"美股","dashboard.indicator.market.Crypto":"加密貨幣","dashboard.indicator.market.Forex":"外匯","dashboard.indicator.market.Futures":"期貨","dashboard.indicator.create":"創建指標","dashboard.indicator.editor.title":"創建/編輯指標","dashboard.indicator.editor.name":"指標名稱","dashboard.indicator.editor.nameRequired":"請輸入指標名稱","dashboard.indicator.editor.namePlaceholder":"請輸入指標名稱","dashboard.indicator.editor.description":"指標描述","dashboard.indicator.editor.descriptionPlaceholder":"請輸入指標描述(可選)","dashboard.indicator.editor.code":"指標腳本(Python)","dashboard.indicator.editor.codeRequired":"請輸入指標代碼","dashboard.indicator.editor.codePlaceholder":"請輸入Python代碼","dashboard.indicator.editor.run":"運行","dashboard.indicator.editor.runHint":"點擊運行按鈕可以在K線圖上預覽指標效果","dashboard.indicator.editor.guide":"開發指南","dashboard.indicator.editor.guideTitle":"Python 指標開發指南","dashboard.indicator.editor.save":"保存","dashboard.indicator.editor.cancel":"取消","dashboard.indicator.editor.unnamed":"未命名指標","dashboard.indicator.editor.publishToCommunity":"發布到社區","dashboard.indicator.editor.publishToCommunityHint":"發布後,其他用戶可以在社區中查看和使用您的指標","dashboard.indicator.editor.indicatorType":"指標類型","dashboard.indicator.editor.indicatorTypeRequired":"請選擇指標類型","dashboard.indicator.editor.indicatorTypePlaceholder":"請選擇指標類型","dashboard.indicator.editor.previewImage":"預覽圖","dashboard.indicator.editor.uploadImage":"上傳圖片","dashboard.indicator.editor.previewImageHint":"建議尺寸:800x400,大小不超過2MB","dashboard.indicator.editor.pricing":"售價(QDT)","dashboard.indicator.editor.pricingType.free":"免費","dashboard.indicator.editor.pricingType.permanent":"永久","dashboard.indicator.editor.pricingType.monthly":"月付","dashboard.indicator.editor.price":"價格","dashboard.indicator.editor.priceRequired":"請輸入價格","dashboard.indicator.editor.pricePlaceholder":"請輸入價格","dashboard.indicator.editor.pricingHint":"免費指標雖然價格爲0,但平臺會根據您的指標使用量和好評率給予獎勵(QDT)","dashboard.indicator.editor.aiGenerate":"智能生成","dashboard.indicator.editor.aiPromptPlaceholder":"請描述你的信號邏輯(只輸出 buy/sell)與繪圖(plots)。倉位/風控/加減倉請在回測配置中設定。","dashboard.indicator.editor.aiGenerateBtn":"AI生成代碼","dashboard.indicator.editor.aiPromptRequired":"請輸入您的想法","dashboard.indicator.editor.aiGenerateSuccess":"代碼生成成功","dashboard.indicator.editor.aiGenerateError":"代碼生成失敗,請稍後重試","dashboard.indicator.editor.verifyCode":"代碼檢查","dashboard.indicator.editor.verifyCodeSuccess":"代碼檢查通過","dashboard.indicator.editor.verifyCodeFailed":"代碼檢查未通過","dashboard.indicator.editor.verifyCodeEmpty":"代碼不能為空","dashboard.indicator.boundary.message":"提示:指標腳本只負責「計算 + 繪圖 + buy/sell 信號」;倉位、風控、加減倉、手續費/滑點屬於策略執行配置。","dashboard.indicator.boundary.indicatorRule":"指標腳本請只輸出 buy/sell(並設定 df['buy']/df['sell'])。不要在腳本內撰寫倉位管理、止盈止損、加減倉。","dashboard.indicator.boundary.backtestRule":"規則:同一根K線若出現主信號(buy/sell→開/平倉/反手),本K線將跳過所有加倉與減倉。","dashboard.indicator.backtest.title":"指標回測","dashboard.indicator.backtest.config":"回測參數","dashboard.indicator.backtest.startDate":"開始日期","dashboard.indicator.backtest.endDate":"結束日期","dashboard.indicator.backtest.selectStartDate":"選擇開始日期","dashboard.indicator.backtest.selectEndDate":"選擇結束日期","dashboard.indicator.backtest.startDateRequired":"請選擇開始日期","dashboard.indicator.backtest.endDateRequired":"請選擇結束日期","dashboard.indicator.backtest.initialCapital":"初始資金","dashboard.indicator.backtest.initialCapitalRequired":"請輸入初始資金","dashboard.indicator.backtest.commission":"手續費率(%)","dashboard.indicator.backtest.commissionHint":"按名義價值(含槓桿)收取;每筆成交(開/平倉)都會從餘額扣除。","dashboard.indicator.backtest.leverage":"槓杆倍率","dashboard.indicator.backtest.timeframe":"K線週期","dashboard.indicator.backtest.tradeDirection":"交易方向","dashboard.indicator.backtest.longOnly":"做多","dashboard.indicator.backtest.shortOnly":"做空","dashboard.indicator.backtest.both":"雙向","dashboard.indicator.backtest.run":"開始回測","dashboard.indicator.backtest.rerun":"重新回測","dashboard.indicator.backtest.close":"關閉","dashboard.indicator.backtest.running":"正在進行指標回測...","dashboard.indicator.backtest.loadingTip1":"正在獲取歷史K線數據...","dashboard.indicator.backtest.loadingTip2":"正在執行策略信號計算...","dashboard.indicator.backtest.loadingTip3":"正在模擬交易執行...","dashboard.indicator.backtest.loadingTip4":"正在計算回測指標...","dashboard.indicator.backtest.loadingTip5":"即將完成,請稍候...","dashboard.indicator.backtest.results":"回測結果","dashboard.indicator.backtest.totalReturn":"總收益率","dashboard.indicator.backtest.annualReturn":"年化收益","dashboard.indicator.backtest.maxDrawdown":"最大回撤","dashboard.indicator.backtest.sharpeRatio":"夏普比率","dashboard.indicator.backtest.winRate":"勝率","dashboard.indicator.backtest.profitFactor":"盈虧比","dashboard.indicator.backtest.totalTrades":"交易次數","dashboard.indicator.totalReturn":"總收益率","dashboard.indicator.annualReturn":"年化收益率","dashboard.indicator.maxDrawdown":"最大回撤","dashboard.indicator.sharpeRatio":"夏普比率","dashboard.indicator.winRate":"勝率","dashboard.indicator.profitFactor":"盈虧比","dashboard.indicator.totalTrades":"總交易次數","dashboard.indicator.backtest.totalCommission":"總手續費","dashboard.indicator.backtest.equityCurve":"收益曲線","dashboard.indicator.backtest.strategy":"指標收益","dashboard.indicator.backtest.benchmark":"基準收益","dashboard.indicator.backtest.tradeHistory":"交易記錄","dashboard.indicator.backtest.tradeTime":"時間","dashboard.indicator.backtest.tradeType":"類型","dashboard.indicator.backtest.buy":"買入","dashboard.indicator.backtest.sell":"賣出","dashboard.indicator.backtest.liquidation":"爆倉","dashboard.indicator.backtest.openLong":"開多","dashboard.indicator.backtest.closeLong":"平多","dashboard.indicator.backtest.closeLongStop":"平多(止損)","dashboard.indicator.backtest.closeLongProfit":"平多(止盈)","dashboard.indicator.backtest.addLong":"加多倉","dashboard.indicator.backtest.openShort":"開空","dashboard.indicator.backtest.closeShort":"平空","dashboard.indicator.backtest.closeShortStop":"平空(止損)","dashboard.indicator.backtest.closeShortProfit":"平空(止盈)","dashboard.indicator.backtest.addShort":"加空倉","dashboard.indicator.backtest.price":"價格","dashboard.indicator.backtest.amount":"數量","dashboard.indicator.backtest.balance":"賬戶餘額","dashboard.indicator.backtest.profit":"盈虧","dashboard.indicator.backtest.success":"回測完成","dashboard.indicator.backtest.failed":"回測失敗,請稍後重試","dashboard.indicator.backtest.quickSelect":"快速選擇","dashboard.indicator.backtest.precisionMode":"回測精度模式","dashboard.indicator.backtest.estimatedCandles":"預計處理約 {count} 根K線","dashboard.indicator.backtest.highPrecisionDesc":"使用1分鐘級別K線進行高精度回測,止損止盈觸發更精確","dashboard.indicator.backtest.mediumPrecisionDesc":"回測區間超過30天,使用5分鐘級別K線以平衡精度與性能","dashboard.indicator.backtest.standardModeWarning":"使用標準回測模式","dashboard.indicator.backtest.standardModeDesc":"當前配置不支持高精度回測,將使用策略K線進行回測","dashboard.indicator.backtest.onlyCryptoSupported":"高精度回測僅支持加密貨幣市場","dashboard.indicator.backtest.noIndicatorCode":"該指標沒有可回測的代碼","dashboard.indicator.backtest.noSymbol":"請先選擇交易標的","dashboard.indicator.backtest.dateRangeExceeded":"回測時間範圍超出限制:{timeframe}周期最多可回測{maxRange}","dashboard.indicator.backtest.dateRangeExceededDays":"回測時間範圍超出限制:{timeframe}周期最多可回測{maxRange}({maxDays}天)","dashboard.indicator.backtest.metaLine":"標的:{symbol} | 市場:{market} | 週期:{timeframe}","dashboard.indicator.backtest.savedRunId":"回測已保存,記錄ID:{id}","dashboard.indicator.backtest.historyTitle":"回測記錄","dashboard.indicator.backtest.historyRefresh":"重新整理","dashboard.indicator.backtest.historyView":"查看","dashboard.indicator.backtest.historyNoData":"暫無回測記錄","dashboard.indicator.backtest.historyUseCurrent":"僅目前幣種/週期","dashboard.indicator.backtest.historyFilterSymbol":"幣種(Symbol)","dashboard.indicator.backtest.historyFilterTimeframe":"週期(Timeframe)","dashboard.indicator.backtest.historyApply":"套用篩選","dashboard.indicator.backtest.historyAIAnalyze":"AI分析","dashboard.indicator.backtest.historyAIAnalyzeTitle":"AI 分析建議","dashboard.indicator.backtest.historyNoAIResult":"暫無 AI 分析結果","dashboard.indicator.backtest.historyRunId":"記錄ID","dashboard.indicator.backtest.historyCreatedAt":"時間","dashboard.indicator.backtest.historyRange":"區間","dashboard.indicator.backtest.historyStatus":"狀態","dashboard.indicator.backtest.historyStatusSuccess":"成功","dashboard.indicator.backtest.historyStatusFailed":"失敗","dashboard.indicator.backtest.historyActions":"操作","dashboard.indicator.backtest.prev":"上一步","dashboard.indicator.backtest.next":"下一步","dashboard.indicator.backtest.steps.strategy.title":"執行配置","dashboard.indicator.backtest.steps.strategy.desc":"倉位/風控/加減倉(策略層)","dashboard.indicator.backtest.steps.trading.title":"回測環境","dashboard.indicator.backtest.steps.trading.desc":"時間/資金/費率/槓桿/滑點","dashboard.indicator.backtest.steps.results.title":"結果","dashboard.indicator.backtest.steps.results.desc":"統計與交易明細","dashboard.indicator.backtest.panel.risk":"執行配置:風控(止損/移動止盈)","dashboard.indicator.backtest.panel.scale":"執行配置:加倉(順勢/逆勢)","dashboard.indicator.backtest.panel.reduce":"執行配置:減倉(順勢/逆勢)","dashboard.indicator.backtest.panel.position":"執行配置:開倉倉位","dashboard.indicator.backtest.field.stopLossPct":"止損(%)","dashboard.indicator.backtest.field.takeProfitPct":"止盈(%)","dashboard.indicator.backtest.field.trailingEnabled":"移動止盈","dashboard.indicator.backtest.field.trailingStopPct":"移動回撤(%)","dashboard.indicator.backtest.field.trailingActivationPct":"移動止盈激活(%)","dashboard.indicator.backtest.field.slippage":"滑點(%)","dashboard.indicator.backtest.field.trendAddEnabled":"順勢加倉","dashboard.indicator.backtest.field.dcaAddEnabled":"逆勢加倉","dashboard.indicator.backtest.field.trendAddStepPct":"加倉觸發(%)","dashboard.indicator.backtest.field.dcaAddStepPct":"加倉觸發(%)","dashboard.indicator.backtest.field.trendAddSizePct":"每次加倉資金占比(%)","dashboard.indicator.backtest.field.dcaAddSizePct":"每次加倉資金占比(%)","dashboard.indicator.backtest.field.trendAddMaxTimes":"最多加倉次數","dashboard.indicator.backtest.field.dcaAddMaxTimes":"最多加倉次數","dashboard.indicator.backtest.field.trendReduceEnabled":"順勢減倉","dashboard.indicator.backtest.field.adverseReduceEnabled":"逆勢減倉","dashboard.indicator.backtest.field.trendReduceStepPct":"順勢觸發(%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"逆勢觸發(%)","dashboard.indicator.backtest.field.trendReduceSizePct":"每次減倉比例(%)","dashboard.indicator.backtest.field.adverseReduceSizePct":"每次逆勢減倉比例(%)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"最多順勢減倉次數","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"最多逆勢減倉次數","dashboard.indicator.backtest.field.entryPct":"開倉資金占比(%)","dashboard.indicator.backtest.field.minOrderPct":"單次最小資金占比(%)(可選)","dashboard.indicator.backtest.hint.entryPctMax":"最大可開倉:{maxPct}%(為後續加倉預留資金)","dashboard.indicator.backtest.closeLongTrailing":"平多(移動止損/止盈)","dashboard.indicator.backtest.reduceLong":"多頭減倉","dashboard.indicator.backtest.closeShortTrailing":"平空(移動止損/止盈)","dashboard.indicator.backtest.reduceShort":"空頭減倉","dashboard.docs.title":"文檔中心","dashboard.docs.search.placeholder":"搜索文檔...","dashboard.docs.category.all":"全部","dashboard.docs.category.guide":"開發指南","dashboard.docs.category.api":"API文檔","dashboard.docs.category.tutorial":"教程","dashboard.docs.category.faq":"常見問題","dashboard.docs.featured.title":"推薦文檔","dashboard.docs.featured.tag":"推薦","dashboard.docs.list.views":"瀏覽","dashboard.docs.list.author":"作者","dashboard.docs.list.empty":"暫無文檔","dashboard.docs.list.backToAll":"返回全部文檔","dashboard.docs.list.total":"共 {count} 篇文檔","dashboard.docs.detail.back":"返回文檔列表","dashboard.docs.detail.updatedAt":"更新於","dashboard.docs.detail.related":"相關文檔","dashboard.docs.detail.notFound":"文檔不存在","dashboard.docs.detail.error":"文檔不存在或已被刪除","dashboard.docs.search.result":"搜索結果","dashboard.docs.search.keyword":"關鍵詞","community.filter.indicatorType":"指標類型","community.filter.all":"全部","community.filter.other":"其他選項","community.filter.pricing":"定價類型","community.filter.allPricing":"全部定價","community.filter.sortBy":"排序方式","community.filter.search":"搜索","community.filter.searchPlaceholder":"搜索指標名稱","community.indicatorType.trend":"趨勢型","community.indicatorType.momentum":"動量型","community.indicatorType.volatility":"波動率","community.indicatorType.volume":"成交量","community.indicatorType.custom":"自定義","community.pricing.free":"免費","community.pricing.paid":"付費","community.sort.downloads":"下載量","community.sort.rating":"評分","community.sort.newest":"最新發布","community.pagination.total":"共 {total} 個指標","community.noDescription":"暫無描述","community.detail.type":"類型","community.detail.pricing":"定價","community.detail.rating":"評分","community.detail.downloads":"下載量","community.detail.author":"作者","community.detail.description":"簡介","community.detail.detailContent":"詳細說明","community.detail.backtestStats":"回測統計","community.action.purchase":"購買指標","community.action.addToMyIndicators":"添加到我的指標","community.action.favorite":"收藏","community.action.unfavorite":"取消收藏","community.action.buyNow":"立即購買","community.action.renew":"續費","community.purchase.price":"價格","community.purchase.permanent":"永久","community.purchase.monthly":"月","community.purchase.confirmBuy":"確認購買該指標({price} QDT)?","community.purchase.confirmRenew":"確認續費該指標({price} QDT/月)?","community.purchase.confirmFree":"確認添加該免費指標?","community.purchase.confirmTitle":"確認操作","community.purchase.owned":"您已購買該指標(永久有效)","community.purchase.ownIndicator":"這是您發布的指標","community.purchase.expired":"您的訂閱已過期","community.purchase.expiresOn":"到期時間:{date}","community.tabs.detail":"指標詳情","community.tabs.backtest":"回測數據","community.tabs.ratings":"用戶評價","community.rating.myRating":"我的評分","community.rating.stars":"{count} 星","community.rating.commentPlaceholder":"分享您的使用體驗...","community.rating.submit":"提交評分","community.rating.modify":"修改","community.rating.saveModify":"保存修改","community.rating.cancel":"取消","community.rating.selectRating":"請選擇評分","community.rating.success":"評分成功","community.rating.modifySuccess":"修改評價成功","community.rating.failed":"評分失敗","community.rating.noRatings":"暫無評價","community.backtest.note":"以上數據爲歷史回測結果,僅供參考,不代表未來收益","community.backtest.noData":"暫無回測數據","community.backtest.uploadHint":"作者尚未上傳回測數據","community.message.loadFailed":"加載指標列表失敗","community.message.purchaseProcessing":"正在處理購買請求...","community.message.downloadSuccess":"指標已添加到我的指標列表","community.message.favoriteSuccess":"收藏成功","community.message.unfavoriteSuccess":"取消收藏成功","community.message.operationSuccess":"操作成功","community.message.operationFailed":"操作失敗","community.banner.readOnly":"僅供瀏覽","community.banner.loginHint":"如需登錄註冊請點擊按鈕跳轉到獨立頁面,從而避免CSRF問題","community.banner.jumpButton":"跳轉到登錄/註冊","dashboard.totalEquity":"總權益","dashboard.totalPnL":"總盈虧","dashboard.aiStrategies":"AI 策略","dashboard.indicatorStrategies":"指標策略","dashboard.running":"運行中","dashboard.enabled":"已啟用","dashboard.pnlHistory":"歷史盈虧","dashboard.strategyPerformance":"策略盈虧佔比","dashboard.drawdown":"回撤曲線","dashboard.strategyRanking":"策略排行榜","dashboard.winRate":"勝率","dashboard.profitFactor":"盈虧比","dashboard.maxDrawdown":"最大回撤","dashboard.totalTrades":"總交易","dashboard.runningStrategies":"運行中策略","dashboard.equityCurve":"權益曲線","dashboard.strategyAllocation":"策略分佈","dashboard.drawdownCurve":"回撤曲線","dashboard.hourlyDistribution":"交易時段","dashboard.dailyPnl":"日盈虧","dashboard.cumulativePnl":"累計盈虧","dashboard.tradeCount":"交易次數","dashboard.profit":"盈虧","dashboard.noData":"暫無數據","dashboard.noStrategyData":"暫無策略數據","dashboard.ranking.totalProfit":"總收益","dashboard.ranking.roi":"收益率","dashboard.ranking.trades":"交易數","dashboard.unit.trades":"筆","dashboard.unit.strategies":"個","dashboard.label.avgDaily":"日均","dashboard.label.avgProfit":"平均盈利","dashboard.label.win":"勝","dashboard.label.lose":"負","dashboard.label.trade":"交易","dashboard.label.indicator":"指標","dashboard.label.totalPnl":"總盈虧","dashboard.label.maxDrawdownPoint":"最大回撤","dashboard.profitCalendar":"收益日曆","dashboard.recentTrades":"最近交易","dashboard.currentPositions":"當前持倉","dashboard.table.time":"時間","dashboard.table.strategy":"策略名稱","dashboard.table.symbol":"標的","dashboard.table.type":"類型","dashboard.table.side":"方向","dashboard.table.size":"持倉量","dashboard.table.entryPrice":"開倉均價","dashboard.table.price":"價格","dashboard.table.amount":"數量","dashboard.table.profit":"盈虧","dashboard.pendingOrders":"訂單執行記錄","dashboard.totalOrders":"共 {total} 條","dashboard.viewError":"查看錯誤","dashboard.filled":"已成交","dashboard.orderTable.time":"創建時間","dashboard.orderTable.strategy":"策略","dashboard.orderTable.symbol":"交易對","dashboard.orderTable.signalType":"信號類型","dashboard.orderTable.amount":"數量","dashboard.orderTable.price":"成交價","dashboard.orderTable.status":"狀態","dashboard.orderTable.timeInfo":"時間","dashboard.orderTable.executedAt":"執行時間","dashboard.orderTable.exchange":"交易所","dashboard.orderTable.notify":"通知方式","dashboard.orderTable.actions":"操作","dashboard.orderTable.delete":"刪除","dashboard.orderTable.deleteConfirm":"確認刪除這條記錄?","dashboard.orderTable.deleteSuccess":"刪除成功","dashboard.orderTable.deleteFailed":"刪除失敗","dashboard.newOrderNotify":"新訂單提醒","dashboard.newOrderDesc":"有新的訂單執行記錄","dashboard.soundEnabled":"聲音提醒已開啟","dashboard.soundDisabled":"聲音提醒已關閉","dashboard.clickToMute":"點擊關閉聲音提醒","dashboard.clickToUnmute":"點擊開啟聲音提醒","dashboard.signalType.openLong":"開多","dashboard.signalType.openShort":"開空","dashboard.signalType.closeLong":"平多","dashboard.signalType.closeShort":"平空","dashboard.signalType.addLong":"加多","dashboard.signalType.addShort":"加空","dashboard.status.pending":"待處理","dashboard.status.processing":"處理中","dashboard.status.completed":"已完成","dashboard.status.failed":"失敗","dashboard.status.cancelled":"已取消","dashboard.table.pnl":"未實現盈虧","form.basic-form.basic.title":"基礎表單","form.basic-form.basic.description":"表單頁用於向用戶收集或驗證信息,基礎表單常見於數據項較少的表單場景。","form.basic-form.title.label":"標題","form.basic-form.title.placeholder":"給目標起個名字","form.basic-form.title.required":"請輸入標題","form.basic-form.date.label":"起止日期","form.basic-form.placeholder.start":"開始日期","form.basic-form.placeholder.end":"結束日期","form.basic-form.date.required":"請選擇起止日期","form.basic-form.goal.label":"目標描述","form.basic-form.goal.placeholder":"請輸入你的階段性工作目標","form.basic-form.goal.required":"請輸入目標描述","form.basic-form.standard.label":"衡量標準","form.basic-form.standard.placeholder":"請輸入衡量標準","form.basic-form.standard.required":"請輸入衡量標準","form.basic-form.client.label":"客戶","form.basic-form.client.required":"請描述你服務的客戶","form.basic-form.label.tooltip":"目標的服務對象","form.basic-form.client.placeholder":"請描述你服務的客戶,內部客戶直接 @姓名/工號","form.basic-form.invites.label":"邀評人","form.basic-form.invites.placeholder":"請直接 @姓名/工號,最多可邀請 5 人","form.basic-form.weight.label":"權重","form.basic-form.weight.placeholder":"請輸入","form.basic-form.public.label":"目標公開","form.basic-form.label.help":"客戶、邀評人默認被分享","form.basic-form.radio.public":"公開","form.basic-form.radio.partially-public":"部分公開","form.basic-form.radio.private":"不公開","form.basic-form.publicUsers.placeholder":"公開給","form.basic-form.option.A":"同事一","form.basic-form.option.B":"同事二","form.basic-form.option.C":"同事三","form.basic-form.email.required":"請輸入郵箱地址!","form.basic-form.email.wrong-format":"郵箱地址格式錯誤!","form.basic-form.userName.required":"請輸入用戶名!","form.basic-form.password.required":"請輸入密碼!","form.basic-form.password.twice":"兩次輸入的密碼不匹配!","form.basic-form.strength.msg":"請至少輸入 6 個字符。請不要使用容易被猜到的密碼。","form.basic-form.strength.strong":"強度:強","form.basic-form.strength.medium":"強度:中","form.basic-form.strength.short":"強度:太短","form.basic-form.confirm-password.required":"請確認密碼!","form.basic-form.phone-number.required":"請輸入手機號!","form.basic-form.phone-number.wrong-format":"手機號格式錯誤!","form.basic-form.verification-code.required":"請輸入驗證碼!","form.basic-form.form.get-captcha":"獲取驗證碼","form.basic-form.captcha.second":"秒","form.basic-form.form.optional":"(選填)","form.basic-form.form.submit":"提交","form.basic-form.form.save":"保存","form.basic-form.email.placeholder":"郵箱","form.basic-form.password.placeholder":"至少6位密碼,區分大小寫","form.basic-form.confirm-password.placeholder":"確認密碼","form.basic-form.phone-number.placeholder":"手機號","form.basic-form.verification-code.placeholder":"驗證碼","result.success.title":"提交成功","result.success.description":"提交結果頁用於反饋一系列操作任務的處理結果, 如果僅是簡單操作,使用 Message 全局提示反饋即可。 本文字區域可以展示簡單的補充說明,如果有類似展示 “單據”的需求,下面這個灰色區域可以呈現比較復雜的內容。","result.success.operate-title":"項目名稱","result.success.operate-id":"項目 ID","result.success.principal":"負責人","result.success.operate-time":"生效時間","result.success.step1-title":"創建項目","result.success.step1-operator":"曲麗麗","result.success.step2-title":"部門初審","result.success.step2-operator":"周毛毛","result.success.step2-extra":"催一下","result.success.step3-title":"財務復核","result.success.step4-title":"完成","result.success.btn-return":"返回列表","result.success.btn-project":"查看項目","result.success.btn-print":"打印","result.fail.error.title":"提交失敗","result.fail.error.description":"請核對並修改以下信息後,再重新提交。","result.fail.error.hint-title":"您提交的內容有如下錯誤:","result.fail.error.hint-text1":"您的賬戶已被凍結","result.fail.error.hint-btn1":"立即解凍","result.fail.error.hint-text2":"您的賬戶還不具備申請資格","result.fail.error.hint-btn2":"立即升級","result.fail.error.btn-text":"返回修改","account.settings.menuMap.custom":"個性化","account.settings.menuMap.binding":"賬號綁定","account.settings.basic.avatar":"頭像","account.settings.basic.change-avatar":"更換頭像","account.settings.basic.email":"郵箱","account.settings.basic.email-message":"請輸入您的郵箱!","account.settings.basic.nickname":"暱稱","account.settings.basic.nickname-message":"請輸入您的暱稱!","account.settings.basic.profile":"個人簡介","account.settings.basic.profile-message":"請輸入個人簡介!","account.settings.basic.profile-placeholder":"個人簡介","account.settings.basic.country":"國家/地區","account.settings.basic.country-message":"請輸入您的國家或地區!","account.settings.basic.geographic":"所在省市","account.settings.basic.geographic-message":"請輸入您的所在省市!","account.settings.basic.address":"街道地址","account.settings.basic.address-message":"請輸入您的街道地址!","account.settings.basic.phone":"聯系電話","account.settings.basic.phone-message":"請輸入您的聯系電話!","account.settings.basic.update":"更新基本信息","account.settings.basic.update.success":"更新基本信息成功","account.settings.security.strong":"強","account.settings.security.medium":"中","account.settings.security.weak":"弱","account.settings.security.password":"賬戶密碼","account.settings.security.password-description":"當前密碼強度:","account.settings.security.phone":"密保手機","account.settings.security.phone-description":"已綁定手機:","account.settings.security.question":"密保問題","account.settings.security.question-description":"未設置密保問題,密保問題可有效保護賬戶安全","account.settings.security.email":"綁定郵箱","account.settings.security.email-description":"已綁定郵箱:","account.settings.security.mfa":"MFA 設備","account.settings.security.mfa-description":"未綁定 MFA 設備,綁定後,可以進行二次確認","account.settings.security.modify":"修改","account.settings.security.set":"設置","account.settings.security.bind":"綁定","account.settings.binding.taobao":"綁定淘寶","account.settings.binding.taobao-description":"當前未綁定淘寶賬號","account.settings.binding.alipay":"綁定支付寶","account.settings.binding.alipay-description":"當前未綁定支付寶賬號","account.settings.binding.dingding":"綁定釘釘","account.settings.binding.dingding-description":"當前未綁定釘釘賬號","account.settings.binding.bind":"綁定","account.settings.notification.password":"賬戶密碼","account.settings.notification.password-description":"其他用戶的消息將以站內信的形式通知","account.settings.notification.messages":"系統消息","account.settings.notification.messages-description":"系統消息將以站內信的形式通知","account.settings.notification.todo":"待辦任務","account.settings.notification.todo-description":"待辦任務將以站內信的形式通知","account.settings.settings.open":"開","account.settings.settings.close":"關","trading-assistant.title":"交易助手","trading-assistant.strategyList":"策略列表","trading-assistant.createStrategy":"創建策略","trading-assistant.noStrategy":"暫無策略","trading-assistant.selectStrategy":"請從左側選擇一個策略查看詳情","trading-assistant.startStrategy":"啓動策略","trading-assistant.stopStrategy":"停止策略","trading-assistant.editStrategy":"編輯策略","trading-assistant.deleteStrategy":"刪除策略","trading-assistant.startAll":"全部啟動","trading-assistant.stopAll":"全部停止","trading-assistant.deleteAll":"全部刪除","trading-assistant.symbolCount":"個幣種","trading-assistant.status.running":"運行中","trading-assistant.status.stopped":"已停止","trading-assistant.status.error":"錯誤","trading-assistant.strategyType.IndicatorStrategy":"技術指標策略","trading-assistant.strategyType.PromptBasedStrategy":"提示詞策略","trading-assistant.strategyType.GridStrategy":"網格策略","trading-assistant.tabs.tradingRecords":"交易記錄","trading-assistant.tabs.positions":"持倉記錄","trading-assistant.tabs.equityCurve":"淨值曲線","trading-assistant.form.step1":"選擇指標","trading-assistant.form.step2":"交易所配置","trading-assistant.form.step3":"策略參數","trading-assistant.form.step2Params":"策略參數","trading-assistant.form.step3Signal":"信號通知","trading-assistant.form.indicator":"選擇指標","trading-assistant.form.indicatorHint":"只能選擇您已購買或創建的技術指標","trading-assistant.form.qdtCostHints":"使用策略將消耗QDT,請確保賬戶有足夠的QDT餘額","trading-assistant.form.indicatorDescription":"指標描述","trading-assistant.form.noDescription":"暫無描述","trading-assistant.form.exchange":"選擇交易所","trading-assistant.form.apiKey":"API Key","trading-assistant.form.secretKey":"Secret Key","trading-assistant.form.passphrase":"Passphrase","trading-assistant.form.testConnection":"測試連接","trading-assistant.form.strategyName":"策略名稱","trading-assistant.form.symbol":"交易對","trading-assistant.form.symbols":"交易對(多選)","trading-assistant.form.symbolHint":"目前僅支持加密貨幣交易對","trading-assistant.form.symbolHintCrypto":"加密貨幣:使用BTC/USDT等交易對格式","trading-assistant.form.symbolsHint":"選擇多個交易對,將自動創建多個策略","trading-assistant.form.initialCapital":"投入金額","trading-assistant.form.marketType":"市場類型","trading-assistant.form.marketTypeFutures":"合約","trading-assistant.form.marketTypeSpot":"現貨","trading-assistant.form.marketTypeHint":"合約支持雙向交易和槓杆,現貨僅支持做多且槓杆固定爲1倍","trading-assistant.form.leverage":"槓杆倍數","trading-assistant.form.leverageHint":"合約:1-125倍,現貨:固定1倍","trading-assistant.form.spotLeverageFixed":"現貨交易槓杆固定爲1倍","trading-assistant.form.spotOnlyLongHint":"現貨交易僅支持做多","trading-assistant.form.tradeDirection":"交易方向","trading-assistant.form.tradeDirectionLong":"僅做多","trading-assistant.form.tradeDirectionShort":"僅做空","trading-assistant.form.tradeDirectionBoth":"雙向交易","trading-assistant.form.timeframe":"時間周期","trading-assistant.form.klinePeriod":"K線周期","trading-assistant.form.timeframe1m":"1分鍾","trading-assistant.form.timeframe5m":"5分鍾","trading-assistant.form.timeframe15m":"15分鍾","trading-assistant.form.timeframe30m":"30分鍾","trading-assistant.form.timeframe1H":"1小時","trading-assistant.form.timeframe4H":"4小時","trading-assistant.form.timeframe1D":"1天","trading-assistant.form.selectStrategyType":"選擇策略類型","trading-assistant.form.indicatorStrategy":"指標策略","trading-assistant.form.indicatorStrategyDesc":"基於技術指標的自動化交易策略","trading-assistant.form.aiStrategy":"AI策略","trading-assistant.form.aiStrategyDesc":"基於AI智能決策的自動化交易策略","trading-assistant.form.enableAiFilter":"啟用AI智能決策過濾","trading-assistant.form.enableAiFilterHint":"啟用後,指標信號將經過AI智能過濾,提高交易質量","trading-assistant.form.aiFilterPrompt":"自定義提示詞","trading-assistant.form.aiFilterPromptHint":"為AI過濾提供自定義指令,留空則使用系統默認","trading-assistant.form.executionMode":"執行模式","trading-assistant.form.executionModeSignal":"僅信號通知","trading-assistant.form.executionModeLive":"實盤自動交易","trading-assistant.form.liveTradingCryptoOnlyHint":"實盤交易功能僅支持加密貨幣市場","trading-assistant.form.notifyChannels":"通知渠道","trading-assistant.form.notifyChannelsHint":"選擇信號觸發時的通知方式","trading-assistant.form.notifyEmail":"郵箱地址","trading-assistant.form.notifyPhone":"手機號碼","trading-assistant.form.notifyTelegram":"Telegram ID","trading-assistant.form.notifyDiscord":"Discord Webhook","trading-assistant.form.notifyWebhook":"Webhook 地址","trading-assistant.form.liveTradingConfigTitle":"實盤交易配置","trading-assistant.form.liveTradingConfigHint":"請填寫交易所API資訊,實盤交易將使用您的API進行真實交易","trading-assistant.form.savedCredential":"已儲存的憑證","trading-assistant.form.savedCredentialHint":"選擇已儲存的交易所憑證,自動填充API配置","trading-assistant.form.saveCredential":"儲存此憑證以便下次使用","trading-assistant.form.credentialName":"憑證名稱","trading-assistant.validation.strategyTypeRequired":"請選擇策略類型","trading-assistant.form.advancedSettings":"高級設置","trading-assistant.form.orderMode":"下單模式","trading-assistant.form.orderModeMaker":"掛單(Maker)","trading-assistant.form.orderModeTaker":"市價(Taker)","trading-assistant.form.orderModeHint":"掛單模式使用限價單,手續費更低;市價模式立即成交,手續費較高","trading-assistant.form.makerWaitSec":"掛單等待時間(秒)","trading-assistant.form.makerWaitSecHint":"掛單後等待成交的時間,超時後取消並重試","trading-assistant.form.makerRetries":"掛單重試次數","trading-assistant.form.makerRetriesHint":"掛單未成交時的最大重試次數","trading-assistant.form.fallbackToMarket":"掛單失敗降級市價","trading-assistant.form.fallbackToMarketHint":"開/平倉掛單未成交時,是否降級爲市價單以確保成交","trading-assistant.form.marginMode":"保證金模式","trading-assistant.form.marginModeCross":"全倉","trading-assistant.form.marginModeIsolated":"逐倉","trading-assistant.form.stopLossPct":"止損比例(%)","trading-assistant.form.stopLossPctHint":"設置止損百分比,0表示不啓用止損","trading-assistant.form.takeProfitPct":"止盈比例(%)","trading-assistant.form.takeProfitPctHint":"設置止盈百分比,0表示不啓用止盈","trading-assistant.form.signalMode":"信號模式","trading-assistant.form.signalModeConfirmed":"確認模式","trading-assistant.form.signalModeAggressive":"激進模式","trading-assistant.form.signalModeHint":"確認模式:僅檢查已完成的K線;激進模式:也檢查正在形成的K線","trading-assistant.form.cancel":"取消","trading-assistant.form.prev":"上一步","trading-assistant.form.next":"下一步","trading-assistant.form.confirmCreate":"確認創建","trading-assistant.form.confirmEdit":"確認修改","trading-assistant.messages.createSuccess":"策略創建成功","trading-assistant.messages.createFailed":"創建策略失敗","trading-assistant.messages.updateSuccess":"策略更新成功","trading-assistant.messages.updateFailed":"更新策略失敗","trading-assistant.messages.deleteSuccess":"策略刪除成功","trading-assistant.messages.deleteFailed":"刪除策略失敗","trading-assistant.messages.startSuccess":"策略啓動成功","trading-assistant.messages.startFailed":"啓動策略失敗","trading-assistant.messages.stopSuccess":"策略停止成功","trading-assistant.messages.stopFailed":"停止策略失敗","trading-assistant.messages.loadFailed":"獲取策略列表失敗","trading-assistant.messages.runningWarning":"策略運行中,請先停止策略後再修改","trading-assistant.messages.deleteConfirmWithName":"確定要刪除策略“{name}”嗎?此操作不可恢復。","trading-assistant.messages.deleteConfirm":"確定要刪除該策略嗎?此操作不可恢復。","trading-assistant.messages.loadTradesFailed":"獲取交易記錄失敗","trading-assistant.messages.loadPositionsFailed":"獲取持倉記錄失敗","trading-assistant.messages.loadEquityFailed":"獲取淨值曲線失敗","trading-assistant.messages.loadIndicatorsFailed":"加載指標列表失敗,請稍後重試","trading-assistant.messages.spotLimitations":"現貨交易已自動設置爲僅做多、1倍槓杆","trading-assistant.messages.autoFillApiConfig":"已自動填充該交易所的歷史API配置","trading-assistant.messages.batchCreateSuccess":"成功創建 {count} 個策略","trading-assistant.messages.batchStartSuccess":"成功啟動 {count} 個策略","trading-assistant.messages.batchStartFailed":"批量啟動策略失敗","trading-assistant.messages.batchStopSuccess":"成功停止 {count} 個策略","trading-assistant.messages.batchStopFailed":"批量停止策略失敗","trading-assistant.messages.batchDeleteSuccess":"成功刪除 {count} 個策略","trading-assistant.messages.batchDeleteFailed":"批量刪除策略失敗","trading-assistant.messages.batchDeleteConfirm":'確定要刪除策略組"{name}"下的 {count} 個策略嗎?此操作不可恢復。',"trading-assistant.notify.browser":"瀏覽器通知","trading-assistant.notify.email":"郵箱","trading-assistant.notify.phone":"簡訊","trading-assistant.notify.telegram":"Telegram","trading-assistant.notify.discord":"Discord","trading-assistant.notify.webhook":"Webhook","trading-assistant.placeholders.selectIndicator":"請選擇指標","trading-assistant.placeholders.selectExchange":"請選擇交易所","trading-assistant.placeholders.inputApiKey":"請輸入API Key","trading-assistant.placeholders.inputSecretKey":"請輸入Secret Key","trading-assistant.placeholders.inputPassphrase":"請輸入Passphrase","trading-assistant.placeholders.inputStrategyName":"請輸入策略名稱","trading-assistant.placeholders.selectSymbol":"請選擇交易對","trading-assistant.placeholders.selectSymbols":"請選擇交易對(支持多選)","trading-assistant.placeholders.selectTimeframe":"請選擇時間周期","trading-assistant.placeholders.selectKlinePeriod":"請選擇K線周期","trading-assistant.placeholders.inputAiFilterPrompt":"請輸入自定義提示詞(可選)","trading-assistant.placeholders.selectSavedCredential":"請選擇已儲存的憑證","trading-assistant.placeholders.inputEmail":"請輸入郵箱地址","trading-assistant.placeholders.inputPhone":"請輸入手機號碼","trading-assistant.placeholders.inputTelegram":"請輸入Telegram ID或Chat ID","trading-assistant.placeholders.inputDiscord":"請輸入Discord Webhook地址","trading-assistant.placeholders.inputWebhook":"請輸入Webhook地址","trading-assistant.placeholders.inputCredentialName":"請輸入憑證名稱(如:我的OKX帳戶)","trading-assistant.validation.indicatorRequired":"請選擇指標","trading-assistant.validation.exchangeRequired":"請選擇交易所","trading-assistant.validation.apiKeyRequired":"請輸入API Key","trading-assistant.validation.secretKeyRequired":"請輸入Secret Key","trading-assistant.validation.passphraseRequired":"請輸入Passphrase","trading-assistant.validation.exchangeConfigIncomplete":"請填寫完整的交易所配置信息","trading-assistant.validation.testConnectionRequired":'請先點擊"測試連接"按鈕並確保連接成功',"trading-assistant.validation.testConnectionFailed":"連接測試失敗,請檢查配置後重新測試","trading-assistant.validation.credentialRequired":"請先在個人中心添加並測試交易所憑證","trading-assistant.validation.strategyNameRequired":"請輸入策略名稱","trading-assistant.validation.symbolRequired":"請選擇交易對","trading-assistant.validation.symbolsRequired":"請至少選擇一個交易對","trading-assistant.validation.emailInvalid":"請輸入有效的郵箱地址","trading-assistant.validation.notifyChannelRequired":"請至少選擇一個通知渠道","trading-assistant.validation.initialCapitalRequired":"請輸入投入金額","trading-assistant.validation.leverageRequired":"請輸入槓杆倍數","trading-assistant.table.time":"時間","trading-assistant.table.type":"類型","trading-assistant.table.price":"價格","trading-assistant.table.amount":"數量","trading-assistant.table.value":"金額","trading-assistant.table.commission":"手續費","trading-assistant.table.symbol":"交易對","trading-assistant.table.side":"方向","trading-assistant.table.size":"持倉數量","trading-assistant.table.entryPrice":"開倉價格","trading-assistant.table.currentPrice":"當前價格","trading-assistant.table.unrealizedPnl":"未實現盈虧","trading-assistant.table.pnlPercent":"盈虧比例","trading-assistant.table.buy":"買入","trading-assistant.table.sell":"賣出","trading-assistant.table.long":"做多","trading-assistant.table.short":"做空","trading-assistant.table.noPositions":"暫無持倉","trading-assistant.detail.title":"策略詳情","trading-assistant.detail.strategyName":"策略名稱","trading-assistant.detail.strategyType":"策略類型","trading-assistant.detail.status":"狀態","trading-assistant.detail.tradingMode":"交易模式","trading-assistant.detail.exchange":"交易所","trading-assistant.detail.initialCapital":"初始資金","trading-assistant.detail.totalInvestment":"總投入金額","trading-assistant.detail.currentEquity":"當前淨值","trading-assistant.detail.totalPnl":"總盈虧","trading-assistant.detail.indicatorName":"指標名稱","trading-assistant.detail.maxLeverage":"最大槓杆","trading-assistant.detail.decideInterval":"決策間隔","trading-assistant.detail.symbols":"交易標的","trading-assistant.detail.createdAt":"創建時間","trading-assistant.detail.updatedAt":"更新時間","trading-assistant.detail.llmConfig":"AI模型配置","trading-assistant.detail.exchangeConfig":"交易所配置","trading-assistant.detail.provider":"提供商","trading-assistant.detail.modelId":"模型ID","trading-assistant.detail.close":"關閉","trading-assistant.detail.loadFailed":"獲取策略詳情失敗","trading-assistant.equity.noData":"暫無淨值數據","trading-assistant.equity.equity":"淨值","trading-assistant.exchange.tradingMode":"交易模式","trading-assistant.exchange.virtual":"模擬交易","trading-assistant.exchange.live":"實盤交易","trading-assistant.exchange.selectExchange":"選擇交易所","trading-assistant.exchange.walletAddress":"錢包地址","trading-assistant.exchange.walletAddressPlaceholder":"請輸入錢包地址(以0x開頭)","trading-assistant.exchange.privateKey":"私鑰","trading-assistant.exchange.privateKeyPlaceholder":"請輸入私鑰(64字符)","trading-assistant.exchange.testConnection":"測試連接","trading-assistant.exchange.connectionSuccess":"連接成功","trading-assistant.exchange.connectionFailed":"連接失敗","trading-assistant.exchange.testFailed":"連接測試失敗","trading-assistant.exchange.fillComplete":"請填寫完整的交易所配置信息","trading-assistant.strategyTypeOptions.ai":"AI驅動策略","trading-assistant.strategyTypeOptions.indicator":"技術指標策略","trading-assistant.strategyTypeOptions.aiDeveloping":"AI驅動策略功能開發中,敬請期待","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"AI驅動策略功能正在開發中","trading-assistant.indicatorType.trend":"趨勢","trading-assistant.indicatorType.momentum":"動量","trading-assistant.indicatorType.volatility":"波動","trading-assistant.indicatorType.volume":"成交量","trading-assistant.indicatorType.custom":"自定義","trading-assistant.exchangeNames":{okx:"OKX",binance:"幣安",hyperliquid:"Hyperliquid",blockchaincom:"Blockchain.com",coinbaseexchange:"Coinbase",gate:"Gate.io",mexc:"MEXC",kraken:"Kraken",bitfinex:"Bitfinex",bybit:"Bybit",kucoin:"KuCoin",huobi:"火幣",bitget:"Bitget",bitmex:"BitMEX",deribit:"Deribit",phemex:"Phemex",bitmart:"BitMart",bitstamp:"Bitstamp",bittrex:"Bittrex",poloniex:"Poloniex",gemini:"Gemini",cryptocom:"Crypto.com",bitflyer:"bitFlyer",upbit:"Upbit",bithumb:"Bithumb",coinone:"Coinone",zb:"ZB",lbank:"LBank",bibox:"Bibox",bigone:"BigONE",bitrue:"Bitrue",coinex:"CoinEx",digifinex:"DigiFinex",ftx:"FTX",ftxus:"FTX US",binanceus:"Binance US",binancecoinm:"Binance COIN-M",binanceusdm:"Binance USDⓈ-M",deepcoin:"Deepcoin"},"ai-trading-assistant.title":"AI交易助手","ai-trading-assistant.strategyList":"策略列表","ai-trading-assistant.createStrategy":"創建策略","ai-trading-assistant.noStrategy":"暫無策略","ai-trading-assistant.selectStrategy":"請從左側選擇一個策略查看詳情","ai-trading-assistant.startStrategy":"啓動策略","ai-trading-assistant.stopStrategy":"停止策略","ai-trading-assistant.editStrategy":"編輯策略","ai-trading-assistant.deleteStrategy":"刪除策略","ai-trading-assistant.status.running":"運行中","ai-trading-assistant.status.stopped":"已停止","ai-trading-assistant.status.error":"錯誤","ai-trading-assistant.tabs.tradingRecords":"交易記錄","ai-trading-assistant.tabs.positions":"持倉記錄","ai-trading-assistant.tabs.aiDecisions":"AI決策記錄","ai-trading-assistant.tabs.equityCurve":"淨值曲線","ai-trading-assistant.form.createTitle":"創建AI交易策略","ai-trading-assistant.form.editTitle":"編輯AI交易策略","ai-trading-assistant.form.strategyName":"策略名稱","ai-trading-assistant.form.modelId":"AI模型","ai-trading-assistant.form.modelIdHint":"使用系統OpenRouter服務,無需配置API Key","ai-trading-assistant.form.decideInterval":"決策間隔","ai-trading-assistant.form.decideInterval5m":"5分鍾","ai-trading-assistant.form.decideInterval10m":"10分鍾","ai-trading-assistant.form.decideInterval30m":"30分鍾","ai-trading-assistant.form.decideInterval1h":"1小時","ai-trading-assistant.form.decideInterval4h":"4小時","ai-trading-assistant.form.decideInterval1d":"1天","ai-trading-assistant.form.decideInterval1w":"1周","ai-trading-assistant.form.decideIntervalHint":"AI做決策的時間間隔","ai-trading-assistant.form.runPeriod":"運行周期","ai-trading-assistant.form.runPeriodHint":"策略運行的開始時間和結束時間","ai-trading-assistant.form.startDate":"開始日期","ai-trading-assistant.form.endDate":"結束日期","ai-trading-assistant.form.qdtCostTitle":"QDT扣費說明","ai-trading-assistant.form.qdtCostHint":"每次AI決策將扣費 {cost} 個QDT,請確保賬戶有足夠的QDT餘額。策略運行期間,每次決策都會實時扣費。","ai-trading-assistant.form.apiKey":"API Key","ai-trading-assistant.form.exchange":"選擇交易所","ai-trading-assistant.form.secretKey":"Secret Key","ai-trading-assistant.form.passphrase":"Passphrase","ai-trading-assistant.form.testConnection":"測試連接","ai-trading-assistant.form.symbol":"交易對","ai-trading-assistant.form.symbolHint":"選擇要交易的交易對","ai-trading-assistant.form.initialCapital":"投入金額(保證金)","ai-trading-assistant.form.leverage":"槓杆倍數","ai-trading-assistant.form.timeframe":"時間周期","ai-trading-assistant.form.timeframe1m":"1分鍾","ai-trading-assistant.form.timeframe5m":"5分鍾","ai-trading-assistant.form.timeframe15m":"15分鍾","ai-trading-assistant.form.timeframe30m":"30分鍾","ai-trading-assistant.form.timeframe1H":"1小時","ai-trading-assistant.form.timeframe4H":"4小時","ai-trading-assistant.form.timeframe1D":"1天","ai-trading-assistant.form.marketType":"市場類型","ai-trading-assistant.form.marketTypeFutures":"合約","ai-trading-assistant.form.marketTypeSpot":"現貨","ai-trading-assistant.form.totalPnl":"總盈虧","ai-trading-assistant.form.customPrompt":"自定義提示詞","ai-trading-assistant.form.customPromptHint":"可選,用於自定義AI的交易策略和決策邏輯","ai-trading-assistant.form.cancel":"取消","ai-trading-assistant.form.prev":"上一步","ai-trading-assistant.form.next":"下一步","ai-trading-assistant.form.confirmCreate":"確認創建","ai-trading-assistant.form.confirmEdit":"確認修改","ai-trading-assistant.messages.createSuccess":"策略創建成功","ai-trading-assistant.messages.createFailed":"創建策略失敗","ai-trading-assistant.messages.updateSuccess":"策略更新成功","ai-trading-assistant.messages.updateFailed":"更新策略失敗","ai-trading-assistant.messages.deleteSuccess":"策略刪除成功","ai-trading-assistant.messages.deleteFailed":"刪除策略失敗","ai-trading-assistant.messages.startSuccess":"策略啓動成功","ai-trading-assistant.messages.startFailed":"啓動策略失敗","ai-trading-assistant.messages.stopSuccess":"策略停止成功","ai-trading-assistant.messages.stopFailed":"停止策略失敗","ai-trading-assistant.messages.loadFailed":"獲取策略列表失敗","ai-trading-assistant.messages.loadDecisionsFailed":"獲取AI決策記錄失敗","ai-trading-assistant.messages.deleteConfirm":"確定要刪除該策略嗎?此操作不可恢復。","ai-trading-assistant.placeholders.inputStrategyName":"請輸入策略名稱","ai-trading-assistant.placeholders.selectModelId":"請選擇AI模型","ai-trading-assistant.placeholders.selectDecideInterval":"請選擇決策間隔","ai-trading-assistant.placeholders.startTime":"開始時間","ai-trading-assistant.placeholders.endTime":"結束時間","ai-trading-assistant.placeholders.inputApiKey":"請輸入API Key","ai-trading-assistant.placeholders.selectExchange":"請選擇交易所","ai-trading-assistant.placeholders.inputSecretKey":"請輸入Secret Key","ai-trading-assistant.placeholders.inputPassphrase":"請輸入Passphrase","ai-trading-assistant.placeholders.selectSymbol":"請選擇交易對,如:BTC/USDT","ai-trading-assistant.placeholders.selectTimeframe":"請選擇時間周期","ai-trading-assistant.placeholders.inputCustomPrompt":"請輸入自定義提示詞(可選)","ai-trading-assistant.validation.strategyNameRequired":"請輸入策略名稱","ai-trading-assistant.validation.modelIdRequired":"請選擇AI模型","ai-trading-assistant.validation.runPeriodRequired":"請選擇運行周期","ai-trading-assistant.validation.apiKeyRequired":"請輸入API Key","ai-trading-assistant.validation.exchangeRequired":"請選擇交易所","ai-trading-assistant.validation.secretKeyRequired":"請輸入Secret Key","ai-trading-assistant.validation.symbolRequired":"請選擇交易對","ai-trading-assistant.validation.initialCapitalRequired":"請輸入投入金額","ai-trading-assistant.table.time":"時間","ai-trading-assistant.table.type":"類型","ai-trading-assistant.table.price":"價格","ai-trading-assistant.table.amount":"數量","ai-trading-assistant.table.value":"金額","ai-trading-assistant.table.symbol":"交易對","ai-trading-assistant.table.side":"方向","ai-trading-assistant.table.size":"持倉數量","ai-trading-assistant.table.entryPrice":"開倉價格","ai-trading-assistant.table.currentPrice":"當前價格","ai-trading-assistant.table.unrealizedPnl":"未實現盈虧","ai-trading-assistant.table.profit":"盈虧","ai-trading-assistant.table.openLong":"開多","ai-trading-assistant.table.closeLong":"平多","ai-trading-assistant.table.openShort":"開空","ai-trading-assistant.table.closeShort":"平空","ai-trading-assistant.table.addLong":"加多","ai-trading-assistant.table.addShort":"加空","ai-trading-assistant.table.closeShortProfit":"平空止盈","ai-trading-assistant.table.closeShortStop":"平空止損","ai-trading-assistant.table.closeLongProfit":"平多止盈","ai-trading-assistant.table.closeLongStop":"平多止損","ai-trading-assistant.table.buy":"買入","ai-trading-assistant.table.sell":"賣出","ai-trading-assistant.table.long":"做多","ai-trading-assistant.table.short":"做空","ai-trading-assistant.table.hold":"持有","ai-trading-assistant.table.reasoning":"分析理由","ai-trading-assistant.table.decisions":"決策","ai-trading-assistant.table.riskAssessment":"風險評估","ai-trading-assistant.table.confidence":"置信度","ai-trading-assistant.table.totalRecords":"共 {total} 條記錄","ai-trading-assistant.table.noPositions":"暫無持倉","ai-trading-assistant.detail.title":"策略詳情","ai-trading-assistant.equity.noData":"暫無淨值數據","ai-trading-assistant.equity.equity":"淨值","ai-trading-assistant.exchange.testFailed":"連接測試失敗","ai-trading-assistant.exchange.connectionSuccess":"連接成功","ai-trading-assistant.exchange.connectionFailed":"連接失敗","ai-trading-assistant.form.advancedSettings":"高級設置","ai-trading-assistant.form.orderMode":"下單模式","ai-trading-assistant.form.orderModeMaker":"掛單(Maker)","ai-trading-assistant.form.orderModeTaker":"市價(Taker)","ai-trading-assistant.form.orderModeHint":"掛單模式使用限價單,手續費更低;市價模式立即成交,手續費較高","ai-trading-assistant.form.makerWaitSec":"掛單等待時間(秒)","ai-trading-assistant.form.makerWaitSecHint":"掛單後等待成交的時間,超時後取消並重試","ai-trading-assistant.form.makerRetries":"掛單重試次數","ai-trading-assistant.form.makerRetriesHint":"掛單未成交時的最大重試次數","ai-trading-assistant.form.fallbackToMarket":"掛單失敗降級市價","ai-trading-assistant.form.fallbackToMarketHint":"開/平倉掛單未成交時,是否降級爲市價單以確保成交","ai-trading-assistant.form.marginMode":"保證金模式","ai-trading-assistant.form.marginModeCross":"全倉","ai-trading-assistant.form.marginModeIsolated":"逐倉","ai-analysis.title":"量子交易引擎","ai-analysis.system.online":"在線","ai-analysis.system.agents":"智能體","ai-analysis.system.active":"活躍","ai-analysis.system.stage":"階段","ai-analysis.panel.roster":"智能體陣容","ai-analysis.panel.thinking":"思考中...","ai-analysis.panel.done":"完成","ai-analysis.panel.standby":"待機","ai-analysis.input.title":"量子交易引擎","ai-analysis.input.placeholder":"選擇目標資產 (如 BTC/USDT)","ai-analysis.input.watchlist":"自選股","ai-analysis.input.start":"開始分析","ai-analysis.input.recent":"最近任務:","ai-analysis.vis.stage":"階段","ai-analysis.vis.processing":"處理中","ai-analysis.result.complete":"分析完成","ai-analysis.result.signal":"最終信號","ai-analysis.result.confidence":"置信度:","ai-analysis.result.new":"新分析","ai-analysis.result.full":"查看完整報告","ai-analysis.logs.title":"系統日志","ai-analysis.modal.title":"機密報告","ai-analysis.modal.fundamental":"基本面分析","ai-analysis.modal.technical":"技術面分析","ai-analysis.modal.sentiment":"情緒面分析","ai-analysis.modal.risk":"風險評估","ai-analysis.stage.idle":"待機","ai-analysis.stage.1":"第一階段:多維分析","ai-analysis.stage.2":"第二階段:多空辯論","ai-analysis.stage.3":"第三階段:戰略規劃","ai-analysis.stage.4":"第四階段:風控審查","ai-analysis.stage.complete":"完成","ai-analysis.agent.investment_director":"投資總監","ai-analysis.agent.role.investment_director":"綜合分析 & 最終結論","ai-analysis.agent.market":"市場分析師","ai-analysis.agent.role.market":"技術 & 市場數據","ai-analysis.agent.fundamental":"基本面分析師","ai-analysis.agent.role.fundamental":"財務 & 估值","ai-analysis.agent.technical":"技術分析師","ai-analysis.agent.role.technical":"技術指標 & 圖表","ai-analysis.agent.news":"新聞分析師","ai-analysis.agent.role.news":"全球新聞過濾","ai-analysis.agent.sentiment":"情緒分析師","ai-analysis.agent.role.sentiment":"社交 & 情緒","ai-analysis.agent.risk":"風險分析師","ai-analysis.agent.role.risk":"基礎風險檢查","ai-analysis.agent.bull":"看漲研究員","ai-analysis.agent.role.bull":"增長催化劑挖掘","ai-analysis.agent.bear":"看跌研究員","ai-analysis.agent.role.bear":"風險 & 缺陷挖掘","ai-analysis.agent.manager":"研究經理","ai-analysis.agent.role.manager":"辯論主持人","ai-analysis.agent.trader":"交易員","ai-analysis.agent.role.trader":"執行策略師","ai-analysis.agent.risky":"激進分析師","ai-analysis.agent.role.risky":"激進策略","ai-analysis.agent.neutral":"平衡分析師","ai-analysis.agent.role.neutral":"平衡策略","ai-analysis.agent.safe":"保守分析師","ai-analysis.agent.role.safe":"保守策略","ai-analysis.agent.cro":"風控經理 (CRO)","ai-analysis.agent.role.cro":"最終決策權威","ai-analysis.script.market":"正在從主要交易所獲取 OHLCV 數據...","ai-analysis.script.fundamental":"正在檢索季度財務報告...","ai-analysis.script.technical":"正在分析技術指標和圖表形態...","ai-analysis.script.news":"正在掃描全球財經新聞...","ai-analysis.script.sentiment":"正在分析社交媒體趨勢...","ai-analysis.script.risk":"正在計算歷史波動率...","invite.inviteLink":"邀請鏈接","invite.copy":"復制鏈接","invite.copySuccess":"復制成功!","invite.copyFailed":"復制失敗,請手動復制","invite.noInviteLink":"邀請鏈接未生成","invite.totalInvites":"累計邀請","invite.totalReward":"累計獎勵","invite.rules":"邀請規則","invite.rule1":"每成功邀請一位好友注冊,您將獲得獎勵","invite.rule2":"被邀請的好友完成首次交易,您將獲得額外獎勵","invite.rule3":"邀請獎勵將直接發放到您的賬戶","invite.inviteList":"邀請列表","invite.tasks":"任務中心","invite.inviteeName":"被邀請人","invite.inviteTime":"邀請時間","invite.status":"狀態","invite.reward":"獎勵","invite.active":"活躍","invite.inactive":"未激活","invite.completed":"已完成","invite.claimed":"已領取","invite.pending":"待完成","invite.goToTask":"去完成","invite.claimReward":"領取獎勵","invite.verify":"驗證完成","invite.verifySuccess":"驗證成功!任務已完成","invite.verifyNotCompleted":"任務尚未完成,請先完成任務","invite.verifyFailed":"驗證失敗,請稍後重試","invite.claimSuccess":"成功領取 {reward} QDT!","invite.claimFailed":"領取失敗,請稍後重試","invite.totalRecords":"共 {total} 條記錄","invite.task.twitter.title":"轉發推文到 X (Twitter)","invite.task.twitter.desc":"分享我們的官方推文到您的 X (Twitter) 賬號","invite.task.youtube.title":"關注我們的 YouTube 頻道","invite.task.youtube.desc":"訂閱並關注我們的 YouTube 官方頻道","invite.task.telegram.title":"加入 Telegram 羣組","invite.task.telegram.desc":"加入我們的官方 Telegram 社區羣組","invite.task.discord.title":"加入 Discord 服務器","invite.task.discord.desc":"加入我們的 Discord 社區服務器",message:"-","layouts.usermenu.dialog.title":"信息","layouts.usermenu.dialog.content":"您確定要注銷嗎?","layouts.userLayout.title":"於不確定中,尋見真理","settings.title":"系統設置","settings.description":"配置應用設置、API密鑰和系統偏好","settings.save":"保存設置","settings.reset":"重置","settings.saveSuccess":"設置保存成功","settings.saveFailed":"保存設置失敗","settings.loadFailed":"加載配置失敗","settings.openrouterBalance":"OpenRouter 賬戶餘額","settings.queryBalance":"查詢餘額","settings.balanceUsage":"已使用","settings.balanceRemaining":"剩餘額度","settings.balanceLimit":"總限額","settings.balanceQuerySuccess":"餘額查詢成功","settings.balanceQueryFailed":"餘額查詢失敗","settings.balanceNotQueried":'點擊"查詢餘額"獲取賬戶信息',"settings.default":"默認","settings.pleaseSelect":"請選擇","settings.inputApiKey":"請輸入密鑰","settings.getApi":"獲取API","settings.link.getApi":"獲取API","settings.link.getApiKey":"獲取API Key","settings.link.getToken":"獲取Token","settings.link.createBot":"創建Bot","settings.link.viewModels":"查看模型列表","settings.link.freeRegister":"免費註冊","settings.link.supportedExchanges":"支持的交易所","settings.link.applyApi":"申請API","settings.link.createSearchEngine":"創建搜索引擎","settings.link.getTurnstileKey":"獲取Turnstile密鑰","settings.link.getGoogleCredentials":"獲取Google憑據","settings.link.getGithubCredentials":"獲取GitHub憑據","settings.restartRequired":"配置已保存,部分配置需要重啟Python服務才能生效","settings.copyRestartCmd":"複製重啟命令","settings.copySuccess":"複製成功","settings.copyFailed":"複製失敗","settings.group.server":"服務配置","settings.group.auth":"安全認證","settings.group.ai":"AI/LLM配置","settings.group.trading":"實盤交易","settings.group.strategy":"策略執行","settings.group.data_source":"數據源","settings.group.notification":"通知推送","settings.group.email":"郵件配置","settings.group.sms":"短信配置","settings.group.agent":"AI Agent","settings.group.network":"網絡代理","settings.group.search":"搜索配置","settings.group.security":"註冊與安全","settings.group.app":"應用配置","settings.field.SECRET_KEY":"Secret Key","settings.field.ADMIN_USER":"管理員用戶名","settings.field.ADMIN_PASSWORD":"管理員密碼","settings.field.ADMIN_EMAIL":"管理員郵箱","settings.field.ENABLE_REGISTRATION":"允許註冊","settings.field.TURNSTILE_SITE_KEY":"Turnstile Site Key","settings.field.TURNSTILE_SECRET_KEY":"Turnstile Secret Key","settings.field.FRONTEND_URL":"前端URL","settings.field.GOOGLE_CLIENT_ID":"Google Client ID","settings.field.GOOGLE_CLIENT_SECRET":"Google Client Secret","settings.field.GOOGLE_REDIRECT_URI":"Google回調URL","settings.field.GITHUB_CLIENT_ID":"GitHub Client ID","settings.field.GITHUB_CLIENT_SECRET":"GitHub Client Secret","settings.field.GITHUB_REDIRECT_URI":"GitHub回調URL","settings.field.SECURITY_IP_MAX_ATTEMPTS":"IP最大失敗次數","settings.field.SECURITY_IP_WINDOW_MINUTES":"IP統計窗口(分鐘)","settings.field.SECURITY_IP_BLOCK_MINUTES":"IP封禁時長(分鐘)","settings.field.SECURITY_ACCOUNT_MAX_ATTEMPTS":"帳戶最大失敗次數","settings.field.SECURITY_ACCOUNT_WINDOW_MINUTES":"帳戶統計窗口(分鐘)","settings.field.SECURITY_ACCOUNT_BLOCK_MINUTES":"帳戶鎖定時長(分鐘)","settings.field.VERIFICATION_CODE_EXPIRE_MINUTES":"驗證碼有效期(分鐘)","settings.field.VERIFICATION_CODE_RATE_LIMIT":"驗證碼發送間隔(秒)","settings.field.VERIFICATION_CODE_IP_HOURLY_LIMIT":"IP每小時驗證碼上限","settings.field.VERIFICATION_CODE_MAX_ATTEMPTS":"驗證碼最大嘗試次數","settings.field.VERIFICATION_CODE_LOCK_MINUTES":"驗證碼鎖定時長(分鐘)","settings.field.PYTHON_API_HOST":"監聽地址","settings.field.PYTHON_API_PORT":"端口","settings.field.PYTHON_API_DEBUG":"調試模式","settings.field.ENABLE_PENDING_ORDER_WORKER":"啟用訂單處理Worker","settings.field.PENDING_ORDER_STALE_SEC":"訂單超時時間(秒)","settings.field.ORDER_MODE":"下單模式","settings.field.MAKER_WAIT_SEC":"限價單等待時間(秒)","settings.field.MAKER_OFFSET_BPS":"限價單價格偏移(基點)","settings.field.SIGNAL_WEBHOOK_URL":"Webhook URL","settings.field.SIGNAL_WEBHOOK_TOKEN":"Webhook Token","settings.field.SIGNAL_NOTIFY_TIMEOUT_SEC":"通知超時(秒)","settings.field.TELEGRAM_BOT_TOKEN":"Telegram Bot Token","settings.field.SMTP_HOST":"SMTP服務器","settings.field.SMTP_PORT":"SMTP端口","settings.field.SMTP_USER":"SMTP用戶名","settings.field.SMTP_PASSWORD":"SMTP密碼","settings.field.SMTP_FROM":"發件人地址","settings.field.SMTP_USE_TLS":"使用TLS","settings.field.SMTP_USE_SSL":"使用SSL","settings.field.TWILIO_ACCOUNT_SID":"Account SID","settings.field.TWILIO_AUTH_TOKEN":"Auth Token","settings.field.TWILIO_FROM_NUMBER":"發送號碼","settings.field.DISABLE_RESTORE_RUNNING_STRATEGIES":"禁用自動恢復策略","settings.field.STRATEGY_TICK_INTERVAL_SEC":"策略Tick間隔(秒)","settings.field.PRICE_CACHE_TTL_SEC":"價格緩存TTL(秒)","settings.field.PROXY_PORT":"代理端口","settings.field.PROXY_HOST":"代理主機","settings.field.PROXY_SCHEME":"代理協議","settings.field.PROXY_URL":"完整代理URL","settings.field.CORS_ORIGINS":"CORS來源","settings.field.RATE_LIMIT":"速率限制(每分鐘)","settings.field.ENABLE_CACHE":"啟用緩存","settings.field.ENABLE_REQUEST_LOG":"啟用請求日誌","settings.field.ENABLE_AI_ANALYSIS":"啟用AI分析","settings.field.ENABLE_AGENT_MEMORY":"啟用Agent記憶","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"啟用向量檢索(本地)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"Embedding維度","settings.field.AGENT_MEMORY_TOP_K":"召回數量TopK","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"候選窗口大小","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"時間衰減半衰期(天)","settings.field.AGENT_MEMORY_W_SIM":"相似度權重","settings.field.AGENT_MEMORY_W_RECENCY":"時間權重","settings.field.AGENT_MEMORY_W_RETURNS":"收益權重","settings.field.ENABLE_REFLECTION_WORKER":"啟用自動驗證","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"驗證周期間隔(秒)","settings.field.OPENROUTER_API_KEY":"OpenRouter API Key","settings.field.OPENROUTER_API_URL":"OpenRouter API URL","settings.field.OPENROUTER_MODEL":"默認模型","settings.field.OPENROUTER_TEMPERATURE":"Temperature","settings.field.OPENROUTER_MAX_TOKENS":"Max Tokens","settings.field.OPENROUTER_TIMEOUT":"超時時間(秒)","settings.field.OPENROUTER_CONNECT_TIMEOUT":"連接超時(秒)","settings.field.AI_MODELS_JSON":"模型列表(JSON)","settings.field.MARKET_TYPES_JSON":"市場類型(JSON)","settings.field.TRADING_SUPPORTED_SYMBOLS_JSON":"支持的交易對(JSON)","settings.field.DATA_SOURCE_TIMEOUT":"數據源超時(秒)","settings.field.DATA_SOURCE_RETRY":"重試次數","settings.field.DATA_SOURCE_RETRY_BACKOFF":"重試退避(秒)","settings.field.FINNHUB_API_KEY":"Finnhub API Key","settings.field.FINNHUB_TIMEOUT":"Finnhub超時(秒)","settings.field.FINNHUB_RATE_LIMIT":"Finnhub速率限制","settings.field.CCXT_DEFAULT_EXCHANGE":"CCXT默認交易所","settings.field.CCXT_TIMEOUT":"CCXT超時(ms)","settings.field.CCXT_PROXY":"CCXT代理","settings.field.AKSHARE_TIMEOUT":"Akshare超時(秒)","settings.field.YFINANCE_TIMEOUT":"YFinance超時(秒)","settings.field.TIINGO_API_KEY":"Tiingo API Key","settings.field.TIINGO_TIMEOUT":"Tiingo超時(秒)","settings.field.SEARCH_PROVIDER":"搜索提供商","settings.field.SEARCH_MAX_RESULTS":"最大結果數","settings.field.SEARCH_GOOGLE_API_KEY":"Google API Key","settings.field.SEARCH_GOOGLE_CX":"Google CX","settings.field.SEARCH_BING_API_KEY":"Bing API Key","settings.field.INTERNAL_API_KEY":"內部API Key","settings.desc.PYTHON_API_HOST":"服務監聽地址。0.0.0.0 允許外部訪問,127.0.0.1 僅本地訪問","settings.desc.PYTHON_API_PORT":"服務監聽端口,默認5000","settings.desc.PYTHON_API_DEBUG":"啟用調試模式,開發時使用。生產環境請關閉","settings.desc.SECRET_KEY":"JWT簽名密鑰。生產環境必須修改以確保安全","settings.desc.ADMIN_USER":"管理員登錄用戶名","settings.desc.ADMIN_PASSWORD":"管理員登錄密碼。生產環境必須修改","settings.desc.OPENROUTER_API_KEY":"OpenRouter API密鑰,用於訪問多種AI模型","settings.desc.OPENROUTER_API_URL":"OpenRouter API端點地址","settings.desc.OPENROUTER_MODEL":"默認使用的AI模型,如 openai/gpt-4o, anthropic/claude-3.5-sonnet","settings.desc.OPENROUTER_TEMPERATURE":"模型創造性(0-1)。越低越確定性,越高越有創意","settings.desc.OPENROUTER_MAX_TOKENS":"每次請求最大輸出token數","settings.desc.OPENROUTER_TIMEOUT":"API請求超時時間(秒)","settings.desc.OPENROUTER_CONNECT_TIMEOUT":"連接建立超時時間(秒)","settings.desc.AI_MODELS_JSON":"自定義模型列表,JSON格式,用於模型選擇器","settings.desc.ENABLE_PENDING_ORDER_WORKER":"啟用後台訂單處理Worker,實盤交易必需","settings.desc.PENDING_ORDER_STALE_SEC":"等待訂單超時時間,超時後標記為過期","settings.desc.ORDER_MODE":"maker: 限價單優先(手續費低),market: 市價單(立即成交)","settings.desc.MAKER_WAIT_SEC":"限價單等待成交時間,超時後自動切換為市價單","settings.desc.MAKER_OFFSET_BPS":"限價單價格偏移(基點)。買入價=市價*(1-偏移),賣出價=市價*(1+偏移)","settings.desc.DISABLE_RESTORE_RUNNING_STRATEGIES":"禁止服務重啟時自動恢復運行中的策略","settings.desc.STRATEGY_TICK_INTERVAL_SEC":"策略主循環檢查間隔(秒)","settings.desc.PRICE_CACHE_TTL_SEC":"價格數據緩存有效期(秒)","settings.desc.MARKET_TYPES_JSON":"自定義市場類型配置,JSON格式","settings.desc.TRADING_SUPPORTED_SYMBOLS_JSON":"支持的交易對列表,JSON格式","settings.desc.DATA_SOURCE_TIMEOUT":"數據源請求默認超時時間","settings.desc.DATA_SOURCE_RETRY":"數據源請求失敗時的重試次數","settings.desc.DATA_SOURCE_RETRY_BACKOFF":"重試間隔時間(秒)","settings.desc.CCXT_DEFAULT_EXCHANGE":"CCXT默認交易所(binance, coinbase, okx等)","settings.desc.CCXT_TIMEOUT":"CCXT請求超時時間(毫秒)","settings.desc.CCXT_PROXY":"CCXT請求代理地址(如 socks5h://127.0.0.1:1080)","settings.desc.FINNHUB_API_KEY":"Finnhub API密鑰,用於美股數據(有免費額度)","settings.desc.FINNHUB_TIMEOUT":"Finnhub API請求超時時間","settings.desc.FINNHUB_RATE_LIMIT":"Finnhub API速率限制(每分鐘請求數)","settings.desc.TIINGO_API_KEY":"Tiingo API密鑰,用於外匯/貴金屬數據(免費版不支持1分鐘數據)","settings.desc.TIINGO_TIMEOUT":"Tiingo API請求超時時間","settings.desc.AKSHARE_TIMEOUT":"Akshare API超時時間,用於A股數據","settings.desc.YFINANCE_TIMEOUT":"Yahoo Finance API超時時間","settings.desc.SIGNAL_WEBHOOK_URL":"信號通知Webhook地址(POST JSON)","settings.desc.SIGNAL_WEBHOOK_TOKEN":"Webhook認證令牌,通過請求頭發送","settings.desc.SIGNAL_NOTIFY_TIMEOUT_SEC":"通知請求超時時間","settings.desc.TELEGRAM_BOT_TOKEN":"Telegram機器人Token,從@BotFather獲取","settings.desc.SMTP_HOST":"SMTP郵件服務器地址(如 smtp.gmail.com)","settings.desc.SMTP_PORT":"SMTP端口(TLS用587,SSL用465,明文用25)","settings.desc.SMTP_USER":"SMTP認證用戶名(通常是郵箱地址)","settings.desc.SMTP_PASSWORD":"SMTP認證密碼或應用專用密碼","settings.desc.SMTP_FROM":"郵件發件人地址","settings.desc.SMTP_USE_TLS":"啟用STARTTLS加密(推薦端口587)","settings.desc.SMTP_USE_SSL":"啟用SSL加密(端口465)","settings.desc.TWILIO_ACCOUNT_SID":"Twilio賬戶SID,從控制台獲取","settings.desc.TWILIO_AUTH_TOKEN":"Twilio認證Token,從控制台獲取","settings.desc.TWILIO_FROM_NUMBER":"Twilio發送短信的號碼(如 +1234567890)","settings.desc.ENABLE_AGENT_MEMORY":"啟用AI Agent記憶功能,用於學習歷史交易","settings.desc.AGENT_MEMORY_ENABLE_VECTOR":"啟用本地向量相似度搜索進行記憶檢索","settings.desc.AGENT_MEMORY_EMBEDDING_DIM":"記憶向量嵌入維度","settings.desc.AGENT_MEMORY_TOP_K":"檢索時返回的相似記憶數量","settings.desc.AGENT_MEMORY_CANDIDATE_LIMIT":"相似度搜索的候選記憶上限","settings.desc.AGENT_MEMORY_HALF_LIFE_DAYS":"記憶時間衰減的半衰期(天)","settings.desc.AGENT_MEMORY_W_SIM":"記憶排序中相似度分數的權重(0-1)","settings.desc.AGENT_MEMORY_W_RECENCY":"記憶排序中時間新近度的權重(0-1)","settings.desc.AGENT_MEMORY_W_RETURNS":"記憶排序中收益表現的權重(0-1)","settings.desc.ENABLE_REFLECTION_WORKER":"啟用後台自動交易反思Worker","settings.desc.REFLECTION_WORKER_INTERVAL_SEC":"自動反思運行間隔(默認24小時)","settings.desc.PROXY_HOST":"代理服務器主機名或IP","settings.desc.PROXY_PORT":"代理服務器端口(留空則禁用代理)","settings.desc.PROXY_SCHEME":"代理協議類型。socks5h 表示DNS也走代理","settings.desc.PROXY_URL":"完整代理URL(設置後覆蓋上面的配置)","settings.desc.SEARCH_PROVIDER":"網頁搜索提供商,用於AI研究功能","settings.desc.SEARCH_MAX_RESULTS":"搜索返回的最大結果數","settings.desc.SEARCH_GOOGLE_API_KEY":"Google自定義搜索API密鑰","settings.desc.SEARCH_GOOGLE_CX":"Google可編程搜索引擎ID (CX)","settings.desc.SEARCH_BING_API_KEY":"Microsoft Bing網頁搜索API密鑰","settings.desc.INTERNAL_API_KEY":"內部API認證密鑰,用於服務間調用","settings.desc.CORS_ORIGINS":"允許的CORS來源(* 表示全部,或逗號分隔的列表)","settings.desc.RATE_LIMIT":"每IP每分鐘的API請求限制","settings.desc.ENABLE_CACHE":"啟用響應緩存以提高性能","settings.desc.ENABLE_REQUEST_LOG":"記錄所有API請求日誌,用於調試","settings.desc.ENABLE_AI_ANALYSIS":"啟用AI驅動的市場分析功能","portfolio.summary.totalValue":"總市值","portfolio.summary.totalCost":"總成本","portfolio.summary.totalPnl":"總盈虧","portfolio.summary.positionCount":"持倉數量","portfolio.summary.profitLossRatio":"盈利/虧損","portfolio.summary.today":"今日","portfolio.summary.todayPnl":"今日盈虧","portfolio.summary.bestPerformer":"最佳表現","portfolio.summary.worstPerformer":"最差表現","portfolio.summary.priceSync":"價格同步","portfolio.summary.syncInterval":"刷新間隔","portfolio.summary.justNow":"剛剛","portfolio.summary.ago":"前","portfolio.positions.title":"我的持倉","portfolio.positions.add":"添加持倉","portfolio.positions.addFirst":"添加第一筆持倉","portfolio.positions.empty":"暫無持倉記錄","portfolio.positions.deleteConfirm":"確定刪除這筆持倉嗎?","portfolio.positions.currentPrice":"現價","portfolio.positions.entryPrice":"買入價","portfolio.positions.quantity":"數量","portfolio.positions.side":"方向","portfolio.positions.long":"做多","portfolio.positions.short":"做空","portfolio.positions.marketValue":"市值","portfolio.positions.pnl":"盈虧","portfolio.positions.items":"個持倉","portfolio.monitors.title":"AI 監控","portfolio.monitors.add":"添加監控","portfolio.monitors.addFirst":"添加 AI 監控","portfolio.monitors.empty":"暫無監控任務","portfolio.monitors.deleteConfirm":"確定刪除這個監控任務嗎?","portfolio.monitors.interval":"執行間隔","portfolio.monitors.lastRun":"上次執行","portfolio.monitors.nextRun":"下次執行","portfolio.monitors.channels":"通知渠道","portfolio.monitors.runNow":"立即執行","portfolio.monitors.analysisResult":"AI 分析結果","portfolio.monitors.runningTitle":"AI 分析已啟動","portfolio.monitors.runningDesc":"分析正在後臺運行,完成後會通過通知推送結果。分析多個持倉可能需要幾分鐘時間。","portfolio.monitors.timeoutTitle":"請求超時","portfolio.monitors.timeoutDesc":"分析可能正在後臺運行中,請稍後查看通知獲取結果。如果長時間沒有收到通知,請重試。","portfolio.modal.addPosition":"添加持倉","portfolio.modal.editPosition":"編輯持倉","portfolio.modal.addMonitor":"添加監控","portfolio.modal.editMonitor":"編輯監控","portfolio.form.market":"市場","portfolio.form.marketRequired":"請選擇市場","portfolio.form.selectMarket":"選擇市場","portfolio.form.symbol":"標的代碼","portfolio.form.symbolRequired":"請輸入標的代碼","portfolio.form.searchSymbol":"搜索或輸入標的代碼","portfolio.form.useAsSymbol":"使用","portfolio.form.asSymbolCode":"作為標的代碼","portfolio.form.symbolHint":"可搜索標的庫,或直接輸入任意代碼","portfolio.form.side":"方向","portfolio.form.quantity":"數量","portfolio.form.quantityRequired":"請輸入數量","portfolio.form.enterQuantity":"輸入持倉數量","portfolio.form.entryPrice":"買入價","portfolio.form.entryPriceRequired":"請輸入買入價","portfolio.form.enterEntryPrice":"輸入買入價格","portfolio.form.notes":"備注","portfolio.form.enterNotes":"可選:添加備注","portfolio.form.monitorName":"監控名稱","portfolio.form.monitorNameRequired":"請輸入監控名稱","portfolio.form.enterMonitorName":"例如:每日組合分析","portfolio.form.interval":"執行間隔","portfolio.form.minutes":"分鐘","portfolio.form.hour":"小時","portfolio.form.hours":"小時","portfolio.form.notifyChannels":"通知渠道","portfolio.form.browser":"瀏覽器通知","portfolio.form.email":"郵件","portfolio.form.telegramChatId":"Telegram Chat ID","portfolio.form.enterTelegramChatId":"輸入 Telegram Chat ID","portfolio.form.telegramRequired":"請輸入 Telegram Chat ID","portfolio.form.emailAddress":"郵箱地址","portfolio.form.enterEmail":"輸入郵箱地址","portfolio.form.emailRequired":"請輸入郵箱地址","portfolio.form.emailInvalid":"請輸入有效的郵箱地址","portfolio.form.customPrompt":"自定義提示","portfolio.form.customPromptPlaceholder":'可選:添加特別關注點,例如"重點關注科技股風險"',"portfolio.form.monitorScope":"監控範圍","portfolio.form.allPositions":"全部持倉","portfolio.form.selectedPositions":"指定持倉","portfolio.form.selectPositions":"選擇持倉","portfolio.form.selectAll":"全選","portfolio.form.deselectAll":"全不選","portfolio.form.selectedCount":"已選 {count}/{total}","portfolio.form.pleaseSelectPositions":"請至少選擇一個持倉進行監控","portfolio.message.loadFailed":"加載數據失敗","portfolio.message.saveSuccess":"保存成功","portfolio.message.saveFailed":"保存失敗","portfolio.message.deleteSuccess":"刪除成功","portfolio.message.deleteFailed":"刪除失敗","portfolio.message.updateFailed":"更新失敗","portfolio.message.monitorEnabled":"監控已啟用","portfolio.message.monitorDisabled":"監控已暫停","portfolio.message.monitorRunSuccess":"分析完成","portfolio.message.monitorRunFailed":"分析失敗","portfolio.message.monitorRunning":"AI 分析已啟動,請等待通知","portfolio.groups.all":"全部持倉","portfolio.groups.ungrouped":"未分組","portfolio.form.group":"分組","portfolio.form.enterGroup":"輸入或選擇分組","portfolio.alerts.title":"價格/盈虧預警","portfolio.alerts.addAlert":"添加預警","portfolio.alerts.editAlert":"編輯預警","portfolio.alerts.alertType":"預警類型","portfolio.alerts.priceAbove":"價格高於","portfolio.alerts.priceBelow":"價格低於","portfolio.alerts.pnlAbove":"盈利高於 (%)","portfolio.alerts.pnlBelow":"虧損低於 (%)","portfolio.alerts.threshold":"閾值","portfolio.alerts.thresholdRequired":"請輸入閾值","portfolio.alerts.enterPrice":"輸入價格","portfolio.alerts.enterPercent":"輸入百分比","portfolio.alerts.currentPrice":"當前價格","portfolio.alerts.currentPriceHint":"當前價格","portfolio.alerts.repeatInterval":"重複提醒","portfolio.alerts.noRepeat":"不重複 (觸發一次)","portfolio.alerts.every5min":"每 5 分鐘","portfolio.alerts.every15min":"每 15 分鐘","portfolio.alerts.every30min":"每 30 分鐘","portfolio.alerts.every1hour":"每 1 小時","portfolio.alerts.every4hours":"每 4 小時","portfolio.alerts.onceDaily":"每天一次","portfolio.alerts.enabled":"啟用預警","portfolio.alerts.enabledDesc":"開啟後將自動監測並觸發通知","portfolio.alerts.delete":"刪除","portfolio.alerts.deleteConfirm":"確定要刪除此預警嗎?","portfolio.modal.addAlert":"添加預警","portfolio.modal.editAlert":"編輯預警","menu.userManage":"用戶管理","menu.myProfile":"個人中心","userManage.title":"用戶管理","userManage.searchPlaceholder":"搜索用戶名/郵箱/暱稱","userManage.description":"管理系統用戶、角色和權限","userManage.createUser":"創建用戶","userManage.editUser":"編輯用戶","userManage.username":"用戶名","userManage.password":"密碼","userManage.nickname":"暱稱","userManage.email":"郵箱","userManage.role":"角色","userManage.status":"狀態","userManage.lastLogin":"最後登錄","userManage.active":"啟用","userManage.disabled":"禁用","userManage.neverLogin":"從未登錄","userManage.usernameRequired":"請輸入用戶名","userManage.usernamePlaceholder":"輸入用戶名","userManage.passwordRequired":"請輸入密碼","userManage.passwordPlaceholder":"輸入密碼(至少6位)","userManage.passwordMin":"密碼至少6個字符","userManage.nicknamePlaceholder":"輸入暱稱","userManage.emailPlaceholder":"輸入郵箱","userManage.emailInvalid":"郵箱格式不正確","userManage.rolePlaceholder":"選擇角色","userManage.statusPlaceholder":"選擇狀態","userManage.resetPassword":"重置密碼","userManage.resetPasswordWarning":"此操作將重置用戶密碼","userManage.newPassword":"新密碼","userManage.newPasswordPlaceholder":"輸入新密碼","userManage.confirmDelete":"確定要刪除此用戶嗎?","userManage.roleAdmin":"管理員","userManage.roleManager":"經理","userManage.roleUser":"普通用戶","userManage.roleViewer":"訪客","userManage.credits":"積分","userManage.adjustCredits":"調整積分","userManage.setVip":"設置VIP","userManage.currentCredits":"當前積分","userManage.newCredits":"新積分","userManage.enterCredits":"輸入新的積分數量","userManage.creditsNonNegative":"積分不能為負數","userManage.currentVip":"當前VIP狀態","userManage.vipActive":"有效","userManage.vipExpired":"已過期","userManage.vipDays":"VIP天數","userManage.vipExpiresAt":"VIP過期時間","userManage.cancelVip":"取消VIP","userManage.days":"天","userManage.customDate":"自定義日期","userManage.selectDate":"請選擇日期","userManage.remark":"備注","userManage.remarkPlaceholder":"可選備注","profile.title":"個人中心","profile.description":"管理您的賬戶設置和偏好","profile.basicInfo":"基本信息","profile.changePassword":"修改密碼","profile.username":"用戶名","profile.nickname":"暱稱","profile.email":"郵箱","profile.lastLogin":"最後登錄","profile.nicknamePlaceholder":"輸入您的暱稱","profile.emailPlaceholder":"輸入您的郵箱","profile.emailInvalid":"郵箱格式不正確","profile.emailCannotChange":"註冊後郵箱不可修改","profile.passwordHint":"密碼至少需要6個字符","profile.oldPassword":"當前密碼","profile.newPassword":"新密碼","profile.confirmPassword":"確認密碼","profile.oldPasswordRequired":"請輸入當前密碼","profile.oldPasswordPlaceholder":"輸入當前密碼","profile.newPasswordRequired":"請輸入新密碼","profile.newPasswordPlaceholder":"輸入新密碼","profile.confirmPasswordRequired":"請確認新密碼","profile.confirmPasswordPlaceholder":"再次輸入新密碼","profile.passwordMin":"密碼至少6個字符","profile.passwordMismatch":"兩次輸入的密碼不一致","profile.credits.title":"我的積分","profile.credits.unit":"積分","profile.credits.recharge":"開通/充值","profile.credits.vipExpires":"VIP有效期至","profile.credits.vipExpired":"VIP已過期","profile.credits.noVip":"非VIP用戶","profile.credits.hint":"使用AI分析等功能會消耗積分,VIP用戶免費","profile.creditsLog":"消費記錄","profile.creditsLog.time":"時間","profile.creditsLog.action":"類型","profile.creditsLog.amount":"變動","profile.creditsLog.balance":"餘額","profile.creditsLog.remark":"備注","profile.creditsLog.actionConsume":"消費","profile.creditsLog.actionRecharge":"充值","profile.creditsLog.actionAdjust":"調整","profile.creditsLog.actionRefund":"退款","profile.creditsLog.actionVipGrant":"VIP授予","profile.creditsLog.actionVipRevoke":"VIP取消","profile.creditsLog.actionRegisterBonus":"註冊獎勵","profile.creditsLog.actionReferralBonus":"邀請獎勵","profile.referral.title":"邀請好友","profile.referral.listTab":"邀請列表","profile.referral.totalInvited":"已邀請","profile.referral.bonusPerInvite":"每邀請獲得","profile.referral.yourLink":"您的邀請鏈接","profile.referral.copyLink":"複製鏈接","profile.referral.linkCopied":"邀請鏈接已複製","profile.referral.newUserBonus":"新用戶註冊獲得","profile.referral.user":"用戶","profile.referral.registerTime":"註冊時間","profile.referral.noReferrals":"暫無邀請記錄","profile.referral.shareNow":"立即分享邀請","profile.notifications.title":"通知設定","profile.notifications.hint":"配置您的預設通知方式,在建立資產監控和預警時將自動使用這些設定","profile.notifications.defaultChannels":"預設通知管道","profile.notifications.browser":"站內通知","profile.notifications.email":"郵件","profile.notifications.phone":"簡訊","profile.notifications.telegramBotToken":"Telegram Bot Token","profile.notifications.telegramBotTokenPlaceholder":"請輸入您的 Telegram Bot Token","profile.notifications.telegramBotTokenHint":"透過 @BotFather 建立機器人取得 Token","profile.notifications.telegramChatId":"Telegram Chat ID","profile.notifications.telegramPlaceholder":"請輸入您的 Telegram Chat ID(如 123456789)","profile.notifications.telegramHint":"發送 /start 給 @userinfobot 可取得您的 Chat ID","profile.notifications.notifyEmail":"通知信箱","profile.notifications.emailPlaceholder":"接收通知的信箱地址","profile.notifications.emailHint":"預設使用帳戶信箱,可設定其他信箱接收通知","profile.notifications.phonePlaceholder":"請輸入手機號(如 +886912345678)","profile.notifications.phoneHint":"需要管理員配置 Twilio 服務後才能使用簡訊通知","profile.notifications.discordWebhook":"Discord Webhook","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"在 Discord 伺服器設定中建立 Webhook","profile.notifications.webhookUrl":"Webhook URL","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"自訂 Webhook 地址,將以 POST JSON 方式推送通知","profile.notifications.webhookToken":"Webhook Token(可選)","profile.notifications.webhookTokenPlaceholder":"用於驗證請求的 Bearer Token","profile.notifications.webhookTokenHint":"將作為 Authorization: Bearer Token 傳送到 Webhook","profile.notifications.testBtn":"發送測試通知","profile.notifications.saveSuccess":"通知設定儲存成功","profile.notifications.selectChannel":"請至少選擇一個通知管道","profile.notifications.fillTelegramToken":"請填寫 Telegram Bot Token","profile.notifications.fillTelegram":"請填寫 Telegram Chat ID","profile.notifications.fillEmail":"請填寫通知信箱","profile.notifications.testSent":"測試通知已發送,請檢查您的通知管道","settings.group.billing":"計費配置","settings.field.BILLING_ENABLED":"啟用計費","settings.field.BILLING_VIP_BYPASS":"VIP免費","settings.field.BILLING_COST_AI_ANALYSIS":"AI分析消耗","settings.field.BILLING_COST_STRATEGY_RUN":"策略運行消耗","settings.field.BILLING_COST_BACKTEST":"回測消耗","settings.field.BILLING_COST_PORTFOLIO_MONITOR":"Portfolio監控消耗","settings.field.CREDITS_REGISTER_BONUS":"註冊獎勵","settings.field.CREDITS_REFERRAL_BONUS":"邀請獎勵","settings.field.RECHARGE_TELEGRAM_URL":"充值Telegram鏈接","settings.desc.BILLING_ENABLED":"啟用計費系統。啟用後,用戶使用某些功能需要消耗積分","settings.desc.BILLING_VIP_BYPASS":"VIP用戶在有效期內可免費使用所有付費功能","settings.desc.BILLING_COST_AI_ANALYSIS":"每次AI分析消耗的積分數","settings.desc.BILLING_COST_STRATEGY_RUN":"啟動策略時消耗的積分數","settings.desc.BILLING_COST_BACKTEST":"每次回測消耗的積分數","settings.desc.BILLING_COST_PORTFOLIO_MONITOR":"每次Portfolio AI監控消耗的積分數","settings.desc.CREDITS_REGISTER_BONUS":"新用戶註冊時獲得的積分獎勵","settings.desc.CREDITS_REFERRAL_BONUS":"用戶通過邀請鏈接成功邀請新用戶時,邀請人獲得的積分獎勵","settings.desc.VERIFICATION_CODE_MAX_ATTEMPTS":"驗證碼驗證失敗的最大嘗試次數,超過後將鎖定","settings.desc.VERIFICATION_CODE_LOCK_MINUTES":"驗證碼驗證失敗次數超過限制後的鎖定時長(分鐘)","settings.desc.RECHARGE_TELEGRAM_URL":"用戶點擊充值時跳轉的Telegram客服鏈接"},y=(0,s.A)((0,s.A)({},p),f)}}]); \ No newline at end of file +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[892],{84540:function(a,t,e){e.d(t,{default:function(){return y}});var s=e(76338),i={items_per_page:"條/頁",jump_to:"跳至",jump_to_confirm:"確定",page:"頁",prev_page:"上一頁",next_page:"下一頁",prev_5:"向前 5 頁",next_5:"向後 5 頁",prev_3:"向前 3 頁",next_3:"向後 3 頁"},r=e(85505),o={today:"今天",now:"此刻",backToToday:"返回今天",ok:"確定",timeSelect:"選擇時間",dateSelect:"選擇日期",clear:"清除",month:"月",year:"年",previousMonth:"上個月 (翻頁上鍵)",nextMonth:"下個月 (翻頁下鍵)",monthSelect:"選擇月份",yearSelect:"選擇年份",decadeSelect:"選擇年代",yearFormat:"YYYY年",dayFormat:"D日",dateFormat:"YYYY年M月D日",dateTimeFormat:"YYYY年M月D日 HH時mm分ss秒",previousYear:"上一年 (Control鍵加左方向鍵)",nextYear:"下一年 (Control鍵加右方向鍵)",previousDecade:"上一年代",nextDecade:"下一年代",previousCentury:"上一世紀",nextCentury:"下一世紀"},n={placeholder:"請選擇時間"},d=n,l={lang:(0,r.A)({placeholder:"請選擇日期",rangePlaceholder:["開始日期","結束日期"]},o),timePickerLocale:(0,r.A)({},d)};l.lang.ok="確 定";var c=l,g=c,m={locale:"zh-tw",Pagination:i,DatePicker:c,TimePicker:d,Calendar:g,Table:{filterTitle:"篩選器",filterConfirm:"確定",filterReset:"重置",selectAll:"全部選取",selectInvert:"反向選取",sortTitle:"排序",expand:"展開行",collapse:"關閉行"},Modal:{okText:"確定",cancelText:"取消",justOkText:"知道了"},Popconfirm:{okText:"確定",cancelText:"取消"},Transfer:{searchPlaceholder:"搜尋資料",itemUnit:"項目",itemsUnit:"項目"},Upload:{uploading:"正在上傳...",removeFile:"刪除檔案",uploadError:"上傳失敗",previewFile:"檔案預覽",downloadFile:"下载文件"},Empty:{description:"無此資料"},PageHeader:{back:"返回"}},b=m,h=e(50304),u=e.n(h),p={antLocale:b,momentName:"zh-tw",momentLocale:u()},f={"common.confirm":"確定","common.cancel":"取消","common.save":"保存","common.delete":"刪除","common.edit":"編輯","common.add":"添加","common.close":"關閉","common.ok":"確定","common.actions":"操作","common.refresh":"刷新",submit:"提交",save:"保存","submit.ok":"提交成功","save.ok":"保存成功","menu.welcome":"歡迎","menu.home":"主頁","menu.dashboard":"儀表盤","menu.dashboard.indicator":"指標分析","menu.dashboard.community":"指標社區","menu.dashboard.analysis":"AI 分析","menu.dashboard.tradingAssistant":"交易助手","menu.dashboard.portfolio":"資產監測","menu.settings":"系統設置","menu.dashboard.aiTradingAssistant":"AI交易助手","menu.dashboard.signalRobot":"信號機器人","menu.dashboard.monitor":"監控頁","menu.dashboard.workplace":"工作臺","menu.form":"表單頁","menu.form.basic-form":"基礎表單","menu.form.step-form":"分步表單","menu.form.step-form.info":"分步表單(填寫轉賬信息)","menu.form.step-form.confirm":"分步表單(確認轉賬信息)","menu.form.step-form.result":"分步表單(完成)","menu.form.advanced-form":"高級表單","menu.list":"列表頁","menu.list.table-list":"查詢表格","menu.list.basic-list":"標準列表","menu.list.card-list":"卡片列表","menu.list.search-list":"搜索列表","menu.list.search-list.articles":"搜索列表(文章)","menu.list.search-list.projects":"搜索列表(項目)","menu.list.search-list.applications":"搜索列表(應用)","menu.profile":"詳情頁","menu.profile.basic":"基礎詳情頁","menu.profile.advanced":"高級詳情頁","menu.result":"結果頁","menu.result.success":"成功頁","menu.result.fail":"失敗頁","menu.exception":"異常頁","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"觸發錯誤","menu.account":"個人頁","menu.account.center":"個人中心","menu.account.settings":"個人設置","menu.account.trigger":"觸發報錯","menu.account.logout":"退出登錄","menu.wallet":"我的錢包","menu.docs":"文檔中心","menu.docs.detail":"文檔詳情","menu.header.refreshPage":"刷新頁面","menu.invite.friends":"邀請好友","app.setting.pagestyle":"整體風格設置","app.setting.pagestyle.light":"亮色菜單風格","app.setting.pagestyle.dark":"暗色菜單風格","app.setting.pagestyle.realdark":"暗黑模式","app.setting.themecolor":"主題色","app.setting.navigationmode":"導航模式","app.setting.sidemenu.nav":"側邊欄導航","app.setting.topmenu.nav":"頂部欄導航","app.setting.content-width":"內容區域寬度","app.setting.content-width.tooltip":"該設定僅 [頂部欄導航] 時有效","app.setting.content-width.fixed":"固定","app.setting.content-width.fluid":"流式","app.setting.fixedheader":"固定 Header","app.setting.fixedheader.tooltip":"固定 Header 時可配置","app.setting.autoHideHeader":"下滑時隱藏 Header","app.setting.fixedsidebar":"固定側邊菜單","app.setting.sidemenu":"側邊菜單布局","app.setting.topmenu":"頂部菜單布局","app.setting.othersettings":"其他設置","app.setting.weakmode":"色弱模式","app.setting.multitab":"多頁籤模式","app.setting.copy":"拷貝設置","app.setting.loading":"加載主題中","app.setting.copyinfo":"拷貝設置成功 src/config/defaultSettings.js","app.setting.copy.success":"復制完畢","app.setting.copy.fail":"復制失敗","app.setting.theme.switching":"正在切換主題!","app.setting.production.hint":"配置欄只在開發環境用於預覽,生產環境不會展現,請拷貝後手動修改配置文件","app.setting.themecolor.daybreak":"拂曉藍(默認)","app.setting.themecolor.dust":"薄暮","app.setting.themecolor.volcano":"火山","app.setting.themecolor.sunset":"日暮","app.setting.themecolor.cyan":"明青","app.setting.themecolor.green":"極光綠","app.setting.themecolor.geekblue":"極客藍","app.setting.themecolor.purple":"醬紫","app.setting.tooltip":"頁面設置","notice.title":"通知中心","notice.empty":"暫無通知","notice.markAllRead":"全部已讀","notice.clear":"清空通知","notice.close":"關閉","notice.justNow":"剛剛","notice.minutesAgo":"分鐘前","notice.hoursAgo":"小時前","notice.daysAgo":"天前","notice.detailInfo":"詳細信息","notice.aiDecision":"AI決策","notice.confidence":"置信度","notice.reasoning":"分析理由","notice.symbol":"標的代碼","notice.currentPrice":"當前價格","notice.triggerPrice":"觸發價格","notice.action":"操作","notice.quantity":"數量","notice.viewPortfolio":"查看持倉","notice.type.aiMonitor":"AI監控","notice.type.priceAlert":"價格提醒","notice.type.signal":"交易信號","notice.type.buy":"買入信號","notice.type.sell":"賣出信號","notice.type.hold":"持有建議","notice.type.trade":"交易執行","notice.type.notification":"系統通知","user.login.userName":"用戶名","user.login.password":"密碼","user.login.username.placeholder":"賬戶: admin","user.login.password.placeholder":"密碼: admin or ant.design","user.login.message-invalid-credentials":"登錄失敗,請檢查郵箱和驗證碼","user.login.message-invalid-verification-code":"驗證碼錯誤","user.login.tab-login-credentials":"賬戶密碼登錄","user.login.tab-login-email":"郵箱登錄","user.login.tab-login-mobile":"手機號登錄","user.login.captcha.placeholder":"請輸入圖形驗證碼","user.login.mobile.placeholder":"手機號","user.login.mobile.verification-code.placeholder":"驗證碼","user.login.email.placeholder":"請輸入郵箱地址","user.login.email.verification-code.placeholder":"請輸入驗證碼","user.login.email.sending":"驗證碼發送中...","user.login.email.send-success-title":"提示","user.login.email.send-success":"驗證碼發送成功,請查收郵件","user.login.sms.send-success":"驗證碼發送成功,請查收短信","user.login.remember-me":"自動登錄","user.login.forgot-password":"忘記密碼","user.login.sign-in-with":"其他登錄方式","user.login.signup":"注冊賬戶","user.login.login":"登錄","user.register.register":"注冊","user.register.email.placeholder":"郵箱","user.register.password.placeholder":"請至少輸入 6 個字符。請不要使用容易被猜到的密碼。","user.register.password.popover-message":"請至少輸入 6 個字符。請不要使用容易被猜到的密碼。","user.register.confirm-password.placeholder":"確認密碼","user.register.get-verification-code":"獲取驗證碼","user.register.sign-in":"使用已有賬戶登錄","user.register-result.msg":"你的賬戶:{email} 注冊成功","user.register-result.activation-email":"激活郵件已發送到你的郵箱中,郵件有效期爲24小時。請及時登錄郵箱,點擊郵件中的鏈接激活帳戶。","user.register-result.back-home":"返回首頁","user.register-result.view-mailbox":"查看郵箱","user.email.required":"請輸入郵箱地址!","user.email.wrong-format":"郵箱地址格式錯誤!","user.userName.required":"請輸入帳戶名或郵箱地址","user.password.required":"請輸入密碼!","user.password.twice.msg":"兩次輸入的密碼不匹配!","user.password.strength.msg":"密碼強度不夠 ","user.password.strength.strong":"強度:強","user.password.strength.medium":"強度:中","user.password.strength.low":"強度:低","user.password.strength.short":"強度:太短","user.confirm-password.required":"請確認密碼!","user.phone-number.required":"請輸入正確的手機號","user.phone-number.wrong-format":"手機號格式錯誤!","user.verification-code.required":"請輸入驗證碼!","user.captcha.required":"請輸入圖形驗證碼!","user.login.infos":"QuantDinger 是一個 AI 多智能體股票分析輔助工具,不具備證券投資諮詢資質。平臺中的所有分析結果、評分、參考意見均由 AI 基於歷史數據自動生成,僅供學習、研究與技術交流使用,不構成任何投資建議或決策依據。股票投資存在市場風險、流動性風險、政策風險等多種風險,可能導致本金損失。用戶應基於自身風險承受能力獨立決策,使用本工具產生的任何投資行爲及其後果由用戶自行承擔。市場有風險,投資需謹慎。","user.login.tab-login-web3":"Web3 登錄","user.login.web3.tip":"使用錢包進行籤名登錄","user.login.web3.connect":"連接錢包並登錄","user.login.web3.no-wallet":"未檢測到錢包","user.login.web3.no-address":"未獲取到錢包地址","user.login.web3.nonce-failed":"獲取隨機數失敗","user.login.web3.verify-failed":"籤名驗證失敗","user.login.web3.success":"登錄成功","user.login.web3.failed":"錢包登錄失敗","nav.no_wallet":"未檢測到錢包","nav.copy":"復制","nav.copy_success":"復制成功","user.login.oauth.google":"使用 Google 登錄","user.login.oauth.github":"使用 GitHub 登錄","user.login.oauth.loading":"正在跳轉到授權頁面...","user.login.oauth.failed":"OAuth 登錄失敗","user.login.oauth.get-url-failed":"獲取授權鏈接失敗","user.login.subtitle":"驅動的全球市場量化洞察","user.login.legal.title":"法律免責聲明","user.login.legal.view":"查看法律免責聲明","user.login.legal.collapse":"收起法律免責聲明","user.login.legal.agree":"我已閱讀並同意法律免責聲明","user.login.legal.required":"請先閱讀並勾選法律免責聲明","user.login.legal.content":"QuantDinger 是一個 AI 多智能體股票分析輔助工具,不具備證券投資諮詢資質。平臺中的所有分析結果、評分、參考意見均由 AI 基於歷史數據自動生成,僅供學習、研究與技術交流使用,不構成任何投資建議或決策依據。股票投資存在市場風險、流動性風險、政策風險等多種風險,可能導致本金損失。用戶應基於自身風險承受能力獨立決策,使用本工具產生的任何投資行爲及其後果由用戶自行承擔。市場有風險,投資需謹慎。","user.login.privacy.title":"用戶隱私條款","user.login.privacy.view":"查看用戶隱私條款","user.login.privacy.collapse":"收起用戶隱私條款","user.login.privacy.content":"我們重視您的隱私與數據保護。1) 收集範圍:僅收集實現功能所需的信息(如郵箱、手機號、區號、Web3 錢包地址)以及必要的日志與設備信息。2) 使用目的:用於賬戶登錄與安全校驗、服務功能提供、問題排查與合規要求。3) 存儲與安全:數據加密存儲,並採取必要的權限與訪問控制措施,盡力防止未經授權的訪問、披露或丟失。4) 共享與第三方:除法律法規要求或履行服務所必需外,不會與第三方共享您的個人信息;若涉及第三方服務(如錢包、短信服務商),僅在實現功能所需的最小範圍內處理。5) Cookies/本地存儲:用於登錄態與必要的會話維持(如令牌、PHPSESSID),您可在瀏覽器中進行清理或限制。6) 個人權利:您可根據法律法規行使查詢、更正、刪除、撤回同意等權利。7) 變更與通知:本條款更新後將在頁面顯著位置提示。繼續使用本服務即表示您已閱讀並同意更新內容。若您不同意本條款或其中任何更新,請停止使用本服務並聯系我們。","account.basicInfo":"基礎信息","account.id":"用戶ID","account.username":"用戶名","account.nickname":"暱稱","account.email":"郵箱","account.mobile":"手機號","account.web3address":"錢包地址","account.pid":"推薦人ID","account.level":"用戶等級","account.money":"餘額","account.qdtBalance":"QDT 餘額","account.score":"積分","account.createtime":"注冊時間","account.inviteLink":"邀請鏈接","account.recharge":"充值","account.rechargeTip":"請使用微信或支付寶掃描下方二維碼進行充值","account.qrCodePlaceholder":"二維碼佔位符(模擬)","account.rechargeAmount":"充值金額","account.enterAmount":"請輸入充值金額","account.rechargeHint":"最小充值金額:1 QDT","account.confirmRecharge":"確認充值","account.enterValidAmount":"請輸入有效的充值金額","account.rechargeSuccess":"充值成功!已充值 {amount} QDT","account.settings.menuMap.basic":"基本設置","account.settings.menuMap.security":"安全設置","account.settings.menuMap.notification":"新消息通知","account.settings.menuMap.moneyLog":"資金明細","account.moneyLog.empty":"暫無資金明細","account.moneyLog.total":"共 {total} 條記錄","account.moneyLog.type.purchase":"購買指標","account.moneyLog.type.recharge":"充值","account.moneyLog.type.refund":"退款","account.moneyLog.type.reward":"獎勵","account.moneyLog.type.income":"指標收入","account.moneyLog.type.commission":"平臺手續費","wallet.balance":"QDT 餘額","wallet.recharge":"充值","wallet.withdraw":"提現","wallet.filter":"篩選","wallet.reset":"重置","wallet.totalRecharge":"累計充值","wallet.totalWithdraw":"累計提現","wallet.totalIncome":"累計收入","wallet.records":"交易記錄與資金明細","wallet.tradingRecords":"交易記錄","wallet.moneyLog":"資金明細","wallet.rechargeTip":"請使用微信或支付寶掃描下方二維碼進行充值","wallet.qrCodePlaceholder":"二維碼佔位符(模擬)","wallet.rechargeAmount":"充值金額","wallet.enterAmount":"請輸入充值金額","wallet.rechargeHint":"最小充值金額:1 QDT","wallet.confirmRecharge":"確認充值","wallet.enterValidAmount":"請輸入有效的充值金額","wallet.rechargeSuccess":"充值成功!已充值 {amount} QDT","wallet.rechargeFailed":"充值失敗","wallet.withdrawTip":"請輸入提現金額和提現地址","wallet.withdrawAmount":"提現金額","wallet.enterWithdrawAmount":"請輸入提現金額","wallet.withdrawHint":"最小提現金額:1 QDT","wallet.withdrawAddress":"提現地址(可選)","wallet.enterWithdrawAddress":"請輸入提現地址","wallet.confirmWithdraw":"確認提現","wallet.enterValidWithdrawAmount":"請輸入有效的提現金額","wallet.insufficientBalance":"餘額不足","wallet.withdrawSuccess":"提現成功!已提現 {amount} QDT","wallet.withdrawFailed":"提現失敗","wallet.noTradingRecords":"暫無交易記錄","wallet.noMoneyLog":"暫無資金明細","wallet.loadTradingRecordsFailed":"加載交易記錄失敗","wallet.loadMoneyLogFailed":"加載資金明細失敗","wallet.moneyLogTotal":"共 {total} 條記錄","wallet.moneyLogTypeTitle":"類型","wallet.moneyLogType.all":"全部類型","wallet.table.time":"時間","wallet.table.type":"類型","wallet.table.price":"價格","wallet.table.amount":"數量","wallet.table.money":"金額","wallet.table.balance":"餘額","wallet.table.memo":"備注","wallet.table.value":"價值","wallet.table.profit":"盈虧","wallet.table.commission":"手續費","wallet.table.total":"共 {total} 條記錄","wallet.tradeType.buy":"買入","wallet.tradeType.sell":"賣出","wallet.tradeType.liquidation":"強平","wallet.tradeType.openLong":"開多","wallet.tradeType.addLong":"加多","wallet.tradeType.closeLong":"平多","wallet.tradeType.closeLongStop":"止損平多","wallet.tradeType.closeLongProfit":"止盈平多","wallet.tradeType.openShort":"開空","wallet.tradeType.addShort":"加空","wallet.tradeType.closeShort":"平空","wallet.tradeType.closeShortStop":"止損平空","wallet.tradeType.closeShortProfit":"止盈平空","wallet.moneyLogType.purchase":"購買指標","wallet.moneyLogType.recharge":"充值","wallet.moneyLogType.withdraw":"提現","wallet.moneyLogType.refund":"退款","wallet.moneyLogType.reward":"獎勵","wallet.moneyLogType.income":"收入","wallet.moneyLogType.commission":"手續費","wallet.web3Address.required":"請先填寫Web3錢包地址","wallet.web3Address.requiredDescription":"充值前需要先綁定您的Web3錢包地址,用於接收充值","wallet.web3Address.placeholder":"請輸入您的Web3錢包地址(0x開頭)","wallet.web3Address.save":"保存錢包地址","wallet.web3Address.saveSuccess":"錢包地址保存成功","wallet.web3Address.saveFailed":"保存錢包地址失敗","wallet.web3Address.invalidFormat":"請輸入有效的Web3錢包地址(以太坊格式:0x開頭42位字符,或TRC20格式:T開頭34位字符)","wallet.selectCoin":"選擇幣種","wallet.selectChain":"選擇鏈","wallet.chain.eth":"ETH(ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"BSC","wallet.targetQdtAmount":"想要兌換的QDT數量(可選)","wallet.targetQdtAmount.placeholder":"請輸入想要兌換的QDT數量,當前QDT價格:{price} USDT","wallet.targetQdtAmount.requiredUsdt":"需要充值:{amount} USDT","wallet.rechargeAddress":"充值地址","wallet.copyAddress":"復制","wallet.copySuccess":"復制成功!","wallet.copyFailed":"復制失敗,請手動復制","wallet.rechargeAddressHint":"請確保使用{chain}鏈向此地址充值{coin}","wallet.qdtPrice.loading":"加載中...","wallet.rechargeTip.new":"請選擇幣種和鏈,然後掃描下方二維碼進行充值","wallet.exchangeRate":"1 QDT ≈ {rate} USDT","wallet.withdrawableAmount":"可提現金額","wallet.totalBalance":"總餘額","wallet.insufficientWithdrawable":"可提現金額不足,當前可提現:{amount} QDT","wallet.withdrawAddressRequired":"請輸入提現地址","wallet.withdrawAddressHint":"請確保地址正確,提現後無法撤銷","wallet.withdrawSubmitSuccess":"提現申請提交成功,請等待審核","menu.footer.contactUs":"聯系我們","menu.footer.getSupport":"獲取支持","menu.footer.socialAccounts":"社交賬戶","menu.footer.userAgreement":"用戶協議","menu.footer.privacyPolicy":"隱私條例","menu.footer.support":"Support","menu.footer.featureRequest":"Feature request","menu.footer.email":"Email","menu.footer.liveChat":"24/7 live chat","dashboard.analysis.title":"Multi-Dimensional Analysis","dashboard.analysis.subtitle":"AI驅動的綜合金融分析平臺","dashboard.analysis.selectSymbol":"選擇或輸入標的代碼","dashboard.analysis.selectModel":"選擇模型","dashboard.analysis.startAnalysis":"開始分析","dashboard.analysis.history":"歷史記錄","dashboard.analysis.tab.overview":"綜合分析","dashboard.analysis.tab.fundamental":"基本面","dashboard.analysis.tab.technical":"技術","dashboard.analysis.tab.news":"新聞","dashboard.analysis.tab.sentiment":"情緒","dashboard.analysis.tab.risk":"風險","dashboard.analysis.tab.debate":"多空辯論","dashboard.analysis.tab.decision":"最終決策","dashboard.analysis.empty.selectSymbol":"選擇標的開始分析","dashboard.analysis.empty.selectSymbolDesc":"從自選股列表中選擇或輸入標的代碼,獲取多維度AI分析報告","dashboard.analysis.empty.startAnalysis":'點擊"開始分析"按鈕進行多維度分析',"dashboard.analysis.empty.startAnalysisDesc":"我們將從基本面、技術、新聞、情緒和風險等多個維度爲您提供全面的分析","dashboard.analysis.empty.noData":"暫無{type}分析數據,請先進行綜合分析","dashboard.analysis.empty.noWatchlist":"暫無自選股","dashboard.analysis.empty.noHistory":"暫無歷史記錄","dashboard.analysis.empty.watchlistHint":"暫無自選股,請先","dashboard.analysis.empty.noDebateData":"暫無辯論數據","dashboard.analysis.empty.noDecisionData":"暫無決策數據","dashboard.analysis.empty.selectAgent":"請選擇一個 Agent 查看分析結果","dashboard.analysis.loading.analyzing":"正在分析中,請稍候...","dashboard.analysis.loading.fundamental":"正在分析基本面數據...","dashboard.analysis.loading.technical":"正在分析技術指標...","dashboard.analysis.loading.news":"正在分析新聞數據...","dashboard.analysis.loading.sentiment":"正在分析市場情緒...","dashboard.analysis.loading.risk":"正在評估風險...","dashboard.analysis.loading.debate":"正在進行多空辯論...","dashboard.analysis.loading.decision":"正在生成最終決策...","dashboard.analysis.score.overall":"綜合評分","dashboard.analysis.score.recommendation":"投資建議","dashboard.analysis.score.confidence":"置信度","dashboard.analysis.dimension.fundamental":"基本面","dashboard.analysis.dimension.technical":"技術","dashboard.analysis.dimension.news":"新聞","dashboard.analysis.dimension.sentiment":"情緒","dashboard.analysis.dimension.risk":"風險","dashboard.analysis.card.dimensionScores":"各維度評分","dashboard.analysis.card.overviewReport":"綜合分析報告","dashboard.analysis.card.financialMetrics":"財務指標","dashboard.analysis.card.fundamentalReport":"基本面分析報告","dashboard.analysis.card.technicalIndicators":"技術指標","dashboard.analysis.card.technicalReport":"技術分析報告","dashboard.analysis.card.newsList":"相關新聞","dashboard.analysis.card.newsReport":"新聞分析報告","dashboard.analysis.card.sentimentIndicators":"情緒指標","dashboard.analysis.card.sentimentReport":"情緒分析報告","dashboard.analysis.card.riskMetrics":"風險指標","dashboard.analysis.card.riskReport":"風險評估報告","dashboard.analysis.card.bullView":"看漲觀點 (Bull)","dashboard.analysis.card.bearView":"看跌觀點 (Bear)","dashboard.analysis.card.researchConclusion":"研究員結論","dashboard.analysis.card.traderPlan":"交易員計劃","dashboard.analysis.card.riskDebate":"風險委員會辯論","dashboard.analysis.card.finalDecision":"最終決策 (Final Decision)","dashboard.analysis.card.tradePlanDetail":"交易計劃詳情","dashboard.analysis.tradingPlan.entry_price":"入場價格","dashboard.analysis.tradingPlan.position_size":"倉位大小","dashboard.analysis.tradingPlan.stop_loss":"止損","dashboard.analysis.tradingPlan.take_profit":"止盈","dashboard.analysis.label.confidence":"置信度","dashboard.analysis.label.keyPoints":"核心要點","dashboard.analysis.label.riskWarning":"風險提示","dashboard.analysis.risk.risky":"激進派觀點 (Risky)","dashboard.analysis.risk.neutral":"中立派觀點 (Neutral)","dashboard.analysis.risk.safe":"保守派觀點 (Safe)","dashboard.analysis.risk.conclusion":"結論","dashboard.analysis.feature.fundamental":"基本面分析","dashboard.analysis.feature.technical":"技術分析","dashboard.analysis.feature.news":"新聞分析","dashboard.analysis.feature.sentiment":"情緒分析","dashboard.analysis.feature.risk":"風險評估","dashboard.analysis.watchlist.title":"我的自選股","dashboard.analysis.watchlist.add":"添加","dashboard.analysis.watchlist.addStock":"添加股票","dashboard.analysis.modal.addStock.title":"添加自選股","dashboard.analysis.modal.addStock.confirm":"確定","dashboard.analysis.modal.addStock.cancel":"取消","dashboard.analysis.modal.addStock.market":"市場類型","dashboard.analysis.modal.addStock.marketPlaceholder":"請選擇市場","dashboard.analysis.modal.addStock.marketRequired":"請選擇市場類型","dashboard.analysis.modal.addStock.symbol":"股票代碼","dashboard.analysis.modal.addStock.symbolPlaceholder":"例如: AAPL, TSLA, GOOGL, 000001, BTC","dashboard.analysis.modal.addStock.symbolRequired":"請輸入股票代碼","dashboard.analysis.modal.addStock.searchPlaceholder":"搜索標的代碼或名稱","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"搜索或輸入標的代碼(如:AAPL、BTC/USDT、EUR/USD)","dashboard.analysis.modal.addStock.searchOrInputHint":"支持搜索數據庫中的標的,或直接輸入代碼(系統將自動獲取名稱)","dashboard.analysis.modal.addStock.search":"搜索","dashboard.analysis.modal.addStock.searchResults":"搜索結果","dashboard.analysis.modal.addStock.hotSymbols":"熱門標的","dashboard.analysis.modal.addStock.noHotSymbols":"暫無熱門標的","dashboard.analysis.modal.addStock.selectedSymbol":"已選標的","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"請先選擇一個標的","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"請先選擇一個標的或輸入標的代碼","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"請輸入標的代碼","dashboard.analysis.modal.addStock.pleaseSelectMarket":"請先選擇市場類型","dashboard.analysis.modal.addStock.searchFailed":"搜索失敗,請稍後重試","dashboard.analysis.modal.addStock.noSearchResults":"未找到匹配的標的","dashboard.analysis.modal.addStock.willAutoFetchName":"系統將自動獲取名稱","dashboard.analysis.modal.addStock.addDirectly":"直接添加","dashboard.analysis.modal.addStock.nameWillBeFetched":"名稱將在添加時自動獲取","dashboard.analysis.market.USStock":"美股","dashboard.analysis.market.Crypto":"加密貨幣","dashboard.analysis.market.Forex":"外匯","dashboard.analysis.market.Futures":"期貨","dashboard.analysis.modal.history.title":"歷史分析記錄","dashboard.analysis.modal.history.viewResult":"查看結果","dashboard.analysis.modal.history.completeTime":"完成時間","dashboard.analysis.modal.history.error":"錯誤","dashboard.analysis.status.pending":"待處理","dashboard.analysis.status.processing":"處理中","dashboard.analysis.status.completed":"已完成","dashboard.analysis.status.failed":"失敗","dashboard.analysis.message.selectSymbol":"請先選擇標的","dashboard.analysis.message.taskCreated":"分析任務已創建,正在後臺執行...","dashboard.analysis.message.analysisComplete":"分析完成","dashboard.analysis.message.analysisCompleteCache":"分析完成(使用緩存數據)","dashboard.analysis.message.analysisFailed":"分析失敗,請稍後重試","dashboard.analysis.message.addStockSuccess":"添加成功","dashboard.analysis.message.addStockFailed":"添加失敗","dashboard.analysis.message.removeStockSuccess":"移除成功","dashboard.analysis.message.removeStockFailed":"移除失敗","dashboard.analysis.message.resumingAnalysis":"正在恢復分析任務...","dashboard.analysis.message.deleteSuccess":"刪除成功","dashboard.analysis.message.deleteFailed":"刪除失敗","dashboard.analysis.modal.history.delete":"刪除","dashboard.analysis.modal.history.deleteConfirm":"確定要刪除這條分析記錄嗎?","dashboard.analysis.test":"工專路 {no} 號店","dashboard.analysis.introduce":"指標說明","dashboard.analysis.total-sales":"總銷售額","dashboard.analysis.day-sales":"日均銷售額¥","dashboard.analysis.visits":"訪問量","dashboard.analysis.visits-trend":"訪問量趨勢","dashboard.analysis.visits-ranking":"門店訪問量排名","dashboard.analysis.day-visits":"日訪問量","dashboard.analysis.week":"周同比","dashboard.analysis.day":"日同比","dashboard.analysis.payments":"支付筆數","dashboard.analysis.conversion-rate":"轉化率","dashboard.analysis.operational-effect":"運營活動效果","dashboard.analysis.sales-trend":"銷售趨勢","dashboard.analysis.sales-ranking":"門店銷售額排名","dashboard.analysis.all-year":"全年","dashboard.analysis.all-month":"本月","dashboard.analysis.all-week":"本周","dashboard.analysis.all-day":"今日","dashboard.analysis.search-users":"搜索用戶數","dashboard.analysis.per-capita-search":"人均搜索次數","dashboard.analysis.online-top-search":"線上熱門搜索","dashboard.analysis.the-proportion-of-sales":"銷售額類別佔比","dashboard.analysis.dropdown-option-one":"操作一","dashboard.analysis.dropdown-option-two":"操作二","dashboard.analysis.channel.all":"全部渠道","dashboard.analysis.channel.online":"線上","dashboard.analysis.channel.stores":"門店","dashboard.analysis.sales":"銷售額","dashboard.analysis.traffic":"客流量","dashboard.analysis.table.rank":"排名","dashboard.analysis.table.search-keyword":"搜索關鍵詞","dashboard.analysis.table.users":"用戶數","dashboard.analysis.table.weekly-range":"周漲幅","dashboard.indicator.selectSymbol":"選擇或輸入標的代碼","dashboard.indicator.emptyWatchlistHint":"暫無自選股,請先添加","dashboard.indicator.hint.selectSymbol":"請選擇標的開始分析","dashboard.indicator.hint.selectSymbolDesc":"在上方搜索框中選擇或輸入股票代碼,查看K線圖表和技術指標","dashboard.indicator.retry":"重試","dashboard.indicator.panel.title":"技術指標","dashboard.indicator.panel.realtimeOn":"關閉實時更新","dashboard.indicator.panel.realtimeOff":"開啓實時更新","dashboard.indicator.panel.themeLight":"切換到深色主題","dashboard.indicator.panel.themeDark":"切換到淺色主題","dashboard.indicator.section.enabled":"已啓用","dashboard.indicator.section.added":"我添加的指標","dashboard.indicator.section.custom":"自己創建的指標","dashboard.indicator.section.bought":"我選購的指標","dashboard.indicator.section.myCreated":"我創建的指標","dashboard.indicator.empty":"暫無指標,請先添加或創建指標","dashboard.indicator.buy":"購買指標","dashboard.indicator.action.start":"啓動","dashboard.indicator.action.stop":"關閉","dashboard.indicator.action.edit":"編輯","dashboard.indicator.action.delete":"刪除","dashboard.indicator.action.backtest":"回測","dashboard.indicator.status.normal":"正常","dashboard.indicator.status.normalPermanent":"正常(永久有效)","dashboard.indicator.status.expired":"已過期","dashboard.indicator.expiry.permanent":"永久有效","dashboard.indicator.expiry.noExpiry":"無到期時間","dashboard.indicator.expiry.expired":"已過期:{date}","dashboard.indicator.expiry.expiresOn":"到期時間:{date}","dashboard.indicator.delete.confirmTitle":"確認刪除","dashboard.indicator.delete.confirmContent":'確定要刪除指標"{name}"嗎?此操作不可恢復。',"dashboard.indicator.delete.confirmOk":"刪除","dashboard.indicator.delete.confirmCancel":"取消","dashboard.indicator.delete.success":"刪除成功","dashboard.indicator.delete.failed":"刪除失敗","dashboard.indicator.save.success":"保存成功","dashboard.indicator.save.failed":"保存失敗","dashboard.indicator.error.loadWatchlistFailed":"加載自選股失敗","dashboard.indicator.error.chartNotReady":"圖表組件未初始化,請先選擇標的並等待圖表加載完成","dashboard.indicator.error.chartMethodNotReady":"圖表組件方法未就緒,請稍後重試","dashboard.indicator.error.chartExecuteNotReady":"圖表組件執行方法未就緒,請稍後重試","dashboard.indicator.error.parseFailed":"無法解析Python代碼","dashboard.indicator.error.parseFailedCheck":"無法解析Python代碼,請檢查代碼格式","dashboard.indicator.error.addIndicatorFailed":"添加指標失敗","dashboard.indicator.error.runIndicatorFailed":"運行指標失敗","dashboard.indicator.error.pleaseLogin":"請先登錄","dashboard.indicator.error.loadDataFailed":"數據加載失敗","dashboard.indicator.error.loadDataFailedDesc":"請檢查網絡連接","dashboard.indicator.error.tiingoSubscription":"外匯1分鐘數據需要 Tiingo 付費訂閱,請使用其他時間週期或升級訂閱","dashboard.indicator.error.pythonEngineFailed":"Python 引擎加載失敗,指標功能可能無法使用","dashboard.indicator.error.chartInitFailed":"圖表初始化失敗","dashboard.indicator.warning.enterCode":"請先輸入指標代碼","dashboard.indicator.warning.pyodideLoadFailed":"Python 引擎加載失敗","dashboard.indicator.warning.pyodideLoadFailedDesc":"您當前所在區域或網絡環境無法使用該功能","dashboard.indicator.warning.chartNotInitialized":"圖表未初始化,無法使用畫線工具","dashboard.indicator.success.runIndicator":"指標運行成功","dashboard.indicator.success.clearDrawings":"已清除所有畫線","dashboard.indicator.sma":"SMA (均線組合)","dashboard.indicator.ema":"EMA (指數均線組合)","dashboard.indicator.rsi":"RSI (相對強弱)","dashboard.indicator.macd":"MACD","dashboard.indicator.bb":"布林帶 (Bollinger Bands)","dashboard.indicator.atr":"ATR (平均真實波幅)","dashboard.indicator.cci":"CCI (商品通道指數)","dashboard.indicator.williams":"Williams %R (威廉指標)","dashboard.indicator.mfi":"MFI (資金流量指標)","dashboard.indicator.adx":"ADX (平均趨向指數)","dashboard.indicator.obv":"OBV (能量潮)","dashboard.indicator.adosc":"ADOSC (積累/派發振蕩器)","dashboard.indicator.ad":"AD (積累/派發線)","dashboard.indicator.kdj":"KDJ (隨機指標)","dashboard.indicator.signal.buy":"BUY","dashboard.indicator.signal.sell":"SELL","dashboard.indicator.signal.supertrendBuy":"SuperTrend Buy","dashboard.indicator.signal.supertrendSell":"SuperTrend Sell","dashboard.indicator.chart.kline":"K線","dashboard.indicator.chart.volume":"成交量","dashboard.indicator.chart.uptrend":"Up Trend","dashboard.indicator.chart.downtrend":"Down Trend","dashboard.indicator.tooltip.time":"時間","dashboard.indicator.tooltip.open":"開","dashboard.indicator.tooltip.close":"收","dashboard.indicator.tooltip.high":"高","dashboard.indicator.tooltip.low":"低","dashboard.indicator.tooltip.volume":"成交量","dashboard.indicator.drawing.line":"線段","dashboard.indicator.drawing.horizontalLine":"水平線","dashboard.indicator.drawing.verticalLine":"垂直線","dashboard.indicator.drawing.ray":"射線","dashboard.indicator.drawing.straightLine":"直線","dashboard.indicator.drawing.parallelLine":"平行線","dashboard.indicator.drawing.priceLine":"價格線","dashboard.indicator.drawing.priceChannel":"價格通道","dashboard.indicator.drawing.fibonacciLine":"斐波那契線","dashboard.indicator.drawing.measure":"測量","dashboard.indicator.drawing.clearAll":"清除所有畫線","dashboard.indicator.market.USStock":"美股","dashboard.indicator.market.Crypto":"加密貨幣","dashboard.indicator.market.Forex":"外匯","dashboard.indicator.market.Futures":"期貨","dashboard.indicator.create":"創建指標","dashboard.indicator.editor.title":"創建/編輯指標","dashboard.indicator.editor.name":"指標名稱","dashboard.indicator.editor.nameRequired":"請輸入指標名稱","dashboard.indicator.editor.namePlaceholder":"請輸入指標名稱","dashboard.indicator.editor.description":"指標描述","dashboard.indicator.editor.descriptionPlaceholder":"請輸入指標描述(可選)","dashboard.indicator.editor.code":"指標腳本(Python)","dashboard.indicator.editor.codeRequired":"請輸入指標代碼","dashboard.indicator.editor.codePlaceholder":"請輸入Python代碼","dashboard.indicator.editor.run":"運行","dashboard.indicator.editor.runHint":"點擊運行按鈕可以在K線圖上預覽指標效果","dashboard.indicator.editor.guide":"開發指南","dashboard.indicator.editor.guideTitle":"Python 指標開發指南","dashboard.indicator.editor.save":"保存","dashboard.indicator.editor.cancel":"取消","dashboard.indicator.editor.unnamed":"未命名指標","dashboard.indicator.editor.publishToCommunity":"發布到社區","dashboard.indicator.editor.publishToCommunityHint":"發布後,其他用戶可以在社區中查看和使用您的指標","dashboard.indicator.editor.indicatorType":"指標類型","dashboard.indicator.editor.indicatorTypeRequired":"請選擇指標類型","dashboard.indicator.editor.indicatorTypePlaceholder":"請選擇指標類型","dashboard.indicator.editor.previewImage":"預覽圖","dashboard.indicator.editor.uploadImage":"上傳圖片","dashboard.indicator.editor.previewImageHint":"建議尺寸:800x400,大小不超過2MB","dashboard.indicator.editor.pricing":"售價(QDT)","dashboard.indicator.editor.pricingType.free":"免費","dashboard.indicator.editor.pricingType.permanent":"永久","dashboard.indicator.editor.pricingType.monthly":"月付","dashboard.indicator.editor.price":"價格","dashboard.indicator.editor.priceRequired":"請輸入價格","dashboard.indicator.editor.pricePlaceholder":"請輸入價格","dashboard.indicator.editor.pricingHint":"免費指標雖然價格爲0,但平臺會根據您的指標使用量和好評率給予獎勵(QDT)","dashboard.indicator.editor.aiGenerate":"智能生成","dashboard.indicator.editor.aiPromptPlaceholder":"請描述你的信號邏輯(只輸出 buy/sell)與繪圖(plots)。倉位/風控/加減倉請在回測配置中設定。","dashboard.indicator.editor.aiGenerateBtn":"AI生成代碼","dashboard.indicator.editor.aiPromptRequired":"請輸入您的想法","dashboard.indicator.editor.aiGenerateSuccess":"代碼生成成功","dashboard.indicator.editor.aiGenerateError":"代碼生成失敗,請稍後重試","dashboard.indicator.editor.verifyCode":"代碼檢查","dashboard.indicator.editor.verifyCodeSuccess":"代碼檢查通過","dashboard.indicator.editor.verifyCodeFailed":"代碼檢查未通過","dashboard.indicator.editor.verifyCodeEmpty":"代碼不能為空","dashboard.indicator.boundary.message":"提示:指標腳本只負責「計算 + 繪圖 + buy/sell 信號」;倉位、風控、加減倉、手續費/滑點屬於策略執行配置。","dashboard.indicator.boundary.indicatorRule":"指標腳本請只輸出 buy/sell(並設定 df['buy']/df['sell'])。不要在腳本內撰寫倉位管理、止盈止損、加減倉。","dashboard.indicator.boundary.backtestRule":"規則:同一根K線若出現主信號(buy/sell→開/平倉/反手),本K線將跳過所有加倉與減倉。","dashboard.indicator.backtest.title":"指標回測","dashboard.indicator.backtest.config":"回測參數","dashboard.indicator.backtest.startDate":"開始日期","dashboard.indicator.backtest.endDate":"結束日期","dashboard.indicator.backtest.selectStartDate":"選擇開始日期","dashboard.indicator.backtest.selectEndDate":"選擇結束日期","dashboard.indicator.backtest.startDateRequired":"請選擇開始日期","dashboard.indicator.backtest.endDateRequired":"請選擇結束日期","dashboard.indicator.backtest.initialCapital":"初始資金","dashboard.indicator.backtest.initialCapitalRequired":"請輸入初始資金","dashboard.indicator.backtest.commission":"手續費率(%)","dashboard.indicator.backtest.commissionHint":"按名義價值(含槓桿)收取;每筆成交(開/平倉)都會從餘額扣除。","dashboard.indicator.backtest.leverage":"槓杆倍率","dashboard.indicator.backtest.timeframe":"K線週期","dashboard.indicator.backtest.tradeDirection":"交易方向","dashboard.indicator.backtest.longOnly":"做多","dashboard.indicator.backtest.shortOnly":"做空","dashboard.indicator.backtest.both":"雙向","dashboard.indicator.backtest.run":"開始回測","dashboard.indicator.backtest.rerun":"重新回測","dashboard.indicator.backtest.close":"關閉","dashboard.indicator.backtest.running":"正在進行指標回測...","dashboard.indicator.backtest.loadingTip1":"正在獲取歷史K線數據...","dashboard.indicator.backtest.loadingTip2":"正在執行策略信號計算...","dashboard.indicator.backtest.loadingTip3":"正在模擬交易執行...","dashboard.indicator.backtest.loadingTip4":"正在計算回測指標...","dashboard.indicator.backtest.loadingTip5":"即將完成,請稍候...","dashboard.indicator.backtest.results":"回測結果","dashboard.indicator.backtest.totalReturn":"總收益率","dashboard.indicator.backtest.annualReturn":"年化收益","dashboard.indicator.backtest.maxDrawdown":"最大回撤","dashboard.indicator.backtest.sharpeRatio":"夏普比率","dashboard.indicator.backtest.winRate":"勝率","dashboard.indicator.backtest.profitFactor":"盈虧比","dashboard.indicator.backtest.totalTrades":"交易次數","dashboard.indicator.totalReturn":"總收益率","dashboard.indicator.annualReturn":"年化收益率","dashboard.indicator.maxDrawdown":"最大回撤","dashboard.indicator.sharpeRatio":"夏普比率","dashboard.indicator.winRate":"勝率","dashboard.indicator.profitFactor":"盈虧比","dashboard.indicator.totalTrades":"總交易次數","dashboard.indicator.backtest.totalCommission":"總手續費","dashboard.indicator.backtest.equityCurve":"收益曲線","dashboard.indicator.backtest.strategy":"指標收益","dashboard.indicator.backtest.benchmark":"基準收益","dashboard.indicator.backtest.tradeHistory":"交易記錄","dashboard.indicator.backtest.tradeTime":"時間","dashboard.indicator.backtest.tradeType":"類型","dashboard.indicator.backtest.buy":"買入","dashboard.indicator.backtest.sell":"賣出","dashboard.indicator.backtest.liquidation":"爆倉","dashboard.indicator.backtest.openLong":"開多","dashboard.indicator.backtest.closeLong":"平多","dashboard.indicator.backtest.closeLongStop":"平多(止損)","dashboard.indicator.backtest.closeLongProfit":"平多(止盈)","dashboard.indicator.backtest.addLong":"加多倉","dashboard.indicator.backtest.openShort":"開空","dashboard.indicator.backtest.closeShort":"平空","dashboard.indicator.backtest.closeShortStop":"平空(止損)","dashboard.indicator.backtest.closeShortProfit":"平空(止盈)","dashboard.indicator.backtest.addShort":"加空倉","dashboard.indicator.backtest.price":"價格","dashboard.indicator.backtest.amount":"數量","dashboard.indicator.backtest.balance":"賬戶餘額","dashboard.indicator.backtest.profit":"盈虧","dashboard.indicator.backtest.success":"回測完成","dashboard.indicator.backtest.failed":"回測失敗,請稍後重試","dashboard.indicator.backtest.quickSelect":"快速選擇","dashboard.indicator.backtest.precisionMode":"回測精度模式","dashboard.indicator.backtest.estimatedCandles":"預計處理約 {count} 根K線","dashboard.indicator.backtest.highPrecisionDesc":"使用1分鐘級別K線進行高精度回測,止損止盈觸發更精確","dashboard.indicator.backtest.mediumPrecisionDesc":"回測區間超過30天,使用5分鐘級別K線以平衡精度與性能","dashboard.indicator.backtest.standardModeWarning":"使用標準回測模式","dashboard.indicator.backtest.standardModeDesc":"當前配置不支持高精度回測,將使用策略K線進行回測","dashboard.indicator.backtest.onlyCryptoSupported":"高精度回測僅支持加密貨幣市場","dashboard.indicator.backtest.noIndicatorCode":"該指標沒有可回測的代碼","dashboard.indicator.backtest.noSymbol":"請先選擇交易標的","dashboard.indicator.backtest.dateRangeExceeded":"回測時間範圍超出限制:{timeframe}周期最多可回測{maxRange}","dashboard.indicator.backtest.dateRangeExceededDays":"回測時間範圍超出限制:{timeframe}周期最多可回測{maxRange}({maxDays}天)","dashboard.indicator.backtest.metaLine":"標的:{symbol} | 市場:{market} | 週期:{timeframe}","dashboard.indicator.backtest.savedRunId":"回測已保存,記錄ID:{id}","dashboard.indicator.backtest.historyTitle":"回測記錄","dashboard.indicator.backtest.historyRefresh":"重新整理","dashboard.indicator.backtest.historyView":"查看","dashboard.indicator.backtest.historyNoData":"暫無回測記錄","dashboard.indicator.backtest.historyUseCurrent":"僅目前幣種/週期","dashboard.indicator.backtest.historyFilterSymbol":"幣種(Symbol)","dashboard.indicator.backtest.historyFilterTimeframe":"週期(Timeframe)","dashboard.indicator.backtest.historyApply":"套用篩選","dashboard.indicator.backtest.historyAIAnalyze":"AI分析","dashboard.indicator.backtest.historyAIAnalyzeTitle":"AI 分析建議","dashboard.indicator.backtest.historyNoAIResult":"暫無 AI 分析結果","dashboard.indicator.backtest.historyRunId":"記錄ID","dashboard.indicator.backtest.historyCreatedAt":"時間","dashboard.indicator.backtest.historyRange":"區間","dashboard.indicator.backtest.historyStatus":"狀態","dashboard.indicator.backtest.historyStatusSuccess":"成功","dashboard.indicator.backtest.historyStatusFailed":"失敗","dashboard.indicator.backtest.historyActions":"操作","dashboard.indicator.backtest.prev":"上一步","dashboard.indicator.backtest.next":"下一步","dashboard.indicator.backtest.steps.strategy.title":"執行配置","dashboard.indicator.backtest.steps.strategy.desc":"倉位/風控/加減倉(策略層)","dashboard.indicator.backtest.steps.trading.title":"回測環境","dashboard.indicator.backtest.steps.trading.desc":"時間/資金/費率/槓桿/滑點","dashboard.indicator.backtest.steps.results.title":"結果","dashboard.indicator.backtest.steps.results.desc":"統計與交易明細","dashboard.indicator.backtest.panel.risk":"執行配置:風控(止損/移動止盈)","dashboard.indicator.backtest.panel.scale":"執行配置:加倉(順勢/逆勢)","dashboard.indicator.backtest.panel.reduce":"執行配置:減倉(順勢/逆勢)","dashboard.indicator.backtest.panel.position":"執行配置:開倉倉位","dashboard.indicator.backtest.field.stopLossPct":"止損(%)","dashboard.indicator.backtest.field.takeProfitPct":"止盈(%)","dashboard.indicator.backtest.field.trailingEnabled":"移動止盈","dashboard.indicator.backtest.field.trailingStopPct":"移動回撤(%)","dashboard.indicator.backtest.field.trailingActivationPct":"移動止盈激活(%)","dashboard.indicator.backtest.field.slippage":"滑點(%)","dashboard.indicator.backtest.field.trendAddEnabled":"順勢加倉","dashboard.indicator.backtest.field.dcaAddEnabled":"逆勢加倉","dashboard.indicator.backtest.field.trendAddStepPct":"加倉觸發(%)","dashboard.indicator.backtest.field.dcaAddStepPct":"加倉觸發(%)","dashboard.indicator.backtest.field.trendAddSizePct":"每次加倉資金占比(%)","dashboard.indicator.backtest.field.dcaAddSizePct":"每次加倉資金占比(%)","dashboard.indicator.backtest.field.trendAddMaxTimes":"最多加倉次數","dashboard.indicator.backtest.field.dcaAddMaxTimes":"最多加倉次數","dashboard.indicator.backtest.field.trendReduceEnabled":"順勢減倉","dashboard.indicator.backtest.field.adverseReduceEnabled":"逆勢減倉","dashboard.indicator.backtest.field.trendReduceStepPct":"順勢觸發(%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"逆勢觸發(%)","dashboard.indicator.backtest.field.trendReduceSizePct":"每次減倉比例(%)","dashboard.indicator.backtest.field.adverseReduceSizePct":"每次逆勢減倉比例(%)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"最多順勢減倉次數","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"最多逆勢減倉次數","dashboard.indicator.backtest.field.entryPct":"開倉資金占比(%)","dashboard.indicator.backtest.field.minOrderPct":"單次最小資金占比(%)(可選)","dashboard.indicator.backtest.hint.entryPctMax":"最大可開倉:{maxPct}%(為後續加倉預留資金)","dashboard.indicator.backtest.closeLongTrailing":"平多(移動止損/止盈)","dashboard.indicator.backtest.reduceLong":"多頭減倉","dashboard.indicator.backtest.closeShortTrailing":"平空(移動止損/止盈)","dashboard.indicator.backtest.reduceShort":"空頭減倉","dashboard.docs.title":"文檔中心","dashboard.docs.search.placeholder":"搜索文檔...","dashboard.docs.category.all":"全部","dashboard.docs.category.guide":"開發指南","dashboard.docs.category.api":"API文檔","dashboard.docs.category.tutorial":"教程","dashboard.docs.category.faq":"常見問題","dashboard.docs.featured.title":"推薦文檔","dashboard.docs.featured.tag":"推薦","dashboard.docs.list.views":"瀏覽","dashboard.docs.list.author":"作者","dashboard.docs.list.empty":"暫無文檔","dashboard.docs.list.backToAll":"返回全部文檔","dashboard.docs.list.total":"共 {count} 篇文檔","dashboard.docs.detail.back":"返回文檔列表","dashboard.docs.detail.updatedAt":"更新於","dashboard.docs.detail.related":"相關文檔","dashboard.docs.detail.notFound":"文檔不存在","dashboard.docs.detail.error":"文檔不存在或已被刪除","dashboard.docs.search.result":"搜索結果","dashboard.docs.search.keyword":"關鍵詞","community.filter.indicatorType":"指標類型","community.filter.all":"全部","community.filter.other":"其他選項","community.filter.pricing":"定價類型","community.filter.allPricing":"全部定價","community.filter.sortBy":"排序方式","community.filter.search":"搜索","community.filter.searchPlaceholder":"搜索指標名稱","community.indicatorType.trend":"趨勢型","community.indicatorType.momentum":"動量型","community.indicatorType.volatility":"波動率","community.indicatorType.volume":"成交量","community.indicatorType.custom":"自定義","community.pricing.free":"免費","community.pricing.paid":"付費","community.sort.downloads":"下載量","community.sort.rating":"評分","community.sort.newest":"最新發布","community.pagination.total":"共 {total} 個指標","community.noDescription":"暫無描述","community.detail.type":"類型","community.detail.pricing":"定價","community.detail.rating":"評分","community.detail.downloads":"下載量","community.detail.author":"作者","community.detail.description":"簡介","community.detail.detailContent":"詳細說明","community.detail.backtestStats":"回測統計","community.action.purchase":"購買指標","community.action.addToMyIndicators":"添加到我的指標","community.action.favorite":"收藏","community.action.unfavorite":"取消收藏","community.action.buyNow":"立即購買","community.action.renew":"續費","community.purchase.price":"價格","community.purchase.permanent":"永久","community.purchase.monthly":"月","community.purchase.confirmBuy":"確認購買該指標({price} QDT)?","community.purchase.confirmRenew":"確認續費該指標({price} QDT/月)?","community.purchase.confirmFree":"確認添加該免費指標?","community.purchase.confirmTitle":"確認操作","community.purchase.owned":"您已購買該指標(永久有效)","community.purchase.ownIndicator":"這是您發布的指標","community.purchase.expired":"您的訂閱已過期","community.purchase.expiresOn":"到期時間:{date}","community.tabs.detail":"指標詳情","community.tabs.backtest":"回測數據","community.tabs.ratings":"用戶評價","community.rating.myRating":"我的評分","community.rating.stars":"{count} 星","community.rating.commentPlaceholder":"分享您的使用體驗...","community.rating.submit":"提交評分","community.rating.modify":"修改","community.rating.saveModify":"保存修改","community.rating.cancel":"取消","community.rating.selectRating":"請選擇評分","community.rating.success":"評分成功","community.rating.modifySuccess":"修改評價成功","community.rating.failed":"評分失敗","community.rating.noRatings":"暫無評價","community.backtest.note":"以上數據爲歷史回測結果,僅供參考,不代表未來收益","community.backtest.noData":"暫無回測數據","community.backtest.uploadHint":"作者尚未上傳回測數據","community.message.loadFailed":"加載指標列表失敗","community.message.purchaseProcessing":"正在處理購買請求...","community.message.downloadSuccess":"指標已添加到我的指標列表","community.message.favoriteSuccess":"收藏成功","community.message.unfavoriteSuccess":"取消收藏成功","community.message.operationSuccess":"操作成功","community.message.operationFailed":"操作失敗","community.banner.readOnly":"僅供瀏覽","community.banner.loginHint":"如需登錄註冊請點擊按鈕跳轉到獨立頁面,從而避免CSRF問題","community.banner.jumpButton":"跳轉到登錄/註冊","dashboard.totalEquity":"總權益","dashboard.totalPnL":"總盈虧","dashboard.aiStrategies":"AI 策略","dashboard.indicatorStrategies":"指標策略","dashboard.running":"運行中","dashboard.enabled":"已啟用","dashboard.pnlHistory":"歷史盈虧","dashboard.strategyPerformance":"策略盈虧佔比","dashboard.drawdown":"回撤曲線","dashboard.strategyRanking":"策略排行榜","dashboard.winRate":"勝率","dashboard.profitFactor":"盈虧比","dashboard.maxDrawdown":"最大回撤","dashboard.totalTrades":"總交易","dashboard.runningStrategies":"運行中策略","dashboard.equityCurve":"權益曲線","dashboard.strategyAllocation":"策略分佈","dashboard.drawdownCurve":"回撤曲線","dashboard.hourlyDistribution":"交易時段","dashboard.dailyPnl":"日盈虧","dashboard.cumulativePnl":"累計盈虧","dashboard.tradeCount":"交易次數","dashboard.profit":"盈虧","dashboard.noData":"暫無數據","dashboard.noStrategyData":"暫無策略數據","dashboard.ranking.totalProfit":"總收益","dashboard.ranking.roi":"收益率","dashboard.ranking.trades":"交易數","dashboard.unit.trades":"筆","dashboard.unit.strategies":"個","dashboard.label.avgDaily":"日均","dashboard.label.avgProfit":"平均盈利","dashboard.label.win":"勝","dashboard.label.lose":"負","dashboard.label.trade":"交易","dashboard.label.indicator":"指標","dashboard.label.totalPnl":"總盈虧","dashboard.label.maxDrawdownPoint":"最大回撤","dashboard.profitCalendar":"收益日曆","dashboard.recentTrades":"最近交易","dashboard.currentPositions":"當前持倉","dashboard.table.time":"時間","dashboard.table.strategy":"策略名稱","dashboard.table.symbol":"標的","dashboard.table.type":"類型","dashboard.table.side":"方向","dashboard.table.size":"持倉量","dashboard.table.entryPrice":"開倉均價","dashboard.table.price":"價格","dashboard.table.amount":"數量","dashboard.table.profit":"盈虧","dashboard.pendingOrders":"訂單執行記錄","dashboard.totalOrders":"共 {total} 條","dashboard.viewError":"查看錯誤","dashboard.filled":"已成交","dashboard.orderTable.time":"創建時間","dashboard.orderTable.strategy":"策略","dashboard.orderTable.symbol":"交易對","dashboard.orderTable.signalType":"信號類型","dashboard.orderTable.amount":"數量","dashboard.orderTable.price":"成交價","dashboard.orderTable.status":"狀態","dashboard.orderTable.timeInfo":"時間","dashboard.orderTable.executedAt":"執行時間","dashboard.orderTable.exchange":"交易所","dashboard.orderTable.notify":"通知方式","dashboard.orderTable.actions":"操作","dashboard.orderTable.delete":"刪除","dashboard.orderTable.deleteConfirm":"確認刪除這條記錄?","dashboard.orderTable.deleteSuccess":"刪除成功","dashboard.orderTable.deleteFailed":"刪除失敗","dashboard.newOrderNotify":"新訂單提醒","dashboard.newOrderDesc":"有新的訂單執行記錄","dashboard.soundEnabled":"聲音提醒已開啟","dashboard.soundDisabled":"聲音提醒已關閉","dashboard.clickToMute":"點擊關閉聲音提醒","dashboard.clickToUnmute":"點擊開啟聲音提醒","dashboard.signalType.openLong":"開多","dashboard.signalType.openShort":"開空","dashboard.signalType.closeLong":"平多","dashboard.signalType.closeShort":"平空","dashboard.signalType.addLong":"加多","dashboard.signalType.addShort":"加空","dashboard.status.pending":"待處理","dashboard.status.processing":"處理中","dashboard.status.completed":"已完成","dashboard.status.failed":"失敗","dashboard.status.cancelled":"已取消","dashboard.table.pnl":"未實現盈虧","form.basic-form.basic.title":"基礎表單","form.basic-form.basic.description":"表單頁用於向用戶收集或驗證信息,基礎表單常見於數據項較少的表單場景。","form.basic-form.title.label":"標題","form.basic-form.title.placeholder":"給目標起個名字","form.basic-form.title.required":"請輸入標題","form.basic-form.date.label":"起止日期","form.basic-form.placeholder.start":"開始日期","form.basic-form.placeholder.end":"結束日期","form.basic-form.date.required":"請選擇起止日期","form.basic-form.goal.label":"目標描述","form.basic-form.goal.placeholder":"請輸入你的階段性工作目標","form.basic-form.goal.required":"請輸入目標描述","form.basic-form.standard.label":"衡量標準","form.basic-form.standard.placeholder":"請輸入衡量標準","form.basic-form.standard.required":"請輸入衡量標準","form.basic-form.client.label":"客戶","form.basic-form.client.required":"請描述你服務的客戶","form.basic-form.label.tooltip":"目標的服務對象","form.basic-form.client.placeholder":"請描述你服務的客戶,內部客戶直接 @姓名/工號","form.basic-form.invites.label":"邀評人","form.basic-form.invites.placeholder":"請直接 @姓名/工號,最多可邀請 5 人","form.basic-form.weight.label":"權重","form.basic-form.weight.placeholder":"請輸入","form.basic-form.public.label":"目標公開","form.basic-form.label.help":"客戶、邀評人默認被分享","form.basic-form.radio.public":"公開","form.basic-form.radio.partially-public":"部分公開","form.basic-form.radio.private":"不公開","form.basic-form.publicUsers.placeholder":"公開給","form.basic-form.option.A":"同事一","form.basic-form.option.B":"同事二","form.basic-form.option.C":"同事三","form.basic-form.email.required":"請輸入郵箱地址!","form.basic-form.email.wrong-format":"郵箱地址格式錯誤!","form.basic-form.userName.required":"請輸入用戶名!","form.basic-form.password.required":"請輸入密碼!","form.basic-form.password.twice":"兩次輸入的密碼不匹配!","form.basic-form.strength.msg":"請至少輸入 6 個字符。請不要使用容易被猜到的密碼。","form.basic-form.strength.strong":"強度:強","form.basic-form.strength.medium":"強度:中","form.basic-form.strength.short":"強度:太短","form.basic-form.confirm-password.required":"請確認密碼!","form.basic-form.phone-number.required":"請輸入手機號!","form.basic-form.phone-number.wrong-format":"手機號格式錯誤!","form.basic-form.verification-code.required":"請輸入驗證碼!","form.basic-form.form.get-captcha":"獲取驗證碼","form.basic-form.captcha.second":"秒","form.basic-form.form.optional":"(選填)","form.basic-form.form.submit":"提交","form.basic-form.form.save":"保存","form.basic-form.email.placeholder":"郵箱","form.basic-form.password.placeholder":"至少6位密碼,區分大小寫","form.basic-form.confirm-password.placeholder":"確認密碼","form.basic-form.phone-number.placeholder":"手機號","form.basic-form.verification-code.placeholder":"驗證碼","result.success.title":"提交成功","result.success.description":"提交結果頁用於反饋一系列操作任務的處理結果, 如果僅是簡單操作,使用 Message 全局提示反饋即可。 本文字區域可以展示簡單的補充說明,如果有類似展示 “單據”的需求,下面這個灰色區域可以呈現比較復雜的內容。","result.success.operate-title":"項目名稱","result.success.operate-id":"項目 ID","result.success.principal":"負責人","result.success.operate-time":"生效時間","result.success.step1-title":"創建項目","result.success.step1-operator":"曲麗麗","result.success.step2-title":"部門初審","result.success.step2-operator":"周毛毛","result.success.step2-extra":"催一下","result.success.step3-title":"財務復核","result.success.step4-title":"完成","result.success.btn-return":"返回列表","result.success.btn-project":"查看項目","result.success.btn-print":"打印","result.fail.error.title":"提交失敗","result.fail.error.description":"請核對並修改以下信息後,再重新提交。","result.fail.error.hint-title":"您提交的內容有如下錯誤:","result.fail.error.hint-text1":"您的賬戶已被凍結","result.fail.error.hint-btn1":"立即解凍","result.fail.error.hint-text2":"您的賬戶還不具備申請資格","result.fail.error.hint-btn2":"立即升級","result.fail.error.btn-text":"返回修改","account.settings.menuMap.custom":"個性化","account.settings.menuMap.binding":"賬號綁定","account.settings.basic.avatar":"頭像","account.settings.basic.change-avatar":"更換頭像","account.settings.basic.email":"郵箱","account.settings.basic.email-message":"請輸入您的郵箱!","account.settings.basic.nickname":"暱稱","account.settings.basic.nickname-message":"請輸入您的暱稱!","account.settings.basic.profile":"個人簡介","account.settings.basic.profile-message":"請輸入個人簡介!","account.settings.basic.profile-placeholder":"個人簡介","account.settings.basic.country":"國家/地區","account.settings.basic.country-message":"請輸入您的國家或地區!","account.settings.basic.geographic":"所在省市","account.settings.basic.geographic-message":"請輸入您的所在省市!","account.settings.basic.address":"街道地址","account.settings.basic.address-message":"請輸入您的街道地址!","account.settings.basic.phone":"聯系電話","account.settings.basic.phone-message":"請輸入您的聯系電話!","account.settings.basic.update":"更新基本信息","account.settings.basic.update.success":"更新基本信息成功","account.settings.security.strong":"強","account.settings.security.medium":"中","account.settings.security.weak":"弱","account.settings.security.password":"賬戶密碼","account.settings.security.password-description":"當前密碼強度:","account.settings.security.phone":"密保手機","account.settings.security.phone-description":"已綁定手機:","account.settings.security.question":"密保問題","account.settings.security.question-description":"未設置密保問題,密保問題可有效保護賬戶安全","account.settings.security.email":"綁定郵箱","account.settings.security.email-description":"已綁定郵箱:","account.settings.security.mfa":"MFA 設備","account.settings.security.mfa-description":"未綁定 MFA 設備,綁定後,可以進行二次確認","account.settings.security.modify":"修改","account.settings.security.set":"設置","account.settings.security.bind":"綁定","account.settings.binding.taobao":"綁定淘寶","account.settings.binding.taobao-description":"當前未綁定淘寶賬號","account.settings.binding.alipay":"綁定支付寶","account.settings.binding.alipay-description":"當前未綁定支付寶賬號","account.settings.binding.dingding":"綁定釘釘","account.settings.binding.dingding-description":"當前未綁定釘釘賬號","account.settings.binding.bind":"綁定","account.settings.notification.password":"賬戶密碼","account.settings.notification.password-description":"其他用戶的消息將以站內信的形式通知","account.settings.notification.messages":"系統消息","account.settings.notification.messages-description":"系統消息將以站內信的形式通知","account.settings.notification.todo":"待辦任務","account.settings.notification.todo-description":"待辦任務將以站內信的形式通知","account.settings.settings.open":"開","account.settings.settings.close":"關","trading-assistant.title":"交易助手","trading-assistant.strategyList":"策略列表","trading-assistant.createStrategy":"創建策略","trading-assistant.noStrategy":"暫無策略","trading-assistant.selectStrategy":"請從左側選擇一個策略查看詳情","trading-assistant.startStrategy":"啓動策略","trading-assistant.stopStrategy":"停止策略","trading-assistant.editStrategy":"編輯策略","trading-assistant.deleteStrategy":"刪除策略","trading-assistant.startAll":"全部啟動","trading-assistant.stopAll":"全部停止","trading-assistant.deleteAll":"全部刪除","trading-assistant.symbolCount":"個幣種","trading-assistant.status.running":"運行中","trading-assistant.status.stopped":"已停止","trading-assistant.status.error":"錯誤","trading-assistant.strategyType.IndicatorStrategy":"技術指標策略","trading-assistant.strategyType.PromptBasedStrategy":"提示詞策略","trading-assistant.strategyType.GridStrategy":"網格策略","trading-assistant.tabs.tradingRecords":"交易記錄","trading-assistant.tabs.positions":"持倉記錄","trading-assistant.tabs.equityCurve":"淨值曲線","trading-assistant.form.step1":"選擇指標","trading-assistant.form.step2":"交易所配置","trading-assistant.form.step3":"策略參數","trading-assistant.form.step2Params":"策略參數","trading-assistant.form.step3Signal":"信號通知","trading-assistant.form.indicator":"選擇指標","trading-assistant.form.indicatorHint":"只能選擇您已購買或創建的技術指標","trading-assistant.form.qdtCostHints":"使用策略將消耗QDT,請確保賬戶有足夠的QDT餘額","trading-assistant.form.indicatorDescription":"指標描述","trading-assistant.form.noDescription":"暫無描述","trading-assistant.form.exchange":"選擇交易所","trading-assistant.form.apiKey":"API Key","trading-assistant.form.secretKey":"Secret Key","trading-assistant.form.passphrase":"Passphrase","trading-assistant.form.testConnection":"測試連接","trading-assistant.form.strategyName":"策略名稱","trading-assistant.form.symbol":"交易對","trading-assistant.form.symbols":"交易對(多選)","trading-assistant.form.symbolHint":"目前僅支持加密貨幣交易對","trading-assistant.form.symbolHintCrypto":"加密貨幣:使用BTC/USDT等交易對格式","trading-assistant.form.symbolsHint":"選擇多個交易對,將自動創建多個策略","trading-assistant.form.initialCapital":"投入金額","trading-assistant.form.marketType":"市場類型","trading-assistant.form.marketTypeFutures":"合約","trading-assistant.form.marketTypeSpot":"現貨","trading-assistant.form.marketTypeHint":"合約支持雙向交易和槓杆,現貨僅支持做多且槓杆固定爲1倍","trading-assistant.form.leverage":"槓杆倍數","trading-assistant.form.leverageHint":"合約:1-125倍,現貨:固定1倍","trading-assistant.form.spotLeverageFixed":"現貨交易槓杆固定爲1倍","trading-assistant.form.spotOnlyLongHint":"現貨交易僅支持做多","trading-assistant.form.tradeDirection":"交易方向","trading-assistant.form.tradeDirectionLong":"僅做多","trading-assistant.form.tradeDirectionShort":"僅做空","trading-assistant.form.tradeDirectionBoth":"雙向交易","trading-assistant.form.timeframe":"時間周期","trading-assistant.form.klinePeriod":"K線周期","trading-assistant.form.timeframe1m":"1分鍾","trading-assistant.form.timeframe5m":"5分鍾","trading-assistant.form.timeframe15m":"15分鍾","trading-assistant.form.timeframe30m":"30分鍾","trading-assistant.form.timeframe1H":"1小時","trading-assistant.form.timeframe4H":"4小時","trading-assistant.form.timeframe1D":"1天","trading-assistant.form.selectStrategyType":"選擇策略類型","trading-assistant.form.indicatorStrategy":"指標策略","trading-assistant.form.indicatorStrategyDesc":"基於技術指標的自動化交易策略","trading-assistant.form.aiStrategy":"AI策略","trading-assistant.form.aiStrategyDesc":"基於AI智能決策的自動化交易策略","trading-assistant.form.enableAiFilter":"啟用AI智能決策過濾","trading-assistant.form.enableAiFilterHint":"啟用後,指標信號將經過AI智能過濾,提高交易質量","trading-assistant.form.aiFilterPrompt":"自定義提示詞","trading-assistant.form.aiFilterPromptHint":"為AI過濾提供自定義指令,留空則使用系統默認","trading-assistant.form.executionMode":"執行模式","trading-assistant.form.executionModeSignal":"僅信號通知","trading-assistant.form.executionModeLive":"實盤自動交易","trading-assistant.form.liveTradingCryptoOnlyHint":"實盤交易功能僅支持加密貨幣市場","trading-assistant.form.notifyChannels":"通知渠道","trading-assistant.form.notifyChannelsHint":"選擇信號觸發時的通知方式","trading-assistant.form.notifyEmail":"郵箱地址","trading-assistant.form.notifyPhone":"手機號碼","trading-assistant.form.notifyTelegram":"Telegram ID","trading-assistant.form.notifyDiscord":"Discord Webhook","trading-assistant.form.notifyWebhook":"Webhook 地址","trading-assistant.form.liveTradingConfigTitle":"實盤交易配置","trading-assistant.form.liveTradingConfigHint":"請填寫交易所API資訊,實盤交易將使用您的API進行真實交易","trading-assistant.form.savedCredential":"已儲存的憑證","trading-assistant.form.savedCredentialHint":"選擇已儲存的交易所憑證,自動填充API配置","trading-assistant.form.saveCredential":"儲存此憑證以便下次使用","trading-assistant.form.credentialName":"憑證名稱","trading-assistant.validation.strategyTypeRequired":"請選擇策略類型","trading-assistant.form.advancedSettings":"高級設置","trading-assistant.form.orderMode":"下單模式","trading-assistant.form.orderModeMaker":"掛單(Maker)","trading-assistant.form.orderModeTaker":"市價(Taker)","trading-assistant.form.orderModeHint":"掛單模式使用限價單,手續費更低;市價模式立即成交,手續費較高","trading-assistant.form.makerWaitSec":"掛單等待時間(秒)","trading-assistant.form.makerWaitSecHint":"掛單後等待成交的時間,超時後取消並重試","trading-assistant.form.makerRetries":"掛單重試次數","trading-assistant.form.makerRetriesHint":"掛單未成交時的最大重試次數","trading-assistant.form.fallbackToMarket":"掛單失敗降級市價","trading-assistant.form.fallbackToMarketHint":"開/平倉掛單未成交時,是否降級爲市價單以確保成交","trading-assistant.form.marginMode":"保證金模式","trading-assistant.form.marginModeCross":"全倉","trading-assistant.form.marginModeIsolated":"逐倉","trading-assistant.form.stopLossPct":"止損比例(%)","trading-assistant.form.stopLossPctHint":"設置止損百分比,0表示不啓用止損","trading-assistant.form.takeProfitPct":"止盈比例(%)","trading-assistant.form.takeProfitPctHint":"設置止盈百分比,0表示不啓用止盈","trading-assistant.form.signalMode":"信號模式","trading-assistant.form.signalModeConfirmed":"確認模式","trading-assistant.form.signalModeAggressive":"激進模式","trading-assistant.form.signalModeHint":"確認模式:僅檢查已完成的K線;激進模式:也檢查正在形成的K線","trading-assistant.form.cancel":"取消","trading-assistant.form.prev":"上一步","trading-assistant.form.next":"下一步","trading-assistant.form.confirmCreate":"確認創建","trading-assistant.form.confirmEdit":"確認修改","trading-assistant.messages.createSuccess":"策略創建成功","trading-assistant.messages.createFailed":"創建策略失敗","trading-assistant.messages.updateSuccess":"策略更新成功","trading-assistant.messages.updateFailed":"更新策略失敗","trading-assistant.messages.deleteSuccess":"策略刪除成功","trading-assistant.messages.deleteFailed":"刪除策略失敗","trading-assistant.messages.startSuccess":"策略啓動成功","trading-assistant.messages.startFailed":"啓動策略失敗","trading-assistant.messages.stopSuccess":"策略停止成功","trading-assistant.messages.stopFailed":"停止策略失敗","trading-assistant.messages.loadFailed":"獲取策略列表失敗","trading-assistant.messages.runningWarning":"策略運行中,請先停止策略後再修改","trading-assistant.messages.deleteConfirmWithName":"確定要刪除策略“{name}”嗎?此操作不可恢復。","trading-assistant.messages.deleteConfirm":"確定要刪除該策略嗎?此操作不可恢復。","trading-assistant.messages.loadTradesFailed":"獲取交易記錄失敗","trading-assistant.messages.loadPositionsFailed":"獲取持倉記錄失敗","trading-assistant.messages.loadEquityFailed":"獲取淨值曲線失敗","trading-assistant.messages.loadIndicatorsFailed":"加載指標列表失敗,請稍後重試","trading-assistant.messages.spotLimitations":"現貨交易已自動設置爲僅做多、1倍槓杆","trading-assistant.messages.autoFillApiConfig":"已自動填充該交易所的歷史API配置","trading-assistant.messages.batchCreateSuccess":"成功創建 {count} 個策略","trading-assistant.messages.batchStartSuccess":"成功啟動 {count} 個策略","trading-assistant.messages.batchStartFailed":"批量啟動策略失敗","trading-assistant.messages.batchStopSuccess":"成功停止 {count} 個策略","trading-assistant.messages.batchStopFailed":"批量停止策略失敗","trading-assistant.messages.batchDeleteSuccess":"成功刪除 {count} 個策略","trading-assistant.messages.batchDeleteFailed":"批量刪除策略失敗","trading-assistant.messages.batchDeleteConfirm":'確定要刪除策略組"{name}"下的 {count} 個策略嗎?此操作不可恢復。',"trading-assistant.notify.browser":"瀏覽器通知","trading-assistant.notify.email":"郵箱","trading-assistant.notify.phone":"簡訊","trading-assistant.notify.telegram":"Telegram","trading-assistant.notify.discord":"Discord","trading-assistant.notify.webhook":"Webhook","trading-assistant.placeholders.selectIndicator":"請選擇指標","trading-assistant.placeholders.selectExchange":"請選擇交易所","trading-assistant.placeholders.inputApiKey":"請輸入API Key","trading-assistant.placeholders.inputSecretKey":"請輸入Secret Key","trading-assistant.placeholders.inputPassphrase":"請輸入Passphrase","trading-assistant.placeholders.inputStrategyName":"請輸入策略名稱","trading-assistant.placeholders.selectSymbol":"請選擇交易對","trading-assistant.placeholders.selectSymbols":"請選擇交易對(支持多選)","trading-assistant.placeholders.selectTimeframe":"請選擇時間周期","trading-assistant.placeholders.selectKlinePeriod":"請選擇K線周期","trading-assistant.placeholders.inputAiFilterPrompt":"請輸入自定義提示詞(可選)","trading-assistant.placeholders.selectSavedCredential":"請選擇已儲存的憑證","trading-assistant.placeholders.inputEmail":"請輸入郵箱地址","trading-assistant.placeholders.inputPhone":"請輸入手機號碼","trading-assistant.placeholders.inputTelegram":"請輸入Telegram ID或Chat ID","trading-assistant.placeholders.inputDiscord":"請輸入Discord Webhook地址","trading-assistant.placeholders.inputWebhook":"請輸入Webhook地址","trading-assistant.placeholders.inputCredentialName":"請輸入憑證名稱(如:我的OKX帳戶)","trading-assistant.validation.indicatorRequired":"請選擇指標","trading-assistant.validation.exchangeRequired":"請選擇交易所","trading-assistant.validation.apiKeyRequired":"請輸入API Key","trading-assistant.validation.secretKeyRequired":"請輸入Secret Key","trading-assistant.validation.passphraseRequired":"請輸入Passphrase","trading-assistant.validation.exchangeConfigIncomplete":"請填寫完整的交易所配置信息","trading-assistant.validation.testConnectionRequired":'請先點擊"測試連接"按鈕並確保連接成功',"trading-assistant.validation.testConnectionFailed":"連接測試失敗,請檢查配置後重新測試","trading-assistant.validation.credentialRequired":"請先在個人中心添加並測試交易所憑證","trading-assistant.validation.strategyNameRequired":"請輸入策略名稱","trading-assistant.validation.symbolRequired":"請選擇交易對","trading-assistant.validation.symbolsRequired":"請至少選擇一個交易對","trading-assistant.validation.emailInvalid":"請輸入有效的郵箱地址","trading-assistant.validation.notifyChannelRequired":"請至少選擇一個通知渠道","trading-assistant.validation.initialCapitalRequired":"請輸入投入金額","trading-assistant.validation.leverageRequired":"請輸入槓杆倍數","trading-assistant.table.time":"時間","trading-assistant.table.type":"類型","trading-assistant.table.price":"價格","trading-assistant.table.amount":"數量","trading-assistant.table.value":"金額","trading-assistant.table.commission":"手續費","trading-assistant.table.symbol":"交易對","trading-assistant.table.side":"方向","trading-assistant.table.size":"持倉數量","trading-assistant.table.entryPrice":"開倉價格","trading-assistant.table.currentPrice":"當前價格","trading-assistant.table.unrealizedPnl":"未實現盈虧","trading-assistant.table.pnlPercent":"盈虧比例","trading-assistant.table.buy":"買入","trading-assistant.table.sell":"賣出","trading-assistant.table.long":"做多","trading-assistant.table.short":"做空","trading-assistant.table.noPositions":"暫無持倉","trading-assistant.detail.title":"策略詳情","trading-assistant.detail.strategyName":"策略名稱","trading-assistant.detail.strategyType":"策略類型","trading-assistant.detail.status":"狀態","trading-assistant.detail.tradingMode":"交易模式","trading-assistant.detail.exchange":"交易所","trading-assistant.detail.initialCapital":"初始資金","trading-assistant.detail.totalInvestment":"總投入金額","trading-assistant.detail.currentEquity":"當前淨值","trading-assistant.detail.totalPnl":"總盈虧","trading-assistant.detail.indicatorName":"指標名稱","trading-assistant.detail.maxLeverage":"最大槓杆","trading-assistant.detail.decideInterval":"決策間隔","trading-assistant.detail.symbols":"交易標的","trading-assistant.detail.createdAt":"創建時間","trading-assistant.detail.updatedAt":"更新時間","trading-assistant.detail.llmConfig":"AI模型配置","trading-assistant.detail.exchangeConfig":"交易所配置","trading-assistant.detail.provider":"提供商","trading-assistant.detail.modelId":"模型ID","trading-assistant.detail.close":"關閉","trading-assistant.detail.loadFailed":"獲取策略詳情失敗","trading-assistant.equity.noData":"暫無淨值數據","trading-assistant.equity.equity":"淨值","trading-assistant.exchange.tradingMode":"交易模式","trading-assistant.exchange.virtual":"模擬交易","trading-assistant.exchange.live":"實盤交易","trading-assistant.exchange.selectExchange":"選擇交易所","trading-assistant.exchange.walletAddress":"錢包地址","trading-assistant.exchange.walletAddressPlaceholder":"請輸入錢包地址(以0x開頭)","trading-assistant.exchange.privateKey":"私鑰","trading-assistant.exchange.privateKeyPlaceholder":"請輸入私鑰(64字符)","trading-assistant.exchange.testConnection":"測試連接","trading-assistant.exchange.connectionSuccess":"連接成功","trading-assistant.exchange.connectionFailed":"連接失敗","trading-assistant.exchange.testFailed":"連接測試失敗","trading-assistant.exchange.fillComplete":"請填寫完整的交易所配置信息","trading-assistant.strategyTypeOptions.ai":"AI驅動策略","trading-assistant.strategyTypeOptions.indicator":"技術指標策略","trading-assistant.strategyTypeOptions.aiDeveloping":"AI驅動策略功能開發中,敬請期待","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"AI驅動策略功能正在開發中","trading-assistant.indicatorType.trend":"趨勢","trading-assistant.indicatorType.momentum":"動量","trading-assistant.indicatorType.volatility":"波動","trading-assistant.indicatorType.volume":"成交量","trading-assistant.indicatorType.custom":"自定義","trading-assistant.exchangeNames":{okx:"OKX",binance:"幣安",hyperliquid:"Hyperliquid",blockchaincom:"Blockchain.com",coinbaseexchange:"Coinbase",gate:"Gate.io",mexc:"MEXC",kraken:"Kraken",bitfinex:"Bitfinex",bybit:"Bybit",kucoin:"KuCoin",huobi:"火幣",bitget:"Bitget",bitmex:"BitMEX",deribit:"Deribit",phemex:"Phemex",bitmart:"BitMart",bitstamp:"Bitstamp",bittrex:"Bittrex",poloniex:"Poloniex",gemini:"Gemini",cryptocom:"Crypto.com",bitflyer:"bitFlyer",upbit:"Upbit",bithumb:"Bithumb",coinone:"Coinone",zb:"ZB",lbank:"LBank",bibox:"Bibox",bigone:"BigONE",bitrue:"Bitrue",coinex:"CoinEx",digifinex:"DigiFinex",ftx:"FTX",ftxus:"FTX US",binanceus:"Binance US",binancecoinm:"Binance COIN-M",binanceusdm:"Binance USDⓈ-M",deepcoin:"Deepcoin"},"ai-trading-assistant.title":"AI交易助手","ai-trading-assistant.strategyList":"策略列表","ai-trading-assistant.createStrategy":"創建策略","ai-trading-assistant.noStrategy":"暫無策略","ai-trading-assistant.selectStrategy":"請從左側選擇一個策略查看詳情","ai-trading-assistant.startStrategy":"啓動策略","ai-trading-assistant.stopStrategy":"停止策略","ai-trading-assistant.editStrategy":"編輯策略","ai-trading-assistant.deleteStrategy":"刪除策略","ai-trading-assistant.status.running":"運行中","ai-trading-assistant.status.stopped":"已停止","ai-trading-assistant.status.error":"錯誤","ai-trading-assistant.tabs.tradingRecords":"交易記錄","ai-trading-assistant.tabs.positions":"持倉記錄","ai-trading-assistant.tabs.aiDecisions":"AI決策記錄","ai-trading-assistant.tabs.equityCurve":"淨值曲線","ai-trading-assistant.form.createTitle":"創建AI交易策略","ai-trading-assistant.form.editTitle":"編輯AI交易策略","ai-trading-assistant.form.strategyName":"策略名稱","ai-trading-assistant.form.modelId":"AI模型","ai-trading-assistant.form.modelIdHint":"使用系統OpenRouter服務,無需配置API Key","ai-trading-assistant.form.decideInterval":"決策間隔","ai-trading-assistant.form.decideInterval5m":"5分鍾","ai-trading-assistant.form.decideInterval10m":"10分鍾","ai-trading-assistant.form.decideInterval30m":"30分鍾","ai-trading-assistant.form.decideInterval1h":"1小時","ai-trading-assistant.form.decideInterval4h":"4小時","ai-trading-assistant.form.decideInterval1d":"1天","ai-trading-assistant.form.decideInterval1w":"1周","ai-trading-assistant.form.decideIntervalHint":"AI做決策的時間間隔","ai-trading-assistant.form.runPeriod":"運行周期","ai-trading-assistant.form.runPeriodHint":"策略運行的開始時間和結束時間","ai-trading-assistant.form.startDate":"開始日期","ai-trading-assistant.form.endDate":"結束日期","ai-trading-assistant.form.qdtCostTitle":"QDT扣費說明","ai-trading-assistant.form.qdtCostHint":"每次AI決策將扣費 {cost} 個QDT,請確保賬戶有足夠的QDT餘額。策略運行期間,每次決策都會實時扣費。","ai-trading-assistant.form.apiKey":"API Key","ai-trading-assistant.form.exchange":"選擇交易所","ai-trading-assistant.form.secretKey":"Secret Key","ai-trading-assistant.form.passphrase":"Passphrase","ai-trading-assistant.form.testConnection":"測試連接","ai-trading-assistant.form.symbol":"交易對","ai-trading-assistant.form.symbolHint":"選擇要交易的交易對","ai-trading-assistant.form.initialCapital":"投入金額(保證金)","ai-trading-assistant.form.leverage":"槓杆倍數","ai-trading-assistant.form.timeframe":"時間周期","ai-trading-assistant.form.timeframe1m":"1分鍾","ai-trading-assistant.form.timeframe5m":"5分鍾","ai-trading-assistant.form.timeframe15m":"15分鍾","ai-trading-assistant.form.timeframe30m":"30分鍾","ai-trading-assistant.form.timeframe1H":"1小時","ai-trading-assistant.form.timeframe4H":"4小時","ai-trading-assistant.form.timeframe1D":"1天","ai-trading-assistant.form.marketType":"市場類型","ai-trading-assistant.form.marketTypeFutures":"合約","ai-trading-assistant.form.marketTypeSpot":"現貨","ai-trading-assistant.form.totalPnl":"總盈虧","ai-trading-assistant.form.customPrompt":"自定義提示詞","ai-trading-assistant.form.customPromptHint":"可選,用於自定義AI的交易策略和決策邏輯","ai-trading-assistant.form.cancel":"取消","ai-trading-assistant.form.prev":"上一步","ai-trading-assistant.form.next":"下一步","ai-trading-assistant.form.confirmCreate":"確認創建","ai-trading-assistant.form.confirmEdit":"確認修改","ai-trading-assistant.messages.createSuccess":"策略創建成功","ai-trading-assistant.messages.createFailed":"創建策略失敗","ai-trading-assistant.messages.updateSuccess":"策略更新成功","ai-trading-assistant.messages.updateFailed":"更新策略失敗","ai-trading-assistant.messages.deleteSuccess":"策略刪除成功","ai-trading-assistant.messages.deleteFailed":"刪除策略失敗","ai-trading-assistant.messages.startSuccess":"策略啓動成功","ai-trading-assistant.messages.startFailed":"啓動策略失敗","ai-trading-assistant.messages.stopSuccess":"策略停止成功","ai-trading-assistant.messages.stopFailed":"停止策略失敗","ai-trading-assistant.messages.loadFailed":"獲取策略列表失敗","ai-trading-assistant.messages.loadDecisionsFailed":"獲取AI決策記錄失敗","ai-trading-assistant.messages.deleteConfirm":"確定要刪除該策略嗎?此操作不可恢復。","ai-trading-assistant.placeholders.inputStrategyName":"請輸入策略名稱","ai-trading-assistant.placeholders.selectModelId":"請選擇AI模型","ai-trading-assistant.placeholders.selectDecideInterval":"請選擇決策間隔","ai-trading-assistant.placeholders.startTime":"開始時間","ai-trading-assistant.placeholders.endTime":"結束時間","ai-trading-assistant.placeholders.inputApiKey":"請輸入API Key","ai-trading-assistant.placeholders.selectExchange":"請選擇交易所","ai-trading-assistant.placeholders.inputSecretKey":"請輸入Secret Key","ai-trading-assistant.placeholders.inputPassphrase":"請輸入Passphrase","ai-trading-assistant.placeholders.selectSymbol":"請選擇交易對,如:BTC/USDT","ai-trading-assistant.placeholders.selectTimeframe":"請選擇時間周期","ai-trading-assistant.placeholders.inputCustomPrompt":"請輸入自定義提示詞(可選)","ai-trading-assistant.validation.strategyNameRequired":"請輸入策略名稱","ai-trading-assistant.validation.modelIdRequired":"請選擇AI模型","ai-trading-assistant.validation.runPeriodRequired":"請選擇運行周期","ai-trading-assistant.validation.apiKeyRequired":"請輸入API Key","ai-trading-assistant.validation.exchangeRequired":"請選擇交易所","ai-trading-assistant.validation.secretKeyRequired":"請輸入Secret Key","ai-trading-assistant.validation.symbolRequired":"請選擇交易對","ai-trading-assistant.validation.initialCapitalRequired":"請輸入投入金額","ai-trading-assistant.table.time":"時間","ai-trading-assistant.table.type":"類型","ai-trading-assistant.table.price":"價格","ai-trading-assistant.table.amount":"數量","ai-trading-assistant.table.value":"金額","ai-trading-assistant.table.symbol":"交易對","ai-trading-assistant.table.side":"方向","ai-trading-assistant.table.size":"持倉數量","ai-trading-assistant.table.entryPrice":"開倉價格","ai-trading-assistant.table.currentPrice":"當前價格","ai-trading-assistant.table.unrealizedPnl":"未實現盈虧","ai-trading-assistant.table.profit":"盈虧","ai-trading-assistant.table.openLong":"開多","ai-trading-assistant.table.closeLong":"平多","ai-trading-assistant.table.openShort":"開空","ai-trading-assistant.table.closeShort":"平空","ai-trading-assistant.table.addLong":"加多","ai-trading-assistant.table.addShort":"加空","ai-trading-assistant.table.closeShortProfit":"平空止盈","ai-trading-assistant.table.closeShortStop":"平空止損","ai-trading-assistant.table.closeLongProfit":"平多止盈","ai-trading-assistant.table.closeLongStop":"平多止損","ai-trading-assistant.table.buy":"買入","ai-trading-assistant.table.sell":"賣出","ai-trading-assistant.table.long":"做多","ai-trading-assistant.table.short":"做空","ai-trading-assistant.table.hold":"持有","ai-trading-assistant.table.reasoning":"分析理由","ai-trading-assistant.table.decisions":"決策","ai-trading-assistant.table.riskAssessment":"風險評估","ai-trading-assistant.table.confidence":"置信度","ai-trading-assistant.table.totalRecords":"共 {total} 條記錄","ai-trading-assistant.table.noPositions":"暫無持倉","ai-trading-assistant.detail.title":"策略詳情","ai-trading-assistant.equity.noData":"暫無淨值數據","ai-trading-assistant.equity.equity":"淨值","ai-trading-assistant.exchange.testFailed":"連接測試失敗","ai-trading-assistant.exchange.connectionSuccess":"連接成功","ai-trading-assistant.exchange.connectionFailed":"連接失敗","ai-trading-assistant.form.advancedSettings":"高級設置","ai-trading-assistant.form.orderMode":"下單模式","ai-trading-assistant.form.orderModeMaker":"掛單(Maker)","ai-trading-assistant.form.orderModeTaker":"市價(Taker)","ai-trading-assistant.form.orderModeHint":"掛單模式使用限價單,手續費更低;市價模式立即成交,手續費較高","ai-trading-assistant.form.makerWaitSec":"掛單等待時間(秒)","ai-trading-assistant.form.makerWaitSecHint":"掛單後等待成交的時間,超時後取消並重試","ai-trading-assistant.form.makerRetries":"掛單重試次數","ai-trading-assistant.form.makerRetriesHint":"掛單未成交時的最大重試次數","ai-trading-assistant.form.fallbackToMarket":"掛單失敗降級市價","ai-trading-assistant.form.fallbackToMarketHint":"開/平倉掛單未成交時,是否降級爲市價單以確保成交","ai-trading-assistant.form.marginMode":"保證金模式","ai-trading-assistant.form.marginModeCross":"全倉","ai-trading-assistant.form.marginModeIsolated":"逐倉","ai-analysis.title":"量子交易引擎","ai-analysis.system.online":"在線","ai-analysis.system.agents":"智能體","ai-analysis.system.active":"活躍","ai-analysis.system.stage":"階段","ai-analysis.panel.roster":"智能體陣容","ai-analysis.panel.thinking":"思考中...","ai-analysis.panel.done":"完成","ai-analysis.panel.standby":"待機","ai-analysis.input.title":"量子交易引擎","ai-analysis.input.placeholder":"選擇目標資產 (如 BTC/USDT)","ai-analysis.input.watchlist":"自選股","ai-analysis.input.start":"開始分析","ai-analysis.input.recent":"最近任務:","ai-analysis.vis.stage":"階段","ai-analysis.vis.processing":"處理中","ai-analysis.result.complete":"分析完成","ai-analysis.result.signal":"最終信號","ai-analysis.result.confidence":"置信度:","ai-analysis.result.new":"新分析","ai-analysis.result.full":"查看完整報告","ai-analysis.logs.title":"系統日志","ai-analysis.modal.title":"機密報告","ai-analysis.modal.fundamental":"基本面分析","ai-analysis.modal.technical":"技術面分析","ai-analysis.modal.sentiment":"情緒面分析","ai-analysis.modal.risk":"風險評估","ai-analysis.stage.idle":"待機","ai-analysis.stage.1":"第一階段:多維分析","ai-analysis.stage.2":"第二階段:多空辯論","ai-analysis.stage.3":"第三階段:戰略規劃","ai-analysis.stage.4":"第四階段:風控審查","ai-analysis.stage.complete":"完成","ai-analysis.agent.investment_director":"投資總監","ai-analysis.agent.role.investment_director":"綜合分析 & 最終結論","ai-analysis.agent.market":"市場分析師","ai-analysis.agent.role.market":"技術 & 市場數據","ai-analysis.agent.fundamental":"基本面分析師","ai-analysis.agent.role.fundamental":"財務 & 估值","ai-analysis.agent.technical":"技術分析師","ai-analysis.agent.role.technical":"技術指標 & 圖表","ai-analysis.agent.news":"新聞分析師","ai-analysis.agent.role.news":"全球新聞過濾","ai-analysis.agent.sentiment":"情緒分析師","ai-analysis.agent.role.sentiment":"社交 & 情緒","ai-analysis.agent.risk":"風險分析師","ai-analysis.agent.role.risk":"基礎風險檢查","ai-analysis.agent.bull":"看漲研究員","ai-analysis.agent.role.bull":"增長催化劑挖掘","ai-analysis.agent.bear":"看跌研究員","ai-analysis.agent.role.bear":"風險 & 缺陷挖掘","ai-analysis.agent.manager":"研究經理","ai-analysis.agent.role.manager":"辯論主持人","ai-analysis.agent.trader":"交易員","ai-analysis.agent.role.trader":"執行策略師","ai-analysis.agent.risky":"激進分析師","ai-analysis.agent.role.risky":"激進策略","ai-analysis.agent.neutral":"平衡分析師","ai-analysis.agent.role.neutral":"平衡策略","ai-analysis.agent.safe":"保守分析師","ai-analysis.agent.role.safe":"保守策略","ai-analysis.agent.cro":"風控經理 (CRO)","ai-analysis.agent.role.cro":"最終決策權威","ai-analysis.script.market":"正在從主要交易所獲取 OHLCV 數據...","ai-analysis.script.fundamental":"正在檢索季度財務報告...","ai-analysis.script.technical":"正在分析技術指標和圖表形態...","ai-analysis.script.news":"正在掃描全球財經新聞...","ai-analysis.script.sentiment":"正在分析社交媒體趨勢...","ai-analysis.script.risk":"正在計算歷史波動率...","invite.inviteLink":"邀請鏈接","invite.copy":"復制鏈接","invite.copySuccess":"復制成功!","invite.copyFailed":"復制失敗,請手動復制","invite.noInviteLink":"邀請鏈接未生成","invite.totalInvites":"累計邀請","invite.totalReward":"累計獎勵","invite.rules":"邀請規則","invite.rule1":"每成功邀請一位好友注冊,您將獲得獎勵","invite.rule2":"被邀請的好友完成首次交易,您將獲得額外獎勵","invite.rule3":"邀請獎勵將直接發放到您的賬戶","invite.inviteList":"邀請列表","invite.tasks":"任務中心","invite.inviteeName":"被邀請人","invite.inviteTime":"邀請時間","invite.status":"狀態","invite.reward":"獎勵","invite.active":"活躍","invite.inactive":"未激活","invite.completed":"已完成","invite.claimed":"已領取","invite.pending":"待完成","invite.goToTask":"去完成","invite.claimReward":"領取獎勵","invite.verify":"驗證完成","invite.verifySuccess":"驗證成功!任務已完成","invite.verifyNotCompleted":"任務尚未完成,請先完成任務","invite.verifyFailed":"驗證失敗,請稍後重試","invite.claimSuccess":"成功領取 {reward} QDT!","invite.claimFailed":"領取失敗,請稍後重試","invite.totalRecords":"共 {total} 條記錄","invite.task.twitter.title":"轉發推文到 X (Twitter)","invite.task.twitter.desc":"分享我們的官方推文到您的 X (Twitter) 賬號","invite.task.youtube.title":"關注我們的 YouTube 頻道","invite.task.youtube.desc":"訂閱並關注我們的 YouTube 官方頻道","invite.task.telegram.title":"加入 Telegram 羣組","invite.task.telegram.desc":"加入我們的官方 Telegram 社區羣組","invite.task.discord.title":"加入 Discord 服務器","invite.task.discord.desc":"加入我們的 Discord 社區服務器",message:"-","layouts.usermenu.dialog.title":"信息","layouts.usermenu.dialog.content":"您確定要注銷嗎?","layouts.userLayout.title":"於不確定中,尋見真理","settings.title":"系統設置","settings.description":"配置應用設置、API密鑰和系統偏好","settings.save":"保存設置","settings.reset":"重置","settings.saveSuccess":"設置保存成功","settings.saveFailed":"保存設置失敗","settings.loadFailed":"加載配置失敗","settings.openrouterBalance":"OpenRouter 賬戶餘額","settings.queryBalance":"查詢餘額","settings.balanceUsage":"已使用","settings.balanceRemaining":"剩餘額度","settings.balanceLimit":"總限額","settings.balanceQuerySuccess":"餘額查詢成功","settings.balanceQueryFailed":"餘額查詢失敗","settings.balanceNotQueried":'點擊"查詢餘額"獲取賬戶信息',"settings.default":"默認","settings.pleaseSelect":"請選擇","settings.inputApiKey":"請輸入密鑰","settings.getApi":"獲取API","settings.link.getApi":"獲取API","settings.link.getApiKey":"獲取API Key","settings.link.getToken":"獲取Token","settings.link.createBot":"創建Bot","settings.link.viewModels":"查看模型列表","settings.link.freeRegister":"免費註冊","settings.link.supportedExchanges":"支持的交易所","settings.link.applyApi":"申請API","settings.link.createSearchEngine":"創建搜索引擎","settings.link.getTurnstileKey":"獲取Turnstile密鑰","settings.link.getGoogleCredentials":"獲取Google憑據","settings.link.getGithubCredentials":"獲取GitHub憑據","settings.restartRequired":"配置已保存,部分配置需要重啟Python服務才能生效","settings.copyRestartCmd":"複製重啟命令","settings.copySuccess":"複製成功","settings.copyFailed":"複製失敗","settings.group.server":"服務配置","settings.group.auth":"安全認證","settings.group.ai":"AI/LLM配置","settings.group.trading":"實盤交易","settings.group.strategy":"策略執行","settings.group.data_source":"數據源","settings.group.notification":"通知推送","settings.group.email":"郵件配置","settings.group.sms":"短信配置","settings.group.agent":"AI Agent","settings.group.network":"網絡代理","settings.group.search":"搜索配置","settings.group.security":"註冊與安全","settings.group.app":"應用配置","settings.field.SECRET_KEY":"Secret Key","settings.field.ADMIN_USER":"管理員用戶名","settings.field.ADMIN_PASSWORD":"管理員密碼","settings.field.ADMIN_EMAIL":"管理員郵箱","settings.field.ENABLE_REGISTRATION":"允許註冊","settings.field.TURNSTILE_SITE_KEY":"Turnstile Site Key","settings.field.TURNSTILE_SECRET_KEY":"Turnstile Secret Key","settings.field.FRONTEND_URL":"前端URL","settings.field.GOOGLE_CLIENT_ID":"Google Client ID","settings.field.GOOGLE_CLIENT_SECRET":"Google Client Secret","settings.field.GOOGLE_REDIRECT_URI":"Google回調URL","settings.field.GITHUB_CLIENT_ID":"GitHub Client ID","settings.field.GITHUB_CLIENT_SECRET":"GitHub Client Secret","settings.field.GITHUB_REDIRECT_URI":"GitHub回調URL","settings.field.SECURITY_IP_MAX_ATTEMPTS":"IP最大失敗次數","settings.field.SECURITY_IP_WINDOW_MINUTES":"IP統計窗口(分鐘)","settings.field.SECURITY_IP_BLOCK_MINUTES":"IP封禁時長(分鐘)","settings.field.SECURITY_ACCOUNT_MAX_ATTEMPTS":"帳戶最大失敗次數","settings.field.SECURITY_ACCOUNT_WINDOW_MINUTES":"帳戶統計窗口(分鐘)","settings.field.SECURITY_ACCOUNT_BLOCK_MINUTES":"帳戶鎖定時長(分鐘)","settings.field.VERIFICATION_CODE_EXPIRE_MINUTES":"驗證碼有效期(分鐘)","settings.field.VERIFICATION_CODE_RATE_LIMIT":"驗證碼發送間隔(秒)","settings.field.VERIFICATION_CODE_IP_HOURLY_LIMIT":"IP每小時驗證碼上限","settings.field.VERIFICATION_CODE_MAX_ATTEMPTS":"驗證碼最大嘗試次數","settings.field.VERIFICATION_CODE_LOCK_MINUTES":"驗證碼鎖定時長(分鐘)","settings.field.PYTHON_API_HOST":"監聽地址","settings.field.PYTHON_API_PORT":"端口","settings.field.PYTHON_API_DEBUG":"調試模式","settings.field.ENABLE_PENDING_ORDER_WORKER":"啟用訂單處理Worker","settings.field.PENDING_ORDER_STALE_SEC":"訂單超時時間(秒)","settings.field.ORDER_MODE":"下單模式","settings.field.MAKER_WAIT_SEC":"限價單等待時間(秒)","settings.field.MAKER_OFFSET_BPS":"限價單價格偏移(基點)","settings.field.SIGNAL_WEBHOOK_URL":"Webhook URL","settings.field.SIGNAL_WEBHOOK_TOKEN":"Webhook Token","settings.field.SIGNAL_NOTIFY_TIMEOUT_SEC":"通知超時(秒)","settings.field.TELEGRAM_BOT_TOKEN":"Telegram Bot Token","settings.field.SMTP_HOST":"SMTP服務器","settings.field.SMTP_PORT":"SMTP端口","settings.field.SMTP_USER":"SMTP用戶名","settings.field.SMTP_PASSWORD":"SMTP密碼","settings.field.SMTP_FROM":"發件人地址","settings.field.SMTP_USE_TLS":"使用TLS","settings.field.SMTP_USE_SSL":"使用SSL","settings.field.TWILIO_ACCOUNT_SID":"Account SID","settings.field.TWILIO_AUTH_TOKEN":"Auth Token","settings.field.TWILIO_FROM_NUMBER":"發送號碼","settings.field.DISABLE_RESTORE_RUNNING_STRATEGIES":"禁用自動恢復策略","settings.field.STRATEGY_TICK_INTERVAL_SEC":"策略Tick間隔(秒)","settings.field.PRICE_CACHE_TTL_SEC":"價格緩存TTL(秒)","settings.field.PROXY_URL":"完整代理URL","settings.field.RATE_LIMIT":"速率限制(每分鐘)","settings.field.ENABLE_CACHE":"啟用緩存","settings.field.ENABLE_REQUEST_LOG":"啟用請求日誌","settings.field.ENABLE_AGENT_MEMORY":"啟用Agent記憶","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"啟用向量檢索(本地)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"Embedding維度","settings.field.AGENT_MEMORY_TOP_K":"召回數量TopK","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"候選窗口大小","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"時間衰減半衰期(天)","settings.field.AGENT_MEMORY_W_SIM":"相似度權重","settings.field.AGENT_MEMORY_W_RECENCY":"時間權重","settings.field.AGENT_MEMORY_W_RETURNS":"收益權重","settings.field.ENABLE_REFLECTION_WORKER":"啟用自動驗證","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"驗證周期間隔(秒)","settings.field.OPENROUTER_API_KEY":"OpenRouter API Key","settings.field.OPENROUTER_API_URL":"OpenRouter API URL","settings.field.OPENROUTER_MODEL":"默認模型","settings.field.OPENROUTER_TEMPERATURE":"Temperature","settings.field.OPENROUTER_MAX_TOKENS":"Max Tokens","settings.field.OPENROUTER_TIMEOUT":"超時時間(秒)","settings.field.OPENROUTER_CONNECT_TIMEOUT":"連接超時(秒)","settings.field.MARKET_TYPES_JSON":"市場類型(JSON)","settings.field.TRADING_SUPPORTED_SYMBOLS_JSON":"支持的交易對(JSON)","settings.field.DATA_SOURCE_TIMEOUT":"數據源超時(秒)","settings.field.DATA_SOURCE_RETRY":"重試次數","settings.field.DATA_SOURCE_RETRY_BACKOFF":"重試退避(秒)","settings.field.FINNHUB_API_KEY":"Finnhub API Key","settings.field.FINNHUB_TIMEOUT":"Finnhub超時(秒)","settings.field.FINNHUB_RATE_LIMIT":"Finnhub速率限制","settings.field.CCXT_DEFAULT_EXCHANGE":"CCXT默認交易所","settings.field.CCXT_TIMEOUT":"CCXT超時(ms)","settings.field.CCXT_PROXY":"CCXT代理","settings.field.AKSHARE_TIMEOUT":"Akshare超時(秒)","settings.field.YFINANCE_TIMEOUT":"YFinance超時(秒)","settings.field.TIINGO_API_KEY":"Tiingo API Key","settings.field.TIINGO_TIMEOUT":"Tiingo超時(秒)","settings.field.SEARCH_PROVIDER":"搜索提供商","settings.field.SEARCH_MAX_RESULTS":"最大結果數","settings.field.SEARCH_GOOGLE_API_KEY":"Google API Key","settings.field.SEARCH_GOOGLE_CX":"Google CX","settings.field.SEARCH_BING_API_KEY":"Bing API Key","settings.field.INTERNAL_API_KEY":"內部API Key","settings.desc.PYTHON_API_HOST":"服務監聽地址。0.0.0.0 允許外部訪問,127.0.0.1 僅本地訪問","settings.desc.PYTHON_API_PORT":"服務監聽端口,默認5000","settings.desc.PYTHON_API_DEBUG":"啟用調試模式,開發時使用。生產環境請關閉","settings.desc.SECRET_KEY":"JWT簽名密鑰。生產環境必須修改以確保安全","settings.desc.ADMIN_USER":"管理員登錄用戶名","settings.desc.ADMIN_PASSWORD":"管理員登錄密碼。生產環境必須修改","settings.desc.OPENROUTER_API_KEY":"OpenRouter API密鑰,用於訪問多種AI模型","settings.desc.OPENROUTER_API_URL":"OpenRouter API端點地址","settings.desc.OPENROUTER_MODEL":"默認使用的AI模型,如 openai/gpt-4o, anthropic/claude-3.5-sonnet","settings.desc.OPENROUTER_TEMPERATURE":"模型創造性(0-1)。越低越確定性,越高越有創意","settings.desc.OPENROUTER_MAX_TOKENS":"每次請求最大輸出token數","settings.desc.OPENROUTER_TIMEOUT":"API請求超時時間(秒)","settings.desc.OPENROUTER_CONNECT_TIMEOUT":"連接建立超時時間(秒)","settings.desc.ENABLE_PENDING_ORDER_WORKER":"啟用後台訂單處理Worker,實盤交易必需","settings.desc.PENDING_ORDER_STALE_SEC":"等待訂單超時時間,超時後標記為過期","settings.desc.ORDER_MODE":"maker: 限價單優先(手續費低),market: 市價單(立即成交)","settings.desc.MAKER_WAIT_SEC":"限價單等待成交時間,超時後自動切換為市價單","settings.desc.MAKER_OFFSET_BPS":"限價單價格偏移(基點)。買入價=市價*(1-偏移),賣出價=市價*(1+偏移)","settings.desc.DISABLE_RESTORE_RUNNING_STRATEGIES":"禁止服務重啟時自動恢復運行中的策略","settings.desc.STRATEGY_TICK_INTERVAL_SEC":"策略主循環檢查間隔(秒)","settings.desc.PRICE_CACHE_TTL_SEC":"價格數據緩存有效期(秒)","settings.desc.MARKET_TYPES_JSON":"自定義市場類型配置,JSON格式","settings.desc.TRADING_SUPPORTED_SYMBOLS_JSON":"支持的交易對列表,JSON格式","settings.desc.DATA_SOURCE_TIMEOUT":"數據源請求默認超時時間","settings.desc.DATA_SOURCE_RETRY":"數據源請求失敗時的重試次數","settings.desc.DATA_SOURCE_RETRY_BACKOFF":"重試間隔時間(秒)","settings.desc.CCXT_DEFAULT_EXCHANGE":"CCXT默認交易所(binance, coinbase, okx等)","settings.desc.CCXT_TIMEOUT":"CCXT請求超時時間(毫秒)","settings.desc.CCXT_PROXY":"CCXT請求代理地址(如 socks5h://127.0.0.1:1080)","settings.desc.FINNHUB_API_KEY":"Finnhub API密鑰,用於美股數據(有免費額度)","settings.desc.FINNHUB_TIMEOUT":"Finnhub API請求超時時間","settings.desc.FINNHUB_RATE_LIMIT":"Finnhub API速率限制(每分鐘請求數)","settings.desc.TIINGO_API_KEY":"Tiingo API密鑰,用於外匯/貴金屬數據(免費版不支持1分鐘數據)","settings.desc.TIINGO_TIMEOUT":"Tiingo API請求超時時間","settings.desc.AKSHARE_TIMEOUT":"Akshare API超時時間,用於A股數據","settings.desc.YFINANCE_TIMEOUT":"Yahoo Finance API超時時間","settings.desc.SIGNAL_WEBHOOK_URL":"信號通知Webhook地址(POST JSON)","settings.desc.SIGNAL_WEBHOOK_TOKEN":"Webhook認證令牌,通過請求頭發送","settings.desc.SIGNAL_NOTIFY_TIMEOUT_SEC":"通知請求超時時間","settings.desc.TELEGRAM_BOT_TOKEN":"Telegram機器人Token,從@BotFather獲取","settings.desc.SMTP_HOST":"SMTP郵件服務器地址(如 smtp.gmail.com)","settings.desc.SMTP_PORT":"SMTP端口(TLS用587,SSL用465,明文用25)","settings.desc.SMTP_USER":"SMTP認證用戶名(通常是郵箱地址)","settings.desc.SMTP_PASSWORD":"SMTP認證密碼或應用專用密碼","settings.desc.SMTP_FROM":"郵件發件人地址","settings.desc.SMTP_USE_TLS":"啟用STARTTLS加密(推薦端口587)","settings.desc.SMTP_USE_SSL":"啟用SSL加密(端口465)","settings.desc.TWILIO_ACCOUNT_SID":"Twilio賬戶SID,從控制台獲取","settings.desc.TWILIO_AUTH_TOKEN":"Twilio認證Token,從控制台獲取","settings.desc.TWILIO_FROM_NUMBER":"Twilio發送短信的號碼(如 +1234567890)","settings.desc.ENABLE_AGENT_MEMORY":"啟用AI Agent記憶功能,用於學習歷史交易","settings.desc.AGENT_MEMORY_ENABLE_VECTOR":"啟用本地向量相似度搜索進行記憶檢索","settings.desc.AGENT_MEMORY_EMBEDDING_DIM":"記憶向量嵌入維度","settings.desc.AGENT_MEMORY_TOP_K":"檢索時返回的相似記憶數量","settings.desc.AGENT_MEMORY_CANDIDATE_LIMIT":"相似度搜索的候選記憶上限","settings.desc.AGENT_MEMORY_HALF_LIFE_DAYS":"記憶時間衰減的半衰期(天)","settings.desc.AGENT_MEMORY_W_SIM":"記憶排序中相似度分數的權重(0-1)","settings.desc.AGENT_MEMORY_W_RECENCY":"記憶排序中時間新近度的權重(0-1)","settings.desc.AGENT_MEMORY_W_RETURNS":"記憶排序中收益表現的權重(0-1)","settings.desc.ENABLE_REFLECTION_WORKER":"啟用後台自動交易反思Worker","settings.desc.REFLECTION_WORKER_INTERVAL_SEC":"自動反思運行間隔(默認24小時)","settings.desc.PROXY_URL":"完整代理URL(設置後覆蓋上面的配置)","settings.desc.SEARCH_PROVIDER":"網頁搜索提供商,用於AI研究功能","settings.desc.SEARCH_MAX_RESULTS":"搜索返回的最大結果數","settings.desc.SEARCH_GOOGLE_API_KEY":"Google自定義搜索API密鑰","settings.desc.SEARCH_GOOGLE_CX":"Google可編程搜索引擎ID (CX)","settings.desc.SEARCH_BING_API_KEY":"Microsoft Bing網頁搜索API密鑰","settings.desc.INTERNAL_API_KEY":"內部API認證密鑰,用於服務間調用","settings.desc.RATE_LIMIT":"每IP每分鐘的API請求限制","settings.desc.ENABLE_CACHE":"啟用響應緩存以提高性能","settings.desc.ENABLE_REQUEST_LOG":"記錄所有API請求日誌,用於調試","portfolio.summary.totalValue":"總市值","portfolio.summary.totalCost":"總成本","portfolio.summary.totalPnl":"總盈虧","portfolio.summary.positionCount":"持倉數量","portfolio.summary.profitLossRatio":"盈利/虧損","portfolio.summary.today":"今日","portfolio.summary.todayPnl":"今日盈虧","portfolio.summary.bestPerformer":"最佳表現","portfolio.summary.worstPerformer":"最差表現","portfolio.summary.priceSync":"價格同步","portfolio.summary.syncInterval":"刷新間隔","portfolio.summary.justNow":"剛剛","portfolio.summary.ago":"前","portfolio.positions.title":"我的持倉","portfolio.positions.add":"添加持倉","portfolio.positions.addFirst":"添加第一筆持倉","portfolio.positions.empty":"暫無持倉記錄","portfolio.positions.deleteConfirm":"確定刪除這筆持倉嗎?","portfolio.positions.currentPrice":"現價","portfolio.positions.entryPrice":"買入價","portfolio.positions.quantity":"數量","portfolio.positions.side":"方向","portfolio.positions.long":"做多","portfolio.positions.short":"做空","portfolio.positions.marketValue":"市值","portfolio.positions.pnl":"盈虧","portfolio.positions.items":"個持倉","portfolio.monitors.title":"AI 監控","portfolio.monitors.add":"添加監控","portfolio.monitors.addFirst":"添加 AI 監控","portfolio.monitors.empty":"暫無監控任務","portfolio.monitors.deleteConfirm":"確定刪除這個監控任務嗎?","portfolio.monitors.interval":"執行間隔","portfolio.monitors.lastRun":"上次執行","portfolio.monitors.nextRun":"下次執行","portfolio.monitors.channels":"通知渠道","portfolio.monitors.runNow":"立即執行","portfolio.monitors.analysisResult":"AI 分析結果","portfolio.monitors.runningTitle":"AI 分析已啟動","portfolio.monitors.runningDesc":"分析正在後臺運行,完成後會通過通知推送結果。分析多個持倉可能需要幾分鐘時間。","portfolio.monitors.timeoutTitle":"請求超時","portfolio.monitors.timeoutDesc":"分析可能正在後臺運行中,請稍後查看通知獲取結果。如果長時間沒有收到通知,請重試。","portfolio.modal.addPosition":"添加持倉","portfolio.modal.editPosition":"編輯持倉","portfolio.modal.addMonitor":"添加監控","portfolio.modal.editMonitor":"編輯監控","portfolio.form.market":"市場","portfolio.form.marketRequired":"請選擇市場","portfolio.form.selectMarket":"選擇市場","portfolio.form.symbol":"標的代碼","portfolio.form.symbolRequired":"請輸入標的代碼","portfolio.form.searchSymbol":"搜索或輸入標的代碼","portfolio.form.useAsSymbol":"使用","portfolio.form.asSymbolCode":"作為標的代碼","portfolio.form.symbolHint":"可搜索標的庫,或直接輸入任意代碼","portfolio.form.side":"方向","portfolio.form.quantity":"數量","portfolio.form.quantityRequired":"請輸入數量","portfolio.form.enterQuantity":"輸入持倉數量","portfolio.form.entryPrice":"買入價","portfolio.form.entryPriceRequired":"請輸入買入價","portfolio.form.enterEntryPrice":"輸入買入價格","portfolio.form.notes":"備注","portfolio.form.enterNotes":"可選:添加備注","portfolio.form.monitorName":"監控名稱","portfolio.form.monitorNameRequired":"請輸入監控名稱","portfolio.form.enterMonitorName":"例如:每日組合分析","portfolio.form.interval":"執行間隔","portfolio.form.minutes":"分鐘","portfolio.form.hour":"小時","portfolio.form.hours":"小時","portfolio.form.notifyChannels":"通知渠道","portfolio.form.browser":"瀏覽器通知","portfolio.form.email":"郵件","portfolio.form.telegramChatId":"Telegram Chat ID","portfolio.form.enterTelegramChatId":"輸入 Telegram Chat ID","portfolio.form.telegramRequired":"請輸入 Telegram Chat ID","portfolio.form.emailAddress":"郵箱地址","portfolio.form.enterEmail":"輸入郵箱地址","portfolio.form.emailRequired":"請輸入郵箱地址","portfolio.form.emailInvalid":"請輸入有效的郵箱地址","portfolio.form.customPrompt":"自定義提示","portfolio.form.customPromptPlaceholder":'可選:添加特別關注點,例如"重點關注科技股風險"',"portfolio.form.monitorScope":"監控範圍","portfolio.form.allPositions":"全部持倉","portfolio.form.selectedPositions":"指定持倉","portfolio.form.selectPositions":"選擇持倉","portfolio.form.selectAll":"全選","portfolio.form.deselectAll":"全不選","portfolio.form.selectedCount":"已選 {count}/{total}","portfolio.form.pleaseSelectPositions":"請至少選擇一個持倉進行監控","portfolio.message.loadFailed":"加載數據失敗","portfolio.message.saveSuccess":"保存成功","portfolio.message.saveFailed":"保存失敗","portfolio.message.deleteSuccess":"刪除成功","portfolio.message.deleteFailed":"刪除失敗","portfolio.message.updateFailed":"更新失敗","portfolio.message.monitorEnabled":"監控已啟用","portfolio.message.monitorDisabled":"監控已暫停","portfolio.message.monitorRunSuccess":"分析完成","portfolio.message.monitorRunFailed":"分析失敗","portfolio.message.monitorRunning":"AI 分析已啟動,請等待通知","portfolio.groups.all":"全部持倉","portfolio.groups.ungrouped":"未分組","portfolio.form.group":"分組","portfolio.form.enterGroup":"輸入或選擇分組","portfolio.alerts.title":"價格/盈虧預警","portfolio.alerts.addAlert":"添加預警","portfolio.alerts.editAlert":"編輯預警","portfolio.alerts.alertType":"預警類型","portfolio.alerts.priceAbove":"價格高於","portfolio.alerts.priceBelow":"價格低於","portfolio.alerts.pnlAbove":"盈利高於 (%)","portfolio.alerts.pnlBelow":"虧損低於 (%)","portfolio.alerts.threshold":"閾值","portfolio.alerts.thresholdRequired":"請輸入閾值","portfolio.alerts.enterPrice":"輸入價格","portfolio.alerts.enterPercent":"輸入百分比","portfolio.alerts.currentPrice":"當前價格","portfolio.alerts.currentPriceHint":"當前價格","portfolio.alerts.repeatInterval":"重複提醒","portfolio.alerts.noRepeat":"不重複 (觸發一次)","portfolio.alerts.every5min":"每 5 分鐘","portfolio.alerts.every15min":"每 15 分鐘","portfolio.alerts.every30min":"每 30 分鐘","portfolio.alerts.every1hour":"每 1 小時","portfolio.alerts.every4hours":"每 4 小時","portfolio.alerts.onceDaily":"每天一次","portfolio.alerts.enabled":"啟用預警","portfolio.alerts.enabledDesc":"開啟後將自動監測並觸發通知","portfolio.alerts.delete":"刪除","portfolio.alerts.deleteConfirm":"確定要刪除此預警嗎?","portfolio.modal.addAlert":"添加預警","portfolio.modal.editAlert":"編輯預警","menu.userManage":"用戶管理","menu.myProfile":"個人中心","userManage.title":"用戶管理","userManage.searchPlaceholder":"搜索用戶名/郵箱/暱稱","userManage.description":"管理系統用戶、角色和權限","userManage.createUser":"創建用戶","userManage.editUser":"編輯用戶","userManage.username":"用戶名","userManage.password":"密碼","userManage.nickname":"暱稱","userManage.email":"郵箱","userManage.role":"角色","userManage.status":"狀態","userManage.lastLogin":"最後登錄","userManage.active":"啟用","userManage.disabled":"禁用","userManage.neverLogin":"從未登錄","userManage.usernameRequired":"請輸入用戶名","userManage.usernamePlaceholder":"輸入用戶名","userManage.passwordRequired":"請輸入密碼","userManage.passwordPlaceholder":"輸入密碼(至少6位)","userManage.passwordMin":"密碼至少6個字符","userManage.nicknamePlaceholder":"輸入暱稱","userManage.emailPlaceholder":"輸入郵箱","userManage.emailInvalid":"郵箱格式不正確","userManage.rolePlaceholder":"選擇角色","userManage.statusPlaceholder":"選擇狀態","userManage.resetPassword":"重置密碼","userManage.resetPasswordWarning":"此操作將重置用戶密碼","userManage.newPassword":"新密碼","userManage.newPasswordPlaceholder":"輸入新密碼","userManage.confirmDelete":"確定要刪除此用戶嗎?","userManage.roleAdmin":"管理員","userManage.roleManager":"經理","userManage.roleUser":"普通用戶","userManage.roleViewer":"訪客","userManage.credits":"積分","userManage.adjustCredits":"調整積分","userManage.setVip":"設置VIP","userManage.currentCredits":"當前積分","userManage.newCredits":"新積分","userManage.enterCredits":"輸入新的積分數量","userManage.creditsNonNegative":"積分不能為負數","userManage.currentVip":"當前VIP狀態","userManage.vipActive":"有效","userManage.vipExpired":"已過期","userManage.vipDays":"VIP天數","userManage.vipExpiresAt":"VIP過期時間","userManage.cancelVip":"取消VIP","userManage.days":"天","userManage.customDate":"自定義日期","userManage.selectDate":"請選擇日期","userManage.remark":"備注","userManage.remarkPlaceholder":"可選備注","profile.title":"個人中心","profile.description":"管理您的賬戶設置和偏好","profile.basicInfo":"基本信息","profile.changePassword":"修改密碼","profile.username":"用戶名","profile.nickname":"暱稱","profile.email":"郵箱","profile.lastLogin":"最後登錄","profile.nicknamePlaceholder":"輸入您的暱稱","profile.emailPlaceholder":"輸入您的郵箱","profile.emailInvalid":"郵箱格式不正確","profile.emailCannotChange":"註冊後郵箱不可修改","profile.passwordHint":"密碼至少需要6個字符","profile.oldPassword":"當前密碼","profile.newPassword":"新密碼","profile.confirmPassword":"確認密碼","profile.oldPasswordRequired":"請輸入當前密碼","profile.oldPasswordPlaceholder":"輸入當前密碼","profile.newPasswordRequired":"請輸入新密碼","profile.newPasswordPlaceholder":"輸入新密碼","profile.confirmPasswordRequired":"請確認新密碼","profile.confirmPasswordPlaceholder":"再次輸入新密碼","profile.passwordMin":"密碼至少6個字符","profile.passwordMismatch":"兩次輸入的密碼不一致","profile.credits.title":"我的積分","profile.credits.unit":"積分","profile.credits.recharge":"開通/充值","profile.credits.vipExpires":"VIP有效期至","profile.credits.vipExpired":"VIP已過期","profile.credits.noVip":"非VIP用戶","profile.credits.hint":"使用AI分析等功能會消耗積分,VIP用戶免費","profile.creditsLog":"消費記錄","profile.creditsLog.time":"時間","profile.creditsLog.action":"類型","profile.creditsLog.amount":"變動","profile.creditsLog.balance":"餘額","profile.creditsLog.remark":"備注","profile.creditsLog.actionConsume":"消費","profile.creditsLog.actionRecharge":"充值","profile.creditsLog.actionAdjust":"調整","profile.creditsLog.actionRefund":"退款","profile.creditsLog.actionVipGrant":"VIP授予","profile.creditsLog.actionVipRevoke":"VIP取消","profile.creditsLog.actionRegisterBonus":"註冊獎勵","profile.creditsLog.actionReferralBonus":"邀請獎勵","profile.referral.title":"邀請好友","profile.referral.listTab":"邀請列表","profile.referral.totalInvited":"已邀請","profile.referral.bonusPerInvite":"每邀請獲得","profile.referral.yourLink":"您的邀請鏈接","profile.referral.copyLink":"複製鏈接","profile.referral.linkCopied":"邀請鏈接已複製","profile.referral.newUserBonus":"新用戶註冊獲得","profile.referral.user":"用戶","profile.referral.registerTime":"註冊時間","profile.referral.noReferrals":"暫無邀請記錄","profile.referral.shareNow":"立即分享邀請","profile.notifications.title":"通知設定","profile.notifications.hint":"配置您的預設通知方式,在建立資產監控和預警時將自動使用這些設定","profile.notifications.defaultChannels":"預設通知管道","profile.notifications.browser":"站內通知","profile.notifications.email":"郵件","profile.notifications.phone":"簡訊","profile.notifications.telegramBotToken":"Telegram Bot Token","profile.notifications.telegramBotTokenPlaceholder":"請輸入您的 Telegram Bot Token","profile.notifications.telegramBotTokenHint":"透過 @BotFather 建立機器人取得 Token","profile.notifications.telegramChatId":"Telegram Chat ID","profile.notifications.telegramPlaceholder":"請輸入您的 Telegram Chat ID(如 123456789)","profile.notifications.telegramHint":"發送 /start 給 @userinfobot 可取得您的 Chat ID","profile.notifications.notifyEmail":"通知信箱","profile.notifications.emailPlaceholder":"接收通知的信箱地址","profile.notifications.emailHint":"預設使用帳戶信箱,可設定其他信箱接收通知","profile.notifications.phonePlaceholder":"請輸入手機號(如 +886912345678)","profile.notifications.phoneHint":"需要管理員配置 Twilio 服務後才能使用簡訊通知","profile.notifications.discordWebhook":"Discord Webhook","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"在 Discord 伺服器設定中建立 Webhook","profile.notifications.webhookUrl":"Webhook URL","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"自訂 Webhook 地址,將以 POST JSON 方式推送通知","profile.notifications.webhookToken":"Webhook Token(可選)","profile.notifications.webhookTokenPlaceholder":"用於驗證請求的 Bearer Token","profile.notifications.webhookTokenHint":"將作為 Authorization: Bearer Token 傳送到 Webhook","profile.notifications.testBtn":"發送測試通知","profile.notifications.saveSuccess":"通知設定儲存成功","profile.notifications.selectChannel":"請至少選擇一個通知管道","profile.notifications.fillTelegramToken":"請填寫 Telegram Bot Token","profile.notifications.fillTelegram":"請填寫 Telegram Chat ID","profile.notifications.fillEmail":"請填寫通知信箱","profile.notifications.testSent":"測試通知已發送,請檢查您的通知管道","settings.group.billing":"計費配置","settings.field.BILLING_ENABLED":"啟用計費","settings.field.BILLING_COST_AI_ANALYSIS":"AI分析消耗","settings.field.BILLING_COST_STRATEGY_RUN":"策略運行消耗","settings.field.BILLING_COST_BACKTEST":"回測消耗","settings.field.BILLING_COST_PORTFOLIO_MONITOR":"Portfolio監控消耗","settings.field.CREDITS_REGISTER_BONUS":"註冊獎勵","settings.field.CREDITS_REFERRAL_BONUS":"邀請獎勵","settings.field.RECHARGE_TELEGRAM_URL":"充值Telegram鏈接","settings.desc.BILLING_ENABLED":"啟用計費系統。啟用後,用戶使用某些功能需要消耗積分","settings.desc.BILLING_COST_AI_ANALYSIS":"每次AI分析消耗的積分數","settings.desc.BILLING_COST_STRATEGY_RUN":"啟動策略時消耗的積分數","settings.desc.BILLING_COST_BACKTEST":"每次回測消耗的積分數","settings.desc.BILLING_COST_PORTFOLIO_MONITOR":"每次Portfolio AI監控消耗的積分數","settings.desc.CREDITS_REGISTER_BONUS":"新用戶註冊時獲得的積分獎勵","settings.desc.CREDITS_REFERRAL_BONUS":"用戶通過邀請鏈接成功邀請新用戶時,邀請人獲得的積分獎勵","settings.desc.VERIFICATION_CODE_MAX_ATTEMPTS":"驗證碼驗證失敗的最大嘗試次數,超過後將鎖定","settings.desc.VERIFICATION_CODE_LOCK_MINUTES":"驗證碼驗證失敗次數超過限制後的鎖定時長(分鐘)","settings.desc.RECHARGE_TELEGRAM_URL":"用戶點擊充值時跳轉的Telegram客服鏈接"},y=(0,s.A)((0,s.A)({},p),f)}}]); \ No newline at end of file diff --git a/frontend/dist/js/lang-zh-TW.d8f00226.js b/frontend/dist/js/lang-zh-TW.cd73b702.js similarity index 80% rename from frontend/dist/js/lang-zh-TW.d8f00226.js rename to frontend/dist/js/lang-zh-TW.cd73b702.js index be58de1..40ad46b 100644 --- a/frontend/dist/js/lang-zh-TW.d8f00226.js +++ b/frontend/dist/js/lang-zh-TW.cd73b702.js @@ -1 +1 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[892],{33860:function(a,t,e){e.d(t,{default:function(){return y}});var s=e(57888),i={items_per_page:"條/頁",jump_to:"跳至",jump_to_confirm:"確定",page:"頁",prev_page:"上一頁",next_page:"下一頁",prev_5:"向前 5 頁",next_5:"向後 5 頁",prev_3:"向前 3 頁",next_3:"向後 3 頁"},r=e(85505),o={today:"今天",now:"此刻",backToToday:"返回今天",ok:"確定",timeSelect:"選擇時間",dateSelect:"選擇日期",clear:"清除",month:"月",year:"年",previousMonth:"上個月 (翻頁上鍵)",nextMonth:"下個月 (翻頁下鍵)",monthSelect:"選擇月份",yearSelect:"選擇年份",decadeSelect:"選擇年代",yearFormat:"YYYY年",dayFormat:"D日",dateFormat:"YYYY年M月D日",dateTimeFormat:"YYYY年M月D日 HH時mm分ss秒",previousYear:"上一年 (Control鍵加左方向鍵)",nextYear:"下一年 (Control鍵加右方向鍵)",previousDecade:"上一年代",nextDecade:"下一年代",previousCentury:"上一世紀",nextCentury:"下一世紀"},n={placeholder:"請選擇時間"},d=n,l={lang:(0,r.A)({placeholder:"請選擇日期",rangePlaceholder:["開始日期","結束日期"]},o),timePickerLocale:(0,r.A)({},d)};l.lang.ok="確 定";var c=l,g=c,m={locale:"zh-tw",Pagination:i,DatePicker:c,TimePicker:d,Calendar:g,Table:{filterTitle:"篩選器",filterConfirm:"確定",filterReset:"重置",selectAll:"全部選取",selectInvert:"反向選取",sortTitle:"排序",expand:"展開行",collapse:"關閉行"},Modal:{okText:"確定",cancelText:"取消",justOkText:"知道了"},Popconfirm:{okText:"確定",cancelText:"取消"},Transfer:{searchPlaceholder:"搜尋資料",itemUnit:"項目",itemsUnit:"項目"},Upload:{uploading:"正在上傳...",removeFile:"刪除檔案",uploadError:"上傳失敗",previewFile:"檔案預覽",downloadFile:"下载文件"},Empty:{description:"無此資料"},PageHeader:{back:"返回"}},b=m,h=e(50304),u=e.n(h),p={antLocale:b,momentName:"zh-tw",momentLocale:u()},f={"common.confirm":"確定","common.cancel":"取消","common.save":"保存","common.delete":"刪除","common.edit":"編輯","common.add":"添加","common.close":"關閉","common.ok":"確定","common.actions":"操作","common.refresh":"刷新",submit:"提交",save:"保存","submit.ok":"提交成功","save.ok":"保存成功","menu.welcome":"歡迎","menu.home":"主頁","menu.dashboard":"儀表盤","menu.dashboard.indicator":"指標分析","menu.dashboard.community":"指標社區","menu.dashboard.analysis":"AI 分析","menu.dashboard.tradingAssistant":"交易助手","menu.dashboard.portfolio":"資產監測","menu.settings":"系統設置","menu.dashboard.aiTradingAssistant":"AI交易助手","menu.dashboard.signalRobot":"信號機器人","menu.dashboard.monitor":"監控頁","menu.dashboard.workplace":"工作臺","menu.form":"表單頁","menu.form.basic-form":"基礎表單","menu.form.step-form":"分步表單","menu.form.step-form.info":"分步表單(填寫轉賬信息)","menu.form.step-form.confirm":"分步表單(確認轉賬信息)","menu.form.step-form.result":"分步表單(完成)","menu.form.advanced-form":"高級表單","menu.list":"列表頁","menu.list.table-list":"查詢表格","menu.list.basic-list":"標準列表","menu.list.card-list":"卡片列表","menu.list.search-list":"搜索列表","menu.list.search-list.articles":"搜索列表(文章)","menu.list.search-list.projects":"搜索列表(項目)","menu.list.search-list.applications":"搜索列表(應用)","menu.profile":"詳情頁","menu.profile.basic":"基礎詳情頁","menu.profile.advanced":"高級詳情頁","menu.result":"結果頁","menu.result.success":"成功頁","menu.result.fail":"失敗頁","menu.exception":"異常頁","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"觸發錯誤","menu.account":"個人頁","menu.account.center":"個人中心","menu.account.settings":"個人設置","menu.account.trigger":"觸發報錯","menu.account.logout":"退出登錄","menu.wallet":"我的錢包","menu.docs":"文檔中心","menu.docs.detail":"文檔詳情","menu.header.refreshPage":"刷新頁面","menu.invite.friends":"邀請好友","app.setting.pagestyle":"整體風格設置","app.setting.pagestyle.light":"亮色菜單風格","app.setting.pagestyle.dark":"暗色菜單風格","app.setting.pagestyle.realdark":"暗黑模式","app.setting.themecolor":"主題色","app.setting.navigationmode":"導航模式","app.setting.sidemenu.nav":"側邊欄導航","app.setting.topmenu.nav":"頂部欄導航","app.setting.content-width":"內容區域寬度","app.setting.content-width.tooltip":"該設定僅 [頂部欄導航] 時有效","app.setting.content-width.fixed":"固定","app.setting.content-width.fluid":"流式","app.setting.fixedheader":"固定 Header","app.setting.fixedheader.tooltip":"固定 Header 時可配置","app.setting.autoHideHeader":"下滑時隱藏 Header","app.setting.fixedsidebar":"固定側邊菜單","app.setting.sidemenu":"側邊菜單布局","app.setting.topmenu":"頂部菜單布局","app.setting.othersettings":"其他設置","app.setting.weakmode":"色弱模式","app.setting.multitab":"多頁籤模式","app.setting.copy":"拷貝設置","app.setting.loading":"加載主題中","app.setting.copyinfo":"拷貝設置成功 src/config/defaultSettings.js","app.setting.copy.success":"復制完畢","app.setting.copy.fail":"復制失敗","app.setting.theme.switching":"正在切換主題!","app.setting.production.hint":"配置欄只在開發環境用於預覽,生產環境不會展現,請拷貝後手動修改配置文件","app.setting.themecolor.daybreak":"拂曉藍(默認)","app.setting.themecolor.dust":"薄暮","app.setting.themecolor.volcano":"火山","app.setting.themecolor.sunset":"日暮","app.setting.themecolor.cyan":"明青","app.setting.themecolor.green":"極光綠","app.setting.themecolor.geekblue":"極客藍","app.setting.themecolor.purple":"醬紫","app.setting.tooltip":"頁面設置","notice.title":"通知中心","notice.empty":"暫無通知","notice.markAllRead":"全部已讀","notice.clear":"清空通知","notice.close":"關閉","notice.justNow":"剛剛","notice.minutesAgo":"分鐘前","notice.hoursAgo":"小時前","notice.daysAgo":"天前","notice.detailInfo":"詳細信息","notice.aiDecision":"AI決策","notice.confidence":"置信度","notice.reasoning":"分析理由","notice.symbol":"標的代碼","notice.currentPrice":"當前價格","notice.triggerPrice":"觸發價格","notice.action":"操作","notice.quantity":"數量","notice.viewPortfolio":"查看持倉","notice.type.aiMonitor":"AI監控","notice.type.priceAlert":"價格提醒","notice.type.signal":"交易信號","notice.type.buy":"買入信號","notice.type.sell":"賣出信號","notice.type.hold":"持有建議","notice.type.trade":"交易執行","notice.type.notification":"系統通知","user.login.userName":"用戶名","user.login.password":"密碼","user.login.username.placeholder":"賬戶: admin","user.login.password.placeholder":"密碼: admin or ant.design","user.login.message-invalid-credentials":"登錄失敗,請檢查郵箱和驗證碼","user.login.message-invalid-verification-code":"驗證碼錯誤","user.login.tab-login-credentials":"賬戶密碼登錄","user.login.tab-login-email":"郵箱登錄","user.login.tab-login-mobile":"手機號登錄","user.login.captcha.placeholder":"請輸入圖形驗證碼","user.login.mobile.placeholder":"手機號","user.login.mobile.verification-code.placeholder":"驗證碼","user.login.email.placeholder":"請輸入郵箱地址","user.login.email.verification-code.placeholder":"請輸入驗證碼","user.login.email.sending":"驗證碼發送中...","user.login.email.send-success-title":"提示","user.login.email.send-success":"驗證碼發送成功,請查收郵件","user.login.sms.send-success":"驗證碼發送成功,請查收短信","user.login.remember-me":"自動登錄","user.login.forgot-password":"忘記密碼","user.login.sign-in-with":"其他登錄方式","user.login.signup":"注冊賬戶","user.login.login":"登錄","user.register.register":"注冊","user.register.email.placeholder":"郵箱","user.register.password.placeholder":"請至少輸入 6 個字符。請不要使用容易被猜到的密碼。","user.register.password.popover-message":"請至少輸入 6 個字符。請不要使用容易被猜到的密碼。","user.register.confirm-password.placeholder":"確認密碼","user.register.get-verification-code":"獲取驗證碼","user.register.sign-in":"使用已有賬戶登錄","user.register-result.msg":"你的賬戶:{email} 注冊成功","user.register-result.activation-email":"激活郵件已發送到你的郵箱中,郵件有效期爲24小時。請及時登錄郵箱,點擊郵件中的鏈接激活帳戶。","user.register-result.back-home":"返回首頁","user.register-result.view-mailbox":"查看郵箱","user.email.required":"請輸入郵箱地址!","user.email.wrong-format":"郵箱地址格式錯誤!","user.userName.required":"請輸入帳戶名或郵箱地址","user.password.required":"請輸入密碼!","user.password.twice.msg":"兩次輸入的密碼不匹配!","user.password.strength.msg":"密碼強度不夠 ","user.password.strength.strong":"強度:強","user.password.strength.medium":"強度:中","user.password.strength.low":"強度:低","user.password.strength.short":"強度:太短","user.confirm-password.required":"請確認密碼!","user.phone-number.required":"請輸入正確的手機號","user.phone-number.wrong-format":"手機號格式錯誤!","user.verification-code.required":"請輸入驗證碼!","user.captcha.required":"請輸入圖形驗證碼!","user.login.infos":"QuantDinger 是一個 AI 多智能體股票分析輔助工具,不具備證券投資諮詢資質。平臺中的所有分析結果、評分、參考意見均由 AI 基於歷史數據自動生成,僅供學習、研究與技術交流使用,不構成任何投資建議或決策依據。股票投資存在市場風險、流動性風險、政策風險等多種風險,可能導致本金損失。用戶應基於自身風險承受能力獨立決策,使用本工具產生的任何投資行爲及其後果由用戶自行承擔。市場有風險,投資需謹慎。","user.login.tab-login-web3":"Web3 登錄","user.login.web3.tip":"使用錢包進行籤名登錄","user.login.web3.connect":"連接錢包並登錄","user.login.web3.no-wallet":"未檢測到錢包","user.login.web3.no-address":"未獲取到錢包地址","user.login.web3.nonce-failed":"獲取隨機數失敗","user.login.web3.verify-failed":"籤名驗證失敗","user.login.web3.success":"登錄成功","user.login.web3.failed":"錢包登錄失敗","nav.no_wallet":"未檢測到錢包","nav.copy":"復制","nav.copy_success":"復制成功","user.login.oauth.google":"使用 Google 登錄","user.login.oauth.github":"使用 GitHub 登錄","user.login.oauth.loading":"正在跳轉到授權頁面...","user.login.oauth.failed":"OAuth 登錄失敗","user.login.oauth.get-url-failed":"獲取授權鏈接失敗","user.login.subtitle":"驅動的全球市場量化洞察","user.login.legal.title":"法律免責聲明","user.login.legal.view":"查看法律免責聲明","user.login.legal.collapse":"收起法律免責聲明","user.login.legal.agree":"我已閱讀並同意法律免責聲明","user.login.legal.required":"請先閱讀並勾選法律免責聲明","user.login.legal.content":"QuantDinger 是一個 AI 多智能體股票分析輔助工具,不具備證券投資諮詢資質。平臺中的所有分析結果、評分、參考意見均由 AI 基於歷史數據自動生成,僅供學習、研究與技術交流使用,不構成任何投資建議或決策依據。股票投資存在市場風險、流動性風險、政策風險等多種風險,可能導致本金損失。用戶應基於自身風險承受能力獨立決策,使用本工具產生的任何投資行爲及其後果由用戶自行承擔。市場有風險,投資需謹慎。","user.login.privacy.title":"用戶隱私條款","user.login.privacy.view":"查看用戶隱私條款","user.login.privacy.collapse":"收起用戶隱私條款","user.login.privacy.content":"我們重視您的隱私與數據保護。1) 收集範圍:僅收集實現功能所需的信息(如郵箱、手機號、區號、Web3 錢包地址)以及必要的日志與設備信息。2) 使用目的:用於賬戶登錄與安全校驗、服務功能提供、問題排查與合規要求。3) 存儲與安全:數據加密存儲,並採取必要的權限與訪問控制措施,盡力防止未經授權的訪問、披露或丟失。4) 共享與第三方:除法律法規要求或履行服務所必需外,不會與第三方共享您的個人信息;若涉及第三方服務(如錢包、短信服務商),僅在實現功能所需的最小範圍內處理。5) Cookies/本地存儲:用於登錄態與必要的會話維持(如令牌、PHPSESSID),您可在瀏覽器中進行清理或限制。6) 個人權利:您可根據法律法規行使查詢、更正、刪除、撤回同意等權利。7) 變更與通知:本條款更新後將在頁面顯著位置提示。繼續使用本服務即表示您已閱讀並同意更新內容。若您不同意本條款或其中任何更新,請停止使用本服務並聯系我們。","account.basicInfo":"基礎信息","account.id":"用戶ID","account.username":"用戶名","account.nickname":"暱稱","account.email":"郵箱","account.mobile":"手機號","account.web3address":"錢包地址","account.pid":"推薦人ID","account.level":"用戶等級","account.money":"餘額","account.qdtBalance":"QDT 餘額","account.score":"積分","account.createtime":"注冊時間","account.inviteLink":"邀請鏈接","account.recharge":"充值","account.rechargeTip":"請使用微信或支付寶掃描下方二維碼進行充值","account.qrCodePlaceholder":"二維碼佔位符(模擬)","account.rechargeAmount":"充值金額","account.enterAmount":"請輸入充值金額","account.rechargeHint":"最小充值金額:1 QDT","account.confirmRecharge":"確認充值","account.enterValidAmount":"請輸入有效的充值金額","account.rechargeSuccess":"充值成功!已充值 {amount} QDT","account.settings.menuMap.basic":"基本設置","account.settings.menuMap.security":"安全設置","account.settings.menuMap.notification":"新消息通知","account.settings.menuMap.moneyLog":"資金明細","account.moneyLog.empty":"暫無資金明細","account.moneyLog.total":"共 {total} 條記錄","account.moneyLog.type.purchase":"購買指標","account.moneyLog.type.recharge":"充值","account.moneyLog.type.refund":"退款","account.moneyLog.type.reward":"獎勵","account.moneyLog.type.income":"指標收入","account.moneyLog.type.commission":"平臺手續費","wallet.balance":"QDT 餘額","wallet.recharge":"充值","wallet.withdraw":"提現","wallet.filter":"篩選","wallet.reset":"重置","wallet.totalRecharge":"累計充值","wallet.totalWithdraw":"累計提現","wallet.totalIncome":"累計收入","wallet.records":"交易記錄與資金明細","wallet.tradingRecords":"交易記錄","wallet.moneyLog":"資金明細","wallet.rechargeTip":"請使用微信或支付寶掃描下方二維碼進行充值","wallet.qrCodePlaceholder":"二維碼佔位符(模擬)","wallet.rechargeAmount":"充值金額","wallet.enterAmount":"請輸入充值金額","wallet.rechargeHint":"最小充值金額:1 QDT","wallet.confirmRecharge":"確認充值","wallet.enterValidAmount":"請輸入有效的充值金額","wallet.rechargeSuccess":"充值成功!已充值 {amount} QDT","wallet.rechargeFailed":"充值失敗","wallet.withdrawTip":"請輸入提現金額和提現地址","wallet.withdrawAmount":"提現金額","wallet.enterWithdrawAmount":"請輸入提現金額","wallet.withdrawHint":"最小提現金額:1 QDT","wallet.withdrawAddress":"提現地址(可選)","wallet.enterWithdrawAddress":"請輸入提現地址","wallet.confirmWithdraw":"確認提現","wallet.enterValidWithdrawAmount":"請輸入有效的提現金額","wallet.insufficientBalance":"餘額不足","wallet.withdrawSuccess":"提現成功!已提現 {amount} QDT","wallet.withdrawFailed":"提現失敗","wallet.noTradingRecords":"暫無交易記錄","wallet.noMoneyLog":"暫無資金明細","wallet.loadTradingRecordsFailed":"加載交易記錄失敗","wallet.loadMoneyLogFailed":"加載資金明細失敗","wallet.moneyLogTotal":"共 {total} 條記錄","wallet.moneyLogTypeTitle":"類型","wallet.moneyLogType.all":"全部類型","wallet.table.time":"時間","wallet.table.type":"類型","wallet.table.price":"價格","wallet.table.amount":"數量","wallet.table.money":"金額","wallet.table.balance":"餘額","wallet.table.memo":"備注","wallet.table.value":"價值","wallet.table.profit":"盈虧","wallet.table.commission":"手續費","wallet.table.total":"共 {total} 條記錄","wallet.tradeType.buy":"買入","wallet.tradeType.sell":"賣出","wallet.tradeType.liquidation":"強平","wallet.tradeType.openLong":"開多","wallet.tradeType.addLong":"加多","wallet.tradeType.closeLong":"平多","wallet.tradeType.closeLongStop":"止損平多","wallet.tradeType.closeLongProfit":"止盈平多","wallet.tradeType.openShort":"開空","wallet.tradeType.addShort":"加空","wallet.tradeType.closeShort":"平空","wallet.tradeType.closeShortStop":"止損平空","wallet.tradeType.closeShortProfit":"止盈平空","wallet.moneyLogType.purchase":"購買指標","wallet.moneyLogType.recharge":"充值","wallet.moneyLogType.withdraw":"提現","wallet.moneyLogType.refund":"退款","wallet.moneyLogType.reward":"獎勵","wallet.moneyLogType.income":"收入","wallet.moneyLogType.commission":"手續費","wallet.web3Address.required":"請先填寫Web3錢包地址","wallet.web3Address.requiredDescription":"充值前需要先綁定您的Web3錢包地址,用於接收充值","wallet.web3Address.placeholder":"請輸入您的Web3錢包地址(0x開頭)","wallet.web3Address.save":"保存錢包地址","wallet.web3Address.saveSuccess":"錢包地址保存成功","wallet.web3Address.saveFailed":"保存錢包地址失敗","wallet.web3Address.invalidFormat":"請輸入有效的Web3錢包地址(以太坊格式:0x開頭42位字符,或TRC20格式:T開頭34位字符)","wallet.selectCoin":"選擇幣種","wallet.selectChain":"選擇鏈","wallet.chain.eth":"ETH(ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"BSC","wallet.targetQdtAmount":"想要兌換的QDT數量(可選)","wallet.targetQdtAmount.placeholder":"請輸入想要兌換的QDT數量,當前QDT價格:{price} USDT","wallet.targetQdtAmount.requiredUsdt":"需要充值:{amount} USDT","wallet.rechargeAddress":"充值地址","wallet.copyAddress":"復制","wallet.copySuccess":"復制成功!","wallet.copyFailed":"復制失敗,請手動復制","wallet.rechargeAddressHint":"請確保使用{chain}鏈向此地址充值{coin}","wallet.qdtPrice.loading":"加載中...","wallet.rechargeTip.new":"請選擇幣種和鏈,然後掃描下方二維碼進行充值","wallet.exchangeRate":"1 QDT ≈ {rate} USDT","wallet.withdrawableAmount":"可提現金額","wallet.totalBalance":"總餘額","wallet.insufficientWithdrawable":"可提現金額不足,當前可提現:{amount} QDT","wallet.withdrawAddressRequired":"請輸入提現地址","wallet.withdrawAddressHint":"請確保地址正確,提現後無法撤銷","wallet.withdrawSubmitSuccess":"提現申請提交成功,請等待審核","menu.footer.contactUs":"聯系我們","menu.footer.getSupport":"獲取支持","menu.footer.socialAccounts":"社交賬戶","menu.footer.userAgreement":"用戶協議","menu.footer.privacyPolicy":"隱私條例","menu.footer.support":"Support","menu.footer.featureRequest":"Feature request","menu.footer.email":"Email","menu.footer.liveChat":"24/7 live chat","dashboard.analysis.title":"Multi-Dimensional Analysis","dashboard.analysis.subtitle":"AI驅動的綜合金融分析平臺","dashboard.analysis.selectSymbol":"選擇或輸入標的代碼","dashboard.analysis.selectModel":"選擇模型","dashboard.analysis.startAnalysis":"開始分析","dashboard.analysis.history":"歷史記錄","dashboard.analysis.tab.overview":"綜合分析","dashboard.analysis.tab.fundamental":"基本面","dashboard.analysis.tab.technical":"技術","dashboard.analysis.tab.news":"新聞","dashboard.analysis.tab.sentiment":"情緒","dashboard.analysis.tab.risk":"風險","dashboard.analysis.tab.debate":"多空辯論","dashboard.analysis.tab.decision":"最終決策","dashboard.analysis.empty.selectSymbol":"選擇標的開始分析","dashboard.analysis.empty.selectSymbolDesc":"從自選股列表中選擇或輸入標的代碼,獲取多維度AI分析報告","dashboard.analysis.empty.startAnalysis":'點擊"開始分析"按鈕進行多維度分析',"dashboard.analysis.empty.startAnalysisDesc":"我們將從基本面、技術、新聞、情緒和風險等多個維度爲您提供全面的分析","dashboard.analysis.empty.noData":"暫無{type}分析數據,請先進行綜合分析","dashboard.analysis.empty.noWatchlist":"暫無自選股","dashboard.analysis.empty.noHistory":"暫無歷史記錄","dashboard.analysis.empty.watchlistHint":"暫無自選股,請先","dashboard.analysis.empty.noDebateData":"暫無辯論數據","dashboard.analysis.empty.noDecisionData":"暫無決策數據","dashboard.analysis.empty.selectAgent":"請選擇一個 Agent 查看分析結果","dashboard.analysis.loading.analyzing":"正在分析中,請稍候...","dashboard.analysis.loading.fundamental":"正在分析基本面數據...","dashboard.analysis.loading.technical":"正在分析技術指標...","dashboard.analysis.loading.news":"正在分析新聞數據...","dashboard.analysis.loading.sentiment":"正在分析市場情緒...","dashboard.analysis.loading.risk":"正在評估風險...","dashboard.analysis.loading.debate":"正在進行多空辯論...","dashboard.analysis.loading.decision":"正在生成最終決策...","dashboard.analysis.score.overall":"綜合評分","dashboard.analysis.score.recommendation":"投資建議","dashboard.analysis.score.confidence":"置信度","dashboard.analysis.dimension.fundamental":"基本面","dashboard.analysis.dimension.technical":"技術","dashboard.analysis.dimension.news":"新聞","dashboard.analysis.dimension.sentiment":"情緒","dashboard.analysis.dimension.risk":"風險","dashboard.analysis.card.dimensionScores":"各維度評分","dashboard.analysis.card.overviewReport":"綜合分析報告","dashboard.analysis.card.financialMetrics":"財務指標","dashboard.analysis.card.fundamentalReport":"基本面分析報告","dashboard.analysis.card.technicalIndicators":"技術指標","dashboard.analysis.card.technicalReport":"技術分析報告","dashboard.analysis.card.newsList":"相關新聞","dashboard.analysis.card.newsReport":"新聞分析報告","dashboard.analysis.card.sentimentIndicators":"情緒指標","dashboard.analysis.card.sentimentReport":"情緒分析報告","dashboard.analysis.card.riskMetrics":"風險指標","dashboard.analysis.card.riskReport":"風險評估報告","dashboard.analysis.card.bullView":"看漲觀點 (Bull)","dashboard.analysis.card.bearView":"看跌觀點 (Bear)","dashboard.analysis.card.researchConclusion":"研究員結論","dashboard.analysis.card.traderPlan":"交易員計劃","dashboard.analysis.card.riskDebate":"風險委員會辯論","dashboard.analysis.card.finalDecision":"最終決策 (Final Decision)","dashboard.analysis.card.tradePlanDetail":"交易計劃詳情","dashboard.analysis.tradingPlan.entry_price":"入場價格","dashboard.analysis.tradingPlan.position_size":"倉位大小","dashboard.analysis.tradingPlan.stop_loss":"止損","dashboard.analysis.tradingPlan.take_profit":"止盈","dashboard.analysis.label.confidence":"置信度","dashboard.analysis.label.keyPoints":"核心要點","dashboard.analysis.label.riskWarning":"風險提示","dashboard.analysis.risk.risky":"激進派觀點 (Risky)","dashboard.analysis.risk.neutral":"中立派觀點 (Neutral)","dashboard.analysis.risk.safe":"保守派觀點 (Safe)","dashboard.analysis.risk.conclusion":"結論","dashboard.analysis.feature.fundamental":"基本面分析","dashboard.analysis.feature.technical":"技術分析","dashboard.analysis.feature.news":"新聞分析","dashboard.analysis.feature.sentiment":"情緒分析","dashboard.analysis.feature.risk":"風險評估","dashboard.analysis.watchlist.title":"我的自選股","dashboard.analysis.watchlist.add":"添加","dashboard.analysis.watchlist.addStock":"添加股票","dashboard.analysis.modal.addStock.title":"添加自選股","dashboard.analysis.modal.addStock.confirm":"確定","dashboard.analysis.modal.addStock.cancel":"取消","dashboard.analysis.modal.addStock.market":"市場類型","dashboard.analysis.modal.addStock.marketPlaceholder":"請選擇市場","dashboard.analysis.modal.addStock.marketRequired":"請選擇市場類型","dashboard.analysis.modal.addStock.symbol":"股票代碼","dashboard.analysis.modal.addStock.symbolPlaceholder":"例如: AAPL, TSLA, GOOGL, 000001, BTC","dashboard.analysis.modal.addStock.symbolRequired":"請輸入股票代碼","dashboard.analysis.modal.addStock.searchPlaceholder":"搜索標的代碼或名稱","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"搜索或輸入標的代碼(如:AAPL、BTC/USDT、EUR/USD)","dashboard.analysis.modal.addStock.searchOrInputHint":"支持搜索數據庫中的標的,或直接輸入代碼(系統將自動獲取名稱)","dashboard.analysis.modal.addStock.search":"搜索","dashboard.analysis.modal.addStock.searchResults":"搜索結果","dashboard.analysis.modal.addStock.hotSymbols":"熱門標的","dashboard.analysis.modal.addStock.noHotSymbols":"暫無熱門標的","dashboard.analysis.modal.addStock.selectedSymbol":"已選標的","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"請先選擇一個標的","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"請先選擇一個標的或輸入標的代碼","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"請輸入標的代碼","dashboard.analysis.modal.addStock.pleaseSelectMarket":"請先選擇市場類型","dashboard.analysis.modal.addStock.searchFailed":"搜索失敗,請稍後重試","dashboard.analysis.modal.addStock.noSearchResults":"未找到匹配的標的","dashboard.analysis.modal.addStock.willAutoFetchName":"系統將自動獲取名稱","dashboard.analysis.modal.addStock.addDirectly":"直接添加","dashboard.analysis.modal.addStock.nameWillBeFetched":"名稱將在添加時自動獲取","dashboard.analysis.market.USStock":"美股","dashboard.analysis.market.Crypto":"加密貨幣","dashboard.analysis.market.Forex":"外匯","dashboard.analysis.market.Futures":"期貨","dashboard.analysis.modal.history.title":"歷史分析記錄","dashboard.analysis.modal.history.viewResult":"查看結果","dashboard.analysis.modal.history.completeTime":"完成時間","dashboard.analysis.modal.history.error":"錯誤","dashboard.analysis.status.pending":"待處理","dashboard.analysis.status.processing":"處理中","dashboard.analysis.status.completed":"已完成","dashboard.analysis.status.failed":"失敗","dashboard.analysis.message.selectSymbol":"請先選擇標的","dashboard.analysis.message.taskCreated":"分析任務已創建,正在後臺執行...","dashboard.analysis.message.analysisComplete":"分析完成","dashboard.analysis.message.analysisCompleteCache":"分析完成(使用緩存數據)","dashboard.analysis.message.analysisFailed":"分析失敗,請稍後重試","dashboard.analysis.message.addStockSuccess":"添加成功","dashboard.analysis.message.addStockFailed":"添加失敗","dashboard.analysis.message.removeStockSuccess":"移除成功","dashboard.analysis.message.removeStockFailed":"移除失敗","dashboard.analysis.message.resumingAnalysis":"正在恢復分析任務...","dashboard.analysis.message.deleteSuccess":"刪除成功","dashboard.analysis.message.deleteFailed":"刪除失敗","dashboard.analysis.modal.history.delete":"刪除","dashboard.analysis.modal.history.deleteConfirm":"確定要刪除這條分析記錄嗎?","dashboard.analysis.test":"工專路 {no} 號店","dashboard.analysis.introduce":"指標說明","dashboard.analysis.total-sales":"總銷售額","dashboard.analysis.day-sales":"日均銷售額¥","dashboard.analysis.visits":"訪問量","dashboard.analysis.visits-trend":"訪問量趨勢","dashboard.analysis.visits-ranking":"門店訪問量排名","dashboard.analysis.day-visits":"日訪問量","dashboard.analysis.week":"周同比","dashboard.analysis.day":"日同比","dashboard.analysis.payments":"支付筆數","dashboard.analysis.conversion-rate":"轉化率","dashboard.analysis.operational-effect":"運營活動效果","dashboard.analysis.sales-trend":"銷售趨勢","dashboard.analysis.sales-ranking":"門店銷售額排名","dashboard.analysis.all-year":"全年","dashboard.analysis.all-month":"本月","dashboard.analysis.all-week":"本周","dashboard.analysis.all-day":"今日","dashboard.analysis.search-users":"搜索用戶數","dashboard.analysis.per-capita-search":"人均搜索次數","dashboard.analysis.online-top-search":"線上熱門搜索","dashboard.analysis.the-proportion-of-sales":"銷售額類別佔比","dashboard.analysis.dropdown-option-one":"操作一","dashboard.analysis.dropdown-option-two":"操作二","dashboard.analysis.channel.all":"全部渠道","dashboard.analysis.channel.online":"線上","dashboard.analysis.channel.stores":"門店","dashboard.analysis.sales":"銷售額","dashboard.analysis.traffic":"客流量","dashboard.analysis.table.rank":"排名","dashboard.analysis.table.search-keyword":"搜索關鍵詞","dashboard.analysis.table.users":"用戶數","dashboard.analysis.table.weekly-range":"周漲幅","dashboard.indicator.selectSymbol":"選擇或輸入標的代碼","dashboard.indicator.emptyWatchlistHint":"暫無自選股,請先添加","dashboard.indicator.hint.selectSymbol":"請選擇標的開始分析","dashboard.indicator.hint.selectSymbolDesc":"在上方搜索框中選擇或輸入股票代碼,查看K線圖表和技術指標","dashboard.indicator.retry":"重試","dashboard.indicator.panel.title":"技術指標","dashboard.indicator.panel.realtimeOn":"關閉實時更新","dashboard.indicator.panel.realtimeOff":"開啓實時更新","dashboard.indicator.panel.themeLight":"切換到深色主題","dashboard.indicator.panel.themeDark":"切換到淺色主題","dashboard.indicator.section.enabled":"已啓用","dashboard.indicator.section.added":"我添加的指標","dashboard.indicator.section.custom":"自己創建的指標","dashboard.indicator.section.bought":"我選購的指標","dashboard.indicator.section.myCreated":"我創建的指標","dashboard.indicator.empty":"暫無指標,請先添加或創建指標","dashboard.indicator.buy":"購買指標","dashboard.indicator.action.start":"啓動","dashboard.indicator.action.stop":"關閉","dashboard.indicator.action.edit":"編輯","dashboard.indicator.action.delete":"刪除","dashboard.indicator.action.backtest":"回測","dashboard.indicator.status.normal":"正常","dashboard.indicator.status.normalPermanent":"正常(永久有效)","dashboard.indicator.status.expired":"已過期","dashboard.indicator.expiry.permanent":"永久有效","dashboard.indicator.expiry.noExpiry":"無到期時間","dashboard.indicator.expiry.expired":"已過期:{date}","dashboard.indicator.expiry.expiresOn":"到期時間:{date}","dashboard.indicator.delete.confirmTitle":"確認刪除","dashboard.indicator.delete.confirmContent":'確定要刪除指標"{name}"嗎?此操作不可恢復。',"dashboard.indicator.delete.confirmOk":"刪除","dashboard.indicator.delete.confirmCancel":"取消","dashboard.indicator.delete.success":"刪除成功","dashboard.indicator.delete.failed":"刪除失敗","dashboard.indicator.save.success":"保存成功","dashboard.indicator.save.failed":"保存失敗","dashboard.indicator.error.loadWatchlistFailed":"加載自選股失敗","dashboard.indicator.error.chartNotReady":"圖表組件未初始化,請先選擇標的並等待圖表加載完成","dashboard.indicator.error.chartMethodNotReady":"圖表組件方法未就緒,請稍後重試","dashboard.indicator.error.chartExecuteNotReady":"圖表組件執行方法未就緒,請稍後重試","dashboard.indicator.error.parseFailed":"無法解析Python代碼","dashboard.indicator.error.parseFailedCheck":"無法解析Python代碼,請檢查代碼格式","dashboard.indicator.error.addIndicatorFailed":"添加指標失敗","dashboard.indicator.error.runIndicatorFailed":"運行指標失敗","dashboard.indicator.error.pleaseLogin":"請先登錄","dashboard.indicator.error.loadDataFailed":"數據加載失敗","dashboard.indicator.error.loadDataFailedDesc":"請檢查網絡連接","dashboard.indicator.error.tiingoSubscription":"外匯1分鐘數據需要 Tiingo 付費訂閱,請使用其他時間週期或升級訂閱","dashboard.indicator.error.pythonEngineFailed":"Python 引擎加載失敗,指標功能可能無法使用","dashboard.indicator.error.chartInitFailed":"圖表初始化失敗","dashboard.indicator.warning.enterCode":"請先輸入指標代碼","dashboard.indicator.warning.pyodideLoadFailed":"Python 引擎加載失敗","dashboard.indicator.warning.pyodideLoadFailedDesc":"您當前所在區域或網絡環境無法使用該功能","dashboard.indicator.warning.chartNotInitialized":"圖表未初始化,無法使用畫線工具","dashboard.indicator.success.runIndicator":"指標運行成功","dashboard.indicator.success.clearDrawings":"已清除所有畫線","dashboard.indicator.sma":"SMA (均線組合)","dashboard.indicator.ema":"EMA (指數均線組合)","dashboard.indicator.rsi":"RSI (相對強弱)","dashboard.indicator.macd":"MACD","dashboard.indicator.bb":"布林帶 (Bollinger Bands)","dashboard.indicator.atr":"ATR (平均真實波幅)","dashboard.indicator.cci":"CCI (商品通道指數)","dashboard.indicator.williams":"Williams %R (威廉指標)","dashboard.indicator.mfi":"MFI (資金流量指標)","dashboard.indicator.adx":"ADX (平均趨向指數)","dashboard.indicator.obv":"OBV (能量潮)","dashboard.indicator.adosc":"ADOSC (積累/派發振蕩器)","dashboard.indicator.ad":"AD (積累/派發線)","dashboard.indicator.kdj":"KDJ (隨機指標)","dashboard.indicator.signal.buy":"BUY","dashboard.indicator.signal.sell":"SELL","dashboard.indicator.signal.supertrendBuy":"SuperTrend Buy","dashboard.indicator.signal.supertrendSell":"SuperTrend Sell","dashboard.indicator.chart.kline":"K線","dashboard.indicator.chart.volume":"成交量","dashboard.indicator.chart.uptrend":"Up Trend","dashboard.indicator.chart.downtrend":"Down Trend","dashboard.indicator.tooltip.time":"時間","dashboard.indicator.tooltip.open":"開","dashboard.indicator.tooltip.close":"收","dashboard.indicator.tooltip.high":"高","dashboard.indicator.tooltip.low":"低","dashboard.indicator.tooltip.volume":"成交量","dashboard.indicator.drawing.line":"線段","dashboard.indicator.drawing.horizontalLine":"水平線","dashboard.indicator.drawing.verticalLine":"垂直線","dashboard.indicator.drawing.ray":"射線","dashboard.indicator.drawing.straightLine":"直線","dashboard.indicator.drawing.parallelLine":"平行線","dashboard.indicator.drawing.priceLine":"價格線","dashboard.indicator.drawing.priceChannel":"價格通道","dashboard.indicator.drawing.fibonacciLine":"斐波那契線","dashboard.indicator.drawing.measure":"測量","dashboard.indicator.drawing.clearAll":"清除所有畫線","dashboard.indicator.market.USStock":"美股","dashboard.indicator.market.Crypto":"加密貨幣","dashboard.indicator.market.Forex":"外匯","dashboard.indicator.market.Futures":"期貨","dashboard.indicator.create":"創建指標","dashboard.indicator.editor.title":"創建/編輯指標","dashboard.indicator.editor.name":"指標名稱","dashboard.indicator.editor.nameRequired":"請輸入指標名稱","dashboard.indicator.editor.namePlaceholder":"請輸入指標名稱","dashboard.indicator.editor.description":"指標描述","dashboard.indicator.editor.descriptionPlaceholder":"請輸入指標描述(可選)","dashboard.indicator.editor.code":"指標腳本(Python)","dashboard.indicator.editor.codeRequired":"請輸入指標代碼","dashboard.indicator.editor.codePlaceholder":"請輸入Python代碼","dashboard.indicator.editor.run":"運行","dashboard.indicator.editor.runHint":"點擊運行按鈕可以在K線圖上預覽指標效果","dashboard.indicator.editor.guide":"開發指南","dashboard.indicator.editor.guideTitle":"Python 指標開發指南","dashboard.indicator.editor.save":"保存","dashboard.indicator.editor.cancel":"取消","dashboard.indicator.editor.unnamed":"未命名指標","dashboard.indicator.editor.publishToCommunity":"發布到社區","dashboard.indicator.editor.publishToCommunityHint":"發布後,其他用戶可以在社區中查看和使用您的指標","dashboard.indicator.editor.indicatorType":"指標類型","dashboard.indicator.editor.indicatorTypeRequired":"請選擇指標類型","dashboard.indicator.editor.indicatorTypePlaceholder":"請選擇指標類型","dashboard.indicator.editor.previewImage":"預覽圖","dashboard.indicator.editor.uploadImage":"上傳圖片","dashboard.indicator.editor.previewImageHint":"建議尺寸:800x400,大小不超過2MB","dashboard.indicator.editor.pricing":"售價(QDT)","dashboard.indicator.editor.pricingType.free":"免費","dashboard.indicator.editor.pricingType.permanent":"永久","dashboard.indicator.editor.pricingType.monthly":"月付","dashboard.indicator.editor.price":"價格","dashboard.indicator.editor.priceRequired":"請輸入價格","dashboard.indicator.editor.pricePlaceholder":"請輸入價格","dashboard.indicator.editor.pricingHint":"免費指標雖然價格爲0,但平臺會根據您的指標使用量和好評率給予獎勵(QDT)","dashboard.indicator.editor.aiGenerate":"智能生成","dashboard.indicator.editor.aiPromptPlaceholder":"請描述你的信號邏輯(只輸出 buy/sell)與繪圖(plots)。倉位/風控/加減倉請在回測配置中設定。","dashboard.indicator.editor.aiGenerateBtn":"AI生成代碼","dashboard.indicator.editor.aiPromptRequired":"請輸入您的想法","dashboard.indicator.editor.aiGenerateSuccess":"代碼生成成功","dashboard.indicator.editor.aiGenerateError":"代碼生成失敗,請稍後重試","dashboard.indicator.editor.verifyCode":"代碼檢查","dashboard.indicator.editor.verifyCodeSuccess":"代碼檢查通過","dashboard.indicator.editor.verifyCodeFailed":"代碼檢查未通過","dashboard.indicator.editor.verifyCodeEmpty":"代碼不能為空","dashboard.indicator.boundary.message":"提示:指標腳本只負責「計算 + 繪圖 + buy/sell 信號」;倉位、風控、加減倉、手續費/滑點屬於策略執行配置。","dashboard.indicator.boundary.indicatorRule":"指標腳本請只輸出 buy/sell(並設定 df['buy']/df['sell'])。不要在腳本內撰寫倉位管理、止盈止損、加減倉。","dashboard.indicator.boundary.backtestRule":"規則:同一根K線若出現主信號(buy/sell→開/平倉/反手),本K線將跳過所有加倉與減倉。","dashboard.indicator.backtest.title":"指標回測","dashboard.indicator.backtest.config":"回測參數","dashboard.indicator.backtest.startDate":"開始日期","dashboard.indicator.backtest.endDate":"結束日期","dashboard.indicator.backtest.selectStartDate":"選擇開始日期","dashboard.indicator.backtest.selectEndDate":"選擇結束日期","dashboard.indicator.backtest.startDateRequired":"請選擇開始日期","dashboard.indicator.backtest.endDateRequired":"請選擇結束日期","dashboard.indicator.backtest.initialCapital":"初始資金","dashboard.indicator.backtest.initialCapitalRequired":"請輸入初始資金","dashboard.indicator.backtest.commission":"手續費率(%)","dashboard.indicator.backtest.commissionHint":"按名義價值(含槓桿)收取;每筆成交(開/平倉)都會從餘額扣除。","dashboard.indicator.backtest.leverage":"槓杆倍率","dashboard.indicator.backtest.timeframe":"K線週期","dashboard.indicator.backtest.tradeDirection":"交易方向","dashboard.indicator.backtest.longOnly":"做多","dashboard.indicator.backtest.shortOnly":"做空","dashboard.indicator.backtest.both":"雙向","dashboard.indicator.backtest.run":"開始回測","dashboard.indicator.backtest.rerun":"重新回測","dashboard.indicator.backtest.close":"關閉","dashboard.indicator.backtest.running":"正在進行指標回測...","dashboard.indicator.backtest.loadingTip1":"正在獲取歷史K線數據...","dashboard.indicator.backtest.loadingTip2":"正在執行策略信號計算...","dashboard.indicator.backtest.loadingTip3":"正在模擬交易執行...","dashboard.indicator.backtest.loadingTip4":"正在計算回測指標...","dashboard.indicator.backtest.loadingTip5":"即將完成,請稍候...","dashboard.indicator.backtest.results":"回測結果","dashboard.indicator.backtest.totalReturn":"總收益率","dashboard.indicator.backtest.annualReturn":"年化收益","dashboard.indicator.backtest.maxDrawdown":"最大回撤","dashboard.indicator.backtest.sharpeRatio":"夏普比率","dashboard.indicator.backtest.winRate":"勝率","dashboard.indicator.backtest.profitFactor":"盈虧比","dashboard.indicator.backtest.totalTrades":"交易次數","dashboard.indicator.totalReturn":"總收益率","dashboard.indicator.annualReturn":"年化收益率","dashboard.indicator.maxDrawdown":"最大回撤","dashboard.indicator.sharpeRatio":"夏普比率","dashboard.indicator.winRate":"勝率","dashboard.indicator.profitFactor":"盈虧比","dashboard.indicator.totalTrades":"總交易次數","dashboard.indicator.backtest.totalCommission":"總手續費","dashboard.indicator.backtest.equityCurve":"收益曲線","dashboard.indicator.backtest.strategy":"指標收益","dashboard.indicator.backtest.benchmark":"基準收益","dashboard.indicator.backtest.tradeHistory":"交易記錄","dashboard.indicator.backtest.tradeTime":"時間","dashboard.indicator.backtest.tradeType":"類型","dashboard.indicator.backtest.buy":"買入","dashboard.indicator.backtest.sell":"賣出","dashboard.indicator.backtest.liquidation":"爆倉","dashboard.indicator.backtest.openLong":"開多","dashboard.indicator.backtest.closeLong":"平多","dashboard.indicator.backtest.closeLongStop":"平多(止損)","dashboard.indicator.backtest.closeLongProfit":"平多(止盈)","dashboard.indicator.backtest.addLong":"加多倉","dashboard.indicator.backtest.openShort":"開空","dashboard.indicator.backtest.closeShort":"平空","dashboard.indicator.backtest.closeShortStop":"平空(止損)","dashboard.indicator.backtest.closeShortProfit":"平空(止盈)","dashboard.indicator.backtest.addShort":"加空倉","dashboard.indicator.backtest.price":"價格","dashboard.indicator.backtest.amount":"數量","dashboard.indicator.backtest.balance":"賬戶餘額","dashboard.indicator.backtest.profit":"盈虧","dashboard.indicator.backtest.success":"回測完成","dashboard.indicator.backtest.failed":"回測失敗,請稍後重試","dashboard.indicator.backtest.quickSelect":"快速選擇","dashboard.indicator.backtest.precisionMode":"回測精度模式","dashboard.indicator.backtest.estimatedCandles":"預計處理約 {count} 根K線","dashboard.indicator.backtest.highPrecisionDesc":"使用1分鐘級別K線進行高精度回測,止損止盈觸發更精確","dashboard.indicator.backtest.mediumPrecisionDesc":"回測區間超過30天,使用5分鐘級別K線以平衡精度與性能","dashboard.indicator.backtest.standardModeWarning":"使用標準回測模式","dashboard.indicator.backtest.standardModeDesc":"當前配置不支持高精度回測,將使用策略K線進行回測","dashboard.indicator.backtest.onlyCryptoSupported":"高精度回測僅支持加密貨幣市場","dashboard.indicator.backtest.noIndicatorCode":"該指標沒有可回測的代碼","dashboard.indicator.backtest.noSymbol":"請先選擇交易標的","dashboard.indicator.backtest.dateRangeExceeded":"回測時間範圍超出限制:{timeframe}周期最多可回測{maxRange}","dashboard.indicator.backtest.dateRangeExceededDays":"回測時間範圍超出限制:{timeframe}周期最多可回測{maxRange}({maxDays}天)","dashboard.indicator.backtest.metaLine":"標的:{symbol} | 市場:{market} | 週期:{timeframe}","dashboard.indicator.backtest.savedRunId":"回測已保存,記錄ID:{id}","dashboard.indicator.backtest.historyTitle":"回測記錄","dashboard.indicator.backtest.historyRefresh":"重新整理","dashboard.indicator.backtest.historyView":"查看","dashboard.indicator.backtest.historyNoData":"暫無回測記錄","dashboard.indicator.backtest.historyUseCurrent":"僅目前幣種/週期","dashboard.indicator.backtest.historyFilterSymbol":"幣種(Symbol)","dashboard.indicator.backtest.historyFilterTimeframe":"週期(Timeframe)","dashboard.indicator.backtest.historyApply":"套用篩選","dashboard.indicator.backtest.historyAIAnalyze":"AI分析","dashboard.indicator.backtest.historyAIAnalyzeTitle":"AI 分析建議","dashboard.indicator.backtest.historyNoAIResult":"暫無 AI 分析結果","dashboard.indicator.backtest.historyRunId":"記錄ID","dashboard.indicator.backtest.historyCreatedAt":"時間","dashboard.indicator.backtest.historyRange":"區間","dashboard.indicator.backtest.historyStatus":"狀態","dashboard.indicator.backtest.historyStatusSuccess":"成功","dashboard.indicator.backtest.historyStatusFailed":"失敗","dashboard.indicator.backtest.historyActions":"操作","dashboard.indicator.backtest.prev":"上一步","dashboard.indicator.backtest.next":"下一步","dashboard.indicator.backtest.steps.strategy.title":"執行配置","dashboard.indicator.backtest.steps.strategy.desc":"倉位/風控/加減倉(策略層)","dashboard.indicator.backtest.steps.trading.title":"回測環境","dashboard.indicator.backtest.steps.trading.desc":"時間/資金/費率/槓桿/滑點","dashboard.indicator.backtest.steps.results.title":"結果","dashboard.indicator.backtest.steps.results.desc":"統計與交易明細","dashboard.indicator.backtest.panel.risk":"執行配置:風控(止損/移動止盈)","dashboard.indicator.backtest.panel.scale":"執行配置:加倉(順勢/逆勢)","dashboard.indicator.backtest.panel.reduce":"執行配置:減倉(順勢/逆勢)","dashboard.indicator.backtest.panel.position":"執行配置:開倉倉位","dashboard.indicator.backtest.field.stopLossPct":"止損(%)","dashboard.indicator.backtest.field.takeProfitPct":"止盈(%)","dashboard.indicator.backtest.field.trailingEnabled":"移動止盈","dashboard.indicator.backtest.field.trailingStopPct":"移動回撤(%)","dashboard.indicator.backtest.field.trailingActivationPct":"移動止盈激活(%)","dashboard.indicator.backtest.field.slippage":"滑點(%)","dashboard.indicator.backtest.field.trendAddEnabled":"順勢加倉","dashboard.indicator.backtest.field.dcaAddEnabled":"逆勢加倉","dashboard.indicator.backtest.field.trendAddStepPct":"加倉觸發(%)","dashboard.indicator.backtest.field.dcaAddStepPct":"加倉觸發(%)","dashboard.indicator.backtest.field.trendAddSizePct":"每次加倉資金占比(%)","dashboard.indicator.backtest.field.dcaAddSizePct":"每次加倉資金占比(%)","dashboard.indicator.backtest.field.trendAddMaxTimes":"最多加倉次數","dashboard.indicator.backtest.field.dcaAddMaxTimes":"最多加倉次數","dashboard.indicator.backtest.field.trendReduceEnabled":"順勢減倉","dashboard.indicator.backtest.field.adverseReduceEnabled":"逆勢減倉","dashboard.indicator.backtest.field.trendReduceStepPct":"順勢觸發(%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"逆勢觸發(%)","dashboard.indicator.backtest.field.trendReduceSizePct":"每次減倉比例(%)","dashboard.indicator.backtest.field.adverseReduceSizePct":"每次逆勢減倉比例(%)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"最多順勢減倉次數","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"最多逆勢減倉次數","dashboard.indicator.backtest.field.entryPct":"開倉資金占比(%)","dashboard.indicator.backtest.field.minOrderPct":"單次最小資金占比(%)(可選)","dashboard.indicator.backtest.hint.entryPctMax":"最大可開倉:{maxPct}%(為後續加倉預留資金)","dashboard.indicator.backtest.closeLongTrailing":"平多(移動止損/止盈)","dashboard.indicator.backtest.reduceLong":"多頭減倉","dashboard.indicator.backtest.closeShortTrailing":"平空(移動止損/止盈)","dashboard.indicator.backtest.reduceShort":"空頭減倉","dashboard.docs.title":"文檔中心","dashboard.docs.search.placeholder":"搜索文檔...","dashboard.docs.category.all":"全部","dashboard.docs.category.guide":"開發指南","dashboard.docs.category.api":"API文檔","dashboard.docs.category.tutorial":"教程","dashboard.docs.category.faq":"常見問題","dashboard.docs.featured.title":"推薦文檔","dashboard.docs.featured.tag":"推薦","dashboard.docs.list.views":"瀏覽","dashboard.docs.list.author":"作者","dashboard.docs.list.empty":"暫無文檔","dashboard.docs.list.backToAll":"返回全部文檔","dashboard.docs.list.total":"共 {count} 篇文檔","dashboard.docs.detail.back":"返回文檔列表","dashboard.docs.detail.updatedAt":"更新於","dashboard.docs.detail.related":"相關文檔","dashboard.docs.detail.notFound":"文檔不存在","dashboard.docs.detail.error":"文檔不存在或已被刪除","dashboard.docs.search.result":"搜索結果","dashboard.docs.search.keyword":"關鍵詞","community.filter.indicatorType":"指標類型","community.filter.all":"全部","community.filter.other":"其他選項","community.filter.pricing":"定價類型","community.filter.allPricing":"全部定價","community.filter.sortBy":"排序方式","community.filter.search":"搜索","community.filter.searchPlaceholder":"搜索指標名稱","community.indicatorType.trend":"趨勢型","community.indicatorType.momentum":"動量型","community.indicatorType.volatility":"波動率","community.indicatorType.volume":"成交量","community.indicatorType.custom":"自定義","community.pricing.free":"免費","community.pricing.paid":"付費","community.sort.downloads":"下載量","community.sort.rating":"評分","community.sort.newest":"最新發布","community.pagination.total":"共 {total} 個指標","community.noDescription":"暫無描述","community.detail.type":"類型","community.detail.pricing":"定價","community.detail.rating":"評分","community.detail.downloads":"下載量","community.detail.author":"作者","community.detail.description":"簡介","community.detail.detailContent":"詳細說明","community.detail.backtestStats":"回測統計","community.action.purchase":"購買指標","community.action.addToMyIndicators":"添加到我的指標","community.action.favorite":"收藏","community.action.unfavorite":"取消收藏","community.action.buyNow":"立即購買","community.action.renew":"續費","community.purchase.price":"價格","community.purchase.permanent":"永久","community.purchase.monthly":"月","community.purchase.confirmBuy":"確認購買該指標({price} QDT)?","community.purchase.confirmRenew":"確認續費該指標({price} QDT/月)?","community.purchase.confirmFree":"確認添加該免費指標?","community.purchase.confirmTitle":"確認操作","community.purchase.owned":"您已購買該指標(永久有效)","community.purchase.ownIndicator":"這是您發布的指標","community.purchase.expired":"您的訂閱已過期","community.purchase.expiresOn":"到期時間:{date}","community.tabs.detail":"指標詳情","community.tabs.backtest":"回測數據","community.tabs.ratings":"用戶評價","community.rating.myRating":"我的評分","community.rating.stars":"{count} 星","community.rating.commentPlaceholder":"分享您的使用體驗...","community.rating.submit":"提交評分","community.rating.modify":"修改","community.rating.saveModify":"保存修改","community.rating.cancel":"取消","community.rating.selectRating":"請選擇評分","community.rating.success":"評分成功","community.rating.modifySuccess":"修改評價成功","community.rating.failed":"評分失敗","community.rating.noRatings":"暫無評價","community.backtest.note":"以上數據爲歷史回測結果,僅供參考,不代表未來收益","community.backtest.noData":"暫無回測數據","community.backtest.uploadHint":"作者尚未上傳回測數據","community.message.loadFailed":"加載指標列表失敗","community.message.purchaseProcessing":"正在處理購買請求...","community.message.downloadSuccess":"指標已添加到我的指標列表","community.message.favoriteSuccess":"收藏成功","community.message.unfavoriteSuccess":"取消收藏成功","community.message.operationSuccess":"操作成功","community.message.operationFailed":"操作失敗","community.banner.readOnly":"僅供瀏覽","community.banner.loginHint":"如需登錄註冊請點擊按鈕跳轉到獨立頁面,從而避免CSRF問題","community.banner.jumpButton":"跳轉到登錄/註冊","dashboard.totalEquity":"總權益","dashboard.totalPnL":"總盈虧","dashboard.aiStrategies":"AI 策略","dashboard.indicatorStrategies":"指標策略","dashboard.running":"運行中","dashboard.enabled":"已啟用","dashboard.pnlHistory":"歷史盈虧","dashboard.strategyPerformance":"策略盈虧佔比","dashboard.drawdown":"回撤曲線","dashboard.strategyRanking":"策略排行榜","dashboard.winRate":"勝率","dashboard.profitFactor":"盈虧比","dashboard.maxDrawdown":"最大回撤","dashboard.totalTrades":"總交易","dashboard.runningStrategies":"運行中策略","dashboard.equityCurve":"權益曲線","dashboard.strategyAllocation":"策略分佈","dashboard.drawdownCurve":"回撤曲線","dashboard.hourlyDistribution":"交易時段","dashboard.dailyPnl":"日盈虧","dashboard.cumulativePnl":"累計盈虧","dashboard.tradeCount":"交易次數","dashboard.profit":"盈虧","dashboard.noData":"暫無數據","dashboard.noStrategyData":"暫無策略數據","dashboard.ranking.totalProfit":"總收益","dashboard.ranking.roi":"收益率","dashboard.ranking.trades":"交易數","dashboard.unit.trades":"筆","dashboard.unit.strategies":"個","dashboard.label.avgDaily":"日均","dashboard.label.avgProfit":"平均盈利","dashboard.label.win":"勝","dashboard.label.lose":"負","dashboard.label.trade":"交易","dashboard.label.indicator":"指標","dashboard.label.totalPnl":"總盈虧","dashboard.label.maxDrawdownPoint":"最大回撤","dashboard.profitCalendar":"收益日曆","dashboard.recentTrades":"最近交易","dashboard.currentPositions":"當前持倉","dashboard.table.time":"時間","dashboard.table.strategy":"策略名稱","dashboard.table.symbol":"標的","dashboard.table.type":"類型","dashboard.table.side":"方向","dashboard.table.size":"持倉量","dashboard.table.entryPrice":"開倉均價","dashboard.table.price":"價格","dashboard.table.amount":"數量","dashboard.table.profit":"盈虧","dashboard.pendingOrders":"訂單執行記錄","dashboard.totalOrders":"共 {total} 條","dashboard.viewError":"查看錯誤","dashboard.filled":"已成交","dashboard.orderTable.time":"創建時間","dashboard.orderTable.strategy":"策略","dashboard.orderTable.symbol":"交易對","dashboard.orderTable.signalType":"信號類型","dashboard.orderTable.amount":"數量","dashboard.orderTable.price":"成交價","dashboard.orderTable.status":"狀態","dashboard.orderTable.timeInfo":"時間","dashboard.orderTable.executedAt":"執行時間","dashboard.orderTable.exchange":"交易所","dashboard.orderTable.notify":"通知方式","dashboard.orderTable.actions":"操作","dashboard.orderTable.delete":"刪除","dashboard.orderTable.deleteConfirm":"確認刪除這條記錄?","dashboard.orderTable.deleteSuccess":"刪除成功","dashboard.orderTable.deleteFailed":"刪除失敗","dashboard.newOrderNotify":"新訂單提醒","dashboard.newOrderDesc":"有新的訂單執行記錄","dashboard.soundEnabled":"聲音提醒已開啟","dashboard.soundDisabled":"聲音提醒已關閉","dashboard.clickToMute":"點擊關閉聲音提醒","dashboard.clickToUnmute":"點擊開啟聲音提醒","dashboard.signalType.openLong":"開多","dashboard.signalType.openShort":"開空","dashboard.signalType.closeLong":"平多","dashboard.signalType.closeShort":"平空","dashboard.signalType.addLong":"加多","dashboard.signalType.addShort":"加空","dashboard.status.pending":"待處理","dashboard.status.processing":"處理中","dashboard.status.completed":"已完成","dashboard.status.failed":"失敗","dashboard.status.cancelled":"已取消","dashboard.table.pnl":"未實現盈虧","form.basic-form.basic.title":"基礎表單","form.basic-form.basic.description":"表單頁用於向用戶收集或驗證信息,基礎表單常見於數據項較少的表單場景。","form.basic-form.title.label":"標題","form.basic-form.title.placeholder":"給目標起個名字","form.basic-form.title.required":"請輸入標題","form.basic-form.date.label":"起止日期","form.basic-form.placeholder.start":"開始日期","form.basic-form.placeholder.end":"結束日期","form.basic-form.date.required":"請選擇起止日期","form.basic-form.goal.label":"目標描述","form.basic-form.goal.placeholder":"請輸入你的階段性工作目標","form.basic-form.goal.required":"請輸入目標描述","form.basic-form.standard.label":"衡量標準","form.basic-form.standard.placeholder":"請輸入衡量標準","form.basic-form.standard.required":"請輸入衡量標準","form.basic-form.client.label":"客戶","form.basic-form.client.required":"請描述你服務的客戶","form.basic-form.label.tooltip":"目標的服務對象","form.basic-form.client.placeholder":"請描述你服務的客戶,內部客戶直接 @姓名/工號","form.basic-form.invites.label":"邀評人","form.basic-form.invites.placeholder":"請直接 @姓名/工號,最多可邀請 5 人","form.basic-form.weight.label":"權重","form.basic-form.weight.placeholder":"請輸入","form.basic-form.public.label":"目標公開","form.basic-form.label.help":"客戶、邀評人默認被分享","form.basic-form.radio.public":"公開","form.basic-form.radio.partially-public":"部分公開","form.basic-form.radio.private":"不公開","form.basic-form.publicUsers.placeholder":"公開給","form.basic-form.option.A":"同事一","form.basic-form.option.B":"同事二","form.basic-form.option.C":"同事三","form.basic-form.email.required":"請輸入郵箱地址!","form.basic-form.email.wrong-format":"郵箱地址格式錯誤!","form.basic-form.userName.required":"請輸入用戶名!","form.basic-form.password.required":"請輸入密碼!","form.basic-form.password.twice":"兩次輸入的密碼不匹配!","form.basic-form.strength.msg":"請至少輸入 6 個字符。請不要使用容易被猜到的密碼。","form.basic-form.strength.strong":"強度:強","form.basic-form.strength.medium":"強度:中","form.basic-form.strength.short":"強度:太短","form.basic-form.confirm-password.required":"請確認密碼!","form.basic-form.phone-number.required":"請輸入手機號!","form.basic-form.phone-number.wrong-format":"手機號格式錯誤!","form.basic-form.verification-code.required":"請輸入驗證碼!","form.basic-form.form.get-captcha":"獲取驗證碼","form.basic-form.captcha.second":"秒","form.basic-form.form.optional":"(選填)","form.basic-form.form.submit":"提交","form.basic-form.form.save":"保存","form.basic-form.email.placeholder":"郵箱","form.basic-form.password.placeholder":"至少6位密碼,區分大小寫","form.basic-form.confirm-password.placeholder":"確認密碼","form.basic-form.phone-number.placeholder":"手機號","form.basic-form.verification-code.placeholder":"驗證碼","result.success.title":"提交成功","result.success.description":"提交結果頁用於反饋一系列操作任務的處理結果, 如果僅是簡單操作,使用 Message 全局提示反饋即可。 本文字區域可以展示簡單的補充說明,如果有類似展示 “單據”的需求,下面這個灰色區域可以呈現比較復雜的內容。","result.success.operate-title":"項目名稱","result.success.operate-id":"項目 ID","result.success.principal":"負責人","result.success.operate-time":"生效時間","result.success.step1-title":"創建項目","result.success.step1-operator":"曲麗麗","result.success.step2-title":"部門初審","result.success.step2-operator":"周毛毛","result.success.step2-extra":"催一下","result.success.step3-title":"財務復核","result.success.step4-title":"完成","result.success.btn-return":"返回列表","result.success.btn-project":"查看項目","result.success.btn-print":"打印","result.fail.error.title":"提交失敗","result.fail.error.description":"請核對並修改以下信息後,再重新提交。","result.fail.error.hint-title":"您提交的內容有如下錯誤:","result.fail.error.hint-text1":"您的賬戶已被凍結","result.fail.error.hint-btn1":"立即解凍","result.fail.error.hint-text2":"您的賬戶還不具備申請資格","result.fail.error.hint-btn2":"立即升級","result.fail.error.btn-text":"返回修改","account.settings.menuMap.custom":"個性化","account.settings.menuMap.binding":"賬號綁定","account.settings.basic.avatar":"頭像","account.settings.basic.change-avatar":"更換頭像","account.settings.basic.email":"郵箱","account.settings.basic.email-message":"請輸入您的郵箱!","account.settings.basic.nickname":"暱稱","account.settings.basic.nickname-message":"請輸入您的暱稱!","account.settings.basic.profile":"個人簡介","account.settings.basic.profile-message":"請輸入個人簡介!","account.settings.basic.profile-placeholder":"個人簡介","account.settings.basic.country":"國家/地區","account.settings.basic.country-message":"請輸入您的國家或地區!","account.settings.basic.geographic":"所在省市","account.settings.basic.geographic-message":"請輸入您的所在省市!","account.settings.basic.address":"街道地址","account.settings.basic.address-message":"請輸入您的街道地址!","account.settings.basic.phone":"聯系電話","account.settings.basic.phone-message":"請輸入您的聯系電話!","account.settings.basic.update":"更新基本信息","account.settings.basic.update.success":"更新基本信息成功","account.settings.security.strong":"強","account.settings.security.medium":"中","account.settings.security.weak":"弱","account.settings.security.password":"賬戶密碼","account.settings.security.password-description":"當前密碼強度:","account.settings.security.phone":"密保手機","account.settings.security.phone-description":"已綁定手機:","account.settings.security.question":"密保問題","account.settings.security.question-description":"未設置密保問題,密保問題可有效保護賬戶安全","account.settings.security.email":"綁定郵箱","account.settings.security.email-description":"已綁定郵箱:","account.settings.security.mfa":"MFA 設備","account.settings.security.mfa-description":"未綁定 MFA 設備,綁定後,可以進行二次確認","account.settings.security.modify":"修改","account.settings.security.set":"設置","account.settings.security.bind":"綁定","account.settings.binding.taobao":"綁定淘寶","account.settings.binding.taobao-description":"當前未綁定淘寶賬號","account.settings.binding.alipay":"綁定支付寶","account.settings.binding.alipay-description":"當前未綁定支付寶賬號","account.settings.binding.dingding":"綁定釘釘","account.settings.binding.dingding-description":"當前未綁定釘釘賬號","account.settings.binding.bind":"綁定","account.settings.notification.password":"賬戶密碼","account.settings.notification.password-description":"其他用戶的消息將以站內信的形式通知","account.settings.notification.messages":"系統消息","account.settings.notification.messages-description":"系統消息將以站內信的形式通知","account.settings.notification.todo":"待辦任務","account.settings.notification.todo-description":"待辦任務將以站內信的形式通知","account.settings.settings.open":"開","account.settings.settings.close":"關","trading-assistant.title":"交易助手","trading-assistant.strategyList":"策略列表","trading-assistant.createStrategy":"創建策略","trading-assistant.noStrategy":"暫無策略","trading-assistant.selectStrategy":"請從左側選擇一個策略查看詳情","trading-assistant.startStrategy":"啓動策略","trading-assistant.stopStrategy":"停止策略","trading-assistant.editStrategy":"編輯策略","trading-assistant.deleteStrategy":"刪除策略","trading-assistant.startAll":"全部啟動","trading-assistant.stopAll":"全部停止","trading-assistant.deleteAll":"全部刪除","trading-assistant.symbolCount":"個幣種","trading-assistant.status.running":"運行中","trading-assistant.status.stopped":"已停止","trading-assistant.status.error":"錯誤","trading-assistant.strategyType.IndicatorStrategy":"技術指標策略","trading-assistant.strategyType.PromptBasedStrategy":"提示詞策略","trading-assistant.strategyType.GridStrategy":"網格策略","trading-assistant.tabs.tradingRecords":"交易記錄","trading-assistant.tabs.positions":"持倉記錄","trading-assistant.tabs.equityCurve":"淨值曲線","trading-assistant.form.step1":"選擇指標","trading-assistant.form.step2":"交易所配置","trading-assistant.form.step3":"策略參數","trading-assistant.form.step2Params":"策略參數","trading-assistant.form.step3Signal":"信號通知","trading-assistant.form.indicator":"選擇指標","trading-assistant.form.indicatorHint":"只能選擇您已購買或創建的技術指標","trading-assistant.form.qdtCostHints":"使用策略將消耗QDT,請確保賬戶有足夠的QDT餘額","trading-assistant.form.indicatorDescription":"指標描述","trading-assistant.form.noDescription":"暫無描述","trading-assistant.form.exchange":"選擇交易所","trading-assistant.form.apiKey":"API Key","trading-assistant.form.secretKey":"Secret Key","trading-assistant.form.passphrase":"Passphrase","trading-assistant.form.testConnection":"測試連接","trading-assistant.form.strategyName":"策略名稱","trading-assistant.form.symbol":"交易對","trading-assistant.form.symbols":"交易對(多選)","trading-assistant.form.symbolHint":"目前僅支持加密貨幣交易對","trading-assistant.form.symbolHintCrypto":"加密貨幣:使用BTC/USDT等交易對格式","trading-assistant.form.symbolsHint":"選擇多個交易對,將自動創建多個策略","trading-assistant.form.initialCapital":"投入金額","trading-assistant.form.marketType":"市場類型","trading-assistant.form.marketTypeFutures":"合約","trading-assistant.form.marketTypeSpot":"現貨","trading-assistant.form.marketTypeHint":"合約支持雙向交易和槓杆,現貨僅支持做多且槓杆固定爲1倍","trading-assistant.form.leverage":"槓杆倍數","trading-assistant.form.leverageHint":"合約:1-125倍,現貨:固定1倍","trading-assistant.form.spotLeverageFixed":"現貨交易槓杆固定爲1倍","trading-assistant.form.spotOnlyLongHint":"現貨交易僅支持做多","trading-assistant.form.tradeDirection":"交易方向","trading-assistant.form.tradeDirectionLong":"僅做多","trading-assistant.form.tradeDirectionShort":"僅做空","trading-assistant.form.tradeDirectionBoth":"雙向交易","trading-assistant.form.timeframe":"時間周期","trading-assistant.form.klinePeriod":"K線周期","trading-assistant.form.timeframe1m":"1分鍾","trading-assistant.form.timeframe5m":"5分鍾","trading-assistant.form.timeframe15m":"15分鍾","trading-assistant.form.timeframe30m":"30分鍾","trading-assistant.form.timeframe1H":"1小時","trading-assistant.form.timeframe4H":"4小時","trading-assistant.form.timeframe1D":"1天","trading-assistant.form.selectStrategyType":"選擇策略類型","trading-assistant.form.indicatorStrategy":"指標策略","trading-assistant.form.indicatorStrategyDesc":"基於技術指標的自動化交易策略","trading-assistant.form.aiStrategy":"AI策略","trading-assistant.form.aiStrategyDesc":"基於AI智能決策的自動化交易策略","trading-assistant.form.enableAiFilter":"啟用AI智能決策過濾","trading-assistant.form.enableAiFilterHint":"啟用後,指標信號將經過AI智能過濾,提高交易質量","trading-assistant.form.aiFilterPrompt":"自定義提示詞","trading-assistant.form.aiFilterPromptHint":"為AI過濾提供自定義指令,留空則使用系統默認","trading-assistant.form.executionMode":"執行模式","trading-assistant.form.executionModeSignal":"僅信號通知","trading-assistant.form.executionModeLive":"實盤自動交易","trading-assistant.form.liveTradingCryptoOnlyHint":"實盤交易功能僅支持加密貨幣市場","trading-assistant.form.notifyChannels":"通知渠道","trading-assistant.form.notifyChannelsHint":"選擇信號觸發時的通知方式","trading-assistant.form.notifyEmail":"郵箱地址","trading-assistant.form.notifyPhone":"手機號碼","trading-assistant.form.notifyTelegram":"Telegram ID","trading-assistant.form.notifyDiscord":"Discord Webhook","trading-assistant.form.notifyWebhook":"Webhook 地址","trading-assistant.form.liveTradingConfigTitle":"實盤交易配置","trading-assistant.form.liveTradingConfigHint":"請填寫交易所API資訊,實盤交易將使用您的API進行真實交易","trading-assistant.form.savedCredential":"已儲存的憑證","trading-assistant.form.savedCredentialHint":"選擇已儲存的交易所憑證,自動填充API配置","trading-assistant.form.saveCredential":"儲存此憑證以便下次使用","trading-assistant.form.credentialName":"憑證名稱","trading-assistant.validation.strategyTypeRequired":"請選擇策略類型","trading-assistant.form.advancedSettings":"高級設置","trading-assistant.form.orderMode":"下單模式","trading-assistant.form.orderModeMaker":"掛單(Maker)","trading-assistant.form.orderModeTaker":"市價(Taker)","trading-assistant.form.orderModeHint":"掛單模式使用限價單,手續費更低;市價模式立即成交,手續費較高","trading-assistant.form.makerWaitSec":"掛單等待時間(秒)","trading-assistant.form.makerWaitSecHint":"掛單後等待成交的時間,超時後取消並重試","trading-assistant.form.makerRetries":"掛單重試次數","trading-assistant.form.makerRetriesHint":"掛單未成交時的最大重試次數","trading-assistant.form.fallbackToMarket":"掛單失敗降級市價","trading-assistant.form.fallbackToMarketHint":"開/平倉掛單未成交時,是否降級爲市價單以確保成交","trading-assistant.form.marginMode":"保證金模式","trading-assistant.form.marginModeCross":"全倉","trading-assistant.form.marginModeIsolated":"逐倉","trading-assistant.form.stopLossPct":"止損比例(%)","trading-assistant.form.stopLossPctHint":"設置止損百分比,0表示不啓用止損","trading-assistant.form.takeProfitPct":"止盈比例(%)","trading-assistant.form.takeProfitPctHint":"設置止盈百分比,0表示不啓用止盈","trading-assistant.form.signalMode":"信號模式","trading-assistant.form.signalModeConfirmed":"確認模式","trading-assistant.form.signalModeAggressive":"激進模式","trading-assistant.form.signalModeHint":"確認模式:僅檢查已完成的K線;激進模式:也檢查正在形成的K線","trading-assistant.form.cancel":"取消","trading-assistant.form.prev":"上一步","trading-assistant.form.next":"下一步","trading-assistant.form.confirmCreate":"確認創建","trading-assistant.form.confirmEdit":"確認修改","trading-assistant.messages.createSuccess":"策略創建成功","trading-assistant.messages.createFailed":"創建策略失敗","trading-assistant.messages.updateSuccess":"策略更新成功","trading-assistant.messages.updateFailed":"更新策略失敗","trading-assistant.messages.deleteSuccess":"策略刪除成功","trading-assistant.messages.deleteFailed":"刪除策略失敗","trading-assistant.messages.startSuccess":"策略啓動成功","trading-assistant.messages.startFailed":"啓動策略失敗","trading-assistant.messages.stopSuccess":"策略停止成功","trading-assistant.messages.stopFailed":"停止策略失敗","trading-assistant.messages.loadFailed":"獲取策略列表失敗","trading-assistant.messages.runningWarning":"策略運行中,請先停止策略後再修改","trading-assistant.messages.deleteConfirmWithName":"確定要刪除策略“{name}”嗎?此操作不可恢復。","trading-assistant.messages.deleteConfirm":"確定要刪除該策略嗎?此操作不可恢復。","trading-assistant.messages.loadTradesFailed":"獲取交易記錄失敗","trading-assistant.messages.loadPositionsFailed":"獲取持倉記錄失敗","trading-assistant.messages.loadEquityFailed":"獲取淨值曲線失敗","trading-assistant.messages.loadIndicatorsFailed":"加載指標列表失敗,請稍後重試","trading-assistant.messages.spotLimitations":"現貨交易已自動設置爲僅做多、1倍槓杆","trading-assistant.messages.autoFillApiConfig":"已自動填充該交易所的歷史API配置","trading-assistant.messages.batchCreateSuccess":"成功創建 {count} 個策略","trading-assistant.messages.batchStartSuccess":"成功啟動 {count} 個策略","trading-assistant.messages.batchStartFailed":"批量啟動策略失敗","trading-assistant.messages.batchStopSuccess":"成功停止 {count} 個策略","trading-assistant.messages.batchStopFailed":"批量停止策略失敗","trading-assistant.messages.batchDeleteSuccess":"成功刪除 {count} 個策略","trading-assistant.messages.batchDeleteFailed":"批量刪除策略失敗","trading-assistant.messages.batchDeleteConfirm":'確定要刪除策略組"{name}"下的 {count} 個策略嗎?此操作不可恢復。',"trading-assistant.notify.browser":"瀏覽器通知","trading-assistant.notify.email":"郵箱","trading-assistant.notify.phone":"簡訊","trading-assistant.notify.telegram":"Telegram","trading-assistant.notify.discord":"Discord","trading-assistant.notify.webhook":"Webhook","trading-assistant.placeholders.selectIndicator":"請選擇指標","trading-assistant.placeholders.selectExchange":"請選擇交易所","trading-assistant.placeholders.inputApiKey":"請輸入API Key","trading-assistant.placeholders.inputSecretKey":"請輸入Secret Key","trading-assistant.placeholders.inputPassphrase":"請輸入Passphrase","trading-assistant.placeholders.inputStrategyName":"請輸入策略名稱","trading-assistant.placeholders.selectSymbol":"請選擇交易對","trading-assistant.placeholders.selectSymbols":"請選擇交易對(支持多選)","trading-assistant.placeholders.selectTimeframe":"請選擇時間周期","trading-assistant.placeholders.selectKlinePeriod":"請選擇K線周期","trading-assistant.placeholders.inputAiFilterPrompt":"請輸入自定義提示詞(可選)","trading-assistant.placeholders.selectSavedCredential":"請選擇已儲存的憑證","trading-assistant.placeholders.inputEmail":"請輸入郵箱地址","trading-assistant.placeholders.inputPhone":"請輸入手機號碼","trading-assistant.placeholders.inputTelegram":"請輸入Telegram ID或Chat ID","trading-assistant.placeholders.inputDiscord":"請輸入Discord Webhook地址","trading-assistant.placeholders.inputWebhook":"請輸入Webhook地址","trading-assistant.placeholders.inputCredentialName":"請輸入憑證名稱(如:我的OKX帳戶)","trading-assistant.validation.indicatorRequired":"請選擇指標","trading-assistant.validation.exchangeRequired":"請選擇交易所","trading-assistant.validation.apiKeyRequired":"請輸入API Key","trading-assistant.validation.secretKeyRequired":"請輸入Secret Key","trading-assistant.validation.passphraseRequired":"請輸入Passphrase","trading-assistant.validation.exchangeConfigIncomplete":"請填寫完整的交易所配置信息","trading-assistant.validation.testConnectionRequired":'請先點擊"測試連接"按鈕並確保連接成功',"trading-assistant.validation.testConnectionFailed":"連接測試失敗,請檢查配置後重新測試","trading-assistant.validation.credentialRequired":"請先在個人中心添加並測試交易所憑證","trading-assistant.validation.strategyNameRequired":"請輸入策略名稱","trading-assistant.validation.symbolRequired":"請選擇交易對","trading-assistant.validation.symbolsRequired":"請至少選擇一個交易對","trading-assistant.validation.emailInvalid":"請輸入有效的郵箱地址","trading-assistant.validation.notifyChannelRequired":"請至少選擇一個通知渠道","trading-assistant.validation.initialCapitalRequired":"請輸入投入金額","trading-assistant.validation.leverageRequired":"請輸入槓杆倍數","trading-assistant.table.time":"時間","trading-assistant.table.type":"類型","trading-assistant.table.price":"價格","trading-assistant.table.amount":"數量","trading-assistant.table.value":"金額","trading-assistant.table.commission":"手續費","trading-assistant.table.symbol":"交易對","trading-assistant.table.side":"方向","trading-assistant.table.size":"持倉數量","trading-assistant.table.entryPrice":"開倉價格","trading-assistant.table.currentPrice":"當前價格","trading-assistant.table.unrealizedPnl":"未實現盈虧","trading-assistant.table.pnlPercent":"盈虧比例","trading-assistant.table.buy":"買入","trading-assistant.table.sell":"賣出","trading-assistant.table.long":"做多","trading-assistant.table.short":"做空","trading-assistant.table.noPositions":"暫無持倉","trading-assistant.detail.title":"策略詳情","trading-assistant.detail.strategyName":"策略名稱","trading-assistant.detail.strategyType":"策略類型","trading-assistant.detail.status":"狀態","trading-assistant.detail.tradingMode":"交易模式","trading-assistant.detail.exchange":"交易所","trading-assistant.detail.initialCapital":"初始資金","trading-assistant.detail.totalInvestment":"總投入金額","trading-assistant.detail.currentEquity":"當前淨值","trading-assistant.detail.totalPnl":"總盈虧","trading-assistant.detail.indicatorName":"指標名稱","trading-assistant.detail.maxLeverage":"最大槓杆","trading-assistant.detail.decideInterval":"決策間隔","trading-assistant.detail.symbols":"交易標的","trading-assistant.detail.createdAt":"創建時間","trading-assistant.detail.updatedAt":"更新時間","trading-assistant.detail.llmConfig":"AI模型配置","trading-assistant.detail.exchangeConfig":"交易所配置","trading-assistant.detail.provider":"提供商","trading-assistant.detail.modelId":"模型ID","trading-assistant.detail.close":"關閉","trading-assistant.detail.loadFailed":"獲取策略詳情失敗","trading-assistant.equity.noData":"暫無淨值數據","trading-assistant.equity.equity":"淨值","trading-assistant.exchange.tradingMode":"交易模式","trading-assistant.exchange.virtual":"模擬交易","trading-assistant.exchange.live":"實盤交易","trading-assistant.exchange.selectExchange":"選擇交易所","trading-assistant.exchange.walletAddress":"錢包地址","trading-assistant.exchange.walletAddressPlaceholder":"請輸入錢包地址(以0x開頭)","trading-assistant.exchange.privateKey":"私鑰","trading-assistant.exchange.privateKeyPlaceholder":"請輸入私鑰(64字符)","trading-assistant.exchange.testConnection":"測試連接","trading-assistant.exchange.connectionSuccess":"連接成功","trading-assistant.exchange.connectionFailed":"連接失敗","trading-assistant.exchange.testFailed":"連接測試失敗","trading-assistant.exchange.fillComplete":"請填寫完整的交易所配置信息","trading-assistant.strategyTypeOptions.ai":"AI驅動策略","trading-assistant.strategyTypeOptions.indicator":"技術指標策略","trading-assistant.strategyTypeOptions.aiDeveloping":"AI驅動策略功能開發中,敬請期待","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"AI驅動策略功能正在開發中","trading-assistant.indicatorType.trend":"趨勢","trading-assistant.indicatorType.momentum":"動量","trading-assistant.indicatorType.volatility":"波動","trading-assistant.indicatorType.volume":"成交量","trading-assistant.indicatorType.custom":"自定義","trading-assistant.exchangeNames":{okx:"OKX",binance:"幣安",hyperliquid:"Hyperliquid",blockchaincom:"Blockchain.com",coinbaseexchange:"Coinbase",gate:"Gate.io",mexc:"MEXC",kraken:"Kraken",bitfinex:"Bitfinex",bybit:"Bybit",kucoin:"KuCoin",huobi:"火幣",bitget:"Bitget",bitmex:"BitMEX",deribit:"Deribit",phemex:"Phemex",bitmart:"BitMart",bitstamp:"Bitstamp",bittrex:"Bittrex",poloniex:"Poloniex",gemini:"Gemini",cryptocom:"Crypto.com",bitflyer:"bitFlyer",upbit:"Upbit",bithumb:"Bithumb",coinone:"Coinone",zb:"ZB",lbank:"LBank",bibox:"Bibox",bigone:"BigONE",bitrue:"Bitrue",coinex:"CoinEx",digifinex:"DigiFinex",ftx:"FTX",ftxus:"FTX US",binanceus:"Binance US",binancecoinm:"Binance COIN-M",binanceusdm:"Binance USDⓈ-M",deepcoin:"Deepcoin"},"ai-trading-assistant.title":"AI交易助手","ai-trading-assistant.strategyList":"策略列表","ai-trading-assistant.createStrategy":"創建策略","ai-trading-assistant.noStrategy":"暫無策略","ai-trading-assistant.selectStrategy":"請從左側選擇一個策略查看詳情","ai-trading-assistant.startStrategy":"啓動策略","ai-trading-assistant.stopStrategy":"停止策略","ai-trading-assistant.editStrategy":"編輯策略","ai-trading-assistant.deleteStrategy":"刪除策略","ai-trading-assistant.status.running":"運行中","ai-trading-assistant.status.stopped":"已停止","ai-trading-assistant.status.error":"錯誤","ai-trading-assistant.tabs.tradingRecords":"交易記錄","ai-trading-assistant.tabs.positions":"持倉記錄","ai-trading-assistant.tabs.aiDecisions":"AI決策記錄","ai-trading-assistant.tabs.equityCurve":"淨值曲線","ai-trading-assistant.form.createTitle":"創建AI交易策略","ai-trading-assistant.form.editTitle":"編輯AI交易策略","ai-trading-assistant.form.strategyName":"策略名稱","ai-trading-assistant.form.modelId":"AI模型","ai-trading-assistant.form.modelIdHint":"使用系統OpenRouter服務,無需配置API Key","ai-trading-assistant.form.decideInterval":"決策間隔","ai-trading-assistant.form.decideInterval5m":"5分鍾","ai-trading-assistant.form.decideInterval10m":"10分鍾","ai-trading-assistant.form.decideInterval30m":"30分鍾","ai-trading-assistant.form.decideInterval1h":"1小時","ai-trading-assistant.form.decideInterval4h":"4小時","ai-trading-assistant.form.decideInterval1d":"1天","ai-trading-assistant.form.decideInterval1w":"1周","ai-trading-assistant.form.decideIntervalHint":"AI做決策的時間間隔","ai-trading-assistant.form.runPeriod":"運行周期","ai-trading-assistant.form.runPeriodHint":"策略運行的開始時間和結束時間","ai-trading-assistant.form.startDate":"開始日期","ai-trading-assistant.form.endDate":"結束日期","ai-trading-assistant.form.qdtCostTitle":"QDT扣費說明","ai-trading-assistant.form.qdtCostHint":"每次AI決策將扣費 {cost} 個QDT,請確保賬戶有足夠的QDT餘額。策略運行期間,每次決策都會實時扣費。","ai-trading-assistant.form.apiKey":"API Key","ai-trading-assistant.form.exchange":"選擇交易所","ai-trading-assistant.form.secretKey":"Secret Key","ai-trading-assistant.form.passphrase":"Passphrase","ai-trading-assistant.form.testConnection":"測試連接","ai-trading-assistant.form.symbol":"交易對","ai-trading-assistant.form.symbolHint":"選擇要交易的交易對","ai-trading-assistant.form.initialCapital":"投入金額(保證金)","ai-trading-assistant.form.leverage":"槓杆倍數","ai-trading-assistant.form.timeframe":"時間周期","ai-trading-assistant.form.timeframe1m":"1分鍾","ai-trading-assistant.form.timeframe5m":"5分鍾","ai-trading-assistant.form.timeframe15m":"15分鍾","ai-trading-assistant.form.timeframe30m":"30分鍾","ai-trading-assistant.form.timeframe1H":"1小時","ai-trading-assistant.form.timeframe4H":"4小時","ai-trading-assistant.form.timeframe1D":"1天","ai-trading-assistant.form.marketType":"市場類型","ai-trading-assistant.form.marketTypeFutures":"合約","ai-trading-assistant.form.marketTypeSpot":"現貨","ai-trading-assistant.form.totalPnl":"總盈虧","ai-trading-assistant.form.customPrompt":"自定義提示詞","ai-trading-assistant.form.customPromptHint":"可選,用於自定義AI的交易策略和決策邏輯","ai-trading-assistant.form.cancel":"取消","ai-trading-assistant.form.prev":"上一步","ai-trading-assistant.form.next":"下一步","ai-trading-assistant.form.confirmCreate":"確認創建","ai-trading-assistant.form.confirmEdit":"確認修改","ai-trading-assistant.messages.createSuccess":"策略創建成功","ai-trading-assistant.messages.createFailed":"創建策略失敗","ai-trading-assistant.messages.updateSuccess":"策略更新成功","ai-trading-assistant.messages.updateFailed":"更新策略失敗","ai-trading-assistant.messages.deleteSuccess":"策略刪除成功","ai-trading-assistant.messages.deleteFailed":"刪除策略失敗","ai-trading-assistant.messages.startSuccess":"策略啓動成功","ai-trading-assistant.messages.startFailed":"啓動策略失敗","ai-trading-assistant.messages.stopSuccess":"策略停止成功","ai-trading-assistant.messages.stopFailed":"停止策略失敗","ai-trading-assistant.messages.loadFailed":"獲取策略列表失敗","ai-trading-assistant.messages.loadDecisionsFailed":"獲取AI決策記錄失敗","ai-trading-assistant.messages.deleteConfirm":"確定要刪除該策略嗎?此操作不可恢復。","ai-trading-assistant.placeholders.inputStrategyName":"請輸入策略名稱","ai-trading-assistant.placeholders.selectModelId":"請選擇AI模型","ai-trading-assistant.placeholders.selectDecideInterval":"請選擇決策間隔","ai-trading-assistant.placeholders.startTime":"開始時間","ai-trading-assistant.placeholders.endTime":"結束時間","ai-trading-assistant.placeholders.inputApiKey":"請輸入API Key","ai-trading-assistant.placeholders.selectExchange":"請選擇交易所","ai-trading-assistant.placeholders.inputSecretKey":"請輸入Secret Key","ai-trading-assistant.placeholders.inputPassphrase":"請輸入Passphrase","ai-trading-assistant.placeholders.selectSymbol":"請選擇交易對,如:BTC/USDT","ai-trading-assistant.placeholders.selectTimeframe":"請選擇時間周期","ai-trading-assistant.placeholders.inputCustomPrompt":"請輸入自定義提示詞(可選)","ai-trading-assistant.validation.strategyNameRequired":"請輸入策略名稱","ai-trading-assistant.validation.modelIdRequired":"請選擇AI模型","ai-trading-assistant.validation.runPeriodRequired":"請選擇運行周期","ai-trading-assistant.validation.apiKeyRequired":"請輸入API Key","ai-trading-assistant.validation.exchangeRequired":"請選擇交易所","ai-trading-assistant.validation.secretKeyRequired":"請輸入Secret Key","ai-trading-assistant.validation.symbolRequired":"請選擇交易對","ai-trading-assistant.validation.initialCapitalRequired":"請輸入投入金額","ai-trading-assistant.table.time":"時間","ai-trading-assistant.table.type":"類型","ai-trading-assistant.table.price":"價格","ai-trading-assistant.table.amount":"數量","ai-trading-assistant.table.value":"金額","ai-trading-assistant.table.symbol":"交易對","ai-trading-assistant.table.side":"方向","ai-trading-assistant.table.size":"持倉數量","ai-trading-assistant.table.entryPrice":"開倉價格","ai-trading-assistant.table.currentPrice":"當前價格","ai-trading-assistant.table.unrealizedPnl":"未實現盈虧","ai-trading-assistant.table.profit":"盈虧","ai-trading-assistant.table.openLong":"開多","ai-trading-assistant.table.closeLong":"平多","ai-trading-assistant.table.openShort":"開空","ai-trading-assistant.table.closeShort":"平空","ai-trading-assistant.table.addLong":"加多","ai-trading-assistant.table.addShort":"加空","ai-trading-assistant.table.closeShortProfit":"平空止盈","ai-trading-assistant.table.closeShortStop":"平空止損","ai-trading-assistant.table.closeLongProfit":"平多止盈","ai-trading-assistant.table.closeLongStop":"平多止損","ai-trading-assistant.table.buy":"買入","ai-trading-assistant.table.sell":"賣出","ai-trading-assistant.table.long":"做多","ai-trading-assistant.table.short":"做空","ai-trading-assistant.table.hold":"持有","ai-trading-assistant.table.reasoning":"分析理由","ai-trading-assistant.table.decisions":"決策","ai-trading-assistant.table.riskAssessment":"風險評估","ai-trading-assistant.table.confidence":"置信度","ai-trading-assistant.table.totalRecords":"共 {total} 條記錄","ai-trading-assistant.table.noPositions":"暫無持倉","ai-trading-assistant.detail.title":"策略詳情","ai-trading-assistant.equity.noData":"暫無淨值數據","ai-trading-assistant.equity.equity":"淨值","ai-trading-assistant.exchange.testFailed":"連接測試失敗","ai-trading-assistant.exchange.connectionSuccess":"連接成功","ai-trading-assistant.exchange.connectionFailed":"連接失敗","ai-trading-assistant.form.advancedSettings":"高級設置","ai-trading-assistant.form.orderMode":"下單模式","ai-trading-assistant.form.orderModeMaker":"掛單(Maker)","ai-trading-assistant.form.orderModeTaker":"市價(Taker)","ai-trading-assistant.form.orderModeHint":"掛單模式使用限價單,手續費更低;市價模式立即成交,手續費較高","ai-trading-assistant.form.makerWaitSec":"掛單等待時間(秒)","ai-trading-assistant.form.makerWaitSecHint":"掛單後等待成交的時間,超時後取消並重試","ai-trading-assistant.form.makerRetries":"掛單重試次數","ai-trading-assistant.form.makerRetriesHint":"掛單未成交時的最大重試次數","ai-trading-assistant.form.fallbackToMarket":"掛單失敗降級市價","ai-trading-assistant.form.fallbackToMarketHint":"開/平倉掛單未成交時,是否降級爲市價單以確保成交","ai-trading-assistant.form.marginMode":"保證金模式","ai-trading-assistant.form.marginModeCross":"全倉","ai-trading-assistant.form.marginModeIsolated":"逐倉","ai-analysis.title":"量子交易引擎","ai-analysis.system.online":"在線","ai-analysis.system.agents":"智能體","ai-analysis.system.active":"活躍","ai-analysis.system.stage":"階段","ai-analysis.panel.roster":"智能體陣容","ai-analysis.panel.thinking":"思考中...","ai-analysis.panel.done":"完成","ai-analysis.panel.standby":"待機","ai-analysis.input.title":"量子交易引擎","ai-analysis.input.placeholder":"選擇目標資產 (如 BTC/USDT)","ai-analysis.input.watchlist":"自選股","ai-analysis.input.start":"開始分析","ai-analysis.input.recent":"最近任務:","ai-analysis.vis.stage":"階段","ai-analysis.vis.processing":"處理中","ai-analysis.result.complete":"分析完成","ai-analysis.result.signal":"最終信號","ai-analysis.result.confidence":"置信度:","ai-analysis.result.new":"新分析","ai-analysis.result.full":"查看完整報告","ai-analysis.logs.title":"系統日志","ai-analysis.modal.title":"機密報告","ai-analysis.modal.fundamental":"基本面分析","ai-analysis.modal.technical":"技術面分析","ai-analysis.modal.sentiment":"情緒面分析","ai-analysis.modal.risk":"風險評估","ai-analysis.stage.idle":"待機","ai-analysis.stage.1":"第一階段:多維分析","ai-analysis.stage.2":"第二階段:多空辯論","ai-analysis.stage.3":"第三階段:戰略規劃","ai-analysis.stage.4":"第四階段:風控審查","ai-analysis.stage.complete":"完成","ai-analysis.agent.investment_director":"投資總監","ai-analysis.agent.role.investment_director":"綜合分析 & 最終結論","ai-analysis.agent.market":"市場分析師","ai-analysis.agent.role.market":"技術 & 市場數據","ai-analysis.agent.fundamental":"基本面分析師","ai-analysis.agent.role.fundamental":"財務 & 估值","ai-analysis.agent.technical":"技術分析師","ai-analysis.agent.role.technical":"技術指標 & 圖表","ai-analysis.agent.news":"新聞分析師","ai-analysis.agent.role.news":"全球新聞過濾","ai-analysis.agent.sentiment":"情緒分析師","ai-analysis.agent.role.sentiment":"社交 & 情緒","ai-analysis.agent.risk":"風險分析師","ai-analysis.agent.role.risk":"基礎風險檢查","ai-analysis.agent.bull":"看漲研究員","ai-analysis.agent.role.bull":"增長催化劑挖掘","ai-analysis.agent.bear":"看跌研究員","ai-analysis.agent.role.bear":"風險 & 缺陷挖掘","ai-analysis.agent.manager":"研究經理","ai-analysis.agent.role.manager":"辯論主持人","ai-analysis.agent.trader":"交易員","ai-analysis.agent.role.trader":"執行策略師","ai-analysis.agent.risky":"激進分析師","ai-analysis.agent.role.risky":"激進策略","ai-analysis.agent.neutral":"平衡分析師","ai-analysis.agent.role.neutral":"平衡策略","ai-analysis.agent.safe":"保守分析師","ai-analysis.agent.role.safe":"保守策略","ai-analysis.agent.cro":"風控經理 (CRO)","ai-analysis.agent.role.cro":"最終決策權威","ai-analysis.script.market":"正在從主要交易所獲取 OHLCV 數據...","ai-analysis.script.fundamental":"正在檢索季度財務報告...","ai-analysis.script.technical":"正在分析技術指標和圖表形態...","ai-analysis.script.news":"正在掃描全球財經新聞...","ai-analysis.script.sentiment":"正在分析社交媒體趨勢...","ai-analysis.script.risk":"正在計算歷史波動率...","invite.inviteLink":"邀請鏈接","invite.copy":"復制鏈接","invite.copySuccess":"復制成功!","invite.copyFailed":"復制失敗,請手動復制","invite.noInviteLink":"邀請鏈接未生成","invite.totalInvites":"累計邀請","invite.totalReward":"累計獎勵","invite.rules":"邀請規則","invite.rule1":"每成功邀請一位好友注冊,您將獲得獎勵","invite.rule2":"被邀請的好友完成首次交易,您將獲得額外獎勵","invite.rule3":"邀請獎勵將直接發放到您的賬戶","invite.inviteList":"邀請列表","invite.tasks":"任務中心","invite.inviteeName":"被邀請人","invite.inviteTime":"邀請時間","invite.status":"狀態","invite.reward":"獎勵","invite.active":"活躍","invite.inactive":"未激活","invite.completed":"已完成","invite.claimed":"已領取","invite.pending":"待完成","invite.goToTask":"去完成","invite.claimReward":"領取獎勵","invite.verify":"驗證完成","invite.verifySuccess":"驗證成功!任務已完成","invite.verifyNotCompleted":"任務尚未完成,請先完成任務","invite.verifyFailed":"驗證失敗,請稍後重試","invite.claimSuccess":"成功領取 {reward} QDT!","invite.claimFailed":"領取失敗,請稍後重試","invite.totalRecords":"共 {total} 條記錄","invite.task.twitter.title":"轉發推文到 X (Twitter)","invite.task.twitter.desc":"分享我們的官方推文到您的 X (Twitter) 賬號","invite.task.youtube.title":"關注我們的 YouTube 頻道","invite.task.youtube.desc":"訂閱並關注我們的 YouTube 官方頻道","invite.task.telegram.title":"加入 Telegram 羣組","invite.task.telegram.desc":"加入我們的官方 Telegram 社區羣組","invite.task.discord.title":"加入 Discord 服務器","invite.task.discord.desc":"加入我們的 Discord 社區服務器",message:"-","layouts.usermenu.dialog.title":"信息","layouts.usermenu.dialog.content":"您確定要注銷嗎?","layouts.userLayout.title":"於不確定中,尋見真理","settings.title":"系統設置","settings.description":"配置應用設置、API密鑰和系統偏好","settings.save":"保存設置","settings.reset":"重置","settings.saveSuccess":"設置保存成功","settings.saveFailed":"保存設置失敗","settings.loadFailed":"加載配置失敗","settings.openrouterBalance":"OpenRouter 賬戶餘額","settings.queryBalance":"查詢餘額","settings.balanceUsage":"已使用","settings.balanceRemaining":"剩餘額度","settings.balanceLimit":"總限額","settings.balanceQuerySuccess":"餘額查詢成功","settings.balanceQueryFailed":"餘額查詢失敗","settings.balanceNotQueried":'點擊"查詢餘額"獲取賬戶信息',"settings.default":"默認","settings.pleaseSelect":"請選擇","settings.inputApiKey":"請輸入密鑰","settings.getApi":"獲取API","settings.link.getApi":"獲取API","settings.link.getApiKey":"獲取API Key","settings.link.getToken":"獲取Token","settings.link.createBot":"創建Bot","settings.link.viewModels":"查看模型列表","settings.link.freeRegister":"免費註冊","settings.link.supportedExchanges":"支持的交易所","settings.link.applyApi":"申請API","settings.link.createSearchEngine":"創建搜索引擎","settings.link.getTurnstileKey":"獲取Turnstile密鑰","settings.link.getGoogleCredentials":"獲取Google憑據","settings.link.getGithubCredentials":"獲取GitHub憑據","settings.restartRequired":"配置已保存,部分配置需要重啟Python服務才能生效","settings.copyRestartCmd":"複製重啟命令","settings.copySuccess":"複製成功","settings.copyFailed":"複製失敗","settings.group.server":"服務配置","settings.group.auth":"安全認證","settings.group.ai":"AI/LLM配置","settings.group.trading":"實盤交易","settings.group.strategy":"策略執行","settings.group.data_source":"數據源","settings.group.notification":"通知推送","settings.group.email":"郵件配置","settings.group.sms":"短信配置","settings.group.agent":"AI Agent","settings.group.network":"網絡代理","settings.group.search":"搜索配置","settings.group.security":"註冊與安全","settings.group.app":"應用配置","settings.field.SECRET_KEY":"Secret Key","settings.field.ADMIN_USER":"管理員用戶名","settings.field.ADMIN_PASSWORD":"管理員密碼","settings.field.ADMIN_EMAIL":"管理員郵箱","settings.field.ENABLE_REGISTRATION":"允許註冊","settings.field.TURNSTILE_SITE_KEY":"Turnstile Site Key","settings.field.TURNSTILE_SECRET_KEY":"Turnstile Secret Key","settings.field.FRONTEND_URL":"前端URL","settings.field.GOOGLE_CLIENT_ID":"Google Client ID","settings.field.GOOGLE_CLIENT_SECRET":"Google Client Secret","settings.field.GOOGLE_REDIRECT_URI":"Google回調URL","settings.field.GITHUB_CLIENT_ID":"GitHub Client ID","settings.field.GITHUB_CLIENT_SECRET":"GitHub Client Secret","settings.field.GITHUB_REDIRECT_URI":"GitHub回調URL","settings.field.SECURITY_IP_MAX_ATTEMPTS":"IP最大失敗次數","settings.field.SECURITY_IP_WINDOW_MINUTES":"IP統計窗口(分鐘)","settings.field.SECURITY_IP_BLOCK_MINUTES":"IP封禁時長(分鐘)","settings.field.SECURITY_ACCOUNT_MAX_ATTEMPTS":"帳戶最大失敗次數","settings.field.SECURITY_ACCOUNT_WINDOW_MINUTES":"帳戶統計窗口(分鐘)","settings.field.SECURITY_ACCOUNT_BLOCK_MINUTES":"帳戶鎖定時長(分鐘)","settings.field.VERIFICATION_CODE_EXPIRE_MINUTES":"驗證碼有效期(分鐘)","settings.field.VERIFICATION_CODE_RATE_LIMIT":"驗證碼發送間隔(秒)","settings.field.VERIFICATION_CODE_IP_HOURLY_LIMIT":"IP每小時驗證碼上限","settings.field.VERIFICATION_CODE_MAX_ATTEMPTS":"驗證碼最大嘗試次數","settings.field.VERIFICATION_CODE_LOCK_MINUTES":"驗證碼鎖定時長(分鐘)","settings.field.PYTHON_API_HOST":"監聽地址","settings.field.PYTHON_API_PORT":"端口","settings.field.PYTHON_API_DEBUG":"調試模式","settings.field.ENABLE_PENDING_ORDER_WORKER":"啟用訂單處理Worker","settings.field.PENDING_ORDER_STALE_SEC":"訂單超時時間(秒)","settings.field.ORDER_MODE":"下單模式","settings.field.MAKER_WAIT_SEC":"限價單等待時間(秒)","settings.field.MAKER_OFFSET_BPS":"限價單價格偏移(基點)","settings.field.SIGNAL_WEBHOOK_URL":"Webhook URL","settings.field.SIGNAL_WEBHOOK_TOKEN":"Webhook Token","settings.field.SIGNAL_NOTIFY_TIMEOUT_SEC":"通知超時(秒)","settings.field.TELEGRAM_BOT_TOKEN":"Telegram Bot Token","settings.field.SMTP_HOST":"SMTP服務器","settings.field.SMTP_PORT":"SMTP端口","settings.field.SMTP_USER":"SMTP用戶名","settings.field.SMTP_PASSWORD":"SMTP密碼","settings.field.SMTP_FROM":"發件人地址","settings.field.SMTP_USE_TLS":"使用TLS","settings.field.SMTP_USE_SSL":"使用SSL","settings.field.TWILIO_ACCOUNT_SID":"Account SID","settings.field.TWILIO_AUTH_TOKEN":"Auth Token","settings.field.TWILIO_FROM_NUMBER":"發送號碼","settings.field.DISABLE_RESTORE_RUNNING_STRATEGIES":"禁用自動恢復策略","settings.field.STRATEGY_TICK_INTERVAL_SEC":"策略Tick間隔(秒)","settings.field.PRICE_CACHE_TTL_SEC":"價格緩存TTL(秒)","settings.field.PROXY_PORT":"代理端口","settings.field.PROXY_HOST":"代理主機","settings.field.PROXY_SCHEME":"代理協議","settings.field.PROXY_URL":"完整代理URL","settings.field.CORS_ORIGINS":"CORS來源","settings.field.RATE_LIMIT":"速率限制(每分鐘)","settings.field.ENABLE_CACHE":"啟用緩存","settings.field.ENABLE_REQUEST_LOG":"啟用請求日誌","settings.field.ENABLE_AI_ANALYSIS":"啟用AI分析","settings.field.ENABLE_AGENT_MEMORY":"啟用Agent記憶","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"啟用向量檢索(本地)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"Embedding維度","settings.field.AGENT_MEMORY_TOP_K":"召回數量TopK","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"候選窗口大小","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"時間衰減半衰期(天)","settings.field.AGENT_MEMORY_W_SIM":"相似度權重","settings.field.AGENT_MEMORY_W_RECENCY":"時間權重","settings.field.AGENT_MEMORY_W_RETURNS":"收益權重","settings.field.ENABLE_REFLECTION_WORKER":"啟用自動驗證","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"驗證周期間隔(秒)","settings.field.OPENROUTER_API_KEY":"OpenRouter API Key","settings.field.OPENROUTER_API_URL":"OpenRouter API URL","settings.field.OPENROUTER_MODEL":"默認模型","settings.field.OPENROUTER_TEMPERATURE":"Temperature","settings.field.OPENROUTER_MAX_TOKENS":"Max Tokens","settings.field.OPENROUTER_TIMEOUT":"超時時間(秒)","settings.field.OPENROUTER_CONNECT_TIMEOUT":"連接超時(秒)","settings.field.AI_MODELS_JSON":"模型列表(JSON)","settings.field.MARKET_TYPES_JSON":"市場類型(JSON)","settings.field.TRADING_SUPPORTED_SYMBOLS_JSON":"支持的交易對(JSON)","settings.field.DATA_SOURCE_TIMEOUT":"數據源超時(秒)","settings.field.DATA_SOURCE_RETRY":"重試次數","settings.field.DATA_SOURCE_RETRY_BACKOFF":"重試退避(秒)","settings.field.FINNHUB_API_KEY":"Finnhub API Key","settings.field.FINNHUB_TIMEOUT":"Finnhub超時(秒)","settings.field.FINNHUB_RATE_LIMIT":"Finnhub速率限制","settings.field.CCXT_DEFAULT_EXCHANGE":"CCXT默認交易所","settings.field.CCXT_TIMEOUT":"CCXT超時(ms)","settings.field.CCXT_PROXY":"CCXT代理","settings.field.AKSHARE_TIMEOUT":"Akshare超時(秒)","settings.field.YFINANCE_TIMEOUT":"YFinance超時(秒)","settings.field.TIINGO_API_KEY":"Tiingo API Key","settings.field.TIINGO_TIMEOUT":"Tiingo超時(秒)","settings.field.SEARCH_PROVIDER":"搜索提供商","settings.field.SEARCH_MAX_RESULTS":"最大結果數","settings.field.SEARCH_GOOGLE_API_KEY":"Google API Key","settings.field.SEARCH_GOOGLE_CX":"Google CX","settings.field.SEARCH_BING_API_KEY":"Bing API Key","settings.field.INTERNAL_API_KEY":"內部API Key","settings.desc.PYTHON_API_HOST":"服務監聽地址。0.0.0.0 允許外部訪問,127.0.0.1 僅本地訪問","settings.desc.PYTHON_API_PORT":"服務監聽端口,默認5000","settings.desc.PYTHON_API_DEBUG":"啟用調試模式,開發時使用。生產環境請關閉","settings.desc.SECRET_KEY":"JWT簽名密鑰。生產環境必須修改以確保安全","settings.desc.ADMIN_USER":"管理員登錄用戶名","settings.desc.ADMIN_PASSWORD":"管理員登錄密碼。生產環境必須修改","settings.desc.OPENROUTER_API_KEY":"OpenRouter API密鑰,用於訪問多種AI模型","settings.desc.OPENROUTER_API_URL":"OpenRouter API端點地址","settings.desc.OPENROUTER_MODEL":"默認使用的AI模型,如 openai/gpt-4o, anthropic/claude-3.5-sonnet","settings.desc.OPENROUTER_TEMPERATURE":"模型創造性(0-1)。越低越確定性,越高越有創意","settings.desc.OPENROUTER_MAX_TOKENS":"每次請求最大輸出token數","settings.desc.OPENROUTER_TIMEOUT":"API請求超時時間(秒)","settings.desc.OPENROUTER_CONNECT_TIMEOUT":"連接建立超時時間(秒)","settings.desc.AI_MODELS_JSON":"自定義模型列表,JSON格式,用於模型選擇器","settings.desc.ENABLE_PENDING_ORDER_WORKER":"啟用後台訂單處理Worker,實盤交易必需","settings.desc.PENDING_ORDER_STALE_SEC":"等待訂單超時時間,超時後標記為過期","settings.desc.ORDER_MODE":"maker: 限價單優先(手續費低),market: 市價單(立即成交)","settings.desc.MAKER_WAIT_SEC":"限價單等待成交時間,超時後自動切換為市價單","settings.desc.MAKER_OFFSET_BPS":"限價單價格偏移(基點)。買入價=市價*(1-偏移),賣出價=市價*(1+偏移)","settings.desc.DISABLE_RESTORE_RUNNING_STRATEGIES":"禁止服務重啟時自動恢復運行中的策略","settings.desc.STRATEGY_TICK_INTERVAL_SEC":"策略主循環檢查間隔(秒)","settings.desc.PRICE_CACHE_TTL_SEC":"價格數據緩存有效期(秒)","settings.desc.MARKET_TYPES_JSON":"自定義市場類型配置,JSON格式","settings.desc.TRADING_SUPPORTED_SYMBOLS_JSON":"支持的交易對列表,JSON格式","settings.desc.DATA_SOURCE_TIMEOUT":"數據源請求默認超時時間","settings.desc.DATA_SOURCE_RETRY":"數據源請求失敗時的重試次數","settings.desc.DATA_SOURCE_RETRY_BACKOFF":"重試間隔時間(秒)","settings.desc.CCXT_DEFAULT_EXCHANGE":"CCXT默認交易所(binance, coinbase, okx等)","settings.desc.CCXT_TIMEOUT":"CCXT請求超時時間(毫秒)","settings.desc.CCXT_PROXY":"CCXT請求代理地址(如 socks5h://127.0.0.1:1080)","settings.desc.FINNHUB_API_KEY":"Finnhub API密鑰,用於美股數據(有免費額度)","settings.desc.FINNHUB_TIMEOUT":"Finnhub API請求超時時間","settings.desc.FINNHUB_RATE_LIMIT":"Finnhub API速率限制(每分鐘請求數)","settings.desc.TIINGO_API_KEY":"Tiingo API密鑰,用於外匯/貴金屬數據(免費版不支持1分鐘數據)","settings.desc.TIINGO_TIMEOUT":"Tiingo API請求超時時間","settings.desc.AKSHARE_TIMEOUT":"Akshare API超時時間,用於A股數據","settings.desc.YFINANCE_TIMEOUT":"Yahoo Finance API超時時間","settings.desc.SIGNAL_WEBHOOK_URL":"信號通知Webhook地址(POST JSON)","settings.desc.SIGNAL_WEBHOOK_TOKEN":"Webhook認證令牌,通過請求頭發送","settings.desc.SIGNAL_NOTIFY_TIMEOUT_SEC":"通知請求超時時間","settings.desc.TELEGRAM_BOT_TOKEN":"Telegram機器人Token,從@BotFather獲取","settings.desc.SMTP_HOST":"SMTP郵件服務器地址(如 smtp.gmail.com)","settings.desc.SMTP_PORT":"SMTP端口(TLS用587,SSL用465,明文用25)","settings.desc.SMTP_USER":"SMTP認證用戶名(通常是郵箱地址)","settings.desc.SMTP_PASSWORD":"SMTP認證密碼或應用專用密碼","settings.desc.SMTP_FROM":"郵件發件人地址","settings.desc.SMTP_USE_TLS":"啟用STARTTLS加密(推薦端口587)","settings.desc.SMTP_USE_SSL":"啟用SSL加密(端口465)","settings.desc.TWILIO_ACCOUNT_SID":"Twilio賬戶SID,從控制台獲取","settings.desc.TWILIO_AUTH_TOKEN":"Twilio認證Token,從控制台獲取","settings.desc.TWILIO_FROM_NUMBER":"Twilio發送短信的號碼(如 +1234567890)","settings.desc.ENABLE_AGENT_MEMORY":"啟用AI Agent記憶功能,用於學習歷史交易","settings.desc.AGENT_MEMORY_ENABLE_VECTOR":"啟用本地向量相似度搜索進行記憶檢索","settings.desc.AGENT_MEMORY_EMBEDDING_DIM":"記憶向量嵌入維度","settings.desc.AGENT_MEMORY_TOP_K":"檢索時返回的相似記憶數量","settings.desc.AGENT_MEMORY_CANDIDATE_LIMIT":"相似度搜索的候選記憶上限","settings.desc.AGENT_MEMORY_HALF_LIFE_DAYS":"記憶時間衰減的半衰期(天)","settings.desc.AGENT_MEMORY_W_SIM":"記憶排序中相似度分數的權重(0-1)","settings.desc.AGENT_MEMORY_W_RECENCY":"記憶排序中時間新近度的權重(0-1)","settings.desc.AGENT_MEMORY_W_RETURNS":"記憶排序中收益表現的權重(0-1)","settings.desc.ENABLE_REFLECTION_WORKER":"啟用後台自動交易反思Worker","settings.desc.REFLECTION_WORKER_INTERVAL_SEC":"自動反思運行間隔(默認24小時)","settings.desc.PROXY_HOST":"代理服務器主機名或IP","settings.desc.PROXY_PORT":"代理服務器端口(留空則禁用代理)","settings.desc.PROXY_SCHEME":"代理協議類型。socks5h 表示DNS也走代理","settings.desc.PROXY_URL":"完整代理URL(設置後覆蓋上面的配置)","settings.desc.SEARCH_PROVIDER":"網頁搜索提供商,用於AI研究功能","settings.desc.SEARCH_MAX_RESULTS":"搜索返回的最大結果數","settings.desc.SEARCH_GOOGLE_API_KEY":"Google自定義搜索API密鑰","settings.desc.SEARCH_GOOGLE_CX":"Google可編程搜索引擎ID (CX)","settings.desc.SEARCH_BING_API_KEY":"Microsoft Bing網頁搜索API密鑰","settings.desc.INTERNAL_API_KEY":"內部API認證密鑰,用於服務間調用","settings.desc.CORS_ORIGINS":"允許的CORS來源(* 表示全部,或逗號分隔的列表)","settings.desc.RATE_LIMIT":"每IP每分鐘的API請求限制","settings.desc.ENABLE_CACHE":"啟用響應緩存以提高性能","settings.desc.ENABLE_REQUEST_LOG":"記錄所有API請求日誌,用於調試","settings.desc.ENABLE_AI_ANALYSIS":"啟用AI驅動的市場分析功能","portfolio.summary.totalValue":"總市值","portfolio.summary.totalCost":"總成本","portfolio.summary.totalPnl":"總盈虧","portfolio.summary.positionCount":"持倉數量","portfolio.summary.profitLossRatio":"盈利/虧損","portfolio.summary.today":"今日","portfolio.summary.todayPnl":"今日盈虧","portfolio.summary.bestPerformer":"最佳表現","portfolio.summary.worstPerformer":"最差表現","portfolio.summary.priceSync":"價格同步","portfolio.summary.syncInterval":"刷新間隔","portfolio.summary.justNow":"剛剛","portfolio.summary.ago":"前","portfolio.positions.title":"我的持倉","portfolio.positions.add":"添加持倉","portfolio.positions.addFirst":"添加第一筆持倉","portfolio.positions.empty":"暫無持倉記錄","portfolio.positions.deleteConfirm":"確定刪除這筆持倉嗎?","portfolio.positions.currentPrice":"現價","portfolio.positions.entryPrice":"買入價","portfolio.positions.quantity":"數量","portfolio.positions.side":"方向","portfolio.positions.long":"做多","portfolio.positions.short":"做空","portfolio.positions.marketValue":"市值","portfolio.positions.pnl":"盈虧","portfolio.positions.items":"個持倉","portfolio.monitors.title":"AI 監控","portfolio.monitors.add":"添加監控","portfolio.monitors.addFirst":"添加 AI 監控","portfolio.monitors.empty":"暫無監控任務","portfolio.monitors.deleteConfirm":"確定刪除這個監控任務嗎?","portfolio.monitors.interval":"執行間隔","portfolio.monitors.lastRun":"上次執行","portfolio.monitors.nextRun":"下次執行","portfolio.monitors.channels":"通知渠道","portfolio.monitors.runNow":"立即執行","portfolio.monitors.analysisResult":"AI 分析結果","portfolio.monitors.runningTitle":"AI 分析已啟動","portfolio.monitors.runningDesc":"分析正在後臺運行,完成後會通過通知推送結果。分析多個持倉可能需要幾分鐘時間。","portfolio.monitors.timeoutTitle":"請求超時","portfolio.monitors.timeoutDesc":"分析可能正在後臺運行中,請稍後查看通知獲取結果。如果長時間沒有收到通知,請重試。","portfolio.modal.addPosition":"添加持倉","portfolio.modal.editPosition":"編輯持倉","portfolio.modal.addMonitor":"添加監控","portfolio.modal.editMonitor":"編輯監控","portfolio.form.market":"市場","portfolio.form.marketRequired":"請選擇市場","portfolio.form.selectMarket":"選擇市場","portfolio.form.symbol":"標的代碼","portfolio.form.symbolRequired":"請輸入標的代碼","portfolio.form.searchSymbol":"搜索或輸入標的代碼","portfolio.form.useAsSymbol":"使用","portfolio.form.asSymbolCode":"作為標的代碼","portfolio.form.symbolHint":"可搜索標的庫,或直接輸入任意代碼","portfolio.form.side":"方向","portfolio.form.quantity":"數量","portfolio.form.quantityRequired":"請輸入數量","portfolio.form.enterQuantity":"輸入持倉數量","portfolio.form.entryPrice":"買入價","portfolio.form.entryPriceRequired":"請輸入買入價","portfolio.form.enterEntryPrice":"輸入買入價格","portfolio.form.notes":"備注","portfolio.form.enterNotes":"可選:添加備注","portfolio.form.monitorName":"監控名稱","portfolio.form.monitorNameRequired":"請輸入監控名稱","portfolio.form.enterMonitorName":"例如:每日組合分析","portfolio.form.interval":"執行間隔","portfolio.form.minutes":"分鐘","portfolio.form.hour":"小時","portfolio.form.hours":"小時","portfolio.form.notifyChannels":"通知渠道","portfolio.form.browser":"瀏覽器通知","portfolio.form.email":"郵件","portfolio.form.telegramChatId":"Telegram Chat ID","portfolio.form.enterTelegramChatId":"輸入 Telegram Chat ID","portfolio.form.telegramRequired":"請輸入 Telegram Chat ID","portfolio.form.emailAddress":"郵箱地址","portfolio.form.enterEmail":"輸入郵箱地址","portfolio.form.emailRequired":"請輸入郵箱地址","portfolio.form.emailInvalid":"請輸入有效的郵箱地址","portfolio.form.customPrompt":"自定義提示","portfolio.form.customPromptPlaceholder":'可選:添加特別關注點,例如"重點關注科技股風險"',"portfolio.form.monitorScope":"監控範圍","portfolio.form.allPositions":"全部持倉","portfolio.form.selectedPositions":"指定持倉","portfolio.form.selectPositions":"選擇持倉","portfolio.form.selectAll":"全選","portfolio.form.deselectAll":"全不選","portfolio.form.selectedCount":"已選 {count}/{total}","portfolio.form.pleaseSelectPositions":"請至少選擇一個持倉進行監控","portfolio.message.loadFailed":"加載數據失敗","portfolio.message.saveSuccess":"保存成功","portfolio.message.saveFailed":"保存失敗","portfolio.message.deleteSuccess":"刪除成功","portfolio.message.deleteFailed":"刪除失敗","portfolio.message.updateFailed":"更新失敗","portfolio.message.monitorEnabled":"監控已啟用","portfolio.message.monitorDisabled":"監控已暫停","portfolio.message.monitorRunSuccess":"分析完成","portfolio.message.monitorRunFailed":"分析失敗","portfolio.message.monitorRunning":"AI 分析已啟動,請等待通知","portfolio.groups.all":"全部持倉","portfolio.groups.ungrouped":"未分組","portfolio.form.group":"分組","portfolio.form.enterGroup":"輸入或選擇分組","portfolio.alerts.title":"價格/盈虧預警","portfolio.alerts.addAlert":"添加預警","portfolio.alerts.editAlert":"編輯預警","portfolio.alerts.alertType":"預警類型","portfolio.alerts.priceAbove":"價格高於","portfolio.alerts.priceBelow":"價格低於","portfolio.alerts.pnlAbove":"盈利高於 (%)","portfolio.alerts.pnlBelow":"虧損低於 (%)","portfolio.alerts.threshold":"閾值","portfolio.alerts.thresholdRequired":"請輸入閾值","portfolio.alerts.enterPrice":"輸入價格","portfolio.alerts.enterPercent":"輸入百分比","portfolio.alerts.currentPrice":"當前價格","portfolio.alerts.currentPriceHint":"當前價格","portfolio.alerts.repeatInterval":"重複提醒","portfolio.alerts.noRepeat":"不重複 (觸發一次)","portfolio.alerts.every5min":"每 5 分鐘","portfolio.alerts.every15min":"每 15 分鐘","portfolio.alerts.every30min":"每 30 分鐘","portfolio.alerts.every1hour":"每 1 小時","portfolio.alerts.every4hours":"每 4 小時","portfolio.alerts.onceDaily":"每天一次","portfolio.alerts.enabled":"啟用預警","portfolio.alerts.enabledDesc":"開啟後將自動監測並觸發通知","portfolio.alerts.delete":"刪除","portfolio.alerts.deleteConfirm":"確定要刪除此預警嗎?","portfolio.modal.addAlert":"添加預警","portfolio.modal.editAlert":"編輯預警","menu.userManage":"用戶管理","menu.myProfile":"個人中心","userManage.title":"用戶管理","userManage.searchPlaceholder":"搜索用戶名/郵箱/暱稱","userManage.description":"管理系統用戶、角色和權限","userManage.createUser":"創建用戶","userManage.editUser":"編輯用戶","userManage.username":"用戶名","userManage.password":"密碼","userManage.nickname":"暱稱","userManage.email":"郵箱","userManage.role":"角色","userManage.status":"狀態","userManage.lastLogin":"最後登錄","userManage.active":"啟用","userManage.disabled":"禁用","userManage.neverLogin":"從未登錄","userManage.usernameRequired":"請輸入用戶名","userManage.usernamePlaceholder":"輸入用戶名","userManage.passwordRequired":"請輸入密碼","userManage.passwordPlaceholder":"輸入密碼(至少6位)","userManage.passwordMin":"密碼至少6個字符","userManage.nicknamePlaceholder":"輸入暱稱","userManage.emailPlaceholder":"輸入郵箱","userManage.emailInvalid":"郵箱格式不正確","userManage.rolePlaceholder":"選擇角色","userManage.statusPlaceholder":"選擇狀態","userManage.resetPassword":"重置密碼","userManage.resetPasswordWarning":"此操作將重置用戶密碼","userManage.newPassword":"新密碼","userManage.newPasswordPlaceholder":"輸入新密碼","userManage.confirmDelete":"確定要刪除此用戶嗎?","userManage.roleAdmin":"管理員","userManage.roleManager":"經理","userManage.roleUser":"普通用戶","userManage.roleViewer":"訪客","userManage.credits":"積分","userManage.adjustCredits":"調整積分","userManage.setVip":"設置VIP","userManage.currentCredits":"當前積分","userManage.newCredits":"新積分","userManage.enterCredits":"輸入新的積分數量","userManage.creditsNonNegative":"積分不能為負數","userManage.currentVip":"當前VIP狀態","userManage.vipActive":"有效","userManage.vipExpired":"已過期","userManage.vipDays":"VIP天數","userManage.vipExpiresAt":"VIP過期時間","userManage.cancelVip":"取消VIP","userManage.days":"天","userManage.customDate":"自定義日期","userManage.selectDate":"請選擇日期","userManage.remark":"備注","userManage.remarkPlaceholder":"可選備注","profile.title":"個人中心","profile.description":"管理您的賬戶設置和偏好","profile.basicInfo":"基本信息","profile.changePassword":"修改密碼","profile.username":"用戶名","profile.nickname":"暱稱","profile.email":"郵箱","profile.lastLogin":"最後登錄","profile.nicknamePlaceholder":"輸入您的暱稱","profile.emailPlaceholder":"輸入您的郵箱","profile.emailInvalid":"郵箱格式不正確","profile.emailCannotChange":"註冊後郵箱不可修改","profile.passwordHint":"密碼至少需要6個字符","profile.oldPassword":"當前密碼","profile.newPassword":"新密碼","profile.confirmPassword":"確認密碼","profile.oldPasswordRequired":"請輸入當前密碼","profile.oldPasswordPlaceholder":"輸入當前密碼","profile.newPasswordRequired":"請輸入新密碼","profile.newPasswordPlaceholder":"輸入新密碼","profile.confirmPasswordRequired":"請確認新密碼","profile.confirmPasswordPlaceholder":"再次輸入新密碼","profile.passwordMin":"密碼至少6個字符","profile.passwordMismatch":"兩次輸入的密碼不一致","profile.credits.title":"我的積分","profile.credits.unit":"積分","profile.credits.recharge":"開通/充值","profile.credits.vipExpires":"VIP有效期至","profile.credits.vipExpired":"VIP已過期","profile.credits.noVip":"非VIP用戶","profile.credits.hint":"使用AI分析等功能會消耗積分,VIP用戶免費","profile.creditsLog":"消費記錄","profile.creditsLog.time":"時間","profile.creditsLog.action":"類型","profile.creditsLog.amount":"變動","profile.creditsLog.balance":"餘額","profile.creditsLog.remark":"備注","profile.creditsLog.actionConsume":"消費","profile.creditsLog.actionRecharge":"充值","profile.creditsLog.actionAdjust":"調整","profile.creditsLog.actionRefund":"退款","profile.creditsLog.actionVipGrant":"VIP授予","profile.creditsLog.actionVipRevoke":"VIP取消","profile.creditsLog.actionRegisterBonus":"註冊獎勵","profile.creditsLog.actionReferralBonus":"邀請獎勵","profile.referral.title":"邀請好友","profile.referral.listTab":"邀請列表","profile.referral.totalInvited":"已邀請","profile.referral.bonusPerInvite":"每邀請獲得","profile.referral.yourLink":"您的邀請鏈接","profile.referral.copyLink":"複製鏈接","profile.referral.linkCopied":"邀請鏈接已複製","profile.referral.newUserBonus":"新用戶註冊獲得","profile.referral.user":"用戶","profile.referral.registerTime":"註冊時間","profile.referral.noReferrals":"暫無邀請記錄","profile.referral.shareNow":"立即分享邀請","profile.notifications.title":"通知設定","profile.notifications.hint":"配置您的預設通知方式,在建立資產監控和預警時將自動使用這些設定","profile.notifications.defaultChannels":"預設通知管道","profile.notifications.browser":"站內通知","profile.notifications.email":"郵件","profile.notifications.phone":"簡訊","profile.notifications.telegramBotToken":"Telegram Bot Token","profile.notifications.telegramBotTokenPlaceholder":"請輸入您的 Telegram Bot Token","profile.notifications.telegramBotTokenHint":"透過 @BotFather 建立機器人取得 Token","profile.notifications.telegramChatId":"Telegram Chat ID","profile.notifications.telegramPlaceholder":"請輸入您的 Telegram Chat ID(如 123456789)","profile.notifications.telegramHint":"發送 /start 給 @userinfobot 可取得您的 Chat ID","profile.notifications.notifyEmail":"通知信箱","profile.notifications.emailPlaceholder":"接收通知的信箱地址","profile.notifications.emailHint":"預設使用帳戶信箱,可設定其他信箱接收通知","profile.notifications.phonePlaceholder":"請輸入手機號(如 +886912345678)","profile.notifications.phoneHint":"需要管理員配置 Twilio 服務後才能使用簡訊通知","profile.notifications.discordWebhook":"Discord Webhook","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"在 Discord 伺服器設定中建立 Webhook","profile.notifications.webhookUrl":"Webhook URL","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"自訂 Webhook 地址,將以 POST JSON 方式推送通知","profile.notifications.webhookToken":"Webhook Token(可選)","profile.notifications.webhookTokenPlaceholder":"用於驗證請求的 Bearer Token","profile.notifications.webhookTokenHint":"將作為 Authorization: Bearer Token 傳送到 Webhook","profile.notifications.testBtn":"發送測試通知","profile.notifications.saveSuccess":"通知設定儲存成功","profile.notifications.selectChannel":"請至少選擇一個通知管道","profile.notifications.fillTelegramToken":"請填寫 Telegram Bot Token","profile.notifications.fillTelegram":"請填寫 Telegram Chat ID","profile.notifications.fillEmail":"請填寫通知信箱","profile.notifications.testSent":"測試通知已發送,請檢查您的通知管道","settings.group.billing":"計費配置","settings.field.BILLING_ENABLED":"啟用計費","settings.field.BILLING_VIP_BYPASS":"VIP免費","settings.field.BILLING_COST_AI_ANALYSIS":"AI分析消耗","settings.field.BILLING_COST_STRATEGY_RUN":"策略運行消耗","settings.field.BILLING_COST_BACKTEST":"回測消耗","settings.field.BILLING_COST_PORTFOLIO_MONITOR":"Portfolio監控消耗","settings.field.CREDITS_REGISTER_BONUS":"註冊獎勵","settings.field.CREDITS_REFERRAL_BONUS":"邀請獎勵","settings.field.RECHARGE_TELEGRAM_URL":"充值Telegram鏈接","settings.desc.BILLING_ENABLED":"啟用計費系統。啟用後,用戶使用某些功能需要消耗積分","settings.desc.BILLING_VIP_BYPASS":"VIP用戶在有效期內可免費使用所有付費功能","settings.desc.BILLING_COST_AI_ANALYSIS":"每次AI分析消耗的積分數","settings.desc.BILLING_COST_STRATEGY_RUN":"啟動策略時消耗的積分數","settings.desc.BILLING_COST_BACKTEST":"每次回測消耗的積分數","settings.desc.BILLING_COST_PORTFOLIO_MONITOR":"每次Portfolio AI監控消耗的積分數","settings.desc.CREDITS_REGISTER_BONUS":"新用戶註冊時獲得的積分獎勵","settings.desc.CREDITS_REFERRAL_BONUS":"用戶通過邀請鏈接成功邀請新用戶時,邀請人獲得的積分獎勵","settings.desc.VERIFICATION_CODE_MAX_ATTEMPTS":"驗證碼驗證失敗的最大嘗試次數,超過後將鎖定","settings.desc.VERIFICATION_CODE_LOCK_MINUTES":"驗證碼驗證失敗次數超過限制後的鎖定時長(分鐘)","settings.desc.RECHARGE_TELEGRAM_URL":"用戶點擊充值時跳轉的Telegram客服鏈接"},y=(0,s.A)((0,s.A)({},p),f)}}]); \ No newline at end of file +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[892],{84540:function(a,t,e){e.d(t,{default:function(){return y}});var s=e(76338),i={items_per_page:"條/頁",jump_to:"跳至",jump_to_confirm:"確定",page:"頁",prev_page:"上一頁",next_page:"下一頁",prev_5:"向前 5 頁",next_5:"向後 5 頁",prev_3:"向前 3 頁",next_3:"向後 3 頁"},r=e(85505),o={today:"今天",now:"此刻",backToToday:"返回今天",ok:"確定",timeSelect:"選擇時間",dateSelect:"選擇日期",clear:"清除",month:"月",year:"年",previousMonth:"上個月 (翻頁上鍵)",nextMonth:"下個月 (翻頁下鍵)",monthSelect:"選擇月份",yearSelect:"選擇年份",decadeSelect:"選擇年代",yearFormat:"YYYY年",dayFormat:"D日",dateFormat:"YYYY年M月D日",dateTimeFormat:"YYYY年M月D日 HH時mm分ss秒",previousYear:"上一年 (Control鍵加左方向鍵)",nextYear:"下一年 (Control鍵加右方向鍵)",previousDecade:"上一年代",nextDecade:"下一年代",previousCentury:"上一世紀",nextCentury:"下一世紀"},n={placeholder:"請選擇時間"},d=n,l={lang:(0,r.A)({placeholder:"請選擇日期",rangePlaceholder:["開始日期","結束日期"]},o),timePickerLocale:(0,r.A)({},d)};l.lang.ok="確 定";var c=l,g=c,m={locale:"zh-tw",Pagination:i,DatePicker:c,TimePicker:d,Calendar:g,Table:{filterTitle:"篩選器",filterConfirm:"確定",filterReset:"重置",selectAll:"全部選取",selectInvert:"反向選取",sortTitle:"排序",expand:"展開行",collapse:"關閉行"},Modal:{okText:"確定",cancelText:"取消",justOkText:"知道了"},Popconfirm:{okText:"確定",cancelText:"取消"},Transfer:{searchPlaceholder:"搜尋資料",itemUnit:"項目",itemsUnit:"項目"},Upload:{uploading:"正在上傳...",removeFile:"刪除檔案",uploadError:"上傳失敗",previewFile:"檔案預覽",downloadFile:"下载文件"},Empty:{description:"無此資料"},PageHeader:{back:"返回"}},b=m,h=e(50304),u=e.n(h),p={antLocale:b,momentName:"zh-tw",momentLocale:u()},f={"common.confirm":"確定","common.cancel":"取消","common.save":"保存","common.delete":"刪除","common.edit":"編輯","common.add":"添加","common.close":"關閉","common.ok":"確定","common.actions":"操作","common.refresh":"刷新",submit:"提交",save:"保存","submit.ok":"提交成功","save.ok":"保存成功","menu.welcome":"歡迎","menu.home":"主頁","menu.dashboard":"儀表盤","menu.dashboard.indicator":"指標分析","menu.dashboard.community":"指標社區","menu.dashboard.analysis":"AI 分析","menu.dashboard.tradingAssistant":"交易助手","menu.dashboard.portfolio":"資產監測","menu.settings":"系統設置","menu.dashboard.aiTradingAssistant":"AI交易助手","menu.dashboard.signalRobot":"信號機器人","menu.dashboard.monitor":"監控頁","menu.dashboard.workplace":"工作臺","menu.form":"表單頁","menu.form.basic-form":"基礎表單","menu.form.step-form":"分步表單","menu.form.step-form.info":"分步表單(填寫轉賬信息)","menu.form.step-form.confirm":"分步表單(確認轉賬信息)","menu.form.step-form.result":"分步表單(完成)","menu.form.advanced-form":"高級表單","menu.list":"列表頁","menu.list.table-list":"查詢表格","menu.list.basic-list":"標準列表","menu.list.card-list":"卡片列表","menu.list.search-list":"搜索列表","menu.list.search-list.articles":"搜索列表(文章)","menu.list.search-list.projects":"搜索列表(項目)","menu.list.search-list.applications":"搜索列表(應用)","menu.profile":"詳情頁","menu.profile.basic":"基礎詳情頁","menu.profile.advanced":"高級詳情頁","menu.result":"結果頁","menu.result.success":"成功頁","menu.result.fail":"失敗頁","menu.exception":"異常頁","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"觸發錯誤","menu.account":"個人頁","menu.account.center":"個人中心","menu.account.settings":"個人設置","menu.account.trigger":"觸發報錯","menu.account.logout":"退出登錄","menu.wallet":"我的錢包","menu.docs":"文檔中心","menu.docs.detail":"文檔詳情","menu.header.refreshPage":"刷新頁面","menu.invite.friends":"邀請好友","app.setting.pagestyle":"整體風格設置","app.setting.pagestyle.light":"亮色菜單風格","app.setting.pagestyle.dark":"暗色菜單風格","app.setting.pagestyle.realdark":"暗黑模式","app.setting.themecolor":"主題色","app.setting.navigationmode":"導航模式","app.setting.sidemenu.nav":"側邊欄導航","app.setting.topmenu.nav":"頂部欄導航","app.setting.content-width":"內容區域寬度","app.setting.content-width.tooltip":"該設定僅 [頂部欄導航] 時有效","app.setting.content-width.fixed":"固定","app.setting.content-width.fluid":"流式","app.setting.fixedheader":"固定 Header","app.setting.fixedheader.tooltip":"固定 Header 時可配置","app.setting.autoHideHeader":"下滑時隱藏 Header","app.setting.fixedsidebar":"固定側邊菜單","app.setting.sidemenu":"側邊菜單布局","app.setting.topmenu":"頂部菜單布局","app.setting.othersettings":"其他設置","app.setting.weakmode":"色弱模式","app.setting.multitab":"多頁籤模式","app.setting.copy":"拷貝設置","app.setting.loading":"加載主題中","app.setting.copyinfo":"拷貝設置成功 src/config/defaultSettings.js","app.setting.copy.success":"復制完畢","app.setting.copy.fail":"復制失敗","app.setting.theme.switching":"正在切換主題!","app.setting.production.hint":"配置欄只在開發環境用於預覽,生產環境不會展現,請拷貝後手動修改配置文件","app.setting.themecolor.daybreak":"拂曉藍(默認)","app.setting.themecolor.dust":"薄暮","app.setting.themecolor.volcano":"火山","app.setting.themecolor.sunset":"日暮","app.setting.themecolor.cyan":"明青","app.setting.themecolor.green":"極光綠","app.setting.themecolor.geekblue":"極客藍","app.setting.themecolor.purple":"醬紫","app.setting.tooltip":"頁面設置","notice.title":"通知中心","notice.empty":"暫無通知","notice.markAllRead":"全部已讀","notice.clear":"清空通知","notice.close":"關閉","notice.justNow":"剛剛","notice.minutesAgo":"分鐘前","notice.hoursAgo":"小時前","notice.daysAgo":"天前","notice.detailInfo":"詳細信息","notice.aiDecision":"AI決策","notice.confidence":"置信度","notice.reasoning":"分析理由","notice.symbol":"標的代碼","notice.currentPrice":"當前價格","notice.triggerPrice":"觸發價格","notice.action":"操作","notice.quantity":"數量","notice.viewPortfolio":"查看持倉","notice.type.aiMonitor":"AI監控","notice.type.priceAlert":"價格提醒","notice.type.signal":"交易信號","notice.type.buy":"買入信號","notice.type.sell":"賣出信號","notice.type.hold":"持有建議","notice.type.trade":"交易執行","notice.type.notification":"系統通知","user.login.userName":"用戶名","user.login.password":"密碼","user.login.username.placeholder":"賬戶: admin","user.login.password.placeholder":"密碼: admin or ant.design","user.login.message-invalid-credentials":"登錄失敗,請檢查郵箱和驗證碼","user.login.message-invalid-verification-code":"驗證碼錯誤","user.login.tab-login-credentials":"賬戶密碼登錄","user.login.tab-login-email":"郵箱登錄","user.login.tab-login-mobile":"手機號登錄","user.login.captcha.placeholder":"請輸入圖形驗證碼","user.login.mobile.placeholder":"手機號","user.login.mobile.verification-code.placeholder":"驗證碼","user.login.email.placeholder":"請輸入郵箱地址","user.login.email.verification-code.placeholder":"請輸入驗證碼","user.login.email.sending":"驗證碼發送中...","user.login.email.send-success-title":"提示","user.login.email.send-success":"驗證碼發送成功,請查收郵件","user.login.sms.send-success":"驗證碼發送成功,請查收短信","user.login.remember-me":"自動登錄","user.login.forgot-password":"忘記密碼","user.login.sign-in-with":"其他登錄方式","user.login.signup":"注冊賬戶","user.login.login":"登錄","user.register.register":"注冊","user.register.email.placeholder":"郵箱","user.register.password.placeholder":"請至少輸入 6 個字符。請不要使用容易被猜到的密碼。","user.register.password.popover-message":"請至少輸入 6 個字符。請不要使用容易被猜到的密碼。","user.register.confirm-password.placeholder":"確認密碼","user.register.get-verification-code":"獲取驗證碼","user.register.sign-in":"使用已有賬戶登錄","user.register-result.msg":"你的賬戶:{email} 注冊成功","user.register-result.activation-email":"激活郵件已發送到你的郵箱中,郵件有效期爲24小時。請及時登錄郵箱,點擊郵件中的鏈接激活帳戶。","user.register-result.back-home":"返回首頁","user.register-result.view-mailbox":"查看郵箱","user.email.required":"請輸入郵箱地址!","user.email.wrong-format":"郵箱地址格式錯誤!","user.userName.required":"請輸入帳戶名或郵箱地址","user.password.required":"請輸入密碼!","user.password.twice.msg":"兩次輸入的密碼不匹配!","user.password.strength.msg":"密碼強度不夠 ","user.password.strength.strong":"強度:強","user.password.strength.medium":"強度:中","user.password.strength.low":"強度:低","user.password.strength.short":"強度:太短","user.confirm-password.required":"請確認密碼!","user.phone-number.required":"請輸入正確的手機號","user.phone-number.wrong-format":"手機號格式錯誤!","user.verification-code.required":"請輸入驗證碼!","user.captcha.required":"請輸入圖形驗證碼!","user.login.infos":"QuantDinger 是一個 AI 多智能體股票分析輔助工具,不具備證券投資諮詢資質。平臺中的所有分析結果、評分、參考意見均由 AI 基於歷史數據自動生成,僅供學習、研究與技術交流使用,不構成任何投資建議或決策依據。股票投資存在市場風險、流動性風險、政策風險等多種風險,可能導致本金損失。用戶應基於自身風險承受能力獨立決策,使用本工具產生的任何投資行爲及其後果由用戶自行承擔。市場有風險,投資需謹慎。","user.login.tab-login-web3":"Web3 登錄","user.login.web3.tip":"使用錢包進行籤名登錄","user.login.web3.connect":"連接錢包並登錄","user.login.web3.no-wallet":"未檢測到錢包","user.login.web3.no-address":"未獲取到錢包地址","user.login.web3.nonce-failed":"獲取隨機數失敗","user.login.web3.verify-failed":"籤名驗證失敗","user.login.web3.success":"登錄成功","user.login.web3.failed":"錢包登錄失敗","nav.no_wallet":"未檢測到錢包","nav.copy":"復制","nav.copy_success":"復制成功","user.login.oauth.google":"使用 Google 登錄","user.login.oauth.github":"使用 GitHub 登錄","user.login.oauth.loading":"正在跳轉到授權頁面...","user.login.oauth.failed":"OAuth 登錄失敗","user.login.oauth.get-url-failed":"獲取授權鏈接失敗","user.login.subtitle":"驅動的全球市場量化洞察","user.login.legal.title":"法律免責聲明","user.login.legal.view":"查看法律免責聲明","user.login.legal.collapse":"收起法律免責聲明","user.login.legal.agree":"我已閱讀並同意法律免責聲明","user.login.legal.required":"請先閱讀並勾選法律免責聲明","user.login.legal.content":"QuantDinger 是一個 AI 多智能體股票分析輔助工具,不具備證券投資諮詢資質。平臺中的所有分析結果、評分、參考意見均由 AI 基於歷史數據自動生成,僅供學習、研究與技術交流使用,不構成任何投資建議或決策依據。股票投資存在市場風險、流動性風險、政策風險等多種風險,可能導致本金損失。用戶應基於自身風險承受能力獨立決策,使用本工具產生的任何投資行爲及其後果由用戶自行承擔。市場有風險,投資需謹慎。","user.login.privacy.title":"用戶隱私條款","user.login.privacy.view":"查看用戶隱私條款","user.login.privacy.collapse":"收起用戶隱私條款","user.login.privacy.content":"我們重視您的隱私與數據保護。1) 收集範圍:僅收集實現功能所需的信息(如郵箱、手機號、區號、Web3 錢包地址)以及必要的日志與設備信息。2) 使用目的:用於賬戶登錄與安全校驗、服務功能提供、問題排查與合規要求。3) 存儲與安全:數據加密存儲,並採取必要的權限與訪問控制措施,盡力防止未經授權的訪問、披露或丟失。4) 共享與第三方:除法律法規要求或履行服務所必需外,不會與第三方共享您的個人信息;若涉及第三方服務(如錢包、短信服務商),僅在實現功能所需的最小範圍內處理。5) Cookies/本地存儲:用於登錄態與必要的會話維持(如令牌、PHPSESSID),您可在瀏覽器中進行清理或限制。6) 個人權利:您可根據法律法規行使查詢、更正、刪除、撤回同意等權利。7) 變更與通知:本條款更新後將在頁面顯著位置提示。繼續使用本服務即表示您已閱讀並同意更新內容。若您不同意本條款或其中任何更新,請停止使用本服務並聯系我們。","account.basicInfo":"基礎信息","account.id":"用戶ID","account.username":"用戶名","account.nickname":"暱稱","account.email":"郵箱","account.mobile":"手機號","account.web3address":"錢包地址","account.pid":"推薦人ID","account.level":"用戶等級","account.money":"餘額","account.qdtBalance":"QDT 餘額","account.score":"積分","account.createtime":"注冊時間","account.inviteLink":"邀請鏈接","account.recharge":"充值","account.rechargeTip":"請使用微信或支付寶掃描下方二維碼進行充值","account.qrCodePlaceholder":"二維碼佔位符(模擬)","account.rechargeAmount":"充值金額","account.enterAmount":"請輸入充值金額","account.rechargeHint":"最小充值金額:1 QDT","account.confirmRecharge":"確認充值","account.enterValidAmount":"請輸入有效的充值金額","account.rechargeSuccess":"充值成功!已充值 {amount} QDT","account.settings.menuMap.basic":"基本設置","account.settings.menuMap.security":"安全設置","account.settings.menuMap.notification":"新消息通知","account.settings.menuMap.moneyLog":"資金明細","account.moneyLog.empty":"暫無資金明細","account.moneyLog.total":"共 {total} 條記錄","account.moneyLog.type.purchase":"購買指標","account.moneyLog.type.recharge":"充值","account.moneyLog.type.refund":"退款","account.moneyLog.type.reward":"獎勵","account.moneyLog.type.income":"指標收入","account.moneyLog.type.commission":"平臺手續費","wallet.balance":"QDT 餘額","wallet.recharge":"充值","wallet.withdraw":"提現","wallet.filter":"篩選","wallet.reset":"重置","wallet.totalRecharge":"累計充值","wallet.totalWithdraw":"累計提現","wallet.totalIncome":"累計收入","wallet.records":"交易記錄與資金明細","wallet.tradingRecords":"交易記錄","wallet.moneyLog":"資金明細","wallet.rechargeTip":"請使用微信或支付寶掃描下方二維碼進行充值","wallet.qrCodePlaceholder":"二維碼佔位符(模擬)","wallet.rechargeAmount":"充值金額","wallet.enterAmount":"請輸入充值金額","wallet.rechargeHint":"最小充值金額:1 QDT","wallet.confirmRecharge":"確認充值","wallet.enterValidAmount":"請輸入有效的充值金額","wallet.rechargeSuccess":"充值成功!已充值 {amount} QDT","wallet.rechargeFailed":"充值失敗","wallet.withdrawTip":"請輸入提現金額和提現地址","wallet.withdrawAmount":"提現金額","wallet.enterWithdrawAmount":"請輸入提現金額","wallet.withdrawHint":"最小提現金額:1 QDT","wallet.withdrawAddress":"提現地址(可選)","wallet.enterWithdrawAddress":"請輸入提現地址","wallet.confirmWithdraw":"確認提現","wallet.enterValidWithdrawAmount":"請輸入有效的提現金額","wallet.insufficientBalance":"餘額不足","wallet.withdrawSuccess":"提現成功!已提現 {amount} QDT","wallet.withdrawFailed":"提現失敗","wallet.noTradingRecords":"暫無交易記錄","wallet.noMoneyLog":"暫無資金明細","wallet.loadTradingRecordsFailed":"加載交易記錄失敗","wallet.loadMoneyLogFailed":"加載資金明細失敗","wallet.moneyLogTotal":"共 {total} 條記錄","wallet.moneyLogTypeTitle":"類型","wallet.moneyLogType.all":"全部類型","wallet.table.time":"時間","wallet.table.type":"類型","wallet.table.price":"價格","wallet.table.amount":"數量","wallet.table.money":"金額","wallet.table.balance":"餘額","wallet.table.memo":"備注","wallet.table.value":"價值","wallet.table.profit":"盈虧","wallet.table.commission":"手續費","wallet.table.total":"共 {total} 條記錄","wallet.tradeType.buy":"買入","wallet.tradeType.sell":"賣出","wallet.tradeType.liquidation":"強平","wallet.tradeType.openLong":"開多","wallet.tradeType.addLong":"加多","wallet.tradeType.closeLong":"平多","wallet.tradeType.closeLongStop":"止損平多","wallet.tradeType.closeLongProfit":"止盈平多","wallet.tradeType.openShort":"開空","wallet.tradeType.addShort":"加空","wallet.tradeType.closeShort":"平空","wallet.tradeType.closeShortStop":"止損平空","wallet.tradeType.closeShortProfit":"止盈平空","wallet.moneyLogType.purchase":"購買指標","wallet.moneyLogType.recharge":"充值","wallet.moneyLogType.withdraw":"提現","wallet.moneyLogType.refund":"退款","wallet.moneyLogType.reward":"獎勵","wallet.moneyLogType.income":"收入","wallet.moneyLogType.commission":"手續費","wallet.web3Address.required":"請先填寫Web3錢包地址","wallet.web3Address.requiredDescription":"充值前需要先綁定您的Web3錢包地址,用於接收充值","wallet.web3Address.placeholder":"請輸入您的Web3錢包地址(0x開頭)","wallet.web3Address.save":"保存錢包地址","wallet.web3Address.saveSuccess":"錢包地址保存成功","wallet.web3Address.saveFailed":"保存錢包地址失敗","wallet.web3Address.invalidFormat":"請輸入有效的Web3錢包地址(以太坊格式:0x開頭42位字符,或TRC20格式:T開頭34位字符)","wallet.selectCoin":"選擇幣種","wallet.selectChain":"選擇鏈","wallet.chain.eth":"ETH(ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"BSC","wallet.targetQdtAmount":"想要兌換的QDT數量(可選)","wallet.targetQdtAmount.placeholder":"請輸入想要兌換的QDT數量,當前QDT價格:{price} USDT","wallet.targetQdtAmount.requiredUsdt":"需要充值:{amount} USDT","wallet.rechargeAddress":"充值地址","wallet.copyAddress":"復制","wallet.copySuccess":"復制成功!","wallet.copyFailed":"復制失敗,請手動復制","wallet.rechargeAddressHint":"請確保使用{chain}鏈向此地址充值{coin}","wallet.qdtPrice.loading":"加載中...","wallet.rechargeTip.new":"請選擇幣種和鏈,然後掃描下方二維碼進行充值","wallet.exchangeRate":"1 QDT ≈ {rate} USDT","wallet.withdrawableAmount":"可提現金額","wallet.totalBalance":"總餘額","wallet.insufficientWithdrawable":"可提現金額不足,當前可提現:{amount} QDT","wallet.withdrawAddressRequired":"請輸入提現地址","wallet.withdrawAddressHint":"請確保地址正確,提現後無法撤銷","wallet.withdrawSubmitSuccess":"提現申請提交成功,請等待審核","menu.footer.contactUs":"聯系我們","menu.footer.getSupport":"獲取支持","menu.footer.socialAccounts":"社交賬戶","menu.footer.userAgreement":"用戶協議","menu.footer.privacyPolicy":"隱私條例","menu.footer.support":"Support","menu.footer.featureRequest":"Feature request","menu.footer.email":"Email","menu.footer.liveChat":"24/7 live chat","dashboard.analysis.title":"Multi-Dimensional Analysis","dashboard.analysis.subtitle":"AI驅動的綜合金融分析平臺","dashboard.analysis.selectSymbol":"選擇或輸入標的代碼","dashboard.analysis.selectModel":"選擇模型","dashboard.analysis.startAnalysis":"開始分析","dashboard.analysis.history":"歷史記錄","dashboard.analysis.tab.overview":"綜合分析","dashboard.analysis.tab.fundamental":"基本面","dashboard.analysis.tab.technical":"技術","dashboard.analysis.tab.news":"新聞","dashboard.analysis.tab.sentiment":"情緒","dashboard.analysis.tab.risk":"風險","dashboard.analysis.tab.debate":"多空辯論","dashboard.analysis.tab.decision":"最終決策","dashboard.analysis.empty.selectSymbol":"選擇標的開始分析","dashboard.analysis.empty.selectSymbolDesc":"從自選股列表中選擇或輸入標的代碼,獲取多維度AI分析報告","dashboard.analysis.empty.startAnalysis":'點擊"開始分析"按鈕進行多維度分析',"dashboard.analysis.empty.startAnalysisDesc":"我們將從基本面、技術、新聞、情緒和風險等多個維度爲您提供全面的分析","dashboard.analysis.empty.noData":"暫無{type}分析數據,請先進行綜合分析","dashboard.analysis.empty.noWatchlist":"暫無自選股","dashboard.analysis.empty.noHistory":"暫無歷史記錄","dashboard.analysis.empty.watchlistHint":"暫無自選股,請先","dashboard.analysis.empty.noDebateData":"暫無辯論數據","dashboard.analysis.empty.noDecisionData":"暫無決策數據","dashboard.analysis.empty.selectAgent":"請選擇一個 Agent 查看分析結果","dashboard.analysis.loading.analyzing":"正在分析中,請稍候...","dashboard.analysis.loading.fundamental":"正在分析基本面數據...","dashboard.analysis.loading.technical":"正在分析技術指標...","dashboard.analysis.loading.news":"正在分析新聞數據...","dashboard.analysis.loading.sentiment":"正在分析市場情緒...","dashboard.analysis.loading.risk":"正在評估風險...","dashboard.analysis.loading.debate":"正在進行多空辯論...","dashboard.analysis.loading.decision":"正在生成最終決策...","dashboard.analysis.score.overall":"綜合評分","dashboard.analysis.score.recommendation":"投資建議","dashboard.analysis.score.confidence":"置信度","dashboard.analysis.dimension.fundamental":"基本面","dashboard.analysis.dimension.technical":"技術","dashboard.analysis.dimension.news":"新聞","dashboard.analysis.dimension.sentiment":"情緒","dashboard.analysis.dimension.risk":"風險","dashboard.analysis.card.dimensionScores":"各維度評分","dashboard.analysis.card.overviewReport":"綜合分析報告","dashboard.analysis.card.financialMetrics":"財務指標","dashboard.analysis.card.fundamentalReport":"基本面分析報告","dashboard.analysis.card.technicalIndicators":"技術指標","dashboard.analysis.card.technicalReport":"技術分析報告","dashboard.analysis.card.newsList":"相關新聞","dashboard.analysis.card.newsReport":"新聞分析報告","dashboard.analysis.card.sentimentIndicators":"情緒指標","dashboard.analysis.card.sentimentReport":"情緒分析報告","dashboard.analysis.card.riskMetrics":"風險指標","dashboard.analysis.card.riskReport":"風險評估報告","dashboard.analysis.card.bullView":"看漲觀點 (Bull)","dashboard.analysis.card.bearView":"看跌觀點 (Bear)","dashboard.analysis.card.researchConclusion":"研究員結論","dashboard.analysis.card.traderPlan":"交易員計劃","dashboard.analysis.card.riskDebate":"風險委員會辯論","dashboard.analysis.card.finalDecision":"最終決策 (Final Decision)","dashboard.analysis.card.tradePlanDetail":"交易計劃詳情","dashboard.analysis.tradingPlan.entry_price":"入場價格","dashboard.analysis.tradingPlan.position_size":"倉位大小","dashboard.analysis.tradingPlan.stop_loss":"止損","dashboard.analysis.tradingPlan.take_profit":"止盈","dashboard.analysis.label.confidence":"置信度","dashboard.analysis.label.keyPoints":"核心要點","dashboard.analysis.label.riskWarning":"風險提示","dashboard.analysis.risk.risky":"激進派觀點 (Risky)","dashboard.analysis.risk.neutral":"中立派觀點 (Neutral)","dashboard.analysis.risk.safe":"保守派觀點 (Safe)","dashboard.analysis.risk.conclusion":"結論","dashboard.analysis.feature.fundamental":"基本面分析","dashboard.analysis.feature.technical":"技術分析","dashboard.analysis.feature.news":"新聞分析","dashboard.analysis.feature.sentiment":"情緒分析","dashboard.analysis.feature.risk":"風險評估","dashboard.analysis.watchlist.title":"我的自選股","dashboard.analysis.watchlist.add":"添加","dashboard.analysis.watchlist.addStock":"添加股票","dashboard.analysis.modal.addStock.title":"添加自選股","dashboard.analysis.modal.addStock.confirm":"確定","dashboard.analysis.modal.addStock.cancel":"取消","dashboard.analysis.modal.addStock.market":"市場類型","dashboard.analysis.modal.addStock.marketPlaceholder":"請選擇市場","dashboard.analysis.modal.addStock.marketRequired":"請選擇市場類型","dashboard.analysis.modal.addStock.symbol":"股票代碼","dashboard.analysis.modal.addStock.symbolPlaceholder":"例如: AAPL, TSLA, GOOGL, 000001, BTC","dashboard.analysis.modal.addStock.symbolRequired":"請輸入股票代碼","dashboard.analysis.modal.addStock.searchPlaceholder":"搜索標的代碼或名稱","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"搜索或輸入標的代碼(如:AAPL、BTC/USDT、EUR/USD)","dashboard.analysis.modal.addStock.searchOrInputHint":"支持搜索數據庫中的標的,或直接輸入代碼(系統將自動獲取名稱)","dashboard.analysis.modal.addStock.search":"搜索","dashboard.analysis.modal.addStock.searchResults":"搜索結果","dashboard.analysis.modal.addStock.hotSymbols":"熱門標的","dashboard.analysis.modal.addStock.noHotSymbols":"暫無熱門標的","dashboard.analysis.modal.addStock.selectedSymbol":"已選標的","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"請先選擇一個標的","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"請先選擇一個標的或輸入標的代碼","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"請輸入標的代碼","dashboard.analysis.modal.addStock.pleaseSelectMarket":"請先選擇市場類型","dashboard.analysis.modal.addStock.searchFailed":"搜索失敗,請稍後重試","dashboard.analysis.modal.addStock.noSearchResults":"未找到匹配的標的","dashboard.analysis.modal.addStock.willAutoFetchName":"系統將自動獲取名稱","dashboard.analysis.modal.addStock.addDirectly":"直接添加","dashboard.analysis.modal.addStock.nameWillBeFetched":"名稱將在添加時自動獲取","dashboard.analysis.market.USStock":"美股","dashboard.analysis.market.Crypto":"加密貨幣","dashboard.analysis.market.Forex":"外匯","dashboard.analysis.market.Futures":"期貨","dashboard.analysis.modal.history.title":"歷史分析記錄","dashboard.analysis.modal.history.viewResult":"查看結果","dashboard.analysis.modal.history.completeTime":"完成時間","dashboard.analysis.modal.history.error":"錯誤","dashboard.analysis.status.pending":"待處理","dashboard.analysis.status.processing":"處理中","dashboard.analysis.status.completed":"已完成","dashboard.analysis.status.failed":"失敗","dashboard.analysis.message.selectSymbol":"請先選擇標的","dashboard.analysis.message.taskCreated":"分析任務已創建,正在後臺執行...","dashboard.analysis.message.analysisComplete":"分析完成","dashboard.analysis.message.analysisCompleteCache":"分析完成(使用緩存數據)","dashboard.analysis.message.analysisFailed":"分析失敗,請稍後重試","dashboard.analysis.message.addStockSuccess":"添加成功","dashboard.analysis.message.addStockFailed":"添加失敗","dashboard.analysis.message.removeStockSuccess":"移除成功","dashboard.analysis.message.removeStockFailed":"移除失敗","dashboard.analysis.message.resumingAnalysis":"正在恢復分析任務...","dashboard.analysis.message.deleteSuccess":"刪除成功","dashboard.analysis.message.deleteFailed":"刪除失敗","dashboard.analysis.modal.history.delete":"刪除","dashboard.analysis.modal.history.deleteConfirm":"確定要刪除這條分析記錄嗎?","dashboard.analysis.test":"工專路 {no} 號店","dashboard.analysis.introduce":"指標說明","dashboard.analysis.total-sales":"總銷售額","dashboard.analysis.day-sales":"日均銷售額¥","dashboard.analysis.visits":"訪問量","dashboard.analysis.visits-trend":"訪問量趨勢","dashboard.analysis.visits-ranking":"門店訪問量排名","dashboard.analysis.day-visits":"日訪問量","dashboard.analysis.week":"周同比","dashboard.analysis.day":"日同比","dashboard.analysis.payments":"支付筆數","dashboard.analysis.conversion-rate":"轉化率","dashboard.analysis.operational-effect":"運營活動效果","dashboard.analysis.sales-trend":"銷售趨勢","dashboard.analysis.sales-ranking":"門店銷售額排名","dashboard.analysis.all-year":"全年","dashboard.analysis.all-month":"本月","dashboard.analysis.all-week":"本周","dashboard.analysis.all-day":"今日","dashboard.analysis.search-users":"搜索用戶數","dashboard.analysis.per-capita-search":"人均搜索次數","dashboard.analysis.online-top-search":"線上熱門搜索","dashboard.analysis.the-proportion-of-sales":"銷售額類別佔比","dashboard.analysis.dropdown-option-one":"操作一","dashboard.analysis.dropdown-option-two":"操作二","dashboard.analysis.channel.all":"全部渠道","dashboard.analysis.channel.online":"線上","dashboard.analysis.channel.stores":"門店","dashboard.analysis.sales":"銷售額","dashboard.analysis.traffic":"客流量","dashboard.analysis.table.rank":"排名","dashboard.analysis.table.search-keyword":"搜索關鍵詞","dashboard.analysis.table.users":"用戶數","dashboard.analysis.table.weekly-range":"周漲幅","dashboard.indicator.selectSymbol":"選擇或輸入標的代碼","dashboard.indicator.emptyWatchlistHint":"暫無自選股,請先添加","dashboard.indicator.hint.selectSymbol":"請選擇標的開始分析","dashboard.indicator.hint.selectSymbolDesc":"在上方搜索框中選擇或輸入股票代碼,查看K線圖表和技術指標","dashboard.indicator.retry":"重試","dashboard.indicator.panel.title":"技術指標","dashboard.indicator.panel.realtimeOn":"關閉實時更新","dashboard.indicator.panel.realtimeOff":"開啓實時更新","dashboard.indicator.panel.themeLight":"切換到深色主題","dashboard.indicator.panel.themeDark":"切換到淺色主題","dashboard.indicator.section.enabled":"已啓用","dashboard.indicator.section.added":"我添加的指標","dashboard.indicator.section.custom":"自己創建的指標","dashboard.indicator.section.bought":"我選購的指標","dashboard.indicator.section.myCreated":"我創建的指標","dashboard.indicator.empty":"暫無指標,請先添加或創建指標","dashboard.indicator.buy":"購買指標","dashboard.indicator.action.start":"啓動","dashboard.indicator.action.stop":"關閉","dashboard.indicator.action.edit":"編輯","dashboard.indicator.action.delete":"刪除","dashboard.indicator.action.backtest":"回測","dashboard.indicator.status.normal":"正常","dashboard.indicator.status.normalPermanent":"正常(永久有效)","dashboard.indicator.status.expired":"已過期","dashboard.indicator.expiry.permanent":"永久有效","dashboard.indicator.expiry.noExpiry":"無到期時間","dashboard.indicator.expiry.expired":"已過期:{date}","dashboard.indicator.expiry.expiresOn":"到期時間:{date}","dashboard.indicator.delete.confirmTitle":"確認刪除","dashboard.indicator.delete.confirmContent":'確定要刪除指標"{name}"嗎?此操作不可恢復。',"dashboard.indicator.delete.confirmOk":"刪除","dashboard.indicator.delete.confirmCancel":"取消","dashboard.indicator.delete.success":"刪除成功","dashboard.indicator.delete.failed":"刪除失敗","dashboard.indicator.save.success":"保存成功","dashboard.indicator.save.failed":"保存失敗","dashboard.indicator.error.loadWatchlistFailed":"加載自選股失敗","dashboard.indicator.error.chartNotReady":"圖表組件未初始化,請先選擇標的並等待圖表加載完成","dashboard.indicator.error.chartMethodNotReady":"圖表組件方法未就緒,請稍後重試","dashboard.indicator.error.chartExecuteNotReady":"圖表組件執行方法未就緒,請稍後重試","dashboard.indicator.error.parseFailed":"無法解析Python代碼","dashboard.indicator.error.parseFailedCheck":"無法解析Python代碼,請檢查代碼格式","dashboard.indicator.error.addIndicatorFailed":"添加指標失敗","dashboard.indicator.error.runIndicatorFailed":"運行指標失敗","dashboard.indicator.error.pleaseLogin":"請先登錄","dashboard.indicator.error.loadDataFailed":"數據加載失敗","dashboard.indicator.error.loadDataFailedDesc":"請檢查網絡連接","dashboard.indicator.error.tiingoSubscription":"外匯1分鐘數據需要 Tiingo 付費訂閱,請使用其他時間週期或升級訂閱","dashboard.indicator.error.pythonEngineFailed":"Python 引擎加載失敗,指標功能可能無法使用","dashboard.indicator.error.chartInitFailed":"圖表初始化失敗","dashboard.indicator.warning.enterCode":"請先輸入指標代碼","dashboard.indicator.warning.pyodideLoadFailed":"Python 引擎加載失敗","dashboard.indicator.warning.pyodideLoadFailedDesc":"您當前所在區域或網絡環境無法使用該功能","dashboard.indicator.warning.chartNotInitialized":"圖表未初始化,無法使用畫線工具","dashboard.indicator.success.runIndicator":"指標運行成功","dashboard.indicator.success.clearDrawings":"已清除所有畫線","dashboard.indicator.sma":"SMA (均線組合)","dashboard.indicator.ema":"EMA (指數均線組合)","dashboard.indicator.rsi":"RSI (相對強弱)","dashboard.indicator.macd":"MACD","dashboard.indicator.bb":"布林帶 (Bollinger Bands)","dashboard.indicator.atr":"ATR (平均真實波幅)","dashboard.indicator.cci":"CCI (商品通道指數)","dashboard.indicator.williams":"Williams %R (威廉指標)","dashboard.indicator.mfi":"MFI (資金流量指標)","dashboard.indicator.adx":"ADX (平均趨向指數)","dashboard.indicator.obv":"OBV (能量潮)","dashboard.indicator.adosc":"ADOSC (積累/派發振蕩器)","dashboard.indicator.ad":"AD (積累/派發線)","dashboard.indicator.kdj":"KDJ (隨機指標)","dashboard.indicator.signal.buy":"BUY","dashboard.indicator.signal.sell":"SELL","dashboard.indicator.signal.supertrendBuy":"SuperTrend Buy","dashboard.indicator.signal.supertrendSell":"SuperTrend Sell","dashboard.indicator.chart.kline":"K線","dashboard.indicator.chart.volume":"成交量","dashboard.indicator.chart.uptrend":"Up Trend","dashboard.indicator.chart.downtrend":"Down Trend","dashboard.indicator.tooltip.time":"時間","dashboard.indicator.tooltip.open":"開","dashboard.indicator.tooltip.close":"收","dashboard.indicator.tooltip.high":"高","dashboard.indicator.tooltip.low":"低","dashboard.indicator.tooltip.volume":"成交量","dashboard.indicator.drawing.line":"線段","dashboard.indicator.drawing.horizontalLine":"水平線","dashboard.indicator.drawing.verticalLine":"垂直線","dashboard.indicator.drawing.ray":"射線","dashboard.indicator.drawing.straightLine":"直線","dashboard.indicator.drawing.parallelLine":"平行線","dashboard.indicator.drawing.priceLine":"價格線","dashboard.indicator.drawing.priceChannel":"價格通道","dashboard.indicator.drawing.fibonacciLine":"斐波那契線","dashboard.indicator.drawing.measure":"測量","dashboard.indicator.drawing.clearAll":"清除所有畫線","dashboard.indicator.market.USStock":"美股","dashboard.indicator.market.Crypto":"加密貨幣","dashboard.indicator.market.Forex":"外匯","dashboard.indicator.market.Futures":"期貨","dashboard.indicator.create":"創建指標","dashboard.indicator.editor.title":"創建/編輯指標","dashboard.indicator.editor.name":"指標名稱","dashboard.indicator.editor.nameRequired":"請輸入指標名稱","dashboard.indicator.editor.namePlaceholder":"請輸入指標名稱","dashboard.indicator.editor.description":"指標描述","dashboard.indicator.editor.descriptionPlaceholder":"請輸入指標描述(可選)","dashboard.indicator.editor.code":"指標腳本(Python)","dashboard.indicator.editor.codeRequired":"請輸入指標代碼","dashboard.indicator.editor.codePlaceholder":"請輸入Python代碼","dashboard.indicator.editor.run":"運行","dashboard.indicator.editor.runHint":"點擊運行按鈕可以在K線圖上預覽指標效果","dashboard.indicator.editor.guide":"開發指南","dashboard.indicator.editor.guideTitle":"Python 指標開發指南","dashboard.indicator.editor.save":"保存","dashboard.indicator.editor.cancel":"取消","dashboard.indicator.editor.unnamed":"未命名指標","dashboard.indicator.editor.publishToCommunity":"發布到社區","dashboard.indicator.editor.publishToCommunityHint":"發布後,其他用戶可以在社區中查看和使用您的指標","dashboard.indicator.editor.indicatorType":"指標類型","dashboard.indicator.editor.indicatorTypeRequired":"請選擇指標類型","dashboard.indicator.editor.indicatorTypePlaceholder":"請選擇指標類型","dashboard.indicator.editor.previewImage":"預覽圖","dashboard.indicator.editor.uploadImage":"上傳圖片","dashboard.indicator.editor.previewImageHint":"建議尺寸:800x400,大小不超過2MB","dashboard.indicator.editor.pricing":"售價(QDT)","dashboard.indicator.editor.pricingType.free":"免費","dashboard.indicator.editor.pricingType.permanent":"永久","dashboard.indicator.editor.pricingType.monthly":"月付","dashboard.indicator.editor.price":"價格","dashboard.indicator.editor.priceRequired":"請輸入價格","dashboard.indicator.editor.pricePlaceholder":"請輸入價格","dashboard.indicator.editor.pricingHint":"免費指標雖然價格爲0,但平臺會根據您的指標使用量和好評率給予獎勵(QDT)","dashboard.indicator.editor.aiGenerate":"智能生成","dashboard.indicator.editor.aiPromptPlaceholder":"請描述你的信號邏輯(只輸出 buy/sell)與繪圖(plots)。倉位/風控/加減倉請在回測配置中設定。","dashboard.indicator.editor.aiGenerateBtn":"AI生成代碼","dashboard.indicator.editor.aiPromptRequired":"請輸入您的想法","dashboard.indicator.editor.aiGenerateSuccess":"代碼生成成功","dashboard.indicator.editor.aiGenerateError":"代碼生成失敗,請稍後重試","dashboard.indicator.editor.verifyCode":"代碼檢查","dashboard.indicator.editor.verifyCodeSuccess":"代碼檢查通過","dashboard.indicator.editor.verifyCodeFailed":"代碼檢查未通過","dashboard.indicator.editor.verifyCodeEmpty":"代碼不能為空","dashboard.indicator.boundary.message":"提示:指標腳本只負責「計算 + 繪圖 + buy/sell 信號」;倉位、風控、加減倉、手續費/滑點屬於策略執行配置。","dashboard.indicator.boundary.indicatorRule":"指標腳本請只輸出 buy/sell(並設定 df['buy']/df['sell'])。不要在腳本內撰寫倉位管理、止盈止損、加減倉。","dashboard.indicator.boundary.backtestRule":"規則:同一根K線若出現主信號(buy/sell→開/平倉/反手),本K線將跳過所有加倉與減倉。","dashboard.indicator.backtest.title":"指標回測","dashboard.indicator.backtest.config":"回測參數","dashboard.indicator.backtest.startDate":"開始日期","dashboard.indicator.backtest.endDate":"結束日期","dashboard.indicator.backtest.selectStartDate":"選擇開始日期","dashboard.indicator.backtest.selectEndDate":"選擇結束日期","dashboard.indicator.backtest.startDateRequired":"請選擇開始日期","dashboard.indicator.backtest.endDateRequired":"請選擇結束日期","dashboard.indicator.backtest.initialCapital":"初始資金","dashboard.indicator.backtest.initialCapitalRequired":"請輸入初始資金","dashboard.indicator.backtest.commission":"手續費率(%)","dashboard.indicator.backtest.commissionHint":"按名義價值(含槓桿)收取;每筆成交(開/平倉)都會從餘額扣除。","dashboard.indicator.backtest.leverage":"槓杆倍率","dashboard.indicator.backtest.timeframe":"K線週期","dashboard.indicator.backtest.tradeDirection":"交易方向","dashboard.indicator.backtest.longOnly":"做多","dashboard.indicator.backtest.shortOnly":"做空","dashboard.indicator.backtest.both":"雙向","dashboard.indicator.backtest.run":"開始回測","dashboard.indicator.backtest.rerun":"重新回測","dashboard.indicator.backtest.close":"關閉","dashboard.indicator.backtest.running":"正在進行指標回測...","dashboard.indicator.backtest.loadingTip1":"正在獲取歷史K線數據...","dashboard.indicator.backtest.loadingTip2":"正在執行策略信號計算...","dashboard.indicator.backtest.loadingTip3":"正在模擬交易執行...","dashboard.indicator.backtest.loadingTip4":"正在計算回測指標...","dashboard.indicator.backtest.loadingTip5":"即將完成,請稍候...","dashboard.indicator.backtest.results":"回測結果","dashboard.indicator.backtest.totalReturn":"總收益率","dashboard.indicator.backtest.annualReturn":"年化收益","dashboard.indicator.backtest.maxDrawdown":"最大回撤","dashboard.indicator.backtest.sharpeRatio":"夏普比率","dashboard.indicator.backtest.winRate":"勝率","dashboard.indicator.backtest.profitFactor":"盈虧比","dashboard.indicator.backtest.totalTrades":"交易次數","dashboard.indicator.totalReturn":"總收益率","dashboard.indicator.annualReturn":"年化收益率","dashboard.indicator.maxDrawdown":"最大回撤","dashboard.indicator.sharpeRatio":"夏普比率","dashboard.indicator.winRate":"勝率","dashboard.indicator.profitFactor":"盈虧比","dashboard.indicator.totalTrades":"總交易次數","dashboard.indicator.backtest.totalCommission":"總手續費","dashboard.indicator.backtest.equityCurve":"收益曲線","dashboard.indicator.backtest.strategy":"指標收益","dashboard.indicator.backtest.benchmark":"基準收益","dashboard.indicator.backtest.tradeHistory":"交易記錄","dashboard.indicator.backtest.tradeTime":"時間","dashboard.indicator.backtest.tradeType":"類型","dashboard.indicator.backtest.buy":"買入","dashboard.indicator.backtest.sell":"賣出","dashboard.indicator.backtest.liquidation":"爆倉","dashboard.indicator.backtest.openLong":"開多","dashboard.indicator.backtest.closeLong":"平多","dashboard.indicator.backtest.closeLongStop":"平多(止損)","dashboard.indicator.backtest.closeLongProfit":"平多(止盈)","dashboard.indicator.backtest.addLong":"加多倉","dashboard.indicator.backtest.openShort":"開空","dashboard.indicator.backtest.closeShort":"平空","dashboard.indicator.backtest.closeShortStop":"平空(止損)","dashboard.indicator.backtest.closeShortProfit":"平空(止盈)","dashboard.indicator.backtest.addShort":"加空倉","dashboard.indicator.backtest.price":"價格","dashboard.indicator.backtest.amount":"數量","dashboard.indicator.backtest.balance":"賬戶餘額","dashboard.indicator.backtest.profit":"盈虧","dashboard.indicator.backtest.success":"回測完成","dashboard.indicator.backtest.failed":"回測失敗,請稍後重試","dashboard.indicator.backtest.quickSelect":"快速選擇","dashboard.indicator.backtest.precisionMode":"回測精度模式","dashboard.indicator.backtest.estimatedCandles":"預計處理約 {count} 根K線","dashboard.indicator.backtest.highPrecisionDesc":"使用1分鐘級別K線進行高精度回測,止損止盈觸發更精確","dashboard.indicator.backtest.mediumPrecisionDesc":"回測區間超過30天,使用5分鐘級別K線以平衡精度與性能","dashboard.indicator.backtest.standardModeWarning":"使用標準回測模式","dashboard.indicator.backtest.standardModeDesc":"當前配置不支持高精度回測,將使用策略K線進行回測","dashboard.indicator.backtest.onlyCryptoSupported":"高精度回測僅支持加密貨幣市場","dashboard.indicator.backtest.noIndicatorCode":"該指標沒有可回測的代碼","dashboard.indicator.backtest.noSymbol":"請先選擇交易標的","dashboard.indicator.backtest.dateRangeExceeded":"回測時間範圍超出限制:{timeframe}周期最多可回測{maxRange}","dashboard.indicator.backtest.dateRangeExceededDays":"回測時間範圍超出限制:{timeframe}周期最多可回測{maxRange}({maxDays}天)","dashboard.indicator.backtest.metaLine":"標的:{symbol} | 市場:{market} | 週期:{timeframe}","dashboard.indicator.backtest.savedRunId":"回測已保存,記錄ID:{id}","dashboard.indicator.backtest.historyTitle":"回測記錄","dashboard.indicator.backtest.historyRefresh":"重新整理","dashboard.indicator.backtest.historyView":"查看","dashboard.indicator.backtest.historyNoData":"暫無回測記錄","dashboard.indicator.backtest.historyUseCurrent":"僅目前幣種/週期","dashboard.indicator.backtest.historyFilterSymbol":"幣種(Symbol)","dashboard.indicator.backtest.historyFilterTimeframe":"週期(Timeframe)","dashboard.indicator.backtest.historyApply":"套用篩選","dashboard.indicator.backtest.historyAIAnalyze":"AI分析","dashboard.indicator.backtest.historyAIAnalyzeTitle":"AI 分析建議","dashboard.indicator.backtest.historyNoAIResult":"暫無 AI 分析結果","dashboard.indicator.backtest.historyRunId":"記錄ID","dashboard.indicator.backtest.historyCreatedAt":"時間","dashboard.indicator.backtest.historyRange":"區間","dashboard.indicator.backtest.historyStatus":"狀態","dashboard.indicator.backtest.historyStatusSuccess":"成功","dashboard.indicator.backtest.historyStatusFailed":"失敗","dashboard.indicator.backtest.historyActions":"操作","dashboard.indicator.backtest.prev":"上一步","dashboard.indicator.backtest.next":"下一步","dashboard.indicator.backtest.steps.strategy.title":"執行配置","dashboard.indicator.backtest.steps.strategy.desc":"倉位/風控/加減倉(策略層)","dashboard.indicator.backtest.steps.trading.title":"回測環境","dashboard.indicator.backtest.steps.trading.desc":"時間/資金/費率/槓桿/滑點","dashboard.indicator.backtest.steps.results.title":"結果","dashboard.indicator.backtest.steps.results.desc":"統計與交易明細","dashboard.indicator.backtest.panel.risk":"執行配置:風控(止損/移動止盈)","dashboard.indicator.backtest.panel.scale":"執行配置:加倉(順勢/逆勢)","dashboard.indicator.backtest.panel.reduce":"執行配置:減倉(順勢/逆勢)","dashboard.indicator.backtest.panel.position":"執行配置:開倉倉位","dashboard.indicator.backtest.field.stopLossPct":"止損(%)","dashboard.indicator.backtest.field.takeProfitPct":"止盈(%)","dashboard.indicator.backtest.field.trailingEnabled":"移動止盈","dashboard.indicator.backtest.field.trailingStopPct":"移動回撤(%)","dashboard.indicator.backtest.field.trailingActivationPct":"移動止盈激活(%)","dashboard.indicator.backtest.field.slippage":"滑點(%)","dashboard.indicator.backtest.field.trendAddEnabled":"順勢加倉","dashboard.indicator.backtest.field.dcaAddEnabled":"逆勢加倉","dashboard.indicator.backtest.field.trendAddStepPct":"加倉觸發(%)","dashboard.indicator.backtest.field.dcaAddStepPct":"加倉觸發(%)","dashboard.indicator.backtest.field.trendAddSizePct":"每次加倉資金占比(%)","dashboard.indicator.backtest.field.dcaAddSizePct":"每次加倉資金占比(%)","dashboard.indicator.backtest.field.trendAddMaxTimes":"最多加倉次數","dashboard.indicator.backtest.field.dcaAddMaxTimes":"最多加倉次數","dashboard.indicator.backtest.field.trendReduceEnabled":"順勢減倉","dashboard.indicator.backtest.field.adverseReduceEnabled":"逆勢減倉","dashboard.indicator.backtest.field.trendReduceStepPct":"順勢觸發(%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"逆勢觸發(%)","dashboard.indicator.backtest.field.trendReduceSizePct":"每次減倉比例(%)","dashboard.indicator.backtest.field.adverseReduceSizePct":"每次逆勢減倉比例(%)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"最多順勢減倉次數","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"最多逆勢減倉次數","dashboard.indicator.backtest.field.entryPct":"開倉資金占比(%)","dashboard.indicator.backtest.field.minOrderPct":"單次最小資金占比(%)(可選)","dashboard.indicator.backtest.hint.entryPctMax":"最大可開倉:{maxPct}%(為後續加倉預留資金)","dashboard.indicator.backtest.closeLongTrailing":"平多(移動止損/止盈)","dashboard.indicator.backtest.reduceLong":"多頭減倉","dashboard.indicator.backtest.closeShortTrailing":"平空(移動止損/止盈)","dashboard.indicator.backtest.reduceShort":"空頭減倉","dashboard.docs.title":"文檔中心","dashboard.docs.search.placeholder":"搜索文檔...","dashboard.docs.category.all":"全部","dashboard.docs.category.guide":"開發指南","dashboard.docs.category.api":"API文檔","dashboard.docs.category.tutorial":"教程","dashboard.docs.category.faq":"常見問題","dashboard.docs.featured.title":"推薦文檔","dashboard.docs.featured.tag":"推薦","dashboard.docs.list.views":"瀏覽","dashboard.docs.list.author":"作者","dashboard.docs.list.empty":"暫無文檔","dashboard.docs.list.backToAll":"返回全部文檔","dashboard.docs.list.total":"共 {count} 篇文檔","dashboard.docs.detail.back":"返回文檔列表","dashboard.docs.detail.updatedAt":"更新於","dashboard.docs.detail.related":"相關文檔","dashboard.docs.detail.notFound":"文檔不存在","dashboard.docs.detail.error":"文檔不存在或已被刪除","dashboard.docs.search.result":"搜索結果","dashboard.docs.search.keyword":"關鍵詞","community.filter.indicatorType":"指標類型","community.filter.all":"全部","community.filter.other":"其他選項","community.filter.pricing":"定價類型","community.filter.allPricing":"全部定價","community.filter.sortBy":"排序方式","community.filter.search":"搜索","community.filter.searchPlaceholder":"搜索指標名稱","community.indicatorType.trend":"趨勢型","community.indicatorType.momentum":"動量型","community.indicatorType.volatility":"波動率","community.indicatorType.volume":"成交量","community.indicatorType.custom":"自定義","community.pricing.free":"免費","community.pricing.paid":"付費","community.sort.downloads":"下載量","community.sort.rating":"評分","community.sort.newest":"最新發布","community.pagination.total":"共 {total} 個指標","community.noDescription":"暫無描述","community.detail.type":"類型","community.detail.pricing":"定價","community.detail.rating":"評分","community.detail.downloads":"下載量","community.detail.author":"作者","community.detail.description":"簡介","community.detail.detailContent":"詳細說明","community.detail.backtestStats":"回測統計","community.action.purchase":"購買指標","community.action.addToMyIndicators":"添加到我的指標","community.action.favorite":"收藏","community.action.unfavorite":"取消收藏","community.action.buyNow":"立即購買","community.action.renew":"續費","community.purchase.price":"價格","community.purchase.permanent":"永久","community.purchase.monthly":"月","community.purchase.confirmBuy":"確認購買該指標({price} QDT)?","community.purchase.confirmRenew":"確認續費該指標({price} QDT/月)?","community.purchase.confirmFree":"確認添加該免費指標?","community.purchase.confirmTitle":"確認操作","community.purchase.owned":"您已購買該指標(永久有效)","community.purchase.ownIndicator":"這是您發布的指標","community.purchase.expired":"您的訂閱已過期","community.purchase.expiresOn":"到期時間:{date}","community.tabs.detail":"指標詳情","community.tabs.backtest":"回測數據","community.tabs.ratings":"用戶評價","community.rating.myRating":"我的評分","community.rating.stars":"{count} 星","community.rating.commentPlaceholder":"分享您的使用體驗...","community.rating.submit":"提交評分","community.rating.modify":"修改","community.rating.saveModify":"保存修改","community.rating.cancel":"取消","community.rating.selectRating":"請選擇評分","community.rating.success":"評分成功","community.rating.modifySuccess":"修改評價成功","community.rating.failed":"評分失敗","community.rating.noRatings":"暫無評價","community.backtest.note":"以上數據爲歷史回測結果,僅供參考,不代表未來收益","community.backtest.noData":"暫無回測數據","community.backtest.uploadHint":"作者尚未上傳回測數據","community.message.loadFailed":"加載指標列表失敗","community.message.purchaseProcessing":"正在處理購買請求...","community.message.downloadSuccess":"指標已添加到我的指標列表","community.message.favoriteSuccess":"收藏成功","community.message.unfavoriteSuccess":"取消收藏成功","community.message.operationSuccess":"操作成功","community.message.operationFailed":"操作失敗","community.banner.readOnly":"僅供瀏覽","community.banner.loginHint":"如需登錄註冊請點擊按鈕跳轉到獨立頁面,從而避免CSRF問題","community.banner.jumpButton":"跳轉到登錄/註冊","dashboard.totalEquity":"總權益","dashboard.totalPnL":"總盈虧","dashboard.aiStrategies":"AI 策略","dashboard.indicatorStrategies":"指標策略","dashboard.running":"運行中","dashboard.enabled":"已啟用","dashboard.pnlHistory":"歷史盈虧","dashboard.strategyPerformance":"策略盈虧佔比","dashboard.drawdown":"回撤曲線","dashboard.strategyRanking":"策略排行榜","dashboard.winRate":"勝率","dashboard.profitFactor":"盈虧比","dashboard.maxDrawdown":"最大回撤","dashboard.totalTrades":"總交易","dashboard.runningStrategies":"運行中策略","dashboard.equityCurve":"權益曲線","dashboard.strategyAllocation":"策略分佈","dashboard.drawdownCurve":"回撤曲線","dashboard.hourlyDistribution":"交易時段","dashboard.dailyPnl":"日盈虧","dashboard.cumulativePnl":"累計盈虧","dashboard.tradeCount":"交易次數","dashboard.profit":"盈虧","dashboard.noData":"暫無數據","dashboard.noStrategyData":"暫無策略數據","dashboard.ranking.totalProfit":"總收益","dashboard.ranking.roi":"收益率","dashboard.ranking.trades":"交易數","dashboard.unit.trades":"筆","dashboard.unit.strategies":"個","dashboard.label.avgDaily":"日均","dashboard.label.avgProfit":"平均盈利","dashboard.label.win":"勝","dashboard.label.lose":"負","dashboard.label.trade":"交易","dashboard.label.indicator":"指標","dashboard.label.totalPnl":"總盈虧","dashboard.label.maxDrawdownPoint":"最大回撤","dashboard.profitCalendar":"收益日曆","dashboard.recentTrades":"最近交易","dashboard.currentPositions":"當前持倉","dashboard.table.time":"時間","dashboard.table.strategy":"策略名稱","dashboard.table.symbol":"標的","dashboard.table.type":"類型","dashboard.table.side":"方向","dashboard.table.size":"持倉量","dashboard.table.entryPrice":"開倉均價","dashboard.table.price":"價格","dashboard.table.amount":"數量","dashboard.table.profit":"盈虧","dashboard.pendingOrders":"訂單執行記錄","dashboard.totalOrders":"共 {total} 條","dashboard.viewError":"查看錯誤","dashboard.filled":"已成交","dashboard.orderTable.time":"創建時間","dashboard.orderTable.strategy":"策略","dashboard.orderTable.symbol":"交易對","dashboard.orderTable.signalType":"信號類型","dashboard.orderTable.amount":"數量","dashboard.orderTable.price":"成交價","dashboard.orderTable.status":"狀態","dashboard.orderTable.timeInfo":"時間","dashboard.orderTable.executedAt":"執行時間","dashboard.orderTable.exchange":"交易所","dashboard.orderTable.notify":"通知方式","dashboard.orderTable.actions":"操作","dashboard.orderTable.delete":"刪除","dashboard.orderTable.deleteConfirm":"確認刪除這條記錄?","dashboard.orderTable.deleteSuccess":"刪除成功","dashboard.orderTable.deleteFailed":"刪除失敗","dashboard.newOrderNotify":"新訂單提醒","dashboard.newOrderDesc":"有新的訂單執行記錄","dashboard.soundEnabled":"聲音提醒已開啟","dashboard.soundDisabled":"聲音提醒已關閉","dashboard.clickToMute":"點擊關閉聲音提醒","dashboard.clickToUnmute":"點擊開啟聲音提醒","dashboard.signalType.openLong":"開多","dashboard.signalType.openShort":"開空","dashboard.signalType.closeLong":"平多","dashboard.signalType.closeShort":"平空","dashboard.signalType.addLong":"加多","dashboard.signalType.addShort":"加空","dashboard.status.pending":"待處理","dashboard.status.processing":"處理中","dashboard.status.completed":"已完成","dashboard.status.failed":"失敗","dashboard.status.cancelled":"已取消","dashboard.table.pnl":"未實現盈虧","form.basic-form.basic.title":"基礎表單","form.basic-form.basic.description":"表單頁用於向用戶收集或驗證信息,基礎表單常見於數據項較少的表單場景。","form.basic-form.title.label":"標題","form.basic-form.title.placeholder":"給目標起個名字","form.basic-form.title.required":"請輸入標題","form.basic-form.date.label":"起止日期","form.basic-form.placeholder.start":"開始日期","form.basic-form.placeholder.end":"結束日期","form.basic-form.date.required":"請選擇起止日期","form.basic-form.goal.label":"目標描述","form.basic-form.goal.placeholder":"請輸入你的階段性工作目標","form.basic-form.goal.required":"請輸入目標描述","form.basic-form.standard.label":"衡量標準","form.basic-form.standard.placeholder":"請輸入衡量標準","form.basic-form.standard.required":"請輸入衡量標準","form.basic-form.client.label":"客戶","form.basic-form.client.required":"請描述你服務的客戶","form.basic-form.label.tooltip":"目標的服務對象","form.basic-form.client.placeholder":"請描述你服務的客戶,內部客戶直接 @姓名/工號","form.basic-form.invites.label":"邀評人","form.basic-form.invites.placeholder":"請直接 @姓名/工號,最多可邀請 5 人","form.basic-form.weight.label":"權重","form.basic-form.weight.placeholder":"請輸入","form.basic-form.public.label":"目標公開","form.basic-form.label.help":"客戶、邀評人默認被分享","form.basic-form.radio.public":"公開","form.basic-form.radio.partially-public":"部分公開","form.basic-form.radio.private":"不公開","form.basic-form.publicUsers.placeholder":"公開給","form.basic-form.option.A":"同事一","form.basic-form.option.B":"同事二","form.basic-form.option.C":"同事三","form.basic-form.email.required":"請輸入郵箱地址!","form.basic-form.email.wrong-format":"郵箱地址格式錯誤!","form.basic-form.userName.required":"請輸入用戶名!","form.basic-form.password.required":"請輸入密碼!","form.basic-form.password.twice":"兩次輸入的密碼不匹配!","form.basic-form.strength.msg":"請至少輸入 6 個字符。請不要使用容易被猜到的密碼。","form.basic-form.strength.strong":"強度:強","form.basic-form.strength.medium":"強度:中","form.basic-form.strength.short":"強度:太短","form.basic-form.confirm-password.required":"請確認密碼!","form.basic-form.phone-number.required":"請輸入手機號!","form.basic-form.phone-number.wrong-format":"手機號格式錯誤!","form.basic-form.verification-code.required":"請輸入驗證碼!","form.basic-form.form.get-captcha":"獲取驗證碼","form.basic-form.captcha.second":"秒","form.basic-form.form.optional":"(選填)","form.basic-form.form.submit":"提交","form.basic-form.form.save":"保存","form.basic-form.email.placeholder":"郵箱","form.basic-form.password.placeholder":"至少6位密碼,區分大小寫","form.basic-form.confirm-password.placeholder":"確認密碼","form.basic-form.phone-number.placeholder":"手機號","form.basic-form.verification-code.placeholder":"驗證碼","result.success.title":"提交成功","result.success.description":"提交結果頁用於反饋一系列操作任務的處理結果, 如果僅是簡單操作,使用 Message 全局提示反饋即可。 本文字區域可以展示簡單的補充說明,如果有類似展示 “單據”的需求,下面這個灰色區域可以呈現比較復雜的內容。","result.success.operate-title":"項目名稱","result.success.operate-id":"項目 ID","result.success.principal":"負責人","result.success.operate-time":"生效時間","result.success.step1-title":"創建項目","result.success.step1-operator":"曲麗麗","result.success.step2-title":"部門初審","result.success.step2-operator":"周毛毛","result.success.step2-extra":"催一下","result.success.step3-title":"財務復核","result.success.step4-title":"完成","result.success.btn-return":"返回列表","result.success.btn-project":"查看項目","result.success.btn-print":"打印","result.fail.error.title":"提交失敗","result.fail.error.description":"請核對並修改以下信息後,再重新提交。","result.fail.error.hint-title":"您提交的內容有如下錯誤:","result.fail.error.hint-text1":"您的賬戶已被凍結","result.fail.error.hint-btn1":"立即解凍","result.fail.error.hint-text2":"您的賬戶還不具備申請資格","result.fail.error.hint-btn2":"立即升級","result.fail.error.btn-text":"返回修改","account.settings.menuMap.custom":"個性化","account.settings.menuMap.binding":"賬號綁定","account.settings.basic.avatar":"頭像","account.settings.basic.change-avatar":"更換頭像","account.settings.basic.email":"郵箱","account.settings.basic.email-message":"請輸入您的郵箱!","account.settings.basic.nickname":"暱稱","account.settings.basic.nickname-message":"請輸入您的暱稱!","account.settings.basic.profile":"個人簡介","account.settings.basic.profile-message":"請輸入個人簡介!","account.settings.basic.profile-placeholder":"個人簡介","account.settings.basic.country":"國家/地區","account.settings.basic.country-message":"請輸入您的國家或地區!","account.settings.basic.geographic":"所在省市","account.settings.basic.geographic-message":"請輸入您的所在省市!","account.settings.basic.address":"街道地址","account.settings.basic.address-message":"請輸入您的街道地址!","account.settings.basic.phone":"聯系電話","account.settings.basic.phone-message":"請輸入您的聯系電話!","account.settings.basic.update":"更新基本信息","account.settings.basic.update.success":"更新基本信息成功","account.settings.security.strong":"強","account.settings.security.medium":"中","account.settings.security.weak":"弱","account.settings.security.password":"賬戶密碼","account.settings.security.password-description":"當前密碼強度:","account.settings.security.phone":"密保手機","account.settings.security.phone-description":"已綁定手機:","account.settings.security.question":"密保問題","account.settings.security.question-description":"未設置密保問題,密保問題可有效保護賬戶安全","account.settings.security.email":"綁定郵箱","account.settings.security.email-description":"已綁定郵箱:","account.settings.security.mfa":"MFA 設備","account.settings.security.mfa-description":"未綁定 MFA 設備,綁定後,可以進行二次確認","account.settings.security.modify":"修改","account.settings.security.set":"設置","account.settings.security.bind":"綁定","account.settings.binding.taobao":"綁定淘寶","account.settings.binding.taobao-description":"當前未綁定淘寶賬號","account.settings.binding.alipay":"綁定支付寶","account.settings.binding.alipay-description":"當前未綁定支付寶賬號","account.settings.binding.dingding":"綁定釘釘","account.settings.binding.dingding-description":"當前未綁定釘釘賬號","account.settings.binding.bind":"綁定","account.settings.notification.password":"賬戶密碼","account.settings.notification.password-description":"其他用戶的消息將以站內信的形式通知","account.settings.notification.messages":"系統消息","account.settings.notification.messages-description":"系統消息將以站內信的形式通知","account.settings.notification.todo":"待辦任務","account.settings.notification.todo-description":"待辦任務將以站內信的形式通知","account.settings.settings.open":"開","account.settings.settings.close":"關","trading-assistant.title":"交易助手","trading-assistant.strategyList":"策略列表","trading-assistant.createStrategy":"創建策略","trading-assistant.noStrategy":"暫無策略","trading-assistant.selectStrategy":"請從左側選擇一個策略查看詳情","trading-assistant.startStrategy":"啓動策略","trading-assistant.stopStrategy":"停止策略","trading-assistant.editStrategy":"編輯策略","trading-assistant.deleteStrategy":"刪除策略","trading-assistant.startAll":"全部啟動","trading-assistant.stopAll":"全部停止","trading-assistant.deleteAll":"全部刪除","trading-assistant.symbolCount":"個幣種","trading-assistant.status.running":"運行中","trading-assistant.status.stopped":"已停止","trading-assistant.status.error":"錯誤","trading-assistant.strategyType.IndicatorStrategy":"技術指標策略","trading-assistant.strategyType.PromptBasedStrategy":"提示詞策略","trading-assistant.strategyType.GridStrategy":"網格策略","trading-assistant.tabs.tradingRecords":"交易記錄","trading-assistant.tabs.positions":"持倉記錄","trading-assistant.tabs.equityCurve":"淨值曲線","trading-assistant.form.step1":"選擇指標","trading-assistant.form.step2":"交易所配置","trading-assistant.form.step3":"策略參數","trading-assistant.form.step2Params":"策略參數","trading-assistant.form.step3Signal":"信號通知","trading-assistant.form.indicator":"選擇指標","trading-assistant.form.indicatorHint":"只能選擇您已購買或創建的技術指標","trading-assistant.form.qdtCostHints":"使用策略將消耗QDT,請確保賬戶有足夠的QDT餘額","trading-assistant.form.indicatorDescription":"指標描述","trading-assistant.form.noDescription":"暫無描述","trading-assistant.form.exchange":"選擇交易所","trading-assistant.form.apiKey":"API Key","trading-assistant.form.secretKey":"Secret Key","trading-assistant.form.passphrase":"Passphrase","trading-assistant.form.testConnection":"測試連接","trading-assistant.form.strategyName":"策略名稱","trading-assistant.form.symbol":"交易對","trading-assistant.form.symbols":"交易對(多選)","trading-assistant.form.symbolHint":"目前僅支持加密貨幣交易對","trading-assistant.form.symbolHintCrypto":"加密貨幣:使用BTC/USDT等交易對格式","trading-assistant.form.symbolsHint":"選擇多個交易對,將自動創建多個策略","trading-assistant.form.initialCapital":"投入金額","trading-assistant.form.marketType":"市場類型","trading-assistant.form.marketTypeFutures":"合約","trading-assistant.form.marketTypeSpot":"現貨","trading-assistant.form.marketTypeHint":"合約支持雙向交易和槓杆,現貨僅支持做多且槓杆固定爲1倍","trading-assistant.form.leverage":"槓杆倍數","trading-assistant.form.leverageHint":"合約:1-125倍,現貨:固定1倍","trading-assistant.form.spotLeverageFixed":"現貨交易槓杆固定爲1倍","trading-assistant.form.spotOnlyLongHint":"現貨交易僅支持做多","trading-assistant.form.tradeDirection":"交易方向","trading-assistant.form.tradeDirectionLong":"僅做多","trading-assistant.form.tradeDirectionShort":"僅做空","trading-assistant.form.tradeDirectionBoth":"雙向交易","trading-assistant.form.timeframe":"時間周期","trading-assistant.form.klinePeriod":"K線周期","trading-assistant.form.timeframe1m":"1分鍾","trading-assistant.form.timeframe5m":"5分鍾","trading-assistant.form.timeframe15m":"15分鍾","trading-assistant.form.timeframe30m":"30分鍾","trading-assistant.form.timeframe1H":"1小時","trading-assistant.form.timeframe4H":"4小時","trading-assistant.form.timeframe1D":"1天","trading-assistant.form.selectStrategyType":"選擇策略類型","trading-assistant.form.indicatorStrategy":"指標策略","trading-assistant.form.indicatorStrategyDesc":"基於技術指標的自動化交易策略","trading-assistant.form.aiStrategy":"AI策略","trading-assistant.form.aiStrategyDesc":"基於AI智能決策的自動化交易策略","trading-assistant.form.enableAiFilter":"啟用AI智能決策過濾","trading-assistant.form.enableAiFilterHint":"啟用後,指標信號將經過AI智能過濾,提高交易質量","trading-assistant.form.aiFilterPrompt":"自定義提示詞","trading-assistant.form.aiFilterPromptHint":"為AI過濾提供自定義指令,留空則使用系統默認","trading-assistant.form.executionMode":"執行模式","trading-assistant.form.executionModeSignal":"僅信號通知","trading-assistant.form.executionModeLive":"實盤自動交易","trading-assistant.form.liveTradingCryptoOnlyHint":"實盤交易功能僅支持加密貨幣市場","trading-assistant.form.notifyChannels":"通知渠道","trading-assistant.form.notifyChannelsHint":"選擇信號觸發時的通知方式","trading-assistant.form.notifyEmail":"郵箱地址","trading-assistant.form.notifyPhone":"手機號碼","trading-assistant.form.notifyTelegram":"Telegram ID","trading-assistant.form.notifyDiscord":"Discord Webhook","trading-assistant.form.notifyWebhook":"Webhook 地址","trading-assistant.form.liveTradingConfigTitle":"實盤交易配置","trading-assistant.form.liveTradingConfigHint":"請填寫交易所API資訊,實盤交易將使用您的API進行真實交易","trading-assistant.form.savedCredential":"已儲存的憑證","trading-assistant.form.savedCredentialHint":"選擇已儲存的交易所憑證,自動填充API配置","trading-assistant.form.saveCredential":"儲存此憑證以便下次使用","trading-assistant.form.credentialName":"憑證名稱","trading-assistant.validation.strategyTypeRequired":"請選擇策略類型","trading-assistant.form.advancedSettings":"高級設置","trading-assistant.form.orderMode":"下單模式","trading-assistant.form.orderModeMaker":"掛單(Maker)","trading-assistant.form.orderModeTaker":"市價(Taker)","trading-assistant.form.orderModeHint":"掛單模式使用限價單,手續費更低;市價模式立即成交,手續費較高","trading-assistant.form.makerWaitSec":"掛單等待時間(秒)","trading-assistant.form.makerWaitSecHint":"掛單後等待成交的時間,超時後取消並重試","trading-assistant.form.makerRetries":"掛單重試次數","trading-assistant.form.makerRetriesHint":"掛單未成交時的最大重試次數","trading-assistant.form.fallbackToMarket":"掛單失敗降級市價","trading-assistant.form.fallbackToMarketHint":"開/平倉掛單未成交時,是否降級爲市價單以確保成交","trading-assistant.form.marginMode":"保證金模式","trading-assistant.form.marginModeCross":"全倉","trading-assistant.form.marginModeIsolated":"逐倉","trading-assistant.form.stopLossPct":"止損比例(%)","trading-assistant.form.stopLossPctHint":"設置止損百分比,0表示不啓用止損","trading-assistant.form.takeProfitPct":"止盈比例(%)","trading-assistant.form.takeProfitPctHint":"設置止盈百分比,0表示不啓用止盈","trading-assistant.form.signalMode":"信號模式","trading-assistant.form.signalModeConfirmed":"確認模式","trading-assistant.form.signalModeAggressive":"激進模式","trading-assistant.form.signalModeHint":"確認模式:僅檢查已完成的K線;激進模式:也檢查正在形成的K線","trading-assistant.form.cancel":"取消","trading-assistant.form.prev":"上一步","trading-assistant.form.next":"下一步","trading-assistant.form.confirmCreate":"確認創建","trading-assistant.form.confirmEdit":"確認修改","trading-assistant.messages.createSuccess":"策略創建成功","trading-assistant.messages.createFailed":"創建策略失敗","trading-assistant.messages.updateSuccess":"策略更新成功","trading-assistant.messages.updateFailed":"更新策略失敗","trading-assistant.messages.deleteSuccess":"策略刪除成功","trading-assistant.messages.deleteFailed":"刪除策略失敗","trading-assistant.messages.startSuccess":"策略啓動成功","trading-assistant.messages.startFailed":"啓動策略失敗","trading-assistant.messages.stopSuccess":"策略停止成功","trading-assistant.messages.stopFailed":"停止策略失敗","trading-assistant.messages.loadFailed":"獲取策略列表失敗","trading-assistant.messages.runningWarning":"策略運行中,請先停止策略後再修改","trading-assistant.messages.deleteConfirmWithName":"確定要刪除策略“{name}”嗎?此操作不可恢復。","trading-assistant.messages.deleteConfirm":"確定要刪除該策略嗎?此操作不可恢復。","trading-assistant.messages.loadTradesFailed":"獲取交易記錄失敗","trading-assistant.messages.loadPositionsFailed":"獲取持倉記錄失敗","trading-assistant.messages.loadEquityFailed":"獲取淨值曲線失敗","trading-assistant.messages.loadIndicatorsFailed":"加載指標列表失敗,請稍後重試","trading-assistant.messages.spotLimitations":"現貨交易已自動設置爲僅做多、1倍槓杆","trading-assistant.messages.autoFillApiConfig":"已自動填充該交易所的歷史API配置","trading-assistant.messages.batchCreateSuccess":"成功創建 {count} 個策略","trading-assistant.messages.batchStartSuccess":"成功啟動 {count} 個策略","trading-assistant.messages.batchStartFailed":"批量啟動策略失敗","trading-assistant.messages.batchStopSuccess":"成功停止 {count} 個策略","trading-assistant.messages.batchStopFailed":"批量停止策略失敗","trading-assistant.messages.batchDeleteSuccess":"成功刪除 {count} 個策略","trading-assistant.messages.batchDeleteFailed":"批量刪除策略失敗","trading-assistant.messages.batchDeleteConfirm":'確定要刪除策略組"{name}"下的 {count} 個策略嗎?此操作不可恢復。',"trading-assistant.notify.browser":"瀏覽器通知","trading-assistant.notify.email":"郵箱","trading-assistant.notify.phone":"簡訊","trading-assistant.notify.telegram":"Telegram","trading-assistant.notify.discord":"Discord","trading-assistant.notify.webhook":"Webhook","trading-assistant.placeholders.selectIndicator":"請選擇指標","trading-assistant.placeholders.selectExchange":"請選擇交易所","trading-assistant.placeholders.inputApiKey":"請輸入API Key","trading-assistant.placeholders.inputSecretKey":"請輸入Secret Key","trading-assistant.placeholders.inputPassphrase":"請輸入Passphrase","trading-assistant.placeholders.inputStrategyName":"請輸入策略名稱","trading-assistant.placeholders.selectSymbol":"請選擇交易對","trading-assistant.placeholders.selectSymbols":"請選擇交易對(支持多選)","trading-assistant.placeholders.selectTimeframe":"請選擇時間周期","trading-assistant.placeholders.selectKlinePeriod":"請選擇K線周期","trading-assistant.placeholders.inputAiFilterPrompt":"請輸入自定義提示詞(可選)","trading-assistant.placeholders.selectSavedCredential":"請選擇已儲存的憑證","trading-assistant.placeholders.inputEmail":"請輸入郵箱地址","trading-assistant.placeholders.inputPhone":"請輸入手機號碼","trading-assistant.placeholders.inputTelegram":"請輸入Telegram ID或Chat ID","trading-assistant.placeholders.inputDiscord":"請輸入Discord Webhook地址","trading-assistant.placeholders.inputWebhook":"請輸入Webhook地址","trading-assistant.placeholders.inputCredentialName":"請輸入憑證名稱(如:我的OKX帳戶)","trading-assistant.validation.indicatorRequired":"請選擇指標","trading-assistant.validation.exchangeRequired":"請選擇交易所","trading-assistant.validation.apiKeyRequired":"請輸入API Key","trading-assistant.validation.secretKeyRequired":"請輸入Secret Key","trading-assistant.validation.passphraseRequired":"請輸入Passphrase","trading-assistant.validation.exchangeConfigIncomplete":"請填寫完整的交易所配置信息","trading-assistant.validation.testConnectionRequired":'請先點擊"測試連接"按鈕並確保連接成功',"trading-assistant.validation.testConnectionFailed":"連接測試失敗,請檢查配置後重新測試","trading-assistant.validation.credentialRequired":"請先在個人中心添加並測試交易所憑證","trading-assistant.validation.strategyNameRequired":"請輸入策略名稱","trading-assistant.validation.symbolRequired":"請選擇交易對","trading-assistant.validation.symbolsRequired":"請至少選擇一個交易對","trading-assistant.validation.emailInvalid":"請輸入有效的郵箱地址","trading-assistant.validation.notifyChannelRequired":"請至少選擇一個通知渠道","trading-assistant.validation.initialCapitalRequired":"請輸入投入金額","trading-assistant.validation.leverageRequired":"請輸入槓杆倍數","trading-assistant.table.time":"時間","trading-assistant.table.type":"類型","trading-assistant.table.price":"價格","trading-assistant.table.amount":"數量","trading-assistant.table.value":"金額","trading-assistant.table.commission":"手續費","trading-assistant.table.symbol":"交易對","trading-assistant.table.side":"方向","trading-assistant.table.size":"持倉數量","trading-assistant.table.entryPrice":"開倉價格","trading-assistant.table.currentPrice":"當前價格","trading-assistant.table.unrealizedPnl":"未實現盈虧","trading-assistant.table.pnlPercent":"盈虧比例","trading-assistant.table.buy":"買入","trading-assistant.table.sell":"賣出","trading-assistant.table.long":"做多","trading-assistant.table.short":"做空","trading-assistant.table.noPositions":"暫無持倉","trading-assistant.detail.title":"策略詳情","trading-assistant.detail.strategyName":"策略名稱","trading-assistant.detail.strategyType":"策略類型","trading-assistant.detail.status":"狀態","trading-assistant.detail.tradingMode":"交易模式","trading-assistant.detail.exchange":"交易所","trading-assistant.detail.initialCapital":"初始資金","trading-assistant.detail.totalInvestment":"總投入金額","trading-assistant.detail.currentEquity":"當前淨值","trading-assistant.detail.totalPnl":"總盈虧","trading-assistant.detail.indicatorName":"指標名稱","trading-assistant.detail.maxLeverage":"最大槓杆","trading-assistant.detail.decideInterval":"決策間隔","trading-assistant.detail.symbols":"交易標的","trading-assistant.detail.createdAt":"創建時間","trading-assistant.detail.updatedAt":"更新時間","trading-assistant.detail.llmConfig":"AI模型配置","trading-assistant.detail.exchangeConfig":"交易所配置","trading-assistant.detail.provider":"提供商","trading-assistant.detail.modelId":"模型ID","trading-assistant.detail.close":"關閉","trading-assistant.detail.loadFailed":"獲取策略詳情失敗","trading-assistant.equity.noData":"暫無淨值數據","trading-assistant.equity.equity":"淨值","trading-assistant.exchange.tradingMode":"交易模式","trading-assistant.exchange.virtual":"模擬交易","trading-assistant.exchange.live":"實盤交易","trading-assistant.exchange.selectExchange":"選擇交易所","trading-assistant.exchange.walletAddress":"錢包地址","trading-assistant.exchange.walletAddressPlaceholder":"請輸入錢包地址(以0x開頭)","trading-assistant.exchange.privateKey":"私鑰","trading-assistant.exchange.privateKeyPlaceholder":"請輸入私鑰(64字符)","trading-assistant.exchange.testConnection":"測試連接","trading-assistant.exchange.connectionSuccess":"連接成功","trading-assistant.exchange.connectionFailed":"連接失敗","trading-assistant.exchange.testFailed":"連接測試失敗","trading-assistant.exchange.fillComplete":"請填寫完整的交易所配置信息","trading-assistant.strategyTypeOptions.ai":"AI驅動策略","trading-assistant.strategyTypeOptions.indicator":"技術指標策略","trading-assistant.strategyTypeOptions.aiDeveloping":"AI驅動策略功能開發中,敬請期待","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"AI驅動策略功能正在開發中","trading-assistant.indicatorType.trend":"趨勢","trading-assistant.indicatorType.momentum":"動量","trading-assistant.indicatorType.volatility":"波動","trading-assistant.indicatorType.volume":"成交量","trading-assistant.indicatorType.custom":"自定義","trading-assistant.exchangeNames":{okx:"OKX",binance:"幣安",hyperliquid:"Hyperliquid",blockchaincom:"Blockchain.com",coinbaseexchange:"Coinbase",gate:"Gate.io",mexc:"MEXC",kraken:"Kraken",bitfinex:"Bitfinex",bybit:"Bybit",kucoin:"KuCoin",huobi:"火幣",bitget:"Bitget",bitmex:"BitMEX",deribit:"Deribit",phemex:"Phemex",bitmart:"BitMart",bitstamp:"Bitstamp",bittrex:"Bittrex",poloniex:"Poloniex",gemini:"Gemini",cryptocom:"Crypto.com",bitflyer:"bitFlyer",upbit:"Upbit",bithumb:"Bithumb",coinone:"Coinone",zb:"ZB",lbank:"LBank",bibox:"Bibox",bigone:"BigONE",bitrue:"Bitrue",coinex:"CoinEx",digifinex:"DigiFinex",ftx:"FTX",ftxus:"FTX US",binanceus:"Binance US",binancecoinm:"Binance COIN-M",binanceusdm:"Binance USDⓈ-M",deepcoin:"Deepcoin"},"ai-trading-assistant.title":"AI交易助手","ai-trading-assistant.strategyList":"策略列表","ai-trading-assistant.createStrategy":"創建策略","ai-trading-assistant.noStrategy":"暫無策略","ai-trading-assistant.selectStrategy":"請從左側選擇一個策略查看詳情","ai-trading-assistant.startStrategy":"啓動策略","ai-trading-assistant.stopStrategy":"停止策略","ai-trading-assistant.editStrategy":"編輯策略","ai-trading-assistant.deleteStrategy":"刪除策略","ai-trading-assistant.status.running":"運行中","ai-trading-assistant.status.stopped":"已停止","ai-trading-assistant.status.error":"錯誤","ai-trading-assistant.tabs.tradingRecords":"交易記錄","ai-trading-assistant.tabs.positions":"持倉記錄","ai-trading-assistant.tabs.aiDecisions":"AI決策記錄","ai-trading-assistant.tabs.equityCurve":"淨值曲線","ai-trading-assistant.form.createTitle":"創建AI交易策略","ai-trading-assistant.form.editTitle":"編輯AI交易策略","ai-trading-assistant.form.strategyName":"策略名稱","ai-trading-assistant.form.modelId":"AI模型","ai-trading-assistant.form.modelIdHint":"使用系統OpenRouter服務,無需配置API Key","ai-trading-assistant.form.decideInterval":"決策間隔","ai-trading-assistant.form.decideInterval5m":"5分鍾","ai-trading-assistant.form.decideInterval10m":"10分鍾","ai-trading-assistant.form.decideInterval30m":"30分鍾","ai-trading-assistant.form.decideInterval1h":"1小時","ai-trading-assistant.form.decideInterval4h":"4小時","ai-trading-assistant.form.decideInterval1d":"1天","ai-trading-assistant.form.decideInterval1w":"1周","ai-trading-assistant.form.decideIntervalHint":"AI做決策的時間間隔","ai-trading-assistant.form.runPeriod":"運行周期","ai-trading-assistant.form.runPeriodHint":"策略運行的開始時間和結束時間","ai-trading-assistant.form.startDate":"開始日期","ai-trading-assistant.form.endDate":"結束日期","ai-trading-assistant.form.qdtCostTitle":"QDT扣費說明","ai-trading-assistant.form.qdtCostHint":"每次AI決策將扣費 {cost} 個QDT,請確保賬戶有足夠的QDT餘額。策略運行期間,每次決策都會實時扣費。","ai-trading-assistant.form.apiKey":"API Key","ai-trading-assistant.form.exchange":"選擇交易所","ai-trading-assistant.form.secretKey":"Secret Key","ai-trading-assistant.form.passphrase":"Passphrase","ai-trading-assistant.form.testConnection":"測試連接","ai-trading-assistant.form.symbol":"交易對","ai-trading-assistant.form.symbolHint":"選擇要交易的交易對","ai-trading-assistant.form.initialCapital":"投入金額(保證金)","ai-trading-assistant.form.leverage":"槓杆倍數","ai-trading-assistant.form.timeframe":"時間周期","ai-trading-assistant.form.timeframe1m":"1分鍾","ai-trading-assistant.form.timeframe5m":"5分鍾","ai-trading-assistant.form.timeframe15m":"15分鍾","ai-trading-assistant.form.timeframe30m":"30分鍾","ai-trading-assistant.form.timeframe1H":"1小時","ai-trading-assistant.form.timeframe4H":"4小時","ai-trading-assistant.form.timeframe1D":"1天","ai-trading-assistant.form.marketType":"市場類型","ai-trading-assistant.form.marketTypeFutures":"合約","ai-trading-assistant.form.marketTypeSpot":"現貨","ai-trading-assistant.form.totalPnl":"總盈虧","ai-trading-assistant.form.customPrompt":"自定義提示詞","ai-trading-assistant.form.customPromptHint":"可選,用於自定義AI的交易策略和決策邏輯","ai-trading-assistant.form.cancel":"取消","ai-trading-assistant.form.prev":"上一步","ai-trading-assistant.form.next":"下一步","ai-trading-assistant.form.confirmCreate":"確認創建","ai-trading-assistant.form.confirmEdit":"確認修改","ai-trading-assistant.messages.createSuccess":"策略創建成功","ai-trading-assistant.messages.createFailed":"創建策略失敗","ai-trading-assistant.messages.updateSuccess":"策略更新成功","ai-trading-assistant.messages.updateFailed":"更新策略失敗","ai-trading-assistant.messages.deleteSuccess":"策略刪除成功","ai-trading-assistant.messages.deleteFailed":"刪除策略失敗","ai-trading-assistant.messages.startSuccess":"策略啓動成功","ai-trading-assistant.messages.startFailed":"啓動策略失敗","ai-trading-assistant.messages.stopSuccess":"策略停止成功","ai-trading-assistant.messages.stopFailed":"停止策略失敗","ai-trading-assistant.messages.loadFailed":"獲取策略列表失敗","ai-trading-assistant.messages.loadDecisionsFailed":"獲取AI決策記錄失敗","ai-trading-assistant.messages.deleteConfirm":"確定要刪除該策略嗎?此操作不可恢復。","ai-trading-assistant.placeholders.inputStrategyName":"請輸入策略名稱","ai-trading-assistant.placeholders.selectModelId":"請選擇AI模型","ai-trading-assistant.placeholders.selectDecideInterval":"請選擇決策間隔","ai-trading-assistant.placeholders.startTime":"開始時間","ai-trading-assistant.placeholders.endTime":"結束時間","ai-trading-assistant.placeholders.inputApiKey":"請輸入API Key","ai-trading-assistant.placeholders.selectExchange":"請選擇交易所","ai-trading-assistant.placeholders.inputSecretKey":"請輸入Secret Key","ai-trading-assistant.placeholders.inputPassphrase":"請輸入Passphrase","ai-trading-assistant.placeholders.selectSymbol":"請選擇交易對,如:BTC/USDT","ai-trading-assistant.placeholders.selectTimeframe":"請選擇時間周期","ai-trading-assistant.placeholders.inputCustomPrompt":"請輸入自定義提示詞(可選)","ai-trading-assistant.validation.strategyNameRequired":"請輸入策略名稱","ai-trading-assistant.validation.modelIdRequired":"請選擇AI模型","ai-trading-assistant.validation.runPeriodRequired":"請選擇運行周期","ai-trading-assistant.validation.apiKeyRequired":"請輸入API Key","ai-trading-assistant.validation.exchangeRequired":"請選擇交易所","ai-trading-assistant.validation.secretKeyRequired":"請輸入Secret Key","ai-trading-assistant.validation.symbolRequired":"請選擇交易對","ai-trading-assistant.validation.initialCapitalRequired":"請輸入投入金額","ai-trading-assistant.table.time":"時間","ai-trading-assistant.table.type":"類型","ai-trading-assistant.table.price":"價格","ai-trading-assistant.table.amount":"數量","ai-trading-assistant.table.value":"金額","ai-trading-assistant.table.symbol":"交易對","ai-trading-assistant.table.side":"方向","ai-trading-assistant.table.size":"持倉數量","ai-trading-assistant.table.entryPrice":"開倉價格","ai-trading-assistant.table.currentPrice":"當前價格","ai-trading-assistant.table.unrealizedPnl":"未實現盈虧","ai-trading-assistant.table.profit":"盈虧","ai-trading-assistant.table.openLong":"開多","ai-trading-assistant.table.closeLong":"平多","ai-trading-assistant.table.openShort":"開空","ai-trading-assistant.table.closeShort":"平空","ai-trading-assistant.table.addLong":"加多","ai-trading-assistant.table.addShort":"加空","ai-trading-assistant.table.closeShortProfit":"平空止盈","ai-trading-assistant.table.closeShortStop":"平空止損","ai-trading-assistant.table.closeLongProfit":"平多止盈","ai-trading-assistant.table.closeLongStop":"平多止損","ai-trading-assistant.table.buy":"買入","ai-trading-assistant.table.sell":"賣出","ai-trading-assistant.table.long":"做多","ai-trading-assistant.table.short":"做空","ai-trading-assistant.table.hold":"持有","ai-trading-assistant.table.reasoning":"分析理由","ai-trading-assistant.table.decisions":"決策","ai-trading-assistant.table.riskAssessment":"風險評估","ai-trading-assistant.table.confidence":"置信度","ai-trading-assistant.table.totalRecords":"共 {total} 條記錄","ai-trading-assistant.table.noPositions":"暫無持倉","ai-trading-assistant.detail.title":"策略詳情","ai-trading-assistant.equity.noData":"暫無淨值數據","ai-trading-assistant.equity.equity":"淨值","ai-trading-assistant.exchange.testFailed":"連接測試失敗","ai-trading-assistant.exchange.connectionSuccess":"連接成功","ai-trading-assistant.exchange.connectionFailed":"連接失敗","ai-trading-assistant.form.advancedSettings":"高級設置","ai-trading-assistant.form.orderMode":"下單模式","ai-trading-assistant.form.orderModeMaker":"掛單(Maker)","ai-trading-assistant.form.orderModeTaker":"市價(Taker)","ai-trading-assistant.form.orderModeHint":"掛單模式使用限價單,手續費更低;市價模式立即成交,手續費較高","ai-trading-assistant.form.makerWaitSec":"掛單等待時間(秒)","ai-trading-assistant.form.makerWaitSecHint":"掛單後等待成交的時間,超時後取消並重試","ai-trading-assistant.form.makerRetries":"掛單重試次數","ai-trading-assistant.form.makerRetriesHint":"掛單未成交時的最大重試次數","ai-trading-assistant.form.fallbackToMarket":"掛單失敗降級市價","ai-trading-assistant.form.fallbackToMarketHint":"開/平倉掛單未成交時,是否降級爲市價單以確保成交","ai-trading-assistant.form.marginMode":"保證金模式","ai-trading-assistant.form.marginModeCross":"全倉","ai-trading-assistant.form.marginModeIsolated":"逐倉","ai-analysis.title":"量子交易引擎","ai-analysis.system.online":"在線","ai-analysis.system.agents":"智能體","ai-analysis.system.active":"活躍","ai-analysis.system.stage":"階段","ai-analysis.panel.roster":"智能體陣容","ai-analysis.panel.thinking":"思考中...","ai-analysis.panel.done":"完成","ai-analysis.panel.standby":"待機","ai-analysis.input.title":"量子交易引擎","ai-analysis.input.placeholder":"選擇目標資產 (如 BTC/USDT)","ai-analysis.input.watchlist":"自選股","ai-analysis.input.start":"開始分析","ai-analysis.input.recent":"最近任務:","ai-analysis.vis.stage":"階段","ai-analysis.vis.processing":"處理中","ai-analysis.result.complete":"分析完成","ai-analysis.result.signal":"最終信號","ai-analysis.result.confidence":"置信度:","ai-analysis.result.new":"新分析","ai-analysis.result.full":"查看完整報告","ai-analysis.logs.title":"系統日志","ai-analysis.modal.title":"機密報告","ai-analysis.modal.fundamental":"基本面分析","ai-analysis.modal.technical":"技術面分析","ai-analysis.modal.sentiment":"情緒面分析","ai-analysis.modal.risk":"風險評估","ai-analysis.stage.idle":"待機","ai-analysis.stage.1":"第一階段:多維分析","ai-analysis.stage.2":"第二階段:多空辯論","ai-analysis.stage.3":"第三階段:戰略規劃","ai-analysis.stage.4":"第四階段:風控審查","ai-analysis.stage.complete":"完成","ai-analysis.agent.investment_director":"投資總監","ai-analysis.agent.role.investment_director":"綜合分析 & 最終結論","ai-analysis.agent.market":"市場分析師","ai-analysis.agent.role.market":"技術 & 市場數據","ai-analysis.agent.fundamental":"基本面分析師","ai-analysis.agent.role.fundamental":"財務 & 估值","ai-analysis.agent.technical":"技術分析師","ai-analysis.agent.role.technical":"技術指標 & 圖表","ai-analysis.agent.news":"新聞分析師","ai-analysis.agent.role.news":"全球新聞過濾","ai-analysis.agent.sentiment":"情緒分析師","ai-analysis.agent.role.sentiment":"社交 & 情緒","ai-analysis.agent.risk":"風險分析師","ai-analysis.agent.role.risk":"基礎風險檢查","ai-analysis.agent.bull":"看漲研究員","ai-analysis.agent.role.bull":"增長催化劑挖掘","ai-analysis.agent.bear":"看跌研究員","ai-analysis.agent.role.bear":"風險 & 缺陷挖掘","ai-analysis.agent.manager":"研究經理","ai-analysis.agent.role.manager":"辯論主持人","ai-analysis.agent.trader":"交易員","ai-analysis.agent.role.trader":"執行策略師","ai-analysis.agent.risky":"激進分析師","ai-analysis.agent.role.risky":"激進策略","ai-analysis.agent.neutral":"平衡分析師","ai-analysis.agent.role.neutral":"平衡策略","ai-analysis.agent.safe":"保守分析師","ai-analysis.agent.role.safe":"保守策略","ai-analysis.agent.cro":"風控經理 (CRO)","ai-analysis.agent.role.cro":"最終決策權威","ai-analysis.script.market":"正在從主要交易所獲取 OHLCV 數據...","ai-analysis.script.fundamental":"正在檢索季度財務報告...","ai-analysis.script.technical":"正在分析技術指標和圖表形態...","ai-analysis.script.news":"正在掃描全球財經新聞...","ai-analysis.script.sentiment":"正在分析社交媒體趨勢...","ai-analysis.script.risk":"正在計算歷史波動率...","invite.inviteLink":"邀請鏈接","invite.copy":"復制鏈接","invite.copySuccess":"復制成功!","invite.copyFailed":"復制失敗,請手動復制","invite.noInviteLink":"邀請鏈接未生成","invite.totalInvites":"累計邀請","invite.totalReward":"累計獎勵","invite.rules":"邀請規則","invite.rule1":"每成功邀請一位好友注冊,您將獲得獎勵","invite.rule2":"被邀請的好友完成首次交易,您將獲得額外獎勵","invite.rule3":"邀請獎勵將直接發放到您的賬戶","invite.inviteList":"邀請列表","invite.tasks":"任務中心","invite.inviteeName":"被邀請人","invite.inviteTime":"邀請時間","invite.status":"狀態","invite.reward":"獎勵","invite.active":"活躍","invite.inactive":"未激活","invite.completed":"已完成","invite.claimed":"已領取","invite.pending":"待完成","invite.goToTask":"去完成","invite.claimReward":"領取獎勵","invite.verify":"驗證完成","invite.verifySuccess":"驗證成功!任務已完成","invite.verifyNotCompleted":"任務尚未完成,請先完成任務","invite.verifyFailed":"驗證失敗,請稍後重試","invite.claimSuccess":"成功領取 {reward} QDT!","invite.claimFailed":"領取失敗,請稍後重試","invite.totalRecords":"共 {total} 條記錄","invite.task.twitter.title":"轉發推文到 X (Twitter)","invite.task.twitter.desc":"分享我們的官方推文到您的 X (Twitter) 賬號","invite.task.youtube.title":"關注我們的 YouTube 頻道","invite.task.youtube.desc":"訂閱並關注我們的 YouTube 官方頻道","invite.task.telegram.title":"加入 Telegram 羣組","invite.task.telegram.desc":"加入我們的官方 Telegram 社區羣組","invite.task.discord.title":"加入 Discord 服務器","invite.task.discord.desc":"加入我們的 Discord 社區服務器",message:"-","layouts.usermenu.dialog.title":"信息","layouts.usermenu.dialog.content":"您確定要注銷嗎?","layouts.userLayout.title":"於不確定中,尋見真理","settings.title":"系統設置","settings.description":"配置應用設置、API密鑰和系統偏好","settings.save":"保存設置","settings.reset":"重置","settings.saveSuccess":"設置保存成功","settings.saveFailed":"保存設置失敗","settings.loadFailed":"加載配置失敗","settings.openrouterBalance":"OpenRouter 賬戶餘額","settings.queryBalance":"查詢餘額","settings.balanceUsage":"已使用","settings.balanceRemaining":"剩餘額度","settings.balanceLimit":"總限額","settings.balanceQuerySuccess":"餘額查詢成功","settings.balanceQueryFailed":"餘額查詢失敗","settings.balanceNotQueried":'點擊"查詢餘額"獲取賬戶信息',"settings.default":"默認","settings.pleaseSelect":"請選擇","settings.inputApiKey":"請輸入密鑰","settings.getApi":"獲取API","settings.link.getApi":"獲取API","settings.link.getApiKey":"獲取API Key","settings.link.getToken":"獲取Token","settings.link.createBot":"創建Bot","settings.link.viewModels":"查看模型列表","settings.link.freeRegister":"免費註冊","settings.link.supportedExchanges":"支持的交易所","settings.link.applyApi":"申請API","settings.link.createSearchEngine":"創建搜索引擎","settings.link.getTurnstileKey":"獲取Turnstile密鑰","settings.link.getGoogleCredentials":"獲取Google憑據","settings.link.getGithubCredentials":"獲取GitHub憑據","settings.restartRequired":"配置已保存,部分配置需要重啟Python服務才能生效","settings.copyRestartCmd":"複製重啟命令","settings.copySuccess":"複製成功","settings.copyFailed":"複製失敗","settings.group.server":"服務配置","settings.group.auth":"安全認證","settings.group.ai":"AI/LLM配置","settings.group.trading":"實盤交易","settings.group.strategy":"策略執行","settings.group.data_source":"數據源","settings.group.notification":"通知推送","settings.group.email":"郵件配置","settings.group.sms":"短信配置","settings.group.agent":"AI Agent","settings.group.network":"網絡代理","settings.group.search":"搜索配置","settings.group.security":"註冊與安全","settings.group.app":"應用配置","settings.field.SECRET_KEY":"Secret Key","settings.field.ADMIN_USER":"管理員用戶名","settings.field.ADMIN_PASSWORD":"管理員密碼","settings.field.ADMIN_EMAIL":"管理員郵箱","settings.field.ENABLE_REGISTRATION":"允許註冊","settings.field.TURNSTILE_SITE_KEY":"Turnstile Site Key","settings.field.TURNSTILE_SECRET_KEY":"Turnstile Secret Key","settings.field.FRONTEND_URL":"前端URL","settings.field.GOOGLE_CLIENT_ID":"Google Client ID","settings.field.GOOGLE_CLIENT_SECRET":"Google Client Secret","settings.field.GOOGLE_REDIRECT_URI":"Google回調URL","settings.field.GITHUB_CLIENT_ID":"GitHub Client ID","settings.field.GITHUB_CLIENT_SECRET":"GitHub Client Secret","settings.field.GITHUB_REDIRECT_URI":"GitHub回調URL","settings.field.SECURITY_IP_MAX_ATTEMPTS":"IP最大失敗次數","settings.field.SECURITY_IP_WINDOW_MINUTES":"IP統計窗口(分鐘)","settings.field.SECURITY_IP_BLOCK_MINUTES":"IP封禁時長(分鐘)","settings.field.SECURITY_ACCOUNT_MAX_ATTEMPTS":"帳戶最大失敗次數","settings.field.SECURITY_ACCOUNT_WINDOW_MINUTES":"帳戶統計窗口(分鐘)","settings.field.SECURITY_ACCOUNT_BLOCK_MINUTES":"帳戶鎖定時長(分鐘)","settings.field.VERIFICATION_CODE_EXPIRE_MINUTES":"驗證碼有效期(分鐘)","settings.field.VERIFICATION_CODE_RATE_LIMIT":"驗證碼發送間隔(秒)","settings.field.VERIFICATION_CODE_IP_HOURLY_LIMIT":"IP每小時驗證碼上限","settings.field.VERIFICATION_CODE_MAX_ATTEMPTS":"驗證碼最大嘗試次數","settings.field.VERIFICATION_CODE_LOCK_MINUTES":"驗證碼鎖定時長(分鐘)","settings.field.PYTHON_API_HOST":"監聽地址","settings.field.PYTHON_API_PORT":"端口","settings.field.PYTHON_API_DEBUG":"調試模式","settings.field.ENABLE_PENDING_ORDER_WORKER":"啟用訂單處理Worker","settings.field.PENDING_ORDER_STALE_SEC":"訂單超時時間(秒)","settings.field.ORDER_MODE":"下單模式","settings.field.MAKER_WAIT_SEC":"限價單等待時間(秒)","settings.field.MAKER_OFFSET_BPS":"限價單價格偏移(基點)","settings.field.SIGNAL_WEBHOOK_URL":"Webhook URL","settings.field.SIGNAL_WEBHOOK_TOKEN":"Webhook Token","settings.field.SIGNAL_NOTIFY_TIMEOUT_SEC":"通知超時(秒)","settings.field.TELEGRAM_BOT_TOKEN":"Telegram Bot Token","settings.field.SMTP_HOST":"SMTP服務器","settings.field.SMTP_PORT":"SMTP端口","settings.field.SMTP_USER":"SMTP用戶名","settings.field.SMTP_PASSWORD":"SMTP密碼","settings.field.SMTP_FROM":"發件人地址","settings.field.SMTP_USE_TLS":"使用TLS","settings.field.SMTP_USE_SSL":"使用SSL","settings.field.TWILIO_ACCOUNT_SID":"Account SID","settings.field.TWILIO_AUTH_TOKEN":"Auth Token","settings.field.TWILIO_FROM_NUMBER":"發送號碼","settings.field.DISABLE_RESTORE_RUNNING_STRATEGIES":"禁用自動恢復策略","settings.field.STRATEGY_TICK_INTERVAL_SEC":"策略Tick間隔(秒)","settings.field.PRICE_CACHE_TTL_SEC":"價格緩存TTL(秒)","settings.field.PROXY_URL":"完整代理URL","settings.field.RATE_LIMIT":"速率限制(每分鐘)","settings.field.ENABLE_CACHE":"啟用緩存","settings.field.ENABLE_REQUEST_LOG":"啟用請求日誌","settings.field.ENABLE_AGENT_MEMORY":"啟用Agent記憶","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"啟用向量檢索(本地)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"Embedding維度","settings.field.AGENT_MEMORY_TOP_K":"召回數量TopK","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"候選窗口大小","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"時間衰減半衰期(天)","settings.field.AGENT_MEMORY_W_SIM":"相似度權重","settings.field.AGENT_MEMORY_W_RECENCY":"時間權重","settings.field.AGENT_MEMORY_W_RETURNS":"收益權重","settings.field.ENABLE_REFLECTION_WORKER":"啟用自動驗證","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"驗證周期間隔(秒)","settings.field.OPENROUTER_API_KEY":"OpenRouter API Key","settings.field.OPENROUTER_API_URL":"OpenRouter API URL","settings.field.OPENROUTER_MODEL":"默認模型","settings.field.OPENROUTER_TEMPERATURE":"Temperature","settings.field.OPENROUTER_MAX_TOKENS":"Max Tokens","settings.field.OPENROUTER_TIMEOUT":"超時時間(秒)","settings.field.OPENROUTER_CONNECT_TIMEOUT":"連接超時(秒)","settings.field.MARKET_TYPES_JSON":"市場類型(JSON)","settings.field.TRADING_SUPPORTED_SYMBOLS_JSON":"支持的交易對(JSON)","settings.field.DATA_SOURCE_TIMEOUT":"數據源超時(秒)","settings.field.DATA_SOURCE_RETRY":"重試次數","settings.field.DATA_SOURCE_RETRY_BACKOFF":"重試退避(秒)","settings.field.FINNHUB_API_KEY":"Finnhub API Key","settings.field.FINNHUB_TIMEOUT":"Finnhub超時(秒)","settings.field.FINNHUB_RATE_LIMIT":"Finnhub速率限制","settings.field.CCXT_DEFAULT_EXCHANGE":"CCXT默認交易所","settings.field.CCXT_TIMEOUT":"CCXT超時(ms)","settings.field.CCXT_PROXY":"CCXT代理","settings.field.AKSHARE_TIMEOUT":"Akshare超時(秒)","settings.field.YFINANCE_TIMEOUT":"YFinance超時(秒)","settings.field.TIINGO_API_KEY":"Tiingo API Key","settings.field.TIINGO_TIMEOUT":"Tiingo超時(秒)","settings.field.SEARCH_PROVIDER":"搜索提供商","settings.field.SEARCH_MAX_RESULTS":"最大結果數","settings.field.SEARCH_GOOGLE_API_KEY":"Google API Key","settings.field.SEARCH_GOOGLE_CX":"Google CX","settings.field.SEARCH_BING_API_KEY":"Bing API Key","settings.field.INTERNAL_API_KEY":"內部API Key","settings.desc.PYTHON_API_HOST":"服務監聽地址。0.0.0.0 允許外部訪問,127.0.0.1 僅本地訪問","settings.desc.PYTHON_API_PORT":"服務監聽端口,默認5000","settings.desc.PYTHON_API_DEBUG":"啟用調試模式,開發時使用。生產環境請關閉","settings.desc.SECRET_KEY":"JWT簽名密鑰。生產環境必須修改以確保安全","settings.desc.ADMIN_USER":"管理員登錄用戶名","settings.desc.ADMIN_PASSWORD":"管理員登錄密碼。生產環境必須修改","settings.desc.OPENROUTER_API_KEY":"OpenRouter API密鑰,用於訪問多種AI模型","settings.desc.OPENROUTER_API_URL":"OpenRouter API端點地址","settings.desc.OPENROUTER_MODEL":"默認使用的AI模型,如 openai/gpt-4o, anthropic/claude-3.5-sonnet","settings.desc.OPENROUTER_TEMPERATURE":"模型創造性(0-1)。越低越確定性,越高越有創意","settings.desc.OPENROUTER_MAX_TOKENS":"每次請求最大輸出token數","settings.desc.OPENROUTER_TIMEOUT":"API請求超時時間(秒)","settings.desc.OPENROUTER_CONNECT_TIMEOUT":"連接建立超時時間(秒)","settings.desc.ENABLE_PENDING_ORDER_WORKER":"啟用後台訂單處理Worker,實盤交易必需","settings.desc.PENDING_ORDER_STALE_SEC":"等待訂單超時時間,超時後標記為過期","settings.desc.ORDER_MODE":"maker: 限價單優先(手續費低),market: 市價單(立即成交)","settings.desc.MAKER_WAIT_SEC":"限價單等待成交時間,超時後自動切換為市價單","settings.desc.MAKER_OFFSET_BPS":"限價單價格偏移(基點)。買入價=市價*(1-偏移),賣出價=市價*(1+偏移)","settings.desc.DISABLE_RESTORE_RUNNING_STRATEGIES":"禁止服務重啟時自動恢復運行中的策略","settings.desc.STRATEGY_TICK_INTERVAL_SEC":"策略主循環檢查間隔(秒)","settings.desc.PRICE_CACHE_TTL_SEC":"價格數據緩存有效期(秒)","settings.desc.MARKET_TYPES_JSON":"自定義市場類型配置,JSON格式","settings.desc.TRADING_SUPPORTED_SYMBOLS_JSON":"支持的交易對列表,JSON格式","settings.desc.DATA_SOURCE_TIMEOUT":"數據源請求默認超時時間","settings.desc.DATA_SOURCE_RETRY":"數據源請求失敗時的重試次數","settings.desc.DATA_SOURCE_RETRY_BACKOFF":"重試間隔時間(秒)","settings.desc.CCXT_DEFAULT_EXCHANGE":"CCXT默認交易所(binance, coinbase, okx等)","settings.desc.CCXT_TIMEOUT":"CCXT請求超時時間(毫秒)","settings.desc.CCXT_PROXY":"CCXT請求代理地址(如 socks5h://127.0.0.1:1080)","settings.desc.FINNHUB_API_KEY":"Finnhub API密鑰,用於美股數據(有免費額度)","settings.desc.FINNHUB_TIMEOUT":"Finnhub API請求超時時間","settings.desc.FINNHUB_RATE_LIMIT":"Finnhub API速率限制(每分鐘請求數)","settings.desc.TIINGO_API_KEY":"Tiingo API密鑰,用於外匯/貴金屬數據(免費版不支持1分鐘數據)","settings.desc.TIINGO_TIMEOUT":"Tiingo API請求超時時間","settings.desc.AKSHARE_TIMEOUT":"Akshare API超時時間,用於A股數據","settings.desc.YFINANCE_TIMEOUT":"Yahoo Finance API超時時間","settings.desc.SIGNAL_WEBHOOK_URL":"信號通知Webhook地址(POST JSON)","settings.desc.SIGNAL_WEBHOOK_TOKEN":"Webhook認證令牌,通過請求頭發送","settings.desc.SIGNAL_NOTIFY_TIMEOUT_SEC":"通知請求超時時間","settings.desc.TELEGRAM_BOT_TOKEN":"Telegram機器人Token,從@BotFather獲取","settings.desc.SMTP_HOST":"SMTP郵件服務器地址(如 smtp.gmail.com)","settings.desc.SMTP_PORT":"SMTP端口(TLS用587,SSL用465,明文用25)","settings.desc.SMTP_USER":"SMTP認證用戶名(通常是郵箱地址)","settings.desc.SMTP_PASSWORD":"SMTP認證密碼或應用專用密碼","settings.desc.SMTP_FROM":"郵件發件人地址","settings.desc.SMTP_USE_TLS":"啟用STARTTLS加密(推薦端口587)","settings.desc.SMTP_USE_SSL":"啟用SSL加密(端口465)","settings.desc.TWILIO_ACCOUNT_SID":"Twilio賬戶SID,從控制台獲取","settings.desc.TWILIO_AUTH_TOKEN":"Twilio認證Token,從控制台獲取","settings.desc.TWILIO_FROM_NUMBER":"Twilio發送短信的號碼(如 +1234567890)","settings.desc.ENABLE_AGENT_MEMORY":"啟用AI Agent記憶功能,用於學習歷史交易","settings.desc.AGENT_MEMORY_ENABLE_VECTOR":"啟用本地向量相似度搜索進行記憶檢索","settings.desc.AGENT_MEMORY_EMBEDDING_DIM":"記憶向量嵌入維度","settings.desc.AGENT_MEMORY_TOP_K":"檢索時返回的相似記憶數量","settings.desc.AGENT_MEMORY_CANDIDATE_LIMIT":"相似度搜索的候選記憶上限","settings.desc.AGENT_MEMORY_HALF_LIFE_DAYS":"記憶時間衰減的半衰期(天)","settings.desc.AGENT_MEMORY_W_SIM":"記憶排序中相似度分數的權重(0-1)","settings.desc.AGENT_MEMORY_W_RECENCY":"記憶排序中時間新近度的權重(0-1)","settings.desc.AGENT_MEMORY_W_RETURNS":"記憶排序中收益表現的權重(0-1)","settings.desc.ENABLE_REFLECTION_WORKER":"啟用後台自動交易反思Worker","settings.desc.REFLECTION_WORKER_INTERVAL_SEC":"自動反思運行間隔(默認24小時)","settings.desc.PROXY_URL":"完整代理URL(設置後覆蓋上面的配置)","settings.desc.SEARCH_PROVIDER":"網頁搜索提供商,用於AI研究功能","settings.desc.SEARCH_MAX_RESULTS":"搜索返回的最大結果數","settings.desc.SEARCH_GOOGLE_API_KEY":"Google自定義搜索API密鑰","settings.desc.SEARCH_GOOGLE_CX":"Google可編程搜索引擎ID (CX)","settings.desc.SEARCH_BING_API_KEY":"Microsoft Bing網頁搜索API密鑰","settings.desc.INTERNAL_API_KEY":"內部API認證密鑰,用於服務間調用","settings.desc.RATE_LIMIT":"每IP每分鐘的API請求限制","settings.desc.ENABLE_CACHE":"啟用響應緩存以提高性能","settings.desc.ENABLE_REQUEST_LOG":"記錄所有API請求日誌,用於調試","portfolio.summary.totalValue":"總市值","portfolio.summary.totalCost":"總成本","portfolio.summary.totalPnl":"總盈虧","portfolio.summary.positionCount":"持倉數量","portfolio.summary.profitLossRatio":"盈利/虧損","portfolio.summary.today":"今日","portfolio.summary.todayPnl":"今日盈虧","portfolio.summary.bestPerformer":"最佳表現","portfolio.summary.worstPerformer":"最差表現","portfolio.summary.priceSync":"價格同步","portfolio.summary.syncInterval":"刷新間隔","portfolio.summary.justNow":"剛剛","portfolio.summary.ago":"前","portfolio.positions.title":"我的持倉","portfolio.positions.add":"添加持倉","portfolio.positions.addFirst":"添加第一筆持倉","portfolio.positions.empty":"暫無持倉記錄","portfolio.positions.deleteConfirm":"確定刪除這筆持倉嗎?","portfolio.positions.currentPrice":"現價","portfolio.positions.entryPrice":"買入價","portfolio.positions.quantity":"數量","portfolio.positions.side":"方向","portfolio.positions.long":"做多","portfolio.positions.short":"做空","portfolio.positions.marketValue":"市值","portfolio.positions.pnl":"盈虧","portfolio.positions.items":"個持倉","portfolio.monitors.title":"AI 監控","portfolio.monitors.add":"添加監控","portfolio.monitors.addFirst":"添加 AI 監控","portfolio.monitors.empty":"暫無監控任務","portfolio.monitors.deleteConfirm":"確定刪除這個監控任務嗎?","portfolio.monitors.interval":"執行間隔","portfolio.monitors.lastRun":"上次執行","portfolio.monitors.nextRun":"下次執行","portfolio.monitors.channels":"通知渠道","portfolio.monitors.runNow":"立即執行","portfolio.monitors.analysisResult":"AI 分析結果","portfolio.monitors.runningTitle":"AI 分析已啟動","portfolio.monitors.runningDesc":"分析正在後臺運行,完成後會通過通知推送結果。分析多個持倉可能需要幾分鐘時間。","portfolio.monitors.timeoutTitle":"請求超時","portfolio.monitors.timeoutDesc":"分析可能正在後臺運行中,請稍後查看通知獲取結果。如果長時間沒有收到通知,請重試。","portfolio.modal.addPosition":"添加持倉","portfolio.modal.editPosition":"編輯持倉","portfolio.modal.addMonitor":"添加監控","portfolio.modal.editMonitor":"編輯監控","portfolio.form.market":"市場","portfolio.form.marketRequired":"請選擇市場","portfolio.form.selectMarket":"選擇市場","portfolio.form.symbol":"標的代碼","portfolio.form.symbolRequired":"請輸入標的代碼","portfolio.form.searchSymbol":"搜索或輸入標的代碼","portfolio.form.useAsSymbol":"使用","portfolio.form.asSymbolCode":"作為標的代碼","portfolio.form.symbolHint":"可搜索標的庫,或直接輸入任意代碼","portfolio.form.side":"方向","portfolio.form.quantity":"數量","portfolio.form.quantityRequired":"請輸入數量","portfolio.form.enterQuantity":"輸入持倉數量","portfolio.form.entryPrice":"買入價","portfolio.form.entryPriceRequired":"請輸入買入價","portfolio.form.enterEntryPrice":"輸入買入價格","portfolio.form.notes":"備注","portfolio.form.enterNotes":"可選:添加備注","portfolio.form.monitorName":"監控名稱","portfolio.form.monitorNameRequired":"請輸入監控名稱","portfolio.form.enterMonitorName":"例如:每日組合分析","portfolio.form.interval":"執行間隔","portfolio.form.minutes":"分鐘","portfolio.form.hour":"小時","portfolio.form.hours":"小時","portfolio.form.notifyChannels":"通知渠道","portfolio.form.browser":"瀏覽器通知","portfolio.form.email":"郵件","portfolio.form.telegramChatId":"Telegram Chat ID","portfolio.form.enterTelegramChatId":"輸入 Telegram Chat ID","portfolio.form.telegramRequired":"請輸入 Telegram Chat ID","portfolio.form.emailAddress":"郵箱地址","portfolio.form.enterEmail":"輸入郵箱地址","portfolio.form.emailRequired":"請輸入郵箱地址","portfolio.form.emailInvalid":"請輸入有效的郵箱地址","portfolio.form.customPrompt":"自定義提示","portfolio.form.customPromptPlaceholder":'可選:添加特別關注點,例如"重點關注科技股風險"',"portfolio.form.monitorScope":"監控範圍","portfolio.form.allPositions":"全部持倉","portfolio.form.selectedPositions":"指定持倉","portfolio.form.selectPositions":"選擇持倉","portfolio.form.selectAll":"全選","portfolio.form.deselectAll":"全不選","portfolio.form.selectedCount":"已選 {count}/{total}","portfolio.form.pleaseSelectPositions":"請至少選擇一個持倉進行監控","portfolio.message.loadFailed":"加載數據失敗","portfolio.message.saveSuccess":"保存成功","portfolio.message.saveFailed":"保存失敗","portfolio.message.deleteSuccess":"刪除成功","portfolio.message.deleteFailed":"刪除失敗","portfolio.message.updateFailed":"更新失敗","portfolio.message.monitorEnabled":"監控已啟用","portfolio.message.monitorDisabled":"監控已暫停","portfolio.message.monitorRunSuccess":"分析完成","portfolio.message.monitorRunFailed":"分析失敗","portfolio.message.monitorRunning":"AI 分析已啟動,請等待通知","portfolio.groups.all":"全部持倉","portfolio.groups.ungrouped":"未分組","portfolio.form.group":"分組","portfolio.form.enterGroup":"輸入或選擇分組","portfolio.alerts.title":"價格/盈虧預警","portfolio.alerts.addAlert":"添加預警","portfolio.alerts.editAlert":"編輯預警","portfolio.alerts.alertType":"預警類型","portfolio.alerts.priceAbove":"價格高於","portfolio.alerts.priceBelow":"價格低於","portfolio.alerts.pnlAbove":"盈利高於 (%)","portfolio.alerts.pnlBelow":"虧損低於 (%)","portfolio.alerts.threshold":"閾值","portfolio.alerts.thresholdRequired":"請輸入閾值","portfolio.alerts.enterPrice":"輸入價格","portfolio.alerts.enterPercent":"輸入百分比","portfolio.alerts.currentPrice":"當前價格","portfolio.alerts.currentPriceHint":"當前價格","portfolio.alerts.repeatInterval":"重複提醒","portfolio.alerts.noRepeat":"不重複 (觸發一次)","portfolio.alerts.every5min":"每 5 分鐘","portfolio.alerts.every15min":"每 15 分鐘","portfolio.alerts.every30min":"每 30 分鐘","portfolio.alerts.every1hour":"每 1 小時","portfolio.alerts.every4hours":"每 4 小時","portfolio.alerts.onceDaily":"每天一次","portfolio.alerts.enabled":"啟用預警","portfolio.alerts.enabledDesc":"開啟後將自動監測並觸發通知","portfolio.alerts.delete":"刪除","portfolio.alerts.deleteConfirm":"確定要刪除此預警嗎?","portfolio.modal.addAlert":"添加預警","portfolio.modal.editAlert":"編輯預警","menu.userManage":"用戶管理","menu.myProfile":"個人中心","userManage.title":"用戶管理","userManage.searchPlaceholder":"搜索用戶名/郵箱/暱稱","userManage.description":"管理系統用戶、角色和權限","userManage.createUser":"創建用戶","userManage.editUser":"編輯用戶","userManage.username":"用戶名","userManage.password":"密碼","userManage.nickname":"暱稱","userManage.email":"郵箱","userManage.role":"角色","userManage.status":"狀態","userManage.lastLogin":"最後登錄","userManage.active":"啟用","userManage.disabled":"禁用","userManage.neverLogin":"從未登錄","userManage.usernameRequired":"請輸入用戶名","userManage.usernamePlaceholder":"輸入用戶名","userManage.passwordRequired":"請輸入密碼","userManage.passwordPlaceholder":"輸入密碼(至少6位)","userManage.passwordMin":"密碼至少6個字符","userManage.nicknamePlaceholder":"輸入暱稱","userManage.emailPlaceholder":"輸入郵箱","userManage.emailInvalid":"郵箱格式不正確","userManage.rolePlaceholder":"選擇角色","userManage.statusPlaceholder":"選擇狀態","userManage.resetPassword":"重置密碼","userManage.resetPasswordWarning":"此操作將重置用戶密碼","userManage.newPassword":"新密碼","userManage.newPasswordPlaceholder":"輸入新密碼","userManage.confirmDelete":"確定要刪除此用戶嗎?","userManage.roleAdmin":"管理員","userManage.roleManager":"經理","userManage.roleUser":"普通用戶","userManage.roleViewer":"訪客","userManage.credits":"積分","userManage.adjustCredits":"調整積分","userManage.setVip":"設置VIP","userManage.currentCredits":"當前積分","userManage.newCredits":"新積分","userManage.enterCredits":"輸入新的積分數量","userManage.creditsNonNegative":"積分不能為負數","userManage.currentVip":"當前VIP狀態","userManage.vipActive":"有效","userManage.vipExpired":"已過期","userManage.vipDays":"VIP天數","userManage.vipExpiresAt":"VIP過期時間","userManage.cancelVip":"取消VIP","userManage.days":"天","userManage.customDate":"自定義日期","userManage.selectDate":"請選擇日期","userManage.remark":"備注","userManage.remarkPlaceholder":"可選備注","profile.title":"個人中心","profile.description":"管理您的賬戶設置和偏好","profile.basicInfo":"基本信息","profile.changePassword":"修改密碼","profile.username":"用戶名","profile.nickname":"暱稱","profile.email":"郵箱","profile.lastLogin":"最後登錄","profile.nicknamePlaceholder":"輸入您的暱稱","profile.emailPlaceholder":"輸入您的郵箱","profile.emailInvalid":"郵箱格式不正確","profile.emailCannotChange":"註冊後郵箱不可修改","profile.passwordHint":"密碼至少需要6個字符","profile.oldPassword":"當前密碼","profile.newPassword":"新密碼","profile.confirmPassword":"確認密碼","profile.oldPasswordRequired":"請輸入當前密碼","profile.oldPasswordPlaceholder":"輸入當前密碼","profile.newPasswordRequired":"請輸入新密碼","profile.newPasswordPlaceholder":"輸入新密碼","profile.confirmPasswordRequired":"請確認新密碼","profile.confirmPasswordPlaceholder":"再次輸入新密碼","profile.passwordMin":"密碼至少6個字符","profile.passwordMismatch":"兩次輸入的密碼不一致","profile.credits.title":"我的積分","profile.credits.unit":"積分","profile.credits.recharge":"開通/充值","profile.credits.vipExpires":"VIP有效期至","profile.credits.vipExpired":"VIP已過期","profile.credits.noVip":"非VIP用戶","profile.credits.hint":"使用AI分析等功能會消耗積分,VIP用戶免費","profile.creditsLog":"消費記錄","profile.creditsLog.time":"時間","profile.creditsLog.action":"類型","profile.creditsLog.amount":"變動","profile.creditsLog.balance":"餘額","profile.creditsLog.remark":"備注","profile.creditsLog.actionConsume":"消費","profile.creditsLog.actionRecharge":"充值","profile.creditsLog.actionAdjust":"調整","profile.creditsLog.actionRefund":"退款","profile.creditsLog.actionVipGrant":"VIP授予","profile.creditsLog.actionVipRevoke":"VIP取消","profile.creditsLog.actionRegisterBonus":"註冊獎勵","profile.creditsLog.actionReferralBonus":"邀請獎勵","profile.referral.title":"邀請好友","profile.referral.listTab":"邀請列表","profile.referral.totalInvited":"已邀請","profile.referral.bonusPerInvite":"每邀請獲得","profile.referral.yourLink":"您的邀請鏈接","profile.referral.copyLink":"複製鏈接","profile.referral.linkCopied":"邀請鏈接已複製","profile.referral.newUserBonus":"新用戶註冊獲得","profile.referral.user":"用戶","profile.referral.registerTime":"註冊時間","profile.referral.noReferrals":"暫無邀請記錄","profile.referral.shareNow":"立即分享邀請","profile.notifications.title":"通知設定","profile.notifications.hint":"配置您的預設通知方式,在建立資產監控和預警時將自動使用這些設定","profile.notifications.defaultChannels":"預設通知管道","profile.notifications.browser":"站內通知","profile.notifications.email":"郵件","profile.notifications.phone":"簡訊","profile.notifications.telegramBotToken":"Telegram Bot Token","profile.notifications.telegramBotTokenPlaceholder":"請輸入您的 Telegram Bot Token","profile.notifications.telegramBotTokenHint":"透過 @BotFather 建立機器人取得 Token","profile.notifications.telegramChatId":"Telegram Chat ID","profile.notifications.telegramPlaceholder":"請輸入您的 Telegram Chat ID(如 123456789)","profile.notifications.telegramHint":"發送 /start 給 @userinfobot 可取得您的 Chat ID","profile.notifications.notifyEmail":"通知信箱","profile.notifications.emailPlaceholder":"接收通知的信箱地址","profile.notifications.emailHint":"預設使用帳戶信箱,可設定其他信箱接收通知","profile.notifications.phonePlaceholder":"請輸入手機號(如 +886912345678)","profile.notifications.phoneHint":"需要管理員配置 Twilio 服務後才能使用簡訊通知","profile.notifications.discordWebhook":"Discord Webhook","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"在 Discord 伺服器設定中建立 Webhook","profile.notifications.webhookUrl":"Webhook URL","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"自訂 Webhook 地址,將以 POST JSON 方式推送通知","profile.notifications.webhookToken":"Webhook Token(可選)","profile.notifications.webhookTokenPlaceholder":"用於驗證請求的 Bearer Token","profile.notifications.webhookTokenHint":"將作為 Authorization: Bearer Token 傳送到 Webhook","profile.notifications.testBtn":"發送測試通知","profile.notifications.saveSuccess":"通知設定儲存成功","profile.notifications.selectChannel":"請至少選擇一個通知管道","profile.notifications.fillTelegramToken":"請填寫 Telegram Bot Token","profile.notifications.fillTelegram":"請填寫 Telegram Chat ID","profile.notifications.fillEmail":"請填寫通知信箱","profile.notifications.testSent":"測試通知已發送,請檢查您的通知管道","settings.group.billing":"計費配置","settings.field.BILLING_ENABLED":"啟用計費","settings.field.BILLING_COST_AI_ANALYSIS":"AI分析消耗","settings.field.BILLING_COST_STRATEGY_RUN":"策略運行消耗","settings.field.BILLING_COST_BACKTEST":"回測消耗","settings.field.BILLING_COST_PORTFOLIO_MONITOR":"Portfolio監控消耗","settings.field.CREDITS_REGISTER_BONUS":"註冊獎勵","settings.field.CREDITS_REFERRAL_BONUS":"邀請獎勵","settings.field.RECHARGE_TELEGRAM_URL":"充值Telegram鏈接","settings.desc.BILLING_ENABLED":"啟用計費系統。啟用後,用戶使用某些功能需要消耗積分","settings.desc.BILLING_COST_AI_ANALYSIS":"每次AI分析消耗的積分數","settings.desc.BILLING_COST_STRATEGY_RUN":"啟動策略時消耗的積分數","settings.desc.BILLING_COST_BACKTEST":"每次回測消耗的積分數","settings.desc.BILLING_COST_PORTFOLIO_MONITOR":"每次Portfolio AI監控消耗的積分數","settings.desc.CREDITS_REGISTER_BONUS":"新用戶註冊時獲得的積分獎勵","settings.desc.CREDITS_REFERRAL_BONUS":"用戶通過邀請鏈接成功邀請新用戶時,邀請人獲得的積分獎勵","settings.desc.VERIFICATION_CODE_MAX_ATTEMPTS":"驗證碼驗證失敗的最大嘗試次數,超過後將鎖定","settings.desc.VERIFICATION_CODE_LOCK_MINUTES":"驗證碼驗證失敗次數超過限制後的鎖定時長(分鐘)","settings.desc.RECHARGE_TELEGRAM_URL":"用戶點擊充值時跳轉的Telegram客服鏈接"},y=(0,s.A)((0,s.A)({},p),f)}}]); \ No newline at end of file diff --git a/frontend/dist/js/user-legacy.79296d1a.js b/frontend/dist/js/user-legacy.79296d1a.js new file mode 100644 index 0000000..a7842e2 --- /dev/null +++ b/frontend/dist/js/user-legacy.79296d1a.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[806,824],{65124:function(e,r,t){t.r(r),t.d(r,{default:function(){return E}});var s=function(){var e=this,r=e._self._c;return r("div",{staticClass:"main"},[e._m(0),r("div",{staticClass:"auth-card"},[e.oauthProcessing?r("div",{staticClass:"oauth-processing"},[r("a-spin",{attrs:{size:"large"}}),r("p",[e._v(e._s(e.$t("user.oauth.processing")||"Processing login..."))])],1):e._e(),r("div",{directives:[{name:"show",rawName:"v-show",value:!e.oauthProcessing,expression:"!oauthProcessing"}]},[r("a-tabs",{attrs:{animated:!1},model:{value:e.activeTab,callback:function(r){e.activeTab=r},expression:"activeTab"}},[r("a-tab-pane",{key:"login",attrs:{tab:e.$t("user.login.tab")||"Login"}},[r("div",{staticClass:"login-method-switch"},[r("a",{class:{active:"password"===e.loginMethod},on:{click:function(r){e.loginMethod="password"}}},[e._v(e._s(e.$t("user.login.methodPassword")||"Password"))]),r("a-divider",{attrs:{type:"vertical"}}),r("a",{class:{active:"code"===e.loginMethod},on:{click:function(r){e.loginMethod="code"}}},[e._v(e._s(e.$t("user.login.methodCode")||"Email Code"))])],1),r("a-form",{directives:[{name:"show",rawName:"v-show",value:"password"===e.loginMethod,expression:"loginMethod === 'password'"}],ref:"formLogin",staticClass:"auth-form",attrs:{id:"formLogin",form:e.loginForm},on:{submit:e.handleLogin}},[e.loginError?r("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{type:"error",showIcon:"",message:e.loginError}}):e._e(),e.oauthError?r("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{type:"error",showIcon:"",message:e.oauthError}}):e._e(),r("a-form-item",[r("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["username",{rules:[{required:!0,message:e.$t("user.login.usernameRequired")||"Please enter username"}],validateTrigger:"blur"}],expression:"[\n 'username',\n {rules: [{ required: true, message: $t('user.login.usernameRequired') || 'Please enter username' }], validateTrigger: 'blur'}\n ]"}],attrs:{size:"large",type:"text",placeholder:e.$t("user.login.username")||"Username"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"user"},slot:"prefix"})],1)],1),r("a-form-item",[r("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["password",{rules:[{required:!0,message:e.$t("user.login.passwordRequired")||"Please enter password"}],validateTrigger:"blur"}],expression:"[\n 'password',\n {rules: [{ required: true, message: $t('user.login.passwordRequired') || 'Please enter password' }], validateTrigger: 'blur'}\n ]"}],attrs:{size:"large",placeholder:e.$t("user.login.password")||"Password"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),r("Turnstile",{ref:"loginTurnstile",attrs:{siteKey:e.securityConfig.turnstile_site_key,enabled:e.securityConfig.turnstile_enabled},on:{success:function(r){return e.loginTurnstileToken=r},error:function(){return e.loginTurnstileToken=null}}}),r("a-form-item",{staticStyle:{"margin-top":"24px"}},[r("a-button",{staticClass:"submit-button",attrs:{size:"large",type:"primary",htmlType:"submit",loading:e.loginLoading,disabled:e.loginLoading||e.securityConfig.turnstile_enabled&&!e.loginTurnstileToken,block:""}},[e._v(e._s(e.$t("user.login.submit")||"Login"))])],1),r("div",{staticClass:"auth-links"},[r("a",{on:{click:function(r){e.showResetModal=!0}}},[e._v(e._s(e.$t("user.login.forgotPassword")||"Forgot Password?"))])])],1),r("a-form",{directives:[{name:"show",rawName:"v-show",value:"code"===e.loginMethod,expression:"loginMethod === 'code'"}],ref:"formCodeLogin",staticClass:"auth-form",attrs:{id:"formCodeLogin",form:e.codeLoginForm},on:{submit:e.handleCodeLogin}},[e.codeLoginError?r("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{type:"error",showIcon:"",message:e.codeLoginError}}):e._e(),e.oauthError?r("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{type:"error",showIcon:"",message:e.oauthError}}):e._e(),r("a-form-item",[r("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["email",{rules:[{required:!0,message:e.$t("user.login.emailRequired")||"Please enter email"},{type:"email",message:e.$t("user.login.emailInvalid")||"Invalid email format"}],validateTrigger:"blur"}],expression:"[\n 'email',\n {\n rules: [\n { required: true, message: $t('user.login.emailRequired') || 'Please enter email' },\n { type: 'email', message: $t('user.login.emailInvalid') || 'Invalid email format' }\n ],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",type:"email",placeholder:e.$t("user.login.email")||"Email"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"mail"},slot:"prefix"})],1)],1),r("a-form-item",[r("a-row",{attrs:{gutter:12}},[r("a-col",{attrs:{span:16}},[r("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["code",{rules:[{required:!0,message:e.$t("user.login.codeRequired")||"Please enter verification code"}],validateTrigger:"blur"}],expression:"[\n 'code',\n {\n rules: [{ required: true, message: $t('user.login.codeRequired') || 'Please enter verification code' }],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",placeholder:e.$t("user.login.verificationCode")||"Verification Code"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"safety-certificate"},slot:"prefix"})],1)],1),r("a-col",{attrs:{span:8}},[r("a-button",{attrs:{size:"large",block:"",loading:e.codeLoginSendingCode,disabled:e.codeLoginSendingCode||e.codeLoginCountdown>0},on:{click:e.handleCodeLoginSendCode}},[e._v(" "+e._s(e.codeLoginCountdown>0?"".concat(e.codeLoginCountdown,"s"):e.$t("user.login.sendCode")||"Send")+" ")])],1)],1)],1),r("Turnstile",{ref:"codeLoginTurnstile",attrs:{siteKey:e.securityConfig.turnstile_site_key,enabled:e.securityConfig.turnstile_enabled},on:{success:function(r){return e.codeLoginTurnstileToken=r},error:function(){return e.codeLoginTurnstileToken=null}}}),r("a-form-item",{staticStyle:{"margin-top":"24px"}},[r("a-button",{staticClass:"submit-button",attrs:{size:"large",type:"primary",htmlType:"submit",loading:e.codeLoginLoading,disabled:e.codeLoginLoading||e.securityConfig.turnstile_enabled&&!e.codeLoginTurnstileToken,block:""}},[e._v(e._s(e.$t("user.login.submit")||"Login"))])],1),r("div",{staticClass:"code-login-hint"},[r("a-icon",{attrs:{type:"info-circle"}}),r("span",[e._v(e._s(e.$t("user.login.codeLoginHint")||"New users will be automatically registered"))])],1)],1),e.hasOAuth?r("div",{staticClass:"oauth-section"},[r("a-divider",[e._v(e._s(e.$t("user.login.orLoginWith")||"Or login with"))]),r("div",{staticClass:"oauth-buttons"},[e.securityConfig.oauth_google_enabled?r("a-button",{staticClass:"oauth-btn google-btn",on:{click:e.handleGoogleLogin}},[r("svg",{staticClass:"oauth-icon",attrs:{viewBox:"0 0 24 24",width:"18",height:"18"}},[r("path",{attrs:{fill:"#4285F4",d:"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z"}}),r("path",{attrs:{fill:"#34A853",d:"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z"}}),r("path",{attrs:{fill:"#FBBC05",d:"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z"}}),r("path",{attrs:{fill:"#EA4335",d:"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z"}})]),e._v(" Google ")]):e._e(),e.securityConfig.oauth_github_enabled?r("a-button",{staticClass:"oauth-btn github-btn",on:{click:e.handleGitHubLogin}},[r("a-icon",{attrs:{type:"github"}}),e._v(" GitHub ")],1):e._e()],1)],1):e._e()],1),e.securityConfig.registration_enabled?r("a-tab-pane",{key:"register",attrs:{tab:e.$t("user.register.tab")||"Register"}},[r("a-form",{ref:"formRegister",staticClass:"auth-form",attrs:{id:"formRegister",form:e.registerForm},on:{submit:e.handleRegister}},[e.registerError?r("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{type:"error",showIcon:"",message:e.registerError}}):e._e(),r("a-form-item",[r("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["email",{rules:[{required:!0,message:e.$t("user.register.emailRequired")||"Please enter email"},{type:"email",message:e.$t("user.register.emailInvalid")||"Invalid email format"}],validateTrigger:"blur"}],expression:"[\n 'email',\n {\n rules: [\n { required: true, message: $t('user.register.emailRequired') || 'Please enter email' },\n { type: 'email', message: $t('user.register.emailInvalid') || 'Invalid email format' }\n ],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",type:"email",placeholder:e.$t("user.register.email")||"Email"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"mail"},slot:"prefix"})],1)],1),r("a-form-item",[r("a-row",{attrs:{gutter:12}},[r("a-col",{attrs:{span:16}},[r("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["code",{rules:[{required:!0,message:e.$t("user.register.codeRequired")||"Please enter verification code"}],validateTrigger:"blur"}],expression:"[\n 'code',\n {\n rules: [{ required: true, message: $t('user.register.codeRequired') || 'Please enter verification code' }],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",placeholder:e.$t("user.register.verificationCode")||"Verification Code"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"safety-certificate"},slot:"prefix"})],1)],1),r("a-col",{attrs:{span:8}},[r("a-button",{attrs:{size:"large",block:"",loading:e.registerSendingCode,disabled:e.registerSendingCode||e.registerCountdown>0},on:{click:e.handleRegisterSendCode}},[e._v(" "+e._s(e.registerCountdown>0?"".concat(e.registerCountdown,"s"):e.$t("user.register.sendCode")||"Send")+" ")])],1)],1)],1),r("a-form-item",[r("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["username",{rules:[{required:!0,message:e.$t("user.register.usernameRequired")||"Please enter username"},{min:3,max:30,message:e.$t("user.register.usernameLength")||"Username must be 3-30 characters"},{pattern:/^[a-zA-Z][a-zA-Z0-9_]*$/,message:e.$t("user.register.usernamePattern")||"Start with letter, letters/numbers/underscore only"}],validateTrigger:"blur"}],expression:"[\n 'username',\n {\n rules: [\n { required: true, message: $t('user.register.usernameRequired') || 'Please enter username' },\n { min: 3, max: 30, message: $t('user.register.usernameLength') || 'Username must be 3-30 characters' },\n { pattern: /^[a-zA-Z][a-zA-Z0-9_]*$/, message: $t('user.register.usernamePattern') || 'Start with letter, letters/numbers/underscore only' }\n ],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",placeholder:e.$t("user.register.username")||"Username"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"user"},slot:"prefix"})],1)],1),r("a-form-item",[r("a-popover",{attrs:{placement:"rightTop",trigger:["focus"],visible:e.regPwdFocused&&!e.regPwdValid}},[r("template",{slot:"content"},[r("div",{staticClass:"password-requirements"},[r("div",{class:{valid:e.regHasMinLength}},[r("a-icon",{attrs:{type:e.regHasMinLength?"check-circle":"close-circle"}}),e._v(" "+e._s(e.$t("user.register.pwdMinLength")||"At least 8 characters")+" ")],1),r("div",{class:{valid:e.regHasUppercase}},[r("a-icon",{attrs:{type:e.regHasUppercase?"check-circle":"close-circle"}}),e._v(" "+e._s(e.$t("user.register.pwdUppercase")||"At least one uppercase letter")+" ")],1),r("div",{class:{valid:e.regHasLowercase}},[r("a-icon",{attrs:{type:e.regHasLowercase?"check-circle":"close-circle"}}),e._v(" "+e._s(e.$t("user.register.pwdLowercase")||"At least one lowercase letter")+" ")],1),r("div",{class:{valid:e.regHasNumber}},[r("a-icon",{attrs:{type:e.regHasNumber?"check-circle":"close-circle"}}),e._v(" "+e._s(e.$t("user.register.pwdNumber")||"At least one number")+" ")],1)])]),r("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["password",{rules:[{required:!0,message:e.$t("user.register.passwordRequired")||"Please enter password"},{validator:e.validateRegPassword}],validateTrigger:"blur"}],expression:"[\n 'password',\n {\n rules: [\n { required: true, message: $t('user.register.passwordRequired') || 'Please enter password' },\n { validator: validateRegPassword }\n ],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",placeholder:e.$t("user.register.password")||"Password"},on:{focus:function(r){e.regPwdFocused=!0},blur:function(r){e.regPwdFocused=!1},change:e.checkRegPassword}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],2)],1),r("a-form-item",[r("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["confirmPassword",{rules:[{required:!0,message:e.$t("user.register.confirmPasswordRequired")||"Please confirm password"},{validator:e.validateRegConfirmPassword}],validateTrigger:"blur"}],expression:"[\n 'confirmPassword',\n {\n rules: [\n { required: true, message: $t('user.register.confirmPasswordRequired') || 'Please confirm password' },\n { validator: validateRegConfirmPassword }\n ],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",placeholder:e.$t("user.register.confirmPassword")||"Confirm Password"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),r("Turnstile",{ref:"registerTurnstile",attrs:{siteKey:e.securityConfig.turnstile_site_key,enabled:e.securityConfig.turnstile_enabled},on:{success:function(r){return e.registerTurnstileToken=r},error:function(){return e.registerTurnstileToken=null}}}),r("a-form-item",{staticStyle:{"margin-top":"24px"}},[r("a-button",{staticClass:"submit-button",attrs:{size:"large",type:"primary",htmlType:"submit",loading:e.registerLoading,disabled:e.registerLoading||e.securityConfig.turnstile_enabled&&!e.registerTurnstileToken,block:""}},[e._v(e._s(e.$t("user.register.submit")||"Create Account"))])],1)],1)],1):e._e()],1),r("div",{staticClass:"legal-wrap"},[r("div",{staticClass:"legal-header"},[r("div",{staticClass:"legal-title"},[e._v(e._s(e.$t("user.login.legal.title")))]),r("a",{staticClass:"legal-toggle",on:{click:function(r){e.showLegal=!e.showLegal}}},[e._v(" "+e._s(e.showLegal?e.$t("user.login.legal.collapse"):e.$t("user.login.legal.view"))+" ")])]),r("div",{directives:[{name:"show",rawName:"v-show",value:e.showLegal,expression:"showLegal"}],staticClass:"legal-content"},[e._v(" "+e._s(e.$t("user.login.legal.content"))+" ")]),r("div",{staticClass:"legal-agree"},[r("a-checkbox",{model:{value:e.legalAgreed,callback:function(r){e.legalAgreed=r},expression:"legalAgreed"}},[e._v(" "+e._s(e.$t("user.login.legal.agree"))+" ")]),e.legalError?r("div",{staticClass:"legal-error"},[e._v(e._s(e.$t("user.login.legal.required")))]):e._e()],1)])],1)]),r("a-modal",{attrs:{title:e.$t("user.resetPassword.title")||"Reset Password",footer:null,width:420,destroyOnClose:!0},on:{cancel:e.resetResetModal},model:{value:e.showResetModal,callback:function(r){e.showResetModal=r},expression:"showResetModal"}},[1===e.resetStep?r("a-form",{staticClass:"auth-form",attrs:{form:e.resetForm},on:{submit:e.handleResetVerify}},[e.resetError?r("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{type:"error",showIcon:"",message:e.resetError}}):e._e(),r("a-form-item",[r("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["email",{rules:[{required:!0,message:e.$t("user.resetPassword.emailRequired")||"Please enter email"},{type:"email",message:e.$t("user.resetPassword.emailInvalid")||"Invalid email format"}],validateTrigger:"blur"}],expression:"[\n 'email',\n {\n rules: [\n { required: true, message: $t('user.resetPassword.emailRequired') || 'Please enter email' },\n { type: 'email', message: $t('user.resetPassword.emailInvalid') || 'Invalid email format' }\n ],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",type:"email",placeholder:e.$t("user.resetPassword.email")||"Email"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"mail"},slot:"prefix"})],1)],1),r("a-form-item",[r("a-row",{attrs:{gutter:12}},[r("a-col",{attrs:{span:16}},[r("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["code",{rules:[{required:!0,message:e.$t("user.resetPassword.codeRequired")||"Please enter verification code"}],validateTrigger:"blur"}],expression:"[\n 'code',\n {\n rules: [{ required: true, message: $t('user.resetPassword.codeRequired') || 'Please enter verification code' }],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",placeholder:e.$t("user.resetPassword.verificationCode")||"Verification Code"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"safety-certificate"},slot:"prefix"})],1)],1),r("a-col",{attrs:{span:8}},[r("a-button",{attrs:{size:"large",block:"",loading:e.resetSendingCode,disabled:e.resetSendingCode||e.resetCountdown>0},on:{click:e.handleResetSendCode}},[e._v(" "+e._s(e.resetCountdown>0?"".concat(e.resetCountdown,"s"):e.$t("user.resetPassword.sendCode")||"Send")+" ")])],1)],1)],1),r("Turnstile",{ref:"resetTurnstile",attrs:{siteKey:e.securityConfig.turnstile_site_key,enabled:e.securityConfig.turnstile_enabled},on:{success:function(r){return e.resetTurnstileToken=r},error:function(){return e.resetTurnstileToken=null}}}),r("a-form-item",{staticStyle:{"margin-top":"24px"}},[r("a-button",{staticClass:"submit-button",attrs:{size:"large",type:"primary",htmlType:"submit",disabled:e.securityConfig.turnstile_enabled&&!e.resetTurnstileToken,block:""}},[e._v(e._s(e.$t("user.resetPassword.next")||"Next"))])],1)],1):e._e(),2===e.resetStep?r("a-form",{staticClass:"auth-form",attrs:{form:e.resetPwdForm},on:{submit:e.handleResetPassword}},[e.resetError?r("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{type:"error",showIcon:"",message:e.resetError}}):e._e(),r("div",{staticClass:"email-display"},[r("span",[e._v(e._s(e.$t("user.resetPassword.resettingFor")||"Resetting for")+":")]),r("strong",[e._v(e._s(e.resetEmail))])]),r("a-form-item",[r("a-popover",{attrs:{placement:"rightTop",trigger:["focus"],visible:e.resetPwdFocused&&!e.resetPwdValid}},[r("template",{slot:"content"},[r("div",{staticClass:"password-requirements"},[r("div",{class:{valid:e.resetHasMinLength}},[r("a-icon",{attrs:{type:e.resetHasMinLength?"check-circle":"close-circle"}}),e._v(" "+e._s(e.$t("user.register.pwdMinLength")||"At least 8 characters")+" ")],1),r("div",{class:{valid:e.resetHasUppercase}},[r("a-icon",{attrs:{type:e.resetHasUppercase?"check-circle":"close-circle"}}),e._v(" "+e._s(e.$t("user.register.pwdUppercase")||"At least one uppercase letter")+" ")],1),r("div",{class:{valid:e.resetHasLowercase}},[r("a-icon",{attrs:{type:e.resetHasLowercase?"check-circle":"close-circle"}}),e._v(" "+e._s(e.$t("user.register.pwdLowercase")||"At least one lowercase letter")+" ")],1),r("div",{class:{valid:e.resetHasNumber}},[r("a-icon",{attrs:{type:e.resetHasNumber?"check-circle":"close-circle"}}),e._v(" "+e._s(e.$t("user.register.pwdNumber")||"At least one number")+" ")],1)])]),r("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["new_password",{rules:[{required:!0,message:e.$t("user.resetPassword.passwordRequired")||"Please enter new password"},{validator:e.validateResetPassword}],validateTrigger:"blur"}],expression:"[\n 'new_password',\n {\n rules: [\n { required: true, message: $t('user.resetPassword.passwordRequired') || 'Please enter new password' },\n { validator: validateResetPassword }\n ],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",placeholder:e.$t("user.resetPassword.newPassword")||"New Password"},on:{focus:function(r){e.resetPwdFocused=!0},blur:function(r){e.resetPwdFocused=!1},change:e.checkResetPassword}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],2)],1),r("a-form-item",[r("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["confirm_password",{rules:[{required:!0,message:e.$t("user.resetPassword.confirmPasswordRequired")||"Please confirm password"},{validator:e.validateResetConfirmPassword}],validateTrigger:"blur"}],expression:"[\n 'confirm_password',\n {\n rules: [\n { required: true, message: $t('user.resetPassword.confirmPasswordRequired') || 'Please confirm password' },\n { validator: validateResetConfirmPassword }\n ],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",placeholder:e.$t("user.resetPassword.confirmPassword")||"Confirm Password"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),r("a-form-item",{staticStyle:{"margin-top":"24px"}},[r("a-button",{staticClass:"submit-button",attrs:{size:"large",type:"primary",htmlType:"submit",loading:e.resetLoading,block:""}},[e._v(e._s(e.$t("user.resetPassword.submit")||"Reset Password"))])],1),r("div",{staticClass:"auth-links"},[r("a",{on:{click:function(r){e.resetStep=1}}},[r("a-icon",{attrs:{type:"arrow-left"}}),e._v(" "+e._s(e.$t("user.resetPassword.back")||"Back")+" ")],1)])],1):e._e(),3===e.resetStep?r("div",{staticClass:"success-panel"},[r("a-result",{attrs:{status:"success",title:e.$t("user.resetPassword.successTitle")||"Password Reset Successful","sub-title":e.$t("user.resetPassword.successSubtitle")||"You can now login with your new password"},scopedSlots:e._u([{key:"extra",fn:function(){return[r("a-button",{attrs:{type:"primary"},on:{click:function(r){e.showResetModal=!1,e.activeTab="login"}}},[e._v(" "+e._s(e.$t("user.resetPassword.goToLogin")||"Go to Login")+" ")])]},proxy:!0}],null,!1,1952454462)})],1):e._e()],1)],1)},i=[function(){var e=this,r=e._self._c;return r("div",{staticClass:"auth-intro"},[r("div",{staticClass:"desc"},[e._v("AI driven quantitative insights for global markets")])])}],o=t(44735),a=t(81127),n=t(56252),l=t(76338),u=(t(74423),t(26099),t(27495),t(21699),t(47764),t(5746),t(62953),t(48408),t(95353)),c=t(67569),d=t(95824),g=function(){var e=this,r=e._self._c;return e.enabled?r("div",{staticClass:"turnstile-container"},[r("div",{ref:"turnstileRef",attrs:{id:e.containerId}}),e.error?r("div",{staticClass:"turnstile-error"},[e._v(" "+e._s(e.error)+" "),r("a",{on:{click:e.reset}},[e._v(e._s(e.$t("user.security.retry")||"Retry"))])]):e._e()]):e._e()},m=[],h=(t(28706),t(38781),!1),p=!1,f=[];function w(){return new Promise(function(e,r){if(h)e();else if(f.push({resolve:e,reject:r}),!p){p=!0;var t=document.createElement("script");t.src="https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit",t.async=!0,t.defer=!0,t.onload=function(){h=!0,f.forEach(function(e){return e.resolve()}),f.length=0},t.onerror=function(){p=!1,f.forEach(function(e){return e.reject(new Error("Failed to load Turnstile script"))}),f.length=0},document.head.appendChild(t)}})}var v={name:"Turnstile",props:{siteKey:{type:String,default:""},enabled:{type:Boolean,default:!0},theme:{type:String,default:"auto"},size:{type:String,default:"normal"}},data:function(){return{widgetId:null,token:null,error:null,containerId:"turnstile-".concat(Date.now(),"-").concat(Math.random().toString(36).substr(2,9))}},mounted:function(){this.enabled&&this.siteKey&&this.initTurnstile()},beforeDestroy:function(){this.cleanup()},watch:{siteKey:function(e){e&&this.enabled&&this.initTurnstile()},enabled:function(e){e&&this.siteKey?this.initTurnstile():this.cleanup()}},methods:{initTurnstile:function(){var e=this;return(0,n.A)((0,a.A)().m(function r(){return(0,a.A)().w(function(r){while(1)switch(r.p=r.n){case 0:return r.p=0,r.n=1,w();case 1:e.renderWidget(),r.n=3;break;case 2:r.p=2,r.v,e.error="Failed to load verification";case 3:return r.a(2)}},r,null,[[0,2]])}))()},renderWidget:function(){var e=this;window.turnstile&&this.$refs.turnstileRef&&(this.cleanup(),this.widgetId=window.turnstile.render(this.$refs.turnstileRef,{sitekey:this.siteKey,theme:this.theme,size:this.size,callback:function(r){e.token=r,e.error=null,e.$emit("success",r)},"error-callback":function(){e.token=null,e.error="Verification failed",e.$emit("error")},"expired-callback":function(){e.token=null,e.$emit("expired")}}))},reset:function(){this.token=null,this.error=null,window.turnstile&&null!==this.widgetId?window.turnstile.reset(this.widgetId):this.renderWidget()},getToken:function(){return this.token},cleanup:function(){if(window.turnstile&&null!==this.widgetId){try{window.turnstile.remove(this.widgetId)}catch(e){}this.widgetId=null}}}},b=v,C=t(845),y=(0,C.A)(b,g,m,!1,null,"20437450",null),$=y.exports,_=t(74053),T=t.n(_),L=t(75314),k={name:"Login",components:{Turnstile:$},data:function(){return{activeTab:"login",showLegal:!1,legalAgreed:!0,legalError:!1,securityConfig:{turnstile_enabled:!1,turnstile_site_key:"",registration_enabled:!0,oauth_google_enabled:!1,oauth_github_enabled:!1},oauthProcessing:!1,oauthError:null,referralCode:"",loginMethod:"password",loginForm:this.$form.createForm(this,{name:"loginForm"}),loginError:"",loginLoading:!1,loginTurnstileToken:null,codeLoginForm:this.$form.createForm(this,{name:"codeLoginForm"}),codeLoginError:"",codeLoginLoading:!1,codeLoginTurnstileToken:null,codeLoginSendingCode:!1,codeLoginCountdown:0,codeLoginCountdownTimer:null,registerForm:this.$form.createForm(this,{name:"registerForm"}),registerError:"",registerLoading:!1,registerTurnstileToken:null,registerSendingCode:!1,registerCountdown:0,registerCountdownTimer:null,regPwdFocused:!1,regHasMinLength:!1,regHasUppercase:!1,regHasLowercase:!1,regHasNumber:!1,showResetModal:!1,resetStep:1,resetForm:this.$form.createForm(this,{name:"resetForm"}),resetPwdForm:this.$form.createForm(this,{name:"resetPwdForm"}),resetError:"",resetLoading:!1,resetTurnstileToken:null,resetSendingCode:!1,resetCountdown:0,resetCountdownTimer:null,resetEmail:"",resetCode:"",resetPwdFocused:!1,resetHasMinLength:!1,resetHasUppercase:!1,resetHasLowercase:!1,resetHasNumber:!1}},computed:{hasOAuth:function(){return this.securityConfig.oauth_google_enabled||this.securityConfig.oauth_github_enabled},regPwdValid:function(){return this.regHasMinLength&&this.regHasUppercase&&this.regHasLowercase&&this.regHasNumber},resetPwdValid:function(){return this.resetHasMinLength&&this.resetHasUppercase&&this.resetHasLowercase&&this.resetHasNumber}},created:function(){var e=this;this.loadSecurityConfig(),this.handleOAuthCallback(),this.$nextTick(function(){e.extractReferralCode()})},watch:{"$route.query":function(){this.extractReferralCode()}},beforeDestroy:function(){this.codeLoginCountdownTimer&&clearInterval(this.codeLoginCountdownTimer),this.registerCountdownTimer&&clearInterval(this.registerCountdownTimer),this.resetCountdownTimer&&clearInterval(this.resetCountdownTimer)},methods:(0,l.A)((0,l.A)({},(0,u.i0)(["Login","Logout"])),{},{loadSecurityConfig:function(){var e=this;return(0,n.A)((0,a.A)().m(function r(){var t;return(0,a.A)().w(function(r){while(1)switch(r.p=r.n){case 0:return r.p=0,r.n=1,(0,d.getSecurityConfig)();case 1:t=r.v,1===t.code&&t.data&&(e.securityConfig=(0,l.A)((0,l.A)({},e.securityConfig),t.data)),r.n=3;break;case 2:r.p=2,r.v;case 3:return r.a(2)}},r,null,[[0,2]])}))()},extractReferralCode:function(){var e=new URLSearchParams(window.location.search),r=new URLSearchParams;if(window.location.hash){var t=window.location.hash.split("?");t.length>1&&(r=new URLSearchParams(t[1]))}var s=this.$route.query.ref||this.$route.query.referral_code;this.referralCode=s||e.get("ref")||e.get("referral_code")||r.get("ref")||r.get("referral_code")||"",this.referralCode&&this.securityConfig.registration_enabled&&(this.activeTab="register")},handleOAuthCallback:function(){var e=this,r=new URLSearchParams(window.location.search),t=new URLSearchParams(window.location.hash.split("?")[1]||""),s=r.get("oauth_token")||t.get("oauth_token"),i=r.get("oauth_error")||t.get("oauth_error");if(i)return this.oauthError=this.$t("user.oauth.error.".concat(i))||"OAuth error: ".concat(i),void window.history.replaceState({},document.title,window.location.pathname+window.location.hash.split("?")[0]);s&&(this.oauthProcessing=!0,T().set(L.Xh,s,(new Date).getTime()+6048e5),window.history.replaceState({},document.title,window.location.pathname+window.location.hash.split("?")[0]),this.$store.dispatch("GetInfo").then(function(){e.$router.push({path:"/"}),e.$notification.success({message:"Welcome",description:"".concat((0,c.Z$)(),", welcome back.")})}).catch(function(r){e.oauthProcessing=!1,e.oauthError="Failed to get user info",T().remove(L.Xh)}))},handleLogin:function(e){var r=this;e.preventDefault(),this.legalError=!1,this.legalAgreed?this.loginForm.validateFields(["username","password"],function(e,t){e||(r.loginLoading=!0,r.loginError="",r.Login((0,l.A)((0,l.A)({},t),{},{turnstile_token:r.loginTurnstileToken})).then(function(){r.$router.push({path:"/"}),r.$notification.success({message:"Welcome",description:"".concat((0,c.Z$)(),", welcome back.")})}).catch(function(e){var t=e.response||{},s=t.data||{};r.loginError=s.msg||e.message||"Login failed",r.$refs.loginTurnstile&&r.$refs.loginTurnstile.reset(),r.loginTurnstileToken=null}).finally(function(){r.loginLoading=!1}))}):this.legalError=!0},handleCodeLoginSendCode:function(){var e=this;return(0,n.A)((0,a.A)().m(function r(){return(0,a.A)().w(function(r){while(1)switch(r.n){case 0:e.codeLoginForm.validateFields(["email"],function(){var r=(0,n.A)((0,a.A)().m(function r(t,s){var i,o,n;return(0,a.A)().w(function(r){while(1)switch(r.p=r.n){case 0:if(!t){r.n=1;break}return r.a(2);case 1:return e.codeLoginSendingCode=!0,e.codeLoginError="",r.p=2,r.n=3,(0,d.sendVerificationCode)({email:s.email,type:"login",turnstile_token:e.codeLoginTurnstileToken});case 3:i=r.v,1===i.code?(e.$message.success(e.$t("user.login.codeSent")||"Verification code sent"),e.startCodeLoginCountdown()):e.codeLoginError=i.msg||"Failed to send code",r.n=5;break;case 4:r.p=4,n=r.v,e.codeLoginError=(null===(o=n.response)||void 0===o||null===(o=o.data)||void 0===o?void 0:o.msg)||"Failed to send code";case 5:return r.p=5,e.codeLoginSendingCode=!1,r.f(5);case 6:return r.a(2)}},r,null,[[2,4,5,6]])}));return function(e,t){return r.apply(this,arguments)}}());case 1:return r.a(2)}},r)}))()},startCodeLoginCountdown:function(){var e=this;this.codeLoginCountdown=60,this.codeLoginCountdownTimer=setInterval(function(){e.codeLoginCountdown--,e.codeLoginCountdown<=0&&(clearInterval(e.codeLoginCountdownTimer),e.codeLoginCountdownTimer=null)},1e3)},handleCodeLogin:function(e){var r=this;e.preventDefault(),this.legalError=!1,this.legalAgreed?this.codeLoginForm.validateFields(function(){var e=(0,n.A)((0,a.A)().m(function e(t,s){var i,n,u,g,m,h,p,f,w,v;return(0,a.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!t){e.n=1;break}return e.a(2);case 1:return r.codeLoginLoading=!0,r.codeLoginError="",e.p=2,e.n=3,(0,d.loginWithCode)({email:s.email,code:s.code,turnstile_token:r.codeLoginTurnstileToken,referral_code:r.referralCode});case 3:if(n=e.v,1!==n.code||null===(i=n.data)||void 0===i||!i.token){e.n=6;break}return u=(new Date).getTime()+6048e5,T().set(L.Xh,n.data.token,u),r.$store.commit("SET_TOKEN",n.data.token),n.data.userinfo&&(g=(0,l.A)({},n.data.userinfo),"undefined"===typeof g.is_demo&&(g.is_demo=!1),T().set(L.nc,g,u),r.$store.commit("SET_INFO",g),g.nickname?r.$store.commit("SET_NAME",{name:g.nickname,welcome:(0,c.Z$)()}):g.username&&r.$store.commit("SET_NAME",{name:g.username,welcome:(0,c.Z$)()}),g.avatar&&r.$store.commit("SET_AVATAR",g.avatar),m=[],m=g.role?Array.isArray(g.role)?g.role:"object"===(0,o.A)(g.role)?[g.role]:[{id:g.role,permissionList:[]}]:[{id:"default",permissionList:[]}],r.$store.commit("SET_ROLES",m),T().set(L.iK,m,u)),e.n=4,r.$nextTick();case 4:return T().get(L.Xh),h=r.$store.getters.roles,0===h.length&&(p=[{id:"default",permissionList:[]}],r.$store.commit("SET_ROLES",p),T().set(L.iK,p,u)),e.n=5,new Promise(function(e){return setTimeout(e,200)});case 5:r.$store.dispatch("ResetRoutes"),f=n.data.is_new_user,r.$router.push({path:"/"}).then(function(){r.$notification.success({message:f?r.$t("user.login.welcomeNew")||"Welcome!":"Welcome",description:f?r.$t("user.login.accountCreated")||"Your account has been created.":"".concat((0,c.Z$)(),", welcome back.")})}).catch(function(e){r.$notification.success({message:f?r.$t("user.login.welcomeNew")||"Welcome!":"Welcome",description:f?r.$t("user.login.accountCreated")||"Your account has been created.":"".concat((0,c.Z$)(),", welcome back.")})}),e.n=7;break;case 6:r.codeLoginError=n.msg||"Login failed",r.$refs.codeLoginTurnstile&&r.$refs.codeLoginTurnstile.reset(),r.codeLoginTurnstileToken=null;case 7:e.n=9;break;case 8:e.p=8,v=e.v,r.codeLoginError=(null===(w=v.response)||void 0===w||null===(w=w.data)||void 0===w?void 0:w.msg)||"Login failed",r.$refs.codeLoginTurnstile&&r.$refs.codeLoginTurnstile.reset(),r.codeLoginTurnstileToken=null;case 9:return e.p=9,r.codeLoginLoading=!1,e.f(9);case 10:return e.a(2)}},e,null,[[2,8,9,10]])}));return function(r,t){return e.apply(this,arguments)}}()):this.legalError=!0},checkRegPassword:function(e){var r=e.target.value||"";this.regHasMinLength=r.length>=8,this.regHasUppercase=/[A-Z]/.test(r),this.regHasLowercase=/[a-z]/.test(r),this.regHasNumber=/[0-9]/.test(r)},validateRegPassword:function(e,r,t){r?r.length<8?t(new Error(this.$t("user.register.pwdMinLength")||"At least 8 characters")):/[A-Z]/.test(r)?/[a-z]/.test(r)?/[0-9]/.test(r)?t():t(new Error(this.$t("user.register.pwdNumber")||"At least one number")):t(new Error(this.$t("user.register.pwdLowercase")||"At least one lowercase letter")):t(new Error(this.$t("user.register.pwdUppercase")||"At least one uppercase letter")):t()},validateRegConfirmPassword:function(e,r,t){var s=this.registerForm.getFieldValue("password");r&&r!==s?t(new Error(this.$t("user.register.passwordMismatch")||"Passwords do not match")):t()},handleRegisterSendCode:function(){var e=this;return(0,n.A)((0,a.A)().m(function r(){return(0,a.A)().w(function(r){while(1)switch(r.n){case 0:e.registerForm.validateFields(["email"],function(){var r=(0,n.A)((0,a.A)().m(function r(t,s){var i,o,n;return(0,a.A)().w(function(r){while(1)switch(r.p=r.n){case 0:if(!t){r.n=1;break}return r.a(2);case 1:return e.registerSendingCode=!0,e.registerError="",r.p=2,r.n=3,(0,d.sendVerificationCode)({email:s.email,type:"register",turnstile_token:e.registerTurnstileToken});case 3:i=r.v,1===i.code?(e.$message.success(e.$t("user.register.codeSent")||"Verification code sent"),e.startRegisterCountdown()):e.registerError=i.msg||"Failed to send code",r.n=5;break;case 4:r.p=4,n=r.v,e.registerError=(null===(o=n.response)||void 0===o||null===(o=o.data)||void 0===o?void 0:o.msg)||"Failed to send code";case 5:return r.p=5,e.registerSendingCode=!1,r.f(5);case 6:return r.a(2)}},r,null,[[2,4,5,6]])}));return function(e,t){return r.apply(this,arguments)}}());case 1:return r.a(2)}},r)}))()},startRegisterCountdown:function(){var e=this;this.registerCountdown=60,this.registerCountdownTimer=setInterval(function(){e.registerCountdown--,e.registerCountdown<=0&&(clearInterval(e.registerCountdownTimer),e.registerCountdownTimer=null)},1e3)},handleRegister:function(e){var r=this;e.preventDefault(),this.legalError=!1,this.legalAgreed?this.registerForm.validateFields(function(){var e=(0,n.A)((0,a.A)().m(function e(t,s){var i,n,u,g,m,h,p,f,w;return(0,a.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!t){e.n=1;break}return e.a(2);case 1:return r.registerLoading=!0,r.registerError="",e.p=2,e.n=3,(0,d.register)({email:s.email,code:s.code,username:s.username,password:s.password,turnstile_token:r.registerTurnstileToken,referral_code:r.referralCode});case 3:if(i=e.v,1!==i.code){e.n=8;break}if(r.$message.success(r.$t("user.register.success")||"Registration successful"),null===(n=i.data)||void 0===n||!n.token){e.n=6;break}return u=(new Date).getTime()+6048e5,T().set(L.Xh,i.data.token,u),r.$store.commit("SET_TOKEN",i.data.token),i.data.userinfo&&(g=(0,l.A)({},i.data.userinfo),"undefined"===typeof g.is_demo&&(g.is_demo=!1),T().set(L.nc,g,u),r.$store.commit("SET_INFO",g),g.nickname?r.$store.commit("SET_NAME",{name:g.nickname,welcome:(0,c.Z$)()}):g.username&&r.$store.commit("SET_NAME",{name:g.username,welcome:(0,c.Z$)()}),g.avatar&&r.$store.commit("SET_AVATAR",g.avatar),m=[],m=g.role?Array.isArray(g.role)?g.role:"object"===(0,o.A)(g.role)?[g.role]:[{id:g.role,permissionList:[]}]:[{id:"default",permissionList:[]}],r.$store.commit("SET_ROLES",m),T().set(L.iK,m,u)),e.n=4,r.$nextTick();case 4:return T().get(L.Xh),h=r.$store.getters.roles,0===h.length&&(p=[{id:"default",permissionList:[]}],r.$store.commit("SET_ROLES",p),T().set(L.iK,p,u)),e.n=5,new Promise(function(e){return setTimeout(e,200)});case 5:r.$store.dispatch("ResetRoutes"),r.$router.push({path:"/"}).then(function(){r.$notification.success({message:"Welcome",description:"".concat((0,c.Z$)(),", welcome to QuantDinger!")})}).catch(function(e){r.$notification.success({message:"Welcome",description:"".concat((0,c.Z$)(),", welcome to QuantDinger!")})}),e.n=7;break;case 6:r.activeTab="login",r.$message.info(r.$t("user.register.pleaseLogin")||"Please login with your new account");case 7:e.n=9;break;case 8:r.registerError=i.msg||"Registration failed",r.$refs.registerTurnstile&&r.$refs.registerTurnstile.reset(),r.registerTurnstileToken=null;case 9:e.n=11;break;case 10:e.p=10,w=e.v,r.registerError=(null===(f=w.response)||void 0===f||null===(f=f.data)||void 0===f?void 0:f.msg)||"Registration failed",r.$refs.registerTurnstile&&r.$refs.registerTurnstile.reset(),r.registerTurnstileToken=null;case 11:return e.p=11,r.registerLoading=!1,e.f(11);case 12:return e.a(2)}},e,null,[[2,10,11,12]])}));return function(r,t){return e.apply(this,arguments)}}()):this.legalError=!0},resetResetModal:function(){this.resetStep=1,this.resetError="",this.resetEmail="",this.resetCode="",this.resetCountdown=0,this.resetCountdownTimer&&(clearInterval(this.resetCountdownTimer),this.resetCountdownTimer=null)},handleResetSendCode:function(){var e=this;return(0,n.A)((0,a.A)().m(function r(){return(0,a.A)().w(function(r){while(1)switch(r.n){case 0:e.resetForm.validateFields(["email"],function(){var r=(0,n.A)((0,a.A)().m(function r(t,s){var i,o,n;return(0,a.A)().w(function(r){while(1)switch(r.p=r.n){case 0:if(!t){r.n=1;break}return r.a(2);case 1:return e.resetSendingCode=!0,e.resetError="",r.p=2,r.n=3,(0,d.sendVerificationCode)({email:s.email,type:"reset_password",turnstile_token:e.resetTurnstileToken});case 3:i=r.v,1===i.code?(e.$message.success(e.$t("user.resetPassword.codeSent")||"Verification code sent"),e.startResetCountdown()):e.resetError=i.msg||"Failed to send code",r.n=5;break;case 4:r.p=4,n=r.v,e.resetError=(null===(o=n.response)||void 0===o||null===(o=o.data)||void 0===o?void 0:o.msg)||"Failed to send code";case 5:return r.p=5,e.resetSendingCode=!1,r.f(5);case 6:return r.a(2)}},r,null,[[2,4,5,6]])}));return function(e,t){return r.apply(this,arguments)}}());case 1:return r.a(2)}},r)}))()},startResetCountdown:function(){var e=this;this.resetCountdown=60,this.resetCountdownTimer=setInterval(function(){e.resetCountdown--,e.resetCountdown<=0&&(clearInterval(e.resetCountdownTimer),e.resetCountdownTimer=null)},1e3)},handleResetVerify:function(e){var r=this;e.preventDefault(),this.resetError="",this.resetForm.validateFields(function(e,t){e||(r.resetEmail=t.email,r.resetCode=t.code,r.resetStep=2)})},checkResetPassword:function(e){var r=e.target.value||"";this.resetHasMinLength=r.length>=8,this.resetHasUppercase=/[A-Z]/.test(r),this.resetHasLowercase=/[a-z]/.test(r),this.resetHasNumber=/[0-9]/.test(r)},validateResetPassword:function(e,r,t){r?r.length<8?t(new Error(this.$t("user.register.pwdMinLength")||"At least 8 characters")):/[A-Z]/.test(r)?/[a-z]/.test(r)?/[0-9]/.test(r)?t():t(new Error(this.$t("user.register.pwdNumber")||"At least one number")):t(new Error(this.$t("user.register.pwdLowercase")||"At least one lowercase letter")):t(new Error(this.$t("user.register.pwdUppercase")||"At least one uppercase letter")):t()},validateResetConfirmPassword:function(e,r,t){var s=this.resetPwdForm.getFieldValue("new_password");r&&r!==s?t(new Error(this.$t("user.register.passwordMismatch")||"Passwords do not match")):t()},handleResetPassword:function(e){var r=this;return(0,n.A)((0,a.A)().m(function t(){return(0,a.A)().w(function(t){while(1)switch(t.n){case 0:e.preventDefault(),r.resetError="",r.resetPwdForm.validateFields(function(){var e=(0,n.A)((0,a.A)().m(function e(t,s){var i,o,n,l,u;return(0,a.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!t){e.n=1;break}return e.a(2);case 1:return r.resetLoading=!0,e.p=2,e.n=3,(0,d.resetPassword)({email:r.resetEmail,code:r.resetCode,new_password:s.new_password,turnstile_token:r.resetTurnstileToken});case 3:i=e.v,1===i.code?r.resetStep=3:(r.resetError=i.msg||"Failed to reset password",(null!==(o=i.msg)&&void 0!==o&&o.includes("code")||null!==(n=i.msg)&&void 0!==n&&n.includes("expired"))&&(r.resetStep=1)),e.n=5;break;case 4:e.p=4,u=e.v,r.resetError=(null===(l=u.response)||void 0===l||null===(l=l.data)||void 0===l?void 0:l.msg)||"Failed to reset password";case 5:return e.p=5,r.resetLoading=!1,e.f(5);case 6:return e.a(2)}},e,null,[[2,4,5,6]])}));return function(r,t){return e.apply(this,arguments)}}());case 1:return t.a(2)}},t)}))()},handleGoogleLogin:function(){window.location.href=(0,d.getGoogleOAuthUrl)()},handleGitHubLogin:function(){window.location.href=(0,d.getGitHubOAuthUrl)()}})},P=k,A=(0,C.A)(P,s,i,!1,null,"de9678f6",null),E=A.exports},95824:function(e,r,t){t.r(r),t.d(r,{changePassword:function(){return m},getGitHubOAuthUrl:function(){return p},getGoogleOAuthUrl:function(){return h},getSecurityConfig:function(){return o},getUserInfo:function(){return l},login:function(){return a},loginWithCode:function(){return c},logout:function(){return n},register:function(){return d},resetPassword:function(){return g},sendVerificationCode:function(){return u}});t(34782),t(27495),t(99449),t(25440),t(11392),t(42762);var s=t(75769);function i(e){var r="/api".trim(),t=e.startsWith("/")?e:"/".concat(e);if(!r)return t;var s=r.replace(/\/+$/,"");return s.endsWith("/api")&&t.startsWith("/api/")?s+t.slice(4):s+t}function o(){return(0,s.Ay)({url:"/api/auth/security-config",method:"get"})}function a(e){return(0,s.Ay)({url:"/api/auth/login",method:"post",data:e})}function n(){return(0,s.Ay)({url:"/api/auth/logout",method:"post"})}function l(){return(0,s.Ay)({url:"/api/auth/info",method:"get"})}function u(e){return(0,s.Ay)({url:"/api/auth/send-code",method:"post",data:e})}function c(e){return(0,s.Ay)({url:"/api/auth/login-code",method:"post",data:e})}function d(e){return(0,s.Ay)({url:"/api/auth/register",method:"post",data:e})}function g(e){return(0,s.Ay)({url:"/api/auth/reset-password",method:"post",data:e})}function m(e){return(0,s.Ay)({url:"/api/auth/change-password",method:"post",data:e})}function h(){return i("/api/auth/oauth/google")}function p(){return i("/api/auth/oauth/github")}}}]); \ No newline at end of file diff --git a/frontend/dist/js/user-legacy.df61c78a.js b/frontend/dist/js/user-legacy.df61c78a.js deleted file mode 100644 index da503e4..0000000 --- a/frontend/dist/js/user-legacy.df61c78a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[24,806],{19908:function(e,r,t){t.r(r),t.d(r,{default:function(){return E}});var s=function(){var e=this,r=e._self._c;return r("div",{staticClass:"main"},[e._m(0),r("div",{staticClass:"auth-card"},[e.oauthProcessing?r("div",{staticClass:"oauth-processing"},[r("a-spin",{attrs:{size:"large"}}),r("p",[e._v(e._s(e.$t("user.oauth.processing")||"Processing login..."))])],1):e._e(),r("div",{directives:[{name:"show",rawName:"v-show",value:!e.oauthProcessing,expression:"!oauthProcessing"}]},[r("a-tabs",{attrs:{animated:!1},model:{value:e.activeTab,callback:function(r){e.activeTab=r},expression:"activeTab"}},[r("a-tab-pane",{key:"login",attrs:{tab:e.$t("user.login.tab")||"Login"}},[r("div",{staticClass:"login-method-switch"},[r("a",{class:{active:"password"===e.loginMethod},on:{click:function(r){e.loginMethod="password"}}},[e._v(e._s(e.$t("user.login.methodPassword")||"Password"))]),r("a-divider",{attrs:{type:"vertical"}}),r("a",{class:{active:"code"===e.loginMethod},on:{click:function(r){e.loginMethod="code"}}},[e._v(e._s(e.$t("user.login.methodCode")||"Email Code"))])],1),r("a-form",{directives:[{name:"show",rawName:"v-show",value:"password"===e.loginMethod,expression:"loginMethod === 'password'"}],ref:"formLogin",staticClass:"auth-form",attrs:{id:"formLogin",form:e.loginForm},on:{submit:e.handleLogin}},[e.loginError?r("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{type:"error",showIcon:"",message:e.loginError}}):e._e(),e.oauthError?r("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{type:"error",showIcon:"",message:e.oauthError}}):e._e(),r("a-form-item",[r("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["username",{rules:[{required:!0,message:e.$t("user.login.usernameRequired")||"Please enter username"}],validateTrigger:"blur"}],expression:"[\n 'username',\n {rules: [{ required: true, message: $t('user.login.usernameRequired') || 'Please enter username' }], validateTrigger: 'blur'}\n ]"}],attrs:{size:"large",type:"text",placeholder:e.$t("user.login.username")||"Username"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"user"},slot:"prefix"})],1)],1),r("a-form-item",[r("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["password",{rules:[{required:!0,message:e.$t("user.login.passwordRequired")||"Please enter password"}],validateTrigger:"blur"}],expression:"[\n 'password',\n {rules: [{ required: true, message: $t('user.login.passwordRequired') || 'Please enter password' }], validateTrigger: 'blur'}\n ]"}],attrs:{size:"large",placeholder:e.$t("user.login.password")||"Password"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),r("Turnstile",{ref:"loginTurnstile",attrs:{siteKey:e.securityConfig.turnstile_site_key,enabled:e.securityConfig.turnstile_enabled},on:{success:function(r){return e.loginTurnstileToken=r},error:function(){return e.loginTurnstileToken=null}}}),r("a-form-item",{staticStyle:{"margin-top":"24px"}},[r("a-button",{staticClass:"submit-button",attrs:{size:"large",type:"primary",htmlType:"submit",loading:e.loginLoading,disabled:e.loginLoading||e.securityConfig.turnstile_enabled&&!e.loginTurnstileToken,block:""}},[e._v(e._s(e.$t("user.login.submit")||"Login"))])],1),r("div",{staticClass:"auth-links"},[r("a",{on:{click:function(r){e.showResetModal=!0}}},[e._v(e._s(e.$t("user.login.forgotPassword")||"Forgot Password?"))])])],1),r("a-form",{directives:[{name:"show",rawName:"v-show",value:"code"===e.loginMethod,expression:"loginMethod === 'code'"}],ref:"formCodeLogin",staticClass:"auth-form",attrs:{id:"formCodeLogin",form:e.codeLoginForm},on:{submit:e.handleCodeLogin}},[e.codeLoginError?r("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{type:"error",showIcon:"",message:e.codeLoginError}}):e._e(),e.oauthError?r("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{type:"error",showIcon:"",message:e.oauthError}}):e._e(),r("a-form-item",[r("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["email",{rules:[{required:!0,message:e.$t("user.login.emailRequired")||"Please enter email"},{type:"email",message:e.$t("user.login.emailInvalid")||"Invalid email format"}],validateTrigger:"blur"}],expression:"[\n 'email',\n {\n rules: [\n { required: true, message: $t('user.login.emailRequired') || 'Please enter email' },\n { type: 'email', message: $t('user.login.emailInvalid') || 'Invalid email format' }\n ],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",type:"email",placeholder:e.$t("user.login.email")||"Email"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"mail"},slot:"prefix"})],1)],1),r("a-form-item",[r("a-row",{attrs:{gutter:12}},[r("a-col",{attrs:{span:16}},[r("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["code",{rules:[{required:!0,message:e.$t("user.login.codeRequired")||"Please enter verification code"}],validateTrigger:"blur"}],expression:"[\n 'code',\n {\n rules: [{ required: true, message: $t('user.login.codeRequired') || 'Please enter verification code' }],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",placeholder:e.$t("user.login.verificationCode")||"Verification Code"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"safety-certificate"},slot:"prefix"})],1)],1),r("a-col",{attrs:{span:8}},[r("a-button",{attrs:{size:"large",block:"",loading:e.codeLoginSendingCode,disabled:e.codeLoginSendingCode||e.codeLoginCountdown>0},on:{click:e.handleCodeLoginSendCode}},[e._v(" "+e._s(e.codeLoginCountdown>0?"".concat(e.codeLoginCountdown,"s"):e.$t("user.login.sendCode")||"Send")+" ")])],1)],1)],1),r("Turnstile",{ref:"codeLoginTurnstile",attrs:{siteKey:e.securityConfig.turnstile_site_key,enabled:e.securityConfig.turnstile_enabled},on:{success:function(r){return e.codeLoginTurnstileToken=r},error:function(){return e.codeLoginTurnstileToken=null}}}),r("a-form-item",{staticStyle:{"margin-top":"24px"}},[r("a-button",{staticClass:"submit-button",attrs:{size:"large",type:"primary",htmlType:"submit",loading:e.codeLoginLoading,disabled:e.codeLoginLoading||e.securityConfig.turnstile_enabled&&!e.codeLoginTurnstileToken,block:""}},[e._v(e._s(e.$t("user.login.submit")||"Login"))])],1),r("div",{staticClass:"code-login-hint"},[r("a-icon",{attrs:{type:"info-circle"}}),r("span",[e._v(e._s(e.$t("user.login.codeLoginHint")||"New users will be automatically registered"))])],1)],1),e.hasOAuth?r("div",{staticClass:"oauth-section"},[r("a-divider",[e._v(e._s(e.$t("user.login.orLoginWith")||"Or login with"))]),r("div",{staticClass:"oauth-buttons"},[e.securityConfig.oauth_google_enabled?r("a-button",{staticClass:"oauth-btn google-btn",on:{click:e.handleGoogleLogin}},[r("svg",{staticClass:"oauth-icon",attrs:{viewBox:"0 0 24 24",width:"18",height:"18"}},[r("path",{attrs:{fill:"#4285F4",d:"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z"}}),r("path",{attrs:{fill:"#34A853",d:"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z"}}),r("path",{attrs:{fill:"#FBBC05",d:"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z"}}),r("path",{attrs:{fill:"#EA4335",d:"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z"}})]),e._v(" Google ")]):e._e(),e.securityConfig.oauth_github_enabled?r("a-button",{staticClass:"oauth-btn github-btn",on:{click:e.handleGitHubLogin}},[r("a-icon",{attrs:{type:"github"}}),e._v(" GitHub ")],1):e._e()],1)],1):e._e()],1),e.securityConfig.registration_enabled?r("a-tab-pane",{key:"register",attrs:{tab:e.$t("user.register.tab")||"Register"}},[r("a-form",{ref:"formRegister",staticClass:"auth-form",attrs:{id:"formRegister",form:e.registerForm},on:{submit:e.handleRegister}},[e.registerError?r("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{type:"error",showIcon:"",message:e.registerError}}):e._e(),r("a-form-item",[r("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["email",{rules:[{required:!0,message:e.$t("user.register.emailRequired")||"Please enter email"},{type:"email",message:e.$t("user.register.emailInvalid")||"Invalid email format"}],validateTrigger:"blur"}],expression:"[\n 'email',\n {\n rules: [\n { required: true, message: $t('user.register.emailRequired') || 'Please enter email' },\n { type: 'email', message: $t('user.register.emailInvalid') || 'Invalid email format' }\n ],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",type:"email",placeholder:e.$t("user.register.email")||"Email"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"mail"},slot:"prefix"})],1)],1),r("a-form-item",[r("a-row",{attrs:{gutter:12}},[r("a-col",{attrs:{span:16}},[r("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["code",{rules:[{required:!0,message:e.$t("user.register.codeRequired")||"Please enter verification code"}],validateTrigger:"blur"}],expression:"[\n 'code',\n {\n rules: [{ required: true, message: $t('user.register.codeRequired') || 'Please enter verification code' }],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",placeholder:e.$t("user.register.verificationCode")||"Verification Code"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"safety-certificate"},slot:"prefix"})],1)],1),r("a-col",{attrs:{span:8}},[r("a-button",{attrs:{size:"large",block:"",loading:e.registerSendingCode,disabled:e.registerSendingCode||e.registerCountdown>0},on:{click:e.handleRegisterSendCode}},[e._v(" "+e._s(e.registerCountdown>0?"".concat(e.registerCountdown,"s"):e.$t("user.register.sendCode")||"Send")+" ")])],1)],1)],1),r("a-form-item",[r("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["username",{rules:[{required:!0,message:e.$t("user.register.usernameRequired")||"Please enter username"},{min:3,max:30,message:e.$t("user.register.usernameLength")||"Username must be 3-30 characters"},{pattern:/^[a-zA-Z][a-zA-Z0-9_]*$/,message:e.$t("user.register.usernamePattern")||"Start with letter, letters/numbers/underscore only"}],validateTrigger:"blur"}],expression:"[\n 'username',\n {\n rules: [\n { required: true, message: $t('user.register.usernameRequired') || 'Please enter username' },\n { min: 3, max: 30, message: $t('user.register.usernameLength') || 'Username must be 3-30 characters' },\n { pattern: /^[a-zA-Z][a-zA-Z0-9_]*$/, message: $t('user.register.usernamePattern') || 'Start with letter, letters/numbers/underscore only' }\n ],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",placeholder:e.$t("user.register.username")||"Username"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"user"},slot:"prefix"})],1)],1),r("a-form-item",[r("a-popover",{attrs:{placement:"rightTop",trigger:["focus"],visible:e.regPwdFocused&&!e.regPwdValid}},[r("template",{slot:"content"},[r("div",{staticClass:"password-requirements"},[r("div",{class:{valid:e.regHasMinLength}},[r("a-icon",{attrs:{type:e.regHasMinLength?"check-circle":"close-circle"}}),e._v(" "+e._s(e.$t("user.register.pwdMinLength")||"At least 8 characters")+" ")],1),r("div",{class:{valid:e.regHasUppercase}},[r("a-icon",{attrs:{type:e.regHasUppercase?"check-circle":"close-circle"}}),e._v(" "+e._s(e.$t("user.register.pwdUppercase")||"At least one uppercase letter")+" ")],1),r("div",{class:{valid:e.regHasLowercase}},[r("a-icon",{attrs:{type:e.regHasLowercase?"check-circle":"close-circle"}}),e._v(" "+e._s(e.$t("user.register.pwdLowercase")||"At least one lowercase letter")+" ")],1),r("div",{class:{valid:e.regHasNumber}},[r("a-icon",{attrs:{type:e.regHasNumber?"check-circle":"close-circle"}}),e._v(" "+e._s(e.$t("user.register.pwdNumber")||"At least one number")+" ")],1)])]),r("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["password",{rules:[{required:!0,message:e.$t("user.register.passwordRequired")||"Please enter password"},{validator:e.validateRegPassword}],validateTrigger:"blur"}],expression:"[\n 'password',\n {\n rules: [\n { required: true, message: $t('user.register.passwordRequired') || 'Please enter password' },\n { validator: validateRegPassword }\n ],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",placeholder:e.$t("user.register.password")||"Password"},on:{focus:function(r){e.regPwdFocused=!0},blur:function(r){e.regPwdFocused=!1},change:e.checkRegPassword}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],2)],1),r("a-form-item",[r("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["confirmPassword",{rules:[{required:!0,message:e.$t("user.register.confirmPasswordRequired")||"Please confirm password"},{validator:e.validateRegConfirmPassword}],validateTrigger:"blur"}],expression:"[\n 'confirmPassword',\n {\n rules: [\n { required: true, message: $t('user.register.confirmPasswordRequired') || 'Please confirm password' },\n { validator: validateRegConfirmPassword }\n ],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",placeholder:e.$t("user.register.confirmPassword")||"Confirm Password"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),r("Turnstile",{ref:"registerTurnstile",attrs:{siteKey:e.securityConfig.turnstile_site_key,enabled:e.securityConfig.turnstile_enabled},on:{success:function(r){return e.registerTurnstileToken=r},error:function(){return e.registerTurnstileToken=null}}}),r("a-form-item",{staticStyle:{"margin-top":"24px"}},[r("a-button",{staticClass:"submit-button",attrs:{size:"large",type:"primary",htmlType:"submit",loading:e.registerLoading,disabled:e.registerLoading||e.securityConfig.turnstile_enabled&&!e.registerTurnstileToken,block:""}},[e._v(e._s(e.$t("user.register.submit")||"Create Account"))])],1)],1)],1):e._e()],1),r("div",{staticClass:"legal-wrap"},[r("div",{staticClass:"legal-header"},[r("div",{staticClass:"legal-title"},[e._v(e._s(e.$t("user.login.legal.title")))]),r("a",{staticClass:"legal-toggle",on:{click:function(r){e.showLegal=!e.showLegal}}},[e._v(" "+e._s(e.showLegal?e.$t("user.login.legal.collapse"):e.$t("user.login.legal.view"))+" ")])]),r("div",{directives:[{name:"show",rawName:"v-show",value:e.showLegal,expression:"showLegal"}],staticClass:"legal-content"},[e._v(" "+e._s(e.$t("user.login.legal.content"))+" ")]),r("div",{staticClass:"legal-agree"},[r("a-checkbox",{model:{value:e.legalAgreed,callback:function(r){e.legalAgreed=r},expression:"legalAgreed"}},[e._v(" "+e._s(e.$t("user.login.legal.agree"))+" ")]),e.legalError?r("div",{staticClass:"legal-error"},[e._v(e._s(e.$t("user.login.legal.required")))]):e._e()],1)])],1)]),r("a-modal",{attrs:{title:e.$t("user.resetPassword.title")||"Reset Password",footer:null,width:420,destroyOnClose:!0},on:{cancel:e.resetResetModal},model:{value:e.showResetModal,callback:function(r){e.showResetModal=r},expression:"showResetModal"}},[1===e.resetStep?r("a-form",{staticClass:"auth-form",attrs:{form:e.resetForm},on:{submit:e.handleResetVerify}},[e.resetError?r("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{type:"error",showIcon:"",message:e.resetError}}):e._e(),r("a-form-item",[r("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["email",{rules:[{required:!0,message:e.$t("user.resetPassword.emailRequired")||"Please enter email"},{type:"email",message:e.$t("user.resetPassword.emailInvalid")||"Invalid email format"}],validateTrigger:"blur"}],expression:"[\n 'email',\n {\n rules: [\n { required: true, message: $t('user.resetPassword.emailRequired') || 'Please enter email' },\n { type: 'email', message: $t('user.resetPassword.emailInvalid') || 'Invalid email format' }\n ],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",type:"email",placeholder:e.$t("user.resetPassword.email")||"Email"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"mail"},slot:"prefix"})],1)],1),r("a-form-item",[r("a-row",{attrs:{gutter:12}},[r("a-col",{attrs:{span:16}},[r("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["code",{rules:[{required:!0,message:e.$t("user.resetPassword.codeRequired")||"Please enter verification code"}],validateTrigger:"blur"}],expression:"[\n 'code',\n {\n rules: [{ required: true, message: $t('user.resetPassword.codeRequired') || 'Please enter verification code' }],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",placeholder:e.$t("user.resetPassword.verificationCode")||"Verification Code"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"safety-certificate"},slot:"prefix"})],1)],1),r("a-col",{attrs:{span:8}},[r("a-button",{attrs:{size:"large",block:"",loading:e.resetSendingCode,disabled:e.resetSendingCode||e.resetCountdown>0},on:{click:e.handleResetSendCode}},[e._v(" "+e._s(e.resetCountdown>0?"".concat(e.resetCountdown,"s"):e.$t("user.resetPassword.sendCode")||"Send")+" ")])],1)],1)],1),r("Turnstile",{ref:"resetTurnstile",attrs:{siteKey:e.securityConfig.turnstile_site_key,enabled:e.securityConfig.turnstile_enabled},on:{success:function(r){return e.resetTurnstileToken=r},error:function(){return e.resetTurnstileToken=null}}}),r("a-form-item",{staticStyle:{"margin-top":"24px"}},[r("a-button",{staticClass:"submit-button",attrs:{size:"large",type:"primary",htmlType:"submit",disabled:e.securityConfig.turnstile_enabled&&!e.resetTurnstileToken,block:""}},[e._v(e._s(e.$t("user.resetPassword.next")||"Next"))])],1)],1):e._e(),2===e.resetStep?r("a-form",{staticClass:"auth-form",attrs:{form:e.resetPwdForm},on:{submit:e.handleResetPassword}},[e.resetError?r("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{type:"error",showIcon:"",message:e.resetError}}):e._e(),r("div",{staticClass:"email-display"},[r("span",[e._v(e._s(e.$t("user.resetPassword.resettingFor")||"Resetting for")+":")]),r("strong",[e._v(e._s(e.resetEmail))])]),r("a-form-item",[r("a-popover",{attrs:{placement:"rightTop",trigger:["focus"],visible:e.resetPwdFocused&&!e.resetPwdValid}},[r("template",{slot:"content"},[r("div",{staticClass:"password-requirements"},[r("div",{class:{valid:e.resetHasMinLength}},[r("a-icon",{attrs:{type:e.resetHasMinLength?"check-circle":"close-circle"}}),e._v(" "+e._s(e.$t("user.register.pwdMinLength")||"At least 8 characters")+" ")],1),r("div",{class:{valid:e.resetHasUppercase}},[r("a-icon",{attrs:{type:e.resetHasUppercase?"check-circle":"close-circle"}}),e._v(" "+e._s(e.$t("user.register.pwdUppercase")||"At least one uppercase letter")+" ")],1),r("div",{class:{valid:e.resetHasLowercase}},[r("a-icon",{attrs:{type:e.resetHasLowercase?"check-circle":"close-circle"}}),e._v(" "+e._s(e.$t("user.register.pwdLowercase")||"At least one lowercase letter")+" ")],1),r("div",{class:{valid:e.resetHasNumber}},[r("a-icon",{attrs:{type:e.resetHasNumber?"check-circle":"close-circle"}}),e._v(" "+e._s(e.$t("user.register.pwdNumber")||"At least one number")+" ")],1)])]),r("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["new_password",{rules:[{required:!0,message:e.$t("user.resetPassword.passwordRequired")||"Please enter new password"},{validator:e.validateResetPassword}],validateTrigger:"blur"}],expression:"[\n 'new_password',\n {\n rules: [\n { required: true, message: $t('user.resetPassword.passwordRequired') || 'Please enter new password' },\n { validator: validateResetPassword }\n ],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",placeholder:e.$t("user.resetPassword.newPassword")||"New Password"},on:{focus:function(r){e.resetPwdFocused=!0},blur:function(r){e.resetPwdFocused=!1},change:e.checkResetPassword}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],2)],1),r("a-form-item",[r("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["confirm_password",{rules:[{required:!0,message:e.$t("user.resetPassword.confirmPasswordRequired")||"Please confirm password"},{validator:e.validateResetConfirmPassword}],validateTrigger:"blur"}],expression:"[\n 'confirm_password',\n {\n rules: [\n { required: true, message: $t('user.resetPassword.confirmPasswordRequired') || 'Please confirm password' },\n { validator: validateResetConfirmPassword }\n ],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",placeholder:e.$t("user.resetPassword.confirmPassword")||"Confirm Password"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),r("a-form-item",{staticStyle:{"margin-top":"24px"}},[r("a-button",{staticClass:"submit-button",attrs:{size:"large",type:"primary",htmlType:"submit",loading:e.resetLoading,block:""}},[e._v(e._s(e.$t("user.resetPassword.submit")||"Reset Password"))])],1),r("div",{staticClass:"auth-links"},[r("a",{on:{click:function(r){e.resetStep=1}}},[r("a-icon",{attrs:{type:"arrow-left"}}),e._v(" "+e._s(e.$t("user.resetPassword.back")||"Back")+" ")],1)])],1):e._e(),3===e.resetStep?r("div",{staticClass:"success-panel"},[r("a-result",{attrs:{status:"success",title:e.$t("user.resetPassword.successTitle")||"Password Reset Successful","sub-title":e.$t("user.resetPassword.successSubtitle")||"You can now login with your new password"},scopedSlots:e._u([{key:"extra",fn:function(){return[r("a-button",{attrs:{type:"primary"},on:{click:function(r){e.showResetModal=!1,e.activeTab="login"}}},[e._v(" "+e._s(e.$t("user.resetPassword.goToLogin")||"Go to Login")+" ")])]},proxy:!0}],null,!1,1952454462)})],1):e._e()],1)],1)},i=[function(){var e=this,r=e._self._c;return r("div",{staticClass:"auth-intro"},[r("div",{staticClass:"desc"},[e._v("AI driven quantitative insights for global markets")])])}],o=t(68285),a=t(76959),n=t(17654),l=t(57888),u=(t(74423),t(26099),t(27495),t(21699),t(47764),t(5746),t(62953),t(48408),t(95353)),c=t(61145),d=t(20024),g=function(){var e=this,r=e._self._c;return e.enabled?r("div",{staticClass:"turnstile-container"},[r("div",{ref:"turnstileRef",attrs:{id:e.containerId}}),e.error?r("div",{staticClass:"turnstile-error"},[e._v(" "+e._s(e.error)+" "),r("a",{on:{click:e.reset}},[e._v(e._s(e.$t("user.security.retry")||"Retry"))])]):e._e()]):e._e()},m=[],h=(t(28706),t(38781),!1),p=!1,f=[];function w(){return new Promise(function(e,r){if(h)e();else if(f.push({resolve:e,reject:r}),!p){p=!0;var t=document.createElement("script");t.src="https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit",t.async=!0,t.defer=!0,t.onload=function(){h=!0,f.forEach(function(e){return e.resolve()}),f.length=0},t.onerror=function(){p=!1,f.forEach(function(e){return e.reject(new Error("Failed to load Turnstile script"))}),f.length=0},document.head.appendChild(t)}})}var v={name:"Turnstile",props:{siteKey:{type:String,default:""},enabled:{type:Boolean,default:!0},theme:{type:String,default:"auto"},size:{type:String,default:"normal"}},data:function(){return{widgetId:null,token:null,error:null,containerId:"turnstile-".concat(Date.now(),"-").concat(Math.random().toString(36).substr(2,9))}},mounted:function(){this.enabled&&this.siteKey&&this.initTurnstile()},beforeDestroy:function(){this.cleanup()},watch:{siteKey:function(e){e&&this.enabled&&this.initTurnstile()},enabled:function(e){e&&this.siteKey?this.initTurnstile():this.cleanup()}},methods:{initTurnstile:function(){var e=this;return(0,n.A)((0,a.A)().m(function r(){return(0,a.A)().w(function(r){while(1)switch(r.p=r.n){case 0:return r.p=0,r.n=1,w();case 1:e.renderWidget(),r.n=3;break;case 2:r.p=2,r.v,e.error="Failed to load verification";case 3:return r.a(2)}},r,null,[[0,2]])}))()},renderWidget:function(){var e=this;window.turnstile&&this.$refs.turnstileRef&&(this.cleanup(),this.widgetId=window.turnstile.render(this.$refs.turnstileRef,{sitekey:this.siteKey,theme:this.theme,size:this.size,callback:function(r){e.token=r,e.error=null,e.$emit("success",r)},"error-callback":function(){e.token=null,e.error="Verification failed",e.$emit("error")},"expired-callback":function(){e.token=null,e.$emit("expired")}}))},reset:function(){this.token=null,this.error=null,window.turnstile&&null!==this.widgetId?window.turnstile.reset(this.widgetId):this.renderWidget()},getToken:function(){return this.token},cleanup:function(){if(window.turnstile&&null!==this.widgetId){try{window.turnstile.remove(this.widgetId)}catch(e){}this.widgetId=null}}}},b=v,C=t(845),y=(0,C.A)(b,g,m,!1,null,"20437450",null),$=y.exports,_=t(74053),T=t.n(_),L=t(41802),k={name:"Login",components:{Turnstile:$},data:function(){return{activeTab:"login",showLegal:!1,legalAgreed:!0,legalError:!1,securityConfig:{turnstile_enabled:!1,turnstile_site_key:"",registration_enabled:!0,oauth_google_enabled:!1,oauth_github_enabled:!1},oauthProcessing:!1,oauthError:null,referralCode:"",loginMethod:"password",loginForm:this.$form.createForm(this,{name:"loginForm"}),loginError:"",loginLoading:!1,loginTurnstileToken:null,codeLoginForm:this.$form.createForm(this,{name:"codeLoginForm"}),codeLoginError:"",codeLoginLoading:!1,codeLoginTurnstileToken:null,codeLoginSendingCode:!1,codeLoginCountdown:0,codeLoginCountdownTimer:null,registerForm:this.$form.createForm(this,{name:"registerForm"}),registerError:"",registerLoading:!1,registerTurnstileToken:null,registerSendingCode:!1,registerCountdown:0,registerCountdownTimer:null,regPwdFocused:!1,regHasMinLength:!1,regHasUppercase:!1,regHasLowercase:!1,regHasNumber:!1,showResetModal:!1,resetStep:1,resetForm:this.$form.createForm(this,{name:"resetForm"}),resetPwdForm:this.$form.createForm(this,{name:"resetPwdForm"}),resetError:"",resetLoading:!1,resetTurnstileToken:null,resetSendingCode:!1,resetCountdown:0,resetCountdownTimer:null,resetEmail:"",resetCode:"",resetPwdFocused:!1,resetHasMinLength:!1,resetHasUppercase:!1,resetHasLowercase:!1,resetHasNumber:!1}},computed:{hasOAuth:function(){return this.securityConfig.oauth_google_enabled||this.securityConfig.oauth_github_enabled},regPwdValid:function(){return this.regHasMinLength&&this.regHasUppercase&&this.regHasLowercase&&this.regHasNumber},resetPwdValid:function(){return this.resetHasMinLength&&this.resetHasUppercase&&this.resetHasLowercase&&this.resetHasNumber}},created:function(){var e=this;this.loadSecurityConfig(),this.handleOAuthCallback(),this.$nextTick(function(){e.extractReferralCode()})},watch:{"$route.query":function(){this.extractReferralCode()}},beforeDestroy:function(){this.codeLoginCountdownTimer&&clearInterval(this.codeLoginCountdownTimer),this.registerCountdownTimer&&clearInterval(this.registerCountdownTimer),this.resetCountdownTimer&&clearInterval(this.resetCountdownTimer)},methods:(0,l.A)((0,l.A)({},(0,u.i0)(["Login","Logout"])),{},{loadSecurityConfig:function(){var e=this;return(0,n.A)((0,a.A)().m(function r(){var t;return(0,a.A)().w(function(r){while(1)switch(r.p=r.n){case 0:return r.p=0,r.n=1,(0,d.getSecurityConfig)();case 1:t=r.v,1===t.code&&t.data&&(e.securityConfig=(0,l.A)((0,l.A)({},e.securityConfig),t.data)),r.n=3;break;case 2:r.p=2,r.v;case 3:return r.a(2)}},r,null,[[0,2]])}))()},extractReferralCode:function(){var e=new URLSearchParams(window.location.search),r=new URLSearchParams;if(window.location.hash){var t=window.location.hash.split("?");t.length>1&&(r=new URLSearchParams(t[1]))}var s=this.$route.query.ref||this.$route.query.referral_code;this.referralCode=s||e.get("ref")||e.get("referral_code")||r.get("ref")||r.get("referral_code")||"",this.referralCode&&this.securityConfig.registration_enabled&&(this.activeTab="register")},handleOAuthCallback:function(){var e=this,r=new URLSearchParams(window.location.search),t=new URLSearchParams(window.location.hash.split("?")[1]||""),s=r.get("oauth_token")||t.get("oauth_token"),i=r.get("oauth_error")||t.get("oauth_error");if(i)return this.oauthError=this.$t("user.oauth.error.".concat(i))||"OAuth error: ".concat(i),void window.history.replaceState({},document.title,window.location.pathname+window.location.hash.split("?")[0]);s&&(this.oauthProcessing=!0,T().set(L.Xh,s,(new Date).getTime()+6048e5),window.history.replaceState({},document.title,window.location.pathname+window.location.hash.split("?")[0]),this.$store.dispatch("GetInfo").then(function(){e.$router.push({path:"/"}),e.$notification.success({message:"Welcome",description:"".concat((0,c.Z$)(),", welcome back.")})}).catch(function(r){e.oauthProcessing=!1,e.oauthError="Failed to get user info",T().remove(L.Xh)}))},handleLogin:function(e){var r=this;e.preventDefault(),this.legalError=!1,this.legalAgreed?this.loginForm.validateFields(["username","password"],function(e,t){e||(r.loginLoading=!0,r.loginError="",r.Login((0,l.A)((0,l.A)({},t),{},{turnstile_token:r.loginTurnstileToken})).then(function(){r.$router.push({path:"/"}),r.$notification.success({message:"Welcome",description:"".concat((0,c.Z$)(),", welcome back.")})}).catch(function(e){var t=e.response||{},s=t.data||{};r.loginError=s.msg||e.message||"Login failed",r.$refs.loginTurnstile&&r.$refs.loginTurnstile.reset(),r.loginTurnstileToken=null}).finally(function(){r.loginLoading=!1}))}):this.legalError=!0},handleCodeLoginSendCode:function(){var e=this;return(0,n.A)((0,a.A)().m(function r(){return(0,a.A)().w(function(r){while(1)switch(r.n){case 0:e.codeLoginForm.validateFields(["email"],function(){var r=(0,n.A)((0,a.A)().m(function r(t,s){var i,o,n;return(0,a.A)().w(function(r){while(1)switch(r.p=r.n){case 0:if(!t){r.n=1;break}return r.a(2);case 1:return e.codeLoginSendingCode=!0,e.codeLoginError="",r.p=2,r.n=3,(0,d.sendVerificationCode)({email:s.email,type:"login",turnstile_token:e.codeLoginTurnstileToken});case 3:i=r.v,1===i.code?(e.$message.success(e.$t("user.login.codeSent")||"Verification code sent"),e.startCodeLoginCountdown()):e.codeLoginError=i.msg||"Failed to send code",r.n=5;break;case 4:r.p=4,n=r.v,e.codeLoginError=(null===(o=n.response)||void 0===o||null===(o=o.data)||void 0===o?void 0:o.msg)||"Failed to send code";case 5:return r.p=5,e.codeLoginSendingCode=!1,r.f(5);case 6:return r.a(2)}},r,null,[[2,4,5,6]])}));return function(e,t){return r.apply(this,arguments)}}());case 1:return r.a(2)}},r)}))()},startCodeLoginCountdown:function(){var e=this;this.codeLoginCountdown=60,this.codeLoginCountdownTimer=setInterval(function(){e.codeLoginCountdown--,e.codeLoginCountdown<=0&&(clearInterval(e.codeLoginCountdownTimer),e.codeLoginCountdownTimer=null)},1e3)},handleCodeLogin:function(e){var r=this;e.preventDefault(),this.legalError=!1,this.legalAgreed?this.codeLoginForm.validateFields(function(){var e=(0,n.A)((0,a.A)().m(function e(t,s){var i,n,u,g,m,h,p,f,w,v;return(0,a.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!t){e.n=1;break}return e.a(2);case 1:return r.codeLoginLoading=!0,r.codeLoginError="",e.p=2,e.n=3,(0,d.loginWithCode)({email:s.email,code:s.code,turnstile_token:r.codeLoginTurnstileToken,referral_code:r.referralCode});case 3:if(n=e.v,1!==n.code||null===(i=n.data)||void 0===i||!i.token){e.n=6;break}return u=(new Date).getTime()+6048e5,T().set(L.Xh,n.data.token,u),r.$store.commit("SET_TOKEN",n.data.token),n.data.userinfo&&(g=(0,l.A)({},n.data.userinfo),"undefined"===typeof g.is_demo&&(g.is_demo=!1),T().set(L.nc,g,u),r.$store.commit("SET_INFO",g),g.nickname?r.$store.commit("SET_NAME",{name:g.nickname,welcome:(0,c.Z$)()}):g.username&&r.$store.commit("SET_NAME",{name:g.username,welcome:(0,c.Z$)()}),g.avatar&&r.$store.commit("SET_AVATAR",g.avatar),m=[],m=g.role?Array.isArray(g.role)?g.role:"object"===(0,o.A)(g.role)?[g.role]:[{id:g.role,permissionList:[]}]:[{id:"default",permissionList:[]}],r.$store.commit("SET_ROLES",m),T().set(L.iK,m,u)),e.n=4,r.$nextTick();case 4:return T().get(L.Xh),h=r.$store.getters.roles,0===h.length&&(p=[{id:"default",permissionList:[]}],r.$store.commit("SET_ROLES",p),T().set(L.iK,p,u)),e.n=5,new Promise(function(e){return setTimeout(e,200)});case 5:r.$store.dispatch("ResetRoutes"),f=n.data.is_new_user,r.$router.push({path:"/"}).then(function(){r.$notification.success({message:f?r.$t("user.login.welcomeNew")||"Welcome!":"Welcome",description:f?r.$t("user.login.accountCreated")||"Your account has been created.":"".concat((0,c.Z$)(),", welcome back.")})}).catch(function(e){r.$notification.success({message:f?r.$t("user.login.welcomeNew")||"Welcome!":"Welcome",description:f?r.$t("user.login.accountCreated")||"Your account has been created.":"".concat((0,c.Z$)(),", welcome back.")})}),e.n=7;break;case 6:r.codeLoginError=n.msg||"Login failed",r.$refs.codeLoginTurnstile&&r.$refs.codeLoginTurnstile.reset(),r.codeLoginTurnstileToken=null;case 7:e.n=9;break;case 8:e.p=8,v=e.v,r.codeLoginError=(null===(w=v.response)||void 0===w||null===(w=w.data)||void 0===w?void 0:w.msg)||"Login failed",r.$refs.codeLoginTurnstile&&r.$refs.codeLoginTurnstile.reset(),r.codeLoginTurnstileToken=null;case 9:return e.p=9,r.codeLoginLoading=!1,e.f(9);case 10:return e.a(2)}},e,null,[[2,8,9,10]])}));return function(r,t){return e.apply(this,arguments)}}()):this.legalError=!0},checkRegPassword:function(e){var r=e.target.value||"";this.regHasMinLength=r.length>=8,this.regHasUppercase=/[A-Z]/.test(r),this.regHasLowercase=/[a-z]/.test(r),this.regHasNumber=/[0-9]/.test(r)},validateRegPassword:function(e,r,t){r?r.length<8?t(new Error(this.$t("user.register.pwdMinLength")||"At least 8 characters")):/[A-Z]/.test(r)?/[a-z]/.test(r)?/[0-9]/.test(r)?t():t(new Error(this.$t("user.register.pwdNumber")||"At least one number")):t(new Error(this.$t("user.register.pwdLowercase")||"At least one lowercase letter")):t(new Error(this.$t("user.register.pwdUppercase")||"At least one uppercase letter")):t()},validateRegConfirmPassword:function(e,r,t){var s=this.registerForm.getFieldValue("password");r&&r!==s?t(new Error(this.$t("user.register.passwordMismatch")||"Passwords do not match")):t()},handleRegisterSendCode:function(){var e=this;return(0,n.A)((0,a.A)().m(function r(){return(0,a.A)().w(function(r){while(1)switch(r.n){case 0:e.registerForm.validateFields(["email"],function(){var r=(0,n.A)((0,a.A)().m(function r(t,s){var i,o,n;return(0,a.A)().w(function(r){while(1)switch(r.p=r.n){case 0:if(!t){r.n=1;break}return r.a(2);case 1:return e.registerSendingCode=!0,e.registerError="",r.p=2,r.n=3,(0,d.sendVerificationCode)({email:s.email,type:"register",turnstile_token:e.registerTurnstileToken});case 3:i=r.v,1===i.code?(e.$message.success(e.$t("user.register.codeSent")||"Verification code sent"),e.startRegisterCountdown()):e.registerError=i.msg||"Failed to send code",r.n=5;break;case 4:r.p=4,n=r.v,e.registerError=(null===(o=n.response)||void 0===o||null===(o=o.data)||void 0===o?void 0:o.msg)||"Failed to send code";case 5:return r.p=5,e.registerSendingCode=!1,r.f(5);case 6:return r.a(2)}},r,null,[[2,4,5,6]])}));return function(e,t){return r.apply(this,arguments)}}());case 1:return r.a(2)}},r)}))()},startRegisterCountdown:function(){var e=this;this.registerCountdown=60,this.registerCountdownTimer=setInterval(function(){e.registerCountdown--,e.registerCountdown<=0&&(clearInterval(e.registerCountdownTimer),e.registerCountdownTimer=null)},1e3)},handleRegister:function(e){var r=this;e.preventDefault(),this.legalError=!1,this.legalAgreed?this.registerForm.validateFields(function(){var e=(0,n.A)((0,a.A)().m(function e(t,s){var i,n,u,g,m,h,p,f,w;return(0,a.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!t){e.n=1;break}return e.a(2);case 1:return r.registerLoading=!0,r.registerError="",e.p=2,e.n=3,(0,d.register)({email:s.email,code:s.code,username:s.username,password:s.password,turnstile_token:r.registerTurnstileToken,referral_code:r.referralCode});case 3:if(i=e.v,1!==i.code){e.n=8;break}if(r.$message.success(r.$t("user.register.success")||"Registration successful"),null===(n=i.data)||void 0===n||!n.token){e.n=6;break}return u=(new Date).getTime()+6048e5,T().set(L.Xh,i.data.token,u),r.$store.commit("SET_TOKEN",i.data.token),i.data.userinfo&&(g=(0,l.A)({},i.data.userinfo),"undefined"===typeof g.is_demo&&(g.is_demo=!1),T().set(L.nc,g,u),r.$store.commit("SET_INFO",g),g.nickname?r.$store.commit("SET_NAME",{name:g.nickname,welcome:(0,c.Z$)()}):g.username&&r.$store.commit("SET_NAME",{name:g.username,welcome:(0,c.Z$)()}),g.avatar&&r.$store.commit("SET_AVATAR",g.avatar),m=[],m=g.role?Array.isArray(g.role)?g.role:"object"===(0,o.A)(g.role)?[g.role]:[{id:g.role,permissionList:[]}]:[{id:"default",permissionList:[]}],r.$store.commit("SET_ROLES",m),T().set(L.iK,m,u)),e.n=4,r.$nextTick();case 4:return T().get(L.Xh),h=r.$store.getters.roles,0===h.length&&(p=[{id:"default",permissionList:[]}],r.$store.commit("SET_ROLES",p),T().set(L.iK,p,u)),e.n=5,new Promise(function(e){return setTimeout(e,200)});case 5:r.$store.dispatch("ResetRoutes"),r.$router.push({path:"/"}).then(function(){r.$notification.success({message:"Welcome",description:"".concat((0,c.Z$)(),", welcome to QuantDinger!")})}).catch(function(e){r.$notification.success({message:"Welcome",description:"".concat((0,c.Z$)(),", welcome to QuantDinger!")})}),e.n=7;break;case 6:r.activeTab="login",r.$message.info(r.$t("user.register.pleaseLogin")||"Please login with your new account");case 7:e.n=9;break;case 8:r.registerError=i.msg||"Registration failed",r.$refs.registerTurnstile&&r.$refs.registerTurnstile.reset(),r.registerTurnstileToken=null;case 9:e.n=11;break;case 10:e.p=10,w=e.v,r.registerError=(null===(f=w.response)||void 0===f||null===(f=f.data)||void 0===f?void 0:f.msg)||"Registration failed",r.$refs.registerTurnstile&&r.$refs.registerTurnstile.reset(),r.registerTurnstileToken=null;case 11:return e.p=11,r.registerLoading=!1,e.f(11);case 12:return e.a(2)}},e,null,[[2,10,11,12]])}));return function(r,t){return e.apply(this,arguments)}}()):this.legalError=!0},resetResetModal:function(){this.resetStep=1,this.resetError="",this.resetEmail="",this.resetCode="",this.resetCountdown=0,this.resetCountdownTimer&&(clearInterval(this.resetCountdownTimer),this.resetCountdownTimer=null)},handleResetSendCode:function(){var e=this;return(0,n.A)((0,a.A)().m(function r(){return(0,a.A)().w(function(r){while(1)switch(r.n){case 0:e.resetForm.validateFields(["email"],function(){var r=(0,n.A)((0,a.A)().m(function r(t,s){var i,o,n;return(0,a.A)().w(function(r){while(1)switch(r.p=r.n){case 0:if(!t){r.n=1;break}return r.a(2);case 1:return e.resetSendingCode=!0,e.resetError="",r.p=2,r.n=3,(0,d.sendVerificationCode)({email:s.email,type:"reset_password",turnstile_token:e.resetTurnstileToken});case 3:i=r.v,1===i.code?(e.$message.success(e.$t("user.resetPassword.codeSent")||"Verification code sent"),e.startResetCountdown()):e.resetError=i.msg||"Failed to send code",r.n=5;break;case 4:r.p=4,n=r.v,e.resetError=(null===(o=n.response)||void 0===o||null===(o=o.data)||void 0===o?void 0:o.msg)||"Failed to send code";case 5:return r.p=5,e.resetSendingCode=!1,r.f(5);case 6:return r.a(2)}},r,null,[[2,4,5,6]])}));return function(e,t){return r.apply(this,arguments)}}());case 1:return r.a(2)}},r)}))()},startResetCountdown:function(){var e=this;this.resetCountdown=60,this.resetCountdownTimer=setInterval(function(){e.resetCountdown--,e.resetCountdown<=0&&(clearInterval(e.resetCountdownTimer),e.resetCountdownTimer=null)},1e3)},handleResetVerify:function(e){var r=this;e.preventDefault(),this.resetError="",this.resetForm.validateFields(function(e,t){e||(r.resetEmail=t.email,r.resetCode=t.code,r.resetStep=2)})},checkResetPassword:function(e){var r=e.target.value||"";this.resetHasMinLength=r.length>=8,this.resetHasUppercase=/[A-Z]/.test(r),this.resetHasLowercase=/[a-z]/.test(r),this.resetHasNumber=/[0-9]/.test(r)},validateResetPassword:function(e,r,t){r?r.length<8?t(new Error(this.$t("user.register.pwdMinLength")||"At least 8 characters")):/[A-Z]/.test(r)?/[a-z]/.test(r)?/[0-9]/.test(r)?t():t(new Error(this.$t("user.register.pwdNumber")||"At least one number")):t(new Error(this.$t("user.register.pwdLowercase")||"At least one lowercase letter")):t(new Error(this.$t("user.register.pwdUppercase")||"At least one uppercase letter")):t()},validateResetConfirmPassword:function(e,r,t){var s=this.resetPwdForm.getFieldValue("new_password");r&&r!==s?t(new Error(this.$t("user.register.passwordMismatch")||"Passwords do not match")):t()},handleResetPassword:function(e){var r=this;return(0,n.A)((0,a.A)().m(function t(){return(0,a.A)().w(function(t){while(1)switch(t.n){case 0:e.preventDefault(),r.resetError="",r.resetPwdForm.validateFields(function(){var e=(0,n.A)((0,a.A)().m(function e(t,s){var i,o,n,l,u;return(0,a.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!t){e.n=1;break}return e.a(2);case 1:return r.resetLoading=!0,e.p=2,e.n=3,(0,d.resetPassword)({email:r.resetEmail,code:r.resetCode,new_password:s.new_password,turnstile_token:r.resetTurnstileToken});case 3:i=e.v,1===i.code?r.resetStep=3:(r.resetError=i.msg||"Failed to reset password",(null!==(o=i.msg)&&void 0!==o&&o.includes("code")||null!==(n=i.msg)&&void 0!==n&&n.includes("expired"))&&(r.resetStep=1)),e.n=5;break;case 4:e.p=4,u=e.v,r.resetError=(null===(l=u.response)||void 0===l||null===(l=l.data)||void 0===l?void 0:l.msg)||"Failed to reset password";case 5:return e.p=5,r.resetLoading=!1,e.f(5);case 6:return e.a(2)}},e,null,[[2,4,5,6]])}));return function(r,t){return e.apply(this,arguments)}}());case 1:return t.a(2)}},t)}))()},handleGoogleLogin:function(){window.location.href=(0,d.getGoogleOAuthUrl)()},handleGitHubLogin:function(){window.location.href=(0,d.getGitHubOAuthUrl)()}})},P=k,A=(0,C.A)(P,s,i,!1,null,"de9678f6",null),E=A.exports},20024:function(e,r,t){t.r(r),t.d(r,{changePassword:function(){return m},getGitHubOAuthUrl:function(){return p},getGoogleOAuthUrl:function(){return h},getSecurityConfig:function(){return o},getUserInfo:function(){return l},login:function(){return a},loginWithCode:function(){return c},logout:function(){return n},register:function(){return d},resetPassword:function(){return g},sendVerificationCode:function(){return u}});t(34782),t(27495),t(99449),t(25440),t(11392),t(42762);var s=t(76471);function i(e){var r="/api".trim(),t=e.startsWith("/")?e:"/".concat(e);if(!r)return t;var s=r.replace(/\/+$/,"");return s.endsWith("/api")&&t.startsWith("/api/")?s+t.slice(4):s+t}function o(){return(0,s.Ay)({url:"/api/auth/security-config",method:"get"})}function a(e){return(0,s.Ay)({url:"/api/auth/login",method:"post",data:e})}function n(){return(0,s.Ay)({url:"/api/auth/logout",method:"post"})}function l(){return(0,s.Ay)({url:"/api/auth/info",method:"get"})}function u(e){return(0,s.Ay)({url:"/api/auth/send-code",method:"post",data:e})}function c(e){return(0,s.Ay)({url:"/api/auth/login-code",method:"post",data:e})}function d(e){return(0,s.Ay)({url:"/api/auth/register",method:"post",data:e})}function g(e){return(0,s.Ay)({url:"/api/auth/reset-password",method:"post",data:e})}function m(e){return(0,s.Ay)({url:"/api/auth/change-password",method:"post",data:e})}function h(){return i("/api/auth/oauth/google")}function p(){return i("/api/auth/oauth/github")}}}]); \ No newline at end of file diff --git a/frontend/dist/js/user.64beeb5e.js b/frontend/dist/js/user.64beeb5e.js deleted file mode 100644 index 6c612bc..0000000 --- a/frontend/dist/js/user.64beeb5e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[24,806],{19908:function(e,r,t){t.r(r),t.d(r,{default:function(){return E}});var s=function(){var e=this,r=e._self._c;return r("div",{staticClass:"main"},[e._m(0),r("div",{staticClass:"auth-card"},[e.oauthProcessing?r("div",{staticClass:"oauth-processing"},[r("a-spin",{attrs:{size:"large"}}),r("p",[e._v(e._s(e.$t("user.oauth.processing")||"Processing login..."))])],1):e._e(),r("div",{directives:[{name:"show",rawName:"v-show",value:!e.oauthProcessing,expression:"!oauthProcessing"}]},[r("a-tabs",{attrs:{animated:!1},model:{value:e.activeTab,callback:function(r){e.activeTab=r},expression:"activeTab"}},[r("a-tab-pane",{key:"login",attrs:{tab:e.$t("user.login.tab")||"Login"}},[r("div",{staticClass:"login-method-switch"},[r("a",{class:{active:"password"===e.loginMethod},on:{click:function(r){e.loginMethod="password"}}},[e._v(e._s(e.$t("user.login.methodPassword")||"Password"))]),r("a-divider",{attrs:{type:"vertical"}}),r("a",{class:{active:"code"===e.loginMethod},on:{click:function(r){e.loginMethod="code"}}},[e._v(e._s(e.$t("user.login.methodCode")||"Email Code"))])],1),r("a-form",{directives:[{name:"show",rawName:"v-show",value:"password"===e.loginMethod,expression:"loginMethod === 'password'"}],ref:"formLogin",staticClass:"auth-form",attrs:{id:"formLogin",form:e.loginForm},on:{submit:e.handleLogin}},[e.loginError?r("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{type:"error",showIcon:"",message:e.loginError}}):e._e(),e.oauthError?r("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{type:"error",showIcon:"",message:e.oauthError}}):e._e(),r("a-form-item",[r("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["username",{rules:[{required:!0,message:e.$t("user.login.usernameRequired")||"Please enter username"}],validateTrigger:"blur"}],expression:"[\n 'username',\n {rules: [{ required: true, message: $t('user.login.usernameRequired') || 'Please enter username' }], validateTrigger: 'blur'}\n ]"}],attrs:{size:"large",type:"text",placeholder:e.$t("user.login.username")||"Username"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"user"},slot:"prefix"})],1)],1),r("a-form-item",[r("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["password",{rules:[{required:!0,message:e.$t("user.login.passwordRequired")||"Please enter password"}],validateTrigger:"blur"}],expression:"[\n 'password',\n {rules: [{ required: true, message: $t('user.login.passwordRequired') || 'Please enter password' }], validateTrigger: 'blur'}\n ]"}],attrs:{size:"large",placeholder:e.$t("user.login.password")||"Password"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),r("Turnstile",{ref:"loginTurnstile",attrs:{siteKey:e.securityConfig.turnstile_site_key,enabled:e.securityConfig.turnstile_enabled},on:{success:function(r){return e.loginTurnstileToken=r},error:function(){return e.loginTurnstileToken=null}}}),r("a-form-item",{staticStyle:{"margin-top":"24px"}},[r("a-button",{staticClass:"submit-button",attrs:{size:"large",type:"primary",htmlType:"submit",loading:e.loginLoading,disabled:e.loginLoading||e.securityConfig.turnstile_enabled&&!e.loginTurnstileToken,block:""}},[e._v(e._s(e.$t("user.login.submit")||"Login"))])],1),r("div",{staticClass:"auth-links"},[r("a",{on:{click:function(r){e.showResetModal=!0}}},[e._v(e._s(e.$t("user.login.forgotPassword")||"Forgot Password?"))])])],1),r("a-form",{directives:[{name:"show",rawName:"v-show",value:"code"===e.loginMethod,expression:"loginMethod === 'code'"}],ref:"formCodeLogin",staticClass:"auth-form",attrs:{id:"formCodeLogin",form:e.codeLoginForm},on:{submit:e.handleCodeLogin}},[e.codeLoginError?r("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{type:"error",showIcon:"",message:e.codeLoginError}}):e._e(),e.oauthError?r("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{type:"error",showIcon:"",message:e.oauthError}}):e._e(),r("a-form-item",[r("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["email",{rules:[{required:!0,message:e.$t("user.login.emailRequired")||"Please enter email"},{type:"email",message:e.$t("user.login.emailInvalid")||"Invalid email format"}],validateTrigger:"blur"}],expression:"[\n 'email',\n {\n rules: [\n { required: true, message: $t('user.login.emailRequired') || 'Please enter email' },\n { type: 'email', message: $t('user.login.emailInvalid') || 'Invalid email format' }\n ],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",type:"email",placeholder:e.$t("user.login.email")||"Email"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"mail"},slot:"prefix"})],1)],1),r("a-form-item",[r("a-row",{attrs:{gutter:12}},[r("a-col",{attrs:{span:16}},[r("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["code",{rules:[{required:!0,message:e.$t("user.login.codeRequired")||"Please enter verification code"}],validateTrigger:"blur"}],expression:"[\n 'code',\n {\n rules: [{ required: true, message: $t('user.login.codeRequired') || 'Please enter verification code' }],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",placeholder:e.$t("user.login.verificationCode")||"Verification Code"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"safety-certificate"},slot:"prefix"})],1)],1),r("a-col",{attrs:{span:8}},[r("a-button",{attrs:{size:"large",block:"",loading:e.codeLoginSendingCode,disabled:e.codeLoginSendingCode||e.codeLoginCountdown>0},on:{click:e.handleCodeLoginSendCode}},[e._v(" "+e._s(e.codeLoginCountdown>0?"".concat(e.codeLoginCountdown,"s"):e.$t("user.login.sendCode")||"Send")+" ")])],1)],1)],1),r("Turnstile",{ref:"codeLoginTurnstile",attrs:{siteKey:e.securityConfig.turnstile_site_key,enabled:e.securityConfig.turnstile_enabled},on:{success:function(r){return e.codeLoginTurnstileToken=r},error:function(){return e.codeLoginTurnstileToken=null}}}),r("a-form-item",{staticStyle:{"margin-top":"24px"}},[r("a-button",{staticClass:"submit-button",attrs:{size:"large",type:"primary",htmlType:"submit",loading:e.codeLoginLoading,disabled:e.codeLoginLoading||e.securityConfig.turnstile_enabled&&!e.codeLoginTurnstileToken,block:""}},[e._v(e._s(e.$t("user.login.submit")||"Login"))])],1),r("div",{staticClass:"code-login-hint"},[r("a-icon",{attrs:{type:"info-circle"}}),r("span",[e._v(e._s(e.$t("user.login.codeLoginHint")||"New users will be automatically registered"))])],1)],1),e.hasOAuth?r("div",{staticClass:"oauth-section"},[r("a-divider",[e._v(e._s(e.$t("user.login.orLoginWith")||"Or login with"))]),r("div",{staticClass:"oauth-buttons"},[e.securityConfig.oauth_google_enabled?r("a-button",{staticClass:"oauth-btn google-btn",on:{click:e.handleGoogleLogin}},[r("svg",{staticClass:"oauth-icon",attrs:{viewBox:"0 0 24 24",width:"18",height:"18"}},[r("path",{attrs:{fill:"#4285F4",d:"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z"}}),r("path",{attrs:{fill:"#34A853",d:"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z"}}),r("path",{attrs:{fill:"#FBBC05",d:"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z"}}),r("path",{attrs:{fill:"#EA4335",d:"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z"}})]),e._v(" Google ")]):e._e(),e.securityConfig.oauth_github_enabled?r("a-button",{staticClass:"oauth-btn github-btn",on:{click:e.handleGitHubLogin}},[r("a-icon",{attrs:{type:"github"}}),e._v(" GitHub ")],1):e._e()],1)],1):e._e()],1),e.securityConfig.registration_enabled?r("a-tab-pane",{key:"register",attrs:{tab:e.$t("user.register.tab")||"Register"}},[r("a-form",{ref:"formRegister",staticClass:"auth-form",attrs:{id:"formRegister",form:e.registerForm},on:{submit:e.handleRegister}},[e.registerError?r("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{type:"error",showIcon:"",message:e.registerError}}):e._e(),r("a-form-item",[r("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["email",{rules:[{required:!0,message:e.$t("user.register.emailRequired")||"Please enter email"},{type:"email",message:e.$t("user.register.emailInvalid")||"Invalid email format"}],validateTrigger:"blur"}],expression:"[\n 'email',\n {\n rules: [\n { required: true, message: $t('user.register.emailRequired') || 'Please enter email' },\n { type: 'email', message: $t('user.register.emailInvalid') || 'Invalid email format' }\n ],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",type:"email",placeholder:e.$t("user.register.email")||"Email"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"mail"},slot:"prefix"})],1)],1),r("a-form-item",[r("a-row",{attrs:{gutter:12}},[r("a-col",{attrs:{span:16}},[r("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["code",{rules:[{required:!0,message:e.$t("user.register.codeRequired")||"Please enter verification code"}],validateTrigger:"blur"}],expression:"[\n 'code',\n {\n rules: [{ required: true, message: $t('user.register.codeRequired') || 'Please enter verification code' }],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",placeholder:e.$t("user.register.verificationCode")||"Verification Code"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"safety-certificate"},slot:"prefix"})],1)],1),r("a-col",{attrs:{span:8}},[r("a-button",{attrs:{size:"large",block:"",loading:e.registerSendingCode,disabled:e.registerSendingCode||e.registerCountdown>0},on:{click:e.handleRegisterSendCode}},[e._v(" "+e._s(e.registerCountdown>0?"".concat(e.registerCountdown,"s"):e.$t("user.register.sendCode")||"Send")+" ")])],1)],1)],1),r("a-form-item",[r("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["username",{rules:[{required:!0,message:e.$t("user.register.usernameRequired")||"Please enter username"},{min:3,max:30,message:e.$t("user.register.usernameLength")||"Username must be 3-30 characters"},{pattern:/^[a-zA-Z][a-zA-Z0-9_]*$/,message:e.$t("user.register.usernamePattern")||"Start with letter, letters/numbers/underscore only"}],validateTrigger:"blur"}],expression:"[\n 'username',\n {\n rules: [\n { required: true, message: $t('user.register.usernameRequired') || 'Please enter username' },\n { min: 3, max: 30, message: $t('user.register.usernameLength') || 'Username must be 3-30 characters' },\n { pattern: /^[a-zA-Z][a-zA-Z0-9_]*$/, message: $t('user.register.usernamePattern') || 'Start with letter, letters/numbers/underscore only' }\n ],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",placeholder:e.$t("user.register.username")||"Username"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"user"},slot:"prefix"})],1)],1),r("a-form-item",[r("a-popover",{attrs:{placement:"rightTop",trigger:["focus"],visible:e.regPwdFocused&&!e.regPwdValid}},[r("template",{slot:"content"},[r("div",{staticClass:"password-requirements"},[r("div",{class:{valid:e.regHasMinLength}},[r("a-icon",{attrs:{type:e.regHasMinLength?"check-circle":"close-circle"}}),e._v(" "+e._s(e.$t("user.register.pwdMinLength")||"At least 8 characters")+" ")],1),r("div",{class:{valid:e.regHasUppercase}},[r("a-icon",{attrs:{type:e.regHasUppercase?"check-circle":"close-circle"}}),e._v(" "+e._s(e.$t("user.register.pwdUppercase")||"At least one uppercase letter")+" ")],1),r("div",{class:{valid:e.regHasLowercase}},[r("a-icon",{attrs:{type:e.regHasLowercase?"check-circle":"close-circle"}}),e._v(" "+e._s(e.$t("user.register.pwdLowercase")||"At least one lowercase letter")+" ")],1),r("div",{class:{valid:e.regHasNumber}},[r("a-icon",{attrs:{type:e.regHasNumber?"check-circle":"close-circle"}}),e._v(" "+e._s(e.$t("user.register.pwdNumber")||"At least one number")+" ")],1)])]),r("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["password",{rules:[{required:!0,message:e.$t("user.register.passwordRequired")||"Please enter password"},{validator:e.validateRegPassword}],validateTrigger:"blur"}],expression:"[\n 'password',\n {\n rules: [\n { required: true, message: $t('user.register.passwordRequired') || 'Please enter password' },\n { validator: validateRegPassword }\n ],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",placeholder:e.$t("user.register.password")||"Password"},on:{focus:function(r){e.regPwdFocused=!0},blur:function(r){e.regPwdFocused=!1},change:e.checkRegPassword}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],2)],1),r("a-form-item",[r("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["confirmPassword",{rules:[{required:!0,message:e.$t("user.register.confirmPasswordRequired")||"Please confirm password"},{validator:e.validateRegConfirmPassword}],validateTrigger:"blur"}],expression:"[\n 'confirmPassword',\n {\n rules: [\n { required: true, message: $t('user.register.confirmPasswordRequired') || 'Please confirm password' },\n { validator: validateRegConfirmPassword }\n ],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",placeholder:e.$t("user.register.confirmPassword")||"Confirm Password"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),r("Turnstile",{ref:"registerTurnstile",attrs:{siteKey:e.securityConfig.turnstile_site_key,enabled:e.securityConfig.turnstile_enabled},on:{success:function(r){return e.registerTurnstileToken=r},error:function(){return e.registerTurnstileToken=null}}}),r("a-form-item",{staticStyle:{"margin-top":"24px"}},[r("a-button",{staticClass:"submit-button",attrs:{size:"large",type:"primary",htmlType:"submit",loading:e.registerLoading,disabled:e.registerLoading||e.securityConfig.turnstile_enabled&&!e.registerTurnstileToken,block:""}},[e._v(e._s(e.$t("user.register.submit")||"Create Account"))])],1)],1)],1):e._e()],1),r("div",{staticClass:"legal-wrap"},[r("div",{staticClass:"legal-header"},[r("div",{staticClass:"legal-title"},[e._v(e._s(e.$t("user.login.legal.title")))]),r("a",{staticClass:"legal-toggle",on:{click:function(r){e.showLegal=!e.showLegal}}},[e._v(" "+e._s(e.showLegal?e.$t("user.login.legal.collapse"):e.$t("user.login.legal.view"))+" ")])]),r("div",{directives:[{name:"show",rawName:"v-show",value:e.showLegal,expression:"showLegal"}],staticClass:"legal-content"},[e._v(" "+e._s(e.$t("user.login.legal.content"))+" ")]),r("div",{staticClass:"legal-agree"},[r("a-checkbox",{model:{value:e.legalAgreed,callback:function(r){e.legalAgreed=r},expression:"legalAgreed"}},[e._v(" "+e._s(e.$t("user.login.legal.agree"))+" ")]),e.legalError?r("div",{staticClass:"legal-error"},[e._v(e._s(e.$t("user.login.legal.required")))]):e._e()],1)])],1)]),r("a-modal",{attrs:{title:e.$t("user.resetPassword.title")||"Reset Password",footer:null,width:420,destroyOnClose:!0},on:{cancel:e.resetResetModal},model:{value:e.showResetModal,callback:function(r){e.showResetModal=r},expression:"showResetModal"}},[1===e.resetStep?r("a-form",{staticClass:"auth-form",attrs:{form:e.resetForm},on:{submit:e.handleResetVerify}},[e.resetError?r("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{type:"error",showIcon:"",message:e.resetError}}):e._e(),r("a-form-item",[r("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["email",{rules:[{required:!0,message:e.$t("user.resetPassword.emailRequired")||"Please enter email"},{type:"email",message:e.$t("user.resetPassword.emailInvalid")||"Invalid email format"}],validateTrigger:"blur"}],expression:"[\n 'email',\n {\n rules: [\n { required: true, message: $t('user.resetPassword.emailRequired') || 'Please enter email' },\n { type: 'email', message: $t('user.resetPassword.emailInvalid') || 'Invalid email format' }\n ],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",type:"email",placeholder:e.$t("user.resetPassword.email")||"Email"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"mail"},slot:"prefix"})],1)],1),r("a-form-item",[r("a-row",{attrs:{gutter:12}},[r("a-col",{attrs:{span:16}},[r("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["code",{rules:[{required:!0,message:e.$t("user.resetPassword.codeRequired")||"Please enter verification code"}],validateTrigger:"blur"}],expression:"[\n 'code',\n {\n rules: [{ required: true, message: $t('user.resetPassword.codeRequired') || 'Please enter verification code' }],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",placeholder:e.$t("user.resetPassword.verificationCode")||"Verification Code"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"safety-certificate"},slot:"prefix"})],1)],1),r("a-col",{attrs:{span:8}},[r("a-button",{attrs:{size:"large",block:"",loading:e.resetSendingCode,disabled:e.resetSendingCode||e.resetCountdown>0},on:{click:e.handleResetSendCode}},[e._v(" "+e._s(e.resetCountdown>0?"".concat(e.resetCountdown,"s"):e.$t("user.resetPassword.sendCode")||"Send")+" ")])],1)],1)],1),r("Turnstile",{ref:"resetTurnstile",attrs:{siteKey:e.securityConfig.turnstile_site_key,enabled:e.securityConfig.turnstile_enabled},on:{success:function(r){return e.resetTurnstileToken=r},error:function(){return e.resetTurnstileToken=null}}}),r("a-form-item",{staticStyle:{"margin-top":"24px"}},[r("a-button",{staticClass:"submit-button",attrs:{size:"large",type:"primary",htmlType:"submit",disabled:e.securityConfig.turnstile_enabled&&!e.resetTurnstileToken,block:""}},[e._v(e._s(e.$t("user.resetPassword.next")||"Next"))])],1)],1):e._e(),2===e.resetStep?r("a-form",{staticClass:"auth-form",attrs:{form:e.resetPwdForm},on:{submit:e.handleResetPassword}},[e.resetError?r("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{type:"error",showIcon:"",message:e.resetError}}):e._e(),r("div",{staticClass:"email-display"},[r("span",[e._v(e._s(e.$t("user.resetPassword.resettingFor")||"Resetting for")+":")]),r("strong",[e._v(e._s(e.resetEmail))])]),r("a-form-item",[r("a-popover",{attrs:{placement:"rightTop",trigger:["focus"],visible:e.resetPwdFocused&&!e.resetPwdValid}},[r("template",{slot:"content"},[r("div",{staticClass:"password-requirements"},[r("div",{class:{valid:e.resetHasMinLength}},[r("a-icon",{attrs:{type:e.resetHasMinLength?"check-circle":"close-circle"}}),e._v(" "+e._s(e.$t("user.register.pwdMinLength")||"At least 8 characters")+" ")],1),r("div",{class:{valid:e.resetHasUppercase}},[r("a-icon",{attrs:{type:e.resetHasUppercase?"check-circle":"close-circle"}}),e._v(" "+e._s(e.$t("user.register.pwdUppercase")||"At least one uppercase letter")+" ")],1),r("div",{class:{valid:e.resetHasLowercase}},[r("a-icon",{attrs:{type:e.resetHasLowercase?"check-circle":"close-circle"}}),e._v(" "+e._s(e.$t("user.register.pwdLowercase")||"At least one lowercase letter")+" ")],1),r("div",{class:{valid:e.resetHasNumber}},[r("a-icon",{attrs:{type:e.resetHasNumber?"check-circle":"close-circle"}}),e._v(" "+e._s(e.$t("user.register.pwdNumber")||"At least one number")+" ")],1)])]),r("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["new_password",{rules:[{required:!0,message:e.$t("user.resetPassword.passwordRequired")||"Please enter new password"},{validator:e.validateResetPassword}],validateTrigger:"blur"}],expression:"[\n 'new_password',\n {\n rules: [\n { required: true, message: $t('user.resetPassword.passwordRequired') || 'Please enter new password' },\n { validator: validateResetPassword }\n ],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",placeholder:e.$t("user.resetPassword.newPassword")||"New Password"},on:{focus:function(r){e.resetPwdFocused=!0},blur:function(r){e.resetPwdFocused=!1},change:e.checkResetPassword}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],2)],1),r("a-form-item",[r("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["confirm_password",{rules:[{required:!0,message:e.$t("user.resetPassword.confirmPasswordRequired")||"Please confirm password"},{validator:e.validateResetConfirmPassword}],validateTrigger:"blur"}],expression:"[\n 'confirm_password',\n {\n rules: [\n { required: true, message: $t('user.resetPassword.confirmPasswordRequired') || 'Please confirm password' },\n { validator: validateResetConfirmPassword }\n ],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",placeholder:e.$t("user.resetPassword.confirmPassword")||"Confirm Password"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),r("a-form-item",{staticStyle:{"margin-top":"24px"}},[r("a-button",{staticClass:"submit-button",attrs:{size:"large",type:"primary",htmlType:"submit",loading:e.resetLoading,block:""}},[e._v(e._s(e.$t("user.resetPassword.submit")||"Reset Password"))])],1),r("div",{staticClass:"auth-links"},[r("a",{on:{click:function(r){e.resetStep=1}}},[r("a-icon",{attrs:{type:"arrow-left"}}),e._v(" "+e._s(e.$t("user.resetPassword.back")||"Back")+" ")],1)])],1):e._e(),3===e.resetStep?r("div",{staticClass:"success-panel"},[r("a-result",{attrs:{status:"success",title:e.$t("user.resetPassword.successTitle")||"Password Reset Successful","sub-title":e.$t("user.resetPassword.successSubtitle")||"You can now login with your new password"},scopedSlots:e._u([{key:"extra",fn:function(){return[r("a-button",{attrs:{type:"primary"},on:{click:function(r){e.showResetModal=!1,e.activeTab="login"}}},[e._v(" "+e._s(e.$t("user.resetPassword.goToLogin")||"Go to Login")+" ")])]},proxy:!0}],null,!1,1952454462)})],1):e._e()],1)],1)},i=[function(){var e=this,r=e._self._c;return r("div",{staticClass:"auth-intro"},[r("div",{staticClass:"desc"},[e._v("AI driven quantitative insights for global markets")])])}],o=t(68285),a=t(76959),n=t(17654),l=t(57888),u=(t(74423),t(95353)),c=t(61145),d=t(20024),g=function(){var e=this,r=e._self._c;return e.enabled?r("div",{staticClass:"turnstile-container"},[r("div",{ref:"turnstileRef",attrs:{id:e.containerId}}),e.error?r("div",{staticClass:"turnstile-error"},[e._v(" "+e._s(e.error)+" "),r("a",{on:{click:e.reset}},[e._v(e._s(e.$t("user.security.retry")||"Retry"))])]):e._e()]):e._e()},m=[],h=!1,p=!1,f=[];function w(){return new Promise(function(e,r){if(h)e();else if(f.push({resolve:e,reject:r}),!p){p=!0;var t=document.createElement("script");t.src="https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit",t.async=!0,t.defer=!0,t.onload=function(){h=!0,f.forEach(function(e){return e.resolve()}),f.length=0},t.onerror=function(){p=!1,f.forEach(function(e){return e.reject(new Error("Failed to load Turnstile script"))}),f.length=0},document.head.appendChild(t)}})}var v={name:"Turnstile",props:{siteKey:{type:String,default:""},enabled:{type:Boolean,default:!0},theme:{type:String,default:"auto"},size:{type:String,default:"normal"}},data:function(){return{widgetId:null,token:null,error:null,containerId:"turnstile-".concat(Date.now(),"-").concat(Math.random().toString(36).substr(2,9))}},mounted:function(){this.enabled&&this.siteKey&&this.initTurnstile()},beforeDestroy:function(){this.cleanup()},watch:{siteKey:function(e){e&&this.enabled&&this.initTurnstile()},enabled:function(e){e&&this.siteKey?this.initTurnstile():this.cleanup()}},methods:{initTurnstile:function(){var e=this;return(0,n.A)((0,a.A)().m(function r(){return(0,a.A)().w(function(r){while(1)switch(r.p=r.n){case 0:return r.p=0,r.n=1,w();case 1:e.renderWidget(),r.n=3;break;case 2:r.p=2,r.v,e.error="Failed to load verification";case 3:return r.a(2)}},r,null,[[0,2]])}))()},renderWidget:function(){var e=this;window.turnstile&&this.$refs.turnstileRef&&(this.cleanup(),this.widgetId=window.turnstile.render(this.$refs.turnstileRef,{sitekey:this.siteKey,theme:this.theme,size:this.size,callback:function(r){e.token=r,e.error=null,e.$emit("success",r)},"error-callback":function(){e.token=null,e.error="Verification failed",e.$emit("error")},"expired-callback":function(){e.token=null,e.$emit("expired")}}))},reset:function(){this.token=null,this.error=null,window.turnstile&&null!==this.widgetId?window.turnstile.reset(this.widgetId):this.renderWidget()},getToken:function(){return this.token},cleanup:function(){if(window.turnstile&&null!==this.widgetId){try{window.turnstile.remove(this.widgetId)}catch(e){}this.widgetId=null}}}},b=v,C=t(845),y=(0,C.A)(b,g,m,!1,null,"20437450",null),$=y.exports,_=t(74053),T=t.n(_),L=t(41802),k={name:"Login",components:{Turnstile:$},data:function(){return{activeTab:"login",showLegal:!1,legalAgreed:!0,legalError:!1,securityConfig:{turnstile_enabled:!1,turnstile_site_key:"",registration_enabled:!0,oauth_google_enabled:!1,oauth_github_enabled:!1},oauthProcessing:!1,oauthError:null,referralCode:"",loginMethod:"password",loginForm:this.$form.createForm(this,{name:"loginForm"}),loginError:"",loginLoading:!1,loginTurnstileToken:null,codeLoginForm:this.$form.createForm(this,{name:"codeLoginForm"}),codeLoginError:"",codeLoginLoading:!1,codeLoginTurnstileToken:null,codeLoginSendingCode:!1,codeLoginCountdown:0,codeLoginCountdownTimer:null,registerForm:this.$form.createForm(this,{name:"registerForm"}),registerError:"",registerLoading:!1,registerTurnstileToken:null,registerSendingCode:!1,registerCountdown:0,registerCountdownTimer:null,regPwdFocused:!1,regHasMinLength:!1,regHasUppercase:!1,regHasLowercase:!1,regHasNumber:!1,showResetModal:!1,resetStep:1,resetForm:this.$form.createForm(this,{name:"resetForm"}),resetPwdForm:this.$form.createForm(this,{name:"resetPwdForm"}),resetError:"",resetLoading:!1,resetTurnstileToken:null,resetSendingCode:!1,resetCountdown:0,resetCountdownTimer:null,resetEmail:"",resetCode:"",resetPwdFocused:!1,resetHasMinLength:!1,resetHasUppercase:!1,resetHasLowercase:!1,resetHasNumber:!1}},computed:{hasOAuth:function(){return this.securityConfig.oauth_google_enabled||this.securityConfig.oauth_github_enabled},regPwdValid:function(){return this.regHasMinLength&&this.regHasUppercase&&this.regHasLowercase&&this.regHasNumber},resetPwdValid:function(){return this.resetHasMinLength&&this.resetHasUppercase&&this.resetHasLowercase&&this.resetHasNumber}},created:function(){var e=this;this.loadSecurityConfig(),this.handleOAuthCallback(),this.$nextTick(function(){e.extractReferralCode()})},watch:{"$route.query":function(){this.extractReferralCode()}},beforeDestroy:function(){this.codeLoginCountdownTimer&&clearInterval(this.codeLoginCountdownTimer),this.registerCountdownTimer&&clearInterval(this.registerCountdownTimer),this.resetCountdownTimer&&clearInterval(this.resetCountdownTimer)},methods:(0,l.A)((0,l.A)({},(0,u.i0)(["Login","Logout"])),{},{loadSecurityConfig:function(){var e=this;return(0,n.A)((0,a.A)().m(function r(){var t;return(0,a.A)().w(function(r){while(1)switch(r.p=r.n){case 0:return r.p=0,r.n=1,(0,d.getSecurityConfig)();case 1:t=r.v,1===t.code&&t.data&&(e.securityConfig=(0,l.A)((0,l.A)({},e.securityConfig),t.data)),r.n=3;break;case 2:r.p=2,r.v;case 3:return r.a(2)}},r,null,[[0,2]])}))()},extractReferralCode:function(){var e=new URLSearchParams(window.location.search),r=new URLSearchParams;if(window.location.hash){var t=window.location.hash.split("?");t.length>1&&(r=new URLSearchParams(t[1]))}var s=this.$route.query.ref||this.$route.query.referral_code;this.referralCode=s||e.get("ref")||e.get("referral_code")||r.get("ref")||r.get("referral_code")||"",this.referralCode&&this.securityConfig.registration_enabled&&(this.activeTab="register")},handleOAuthCallback:function(){var e=this,r=new URLSearchParams(window.location.search),t=new URLSearchParams(window.location.hash.split("?")[1]||""),s=r.get("oauth_token")||t.get("oauth_token"),i=r.get("oauth_error")||t.get("oauth_error");if(i)return this.oauthError=this.$t("user.oauth.error.".concat(i))||"OAuth error: ".concat(i),void window.history.replaceState({},document.title,window.location.pathname+window.location.hash.split("?")[0]);s&&(this.oauthProcessing=!0,T().set(L.Xh,s,(new Date).getTime()+6048e5),window.history.replaceState({},document.title,window.location.pathname+window.location.hash.split("?")[0]),this.$store.dispatch("GetInfo").then(function(){e.$router.push({path:"/"}),e.$notification.success({message:"Welcome",description:"".concat((0,c.Z$)(),", welcome back.")})}).catch(function(r){e.oauthProcessing=!1,e.oauthError="Failed to get user info",T().remove(L.Xh)}))},handleLogin:function(e){var r=this;e.preventDefault(),this.legalError=!1,this.legalAgreed?this.loginForm.validateFields(["username","password"],function(e,t){e||(r.loginLoading=!0,r.loginError="",r.Login((0,l.A)((0,l.A)({},t),{},{turnstile_token:r.loginTurnstileToken})).then(function(){r.$router.push({path:"/"}),r.$notification.success({message:"Welcome",description:"".concat((0,c.Z$)(),", welcome back.")})}).catch(function(e){var t=e.response||{},s=t.data||{};r.loginError=s.msg||e.message||"Login failed",r.$refs.loginTurnstile&&r.$refs.loginTurnstile.reset(),r.loginTurnstileToken=null}).finally(function(){r.loginLoading=!1}))}):this.legalError=!0},handleCodeLoginSendCode:function(){var e=this;return(0,n.A)((0,a.A)().m(function r(){return(0,a.A)().w(function(r){while(1)switch(r.n){case 0:e.codeLoginForm.validateFields(["email"],function(){var r=(0,n.A)((0,a.A)().m(function r(t,s){var i,o,n;return(0,a.A)().w(function(r){while(1)switch(r.p=r.n){case 0:if(!t){r.n=1;break}return r.a(2);case 1:return e.codeLoginSendingCode=!0,e.codeLoginError="",r.p=2,r.n=3,(0,d.sendVerificationCode)({email:s.email,type:"login",turnstile_token:e.codeLoginTurnstileToken});case 3:i=r.v,1===i.code?(e.$message.success(e.$t("user.login.codeSent")||"Verification code sent"),e.startCodeLoginCountdown()):e.codeLoginError=i.msg||"Failed to send code",r.n=5;break;case 4:r.p=4,n=r.v,e.codeLoginError=(null===(o=n.response)||void 0===o||null===(o=o.data)||void 0===o?void 0:o.msg)||"Failed to send code";case 5:return r.p=5,e.codeLoginSendingCode=!1,r.f(5);case 6:return r.a(2)}},r,null,[[2,4,5,6]])}));return function(e,t){return r.apply(this,arguments)}}());case 1:return r.a(2)}},r)}))()},startCodeLoginCountdown:function(){var e=this;this.codeLoginCountdown=60,this.codeLoginCountdownTimer=setInterval(function(){e.codeLoginCountdown--,e.codeLoginCountdown<=0&&(clearInterval(e.codeLoginCountdownTimer),e.codeLoginCountdownTimer=null)},1e3)},handleCodeLogin:function(e){var r=this;e.preventDefault(),this.legalError=!1,this.legalAgreed?this.codeLoginForm.validateFields(function(){var e=(0,n.A)((0,a.A)().m(function e(t,s){var i,n,u,g,m,h,p,f,w,v;return(0,a.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!t){e.n=1;break}return e.a(2);case 1:return r.codeLoginLoading=!0,r.codeLoginError="",e.p=2,e.n=3,(0,d.loginWithCode)({email:s.email,code:s.code,turnstile_token:r.codeLoginTurnstileToken,referral_code:r.referralCode});case 3:if(n=e.v,1!==n.code||null===(i=n.data)||void 0===i||!i.token){e.n=6;break}return u=(new Date).getTime()+6048e5,T().set(L.Xh,n.data.token,u),r.$store.commit("SET_TOKEN",n.data.token),n.data.userinfo&&(g=(0,l.A)({},n.data.userinfo),"undefined"===typeof g.is_demo&&(g.is_demo=!1),T().set(L.nc,g,u),r.$store.commit("SET_INFO",g),g.nickname?r.$store.commit("SET_NAME",{name:g.nickname,welcome:(0,c.Z$)()}):g.username&&r.$store.commit("SET_NAME",{name:g.username,welcome:(0,c.Z$)()}),g.avatar&&r.$store.commit("SET_AVATAR",g.avatar),m=[],m=g.role?Array.isArray(g.role)?g.role:"object"===(0,o.A)(g.role)?[g.role]:[{id:g.role,permissionList:[]}]:[{id:"default",permissionList:[]}],r.$store.commit("SET_ROLES",m),T().set(L.iK,m,u)),e.n=4,r.$nextTick();case 4:return T().get(L.Xh),h=r.$store.getters.roles,0===h.length&&(p=[{id:"default",permissionList:[]}],r.$store.commit("SET_ROLES",p),T().set(L.iK,p,u)),e.n=5,new Promise(function(e){return setTimeout(e,200)});case 5:r.$store.dispatch("ResetRoutes"),f=n.data.is_new_user,r.$router.push({path:"/"}).then(function(){r.$notification.success({message:f?r.$t("user.login.welcomeNew")||"Welcome!":"Welcome",description:f?r.$t("user.login.accountCreated")||"Your account has been created.":"".concat((0,c.Z$)(),", welcome back.")})}).catch(function(e){r.$notification.success({message:f?r.$t("user.login.welcomeNew")||"Welcome!":"Welcome",description:f?r.$t("user.login.accountCreated")||"Your account has been created.":"".concat((0,c.Z$)(),", welcome back.")})}),e.n=7;break;case 6:r.codeLoginError=n.msg||"Login failed",r.$refs.codeLoginTurnstile&&r.$refs.codeLoginTurnstile.reset(),r.codeLoginTurnstileToken=null;case 7:e.n=9;break;case 8:e.p=8,v=e.v,r.codeLoginError=(null===(w=v.response)||void 0===w||null===(w=w.data)||void 0===w?void 0:w.msg)||"Login failed",r.$refs.codeLoginTurnstile&&r.$refs.codeLoginTurnstile.reset(),r.codeLoginTurnstileToken=null;case 9:return e.p=9,r.codeLoginLoading=!1,e.f(9);case 10:return e.a(2)}},e,null,[[2,8,9,10]])}));return function(r,t){return e.apply(this,arguments)}}()):this.legalError=!0},checkRegPassword:function(e){var r=e.target.value||"";this.regHasMinLength=r.length>=8,this.regHasUppercase=/[A-Z]/.test(r),this.regHasLowercase=/[a-z]/.test(r),this.regHasNumber=/[0-9]/.test(r)},validateRegPassword:function(e,r,t){r?r.length<8?t(new Error(this.$t("user.register.pwdMinLength")||"At least 8 characters")):/[A-Z]/.test(r)?/[a-z]/.test(r)?/[0-9]/.test(r)?t():t(new Error(this.$t("user.register.pwdNumber")||"At least one number")):t(new Error(this.$t("user.register.pwdLowercase")||"At least one lowercase letter")):t(new Error(this.$t("user.register.pwdUppercase")||"At least one uppercase letter")):t()},validateRegConfirmPassword:function(e,r,t){var s=this.registerForm.getFieldValue("password");r&&r!==s?t(new Error(this.$t("user.register.passwordMismatch")||"Passwords do not match")):t()},handleRegisterSendCode:function(){var e=this;return(0,n.A)((0,a.A)().m(function r(){return(0,a.A)().w(function(r){while(1)switch(r.n){case 0:e.registerForm.validateFields(["email"],function(){var r=(0,n.A)((0,a.A)().m(function r(t,s){var i,o,n;return(0,a.A)().w(function(r){while(1)switch(r.p=r.n){case 0:if(!t){r.n=1;break}return r.a(2);case 1:return e.registerSendingCode=!0,e.registerError="",r.p=2,r.n=3,(0,d.sendVerificationCode)({email:s.email,type:"register",turnstile_token:e.registerTurnstileToken});case 3:i=r.v,1===i.code?(e.$message.success(e.$t("user.register.codeSent")||"Verification code sent"),e.startRegisterCountdown()):e.registerError=i.msg||"Failed to send code",r.n=5;break;case 4:r.p=4,n=r.v,e.registerError=(null===(o=n.response)||void 0===o||null===(o=o.data)||void 0===o?void 0:o.msg)||"Failed to send code";case 5:return r.p=5,e.registerSendingCode=!1,r.f(5);case 6:return r.a(2)}},r,null,[[2,4,5,6]])}));return function(e,t){return r.apply(this,arguments)}}());case 1:return r.a(2)}},r)}))()},startRegisterCountdown:function(){var e=this;this.registerCountdown=60,this.registerCountdownTimer=setInterval(function(){e.registerCountdown--,e.registerCountdown<=0&&(clearInterval(e.registerCountdownTimer),e.registerCountdownTimer=null)},1e3)},handleRegister:function(e){var r=this;e.preventDefault(),this.legalError=!1,this.legalAgreed?this.registerForm.validateFields(function(){var e=(0,n.A)((0,a.A)().m(function e(t,s){var i,n,u,g,m,h,p,f,w;return(0,a.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!t){e.n=1;break}return e.a(2);case 1:return r.registerLoading=!0,r.registerError="",e.p=2,e.n=3,(0,d.register)({email:s.email,code:s.code,username:s.username,password:s.password,turnstile_token:r.registerTurnstileToken,referral_code:r.referralCode});case 3:if(i=e.v,1!==i.code){e.n=8;break}if(r.$message.success(r.$t("user.register.success")||"Registration successful"),null===(n=i.data)||void 0===n||!n.token){e.n=6;break}return u=(new Date).getTime()+6048e5,T().set(L.Xh,i.data.token,u),r.$store.commit("SET_TOKEN",i.data.token),i.data.userinfo&&(g=(0,l.A)({},i.data.userinfo),"undefined"===typeof g.is_demo&&(g.is_demo=!1),T().set(L.nc,g,u),r.$store.commit("SET_INFO",g),g.nickname?r.$store.commit("SET_NAME",{name:g.nickname,welcome:(0,c.Z$)()}):g.username&&r.$store.commit("SET_NAME",{name:g.username,welcome:(0,c.Z$)()}),g.avatar&&r.$store.commit("SET_AVATAR",g.avatar),m=[],m=g.role?Array.isArray(g.role)?g.role:"object"===(0,o.A)(g.role)?[g.role]:[{id:g.role,permissionList:[]}]:[{id:"default",permissionList:[]}],r.$store.commit("SET_ROLES",m),T().set(L.iK,m,u)),e.n=4,r.$nextTick();case 4:return T().get(L.Xh),h=r.$store.getters.roles,0===h.length&&(p=[{id:"default",permissionList:[]}],r.$store.commit("SET_ROLES",p),T().set(L.iK,p,u)),e.n=5,new Promise(function(e){return setTimeout(e,200)});case 5:r.$store.dispatch("ResetRoutes"),r.$router.push({path:"/"}).then(function(){r.$notification.success({message:"Welcome",description:"".concat((0,c.Z$)(),", welcome to QuantDinger!")})}).catch(function(e){r.$notification.success({message:"Welcome",description:"".concat((0,c.Z$)(),", welcome to QuantDinger!")})}),e.n=7;break;case 6:r.activeTab="login",r.$message.info(r.$t("user.register.pleaseLogin")||"Please login with your new account");case 7:e.n=9;break;case 8:r.registerError=i.msg||"Registration failed",r.$refs.registerTurnstile&&r.$refs.registerTurnstile.reset(),r.registerTurnstileToken=null;case 9:e.n=11;break;case 10:e.p=10,w=e.v,r.registerError=(null===(f=w.response)||void 0===f||null===(f=f.data)||void 0===f?void 0:f.msg)||"Registration failed",r.$refs.registerTurnstile&&r.$refs.registerTurnstile.reset(),r.registerTurnstileToken=null;case 11:return e.p=11,r.registerLoading=!1,e.f(11);case 12:return e.a(2)}},e,null,[[2,10,11,12]])}));return function(r,t){return e.apply(this,arguments)}}()):this.legalError=!0},resetResetModal:function(){this.resetStep=1,this.resetError="",this.resetEmail="",this.resetCode="",this.resetCountdown=0,this.resetCountdownTimer&&(clearInterval(this.resetCountdownTimer),this.resetCountdownTimer=null)},handleResetSendCode:function(){var e=this;return(0,n.A)((0,a.A)().m(function r(){return(0,a.A)().w(function(r){while(1)switch(r.n){case 0:e.resetForm.validateFields(["email"],function(){var r=(0,n.A)((0,a.A)().m(function r(t,s){var i,o,n;return(0,a.A)().w(function(r){while(1)switch(r.p=r.n){case 0:if(!t){r.n=1;break}return r.a(2);case 1:return e.resetSendingCode=!0,e.resetError="",r.p=2,r.n=3,(0,d.sendVerificationCode)({email:s.email,type:"reset_password",turnstile_token:e.resetTurnstileToken});case 3:i=r.v,1===i.code?(e.$message.success(e.$t("user.resetPassword.codeSent")||"Verification code sent"),e.startResetCountdown()):e.resetError=i.msg||"Failed to send code",r.n=5;break;case 4:r.p=4,n=r.v,e.resetError=(null===(o=n.response)||void 0===o||null===(o=o.data)||void 0===o?void 0:o.msg)||"Failed to send code";case 5:return r.p=5,e.resetSendingCode=!1,r.f(5);case 6:return r.a(2)}},r,null,[[2,4,5,6]])}));return function(e,t){return r.apply(this,arguments)}}());case 1:return r.a(2)}},r)}))()},startResetCountdown:function(){var e=this;this.resetCountdown=60,this.resetCountdownTimer=setInterval(function(){e.resetCountdown--,e.resetCountdown<=0&&(clearInterval(e.resetCountdownTimer),e.resetCountdownTimer=null)},1e3)},handleResetVerify:function(e){var r=this;e.preventDefault(),this.resetError="",this.resetForm.validateFields(function(e,t){e||(r.resetEmail=t.email,r.resetCode=t.code,r.resetStep=2)})},checkResetPassword:function(e){var r=e.target.value||"";this.resetHasMinLength=r.length>=8,this.resetHasUppercase=/[A-Z]/.test(r),this.resetHasLowercase=/[a-z]/.test(r),this.resetHasNumber=/[0-9]/.test(r)},validateResetPassword:function(e,r,t){r?r.length<8?t(new Error(this.$t("user.register.pwdMinLength")||"At least 8 characters")):/[A-Z]/.test(r)?/[a-z]/.test(r)?/[0-9]/.test(r)?t():t(new Error(this.$t("user.register.pwdNumber")||"At least one number")):t(new Error(this.$t("user.register.pwdLowercase")||"At least one lowercase letter")):t(new Error(this.$t("user.register.pwdUppercase")||"At least one uppercase letter")):t()},validateResetConfirmPassword:function(e,r,t){var s=this.resetPwdForm.getFieldValue("new_password");r&&r!==s?t(new Error(this.$t("user.register.passwordMismatch")||"Passwords do not match")):t()},handleResetPassword:function(e){var r=this;return(0,n.A)((0,a.A)().m(function t(){return(0,a.A)().w(function(t){while(1)switch(t.n){case 0:e.preventDefault(),r.resetError="",r.resetPwdForm.validateFields(function(){var e=(0,n.A)((0,a.A)().m(function e(t,s){var i,o,n,l,u;return(0,a.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!t){e.n=1;break}return e.a(2);case 1:return r.resetLoading=!0,e.p=2,e.n=3,(0,d.resetPassword)({email:r.resetEmail,code:r.resetCode,new_password:s.new_password,turnstile_token:r.resetTurnstileToken});case 3:i=e.v,1===i.code?r.resetStep=3:(r.resetError=i.msg||"Failed to reset password",(null!==(o=i.msg)&&void 0!==o&&o.includes("code")||null!==(n=i.msg)&&void 0!==n&&n.includes("expired"))&&(r.resetStep=1)),e.n=5;break;case 4:e.p=4,u=e.v,r.resetError=(null===(l=u.response)||void 0===l||null===(l=l.data)||void 0===l?void 0:l.msg)||"Failed to reset password";case 5:return e.p=5,r.resetLoading=!1,e.f(5);case 6:return e.a(2)}},e,null,[[2,4,5,6]])}));return function(r,t){return e.apply(this,arguments)}}());case 1:return t.a(2)}},t)}))()},handleGoogleLogin:function(){window.location.href=(0,d.getGoogleOAuthUrl)()},handleGitHubLogin:function(){window.location.href=(0,d.getGitHubOAuthUrl)()}})},P=k,A=(0,C.A)(P,s,i,!1,null,"de9678f6",null),E=A.exports},20024:function(e,r,t){t.r(r),t.d(r,{changePassword:function(){return m},getGitHubOAuthUrl:function(){return p},getGoogleOAuthUrl:function(){return h},getSecurityConfig:function(){return o},getUserInfo:function(){return l},login:function(){return a},loginWithCode:function(){return c},logout:function(){return n},register:function(){return d},resetPassword:function(){return g},sendVerificationCode:function(){return u}});var s=t(76471);function i(e){var r="/api".trim(),t=e.startsWith("/")?e:"/".concat(e);if(!r)return t;var s=r.replace(/\/+$/,"");return s.endsWith("/api")&&t.startsWith("/api/")?s+t.slice(4):s+t}function o(){return(0,s.Ay)({url:"/api/auth/security-config",method:"get"})}function a(e){return(0,s.Ay)({url:"/api/auth/login",method:"post",data:e})}function n(){return(0,s.Ay)({url:"/api/auth/logout",method:"post"})}function l(){return(0,s.Ay)({url:"/api/auth/info",method:"get"})}function u(e){return(0,s.Ay)({url:"/api/auth/send-code",method:"post",data:e})}function c(e){return(0,s.Ay)({url:"/api/auth/login-code",method:"post",data:e})}function d(e){return(0,s.Ay)({url:"/api/auth/register",method:"post",data:e})}function g(e){return(0,s.Ay)({url:"/api/auth/reset-password",method:"post",data:e})}function m(e){return(0,s.Ay)({url:"/api/auth/change-password",method:"post",data:e})}function h(){return i("/api/auth/oauth/google")}function p(){return i("/api/auth/oauth/github")}}}]); \ No newline at end of file diff --git a/frontend/dist/js/user.99c2334e.js b/frontend/dist/js/user.99c2334e.js new file mode 100644 index 0000000..583f833 --- /dev/null +++ b/frontend/dist/js/user.99c2334e.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[806,824],{65124:function(e,r,t){t.r(r),t.d(r,{default:function(){return E}});var s=function(){var e=this,r=e._self._c;return r("div",{staticClass:"main"},[e._m(0),r("div",{staticClass:"auth-card"},[e.oauthProcessing?r("div",{staticClass:"oauth-processing"},[r("a-spin",{attrs:{size:"large"}}),r("p",[e._v(e._s(e.$t("user.oauth.processing")||"Processing login..."))])],1):e._e(),r("div",{directives:[{name:"show",rawName:"v-show",value:!e.oauthProcessing,expression:"!oauthProcessing"}]},[r("a-tabs",{attrs:{animated:!1},model:{value:e.activeTab,callback:function(r){e.activeTab=r},expression:"activeTab"}},[r("a-tab-pane",{key:"login",attrs:{tab:e.$t("user.login.tab")||"Login"}},[r("div",{staticClass:"login-method-switch"},[r("a",{class:{active:"password"===e.loginMethod},on:{click:function(r){e.loginMethod="password"}}},[e._v(e._s(e.$t("user.login.methodPassword")||"Password"))]),r("a-divider",{attrs:{type:"vertical"}}),r("a",{class:{active:"code"===e.loginMethod},on:{click:function(r){e.loginMethod="code"}}},[e._v(e._s(e.$t("user.login.methodCode")||"Email Code"))])],1),r("a-form",{directives:[{name:"show",rawName:"v-show",value:"password"===e.loginMethod,expression:"loginMethod === 'password'"}],ref:"formLogin",staticClass:"auth-form",attrs:{id:"formLogin",form:e.loginForm},on:{submit:e.handleLogin}},[e.loginError?r("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{type:"error",showIcon:"",message:e.loginError}}):e._e(),e.oauthError?r("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{type:"error",showIcon:"",message:e.oauthError}}):e._e(),r("a-form-item",[r("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["username",{rules:[{required:!0,message:e.$t("user.login.usernameRequired")||"Please enter username"}],validateTrigger:"blur"}],expression:"[\n 'username',\n {rules: [{ required: true, message: $t('user.login.usernameRequired') || 'Please enter username' }], validateTrigger: 'blur'}\n ]"}],attrs:{size:"large",type:"text",placeholder:e.$t("user.login.username")||"Username"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"user"},slot:"prefix"})],1)],1),r("a-form-item",[r("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["password",{rules:[{required:!0,message:e.$t("user.login.passwordRequired")||"Please enter password"}],validateTrigger:"blur"}],expression:"[\n 'password',\n {rules: [{ required: true, message: $t('user.login.passwordRequired') || 'Please enter password' }], validateTrigger: 'blur'}\n ]"}],attrs:{size:"large",placeholder:e.$t("user.login.password")||"Password"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),r("Turnstile",{ref:"loginTurnstile",attrs:{siteKey:e.securityConfig.turnstile_site_key,enabled:e.securityConfig.turnstile_enabled},on:{success:function(r){return e.loginTurnstileToken=r},error:function(){return e.loginTurnstileToken=null}}}),r("a-form-item",{staticStyle:{"margin-top":"24px"}},[r("a-button",{staticClass:"submit-button",attrs:{size:"large",type:"primary",htmlType:"submit",loading:e.loginLoading,disabled:e.loginLoading||e.securityConfig.turnstile_enabled&&!e.loginTurnstileToken,block:""}},[e._v(e._s(e.$t("user.login.submit")||"Login"))])],1),r("div",{staticClass:"auth-links"},[r("a",{on:{click:function(r){e.showResetModal=!0}}},[e._v(e._s(e.$t("user.login.forgotPassword")||"Forgot Password?"))])])],1),r("a-form",{directives:[{name:"show",rawName:"v-show",value:"code"===e.loginMethod,expression:"loginMethod === 'code'"}],ref:"formCodeLogin",staticClass:"auth-form",attrs:{id:"formCodeLogin",form:e.codeLoginForm},on:{submit:e.handleCodeLogin}},[e.codeLoginError?r("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{type:"error",showIcon:"",message:e.codeLoginError}}):e._e(),e.oauthError?r("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{type:"error",showIcon:"",message:e.oauthError}}):e._e(),r("a-form-item",[r("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["email",{rules:[{required:!0,message:e.$t("user.login.emailRequired")||"Please enter email"},{type:"email",message:e.$t("user.login.emailInvalid")||"Invalid email format"}],validateTrigger:"blur"}],expression:"[\n 'email',\n {\n rules: [\n { required: true, message: $t('user.login.emailRequired') || 'Please enter email' },\n { type: 'email', message: $t('user.login.emailInvalid') || 'Invalid email format' }\n ],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",type:"email",placeholder:e.$t("user.login.email")||"Email"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"mail"},slot:"prefix"})],1)],1),r("a-form-item",[r("a-row",{attrs:{gutter:12}},[r("a-col",{attrs:{span:16}},[r("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["code",{rules:[{required:!0,message:e.$t("user.login.codeRequired")||"Please enter verification code"}],validateTrigger:"blur"}],expression:"[\n 'code',\n {\n rules: [{ required: true, message: $t('user.login.codeRequired') || 'Please enter verification code' }],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",placeholder:e.$t("user.login.verificationCode")||"Verification Code"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"safety-certificate"},slot:"prefix"})],1)],1),r("a-col",{attrs:{span:8}},[r("a-button",{attrs:{size:"large",block:"",loading:e.codeLoginSendingCode,disabled:e.codeLoginSendingCode||e.codeLoginCountdown>0},on:{click:e.handleCodeLoginSendCode}},[e._v(" "+e._s(e.codeLoginCountdown>0?"".concat(e.codeLoginCountdown,"s"):e.$t("user.login.sendCode")||"Send")+" ")])],1)],1)],1),r("Turnstile",{ref:"codeLoginTurnstile",attrs:{siteKey:e.securityConfig.turnstile_site_key,enabled:e.securityConfig.turnstile_enabled},on:{success:function(r){return e.codeLoginTurnstileToken=r},error:function(){return e.codeLoginTurnstileToken=null}}}),r("a-form-item",{staticStyle:{"margin-top":"24px"}},[r("a-button",{staticClass:"submit-button",attrs:{size:"large",type:"primary",htmlType:"submit",loading:e.codeLoginLoading,disabled:e.codeLoginLoading||e.securityConfig.turnstile_enabled&&!e.codeLoginTurnstileToken,block:""}},[e._v(e._s(e.$t("user.login.submit")||"Login"))])],1),r("div",{staticClass:"code-login-hint"},[r("a-icon",{attrs:{type:"info-circle"}}),r("span",[e._v(e._s(e.$t("user.login.codeLoginHint")||"New users will be automatically registered"))])],1)],1),e.hasOAuth?r("div",{staticClass:"oauth-section"},[r("a-divider",[e._v(e._s(e.$t("user.login.orLoginWith")||"Or login with"))]),r("div",{staticClass:"oauth-buttons"},[e.securityConfig.oauth_google_enabled?r("a-button",{staticClass:"oauth-btn google-btn",on:{click:e.handleGoogleLogin}},[r("svg",{staticClass:"oauth-icon",attrs:{viewBox:"0 0 24 24",width:"18",height:"18"}},[r("path",{attrs:{fill:"#4285F4",d:"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z"}}),r("path",{attrs:{fill:"#34A853",d:"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z"}}),r("path",{attrs:{fill:"#FBBC05",d:"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z"}}),r("path",{attrs:{fill:"#EA4335",d:"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z"}})]),e._v(" Google ")]):e._e(),e.securityConfig.oauth_github_enabled?r("a-button",{staticClass:"oauth-btn github-btn",on:{click:e.handleGitHubLogin}},[r("a-icon",{attrs:{type:"github"}}),e._v(" GitHub ")],1):e._e()],1)],1):e._e()],1),e.securityConfig.registration_enabled?r("a-tab-pane",{key:"register",attrs:{tab:e.$t("user.register.tab")||"Register"}},[r("a-form",{ref:"formRegister",staticClass:"auth-form",attrs:{id:"formRegister",form:e.registerForm},on:{submit:e.handleRegister}},[e.registerError?r("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{type:"error",showIcon:"",message:e.registerError}}):e._e(),r("a-form-item",[r("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["email",{rules:[{required:!0,message:e.$t("user.register.emailRequired")||"Please enter email"},{type:"email",message:e.$t("user.register.emailInvalid")||"Invalid email format"}],validateTrigger:"blur"}],expression:"[\n 'email',\n {\n rules: [\n { required: true, message: $t('user.register.emailRequired') || 'Please enter email' },\n { type: 'email', message: $t('user.register.emailInvalid') || 'Invalid email format' }\n ],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",type:"email",placeholder:e.$t("user.register.email")||"Email"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"mail"},slot:"prefix"})],1)],1),r("a-form-item",[r("a-row",{attrs:{gutter:12}},[r("a-col",{attrs:{span:16}},[r("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["code",{rules:[{required:!0,message:e.$t("user.register.codeRequired")||"Please enter verification code"}],validateTrigger:"blur"}],expression:"[\n 'code',\n {\n rules: [{ required: true, message: $t('user.register.codeRequired') || 'Please enter verification code' }],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",placeholder:e.$t("user.register.verificationCode")||"Verification Code"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"safety-certificate"},slot:"prefix"})],1)],1),r("a-col",{attrs:{span:8}},[r("a-button",{attrs:{size:"large",block:"",loading:e.registerSendingCode,disabled:e.registerSendingCode||e.registerCountdown>0},on:{click:e.handleRegisterSendCode}},[e._v(" "+e._s(e.registerCountdown>0?"".concat(e.registerCountdown,"s"):e.$t("user.register.sendCode")||"Send")+" ")])],1)],1)],1),r("a-form-item",[r("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["username",{rules:[{required:!0,message:e.$t("user.register.usernameRequired")||"Please enter username"},{min:3,max:30,message:e.$t("user.register.usernameLength")||"Username must be 3-30 characters"},{pattern:/^[a-zA-Z][a-zA-Z0-9_]*$/,message:e.$t("user.register.usernamePattern")||"Start with letter, letters/numbers/underscore only"}],validateTrigger:"blur"}],expression:"[\n 'username',\n {\n rules: [\n { required: true, message: $t('user.register.usernameRequired') || 'Please enter username' },\n { min: 3, max: 30, message: $t('user.register.usernameLength') || 'Username must be 3-30 characters' },\n { pattern: /^[a-zA-Z][a-zA-Z0-9_]*$/, message: $t('user.register.usernamePattern') || 'Start with letter, letters/numbers/underscore only' }\n ],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",placeholder:e.$t("user.register.username")||"Username"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"user"},slot:"prefix"})],1)],1),r("a-form-item",[r("a-popover",{attrs:{placement:"rightTop",trigger:["focus"],visible:e.regPwdFocused&&!e.regPwdValid}},[r("template",{slot:"content"},[r("div",{staticClass:"password-requirements"},[r("div",{class:{valid:e.regHasMinLength}},[r("a-icon",{attrs:{type:e.regHasMinLength?"check-circle":"close-circle"}}),e._v(" "+e._s(e.$t("user.register.pwdMinLength")||"At least 8 characters")+" ")],1),r("div",{class:{valid:e.regHasUppercase}},[r("a-icon",{attrs:{type:e.regHasUppercase?"check-circle":"close-circle"}}),e._v(" "+e._s(e.$t("user.register.pwdUppercase")||"At least one uppercase letter")+" ")],1),r("div",{class:{valid:e.regHasLowercase}},[r("a-icon",{attrs:{type:e.regHasLowercase?"check-circle":"close-circle"}}),e._v(" "+e._s(e.$t("user.register.pwdLowercase")||"At least one lowercase letter")+" ")],1),r("div",{class:{valid:e.regHasNumber}},[r("a-icon",{attrs:{type:e.regHasNumber?"check-circle":"close-circle"}}),e._v(" "+e._s(e.$t("user.register.pwdNumber")||"At least one number")+" ")],1)])]),r("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["password",{rules:[{required:!0,message:e.$t("user.register.passwordRequired")||"Please enter password"},{validator:e.validateRegPassword}],validateTrigger:"blur"}],expression:"[\n 'password',\n {\n rules: [\n { required: true, message: $t('user.register.passwordRequired') || 'Please enter password' },\n { validator: validateRegPassword }\n ],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",placeholder:e.$t("user.register.password")||"Password"},on:{focus:function(r){e.regPwdFocused=!0},blur:function(r){e.regPwdFocused=!1},change:e.checkRegPassword}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],2)],1),r("a-form-item",[r("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["confirmPassword",{rules:[{required:!0,message:e.$t("user.register.confirmPasswordRequired")||"Please confirm password"},{validator:e.validateRegConfirmPassword}],validateTrigger:"blur"}],expression:"[\n 'confirmPassword',\n {\n rules: [\n { required: true, message: $t('user.register.confirmPasswordRequired') || 'Please confirm password' },\n { validator: validateRegConfirmPassword }\n ],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",placeholder:e.$t("user.register.confirmPassword")||"Confirm Password"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),r("Turnstile",{ref:"registerTurnstile",attrs:{siteKey:e.securityConfig.turnstile_site_key,enabled:e.securityConfig.turnstile_enabled},on:{success:function(r){return e.registerTurnstileToken=r},error:function(){return e.registerTurnstileToken=null}}}),r("a-form-item",{staticStyle:{"margin-top":"24px"}},[r("a-button",{staticClass:"submit-button",attrs:{size:"large",type:"primary",htmlType:"submit",loading:e.registerLoading,disabled:e.registerLoading||e.securityConfig.turnstile_enabled&&!e.registerTurnstileToken,block:""}},[e._v(e._s(e.$t("user.register.submit")||"Create Account"))])],1)],1)],1):e._e()],1),r("div",{staticClass:"legal-wrap"},[r("div",{staticClass:"legal-header"},[r("div",{staticClass:"legal-title"},[e._v(e._s(e.$t("user.login.legal.title")))]),r("a",{staticClass:"legal-toggle",on:{click:function(r){e.showLegal=!e.showLegal}}},[e._v(" "+e._s(e.showLegal?e.$t("user.login.legal.collapse"):e.$t("user.login.legal.view"))+" ")])]),r("div",{directives:[{name:"show",rawName:"v-show",value:e.showLegal,expression:"showLegal"}],staticClass:"legal-content"},[e._v(" "+e._s(e.$t("user.login.legal.content"))+" ")]),r("div",{staticClass:"legal-agree"},[r("a-checkbox",{model:{value:e.legalAgreed,callback:function(r){e.legalAgreed=r},expression:"legalAgreed"}},[e._v(" "+e._s(e.$t("user.login.legal.agree"))+" ")]),e.legalError?r("div",{staticClass:"legal-error"},[e._v(e._s(e.$t("user.login.legal.required")))]):e._e()],1)])],1)]),r("a-modal",{attrs:{title:e.$t("user.resetPassword.title")||"Reset Password",footer:null,width:420,destroyOnClose:!0},on:{cancel:e.resetResetModal},model:{value:e.showResetModal,callback:function(r){e.showResetModal=r},expression:"showResetModal"}},[1===e.resetStep?r("a-form",{staticClass:"auth-form",attrs:{form:e.resetForm},on:{submit:e.handleResetVerify}},[e.resetError?r("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{type:"error",showIcon:"",message:e.resetError}}):e._e(),r("a-form-item",[r("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["email",{rules:[{required:!0,message:e.$t("user.resetPassword.emailRequired")||"Please enter email"},{type:"email",message:e.$t("user.resetPassword.emailInvalid")||"Invalid email format"}],validateTrigger:"blur"}],expression:"[\n 'email',\n {\n rules: [\n { required: true, message: $t('user.resetPassword.emailRequired') || 'Please enter email' },\n { type: 'email', message: $t('user.resetPassword.emailInvalid') || 'Invalid email format' }\n ],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",type:"email",placeholder:e.$t("user.resetPassword.email")||"Email"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"mail"},slot:"prefix"})],1)],1),r("a-form-item",[r("a-row",{attrs:{gutter:12}},[r("a-col",{attrs:{span:16}},[r("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["code",{rules:[{required:!0,message:e.$t("user.resetPassword.codeRequired")||"Please enter verification code"}],validateTrigger:"blur"}],expression:"[\n 'code',\n {\n rules: [{ required: true, message: $t('user.resetPassword.codeRequired') || 'Please enter verification code' }],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",placeholder:e.$t("user.resetPassword.verificationCode")||"Verification Code"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"safety-certificate"},slot:"prefix"})],1)],1),r("a-col",{attrs:{span:8}},[r("a-button",{attrs:{size:"large",block:"",loading:e.resetSendingCode,disabled:e.resetSendingCode||e.resetCountdown>0},on:{click:e.handleResetSendCode}},[e._v(" "+e._s(e.resetCountdown>0?"".concat(e.resetCountdown,"s"):e.$t("user.resetPassword.sendCode")||"Send")+" ")])],1)],1)],1),r("Turnstile",{ref:"resetTurnstile",attrs:{siteKey:e.securityConfig.turnstile_site_key,enabled:e.securityConfig.turnstile_enabled},on:{success:function(r){return e.resetTurnstileToken=r},error:function(){return e.resetTurnstileToken=null}}}),r("a-form-item",{staticStyle:{"margin-top":"24px"}},[r("a-button",{staticClass:"submit-button",attrs:{size:"large",type:"primary",htmlType:"submit",disabled:e.securityConfig.turnstile_enabled&&!e.resetTurnstileToken,block:""}},[e._v(e._s(e.$t("user.resetPassword.next")||"Next"))])],1)],1):e._e(),2===e.resetStep?r("a-form",{staticClass:"auth-form",attrs:{form:e.resetPwdForm},on:{submit:e.handleResetPassword}},[e.resetError?r("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{type:"error",showIcon:"",message:e.resetError}}):e._e(),r("div",{staticClass:"email-display"},[r("span",[e._v(e._s(e.$t("user.resetPassword.resettingFor")||"Resetting for")+":")]),r("strong",[e._v(e._s(e.resetEmail))])]),r("a-form-item",[r("a-popover",{attrs:{placement:"rightTop",trigger:["focus"],visible:e.resetPwdFocused&&!e.resetPwdValid}},[r("template",{slot:"content"},[r("div",{staticClass:"password-requirements"},[r("div",{class:{valid:e.resetHasMinLength}},[r("a-icon",{attrs:{type:e.resetHasMinLength?"check-circle":"close-circle"}}),e._v(" "+e._s(e.$t("user.register.pwdMinLength")||"At least 8 characters")+" ")],1),r("div",{class:{valid:e.resetHasUppercase}},[r("a-icon",{attrs:{type:e.resetHasUppercase?"check-circle":"close-circle"}}),e._v(" "+e._s(e.$t("user.register.pwdUppercase")||"At least one uppercase letter")+" ")],1),r("div",{class:{valid:e.resetHasLowercase}},[r("a-icon",{attrs:{type:e.resetHasLowercase?"check-circle":"close-circle"}}),e._v(" "+e._s(e.$t("user.register.pwdLowercase")||"At least one lowercase letter")+" ")],1),r("div",{class:{valid:e.resetHasNumber}},[r("a-icon",{attrs:{type:e.resetHasNumber?"check-circle":"close-circle"}}),e._v(" "+e._s(e.$t("user.register.pwdNumber")||"At least one number")+" ")],1)])]),r("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["new_password",{rules:[{required:!0,message:e.$t("user.resetPassword.passwordRequired")||"Please enter new password"},{validator:e.validateResetPassword}],validateTrigger:"blur"}],expression:"[\n 'new_password',\n {\n rules: [\n { required: true, message: $t('user.resetPassword.passwordRequired') || 'Please enter new password' },\n { validator: validateResetPassword }\n ],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",placeholder:e.$t("user.resetPassword.newPassword")||"New Password"},on:{focus:function(r){e.resetPwdFocused=!0},blur:function(r){e.resetPwdFocused=!1},change:e.checkResetPassword}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],2)],1),r("a-form-item",[r("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["confirm_password",{rules:[{required:!0,message:e.$t("user.resetPassword.confirmPasswordRequired")||"Please confirm password"},{validator:e.validateResetConfirmPassword}],validateTrigger:"blur"}],expression:"[\n 'confirm_password',\n {\n rules: [\n { required: true, message: $t('user.resetPassword.confirmPasswordRequired') || 'Please confirm password' },\n { validator: validateResetConfirmPassword }\n ],\n validateTrigger: 'blur'\n }\n ]"}],attrs:{size:"large",placeholder:e.$t("user.resetPassword.confirmPassword")||"Confirm Password"}},[r("a-icon",{style:{color:"rgba(0,0,0,.25)"},attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),r("a-form-item",{staticStyle:{"margin-top":"24px"}},[r("a-button",{staticClass:"submit-button",attrs:{size:"large",type:"primary",htmlType:"submit",loading:e.resetLoading,block:""}},[e._v(e._s(e.$t("user.resetPassword.submit")||"Reset Password"))])],1),r("div",{staticClass:"auth-links"},[r("a",{on:{click:function(r){e.resetStep=1}}},[r("a-icon",{attrs:{type:"arrow-left"}}),e._v(" "+e._s(e.$t("user.resetPassword.back")||"Back")+" ")],1)])],1):e._e(),3===e.resetStep?r("div",{staticClass:"success-panel"},[r("a-result",{attrs:{status:"success",title:e.$t("user.resetPassword.successTitle")||"Password Reset Successful","sub-title":e.$t("user.resetPassword.successSubtitle")||"You can now login with your new password"},scopedSlots:e._u([{key:"extra",fn:function(){return[r("a-button",{attrs:{type:"primary"},on:{click:function(r){e.showResetModal=!1,e.activeTab="login"}}},[e._v(" "+e._s(e.$t("user.resetPassword.goToLogin")||"Go to Login")+" ")])]},proxy:!0}],null,!1,1952454462)})],1):e._e()],1)],1)},i=[function(){var e=this,r=e._self._c;return r("div",{staticClass:"auth-intro"},[r("div",{staticClass:"desc"},[e._v("AI driven quantitative insights for global markets")])])}],o=t(44735),a=t(81127),n=t(56252),l=t(76338),u=(t(74423),t(95353)),c=t(67569),d=t(95824),g=function(){var e=this,r=e._self._c;return e.enabled?r("div",{staticClass:"turnstile-container"},[r("div",{ref:"turnstileRef",attrs:{id:e.containerId}}),e.error?r("div",{staticClass:"turnstile-error"},[e._v(" "+e._s(e.error)+" "),r("a",{on:{click:e.reset}},[e._v(e._s(e.$t("user.security.retry")||"Retry"))])]):e._e()]):e._e()},m=[],h=!1,p=!1,f=[];function w(){return new Promise(function(e,r){if(h)e();else if(f.push({resolve:e,reject:r}),!p){p=!0;var t=document.createElement("script");t.src="https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit",t.async=!0,t.defer=!0,t.onload=function(){h=!0,f.forEach(function(e){return e.resolve()}),f.length=0},t.onerror=function(){p=!1,f.forEach(function(e){return e.reject(new Error("Failed to load Turnstile script"))}),f.length=0},document.head.appendChild(t)}})}var v={name:"Turnstile",props:{siteKey:{type:String,default:""},enabled:{type:Boolean,default:!0},theme:{type:String,default:"auto"},size:{type:String,default:"normal"}},data:function(){return{widgetId:null,token:null,error:null,containerId:"turnstile-".concat(Date.now(),"-").concat(Math.random().toString(36).substr(2,9))}},mounted:function(){this.enabled&&this.siteKey&&this.initTurnstile()},beforeDestroy:function(){this.cleanup()},watch:{siteKey:function(e){e&&this.enabled&&this.initTurnstile()},enabled:function(e){e&&this.siteKey?this.initTurnstile():this.cleanup()}},methods:{initTurnstile:function(){var e=this;return(0,n.A)((0,a.A)().m(function r(){return(0,a.A)().w(function(r){while(1)switch(r.p=r.n){case 0:return r.p=0,r.n=1,w();case 1:e.renderWidget(),r.n=3;break;case 2:r.p=2,r.v,e.error="Failed to load verification";case 3:return r.a(2)}},r,null,[[0,2]])}))()},renderWidget:function(){var e=this;window.turnstile&&this.$refs.turnstileRef&&(this.cleanup(),this.widgetId=window.turnstile.render(this.$refs.turnstileRef,{sitekey:this.siteKey,theme:this.theme,size:this.size,callback:function(r){e.token=r,e.error=null,e.$emit("success",r)},"error-callback":function(){e.token=null,e.error="Verification failed",e.$emit("error")},"expired-callback":function(){e.token=null,e.$emit("expired")}}))},reset:function(){this.token=null,this.error=null,window.turnstile&&null!==this.widgetId?window.turnstile.reset(this.widgetId):this.renderWidget()},getToken:function(){return this.token},cleanup:function(){if(window.turnstile&&null!==this.widgetId){try{window.turnstile.remove(this.widgetId)}catch(e){}this.widgetId=null}}}},b=v,C=t(845),y=(0,C.A)(b,g,m,!1,null,"20437450",null),$=y.exports,_=t(74053),T=t.n(_),L=t(75314),k={name:"Login",components:{Turnstile:$},data:function(){return{activeTab:"login",showLegal:!1,legalAgreed:!0,legalError:!1,securityConfig:{turnstile_enabled:!1,turnstile_site_key:"",registration_enabled:!0,oauth_google_enabled:!1,oauth_github_enabled:!1},oauthProcessing:!1,oauthError:null,referralCode:"",loginMethod:"password",loginForm:this.$form.createForm(this,{name:"loginForm"}),loginError:"",loginLoading:!1,loginTurnstileToken:null,codeLoginForm:this.$form.createForm(this,{name:"codeLoginForm"}),codeLoginError:"",codeLoginLoading:!1,codeLoginTurnstileToken:null,codeLoginSendingCode:!1,codeLoginCountdown:0,codeLoginCountdownTimer:null,registerForm:this.$form.createForm(this,{name:"registerForm"}),registerError:"",registerLoading:!1,registerTurnstileToken:null,registerSendingCode:!1,registerCountdown:0,registerCountdownTimer:null,regPwdFocused:!1,regHasMinLength:!1,regHasUppercase:!1,regHasLowercase:!1,regHasNumber:!1,showResetModal:!1,resetStep:1,resetForm:this.$form.createForm(this,{name:"resetForm"}),resetPwdForm:this.$form.createForm(this,{name:"resetPwdForm"}),resetError:"",resetLoading:!1,resetTurnstileToken:null,resetSendingCode:!1,resetCountdown:0,resetCountdownTimer:null,resetEmail:"",resetCode:"",resetPwdFocused:!1,resetHasMinLength:!1,resetHasUppercase:!1,resetHasLowercase:!1,resetHasNumber:!1}},computed:{hasOAuth:function(){return this.securityConfig.oauth_google_enabled||this.securityConfig.oauth_github_enabled},regPwdValid:function(){return this.regHasMinLength&&this.regHasUppercase&&this.regHasLowercase&&this.regHasNumber},resetPwdValid:function(){return this.resetHasMinLength&&this.resetHasUppercase&&this.resetHasLowercase&&this.resetHasNumber}},created:function(){var e=this;this.loadSecurityConfig(),this.handleOAuthCallback(),this.$nextTick(function(){e.extractReferralCode()})},watch:{"$route.query":function(){this.extractReferralCode()}},beforeDestroy:function(){this.codeLoginCountdownTimer&&clearInterval(this.codeLoginCountdownTimer),this.registerCountdownTimer&&clearInterval(this.registerCountdownTimer),this.resetCountdownTimer&&clearInterval(this.resetCountdownTimer)},methods:(0,l.A)((0,l.A)({},(0,u.i0)(["Login","Logout"])),{},{loadSecurityConfig:function(){var e=this;return(0,n.A)((0,a.A)().m(function r(){var t;return(0,a.A)().w(function(r){while(1)switch(r.p=r.n){case 0:return r.p=0,r.n=1,(0,d.getSecurityConfig)();case 1:t=r.v,1===t.code&&t.data&&(e.securityConfig=(0,l.A)((0,l.A)({},e.securityConfig),t.data)),r.n=3;break;case 2:r.p=2,r.v;case 3:return r.a(2)}},r,null,[[0,2]])}))()},extractReferralCode:function(){var e=new URLSearchParams(window.location.search),r=new URLSearchParams;if(window.location.hash){var t=window.location.hash.split("?");t.length>1&&(r=new URLSearchParams(t[1]))}var s=this.$route.query.ref||this.$route.query.referral_code;this.referralCode=s||e.get("ref")||e.get("referral_code")||r.get("ref")||r.get("referral_code")||"",this.referralCode&&this.securityConfig.registration_enabled&&(this.activeTab="register")},handleOAuthCallback:function(){var e=this,r=new URLSearchParams(window.location.search),t=new URLSearchParams(window.location.hash.split("?")[1]||""),s=r.get("oauth_token")||t.get("oauth_token"),i=r.get("oauth_error")||t.get("oauth_error");if(i)return this.oauthError=this.$t("user.oauth.error.".concat(i))||"OAuth error: ".concat(i),void window.history.replaceState({},document.title,window.location.pathname+window.location.hash.split("?")[0]);s&&(this.oauthProcessing=!0,T().set(L.Xh,s,(new Date).getTime()+6048e5),window.history.replaceState({},document.title,window.location.pathname+window.location.hash.split("?")[0]),this.$store.dispatch("GetInfo").then(function(){e.$router.push({path:"/"}),e.$notification.success({message:"Welcome",description:"".concat((0,c.Z$)(),", welcome back.")})}).catch(function(r){e.oauthProcessing=!1,e.oauthError="Failed to get user info",T().remove(L.Xh)}))},handleLogin:function(e){var r=this;e.preventDefault(),this.legalError=!1,this.legalAgreed?this.loginForm.validateFields(["username","password"],function(e,t){e||(r.loginLoading=!0,r.loginError="",r.Login((0,l.A)((0,l.A)({},t),{},{turnstile_token:r.loginTurnstileToken})).then(function(){r.$router.push({path:"/"}),r.$notification.success({message:"Welcome",description:"".concat((0,c.Z$)(),", welcome back.")})}).catch(function(e){var t=e.response||{},s=t.data||{};r.loginError=s.msg||e.message||"Login failed",r.$refs.loginTurnstile&&r.$refs.loginTurnstile.reset(),r.loginTurnstileToken=null}).finally(function(){r.loginLoading=!1}))}):this.legalError=!0},handleCodeLoginSendCode:function(){var e=this;return(0,n.A)((0,a.A)().m(function r(){return(0,a.A)().w(function(r){while(1)switch(r.n){case 0:e.codeLoginForm.validateFields(["email"],function(){var r=(0,n.A)((0,a.A)().m(function r(t,s){var i,o,n;return(0,a.A)().w(function(r){while(1)switch(r.p=r.n){case 0:if(!t){r.n=1;break}return r.a(2);case 1:return e.codeLoginSendingCode=!0,e.codeLoginError="",r.p=2,r.n=3,(0,d.sendVerificationCode)({email:s.email,type:"login",turnstile_token:e.codeLoginTurnstileToken});case 3:i=r.v,1===i.code?(e.$message.success(e.$t("user.login.codeSent")||"Verification code sent"),e.startCodeLoginCountdown()):e.codeLoginError=i.msg||"Failed to send code",r.n=5;break;case 4:r.p=4,n=r.v,e.codeLoginError=(null===(o=n.response)||void 0===o||null===(o=o.data)||void 0===o?void 0:o.msg)||"Failed to send code";case 5:return r.p=5,e.codeLoginSendingCode=!1,r.f(5);case 6:return r.a(2)}},r,null,[[2,4,5,6]])}));return function(e,t){return r.apply(this,arguments)}}());case 1:return r.a(2)}},r)}))()},startCodeLoginCountdown:function(){var e=this;this.codeLoginCountdown=60,this.codeLoginCountdownTimer=setInterval(function(){e.codeLoginCountdown--,e.codeLoginCountdown<=0&&(clearInterval(e.codeLoginCountdownTimer),e.codeLoginCountdownTimer=null)},1e3)},handleCodeLogin:function(e){var r=this;e.preventDefault(),this.legalError=!1,this.legalAgreed?this.codeLoginForm.validateFields(function(){var e=(0,n.A)((0,a.A)().m(function e(t,s){var i,n,u,g,m,h,p,f,w,v;return(0,a.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!t){e.n=1;break}return e.a(2);case 1:return r.codeLoginLoading=!0,r.codeLoginError="",e.p=2,e.n=3,(0,d.loginWithCode)({email:s.email,code:s.code,turnstile_token:r.codeLoginTurnstileToken,referral_code:r.referralCode});case 3:if(n=e.v,1!==n.code||null===(i=n.data)||void 0===i||!i.token){e.n=6;break}return u=(new Date).getTime()+6048e5,T().set(L.Xh,n.data.token,u),r.$store.commit("SET_TOKEN",n.data.token),n.data.userinfo&&(g=(0,l.A)({},n.data.userinfo),"undefined"===typeof g.is_demo&&(g.is_demo=!1),T().set(L.nc,g,u),r.$store.commit("SET_INFO",g),g.nickname?r.$store.commit("SET_NAME",{name:g.nickname,welcome:(0,c.Z$)()}):g.username&&r.$store.commit("SET_NAME",{name:g.username,welcome:(0,c.Z$)()}),g.avatar&&r.$store.commit("SET_AVATAR",g.avatar),m=[],m=g.role?Array.isArray(g.role)?g.role:"object"===(0,o.A)(g.role)?[g.role]:[{id:g.role,permissionList:[]}]:[{id:"default",permissionList:[]}],r.$store.commit("SET_ROLES",m),T().set(L.iK,m,u)),e.n=4,r.$nextTick();case 4:return T().get(L.Xh),h=r.$store.getters.roles,0===h.length&&(p=[{id:"default",permissionList:[]}],r.$store.commit("SET_ROLES",p),T().set(L.iK,p,u)),e.n=5,new Promise(function(e){return setTimeout(e,200)});case 5:r.$store.dispatch("ResetRoutes"),f=n.data.is_new_user,r.$router.push({path:"/"}).then(function(){r.$notification.success({message:f?r.$t("user.login.welcomeNew")||"Welcome!":"Welcome",description:f?r.$t("user.login.accountCreated")||"Your account has been created.":"".concat((0,c.Z$)(),", welcome back.")})}).catch(function(e){r.$notification.success({message:f?r.$t("user.login.welcomeNew")||"Welcome!":"Welcome",description:f?r.$t("user.login.accountCreated")||"Your account has been created.":"".concat((0,c.Z$)(),", welcome back.")})}),e.n=7;break;case 6:r.codeLoginError=n.msg||"Login failed",r.$refs.codeLoginTurnstile&&r.$refs.codeLoginTurnstile.reset(),r.codeLoginTurnstileToken=null;case 7:e.n=9;break;case 8:e.p=8,v=e.v,r.codeLoginError=(null===(w=v.response)||void 0===w||null===(w=w.data)||void 0===w?void 0:w.msg)||"Login failed",r.$refs.codeLoginTurnstile&&r.$refs.codeLoginTurnstile.reset(),r.codeLoginTurnstileToken=null;case 9:return e.p=9,r.codeLoginLoading=!1,e.f(9);case 10:return e.a(2)}},e,null,[[2,8,9,10]])}));return function(r,t){return e.apply(this,arguments)}}()):this.legalError=!0},checkRegPassword:function(e){var r=e.target.value||"";this.regHasMinLength=r.length>=8,this.regHasUppercase=/[A-Z]/.test(r),this.regHasLowercase=/[a-z]/.test(r),this.regHasNumber=/[0-9]/.test(r)},validateRegPassword:function(e,r,t){r?r.length<8?t(new Error(this.$t("user.register.pwdMinLength")||"At least 8 characters")):/[A-Z]/.test(r)?/[a-z]/.test(r)?/[0-9]/.test(r)?t():t(new Error(this.$t("user.register.pwdNumber")||"At least one number")):t(new Error(this.$t("user.register.pwdLowercase")||"At least one lowercase letter")):t(new Error(this.$t("user.register.pwdUppercase")||"At least one uppercase letter")):t()},validateRegConfirmPassword:function(e,r,t){var s=this.registerForm.getFieldValue("password");r&&r!==s?t(new Error(this.$t("user.register.passwordMismatch")||"Passwords do not match")):t()},handleRegisterSendCode:function(){var e=this;return(0,n.A)((0,a.A)().m(function r(){return(0,a.A)().w(function(r){while(1)switch(r.n){case 0:e.registerForm.validateFields(["email"],function(){var r=(0,n.A)((0,a.A)().m(function r(t,s){var i,o,n;return(0,a.A)().w(function(r){while(1)switch(r.p=r.n){case 0:if(!t){r.n=1;break}return r.a(2);case 1:return e.registerSendingCode=!0,e.registerError="",r.p=2,r.n=3,(0,d.sendVerificationCode)({email:s.email,type:"register",turnstile_token:e.registerTurnstileToken});case 3:i=r.v,1===i.code?(e.$message.success(e.$t("user.register.codeSent")||"Verification code sent"),e.startRegisterCountdown()):e.registerError=i.msg||"Failed to send code",r.n=5;break;case 4:r.p=4,n=r.v,e.registerError=(null===(o=n.response)||void 0===o||null===(o=o.data)||void 0===o?void 0:o.msg)||"Failed to send code";case 5:return r.p=5,e.registerSendingCode=!1,r.f(5);case 6:return r.a(2)}},r,null,[[2,4,5,6]])}));return function(e,t){return r.apply(this,arguments)}}());case 1:return r.a(2)}},r)}))()},startRegisterCountdown:function(){var e=this;this.registerCountdown=60,this.registerCountdownTimer=setInterval(function(){e.registerCountdown--,e.registerCountdown<=0&&(clearInterval(e.registerCountdownTimer),e.registerCountdownTimer=null)},1e3)},handleRegister:function(e){var r=this;e.preventDefault(),this.legalError=!1,this.legalAgreed?this.registerForm.validateFields(function(){var e=(0,n.A)((0,a.A)().m(function e(t,s){var i,n,u,g,m,h,p,f,w;return(0,a.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!t){e.n=1;break}return e.a(2);case 1:return r.registerLoading=!0,r.registerError="",e.p=2,e.n=3,(0,d.register)({email:s.email,code:s.code,username:s.username,password:s.password,turnstile_token:r.registerTurnstileToken,referral_code:r.referralCode});case 3:if(i=e.v,1!==i.code){e.n=8;break}if(r.$message.success(r.$t("user.register.success")||"Registration successful"),null===(n=i.data)||void 0===n||!n.token){e.n=6;break}return u=(new Date).getTime()+6048e5,T().set(L.Xh,i.data.token,u),r.$store.commit("SET_TOKEN",i.data.token),i.data.userinfo&&(g=(0,l.A)({},i.data.userinfo),"undefined"===typeof g.is_demo&&(g.is_demo=!1),T().set(L.nc,g,u),r.$store.commit("SET_INFO",g),g.nickname?r.$store.commit("SET_NAME",{name:g.nickname,welcome:(0,c.Z$)()}):g.username&&r.$store.commit("SET_NAME",{name:g.username,welcome:(0,c.Z$)()}),g.avatar&&r.$store.commit("SET_AVATAR",g.avatar),m=[],m=g.role?Array.isArray(g.role)?g.role:"object"===(0,o.A)(g.role)?[g.role]:[{id:g.role,permissionList:[]}]:[{id:"default",permissionList:[]}],r.$store.commit("SET_ROLES",m),T().set(L.iK,m,u)),e.n=4,r.$nextTick();case 4:return T().get(L.Xh),h=r.$store.getters.roles,0===h.length&&(p=[{id:"default",permissionList:[]}],r.$store.commit("SET_ROLES",p),T().set(L.iK,p,u)),e.n=5,new Promise(function(e){return setTimeout(e,200)});case 5:r.$store.dispatch("ResetRoutes"),r.$router.push({path:"/"}).then(function(){r.$notification.success({message:"Welcome",description:"".concat((0,c.Z$)(),", welcome to QuantDinger!")})}).catch(function(e){r.$notification.success({message:"Welcome",description:"".concat((0,c.Z$)(),", welcome to QuantDinger!")})}),e.n=7;break;case 6:r.activeTab="login",r.$message.info(r.$t("user.register.pleaseLogin")||"Please login with your new account");case 7:e.n=9;break;case 8:r.registerError=i.msg||"Registration failed",r.$refs.registerTurnstile&&r.$refs.registerTurnstile.reset(),r.registerTurnstileToken=null;case 9:e.n=11;break;case 10:e.p=10,w=e.v,r.registerError=(null===(f=w.response)||void 0===f||null===(f=f.data)||void 0===f?void 0:f.msg)||"Registration failed",r.$refs.registerTurnstile&&r.$refs.registerTurnstile.reset(),r.registerTurnstileToken=null;case 11:return e.p=11,r.registerLoading=!1,e.f(11);case 12:return e.a(2)}},e,null,[[2,10,11,12]])}));return function(r,t){return e.apply(this,arguments)}}()):this.legalError=!0},resetResetModal:function(){this.resetStep=1,this.resetError="",this.resetEmail="",this.resetCode="",this.resetCountdown=0,this.resetCountdownTimer&&(clearInterval(this.resetCountdownTimer),this.resetCountdownTimer=null)},handleResetSendCode:function(){var e=this;return(0,n.A)((0,a.A)().m(function r(){return(0,a.A)().w(function(r){while(1)switch(r.n){case 0:e.resetForm.validateFields(["email"],function(){var r=(0,n.A)((0,a.A)().m(function r(t,s){var i,o,n;return(0,a.A)().w(function(r){while(1)switch(r.p=r.n){case 0:if(!t){r.n=1;break}return r.a(2);case 1:return e.resetSendingCode=!0,e.resetError="",r.p=2,r.n=3,(0,d.sendVerificationCode)({email:s.email,type:"reset_password",turnstile_token:e.resetTurnstileToken});case 3:i=r.v,1===i.code?(e.$message.success(e.$t("user.resetPassword.codeSent")||"Verification code sent"),e.startResetCountdown()):e.resetError=i.msg||"Failed to send code",r.n=5;break;case 4:r.p=4,n=r.v,e.resetError=(null===(o=n.response)||void 0===o||null===(o=o.data)||void 0===o?void 0:o.msg)||"Failed to send code";case 5:return r.p=5,e.resetSendingCode=!1,r.f(5);case 6:return r.a(2)}},r,null,[[2,4,5,6]])}));return function(e,t){return r.apply(this,arguments)}}());case 1:return r.a(2)}},r)}))()},startResetCountdown:function(){var e=this;this.resetCountdown=60,this.resetCountdownTimer=setInterval(function(){e.resetCountdown--,e.resetCountdown<=0&&(clearInterval(e.resetCountdownTimer),e.resetCountdownTimer=null)},1e3)},handleResetVerify:function(e){var r=this;e.preventDefault(),this.resetError="",this.resetForm.validateFields(function(e,t){e||(r.resetEmail=t.email,r.resetCode=t.code,r.resetStep=2)})},checkResetPassword:function(e){var r=e.target.value||"";this.resetHasMinLength=r.length>=8,this.resetHasUppercase=/[A-Z]/.test(r),this.resetHasLowercase=/[a-z]/.test(r),this.resetHasNumber=/[0-9]/.test(r)},validateResetPassword:function(e,r,t){r?r.length<8?t(new Error(this.$t("user.register.pwdMinLength")||"At least 8 characters")):/[A-Z]/.test(r)?/[a-z]/.test(r)?/[0-9]/.test(r)?t():t(new Error(this.$t("user.register.pwdNumber")||"At least one number")):t(new Error(this.$t("user.register.pwdLowercase")||"At least one lowercase letter")):t(new Error(this.$t("user.register.pwdUppercase")||"At least one uppercase letter")):t()},validateResetConfirmPassword:function(e,r,t){var s=this.resetPwdForm.getFieldValue("new_password");r&&r!==s?t(new Error(this.$t("user.register.passwordMismatch")||"Passwords do not match")):t()},handleResetPassword:function(e){var r=this;return(0,n.A)((0,a.A)().m(function t(){return(0,a.A)().w(function(t){while(1)switch(t.n){case 0:e.preventDefault(),r.resetError="",r.resetPwdForm.validateFields(function(){var e=(0,n.A)((0,a.A)().m(function e(t,s){var i,o,n,l,u;return(0,a.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!t){e.n=1;break}return e.a(2);case 1:return r.resetLoading=!0,e.p=2,e.n=3,(0,d.resetPassword)({email:r.resetEmail,code:r.resetCode,new_password:s.new_password,turnstile_token:r.resetTurnstileToken});case 3:i=e.v,1===i.code?r.resetStep=3:(r.resetError=i.msg||"Failed to reset password",(null!==(o=i.msg)&&void 0!==o&&o.includes("code")||null!==(n=i.msg)&&void 0!==n&&n.includes("expired"))&&(r.resetStep=1)),e.n=5;break;case 4:e.p=4,u=e.v,r.resetError=(null===(l=u.response)||void 0===l||null===(l=l.data)||void 0===l?void 0:l.msg)||"Failed to reset password";case 5:return e.p=5,r.resetLoading=!1,e.f(5);case 6:return e.a(2)}},e,null,[[2,4,5,6]])}));return function(r,t){return e.apply(this,arguments)}}());case 1:return t.a(2)}},t)}))()},handleGoogleLogin:function(){window.location.href=(0,d.getGoogleOAuthUrl)()},handleGitHubLogin:function(){window.location.href=(0,d.getGitHubOAuthUrl)()}})},P=k,A=(0,C.A)(P,s,i,!1,null,"de9678f6",null),E=A.exports},95824:function(e,r,t){t.r(r),t.d(r,{changePassword:function(){return m},getGitHubOAuthUrl:function(){return p},getGoogleOAuthUrl:function(){return h},getSecurityConfig:function(){return o},getUserInfo:function(){return l},login:function(){return a},loginWithCode:function(){return c},logout:function(){return n},register:function(){return d},resetPassword:function(){return g},sendVerificationCode:function(){return u}});var s=t(75769);function i(e){var r="/api".trim(),t=e.startsWith("/")?e:"/".concat(e);if(!r)return t;var s=r.replace(/\/+$/,"");return s.endsWith("/api")&&t.startsWith("/api/")?s+t.slice(4):s+t}function o(){return(0,s.Ay)({url:"/api/auth/security-config",method:"get"})}function a(e){return(0,s.Ay)({url:"/api/auth/login",method:"post",data:e})}function n(){return(0,s.Ay)({url:"/api/auth/logout",method:"post"})}function l(){return(0,s.Ay)({url:"/api/auth/info",method:"get"})}function u(e){return(0,s.Ay)({url:"/api/auth/send-code",method:"post",data:e})}function c(e){return(0,s.Ay)({url:"/api/auth/login-code",method:"post",data:e})}function d(e){return(0,s.Ay)({url:"/api/auth/register",method:"post",data:e})}function g(e){return(0,s.Ay)({url:"/api/auth/reset-password",method:"post",data:e})}function m(e){return(0,s.Ay)({url:"/api/auth/change-password",method:"post",data:e})}function h(){return i("/api/auth/oauth/google")}function p(){return i("/api/auth/oauth/github")}}}]); \ No newline at end of file